ZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjM2M2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9BVVRIT1JTCkBAIC0wLDAgKzEsMjA4IEBACitMaWJyYXJ5OiBMaWJnY3J5cHQKK0hvbWVwYWdlOiBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliZ2NyeXB0LworTWFpbnRhaW5lcjogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0J1ZyByZXBvcnRzOiBodHRwOi8vYnVncy5nbnVwZy5vcmcKK1NlY3VyaXR5IHJlbGF0ZWQgYnVnIHJlcG9ydHM6IDxzZWN1cml0eUBnbnVwZy5vcmc+CitMaWNlbnNlIChsaWJyYXJ5KTogTEdQTHYyLjErCitMaWNlbnNlIChtYW51YWwgYW5kIHRvb2xzKTogR1BMdjIrCisKK0xpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlLiAgU2VlIHRoZSBmaWxlcyBDT1BZSU5HLkxJQiBhbmQgQ09QWUlORyBmb3IKK2NvcHlpbmcgY29uZGl0aW9ucywgYW5kIExJQ0VOU0VTIGZvciBub3RpY2VzIGFib3V0IGEgZmV3IGNvbnRyaWJ1dGlvbnMKK3RoYXQgcmVxdWlyZSB0aGVzZSBhZGRpdGlvbmFsIG5vdGljZXMgdG8gYmUgZGlzdHJpYnV0ZWQuICBMaWNlbnNlCitjb3B5cmlnaHQgeWVhcnMgbWF5IGJlIGxpc3RlZCB1c2luZyByYW5nZSBub3RhdGlvbiwgZS5nLiwgMjAwMC0yMDEzLAoraW5kaWNhdGluZyB0aGF0IGV2ZXJ5IHllYXIgaW4gdGhlIHJhbmdlLCBpbmNsdXNpdmUsIGlzIGEgY29weXJpZ2h0YWJsZQoreWVhciB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBsaXN0ZWQgaW5kaXZpZHVhbGx5LgorCisKK0xpc3Qgb2YgQ29weXJpZ2h0IGhvbGRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKEMpIDE5ODksMTk5MS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisgIENvcHlyaWdodCAoQykgMTk5NiBMLiBQZXRlciBEZXV0c2NoCisgIENvcHlyaWdodCAoQykgMTk5NyBXZXJuZXIgS29jaAorICBDb3B5cmlnaHQgKEMpIDE5OTggVGhlIEludGVybmV0IFNvY2lldHkKKyAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUGV0ZXIgR3V0bWFubiwgUGF1bCBLZW5kYWxsLCBhbmQgQ2hyaXMgV2VkZ3dvb2QKKyAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDYgUGV0ZXIgR3V0bWFubiwgTWF0dCBUaG9tbGluc29uIGFuZCBCbGFrZSBDb3ZlcmV0dAorICBDb3B5cmlnaHQgKEMpIDIwMDMgTmlrb3MgTWF2cm95YW5vcG91bG9zCisgIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IE5UVCAoTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnBvcmF0aW9uKQorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBnMTAgQ29kZSBHbWJICisgIENvcHlyaWdodCAoQykgMjAxMiBTaW1vbiBKb3NlZnNzb24sIE5pZWxzIE3DtmxsZXIKKyAgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisgIENvcHlyaWdodCAoQykgMjAxMyBDaHJpc3RpYW4gR3JvdGhvZmYKKyAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgSnVzc2kgS2l2aWxpbm5hCisgIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IERtaXRyeSBFcmVtaW4tU29sZW5pa292CisKKworQXV0aG9ycyB3aXRoIGEgRlNGIGNvcHlyaWdodCBhc3NpZ25tZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTElCR0NSWVBUICAgICAgIFdlcm5lciBLb2NoICAgIDIwMDEtMDYtMDcKK0Fzc2lnbnMgcGFzdCBhbmQgZnV0dXJlIGNoYW5nZXMuCitBc3NpZ25tZW50IGZvciBmdXR1cmUgY2hhbmdlcyB0ZXJtaW5hdGVkIG9uIDIwMTItMTItMDQuCit3a0BnbnVwZy5vcmcKK0Rlc2lnbmVkIGFuZCBpbXBsZW1lbnRlZCBMaWJnY3J5cHQuCisKK0dOVVBHCU1hdHRoZXcgU2thbGEJCSAgIDE5OTgtMDgtMTAKK0Rpc2NsYWltcyBjaGFuZ2VzLgorbXNrYWxhQGFuc3V6LnNvb2tlLmJjLmNhCitXcm90ZSBjaXBoZXIvdHdvZmlzaC5jLgorCitHTlVQRwlOYXR1cmFsIFJlc291cmNlcyBDYW5hZGEgICAgMTk5OC0wOC0xMQorRGlzY2xhaW1zIGNoYW5nZXMgYnkgTWF0dGhldyBTa2FsYS4KKworR05VUEcJTWljaGFlbCBSb3RoCUdlcm1hbnkgICAgIDE5OTgtMDktMTcKK0Fzc2lnbnMgY2hhbmdlcy4KK21yb3RoQG5lc3NpZS5kZQorV3JvdGUgY2lwaGVyL2Rlcy5jLgorQ2hhbmdlcyBhbmQgYnVnIGZpeGVzIGFsbCBvdmVyIHRoZSBwbGFjZS4KKworR05VUEcJTmlrbGFzIEhlcm5hZXVzIAkxOTk4LTA5LTE4CitEaXNjbGFpbXMgY2hhbmdlcy4KK25oQGRmLmx0aC5zZQorV2VhayBrZXkgcGF0Y2hlcy4KKworR05VUEcJUsOpbWkgR3V5b21hcmNoCQkxOTk5LTA1LTI1CitBc3NpZ25zIHBhc3QgYW5kIGZ1dHVyZSBjaGFuZ2VzLiAoZzEwL2NvbXByZXNzLmMsIGcxMC9lbmNyLWRhdGEuYywKK2cxMC9mcmVlLXBhY2tldC5jLCBnMTAvbWRmaWx0ZXIuYywgZzEwL3BsYWludGV4dC5jLCB1dGlsL2lvYnVmLmMpCityZ3V5b21AbWFpbC5kb3Rjb20uZnIKKworQU5ZICAgICBnMTAgQ29kZSBHbWJIICAgICAgICAgICAyMDAxLTA2LTA3CitBc3NpZ25tZW50IGZvciBmdXR1cmUgY2hhbmdlcyB0ZXJtaW5hdGVkIG9uIDIwMTItMTItMDQuCitDb2RlIG1hcmtlZCB3aXRoIENoYW5nZUxvZyBlbnRyaWVzIG9mIGcxMCBDb2RlIGVtcGxveWVlcy4KKworTElCR0NSWVBUIFRpbW8gU2NodWx6ICAgICAgICAgICAyMDAxLTA4LTMxCitBc3NpZ25zIHBhc3QgYW5kIGZ1dHVyZSBjaGFuZ2VzLgordHdvYWRheUBmcmVha21haWwuZGUKKworTElCR0NSWVBUIFNpbW9uIEpvc2Vmc3NvbiAgICAgICAyMDAyLTEwLTI1CitBc3NpZ25zIHBhc3QgYW5kIGZ1dHVyZSBjaGFuZ2VzIHRvIEZTRiAoY2lwaGVyL3ttZDQsY3JjfS5jLCBDVFIgbW9kZSwKK0NUUy9NQUMgZmxhZ3MsIHNlbGYgdGVzdCBpbXByb3ZlbWVudHMpCitzaW1vbkBqb3NlZnNzb24ub3JnCisKK0xJQkdDUllQVCBNb3JpdHogU2NodWx0ZQkyMDAzLTA0LTE3CitBc3NpZ25zIHBhc3QgYW5kIGZ1dHVyZSBjaGFuZ2VzLgorbW9yaXR6QGcxMGNvZGUuY29tCisKK0dOVVRMUyAgTmlrb2xhb3MgTWF2cm9naWFubm9wb3Vsb3MgIDIwMDMtMTEtMjIKK25tYXZAZ251dGxzLm9yZworT3JpZ2luYWwgY29kZSBmb3IgY2lwaGVyL3JmYzIyNjguYy4KKworTElCR0NSWVBUCVRoZSBXcml0dGVuIFdvcmQJMjAwNS0wNC0xNQorQXNzaWducyBwYXN0IGFuZCBmdXR1cmUgY2hhbmdlcy4gKG5ldzogc3JjL2xpYmdjcnlwdC5wYy5pbiwKK3NyYy9NYWtlZmlsZS5hbSwgc3JjL3NlY21lbS5jLCBtcGkvaHBwYTEuMS9tcGloLW11bDMuUywKK21waS9ocHBhMS4xL3VkaXYtcXJubmQuUywgbXBpL2hwcGExLjEvbXBpaC1tdWwyLlMsCittcGkvaHBwYTEuMS9tcGloLW11bDEuUywgbXBpL01ha2VmaWxlLmFtLCB0ZXN0cy9wcmltZS5jLAordGVzdHMvcmVnaXN0ZXIuYywgdGVzdHMvYWMuYywgdGVzdHMvYmFzaWMuYywgdGVzdHMvdHNleHAuYywKK3Rlc3RzL2tleWdlbi5jLCB0ZXN0cy9wdWJrZXkuYywgY29uZmlndXJlLmFjLCBhY2luY2x1ZGUubTQpCisKK0xJQkdDUllQVCAgICAgICBCcmFkIEhhcmRzICAgICAgIDIwMDYtMDItMDkKK0Fzc2lnbnMgUGFzdCBhbmQgRnV0dXJlIENoYW5nZXMKK2JyYWRoQGZyb2dtb3V0aC5uZXQKKyhBZGRlZCBPRkIgbW9kZS4gQ2hhbmdlZCBjaXBoZXIvY2lwaGVyLmMsIHRlc3QvYmFzaWMuYyBkb2MvZ2NyeXB0LnRleC4KKyBhZGRlZCBTSEEtMjI0LCBjaGFuZ2VkIGNpcGhlci9zaGEyNTYuYywgYWRkZWQgSE1BQyB0ZXN0cy4pCisKK0xJQkdDUllQVCAgICAgICBIeWUtU2hpayBDaGFuZyAgIDIwMDYtMDktMDcKK0Fzc2lnbnMgUGFzdCBhbmQgRnV0dXJlIENoYW5nZXMKK3Blcmt5QGZyZWVic2Qub3JnCisoU0VFRCBjaXBoZXIpCisKK0xJQkdDUllQVCAgICAgICBXZXJuZXIgRGl0dG1hbm4gIDIwMDktMDUtMjAKK0Fzc2lnbnMgUGFzdCBhbmQgRnV0dXJlIENoYW5nZXMKK3dlcm5lci5kaXR0bWFubkB0LW9ubGluZS5kZQorKG1waS9hbWQ2NCwgdGVzdHMvbXBpdGVzdHMuYykKKworR05VUEcgICAgICAgICAgIERhdmlkIFNoYXcKK0Fzc2lnbnMgcGFzdCBhbmQgZnV0dXJlIGNoYW5nZXMuCitkc2hhd0BqYWJiZXJ3b2NreS5jb20KKyhjaXBoZXIvY2FtZWxsaWEtZ2x1ZS5jIGFuZCByZWxhdGVkIHN0dWZmKQorCitMSUJHQ1JZUFQgICAgICAgQW5kcmV5IEppdnNvdiAgICAyMDEwLTEyLTA5CitBc3NpZ25zIFBhc3QgYW5kIEZ1dHVyZSBDaGFuZ2VzCitvcGVucGdwQGJyYWluaHViLm9yZworKGNpcGhlci9lY2MuYyBhbmQgcmVsYXRlZCBmaWxlcykKKworTElCR0NSWVBUICAgICAgIFVscmljaCBNw7xsbGVyICAgIDIwMTItMDItMTUKK0Fzc2lnbnMgUGFzdCBhbmQgRnV0dXJlIENoYW5nZXMKK3VsbUBnZW50b28ub3JnCisoQ2hhbmdlcyB0byBjaXBoZXIvaWRlYS5jIGFuZCByZWxhdGVkIGZpbGVzKQorCitMSUJHQ1JZUFQgICAgICAgVmxhZGltaXIgU2VyYmluZW5rbyAgMjAxMi0wNC0yNgorQXNzaWducyBQYXN0IGFuZCBGdXR1cmUgQ2hhbmdlcworcGhjb2RlckBnbWFpbC5jb20KKyhjaXBoZXIvc2VycGVudC5jKQorCisKK0F1dGhvcnMgd2l0aCBhIERDTworPT09PT09PT09PT09PT09PT09CisKK0NocmlzdGlhbiBBaXN0bGVpdG5lciA8Y2hyaXN0aWFuQHF1ZWxsdGV4dGxpY2guYXQ+CisyMDEzLTAyLTI2OjIwMTMwMjI2MTEwMTQ0LkdBMTI2NzhAcXVlbGx0ZXh0bGljaC5hdDoKKworQ2hyaXN0aWFuIEdyb3Rob2ZmIDxjaHJpc3RpYW5AZ3JvdGhvZmYub3JnPgorMjAxMy0wMy0yMTo1MTRCNUQ4QS42MDQwNzA1QGdyb3Rob2ZmLm9yZzoKKworRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorMjAxMy0wNy0xMzoyMDEzMDcxMzE0NDQwNy5HQTI3MzM0QGZhbmdvcm4ucnVwLm1lbnRvcmcuY29tOgorCitEbWl0cnkgS2FzYXRraW4gPGRtaXRyeS5rYXNhdGtpbkBpbnRlbC5jb20+CisyMDEyLTEyLTE0OjUwQ0FFMkRCLjgwMzAyQGludGVsLmNvbToKKworSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAbWJuZXQuZmk+CisyMDEyLTExLTE1OjIwMTIxMTE1MTcyMzMxLjE1MDUzN2R6YjVpNmpteThAd3d3LmRhbGVrLmZpOgorCitKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisyMDEzLTA1LTA2OjUxODY3MjBBLjQwOTAxMDFAaWtpLmZpOgorCitSYWZhw6tsIENhcnLDqSA8ZnVubWFuQHZpZGVvbGFuLm9yZz4KKzIwMTItMDQtMjA6NEY5MTk4OEIuMTA4MDUwMkB2aWRlb2xhbi5vcmc6CisKK1NlcmdleSBWLiA8c2Z0cC5tdHVjaUBnbWFpbC5jb20+CisyMDEzLTExLTA3OjIwNjYyMjEuNUlZYTdZcTc2MEBkYXJrc3RhcjoKKworVG9tw6HFoSBNcsOheiA8dG1AdDhtLmluZm8+CisyMDEyLTA0LTE2OjEzMzQ1NzEyNTAuNTA1Ni41Mi5jYW1lbEB2ZXNwYS5mcm9zdC5sb2M6CisKK1dlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+IChnMTAgQ29kZSBHbWJIKQorMjAxMi0xMi0wNTo4N29iaTh1NGgyLmZzZkB2aWdlbmVyZS5nMTBjb2RlLmRlOgorCisKK01vcmUgY3JlZGl0cworPT09PT09PT09PT09CisKK0xpYmdjcnlwdCB1c2VkIHRvIGJlIHBhcnQgb2YgR251UEcgYnV0IGhhcyBiZWVuIHRha2VuIG91dCBpbnRvIGl0cyBvd24KK3BhY2thZ2Ugb24gMjAwMC0xMi0yMS4KKworVGhlIEFUSCBpbXBsZW1lbnRhdGlvbiAoc3JjL2F0aCopIGhhcyBiZWVuIHRha2VuIGZyb20gR1BHTUUgYW5kCityZWxpY2Vuc2VkIHRvIHRoZSBMR1BMIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIEdQR01FIChnMTAgQ29kZQorR21iSCk7IGl0IGlzIG5vdyBjb25zaWRlcmVkIHRvIGJlIGEgcGFydCBvZiBMaWJnY3J5cHQuCisKK01vc3Qgb2YgdGhlIHN0dWZmIGluIG1waSBoYXMgYmVlbiB0YWtlbiBmcm9tIGFuIG9sZCBHTVAgbGlicmFyeQordmVyc2lvbiBieSBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBub2lzeS50bWcuc2U+LgorCitUaGUgZmlsZXMgY2lwaGVyL3JuZHVuaXguYyBhbmQgY2lwaGVyL3JuZHczMi5jIGFyZSBiYXNlZCBvbiB0aG9zZQorZmlsZXMgZnJvbSBDcnlwdGxpYi4gIENvcHlyaWdodCBQZXRlciBHdXRtYW5uLCBQYXVsIEtlbmRhbGwsIGFuZCBDaHJpcworV2VkZ3dvb2QgMTk5Ni0xOTk5LgorCitUaGUgRUNDIGNvZGUgY2lwaGVyL2VjYy5jIHdhcyBiYXNlZCBvbiBjb2RlIGJ5IFNlcmdpIEJsYW5jaCBpIFRvcm5lLAorc2VyZ2kgYXQgY2FsY3VyY28gZG90IG9yZy4KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYW1lbGxpYSBjaXBoZXIgaGFzIGJlZW4gYmVlbiB0YWtlbiBmcm9tIHRoZQorb3JpZ2luYWwgTlRUIHByb3ZpZGVkIEdQTCBzb3VyY2UuCisKK1RoZSBDQVZTIHRlc3RpbmcgcHJvZ3JhbSB0ZXN0cy9jYXZzX2RyaXZlci5wbCBpcyBub3QgdG8gYmUgY29uc2lkZXJlZAorYSBwYXJ0IG9mIGxpYmdjcnlwdCBwcm9wZXIuICBXZSBkaXN0cmlidXRlIGl0IG1lcmVseSBmb3IgY29udmVuaWVuY2UuCitJdCBoYXMgYSBwZXJtaXNzaXZlIGxpY2Vuc2UgYW5kIGlzIGNvcHlyaWdodGVkIGJ5IGF0c2VjIGluZm9ybWF0aW9uCitzZWN1cml0eSBjb3Jwb3JhdGlvbi4gIFNlZSB0aGUgZmlsZSBmb3IgZGV0YWlscy4KKworVGhlIGZpbGUgc2Fsc2EyMC5jIGlzIGJhc2VkIG9uIEQuSi4gQmVybnN0ZWluJ3MgcHVibGljIGRvbWFpbiBjb2RlIGFuZAordGFrZW4gZnJvbSBOZXR0bGUuICBDb3B5cmlnaHQgMjAxMiBTaW1vbiBKb3NlZnNzb24gYW5kIE5pZWxzIE3DtmxsZXIuCisKKworIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBjMzFhCi0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9DT1BZSU5HLkxJQiBiL0NPUFlJTkcuTElCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOWI2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLkxJQgpAQCAtMCwwICsxLDUxMCBAQAorCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucworYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCiteTAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQKK2JlY29tZXMgYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdAorYmUgYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCiteTAorICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIKK3Byb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCitvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuCitFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCitwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKyh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKyAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKK3doaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorXkwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorXkwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0CisgICAgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbgorICAgIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mCisgICAgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KK15MCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKK3RoaXMgTGljZW5zZS4KK15MCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQorY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KK15MCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworXkwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LgorSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QKK2VmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZAoraGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsCitub3RpY2UgaXMgZm91bmQuCisKKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyAgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IKK3lvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwKK2lmIG5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcworICBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ2ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsNDIxNiBAQAorMjAxNC0wMS0yOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlIDEuNi4xLgorCSogY29uZmlndXJlLmFjOiBTZXQgTFQgdmVyc2lvbiB0byBDMjAvQTAvUjEuCisKKwlSZXNlcnZlIGNvbnRyb2wgY29kZSBmb3IgRklQUyBleHRlbnNpb25zLgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZQ1RMX0lOQUNUSVZBVEVfRklQU19GTEFHKTogTmV3LgorCShHQ1JZQ1RMX1JFQUNUSVZBVEVfRklQU19GTEFHKTogTmV3LgorCSogc3JjL2dsb2JhbC5jIChfZ2NyeV92Y29udHJvbCk6IEFkZCB0aGVtIGJ1dCByZXR1cm4gbm90X2ltcGxlbWVudGVkLgorCisJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYWVhOTZhNjRmYmM1OGEwYjZmOWY0MzVlOTdlOTMyOTRjNmViMTA1MikKKworCVN1cHBvcnQgbm9uIHdlYWsgc3ltYm9sIHB0aHJlYWQgcGxhdGZvcm1zLgorCSogbTQvbG9jay5tNCwgbTQvdGhyZWFkbGliLm00OiBOZXcuICBGcm9tIGxpYmdwZy1lcnJvciBtYXN0ZXIuCisJKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCB0aGVtLgorCSogY29uZmlndXJlLmFjIChIQVZFX1BUSFJFQUQpOiBSZW1vdmUgdGVzdCBhbmQgYWNfZGVmaW5lLgorCShnbF9MT0NLKTogRG8gbm90IHVzZSB1bmRlciBXaW5kb3dzLgorCShMSUJHQ1JZUFRfQ09ORklHX0xJQlMpOiBBZGQgTElCVEhSRUFEIHRvIHN1cHBvcnQgbm9uLUVMRiBwdGhyZWFkCisJc3lzdGVtcy4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoZHVtcHNleHBfTERBREQsIG1waWNhbGNfTERBREQsIGhtYWMyNTZfTERBREQpCisJKGdjcnlwdHJuZF9MREFERCk6IEFkZCBMSUJUSFJFQUQuCisJKiBzcmMvYXRoLmM6IEluY2x1ZGUgcHRocmVhZCBmb3IgYW55IHB0aHJlYWQgdmVyc2lvbi4KKwkoYXRoX2luaXQsIGF0aF9pbnN0YWxsLCBhdGhfbXV0ZXhfaW5pdCwgYXRoX211dGV4X2Rlc3Ryb3kpCisJKGF0aF9tdXRleF9sb2NrLCBhdGhfbXV0ZXhfdW5sb2NrKTogU3VwcG9ydCBub24td2VhayBzeW1ib2wgcHRocmVhZAorCXN5c3RlbXMuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoTERBREQpOiBBZGQgTElCVEhSRUFELgorCSogdGVzdHMvdC1sb2NrLmM6IFJlcGxhY2UgSEFWRV9QVEhSRUFEIGJ5IFVTRV9QT1NJWF9USFJFQURTCisJKHJ1bl90ZXN0KTogUnVuIG9ubHkgdW5kZXIgVzMyIG9yIHB0aHJlYWQuCisKKwl0ZXN0czogUmVtb3ZlIG5vbi1wb3J0YWJsZSBmb3JtYXQgc3BlY2lmaWVycy4KKwkqIHRlc3RzL2Jhc2ljLmM6IFJlcGxhY2UgIiV6aSIgYnkgIiVkIiBhbmQgY2FzdHMuCisKKzIwMTQtMDEtMjkgIE5JSUJFIFl1dGFrYSAgPGduaWliZUBmc2lqLm9yZz4KKworCUZpeCBSU0EgQmxpbmRpbmcuCisJKiBjaXBoZXIvcnNhLmMgKHJzYV9kZWNyeXB0KTogTG9vcCB0byBnZXQgbXVsdGlwbGljYXRpdmUgaW52ZXJzZS4KKworCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDEyMWE5MGQ4OTMxOTQ0OTc0MDU0ZjdkOTRmNjNiN2Y4OWRmODdmYTUpCisKKzIwMTQtMDEtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJc2V4cDogRml4IGJyb2tlbiBnY3J5X3NleHBfbnRoLgorCSogc3JjL3NleHAuYyAoX2djcnlfc2V4cF9udGgpOiBSZXR1cm4gYSB2YWxpZCBTLWV4cHJlc3Npb24gZm9yIGEgZGF0YQorCWVsZW1lbnQuCisJKE5PREUpOiBSZW1vdmUgdW51c2VkIHR5cGVkZWYuCisJKFNUX0hJTlQpOiBDb21tZW50IHVudXNlZCBtYWNyby4KKworCSogdGVzdHMvdHNleHAuYyAoYnVnXzE1OTQpOiBOZXcuCisJKG1haW4pOiBSdW4gbmV3IHRlc3QuCisKKzIwMTQtMDEtMjcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJbXBpOiBNaW5vciBmaXggZm9yIEF0YXJpLW1pbnQuCisJKiBtcGkvY29uZmlnLmxpbmtzIFttNjhrLWF0YXJpLW1pbnRdOiBEbyBub3QgYXNzdW1lIDY4MDIwLiAgU3VnZ2VzdGVkCisJYnkgQWxhbiBIb3VyaWhhbmUuCisKKzIwMTQtMDEtMjcgIERtaXRyeSBFcmVtaW4tU29sZW5pa292ICA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisKKwl0ZXN0czogUGFzcyAtbm8taW5zdGFsbCB0byBsaWJ0b29sLgorCSogdGVzdHMvTWFrZWZpbGUuYW06IGFkZCBBTV9MREZMQUdTID0gLW5vLWluc3RhbGwKKworCUZpeCBtb3N0IG9mIG1lbW9yeSBsZWFrcyBpbiB0ZXN0cyBjb2RlLgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfY2NtX2NpcGhlcik6IENsb3NlIGNpcGhlciBhZnRlciB1c2UuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19vbmVfY2lwaGVyKTogQ29ycmVjdCBsZW5ndGggb2YgdXNlZCBidWZmZXIuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAoY2lwaGVyX2JlbmNoKTogVXNlIHhjYWxsb2MgdG8gbWFrZSBidWZmZXIKKwkgIGluaXRpYWxpemVkLgorCSogdGVzdHMva2V5Z2VuLmMgKGNoZWNrX2VjY19rZXlzKTogUmVsZWFzZSBnZW5lcmF0ZWQga2V5LgorCSogdGVzdHMvdC1tcGktcG9pbnQuYyAoY29udGV4dF9wYXJhbSk6IFJlbGVhc2UgbXBpIFEuCisJKiB0ZXN0cy90LXNleHAuYyAoY2hlY2tfZXh0cmFjdF9wYXJhbSk6IFJlbGVhc2UgZXh0cmFjdGVkIG51bWJlci4KKworCUZpeCBtZW1vcnkgbGVha3MgaW4gZWNjIGNvZGUuCisJKiBjaXBoZXIvZWNjLWN1cnZlcy5jIChfZ2NyeV9lY2NfdXBkYXRlX2N1cnZlX3BhcmFtKTogUmVsZWFzZSBwYXNzZWQgbXBpCisJICB2YWx1ZXMuCisJKiBjaXBoZXIvZWNjLmMgKGNvbXB1dGVfa2V5Z3JpcCk6IEZpeCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4gZXJyb3IKKwkgIHBhdGguCisJKiBjaXBoZXIvZWNjLmMgKF9nY3J5X2VjY19nZXRfY3VydmUpOiBSZWxlYXNlIHRlbXBvcmFyeSBtcGkuCisKKzIwMTQtMDEtMjQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQ2hlY2sgY29tcGlsZXIgZmVhdHVyZXMgb25seSBmb3IgdGhlIHJlbGV2YW50IHBsYXRmb3JtLgorCSogbXBpL2NvbmZpZy5saW5rcyAobXBpX2NwdV9hcmNoKTogQWx3YXlzIHNldCBmb3IgQVJNLiAgU2V0IGZvciBIUFBBLgorCVNldCB0byAidW5kZWZpbmVkIiBmb3IgdW5rbm93biBwbGF0Zm9ybXMuCisJKHRyeV9hc21fbW9kdWxlcyk6IEFjdCB1cG9uIG9ubHkgYWZ0ZXIgaGF2aW5nIGRldGVjdGVkIHRoZSBDUFUuCisJKiBjb25maWd1cmUuYWM6IE1vdmUgdGhlIGNhbGwgdG8gY29uZmlnLmxpbmtzIGJlZm9yZSB0aGUgcGxhdGZvcm0KKwlzcGVjaWZpYyBjb21waWxlciBjaGVja3MuICBDaGVjayBwbGF0Zm9ybSBzcGVjaWZpYyBmZWF0dXJlcyBvbmx5IGlmCisJdGhlIHBsYXRmb3JtIGlzIHRhcmdldGVkLgorCisyMDE0LTAxLTI0ICBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiAgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorCisJVHJ1bmNhdGUgaGFzaCB2YWx1ZXMgZm9yIEVDRFNBIHNpZ25hdHVyZSBzY2hlbWUuCisJKiBjaXBoZXIvZHNhLWNvbW1vbiAoX2djcnlfZHNhX25vcm1hbGl6ZV9oYXNoKTogTmV3LiBUcnVuY2F0ZSBvcGFxdWUKKwkgIG1waXMgYXMgcmVxdWlyZWQgZm9yIERTQSBhbmQgRUNEU0Egc2lnbmF0dXJlIHNjaGVtYXMuCisJKiBjaXBoZXIvZHNhLmMgKHZlcmlmeSk6IFJldHVybiBncGdfZXJyX2NvZGVfdCB2YWx1ZSBmcm9tIHZlcmlmeSgpIHRvCisJICBiZWhhdmUgbGlrZSB0aGUgcmVzdCBvZiBpbnRlcm5hbCBzaWduL3ZlcmlmeSBmdW5jdGlvbnMuCisJKiBjaXBoZXIvZHNhLmMgKHNpZ24sIHZlcmlmeSwgZHNhX3ZlcmlmeSk6IEZhY3RvciBvdXQgaGFzaCB0cnVuY2F0aW9uLgorCSogY2lwaGVyL2VjYy1lY2RzYS5jIChfZ2NyeV9lY2NfZWNkc2Ffc2lnbik6IEZhY3RvciBvdXQgaGFzaCB0cnVuY2F0aW9uLgorCSogY2lwaGVyL2VjYy1lY2RzYS5jIChfZ2NyeV9lY2NfZWNkc2FfdmVyaWZ5KToKKwkgIGFzIHJlcXVpcmVkIGJ5IEVDRFNBIHNjaGVtZSwgdHJ1bmNhdGUgaGFzaCB2YWx1ZXMgdG8gYml0bGVuZ3RoIG9mCisJICB1c2VkIGN1cnZlLgorCSogdGVzdHMvcHVia2V5LmMgKGNoZWNrX2VjY19zYW1wbGVfa2V5KTogYWRkIGEgdGVzdGNhc2UgZm9yIGhhc2gKKwkgIHRydW5jYXRpb24uCisKKwkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA5ZWRjZjEwOTBlMDQ4NWY5ZjM4M2I2YzU0YjE4ZWE4Y2EzZDRhMjI1KQorCisyMDE0LTAxLTI0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVN1cHBvcnQgbG9ja2luZyB1bmRlciBXaW5kb3dzLgorCSogc3JjL2F0aC5jOiBBZGQgc3VwcG9ydCBmb3IgV2luZG93cy4KKwkqIHNyYy9nbG9iYWwuYyAoZXh0ZXJuYWxfbG9ja190ZXN0KTogTmV3LgorCShfZ2NyeV92Y29udHJvbCk6IENhbGwgbmV3IGZ1bmN0aW9uIHdpdGggZm9ybWVybHkgcmVzZXJ2ZWQgY29kZSA2MS4KKworCSogdGVzdHMvdC1jb21tb24uaDogTmV3LiBUYWtlbiBmcm9tIGN1cnJlbnQgbGliZ3BnLWVycm9yLgorCSogdGVzdHMvdC1sb2NrLmM6IE5ldy4gIEJhc2VkIG9uIHQtbG9jay5jIGZyb20gbGliZ3BnLWVycm9yLgorCSogY29uZmlndXJlLmFjIChIQVZFX1BUSFJFQUQpOiBTZXQgbWFjcm8gdG8gMSBpZiBkZWZpbmVkLgorCShBQ19DSEVDS19GVU5DUyk6IENoZWNrIGZvciBmbG9ja2ZpbGUuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAodGVzdHNfYmluKTogQWRkIHQtbG9jay4KKwkobm9pbnN0X0hFQURFUlMpOiBBZGQgdC1jb21tb24uaAorCShMREFERCk6IE1vdmUgdmFsdWUgdG8gLi4uCisJKGRlZmF1bHRfbGRhZGQpOiBuZXcuCisJKHRfbG9ja19MREFERCk6IE5ldy4KKworMjAxNC0wMS0yMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwljaXBoZXI6IEZpeCBjb21taXQgNzdmMjg3OTMuCisJKiBjaXBoZXIvdGlnZXIuYyAodGlnZXJfaW5pdCk6IEFkZCBhcmcgRkxBR1MuCisJKHRpZ2VyMV9pbml0LCB0aWdlcjJfaW5pdCk6IERpdHRvLgorCisJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZGFkMDZlNGQxYjgzNWJhYzc3OGI4NzA5MGIxZDM4OTRiNzUzNWIxNCkKKworCW1kOiBBZGQgV2hpcmxwb29sIGJ1ZyBlbXVsYXRpb24gZmVhdHVyZS4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWV9NRF9GTEFHX0JVR0VNVTEpOiBOZXcuCisJKiBzcmMvY2lwaGVyLXByb3RvLmggKGdjcnlfbWRfaW5pdF90KTogQWRkIGFyZyBGTEFHUy4gIENoYW5nZSBhbGwgY29kZQorCXRvIGltcGxlbWVudCB0aGF0IGZsYWcuCisJKiBjaXBoZXIvbWQuYyAoZ2NyeV9tZF9jb250ZXh0KTogIFJlcGxhY2UgU0VDVVJFIGFuZCBGSU5BTElaRUQgYnkgYml0CisJZmllbGQgRkxBR1MuICBBZGQgZmxhZyBCVUdFTVUxLiAgQ2hhbmdlIGFsbCB1c2Vycy4KKwkobWRfb3Blbik6IFJlcGxhY2UgYXJncyBTRUNVUkUgYW5kIEhNQUMgYnkgRkxBR1MuICBJbml0IGZsYWdzLmJ1Z2VtdTEuCisJKF9nY3J5X21kX29wZW4pOiBBZGQgZm9yIEdDUllfTURfRkxBR19CVUdFTVUxLgorCShtZF9lbmFibGUpOiBQYXNzIGJ1Z2VtdTEgZmxhZyB0byB0aGUgaGFzaCBpbml0IGZ1bmN0aW9uLgorCShfZ2NyeV9tZF9yZXNldCk6IERpdHRvLgorCisyMDE0LTAxLTE0ICBNaWxhbiBCcm96ICA8Z21henlsYW5kQGdtYWlsLmNvbT4KKworCVBCS0RGMjogVXNlIGdjcnlfbWRfcmVzZXQgdG8gc3BlZWQgdXAgY2FsY3VsYXRpb24uCisJKiBjaXBoZXIva2RmLmMgKF9nY3J5X2tkZl9wa2RmMik6IFVzZSBnY3J5X21kX3Jlc2V0CisJdG8gc3BlZWQgdXAgY2FsY3VsYXRpb24uCisKKzIwMTQtMDEtMTMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJRml4IG1hY3JvIGNvbmZsaWN0IGluIE5ldEJTRC4KKwkqIGNpcGhlci9iaXRoZWxwLmggKGJzd2FwMzIpOiBSZW5hbWUgdG8gX2djcnlfYnN3YXAzMi4KKwkoYnN3YXA2NCk6IFJlbmFtZSB0byBfZ2NyeV9ic3dhcDY0LgorCisyMDE0LTAxLTEzICBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiAgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorCisJRml4IHR5cG8gaW4gc2VhcmNoX29pZC4KKwkqIGNpcGhlci9tZC5jIChzZWFyY2hfb2lkKTogSW52ZXJ0IGNvbmRpdGlvbiBvbiBvaWQgY29tcGFyaXNvbi4KKworCUNvcnJlY3QgZm9ybWF0dGluZyBvZiBnY3J5X21hY19nZXRfYWxnb19rZXlsZW4gZG9jdW1lbnRhdGlvbi4KKwkqIGRvYy9nY3J5cHQudGV4aTogYWRkIGJyYWNlcyBuZWFyIGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbgorCSAgZG9jdW1lbnRhdGlvbi4KKworCVVzZSBicmFjZXMgYXJvdW5kIHVuc2lnbmVkIGludCBpbiBnY3J5X21hY19nZXRfYWxnb19rZXlsZW4KKwlkb2N1bWVudGF0aW9uLCBvdGhlcndpc2UgdGV4aW5mbyBicmVha3MgdGhhdCBhbmQgdXNlcyAnaW50JyBhcyBhCisJZnVuY3Rpb24gZGVmaW5pdGlvbi4KKworMjAxNC0wMS0xMiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ2Jsb3dmaXNoLWFybS5TJyBhbmQgJ3NlcnBlbnQtYXJtdjctbmVvbi5TJy4gLS0KKwlGaXggZm9yIGJ1ZyBodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaXNzdWUxNTg0CisKKwkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA3ZmVmN2Y0ODFjMGExNTQyYmUzNGQxZGM4MzFmNThkNDE4NDZhYzI5KQorCisJRml4IGJ1Z2d5L2luY29tcGxldGUgZGV0ZWN0aW9uIG9mIEFWWC9BVlgyIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IEFsc28gY2hlY2sgZm9yICd4Z2V0YnYnIGluc3RydWN0aW9uIGluIEFWWCBhbmQgQVZYMgorCWlubGluZSBhc3NlbWJseSBjaGVja3MuCisJKiBzcmMvaHdmLXg4Ni5jIFtfX2kzODZfX10gKGdldF94Z2V0YnYpOiBOZXcgZnVuY3Rpb24uCisJW19feDg2XzY0X19dIChnZXRfeGdldGJ2KTogTmV3IGZ1bmN0aW9uLgorCVtIQVNfWDg2X0NQVUlEXSAoZGV0ZWN0X3g4Nl9nbnVjKTogQ2hlY2sgZm9yIE9TWFNBVkUgYW5kIE9TIHN1cHBvcnQgZm9yCisJWE1NJllNTSByZWdpc3RlcnMgYW5kIGVuYWJsZSBBVlgvQVZYMiBvbmx5IGlmIFhNTSZZTU0gcmVnaXN0ZXJzIGFyZQorCXN1cHBvcnRlZCBieSBPUy4KKworMjAxNC0wMS0xMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlVc2UgdGhlIGdlbmVyaWMgYXV0b2dlbi5zaCBzY3JpcHQuCisJKiBhdXRvZ2VuLnJjOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBpdC4KKwkqIGF1dG9nZW4uc2g6IFVwZGF0ZSBmcm9tIGN1cnJlbnQgR251UEcuCisKKwkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBiMGFjMWY5YjE0M2FhMTU4NTU5MTRiYTkzZmVmOTAwMjg4ZDQ1YzljKQorCisJTW92ZSBhbGwgaGVscGVyIHNjcmlwdHMgdG8gYnVpbGQtYXV4LworCSogc2NyaXB0cy86IFJlbmFtZSB0byBidWlsZC1hdXgvLgorCSogY29tcGlsZSwgY29uZmlnLmd1ZXNzLCBjb25maWcucnBhdGgsIGNvbmZpZy5zdWIKKwkqIGRlcGNvbXAsIGRvYy9tZGF0ZS1zaCwgZG9jL3RleGluZm8udGV4CisJKiBpbnN0YWxsLXNoLCBsdG1haW4uc2gsIG1pc3Npbmc6IE1vdmUgdG8gYnVpbGQtYXV4Ly4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRqdXN0LgorCSogY29uZmlndXJlLmFjIChBQ19DT05GSUdfQVVYX0RJUik6IE5ldy4KKwkoQU1fU0lMRU5UX1JVTEVTKTogTmV3LgorCisJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZGY5YjRlYWJmNTJmYWVlNmYyODlhNGJjNjIyMTk2ODQ0NDJhZTM4MykKKworMjAxMy0xMi0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlIDEuNi4wLgorCisJZG9jOiBDaGFuZ2UgeWF0Mm0gdG8gYWxsb3cgYXJiaXRyYXJ5IGNvbmRpdGlvbiBuYW1lcy4KKwkqIGRvYy95YXQybS5jIChNQVhfQ09ORElUSU9OX05FU1RJTkcpOiBOZXcuCisJKGdwZ29uZV9kZWZpbmVkKTogUmVtb3ZlLgorCShjb25kaXRpb25fcywgY29uZGl0aW9uX3N0YWNrLCBjb25kaXRpb25fc3RhY2tfaWR4KTogTmV3LgorCShjb25kX2lzX2FjdGl2ZSwgY29uZF9pbl92ZXJiYXRpbSk6IE5ldy4KKwkoYWRkX3ByZWRlZmluZWRfbWFjcm8sIHNldF9tYWNybywgbWFjcm9fc2V0X3ApOiBOZXcuCisJKGV2YWx1YXRlX2NvbmRpdGlvbnMsIHB1c2hfY29uZGl0aW9uLCBwb3BfY29uZGl0aW9uKTogTmV3LgorCShwYXJzZV9maWxlKTogUmV3cml0ZSB0byB1c2UgdGhlIGNvbmRpdGlvbiBzdGFjay4KKwkodG9wX3BhcnNlX2ZpbGUpOiBTZXQgcHJlZmluZWQgbWFjcm9zLgorCShtYWluKTogQ2hhbmdlIC1EIHRvIGRlZmluZSBhcmJpdHJhcnkgbWFjcm9zLgorCisJdGVzdHM6IEFkZCBTSEEtNTEyIHRvIHRoZSBsb25nIGhhc2ggdGVzdC4KKwkqIHRlc3RzL2hhc2h0ZXN0LmMgKHRlc3R2ZWN0b3JzKTogQWRkIHZlY3RvcnMgZm9yIDI1NkdpQiBTSEEtNTEyLgorCSogdGVzdHMvaGFzaHRlc3QtMjU2Zy5pbiAoYWxnb3MpOiBBZGQgdGVzdCBmb3IgU0hBLTUxMi4KKworCUFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWxhcmdlLWRhdGEtdGVzdHMuCisJKiBjb25maWd1cmUuYWM6IEFkZCBvcHRpb24gLS1lbmFibGUtbGFyZ2UtZGF0YS10ZXN0cy4KKwkqIHRlc3RzL2hhc2h0ZXN0LTI1NmcuaW46IE5ldy4KKwkqIHRlc3RzL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGhhc2h0ZXN0LTI1NmcuaW4uCisJKFRFU1RTKTogU3BsaXQgdXAgaW50byB0ZXN0c19iaW4sIHRlc3RzX2Jpbl9sYXN0LCB0ZXN0c19zaCwgYW5kCisJdGVzdHNfc2hfbGFzdC4KKwkodGVzdHNfc2hfbGFzdCk6IEFkZCBoYXNodGVzdC0yNTZnCisJKG5vaW5zdF9QUk9HUkFNUyk6IEFkZCBvbmx5IHRlc3RzX2JpbiBhbmQgdGVzdHNfYmluX2xhc3QuCisJKGJlbmNoLXNsb3BlLmxvZywgaGFzaHRlc3QtMjU2Zy5sb2cpOiBOZXcgcnVsZXMgdG8gZW5mb3JjZSBzZXJpYWwgcnVuLgorCisJcmFuZG9tOiBDYWxsIHJhbmRvbSBwcm9ncmVzcyBoYW5kbGVyIG1vcmUgb2Z0ZW4uCisJKiByYW5kb20vcm5kbGludXguYyAoX2djcnlfcm5kbGludXhfZ2F0aGVyX3JhbmRvbSk6IFVwZGF0ZSBwcm9ncmVzcworCWluZGljYXRvciBlYXJsaWVyLgorCisJY2lwaGVyOiBOb3JtYWxpemUgdGhlIE1QSXMgdXNlZCBhcyBpbnB1dCB0byBzZWNyZXQga2V5IGZ1bmN0aW9ucy4KKwkqIGNpcGhlci9kc2EuYyAoc2lnbik6IE5vcm1hbGl6ZSBJTlBVVC4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGRlY3J5cHQpOiBOb3JtYWxpemUgQSBhbmQgQi4KKwkqIGNpcGhlci9yc2EuYyAoc2VjcmV0KTogTm9ybWFsaXplIHRoZSBJTlBVVC4KKwkocnNhX2RlY3J5cHQpOiBSZWR1Y2UgREFUQSBiZWZvcmUgcGFzc2luZyB0byBzZWNyZXQuCisKKzIwMTMtMTItMTYgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlDaGFuZ2UgZHVtbXkgdmFyaWFibGUgaW4gbXBpaC1kaXYuYyB0byBtcGlfbGltYl90IHR5cGUuCisJKiBtcGkvbXBpaC1kaXYuYyAoX2djcnlfbXBpaF9tb2RfMSwgX2djcnlfbXBpaF9kaXZtb2RfMSk6IENoYW5nZSBkdW1teQorCXZhcmlhYmxlIHRvICdtcGlfbGltYl90JyB0eXBlIGZyb20gJ2ludCcuCisKKwlSZW1vdmUgZHVwbGljYXRlIGdjcnlfbWFjX2hkX3QgdHlwZWRlZi4KKwkqIGNpcGhlci9tYWMtaW50ZXJuYWwuaCAoZ2NyeV9tYWNfaGRfdCk6IFJlbW92ZS4KKworMjAxMy0xMi0xNSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCVVzZSB1NjQgZm9yIENDTSBkYXRhIGxlbmd0aHMuCisJKiBjaXBoZXIvY2lwaGVyLWNjbS5jOiBNb3ZlIGNvZGUgaW5zaWRlIFtIQVZFX1U2NF9UWVBFREVGXS4KKwlbSEFWRV9VNjRfVFlQRURFRl0gKF9nY3J5X2NpcGhlcl9jY21fc2V0X2xlbmd0aHMpOiBVc2UgJ3U2NCcgZm9yCisJZGF0YSBsZW5ndGhzLgorCVshSEFWRV9VNjRfVFlQRURFRl0gKF9nY3J5X2NpcGhlcl9jY21fZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2NjbV9kZWNyeXB0LCBfZ2NyeV9jaXBoZXJfY2NtX3NldF9ub25jZSkKKwkoX2djcnlfY2lwaGVyX2NjbV9hdXRoZW50aWNhdGUsIF9nY3J5X2NpcGhlcl9jY21fZ2V0X3RhZykKKwkoX2djcnlfY2lwaGVyX2NjbV9jaGVja190YWcpOiBEdW1teSBmdW5jdGlvbnMgcmV0dXJuaW5nCisJR1BHX0VSUk9SX05PVF9TVVBQT1JURUQuCisJKiBjaXBoZXIvY2lwaGVyLWludGVybmFsLmggKGdjcnlfY2lwaGVyX2hhbmRsZS51X21vZGUuY2NtKQorCShfZ2NyeV9jaXBoZXJfY2NtX3NldF9sZW5ndGhzKTogTW92ZSBpbnNpZGUgW0hBVkVfVTY0X1RZUEVERUZdIGFuZCB1c2UKKwl1NjQgaW5zdGVhZCBvZiBzaXplX3QgZm9yIENDTSBkYXRhIGxlbmd0aHMuCisJKiBjaXBoZXIvY2lwaGVyLmMgKF9nY3J5X2NpcGhlcl9vcGVuX2ludGVybmFsLCBjaXBoZXJfcmVzZXQpCisJKF9nY3J5X2NpcGhlcl9jdGwpIFshSEFWRV9VNjRfVFlQRURFRl06IFJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQKKwlmb3IgQ0NNLgorCShfZ2NyeV9jaXBoZXJfY3RsKSBbSEFWRV9VNjRfVFlQRURFRl06IFVzZSB1NjQgZm9yCisJR0NSWUNUTF9TRVRfQ0NNX0xFTkdUSFMgbGVuZ3RoIHBhcmFtZXRlcnMuCisJKiB0ZXN0cy9iYXNpYy5jOiBEbyBub3QgdXNlIENDTSBpZiAhSEFWRV9VNjRfVFlQRURFRi4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmM6IERpdHRvLgorCSogdGVzdHMvYmVuY2htYXJrLmM6IERpdHRvLgorCisyMDEzLTEyLTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXRlc3RzOiBQcmV2ZW50IHJhcmUgZmFpbHVyZSBvZiBnY3J5X3BrX2RlY3J5cHQgdGVzdC4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX3B1YmtleV9jcnlwdCk6IEFkZCBzcGVjaWFsIG1vZGUgMS4KKwkobWFpbik6IEFkZCBvcHRpb24gLS1sb29wLgorCisyMDEzLTEyLTE0ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJTWlub3IgZml4ZXMgdG8gU0hBIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucy4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQ29ycmVjdCAnc2hhMjU2LWF2eCouUycgdG8gJ3NoYTUxMi1hdngqLlMnLgorCSogY2lwaGVyL3NoYTEtc3NzZTMtYW1kNjQuUzogRmlyc3QgbGluZSwgY29ycmVjdCBmaWxlbmFtZS4KKwkqIGNpcGhlci9zaGEyNTYtc3NzZTMtYW1kNjQuUzogUmV0dXJuIGNvcnJlY3Qgc3RhY2sgYnVybiBkZXB0aC4KKwkqIGNpcGhlci9zaGE1MTItYXZ4LWFtZDY0LlM6IFVzZSAndnplcm9hbGwnIHRvIGNsZWFyIHJlZ2lzdGVycy4KKwkqIGNpcGhlci9zaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LlM6IERpdHRvIGFuZCByZXR1cm4gY29ycmVjdCBzdGFjayBidXJuCisJZGVwdGguCisKKwlTSEEtMS9TU1NFMzogRG8gbm90IGNoZWNrIGZvciBJbnRlbCBzeW50YXggYXNzZW1ibHkgc3VwcG9ydC4KKwkqIGNpcGhlci9zaGExLXNzc2UzLWFtZDY0LlM6IFJlbW92ZSBjaGVjayBmb3IKKwlIQVZFX0lOVEVMX1NZTlRBWF9QTEFURk9STV9BUy4KKwkqIGNpcGhlci9zaGExLmMgW1VTRV9TU1NFM106IERpdHRvLgorCisyMDEzLTEyLTEzICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJQ29udmVydCBTSEEtMSBTU1NFMyBpbXBsZW1lbnRhdGlvbiBmcm9tIG1peGVkIGFzbSZDIHRvIHB1cmUgYXNtLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBDaGFuZ2UgJ3NoYTEtc3NzZTMtYW1kNjQuYycgdG8KKwknc2hhMS1zc3NlMy1hbWQ2NC5TJy4KKwkqIGNpcGhlci9zaGExLXNzc2UzLWFtZDY0LmM6IFJlbW92ZS4KKwkqIGNpcGhlci9zaGExLXNzc2UzLWFtZDY0LlM6IE5ldy4KKworCVNIQS0xOiBBZGQgU1NTRTMgaW1wbGVtZW50YXRpb24uCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnc2hhMS1zc3NlMy1hbWQ2NC5jJy4KKwkqIGNpcGhlci9zaGExLXNzc2UzLWFtZDY0LmM6IE5ldy4KKwkqIGNpcGhlci9zaGExLmMgKFVTRV9TU1NFMyk6IE5ldy4KKwkoU0hBMV9DT05URVhUKSBbVVNFX1NTU0UzXTogQWRkICd1c2Vfc3NzZTMnLgorCShzaGExX2luaXQpIFtVU0VfU1NTRTNdOiBJbml0aWFsaXplICd1c2Vfc3NzZTMnLgorCSh0cmFuc2Zvcm0pOiBSZW5hbWUgdG8uLi4KKwkoX3RyYW5zZm9ybSk6IHRoaXMuCisJKHRyYW5zZm9ybSk6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYyBbaG9zdD14ODZfNjRdOiBBZGQgJ3NoYTEtc3NzZTMtYW1kNjQubG8nLgorCisJQWRkIG1pc3NpbmcgcmVnaXN0ZXIgY2xlYXJpbmcgaW4gdG8gU0hBLTI1NiBhbmQgU0hBLTUxMiBhc3NlbWJseS4KKwkqIGNpcGhlci9zaGEyNTYtc3NzZTMtYW1kNjQuUzogQ2xlYXIgdXNlZCBYTU0vWU1NIHJlZ2lzdGVycyBhdCByZXR1cm4uCisJKiBjaXBoZXIvc2hhNTEyLWF2eC1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9zaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LlM6IERpdHRvLgorCSogY2lwaGVyL3NoYTUxMi1zc3NlMy1hbWQ2NC5TOiBEaXR0by4KKworMjAxMy0xMi0xMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlVcGRhdGUgbGljZW5zZSBpbmZvcm1hdGlvbi4KKwkqIExJQ0VOU0VTOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBMSUNFTlNFUy4KKwkqIEFVVEhPUlM6IEFkZCBsaXN0IG9mIGNvcHlyaWdodCBob2xkZXJzLgorCSogUkVBRE1FOiBSZWZlcmVuY2UgQVVUSE9SUy4KKworMjAxMy0xMi0xMyAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCUZpeCBlbXB0eSBjbG9iYmVyIGluIEFWWDIgYXNzZW1ibHkgY2hlY2suCisJKiBjb25maWd1cmUuYWMgKGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4Mik6IEFkZCAiY2MiIGFzIGFzc2VtYmx5CisJZ2xvYmJlci4KKworCUZpeCBXMzIgYnVpbGQuCisJKiByYW5kb20vcm5kdzMyLmMgKHJlZ2lzdGVyX3BvbGwsIHNsb3dfZ2F0aGVyZXIpOiBDaGFuZ2UgZ2NyeV94bWFsbG9jIHRvCisJeG1hbGxvYywgYW5kIGdjcnlfeHJlYWxsb2MgdG8geHJlYWxsb2MuCisKKzIwMTMtMTItMTIgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlTSEEtNTEyOiBBZGQgQVZYIGFuZCBBVlgyIGltcGxlbWVudGF0aW9ucyBmb3IgeDg2LTY0LgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ3NoYTUxMi1hdngtYW1kNjQuUycgYW5kCisJJ3NoYTUxMi1hdngyLWJtaTItYW1kNjQuUycuCisJKiBjaXBoZXIvc2hhNTEyLWF2eC1hbWQ2NC5TOiBOZXcuCisJKiBjaXBoZXIvc2hhNTEyLWF2eDItYm1pMi1hbWQ2NC5TOiBOZXcuCisJKiBjaXBoZXIvc2hhNTEyLmMgKFVTRV9BVlgsIFVTRV9BVlgyKTogTmV3LgorCShTSEE1MTJfQ09OVEVYVCkgW1VTRV9BVlhdOiBBZGQgJ3VzZV9hdngnLgorCShTSEE1MTJfQ09OVEVYVCkgW1VTRV9BVlgyXTogQWRkICd1c2VfYXZ4MicuCisJKHNoYTUxMl9pbml0LCBzaGEzODRfaW5pdCkgW1VTRV9BVlhdOiBJbml0aWFsaXplICd1c2VfYXZ4Jy4KKwkoc2hhNTEyX2luaXQsIHNoYTM4NF9pbml0KSBbVVNFX0FWWDJdOiBJbml0aWFsaXplICd1c2VfYXZ4MicuCisJW1VTRV9BVlhdIChfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eCk6IE5ldy4KKwlbVVNFX0FWWDJdIChfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eDIpOiBOZXcuCisJKHRyYW5zZm9ybSkgW1VTRV9BVlgyXTogQWRkIGNhbGwgZm9yIEFWWDIgaW1wbGVtZW50YXRpb24uCisJKHRyYW5zZm9ybSkgW1VTRV9BVlhdOiBBZGQgY2FsbCBmb3IgQVZYIGltcGxlbWVudGF0aW9uLgorCSogY29uZmlndXJlLmFjIChIQVZFX0dDQ19JTkxJTkVfQVNNX0JNSTIpOiBOZXcgY2hlY2suCisJKHNoYTUxMik6IEFkZCAnc2hhNTEyLWF2eC1hbWQ2NC5sbycgYW5kICdzaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LmxvJy4KKwkqIGRvYy9nY3J5cHQudGV4aTogRG9jdW1lbnQgJ2ludGVsLWNwdScgYW5kICdpbnRlbC1ibWkyJy4KKwkqIHNyYy9nMTBsaWIuaCAoSFdGX0lOVEVMX0NQVSwgSFdGX0lOVEVMX0JNSTIpOiBOZXcuCisJKiBzcmMvaHdmZWF0dXJlcy5jIChod2ZsaXN0KTogQWRkICJpbnRlbC1jcHUiIGFuZCAiaW50ZWwtYm1pMiIuCisJKiBzcmMvaHdmLXg4Ni5jIChkZXRlY3RfeDg2X2dudWMpOiBDaGVjayBmb3IgSFdGX0lOVEVMX0NQVSBhbmQKKwlIV0ZfSU5URUxfQk1JMi4KKworCVNIQS01MTI6IEFkZCBTU1NFMyBpbXBsZW1lbnRhdGlvbiBmb3IgeDg2LTY0LgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ3NoYTUxMi1zc3NlMy1hbWQ2NC5TJy4KKwkqIGNpcGhlci9zaGE1MTItc3NzZTMtYW1kNjQuUzogTmV3LgorCSogY2lwaGVyL3NoYTUxMi5jIChVU0VfU1NTRTMpOiBOZXcuCisJKFNIQTUxMl9DT05URVhUKSBbVVNFX1NTU0UzXTogQWRkICd1c2Vfc3NzZTMnLgorCShzaGE1MTJfaW5pdCwgc2hhMzg0X2luaXQpIFtVU0VfU1NTRTNdOiBJbml0aWFsaXplICd1c2Vfc3NzZTMnLgorCVtVU0VfU1NTRTNdIChfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzKTogTmV3LgorCSh0cmFuc2Zvcm0pIFtVU0VfU1NTRTNdOiBDYWxsIFNTU0UzIGltcGxlbWVudGF0aW9uLgorCSogY29uZmlndXJlLmFjIChzaGE1MTIpOiBBZGQgJ3NoYTUxMi1zc3NlMy1hbWQ2NC5sbycuCisKKwlTSEEtMjU2OiBBZGQgU1NTRTMgaW1wbGVtZW50YXRpb24gZm9yIHg4Ni02NC4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdzaGEyNTYtc3NzZTMtYW1kNjQuUycuCisJKiBjaXBoZXIvc2hhMjU2LXNzc2UzLWFtZDY0LlM6IE5ldy4KKwkqIGNpcGhlci9zaGEyNTYuYyAoVVNFX1NTU0UzKTogTmV3LgorCShTSEEyNTZfQ09OVEVYVCkgW1VTRV9TU1NFM106IEFkZCAndXNlX3Nzc2UzJy4KKwkoc2hhMjU2X2luaXQsIHNoYTIyNF9pbml0KSBbVVNFX1NTU0UzXTogSW5pdGlhbGl6ZSAndXNlX3Nzc2UzJy4KKwkodHJhbnNmb3JtKTogUmVuYW1lIHRvLi4uCisJKF90cmFuc2Zvcm0pOiBUaGlzLgorCVtVU0VfU1NTRTNdIChfZ2NyeV9zaGEyNTZfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzKTogTmV3LgorCSh0cmFuc2Zvcm0pOiBOZXcuCisJKiBjb25maWd1cmUuYWMgKEhBVkVfSU5URUxfU1lOVEFYX1BMQVRGT1JNX0FTKTogTmV3IGNoZWNrLgorCShzaGEyNTYpOiBBZGQgJ3NoYTI1Ni1zc3NlMy1hbWQ2NC5sbycuCisJKiBkb2MvZ2NyeXB0LnRleGk6IERvY3VtZW50ICdpbnRlbC1zc3NlMycuCisJKiBzcmMvZzEwbGliLmggKEhXRl9JTlRFTF9TU1NFMyk6IE5ldy4KKwkqIHNyYy9od2ZlYXR1cmVzLmMgKGh3Zmxpc3QpOiBBZGQgImludGVsLXNzc2UzIi4KKwkqIHNyYy9od2YteDg2LmMgKGRldGVjdF94ODZfZ251Yyk6IFRlc3QgZm9yIFNTU0UzLgorCisyMDEzLTEyLTEyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUFkZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkaXNhYmxlIGhhcmR3YXJlIGZlYXR1cmVzLgorCSogc3JjL2h3ZmVhdHVyZXMuYzogSW5jbHlkZSBzeXNsb2cuaCBhbmQgY3R5cGUuaC4KKwkoSFdGX0RFTllfRklMRSk6IE5ldy4KKwkobXlfaXNhc2NpaSk6IE5ldy4KKwkocGFyc2VfaHdmX2RlbnlfZmlsZSk6IE5ldy4KKwkoX2djcnlfZGV0ZWN0X2h3X2ZlYXR1cmVzKTogQ2FsbCBpdC4KKworCSogc3JjL21waWNhbGMuYyAobWFpbik6IENvcnJlY3RseSBpbml0aWFsaXplIExpYmdjcnlwdC4gIEFkZCBvcHRpb25zCisJIi0tcHJpbnQtY29uZmlnIiBhbmQgIi0tZGlzYWJsZS1od2YiLgorCisJTW92ZSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHRvIGh3ZmVhdHVyZXMuYy4KKwkqIHNyYy9nbG9iYWwuYyAoaHdmbGlzdCwgZGlzYWJsZWRfaHdfZmVhdHVyZXMpOiBNb3ZlIHRvIC4uCisJKiBzcmMvaHdmZWF0dXJlcy5jOiBoZXJlLgorCShfZ2NyeV9kaXNhYmxlX2h3X2ZlYXR1cmUpOiBOZXcuCisJKF9nY3J5X2VudW1faHdfZmVhdHVyZXMpOiBOZXcuCisJKF9nY3J5X2RldGVjdF9od19mZWF0dXJlcyk6IFJlbW92ZSBhcmcgRElTQUJMRURfRkVBVFVSRVMuCisJKiBzcmMvZ2xvYmFsLmMgKHByaW50X2NvbmZpZywgX2djcnlfdmNvbnRyb2wsIGdsb2JhbF9pbml0KTogQWRqdXN0CisJYWNjb3JkaW5nbHkuCisKKwlSZW1vdmUgbWFjcm8gaGFja3MgZm9yIGludGVybmFsIHZzLiBleHRlcm5hbCBmdW5jdGlvbnMuICBQYXJ0IDIgYW5kIGxhc3QuCisJKiBzcmMvdmlzaWJpbGl0eS5oOiBSZW1vdmUgcmVtYWluaW5nIGRlZmluZS91bmRlZiBoYWNrcyBmb3Igc3ltYm9sCisJdmlzaWJpbGl0eS4gIEFkZCBtYWNyb3MgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdGhlIHB1YmxpYyBmdW5jdGlvbnMuCisJQ2hhbmdlIGFsbCBhZmZlY3RlZCBmdW5jdGlvbnMgYnkgcmVwbGFjaW5nIHRoZW0gYnkgdGhlIHgtbWFjcm9zLgorCSogc3JjL2cxMGxpYi5oOiBBZGQgaW50ZXJuYWwgcHJvdG90eXBlcy4KKwkoeHRyeW1hbGxvYywgeHRyeWNhbGxvYywgeHRyeW1hbGxvY19zZWN1cmUsIHh0cnljYWxsb2Nfc2VjdXJlKQorCSh4dHJ5cmVhbGxvYywgeHRyeXN0cmR1cCwgeG1hbGxvYywgeGNhbGxvYywgeG1hbGxvY19zZWN1cmUpCisJKHhjYWxsb2Nfc2VjdXJlLCB4cmVhbGxvYywgeHN0cmR1cCwgeGZyZWUpOiBOZXcgbWFjcm9zLgorCisyMDEzLTEyLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXJhbmRvbTogQWRkIGEgZmVhdHVyZSB0byBjbG9zZSBkZXZpY2UgZmlsZSBkZXNjcmlwdG9ycy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWUNUTF9DTE9TRV9SQU5ET01fREVWSUNFKTogTmV3LgorCSogc3JjL2dsb2JhbC5jIChfZ2NyeV92Y29udHJvbCk6IENhbGwgX2djcnlfcmFuZG9tX2Nsb3NlX2Zkcy4KKwkqIHJhbmRvbS9yYW5kb20uYyAoX2djcnlfcmFuZG9tX2Nsb3NlX2Zkcyk6IE5ldy4KKwkqIHJhbmRvbS9yYW5kb20tY3Nwcm5nLmMgKF9nY3J5X3JuZ2NzcHJuZ19jbG9zZV9mZHMpOiBOZXcuCisJKiByYW5kb20vcmFuZG9tLWZpcHMuYyAoX2djcnlfcm5nZmlwc19jbG9zZV9mZHMpOiBOZXcuCisJKiByYW5kb20vcmFuZG9tLXN5c3RlbS5jIChfZ2NyeV9ybmdzeXN0ZW1fY2xvc2VfZmRzKTogTmV3LgorCSogcmFuZG9tL3JuZGxpbnV4LmMgKG9wZW5fZGV2aWNlKTogQWRkIGFyZyByZXRyeS4KKwkoX2djcnlfcm5kbGludXhfZ2F0aGVyX3JhbmRvbSk6IEFkZCBtb2RlIHRvIGNsb3NlIG9wZW4gZmRzLgorCisJKiB0ZXN0cy9yYW5kb20uYyAoY2hlY2tfY2xvc2VfcmFuZG9tX2RldmljZSk6IE5ldy4KKwkobWFpbik6IENhbGwgbmV3IHRlc3QuCisKKzIwMTMtMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJRml4IGxhc3QgY29tbWl0ICg5YTM3NDcwYykKKwkqIHNyYy9zZWNtZW0uYyAobG9ja19wb29sKTogUmVtb3ZlIHJlbWFpbmluZyBsaW5lLiAgUmVwb3J0ZWQgYnkgSWFuCisJR29sZGJlcmcuCisKKzIwMTMtMTItMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJRml4IG9uZS1vZmYgbWVtb3J5IGxlYWsgd2hlbiBidWlsZCB3aXRoIExpbnV4IGNhcGFiaWxpdHkgc3VwcG9ydC4KKwkqIHNyYy9zZWNtZW0uYyAobG9ja19wb29sLCBzZWNtZW1faW5pdCk6IFVzZSBjYXBfZnJlZS4gIFJlcG9ydGVkIGJ5CisJTWlrZSBDcm93ZSA8bWFjQG1jcm93ZS5jb20+LgorCisyMDEzLTEyLTA5ICBEYXZpZCAnRGlnaXQnIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwlVcGRhdGUgbGlidG9vbCB0byBzdXBwb3J0IEFuZHJvaWQuCisJKiBtNC9saWJ0b29sLm00OiBBZGQgImxpbnV4KmFuZHJvaWQqIiBjYXNlLiAgVGFrZW4gZnJvbSB0aGUgbGlidG9vbAorCXJlcG9zaXRvcnkuCisKKzIwMTMtMTItMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJdGVzdHM6IFNwZWVkIHVwIGJlbmNobWFya3MgaW4gcmVncmVzc2lvbiB0ZXN0IG1vZGUuCisJKiB0ZXN0cy90c2V4cC5jIChjaGVja19leHRyYWN0X3BhcmFtKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFNfRU5WSVJPTk1FTlQpOiBTZXQgR0NSWVBUX0lOX1JFR1JFU1NJT05fVEVTVC4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmMgKG1haW4pOiBTcGVlZCB1cCBpZiBpbiByZWdyZXNzaW9uIHRlc3QgbW9kZS4KKwkqIHRlc3RzL2JlbmNobWFyay5jIChtYWluKTogRGl0dG8uCisKKwl0ZXN0czogQWRkIC0tY3N2IG9wdGlvbiB0byBiZW5jaC1zbG9wZS4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmMgKFNUUiwgU1RSMik6IE5ldy4KKwkoY3ZzX21vZGUpOiBOZXcuCisJKG51bV9tZWFzdXJlbWVudF9yZXBldGl0aW9ucyk6IE5ldy4gIFJlcGxhY2UgdXNlIG9mCisJTlVNX01FQVNVUkVNRU5UX1JFUEVUSVRJT05TIGJ5IHRoaXMuCisJKGN1cnJlbnRfc2VjdGlvbl9uYW1lLCBjdXJyZW50X2FsZ29fbmFtZSwgY3VycmVudF9tb2RlX25hbWUpOiBOZXcuCisJKGJlbmNoX3ByaW50X3Jlc3VsdF9jc3YpOiBOZXcuCisJKGJlbmNoX3ByaW50X3Jlc3VsdF9zdGQpOiBSZW5hbWUgZnJvbSBiZW5jaF9wcmludF9yZXN1bHQuCisJKGJlbmNoX3ByaW50X3Jlc3VsdCk6IE5ldy4gRGl2ZXJ0IGRlcGVuZGluZyBvbiBDU1ZfTU9ERS4KKwkoYmVuY2hfcHJpbnRfaGVhZGVyLCBiZW5jaF9wcmludF9mb290ZXIpOiB0YWtlIGNhcmUgb2YgQ1NWX01PREUuCisJKGJlbmNoX3ByaW50X2FsZ28sIGJlbmNoX3ByaW50X21vZGUpOiBOZXcuICBVc2UgdGhlbSBpbnN0ZWFkIG9mCisJZXhwbGljaXQgcHJpbnRmcy4KKwkobWFpbik6IEFkZCBvcHRpb25zIC0tY3N2IGFuZCAtLXJlcGV0aXRpb25zLgorCisyMDEzLTEyLTA3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXNleHA6IEFsbG93IGxvbmcgbmFtZXMgYW5kIHdoaXRlIHNwYWNlIGluIGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtLgorCSogc3JjL3NleHAuYyAoX2djcnlfc2V4cF92ZXh0cmFjdF9wYXJhbSk6IFNraXAgd2hpdGUgc3BhY2UuICBTdXBwb3J0CisJbG9uZyBwYXJhbWV0ZXIgbmFtZXMuCisJKiB0ZXN0cy90c2V4cC5jIChjaGVja19leHRyYWN0X3BhcmFtKTogQWRkIHRlc3QgY2FzZXMgZm9yIGxvbmcgcGFyYW1ldGVyCisJbmFtZXMgYW5kIHdoaXRlIHNwYWNlLgorCisyMDEzLTEyLTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCWVjYzogTWVyZ2UgcGFydGx5IGR1cGxpY2F0ZWQgY29kZS4KKwkqIGNpcGhlci9lY2MtZWRkc2EuYyAoX2djcnlfZWNjX2VkZHNhX3NpZ24pOiBGYWN0b3IgQSBoYXNoaW5nIG91dCB0byAuLi4KKwkoX2djcnlfZWNjX2VkZHNhX2NvbXB1dGVfaF9kKTogbmV3IGZ1bmN0aW9uLgorCSogY2lwaGVyL2VjYy1taXNjLmMgKF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyk6IFVzZSBuZXcgZnVuY3Rpb24uCisJKHJldmVyc2VfYnVmZmVyKTogUmVtb3ZlLgorCisJZWNjOiBSZW1vdmUgdW51c2VkIGludGVybmFsIGZ1bmN0aW9uLgorCSogc3JjL2NpcGhlci1wcm90by5oIChnY3J5X3BrX3NwZWMpOiBSZW1vdmUgZ2V0X3BhcmFtLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoX2djcnlfZWNjX2dldF9wYXJhbV9zZXhwKTogTWVyZ2UgaW4gY29kZSBmcm9tCisJX2djcnlfZWNjX2dldF9wYXJhbS4KKwkoX2djcnlfZWNjX2dldF9wYXJhbSk6IFJlbW92ZS4KKwkqIGNpcGhlci9lY2MuYyAoX2djcnlfcHVia2V5X3NwZWNfZWNjKTogUmVtb3ZlIF9nY3J5X2VjY19nZXRfcGFyYW0uCisKKzIwMTMtMTItMDYgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlGaXggYnVpbGRpbmcgb24gbWluZ3czMi4KKwkqIHNyYy9nY3J5cHQtaW50Lmg6IEluY2x1ZGUgPHR5cGVzLmg+LgorCisyMDEzLTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCWVjYzogQ2hhbmdlIE9JRCBmb3IgRWQyNTUxOS4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKGN1cnZlX2FsaWFzZWQpOiBBZGQgbW9yZSBzdWl0YWJsZSBPSUQgZm9yCisJRWQyNTUxOS4KKworCVJlbW92ZSBtYWNybyBoYWNrcyBmb3IgaW50ZXJuYWwgdnMuIGV4dGVybmFsIGZ1bmN0aW9ucy4gIFBhcnQgMS4KKwkqIHNyYy92aXNpYmlsaXR5Lmg6IFJlbW92ZSBhbG1vc3QgYWxsIGRlZmluZS91bmRlZiBoYWNrcyBmb3Igc3ltYm9sCisJdmlzaWJpbGl0eS4gIEFkZCBtYWNyb3MgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdGhlIHB1YmxpYyBmdW5jdGlvbnMuCisJQ2hhbmdlIGFsbCBhZmZlY3RlZCBmdW5jdGlvbnMgYnkgcHJlZml4aW5nIHRoZW0gZXhwbGljaXRseSB3aXRoIGFuCisJdW5kZXJzY29yZSBhbmQgY2hhbmdlIGFsbCBpbnRlcm5hbCBjYWxsZXJzIHRvIGNhbGwgdGhlIHVuZGVyc2NvcmUKKwlwcmVmaXhlZCB2ZXJzaW9ucy4gIFByb3ZpZGUgY29udmVuaWVuY2UgbWFjcm9zIGZyb20gc2V4cCBhbmQgbXBpCisJZnVuY3Rpb25zLgorCSogc3JjL3Zpc2liaWxpdHkuYzogQ2hhbmdlIGFsbCBmdW5jdGlvbnMgdG8gdXNlIG9ubHkgZ3BnX2Vycl9jb2RlX3QKKwlhbmQgdHJhbnNsYXRlIHRvIGdwZ19lcnJvcl90IG9ubHkgaW4gdmlzaWJpbGl0eS5jLgorCisyMDEzLTEyLTA0ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJbXBpOiBhZGQgaW5saW5lIGFzc2VtYmx5IGZvciB4ODYtNjQuCisJKiBtcGkvbG9uZ2xvbmcuaCBbX194ODZfNjRdIChhZGRfc3NhYWFhLCBzdWJfZGRtbXNzLCB1bXVsX3BwbW0pCisJKHVkaXZfcXJubmQsIGNvdW50X2xlYWRpbmdfemVyb3MsIGNvdW50X3RyYWlsaW5nX3plcm9zKTogTmV3LgorCisyMDEzLTEyLTA0ICBOSUlCRSBZdXRha2EgIDxnbmlpYmVAZnNpai5vcmc+CisKKwltcGk6IGZpeCBnY3J5X21waV9wb3dtIGZvciBuZWdhdGl2ZSBiYXNlLgorCSogbXBpL21waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSkgW1VTRV9BTEdPUklUSE1fU0lNUExFX0VYUE9ORU5USUFUSU9OXToKKwlGaXggZm9yIHRoZSBjYXNlIHdoZXJlIEJBU0UgaXMgbmVnYXRpdmUuCisJKiB0ZXN0cy9tcGl0ZXN0cy5jICh0ZXN0X3Bvd20pOiBBZGQgYSB0ZXN0IGNhc2Ugb2YgKC0xNyleNiBtb2QgMTkuCisKKzIwMTMtMTItMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWRkIGJ1aWxkIHN1cHBvcnQgZm9yIHBwYzY0bGUuCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IFVwZGF0ZSB0byBsYXRlc3QgdmVyc2lvbiAoMjAxMy0xMS0yOSkuCisJKiBtNC9saWJ0b29sLm00OiBBZGQgcGF0Y2hlcyBmb3IgcHBjNjRsZS4KKworMjAxMy0xMi0wMyAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCXJpam5kYWVsOiBmaXggY29tcGlsZXIgd2FybmluZyBvbiBhYXJjaDY0LgorCSogY2lwaGVyL3Jpam5kYWVsLmMgKGRvX3NldGtleSk6IFVzZSBicmFjZXMgZm9yIGVtcHR5IGlmIHN0YXRlbWVudAorCWluc3RlYWQgb2Ygc2VtaWNvbG9uLgorCisJQWRkIGFhcmNoNjQgKGFybTY0KSBtcGkgYXNzZW1ibHkuCisJKiBtcGkvYWFyY2g2NC9tcGktYXNtLWRlZnMuaDogTmV3LgorCSogbXBpL2FhcmNoNjQvbXBpaC1hZGQxLlM6IE5ldy4KKwkqIG1waS9hYXJjaDY0L21waWgtbXVsMS5TOiBOZXcuCisJKiBtcGkvYWFyY2g2NC9tcGloLW11bDIuUzogTmV3LgorCSogbXBpL2FhcmNoNjQvbXBpaC1tdWwzLlM6IE5ldy4KKwkqIG1waS9hYXJjaDY0L21waWgtc3ViMS5TOiBOZXcuCisJKiBtcGkvY29uZmlnLmxpbmtzIFtob3N0PWFhcmNoNjQtKi0qXTogQWRkIGNvbmZpZ2d1cmF0aW9uIGZvciBhYXJjaDY0CisJYXNzZW1ibHkuCisJKiBtcGkvbG9uZ2xvbmcuaCBbX19hYXJjaDY0X19dIChhZGRfc3NhYWFhLCBzdWJfZGRtbXNzLCB1bXVsX3BwbW0pCisJKGNvdW50X2xlYWRpbmdfemVyb3MpOiBOZXcuCisKKzIwMTMtMTItMDIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJZWNjOiBVc2UgY29uc3RhbnQgdGltZSBwb2ludCBvcGVyYXRpb24gZm9yIFR3aXN0ZWQgRWR3YXJkcy4KKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfZWNfbXVsX3BvaW50KTogVHJ5IHRvIGRvIGEgY29uc3RhbnQgdGltZQorCW9wZXJhdGlvbiBpZiBuZWVkZWQuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAobWFpbik6IEFkZCBvcHRpb24gLS11c2Utc2VjbWVtLgorCisJZWNjOiBNYWtlIGdjcnlfcGtfdGVzdGtleSB3b3JrIGZvciBFZDI1NTE5LgorCSogY2lwaGVyL2VjYy1taXNjLmMgKF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyk6IEFkZCBvcHRpb25hbCBhcmdzIEcKKwlhbmQgZC4gIENoYW5nZSBhbGwgY2FsbGVycy4KKwkqIGNpcGhlci9lY2MuYyAoZ2VuX3lfMik6IFJlbW92ZS4KKwkoY2hlY2tfc2VjcmV0X2tleSk6IFVzZSBnZW5lcmljIHB1YmxpYyBrZXkgY29tcHV0ZSBmdW5jdGlvbi4gIEFkanVzdAorCWZvciB1c2Ugd2l0aCBFZDI1NTE5IGFuZCBFZERTQS4KKwkobmlzdF9nZW5lcmF0ZV9rZXkpOiBEbyBub3QgdXNlIHRoZSBjb21wbGlhbnQga2V5IHRoaW5neSBmb3IgRWQyNTUxOS4KKwkoZWNjX2NoZWNrX3NlY3JldF9rZXkpOiBNYWtlIHBhcmFtZXRlciBwYXJzaW5nIHNpbWlsYXIgdG8gdGhlIG90aGVyCisJZnVuY3Rpb25zLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoZG9tYWluX3Bhcm1zKTogWmVybyBwcmVmaXggc29tZSBwYXJhbWV0ZXJzIHNvCisJdGhhdCBfZ2NyeV9lY2NfdXBkYXRlX2N1cnZlX3BhcmFtIHdvcmtzIGNvcnJlY3RseS4KKwkqIHRlc3RzL2tleWdlbi5jIChjaGVja19lY2Nfa2V5cyk6IEFkZCAicGFyYW0iIGZsYWcuICBDaGVjayBhbGwKKwlFZDI1NTE5IGtleXMuCisKKwllY2M6IEZpeCBlZGRzYSBwb2ludCBkZWNvbXByZXNzaW9uLgorCSogY2lwaGVyL2VjYy1lZGRzYS5jIChfZ2NyeV9lY2NfZWRkc2FfcmVjb3Zlcl94KTogRml4IHRoZSBuZWdhdGl2ZQorCWNhc2UuCisKKwllY2M6IEZpeCBnY3J5X21waV9lY19jdXJ2ZV9wb2ludCBmb3IgV2VpZXJzdHJhc3MuCisJKiBtcGkvZWMuYyAoX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50KTogVXNlIGNvcnJlY3QgZXF1YXRpb24uCisJKGVjX3BvdzMpOiBOZXcuCisJKGVjX3BfaW5pdCk6IEFsd2F5cyBjb3B5IEIuCisKKwltcGk6IEludHJvZHVjZSA0IHVzZXIgZmxhZ3MgZm9yIGdjcnlfbXBpX3QuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllNUElfRkxBR19VU0VSMSwgR0NSWU1QSV9GTEFHX1VTRVIyKQorCShHQ1JZTVBJX0ZMQUdfVVNFUjMsIEdDUllNUElfRkxBR19VU0VSNCk6IE5ldy4KKwkqIG1waS9tcGl1dGlsLmMgKGdjcnlfbXBpX3NldF9mbGFnLCBnY3J5X21waV9jbGVhcl9mbGFnKQorCShnY3J5X21waV9nZXRfZmxhZywgX2djcnlfbXBpX2ZyZWUpOiBJbXBsZW1lbnQgdGhlbS4KKwkoZ2NyeV9tcGlfc2V0X29wYXF1ZSk6IEtlZXAgdXNlciBmbGFncy4KKworMjAxMy0xMS0yOSAgVmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKworCUZpeCBhcm12MyBjb21waWxlIGVycm9yLgorCSogbXBpL2xvbmdsb25nLmggW19fYXJtX18gJiYgX19BUk1fQVJDSCA8IDRdICh1bXVsX3BwbW0pOiBVc2UKKwlfX0FORF9DTE9CQkVSX0NDIGluc3RlYWQgb2YgX19DTE9CQkVSX0NDLgorCisJbG9uZ2xvbmcuaCBvbiBtaXBzIHdpdGggY2xhbmcuCisJKiBtcGkvbG9uZ2xvbmcuaCBbX19taXBzX19dOiBVc2UgQy1sYW5ndWFnZSB2ZXJzaW9uIHdpdGggY2xhbmcuCisKKzIwMTMtMTEtMjQgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlDYW1lbGxpYTogVHdlYWtzIGZvciBBRVMtTkkgaW1wbGVtZW50YXRpb25zLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5TOiBBbGlnbiBzdGFjayB0byAxNiBieXRlczsgdHdlYWsKKwlrZXktc2V0dXAgZm9yIHNtYWxsIHNwZWVkIHVwLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUzogVXNlIHZtb3ZkcXUgZXZlbiB3aXRoIGFsaWduZWQKKwlzdGFjazsgcmVvcmRlciB2aW5zZXJ0MTI4IGluc3RydWN0aW9uczsgdXNlIHJicCBmb3Igc3RhY2sgZnJhbWUuCisKKzIwMTMtMTEtMjEgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlBZGQgR01BQyB0byBNQUMgQVBJLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ21hYy1nbWFjLmMnLgorCSogY2lwaGVyL21hYy1nbWFjLmM6IE5ldy4KKwkqIGNpcGhlci9tYWMtaW50ZXJuYWwuaCAoZ2NyeV9tYWNfaGFuZGxlKTogQWRkICd1LmdjbScuCisJKF9nY3J5X21hY190eXBlX3NwZWNfZ21hY19hZXMsIF9nY3J5X21hY190eXBlX3NwZWNfZ21hY190d29maXNoKQorCShfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfc2VycGVudCwgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX3NlZWQpCisJKF9nY3J5X21hY190eXBlX3NwZWNfZ21hY19jYW1lbGxpYSk6IE5ldyBleHRlcm5zLgorCSogY2lwaGVyL21hYy5jIChtYWNfbGlzdCk6IEFkZCBHTUFDIHNwZWNpZmljYXRpb25zLgorCSogZG9jL2djcnlwdC50ZXhpOiBBZGQgbWVudGlvbiBvZiBHTUFDLgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X21hY19hbGdvcyk6IEFkZCBHQ00gYWxnb3JpdGhtcy4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX29uZV9tYWMpOiBBZGQgc3VwcG9ydCBmb3IgTUFDIElWcy4KKwkoY2hlY2tfbWFjKTogQWRkIHN1cHBvcnQgZm9yIE1BQyBJVnMgYW5kIGFkZCBHTUFDIHRlc3QgdmVjdG9ycy4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmMgKG1hY19iZW5jaCk6IEl0ZXJhdGUgYWxnb3JpdGhtIG51bWJlcnMgdG8gNDk5LgorCSogdGVzdHMvYmVuY2htYXJrLmMgKG1hY19iZW5jaCk6IEl0ZXJhdGUgYWxnb3JpdGhtIG51bWJlcnMgdG8gNDk5LgorCisJR0NNOiBNb3ZlIGdjbV90YWJsZSBpbml0aWFsaXphdGlvbiB0byBzZXRrZXkuCisJKiBjaXBoZXIvY2lwaGVyLWdjbS5jOiBDaGFuZ2UgYWxsICdjLT51X2l2Lml2JyB0bworCSdjLT51X21vZGUuZ2NtLnVfZ2hhc2hfa2V5LmtleScuCisJKF9nY3J5X2NpcGhlcl9nY21fc2V0a2V5KTogTmV3LgorCShfZ2NyeV9jaXBoZXJfZ2NtX2luaXRpdik6IE1vdmUgZ2hhc2ggaW5pdGlhbGl6YXRpb24gdG8gZnVuY3Rpb24gYWJvdmUuCisJKiBjaXBoZXIvY2lwaGVyLWludGVybmFsLmggKGdjcnlfY2lwaGVyX2hhbmRsZSk6IEFkZAorCSd1X21vZGUuZ2NtLnVfZ2hhc2hfa2V5JzsgUmVvcmRlciAndV9tb2RlLmdjbScgbWVtYmVycyBmb3IgcGFydGlhbAorCWNsZWFyaW5nIGluIGdjcnlfY2lwaGVyX3Jlc2V0LgorCShfZ2NyeV9jaXBoZXJfZ2NtX3NldGtleSk6IE5ldyBwcm90b3R5cGUuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGNpcGhlcl9zZXRrZXkpOiBBZGQgR0NNIHNldGtleS4KKwkoY2lwaGVyX3Jlc2V0KTogQ2xlYXIgJ3VfbW9kZScgb25seSBwYXJ0aWFsbHkgZm9yIEdDTS4KKworMjAxMy0xMS0yMCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCUdDTTogQWRkIHN1cHBvcnQgZm9yIHNwbGl0IGRhdGEgYnVmZmVycyBhbmQgb25saW5lIG9wZXJhdGlvbi4KKwkqIGNpcGhlci9jaXBoZXItZ2NtLmMgKGRvX2doYXNoX2J1Zik6IEFkZCBidWZmZXJpbmcgZm9yIGxlc3MgdGhhbgorCWJsb2Nrc2l6ZSBsZW5ndGggaW5wdXQgYW5kIHBhZGRpbmcgaGFuZGxpbmcuCisJKF9nY3J5X2NpcGhlcl9nY21fZW5jcnlwdCwgX2djcnlfY2lwaGVyX2djbV9kZWNyeXB0KTogQWRkIGhhbmRsaW5nCisJZm9yIEFBRCBwYWRkaW5nIGFuZCBjaGVjayBpZiBkYXRhIGhhcyBhbHJlYWR5IGJlaW5nIHBhZGRlZC4KKwkoX2djcnlfY2lwaGVyX2djbV9hdXRoZW50aWNhdGUpOiBDaGVjayB0aGF0IEFBRCBvciBkYXRhIGhhcyBub3QgYmVpbmcKKwlwYWRkZWQgeWV0LgorCShfZ2NyeV9jaXBoZXJfZ2NtX2luaXRpdik6IENsZWFyIHBhZGRpbmcgbWFya3MuCisJKF9nY3J5X2NpcGhlcl9nY21fdGFnKTogQWRkIGZpbmFsaXphdGlvbiBhbmQgcGFkZGluZzsgQ2xlYXIgc2Vuc2l0aXZlCisJZGF0YSBmcm9tIGNpcGhlciBoYW5kbGUsIHNpbmNlIHRoZXkgYXJlIG5vdCB1c2VkIGFmdGVyIGdlbmVyYXRpbmcgdGFnLgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIChnY3J5X2NpcGhlcl9oYW5kbGUpOiBBZGQgJ3VfbW9kZS5nY20ubWFjYnVmJywKKwkndV9tb2RlLmdjbS5tYWNfdW51c2VkJywgJ3VfbW9kZS5nY20uZ2hhc2hfZGF0YV9maW5hbGl6ZWQnIGFuZAorCSd1X21vZGUuZ2NtLmdoYXNoX2FhZF9maW5hbGl6ZWQnLgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfZ2NtX2NpcGhlcik6IFJlbmFtZSB0by4uLgorCShfY2hlY2tfZ2NtX2NpcGhlcik6IC4uLnRoaXMgYW5kIGFkZCBoYW5kbGluZyBmb3IgZGlmZmVyZW50IGJ1ZmZlciBzdGVwCisJbGVuZ3RoczsgRW5hYmxlIHBlciBieXRlIGJ1ZmZlciB0ZXN0aW5nLgorCShjaGVja19nY21fY2lwaGVyKTogQ2FsbCBfY2hlY2tfZ2NtX2NpcGhlciB3aXRoIGRpZmZlcmVudCBidWZmZXIgc3RlcAorCXNpemVzLgorCisJR0NNOiBVc2Ugc2l6ZV90IGZvciBidWZmZXIgc2l6ZXMuCisJKiBjaXBoZXIvY2lwaGVyLWdjbS5jIChnaGFzaCwgZ2NtX2J5dGVjb3VudGVyX2FkZCwgZG9fZ2hhc2hfYnVmKQorCShfZ2NyeV9jaXBoZXJfZ2NtX2VuY3J5cHQsIF9nY3J5X2NpcGhlcl9nY21fZGVjcnlwdCkKKwkoX2djcnlfY2lwaGVyX2djbV9hdXRoZW50aWNhdGUsIF9nY3J5X2NpcGhlcl9nY21fZ2VuaXYpCisJKF9nY3J5X2NpcGhlcl9nY21fdGFnKTogVXNlIHNpemVfdCBmb3IgYnVmZmVyIGxlbmd0aHMuCisJKiBjaXBoZXIvY2lwaGVyLWludGVybmFsLmggKF9nY3J5X2NpcGhlcl9nY21fZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2djbV9kZWNyeXB0LCBfZ2NyeV9jaXBoZXJfZ2NtX2F1dGhlbnRpY2F0ZSk6IFVzZSBzaXplX3QKKwlmb3IgYnVmZmVyIGxlbmd0aHMuCisKKwlHQ006IGFkZCBGSVBTIG1vZGUgcmVzdHJpY3Rpb25zLgorCSogY2lwaGVyL2NpcGhlci1nY20uYyAoX2djcnlfY2lwaGVyX2djbV9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfZ2NtX2dldF90YWcpOiBEbyBub3QgYWxsb3cgdXNpbmcgaW4gRklQUyBtb2RlIGlzIHNldGl2CisJd2FzIGludm9jYXRlZCBkaXJlY3RseS4KKwkoX2djcnlfY2lwaGVyX2djbV9zZXRpdik6IFJlbmFtZSB0by4uLgorCShfZ2NyeV9jaXBoZXJfZ2NtX2luaXRpdik6IC4uLnRoaXMuCisJKF9nY3J5X2NpcGhlcl9nY21fc2V0aXYpOiBOZXcgc2V0aXYgZnVuY3Rpb24gd2l0aCBjaGVjayBmb3IgRklQUyBtb2RlLgorCVtUT0RPXSAoX2djcnlfY2lwaGVyX2djbV9nZXRpdik6IE5ldy4KKwkqIGNpcGhlci9jaXBoZXItaW50ZXJuYWwuaCAoZ2NyeV9jaXBoZXJfaGFuZGxlKTogQWRkCisJJ3VfbW9kZS5nY20uZGlzYWxsb3dfZW5jcnlwdGlvbl9iZWNhdXNlX29mX3NldGl2X2luX2ZpcHNfbW9kZScuCisKKwlHQ006IEFkZCBjbGVhcmluZyBhbmQgY2hlY2tpbmcgb2YgbWFya3MudGFnLgorCSogY2lwaGVyL2NpcGhlci1nY20uYyAoX2djcnlfY2lwaGVyX2djbV9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfZ2NtX2RlY3J5cHQsIF9nY3J5X2NpcGhlcl9nY21fYXV0aGVudGljYXRlKTogTWFrZSBzdXJlCisJdGhhdCB0YWcgaGFzIG5vdCBiZWVuIGZpbmFsaXplZCB5ZXQuCisJKF9nY3J5X2NpcGhlcl9nY21fc2V0aXYpOiBDbGVhciAnbWFya3MudGFnJy4KKworCUdDTTogQWRkIHN0YWNrIGJ1cm5pbmcuCisJKiBjaXBoZXIvY2lwaGVyLWdjbS5jIChkb19naGFzaCwgZ2hhc2gpOiBSZXR1cm4gc3RhY2sgYnVybiBkZXB0aC4KKwkoc2V0dXBNKTogV2lwZSAndG1wJyBidWZmZXIuCisJKGRvX2doYXNoX2J1Zik6IFdpcGUgJ3RtcCcgYnVmZmVyIGFuZCBhZGQgc3RhY2sgYnVybmluZy4KKworCUFkZCBhZ2dyZWdhdGVkIGJ1bGsgcHJvY2Vzc2luZyBmb3IgR0NNIG9uIHg4Ni02NC4KKwkqIGNpcGhlci9jaXBoZXItZ2NtLmMgW19feDg2XzY0X19dIChnZm11bF9wY2xtdWxfYWdncjQpOiBOZXcuCisJKGdoYXNoKSBbR0NNX1VTRV9JTlRFTF9QQ0xNVUxdOiBBZGQgYWdncmVnYXRlZCBidWxrIHByb2Nlc3NpbmcKKwlmb3IgX194ODZfNjRfXy4KKwkoc2V0dXBNKSBbX194ODZfNjRfX106IEFkZCBpbml0aWFsaXphdGlvbiBmb3IgYWdncmVnYXRlZCBidWxrCisJcHJvY2Vzc2luZy4KKworCUdDTTogVHdlYWsgSW50ZWwgUENMTVVMIGdoYXNoIGxvb3AgZm9yIHNtYWxsIHNwZWVkLXVwLgorCSogY2lwaGVyL2NpcGhlci1nY20uYyAoZG9fZ2hhc2gpOiBNYXJrICdpbmxpbmUnLgorCVtHQ01fVVNFX0lOVEVMX1BDTE1VTF0gKGRvX2doYXNoX3BjbG11bCk6IFJlbmFtZSB0by4uLgorCVtHQ01fVVNFX0lOVEVMX1BDTE1VTF0gKGdmbXVsX3BjbG11bCk6IC4udGhpcyBhbmQgbWFrZSBpbmxpbmUgZnVuY3Rpb24uCisJKGdoYXNoKSBbR0NNX1VTRV9JTlRFTF9QQ0xNVUxdOiBQcmVsb2FkIGRhdGEgYmVmb3JlIGdoYXNoLXBjbG11bCBsb29wLgorCisJR0NNOiBVc2UgY291bnRlciBtb2RlIGNvZGUgZm9yIHNwZWVkLXVwLgorCSogY2lwaGVyL2NpcGhlci1nY20uYyAoZ2hhc2gpOiBBZGQgcHJvY2VzcyBmb3IgbXVsdGlwbGUgYmxvY2tzLgorCShnY21fYnl0ZWNvdW50ZXJfYWRkLCBnY21fYWRkMzJfYmUxMjgsIGdjbV9jaGVja19kYXRhbGVuKQorCShnY21fY2hlY2tfYWFkbGVuX29yX2l2bGVuLCBkb19naGFzaF9idWYpOiBOZXcgZnVuY3Rpb25zLgorCShfZ2NyeV9jaXBoZXJfZ2NtX2VuY3J5cHQsIF9nY3J5X2NpcGhlcl9nY21fZGVjcnlwdCkKKwkoX2djcnlfY2lwaGVyX2djbV9hdXRoZW50aWNhdGUsIF9nY3J5X2NpcGhlcl9nY21fc2V0X2l2KQorCShfZ2NyeV9jaXBoZXJfZ2NtX3RhZyk6IEFkanVzdCB0byB1c2UgYWJvdmUgbmV3IGZ1bmN0aW9ucyBhbmQKKwljb3VudGVyIG1vZGUgZnVuY3Rpb25zIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24uCisJKiBjaXBoZXIvY2lwaGVyLWludGVybmFsLmggKGdjcnlfY2lwaGVyX2hhbmRsZSk6IFJlbW92ZSAnbGVuZ3RoJzsgQWRkCisJJ3VfbW9kZS5nY20uKGFkZGxlbnxkYXRhbGVufHRhZ2l2fGRhdGFsZW5fb3Zlcl9saW1pdHMpJy4KKwkoX2djcnlfY2lwaGVyX2djbV9zZXRpdik6IFJldHVybiBnY3J5X2Vycl9jb2RlX3QuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGNpcGhlcl9zZXRpdik6IFJldHVybiBlcnJvciBjb2RlLgorCShfZ2NyeV9jaXBoZXJfc2V0aXYpOiBIYW5kbGUgZXJyb3IgY29kZSBmcm9tICdjaXBoZXJfc2V0aXYnLgorCisJQWRkIEludGVsIFBDTE1VTCBhY2NlbGVyYXRpb24gZm9yIEdDTS4KKwkqIGNpcGhlci9jaXBoZXItZ2NtLmMgKGZpbGxNKTogUmVuYW1lLi4uCisJKGRvX2ZpbGxNKTogLi4udG8gdGhpcy4KKwkoZ2hhc2gpOiBSZW1vdmUuCisJKGZpbGxNKTogTmV3IG1hY3JvLgorCShHSEFTSCk6IFVzZSAnZG9fZ2hhc2gnIGluc3RlYWQgb2YgJ2doYXNoJy4KKwlbR0NNX1VTRV9JTlRFTF9QQ0xNVUxdIChkb19naGFzaF9wY2xtdWwpOiBOZXcuCisJKGdoYXNoKTogTmV3LgorCShzZXR1cE0pOiBOZXcuCisJKF9nY3J5X2NpcGhlcl9nY21fZW5jcnlwdCwgX2djcnlfY2lwaGVyX2djbV9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfZ2NtX2F1dGhlbnRpY2F0ZSwgX2djcnlfY2lwaGVyX2djbV9zZXRpdikKKwkoX2djcnlfY2lwaGVyX2djbV90YWcpOiBVc2UgJ2doYXNoJyBpbnN0ZWFkIG9mICdHSEFTSCcgYW5kCisJJ2MtPnVfbW9kZS5nY20udV90YWcudGFnJyBpbnN0ZWFkIG9mICdjLT51X3RhZy50YWcnLgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIChHQ01fVVNFX0lOVEVMX1BDTE1VTCk6IE5ldy4KKwkoZ2NyeV9jaXBoZXJfaGFuZGxlKTogTW92ZSAndV90YWcnIGFuZCAnZ2NtX3RhYmxlJyB1bmRlcgorCSd1X21vZGUuZ2NtJy4KKwkqIGNvbmZpZ3VyZS5hYyAocGNsbXVsc3VwcG9ydCwgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWwpOiBOZXcuCisJKiBzcmMvZzEwbGliLmggKEhXRl9JTlRFTF9QQ0xNVUwpOiBOZXcuCisJKiBzcmMvZ2xvYmFsLmM6IEFkZCAiaW50ZWwtcGNsbXVsIi4KKwkqIHNyYy9od2YteDg2LmMgKGRldGVjdF94ODZfZ251Yyk6IEFkZCBjaGVjayBmb3IgSW50ZWwgUENMTVVMLgorCisJR0NNOiBHSEFTSCBvcHRpbWl6YXRpb25zLgorCSogY2lwaGVyL2NpcGhlci1nY20uYyBbR0NNX1VTRV9UQUJMRVNdIChnY21SLCBnaGFzaCk6IFJlcGxhY2Ugd2l0aCBuZXcuCisJW0dDTV9VU0VfVEFCTEVTXSBbR0NNX1RBQkxFU19VU0VfVTY0XSAoYnNoaWZ0LCBmaWxsTSwgZG9fZ2hhc2gpOiBOZXcuCisJW0dDTV9VU0VfVEFCTEVTXSBbIUdDTV9UQUJMRVNfVVNFX1U2NF0gKGJzaGlmdCwgZmlsbE0pOiBSZXBsYWNlIHdpdGgKKwluZXcuCisJW0dDTV9VU0VfVEFCTEVTXSBbIUdDTV9UQUJMRVNfVVNFX1U2NF0gKGRvX2doYXNoKTogTmV3LgorCShfZ2NyeV9jaXBoZXJfZ2NtX3RhZyk6IFJlbW92ZSBleHRyYSBtZW1jcHkgdG8gb3V0YnVmIGFuZCB1c2UKKwlidWZfZXFfY29uc3QgZm9yIGNvbXBhcmluZyBhdXRoZW50aWNhdGlvbiB0YWcuCisJKiBjaXBoZXIvY2lwaGVyLWludGVybmFsLmggKGdjcnlfY2lwaGVyX2hhbmRsZSk6IERpZmZlcmVudCAnZ2NtX3RhYmxlJworCWZvciAzMi1iaXQgYW5kIDY0LWJpdCBwbGF0Zm9ybXMuCisKKwlBZGQgc29tZSBkb2N1bWVudGF0aW9uIGZvciBHQ00gbW9kZS4KKwkqIGRvYy9nY3J5cHQudGV4aTogQWRkIG1lbnRpb24gb2YgR0NNIG1vZGUuCisKKzIwMTMtMTEtMTkgIERtaXRyeSBFcmVtaW4tU29sZW5pa292ICA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisKKwlJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEdDTS4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdjaXBoZXItZ2NtLmMnLgorCSogY2lwaGVyL2NpcGhlci1jY20uYyAoX2djcnlfY2lwaGVydF9jY21fc2V0X2xlbmd0aHMpCisJKF9nY3J5X2NpcGhlcl9jY21fYXV0aGVudGljYXRlLCBfZ2NyeV9jaXBoZXJfY2NtX3RhZykKKwkoX2djcnlfY2lwaGVyX2NjbV9lbmNyeXB0LCBfZ2NyeV9jaXBoZXJfY2NtX2RlY3J5cHQpOiBDaGFuZ2UKKwknYy0+dV9tb2RlLmNjbS50YWcnIHRvICdjLT5tYXJrcy50YWcnLgorCSogY2lwaGVyL2NpcGhlci1nY20uYzogTmV3LgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIChHQ01fVVNFX1RBQkxFUyk6IE5ldy4KKwkoZ2NyeV9jaXBoZXJfaGFuZGxlKTogQWRkICdtYXJrcy50YWcnLCAndV90YWcnLCAnbGVuZ3RoJyBhbmQKKwknZ2NtX3RhYmxlJzsgUmVtb3ZlICd1X21vZGUuY2NtLnRhZycuCisJKF9nY3J5X2NpcGhlcl9nY21fZW5jcnlwdCwgX2djcnlfY2lwaGVyX2djbV9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfZ2NtX3NldGl2LCBfZ2NyeV9jaXBoZXJfZ2NtX2F1dGhlbnRpY2F0ZSkKKwkoX2djcnlfY2lwaGVyX2djbV9nZXRfdGFnLCBfZ2NyeV9jaXBoZXJfZ2NtX2NoZWNrX3RhZyk6IE5ldy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoX2djcnlfY2lwaGVyX29wZW5faW50ZXJuYWwsIGNpcGhlcl9zZXRrZXkpCisJKGNpcGhlcl9lbmNyeXB0LCBjaXBoZXJfZGVjcnlwdCwgX2djcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSkKKwkoX2djcnlfY2lwaGVyX2dldHRhZywgX2djcnlfY2lwaGVyX2NoZWNrdGFnKTogQWRkIEdDTSBtb2RlIGhhbmRsaW5nLgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X2NpcGhlcl9tb2Rlcyk6IEFkZCBHQ1JZX0NJUEhFUl9NT0RFX0dDTS4KKwkoR0NSWV9HQ01fQkxPQ0tfTEVOKTogTmV3LgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfZ2NtX2NpcGhlcik6IE5ldy4KKwkoY2hlY2tfY2lwaGVycyk6IEFkZCBHQ00gY2hlY2suCisJKGNoZWNrX2NpcGhlcl9tb2Rlcyk6IENhbGwgJ2NoZWNrX2djbV9jaXBoZXInLgorCSogdGVzdHMvYmVuY2gtc2xvcGUuYyAoYmVuY2hfZ2NtX2VuY3J5cHRfZG9fYmVuY2gpCisJKGJlbmNoX2djbV9kZWNyeXB0X2RvX2JlbmNoLCBiZW5jaF9nY21fYXV0aGVudGljYXRlX2RvX2JlbmNoKQorCShnY21fZW5jcnlwdF9vcHMsIGdjbV9kZWNyeXB0X29wcywgZ2NtX2F1dGhlbnRpY2F0ZV9vcHMpOiBOZXcuCisJKGNpcGhlcl9tb2Rlcyk6IEFkZCBHQ00gZW5jL2RlYy9hdXRoLgorCShjaXBoZXJfYmVuY2hfb25lKTogTGltaXQgR0NNIHRvIGJsb2NrIGNpcGhlcnMgd2l0aCAxNiBieXRlIGJsb2NrLXNpemUuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAoY2lwaGVyX2JlbmNoKTogQWRkIEdDTS4KKworMjAxMy0xMS0xOSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCUNhbWVsbGlhOiBmaXggY29tcGlsZXIgd2FybmluZy4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKGNhbWVsbGlhX3NldGtleSk6IFVzZSBicmFjZXMgYXJvdW5kIGVtcHR5IGlmCisJc3RhdGVtZW50LgorCisJVHdlYWsgQ2FtZWxsaWEtQVZYIGtleS1zZXR1cCBmb3Igc21hbGwgc3BlZWQtdXAuCisJKiBjaXBoZXIvY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LlMgKGNhbWVsbGlhX2YpOiBNZXJnZSBTLWZ1bmN0aW9uIG91dHB1dAorCXJvdGF0aW9uIHdpdGggUC1mdW5jdGlvbi4KKworCUFkZCBDTUFDIChDaXBoZXItYmFzZWQgTUFDKSB0byBNQUMgQVBJLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ2NpcGhlci1jbWFjLmMnIGFuZCAnbWFjLWNtYWMuYycuCisJKiBjaXBoZXIvY2lwaGVyLWNtYWMuYzogTmV3LgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIChnY3J5X2NpcGhlcl9oYW5kbGUudV9tb2RlKTogQWRkICdjbWFjJy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3Blbik6IFJlbmFtZSB0by4uLgorCShfZ2NyeV9jaXBoZXJfb3Blbl9pbnRlcm5hbCk6IC4uLnRoaXMgYW5kIGFkZCBDTUFDLgorCShnY3J5X2NpcGhlcl9vcGVuKTogTmV3IHdyYXBwZXIgdGhhdCBkaXNhbGxvd3MgdXNlIG9mIGludGVybmFsCisJbW9kZXMgKENNQUMpIGZyb20gb3V0c2lkZS4KKwkoY2lwaGVyX3NldGtleSwgY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlLCBfZ2NyeV9jaXBoZXJfZ2V0dGFnKQorCShfZ2NyeV9jaXBoZXJfY2hlY2t0YWcpOiBBZGQgaGFuZGxpbmcgZm9yIENNQUMgbW9kZS4KKwkoY2lwaGVyX3Jlc2V0KTogRG8gbm90IHJlc2V0ICdtYXJrcy5rZXknIGFuZCBkbyBub3QgY2xlYXIgc3Via2V5cyBpbgorCSd1X21vZGUnIGluIENNQUMgbW9kZS4KKwkqIGNpcGhlci9tYWMtY21hYy5jOiBOZXcuCisJKiBjaXBoZXIvbWFjLWludGVybmFsLmg6IEFkZCBDTUFDIHN1cHBvcnQgYW5kIGFsZ29yaXRobXMuCisJKiBjaXBoZXIvbWFjLmM6IEFkZCBDTUFDIGFsZ29yaXRobXMuCisJKiBkb2MvZ2NyeXB0LnRleGk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBDTUFDLgorCSogc3JjL2NpcGhlci5oIChnY3J5X2NpcGhlcl9pbnRlcm5hbF9tb2Rlcyk6IE5ldy4KKwkoX2djcnlfY2lwaGVyX29wZW5faW50ZXJuYWwsIF9nY3J5X2NpcGhlcl9jbWFjX2F1dGhlbnRpY2F0ZSkKKwkoX2djcnlfY2lwaGVyX2NtYWNfZ2V0X3RhZywgX2djcnlfY2lwaGVyX2NtYWNfY2hlY2tfdGFnKQorCShfZ2NyeV9jaXBoZXJfY21hY19zZXRfc3Via2V5cyk6IE5ldyBwcm90b3R5cGVzLgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X21hY19hbGdvcyk6IEFkZCBDTUFDIGFsZ29yaXRobXMuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19tYWMpOiBBZGQgQ01BQyB0ZXN0IHZlY3RvcnMuCisKKzIwMTMtMTEtMTYgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlBZGQgbmV3IE1BQyBBUEksIGluaXRpYWxseSB3aXRoIEhNQUMuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnbWFjLmMnLCAnbWFjLWludGVybmFsLmgnIGFuZCAnbWFjLWhtYWMuYycuCisJKiBjaXBoZXIvYnVmaGVscC5oIChidWZfZXFfY29uc3QpOiBOZXcuCisJKiBjaXBoZXIvY2lwaGVyLWNjbS5jIChfZ2NyeV9jaXBoZXJfY2NtX3RhZyk6IFVzZSAnYnVmX2VxX2NvbnN0JyBmb3IKKwljb25zdGFudC10aW1lIGNvbXBhcmUuCisJKiBjaXBoZXIvbWFjLWhtYWMuYzogTmV3LgorCSogY2lwaGVyL21hYy1pbnRlcm5hbC5oOiBOZXcuCisJKiBjaXBoZXIvbWFjLmM6IE5ldy4KKwkqIGRvYy9nY3J5cHQudGV4aTogQWRkIGRvY3VtZW50YXRpb24gZm9yIE1BQyBBUEkuCisJKiBzcmMvZ2NyeXB0LWludC5oIFtHUEdfRVJST1JfVkVSU0lPTl9OVU1CRVIgPCAxLjEzXQorCShHUEdfRVJSX01BQ19BTEdPKTogTmV3LgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X21hY19oYW5kbGUsIGdjcnlfbWFjX2hkX3QsIGdjcnlfbWFjX2FsZ29zKQorCShnY3J5X21hY19mbGFncywgZ2NyeV9tYWNfb3BlbiwgZ2NyeV9tYWNfY2xvc2UsIGdjcnlfbWFjX2N0bCkKKwkoZ2NyeV9tYWNfYWxnb19pbmZvLCBnY3J5X21hY19zZXRrZXksIGdjcnlfbWFjX3NldGl2LCBnY3J5X21hY193cml0ZSkKKwkoZ2NyeV9tYWNfcmVhZCwgZ2NyeV9tYWNfdmVyaWZ5LCBnY3J5X21hY19nZXRfYWxnb19tYWNsZW4pCisJKGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbiwgZ2NyeV9tYWNfYWxnb19uYW1lLCBnY3J5X21hY19tYXBfbmFtZSkKKwkoZ2NyeV9tYWNfcmVzZXQsIGdjcnlfbWFjX3Rlc3RfYWxnbyk6IE5ldy4KKwkqIHNyYy9saWJnY3J5cHQuZGVmIChnY3J5X21hY19vcGVuLCBnY3J5X21hY19jbG9zZSwgZ2NyeV9tYWNfY3RsKQorCShnY3J5X21hY19hbGdvX2luZm8sIGdjcnlfbWFjX3NldGtleSwgZ2NyeV9tYWNfc2V0aXYsIGdjcnlfbWFjX3dyaXRlKQorCShnY3J5X21hY19yZWFkLCBnY3J5X21hY192ZXJpZnksIGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbikKKwkoZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuLCBnY3J5X21hY19hbGdvX25hbWUsIGdjcnlfbWFjX21hcF9uYW1lKTogTmV3LgorCSogc3JjL2xpYmdjcnlwdC52ZXJzIChnY3J5X21hY19vcGVuLCBnY3J5X21hY19jbG9zZSwgZ2NyeV9tYWNfY3RsKQorCShnY3J5X21hY19hbGdvX2luZm8sIGdjcnlfbWFjX3NldGtleSwgZ2NyeV9tYWNfc2V0aXYsIGdjcnlfbWFjX3dyaXRlKQorCShnY3J5X21hY19yZWFkLCBnY3J5X21hY192ZXJpZnksIGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbikKKwkoZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuLCBnY3J5X21hY19hbGdvX25hbWUsIGdjcnlfbWFjX21hcF9uYW1lKTogTmV3LgorCSogc3JjL3Zpc2liaWxpdHkuYyAoZ2NyeV9tYWNfb3BlbiwgZ2NyeV9tYWNfY2xvc2UsIGdjcnlfbWFjX2N0bCkKKwkoZ2NyeV9tYWNfYWxnb19pbmZvLCBnY3J5X21hY19zZXRrZXksIGdjcnlfbWFjX3NldGl2LCBnY3J5X21hY193cml0ZSkKKwkoZ2NyeV9tYWNfcmVhZCwgZ2NyeV9tYWNfdmVyaWZ5LCBnY3J5X21hY19nZXRfYWxnb19tYWNsZW4pCisJKGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbiwgZ2NyeV9tYWNfYWxnb19uYW1lLCBnY3J5X21hY19tYXBfbmFtZSk6IE5ldy4KKwkqIHNyYy92aXNpYmlsaXR5LmggKGdjcnlfbWFjX29wZW4sIGdjcnlfbWFjX2Nsb3NlLCBnY3J5X21hY19jdGwpCisJKGdjcnlfbWFjX2FsZ29faW5mbywgZ2NyeV9tYWNfc2V0a2V5LCBnY3J5X21hY19zZXRpdiwgZ2NyeV9tYWNfd3JpdGUpCisJKGdjcnlfbWFjX3JlYWQsIGdjcnlfbWFjX3ZlcmlmeSwgZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuKQorCShnY3J5X21hY19nZXRfYWxnb19rZXlsZW4sIGdjcnlfbWFjX2FsZ29fbmFtZSwgZ2NyeV9tYWNfbWFwX25hbWUpOiBOZXcuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19vbmVfbWFjLCBjaGVja19tYWMpOiBOZXcuCisJKG1haW4pOiBDYWxsICdjaGVja19tYWMnLgorCSogdGVzdHMvYmVuY2gtc2xvcGUuYyAoYmVuY2hfcHJpbnRfaGVhZGVyLCBiZW5jaF9wcmludF9mb290ZXIpOiBBbGxvdworCXZhcmlhYmxlIGFsZ29yaXRobSBuYW1lIHdpZHRoLgorCShfY2lwaGVyX2JlbmNoLCBoYXNoX2JlbmNoKTogVXBkYXRlIHRvIGFib3ZlIGNoYW5nZS4KKwkoYmVuY2hfaGFzaF9kb19iZW5jaCk6IEFkZCAnZ2NyeV9tZF9yZXNldCcuCisJKGJlbmNoX21hY19tb2RlLCBiZW5jaF9tYWNfaW5pdCwgYmVuY2hfbWFjX2ZyZWUsIGJlbmNoX21hY19kb19iZW5jaCkKKwkobWFjX29wcywgbWFjX21vZGVzLCBtYWNfYmVuY2hfb25lLCBfbWFjX2JlbmNoLCBtYWNfYmVuY2gpOiBOZXcuCisJKG1haW4pOiBBZGQgJ21hYycgYmVuY2htYXJrIG9wdGlvbnMuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAobWFjX3JlcGV0aXRpb25zLCBtYWNfYmVuY2gpOiBOZXcuCisJKG1haW4pOiBBZGQgJ21hYycgYmVuY2htYXJrIG9wdGlvbnMuCisKKwlVc2UgY29ycmVjdCBibG9ja3NpemUgb2YgMzIgYnl0ZXMgZm9yIEdPU1RSMzQxMS05NCBITUFDLgorCSogY2lwaGVyL21kLmMgKG1kX29wZW4pOiBTZXQgbWFjcGFkc19Cc2l6ZSB0byAzMiBmb3IKKwlHQ1JZX01EX0dPU1QyNDMxMV85NC4KKworMjAxMy0xMS0xNSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCWNpcGhlcjogdXNlIHNpemVfdCBmb3IgaW50ZXJuYWwgYnVmZmVyIGxlbmd0aHMuCisJKiBjaXBoZXIvYXJjZm91ci5jIChkb19lbmNyeXB0X3N0cmVhbSwgZW5jcnlwdF9zdHJlYW0pOiBVc2UgJ3NpemVfdCcKKwlmb3IgYnVmZmVyIGxlbmd0aHMuCisJKiBjaXBoZXIvYmxvd2Zpc2guYyAoX2djcnlfYmxvd2Zpc2hfY3RyX2VuYywgX2djcnlfYmxvd2Zpc2hfY2JjX2RlYykKKwkoX2djcnlfYmxvd2Zpc2hfY2ZiX2RlYyk6IERpdHRvLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoX2djcnlfY2FtZWxsaWFfY3RyX2VuYykKKwkoX2djcnlfY2FtZWxsaWFfY2JjX2RlYywgX2djcnlfYmxvd2Zpc2hfY2ZiX2RlYyk6IERpdHRvLgorCSogY2lwaGVyL2Nhc3Q1LmMgKF9nY3J5X2Nhc3Q1X2N0cl9lbmMsIF9nY3J5X2Nhc3Q1X2NiY19kZWMpCisJKF9nY3J5X2Nhc3Q1X2NmYl9kZWMpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItYWVzd3JhcC5jIChfZ2NyeV9jaXBoZXJfYWVzd3JhcF9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfYWVzd3JhcF9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvY2lwaGVyLWNiYy5jIChfZ2NyeV9jaXBoZXJfY2JjX2VuY3J5cHQpCisJKF9nY3J5X2NpcGhlcl9jYmNfZGVjcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL2NpcGhlci1jY20uYyAoX2djcnlfY2lwaGVyX2NjbV9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfY2NtX2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItY2ZiLmMgKF9nY3J5X2NpcGhlcl9jZmJfZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2NmYl9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvY2lwaGVyLWN0ci5jIChfZ2NyeV9jaXBoZXJfY3RyX2VuY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItaW50ZXJuYWwuaCAoZ2NyeV9jaXBoZXJfaGFuZGxlLT5idWxrKQorCShfZ2NyeV9jaXBoZXJfY2JjX2VuY3J5cHQsIF9nY3J5X2NpcGhlcl9jYmNfZGVjcnlwdCkKKwkoX2djcnlfY2lwaGVyX2NmYl9lbmNyeXB0LCBfZ2NyeV9jaXBoZXJfY2ZiX2RlY3J5cHQpCisJKF9nY3J5X2NpcGhlcl9vZmJfZW5jcnlwdCwgX2djcnlfY2lwaGVyX2N0cl9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfYWVzd3JhcF9lbmNyeXB0LCBfZ2NyeV9jaXBoZXJfYWVzd3JhcF9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfY2NtX2VuY3J5cHQsIF9nY3J5X2NpcGhlcl9jY21fZGVjcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL2NpcGhlci1vZmIuYyAoX2djcnlfY2lwaGVyX2NiY19lbmNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvY2lwaGVyLXNlbGZ0ZXN0LmggKGdjcnlfY2lwaGVyX2J1bGtfY2JjX2RlY190KQorCShnY3J5X2NpcGhlcl9idWxrX2NmYl9kZWNfdCwgZ2NyeV9jaXBoZXJfYnVsa19jdHJfZW5jX3QpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXIuYyAoY2lwaGVyX3NldGtleSwgY2lwaGVyX3NldGl2LCBkb19lY2JfY3J5cHQpCisJKGRvX2VjYl9lbmNyeXB0LCBkb19lY2JfZGVjcnlwdCwgY2lwaGVyX2VuY3J5cHQpCisJKGNpcGhlcl9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoX2djcnlfYWVzX2N0cl9lbmMsIF9nY3J5X2Flc19jYmNfZGVjKQorCShfZ2NyeV9hZXNfY2ZiX2RlYywgX2djcnlfYWVzX2NiY19lbmMsIF9nY3J5X2Flc19jZmJfZW5jKTogRGl0dG8uCisJKiBjaXBoZXIvc2Fsc2EyMC5jIChzYWxzYTIwX3NldGl2LCBzYWxzYTIwX2RvX2VuY3J5cHRfc3RyZWFtKQorCShzYWxzYTIwX2VuY3J5cHRfc3RyZWFtLCBzYWxzYTIwcjEyX2VuY3J5cHRfc3RyZWFtKTogRGl0dG8uCisJKiBjaXBoZXIvc2VycGVudC5jIChfZ2NyeV9zZXJwZW50X2N0cl9lbmMsIF9nY3J5X3NlcnBlbnRfY2JjX2RlYykKKwkoX2djcnlfc2VycGVudF9jZmJfZGVjKTogRGl0dG8uCisJKiBjaXBoZXIvdHdvZmlzaC5jIChfZ2NyeV90d29maXNoX2N0cl9lbmMsIF9nY3J5X3R3b2Zpc2hfY2JjX2RlYykKKwkoX2djcnlfdHdvZmlzaF9jZmJfZGVjKTogRGl0dG8uCisJKiBzcmMvY2lwaGVyLXByb3RvLmggKGdjcnlfY2lwaGVyX3N0ZW5jcnlwdF90KQorCShnY3J5X2NpcGhlcl9zdGRlY3J5cHRfdCwgY2lwaGVyX3NldGl2X2Z1Y3RfdCk6IERpdHRvLgorCSogc3JjL2NpcGhlci5oIChfZ2NyeV9hZXNfY2ZiX2VuYywgX2djcnlfYWVzX2NmYl9kZWMpCisJKF9nY3J5X2Flc19jYmNfZW5jLCBfZ2NyeV9hZXNfY2JjX2RlYywgX2djcnlfYWVzX2N0cl9lbmMpCisJKF9nY3J5X2Jsb3dmaXNoX2NmYl9kZWMsIF9nY3J5X2Jsb3dmaXNoX2NiY19kZWMpCisJKF9nY3J5X2Jsb3dmaXNoX2N0cl9lbmMsIF9nY3J5X2Nhc3Q1X2NmYl9kZWMsIF9nY3J5X2Nhc3Q1X2NiY19kZWMpCisJKF9nY3J5X2Nhc3Q1X2N0cl9lbmMsIF9nY3J5X2NhbWVsbGlhX2NmYl9kZWMsIF9nY3J5X2NhbWVsbGlhX2NiY19kZWMpCisJKF9nY3J5X2NhbWVsbGlhX2N0cl9lbmMsIF9nY3J5X3NlcnBlbnRfY2ZiX2RlYywgX2djcnlfc2VycGVudF9jYmNfZGVjKQorCShfZ2NyeV9zZXJwZW50X2N0cl9lbmMsIF9nY3J5X3R3b2Zpc2hfY2ZiX2RlYywgX2djcnlfdHdvZmlzaF9jYmNfZGVjKQorCShfZ2NyeV90d29maXNoX2N0cl9lbmMpOiBEaXR0by4KKworCUNhbWVsbGlhOiBBZGQgQVZYL0FFUy1OSSBrZXkgc2V0dXAuCisJKiBjaXBoZXIvY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LlMgKGtleV9iaXRsZW5ndGgsIGtleV90YWJsZSk6IE5ldworCW9yZGVyIG9mIGZpZWxkcyBpbiBjdHguCisJKGNhbWVsbGlhX2YsIHZlY19yb2wxMjgsIHZlY19yb3IxMjgpOiBOZXcgbWFjcm9zLgorCShfX2NhbWVsbGlhX2F2eF9zZXR1cDEyOCwgX19jYW1lbGxpYV9hdnhfc2V0dXAyNTYpCisJKF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9rZXlnZW4pOiBOZXcgZnVuY3Rpb25zLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUyAoa2V5X2JpdGxlbmd0aCwga2V5X3RhYmxlKTogTmV3CisJb3JkZXIgb2YgZmllbGRzIGluIGN0eC4KKwkqIGNpcGhlci9jYW1lbGxpYS1hcm0uUyAoQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4sIGtleV9sZW5ndGgpOiBSZW1vdmUKKwl1bnVzZWQgbWFjcm9zLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoQ0FNRUxMSUFfY29udGV4dCk6IE1vdmUga2V5dGFibGUgdG8gaGVhZCBmb3IKKwliZXR0ZXIgYWxpZ25tZW50OyBNYWtlICd1c2VfYWVzbmlfYXZ4JyBhbmQgJ3VzZV9hZXNuaV9hdngyJyBiaXRmaWVsZAorCW1lbWJlcnMuCisJW1VTRV9BRVNOSV9BVlhdIChfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfa2V5Z2VuKTogTmV3IHByb3RvdHlwZS4KKwkoY2FtZWxsaWFfc2V0a2V5KSBbVVNFX0FFU05JX0FWWCB8fCBVU0VfQUVTTklfQVZYMl06IFJlYWQgaHcgZmVhdHVyZXMKKwl0byB2YXJpYWJsZSAnaHdmJyBhbmQgbWF0Y2ggZmVhdHVyZXMgZnJvbSBpdC4KKwkoY2FtZWxsaWFfc2V0a2V5KSBbVVNFX0FFU05JX0FWWF06IFVzZSBBRVMtTkkvQVZYIGtleSBzZXR1cCBpZgorCWF2YWlsYWJsZS4KKworCUF2b2lkIHVubmVlZGVkIHN0YWNrIGJ1cm5pbmcgd2l0aCBBRVMtTkkgYW5kIHJlZHVjZSBudW1iZXIgb2YgJ2RlY3J5cHRpb25fcHJlcGFyZWQnIGNoZWNrcworCSogY2lwaGVyL3Jpam5kYWVsLmMgKFJJSk5EQUVMX2NvbnRleHQpOiBNYWtlICdkZWNyeXB0aW9uX3ByZXBhcmVkJywKKwkndXNlX3BhZGxvY2snIGFuZCAndXNlX2Flc25pJyAxLWJpdCBtZW1iZXJzIGluIGJpdGZpZWxkLgorCShkb19zZXRrZXkpOiBNb3ZlICdod2ZlYXR1cmVzJyBpbnNpZGUgW1VTRV9BRVNOSSB8fMKgVVNFX1BBRExPQ0tdLgorCShkb19hZXNuaV9lbmNfYWxpZ25lZCk6IFJlbmFtZSB0by4uLgorCShkb19hZXNuaV9lbmMpOiAuLi50aGlzLCBhcyBmdW5jdGlvbiBkb2VzIG5vdCByZXF1aXJlIGFsaWduZWQgaW5wdXQuCisJKGRvX2Flc25pX2RlY19hbGlnbmVkKTogUmVuYW1lIHRvLi4uCisJKGRvX2Flc25pX2RlYyk6IC4uLnRoaXMsIGFzIGZ1bmN0aW9uIGRvZXMgbm90IHJlcXVpcmUgYWxpZ25lZCBpbnB1dC4KKwkoZG9fYWVzbmkpOiBSZW1vdmUuCisJKHJpam5kYWVsX2VuY3J5cHQpOiBDYWxsICdkb19hZXNuaV9lbmMnIGluc3RlYWQgb2YgJ2RvX2Flc25pJy4KKwkocmlqbmRhZWxfZGVjcnlwdCk6IENhbGwgJ2RvX2Flc25pX2RlYycgaW5zdGVhZCBvZiAnZG9fYWVzbmknLgorCShjaGVja19kZWNyeXB0aW9uX3ByZXBhcmF0aW9uKTogTmV3LgorCShkb19kZWNyeXB0KTogUmVtb3ZlICdkZWNyeXB0aW9uX3ByZXBhcmVkJyBjaGVjay4KKwkocmlqbmRhZWxfZGVjcnlwdCk6IERpdHRvIGFuZCBjYWxsICdjaGVja19kZWNyeXB0aW9uX3ByZXBhcmF0aW9uJy4KKwkoX2djcnlfYWVzX2NiY19kZWMpOiBEaXR0by4KKwkoX2djcnlfYWVzX2NmYl9lbmMpOiBBZGQgJ2J1cm5fZGVwdGgnIGFuZCBidXJuIHN0YWNrIG9ubHkgd2hlbiBuZWVkZWQuCisJKF9nY3J5X2Flc19jYmNfZW5jKTogRGl0dG8uCisJKF9nY3J5X2Flc19jdHJfZW5jKTogRGl0dG8uCisJKF9nY3J5X2Flc19jZmJfZGVjKTogRGl0dG8uCisJKF9nY3J5X2Flc19jYmNfZGVjKTogRGl0dG8gYW5kIGNvcnJlY3QgY2xlYXJpbmcgb2YgJ3NhdmVidWYnLgorCisyMDEzLTExLTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCW1kOiBGaXggaGFzaGluZyBmb3IgZGF0YSA+PSAyNTYgR0IuCisJKiBjaXBoZXIvaGFzaC1jb21tb24uaCAoZ2NyeV9tZF9ibG9ja19jdHgpOiBBZGQgIm5ibG9ja3NfaGlnaCIuCisJKiBjaXBoZXIvaGFzaC1jb21tb24uYyAoX2djcnlfbWRfYmxvY2tfd3JpdGUpOiBCdW1wIE5CTE9DS1NfSElHSC4KKwkqIGNpcGhlci9tZDQuYyAobWQ0X2luaXQsIG1kNF9maW5hbCk6IFRha2UgY2FyZSBvZiBOQkxPQ0tTX0hJR0guCisJKiBjaXBoZXIvbWQ1LmMgKG1kNV9pbml0LCBtZDVfZmluYWwpOiBEaXR0by4KKwkqIGNpcGhlci9ybWQxNjAuYyAoX2djcnlfcm1kMTYwX2luaXQsIHJtZDE2MF9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL3NoYTEuYyAoc2hhMV9pbml0LCBzaGExX2ZpbmFsKTogRGl0dG8uCisJKiBjaXBoZXIvc2hhMjU2LmMgKHNoYTI1Nl9pbml0LCBzaGEyMjRfaW5pdCwgc2hhMjU2X2ZpbmFsKTogRGl0dG8uCisJKiBjaXBoZXIvc2hhNTEyLmMgKHNoYTUxMl9pbml0LCBzaGEzODRfaW5pdCwgc2hhNTEyX2ZpbmFsKTogRGl0dG8uCisJKiBjaXBoZXIvdGlnZXIuYyAoZG9faW5pdCwgdGlnZXJfZmluYWwpOiBEaXR0by4KKwkqIGNpcGhlci93aGlybHBvb2wuYyAod2hpcmxwb29sX2ZpbmFsKTogRGl0dG8uCisKKwkqIGNpcGhlci9tZC5jIChnY3J5X21kX2FsZ29faW5mbyk6IEFkZCBHQ1JZQ1RMX1NFTEZURVNULgorCShfZ2NyeV9tZF9zZWxmdGVzdCk6IFJldHVybiAibm90IGltcGxlbWVudGVkIiBhcyByZXF1aXJlZC4KKwkqIHRlc3RzL2hhc2h0ZXN0LmM6IE5ldy4KKwkqIHRlc3RzL2dlbmhhc2hkYXRhLmM6IE5ldy4KKwkqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBoYXNodGVzdC4KKwkobm9pbnN0X1BST0dSQU1TKTogQWRkIGdlbmhhc2hkYXRhCisKKzIwMTMtMTEtMTMgIENocmlzdGlhbiBHcm90aG9mZiAgPGNocmlzdGlhbkBncm90aG9mZi5vcmc+CisKKwllY2M6IEZpeCBrZXkgZ2VuZXJhdGlvbiBmb3IgYSBwbGFpbiBFZDI1NTE5IGtleS4KKwkqIGNpcGhlci9lY2MuYyAobmlzdF9nZW5lcmF0ZV9rZXkpOiBVc2UgY3VzdG9tIGNvZGUgZm9yIEVEMjU1MTkuCisKKwllY2M6IEZpeCBzb21lIG1lbW9yeSBsZWFrcy4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKF9nY3J5X21waV9lY19uZXcpOiBGcmVlIGVjLT5iIGJlZm9yZSBhc3NpZ25pbmcuCisJKiBjaXBoZXIvZWNjLmMgKG5pc3RfZ2VuZXJhdGVfa2V5KTogUmVsZWFzZSBRLgorCSogY2lwaGVyL2VjYy1lZGRzYS5jIChfZ2NyeV9lY2NfZWRkc2FfZ2Vua2V5KTogRGl0dG8uCisKKzIwMTMtMTEtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJZWNjOiBDaGFuZ2Uga2V5Z3JpcCBjb21wdXRhdGlvbiBmb3IgRWQyNTUxOStFZERTQS4KKwkqIGNpcGhlci9lY2MuYyAoY29tcHV0ZV9rZXlncmlwKTogUmV3b3JrLgorCSogY2lwaGVyL2VjYy1lZGRzYS5jIChfZ2NyeV9lY2NfZWRkc2FfZW5zdXJlX2NvbXBhY3QpOiBOZXcuCisJKiBjaXBoZXIvZWNjLWN1cnZlcy5jIChfZ2NyeV9lY2NfdXBkYXRlX2N1cnZlX3BhcmFtKTogTmV3LgorCSogdGVzdHMva2V5Z3JpcC5jIChrZXlfZ3JpcHMpOiBBZGQgZmxhZyBwYXJhbSBhbmQgdGVzdCBjYXNlcyBmb3IKKwlFZDI1NTE5LgorCisJbXBpOiBBZGQgc3BlY2lhbCBmb3JtYXQgR0NSWU1QSV9GTVRfT1BBUVVFLgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZTVBJX0ZNVF9PUEFRVUUpOiBOZXcuCisJKF9nY3J5X3NleHBfbnRoX29wYXF1ZV9tcGkpOiBSZW1vdmUuCisJKiBzcmMvc2V4cC5jIChnY3J5X3NleHBfbnRoX21waSk6IEFkZCBzdXBwb3J0IGZvciBHQ1JZTVBJX0ZNVF9PUEFRVUUuCisJKF9nY3J5X3NleHBfdmV4dHJhY3RfcGFyYW0pOiBSZXBsYWNlIHJlbW92ZWQgZnVuY3Rpb24gYnkKKwlHQ1JZTVBJX0ZNVF9PUEFRVUUuCisKKzIwMTMtMTEtMTAgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlGaXggZXJyb3Igb3V0cHV0IGluIENUUiBzZWxmdGVzdC4KKwkqIGNpcGhlci9jaXBoZXItc2VsZnRlc3QuYyAoX2djcnlfc2VsZnRlc3RfaGVscGVyX2N0cik6IENoYW5nZQorCWZwcmludGYoc3RkZXJyLC4uLikgdG8gc3lzbG9nKCk7IENvcnJlY3QgZXJyb3Igb3V0cHV0IGZvciBidWxrCisJSVYgY2hlY2ssIHBsYWludGV4dCBtaXNtYXRjaCA9PiBjaXBoZXJ0ZXh0IG1pc21hdGNoLgorCisyMDEzLTExLTA5ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJRml4IFNlcnBlbnQtQVZYMiBhbmQgQ2FtZWxsaWEtQVZYMiBjb3VudGVyIG1vZGVzLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUworCShfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2N0cl9lbmMpOiBCeXRlLXN3YXAgYmVmb3JlIGNoZWNraW5nIGZvcgorCW92ZXJmbG93IGhhbmRsaW5nLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoc2VsZnRlc3RfY3RyXzEyOCwgc2VsZnRlc3RfY2ZiXzEyOCkKKwkoc2VsZnRlc3RfY2JjXzEyOCk6IEFkZCAxNiB0byBuYmxvY2tzLgorCSogY2lwaGVyL2NpcGhlci1zZWxmdGVzdC5jIChfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyKTogQWRkIHRlc3Qgd2l0aAorCW5vbi1vdmVyZmxvd2luZyBJViBhbmQgbW9kaWZ5IG92ZXJmbG93IElWIHRvIGRldGVjdCBicm9rZW4gZW5kaWFubmVzcworCWhhbmRsaW5nLgorCSogY2lwaGVyL3NlcnBlbnQtYXZ4Mi1hbWQ2NC5TIChfZ2NyeV9zZXJwZW50X2F2eDJfY3RyX2VuYyk6IEJ5dGUtc3dhcAorCWJlZm9yZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgaGFuZGxpbmc7IEZpeCBjcmF6eS1taXhlZC1lbmRpYW4gSVYKKwljb25zdHJ1Y3Rpb24gdG8gYmlnLWVuZGlhbi4KKwkqIGNpcGhlci9zZXJwZW50LmMgKHNlbGZ0ZXN0X2N0cl8xMjgsIHNlbGZ0ZXN0X2NmYl8xMjgpCisJKHNlbGZ0ZXN0X2NiY18xMjgpOiBBZGQgOCB0byBuYmxvY2tzLgorCisyMDEzLTExLTA5ICBTZXJnZXkgViAgPHNmdHAubXR1Y2lAZ21haWwuY29tPgorCisJY2lwaGVyL2dvc3QyODE0Nzogb3B0aW1pemF0aW9uOiB1c2UgcHJlY29tcHV0ZWQgUy1ib3ggdGFibGVzLgorCSogY2lwaGVyL2dvc3QuaCAoR09TVDI4MTQ3X2NvbnRleHQpOiBSZW1vdmUgdW5uZWVkZWQgc3Vic3QgYW5kCisJc3Vic3Rfc2V0IG1lbWJlcnMuCisJKiBjaXBoZXIvZ29zdDI4MTQ3LmMgKG1heCk6IFJlbW92ZSB1bm5lZWRlZCBtYWNyby4KKwkodGVzdF9zYm94KTogUmVwbGFjZSB3aXRoIG5ldyBwcmVjb21wdXRlZCB0YWJsZXMuCisJKGdvc3Rfc2V0X3N1YnN0KTogUmVtb3ZlIGZ1bmN0aW9uLgorCShnb3N0X3ZhbCk6IFVzZSBuZXcgUy1ib3ggdGFibGVzLgorCShnb3N0X2VuY3J5cHRfYmxvY2ssIGdvc3RfZGVjcnlwdF9ibG9jayk6IFR3ZWFrIHRvIHVzZSBuZXcgY3R4IGFuZAorCVMtYm94IHRhYmxlcy4KKworMjAxMy0xMS0wOSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCUZpeCB0YWlsIGhhbmRsaW5nIGZvciBBRVMtTkkgY291bnRlciBtb2RlLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgKGRvX2Flc25pX2N0cik6IEZpeCBvdXRwdXR0aW5nIG9mIHVwZGF0ZWQKKwljb3VudGVyLUlWLgorCisyMDEzLTExLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCWVjYzogSW1wcm92ZSBnY3J5X3BrX2dldF9jdXJ2ZS4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKF9nY3J5X2VjY19maWxsX2luX2N1cnZlKTogRmFjdG9yIHNvbWUgY29kZSBvdXQKKwl0byAuLgorCShmaW5kX2RvbWFpbl9wYXJtc19pZHgpOiBuZXcuCisJKF9nY3J5X2VjY19nZXRfY3VydmUpOiBGaW5kIGJ5IGN1cnZlIG5hbWUgb24gZXJyb3IuCisKKwljaXBoZXI6IEF2b2lkIHNpZ25lZCBkaXZpc2lvbnMgaW4gaWRlYS5jLgorCSogY2lwaGVyL2lkZWEuYyAobXVsX2ludik6IFVzZSB1bnNpZ25lZCBkaXZpc2lvbi4KKworCWVjYzogSW1wbGVtZW50IHRoZSAibm9jb21wIiBmbGFnIGZvciBrZXkgZ2VuZXJhdGlvbi4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dlbmVyYXRlKTogU3VwcG9ydCB0aGUgIm5vY29tcCIgZmxhZy4KKwkqIHRlc3RzL2tleWdlbi5jIChjaGVja19lY2Nfa2V5cyk6IEFkZCBhIHRlc3QgZm9yIGl0LgorCisJZWNjOiBNYWtlICJub3BhcmFtIiB0aGUgZGVmYXVsdCBhbmQgcmVwbGFjZSBieSAicGFyYW0iLgorCSogc3JjL2NpcGhlci5oIChQVUJLRVlfRkxBR19OT0NPTVApOiBOZXcuCisJKFBVQktFWV9GTEFHX05PUEFSQU0pOiBSZW1vdmUuCisJKFBVQktFWV9GTEFHX1BBUkFNKTogTmV3LgorCSogY2lwaGVyL3B1YmtleS11dGlsLmMgKF9nY3J5X3BrX3V0aWxfcGFyc2VfZmxhZ2xpc3QpOiBTdXBwb3J0IHRoZSBuZXcKKwlmbGFncyBhbmQgaWdub3JlIHRoZSBvYnNvbGV0ZSAibm9wYXJhbSIgZmxhZy4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKF9nY3J5X2VjY19maWxsX2luX2N1cnZlKTogUmV0dXJuIHRoZSBjdXJ2ZSBuYW1lCisJYWxzbyBmb3IgY3VydmVzIHNlbGVjdGVkIGJ5IE5CSVRTLgorCShfZ2NyeV9tcGlfZWNfbmV3KTogU3VwcG9ydCB0aGUgInBhcmFtIiBmbGFnLgorCSogY2lwaGVyL2VjYy5jIChlY2NfZ2VuZXJhdGUsIGVjY19zaWduLCBlY2NfdmVyaWZ5KTogRGl0dG8uCisJKiB0ZXN0cy9rZXlnZW4uYyAoY2hlY2tfZWNjX2tleXMpOiBSZW1vdmUgdGhlICJub3BhcmFtIiBmbGFnLgorCisyMDEzLTExLTA3ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJRml4IGRlY3J5cHRpb24gZnVuY3Rpb24gc2l6ZSBpbiBBRVMgQU1ENjQgYXNzZW1ibHkuCisJKiBjaXBoZXIvcmlqbmRhZWwtYW1kNjQuUyAoX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2spOiBTZXQgJy5zaXplJworCWZvciAnX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2snLCBub3QgJy4uLl9lbmNyeXB0X2Jsb2NrJy4KKworCUNoYW5nZSA2NC1iaXQgc2hpZnQgdG8gMzItYml0IGluIEFFUyBBTUQ2NCBhc3NlbWJseS4KKwkqIGNpcGhlci9yaWpuZGFlbC1hbWQ2NC5TIChkbzE2Yml0X3Nocik6IENoYW5nZSAnc2hycScgdG8gJ3NocmwnLgorCisyMDEzLTExLTA2ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJU3BlZWQtdXAgQUVTLU5JIGtleSBzZXR1cC4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIFtVU0VfQUVTTkldIChtMTI4aV90KTogUmVtb3ZlLgorCVtVU0VfQUVTTkldICh1MTI4X3QpOiBOZXcuCisJW1VTRV9BRVNOSV0gKGFlc25pX2RvX3NldGtleSk6IE5ldy4KKwkoZG9fc2V0a2V5KSBbVVNFX0FFU05JXTogTW92ZSBBRVMtTkkgYWNjZWxlcmF0ZWQga2V5IHNldHVwIHRvCisJJ2Flc25pX2RvX3NldGtleScuCisJKGRvX3NldGtleSk6IENhbGwgX2djcnlfZ2V0X2h3X2ZlYXR1cmVzIG9ubHkgb25jZS4gQ2xlYXIgc3RhY2sgYWZ0ZXIKKwl1c2UgaW4gZ2VuZXJpYyBrZXkgc2V0dXAgcGFydC4KKwkocmlqbmRhZWxfc2V0a2V5KTogUmVtb3ZlIHN0YWNrIGJ1cm5pbmcuCisJKHByZXBhcmVfZGVjcnlwdGlvbikgW1VTRV9BRVNOSV06IFVzZSAndTEyOF90JyBpbnN0ZWFkIG9mICdtMTI4aV90JyB0bworCWF2b2lkIGNvbXBpbGVyIGdlbmVyYXRlZCBTU0UyIGluc3RydWN0aW9ucyBhbmQgWE1NIHJlZ2lzdGVyIHVzYWdlLAorCXVucm9sbCAnYWVzaW1jJyBzZXR1cCBsb29wCisJKHByZXBhcmVfZGVjcnlwdGlvbik6IENsZWFyIHN0YWNrIGFmdGVyIHVzZS4KKwlbVVNFX0FFU05JXSAoZG9fYWVzbmlfZW5jX2FsaWduZWQpOiBVcGRhdGUgY29tbWVudCBhYm91dCBhbGlnbm1lbnQuCisJKGRvX2RlY3J5cHQpOiBEbyBub3QgYnVybmluZyBzdGFjayBhZnRlciBwcmVwYXJlX2RlY3J5cHRpb24uCisKKwlBdm9pZCBidXJuIHN0YWNrIGluIEFyY2ZvdXIgc2V0a2V5LgorCSogY2lwaGVyL2FyY2ZvdXIuYyAoYXJjZm91cl9zZXRrZXkpOiBSZW1vdmUgc3RhY2sgYnVybmluZy4KKworCUF2b2lkIGJ1cm5fc3RhY2sgaW4gQ0FTVDUgc2V0a2V5LgorCSogY2lwaGVyL2Nhc3Q1LmMgKGRvX2Nhc3Rfc2V0a2V5KTogVXNlIHdpcGVtZW1vcnkgaW5zdGVhZCBvZiBtZW1zZXQuCisJKGNhc3Rfc2V0a2V5KTogUmVtb3ZlIHN0YWNrIGJ1cm5pbmcuCisKKwlJbXByb3ZlIFNlcnBlbnQga2V5IHNldHVwIHNwZWVkLgorCSogY2lwaGVyL3NlcnBlbnQuYyAoU0JPWCwgU0JPWF9JTlZFUlNFKTogUmVtb3ZlIGluZGV4IGFyZ3VtZW50LgorCShzZXJwZW50X3N1YmtleXNfZ2VuZXJhdGUpOiBVc2Ugc21hbGxlciB0ZW1wb3JhcnkgYXJyYXlzIGZvciBzdWJrZXkKKwlnZW5lcmF0aW9uIGFuZCBwZXJmb3JtIHN0YWNrIGNsZWFyaW5nIGxvY2FsbHkuCisJKHNlcnBlbnRfc2V0a2V5X2ludGVybmFsKTogVXNlIHdpcGVtZW1vcnkgdG8gY2xlYXIgc3RhY2sgYW5kIHJlbW92ZQorCV9nY3J5X2J1cm5fc3RhY2suCisJKHNlcnBlbnRfc2V0a2V5KTogUmVtb3ZlIHVubmVlZGVkIF9nY3J5X2J1cm5fc3RhY2suCisKKwlNb2RpZnkgZW5jcnlwdC9kZWNyeXB0IGFyZ3VtZW50cyBmb3IgaW4tcGxhY2UuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGdjcnlfY2lwaGVyX2RlY3J5cHQpOiBNb2RpZnkKKwlsb2NhbCBhcmd1bWVudHMgaWYgaW4tcGxhY2Ugb3BlcmF0aW9uLgorCisJU3BlZWQgdXAgU3RyaWJvZy4KKwkqIGNpcGhlci9zdHJpYm9nLmMgKFNUUklCT0dfVEFCTEVTKTogUmVtb3ZlLgorCShQaSk6IFJlbW92ZS4KKwlbIVNUUklCT0dfVEFCTEVTXSAoQSwgc3RyaWRvKTogUmVtb3ZlLgorCShzdHJpYm9nX3RhYmxlKTogTmV3IHRhYmxlIHByZS1yZW9yZGVyZWQgd2l0aCBQaSB2YWx1ZXMuCisJKHN0cmlkbyk6IFJld3JpdGUgZm9yIG5ldyB0YWJsZS4KKwkoTFBTWCk6IFJld3JpdGUgZm9yIG5ldyB0YWJsZS4KKwkoeG9yKTogUmVtb3ZlLgorCShnKTogU21hbGwgdHdlYWtzLgorCisJVHdlYWsgQUVTLU5JIGJ1bGsgQ1RSIG1vZGUgc2xpZ2h0bHkuCisJKiBjaXBoZXIvcmlqbmRhZWwuYyBbVVNFX0FFU05JXSAoYWVzbmlfY2xlYW51cF8yXzUpOiBSZW5hbWUgdG8uLi4KKwkoYWVzbmlfY2xlYW51cF8yXzYpOiAuLi50aGlzIGFuZCBjbGVhciBhbHNvICd4bW02Jy4KKwlbVVNFX0FFU05JICYmIF9faTM4Nl9fXSAoZG9fYWVzbmlfY3RyLCBkb19hZXNuaV9jdHJfNCk6IFByZXZlbnQKKwlpbmxpbmluZyBvbmx5IG9uIGkzODYsIGFsbG93IG9uIEFNRDY0LgorCVtVU0VfQUVTTkldIChkb19hZXNuaV9jdHIsIGRvX2Flc25pX2N0cl80KTogVXNlIGNvdW50ZXIgYmxvY2sgZnJvbQorCSd4bW01JyBhbmQgYnl0ZS1zd2FwIG1hc2sgZnJvbSAneG1tNicuCisJKF9nY3J5X2Flc19jdHJfZW5jKSBbVVNFX0FFU05JXTogUHJlbG9hZCBjb3VudGVyIGJsb2NrIHRvICd4bW01JyBhbmQKKwlieXRlLXN3YXAgbWFzayB0byAneG1tNicuCisJKF9nY3J5X2Flc19jdHJfZW5jLCBfZ2NyeV9hZXNfY2ZiX2RlYywgX2djcnlfYWVzX2NiY19kZWMpOiBVc2UKKwknYWVzbmlfY2xlYW51cF8yXzYnLgorCisJVHdlYWsgYmVuY2gtc2xvcGUgcGFyYW1ldGVycy4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmMgKEJVRl9TVEVQX1NJWkUpOiBIYWxmIHN0ZXAgc2l6ZSB0byA2NC4KKwkoTlVNX01FQVNVUkVNRU5UX1JFUEVUSVRJT05TKTogRG91YmxlIHJlcGV0aXRpb25zIHRvIDY0LgorCisJT3B0aW1pemUgQmxvd2Zpc2ggd2VhayBrZXkgY2hlY2suCisJKiBjaXBoZXIvYmxvd2Zpc2guYyAoaGFzaHNldF9lbGVtLCB2YWxfdG9faGlkeCwgYWRkX3ZhbCk6IE5ldy4KKwkoZG9fYmZfc2V0a2V5KTogVXNlIGZhc3RlciBhbGdvcml0aG0gZm9yIGRldGVjdGluZyB3ZWFrIGtleXMuCisJKGJmX3NldGtleSk6IE1vdmUgc3RhY2sgYnVybmluZyB0byBkb19iZl9zZXRrZXkuCisKKwlGaXggX19idWlsdGluX2Jzd2FwMzIvNjQgY2hlY2tzLgorCSogY29uZmlndXJlLmFjIChnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyKQorCShnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDY0KTogQ2hhbmdlIGNvbXBpbGUgY2hlY2tzIHRvIGxpbmsgY2hlY2tzLgorCisJRml4ICd1MzInIGJ1aWxkIGVycm9yIHdpdGggQ2FtZWxsaWEuCisJKiBjaXBoZXIvY2FtZWxsaWEuYzogQWRkIGluY2x1ZGUgZm9yIDxjb25maWcuaD4gYW5kICJ0eXBlcy5oIi4KKwkodTMyKTogUmVtb3ZlLgorCSh1OCk6IFR5cGVkZWYgYXMgJ2J5dGUnLgorCisyMDEzLTExLTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXB1YmtleTogQWRkIGZvcndhcmQgY29tcGF0aWJpbGl0eSBmZWF0dXJlLgorCSogY2lwaGVyL3B1YmtleS11dGlsLmMgKF9nY3J5X3BrX3V0aWxfcGFyc2VfZmxhZ2xpc3QpOiBBZGQKKwkiaWduaW52ZmxhZyIuCisKKzIwMTMtMTEtMDUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJZWNjOiBSZXF1aXJlICJlZGRzYSIgZmxhZyBmb3IgY3VydmUgRWQyNTUxOS4KKwkqIHNyYy9jaXBoZXIuaCAoUFVCS0VZX0ZMQUdfRUNEU0EpOiBSZW1vdmUuCisJKiBjaXBoZXIvcHVia2V5LXV0aWwuYyAoX2djcnlfcGtfdXRpbF9wYXJzZV9mbGFnbGlzdCk6IFJlbW92ZSAiZWNkc2EiLgorCSogY2lwaGVyL2VjYy5jIChlY2NfZ2VuZXJhdGUsIGVjY19zaWduLCBlY2NfdmVyaWZ5KTogUmVxdWlyZSAiZWRkc2EiIGZsYWcuCisJKiBjaXBoZXIvZWNjLW1pc2MuYyAoX2djcnlfZWNjX2NvbXB1dGVfcHVibGljKTogRGVwZW5kICJlZGRzYSIgZmxhZy4KKwkqIHRlc3RzL2JlbmNobWFyay5jLCB0ZXN0cy9rZXlnZW4uYywgdGVzdHMvcHVia2V5LmMKKwkqIHRlc3RzL3QtZWQyNTUxOS5jLCB0ZXN0cy90LW1waS1wb2ludC5jOiBBZGp1c3QgZm9yIGNoYW5nZWQgZmxhZ3MuCisKKwllY2M6IEZ1bGx5IGltcGxlbWVudCBFZDI1NTE5IGNvbXByZXNzaW9uIGluIEVDRFNBIG1vZGUuCisJKiBzcmMvZWMtY29udGV4dC5oIChtcGlfZWNfY3R4X3MpOiBBZGQgZmllbGQgRkxBR1MuCisJKiBtcGkvZWMuYyAoZWNfcF9pbml0KTogQWRkIGFyZyBGTEFHUy4gIENoYW5nZSBhbGwgY2FsbGVycyB0byBwYXNzIGl0LgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAocG9pbnRfZnJvbV9rZXlwYXJhbSk6IEFkZCBhcmcgRUMsIHBhcnNlIGFzCisJIG9wYXF1ZSBtcGkgYW5kIHVzZSBlZGRzYSBkZWNvZGluZyBkZXBlbmRpbmcgb24gdGhlIGZsYWcuCisJKF9nY3J5X21waV9lY19uZXcpOiBSZWFycmFuZ2UgdG8gcGFyc2UgUSBhbmQgRCBhZnRlciBrbm93aW5nIHRoZQorCWN1cnZlLgorCisJbXBpOiBBZGQgZnVuY3Rpb24gZ2NyeV9tcGlfc2V0X29wYXF1ZV9jb3B5LgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkpOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5jIChnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkpOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5oIChnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkpOiBNYXJrIHZpc2libGUuCisJKiBzcmMvbGliZ2NyeXB0LmRlZiwgc3JjL2xpYmdjcnlwdC52ZXJzOiBBZGQgbmV3IEFQSS4KKwkqIHRlc3RzL21waXRlc3RzLmMgKHRlc3Rfb3BhcXVlKTogQWRkIHRlc3QuCisKKzIwMTMtMTEtMDQgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlNYWtlIHRlc3QgdmVjdG9ycyAnc3RhdGljIGNvbnN0JworCSogY2lwaGVyL2FyY2ZvdXIuYyAoc2VsZnRlc3QpOiBDaGFuZ2UgdGVzdCB2ZWN0b3JzIHRvICdzdGF0aWMgY29uc3QnLgorCSogY2lwaGVyL2Jsb3dmaXNoLmMgKHNlbGZ0ZXN0KTogRGl0dG8uCisJKiBjaXBoZXIvY2FtZWxsaWEtZ2x1ZS5jIChzZWxmdGVzdCk6IERpdHRvLgorCSogY2lwaGVyL2Nhc3Q1LmMgKHNlbGZ0ZXN0KTogRGl0dG8uCisJKiBjaXBoZXIvZGVzLmMgKHNlbGZ0ZXN0KTogRGl0dG8uCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoc2VsZnRlc3QpOiBEaXR0by4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNpcGhlcl9jYmNfbWFjX2NpcGhlciwgY2hlY2tfYWVzMTI4X2NiY19jdHNfY2lwaGVyKQorCShjaGVja19jdHJfY2lwaGVyLCBjaGVja19jZmJfY2lwaGVyLCBjaGVja19vZmJfY2lwaGVyKQorCShjaGVja19jY21fY2lwaGVyLCBjaGVja19zdHJlYW1fY2lwaGVyKQorCShjaGVja19zdHJlYW1fY2lwaGVyX2xhcmdlX2Jsb2NrLCBjaGVja19idWxrX2NpcGhlcl9tb2RlcykKKwkoY2hlY2tfY2lwaGVycywgY2hlY2tfZGlnZXN0cywgY2hlY2tfaG1hYywgY2hlY2tfcHVia2V5X3NpZ24pCisJKGNoZWNrX3B1YmtleV9zaWduX2VjZHNhLCBjaGVja19wdWJrZXlfY3J5cHQsIGNoZWNrX3B1YmtleSk6IERpdHRvLgorCisyMDEzLTExLTAzICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJTWFrZSBqdW1wIGxhYmVscyBsb2NhbCBpbiBTYWxzYTIwIGFzc2VtYmx5LgorCSogY2lwaGVyL3NhbHNhMjAtYW1kNjQuUzogUmVuYW1lICcuX2xhYmVscycgdG8gJy5MX2xhYmVscycuCisJKiBjaXBoZXIvc2Fsc2EyMC1hcm12Ny1uZW9uLlM6IERpdHRvLgorCisyMDEzLTEwLTMwICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJYml0aGVscDogZml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aCByb2wgYW5kIHJvci4KKwkqIGNpcGhlci9iaXRoZWxwLmggKHJvbCwgcm9yKTogTWFzayBzaGlmdCB3aXRoIDMxLgorCisyMDEzLTEwLTI5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXRlc3RzOiBBZGQgZmVhdHVyZSB0byBza2lwIGJlbmNobWFya3MuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAobWFpbik6IEFkZCBmZWF0dXJlIHRvIHNraXAgdGhlIHRlc3QuCisJKiB0ZXN0cy9iZW5jaC1zbG9wZS5jIChtYWluKTogRGl0dG8uCisJKGdldF9zbG9wZSk6IFJlcGFjZSBDKysgc3R5bGUgY29tbWVudC4KKwkoZG91YmxlX2NtcCwgY2lwaGVyX2JlbmNoLCBfaGFzaF9iZW5jaCk6IFJlcGFsY2Ugc3lzdGVtIHJlc2VydmVkCisJc3ltYm9scy4KKworCWVjYzogRmluaXNoIEVkMjU1MTkvRUNEU0EgaGFjay4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dlbmVyYXRlKTogRml4IEVkMjU1MTkvRUNEU0EgY2FzZS4KKwkoZWNjX3ZlcmlmeSk6IEltcGxlbWVudCBFRDI1NTE5L0VDRFNBIHVuY29tcHJlc3Npb24uCisKKwllY2M6IEFkZCBmbGFncyAibm9wYXJhbSIgYW5kICJjb21wIi4KKwkqIHNyYy9jaXBoZXIuaCAoUFVCS0VZX0ZMQUdfTk9QQVJBTSwgUFVCS0VZX0ZMQUdfQ09NUCk6IE5ldy4KKwkqIGNpcGhlci9wdWJrZXktdXRpbC5jIChfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0KTogUGFyc2UgbmV3IGZsYWdzCisJYW5kIGNoYW5nZSBjb2RlIGZvciBwb3NzaWJsZSBmYXN0ZXIgcGFyc2luZy4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dlbmVyYXRlKTogSW1wbGVtZW50IHRoZSAibm9wYXJhbSIgZmxhZy4KKwkoZWNjX3NpZ24pOiBEaXR0by4KKwkoZWNjX3ZlcmlmeSk6IERpdHRvLgorCSogdGVzdHMva2V5Z2VuLmMgKGNoZWNrX2VjY19rZXlzKTogVXNlIHRoZSAibm9wYXJhbSIgZmxhZy4KKworCSogY2lwaGVyL2VjYy5jIChlY2NfZ2VuZXJhdGUpOiBGaXggcGFyc2luZyBvZiB0aGUgZGVwcmVjYXRlZAorCXRyYW5zaWVudC1mbGFnIHBhcmFtZXRlci4KKwkoZWNjX3ZlcmlmeSk6IERvIG5vdCBtYWtlIFEgb3B0aW9uYWwgaW4gdGhlIGV4dHJhY3QtcGFyYW0gY2FsbC4KKworMjAxMy0xMC0yOCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCUZpeCB0eXBvcyBpbiBkb2N1bWVudGF0aW9uLgorCSogZG9jL2djcnlwdC50ZXhpOiBGaXggc29tZSB0eXBvcy4KKworCUFkZCBBUk0gTkVPTiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiBTZXJwZW50LgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ3NlcnBlbnQtYXJtdjctbmVvbi5TJy4KKwkqIGNpcGhlci9zZXJwZW50LWFybXY3LW5lb24uUzogTmV3LgorCSogY2lwaGVyL3NlcnBlbnQuYyAoVVNFX05FT04pOiBOZXcgbWFjcm8uCisJKHNlcnBlbnRfY29udGV4dF90KSBbVVNFX05FT05dOiBBZGQgJ3VzZV9uZW9uJy4KKwlbVVNFX05FT05dIChfZ2NyeV9zZXJwZW50X25lb25fY3RyX2VuYywgX2djcnlfc2VycGVudF9uZW9uX2NmYl9kZWMpCisJKF9nY3J5X3NlcnBlbnRfbmVvbl9jYmNfZGVjKTogTmV3IHByb3RvdHlwZXMuCisJKHNlcnBlbnRfc2V0a2V5X2ludGVybmFsKSBbVVNFX05FT05dOiBEZXRlY3QgTkVPTiBzdXBwb3J0LgorCShfZ2NyeV9zZXJwZW50X25lb25fY3RyX2VuYywgX2djcnlfc2VycGVudF9uZW9uX2NmYl9kZWMpCisJKF9nY3J5X3NlcnBlbnRfbmVvbl9jYmNfZGVjKSBbVVNFX05FT05dOiBVc2UgTkVPTiBpbXBsZW1lbnRhdGlvbnMKKwl0byBwcm9jZXNzIGVpZ2h0IGJsb2NrcyBpbiBwYXJhbGxlbC4KKwkqIGNvbmZpZ3VyZS5hYyBbbmVvbnN1cHBvcnRdOiBBZGQgJ3NlcnBlbnQtYXJtdjctbmVvbi5sbycuCisKKwlBZGQgQVJNIE5FT04gYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgU2Fsc2EyMC4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdzYWxzYTIwLWFybXY3LW5lb24uUycuCisJKiBjaXBoZXIvc2Fsc2EyMC1hcm12Ny1uZW9uLlM6IE5ldy4KKwkqIGNpcGhlci9zYWxzYTIwLmMgW1VTRV9BUk1fTkVPTl9BU01dOiBOZXcgbWFjcm8uCisJKHN0cnVjdCBTQUxTQTIwX2NvbnRleHRfcywgc2Fsc2EyMF9jb3JlX3QsIHNhbHNhMjBfa2V5c2V0dXBfdCkKKwkoc2Fsc2EyMF9pdnNldHVwX3QpOiBOZXcuCisJKFNBTFNBMjBfY29udGV4dF90KSBbVVNFX0FSTV9ORU9OX0FTTV06IEFkZCAndXNlX25lb24nLgorCShTQUxTQTIwX2NvbnRleHRfdCk6IEFkZCAna2V5c2V0dXAnLCAnaXZzZXR1cCcgYW5kICdjb3JlJy4KKwkoc2Fsc2EyMF9jb3JlKTogQ2hhbmdlICdzcmMnIGFyZ3VtZW50IHRvICdjdHgnLgorCVtVU0VfQVJNX05FT05fQVNNXSAoX2djcnlfYXJtX25lb25fc2Fsc2EyMF9lbmNyeXB0KTogTmV3IHByb3RvdHlwZS4KKwlbVVNFX0FSTV9ORU9OX0FTTV0gKHNhbHNhMjBfY29yZV9uZW9uLCBzYWxzYTIwX2tleXNldHVwX25lb24pCisJKHNhbHNhMjBfaXZzZXR1cF9uZW9uKTogTmV3LgorCShzYWxzYTIwX2RvX3NldGtleSk6IFNldHVwIGtleXNldHVwLCBpdnNldHVwIGFuZCBjb3JlIHdpdGggZGVmYXVsdAorCWZ1bmN0aW9ucy4KKwkoc2Fsc2EyMF9kb19zZXRrZXkpIFtVU0VfQVJNX05FT05fQVNNXTogV2hlbiBORU9OIHN1cHBvcnQgZGV0ZWN0LAorCXNldCBrZXlzZXR1cCwgaXZzZXR1cCBhbmQgY29yZSB3aXRoIEFSTSBORU9OIGZ1bmN0aW9ucy4KKwkoc2Fsc2EyMF9kb19zZXRrZXkpOiBDYWxsICdjdHgtPmtleXNldHVwJy4KKwkoc2Fsc2EyMF9zZXRpdik6IENhbGwgJ2N0eC0+aXZzZXR1cCcuCisJKHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0pIFtVU0VfQVJNX05FT05fQVNNXTogUHJvY2VzcyBsYXJnZSBidWZmZXJzCisJaW4gQVJNIE5FT04gaW1wbGVtZW50YXRpb24uCisJKHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0pOiBDYWxsICdjdHgtPmNvcmUnIGluc3RlYWQgb2YgZGlyZWN0bHkKKwljYWxsaW5nICdzYWxzYTIwX2NvcmUnLgorCShzZWxmdGVzdCk6IEFkZCB0ZXN0IHRvIGNoZWNrIGxhcmdlIGJ1ZmZlciBwcm9jZXNzaW5nIGFuZCBibG9jayBjb3VudGVyCisJdXBkYXRpbmcuCisJKiBjb25maWd1cmUuYWMgW25lb25zdXBwb3J0XTogJ0FkZCBzYWxzYTIwLWFybXY3LW5lb24ubG8nLgorCisJQWRkIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIFNhbHNhMjAuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnc2Fsc2EyMC1hbWQ2NC5TJy4KKwkqIGNpcGhlci9zYWxzYTIwLWFtZDY0LlM6IE5ldy4KKwkqIGNpcGhlci9zYWxzYTIwLmMgKFVTRV9BTUQ2NCk6IE5ldyBtYWNyby4KKwlbVVNFX0FNRDY0XSAoX2djcnlfc2Fsc2EyMF9hbWQ2NF9rZXlzZXR1cCwgX2djcnlfc2Fsc2EyMF9hbWQ2NF9pdnNldHVwKQorCShfZ2NyeV9zYWxzYTIwX2FtZDY0X2VuY3J5cHRfYmxvY2tzKTogTmV3IHByb3RvdHlwZXMuCisJW1VTRV9BTUQ2NF0gKHNhbHNhMjBfa2V5c2V0dXAsIHNhbHNhMjBfaXZzZXR1cCwgc2Fsc2EyMF9jb3JlKTogTmV3LgorCVshVVNFX0FNRDY0XSAoc2Fsc2EyMF9jb3JlKTogQ2hhbmdlICdzcmMnIHRvIG5vbi1jb25zdGFudCwgdXBkYXRlIGJsb2NrCisJY291bnRlciBpbiAnc2Fsc2EyMF9jb3JlJyBhbmQgcmV0dXJuIGJ1cm4gc3RhY2sgZGVwdGguCisJWyFVU0VfQU1ENjRdIChzYWxzYTIwX2tleXNldHVwLCBzYWxzYTIwX2l2c2V0dXApOiBOZXcuCisJKHNhbHNhMjBfZG9fc2V0a2V5KTogTW92ZSBnZW5lcmljIGtleSBzZXR1cCB0byAnc2Fsc2EyMF9rZXlzZXR1cCcuCisJKHNhbHNhMjBfc2V0a2V5KTogRml4IGJ1cm4gc3RhY2sgZGVwdGguCisJKHNhbHNhMjBfc2V0aXYpOiBNb3ZlIGdlbmVyaWMgSVYgc2V0dXAgdG8gJ3NhbHNhMjBfaXZzZXR1cCcuCisJKHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0pIFtVU0VfQU1ENjRdOiBQcm9jZXNzIGxhcmdlIGJ1ZmZlcnMgaW4gQU1ENjQKKwlpbXBsZW1lbnRhdGlvbi4KKwkoc2Fsc2EyMF9kb19lbmNyeXB0X3N0cmVhbSk6IE1vdmUgc3RhY2sgYnVybmluZyB0byB0aGlzIGZ1bmN0aW9uLi4uCisJKHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0sIHNhbHNhMjByMTJfZW5jcnlwdF9zdHJlYW0pOiAuLi5mcm9tIHRoZXNlCisJZnVuY3Rpb25zLgorCSogY29uZmlndXJlLmFjIFt4ODYtNjRdOiBBZGQgJ3NhbHNhMjAtYW1kNjQubG8nLgorCisJQWRkIG5ldyBiZW5jaG1hcmtpbmcgdXRpbGl0eSwgYmVuY2gtc2xvcGUuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgJ2JlbmNoLXNsb3BlJy4KKwkqIHRlc3RzL2JlbmNoLXNsb3BlLmM6IE5ldy4KKworCUNoYW5nZSAuZ2xvYmFsIHRvIC5nbG9ibCBpbiBhc3NlbWJseSBmaWxlcy4KKwkqIGNpcGhlci9ibG93ZmlzaC1hcm0uUzogQ2hhbmdlICcuZ2xvYmFsJyB0byAnLmdsb2JsJy4KKwkqIGNpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvY2FtZWxsaWEtYWVzbmktYXZ4Mi1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9jYW1lbGxpYS1hcm0uUzogRGl0dG8uCisJKiBjaXBoZXIvY2FzdDUtYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvcmlqbmRhZWwtYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvcmlqbmRhZWwtYXJtLlM6IERpdHRvLgorCSogY2lwaGVyL3NlcnBlbnQtYXZ4Mi1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9zZXJwZW50LXNzZTItYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvdHdvZmlzaC1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci90d29maXNoLWFybS5TOiBEaXR0by4KKworMjAxMy0xMC0yNiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCURlZHVwbGljYXRlIGNvZGUgZm9yIEVDQiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLgorCSogY2lwaGVyL2NpcGhlci5jIChkb19lY2JfY3J5cHQpOiBOZXcsIGJhc2VkIG9uIG9sZCAnZG9fZWNiX2VuY3J5cHQnLgorCShkb19lY2JfZW5jcnlwdCk6IFVzZSAnZG9fZWNiX2NyeXB0JywgcGFzcyBlbmNyeXB0aW9uIGZ1bmN0aW9uLgorCShkb19lY2JfZGVjcnlwdCk6IFVzZSAnZG9fZWNiX2NyeXB0JywgcGFzcyBkZWNyeXB0aW9uIGZ1bmN0aW9uLgorCisyMDEzLTEwLTI2ICBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiAgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorCisJRHJvcCBfZ2NyeV9jaXBoZXJfb2ZiX2RlY3J5cHQgYXMgaXQgZHVwbGljYXRlcyBfZ2NyeV9jaXBoZXJfb2ZiX2VuY3J5cHQuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGNpcGhlcl9kZWNyeXB0KTogVXNlIF9nY3J5X2NpcGhlcl9vZmJfZW5jcnlwdCBmb3IgT0ZCCisJICBkZWNyeXB0aW9uLgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oOiBSZW1vdmUgX2djcnlfY2lwaGVyX29mYl9kZWNyeXB0IGRlY2xhcmF0aW9uLgorCSogY2lwaGVyL2NpcGhlci1vZmIuYyAoX2djcnlfY2lwaGVyX29mYl9kZWNyeXB0KTogUmVtb3ZlLgorCSAgKF9nY3J5X2NpcGhlcl9vZmJfZW5jcnlwdCk6IHJlbW92ZSBjb3B5aW5nIG9mIElWIHRvIGxhc3RpdiwgaXQncworCSAgdW51c2VkIHRoZXJlLgorCisyMDEzLTEwLTI1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXRlc3RzOiBBZGQgdGVzdHMgZm9yIG1waV9jbXAuCisJKiB0ZXN0cy9tcGl0ZXN0cy5jIChkaWUpOiBNb2Rlcm5pemUuCisJKGZhaWwpOiBOZXcuCisJKHRlc3Rfb3BhcXVlLCB0ZXN0X2FkZCwgdGVzdF9zdWIsIHRlc3RfbXVsKTogVXNlIGdjcnlfbG9nX3h4CisJKG1haW4pOiBSZXR1cm4gZXJyb3IgY291bnQuCisJKHRlc3RfY21wKTogTmV3LgorCisyMDEzLTEwLTI0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCWVjYzogQ2hhbmdlIGFsZ29yaXRobSBmb3IgRWQyNTUxOSB4IHJlY292ZXJ5LgorCSogY2lwaGVyL2VjYy1lZGRzYS5jIChzY2FudmFsKTogQWRkIGFzIHRlbXBvcmFyeSBoYWNrLgorCShfZ2NyeV9lY2NfZWRkc2FfcmVjb3Zlcl94KTogVXNlIHRoZSBhbGdvcml0aG0gZnJvbSBwYWdlIDE1IG9mIHRoZQorCXBhcGVyLiAgUmV0dXJuIGFuIGVycm9yIGNvZGUuCisJKF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCk6IFRha2UgY2FyZSBvZiB0aGUgZXJyb3IgY29kZS4KKwkqIG1waS9tcGktbXVsLmMgKGdjcnlfbXBpX211bG0pOiBVc2UgdHJ1bmNhdGVkIGRpdmlzaW9uLgorCisJZWNjOiBSZWZhY3RvciBfZ2NyeV9lY2NfZWRkc2FfZGVjb2RlcG9pbnQuCisJKiBjaXBoZXIvZWNjLWVkZHNhLmMgKF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCk6IEZhY3RvciBzb21lIGNvZGUKKwlvdXQgdG8gLi4KKwkoX2djcnlfZWNjX2VkZHNhX3JlY292ZXJfeCk6IG5ldy4KKworMjAxMy0xMC0yNCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCWVjYy1nb3N0OiBBZGQgbWlzc2luZyBpbmNsdWRlLgorCSogZWNjLWdvc3QuYzogSW5jbHVkZSAicHVia2V5LWludGVybmFsLmgiLgorCisyMDEzLTEwLTIzICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJUmVwbGFjZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmFzdF93aXBlbWVtb3J5MiB3aXRoIGdlbmVyaWMuCisJKiBzcmMvZzEwbGliLmggKGZhc3Rfd2lwZW1lbW9yeTIpOiBSZW1vdmUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljCisJaW1wbGVtZW50YXRpb25zIGFuZCBhZGQgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKworCUltcHJvdmUgdGhlIHNwZWVkIG9mIHRoZSBjaXBoZXIgbW9kZSBjb2RlLgorCSogY2lwaGVyL2J1ZmhlbHAuaCAoYnVmX2NweSk6IE5ldy4KKwkoYnVmX3hvciwgYnVmX3hvcl8yZHN0KTogSWYgYnVmZmVycyB1bmFsaWduZWQsIGFsd2F5cyBqdW1wIHRvIHBlci1ieXRlCisJcHJvY2Vzc2luZy4KKwkoYnVmX3hvcl9uX2NvcHlfMik6IE5ldy4KKwkoYnVmX3hvcl9uX2NvcHkpOiBVc2UgJ2J1Zl94b3Jfbl9jb3B5XzInLgorCSogY2lwaGVyL2Jsb3dmaXNoLmMgKF9nY3J5X2Jsb3dmaXNoX2NiY19kZWMpOiBBdm9pZCBleHRyYSBtZW1vcnkgY29weQorCWFuZCB1c2UgbmV3ICdidWZfeG9yX25fY29weV8yJy4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKF9nY3J5X2NhbWVsbGlhX2NiY19kZWMpOiBEaXR0by4KKwkqIGNpcGhlci9jYXN0NS5jIChfZ2NyeV9jYXN0X2NiY19kZWMpOiBEaXR0by4KKwkqIGNpcGhlci9zZXJwZW50LmMgKF9nY3J5X3NlcnBlbnRfY2JjX2RlYyk6IERpdHRvLgorCSogY2lwaGVyL3R3b2Zpc2guYyAoX2djcnlfdHdvZmlzaF9jYmNfZGVjKTogRGl0dG8uCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoX2djcnlfYWVzX2NiY19kZWMpOiBEaXR0by4KKwkoZG9fZW5jcnlwdCwgZG9fZGVjcnlwdCk6IFVzZSAnYnVmX2NweScgaW5zdGVhZCBvZiAnbWVtY3B5Jy4KKwkoX2djcnlfYWVzX2NiY19lbmMpOiBBdm9pZCBjb3B5aW5nIElWLCB1c2UgJ2xhc3RfaXYnIHBvaW50ZXIgaW5zdGVhZC4KKwkqIGNpcGhlci9jaXBoZXItY2JjLmMgKF9nY3J5X2NpcGhlcl9jYmNfZW5jcnlwdCk6IEF2b2lkIGNvcHlpbmcgSVYsCisJdXBkYXRlIHBvaW50ZXIgdG8gSVYgaW5zdGVhZC4KKwkoX2djcnlfY2lwaGVyX2NiY19kZWNyeXB0KTogQXZvaWQgZXh0cmEgbWVtb3J5IGNvcHkgYW5kIHVzZSBuZXcKKwknYnVmX3hvcl9uX2NvcHlfMicuCisJKF9nY3J5X2NpcGhlcl9jYmNfZW5jcnlwdCwgX2djcnlfY2lwaGVyX2NiY19kZWNyeXB0KTogQXZvaWQgZXh0cmEKKwlhY2Nlc3NlcyB0byBjLT5zcGVjLCB1c2UgJ2J1Zl9jcHknIGluc3RlYWQgb2YgbWVtY3B5LgorCSogY2lwaGVyL2NpcGhlci1jY20uYyAoZG9fY2JjX21hYyk6IERpdHRvLgorCSogY2lwaGVyL2NpcGhlci1jZmIuYyAoX2djcnlfY2lwaGVyX2NmYl9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfY2ZiX2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItY3RyLmMgKF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL2NpcGhlci1vZmIuYyAoX2djcnlfY2lwaGVyX29mYl9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfb2ZiX2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZG9fZWNiX2VuY3J5cHQsIGRvX2VjYl9kZWNyeXB0KTogRGl0dG8uCisKKwlidWZoZWxwOiBlbmFibGUgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBmb3IgQUFyY2g2NCAoNjQtYml0IEFSTSkKKwkqIGNpcGhlci9idWZoZWxwLmggW19fYWFyY2g2NF9fXSAoQlVGSEVMUF9GQVNUX1VOQUxJR05FRF9BQ0NFU1MpOiBTZXQKKwltYWNybyBvbiBBQXJjaDY0LgorCisyMDEzLTEwLTIzICBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiAgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorCisJRW5hYmxlIGFzc2VtYmxlciBvcHRpbWl6YXRpb25zIG9uIGVhcmxpZXIgQVJNIGNvcmVzLgorCSogY2lwaGVyL2Jsb3dmaXNoLWFybXY2LlMgPT4gY2lwaGVyL2Jsb3dmaXNoLWFybS5TOiBhZGFwdCB0byBwcmUtYXJtdjYgQ1BVcy4KKwkqIGNpcGhlci9ibG93ZmlzaC5jOiBlbmFibGUgYXNzZW1ibHkgb24gYXJtdjQvYXJtdjUgbGl0dGxlLWVuZGlhbiBDUFVzLgorCSogY2lwaGVyL2NhbWVsbGlhLWFybXY2LlMgPT4gY2lwaGVyL2NhbWVsbGlhLWFybS5TOiBhZGFwdCB0byBwcmUtYXJtdjYgQ1BVcy4KKwkqIGNpcGhlci9jYW1lbGxpYS5jLCBjaXBoZXItY2FtZWxsaWEtZ2x1ZS5jOiBlbmFibGUgYXNzZW1ibHkgb24gYXJtdjQvYXJtdjUKKwkgIGxpdHRsZS1lbmRpYW4gQ1BVcy4KKwkqIGNpcGhlci9jYXN0NS1hcm12Ni5TID0+IGNpcGhlci9jYXN0NS1hcm0uUzogYWRhcHQgdG8gcHJlLWFybXY2IENQVXMuCisJKiBjaXBoZXIvY2FzdDUuYzogZW5hYmxlIGFzc2VtYmx5IG9uIGFybXY0L2FybXY1IGxpdHRsZS1lbmRpYW4gQ1BVcy4KKwkqIGNpcGhlci9yaWpuZGFlbC1hcm12Ni5TID0+IGNpcGhlci9yaWpuZGFlbC1hcm0uUzogYWRhcHQgdG8gcHJlLWFybXY2IENQVXMuCisJKiBjaXBoZXIvcmlqbmRhZWwuYzogZW5hYmxlIGFzc2VtYmx5IG9uIGFybXY0L2FybXY1IGxpdHRsZS1lbmRpYW4gQ1BVcy4KKwkqIGNpcGhlci90d29maXNoLWFybXY2LlMgPT4gY2lwaGVyL3R3b2Zpc2gtYXJtLlM6IGFkYXB0IHRvIHByZS1hcm12NiBDUFVzLgorCSogY2lwaGVyL3R3b2Zpc2guYzogZW5hYmxlIGFzc2VtYmx5IG9uIGFybXY0L2FybXY1IGxpdHRsZS1lbmRpYW4gQ1BVcy4KKworCW1waTogZW5hYmxlIGFzc2VtYmxlciBvbiBhbGwgYXJtIGFyY2hpdGVjdHVyZXMuCisJKiBtcGkvY29uZmlnLmxpbmtzOiByZW1vdmUgY2hlY2sgZm9yIGFybSA+PSB2NgorCSogbXBpL2FybXY2ID0+IG1waS9hcm06IHJlbmFtZSBkaXJlY3RvcnkgdG8gcmVmbGVjdCB0aGF0IGlzIGlzIGdlbmVyaWMKKwkgIGVub3VnaAorCisJQ29ycmVjdCBBU00gYXNzZW1ibHkgdGVzdCBpbiBjb25maWd1cmUuYWMuCisJKiBjb25maWd1cmUuYWM6IGNvcnJlY3QgSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMgdGVzdCB0bworCSAgcmVxdWlyZSBuZWl0aGVyIEFSTXY2LCBub3IgdGh1bWIgbW9kZS4gT3VyIGFzc2VtYmx5IGNvZGUgd29ya3MKKwkgIHBlcmZlY3RseSBldmVuIG9uIEFSTXY0IG5vdy4KKworMjAxMy0xMC0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwllY2M6IFJlZmFjdG9yIGVjYy5jLgorCSogY2lwaGVyL2VjYy1lY2RzYS5jLCBjaXBoZXIvZWNjLWVkZHNhLmMsIGNpcGhlci9lY2MtZ29zdC5jOiBOZXcuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW0gKEVYVFJBX2xpYmNpcGhlcl9sYV9TT1VSQ0VTKTogQWRkIG5ldyBmaWxlcy4KKwkqIGNvbmZpZ3VyZS5hYyAoR0NSWVBUX1BVQktFWV9DSVBIRVJTKTogQWRkIG5ldyBmaWxlcy4KKwkqIGNpcGhlci9lY2MuYyAocG9pbnRfaW5pdCwgcG9pbnRfZnJlZSk6IE1vdmUgdG8gZWNjLWNvbW1vbi5oLgorCShzaWduX2VjZHNhKTogTW92ZSB0byBlY2MtZWNkc2EuYyBhcyBfZ2NyeV9lY2NfZWNkc2Ffc2lnbi4KKwkodmVyaWZ5X2VjZHNhKTogTW92ZSB0byBlY2MtZWNkc2EuYyBhcyBfZ2NyeV9lY2NfZWNkc2FfdmVyaWZ5LgorCShzaWduX2dvc3QpOiBNb3ZlIHRvIGVjYy1nb3RzLmMgYXMgX2djcnlfZWNjX2dvc3Rfc2lnbi4KKwkodmVyaWZ5X2dvc3QpOiBNb3ZlIHRvIGVjYy1nb3N0LmMgYXMgX2djcnlfZWNjX2dvc3RfdmVyaWZ5LgorCShzaWduX2VkZHNhKTogTW92ZSB0byBlY2MtZWRkc2EuYyBhcyBfZ2NyeV9lY2NfZWRkc2Ffc2lnbi4KKwkodmVyaWZ5X2VkZHNhKTogTW92ZSB0byBlY2MtZWRkc2EuYyBhcyBfZ2NyeV9lY2NfZWRkc2FfdmVyaWZ5LgorCShlZGRzYV9nZW5lcmF0ZV9rZXkpOiBNb3ZlIHRvIGVjYy1lZGRzYS5jIGFzIF9nY3J5X2VjY19lZGRzYV9nZW5rZXkuCisJKHJldmVyc2VfYnVmZmVyKTogTW92ZSB0byBlY2MtZWRkc2EuYy4KKwkoZWRkc2FfZW5jb2RlbXBpLCBlZGRzYV9lbmNvZGVfeF95KTogRGl0dG8uCisJKF9nY3J5X2VjY19lZGRzYV9lbmNvZGVwb2ludCwgX2djcnlfZWNjX2VkZHNhX2RlY29kZXBvaW50KTogRGl0dG8uCisKKwltcGk6IEZpeCBzY2FubmluZyBvZiBuZWdhdGl2ZSBTU0ggZm9ybWF0cyBhbmQgYWRkIG1vcmUgdGVzdHMuCisJKiBtcGkvbXBpY29kZXIuYyAoZ2NyeV9tcGlfc2Nhbik6IEZpeCBzaWduIHNldHRpbmcgZm9yIFNTSCBmb3JtYXQuCisJKiB0ZXN0cy90LWNvbnZlcnQuYyAobmVnYXRpdmVfemVybyk6IFRlc3QgYWxsIGZvcm1hdHMuCisJKGNoZWNrX2Zvcm1hdHMpOiBBZGQgdGVzdHMgZm9yIFBHUCBhbmQgc2NhbiB0ZXN0cyBmb3IgU1NIIGFuZCBVU0cuCisKKwkqIHNyYy9nY3J5cHQuaC5pbiAobXBpX2lzX25lZyk6IEZpeCBtYWNyby4KKworCSogbXBpL21waS1zY2FuLmMgKF9nY3J5X21waV9nZXRieXRlLCBfZ2NyeV9tcGlfcHV0Ynl0ZSk6IENvbW1lbnQgb3V0CisJdGhlc2UgdW51c2VkIGZ1bmN0aW9ucy4KKworMjAxMy0xMC0yMiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCXR3b2Zpc2g6IGFkZCBBUk12NiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICd0d29maXNoLWFybXY2LlMnLgorCSogY2lwaGVyL3R3b2Zpc2gtYXJtdjYuUzogTmV3LgorCSogY2lwaGVyL3R3b2Zpc2guYyAoVVNFX0FSTVY2X0FTTSk6IE5ldyBtYWNyby4KKwlbVVNFX0FSTVY2X0FTTV0gKF9nY3J5X3R3b2Zpc2hfYXJtdjZfZW5jcnlwdF9ibG9jaykKKwkoX2djcnlfdHdvZmlzaF9hcm12Nl9kZWNyeXB0X2Jsb2NrKTogTmV3IHByb3RvdHlwZXMuCisJW1VTRV9BTURWNl9BU01dICh0d29maXNoX2VuY3J5cHQsIHR3b2Zpc2hfZGVjcnlwdCk6IEFkZC4KKwlbVVNFX0FNRDY0X0FTTV0gKGRvX3R3b2Zpc2hfZW5jcnlwdCwgZG9fdHdvZmlzaF9kZWNyeXB0KTogUmVtb3ZlLgorCShfZ2NyeV90d29maXNoX2N0cl9lbmMsIF9nY3J5X3R3b2Zpc2hfY2ZiX2RlYyk6IFVzZSAndHdvZmlzaF9lbmNyeXB0JworCWluc3RlYWQgb2YgJ2RvX3R3b2Zpc2hfZW5jcnlwdCcuCisJKF9nY3J5X3R3b2Zpc2hfY2JjX2RlYyk6IFVzZSAndHdvZmlzaF9kZWNyeXB0JyBpbnN0ZWFkIG9mCisJJ2RvX3R3b2Zpc2hfZGVjcnlwdCcuCisJKiBjb25maWd1cmUuYWMgW2FybV06IEFkZCAndHdvZmlzaC1hcm12Ni5sbycuCisKKwltcGk6IGFsbG93IGJ1aWxkaW5nIHdpdGggY2xhbmcgb24gQVJNLgorCSogbXBpL2xvbmdsb25nLmggW19fYXJtX19dIChhZGRfc3NhYWFhLCBzdWJfZGRtbXNzLCB1bXVsX3BwbW0pCisJKGNvdW50X2xlYWRpbmdfemVyb3MpOiBEbyBub3QgY2FzdCBhc3NlbWJseSBvdXRwdXQgYXJndW1lbnRzLgorCVtfX2FybV9fXSAodW11bF9wcG1tKTogUmVtb3ZlIHRoZSBleHRyYSAnJScgYWhlYWQgb2YgYXNzZW1ibHkgY29tbWVudC4KKwlbX0FSTV9BUkNIID49IDRdICh1bXVsX3BwbW0pOiBVc2UgY29ycmVjdCBpbnB1dHMgYW5kIG91dHB1dHMgaW5zdGVhZCBvZgorCXJlZ2lzdGVycy4KKworCXNlcnBlbnQtYW1kNjQ6IGRvIG5vdCB1c2UgR0FTIG1hY3Jvcy4KKwkqIGNpcGhlci9zZXJwZW50LWF2eDItYW1kNjQuUzogUmVtb3ZlIHVzZSBvZiBHQVMgbWFjcm9zLgorCSogY2lwaGVyL3NlcnBlbnQtc3NlMi1hbWQ2NC5TOiBEaXR0by4KKwkqIGNvbmZpZ3VyZS5hYyBbSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BU106IERvIG5vdCBjaGVjaworCWZvciBHQVMgbWFjcm9zLgorCisJQWRkIENvdW50ZXIgd2l0aCBDQkMtTUFDIG1vZGUgKENDTSkKKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdjaXBoZXItY2NtLmMnLgorCSogY2lwaGVyL2NpcGhlci1jY20uYzogTmV3LgorCSogY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIChnY3J5X2NpcGhlcl9oYW5kbGUpOiBBZGQgJ3VfbW9kZScuCisJKF9nY3J5X2NpcGhlcl9jY21fZW5jcnlwdCwgX2djcnlfY2lwaGVyX2NjbV9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfY2NtX3NldF9ub25jZSwgX2djcnlfY2lwaGVyX2NjbV9hdXRoZW50aWNhdGUpCisJKF9nY3J5X2NpcGhlcl9jY21fZ2V0X3RhZywgX2djcnlfY2lwaGVyX2NjbV9jaGVja190YWcpCisJKF9nY3J5X2NpcGhlcl9jY21fc2V0X2xlbmd0aHMpOiBOZXcgcHJvdG90eXBlcy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3BlbiwgY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0KQorCShfZ2NyeV9jaXBoZXJfc2V0aXYsIF9nY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUsIF9nY3J5X2NpcGhlcl9nZXR0YWcpCisJKF9nY3J5X2NpcGhlcl9jaGVja3RhZywgZ3J5X2NpcGhlcl9jdGwpOiBBZGQgaGFuZGxpbmcgZm9yIENDTSBtb2RlLgorCSogZG9jL2djcnlwdC50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgR0NSWV9DSVBIRVJfTU9ERV9DQ00uCisJKiBzcmMvZ2NyeXB0LmguaW4gKGdjcnlfY2lwaGVyX21vZGVzKTogQWRkICdHQ1JZX0NJUEhFUl9NT0RFX0NDTScuCisJKGdjcnlfY3RsX2NtZHMpOiBBZGQgJ0dDUllDVExfU0VUX0NDTV9MRU5HVEhTJy4KKwkoR0NSWV9DQ01fQkxPQ0tfTEVOKTogTmV3LgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfY2NtX2NpcGhlcik6IE5ldy4KKwkoY2hlY2tfY2lwaGVyX21vZGVzKTogQ2FsbCAnY2hlY2tfY2NtX2NpcGhlcicuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAoY2NtX2FlYWRfaW5pdCk6IE5ldy4KKwkoY2lwaGVyX2JlbmNoKTogQWRkIGhhbmRsaW5nIGZvciBBRUFEIG1vZGVzIGFuZCBhZGQgQ0NNIGJlbmNobWFya2luZy4KKworCUFkZCBBUEkgdG8gc3VwcG9ydCBBRUFEIGNpcGhlciBtb2Rlcy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoX2djcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSwgX2djcnlfY2lwaGVyX2NoZWNrdGFnKQorCShfZ2NyeV9jaXBoZXJfZ2V0dGFnKTogTmV3LgorCSogZG9jL2djcnlwdC50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IEFQSSBmdW5jdGlvbnMuCisJKiBzcmMvdmlzaWJpbGl0eS5jIChnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUsIGdjcnlfY2lwaGVyX2NoZWNrdGFnKQorCShnY3J5X2NpcGhlcl9nZXR0YWcpOiBOZXcuCisJKiBzcmMvZ2NyeXB0LmguaW4sIHNyYy92aXNpYmlsaXR5Lmg6IGFkZCBkZWNsYXJhdGlvbnMgb2YgdGhlc2UKKwlmdW5jdGlvbnMuCisJKiBzcmMvbGliZ2NyeXB0LmRlZnMsIHNyYy9saWJnY3J5cHQudmVyczogZXhwb3J0IGZ1bmN0aW9ucy4KKworMjAxMy0xMC0yMiAgTklJQkUgWXV0YWthICA8Z25paWJlQGZzaWoub3JnPgorCisJZWNjOiBDb3JyZWN0IGNvbXBsaWFudCBrZXkgZ2VuZXJhdGlvbiBmb3IgRWR3YXJkcyBjdXJ2ZXMuCisJKiBjaXBoZXIvZWNjLmM6IEFkZCBjYXNlIGZvciBFZHdhcmRzIGN1cnZlcy4KKworMjAxMy0xMC0xNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwl0ZXN0czogQWRkIHRlc3Qgb3B0aW9ucyB0byBrZXlnZW4uCisJKiB0ZXN0cy9rZXlnZW4uYyAodXNhZ2UpOiBOZXcuCisJKG1haW4pOiBQcmludCB1c2FnZSBpbmZvLiAgQWxsb3cgcnVubmluZyBqdXN0IG9uZSBhbGdvLgorCisJbXBpOiBEbyBub3QgY2xlYXIgdGhlIHNpZ24gb2YgdGhlIG1waV9tb2QgcmVzdWx0LgorCSogbXBpL21waS1tb2QuYyAoX2djcnlfbXBpX21vZCk6IFJlbW92ZSBzaWduIHNldHRpbmcuCisKKwllY2M6IFB1dCB0aGUgY3VydmUgbmFtZSBhZ2FpbiBpbnRvIHRoZSBvdXRwdXQgb2YgZ2NyeV9wa19nZW5rZXkuCisJKiBjaXBoZXIvZWNjLmMgKGVjY19nZW5lcmF0ZSk6IFVzZSB0aGUgY29ycmVjdCB2YXIuICBSZWxlYXNlCisJQ1VSVkVfRkxBR1MuCisKKwllY2M6IFN1cHBvcnQgV2VpZXJzdHJhc3MgY3VydmVzIGluIGdjcnlfbXBpX2VjX2N1cnZlX3BvaW50LgorCSogbXBpL2VjLmMgKF9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCk6IFN1cHBvcnQgTVBJX0VDX1dFSUVSU1RSQVNTLgorCisyMDEzLTEwLTE2ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJYXJjZm91cjogbW9yZSBvcHRpbWl6ZWQgdmVyc2lvbiBmb3Igbm9uLWkzODYgYXJjaGl0ZWN0dXJlcy4KKwkqIGNpcGhlci9hcmNmb3VyLmMgKEFSQ0ZPVVJfY29udGV4dCk6IFJlb3JkZXIgbWVtYmVycy4KKwkoZG9fZW5jcnlwdF9zdHJlYW0pIFshX19pMzg2X19dOiBGYXN0ZXIgaW1wbGVtZW50YXRpb24gZm9yIG5vbi1pMzg2LgorCShkb19hcmNmb3VyX3NldGtleSk6IEF2b2lkIG1vZHVsbyBvcGVyYXRpb25zLgorCisJQXZvaWQgdm9pZCogcG9pbnRlciBhcml0aG1ldGljLgorCSogdGVzdHMvdHNleHAuYyAoY2hlY2tfZXh0cmFjdF9wYXJhbSk6IENhc3Qgdm9pZCogcG9pbnRlcnMgdG8gY2hhcioKKwliZWZvcmUgZG9pbmcgYXJpdGhtZXRpY3MuCisKKzIwMTMtMTAtMTYgIERtaXRyeSBFcmVtaW4tU29sZW5pa292ICA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisKKwllY2M6IEFkZCBzdXBwb3J0IGZvciBHT1NUIFIgMzQuMTAtMjAwMS8tMjAxMiBzaWduYXR1cmVzLgorCSogc3JjL2NpcGhlci5oOiBkZWZpbmUgUFVCS0VZX0ZMQUdfR09TVAorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYzogQWRkIEdPU1QyMDAxLXRlc3QgYW5kIEdPU1QyMDEyLXRlc3QgY3VydmVzCisJICBkZWZpbmVkIGluIHN0YW5kYXJkcy4gVHlwaWNhbCBhcHBsaWNhdGlvbnMgd291bGQgdXNlIGVpdGhlciB0aG9zZQorCSAgY3VydmVzLCBvciBjdXJ2ZXMgZGVmaW5lZCBpbiBSRkMgNDM1NyAod2lsbCBiZSBhZGRlZCBsYXRlcikuCisJKiBjaXBoZXIvZWNjLmMgKHNpZ25fZ29zdCwgdmVyaWZ5X2dvc3QpOiBOZXcuCisJICAoZWNjX3NpZ24sIGVjY192ZXJpZnkpOiB1c2Ugc2lnbl9nb3N0L3ZlcmlmeV9nb3N0IGlmIFBVQktFWV9GTEFHX0dPU1QKKwkgIGlzIHNldC4KKwkgIChlY2NfbmFtZXMpOiBhZGQgImdvc3QiIGZvciBnb3N0IHNpZ25hdHVyZXMuCisJKiBjaXBoZXIvcHVia2V5LXV0aWwuYyAoX2djcnlfcGtfdXRpbF9wYXJzZV9mbGFnbGlzdCwKKwkgIF9nY3J5X3BrX3V0aWxfcHJlcGFyc2Vfc2lndmFsKTogc2V0IFBVQktFWV9GTEFHX0dPU1QgaWYgZ29zdCBmbGFnCisJICBpcyBwcmVzZW50IGluIHMtZXhwLgorCSogdGVzdHMvYmVuY2htYXJrLmMgKGVjY19iZW5jaCk6IGFsc28gYmVuY2htYXJrIEdPU1Qgc2lnbmF0dXJlcy4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX3B1YmtleSk6IGFkZCB0d28gcHVibGljIGtleXMgZnJvbQorCSAgR09TVCBSIDM0LjEwLTIwMTIgc3RhbmRhcmQuCisJICAoY2hlY2tfcHVia2V5X3NpZ25fZWNkc2EpOiBhZGQgdHdvIGRhdGEgc2V0cyB0byBjaGVjayBnb3N0IHNpZ25hdHVyZXMuCisJKiB0ZXN0cy9jdXJ2ZXMuYzogY29ycmVjdCBOX0NVUlZFUyBhcyB3ZSBub3cgaGF2ZSAyIG1vcmUgY3VydmVzLgorCisKKwlSZW1vdmVkIHNvbWUgY29tbWVudHMgZnJvbSB0aGUgbmV3IGN1cnZlIGRlZmluaXRpb25zIGluIGVjYy1jdXJ2ZXMuYworCXRvIGF2b2lkIGxpbmUgd3JhcHBpbmcuICBFdmVudHVhbGx5IHdlIHdpbGwgZGV2ZWxvcCBhIHByZWNvbXBpbGVyIHRvCisJYXZvaWQgcGFyc2luZyB0aG9zZSBoZXggc3RyaW5ncy4gLXdrCisKKwlGaXggMjU2LWJpdCBlY2RzYSB0ZXN0IGtleSBkZWZpbml0aW9uLgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfcHVia2V5KTogZml4IG5pc3RwMjU2IHRlc3Rpbmcga2V5IGRlY2xhcmF0aW9uIC0KKwkgIGFkZCBtaXNzaW5nIGNvbW1hLgorCisyMDEzLTEwLTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXNleHA6IEFkZCBmdW5jdGlvbiBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoX0dDUllfR0NDX0FUVFJfU0VOVElORUwpOiBOZXcuCisJKGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtKTogTmV3LgorCSogc3JjL3Zpc2liaWxpdHkuYyAoZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0pOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5oIChnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSk6IEFkZCBoYWNrIHRvIGRldGVjdAorCWludGVybmFsIHVzZS4KKwkqIGNpcGhlci9wdWJrZXktdXRpbC5jIChfZ2NyeV9wa191dGlsX2V4dHJhY3RfbXBpcyk6IE1vdmUgYW5kIHNwbGl0CisJaW50byAuLi4KKwkqIHNyYy9zZXhwLmMgKF9nY3J5X3NleHBfdmV4dHJhY3RfcGFyYW0pCisJKF9nY3J5X3NleHBfZXh0cmFjdF9wYXJhbSk6IHRoaXMuICBDaGFuZ2UgYWxsIGNhbGxlcnMuICBBZGQgc3VwcG9ydCBmb3IgYnVmZmVyCisJZGVzY3JpcHRvcnMgYW5kIGEgcGF0aCBvcHRpb24vCisKKwkqIHRlc3RzL3RzZXhwLmMgKGRpZSwgaGV4MmJ1ZmZlciwgaGV4Mm1waSwgaGV4Mm1waW9wYSk6IE5ldy4KKwkoY21wX21waWhleCwgY21wX2J1ZmhleCk6IE5ldy4KKwkoY2hlY2tfZXh0cmFjdF9wYXJhbSk6IE5ldy4KKworMjAxMy0xMC0xNiAgTklJQkUgWXV0YWthICA8Z25paWJlQGZzaWoub3JnPgorCisJbXBpOiBtcGktcG93IGltcHJvdmVtZW50LgorCSogbXBpL21waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IE5ldyBpbXBsZW1lbnRhdGlvbiBvZiBsZWZ0LXRvLXJpZ2h0CisJay1hcnkgZXhwb25lbnRpYXRpb24uCisKKzIwMTMtMTAtMTUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJZWNjOiAgU3VwcG9ydCB1c2Ugb2YgRWQyNTUxOSB3aXRoIEVDRFNBLgorCSogc3JjL2NpcGhlci5oIChQVUJLRVlfRkxBR19FQ0RTQSk6IE5ldy4KKwkqIGNpcGhlci9wdWJrZXktdXRpbC5jIChfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0KTogQWRkIGZsYWcgImVjZHNhIi4KKwkqIGNpcGhlci9lY2MuYyAodmVyaWZ5X2VjZHNhLCB2ZXJpZnlfZWRkc2EpOiBSZW1vdmUgc29tZSBkZWJ1ZyBvdXRwdXQuCisJKGVjY19nZW5lcmF0ZSwgZWNjX3NpZ24sIGVjY192ZXJpZnkpOiBTdXBwb3J0IEVkMjU1MTkgd2l0aCBFQ0RTQS4KKwkqIHRlc3RzL2tleWdlbi5jIChjaGVja19lY2Nfa2V5cyk6IENyZWF0ZSBzdWNoIGEgdGVzdCBrZXkuCisJKiB0ZXN0cy9wdWJrZXkuYyAoZmFpbCwgaW5mbywgZGF0YV9mcm9tX2hleCwgZXh0cmFjdF9jbXBfZGF0YSk6IE5ldy4KKwlUYWtlIGZyb20gZHNhLTY5NzkuYworCShjaGVja19lZDI1NTE5ZWNkc2Ffc2FtcGxlX2tleSk6IG5ldy4KKwkobWFpbik6IENhbGwgbmV3IHRlc3QuCisKKzIwMTMtMTAtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJcHVia2V5OiBTdXBwb3J0IGZsYWdzIGxpc3QgaW4gZ2NyeV9wa19nZW5rZXkuCisJKiBzcmMvY2lwaGVyLmggKFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVkpOiBOZXcuCisJKFBVQktFWV9GTEFHX1VTRV9YOTMxKTogTmV3LgorCShQVUJLRVlfRkxBR19VU0VfRklQUzE4Nik6IE5ldy4KKwkoUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMik6IE5ldy4KKwkqIGNpcGhlci9wdWJrZXktdXRpbC5jIChfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0KTogUmVuYW1lIGZyb20KKwlwYXJzZV9mbGFnc19saXN0LiAgUGFyc2UgbmV3IGZsYWdzLgorCSogY2lwaGVyL2RzYS5jIChkc2FfZ2VuZXJhdGUpOiBTdXBwb3J0IGZsYWcgbGlzdC4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dlbmVyYXRlKTogRGl0dG8uCisJKiBjaXBoZXIvcnNhLmMgKHJzYV9nZW5lcmF0ZSk6IERpdHRvLgorCisJcHVia2V5OiBSZW1vdmUgZHVwbGljYXRlZCBmbGFnIHBhcnNpbmcgY29kZS4KKwkqIGNpcGhlci9wdWJrZXktdXRpbC5jIChfZ2NyeV9wa191dGlsX3ByZXBhcnNlX2VuY3ZhbCkKKwkoX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSk6IEZhY3RvciBmbGFnIHBhcnNpbmcgY29kZSBvdXQgdG8gLi4KKwkocGFyc2VfZmxhZ19saXN0KTogTmV3LgorCSogc3JjL2NpcGhlci5oIChQVUJLRVlfRkxBR19SQVdfRkxBRyk6IE5ldy4KKworCW1waWNhbGM6IEFjY2VwdCBsb3dlcmNhc2UgaGV4IGRpZ2l0cy4KKwkqIHNyYy9tcGljYWxjLmMgKG1haW4pOiBUZXN0IGZvciBsb3dlcmNhc2UgaGV4IGRpZ2l0cy4KKworMjAxMy0xMC0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlwdWJrZXk6IE1vdmUgc2V4cCBwYXJzaW5nIG9mIHJlbWFpbmluZyBmdWNudGlvbnMgdG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvcHVia2V5LmMgKHJlbGVhc2VfbXBpX2FycmF5KTogUmVtb3ZlLgorCShwdWJrZXlfY2hlY2tfc2VjcmV0X2tleSk6IFJlbW92ZS4KKwkoc2V4cF9lbGVtZW50c19leHRyYWN0KTogUmVtb3ZlLgorCShzZXhwX2VsZW1lbnRzX2V4dHJhY3RfZWNjKTogUmVtb3ZlLgorCShzZXhwX3RvX2tleSk6IFJlbW92ZS4KKwkoZ2V0X2hhc2hfYWxnbyk6IFJlbW92ZS4KKwkoZ2NyeV9wa190ZXN0a2V5KTogUmV2YW1wLgorCShnY3J5X3BrX2dldF9jdXJ2ZSk6IFJldmFtcC4KKwkqIGNpcGhlci9yc2EuYyAocnNhX2NoZWNrX3NlY3JldF9rZXkpOiBSZXZhbXAuCisJKiBjaXBoZXIvZWxnYW1hbC5jIChlbGdfY2hlY2tfc2VjcmV0X2tleSk6IFJldmFtcC4KKwkqIGNpcGhlci9kc2EuYyAoZHNhX2NoZWNrX3NlY3JldF9rZXkpOiBSZXZhbXAuCisJKiBjaXBoZXIvZWNjLmMgKGVjY19jaGVja19zZWNyZXRfa2V5KTogUmV2YW1wLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYzogSW5jbHVkZSBjaXBoZXIuaCBhbmQgcHVia2V5LWludGVybmFsLmgKKwkoX2djcnlfZWNjX2dldF9jdXJ2ZSk6IFJldmFtcC4KKworCSogY2lwaGVyL3B1YmtleS11dGlsLmMgKF9nY3J5X3BrX3V0aWxfZXh0cmFjdF9tcGlzKTogU2V0IHBhc3NlZCBhbmQKKwl1c2VkIHBhcmFtZXRlcnMgb24gZXJyb3IgdG8gTlVMTC4KKworCXB1YmtleTogTW92ZSBzZXhwIHBhcnNpbmcgZm9yIGdjcnlfcGtfZGVjcnlwdCB0byB0aGUgbW9kdWxlcy4KKwkqIGNpcGhlci9yc2EuYyAocnNhX2RlY3J5cHQpOiBSZXZhbXAuCisJKiBjaXBoZXIvZWxnYW1hbC5jIChlbGdfZGVjcnlwdCk6IFJldmFtcC4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2RlY3J5cHRfcmF3KTogUmV2YW1wLgorCSogY2lwaGVyL3B1YmtleS5jIChnY3J5X3BrX2RlY3J5cHQpOiBTaW1wbGlmeS4KKwkoc2V4cF90b19lbmMpOiBSZW1vdmUuCisJKiBjaXBoZXIvcHVia2V5LXV0aWwuYyAoX2djcnlfcGtfdXRpbF9wcmVwYXJzZV9lbmN2YWwpOiBOZXcuCisKKwlwdWJrZXk6IE1vdmUgc2V4cCBwYXJzaW5nIGZvciBnY3J5X3BrX2VuY3J5cHQgdG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvcnNhLmMgKHJzYV9lbmNyeXB0KTogUmV2YW1wLgorCSogY2lwaGVyL2VsZ2FtYWwuYyAoZWxnX2VuY3J5cHQpOiBSZXZhbXAuCisJKiBjaXBoZXIvZWNjLmMgKGVjY19lbmNyeXB0X3Jhdyk6IFJldmFtcC4KKwkqIGNpcGhlci9wdWJrZXkuYyAoZ2NyeV9wa19lbmNyeXB0KTogU2ltcGxpZnkuCisKKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX3B1YmtleV9jcnlwdCk6IEluaXQgcGxhaW4sIGNpcGgsIGFuZCBkYXRhIHNvCisJdGhhdCB0aGV5IGFyZSBpbml0aWFsaXplZCBldmVuIGFmdGVyIGFuIGVuY3J5cHQgZmFpbHVyZS4KKworCXB1YmtleTogTW92ZSBzZXhwIHBhcnNpbmcgZm9yIGdjcnlfcGtfc2lnbiB0byB0aGUgbW9kdWxlcy4KKwkqIGNpcGhlci9yc2EuYyAocnNhX3NpZ24pOiBSZXZhbXAuCisJKiBjaXBoZXIvZHNhLmMgKGRzYV9zaWduKTogUmV2YW1wLgorCSogY2lwaGVyL2VsZ2FtYWwuYyAoZWxnX3NpZ24pOiBSZXZhbXAuCisJKiBjaXBoZXIvZWNjLmMgKGVjY19zaWduKTogUmV2YW1wLgorCSogY2lwaGVyL3B1YmtleS5jIChnY3J5X3BrX3NpZ24pOiBTaW1wbGlmeS4KKworMjAxMy0xMC0xMCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCVByZXZlbnQgdGFpbCBjYWxsIG9wdGltaXphdGlvbiB3aXRoIF9nY3J5X2J1cm5fc3RhY2suCisJKiBjb25maWd1cmUuYWM6IE5ldyBjaGVjaywgSEFWRV9HQ0NfQVNNX1ZPTEFUSUxFX01FTU9SWS4KKwkqIHNyYy9nMTBsaWIuaCAoX2djcnlfYnVybl9zdGFjayk6IFJlbmFtZSB0byBfX2djcnlfYnVybl9zdGFjay4KKwkoX19nY3J5X2J1cm5fc3RhY2tfZHVtbXkpOiBOZXcuCisJKF9nY3J5X2J1cm5fc3RhY2spOiBOZXcgbWFjcm8uCisJKiBzcmMvbWlzYy5jIChfZ2NyeV9idXJuX3N0YWNrKTogUmVuYW1lIHRvIF9fZ2NyeV9idXJuX3N0YWNrLgorCShfX2djcnlfYnVybl9zdGFja19kdW1teSk6IE5ldy4KKworMjAxMy0xMC0wOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlwdWJrZXk6IE1vdmUgc2V4cCBwYXJzaW5nIGZvciBnY3J5X3BrX3ZlcmlmeSB0byB0aGUgbW9kdWxlcy4KKwkqIGNpcGhlci9yc2EuYyAocnNhX3ZlcmlmeSk6IFJldmFtcC4KKwkqIGNpcGhlci9kc2EuYyAoZHNhX3ZlcmlmeSk6IFJldmFtcC4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ192ZXJpZnkpOiBSZXZhbXAuCisJKiBjaXBoZXIvZWNjLmMgKGVjY192ZXJpZnkpOiBSZXZhbXAuCisJKiBjaXBoZXIvcHVia2V5LmMgKHNleHBfdG9fc2lnKTogUmVtb3ZlLgorCShwc3NfdmVyaWZ5X2NtcCk6IE1vdmUgdG8gcHVia2V5LXV0aWwuYworCShzZXhwX2RhdGFfdG9fbXBpKTogRGl0dG8uCisJKGluaXRfZW5jb2RpbmdfY3R4KTogRGl0dG8uCisJKGdjcnlfcGtfdmVyaWZ5KTogU2ltcGxpZnkuCisJKiBjaXBoZXIvcHVia2V5LXV0aWwuYyAoX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCk6IEFkZC4gVGFrZQorCWZyb20gcHVia2V5LmMKKwkoZ2V0X2hhc2hfYWxnbyk6IERpdHRvLgorCShfZ2NyeV9wa191dGlsX2RhdGFfdG9fbXBpKTogRGl0dG8uCisJKHBzc192ZXJpZnlfY21wKTogRGl0dG8uCisJKF9nY3J5X3BrX3V0aWxfZXh0cmFjdF9tcGlzKTogTmV3LgorCShfZ2NyeV9wa191dGlsX3ByZXBhcnNlX3NpZ3ZhbCk6IE5ldy4KKwkoX2djcnlfcGtfdXRpbF9mcmVlX2VuY29kaW5nX2N0eCk6IE5ldy4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKF9nY3J5X2VjY19maWxsX2luX2N1cnZlKTogTWFrZSBjdXJ2ZSBpbml0CisJb3B0aW9uYWwuCisKKwkqIHNyYy9nMTBsaWIuaCAoR0NDX0FUVFJfU0VOVElORUwpOiBOZXcuCisKKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX3B1YmtleV9zaWduKTogUHJpbnQgdGhlIGFsZ28gbmFtZS4KKwkobWFpbik6IEFkZCBvcHRpb24gLS1wdWJrZXkuCisKKzIwMTMtMTAtMDggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJcHVia2V5OiBNb3ZlIHNleHAgcGFyc2luZyBmb3IgZ2NyeV9wa19nZXRfbmJpdHMgdG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvcHVia2V5LmMgKHNwZWNfZnJvbV9zZXhwKTogTmV3LgorCShnY3J5X3BrX2dldF9uYml0cyk6IFNpbXBsaWZ5LgorCSogY2lwaGVyL3JzYS5jIChyc2FfZ2V0X25iaXRzKTogVGFrZSBvbmx5IFBBUk1TIGFzIGFyZ3MgYW5kIGRvIHNleHAKKwlwYXJzaW5nIGhlcmUuCisJKiBjaXBoZXIvZHNhLmMgKGRzYV9nZXRfbmJpdHMpOiBEaXR0by4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19nZXRfbmJpdHMpOiBEaXR0by4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dldF9uYml0cyk6IERpdHRvLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUpOiBBbGxvdyBOVUxMIGZvciBhcmcKKwlDVVJWRS4KKworCXB1YmtleTogTW92ZSBzZXhwIHBhcnNpbmcgZm9yIGdjcnlfcGtfZ2V0a2V5IHRvIHRoZSBtb2R1bGVzLgorCSogY2lwaGVyL3B1YmtleS11dGlsLmM6IE5ldy4KKwkoX2djcnlfcGtfdXRpbF9nZXRfbmJpdHMpOiBOZXcuICBCYXNlZCBvbiBjb2RlIGZyb20gZ2NyeV9wa19nZW5rZXkuCisJKF9nY3J5X3BrX3V0aWxfZ2V0X3JzYV91c2VfZSk6IERpdHRvLgorCSogY2lwaGVyL3B1YmtleS5jIChnY3J5X3BrX2dlbmtleSk6IFN0cmlwIG1vc3QgY29kZSBhbmQgcGFzcy4KKwkqIGNpcGhlci9yc2EuYyAocnNhX2dlbmVyYXRlKTogUmVtb3ZlIGFyZ3MgQUxHTywgTkJJVFMgYW5kIEVWQUxVRS4KKwlDYWxsIG5ldyBmdWNudGlvbnMgdG8gZ2V0IHRoZXNlIHZhbHVlcy4KKwkqIGNpcGhlci9kc2EuYyAoZHNhX2dlbmVyYXRlKTogUmVtb3ZlIGFyZ3MgQUxHTywgTkJJVFMgYW5kIEVWQUxVRS4KKwlDYWxsIF9nY3J5X3BrX3V0aWxfZ2V0X25iaXRzIHRvIGdldCBuYml0cy4gIEFsd2F5cyBwYXJzZSBnZW5wYXJtcy4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19nZW5lcmF0ZSk6IERpdHRvLgorCSogY2lwaGVyL2VjYy5jIChlY2NfZ2VuZXJhdGUpOiBEaXR0by4KKworCWNpcGhlcjogRGVwcmVjYXRlIEdDUllfUEtfRUxHX0UuCisJKiBjaXBoZXIvZWxnYW1hbC5jIChfZ2NyeV9wdWJrZXlfc3BlY19lbGdfZSk6IFJlbW92ZS4KKwkqIGNpcGhlci9wdWJrZXkuYyAocHVia2V5X2xpc3QpOiBSZW1vdmUgZG91YmxlIGluY2x1ZGVkCisJX2djcnlfcHVia2V5X3NwZWNfZWxnLgorCShtYXBfYWxnbyk6IE1Ba2UgRUxHX0UgdG8gRUxHLgorCisyMDEzLTEwLTAyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVByb3ZpZGUgUHRoIGNvbXBhdGlibGl0eSBmb3IgdXNlIHdpdGggR251UEcgMi4wLgorCSogc3JjL2F0aC5jIChhdGhfaW5zdGFsbCk6IENhbGwgYXRoX2luaXQgYW5kIGRlY2xhcmUgUHRoIGFzCisJY29tcGF0aWJsZS4KKworMjAxMy0xMC0wMiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCXNoYTUxMjogZml4IGJ1aWxkaW5nIG9uIEFSTS4KKwkqIGNpcGhlci9zaGE1MTIuYyAodHJhbnNmb3JtKSBbVVNFX0FSTV9ORU9OX0FTTV06IEZpeCAnaGQnIHRvICdjdHgnLgorCisyMDEzLTEwLTAyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbW92ZSBkZXByZWNhdGVkIGNvbnRyb2wgY29kZXMuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllDVExfU0VUX0tFWSk6IFJlbW92ZS4KKwkoR0NSWUNUTF9TRVRfSVYpOiBSZW1vdmUuCisJKEdDUllDVExfU0VUX0NUUik6IFJlbW92ZS4KKwkqIGNpcGhlci9tZC5jIChnY3J5X21kX2N0bCk6IFJlbW92ZSBkZXByZWNhdGVkIEdDUllDVExfU0VUX0tFWS4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfY3RsKTogUmVtb3ZlIGRlcHJlY2F0ZWQKKwlHQ1JZQ1RMX1NFVF9LRVksIEdDUllDVExfU0VUX0lWLCBHQ1JZQ1RMX1NFVF9DVFIuCisKKzIwMTMtMTAtMDIgIERtaXRyeSBFcmVtaW4tU29sZW5pa292ICA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisKKwlGaXggZXJyb3JzIHdoZW4gYnVpbGRpbmcgd2l0aCBDbGFuZyBvbiBQUEMuCisJKiBtcGkvbG9uZ2xvbmcuaCAoYWRkX3NzYWFhYSwgc3ViX2RkbW1zcywgY291bnRfbGVhZGluZ196ZXJvcywKKwkgIHVtdWxfcHBtbSk6IERvIG5vdCBjYXN0IGFzbSBvdXRwdXQgdG8gVVNJdHlwZS4KKworMjAxMy0xMC0wMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZW1vdmUgbGFzdCByZW1haW5zIG9mIHRoZSBmb3JtZXIgbW9kdWxlIHN5c3RlbS4KKwkqIHNyYy9nY3J5cHQtbW9kdWxlLmgsIHNyYy9tb2R1bGUuYzogUmVtb3ZlLgorCSogc3JjL3Zpc2liaWxpdHkuaDogRG8gbm90IGluY2x1ZGUgZ2NyeXB0LW1vZHVsZS5oLgorCSogc3JjL2cxMGxpYi5oOiBSZW1vdmUgYWxsIHByb3RvdHlwZXMgZnJvbSBtb2R1bGUuYworCShnY3J5X21vZHVsZSk6IFJlbW92ZS4KKwkqIGNpcGhlci9jaXBoZXItaW50ZXJuYWwuaCAoZ2NyeV9jaXBoZXJfaGFuZGxlKTogUmVtb3ZlIHVudXNlZCBmaWVsZC4KKworCUZpeCBtaXNzaW5nIHByb3RvdHlwZSB3YXJuaW5nIGluIHZpc2liaWxpdHkuYy4KKwkqIHNyYy9lYy1jb250ZXh0LmggKF9nY3J5X21waV9lY19uZXcpOiBNb3ZlIHByb3RvdHlwZSB0byBtcGkuaC4KKworCW1kOiBTaW1wbGlmeSB0aGUgbWVzc2FnZSBkaWdlc3QgZGlzcGF0Y2hlciBtZC5jLgorCSogc3JjL2djcnlwdC1tb2R1bGUuaCAoZ2NyeV9tZF9zcGVjX3QpOiAgTW92ZSB0byAuLi4KKwkqIHNyYy9jaXBoZXItcHJvdG8uaDogaGVyZS4gIE1lcmdlIHdpdGggbWRfZXh0cmFfc3BlY190LiAgQWRkIGZpZWxkcworCUFMR08gYW5kIEZMQUdTLiAgU2V0IHRoZXNlIGZpZWxkcyBpbiBhbGwgZGlnZXN0IG1vZHVsZXMuCisJKiBjaXBoZXIvbWQuYzogQ2hhbmdlIG1vc3QgY29kZSB0byByZXBsYWNlIHRoZSBmb3JtZXIgbW9kdWxlCisJc3lzdGVtIGJ5IGEgc2ltcGxlciBzeXN0ZW0gdG8gZ2FpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtcy4KKworMjAxMy0xMC0wMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwljaXBoZXI6IFNpbXBsaWZ5IHRoZSBjaXBoZXIgZGlzcGF0Y2hlciBjaXBoZXIuYy4KKwkqIHNyYy9nY3J5cHQtbW9kdWxlLmggKGdjcnlfY2lwaGVyX3NwZWNfdCk6ICBNb3ZlIHRvIC4uLgorCSogc3JjL2NpcGhlci1wcm90by5oIChnY3J5X2NpcGhlcl9zcGVjX3QpOiBoZXJlLiAgTWVyZ2Ugd2l0aAorCWNpcGhlcl9leHRyYV9zcGVjX3QuICBBZGQgZmllbGRzIEFMR08gYW5kIEZMQUdTLiAgU2V0IHRoZXNlIGZpZWxkcyBpbgorCWFsbCBjaXBoZXIgbW9kdWxlcy4KKwkqIGNpcGhlci9jaXBoZXIuYzogQ2hhbmdlIG1vc3QgY29kZSB0byByZXBsYWNlIHRoZSBmb3JtZXIgbW9kdWxlCisJc3lzdGVtIGJ5IGEgc2ltcGxlciBzeXN0ZW0gdG8gZ2FpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtcy4KKwkoZGlzYWJsZV9wdWJrZXlfYWxnbyk6IFNpbXBsaWZpZWQuICBOb3QgYW55bW9yZSB0aHJlYWQtc2FmZSwgdGhvdWdoLgorCisJKiBjaXBoZXIvbWQuYyAoX2djcnlfbWRfc2VsZnRlc3QpOiBVc2UgY29ycmVjdCBzdHJ1Y3R1cmUuICBOb3QgYSByZWFsCisJcHJvYmxlbSBiZWNhdXNlIGJvdGggZGVmaW5lIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIHRoZWlyIGZpcnN0IGZpZWxkLgorCisJKiBjaXBoZXIvcHVia2V5LmMgKF9nY3J5X3BrX3NlbGZ0ZXN0KTogVGFrZSBjYXJlIG9mIHRoZSBkaXNhYmxlZCBmbGFnLgorCisJbXBpOiBGaXggZ2NyeV9tcGlfbmVnLgorCSogbXBpL21waXV0aWwuYyAoX2djcnlfbXBpX25lZyk6IENvcHkgVSB0byBXLgorCisyMDEzLTEwLTAxICBQZXRlciBXdSAgPGxla2Vuc3RleW5AZ21haWwuY29tPgorCisJY2lwaGVyOiBBZGQgc3VwcG9ydCBmb3IgMTI4LWJpdCBrZXlzIGluIFJDMi4KKwkqIGNpcGhlci9yZmMyMjY4LmMgKG9pZHNfcmZjMjI2OF8xMjgpOiBOZXcKKwkoX2djcnlfY2lwaGVyX3NwZWNfcmZjMjI2OF8xMjgpOiBOZXcuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGNpcGhlcl90YWJsZV9lbnRyeSk6IEFkZCBHQ1JZX0NJUEhFUl9SRkMyMjY4XzEyOC4KKworMjAxMy0wOS0zMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwllY2M6IFVzZSBmYXN0ZXIgYiBwYXJhbWV0ZXIgZm9yIEVkMjU1MTkuCisJKiBjaXBoZXIvZWNjLWN1cnZlcy5jIChkb21haW5fcGFybXMpOiBSZXBsYWNlIGIuCisJKiB0ZXN0cy90LW1waS1wb2ludC5jICh0ZXN0X2N1cnZlKTogRGl0dG8uCisKKwllY2M6IFByZXBhcmUgZm9yIGZ1dHVyZSBFZDI1NTE5IG9wdGltaXphdGlvbi4KKwkqIG1waS9lYy1lZDI1NTE5LmM6IE5ldyBidXQgZW1wdHkgZmlsZS4KKwkqIG1waS9lYy1pbnRlcm5hbC5oOiBOZXcuCisJKiBtcGkvZWMuYzogSW5jbHVkZSBlYy1pbnRlcm5hbC5oLgorCShlY19tb2QpOiBOZXcuCisJKGVjX2FkZG0pOiBVc2UgZWNfbW9kLgorCShlY19tdWxtKTogUmVtb3ZlIGNvbW1lbnRlZCBjb2RlLiAgVXNlIGVjX21vZC4KKwkoZWNfc3VibSk6IENhbGwgc2ltcGxlIHN1Yi4KKwkoZWNfcG93Mik6IFVzZSBlY19tdWxtLgorCShlY19tdWwyKTogTmV3LgorCShkdXBfcG9pbnRfd2VpZXJzdHJhc3MpOiBVc2UgZWNfbXVsMi4KKwkoZHVwX3BvaW50X3R3aXN0ZWRlZHdhcmRzKTogQWRkIHNwZWNpYWwgY2FzZSBmb3IgYSA9PSAtMS4gIFVzZQorCWVjX211bDIuCisJKGFkZF9wb2ludHNfd2VpZXJzdHJhc3MpOiBVc2UgZWNfbXVsMi4KKwkoYWRkX3BvaW50c190d2lzdGVkZWR3YXJkcyk6IEFkZCBzcGVjaWFsIGNhc2UgZm9yIGEgPT0gLTEuCisJKF9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCk6IERpdHRvLgorCShlY19wX2luaXQpOiBBZGQgaGFjayB0byB0ZXN0IEJhcnJldHQgZnVuY3Rpb25zLgorCSogc3JjL2VjLWNvbnRleHQuaCAobXBpX2VjX2N0eF9zKTogQWRkIFBfQkFSUkVUVC4KKworCSogbXBpL21waS1tb2QuYyAoX2djcnlfbXBpX21vZF9iYXJyZXR0KTogRml4IHNpZ24gcHJvYmxlbS4KKworCWVjYzogRml4IHJlY29tcHV0aW5nIG9mIFEgZm9yIEVkMjU1MTkuCisJKiBjaXBoZXIvZWNjLW1pc2MuYyAocmV2ZXJzZV9idWZmZXIpOiBOZXcuCisJKF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyk6IEFkZCBFRDI1NTUxOSBzcGVjaWZpYyBjb2RlLgorCSogY2lwaGVyL2VjYy5jIChzaWduX2VkZHNhKTogQWxsb2NhdGUgRElHRVNUIGluIHNlY3VyZSBtZW1vcnkuICBHZXQKKwlyaWQgb2YgSEFTSF9ELgorCSogdGVzdHMvdC1tcGktcG9pbnQuYyAoY29udGV4dF9wYXJhbSk6IFRlc3QgcmVjb21wdXRpbmcgb2YgUSBmb3IKKwlFZDI1NTE5LgorCisJbG9nOiBUcnkgdG8gcHJpbnQgcy1leHByZXNzaW9ucyBpbiBhIG1vcmUgY29tcGFjdCBmb3JtYXQuCisJKiBzcmMvbWlzYy5jIChjb3VudF9jbG9zaW5nX3BhcmVucyk6IE5ldy4KKwkoX2djcnlfbG9nX3ByaW50c3hwKTogVXNlIG5ldyBmdW5jdGlvbi4KKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfcG9pbnRfbG9nKTogVGFrZSBjYXJlIG9mIGEgTlVMTCBwb2ludC4KKworMjAxMy0wOS0zMCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCU1ha2UgV2hpcmxwb29sIHVzZSB0aGUgX2djcnlfbWRfYmxvY2tfd3JpdGUgaGVscGVyLgorCSogY2lwaGVyL3doaXJscG9vbC5jICh3aGlybHBvb2xfY29udGV4dF90KTogQWRkICdiY3R4JywgcmVtb3ZlCisJJ2J1ZmZlcicsICdjb3VudCcgYW5kICduYmxvY2tzJy4KKwkod2hpcmxwb29sX2luaXQpOiBJbml0aWFsaXplICdiY3R4Jy4KKwkod2hpcmxwb29sX3RyYW5zZm9ybSk6IEFkanVzdCBjb250ZXh0IGFyZ3VtZW50IHR5cGUgYW5kIGJ1cm4gc3RhY2sKKwlkZXB0aC4KKwkod2hpcmxwb29sX2FkZCk6IFJlbW92ZS4KKwkod2hpcmxwb29sX3dyaXRlKTogVXNlIF9nY3J5X21kX2Jsb2NrX3dyaXRlLgorCSh3aGlybHBvb2xfZmluYWwsIHdoaXJscG9vbF9yZWFkKTogQWRqdXN0IGZvciAnYmN0eCcgdXNhZ2UuCisKKwl3aGlybHBvb2w6IGFkZCBzdGFjayBidXJuaW5nIGFmdGVyIHRyYW5zZm9ybS4KKwkqIGNpcGhlci93aGlybHBvb2wuYyAod2hpcmxwb29sX3RyYW5zZm9ybSk6IFJldHVybiBidXJuIHN0YWNrIGRlcHRoLgorCSh3aGlybHBvb2xfYWRkKTogRG8gYnVybl9zdGFjay4KKworCXdoaXJscG9vbDogZG8gYml0Y291bnQgY2FsY3VsYXRpb24gaW4gZmluYWxpemF0aW9uIHBhcnQuCisJKiBjaXBoZXIvd2hpcmxwb29sLmMgKHdoaXJscG9vbF9jb250ZXh0X3QpOiBSZW1vdmUgJ2xlbmd0aCcsIGFkZAorCSduYmxvY2tzJy4KKwkod2hpcmxwb29sX2FkZCk6IFVwZGF0ZSAnbmJsb2NrcycgaW5zdGVhZCBvZiAnbGVuZ3RoJywgYW5kIGFkZCBlYXJseQorCXJldHVybiBhdCBvbmUgc3BvdC4KKwkod2hpcmxwb29sX3dyaXRlKTogQ2hlY2sgZm9yICduYmxvY2tzJyBvdmVyZmxvdy4KKwkod2hpcmxwb29sX2ZpbmFsKTogQ29udmVydCAnbmJsb2NrcycgdG8gYml0LWNvdW50ZXIsIGFuZCB1c2UKKwl3aGlybHBvb2xfd3JpdGUgaW5zdGVhZCBvZiB3aGlybHBvb2xfYWRkLgorCisyMDEzLTA5LTMwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUFkZCBsb2dnaW5nIGZ1bmN0aW9ucyB0byB0aGUgQVBJLgorCSogc3JjL2djcnlwdC5oLmluIChfR0NSWV9HQ0NfQVRUUl9QUklOVEYpOiBOZXcuCisJKGdjcnlfbG9nX2RlYnVnLCBnY3J5X2xvZ19kZWJ1Z2hleCwgZ2NyeV9sb2dfZGVidWdtcGkpOiBOZXcuCisJKGdjcnlfbG9nX2RlYnVncG50LCBnY3J5X2xvZ19kZWJ1Z3N4cCk6IE5ldy4KKwkqIHNyYy92aXNpYmlsaXR5LmMgKGdjcnlfbG9nX2RlYnVnKTogTmV3LgorCShnY3J5X2xvZ19kZWJ1Z2hleCwgZ2NyeV9sb2dfZGVidWdtcGksIGdjcnlfbG9nX2RlYnVncG50KTogTmV3LgorCShnY3J5X2xvZ19kZWJ1Z3N4cCk6IE5ldy4KKwkqIHNyYy9saWJnY3J5cHQuZGVmLCBzcmMvbGliZ2NyeXB0LnZlcnM6IEFkZCBuZXcgZnVuY3Rpb25zLgorCSogc3JjL21pc2MuYyAoX2djcnlfbG9ndik6IE1ha2UgcHVibGljLgorCShfZ2NyeV9sb2dfcHJpbnRzeHApOiBOZXcuCisJKiBzcmMvZzEwbGliLmggKGxvZ19wcmludHN4cCk6IE5ldyBtYWNyby4KKworMjAxMy0wOS0yNiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCU1ha2UgbGliZ2NyeXB0IGJ1aWxkIHdpdGggQ2xhbmcgb24gaTM4Ni4KKwkqIGNpcGhlci9sb25nbG9uZy5oIFtfX2kzODZfX10gKGFkZF9zc2FhYWEsIHN1Yl9kZG1tc3MpCisJKHVtdWxfcHBtbSwgdWRpdl9xcm5uZCk6IERvIG5vdCBjYXN0IGFzbSBvdXRwdXQgdG8gVVNJdHlwZS4KKworMjAxMy0wOS0yNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwltcGk6IENoYW5nZSBub3QgeWV0IHVzZWQgX2djcnlfbXBpX3NldF9vcGFxdWVfY29weS4KKwkqIG1waS9tcGl1dGlsLmMgKF9nY3J5X21waV9zZXRfb3BhcXVlX2NvcHkpOiBDaGFuZ2UgcHJvdG90eXBlLgorCShfZ2NyeV9tcGlfZ2V0X29wYXF1ZV9jb3B5KTogVGFrZSBjYXJlIG9mIGdjcnlfbWFsbG9jIGZhaWx1cmUuCisKKwlzZXhwOiBJbXByb3ZlIHByaW50aW5nIG9mIGRhdGEgd2l0aCBhIGxlYWRpbmcgemVyby4KKwkqIHNyYy9zZXhwLmMgKHN1aXRhYmxlX2VuY29kaW5nKTogRGV0ZWN0IGxlYWRpbmcgemVybyBieXRlLgorCisJZWNjOiBBbGxvdyB0aGUgbmFtZSAicUBlZGRzYSIgdG8gZ2V0L3NldCB0aGUgcHVibGljIGtleS4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKF9nY3J5X2VjY19nZXRfbXBpKTogU3VwcG9ydCAicUBlZGRzYSIuCisJKF9nY3J5X2VjY19zZXRfbXBpKTogU3VwcG9ydCAicSIuCisJKiBjaXBoZXIvZWNjLmMgKGVkZHNhX2VuY29kZXBvaW50KTogUmVuYW1lIHRvIC4uLgorCShfZ2NyeV9lY2NfZWRkc2FfZW5jb2RlcG9pbnQpOiB0aGlzIGFuZCBtYWtlIGdsb2JhbC4gIFJlbW92ZSBhcmcKKwlNSU5MRU4gYW5kIHRha2UgZnJvbSBjb250ZXh0LgorCShlZGRzYV9kZWNvZGVwb2ludCk6IFJlbmFtZSB0bworCShfZ2NyeV9lY2NfZWRkc2FfZGVjb2RlcG9pbnQpOiB0aGlzIGFuZCBtYWtlIGdsb2JhbC4gUmVtb3ZlIGFyZyBMRU4KKwlhbmQgdGFrZSBmcm9tIGNvbnRleHQuCisJKHNpZ25fZWRkc2EsIHZlcmlmeV9lZGRzYSk6IFRha2UgQiBmcm9tIGNvbnRleHQuCisJKGVjY19zaWduLCBlY2NfdmVyaWZ5KTogQWRkIGhhY2sgdG8gc2V0IERJQUxFQ1QuCisJKF9nY3J5X3BrX2VjY19nZXRfc2V4cCk6IFVzZSBfZ2NyeV9lY2NfY29tcHV0ZV9wdWJsaWMuICBIYW5kbGUgRWREU0EuCisJKiBzcmMvZWMtY29udGV4dC5oIChtcGlfZWNfY3R4X3MpOiBBZGQgZmllbGQgTkJJVFMuCisJKiBtcGkvZWMuYyAoZWNfcF9pbml0KTogSW5pdCBOQklUUy4KKwkqIHRlc3RzL3QtbXBpLXBvaW50LmMgKHRlc3RfY3VydmUpOiBBZGQgRWQyNTUxOS4KKwkoc2FtcGxlX2VkMjU1MTlfcSk6IE5ldy4KKwkoY29udGV4dF9wYXJhbSk6IENoZWNrIG5ldyBzYW1wbGUga2V5LgorCShoZXgyYnVmZmVyLCBoZXgybXBpb3BhKTogTmV3LgorCShjbXBfbXBpaGV4KTogVGFrZSBjYXJlIG9mIG9wYXF1ZSBNUElzLgorCisJbXBpY2FsYzogQWRkIHN0YXRlbWVudCB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYml0cy4KKwkqIHNyYy9tcGljYWxjLmMgKGRvX25iaXRzKTogTmV3LgorCShtYWluKTogQWRkIHN0YXRlbWVudCAnYicuCisKKwllY2M6IFJlZmFjdG9yIGxvdy1sZXZlbCBhY2Nlc3MgZnVuY3Rpb25zLgorCSogbXBpL2VjLmMgKHBvaW50X2NvcHkpOiBNb3ZlIHRvIGNpcGhlci9lY2MtY3VydmVzLmMuCisJKGVjX2dldF9yZXNldCk6IFJlbmFtZSB0byBfZ2NyeV9tcGlfZWNfZ2V0X3Jlc2V0IGFuZCBtYWtlIGdsb2JhbC4KKwkoX2djcnlfbXBpX2VjX2dldF9tcGkpOiBGYWN0b3IgbW9zdCBjb2RlIG91dCB0byBfZ2NyeV9lY2NfZ2V0X21waS4KKwkoX2djcnlfbXBpX2VjX2dldF9wb2ludCk6IEZhY3RvciBtb3N0IGNvZGUgb3V0IHRvIF9nY3J5X2VjY19nZXRfcG9pbnQuCisJKF9nY3J5X21waV9lY19zZXRfbXBpKTogRmFjdG9yIG1vc3QgY29kZSBvdXQgdG8gX2djcnlfZWNjX3NldF9tcGkuCisJKF9nY3J5X21waV9lY19zZXRfcG9pbnQpOiBGYWN0b3IgbW9zdCBjb2RlIG91dCB0byBfZ2NyeV9lY2Nfc2V0X3BvaW50LgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoX2djcnlfZWNjX2dldF9tcGkpOiBOZXcuCisJKF9nY3J5X2VjY19nZXRfcG9pbnQsIF9nY3J5X2VjY19zZXRfbXBpLCBfZ2NyeV9lY2Nfc2V0X3BvaW50KTogTmV3LgorCSogY2lwaGVyL2VjYy1taXNjLmMgKF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyk6IE5ldy4KKworCWVjYzogRml4IGhpZ2hseSB1bmxpa2VseSBlbmRsZXNzIGxvb3AgaW4gc2lnbl9lY2RzYS4KKwkqIGNpcGhlci9lY2MuYyAoc2lnbl9lY2RzYSk6IFR1cm4gd2hpbGUtZG8gaW50byBkby13aGlsZSBsb29wcy4KKworMjAxMy0wOS0yNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwllY2M6IEFsbG93IHRoZSB1c2Ugb2YgYW4gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXkuCisJKiBjaXBoZXIvZWNjLmMgKGVkZHNhX2VuY29kZXBvaW50KTogRmFjdG9yIG1vc3QgY29kZSBvdXQgdG8gLi4uCisJKGVkZHNhX2VuY29kZV94X3kpOiBuZXcgZnVjbnRpb24uCisJKGVkZHNhX2RlY29kZXBvaW50KTogQWxsb3cgdXNlIG9mIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5LgorCSogdGVzdHMvdC1lZDI1NTE5LmMgKE5fVEVTVFMpOiBBZGp1c3QuCisJKiB0ZXN0cy90LWVkMjU1MTkuaW5wOiBBZGQgdGVzdCAxMDI1LgorCisyMDEzLTA5LTIzICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXBrOiBBZGQgYWxnbyBpZCBHQ1JZX1BLX0VDQyBhbmQgZGVwcmVjYXRlIEVDRFNBIGFuZCBFQ0RILgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZX1BLX0VDQyk6IE5ldy4KKwkqIGNpcGhlci9wdWJrZXkuYyAobWFwX2FsZ28pOiBOZXcuCisJKHNwZWNfZnJvbV9hbGdvLCBnY3J5X3BrX2dldF9wYXJhbSwgX2djcnlfcGtfc2VsZnRlc3QpOiBVc2UgaXQuCisJKiBjaXBoZXIvZWNjLmMgKHNlbGZ0ZXN0c19lY2RzYSk6IFJlcG9ydCB1c2luZyBHQ1JZX1BLX0VDQy4KKwkocnVuX3NlbGZ0ZXN0cyk6IFNpbXBsaWZ5LgorCShlY2RoX25hbWVzLCBlY2RzYV9uYW1lcyk6IE1lcmdlIGludG8gYSBuZXcgZWNjX25hbWVzLgorCShfZ2NyeV9wdWJrZXlfc3BlY19lY2RoLCBfZ2NyeV9wdWJrZXlfc3BlY19lY2RzYSk6IE1lcmdlIGludG8gbmV3CisJX2djcnlfcHVia2V5X3NwZWNfZWNjLgorCisJZWM6IFVzZSBtcGlfbXVsbSBpbnN0ZWFkIG9mIG1waV9wb3dtLgorCSogbXBpL2VjLmMgKGVjX3BvdzIpOiBOZXcuCisJKGVjX3Bvd20pOiBSZW1vdmUgY2FsbCB0byBtcGlfYWJzLgorCShkdXBfcG9pbnRfd2VpZXJzdHJhc3MsIGR1cF9wb2ludF90d2lzdGVkZWR3YXJkcykKKwkoYWRkX3BvaW50c193ZWllcnN0cmFzcywgYWRkX3BvaW50c190d2lzdGVkZWR3YXJkcykKKwkoX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50KTogVXNlIGVjX3BvdzIuCisKKzIwMTMtMDktMjEgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlidWZoZWxwOiBlbmFibGUgZmFzdCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIHBvd2VycGMuCisJKiBjaXBoZXIvYnVmaGVscC5oIFtfX3Bvd2VycGNfX10gKEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTKTogU2V0CisJbWFjcm8gZW5hYmxlZC4KKwlbX19wb3dlcnBjNjRfX10gKEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTKTogRGl0dG8uCisKKwlSZW1vdmUgaTM4NiBpbmxpbmUgYXNzZW1ibHkgdmVyc2lvbiBvZiByb3RhdGlvbiBmdW5jdGlvbnMuCisJKiBjaXBoZXIvYml0aGVscC5oIChyb2wsIHJvcik6IFJlbW92ZSBpMzg2IHZlcnNpb24sIGNoYW5nZQorCW1hY3JvcyB0byBpbmxpbmUgZnVuY3Rpb25zLgorCSogc3JjL2htYWMyNTYuYyAocm9yKTogRGl0dG8uCisKKwlPcHRpbWl6ZSBhbmQgY2xlYW51cCAzMi1iaXQgYW5kIDY0LWJpdCBlbmRpYW5lc3MgdHJhbnNmb3Jtcy4KKwkqIGNpcGhlci9iaXRoZWxwLmggKGJzd2FwMzIsIGJzd2FwNjQsIGxlX2Jzd2FwMzIsIGJlX2Jzd2FwMzIpCisJKGxlX2Jzd2FwNjQsIGJlX2Jzd2FwNjQpOiBOZXcuCisJKiBjaXBoZXIvYnVmaGVscC5oIChidWZfZ2V0X2JlMzIsIGJ1Zl9nZXRfbGUzMiwgYnVmX3B1dF9sZTMyKQorCShidWZfcHV0X2JlMzIsIGJ1Zl9nZXRfYmU2NCwgYnVmX2dldF9sZTY0LCBidWZfcHV0X2JlNjQpCisJKGJ1Zl9wdXRfbGU2NCk6IE5ldy4KKwkqIGNpcGhlci9ibG93ZmlzaC5jIChkb19lbmNyeXB0X2Jsb2NrLCBkb19kZWNyeXB0X2Jsb2NrKTogVXNlIG5ldworCWVuZGlhbiBjb252ZXJzaW9uIGhlbHBlcnMuCisJKGRvX2JmX3NldGtleSk6IFR1cm4gZW5kaWFuIHNwZWNpZmljIGNvZGUgdG8gZ2VuZXJpYy4KKwkqIGNpcGhlci9jYW1lbGxpYS5jIChHRVRVMzIsIFBVVFUzMik6IFVzZSBuZXcgZW5kaWFuIGNvbnZlcnNpb24KKwloZWxwZXJzLgorCSogY2lwaGVyL2Nhc3Q1LmMgKHJvbCk6IFJlbW92ZSwgdXNlIHJvbCBmcm9tIGJpdGhlbHAuCisJKEYxLCBGMiwgRjMpOiBGaXggdG8gdXNlIHJvbCBmcm9tIGJpdGhlbHAuCisJKGRvX2VuY3J5cHRfYmxvY2ssIGRvX2RlY3J5cHRfYmxvY2ssIGRvX2Nhc3Rfc2V0a2V5KTogVXNlIG5ldyBlbmRpYW4KKwljb252ZXJzaW9uIGhlbHBlcnMuCisJKiBjaXBoZXIvZGVzLmMgKFJFQURfNjRCSVRfREFUQSwgV1JJVEVfNjRCSVRfREFUQSk6IERpdHRvLgorCSogY2lwaGVyL21kNC5jICh0cmFuc2Zvcm0sIG1kNF9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL21kNS5jICh0cmFuc2Zvcm0sIG1kNV9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL3JtZDE2MC5jICh0cmFuc2Zvcm0sIHJtZDE2MF9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL3NhbHNhMjAuYyAoTEVfU1dBUDMyLCBMRV9SRUFEX1VJTlQzMik6IERpdHRvLgorCSogY2lwaGVyL3NjcnlwdC5jIChSRUFEX1VJTlQ2NCwgTEVfUkVBRF9VSU5UNjQsIExFX1NXQVAzMik6IERpdHRvLgorCSogY2lwaGVyL3NlZWQuYyAoR0VUVTMyLCBQVVRVMzIpOiBEaXR0by4KKwkqIGNpcGhlci9zZXJwZW50LmMgKGJ5dGVfc3dhcF8zMik6IFJlbW92ZS4KKwkoc2VycGVudF9rZXlfcHJlcGFyZSwgc2VycGVudF9lbmNyeXB0X2ludGVybmFsKQorCShzZXJwZW50X2RlY3J5cHRfaW50ZXJuYWwpOiBVc2UgbmV3IGVuZGlhbiBjb252ZXJzaW9uIGhlbHBlcnMuCisJKiBjaXBoZXIvc2hhMS5jICh0cmFuc2Zvcm0sIHNoYTFfZmluYWwpOiBEaXR0by4KKwkqIGNpcGhlci9zaGEyNTYuYyAodHJhbnNmb3JtLCBzaGEyNTZfZmluYWwpOiBEaXR0by4KKwkqIGNpcGhlci9zaGE1MTIuYyAoX190cmFuc2Zvcm0sIHNoYTUxMl9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL3N0cmlib2cuYyAodHJhbnNmb3JtLCBzdHJpYm9nX2ZpbmFsKTogRGl0dG8uCisJKiBjaXBoZXIvdGlnZXIuYyAodHJhbnNmb3JtLCB0aWdlcl9maW5hbCk6IERpdHRvLgorCSogY2lwaGVyL3R3b2Zpc2guYyAoSU5QQUNLLCBPVVRVTlBBQ0spOiBEaXR0by4KKwkqIGNpcGhlci93aGlybHBvb2wuYyAoYnVmZmVyX3RvX2Jsb2NrLCBibG9ja190b19idWZmZXIpOiBEaXR0by4KKwkqIGNvbmZpZ3VyZS5hYyAoZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXAzMik6IENoZWNrIGZvciBjb21waWxlcgorCXByb3ZpZGVkIF9fYnVpbHRpbl9ic3dhcDMyLgorCShnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDY0KTogQ2hlY2sgZm9yIGNvbXBpbGVyIHByb3ZpZGVkCisJX19idWlsdGluX2Jzd2FwNjQuCisKKwlnb3N0cjM0MTFfOTQ6IHNldCBiZXR0ZXIgYnVybiBzdGFjayBkZXB0aCBlc3RpbWF0ZS4KKwkqIGNpcGhlci9nb3N0MjgxNDcuYyAoX2djcnlfZ29zdF9lbmNfb25lKTogQWNjb3VudCBmdW5jdGlvbiBzdGFjayB0bworCWJ1cm4gc3RhY2sgZGVwdGguCisJKiBjaXBoZXIvZ29zdHIzNDExLTk0LmMgKG1heCk6IE5ldyBtYWNyby4KKwkoZG9faGFzaF9zdGVwLCB0cmFuc2Zvcm0pOiBSZXR1cm4gc3RhY2sgYnVybiBkZXB0aC4KKworCVVzZSBoYXNoIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcGFzc2luZyBidXJuIHN0YWNrIGRlcHRoLgorCSogY2lwaGVyL2dvc3RyNDMxMS05NC5jICh0cmFuc2Zvcm0pOiBSZXR1cm4gc3RhY2sgYnVybiBkZXB0aC4KKwkqIGNpcGhlci9oYXNoLWNvbW1vbi5jIChfZ2NyeV9tZF9ibG9ja193cml0ZSk6IFVzZSBzdGFjayBidXJuIGRlcHRoCisJcmV0dXJuZWQgYnkgJ2hkLT5id3JpdGUnLgorCSogY2lwaGVyL2hhc2gtY29tbW9uLmggKF9nY3J5X21kX2Jsb2NrX3dyaXRlX3QpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8KKwkndW5zaWduZWQgaW50Jy4KKwkoZ3J5X21kX2Jsb2NrX2N0eF90KTogUmVtb3ZlICdzdGFja19idXJuJy4KKwkqIGNpcGhlci9tZDQuYyAodHJhbnNmb3JtKTogUmV0dXJuIHN0YWNrIGJ1cm4gZGVwdGguCisJKG1kNF9maW5hbCk6IFVzZSBzdGFjayBidXJuIGRlcHRoIGZyb20gdHJhbnNmb3JtLgorCSogY2lwaGVyL21kNS5jICh0cmFuc2Zvcm0pOiBSZXR1cm4gc3RhY2sgYnVybiBkZXB0aC4KKwkobWQ1X2ZpbmFsKTogVXNlIHN0YWNrIGJ1cm4gZGVwdGggZnJvbSB0cmFuc2Zvcm0uCisJKiBjaXBoZXIvcm1kMTYwLmMgKHRyYW5zZm9ybSk6IFJldHVybiBzdGFjayBidXJuIGRlcHRoLgorCShybWQxNjBfZmluYWwpOiBVc2Ugc3RhY2sgYnVybiBkZXB0aCBmcm9tIHRyYW5zZm9ybS4KKwkqIGNpcGhlci9zaGExLmMgKHRyYW5zZm9ybSk6IFJldHVybiBzdGFjayBidXJuIGRlcHRoLgorCShzaGExX2ZpbmFsKTogVXNlIHN0YWNrIGJ1cm4gZGVwdGggZnJvbSB0cmFuc2Zvcm0uCisJKiBjaXBoZXIvc2hhMjU2LmMgKHRyYW5zZm9ybSk6IFJldHVybiBzdGFjayBidXJuIGRlcHRoLgorCShzaGEyNTZfZmluYWwpOiBVc2Ugc3RhY2sgYnVybiBkZXB0aCBmcm9tIHRyYW5zZm9ybS4KKwkqIGNpcGhlci9zaGE1MTIuYyAoX190cmFuc2Zvcm0sIHRyYW5zZm9ybSk6IFJldHVybiBzdGFjayBidXJuIGRlcHRoLgorCShzaGE1MTJfZmluYWwpOiBVc2Ugc3RhY2sgYnVybiBkZXB0aCBmcm9tIHRyYW5zZm9ybS4KKwkqIGNpcGhlci9zdHJpYm9nLmMgKHRyYW5zZm9ybTY0KTogUmV0dXJuIHN0YWNrIGJ1cm4gZGVwdGguCisJKiBjaXBoZXIvdGlnZXIuYyAodHJhbnNmb3JtKTogUmV0dXJuIHN0YWNrIGJ1cm4gZGVwdGguCisJKHRpZ2VyX2ZpbmFsKTogVXNlIHN0YWNrIGJ1cm4gZGVwdGggZnJvbSB0cmFuc2Zvcm0uCisKKwlNYWtlIFNUUklCT0cgdXNlIHRoZSBuZXcgX2djcnlfbWRfYmxvY2tfd3JpdGUgaGVscGVyLgorCSogY2lwaGVyL3N0cmlib2cuYyAoU1RSSUJPR19TVFJVQ1QpOiBBZGQgJ2JjdHgnIGFuZCByZW1vdmUgJ2J1ZicgYW5kCisJJ2NvdW50Jy4KKwkoc3RyaWJvZ19pbml0XzUxMik6IEluaXRpYWxpemUgJ2JjdHgnLgorCSh0cmFuc2Zvcm02NCk6IE5ldyBmdW5jdGlvbi4KKwkoc3RyaWJvZ193cml0ZSk6IFJlbW92ZS4KKwkoc3RyaWJvZ19maW5hbCk6IFVzZSBfZ2NyeV9tZF9ibG9ja193cml0ZSBhbmQgYmN0eC4KKwkoX2djcnlfZGlnZXN0X3NwZWNfc3RyaWJvZ18yNTYsIF9nY3J5X2RpZ2VzdF9zcGVjX3N0cmlib2dfNTEyKTogVXNlCisJX2djcnlfbWRfYmxvY2tfd3JpdGUuCisKKwlNYWtlIFNIQS01MTIgdXNlIHRoZSBuZXcgX2djcnlfbWRfYmxvY2tfd3JpdGUgaGVscGVyLgorCSogY2lwaGVyL2hhc2gtY29tbW9uLmMgKF9nY3J5X21kX2Jsb2NrX3dyaXRlKTogQ2hlY2sgdGhhdCBoZC0+YnVmIGlzCisJbGFyZ2UgZW5vdWdoLgorCSogY2lwaGVyL2hhc2gtY29tbW9uLmggKE1EX0JMT0NLX01BWF9CTE9DS1NJWkUsIE1EX05CTE9DS1NfVFlQRSk6IE5ldworCW1hY3Jvcy4KKwkoZ2NyeV9tZF9ibG9ja19jdHhfdCk6IFVzZSBhYm92ZSBtYWNyb3MgZm9yICduYmxvY2tzJyBhbmQgJ2J1ZicuCisJKiBjaXBoZXIvc2hhNTEyLmMgKFNIQTUxMl9TVEFURSk6IE5ldyBzdHJ1Y3QuCisJKFNIQTUxMl9DT05URVhUKTogQWRkICdiY3R4JyBhbmQgJ3N0YXRlJy4KKwkoc2hhNTEyX2luaXQsIHNoYTM4NF9pbml0KTogSW5pdGlhbGl6ZSAnYmN0eCcuCisJKF9fdHJhbnNmb3JtLCBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FybXY3X25lb24pOiBVc2UgU0hBNTEyX1NUQVRFIGZvcgorCSdoZCcuCisJKHRyYW5zZm9ybSk6IEZvciBub3csIGRvIG5vdCByZXR1cm4gYnVybiBzdGFjay4KKwkoc2hhNTEyX3dyaXRlKTogUmVtb3ZlLgorCShzaGE1MTJfZmluYWwpOiBVc2UgX2djcnlfbWRfYmxvY2tfd3JpdGUgYW5kIGJjdHguCisJKF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTUxMiwgX2djcnlfZGlnZXN0X3NwZWNfc2hhMzg0KTogVXNlCisJX2djcnlfbWRfYmxvY2tfd3JpdGUuCisKKzIwMTMtMDktMjAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJc2V4cDogQ2hhbmdlIGludGVybmFsIHZlcnNpb25zIHRvIGFsd2F5cyB1c2UgZ3BnX2Vycl9jb2RlX3QuCisJKiBzcmMvc2V4cC5jIChnY3J5X3NleHBfbmV3LCBnY3J5X3NleHBfY3JlYXRlLCBnY3J5X3NleHBfYnVpbGQpCisJKGdjcnlfc2V4cF9idWlsZF9hcnJheSwgZ2NyeV9zZXhwX2Nhbm9uX2xlbik6IENoYW5nZSBlcnJvciByZXR1cm4gdHlwZQorCWZyb20gZ3BnX2Vycm9yX3QgdG8gZ3BnX2Vycl9jb2RlX3QuICBSZW1vdmUgYWxsIGNhbGxzIHRvIGdwZ19lcnJvci4KKwkqIHNyYy92aXNpYmlsaXR5LmMgKGdjcnlfc2V4cF9uZXcsIGdjcnlfc2V4cF9jcmVhdGUsIGdjcnlfc2V4cF9zc2NhbikKKwkoZ2NyeV9zZXhwX2J1aWxkLCBnY3J5X3NleHBfYnVpbGRfYXJyYXksIGdjcnlfc2V4cF9jYW5vbl9sZW4pOiBNYXAKKwllcnJvciBjb2RlcyB2aWEgZ3BnX2Vycm9yLgorCSogY2lwaGVyL2RzYS5jLCBjaXBoZXIvZWNjLmMsIGNpcGhlci9lbGdhbWFsLmMsIGNpcGhlci9yc2EuYzogUmVtb3ZlCisJdXNlIGdwZ19lcnJfY29kZSB3cmFwcGVycy4KKworCXBrOiBNb3ZlIHMtZXhwIGNyZWF0aW9uIGZvciBnY3J5X3BrX2RlY3J5cHQgdG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvcHVia2V5LmMgKHNleHBfdG9fZW5jKTogUmVtb3ZlIFJFVF9NT0RFUk4gYXJnIGFuZCBtZXJnZSBpdAorCWludG8gRkxBR1MuCisJKGdjcnlfcGtfZGVjcnlwdCk6IE1vdmUgcmVzdWx0IHMtZXhwIGJ1aWxkaW5nIGludG8gdGhlIG1vZHVsZXMuCisJKiBzcmMvY2lwaGVyLXByb3RvLmggKGdjcnlfcGtfZGVjcnlwdF90KTogQWRkIHNvbWUgYXJncy4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2RlY3J5cHRfcmF3KTogQ2hhbmdlIHRvIHJldHVybiBhbiBzLWV4cC4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvcnNhLmMgKHJzYV9kZWNyeXB0KTogRGl0dG8uCisJKHJzYV9ibGluZCwgcnNhX3VuYmxpbmQpOiBNZXJnZSBpbnRvIHJzYV9kZWNyeXB0LiAgVGhpcyBzYXZlcyBzZXZlcmFsCisJZXh0cmEgTVBJIGFsbG9jYXRpb25zLgorCisJcGs6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisJKiBjaXBoZXIvcHVia2V5LmMgKF9nY3J5X3BrX2FsaWFzZWRfYWxnb19uYW1lKTogUmVtb3ZlCisKKzIwMTMtMDktMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQmVhdXRpZnkgZGVidWcgb3V0cHV0IG9mIHRoZSBwcmltZSBnZW5lcmF0b3IuCisJKiBjaXBoZXIvcHJpbWVnZW4uYzogQWRqdXN0IG91dHB1dCBvZiBsb2dfbXBpZHVtcCB0byByZWNlbnRseSBjaGFuZ2VkCisJbG9nX21waWR1bXAgY29kZSBjaGFuZ2VzLgorCisJcGs6IE1vdmUgcy1leHByIGNyZWF0aW9uIGZvciBnZW5rZXkgdG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvcHVia2V5LmMgKHB1YmtleV9nZW5lcmF0ZSk6IEZvbGQgaW50byBnY3J5X3BrX2dlbmtleQorCShnY3J5X3BrX2dlbmtleSk6IE1vdmUgcmVzdWx0IHMtZXhwIGNyZWF0aW9uIGludG8gdGhlIG1vZHVsZXMuCisJKiBjaXBoZXIvZHNhLmMgKGRzYV9nZW5lcmF0ZSk6IENyZWF0ZSByZXN1bHQgYXMgcy1leHAuCisJKiBjaXBoZXIvZWxnYW1hbC5jIChlbGdfZ2VuZXJhdGUpOiBEaXR0by4KKwkqIGNpcGhlci9yc2EuYyAocnNhX2dlbmVyYXRlKTogRGl0dG8uCisJKiBjaXBoZXIvZWNjLmMgKGVjY19nZW5lcmF0ZSk6IERpdHRvLgorCSogc3JjL2NpcGhlci1wcm90by5oIChwa19leHRfZ2VuZXJhdGVfdCk6IFJlbW92ZSB0eXBlCisJKGdjcnlfcGtfc3BlYyk6IGFuZCByZW1vdmUgZnJvbSBzdHJ1Y3QuCisKKwl0ZXN0czogQmVhdXRpZnkgc29tZSBkaWFnbm9zdGljcy4KKwkqIHRlc3RzL2JlbmNobWFyay5jIChlY2NfYmVuY2gpOiBQcmludCB0aGUga2V5IHNleHAgaW4gdmVyeSB2ZXJib3NlCisJbW9kZS4KKwkobWFpbik6IEFkZCBvcHRpb24gLS1way1jb3VudC4KKwkqIHRlc3RzL2tleWdlbi5jOiBBZGQgRWxnYW1hbCBnZW5lcmF0aW9uIGFuZCBpbXByb3ZlZCBkaWFnbm9zdGljcy4KKwkqIHRlc3RzL3QtZWQyNTUxOS5jIChjaGVja19lZDI1NTE5KTogUHJpbnQgcnVubmluZyBudW1iZXIgb2YgdGVzdHMKKwlkb25lLgorCisJc2V4cDogSW1wcm92ZSBwcmludGluZyBkYXRhIHJlcHJlc2VudGluZyBhIG5lZ2F0aXZlIG51bWJlci4KKwkqIHNyYy9zZXhwLmMgKHN1aXRhYmxlX2VuY29kaW5nKTogRGV0ZWN0IGEgbmVnYXRpdmUgbnVtYmVyLgorCisJcGs6IE1vdmUgUlNBIGVuY29kaW5nIGZ1bmN0aW9ucyB0byBhIG5ldyBmaWxlLgorCSogY2lwaGVyL3JzYS1jb21tb246IE5ldy4KKwkqIGNpcGhlci9wdWJrZXkuYyAocGtjczFfZW5jb2RlX2Zvcl9lbmNyeXB0aW9uKTogTW92ZSB0byByc2EtY29tbW9uLmMKKwlhbmQgcmVuYW1lIHRvIF9nY3J5X3JzYV9wa2NzMV9lbmNvZGVfZm9yX2VuYy4KKwkocGtjczFfZGVjb2RlX2Zvcl9lbmNyeXB0aW9uKTogTW92ZSB0byByc2EtY29tbW9uLmMgYW5kIHJlbmFtZSB0bworCV9nY3J5X3JzYV9wa2NzMV9kZWNvZGVfZm9yX2VuYy4KKwkocGtjczFfZW5jb2RlX2Zvcl9zaWduYXR1cmUpOiBNb3ZlIHRvIHJzYS1jb21tb24uYyBhbmQgcmVuYW1lIHRvCisJX2djcnlfcnNhX3BrY3MxX2VuY29kZV9mb3Jfc2lnLgorCShvYWVwX2VuY29kZSk6IE1vdmUgdG8gcnNhLWNvbW1vbi5jIGFuZCByZW5hbWUgdG8KKwlfZ2NyeV9yc2Ffb2FlcF9lbmNvZGUuCisJKG9hZXBfZGVjb2RlKTogTW92ZSB0byByc2EtY29tbW9uLmMgYW5kIHJlbmFtZSB0bworCV9nY3J5X3JzYV9vYWVwX2RlY29kZS4KKwkocHNzX2VuY29kZSk6IE1vdmUgdG8gcnNhLWNvbW1vbi5jIGFuZCByZW5hbWUgdG8gX2djcnlfcnNhX3Bzc19lbmNvZGUuCisJKHBzc192ZXJpZnkpOiBNb3ZlIHRvIHJzYS1jb21tb24uYyBhbmQgcmVuYW1lIHRvIF9nY3J5X3JzYV9wc3NfZGVjb2RlLgorCShvY3RldF9zdHJpbmdfZnJvbV9tcGksIG1nZjEpOiBNb3ZlIHRvIHJzYS1jb21tb24uYy4KKworCXBrOiBNb3ZlIHMtZXhwciBjcmVhdGlvbiBmb3Igc2lnbiBhbmQgZW5jcnlwdCB0byB0aGUgbW9kdWxlcy4KKwkqIGNpcGhlci9wdWJrZXkuYyAocHVia2V5X2VuY3J5cHQpOiBGb2xkIGludG8gZ2NyeV9wa19lbmNyeXB0LgorCShwdWJrZXlfZGVjcnlwdCk6IEZvbGQgaW50byBnY3J5X3BrX2RlY3J5cHQuCisJKHB1YmtleV9zaWduKTogRm9sZCBpbnRvIGdjcnlfcGtfc2lnbi4KKwkocHVia2V5X3ZlcmlmeSk6IEZvbGQgaW50byBnY3J5X3BrX3ZlcmlmeS4KKwkob2N0ZXRfc3RyaW5nX2Zyb21fbXBpKTogTWFrZSBpdCBhIHdyYXBwZXIgYW5kIGZhY3RvciBjb2RlIG91dCB0byAuLi4KKwkqIG1waS9tcGljb2Rlci5jIChfZ2NyeV9tcGlfdG9fb2N0ZXRfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvY2lwaGVyLmggKFBVQktFWV9GTEFHX0ZJWEVETEVOKTogTmV3LgorCSogY2lwaGVyL3B1YmtleS5jIChzZXhwX2RhdGFfdG9fbXBpKTogU2V0IGZsYWcgZm9yIHNvbWUgZW5jb2RpbmdzLgorCShnY3J5X3BrX2VuY3J5cHQpOiBTaW1wbHkgYnkgbW92aW5nIHRoZSBzLWV4cHIgZ2VuZXJhdGlvbiB0byB0aGUgbW9kdWxlcy4KKwkoZ2NyeV9wa19zaWduKTogRGl0dG8uCisJKiBjaXBoZXIvZHNhLmMgKGRzYV9zaWduKTogQ3JlYXRlIHMtZXhwci4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19lbmNyeXB0LCBlbGdfc2lnbik6IERpdHRvLgorCSogY2lwaGVyL3JzYS5jIChyc2FfZW5jcnlwdCwgcnNhX3NpZ24pOiBEaXR0by4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX3NpZ24sIGVjY19lbmNyeXB0X3Jhdyk6IERpdHRvLgorCShlY2RzYV9uYW1lcyk6IEFkZCAiZWRkc2EiLgorCSogdGVzdHMvdC1lZDI1NTE5LmMgKG9uZV90ZXN0KTogRXhwZWN0ICJlZGRzYSIgdG9rZW4uCisKKzIwMTMtMDktMTkgIERtaXRyeSBFcmVtaW4tU29sZW5pa292ICA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisKKwlGaXggU3RyaWJvZyBkaWdlc3Qgb24gYmlnZW5kaWFuIHBsYXRmb3Jtcy4KKwkqIGNpcGhlci9zdHJpYm9nLmMgKHN0cmlib2dfZmluYWwpOiBzd2FwIGJ5dGVzIGluIHRoZSByZXN1bHQgb2YgZGlnZXN0CisJY2FsY3VsYXRpb25zLgorCisyMDEzLTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXBrOiBTaW1wbGlmeSB0aGUgcHVibGljIGtleSBkaXNwYXRjaGVyIHB1YmtleS5jLgorCSogc3JjL2NpcGhlci1wcm90by5oIChnY3J5X3BrX3NwZWNfdCk6IEFkZCBmaWVsZHMgQUxHTyBhbmQgRkxBR1MuCisJKiBjaXBoZXIvZHNhLmMgKF9nY3J5X3B1YmtleV9zcGVjX2RzYSk6IFNldCB0aGVzZSBmaWVsZHMuCisJKiBjaXBoZXIvZWNjLmMgKF9nY3J5X3B1YmtleV9zcGVjX2VjZHNhKTogRGl0dG8uCisJKF9nY3J5X3B1YmtleV9zcGVjX2VjZGgpOiBEaXR0by4KKwkqIGNpcGhlci9yc2EuYyAoX2djcnlfcHVia2V5X3NwZWNfcnNhKTogRGl0dG8uCisJKiBjaXBoZXIvZWxnYW1hbC5jIChfZ2NyeV9wdWJrZXlfc3BlY19lbGcpOiBEaXR0bworCShfZ2NyeV9wdWJrZXlfc3BlY19lbGdfZSk6IE5ldy4KKwkqIGNpcGhlci9wdWJrZXkuYzogQ2hhbmdlIG1vc3QgY29kZSB0byByZXBsYWNlIHRoZSBmb3JtZXIgbW9kdWxlCisJc3lzdGVtIGJ5IGEgc2ltcGxlciBzeXN0ZW0gdG8gZ2FpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtcy4KKwkoZGlzYWJsZV9wdWJrZXlfYWxnbyk6IFNJbXBsaWZpZWQuICBOb3QgYW55bW9yZSB0aHJlYWQtc2FmZSwgdGhvdWdoLgorCisJcGs6IE1lcmdlIGV4dHJhc3BlY3Mgc3RydWN0IHdpdGggc3RhbmRhcmQgc3BlY3Mgc3RydWN0LgorCSogc3JjL2djcnlwdC1tb2R1bGUuaCAoZ2NyeV9wa19zcGVjX3QpOiBNb3ZlIHRoaXMgdHlwZWRlZiBhbmQgdGhlCisJY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0eXBlZGVmcyB0byAuLi4KKwkqIHNyYy9jaXBoZXItcHJvdG8uaDogaGVyZS4KKwkocGtfZXh0cmFfc3BlY190KTogUmVtb3ZlIHR5cGVkZWYgYW5kIG1lcmdlIGZpZWxkcyBpbnRvCisJZ2NyeV9wa19zcGVjX3QuCisJKiBjaXBoZXIvcnNhLmMsIGNpcGhlci9kc2EuYywgY2lwaGVyL2VsZy5jLCBjaXBoZXIvZWNjLmM6IERpdHRvLgorCSogY2lwaGVyL3B1YmtleS5jOiBDaGFuZ2UgYWNjb3JkaW5nbHkuCisJKiBzcmMvY2lwaGVyLmggKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfcnNhKTogUmVtb3ZlLgorCShfZ2NyeV9wdWJrZXlfZXh0cmFzcGVjX2RzYSk6IFJlbW92ZS4KKwkoX2djcnlfcHVia2V5X2V4dHJhc3BlY19lbGcpOiBSZW1vdmUuCisJKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfZWNkc2EpOiBSZW1vdmUuCisKKzIwMTMtMDktMTggIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlGaXggZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHJldHVybiB0eXBlIGZvciBHT1NUMjgxNDcuCisJKiBjaXBoZXIvZ29zdC5oIChfZ2NyeV9nb3N0X2VuY19vbmUpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8KKwkndW5zaWduZWQgaW50Jy4KKwkqIGNpcGhlci9nb3N0MjgxNDcuYyAobWF4KTogTmV3IG1hY3JvLgorCShnb3N0X2VuY3J5cHRfYmxvY2ssIGdvc3RfZGVjcnlwdF9ibG9jayk6IFJldHVybiBidXJuIHN0YWNrIGRlcHRoLgorCShfZ2NyeV9nb3N0X2VuY19vbmUpOiBSZXR1cm4gYnVybiBzdGFjayBkZXB0aCBmcm9tIGdvc3RfZW5jcnlwdF9ibG9jay4KKworMjAxMy0wOS0xOCAgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgIDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKworCWRvYzogZml4IGJ1aWxkaW5nIG9mIHBzIGFuZCBwZGYgZG9jdW1lbnRhdGlvbi4KKwkqIGRvYy9nY3J5cHQudGV4aSwgZG9jL2dwbC50ZXhpLCBkb2MvbGdwbC50ZXhpOiBmaXggdGV4aW5mbyBlcnJvcnMuCisKKwlBZGQgR09TVCBSIDM0LjExLTIwMTIgaW1wbGVtZW50YXRpb24gKFN0cmlib2cpCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllfTURfR09TVFIzNDExXzEyXzI1NikKKwkoR0NSWV9NRF9HT1NUUjM0MTFfMTJfNTEyKTogTmV3LgorCSogY2lwaGVyL3N0cmlib2cuYzogTmV3LgorCSogY29uZmlndXJlLmFjIChhdmFpbGFibGVfZGlnZXN0c182NCk6IEFkZCBzdHJpYm9nLgorCSogc3JjL2NpcGhlci5oOiBEZWNsYXJlIFN0cmlib2cgZGVjbGFyYXRpb25zLgorCSogY2lwaGVyL21kLmM6IFJlZ2lzdGVyIFN0cmlib2cgZGlnZXN0LgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfZGlnZXN0cykgQWRkIDQgdGVzdGNhc2VzIGZvciBTdHJpYm9nIGZyb20KKwlzdGFuZGFyZC4KKwkqIGRvYy9nY3J5cHQudGV4aTogRG9jdW1lbnQgbmV3IGNvbnN0YW50cy4KKworCUFkZCBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBHT1NUIFIgMzQuMTEtOTQgbWVzc2FnZSBkaWdlc3QuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllfTURfR09TVFIzNDExXzk0KTogTmV3LgorCSogY2lwaGVyL2dvc3RyMzQxMS05NC5jOiBOZXcuCisJKiBjb25maWd1cmUuYWMgKGF2YWlsYWJsZV9kaWdlc3RzKTogQWRkIGdvc3RyMzQxMS05NC4KKwkqIHNyYy9jaXBoZXIuaDogQWRkIGdvc3RyMzQxMS05NCBkZWZpbml0aW9ucy4KKwkqIGNpcGhlci9tZC5jOiBSZWdpc3RlciBHT1NUIFIgMzQuMTEtOTQuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19kaWdlc3RzKTogQWRkIDQgdGVzdHMgZm9yIEdPU1QgUiAzNC4xMS05NAorCSAgaGFzaCBhbGdvLiBUd28gYXJlICBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBpdHNlbGYsIHR3byBvdGhlciBhcmUKKwkgIG1vcmUgb3IgbGVzcyBjb21tb24gdGVzdHMgLSBhbiBlbXB0eSBzdHJpbmcgYW4gZXhjbGFtYXRpb24gbWFyay4KKwkqIGRvYy9nY3J5cHQudGV4aTogQWRkIGFuIGVudHJ5IGRlc2NyaWJpbmcgR09TVCBSIDM0LjExLTk0IHRvIHRoZSBNRAorCSAgYWxnb3JpdGhtcyB0YWJsZS4KKworCVNlcGFyYXRlIGNvbW1vbiBtZCBibG9jayBjb2RlLgorCSogY2lwaGVyL2hhc2gtY29tbW9uLmMgKF9nY3J5X21kX2Jsb2NrX3dyaXRlKTogTmV3IGZ1bmN0aW9uIHRvIGhhbmRsZQorCWJsb2NrIG1kIG9wZXJhdGlvbnMuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBsaW1pdGVkIHRvIDY0IGJ5dGUKKwlidWZmZXIgYW5kIHUzMiBibG9jayBjb3VudGVyLgorCisJKiBjaXBoZXIvbWQ0LmMsIGNpcGhlci9tZDUuYywgY2lwaGVyL3JtZC5oLCBjaXBoZXIvcm1kMTYwLmMKKwkqY2lwaGVyL3NoYTEuYywgY2lwaGVyL3NoYTI1Ni5jLCBjaXBoZXIvdGlnZXIuYzogQ29udmVydCB0byB1c2UKKwlfZ2NyeV9tZF9ibG9ja193cml0ZS4KKworCUFkZCBsaW1pdGVkIGltcGxlbWVudGF0aW9uIG9mIEdPU1QgMjgxNDctODkgY2lwaGVyLgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZX0NJUEhFUl9HT1NUMjgxNDcpOiBOZXcuCisJKiBjaXBoZXIvZ29zdC5oLCBjaXBoZXIvZ29zdDI4MTQ3LmM6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYyAoYXZhaWxhYmxlX2NpcGhlcnMpOiBBZGQgZ29zdDI4MTQ3LgorCSogc3JjL2NpcGhlci5oOiBBZGQgZ29zdDI4MTQ3IGRlZmluaXRpb25zLgorCSogY2lwaGVyL2NpcGhlci5jOiBSZWdpc3RlciBnb3N0MjgxNDcuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19jaXBoZXJzKTogRW5hYmxlIHNpbXBsZSB0ZXN0IGZvciBnb3N0MjgxNDcuCisJKiBkb2MvZ2NyeXB0LnRleGk6IGRvY3VtZW50IEdDUllfQ0lQSEVSX0dPU1QyODE0Ny4KKworMjAxMy0wOS0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwllY2M6IEFkZCBFZDI1NTE5IGtleSBnZW5lcmF0aW9uIGFuZCBwcmVwYXJlIGZvciBvcHRpbWl6YXRpb25zLgorCSogc3JjL21waS5oIChlbnVtIGVjY19kaWFsZWN0cyk6IE5ldy4KKwkqIHNyYy9lYy1jb250ZXh0LmggKG1waV9lY19jdHhfcyk6IEFkZCBmaWVsZCBESUFMRUNULgorCSogY2lwaGVyL2VjYy1jb21tb24uaCAoZWxsaXB0aWNfY3VydmVfdCk6IERpdHRvLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoZWNjX2RvbWFpbl9wYXJtc190KTogRGl0dG8uCisJKGRvbWFpbl9wYXJtcyk6IEFkZCBkaWFsZWN0IHZhbHVlcy4KKwkoX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUpOiBTZXQgZGlhbGVjdC4KKwkoX2djcnlfZWNjX2dldF9jdXJ2ZSk6IERpdHRvLgorCShfZ2NyeV9tcGlfZWNfbmV3KTogRGl0dG8uCisJKF9nY3J5X2VjY19nZXRfcGFyYW0pOiBVc2UgRUNDX0RJQUxFQ1RfU1RBTkRBUkQgZm9yIG5vdy4KKwkqIGNpcGhlci9lY2MtbWlzYy5jIChfZ2NyeV9lY2NfY3VydmVfY29weSk6IENvcHkgZGlhbGVjdC4KKwkoX2djcnlfZWNjX2RpYWxlY3Qyc3RyKTogTmV3LgorCSogbXBpL2VjLmMgKGVjX3BfaW5pdCk6IEFkZCBhcmcgRElBTEVDVC4KKwkoX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3KTogRGl0dG8uCisJKF9nY3J5X21waV9lY19wX25ldyk6IERpdHRvLgorCisJKiBtcGkvbXBpdXRpbC5jIChnY3J5X21waV9zZXRfb3BhcXVlKTogU2V0IHRoZSBzZWN1cmUgZmxhZy4KKwkoX2djcnlfbXBpX3NldF9vcGFxdWVfY29weSk6IE5ldy4KKworCSogY2lwaGVyL2VjYy1taXNjLmMgKF9nY3J5X2VjY19vczJlYyk6IFRha2UgY2FyZSBvZiBhbiBvcGFxdWUgTVBJLgorCSogY2lwaGVyL2VjYy5jIChlZGRzYV9nZW5lcmF0ZV9rZXkpOiBOZXcuCisJKGdlbmVyYXRlX2tleSk6IFJlbmFtZSB0byBuaXN0X2dlbmVyYXRlX2tleSBhbmQgZmFjdG9yIHNvbWUgY29kZSBvdXQKKwl0byAuLi4KKwkoZWNjX2dlbmVyYXRlX2V4dCk6IGhlcmUuICBEaXZlcnQgdG8gZWRkc2FfZ2VuZXJhdGVfa2V5IGlmIGRlc2lyZWQuCisJKGVkZHNhX2RlY29kZXBvaW50KTogVGFrZSBjYXJlIG9mIGFuIG9wYXF1ZSBNUEkuCisJKGVjY19jaGVja19zZWNyZXRfa2V5KTogRGl0dG8uCisJKGVjY19zaWduKTogRGl0dG8uCisJKiBjaXBoZXIvcHVia2V5LmMgKHNleHBfZWxlbWVudHNfZXh0cmFjdF9lY2MpOiBTdG9yZSBwdWJsaWMgYW5kIHNlY3JldAorCWtleSBhcyBvcGFxdWUgTVBJcy4KKwkoZ2NyeV9wa19nZW5rZXkpOiBBZGQgdGhlIGN1cnZlX25hbWUgYWxzbyB0byB0aGUgcHJpdmF0ZSBrZXkgcGFydCBvZgorCXRoZSByZXN1bHQuCisKKwkqIHRlc3RzL2JlbmNobWFyay5jIChlY2NfYmVuY2gpOiBTdXBwb3J0IEVkMjU1MTkuCisJKG1haW4pOiBBZGQgb3B0aW9uIC0tZGVidWcuCisJKiB0ZXN0cy9jdXJ2ZXMuYyAoc2FtcGxlX2tleV8yKTogTWFrZSBzdXJlIHRoYXQgUCBhbmQgTiBhcmUgcG9zaXRpdmUuCisJKiB0ZXN0cy9rZXlnZW4uYyAoc2hvdyk6IE5ldy4KKwkoY2hlY2tfZWNjX2tleXMpOiBTdXBwb3J0IEVkMjU1MTkuCisKKzIwMTMtMDktMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJbXBpOiBTdXBwb3J0IHByaW50aW5nIG9mIG5lZ2F0aXZlIG51bWJlcnMuCisJKiBtcGkvbXBpY29kZXIuYyAodHdvY29tcGwsIG9uZWNvbXBsKTogTmV3LgorCShnY3J5X21waV9wcmludCk6IFVzZSBpdCBmb3IgU1REIGFuZCBTU0guCisJKGdjcnlfbXBpX3NjYW4pOiBVc2UgaXQgZm9yIFNURCBhbmQgU1NILiAgQWx3YXlzIHNldCBOU0NBTk5FRC4KKwkoZ2NyeV9tcGlfYXByaW50KTogQ2xlYXIgdGhlIGV4dHJhIGFsbG9jYXRlZCBieXRlLgorCSogdGVzdHMvdC1jb252ZXJ0LmMgKHNob3doZXgsIHNob3dtcGkpOiBOZXcuCisJKG1waTJiaXRzdHJfbmx6KTogTmV3LgorCShjaGVja19mb3JtYXRzKTogTmV3LgorCShtYWluKTogQ2FsbCBuZXcgdGVzdC4KKworMjAxMy0wOS0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlGaXggYnVnIGluIF9nY3J5X21waV90ZGl2X3FfMmV4cC4KKwkqIG1waS9tcGktaW50ZXJuYWwuaCAoTVBOX0NPUFlfSU5DUik6IE1ha2UgaXQgd29yay4KKworCWVjYzogSW1wbGVtZW50IEN1cnZlIEVkMjU1MTkgc2lnbmluZyBhbmQgdmVyaWZpY2F0aW9uLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoZG9tYWluX3Bhcm1zKTogQWRkIGN1cnZlICJFZDI1NTE5Ii4KKwkqIGNpcGhlci9lY2MuYyAocmV2ZXJzZV9idWZmZXIpOiBOZXcuCisJKGVkZHNhX2VuY29kZW1waSk6IE5ldy4KKwkoZWRkc2FfZW5jb2RlcG9pbnQpOiBOZXcuCisJKGVkZHNhX2RlY29kZXBvaW50KTogTmV3LgorCShzaWduX2VkZHNhKTogSW1wbGVtZW50LgorCSh2ZXJpZnlfZWRkc2EpOiBJbXBsZW1lbnQuCisJKGVjY19zaWduKTogSW5pdCB1bnVzZWQgUS4gIFBhc3MgcHVibGljIGtleSB0byBzaWduX2VkZHNhLgorCShlY2NfdmVyaWZ5KTogSW5pdCBway5RIGlmIG5vdCB1c2VkLiAgUGFzcyBwdWJsaWMga2V5IHZlcmJhdGltIHRvCisJdmVyaWZ5X2VkZHNhLgorCSogY2lwaGVyL3B1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3QpOiBBZGQgYXJnIE9QQVFVRS4gIENoYW5nZSBhbGwKKwljYWxsZXJzIHRvIHBhc3MgMC4KKwkoc2V4cF90b19zaWcpOiBBZGQgYXJnIE9QQVFVRSBhbmQgcGFzcyBpdCB0byBzZXhwX2VsZW1lbnRzX2V4dHJhY3QuCisJKHNleHBfZGF0YV90b19tcGkpOiBBbGxvdyBmb3IgYSB6ZXJvIGxlbmd0aCAidmFsdWUiLgorCShnY3J5X3BrX3ZlcmlmeSk6IFJlb3JkZXIgcGFyYW1ldGVyIHByb2Nlc3NpbmcuICBQYXNzIE9QQVFVRSBmbGFnIGFzCisJcmVxdWlyZWQuCisJKiBtcGkvZWMuYyAoZWNfaW52bSk6IFByaW50IGEgd2FybmluZyBpZiB0aGUgaW52ZXJzZSBkb2VzIG5vdCBleGlzdC4KKwkoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUpOiBJbXBsZW1lbnQgZm9yIG91ciBUd2lzdGVkIEVkd2FyZHMgY3VydmUKKwltb2RlbC4KKwkoZHVwX3BvaW50X3R3aXN0ZWRlZHdhcmRzKTogSW1wbGVtZW50LgorCShhZGRfcG9pbnRzX3R3aXN0ZWRlZHdhcmRzKTogSW1wbGVtZW50LgorCShfZ2NyeV9tcGlfZWNfbXVsX3BvaW50KTogU3VwcG9ydCBUd2lzdGVkIEVkd2FyZHMuCisKKwkqIG1waS9tcGljb2Rlci5jIChkb19nZXRfYnVmZmVyKTogQWRkIGFyZyBGSUxMX0xFLgorCShfZ2NyeV9tcGlfZ2V0X2J1ZmZlcik6IERpdHRvLiAgQ2hhbmdlIGFsbCBjYWxsZXJzLgorCShfZ2NyeV9tcGlfZ2V0X3NlY3VyZV9idWZmZXIpOiBEaXR0by4KKworCSogc3JjL3NleHAuYyAoX2djcnlfc2V4cF9udGhfb3BhcXVlX21waSk6IE5ldy4KKworCSogdGVzdHMvdC1lZDI1NTE5LmM6IE5ldy4KKwkqIHRlc3RzL3QtZWQyNTUxOS5pbnA6IE5ldy4KKwkqIHRlc3RzL3QtbXBpLXBvaW50LmMgKGJhc2ljX2VjX21hdGhfc2ltcGxpZmllZCk6IFByaW50IHNvbWUgb3V0cHV0CisJb25seSBpbiBkZWJ1ZyBtb2RlLgorCSh0d2lzdGVkZWR3YXJkc19tYXRoKTogTmV3IHRlc3QuCisJKG1haW4pOiBDYWxsIG5ldyB0ZXN0LgorCisJbXBpOiBBZGQgaW50ZXJuYWwgY29udmVuaWVuY2UgZnVuY3Rpb24uCisJKiBtcGkvbXBpdXRpbC5jIChfZ2NyeV9tcGlfZ2V0X29wYXF1ZV9jb3B5KTogTmV3LgorCisJbXBpOiBBZGQgZGVidWcgZnVuY3Rpb24gdG8gcHJpbnQgYSBwb2ludC4KKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfcG9pbnRfbG9nKTogTmV3LgorCSogc3JjL21waS5oIChsb2dfcHJpbnRwbnQpOiBuZXcgbWFjcm8uCisKKwl0ZXN0czogRmFjdG9yIHRpbWUgbWVhc3VyZW1lbnQgY29kZSBvdXQuCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAoc3RhcnRlZF9hdCwgc3RvcHBlZF9hdCwgc3RhcnRfdGltZXIsIHN0b3BfdGltZXIpCisJKGVsYXBzZWQgdGltZSk6IEZhY3RvciBvdXQgdG8gLi4KKwkqIHRlc3RzL3N0b3B3YXRjaC5oOiBuZXcgZmlsZS4KKworMjAxMy0wOS0xMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlGaXggX2djcnlfbG9nX3ByaW50bXBpIHRvIHByaW50IDAwIGluc3RlYWQgb2YgYSBzb2xlIHNpZ24uCisJKiBzcmMvbWlzYy5jOiBTcGVjaWFsIGNhc2UgYW4gbXBpIGxlbmd0aCBvZiAwLgorCisyMDEzLTA5LTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVN0cmVhbWxpbmUgdGhlIHVzZSBvZiB0aGUgaW50ZXJuYWwgbXBpIGFuZCBoZXggZGVidWcgZnVuY3Rpb25zLgorCSogbXBpL21waWNvZGVyLmMgKGdjcnlfbXBpX2R1bXApOiBSZW1vdmUuCisJKF9nY3J5X2xvZ19tcGlkdW1wKTogUmVtb3ZlLgorCSogc3JjL21pc2MuYyAoX2djcnlfbG9nX3ByaW50aGV4KTogRmFjdG9yIGFsbCBjb2RlIG91dCB0byAuLi4KKwkoZG9fcHJpbnRoZXgpOiBuZXcuICBBZGQgbGluZSB3cmFwcGluZyBhIGFuZCBjb21wYWN0IHByaW50aW5nLgorCShfZ2NyeV9sb2dfcHJpbnRtcGkpOiBOZXcuCisJKiBzcmMvbXBpLmggKGxvZ19tcGlkdW1wKTogUmVtb3ZlIG1hY3JvLgorCSogc3JjL2cxMGxpYi5oIChsb2dfbXBpZHVtcCk6IEFkZCBjb21wYXRpYmlsaXR5IG1hY3JvLgorCShsb2dfcHJpbnRtcGkpOiBOZXcgbWFjcm8KKwkqIHNyYy92aXNpYmlsaXR5LmMgKGdjcnlfbXBpX2R1bXApOiBDYWxsIF9nY3J5X2xvZ19wcmludG1waS4KKwkqIGNpcGhlci9wcmltZWdlbi5jIChwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCk6IFJlcGxhY2UgZ2NyeV9tcGlfZHVtcAorCWJ5IGxvZ19wcmludG1waS4KKwkoZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IpOiBEaXR0by4KKwkqIGNpcGhlci9wdWJrZXkuYzogUmVtb3ZlIGV4dHJhIGNvbG9ucyBmcm9tIGxvZ19tcGlkdW1wIGNhbGwuCisJKiBjaXBoZXIvcnNhLmMgKHN0cm9uZ2VyX2tleV9jaGVjayk6IFVzZSBsb2dfcHJpbnRtcGkuCisKKzIwMTMtMDktMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJbWQ6IEFkZCBmdW5jdGlvbiBnY3J5X21kX2hhc2hfYnVmZmVycy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoZ2NyeV9idWZmZXJfdCk6IG5ldy4KKwkoZ2NyeV9tZF9oYXNoX2J1ZmZlcnMpOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5jLCBzcmMvdmlzaWJpbGl0eS5oOiBBZGQgd3JhcHBlciBmb3IgbmV3IGZ1bmN0aW9uLgorCSogc3JjL2xpYmdjcnlwdC5kZWYsIHNyYy9saWJnY3J5cHQudmVyczogRXhwb3J0IG5ldyBmdW5jdGlvbi4KKwkqIGNpcGhlci9tZC5jIChnY3J5X21kX2hhc2hfYnVmZmVycyk6IE5ldy4KKwkqIGNpcGhlci9zaGExLmMgKF9nY3J5X3NoYTFfaGFzaF9idWZmZXJzKTogTmV3LgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfb25lX21kX211bHRpKTogTmV3LgorCShjaGVja19kaWdlc3RzKTogUnVuIHRoYXQgdGVzdC4KKwkqIHRlc3RzL2htYWMuYyAoY2hlY2tfaG1hY19tdWx0aSk6IE5ldy4KKwkobWFpbik6IFJ1biB0aGF0IHRlc3QuCisKKwltZDogRml4IFdoaXJscG9vbCBmbGF3LgorCSogY2lwaGVyL3doaXJscG9vbC5jICh3aGlybHBvb2xfYWRkKTogUmVtb3ZlIHNob3J0Y3V0IHJldHVybiBzbyB0aGF0CisJYnl0ZSBjb3VudGVyIGlzIGFsd2F5cyBwcm9wZXJseSB1cGRhdGVkLgorCisyMDEzLTA5LTA3ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJRml4IHN0YXRpYyBidWlsZCBvbiBBTUQ2NC4KKwkqIGNpcGhlci9yaWpuZGFlbC1hbWQ2NC5TOiBDb3JyZWN0ICdSSVAnIG1hY3JvIGZvciBub24tUElDIGJ1aWxkLgorCisJc2NyeXB0OiBmaXggZm9yIGJpZy1lbmRpYW4gc3lzdGVtcy4KKwkqIGNpcGhlci9zY3J5cHQuYyAoX3NhbHNhMjBfY29yZSk6IEZpeCBlbmRpYW5lc3MgaXNzdWVzLgorCisyMDEzLTA5LTA3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVVzZSBnY2MgInVudXNlZCIgYXR0cmlidXRlIG9ubHkgd2l0aCBnY2MgPj0gMy41LgorCSogc3JjL2cxMGxpYi5oIChHQ0NfQVRUUl9VTlVTRUQpOiBGaXggZ2NjIHZlcnNpb24gZGV0ZWN0aW9uLgorCisyMDEzLTA5LTA3ICBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiAgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorCisJQWRkIHN1cHBvcnQgZm9yIFNhbHNhMjAvMTIgLSAxMiByb3VuZCB2ZXJzaW9uIG9mIFNhbHNhMjAuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllfQ0lQSEVSX1NBTFNBMjBSMTIpOiBOZXcuCisJKiBzcmMvc2Fsc2EyMC5jIChzYWxzYTIwX2NvcmUsIHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0pOiBBZGQgc3VwcG9ydAorCWZvciByZWR1Y2VkIHJvdW5kIHZlcnNpb25zLgorCSAgKHNhbHNhMjByMTJfZW5jcnlwdF9zdHJlYW0sIF9nY3J5X2NpcGhlcl9zcGVjX3NhbHNhMjByMTIpOiBJbXBsZW1lbnQKKwlTYWxzYTIwLzEyIC0gYSAxMiByb3VuZCB2ZXJzaW9uIG9mIFNhbHNhMjAgc2VsZWN0ZWQgYnkgZVN0cmVhbS4KKwkqIHNyYy9jaXBoZXIuaDogRGVjbHNhcmUgU2Fsc2EyMC8xMiBkZWZpbml0aW9uLgorCSogY2lwaGVyL2NpcGhlci5jOiBSZWdpc3RlciBTYWxzYTIwLzEyCisJKiB0ZXN0cy9iYXNpYy5jOiAoY2hlY2tfc3RyZWFtX2NpcGhlciwgY2hlY2tfc3RyZWFtX2NpcGhlcl9sYXJnZV9ibG9jayk6CisJUG9wdWxhdGUgU2Fsc2EyMC8xMiB0ZXN0cyB3aXRoIHRlc3QgdmVjdG9ycyBmcm9tIGVjcnlwdAorCShjaGVja19jaXBoZXJzKTogQWRkIHNpbXBsZSB0ZXN0IGZvciBTYWxzYTIwLzEyCisKKzIwMTMtMDktMDcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLWFtZDY0LWFzLWZlYXR1cmUtZGV0ZWN0aW9uLgorCSogY29uZmlndXJlLmFjOiBJbXBsZW1lbnQgbmV3IGRpc2FibGUgZmxhZy4KKworCW1waTogSW1wcm92ZSBzdXBwb3J0IGZvciBub24tV2VpZXJzdHJhc3Mgc3VwcG9ydC4KKwkqIG1waS9lYy5jIChlY19wX2luaXQpOiBBZGQgYXJncyBNT0RFTCBhbmQgUC4gIENoYW5nZSBhbGwgY2FsbGVycy4KKwkoX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3KTogRGl0dG8uCisJKF9nY3J5X21waV9lY19wX25ldyk6IERpdHRvLgorCSogY2lwaGVyL2VjYy1jdXJ2ZXMuYyAoX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUpOiBSZXR1cm4KKwlHUEdfRVJSX1VOS05PV05fQ1VSVkUgaW5zdGVhZCBvZiBpbnZhbGlkIHZhbHVlLiAgSW5pdCBjdXJ2ZSBtb2RlbC4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX3ZlcmlmeSwgZWNjX2VuY3J5cHRfcmF3KTogRGl0dG8uCisJKiBjaXBoZXIvcHVia2V5LmMgKHNleHBfZGF0YV90b19tcGkpOiBGaXggRUREU0EgZmxhZyBlcnJvciBjaGVja2luZy4KKworCW1waTogQWRkIGdjcnlfbXBpX2VjX2N1cnZlX3BvaW50LgorCSogbXBpL2VjLmMgKF9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCk6IE5ldy4KKwkoZWNfcG93bSk6IFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUuCisJKiBzcmMvdmlzaWJpbGl0eS5jLCBzcmMvdmlzaWJpbGl0eS5jOiBBZGQgd3JhcHBlcnMuCisJKiBzcmMvbGliZ2NyeXB0LmRlZiwgc3JjL2xpYmdjcnlwdC52ZXJzOiBFeHBvcnQgdGhlbS4KKworCW1waTogQWRkIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSBzaWduLgorCSogc3JjL2djcnlwdC5oLmluIChnY3J5X21waV9pc19uZWcpOiBOZXcuCisJKGdjcnlfbXBpX25lZywgZ2NyeV9tcGlfYWJzKTogTmV3LgorCSogbXBpL21waXV0aWwuYyAoX2djcnlfbXBpX2lzX25lZyk6IE5ldy4KKwkoX2djcnlfbXBpX25lZywgX2djcnlfbXBpX2Ficyk6IE5ldy4KKwkqIHNyYy92aXNpYmlsaXR5LmMsIHNyYy92aXNpYmlsaXR5Lmg6IEFkZCB3cmFwcGVycy4KKwkqIHNyYy9saWJnY3J5cHQuZGVmLCBzcmMvbGliZ2NyeXB0LnZlcnM6IEV4cG9ydCB0aGVtLgorCSogc3JjL21waS5oIChtcGlfaXNfbmVnKTogTmV3LiAgUmVuYW1lIG9sZCBtYWNybyB0byBtcGlfaGFzX3NpZ24uCisJKiBtcGkvbXBpLW1vZC5jIChfZ2NyeV9tcGlfbW9kX2JhcnJldHQpOiBVc2UgbXBpX2hhc19zaWduLgorCSogbXBpL21waS1tcG93LmMgKGNhbGNfYmFycmV0dCk6IERpdHRvLgorCSogY2lwaGVyL3ByaW1lZ2VuLmMgKF9nY3J5X2Rlcml2ZV94OTMxX3ByaW1lKTogRGl0dG8KKwkqIGNpcGhlci9yc2EuYyAoc2VjcmV0KTogRGl0dG8uCisKKzIwMTMtMDktMDYgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlUdW5lIGFybXY2IG1waSBhc3NlbWJseS4KKwkqIG1waS9hcm12Ni9tcGloLW11bDEuUzogVHVuZSBhc3NlbWJseSBmb3IgQ29ydGV4LUE4LgorCSogbXBpL2FybXY2L21waWgtbXVsMi5TOiBEaXR0by4KKwkqIG1waS9hcm12Ni9tcGloLW11bDMuUzogRGl0dG8uCisKKzIwMTMtMDktMDUgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlDaGFuZ2UgX2djcnlfYnVybl9zdGFjayB0YWtlIGJ1cm4gZGVwdGggYXMgdW5zaWduZWQgaW50ZWdlci4KKwkqIHNyYy9taXNjLmMgKF9nY3J5X2J1cm5fc3RhY2spOiBDaGFuZ2UgdG8gaGFuZGxlICd1bnNpZ25lZCBpbnQnIGJ5dGVzLgorCisJbXBpY2FsYzogZml4IGJ1aWxkaW5nIG9uIGxpbnV4IGFuZCB3aW4zMi4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobXBpY2FsYyk6IEFkanVzdCBDRkxBR1MgYW5kIExEQURELgorCisyMDEzLTA5LTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUNoYW5nZSBtcGljYWxjIHRvIHVzZSBMaWJnY3J5cHQgYW5kIGluc3RhbGwgaXQuCisJKiBzcmMvbXBpY2FsYy5jOiBNYWtlIHVzZSBvZiBnY3J5XyBmdW5jdGlvbnMuCisJKE1QSUNBTENfVkVSU0lPTik6IE5ldy4gIFNldCB0byAyLjAuCisJKHN0cnVzYWdlKTogUmVtb3ZlLgorCShzY2FuX21waSk6IE5ldy4gIFJlcGxhY2VzIG1waV9mcm9tc3RyLgorCShwcmludF9tcGkpOiBOZXcuICBSZXBsYWNlcyBtcGlfcHJpbnQuCisJKG15X2dldGMpOiBOZXcuCisJKHByaW50X2hlbHApOiBOZXcuCisJKG1haW4pOiBVc2Ugc2ltcGxlIG9wdGlvbiBwYXJzZXIgYW5kIHByaW50IHZlcnNpb24gaW5mby4KKwkqIHNyYy9NYWtlZmlsZS5hbSAoYmluX1BST0dSQU1TKTogQWRkIG1waWNhbGMuCisJKG1waWNhbGNfU09VUkNFUywgbXBpY2FsY19DRkxBR1MsIG1waWNhbGNfTERBREQpOiBOZXcuCisKKwlBZGQgbXBpY2FsYy5jIHRvIGhlbHAgd2l0aCB0ZXN0aW5nLgorCSogc3JjL21waWNhbGMuYzogVGFrZSBmcm9tIEdudVBHIDEuNAorCisJUHJlcGFyZSBzdXBwb3J0IGZvciBFZERTQS4KKwkqIHNyYy9jaXBoZXIuaCAoUFVCS0VZX0ZMQUdfRUREU0EpOiBOZXcuCisJKiBjaXBoZXIvcHVia2V5LmMgKHB1YmtleV92ZXJpZnkpOiBSZXBhbGNlIGFyZ3MgQ01QIGFuZCBPUEFRVUVWIGJ5CisJQ1RYLiAgUGFzcyBmbGFncyBhbmQgaGFzaCBhbGdvIHRvIHRoZSB2ZXJpZnkgZnVuY3Rpb24uICBDaGFuZ2UgYWxsCisJdmVyaWZ5IGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlc2UgYXJncy4KKwkoc2V4cF9kYXRhX3RvX21waSk6IEltcGxlbWVudCBuZXcgZmxhZyAiZWRkc2EiLgorCShnY3J5X3BrX3ZlcmlmeSk6IFBhc3MgQ1RYIGluc3RlYWQgb2YgdGhlIGNvbXBhcmUgZnVuY3Rpb24gdG8KKwlwdWJrZXlfdmVyaWZ5LgorCSogY2lwaGVyL2VjYy5jIChzaWduKTogUmVuYW1lIHRvIHNpZ25fZWNkc2EuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCisJKHZlcmlmeSk6IFJlbmFtZSB0byB2ZXJpZnlfZWNkc2EuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCisJKHNpZ25fZWRkc2EsIHZlcmlmeV9lZGRzYSk6IE5ldyBzdHViIGZ1bmN0aW9ucy4KKwkoZWNjX3NpZ24pOiBEaXZlcnQgdG8gc2lnbl9lY2RzYSBvciBzaWduX2VkZHNhLgorCShlY2NfdmVyaWZ5KTogRGl2ZXJ0IHRvIHZlcmlmeV9lY2RzYSBvciB2ZXJpZnlfZWRkc2EuCisKKwlQcmVwYXJlIHN1cHBvcnQgZm9yIG5vbi1XZWllcnN0cmFzcyBFQyBlcXVhdGlvbnMuCisJKiBzcmMvbXBpLmggKGdjcnlfbXBpX2VjX21vZGVscyk6IE5ldy4KKwkqIHNyYy9lYy1jb250ZXh0LmggKG1waV9lY19jdHhfcyk6IEFkZCBNT0RFTC4KKwkqIGNpcGhlci9lY2MtY29tbW9uLmggKGVsbGlwdGljX2N1cnZlX3QpOiBEaXR0by4KKwkqIGNpcGhlci9lY2MtY3VydmVzLmMgKGVjY19kb21haW5fcGFybXNfdCk6IERpdHRvLgorCShkb21haW5fcGFybXMpOiBNYXJrIGFscyBhcyBXZWllcnN0cmFzcy4KKwkoX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUpOiBDaGVjayBtb2RlbC4KKwkoX2djcnlfZWNjX2dldF9jdXJ2ZSk6IFNldCBtb2RlbCB0byBXZWllcnN0cmFzcy4KKwkqIGNpcGhlci9lY2MtbWlzYy5jIChfZ2NyeV9lY2NfbW9kZWwyc3RyKTogTmV3LgorCSogY2lwaGVyL2VjYy5jIChnZW5lcmF0ZV9rZXksIGVjY19nZW5lcmF0ZV9leHQpOiBQcmludCBtb2RlbCBpbiB0aGUKKwlkZWJ1ZyBvdXRwdXQuCisKKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfZWNfZHVwX3BvaW50KTogU3dpdGNoIGRlcGVuZGluZyBvbiBtb2RlbC4KKwlGYWN0b3IgY29kZSBvdXQgdG8gLi4uCisJKGR1cF9wb2ludF93ZWllcnN0cmFzcyk6IG5ldy4KKwkoZHVwX3BvaW50X21vbnRnb21lcnksIGR1cF9wb2ludF90d2lzdGVkZWR3YXJkcyk6IE5ldyBzdHViIGZ1bmN0aW9ucy4KKwkoX2djcnlfbXBpX2VjX2FkZF9wb2ludHMpOiBTd2l0Y2ggZGVwZW5kaW5nIG9uIG1vZGVsLiAgRmFjdG9yIGNvZGUgb3V0CisJdG8gLi4uCisJKGFkZF9wb2ludHNfd2VpZXJzdHJhc3MpOiBuZXcuCisJKGFkZF9wb2ludHNfbW9udGdvbWVyeSwgYWRkX3BvaW50c190d2lzdGVkZWR3YXJkcyk6IE5ldyBzdHViCisJZnVuY3Rpb25zLgorCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBSZW9yZGVyIHRlc3RzLgorCisJbXBpOiBTdXBwcmVzcyBuZXdlciBnY2Mgd2FybmluZ3MuCisJKiBzcmMvZzEwbGliLmggKEdDQ19BVFRSX1VOVVNFRCk6IERlZmluZSBmb3IgZ2NjID49IDMuNS4KKwkqIG1waS9tcGloLWRpdi5jIChfZ2NyeV9tcGloX21vZF8xLCBfZ2NyeV9tcGloX2Rpdm1vZF8xKTogTWFyayBkdW1teQorCWFzIHVudXNlZC4KKwkqIG1waS9tcGktaW50ZXJuYWwuaCAoVURJVl9RUk5ORF9QUkVJTlYpOiBNYXJrIF9xbCBhcyB1bnVzZWQuCisKKwlEbyBub3QgY2hlY2sgd2l0aCBjcHAgZm9yIHR5cGVkZWZlZCBjb25zdGFudHMuCisJKiBzcmMvZ2NyeXB0LWludC5oOiBJbmNsdWRlIGVycm9yIGNvZGUgcmVwbGFjZW1lbnRzIGRlcGVkaW5nIG9uIHRoZQorCXZlcnNpb24gb2YgbGliZ3BnLWVycm9yLgorCisyMDEzLTA5LTA0ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJTWFrZSBfZ2NyeV9idXJuX3N0YWNrIHVzZSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuCisJKiBjb25maWd1cmUuYWMgKEhBVkVfVkxBKTogQWRkIGNoZWNrLgorCSogc3JjL21pc2MuYyAoX2djcnlfYnVybl9zdGFjaykgW0hBVkVfVkxBXTogQWRkIFZMQSBjb2RlLgorCisJTW92ZSBzdGFjayBidXJuaW5nIGZyb20gYmxvY2sgY2lwaGVycyB0byBjaXBoZXIgbW9kZXMuCisJKiBzcmMvZ2NyeXB0LW1vZHVsZS5oIChnY3J5X2NpcGhlcl9lbmNyeXB0X3QpCisJKGdjcnlfY2lwaGVyX2RlY3J5cHRfdCk6IFJldHVybiAndW5zaWduZWQgaW50Jy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZHVtbXlfZW5jcnlwdF9ibG9jaywgZHVtbXlfZGVjcnlwdF9ibG9jayk6IFJldHVybgorCXplcm8uCisJKGRvX2VjYl9lbmNyeXB0LCBkb19lY2JfZGVjcnlwdCk6IEdldCBsYXJnZXN0IHN0YWNrIGJ1cm4gZGVwdGggZnJvbQorCWJsb2NrIGNpcGhlciBjcnlwdCBmdW5jdGlvbiBhbmQgYnVybiBzdGFjayBhdCBlbmQuCisJKiBjaXBoZXIvY2lwaGVyLWFlc3dyYXAuYyAoX2djcnlfY2lwaGVyX2Flc3dyYXBfZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2Flc3dyYXBfZGVjcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL2NpcGhlci1jYmMuYyAoX2djcnlfY2lwaGVyX2NiY19lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfY2JjX2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItY2ZiLmMgKF9nY3J5X2NpcGhlcl9jZmJfZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2NmYl9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvY2lwaGVyLWN0ci5jIChfZ2NyeV9jaXBoZXJfY2JjX2VuY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9jaXBoZXItb2ZiLmMgKF9nY3J5X2NpcGhlcl9vZmJfZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX29mYl9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvYmxvd2Zpc2guYyAoZW5jcnlwdF9ibG9jaywgZGVjcnlwdF9ibG9jayk6IFJldHVybiBidXJuIHN0YWNrCisJZGVwdGguCisJKiBjaXBoZXIvY2FtZWxsaWEtZ2x1ZS5jIChjYW1lbGxpYV9lbmNyeXB0LCBjYW1lbGxpYV9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvY2FzdDUuYyAoZW5jcnlwdF9ibG9jaywgZGVjcnlwdF9ibG9jayk6IERpdHRvLgorCSogY2lwaGVyL2Rlcy5jIChkb190cmlwbGVkZXNfZW5jcnlwdCwgZG9fdHJpcGxlZGVzX2RlY3J5cHQpCisJKGRvX2Rlc19lbmNyeXB0LCBkb19kZXNfZGVjcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL2lkZWEuYyAoaWRlYV9lbmNyeXB0LCBpZGVhX2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIChyaWpuZGFlbF9lbmNyeXB0LCByaWpuZGFlbF9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvc2VlZC5jIChzZWVkX2VuY3J5cHQsIHNlZWRfZGVjcnlwdCk6IERpdHRvLgorCSogY2lwaGVyL3NlcnBlbnQuYyAoc2VycGVudF9lbmNyeXB0LCBzZXJwZW50X2RlY3J5cHQpOiBEaXR0by4KKwkqIGNpcGhlci90d29maXNoLmMgKHR3b2Zpc2hfZW5jcnlwdCwgdHdvZmlzaF9kZWNyeXB0KTogRGl0dG8uCisJKiBjaXBoZXIvcmZjMjI2OC5jIChlbmNyeXB0X2Jsb2NrLCBkZWNyeXB0X2Jsb2NrKTogTmV3LgorCShfZ2NyeV9jaXBoZXJfc3BlY19yZmMyMjY4XzQwKTogVXNlIGVuY3J5cHRfYmxvY2sgYW5kIGRlY3J5cHRfYmxvY2suCisKKzIwMTMtMDktMDEgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwljYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0OiBNb3ZlIHJlZ2lzdGVyIGNsZWFyaW5nIHRvIGFzc2VtYmx5IGZ1bmN0aW9ucy4KKwkqIGNpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LlMKKwkoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jdHJfZW5jKTogQWRkICd2emVyb2FsbCcuCisJKF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYykKKwkoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jZmJfZGVjKTogQWRkICd2emVyb3VwcGVyJyBhdCBoZWFkIGFuZAorCSd2emVyb2FsbCcgYXQgdGFpbC4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKF9nY3J5X3NlcnBlbnRfY3RyX2VuYywgX2djcnlfc2VycGVudF9jYmNfZGVjKQorCShfZ2NyeV9zZXJwZW50X2F2eDJfY2ZiX2RlYykgW1VTRV9BRVNOSV9BVlgyXTogUmVtb3ZlIHJlZ2lzdGVyCisJY2xlYXJpbmcuCisKKwljYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQ6IE1vdmUgcmVnaXN0ZXIgY2xlYXJpbmcgdG8gYXNzZW1ibHkgZnVuY3Rpb25zLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5TIChfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY3RyX2VuYykKKwkoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NiY19kZWMpCisJKF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jZmJfZGVjKTogQWRkICd2emVyb3VwcGVyJyBhdCBoZWFkIGFuZAorCSd2emVyb2FsbCcgYXQgdGFpbC4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKF9nY3J5X3NlcnBlbnRfY3RyX2VuYywgX2djcnlfc2VycGVudF9jYmNfZGVjKQorCShfZ2NyeV9zZXJwZW50X2F2eDJfY2ZiX2RlYykgW1VTRV9BRVNOSV9BVlhdOiBSZW1vdmUgcmVnaXN0ZXIgY2xlYXJpbmcuCisKKwlzZXJwZW50LWF2eDItYW1kNjQ6IE1vdmUgcmVnaXN0ZXIgY2xlYXJpbmcgdG8gYXNzZW1ibHkuCisJKiBjaXBoZXIvc2VycGVudC1hdngyLWFtZDY0LlMgKF9nY3J5X3NlcnBlbnRfYXZ4Ml9jdHJfZW5jKQorCShfZ2NyeV9zZXJwZW50X2F2eDJfY2JjX2RlYywgX2djcnlfc2VycGVudF9hdngyX2NmYl9kZWMpOiBDaGFuZ2UgbGFzdAorCSd2emVyb3VwcGVyJyB0byAndnplcm9hbGwnLgorCSogY2lwaGVyL3NlcnBlbnQuYyAoX2djcnlfc2VycGVudF9jdHJfZW5jLCBfZ2NyeV9zZXJwZW50X2NiY19kZWMpCisJKF9nY3J5X3NlcnBlbnRfYXZ4Ml9jZmJfZGVjKSBbVVNFX0FWWDJdOiBSZW1vdmUgcmVnaXN0ZXIgY2xlYXJpbmcgd2l0aAorCSd2emVyb2FsbCcuCisKKwlGaXggYnVpbGRpbmcgZm9yIHgzMiB0YXJnZXQuCisJKiBtcGkvYW1kNjQvbXBpLWFzbS1kZWZzLmg6IE5ldyBmaWxlLgorCSogcmFuZG9tL3JuZGh3LmMgKHBvbGxfcGFkbG9jaykgW19feDg2XzY0X19dOiBBbHNvIGNoZWNrIGlmIF9fTFA2NF9fIGlzCisJZGVmaW5lZC4KKwlbVVNFX0RSTkcsIF9feDg2XzY0X19dOiBBbHNvIGNoZWNrIGlmIF9fTFA2NF9fIGlzIGRlZmluZWQuCisKKzIwMTMtMDgtMzEgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlzaGE1MTI6IGFkZCBBUk0vTkVPTiBhc3NlbWJseSB2ZXJzaW9uIG9mIHRyYW5zZm9ybSBmdW5jdGlvbi4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdzaGE1MTItYXJtdjctbmVvbi5TJy4KKwkqIGNpcGhlci9zaGE1MTItYXJtdjctbmVvbi5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9zaGE1MTIuYyAoVVNFX0FSTV9ORU9OX0FTTSk6IE5ldyBtYWNyby4KKwkoU0hBNTEyX0NPTlRFWFQpwqBbVVNFX0FSTV9ORU9OX0FTTV06IEFkZCAndXNlX25lb24nLgorCShzaGE1MTJfaW5pdCwgc2hhMzg0X2luaXQpIFtVU0VfQVJNX05FT05fQVNNXTogRW5hYmxlICd1c2VfbmVvbicgaWYKKwlDUFUgc3VwcG9ydCBORU9OIGluc3RydWN0aW9ucy4KKwkoayk6IFJvdW5kIGNvbnN0YW50IGFycmF5IG1vdmVkIG91dHNpZGUgb2YgJ3RyYW5zZm9ybScgZnVuY3Rpb24uCisJKF9fdHJhbnNmb3JtKTogUmVuYW1lZCBmcm9tICd0cmFuZm9ybScgZnVuY3Rpb24uCisJW1VTRV9BUk1fTkVPTl9BU01dIChfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FybXY3X25lb24pOiBOZXcgcHJvdG90eXBlLgorCSh0cmFuc2Zvcm0pOiBOZXcgd3JhcHBlciBmdW5jdGlvbiBmb3IgZGlmZmVyZW50IHRyYW5zZm9ybSB2ZXJzaW9ucy4KKwkoc2hhNTEyX3dyaXRlLCBzaGE1MTJfZmluYWwpOiBCdXJuIHN0YWNrIGJ5IHRoZSBhbW91bnQgcmV0dXJuZWQgYnkKKwl0cmFuc2Zvcm0gZnVuY3Rpb24uCisJKiBjb25maWd1cmUuYWMgKHNoYTUxMikgW25lb25zdXBwb3J0XTogQWRkICdzaGE1MTItYXJtdjctbmVvbi5sbycuCisKKwlzaGE1MTI6IHJlZHVjZSBzdGFjayB1c2UgaW4gdHJhbnNmb3JtIGZ1bmN0aW9uIGJ5IDUxMiBieXRlcy4KKwkqIGNpcGhlci9zaGE1MTIuYyAodHJhbnNmb3JtKTogQ2hhbmdlICd1NjQgd1s4MF0nIHRvICd1NjQgd1sxNl0nIGFuZAorCWlubGluZSBpbnB1dCBleHBhbnNpb24gdG8gZmlyc3QgNjQgcm91bmRzLgorCShzaGE1MTJfd3JpdGUsIHNoYTUxMl9maW5hbCk6IFJlZHVjZSBidXJuX3N0YWNrIGRlcHRoIGJ5IDUxMiBieXRlcy4KKworCUFkZCBBUk0gSFcgZmVhdHVyZSBkZXRlY3Rpb24gbW9kdWxlIGFuZCBhZGQgTkVPTiBkZXRlY3Rpb24uCisJKiBjb25maWd1cmUuYWM6IEFkZCBvcHRpb24gLS1kaXNhYmxlLW5lb24tc3VwcG9ydC4KKwkoSEFWRV9HQ0NfSU5MSU5FX0FTTV9ORU9OKTogTmV3LgorCShFTkFCTEVfTkVPTl9TVVBQT1JUKTogTmV3LgorCVthcm1dOiBBZGQgJ2h3Zi1hcm0ubG8nIGFzIEhXIGZlYXR1cmUgbW9kdWxlLgorCSogc3JjL01ha2VmaWxlLmFtOiBBZGQgJ2h3Zi1hcm0uYycuCisJKiBzcmMvZzEwbGliLmggKEhXRl9BUk1fTkVPTik6IE5ldyBtYWNyby4KKwkqIHNyYy9nbG9iYWwuYyAoaHdmbGlzdCk6IEFkZCBIV0ZfQVJNX05FT04gZW50cnkuCisJKiBzcmMvaHdmLWFybS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9od2YtY29tbW9uLmggKF9nY3J5X2h3Zl9kZXRlY3RfYXJtKTogTmV3IHByb3RvdHlwZS4KKwkqIHNyYy9od2ZlYXR1cmVzLmMgKF9nY3J5X2RldGVjdF9od19mZWF0dXJlcykgW0hBVkVfQ1BVX0FSQ0hfQVJNXTogQWRkCisJY2FsbCB0byBfZ2NyeV9od2ZfZGV0ZWN0X2FybS4KKworCUNvcnJlY3QgbXBpX2NwdV9hcmNoIGZvciBBUk12Ni4KKwkqIG1waS9jb25maWcubGlua3MgW2FybXY2XTogU2V0IG1waV9jcHVfYXJjaCB0byAiYXJtIiwgaW5zdGVhZCBvZgorCSJhcm12NiIuCisKKzIwMTMtMDgtMzAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJbXBpOiBNYWtlIGdjcnlfbXBpX3ByaW50IHdvcmsgd2l0aCBuZWdhdGl2ZSB6ZXJvZXMuCisJKiBtcGkvbXBpY29kZXIuYyAoZ2NyeV9tcGlfcHJpbnQpOiBUYWtlIGNhcmUgb2YgbmVnYXRpdmUgemVyby4KKwkoZ2NyeV9tcGlfYXByaW50KTogQWxsb2NhdGUgYXQgbGVhc3QgMSBieXRlLgorCSogdGVzdHMvdC1jb252ZXJ0LmM6IE5ldy4KKwkqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCB0LWNvbnZlcnQuCisKKwlSZWZhY3RvciB0aGUgRUNDIGNvZGUgaW50byAzIGZpbGVzLgorCSogY2lwaGVyL2VjYy1jb21tb24uaCwgY2lwaGVyL2VjYy1jdXJ2ZXMuYywgY2lwaGVyL2VjYy1taXNjLmM6IE5ldy4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbSAoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQgbmV3IGZpbGVzLgorCSogY29uZmlndXJlLmFjIChHQ1JZUFRfUFVCS0VZX0NJUEhFUlMpOiBBZGQgbmV3IC5jIGZpbGVzLgorCSogY2lwaGVyL2VjYy5jIChjdXJ2ZV9hbGlhc2VzLCBlY2NfZG9tYWluX3Bhcm1zX3QsIGRvbWFpbl9wYXJtcykKKwkoc2NhbnZhbCk6IE1vdmUgdG8gZWNjLWN1cnZlcy5jLgorCShmaWxsX2luX2N1cnZlKTogTW92ZSB0byBlY2MtY3VydmUuYyBhcyBfZ2NyeV9lY2NfZmlsbF9pbl9jdXJ2ZS4KKwkoZWNjX2dldF9jdXJ2ZSk6IE1vdmUgdG8gZWNjLWN1cnZlLmMgYXMgX2djcnlfZWNjX2dldF9jdXJ2ZS4KKwkoX2djcnlfbXBpX2VjX2VjMm9zKTogTW92ZSB0byBlY2MtbWlzYy5jLgorCShlYzJvcyk6IE1vdmUgdG8gZWNjLW1pc2MuYyBhcyBfZ2NyeV9lY2NfZWMyb3MuCisJKG9zMmVjKTogTW92ZSB0byBlY2MtbWlzYy5jIGFzIF9nY3J5X2VjY19vczJlYy4KKwkocG9pbnRfc2V0KTogTW92ZSBhcyBpbmxpbmUgZnVuY3Rpb24gdG8gZWNjLWNvbW1vbi5oLgorCShfZ2NyeV9lY2NfY3VydmVfZnJlZSk6IE1vdmUgdG8gZWNjLW1pc2MuYyBhcyBfZ2NyeV9lY2NfY3VydmVfZnJlZS4KKwkoX2djcnlfZWNjX2N1cnZlX2NvcHkpOiBNb3ZlIHRvIGVjYy1taXNjLmMgYXMgX2djcnlfZWNjX2N1cnZlX2NvcHkuCisJKG1waV9mcm9tX2tleXBhcmFtLCBwb2ludF9mcm9tX2tleXBhcmFtKTogTW92ZSB0byBlY2MtY3VydmVzLmMuCisJKF9nY3J5X21waV9lY19uZXcpOiBNb3ZlIHRvIGVjYy1jdXJ2ZXMuYy4KKwkoZWNjX2dldF9wYXJhbSk6IE1vdmUgdG8gZWNjLWN1cnZlcy5jIGFzIF9nY3J5X2VjY19nZXRfcGFyYW0uCisJKGVjY19nZXRfcGFyYW1fc2V4cCk6IE1vdmUgdG8gZWNjLWN1cnZlcy5jIGFzIF9nY3J5X2VjY19nZXRfcGFyYW1fc2V4cC4KKworMjAxMy0wOC0yMiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCXNlcnBlbnQtc3NlMi1hbWQ2NDogTW92ZSByZWdpc3RlciBjbGVhcmluZyB0byBhc3NlbWJseSBmdW5jdGlvbnMuCisJY2lwaGVyL3NlcnBlbnQtc3NlMi1hbWQ2NC5TIChfZ2NyeV9zZXJwZW50X3NzZTJfY3RyX2VuYykKKwkoX2djcnlfc2VycGVudF9zc2UyX2NiY19kZWMsIF9nY3J5X3NlcnBlbnRfc3NlMl9jZmJfZGVjKTogQ2xlYXIgdXNlZAorCVhNTSByZWdpc3RlcnMuCisJY2lwaGVyL3NlcnBlbnQuYyAoX2djcnlfc2VycGVudF9jdHJfZW5jLCBfZ2NyeV9zZXJwZW50X2NiY19kZWMpCisJKCBfZ2NyeV9zZXJwZW50X2NmYl9kZWMpIFtVU0VfU1NFMl06IFJlbW92ZSBYTU0gcmVnaXN0ZXIgY2xlYXJpbmcgZnJvbQorCWJ1bGsgZnVuY3Rpb25zLgorCisJdHdvZmlzaC1hbWQ2NDogZG8gbm90IG1ha2UgX190d29maXNoX2RlY19ibGszIGdsb2JhbC4KKwkqIGNpcGhlci90d29maXNoLWFtZDY0LlMgKF9fdHdvZmlzaF9kZWNfYmxrMyk6IERvIG5vdCBleHBvcnQgc3ltYm9sIGFzCisJZ2xvYmFsLgorCShfX3R3b2Zpc2hfZGVjX2JsazMpOiBNYXJrIHN5bWJvbCBhcyBmdW5jdGlvbi4KKworMjAxMy0wOC0yMCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCW1waTogYWRkIEFSTXY2IGFzc2VtYmx5LgorCSogbXBpL2FybXY2L21waS1hc20tZGVmcy5oOiBOZXcuCisJKiBtcGkvYXJtdjYvbXBpaC1hZGQxLlM6IE5ldy4KKwkqIG1waS9hcm12Ni9tcGloLW11bDEuUzogTmV3LgorCSogbXBpL2FybXY2L21waWgtbXVsMi5TOiBOZXcuCisJKiBtcGkvYXJtdjYvbXBpaC1tdWwzLlM6IE5ldy4KKwkqIG1waS9hcm12Ni9tcGloLXN1YjEuUzogTmV3LgorCSogbXBpL2NvbmZpZy5saW5rcyBbYXJtXTogRW5hYmxlIEFSTXY2IGFzc2VtYmx5LgorCisJTW92ZSBBUk12NiBkZXRlY3Rpb24gdG8gY29uZmlndXJlLmFjLgorCSogY2lwaGVyL2Jsb3dmaXNoLWFybXY2LlM6IFJlcGxhY2UgX19BUk1fQVJDSCA+PSA2IGNoZWNrcyB3aXRoCisJSEFWRV9BUk1fQVJDSF9WNi4KKwkqIGNpcGhlci9ibG93ZmlzaC5jOiBEaXR0by4KKwkqIGNpcGhlci9jYW1lbGxpYS1hcm12Ni5TOiBEaXR0by4KKwkqIGNpcGhlci9jYW1lbGxpYS5oOiBEaXR0by4KKwkqIGNpcGhlci9jYXN0NS1hcm12Ni5TOiBEaXR0by4KKwkqIGNpcGhlci9jYXN0NS5jOiBEaXR0by4KKwkqIGNpcGhlci9yaWpuZGFlbC1hcm12Ni5TOiBEaXR0by4KKwkqIGNpcGhlci9yaWpuZGFlbC5jOiBEaXR0by4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIEhBVkVfQVJNX0FSQ0hfVjYgY2hlY2suCisKKzIwMTMtMDgtMTkgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlBZGQgb3B0aW1pemVkIHdpcGVtZW1vcnkgZm9yIEFSTS4KKwlzcmMvZzEwbGliLmggW19fYXJtX19dIChmYXN0X3dpcGVtZW1vcnkyX3VuYWxpZ25lZF9oZWFkKQorCShmYXN0X3dpcGVtZW1vcnkyKTogTmV3IG1hY3Jvcy4KKworCWNpcGhlcjogYnVmaGVscDogYWxsb3cgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBvbiBBUk0uCisJKiBjaXBoZXIvYnVmaGVscC5oIFtfX2FybV9fICYmIF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEXTogRW5hYmxlCisJQlVGSEVMUF9GQVNUX1VOQUxJR05FRF9BQ0NFU1MuCisKKzIwMTMtMDgtMTcgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlSZW1vdmUgYnVybl9zdGFjayBvcHRpbWl6YXRpb24uCisJKiBzcmMvbWlzYy5jIChfZ2NyeV9idXJuX3N0YWNrKTogUmVtb3ZlIFNJWkVPRl9VTlNJR05FRF9MT05HID09IDQgb3IgOAorCW9wdGltaXphdGlvbi4KKworMjAxMy0wOC0xNiAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCWNhbWVsbGlhOiBhZGQgQVJNdjYgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24uCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnY2FtZWxsaWEtYXJtdjYuUycuCisJKiBjaXBoZXIvY2FtZWxsaWEtYXJtdjYuUzogTmV3IGZpbGUuCisJKiBjaXBoZXIvY2FtZWxsaWEtZ2x1ZS5jIFtVU0VfQVJNVjZfQVNNXQorCShfZ2NyeV9jYW1lbGxpYV9hcm12Nl9lbmNyeXB0X2Jsb2NrKQorCShfZ2NyeV9jYW1lbGxpYV9hcm12Nl9kZWNyeXB0X2Jsb2NrKTogTmV3IHByb3RvdHlwZXMuCisJW1VTRV9BUk1WNl9BU01dIChDYW1lbGxpYV9FbmNyeXB0QmxvY2ssIENhbWVsbGlhX0RlY3J5cHRCbG9jaykKKwkoY2FtZWxsaWFfZW5jcnlwdCwgY2FtZWxsaWFfZGVjcnlwdCk6IE5ldyBmdW5jdGlvbnMuCisJKiBjaXBoZXIvY2FtZWxsaWEuYyBbIVVTRV9BUk1WNl9BU01dOiBDb21waWxlIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24KKwlyb3V0aW5lcyBpZiBVU0VfQVJNVjZfQVNNIG1hY3JvIGlzIF9ub3RfIGRlZmluZWQuCisJKiBjaXBoZXIvY2FtZWxsaWEuaCAoVVNFX0FSTVY2X0FTTSk6IE5ldyBtYWNyby4KKwlbIVVTRV9BUk1WNl9BU01dIChDYW1lbGxpYV9FbmNyeXB0QmxvY2ssIENhbWVsbGlhX0RlY3J5cHRCbG9jayk6IElmCisJVVNFX0FSTVY2X0FTTSBpcyBkZWZpbmVkLCBkaXNhYmxlIHRoZXNlIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisJKGNhbWVsbGlhKSBbYXJtXTogQWRkICdjYW1lbGxpYS1hcm12Ni5sbycuCisKKwlibG93ZmlzaDogYWRkIEFSTXY2IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ2Jsb3dmaXNoLWFybXY2LlMnLgorCSogY2lwaGVyL2Jsb3dmaXNoLWFybXY2LlM6IE5ldyBmaWxlLgorCSogY2lwaGVyL2Jsb3dmaXNoLmMgKFVTRV9BUk1WNl9BU00pOiBOZXcgbWFjcm8uCisJW1VTRV9BUk1WNl9BU01dIChfZ2NyeV9ibG93ZmlzaF9hcm12Nl9kb19lbmNyeXB0KQorCShfZ2NyeV9ibG93ZmlzaF9hcm12Nl9lbmNyeXB0X2Jsb2NrKQorCShfZ2NyeV9ibG93ZmlzaF9hcm12Nl9kZWNyeXB0X2Jsb2NrLCBfZ2NyeV9ibG93ZmlzaF9hcm12Nl9jdHJfZW5jKQorCShfZ2NyeV9ibG93ZmlzaF9hcm12Nl9jYmNfZGVjLCBfZ2NyeV9ibG93ZmlzaF9hcm12Nl9jZmJfZGVjKTogTmV3CisJcHJvdG90eXBlcy4KKwlbVVNFX0FSTVY2X0FTTV0gKGRvX2VuY3J5cHQsIGRvX2VuY3J5cHRfYmxvY2ssIGRvX2RlY3J5cHRfYmxvY2spCisJKGVuY3J5cHRfYmxvY2ssIGRlY3J5cHRfYmxvY2spOiBOZXcgZnVuY3Rpb25zLgorCShfZ2NyeV9ibG93ZmlzaF9jdHJfZW5jKSBbVVNFX0FSTVY2X0FTTV06IFVzZSBBUk12NiBhc3NlbWJseSBmdW5jdGlvbi4KKwkoX2djcnlfYmxvd2Zpc2hfY2JjX2RlYykgW1VTRV9BUk1WNl9BU01dOiBVc2UgQVJNdjYgYXNzZW1ibHkgZnVuY3Rpb24uCisJKF9nY3J5X2Jsb3dmaXNoX2NmYl9kZWMpIFtVU0VfQVJNVjZfQVNNXTogVXNlIEFSTXY2IGFzc2VtYmx5IGZ1bmN0aW9uLgorCSogY29uZmlndXJlLmFjIChibG93ZmlzaCkgW2FybV06IEFkZCAnYmxvd2Zpc2gtYXJtdjYubG8nLgorCisJY2FzdDU6IGFkZCBBUk12NiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdjYXN0NS1hcm12Ni5TJy4KKwkqIGNpcGhlci9jYXN0NS1hcm12Ni5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9jYXN0NS5jIChVU0VfQVJNVjZfQVNNKTogTmV3IG1hY3JvLgorCShDQVNUNV9jb250ZXh0KSBbVVNFX0FSTVY2X0FTTV06IE5ldyBtZW1iZXJzICdLcl9hcm1fZW5jJyBhbmQKKwknS3JfYXJtX2RlYycuCisJW1VTRV9BUk1WNl9BU01dIChfZ2NyeV9jYXN0NV9hcm12Nl9lbmNyeXB0X2Jsb2NrKQorCShfZ2NyeV9jYXN0NV9hcm12Nl9kZWNyeXB0X2Jsb2NrLCBfZ2NyeV9jYXN0NV9hcm12Nl9jdHJfZW5jKQorCShfZ2NyeV9jYXN0NV9hcm12Nl9jYmNfZGVjLCBfZ2NyeV9jYXN0NV9hcm12Nl9jZmJfZGVjKTogTmV3IHByb3RvdHlwZXMuCisJW1VTRV9BUk1WNl9BU01dIChkb19lbmNyeXB0X2Jsb2NrLCBkb19kZWNyeXB0X2Jsb2NrLCBlbmNyeXB0X2Jsb2NrKQorCShkZWNyeXB0X2Jsb2NrKTogTmV3IGZ1bmN0aW9ucy4KKwkoX2djcnlfY2FzdDVfY3RyX2VuYykgW1VTRV9BUk1WNl9BU01dOiBVc2UgQVJNdjYgYXNzZW1ibHkgZnVuY3Rpb24uCisJKF9nY3J5X2Nhc3Q1X2NiY19kZWMpIFtVU0VfQVJNVjZfQVNNXTogVXNlIEFSTXY2IGFzc2VtYmx5IGZ1bmN0aW9uLgorCShfZ2NyeV9jYXN0NV9jZmJfZGVjKSBbVVNFX0FSTVY2X0FTTV06IFVzZSBBUk12NiBhc3NlbWJseSBmdW5jdGlvbi4KKwkoZG9fY2FzdF9zZXRrZXkpIFtVU0VfQVJNVjZfQVNNXTogSW5pdGlhbGl6ZSAnS3JfYXJtX2VuYycgYW5kCisJJ0tyX2FybV9kZWMnLgorCSogY29uZmlndXJlLmFjIChjYXN0NSkgW2FybV06IEFkZCAnY2FzdDUtYXJtdjYubG8nLgorCisyMDEzLTA4LTE0ICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJcmlqbmRhZWw6IGFkZCBBUk12NiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdyaWpuZGFlbC1hcm12Ni5TJy4KKwkqIGNpcGhlci9yaWpuZGFlbC1hcm12Ni5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIChVU0VfQVJNVjZfQVNNKTogTmV3IG1hY3JvLgorCVtVU0VfQVJNVjZfQVNNXSAoX2djcnlfYWVzX2FybXY2X2VuY3J5cHRfYmxvY2spCisJKF9nY3J5X2Flc19hcm12Nl9kZWNyeXB0X2Jsb2NrKTogTmV3IHByb3RvdHlwZXMuCisJKGRvX2VuY3J5cHRfYWxpZ25lZCkgW1VTRV9BUk1WNl9BU01dOiBVc2UgQVJNdjYgYXNzZW1ibHkgZnVuY3Rpb24uCisJKGRvX2VuY3J5cHQpOiBEaXNhYmxlIGlucHV0L291dHB1dCBhbGlnbm1lbnQgd2hlbiBVU0VfQVJNVjZfQVNNLgorCShkb19kZWNyeXB0X2FsaWduZWQpIFtVU0VfQVJNVjZfQVNNXTogVXNlIEFSTXY2IGFzc2VtYmx5IGZ1bmN0aW9uLgorCShkb19kZWNyeXB0KTogRGlzYWJsZSBpbnB1dC9vdXRwdXQgYWxpZ25tZW50IHdoZW4gVVNFX0FSTVY2X0FTTS4KKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMpOiBOZXcgY2hlY2sgZm9yCisJZ2NjL2FzIGNvbXBhdGliaWxpdHkgd2l0aCBBUk0gYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zLgorCShhZXMpIFthcm1dOiBBZGQgJ3Jpam5kYWVsLWFybXY2LmxvJy4KKworMjAxMy0wOC0wOSAgTklJQkUgWXV0YWthICA8Z25paWJlQGZzaWoub3JnPgorCisJY2lwaGVyOiBmaXggbWVtb3J5IGxlYWsuCisJKiBjaXBoZXIvcHVia2V5LmMgKGdjcnlfcGtfc2lnbik6IEhhbmRsZSB0aGUgc3BlY2lmaWMgY2FzZSBvZiBFQ0MsCisJd2hlcmUgdGhlcmUgaXMgTlVMTCB3aGljaGkgaXMgbm90IHRoZSBzZW50aW5lbC4KKworMjAxMy0wOC0wOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwltcGk6IENsZWFyIGltbXV0YWJsZSBmbGFnIG9uIHRoZSByZXN1bHQgb2YgZ2NyeV9tcGlfc2V0LgorCSogbXBpL21waXV0aWwuYyAoZ2NyeV9tcGlfc2V0KTogUmVzZXQgaW1tdXRhYmxlIGFuZCBjb25zdCBmbGFncy4KKwkqIHRlc3RzL21waXRlc3RzLmMgKHRlc3RfY29uc3RfYW5kX2ltbXV0YWJsZSk6IEFkZCBhIHRlc3QgZm9yIHRoaXMuCisKKzIwMTMtMDgtMDcgIE5JSUJFIFl1dGFrYSAgPGduaWliZUBmc2lqLm9yZz4KKworCXRlc3RzOiBmaXggbWVtb3J5IGxlYWtzLgorCSogdGVzdHMvYmVuY2htYXJrLmMgKGRzYV9iZW5jaCk6IFJlbGVhc2UgU0lHLgorCisJKiB0ZXN0cy9tcGl0ZXN0cy5jICh0ZXN0X3Bvd20pOiBSZWxlYXNlIEJBU0UsIEVYUCwgTU9ELCBhbmQgUkVTLgorCisJKiB0ZXN0cy9wcmltZS5jIChjaGVja19wcmltZXMpOiBSZWxlYXNlIFBSSU1FLgorCisJKiB0ZXN0cy90c2V4cC5jIChiYXNpYyk6IFVzZSBpbnRlcm1lZGlhdGUgdmFyaWFibGUgTSBmb3IgY29uc3RhbnQuCisJUmVsZWFzZSBTMSwgUzIgYW5kIEEuCisKKzIwMTMtMDgtMDcgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlGaXggYnVpbGRpbmcgb24gVzMyIChjYW5ub3QgZXhwb3J0IHN5bWJvbCAnZ2NyeV9zZXhwX2dldF9idWZmZXInKQorCSogc3JjL2xpYmdjcnlwdC5kZWY6IENoYW5nZSAnZ2NyeV9zZXhwX2dldF9idWZmZXInIHRvCisJJ2djcnlfc2V4cF9udGhfYnVmZmVyJy4KKworMjAxMy0wOC0wNiAgTklJQkUgWXV0YWthICA8Z25paWJlQGZzaWoub3JnPgorCisJY2lwaGVyOiBmaXggYW5vdGhlciBtZW1vcnkgbGVhay4KKwkqIGNpcGhlci9lY2MuYyAoZWNjX2dldF9jdXJ2ZSk6IEZyZWUgVE1QLgorCisJdGVzdHM6IGZpeCBtZW1vcnkgbGVha3MuCisJKiB0ZXN0cy9wdWJrZXkuYyAoY2hlY2tfa2V5c19jcnlwdCk6IFJlbGVhc2UgTCwgWDAsIGFuZCBYMS4KKwkoY2hlY2tfa2V5cyk6IFJlbGVhc2UgWC4KKworCWNpcGhlcjogZml4IG1lbW9yeSBsZWFrcy4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19nZW5lcmF0ZV9leHQpOiBGcmVlIFhWQUxVRS4KKworCSogY2lwaGVyL3B1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3QpOiBEb24ndCB1c2UgSURYIGZvciBsb29wLgorCUNhbGwgbXBpX2ZyZWUuCisJKHNleHBfZWxlbWVudHNfZXh0cmFjdF9lY2MpOiBDYWxsIG1waV9mcmVlLgorCisyMDEzLTA4LTA1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCW1waTogSW1wcm92ZSBnY3J5X21waV9pbnZtIHRvIGRldGVjdCBiYWQgaW5wdXQuCisJKiBtcGkvbXBpLWludi5jIChnY3J5X21waV9pbnZtKTogUmV0dXJuIDAgZm9yIGJhZCBpbnB1dC4KKworMjAxMy0wNy0zMSAgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgIDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKworCUNvcnJlY3QgY2hlY2tzIGZvciBlY2Mgc2VjcmV0IGtleS4KKwkqIGNpcGhlci9lY2MuYyAoY2hlY2tfc2VjcmV0X2tleSk6IHJlcGxhY2Ugd3JvbmcgY29tcGFyaXNvbiBvZiBRIGFuZAorCXNrLT5RIHBvaW50cyB3aXRoIGNvcnJlY3Qgb25lLgorCisyMDEzLTA3LTI5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXNleHA6IEFsbG93IHdoaXRlIHNwYWNlIGFueXdoZXJlIGluIGEgaGV4IGZvcm1hdC4KKwkqIHNyYy9zZXhwLmMgKGhleHRvYnl0ZSk6IFJlbW92ZS4KKwkoaGV4dG9uaWJibGUpOiBOZXcuCisJKHZzZXhwX3NzY2FuKTogU2tpcCB3aHRlc3BhY2UgYmV0d2VlbiBoZXggbmliYmxlcy4KKworCUltcGxlbWVudCBkZXRlcm1pbmlzdGljIEVDRFNBIGFzIHNwZWNpZmllZCBieSByZmMtNjk3OS4KKwkqIGNpcGhlci9lY2MuYyAoc2lnbik6IEFkZCBhcmdzIEZMQUdTIGFuZCBIQVNIQUxHTy4gIENvbnZlcnQgYW4gb3BhcXVlCisJTVBJIGFzIElOUFVULiAgSW1wbGVtZW50IHJmYy02OTc5LgorCShlY2Nfc2lnbik6IFJlbW92ZSB0aGUgb3BhcXVlIE1QSSBjb2RlIGFuZCBwYXNzIEZMQUdTIHRvIHNpZ24uCisJKHZlcmlmeSk6IERvIG5vdCBhbGxvY2F0ZSBhbmQgY29tcHV0ZSBZOyBpdCBpcyBub3QgdXNlZC4KKwkoZWNjX3ZlcmlmeSk6IFRydW5jYXRlIHRoZSBoYXNoIHZhbHVlIGlmIG5lZWRlZC4KKwkqIHRlc3RzL2RzYS1yZmM2OTc5LmMgKGNoZWNrX2RzYV9yZmM2OTc5KTogQWRkIEVDRFNBIHRlc3QgY2FzZXMuCisKKzIwMTMtMDctMjYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJSW1wbGVtZW50IGRldGVybWluaXN0aWMgRFNBIGFzIHNwZWNpZmllZCBieSByZmMtNjk3OS4KKwkqIGNpcGhlci9kc2EuYyAoZHNhX3NpZ24pOiBNb3ZlIG9wYXF1ZSBtcGkgZXh0cmFjdGlvbiB0byBzaWduLgorCShzaWduKTogQWRkIGFyZ3MgRkxBR1MgYW5kIEhBU0hBTEdPLiAgSW1wbGVtZW50IGRldGVybWluaXN0aWMgRFNBLgorCUFkZCBjb2RlIHBhdGggZm9yIFI9PTAgdG8gY29tcGx5IHdpdGggdGhlIHN0YW5kYXJkLgorCShkc2FfdmVyaWZ5KTogTGVmdCBmaWxsIG9wYXF1ZSBtcGkgYmFzZWQgaGFzaCB2YWx1ZXMuCisJKiBjaXBoZXIvZHNhLWNvbW1vbi5jIChpbnQyb2N0ZXRzLCBiaXRzMm9jdGV0cyk6IE5ldy4KKwkoX2djcnlfZHNhX2dlbl9yZmM2OTc5X2spOiBOZXcuCisJKiB0ZXN0cy9kc2EtcmZjNjk3OS5jOiBOZXcuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgZHNhLXJmYzY5NzkuCisKKwlBbGxvdyB0aGUgdXNlIG9mIGEgcHJpdmF0ZS1rZXkgcy1leHByZXNzaW9uIHdpdGggZ2NyeV9wa192ZXJpZnkuCisJKiBjaXBoZXIvcHVia2V5LmMgKHNleHBfdG9fa2V5KTogRmFsbGJhY2sgdG8gcHJpdmF0ZSBrZXkuCisKKzIwMTMtMDctMjUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJTWl0aWdhdGUgYSBmbHVzaCtyZWxvYWQgY2FjaGUgYXR0YWNrIG9uIFJTQSBzZWNyZXQgZXhwb25lbnRzLgorCSogbXBpL21waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IEFsd2F5cyBwZXJmcm9tIHRoZSBtcGlfbXVsIGZvcgorCWV4cG9uZW50cyBpbiBzZWN1cmUgbWVtb3J5LgorCisyMDEzLTA3LTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXBrOiBBbGxvdyB0aGUgdXNlIG9mIGEgaGFzaCBlbGVtZW50IGZvciBEU0Egc2lnbiBhbmQgdmVyaWZ5LgorCSogY2lwaGVyL3B1YmtleS5jIChwdWJrZXlfc2lnbik6IEFkZCBhcmcgY3R4IGFuZCBwYXNzIGl0IHRvIHRoZSBzaWduCisJbW9kdWxlLgorCShnY3J5X3BrX3NpZ24pOiBQYXNzIENUWCB0byBwdWJrZXlfc2lnbi4KKwkoc2V4cF9kYXRhX3RvX21waSk6IEFkZCBmbGFnIHJmYzY5NzkgYW5kIGNvZGUgdG8gYWxscyBoYXNoIHdpdGggKkRTQQorCSogY2lwaGVyL3JzYS5jIChyc2Ffc2lnbiwgcnNhX3ZlcmlmeSk6IFJldHVybiBhbiBlcnJvciBpZiBhbiBvcGFxdWUKKwlNUEkgaXMgZ2l2ZW4gZm9yIERBVEEvSEFTSC4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19zaWduLCBlbGdfdmVyaWZ5KTogRGl0dG8uCisJKiBjaXBoZXIvZHNhLmMgKGRzYV9zaWduLCBkc2FfdmVyaWZ5KTogQ29udmVydCBhIGdpdmVuIG9wYXF1ZSBNUEkuCisJKiBjaXBoZXIvZWNjLmMgKGVjY19zaWduLCBlY2NfdmVyaWZ5KTogRGl0dG8uCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19wdWJrZXlfc2lnbl9lY2RzYSk6IEFkZCBhIHRlc3QgZm9yIHVzaW5nIGEgaGFzaAorCWVsZW1lbnQgd2l0aCBEU0EuCisKKwlzZXhwOiBBZGQgZnVuY3Rpb24gZ2NyeV9zZXhwX250aF9idWZmZXIuCisJKiBzcmMvc2V4cC5jIChnY3J5X3NleHBfbnRoX2J1ZmZlcik6IE5ldy4KKwkqIHNyYy92aXNpYmlsaXR5LmMsIHNyYy92aXNpYmlsaXR5Lmg6IEFkZCBmdW5jdGlvbiB3cmFwcGVyLgorCSogc3JjL2xpYmdjcnlwdC52ZXJzLCBzcmMvbGliZ2NyeXB0LmRlZjogQWRkIHRvIEFQSS4KKwkqIHNyYy9nY3J5cHQuaC5pbjogQWRkIHByb3RvdHlwZS4KKworMjAxMy0wNy0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlBZGQgc3VwcG9ydCBmb3IgU2Fsc2EyMC4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWV9DSVBIRVJfU0FMU0EyMCk6IE5ldy4KKwkqIGNpcGhlci9zYWxzYTIwLmM6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYyAoYXZhaWxhYmxlX2NpcGhlcnMpOiBBZGQgU2Fsc2EyMC4KKwkqIGNpcGhlci9jaXBoZXIuYzogUmVnaXN0ZXIgU2Fsc2EyMC4KKwkoY2lwaGVyX3NldGl2KTogQWxsb3cgdG8gZGl2ZXJ0IGFuIElWIHRvIGEgY2lwaGVyIG1vZHVsZS4KKwkqIHNyYy9jaXBoZXItcHJvdG8uaCAoY2lwaGVyX3NldGl2X2Z1bmNfdCk6IE5ldy4KKwkoY2lwaGVyX2V4dHJhX3NwZWMpOiBBZGQgZmllbGQgc2V0aXYuCisJKiBzcmMvY2lwaGVyLmg6IERlY2xhcmUgU2Fsc2EyMCBkZWZpbml0aW9ucy4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX3N0cmVhbV9jaXBoZXIpOiBOZXcuCisJKGNoZWNrX3N0cmVhbV9jaXBoZXJfbGFyZ2VfYmxvY2spOiBOZXcuCisJKGNoZWNrX2NpcGhlcl9tb2Rlcyk6IFJ1biBuZXcgdGVzdCBmdW5jdGlvbnMuCisJKGNoZWNrX2NpcGhlcnMpOiBBZGQgc2ltcGxlIHRlc3QgZm9yIFNhbHNhMjAuCisKKzIwMTMtMDctMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWxsb3cgZ2NyeV9tcGlfZHVtcCB0byBwcmludCBvcGFxdWUgTVBJcy4KKwkqIG1waS9tcGljb2Rlci5jIChnY3J5X21waV9kdW1wKTogRGV0ZWN0IGFiZCBwcmludCBvcGFxdWUgTVBJcy4KKwkqIHRlc3RzL21waXRlc3RzLmMgKHRlc3Rfb3BhcXVlKTogTmV3LgorCShtYWluKTogQ2FsbCBuZXcgdGVzdC4KKworCWNpcGhlcjogUHJlcGFyZSB0byBwYXNzIGV4dHJhIGluZm8gdG8gdGhlIHNpZ24gZnVuY3Rpb25zLgorCSogc3JjL2djcnlwdC1tb2R1bGUuaCAoZ2NyeV9wa19zaWduX3QpOiBBZGQgcGFybXMgZmxhZ3MgYW5kIGhhc2hhbGdvLgorCSogY2lwaGVyL3JzYS5jIChyc2Ffc2lnbik6IEFkZCBwYXJtcyBhbmQgbWFyayB0aGVtIGFzIHVudXNlZC4KKwkqIGNpcGhlci9kc2EuYyAoZHNhX3NpZ24pOiBEaXR0by4KKwkqIGNpcGhlci9lbGdhbWFsLmMgKGVsZ19zaWduKTogRGl0dG8uCisJKiBjaXBoZXIvcHVia2V5LmMgKGR1bW15X3NpZ24pOiBEaXR0by4KKwkocHVia2V5X3NpZ24pOiBQYXNzIDAgZm9yIHRoZSBuZXcgYXJncy4KKworCUZpeCBhIHNwZWNpYWwgY2FzZSBidWcgaW4gbXBpX3Bvd20gZm9yIGU9PTAuCisJKiBtcGkvbXBpLXBvdy5jIChnY3J5X21waV9wb3dtKTogRm9yIGEgemVybyBleHBvbmVudCwgbWFrZSBzdXJlIHRoYXQKKwl0aGUgcmVzdWx0IGhhcyBiZWVuIGFsbG9jYXRlZC4KKworMjAxMy0wNy0xNSAgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgIDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKworCUZpeCBtZW1vcnkgbGVhayBpbiB0LW1waS1wb2ludCB0ZXN0LgorCSogdGVzdHMvdC1tcGktcG9pbnQuYyAoYmFzaWNfZWNfbWF0aCwgYmFzaWNfZWNfbWF0aF9zaW1wbGlmaWVkKTogYWRkCisJY2FsbHMgdG8gZ2NyeV9jdHhfcmVsZWFzZSgpIHRvIGZyZWUgY29udGV4dHMgYWZ0ZXIgdGhleSBiZWNvbWUgdW51c2VkLgorCisyMDEzLTA3LTEwICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorCisJRml4ICdQbGVhc2UgaW5jbHVkZSB3aW5zb2NrMi5oIGJlZm9yZSB3aW5kb3dzLmgnIHdhcm5pbmdzIHdpdGggbWluZ3czMi4KKwkqIHJhbmRvbS9ybmR3MzIuYzogaW5jbHVkZSB3aW5zb2NrMi5oIGJlZm9yZSB3aW5kb3dzLmguCisJKiBzcmMvYXRoLmggW19XSU4zMl06IERpdHRvLgorCSogdGVzdHMvYmVuY2htYXJrLmMgW19XSU4zMl06IERpdHRvLgorCisJUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXIgZnJvbSBtcGkvYW1kNjQvbXBpaC1tdWwyLlMuCisJKiBtcGkvYW1kNjQvbXBpaC1tdWwyLlM6IHJlbW92ZSBkdXBsaWNhdGVkIGhlYWRlci4KKworCUZpeCBpMzg2L2FtZDY0IGlubGluZSBhc3NlbWJseSAiY2MiIGNsb2JiZXJzLgorCSogY2lwaGVyL2JpdGhlbHAuaCBbX19HTlVDX18sIF9faTM4Nl9fXSAocm9sLCByb3IpOiBhZGQgImNjIiBnbG9iYmVyCisJZm9yIGlubGluZSBhc3NlbWJseS4KKwkqIGNpcGhlci9jYXN0NS5jIFtfX0dOVUNfXywgX19pMzg2X19dIChyb2wpOiBEaXR0by4KKwkqIHJhbmRvbS9ybmRody5jIFtVU0VfRFJOR10gKHJkcmFuZF9sb25nKTogRGl0dG8uCisJKiBzcmMvaG1hYzI1Ni5jIFtfX0dOVUNfXywgX19pMzg2X19dIChyb3IpOiBEaXR0by4KKwkqIG1waS9sb25nbG9uZy5jIFtfX2kzODZfX10gKGFkZF9zc2FhYWEsIHN1Yl9kZG1tc3MsIHVtdWxfcHBtbSkKKwkodWRpdl9xcm5uZCwgY291bnRfbGVhZGluZ196ZXJvcywgY291bnRfdHJhaWxpbmdfemVyb3MpOiBEaXR0by4KKworCWJ1ZmhlbHA6IFN1cHByZXNzICdjYXN0IGluY3JlYXNlcyByZXF1aXJlZCBhbGlnbm1lbnQnIHdhcm5pbmcuCisJKiBjaXBoZXIvYnVmaGVscC5oIChidWZfeG9yLCBidWZfeG9yXzJkc3QsIGJ1Zl94b3Jfbl9jb3B5KTogQ2FzdAorCXRvIGxhcmdlciBlbGVtZW50IHBvaW50ZXIgdGhyb3VnaCAodm9pZCAqKSB0byBzdXBwcmVzcyAtV2Nhc3QtZXJyb3IuCisKKwltcGk6IEFkZCBfX0FSTV9BUkNIIGZvciBvbGRlciBHQ0MuCisJKiBtcGkvbG9uZ2xvbmcuaCBbX19hcm1fX106IENvbnN0cnVjdCBfX0FSTV9BUkNIIGlmIG5vdCBwcm92aWRlZCBieQorCWNvbXBpbGVyLgorCisJbXBpOiBhZGQgbWlzc2luZyAiY2MiIGNsb2JiZXIgZm9yIEFSTSBhc3NlbWJseS4KKwkqIG1waS9sb25nbG9uZy5oIFtfX2FybV9fXSAoYWRkX3NzYWFhYSwgc3ViX2RkbW1zcyk6IEFkZCBfX0NMT0JCRVJfQ0MuCisJW19fYXJtX19dW19fQVJNX0FSQ0ggPD0gM10gKHVtdWxfcHBtbSk6IERpdHRvLgorCisJVHdlYWsgQVJNIGlubGluZSBhc3NlbWJseSBmb3IgbXBpLgorCW1waS9sb25nbG9uZy5oIFtfX2FybV9fXTogRW5hYmxlIGlubGluZSBhc3NlbWJseSBpZiBfX3RodW1iMl9fIGlzCisJZGVmaW5lZC4KKwlbX19hcm1fX106IFVzZSBfX0FSQ0hfQVJNIHdoZW4gZGVmaW5lZC4KKwlbX19hcm1fX10gW19fQVJNX0FSQ0ggPj0gNV0gKGNvdW50X2xlYWRpbmdfemVyb3MpOiBOZXcuCisKKzIwMTMtMDYtMjYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJTWFrZSBncGctZXJyb3IgcmVwbGFjZW1lbnQgZGVmaW5lcyBtb3JlIHJvYnVzdC4KKwkqIGNvbmZpZ3VyZS5hYyAoQUhfQk9UVE9NKTogTW92ZSBHUEdfRVJSXyByZXBsYWNlbWVudCBkZWZpbmVzIHRvIC4uLgorCSogc3JjL2djcnlwdC1pbnQuaDogbmV3IGZpbGUuCisJKiBzcmMvdmlzaWJpbGl0eS5oLCBzcmMvY2lwaGVyLmg6IFJlcGxhY2UgZ2NyeXB0LmggYnkgZ2NyeXB0LWludC5oLgorCSogdGVzdHMvOiBEaXR0byBmb3IgYWxsIHRlc3QgZmlsZXMuCisKKzIwMTMtMDYtMjAgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlDaGVjayBpZiBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucy4KKwkqIGNpcGhlci9ibG93ZmlzaC1hbWQ2NC5TOiBFbmFibGUgb25seSBpZgorCUhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMgaXMgZGVmaW5lZC4KKwkqIGNpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvY2FtZWxsaWEtYWVzbmktYXZ4Mi1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9jYXN0NS1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9yaW5qZGFlbC1hbWQ2NC5TOiBEaXR0by4KKwkqIGNpcGhlci9zZXJwZW50LWF2eDItYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvc2VycGVudC1zc2UyLWFtZDY0LlM6IERpdHRvLgorCSogY2lwaGVyL3R3b2Zpc2gtYW1kNjQuUzogRGl0dG8uCisJKiBjaXBoZXIvYmxvd2Zpc2guYzogVXNlIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9ubHkgaWYKKwlIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTIGlzIGRlZmluZWQKKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmM6IERpdHRvLgorCSogY2lwaGVyL2Nhc3Q1LmM6IERpdHRvLgorCSogY2lwaGVyL3Jpam5kYWVsLmM6IERpdHRvLgorCSogY2lwaGVyL3NlcnBlbnQuYzogRGl0dG8uCisJKiBjaXBoZXIvdHdvZmlzaC5jOiBEaXR0by4KKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZ2NjL2FzIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQ2NCBhc3NlbWJseQorCWltcGxlbWVudGF0aW9ucy4KKworMjAxMy0wNi0wOSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCU9wdGltaXplIF9nY3J5X2J1cm5fc3RhY2sgZm9yIDMyLWJpdCBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZXMuCisJKiBzcmMvbWlzYy5jIChfZ2NyeV9idXJuX3N0YWNrKTogQWRkIG9wdGltaXphdGlvbiBmb3IgMzItYml0IGFuZCA2NC1iaXQKKwlhcmNoaXRlY3R1cmVzLgorCisJQWRkIENhbWVsbGlhIEFFUy1OSS9BVlgyIGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUycuCisJKiBjaXBoZXIvY2FtZWxsaWEtYWVzbmktYXZ4Mi1hbWQ2NC5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKFVTRV9BRVNOSV9BVlgyKTogTmV3IG1hY3JvLgorCShDQU1FTExJQV9jb250ZXh0KSBbVVNFX0FFU05JX0FWWDJdOiBBZGQgJ3VzZV9hZXNuaV9hdngyJy4KKwlbVVNFX0FFU05JX0FWWDJdIChfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2N0cl9lbmMpCisJKF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYykKKwkoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jZmJfZGVjKTogTmV3IHByb3RvdHlwZXMuCisJKGNhbWVsbGlhX3NldGtleSkgW1VTRV9BRVNOSV9BVlgyXTogQ2hlY2sgQVZYMitBRVMtTkkgY2FwYWJsZSBoYXJkd2FyZQorCWFuZCBzZXQgJ2N0eC0+dXNlX2Flc25pX2F2eDInLgorCShfZ2NyeV9jYW1lbGxpYV9jdHJfZW5jKSBbVVNFX0FFU05JX0FWWDJdOiBBZGQgQVZYMiBhY2NlbGVyYXRlZCBjb2RlLgorCShfZ2NyeV9jYW1lbGxpYV9jYmNfZGVjKSBbVVNFX0FFU05JX0FWWDJdOiBBZGQgQVZYMiBhY2NlbGVyYXRlZCBjb2RlLgorCShfZ2NyeV9jYW1lbGxpYV9jZmJfZGVjKSBbVVNFX0FFU05JX0FWWDJdOiBBZGQgQVZYMiBhY2NlbGVyYXRlZCBjb2RlLgorCShzZWxmdGVzdF9jdHJfMTI4LCBzZWxmdGVzdF9jYmNfMTI4LCBzZWxmdGVzdF9jZmJfMTI4KTogR3JvdyAnbmJsb2NrcycKKwlzbyB0aGF0IEFWWDIgY29kZXBhdGhzIGdldCB0ZXN0ZWQuCisJKiBjb25maWd1cmUuYWMgKGNhbWVsbGlhKSBbYXZ4MnN1cHBvcnQsIGFlc25pc3VwcG9ydF06IEFkZAorCSdjYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LmxvJy4KKworCUFkZCBTZXJwZW50IEFWWDIgaW1wbGVtZW50YXRpb24uCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnc2VycGVudC1hdngyLWFtZDY0LlMnLgorCSogY2lwaGVyL3NlcnBlbnQtYXZ4Mi1hbWQ2NC5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9zZXJwZW50LmMgKFVTRV9BVlgyKTogTmV3IG1hY3JvLgorCShzZXJwZW50X2NvbnRleHRfdCkgW1VTRV9BVlgyXTogQWRkICd1c2VfYXZ4MicuCisJW1VTRV9BVlgyXSAoX2djcnlfc2VycGVudF9hdngyX2N0cl9lbmMsIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jYmNfZGVjKQorCShfZ2NyeV9zZXJwZW50X2F2eDJfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGVzLgorCShzZXJwZW50X3NldGtleV9pbnRlcm5hbCkgW1VTRV9BVlgyXTogQ2hlY2sgZm9yIEFWWDIgY2FwYWJsZSBoYXJkd2FyZQorCWFuZCBzZXQgJ3VzZV9hdngyJy4KKwkoX2djcnlfc2VycGVudF9jdHJfZW5jKSBbVVNFX0FWWDJdOiBVc2UgQVZYMiBhY2NlbGVyYXRlZCBmdW5jdGlvbnMuCisJKF9nY3J5X3NlcnBlbnRfY2JjX2RlYykgW1VTRV9BVlgyXTogVXNlIEFWWDIgYWNjZWxlcmF0ZWQgZnVuY3Rpb25zLgorCShfZ2NyeV9zZXJwZW50X2NmYl9kZWMpIFtVU0VfQVZYMl06IFVzZSBBVlgyIGFjY2VsZXJhdGVkIGZ1bmN0aW9ucy4KKwkoc2VsZnRlc3RfY3RyXzEyOCwgc2VsZnRlc3RfY2JjXzEyOCwgc2VsZnRlc3RfY2ZiXzEyOCk6IEdyb3cgJ25ibG9ja3MnCisJc28gdGhhdCBBVlgyIGNvZGVwYXRocyBhcmUgdGVzdGVkLgorCSogY29uZmlndXJlLmFjIChzZXJwZW50KSBbYXZ4MnN1cHBvcnRdOiBBZGQgJ3NlcnBlbnQtYXZ4Mi1hbWQ2NC5sbycuCisKKwlBZGQgZGV0ZWN0aW9uIGZvciBJbnRlbCBBVlgyIGluc3RydWN0aW9uIHNldC4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbiAtLWRpc2FibGUtYXZ4Mi1zdXBwb3J0LgorCShIQVZFX0dDQ19JTkxJTkVfQVNNX0FWWDIpOiBOZXcuCisJKEVOQUJMRV9BVlgyX1NVUFBPUlQpOiBOZXcuCisJKiBzcmMvZzEwbGliLmggKEhXRl9JTlRFTF9BVlgyKTogTmV3LgorCSogc3JjL2dsb2JhbC5jIChod2ZsaXN0KTogQWRkIEhXRl9JTlRFTF9BVlgyLgorCSogc3JjL2h3Zi14ODYuYyBbX19pMzg2X19dIChnZXRfY3B1aWQpOiBJbml0aWFsaXplIHJlZ2lzdGVycyB0byB6ZXJvCisJYmVmb3JlIGNwdWlkLgorCVtfX3g4Nl82NF9fXSAoZ2V0X2NwdWlkKTogSW5pdGlhbGl6ZSByZWdpc3RlcnMgdG8gemVybyBiZWZvcmUgY3B1aWQuCisJKGRldGVjdF94ODZfZ251Yyk6IFN0b3JlIG1heGltdW0gY3B1aWQgbGV2ZWwuCisJKGRldGVjdF94ODZfZ251YykgW0VOQUJMRV9BVlgyX1NVUFBPUlRdOiBBZGQgZGV0ZWN0aW9uIGZvciBBVlgyLgorCisJdHdvZmlzaDogYWRkIGFtZDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ3R3b2Zpc2gtYW1kNjQuUycuCisJKiBjaXBoZXIvdHdvZmlzaC1hbWQ2NC5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci90d29maXNoLmMgKFVTRV9BTUQ2NF9BU00pOiBOZXcgbWFjcm8uCisJW1VTRV9BTUQ2NF9BU01dIChfZ2NyeV90d29maXNoX2FtZDY0X2VuY3J5cHRfYmxvY2spCisJKF9nY3J5X3R3b2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jaywgX2djcnlfdHdvZmlzaF9hbWQ2NF9jdHJfZW5jKQorCShfZ2NyeV90d29maXNoX2FtZDY0X2NiY19kZWMsIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY2ZiX2RlYyk6IE5ldworCXByb3RvdHlwZXMuCisJW1VTRV9BTUQ2NF9BU01dIChkb190d29maXNoX2VuY3J5cHQsIGRvX3R3b2Zpc2hfZGVjcnlwdCkKKwkodHdvZmlzaF9lbmNyeXB0LCB0d29maXNoX2RlY3J5cHQpOiBOZXcgZnVuY3Rpb25zLgorCShfZ2NyeV90d29maXNoX2N0cl9lbmMsIF9nY3J5X3R3b2Zpc2hfY2JjX2RlYywgX2djcnlfdHdvZmlzaF9jZmJfZGVjKQorCShzZWxmdGVzdF9jdHIsIHNlbGZ0ZXN0X2NiYywgc2VsZnRlc3RfY2ZiKTogTmV3IGZ1bmN0aW9ucy4KKwkoc2VsZnRlc3QpOiBDYWxsIG5ldyBidWxrIHNlbGZ0ZXN0cy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3BlbikgW1VTRV9UV09GSVNIXTogUmVnaXN0ZXIgVHdvZmlzaAorCWJ1bGsgZnVuY3Rpb25zIGZvciBjdHItZW5jLCBjYmMtZGVjIGFuZCBjZmItZGVjLgorCSogY29uZmlndXJlLmFjICh0d29maXNoKSBbeDg2XzY0XTogQWRkICd0d29maXNoLWFtZDY0LmxvJy4KKwkqIHNyYy9jaXBoZXIuaCAoX2djcnlfdHdvZmlzaF9jdHJfZW5jLCBfZ2NyeV90d29maXNoX2NiY19kZWMpCisJKGdjcnlfdHdvZmlzaF9jZmJfZGVjKTogTmV3IHByb3RvdHlwZXMuCisKKzIwMTMtMDUtMjkgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlyaW5qZGFlbDogYWRkIGFtZDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBBZGQgJ3Jpam5kYWVsLWFtZDY0LlMnLgorCSogY2lwaGVyL3Jpam5kYWVsLWFtZDY0LlM6IE5ldyBmaWxlLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgKFVTRV9BTUQ2NF9BU00pOiBOZXcgbWFjcm8uCisJW1VTRV9BTUQ2NF9BU01dIChfZ2NyeV9hZXNfYW1kNjRfZW5jcnlwdF9ibG9jaykKKwkoX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2spOiBOZXcgcHJvdG90eXBlcy4KKwkoZG9fZW5jcnlwdF9hbGlnbmVkKSBbVVNFX0FNRDY0X0FTTV06IFVzZSBhbWQ2NCBhc3NlbWJseSBmdW5jdGlvbi4KKwkoZG9fZW5jcnlwdCk6IERpc2FibGUgaW5wdXQvb3V0cHV0IGFsaWdubWVudCB3aGVuIFVTRV9BTUQ2NF9BU00gaXMgc2V0LgorCShkb19kZWNyeXB0X2FsaWduZWQpIFtVU0VfQU1ENjRfQVNNXTogVXNlIGFtZDY0IGFzc2VtYmx5IGZ1bmN0aW9uLgorCShkb19kZWNyeXB0KTogRGlzYWJsZSBpbnB1dC9vdXRwdXQgYWxpZ25tZW50IHdoZW4gVVNFX0FNRDY0X0FFUyBpcyBzZXQuCisJKiBjb25maWd1cmUuYWMgKGFlcykgW3g4Ni02NF06IEFkZCAncmlqbmRhZWwtYW1kNjQubG8nLgorCisJYmxvd2Zpc2g6IGFkZCBhbWQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbTogQWRkICdibG93ZmlzaC1hbWQ2NC5TJy4KKwkqIGNpcGhlci9ibG93ZmlzaC1hbWQ2NC5TOiBOZXcgZmlsZS4KKwkqIGNpcGhlci9ibG93ZmlzaC5jIChVU0VfQU1ENjRfQVNNKTogTmV3IG1hY3JvLgorCVtVU0VfQU1ENjRfQVNNXSAoX2djcnlfYmxvd2Zpc2hfYW1kNjRfZG9fZW5jcnlwdCkKKwkoX2djcnlfYmxvd2Zpc2hfYW1kNjRfZW5jcnlwdF9ibG9jaykKKwkoX2djcnlfYmxvd2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jaywgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY3RyX2VuYykKKwkoX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2JjX2RlYywgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2ZiX2RlYyk6IE5ldworCXByb3RvdHlwZXMuCisJW1VTRV9BTUQ2NF9BU01dIChkb19lbmNyeXB0LCBkb19lbmNyeXB0X2Jsb2NrLCBkb19kZWNyeXB0X2Jsb2NrKQorCShlbmNyeXB0X2Jsb2NrLCBkZWNyeXB0X2Jsb2NrKTogTmV3IGZ1bmN0aW9ucy4KKwkoX2djcnlfYmxvd2Zpc2hfY3RyX2VuYywgX2djcnlfYmxvd2Zpc2hfY2JjX2RlYykKKwkoX2djcnlfYmxvd2Zpc2hfY2ZiX2RlYywgc2VsZnRlc3RfY3RyLCBzZWxmdGVzdF9jYmMsIHNlbGZ0ZXN0X2NmYik6IE5ldworCWZ1bmN0aW9ucy4KKwkoc2VsZnRlc3QpOiBDYWxsIG5ldyBidWxrIHNlbGZ0ZXN0cy4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3BlbikgW1VTRV9CTE9XRklTSF06IFJlZ2lzdGVyIEJsb3dmaXNoCisJYnVsayBmdW5jdGlvbnMgZm9yIGN0ci1lbmMsIGNiYy1kZWMgYW5kIGNmYi1kZWMuCisJKiBjb25maWd1cmUuYWMgKGJsb3dmaXNoKSBbeDg2XzY0XTogQWRkICdibG93ZmlzaC1hbWQ2NC5sbycuCisJKiBzcmMvY2lwaGVyLmggKF9nY3J5X2Jsb3dmaXNoX2N0cl9lbmMsIF9nY3J5X2Jsb3dmaXNoX2NiY19kZWMpCisJKGdjcnlfYmxvd2Zpc2hfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGVzLgorCisyMDEzLTA1LTI0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCWVjYzogU2ltcGxpZnkgdGhlIGNvbXBsaWFudCBwb2ludCBnZW5lcmF0aW9uLgorCSogY2lwaGVyL2VjYy5jIChnZW5lcmF0ZV9rZXkpOiBVc2UgcG9pbnRfc25hdGNoX3NldCwgcmVwbGFjZXMgdW5uZWVkZWQKKwl2YXJpYWJsZSBjb3BpZXMsIGV0Yy4KKworCWVjYzogRml4IGEgbWlub3IgZmxhdyBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBLLgorCSogY2lwaGVyL2RzYS5jIChnZW5fayk6IEZhY3RvciBjb2RlIG91dCB0byAuLgorCSogY2lwaGVyL2RzYS1jb21tb24uYyAoX2djcnlfZHNhX2dlbl9rKTogbmV3IGZpbGUgYW5kIGZ1bmN0aW9uLiAgQWRkCisJYXJnIHNlY3VyaXR5X2xldmVsIGFuZCByZS1pbmRlbnQgYSBiaXQuCisJKiBjaXBoZXIvZWNjLmMgKGdlbl9rKTogUmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byBfZ2NyeV9kc2FfZ2VuX2suCisJKiBjaXBoZXIvZHNhLmM6IEluY2x1ZGUgcHVia2V5LWludGVybmFsLgorCSogY2lwaGVyL01ha2VmaWxlLmFtIChsaWJjaXBoZXJfbGFfU09VUkNFUyk6IEFkZCBkc2EtY29tbW9uLmMKKworMjAxMy0wNS0yNCAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCWNhc3Q1OiBhZGQgYW1kNjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24uCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCAnY2FzdDUtYW1kNjQuUycuCisJKiBjaXBoZXIvY2FzdDUtYW1kNjQuUzogTmV3IGZpbGUuCisJKiBjaXBoZXIvY2FzdDUuYyAoVVNFX0FNRDY0X0FTTSk6IE5ldyBtYWNyby4KKwkoX2djcnlfY2FzdDVfczF0b3M0KTogTWVyZ2UgYXJyYXlzIHMxLCBzMiwgczMsIHM0IHRvIHNpbmdsZSBhcnJheSB0bworCXNpbXBsaWZ5IGFjY2VzcyBmcm9tIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLgorCShzMSwgczIsIHMzLCBzNCk6IE5ldyBtYWNyb3MgcG9pbnRpbmcgdG8gc3ViYXJyYXlzIGluCisJX2djcnlfY2FzdDVfczF0b3M0LgorCVtVU0VfQU1ENjRfQVNNXSAoX2djcnlfY2FzdDVfYW1kNjRfZW5jcnlwdF9ibG9jaykKKwkoX2djcnlfY2FzdDVfYW1kNjRfZGVjcnlwdF9ibG9jaywgX2djcnlfY2FzdDVfYW1kNjRfY3RyX2VuYykKKwkoX2djcnlfY2FzdDVfYW1kNjRfY2JjX2RlYywgX2djcnlfY2FzdDVfYW1kNjRfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGVzLgorCVtVU0VfQU1ENjRfQVNNXSAoZG9fZW5jcnlwdF9ibG9jaywgZG9fZGVjcnlwdF9ibG9jaywgZW5jcnlwdF9ibG9jaykKKwkoZGVjcnlwdF9ibG9jayk6IE5ldyBmdW5jdGlvbnMuCisJKF9nY3J5X2Nhc3Q1X2N0cl9lbmMsIF9nY3J5X2Nhc3Q1X2NiY19kZWMsIF9nY3J5X2Nhc3Q1X2NmYl9kZWMpCisJKHNlbGZ0ZXN0X2N0ciwgc2VsZnRlc3RfY2JjLCBzZWxmdGVzdF9jZmIpOiBOZXcgZnVuY3Rpb25zLgorCShzZWxmdGVzdCk6IENhbGwgbmV3IGJ1bGsgc2VsZnRlc3RzLgorCSogY2lwaGVyL2NpcGhlci5jIChnY3J5X2NpcGhlcl9vcGVuKSBbVVNFX0NBU1Q1XTogUmVnaXN0ZXIgQ0FTVDUgYnVsaworCWZ1bmN0aW9ucyBmb3IgY3RyLWVuYywgY2JjLWRlYyBhbmQgY2ZiLWRlYy4KKwkqIGNvbmZpZ3VyZS5hYyAoY2FzdDUpIFt4ODZfNjRdOiBBZGQgJ2Nhc3Q1LWFtZDY0LmxvJy4KKwkqIHNyYy9jaXBoZXIuaCAoX2djcnlfY2FzdDVfY3RyX2VuYywgX2djcnlfY2FzdDVfY2JjX2RlYykKKwkoZ2NyeV9jYXN0NV9jZmJfZGVjKTogTmV3IHByb3RvdHlwZXMuCisKKwljaXBoZXItc2VsZnRlc3Q6IG1ha2Ugc2VsZnRlc3Qgd29yayB3aXRoIGFueSBibG9jay1zaXplLgorCSogY2lwaGVyL2NpcGhlci1zZWxmdGVzdC5jIChfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2JjXzEyOCkKKwkoX2djcnlfc2VsZnRlc3RfaGVscGVyX2NmYl8xMjgsIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jdHJfMTI4KTogUmVuYW1lZAorCWZ1bmN0aW9ucyBmcm9tICc8bmFtZT5fMTI4JyB0byAnPG5hbWU+Jy4KKwkoX2djcnlfc2VsZnRlc3RfaGVscGVyX2NiYywgX2djcnlfc2VsZnRlc3RfaGVscGVyX2NmYikKKwkoX2djcnlfc2VsZnRlc3RfaGVscGVyX2N0cik6IE1ha2Ugd29yayB3aXRoIGRpZmZlcmVudCBibG9jayBzaXplcy4KKwkqIGNpcGhlci9jaXBoZXItc2VsZnRlc3QuaCAoX2djcnlfc2VsZnRlc3RfaGVscGVyX2NiY18xMjgpCisJKF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jZmJfMTI4LCBfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyXzEyOCk6IFJlbmFtZWQKKwlwcm90b3R5cGVzIGZyb20gJzxuYW1lPl8xMjgnIHRvICc8bmFtZT4nLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoc2VsZnRlc3RfY3RyXzEyOCwgc2VsZnRlc3RfY2ZiXzEyOCkKKwkoc2VsZnRlc3RfY3RyXzEyOCk6IENoYW5nZSB0byB1c2UgbmV3IGZ1bmN0aW9uIG5hbWVzLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgKHNlbGZ0ZXN0X2N0cl8xMjgsIHNlbGZ0ZXN0X2NmYl8xMjgpCisJKHNlbGZ0ZXN0X2N0cl8xMjgpOiBDaGFuZ2UgdG8gdXNlIG5ldyBmdW5jdGlvbiBuYW1lcy4KKwkqIGNpcGhlci9zZXJwZW50LmMgKHNlbGZ0ZXN0X2N0cl8xMjgsIHNlbGZ0ZXN0X2NmYl8xMjgpCisJKHNlbGZ0ZXN0X2N0cl8xMjgpOiBDaGFuZ2UgdG8gdXNlIG5ldyBmdW5jdGlvbiBuYW1lcy4KKworMjAxMy0wNS0yMyAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKworCXNlcnBlbnQ6IGFkZCBwYXJhbGxlbCBwcm9jZXNzaW5nIGZvciBDRkIgZGVjcnlwdGlvbi4KKwkqIGNpcGhlci9jaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3Blbik6IEFkZCBidWxmIENGQiBkZWNyeXB0aW9uIGZ1bmN0aW9uCisJZm9yIFNlcnBlbnQuCisJKiBjaXBoZXIvc2VycGVudC1zc2UyLWFtZDY0LlMgKF9nY3J5X3NlcnBlbnRfc3NlMl9jZmJfZGVjKTogTmV3CisJZnVuY3Rpb24uCisJKiBjaXBoZXIvc2VycGVudC5jIChfZ2NyeV9zZXJwZW50X3NzZTJfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGUuCisJKF9nY3J5X3NlcnBlbnRfY2ZiX2RlYykgTmV3IGZ1bmN0aW9uLgorCShzZWxmdGVzdF9jZmJfMTI4KSBOZXcgZnVuY3Rpb24uCisJKHNlbGZ0ZXN0KSBDYWxsIHNlbGZ0ZXN0X2NmYl8xMjguCisJKiBzcmMvY2lwaGVyLmggKF9nY3J5X3NlcnBlbnRfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGUuCisKKwljYW1lbGxpYTogYWRkIHBhcmFsbGVsIHByb2Nlc3NpbmcgZm9yIENGQiBkZWNyeXB0aW9uLgorCSogY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5TCisJKF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jZmJfZGVjKTogTmV3IGZ1bmN0aW9uLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NmYl9kZWMpOiBOZXcKKwlwcm90b3R5cGUuCisJKF9nY3J5X2NhbWVsbGlhX2NmYl9kZWMpOiBOZXcgZnVuY3Rpb24uCisJKHNlbGZ0ZXN0X2NmYl8xMjgpOiBOZXcgZnVuY3Rpb24uCisJKHNlbGZ0ZXN0KTogQ2FsbCBzZWxmdGVzdF9jZmJfMTI4LgorCSogY2lwaGVyL2NpcGhlci5jIChncnlfY2lwaGVyX29wZW4pOiBBZGQgYnVsayBDRkIgZGVjcnlwdGlvbiBmdW5jdGlvbgorCWZvciBDYW1lbGxpYS4KKwkqIHNyYy9jaXBoZXIuaCAoX2djcnlfY2FtZWxsaWFfY2ZiX2RlYyk6IE5ldyBwcm90b3R5cGUuCisKKwlyaW5qZGFlbDogYWRkIHBhcmFsbGVsIHByb2Nlc3NpbmcgZm9yIENGQiBkZWNyeXB0aW9uIHdpdGggQUVTLU5JLgorCSogY2lwaGVyL2NpcGhlci1zZWxmdGVzdC5jIChfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2ZiXzEyOCk6IE5ldworCWZ1bmN0aW9uIGZvciBDRkIgc2VsZnRlc3RzLgorCSogY2lwaGVyL2NpcGhlci1zZWxmdGVzdC5oIChfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2ZiXzEyOCk6IE5ldworCXByb3RvdHlwZS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIFtVU0VfQUVTTkldIChkb19hZXNuaV9lbmNfdmVjNCk6IE5ldyBmdW5jdGlvbi4KKwkoX2djcnlfYWVzX2NmYl9kZWMpIFtVU0VfQUVTTkldOiBBZGQgcGFyYWxsZWxpemVkIENGQiBkZWNyeXB0aW9uLgorCShzZWxmdGVzdF9jZmJfMTI4KTogTmV3IGZ1bmN0aW9uLgorCShzZWxmdGVzdCk6IENhbGwgc2VsZnRlc3RfY2ZiXzEyOC4KKworMjAxMy0wNS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlBdm9pZCBjb21waWxlciB3YXJuaW5nIGR1ZSB0byB0aGUgZ2xvYmFsIHN5bWJvbCBzZXRrZXkuCisJKiBjaXBoZXIvY2lwaGVyLXNlbGZ0ZXN0LmMgKF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jYmNfMTI4KQorCShfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyXzEyOCk6IFJlbmFtZSBzZXRrZXkgdG8gc2V0a2V5X2Z1bmMuCisKKzIwMTMtMDUtMjMgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlzZXJwZW50OiBhZGQgU1NFMiBhY2NlbGVyYXRlZCBhbWQ2NCBpbXBsZW1lbnRhdGlvbi4KKwkqIGNvbmZpZ3VyZS5hYyAoc2VycGVudCk6IEFkZCAnc2VycGVudC1zc2UyLWFtZDY0LmxvJy4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbSAoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQKKwknc2VycGVudC1zc2UyLWFtZDY0LlMnLgorCSogY2lwaGVyL2NpcGhlci5jIChnY3J5X2NpcGhlcl9vcGVuKSBbVVNFX1NFUlBFTlRdOiBSZWdpc3RlciBidWxrCisJZnVuY3Rpb25zIGZvciBDQkMtZGVjcnlwdGlvbiBhbmQgQ1RSLW1vZGUuCisJKiBjaXBoZXIvc2VycGVudC5jIChVU0VfU1NFMik6IE5ldyBtYWNyby4KKwlbVVNFX1NTRTJdIChfZ2NyeV9zZXJwZW50X3NzZTJfY3RyX2VuYywgX2djcnlfc2VycGVudF9zc2UyX2NiY19kZWMpOgorCU5ldyBwcm90b3R5cGVzIHRvIGFzc2VtYmxlciBmdW5jdGlvbnMuCisJKHNlcnBlbnRfc2V0a2V5KTogU2V0ICdzZXJwZW50X2luaXRfZG9uZScgYmVmb3JlIGNhbGxpbmcgc2VycGVudF90ZXN0LgorCShfZ2NyeV9zZXJwZW50X2N0cl9lbmMpOiBOZXcgZnVuY3Rpb24uCisJKF9nY3J5X3NlcnBlbnRfY2JjX2RlYyk6IE5ldyBmdW5jdGlvbi4KKwkoc2VsZnRlc3RfY3RyXzEyOCk6IE5ldyBmdW5jdGlvbi4KKwkoc2VsZnRlc3RfY2JjXzEyOCk6IE5ldyBmdW5jdGlvbi4KKwkoc2VsZnRlc3QpOiBDYWxsIHNlbGZ0ZXN0X2N0cl8xMjggYW5kIHNlbGZ0ZXN0X2NiY18xMjguCisJKiBjaXBoZXIvc2VycGVudC1zc2UyLWFtZDY0LlM6IE5ldyBmaWxlLgorCSogc3JjL2NpcGhlci5oIChfZ2NyeV9zZXJwZW50X2N0cl9lbmMpOiBOZXcgcHJvdG90eXBlLgorCShfZ2NyeV9zZXJwZW50X2NiY19kZWMpOiBOZXcgcHJvdG90eXBlLgorCisJU2VycGVudDogZmFzdGVyIFMtYm94IGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL3NlcnBlbnQuYyAoU0JPWDAsIFNCT1gxLCBTQk9YMiwgU0JPWDMsIFNCT1g0LCBTQk9YNSwgU0JPWDYpCisJKFNCT1g3LCBTQk9YMF9JTlZFUlNFLCBTQk9YMV9JTlZFUlNFLCBTQk9YMl9JTlZFUlNFLCBTQk9YM19JTlZFUlNFKQorCShTQk9YNF9JTlZFUlNFLCBTQk9YNV9JTlZFUlNFLCBTQk9YNl9JTlZFUlNFLCBTQk9YN19JTlZFUlNFKTogUmVwbGFjZQorCXdpdGggbmV3IGRlZmluaXRpb25zLgorCisyMDEzLTA1LTIyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCXczMjogRml4IGluc3RhbGxpbmcgb2YgLmRlZiBmaWxlLgorCSogc3JjL01ha2VmaWxlLmFtIChpbnN0YWxsLWRlZi1maWxlKTogQ3JlYXRlIGxpYmRpciBmaXJzdC4KKworCUFkZCBjb250cm9sIGNvbW1hbmRzIHRvIGRpc2FibGUgbWxvY2sgYW5kIHNldHVpZCBkcm9wcGluZy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWUNUTF9ESVNBQkxFX0xPQ0tFRF9TRUNNRU0pOiBOZXcuCisJKEdDUllDVExfRElTQUJMRV9QUklWX0RST1ApOiBOZXcuCisJKiBzcmMvZ2xvYmFsLmMgKF9nY3J5X3Zjb250cm9sKTogSW1wbGVtZW50IHRoZW0uCisJKiBzcmMvc2VjbWVtLmggKEdDUllfU0VDTUVNX0ZMQUdfTk9fTUxPQ0spOiBOZXcuCisJKEdDUllfU0VDTUVNX0ZMQUdfTk9fUFJJVl9EUk9QKTogTmV3LgorCSogc3JjL3NlY21lbS5jIChub19tbG9jaywgbm9fcHJpdl9kcm9wKTogTmV3LgorCShfZ2NyeV9zZWNtZW1fc2V0X2ZsYWdzLCBfZ2NyeV9zZWNtZW1fZ2V0X2ZsYWdzKTogU2V0IGFuZCBnZXQgdGhlbS4KKwkobG9ja19wb29sKTogSGFuZGxlIG5vX21sb2NrIGFuZCBub19wcml2X2Ryb3AuCisKKwlGaXggbGlidG9vbCAyLjQuMiB0byBjb3JyZWN0bHkgZGV0ZWN0IC5kZWYgZmlsZXMuCisJKiBsdG1haW4uc2ggKHNlZF91bmNvbW1lbnRfZGVmZmlsZSk6IE5ldy4KKwkob3JpZ19leHBvcnRfc3ltYm9scyk6IFVuY29tbWVudCBkZWYgZmlsZSBiZWZvcmUgdGVzdGluZyBmb3IgRVhQT1JUUy4KKwkqIG00L2xpYnRvb2wubTQ6IERvIHRoZSBzYW1lIGZvciB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKzIwMTMtMDUtMjIgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKKwlBZGQgQUVTIGJ1bGsgQ0JDIGRlY3J5cHRpb24gc2VsZnRlc3QuCisJKiBjaXBoZXIvcmluamRhZWwuYyAoc2VsZnRlc3RfY2JjXzEyOCk6IE5ldy4KKwkoc2VsZnRlc3QpOiBDYWxsIHNlbGZ0ZXN0X2NiY18xMjguCisKKwlDaGFuZ2UgQUVTIGJ1bGsgQ1RSIGVuY3J5cHRpb24gc2VsZnRlc3QgdXNlIG5ldyBzZWxmdGVzdCBoZWxwZXIgZnVuY3Rpb24KKwkqIGNpcGhlci9yaW5qZGFlbC5jOiAoc2VsZnRlc3RfY3RyXzEyOCk6IENoYW5nZSB0byB1c2UgbmV3IHNlbGZ0ZXN0CisJaGVscGVyIGZ1bmN0aW9uLgorCisJQ29udmVydCBidWxrIENUUiBhbmQgQ0JDIHNlbGZ0ZXN0IGZ1bmN0aW9ucyBpbiBDYW1lbGxpYSB0byBnZW5lcmljIHNlbGZ0ZXN0IGhlbHBlciBmdW5jdGlvbnMKKwkqIGNpcGhlci9NYWtlZmlsZS5hbSAobGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQgY2lwaGVyLXNlbGZ0ZXN0IGZpbGVzLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoc2VsZnRlc3RfY3RyXzEyOCwgc2VsZnRlc3RfY2JjXzEyOCk6IENoYW5nZQorCXRvIHVzZSB0aGUgbmV3IHNlbGZ0ZXN0IGhlbHBlciBmdW5jdGlvbnMuCisJKiBjaXBoZXIvY2lwaGVyLXNlbGZ0ZXN0LmM6IE5ldy4KKwkqIGNpcGhlci9jaXBoZXItc2VsZnRlc3QuaDogTmV3LgorCisJY2FtZWxsaWE6IGFkZCBidWxrIENCQyBkZWNyeXB0aW9uIHNlbGZ0ZXN0LgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYzogKHNlbGZ0ZXN0X2NiY18xMjgpOiBOZXcgc2VsZnRlc3QgZnVuY3Rpb24gZm9yCisJYnVsayBDQkMgZGVjcnlwdGlvbi4KKwkoc2VsZnRlc3QpOiBBZGQgY2FsbCB0byBzZWxmdGVzdF9jYmNfMTI4LgorCisJY2FtZWxsaWE6IFJlbmFtZSBjYW1lbGxpYV9hZXNuaV9hdnhfeDg2LTY0LlMgdG8gY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LlMKKwkqIGNpcGhlci9jYW1lbGxpYV9hZXNuaV9hdnhfeDg2LTY0LlM6IFJlbW92ZS4KKwkqIGNpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQuUzogTmV3LgorCSogY2lwaGVyL01ha2VmaWxlLmFtOiBVc2UgdGhlIG5ldyBmaWxlbmFtZS4KKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHRoZSBuZXcgZmlsZW5hbWUuCisKKzIwMTMtMDUtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJRml4IGluZGVudGF0aW9uIGFuZCBzYXZlIG9uIHN0cmluZyBzcGFjZS4KKwkqIGNpcGhlci9lY2MuYyAoZ2VuZXJhdGVfa2V5KTogVXNlIHRoZSBzYW1lIHN0cmluZyBmb3IgYm90aCBmYXRhbAorCW1lc3NhZ2VzLgorCisyMDEzLTA1LTIwICBBbmRyZXkgIDxhbmRyZXlAYnJhaW5odWIub3JnPgorCisJY2lwaGVyOiBGaXggc2VndiBpbiBsYXN0IEVDQyBjaGFuZ2UuCisJKiBjaXBoZXIvZWNjLmMgKGdlbmVyYXRlX2tleSk6IE1ha2Ugc3VyZSBSIGlzIGluaXRpYWxpemVkLgorCisyMDEzLTA1LTA5ICBBbmRyZXkgIDxhbmRyZXlAYnJhaW5odWIub3JnPgorCisJY2lwaGVyOiBHZW5lcmF0ZSBjb21wbGlhbnQgRUNDIGtleXMuCisJKiBjaXBoZXIvZWNjLmMgKGdlbmVyYXRlX2tleSk6IE1ha2Ugc3VyZSBhIGtleSBpcyBjb21wbGlhbnQgZm9yCisJdXNpbmcgdGhlIGNvbXBhY3QgcmVwcmVzZW50YXRpb24uCisKKzIwMTMtMDQtMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJY2lwaGVyOiBGaXggcmVncmVzc2lvbiBpbiBQYWRsb2NrIHN1cHBvcnQuCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoZG9fc2V0a2V5KTogUmVtb3ZlIGR1bW15IHBhZGxvY2sga2V5IGdlbmVyYXRpb24gY2FzZQorCWFuZCB1c2UgdGhlIHN0YW5kYXJkIG9uZS4KKworCW1waTogWWV0IGFub3RoZXIgZml4IHRvIGdldCBvcHRpb24gZmxhZyBtdW5naW5nIHJpZ2h0LgorCSogY2lwaGVyL01ha2VmaWxlLmFtIChvX2ZsYWdfbXVuZ2luZyk6IFlldCBhbm90aGVyIGZpeC4KKworCW1waTogTWFrZSB1c2luZyBnY2MncyAtT2Zhc3QgZWFzaWVyLgorCSogY2lwaGVyL01ha2VmaWxlLmFtIChvX2ZsYWdfbXVuZ2luZyk6IFRha2UgLU9mYXN0IGluIGFjY291bnQuCisKKwlGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gaWRlYS5jLgorCSogY2lwaGVyL2lkZWEuYyAoY2lwaGVyKTogUmV3b3JrIHBhcmFtZXRlciB1c2UgdG8gZml4IGFsaWdubWVudAorCXByb2JsZW1zLgorCisJKiBjaXBoZXIvaWRlYS5jIChGTkNDQVNUX1NFVEtFWSwgRk5DQ0FTVF9DUllQVCk6IFJlbW92ZSB1bnVzZWQgbWFjcm9zLgorCisJRml4IGFsaWdubWVudCBwcm9ibGVtIGluIGlkZWEuYy4KKworCSogY2lwaGVyL2lkZWEuYyAoY2lwaGVyKTogUmV3b3JrIHBhcmFtZXRlciB1c2UgdG8gZml4IGFsaWdubWVudAorCXByb2JsZW1zLgorCisJKiBjaXBoZXIvaWRlYS5jIChGTkNDQVNUX1NFVEtFWSwgRk5DQ0FTVF9DUllQVCk6IFJlbW92ZSB1bnVzZWQgbWFjcm9zLgorCisKKwkoY2hlcnJ5IHBpY2tlZCBmcm9tIDRjZDI3OTU1Njc3N2UwMmVkYTc5OTczZjY4ZWZhYTRiNzQxZjkxNzUpCisKKzIwMTMtMDQtMTggIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKworCUFkZCBzb21lIGNvbnN0IGF0dHJpYnV0ZXMuCisJKiBjaXBoZXIvbWQ0LmMgKHRyYW5zZm9ybSk6IEFkZCBjb25zdCBhdHRyaWJ1dGUuCisJKiBjaXBoZXIvbWQ1LmMgKHRyYW5zZm9ybSk6IERpdHRvLgorCSogY2lwaGVyL3JtZDE2MC5jICh0cmFuc2Zvcm0pOiBEaXR0by4KKworCUZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBzZXJwZW50LmMuCisJKiBjaXBoZXIvc2VycGVudC5jIChzZXJwZW50X2tleV9wcmVwYXJlKTogRml4IG1pc2FsaWduZWQgYWNjZXNzLgorCShzZXJwZW50X3NldGtleSk6IExpa2V3aXNlLgorCShzZXJwZW50X2VuY3J5cHRfaW50ZXJuYWwpOiBMaWtld2lzZS4KKwkoc2VycGVudF9kZWNyeXB0X2ludGVybmFsKTogTGlrZXdpc2UuCisJKHNlcnBlbnRfZW5jcnlwdCk6IERvbid0IHB1dCBhbiBhbGlnbm1lbnQtaW5jcmVhc2luZyBjYXN0LgorCShzZXJwZW50X2RlY3J5cHQpOiBMaWtld2lzZS4KKwkoc2VycGVudF90ZXN0KTogTGlrZXdpc2UuCisKKzIwMTMtMDQtMTYgIFdlcm5lciBLb2NoICA8d2tAd2hlYXRzdG9uZS5nMTBjb2RlLmRlPgorCisJRml4IG11bHRpcGx5IGJ5IHplcm8gaW4gZ2NyeV9tcGlfZWNfbXVsLgorCSogbXBpL2VjLmMgKF9nY3J5X21waV9lY19tdWxfcG9pbnQpOiBIYW5kbGUgY2FzZSBvZiBTQ0FMQVIgPT0gMC4KKwkqIHRlc3RzL3QtbXBpLXBvaW50LmMgKGJhc2ljX2VjX21hdGgpOiBBZGQgYSB0ZXN0IGNhc2UgZm9yIHRoaXMuCisKKzIwMTMtMDQtMTUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWRkIG1hY3JvcyB0byByZXR1cm4gcHJlLWRlZmluZWQgTVBJcy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWU1QSV9DT05TVF9PTkUsIEdDUllNUElfQ09OU1RfVFdPKQorCShHQ1JZTVBJX0NPTlNUX1RIUkVFLCBHQ1JZTVBJX0NPTlNUX0ZPVVIsIEdDUllNUElfQ09OU1RfRUlHSFQpOiBOZXcuCisJKF9nY3J5X21waV9nZXRfY29uc3QpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbi4KKwkqIHNyYy92aXNpYmlsaXR5LmMgKF9nY3J5X21waV9nZXRfY29uc3QpOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5oOiBNYXJrIGl0IHZpc2libGUuCisKKwlGaXggYWRkaXRpb24gb2YgRUMgcG9pbnRzLgorCSogbXBpL2VjLmMgKF9nY3J5X21waV9lY19hZGRfcG9pbnRzKTogRml4IGNhc2Ugb2YgUDEgZ2l2ZW4gaW4gYWZmaW5lCisJY29vcmRpbmF0ZXMuCisKKzIwMTMtMDQtMTIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWRkIGhhY2sgdG8gYWxsb3cgdXNpbmcgYW4gImVjYyIga2V5IGZvciAiZWNkc2EiIG9yICJlY2RoIi4KKwkqIGNpcGhlci9wdWJrZXkuYyAoc2V4cF90b19rZXkpOiBBZGQgb3B0aW9uYWwgYXJnIFVTRS4KKwkoZ2NyeV9wa19lbmNyeXB0LCBnY3J5X3BrX2RlY3J5cHQpOiBDYWxsIHNleHBfdG9fa2V5IHdpdGggdXNhZ2Ugc2lnbi4KKwkoZ2NyeV9wa19zaWduLCBnY3J5X3BrX3ZlcmlmeSk6IENhbGwgc2V4cF90b19rZXkgd2l0aCB1c2FnZSBlbmNyeXB0LgorCSogdGVzdHMvYmFzaWMuYyAoc2hvd19zZXhwKTogTmV3LgorCShjaGVja19wdWJrZXlfc2lnbik6IFByaW50IHRlc3QgbnVtYmVyIGFuZCBhZGQgY2FzZXMgZm9yIGVjYy4KKwkoY2hlY2tfcHVia2V5X3NpZ25fZWNkc2EpOiBOZXcuCisJKGRvX2NoZWNrX29uZV9wdWJrZXkpOiBEaXZlcnQgdG8gbmV3IGZ1bmN0aW9uLgorCisyMDEzLTA0LTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUFkZCBnY3J5X3B1YmtleV9nZXRfc2V4cC4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWV9QS19HRVRfUFVCS0VZKTogTmV3LgorCShHQ1JZX1BLX0dFVF9TRUNLRVkpOiBOZXcuCisJKGdjcnlfcHVia2V5X2dldF9zZXhwKTogTmV3LgorCSogc3JjL3Zpc2liaWxpdHkuYyAoZ2NyeV9wdWJrZXlfZ2V0X3NleHApOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5oIChnY3J5X3B1YmtleV9nZXRfc2V4cCk6IE1hcmsgdmlzaWJsZS4KKwkqIHNyYy9saWJnY3J5cHQuZGVmLCBzcmMvbGliZ2NyeXB0LnZlcnM6IEFkZCBuZXcgZnVuY3Rpb24uCisJKiBjaXBoZXIvcHVia2V5LWludGVybmFsLmg6IE5ldy4KKwkqIGNpcGhlci9NYWtlZmlsZS5hbSAobGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQgbmV3IGZpbGUuCisJKiBjaXBoZXIvZWNjLmM6IEluY2x1ZGUgcHVia2V5LWludGVybmFsLmgKKwkoX2djcnlfcGtfZWNjX2dldF9zZXhwKTogTmV3LgorCSogY2lwaGVyL3B1YmtleS5jOiBJbmNsdWRlIHB1YmtleS1pbnRlcm5hbC5oIGFuZCBjb250ZXh0LmguCisJKF9nY3J5X3B1YmtleV9nZXRfc2V4cCk6IE5ldy4KKwkqIHNyYy9jb250ZXh0LmMgKF9nY3J5X2N0eF9maW5kX3BvaW50ZXIpOiBOZXcuCisJKiBzcmMvY2lwaGVyLXByb3RvLmg6IEFkZCBfZ2NyeV9wdWJrZXlfZ2V0X3NleHAuCisJKiB0ZXN0cy90LW1waS1wb2ludC5jIChwcmludF9zZXhwKTogTmV3LgorCShjb250ZXh0X3BhcmFtLCBiYXNpY19lY19tYXRoX3NpbXBsaWZpZWQpOiBBZGQgdGVzdHMgZm9yIHRoZSBuZXcKKwlmdW5jdGlvbi4KKworCSogY29uZmlndXJlLmFjIChORUVEX0dQR19FUlJPUl9WRVJTSU9OKTogU2V0IHRvIDEuMTEuCisJKEFIX0JPVFRPTSkgQWRkIGVycm9yIGNvZGVzIGZyb20gZ3BnLWVycm9yIDEuMTIKKwkqIHNyYy9nMTBsaWIuaCAoZmlwc19ub3Rfb3BlcmF0aW9uYWwpOiBVc2UgR1BHX0VSUl9OT1RfT1BFUkFUSU9OQUwuCisKKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfZWNfZ2V0X21waSk6IEZpeCBjb21wdXRhdGlvbiBvZiBRLgorCShfZ2NyeV9tcGlfZWNfZ2V0X3BvaW50KTogRGl0dG8uCisKKwlSZW1vdmUgdW51c2VkIGNvZGUuCisJKiBjaXBoZXIvcHVia2V5LmMgKF9nY3J5X3BrX21vZHVsZV9sb29rdXAsIF9nY3J5X3BrX21vZHVsZV9yZWxlYXNlKQorCShfZ2NyeV9wa19nZXRfZWxlbWVudHMpOiBSZW1vdmUuCisKKzIwMTMtMDQtMDUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJTWFrZSB0aGUgUSBwYXJhbWV0ZXIgb3B0aW9uYWwgZm9yIEVDQyBzaWduaW5nLgorCSogY2lwaGVyL2VjYy5jIChlY2Nfc2lnbik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgUS4KKwkqIGNpcGhlci9wdWJrZXkuYyAoc2V4cF9lbGVtZW50c19leHRyYWN0X2VjYyk6IE1ha2UgUSBvcHRpb25hbCBmb3IgYQorCXByaXZhdGUga2V5LgorCShzZXhwX3RvX2tleSk6IEFkZCBvcHRpb25hbCBhcmcgUl9JU19FQ0MuCisJKGdjcnlfcGtfc2lnbik6IERvIG5vdCBjYWxsIGdjcnlfcGtfZ2V0X25iaXRzIGZvciBFQ0Mga2V5cy4KKwkqIHRlc3RzL3B1YmtleS5jIChkaWUpOiBNYWtlIHN1cmUgdG8gcHJpbnQgYSBMRi4KKwkoY2hlY2tfZWNjX3NhbXBsZV9rZXkpOiBOZXcuCisJKG1haW4pOiBDYWxsIG5ldyB0ZXN0LgorCisJQWRkIHRlc3QgY2FzZSBmb3IgU0NSWVBUIGFuZCByZXdvcmsgdGhlIGNvZGUuCisJKiB0ZXN0cy90LWtkZi5jIChjaGVja19zY3J5cHQpOiBOZXcuCisJKG1haW4pOiBDYWxsIG5ldyB0ZXN0LgorCisJKiBjb25maWd1cmUuYWM6IFN1cHBvcnQgZGlzYWJsaW5nIG9mIHRoZSBzY3J5cHQgYWxnb3JpdGhtLiAgTWFrZSBLREYKKwllbmFibGluZyBzaW1pbGFyIHRvIHRoZSBvdGhlciBhbGdvcml0aG0gY2xhc3Nlcy4gIERpc2FibGUgc2NyeXB0IGlmIHdlCisJZG9uJ3QgaGF2ZSBhIDY0IGJpdCB0eXBlLgorCSogY2lwaGVyL21lbXhvci5jLCBjaXBoZXIvbWVteG9yLmg6IFJlbW92ZS4KKwkqIGNpcGhlci9zY3J5cHQuaDogUmVtb3ZlLgorCSogY2lwaGVyL2tkZi1pbnRlcm5hbC5oOiBOZXcuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IFJlbW92ZSBmaWxlcy4gIEFkZCBuZXcgZmlsZS4gIE1vdmUgc2NyeXB0LmMgdG8KKwlFWFRSQV9saWJjaXBoZXJfbGFfU09VUkNFUy4KKwkoR0NSWVBUX01PRFVMRVMpOiBBZGQgR0NSWVBUX0tERlMuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllfS0RGX1NDUllQVCk6IENoYW5nZSB2YWx1ZS4KKwkqIGNpcGhlci9rZGYuYyAocGtkZjIpOiBSZW5hbWUgdG8gX2djcnlfa2RmX3BrZGYyLgorCShfZ2NyeV9rZGZfcGtkZjIpOiBEb24ndCBiYWlsIG91dCBmb3IgU0FMVExFTj09MC4KKwkoZ2NyeV9rZGZfZGVyaXZlKTogQWxsb3cgZm9yIGEgcGFzc3dvcmRsZW4gb2YgemVybyBmb3Igc2NyeXB0LiAgQ2hlY2sKKwlmb3IgU0FMVExFTiA+IDAgZm9yIEdDUllfS0RGX1BCS0RGMi4gIFBhc3MgYWxnbyB0byBfZ2NyeV9rZGZfc2NyeXB0LgorCShnY3J5X2tkZl9kZXJpdmUpIFshVVNFX1NDUllQVF06IFJldHVybiBhbiBlcnJvci4KKwkqIGNpcGhlci9zY3J5cHQuYzogUmVwbGFjZSBtZW14b3IuaCBieSBidWZoZWxwLmguICBSZXBsYWNlIHNjcnlwdC5oIGJ5CisJa2RmLWludGVybmFsLmguICBFbmFibGUgY29kZSBvbmx5IGlmIEhBVkVfVTY0X1RZUEVERUYgaXMgZGVmaW5lZC4KKwlSZXBsYWNlIEM5OSB0eXBlcyB1aW50NjRfdCwgdWludDMyX3QsIGFuZCB1aW50OF90IGJ5IGxpYmdjcnlwdCB0eXBlcy4KKwkoX1NBTFNBMjBfSU5QVVRfTEVOR1RIKTogUmVtb3ZlIHVuZGVyc2NvcmUgZnJvbSBpZGVudGlmaWVyLgorCShfc2NyeXB0QmxvY2tNaXgpOiBSZXBsYWNlIG1lbXhvciBieSBidWZfeG9yLgorCShfZ2NyeV9rZGZfc2NyeXB0KTogVXNlIGdjcnlfbWFsbG9jIGFuZCBnY3J5X2ZyZWUuICBDaGVjayBmb3IgaW50ZWdlcgorCW92ZXJmbG93LiAgQWRkIGhhY2sgdG8gc3VwcG9ydCBibG9ja3NpemUgb2YgMSBmb3IgdGVzdHMuICBSZXR1cm4KKwllcnJvcnMgZnJvbSBjYWxscyB0byBfZ2NyeV9rZGZfcGtkZjIuCisKKwkqIGNpcGhlci9rZGYuYyAob3BlbnBncF9zMmspOiBNYWtlIHN0YXRpYy4KKworMjAxMy0wNC0wNCAgQ2hyaXN0aWFuIEdyb3Rob2ZmICA8Y2hyaXN0aWFuQGdyb3Rob2ZmLm9yZz4KKworCUFkZCB0aGUgU0NSWVBUIEtERiBmdW5jdGlvbi4KKwkqIHNjcnlwdC5jLCBzY3J5cHQuaDogTmV3IGZpbGVzLgorCSogbWVteG9yLmMsIG1lbXhvci5oOiBOZXcgZmlsZXMuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisJKiBjaXBoZXIva2RmLmMgKGdjcnlfa2RmX2Rlcml2ZSk6IFN1cHBvcnQgR0NSWV9LREZfU0NSWVBULgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZX0tERl9TQ1JZUFQpOiBOZXcuCisKKzIwMTMtMDMtMjIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVwbGFjZSBkZXByZWNhdGVkIEFNX0NPTkZJR19IRUFERVIgbWFjcm8uCisJKiBjb25maWd1cmUuYWM6IHMvQU1fQ09ORklHX0hFQURFUi9BQ19DT05GSUdfSEVBREVSLworCisJRGlzYWJsZSBBRVMtTkkgc3VwcG9ydCBpZiBhcyBkb2VzIG5vdCBzdXBwb3J0IFNTU0UzLgorCSogY29uZmlndXJlLmFjIChIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzKTogTmV3IHRlc3QuCisJKEVOQUJMRV9BRVNOSV9TVVBQT1JUKTogRG8gbm90IGRlZmluZSB3aXRob3V0IFNTU0UzIHN1cHBvcnQuCisJKEhBVkVfR0NDX0lOTElORV9BU01fU1NTRTMsIEVOQUJMRV9BVlhfU1VQUE9SVCk6IFNwbGl0IHVwIGRldGVjdGlvbgorCWFuZCBkZWZpbml0aW9uLgorCisyMDEzLTAzLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUZpeCBtYWtlIGRlcGVuZGVuY3kgcmVncmVzc2lvbi4KKwkqIHNyYy9NYWtlZmlsZS5hbSAobGliZ2NyeXB0X2xhX0RFUEVOREVOQ0lFUyk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KKwlSZXBvcnRlZCBieSBMUk4uCisKKzIwMTMtMDMtMjAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJVXNlIGZpbmVyIGdyYWluZWQgb24tdGhlLWZseSBoZWxwZXIgY29tcHV0YXRpb25zIGZvciBFQy4KKwkqIHNyYy9lYy1jb250ZXh0LmggKG1waV9lY19jdHhfcyk6IFJlcGxhY2UgTkVFRF9TWU5DIGJ5IGEgYml0ZmllbGQuCisJKiBtcGkvZWMuYyAoZWNfcF9zeW5jKTogUmVtb3ZlLgorCShlY19nZXRfcmVzZXQsIGVjX2dldF9hX2lzX3BtaW51czMsIGVjX2dldF90d29faW52X3ApOiBOZXcuCisJKGVjX3BfaW5pdCk6IFVzZSBlY19nZXRfcmVzZXQuCisJKF9nY3J5X21waV9lY19zZXRfbXBpLCBfZ2NyeV9tcGlfZWNfZHVwX3BvaW50KQorCShfZ2NyeV9tcGlfZWNfYWRkX3BvaW50cyk6IFJlcGxhY2UgZWNfcF9zeW5jIGJ5IHRoZSBlY19nZXRfIGFjY2Vzc29ycy4KKworCUFsbG93IGJ1aWxkaW5nIHdpdGggdzY0LW1pbmd3MzIuCisJKiBhdXRvZ2VuLnNoIDwtLWJ1aWxkLXczMj46IFN1cHBvcnQgdGhlIHc2NC1taW5ndzMyIHRvb2xjaGFpbi4gIEFsc28KKwlwcmVwYXJlIGZvciA2NCBiaXQgYnVpbGRpbmcuCisKKwlQcm92aWRlIEdDUllQVF9WRVJTSU9OX05VTUJFUiBtYWNybywgYWRkIGJ1aWxkIGluZm8gdG8gdGhlIGJpbmFyeS4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWVBUX1ZFUlNJT05fTlVNQkVSKTogTmV3LgorCSogY29uZmlndXJlLmFjIChWRVJTSU9OX05VTUJFUik6IE5ldyBhY19zdWJzdC4KKwkqIHNyYy9nbG9iYWwuYyAoX2djcnlfdmNvbnRyb2wpOiBNb3ZlIGNhbGwgdG8gYWJvdmUgZnVuY3Rpb24gLi4uCisJKGdjcnlfY2hlY2tfdmVyc2lvbik6IC4uIGhlcmUuCisKKwkqIGNvbmZpZ3VyZS5hYyAoQlVJTERfUkVWSVNJT04sIEJVSUxEX0ZJTEVWRVJTSU9OKQorCShCVUlMRF9USU1FU1RBTVApOiBEZWZpbmUgb24gYWxsIHBsYXRmb3Jtcy4KKwkqIGNvbXBhdC9jb21wYXQuYyAoX2djcnlfY29tcGF0X2lkZW50aWZpY2F0aW9uKTogSW5jbHVkZSByZXZpc2lvbiBhbmQKKwl0aW1lc3RhbXAuCisKKwlGaXggYSBtZW1vcnkgbGVhayBpbiB0aGUgbmV3IEVDIGNvZGUuCisJKiBjaXBoZXIvZWNjLmMgKHBvaW50X2Zyb21fa2V5cGFyYW0pOiBBbHdheXMgY2FsbCBtcGlfZnJlZSBvbiBBLgorCisyMDEzLTAzLTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUV4dGVuZCB0aGUgbmV3IEVDIGludGVyZmFjZSBhbmQgZml4IHR3byBidWdzLgorCSogc3JjL2VjLWNvbnRleHQuaCAobXBpX2VjX2N0eF9zKTogQWRkIGZpZWxkIE5FRURfU1lOQy4KKwkqIG1waS9lYy5jIChlY19wX3N5bmMpOiBOZXcuCisJKGVjX3BfaW5pdCk6IE9ubHkgc2V0IE5FRURfU1lOQy4KKwkoX2djcnlfbXBpX2VjX3NldF9tcGkpOiBTZXQgTkVFRF9TWU5DIGZvciAncCcgYW5kICdhJy4KKwkoX2djcnlfbXBpX2VjX2R1cF9wb2ludCwgX2djcnlfbXBpX2VjX2FkZF9wb2ludHMpCisJKF9nY3J5X21waV9lY19tdWxfcG9pbnQpOiBDYWxsIGVjX3Bfc3luYy4KKwkoX2djcnlfbXBpX2VjX2dldF9wb2ludCk6IFJlY29tcHV0ZSAncScgaXMgbmVlZGVkLgorCShfZ2NyeV9tcGlfZWNfZ2V0X21waSk6IERpdHRvLiAgQWxzbyBhbGxvdyBmb3IgbmFtZXMgJ3EnLCAncS54JywKKwkncS55JywgYW5kICdnJy4KKwkqIGNpcGhlci9lY2MuYyAoX2djcnlfbXBpX2VjX2VjMm9zKTogTmV3LgorCisJKiBjaXBoZXIvZWNjLmMgKF9nY3J5X21waV9lY19uZXcpOiBGaXggaW5pdCBmcm9tIHBhcmFtZXRlcnMgJ1EnLT4ncScsCisJJ0cnLT4ncScuCisKKzIwMTMtMDMtMTUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJbXBpOiBBZGQgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgYW4gRUMgY29udGV4dC4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoZ2NyeV9tcGlfZWNfcF9uZXcpOiBSZW1vdmUuCisJKGdjcnlfbXBpX2VjX25ldyk6IE5ldy4KKwkoZ2NyeV9tcGlfZWNfZ2V0X21waSk6IE5ldy4KKwkoZ2NyeV9tcGlfZWNfZ2V0X3BvaW50KTogTmV3LgorCShnY3J5X21waV9lY19zZXRfbXBpKTogTmV3LgorCShnY3J5X21waV9lY19zZXRfcG9pbnQpOiBOZXcuCisJKiBzcmMvdmlzaWJpbGl0eS5jIChnY3J5X21waV9lY19wX25ldyk6IFJlbW92ZS4KKwkqIG1waS9lYy5jIChfZ2NyeV9tcGlfZWNfcF9uZXcpOiBNYWtlIGl0IGFuIGludGVybmFsIGZ1bmN0aW9uIGFuZAorCWNoYW5nZSB0byByZXR1cm4gYW4gZXJyb3IgY29kZS4KKwkoX2djcnlfbXBpX2VjX2dldF9tcGkpOiBOZXcuCisJKF9nY3J5X21waV9lY19nZXRfcG9pbnQpOiBOZXcuCisJKF9nY3J5X21waV9lY19zZXRfbXBpKTogTmV3LgorCShfZ2NyeV9tcGlfZWNfc2V0X3BvaW50KTogTmV3LgorCSogc3JjL21waS5oOiBBZGQgbmV3IHByb3RvdHlwZXMuCisJKiBzcmMvZWMtY29udGV4dC5oOiBOZXcuCisJKiBtcGkvZWMuYzogSW5jbHVkZSB0aGF0IGhlYWRlci4KKwkobXBpX2VjX2N0eF9zKTogTW92ZSB0byBlYy1jb250ZXh0LmgsIGFkZCBuZXcgZmllbGRzLCBhbmQgcHV0IHNvbWUKKwlmaWVsZHMgaW50byBhbiBpbm5lciBzdHJ1Y3QuCisJKHBvaW50X2NvcHkpOiBOZXcuCisJKiBjaXBoZXIvZWNjLmMgKGZpbGxfaW5fY3VydmUpOiBBbGxvdyBwYXNzaW5nIE5VTEwgZm9yIFJfTkJJVFMuCisJKG1waV9mcm9tX2tleXBhcmFtLCBwb2ludF9mcm9tX2tleXBhcmFtKTogTmV3LgorCShfZ2NyeV9tcGlfZWNfbmV3KTogTmV3LgorCisJKiB0ZXN0cy90LW1waS1wb2ludC5jICh0ZXN0LWN1cnZlKTogTmV3LgorCShlY19wX25ldyk6IE5ldy4gIFVzZSBpdCBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkIGdjcnlfbXBpX2VjX3BfbmV3LgorCShnZXRfYW5kX2NtcF9tcGksIGdldF9hbmRfY21wX3BvaW50KTogTmV3LgorCShjb250ZXh0X3BhcmFtKTogTmV3IHRlc3QuCisJKGJhc2ljX2VjX21hdGhfc2ltcGxpZmllZCk6IE5ldyB0ZXN0LgorCShtYWluKTogQ2FsbCBuZXcgdGVzdHMuCisKKwkqIHNyYy9jb250ZXh0LmMgKF9nY3J5X2N0eF9nZXRfcG9pbnRlcik6IENoZWNrIGZvciBhIE5VTEwgQ1RYLgorCisyMDEzLTAzLTEzICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUFkZCBHQ1JZTVBJX0ZMQUdfQ09OU1QgYW5kIG1ha2UgdXNlIGNvbnN0YW50cy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoR0NSWU1QSV9GTEFHX0NPTlNUKTogTmV3LgorCSogc3JjL21waS5oIChtcGlfaXNfY29uc3QsIG1waV9jb25zdCk6IE5ldy4KKwkoZW51bSBnY3J5X21waV9jb25zdGFudHMsIE1QSV9OVU1CRVJfT0ZfQ09OU1RBTlRTKTogTmV3LgorCSogbXBpL21waXV0aWwuYyAoX2djcnlfbXBpX2luaXQpOiBOZXcuCisJKGNvbnN0YW50cyk6IE5ldy4KKwkoX2djcnlfbXBpX2ZyZWUpOiBEbyBub3QgcmVsZWFzZSBhIGNvbnN0YW50IGZsYWdnZWQgTVBJLgorCShnY3J5X21waV9jb3B5KTogQ2xlYXIgdGhlIGNvbnN0IGFuZCBpbW11dGFibGUgZmxhZ3MuCisJKGdjcnlfbXBpX3NldF9mbGFnLCBnY3J5X21waV9jbGVhcl9mbGFnLCBnY3J5X21waV9nZXRfZmxhZyk6IFN1cHBvcnQKKwlHQ1JZTVBJX0ZMQUdfQ09OU1QuCisJKF9nY3J5X21waV9jb25zdCk6IE5ldy4KKwkqIHNyYy9nbG9iYWwuYyAoZ2xvYmFsX2luaXQpOiBDYWxsIF9nY3J5X21waV9pbml0LgorCSogbXBpL2VjLmMgKG1waV9lY19jdHhfcyk6IFJlbW92ZSBmaWVsZHMgb25lLCB0d28sIHRocmVlLCBmb3VyLCBhbmQKKwllaWdodC4gIENoYW5nZSBhbGwgdXNlcnMgdG8gY2FsbCBtcGlfY29uc3QoKSBpbnN0ZWFkLgorCisJKiBzcmMvbXBpdXRpbHMuYyAoZ2NyeV9tcGlfc2V0X29wYXF1ZSk6IENoZWNrIHRoZSBpbW11dGFibGUgZmxhZy4KKworCUFkZCBHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFIHRvIGhlbHAgZGVidWdnaW5nLgorCSogc3JjL2djcnlwdC5oLmluIChHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFKTogTmV3LgorCSogc3JjL21waS5oIChtcGlfaXNfaW1tdXRhYmxlKTogTmV3IG1hY3JvLgorCSogbXBpL21waXV0aWwuYyAoZ2NyeV9tcGlfc2V0X2ZsYWcsIGdjcnlfbXBpX2NsZWFyX2ZsYWcpCisJKGdjcnlfbXBpX2dldF9mbGFnKTogSW1wbGVtZW50IG5ldyBmbGFnCisJKF9nY3J5X21waV9pbW11dGFibGVfZmFpbGVkKTogTmV3LgorCisJKiBtcGkvbXBpdXRpbC5jIChfZ2NyeV9tcGlfY2xlYXIsIF9nY3J5X21waV9mcmVlLCBnY3J5X21waV9zbmF0Y2gpCisJKGdjcnlfbXBpX3NldCwgZ2NyeV9tcGlfcmFuZG9taXplKTogQWN0IHVwb24gdGhlIGltbXV0YWJsZSBmbGFnLgorCSogbXBpL21waS1iaXQuYyAoZ2NyeV9tcGlfc2V0X2JpdCwgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQpCisJKGdjcnlfbXBpX2NsZWFyX2hpZ2hiaXQsIGdjcnlfbXBpX2NsZWFyX2JpdCkKKwkoX2djcnlfbXBpX3JzaGlmdF9saW1icywgZ2NyeV9tcGlfbHNoaWZ0KTogRGl0dG8uCisJKiBtcGkvbXBpY29kZXIuYyAoX2djcnlfbXBpX3NldF9idWZmZXIpOiBEaXR0by4KKworMjAxMy0wMy0wOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwltcGk6IEFkZCBhbiBBUEkgZm9yIEVDIG1hdGguCisJKiBzcmMvY29udGV4dC5jLCBzcmMvY29udGV4dC5oOiBOZXcuCisJKiBzcmMvTWFrZWZpbGUuYW0gKGxpYmdjcnlwdF9sYV9TT1VSQ0VTKTogQWRkIG5ldyBmaWxlcy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoc3RydWN0IGdjcnlfY29udGV4dCwgZ2NyeV9jdHhfdCk6IE5ldyB0eXBlcy4KKwkoZ2NyeV9jdHhfcmVsZWFzZSk6IE5ldyBwcm90b3R5cGUuCisJKGdjcnlfbXBpX2VjX3BfbmV3LCBnY3J5X21waV9lY19nZXRfYWZmaW5lLCBnY3J5X21waV9lY19kdXApCisJKGdjcnlfbXBpX2VjX2FkZCwgZ2NyeV9tcGlfZWNfbXVsKTogTmV3IHByb3RvdHlwZXMuCisJKiBtcGkvZWMuYzogSW5jbHVkZSBlcnJuby5oIGFuZCBjb250ZXh0LmguCisJKF9nY3J5X21waV9lY19pbml0KTogUmVuYW1lIHRvIC4uCisJKGVjX3BfaW5pdCk6IHRoaXMsIG1ha2Ugc3RhdGljLCByZW1vdmUgYWxsb2NhdGlvbiBhbmQgYWRkIGFyZyBDVFguCisJKF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyk6IE5ldzsgdG8gcmVwbGFjZSBfZ2NyeV9tcGlfZWNfaW5pdC4KKwlDaGFuZ2UgYWxsIGNhbGxlcnMgdG8gdXNlIHRoaXMgZnVuYy4KKwkoX2djcnlfbXBpX2VjX2ZyZWUpOiBGYWN0b3IgY29kZSBvdXQgdG8gLi4KKwkoZWNfZGVpbml0KTogTmV3IGZ1bmMuCisJKGdjcnlfbXBpX2VjX3BfbmV3KTogTmV3LgorCSogc3JjL3Zpc2liaWxpdHkuYzogSW5jbHVkZSBjb250ZXh0LmggYW5kIG1waS5oLgorCShnY3J5X21waV9lY19wX25ldywgZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSwgZ2NyeV9tcGlfZWNfZHVwKQorCShnY3J5X21waV9lY19hZGQsIGdjcnlfbXBpX2VjX211bCkKKwkoZ2NyeV9jdHhfcmVsZWFzZSk6IE5ldyB3cmFwcGVyIGZ1bmN0aW9ucy4KKwkqIHNyYy92aXNpYmlsaXR5Lmg6IE1hcmsgbmV3IHdyYXBwZXIgZnVuY3Rpb25zIHZpc2libGUuCisJKiBzcmMvbGliZ2NyeXB0LmRlZiwgc3JjL2xpYmdjcnlwdC52ZXJzOiBBZGQgbmV3IHN5bWJvbHMuCisJKiB0ZXN0cy90LW1waS1wb2ludC5jIChwcmludF9tcGksIGhleDJtcGksIGNtcF9tcGloZXgpOiBOZXcuCisJKGNvbnRleHRfYWxsb2MpOiBOZXcuCisJKG1ha2VfcG9pbnQsIGJhc2ljX2VjX21hdGgpOiBOZXcuCisKKwltcGk6IEFkZCBhbiBBUEkgZm9yIEVDIHBvaW50IG9wZXJhdGlvbnMuCisJKiBtcGkvZWMuYyAoZ2NyeV9tcGlfcG9pbnRfbmV3LCBnY3J5X21waV9wb2ludF9yZWxlYXNlKTogTmV3LgorCShnY3J5X21waV9wb2ludF9nZXQsIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQpOiBOZXcuCisJKGdjcnlfbXBpX3BvaW50X3NldCwgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCk6IE5ldy4KKwkqIHNyYy92aXNpYmlsaXR5LmgsIHNyYy92aXNpYmlsaXR5LmM6IEFkZCBjb3JyZXNwb25kaW5nIG1hY3JvcyBhbmQKKwl3cmFwcGVycy4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoc3RydWN0IGdjcnlfbXBpX3BvaW50LCBnY3J5X21waV9wb2ludF90KTogTmV3LgorCShnY3J5X21waV9wb2ludF9uZXcsIGdjcnlfbXBpX3BvaW50X3JlbGVhc2UsIGdjcnlfbXBpX3BvaW50X2dldCkKKwkoZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCwgZ2NyeV9tcGlfcG9pbnRfc2V0KQorCShnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0KTogTmV3IHByb3RvdHlwZXMuCisJKG1waV9wb2ludF9uZXcsIG1waV9wb2ludF9yZWxlYXNlLCBtcGlfcG9pbnRfZ2V0LCBtcGlfcG9pbnRfc25hdGNoX2dldCkKKwkobXBpX3BvaW50X3NldCwgbXBpX3BvaW50X3NuYXRjaF9zZXQpOiBOZXcgbWFjcm9zLgorCSogc3JjL2xpYmdjcnlwdC52ZXJzIChnY3J5X21waV9wb2ludF9uZXcsIGdjcnlfbXBpX3BvaW50X3JlbGVhc2UpCisJKGdjcnlfbXBpX3BvaW50X2dldCwgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCwgZ2NyeV9tcGlfcG9pbnRfc2V0KQorCShnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0KTogTmV3IHN5bWJvbHMuCisJKiBzcmMvbGliZ2NyeXB0LmRlZjogRGl0dG8uCisJKiB0ZXN0cy90LW1waS1wb2ludC5jOiBOZXcuCisJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgdC1tcGktcG9pbnQKKworMjAxMy0wMy0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwltcGk6IEFkZCBtcGlfc25hdGNoIGFuZCBjaGFuZ2UgYW4gaW50ZXJuYWwgdHlwZWRlZi4KKwkqIHNyYy9tcGkuaCAoc3RydWN0IG1waV9wb2ludF9zKTogUmVuYW1lIHRvIHN0cnVjdCBnY3J5X21waV9wb2ludC4KKwkobXBpX3BvaW50X3N0cnVjdCk6IE5ldyB0eXBlZGVmLgorCShtcGlfcG9pbnRfdCk6IENoYW5nZSB0eXBlZGVmIHRvIGEgcG9pbnRlci4gIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzCisJdG8gdXNlIG1waV9wb2ludF9zdHJ1Y3QuCisJKiBtcGkvZWMuYyAoX2djcnlfbXBpX2VjX3BvaW50X2luaXQpOiBSZW5hbWUgdG8gLi4KKwkoX2djcnlfbXBpX3BvaW50X2luaXQpOiB0aGlzLiAgQ2hhbmdlIGFsbCBjYWxsZXJzLgorCShfZ2NyeV9tcGlfZWNfcG9pbnRfZnJlZSk6IFJlbmFtZSB0byAuLgorCShfZ2NyeV9tcGlfcG9pbnRfZnJlZV9wYXJ0cyk6IHRoaXMuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCisKKwkqIG1waS9tcGl1dGlsLmMgKGdjcnlfbXBpX3NuYXRjaCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9nY3J5cHQuaC5pbiAoZ2NyeV9tcGlfc25hdGNoLCBtcGlfc25hdGNoKTogQWRkIHByb3RveXBlIGFuZAorCW1hY3JvLgorCSogc3JjL3Zpc2liaWxpdHkuYyAoZ2NyeV9tcGlfc25hdGNoKTogQWRkIHdyYXBwZXIuCisJKiBzcmMvdmlzaWJpbGl0eS5oIChnY3J5X21waV9zbmF0Y2gpOiBBZGQgbWFjcm8gbWFnaWMuCisJKiBzcmMvbGliZ2NyeXB0LmRlZiwgc3JjL2xpYmdjcnlwdC52ZXJzOiBBZGQgbmV3IGZ1bmN0aW9uLgorCisJUHJldHR5IHByaW50IHRoZSBjb25maWd1cmUgZmVlZGJhY2suCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX01TR19QUklOVCk6IFJlbW92ZS4KKwkoR0NSWV9NU0dfU0hPVywgR0NSWV9NU0dfV1JBUCk6IE5ldy4KKwkqIGNvbmZpZ3VyZS5hYzogVXNlIG5ldyBtYWNyb3MgZm9yIHRoZSBmZWVkYmFjay4KKworMjAxMy0wMi0yMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlGaXggYnVpbGRpbmcgb2YgaHdmLXg4Ni5jLgorCSogc3JjL01ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBTZXQgdG8gR1BHX0VSUk9SX0NGTEFHUworCShBTV9DQ0FTRkxBR1MpOiBTZXQgTk9FWEVDU1RBQ0tfRkxBR1MuCisKKwlSZW1vdmUgYnVpbGQgaGFja3MgZm9yIEZyZWVCU0QuCisJKiBjb25maWd1cmUuYWMgW2ZyZWVic2RdOiBEbyBub3QgYWRkIC91c3IvbG9jYWwgdG8gQ1BQRkxBR1MgYW5kCisJTERGTEFHUy4KKworMjAxMy0wMi0xOSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQG1ibmV0LmZpPgorCisJUmluamRhZWw6IEZpeCB1c2Ugb2YgU1NFMiBvdXRzaWRlIFVTRV9BRVNOSS9jdHgtPnVzZV9hZXNuaS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIChfZ2NyeV9hZXNfY2JjX2VuYyk6IENoZWNrIGlmIEFFUy1OSSBpcyBlbmFibGVkIGJlZm9yZQorCWNhbGxpbmcgYWVzbmlfcHJlcGFyZSgpIGFuZCBhZXNuaV9jbGVhbnVwKCkuCisKKwlBZGQgQUVTLU5JL0FWWCBhY2NlbGVyYXRlZCBDYW1lbGxpYSBpbXBsZW1lbnRhdGlvbi4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbiAtLWRpc2FibGUtYXZ4LXN1cHBvcnQuCisJKEhBVkVfR0NDX0lOTElORV9BU01fQVZYKTogTmV3LgorCShFTkFCTEVfQVZYX1NVUFBPUlQpOiBOZXcuCisJKGNhbWVsbGlhKSBbRU5BQkxFX0FWWF9TVVBQT1JULCBFTkFCTEVfQUVTTklfU1VQUE9SVF06IEFkZAorCWNhbWVsbGlhX2Flc25pX2F2eF94ODYtNjQubG8uCisJKiBjaXBoZXIvTWFrZWZpbGUuYW0gKEFNX0NDQVNGTEFHUyk6IEFkZC4KKwkoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQgY2FtZWxsaWFfYWVzbmlfYXZ4X3g4Ni02NC5TCisJKiBjaXBoZXIvY2FtZWxsaWEtZ2x1ZS5jIFtFTkFCTEVfQUVTTklfU1VQUE9SVCwgRU5BQkxFX0FWWF9TVVBQT1JUXQorCVtfX3g4Nl82NF9fXSAoVVNFX0FFU05JX0FWWCk6IEFkZCBtYWNyby4KKwkoc3RydWN0IENhbWVsbGlhX2NvbnRleHQpIFtVU0VfQUVTTklfQVZYXTogQWRkIHVzZV9hZXNuaV9hdnguCisJW1VTRV9BRVNOSV9BVlhdIChfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY3RyX2VuYykKKwkoX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NiY19kZWMpOiBOZXcgcHJvdG90eXBlcyB0byBhc3NlbWJseQorCWZ1bmN0aW9ucy4KKwkoY2FtZWxsaWFfc2V0a2V5KSBbVVNFX0FFU05JX0FWWF06IEVuYWJsZSBBRVMtTkkvQVZYIGlmIGhhcmR3YXJlCisJc3VwcG9ydCBib3RoLgorCShfZ2NyeV9jYW1lbGxpYV9jdHJfZW5jKSBbVVNFX0FFU05JX0FWWF06IEFkZCBBRVMtTkkvQVZYIGNvZGUuCisJKF9nY3J5X2NhbWVsbGlhX2NiY19kZWMpIFtVU0VfQUVTTklfQVZYXTogQWRkIEFFUy1OSS9BVlggY29kZS4KKwkqIGNpcGhlci9jYW1lbGxpYV9hZXNuaV9hdnhfeDg2LTY0LlM6IE5ldy4KKwkqIHNyYy9nMTBsaWIuaCAoSFdGX0lOVEVMX0FWWCk6IE5ldy4KKwkqIHNyYy9nbG9iYWwuYyAoaHdmbGlzdCk6IEFkZCBIV0ZfSU5URUxfQVZYLgorCSogc3JjL2h3Zi14ODYuYyAoZGV0ZWN0X3g4Nl9nbnVjKSBbRU5BQkxFX0FWWF9TVVBQT1JUXTogQWRkIGRldGVjdGlvbgorCWZvciBBVlguCisKKwljYW1lbGxpYS5jOiBQcmVwYXJlIGZvciBBRVMtTkkvQVZYIGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoQ0FNRUxMSUFfZW5jcnlwdF9zdGFja19idXJuX3NpemUpCisJKENBTUVMTElBX2RlY3J5cHRfc3RhY2tfYnVybl9zaXplKTogSW5jcmVhc2Ugc3RhY2sgYnVybiBzaXplLgorCSogY2lwaGVyL2NhbWVsbGlhLmMgKENBTUVMTElBX1JPVU5EU00pOiBNb3ZlIGtleS1tYXRlcmlhbCBtaXhpbmcgaW4KKwl0aGUgZnJvbnQuCisJKGNhbWVsbGlhX3NldHVwMTI4LCBjYW1lbGxpYV9zZXR1cDI1Nik6IFJlbW92ZSBub3cgdW5uZWVkZWQKKwlrZXktbWF0ZXJpYWwgbWFuZ2xpbmcuCisJKGNhbWVsbGlhX2VuY3J5cHQxMjgsIGNhbWVsbGlhX2RlY3J5cHQxMjgsIGFtZWxsaWFfZW5jcnlwdDI1NikKKwkoY2FtZWxsaWFfZGVjcnlwdDI1Nik6IENvcHkgYmxvY2sgdG8gc3RhY2ssIHNvIHRoYXQgY29tcGlsZXIgY2FuCisJb3B0aW1pemUgaXQgZm9yIHJlZ2lzdGVyIHVzYWdlLgorCisJQ2FtZWxsaWEsIHByZXBhcmUgZ2x1ZSBjb2RlIGZvciBBRVMtTkkvQVZYIGltcGxlbWVudGF0aW9uLgorCSogY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyAoQVRUUl9BTElHTkVEXzE2KTogQWRkIG1hY3JvLgorCShDQU1FTExJQV9lbmNyeXB0X3N0YWNrX2J1cm5fc2l6ZSk6IEFkZCBtYWNyby4KKwkoY2FtZWxsaWFfZW5jcnlwdCk6IFVzZSBtYWNybyBhYm92ZSBmb3Igc3RhY2sgYnVybiBzaXplLgorCShDQU1FTExJQV9kZWNyeXB0X3N0YWNrX2J1cm5fc2l6ZSk6IEFkZCBtYWNyby4KKwkoY2FtZWxsaWFfZGVjcnlwdCk6IFVzZSBtYWNybyBhYm92ZSBmb3Igc3RhY2sgYnVybiBzaXplLgorCShfZ2NyeV9jYW1lbGxpYV9jdHJfZW5jKTogTmV3IGZ1bmN0aW9uLgorCShfZ2NyeV9jYW1lbGxpYV9jYmNfZGVjKTogTmV3IGZ1bmN0aW9uLgorCShzZWxmdGVzdF9jdHJfMTI4KTogTmV3IGZ1bmN0aW9uLgorCShzZWxmdGVzdCk6IENhbGwgZnVuY3Rpb24gYWJvdmUuCisJKiBjaXBoZXIvY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pIFtVU0VfQ0FNRUxMSUFdOiBSZWdpc3RlciBidWxrCisJZnVuY3Rpb25zIGZvciBDQkMtZGVjcnlwdGlvbiBhbmQgQ1RSLW1vZGUuCisJKiBzcmMvY2lwaGVyLmggKF9nY3J5X2NhbWVsbGlhX2N0cl9lbmMpOiBOZXcgcHJvdG90eXBlLgorCShfZ2NyeV9jYW1lbGxpYV9jYmNfZGVjKTogTmV3IHByb3RvdHlwZS4KKworMjAxMi0xMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlQcmVwYXJlIGZvciBoYXJkd2FyZSBmZWF0dXJlIGRldGVjdGlvbiBvbiBvdGhlciBwbGF0Zm9ybXMuCisJKiBjb25maWd1cmUuYWMgKEdDUllQVF9IV0ZfTU9EVUxFUyk6IE5ldy4KKwkoSEFWRV9DUFVfQVJDSF9YODYsIEhBVkVfQ1BVX0FSQ0hfQUxQSEEsIEhBVkVfQ1BVX0FSQ0hfU1BBUkMpCisJKEhBVkVfQ1BVX0FSQ0hfTUlQUywgSEFWRV9DUFVfQVJDSF9NNjhLLCBIQVZFX0NQVV9BUkNIX1BQQykKKwkoSEFWRV9DUFVfQVJDSF9BUk0pOiBOZXcgQUNfREVGSU5Fcy4KKwkqIG1waS9jb25maWcubGlua3MgKG1waV9jcHVfYXJjaCk6IE5ldy4KKwkqIHNyYy9nbG9iYWwuYyAocHJpbnRfY29uZmlnKTogUHJpbnQgbmV3IHRhZyAiY3B1LWFyY2giLgorCSogc3JjL01ha2VmaWxlLmFtIChsaWJnY3J5cHRfbGFfU09VUkNFUyk6IEFkZCBod2YtY29tbW9uLmgKKwkoRVhUUkFfbGliZ2NyeXB0X2xhX1NPVVJDRVMpOiBOZXcuCisJKGdjcnlwdF9od2ZfbW9kdWxlcyk6IE5ldy4KKwkobGliZ2NyeXB0X2xhX0RFUEVOREVOQ0lFUywgbGliZ2NyeXB0X2xhX0xJQkFERCk6IEFkZCB0aGF0IG9uZS4KKwkqIHNyYy9od2ZlYXR1cmVzLmM6IEZhY3RvciBtb3N0IGNvZGUgb3V0IHRvIC4uLgorCSogc3JjL2h3Zi14ODYuYzogTmV3IGZpbGUuCisJKGRldGVjdF94ODZfZ251Yyk6IFJldHVybiB0aGUgZmVhdHVyZSB2ZWN0b3IuCisJKF9nY3J5X2h3Zl9kZXRlY3RfeDg2KTogTmV3LgorCSogc3JjL2h3Zi1jb21tb24uaDogTmV3LgorCSogc3JjL2h3ZmVhdHVyZXMuYyAoX2djcnlfZGV0ZWN0X2h3X2ZlYXR1cmVzKTogRGlzcGF0Y2ggdXNpbmcKKwlIQVZFX0NQVV9BUkNIXyBtYWNyb3MuCisKKzIwMTItMTItMjEgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBtYm5ldC5maT4KKworCUNsZWFuIHVwIGkzODYveDg2LTY0IGNwdWlkIHVzYWdlIGluIGh3ZmVhdHVyZXMuYy4KKwkqIHNyYy9od2ZlYXR1cmVzLmMgW19faTM4Nl9fICYmIF9fR05VQ19fXSAoZGV0ZWN0X2lhMzJfZ251Yyk6IFJlbW92ZS4KKwlbX194ODZfNjRfXyAmJiBfX0dOVUNfX10gKGRldGVjdF94ODZfNjRfZ251Yyk6IFJlbW92ZS4KKwlbX19pMzg2X18gJiYgX19HTlVDX19dIChpc19jcHVpZF9hdmFpbGFibGUsIGdldF9jcHVpZCkKKwkoSEFTX1g4Nl9DUFVJRCk6IE5ldy4KKwlbX194ODZfNjRfXyAmJiBfX0dOVUNfX10gKGlzX2NwdWlkX2F2YWlsYWJsZSwgZ2V0X2NwdWlkKQorCShIQVNfWDg2X0NQVUlEKTogTmV3LgorCVtIQVNfWDg2X0NQVUlEXSAoZGV0ZWN0X3g4Nl9nbnVjKTogTmV3LgorCShfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpIFtfX2kzODZfXyAmJiBHTlVDXTogUmVtb3ZlIGRldGVjdF9pYTMyX2dudWMKKwljYWxsLgorCShfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpIFtfX3g4Nl82NF9fICYmIEdOVUNdOiBSZW1vdmUKKwlkZXRlY3RfeDg2XzY0X2dudWMgY2FsbC4KKwkoX2djcnlfZGV0ZWN0X2h3X2ZlYXR1cmVzKSBbSEFTX1g4Nl9DUFVJRF06IEFkZCBkZXRlY3RfeDg2X2dudWMgY2FsbC4KKworMjAxMi0xMi0xOCAgRG1pdHJ5IEthc2F0a2luICA8ZG1pdHJ5Lmthc2F0a2luQGludGVsLmNvbT4KKworCUFkZCBzdXBwb3J0IGZvciB1c2luZyBEUk5HIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorCSogY29uZmlndXJlLmFjOiBBZGQgb3B0aW9uIC0tZGlzYWJsZS1kcm5nLXN1cHBvcnQuCisJKEVOQUJMRV9EUk5HX1NVUFBPUlQpOiBOZXcuCisJKiByYW5kb20vcm5kaHcuYyAoVVNFX0RSTkcpOiBOZXcuCisJKHJkcmFuZF9sb25nLCByZHJhbmRfbmxvbmcsIHBvbGxfZHJuZyk6IE5ldy4KKwkoX2djcnlfcm5kaHdfcG9sbF9mYXN0LCBfZ2NyeV9ybmRod19wb2xsX3Nsb3cpOiBDYWxsIHBvbGwgZnVuY3Rpb24uCisJKiBzcmMvZzEwbGliLmggKEhXRl9JTlRFTF9SRFJBTkQpOiBOZXcuCisJKiBzcmMvZ2xvYmFsLmMgKGh3Zmxpc3QpOiBBZGQgImludGVsLXJkcmFuZCIuCisJKiBzcmMvaHdmZWF0dXJlcy5jIChkZXRlY3RfeDg2XzY0X2dudWMpIFtFTkFCTEVfRFJOR19TVVBQT1JUXTogRGV0ZWN0CisJUkRSQU5ELgorCShkZXRlY3RfaWEzMl9nbnVjKSBbRU5BQkxFX0RSTkdfU1VQUE9SVF06IERldGVjdCBSRFJBTkQuCisKKzIwMTItMTItMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJcmFuZG9tOiBBZGQgYSBSTkcgc2VsZWN0aW9uIGludGVyZmFjZSBhbmQgc3lzdGVtIFJORyB3cmFwcGVyLgorCSogcmFuZG9tL3JhbmRvbS1zeXN0ZW0uYzogTmV3LgorCSogcmFuZG9tL01ha2VmaWxlLmFtIChsaWJyYW5kb21fbGFfU09VUkNFUyk6IEFkZCBuZXcgbW9kdWxlLgorCSogcmFuZG9tL3JhbmRvbS5jIChzdHJ1Y3Qgcm5nX3R5cGVzKTogTmV3LgorCShfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlLCBfZ2NyeV9nZXRfcm5nX3R5cGUpOiBOZXcuCisJKF9nY3J5X3JhbmRvbV9pbml0aWFsaXplLCBnY3J5X3JhbmRvbV9hZGRfYnl0ZXMsIGRvX3JhbmRvbWl6ZSkKKwkoX2djcnlfc2V0X3JhbmRvbV9zZWVkX2ZpbGUsIF9nY3J5X3VwZGF0ZV9yYW5kb21fc2VlZF9maWxlKQorCShfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKTogRGlzcGF0Y2ggdG8gdGhlIGFjdHVhbCBSTkcuCisJKiBzcmMvZ2NyeXB0LmguaW4gKEdDUllDVExfU0VUX1BSRUZFUlJFRF9STkdfVFlQRSk6IE5ldy4KKwlHQ1JZQ1RMX0dFVF9DVVJSRU5UX1JOR19UWVBFKTogTmV3LgorCShnY3J5X3JuZ190eXBlcyk6IE5ldy4KKwkqIHNyYy9nbG9iYWwuYyAocHJpbnRfY29uZmlnKTogUHJpbnQgdGhlIFRORyB0eXBlLgorCShnbG9iYWxfaW5pdCwgX2djcnlfdmNvbnRyb2wpOiBJbXBsZW1lbnQgdGhlIG5ldyBjb250cm9sIGNvZGVzLgorCSogZG9jL2djcnlwdC50ZXhpIChDb250cm9sbGluZyB0aGUgbGlicmFyeSk6IERvY3VtZW50IHRoZSBuZXcgY29udHJvbAorCWNvZGVzLgorCisJKiB0ZXN0cy9iZW5jaG1hcmsuYyAobWFpbik6IEFkZCBvcHRpb25zIHRvIHRlc3QgdGhlIFJORyB0eXBlcy4KKwkqIHRlc3RzL3JhbmRvbS5jIChtYWluKTogQWRkIG5ldyBvcHRpb25zLgorCShwcmludF9oZXgpOiBQcmludCB0byBzdGRlcnIuCisJKHByb2dyZXNzX2NiLCBybmdfdHlwZSk6IE5ldy4KKwkoY2hlY2tfcm5nX3R5cGVfc3dpdGNoaW5nLCBjaGVja19lYXJseV9ybmdfdHlwZV9zd2l0Y2hpbmcpOiBOZXcuCisJKHJ1bl9hbGxfcm5nX3Rlc3RzKTogTmV3LgorCisJdGVzdHM6IEFsbG93IHVzZSBvZiByYW5kb20uYyB1bmRlciBXaW5kb3dzLgorCSogdGVzdHMvTWFrZWZpbGUuYW0gKFRFU1RTKTogQWx3YXlzIGluY2x1ZGUgcmFuZG9tLmMKKwkqIHRlc3RzL3JhbmRvbS5jIFshVzMyXTogSW5jbHVkZSBzeXMvd2FpdC5oLgorCShpbmYpOiBOZXcuCisJKGNoZWNrX2ZvcmtpbmcsIGNoZWNrX25vbmNlX2ZvcmtpbmcpOiBQcmludCBhIG5vdGljZSB3aGF0IHdpbGwgYmUgZG9uZS4KKwkobWFpbikgW1czMl06IERvIG5vdCBjYWxsIHNpZ25hbC4KKworCU1ha2UgcmFuZG9tLWZpcHMuYyB3b3JrIG11bHRpLXRocmVhZGVkLgorCSogcmFuZG9tL3JhbmRvbS1maXBzLmMgKGJhc2ljX2luaXRpYWxpemF0aW9uKTogRml4IHJldmVyc2VkIGxvZ2ljLgorCisJTW92ZSBub25jZSBjcmVhdGlvbiBmcm9tIGNzcHJuZyBiYWNrZW5kIHRvIHJhbmRvbSBtYWluIG1vZHVsZS4KKwkqIHJhbmRvbS9yYW5kb20tY3Nwcm5nLmMgKF9nY3J5X3JuZ2NzcHJuZ19jcmVhdGVfbm9uY2UpOiBSZW1vdmUuCisJKG5vbmNlX2J1ZmZlcl9sb2NrKTogUmVtb3ZlLgorCShpbml0aWFsaXplX2Jhc2ljcyk6IFJlbW92ZSBpbml0IG9mIG5vbmNlX2J1ZmZlcl9sb2NrLgorCSogcmFuZG9tL3JhbmRvbS5jOiBBZGQgYSBmZXcgaGVhZGVyIGZpbGVzLgorCShub25jZV9idWZmZXJfbG9jayk6ICBOZXcuCisJKF9nY3J5X3JhbmRvbV9pbml0aWFsaXplKTogSW5pdCBub25jZV9idWZmZXJfbG9jay4KKwkoZ2NyeV9jcmVhdGVfbm9uY2UpOiBBZGQgY29kZSBmcm9tIF9nY3J5X3JuZ2NzcHJuZ19jcmVhdGVfbm9uY2UuCisKKwkqIHJhbmRvbS9yYW5kb20tZGFlbW9uLmMgKF9nY3J5X2RhZW1vbl9jcmVhdGVfbm9uY2UpOiBSZW1vdmUuCisKKzIwMTItMTItMDMgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBtYm5ldC5maT4KKworCUZpeCBidWlsZGluZyB3aXRoIENDPSJnY2MgLXN0ZD1jOTAiLgorCSogY29uZmlndXJlLmFjOiBBZGQgY2hlY2sgZm9yIG1pc3NpbmcgJ2FzbScga2V5d29yZCBpbiBDOTAgbW9kZSBhbmQKKwlyZXBsYWNlbWVudCB3aXRoICdfX2FzbV9fJy4KKworMjAxMi0xMi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlUcnkgdG8gdXNlIGludHR5cGVzLmggaWYgc3RkaW50LmggaXMgbm90IGF2YWlsYWJsZS4KKwkqIGNpcGhlci9idWZoZWxwLmggW0hBVkVfSU5UVFlQRVNfSF06IEluY2x1ZGUgaW50dHlwZXMuaAorCisyMDEyLTEyLTAzICBKdXNzaSBLaXZpbGlubmEgIDxqdXNzaS5raXZpbGlubmFAbWJuZXQuZmk+CisKKwlPcHRpbWl6ZSBidWZmZXIgeG9yaW5nLgorCSogY2lwaGVyL01ha2VmaWxlLmFtIChsaWJjaXBoZXJfbGFfU09VUkNFUyk6IEFkZCAnYnVmaGVscC5oJy4KKwkqIGNpcGhlci9idWZoZWxwLmg6IE5ldy4KKwkqIGNpcGhlci9jaXBoZXItYWVzd3JhcC5jIChfZ2NyeV9jaXBoZXJfYWVzd3JhcF9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfYWVzd3JhcF9kZWNyeXB0KTogVXNlICdidWZfeG9yJyBmb3IgYnVmZmVyIHhvcmluZy4KKwkqIGNpcGhlci9jaXBoZXItY2JjLmMgKF9nY3J5X2NpcGhlcl9jYmNfZW5jcnlwdCkKKwkoX2djcnlfY2lwaGVyX2NiY19kZWNyeXB0KTogVXNlICdidWZfeG9yJyBmb3IgYnVmZmVyIHhvcmluZyBhbmQgcmVtb3ZlCisJcmVzdWx0aW5nIHVudXNlZCB2YXJpYWJsZXMuCisJKiBjaXBoZXIvY2lwaGVyLWNmYi5jIChfZ2NyeV9jaXBoZXJfY2ZiX2VuY3J5cHQpIFVzZSAnYnVmX3hvcl8yZHN0JworCWZvciBidWZmZXIgeG9yaW5nIGFuZCByZW1vdmUgcmVzdWx0aW5nIHVudXNlZCB2YXJpYWJsZXMuCisJKF9nY3J5X2NpcGhlcl9jZmJfZGVjcnlwdCk6IFVzZSAnYnVmX3hvcl9uX2NvcHknIGZvciBidWZmZXIgeG9yaW5nIGFuZAorCXJlbW92ZSByZXN1bHRpbmcgdW51c2VkIHZhcmlhYmxlcy4KKwkqIGNpcGhlci9jaXBoZXItY3RyLmMgKF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdCk6IFVzZSAnYnVmX3hvcicgZm9yCisJYnVmZmVyIHhvcmluZyBhbmQgcmVtb3ZlIHJlc3VsdGluZyB1bnVzZWQgdmFyaWFibGVzLgorCSogY2lwaGVyL2NpcGhlci1vZmIuYyAoX2djcnlfY2lwaGVyX29mYl9lbmNyeXB0KQorCShfZ2NyeV9jaXBoZXJfb2ZiX2RlY3J5cHQpOiBVc2UgJ2J1Zl94b3InIGZvciBidWZmZXIgeG9yaW5nIGFuZCByZW1vdmUKKwlyZXN1bHRpbmcgdXNlZCB2YXJpYWJsZXMuCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoX2dyeV9hZXNfY2ZiX2VuYyk6IFVzZSAnYnVmX3hvcl8yZHN0JyBmb3IgYnVmZmVyCisJeG9yaW5nIGFuZCByZW1vdmUgcmVzdWx0aW5nIHVudXNlZCB2YXJpYWJsZXMuCisJKF9ncnlfYWVzX2NmYl9kZXYpOiBVc2UgJ2J1Zl94b3Jfbl9jb3B5JyBmb3IgYnVmZmVyIHhvcmluZyBhbmQgcmVtb3ZlCisJcmVzdWx0aW5nIHVudXNlZCB2YXJpYWJsZXMuCisJKF9ncnlfYWVzX2NiY19lbmMsIF9ncnlfYWVzX2N0cl9lbmMsIF9ncnlfYWVzX2NiY19kZWMpOiBVc2UgJ2J1Zl94b3InCisJZm9yIGJ1ZmZlciB4b3JpbmcgYW5kIHJlbW92ZSByZXN1bHRpbmcgdW51c2VkIHZhcmlhYmxlcy4KKworMjAxMi0xMS0yOSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQG1ibmV0LmZpPgorCisJT3B0aW1pemUgQUVTLU5JIENUUiBtb2RlLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgW1VTRV9BRVNOSV0gKGRvX2Flc25pX2N0ciwgZG9fYWVzbmlfY3RyXzQpOiBNYWtlCisJaGFuZGxpbmcgb2YgNjQtYml0IG92ZXJmbG93IGFuZCBjYXJyeSBjb25kaXRpb25hbC4gQXZvaWQgZ2VuZXJpYyB0bworCXZlY3RvciByZWdpc3RlciBwYXNzaW5nIG9mIHZhbHVlICcxJy4gR2VuZXJhdGUgYW5kIHVzZSAnLTEnIGluc3RlYWQuCisKKzIwMTItMTEtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJTWFrZSBhIGNwcCBjb25kaXRpb25hbCBpbiByaWpuZGFlbC5jIGJldHRlciByZWFkYWJsZS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIChVU0VfQUVTTkkpOiBNb2RpZnkgY3BwIGNvbmRpdGlvbmFscyBmb3IgYmV0dGVyCisJcmVhZGFiaWxpdHkuCisKKzIwMTItMTEtMjggIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBtYm5ldC5maT4KKworCUZpeCBidWlsZGluZyB3aXRoIENsYW5nIG9uIHg4Ni02NCBhbmQgaTM4Ni4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIFtVU0VfQUVTTkldIChkb19hZXNuaV9lbmNfYWxpZ25lZCkKKwkoZG9fYWVzbmlfZGVjX3ZlYzQsIGRvX2Flc25pX2NmYiwgZG9fYWVzbmlfY3RyLCBkb19hZXNuaV9jdHJfNCk6IEFkZAorCWV4cGxpY2l0IHN1ZmZpeCB0byAnY21wJyBpbnN0cnVjdGlvbnMuCisKKzIwMTItMTEtMjYgIEp1c3NpIEtpdmlsaW5uYSAgPGp1c3NpLmtpdmlsaW5uYUBtYm5ldC5maT4KKworCU9wdGltaXplIHdpcGVtZW1vcnkyIGZvciBpMzg2IGFuZCB4ODYtNjQuCisJKiBzcmMvZzEwbGliLmggKHdpcGVtZW1vcnkyKTogQWRkIGNhbGwgdG8gZmFzdF93aXBlbWVtb3J5Mi4KKwkoZmFzdF93aXBlbWVtb3J5Mik6IE5ldyBtYWNyb3MgZm9yIGkzODYgYW5kIHg4Ni02NCBhcmNoaXRlY3R1cmVzLgorCUVtcHR5IG1hY3JvIHByb3ZpZGVkIGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLgorCisJRml4IG1pc3NpbmcgNjRiaXQgY2FycnkgaGFuZGxpbmcgaW4gQUVTLU5JIENUUiBtb2RlLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgW1VTRV9BRVNOSV0gKGRvX2Flc25pX2N0ciwgZG9fYWVzbmlfY3RyXzQpOiBBZGQKKwljYXJyeSBoYW5kbGluZyB0byA2NC1iaXQgYWRkaXRpb24uCisJKHNlbGZ0ZXN0X2N0cl8xMjgpOiBOZXcgZnVuY3Rpb24gZm9yIHRlc3RpbmcgSVYgaGFuZGxpbmcgaW4gYnVsayBDVFIKKwlmdW5jdGlvbi4KKwkoc2VsZnRlc3QpOiBBZGQgY2FsbCB0byBzZWxmdGVzdF9jdHJfMTI4LgorCisJQWRkIHBhcmFsbGVsaXplZCBBRVMtTkkgQ0JDIGRlY3J5cHRpb24uCisJKiBjaXBoZXIvcmlqbmRhZWwuYyBbVVNFX0FFU05JXSAoYWVzbmlfY2xlYW51cF81KTogTmV3IG1hY3JvLgorCVtVU0VfQUVTTkldIChkb19hZXNuaV9kZWNfdmVjNCk6IE5ldyBmdW5jdGlvbi4KKwkoX2djcnlfYWVzX2NiY19kZWMpIFtVU0VfQUVTTkldOiBBZGQgcGFyYWxsZWxpemVkIENCQyBsb29wLgorCShfZ2NyeV9hZXNfY2JjX2RlYykgW1VTRV9BRVNOSV06IENoYW5nZSBJViBzdG9yYWdlIHJlZ2lzdGVyIGZyb20geG1tMworCXRvIHhtbTUuCisKKwlDbGVhciB4bW01IGFmdGVyIHVzZSBpbiBBRVMtTkkgQ1RSIG1vZGUuCisJKiBjaXBoZXIvcmlqbmRhZWwuYyBbVVNFX0FFU05JXTogUmVuYW1lIGFlc25pX2NsZWFudXBfMl80IHRvCisJYWVzbmlfY2xlYW51cF8yXzUuCisJW1VTRV9BRVNOSV0gKGFlc25pX2NsZWFudXBfMl81KTogQ2xlYXIgeG1tNSByZWdpc3Rlci4KKwkoX2djcnlfYWVzX2N0cl9lbmMsIF9nY3J5X2Flc19jYmNfZGVjKSBbVVNFX0FFU05JXTogVXNlCisJYWVzbmlfY2xlYW51cF8yXzUgaW5zdGVhZCBvZiBhZXNuaV9jbGVhbnVwXzJfNC4KKworCU9wdGltaXplIEFFUy1OSSBDQkMgZW5jcnlwdGlvbi4KKwkqIGNpcGhlci9yaWpuZGVhbC5jIChfZ2NyeV9hZXNfY2JjX2VuYykgW1VTRV9BRVNOSV06IEFkZCBBRVMtTkkKKwlzcGVzaWZpYyBsb29wIGFuZCB1c2UgU1NFMiBhc3NlbWJsZXIgZm9yIHhvcmluZyBhbmQgY29weWluZyBvZgorCWJsb2Nrcy4KKworCUltcHJvdmUgcGFyYWxsZWxpemFiaWxpdHkgb2YgQ0JDIGRlY3J5cHRpb24gZm9yIEFFUy1OSS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jIChfZ2NyeV9hZXNfY2JjX2RlYykgW1VTRV9BRVNOSV06IEFkZCBBRVMtTkkKKwlzcGVjaWZpYyBDQkMgbW9kZSBsb29wIHdpdGggdGVtcG9yYXJ5IGJsb2NrIGFuZCBJViBzdG9yZWQgaW4gZnJlZSBTU0UKKwlyZWdpc3RlcnMuCisKKwlFeHRlbmQgdGVzdCBvZiBjaGFpbmVkIG1vZGVzIGZvciAxMjhiaXQgY2lwaGVycy4KKwkqIHRlc3RzL2Jhc2ljLmMgKGNoZWNrX29uZV9jaXBoZXJfY29yZSwgY2hlY2tfb25lX2NpcGhlcik6IEluY3JlYXNlCisJaW5wdXQgYW5kIG91dHB1dCBidWZmZXIgc2l6ZXMgZnJvbSAxNiBieXRlcyB0byAxMDI0KzE2PTEwNDAgYnl0ZXMuCisJKGNoZWNrX29uZV9jaXBoZXJfY29yZSk6IEFkZCBhc3NlcnRzIHRvIHZlcmlmeSBzaXplcyBvZiB0ZW1wb3JhcnkKKwlidWZmZXJzLgorCisyMDEyLTExLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUZpeCBmb3Igc3RyaWN0IGFsaWFzaW5nIHJ1bGVzLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgKGRvX3NldGtleSwgcHJlcGFyZV9kZWNyeXB0aW9uKTogVXNlIHUzMl9hX3QgZm9yCisJY2FzdGluZy4KKworCURvIG5vdCBkZXRlY3QgQUVTLU5JIHN1cHBvcnQgaWYgZGlzYWJsZWQgYnkgY29uZmlndXJlLgorCSogc3JjL2h3ZmVhdHVyZXMuYyAoZGV0ZWN0X2lhMzJfZ251Yyk6IERldGVjdCBBRVNOSSBzdXBwb3J0IG9ubHkgaWYKKwl0aGF0IHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZC4KKworMjAxMi0xMS0yMSAgSnVzc2kgS2l2aWxpbm5hICA8anVzc2kua2l2aWxpbm5hQG1ibmV0LmZpPgorCisJRml4IHRvbyBsYXJnZSBidXJuX3N0YWNrIGluIGNhbWVsbGlhLWdsdWUuYy4KKwkqIGNpcGhlci9jYW1lbGxpYS1nbHVlLmMgKGNhbWVsbGlhX2VuY3J5cHQsIGNhbWVsbGlhX2RlY3J5cHQpOiBEbyBub3QKKwl0YWtlIGZ1bGwgYXJyYXkgc2l6ZSBvZiBLRVlfVEFCTEVfVFlQRSwgYnV0IGFyZ3VtZW50IHNpemUgaW5zdGVhZC4KKworCUFkZCB4ODZfNjQgc3VwcG9ydCBmb3IgQUVTLU5JLgorCSogY2lwaGVyL3Jpam5kYWVsLmMgW0VOQUJMRV9BRVNOSV9TVVBQT1JUXTogRW5hYmxlIFVTRV9BRVNOSSBvbiB4ODYtNjQuCisJKGRvX3NldGtleSkgW1VTRV9BRVNOSV9pc19kaXNhYmxlZF9oZXJlXTogVXNlICVba2V5XSBhbmQgJVtrc2NoXQorCWRpcmVjdGx5IGFzIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHVzaW5nIHRlbXBvcmFyeSByZWdpc3RlciAlJWVzaS4KKwlbVVNFX0FFU05JXSAoZG9fYWVzbmlfZW5jX2FsaWduZWQsIGRvX2Flc25pX2RlY19hbGlnbmVkLCBkb19hZXNuaV9jZmIsCisJZG9fYWVzbmlfY3RyLCBkb19hZXNuaV9jdHJfNCk6IFVzZSAlW2tleV0gZGlyZWN0bHkgYXMgcmVnaXN0ZXIgaW5zdGVhZAorCW9mIHVzaW5nIHRlbXBvcmFyeSByZWdpc3RlciAlJWVzaS4KKwlbVVNFX0FFU05JXSAoZG9fYWVzbmlfY2ZiLCBkb19hZXNuaV9jdHIsIGRvX2Flc25pX2N0cl80KTogQ2hhbmdlICVba2V5XQorCWZyb20gZ2VuZXJpYyAiZyIgdHlwZSB0byByZWdpc3RlciAiciIuCisJKiBzcmMvaHdmZWF0dXJlcy5jIChfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpIFtfX3g4Nl82NF9fXTogRG8gbm90CisJY2xlYXIgQUVTLU5JIGZlYXR1cmUgZmxhZy4KKworCUZpeCBjcHVpZCB2ZW5kb3ItaWQgY2hlY2sgZm9yIGkzODYgYW5kIHg4Ni02NC4KKwkqIHNyYy9od2ZlYXR1cmVzLmMgKGRldGVjdF94ODZfNjRfZ251YywgZGV0ZWN0X2lhMzJfZ251Yyk6IEFsbG93CisJSW50ZWwgZmVhdHVyZXMgYmUgZGV0ZWN0IGZyb20gQ1BVIGJ5IG90aGVyIHZlbmRvcnMgdG9vLgorCisJRml4IGh3ZGV0ZWN0IGFzc2VtYmxlciBjbG9iYmVycy4KKwkqIHNyYy9od2ZlYXR1cmVzLmMgKGRldGVjdF94ODZfNjRfZ251Yyk6IEFkZCBtaXNzaW5nICVlYnggYXNzZW1ibGVyCisJY2xvYmJlcnMuCisJKGRldGVjdF94ODZfNjRfZ251YywgZGV0ZWN0X2lhMzJfZ251YykgW0VOQUJMRV9QQURMT0NLX1NVUFBPUlRdOiBBZGQKKwltaXNzaW5nICVlY3ggYXNzZW1ibGVyIGNsb2JiZXJzLgorCisyMDEyLTExLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVVzZSBjb25maWd1cmUgdGVzdCBmb3IgYWxpZ25lZCBhdHRyaWJ1dGUuCisJKiBjb25maWd1cmUuYWMgKEhBVkVfR0NDX0FUVFJJQlVURV9BTElHTkVEKTogTmV3IHRlc3QgYW5kIGFjX2RlZmluZS4KKwkqIGNpcGhlci9jaXBoZXItaW50ZXJuYWwuaCwgY2lwaGVyL3Jpam5kYWVsLmMsIHJhbmRvbS9ybmRody5jOiBVc2UgbmV3CisJbWFjcm8gaW5zdGVhZCBvZiBhIGZpeGVkIHRlc3QgZm9yIF9fR05VQ19fLgorCisJRml4IHNlZ3Ygd2l0aCBBRVMtTkkgb24gc29tZSBwbGF0Zm9ybXMuCisJKiBjaXBoZXIvcmlqbmRhZWwuYyAoUklKTkRBRUxfY29udGV4dCk6IEFsaWduIG9uIDE2IGJ5dGVzLgorCisyMDEyLTExLTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUltcHJvdmUgcGFyc2luZyBvZiB0aGUgR0lUIHJldmlzaW9uIG51bWJlci4KKwkqIGNvbmZpZ3VyZS5hYyAobW1tNF9yZXZpc2lvbik6IFVzZSBnaXQgcmV2LXBhcnNlLgorCisyMDEyLTExLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUZpeCBleHRlcm4gaW5saW5lIHVzZSBmb3IgZ2NjID4gNC4zIGluIGM5OSBtb2RlLgorCSogbXBpL21waS1pbmxpbmUuaCBbIUcxMF9NUElfSU5MSU5FX0RFQ0xdOiBUYWtlIGNhcmUgb2YgY2hhbmdlZCBleHRlcm4KKwlpbmxpbmUgc2VtYW50aWNzIGluIGdjYy4KKworMjAxMi0xMS0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlGaXggbWVtb3J5IGxlYWsgaW4gZ2NyeV9wa190ZXN0a2V5IGZvciBFQ0MuCisJKiBjaXBoZXIvZWNjLmMgKGNoZWNrX3NlY3JldF9rZXkpOiBSZXN0cnVjdHVyZSBmb3IgZWFzaWVyIGFsbG9jYXRpb24KKwl0cmFja2luZy4gIEZpeCBtZW1vcnkgbGVhay4KKworMjAxMi0xMS0wNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlQcmVwYXJlIGZvciBhIGJhY2twb3J0ZWQgaW50ZXJmYWNlIGluIDEuNS4xLgorCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gYXQgQzIwL0EwL1IwIHRvIGFkanVzdCBmb3IgYSBwbGFubmVkCisJQVBJIHVwZGF0ZSBpbiAxLjUuMS4KKworCUFkanVzdCBmb3Igc3RyaWN0ZXIgYXV0b2NvbmYgcmVxdWlyZW1lbnRzLgorCSogY29uZmlndXJlLmFjOiBGaXggdXNhZ2Ugb2YgQUNfTEFOR19QUk9HUkFNLgorCisJVXBkYXRlIGJ1aWxkIGhlbHBlciBzY3JpcHRzLgorCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBVcGRhdGUgdG8gdmVyc2lvbiAyMDEyLTA3LTMxLgorCSogbHRtYWluLnNoOiBVcGRhdGUgdG8gdmVyc2lvbiAyLjQuMi4KKwkqIGluc3RhbGwtc2gsIG00L2xpYnRvb2wubTQsIG00L2x0b3B0aW9ucy5tNCwgbTQvbHR2ZXJzaW9uLm00CisJKiBtNC9sdH5vYnNvbGV0ZS5tNDogVXBkYXRlIHRvIGF1dG9jb25mIDIuNjkgdmVyc2lvbnMuCisKKwlEbyBub3QgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgZ2l0bG9nLXRvLWNoYW5nZWxvZy4KKwkqIE1ha2VmaWxlLmFtIChHSVRMT0dfVE9fQ0hBTkdFTE9HKTogTmV3LgorCShnZW4tQ2hhbmdlTG9nKTogUmVxdWlyZSBhbiBpbnN0YWxsZWQgZ2l0bG9nLXRvLWNoYW5nZWxvZy4KKwkqIHNjcmlwdHMvZ2l0bG9nLXRvLWNoYW5nZWxvZzogUmVtb3ZlLgorCisJKiBSRUFETUUuU1ZOOiBSZW1vdmUuCisJKiBSRU1PVkUuR0lUOiBOZXcuCisKKwlBbGxvdyBidWlsZGluZyB3aXRoIHc2NC1taW5ndzMyLgorCSogYXV0b2dlbi5zaCA8LS1idWlsZC13MzI+OiBTdXBwb3J0IHRoZSB3NjQtbWluZ3czMiB0b29sY2hhaW4uICBBbHNvCisJcHJlcGFyZSBmb3IgNjQgYml0IGJ1aWxkaW5nLgorCTxnaXQtc2V0dXA+OiBSZW1vdmUgb3B0aW9uIC1jIGZyb20gY2htb2QuCisKKwlTd2l0Y2ggdG8gdGhlIG5ldyBhdXRvbWFnaWMgYmV0YSBudW1iZXJpbmcgc2NoZW1lLgorCSogY29uZmlndXJlLmFjOiBBZGQgYWxsIHRoZSByZXF1aXJlZCBtNCBtYWdpYy4KKworCUF2b2lkIGRlcmVmZXJlbmNpbmcgcG9pbnRlciByaWdodCBhZnRlciB0aGUgZW5kLgorCSogbXBpL21waWNvZGVyLmMgKGRvX2dldF9idWZmZXIpOiBDaGVjayB0aGUgbGVuZ3RoIGJlZm9yZSBkZXJlZmluZyBQLgorCisyMDEyLTEwLTMwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCU1ha2UgYW5jaWVudCB0ZXN0IHByb2dyYW0gdXNlZnVsIGFnYWluLgorCSogdGVzdHMvdGVzdGFwaS5jICh0ZXN0X3NleHApOiBBZGp1c3QgdG8gY3VycmVudCBBUEkuICBQcmludCB0aGUKKwlyZXR1cm4gY29kZS4gIE1hcmsgdW51c2VkIGFyZ3MuCisJKHRlc3RfZ2Vua2V5KTogTWFyayB1bnVzZWQgYXJncy4KKwkobWFpbik6IERvIG5vdCBwYXNzIE5VTEwgdG8gcHJpbnRmLgorCisJdGVzdHM6IEFkZCBFQ0Mga2V5IGdlbmVyYXRpb24gdGVzdHMuCisJKiB0ZXN0cy9rZXlnZW4uYyAoY2hlY2tfZ2VuZXJhdGVkX2VjY19rZXkpOiBOZXcuCisJKGNoZWNrX2VjY19rZXlzKTogTmV3LgorCShtYWluKTogQ2FsbCBzaW1wbGUgRUNDIGNoZWNrcy4KKworMjAxMi0xMC0zMCAgTWlsYW4gQnJveiAgPG1icm96QHJlZGhhdC5jb20+CisKKwlQQktERjI6IEFsbG93IGVtcHR5IHBhc3NwaHJhc2UuCisJKiBjaXBoZXIva2RmLmMgKGdjcnlfa2RmX2Rlcml2ZSk6IEFsbG93IGVtcHR5IHBhc3NwaHJhc2UgZm9yIFBCS0RGMi4KKwkqIHRlc3RzL3Qta2RmLmMgKGNoZWNrX3Bia2RmMik6IEFkZCB0ZXN0IGNhc2UgZm9yIGFib3ZlLgorCisyMDEyLTA4LTE2ICBYaSBXYW5nICA8eGkud2FuZ0BnbWFpbC5jb20+CisKKwlSZXBsYWNlIGRlbGliZXJhdGUgZGl2aXNpb24gYnkgemVybyB3aXRoIF9nY3J5X2RpdmlkZV9ieV96ZXJvLgorCSogbXBpL21waS1wb3cuYzogUmVwbGFjZSAxIC8gbXNpemUuCisJKiBtcGkvbXBpaC1kaXYuYzogUmVwbGFjZSAxIC8gZHNpemUuCisJKiBzcmMvbWlzYy5jOiBBZGQgX2djcnlfZGl2aWRlX2J5X3plcm8uCisKKzIwMTItMDYtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQ2xlYXIgQUVTTkkgZmVhdHVyZSBmbGFnIGZvciB4ODZfNjQuCisJKiBzcmMvaHdmZWF0dXJlcy5jIChfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpIFtfX3g4Nl82NF9fXTogQ2xlYXIKKwlBRVNOSSBmZWF0dXJlIGZsYWcuCisKKwlCZWF1dGlmeSBsYXN0IGNoYW5nZS4KKwkqIGNpcGhlci9yaWpuZGFlbC5jOiBSZXBsYWNlIEM5OSBmZWF0dXJlIGZyb20gbGFzdCBwYXRjaC4gIEtlZXAgY3BwCisJbGluZXMgc2hvcnQuCisJKiByYW5kb20vcm5kaHcuYzogS2VlcCBjcHAgbGluZXMgc2hvcnQuCisJKiBzcmMvaHdmZWF0dXJlcy5jIChfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpOiBNYWtlIGNwcCBkZWYgY2hhaW4KKwliZXR0ZXIgcmVhZGFibGUuCisKKzIwMTItMDYtMjEgIFJhZmHDq2wgQ2FycsOpICA8ZnVubWFuQHZpZGVvbGFuLm9yZz4KKworCUVuYWJsZSBWSUEgUGFkbG9jayBvbiB4ODZfNjQgcGxhdGZvcm1zLgorCSAgKiBjaXBoZXIvcmlqbmRhZWwuYzogRHVwbGljYXRlIHg4NiBhc3NlbWJseSBhbmQgY29udmVydCB0byB4ODZfNjQuCisJICAqIHJhbmRvbS9ybmRody5jOiBMaWtld2lzZS4KKwkgICogc3JjL2h3ZmVhdHVyZXMuYzogTGlrZXdpc2UuCisKKzIwMTItMDUtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQWRkIGN1cnZlIGFsaWFzZXMgZnJvbSBSRkMtNTY1Ni4KKwkqIGNpcGhlci9lY2MuYyAoY3VydmVfYWxpYXNlcyk6IEFkZCAibmlzdHA/Pz8iIGVudHJpZXMuCisKKzIwMTItMDQtMTYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJU3RhdGUgbmV3IGNvbnRyaWJ1dGlvbiBydWxlcy4KKwkqIGRvYy9EQ086IE5ldy4KKwkqIGRvYy9IQUNLSU5HOiBEb2N1bWVudCBuZXcgcnVsZXMuCisKKzIwMTItMDQtMDQgIFRvbWFzIE1yYXogIDx0bXJhekBmZWRvcmFwcm9qZWN0Lm9yZz4KKworCUFkZCBHQ1JZQ1RMX1NFVF9FTkZPUkNFRF9GSVBTX0ZMQUcgY29tbWFuZC4KKwkqIGRvYy9nY3J5cHQudGV4aTogQWRkIGRvY3VtZW50YXRpb24gb2YgdGhlIG5ldyBjb21tYW5kLgorCSogc3JjL2ZpcHMuYyAoX2djcnlfZW5mb3JjZWRfZmlwc19tb2RlKTogUmVwb3J0IHRoZSBlbmZvcmNlZCBmaXBzIG1vZGUKKwlvbmx5IHdoZW4gZmlwcyBtb2RlIGlzIGVuYWJsZWQuCisJKF9nY3J5X3NldF9lbmZvcmNlZF9maXBzX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvZzEwbGliLmg6IEFkZCB0aGUgX2djcnlfc2V0X2VuZm9yY2VkX2ZpcHNfbW9kZSBwcm90b3R5cGUuCisJKiBzcmMvZ2NyeXB0LmguaW46IEFkZCB0aGUgR0NSWUNUTF9TRVRfRU5GT1JDRURfRklQU19GTEFHLgorCSogc3JjL2dsb2JhbC5jIChfZ2NyeV92Y29udHJvbCk6IEhhbmRsZSB0aGUgbmV3IGNvbW1hbmQuCisKKzIwMTItMDItMTcgIFVscmljaCBNw7xsbGVyICA8dWxtQGdlbnRvby5vcmc+CisKKwlSZXdvcmsgc2VsZnRlc3QgaW4gaWRlYS5jLgorCSogY2lwaGVyL2lkZWEuYyAoZG9fc2V0a2V5KTogRXhlY3V0ZSBzZWxmdGVzdCB3aGVuIGZpcnN0IGNhbGxlZC4KKwkoZGVjcnlwdF9ibG9jayk6IFJlbW92ZSBjb21tZW50ZWQtb3V0IGNvZGUuCisJKHNlbGZ0ZXN0KTogRXhlY3V0ZSBhbGwgc2VsZnRlc3RzLiBSZXR1cm4gTlVMTCBvbiBzdWNjZXNzLCBvcgorCXN0cmluZyBpbiBjYXNlIG9mIGVycm9yLgorCisyMDEyLTAyLTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUZpeCBtaXNzaW5nIHByb3RvdHlwZS4KKwkqIHNyYy9nMTBsaWIuaCAoX2djcnlfc2VjbWVtX21vZHVsZV9pbml0KTogTWFrZSBpdCBhIHJlYWwgcHJvdG90eXBlLgorCisyMDEyLTAyLTE2ICBVbHJpY2ggTcO8bGxlciAgPHVsbUBnZW50b28ub3JnPgorCisJQWRkIHN1cHBvcnQgZm9yIHRoZSBJREVBIGNpcGhlci4KKwlBZGFwdCBpZGVhLmMgdG8gdGhlIExpYmdjcnlwdCBmcmFtZXdvcmsuCisJQWRkIElERUEgdG8gY2lwaGVyX3RhYmxlIGFuZCB0byB0aGUgYnVpbGQgc3lzdGVtLgorCisJUGF0ZW50cyBvbiBJREVBIGhhdmUgZXhwaXJlZDoKKwkgIEV1cm9wZTogRVAwNDgyMTU0IG9uIDIwMTEtMDUtMTYsCisJICBKYXBhbjogIEpQMzIyNTQ0MCBvbiAyMDExLTA1LTE2LAorCSAgVS5TLjogICA1LDIxNCw3MDMgb24gMjAxMi0wMS0wNy4KKworCSogY29uZmlndXJlLmFjOiBBZGQgaWRlYSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVycy4KKwlEZWZpbmUgVVNFX0lERUEgaWYgaWRlYSBpcyBlbmFibGVkLgorCSogY2lwaGVyL2NpcGhlci5jIChjaXBoZXJfdGFibGUpOiBBZGQgZW50cnkgZm9yIElERUEuCisJKiBjaXBoZXIvaWRlYS5jOiBVcGRhdGUgY29tbWVudCBhYm91dCBwYXRlbnRzLgorCUluY2x1ZGUgcHJvcGVyIGhlYWRlciBmaWxlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbnMuCisJKGV4cGFuZF9rZXksIGNpcGhlciwgZG9fc2V0a2V5LCBlbmNyeXB0X2Jsb2NrLCBkZWNyeXB0X2Jsb2NrKToKKwlEZWZpbmUgZnVuY3Rpb24gYXJndW1lbnRzIGFzIGNvbnN0IHdoZXJlIGFwcHJvcHJpYXRlLgorCShjaXBoZXIpOiBUZXN0IGZvciAhV09SRFNfQklHRU5ESUFOIGluc3RlYWQgb2YgTElUVExFX0VORElBTl9IT1NULgorCShkb19zZXRrZXksIGRlY3J5cHRfYmxvY2spOiBEb24ndCBjYWxsIHNlbGZ0ZXN0LgorCShpZGVhX3NldGtleSk6IE5ldyBmdW5jdGlvbiwgd3JhcHBlciBmb3IgZG9fc2V0a2V5LgorCShpZGVhX2VuY3J5cHQpOiBOZXcgZnVuY3Rpb24sIHdyYXBwZXIgZm9yIGVuY3J5cHRfYmxvY2suCisJKF9nY3J5X2NpcGhlcl9zcGVjX2lkZWEpOiBEZWZpbmUuCisJKiBjaXBoZXIvTWFrZWZpbGUuYW0gKEVYVFJBX2xpYmNpcGhlcl9sYV9TT1VSQ0VTKTogQWRkIGlkZWEuYy4KKwkqIHNyYy9jaXBoZXIuaCAoX2djcnlfY2lwaGVyX3NwZWNfaWRlYSk6IERlY2xhcmUuCisJKiB0ZXN0cy9iYXNpYy5jIChjaGVja19jaXBoZXJzKTogQWRkIEdDUllfQ0lQSEVSX0lERUEuCisKKzIwMTItMDEtMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJSW5jbHVkZSBhbiBJREVBIGltcGxlbWVudGF0aW9uLgorCVRoZSBjb2RlIGlzIHRoZSBvbGQgSURFQSB0ZXN0IGNvZGUsIHdyaXR0ZW4gYnkgbWUgYmFjayBpbiAxOTk3IGFuZAorCWRpc3RyaWJ1dGVkIG9uIGEgRGFuaXNoIEZUUCBzZXJ2ZXIuICBUaGlzIGNvbW1pdCBpcyBvbmx5IGZvcgorCXJlZmVyZW5jZS4gIFRvIHVzZSB0aGUgY29kZSBpdCBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gdGhlIExpYmdjcnlwdAorCWZyYW1ld29yay4KKworMjAxMi0wMS0wMyAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1cy5icmlua21hbm5AcnVoci11bmktYm9jaHVtLmRlPgorCisJRml4IHB0aHJlYWQgbG9ja2luZyBhbmQgcmVtb3ZlIGRlZnVuY3Rpb25hbCBzdXBwb3J0IGZvciBzdGF0aWMgbG9jayBpbml0LgorCSogc3JjL2F0aC5jOiBJbmNsdWRlIGFzc2VydC5oLgorCShhdGhfbXV0ZXhfZGVzdHJveSwgYXRoX211dGV4X2xvY2ssIGF0aF9tdXRleF91bmxvY2spOiBEZXJlZmVyZW5jZSBMT0NLLgorCSogc3JjL2cxMGxpYi5oIChfZ2NyeV9zZWNtZW1fbW9kdWxlX2luaXQpOiBOZXcgZGVjbGFyYXRpb24uCisJKiBzcmMvZ2xvYmFsLmMgKGdsb2JhbF9pbml0KTogQ2FsbCBfZ2NyeV9zZWNtZW1fbW9kdWxlX2luaXQuCisJKiBzcmMvc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9tb2R1bGVfaW5pdCk6IE5ldyBmdW5jdGlvbi4KKworMjAxMS0xMi0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlBZGQgYWxpZ25tZW50IHRlc3RzIGZvciB0aGUgY2lwaGVyIHRlc3RzLgorCSogdGVzdHMvYmFzaWMuYyAoY2hlY2tfb25lX2NpcGhlcik6IEZhY3RvciBtb3N0IGNvZGUgb3V0IHRvCisJY2hlY2tfb25lX2NpcGhlcl9jb3JlLiAgQ2FsbCB0aGF0IGNvcmUgZnVuY3Rpb24gc2V2ZXJhbCB0aW1lcyB1c2luZworCWRpZmZlcmVudCBhbGlnbm1lbnQgc2V0dGluZ3MuCisJKGNoZWNrX29uZV9jaXBoZXJfY29yZSk6IE5ldy4gIEFkZCBleHRyYSBhcmdzIHRvIGFsbG93IGFsaWdubWVudAorCXRlc3RpbmcuCisKKzIwMTEtMTItMDcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJdGVzdHMvcHJpbWU6IEFkZCBvcHRpb24gdG8gY3JlYXRlIGEgd2VsbCBrbm93biBwcml2YXRlIGtleS4KKwkqIHRlc3RzL3ByaW1lLmMgKHByaW50X21waSwgY3JlYXRlXzQycHJpbWUpOiBOZXcuCisJKG1haW4pOiBBZGQgb3B0aW9uIC0tNDIuCisKKzIwMTEtMTItMDEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJRG8gbm90IGJ1aWxkIHRoZSByYW5kb20tZGFlbW9uIGJ5IG1ha2UgZGlzdGNoZWNrLgorCSogTWFrZWZpbGUuYW0gKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpOiBEaXNhYmxlIGJ1aWxkaW5nIG9mIHRoZQorCXJhbmRvbSBkYWVtb24KKworCUdlbmVyYXRlIHRoZSBDaGFuZ2VMb2cgZnJvbSBjb21taXQgbG9ncy4KKwkqIHNjcmlwdHMvZ2l0bG9nLXRvLWNoYW5nZWxvZzogTmV3IHNjcmlwdC4gIFRha2VuIGZyb20gZ251bGliLgorCSogc2NyaXB0cy9naXQtbG9nLWZpeDogTmV3IGZpbGUuCisJKiBzY3JpcHRzL2dpdC1sb2ctZm9vdGVyOiBOZXcgZmlsZS4KKwkqIGRvYy9IQUNLSU5HOiBEZXNjcmliZSB0aGUgQ2hhbmdlTG9nIHBvbGljeQorCSogQ2hhbmdlTG9nOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBmaWxlcy4KKwkoZ2VuLUNoYW5nZUxvZyk6IE5ldy4KKwkoZGlzdC1ob29rKTogUnVuIGdlbi1DaGFuZ2VMb2cuCisKKwlSZW5hbWUgYWxsIENoYW5nZUxvZyBmaWxlcyB0byBDaGFuZ2VMb2ctMjAxMS4KKworMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlOQjogQ2hhbmdlcyBkb25lIGJlZm9yZSBEZWNlbWJlciAxc3QsIDIwMTEgYXJlIGRlc2NyaWJlZCBpbgorCXBlciBkaXJlY3RvcnkgZmlsZXMgbmFtZWQgQ2hhbmdlTG9nLTIwMTEuICBTZWUgZG9jL0hBQ0tJTkcgZm9yCisJZGV0YWlscy4KKworICAgICAgICAtLS0tLQorCUNvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworCUNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgYW5kL29yIHRoZSBvcmlnaW5hbCBHSVQKKwljb21taXQgbG9nIG1lc3NhZ2VzLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKwlwZXJtaXR0ZWQgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZQorCXByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy0yMDExIGIvQ2hhbmdlTG9nLTIwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3MGExZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy0yMDExCkBAIC0wLDAgKzEsMTQ5OSBAQAorMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCU5COiBDaGFuZ2VMb2cgZmlsZXMgYXJlIG5vIGxvbmdlciBtYW51YWxseSBtYWludGFpbmVkLiAgU3RhcnRpbmcKKwlvbiBEZWNlbWJlciAxc3QsIDIwMTEgd2UgcHV0IGNoYW5nZSBpbmZvcm1hdGlvbiBvbmx5IGluIHRoZSBHSVQKKwljb21taXQgbG9nLCBhbmQgZ2VuZXJhdGUgYSB0b3AtbGV2ZWwgQ2hhbmdlTG9nIGZpbGUgZnJvbSBsb2dzIGF0CisJIm1ha2UgZGlzdCIuICBTZWUgZG9jL0hBQ0tJTkcgZm9yIGRldGFpbHMuCisKKzIwMTEtMTEtMjggIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwlhY2NlcHQgLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXggYXMgd2VsbCBhcyAtLXdpdGgtZ3BnLWVycm9yLXByZWZpeAorCSogbTQvZ3BnLWVycm9yLm00OiBVcGRhdGUgZnJvbSBnaXQgbWFzdGVyLgorCisyMDExLTA5LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfUFRIUkVBRCk6IE5ldy4KKworMjAxMS0wOS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gYXQgQzE5L0EwL1IwIGR1ZSB0byB0aGUgQUJJIGNoYW5nZS4KKworCSogY29uZmlndXJlLmFjIChDQ19GT1JfQlVJTEQpOiBOZXcuCisKKzIwMTEtMDYtMjkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlSZWxlYXNlIDEuNS4wLgorCisJKiBjb25maWd1cmUuYWM6IEtlZXAgTFQgdmVyc2lvbiBhdCBDMTgvQTcvUjAgYmVjYXVzZSBpdCBoYXMKKwlhbHJlYWR5IGJlZW4gYnVtcGVkIHVwIGF0IDIwMTAtMDctMDkuCisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogVXBkYXRlIHRvIDIwMTEtMDYtMDMuCisKKzIwMTEtMDQtMDYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoZW1hY3NfbG9jYWxfdmFyc19iZWdpbik6IE1vdmUgbW9yZSB0byB0aGUgdG9wIHRvCisJYXZvaWQgRW1hY3Mgd2FybmluZ3MuCisKKzIwMTEtMDMtMzAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbXBhdC9jb21wYXQuYyAoX2djcnlfY29tcGF0X2lkZW50aWZpY2F0aW9uKTogQWRkIHZlcnNpb24gc3RyaW5nLgorCisyMDExLTAzLTA4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEJVSUxEX1JFVklTSU9OKTogVXNlIG5ldyBnaXRfYnJldmlzIG1hY3JvLgorCisyMDExLTAyLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKExJQkdDUllQVF9DT05GSUdfSE9TVCk6IE5ldy4KKworCSogYWNpbmNsdWRlLm00IChBTV9QQVRIX0dQR19FUlJPUik6IFJlbW92ZS4KKworMjAxMS0wMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCVJlbGVhc2UgMS41LjAtYmV0YTEuCisKKzIwMTEtMDItMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyBbR0NDXTogUmVtb3ZlIHRoZSB1c2Ugb2YgLWZuby1zdHJpY3QtYWxpYXNpbmcuCisKKzIwMTEtMDItMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbiAtLWRpc2JhbGUtYWVzbmktc3VwcG9ydC4KKwkoRU5BQkxFX0FFU05JX1NVUFBPUlQpOiBOZXcgbWFjcm8uCisKKzIwMTEtMDItMDQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGF1dG9nZW4uc2g6IEluc3RhbGwgdGhlIGdpdCBwcmUtY29tbWl0IGlmIG5vdCB5ZXQgZG9uZS4KKworMjAxMC0xMi0yMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChCVUlMRF9SRVZJU0lPTik6IFVzZSBnaXRfcmV2aXNpb24uCisKKzIwMTAtMDgtMTkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIEdQR19FUlJfRU5BQkxFX0VSUk5PX01BQ1JPUy4gUmVtb3ZlCisJZGVmaW5pdGlvbiBvZiBfR05VX1NPVVJDRS4KKwkoQUNfR05VX1NPVVJDRSk6IE5ldy4KKworMjAxMC0wOC0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChJTlNFUlRfU1lTX1NFTEVDVF9IKTogTmV3LgorCisyMDEwLTA3LTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgTFQgdmVyc2lvbiB0byBDMTgvQTcvUjAgdG8gcHJlcGFyZSBhIGJhY2twb3J0CisJb2YgYSBuZXcgQVBJIHRvIHRoZSAxLjQgc2VyaWVzLgorCisyMDEwLTA0LTE5ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC1mbm8tc3RyaWN0LWFsaWFzaW5nLgorCisyMDEwLTA0LTEyICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3aykKKworCSogY29uZmlndXJlLmFjOiBQcmludCBtb3JlIHZlcmJvc2UgaW5mbyBhdCB0aGUgZW5kLgorCisyMDEwLTAzLTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKFVTRV9STkRXMzJDRSk6IE5ldy4KKworMjAxMC0wMy0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChlbWFjc19sb2NhbF92YXJzX2JlZ2luKQorCShlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seSwgZW1hY3NfbG9jYWxfdmFyc19lbmQpOiBOZXcuCisKKzIwMTAtMDEtMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbXBhdC9NYWtlZmlsZS5hbTogTmV3LgorCSogY29tcGF0L2NvbXBhdC5jOiBOZXcuCisJKiBjb21wYXQvbGliY29tcGF0Lmg6IE5ldy4KKwkqIGNvbXBhdC9nZXRwaWQuYywgY29tcGF0L2Nsb2NrLmM6IE5ldy4KKworCSogY29uZmlndXJlLmFjOiBSZXF1aXJlIGxpYmdwZy1lcnJvciAxLjguCisJKEhBVkVfVzMyQ0VfU1lTVEVNKTogTmV3IGFtX2RlZmluZXMgYW5kIGFtX2NvbmRpdGlvbmFscy4KKwkoZ2V0cGlkKTogQ2hlY2sgZm9yIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorCShBQ19DT05GSUdfTElCT0JKX0RJUik6IE5ldy4KKwkoQUNfVFlQRV9QSURfVCk6IE5ldy4KKwkoQU1fSU5JVF9BVVRPTUFLRSk6IFVzZSBtb2Rlcm4gdmFyaWFudC4KKwkoQUNfQ09ORklHX0ZJTEVTKTogQWRkIGNvbXBhdC9NYWtmaWxlLgorCSogYXV0b2dlbi5zaDogU3VwcG9ydCBXMzJDRS4KKwkqIGx0bWFpbi5zaDogVXBkYXRlIHRvIDIuMi42YgorCSh3cmFwcGVyc19yZXF1aXJlZCk6IERvbid0IHNldCBmb3IgbWluZ3czMmNlLgorCSogTWFrZWZpbGUuYW0gKERJU1RfU1VCRElSUywgU1VCRElSUyk6IEFkZCBjb21wYXQuCisKKzIwMDktMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbiAtLWRpc2FibGUtTy1mbGFnLW11bmdpbmcuCisKKzIwMDktMTItMDggIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCVVwZGF0ZSB0byBsaWJ0b29sIDIuMi42YS4KKwkqIGNvbmZpZ3VyZS5hYzogSW52b2tlIEFDX0NPTkZJR19NQUNST19ESVIuCisJKEFDX0xJQlRPT0xfV0lOMzJfRExMLCBBQ19MSUJUT09MX1JDKTogUmVwbGFjZSBieSAuLi4KKwkoTFRfUFJFUkVRLCBMVF9JTklULCBMVF9MQU5HKTogLi4uIHRoZXNlLgorCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQ6CisJVXBkYXRlZCB0byBsaWJ0b29sIDIuMi42YS4KKwkqIG00L2x0b3B0aW9ucy5tNCwgbTQvbHRzdWdhci5tNCwgbTQvbHR2ZXJzaW9uLm00LAorCW00L2x0fm9ic29sZXRlLm00OiBOZXcgZmlsZXMgZnJvbSBsaWJ0b29sIDIuMi42YS4KKworMjAwOS0wOC0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBzeXMvbXNnLmguCisKKzIwMDktMDQtMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIFJFQURNRTogQWRkIGEgc2VjdGlvbiBvbiBidWlsZCBwcm9ibGVtcy4KKworMjAwOS0wMS0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gdG8gQzE3L0E2L1IwIHRvIG1hcmsgdGhlIHN0YXJ0IG9mCisJYSBuZXcgZGV2ZWxvcG1lbnQgc2VyaWVzLgorCisyMDA5LTAxLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJUmVsZWFzZSAxLjQuNC4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gdG8gQzE2L0E1L1IyLgorCisyMDA4LTEwLTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFJlbW92ZSBvcHRpb24gLS1lbmFibGUtZ2NjLXdhcm5pbmdzLiAgQXV0b2RldGVjdAorCXVzZWZ1bCBnY2Mgd2FybmluZ3MgaW4gbWFpbnRhaW5lciBtb2RlLgorCisyMDA4LTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJUmVsZWFzZSAxLjQuMy4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gdG8gQzE2L0E1L1IxLgorCisyMDA4LTA5LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IENlaGNrIGZvciBzeXNsb2cuCisKKzIwMDgtMDktMDggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlSZWxlYXNlIDEuNC4yLgorCisyMDA4LTA5LTAxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJUmVsZWFzZSAxLjQuMnJjMi4KKworCSogY29uZmlndXJlLmFjOiBVcGRhdGUgc3ZuX3JldmlzaW9uIG1hY3JvLgorCisyMDA4LTA4LTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBvcHRpb24gLS1lbmFibGUtaG1hYy1iaW5hcnktY2hlY2suCisJKERMX0xJQlMpOiBDaGVjayB3aGV0aGVyIC1sZGwgaXMgcmVxdWlyZWQuCisKKzIwMDgtMDgtMTkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlSZWxlYXNlIDEuNC4ycmMxLgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgTFQgdmVyc2lvbiB0byBDMTYvQTUvUjAuCisKKzIwMDgtMDgtMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIHRoZSB1bnVzZWQgQlVHUyBmaWxlLgorCisyMDA4LTA4LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEFIX0JPVFRPTSk6IERlZmluZSBHQ1JZX0dQR19FUlJfTk9UX09QRVJBVElPTkFMLgorCisyMDA4LTA3LTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20vOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoRElTVF9TVUJESVJTKTogQWRkIHJhbmRvbS4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX0ZJTEVTKTogQWRkIHJhbmRvbS9NYWtlZmlsZS4KKworMjAwOC0wNC0yNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCVJlbGVhc2UgMS40LjEuCisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCBMVCB2ZXJzaW9uIHRvIEMxNS9BNC9SNC4KKworMjAwOC0wNC0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBTZXQgdmVyc2lvbiB0byAxLjQuMXJjMS4KKworMjAwOC0wNC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBSF9CT1RUT00pOiBBZGQgQ0FNRUxMSUFfRVhUX1NZTV9QUkVGSVguCisJKE5BTUVfT0ZfREVWX1JBTkRPTSk6ICBSZW1vdmUgc3BlY2lhbCBjYXNlcyBmb3IgU29sYXJpcyBldGMuICBUaGlzCisJbWF0Y2hlcyB0aGUgZ251cGcgMS40LjkgdmVyc2lvbi4KKworMjAwOC0wNC0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogRml4IHF1b3RpbmcuCisKKzIwMDgtMDMtMTkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRml4IHRoZSB0ZXN0cyBmb3IgVVNFXzxhbGdvPiB0byBlaXRoZXIgZGVmaW5lIG9yCisJdW5kZWYgdGhlIG1hY3Jvcy4gIFN1Z2dlc3RlZCBieSBEaXJrIFN0b2Vja2VyLgorCisyMDA4LTAzLTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFRlc3QgZm9yIHVpbnRwdHJfdC4KKworMjAwOC0wMi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChJU19ERVZFTE9QTUVOVF9WRVJTSU9OKTogU2V0IGRlcGVuZGluZyBvbiB0aGUgbXlfc3ZuLgorCisyMDA3LTEyLTExICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFdlIGFjdHVhbGx5IHJlcXVpcmUgbGliZ3BnLWVycm9yIDEuNC4gIFJlcG9ydGVkIGJ5CisJVGltIE1vb25leS4KKworMjAwNy0xMi0xMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCVJlbGVhc2VkIDEuNC4wLgorCisJKiBjb25maWd1cmUuYWM6IFNldCBMVCB0byBDMTUvQTQvUjMuCisKKzIwMDctMTItMDUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbiAtLWRpc2FibGUtcGFkbG9jay1zdXBwb3J0LgorCisyMDA3LTEyLTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJUmVsZWFzZWQgMS4zLjIuCisKKwkqIGNvbmZpZ3VyZS5hYzogU2V0IExUIHRvIEMxNS9BNC9SMi4KKworCSogY29uZmlnLnN1YiwgY29uZmlnLmd1ZXNzOiBVcGRhdGUgdG8gdmVyc2lvbiAyMDA3LTExLTE5LgorCisyMDA3LTEwLTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFByb3RlY3QgY29uZmlnLmggYWdhaW5zdCBkb3VibGUgaW5jbHVzaW9uLgorCisyMDA3LTEwLTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJUmVsZWFzZWQgMS4zLjEuCisKKwkqIGNvbmZpZ3VyZS5hYzogU2V0IExUIHRvIEMxNS9BNC9SMS4KKworMjAwNy0wOC0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogUkVBRE1FOiBSZXdyaXRlIHRoZSBsaWNlbnNlIGRlc2NyaXB0aW9uLgorCSogY29uZmlndXJlLmFjIChVU0VfUk5EVzMyLCBVU0VfUk5EVU5JWCk6IFVubWFyayBhcyBHUEwgbW9kdWxlcy4KKworMjAwNy0wOC0wOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVc2UgJGhvc3QgYW5kIG5vdCAkdGFyZ2V0LgorCisyMDA3LTA3LTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSk6IEZpeCBhIHN5bnRheCBlcnJvcgorCWluIHRoZSB0ZXN0IHByb2dyYW0gd2hpY2ggbHVya2VkIHRoZXJlIGZvciA0IHllYXJzLiAgQWRqdXN0ZWQgbmFtZQorCW9mIGxpYnRvb2xzIGdsb2JhbF9zeXN0ZW1fcGlwZSB2YXJpYWJsZSBhbmQgYWRkIGV4dHJhIGN1dCBzdGFnZS4KKwlSZXBvcnRlZCBieSBHcmVnb3IgUmllcGwuCisKKzIwMDctMDYtMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGF1dG9nZW4uc2ggKEZPUkNFKTogVXNlID0gYW5kIG5vdCA9PSBpbiB0ZXN0IHRvIGJlIFBPU0lYbHkgY29ycmVjdC4KKworMjAwNy0wNS0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBDYW1lbGxpYSBpcyBubyBsb25nZXIgR1BMLgorCisyMDA3LTA1LTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFRyeSB0byB1c2UgLVdwb2ludGVyLWFyaXRoLgorCisyMDA3LTA1LTE5ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYzogRml4IHRlc3QgZm9yIG9wdGlvbmFsIFVESVYgYW5kIFVESVZfUVJOTkQgTVBJCisJbW9kdWxlcy4KKworMjAwNy0wNS0wOSAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBjb25maWd1cmUuYWMgKGFjX2N2X21waV9jb25maWdfZG9uZSk6IFVudXNlZCB2YXJpYWJsZSByZW1vdmVkLgorCShhY19jdl9tcGlfbW9kX2xpc3QsIE1QSV9NT0RfTElTVF9MTywgTVBJX01PRF9MSVNUX08pOiBSZW1vdmVkLgorCShNUElfTU9EX0FTTV9NUElIX0FERDEsIE1QSV9NT0RfQVNNX01QSUhfU1VCMSwKKwlNUElfTU9EX0FTTV9NUElIX01VTDEsIE1QSV9NT0RfQVNNX01QSUhfTVVMMiwKKwlNUElfTU9EX0FTTV9NUElIX01VTDMsIE1QSV9NT0RfQVNNX01QSUhfTFNISUZULAorCU1QSV9NT0RfQVNNX01QSUhfUlNISUZULCBNUElfTU9EX0FTTV9NUElIX1VESVYsCisJTVBJX01PRF9BU01fTVBJSF9VRElWX1FSTk5ELCBNUElfTU9EX0NfTVBJSF9BREQxLAorCU1QSV9NT0RfQ19NUElIX1NVQjEsIE1QSV9NT0RfQ19NUElIX01VTDEsIE1QSV9NT0RfQ19NUElIX01VTDIsCisJTVBJX01PRF9DX01QSUhfTVVMMywgTVBJX01PRF9DX01QSUhfTFNISUZULCBNUElfTU9EX0NfTVBJSF9SU0hJRlQsCisJTVBJX01PRF9DX01QSUhfVURJViwgTVBJX01PRF9DX01QSUhfVURJVl9RUk5ORCk6IE5ldyBhdXRvbWFrZQorCXZhcmlhYmxlcy4KKworMjAwNy0wNS0wNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCVJlbGVhc2VkIDEuMy4wLgorCisJKiBjb25maWd1cmUuYWM6IFNldCBMVCB0byBDMTUvQTQvUjAuCisKKwkqIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBhdXRvbWFrZSAxLjEwCisJKEFNX1BST0dfQ0NfQ19PKTogTmV3LgorCisyMDA3LTA1LTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEZpeCBkZXRlY3Rpb24gb2YgR1BMZWQgcmFuZG9tIG1vZHVsZXMuCisKKzIwMDctMDUtMDIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoTElCR0NSWVBUX0RJR0VTVFMsIExJQkdDUllQVF9DSVBIRVJTKQorCShMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlMpOiBBY19kZWZpbmUgbGlzdHMgb2YgYWxnb3JpdGhtcy4KKwkoZGVmYXVsdF9jaXBoZXJzKTogRG9uJ3QgbWFrZSBjYW1lbGxpYSBhIGRlZmF1bHQuCisKKzIwMDctMDUtMDIgIERhdmlkIFNoYXcgIDxkc2hhd0BqYWJiZXJ3b2NreS5jb20+CisKKwkqIE5FV1MsIGNvbmZpZ3VyZS5hYzogQWRkIENhbWVsbGlhLgorCisyMDA3LTA0LTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBSRUFETUUuYXBpY2hhbmdlczogTW92ZSB0byBkb2MvLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmVkIHRoYXQgZmlsZS4KKworMjAwNy0wNC0yOCAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBjb25maWd1cmUuYWM6IEFsbG93IHRvIHNwZWNpZnkgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKwl3aXRoIC0tZW5hYmxlLW1waS1wYXRoLgorCisyMDA3LTA0LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzeXNjb25mLgorCSogYWNpbmNsdWRlLm00IChHTlVQR19DSEVDS19NTE9DSyk6IFRyeSB0byB1c2Ugc3lzY29uZiB0byBnZXQgdGhlCisJcGFnZSBzaXplIGFuZCB1c2UgZ2V0cGFnZXNpemUgb25seSB0aGVuIGlmIGF2YWlsYWJsZS4KKworMjAwNy0wMy0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBmb3IgRUNDLgorCisyMDA3LTAyLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyk6IFVzZQorCS0tZW5hYmxlLXJhbmRvbS1kYWVtb24uCisKKwkqIGNvbmZpZ3VyZS5hYzogTmV3IG9wdGlvbiAtLWVuYWJsZS1yYW5kb20tZGFlbW9uLgorCUNyZWF0ZSB2ZXJzaW9uaW5mby5yYyBhbmQgcHJvdmlkZSB0aGUgYnVpbGQgaW5mb3JtYXRpb24uCisKKzIwMDctMDItMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtLCBjb25maWd1cmUuYWM6IElnbm9yZSB3MzItZGxsLy4KKworMjAwNy0wMi0yMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIExUIHZlcnNpb24gdG8gQzE0L0EzL1IwIGluIHByZXBhcmF0aW9uIGZvciBhCisJcmVsZWFzZS4KKworCSogYXV0b2dlbi5zaDogQWRkIG9wdGlvbiAtLWZvcmNlLgorCSogY29uZmlndXJlLmFjOiBOZXcgb3B0aW9uIC0tZGlzYWJsZS1lbmRpYW4tY2hlY2suICBVc2UgYSByZWFsCisJbm9leGVjc3RhY2sgdGVzdCBpbnN0ZWFkIG9mIHJlcXVpcmluZyBhbiBvcHRpb24uICBBZGQgU1ZOIHZlcnNpb24KKwltYWdpYy4KKworMjAwNy0wMi0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChGQUxMQkFDS19TT0NLTEVOX1QpOiBTcGVjaWFsIGNhc2UgZm9yIG1pbmd3MzIuCisKKzIwMDYtMTEtMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGF1dG9nZW4uc2g6IEFkZCBjb252ZW5pZW5jZSBvcHRpb24gLS1idWlsZC1hbWQ2NC4KKworMjAwNi0xMC0yMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKHN0b3dpbnN0YWxsKTogTmV3IGNvbnZlbmllbmNlIHRhcmdldC4KKworMjAwNi0xMC0xMiAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBjb25maWd1cmUuYWMgKEZBTExCQUNLX1NPQ0tMRU5fVCk6IFRoaXJkIHRpbWUgaXMgYSBjaGFybS4KKwlEZWZpbmUgZ2NyeV9zb2NrbGVuX3QsIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHNvY2tsZW5fdAorCWRlZmluaXRpb25zIGJ5IGF1dG9jb25mLgorCisyMDA2LTEwLTExICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoRkFMTEJBQ0tfU09DS0xFTl9UKTogUmV3cml0ZSBpbiB0ZXJtcyBvZgorCXNvY2tsZW4ubTQuCisKKzIwMDYtMTAtMTEgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19GSVhfSERSX1ZFUlNJT04pOiBSZW1vdmVkLgorCSogY29uZmlndXJlLmFjOiBEbyBub3QgY2FsbCBHTlVQR19GSVhfSERSX1ZFUlNJT04uCisKKzIwMDYtMTAtMTAgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogY29uZmlndXJlLmFjOiBJbnZva2UgQUNfQ0hFQ0tfU09DS0xFTl9UWVBFLgorCShBQ19DT05GSUdfRklMRVMpOiBBZGQgc3JjL2djcnlwdC5oLgorCShBQ19DT05GSUdfU1JDRElSKTogQ2hhbmdlIHRvIHNyYy9saWJnY3J5cHQudmVycy4KKworMjAwNi0xMC0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19TWVNfU1lNQk9MX1VOREVSU0NPUkUpOiBUZXN0IG9uIEhPU1QgYW5kIG5vdAorCVRBUkdFVC4gIEhhcmR3aXJlIGZvciBtaW5ndzMyLiBBbGxvdyBzZXR0aW5nIHZpYSBjb21tYW5kIGxpbmUgd2hlbgorCWNyb3NzIGNvbXBpbGluZy4KKworMjAwNi0wOC0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChVU0VfU0VFRCk6IE5ldy4KKworMjAwNi0wNy0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBOZXcgb3B0aW9ucyAtLWVuYWJsZS1ub2V4ZWNzdGFjayBhbmQKKwktLWRpc2FibGUtb3B0aW1pemF0aW9uLgorCisyMDA2LTA3LTA0ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYzogQ2FsbCBBQ19MSUJUT09fV0lOMzJfRExMIGFuZCBBQ19MSUJUT09MX1JDLgorCisJKiBjb25maWd1cmUuYWM6IENhbGwgZ2xfVFlQRV9TT0NLTEVOX1QgaW5zdGVhZCBvZiB0aGUgb3RoZXIKKwlzb2NrbGVuX3QgY2hlY2tzLgorCisyMDA2LTA2LTA4ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoUFRIX0xJQlMpOiBBZGQgLS1hbGwgdG8gcHRoLWNvbmZpZyBpbnZvY2F0aW9uLgorCisyMDA2LTAzLTE0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBmY3RubCBhbmQgZnRydW5jYXRlLgorCShIQVZFX1BUSCk6IENoZWNrIGZvciBHTlUgUHRoLgorCShIQVZFX1czMl9TWVNURU0pOiBEZWZpbmUgaXQuCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKTogTmV3LiBUYWtlbiBmcm9tIEdudVBHIDEuNC4KKworMjAwNS0xMi0wOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBDaGFuZ2VkIHRoZSByYW5kb20gZGV2aWNlIG5hbWVzIGZvciBuZXRic2QuICBGcm9tCisJQ2hyaXN0aWFuIEJpZXJlLgorCisyMDA1LTExLTAyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTkVXUzogRG9jdW1lbnRlZCBtaW5vciBBUEkgY2hhbmdlcy4KKworMjAwNS0wOS0xNSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogRGVwZW5kIG9uIFJFQURNRS5TVk4sIG5vdCBvbiBSRUFETUUuQ1ZTLgorCisyMDA1LTA2LTI1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBSZW1vdmVkIHNyYy9saWJnY3J5cHQucGMgZnJvbSBBQ19DT05GSUdfRklMRVMuCisKKzIwMDUtMDYtMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogTW92ZSBkZXRlY3Rpb24gb2YgYmFzaWMgc3R1ZmYgdG8gdGhlIHRvcC4gIEZvcgorCWV4YW1wbGUgd2UgbmVlZCB0byBrbm93IHdoZXRoZXIgZ2NjIGlzIHVzZWQgYmVmb3JlIHRlc3RpbmcgZm9yIGl0LgorCVJlcG9ydGVkIGJ5IFJhbGYgRmFzc2VsLgorCisyMDA1LTA0LTIzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWNpbmNsdWRlLm00IChUWVBFX1NPQ0tMRU5fVCk6IE5ldyB0eXBlIGRlZmluaXRpb24gdGVzdDsKKwlwcm92aWRlZCBieSBBbGJlcnQgQ2hpbi4KKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdXNlICQoQ01EKSBhcyBpdCdzIG5vdCBwb3J0YWJsZTsgdXNlIENNRCBpbgorCWJhY2t0aWNrcyBpbnN0ZWFkLiAgU2ltcGxlciAtbG5zbC8tbHNvY2tldCB0ZXN0LiAgVXNlCisJVFlQRV9TT0NLTEVOX1QgdGVzdC4gIERvbid0IGZvcmdldCB0byBzZXQgYHJhbmRvbV9tb2R1bGVzJworCWNvcnJlY3RseS4KKworMjAwNS0wNC0yMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkZWQgc3VwcG9ydCBmb3IgcGtnY29uZmlnOyBwcm92aWRlZCBieSBBbGJlcnQKKwlDaGluLgorCisyMDA1LTA0LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBJbnRlZ3JhdGUgV2hpcmxwb29sLgorCisyMDA1LTAxLTA0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJVXBkYXRlZCB0byBhdXRvbWFrZSAxLjkuCisKKwkqIGFjaW5jbHVkZS5tNDogVXBkYXRlZCBmb3IgdXNlIHdpdGggYXV0b21ha2UgMS45LgorCisJKiBjb25maWd1cmUuYWM6IFJlcXVpcmUgbGliZ3BnLWVycm9yIDEuMDsgbm90IHJlYWxseSBuZWVkZWQgYnV0CisJdGhhdCBpcyB0aGUgZmlyc3Qgc3RhYmxlIHZlcnNpb24uCisKKwkqIE1ha2VmaWxlLmFtIChBQ0xPQ0FMX0FNRkxBR1MpOiBOZXcgZm9yIC1JIG00LgorCShBVVRPTUFLRV9PUFRJT05TKTogTmV3IHRvIGNyZWF0ZSBhIGJ6aXAgYXJjaGl2ZS4KKworMjAwNS0wMi0wMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIFRIQU5LUzogVXBkYXRlZC4KKworMjAwNC0wOC0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIFRIQU5LUzogVXBkYXRlZC4KKworMjAwNC0wNy0wNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIFRIQU5LUzogVXBkYXRlZC4KKworMjAwNC0wNC0yMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgcHJpbnQgYSB3YXJuaW5nIGlmIEdOVSBtYWtlIHdhcyBub3QgZm91bmQuCisKKzIwMDQtMDUtMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuZGU+CisKKwkqIFRIQU5LUzogVXBkYXRlZC4KKworMjAwNC0wNC0wMiAgVGhvbWFzIFNjaHdpbmdlICA8c2Nod2luZ2VAbmljLW5hYy1wcm9qZWN0LmRlPgorCisJKiBhdXRvZ2VuLnNoOiBBZGRlZCBBQ0xPQ0FMX0ZMQUdTLgorCisyMDA0LTA0LTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbGVhc2VkIDEuMi4wLgorCisJKiBjb25maWd1cmUuYWM6IFNldCBMVCB0byBDMTIvQTEvUjEuCisKKzIwMDQtMDQtMDYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGx0bWFpbi5zaDogVXBkYXRlZCB0byB0aG9zZSBmcm9tCisJbGlidG9vbHMgMS41LjQuCisKKzIwMDQtMDMtMjkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjk0LgorCisJKiBjb25maWd1cmUuYWM6IFNldCBMVCB0byBDMTIvQTEvUjAuCisKKzIwMDQtMDMtMTAgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogY29uZmlndXJlLmFjIChMSUJHQ1JZUFRfQ09ORklHX0xJQlNfUFRIUkVBRCwKKwlMSUJHQ1JZUFRfQ09ORklHX0NGTEFHU19QVEhSRUFELCBMSUJHQ1JZUFRfQ09ORklHX0xJQlNfUFRILAorCUxJQkdDUllQVF9DT05GSUdfQ0ZMQUdTX1BUSCwgaGF2ZV9wdGgsIGhhdmVfcHRocmVhZCwgQUNfQ0hFQ0tfUFRILAorCUFDX0NIRUNLX0xJQihwdGhyZWFkKSwgSEFWRV9QVEgsIEhBVkVfUFRIUkVBRCk6IFJlbW92ZWQuCisKKzIwMDQtMDMtMDYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjkzLgorCisJKiBjb25maWd1cmUuYWMgKExJQkdDUllQVF9DT05GSUdfU09OQU1FX05VTUJFUik6IFJlcGxhY2VkIGJ5CisJTElCR0NSWVBUX0NPTlBJR19BUElfVkVSU0lPTi4gIFNldCBpdCB0byAxLiAgU2V0IExUIHRvIEMxMS9BMC9SMS4KKworMjAwNC0wMy0wNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYyAoTElCR0NSWVBUX0NPTkZJR19TT05BTUVfTlVNQkVSKTogTmV3LgorCisyMDA0LTAyLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworICAgICAgICBSZWxlYXNlZCAxLjEuOTIuCisKKwkqIGNvbmZpZ3VyZS5hYzogU2V0IExUIHRvIEMxMS9BMC9SMC4KKworMjAwNC0wMi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGF1dG9nZW4uc2ggKGNoZWNrX3ZlcnNpb24pOiBSZW1vdmVkIGJhc2hpc20gYW5kIHNpbXBsaWZpZWQuCisKKzIwMDQtMDItMDYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCByZmMyMjY4IGNpcGhlciBhbGdvcml0aG0uCisKKzIwMDQtMDEtMjUgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIFRIQU5LUzogVXBkYXRlZC4KKworMjAwMy0xMi0xOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlZCAxLjEuOTEuCisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtYmVkIExUIHZlcnNpb24gdG8gQzEwL0EzL1IxLgorCisyMDAzLTEyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogTWFrZWZpbGUuYW0gKGRpc3QtaG9vayk6IERvbid0IGRpc3RyaWJ1dGUgc3R1ZmYgZnJvbSB0aGUgbm93CisJb2Jzb2xldGUgc2NyaXB0cyBkaXIuCisJKEVYVFJBX0RJU1QpOiBSZW1vdmUgUkVBRE1FX2FscGhhCisJKiBSRUFETUUtYWxwaGE6IFJlbW92ZWQuCisJKiBjb25maWd1cmUuYWMgKEFNX0NPTkZJR19BVVhfRElSKTogUmVtb3ZlZC4KKworCSogQ09QWUlORy5ET0M6IFJlbW92ZWQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIFJFQURNRS5DVlMgYW5kCisJYXV0b2dlbi5zaC4gUmVtb3ZlZCBDT1BZSU5HLkRPQy4KKworMjAwMy0xMS0xNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlZCAxLjEuOTAuCisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtYmVkIExUIHZlcnNpb24gdG8gQzEwL0EzL1IwLgorCisJKiBjb25maWd1cmUuYWMgKGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQpOiBTZXQgdGhlIGRlZmF1bHQgaW4KKwlhIHNlcGFyYXRlIHRlc3QuCisJKFBSSU5UQUJMRV9PU19OQU1FKTogRG9uJ3QgaGFuZGxlIHRoZSBIdXJkIGV4dHJhLCB0aGlzIGxlYWRzIHRvCisJY29uZmxpY3RzIHdpdGggQlNEIGJhc2VkIEdOVSBzeXN0ZW1zLiAgVGhlIEh1cmQgaGFzIG5vdyBhIHdvcmtpbmcKKwl1bmFtZS4KKworMjAwMy0xMS0wNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYyAoVVNFX1NIQTEpOiBNYWtlIHN1cmUgaXQgaXMgYWx3YXlzIGluY2x1ZGVkLgorCShVU0VfUk1EMTYwKTogUmVtb3ZlZCB0aGlzIEFNIGNvbmRpdGlvbmFsLgorCisyMDAzLTEwLTMxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBCdW1iZWQgdmVyc2lvbiBudW1iZXIgdG8gMS4xLjkwLWN2cyBmb3IgZnV0aGVyCisJZGV2ZWxvcG1lbnQKKworCVJlbGVhc2VkIDEuMS40NC4KKworCSogYWNpbmNsdWRlLm00IChBQ19DSEVDS19QVEgpOiBBZGRlZC4KKwkqIGNvbmZpZ3VyZS5hYzogVXNlIGl0IGhlcmUgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBsaWIgdGVzdC4KKwlCdW1iZWQgTFQgdmVzaW9uIHRvIEM5L0EyL1IwLgorCisyMDAzLTEwLTI3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBHaXZlIGEgaGludCBvbiB3aGVyZSBsaWJncGctZXJyb3IgaXMgYXZhaWxhYmxlLgorCVJlZm9ybWF0dGVkIGxvbmcgbGluZXMuICBEb24ndCBpbmNsdWRlIGdjcnlwdC1kZWZzLmguCisJKC0tZW5hYmxlLWdjYy13YXJuaW5ncyk6IE5ldyBvcHRpb24uCisKKzIwMDMtMTAtMjQgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHNvY2tsZW5fdC4KKworMjAwMy0xMC0xMSAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogYWNpbmNsdWRlLm00OiBVcGRhdGUgQU1fUEFUSF9HUEdfRVJST1IgbWFjcm8uCisKKzIwMDMtMDktMDQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjQzLgorCisJKiBjb25maWd1cmUuYWM6IFJlcXVpcmUgbGliZ3BnLWVycm9yIDAuNCBkdWUgdG8gdGhlIHByaW1lIGludGVyZmFjZS4KKworMjAwMy0wOC0yOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNCAoR05VUEdfU1lTX1NZTUJPTF9VTkRFUlNDT1JFKTogUmUtaW1wbGVtZW50ZWQuCisJKiBjb25maWd1cmUuYWM6IFVzZSBpdCBoZXJlLgorCisyMDAzLTA4LTI3ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFN1YnN0aXR1dGU6IExJQkdDUllQVF9DT05GSUdfTElCU19QVEhSRUFELAorCUxJQkdDUllQVF9DT05GSUdfQ0ZMQUdTX1BUSFJFQUQsIExJQkdDUllQVF9DT05GSUdfTElCU19QVEgsCisJTElCR0NSWVBUX0NPTkZJR19DRkxBR1NfUFRILCBMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMuCisKKzIwMDMtMDgtMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEZhaWwsIGlmIGxpYmdwZy1lcnJvciBjb3VsZCBub3QgYmUgZm91bmQuCisKKzIwMDMtMDctMzEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjQyLgorCisJKiBjb25maWd1cmUuYWM6IFNldCBMVCB2ZXJzaW9uIHRvIDcvMC8wLgorCisyMDAzLTA3LTMwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogQVVUSE9SUyAoTWFpbnRhaW5lcik6IEFzc2lnbmVkIE1vcml0eiBhcyBNYWludGFpbmVyLgorCisyMDAzLTA3LTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTkVXUzogSW5jbHVkZSBtdWNoIG1vcmUgY29tcGxldGUgbGlzdCBvZiBgSW50ZXJmYWNlIGNoYW5nZXMKKwlyZWxhdGl2ZSB0byB0aGUgMS4xLjEyIHJlbGVhc2UnLgorCisyMDAzLTA3LTE0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1iZWQgdmVyc2lvbiBudW1iZXIgdXAgdG8gMS4xLjQyLWN2cy4KKworMjAwMy0wNy0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogUmVpbnRyb2R1Y2UgLS1kaXNhYmxlLWFzbSwgc2luY2UgaXQgaXMgbmVlZGVkIGJ5CisJbXBpL2NvbmZpZy5saW5rcy4KKworMjAwMy0wNy0wNSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIFJFQURNRTogRmV3IGNoYW5nZXMsIG1lbnRpb24gbGliZ3BnLWVycm9yLgorCisyMDAzLTA2LTE4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChhdmFpbGFibGVfY2lwaGVycyk6IFJlbW92ZWQgU2VycGVudCwgaHJybS4KKworMjAwMy0wNi0xNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlZCBtYWNybyBkZWZpbml0aW9uczogR05VUEdfQ0hFQ0tfRkFRUFJPRywKKwlHTlVQR19DSEVDS19FTkRJQU4sIEdOVVBHX0NIRUNLX0NBQ0hFLCBHTlVQR19DSEVDS19QSUMsCisJR05VUEdfQ0hFQ0tfRVhQT1JURFlOQU1JQywgR05VUEdfQ0hFQ0tfSVBDLCBHTlVQR19QUk9HX05NLAorCUdOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSwgR05VUEdfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHLAorCUdQSF9QUk9HX0RCMkFOWS4KKwlBZGRlZCBtYWNybyBkZWZpbml0aW9uczogQU1fUEFUSF9HUEdfRVJST1IuCisKKwkqIGNvbmZpZ3VyZS5hYzogVXNlIGFsdGVybmF0aXZlIGFwcHJvYWNoIGZvciBidWlsZGluZyBiYXNlZCBvbgorCWNvbmRpdGlvbmFsIHNvdXJjZXMsIHdoaWNoIGRvZXMgbm90IG1ha2UgYXV0b21ha2UgZWF0IGFsbCB5b3VyCisJbWVtb3J5LCBldGMuCisJUmVtb3ZlZCB1bnVzZWQgdGVzdHMuCisJUmVuYW1lZCAtLWVuYWJsZS1zdGF0aWMtcm5kIHRvIC0tZW5hYmxlLXJhbmRvbS4KKwlVc2UgQXV0b2NvbmYncyBBQ19DX0JJR0VORElBTiBtYWNybyBpbnN0ZWFkIG9mIG91ciBvd24uCisJUmUtb3JnYW5pemVkIHRoZSB3aG9sZSBmaWxlLgorCisyMDAzLTA2LTE2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBQ19DT05GSUdfRklMRVMpOiBSZW1vdmVkIGRvYy92ZXJzaW9uLnNnbWwuCisKKzIwMDMtMDYtMTEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFJlbW92ZSAtLWVuYWJsZS1saWJncGctZXJyb3IgZmxhZy4KKwlVZSBBQ19QQVRIX0dQR19FUlJPUi4KKworMjAwMy0wNi0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE5FV1M6IE1lbnRpb24gQVBJIGNoYW5nZXMgYW5kIGxpYmdwZy1lcnJvci4KKworMjAwMy0wNS0yNSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoVVNFX0xJQkdQR19FUlJPUik6IEltcGxlbWVudGF0aW9uIG9mIHRoZQorCS0tZW5hYmxlLWxpYmdwZy1lcnJvciBzd2l0Y2guCisJRGVmaW5lIFVTRV9MSUJHUEdfRVJST1IgaW4gTElCR0NSWVBUX0NPTkZJR19GTEFHUywgaW4gY2FzZQorCWxpYmdwZy1lcnJvciBpcyB1c2VkLgorCisyMDAzLTA1LTIyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBQ19DSEVDS19IRUFERVJTKTogUmVtb3ZlZCB1bnVzZWQgaGVhZGVyczoKKwl0ZXJtaW8uaCwgbGFuZ2luZm8uaC4KKwkoQUNfQ0hFQ0tfRlVOQ1MpOiBSZW1vdmVkIHVudXNlZCBmdW5jdGlvbnM6IHN0cnNlcCwgc3RybHdyLAorCXRjZ2V0YXR0ciwgc2V0cmxpbWl0LCBzdHJmdGltZSwgbmxfbGFuZ2luZm8sIHNpZ2FjdGlvbiwKKwlzaWdwcm9jbWFzaywgZm9wZW42NCwgZnN0YXQ2NC4KKworMjAwMy0wNC0yNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIFJFQURNRTogRG9jdW1lbnRlZCBuZXcgY29uZmlndXJlIHN3aXRjaGVzLgorCU1lbnRpb24gdGhlIC0tZW5hYmxlLW1haW50YWluZXItc3dpdGNoLgorCisJKiBjb25maWd1cmUuYWM6IE1lcmdlZCBzb21lIGNvZGUgZnJvbSBHbnVQRydzIGNvbmZpZ3VyZS5hYyBmb3IKKwlkaXNhYmxpbmcgc2hhNTEyL3RpZ2VyIGluIGNhc2Ugbm8gNjQgZGF0YSB0eXBlcyBhcmUgYXZhaWxhYmxlLgorCisyMDAzLTA0LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBJbmNsdWRlIHN1cHBvcnQgZm9yIHNoYTUxMi4KKworMjAwMy0wNC0xNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIEFVVEhPUlM6IFVwZGF0ZWQuCisKKzIwMDMtMDQtMTYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEltcGxlbWVudCBjb21tYW5kIGxpbmUgc3dpdGNoZXM6IC0tZW5hYmxlLWNpcGhlcnMsCisJLS1lbmFibGUtcHVia2V5LWNpcGhlcnMgYW5kIC0tZW5hYmxlLWRpZ2VzdHMuCisJU2V0IEF1dG9tYWtlIGNvbmRpdGlvbmFscyBhbmQgY29uZmlnLmggc3ltYm9scyBkZXBlbmRpbmcgb24gdGhlCisJc2VsZWN0ZWQgY2lwaGVycywgcHVia2V5LWNpcGhlcnMsIGRpZ2VzdHMgYW5kIHJhbmRvbS1tb2R1bGVzLgorCisJKiBhY2luY2x1ZGUubTQgKExJU1RfTUVNQkVSKTogTmV3IG1hY3JvLgorCisJKiBjb25maWd1cmUuYWM6IFNpbXBsaWZpZWQsIHJlbW92ZWQgY29kZSBmb3IgcGFyc2luZworCUVYVFJBX1BST0dSQU1TIGZyb20gTWFrZWZpbGUuYW0uCisKKzIwMDMtMDQtMDggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjb25maWd1cmUuYWM6IE1lcmdlZCByYW5kb20tbW9kdWxlIHNlbGVjdGlvbiBjb2RlIGZyb20gR251UEcncworCWNvbmZpZ3VyZS5hYy4KKworMjAwMy0wNC0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlZCBjb2RlIGZvciBnZW5lcmF0aW5nIGNvbnRydWN0LmMuCisJUmVtb3ZlIGRpZ2VzdCBtb2R1bGVzIGZyb20gdGhlIHN0YXRpY19tb2R1bGVzIGxpc3QsIG9ubHkgaGFuZGxlCisJcmFuZG9tIG1vZHVsZSBzZWxlY3Rpb24uCisKKworMjAwMy0wMy0yNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE5FV1M6IE1lbnRpb24gbmV3IENCQ19NQUMgZmxhZy4KKworCSogQVVUSE9SUyAoTWFpbnRhaW5lcik6IFVwZGF0ZSBlbnRyeSBmb3IgU2ltb24gSm9zZWZzc29uLgorCisyMDAzLTAzLTA0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogVE9ETzogUmVtb3ZlIGl0ZW0gYWJvdXQgcmVzZXR0aW5nIGhhbmRsZXMsIHNpbmNlCisJZ2NyeV9jaXBoZXJfcmVzZXQgaXMgaW1wbGVtZW50ZWQgYnkgbm93LgorCisJKiBORVdTOiBNZW50aW9uZWQgZ2NyeV9jaXBoZXJfcmVzZXQuCisKKzIwMDMtMDEtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBSRUFETUUgKENvbmZpZ3VyZSBvcHRpb25zKTogTmV3LgorCSogY29uZmlndXJlLmFjIChoYXZlX2xkX3ZlcnNpb25fc2NyaXB0KTogTmV3IG9wdGlvbgorCS0tZW5hYmxlLWxkLXZlcnNpb24tc2NyaXB0LgorCisyMDAzLTAxLTIwICBTaW1vbiBKb3NlZnNzb24gIDxqYXNAZXh0dW5kby5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoTU9EVUxFU19JTl9DSVBIRVIpOiBBZGQgY3JjLgorCisyMDAzLTAxLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbGVhc2VkIDEuMS4xMi4KKworCSogY29uZmlndXJlLmFjIChMSUJHQ1JZUFRfTFRfUkVWSVNJT04pOiBCdW1iZWQgdXAuCisKKzIwMDItMTItMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjExLgorCisJKiBjb25maWd1cmUuYWMgKExJQkdDUllQVF9MVF9DVVJSRU5UOiBCdW1iZWQgdG8gNi81LzAgZHVlIHRvIGEgbmV3CisJaW50ZXJmYWNlCisKKzIwMDItMTItMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWd1cmUuYWMgKGhhdmVfcHRocmVhZCk6IENoZWNrIGZvciBwdGhyZWFkcyBpbiBsaWJjLgorCShoYXZlX2xkX3ZlcnNpb25fc2NyaXB0KTogTmV3LgorCisyMDAyLTExLTEwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlndXJlLmFjIChNT0RVTEVTX0lOX0NJUEhFUik6IEFkZCBtZDQuYy4gIEJ5IFNpbW9uIEpvc2Vmc3Nvbi4KKworMjAwMi0wOS0yMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlZCAxLjEuMTAuCisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9ERVZfUkFORE9NX0lPQ1RMKTogRG9uJ3QgY2hlY2sgZm9yIGl0OyBpdCBpcworCW5vdCB1c2VkLgorCShBU19DSEVDS19IRUFERVJTKTogQ2hlY2sgZm9yIHN5cy9zZWxlY3QuaC4KKwkqIE1ha2VmaWxlLmFtIChESVNUX1NVQkRJUlMpOiBOZXcgdG8gaW5jbHVkZSB0aGUgdzMyLWRsbCBkaXJlY3RvcnkKKworMjAwMi0wOS0xOCAgVGltbyBTY2h1bHogIDx0c0B3aW5wdC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkZWQgbWFrZWZpbGUgZm9yIHRoZSBXMzIgRExMLgorCisyMDAyLTA5LTE3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgUHRoIGFuZCBQdGhyZWFkcy4KKworMjAwMi0wOC0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlZCAxLjEuOS4KKworCSogY29uZmlndXJlLmFjIChMSUJHQ1JZUFRfQ09ORklHX0NGTEFHUyk6IFJlbmFtZWQgZnJvbQorCUxJQkdDUllQVF9DRkxBR1MgYW5kIHJlbW92ZWQgdGhlIGxpYnBhdGggYmVjYXVzZSBpdCBpcyBzZXQgYnkgdGhlCisJY29uZmlnIHNjcmlwdC4KKwkoTElCR0NSWVBUX0xUX1JFVklTSU9OKTogU2V0IExUIHZlcnNpb24gdG8gNS80LzEuCisKKzIwMDItMDYtMjUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjguCisKKwkqIGNvbmZpZ3VyZS5hYzogU2V0IExUIHZlcnNpb24gdG8gNS80LzAuCisKKzIwMDItMDUtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjcuCisKKwkqIGNvbmZpZ3VyZS5hYzogU2V0IExUIHZlcnNpb24gdG8gNC8zLzAuCisKKzIwMDItMDUtMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWd1cmUuYWM6IFJlbW92ZWQgYWxsIHRoZSBkeW5hbWljIGxvYWRpbmcgc3R1ZmYuCisKKzIwMDItMDUtMTYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWd1cmUuYWM6IFJlb3JkZXJlZCB0aGUgQ19DSEVDS19GVU5DUy4KKworMjAwMi0wNS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRqdXN0ZWQgZm9yIG5ldyBNUEkgbW9kdWxlIHN0dWZmLgorCisyMDAyLTA1LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUNoYW5nZWQgbGljZW5zZSB0byB0aGUgTEdQTC4KKworMjAwMi0wNS0wMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGpubGliLzogUmVtb3ZlZC4KKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogUmVtb3ZlZCBqbmxpYi4KKwkqIGNvbmZpZ3VyZS5hYyAoam5saWIvTWFrZWZpbGUpOiBSZW1vdmVkLgorCisJKiBjb25maWd1cmUuYWM6IERlZmluZSBfUkVFTlRSQU5ULgorCisyMDAyLTAyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlndXJlLmFjIChNUElfRVhUUkFfQVNNX09CSlMpOiBVc2UgLmxvIHN1ZmZpeC4KKwkoQUNfQ0FOT05JQ0FMX1RBUkdFVCk6IEFkZGVkLgorCisyMDAyLTAyLTA3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbGVhc2VkIDEuMS42LgorCisyMDAyLTAxLTI0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogam5saWIvOiBSZXBsYWNlZCBieSBhIGZyZXNoIGNvcHkgZnJvbSBHbnVQRyAoYWN0dWFsbHkgdGhlIE5ld1BHCisJZGV2ZWxvcG1lbnQgYnJhbmNoKS4gIEFkanVzdGVkIE1ha2VmaWxlLmFtIGFuZCBqbmxpYi1jb25maWcuaAorCWFjY29yZGluZ2x5LgorCisyMDAxLTEyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbGVhc2VkIDEuMS41LgorCisJKiBNYWtlZmlsZS5hbSAoZGlzdC1ob29rKTogT25seSBsb29rIGluIG1waSBhbmQgc2NyaXB0cyBmb3IKKwlkaXN0ZmlsZXM7IHRoaXMgd2F5IHdlIGRvbid0IGluY2x1ZGUgdGhvc2Ugb2YgYSBzdGFsZSAibWFrZSBkaXN0IgorCWRpcmVjdG9yeS4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19GSVhfSERSX1ZFUlNJT04pOiBNYWtlIGl0IHdvcmsgd2l0aCB0aGUgbmV3CisJYXV0b21ha2UuCisJKiBjb25maWd1cmUuYWM6IERvbid0IGNobW9kIGRiMmFueS4KKworMjAwMS0wOC0wNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlZCBjcm9zcyBjb21waWxpbmcgaGFja3MuCisKKzIwMDEtMDgtMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJUmVsZWFzZWQgMS4xLjQuCisKKwkqIGFjaW5jbHVkZS5tNCAoR05VUEdfQ0hFQ0tfVFlQRURFRik6IERlZmluZSBHTlUgU291cmNlLgorCisgICAgICAgIE1pZ3JhdGVkIHRvIGF1dG9jb25mIDIuNTIuCisJKiBhY2luY2x1ZGUubTQ6IFJlbW92ZWQgR05VUEdfTElOS19GSUxFUyBhbmQgY29udmVydGVkLgorCSogYWNjb25maWcuaDogUmVtb3ZlZAorCSogY29uZmlndXJlLmluOiBSZXBsYWNlZCBieS4uLgorCSogY29uZmlndXJlLmFjOiBhbmQgbW9kaWZpZWQgZm9yIHVzZSB3aXRoIGF1dG9jb25mIDIuNTIuICBSZXBsYWNlZAorCUdOVVBHX0xJTktfRklMRVMgd2l0aCBBQ19DT05GSUdfTElOS1MgYW5kIG1vdmVkIHNvbWUgaW5mb3JtYXRpb25hbAorCW1lc3NhZ2VzIHRvIHRoZSBlbmQuIFJlbW92ZWQgLS1lbmFibGUtbS1kZWJ1ZworCisJKiB0ZXN0cy86IE5ldy4KKwkqIE1ha2VmaWxlLmFtOiBJbmNsdWRlZCB0ZXN0cyBkaXJlY3RvcnkKKworCSogY29uZmlndXJlLmluIChEWU5MSU5LX01PRF9DRkxBR1MpOiBVc2UgLXNoYXJlZCB3aXRoIGRlYy1vc2YuCisJUmVwb3J0ZWQgYnkgQ2hyaXMgQWRhbXMuICBNZXJnZWQgc29tZSBjYXNlcy4KKworMjAwMS0wNS0zMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlSZWxlYXNlZCAxLjEuMy4KKworCSogY29uZmlndXJlLmluOiBVc2UgX2djcnlfIHByZWZpeCB3aGVuIGNyZWF0aW5nIHRoZSBjaXBoZXIgY29uc3RydWN0b3IuCisKKwkqIGFjY29uZmlnLmggKF9HQ1JZUFRfSU5fTElCR0NSWVBUKTogRGVmaW5lIGl0IGhlcmUuCisKKzIwMDEtMDUtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhY2luY2x1ZGUubTQgKEdQSF9QUk9HX0RPQ0JPT0spOiBSZW1vdmVkLgorCShHUEhfUFJPR19EQjJBTlkpOiBOZXcuIFRha2VuIGZyb20gR1BILgorCSogY29uZmlndXJlLmluOiBVc2UgaXQgaGVyZS4KKworMjAwMC0xMi0xOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwlNYWpvciBjaGFuZ2U6CisJUmVtb3ZlZCBhbGwgR251UEcgc3R1ZmYgYW5kIHJlbmFtZWQgdGhpcyBwaWVjZSBvZiBzb2Z0d2FyZQorCXRvIGdjcnlwdC4gIFRoZSBkaXJlY3RvcnkgZ2NyeXB0IGhhcyBiZWVuIHJlbmFtZWQgdG8gc3JjLgorCisyMDAwLTExLTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVZlcnNpb24gMS4xLjIgcmVsZWFzZWQuCisKKzIwMDAtMTEtMTMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX0ZJWF9IRFJfVkVSU0lPTik6IFZQQVRIIGJ1aWxkIGZpeC4KKworMjAwMC0xMC0xMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChkaXN0LWhvb2spOiBDcmVhdGUgdGhlIHZlcnNpb24gZmlsZS4KKwkqIGNvbmZpZ3VyZS5pbjogU2V0IHRoZSBsaWJ0b29sIHZlcnNpb24gaGVyZSwgcmVtb3ZlZCB0aGUgbmVlZAorCWZvciB0aGUgdmVyc2lvbiBmaWxlLgorCitNb24gU2VwIDE4IDE2OjM1OjQ1IENFU1QgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BvcGVuaXQuZGU+CisKKyAgICAgICAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX01MT0NLKTogIFJlbW92ZWQgdGhhdCBzaWxseSBta2RpcigpLgorCisgICAgICAgICogY29uZmlndXJlLmluOiAgQ2hhbmdlcyB0byBhbGxvdyBmb3IgU29sYXJpcyByYW5kb20gZGV2aWNlLgorICAgICAgICBCeSBOaWxzIEVsbG1lbnJlaWNoLgorICAgICAgICAoLS13aXRoLWVnZC1zb2NrZXQpOiBOZXcuCisKKyAgICAgICAgKiBjb25maWd1cmUuaW4gKEdOVVBHX0hPTUVESVIpOiBOZXcuCisKKyAgICAgICAgKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBmc3RhdDY0IGFuZCBmb3BlbjY0CisKKyAgICAgICAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX0ZBUVBST0cpOiBOZXcuCisgICAgICAgICogY29uZmlndXJlLmluOiBUZXN0IGZvciB0aGlzLgorCisgICAgICAgICogY29uZmlndXJlLmluIChEWU5MSU5LX01PRF9DRkxBR1MpOiBGaXggYnkgRGF2aWQgQ2hhbXBpb24uCisKK1R1ZSBBdWcgMjIgMTQ6MzE6MTUgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAgICAgICBWZXJzaW9uIDEuMS4xCisKK0ZyaSBBdWcgMTggMTQ6Mjc6MTQgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAqIGFnZW50LzogTmV3LgorICAqIE1ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IFN1cHBvcnQgZm9yIHRoZSBuZXcgZGlyZWN0b3J5LgorCitNb24gSnVsIDE3IDE2OjM1OjQ3IENFU1QgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0A+CisKKyAgKiBjb25maWd1cmUuaW4gKG1pbmd3MzIpOiBDaGFuZ2VzIHRvIGFsbG93IGZvciBtaW5ndzMybXN2YworCitGcmkgSnVsIDE0IDE5OjM4OjIzIENFU1QgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0A+CisKKyAgVGhlIGJpZyBtZXJnZSBiZXR3ZWVuIHRoaXMgb25lIGFuZCB0aGUgc3RhYmxlIGJyYW5jaCAxLjAuICBTdGlsbCBuZWVkCisgIHRvIG1lcmdlIFROQU5LUywgQVVUSE9SUyBhbmQgc3VjaC4gIEl0IHByb2JhbHkgZG9lcyBub3QgY29tcGlsZSB5ZXQuCisKKyAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX01MT0NLKTogRml4ZWQgc3ludGF4IGVycm9yIGluIEMgY29kZS4KKworICAqIGNvbmZpZ3VyZS5pbjogQWRkIGNoZWNrIGZvciB0ZXJtaW8uaCwgd2FpdCB1bmN0aW9zbiBhbmQgc2lnYWN0aW9uLgorCisgICogYWNpbmNsdWRlLm00LCBjb25maWd1cmUuaW4gKEdOVVBHX0NIRUNLX0dOVU1BS0UpOiBOZXcuCisKKyAgKiBhY2luY2x1ZGUubTQgKE1LRElSX1RBS0VTX09ORV9BUkcpOiBDaGVjayBzb21lIGhlYWRlcnMuIEJ5IEdh62wgUXXpcmkuCisKKyAgKiBjb25maWd1cmUuaW4gKEFNX0lOSVRfQVVUT01BS0UpOiBVc2UgdGhpcyBub3cuIEJ5IEdh62wuCisKKyAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX0VYUE9SVERZTkFNSUMpOiBSZXBsYWNlbWVudCBmb3IKKyAgR05VUEdfQ0hFQ0tfUkRZTkFNSUMgd2hpY2ggc2hvdWxkIGhhbmRsZSBnY2Mgd2l0aCBub24gR05VIGxkIG5pY2VyLgorICBDb250cmlidXRlZCBieSBEYXZlIER5a3N0cmEuCisgICogY29uZmlndXJlLmluIChHTllQR19DSEVDS19SRFlOQU1JQyk6IFJlcGxhY2VkIGJ5IHRoZSBuZXcgY2hlY2suCisKKyAgKiBjb25maWd1cmUuaW46IEFkZCBhIHRlc3QgZm9yIHVuaXNnbmVkIGxvbmcgbG9uZy4KKworICAqIGNvbmZpZ3VyZS5pbiAoRFlOTElOS19NT0RfQ0ZMQUdTKTogU2V0IGRpZmZlcmVudCBmb3IgTmV0QlNELgorCisgICogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIGNsb2NrX2dldHRpbWUKKworICAqIGNvbmZpZ3VyZS5pbiAoQUxMX0xJTkdVQVMpOiBBZGQgbmwuCisgICogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBFc3BlcmFudG8uCisgICogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBzdiBhbmQgamEuCisKKyAgKiBjb25maWd1cmUuaW46IFVzZSAvdXNyL2xvY2FsIGZvciBDRkxBR1MgYW5kIExERkxBR1Mgd2hlbgorICB0YXJnZXQgaXMgZnJlZWJzZC4gIEJ5IFLpbWkuCisKKyAgKiBjb25maWd1cmUuaW46IERvIG5vdCBzZXQgZGV2ZWxvcG1lbnQgdmVyc2lvbiB3aGVuIHRoZSB2ZXJzaW9uIGhhcworICBhIGRhc2ggaW4gaXQuICBTdWdnZXN0ZWQgYnkgRGF2ZSBEeWtzdHJhLgorCisgICogY29uZmlndXJlLmluOiBSZW1vdmVkIHN1YnN0aXR1dGlvbiBmb3IgZG9jL2dwaC9NYWtlZmlsZS4KKyAgRG8gYWxsIHRoZSBnY2Mgd2FybmluZyBvbmx5IGluIG1haW50YWluZXIgbW9kZS4KKworICAqIGNvbmZpZ3VyZS5pbiAoZGxvcGVuKTogVXNlIENIRUNLX0ZVTkMgZm9yIGEgdGVzdCBvZiBkbG9wZW4gaW4gbGliYy4KKyAgU3VnZ2VzdGVkIGJ5IEFsZXhhbmRyZSBPbGl2YS4KKyAgKC1XYWxsKTogTW92ZWQgdGhlIHNldHR0aW5nIG9mIGdjYyB3YXJuaW5nIG9wdGlvbnMgbmVhciB0byB0aGUgZW5kCisgIHNvIHRoYXQgdGVzdHMgZG9uJ3QgZ2V0IGNvbmZ1c2VkLiAgU3VnZ2VzdGVkIGJ5IFBhdWwgRC4gU21pdGguCisKKyAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX1NZU19OTV9QQVJTRSk6IEFkZGVkIEJTREkgc3VwcG9ydC4KKyAgKEdOVVBHX0NIRUNLX1JEWU5BTUlDKTogRGl0dG8uCisKKyAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX01MT0NLKTogQ2hhbmdlZCB0aGUgd2F5IHRvIHRlc3QgZm9yCisgIGxpYnJ0LiAgVGVzdCBzdWdnZXN0ZWQgYnkgSmVmZiBMb25nLgorCisgICogYWNpbmNsdWRlLm00IChHTlVQR19DSEVDS19NTE9DSyk6IERvIGxpYnJ0IGNoZWNrIG9ubHkgd2hlbgorICB3ZSBjYW4ndCBsaW5rIGEgdGVzdCBwcm9ncmFtLiAgVGhpcyB3YXkgR05VIHN5c3RlbXMgZG9uJ3QgbmVlZAorICB0byBsaW5rIGFnYWluc3QgbGlucnQuCisgIChHTlVQR19DSEVDS19JUEMpOiBGaXhlZCB1c2Ugb2YgVFJZX0NPTVBJTEUgbWFjcm8uICBGcm9tIFRpbSBNb29uZXkuCisKKyAgKiBhY2luY2x1ZGUubTQgKEdOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSk6IEFkZCBzdXBwb3J0IGZvcgorICBESkdQUC4KKyAgKEdOVVBHX0NIRUNLX01MT0NLKTogQ2hlY2sgd2hldGhlciBtbG9jayBzaXRzIGluIGxpYnJ0LgorCisgICogYWNpbmNsdWRlLm00IChHTlVQR19DSEVDS19SRFlOQU1JQyk6IEFkZCBOZXRCU0QuIEJ5IFRob21hcyBLbGF1c25lci4KKworICAqIGFjY29uZmlnLmggKEhBVkVfTUxPQ0spOiBBZGRlZAorCitNb24gTWFyIDEzIDE5OjIyOjQ2IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworCSogY29uZmlndXJlLmluOiBOb3cgdXNlcyB0aGUgRG9jYm9vayBNNHMgZnJvbSBHUEguCisKK01vbiBKYW4gMzEgMTc6NDY6MzUgQ0VUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAPgorCisJKiBNYWtlZmlsZS5hbTogUmUtYWRkZWQgdG9vbHMuIEJ5IFLpbWkuCisKK01vbiBKYW4gMzEgMTY6Mzc6MzQgQ0VUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQ3JlYXRlIGEgc3ltbGluayBmb3IgdHlwZXMuaCBpbiBnY3J5cHQvLgorCitUaHUgSmFuIDI3IDE4OjAwOjQ0IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBjb25maWd1cmUuaW4gKGcxMGRlZnMuaCk6IFJlcGxhY2VkIGJ5IGdudXBnLWRlZnMuaAorCitNb24gSmFuIDI0IDEzOjA0OjI4IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBqbmxpYi8gOiBOZXcuCisKKwkqIGNvbmZpZ3VyZS5pbjogRG8gc2V0IGRldmVsb3BtZW50IHZlcnNpb24gd2hlbiB0aGUgdmVyc2lvbiBoYXMKKwlhIGRhc2ggaW4gaXQuICBTdWdnZXN0ZWQgYnkgRGF2ZSBEeWtzdHJhLgorCitUaHUgRGVjICA5IDE3OjIyOjI3IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX0ZJWF9IRFJfVkVSU0lPTik6IE5ldy4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgYW5kIGZpeCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZ2NyeXB0L2djcnlwdC5oCisJc28gdGhhdCBpdCBpcyBhbHdheXMgdGhlIHNhdmUgYXMgVkVSU0lPTi4KKworVGh1IE9jdCAyOCAxNjoxNzo0NiBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIFN0YXJ0ZWQgd2l0aCBkZXZlbG9wbWVudCBzZXJpZXMgMS4xIG9uIDE5OTktMTAtMjYKKworVHVlIE9jdCAyNiAxNDoxMDoyMSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIFJFQURNRS1hbHBoYTogTmV3CisKKwkqIGNvbmZpZ3VyZS5pbjogRml4ZWQgcXVvdGluZyBpbiB0ZXN0IGZvciBkZXZlbG9wbWVudCB2ZXJzaW9uLgorCisJKiBUSEFOS1M6IEFkZCBlbnRyaWVzIGZvciBNaWNoYWVsLCBCcmVubm8gYW5kIEogSG9yYWNpbyB3aG8gZGlkCisJdmVyeSBuaWNlIEhvd3RvIGRvY3VtZW50cyAtIEkgYXBvbGlnaXplIGZvciBmb3JnZXR0aW5nIHRvIG1lbnRpb24gdGhlbQorCWVhcmxpZXIuCisKK0ZyaSBTZXAgMTcgMTI6NTY6NDIgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkICItbGNhcCIgd2hlbiBjYXBhYmlsaXRpZXMgYXJlIHJlcXVlc3RlZC4KKwlBZGQgdGhlIGNvbmRpdGlvbmFsIENST1NTX0NPTVBJTElORy4KKwkqIE1ha2VmaWxlLmFtOiBEb24ndCB1c2UgY2hlY2tzIHdoZW4gQ1JPU1NfQ09NUElMSU5HLgorCisKK1dlZCBTZXAgMTUgMTY6MjI6MTcgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisKKwkqIGNvbmZpZ3VyZS5pbiAoQUxMX0xJTkdVQVMpOiBBZGQgcHRfUFQuCisKKwkqIGNvbmZpZ3VyZS5pbjogU29tZSB0d2Vha3MgZm9yIGNyb3NzIGNvbXBpbGluZyB1bmRlciBNaW5nVzMyCisJKiBhY2NvbmZpZy5oIChVU0VfU1RBVElDX1JORFczMik6IE5ldy4KKworVHVlIFNlcCAgNyAxNzowODoxMCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKworCSogVkVSU0lPTjogU2V0IHRvIDEuMC4wLgorCitNb24gU2VwICA2IDE5OjU5OjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCisJKiBjb25maWd1cmUuaW46IENyZWF0ZSBtYWtlZmlsZSBpbiBkb2MvZ3BoCisKKwkqIGFjaW5jbHVkZS5tNCAoR05VUEdfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHKTogTmV3CisJKiBjb25maWd1cmUuaW46IHVzZSB0aGUgYWJvdmUuCisKK1RodSBTZXAgIDIgMTY6NDA6NTUgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisKKwkqIFZFUlNJT046IFNldCB0byAwLjkuMTEuCisKK1R1ZSBBdWcgMzEgMTc6MjA6NDQgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW46IE1pbm9yIGNoYW5nZXMgdG8gdGhlIE9TLzIgYW5kIE1pbmd3MzIgc3lzdGVtIGxhYmVscy4KKwlBZGQgYSBwcmludGFibGUgbmFtZSBmb3IgSHVyZC4KKworTW9uIEF1ZyAzMCAyMDozODozMyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogU29tZSBzdXBwb3J0IGZvciBESkdQUCAoTWFyayBFbGJyZWNodCkKKworV2VkIEF1ZyAgNCAxMDozNDo0NiBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIFZFUlNJT046IFNldCB0byAwLjkuMTAuCisKK01vbiBKdWwgMjYgMDk6MzQ6NDYgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSk6IHJlbW92ZSBpbml0IG9mIGFjX2N2Xy4uLgorCisJKiBNYWtlZmlsZS5hbSAoRElTQ0xFQU5GSUxFUyk6IE5ldworCitGcmkgSnVsIDIzIDEzOjUzOjAzIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogVkVSU0lPTjogU2V0IHRvIDAuOS45LgorCisJKiBjb25maWd1cmUuaW46IFByaW50IGEgbm90aWNlIHdoZW4gcm5kdW5peCBpcyB1c2VkLgorCitUaHUgSnVsIDE1IDEwOjE1OjM1IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19TWVNfU1lNQk9MX1VOREVSU0NPUkUpOiBGaXhlZCBsYXN0IG1vZGlmaWNhdGlvbi4KKworV2VkIEp1bCAgNyAxMzowODo0MCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBTdXBwb3J0IGZvciBsaWJ0b29sLgorCSogY29uZmlndXJlLmluOiBEaXR0by4KKworVHVlIEp1biAyOSAyMTo0NDoyNSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbiAodXNlX2xvY2FsX3psaWIpOiBUaGUgbG9zdCBkb2xsYXIgaXMgYmFjay4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19TWVNfU1lNQk9MX1VOREVSU0NPUkUpOiBBZGQgRU1YIGNhc2UuCisJKiBjb25maWd1cmUuaW46IEFub3RoZXIgdmFyaWFudCBvZiB0aGUgTVggdmVuZG9yIHN0cmluZworCisJKiBjb25maWd1cmUuaW4gKC0td2l0aC1jYXBhYmlsaXRpZXMpOiBTb21lIHRlc3QgY29kZSAoUmVtaSkuCisKK1NhdCBKdW4gMjYgMTI6MTU6NTkgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX1JEWU5BTUlDKTogU3VwcG9ydCBmb3IgSFBVWCBhbmQgSVJJWC4KKwkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9ETF9TSExfTE9BRCk6IE5ldyBmb3IgSFBVWCAoRGF2ZSBEeWtzdHJhKS4KKworCSogVkVSU0lPTjogTm93IDAuOS44CisKK1dlZCBKdW4gMTYgMjA6MTY6MjEgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB0ZXN0IGZvciBkb2Nib29rLXRvLW1hbgorCitUdWUgSnVuIDE1IDEyOjIxOjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYWNpbmNsdWRlLm00IChHTlVQR19TWVNfTk1fUEFSU0UpOiBTdXBwb3J0IGZvciB7bmV0LGZyZWV9YnNkLAorCitUaHUgSnVuIDEwIDE0OjE4OjIzIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlndXJlLmluIChaTElCLEdEQk0pOiBDaGVjayBib3RoLCBoZWFkZXIgYW5kIGxpYi4KKworU2F0IEp1biAgNSAxNTozMDozMyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHBrY2xpc3QuYyAoa2V5X3ByZXNlbnRfaW5fcGtfbGlzdCk6IE5ldyAoTWljaGFlbCkuCisKK1R1ZSBNYXkgMjUgMTk6NTA6MzIgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW4gKElTX0RFVkVMT1BNRU5UX1ZFUlNJT04pOiBGaXhlZCBkZXRlY3Rpb24uCisKK1N1biBNYXkgMjMgMTQ6MjA6MjIgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSk6IGFzc3VtZSB5ZXMgd2hlbgorCWNyb3NzLWNvbXBpbGluZy4KKworTW9uIE1heSAxNyAyMTo1NDo0MyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc29ja2V0KTogRml4IGZvciBVbmlzeXMgYnkgS2F0c3VoaXJvIEtvbmRvdS4KKworU2F0IE1heSAgOCAxOToyODowOCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE5FV1M6IEFkZCBhIG1hcmtlciBsaW5lIHdoaWNoIEkgZm9yZ290IHRvIGRvIGZvciAwLjkuNi4KKworVGh1IE1heSAgNiAxNDoxODoxNyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIFJFQURNRTogTWlub3IgdXBkYXRlcworCisJKiBWRVJTSU9OOiBOb3cgMC45LjYKKworVGh1IEFwciAgOCAwOTozNTo1MyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGFjaW5jbHVkZS5tNCAoR05VUEdfQ0hFQ0tfUkRZTkFNSUMpOiBGaXggZm9yCisJCQkJCSAgICAgICBhbWlnYS1vcGVuYnNkIChQZXRlciBSZWljaCkKKwkoR05VUEdfUFJPR19OTSk6IERpdHRvCisKK1dlZCBBcHIgIDcgMjA6NTE6MzkgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBNYWtlZmlsZS5hbSAoZzEwZGVmcy5oKTogUmVtb3ZlZC4KKwkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUX0NPTU1BTkRTKTogQ3JlYXRlIGcxMGRlZnMuaAorCitTYXQgTWFyIDIwIDEyOjU1OjMzIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBWRVJTSU9OOiBOb3cgMC45LjUKKworU3VuIE1hciAxNCAxOTozNDozNiBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYWNpbmNsdWRlLm00IChBTV9TWVNfU1lNQk9MX1VOREVSU0NPUkUpOiBSZW1vdmVkIGJlY2F1c2UgaXQgaXMKKwlub3cgaW4gdGhlIGxhdGVzdCBsaWJ0b29sLgorCitUaHUgTWFyIDExIDE2OjM5OjQ2IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgdGhlIG5lZWQgZm9yIGxpYnRvb2wKKworTW9uIE1hciAgOCAyMDo0NzoxNyBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlndXJlLmluIChETFNZTV9ORUVEU19VTkRFUlNDT1JFKTogUmVwbGFjZWQuCisJKiBhY2luY2x1ZGUuaW4gKEFNX1NZU19TWU1CT0xfVU5ERVJTQ09SRSk6IE5ldy4KKworCSogVkVSU0lPTjogTm93IDAuOS40CisKK1N1biBGZWIgMjggMTk6MTE6MDAgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbiAoZGxkKTogVGVzdCBkaXNhYmxlZC4KKworRnJpIEZlYiAyNiAxNzo1NTo0MSBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZW5jb2RlLmMgKGVuY29kZV9zaW1wbGUpOiB0ZW1wb3JhcnkgZml4LgorCitXZWQgRmViIDI0IDExOjA3OjI3IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW46IE5ldyBvcHRpb24gLS1lbmFibGUtc3RhdGljLXJuZC4KKworTW9uIEZlYiAyMiAyMDowNDowMCBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogQlVHUzogTm93IHdlIGFzc2lnbiBidWcgbnVtYmVycy4KKwkqIE9CVUdTOiBOZXcgdG8ga2VlcCByYWNrIG8gZml4ZWQgYnVncyAoQ1ZTIG9ubHkpCisKK0ZyaSBGZWIgMTkgMTg6MDE6NTQgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIFZFUlNJT046IFJlbGVhc2VkIDAuOS4zCisKK0ZyaSBGZWIgMTkgMTU6NDk6MTUgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlZCBnZXR0ZXh0IG1hY3Jvcy4KKworVHVlIEZlYiAxNiAxNDoxMDowMiBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlndXJlLmluIChzb2NrZXQpOiBDaGVjayBmb3IgLWxzb2NrZXQgYW5kIC1sbnNsLgorCShvc2Y0KTogRGlzYWJsZSBhbGwgd2FybmluZ3MgZm9yIERFQydzIGNjLgorCSgtV2FsbCk6IEFkZCBtb3JlIHdhcm5pbmcgb3B0aW9ucyBmb3IgZ2NjCisKK1NhdCBGZWIgMTMgMTI6MDQ6NDMgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlZCBkZXRlY3Rpb24gb2YgY29tcGlsZXIgZmxhZ3MuCisJKiBpbnRsLyA6IFJlbW92ZWQgZGlyZWN0b3J5CisKK1dlZCBGZWIgMTAgMTc6MTU6MzkgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGFjaW5jbHVkZS5tNCAoR05VUEdfQ0hFQ0tfUkRZTkFNSUMpOiBGaXggZm9yIGZyZWVic2QgMi4yCisKKwkqIGNvbmZpZ3VyZS5pbjogYSBsb3Qgb2YgY2hhbmdlcyB0byBhbGxvdyBzZWxlY3Rpb24gb2YgbW9kdWxlcy4KKwlBZGQgc3VwcG9ydCBmb3IgT1MvMi4KKworCSogYWNpbmNsdWRlLm00OiBhZGQgc29tZSBtb3JlIGNhY2hpbmcKKworCSogUkVBRE1FOiBTcGVsbGluZyBhbmQgZ3JhbW1hciBjb3JyZWN0aW9ucyAoSm9obiBBLiBNYXJ0aW4pCisJKiBJTlNUQUxMOiBEaXR0by4KKworV2VkIEphbiAyMCAyMTo0MDoyMSBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlndXJlLmluOiAtLWVuYWJsZS1tLWd1YXJkIGlzIG5vdyBkZWZhdWx0CisKK1dlZCBKYW4gMTMgMTI6NDk6MzYgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIElOU1RBTEw6IEFwcGxpZWQgbmV3IGluZm9ybWF0aW9uIGhvdyB0byBidWlsZCBycG1zIGJ5IEZhYmlvIENvYXR0aQorCSogTWFrZWZpbGUuaW4gKGdudXBnLnNwZWMpOiBDaGFuZ2VkIHRoZSBuYW1lcy4KKworVHVlIEphbiAxMiAxMToxNzoxOCBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlnLmxpbmtzIChtNjhrLWF0YXJpLW1pbnQpOiBOZXcKKworVHVlIEphbiAxMiAwOToxNzoxOSBDRVQgMTk5OSAgR2HrbCBRdelyaSA8Z3F1ZXJpQG1haWwuZG90Y29tLmZyPgorCisJKiBhbGw6IEZpeGVkIHR5cG9zIGFsbCBvdmVyIHRoZSBwbGFjZQorCitTYXQgSmFuICA5IDE2OjAyOjIzIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBhIHdheSB0byBzdGF0aWNhbGx5IGxpbmsgcm5kdW5peAorCitTdW4gSmFuICAzIDE1OjI4OjQ0IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhY2luY2x1ZGUubTQgKEdOVVBHX0NIRUNLX1JEWU5BTUlDKTogTmV3LgorCSogY29uZmlndXJlLmluIChEWU5MT0FEX0NGTEFHUyk6IFVzZSByZXN1bHQgZnJvbSBDSEVDS19SRFlOQU1JQworCitXZWQgRGVjIDIzIDEzOjE4OjE0IENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBSRUFETUU6IFJlcGxhY2VkIHRoZSBjb21tYW5kIG92ZXJ2aWV3IHdpdGggYSBzaG9ydCBpbnRyby4KKworU2F0IERlYyAxMiAxODo0MDozMiBDRVQgMTk5OCAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIGRsb3BlbiBpbiBsaWJjIChHcmVnIFRyb3hlbCkKKwlhbmQgYSBuZXcgZGVmaW5lCisJKiBhY2NvbmZpZy5oIChETFNZTV9ORUVEU19VTkRFUlNDT1JFKTogTmV3LgorCitUaHUgRGVjIDEwIDIwOjE1OjM2IENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhY2luY2x1ZGUubSAoR05VUEdfQ0hFQ0tfUElDKTogTmV3CisJKiBjb25maWd1cmUuaW4sIGFjaW5jbHVkZS5tNDogUmVuYW1lZCBhbGwgV0tfIHRvIEdOVVBHXworCitUdWUgRGVjICA4IDE1OjA5OjI5IENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBWRVJTSU9OOiBTZXQgdG8gMC40LjUKKworV2VkIE5vdiAyNSAxMjozODoyOSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjb25maWd1cmUuaW4gKFVTRV9STkRMSU5VWCk6IE5ldy4KKworRnJpIE5vdiAyMCAxOTozNDo1NyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBWRVJTSU9OOiBSZWxlYXNlZCAwLjQuNAorCisJKiBjb25maWd1cmUuaW4gKHRyeV9hc21fbW9kdWxlcyk6IEZvciBvcHRpb24gLS1kaXNhYmxlLWFzbQorCitUdWUgTm92IDEwIDE5OjMyOjQwIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbiAoTVBJX1NGTEFHUyk6IE5ldy4KKworVHVlIE5vdiAxMCAxMzo0NDo1MyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBBQk9VVC1OTFM6IE5ldworCSogY29uZmlndXJlLmluIChBQ19SRVZJU0lPTik6IE5ldy4KKworU3VuIE5vdiAgOCAxODoyMDozNSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBWRVJTSU9OOiBTZXQgdG8gMC40LjMKKworU3VuIE9jdCAyNSAxOTo0OTozNyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBNYWtlZmlsZS5hbSAoZzEwZGVmcy5oKTogTmV3IG1hY3JvIEdOVVBHX0RBVEFESVIuCisKK1dlZCBPY3QgMjEgMTc6MjQ6MjQgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluOiBSZW1vdmVkIGdldHRleHQga2x1ZGdlCisJKiBhY2luY2x1ZGUubTQ6IEFkZCBwYXRjaGVkIEFNX1dJVEhfTktTIG1hY3JvCisKK1R1ZSBPY3QgMjAgMTk6MDM6MzYgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluOiBLbHVkZ2UgdG8gbWFrZSBBTV9HTlVfR0VUVEVYVCB3b3JrLAorCWNoYW5nZWQgc29tZSBtYWNvcnMgdG8gbW9yZSBtb2Rlcm4gdmVyc2lvbnMuIEFsc28KKwljaGFuZ2VnIHRoZSBhbGwgbWFrZWZpbGVzIHRvIHJlbW92ZSBkdXBsaWNhdGUgLi4vaW50bC4KKwkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlZCB0aGUgZ2V0dGV4dCBzdHVmZiwgYXMgdGhpcworCWFscmVhZHkgY29tZXMgd2l0aCBhdXRvbWFrZSBub3cuCisKK1dlZCBPY3QgMTQgMTI6MTE6MzQgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluIChOQU1FX09GX0RFVl9SQU5ET00pOiBOZXcuCisJKERZTkxJTktfTU9EX0NGTEFHUyk6IE5ldy4KKworVGh1IE9jdCAgOCAxMDo1NToxNSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBNYWtlZmlsZS5hbSAoZzEwZGVmcy5oKTogY3JlYXRlcyBpbmNsdWRlIGZpbGUKKwkqIGFjY29uZmlnLmg6IG5vdyBpbmNsdWRlcyBnMTBkZWZzLmgKKwkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlZCBHMTBfTE9DQUxFRElSIGFuZCBHTlVQR19MSUIKKworVGh1IFNlcCAxNyAxODo0OTo0MCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQChub25lKSkKKworCSogTWFrZWZpbGUuYW0gKGRpc3QtaG9vayk6IE5vdyBjcmVhdGVzIFJQTSBmaWxlLgorCSogc2NyaXB0cy9nbnVwZy5zcGVjOiBOZXcgdGVtcGxhdGUgZmlsZSBmb3IgUlBNcworCitUaHUgSnVsIDMwIDE5OjE3OjA3IDE5OTggIFdlcm5lciBLb2NoICAod2tAKG5vbmUpKQorCisJKiBhY2luY2x1ZGUuaCAoV0tfQ0hFQ0tfSVBDKTogTmV3CisJKiBjb25maWd1cmUuaW4gOiBBZGQgY2hlY2tzIGZvciBTeXNWIElQQworCitUaHUgSnVuIDI1IDExOjE4OjQ5IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbiAoLS1kaXNhYmxlLWR5bmxvYWQpOiBOZXcuCisKK1dlZCBKdW4gMTAgMDc6NDg6NTkgMTk5OCAgV2VybmVyIEtvY2gsbW9iaWwsLCwJKHdrQHRvYm9sZCkKKworCSogY29uZmlndXJlLmluIChHTlVQR19MSUJESVIpOiBOZXcuCisKK01vbiBNYXkgMjUgMTk6MTA6NTkgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogcmFuZC11bml4LmMgKGZhc3RfcmFuZG9tX3BvbGwpOiBmaXhlZCBzeW50YXggYnVnLgorCitNb24gTWF5IDExIDEwOjIxOjMxIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbiAoUFJJTlRBQkxFX09TX05BTUUpOiBMaW51eCBpcyBub3cgR05VL0xpbnV4CisKK1R1ZSBBcHIgMTQgMTk6MDg6MDUgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogW2FsbCBmaWxlc106IEFwcGxpZWQgTWF0dGhldyBTa2FsYSdzIHR5cG8gYW5kIGdyYW1tYXIgZml4ZXMuCisKK1dlZCBNYXIgIDQgMTA6MzI6NDAgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluIChnZXRydXNhZ2UsZ2V0dGltZW9mZGF5KTogTmV3IHRlc3RzLgorCitGcmkgRmViIDI3IDEzOjE0OjE3IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbiAoLS1kaXNhYmxlLW0tZ3VhcmQpOiBOZXcuCisKK1RodSBGZWIgMjYgMTc6MDk6MjcgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluLCBhY2luY2x1ZGUubTQsIGludGwvLCBwby86IE5ldyBtYWNyb3MgdGFrZW4KKwlmcm9tIEdOT01FLCBzd2l0Y2hlZCB0byBhdXRvbWFrZSAxLjJmCisKK1RodSBGZWIgMjYgMDk6MDU6NDYgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluIChkb2MvTWFrZWZpbGUpOiBOZXcKKworVGh1IEZlYiAyNiAwNzo0MDo0NyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjb25maWd1cmUuaW46IENoYW5nZWQgZ2V0dGV4dCBzdHVmZgorCitXZWQgRmViIDI1IDExOjQ0OjEwIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNoZWNrcy8qdGVzdCA6IHJlc3RydWN0dXJlZCB0aGUgZGlyZWN0b3J5LgorCitUdWUgRmViIDI0IDE1OjU5OjEyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBHTlVQRyBhbmQKKwljaG5hZ2VkIHNldmVyYWwgb3RoZXIgbmFtZXMgdG9vLgorCitXZWQgRmViIDE4IDE3OjM2OjQ1IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIE1ha2VmaWxlLmFtIChjaGVja3MpOiBOZXcuCisKK1NhdCBGZWIgMTQgMTU6Mzc6NTUgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlndXJlLmluIChtcGlfY29uZmlnX2RvbmUpOiBSZW1vdmVkIGFzbSBsaW5rcyBjYWNoaW5nLgorCitTYXQgRmViIDE0IDE0OjAyOjIwIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZ3VyZS5pbiAoUFJJTlRBQkxFX09TX05BTUUpOiBOZXcuCisJKiBhY2NvbmZpZy5oOiBMaWtld2lzZS4KKworRnJpIEZlYiAxMyAxOTo0Mzo0MSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjb25maWd1cmUuaW4gOiBGaXhlZCB6bGliIHN0dWZmCisJKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UKKworCisgQ29weXJpZ2h0IDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYsCisJICAgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKworTG9jYWwgVmFyaWFibGVzOgorYnVmZmVyLXJlYWQtb25seTogdAorRW5kOgpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ODcxNAotLS0gL2Rldi9udWxsCisrKyBiL0lOU1RBTEwKQEAgLTAsMCArMSwyMzQgQEAKK0luc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKworQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LAorMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCitCYXNpYyBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCitCcmllZmx5LCB0aGUgc2hlbGwgY29tbWFuZHMgYC4vY29uZmlndXJlOyBtYWtlOyBtYWtlIGluc3RhbGwnIHNob3VsZAorY29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgdGhpcyBwYWNrYWdlLiAgVGhlIGZvbGxvd2luZworbW9yZS1kZXRhaWxlZCBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyaWM7IHNlZSB0aGUgYFJFQURNRScgZmlsZSBmb3IKK2luc3RydWN0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UuCisKKyAgIFRoZSBgY29uZmlndXJlJyBzaGVsbCBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgY29ycmVjdCB2YWx1ZXMgZm9yCit2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgSXQgdXNlcwordGhvc2UgdmFsdWVzIHRvIGNyZWF0ZSBhIGBNYWtlZmlsZScgaW4gZWFjaCBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2UuCitJdCBtYXkgYWxzbyBjcmVhdGUgb25lIG9yIG1vcmUgYC5oJyBmaWxlcyBjb250YWluaW5nIHN5c3RlbS1kZXBlbmRlbnQKK2RlZmluaXRpb25zLiAgRmluYWxseSwgaXQgY3JlYXRlcyBhIHNoZWxsIHNjcmlwdCBgY29uZmlnLnN0YXR1cycgdGhhdAoreW91IGNhbiBydW4gaW4gdGhlIGZ1dHVyZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBhbmQgYQorZmlsZSBgY29uZmlnLmxvZycgY29udGFpbmluZyBjb21waWxlciBvdXRwdXQgKHVzZWZ1bCBtYWlubHkgZm9yCitkZWJ1Z2dpbmcgYGNvbmZpZ3VyZScpLgorCisgICBJdCBjYW4gYWxzbyB1c2UgYW4gb3B0aW9uYWwgZmlsZSAodHlwaWNhbGx5IGNhbGxlZCBgY29uZmlnLmNhY2hlJworYW5kIGVuYWJsZWQgd2l0aCBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScgb3Igc2ltcGx5IGAtQycpIHRoYXQgc2F2ZXMKK3RoZSByZXN1bHRzIG9mIGl0cyB0ZXN0cyB0byBzcGVlZCB1cCByZWNvbmZpZ3VyaW5nLiAgQ2FjaGluZyBpcworZGlzYWJsZWQgYnkgZGVmYXVsdCB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGggYWNjaWRlbnRhbCB1c2Ugb2Ygc3RhbGUKK2NhY2hlIGZpbGVzLgorCisgICBJZiB5b3UgbmVlZCB0byBkbyB1bnVzdWFsIHRoaW5ncyB0byBjb21waWxlIHRoZSBwYWNrYWdlLCBwbGVhc2UgdHJ5Cit0byBmaWd1cmUgb3V0IGhvdyBgY29uZmlndXJlJyBjb3VsZCBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0sIGFuZCBtYWlsCitkaWZmcyBvciBpbnN0cnVjdGlvbnMgdG8gdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gdGhlIGBSRUFETUUnIHNvIHRoZXkgY2FuCitiZSBjb25zaWRlcmVkIGZvciB0aGUgbmV4dCByZWxlYXNlLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgY2FjaGUsIGFuZCBhdAorc29tZSBwb2ludCBgY29uZmlnLmNhY2hlJyBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdQorbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorCisgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3UgbmVlZCBgY29uZmlndXJlLmFjJyBpZgoreW91IHdhbnQgdG8gY2hhbmdlIGl0IG9yIHJlZ2VuZXJhdGUgYGNvbmZpZ3VyZScgdXNpbmcgYSBuZXdlciB2ZXJzaW9uCitvZiBgYXV0b2NvbmYnLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGNvbXBpbGUgdGhpcyBwYWNrYWdlIGlzOgorCisgIDEuIGBjZCcgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgYW5kIHR5cGUKKyAgICAgYC4vY29uZmlndXJlJyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgZm9yIHlvdXIgc3lzdGVtLgorCisgICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgbWlnaHQgdGFrZSBhIHdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzCisgICAgIHNvbWUgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCisKKyAgMi4gVHlwZSBgbWFrZScgdG8gY29tcGlsZSB0aGUgcGFja2FnZS4KKworICAzLiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGNoZWNrJyB0byBydW4gYW55IHNlbGYtdGVzdHMgdGhhdCBjb21lIHdpdGgKKyAgICAgdGhlIHBhY2thZ2UuCisKKyAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCisgICAgIGRvY3VtZW50YXRpb24uCisKKyAgNS4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQorICAgICBzb3VyY2UgY29kZSBkaXJlY3RvcnkgYnkgdHlwaW5nIGBtYWtlIGNsZWFuJy4gIFRvIGFsc28gcmVtb3ZlIHRoZQorICAgICBmaWxlcyB0aGF0IGBjb25maWd1cmUnIGNyZWF0ZWQgKHNvIHlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IKKyAgICAgYSBkaWZmZXJlbnQga2luZCBvZiBjb21wdXRlciksIHR5cGUgYG1ha2UgZGlzdGNsZWFuJy4gIFRoZXJlIGlzCisgICAgIGFsc28gYSBgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB0YXJnZXQsIGJ1dCB0aGF0IGlzIGludGVuZGVkIG1haW5seQorICAgICBmb3IgdGhlIHBhY2thZ2UncyBkZXZlbG9wZXJzLiAgSWYgeW91IHVzZSBpdCwgeW91IG1heSBoYXZlIHRvIGdldAorICAgICBhbGwgc29ydHMgb2Ygb3RoZXIgcHJvZ3JhbXMgaW4gb3JkZXIgdG8gcmVnZW5lcmF0ZSBmaWxlcyB0aGF0IGNhbWUKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitDb21waWxlcnMgYW5kIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHN5c3RlbXMgcmVxdWlyZSB1bnVzdWFsIG9wdGlvbnMgZm9yIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgdGhhdCB0aGUKK2Bjb25maWd1cmUnIHNjcmlwdCBkb2VzIG5vdCBrbm93IGFib3V0LiAgUnVuIGAuL2NvbmZpZ3VyZSAtLWhlbHAnIGZvcgorZGV0YWlscyBvbiBzb21lIG9mIHRoZSBwZXJ0aW5lbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisgICBZb3UgY2FuIGdpdmUgYGNvbmZpZ3VyZScgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworYnkgc2V0dGluZyB2YXJpYWJsZXMgaW4gdGhlIGNvbW1hbmQgbGluZSBvciBpbiB0aGUgZW52aXJvbm1lbnQuICBIZXJlCitpcyBhbiBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPWM5OSBDRkxBR1M9LWcgTElCUz0tbHBvc2l4CisKKyAgICpOb3RlIERlZmluaW5nIFZhcmlhYmxlczo6LCBmb3IgbW9yZSBkZXRhaWxzLgorCitDb21waWxpbmcgRm9yIE11bHRpcGxlIEFyY2hpdGVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG1vcmUgdGhhbiBvbmUga2luZCBvZiBjb21wdXRlciBhdCB0aGUKK3NhbWUgdGltZSwgYnkgcGxhY2luZyB0aGUgb2JqZWN0IGZpbGVzIGZvciBlYWNoIGFyY2hpdGVjdHVyZSBpbiB0aGVpcgorb3duIGRpcmVjdG9yeS4gIFRvIGRvIHRoaXMsIHlvdSBjYW4gdXNlIEdOVSBgbWFrZScuICBgY2QnIHRvIHRoZQorZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRoZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIHRvIGdvIGFuZCBydW4KK3RoZSBgY29uZmlndXJlJyBzY3JpcHQuICBgY29uZmlndXJlJyBhdXRvbWF0aWNhbGx5IGNoZWNrcyBmb3IgdGhlCitzb3VyY2UgY29kZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgYGNvbmZpZ3VyZScgaXMgaW4gYW5kIGluIGAuLicuCisKKyAgIFdpdGggYSBub24tR05VIGBtYWtlJywgaXQgaXMgc2FmZXIgdG8gY29tcGlsZSB0aGUgcGFja2FnZSBmb3Igb25lCithcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGluIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RvcnkuICBBZnRlciB5b3UgaGF2ZQoraW5zdGFsbGVkIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlLCB1c2UgYG1ha2UgZGlzdGNsZWFuJyBiZWZvcmUKK3JlY29uZmlndXJpbmcgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlLgorCitJbnN0YWxsYXRpb24gTmFtZXMKKz09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0LCBgbWFrZSBpbnN0YWxsJyBpbnN0YWxscyB0aGUgcGFja2FnZSdzIGNvbW1hbmRzIHVuZGVyCitgL3Vzci9sb2NhbC9iaW4nLCBpbmNsdWRlIGZpbGVzIHVuZGVyIGAvdXNyL2xvY2FsL2luY2x1ZGUnLCBldGMuICBZb3UKK2NhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nCitgY29uZmlndXJlJyB0aGUgb3B0aW9uIGAtLXByZWZpeD1QUkVGSVgnLgorCisgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKK3Bhc3MgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QUkVGSVgnIHRvIGBjb25maWd1cmUnLCB0aGUgcGFja2FnZSB1c2VzCitQUkVGSVggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgorRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgorCisgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCitvcHRpb25zIGxpa2UgYC0tYmluZGlyPURJUicgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCitraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKK3lvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uCisKKyAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAord2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKK29wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQorCitTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KK2Bjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQoraXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKK2BSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKK3BhY2thZ2UgcmVjb2duaXplcy4KKworICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5CitmaW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCit5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCitgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2Fubm90IGZpZ3VyZSBvdXQgYXV0b21hdGljYWxseSwKK2J1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgbWFjaGluZSB0aGUgcGFja2FnZSB3aWxsIHJ1biBvbi4KK1VzdWFsbHksIGFzc3VtaW5nIHRoZSBwYWNrYWdlIGlzIGJ1aWx0IHRvIGJlIHJ1biBvbiB0aGUgX3NhbWVfCithcmNoaXRlY3R1cmVzLCBgY29uZmlndXJlJyBjYW4gZmlndXJlIHRoYXQgb3V0LCBidXQgaWYgaXQgcHJpbnRzIGEKK21lc3NhZ2Ugc2F5aW5nIGl0IGNhbm5vdCBndWVzcyB0aGUgbWFjaGluZSB0eXBlLCBnaXZlIGl0IHRoZQorYC0tYnVpbGQ9VFlQRScgb3B0aW9uLiAgVFlQRSBjYW4gZWl0aGVyIGJlIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHN5c3RlbQordHlwZSwgc3VjaCBhcyBgc3VuNCcsIG9yIGEgY2Fub25pY2FsIG5hbWUgd2hpY2ggaGFzIHRoZSBmb3JtOgorCisgICAgIENQVS1DT01QQU5ZLVNZU1RFTQorCit3aGVyZSBTWVNURU0gY2FuIGhhdmUgb25lIG9mIHRoZXNlIGZvcm1zOgorCisgICAgIE9TIEtFUk5FTC1PUworCisgICBTZWUgdGhlIGZpbGUgYGNvbmZpZy5zdWInIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGVhY2ggZmllbGQuICBJZgorYGNvbmZpZy5zdWInIGlzbid0IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSwgdGhlbiB0aGlzIHBhY2thZ2UgZG9lc24ndAorbmVlZCB0byBrbm93IHRoZSBtYWNoaW5lIHR5cGUuCisKKyAgIElmIHlvdSBhcmUgX2J1aWxkaW5nXyBjb21waWxlciB0b29scyBmb3IgY3Jvc3MtY29tcGlsaW5nLCB5b3Ugc2hvdWxkCit1c2UgdGhlIG9wdGlvbiBgLS10YXJnZXQ9VFlQRScgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHN5c3RlbSB0aGV5IHdpbGwKK3Byb2R1Y2UgY29kZSBmb3IuCisKKyAgIElmIHlvdSB3YW50IHRvIF91c2VfIGEgY3Jvc3MgY29tcGlsZXIsIHRoYXQgZ2VuZXJhdGVzIGNvZGUgZm9yIGEKK3BsYXRmb3JtIGRpZmZlcmVudCBmcm9tIHRoZSBidWlsZCBwbGF0Zm9ybSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZQorImhvc3QiIHBsYXRmb3JtIChpLmUuLCB0aGF0IG9uIHdoaWNoIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbXMgd2lsbAorZXZlbnR1YWxseSBiZSBydW4pIHdpdGggYC0taG9zdD1UWVBFJy4KKworU2hhcmluZyBEZWZhdWx0cworPT09PT09PT09PT09PT09PQorCitJZiB5b3Ugd2FudCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBjb25maWd1cmUnIHNjcmlwdHMgdG8gc2hhcmUsIHlvdQorY2FuIGNyZWF0ZSBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbGxlZCBgY29uZmlnLnNpdGUnIHRoYXQgZ2l2ZXMgZGVmYXVsdAordmFsdWVzIGZvciB2YXJpYWJsZXMgbGlrZSBgQ0MnLCBgY2FjaGVfZmlsZScsIGFuZCBgcHJlZml4Jy4KK2Bjb25maWd1cmUnIGxvb2tzIGZvciBgUFJFRklYL3NoYXJlL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMsIHRoZW4KK2BQUkVGSVgvZXRjL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMuICBPciwgeW91IGNhbiBzZXQgdGhlCitgQ09ORklHX1NJVEUnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2l0ZSBzY3JpcHQuCitBIHdhcm5pbmc6IG5vdCBhbGwgYGNvbmZpZ3VyZScgc2NyaXB0cyBsb29rIGZvciBhIHNpdGUgc2NyaXB0LgorCitEZWZpbmluZyBWYXJpYWJsZXMKKz09PT09PT09PT09PT09PT09PQorCitWYXJpYWJsZXMgbm90IGRlZmluZWQgaW4gYSBzaXRlIHNoZWxsIHNjcmlwdCBjYW4gYmUgc2V0IGluIHRoZQorZW52aXJvbm1lbnQgcGFzc2VkIHRvIGBjb25maWd1cmUnLiAgSG93ZXZlciwgc29tZSBwYWNrYWdlcyBtYXkgcnVuCitjb25maWd1cmUgYWdhaW4gZHVyaW5nIHRoZSBidWlsZCwgYW5kIHRoZSBjdXN0b21pemVkIHZhbHVlcyBvZiB0aGVzZQordmFyaWFibGVzIG1heSBiZSBsb3N0LiAgSW4gb3JkZXIgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB5b3Ugc2hvdWxkIHNldAordGhlbSBpbiB0aGUgYGNvbmZpZ3VyZScgY29tbWFuZCBsaW5lLCB1c2luZyBgVkFSPXZhbHVlJy4gIEZvciBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPS91c3IvbG9jYWwyL2Jpbi9nY2MKKworY2F1c2VzIHRoZSBzcGVjaWZpZWQgYGdjYycgdG8gYmUgdXNlZCBhcyB0aGUgQyBjb21waWxlciAodW5sZXNzIGl0IGlzCitvdmVycmlkZGVuIGluIHRoZSBzaXRlIHNoZWxsIHNjcmlwdCkuCisKK1VuZm9ydHVuYXRlbHksIHRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHdvcmsgZm9yIGBDT05GSUdfU0hFTEwnIGR1ZSB0bworYW4gQXV0b2NvbmYgYnVnLiAgVW50aWwgdGhlIGJ1ZyBpcyBmaXhlZCB5b3UgY2FuIHVzZSB0aGlzIHdvcmthcm91bmQ6CisKKyAgICAgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCAvYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAorCitgY29uZmlndXJlJyBJbnZvY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CisKK2Bjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0IG9wZXJhdGVzLgorCitgLS1oZWxwJworYC1oJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gYGNvbmZpZ3VyZScsIGFuZCBleGl0LgorCitgLS12ZXJzaW9uJworYC1WJworICAgICBQcmludCB0aGUgdmVyc2lvbiBvZiBBdXRvY29uZiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBgY29uZmlndXJlJworICAgICBzY3JpcHQsIGFuZCBleGl0LgorCitgLS1jYWNoZS1maWxlPUZJTEUnCisgICAgIEVuYWJsZSB0aGUgY2FjaGU6IHVzZSBhbmQgc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdHMgaW4gRklMRSwKKyAgICAgdHJhZGl0aW9uYWxseSBgY29uZmlnLmNhY2hlJy4gIEZJTEUgZGVmYXVsdHMgdG8gYC9kZXYvbnVsbCcgdG8KKyAgICAgZGlzYWJsZSBjYWNoaW5nLgorCitgLS1jb25maWctY2FjaGUnCitgLUMnCisgICAgIEFsaWFzIGZvciBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScuCisKK2AtLXF1aWV0JworYC0tc2lsZW50JworYC1xJworICAgICBEbyBub3QgcHJpbnQgbWVzc2FnZXMgc2F5aW5nIHdoaWNoIGNoZWNrcyBhcmUgYmVpbmcgbWFkZS4gIFRvCisgICAgIHN1cHByZXNzIGFsbCBub3JtYWwgb3V0cHV0LCByZWRpcmVjdCBpdCB0byBgL2Rldi9udWxsJyAoYW55IGVycm9yCisgICAgIG1lc3NhZ2VzIHdpbGwgc3RpbGwgYmUgc2hvd24pLgorCitgLS1zcmNkaXI9RElSJworICAgICBMb29rIGZvciB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGluIGRpcmVjdG9yeSBESVIuICBVc3VhbGx5CisgICAgIGBjb25maWd1cmUnIGNhbiBkZXRlcm1pbmUgdGhhdCBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4KKworYGNvbmZpZ3VyZScgYWxzbyBhY2NlcHRzIHNvbWUgb3RoZXIsIG5vdCB3aWRlbHkgdXNlZnVsLCBvcHRpb25zLiAgUnVuCitgY29uZmlndXJlIC0taGVscCcgZm9yIG1vcmUgZGV0YWlscy4KKwpkaWZmIC0tZ2l0IGEvTElDRU5TRVMgYi9MSUNFTlNFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk0Y2ZkCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5TRVMKQEAgLTAsMCArMSwxMzQgQEAKK0FkZGl0aW9uYWwgbGljZW5zZSBub3RpY2VzIGZvciBMaWJnY3J5cHQuICAgICAgICAgICAgICAgICAgICAtKi0gb3JnIC0qLQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvcHlpbmcgcGVybWlzc2lvbiBub3RpY2VzIGZvciB2YXJpb3VzIGZpbGVzIGluCit0aGUgTGliZ2NyeXB0IGRpc3RyaWJ1dGlvbiB3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKworVGhlc2Ugbm90aWNlcyBhbGwgcmVxdWlyZSB0aGF0IGEgY29weSBvZiB0aGUgbm90aWNlIGJlIGluY2x1ZGVkCitpbiB0aGUgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gYW5kIGJlIGRpc3RyaWJ1dGVkIHdpdGggYmluYXJ5CitkaXN0cmlidXRpb25zIG9mIHRoZSBjb2RlLCBzbyBiZSBzdXJlIHRvIGluY2x1ZGUgdGhpcyBmaWxlIGFsb25nCit3aXRoIGFueSBiaW5hcnkgZGlzdHJpYnV0aW9ucyBkZXJpdmVkIGZyb20gdGhlIEdOVSBDIExpYnJhcnkuCisKKyogQlNEXzNDbGF1c2UKKworICBGb3IgZmlsZXM6CisgIC0gY2lwaGVyL3NoYTI1Ni1zc3NlMy1hbWQ2NC5TCisgIC0gY2lwaGVyL3NoYTUxMi1hdngtYW1kNjQuUworICAtIGNpcGhlci9zaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LlMKKyAgLSBjaXBoZXIvc2hhNTEyLXNzc2UzLWFtZDY0LlMKKworIytiZWdpbl9xdW90ZQorICBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisKKyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICBtZXQ6CisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KKworICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiAiQVMgSVMiIEFORCBBTlkKKyAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIENPUlBPUkFUSU9OIE9SCisgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMrZW5kX3F1b3RlCisKKyogU2ltcGxlIHBlcm1pc3NpdmUgbGljZW5zZXMKKworICBGb3IgZmlsZXM6CisgIC0gY2lwaGVyL2NyYy5jCisKKyMrYmVnaW5fcXVvdGUKKyAgQ29weXJpZ2h0IChjKSAxOTk2IEwuIFBldGVyIERldXRzY2gKKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGRvY3VtZW50IGZvcgorICBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBjaGFyZ2UsIGluY2x1ZGluZyB0cmFuc2xhdGlvbnMgaW50bworICBvdGhlciBsYW5ndWFnZXMgYW5kIGluY29ycG9yYXRpb24gaW50byBjb21waWxhdGlvbnMsIHByb3ZpZGVkCisgIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQsIGFuZAorICB0aGF0IGFueSBzdWJzdGFudGl2ZSBjaGFuZ2VzIG9yIGRlbGV0aW9ucyBmcm9tIHRoZSBvcmlnaW5hbCBhcmUKKyAgY2xlYXJseSBtYXJrZWQuCisjK2VuZF9xdW90ZQorCisqIElFVEYgcGVybWlzc2l2ZSBsaWNlbnNlcworCisgIEZvciBmaWxlczoKKyAgLSBjaXBoZXIvY3JjLmMKKworIytiZWdpbl9xdW90ZQorICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgxOTk4KS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgVGhpcyBkb2N1bWVudCBhbmQgdHJhbnNsYXRpb25zIG9mIGl0IG1heSBiZSBjb3BpZWQgYW5kIGZ1cm5pc2hlZAorICB0byBvdGhlcnMsIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgY29tbWVudCBvbiBvciBvdGhlcndpc2UKKyAgZXhwbGFpbiBpdCBvciBhc3Npc3QgaW4gaXRzIGltcGxlbWVudGF0aW9uIG1heSBiZSBwcmVwYXJlZCwKKyAgY29waWVkLCBwdWJsaXNoZWQgYW5kIGRpc3RyaWJ1dGVkLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aXRob3V0CisgIHJlc3RyaWN0aW9uIG9mIGFueSBraW5kLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlCisgIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUgaW5jbHVkZWQgb24gYWxsIHN1Y2ggY29waWVzIGFuZCBkZXJpdmF0aXZlCisgIHdvcmtzLiAgSG93ZXZlciwgdGhpcyBkb2N1bWVudCBpdHNlbGYgbWF5IG5vdCBiZSBtb2RpZmllZCBpbiBhbnkKKyAgd2F5LCBzdWNoIGFzIGJ5IHJlbW92aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIHJlZmVyZW5jZXMgdG8KKyAgdGhlIEludGVybmV0IFNvY2lldHkgb3Igb3RoZXIgSW50ZXJuZXQgb3JnYW5pemF0aW9ucywgZXhjZXB0IGFzCisgIG5lZWRlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZyBJbnRlcm5ldCBzdGFuZGFyZHMgaW4gd2hpY2gKKyAgY2FzZSB0aGUgcHJvY2VkdXJlcyBmb3IgY29weXJpZ2h0cyBkZWZpbmVkIGluIHRoZSBJbnRlcm5ldAorICBTdGFuZGFyZHMgcHJvY2VzcyBtdXN0IGJlIGZvbGxvd2VkLCBvciBhcyByZXF1aXJlZCB0byB0cmFuc2xhdGUKKyAgaXQgaW50byBsYW5ndWFnZXMgb3RoZXIgdGhhbiBFbmdsaXNoLgorCisgIFRoZSBsaW1pdGVkIHBlcm1pc3Npb25zIGdyYW50ZWQgYWJvdmUgYXJlIHBlcnBldHVhbCBhbmQgd2lsbCBub3QgYmUKKyAgcmV2b2tlZCBieSB0aGUgSW50ZXJuZXQgU29jaWV0eSBvciBpdHMgc3VjY2Vzc29ycyBvciBhc3NpZ25zLgorCisgIFRoaXMgZG9jdW1lbnQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHByb3ZpZGVkIG9uCisgIGFuICJBUyBJUyIgYmFzaXMgYW5kIFRIRSBJTlRFUk5FVCBTT0NJRVRZIEFORCBUSEUgSU5URVJORVQKKyAgRU5HSU5FRVJJTkcgVEFTSyBGT1JDRSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKKyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFCisgIE9GIFRIRSBJTkZPUk1BVElPTiBIRVJFSU4gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFJJR0hUUyBPUiBBTlkKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRS4KKyMrZW5kX3F1b3RlCisKKyogWCBMaWNlbnNlCisKKyAgRm9yIGZpbGVzOgorICAtIGluc3RhbGwuc2gKKworIytiZWdpbl9xdW90ZQorICBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisgIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyAgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyAgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisgIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyAgdGl1bS4KKyMrZW5kX3F1b3RlCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzN2JkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDczIEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPSAtLWRpc2FibGUtcmFuZG9tLWRhZW1vbiBcCisgIC0tZW5hYmxlLWNpcGhlcnM9YXJjZm91cjpibG93ZmlzaDpjYXN0NTpkZXM6YWVzOnR3b2Zpc2g6c2VycGVudDpyZmMyMjY4OnNlZWQ6Y2FtZWxsaWEKKworIyAoQSBzdWl0YWJsZSBnaXRsb2ctdG8tY2hhbmdlbG9nIHNjcmlwdCBjYW4gYmUgZm91bmQgaW4gR251UEcgbWFzdGVyLikKK0dJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworCitESVNUX1NVQkRJUlMgPSBtNCBjb21wYXQgbXBpIGNpcGhlciByYW5kb20gc3JjIGRvYyB0ZXN0cworU1VCRElSUyA9ICAgICAgICAgY29tcGF0IG1waSBjaXBoZXIgcmFuZG9tIHNyYyBkb2MgdGVzdHMKKworRVhUUkFfRElTVCA9IGF1dG9nZW4uc2ggYXV0b2dlbi5yYyBSRUFETUUuR0lUIExJQ0VOU0VTICAgICAgCSAgICAgICAgICAgXAorICAgICAgICAgICAgIENoYW5nZUxvZy0yMDExIGJ1aWxkLWF1eC9DaGFuZ2VMb2ctMjAxMSBkb2MvQ2hhbmdlTG9nLTIwMTEgICAgXAorICAgICAgICAgICAgIG00L0NoYW5nZUxvZy0yMDExIGNpcGhlci9DaGFuZ2VMb2ctMjAxMSBzcmMvQ2hhbmdlTG9nLTIwMTEgICAgXAorICAgICAgICAgICAgIHJhbmRvbS9DaGFuZ2VMb2ctMjAxMSB0ZXN0cy9DaGFuZ2VMb2ctMjAxMSBtcGkvQ2hhbmdlTG9nLTIwMTEgXAorICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXgKKworRElTVENMRUFORklMRVMgPQorCisKKyMgQWRkIGFsbCB0aGUgZmlsZXMgbGlzdGVkIGluICJkaXN0ZmlsZXMiIGZpbGVzIHRvIHRoZSBkaXN0cmlidXRpb24sCisjIGFwcGx5IHZlcnNpb24gbnVtYmVyIHMgdG8gc29tZSBmaWxlcyBhbmQgY3JlYXRlIGEgVkVSU0lPTiBmaWxlIHdoaWNoCisjIHdlIG5lZWQgZm9yIHRoZSBQcmVyZXE6IHBhdGNoIGZpbGUgdHJpY2suCitkaXN0LWhvb2s6IGdlbi1DaGFuZ2VMb2cKKwlAc2V0IC1lOyBcCisJIGZvciBmaWxlIGluIGBjZCAkKHRvcF9zcmNkaXIpOyBcCisJICAgICAgZmluZCBtcGkgLXR5cGUgZiAtbmFtZSBkaXN0ZmlsZXNgOyBkbyBcCisJICAgIGRpcj1gZGlybmFtZSAkJGZpbGVgIDsgJChta2luc3RhbGxkaXJzKSAkKGRpc3RkaXIpLyQkZGlyIDsgXAorCSAgICBmb3IgaSBpbiBkaXN0ZmlsZXMgYGNhdCAkKHRvcF9zcmNkaXIpLyQkZmlsZWAgOyBkbyBcCisJCWxuICQodG9wX3NyY2RpcikvJCRkaXIvJCRpICQoZGlzdGRpcikvJCRkaXIvJCRpIDI+IC9kZXYvbnVsbCBcCisJCXx8IGNwIC1wICQodG9wX3NyY2RpcikvJCRkaXIvJCRpICQoZGlzdGRpcikvJCRkaXIvJCRpOyBcCisJICAgIGRvbmUgOyBcCisJZG9uZQorCUBzZXQgLWU7IFwKKwllY2hvICIkKFZFUlNJT04pIiA+ICQoZGlzdGRpcikvVkVSU0lPTgorCisKK2dlbl9zdGFydF9kYXRlID0gMjAxMS0xMi0wMVQxNDowMDowMAorLlBIT05ZOiBnZW4tQ2hhbmdlTG9nCitnZW4tQ2hhbmdlTG9nOgorCWlmIHRlc3QgLWQgJCh0b3Bfc3JjZGlyKS8uZ2l0OyB0aGVuCQkJCVwKKwkgIChjZCAkKHRvcF9zcmNkaXIpICYmICAgICAgICAgICAgICAgICAgICAgIAkJCVwKKwkgICAgJChHSVRMT0dfVE9fQ0hBTkdFTE9HKSAtLWFwcGVuZC1kb3QgLS10ZWFyLW9mZgkJXAorCSAgICAtLWFtZW5kPWJ1aWxkLWF1eC9naXQtbG9nLWZpeAkgCQkJXAorCSAgICAtLXNpbmNlPSQoZ2VuX3N0YXJ0X2RhdGUpICkgPiAkKGRpc3RkaXIpL2NsLXQ7CQlcCisgICAgICAgICAgY2F0ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyID4+ICQoZGlzdGRpcikvY2wtdDtcCisJICBybSAtZiAkKGRpc3RkaXIpL0NoYW5nZUxvZzsJCQkJCVwKKwkgIG12ICQoZGlzdGRpcikvY2wtdCAkKGRpc3RkaXIpL0NoYW5nZUxvZzsJCQlcCisJZmkKKworCisKK3N0b3dpbnN0YWxsOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgcHJlZml4PS91c3IvbG9jYWwvc3Rvdy9saWJnY3J5cHQKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YmY1YgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODkxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorVlBBVEggPSBAc3JjZGlyQAorYW1fX21ha2VfZHJ5cnVuID0gXAorICB7IFwKKyAgICBhbV9fZHJ5PW5vOyBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKKyAgICAgICopIFwKKyAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKKyAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCisgICAgICAgICAgICAqPSp8LS0qKSA7OyBcCisgICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKKyAgICAgICAgICBlc2FjOyBcCisgICAgICAgIGRvbmU7OyBcCisgICAgZXNhYzsgXAorICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCisgIH0KK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IC4KK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLmguaW4gXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlIEFVVEhPUlMgQ09QWUlORyBDT1BZSU5HLkxJQiBDaGFuZ2VMb2cgXAorCUlOU1RBTEwgTkVXUyBUSEFOS1MgVE9ETyBidWlsZC1hdXgvY29tcGlsZSBcCisJYnVpbGQtYXV4L2NvbmZpZy5ndWVzcyBidWlsZC1hdXgvY29uZmlnLnJwYXRoIFwKKwlidWlsZC1hdXgvY29uZmlnLnN1YiBidWlsZC1hdXgvZGVwY29tcCBidWlsZC1hdXgvaW5zdGFsbC1zaCBcCisJYnVpbGQtYXV4L2x0bWFpbi5zaCBidWlsZC1hdXgvbWRhdGUtc2ggYnVpbGQtYXV4L21pc3NpbmcgXAorCWJ1aWxkLWF1eC90ZXhpbmZvLnRleCBta2luc3RhbGxkaXJzCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9ncGctZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ub2V4ZWNzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NvY2tsZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjaworRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK3RvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQorYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpIjsgdGhlbiBcCisgICAgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCisgICAgICAmJiBybSAtcmYgIiQoZGlzdGRpcikiIFwKKyAgICAgIHx8IHsgc2xlZXAgNSAmJiBybSAtcmYgIiQoZGlzdGRpcikiOyB9OyBcCisgIGVsc2UgOjsgZmkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikudGFyLmJ6MgorR1pJUF9FTlYgPSAtLWJlc3QKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2FtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCisgIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0ZJTEVWRVJTSU9OID0gQEJVSUxEX0ZJTEVWRVJTSU9OQAorQlVJTERfUkVWSVNJT04gPSBAQlVJTERfUkVWSVNJT05ACitCVUlMRF9USU1FU1RBTVAgPSBAQlVJTERfVElNRVNUQU1QQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkFMTEJBQ0tfU09DS0xFTl9UID0gQEZBTExCQUNLX1NPQ0tMRU5fVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NSWVBUX0NJUEhFUlMgPSBAR0NSWVBUX0NJUEhFUlNACitHQ1JZUFRfRElHRVNUUyA9IEBHQ1JZUFRfRElHRVNUU0AKK0dDUllQVF9IV0ZfTU9EVUxFUyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACitHQ1JZUFRfS0RGUyA9IEBHQ1JZUFRfS0RGU0AKK0dDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitHQ1JZUFRfUkFORE9NID0gQEdDUllQVF9SQU5ET01ACitHUEdfRVJST1JfQ0ZMQUdTID0gQEdQR19FUlJPUl9DRkxBR1NACitHUEdfRVJST1JfQ09ORklHID0gQEdQR19FUlJPUl9DT05GSUdACitHUEdfRVJST1JfTElCUyA9IEBHUEdfRVJST1JfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0lOU0VSVF9TWVNfU0VMRUNUX0ggPSBASU5TRVJUX1NZU19TRUxFQ1RfSEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJHQ1JZUFRfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfQ0lQSEVSU0AKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04gPSBATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTID0gQExJQkdDUllQVF9DT05GSUdfQ0ZMQUdTQAorTElCR0NSWVBUX0NPTkZJR19IT1NUID0gQExJQkdDUllQVF9DT05GSUdfSE9TVEAKK0xJQkdDUllQVF9DT05GSUdfTElCUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0xJQlNACitMSUJHQ1JZUFRfRElHRVNUUyA9IEBMSUJHQ1JZUFRfRElHRVNUU0AKK0xJQkdDUllQVF9MVF9BR0UgPSBATElCR0NSWVBUX0xUX0FHRUAKK0xJQkdDUllQVF9MVF9DVVJSRU5UID0gQExJQkdDUllQVF9MVF9DVVJSRU5UQAorTElCR0NSWVBUX0xUX1JFVklTSU9OID0gQExJQkdDUllQVF9MVF9SRVZJU0lPTkAKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMgPSBATElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK01QSV9TRkxBR1MgPSBATVBJX1NGTEFHU0AKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PRVhFQ1NUQUNLX0ZMQUdTID0gQE5PRVhFQ1NUQUNLX0ZMQUdTQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQVEhfQ0ZMQUdTID0gQFBUSF9DRkxBR1NACitQVEhfQ09ORklHID0gQFBUSF9DT05GSUdACitQVEhfTElCUyA9IEBQVEhfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitSQyA9IEBSQ0AKK1JVTl9MQVJHRV9EQVRBX1RFU1RTID0gQFJVTl9MQVJHRV9EQVRBX1RFU1RTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1NZU19TT0NLRVRfSCA9IEBTWVNfU09DS0VUX0hACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OX05VTUJFUiA9IEBWRVJTSU9OX05VTUJFUkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW4gPSBAZW1hY3NfbG9jYWxfdmFyc19iZWdpbkAKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kID0gQGVtYWNzX2xvY2FsX3ZhcnNfZW5kQAorZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHkgPSBAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPSAtLWRpc2FibGUtcmFuZG9tLWRhZW1vbiBcCisgIC0tZW5hYmxlLWNpcGhlcnM9YXJjZm91cjpibG93ZmlzaDpjYXN0NTpkZXM6YWVzOnR3b2Zpc2g6c2VycGVudDpyZmMyMjY4OnNlZWQ6Y2FtZWxsaWEKKworCisjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorR0lUTE9HX1RPX0NIQU5HRUxPRyA9IGdpdGxvZy10by1jaGFuZ2Vsb2cKK0RJU1RfU1VCRElSUyA9IG00IGNvbXBhdCBtcGkgY2lwaGVyIHJhbmRvbSBzcmMgZG9jIHRlc3RzCitTVUJESVJTID0gY29tcGF0IG1waSBjaXBoZXIgcmFuZG9tIHNyYyBkb2MgdGVzdHMKK0VYVFJBX0RJU1QgPSBhdXRvZ2VuLnNoIGF1dG9nZW4ucmMgUkVBRE1FLkdJVCBMSUNFTlNFUyAgICAgIAkgICAgICAgICAgIFwKKyAgICAgICAgICAgICBDaGFuZ2VMb2ctMjAxMSBidWlsZC1hdXgvQ2hhbmdlTG9nLTIwMTEgZG9jL0NoYW5nZUxvZy0yMDExICAgIFwKKyAgICAgICAgICAgICBtNC9DaGFuZ2VMb2ctMjAxMSBjaXBoZXIvQ2hhbmdlTG9nLTIwMTEgc3JjL0NoYW5nZUxvZy0yMDExICAgIFwKKyAgICAgICAgICAgICByYW5kb20vQ2hhbmdlTG9nLTIwMTEgdGVzdHMvQ2hhbmdlTG9nLTIwMTEgbXBpL0NoYW5nZUxvZy0yMDExIFwKKyAgICAgICAgICAgICBidWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIgYnVpbGQtYXV4L2dpdC1sb2ctZml4CisKK0RJU1RDTEVBTkZJTEVTID0gCitnZW5fc3RhcnRfZGF0ZSA9IDIwMTEtMTItMDFUMTQ6MDA6MDAKK2FsbDogY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKK2FtLS1yZWZyZXNoOiBNYWtlZmlsZQorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251JzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IE1ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IE1ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgZWNobyAnICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyc7IFwKKwkgICAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY29uZmlnLmg6IHN0YW1wLWgxCisJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBybSAtZiBzdGFtcC1oMTsgZWxzZSA6OyBmaQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDE7IGVsc2UgOjsgZmkKKworc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKKyQoc3JjZGlyKS9jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICAkKGFtX19tYWtlX2RyeXJ1bikgXAorCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKKwkgIGRpc3QtaG9vaworCS10ZXN0IC1uICIkKGFtX19za2lwX21vZGVfZml4KSIgXAorCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKKwkJLWV4ZWMgY2htb2QgdStyd3gsZ28rcngge30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCisJfHwgY2htb2QgLVIgYStyICIkKGRpc3RkaXIpIgorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgQlpJUDI9JCR7QlpJUDItLTl9IGJ6aXAyIC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1semlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6aXAgLWMgJCR7TFpJUF9PUFQtLTl9ID4kKGRpc3RkaXIpLnRhci5segorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWx6bWE6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IFhaX09QVD0kJHtYWl9PUFQtLWV9IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1zaGFyOiBkaXN0ZGlyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC16aXA6IGRpc3RkaXIKKwktcm0gLWYgJChkaXN0ZGlyKS56aXAKKwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEJaSVAyPSQke0JaSVAyLS05fSBiemlwMiAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKyMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKyMgdGFyZmlsZS4KK2Rpc3RjaGVjazogZGlzdAorCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKKwkqLnRhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnppcDIgLWRjICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5sem1hKikgXAorCSAgbHptYSAtZGMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5seiopIFwKKwkgIGx6aXAgLWRjICQoZGlzdGRpcikudGFyLmx6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLnh6KikgXAorCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLloqKSBcCisJICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCisJKi5zaGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIHUrdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgYS13ICQoZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAorCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAorCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sgXAorCSAgJiYgY2QgIiQkYW1fX2N3ZCIgXAorCSAgfHwgZXhpdCAxCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKKwkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlIGNvbmZpZy5oCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgYWxsIFwKKwljdGFncy1yZWN1cnNpdmUgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBkaXN0LWFsbCBkaXN0LWJ6aXAyIFwKKwlkaXN0LWd6aXAgZGlzdC1ob29rIGRpc3QtbHppcCBkaXN0LWx6bWEgZGlzdC1zaGFyIGRpc3QtdGFyWiBcCisJZGlzdC14eiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIFwKKwlkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIFwKKwlpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKKwlpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIEFkZCBhbGwgdGhlIGZpbGVzIGxpc3RlZCBpbiAiZGlzdGZpbGVzIiBmaWxlcyB0byB0aGUgZGlzdHJpYnV0aW9uLAorIyBhcHBseSB2ZXJzaW9uIG51bWJlciBzIHRvIHNvbWUgZmlsZXMgYW5kIGNyZWF0ZSBhIFZFUlNJT04gZmlsZSB3aGljaAorIyB3ZSBuZWVkIGZvciB0aGUgUHJlcmVxOiBwYXRjaCBmaWxlIHRyaWNrLgorZGlzdC1ob29rOiBnZW4tQ2hhbmdlTG9nCisJQHNldCAtZTsgXAorCSBmb3IgZmlsZSBpbiBgY2QgJCh0b3Bfc3JjZGlyKTsgXAorCSAgICAgIGZpbmQgbXBpIC10eXBlIGYgLW5hbWUgZGlzdGZpbGVzYDsgZG8gXAorCSAgICBkaXI9YGRpcm5hbWUgJCRmaWxlYCA7ICQobWtpbnN0YWxsZGlycykgJChkaXN0ZGlyKS8kJGRpciA7IFwKKwkgICAgZm9yIGkgaW4gZGlzdGZpbGVzIGBjYXQgJCh0b3Bfc3JjZGlyKS8kJGZpbGVgIDsgZG8gXAorCQlsbiAkKHRvcF9zcmNkaXIpLyQkZGlyLyQkaSAkKGRpc3RkaXIpLyQkZGlyLyQkaSAyPiAvZGV2L251bGwgXAorCQl8fCBjcCAtcCAkKHRvcF9zcmNkaXIpLyQkZGlyLyQkaSAkKGRpc3RkaXIpLyQkZGlyLyQkaTsgXAorCSAgICBkb25lIDsgXAorCWRvbmUKKwlAc2V0IC1lOyBcCisJZWNobyAiJChWRVJTSU9OKSIgPiAkKGRpc3RkaXIpL1ZFUlNJT04KKy5QSE9OWTogZ2VuLUNoYW5nZUxvZworZ2VuLUNoYW5nZUxvZzoKKwlpZiB0ZXN0IC1kICQodG9wX3NyY2RpcikvLmdpdDsgdGhlbgkJCQlcCisJICAoY2QgJCh0b3Bfc3JjZGlyKSAmJiAgICAgICAgICAgICAgICAgICAgICAJCQlcCisJICAgICQoR0lUTE9HX1RPX0NIQU5HRUxPRykgLS1hcHBlbmQtZG90IC0tdGVhci1vZmYJCVwKKwkgICAgLS1hbWVuZD1idWlsZC1hdXgvZ2l0LWxvZy1maXgJIAkJCVwKKwkgICAgLS1zaW5jZT0kKGdlbl9zdGFydF9kYXRlKSApID4gJChkaXN0ZGlyKS9jbC10OwkJXAorICAgICAgICAgIGNhdCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9naXQtbG9nLWZvb3RlciA+PiAkKGRpc3RkaXIpL2NsLXQ7XAorCSAgcm0gLWYgJChkaXN0ZGlyKS9DaGFuZ2VMb2c7CQkJCQlcCisJICBtdiAkKGRpc3RkaXIpL2NsLXQgJChkaXN0ZGlyKS9DaGFuZ2VMb2c7CQkJXAorCWZpCisKK3N0b3dpbnN0YWxsOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgcHJlZml4PS91c3IvbG9jYWwvc3Rvdy9saWJnY3J5cHQKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0ZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL05FV1MKQEAgLTAsMCArMSw4NDIgQEAKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuNi4xICgyMDE0LTAxLTI5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFkZGVkIGVtdWxhdGlvbiBmb3IgYnJva2VuIFdoaXJscG9vbCBjb2RlIHByaW9yIHRvIDEuNi4wLgorCisgKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBLREYgZnVuY3Rpb25zLgorCisgKiBJbXByb3ZlZCBFQ0RTQSBjb21wbGlhbmNlLgorCisgKiBGaXhlZCBsb2NraW5nIGZvciBXaW5kb3dzIGFuZCBub24tRUxGIFB0aHJlYWQgc3lzdGVtcyAocmVncmVzc2lvbgorICAgaW4gMS42LjApCisKKyAqIEZpeGVkIG1lc3NhZ2UgZGlnZXN0IGxvb2t1cCBieSBPSUQgKHJlZ3Jlc3Npb24gaW4gMS42LjApLgorCisgKiBGaXhlZCBhIGJ1aWxkIHByb2JsZW0gb24gTmV0QlNELgorCisgKiBGaXhlZCBtZW1vcnkgbGVha3MgaW4gRUNDIGNvZGUuCisKKyAqIEZpeGVkIHNvbWUgYXNtIGJ1aWxkIHByb2JsZW1zIGFuZCBmZWF0dXJlIGRldGVjdGlvbiBidWdzLgorCisgKiBJbnRlcmZhY2UgY2hhbmdlcyByZWxhdGl2ZSB0byB0aGUgMS42LjAgcmVsZWFzZToKKyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgR0NSWV9NRF9GTEFHX0JVR0VNVTEgICAgICAgICAgICBORVcgKG1pbm9yIEFQSSBjaGFuZ2UpLgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuNi4wICgyMDEzLTEyLTE2KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlbW92ZWQgdGhlIGxvbmcgZGVwcmVjYXRlZCBnY3J5X2FjIGludGVyZmFjZS4gIFRodXMgTGliZ2NyeXB0IGlzCisgICBub3QgYW55bW9yZSBBQkkgY29tcGF0aWJsZSB0byBwcmV2aW91cyB2ZXJzaW9ucyBpZiB0aGV5IHVzZWQgdGhlIGFjCisgICBpbnRlcmZhY2UuCisKKyAqIFJlbW92ZWQgdGhlIG1vZHVsZSByZWdpc3RlciBzdWJzeXN0ZW0uCisKKyAqIFRoZSBkZXByZWNhdGVkIG1lc3NhZ2UgZGlnZXN0IGRlYnVnIG1hY3JvcyBoYXZlIGJlZW4gcmVtb3ZlZC4gIFVzZQorICAgZ2NyeV9tZF9kZWJ1ZyBpbnN0ZWFkLgorCisgKiBSZW1vdmVkIGRlcHJlY2F0ZWQgY29udHJvbCBjb2Rlcy4KKworICogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgbW9zdCBjaXBoZXIgYWxnb3JpdGhtcyBhcyB3ZWxsIGFzIGZvciB0aGUKKyAgIFNIQSBmYW1pbHkgb2YgaGFzaCBmdW5jdGlvbnMuCisKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBJREVBIGNpcGhlciBhbGdvcml0aG0uCisKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTYWxzYTIwIGFuZCByZWR1Y2VkIFNhbHNhMjAvMTIgc3RyZWFtIGNpcGhlcnMuCisKKyAqIEFkZGVkIGxpbWl0ZWQgc3VwcG9ydCBmb3IgdGhlIEdPU1QgMjgxNDctODkgY2lwaGVyIGFsZ29yaXRobS4KKworICogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEdPU1QgUiAzNC4xMS05NCBhbmQgUiAzNC4xMS0yMDEyIChTdHJpYm9nKQorICAgaGFzaCBhbGdvcml0aG1zLgorCisgKiBBZGRlZCBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRvIGRpcmVjdGx5IHVzZSB0aGUgc3lzdGVtJ3MgUk5HLgorICAgQWxzbyBhZGRlZCBhbiBpbnRlcmZhY2UgdG8gcHJlZmVyIHRoZSB1c2Ugb2YgYSBzcGVjaWZpZWQgUk5HLgorCisgKiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgU0NSWVBUIGFsZ29yaXRobS4KKworICogTWl0aWdhdGVkIHRoZSBZYXJvbS9GYWxrbmVyIGZsdXNoK3JlbG9hZCBzaWRlLWNoYW5uZWwgYXR0YWNrIG9uIFJTQQorICAgc2VjcmV0IGtleXMuICBTZWUgPGh0dHA6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMy80NDg+IFtDVkUtMjAxMy00MjQyXS4KKworICogQWRkZWQgc3VwcG9ydCBmb3IgRGV0ZXJtaW5pc3RpYyBEU0EgYXMgcGVyIFJGQy02OTY5LgorCisgKiBBZGRlZCBzdXBwb3J0IGZvciBjdXJ2ZSBFZDI1NTE5LgorCisgKiBBZGRlZCBhIHNjYXR0ZXIgZ2F0aGVyIGhhc2ggY29udmVuaWVuY2UgZnVuY3Rpb24uCisKKyAqIEFkZGVkIHNldmVyYWwgTVBJIGFtZCBTRVhQIGhlbHBlciBmdW5jdGlvbnMuCisKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIG51bWJlcnMgdG8gZ2NyeV9tcGlfcHJpbnQsCisgICBnY3J5X21waV9hcHJpbnQgYW5kIGdjcnlfbXBpX3NjYW4uCisKKyAqIFRoZSBhbGdvcml0aG0gaWRzIEdDUllfUEtfRUNEU0EgYW5kIEdDUllfUEtfRUNESCBhcmUgbm93CisgICBkZXByZWNhdGVkLiAgVXNlIEdDUllfUEtfRUNDIGlmIHlvdSBuZWVkIGFuIGFsZ29yaXRobSBpZC4KKworICogQ2hhbmdlZCBnY3J5X3BrX2dlbmtleSBmb3IgImVjYyIgdG8gb25seSBpbmNsdWRlIHRoZSBjdXJ2ZSBuYW1lIGFuZAorICAgbm90IHRoZSBwYXJhbWV0ZXJzLiAgVGhlIGZsYWcgInBhcmFtIiBtYXkgYmUgdXNlZCB0byByZXZlcnQgdGhpcy4KKworICogQWRkZWQgYSBmZWF0dXJlIHRvIGdsb2JhbGx5IGRpc2FibGUgc2VsZWN0ZWQgaGFyZHdhcmUgZmVhdHVyZXMuCisKKyAqIEFkZGVkIGRlYnVnIGhlbHBlciBmdW5jdGlvbnMuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjUuMCByZWxlYXNlOgorIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyBnY3J5X2FjXyogICAgICAgICAgICAgICAJIFJFTU9WRUQuCisgR0NSWV9BQ18qICAgICAgICAgICAgICAgCSBSRU1PVkVELgorIGdjcnlfbW9kdWxlX3QgICAgICAgICAgCSBSRU1PVkVELgorIGdjcnlfY2lwaGVyX3JlZ2lzdGVyICAgCSBSRU1PVkVELgorIGdjcnlfY2lwaGVyX3VucmVnaXN0ZXIgCSBSRU1PVkVELgorIGdjcnlfY2lwaGVyX2xpc3QgICAgICAgCSBSRU1PVkVELgorIGdjcnlfcGtfcmVnaXN0ZXIgICAgICAgCSBSRU1PVkVELgorIGdjcnlfcGtfdW5yZWdpc3RlciAgICAgCSBSRU1PVkVELgorIGdjcnlfcGtfbGlzdCAgICAgICAgICAgCSBSRU1PVkVELgorIGdjcnlfbWRfcmVnaXN0ZXIgICAgICAgCSBSRU1PVkVELgorIGdjcnlfbWRfdW5yZWdpc3RlciAgICAgCSBSRU1PVkVELgorIGdjcnlfbWRfbGlzdCAgICAgICAgICAgCSBSRU1PVkVELgorIGdjcnlfbWRfc3RhcnRfZGVidWcgICAgCSBSRU1PVkVEIChtYWNybykuCisgZ2NyeV9tZF9zdG9wX2RlYnVnICAgICAJIFJFTU9WRUQgKG1hY3JvKS4KKyBHQ1JZQ1RMX1NFVF9LRVkgICAgICAgICAgICAgICAgIFJFTU9WRUQuCisgR0NSWUNUTF9TRVRfSVYgICAgICAgICAgICAgICAgICBSRU1PVkVELgorIEdDUllDVExfU0VUX0NUUiAgICAgICAgICAgICAgICAgUkVNT1ZFRC4KKyBHQ1JZQ1RMX0RJU0FCTEVfQUxHTyAgICAgICAgICAgIENIQU5HRUQ6IE5vdCBhbnltb3JlIHRocmVhZC1zYWZlLgorIGdjcnlfcGtfZ2Vua2V5ICAgICAgICAgICAgICAgICAgQ0hBTkdFRDogRUNDIGN1cnZlIHBhcmFtcyBub3QgcmV0dXJuZWQuCisgZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgICAgICAgICAgICBORVcuCisgZ2NyeV9idWZmZXJfdCAgICAgICAgICAgICAgICAgICBORVcuCisgR0NSWUNUTF9TRVRfRU5GT1JDRURfRklQU19GTEFHICBORVcuCisgR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFICBORVcuCisgR0NSWUNUTF9HRVRfQ1VSUkVOVF9STkdfVFlQRSAgICBORVcuCisgR0NSWUNUTF9DTE9TRV9SQU5ET01fREVWSUNFICAgICBORVcuCisgR0NSWV9STkdfVFlQRV9TVEFOREFSRCAgICAgICAgICBORVcuCisgR0NSWV9STkdfVFlQRV9GSVBTICAgICAgICAgICAgICBORVcuCisgR0NSWV9STkdfVFlQRV9TWVNURU0gICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfaXNfbmVnICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfbmVnICAgICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfYWJzICAgICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfc25hdGNoICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfc2V0X29wYXF1ZV9jb3B5ICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfdCAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfbmV3ICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfZ2V0ICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfc2V0ICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAgICAgICBORVcuCisgZ2NyeV9jdHhfdCAgICAgICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9jdHhfcmVsZWFzZSAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfbmV3ICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfZ2V0X21waSAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfZ2V0X3BvaW50ICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfc2V0X21waSAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfc2V0X3BvaW50ICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfZHVwICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfYWRkICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfbXVsICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9tcGlfZWNfY3VydmVfcG9pbnQgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX0NPTlNUICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX1VTRVIxICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX1VTRVIyICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX1VTRVIzICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTEFHX1VTRVI0ICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9DT05TVF9PTkUgICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9DT05TVF9UV08gICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9DT05TVF9USFJFRSAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9DT05TVF9GT1VSICAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9DT05TVF9FSUdIVCAgICAgICAgICAgICBORVcuCisgR0NSWU1QSV9GTVRfT1BBUVVFICAgICAgICAgICAgICBORVcuCisgR0NSWVBUX1ZFUlNJT05fTlVNQkVSICAgICAgICAgICBORVcuCisgR0NSWV9LREZfU0NSWVBUICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgICAgICAgICAgICBORVcuCisgR0NSWUNUTF9ESVNBQkxFX0xPQ0tFRF9TRUNNRU0gICBORVcuCisgR0NSWUNUTF9ESVNBQkxFX1BSSVZfRFJPUCAgICAgICBORVcuCisgR0NSWV9DSVBIRVJfU0FMU0EyMCAgICAgICAgICAgICBORVcuCisgZ2NyeV9zZXhwX250aF9idWZmZXIgICAgICAgICAgICBORVcuCisgZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gICAgICAgICBORVcuCisgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiAgICAgICAgICBORVcuCisgR0NSWV9DSVBIRVJfR09TVDI4MTQ3ICAgICAgICAgICBORVcuCisgR0NSWV9NRF9HT1NUUjM0MTFfOTQgICAgICAgICAgICBORVcuCisgR0NSWV9NRF9TVFJJQk9HMjU2ICAgICAgICAgICAgICBORVcuCisgR0NSWV9NRF9TVFJJQk9HNTEyICAgICAgICAgICAgICBORVcuCisgR0NSWV9QS19FQ0MgICAgICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9sb2dfZGVidWcgICAgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9sb2dfZGVidWdoZXggICAgICAgICAgICAgICBORVcuCisgZ2NyeV9sb2dfZGVidWdtcGkgICAgICAgICAgICAgICBORVcuCisgZ2NyeV9sb2dfZGVidWdwbnQgICAgICAgICAgICAgICBORVcuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS41LjAgKDIwMTEtMDYtMjkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTmV3IGZ1bmN0aW9uIGdjcnlfa2RmX2Rlcml2ZSBpbXBsZW1lbnRpbmcgT3BlblBHUCBTMksgYWxnb3JpdGhtcworICAgYW5kIFBCS0RGMi4KKworICogU3VwcG9ydCBmb3IgV2luZG93c0NFLgorCisgKiBTdXBwb3J0IGZvciBFQ0RILgorCisgKiBTdXBwb3J0IGZvciBPQUVQIGFuZCBQU1MgbWV0aG9kcyBhcyBkZXNjcmliZWQgYnkgUkZDLTM0NDcuCisKKyAqIEZpeGVkIFBLQ1MgdjEuNSBjb2RlIHRvIGFsd2F5cyByZXR1cm4gdGhlIGxlYWRpbmcgemVyby4KKworICogTmV3IGZvcm1hdCBzcGVjaWZpZXJzICIlTSIgYW5kICIldSIgZm9yIGdjcnlfc2V4cF9idWlsZC4KKworICogU3VwcG9ydCBvcGFxdWUgTVBJcyB3aXRoICIlbSIgYW5kICIlTSIgaW4gZ2NyeV9zZXhwX2J1aWxkLgorCisgKiBOZXcgZnVuY3Rpb25zIGdjcnlfcGtfZ2V0X2N1cnZlIGFuZCBnY3J5X3BrX2dldF9wYXJhbSB0byBtYXAgRUNDCisgICBwYXJhbWV0ZXJzIHRvIGEgY3VydmUgbmFtZSBhbmQgdG8gcmV0cmlldmUgcGFyYW1ldGVyIHZhbHVlcy4KKworICogZ2NyeV9tcGlfY21wIGFwcGxpZWQgdG8gb3BhcXVlIHZhbHVlcyBoYXMgYSBkZWZpbmVkIHNlbWFudGljIG5vdy4KKworICogVXNlcyB0aGUgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBpZiBhdmFpbGFibGUuCisKKyAqIFRoZSB1c2Ugb2YgdGhlIGRlcHJlY2F0ZWQgQWx0ZXJuYXRpdmUgUHVibGljIEtleSBJbnRlcmZhY2UKKyAgIChnY3J5X2FjXyopIHdpbGwgbm93IHByaW50IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KKworICogVGhlIG1vZHVsZSByZWdpc3RlciBzdWJzeXN0ZW0gaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFRoaXMgc3Vic3lzdGVtCisgICBpcyBub3QgZmxleGlibGUgZW5vdWdoIGFuZCB3b3VsZCBhbHdheXMgcmVxdWlyZSBBQkkgY2hhbmdlcyB0bworICAgZXh0ZW5kIHRoZSBpbnRlcm5hbCBpbnRlcmZhY2VzLiAgSXQgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCisgICBQbGVhc2UgY29udGFjdCB1cyBvbiB0aGUgZ2NyeXB0LWRldmVsIG1haWxpbmcgbGlzdCB0byBkaXNjdXNzCisgICB3aGV0aGVyIHlvdSByZWFsbHkgbmVlZCB0aGlzIGZlYXR1cmUgb3IgaG93IGl0IGNhbiBiZSByZXBsYWNlZCBieQorICAgYW4gaW50ZXJuYWwgcGx1Z2luIG1lY2hhbmlzbS4KKworICogQ1RSIG1vZGUgbWF5IG5vdyBiZSB1c2VkIHdpdGggZGF0YSBjaHVua3Mgb2YgYXJiaXRyYXJ5IGxlbmd0aC4KKworICogQ2hhbmdlcyBhbHNvIGRvbmUgaW4gMS40LjYgKDIwMTAtMDctMTMpOgorIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICogTmV3IHZhcmlhbnRzIG9mIHRoZSBUSUdFUiBhbGdvcml0aG0uCisKKyAqIE5ldyBjaXBoZXIgYWxnb3JpdGhtIG1vZGUgZm9yIEFFUy1XUkFQLgorCisgKiBDaGFuZ2VzIGFsc28gZG9uZSBpbiAxLjQuNSAoMjAwOS0xMi0xMSk6Cisgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgKiBGaXhlZCBtaW5vciBtZW1vcnkgbGVhayBpbiBEU0Ega2V5IGdlbmVyYXRpb24uCisKKyAqIE5vIG1vcmUgc3dpdGNoaW5nIHRvIEZJUFMgbW9kZSBpZiAvcHJvYy92ZXJzaW9uIGlzIG5vdCByZWFkYWJsZS4KKworICogRml4ZWQgc2lnaWxsIGR1cmluZyBQYWRsb2NrIGRldGVjdGlvbiBvbiBvbGQgQ1BVcy4KKworICogRml4ZWQgYSBoYW5nIG9uIHNvbWUgVzIwMDAgbWFjaGluZXMuCisKKyAqIEJvb3N0ZWQgU0hBLTUxMiBwZXJmb3JtYW5jZSBieSAzMCUgb24gaWEzMiBib3hlcyBhbmQgZ2NjIDQuMzsKKyAgIFNIQS0yNTYgd2VudCB1cCBieSAyNSUuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjQuNiByZWxlYXNlOgorIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyBHQ1JZX1BLX0VDREggICAgICAgICAgICAgICBORVcuCisgZ2NyeV9wa19nZXRfY3VydmUgICAgICAgICAgTkVXLgorIGdjcnlfcGtfZ2V0X3BhcmFtICAgICAgICAgIE5FVy4KKyBHQ1JZQ1RMX0RJU0FCTEVfSFdGICAgICAgICBORVcuCisgZ2NyeV9rZGZfZGVyaXZlICAgICAgICAgICAgTkVXLgorIGdjcnlfcGtfZW5jcnlwdCAgICAgICAgICAgIEVYVEVOREVEOiBTdXBwb3J0IE9BRVAuCisgZ2NyeV9wa19kZWNyeXB0ICAgICAgICAgICAgRVhURU5ERUQ6IFN1cHBvcnQgT0FFUC4KKyBnY3J5X3BrX3NpZ24gICAgICAgICAgICAgICBFWFRFTkRFRDogU3VwcG9ydCBQU1MuCisgZ2NyeV9wa192ZXJpZnkgICAgICAgICAgICAgRVhURU5ERUQ6IFN1cHBvcnQgUFNTLgorIGdjcnlfc2V4cF9idWlsZCAgICAgICAgICAgIEVYVEVOREVEOiBBZGQgZm9ybWF0IHNwZWNpZmllcnMgTSBhbmQgdS4KKworICogSW50ZXJmYWNlIGNoYW5nZXMgcmVsYXRpdmUgdG8gdGhlIDEuNC4yIHJlbGVhc2U6Cisgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCAgIE5FVy4KKyBHQ1JZX01EX1RJR0VSMSAgICAgICAgICAgICBORVcuCisgR0NSWV9NRF9USUdFUjIgICAgICAgICAgICAgTkVXLgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuNC40ICgyMDA5LTAxLTIyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFB1Ymxpc2ggR0NSWV9NT0RVTEVfSURfVVNFUiBhbmQgR0NSWV9NT0RVTEVfSURfVVNFUl9MQVNUIGNvbnN0YW50cy4KKyAgIFRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBpbiBMaWJnY3J5cHQgc2luY2UgMS4zLjAuCisKKyAqIE1ENSBtYXkgbm93IGJlIHVzZWQgaW4gbm9uLWVuZm9yY2VkIGZpcHMgbW9kZS4KKworICogRml4ZWQgSE1BQyBmb3IgU0hBLTM4NCBhbmQgU0hBLTUxMiB3aXRoIGtleXMgbG9uZ2VyIHRoYW4gNjQgYnl0ZXMuCisKKyAqIEluIGZpcHMgbW9kZSwgUlNBIGtleXMgYXJlIG5vdyBnZW5lcmF0ZWQgdXNpbmcgdGhlIFg5LjMxIGFsZ29yaXRobQorICAgYW5kIERTQSBrZXlzIHVzaW5nIHRoZSBGSVBTIDE4Ni0yIGFsZ29yaXRobS4KKworICogVGhlIHRyYW5zaWVudC1rZXkgZmxhZyBpcyBub3cgYWxzbyBzdXBwb3J0ZWQgZm9yIERTQSBrZXkKKyAgIGdlbmVyYXRpb24uICBEU0EgZG9tYWluIHBhcmFtZXRlcnMgbWF5IGJlIGdpdmVuIGFzIHdlbGwuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS40LjMgKDIwMDgtMDktMTgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVHJ5IHRvIGF1dG8taW5pdGlhbGl6ZSBMaWJnY3J5cHQgdG8gbWluaW1pemUgdGhlIGVmZmVjdCBvZgorICAgYXBwbGljYXRpb25zIG5vdCBkb2luZyB0aGF0IGNvcnJlY3RseS4gIFRoaXMgaXMgbm90IGEgcGVyZmVjdAorICAgc29sdXRpb24gYnV0IGdpdmVuIHRoYXQgbWFueSBhcHBsaWNhdGlvbmlvbiB3b3VsZCB0b3RhbGx5IGZhaWwKKyAgIHdpdGhvdXQgc3VjaCBhIGhhY2ssIHdlIHRyeSB0byBoZWxwIGF0IGxlYXN0IHdpdGggdGhlIG1vc3QgY29tbW9uCisgICBjYXNlcy4gIEZvbGtzLCBwbGVhc2UgcmVhZCB0aGUgbWFudWFsIHRvIGxlYXJuIGhvdyB0byBwcm9wZXJseQorICAgaW5pdGlhbGl6ZSBMaWJnY3J5cHQhCisKKyAqIEF1dG8taW5pdGlhbGl6ZSB0aGUgc2VjdXJlIG1lbW9yeSB0byAzMmsgaW5zdGVhZCBvZiBhYm9ydGluZyB0aGUKKyAgIHByb2Nlc3MuCisKKyAqIExvZyBmYXRhbCBlcnJvcnMgdmlhIHN5c2xvZy4KKworICogQ2hhbmdlZCB0aGUgbmFtZSBhbmQgdGhlIHNlbWFudGljcyBvZiB0aGUgZmlwcyBtb2RlIGNvbmZpZyBmaWxlLgorCisgKiBBZGQgY29udmVuaWVuY2UgbWFjcm8gZ2NyeV9maXBzX21vZGVfYWN0aXZlLgorCisgKiBNb3JlIHNlbGYtdGVzdHMuCisKKyAqIERvY3VtZW50YXRpb24gY2xlYW51cHMuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS40LjIgKDIwMDgtMDktMDgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGxvbmcgbWlzc2luZyBnY3J5X21waV9sc2hpZnQgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQuCisKKyAqIFJTQSBrZXkgZ2VuZXJhdGlvbiBub3cgc3VwcG9ydHMgYSAidHJhbnNpZW50LWtleSIgZmxhZy4KKworICogVGhlIGtleWdyaXAgY29tcHV0YXRpb24gZm9yIEVDRFNBIGhhcyBiZWVuIGltcGxlbWVudGVkIHRodXMgRUNEU0EKKyAgIGlzIG5vdyBmdWxseSBzdXBwb3J0ZWQuCisKKyAqIEEgZmV3IG1hY3JvcyBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGZvciBiZXR0ZXIgdHlwZQorICAgY2hlY2tpbmcuCisKKyAqIFRoZSB0aHJlYWQgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlIG5vdyBjYXJyaWVzIHZlcnNpb24KKyAgIGluZm9ybWF0aW9uLgorCisgKiBUaGUgbWFudWFsIGRlc2NyaWJlcyBtb3JlIGNsZWFybHkgaG93IHRvIGluaXRpYWxpemUgTGliZ2NyeXB0LgorCisgKiBUaGUgbGlicmFyeSBtYXkgbm93IGJlIHN3aXRjaGVkIGludG8gYSBGSVBTIG1vZGUuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjMuMCByZWxlYXNlOgorIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyBHQ1JZQ1RMX09QRVJBVElPTkFMX1AgICBORVcuCisgR0NSWUNUTF9GSVBTX01PREVfUCAgICAgTkVXLgorIEdDUllDVExfRk9SQ0VfRklQU19NT0RFIE5FVy4KKyBnY3J5X2NpcGhlcl9zZXRrZXkgICAgICBORVc6IFJlcGxhY2VzIG1hY3JvLgorIGdjcnlfY2lwaGVyX3NldGl2ICAgICAgIE5FVzogUmVwbGFjZXMgbWFjcm8uCisgZ2NyeV9jaXBoZXJfc2V0Y3RyICAgICAgTkVXOiBSZXBsYWNlcyBtYWNyby4KKyBnY3J5X21waV9sc2hpZnQgICAgICAgICBORVcuCisgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuNC4xICgyMDA4LTA0LTI1KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZpeGVkIGEgYnVnIGludHJvZHVjZWQgYnkgMS4zLjEgd2hpY2ggbGVkIHRvIHRoZSBjb21zdW1wdGlvbiBvZiBmYXIKKyAgIHRvbyBtdWNoIGVudHJvcHkgZm9yIHRoZSBpbnRpYWwgc2VlZGluZy4KKworICogSW1wcm92ZWQgQUVTIHBlcmZvcm1hbmNlIGZvciBDRkIgYW5kIENCQyBtb2Rlcy4KKworICogUmVtb3ZlZCBidWlsZCBwcm9ibGVtcyBmb3IgdGhlIFBhZGxvY2sgc3VwcG9ydC4KKworCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjQuMCAoMjAwNy0xMi0xMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBOZXcgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtcGFkbG9jay1zdXBwb3J0IHdoaWNoIGlzIG1vc3RseQorICAgdXNlZnVsIGluIGNhc2Ugb2YgYnVpbGQgcHJvYmxlbXMuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4zLjIgKDIwMDctMTItMDMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHZpc2liaWxpdHkgYXR0cmlidXRlIGlzIG5vdyB1c2VkIGlmIHN1cHBvcnRlZCBieSB0aGUgdG9vbGNoYWluLgorCisgKiBUaGUgQUNFIGVuZ2luZSBvZiBWSUEgcHJvY2Vzc29ycyBpcyBub3cgdXNlZCBmb3IgQUVTLTEyOC4KKworICogVGhlIEFTTi4xIERFUiB0ZW1wbGF0ZSBmb3IgU0hBLTIyNCBoYXMgYmVlbiBmaXhlZC4KKworCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjMuMSAoMjAwNy0xMC0yNikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZW50aXJlIGxpYnJhcnkgaXMgbm93IHVuZGVyIHRoZSBMR1BMLiBUaGUgaGVscGVyIHByb2dyYW1zIGFuZAorICAgdGhlIG1hbnVhbCBhcmUgdW5kZXIgdGhlIEdQTC4gIEt1ZG9zIHRvIFBldGVyIEd1dG1hbm4gZm9yIGdpdmluZworICAgcGVybWlzc2lvbnMgdG8gcmVsaWNlbnNlIHRoZSBybmR3MzIgYW5kIHJuZHVuaXggbW9kdWxlcy4KKworICogVGhlIENhbWVsbGlhIGNpcGhlciBpcyBub3cgdW5kZXIgdGhlIExHUEwgYW5kIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCisKKyAqIEZpeGVkIGEgYnVnIGluIHRoZSBkZXRlY3Rpb24gb2Ygc3ltYm9sIHByZWZpeGVzIHdoaWNoIGluaGliaXRlZCB0aGUKKyAgIGJ1aWxkIG9mIG9wdGltemllZCBhc3NlbWJsZXIgY29kZSBvbiBjZXJ0YWluIHN5c3RlbXMuCisKKyAqIFVwZGF0ZWQgdGhlIGVudHJvcHkgZ2F0aGVyZXIgZm9yIFczMi4KKworCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjMuMCAoMjAwNy0wNS0wNCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDaGFuZ2VkIHRoZSB3YXkgdGhlIFJORyBnZXRzIGluaXRpYWxpemVkLiBUaGlzIGFsbG93cyB0byBrZWVwIGl0CisgICB1bmluaXRpYWxpemVkIGFzIGxvbmcgYXMgbm8gcmFuZG9tIG51bWJlcnMgYXJlIHVzZWQuICBUbyBvdmVycmlkZQorICAgdGhpcywgdGhlIG5ldyBtYWNybyBnY3J5X2Zhc3RfcmFuZG9tX3BvbGwgbWF5IGJlIHVzZWQuICBJdCBpcyBpbgorICAgZ2VuZXJhbCBhIGdvb2QgaWRlYSB0byBzcHJlYWQgdGhpcyBtYWNybyBpbnRvIHRoZSBhcHBsaWNhdGlvbiBjb2RlCisgICB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBwb2xscyBoYXBwZW4gb2Z0ZW4gZW5vdWdoLgorCisgKiBNYWRlIHRoZSBSTkcgaW1tdW5lIGFnYWluc3QgZm9yayB3aXRob3V0IGV4ZWMuCisKKyAqIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHJhbmRvbSBzZWVkIGZpbGUgaXMgbm93IHByb3RlY3RlZCBieSBhCisgICBmY250bCBzdHlsZSBmaWxlIGxvY2sgb24gc3lzdGVtcyB0aGF0IHByb3ZpZGUgdGhpcyBmdW5jdGlvbi4KKworICogU3VwcG9ydCBmb3IgU0hBLTIyNCBhbmQgSE1BQyB1c2luZyBTSEEtMzg0IGFuZCBTSEEtNTEyLgorCisgKiBTdXBwb3J0IGZvciB0aGUgU0VFRCBjaXBoZXIuCisKKyAqIFN1cHBvcnQgZm9yIHRoZSBDYW1lbGxpYSBjaXBoZXIuICBOb3RlIHRoYXQgQ2FtZWxsaWEgaXMgZGlzYWJsZWQgYnkKKyAgIGRlZmF1bHQsIGFuZCB0aGF0IGVuYWJsaW5nIGl0IGNoYW5nZXMgdGhlIGxpY2Vuc2Ugb2YgbGliZ2NyeXB0IGZyb20KKyAgIExHUEwgdG8gR1BMLgorCisgKiBTdXBwb3J0IGZvciBPRkIgZW5jcnlwdGlvbiBtb2RlLgorCisgKiBnY3J5X21waV9yc2hpZnQgZG9lcyBub3QgYW55bW9yZSB0cnVuY2F0ZSB0aGUgc2hpZnQgY291bnQuCisKKyAqIFJlc2VydmVkIGFsZ29yaXRobSByYW5nZXMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMuCisKKyAqIFN1cHBvcnQgZm9yIERTQTIuCisKKyAqIFRoZSBuZXcgZnVuY3Rpb24gZ2NyeV9tZF9kZWJ1ZyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQorICAgZ2NyeV9tZF9zdGFydF9kZWJ1ZyBhbmQgZ2NyeV9tZF9zdG9wX2RlYnVnIG1hY3Jvcy4KKworICogTmV3IGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtcmFuZG9tLWRhZW1vbiB0byBzdXBwb3J0IGEgc3lzdGVtCisgICB3aWRlIHJhbmRvbSBkYWVtb24uICBUaGUgZGFlbW9uIGNvZGUgaXMgZXhwZXJpbWVudGFsIGFuZCBub3QgeWV0CisgICB2ZXJ5IHdlbGwgd29ya2luZy4gIEl0IHdpbGwgZXZlbnR1YWxseSBhbGxvdyB0byBrZWVwIGEgZ2xvYmFsCisgICByYW5kb20gcG9vbCBmb3IgdGhlIHNha2Ugb2Ygc2hvcnQgbGl2aW5nIHByb2Nlc3Nlcy4KKworICogTm9uIGV4ZWN1dGFibGUgc3RhY2sgc3VwcG9ydCBpcyBub3cgdXNlZCBieSBkZWZhdWx0IG9uIHN5c3RlbXMKKyAgIHN1cHBvcnRpbmcgaXQuCisKKyAqIFN1cHBvcnQgZm9yIE1pY3Jvc29mdCBXaW5kb3dzLgorCisgKiBBc3NlbWJsZXIgc3VwcG9ydCBmb3IgdGhlIEFNRDY0IGFyY2hpdGVjdHVyZS4KKworICogTmV3IGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtbXBpLXBhdGggZm9yIG9wdGltaXplZCBidWlsZHMuCisKKyAqIEV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBFQ0RTQTsgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZy4KKworICogTmV3IGNvbnRyb2wgY29kZSBHQ1JZQ1RMX1BSSU5UX0NPTkZJRyB0byBwcmludCB0aGUgYnVpbGQKKyAgIGNvbmZpZ3VyYXRpb24uCisKKyAqIE1pbm9yIGNoYW5nZXMgdG8gc29tZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuICBCdWZmZXIgYXJndW1lbnRzIGFyZQorICAgbm93IHR5cGVkIGFzIHZvaWQgcG9pbnRlci4gIFRoaXMgc2hvdWxkIG5vdCBhZmZlY3QgYW55IGNvbXBpbGF0aW9uLgorICAgRml4ZWQgdHdvIGJ1Z3MgaW4gcmV0dXJuIHZhbHVlcyBhbmQgY2xhcmlmaWVkIGRvY3VtZW50YXRpb24uCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjIuMCByZWxlYXNlOgorIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyBnY3J5X2Zhc3RfcmFuZG9tX3BvbGwJIE5FVworIGdjcnlfbWRfZGVidWcgICAgICAgICAgIE5FVworIGdjcnlfc2V4cF9udGhfc3RyaW5nICAgIE5FVworIEdDUllfTURfU0hBMjI0ICAgICAgICAgIE5FVworIEdDUllfUEtfVVNBR0VfQ0VSVCAgICAgIE5FVworIEdDUllfUEtfVVNBR0VfQVVUSCAgICAgIE5FVworIEdDUllfUEtfVVNBR0VfVU5LTiAgICAgIE5FVworIEdDUllfUEtfRUNEU0EgICAgICAgICAgIE5FVworIEdDUllfQ0lQSEVSX1NFRUQgICAgICAgIE5FVworIEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4IE5FVworIEdDUllfQ0lQSEVSX0NBTUVMTElBMTkyIE5FVworIEdDUllfQ0lQSEVSX0NBTUVMTElBMjU2IE5FVworIEdDUllDVExfRkFLRURfUkFORE9NX1AgIE5FVworIEdDUllDVExfUFJJTlRfQ09ORklHICAgIE5FVworIEdDUllDVExfU0VUX1JOREVHRF9TT0NLRVQgIE5FVy4KKyBnY3J5X21waV9zY2FuICAgICAgICAgICBDSEFOR0VEOiBBcmd1bWVudCBCVUZGRVIgaXMgbm93IHZvaWQqLgorIGdjcnlfcGtfYWxnb19uYW1lICAgICAgIENIQU5HRUQ6IFJldHVybnMgIj8iIGluc3RlYWQgb2YgTlVMTC4KKyBnY3J5X2NpcGhlcl9hbGdvX25hbWUgICBDSEFOR0VEOiBSZXR1cm5zICI/IiBpbnN0ZWFkIG9mICIiLgorIGdjcnlfcGtfc3BlY190ICAgICAgICAgIENIQU5HRUQ6IEVsZW1lbnQgQUxJQVNFUyBpcyBub3cgY29uc3QgcHRyLgorIGdjcnlfbWRfd3JpdGVfdCAgICAgICAgIENIQU5HRUQ6IEFyZ3VtZW50IEJVRiBpcyBub3cgYSBjb25zdCB2b2lkKi4KKyBnY3J5X21kX2N0bCAgICAgICAgICAgICBDSEFOR0VEOiBBcmd1bWVudCBCVUZGRVIgaXMgbm93IHZvaWQqLgorIGdjcnlfY2lwaGVyX2VuY3J5cHQgICAgIENIQU5HRUQ6IEFyZ3VtZW50cyBJTiBhbmQgT1VUIGFyZSBub3cgdm9pZCouCisgZ2NyeV9jaXBoZXJfZGVjcnlwdCAgICAgQ0hBTkdFRDogQXJndW1lbnRzIElOIGFuZCBPVVQgYXJlIG5vdyB2b2lkKi4KKyBnY3J5X3NleHBfc3ByaW50ICAgICAgICBDSEFOR0VEOiBBcmd1bWVudCBCVUZGRVIgaXMgbm93IHZvaWQqLgorIGdjcnlfY3JlYXRlX25vbmNlICAgICAgIENIQU5HRUQ6IEFyZ3VtZW50IEJVRkZFUiBpcyBub3cgdm9pZCouCisgZ2NyeV9yYW5kb21pemUgICAgICAgICAgQ0hBTkdFRDogQXJndW1lbnQgQlVGRkVSIGlzIG5vdyB2b2lkKi4KKyBnY3J5X2NpcGhlcl9yZWdpc3RlciAgICBDSEFOR0VEOiBBcmd1bWVudCBBTEdPUklUSE1fSUQgaXMgbm93IGludCouCisgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMi4wICgyMDA0LTA0LTE1KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZpcnN0IHN0YWJsZSByZWxlYXNlLgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS45NCAoMjAwNC0wMy0yOSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHN1cHBvcnQgZm9yIG11bHRpLXRocmVhZGVkIHVzZXJzIGdvZXMgaW50byBpdHMgdGhpcmQKKyAgIGluY2FybmF0aW9uLiAgV2UgcmVtb3ZlZCBjb21waWxlIHRpbWUgc3VwcG9ydCBmb3IgdGhyZWFkIGxpYnJhcmllcy4KKyAgIFRvIHN1cHBvcnQgdGhlIHRocmVhZCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlLCB5b3UgaGF2ZSB0byBzZXQgdXAKKyAgIGNhbGxiYWNrIGhhbmRsZXJzIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuICBOZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhCisgICBuZXcgY29udHJvbCBjb21tYW5kLCBhbmQgZGVmYXVsdCBpbml0aWFsaXplcnMgYXJlIHByb3ZpZGVkIGZvciB0aGlzCisgICBwdXJwb3NlLgorCisgKiBJbnRlcmZhY2UgY2hhbmdlcyByZWxhdGl2ZSB0byB0aGUgMS4xLjkzIHJlbGVhc2U6Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitsaWJnY3J5cHQtY29uZmlnIC0tdGhyZWFkCU9CU09MRVRFCitsaWJnY3J5cHQtcHRoLmxhCQlSRU1PVkVECitsaWJnY3J5cHQtcHRocmVhZC5sYQkJUkVNT1ZFRAorR0NSWUNUTF9TRVRfVEhSRUFEX0NCUwkJTkVXCitzdHJ1Y3QgZ2NyeXB0X3RocmVhZF9jYnMJTkVXCitlbnVtIGdjcnlfdGhyZWFkX29wdGlvbgkJTkVXCitHQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUEwJTkVXCitHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRF9JTVBMCU5FVworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjEuOTMgKDIwMDQtMDMtMDYpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBhdXRvbWF0aWMgdGhyZWFkIGxpYnJhcnkgZGV0ZWN0aW9uIGhhcyBmaW5hbGx5IGJlZW4gcmVtb3ZlZC4KKyAgIEZyb20gbm93IG9uLCBvbmx5IGxpbmtpbmcgZXhwbGljaXRlbHkgdG8gbGliZ2NyeXB0LCBsaWJnY3J5cHQtcHRoCisgICBvciBsaWJnY3J5cHQtcHRocmVhZCBpcyBzdXBwb3J0ZWQuCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS45MiAoMjAwNC0wMi0yMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWlub3IgYnVnIGZpeGVzLgorCisgKiBJbmNsdWRlZCBhIGxpbWl0ZWQgaW1wbGVtZW50YXRpb24gb2YgUkZDMjI2OC4KKworICogQ2hhbmdlZCBBUEkgb2YgdGhlIGdjcnlfYWNfIGZ1bmN0aW9ucy4gIE9ubHkgYSB2ZXJ5IGZldyBwcm9ncmFtcworICAgc2hvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoaXMuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjEuOTEgcmVsZWFzZToKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0dDUllfQ0lQSEVSX1JGQzIyNjhfNDAgICAgICAgICAgTkVXLgorZ2NyeV9hY19kYXRhX3NldCAgICAgICAgICAgICAgICBDSEFOR0VEOiBOZXcgYXJndW1lbnQgRkxBR1MuCitnY3J5X2FjX2RhdGFfZ2V0X25hbWUgICAgICAgICAgIENIQU5HRUQ6IE5ldyBhcmd1bWVudCBGTEFHUy4KK2djcnlfYWNfZGF0YV9nZXRfaW5kZXggICAgICAgICAgQ0hBTkdFRDogTmV3IGFyZ3VtZW50IEZMQUdTLgorZ2NyeV9hY19rZXlfcGFpcl9nZW5lcmF0ZSAgICAgICBDSEFOR0VEOiBOZXcgYW5kIHJlb3JkZXJlZCBhcmd1bWVudHMuCitnY3J5X2FjX2tleV90ZXN0ICAgICAgICAgICAgICAgIENIQU5HRUQ6IE5ldyBhcmd1bWVudCBIQU5ETEUuCitnY3J5X2FjX2tleV9nZXRfbmJpdHMgICAgICAgICAgIENIQU5HRUQ6IE5ldyBhcmd1bWVudCBIQU5ETEUuCitnY3J5X2FjX2tleV9nZXRfZ3JpcCAgICAgICAgICAgIENIQU5HRUQ6IE5ldyBhcmd1bWVudCBIQU5ETEUuCitnY3J5X2FjX2RhdGFfc2VhcmNoICAgICAgICAgICAgIFJFTU9WRUQuCitnY3J5X2FjX2RhdGFfYWRkICAgICAgICAgICAgICAgIFJFTU9WRUQuCitHQ1JZX0FDX0RBVEFfRkxBR19OT19CTElORElORyAgIFJFTU9WRUQuCitHQ1JZX0FDX0ZMQUdfTk9fQkxJTkRJTkcgICAgICAgIE5FVzogUmVwbGFjZXMgYWJvdmUuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjkxICgyMDAzLTEyLTE5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb2RlIGNsZWFudXBzIGFuZCBtaW5vciBidWcgZml4ZXMuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjkwICgyMDAzLTExLTE0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgdXNlIG9mIHRoZSBHQ1JZX1dFQUtfUkFORE9NIGxldmVsIGlzIG5vdyBkZXByZWNhdGVkIGluIGZhdm9yIG9mCisgICB0aGUgbmV3IGdjcnlfY3JlYXRlX25vbmNlIGZ1bmN0aW9uLgorCisgKiBnY3J5X3NleHBfYnVpbGQgbm93IHN1cHBvcnRzIGEgIiViIiBmb3JtYXQgdG8gaW5jbHVkZSBhIG1lbW9yeSBidWZmZXIuCisKKyAqIE1pbm9yIGNvbmZpZ3VyYXRpb24gZml4ZXMuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjEuNDQgcmVsZWFzZToKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2djcnlfY3JlYXRlX25vbmNlICAgICAgICAgICAgICAgTkVXCitnY3J5X3NleHBfYnVpbGQgICAgICAgICAgICAgICAgIEVOSEFOQ0VECisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjQ0ICgyMDAzLTEwLTMxKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWcgZml4ZXMgYW5kIG1vcmUgY29kZSBjbGVhbnVwcy4KKworICogRW5oYW5jZWQgdGhlIHByaW1lIEFQSS4KKworICogSW50ZXJmYWNlIGNoYW5nZXMgcmVsYXRpdmUgdG8gdGhlIDEuMS40MyByZWxlYXNlOgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgICAgICBORVcKK2djcnlfcHJpbWVfcmVsZWFzZV9mYWN0b3JzICAgICAgTkVXCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjQzICgyMDAzLTA5LTA0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWcgZml4ZXMgYW5kIGludGVybmFsIGNvZGUgY2xlYW51cHMuCisKKyAqIFN1cHBvcnQgZm9yIHRoZSBTZXJwZW50IGNpcGhlciBhbGdvcml0aG0uCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjEuNDIgcmVsZWFzZToKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2djcnlfcHJpbWVfZ2VuZXJhdGUgICAgICAgICAgICAgTkVXCitnY3J5X3ByaW1lX2NoZWNrICAgICAgICAgICAgICAgIE5FVworCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS40MiAoMjAwMy0wNy0zMSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWFqb3IgQVBJIGNsZWFudXAuICBBcHBsaWNhdGlvbnMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIG5ldworICAgQVBJLiAgU2VlIFJFQURNRS5hcGljaGFuZ2VzIGZvciBoaW50cyBvbiBob3cgdG8gZG8gdGhhdC4gIEJhY2t3YXJkCisgICBjb21wYXRpYmlsaXR5IGlzIHByb3ZpZGVkIHdoZXJlIGl0IHdhcyBwb3NzaWJsZSB3aXRob3V0IHRvbyBtdWNoCisgICBlZmZvcnQgYW5kIGRpZCBub3QgY29sbGlkZSB3aXRoIHRoZSBvdmVyYWxsIHNhbml0aXphdGlvbiBlZmZvcnQuCisgICBIb3dldmVyLCB0aGlzIGlzIG9ubHkgZm9yIGVhc2Ugb2YgdHJhbnNpdGlvbi4gIE5PIERFUFJFQ0FURUQKKyAgIEZVTkNUSU9OIE9SIERBVEEgVFlQRSBJUyBDT05TSURFUkVEIEEgUEFSVCBPRiBUSEUgQVBJIE9SIEFCSSBBTkQKKyAgIFdJTEwgQkUgRFJPUFBFRCBJTiBUSEUgRlVUVVJFIFdJVEhPVVQgQ0hBTkdJTkcgVEhFIFNPTkFNRSBPRiBUSEUKKyAgIExJQlJBUlkuCisKKyAqIElmIGdjcnlwdC5oIGlzIGluY2x1ZGVkIGluIHNvdXJjZXMgY29tcGlsZWQgYnkgR0NDIDMuMSBvciBsYXRlciwKKyAgIGRlcHJlY2F0ZWQgYXR0cmlidXRlcyB3aWxsIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9ucyBhbmQKKyAgIHR5cGUgZGVmaW5pdGlvbnMuICBZb3UgY2FuIHN1cHByZXNzIHRoZXNlIHdhcm5pbmdzIGJ5IHBhc3NpbmcKKyAgIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgdG8gdGhlIGdjYyBjb21tYW5kLgorCisgKiBnY3J5X2NoZWNrX3ZlcnNpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBub3cgb24gdG8gaW5pdGlhbGl6ZSB0aGUKKyAgIGxpYnJhcnksIGl0IGlzIG5vdCBsb25nZXIgb3B0aW9uYWwuCisKKyAqIFJlbW92ZWQgYGxpYmdjcnlwdCBlcnJubycgY29uY2VwdC4KKworICogTGliZ2NyeXB0IGRlcGVuZHMgb24gbGliZ3BnLWVycm9yLCBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBlcnJvcgorICAgY29kZXMgYW5kIGFjY29yZGluZyBmdW5jdGlvbnMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzLiAgRnVuY3Rpb25zCisgICB0aGF0IHVzZWQgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFzYSBgaW50JyBoYXZlIGJlZW4gY2hhbmdlZCB0bworICAgcmV0dXJuIGEgY29kZSBvZiB0eXBlIGBnY3J5X2Vycm9yX3QnLiAgQWxsIEdDUllFUlJfKiBlcnJvciBzeW1ib2xzCisgICBoYXZlIGJlZW4gcmVtb3ZlZCwgc2luY2UgdGhleSBhcmUgbm93IGNvbnRhaW5lZCBpbiBsaWJncGctZXJyb3IKKyAgIChHUEdfRVJSXyopLiBBbGwgZnVuY3Rpb25zIGFuZCB0eXBlcyBpbiBsaWJncGctZXJyb3IgaGF2ZSBhbHNvIGJlZW4KKyAgIHdyYXBwZWQgaW4gTGliZ2NyeXB0LiBUaGUgbmV3IHR5cGVzIGFyZSBnY3J5X2Vycl9jb2RlX3QgYW5kCisgICBnY3J5X2Vycl9zb3VyY2VfdC4gIFRoZSBuZXcgZnVuY3Rpb25zIGFyZSBnY3J5X2Vycl9jb2RlLAorICAgZ2NyeV9lcnJfc291cmNlLCBnY3J5X2Vycm9yLCBnY3J5X2Vycl9tYWtlLCBnY3J5X2Vycm9yX2Zyb21fZXJybm8sCisgICBnY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8sIGdjcnlfZXJyX2NvZGVfZnJvbV9lcnJubywKKyAgIGdjcnlfZXJyX2NvZGVfdG9fZXJybm8sIGdjcnlfc3Ryc291cmNlLgorCisgKiBOZXcgZnVuY3Rpb24gZ2NyeV9tcGlfZHVtcCB0byBoZWxwIGluIGRlYnVnZ2luZy4KKworICogQWRkZWQgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlIGZvciBhc3ltbWV0cmljIGNyeXB0b2dyYXBoeS4KKworICogQ1JDLTMyLCBDUkMtMzIgYSdsYSBSRkMgMTUxMCwgQ1JDLTI0IGEnbGEgUkZDIDI0NDAgYXJlIG5vdworICAgc3VwcG9ydGVkLgorCisgKiBTSEEtMjU2LCBTSEEtMzg0IGFuZCBTSEEtNTEyIGFyZSBub3cgc3VwcG9ydGVkLgorCisgKiAxMjggYml0IFR3b2Zpc2ggaXMgbm93IHN1cHBvcnRlZC4KKworICogVGhlIHJhbmRvbSBtb2R1bGUgd29uJ3QgcHJpbnQgdGhlICJub3QgZW5vdWdoIHJhbmRvbSBieXRlcworICAgYXZhaWxhYmxlIiBhbnltb3JlLiAgQSBuZXcgcHJvZ3Jlc3Mgc3RhdHVzIGlzIGlzc3VlZCBpbnN0ZWFkLgorCisgKiBDQkMtTUFDIGZvciBibG9jayBjaXBoZXJzIGlzIG5vdyBzdXBwb3J0ZWQsIGJ5IHVzaW5nIGEKKyAgIEdDUllfQ0lQSEVSX0NCQ19NQUMgY2lwaGVyIGZsYWcuCisKKyAqIENUUiBtb2RlIGZvciBibG9jayBjaXBoZXJzIGlzIG5vdyBzdXBwb3J0ZWQuCisKKyAqIFRoZSBwdWJsaWMgUlNBIGV4cG9uZW50IGNhbiBub3cgYmUgc3BlY2lmaWVkIGluIGtleSBnZW5lcmF0aW9uLgorCisgKiBSU0EgYmxpbmRpbmcgaXMgbm93IHN1cHBvcnRlZCBhbmQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IGZvciBSU0EKKyAgIGRlY3J5cHRpb24uICBJdCBjYW4gYmUgZXhwbGljaXRlbHkgZGlzYWJsZWQgYnkgdXNpbmcgdGhlCisgICBgbm8tYmxpbmRpbmcnIHN5bWJvbCBpbiB0aGUgYGZsYWdzJyBTLUV4cHJlc3Npb24gb3IgYnkgdXNpbmcgdGhlCisgICBHQ1JZX0FDX0ZMQUdfREFUQV9OT19CTElORElORyBmbGFnIHdoZW4gdXNpbmcgdGhlIGFjIGludGVyZmFjZS4KKworICogZ2NyeV9zZXhwX2Nhbm9uX2xlbiBkb2VzIG5vdCB1c2UgYSBgaGlzdG9yaWNhbGx5IGVuY29kZWQnIGVycm9yCisgICBjb2RlIGFueW1vcmUuCisKKworICogSW50ZXJmYWNlIGNoYW5nZXMgcmVsYXRpdmUgdG8gdGhlIDEuMS4xMiByZWxlYXNlOgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorR0NSWV9NUEkJCQlERVBSRUNBVEVEOyBVc2U6IGdjcnlfbXBpX3QKK0djcnlNUEkJCQkJREVQUkVDQVRFRDsgVXNlOiBnY3J5X21waV90CitHQ1JZX1NFWFAJCQlERVBSRUNBVEVEOyBVc2U6IGdjcnlfc2V4cF90CitHY3J5U2V4cAkJCURFUFJFQ0FURUQ7IFVzZTogZ2NyeV9zZXhwX3QKK0dDUllfQ0lQSEVSX0hECQkJREVQUkVDQVRFRDsgVXNlOiBnY3J5X2NpcGhlcl9oZF90CitHY3J5Q2lwaGVySGQJCQlERVBSRUNBVEVEOyBVc2U6IGdjcnlfY2lwaGVyX2hkX3QKK0dDUllfTURfSEQJCQlERVBSRUNBVEVEOyBVc2U6IGdjcnlfbWRfaGRfdAorR2NyeU1ESGQJCQlERVBSRUNBVEVEOyBVc2U6IGdjcnlfbWRfaGRfdAorZ2NyeV9lcnJvcl90CQkJTkVXCitnY3J5X2Vycl9jb2RlX3QJCQlORVcKK2djcnlfZXJyX3NvdXJjZV90CQlORVcKK2djcnlfZXJyX21ha2UJCQlORVcKK2djcnlfZXJyb3IJCQlORVcKK2djcnlfZXJyX2NvZGUJCQlORVcKK2djcnlfZXJyX3NvdXJjZQkJCU5FVworZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vCU5FVworZ2NyeV9lcnJfY29kZV90b19lcnJubwkJTkVXCitnY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8JTkVXCitnY3J5X2Vycm9yX2Zyb21fZXJybm8JCU5FVworZ2NyeV9zdHJzb3VyY2UJCQlORVcKK0dDUllFUlJfe3NvbWUgZXJyb3IgY29kZX0JUkVNT1ZFRDsgVXNlIEdQR19FUlJfKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGxpYmdwZy1lcnJvciBpbnN0ZWFkLgorZ2NyeV9lcnJubyAgICAgICAgICAgICAgICAgICAgICBSRU1PVkVECitnY3J5X3NleHBfY2Fub25fbGVuCQlDSEFOR0VECitnY3J5X3NleHBfYnVpbGRfYXJyYXkJCU5FVworZ2NyeV9tcGlfc2NhbgkJCUNIQU5HRUQ6IE5ldyBhcmd1bWVudCB0byBzZXBhcmF0ZSBpbi9vdXQgYXJncy4KK2djcnlfbXBpX3ByaW50CQkJQ0hBTkdFRDogRGl0dG8uCitnY3J5X21waV9kdW1wCQkJTkVXCitnY3J5X2NpcGhlcl9vcGVuCQlDSEFOR0VECitnY3J5X2NpcGhlcl9yZXNldAkJTkVXCitnY3J5X2NpcGhlcl9yZWdpc3RlcgkJTkVXCitnY3J5X2NpcGhlcl91bnJlZ2lzdGVyCQlORVcKK2djcnlfY2lwaGVyX2xpc3QJCU5FVworZ2NyeV9jaXBoZXJfYWxnb19rZXlsZW4JCVJFUExBQ0VEIG1hY3JvIHdpdGggZnVuY3Rpb24uCitnY3J5X2NpcGhlcl9hbGdvX2Jsa2xlbgkJUkVQTEFDRUQgbWFjcm8gd2l0aCBmdW5jdGlvbi4KK2djcnlfcGtfcmVnaXN0ZXIJCU5FVworZ2NyeV9wa191bnJlZ2lzdGVyCQlORVcKK2djcnlfcGtfbGlzdAkJCU5FVworZ2NyeV9wa19kZWNyeXB0CQkJRU5IQU5DRUQ6IEFsbG93cyBmbGFnIHRvIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgUy1leHByZXNzaW9uLgorZ2NyeV9tZF9vcGVuCQkJQ0hBTkdFRAorZ2NyeV9tZF9jb3B5CQkJQ0hBTkdFRAorZ2NyeV9tZF9pc19lbmFibGVkCQlORVcKK2djcnlfbWRfaXNfc2VjdXJlCQlORVcKK2djcnlfbWRfcmVnaXN0ZXIJCU5FVworZ2NyeV9tZF91bnJlZ2lzdGVyCQlORVcKK2djcnlfbWRfbGlzdAkJCU5FVworZ2NyeV9hY19kYXRhX3QJCQlORVcKK2djcnlfYWNfa2V5X3QJCQlORVcKK2djcnlfYWNfa2V5X3BhaXJfdAkJTkVXCitnY3J5X2FjX2hhbmRsZV90CQlORVcKK2djcnlfYWNfa2V5X3NwZWNfcnNhX3QJCU5FVworZ2NyeV9hY19kYXRhX25ldwkJTkVXCitnY3J5X2FjX2RhdGFfZGVzdHJveQkJTkVXCitnY3J5X2FjX2RhdGFfc2V0CQlORVcKK2djcnlfYWNfZGF0YV9jb3B5CQlORVcKK2djcnlfYWNfZGF0YV9sZW5ndGgJCU5FVworZ2NyeV9hY19kYXRhX2dldF9uYW1lCQlORVcKK2djcnlfYWNfZGF0YV9nZXRfaW5kZXgJCU5FVworZ2NyeV9hY19kYXRhX2NsZWFyCQlORVcKK2djcnlfYWNfb3BlbgkJCU5FVworZ2NyeV9hY19jbG9zZQkJCU5FVworZ2NyeV9hY19rZXlfaW5pdAkJTkVXCitnY3J5X2FjX2tleV9wYWlyX2dlbmVyYXRlCU5FVworZ2NyeV9hY19rZXlfcGFpcl9leHRyYWN0CU5FVworZ2NyeV9hY19rZXlfZGF0YV9nZXQJCU5FVworZ2NyeV9hY19rZXlfdGVzdAkJTkVXCitnY3J5X2FjX2tleV9nZXRfbmJpdHMJCU5FVworZ2NyeV9hY19rZXlfZ2V0X2dyaXAJCU5FVworZ2NyeV9hY19rZXlfZGVzdHJveQkJTkVXCitnY3J5X2FjX2tleV9wYWlyX2Rlc3Ryb3kJTkVXCitnY3J5X2FjX2RhdGFfZW5jcnlwdAkJTkVXCitnY3J5X2FjX2RhdGFfZGVjcnlwdAkJTkVXCitnY3J5X2FjX2RhdGFfc2lnbgkJTkVXCitnY3J5X2FjX2RhdGFfdmVyaWZ5CQlORVcKK2djcnlfYWNfaWRfdG9fbmFtZQkJTkVXCitnY3J5X2FjX25hbWVfdG9faWQJCU5FVworZ2NyeV9oYW5kbGVyX3Byb2dyZXNzX3QJCU5FVworZ2NyeV9oYW5kbGVyX2FsbG9jX3QJCU5FVworZ2NyeV9oYW5kbGVyX3NlY3VyZV9jaGVja190CU5FVworZ2NyeV9oYW5kbGVfcmVhbGxvY190CQlORVcKK2djcnlfaGFuZGxlcl9mcmVlX3QJCU5FVworZ2NyeV9oYW5kbGVyX25vX21lbV90CQlORVcKK2djcnlfaGFuZGxlcl9lcnJvcl90CQlORVcKK2djcnlfaGFuZGxlcl9sb2dfdAkJTkVXCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS4xMiAoMjAwMy0wMS0yMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2NyeV9wa19zaWduLCBnY3J5X3BrX3ZlcmlmeSBhbmQgZ2NyeV9wa19lbmNyeXB0IGNhbiBub3cgaGFuZGxlIGFuCisgICBvcHRpb25hbCBwa2NzMSBmbGFncyBwYXJhbWV0ZXIgaW4gdGhlIFMtZXhwcmVzc2lvbi4gIEEgc2ltaWxhciBmbGFnCisgICBtYXkgYmUgcGFzc2VkIHRvIGdjcnlfcGtfZGVjcnlwdCBidXQgaXQgaXMgb25seSBzeW50YWN0aWNhbGx5CisgICBpbXBsZW1lbnRlZC4KKworICogTmV3IGNvbnZlbmllbmNlIG1hY3JvIGdjcnlfbWRfZ2V0X2Fzbm9pZC4KKworICogVGhlcmUgaXMgbm93IHNvbWUgcmVhbCBzdHVmZiBpbiB0aGUgbWFudWFsLgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS4xMSAoMjAwMi0xMi0yMSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRG9uJ3QgZXhwb3J0IGludGVybmFsIHN5bWJvbHMgYW55bW9yZSAoY3VycmVudGx5IG9ubHkgZm9yIEdOVSBzeXN0ZW1zKQorCisgKiBOZXcgYWxnb3JpdGhtOiBNRDQKKworICogSW1wbGVtZW50ZWQgY2lwaGVydGV4dCBzdGVhbGluZy4KKworICogU21hbGxlciBidWdzIGZpeGVzIGFuZCBhIGZldyBuZXcgT0lEcy4KKworICogSW50ZXJmYWNlIGNoYW5nZXMgcmVsYXRpdmUgdG8gdGhlIDEuMS44IHJlbGVhc2U6Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2djcnlfY2lwaGVyX2N0cyAgICAgICAgICAgICAgICAgICBORVcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS4xMCAoMjAwMi0wOS0yMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRml4ZWQgc2hhcmVkIGxpYnJhcnkgYnVpbGRzIGZvciBpMzg2LCBQUEMgYW5kIFNwYXJjLgorCisgKiBBZGRlZCBzaW1wbGUgYmVuY2htYXJrIHRvb2wuCisKKyAqIFJlcGxhY2VkIHRoZSBpbnRlcm5hbCBtdXRleGVzIGJ5IGNvZGUgd2hpY2ggYXV0b21hdGljYWxseSBhZGFwdHMgdG8KKyAgIHRoZSB1c2VkIHRocmVhZGluZyBsaWJyYXJ5LiAgQ3VycmVudGx5IFB0aCBhbmQgUHRocmVhZCBhcmUKKyAgIHN1cHBvcnRlZC4gIEZvciBub24tRUxGIHN5c3RlbXMgdGhlIEdOVSB0b29sY2hhaW4gaXMgbm93IHJlcXVpcmVkLi4KKworICogQWRkZWQgdW50ZXN0ZWQgc3VwcG9ydCB0byBidWlsZCBXaW5kb3dzIERMTHMuCisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS45ICgyMDAyLTA4LTIzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFN1cHBvcnQgZm9yIHBsYWluIG9sZCBERVMuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjggKDIwMDItMDYtMjUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWlub3IgY2xlYW51cHMgYW5kIGV4cG9ydGVkIGEgZmV3IG5ldyBmdW5jdGlvbnMuCisKKyAqIEludGVyZmFjZSBjaGFuZ2VzIHJlbGF0aXZlIHRvIHRoZSAxLjEuNyByZWxlYXNlOgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorZ2NyeV9tcGlfZGl2ICAgICAgICAgICAgICAgICAgICAgIE5FVworZ2NyeV9tcGlfbW9kICAgICAgICAgICAgICAgICAgICAgIE5FVworZ2NyeV9tcGlfaW52bSAgICAgICAgICAgICAgICAgICAgIE5FVworZ2NyeV9tcGlfc3dhcCAgICAgICAgICAgICAgICAgICAgIE5FVworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjEuNyAoMjAwMi0wNS0yMSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIExpYmdjcnlwdCBpcyBub3cgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2U7IHNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGRldGFpbHMuCisKKyogSXQgaXMgcG9zc2libGUgdG8gdXNlIGxpYmdjcnlwdCB3L28gaW50aWFsaXplZCBzZWN1cmUgbWVtb3J5LgorCisqIExpYmdjcnlwdCBzaG91bGQgbm93IGJlIHRocmVhZCBzYWZlIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbi4KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1JMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELE5VTEwsMCkgc2hvdWxkIGhhdmUKKyAgYmVlbiBjYWxsZWQgYmVmb3JlIGNyZWF0aW5nIGFkZGl0aW9uYWwgdGhyZWFkcy4KKworICogSW50ZXJmYWNlIGNoYW5nZXMgcmVsYXRpdmUgdG8gdGhlIDEuMS42IHJlbGVhc2U6Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitHQ1JZQ1RMX0RJU0FCTEVfSU5URVJOQUxfTE9DS0lORyAgTkVXCitHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNICAgICAgICAgICAgTkVXCitHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVEICAgTkVXCitHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVEX1AgTkVXCitHQ1JZQ1RMX0FOWV9JTklUSUFMSVpBVElPTl9QICAgICAgTkVXCitnY3J5X3N0cmR1cCAgICAgICAgICAgICAgICAgICAgICAgTkVXCitnY3J5X3NleHBfY3JlYXRlICAgICAgICAgICAgICAgICAgTkVXCitnY3J5X3NleHBfbmV3ICAgICAgICAgICAgICAgICAgICAgTkVXCitnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyICAgICAgICAgTkVXCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05vdGV3b3J0aHkgY2hhbmdlcyBpbiB2ZXJzaW9uIDEuMS42ICgyMDAyLTAyLTA3KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgKiBFbmhhbmNlZCB0aGUgUy1leHByZXNzaW9uIGNvbnZlcnNpb24gZnVuY3Rpb25zLgorCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjEuNSAoMjAwMS0xMi0xOCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICogZ2NyeV97Y2lwaGVyLG1kfV9tYXBfbmFtZSBhcmUgbm93IGFibGUgdG8gbWFwIHN0cmluZ2lmaWVkIG9iamVjdCBJRHMuCisKKyAgKiBOZXcgZnVuY3Rpb25zIGdjcnlfc2V4cF9jYW5vbl9sZW4gYW5kIGdjcnlfY2lwaGVyX21vZGVfZnJvbV9vaWQuCisKKyAgKiBDbG9zZWQgc29tZSBtZW1vcnkgbGVha3MuCisKKworTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHZlcnNpb24gMS4xLjQgKDIwMDEtMDgtMDMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAqIEFyY2ZvdXIgZG9lcyBub3cgd29yay4KKworICAqIFNvbWUgbWlub3IgZml4ZXMuCisKKyAgKiBBZGRlZCBhIGZpcnN0IHRlc3QgcHJvZ3JhbQorCisgICogTWlncmF0ZWQgdG8gYXV0b2NvbmYgMi41Mi4KKworCitOb3Rld29ydGh5IGNoYW5nZXMgaW4gdmVyc2lvbiAxLjEuMyAoMjAwMS0wNS0zMSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICogRmlyc3QgcmVsZWFzZSBvZiBMaWJnY3J5cHQgd2hpY2ggaXMgYSByZXN1bHQgb2Ygc3BsaXR0aW5nIEdudVBHCisgICAgaW50byBpbnRvIGxpYmdjcnlwdCBhbmQgR251UEcuCisKKworQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDcsIDIwMDgsCisgICAgICAgICAgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAyMDEzIGcxMCBDb2RlIEdtYkgKKworVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQoraW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlZDE4YQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDI4NCBAQAorCQkgICAgTGliZ2NyeXB0IC0gVGhlIEdOVSBDcnlwdG8gTGlicmFyeQorCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjYKKworICAgICAgIENvcHlyaWdodCAoQykgMTk4OSwxOTkxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgZzEwIENvZGUgR21iSAorICAgICAgIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEp1c3NpIEtpdmlsaW5uYQorCisgICAgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmUuICBTZWUgdGhlIGZpbGUgQVVUSE9SUyBmb3IgZnVsbCBjb3B5aW5nCisgICAgbm90aWNlcywgYW5kIExJQ0VOU0VTIGZvciBub3RpY2VzIGFib3V0IGNvbnRyaWJ1dGlvbnMgdGhhdCByZXF1aXJlCisgICAgdGhlc2UgYWRkaXRpb25hbCBub3RpY2VzIHRvIGJlIGRpc3RyaWJ1dGVkLgorCisKKyAgICBPdmVydmlldworICAgIC0tLS0tLS0tCisKKyAgICBMaWJnY3J5cHQgaXMgYSBnZW5lcmFsIHB1cnBvc2UgY3J5cHRvIGxpYnJhcnkgYmFzZWQgb24gdGhlIGNvZGUKKyAgICB1c2VkIGluIEdudVBHLiAgTGliZ2NyeXB0IGRlcGVuZHMgb24gdGhlIGxpYnJhcnkgYGxpYmdwZy1lcnJvcicsCisgICAgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgY29ycmVjdGx5IGJlZm9yZSBMaWJnY3J5cHQgaXMgdG8gYmUgYnVpbHQuCisgICAgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMR1BMLCBzZWUgdGhlIHNlY3Rpb24gIkxpY2Vuc2UiCisgICAgYmVsb3cgZm9yIGRldGFpbHMuCisKKworICAgIEJ1aWxkIEluc3RydWN0aW9ucworICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIGRvd25sb2FkIGNhbm9uaWNhbCBsb2NhdGlvbiBmb3IgbGliZ2NyeXB0IGlzOgorCisgICAgICBmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJnY3J5cHQvCisKKyAgICBUbyBidWlsZCBsaWJnY3J5cHQgeW91IG5lZWQgbGliZ3BnLWVycm9yOgorCisgICAgICBmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvCisKKyAgICBZb3Ugc2hvdWxkIGdldCB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIGNvdXJzZS4KKworICAgIEFmdGVyIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBsaWJncGctZXJyb3IgcGFja2FnZSwgeW91IG1heQorICAgIGNvbnRpbnVlIHdpdGggTGliZ2NyeXB0IGluc3RhbGxhdGlvbiBhcyB3aXRoIGFsbG1vc3QgYWxsIEdOVQorICAgIHBhY2thZ2VzLCB5b3UganVzdCBoYXZlIHRvIGRvCisKKyAgICAgICAuL2NvbmZpZ3VyZQorICAgICAgIG1ha2UKKyAgICAgICBtYWtlIGNoZWNrCisgICAgICAgbWFrZSBpbnN0YWxsCisKKyAgICBUaGUgIm1ha2UgY2hlY2siIGlzIG5vdCByZXF1aXJlZCBidXQgYSBnb29kIGlkZWEgdG8gc2VlIHdoZXRoZXIKKyAgICB0aGUgbGlicmFyeSB3b3JrcyBhcyBleHBlY3RlZC4gIFRoZSBjaGVjayB0YWtlcyBzb21lIHdoaWxlIGFuZAorICAgIHByaW50cyBzb21lIGJlbmNobWFya2luZyByZXN1bHRzLiAgQmVmb3JlIGRvaW5nICJtYWtlIGluc3RhbGwiIHlvdQorICAgIHByb2JhYmx5IG5lZWQgdG8gYmVjb21lIHJvb3QuCisKKyAgICBUbyBidWlsZCBsaWJnY3J5cHQgZm9yIE1pY3Jvc29mdCBXaW5kb3dzLCB5b3UgbmVlZCB0byBoYXZlIHRoZQorICAgIG1pbmd3MzIgY3Jvc3MtYnVpbGRpbmcgdG9vbGNoYWluIGluc3RhbGxlZC4gIEluc3RlYWQgb2YgcnVubmluZyBhCisgICAgcGxhaW4gY29uZmlndXJlIHlvdSB1c2UKKworICAgICAgLi9hdXRvZ2VuLnNoIC0tYnVpbGQtdzMyCisgICAgICBtYWtlCisgICAgICBtYWtlIGluc3RhbGwKKworICAgIEJ5IGRlZmF1bHQgdGhpcyBjb21tYW5kIHNlcXVlbmNlcyBleHBlY3RzZCBhIGxpYmdwZy1lcnJvcgorICAgIGluc3RhbGxlZCBiZWxvdyAkSE9NRS93MzJyb290IGFuZCBpbnN0YWxscyBsaWJnY3J5cHQgdG8gdGhhdAorICAgIGRpcmVjdG9yeSB0b28uICBTZWUgdGhlIGF1dG9nZW4uc2ggY29kZSBmb3IgZGV0YWlscy4KKworICAgIFRoZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBhbiBJbmZvIGZpbGUgKGdjcnlwdC5pbmZvKS4gIFRvCisgICAgYnVpbGQgZG9jdW1lbnRhdGlvbiBpbiBQREYsIHJ1biB0aGlzOgorCisgICAgICBjZCBkb2MKKyAgICAgIG1ha2UgcGRmCisKKworCisgICAgTWFpbGluZyBMaXN0CisgICAgLS0tLS0tLS0tLS0tCisKKyAgICBZb3UgbWF5IHdhbnQgdG8gam9pbiB0aGUgZGV2ZWxvcGVyJ3MgbWFpbGluZyBsaXN0CisgICAgZ2NyeXB0LWRldmVsQGdudXBnLm9yZyBieSBzZW5kaW5nIG1haWwgd2l0aCBhIHN1YmplY3Qgb2YKKyAgICAic3Vic2NyaWJlIiB0byBnY3J5cHQtZGV2ZWwtcmVxdWVzdEBnbnVwZy5vcmcuICBBbiBhcmNoaXZlIG9mIHRoaXMKKyAgICBsaXN0IGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vbGlzdHMuZ251cGcub3JnIC4KKworCisgICAgQ29uZmlndXJlIG9wdGlvbnMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLQorICAgIEhlcmUgaXMgYSBsaXN0IG9mIGNvbmZpZ3VyZSBvcHRpb25zIHdoaWNoIGFyZSBzb21ldGltZXMgdXNlZnVsCisgICAgZm9yIGluc3RhbGxhdGlvbi4KKworICAgICAtLWVuYWJsZS1sYXJnZS1kYXRhLXRlc3RzCisgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGEgIm1ha2UgY2hlY2siIHdpbGwgdGFrZSByZWFsbHkKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHVlIHRvIGV4dHJhIGNoZWNrcyBmb3IgdGhlIGhhc2ggYWxnb3JpdGhtcy4KKworICAgICAtLWVuYWJsZS1tLWd1YXJkCisgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGludGVncmF0ZWQgbWFsbG9jIGNoZWNraW5nIGNvZGUuIFBsZWFzZQorICAgICAgICAgICAgICAgICAgICAgbm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBkb2VzIG5vdCB3b3JrIG9uIGFsbCBDUFVzCisgICAgICAgICAgICAgICAgICAgICAoZS5nLiBTdW5PUyA1Ljcgb24gVWx0cmFTcGFyYy0yKSBhbmQgbWlnaHQgZ2l2ZQorICAgICAgICAgICAgICAgICAgICAgeW91IGEgYnVzIGVycm9yLgorCisgICAgIC0tZGlzYWJsZS1hc20KKyAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgYXNzZW1ibGVyIG1vZHVsZXMuICBJdCBpcyBub3QgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSB0aGlzIG9uIHNvbWUgQ1BVIHR5cGVzLgorCisgICAgIC0tZW5hYmxlLWxkLXZlcnNpb24tc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICBMaWJnY3J5cHQgdHJpZXMgdG8gYnVpbGQgYSBsaWJyYXJ5IHdoZXJlIGludGVybmFsCisgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzIGFyZSBub3QgZXhwb3J0ZWQuICBUaGlzIHJlcXVpcmVzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgIGZyb20gbGQgYW5kIGlzIGN1cnJlbnRseSBlbmFibGVkIGZvciBhIGZldyBPU2VzLgorICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGtub3cgdGhhdCB5b3VyIGxkIHN1cHBvcnRzIHRoZSBzbyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgIEVMRiB2ZXJzaW9uIHNjcmlwdHMsIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICBmb3JjZSBpdHMgdXNlLiAgT1RPSCwgaWYgeW91IGdldCBlcnJvciBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBsaW5rZXIsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICBvcHRpb24gdG8gZGlzYWJsZSB0aGUgdXNlIG9mIHZlcnNpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgIE5vdGUsIHRoYXQgeW91IHNob3VsZCBuZXZlciBldmVyIHVzZSBhbgorICAgICAgICAgICAgICAgICAgICAgdW5kb2N1bWVudGVkIHN5bWJvbCBvciBvbmUgd2hpY2ggaXMgcHJlZml4ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgYW4gdW5kZXJzY29yZS4KKworICAgICAtLWVuYWJsZS1jaXBoZXJzPWxpc3QKKyAgICAgLS1lbmFibGUtcHVia2V5LWNpcGhlcnM9bGlzdAorICAgICAtLWVuYWJsZS1kaWdlc3RzPWxpc3QKKyAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkLCBhbGwgYWxnb3JpdGhtcworICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIGxpYmdjcnlwdCBzb3VyY2UgdHJlZSBhcmUgYnVpbHQuCisJCSAgICAgQW4gZXhjZXB0aW9uIGFyZSBhbGdvcml0aG1zLCB3aGljaCBkZXBlbmQgb24KKwkJICAgICBmZWF0dXJlcyBub3QgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSwgbGlrZSA2NGJpdAorCQkgICAgIGRhdGEgdHlwZXMuICBXaXRoIHRoZXNlIHN3aXRjaGVzIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICB0byBzZWxlY3QgZXhhY3RseSB0aG9zZSBhbGdvcml0aG0gbW9kdWxlcywgd2hpY2gKKwkJICAgICBzaG91bGQgYmUgYnVpbHQuICBUaGUgYWxnb3JpdGhtcyBhcmUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlZCBieSBzcGFjZXMsIGNvbW1hcyBvciBjb2xvbnMuICBUbyB2aWV3CisgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCB1c2VkIHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgdGhlIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgIHRlc3RzL3ZlcnNpb24gbWF5IGJlIHVzZWQuCisKKyAgICAgLS1kaXNhYmxlLWVuZGlhbi1jaGVjaworICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgbGV0IGNvbmZpZ3VyZSB0ZXN0IGZvciB0aGUgZW5kaWFubmVzcyBidXQKKyAgICAgICAgICAgICAgICAgICAgIHRyeSB0byB1c2UgdGhlIE9TIHByb3ZpZGVkIG1hY3JvcyBhdCBjb21waWxlCisgICAgICAgICAgICAgICAgICAgICB0aW1lLiAgVGhpcyBpcyBoZWxwZnVsIHRvIGNyZWF0ZSBPUyBYIGZhdCBiaW5hcmllcy4KKworICAgICAtLWVuYWJsZS1yYW5kb20tZGFlbW9uCisgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIHN1cHBvcnQgZm9yIGEgZ2xvYmFsIHJhbmRvbSBkYWVtb24gYW5kCisgICAgICAgICAgICAgICAgICAgICBidWlsZCB0aGUgZGFlbW9uLiAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4KKworICAgICAtLWVuYWJsZS1tcGktcGF0aD1FWFRSQV9QQVRICisgICAgICAgICAgICAgICAgICAgICBQcmVwZW5kIEVYVFJBX1BBVEggdG8gbGlzdCBvZiBDUFUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbnMuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25zIGZvcm4gYSBJbnRlbCBQZW50aXVtIDQgY29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICAgQ1BVLCB5b3UgbWF5IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtbXBpLXBhdGg9cGVudGl1bTQvc3NlMjpwZW50aXVtNC9tbXgKKyAgICAgICAgICAgICAgICAgICAgIFRha2UgY2FyZTogVGhlIGdlbmVyYXRlZCBsaWJyYXJ5IG1heSBjcmFzaCBvbgorICAgICAgICAgICAgICAgICAgICAgbm9uLWNvbXBhdGlibGUgQ1BVcy4KKworICAgICAtLWVuYWJsZS1yYW5kb209TkFNRQorICAgICAgICAgICAgICAgICAgICAgRm9yY2UgdGhlIHVzZSBvZiB0aGUgcmFuZG9tIGdhdGhlcmluZyBtb2R1bGUKKwkJICAgICBOQU1FLiAgRGVmYXVsdCBpcyBlaXRoZXIgdG8gdXNlIC9kZXYvcmFuZG9tIG9yCisJCSAgICAgdGhlIGF1dG8gbW9kZS4gIFBvc3NpYmxlIHZhbHVlcyBmb3IgTkFNRSBhcmU6CisJCSAgICAgICBlZ2QgLSBVc2UgdGhlIG1vZHVsZSB3aGljaCBhY2Nlc3NlcyB0aGUKKwkJCSAgICAgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uLiBTZWUgdGhlIHdlYnBhZ2VzCisJCQkgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGl0LgorCQkgICAgICB1bml4IC0gVXNlIHRoZSBzdGFuZGFyZCBVbml4IG1vZHVsZSB3aGljaCBkb2VzIG5vdAorCQkJICAgICBoYXZlIGEgdmVyeSBnb29kIHBlcmZvcm1hbmNlLgorCQkgICAgIGxpbnV4IC0gVXNlIHRoZSBtb2R1bGUgd2hpY2ggYWNjZXNzZXMgL2Rldi9yYW5kb20uCisJCQkgICAgIFRoaXMgaXMgdGhlIGZpcnN0IGNob2ljZSBhbmQgdGhlIGRlZmF1bHQgb25lCisJCQkgICAgIGZvciBHTlUvTGludXggb3IgKkJTRC4KKyAgICAgICAgICAgICAgICAgICAgICBhdXRvIC0gQ29tcGlsZSBsaW51eCwgZWdkIGFuZCB1bml4IGluIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWFnaWNhbGx5IHNlbGVjdCBhdCBydW50aW1lLgorCisgICAgIC0tZW5hYmxlLWhtYWMtYmluYXJ5LWNoZWNrCisgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIHN1cHBvcnQgdG8gY2hlY2sgdGhlIGJpbmFyeSBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGEgSE1BQyBjaGVja3N1bS4gIFRoaXMgd29ya3Mgb25seSBpbiBGSVBTCisgICAgICAgICAgICAgICAgICAgICBtb2RlIGFuZCBvbiBzeXN0ZW1zIHByb3ZpZGluZyB0aGUgZGxhZGRyIGZ1bmN0aW9uLgorCisgICAgIC0tZGlzYWJsZS1wYWRsb2NrLXN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIFBhZExvY2sgZW5naW5lIG9mIFZJQQorICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29ycy4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBQYWRMb2NrIGlmCisgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuICBUcnkgdGhpcyBpZiB5b3UgZ2V0IHByb2JsZW1zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlciBjb2RlLgorCisgICAgIC0tZGlzYWJsZS1hZXNuaS1zdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBBRVMtTkkgaW5zdHJ1Y3Rpb25zIG9mCisgICAgICAgICAgICAgICAgICAgICBuZXdlciBJbnRlbCBDUFVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIEFFUy1OSQorICAgICAgICAgICAgICAgICAgICAgaWYgYXZhaWxhYmxlLiAgVHJ5IHRoaXMgaWYgeW91IGdldCBwcm9ibGVtcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIgY29kZS4KKworICAgICAtLWRpc2FibGUtTy1mbGFnLW11bmdpbmcKKyAgICAgICAgICAgICAgICAgICAgIFNvbWUgY29kZSBpcyB0b28gY29tcGxleCBmb3Igc29tZSBjb21waWxlcnMgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgIGluIGhpZ2hlciBvcHRpbWl6YXRpb24gbW9kZXMsIHRodXMgdGhlIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uIGlzIG1vZGlmaWVkIHRvIHVzZSBhIGxvd2VyCisgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb24gbGV2ZWwuICBVc3VhbGx5IHRoaXMgd29ya3MgdmVyeSB3ZWxsCisgICAgICAgICAgICAgICAgICAgICBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhlc2UgcnVsZXMgYnJlYWsgdGhlCisgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgdG8gZGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBlaXRoZXIgZ29vZAorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTIGFyZSBnaXZlbiBvciB0aGUgY29tcGlsZXIgY2FuIGdyb2sgdGhlIGNvZGUuCisKKworCisKKyAgICBCdWlsZCBQcm9ibGVtcworICAgIC0tLS0tLS0tLS0tLS0tCisKKyAgICBXZSBjYW4ndCBjaGVjayBhbGwgYXNzZW1ibGVyIGZpbGVzLCBzbyBpZiB5b3UgaGF2ZSBwcm9ibGVtcworICAgIGFzc2VtYmxpbmcgdGhlbSAob3IgdGhlIHByb2dyYW0gY3Jhc2hlcykgdXNlIC0tZGlzYWJsZS1hc20gd2l0aAorICAgIC4vY29uZmlndXJlLiAgSWYgeW91IG9wdCB0byBkZWxldGUgaW5kaXZpZHVhbCByZXBsYWNlbWVudCBmaWxlcyBpbgorICAgIGhvcGVzIG9mIHVzaW5nIHRoZSByZW1haW5pbmcgb25lcywgYmUgYXdhcmUgdGhhdCB0aGUgY29uZmlndXJlCisgICAgc2NyaXB0cyBtYXkgY29uc2lkZXIgc2V2ZXJhbCBzdWJkaXJlY3RvcmllcyB0byBnZXQgYWxsIGF2YWlsYWJsZQorICAgIGFzc2VtYmxlciBmaWxlczsgYmUgc3VyZSB0byBkZWxldGUgdGhlIGNvcnJlY3Qgb25lcy4gIE5ldmVyIGRlbGV0ZQorICAgIHVkaXYtcXJubmQuUyBpbiBhbnkgQ1BVIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgbm8gQworICAgIHN1YnN0aXR1dGUgKGluIG1waS9nZW5lcmVpYykuICBEb24ndCBmb3JnZXQgdG8gZGVsZXRlCisgICAgImNvbmZpZy5jYWNoZSIgYW5kIHJ1biAiLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjayIuICBXZSBnb3QgYSBmZXcKKyAgICByZXBvcnRzIGFib3V0IHByb2JsZW1zIHVzaW5nIHZlcnNpb25zIG9mIGdjYyBlYXJsaWVyIHRoYW4gMi45NgorICAgIGFsb25nIHdpdGggYSBub24tR05VIGFzc2VtYmxlciAoYXMpLiAgSWYgdGhpcyBhcHBsaWVzIHRvIHlvdXIKKyAgICBwbGF0Zm9ybSwgeW91IGNhbiBlaXRoZXIgdXBncmFkZSBnY2MgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uLCBvcgorICAgIHVzZSB0aGUgR05VIGFzc2VtYmxlci4KKworICAgIFNvbWUgbWFrZSB0b29scyBhcmUgYnJva2VuIC0gdGhlIGJlc3Qgc29sdXRpb24gaXMgdG8gdXNlIEdOVSdzCisgICAgbWFrZS4gIFRyeSBnbWFrZSBvciBncmFiIHRoZSBzb3VyY2VzIGZyb20gYSBHTlUgYXJjaGl2ZSBhbmQKKyAgICBpbnN0YWxsIHRoZW0uCisKKyAgICBTcGVjaWZpYyBwcm9ibGVtcyBvbiBzb21lIG1hY2hpbmVzOgorCisgICAgICAqIElCTSBSUy82MDAwIHJ1bm5pbmcgQUlYCisKKwlEdWUgdG8gYSBjaGFuZ2UgaW4gZ2NjIChzaW5jZSB2ZXJzaW9uIDIuOCkgdGhlIE1QSSBzdHVmZiBtYXkKKwlub3QgYnVpbGQuIEluIHRoaXMgY2FzZSB0cnkgdG8gcnVuIGNvbmZpZ3VyZSB1c2luZzoKKwkgICAgQ0ZMQUdTPSItZyAtTzIgLW1jcHU9cG93ZXJwYyIgLi9jb25maWd1cmUKKworICAgICAgKiBTVlI0LjIgKEVTSVggVjQuMiBjYykKKworICAgICAgICBEdWUgdG8gcHJvYmxlbXMgd2l0aCB0aGUgRVNJWCBhcygxKSwgeW91IHByb2JhYmx5IHdhbnQgdG8gZG86CisgICAgICAgICAgICBDRkxBR1M9Ii1PIC1LIHBlbnRpdW0iIC4vY29uZmlndXJlIC0tZGlzYWJsZS1hc20KKworICAgICAgKiBTdW5PUyA0LjEuNAorCisgICAgICAgICAuL2NvbmZpZ3VyZSBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9eWVzCisKKyAgICAgICogU3BhcmM2NCBDUFVzCisKKyAgICAgICAgV2UgaGF2ZSByZXBvcnRzIGFib3V0IGZhaWx1cmVzIGluIHRoZSBBRVMgbW9kdWxlIHdoZW4KKyAgICAgICAgY29tcGlsaW5nIHVzaW5nIGdjYyAoZS5nLiB2ZXJzaW9uIDQuMS4yKSBhbmQgdGhlIG9wdGlvbiAtTzM7CisgICAgICAgIHVzaW5nIC1PMiBzb2x2ZXMgdGhlIHByb2JsZW0uCisKKworICAgIExpY2Vuc2UKKyAgICAtLS0tLS0tCisKKyAgICBUaGUgbGlicmFyeSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKyAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGZvciB0aGUKKyAgICBhY3R1YWwgdGVybXMuICBUaGUgaGVscGVyIHByb2dyYW1zIChlLmcuIGdjcnlwdHJuZCBhbmQgZ2V0cmFuZG9tKQorICAgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRpb24gYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKTsgc2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIHRoZQorICAgIGFjdHVhbCB0ZXJtcy4gIFRoZSBmaWxlIExJQ0VOU0VTIGhhcyBub3RpY2VzIGFib3V0IGNvbnRyaWJ1dGlvbnMKKyAgICB0aGF0IHJlcXVpcmUgdGhlc2UgYWRkaXRpb25hbCBub3RpY2VzIGFyZSBkaXN0cmlidXRlZC4KKworICAgIFRoaXMgbGlicmFyeSB1c2VkIHRvIGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgR1BMIC0gdGhpcyB3YXMgY2hhbmdlZAorICAgIHdpdGggdmVyc2lvbiAxLjEuNyB3aXRoIHRoZSByYXRpb25hbGUgdGhhdCB0aGVyZSBhcmUgbm93IG1hbnkgZnJlZQorICAgIGNyeXB0byBsaWJyYXJpZXMgYXZhaWxhYmxlIGFuZCBtYW55IG9mIHRoZW0gY29tZSB3aXRoIGNhcGFiaWxpdGllcworICAgIHNpbWlsYXIgdG8gTGliY3J5cHQuICBXZSBkZWNpZGVkIHRoYXQgdG8gZm9zdGVyIHRoZSB1c2Ugb2YKKyAgICBjcnlwdG9ncmFwaHkgaW4gRnJlZSBTb2Z0d2FyZSBhbiBMR1BMZWQgbGlicmFyeSB3b3VsZCBtYWtlIG1vcmUKKyAgICBzZW5zZSBiZWNhdXNlIGl0IGF2b2lkcyBwcm9ibGVtcyBkdWUgdG8gbGljZW5zZSBpbmNvbXBhdGliaWxpdGllcworICAgIGJldHdlZW4gc29tZSBGcmVlIFNvZnR3YXJlIGxpY2Vuc2VzIGFuZCB0aGUgR1BMLgorCisgICAgUGxlYXNlIG5vdGUgdGhhdCBpbiBtYW55IGNhc2VzIGl0IGlzIGJldHRlciBmb3IgYSBsaWJyYXJ5IHRvIGJlCisgICAgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCwgc28gdGhhdCBpdCBwcm92aWRlcyBhbiBhZHZhbnRhZ2UgZm9yIGZyZWUKKyAgICBzb2Z0d2FyZSBwcm9qZWN0cy4gIFRoZSBMZXNzZXIgR1BMIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgZG9lcworICAgIGxlc3MgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB0aGUgdXNlcnMgb2YgdGhlIGNvZGUgdGhhdCBpdAorICAgIGNvdmVycy4gIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbCBmb3IKKyAgICBtb3JlIGV4cGxhbmF0aW9uLgorCisKKyAgICBDb250YWN0CisgICAgLS0tLS0tLQorCisgICAgU2VlIHRoZSBmaWxlIEFVVEhPUlMuCisKKyAgICBDb21tZXJjaWFsIGdyYWRlIHN1cHBvcnQgZm9yIExpYmdjcnlwdCBpcyBhdmFpbGFibGU7IHBsZWFzZSBzZWUKKyAgICBodHRwOi8vd3d3LmdudXBnLm9yZy9zZXJ2aWNlLmh0bWwgLgorCisgICAgQ29tbWVyY2lhbCBncmFkZSBzdXBwb3J0IGZvciBMaWJnY3J5cHQgaXMgYXZhaWxhYmxlOyBmb3IgYSBsaXN0aW5nCisgICAgb2Ygb2ZmZXJzIHNlZSBodHRwOi8vd3d3LmdudXBnLm9yZy9zZXJ2aWNlLmh0bWwgLiAgVGhlIGRyaXZpbmcKKyAgICBmb3JjZSBiZWhpbmQgdGhlIGRldmVsb3BtZW50IG9mIExpYmdjcnlwdCBpcyB0aGUgY29tcGFueSBvZiBpdHMKKyAgICBwcmluY2lwYWwgYXV0aG9yLCBXZXJuZXIgS29jaC4gIE1haW50ZW5hbmNlIGFuZCBpbXByb3ZlbWVudCBvZgorICAgIExpYmdjcnlwdCB0YWtlcyB1cCBhIGxvdCByZXNvdXJjZXMuICBUbyBhbGxvdyBoaW0gdG8gY29udGludWUgaGlzCisgICAgd29yaywgaGUgYXNrcyB0byBlaXRoZXIgcHVyY2hhc2UgYSBzdXBwb3J0IGNvbnRyYWN0LCBlbmdhZ2UgdGhlbQorICAgIGZvciBjdXN0b20gZW5oYW5jZW1lbnRzLCBvciB0byBkb25hdGUgbW9uZXkuICBTZWUgaHR0cDovL2cxMGNvZGUuY29tIC4KKworCisgIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3JzIGdpdmVzCisgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4gRm9yIGNvbmRpdGlvbnMKKyAgb2YgdGhlIHdob2xlIHBhY2thZ2UsIHBsZWFzZSBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIFRoaXMgZmlsZSBpcworICBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL1JFQURNRS5HSVQgYi9SRUFETUUuR0lUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMmM2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUuR0lUCkBAIC0wLDAgKzEsNDkgQEAKK0lmIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSBHSVQsIHJ1biB0aGUgc2NyaXB0CisKKy4vYXV0b2dlbi5zaAorCitmaXJzdCwgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgbWFpbnRhaW5lciB0b29scworYXJlIGluc3RhbGxlZCBhbmQgdG8gYnVpbGQgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGZpbGVzLiAgSWYgeW91CitoYXZlIGp1c3QgY2hlY2tlZCBvdXQgZnJvbSBHSVQsIHlvdSBzaG91bGQgYWRkIHRoZSBvcHRpb24gIi0tZm9yY2UiIHRvCithdXRvZ2VuLnNoIHNvIHRoYXQgbWV0YSBkYXRhIGlzIG5vdGljZWQgYnkgYXV0b200dGUuY2FjaGUuICBUaGVuIHJ1bgorCisuL2NvbmZpZ3VyZSAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUKKworZm9sbG93ZWQgYnkgdGhlIHVzdWFsIG1ha2UuCisKK0lmIGF1dG9nZW4uc2ggY29tcGxhaW5zIGFib3V0IGluc3VmZmljaWVudCB2ZXJzaW9ucyBvZiB0aGUgcmVxdWlyZWQKK3Rvb2xzLCBvciB0aGUgdG9vbHMgYXJlIG5vdCBpbnN0YWxsZWQsIHlvdSBtYXkgdXNlIGVudmlyb25tZW50Cit2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9vbCBuYW1lczoKKworIEFVVE9NQUtFX1NVRkZJWCAgaXMgdXNlZCBhcyBhIHN1ZmZpeCBmb3IgYWxsIHRvb2xzIGZyb20gdGhlIGF1dG9tYWtlCisgICAgICAgICAgICAgICAgICBwYWNrYWdlLiAgRm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgIEFVVE9NQUtFX1NVRkZJWD0iLTEuNyIgLi9hdXRvZ2VuLnNoCisgICAgICAgICAgICAgICAgICB1c2VzICJhdXRvbWFrZS0xLjciIGFuZCAiYWNsb2NhbC0xLjcuCisgQVVUT01BS0VfUFJFRklYICBpcyB1c2VkIGFzIGEgcHJlZml4IGZvciBhbGwgdG9vbHMgZnJvbSB0aGUgYXV0b21ha2UKKyAgICAgICAgICAgICAgICAgIHBhZ2UgYW5kIG1heSBiZSBjb21iaW5lZCB3aXRoIEFVVE9NQUtFX1NVRkZJWC4gZS5nLjoKKyAgICAgICAgICAgICAgICAgICAgQVVUT01BS0VfUFJFRklYPS91c3IvZm9vL2JpbiAuL2F1dG9nZW4uc2gKKyAgICAgICAgICAgICAgICAgIHVzZXMgImF1dG9tYWtlIiBhbmQgImFjbG9jYWwiIGluIHRoZSAvdXNyL2Zvby9iaW4KKyAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyBBVVRPQ09ORl9TVUZGSVggIGlzIHVzZWQgYXMgYSBzdWZmaXggZm9yIGFsbCB0b29scyBmcm9tIHRoZSBhdXRvbWFrZQorICAgICAgICAgICAgICAgICAgcGFja2FnZQorIEFVVE9DT05GX1BSRUZJWCAgaXMgdXNlZCBhcyBhIHByZWZpeCBmb3IgYWxsIHRvb2xzIGZyb20gdGhlIGF1dG9tYWtlCisgICAgICAgICAgICAgICAgICBwYWNrYWdlCisgR0VUVEVYVF9TVUZGSVggICBpcyB1c2VkIGFzIGEgc3VmZml4IGZvciBhbGwgdG9vbHMgZnJvbSB0aGUgZ2V0dGV4dAorICAgICAgICAgICAgICAgICAgcGFja2FnZQorIEdFVFRFWFRfUFJFRklYICAgaXMgdXNlZCBhcyBhIHByZWZpeCBmb3IgYWxsIHRvb2xzIGZyb20gdGhlIGdldHRleHQKKyAgICAgICAgICAgICAgICAgIHBhY2thZ2UKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWUgQVVUT01BS0UsIEFVVE9DT05GLAorQUNMT0NBTCwgQVVUT0hFQURFUiwgR0VUVEVYVCBhbmQgTVNHTUVSR0UgdG8gZGlyZWN0bHkgc3BlY2lmeSB0aGUgbmFtZQorb2YgdGhlIHByb2dyYW1zIHRvIHJ1bi4gIEl0IGlzIGhvd2V2ZXIgYmV0dGVyIHRvIHVzZSB0aGUgc3VmZml4IGFuZAorcHJlZml4IGZvcm1zIGFzIGRlc2NyaWJlZCBhYm92ZSBiZWNhdXNlIHRoYXQgZG9lcyBub3QgcmVxdWlyZQora25vd2xlZGdlIGFib3V0IHRoZSBhY3R1YWwgdG9vbHMgdXNlZCBieSBhdXRvZ2VuLnNoLgorCisKK1BsZWFzZSBkb24ndCB1c2UgYXV0b3BvaW50LCBsaWJ0b29saXplIG9yIGF1dG9yZWNvbmYgdW5sZXNzIHlvdSBhcmUKK3RoZSBjdXJyZW50IG1haW50YWluZXIgYW5kIHdhbnQgdG8gdXBkYXRlIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uCitmaWxlcy4gIEFsbCB0aG9zZSBmaWxlcyBzaG91bGQgYmUgaW4gR0lUIGFuZCBvbmx5IHVwZGF0ZWQgbWFudWFsbHkKK2lmIHRoZSBtYWludGFpbmVyIGRlY2lkZXMgdGhhdCBuZXdlciB2ZXJzaW9ucyBhcmUgcmVxdWlyZWQuICBUaGUKK21haW50YWluZXIgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVkIHZlcnNpb24gb2YgYXV0b21ha2UKK2V0IGFsLiBhcmUgcHJvcGVybHkgaW5kaWNhdGVkIGF0IHRoZSB0b3Agb2YgY29uZmlndXJlLmFjIGFuZCB0YWtlIGNhcmUKK3RvIGNvcHkgdGhlIGZpbGVzIGFuZCBub3QgbWVyZWx5IHVzZSBzeW1saW5rcy4KZGlmZiAtLWdpdCBhL1RIQU5LUyBiL1RIQU5LUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ0ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVEhBTktTCkBAIC0wLDAgKzEsMTY4IEBACitMaWJnY3J5cHQgaXMgYmFzZWQgb24gdGhlIEdudVBHIGNvZGUuICBIZXJlIGlzIGEgbGlzdCBvZiBwZW9wbGUsIHdobworaGVscGVkIGluIEdudVBHIGFuZCBMaWJnY3J5cHQgZGV2ZWxvcG1lbnQuICBQbGVhc2UgaGVscCB1cyB0byBrZWVwIGl0Citjb21wbGV0ZSBhbmQgZnJlZSBvZiBlcnJvcnMuCisKK0FsYmVydCBDaGluICAgICAgICAgICAgICAgIGNoaW5hIGF0IHRoZXdyaXR0ZW53b3JkIGNvbQorQWxsYW4gQ2xhcmsJCSAgIGFsbGFuY0BzY28uY29tCitBbmFuZCBLdW1yaWEJCSAgIHdpbGRmaXJlQHByb2dzb2MudXRzLmVkdS5hdQorQW5kcmVhcyBNZXR6bGVyICAgICAgICAgICAgYW1ldHpsZXIgYXQgZG93bmhpbGwuYXQuZXUub3JnCitBcmllbCBUIEdsZW5uCQkgICBhcmllbEBjb2x1bWJpYS5lZHUKK0F1cmVsaWVuIEphcm5vICAgICAgICAgICAgIGF1cmVsMzIgYXQgZGViaWFuLm9yZworQmVuIEh1dGNoaW5ncyAgICAgICAgICAgICAgYmVuIGRlY2FkZW50IG9yZyB1aworQm9kbyBNb2VsbGVyCQkgICBCb2RvX01vZWxsZXJAcHVibGljLnVuaS1oYW1idXJnLmRlCitCcmVubm8gZGUgV2ludGVyCSAgIGJyZW5ub0BkZXdpbnRlci5jb20KK0JyaWFuIE1vb3JlCQkgICBiZW1AY21jLm5ldAorQnJpYW4gV2FybmVyCQkgICB3YXJuZXJAbG90aGFyLmNvbQorQnJpZXVjIEpldW5ob21tZQkgICBiYnBAdmlhLmVjcC5mcgorQnJ5YW4gRnVsbGVydG9uIAkgICBicnlhbmZAc2FtdXJhaS5jb20KK0Nhc2tleSBMLiBEaWNrc29uCSAgIGNhc2tleUB0ZWNobm9jYWdlLmNvbQorQ2VlcyB2YW4gZGUgR3JpZW5kCSAgIGNlZXMtbGlzdEBncmllbmQueHM0YWxsLm5sCitDaGFybGVzIExldmVydAkJICAgY2hhcmxlc0Bjb21tLnBvbHltdGwuY2EKK0NocmlzdGlhbiBCaWVyZSAgICAgICAgICAgIGNocmlzdGlhbmJpZXJlQGdteC5kZQorQ2hyaXN0aWFuIEdyb3Rob2ZmICAgICAgICAgY2hyaXN0aWFuIGF0IGdyb3Rob2ZmIG9yZworQ2hyaXN0aWFuIHZvbiBSb3F1ZXMJICAgcm9xdWVzQHBvbmQuc3ViLm9yZworQ2hyaXN0b3BoZXIgT2xpdmVyCSAgIG9saXZlckBmcml0ei50cmF2ZXJzZS5uZXQKK0NocmlzdGlhbiBSZWNrdGVud2FsZAkgICBjaHJpc0BjaXRlY3MuZGUKK0RhaWtpIFVlbm8gICAgICAgICAgICAgICAgIHVlbm8gYXQgdW5peHVzZXIgb3JnCitEYW4gRmFuZHJpY2ggICAgICAgICAgICAgICBkYW4gYXQgY29uZWhhcnZlc3RlcnMgY29tCitEYW5pZWwgRWlzZW5idWQgCSAgIGVpc2VuYnVkQGNzLnN3YXJ0aG1vcmUuZWR1CitEYW5pZWwgS29lbmluZwkJICAgZGFuQG1haWwuaXNpcy5kZQorRGF2aWQgRWxsZW1lbnQJCSAgIGVsbGVtZW50QHNkZC5ocC5jb20KK0RldGxlZiBMYW5uZXJ0CQkgICBsYW5uZXJ0QGxhbm5lcnQucnoudW5pLWR1ZXNzZWxkb3JmLmRlCitEaXJrIExhdHRlcm1hbm4gCSAgIGRsYXR0QHQtb25saW5lLmRlCitEaXJrIFN0b2Vja2VyICAgICAgICAgICAgICBnY3J5cHRAZHN0b2Vja2VyLmRlCitFZCBCb3JhYXMJCSAgIGVjeGpvQGVzcGVyYW50by5vcmcKK0VsaWUgRGUgQnJhdXdlciAgICAgICAgICAgIGVsaWVAZGUtYnJhdXdlci5iZQorRW56byBNaWNoZWxhbmdlbGkJICAgZW1ATWFpbEFuZE5ld3MuY29tCitFcm5zdCBNb2xpdG9yCQkgICBlcm5zdC5tb2xpdG9yQHVuaS1ib25uLmRlCitGYWJpYW4gS2VpbCAgICAgICAgICAgICAgICBmayBhdCBmYWJpYW5rZWlsIGRlCitGYWJpbyBDb2F0dGkJCSAgIGNvdmFAZmVsaXgudW5pZmUuaXQKK0ZlbGl4IHZvbiBMZWl0bmVyCSAgIGxlaXRuZXJAYW1kaXYuZGUKK0ZyYW5rIEhlY2tlbmJhY2gJICAgaGVja2VuYkBtaS51bmktZXJsYW5nZW4uZGUKK0ZyYW5rIFN0YWphbm8JCSAgIGZyYW5rLnN0YWphbm9AY2wuY2FtLmFjLnVrCitHYWJyaWVsZSBNb250aSAgICAgICAgICAgICBwc2ljdXM3OCBnbWFpbCBjb20KK0dhw6tsIFF1w6lyaQkJICAgZ3F1ZXJpQG1haWwuZG90Y29tLmZyCitHcmVnb3IgUmllcGwgICAgICAgICAgICAgICBzZXRvLWt1bkBmcmVlc3VyZi5jaAorR2VybGluZGUgS2xhZXMgICAgICAgICAgICAgZ2tAdTY0LmRlCitHcmVnIExvdWlzCQkgICBnbG91aXNAZHluYW1pY3JvLm9uLmNhCitHcmVnIFRyb3hlbAkJICAgZ2R0QGlyLmJibi5jb20KK0dyZWdvcnkgU3RldWNrCQkgICBzdGV1Y2tAaW5hbWUuY29tCitHZW9mZiBLZWF0aW5nCQkgICBnZW9mZmtAb3plbWFpbC5jb20uYXUKK0hhcmFsZCBEZW5rZXIJCSAgIGhhcnJ5QGhhbC53ZXN0ZmFsZW4uZGUKK0hlbmRyaWsgQnVzY2hrYW1wCSAgIGJ1c2Noa2FtcEByaGV1bWFuZXQub3JnCitIb2xnZXIgU2NodXJpZwkJICAgaG9sZ2VyQGQub20ub3JnCitIdWdoIERhbmllbAkJICAgaHVnaEB0b2FkLmNvbQorSWFuIE1jS2VsbGFyCQkgICBpbWNrZWxsYXJAaGFydmVzdHJvYWQuY29tLmF1CitJYW4gUGV0ZXJzICAgICAgICAgICAgICAgICBpdHBAeGltaWFuLmNvbQorSmFudXN6IEEuIFVyYmFub3dpY3oJICAgYWxleEBib2ZoLnRvcnVuLnBsCitKYW1lcyBUcm91cAkJICAgamFtZXNAbm9jcmV3Lm9yZworSmVhbi1sb3VwIEdhaWxseQkgICBnemlwQHByZXAuYWkubWl0LmVkdQorSmVmZiBKb2huc29uICAgICAgICAgICAgICAgamJqQHJlZGhhdC5jb20KK0plbnMgQmFjaGVtCQkgICBiYWNoZW1AcnJ6LnVuaS1rb2Vsbi5kZQorSiBIb3JhY2lvIE1HCQkgICBob21lZ2FAY2liZXJpYS5lcworSm9hY2hpbSBCYWNrZXMJCSAgIGJhY2tlc0ByaHJrLnVuaS1rbC5kZQorSm9yZGkgTWFsbGFjaCAgICAgICAgICAgICAgam9yZGlAc2luZG9taW5pby5uZXQKK0pvaG4gQS4gTWFydGluCQkgICBqYW1AamFtdXguY29tCitKb2hubnkgVGV2ZcOfZW4JCSAgIGoudGV2ZXNzZW5AZ214LmRlCitKw7ZyZyBTY2hpbGxpbmcJCSAgIHNjaGlsbGluZ0Bmb2t1cy5nbWQuZGUKK0p1biBLdXJpeWFtYQkJICAga3VyaXlhbWFAc2t5LnJpbS5vci5qcAorS2FybCBGb2dlbAkJICAga2ZvZ2VsQGd1YW5hYmFuYS5vbnNob3JlLmNvbQorS2Fyc3RlbiBUaHlnZXNlbgkgICBrYXJ0aHlAa29tLmF1Yy5kaworS2F0c3VoaXJvIEtvbmRvdQkgICBrb25kb3VAbmVjLmNvLmpwCitLYXp1IFlhbWFtb3RvCQkgICBrYXp1QGlpamxhYi5uZXQKK0xhcnMgS2VsbG9nZy1TdGVkbWFuCSAgIGxhcnNAYnUuZWR1CitMZWUgRmlzaGVyICAgICAgICAgICAgICAgICBibGliYmV0IGF0IGdtYWlsIGRvdCBjb20KK01hcmNvIGQnSXRyaSAgICAgICAgICAgICAgIG1kQGxpbnV4Lml0CitNYXJrIEFkbGVyCQkgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CitNYXJrIEVsYnJlY2h0CQkgICBzbm93YmFsbDNAYmlnZm9vdC5jb20KK01hcmt1cyBGcmllZGwJCSAgIE1hcmt1cy5GcmllZGxAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGUKK01hdHRoaWFzIFVybGljaHMgICAgICAgICAgIHNtdXJmQHNtdXJmLm5vcmlzLmRlCitNYXJ0aW4gS2FobGVydAkJICAgbWFydGluLmthaGxlcnRAcHJvdmkuZGUKK01hcnRpbiBIYW1pbHRvbgorTWFydGluIFNjaHVsdGUJCSAgIHNjaHVsdGVAdGhwLnVuaS1rb2Vsbi5kZQorTWF0dGhldyBTa2FsYQkJICAgbXNrYWxhQGFuc3V6LnNvb2tlLmJjLmNhCitNYXggS2VsbGVybWFubiAgICAgICAgICAgICBtYXhAZHVlbXBlbC5vcmcKK01heCBWYWxpYW5za2l5CQkgICBtYXhjb21AbWF4Y29tLm1sLm9yZworTWljaGFlbCBGaXNjaGVyIHYuIE1vbGxhcmQgbWZ2bUBnbXguZGUKK01pY2hhZWwgUm90aAkJICAgbXJvdGhAbmVzc2llLmRlCitNaWNoYWVsIFNvYm9sZXYgCSAgIG1zc0BkZXNwYWlyLnRyYW5zYXMuY29tCitNaWNoZWxlIEJhbGRlc3NhcmkJICAgbWljaGVsZUBwdXBhenpvLm9yZworTW9kZXN0YXMgVmFpbml1cwkgICBnZXJvbWFuYXNAbWFpbGFzLmNvbQorTmVpbCBEdW5iYXIgICAgICAgICAgICAgICAgbmVpbC5kdW5iYXIgYXQgcG9ib3guY29tCitOZWlsIFNwcmluZwkJICAgbnNwcmluZ0Bjcy53YXNoaW5ndG9uLmVkdQorTmV3dG9uIEhhbW1ldCAgICAgICAgICAgICAgbmV3dG9uQGhhbW1ldC5uZXQKK05pY29sYXMgR3JhbmVyCQkgICBOaWNvbGFzLkdyYW5lckBjcmkudS1wc3VkLmZyCitOSUlCRSBZdXRha2EJCSAgIGduaWliZUBjaHJvb3Qub3JnCitOaWtsYXMgSGVybmFldXMKK05pa29sYXkgU3R1cm0JCSAgIHN0dXJtQHNlYy5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZQorTmlrb3MgTWF2cm95YW5vcG91bG9zICAgICAgbm1hdkBoZWxsdWcuZ3IKK05pbXJvZCBaaW1lcm1hbiAJICAgemltZXJtYW5AZm9yZnJlZS5hdAorTiBKIERveWUJCSAgIG5pY0BuaXNzLmFjLnVrCitPbGl2ZXIgSGFha2VydAkJICAgaGFha2VydEBoc3AuZGUKK09za2FyaSBKw6TDpHNrZWzDpGluZW4JICAgZjMzMDAzYUBjYy5odXQuZmkKK1BhdWwgRC4gU21pdGgJCSAgIHBzbWl0aEBiYXluZXR3b3Jrcy5jb20KK1BoaWxpcHBlIExhbGliZXJ0ZQkgICBhcnNwaGxAb2VpbC5xYy5jYQorUGV0ZXIgR3V0bWFubgkJICAgcGd1dDAwMUBjcy5hdWNrbGFuZC5hYy5uegorUWluZ0xvbmcJCSAgIHFpbmdsb25nQGJvbGl6bS5paGVwLnN1CitSYWZhZWwgw4F2aWxhIGRlIEVzcMOtbmRvbGEgIHJhZmFlbC5lc3BpbmRvbGFAZ21haWwuY29tCitSYWZhw6tsIENhcnLDqSAgICAgICAgICAgICAgIGZ1bm1hbkB2aWRlb2xhbi5vcmcKK1JhbGYgRmFzc2VsICAgICAgICAgICAgICAgIHJhbGZAYWt1dGVjaC5kZQorUmFsZiBIaWxkZWJyYW5kdCAgICAgICAgICAgUmFsZi5IaWxkZWJyYW5kdEBpbm5vbWluYXRlLmNvbQorUmFsZiBTY2huZWlkZXIgICAgICAgICAgICAgcmFsZkB0YXBmZXJlLXNjaG5laWRlcmxlaW5zLmRlCitSYWxwaCBHaWxsZW4JCSAgIGdpbGxlbkB0aGVvY2hlbS51bmktZHVlc3NlbGRvcmYuZGUKK1JhbWkgTGVodGkgICAgICAgICAgICAgICAgIFJhbWkuTGVodGlAZmlubGFuZC5zdW4uY29tCitSYW5kb2xwaCBDaHVuZyAgICAgICAgICAgICB0YXVzcUBkZWJpYW4ub3JnCitSYW5keQkJCSAgIG1jY2xlbGxyQG9pdC5lZHUKK1JhdAkJCSAgIHJhdGlub3hAcGVvcnRoLmd3ZWVwLm5ldAorUmVpbmhhcmQgV29ic3QJCSAgIFIuV29ic3RAaWZ3LWRyZXNkZW4uZGUKK1LDqW1pIEd1eW9tYXJjaAkJICAgcmd1eW9tQG1haWwuZG90Y29tLmZyCitSZXViZW4gU3VtbmVyCQkgICByYXN1bW5lckB3aXNkb20ud2Vpem1hbm4uYWMuaWwKK1JpY2hhcmQgT3V0ZXJicmlkZ2UJICAgb3V0ZXJAaW50ZXJsb2cuY29tCitSb2RkeSBTdHJhY2hhbgkJICAgcm9kZHlAc2F0bGluay5jb20uYXUKK1JvbGFuZCBSb3NlbmZlbGQJICAgcm9sYW5kQHNwaW5uYWtlci5yaGVpbi5kZQorUm9zcyBHb2xkZXIJCSAgIHJvc3NpZ2VlQGJpZ2Zvb3QuY29tCitTZXJnZSBNdW5ob3ZlbgkJICAgbXVuaG92ZW5AbWVtYS51Y2wuYWMuYmUKK1NlcmdpIEJsYW5jaCBpIFRvcm7DqSAgICAgICBzZXJnaSBhdCBjYWxjdXJjbyBjYXQKK1NpbW9uIEpvc2Vmc3NvbiAgICAgICAgICAgIGphc0BleHR1bmRvLmNvbQorU0wgQmF1ciAJCSAgIHN0ZXZlQHhlbWFjcy5vcmcKK1N0ZXBoYW4gQXVzdGVybXVlaGxlICAgICAgIGF1QGhjc2QuZGUKK1N0ZXBoYW4gTcO8bGxlciAgICAgICAgICAgICBzbXVlbGxlciBhdCBhdHNlYyBjb20KK1N0ZXBoYW5lIENvcnRoZXN5ICAgICAgICAgIHN0ZXBoYW5lQHNlbnRlLmNoCitTdGVmYW4gS2Fycm1hbm4gCSAgIFMuS2Fycm1hbm5AZ214Lm5ldAorU3RlZmFuIEtlbGxlcgkJICAgZHJlc0Bjcy50dS1iZXJsaW4uZGUKK1N0ZWZhbiBLcsO8Z2VyICAgICAgICAgICAgICBzdGFkdGtpbmQyIGF0IGdteCBkZQorU3RlZmZlbiBVbGxyaWNoIAkgICBjY3JscGhyQHhlbnNlaS5jb20KK1N0ZWZmZW4gWmFobgkJICAgemFobkBiZXJsaW4uc25hZnUuZGUKK1N0ZXZlbiBCYWtrZXIJCSAgIHN0ZXZlbkBpY29lLmF0dC5jb20KK1N1c2FubmUgU2NodWx0eiAJICAgc2NodWx0ekBoc3AuZGUKK1N2ZW4gQmpvcm4KK1N6YWthdHMgSXN0dmFuICAgICAgICAgICAgIHN6YWtpLm1zQGdtYWlsLmNvbQorVGhpYWdvIEp1bmcgQmF1ZXJtYW5uCSAgIGp1bmdtYW5uQGN3Yi5tYXRyaXguY29tLmJyCitUaG9tYXMgUm9lc3NsZXIgCSAgIHJvZXNzbGVyQGd1dWcuZGUKK1RvbSBIb2xyb3lkICAgICAgICAgICAgICAgIHRvbWhAcG8uY3JsLmdvLmpwCitUb20gU3BpbmRsZXIJCSAgIGRvZ2Nvd0Bob21lLm1lcml0LmVkdQorVG9tIFplcnVjaGEJCSAgIHR6ZXJ1Y2hAY2VkZGVjLmNvbQorVG9tYXMgRmFzdGgJCSAgIHRvbWFzLmZhc3RoQHR3aW5zcG90Lm5ldAorVG9tbWkgS29tdWxhaW5lbiAgICAgICAgICAgVG9tbWkuS29tdWxhaW5lbkBpa2kuZmkKK1Rob21hcyBNaWtrZWxzZW4JICAgdGJtQGltYWdlLmRrCitVbGYgTcO2bGxlcgkJICAgM3Vtb2VsbGVAaW5mb3JtYXRpay51bmktaGFtYnVyZy5kZQorVW1iZXJ0byBTYWxzaQkJICAgc2Fsc2lAaWNvc2FlZHJvLml0CitVb3RpIFVycGFsYQorVXJrbyBMdXNhCQkgICB1bHVzYUBldXNrYWxuZXQubmV0CitWaWN0b3IgU3Rpbm5lciAgICAgICAgICAgICBoYXlwb0BpbmwuZnIKK1dhbHRlciBLb2NoCQkgICBrb2NoQHUzMi5kZQorV2VybmVyIEtvY2gJCSAgIHdrQGdudXBnLm9yZworV2ltIFZhbmRlcHV0dGUJCSAgIHdpbUBrZDg1LmNvbQorCQkJICAgbmJlY2tlckBobnMuY29tCisKKworIENvcHlyaWdodCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLAorICAgICAgICAgICAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL1RPRE8gYi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWRjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9UT0RPCkBAIC0wLDAgKzEsNTkgQEAKKyMgV2hhdCdzIGxlZnQgdG8gZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3JnIC0qLQorCisqIE5leHQgQVBJIGJyZWFrOgorKiogZ2NyeV9hY19pb190CisgIFJlbW92ZSB1c2Ugb2YgYW5vbnltb3VzIHVuaW9uLgorKiogZ2NyeV9hYworICBDb25zaWRlciB0byByZW1vdmUgaXQuCisKKyogdWRpdi1xcm5iZC5vIHNob3VsZCBnZXQgYnVpbGQgYXMgKi5sbyBbSFBVWF0KKworKiBBbGxvdyBvcGVyYXRpb24gdXNpbmcgUlNBIGtleXMgY29uc2lzdGluZyBvZiB0aGUgT3BlblNTTCBrZXlzLgorICBUaGlzIHJlcXVpcmVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBwYXJhbWV0ZXIgbmFtZXMgKHNheSkgVSB3aGljaAorICBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byBPcGVuU1NML1BLQ1MjMSBydWxlcy4KKworKiBsaW5rZXIgc2NyaXB0IHRlc3QKKyAgV3JpdGUgYW4gYXV0b2NvbmYgdGVzdCB0byBjaGVjayB3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgYQorICB2ZXJzaW9uIHNjcmlwdC4gCisKKyogQWRkIGF0dHJpYnV0ZXMgdG8gdGhlIE1QSSBmdW5jdGlvbnMuCisKKyogY2lwaGVyL3B1YmtleS5jIGFuZCBwdWJrZXkgaW1wbGVtZW50YWlvbnMuCisgIERvbid0IHJlbHkgb24gdGhlIHNlY3VyZSBtZW1vcnkgYmFzZWQgd2lwaW5nIGZ1bmN0aW9uIGJ1dCBhZGQgYW4KKyAgZXh0cmEgd2lwaW5nLgorICAKKyogVXNlIGJ1aWx0aW4gYml0IGZ1bmN0aW9ucyBvZiBnY2MgMy40CisKKyogQ29uc2lkZXIgdXNpbmcgYSBkYWVtb24gdG8gbWFpbnRhaW4gdGhlIHJhbmRvbSBwb29sCisgIFtQYXJ0bHkgZG9uZV0gVGhlIGRvd24gc2lkZSBvZiB0aGlzIGlzIHRoYXQgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlCisgIHJhbmRvbSBoYXMgaGFzIGFsd2F5cyBiZWVuIHN0b3JlZCBpbiAic2VjdXJlIG1lbW9yeSIuICBBbmQgd2UgcmVseQorICBvbiB0aGF0IHNuaWZmaW5nIG9mIFVuaXggZG9tYWluIHNvY2tldHMgaXMgbm90IHBvc3NpYmxlLiAgV2UgY2FuCisgIGltcGxlbWVudCB0aGlzIHNpbXBseSBieSBkZXRlY3RpbmcgYSBzcGVjaWFsIHByZWZpeGVkIHJhbmRvbSBzZWVkCisgIG5hbWUgYW5kIGRpdmVydCBpbiB0aGlzIGNhc2UgdG8gdGhlIGRhZW1vbi4gIFRoZXJlIGFyZSBzZXZlcmFsCisgIGJlbmVmaXRzIHdpdGggc3VjaCBhbiBhcHByb2FjaDogV2Uga2VlcCB0aGUgc3RhdGUgb2YgdGhlIFJORyBvdmVyCisgIGludm9jYXRpb25zIG9mIGxpYmdjcnlwdCBiYXNlZCBhcHBsaWNhdGlvbnMsIGRvbid0IG5lZWQgdGltZQorICBjb25zdW1pbmcgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBvb2wgYW5kIGluIGNhc2UgdGhlIGVudHJvcHkKKyAgY29sbGVjdHJvcyBuZWVkIHRvIHJ1biB0aGF0IGJ1bmNoIG9mIFVuaXggdXRpbGl0aWVzIHdlIGRvbid0IHdhc3RlCisgIHRoZWlyIHByZWNpb3VzIHJlc3VsdHMuCisKKyogZ2NyeXB0cm5kLmMKKyAgUmVxdWlyZXMgYSB0ZXN0IGZvciBwdGggW2RvbmVdIGFzIHdlbGwgYXMgc29tZSBvdGhlciB0ZXN0cy4KKworKiBzZWNtZW0uYworICBDaGVjayB3aGV0aGVyIHRoZSBtZW1vcnkgYmxvY2sgaXMgdmFsaWQgYmVmb3JlIHJlbGVhc2luZyBpdCBhbmQKKyAgcHJpbnQgYSBkaWFnbm9zaWMsIGxpa2UgZ2xpYmMgZG9lcy4KKworKiB0aHJlYWRzCisqKiBXZSBuZWVkIHRvIGRvY3VtZW50IGZvcmsgcHJvYmxlbXMKKyAgSW4gcGFydGljdWxhciB0aGF0IHJlaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgaW4gcmFuZG9tLmMKKyAgSG93ZXZlciwgdGhlcmUgaXMgbm8gY29kZSB5ZXQgdG8gZG8gaXQuCisKKyogVGVzdHMKKyAgV2UgbmVlZCBhIGxvdCBtb3JlIHRlc3RzLiAgTGV0cyBrZWVwIGFuIGV2ZXIgZ3Jvd2luZyBsaXN0IGhlcmUuCisqKiBXcml0ZSB0ZXN0cyBmb3IgdGhlIHByb2dyZXNzIGZ1bmN0aW9uCisqKiBtcGl0ZXN0cyBkb2VzIG5vIHJlYWwgY2hlY2tzIHlldC4KKyoqIHB0aHJlYWRzCisgIFRvIGNhdGNoIHNpbXBsZSBlcnJvcnMgbGlrZSB0aGUgb25lIGZpeGVkIG9uIDIwMDctMDMtMTYuCisqKiBDKysgdGVzdHMKKyAgV2UgaGF2ZSBzb21lIGNvZGUgdG8gYWxsb3cgdXNpbmcgbGliZ2NyeXB0IGZyb20gQysrLCBzbyB3ZSBhbHNvCisgIHNob3VsZCBoYXZlIGEgdGVzdCBjYXNlLgpkaWZmIC0tZ2l0IGEvVkVSU0lPTiBiL1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZDYyOQotLS0gL2Rldi9udWxsCisrKyBiL1ZFUlNJT04KQEAgLTAsMCArMSBAQAorMS42LjEKZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGIyZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzkzIEBACitkbmwgbWFjcm9zIHRvIGNvbmZpZ3VyZSBMaWJnY3J5cHQKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCitkbmwgICAgICAgICAgICAgICAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICitkbmwKK2RubCBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCitkbmwKK2RubCBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitkbmwgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorZG5sIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitkbmwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK2RubCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitkbmwgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKworZG5sIEdDUllfTVNHX1NIT1coUFJFRklYLFNUUklORykKK2RubCBQcmludCBhIG1lc3NhZ2Ugd2l0aCBhIHByZWZpeC4KK2RubAorZGVmaW5lKFtHQ1JZX01TR19TSE9XXSwKKyAgWworICAgICBlY2hvICIgICAgICAgICQxICQyIiAxPiZBU19NRVNTQUdFX0ZEKFtdKQorICBdKQorCitkbmwgR0NSWV9NU0dfV1JBUChQUkVGSVgsIEFMR09MSVNUKQorZG5sIFByaW50IGEgbmljZWx5IGZvcm1hdHRlZCBsaXN0IG9mIGFsZ29yaXRobXMKK2RubCB3aXRoIGFuIGFwcHJvcmlhdGUgbGluZSB3cmFwLgorZG5sCitkZWZpbmUoW0dDUllfTVNHX1dSQVBdLAorICBbCisgICAgdG1wPSIgICAgICAgICQxIgorICAgIHRtcGk9ImFiYyIKKyAgICBpZiB0ZXN0ICIkeyN0bXBpfSIgLW5lIDMgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgZG5sIFdpdGhvdXQgYSBQT1NJWCBzaGVsbCwgd2UgZG9uJ3QgYm90dGVyIHRvIHdyYXAgaXQKKyAgICAgIGVjaG8gIiR0bXAgJDIiIDE+JkFTX01FU1NBR0VfRkQoW10pCisgICAgZWxzZQorICAgICAgdG1waT1gZWNobyAiJHRtcCJ8IHNlZCAncy8uLyAvZydgCisgICAgICBlY2hvICQyIEVPRiB8IHRyICcgJyAnXG4nIHwgXAorICAgICAgICB3aGlsZSByZWFkIHdvcmQ7IGRvCisgICAgICAgICAgaWYgdGVzdCAiJHsjdG1wfSIgLWd0IDcwIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJHRtcCIgMT4mQVNfTUVTU0FHRV9GRChbXSkKKyAgICAgICAgICAgIHRtcD0iJHRtcGkiCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICIkd29yZCIgPSAiRU9GIiA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAiIDE+JkFTX01FU1NBR0VfRkQoW10pCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdG1wPSIkdG1wICR3b3JkIgorICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorICBdKQorCisKK2RubCBHTlVQR19DSEVDS19UWVBFREVGKFRZUEUsIEhBVkVfTkFNRSkKK2RubCBDaGVjayB3aGV0aGVyIGEgdHlwZWRlZiBleGlzdHMgYW5kIGNyZWF0ZSBhICNkZWZpbmUgJDIgaWYgaXQgZXhpc3RzCitkbmwKK0FDX0RFRlVOKFtHTlVQR19DSEVDS19UWVBFREVGXSwKKyAgWyBBQ19NU0dfQ0hFQ0tJTkcoZm9yICQxIHR5cGVkZWYpCisgICAgQUNfQ0FDSEVfVkFMKGdudXBnX2N2X3R5cGVkZWZfJDEsCisgICAgW0FDX1RSWV9DT01QSUxFKFsjZGVmaW5lIF9HTlVfU09VUkNFIDEKKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sIFsKKyAgICAjdW5kZWYgJDEKKyAgICBpbnQgYSA9IHNpemVvZigkMSk7CisgICAgXSwgZ251cGdfY3ZfdHlwZWRlZl8kMT15ZXMsIGdudXBnX2N2X3R5cGVkZWZfJDE9bm8gKV0pCisgICAgQUNfTVNHX1JFU1VMVCgkZ251cGdfY3ZfdHlwZWRlZl8kMSkKKyAgICBpZiB0ZXN0ICIkZ251cGdfY3ZfdHlwZWRlZl8kMSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKCQyLDEsW0RlZmluZWQgaWYgYSBgXSQxWycgaXMgdHlwZWRlZidkXSkKKyAgICBmaQorICBdKQorCisKK2RubCBHTlVQR19DSEVDS19HTlVNQUtFCitkbmwKK0FDX0RFRlVOKFtHTlVQR19DSEVDS19HTlVNQUtFXSwKKyAgWworICAgIGlmICR7TUFLRS1tYWtlfSAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwICdeR05VICcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIDoKKyAgICBlbHNlCisgICAgICAgIEFDX01TR19XQVJOKFtbCisqKioKKyoqKiBJdCBzZWVtcyB0aGF0IHlvdSBhcmUgbm90IHVzaW5nIEdOVSBtYWtlLiAgU29tZSBtYWtlIHRvb2xzIGhhdmUgc2VyaW91cworKioqIGZsYXdzIGFuZCB5b3UgbWF5IG5vdCBiZSBhYmxlIHRvIGJ1aWxkIHRoaXMgc29mdHdhcmUgYXQgYWxsLiBCZWZvcmUgeW91CisqKiogY29tcGxhaW4sIHBsZWFzZSB0cnkgR05VIG1ha2U6ICBHTlUgbWFrZSBpcyBlYXN5IHRvIGJ1aWxkIGFuZCBhdmFpbGFibGUKKyoqKiBhdCBhbGwgR05VIGFyY2hpdmVzLiAgSXQgaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIGZ0cC5nbnUub3JnOi9nbnUvbWFrZS4KKyoqKl1dKQorICAgIGZpCisgIF0pCisKKworIworIyBHTlVQR19TWVNfU1lNQk9MX1VOREVSU0NPUkUKKyMgRG9lcyB0aGUgY29tcGlsZXIgcHJlZml4IGdsb2JhbCBzeW1ib2xzIHdpdGggYW4gdW5kZXJzY29yZT8KKyMKKyMgVGFrZW4gZnJvbSBHbnVQRyAxLjIgYW5kIG1vZGlmaWVkIHRvIHVzZSB0aGUgbGlidG9vbCBtYWNyb3MuCitBQ19ERUZVTihbR05VUEdfU1lTX1NZTUJPTF9VTkRFUlNDT1JFXSwKK1t0bXBfZG9fY2hlY2s9Im5vIgorY2FzZSAiJHtob3N0fSIgaW4KKyAgICAqLW1pbmd3MzJtc3ZjKikKKyAgICAgICAgYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlPXllcworICAgICAgICA7OworICAgIGkzODYtZW14LW9zMiB8IGlbMzQ1Nl04Ni1wYy1vczIqZW14IHwgaTM4Ni1wYy1tc2Rvc2RqZ3BwKQorICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9eWVzCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHggOyB0aGVuCisgICAgICAgICAgIGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT15ZXMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgIHRtcF9kb19jaGVjaz0ieWVzIgorICAgICAgZmkKKyAgICAgICA7OworZXNhYworaWYgdGVzdCAiJHRtcF9kb19jaGVjayIgPSAieWVzIjsgdGhlbgorICBBQ19SRVFVSVJFKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdKQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzXSkKKyAgQUNfQ0FDSEVfVkFMKGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSwKKyAgW2FjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT1ubworICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorICAgICAgdm9pZCBubV90ZXN0X2Z1bmMoKXt9CisgICAgICBpbnQgbWFpbigpe25tX3Rlc3RfZnVuYztyZXR1cm4gMDt9CitFT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBhY19ubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXHwgY3V0IC1kIFwnIFwnIC1mIDIgXD4gJGFjX25saXN0KSAmJiB0ZXN0IC1zICIkYWNfbmxpc3QiOyB0aGVuCisgICAgICAjIFNlZSB3aGV0aGVyIHRoZSBzeW1ib2xzIGhhdmUgYSBsZWFkaW5nIHVuZGVyc2NvcmUuCisgICAgICBpZiBlZ3JlcCAnXl9ubV90ZXN0X2Z1bmMnICIkYWNfbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlPXllcworICAgICAgZWxzZQorICAgICAgICBpZiBlZ3JlcCAnXm5tX3Rlc3RfZnVuYyAnICIkYWNfbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICA6CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlY2hvICJjb25maWd1cmU6IGNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkYWNfbmxpc3QiID4mQUNfRkRfQ0MKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY29uZmlndXJlOiBjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFDX0ZEX0NDCisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBQ19GRF9DQworICAgIGNhdCBjb25mdGVzdC5jID4mQUNfRkRfQ0MKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBdKQorICBlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHNdKQorICBmaQorQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlKQoraWYgdGVzdCB4JGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFdJVEhfU1lNQk9MX1VOREVSU0NPUkUsMSwKKyAgICAgICAgICAgIFtEZWZpbmVkIGlmIGNvbXBpbGVkIHN5bWJvbHMgaGF2ZSBhIGxlYWRpbmcgdW5kZXJzY29yZV0pCitmaQorXSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoZWNrIHdoZXRoZXIgbWxvY2sgaXMgYnJva2VuIChocHV4IDEwLjIwIHJhaXNlcyBhIFNJR0JVUyBpZiBtbG9jaworIyBpcyBub3QgY2FsbGVkIGZyb20gdWlkIDAgKG5vdCB0ZXN0ZWQgd2hldGhlciB1aWQgMCB3b3JrcykKKyMgRm9yIERFQ3MgVHJ1NjQgd2UgaGF2ZSBhbHNvIHRvIGNoZWNrIHdoZXRoZXIgbWxvY2sgaXMgaW4gbGlicnQKKyMgbWxvY2sgaXMgdGhlcmUgYSBtYWNybyB1c2luZyBtZW1saygpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkbmwgR05VUEdfQ0hFQ0tfTUxPQ0sKK2RubAorZGVmaW5lKEdOVVBHX0NIRUNLX01MT0NLLAorICBbIEFDX0NIRUNLX0ZVTkNTKG1sb2NrKQorICAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX21sb2NrIiA9ICJubyI7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oKQorICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICMgQWRkIGxpYnJ0IHRvIExJQlM6CisgICAgICAgICAgICBBQ19DSEVDS19MSUIocnQsIG1lbWxrKQorICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWxvY2sgaXMgaW4gc3lzL21tYW4uaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251cGdfY3ZfbWxvY2tfaXNfaW5fc3lzX21tYW4sCisgICAgICAgICAgICAgICAgW0FDX1RSWV9MSU5LKFsKKyAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPGFzc2VydC5oPgorICAgICAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9TWVNfTU1BTl9ICisgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBdLCBbCitpbnQgaTsKKworLyogZ2xpYmMgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICogdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkKKyAqIG5hbWVkIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUKKyAqIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfbWxvY2spIHx8IGRlZmluZWQgKF9fc3R1Yl9fX21sb2NrKQorY2hva2UgbWUKKyNlbHNlCittbG9jaygmaSwgNCk7CisjZW5kaWYKKzsgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBnbnVwZ19jdl9tbG9ja19pc19pbl9zeXNfbW1hbj15ZXMsCisgICAgICAgICAgICAgICAgZ251cGdfY3ZfbWxvY2tfaXNfaW5fc3lzX21tYW49bm8pXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRnbnVwZ19jdl9tbG9ja19pc19pbl9zeXNfbW1hbiIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX01MT0NLLDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgYW4gbWxvY2soKSBjYWxsXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19tbG9jayIgPSAieWVzIjsgdGhlbgorICAgICAgICBBQ19DSEVDS19GVU5DUyhzeXNjb25mIGdldHBhZ2VzaXplKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBtbG9jayBpcyBicm9rZW4pCisgICAgICAgICAgQUNfQ0FDSEVfVkFMKGdudXBnX2N2X2hhdmVfYnJva2VuX21sb2NrLAorICAgICAgICAgICAgIEFDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQgbWFpbigpCit7CisgICAgY2hhciAqcG9vbDsKKyAgICBpbnQgZXJyOworICAgIGxvbmcgaW50IHBnc2l6ZTsKKworI2lmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19QQUdFU0laRSkKKyAgICBwZ3NpemUgPSBzeXNjb25mIChfU0NfUEFHRVNJWkUpOworI2VsaWYgZGVmaW5lZCAoSEFWRV9HRVRQQUdFU0laRSkKKyAgICBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworI2Vsc2UKKyAgICBwZ3NpemUgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKHBnc2l6ZSA9PSAtMSkKKyAgICAgIHBnc2l6ZSA9IDQwOTY7CisKKyAgICBwb29sID0gbWFsbG9jKCA0MDk2ICsgcGdzaXplICk7CisgICAgaWYoICFwb29sICkKKyAgICAgICAgcmV0dXJuIDI7CisgICAgcG9vbCArPSAocGdzaXplIC0gKChsb25nIGludClwb29sICUgcGdzaXplKSk7CisKKyAgICBlcnIgPSBtbG9jayggcG9vbCwgNDA5NiApOworICAgIGlmKCAhZXJyIHx8IGVycm5vID09IEVQRVJNICkKKyAgICAgICAgcmV0dXJuIDA7IC8qIG9rYXkgKi8KKworICAgIHJldHVybiAxOyAgLyogaG1tbSAqLworfQorCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgZ251cGdfY3ZfaGF2ZV9icm9rZW5fbWxvY2s9Im5vIiwKKyAgICAgICAgICAgIGdudXBnX2N2X2hhdmVfYnJva2VuX21sb2NrPSJ5ZXMiLAorICAgICAgICAgICAgZ251cGdfY3ZfaGF2ZV9icm9rZW5fbWxvY2s9ImFzc3VtZS1ubyIKKyAgICAgICAgICAgKQorICAgICAgICAgKQorICAgICAgICAgaWYgdGVzdCAiJGdudXBnX2N2X2hhdmVfYnJva2VuX21sb2NrIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX01MT0NLLDEsCisgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBtbG9jaygpIGNhbGwgZG9lcyBub3Qgd29ya10pCisgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiB0ZXN0ICIkZ251cGdfY3ZfaGF2ZV9icm9rZW5fbWxvY2siID0gIm5vIjsgdGhlbgorICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChhc3N1bWluZyBubykKKyAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgIGZpCisgIF0pCisKKyMgR05VUEdfU1lTX0xJQlRPT0xfQ1lHV0lOMzIgLSBmaW5kIHRvb2xzIG5lZWRlZCBvbiBjeWd3aW4zMgorQUNfREVGVU4oW0dOVVBHX1NZU19MSUJUT09MX0NZR1dJTjMyXSwKK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQorXSkKKworZG5sIExJU1RfTUVNQkVSKCkKK2RubCBDaGVjayB3ZXRoZXIgYW4gZWxlbWVudCBpc3QgY29udGFpbmVkIGluIGEgbGlzdC4gIFNldCBgZm91bmQnIHRvCitkbmwgYDEnIGlmIHRoZSBlbGVtZW50IGlzIGZvdW5kIGluIHRoZSBsaXN0LCB0byBgMCcgb3RoZXJ3aXNlLgorQUNfREVGVU4oW0xJU1RfTUVNQkVSXSwKK1sKK25hbWU9JDEKK2xpc3Q9JDIKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKK10pCisKKworZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KK0FDX0RFRlVOKFtUWVBFX1NPQ0tMRU5fVF0sCitbCisgICBBQ19DSEVDS19UWVBFKFtzb2NrbGVuX3RdLCAsWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90IGVxdWl2YWxlbnRdKQorICAgICAgQUNfQ0FDSEVfVkFMKFtzb2NrbGVuX3RfZXF1aXZdLAorICAgICAgWworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgc29ja2xlbl90X2VxdWl2PQorICAgICAgICAgZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKyAgICAgICAgICAgIGZvciB0IGluIGludCBzaXplX3QgdW5zaWduZWQgbG9uZyAidW5zaWduZWQgbG9uZyI7IGRvCisgICAgICAgICAgICAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgc29ja2xlbl90X2VxdWl2PSIkdCIKKyAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgZG9uZQorCisgICAgICAgICBpZiB0ZXN0ICJ4JHNvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90XSkKKyAgICAgICAgIGZpCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVCgkc29ja2xlbl90X2VxdWl2KQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKHNvY2tsZW5fdCwgJHNvY2tsZW5fdF9lcXVpdiwKKwkJCVt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKV0sCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorXSkKKworCisjIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKFJFUVVJUkVEKQorIworIyBJZiB0aGUgdmVyc2lvbiBpcyBzdWZmaWNpZW50LCBIQVZFX1BUSCB3aWxsIGJlIHNldCB0byB5ZXMuCisjCisjIFRha2VuIGZvcm0gdGhlIG00IG1hY3JvcyB3aGljaCBjb21lIHdpdGggUHRoCitBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICBbCisgICAgX3B0aF92ZXJzaW9uPWAkUFRIX0NPTkZJRyAtLXZlcnNpb24gfCBhd2sgJ05SPT0xIHtwcmludCBbJF0zfSdgCisgICAgX3JlcV92ZXJzaW9uPSJpZmVsc2UoWyQxXSwsMS4yLjAsJDEpIgorCisgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBQVEggLSB2ZXJzaW9uID49ICRfcmVxX3ZlcnNpb24pCisgICAgZm9yIF92YXIgaW4gX3B0aF92ZXJzaW9uIF9yZXFfdmVyc2lvbjsgZG8KKyAgICAgICAgZXZhbCAiX3ZhbD1cIlwkJHtfdmFyfVwiIgorICAgICAgICBfbWFqb3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMS8nYAorICAgICAgICBfbWlub3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMi8nYAorICAgICAgICBfcnR5cGU9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMy8nYAorICAgICAgICBfbWljcm89YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cNC8nYAorICAgICAgICBjYXNlICRfcnR5cGUgaW4KKyAgICAgICAgICAgICJhIiApIF9ydHlwZT0wIDs7CisgICAgICAgICAgICAiYiIgKSBfcnR5cGU9MSA7OworICAgICAgICAgICAgIi4iICkgX3J0eXBlPTIgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfaGV4PWBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigiJWQlMDJkJTFkJTAyZCIsIG1ham9yLCBtaW5vciwgcnR5cGUsIG1pY3JvKTsgfScgXAorICAgICAgICAgICAgICAibWFqb3I9JF9tYWpvciIgIm1pbm9yPSRfbWlub3IiICJydHlwZT0kX3J0eXBlIiAibWljcm89JF9taWNybyJgCisgICAgICAgIGV2YWwgIiR7X3Zhcn1faGV4PVwiXCRfaGV4XCIiCisgICAgZG9uZQorICAgIGhhdmVfcHRoPW5vCisgICAgaWYgdGVzdCAiLiRfcHRoX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIi4kX3JlcV92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAkX3B0aF92ZXJzaW9uX2hleCAtZ2UgJF9yZXFfdmVyc2lvbl9oZXg7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlX3B0aD15ZXMKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmVdKQorICAgICAgIEFDX0NBQ0hFX1ZBTChnbnVwZ19jdl9wdGhfaXNfc2FuZSxbCisgICAgICAgICBfZ251cGdfcHRoX3NhdmVfY2ZsYWdzPSRDRkxBR1MKKyAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9sZGZsYWdzPSRMREZMQUdTCisgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGlicz0kTElCUworICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCisgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBUSF9DT05GSUcgLS1sZGZsYWdzYCIKKyAgICAgICAgIExJQlM9IiRMSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnNgIgorICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyBwdGhfaW5pdCAoKTtdXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgZ251cGdfY3ZfcHRoX2lzX3NhbmU9eWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ251cGdfY3ZfcHRoX2lzX3NhbmU9bm8pCisgICAgICAgICBDRkxBR1M9JF9nbnVwZ19wdGhfc2F2ZV9jZmxhZ3MKKyAgICAgICAgIExERkxBR1M9JF9nbnVwZ19wdGhfc2F2ZV9sZGZsYWdzCisgICAgICAgICBMSUJTPSRfZ251cGdfcHRoX3NhdmVfbGlicworICAgICAgIF0pCisgICAgICAgaWYgdGVzdCAkZ251cGdfY3ZfcHRoX2lzX3NhbmUgIT0geWVzOyB0aGVuCisgICAgICAgICAgaGF2ZV9wdGg9bm8KKyAgICAgICBmaQorICAgICAgIEFDX01TR19SRVNVTFQoJGdudXBnX2N2X3B0aF9pc19zYW5lKQorICAgIGVsc2UKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgIGZpCisgIF0pCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYyMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDExMzggQEAKKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExLjYgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42OV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY5LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKyMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCitBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCitbYW1fX2FwaV92ZXJzaW9uPScxLjExJworZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bworZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KK200X2lmKFskMV0sIFsxLjExLjZdLCBbXSwKKyAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKK10pCisKKyMgX0FNX0FVVE9DT05GX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYWNsb2NhbCB0cmFjZXMgdGhpcyBtYWNybyB0byBmaW5kIHRoZSBBdXRvY29uZiB2ZXJzaW9uLgorIyBUaGlzIGlzIGEgcHJpdmF0ZSBtYWNybyB0b28uICBVc2luZyBtNF9kZWZpbmUgc2ltcGxpZmllcworIyB0aGUgbG9naWMgaW4gYWNsb2NhbCwgd2hpY2ggY2FuIHNpbXBseSBpZ25vcmUgdGhpcyBkZWZpbml0aW9uLgorbTRfZGVmaW5lKFtfQU1fQVVUT0NPTkZfVkVSU0lPTl0sIFtdKQorCisjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgorIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCitBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMS42XSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQorCisjIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fUFJPR19BUworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fUFJPR19BU10sCitbIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQordGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCit0ZXN0ICIke0NDQVNGTEFHUytzZXR9IiA9IHNldCB8fCBDQ0FTRkxBR1M9JENGTEFHUworQUNfQVJHX1ZBUihbQ0NBU10sICAgICAgW2Fzc2VtYmxlciBjb21waWxlciBjb21tYW5kIChkZWZhdWx0cyB0byBDQyldKQorQUNfQVJHX1ZBUihbQ0NBU0ZMQUdTXSwgW2Fzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKV0pCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwgW19BTV9ERVBFTkRFTkNJRVMoW0NDQVNdKV0pZG5sCitdKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEKKworIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCisjICRhY19hdXhfZGlyIHRvIGAkc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCisjIGAkc3JjZGlyJywgYCRzcmNkaXIvLi4nLCBvciBgJHNyY2Rpci8uLi8uLicuCisjCisjIE9mIGNvdXJzZSwgQXV0b21ha2UgbXVzdCBob25vciB0aGlzIHZhcmlhYmxlIHdoZW5ldmVyIGl0IGNhbGxzIGEKKyMgdG9vbCBmcm9tIHRoZSBhdXhpbGlhcnkgZGlyZWN0b3J5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCAkc3JjZGlyIChhbmQKKyMgdGhlcmVmb3JlICRhY19hdXhfZGlyIGFzIHdlbGwpIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCisjIGRlcGVuZGluZyBvbiBob3cgY29uZmlndXJlIGlzIHJ1bi4gIFRoaXMgaXMgcHJldHR5IGFubm95aW5nLCBzaW5jZQorIyBpdCBtYWtlcyAkYWNfYXV4X2RpciBxdWl0ZSB1bnVzYWJsZSBpbiBzdWJkaXJlY3RvcmllczogaW4gdGhlIHRvcAorIyBzb3VyY2UgZGlyZWN0b3J5LCBhbnkgZm9ybSB3aWxsIHdvcmsgZmluZSwgYnV0IGluIHN1YmRpcmVjdG9yaWVzIGEKKyMgcmVsYXRpdmUgcGF0aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBmaXJzdC4KKyMKKyMgJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGlmICRhY19hdXhfZGlyIGlzIHJlbGF0aXZlCisjICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgaWYgJGFjX2F1eF9kaXIgaXMgYWJzb2x1dGUsCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaW4gYSBWUEFUSCBidWlsZCB3aXRoCisjICAgICAgICAgIGEgcmVsYXRpdmUgJGFjX2F1eF9kaXIKKyMKKyMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKKyMgYXJlIGJvdGggcHJlZml4ZWQgYnkgJHNyY2Rpci4gIEluIGFuIGluLXNvdXJjZSBidWlsZCB0aGlzIGlzIHVzdWFsbHkKKyMgaGFybWxlc3MgYmVjYXVzZSAkc3JjZGlyIGlzIGAuJywgYnV0IHRoaW5ncyB3aWxsIGJyb2tlIHdoZW4geW91CisjIHN0YXJ0IGEgVlBBVEggYnVpbGQgb3IgdXNlIGFuIGFic29sdXRlICRzcmNkaXIuCisjCisjIFNvIHdlIGNvdWxkIHVzZSBzb21ldGhpbmcgc2ltaWxhciB0byAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nLAorIyBpZmYgd2Ugc3RyaXAgdGhlIGxlYWRpbmcgJHNyY2RpciBmcm9tICRhY19hdXhfZGlyLiAgVGhhdCB3b3VsZCBiZToKKyMgICBhbV9hdXhfZGlyPSdcJCh0b3Bfc3JjZGlyKS8nYGV4cHIgIiRhY19hdXhfZGlyIiA6ICIkc3JjZGlyLy8qXCguKlwpImAKKyMgYW5kIHRoZW4gd2Ugd291bGQgZGVmaW5lICRNSVNTSU5HIGFzCisjICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisjIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgTUlTU0lORyBpcyBub3QgY2FsbGVkIGZyb20gY29uZmlndXJlLCBiZWNhdXNlCisjIHVuZm9ydHVuYXRlbHkgJCh0b3Bfc3JjZGlyKSBoYXMgbm8gbWVhbmluZyBpbiBjb25maWd1cmUuCisjIEhvd2V2ZXIgdGhlcmUgYXJlIG90aGVyIHZhcmlhYmxlcywgbGlrZSBDQywgd2hpY2ggYXJlIG9mdGVuIHVzZWQgaW4KKyMgY29uZmlndXJlLCBhbmQgY291bGQgdGhlcmVmb3JlIG5vdCB1c2UgdGhpcyAiZml4ZWQiICRhY19hdXhfZGlyLgorIworIyBBbm90aGVyIHNvbHV0aW9uLCB1c2VkIGhlcmUsIGlzIHRvIGFsd2F5cyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4KKyMgYWJzb2x1dGUgUEFUSC4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHVzaW5nIGFic29sdXRlIHBhdGhzIHByZXZlbnQgYQorIyBjb25maWd1cmVkIHRyZWUgdG8gYmUgbW92ZWQgd2l0aG91dCByZWNvbmZpZ3VyYXRpb24uCisKK0FDX0RFRlVOKFtBTV9BVVhfRElSX0VYUEFORF0sCitbZG5sIFJlbHkgb24gYXV0b2NvbmYgdG8gc2V0IHVwIENEUEFUSCBwcm9wZXJseS4KK0FDX1BSRVJFUShbMi41MF0pZG5sCisjIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCithbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCitdKQorCisjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDkKKworIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCitBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorW0FDX1BSRVJFUSgyLjUyKWRubAorIGlmZWxzZShbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCisJWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAorQUNfU1VCU1QoWyQxX1RSVUVdKWRubAorQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCittNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKK2lmICQyOyB0aGVuCisgICQxX1RSVUU9CisgICQxX0ZBTFNFPScjJworZWxzZQorICAkMV9UUlVFPScjJworICAkMV9GQUxTRT0KK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgorICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCitmaV0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksCisjIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTIKKworIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKKyMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCisjIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncworIyBDIHN1cHBvcnQgbWFjaGluZXJ5LiAgQWxzbyBub3RlIHRoYXQgaXQgbWVhbnMgdGhhdCBhdXRvc2Nhbiwgc2VlaW5nCisjIENDIGV0Yy4gaW4gdGhlIE1ha2VmaWxlLCB3aWxsIGFzayBmb3IgYW4gQUNfUFJPR19DQyB1c2UuLi4KKworCisjIF9BTV9ERVBFTkRFTkNJRVMoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCisjIE5BTUUgaXMgIkNDIiwgIkNYWCIsICJHQ0oiLCBvciAiT0JKQyIuCisjIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCisjCisjIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcworIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgorIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCisjIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgorQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAorQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAorQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKK0FDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCisKK2lmZWxzZShbJDFdLCBDQywgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgQ1hYLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIE9CSkMsIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgWyQxXSwgVVBDLCAgW2RlcGNjPSIkVVBDIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIEdDSiwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorCitBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKK1tpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIG00X2Nhc2UoWyQxXSwgW0NDXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdLAorICAgIFtDWFhdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10pCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKK0FDX1NVQlNUKFthbV9fbm9kZXBdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW2FtX19ub2RlcF0pZG5sCitdKQorCisjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyNzZXJpYWwgNQorCisjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW3sKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAorICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKKyAgZG9uZQorfQorXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworCisKKyMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgorIworIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCisjIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoIGAuUCcgZmlsZSB0aGF0IHdlIHdpbGwKKyMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KK0FDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCisgICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCitdKQorCisjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDE2CisKKyMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCisKKyMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQorIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCisjIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQorIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgorIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKKyMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKKyMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgorIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorW0FDX1BSRVJFUShbMi42Ml0pZG5sCitkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCittNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCitBQ19TVUJTVChbQ1lHUEFUSF9XXSkKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCittNF9pZnZhbChbJDJdLAorW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKK1tfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKK2RubCBEaWFnbm9zZSBvbGQtc3R5bGUgQUNfSU5JVCB3aXRoIG5ldy1zdHlsZSBBTV9BVVRPTUFLRV9JTklULgorbTRfaWYobTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIDEpbTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIDEpLCAxMSwsCisgIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCitBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubAorIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KKyMgc29tZSBwbGF0Zm9ybXMuCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitfQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKKwkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhDQyldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfQ0NdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKKwkJCSAgZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKENYWCldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKK10pCitfQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAorZG5sIFRoZSBgcGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sIGBhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybworZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCitbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCisgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAorXSkKKworZG5sIEhvb2sgaW50byBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgorZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCittNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKKworCisjIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCisjIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgorIyB0aGF0IGlzIGdlbmVyYXRlZC4gIFRoZSBzdGFtcCBmaWxlcyBhcmUgbnVtYmVyZWQgdG8gaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCisKKyMgQXV0b2NvbmYgY2FsbHMgX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PSyAod2hlbiBkZWZpbmVkKSBpbiB0aGUKKyMgbG9vcCB3aGVyZSBjb25maWcuc3RhdHVzIGNyZWF0ZXMgdGhlIGhlYWRlcnMsIHNvIHdlIGNhbiBnZW5lcmF0ZQorIyBvdXIgc3RhbXAgZmlsZXMgdGhlcmUuCitBQ19ERUZVTihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCitbIyBDb21wdXRlICQxJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0kMQorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMQorCisjIEFNX1BST0dfSU5TVEFMTF9TSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lICRpbnN0YWxsX3NoLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TSF0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAoraWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorQUNfU1VCU1QoaW5zdGFsbF9zaCldKQorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIENoZWNrIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZmlsZS1zeXN0ZW0gc3VwcG9ydHMgZmlsZW5hbWVzCisjIHdpdGggYSBsZWFkaW5nIGRvdC4gIEZvciBpbnN0YW5jZSBNUy1ET1MgZG9lc24ndC4KK0FDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLAorW3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCitBQ19TVUJTVChbYW1fX2xlYWRpbmdfZG90XSldKQorCisjIEFkZCAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgb3B0aW9uIHRvIGNvbmZpZ3VyZS4gICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIEZyb20gSmltIE1leWVyaW5nCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4LAorIyAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUKKworIyBBTV9NQUlOVEFJTkVSX01PREUoW0RFRkFVTFQtTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29udHJvbCBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4KKyMgRGVmYXVsdCBpcyB0byBkaXNhYmxlIHRoZW0sIHVubGVzcyBgZW5hYmxlJyBpcyBwYXNzZWQgbGl0ZXJhbGx5LgorIyBGb3Igc3ltbWV0cnksIGBkaXNhYmxlJyBtYXkgYmUgcGFzc2VkIGFzIHdlbGwuICBBbnl3YXksIHRoZSB1c2VyCisjIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aXRoIHRoZSAtLWVuYWJsZS8tLWRpc2FibGUgc3dpdGNoLgorQUNfREVGVU4oW0FNX01BSU5UQUlORVJfTU9ERV0sCitbbTRfY2FzZShtNF9kZWZhdWx0KFskMV0sIFtkaXNhYmxlXSksCisgICAgICAgW2VuYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZGlzYWJsZV0pXSwKKyAgICAgICBbZGlzYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSldLAorICAgICAgIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSkKKyAgICAgICAgbTRfd2Fybihbc3ludGF4XSwgW3VuZXhwZWN0ZWQgYXJndW1lbnQgdG8gQU1AJnRAX01BSU5UQUlORVJfTU9ERTogJDFdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSdzIGRlZmF1bHQgaXMgJ2Rpc2FibGUnIHVubGVzcyAnZW5hYmxlJyBpcyBwYXNzZWQKKyAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKK1sgIC0tXVthbV9tYWludGFpbmVyX290aGVyXVstbWFpbnRhaW5lci1tb2RlICBhbV9tYWludGFpbmVyX290aGVyIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAorICAgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT1dbTRfaWYoYW1fbWFpbnRhaW5lcl9vdGhlciwgW2VuYWJsZV0sIFtub10sIFt5ZXNdKSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9NQUlOVEFJTkVSX01PREVdKQorICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKyAgQUNfU1VCU1QoW01BSU5UXSlkbmwKK10KKykKKworQVVfREVGVU4oW2ptX01BSU5UQUlORVJfTU9ERV0sIFtBTV9NQUlOVEFJTkVSX01PREVdKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNgorCisjIEFNX1BST0dfQ0NfQ19PCisjIC0tLS0tLS0tLS0tLS0tCisjIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4KK0FDX0RFRlVOKFtBTV9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ19DX09dKWRubAorQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCisjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKKyMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgorc2V0IGR1bW15ICRDQworYW1fY2M9YGVjaG8gJFsyXSB8IHNlZCBbJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nXWAKK2V2YWwgYW1fdD1cJGFjX2N2X3Byb2dfY2NfJHthbV9jY31fY19vCitpZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCitkbmwgTWFrZSBzdXJlIEFDX1BST0dfQ0MgaXMgbmV2ZXIgY2FsbGVkIGFnYWluLCBvciBpdCB3aWxsIG92ZXJyaWRlIG91cgorZG5sIHNldHRpbmcgb2YgQ0MuCittNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorICAgICAgICAgIFttNF9mYXRhbChbQUNfUFJPR19DQyBjYW5ub3QgYmUgY2FsbGVkIGFmdGVyIEFNX1BST0dfQ0NfQ19PXSldKQorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMQorCisjIEFNX1BST0dfTUtESVJfUAorIyAtLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGBta2RpciAtcCcuCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tBQ19QUkVSRVEoWzIuNjBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKK2RubCBBdXRvbWFrZSAxLjggdG8gMS45LjYgdXNlZCB0byBkZWZpbmUgbWtkaXJfcC4gIFdlIG5vdyB1c2UgTUtESVJfUCwKK2RubCB3aGlsZSBrZWVwaW5nIGEgZGVmaW5pdGlvbiBvZiBta2Rpcl9wIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorZG5sIEBNS0RJUl9QQCBpcyBtYWdpYzogQUNfT1VUUFVUIGFkanVzdHMgaXRzIHZhbHVlIGZvciBlYWNoIE1ha2VmaWxlLgorZG5sIEhvd2V2ZXIgd2UgY2Fubm90IGRlZmluZSBta2Rpcl9wIGFzICQoTUtESVJfUCkgZm9yIHRoZSBzYWtlIG9mCitkbmwgTWFrZWZpbGUuaW5zIHRoYXQgZG8gbm90IGRlZmluZSBNS0RJUl9QLCBzbyB3ZSBkbyBvdXIgb3duCitkbmwgYWRqdXN0bWVudCB1c2luZyB0b3BfYnVpbGRkaXIgKHdoaWNoIGlzIGRlZmluZWQgbW9yZSBvZnRlbiB0aGFuCitkbmwgTUtESVJfUCkuCitBQ19TVUJTVChbbWtkaXJfcF0sIFsiJE1LRElSX1AiXSlkbmwKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworXSkKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgMSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05TXSwKK1ttNF9mb3JlYWNoX3coW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCisKKyMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorQUNfREVGVU4oW19BTV9JRl9PUFRJT05dLAorW200X2lmc2V0KF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbJDJdLCBbJDNdKV0pCisKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX1NBTklUWV9DSEVDSworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWVdKTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZcIFwJXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIHNyY2RpciB2YWx1ZTogYCRzcmNkaXInXSk7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJFsqXSIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgIGZpCisKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBBTV9TSUxFTlRfUlVMRVMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGVzcyB2ZXJib3NlIGJ1aWxkIHJ1bGVzOyB3aXRoIHRoZSBkZWZhdWx0IHNldCB0byBERUZBVUxUCisjIChgeWVzJyBiZWluZyBsZXNzIHZlcmJvc2UsIGBubycgb3IgZW1wdHkgYmVpbmcgdmVyYm9zZSkuCitBQ19ERUZVTihbQU1fU0lMRU5UX1JVTEVTXSwKK1tBQ19BUkdfRU5BQkxFKFtzaWxlbnQtcnVsZXNdLAorWyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgICAgICAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MScpCisgIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0wJyldKQorY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworZXNhYworZG5sCitkbmwgQSBmZXcgYG1ha2UnIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgTm9uU3RvcCBPUyBhbmQgTmV4dFN0ZXApCitkbmwgZG8gbm90IHN1cHBvcnQgbmVzdGVkIHZhcmlhYmxlIGV4cGFuc2lvbnMuCitkbmwgU2VlIGF1dG9tYWtlIGJ1ZyM5OTI4IGFuZCBidWcjMTAyMzcuCithbV9tYWtlPSR7TUFLRS1tYWtlfQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlc10sCisgICBbYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXNdLAorICAgW2lmIEFTX0VDSE8oW1snVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnXV0pIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaV0pCitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICBkbmwgVXNpbmcgYCRWJyBpbnN0ZWFkIG9mIGAkKFYpJyBicmVha3MgSVJJWCBtYWtlLgorICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQUNfU1VCU1QoW0FNX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX0RFRkFVTFRfVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WRVJCT1NJVFldKWRubAorQU1fQkFDS1NMQVNIPSdcJworQUNfU1VCU1QoW0FNX0JBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1fQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEKKworIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciBgaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyMgYW5ub3lpbmcgaW4gY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50cywgd2hlcmUgdGhlIGJ1aWxkJ3Mgc3RyaXAKKyMgaXMgdW5saWtlbHkgdG8gaGFuZGxlIHRoZSBob3N0J3MgYmluYXJpZXMuCisjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluIGBtYWtlIGluc3RhbGwtc3RyaXAnLCBhbmQgaW5pdGlhbGl6ZQorIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCitbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2RubCBEb24ndCB0ZXN0IGZvciAkY3Jvc3NfY29tcGlsaW5nID0geWVzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIGBtYXliZScuCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0sIDopCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCitBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQorCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fUFJPR19UQVIoRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiBgdjcnLCBgdXN0YXInLCBvciBgcGF4Jy4KKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKKyMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyMgJHRhcmRpci4KKyMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAorIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgorIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQUNfU1VCU1QoW0FNVEFSXSwgWyckJHtUQVItdGFyfSddKQorbTRfaWYoWyQxXSwgW3Y3XSwKKyAgICAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKKyAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKKyAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgOzsKKyAgcGxhaW50YXIpCisgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgIDs7CisgIHBheCkKKyAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFttNC9ncGctZXJyb3IubTRdKQorbTRfaW5jbHVkZShbbTQvbGlidG9vbC5tNF0pCittNF9pbmNsdWRlKFttNC9sb2NrLm00XSkKK200X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCittNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCittNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCittNF9pbmNsdWRlKFttNC9ub2V4ZWNzdGFjay5tNF0pCittNF9pbmNsdWRlKFttNC9vbmNlb25seS5tNF0pCittNF9pbmNsdWRlKFttNC9zb2NrbGVuLm00XSkKK200X2luY2x1ZGUoW200L3N5c19zb2NrZXRfaC5tNF0pCittNF9pbmNsdWRlKFttNC90aHJlYWRsaWIubTRdKQorbTRfaW5jbHVkZShbYWNpbmNsdWRlLm00XSkKZGlmZiAtLWdpdCBhL2F1dG9nZW4ucmMgYi9hdXRvZ2VuLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTliOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvZ2VuLnJjCkBAIC0wLDAgKzEsMTcgQEAKKyMgYXV0b2dlbi5zaCBjb25maWd1cmF0aW9uIGZvciBMaWJnY3J5cHQgICAgICAgICAgICAgICAgICAgICAgIC0qLSBzaCAtKi0KKworY2FzZSAiJG15aG9zdCIgaW4KKyAgdzMyKQorICAgIGNvbmZpZ3VyZV9vcHRzPSIKKyAgICAgIC0td2l0aC1ncGctZXJyb3ItcHJlZml4PUBTWVNST09UQAorICAgICAgIgorICAgIDs7CisKKyAgYW1kNjQpCisgICAgY29uZmlndXJlX29wdHM9IgorICAgICAgLS13aXRoLWdwZy1lcnJvci1wcmVmaXg9QFNZU1JPT1RACisgICAgICIKKyAgICA7OworZXNhYworCitmaW5hbF9pbmZvPSIuL2NvbmZpZ3VyZSAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgJiYgbWFrZSIKZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3MTE5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvZ2VuLnNoCkBAIC0wLDAgKzEsMzkzIEBACisjISAvYmluL3NoCisjIGF1dG9nZW4uc2gKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDE0IGcxMCBDb2RlIEdtYkgKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMKKyMgVGhpcyBpcyBhIGdlbmVyaWMgc2NyaXB0IHRvIGNyZWF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQgaGFuZGxlIGNyb3NzCisjIGJ1aWxkIGVudmlyb25tZW50cy4gIEl0IHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhIGF1dG9nZW4ucmMgZmlsZSB0bworIyBjb25maWd1cmUgaXQgZm9yIHRoZSByZXNwZWN0aXZlIHBhY2thZ2UuICBJdCBpcyBtYWludGFpbmVkIGFzIHBhcnQgb2YKKyMgR251UEcgYW5kIHNvdXJjZSBjb3BpZWQgYnkgb3RoZXIgcGFja2FnZXMuCisjCisjIFZlcnNpb246IDIwMTQtMDEtMTAKKworY29uZmlndXJlX2FjPSJjb25maWd1cmUuYWMiCisKK2N2dHZlciAoKSB7CisgIGF3ayAnTlI9PTEge3NwbGl0KCRORixBLCIuIik7WD0xMDAwMDAwKkFbMV0rMTAwMCpBWzJdK0FbM107cHJpbnQgWDtleGl0IDB9JworfQorCitjaGVja192ZXJzaW9uICgpIHsKKyAgICBpZiBbICQoKCBgKCIkMSIgLS12ZXJzaW9uIHx8IGVjaG8gIjAiKSB8IGN2dHZlcmAgPj0gJDIgKSkgPSAxIF07IHRoZW4KKyAgICAgICByZXR1cm4gMAorICAgIGZpCisgICAgZWNobyAiKipFcnJvcioqOiAiXGAkMVwnIiBub3QgaW5zdGFsbGVkIG9yIHRvbyBvbGQuIiA+JjIKKyAgICBlY2hvICcgICAgICAgICAgIFZlcnNpb24gJyQzJyBvciBuZXdlciBpcyByZXF1aXJlZC4nID4mMgorICAgIFsgLW4gIiQ0IiBdICYmIGVjaG8gJyAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgcGFydCBvZiAnXGAkNFwnJy4nID4mMgorICAgIERJRT0ieWVzIgorICAgIHJldHVybiAxCit9CisKK2ZhdGFsICgpIHsKKyAgICBlY2hvICJhdXRvZ2VuLnNoOiIgIiQqIiA+JjIKKyAgICBESUU9eWVzCit9CisKK2luZm8gKCkgeworICAgIGlmIFsgLXogIiR7U0lMRU5UfSIgXTsgdGhlbgorICAgICAgZWNobyAiYXV0b2dlbi5zaDoiICIkKiIKKyAgICBmaQorfQorCitkaWVfcCAoKSB7CisgIGlmIFsgIiRESUUiID0gInllcyIgXTsgdGhlbgorICAgIGVjaG8gImF1dG9nZW4uc2g6IFN0b3AuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKK30KKworcmVwbGFjZV9zeXNyb290ICgpIHsKKyAgICBjb25maWd1cmVfb3B0cz0kKGVjaG8gJGNvbmZpZ3VyZV9vcHRzIHwgc2VkICJzI0BTWVNST09UQCMke3czMnJvb3R9I2ciKQorICAgIGV4dHJhb3B0aW9ucz0kKGVjaG8gJGV4dHJhb3B0aW9ucyB8IHNlZCAicyNAU1lTUk9PVEAjJHt3MzJyb290fSNnIikKK30KKworIyBBbGxvdyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB0b29sIG5hbWVzCitBVVRPQ09ORj0ke0FVVE9DT05GX1BSRUZJWH0ke0FVVE9DT05GOi1hdXRvY29uZn0ke0FVVE9DT05GX1NVRkZJWH0KK0FVVE9IRUFERVI9JHtBVVRPQ09ORl9QUkVGSVh9JHtBVVRPSEVBREVSOi1hdXRvaGVhZGVyfSR7QVVUT0NPTkZfU1VGRklYfQorCitBVVRPTUFLRT0ke0FVVE9NQUtFX1BSRUZJWH0ke0FVVE9NQUtFOi1hdXRvbWFrZX0ke0FVVE9NQUtFX1NVRkZJWH0KK0FDTE9DQUw9JHtBVVRPTUFLRV9QUkVGSVh9JHtBQ0xPQ0FMOi1hY2xvY2FsfSR7QVVUT01BS0VfU1VGRklYfQorCitHRVRURVhUPSR7R0VUVEVYVF9QUkVGSVh9JHtHRVRURVhUOi1nZXR0ZXh0fSR7R0VUVEVYVF9TVUZGSVh9CitNU0dNRVJHRT0ke0dFVFRFWFRfUFJFRklYfSR7TVNHTUVSR0U6LW1zZ21lcmdlfSR7R0VUVEVYVF9TVUZGSVh9CisKK0RJRT1ubworRk9SQ0U9CitTSUxFTlQ9Cit0bXA9JChkaXJuYW1lICIkMCIpCit0c2Rpcj0kKGNkICIke3RtcH0iOyBwd2QpCisKK2lmIFsgLW4gIiR7QVVUT0dFTl9TSF9TSUxFTlR9IiBdOyB0aGVuCisgIFNJTEVOVD0iIC0tc2lsZW50IgorZmkKK2lmIHRlc3QgeCIkMSIgPSB4Ii0taGVscCI7IHRoZW4KKyAgZWNobyAidXNhZ2U6IC4vYXV0b2dlbi5zaCBbLS1zaWxlbnRdIFstLWZvcmNlXSBbLS1idWlsZC1UWVBFXSBbQVJHU10iCisgIGV4aXQgMAorZmkKK2lmIHRlc3QgeCIkMSIgPSB4Ii0tc2lsZW50IjsgdGhlbgorICBTSUxFTlQ9IiAtLXNpbGVudCIKKyAgc2hpZnQKK2ZpCitpZiB0ZXN0IHgiJDEiID0geCItLWZvcmNlIjsgdGhlbgorICBGT1JDRT0iIC0tZm9yY2UiCisgIHNoaWZ0CitmaQorCisKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRIT01FLCAkdHNkaXIgYW5kIGN3ZC4gIFdlIGNvbnNpZGVyIHNwYWNlcworIyBhcyB1bnNhZmUgYmVjYXVzZSBpdCBpcyB0b28gZWFzeSB0byBnZXQgc2NyaXB0cyB3cm9uZyBpbiB0aGlzIHJlZ2FyZC4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltcO1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGZhdGFsICJ1bnNhZmUgd29ya2luZyBkaXJlY3RvcnkgbmFtZSIgOzsKK2VzYWMKK2Nhc2UgJHRzZGlyIGluCisgICpbXDtcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBmYXRhbCAidW5zYWZlIHNvdXJjZSBkaXJlY3Rvcnk6IFxgJHRzZGlyJyIgOzsKK2VzYWMKK2Nhc2UgJEhPTUUgaW4KKyAgKltcO1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGZhdGFsICJ1bnNhZmUgaG9tZSBkaXJlY3Rvcnk6IFxgJEhPTUUnIiA7OworZXNhYworZGllX3AKKworCisjIExpc3Qgb2YgdmFyaWFibGVzIHNvdXJjZWQgZnJvbSBhdXRvZ2VuLnJjLiAgVGhlIHN0cmluZ3MgJ0BTWVNST09UQCcgaW4KKyMgdGhlc2UgdmFyaWFibGVzIGFyZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHN5c3RlbSByb290LgorY29uZmlndXJlX29wdHM9CitleHRyYW9wdGlvbnM9CisjIExpc3Qgb2Ygb3B0aW9uYWwgdmFyaWFibGVzIHNvdXJjZWQgZnJvbSBhdXRvZ2VuLnJjIGFuZCB+Ly5nbnVwZy1hdXRvZ2VuLnJjCit3MzJfdG9vbHByZWZpeGVzPQordzMyX2V4dHJhb3B0aW9ucz0KK3czMmNlX3Rvb2xwcmVmaXhlcz0KK3czMmNlX2V4dHJhb3B0aW9ucz0KK3c2NF90b29scHJlZml4ZXM9Cit3NjRfZXh0cmFvcHRpb25zPQorYW1kNjRfdG9vbHByZWZpeGVzPQorIyBFbmQgbGlzdCBvZiBvcHRpb25hbCB2YXJpYWJsZXMgc291cmNlZCBmcm9tIH4vLmdudXBnLWF1dG9nZW4ucmMKKyMgV2hhdCBmb2xsb3dzIGFyZSB2YXJpYWJsZXMgd2hpY2ggYXJlIHNvdXJjZWQgYnV0IGRlZmF1bHQgdG8KKyMgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGxhY2tpbmcgdGhlbSBoYXJkY29kZWQgdmFsdWVzLgorI3czMnJvb3Q9CisjdzMyY2Vfcm9vdD0KKyN3NjRyb290PQorI2FtZDY0cm9vdD0KKworIyBDb252ZW5pZW5jZSBvcHRpb24gdG8gdXNlIGNlcnRhaW4gY29uZmlndXJlIG9wdGlvbnMgZm9yIHNvbWUgaG9zdHMuCitteWhvc3Q9IiIKK215aG9zdHN1Yj0iIgorY2FzZSAiJDEiIGluCisgICAgLS1idWlsZC13MzIpCisgICAgICAgIG15aG9zdD0idzMyIgorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYnVpbGQtdzMyY2UpCisgICAgICAgIG15aG9zdD0idzMyIgorICAgICAgICBteWhvc3RzdWI9ImNlIgorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYnVpbGQtdzY0KQorICAgICAgICBteWhvc3Q9InczMiIKKyAgICAgICAgbXlob3N0c3ViPSI2NCIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWJ1aWxkLWFtZDY0KQorICAgICAgICBteWhvc3Q9ImFtZDY0IgorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYnVpbGQqKQorICAgICAgICBmYXRhbCAiKipFcnJvcioqOiBpbnZhbGlkIGJ1aWxkIG9wdGlvbiAkMSIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICA7OworZXNhYworZGllX3AKKworCisjIFNvdXJjZSBvdXIgY29uZmlndXJhdGlvbgoraWYgWyAtZiAiJHt0c2Rpcn0vYXV0b2dlbi5yYyIgXTsgdGhlbgorICAgIC4gIiR7dHNkaXJ9L2F1dG9nZW4ucmMiCitmaQorCisjIFNvdXJjZSBvcHRpb25hbCBzaXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KK2lmIFsgLWYgIiRIT01FLy5nbnVwZy1hdXRvZ2VuLnJjIiBdOyB0aGVuCisgICAgaW5mbyAic291cmNpbmcgZXh0cmEgZGVmaW5pdGlvbnMgZnJvbSAkSE9NRS8uZ251cGctYXV0b2dlbi5yYyIKKyAgICAuICIkSE9NRS8uZ251cGctYXV0b2dlbi5yYyIKK2ZpCisKKyMgKioqKioqKioqKioqKioqKioqCisjICBXMzIgYnVpbGQgc2NyaXB0CisjICoqKioqKioqKioqKioqKioqKgoraWYgWyAiJG15aG9zdCIgPSAidzMyIiBdOyB0aGVuCisgICAgaWYgWyAhIC1mICIkdHNkaXIvYnVpbGQtYXV4L2NvbmZpZy5ndWVzcyIgXTsgdGhlbgorICAgICAgICBmYXRhbCAiJHRzZGlyL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3Mgbm90IGZvdW5kIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGJ1aWxkPWAkdHNkaXIvYnVpbGQtYXV4L2NvbmZpZy5ndWVzc2AKKworICAgIGNhc2UgJG15aG9zdHN1YiBpbgorICAgICAgICBjZSkKKyAgICAgICAgICB3MzJyb290PSIkdzMyY2Vfcm9vdCIKKyAgICAgICAgICBbIC16ICIkdzMycm9vdCIgXSAmJiB3MzJyb290PSIkSE9NRS93MzJjZV9yb290IgorICAgICAgICAgIHRvb2xwcmVmaXhlcz0iJHczMmNlX3Rvb2xwcmVmaXhlcyBhcm0tbWluZ3czMmNlIgorICAgICAgICAgIGV4dHJhb3B0aW9ucz0iJGV4dHJhb3B0aW9ucyAkdzMyY2VfZXh0cmFvcHRpb25zIgorICAgICAgICAgIDs7CisgICAgICAgIDY0KQorICAgICAgICAgIHczMnJvb3Q9IiR3NjRyb290IgorICAgICAgICAgIFsgLXogIiR3MzJyb290IiBdICYmIHczMnJvb3Q9IiRIT01FL3c2NHJvb3QiCisgICAgICAgICAgdG9vbHByZWZpeGVzPSIkdzY0X3Rvb2xwcmVmaXhlcyB4ODZfNjQtdzY0LW1pbmd3MzIiCisgICAgICAgICAgZXh0cmFvcHRpb25zPSIkZXh0cmFvcHRpb25zICR3NjRfZXh0cmFvcHRpb25zIgorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgWyAteiAiJHczMnJvb3QiIF0gJiYgdzMycm9vdD0iJEhPTUUvdzMycm9vdCIKKyAgICAgICAgICB0b29scHJlZml4ZXM9IiR3MzJfdG9vbHByZWZpeGVzIGk2ODYtdzY0LW1pbmd3MzIgaTU4Ni1taW5ndzMybXN2YyIKKyAgICAgICAgICB0b29scHJlZml4ZXM9IiR0b29scHJlZml4ZXMgaTM4Ni1taW5ndzMybXN2YyBtaW5ndzMyIgorICAgICAgICAgIGV4dHJhb3B0aW9ucz0iJGV4dHJhb3B0aW9ucyAkdzMyX2V4dHJhb3B0aW9ucyIKKyAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBpbmZvICJVc2luZyAkdzMycm9vdCBhcyBzdGFuZGFyZCBpbnN0YWxsIGRpcmVjdG9yeSIKKyAgICByZXBsYWNlX3N5c3Jvb3QKKworICAgICMgTG9jYXRlIHRoZSBjcm9zcyBjb21waWxlcgorICAgIGNyb3NzYmluZGlyPQorICAgIGZvciBob3N0IGluICR0b29scHJlZml4ZXM7IGRvCisgICAgICAgIGlmICR7aG9zdH0tZ2NjIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICAgICAgICBjcm9zc2JpbmRpcj0vdXNyLyR7aG9zdH0vYmluCisgICAgICAgICAgICBjb25mX0NDPSJDQz0ke2hvc3R9LWdjYyIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbIC16ICIkY3Jvc3NiaW5kaXIiIF07IHRoZW4KKyAgICAgICAgZmF0YWwgImNyb3NzIGNvbXBpbGVyIGtpdCBub3QgaW5zdGFsbGVkIgorICAgICAgICBpZiBbIC16ICIkbXlob3N0c3ViIiBdOyB0aGVuCisgICAgICAgICAgaW5mbyAiVW5kZXIgRGViaWFuIEdOVS9MaW51eCwgeW91IG1heSBpbnN0YWxsIGl0IHVzaW5nIgorICAgICAgICAgIGluZm8gIiAgYXB0LWdldCBpbnN0YWxsIG1pbmd3MzIgbWluZ3czMi1ydW50aW1lIG1pbmd3MzItYmludXRpbHMiCisgICAgICAgIGZpCisgICAgICAgIGRpZV9wCisgICAgZmkKKworICAgIGlmIFsgLWYgIiR0c2Rpci9jb25maWcubG9nIiBdOyB0aGVuCisgICAgICAgIGlmICEgaGVhZCAkdHNkaXIvY29uZmlnLmxvZyB8IGdyZXAgIiRob3N0IiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBmYXRhbCAiUGxlYXNlIHJ1biBhICdtYWtlIGRpc3RjbGVhbicgZmlyc3QiCisgICAgICAgICAgICBkaWVfcAorICAgICAgICBmaQorICAgIGZpCisKKyAgICAkdHNkaXIvY29uZmlndXJlIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAke1NJTEVOVH0gXAorICAgICAgICAgICAgIC0tcHJlZml4PSR7dzMycm9vdH0gIFwKKyAgICAgICAgICAgICAtLWhvc3Q9JHtob3N0fSAtLWJ1aWxkPSR7YnVpbGR9IFwKKyAgICAgICAgICAgICAke2NvbmZpZ3VyZV9vcHRzfSAke2V4dHJhb3B0aW9uc30gIiRAIgorICAgIHJjPSQ/CisgICAgZXhpdCAkcmMKK2ZpCisjICoqKioqIGVuZCBXMzIgYnVpbGQgc2NyaXB0ICoqKioqKioKKworIyAqKioqKiBBTUQ2NCBjcm9zcyBidWlsZCBzY3JpcHQgKioqKioqKgorIyBVc2VkIHRvIGNyb3NzLWNvbXBpbGUgZm9yIEFNRDY0IChmb3IgdGVzdGluZykKK2lmIFsgIiRteWhvc3QiID0gImFtZDY0IiBdOyB0aGVuCisgICAgc2hpZnQKKyAgICBpZiBbICEgLWYgJHRzZGlyL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgXTsgdGhlbgorICAgICAgICBlY2hvICIkdHNkaXIvYnVpbGQtYXV4L2NvbmZpZy5ndWVzcyBub3QgZm91bmQiID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGJ1aWxkPWAkdHNkaXIvYnVpbGQtYXV4L2NvbmZpZy5ndWVzc2AKKworICAgIFsgLXogIiRhbWQ2NHJvb3QiIF0gJiYgYW1kNjRyb290PSIkSE9NRS9hbWQ2NHJvb3QiCisgICAgaW5mbyAiVXNpbmcgJGFtZDY0cm9vdCBhcyBzdGFuZGFyZCBpbnN0YWxsIGRpcmVjdG9yeSIKKyAgICByZXBsYWNlX3N5c3Jvb3QKKworICAgIHRvb2xwcmVmaXhlcz0iJGFtZDY0X3Rvb2xwcmVmaXhlcyB4ODZfNjQtbGludXgtZ251IGFtZDY0LWxpbnV4LWdudSIKKworICAgICMgTG9jYXRlIHRoZSBjcm9zcyBjb21waWxlcgorICAgIGNyb3NzYmluZGlyPQorICAgIGZvciBob3N0IGluICR0b29scHJlZml4ZXMgOyBkbworICAgICAgICBpZiAke2hvc3R9LWdjYyAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICAgICAgY3Jvc3NiaW5kaXI9L3Vzci8ke2hvc3R9L2JpbgorICAgICAgICAgICAgY29uZl9DQz0iQ0M9JHtob3N0fS1nY2MiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgWyAteiAiJGNyb3NzYmluZGlyIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkNyb3NzIGNvbXBpbGVyIGtpdCBub3QgaW5zdGFsbGVkIiA+JjIKKyAgICAgICAgZWNobyAiU3RvcC4iID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgWyAtZiAiJHRzZGlyL2NvbmZpZy5sb2ciIF07IHRoZW4KKyAgICAgICAgaWYgISBoZWFkICR0c2Rpci9jb25maWcubG9nIHwgZ3JlcCAiJGhvc3QiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBydW4gYSAnbWFrZSBkaXN0Y2xlYW4nIGZpcnN0IiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAkdHNkaXIvY29uZmlndXJlIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAke1NJTEVOVH0gXAorICAgICAgICAgICAgIC0tcHJlZml4PSR7YW1kNjRyb290fSAgXAorICAgICAgICAgICAgIC0taG9zdD0ke2hvc3R9IC0tYnVpbGQ9JHtidWlsZH0gXAorICAgICAgICAgICAgICR7Y29uZmlndXJlX29wdHN9ICR7ZXh0cmFvcHRpb25zfSAiJEAiCisgICAgcmM9JD8KKyAgICBleGl0ICRyYworZmkKKyMgKioqKiogZW5kIEFNRDY0IGNyb3NzIGJ1aWxkIHNjcmlwdCAqKioqKioqCisKKworIyBHcmVwIHRoZSByZXF1aXJlZCB2ZXJzaW9ucyBmcm9tIGNvbmZpZ3VyZS5hYworYXV0b2NvbmZfdmVycz1gc2VkIC1uICcvXkFDX1BSRVJFUSgvIHsKK3MvXi4qKFwoLipcKSkvXDEvcAorcQorfScgJHtjb25maWd1cmVfYWN9YAorYXV0b2NvbmZfdmVyc19udW09YGVjaG8gIiRhdXRvY29uZl92ZXJzIiB8IGN2dHZlcmAKKworYXV0b21ha2VfdmVycz1gc2VkIC1uICcvXm1pbl9hdXRvbWFrZV92ZXJzaW9uPS8geworcy9eLio9IlwoLipcKSIvXDEvcAorcQorfScgJHtjb25maWd1cmVfYWN9YAorYXV0b21ha2VfdmVyc19udW09YGVjaG8gIiRhdXRvbWFrZV92ZXJzIiB8IGN2dHZlcmAKKworaWYgWyAtZCAiJHt0c2Rpcn0vcG8iIF07IHRoZW4KKyAgZ2V0dGV4dF92ZXJzPWBzZWQgLW4gJy9eQU1fR05VX0dFVFRFWFRfVkVSU0lPTigvIHsKK3MvXi4qXFtcKC4qXCldKS9cMS9wCitxCit9JyAke2NvbmZpZ3VyZV9hY31gCisgIGdldHRleHRfdmVyc19udW09YGVjaG8gIiRnZXR0ZXh0X3ZlcnMiIHwgY3Z0dmVyYAorZWxzZQorICBnZXR0ZXh0X3ZlcnM9Im4vYSIKK2ZpCisKK2lmIFsgLXogIiRhdXRvY29uZl92ZXJzIiAtbyAteiAiJGF1dG9tYWtlX3ZlcnMiIC1vIC16ICIkZ2V0dGV4dF92ZXJzIiBdCit0aGVuCisgIGVjaG8gIioqRXJyb3IqKjogdmVyc2lvbiBpbmZvcm1hdGlvbiBub3QgZm91bmQgaW4gIlxgJHtjb25maWd1cmVfYWN9XCciLiIgPiYyCisgIGV4aXQgMQorZmkKKworCitpZiBjaGVja192ZXJzaW9uICRBVVRPQ09ORiAkYXV0b2NvbmZfdmVyc19udW0gJGF1dG9jb25mX3ZlcnMgOyB0aGVuCisgICAgY2hlY2tfdmVyc2lvbiAkQVVUT0hFQURFUiAkYXV0b2NvbmZfdmVyc19udW0gJGF1dG9jb25mX3ZlcnMgYXV0b2NvbmYKK2ZpCitpZiBjaGVja192ZXJzaW9uICRBVVRPTUFLRSAkYXV0b21ha2VfdmVyc19udW0gJGF1dG9tYWtlX3ZlcnM7IHRoZW4KKyAgY2hlY2tfdmVyc2lvbiAkQUNMT0NBTCAkYXV0b21ha2VfdmVyc19udW0gJGF1dG9jb25mX3ZlcnMgYXV0b21ha2UKK2ZpCitpZiBbICIkZ2V0dGV4dF92ZXJzIiAhPSAibi9hIiBdOyB0aGVuCisgIGlmIGNoZWNrX3ZlcnNpb24gJEdFVFRFWFQgJGdldHRleHRfdmVyc19udW0gJGdldHRleHRfdmVyczsgdGhlbgorICAgIGNoZWNrX3ZlcnNpb24gJE1TR01FUkdFICRnZXR0ZXh0X3ZlcnNfbnVtICRnZXR0ZXh0X3ZlcnMgZ2V0dGV4dAorICBmaQorZmkKKworaWYgWyAiJERJRSIgPSAieWVzIiBdOyB0aGVuCisgICAgY2F0IDw8RU9GCisKK05vdGUgdGhhdCB5b3UgbWF5IHVzZSBhbHRlcm5hdGl2ZSB2ZXJzaW9ucyBvZiB0aGUgdG9vbHMgYnkgc2V0dGluZwordGhlIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBzZWUgUkVBRE1FLkdJVCBmb3IgZGV0YWlscy4KKworRU9GCisgICAgZGllX3AKK2ZpCisKKyMgQ2hlY2sgdGhlIGdpdCBzZXR1cC4KK2lmIFsgLWQgLmdpdCBdOyB0aGVuCisgIENQPSJjcCAtYSIKKyAgWyAteiAiJHtTSUxFTlR9IiBdICYmIENQPSIkQ1AgLXYiCisgIGlmIFsgLWYgLmdpdC9ob29rcy9wcmUtY29tbWl0LnNhbXBsZSAtYSAhIC1mIC5naXQvaG9va3MvcHJlLWNvbW1pdCBdIDsgdGhlbgorICAgIFsgLXogIiR7U0lMRU5UfSIgXSAmJiBjYXQgPDxFT0YKKyoqKiBBY3RpdmF0aW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UgZ2l0IHByZS1jb21taXQgaG9vay4gKioqCisgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoaXMgdGhyZWFkOgorICAgICAgaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL2Rlc2t0b3AtZGV2ZWwtbGlzdC8yMDA5LU1heS9tc2cwMDA4NGh0bWwKKyAgICBUbyBkZWFjdGl2YXRlIHRoaXMgcHJlLWNvbW1pdCBob29rIGFnYWluIG1vdmUgLmdpdC9ob29rcy9wcmUtY29tbWl0CisgICAgYW5kIC5naXQvaG9va3MvcHJlLWNvbW1pdC5zYW1wbGUgb3V0IG9mIHRoZSB3YXkuCitFT0YKKyAgICAgICRDUCAuZ2l0L2hvb2tzL3ByZS1jb21taXQuc2FtcGxlIC5naXQvaG9va3MvcHJlLWNvbW1pdAorICAgICAgY2htb2QgK3ggIC5naXQvaG9va3MvcHJlLWNvbW1pdAorICBmaQorCisgIGlmIFsgIiRnZXR0ZXh0X3ZlcnMiICE9ICJuL2EiIF07IHRoZW4KKyAgICB0bXA9JChnaXQgY29uZmlnIC0tZ2V0IGZpbHRlci5jbGVhbnBvLmNsZWFuKQorICAgIGlmIFsgIiR0bXAiICE9IFwKKyAgICAgICAgICAiYXdrICcvXlwiUE9ULUNyZWF0aW9uLURhdGU6LyYmIXN7cz0xO25leHR9OyEvXiM6IC97cHJpbnR9JyIgXQorICAgIHRoZW4KKyAgICAgIGluZm8gIioqKiBBZGRpbmcgR0lUIGZpbHRlci5jbGVhbnBvLmNsZWFuIGNvbmZpZ3VyYXRpb24uIgorICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBmaWx0ZXIuY2xlYW5wby5jbGVhbiBcCisgICAgICAgICJhd2sgJy9eXCJQT1QtQ3JlYXRpb24tRGF0ZTovJiYhc3tzPTE7bmV4dH07IS9eIzogL3twcmludH0nIgorICAgIGZpCisgIGZpCisgIGlmIFsgLWYgYnVpbGQtYXV4L2dpdC1ob29rcy9jb21taXQtbXNnIC1hICEgLWYgLmdpdC9ob29rcy9jb21taXQtbXNnIF0gOyB0aGVuCisgICAgICBbIC16ICIke1NJTEVOVH0iIF0gJiYgY2F0IDw8RU9GCisqKiogQWN0aXZhdGluZyBjb21taXQgbG9nIG1lc3NhZ2UgY2hlY2sgaG9vay4gKioqCitFT0YKKyAgICAgICRDUCBidWlsZC1hdXgvZ2l0LWhvb2tzL2NvbW1pdC1tc2cgLmdpdC9ob29rcy9jb21taXQtbXNnCisgICAgICBjaG1vZCAreCAgLmdpdC9ob29rcy9jb21taXQtbXNnCisgIGZpCitmaQorCithY2xvY2FsX2ZsYWdzPSItSSBtNCIKK2lmIFsgLW4gIiR7ZXh0cmFfYWNsb2NhbF9mbGFnc30iIF07IHRoZW4KKyAgYWNsb2NhbF9mbGFncz0iJHthY2xvY2FsX2ZsYWdzfSAke2V4dHJhX2FjbG9jYWxfZmxhZ3N9IgorZmkKK2lmIFsgLW4gIiR7QUNMT0NBTF9GTEFHU30iIF07IHRoZW4KKyAgYWNsb2NhbF9mbGFncz0iJHthY2xvY2FsX2ZsYWdzfSAke0FDTE9DQUxfRkxBR1N9IgorZmkKK2luZm8gIlJ1bm5pbmcgJEFDTE9DQUwgJHthY2xvY2FsX2ZsYWdzfSAuLi4iCiskQUNMT0NBTCAke2FjbG9jYWxfZmxhZ3N9CitpbmZvICJSdW5uaW5nIGF1dG9oZWFkZXIuLi4iCiskQVVUT0hFQURFUgoraW5mbyAiUnVubmluZyBhdXRvbWFrZSAtLWdudSAuLi4iCiskQVVUT01BS0UgLS1nbnU7CitpbmZvICJSdW5uaW5nIGF1dG9jb25mJHtGT1JDRX0gLi4uIgorJEFVVE9DT05GJHtGT1JDRX0KKworaW5mbyAiWW91IG1heSBub3cgcnVuOiR7YW1fbGZ9ICAke2ZpbmFsX2luZm99IgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L0NoYW5nZUxvZy0yMDExIGIvYnVpbGQtYXV4L0NoYW5nZUxvZy0yMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDMyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvQ2hhbmdlTG9nLTIwMTEKQEAgLTAsMCArMSwxNjkgQEAKKzIwMTEtMTItMDEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlOQjogQ2hhbmdlTG9nIGZpbGVzIGFyZSBubyBsb25nZXIgbWFudWFsbHkgbWFpbnRhaW5lZC4gIFN0YXJ0aW5nCisJb24gRGVjZW1iZXIgMXN0LCAyMDExIHdlIHB1dCBjaGFuZ2UgaW5mb3JtYXRpb24gb25seSBpbiB0aGUgR0lUCisJY29tbWl0IGxvZywgYW5kIGdlbmVyYXRlIGEgdG9wLWxldmVsIENoYW5nZUxvZyBmaWxlIGZyb20gbG9ncyBhdAorCSJtYWtlIGRpc3QiLiAgU2VlIGRvYy9IQUNLSU5HIGZvciBkZXRhaWxzLgorCisyMDAzLTEyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXV0b2dlbi5zaCwgY29uZmlnLnN1YiwgaW5zdGFsbC1zaCwgbWtpbnN0YWxsZGlycywgY29uZmlnLmd1ZXNzLAorCSogbWlzc2luZzogUmVtb3ZlZAorCisyMDAzLTEwLTMxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXV0b2dlbi5zaDogQWxsb3cgdG8gb3ZlcnJpZGUgdGhlIHRvb2wgbmFtZS4gIERvIG5vdCBydW4KKwlsaWJ0b29saXplLiBVcGRhdGUgcmVxdWlyZWQgdmVyc2lvbiBudW1iZXJzLgorCisyMDAzLTA3LTMwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBVcGRhdGVkIGZyb20gZnRwLmdudS5vcmcvZ251L2NvbmZpZy8KKworMjAwMy0wNy0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGF1dG9nZW4uc2g6IFVuZG8gbGFzdCBjaGFuZ2UuCisJKiBhdXRvZ2VuLnNoOiBSZW1vdmUgLWEgYXJndW1lbnQgZm9yIGF1dG9tYWtlLgorCisyMDAzLTAzLTA2ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBhdXRvZ2VuLnNoIChydW4pOiBOZXcgZnVuY3Rpb24uCisJTGV0IGF1dG9tYWtlIHJ1biB3aXRoIC1hIGZvciBhZGRpbmcgbWlzc2luZyBmaWxlcyBhdXRvbWF0aWNhbGx5CisKKzIwMDItMTEtMTIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWcuc3ViLCBjb25maWcuZ3Vlc3M6IFVwZGF0ZWQgZnJvbSBmdHAuZ251Lm9yZy9nbnUvY29uZmlnCisJdG8gdmVyc2lvbiAyMDAyLTExLTA4LgorCisyMDAyLTA1LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXV0b2dlbi5zaDogUmVxdWlyZSB2ZXJzaW9uIDIuNTMgb2YgYXV0b2NvbmYKKworMjAwMS0xMi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGRpc3RmaWxlczogUmVtb3ZlIGZpbGVzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IGF1dG9tYWtlLgorCisyMDAxLTA4LTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXV0b2dlbi5zaDogQWRkZWQgLS1idWlsZC13MzIgb3B0aW9uLgorCisyMDAxLTA1LTI4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZGIyaHRtbC5pbjogUmVtb3ZlZC4KKwkqIGRiMmFueTogTmV3LiAgVGFrZW4gZnJvbSBHUEgKKworTW9uIEp1bCAxNyAxNjozNTo0NyBDRVNUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAPgorCisgICAgICAgICogY29uZmlnLmd1ZXMsIGNvbmZpZy5zdWI6IFN1cHBvcnQgZm9yIHMzOTAtaWJtLWxpbnV4LWdudTsgdGhhbmtzCisgICAgICAgIHRvIEhvbGdlciBTbW9saW5za2kuICBBZGQgc3VwcG9ydCBmb3IgUU5YOyBieSBTYW0gUm9iZXJ0cy4KKworVHVlIE9jdCAyNiAxNDoxMDoyMSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIGNvbW1pdDogUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGxpbmVzIHdoZW4gY29weWluZworCUNoYW5nZXMgdG8gQ2hhbmdlbG9nCisKK1dlZCBTZXAgMTUgMTY6MjI6MTcgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBnbnVwZy5zcGVjOiBBZGQgUG9ydHVndWVzZSBkZXNjcmlwdGlvbgorCitUaHUgU2VwICAyIDE2OjQwOjU1IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogbWtkaWZmOiBjaGFuZ2VkIGZvcm1hdCBvZiBkaWZmIGZpbGUgbmFtZSBhbmQgbWFkZSBzY3JpcHQgbW9yZQorCWdlbmVyYWwuCisKK1dlZCBBdWcgIDQgMTA6MzQ6MTggQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZWQgZnJvbSBnbnUvY29tbW9uIGFuZCBhcHBsaWVkIG15IGVteCBwYXRjaCBhZ2Fpbi4KKwkqIGNvbmZpZy5zdWI6IFVwZGF0ZWQgZnJvbSBnbnUvY29tbW9uLgorCitXZWQgSnVsIDE0IDE5OjQyOjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogbHRtYWluLnNoLCBsdGNvbmZpZy5zaCA6IFVwZGF0ZWQgdG8gbGlidG9vbCAxLjMuMworCitNb24gSnVsIDEyIDE0OjU1OjM0IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYXV0b2dlbi5zaDogUnVuIGxpYnRvb2xpemUKKworU2F0IE1heSAyMiAyMjo0NzoyNiBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGF1dG9nZW4uc2g6IEZpeGVkIHRoZSBlcnJvciBtZXNzYWdlIGZvciBhIG1pc3NpbmcgbGlidG9vbC4KKworU2F0IE1heSAgOCAxOToyODowOCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1raW5zdGFsbGRpcnMsIGluc3RhbGwtc2g6IE5ldyBmcm9tIEdOVSByZXBvc2l0b3J5CisJKiBjb25maWcuc3ViLCBjb25maWcuZ3Vlc3M6IE1lcmdlZCB3aXRoIHJlcCB2ZXJzaW9uLgorCitTdW4gTWFyIDE0IDE5OjM0OjM2IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhdXRvZ2VuLnNoOiBBZGQgYSBjaGVjayBmb3IgbGlidG9vbCBiZWNhdXNlIHNvbWUgYXV0b2NvbmYgbWFjcm9zCisJYXJlIG5lZWRlZC4KKworTW9uIEZlYiAyMiAyMDowNDowMCBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYXV0b2dlbi5zaDogRW5oYW5jZWQgdGhlIHZlcnNpb24gdGVzdGluZyBjb2RlIChQaGlsaXBwZSBMYWxpYmVydGUpCisKKwkqIG1rd2VicGFnZTogRWRpdHMgdGhlIGJ1Z2xpc3QuCisKK1NhdCBGZWIgMTMgMTI6MDQ6NDMgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGF1dG9nZW4uc2g6IE5vdyB1c2VzIGdldHRleHRpemUKKworV2VkIEZlYiAxMCAxNzoxNTozOSBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlnLnN1YiwgY29uZmlnLmd1ZXNzOiBTdXBwb3J0IGkzODYtZW14LW9zMgorCitTdW4gSmFuIDE3IDExOjA0OjMzIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBhdXRvZ2VuLnNoOiBOb3cgY2hlY2tzIGZvciBpbnN0YWxsZWQgZ2V0dGV4dAorCitTYXQgSmFuIDE2IDA5OjI3OjMwIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWcuZ3Vlc3MgKG02OGstYXRhcmktbWludCk6IE5ldy4KKwkqIGNvbmZpZy5zdWI6IEFkZCBzdXBwb3J0IGZvciBhdGFyaXN0LU1pTlQKKworV2VkIEphbiAxMyAxMjo0OTozNiBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZ251cGcuc3BlYy5pbjogTmV3CisJKiBnbnVwZy5zcGVjOiBSZW1vdmVkCisKK1dlZCBEZWMgMjMgMTM6MTg6MTQgQ0VUIDE5OTggIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGdudXBnLnNwZWM6IFVwZGF0ZWQgdmVyc2lvbiBieSBGYWJpbyBDb2F0dGkKKworVGh1IERlYyAxNyAxODozMToxNSBDRVQgMTk5OCAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZ251cGcuc3BlYzogTmV3IHZlcnNpb24gYnkgUmV1YmVuIFN1bW5lciBhbmQgZGlkIHNvbWUgbW9yZQorCWNoYW5nZXMuCisKK0ZyaSBOb3YgMjcgMTI6Mzk6MjkgQ0VUIDE5OTggIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKworCSogY29tbWl0OiBOZXcKKworCitGcmkgTm92IDIwIDEyOjAxOjU3IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1rZGlmZjogc2lnbnMgdGhlIHBhdGNoIGZpbGUKKworU2F0IE9jdCAxNyAxNjoxMDoxNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBhdXRvZ2VuLnNoOiBOZXcuCisKK1dlZCBPY3QgMTQgMDk6NTU6MjUgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlnLmd1ZXNzIChGcmVlQlNEKTogQ2hhbmdlcyBmcm9tIEp1biBLdXJpeWFtYSB0byBzdXBwb3J0IEVMRgorCSogY29uZmlnLnN1YjogKGZyZWVic2QpOiBBZGQgdG8gbWF5YmVfb3MKKworCisgIENvcHlyaWdodCAxOTk4LDE5OTksMjAwMCwyMDAxLDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitMb2NhbCBWYXJpYWJsZXM6CitidWZmZXItcmVhZC1vbmx5OiB0CitFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvY29tcGlsZSBiL2J1aWxkLWF1eC9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMWQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvY29tcGlsZQpAQCAtMCwwICsxLDE0MiBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA1LTE0LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCitSZW1vdmUgYC1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CitlYXQ9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyBgLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyBgLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLmMkLy5vLydgCisKKyMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KKyMgTm90ZTogdXNlIGBbLy4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQorIyB0aGF0IHdlIGFyZSB1c2luZyBmb3IgdGhlIC5vIGZpbGUuICBBbHNvLCBiYXNlIHRoZSBuYW1lIG9uIHRoZSBleHBlY3RlZAorIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCitsb2NrZGlyPWBlY2hvICIkY29maWxlIiB8IHNlZCAtZSAnc3xbLy4tXXxffGcnYC5kCit3aGlsZSB0cnVlOyBkbworICBpZiBta2RpciAiJGxvY2tkaXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGJyZWFrCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKyMgRklYTUU6IHJhY2UgY29uZGl0aW9uIGhlcmUgaWYgdXNlciBraWxscyBiZXR3ZWVuIG1rZGlyIGFuZCB0cmFwLgordHJhcCAicm1kaXIgJyRsb2NrZGlyJzsgZXhpdCAxIiAxIDIgMTUKKworIyBSdW4gdGhlIGNvbXBpbGUuCisiJEAiCityZXQ9JD8KKworaWYgdGVzdCAtZiAiJGNvZmlsZSI7IHRoZW4KKyAgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2NvbmZpZy5ndWVzcyBiL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWFmZDY3NgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MKQEAgLTAsMCArMSwxNTY4IEBACisjISAvYmluL3NoCisjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDEzLTExLTI5JworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorIworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCisjCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKKyMKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB3aXRoIGEgQ2hhbmdlTG9nIGVudHJ5IHRvIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcuCisKKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworY2FzZSAiJHtVTkFNRV9TWVNURU19IiBpbgorTGludXh8R05VfEdOVS8qKQorCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KKwkjIFdlIGNvdWxkIHByb2JhYmx5IHRyeSBoYXJkZXIuCisJTElCQz1nbnUKKworCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwljYXQgPDwtRU9GID4gJGR1bW15LmMKKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQorCUxJQkM9dWNsaWJjCisJI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisJTElCQz1kaWV0bGliYworCSNlbHNlCisJTElCQz1nbnUKKwkjZW5kaWYKKwlFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCTs7Citlc2FjCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgLXEgX19FTEZfXworCQl0aGVuCisJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KKwkJICAgIG9zPW5ldGJzZAorCQllbHNlCisJCSAgICBvcz1uZXRic2RlbGYKKwkJZmkKKwkJOzsKKwkgICAgKikKKwkJb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOkJpdHJpZzoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL0JpdHJpZy4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1iaXRyaWcke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgorCWV4aXRjb2RlPSQ/CisJdHJhcCAnJyAwCisJZXhpdCAkZXhpdGNvZGUgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisJZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisJCSAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorCQkJICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisJCQkgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorCQkJZXNhYyA7OworCQkgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsKKwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWNhc2UgJHtVTkFNRV9QUk9DRVNTT1J9IGluCisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1c2NCo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3c2NAorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOk1TWVMqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLSR7TElCQ31gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFhcmNoNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisJVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCWVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmkKKwkgICAgZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaWhmCisJICAgIGZpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaGV4YWdvbjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMWs6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYWRyZTpMaW51eDoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzY0bGU6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwY2xlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHRpbGUqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHZheDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKwkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCisJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KKwllY2hvIGkzODYtc2VxdWVudC1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorCSMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKwkjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisJIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKwkjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorCSMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisJIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikJIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKwkJCSMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKwllY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisJZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkJZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6SGFpa3U6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24taGFpa3UKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgorCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYworCWZpCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCWlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQorCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtKjpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKwllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworICAgIHg4Nl82NDpWTWtlcm5lbDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZXN4CisJZXhpdCA7OworZXNhYworCitldmFsICRzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiRkdW1teS5jIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisJIjQiCisjZWxzZQorCSIiCisjZW5kaWYKKwkpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQorICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKKyAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTmVYVCkKKyNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKKyNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKKyNlbmRpZgorICBpbnQgdmVyc2lvbjsKKyAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOworICBpZiAodmVyc2lvbiA8IDQpCisgICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZWxzZQorICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQorI2lmIGRlZmluZWQgKFVNQVhWKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpZiBkZWZpbmVkIChDTVUpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQorICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChzZXF1ZW50KQorI2lmIGRlZmluZWQgKGkzODYpCisgIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjaWYgZGVmaW5lZCAobnMzMjAwMCkKKyAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKworICAgIHVuYW1lKCZ1bik7CisKKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7CisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAodmF4KQorIyBpZiAhZGVmaW5lZCAodWx0cml4KQorIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICBpZiBkZWZpbmVkIChCU0QpCisjICAgaWYgQlNEID09IDQzCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOworIyAgIGVsc2UKKyMgICAgaWYgQlNEID09IDE5OTAwNgorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjICAgIGVsc2UKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCisgIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisgIGV4aXQgKDEpOworfQorRU9GCisKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisKKyMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KKwordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9CisKKyMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKKworaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KK3RoZW4KKyAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgorICAgIGMxKikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzIqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgYzM0KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMzOCopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjNCopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGVzYWMKK2ZpCisKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKKworVGhpcyBzY3JpcHQsIGxhc3QgbW9kaWZpZWQgJHRpbWVzdGFtcCwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3UKK2Rvd25sb2FkIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgY29uZmlnIHNjcmlwdHMgZnJvbQorCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorYW5kCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9idWlsZC1hdXgvY29uZmlnLnJwYXRoIGIvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTQ3YzY4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY2NiBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBkYXJ3aW4qKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgICAgOzsKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBpY2MqIHwgZWNjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBwZ2NjIHwgcGdmNzcgfCBwZ2Y5MCkKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgQyopCisgICAgICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgcmRvcyopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKyAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAorICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbm5vdCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIDs7CisgICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgZmkKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4MyopCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgICAgICAgICAgICA6CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAorICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgeGxjKikKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgZGd1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZDIqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBocHV4OSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIG9zZjMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9zZjQqIHwgb3NmNSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICAgICAgc25pKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICAgICAgOzsKKyAgICAgICAgc2llbWVucykKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICA7OworICAgICAgICBtb3Rvcm9sYSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN5c3Y0LjMqKQorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgICAgIGxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICBlc2FjCitmaQorCisjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4NCogfCBhaXg1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYmVvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYnNkaVs0NV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgIDs7CisgIGRhcndpbiogfCByaGFwc29keSopCisgICAgc2hyZXh0PS5keWxpYgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGRndXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2QxKikKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBmcmVlYnNkWzEyM10qKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnIDs7CisgICAgICAqKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaWE2NCopCisgICAgICAgIHNocmV4dD0uc28KKyAgICAgICAgOzsKKyAgICAgIGhwcGEqNjQqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGludGVyaXhbMy05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgJExEIGluCisgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OworICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBudG8tcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgb3MyKikKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICByZG9zKikKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB1dHM0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorCitFT0YKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9jb25maWcuc3ViIGIvYnVpbGQtYXV4L2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjFjYjRiYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTc5MyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDEzLTEwLTAxJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB3aXRoIGEgQ2hhbmdlTG9nIGVudHJ5IHRvIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICBhbmRyb2lkLWxpbnV4KQorICAgIG9zPS1saW51eC1hbmRyb2lkCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KjE3OCkKKwkJb3M9LWx5bnhvczE3OAorCQk7OworCS1seW54KjUpCisJCW9zPS1seW54b3M1CisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcmNlYiBcCisJfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyLThdIHwgYXJtdlszLThdW2xiXSB8IGFybXY3W2FybV0gXAorCXwgYXZyIHwgYXZyMzIgXAorCXwgYmUzMiB8IGJlNjQgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjODA1MSB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGVwaXBoYW55IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBoZXhhZ29uIFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBrMW9tIFwKKwl8IGxlMzIgfCBsZTY0IFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWljcm9ibGF6ZWVsIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcGVuOCBcCisJfCBvcjFrIHwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKwl8IHB5cmFtaWQgXAorCXwgcmw3OCB8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjODA1MS0qIHwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGhleGFnb24tKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgazFvbS0qIFwKKwl8IGxlMzItKiB8IGxlNjQtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogXAorCXwgbWljcm9ibGF6ZS0qIHwgbWljcm9ibGF6ZWVsLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIHwgbmlvczJlYi0qIHwgbmlvczJlbC0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3BlbjgtKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUqLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAorCXwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OworCWM1NHgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNTV4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzZ4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltc3lzKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1zeXMKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5hY2wpCisJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCisJCW9zPS1uYWNsCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluZW8tdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5lby10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMgfCBwcGNiZSkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MgfCByZG9zNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcmRvczMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyb202OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwlybVs0Nl0wMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKKwkJOzsKKwlydHBjIHwgcnRwYy0qKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKKwlzYTI5MjAwKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2RlKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKKwkJb3M9LWVsZgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKKwlzZXF1ZW50KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQk7OworCXNoKQorCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCXNoNWVsKQorCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KKwkJOzsKKwlzaDY0KQorCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgorCQk7OworCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXNwczcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MgorCQk7OworCXNwdXIpCisJCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCisJCTs7CisJc3QyMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCTs7CisJc3RyYXR1cykKKwkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJb3M9LXN5c3Y0CisJCTs7CisJc3Ryb25nYXJtLSogfCB0aHVtYi0qKQorCQliYXNpY19tYWNoaW5lPWFybS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXR4MzkpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgorCQk7OworCXR4MzllbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKKwkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKKwl1ZGkyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXVsdHJhMykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQlvcz0tc3ltMQorCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CisJdmF4dikKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS1zeXN2CisJCTs7CisJdm1zKQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXZtcworCQk7OworCXZwcCp8dnh8dngtKikKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKKwl2eHdvcmtzOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczY4KQorCQliYXNpY19tYWNoaW5lPW02OGstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL154c2NhbGUvYXJtLydgCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwlub25lKQorCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorCQlvcz0tbm9uZQorCQk7OworCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCisjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJOzsKKwlvcDUwbikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCW9wNjBjKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJcm9tcCkKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCW1taXgpCisJCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAorCQk7OworCXJzNjAwMCkKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCisJCTs7CisJdmF4KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJOzsKKwlwZHAxMCkKKwkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAorCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KKwkJOzsKKwlwZHAxMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKKwkJOzsKKwl3ZTMyaykKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgorCQk7OworCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCWN5ZHJhKQorCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKKwkJOzsKKwlvcmlvbikKKwkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKKwkJOzsKKwlvcmlvbjEwNSkKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAorCQk7OworCW1hYyB8IG1wdyB8IG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQk7OworCXBtYWMgfCBwbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCisJCTs7CisJKi11bmtub3duKQorCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgorCQk7OworCSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi1kaWdpdGFsKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCisJCTs7CisJKi1jb21tb2RvcmUqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAorCQk7OworCSopCisJCTs7Citlc2FjCisKKyMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCitpZiBbIHgiJG9zIiAhPSB4IiIgXQordGhlbgorY2FzZSAkb3MgaW4KKwkjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworCSMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLWF1cm9yYXV4KQorCQlvcz0tYXVyb3JhdXgKKwkJOzsKKwktc29sYXJpczEgfCAtc29sYXJpczEuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQk7OworCS1zb2xhcmlzKQorCQlvcz0tc29sYXJpczIKKwkJOzsKKwktc3ZyNCopCisJCW9zPS1zeXN2NAorCQk7OworCS11bml4d2FyZSopCisJCW9zPS1zeXN2NC4ydXcKKwkJOzsKKwktZ251L2xpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCisJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAorCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIHwgLXBsYW45KiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC1tdXNsKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKwktb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1uYWNsKikKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCWM4MDUxLSopCisJCW9zPS1lbGYKKwkJOzsKKwloZXhhZ29uLSopCisJCW9zPS1lbGYKKwkJOzsKKwl0aWM1NHgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NXgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eC0qKQorCQlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKwltZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMWstKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktY25rKnwtYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9kZXBjb21wIGIvYnVpbGQtYXV4L2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E1ZWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9kZXBjb21wCkBAIC0wLDAgKzEsNTg0IEBACisjISAvYmluL3NoCisjIGRlcGNvbXAgLSBjb21waWxlIGEgcHJvZ3JhbSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBhcyBzaWRlLWVmZmVjdHMKKworc2NyaXB0dmVyc2lvbj0yMDA2LTEwLTE1LjE4CisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCisgIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJkZXBjb21wICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCisjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQorIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCisgICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgorICBnY2NmbGFnPS1NCisgIGRlcG1vZGU9Z2NjCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKyAgIGRhc2htZmxhZz0teE0KKyAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKK2ZpCisKK2Nhc2UgIiRkZXBtb2RlIiBpbgorZ2NjMykKKyMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0CisjIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQorIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgorIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KKyMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQorIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKKyMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKKyAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7CisgICAgZXNhYworICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBzaGlmdCAjICRhcmcKKyAgZG9uZQorICAiJEAiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBtdiAiJHRtcGRlcGZpbGUiICIkZGVwZmlsZSIKKyAgOzsKKworZ2NjKQorIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKKyMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKKyMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KKyMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGFscGhhPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyMjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSBgZGVsZXRlZCBoZWFkZXIgZmlsZScgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLgorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHApCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitzZ2kpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgIi1XcCwtTUR1cGRhdGUsJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICAiJEAiIC1NRHVwZGF0ZSAiJHRtcGRlcGZpbGUiCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKworICAgICMgQ2xpcCBvZmYgdGhlIGluaXRpYWwgZWxlbWVudCAodGhlIGRlcGVuZGVudCkuICBEb24ndCB0cnkgdG8gYmUKKyAgICAjIGNsZXZlciBhbmQgcmVwbGFjZSB0aGlzIHdpdGggc2VkIGNvZGUsIGFzIElSSVggc2VkIHdvbid0IGhhbmRsZQorICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgorICAgICMgSVJJWCA2LjIgc2VkLCA4MTkyIGluIElSSVggNi41KS4gIFdlIGFsc28gcmVtb3ZlIGNvbW1lbnQgbGluZXM7CisgICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgYCM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQorICAgICMgZGVwZW5kZW5jeSBsaW5lLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIHwgXAorICAgIHRyICcKKycgJyAnID4+ICRkZXBmaWxlCisgICAgZWNobyA+PiAkZGVwZmlsZQorCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCisgICA+PiAkZGVwZmlsZQorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgYCRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIHN0cmlwcGVkPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9cKC4qXClcLi4qJC9cMS8nYAorICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAtV2MsLU0KKyAgZWxzZQorICAgICIkQCIgLU0KKyAgZmkKKyAgc3RhdD0kPworCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiA6CisgIGVsc2UKKyAgICBzdHJpcHBlZD1gZWNobyAiJHN0cmlwcGVkIiB8IHNlZCAncyxeLiovLCwnYAorICAgIHRtcGRlcGZpbGU9IiRzdHJpcHBlZC51IgorICBmaQorCisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBvdXRuYW1lPSIkc3RyaXBwZWQubyIKKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgICBzZWQgLWUgInMsXiRvdXRuYW1lOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgc2VkIC1lICJzLF4kb3V0bmFtZTogXCguKlwpJCxcMTosIiA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaWNjKQorICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKyAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCisgICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBmb28ubzogc3ViL2Zvby5oCisgICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgorICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKKyAgIyAgICBzdWIvZm9vLmM6CisgICMgICAgc3ViL2Zvby5oOgorICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKworICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKKyAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtbmUgJzIsJHs7IHMvXiAqLy87IHMvIFxcKiQvLzsgcy8kLzovOyBwO30nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICA7OworCit0cnU2NCkKKyAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KKyAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorCisgICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKKyAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCisgICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KKyAgICAgICMKKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93CisgICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bworICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgICAiJEAiIC1XYywtTUQKKyAgIGVsc2UKKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgZG8KKyAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgICBkb25lCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6CisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICIkQCIgJGRhc2htZmxhZyB8CisgICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubworICBmb3IgYXJnIGluICIkQCI7IGRvCisgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgIG5vKQorICAgICAgc2V0ICIiOyBzaGlmdAorICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKKycgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICIkQCIgLUUgfAorICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKyAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtbywKKyAgIyBiZWNhdXNlIHdlIG11c3QgdXNlIC1vIHdoZW4gcnVubmluZyBsaWJ0b29sLgorICAiJEAiIHx8IGV4aXQgJD8KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKwlzZXQgZm5vcmQgIiRAIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgICopCisJc2V0IGZub3JkICIkQCIgIiRhcmciCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBkb25lCisgICIkQCIgLUUgfAorICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OmVjaG8gImBjeWdwYXRoIC11IFxcIlwxXFwiYCI6cCcgfCBzb3J0IHwgdW5pcSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbm9uZSkKKyAgZXhlYyAiJEAiCisgIDs7CisKKyopCisgIGVjaG8gIlVua25vd24gZGVwbW9kZSAkZGVwbW9kZSIgMT4mMgorICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9naXQtbG9nLWZpeCBiL2J1aWxkLWF1eC9naXQtbG9nLWZpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTNmZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2dpdC1sb2ctZml4CkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIHVzZWQgdmlhIGdpdGxvZy10by1jaGFuZ2Vsb2cncyAtLWFtZW5kPUZJTEUKKyMgb3B0aW9uLiAgSXQgc3BlY2lmaWVzIHdoYXQgY2hhbmdlcyB0byBtYWtlIHRvIGVhY2ggZ2l2ZW4gU0hBMSdzIGNvbW1pdAorIyBsb2cgYW5kIG1ldGFkYXRhLCB1c2luZyBQZXJsLWV2YWwnYWJsZSBleHByZXNzaW9ucy4KKworZWI0OTM3OTE0ZGIzZmI3MzE3NTAyZTk3ZTRmMGU0MGMxODU3ZjU5ZAorIyBGaXggYmFkIGZvcm1hdHRlZCBlbnRyeSBkYXRlZCAyMDEzLTA1LTIwCitzLyg/cyltcGlfc3ViLiokL2NpcGhlcjogRml4IHNlZ3YgaW4gbGFzdCBFQ0MgY2hhbmdlLgorKiBjaXBoZXJcL2VjYy5jIChnZW5lcmF0ZV9rZXkpOiBNYWtlIHN1cmUgUiBpcyBpbml0aWFsaXplZC4vCisKKzI5NmYzOGEyYmQyZTI1Nzg4NjQzYTQyZTQ4ODFmYWVkMDA4ODRhNDAKKyMgRml4IGJhZCBmb3JtYXR0ZWQgZW50cnkgZGF0ZWQgMjAxMy0wNS0wOQorcy8oP3MpR2VuZXJhdGUgRUNDLiokL2NpcGhlcjogR2VuZXJhdGUgY29tcGxpYW50IEVDQyBrZXlzLgorKiBjaXBoZXJcL2VjYy5jIChnZW5lcmF0ZV9rZXkpOiBNYWtlIHN1cmUgYSBrZXkgaXMgY29tcGxpYW50IGZvcgordXNpbmcgdGhlIGNvbXBhY3QgcmVwcmVzZW50YXRpb24uLwpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyIGIvYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWZlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIKQEAgLTAsMCArMSwxNCBAQAorCisyMDExLTEyLTAxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCU5COiBDaGFuZ2VzIGRvbmUgYmVmb3JlIERlY2VtYmVyIDFzdCwgMjAxMSBhcmUgZGVzY3JpYmVkIGluCisJcGVyIGRpcmVjdG9yeSBmaWxlcyBuYW1lZCBDaGFuZ2VMb2ctMjAxMS4gIFNlZSBkb2MvSEFDS0lORyBmb3IKKwlkZXRhaWxzLgorCisgICAgICAgIC0tLS0tCisJQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisJQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSBhbmQvb3IgdGhlIG9yaWdpbmFsIEdJVAorCWNvbW1pdCBsb2cgbWVzc2FnZXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorCXBlcm1pdHRlZCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlCisJcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2luc3RhbGwtc2ggYi9idWlsZC1hdXgvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NzgxYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L2luc3RhbGwtc2gKQEAgLTAsMCArMSw1MjAgQEAKKyMhL2Jpbi9zaAorIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9JHtET0lUUFJPRy19CitpZiB0ZXN0IC16ICIkZG9pdCI7IHRoZW4KKyAgZG9pdF9leGVjPWV4ZWMKK2Vsc2UKKyAgZG9pdF9leGVjPSRkb2l0CitmaQorCisjIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOworIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KKworY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQorY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQorY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQorY21wcHJvZz0ke0NNUFBST0ctY21wfQorY3Bwcm9nPSR7Q1BQUk9HLWNwfQorbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQorbXZwcm9nPSR7TVZQUk9HLW12fQorcm1wcm9nPSR7Uk1QUk9HLXJtfQorc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQorCitwb3NpeF9nbG9iPSc/JworaW5pdGlhbGl6ZV9wb3NpeF9nbG9iPScKKyAgdGVzdCAiJHBvc2l4X2dsb2IiICE9ICI/IiB8fCB7CisgICAgaWYgKHNldCAtZikgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHBvc2l4X2dsb2I9CisgICAgZWxzZQorICAgICAgcG9zaXhfZ2xvYj06CisgICAgZmkKKyAgfQorJworCitwb3NpeF9ta2Rpcj0KKworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKKworY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CisKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQorbm9fdGFyZ2V0X2RpcmVjdG9yeT0KKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKKworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CisKKyAgICAtdCkgZHN0X2FyZz0kMgorCXNoaWZ0OzsKKworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworCisgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworCisgICAgLS0pCXNoaWZ0CisJYnJlYWs7OworCisgICAgLSopCWVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorCWV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICBkb25lCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKworICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgorICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCisgIGNhc2UgJG1vZGUgaW4KKyAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OworICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKKworICAgICpbMC03XSkKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICBjYXNlICRzcmMgaW4KKyAgICAtKikgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBkc3Q9JGRzdF9hcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICAgY2FzZSAkZHN0IGluCisgICAgICAtKikgZHN0PS4vJGRzdDs7CisgICAgZXNhYworCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWV4aXQgMQorICAgICAgZmkKKyAgICAgIGRzdGRpcj0kZHN0CisgICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAorICAgICAgZHN0ZGlyX3N0YXR1cz0wCisgICAgZWxzZQorICAgICAgIyBQcmVmZXIgZGlybmFtZSwgYnV0IGZhbGwgYmFjayBvbiBhIHN1YnN0aXR1dGUgaWYgZGlybmFtZSBmYWlscy4KKyAgICAgIGRzdGRpcj1gCisJKGRpcm5hbWUgIiRkc3QiKSAyPi9kZXYvbnVsbCB8fAorCWV4cHIgWCIkZHN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKwllY2hvIFgiJGRzdCIgfAorCSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXClbXi9dLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXCkkL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cKS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIHMvLiovLi87IHEnCisgICAgICBgCisKKyAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgICBkc3RkaXJfc3RhdHVzPSQ/CisgICAgZmkKKyAgZmkKKworICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCisKKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworCSAgKlswLTddKQorCSAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisJICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKwkgICAgICAtICR1bWFzayAlIDEwICUgNCArICR1bWFzayAlIDIKKwkgICAgYDs7CisJICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisJZXNhYworCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKKwllbHNlCisJICBta2Rpcl9tb2RlPQorCWZpCisKKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCisKKwkgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorCQlleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvZCIpID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCisJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKKwkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKwkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKwkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJLSopIHByZWZpeD0nLi8nOzsKKwkqKSAgcHJlZml4PScnOzsKKyAgICAgIGVzYWMKKworICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIKKworICAgICAgb0lGUz0kSUZTCisgICAgICBJRlM9LworICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mCisgICAgICBzZXQgZm5vcmQgJGRzdGRpcgorICAgICAgc2hpZnQKKyAgICAgICRwb3NpeF9nbG9iIHNldCArZgorICAgICAgSUZTPSRvSUZTCisKKyAgICAgIHByZWZpeGVzPQorCisgICAgICBmb3IgZAorICAgICAgZG8KKwl0ZXN0IC16ICIkZCIgJiYgY29udGludWUKKworCXByZWZpeD0kcHJlZml4JGQKKwlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorCSAgcHJlZml4ZXM9CisJZWxzZQorCSAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisJICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKwkgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCisJICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisJICBlbHNlCisJICAgIGNhc2UgJHByZWZpeCBpbgorCSAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKwkgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OworCSAgICBlc2FjCisJICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKwkgIGZpCisJZmkKKwlwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorCSMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisJICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKKwlvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCisKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgorCisgICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKKyAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4KKyAgICAgIHJtIC1mICIkZHN0dG1wIgorICAgIGVsc2UKKyAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKworICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICMgc3VwcG9ydCAtZi4KKyAgICAgIHsKKwkjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisJIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKwkjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCisJIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisJIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKwl7CisJICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisJICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisJICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKKwkgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKwkgIH0gfHwKKwkgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgorCSAgICAoZXhpdCAxKTsgZXhpdCAxCisJICB9CisJfSAmJgorCisJIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCisKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5zaCBiL2J1aWxkLWF1eC9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5NTk5YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9sdG1haW4uc2gKQEAgLTAsMCArMSw5NjY0IEBACisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC4yCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisjICAgICAgIC0tbm8td2FybiAgICAgICAgICAgIGRvbid0IGRpc3BsYXkgd2FybmluZyBtZXNzYWdlcworIyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisjICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyMgICAgICAgLS1uby12ZXJib3NlICAgICAgICAgZG9uJ3QgcHJpbnQgdGhlIGV4dHJhIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorIyAgICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisjICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyMgICAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisjCisjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKyMgYC0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgYE1PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKyMKKyMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCisjIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyMKKyMgICAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgICAgc2hlbGw6CQkkU0hFTEwKKyMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjQuMiBEZWJpYW4tMi40LjItMQorIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisjIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCisjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorCitQUk9HUkFNPWxpYnRvb2wKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0iMi40LjIgRGViaWFuLTIuNC4yLTEiCitUSU1FU1RBTVA9IiIKK3BhY2thZ2VfcmV2aXNpb249MS4zMzM3CisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworfQorCisjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorbHRfdXNlcl9sb2NhbGU9CitsdF9zYWZlX2xvY2FsZT0KK2ZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBcIlwkeyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgc2F2ZV8kbHRfdmFyPVwkJGx0X3ZhcgorICAgICAgICAgICRsdF92YXI9QworCSAgZXhwb3J0ICRsdF92YXIKKwkgIGx0X3VzZXJfbG9jYWxlPVwiJGx0X3Zhcj1cXFwkc2F2ZV9cJGx0X3ZhcjsgXCRsdF91c2VyX2xvY2FsZVwiCisJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisJZmkiCitkb25lCitMQ19BTEw9QworTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFIExDX0FMTAorCiskbHRfdW5zZXQgQ0RQQVRICisKKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworCisKKzogJHtDUD0iY3AgLWYifQordGVzdCAiJHtFQ0hPK3NldH0iID0gc2V0IHx8IEVDSE89JHthc19lY2hvLSdwcmludGYgJXNcbid9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgICAgZmkKK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKK30gIyBmdW5jX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgICAgZmkKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgICBjYXNlICR7Mn0gaW4KKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgICAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KK3BhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworcGF0aGNkcj0ncyxeL1teL10qLCwnCityZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisJCXNAL1wuL0AvQGcKKwkJdCBkb3RzbAorCQlzLC9cLiQsLywnCitjb2xsYXBzZXNsYXNoZXM9J3NAL1x7MSxcfUAvQGcnCitmaW5hbHNsYXNoPSdzLC8qJCwvLCcKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCisjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZworIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorZnVuY19ub3JtYWxfYWJzcGF0aCAoKQoreworICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQorICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCisgICAgIiIpCisgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgorICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgIHJldHVybgorICAgIDs7CisgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5CisgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKKyAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgLy8vKikKKyAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAvLyopCisgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKyAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICA7OworICAgIC8qKQorICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgKikKKyAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgIDs7CisgIGVzYWMKKyAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRyZW1vdmVkb3RwYXJ0cyIgLWUgIiRjb2xsYXBzZXNsYXNoZXMiIC1lICIkZmluYWxzbGFzaCJgCisgIHdoaWxlIDo7IGRvCisgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKyAgICBpZiB0ZXN0ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgPSAvIDsgdGhlbgorICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KKyAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNhciJgCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjZHIiYAorICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKyAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAgICIiKQorICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisgICAgICA7OworICAgICAgLi4pCisgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorfQorCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKKyMgc2xhc2ggaWYgbm9uLWVtcHR5LCBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlbHkgYXBwZW5kaW5nIGEgZmlsZW5hbWUKKyMgd2l0aG91dCBuZWVkaW5nIHRvIGFwcGVuZCBhIHNlcGFyYXRvci4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorZnVuY19yZWxhdGl2ZV9wYXRoICgpCit7CisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorCisgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisgIHdoaWxlIDo7IGRvCisgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgorICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSR7ZnVuY19kaXJuYW1lX3Jlc3VsdH0KKyAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgorICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorICBpZiB0ZXN0ICJ4JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgIT0geCA7IHRoZW4KKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSR7ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdH0vJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9CisgIGZpCisKKyAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gZW1wdHkgc3RyaW5nLAorICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKKyAgIyBmaWxlIG5hbWUgY2FuIGJlIGRpcmVjdGx5IGFwcGVuZGVkLgorICBpZiB0ZXN0ICEgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZmkKK30KKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCitwcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisjIHN0cmluZyBsaXRlcmFsbHkuCitzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzLFtdLlteJFxcKlwvXSxcXCYsZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKyMgd2hpY2ggY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCisjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KK2x0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIHJlbW92ZSBzaW1wbGUgY29tbWVudHMgYW5kIGVtcHR5CisjIGxpbmVzIGZyb20gYSBXaW5kb3dzIC5kZWYgZmlsZS4KK3NlZF91bmNvbW1lbnRfZGVmZmlsZT0nL147L2Q7IC9eWyBdKiQvZCcKKworIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgorIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgorIyBmb3VyIGBcJ3MgZm9sbG93ZWQgYnkgdHdvIGBcJ3MgYW5kIHRoZW4gYSAnJCcuICBgXCcgdGhhdCAnJCcuCiticz0nXFwnCiticzI9J1xcXFwnCiticzQ9J1xcXFxcXFxcJworZG9sbGFyPSdcJCcKK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisgIHMvJGJzNC8mXFwKKy9nCisgIHMvXiRiczIkZG9sbGFyLyRicyYvCisgIHMvXFwoW14kYnNdXFwpJGJzMiRkb2xsYXIvXFwxJGJzMiRicyRkb2xsYXIvZworICBzL1xuLy9nIgorCisjIFN0YW5kYXJkIG9wdGlvbnM6CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKK29wdF93YXJuaW5nPToKKworIyBmdW5jX2VjaG8gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UsIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgbW9kZQorIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgorfQorCisjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KK2Z1bmNfdmVyYm9zZSAoKQoreworICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisKKyAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KKyAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bworICAgICMgd29yayBhcm91bmQgdGhhdDoKKyAgICA6Cit9CisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiCit9CisKKyMgZnVuY19lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfZXJyb3IgKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCisKKyAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgIDoKK30KKworIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfZXJyb3IgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfZmF0YWxfaGVscCBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2ZhdGFsX2Vycm9yICIkaGVscCIKK30KK2hlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgICMjIGRlZmF1bHQKKworCisjIGZ1bmNfZ3JlcCBleHByZXNzaW9uIGZpbGVuYW1lCisjIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KK2Z1bmNfZ3JlcCAoKQoreworICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKK30KKworCisjIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAorIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KK2Z1bmNfbWtkaXJfcCAoKQoreworICAgIG15X2RpcmVjdG9yeV9wYXRoPSIkMSIKKyAgICBteV9kaXJfbGlzdD0KKworICAgIGlmIHRlc3QgLW4gIiRteV9kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCAiJG9wdF9kcnlfcnVuIiAhPSAiOiI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJworICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIG15X2RpcmVjdG9yeV9wYXRoPSIuLyRteV9kaXJlY3RvcnlfcGF0aCIgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgorICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbworICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKKwkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCisgICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgorCisgICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisKKyAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCisgICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiJG15X2Rpcl9saXN0IiB8ICRTRUQgJ3MsOiokLCwnYAorCisgICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JworICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisJSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCisgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQorICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKKyAgICBlbHNlCisKKyAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKKyAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisKKyAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKKworICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgorICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRteV90bXBkaXIiCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAorIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKyMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycworIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXCRdKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCBhbmQgdmFyaWFibGUKKyAgICAgICMgZXhwYW5zaW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKKyMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJdKikKKwlteV9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKyMgZnVuY190cl9zaAorIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KKyMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycworIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKKyMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCitmdW5jX3RyX3NoICgpCit7CisgIGNhc2UgJDEgaW4KKyAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAncy9eXChbMC05XVwpL19cMS87IHMvW15hLXpBLVowLTlfXS9fL2cnYAorICAgIDs7CisgICogKQorICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCisgICAgOzsKKyAgZXNhYworfQorCisKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKwk6bW9yZQorCS9cLi8heworCSAgTgorCSAgcy9cbiMgLyAvCisJICBiIG1vcmUKKwl9CisJOmdvCisJL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGVjaG8KKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2hlbHAgW05PRVhJVF0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQsCisjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworCTpwcmludAorICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorCXMqXCRob3N0KiciJGhvc3QiJyoKKwlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKKwlzKlwkTFRDQyonIiRMVENDIicqCisJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisJcypcJExEKiciJExEIicqCisJcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCisJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKCR7QVVUT01BS0UtYXV0b21ha2V9IC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKCR7QVVUT0NPTkYtYXV0b2NvbmZ9IC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcAorCWQKKyAgICAgfQorICAgICAvXiMgLiogaG9tZSBwYWdlOi9iIHByaW50CisgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAorICAgICAnIDwgIiRwcm9ncGF0aCIKKyAgICByZXQ9JD8KKyAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKyAgICAgIGV4aXQgJHJldAorICAgIGZpCit9CisKKyMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKyMgZXhpdF9jbWQuCitmdW5jX21pc3NpbmdfYXJnICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworCisjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisjIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCit7CisgICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKKyAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKworICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKK30gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbG9uZ29wdAorIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgorZnVuY19zcGxpdF9sb25nX29wdCAoKQoreworICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJworICAgIG15X3NlZF9sb25nX2FyZz0nMXMvXi0tW149XSo9Ly8nCisKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKK2V4aXRfY21kPToKKworCisKKworCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCittYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKworIyBHbG9iYWwgdmFyaWFibGVzLgorbm9ub3B0PQorcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgICAgZXZhbCAiJHsxfT1cJCR7MX1cJHsyfSIKK30gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgdmFyIHZhbHVlCisjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAorIyBieSBhIHNwYWNlLgorZnVuY19hcHBlbmRfcXVvdGVkICgpCit7CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKyAgICBldmFsICIkezF9PVwkJHsxfVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCit9ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCit9ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiR7MX0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKK30gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKK30gIyBmdW5jX3hmb3JtIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKK30KKworCisjIGZ1bmNfY29uZmlnCisjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KK2Z1bmNfY29uZmlnICgpCit7CisgICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCisgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKworICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKworICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCisgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisgICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKKyAgICBkb25lCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19mZWF0dXJlcworIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgZWNobyAiaG9zdDogJGhvc3QiCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZW5hYmxlX3RhZyB0YWduYW1lCisjIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKKyMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAorIyB2YXJpYWJsZSBoZXJlLgorZnVuY19lbmFibGVfdGFnICgpCit7CisgICMgR2xvYmFsIHZhcmlhYmxlOgorICB0YWduYW1lPSIkMSIKKworICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorCisgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgICpbIS1fQS1aYS16MC05LC9dKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgOzsKKyAgZXNhYworCisgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICBjYXNlICR0YWduYW1lIGluCisgICAgQ0MpIDs7CisgICAgKikKKyAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisKKwkjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisJIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisJZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCit7CisgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZWxzZQorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCiskcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCiskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgZmkKK30KKworCisjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKK2Nhc2UgJDEgaW4KK2NsZWFufGNsZWF8Y2xlfGNsKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgIDs7Citjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2V4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgIDs7CitpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2xpbmt8bGlufGxpfGwpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICA7OwordW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgIDs7Citlc2FjCisKKworCisjIE9wdGlvbiBkZWZhdWx0czoKK29wdF9kZWJ1Zz06CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2NvbmZpZz1mYWxzZQorb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCitvcHRfZmVhdHVyZXM9ZmFsc2UKK29wdF9maW5pc2g9ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfaGVscF9hbGw9ZmFsc2UKK29wdF9zaWxlbnQ9Ogorb3B0X3dhcm5pbmc9Ogorb3B0X3ZlcmJvc2U9Ogorb3B0X3NpbGVudD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKKworCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKKyMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgoreworICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorICAgIGNhc2UgJG9wdCBpbgorICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisJCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisJCQkkb3B0X2RlYnVnCisJCQk7OworICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQorCQkJb3B0X2RyeV9ydW49OgorCQkJOzsKKyAgICAgIC0tY29uZmlnKQorCQkJb3B0X2NvbmZpZz06CitmdW5jX2NvbmZpZworCQkJOzsKKyAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCit9JG9wdGFyZyIKKwkJCXNoaWZ0CisJCQk7OworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06CisJCQk7OworICAgICAgLS1mZWF0dXJlcykKKwkJCW9wdF9mZWF0dXJlcz06CitmdW5jX2ZlYXR1cmVzCisJCQk7OworICAgICAgLS1maW5pc2gpCisJCQlvcHRfZmluaXNoPToKK3NldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKwkJCTs7CisgICAgICAtLWhlbHApCisJCQlvcHRfaGVscD06CisJCQk7OworICAgICAgLS1oZWxwLWFsbCkKKwkJCW9wdF9oZWxwX2FsbD06CitvcHRfaGVscD0nOiBoZWxwLWFsbCcKKwkJCTs7CisgICAgICAtLW1vZGUpCisJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfbW9kZT0iJG9wdGFyZyIKK2Nhc2UgJG9wdGFyZyBpbgorICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworCisgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorICAgICBleGl0X2NtZD1leGl0CisgICAgIGJyZWFrCisgICAgIDs7Citlc2FjCisJCQlzaGlmdAorCQkJOzsKKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisJCQlvcHRfc2lsZW50PWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorCQkJb3B0X3dhcm5pbmc9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tbm8tdmVyYm9zZSkKKwkJCW9wdF92ZXJib3NlPWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLXNpbGVudHwtLXF1aWV0KQorCQkJb3B0X3NpbGVudD06CitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKwkJCTs7CisgICAgICAtLXZlcmJvc2V8LXYpCisJCQlvcHRfdmVyYm9zZT06CitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKK29wdF9zaWxlbnQ9ZmFsc2UKKwkJCTs7CisgICAgICAtLXRhZykKKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF90YWc9IiRvcHRhcmciCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCAkb3B0YXJnIgorZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKKyAgICAgIC0taGVscCkJCWZ1bmNfaGVscAkJCQk7OworICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKKyAgICAgIC0tKj0qKQorCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSIgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgIC1cPyp8LWgqfC1uKnwtdiopCisJCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS0pCQlicmVhawkJCQkJOzsKKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7CisgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFZhbGlkYXRlIG9wdGlvbnM6CisKKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisgICAgbm9ub3B0PSIkb3B0IgorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisgIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKworICBjYXNlICRob3N0IGluCisgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKyAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgIDs7CisgICAgKikKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgOzsKKyAgZXNhYworCisgICRvcHRfaGVscCB8fCB7CisgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgICAgZmkKKworICAgICMgRGFyd2luIHN1Y2tzCisgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICAgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgIH0KKworCisgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKK30KKworCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjIGZ1bmNfbGFsaWJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sYWxpYl9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAorICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKKyMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKKyMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCisjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCisjIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KK2Z1bmNfbGFsaWJfdW5zYWZlX3AgKCkKK3sKKyAgICBsYWxpYl9wPW5vCisgICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KKwlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKKwlkbworCSAgICByZWFkIGxhbGliX3BfbGluZQorCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcworfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIGZ1bmNfbGFsaWJfcCAiJDEiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9CisgICAgY2FzZSAkMSBpbgorICAgICouZXhlKSA7OworICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKKyAgICBlc2FjCisgICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCisjIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQorIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKKyMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCit7CisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCisgICAgZG9uZQorICAgIElGUz0kc2F2ZV9pZnMKK30KKworCisjIGZ1bmNfc291cmNlIGZpbGUKKyMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KKyMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bworIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKyMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KK2Z1bmNfc291cmNlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJDEgaW4KKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKyAgICAqKQkJLiAiLi8kMSIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisjIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCit7CisgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQorICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKyAgPSopCisgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAorIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKyMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCit7CisgIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgorICA/KjoiJGx0X3N5c3Jvb3QiKikKKyAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorICAgIDs7CisgICopCisgICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAgICAgIGRvbmUKKyAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBDQ19xdW90ZWQ9CisJICAgIGZvciBhcmcgaW4gJENDOyBkbworCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorCSAgICBkb25lCisJICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKwkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCisJICAgIGNhc2UgIiRAICIgaW4KKwkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorCSAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopCisJICAgICAgIyBUaGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZSBjb21tYW5kIG1hdGNoZXMKKwkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgorCSAgICAgICMgQXNzdW1lIHRoaXMgaXMgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uIHdlIHdhbnQuCisJICAgICAgdGFnbmFtZT0kegorCSAgICAgIGJyZWFrCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKwlkb25lCisJIyBJZiAkdGFnbmFtZSBzdGlsbCBpc24ndCBzZXQsIHRoZW4gbm8gdGFnZ2VkIGNvbmZpZ3VyYXRpb24KKwkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCisJIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCisJaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIKKyMJZWxzZQorIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGZpCit9CisKKworCisjIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKKyMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCisjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgorZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQoreworICAgIHdyaXRlX2xpYm9iaj0kezF9CisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX2xvYmo9XCckezJ9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9sb2JqPW5vbmUKKyAgICBmaQorCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfb2xkb2JqPVwnJHszfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgorIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKKworIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagorCitFT0YKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR7d3JpdGVfbGlib2JqfSIKKyAgICB9Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCisjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCisjIGluICRidWlsZCdzICRQQVRILgorIworIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCitmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCisgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgorICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKKyAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgIGVsc2UKKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQorICAgIGZpCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKKyMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQorIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCisjICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgorIworIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KKyMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCisjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KK2Z1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCisgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIG9sZElGUz0kSUZTCisgICAgSUZTPToKKyAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbworICAgICAgSUZTPSRvbGRJRlMKKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCisgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSRvbGRJRlMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgorIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCisjIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQorIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKKyMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKKyMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAorIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQorIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KKyMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgorIworIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCisjIGJlIGNvbnZlcnRlZC4KKyMKKyMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKKyMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCitmdW5jX2N5Z3BhdGggKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQorICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmaQorICBlbHNlCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCisgIGZpCit9CisjZW5kOiBmdW5jX2N5Z3BhdGgKKworCisjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCit9CisjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCisjIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCitmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjazoKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICBcYCQzJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCisgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorICAgIGVsc2UKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCisgICAgZmkKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKKyMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKKyMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgorZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCit7CisgICRvcHRfZGVidWcKKyAgY2FzZSAkNCBpbgorICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIDs7CisgIGVzYWMKKyAgY2FzZSAkNCBpbgorICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCisgICAgOzsKKyAgZXNhYworfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKworCisjIGZ1bmNfdG9faG9zdF9maWxlIEFSRworIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9maWxlICgpCit7CisgICRvcHRfZGVidWcKKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorfQorIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKKworCisjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCisjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCitmdW5jX3RvX3Rvb2xfZmlsZSAoKQoreworICAkb3B0X2RlYnVnCisgIGNhc2UgLCQyLCBpbgorICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCisgICAgICA7OworICAgICopCisgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorICAgICAgOzsKKyAgZXNhYworfQorIyBlbmQgZnVuY190b190b29sX2ZpbGUKKworCisjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCisgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAorIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKyMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKKyMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0CisjIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KKyMKKyMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKKyMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQorIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCisjIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCisjIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAorIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyB3aWxsIGJyZWFrLgorCisKKyMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCisjIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCit0b19ob3N0X3BhdGhfY21kPQorZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCisgICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorICBmaQorfQorCisKKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRoICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgorfQorIyBlbmQgZnVuY190b19ob3N0X3BhdGgKKworCisjIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCisjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKyMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisKKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCisgICAgYmFzZV9jb21waWxlPQorICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCTs7CisKKyAgICAgIHRhcmdldCApCisJbGlib2JqPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCWNvbnRpbnVlCisJOzsKKworICAgICAgbm9ybWFsICkKKwkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCisJY2FzZSAkYXJnIGluCisJLW8pCisJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKKwkgIGFyZ19tb2RlPXRhcmdldAorCSAgY29udGludWUKKwkgIDs7CisKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1uby1zdXBwcmVzcykKKwkgIHN1cHByZXNzX29wdD1ubworCSAgY29udGludWUKKwkgIDs7CisKKwktWGNvbXBpbGVyKQorCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAorCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKwkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCisKKwktV2MsKikKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCSopCisJICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCisJICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KKwkgICMKKwkgIGxhc3Rhcmc9IiRzcmNmaWxlIgorCSAgc3JjZmlsZT0iJGFyZyIKKwkgIDs7CisJZXNhYyAgIyAgY2FzZSAkYXJnCisJOzsKKyAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgIGRvbmUgIyBmb3IgYXJnCisKKyAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgIGFyZykKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgfQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICouZ28gfCAqLm9iaiB8ICouc3ggfCAqLmN1IHwgKi5jdXApCisgICAgICBmdW5jX3hmb3JtICIkbGlib2JqIgorICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKKyAgICAqKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljKQorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1waWMpCisJcGljX21vZGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLW5vbi1waWMpCisJcGljX21vZGU9bm8KKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKKyAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAorICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgorICAgIG9iam5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICBsb2JqPSR7eGRpcn0kb2JqZGlyLyRvYmpuYW1lCisKKyAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgorCisgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBlbHNlCisgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZmkKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgPSBubyAmJiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQorICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCisgICAgZWxzZQorICAgICAgb3V0cHV0X29iaj0KKyAgICAgIG5lZWRfbG9ja3M9bm8KKyAgICAgIGxvY2tmaWxlPQorICAgIGZpCisKKyAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAorICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKKyAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB5ZXM7IHRoZW4KKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBlbGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm47IHRoZW4KKyAgICAgIGlmIHRlc3QgLWYgIiRsb2NrZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgZnVuY190b190b29sX2ZpbGUgIiRzcmNmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKworICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCisgICAgICBlbHNlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCisgICAgICBmaQorCisgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKyAgICAgIGZ1bmNfYXBwZW5kIGNvbW1hbmQgIiRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgorCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQorCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7CisgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG9wdF9tb2RlIGluCisgICAgICAiIikKKyAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKyAgICAgICAgZnVuY19oZWxwCisgICAgICAgIDs7CisKKyAgICAgIGNsZWFuKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKKyAgICAgICAgOzsKKworICAgICAgaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCisKK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorCitJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXgtZGlyIFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCisgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scworICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCisgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cworICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cworICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAorICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgorICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCisgIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAtc3RhdGljLWxpYnRvb2wtbGlicworICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorICAtV2MsRkxBRworICAtWGNvbXBpbGVyIEZMQUcgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorICAtV2wsRkxBRworICAtWGxpbmtlciBGTEFHICAgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIKKyAgLVhDQ2xpbmtlciBGTEFHICAgcGFzcyBsaW5rLXNwZWNpZmljIEZMQUcgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciAoQ0MpCisKK0FsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCisKK0V2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiBcYC5sYScgYXJlCit0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorb2JqZWN0IGZpbGVzLgorCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKK29ubHkgbGlicmFyeSBvYmplY3RzIChcYC5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCBcYC1ycGF0aCcgaXMKK3JlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAuYScgb3IgXGAubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAordXNpbmcgXGBhcicgYW5kIFxgcmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyBcYGxpYicuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubG8nIG9yIFxgLiR7b2JqZXh0fScsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorICAgICAgICA7OworCisgICAgICB1bmluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCitPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZWNobworICAgICRFQ0hPICJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCit9CisKKyMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQoraWYgJG9wdF9oZWxwOyB0aGVuCisgIGlmIHRlc3QgIiRvcHRfaGVscCIgPSA6OyB0aGVuCisgICAgZnVuY19tb2RlX2hlbHAKKyAgZWxzZQorICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZWNobworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8CisgICAgc2VkICcxZAorICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQveworCUgKKwlkCisgICAgICB9CisgICAgICAkeAorICAgICAgL2luZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzL2QKKyAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCisgICAgICBzL15Vc2FnZTouKi0tbW9kZT1cKFteIF0qXCkgLiovRGVzY3JpcHRpb24gb2YgXDEgbW9kZTovJworICBmaQorICBleGl0ICQ/CitmaQorCisKKyMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCitmdW5jX21vZGVfZXhlY3V0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgIGNtZD0iJG5vbm9wdCIKKyAgICB0ZXN0IC16ICIkY21kIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorCisgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwk7OworCisgICAgICAqKQorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCisJY29udGludWUKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCisgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisKKyAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCisgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgIGVsc2UKKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCisgICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSogfCAqLmxhIHwgKi5sbyApIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAiJGZpbGUiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGlicz0KKyAgICBsaWJkaXJzPQorICAgIGFkbWluY21kcz0KKworICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorCisgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgorCWVsc2UKKwkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJZmkKKworICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgXGAkb3B0JyIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKyAgICAgICAgc3lzcm9vdF9yZWdleD1gJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzcm9vdF9jbWQ9CisgICAgICBmaQorCisgICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kIFxgPScgcHJlZml4ZXMgZnJvbSAkbGliIgorICAgICAgICBkb25lCisgICAgICBlbHNlCisgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisJICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisJICAgID4gJHRtcGRpci90bXAtbGEKKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKKwlkb25lCisgICAgICAgICR7Uk19ciAiJHRtcGRpciIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBmdW5jX2FwcGVuZCBhZG1pbmNtZHMgIgorICAgICAgICRjbWRzIgorCWZpCisgICAgICBkb25lCisgICAgZmkKKworICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCSRFQ0hPICIgICAkbGliZGlyIgorICAgICAgZG9uZQorICAgICAgZWNobworICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwlsaWJkaXI9TElCRElSCisJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisJJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorICAgICAgZmkKKyAgICAgIGVjaG8KKworICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgICBjYXNlICRob3N0IGluCisJc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJICBlY2hvICJwYWdlcy4iCisJICA7OworCSopCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKwkgIDs7CisgICAgICBlc2FjCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGZpCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX2luc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgorICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgorICAgICAgYXJnPSQxCisgICAgICBzaGlmdAorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcHJvZz0KKyAgICAgIGFyZz0kbm9ub3B0CisgICAgZmkKKworICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKKyAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisgICAgICAqW1xcXCAvXWNwXCAqKSBpbnN0YWxsX2NwPTogOzsKKyAgICAgICopIGluc3RhbGxfY3A9ZmFsc2UgOzsKKyAgICBlc2FjCisKKyAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisgICAgZGVzdD0KKyAgICBmaWxlcz0KKyAgICBvcHRzPQorICAgIHByZXY9CisgICAgaW5zdGFsbF90eXBlPQorICAgIGlzZGlyPW5vCisgICAgc3RyaXBtZT0KKyAgICBub19tb2RlPToKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGFyZzI9CisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorCWlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwkgIHByZXY9JGFyZworCWZpCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIGlmIHRlc3QgIngkcHJldiIgPSB4LW0gJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KKwkgICAgYXJnMj0kaW5zdGFsbF9vdmVycmlkZV9tb2RlCisJICAgIG5vX21vZGU9ZmFsc2UKKwkgIGZpCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCisgICAgICBpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKKwlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisJZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCisgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisJOzsKKworICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKworCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCisJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0iJDEiCisJICBzaGlmdAorCisJICBzcmNuYW1lPSIkcmVhbG5hbWUiCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqLmRsbC5hKQorCSAgICAgIHRzdHJpcG1lPSIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAorCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisJICAgIGZvciBsaW5rbmFtZQorCSAgICBkbworCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0KKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PSIiCisJY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyopCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZpCisJICAgIDs7CisJKikKKwkgICAgd3JhcHBlcj0kZmlsZQorCSAgICA7OworCWVzYWMKKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJHdyYXBwZXIiOyB0aGVuCisJICBub3RpbnN0X2RlcGxpYnM9CisJICByZWxpbmtfY29tbWFuZD0KKworCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KKwkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgorCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisJCSAgY29udGludWUKKwkgICAgICAgIGZpCisJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgZmkKKwkgICAgfQorCSAgZWxzZQorCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisJICAgIGZpbGU9YCRFQ0hPICIkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFNFRCAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheQorCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKKwkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCisJICAqLmV4ZToqLmV4ZSkKKwkgICAgIyB0aGlzIGlzIG9rCisJICAgIDs7CisJICAqLmV4ZToqKQorCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCisJICAgIDs7CisJICAqOiouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKKwkgICAgZGVzdGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JworCSRvcHRfZHJ5X3J1biB8fCBpZiB0ZXN0IC1uICIkb3V0cHV0bmFtZSI7IHRoZW4KKwkgICR7Uk19ciAiJHRtcGRpciIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisKKworIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKKyMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAorIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCitmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9vdXRwdXRuYW1lPSIkMSIKKyAgICBteV9vcmlnaW5hdG9yPSIkMiIKKyAgICBteV9waWNfcD0iJHszLW5vfSIKKyAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCBzZWQgJ3MlW15hLXpBLVowLTldJV8lZydgCisgICAgbXlfZGxzeW1zPQorCisgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwlteV9kbHN5bXM9IiR7bXlfb3V0cHV0bmFtZX1TLmMiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKworCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisKKwkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgorCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKworCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCAoX19HTlVDX18gPiA0KSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgorI2VuZGlmCisKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKy8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisiCisKKwlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgorCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisJICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCisJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCisJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorCSAgICAgICAgICBmaQorCSAgICAgICAgZmkKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSIgOyB0aGVuCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmaQorCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGZpCisJICAgIDs7CisJICAgICopCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgfQorCSAgICA7OworICAgICAgICAgIGVzYWMKKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIuKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KKwkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlzeW10YWJfY2ZsYWdzPQorCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICBlbHNlCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaQorCSAgOzsKKwkqKQorCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgZmkKK30KKworIyBmdW5jX3dpbjMyX2xpYmlkIGFyZworIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCisjCisjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKyMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50CisjIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KKyMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgorZnVuY193aW4zMl9saWJpZCAoKQoreworICAkb3B0X2RlYnVnCisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisJJFNFRCAtbiAtZSAnCisJICAgIDEsMTAweworCQkvIEkgL3sKKwkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgcAorCQkgICAgcQorCQl9CisJICAgIH0nYAorICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCisjCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCit7CisgICRvcHRfZGVidWcKKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKyMKKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKyMKKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisjCisjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQoreworICAkb3B0X2RlYnVnCisgIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAorICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKKyAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KKyAgICAgIHMvLiovPT09PU1BUks9PT09LworICAgICAgcAorICAgICAgZAorICAgIH0KKyAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0CisgICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKKyAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKKyAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKKyAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAorICAgIC9ePT09PU1BUks9PT09L3AKKyAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycworICAgIC9eLlx7NDNcfS8hZAorICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCisgICAgcy9eLlx7NDNcfS8vJyB8CisgICAgJFNFRCAtbiAnCisgICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCisgICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCisgICAgICBICisgICAgICAkIGIgcGFyYQorICAgICAgYgorICAgICAgOnBhcmEKKyAgICAgIHgKKyAgICAgIHMvXG4vL2cKKyAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKKyAgICAgIHMvXj09PT1NQVJLPT09PS8vCisgICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCisgICAgICBzL1tcLiBcdF0qJC8vCisgICAgICAjIFByaW50CisgICAgICAvLi9wJyB8CisgICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCisgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKKyAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisgICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisgICAgIyBhICcuJy4KKyAgICAjCisgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworfQorCisjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIworIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAorIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgorICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAorICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgorICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKKyAgZWxzZQorICAgICMgdW5rbm93bgorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCisgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKKwkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JworICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKKyAgICBmaQorICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCisgICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKwkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99CisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZmlsZT1cIlwkMFwiIgorCisgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAkRUNITyAiXAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisgICAgRUNITz1cIiRxRUNIT1wiCisgIGZpCisKKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKyMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCisjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisjIHRoaXMgcGF0dGVybikuCisjCisjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCitsdF9vcHRpb25fZGVidWc9CitmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKK3sKKyAgbHRfc2NyaXB0X2FyZzA9XCQwCisgIHNoaWZ0CisgIGZvciBsdF9vcHQKKyAgZG8KKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisgICAgLS1sdC1kdW1wLXNjcmlwdCkKKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorICAgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgLS1sdC0qKQorICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorICBmaQorfQorCisjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorZnVuY19sdF9kdW1wX2FyZ3MgKCkKK3sKKyAgbHRfZHVtcF9hcmdzX049MTsKKyAgZm9yIGx0X2FyZworICBkbworICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorICBkb25lCit9CisKKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKK3sKKyIKKyAgY2FzZSAkaG9zdCBpbgorICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKworICAqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworICBlc2FjCisgICRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKK30KKworIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KK2Z1bmNfZXhlY19wcm9ncmFtICgpCit7CisgIGNhc2UgXCIgXCQqIFwiIGluCisgICpcXCAtLWx0LSopCisgICAgZm9yIGx0X3dyX2FyZworICAgIGRvCisgICAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisgICAgICAtLWx0LSopIDs7CisgICAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworICAgICAgZXNhYworICAgICAgc2hpZnQKKyAgICBkb25lIDs7CisgIGVzYWMKKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Cit9CisKKyAgIyBQYXJzZSBvcHRpb25zCisgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKyAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgorCisgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKworICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCisgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorICAgIGVsc2UKKyAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICAgIGZpIgorCisJICAkRUNITyAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAxCisgICAgICBmaQorICAgIGZpCisKKyAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkRUNITyAiXAorICBwcm9ncmFtPSckb3V0cHV0bmFtZScKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKyIKKwlmaQorCisJJEVDSE8gIlwKKworICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwkjCisJIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCisJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKKwkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCisJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgfCAkU0VEICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkkRUNITyAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisgICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9CisgICAgZmkKKyAgZWxzZQorICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KKyAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCisgICAgXCRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKKyAgICBleGl0IDEKKyAgZmkKK2ZpXAorIgorfQorCisKKyMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisjIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQorIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgorZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQoreworCWNhdCA8PEVPRgorCisvKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisKKyAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorCisgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA8PCJFT0YiCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisvKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitpbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyBlbmRpZgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisvKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBIQVZFX1NFVEVOVgorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChQQVRIX01BWCkKKyMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCisgIGRlZmluZWQgKF9fT1MyX18pCisjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKKyMgZW5kaWYKKyMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQorI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIEZPUEVOX1dCCisjIGRlZmluZSBGT1BFTl9XQiAidyIKKyNlbmRpZgorI2lmbmRlZiBfT19CSU5BUlkKKyMgZGVmaW5lIF9PX0JJTkFSWSAwCisjZW5kaWYKKworI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQorI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCisgIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCit9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7CitzdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Cit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgordm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKK0VPRgorCisJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGZpCisKKworCSAgICBjYXQgPDwiRU9GIgorCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorCitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CitzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgIG5ld2FyZ2M7CisgIGNoYXIgKnRtcF9wYXRoc3BlYzsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOworICBjaGFyICp0YXJnZXRfbmFtZTsKKyAgY2hhciAqbHRfYXJndl96ZXJvOworICBpbnRwdHJfdCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKyAgICovCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKwl7CitFT0YKKwkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisJeworICAgICAgICAgIGx0X2RlYnVnID0gMTsKKyAgICAgICAgICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorICAgICAgICAgICAqLworICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCitFT0YKKwkgICAgY2F0IDw8RU9GCisgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKK0VPRgorCSAgICBjYXQgPDwiRU9GIgorICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworCisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgdG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJICB0YXJnZXRfbmFtZSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisgICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAorICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisgIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK21ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgaW50IHJ2YWwgPSAwOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICB7CisgICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOworICAgIH0KKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucworICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgorKi8KK2NoYXIgKgorZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQoreworICBpbnQgaGFzX3NsYXNoID0gMDsKKyAgY29uc3QgY2hhciAqcDsKKyAgY29uc3QgY2hhciAqcF9uZXh0OworICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworICBpbnQgdG1wX2xlbjsKKyAgY2hhciAqY29uY2F0X25hbWU7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisKKyAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBBYnNvbHV0ZSBwYXRoPyAqLworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQorICAgIHsKKyAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCXJldHVybiBjb25jYXRfbmFtZTsKKyAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCisJeworCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKwkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJICAgIHJldHVybiBjb25jYXRfbmFtZTsKKwkgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IHEgLSBwOworCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKKwkgICAgICBpZiAocF9sZW4gPT0gMCkKKwkJeworCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7CisJCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkJcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJICAgIH0KKwl9CisgICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworICAgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICB0bXBfbGVuID0gc3RybGVuICh0bXApOworICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKyAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKworICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorICAgIHJldHVybiBjb25jYXRfbmFtZTsKKyAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQoreworI2lmbmRlZiBTX0lTTE5LCisgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisjZWxzZQorICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKKyAgc3RydWN0IHN0YXQgczsKKyAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOworICBjaGFyICpwOworICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorCQkgICAgICB0bXBfcGF0aHNwZWMpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCX0KKyAgICB9CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGlmICghaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisgICAgfQorCisgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQorICAgIHsKKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICB9CisgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworI2VuZGlmCit9CisKK2NoYXIgKgorc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgc2l6ZV90IGxlbiwgcGF0bGVuOworCisgIGFzc2VydCAoc3RyICE9IE5VTEwpOworICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKKworICBpZiAocGF0bGVuIDw9IGxlbikKKyAgICB7CisgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisJKnN0ciA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCit2b2lkCitsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGlmIChsdF9kZWJ1ZykKKyAgICB7CisgICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7CisgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworICAgICAgdmFfZW5kIChhcmdzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCisJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisKKyAgaWYgKGV4aXRfc3RhdHVzID49IDApCisgICAgZXhpdCAoZXhpdF9zdGF0dXMpOworfQorCit2b2lkCitsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25udWxsIChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7Cit9CisKK3ZvaWQKK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCisgICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK0VPRgorCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorCisvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKyAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisgICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6CisgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CisgICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7CisgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscworICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQorICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKyAgIHNwZWNpYWwgd2F5OgorICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcworICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisgICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcworICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCisgICAgIGNoYXJhY3RlcnMuCisgICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KKyAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQorICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorICAgICAgIFwiIC0+ICIKKyAgICAgICBcXFwiIC0+IFwiCisgICAgICAgXFxcXFwiIC0+IFxcIgorICovCisjZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorY2hhciAqKgorcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCit7CisgIHNpemVfdCBhcmdjOworICBjaGFyICoqbmV3X2FyZ3Y7CisgIHNpemVfdCBpOworCisgIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKyAgICA7CisKKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKworICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQorCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKwl7CisJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworCSAgc2l6ZV90IGxlbmd0aDsKKwkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKKwkgIGNvbnN0IGNoYXIgKnM7CisJICBjaGFyICpxdW90ZWRfc3RyaW5nOworCSAgY2hhciAqcDsKKworCSAgbGVuZ3RoID0gMDsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCsrOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisJICAgICAgbGVuZ3RoKys7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKworCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOworCisJICBwID0gcXVvdGVkX3N0cmluZzsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgICpwKysgPSAnIic7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJeworCQkgIHVuc2lnbmVkIGludCBqOworCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKKwkJICAgICpwKysgPSAnXFwnOworCQl9CisJICAgICAgKnArKyA9IGM7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBqOworCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQorCQkqcCsrID0gJ1xcJzsKKwkgICAgICAqcCsrID0gJyInOworCSAgICB9CisJICAqcCA9ICdcMCc7CisKKwkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKKwl9CisgICAgICBlbHNlCisJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CisgICAgfQorICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisKKyAgcmV0dXJuIG5ld19hcmd2OworfQorRU9GCisJCTs7CisJICAgIGVzYWMKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCit7CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKwkgICAgICAkU0VEIC1uIC1lICcKK3MvXlwoLlx7NzlcfVwpXCguLipcKS9cMVwKK1wyLworaAorcy9cKFtcXCJdXCkvXFxcMS9nCitzLyQvXFxuLworcy9cKFteXG5dKlwpLiovICBmcHV0cyAoIlwxIiwgZik7L3AKK2cKK0QnCisgICAgICAgICAgICBjYXQgPDwiRU9GIgorfQorRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wIEFSRworIyBUcnVlIGlmIEFSRyBpcyBhbiBpbXBvcnQgbGliLCBhcyBpbmRpY2F0ZWQgYnkgJGZpbGVfbWFnaWNfY21kCitmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisgICAgKmltcG9ydCopIDogOzsKKyAgICAqKSBmYWxzZSA7OworICAgIGVzYWMKK30KKworIyBmdW5jX21vZGVfbGluayBhcmcuLi4KK2Z1bmNfbW9kZV9saW5rICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCisgICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubworCisgICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKKyAgICAgICMgdG8gbWFrZSBhIGRsbCB3aGljaCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCisgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlidG9vbF9hcmdzPSRub25vcHQKKyAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCisgICAgY29tcGlsZV9jb21tYW5kPSRub25vcHQKKyAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKKworICAgIGNvbXBpbGVfcnBhdGg9CisgICAgZmluYWxpemVfcnBhdGg9CisgICAgY29tcGlsZV9zaGxpYnBhdGg9CisgICAgZmluYWxpemVfc2hsaWJwYXRoPQorICAgIGNvbnZlbmllbmNlPQorICAgIG9sZF9jb252ZW5pZW5jZT0KKyAgICBkZXBsaWJzPQorICAgIG9sZF9kZXBsaWJzPQorICAgIGNvbXBpbGVyX2ZsYWdzPQorICAgIGxpbmtlcl9mbGFncz0KKyAgICBkbGxzZWFyY2hwYXRoPQorICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAorICAgIGluc3RfcHJlZml4X2Rpcj0KKyAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKworICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBiaW5kaXI9CisgICAgZGxmaWxlcz0KKyAgICBkbHByZWZpbGVzPQorICAgIGRsc2VsZj1ubworICAgIGV4cG9ydF9keW5hbWljPW5vCisgICAgZXhwb3J0X3N5bWJvbHM9CisgICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9CisgICAgZ2VuZXJhdGVkPQorICAgIGxpYm9ianM9CisgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KKyAgICBvYmpzPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPW5vCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgorICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CisgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwljYXNlICRhcmcgaW4KKwktYWxsLXN0YXRpYykKKwkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwktc3RhdGljKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCSAgOzsKKwktc3RhdGljLWxpYnRvb2wtbGlicykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCWVzYWMKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwlicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKKworICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICAgIGFyZz0iJDEiCisgICAgICBzaGlmdAorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisKKyAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJY2FzZSAkcHJldiBpbgorCW91dHB1dCkKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRwcmV2IGluCisJYmluZGlyKQorCSAgYmluZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWRsZmlsZXN8ZGxwcmVmaWxlcykKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgcHJlbG9hZD15ZXMKKwkgIGZpCisJICBjYXNlICRhcmcgaW4KKwkgICoubGEgfCAqLmxvKSA7OyAgIyBXZSBoYW5kbGUgdGhlc2UgY2FzZXMgYmVsb3cuCisJICBmb3JjZSkKKwkgICAgaWYgdGVzdCAiJGRsc2VsZiIgPSBubzsgdGhlbgorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgc2VsZikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzICYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgIT0geWVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbHNlCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCisJICAgIGVsc2UKKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWV4cHN5bXNfcmVnZXgpCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJCWZpCisKKwkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXdlYWspCisJICBmdW5jX2FwcGVuZCB3ZWFrX2xpYnMgIiAkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXhjY2xpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJKikKKwkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwllc2FjCisgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorCisgICAgICBwcmV2YXJnPSIkYXJnIgorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljKQorCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1hbGxvdy11bmRlZmluZWQpCisJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCWZ1bmNfZmF0YWxfZXJyb3IgIlxgLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgorCTs7CisKKyAgICAgIC1hdm9pZC12ZXJzaW9uKQorCWF2b2lkX3ZlcnNpb249eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtYmluZGlyKQorCXByZXY9YmluZGlyCisJY29udGludWUKKwk7OworCisgICAgICAtZGxvcGVuKQorCXByZXY9ZGxmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRscHJlb3BlbikKKwlwcmV2PWRscHJlZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtZHluYW1pYykKKwlleHBvcnRfZHluYW1pYz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCisJZmkKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KKwkgIHByZXY9ZXhwc3ltcworCWVsc2UKKwkgIHByZXY9ZXhwc3ltc19yZWdleAorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtZnJhbWV3b3JrKQorCXByZXY9ZnJhbWV3b3JrCisJY29udGludWUKKwk7OworCisgICAgICAtaW5zdC1wcmVmaXgtZGlyKQorCXByZXY9aW5zdF9wcmVmaXgKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVGhlIG5hdGl2ZSBJUklYIGxpbmtlciB1bmRlcnN0YW5kcyAtTEFORzoqLCAtTElTVDoqIGFuZCAtTE5POioKKyAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKKyAgICAgIC1MW0EtWl1bQS1aXSo6KikKKwljYXNlICR3aXRoX2djYy8kaG9zdCBpbgorCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1MKikKKwlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgorCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCSAgZGlyPSIkYWJzZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJGRlcGxpYnMgIiBpbgorCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCisJICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCisJICA7OworCSopCisJICAjIFByZXNlcnZlIHN5c3Jvb3QsIGJ1dCBuZXZlciBpbmNsdWRlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCisJICBjYXNlICRkaXIgaW4KKwkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLUwkZGlyIiA7OworCSAgZXNhYworCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKKwkgIDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRkaXIiIHwgJFNFRCAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1sKikKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3MyKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKwkgY2FzZSAkaG9zdCBpbgorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCisJICAgY29udGludWUKKwkgICA7OworCSBlc2FjCisJZmkKKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tb2R1bGUpCisJbW9kdWxlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKKyAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbXVsdGlfbW9kdWxlKQorCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby11bmRlZmluZWQpCisJYWxsb3dfdW5kZWZpbmVkPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtb2JqZWN0bGlzdCkKKwlwcmV2PW9iamVjdGxpc3QKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCT0qKQorCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1XbCwqKQorCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKyAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisgICAgICAtTyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW4pCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgorICAgICAgLSogfCArKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJICBwaWNfb2JqZWN0PQorCSAgbm9uX3BpY19vYmplY3Q9CisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICIkYXJnIgorCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCSAgZmkKKworCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCXByZXY9CisJCWNvbnRpbnVlCisJICAgICAgZWxzZQorCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQlwcmV2PWRscHJlZmlsZXMKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorCSAgICAgIHByZXY9CisJICAgIGZpCisKKwkgICAgIyBBIFBJQyBvYmplY3QuCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgYXJnPSIkcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgTm9uLVBJQyBvYmplY3QuCisJICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBmaQorCWVsc2UKKwkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICAgIGZ1bmNfbG8ybyAiJGFyZyIKKwkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLiRsaWJleHQpCisJIyBBbiBhcmNoaXZlLgorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgICoubGEpCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCisJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsc2UKKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCisgICAgICAqKQorCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAorCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworICAgICAgZXNhYyAjIGFyZworCisgICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZpCisgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgZmkKKworICAgIG9sZGxpYnM9CisgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisgICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgorICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorCisgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcworICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKwlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKwkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykKKwkgIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSIKKwkgIHRlc3QgIlgkbGlua19hbGxfZGVwbGlicyIgIT0gWG5vICYmIGxpYnM9IiRsaWJzICRkZXBlbmRlbmN5X2xpYnMiCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9IiRkbHByZWZpbGVzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpCisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICA7OworCSouJGxpYmV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKwkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCisJICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICopCisJICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCQltYXRjaF9wYXR0ZXJuKikKKwkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIDs7ICMgKi4kbGliZXh0CisJKi5sbyB8ICouJG9iamV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKwkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJJURFUExJQlMlKQorCSAgYWxsZGVwbGlicz15ZXMKKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMgIyBjYXNlICRkZXBsaWIKKworCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWRsbmFtZT0KKwlkbG9wZW49CisJZGxwcmVvcGVuPQorCWxpYmRpcj0KKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKKwlpbnN0YWxsZWQ9eWVzCisJc2hvdWxkbm90bGluaz1ubworCWF2b2lkdGVtcHJwYXRoPQorCisKKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisJZnVuY19zb3VyY2UgIiRsaWIiCisKKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorCWlmIHRlc3QgLW4gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIjsgdGhlbgorCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKwkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgorCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCisJZmkKKworCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIHRtcF9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCQljYXNlICIkdG1wX2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKwkgICAgZG9uZQorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJgorCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisJICBsaW5rbGliPSRvbGRfbGlicmFyeQorCWVsc2UKKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgbGlua2xpYj0iJGwiCisJICBkb25lCisJZmkKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKwkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKwlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIKKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisJICBmaQorCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgY2FzZSAiJGhvc3QiIGluCisJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKwkgICAgICAjIHN5bWJvbHMgZnJvbSB0aGUgaW1wb3J0IGxpYnJhcnkgaWYgYSBzaGFyZWQgbGlicmFyeSBpcyBwcmVzZW50CisJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKwkgICAgICAjIFdlIHJlY292ZXIgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSBieSAnc2F2aW5nJyB0aGUgbGEgZmlsZQorCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgIGZpCisJICAgIDs7CisJICAgICogKQorCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorCisJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiICMgdXNlZCBmb3IgcHJvZyxzY2FuIHBhc3MKKwkgIGZpCisJICBjb250aW51ZQorCWZpCisKKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJCSA7OworCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkYWJzZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KKworCSAgaWYgdGVzdCAiJGFsbGRlcGxpYnMiID0geWVzICYmCisJICAgICB7IHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSBwYXNzX2FsbCB8fAorCSAgICAgICB7IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmCisJCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCisJICAgIGNvbnRpbnVlCisJICBmaQorCWZpCisKKwlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5CisJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKKwlpZiB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IGJ1aWx0ICYmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICB1c2Vfc3RhdGljX2xpYnM9bm8KKwlmaQorCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGZpCisJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgIGZpCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmCisJICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CisJICAgIGRpcj0kb3V0cHV0X29iamRpcgorCSAgICBsaW5rbGliPSRuZXdsaWIKKwkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgIGxpYl9saW5rZWQ9eWVzCisJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgorCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QKKwkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCisJCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCisJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorCQkJICBlY2hvCisJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorCQkJICBlY2hvICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCWZpCisJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJICAgICAgZmkKKwkJICAgIGZpCisJCWVzYWMKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0iJGRpciIgOzsKKwkJZXNhYworCQlhZGRfZGlyPSItTCRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IG5vOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIHJlbGluaykKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJCWFkZF9kaXI9Ii1MJGFic2RpciIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KKwkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCSAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgorCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkJYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJY2FzZSAkbGliZGlyIGluCisJCSAgW1xcL10qKQorCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICBmaQorCSAgZmkKKwllbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCisJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKKwkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KKwkgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkZmluYWxpemVfZGVwbGlicyIKKwkgIGZpCisJZWxpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBOb3QgYSBzaGFyZWQgbGlicmFyeQorCSAgaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKKwkgICAgIyBidXQgdGhlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQuCisKKwkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbworCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KKwkgICAgZWNobworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgorCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCQllY2hvCisJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCWVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgICAgbGlua19zdGF0aWM9eWVzCisJICBmaQorCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgorCSAgICAgeyB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkbGlua19zdGF0aWMiID0geWVzOyB9OyB0aGVuCisJICAgICMgRXh0cmFjdCAtUiBmcm9tIGRlcGVuZGVuY3lfbGlicworCSAgICB0ZW1wX2RlcGxpYnM9CisJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRsaWJkaXIgaW4KKwkgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRsaWJkaXIiCisJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KKwkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICBmaQorCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisJICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGNhc2UgJGRlcGxpYiBpbgorICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKyAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CisgICAgICAgICAgICBlc2FjCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0ICIqKQorICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBwYXRoPQorCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CisJCSopCisJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkJICAgIGFic2Rpcj0iJGRpciIKKwkJICBmaQorCQkgIDs7CisJCWVzYWMKKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotZGFyd2luKikKKwkJICBkZXBkZXBsPQorCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgorCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBmaQorCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KKwkJICAgIGZpCisJCSAgZmkKKwkJICA7OworCQkqKQorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaQorICAgICAgZmkKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKKwlmb3IgZGVwbGliIGluICRzYXZlX2RlcGxpYnM7IGRvCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gZGxvcGVuOyB0aGVuCisJaWYgdGVzdCAiJHBhc3MiICE9IGNvbnY7IHRoZW4KKwkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgIGxpYl9zZWFyY2hfcGF0aD0KKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKwkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgorICAgICAgOzsKKworICAgIGxpYikKKyAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtIGBsaWJOQU1FLmxhJy4KKyAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KKyAgICAgIGxpYiopCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJOzsKKyAgICAgICopCisJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciCisKKwlpZiB0ZXN0ICIkbmVlZF9saWJfcHJlZml4IiAhPSBubzsgdGhlbgorCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KKwlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKKwllbHNlCisJICBlY2hvCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorCisgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKworCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKyAgICAgIGVsc2UKKworCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSIkc2F2ZV9pZnMiCisKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDEiCisJICBudW1iZXJfbWlub3I9IiQyIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICMgY29ycmVjdCBsaW51eCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxxbnh8c3Vub3MpCisJICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBhZ2U9IjAiCisJICAgIDs7CisJICBpcml4fG5vbnN0b3B1eCkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBsdF9pcml4X2luY3JlbWVudD1ubworCSAgICA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICIkbW9kZW5hbWU6IHVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJbm8pCisJICBjdXJyZW50PSIkMSIKKwkgIHJldmlzaW9uPSIkMiIKKwkgIGFnZT0iJDMiCisJICA7OworCWVzYWMKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCWZpCisKKwkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCisJbWFqb3I9CisJdmVyc3VmZml4PQorCXZlcnN0cmluZz0KKwljYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwlub25lKSA7OworCisJZGFyd2luKQorCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJaXJpeCB8IG5vbnN0b3B1eCkKKwkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIGVsc2UKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCisJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kcmV2aXNpb24KKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KSAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCXdpbmRvd3MpCisJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgOzsKKworCSopCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPSIwLjAiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICAgIHZlcnN1ZmZpeD0KKwkgIGVsc2UKKwkgICAgdmVyc3VmZml4PSIuMC4wIgorCSAgZmkKKwlmaQorCisJIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCisJaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgIG1ham9yPQorCSAgdmVyc3VmZml4PQorCSAgdmVyc3RyaW5nPSIiCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKKwkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKwlmaQorCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCisJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KKwkJICAgY29udGludWUKKwkJIGZpCisJICAgICAgIGZpCisJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9IiIKKwl2ZXJzdWZmaXg9IiIKKwltYWpvcj0iIgorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCisJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgaT0iIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICBlY2hvCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCisJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAgICoiICRpICIqKQorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICBlY2hvCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCisJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKwkJZWxzZQorCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCisJCWZpCisJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisJCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgICAkbm9jYXNlZ2xvYgorCQkgIGVsc2UKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmaQorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKwkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgorCQkJY29udGludWUKKwkJICAgICAgZmkKKwkJICAgICAgIyBUaGUgc3RhdGVtZW50IGFib3ZlIHRyaWVzIHRvIGF2b2lkIGVudGVyaW5nIGFuCisJCSAgICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBjYXNlIG9mIGN5Y2xpYyBsaW5rcy4KKwkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluaworCQkgICAgICAjIGxvb3AgY2FuIGJlIGNsb3NlZCB3aGlsZSB3ZSBmb2xsb3cgbGlua3MsCisJCSAgICAgICMgYnV0IHNvIHdoYXQ/CisJCSAgICAgIHBvdGxpYj0iJHBvdGVudF9saWIiCisJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbworCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAke1NFRH0gJ3MvLiogLT4gLy8nYAorCQkJY2FzZSAkcG90bGlibGluayBpbgorCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9IiRwb3RsaWJsaW5rIjs7CisJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJZXNhYworCQkgICAgICBkb25lCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW5vbmUgfCB1bmtub3duIHwgKikKKwkgIG5ld2RlcGxpYnM9IiIKKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAorCSAgICBkb25lCisJICBmaQorCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZHJvcHBlZGRlcHM9eWVzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisJbWFqb3I9JG1ham9yX3NhdmUKKwlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKwluYW1lPSRuYW1lX3NhdmUKKworCWNhc2UgJGhvc3QgaW4KKwkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgZWNobworCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKKwkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICBlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgIGVsc2UKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCisJICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJIyBSZW1vdmUgJHt3bH0gaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgorCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KKwljYXNlICRhcmNoaXZlX2NtZHMgaW4KKwkgICpcJExEXCAqKSB3bD0gOzsKKyAgICAgICAgZXNhYworCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKwlmaQorCisJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwlzaGlmdAorCXJlYWxuYW1lPSIkMSIKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0iJHJlYWxuYW1lIgorCWZpCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgIGRsbmFtZT0kc29uYW1lCisJZmkKKworCWxpYj0iJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lIgorCWxpbmtuYW1lcz0KKwlmb3IgbGluaworCWRvCisJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKKwlkb25lCisKKwkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisJZGVsZmlsZXM9CisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgaWYgdGVzdCAieGAkU0VEICIkc2VkX3VuY29tbWVudF9kZWZmaWxlIiAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIDFxYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKwkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZworCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQorCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIGZpCisJICBmaQorCSAgOzsKKwllc2FjCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKwkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgorCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisJCSAgZXZhbCBjbWQ9XCIkY21kMVwiCisJCSAgZnVuY19sZW4gIiAkY21kIgorCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJCSAgOzsKKwkJKikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworCQkgIDs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAorCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorCSAgICAgIHRoZW4KKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworCQlzYXZlX291dHB1dD0kb3V0cHV0CisJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCisJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJCWRvbmUgPiAiJG91dHB1dCIKKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJb3V0cHV0PSRzYXZlX291dHB1dAorCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisKKwlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisJZmkKKworCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICBmaQorCWVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisJICAjIGluaXRpYWxpemUgayB0byBvbmUuCisJICB0ZXN0X2NtZHM9CisJICBjb25jYXRfY21kcz0KKwkgIG9iamxpc3Q9CisJICBsYXN0X3JvYmo9CisJICBrPTEKKworCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgorCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKKwkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgIGRvCisJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0CisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgICAgICBsZW49JGxlbjAKKworCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgorCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICAgIGRvCisJCWZ1bmNfbGVuICIgJG9iaiIKKwkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8CisJCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCQllbHNlCisJCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKKwkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgorCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKwkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJCSAgZWxzZQorCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCQkgIGZpCisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgZnVuY19hcml0aCAkayArIDEKKwkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIG9iamxpc3Q9IiAkb2JqIgorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCisJICAgIGVsc2UKKwkgICAgICBvdXRwdXQ9CisJICAgIGZpCisKKwkgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBsaWJvYmpzPSRvdXRwdXQKKwkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKworCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAkb3B0X3NpbGVudCB8fCB7CisJCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICB9CisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkJbHRfZXhpdD0kPworCisJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwkgICAgZmkKKwkgIGZpCisKKwkgIGV4aXQgJEVYSVRfU1VDQ0VTUworCWZpCisKKwkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgorCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbworCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCisJICBmaQorCWRvbmUKKworCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgorCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCisJICBkbG5hbWU9IiRzb25hbWUiCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb2JqKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAgICoubG8pCisJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKworCWxpYm9iaj0kb3V0cHV0CisJZnVuY19sbzJvICIkbGlib2JqIgorCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAorCTs7CisgICAgICAqKQorCWxpYm9iaj0KKwlvYmo9IiRvdXRwdXQiCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKKworICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCisgICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQorICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKKyAgICAgICMgdGhlIGV4dHJhY3Rpb24uCisgICAgICByZWxvYWRfY29udl9vYmpzPQorICAgICAgZ2VudG9wPQorICAgICAgIyByZWxvYWRfY21kcyBydW5zICRMRCBkaXJlY3RseSwgc28gbGV0IHVzIGdldCByaWQgb2YKKyAgICAgICMgLVdsIGZyb20gd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoCisgICAgICAjIHR1cm5pbmcgY29tbWEgaW50byBzcGFjZS4uCisgICAgICB3bD0KKworICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorCWVsc2UKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcworICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAorICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwk7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKworCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokbGliZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisKKyAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCisgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICA7OworICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKKwlmaQorCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKwkgIGVsc2UKKwkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCisJICAgIHJlbGlua19jb21tYW5kPQorCSAgZmkKKwllbHNlCisJICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisJICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKwkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKKwkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQorCisJICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCisJICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQorCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCisJICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKKwkgICAgfQorCisJICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6CisJICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCisJICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCisJICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KKwkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBlbHNlCisJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZmkKKwkgICAgfQorCSAgOzsKKwkgICogKQorCSAgICAkUk0gJG91dHB1dAorCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKKwkgICAgY2htb2QgK3ggJG91dHB1dAorCSAgOzsKKwllc2FjCisgICAgICB9CisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgorCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJYWRkbGlicz0iJGNvbnZlbmllbmNlIgorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgZWxzZQorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCisJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJZWxzZQorCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKwkgIGZpCisJZmkKKwlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKwlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKyAgICAgIGVsc2UKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKworCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQorCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCisJIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKKwkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZworCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5CisJIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgorCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCisJICAgIGRvCisJICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKwkgIDoKKwllbHNlCisJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQljYXNlICIgJG9sZG9ianMgIiBpbgorCQkqW1wgL10iJG5ld29iaiAiKikgOzsKKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworCQllc2FjCisJICAgICAgZG9uZQorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwl0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgY29tbWFuZCBmaWxlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQiCisJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxzZQorCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIHNhdmVfUkFOTElCPSRSQU5MSUIKKwkgIFJBTkxJQj06CisJICBvYmpsaXN0PQorCSAgY29uY2F0X2NtZHM9CisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgbGFzdF9vbGRvYmo9JG9iagorCSAgZG9uZQorCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgIGxlbj0kbGVuMAorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2xlbiAiICRvYmoiCisJICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZworCSAgICAgIG9sZG9ianM9JG9iamxpc3QKKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIG9iamxpc3Q9CisJICAgICAgbGVuPSRsZW4wCisJICAgIGZpCisJICBkb25lCisJICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICBvbGRvYmpzPSRvYmpsaXN0CisJICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKwkgIGVsc2UKKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGdlbmVyYXRlZCIgJiYgXAorICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCisKKyAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAqLmxhKQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKyAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAtTCopCisJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgIC1SKikKKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdkbGZpbGVzPQorCisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQorCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KKwkJIyB0aGUgbGlicmFyeToKKwkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGZpCisJICAkUk0gJG91dHB1dAorCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICAjIEluIGZhY3QsIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIHRoaXMgY29kZSBmb3IgYWxsIHRhcmdldAorCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcworCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKKwkgICMgYnV0IGl0IHR1cm5zIG91dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIHRoYXQgZnJvbSBpbnNwZWN0aW5nCisJICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0CisJICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCisJICAjIG9iamVjdCBmb3JtYXQgd2l0aCBETEwgZmlsZXMuICBTZWUgdGhlIGxvbmcgY29tbWVudCBhdCB0aGUgdG9wIG9mCisJICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKKwkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCisJICAgICAgaWYgdGVzdCAieCRiaW5kaXIiICE9IHggOworCSAgICAgIHRoZW4KKwkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgorCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0JGRsbmFtZQorCSAgICAgIGVsc2UKKwkJIyBPdGhlcndpc2UgZmFsbCBiYWNrIG9uIGhldXJpc3RpYy4KKwkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgIGVzYWMKKwkgICRFQ0hPID4gJG91dHB1dCAiXAorIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworeyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBSTT0iJG5vbm9wdCIKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPQorICAgIGV4aXRfc3RhdHVzPTAKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgorCisgICAgcm1kaXJzPQorCisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKwlvZGlyPSIkb2JqZGlyIgorICAgICAgZWxzZQorCW9kaXI9IiRkaXIvJG9iamRpciIKKyAgICAgIGZpCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKworICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJOgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKwlleGl0X3N0YXR1cz0xCisJY29udGludWUKKyAgICAgIGVsaWYgdGVzdCAiJHJtZm9yY2UiID0geWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9IiRmaWxlIgorCisgICAgICBjYXNlICRuYW1lIGluCisgICAgICAqLmxhKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbiIKKwkgIGRvbmUKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKKworCSAgY2FzZSAiJG9wdF9tb2RlIiBpbgorCSAgY2xlYW4pCisJICAgIGNhc2UgIiAkbGlicmFyeV9uYW1lcyAiIGluCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OworCSAgICBlc2FjCisJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKKwkgICAgOzsKKwkgIHVuaW5zdGFsbCkKKwkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuIDsgdGhlbgorCSAgbm9leGVuYW1lPSRuYW1lCisJICBjYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKwkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisJICAgIGZpCisJICBmaQorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgIGRvbmUKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCit7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KKwordGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CisjIHZpOnN3PTIKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9tZGF0ZS1zaCBiL2J1aWxkLWF1eC9tZGF0ZS1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDkxNmMwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L21kYXRlLXNoCkBAIC0wLDAgKzEsMjAxIEBACisjIS9iaW4vc2gKKyMgR2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHByZXR0eS1wcmludCBpdC4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA2LTI5LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyB3cml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgSnVuZSAxOTk1CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gZmlsZS4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBtZGF0ZS1zaCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFCisKK1ByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAibWRhdGUtc2ggJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKKyMgUHJldmVudCBkYXRlIGdpdmluZyByZXNwb25zZSBpbiBhbm90aGVyIGxhbmd1YWdlLgorTEFORz1DCitleHBvcnQgTEFORworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xDX1RJTUU9QworZXhwb3J0IExDX1RJTUUKKworIyBHTlUgbHMgY2hhbmdlcyBpdHMgdGltZSBmb3JtYXQgaW4gcmVzcG9uc2UgdG8gdGhlIFRJTUVfU1RZTEUKKyMgdmFyaWFibGUuICBTaW5jZSB3ZSBjYW5ub3QgYXNzdW1lIGB1bnNldCcgd29ya3MsIHJldmVydCB0aGlzCisjIHZhcmlhYmxlIHRvIGl0cyBkb2N1bWVudGVkIGRlZmF1bHQuCitpZiB0ZXN0ICIke1RJTUVfU1RZTEUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgVElNRV9TVFlMRT1wb3NpeC1sb25nLWlzbworICBleHBvcnQgVElNRV9TVFlMRQorZmkKKworc2F2ZV9hcmcxPSQxCisKKyMgRmluZCBvdXQgaG93IHRvIGdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkuCitpZiBscyAtTCAvZGV2L251bGwgMT4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsc19jb21tYW5kPSdscyAtTCAtbCAtZCcKK2Vsc2UKKyAgbHNfY29tbWFuZD0nbHMgLWwgLWQnCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGBscyAtbCAtZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9taXNzaW5nIGIvYnVpbGQtYXV4L21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk0ZTc4NgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9taXNzaW5nCkBAIC0wLDAgKzEsMzYwIEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDUtMDYtMDguMjEKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICIkMSIgaW4KKy0tcnVuKQorICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCisgIHJ1bj0KKyAgc2hpZnQKKyAgIiRAIiAmJiBleGl0IDAKKyAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucworICAjIHdoZW4gdGhlIHVzZXIgdHJ5IHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uCisgICMgYSBmaWxlIHRoYXQgcmVxdWlyZXMgYSBtaW5pbXVtIHZlcnNpb24uICBJbiB0aGlzIGNhc2Ugd2UKKyAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgorICAjIGlmIC0tcnVuIGhhZG4ndCBiZWVuIHBhc3NlZC4KKyAgaWYgdGVzdCAkPyA9IDYzOyB0aGVuCisgICAgcnVuPToKKyAgICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCisgIGZpCisgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitIYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCitlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKKyAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKKyAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcworICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGhlbHAybWFuICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKyAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncworICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisKK1NlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJzfC0tdmVyc2l8LS12ZXJzaW98LS12ZXJzaW9uKQorICAgIGVjaG8gIm1pc3NpbmcgJHNjcmlwdHZlcnNpb24gKEdOVSBBdXRvbWFrZSkiCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLSopCisgICAgZWNobyAxPiYyICIkMDogVW5rbm93biBcYCQxJyBvcHRpb24iCisgICAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIGV4aXQgMQorICAgIDs7CisKK2VzYWMKKworIyBOb3cgZXhpdCBpZiB3ZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLiAgQWxzbyBleGl0IG5vdyBpZiB3ZQorIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0CisjIHRoZSBwcm9ncmFtKS4KK2Nhc2UgIiQxIiBpbgorICBsZXh8eWFjYykKKyAgICAjIE5vdCBHTlUgcHJvZ3JhbXMsIHRoZXkgZG9uJ3QgaGF2ZSAtLXZlcnNpb24uCisgICAgOzsKKworICB0YXIpCisgICAgaWYgdGVzdCAtbiAiJHJ1biI7IHRoZW4KKyAgICAgICBlY2hvIDE+JjIgIkVSUk9SOiBcYHRhcicgcmVxdWlyZXMgLS1ydW4iCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7CisKKyAgKikKKyAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIyBXZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLgorICAgICAgIGV4aXQgMQorICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCisgICAgICAgIyBDb3VsZCBub3QgcnVuIC0tdmVyc2lvbiBvciAtLWhlbHAuICBUaGlzIGlzIHByb2JhYmx5IHNvbWVvbmUKKyAgICAgICAjIHJ1bm5pbmcgYCRUT09MIC0tdmVyc2lvbicgb3IgYCRUT09MIC0taGVscCcgdG8gY2hlY2sgd2hldGhlcgorICAgICAgICMgJFRPT0wgZXhpc3RzIGFuZCBub3Qga25vd2luZyAkVE9PTCB1c2VzIG1pc3NpbmcuCisgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICA7OworZXNhYworCisjIElmIGl0IGRvZXMgbm90IGV4aXN0LCBvciBmYWlscyB0byBydW4gKHBvc3NpYmx5IGFuIG91dGRhdGVkIHZlcnNpb24pLAorIyB0cnkgdG8gZW11bGF0ZSBpdC4KK2Nhc2UgIiQxIiBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlcikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNjb25maWcuaCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKKyAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0KKyAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbGVzPWBzZWQgLW4gJ3MvXlsgXSpBW0NNXV9DT05GSUdfSEVBREVSKFwoW14pXSpcKSkuKi9cMS9wJyAke2NvbmZpZ3VyZV9hY31gCisgICAgdGVzdCAteiAiJGZpbGVzIiAmJiBmaWxlcz0iY29uZmlnLmgiCisgICAgdG91Y2hfZmlsZXM9CisgICAgZm9yIGYgaW4gJGZpbGVzOyBkbworICAgICAgY2FzZSAiJGYiIGluCisgICAgICAqOiopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgImBlY2hvICIkZiIgfAorCQkJCSAgICAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyAtZSAncy86LiovLydgOzsKKyAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgdG91Y2ggJHRvdWNoX2ZpbGVzCisgICAgOzsKKworICBhdXRvbWFrZSopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKyAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgorICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CisJICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKKwkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKKyAgICA7OworCisgIGF1dG9tNHRlKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBidXQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KKyAgICAgICAgIFlvdSBjYW4gZ2V0IFxgJDEnIGFzIHBhcnQgb2YgXGBBdXRvY29uZicgZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLS1vdXRwdXRbID1dKlwoW14gXSpcKS4qL1wxL3AnYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotb1sgXSpcKFteIF0qXCkuKi9cMS9wJ2AKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29ufHlhY2MpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAorICAgIGlmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICIkTEFTVEFSRyIgaW4KKwkqLnkpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCisJICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCisJICAgIGZpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCisJICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIFsgISAtZiB5LnRhYi5oIF07IHRoZW4KKwllY2hvID55LnRhYi5oCisgICAgZmkKKyAgICBpZiBbICEgLWYgeS50YWIuYyBdOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCisgICAgZmkKKyAgICA7OworCisgIGxleHxmbGV4KQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCisJY2FzZSAiJExBU1RBUkciIGluCisJKi5sKQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAorCSAgICBpZiBbIC1mICIkU1JDRklMRSIgXTsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgWyAhIC1mIGxleC55eS5jIF07IHRoZW4KKwllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPmxleC55eS5jCisgICAgZmkKKyAgICA7OworCisgIGhlbHAybWFuKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKwkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCisJIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW8gXChbXiBdKlwpLiovXDEvcCdgCisgICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCisJZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLS1vdXRwdXQ9XChbXiBdKlwpLiovXDEvcCdgCisgICAgZmkKKyAgICBpZiBbIC1mICIkZmlsZSIgXTsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIG1ha2VpbmZvKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQorICAgICAgICAgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiAgVGhlIHNwdXJpb3VzCisgICAgICAgICBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgYnVnZ3kgXGBtYWtlJyAoQUlYLAorICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCisgICAgICAgICB0aGUgXGBHTlUgbWFrZScgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgICMgVGhlIGZpbGUgdG8gdG91Y2ggaXMgdGhhdCBzcGVjaWZpZWQgd2l0aCAtbyAuLi4KKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotbyBcKFteIF0qXCkuKi9cMS9wJ2AKKyAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKyAgICAgICMgLi4uIG9yIGl0IGlzIHRoZSBvbmUgc3BlY2lmaWVkIHdpdGggQHNldGZpbGVuYW1lIC4uLgorICAgICAgaW5maWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCisgICAgICBmaWxlPWBzZWQgLW4gJy9eQHNldGZpbGVuYW1lLyB7IHMvLiogXChbXiBdKlwpICokL1wxLzsgcDsgcTsgfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKQorICAgIHNoaWZ0CisKKyAgICAjIFdlIGhhdmUgYWxyZWFkeSB0cmllZCB0YXIgaW4gdGhlIGdlbmVyaWMgcGFydC4KKyAgICAjIExvb2sgZm9yIGdudXRhci9ndGFyIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHVnbHkgZXJyb3IKKyAgICAjIG1lc3NhZ2VzLgorICAgIGlmIChnbnV0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ251dGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBndGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBmaXJzdGFyZz0iJDEiCisgICAgaWYgc2hpZnQ7IHRoZW4KKwljYXNlICIkZmlyc3RhcmciIGluCisJKm8qKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgIiRmaXJzdGFyZyIgaW4KKwkqaCopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvaC8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCisgICAgZXhpdCAxCisgICAgOzsKKworICAqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKKyAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCisgICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3RleGluZm8udGV4IGIvYnVpbGQtYXV4L3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTk0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC1hdXgvdGV4aW5mby50ZXgKQEAgLTAsMCArMSw3NDgyIEBACislIHRleGluZm8udGV4IC0tIFRlWCBtYWNyb3MgdG8gaGFuZGxlIFRleGluZm8gZmlsZXMuCislCislIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KK1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCislCitcZGVmXHRleGluZm92ZXJzaW9uezIwMDYtMTAtMDQuMTd9CislCislIENvcHlyaWdodCAoQykgMTk4NSwgMTk4NiwgMTk4OCwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKKyUgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlCislIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorJSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworJSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0CislIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorJSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CislIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCislIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyUKKyUgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyUgYWxvbmcgd2l0aCB0aGlzIHRleGluZm8udGV4IGZpbGU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZQorJSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorJSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyUKKyUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCBieSBUZVggd2hlbiBwcm9jZXNzaW5nCislIGEgVGV4aW5mbyBzb3VyY2UgZG9jdW1lbnQsIHlvdSBtYXkgdXNlIHRoZSByZXN1bHQgd2l0aG91dAorJSByZXN0cmljdGlvbi4gIChUaGlzIGhhcyBiZWVuIG91ciBpbnRlbnQgc2luY2UgVGV4aW5mbyB3YXMgaW52ZW50ZWQuKQorJQorJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKKyUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CislICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vICh0aGUgVGV4aW5mbyBob21lIHBhZ2UpLCBvcgorJSAgIGZ0cDovL3R1Zy5vcmcvdGV4L3RleGluZm8udGV4CislICAgICAoYW5kIGFsbCBDVEFOIG1pcnJvcnMsIHNlZSBodHRwOi8vd3d3LmN0YW4ub3JnKS4KKyUgVGhlIHRleGluZm8udGV4IGluIGFueSBnaXZlbiBkaXN0cmlidXRpb24gY291bGQgd2VsbCBiZSBvdXQKKyUgb2YgZGF0ZSwgc28gaWYgdGhhdCdzIHdoYXQgeW91J3JlIHVzaW5nLCBwbGVhc2UgY2hlY2suCislCislIFNlbmQgYnVnIHJlcG9ydHMgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4gIFBsZWFzZSBpbmNsdWRlIGluY2x1ZGluZyBhCislIGNvbXBsZXRlIGRvY3VtZW50IGluIGVhY2ggYnVnIHJlcG9ydCB3aXRoIHdoaWNoIHdlIGNhbiByZXByb2R1Y2UgdGhlCislIHByb2JsZW0uICBQYXRjaGVzIGFyZSwgb2YgY291cnNlLCBncmVhdGx5IGFwcHJlY2lhdGVkLgorJQorJSBUbyBwcm9jZXNzIGEgVGV4aW5mbyBtYW51YWwgd2l0aCBUZVgsIGl0J3MgbW9zdCByZWxpYWJsZSB0byB1c2UgdGhlCislIHRleGkyZHZpIHNoZWxsIHNjcmlwdCB0aGF0IGNvbWVzIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIEZvciBhIHNpbXBsZQorJSBtYW51YWwgZm9vLnRleGksIGhvd2V2ZXIsIHlvdSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzOgorJSAgIHRleCBmb28udGV4aQorJSAgIHRleGluZGV4IGZvby4/PworJSAgIHRleCBmb28udGV4aQorJSAgIHRleCBmb28udGV4aQorJSAgIGR2aXBzIGZvby5kdmkgLW8gICMgb3Igd2hhdGV2ZXI7IHRoaXMgbWFrZXMgZm9vLnBzLgorJSBUaGUgZXh0cmEgVGVYIHJ1bnMgZ2V0IHRoZSBjcm9zcy1yZWZlcmVuY2UgaW5mb3JtYXRpb24gY29ycmVjdC4KKyUgU29tZXRpbWVzIG9uZSBydW4gYWZ0ZXIgdGV4aW5kZXggc3VmZmljZXMsIGFuZCBzb21ldGltZXMgeW91IG5lZWQgbW9yZQorJSB0aGFuIHR3bzsgdGV4aTJkdmkgZG9lcyBpdCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeS4KKyUKKyUgSXQgaXMgcG9zc2libGUgdG8gYWRhcHQgdGV4aW5mby50ZXggZm9yIG90aGVyIGxhbmd1YWdlcywgdG8gc29tZQorJSBleHRlbnQuICBZb3UgY2FuIGdldCB0aGUgZXhpc3RpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmlsZXMgZnJvbSB0aGUKKyUgZnVsbCBUZXhpbmZvIGRpc3RyaWJ1dGlvbi4KKyUKKyUgVGhlIEdOVSBUZXhpbmZvIGhvbWUgcGFnZSBpcyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby4KKworCitcbWVzc2FnZXtMb2FkaW5nIHRleGluZm8gW3ZlcnNpb24gXHRleGluZm92ZXJzaW9uXTp9CisKKyUgSWYgaW4gYSAuZm10IGZpbGUsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlcgorJSBhbmQgdHVybiBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IHdlIGNvdWxkbid0IGRvIGVhcmxpZXIgYmVjYXVzZQorJSB0aGV5IG1pZ2h0IGhhdmUgYXBwZWFyZWQgaW4gdGhlIGlucHV0IGZpbGUgbmFtZS4KK1xldmVyeWpvYntcbWVzc2FnZXtbVGV4aW5mbyB2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl19JQorICBcY2F0Y29kZWArPVxhY3RpdmUgXGNhdGNvZGVgXF89XGFjdGl2ZX0KKworXG1lc3NhZ2V7QmFzaWNzLH0KK1xjaGFyZGVmXG90aGVyPTEyCisKKyUgV2UgbmV2ZXIgd2FudCBwbGFpbidzIFxvdXRlciBkZWZpbml0aW9uIG9mIFwrIGluIFRleGluZm8uCislIEZvciBAdGV4LCB3ZSBjYW4gdXNlIFx0YWJhbGlnbi4KK1xsZXRcKyA9IFxyZWxheAorCislIFNhdmUgc29tZSBwbGFpbiB0ZXggbWFjcm9zIHdob3NlIG5hbWVzIHdlIHdpbGwgcmVkZWZpbmUuCitcbGV0XHB0ZXhiPVxiCitcbGV0XHB0ZXhidWxsZXQ9XGJ1bGxldAorXGxldFxwdGV4Yz1cYworXGxldFxwdGV4Y29tbWE9XCwKK1xsZXRccHRleGRvdD1cLgorXGxldFxwdGV4ZG90cz1cZG90cworXGxldFxwdGV4ZW5kPVxlbmQKK1xsZXRccHRleGVxdWl2PVxlcXVpdgorXGxldFxwdGV4ZXhjbGFtPVwhCitcbGV0XHB0ZXhmb290bm90ZT1cZm9vdG5vdGUKK1xsZXRccHRleGd0cj0+CitcbGV0XHB0ZXhoYXQ9XgorXGxldFxwdGV4aT1caQorXGxldFxwdGV4aW5kZW50PVxpbmRlbnQKK1xsZXRccHRleGluc2VydD1caW5zZXJ0CitcbGV0XHB0ZXhsYnJhY2U9XHsKK1xsZXRccHRleGxlc3M9PAorXGxldFxwdGV4bmV3d3JpdGVcbmV3d3JpdGUKK1xsZXRccHRleG5vaW5kZW50PVxub2luZGVudAorXGxldFxwdGV4cGx1cz0rCitcbGV0XHB0ZXhyYnJhY2U9XH0KK1xsZXRccHRleHNsYXNoPVwvCitcbGV0XHB0ZXhzdGFyPVwqCitcbGV0XHB0ZXh0PVx0CisKKyUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAorJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgorXG5ld2xpbmVjaGFyID0gYF5eSgorCislIFVzZSBUZVggMy4wJ3MgXGlucHV0bGluZW5vIHRvIGdldCB0aGUgbGluZSBudW1iZXIsIGZvciBiZXR0ZXIgZXJyb3IKKyUgbWVzc2FnZXMsIGJ1dCBpZiB3ZSdyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLgorJQorXGlmeFxpbnB1dGxpbmVub1x0aGlzaXN1bmRlZmluZWQKKyAgXGxldFxsaW5lbnVtYmVyID0gXGVtcHR5ICUgUHJlLTMuMC4KK1xlbHNlCisgIFxkZWZcbGluZW51bWJlcntsLlx0aGVcaW5wdXRsaW5lbm86XHNwYWNlfQorXGZpCisKKyUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KK1xpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQorXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZmlsZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkZmlsZXtmaWxlfVxmaQorXGlmeFxwdXR3b3JkaW5cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3JkaW57aW59XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkSW5kZXhJc0VtcHR5eyhJbmRleCBpcyBlbXB0eSl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5kZXhOb25leGlzdGVudHsoSW5kZXggaXMgbm9uZXhpc3RlbnQpfVxmaQorXGlmeFxwdXR3b3JkSW5mb1x1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkSW5mb3tJbmZvfVxmaQorXGlmeFxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9me0luc3RhbmNlIFZhcmlhYmxlIG9mfVxmaQorXGlmeFxwdXR3b3JkTWV0aG9kb25cdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkTWV0aG9kb257TWV0aG9kIG9ufVxmaQorXGlmeFxwdXR3b3JkTm9UaXRsZVx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkTm9UaXRsZXtObyBUaXRsZX1cZmkKK1xpZnhccHV0d29yZG9mXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9me29mfVxmaQorXGlmeFxwdXR3b3Jkb25cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb257b259XGZpCitcaWZ4XHB1dHdvcmRwYWdlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRwYWdle3BhZ2V9XGZpCitcaWZ4XHB1dHdvcmRzZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRzZWN0aW9ue3NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRTZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRTZWN0aW9ue1NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRzZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRzZWV7c2VlfVxmaQorXGlmeFxwdXR3b3JkU2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkU2Vle1NlZX1cZmkKK1xpZnhccHV0d29yZFNob3J0VE9DXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZFNob3J0VE9De1Nob3J0IENvbnRlbnRzfVxmaQorXGlmeFxwdXR3b3JkVE9DXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkVE9De1RhYmxlIG9mIENvbnRlbnRzfVxmaQorJQorXGlmeFxwdXR3b3JkTUphblx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KYW57SmFudWFyeX1cZmkKK1xpZnhccHV0d29yZE1GZWJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRmVie0ZlYnJ1YXJ5fVxmaQorXGlmeFxwdXR3b3JkTU1hclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXJ7TWFyY2h9XGZpCitcaWZ4XHB1dHdvcmRNQXByXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUFwcntBcHJpbH1cZmkKK1xpZnhccHV0d29yZE1NYXlcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWF5e01heX1cZmkKK1xpZnhccHV0d29yZE1KdW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVue0p1bmV9XGZpCitcaWZ4XHB1dHdvcmRNSnVsXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bHtKdWx5fVxmaQorXGlmeFxwdXR3b3JkTUF1Z1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BdWd7QXVndXN0fVxmaQorXGlmeFxwdXR3b3JkTVNlcFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1TZXB7U2VwdGVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTU9jdFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1PY3R7T2N0b2Jlcn1cZmkKK1xpZnhccHV0d29yZE1Ob3ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTm92e05vdmVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTURlY1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1EZWN7RGVjZW1iZXJ9XGZpCislCitcaWZ4XHB1dHdvcmREZWZtYWNcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZtYWN7TWFjcm99XGZpCitcaWZ4XHB1dHdvcmREZWZzcGVjXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZzcGVje1NwZWNpYWwgRm9ybX1cZmkKK1xpZnhccHV0d29yZERlZnZhclx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZnZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZm9wdFx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm9wdHtVc2VyIE9wdGlvbn1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCisKKyUgU2luY2UgdGhlIGNhdGVnb3J5IG9mIHNwYWNlIGlzIG5vdCBrbm93biwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsLgorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVgXCA9XHNwYWNlY2F0fQorCislIHNvbWV0aW1lcyBjaGFyYWN0ZXJzIGFyZSBhY3RpdmUsIHNvIHdlIG5lZWQgY29udHJvbCBzZXF1ZW5jZXMuCitcY2hhcmRlZlxjb2xvbkNoYXIgPSBgXDoKK1xjaGFyZGVmXGNvbW1hQ2hhciA9IGBcLAorXGNoYXJkZWZcZGFzaENoYXIgID0gYFwtCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGV4Y2xhbUNoYXI9IGBcIQorXGNoYXJkZWZcbHF1b3RlQ2hhcj0gYFxgCitcY2hhcmRlZlxxdWVzdENoYXIgPSBgXD8KK1xjaGFyZGVmXHJxdW90ZUNoYXI9IGBcJworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CitcY2hhcmRlZlx1bmRlckNoYXIgPSBgXF8KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBNYWluIG91dHB1dCByb3V0aW5lLgorXGNoYXJkZWZcUEFHRSA9IDI1NQorXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQorCitcbmV3Ym94XGhlYWRsaW5lYm94CitcbmV3Ym94XGZvb3RsaW5lYm94CisKKyUgXG9uZXBhZ2VvdXQgdGFrZXMgYSB2Ym94IGFzIGFuIGFyZ3VtZW50LiAgTm90ZSB0aGF0IFxwYWdlY29udGVudHMKKyUgZG9lcyBpbnNlcnRpb25zLCBidXQgeW91IGhhdmUgdG8gY2FsbCBpdCB5b3Vyc2VsZi4KK1xkZWZcb25lcGFnZW91dCMxeyUKKyAgXGlmY3JvcG1hcmtzIFxob2Zmc2V0PTBwdCBcZWxzZSBcaG9mZnNldD1cbm9ybWFsb2Zmc2V0IFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8gIFxhZHZhbmNlXGhvZmZzZXQgYnkgXGJpbmRpbmdvZmZzZXQKKyAgXGVsc2UgXGFkdmFuY2VcaG9mZnNldCBieSAtXGJpbmRpbmdvZmZzZXRcZmkKKyAgJQorICAlIERvIHRoaXMgb3V0c2lkZSBvZiB0aGUgXHNoaXBvdXQgc28gQGNvZGUgZXRjLiB3aWxsIGJlIGV4cGFuZGVkIGluCisgICUgdGhlIGhlYWRsaW5lIGFzIHRoZXkgc2hvdWxkIGJlLCBub3QgdGFrZW4gbGl0ZXJhbGx5IChvdXRwdXR0aW5nICcnY29kZSkuCisgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgXCBpbiBpbmRleCBlbnRyaWVzIG11c3Qgbm90IHN0YXkgXCwgZS5nLiwgaWYKKyAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAlIFdlIGRvbid0IHdhbnQgLnZyIChvciB3aGF0ZXZlcikgZW50cmllcyBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAlIFxlbnRyeXt7XHR0IFxpbmRleGJhY2tzbGFzaCB9YWNyb255bX17MzJ9e1xjb2RlIHtcYWNyb255bX19CisgICAgICAgICAgICAgICAlICJcYWNyb255bSIgd29uJ3Qgd29yayB3aGVuIGl0J3MgcmVhZCBiYWNrIGluOworICAgICAgICAgICAgICAgJSBpdCBuZWVkcyB0byBiZQorICAgICAgICAgICAgICAgJSB7XGNvZGUge3tcdHQgXGJhY2tzbGFzaGN1cmZvbnQgfWFjcm9ueW19CisgICAgXHNoaXBvdXRcdmJveHslCisgICAgICAlIERvIHRoaXMgZWFybHkgc28gcGRmIHJlZmVyZW5jZXMgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KKyAgICAgIFxpZnBkZm1ha2VwYWdlZGVzdCBccGRmZGVzdCBuYW1le1x0aGVccGFnZW5vfSB4eXpcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcyBcdmJveCB0byBcb3V0ZXJ2c2l6ZVxiZ3JvdXAKKyAgICAgICAgXGhzaXplID0gXG91dGVyaHNpemUKKyAgICAgICAgXHZza2lwLVx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXHZ0b3AgdG8wcHR7JQorICAgICAgICAgIFxsaW5le1xld3RvcFxoZmlsXGV3dG9wfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcdnNzfSUKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcbGluZVxiZ3JvdXAKKyAgICAgICAgICBcaGZpbCAlIGNlbnRlciB0aGUgcGFnZSB3aXRoaW4gdGhlIG91dGVyIChwYWdlKSBoc2l6ZS4KKyAgICAgICAgICBcaWZvZGRccGFnZW5vXGhza2lwXGJpbmRpbmdvZmZzZXRcZmkKKyAgICAgICAgICBcdmJveFxiZ3JvdXAKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXHVudmJveFxoZWFkbGluZWJveAorICAgICAgXHBhZ2Vib2R5eyMxfSUKKyAgICAgIFxpZmRpbVxodFxmb290bGluZWJveCA+IDBwdAorICAgICAgICAlIE9ubHkgbGVhdmUgdGhpcyBzcGFjZSBpZiB0aGUgZm9vdGxpbmUgaXMgbm9uZW1wdHkuCisgICAgICAgICUgKFdlIGxlc3NlbmVkIFx2c2l6ZSBmb3IgaXQgaW4gXG9kZGZvb3Rpbmd5eXkuKQorICAgICAgICAlIFRoZSBcYmFzZWxpbmVza2lwPTI0cHQgaW4gcGxhaW4ncyBcbWFrZWZvb3RsaW5lIGhhcyBubyBlZmZlY3QuCisgICAgICAgIFx2c2tpcCAyNHB0CisgICAgICAgIFx1bnZib3hcZm9vdGxpbmVib3gKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzCisgICAgICAgICAgXGVncm91cCAlIGVuZCBvZiBcdmJveFxiZ3JvdXAKKyAgICAgICAgXGhmaWxcZWdyb3VwICUgZW5kIG9mIChjZW50ZXJpbmcpIFxsaW5lXGJncm91cAorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luIHBsdXMxZmlsbCBtaW51czFmaWxsCisgICAgICAgIFxib3htYXhkZXB0aCA9IFxjb3JuZXJ0aGljaworICAgICAgICBcdmJveCB0bzBwdHtcdnNzCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7XGV3Ym90XGhmaWxcZXdib3R9JQorICAgICAgICB9JQorICAgICAgXGVncm91cCAlIFx2Ym94IGZyb20gZmlyc3QgY3JvcG1hcmtzIGNsYXVzZQorICAgICAgXGZpCisgICAgfSUgZW5kIG9mIFxzaGlwb3V0XHZib3gKKyAgfSUgZW5kIG9mIGdyb3VwIHdpdGggXGluZGV4ZHVtbWllcworICBcYWR2YW5jZXBhZ2VubworICBcaWZudW1cb3V0cHV0cGVuYWx0eT4tMjAwMDAgXGVsc2VcZG9zdXBlcmVqZWN0XGZpCit9CisKK1xuZXdpbnNlcnRcbWFyZ2luIFxkaW1lblxtYXJnaW49XG1heGRpbWVuCisKK1xkZWZccGFnZWJvZHkjMXtcdmJveCB0b1xwYWdlaGVpZ2h0e1xib3htYXhkZXB0aD1cbWF4ZGVwdGggIzF9fQore1xjYXRjb2RlYFxAID0xMQorXGdkZWZccGFnZWNvbnRlbnRzIzF7XGlmdm9pZFx0b3BpbnNcZWxzZVx1bnZib3hcdG9waW5zXGZpCislIG1hcmdpbmFsIGhhY2tzLCBqdWhhQHZpaXNhLnV1Y3AgKEp1aGEgVGFrYWxhKQorXGlmdm9pZFxtYXJnaW5cZWxzZSAlIG1hcmdpbmFsIGluZm8gaXMgcHJlc2VudAorICBccmxhcHtca2Vyblxoc2l6ZVx2Ym94IHRvXHpAe1xrZXJuMXB0XGJveFxtYXJnaW4gXHZzc319XGZpCitcZGltZW5APVxkcCMxIFx1bnZib3gjMQorXGlmdm9pZFxmb290aW5zXGVsc2VcdnNraXBcc2tpcFxmb290aW5zXGZvb3Rub3RlcnVsZSBcdW52Ym94XGZvb3RpbnNcZmkKK1xpZnJAZ2dlZGJvdHRvbSBca2Vybi1cZGltZW5AIFx2ZmlsIFxmaX0KK30KKworJSBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHRoZSBjcm9wbWFya3MuICBOb3RlIHRoYXQgdGhleSBhcmUKKyUgb2Zmc2V0IHNvIHRoYXQgdGhlIHNwYWNlIGJldHdlZW4gdGhlbSBpcyB0cnVseSBcb3V0ZXJoc2l6ZSBvciBcb3V0ZXJ2c2l6ZQorJSAoUC4gQS4gTWFjS2F5LCAxMiBOb3ZlbWJlciwgMTk4NikKKyUKK1xkZWZcZXd0b3B7XHZydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aDBwdCB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc3RvcHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aFxjb3JuZXJsb25nIHdpZHRoXGNvcm5lcnRoaWNrfX0KK1xkZWZcZXdib3R7XHZydWxlIGhlaWdodDBwdCBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc2JvdHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJsb25nIGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcnRoaWNrfX0KKworJSBQYXJzZSBhbiBhcmd1bWVudCwgdGhlbiBwYXNzIGl0IHRvICMxLiAgVGhlIGFyZ3VtZW50IGlzIHRoZSByZXN0IG9mCislIHRoZSBpbnB1dCBsaW5lIChleGNlcHQgd2UgcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWVudCkuICAjMSBzaG91bGQgYmUgYQorJSBtYWNybyB3aGljaCBleHBlY3RzIGFuIG9yZGluYXJ5IHVuZGVsaW1pdGVkIFRlWCBhcmd1bWVudC4KKyUKK1xkZWZccGFyc2Vhcmd7XHBhcnNlYXJndXNpbmd7fX0KK1xkZWZccGFyc2Vhcmd1c2luZyMxIzJ7JQorICBcZGVmXGFyZ3RvcnVueyMyfSUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcb2JleWxpbmVzCisgICAgXHNwYWNlaXNzcGFjZQorICAgICMxJQorICAgIFxwYXJzZWFyZ2xpbmVcZW1wdHklIEluc2VydCB0aGUgXGVtcHR5IHRva2VuLCBzZWUgXGZpbmlzaHBhcnNlYXJnIGJlbG93LgorfQorCit7XG9iZXlsaW5lcyAlCisgIFxnZGVmXHBhcnNlYXJnbGluZSMxXl5NeyUKKyAgICBcZW5kZ3JvdXAgJSBFbmQgb2YgdGhlIGdyb3VwIHN0YXJ0ZWQgaW4gXHBhcnNlYXJnLgorICAgIFxhcmdyZW1vdmVjb21tZW50ICMxXGNvbW1lbnRcQXJnVGVybSUKKyAgfSUKK30KKworJSBGaXJzdCByZW1vdmUgYW55IEBjb21tZW50LCB0aGVuIGFueSBAYyBjb21tZW50LgorXGRlZlxhcmdyZW1vdmVjb21tZW50IzFcY29tbWVudCMyXEFyZ1Rlcm17XGFyZ3JlbW92ZWMgIzFcY1xBcmdUZXJtfQorXGRlZlxhcmdyZW1vdmVjIzFcYyMyXEFyZ1Rlcm17XGFyZ2NoZWNrc3BhY2VzIzFcXl5NXEFyZ1Rlcm19CisKKyUgRWFjaCBvY2N1cmVuY2Ugb2YgYFxeXk0nIG9yIGA8c3BhY2U+XF5eTScgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuCislCislIFxhcmdyZW1vdmVjIG1pZ2h0IGxlYXZlIHVzIHdpdGggdHJhaWxpbmcgc3BhY2UsIGUuZy4sCislICAgIEBlbmQgaXRlbWl6ZSAgQGMgZm9vCislIFRoaXMgc3BhY2UgdG9rZW4gdW5kZXJnb2VzIHRoZSBzYW1lIHByb2NlZHVyZSBhbmQgaXMgZXZlbnR1YWxseSByZW1vdmVkCislIGJ5IFxmaW5pc2hwYXJzZWFyZy4KKyUKK1xkZWZcYXJnY2hlY2tzcGFjZXMjMVxeXk17XGFyZ2NoZWNrc3BhY2VzWCMxXF5eTSBcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1gjMSBcXl5Ne1xhcmdjaGVja3NwYWNlc1kjMVxeXk19CitcZGVmXGFyZ2NoZWNrc3BhY2VzWSMxXF5eTSMyXF5eTSMzXEFyZ1Rlcm17JQorICBcZGVmXHRlbXB7IzN9JQorICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAlIERvIG5vdCB1c2UgXG5leHQsIHBlcmhhcHMgdGhlIGNhbGxlciBvZiBccGFyc2VhcmcgdXNlcyBpdDsgcmV1c2UgXHRlbXA6CisgICAgXGxldFx0ZW1wXGZpbmlzaHBhcnNlYXJnCisgIFxlbHNlCisgICAgXGxldFx0ZW1wXGFyZ2NoZWNrc3BhY2VzCisgIFxmaQorICAlIFB1dCB0aGUgc3BhY2UgdG9rZW4gaW46CisgIFx0ZW1wIzEgIzNcQXJnVGVybQorfQorCislIElmIGEgX2RlbGltaXRlZF8gYXJndW1lbnQgaXMgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGV5IGdldCBzdHJpcHBlZDsgc28KKyUgdG8gZ2V0IF9leGFjdGx5XyB0aGUgcmVzdCBvZiB0aGUgbGluZSwgd2UgaGFkIHRvIHByZXZlbnQgc3VjaCBzaXR1YXRpb24uCislIFdlIHByZXBlbmRlZCBhbiBcZW1wdHkgdG9rZW4gYXQgdGhlIHZlcnkgYmVnaW5uaW5nIGFuZCB3ZSBleHBhbmQgaXQgbm93LAorJSBqdXN0IGJlZm9yZSBwYXNzaW5nIHRoZSBjb250cm9sIHRvIFxhcmd0b3J1bi4KKyUgKFNpbWlsYXJpbHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxhcmd0b3J1blxleHBhbmRhZnRlcnsjMX19CisKKyUgXHBhcnNlYXJnZGVmXGZvb3suLi59CislCWlzIHJvdWdobHkgZXF1aXZhbGVudCB0bworJSBcZGVmXGZvb3tccGFyc2VhcmdcWGZvb30KKyUgXGRlZlxYZm9vIzF7Li4ufQorJQorJSBBY3R1YWxseSwgSSB1c2UgXGNzbmFtZVxzdHJpbmdcZm9vXGVuZGNzbmFtZSwgaWUuIFxcZm9vLCBhcyBpdCBpcyBteQorJSBmYXZvdXJpdGUgVGVYIHRyaWNrLiAgLS1rYXNhbCwgMTZub3YwMworCitcZGVmXHBhcnNlYXJnZGVmIzF7JQorICBcZXhwYW5kYWZ0ZXIgXGRvcGFyc2VhcmdkZWYgXGNzbmFtZVxzdHJpbmcjMVxlbmRjc25hbWUgIzElCit9CitcZGVmXGRvcGFyc2VhcmdkZWYjMSMyeyUKKyAgXGRlZiMye1xwYXJzZWFyZyMxfSUKKyAgXGRlZiMxIyMxJQorfQorCislIFNldmVyYWwgdXRpbGl0eSBkZWZpbml0aW9ucyB3aXRoIGFjdGl2ZSBzcGFjZToKK3sKKyAgXG9iZXlzcGFjZXMKKyAgXGdkZWZcb2JleWVkc3BhY2V7IH0KKworICAlIE1ha2UgZWFjaCBzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHByb2R1Y2UgYSBub3JtYWwgaW50ZXJ3b3JkCisgICUgc3BhY2UgaW4gdGhlIG91dHB1dC4gIERvbid0IGFsbG93IGEgbGluZSBicmVhayBhdCB0aGlzIHNwYWNlLCBhcyB0aGlzCisgICUgaXMgdXNlZCBvbmx5IGluIGVudmlyb25tZW50cyBsaWtlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQKKyAgJSBzaG91bGQgcHJvZHVjZSBhIGxpbmUgb2Ygb3V0cHV0IGFueXdheS4KKyAgJQorICBcZ2RlZlxzZXBzcGFjZXN7XG9iZXlzcGFjZXNcbGV0ID1cdGllfQorCisgICUgSWYgYW4gaW5kZXggY29tbWFuZCBpcyB1c2VkIGluIGFuIEBleGFtcGxlIGVudmlyb25tZW50LCBhbnkgc3BhY2VzCisgICUgdGhlcmVpbiBzaG91bGQgYmVjb21lIHJlZ3VsYXIgc3BhY2VzIGluIHRoZSByYXcgaW5kZXggZmlsZSwgbm90IHRoZQorICAlIGV4cGFuc2lvbiBvZiBcdGllIChcbGVhdmV2bW9kZSBccGVuYWx0eSBcQE0gXCApLgorICBcZ2RlZlx1bnNlcHNwYWNlc3tcbGV0ID1cc3BhY2V9Cit9CisKKworXGRlZlxmbHVzaGNye1xpZnhccGFyXGxpc3BwYXIgXGRlZlxuZXh0IyMxe31cZWxzZSBcbGV0XG5leHQ9XHJlbGF4IFxmaSBcbmV4dH0KKworJSBEZWZpbmUgdGhlIGZyYW1ld29yayBmb3IgZW52aXJvbm1lbnRzIGluIHRleGluZm8udGV4LiAgSXQncyB1c2VkIGxpa2UgdGhpczoKKyUKKyUgICBcZW52ZGVmXGZvb3suLi59CislICAgXGRlZlxFZm9vey4uLn0KKyUKKyUgSXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgXGVudmRlZiB0byBpbnNlcnQgXGJlZ2luZ3JvdXAgYmVmb3JlIHRoZQorJSBhY3R1YWwgYm9keTsgQGVuZCBjbG9zZXMgdGhlIGdyb3VwIGFmdGVyIGNhbGxpbmcgXEVmb28uICBcZW52ZGVmIGFsc28KKyUgZGVmaW5lcyBcdGhpc2Vudiwgc28gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMga25vd247IEBlbmQgY2hlY2tzCislIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IG5hbWUgbWF0Y2hlcy4gIFRoZSBcY2hlY2tlbnYgbWFjcm8gY2FuIGFsc28gYmUKKyUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRoZSBvbmUgZXhwZWN0ZWQuCislCislIE5vbi1mYWxzZSBjb25kaXRpb25hbHMgKEBpZnRleCwgQGlmc2V0KSBkb24ndCBmaXQgaW50byB0aGlzLCBzbyB0aGV5CislIGFyZSBub3QgdHJlYXRlZCBhcyBlbnZpcm9tZW50czsgdGhleSBkb24ndCBvcGVuIGEgZ3JvdXAuICAoVGhlCislIGltcGxlbWVudGF0aW9uIG9mIEBlbmQgdGFrZXMgY2FyZSBub3QgdG8gY2FsbCBcZW5kZ3JvdXAgaW4gdGhpcworJSBzcGVjaWFsIGNhc2UuKQorCisKKyUgQXQgcnVudGltZSwgZW52aXJvbm1lbnRzIHN0YXJ0IHdpdGggdGhpczoKK1xkZWZcc3RhcnRlbnZpcm9ubWVudCMxe1xiZWdpbmdyb3VwXGRlZlx0aGlzZW52eyMxfX0KKyUgaW5pdGlhbGl6ZQorXGxldFx0aGlzZW52XGVtcHR5CisKKyUgLi4uIGJ1dCB0aGV5IGdldCBkZWZpbmVkIHZpYSBgYFxlbnZkZWZcZm9vey4uLn0nJzoKK1xsb25nXGRlZlxlbnZkZWYjMSMye1xkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorXGRlZlxlbnZwYXJzZWFyZ2RlZiMxIzJ7XHBhcnNlYXJnZGVmIzF7XHN0YXJ0ZW52aXJvbm1lbnQjMSMyfX0KKworJSBDaGVjayB3aGV0aGVyIHdlJ3JlIGluIHRoZSByaWdodCBlbnZpcm9ubWVudDoKK1xkZWZcY2hlY2tlbnYjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgIFxlbHNlCisgICAgXGJhZGVudmVycgorICBcZmkKK30KKworJSBFdmlyb25tZW50IG1pc21hdGNoLCAjMSBleHBlY3RlZDoKK1xkZWZcYmFkZW52ZXJyeyUKKyAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIGNhbiBhcHBlYXIgb25seSBcaW5lbnZpcm9ubWVudFx0ZW1wLAorICAgIG5vdCBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKK30KK1xkZWZcaW5lbnZpcm9ubWVudCMxeyUKKyAgXGlmeCMxXGVtcHR5CisgICAgb3V0IG9mIGFueSBlbnZpcm9ubWVudCUKKyAgXGVsc2UKKyAgICBpbiBlbnZpcm9ubWVudCBcZXhwYW5kYWZ0ZXJcc3RyaW5nIzElCisgIFxmaQorfQorCislIEBlbmQgZm9vIGV4ZWN1dGVzIHRoZSBkZWZpbml0aW9uIG9mIFxFZm9vLgorJSBCdXQgZmlyc3QsIGl0IGV4ZWN1dGVzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBcY2hlY2tlbnYKKyUKK1xwYXJzZWFyZ2RlZlxlbmR7JQorICBcaWYgMVxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZQorICBcZWxzZQorICAgICUgVGhlIGdlbmVyYWwgd29yZGluZyBvZiBcYmFkZW52ZXJyIG1heSBub3QgYmUgaWRlYWwsIGJ1dC4uLiAtLWthc2FsLCAwNm5vdjAzCisgICAgXGV4cGFuZGFmdGVyXGNoZWNrZW52XGNzbmFtZSMxXGVuZGNzbmFtZQorICAgIFxjc25hbWUgRSMxXGVuZGNzbmFtZQorICAgIFxlbmRncm91cAorICBcZmkKK30KKworXG5ld2hlbHBcRU1zaW1wbGV7UHJlc3MgUkVUVVJOIHRvIGNvbnRpbnVlLn0KKworCislJSBTaW1wbGUgc2luZ2xlLWNoYXJhY3RlciBAIGNvbW1hbmRzCisKKyUgQEAgcHJpbnRzIGFuIEAKKyUgS2x1ZGdlIHRoaXMgdW50aWwgdGhlIGZvbnRzIGFyZSByaWdodCAoZ3JyKS4KK1xkZWZcQHt7XHR0XGNoYXI2NH19CisKKyUgVGhpcyBpcyB0dXJuZWQgb2ZmIGJlY2F1c2UgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQKKyUgYW5kIHlvdSBjYW4gdXNlIEB3ey4uLn0gYXJvdW5kIGEgcXVvdGUgdG8gc3VwcHJlc3MgbGlnYXR1cmVzLgorJSUgRGVmaW5lIEBgIGFuZCBAJyB0byBiZSB0aGUgc2FtZSBhcyBgIGFuZCAnCislJSBidXQgc3VwcHJlc3NpbmcgbGlnYXR1cmVzLgorJVxkZWZcYHt7YH19CislXGRlZlwne3snfX0KKworJSBVc2VkIHRvIGdlbmVyYXRlIHF1b3RlZCBicmFjZXMuCitcZGVmXG15bGJyYWNlIHt7XHR0XGNoYXIxMjN9fQorXGRlZlxteXJicmFjZSB7e1x0dFxjaGFyMTI1fX0KK1xsZXRcez1cbXlsYnJhY2UKK1xsZXRcfT1cbXlyYnJhY2UKK1xiZWdpbmdyb3VwCisgICUgRGVmaW5pdGlvbnMgdG8gcHJvZHVjZSBceyBhbmQgXH0gY29tbWFuZHMgZm9yIGluZGljZXMsCisgICUgYW5kIEB7IGFuZCBAfSBmb3IgdGhlIGF1eC90b2MgZmlsZXMuCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgIFxjYXRjb2RlYFxbID0gMSBcY2F0Y29kZWBcXSA9IDIKKyAgXGNhdGNvZGVgXCEgPSAwIFxjYXRjb2RlYFxcID0gXG90aGVyCisgICFnZGVmIWxicmFjZWNtZFtce10lCisgICFnZGVmIXJicmFjZWNtZFtcfV0lCisgICFnZGVmIWxicmFjZWF0Y21kW0B7XSUKKyAgIWdkZWYhcmJyYWNlYXRjbWRbQH1dJQorIWVuZGdyb3VwCisKKyUgQGNvbW1he30gdG8gYXZvaWQgLCBwYXJzaW5nIHByb2JsZW1zLgorXGxldFxjb21tYSA9ICwKKworJSBBY2NlbnRzOiBALCBAZG90YWNjZW50IEByaW5nYWNjZW50IEB1YmFyYWNjZW50IEB1ZG90YWNjZW50CislIE90aGVycyBhcmUgZGVmaW5lZCBieSBwbGFpbiBUZVg6IEBgIEAnIEAiIEBeIEB+IEA9IEB1IEB2IEBILgorXGxldFwsID0gXGMKK1xsZXRcZG90YWNjZW50ID0gXC4KK1xkZWZccmluZ2FjY2VudCMxe3tcYWNjZW50MjMgIzF9fQorXGxldFx0aWVhY2NlbnQgPSBcdAorXGxldFx1YmFyYWNjZW50ID0gXGIKK1xsZXRcdWRvdGFjY2VudCA9IFxkCisKKyUgT3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzOiBAcXVlc3Rpb25kb3duIEBleGNsYW1kb3duIEBvcmRmIEBvcmRtCislIFBsYWluIFRlWCBkZWZpbmVzOiBAQUEgQEFFIEBPIEBPRSBATCAocGx1cyBsb3dlcmNhc2UgdmVyc2lvbnMpIEBzcy4KK1xkZWZccXVlc3Rpb25kb3duez9gfQorXGRlZlxleGNsYW1kb3dueyFgfQorXGRlZlxvcmRme1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye2F9fX0KK1xkZWZcb3JkbXtcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcntvfX19CisKKyUgRG90bGVzcyBpIGFuZCBkb3RsZXNzIGosIHVzZWQgZm9yIGFjY2VudHMuCitcZGVmXGltYWNyb3tpfQorXGRlZlxqbWFjcm97an0KK1xkZWZcZG90bGVzcyMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGltYWNybyBccHRleGkKKyAgXGVsc2VcaWZ4XHRlbXBcam1hY3JvIFxqCisgIFxlbHNlIFxlcnJtZXNzYWdle0Bkb3RsZXNzIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBpIG9yIGp9JQorICBcZmlcZmkKK30KKworJSBUaGUgXFRlWHt9IGxvZ28sIGFzIGluIHBsYWluLCBidXQgcmVzZXR0aW5nIHRoZSBzcGFjaW5nIHNvIHRoYXQgYQorJSBwZXJpb2QgZm9sbG93aW5nIGNvdW50cyBhcyBlbmRpbmcgYSBzZW50ZW5jZS4gIChJZGVhIGZvdW5kIGluIGxhdGV4LikKKyUKK1xlZGVmXFRlWHtcVGVYIFxzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBATGFUZVh7fSBsb2dvLiAgTm90IHF1aXRlIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGRlZmluaXRpb24gaW4KKyUgbGF0ZXgubHR4LCBzaW5jZSB3ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmb3IgdGhlIHJhaXNlZCBBOyBpdCdzIG1vc3QKKyUgY29udmVuaWVudCBmb3IgdXMgdG8gdXNlIGFuIGV4cGxpY2l0bHkgc21hbGxlciBmb250LCByYXRoZXIgdGhhbiB1c2luZworJSB0aGUgXHNjcmlwdHN0eWxlIGZvbnQgKHNpbmNlIHdlIGRvbid0IHJlc2V0IFxzY3JpcHRzdHlsZSBhbmQKKyUgXHNjcmlwdHNjcmlwdHN0eWxlKS4KKyUKK1xkZWZcTGFUZVh7JQorICBMXGtlcm4tLjM2ZW0KKyAge1xzZXRib3gwPVxoYm94e1R9JQorICAgXHZib3ggdG8gXGh0MHtcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBBfVx2c3N9fSUKKyAgXGtlcm4tLjE1ZW0KKyAgXFRlWAorfQorCislIEJlIHN1cmUgd2UncmUgaW4gaG9yaXpvbnRhbCBtb2RlIHdoZW4gZG9pbmcgYSB0aWUsIHNpbmNlIHdlIG1ha2Ugc3BhY2UKKyUgZXF1aXZhbGVudCB0byB0aGlzIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzLiBPdGhlcndpc2UsIGEgc3BhY2UKKyUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2lsbCBzdGFydCB3aXRoIFxwZW5hbHR5IC0tIGFuZAorJSBzaW5jZSBccGVuYWx0eSBpcyB2YWxpZCBpbiB2ZXJ0aWNhbCBtb2RlLCB3ZSdkIGVuZCB1cCBwdXR0aW5nIHRoZQorJSBwZW5hbHR5IG9uIHRoZSB2ZXJ0aWNhbCBsaXN0IGluc3RlYWQgb2YgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCit7XGNhdGNvZGVgQCA9IDExCisgJSBBdm9pZCB1c2luZyBcQE0gZGlyZWN0bHksIGJlY2F1c2UgdGhhdCBjYXVzZXMgdHJvdWJsZQorICUgaWYgdGhlIGRlZmluaXRpb24gaXMgd3JpdHRlbiBpbnRvIGFuIGluZGV4IGZpbGUuCisgXGdsb2JhbFxsZXRcdGllcGVuYWx0eSA9IFxATQorIFxnZGVmXHRpZXtcbGVhdmV2bW9kZVxwZW5hbHR5XHRpZXBlbmFsdHlcIH0KK30KKworJSBAOiBmb3JjZXMgbm9ybWFsIHNpemUgd2hpdGVzcGFjZSBmb2xsb3dpbmcuCitcZGVmXDp7XHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEAqIGZvcmNlcyBhIGxpbmUgYnJlYWsuCitcZGVmXCp7XGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KKworJSBALyBhbGxvd3MgYSBsaW5lIGJyZWFrLgorXGxldFwvPVxhbGxvd2JyZWFrCisKKyUgQC4gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHBlcmlvZC4KK1xkZWZcLnsuXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQCEgaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGJhbmcuCitcZGVmXCF7IVxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEA/IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBxdWVyeS4KK1xkZWZcP3s/XHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQGZyZW5jaHNwYWNpbmcgb258b2ZmICBzYXlzIHdoZXRoZXIgdG8gcHV0IGV4dHJhIHNwYWNlIGFmdGVyIHB1bmN0dWF0aW9uLgorJQorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJQorXGRlZlxpbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcaW5jbHVkZXp6en0KK1xkZWZcaW5jbHVkZXp6eiMxeyUKKyAgXHB1c2h0aGlzZmlsZXN0YWNrCisgIFxkZWZcdGhpc2ZpbGV7IzF9JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1we1xpbnB1dCAjMSB9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAKKyAgXHBvcHRoaXNmaWxlc3RhY2sKK30KK1xkZWZcZmlsZW5hbWVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWB+PVxvdGhlcgorICBcY2F0Y29kZWBePVxvdGhlcgorICBcY2F0Y29kZWBfPVxvdGhlcgorICBcY2F0Y29kZWB8PVxvdGhlcgorICBcY2F0Y29kZWA8PVxvdGhlcgorICBcY2F0Y29kZWA+PVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlcgorICBcY2F0Y29kZWAtPVxvdGhlcgorfQorCitcZGVmXHB1c2h0aGlzZmlsZXN0YWNreyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWFxwb3B0aGlzZmlsZXN0YWNrXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1h7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tZXHRoaXNmaWxlXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1kgIzFcU3RhY2tUZXJtICMyXFN0YWNrVGVybSB7JQorICBcZ2RlZlxwb3B0aGlzZmlsZXN0YWNre1xnZGVmXHRoaXNmaWxleyMxfVxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7IzJ9fSUKK30KKworXGRlZlxwb3B0aGlzZmlsZXN0YWNre1xlcnJ0aGlzZmlsZXN0YWNrZW1wdHl9CitcZGVmXGVycnRoaXNmaWxlc3RhY2tlbXB0eXtcZXJybWVzc2FnZXtJbnRlcm5hbCBlcnJvcjoKKyAgdGhlIHN0YWNrIG9mIGZpbGVuYW1lcyBpcyBlbXB0eS59fQorCitcZGVmXHRoaXNmaWxle30KKworJSBAY2VudGVyIGxpbmUKKyUgb3V0cHV0cyB0aGF0IGxpbmUsIGNlbnRlcmVkLgorJQorXHBhcnNlYXJnZGVmXGNlbnRlcnslCisgIFxpZmhtb2RlCisgICAgXGxldFxuZXh0XGNlbnRlckgKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcY2VudGVyVgorICBcZmkKKyAgXG5leHR7XGhmaWwgXGlnbm9yZXNwYWNlcyMxXHVuc2tpcCBcaGZpbH0lCit9CitcZGVmXGNlbnRlckgjMXslCisgIHslCisgICAgXGhmaWxcYnJlYWsKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgICBcbGluZXsjMX0lCisgICAgXGJyZWFrCisgIH0lCit9CitcZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CisKKyUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKKworXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CisKKyUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCislIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CislIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKKworXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQorXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCitcY29tbWVudHh4eH0KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KKworXGxldFxjPVxjb21tZW50CisKKyUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTLCBjbG9zZSBlbm91Z2guCislIE5DSEFSUyBjYW4gYWxzbyBiZSB0aGUgd29yZCBgYXNpcycgb3IgYG5vbmUnLgorJSBXZSBjYW5ub3QgZmVhc2libHkgaW1wbGVtZW50IEBwYXJhZ3JhcGhpbmRlbnQgYXNpcywgdGhvdWdoLgorJQorXGRlZlxhc2lzd29yZHthc2lzfSAlIG5vIHRyYW5zbGF0aW9uLCB0aGVzZSBhcmUga2V5d29yZHMKK1xkZWZcbm9uZXdvcmR7bm9uZX0KKyUKK1xwYXJzZWFyZ2RlZlxwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gIzFlbQorICAgIFxmaQorICBcZmkKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50Cit9CisKKyUgQGV4YW1wbGVpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUyBsaWtlIEBwYXJhZ3JhcGhpbmRlbnQuCislIEl0IHNlZW1zIEBleGFtcGxlaW5kZW50IGFzaXMgaXNuJ3QgbmVjZXNzYXJ5LCBidXQKKyUgSSBwcmVzZXJ2ZSBpdCB0byBtYWtlIGl0IHNpbWlsYXIgdG8gQHBhcmFncmFwaGluZGVudC4KK1xwYXJzZWFyZ2RlZlxleGFtcGxlaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcbGlzcG5hcnJvd2luZyA9IDBwdAorICAgIFxlbHNlCisgICAgICBcbGlzcG5hcnJvd2luZyA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCit9CisKKyUgQGZpcnN0cGFyYWdyYXBoaW5kZW50IFdPUkQKKyUgSWYgV09SRCBpcyBgbm9uZScsIHRoZW4gc3VwcHJlc3MgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcmFncmFwaAorJSBhZnRlciBhIHNlY3Rpb24gaGVhZGluZy4gIElmIFdPUkQgaXMgYGluc2VydCcsIHRoZW4gZG8gaW5kZW50IGF0IHN1Y2gKKyUgcGFyYWdyYXBocy4KKyUKKyUgVGhlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBpcyBzdXBwcmVzc2VkIG9yIG5vdCBieSBjYWxsaW5nCislIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50LCB3aGljaCB0aGUgc2VjdGlvbmluZyBjb21tYW5kcyBkby4KKyUgV2Ugc3dpdGNoIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYmFjayBhbmQgZm9ydGggYWNjb3JkaW5nIHRvIFdPUkQuCislIEJ5IGRlZmF1bHQsIHdlIHN1cHByZXNzIGluZGVudGF0aW9uLgorJQorXGRlZlxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50e1xkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXHBhcnNlYXJnZGVmXGZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgIFxnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGRlZl97XGlmbnVtXGZhbT1cc2xmYW0gXF9cZWxzZVxzYlxmaX0lCisgIH0KK30KKyUgQW5vdGhlciBjb21wbGljYXRpb246IHdlIHdhbnQgXFwgKGFuZCBAXCkgdG8gb3V0cHV0IGEgXCBjaGFyYWN0ZXIuCislIEZZSSwgcGxhaW4udGV4IHVzZXMgXFwgYXMgYSB0ZW1wb3JhcnkgY29udHJvbCBzZXF1ZW5jZSAod2h5PyksIGJ1dAorJSB0aGlzIGlzIG5vdCBhZHZlcnRpc2VkIGFuZCB3ZSBkb24ndCBjYXJlLiAgVGV4aW5mbyBkb2VzIG5vdAorJSBvdGhlcndpc2UgZGVmaW5lIEBcLgorJQorJSBUaGUgXG1hdGhjaGFyIGlzIGNsYXNzPTA9b3JkaW5hcnksIGZhbWlseT03PXR0ZmFtLCBwb3NpdGlvbj01Qz1cLgorXGRlZlxtYXRoYmFja3NsYXNoe1xpZm51bVxmYW09XHR0ZmFtIFxtYXRoY2hhciIwNzVDIFxlbHNlXGJhY2tzbGFzaCBcZml9CislCitcZGVmXG1hdGh7JQorICBcdGV4CisgIFxtYXRodW5kZXJzY29yZQorICBcbGV0XFwgPSBcbWF0aGJhY2tzbGFzaAorICBcbWF0aGFjdGl2ZQorICAkXGZpbmlzaG1hdGgKK30KK1xkZWZcZmluaXNobWF0aCMxeyMxJFxlbmRncm91cH0gICUgQ2xvc2UgdGhlIGdyb3VwIG9wZW5lZCBieSBcdGV4LgorCislIFNvbWUgYWN0aXZlIGNoYXJhY3RlcnMgKHN1Y2ggYXMgPCkgYXJlIHNwYWNlZCBkaWZmZXJlbnRseSBpbiBtYXRoLgorJSBXZSBoYXZlIHRvIHJlc2V0IHRoZWlyIGRlZmluaXRpb25zIGluIGNhc2UgdGhlIEBtYXRoIHdhcyBhbiBhcmd1bWVudAorJSB0byBhIGNvbW1hbmQgd2hpY2ggc2V0cyB0aGUgY2F0Y29kZXMgKHN1Y2ggYXMgQGl0ZW0gb3IgQHNlY3Rpb24pLgorJQoreworICBcY2F0Y29kZWBeID0gXGFjdGl2ZQorICBcY2F0Y29kZWA8ID0gXGFjdGl2ZQorICBcY2F0Y29kZWA+ID0gXGFjdGl2ZQorICBcY2F0Y29kZWArID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRoYWN0aXZleyUKKyAgICBcbGV0XiA9IFxwdGV4aGF0CisgICAgXGxldDwgPSBccHRleGxlc3MKKyAgICBcbGV0PiA9IFxwdGV4Z3RyCisgICAgXGxldCsgPSBccHRleHBsdXMKKyAgfQorfQorCislIEBidWxsZXQgYW5kIEBtaW51cyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudCBhcyBAbWF0aCwganVzdCBhYm92ZS4KK1xkZWZcYnVsbGV0eyRccHRleGJ1bGxldCR9CitcZGVmXG1pbnVzeyQtJH0KKworJSBAZG90c3t9IG91dHB1dHMgYW4gZWxsaXBzaXMgdXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KKyUgV2UgZG8gLjVlbSBwZXIgcGVyaW9kIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIHNwYWNpbmcgaW4gdGhlIGNtCislIHR5cGV3cml0ZXIgZm9udHMgYXMgdGhyZWUgYWN0dWFsIHBlcmlvZCBjaGFyYWN0ZXJzOyBvbiB0aGUgb3RoZXIgaGFuZCwKKyUgaW4gb3RoZXIgdHlwZXdyaXRlciBmb250cyB0aHJlZSBwZXJpb2RzIGFyZSB3aWRlciB0aGFuIDEuNWVtLiAgU28gZG8KKyUgd2hpY2hldmVyIGlzIGxhcmdlci4KKyUKK1xkZWZcZG90c3slCisgIFxsZWF2ZXZtb2RlCisgIFxzZXRib3gwPVxoYm94ey4uLn0lIGdldCB3aWR0aCBvZiB0aHJlZSBwZXJpb2RzCisgIFxpZmRpbVx3ZDAgPiAxLjVlbQorICAgIFxkaW1lbjAgPSBcd2QwCisgIFxlbHNlCisgICAgXGRpbWVuMCA9IDEuNWVtCisgIFxmaQorICBcaGJveCB0byBcZGltZW4weyUKKyAgICBcaHNraXAgMHB0IHBsdXMuMjVmaWwKKyAgICAuXGhza2lwIDBwdCBwbHVzMWZpbAorICAgIC5caHNraXAgMHB0IHBsdXMxZmlsCisgICAgLlxoc2tpcCAwcHQgcGx1cy41ZmlsCisgIH0lCit9CisKKyUgQGVuZGRvdHN7fSBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgZWxsaXBzaXMuCislCitcZGVmXGVuZGRvdHN7JQorICBcZG90cworICBcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcgorfQorCislIEBjb21tYXt9IGlzIHNvIGNvbW1hcyBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0ZXh0IHdpdGhvdXQgbWVzc2luZyB1cAorJSBUZXhpbmZvJ3MgcGFyc2luZy4KKyUKK1xsZXRcY29tbWEgPSAsCisKKyUgQHJlZmlsbCBpcyBhIG5vLW9wLgorXGxldFxyZWZpbGw9XHJlbGF4CisKKyUgSWYgd29ya2luZyBvbiBhIGxhcmdlIGRvY3VtZW50IGluIGNoYXB0ZXJzLCBpdCBpcyBjb252ZW5pZW50IHRvCislIGJlIGFibGUgdG8gZGlzYWJsZSBpbmRleGluZywgY3Jvc3MtcmVmZXJlbmNpbmcsIGFuZCBjb250ZW50cywgZm9yIHRlc3QgcnVucy4KKyUgVGhpcyBpcyBkb25lIHdpdGggQG5vdmFsaWRhdGUgKGJlZm9yZSBAc2V0ZmlsZW5hbWUpLgorJQorXG5ld2lmXGlmbGlua3MgXGxpbmtzdHJ1ZSAlIGJ5IGRlZmF1bHQgd2Ugd2FudCB0aGUgYXV4IGZpbGVzLgorXGxldFxub3ZhbGlkYXRlID0gXGxpbmtzZmFsc2UKKworJSBAc2V0ZmlsZW5hbWUgaXMgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHRleGluZm8gZmlsZS4KKyUgU28gb3BlbiBoZXJlIHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGhhdmUgb3BlbiB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dC4KKyUgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBtYWtlIGEgLmZtdCBmaWxlIGZvciB0ZXhpbmZvLgorXGRlZlxzZXRmaWxlbmFtZXslCisgICBcZml4YmFja3NsYXNoICAlIFR1cm4gb2ZmIGhhY2sgdG8gc3dhbGxvdyBgXGlucHV0IHRleGluZm8nLgorICAgXGlmbGlua3MKKyAgICAgXHRyeWF1eGZpbGUKKyAgICAgJSBPcGVuIHRoZSBuZXcgYXV4IGZpbGUuICBUZVggd2lsbCBjbG9zZSBpdCBhdXRvbWF0aWNhbGx5IGF0IGV4aXQuCisgICAgIFxpbW1lZGlhdGVcb3Blbm91dFxhdXhmaWxlPVxqb2JuYW1lLmF1eAorICAgXGZpICUgXG9wZW5pbmRpY2VzIG5lZWRzIHRvIGRvIHNvbWUgd29yayBpbiBhbnkgY2FzZS4KKyAgIFxvcGVuaW5kaWNlcworICAgXGxldFxzZXRmaWxlbmFtZT1cY29tbWVudCAlIElnbm9yZSBleHRyYSBAc2V0ZmlsZW5hbWUgY21kcy4KKyAgICUKKyAgICUgSWYgdGV4aW5mby5jbmYgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLCByZWFkIGl0LgorICAgJSBVc2VmdWwgZm9yIHNpdGUtd2lkZSBAYWZvdXJwYXBlciwgZXRjLgorICAgXG9wZW5pbiAxIHRleGluZm8uY25mCisgICBcaWZlb2YgMSBcZWxzZSBcaW5wdXQgdGV4aW5mby5jbmYgXGZpCisgICBcY2xvc2VpbiAxCisgICAlCisgICBcY29tbWVudCAlIElnbm9yZSB0aGUgYWN0dWFsIGZpbGVuYW1lLgorfQorCislIENhbGxlZCBmcm9tIFxzZXRmaWxlbmFtZS4KKyUKK1xkZWZcb3BlbmluZGljZXN7JQorICBcbmV3aW5kZXh7Y3B9JQorICBcbmV3Y29kZWluZGV4e2ZufSUKKyAgXG5ld2NvZGVpbmRleHt2cn0lCisgIFxuZXdjb2RlaW5kZXh7dHB9JQorICBcbmV3Y29kZWluZGV4e2t5fSUKKyAgXG5ld2NvZGVpbmRleHtwZ30lCit9CisKKyUgQGJ5ZS4KK1xvdXRlclxkZWZcYnlle1xwYWdlYWxpZ25tYWNyb1x0cmFjaW5nc3RhdHM9MVxwdGV4ZW5kfQorCisKK1xtZXNzYWdle3BkZix9CislIGFkb2JlIGBwb3J0YWJsZScgZG9jdW1lbnQgZm9ybWF0CitcbmV3Y291bnRcdGVtcG51bQorXG5ld2NvdW50XGxua2NvdW50CitcbmV3dG9rc1xmaWxlbmFtZQorXG5ld2NvdW50XGZpbGVuYW1lbGVuZ3RoCitcbmV3Y291bnRccGduCitcbmV3dG9rc1x0b2tzQQorXG5ld3Rva3NcdG9rc0IKK1xuZXd0b2tzXHRva3NDCitcbmV3dG9rc1x0b2tzRAorXG5ld2JveFxib3hBCitcbmV3Y291bnRcY291bnRBCitcbmV3aWZcaWZwZGYKK1xuZXdpZlxpZnBkZm1ha2VwYWdlZGVzdAorCislIHdoZW4gcGRmdGV4IGlzIHJ1biBpbiBkdmkgbW9kZSwgXHBkZm91dHB1dCBpcyBkZWZpbmVkIChzbyBccGRmb3V0cHV0PTEKKyUgY2FuIGJlIHNldCkuICBTbyB3ZSB0ZXN0IGZvciBccmVsYXggYW5kIDAgYXMgd2VsbCBhcyBcdW5kZWZpbmVkLAorJSBib3Jyb3dlZCBmcm9tIGlmcGRmLnN0eS4KK1xpZnhccGRmb3V0cHV0XHVuZGVmaW5lZAorXGVsc2UKKyAgXGlmeFxwZGZvdXRwdXRccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBkZm91dHB1dAorICAgIFxlbHNlCisgICAgICBccGRmdHJ1ZQorICAgIFxmaQorICBcZmkKK1xmaQorCislIFBERiB1c2VzIFBvc3RTY3JpcHQgc3RyaW5nIGNvbnN0YW50cyBmb3IgdGhlIG5hbWVzIG9mIHhyZWYgdGFyZ2V0cywKKyUgZm9yIGRpc3BsYXkgaW4gdGhlIG91dGxpbmVzLCBhbmQgaW4gb3RoZXIgcGxhY2VzLiAgVGh1cywgd2UgaGF2ZSB0bworJSBkb3VibGUgYW55IGJhY2tzbGFzaGVzLiAgT3RoZXJ3aXNlLCBhIG5hbWUgbGlrZSAiXG5vZGUiIHdpbGwgYmUKKyUgaW50ZXJwcmV0ZWQgYXMgYSBuZXdsaW5lIChcbiksIGZvbGxvd2VkIGJ5IG8sIGQsIGUuICBOb3QgZ29vZC4KKyUgaHR0cDovL3d3dy5udGcubmwvcGlwZXJtYWlsL250Zy1wZGZ0ZXgvMjAwNC1KdWx5LzAwMDY1NC5odG1sCislIChhbmQgcmVsYXRlZCBtZXNzYWdlcywgdGhlIGZpbmFsIG91dGNvbWUgaXMgdGhhdCBpdCBpcyB1cCB0byB0aGUgVGVYCislIHVzZXIgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXJ3aXNlIG1ha2UgdGhlIHN0cmluZyB2YWxpZCwgc28KKyUgdGhhdCdzIHdoYXQgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislCit7XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAYWN0aXZlYmFja3NsYXNoZG91YmxleyUKKyAgIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyAgIEBsZXRcPUBkb3VibGViYWNrc2xhc2h9Cit9CisKKyUgVG8gaGFuZGxlIHBhcmVucywgd2UgbXVzdCBhZG9wdCBhIGRpZmZlcmVudCBhcHByb2FjaCwgc2luY2UgcGFyZW5zIGFyZQorJSBub3QgYWN0aXZlIGNoYXJhY3RlcnMuICBoeXBlcnJlZi5kdHggKHdoaWNoIGhhcyB0aGUgc2FtZSBwcm9ibGVtIGFzCislIHVzKSBoYW5kbGVzIGl0IHdpdGggdGhpcyBhbWF6aW5nIG1hY3JvIHRvIHJlcGxhY2UgdG9rZW5zLiAgSSd2ZQorJSB0aW5rZXJlZCB3aXRoIGl0IGEgbGl0dGxlIGZvciB0ZXhpbmZvLCBidXQgaXQncyBkZWZpbml0ZWx5IGZyb20gdGhlcmUuCislCislICMxIGlzIHRoZSB0b2tlbnMgdG8gcmVwbGFjZS4KKyUgIzIgaXMgdGhlIHJlcGxhY2VtZW50LgorJSAjMyBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdHJpbmcuCislCitcZGVmXEh5UHNkU3Vic3QjMSMyIzN7JQorICBcZGVmXEh5UHNkUmVwbGFjZSMjMSMxIyMyXEVORHslCisgICAgIyMxJQorICAgIFxpZnhcXCMjMlxcJQorICAgIFxlbHNlCisgICAgICAjMiUKKyAgICAgIFxIeVJldHVybkFmdGVyRml7JQorICAgICAgICBcSHlQc2RSZXBsYWNlIyMyXEVORAorICAgICAgfSUKKyAgICBcZmkKKyAgfSUKKyAgXHhkZWYjM3tcZXhwYW5kYWZ0ZXJcSHlQc2RSZXBsYWNlIzMjMVxFTkR9JQorfQorXGxvbmdcZGVmXEh5UmV0dXJuQWZ0ZXJGaSMxXGZpe1xmaSMxfQorCislICMxIGlzIGEgY29udHJvbCBzZXF1ZW5jZSBpbiB3aGljaCB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorXGRlZlxiYWNrc2xhc2hwYXJlbnMjMXslCisgIFx4ZGVmIzF7IzF9JSByZWRlZmluZSBpdCBhcyBpdHMgZXhwYW5zaW9uOyB0aGUgZGVmaW5pdGlvbiBpcyBzaW1wbHkKKyAgICAgICAgICAgICAlIFxsYXN0bm9kZSB3aGVuIGNhbGxlZCBmcm9tIFxzZXRyZWYgLT4gXHBkZm1rZGVzdC4KKyAgXEh5UHNkU3Vic3R7KH17XHJlYWxiYWNrc2xhc2gofXsjMX0lCisgIFxIeVBzZFN1YnN0eyl9e1xyZWFsYmFja3NsYXNoKX17IzF9JQorfQorCitcaWZwZGYKKyAgXGlucHV0IHBkZmNvbG9yCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9JQorICAlICMxIGlzIGltYWdlIG5hbWUsICMyIHdpZHRoIChtaWdodCBiZSBlbXB0eS93aGl0ZXNwYWNlKSwgIzMgaGVpZ2h0IChkaXR0bykuCisgIFxkZWZcZG9wZGZpbWFnZSMxIzIjM3slCisgICAgXGRlZlxpbWFnZXdpZHRoeyMyfVxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGRlZlxpbWFnZWhlaWdodHsjM31cc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9JQorICAgICUgd2l0aG91dCBcaW1tZWRpYXRlLCBwZGZ0ZXggc2VnIGZhdWx0cyB3aGVuIHRoZSBzYW1lIGltYWdlIGlzCisgICAgJSBpbmNsdWRlZCB0d2ljZS4gIChWZXJzaW9uIDMuMTQxNTktcHJlLTEuMC11bm9mZmljaWFsLTIwMDEwNzA0LikKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgICBcaW1tZWRpYXRlXHBkZmltYWdlCisgICAgXGVsc2UKKyAgICAgIFxpbW1lZGlhdGVccGRmeGltYWdlCisgICAgXGZpCisgICAgICBcaWZkaW0gXHdkMCA+MHB0IHdpZHRoIFxpbWFnZXdpZHRoIFxmaQorICAgICAgXGlmZGltIFx3ZDIgPjBwdCBoZWlnaHQgXGltYWdlaGVpZ2h0IFxmaQorICAgICAgXGlmbnVtXHBkZnRleHZlcnNpb248MTMKKyAgICAgICAgICMxLnBkZiUKKyAgICAgICBcZWxzZQorICAgICAgICAgeyMxLnBkZn0lCisgICAgICAgXGZpCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNCBcZWxzZQorICAgICAgXHBkZnJlZnhpbWFnZSBccGRmbGFzdHhpbWFnZQorICAgIFxmaX0KKyAgXGRlZlxwZGZta2Rlc3QjMXt7JQorICAgICUgV2UgaGF2ZSB0byBzZXQgZHVtbWllcyBzbyBjb21tYW5kcyBzdWNoIGFzIEBjb2RlLCBhbmQgY2hhcmFjdGVycworICAgICUgc3VjaCBhcyBcLCBhcmVuJ3QgZXhwYW5kZWQgd2hlbiBwcmVzZW50IGluIGEgc2VjdGlvbiB0aXRsZS4KKyAgICBcYXRkdW1taWVzCisgICAgXGFjdGl2ZWJhY2tzbGFzaGRvdWJsZQorICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQorICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKKyAgICBccGRmZGVzdCBuYW1le1xwZGZkZXN0bmFtZX0geHl6JQorICB9fSUKKyAgJQorICAlIHVzZWQgdG8gbWFyayB0YXJnZXQgbmFtZXM7IG11c3QgYmUgZXhwYW5kYWJsZS4KKyAgXGRlZlxwZGZta3BnbiMxeyMxfSUKKyAgJQorICBcbGV0XGxpbmtjb2xvciA9IFxCbHVlICAlIHdhcyBDeWFuLCBidXQgdGhhdCBzZWVtcyBsaWdodD8KKyAgXGRlZlxlbmRsaW5re1xCbGFja1xwZGZlbmRsaW5rfQorICAlIEFkZGluZyBvdXRsaW5lcyB0byBQREY7IG1hY3JvcyBmb3IgY2FsY3VsYXRpbmcgc3RydWN0dXJlIG9mIG91dGxpbmVzCisgICUgY29tZSBmcm9tIFBldHIgT2xzYWsKKyAgXGRlZlxleHBudW1iZXIjMXtcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSMxXGVuZGNzbmFtZVxyZWxheCAwJQorICAgIFxlbHNlIFxjc25hbWUjMVxlbmRjc25hbWUgXGZpfQorICBcZGVmXGFkdmFuY2VudW1iZXIjMXtcdGVtcG51bT1cZXhwbnVtYmVyeyMxfVxyZWxheAorICAgIFxhZHZhbmNlXHRlbXBudW0gYnkgMQorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZXtcdGhlXHRlbXBudW19fQorICAlCisgICUgIzEgaXMgdGhlIHNlY3Rpb24gdGV4dCwgd2hpY2ggaXMgd2hhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUKKyAgJSBvdXRsaW5lIGJ5IHRoZSBwZGYgdmlld2VyLiAgIzIgaXMgdGhlIHBkZiBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyCisgICUgb2Ygc3ViZW50cmllcyAob3IgZW1wdHksIGZvciBzdWJzdWJzZWN0aW9ucykuICAjMyBpcyB0aGUgbm9kZSB0ZXh0LAorICAlIHdoaWNoIG1pZ2h0IGJlIGVtcHR5IGlmIHRoaXMgdG9jIGVudHJ5IGhhZCBubyBjb3JyZXNwb25kaW5nIG5vZGUuCisgICUgIzQgaXMgdGhlIHBhZ2UgbnVtYmVyCisgICUKKyAgXGRlZlxkb3BkZm91dGxpbmUjMSMyIzMjNHslCisgICAgJSBHZW5lcmF0ZSBhIGxpbmsgdG8gdGhlIG5vZGUgdGV4dCBpZiB0aGF0IGV4aXN0czsgZWxzZSwgdXNlIHRoZQorICAgICUgcGFnZSBudW1iZXIuICBXZSBjb3VsZCBnZW5lcmF0ZSBhIGRlc3RpbmF0aW9uIGZvciB0aGUgc2VjdGlvbgorICAgICUgdGV4dCBpbiB0aGUgY2FzZSB3aGVyZSBhIHNlY3Rpb24gaGFzIG5vIG5vZGUsIGJ1dCBpdCBkb2Vzbid0CisgICAgJSBzZWVtIHdvcnRoIHRoZSB0cm91YmxlLCBzaW5jZSBtb3N0IGRvY3VtZW50cyBhcmUgbm9ybWFsbHkgc3RydWN0dXJlZC4KKyAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICBcaWZ4XHBkZm91dGxpbmVkZXN0XGVtcHR5CisgICAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyM0fSUKKyAgICBcZWxzZQorICAgICAgJSBEb3VibGVkIGJhY2tzbGFzaGVzIGluIHRoZSBuYW1lLgorICAgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZWRlc3R9JQorICAgIFxmaQorICAgICUKKyAgICAlIEFsc28gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgZGlzcGxheSBzdHJpbmcuCisgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZXRleHR7IzF9JQorICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmV0ZXh0fSUKKyAgICAlCisgICAgXHBkZm91dGxpbmUgZ290byBuYW1le1xwZGZta3BnbntccGRmb3V0bGluZWRlc3R9fSMye1xwZGZvdXRsaW5ldGV4dH0lCisgIH0KKyAgJQorICBcZGVmXHBkZm1ha2VvdXRsaW5lc3slCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgVGhhbmgncyBoYWNrIC8gcHJvcGVyIGJyYWNlcyBpbiBib29rbWFya3MKKyAgICAgIFxlZGVmXG15bGJyYWNle1xpZnRydWUgXHN0cmluZ3tcZWxzZX1cZml9XGxldFx7PVxteWxicmFjZQorICAgICAgXGVkZWZcbXlyYnJhY2V7XGlmZmFsc2V7XGVsc2Vcc3RyaW5nfVxmaX1cbGV0XH09XG15cmJyYWNlCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNpbGVudGx5LCB0byBnZXQgY291bnRzIG9mIHN1YmVudHJpZXMgZm9yIFxwZGZvdXRsaW5lLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorCVxkZWZcdGhpc2NoYXBudW17IyMyfSUKKwlcZGVmXHRoaXNzZWNudW17MH0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye2NoYXBcdGhpc2NoYXBudW19JQorCVxkZWZcdGhpc3NlY251bXsjIzJ9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzZWNcdGhpc3NlY251bX0lCisJXGRlZlx0aGlzc3Vic2VjbnVteyMjMn0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c3Vic2VjXHRoaXNzdWJzZWNudW19JQorICAgICAgfSUKKyAgICAgIFxkZWZcdGhpc2NoYXBudW17MH0lCisgICAgICBcZGVmXHRoaXNzZWNudW17MH0lCisgICAgICBcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICAlCisgICAgICAlIHVzZSBcZGVmIHJhdGhlciB0aGFuIFxsZXQgaGVyZSBiZWNhdXNlIHdlIHJlZGVmaW5lIFxjaGFwZW50cnkgZXQKKyAgICAgICUgYWwuIGEgc2Vjb25kIHRpbWUsIGJlbG93LgorICAgICAgXGRlZlxhcHBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcYXBwc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uY2hhcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlx1bm5zZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXHJlYWRkYXRhZmlsZXt0b2N9JQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzZWNvbmQgdGltZSwgdGhpcyB0aW1lIGFjdHVhbGx5IHByb2R1Y2luZyB0aGUgb3V0bGluZXMuCisgICAgICAlIFRoZSBgLScgbWVhbnMgdGFrZSB0aGUgXGV4cG51bWJlciBhcyB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mCisgICAgICAlIHN1YmVudHJpZXMsIHdoaWNoIHdlIGNhbGN1bGF0ZWQgb24gb3VyIGZpcnN0IHJlYWQgb2YgdGhlIC50b2MgYWJvdmUuCisgICAgICAlCisgICAgICAlIFdlIHVzZSB0aGUgbm9kZSBuYW1lcyBhcyB0aGUgZGVzdGluYXRpb25zLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntjaGFwIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3N1YnNlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUgY291bnQgaXMgYWx3YXlzIHplcm8KKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e317IyMzfXsjIzR9fSUKKyAgICAgICUKKyAgICAgICUgUERGIG91dGxpbmVzIGFyZSBkaXNwbGF5ZWQgdXNpbmcgc3lzdGVtIGZvbnRzLCBpbnN0ZWFkIG9mCisgICAgICAlIGRvY3VtZW50IGZvbnRzLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgJSBzaW5jZSB0aGUgZW5jb2RpbmcgaXMgdW5rbm93bi4gIEZvciBleGFtcGxlLCB0aGUgZW9nb25layBmcm9tCisgICAgICAlIExhdGluIDIgKDB4ZWEpIGdldHMgdHJhbnNsYXRlZCB0byBhIHwgY2hhcmFjdGVyLiAgSW5mbyBmcm9tCisgICAgICAlIFN0YXN6ZWsgV2F3cnlraWV3aWN6LCAxOSBKYW4gMjAwNCAwNDowOToyNCArMDEwMC4KKyAgICAgICUKKyAgICAgICUgeHggdG8gZG8gdGhpcyByaWdodCwgd2UgaGF2ZSB0byB0cmFuc2xhdGUgOC1iaXQgY2hhcmFjdGVycyB0bworICAgICAgJSB0aGVpciAiYmVzdCIgZXF1aXZhbGVudCwgYmFzZWQgb24gdGhlIEBkb2N1bWVudGVuY29kaW5nLiAgUmlnaHQKKyAgICAgICUgbm93LCBJIGd1ZXNzIHdlJ2xsIGp1c3QgbGV0IHRoZSBwZGYgcmVhZGVyIGhhdmUgaXRzIHdheS4KKyAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgIFxzZXR1cGRhdGFmaWxlCisgICAgICBcY2F0Y29kZWBcXD1cYWN0aXZlIFxvdGhlcmJhY2tzbGFzaAorICAgICAgXGlucHV0IFxqb2JuYW1lLnRvYworICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgJSBtYWtlIGEgbGl2ZSB1cmwgaW4gcGRmIG91dHB1dC4KKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgaXQgc2VlbXMgd2UgcmVhbGx5IG5lZWQgeWV0IGFub3RoZXIgc2V0IG9mIGR1bW1pZXM7IGhhdmUgbm90CisgICAgICAlIHRyaWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGNvbW1hbmQgc2hvdWxkIGRvIGluIHRoZSBjb250ZXh0CisgICAgICAlIG9mIEB1cmwuICBmb3Igbm93LCBqdXN0IG1ha2UgQC8gYSBuby1vcCwgdGhhdCdzIHRoZSBvbmx5IG9uZQorICAgICAgJSBwZW9wbGUgaGF2ZSBhY3R1YWxseSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aC4KKyAgICAgICUKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICAgICBcZGVmXEB7QH0lCisgICAgICBcbGV0XC89XGVtcHR5CisgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAgXGxlYXZldm1vZGVcUmVkCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxsaW5rY29sb3IgIzFcZW5kbGlua30KKyAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KK1xlbHNlCisgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQorICBcbGV0XHBkZnVybCA9IFxnb2JibGUKKyAgXGxldFxlbmRsaW5rID0gXHJlbGF4CisgIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CitcZmkgICUgXGlmeFxwZGZvdXRwdXQKKworCitcbWVzc2FnZXtmb250cyx9CisKKyUgQ2hhbmdlIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUgdG8gIzEsIHJlbWVtYmVyaW5nIGl0IGluIFxjdXJmb250c3R5bGUuCislIEZvciBub3csIHdlIGRvIG5vdCBhY2N1bXVsYXRlIGZvbnQgc3R5bGVzOiBAYntAaXtmb299fSBwcmludHMgZm9vIGluCislIGl0YWxpY3MsIG5vdCBib2xkIGl0YWxpY3MuCislCitcZGVmXHNldGZvbnRzdHlsZSMxeyUKKyAgXGRlZlxjdXJmb250c3R5bGV7IzF9JSBub3QgYXMgYSBjb250cm9sIHNlcXVlbmNlLCBiZWNhdXNlIHdlIGFyZSBcZWRlZidkLgorICBcY3NuYW1lIHRlbiMxXGVuZGNzbmFtZSAgJSBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udAorfQorCislIFNlbGVjdCAjMSBmb250cyB3aXRoIHRoZSBjdXJyZW50IHN0eWxlLgorJQorXGRlZlxzZWxlY3Rmb250cyMxe1xjc25hbWUgIzFmb250c1xlbmRjc25hbWUgXGNzbmFtZVxjdXJmb250c3R5bGVcZW5kY3NuYW1lfQorCitcZGVmXHJte1xmYW09MCBcc2V0Zm9udHN0eWxle3JtfX0KK1xkZWZcaXR7XGZhbT1caXRmYW0gXHNldGZvbnRzdHlsZXtpdH19CitcZGVmXHNse1xmYW09XHNsZmFtIFxzZXRmb250c3R5bGV7c2x9fQorXGRlZlxiZntcZmFtPVxiZmZhbSBcc2V0Zm9udHN0eWxle2JmfX1cZGVmXGJmc3R5bGVuYW1le2JmfQorXGRlZlx0dHtcZmFtPVx0dGZhbSBcc2V0Zm9udHN0eWxle3R0fX0KKworJSBUZXhpbmZvIHNvcnQgb2Ygc3VwcG9ydHMgdGhlIHNhbnMgc2VyaWYgZm9udCBzdHlsZSwgd2hpY2ggcGxhaW4gVGVYIGRvZXMgbm90LgorJSBTbyB3ZSBzZXQgdXAgYSBcc2YuCitcbmV3ZmFtXHNmZmFtCitcZGVmXHNme1xmYW09XHNmZmFtIFxzZXRmb250c3R5bGV7c2Z9fQorXGxldFxsaSA9IFxzZiAlIFNvbWV0aW1lcyB3ZSBjYWxsIGl0IFxsaSwgbm90IFxzZi4KKworJSBXZSBkb24ndCBuZWVkIG1hdGggZm9yIHRoaXMgZm9udCBzdHlsZS4KK1xkZWZcdHRzbHtcc2V0Zm9udHN0eWxle3R0c2x9fQorCisKKyUgRGVmYXVsdCBsZWFkaW5nLgorXG5ld2RpbWVuXHRleHRsZWFkaW5nICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKworJSBTZXQgdGhlIGJhc2VsaW5lc2tpcCB0byAjMSwgYW5kIHRoZSBsaW5lc2tpcCBhbmQgc3RydXQgc2l6ZQorJSBjb3JyZXNwb25kaW5nbHkuICBUaGVyZSBpcyBubyBkZWVwIG1lYW5pbmcgYmVoaW5kIHRoZXNlIG1hZ2ljIG51bWJlcnMKKyUgdXNlZCBhcyBmYWN0b3JzOyB0aGV5IGp1c3QgbWF0Y2ggKGNsb3NlbHkgZW5vdWdoKSB3aGF0IEtudXRoIGRlZmluZWQuCislCitcZGVmXGxpbmVza2lwZmFjdG9yey4wODMzM30KK1xkZWZcc3RydXRoZWlnaHRwZXJjZW50ey43MDgzM30KK1xkZWZcc3RydXRkZXB0aHBlcmNlbnQgey4yOTE2N30KKyUKK1xkZWZcc2V0bGVhZGluZyMxeyUKKyAgXG5vcm1hbGJhc2VsaW5lc2tpcCA9ICMxXHJlbGF4CisgIFxub3JtYWxsaW5lc2tpcCA9IFxsaW5lc2tpcGZhY3Rvclxub3JtYWxiYXNlbGluZXNraXAKKyAgXG5vcm1hbGJhc2VsaW5lcworICBcc2V0Ym94XHN0cnV0Ym94ID1caGJveHslCisgICAgXHZydWxlIHdpZHRoMHB0IGhlaWdodFxzdHJ1dGhlaWdodHBlcmNlbnRcYmFzZWxpbmVza2lwCisgICAgICAgICAgICAgICAgICAgIGRlcHRoIFxzdHJ1dGRlcHRocGVyY2VudCBcYmFzZWxpbmVza2lwCisgIH0lCit9CisKKworJSBTZXQgdGhlIGZvbnQgbWFjcm8gIzEgdG8gdGhlIGZvbnQgbmFtZWQgIzIsIGFkZGluZyBvbiB0aGUKKyUgc3BlY2lmaWVkIGZvbnQgcHJlZml4IChub3JtYWxseSBgY20nKS4KKyUgIzMgaXMgdGhlIGZvbnQncyBkZXNpZ24gc2l6ZSwgIzQgaXMgYSBzY2FsZSBmYWN0b3IKK1xkZWZcc2V0Zm9udCMxIzIjMyM0e1xmb250IzE9XGZvbnRwcmVmaXgjMiMzIHNjYWxlZCAjNH0KKworCislIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KKyUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAorJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCitcaWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcZGVmXGZvbnRwcmVmaXh7Y219CitcZmkKKyUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCitcZGVmXHJtc2hhcGV7cn0KK1xkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXGJmc2hhcGV7Yn0KK1xkZWZcYnhzaGFwZXtieH0KK1xkZWZcdHRzaGFwZXt0dH0KK1xkZWZcdHRic2hhcGV7dHR9CitcZGVmXHR0c2xzaGFwZXtzbHR0fQorXGRlZlxpdHNoYXBle3RpfQorXGRlZlxpdGJzaGFwZXtieHRpfQorXGRlZlxzbHNoYXBle3NsfQorXGRlZlxzbGJzaGFwZXtieHNsfQorXGRlZlxzZnNoYXBle3NzfQorXGRlZlxzZmJzaGFwZXtzc30KK1xkZWZcc2NzaGFwZXtjc2N9CitcZGVmXHNjYnNoYXBle2NzY30KKworJSBEZWZpbml0aW9ucyBmb3IgYSBtYWluIHRleHQgc2l6ZSBvZiAxMXB0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpbgorJSBUZXhpbmZvLgorJQorXGRlZlxkZWZpbmV0ZXh0Zm9udHNpemV4aXsKKyUgVGV4dCBmb250cyAoMTEuMnB0LCBtYWdzdGVwMSkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMXB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXGF1dGhvcnJte1xzZWNybX0KK1xkZWZcYXV0aG9ydHR7XHNlY3R0fQorCislIENoYXB0ZXIgKGFuZCB1bm51bWJlcmVkKSBmb250cyAoMTcuMjhwdCkuCitcZGVmXGNoYXBub21pbmFsc2l6ZXsxN3B0fQorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xsZXRcY2hhcGJmPVxjaGFwcm0KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXGZvbnRcY2hhcGk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDIKK1xmb250XGNoYXBzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMworCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcZGVmXHNlY25vbWluYWxzaXplezE0cHR9Citcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWNpdFxpdGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX0KK1xmb250XHNzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXBoYWxmCitcZm9udFxzc2Vjc3k9Y21zeTEwIHNjYWxlZCAxMzE1CisKKyUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoMTBwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXsxMHB0fQorXHNldGZvbnRccmVkdWNlZHJtXHJtc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9CitcZm9udFxyZWR1Y2VkaT1jbW1pMTAKK1xmb250XHJlZHVjZWRzeT1jbXN5MTAKKworJSByZXNldCB0aGUgY3VycmVudCBmb250cworXHRleHRmb250cworXHJtCit9ICUgZW5kIG9mIDExcHQgdGV4dCBmb250IHNpemUgZGVmaW5pdGlvbnMKKworCislIERlZmluaXRpb25zIHRvIG1ha2UgdGhlIG1haW4gdGV4dCBiZSAxMHB0IENvbXB1dGVyIE1vZGVybiwgd2l0aAorJSBzZWN0aW9uLCBjaGFwdGVyLCBldGMuLCBzaXplcyBmb2xsb3dpbmcgc3VpdC4gIFRoaXMgaXMgZm9yIHRoZSBHTlUKKyUgUHJlc3MgcHJpbnRpbmcgb2YgdGhlIEVtYWNzIDIyIG1hbnVhbC4gIE1heWJlIG90aGVyIG1hbnVhbHMgaW4gdGhlCislIGZ1dHVyZS4gIFVzZWQgd2l0aCBAc21hbGxib29rLCB3aGljaCBzZXRzIHRoZSBsZWFkaW5nIHRvIDEycHQuCislCitcZGVmXGRlZmluZXRleHRmb250c2l6ZXh7JQorJSBUZXh0IGZvbnRzICgxMHB0KS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezEwcHR9CitcZWRlZlxtYWlubWFnc3RlcHsxMDAwfQorXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXBoYWxmfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXGF1dGhvcnJte1xzZWNybX0KK1xkZWZcYXV0aG9ydHR7XHNlY3R0fQorCislIENoYXB0ZXIgZm9udHMgKDE0LjRwdCkuCitcZGVmXGNoYXBub21pbmFsc2l6ZXsxNHB0fQorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXGxldFxjaGFwYmZcY2hhcHJtCitcc2V0Zm9udFxjaGFwc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTZWN0aW9uIGZvbnRzICgxMnB0KS4KK1xkZWZcc2Vjbm9taW5hbHNpemV7MTJwdH0KK1xzZXRmb250XHNlY3JtXHJtYnNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17MTAwMH0KK1xsZXRcc2VjYmZcc2Vjcm0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDF9CitcZm9udFxzZWNpPWNtbWkxMgorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDEKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMHB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxzc2VjaXRcaXRic2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxzc2Vjc2xcc2xic2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxzc2VjdHRcdHRic2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTB9ezEwMDB9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTAwMH0KK1xmb250XHNzZWNpPWNtbWkxMAorXGZvbnRcc3NlY3N5PWNtc3kxMAorCislIFJlZHVjZWQgZm9udHMgZm9yIEBhY3JvIGluIHRleHQgKDlwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXs5fXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxyZWR1Y2VkaXRcaXRzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17OTAwfQorXHNldGZvbnRccmVkdWNlZHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxyZWR1Y2VkaT1jbW1pOQorXGZvbnRccmVkdWNlZHN5PWNtc3k5CisKKyUgcmVkdWNlIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocworXGRpdmlkZVxwYXJza2lwIGJ5IDIKKworJSByZXNldCB0aGUgY3VycmVudCBmb250cworXHRleHRmb250cworXHJtCit9ICUgZW5kIG9mIDEwcHQgdGV4dCBmb250IHNpemUgZGVmaW5pdGlvbnMKKworCislIFdlIHByb3ZpZGUgdGhlIHVzZXItbGV2ZWwgY29tbWFuZAorJSAgIEBmb250dGV4dHNpemUgMTAKKyUgKG9yIDExKSB0byByZWRlZmluZSB0aGUgdGV4dCBmb250IHNpemUuICBwdCBpcyBhc3N1bWVkLgorJQorXGRlZlx4d29yZHsxMH0KK1xkZWZceGl3b3JkezExfQorJQorXHBhcnNlYXJnZGVmXGZvbnR0ZXh0c2l6ZXslCisgIFxkZWZcdGV4dHNpemVhcmd7IzF9JQorICBcd2xvZ3tkb2luZyBAZm9udHRleHRzaXplIFx0ZXh0c2l6ZWFyZ30lCisgICUKKyAgJSBTZXQgXGdsb2JhbGRlZnMgc28gdGhhdCBkb2N1bWVudHMgY2FuIHVzZSB0aGlzIGluc2lkZSBAdGV4LCBzaW5jZQorICAlIG1ha2VpbmZvIDQuOCBkb2VzIG5vdCBzdXBwb3J0IGl0LCBidXQgd2UgbmVlZCBpdCBub25ldGhlbGVzcy4KKyAgJQorIFxiZWdpbmdyb3VwIFxnbG9iYWxkZWZzPTEKKyAgXGlmeFx0ZXh0c2l6ZWFyZ1x4d29yZCBcZGVmaW5ldGV4dGZvbnRzaXpleAorICBcZWxzZSBcaWZ4XHRleHRzaXplYXJnXHhpd29yZCBcZGVmaW5ldGV4dGZvbnRzaXpleGkKKyAgXGVsc2UKKyAgICBcZXJyaGVscD1cRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtAZm9udHRleHRzaXplIG9ubHkgc3VwcG9ydHMgYDEwJyBvciBgMTEnLCBub3QgYFx0ZXh0c2l6ZWFyZyd9CisgIFxmaVxmaQorIFxlbmRncm91cAorfQorCisKKyUgSW4gb3JkZXIgZm9yIHRoZSBmb250IGNoYW5nZXMgdG8gYWZmZWN0IG1vc3QgbWF0aCBzeW1ib2xzIGFuZCBsZXR0ZXJzLAorJSB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgXHRleHRmb250IG9mIHRoZSBzdGFuZGFyZCBmYW1pbGllcy4gIFNpbmNlCislIHRleGluZm8gZG9lc24ndCBhbGxvdyBmb3IgcHJvZHVjaW5nIHN1YnNjcmlwdHMgYW5kIHN1cGVyc2NyaXB0cyBleGNlcHQKKyUgaW4gdGhlIG1haW4gdGV4dCwgd2UgZG9uJ3QgYm90aGVyIHRvIHJlc2V0IFxzY3JpcHRmb250IGFuZAorJSBcc2NyaXB0c2NyaXB0Zm9udCAod2hpY2ggd291bGQgYWxzbyByZXF1aXJlIGxvYWRpbmcgYSBsb3QgbW9yZSBmb250cykuCislCitcZGVmXHJlc2V0bWF0aGZvbnRzeyUKKyAgXHRleHRmb250MD1cdGVucm0gXHRleHRmb250MT1cdGVuaSBcdGV4dGZvbnQyPVx0ZW5zeQorICBcdGV4dGZvbnRcaXRmYW09XHRlbml0IFx0ZXh0Zm9udFxzbGZhbT1cdGVuc2wgXHRleHRmb250XGJmZmFtPVx0ZW5iZgorICBcdGV4dGZvbnRcdHRmYW09XHRlbnR0IFx0ZXh0Zm9udFxzZmZhbT1cdGVuc2YKK30KKworJSBUaGUgZm9udC1jaGFuZ2luZyBjb21tYW5kcyByZWRlZmluZSB0aGUgbWVhbmluZ3Mgb2YgXHRlblNUWUxFLCBpbnN0ZWFkCislIG9mIGp1c3QgXFNUWUxFLiAgV2UgZG8gdGhpcyBiZWNhdXNlIFxTVFlMRSBuZWVkcyB0byBhbHNvIHNldCB0aGUKKyUgY3VycmVudCBcZmFtIGZvciBtYXRoIG1vZGUuICBPdXIgXFNUWUxFIChlLmcuLCBccm0pIGNvbW1hbmRzIGhhcmR3aXJlCislIFx0ZW5TVFlMRSB0byBzZXQgdGhlIGN1cnJlbnQgZm9udC4KKyUKKyUgRWFjaCBmb250LWNoYW5naW5nIGNvbW1hbmQgYWxzbyBzZXRzIHRoZSBuYW1lcyBcbHNpemUgKG9uZSBzaXplIGxvd2VyKQorJSBhbmQgXGxsbHNpemUgKHRocmVlIHNpemVzIGxvd2VyKS4gIFRoZXNlIHJlbGF0aXZlIGNvbW1hbmRzIGFyZSB1c2VkIGluCislIHRoZSBMYVRlWCBsb2dvIGFuZCBhY3Jvbnltcy4KKyUKKyUgVGhpcyBhbGwgbmVlZHMgZ2VuZXJhbGl6aW5nLCBiYWRseS4KKyUKK1xkZWZcdGV4dGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGV4dHJtIFxsZXRcdGVuaXQ9XHRleHRpdCBcbGV0XHRlbnNsPVx0ZXh0c2wKKyAgXGxldFx0ZW5iZj1cdGV4dGJmIFxsZXRcdGVudHQ9XHRleHR0dCBcbGV0XHNtYWxsY2Fwcz1cdGV4dHNjCisgIFxsZXRcdGVuc2Y9XHRleHRzZiBcbGV0XHRlbmk9XHRleHRpIFxsZXRcdGVuc3k9XHRleHRzeQorICBcbGV0XHRlbnR0c2w9XHRleHR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGV4dH0lCisgIFxkZWZcbHNpemV7cmVkdWNlZH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9fQorXGRlZlx0aXRsZWZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGl0bGVybSBcbGV0XHRlbml0PVx0aXRsZWl0IFxsZXRcdGVuc2w9XHRpdGxlc2wKKyAgXGxldFx0ZW5iZj1cdGl0bGViZiBcbGV0XHRlbnR0PVx0aXRsZXR0IFxsZXRcc21hbGxjYXBzPVx0aXRsZXNjCisgIFxsZXRcdGVuc2Y9XHRpdGxlc2YgXGxldFx0ZW5pPVx0aXRsZWkgXGxldFx0ZW5zeT1cdGl0bGVzeQorICBcbGV0XHRlbnR0c2w9XHRpdGxldHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RpdGxlfSUKKyAgXGRlZlxsc2l6ZXtjaGFwfVxkZWZcbGxsc2l6ZXtzdWJzZWN9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MjVwdH19CitcZGVmXHRpdGxlZm9udCMxe3tcdGl0bGVmb250c1xybSAjMX19CitcZGVmXGNoYXBmb250c3slCisgIFxsZXRcdGVucm09XGNoYXBybSBcbGV0XHRlbml0PVxjaGFwaXQgXGxldFx0ZW5zbD1cY2hhcHNsCisgIFxsZXRcdGVuYmY9XGNoYXBiZiBcbGV0XHRlbnR0PVxjaGFwdHQgXGxldFxzbWFsbGNhcHM9XGNoYXBzYworICBcbGV0XHRlbnNmPVxjaGFwc2YgXGxldFx0ZW5pPVxjaGFwaSBcbGV0XHRlbnN5PVxjaGFwc3kKKyAgXGxldFx0ZW50dHNsPVxjaGFwdHRzbAorICBcZGVmXGN1cmZvbnRzaXple2NoYXB9JQorICBcZGVmXGxzaXple3NlY31cZGVmXGxsbHNpemV7dGV4dH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxOXB0fX0KK1xkZWZcc2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzZWNybSBcbGV0XHRlbml0PVxzZWNpdCBcbGV0XHRlbnNsPVxzZWNzbAorICBcbGV0XHRlbmJmPVxzZWNiZiBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc2Vjc2YgXGxldFx0ZW5pPVxzZWNpIFxsZXRcdGVuc3k9XHNlY3N5CisgIFxsZXRcdGVudHRzbD1cc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NlY30lCisgIFxkZWZcbHNpemV7c3Vic2VjfVxkZWZcbGxsc2l6ZXtyZWR1Y2VkfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE2cHR9fQorXGRlZlxzdWJzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNzZWNybSBcbGV0XHRlbml0PVxzc2VjaXQgXGxldFx0ZW5zbD1cc3NlY3NsCisgIFxsZXRcdGVuYmY9XHNzZWNiZiBcbGV0XHRlbnR0PVxzc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNzZWNzYworICBcbGV0XHRlbnNmPVxzc2Vjc2YgXGxldFx0ZW5pPVxzc2VjaSBcbGV0XHRlbnN5PVxzc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NzZWN9JQorICBcZGVmXGxzaXple3RleHR9XGRlZlxsbGxzaXple3NtYWxsfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE1cHR9fQorXGxldFxzdWJzdWJzZWNmb250cyA9IFxzdWJzZWNmb250cworXGRlZlxyZWR1Y2VkZm9udHN7JQorICBcbGV0XHRlbnJtPVxyZWR1Y2Vkcm0gXGxldFx0ZW5pdD1ccmVkdWNlZGl0IFxsZXRcdGVuc2w9XHJlZHVjZWRzbAorICBcbGV0XHRlbmJmPVxyZWR1Y2VkYmYgXGxldFx0ZW50dD1ccmVkdWNlZHR0IFxsZXRccmVkdWNlZGNhcHM9XHJlZHVjZWRzYworICBcbGV0XHRlbnNmPVxyZWR1Y2Vkc2YgXGxldFx0ZW5pPVxyZWR1Y2VkaSBcbGV0XHRlbnN5PVxyZWR1Y2Vkc3kKKyAgXGxldFx0ZW50dHNsPVxyZWR1Y2VkdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3JlZHVjZWR9JQorICBcZGVmXGxzaXple3NtYWxsfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbHJtIFxsZXRcdGVuaXQ9XHNtYWxsaXQgXGxldFx0ZW5zbD1cc21hbGxzbAorICBcbGV0XHRlbmJmPVxzbWFsbGJmIFxsZXRcdGVudHQ9XHNtYWxsdHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxzZiBcbGV0XHRlbmk9XHNtYWxsaSBcbGV0XHRlbnN5PVxzbWFsbHN5CisgIFxsZXRcdGVudHRzbD1cc21hbGx0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGx9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxlcmZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxlcnJtIFxsZXRcdGVuaXQ9XHNtYWxsZXJpdCBcbGV0XHRlbnNsPVxzbWFsbGVyc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxlcmJmIFxsZXRcdGVudHQ9XHNtYWxsZXJ0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxlcnNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsZXJzZiBcbGV0XHRlbmk9XHNtYWxsZXJpIFxsZXRcdGVuc3k9XHNtYWxsZXJzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsZXJ0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGxlcn0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3s5LjVwdH19CisKKyUgU2V0IHRoZSBmb250cyB0byB1c2Ugd2l0aCB0aGUgQHNtYWxsLi4uIGVudmlyb25tZW50cy4KK1xsZXRcc21hbGxleGFtcGxlZm9udHMgPSBcc21hbGxmb250cworCislIEFib3V0IFxzbWFsbGV4YW1wbGVmb250cy4gIElmIHdlIHVzZSBcc21hbGxmb250cyAoOXB0KSwgQHNtYWxsZXhhbXBsZQorJSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT04NiAgIHNtYWxsYm9vaz03MiAgYTQ9OTAgIGE1PTY5CislIElmIHdlIHVzZSBcc2NyaXB0Zm9udHMgKDhwdCksIHRoZW4gd2UgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9OTArICBzbWFsbGJvb2s9ODAgIGE0PTkwKyAgYTU9NzcKKyUgRm9yIG1lLCBzdWJqZWN0aXZlbHksIHRoZSBmZXcgZXh0cmEgY2hhcmFjdGVycyB0aGF0IGZpdCBhcmVuJ3Qgd29ydGgKKyUgdGhlIGFkZGl0aW9uYWwgc21hbGxuZXNzIG9mIDhwdC4gIFNvIEknbSBtYWtpbmcgdGhlIGRlZmF1bHQgOXB0LgorJQorJSBCeSB0aGUgd2F5LCBmb3IgY29tcGFyaXNvbiwgaGVyZSdzIHdoYXQgZml0cyB3aXRoIEBleGFtcGxlICgxMHB0KToKKyUgICA4LjV4MTE9NzEgIHNtYWxsYm9vaz02MCAgYTQ9NzUgIGE1PTU4CislCislIEkgd2lzaCB0aGUgVVNBIHVzZWQgQTQgcGFwZXIuCislIC0ta2FybCwgMjRqYW4wMy4KKworCislIFNldCB1cCB0aGUgZGVmYXVsdCBmb250cywgc28gd2UgY2FuIHVzZSB0aGVtIGZvciBjcmVhdGluZyBib3hlcy4KKyUKK1xkZWZpbmV0ZXh0Zm9udHNpemV4aQorCislIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSBGb250cyBmb3Igc2hvcnQgdGFibGUgb2YgY29udGVudHMuCitcc2V0Zm9udFxzaG9ydGNvbnRybVxybXNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250YmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udHR0XHR0c2hhcGV7MTJ9ezEwMDB9CisKKyUlIEFkZCBzY3JpYmUtbGlrZSBmb250IGVudmlyb25tZW50cywgcGx1cyBAbCBmb3IgaW5saW5lIGxpc3AgKHVzdWFsbHkgc2FucworJSUgc2VyaWYpIGFuZCBAaWkgZm9yIFRlWCBpdGFsaWMKKworJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgorJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCitcZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKKyAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KK1xkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLgorJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCitcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CislIHR0c2wgZm9yIGJvb2sgdGl0bGVzLCBkbyB3ZT8KK1xkZWZcY2l0ZSMxe3tcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworXGxldFxpPVxzbWFydGl0YWxpYworXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBAYiwgZXhwbGljaXQgYm9sZC4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxudWxsCit9CitcZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Citcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9CitcZm9udFxrZXlzeT1jbXN5OQorXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCisgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKKyAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAorICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKKyAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorJSBUaGUgb2xkIGRlZmluaXRpb24sIHdpdGggbm8gbG96ZW5nZToKKyVcZGVmXGtleSAjMXt7XHR0c2wgXG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9CitcZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CisKKyUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgorXGxldFxmaWxlPVxzYW1wCitcbGV0XG9wdGlvbj1cc2FtcAorCislIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAorJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCitcZGVmXHRjbG9zZSMxeyUKKyAgeyUKKyAgICAlIENoYW5nZSBub3JtYWwgaW50ZXJ3b3JkIHNwYWNlIHRvIGJlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IGZvbnQuCisgICAgXHNwYWNlc2tpcCA9IFxmb250ZGltZW4yXGZvbnQKKyAgICAlCisgICAgJSBTd2l0Y2ggdG8gdHlwZXdyaXRlci4KKyAgICBcdHQKKyAgICAlCisgICAgJSBCdXQgYFwgJyBwcm9kdWNlcyB0aGUgbGFyZ2UgdHlwZXdyaXRlciBpbnRlcndvcmQgc3BhY2UuCisgICAgXGRlZlwge3tcc3BhY2Vza2lwID0gMHB0e30gfX0lCisgICAgJQorICAgICUgVHVybiBvZmYgaHlwaGVuYXRpb24uCisgICAgXG5vaHlwaGVuYXRpb24KKyAgICAlCisgICAgXHJhd2JhY2tzbGFzaAorICAgIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgICAjMSUKKyAgfSUKKyAgXG51bGwKK30KKworJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBAY29kZS4KKyUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKKyUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCisKKyUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKKyUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCislIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCislIGFuZCBhcnJhbmdlIGV4cGxpY2l0bHkgdG8gaHlwaGVuYXRlIGF0IGEgZGFzaC4KKyUgIC0tIHJtcy4KK3sKKyAgXGNhdGNvZGVgXC09XGFjdGl2ZSBcY2F0Y29kZWBcXz1cYWN0aXZlCisgIFxjYXRjb2RlYFwnPVxhY3RpdmUgXGNhdGNvZGVgXGA9XGFjdGl2ZQorICAlCisgIFxnbG9iYWxcZGVmXGNvZGV7XGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZVxycXVvdGVDaGFyPVxhY3RpdmUgXGNhdGNvZGVcbHF1b3RlQ2hhcj1cYWN0aXZlCisgICAgXGxldCdcY29kZXF1b3RlcmlnaHQgXGxldGBcY29kZXF1b3RlbGVmdAorICAgICUKKyAgICBcY2F0Y29kZVxkYXNoQ2hhcj1cYWN0aXZlICBcY2F0Y29kZVx1bmRlckNoYXI9XGFjdGl2ZQorICAgIFxpZmFsbG93Y29kZWJyZWFrcworICAgICBcbGV0LVxjb2RlZGFzaAorICAgICBcbGV0X1xjb2RldW5kZXIKKyAgICBcZWxzZQorICAgICBcbGV0LVxyZWFsZGFzaAorICAgICBcbGV0X1xyZWFsdW5kZXIKKyAgICBcZmkKKyAgICBcY29kZXgKKyAgfQorfQorCitcZGVmXHJlYWxkYXNoey19CitcZGVmXGNvZGVkYXNoey1cZGlzY3JldGlvbmFyeXt9e317fX0KK1xkZWZcY29kZXVuZGVyeyUKKyAgJSB0aGlzIGlzIGFsbCBzbyBAbWF0aHtAY29kZXt2YXJfbmFtZX0rMX0gY2FuIHdvcmsuICBJbiBtYXRoIG1vZGUsIF8KKyAgJSBpcyAiYWN0aXZlIiAobWF0aGNvZGUiODAwMCkgYW5kIFxub3JtYWx1bmRlcnNjb3JlIChvciBcY2hhcjk1LCBldGMuKQorICAlIHdpbGwgdGhlcmVmb3JlIGV4cGFuZCB0aGUgYWN0aXZlIGRlZmluaXRpb24gb2YgXywgd2hpY2ggaXMgdXMKKyAgJSAoaW5zaWRlIEBjb2RlIHRoYXQgaXMpLCB0aGVyZWZvcmUgYW4gZW5kbGVzcyBsb29wLgorICBcaWZ1c2luZ3R0e1xpZm1tb2RlCisgICAgICAgICAgICAgICBcbWF0aGNoYXIiMDc1RiAlIGNsYXNzIDA9b3JkaW5hcnksIGZhbWlseSA3PXR0ZmFtLCBwb3MgMHg1Rj1fLgorICAgICAgICAgICAgIFxlbHNlXG5vcm1hbHVuZGVyc2NvcmUgXGZpCisgICAgICAgICAgICAgXGRpc2NyZXRpb25hcnl7fXt9e319JQorICAgICAgICAgICAge1xffSUKK30KK1xkZWZcY29kZXggIzF7XHRjbG9zZXsjMX1cZW5kZ3JvdXB9CisKKyUgQW4gYWRkaXRpb25hbCBjb21wbGljYXRpb246IHRoZSBhYm92ZSB3aWxsIGFsbG93IGJyZWFrcyBhZnRlciwgZS5nLiwKKyUgZWFjaCBvZiB0aGUgZm91ciB1bmRlcnNjb3JlcyBpbiBfX3R5cGVvZl9fLiAgVGhpcyBpcyB1bmRlc2lyYWJsZSBpbgorJSBzb21lIG1hbnVhbHMsIGVzcGVjaWFsbHkgaWYgdGhleSBkb24ndCBoYXZlIGxvbmcgaWRlbnRpZmllcnMgaW4KKyUgZ2VuZXJhbC4gIEBhbGxvd2NvZGVicmVha3MgcHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB0aGlzLgorJQorXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorCitcZGVmXGtleXdvcmR0cnVle3RydWV9CitcZGVmXGtleXdvcmRmYWxzZXtmYWxzZX0KKworXHBhcnNlYXJnZGVmXGFsbG93Y29kZWJyZWFrc3slCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdca2V5d29yZHRydWUKKyAgICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorICBcZWxzZVxpZnhcdHhpYXJnXGtleXdvcmRmYWxzZQorICAgIFxhbGxvd2NvZGVicmVha3NmYWxzZQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmkKK30KKworJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorCislIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAorJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAorJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgorXHBhcnNlYXJnZGVmXGtiZGlucHV0c3R5bGV7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXHdvcmRkaXN0aW5jdAorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0c2x9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRleGFtcGxlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRjb2RlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0fVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGtiZGlucHV0c3R5bGUgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaVxmaQorfQorXGRlZlx3b3JkZGlzdGluY3R7ZGlzdGluY3R9CitcZGVmXHdvcmRleGFtcGxle2V4YW1wbGV9CitcZGVmXHdvcmRjb2Rle2NvZGV9CisKKyUgRGVmYXVsdCBpcyBgZGlzdGluY3QuJworXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCitcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKKyUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKKyUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybAorJSBpdHNlbGYuICBGaXJzdCAobWFuZGF0b3J5KSBhcmcgaXMgdGhlIHVybC4gIFBlcmhhcHMgZXZlbnR1YWxseSBwdXQgaW4KKyUgYSBoeXBlcnRleCBcc3BlY2lhbCBoZXJlLgorJQorXGRlZlx1cmVmIzF7XGRvdXJlZiAjMSwsLFxmaW5pc2h9CitcZGVmXGRvdXJlZiMxLCMyLCMzLCM0XGZpbmlzaHtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXHBkZnVybHsjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcdW5oYm94MCAlIHRoaXJkIGFyZyBnaXZlbiwgc2hvdyBvbmx5IHRoYXQKKyAgXGVsc2UKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICAgIFxpZnBkZgorICAgICAgICBcdW5oYm94MCAgICAgICAgICAgICAlIFBERjogMm5kIGFyZyBnaXZlbiwgc2hvdyBvbmx5IGl0CisgICAgICBcZWxzZQorICAgICAgICBcdW5oYm94MFwgKFxjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcY29kZXsjMX0lIG9ubHkgdXJsIGdpdmVuLCBzbyBzaG93IGl0CisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KKyUKK1xsZXRcdXJsPVx1cmVmCisKKyUgcm1zIGRvZXMgbm90IGxpa2UgYW5nbGUgYnJhY2tldHMgLS1rYXJsLCAxN21heTk3LgorJSBTbyBub3cgQGVtYWlsIGlzIGp1c3QgbGlrZSBAdXJlZiwgdW5sZXNzIHdlIGFyZSBwZGYuCislCislXGRlZlxlbWFpbCMxe1xhbmdsZWxlZnR7XHR0ICMxfVxhbmdsZXJpZ2h0fQorXGlmcGRmCisgIFxkZWZcZW1haWwjMXtcZG9lbWFpbCMxLCxcZmluaXNofQorICBcZGVmXGRvZW1haWwjMSwjMiwjM1xmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgICBcdW5zZXBzcGFjZXMKKyAgICBccGRmdXJse21haWx0bzojMX0lCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwPjBwdFx1bmhib3gwXGVsc2VcY29kZXsjMX1cZmkKKyAgICBcZW5kbGluaworICBcZW5kZ3JvdXB9CitcZWxzZQorICBcbGV0XGVtYWlsPVx1cmVmCitcZmkKKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKK1xkZWZca2JkIzF7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn0KKworJSBAbCB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byBtZWFuIGBgc3dpdGNoIHRvIHRoZSBMaXNwIGZvbnQnJywKKyUgYW5kIGl0IGlzIG5vdCB1c2VkIGFzIHN1Y2ggaW4gYW55IG1hbnVhbCBJIGNhbiBmaW5kLiAgV2UgbmVlZCBpdCBmb3IKKyUgUG9saXNoIHN1cHByZXNzZWQtbC4gIC0ta2FybCwgMjJzZXA5Ni4KKyVcZGVmXGwjMXt7XGxpICMxfVxudWxsfQorCislIEV4cGxpY2l0IGZvbnQgY2hhbmdlczogQHIsIEBzYywgdW5kb2N1bWVudGVkIEBpaS4KK1xkZWZcciMxe3tccm0gIzF9fSAgICAgICAgICAgICAgJSByb21hbiBmb250CitcZGVmXHNjIzF7e1xzbWFsbGNhcHMjMX19ICAgICAgICUgc21hbGxjYXBzIGZvbnQKK1xkZWZcaWkjMXt7XGl0ICMxfX0gICAgICAgICAgICAgJSBpdGFsaWMgZm9udAorCislIEBhY3JvbnltIGZvciAiRkJJIiwgIk5BVE8iLCBhbmQgdGhlIGxpa2UuCislIFdlIHByaW50IHRoaXMgb25lIHBvaW50IHNpemUgc21hbGxlciwgc2luY2UgaXQncyBpbnRlbmRlZCBmb3IKKyUgYWxsLXVwcGVyY2FzZS4KKyUKK1xkZWZcYWNyb255bSMxe1xkb2Fjcm9ueW0gIzEsLFxmaW5pc2h9CitcZGVmXGRvYWNyb255bSMxLCMyLCMzXGZpbmlzaHslCisgIHtcc2VsZWN0Zm9udHNcbHNpemUgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBhYmJyIGZvciAiQ29tcHV0LiBKLiIgYW5kIHRoZSBsaWtlLgorJSBObyBmb250IGNoYW5nZSwgYnV0IGRvbid0IGRvIGVuZC1vZi1zZW50ZW5jZSBzcGFjaW5nLgorJQorXGRlZlxhYmJyIzF7XGRvYWJiciAjMSwsXGZpbmlzaH0KK1xkZWZcZG9hYmJyIzEsIzIsIzNcZmluaXNoeyUKKyAge1xwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBwb3VuZHN7fSBpcyBhIHN0ZXJsaW5nIHNpZ24sIHdoaWNoIEtudXRoIHB1dCBpbiB0aGUgQ00gaXRhbGljIGZvbnQuCislCitcZGVmXHBvdW5kc3t7XGl0XCR9fQorCislIEBldXJve30gY29tZXMgZnJvbSBhIHNlcGFyYXRlIGZvbnQsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdHlsZS4KKyUgV2UgdXNlIHRoZSBmcmVlIGZleW0qIGZvbnRzIGZyb20gdGhlIGV1cm9zeW0gcGFja2FnZSBieSBIZW5yaWsKKyUgVGhlaWxpbmcsIHdoaWNoIHN1cHBvcnQgcmVndWxhciwgc2xhbnRlZCwgYm9sZCBhbmQgYm9sZCBzbGFudGVkIChhbmQKKyUgIm91dGxpbmVkIiAoYmxhY2tib2FyZCBib2FyZCwgc29ydCBvZikgdmVyc2lvbnMsIHdoaWNoIHdlIGRvbid0IG5lZWQpLgorJSBJdCBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmN0YW4ub3JnL3RleC1hcmNoaXZlL2ZvbnRzL2V1cm9zeW0uCislCislIEFsdGhvdWdoIG9ubHkgcmVndWxhciBpcyB0aGUgdHJ1bHkgb2ZmaWNpYWwgRXVybyBzeW1ib2wsIHdlIGlnbm9yZQorJSB0aGF0LiAgVGhlIEV1cm8gaXMgZGVzaWduZWQgdG8gYmUgc2xpZ2h0bHkgdGFsbGVyIHRoYW4gdGhlIHJlZ3VsYXIKKyUgZm9udCBoZWlnaHQuCislCislIGZleW1yIC0gcmVndWxhcgorJSBmZXltbyAtIHNsYW50ZWQKKyUgZmV5YnIgLSBib2xkCislIGZleWJvIC0gYm9sZCBzbGFudGVkCislCislIFRoZXJlIGlzIG5vIGdvb2QgKGZyZWUpIHR5cGV3cml0ZXIgdmVyc2lvbiwgdG8gbXkga25vd2xlZGdlLgorJSBBIGZleW1yMTAgZXVybyBpcyB+Ny4zcHQgd2lkZSwgd2hpbGUgYSBub3JtYWwgY210dDEwIGNoYXIgaXMgfjUuMjVwdCB3aWRlLgorJSBIbW0uCislCislIEFsc28gZG9lc24ndCB3b3JrIGluIG1hdGguICBEbyB3ZSBuZWVkIHRvIGRvIG1hdGggd2l0aCBldXJvIHN5bWJvbHM/CislIEhvcGUgbm90LgorJQorJQorXGRlZlxldXJve3tcZXVyb2ZvbnQgZX19CitcZGVmXGV1cm9mb250eyUKKyAgJSBXZSBzZXQgdGhlIGZvbnQgYXQgZWFjaCBjb21tYW5kLCByYXRoZXIgdGhhbiBwcmVkZWZpbmluZyBpdCBpbgorICAlIFx0ZXh0Zm9udHMgYW5kIHRoZSBvdGhlciBmb250LXN3aXRjaGluZyBjb21tYW5kcywgc28gdGhhdAorICAlIGluc3RhbGxhdGlvbnMgd2hpY2ggbmV2ZXIgbmVlZCB0aGUgc3ltYm9sIGRvbid0IGhhdmUgdG8gaGF2ZSB0aGUKKyAgJSBmb250IGluc3RhbGxlZC4KKyAgJQorICAlIFRoZXJlIGlzIG9ubHkgb25lIGRlc2lnbmVkIHNpemUgKG5vbWluYWwgMTBwdCksIHNvIHdlIGFsd2F5cyBzY2FsZQorICAlIHRoYXQgdG8gdGhlIGN1cnJlbnQgbm9taW5hbCBzaXplLgorICAlCisgICUgQnkgdGhlIHdheSwgc2ltcGx5IHVzaW5nICJhdCAxZW0iIHdvcmtzIGZvciBjbXIxMCBhbmQgdGhlIGxpa2UsIGJ1dAorICAlIGRvZXMgbm90IHdvcmsgZm9yIGNtYngxMCBhbmQgb3RoZXIgZXh0ZW5kZWQvc2hydW5rZW4gZm9udHMuCisgICUKKyAgXGRlZlxldXJvc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIG5vbWluYWxzaXplXGVuZGNzbmFtZX0lCisgICUKKyAgXGlmeFxjdXJmb250c3R5bGVcYmZzdHlsZW5hbWUKKyAgICAlIGJvbGQ6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXlibzEwfXtmZXlicjEwfSBhdCBcZXVyb3NpemUKKyAgXGVsc2UKKyAgICAlIHJlZ3VsYXI6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXltbzEwfXtmZXltcjEwfSBhdCBcZXVyb3NpemUKKyAgXGZpCisgIFx0aGlzZXVyb2ZvbnQKK30KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQorJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgUn0lCisgICAgICAgICAgICAgICBcaGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCislIEB0ZXh0ZGVncmVlIC0gdGhlIG5vcm1hbCBkZWdyZWVzIHNpZ24uCislCitcZGVmXHRleHRkZWdyZWV7JF5cY2lyYyR9CisKKyUgTGF1cmVudCBTaWViZW5tYW5uIHJlcG9ydHMgXE9yYiB1bmRlZmluZWQgd2l0aDoKKyUgIFRleHR1cmVzIDEuNy43IChwcmVsb2FkZWQgZm9ybWF0PXBsYWluIDkzLjEwLjE0KSAgKDY4SykgIDE2IEFQUiAyMDA0IDAyOjM4CislIHNvIHdlJ2xsIGRlZmluZSBpdCBpZiBuZWNlc3NhcnkuCislCitcaWZ4XE9yYlx1bmRlZmluZWQKK1xkZWZcT3Jie1xtYXRoaGV4Ym94MjBEfQorXGZpCisKKworXG1lc3NhZ2V7cGFnZSBoZWFkaW5ncyx9CisKK1xuZXdza2lwXHRpdGxlcGFnZXRvcGdsdWUgXHRpdGxlcGFnZXRvcGdsdWUgPSAxLjVpbgorXG5ld3NraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZSBcdGl0bGVwYWdlYm90dG9tZ2x1ZSA9IDJwYworCislIEZpcnN0IHRoZSB0aXRsZSBwYWdlLiAgTXVzdCBkbyBAc2V0dGl0bGUgYmVmb3JlIEB0aXRsZXBhZ2UuCitcbmV3aWZcaWZzZWVuYXV0aG9yCitcbmV3aWZcaWZmaW5pc2hlZHRpdGxlcGFnZQorCislIERvIGFuIGltcGxpY2l0IEBjb250ZW50cyBvciBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZSBpZiB0aGUKKyUgdXNlciBzYXlzIEBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlIG9yIEBzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UuCislCitcbmV3aWZcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCitcbmV3aWZcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCisKK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXtcYmVnaW5ncm91cFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgICAgICAgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQorCitcZW52ZGVmXHRpdGxlcGFnZXslCisgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50PTBwdCBcdGV4dGZvbnRzCisgICAgJSBMZWF2ZSBzb21lIHNwYWNlIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgcGFnZS4KKyAgICBcdmdsdWVcdGl0bGVwYWdldG9wZ2x1ZQorICAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorICAgICUKKyAgICAlIE1vc3QgdGl0bGUgYGBwYWdlcycnIGFyZSBhY3R1YWxseSB0d28gcGFnZXMgbG9uZywgd2l0aCBzcGFjZQorICAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgICBcbGV0XG9sZHBhZ2UgPSBccGFnZQorICAgIFxkZWZccGFnZXslCisgICAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJIFxmaW5pc2h0aXRsZXBhZ2UKKyAgICAgIFxmaQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxwYWdlCisgICAgICBcbnVsbAorICAgIH0lCit9CisKK1xkZWZcRXRpdGxlcGFnZXslCisgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCVxmaW5pc2h0aXRsZXBhZ2UKKyAgICBcZmkKKyAgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICAlIGJlY2F1c2UgdGhlIGhlYWRsaW5lIGFuZCBmb290bGluZSBhcmUgb25seSBlbXB0eSBpbnNpZGUgdGhlIGdyb3VwLgorICAgICUgSWYgd2UgdXNlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBccGFnZSwgd2UgYWx3YXlzIGdldCBhIGJsYW5rIHBhZ2UKKyAgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgICBcb2xkcGFnZQorICBcZW5kZ3JvdXAKKyAgJQorICAlIE5lZWQgdGhpcyBiZWZvcmUgdGhlIFwuLi5hZnRlcnRpdGxlcGFnZSBjaGVja3Mgc28gdGhhdCBpZiB0aGV5IGFyZQorICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgIFxIRUFESU5HU29uCisgICUKKyAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgIFxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxzaG9ydGNvbnRlbnRzCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorICAlCisgIFxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgMnB0IHdpZHRoIFxoc2l6ZQorICBcdnNraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZQorICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKKworXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30KKworXGRlZlxhdXRob3Jmb250e1xhdXRob3JybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTZwdCBcbm9ybWFsYmFzZWxpbmVzCisJCVxsZXRcdHQ9XGF1dGhvcnR0fQorCitccGFyc2VhcmdkZWZcdGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIFxsZWZ0bGluZXtcdGl0bGVmb250c1xybSAjMX0KKyAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCisgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCisgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0Cit9CisKK1xwYXJzZWFyZ2RlZlxzdWJ0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAge1xzdWJ0aXRsZWZvbnQgXHJpZ2h0bGluZXsjMX19JQorfQorCislIEBhdXRob3Igc2hvdWxkIGNvbWUgbGFzdCwgYnV0IG1heSBjb21lIG1hbnkgdGltZXMuCislIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIEBxdW90YXRpb24uCislCitccGFyc2VhcmdkZWZcYXV0aG9yeyUKKyAgXGRlZlx0ZW1we1xxdW90YXRpb259JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICAgIFxkZWZccXVvdGF0aW9uYXV0aG9yeyMxfSUgcHJpbnRlZCBpbiBcRXF1b3RhdGlvbi4KKyAgXGVsc2UKKyAgICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgICAgXGlmc2VlbmF1dGhvclxlbHNlIFx2c2tpcCAwcHQgcGx1cyAxZmlsbGwgXHNlZW5hdXRob3J0cnVlIFxmaQorICAgIHtcYXV0aG9yZm9udCBcbGVmdGxpbmV7IzF9fSUKKyAgXGZpCit9CisKKworJSUlIFNldCB1cCBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncy4KKworXGxldFx0aGlzcGFnZT1cZm9saW8KKworXG5ld3Rva3NcZXZlbmhlYWRsaW5lICAgICUgaGVhZGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkaGVhZGxpbmUgICAgICUgaGVhZGxpbmUgb24gb2RkIHBhZ2VzCitcbmV3dG9rc1xldmVuZm9vdGxpbmUgICAgJSBmb290bGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRmb290bGluZSAgICAgJSBmb290bGluZSBvbiBvZGQgcGFnZXMKKworJSBOb3cgbWFrZSBUZVggdXNlIHRob3NlIHZhcmlhYmxlcworXGhlYWRsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkaGVhZGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5oZWFkbGluZSBcZml9fQorXGZvb3RsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkZm9vdGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5mb290bGluZSBcZml9XEhFQURJTkdTaG9va30KK1xsZXRcSEVBRElOR1Nob29rPVxyZWxheAorCislIENvbW1hbmRzIHRvIHNldCB0aG9zZSB2YXJpYWJsZXMuCislIEZvciBleGFtcGxlLCB0aGlzIGlzIHdoYXQgIEBoZWFkaW5ncyBvbiAgZG9lcworJSBAZXZlbmhlYWRpbmcgQHRoaXN0aXRsZXxAdGhpc3BhZ2V8QHRoaXNjaGFwdGVyCislIEBvZGRoZWFkaW5nIEB0aGlzY2hhcHRlcnxAdGhpc3BhZ2V8QHRoaXN0aXRsZQorJSBAZXZlbmZvb3RpbmcgQHRoaXNmaWxlfHwKKyUgQG9kZGZvb3RpbmcgfHxAdGhpc2ZpbGUKKworCitcZGVmXGV2ZW5oZWFkaW5ne1xwYXJzZWFyZ1xldmVuaGVhZGluZ3h4eH0KK1xkZWZcZXZlbmhlYWRpbmd4eHggIzF7XGV2ZW5oZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxldmVuaGVhZGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXGRlZlxvZGRoZWFkaW5ne1xwYXJzZWFyZ1xvZGRoZWFkaW5neHh4fQorXGRlZlxvZGRoZWFkaW5neHh4ICMxe1xvZGRoZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxvZGRoZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xwYXJzZWFyZ2RlZlxldmVyeWhlYWRpbmd7XG9kZGhlYWRpbmd4eHh7IzF9XGV2ZW5oZWFkaW5neHh4eyMxfX0lCisKK1xkZWZcZXZlbmZvb3Rpbmd7XHBhcnNlYXJnXGV2ZW5mb290aW5neHh4fQorXGRlZlxldmVuZm9vdGluZ3h4eCAjMXtcZXZlbmZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5mb290aW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGZvb3Rpbmd7XHBhcnNlYXJnXG9kZGZvb3Rpbmd4eHh9CitcZGVmXG9kZGZvb3Rpbmd4eHggIzF7XG9kZGZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKKyAgXGdsb2JhbFxvZGRmb290bGluZSA9IHtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX0lCisgICUKKyAgJSBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgZm9vdGxpbmUuICBIb3BlZnVsbHkgb2sgdG8gYXNzdW1lCisgICUgQGV2ZW5mb290aW5nIHdpbGwgbm90IGJlIHVzZWQgYnkgaXRzZWxmLgorICBcZ2xvYmFsXGFkdmFuY2VccGFnZWhlaWdodCBieSAtMTJwdAorICBcZ2xvYmFsXGFkdmFuY2VcdnNpemUgYnkgLTEycHQKK30KKworXHBhcnNlYXJnZGVmXGV2ZXJ5Zm9vdGluZ3tcb2RkZm9vdGluZ3h4eHsjMX1cZXZlbmZvb3Rpbmd4eHh7IzF9fQorCisKKyUgQGhlYWRpbmdzIGRvdWJsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBzaW5nbGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgb2ZmICAgICAgICAgdHVybnMgdGhlbSBvZmYuCislIEBoZWFkaW5ncyBvbiAgICAgICAgICBzYW1lIGFzIEBoZWFkaW5ncyBkb3VibGUsIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgorJSBAaGVhZGluZ3MgYWZ0ZXIgICAgICAgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIGRvdWJsZWFmdGVyIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBzaW5nbGVhZnRlciB0dXJucyBvbiBzaW5nbGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBCeSBkZWZhdWx0LCB0aGV5IGFyZSBvZmYgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQsCislIGFuZCB0dXJuZWQgYG9uJyBhZnRlciBAZW5kIHRpdGxlcGFnZS4KKworXGRlZlxoZWFkaW5ncyAjMSB7XGNzbmFtZSBIRUFESU5HUyMxXGVuZGNzbmFtZX0KKworXGRlZlxIRUFESU5HU29mZnslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH19CitcSEVBRElOR1NvZmYKKyUgV2hlbiB3ZSB0dXJuIGhlYWRpbmdzIG9uLCBzZXQgdGhlIHBhZ2UgbnVtYmVyIHRvIDEuCislIEZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcsIHB1dCBjdXJyZW50IGZpbGUgbmFtZSBpbiBsb3dlciBsZWZ0IGNvcm5lciwKKyUgY2hhcHRlciBuYW1lIG9uIGluc2lkZSB0b3Agb2YgcmlnaHQgaGFuZCBwYWdlcywgZG9jdW1lbnQKKyUgdGl0bGUgb24gaW5zaWRlIHRvcCBvZiBsZWZ0IGhhbmQgcGFnZXMsIGFuZCBwYWdlIG51bWJlcnMgb24gb3V0c2lkZSB0b3AKKyUgZWRnZSBvZiBhbGwgcGFnZXMuCitcZGVmXEhFQURJTkdTZG91YmxleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KK1xsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorCislIEZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcsIGNoYXB0ZXIgdGl0bGUgZ29lcyBhY3Jvc3MgdG9wIGxlZnQgb2YgcGFnZSwKKyUgcGFnZSBudW1iZXIgb24gdG9wIHJpZ2h0LgorXGRlZlxIRUFESU5HU3NpbmdsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CitcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfQorCitcZGVmXEhFQURJTkdTYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTZG91YmxleH0KK1xsZXRcSEVBRElOR1Nkb3VibGVhZnRlcj1cSEVBRElOR1NhZnRlcgorXGRlZlxIRUFESU5HU2RvdWJsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorCitcZGVmXEhFQURJTkdTc2luZ2xlYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTc2luZ2xleH0KK1xkZWZcSEVBRElOR1NzaW5nbGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KKworJSBTdWJyb3V0aW5lcyB1c2VkIGluIGdlbmVyYXRpbmcgaGVhZGluZ3MKKyUgVGhpcyBwcm9kdWNlcyBEYXkgTW9udGggWWVhciBzdHlsZSBvZiBvdXRwdXQuCislIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGluIGNhc2UgYSB0eGktPz8udGV4IGZpbGUgaGFzIHNldAorJSB1cCBhIGRpZmZlcmVudCBmb3JtYXQgKGUuZy4sIHR4aS1jcy50ZXggZG9lcyB0aGlzKS4KK1xpZnhcdG9kYXlcdW5kZWZpbmVkCitcZGVmXHRvZGF5eyUKKyAgXG51bWJlclxkYXlcc3BhY2UKKyAgXGlmY2FzZVxtb250aAorICBcb3JccHV0d29yZE1KYW5cb3JccHV0d29yZE1GZWJcb3JccHV0d29yZE1NYXJcb3JccHV0d29yZE1BcHIKKyAgXG9yXHB1dHdvcmRNTWF5XG9yXHB1dHdvcmRNSnVuXG9yXHB1dHdvcmRNSnVsXG9yXHB1dHdvcmRNQXVnCisgIFxvclxwdXR3b3JkTVNlcFxvclxwdXR3b3JkTU9jdFxvclxwdXR3b3JkTU5vdlxvclxwdXR3b3JkTURlYworICBcZmkKKyAgXHNwYWNlXG51bWJlclx5ZWFyfQorXGZpCisKKyUgQHNldHRpdGxlIGxpbmUuLi4gIHNwZWNpZmllcyB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LCBmb3IgaGVhZGluZ3MuCislIEl0IGdlbmVyYXRlcyBubyBvdXRwdXQgb2YgaXRzIG93bi4KK1xkZWZcdGhpc3RpdGxle1xwdXR3b3JkTm9UaXRsZX0KK1xkZWZcc2V0dGl0bGV7XHBhcnNlYXJne1xnZGVmXHRoaXN0aXRsZX19CisKKworXG1lc3NhZ2V7dGFibGVzLH0KKyUgVGFibGVzIC0tIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZSwgQGl0ZW0oeCkuCisKKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiB0YWJsZSB0ZXh0CitcbmV3ZGltZW5cdGFibGVpbmRlbnQgXHRhYmxlaW5kZW50PS44aW4KKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZSB0ZXh0CitcbmV3ZGltZW5caXRlbWluZGVudCAgXGl0ZW1pbmRlbnQ9LjNpbgorJSBtYXJnaW4gYmV0d2VlbiBlbmQgb2YgdGFibGUgaXRlbSBhbmQgc3RhcnQgb2YgdGFibGUgdGV4dC4KK1xuZXdkaW1lblxpdGVtbWFyZ2luICBcaXRlbW1hcmdpbj0uMWluCisKKyUgdXNlZCBpbnRlcm5hbGx5IGZvciBcaXRlbWluZGVudCBtaW51cyBcaXRlbW1hcmdpbgorXG5ld2RpbWVuXGl0ZW1tYXgKKworJSBOb3RlIEB0YWJsZSwgQGZ0YWJsZSwgYW5kIEB2dGFibGUgZGVmaW5lIEBpdGVtLCBAaXRlbXgsIGV0Yy4sIHdpdGgKKyUgdGhlc2UgZGVmcy4KKyUgVGhleSBhbHNvIGRlZmluZSBcaXRlbWluZGV4CislIHRvIGluZGV4IHRoZSBpdGVtIG5hbWUgaW4gd2hhdGV2ZXIgbWFubmVyIGlzIGRlc2lyZWQgKHBlcmhhcHMgbm9uZSkuCisKK1xuZXdpZlxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwCisKK1xkZWZcaXRlbXhwYXJ7XHBhclxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwXG5vYnJlYWtcdnNraXAtXHBhcnNraXBcbm9icmVha1xmaX0KKworXGRlZlxpbnRlcm5hbEJpdGVte1xzbWFsbGJyZWFrIFxwYXJzZWFyZ1xpdGVtenp6fQorXGRlZlxpbnRlcm5hbEJpdGVteHtcaXRlbXhwYXIgXHBhcnNlYXJnXGl0ZW16enp9CisKK1xkZWZcaXRlbXp6eiAjMXtcYmVnaW5ncm91cCAlCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1cdGFibGVpbmRlbnQKKyAgXHNldGJveDA9XGhib3h7XGl0ZW1pbmRpY2F0ZXsjMX19JQorICBcaXRlbWluZGV4eyMxfSUKKyAgXG5vYnJlYWsgJSBUaGlzIHByZXZlbnRzIGEgYnJlYWsgYmVmb3JlIEBpdGVteC4KKyAgJQorICAlIElmIHRoZSBpdGVtIHRleHQgZG9lcyBub3QgZml0IGluIHRoZSBzcGFjZSB3ZSBoYXZlLCBwdXQgaXQgb24gYSBsaW5lCisgICUgYnkgaXRzZWxmLCBhbmQgZG8gbm90IGFsbG93IGEgcGFnZSBicmVhayBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoYXQKKyAgJSBsaW5lLiAgV2UgZG8gbm90IHN0YXJ0IGEgcGFyYWdyYXBoIGhlcmUgYmVjYXVzZSB0aGVuIGlmIHRoZSBuZXh0CisgICUgY29tbWFuZCBpcywgZS5nLiwgQGtpbmRleCwgdGhlIHdoYXRzaXQgd291bGQgZ2V0IHB1dCBpbnRvIHRoZQorICAlIGhvcml6b250YWwgbGlzdCBvbiBhIGxpbmUgYnkgaXRzZWxmLCByZXN1bHRpbmcgaW4gZXh0cmEgYmxhbmsgc3BhY2UuCisgIFxpZmRpbSBcd2QwPlxpdGVtbWF4CisgICAgJQorICAgICUgTWFrZSB0aGlzIGEgcGFyYWdyYXBoIHNvIHdlIGdldCB0aGUgXHBhcnNraXAgZ2x1ZSBhbmQgd3JhcHBpbmcsCisgICAgJSBidXQgbGVhdmUgaXQgcmFnZ2VkLXJpZ2h0LgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieS1cdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXGhzaXplIGJ5XHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkwcHQgcGx1czFmaWwKKyAgICAgIFxsZWF2ZXZtb2RlXHVuaGJveDBccGFyCisgICAgXGVuZGdyb3VwCisgICAgJQorICAgICUgV2UncmUgZ29pbmcgdG8gYmUgc3RhcnRpbmcgYSBwYXJhZ3JhcGgsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZQorICAgICUgXHBhcnNraXAgZ2x1ZSAtLSBsb2dpY2FsbHkgaXQncyBwYXJ0IG9mIHRoZSBAaXRlbSB3ZSBqdXN0IHN0YXJ0ZWQuCisgICAgXG5vYnJlYWsgXHZza2lwLVxwYXJza2lwCisgICAgJQorICAgICUgU3RvcCBhIHBhZ2UgYnJlYWsgYXQgdGhlIFxwYXJza2lwIGdsdWUgY29taW5nIHVwLiAgSG93ZXZlciwgaWYKKyAgICAlIHdoYXQgZm9sbG93cyBpcyBhbiBlbnZpcm9ubWVudCBzdWNoIGFzIEBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIG5vCisgICAgJSBccGFyc2tpcCBnbHVlOyB0aGVuIHRoZSBuZWdhdGl2ZSB2c2tpcCB3ZSBqdXN0IGluc2VydGVkIHdvdWxkCisgICAgJSBjYXVzZSB0aGUgZXhhbXBsZSBhbmQgdGhlIGl0ZW0gdG8gY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcworICAgICUgYml6YXJyZSB2YWx1ZSBvZiAxMDAwMSBhcyBhIHNpZ25hbCB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUgYWZ0ZXIgYWxsLiAgU2VjdGlvbiB0aXRsZXMgYXJlIGhhbmRsZWQgdGhpcyB3YXkgYWxzby4KKyAgICAlCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CitcZGVmXGl0ZW14e1xlcnJtZXNzYWdle0BpdGVteCB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KKworJSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUuCitcZW52ZGVmXHRhYmxleyUKKyAgXGxldFxpdGVtaW5kZXhcZ29iYmxlCisgIFx0YWJsZWNoZWNre3RhYmxlfSUKK30KK1xlbnZkZWZcZnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7Zm59e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7ZnRhYmxlfSUKK30KK1xlbnZkZWZcdnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7dnJ9e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7dnRhYmxlfSUKK30KK1xkZWZcdGFibGVjaGVjayMxeyUKKyAgXGlmbnVtIFx0aGVcY2F0Y29kZWBcXl5NPVxhY3RpdmUKKyAgICBcZW5kZ3JvdXAKKyAgICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgd29uJ3Qgd29yayBpbiB0aGlzIGNvbnRleHQ7IHBlcmhhcHMgdGhlIHByb2JsZW0gaXMKKyAgICAgIHRoYXQgd2UgYXJlIFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorICAgIFxkZWZcbmV4dHtcZG9pZ25vcmV7IzF9fSUKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcdGFibGV4CisgIFxmaQorICBcbmV4dAorfQorXGRlZlx0YWJsZXgjMXslCisgIFxkZWZcaXRlbWluZGljYXRleyMxfSUKKyAgXHBhcnNlYXJnXHRhYmxleQorfQorXGRlZlx0YWJsZXkjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZWRlZlx0ZW1we1xub2V4cGFuZFx0YWJsZXogIzFcc3BhY2Vcc3BhY2Vcc3BhY2V9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAgXGVuZHRhYmxlegorfQorXGRlZlx0YWJsZXogIzEgIzIgIzMgIzRcZW5kdGFibGV6eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGlmbnVtIDAjMT4wIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSAjMVxtaWwgXGZpCisgIFxpZm51bSAwIzI+MCBcdGFibGVpbmRlbnQ9IzJcbWlsIFxmaQorICBcaWZudW0gMCMzPjAgXGFkdmFuY2UgXHJpZ2h0c2tpcCBieSAjM1xtaWwgXGZpCisgIFxpdGVtbWF4PVx0YWJsZWluZGVudAorICBcYWR2YW5jZSBcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFx0YWJsZWluZGVudAorICBcZXhkZW50YW1vdW50PVx0YWJsZWluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW0gXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGxldFxpdGVtID0gXGludGVybmFsQml0ZW0KKyAgXGxldFxpdGVteCA9IFxpbnRlcm5hbEJpdGVteAorfQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha30KK1xsZXRcRWZ0YWJsZVxFdGFibGUKK1xsZXRcRXZ0YWJsZVxFdGFibGUKK1xsZXRcRWl0ZW1pemVcRXRhYmxlCitcbGV0XEVlbnVtZXJhdGVcRXRhYmxlCisKKyUgVGhpcyBpcyB0aGUgY291bnRlciB1c2VkIGJ5IEBlbnVtZXJhdGUsIHdoaWNoIGlzIHJlYWxseSBAaXRlbWl6ZQorCitcbmV3Y291bnQgXGl0ZW1ubworCitcZW52ZGVmXGl0ZW1pemV7XHBhcnNlYXJnXGRvaXRlbWl6ZX0KKworXGRlZlxkb2l0ZW1pemUjMXslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpdGVtbWF4PVxpdGVtaW5kZW50CisgIFxhZHZhbmNlXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxpdGVtaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGl0ZW1pbmRlbnQKKyAgXHBhcmluZGVudD0wcHQKKyAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZS4KKyUKK1xkZWZcaXRlbWl6ZWl0ZW17JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgMSAgJSBmb3IgZW51bWVyYXRpb25zCisgIHtcbGV0XHBhcj1cZW5kZ3JhZiBcc21hbGxicmVha30lIHJlYXNvbmFibGUgcGxhY2UgdG8gYnJlYWsKKyAgeyUKKyAgICUgSWYgdGhlIGRvY3VtZW50IGhhcyBhbiBAaXRlbWl6ZSBkaXJlY3RseSBhZnRlciBhIHNlY3Rpb24gdGl0bGUsIGEKKyAgICUgXG5vYnJlYWsgd2lsbCBiZSBsYXN0IG9uIHRoZSBsaXN0LCBhbmQgXHNlY3Rpb25oZWFkaW5nIHdpbGwgaGF2ZQorICAgJSBkb25lIGEgXHZza2lwLVxwYXJza2lwLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHplcm8KKyAgICUgcGFyc2tpcCwgb3IgdGhlIGl0ZW0gdGV4dCB3aWxsIGNyYXNoIHdpdGggdGhlIGhlYWRpbmcuICBPbiB0aGUKKyAgICUgb3RoZXIgaGFuZCwgd2hlbiB0aGVyZSBpcyBub3JtYWwgdGV4dCBwcmVjZWRpbmcgdGhlIGl0ZW0gKGFzIHRoZXJlCisgICAlIHVzdWFsbHkgaXMpLCB3ZSBkbyB3YW50IHRvIHplcm8gcGFyc2tpcCwgb3IgdGhlcmUgd291bGQgYmUgdG9vIG11Y2gKKyAgICUgc3BhY2UuICBJbiB0aGF0IGNhc2UsIHdlIHdvbid0IGhhdmUgYSBcbm9icmVhayBiZWZvcmUuICBBdCBsZWFzdAorICAgJSB0aGF0J3MgdGhlIHRoZW9yeS4KKyAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGFyc2tpcD0waW4gXGZpCisgICBcbm9pbmRlbnQKKyAgIFxoYm94IHRvIDBwdHtcaHNzIFxpdGVtY29udGVudHMgXGtlcm5caXRlbW1hcmdpbn0lCisgICBcdmFkanVzdHtccGVuYWx0eSAxMjAwfX0lIG5vdCBnb29kIHRvIGJyZWFrIGFmdGVyIGZpcnN0IGxpbmUgb2YgaXRlbS4KKyAgXGZsdXNoY3IKK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGVudnBhcnNlYXJnZGVmXGVudW1lcmF0ZXtcZW51bWVyYXRleSAjMSAgXGVuZGVudW1lcmF0ZXl9CitcZGVmXGVudW1lcmF0ZXkgIzEgIzJcZW5kZW51bWVyYXRleXslCisgICUgSWYgd2Ugd2VyZSBnaXZlbiBubyBhcmd1bWVudCwgcHJldGVuZCB3ZSB3ZXJlIGdpdmVuIGAxJy4KKyAgXGRlZlx0aGVhcmd7IzF9JQorICBcaWZ4XHRoZWFyZ1xlbXB0eSBcZGVmXHRoZWFyZ3sxfVxmaQorICAlCisgICUgRGV0ZWN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSB0b2tlbi4gIElmIHNvLCBpdCBtaWdodCBiZSBhCisgICUgbGV0dGVyLiAgT3RoZXJ3aXNlLCB0aGUgb25seSB2YWxpZCB0aGluZyBpdCBjYW4gYmUgaXMgYSBudW1iZXIuCisgICUgKFdlIHdpbGwgYWx3YXlzIGhhdmUgb25lIHRva2VuLCBiZWNhdXNlIG9mIHRoZSB0ZXN0IHdlIGp1c3QgbWFkZS4KKyAgJSBUaGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgXHNwbGl0b2ZmIGRvZXNuJ3Qgd29yayBnaXZlbiBub3RoaW5nIGF0CisgICUgYWxsIC0tIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5kZWxpbWl0ZWQuKQorICBcZXhwYW5kYWZ0ZXJcc3BsaXRvZmZcdGhlYXJnXGVuZG1hcmsKKyAgXGlmeFxyZXN0XGVtcHR5CisgICAgJSBPbmx5IG9uZSB0b2tlbiBpbiB0aGUgYXJndW1lbnQuICBJdCBjb3VsZCBzdGlsbCBiZSBhbnl0aGluZy4KKyAgICAlIEEgYGBsb3dlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgbm9uemVyby4KKyAgICAlIEFuIGBgdXBwZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIGJvdGggbm9uemVybywgYW5kCisgICAgJSAgIG5vdCBlcXVhbCB0byBpdHNlbGYuCisgICAgJSBPdGhlcndpc2UsIHdlIGFzc3VtZSBpdCdzIGEgbnVtYmVyLgorICAgICUKKyAgICAlIFdlIG5lZWQgdGhlIFxyZWxheCBhdCB0aGUgZW5kIG9mIHRoZSBcaWZudW0gbGluZXMgdG8gc3RvcCBUZVggZnJvbQorICAgICUgY29udGludWluZyB0byBsb29rIGZvciBhIDxudW1iZXI+LgorICAgICUKKyAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9MFxyZWxheAorICAgICAgXG51bWVyaWNlbnVtZXJhdGUgJSBhIG51bWJlciAod2UgaG9wZSkKKyAgICBcZWxzZQorICAgICAgJSBJdCdzIGEgbGV0dGVyLgorICAgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPVxleHBhbmRhZnRlcmBcdGhlYXJnXHJlbGF4CisgICAgICAgIFxsb3dlcmNhc2VlbnVtZXJhdGUgJSBsb3dlcmNhc2UgbGV0dGVyCisgICAgICBcZWxzZQorICAgICAgICBcdXBwZXJjYXNlZW51bWVyYXRlICUgdXBwZXJjYXNlIGxldHRlcgorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBNdWx0aXBsZSB0b2tlbnMgaW4gdGhlIGFyZ3VtZW50LiAgV2UgaG9wZSBpdCdzIGEgbnVtYmVyLgorICAgIFxudW1lcmljZW51bWVyYXRlCisgIFxmaQorfQorCislIEFuIEBlbnVtZXJhdGUgd2hvc2UgbGFiZWxzIGFyZSBpbnRlZ2Vycy4gIFRoZSBzdGFydGluZyBpbnRlZ2VyIGlzCislIGdpdmVuIGluIFx0aGVhcmcuCislCitcZGVmXG51bWVyaWNlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbntcdGhlXGl0ZW1ub30lCit9CisKKyUgVGhlIHN0YXJ0aW5nIChsb3dlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlxsb3dlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSBsb3dlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fSUKKyAgICBcZmkKKyAgICBcY2hhclxsY2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgVGhlIHN0YXJ0aW5nICh1cHBlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlx1cHBlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fQorICAgIFxmaQorICAgIFxjaGFyXHVjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBDYWxsIFxkb2l0ZW1pemUsIGFkZGluZyBhIHBlcmlvZCB0byB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHN1cHBseWluZyB0aGUKKyUgY29tbW9uIGxhc3QgdHdvIGFyZ3VtZW50cy4gIEFsc28gc3VidHJhY3Qgb25lIGZyb20gdGhlIGluaXRpYWwgdmFsdWUgaW4KKyUgXGl0ZW1ubywgc2luY2UgQGl0ZW0gaW5jcmVtZW50cyBcaXRlbW5vLgorJQorXGRlZlxzdGFydGVudW1lcmF0aW9uIzF7JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgLTEKKyAgXGRvaXRlbWl6ZXsjMS59XGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCisKKyUgRWFjaCBuZXcgdGFibGUgbGluZSBzdGFydHMgd2l0aCBAaXRlbSwgZWFjaCBzdWJzZXF1ZW50IG5ldyBjb2x1bW4KKyUgc3RhcnRzIHdpdGggQHRhYi4gRW1wdHkgY29sdW1ucyBtYXkgYmUgcHJvZHVjZWQgYnkgc3VwcGx5aW5nIEB0YWIncworJSB3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGVtIGZvciBhcyBtYW55IHRpbWVzIGFzIGVtcHR5IGNvbHVtbnMgYXJlIG5lZWRlZCwKKyUgaWUsIEB0YWJAdGFiQHRhYiB3aWxsIHByb2R1Y2UgdHdvIGVtcHR5IGNvbHVtbnMuCisKKyUgQGl0ZW0sIEB0YWIgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydAorJSBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIEBjb2x1bW5mcmFjdGlvbiwgdXN1YWxseSBhIGRlY2ltYWwgbnVtYmVyIGxpa2UgLjUsIGJ1dCBtaWdodAorJSBiZSBqdXN0IDEuICBXZSBqdXN0IHVzZSBpdCwgd2hhdGV2ZXIgaXQgaXMuCislCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMSB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7IzFcaHNpemV9JQorICBcc2V0dXB0YWJsZQorfQorCitcbmV3Y291bnRcY29sY291bnQKK1xkZWZcc2V0dXB0YWJsZSMxeyUKKyAgXGRlZlxmaXJzdGFyZ3sjMX0lCisgIFxpZnhcZmlyc3RhcmdceGVuZHNldHVwdGFibGUKKyAgICBcbGV0XGdvID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGlmeFxmaXJzdGFyZ1x4Y29sdW1uZnJhY3Rpb25zCisgICAgICBcZ2xvYmFsXHNldHBlcmNlbnR0cnVlCisgICAgXGVsc2UKKyAgICAgIFxpZnNldHBlcmNlbnQKKyAgICAgICAgIFxsZXRcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgXGVsc2UKKyAgICAgICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgICAgICBcc2V0Ym94MD1caGJveHsjMVx1bnNraXBcc3BhY2V9JSBBZGQgYSBub3JtYWwgd29yZCBzcGFjZSBhcyBhCisgICAgICAgICAgICAgICAgICAgJSBzZXBhcmF0b3I7IHR5cGljYWxseSB0aGF0IGlzIGFsd2F5cyBpbiB0aGUgaW5wdXQsIGFueXdheS4KKyAgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXtcdGhlXHdkMH0lCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcaWZ4XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgICUgUHV0IHRoZSBhcmd1bWVudCBiYWNrIGZvciB0aGUgXHBpY2t1cHdob2xlZnJhY3Rpb24gY2FsbCwgc28KKyAgICAgICUgd2UnbGwgYWx3YXlzIGhhdmUgYSBwZXJpb2QgdGhlcmUgdG8gYmUgcGFyc2VkLgorICAgICAgXGRlZlxnb3tccGlja3Vwd2hvbGVmcmFjdGlvbiMxfSUKKyAgICBcZWxzZQorICAgICAgXGxldFxnbyA9IFxzZXR1cHRhYmxlCisgICAgXGZpJQorICBcZmkKKyAgXGdvCit9CisKKyUgbXVsdGl0YWJsZS1vbmx5IGNvbW1hbmRzLgorJQorJSBAaGVhZGl0ZW0gc3RhcnRzIGEgaGVhZGluZyByb3csIHdoaWNoIHdlIHR5cGVzZXQgaW4gYm9sZC4KKyUgQXNzaWdubWVudHMgaGF2ZSB0byBiZSBnbG9iYWwgc2luY2Ugd2UgYXJlIGluc2lkZSB0aGUgaW1wbGljaXQgZ3JvdXAKKyUgb2YgYW4gYWxpZ25tZW50IGVudHJ5LiAgTm90ZSB0aGF0IFxldmVyeWNyIHJlc2V0cyBcZXZlcnl0YWIuCitcZGVmXGhlYWRpdGVte1xjaGVja2VudlxtdWx0aXRhYmxlIFxjcmNyIFxnbG9iYWxcZXZlcnl0YWI9e1xiZn1cdGhlXGV2ZXJ5dGFifSUKKyUKKyUgQSBcdGFiIHVzZWQgdG8gaW5jbHVkZSBcaHNraXAxc3AuICBCdXQgdGhlbiB0aGUgc3BhY2UgaW4gYSB0ZW1wbGF0ZQorJSBsaW5lIGlzIG5vdCBlbm91Z2guICBUaGF0IGlzIGJhZC4gIFNvIGxldCdzIGdvIGJhY2sgdG8ganVzdCBgJicgdW50aWwKKyUgd2UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhZ2Fpbi4KKyUJCQkJCS0ta2FybCwgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCitcZGVmXHRhYntcY2hlY2tlbnZcbXVsdGl0YWJsZSAmXHRoZVxldmVyeXRhYn0lCisKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSBkZWZpbml0aW9uczoKKyUKK1xuZXd0b2tzXGV2ZXJ5dGFiICAlIGluc2VydCBhZnRlciBldmVyeSB0YWIuCislCitcZW52ZGVmXG11bHRpdGFibGV7JQorICBcdnNraXBccGFyc2tpcAorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBAaXRlbSB3aXRoaW4gYSBtdWx0aXRhYmxlIHN0YXJ0cyBhIG5vcm1hbCByb3cuCisgICUgV2UgdXNlIFxkZWYgaW5zdGVhZCBvZiBcbGV0IHNvIHRoYXQgaWYgb25lIG9mIHRoZSBtdWx0aXRhYmxlIGVudHJpZXMKKyAgJSBjb250YWlucyBhbiBAaXRlbWl6ZSwgd2UgZG9uJ3QgY2hva2Ugb24gdGhlIFxpdGVtIChzZWVuIGFzIFxjcmNyIGFrYQorICAlIFxlbmR0ZW1wbGF0ZSkgZXhwYW5kaW5nIFxkb2l0ZW1pemUuCisgIFxkZWZcaXRlbXtcY3Jjcn0lCisgICUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgJQorICBcZXZlcnljciA9IHslCisgICAgXG5vYWxpZ257JQorICAgICAgXGdsb2JhbFxldmVyeXRhYj17fSUKKyAgICAgIFxnbG9iYWxcY29sY291bnQ9MCAlIFJlc2V0IHRoZSBjb2x1bW4gY291bnRlci4KKyAgICAgICUgQ2hlY2sgZm9yIHNhdmVkIGZvb3Rub3RlcywgZXRjLgorICAgICAgXGNoZWNraW5zZXJ0cworICAgICAgJSBLZWVwcyB1bmRlcmZ1bGwgYm94IG1lc3NhZ2VzIG9mZiB3aGVuIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLgorICAgICAgJVxmaWxicmVhaworCSUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlCisJJSB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4gV291bGRuJ3QgXHZmaWwgYmUgYmV0dGVyPyAgV2FpdCB1bnRpbCB0aGUKKwklIHByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZiwgc28gaXQgY2FuIGJlIGZpeGVkIGZvciByZWFsIC0ta2FybC4KKyAgICB9JQorICB9JQorICAlCisgIFxwYXJzZWFyZ1xkb211bHRpdGFibGUKK30KK1xkZWZcZG9tdWx0aXRhYmxlIzF7JQorICAlIFRvIHBhcnNlIGV2ZXJ5dGhpbmcgYmV0d2VlbiBAbXVsdGl0YWJsZSBhbmQgQGl0ZW06CisgIFxzZXR1cHRhYmxlIzEgXGVuZHNldHVwdGFibGUKKyAgJQorICAlIFRoaXMgcHJlYW1ibGUgc2V0cyB1cCBhIGdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24sIHdoaWNoIHdpbGwKKyAgJSBiZSB1c2VkIGFzIG1hbnkgdGltZXMgYXMgdXNlciBjYWxscyBmb3IgY29sdW1ucy4KKyAgJSBcdnRvcCB3aWxsIHNldCBhIHNpbmdsZSBsaW5lIGFuZCB3aWxsIGFsc28gbGV0IHRleHQgd3JhcCBhbmQKKyAgJSBjb250aW51ZSBmb3IgbWFueSBwYXJhZ3JhcGhzIGlmIGRlc2lyZWQuCisgIFxoYWxpZ25cYmdyb3VwICYlCisgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICBcbXVsdGlzdHJ1dAorICAgIFx2dG9weyUKKyAgICAgICUgVXNlIHRoZSBjdXJyZW50IFxjb2xjb3VudCB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbHVtbiB3aWR0aDoKKyAgICAgIFxoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICAgICAlCisgICAgICAlIEluIG9yZGVyIHRvIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyCisgICAgICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgICAgICUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICUKKyAgICAgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICAlIHRvIHRoZSB3aWR0aCBvZiBlYWNoIHRlbXBsYXRlIGVudHJ5LgorICAgICAgJQorICAgICAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgICAgICUgdXNlIHRoYXQgZGltZW5zaW9uIGFzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLCBhbmQgdGhlIFxsZWZ0c2tpcAorICAgICAgJSB3aWxsIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyLiAgVGFibGUgd2lsbCBzdGFydCBhdAorICAgICAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICAgICAlCisgICAgICAlIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSB0aGUgb3V0ZXIgZW52aXJvbm1lbnQuCisgICAgICBccmlnaHRza2lwPTBwdAorICAgICAgXGlmbnVtXGNvbGNvdW50PTEKKwklIFRoZSBmaXJzdCBjb2x1bW4gd2lsbCBiZSBpbmRlbnRlZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorCVxhZHZhbmNlXGhzaXplIGJ5XGxlZnRza2lwCisgICAgICBcZWxzZQorCVxpZnNldHBlcmNlbnQgXGVsc2UKKwkgICUgSWYgdXNlciBoYXMgbm90IHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZQorCSAgJSB3ZSB3aWxsIGFkdmFuY2UgXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UuCisJICBcYWR2YW5jZVxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlCisJXGZpCisgICAgICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgICAgICBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgXGZpCisgICAgICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAgICAgJSBibGFuayBsaW5lLCB3aGVuIFRlWCBkZWNpZGVzIHRvIGJyZWFrIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBiZWZvcmUgdGhlCisgICAgICAlIGJveCBmcm9tIHRoZSBtdWx0aXN0cnV0LCBzbyB0aGUgc3RydXQgZW5kcyB1cCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgJSBGb3IgZXhhbXBsZToKKyAgICAgICUgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTEgLjg5CisgICAgICAlIEBpdGVtIEBjb2RleyN9CisgICAgICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgICAgICUgSXMgYXV0b21hdGljYWxseSBwcm92aWRlZCB3aXRoIGhpZ2hsaWdodGluZyBzZXF1ZW5jZXMgcmVzcGVjdGl2ZWx5CisgICAgICAlIG1hcmtpbmcgY2hhcmFjdGVycy4KKyAgICAgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dAorICAgIH1cY3IKK30KK1xkZWZcRW11bHRpdGFibGV7JQorICBcY3JjcgorICBcZWdyb3VwICUgZW5kIHRoZSBcaGFsaWduCisgIFxnbG9iYWxcc2V0cGVyY2VudGZhbHNlCit9CisKK1xkZWZcc2V0bXVsdGl0YWJsZXNwYWNpbmd7JQorICBcZGVmXG11bHRpc3RydXR7XHN0cnV0fSUganVzdCB1c2UgdGhlIHN0YW5kYXJkIGxpbmUgc3BhY2luZworICAlCisgICUgQ29tcHV0ZSBcbXVsdGl0YWJsZWxpbmVzcGFjZSAoaWYgbm90IGRlZmluZWQgYnkgdXNlcikgZm9yIHVzZSBpbgorICAlIFxtdWx0aXRhYmxlcGFyc2tpcCBjYWxjdWxhdGlvbi4gIFdlIHVzZWQgZGVmaW5lIFxtdWx0aXN0cnV0IGJhc2VkIG9uCisgICUgdGhpcywgYnV0IChpcm9uaWNhbGx5KSB0aGF0IGNhdXNlZCB0aGUgc3BhY2luZyB0byBiZSBvZmYuCisgICUgU2VlIGJ1Zy10ZXhpbmZvIHJlcG9ydCBmcm9tIFdlcm5lciBMZW1iZXJnLCAzMSBPY3QgMjAwNCAxMjo1MjoyMCArMDEwMC4KK1xpZmRpbVxtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorXHNldGJveDA9XHZib3h7WH1cZ2xvYmFsXG11bHRpdGFibGVsaW5lc3BhY2U9XHRoZVxiYXNlbGluZXNraXAKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlbGluZXNwYWNlIGJ5LVxodDAKK1xmaQorJSUgVGVzdCB0byBzZWUgaWYgcGFyc2tpcCBpcyBsYXJnZXIgdGhhbiBzcGFjZSBiZXR3ZWVuIGxpbmVzIG9mCislJSB0YWJsZS4gSWYgbm90LCBkbyBub3RoaW5nLgorJSUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZmklCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaX0KKworCitcbWVzc2FnZXtjb25kaXRpb25hbHMsfQorCislIEBpZnRleCwgQGlmbm90ZG9jYm9vaywgQGlmbm90aHRtbCwgQGlmbm90aW5mbywgQGlmbm90cGxhaW50ZXh0LAorJSBAaWZub3R4bWwgYWx3YXlzIHN1Y2NlZWQuICBUaGV5IGN1cnJlbnRseSBkbyBub3RoaW5nOyB3ZSBkb24ndAorJSBhdHRlbXB0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFscyBhcmUgcHJvcGVybHkgbmVzdGVkLiAgQnV0IHdlCislIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB0aGV5IGFyZSBjb25kaXRpb25hbHMsIHNvIHRoYXQgQGVuZCBkb2Vzbid0CislIGF0dGVtcHQgdG8gY2xvc2UgYW4gZW52aXJvbm1lbnQgZ3JvdXAuCislCitcZGVmXG1ha2Vjb25kIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSAjMVxlbmRjc25hbWUgPSBccmVsYXgKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZSA9IDEKK30KK1xtYWtlY29uZHtpZnRleH0KK1xtYWtlY29uZHtpZm5vdGRvY2Jvb2t9CitcbWFrZWNvbmR7aWZub3RodG1sfQorXG1ha2Vjb25ke2lmbm90aW5mb30KK1xtYWtlY29uZHtpZm5vdHBsYWludGV4dH0KK1xtYWtlY29uZHtpZm5vdHhtbH0KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcZG9jYm9va3tcZG9pZ25vcmV7ZG9jYm9va319CitcZGVmXGh0bWx7XGRvaWdub3Jle2h0bWx9fQorXGRlZlxpZmRvY2Jvb2t7XGRvaWdub3Jle2lmZG9jYm9va319CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgU2NhbiBpbiBgYHZlcmJhdGltJycgbW9kZToKKyAgXG9iZXlsaW5lcworICBcY2F0Y29kZWBcQCA9IFxvdGhlcgorICBcY2F0Y29kZWBceyA9IFxvdGhlcgorICBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICAlCisgICUgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIHR1cm4gaW50byB0b2tlbnMgdGhhdCBtYXRjaCB3aGF0IFxkb2lnbm9yZXRleHQgd2FudHMuCisgIFxzcGFjZWlzc3BhY2UKKyAgJQorICAlIENvdW50IG51bWJlciBvZiAjMSdzIHRoYXQgd2UndmUgc2Vlbi4KKyAgXGRvaWdub3JlY291bnQgPSAwCisgICUKKyAgJSBTd2FsbG93IHRleHQgdW50aWwgd2UgcmVhY2ggdGhlIG1hdGNoaW5nIGBAZW5kICMxJy4KKyAgXGRvZG9pZ25vcmV7IzF9JQorfQorCit7IFxjYXRjb2RlYF89MTEgJSBXZSB3YW50IHRvIHVzZSBcX1NUT1BfIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gdGV4aW5mbyBzb3VyY2UuCisgIFxvYmV5bGluZXMgJQorICAlCisgIFxnZGVmXGRvZG9pZ25vcmUjMXslCisgICAgJSAjMSBjb250YWlucyB0aGUgY29tbWFuZCBuYW1lIGFzIGEgc3RyaW5nLCBlLmcuLCBgaWZpbmZvJy4KKyAgICAlCisgICAgJSBEZWZpbmUgYSBjb21tYW5kIHRvIGZpbmQgdGhlIG5leHQgYEBlbmQgIzEnLgorICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHQjIzFeXk1AZW5kICMxeyUKKyAgICAgIFxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzFcX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxIyMyXF9TVE9QX3tcZG9pZ25vcmV5eXl7IyMyfVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCBub3cgZXhwYW5kIHRoYXQgY29tbWFuZC4KKyAgICBcZG9pZ25vcmV0ZXh0IF5eTSUKKyAgfSUKK30KKworXGRlZlxkb2lnbm9yZXl5eSMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CQkJJSBOb3RoaW5nIGZvdW5kLgorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR6enoKKyAgXGVsc2UJCQkJCSUgRm91bmQgYSBuZXN0ZWQgY29uZGl0aW9uLCAuLi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IDEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0eXl5CQklIC4uLiwgbG9vayBmb3IgYW5vdGhlci4KKyAgICAlIElmIHdlJ3JlIGhlcmUsICMxIGVuZHMgd2l0aCBeXk1caWZpbmZvIChmb3IgZXhhbXBsZSkuCisgIFxmaQorICBcbmV4dCAjMSUgdGhlIHRva2VuIFxfU1RPUF8gaXMgcHJlc2VudCBqdXN0IGFmdGVyIHRoaXMgbWFjcm8uCit9CisKKyUgV2UgaGF2ZSB0byBzd2FsbG93IHRoZSByZW1haW5pbmcgIlxfU1RPUF8iLgorJQorXGRlZlxkb2lnbm9yZXRleHR6enojMXslCisgIFxpZm51bVxkb2lnbm9yZWNvdW50ID0gMAklIFdlIGhhdmUganVzdCBmb3VuZCB0aGUgb3V0ZXJtb3N0IEBlbmQuCisgICAgXGxldFxuZXh0XGVuZGRvaWdub3JlCisgIFxlbHNlCQkJCSUgU3RpbGwgaW5zaWRlIGEgbmVzdGVkIGNvbmRpdGlvbi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IC0xCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dCAgICAgICUgTG9vayBmb3IgdGhlIG5leHQgQGVuZC4KKyAgXGZpCisgIFxuZXh0Cit9CisKKyUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCit7IFxvYmV5bGluZXMlCisgICUgSWdub3JlIGFueXRoaW5nIGFmdGVyIHRoZSBsYXN0IGBAZW5kICMxJzsgdGhpcyBtYXR0ZXJzIGluIHZlcmJhdGltCisgICUgZW52aXJvbm1lbnRzLCB3aGVyZSBvdGhlcndpc2UgdGhlIG5ld2xpbmUgYWZ0ZXIgYW4gaWdub3JlZCBjb25kaXRpb25hbAorICAlIHdvdWxkIHJlc3VsdCBpbiBhIGJsYW5rIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZW5kZG9pZ25vcmUjMV5eTXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfSUKK30KKworCislIEBzZXQgVkFSIHNldHMgdGhlIHZhcmlhYmxlIFZBUiB0byBhbiBlbXB0eSB2YWx1ZS4KKyUgQHNldCBWQVIgUkVTVC1PRi1MSU5FIHNldHMgVkFSIHRvIHRoZSB2YWx1ZSBSRVNULU9GLUxJTkUuCislCislIFNpbmNlIHdlIHdhbnQgdG8gc2VwYXJhdGUgVkFSIGZyb20gUkVTVC1PRi1MSU5FICh3aGljaCBtaWdodCBiZQorJSBlbXB0eSksIHdlIGNhbid0IGp1c3QgdXNlIFxwYXJzZWFyZzsgd2UgaGF2ZSB0byBpbnNlcnQgYSBzcGFjZSBvZiBvdXIKKyUgb3duIHRvIGRlbGltaXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCB0aGVuIHRha2UgaXQgb3V0IGFnYWluIGlmIHdlCislIGRpZG4ndCBuZWVkIGl0LgorJSBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgXHBhcnNlYXJnIHNldHMgXGNhdGNvZGVgXCA9MTAuCislCitccGFyc2VhcmdkZWZcc2V0e1xzZXR5eXkjMSBcZW5kc2V0eXl5fQorXGRlZlxzZXR5eXkjMSAjMlxlbmRzZXR5eXl7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1weyMyfSUKKyAgICBcZWRlZlxuZXh0e1xnZGVmXG1ha2Vjc25hbWV7U0VUIzF9fSUKKyAgICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAgIFxuZXh0e30lCisgICAgXGVsc2UKKyAgICAgIFxzZXR6enojMlxlbmRzZXR6enoKKyAgICBcZmkKKyAgfSUKK30KKyUgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSBcc2V0eHh4IGluc2VydGVkLgorXGRlZlxzZXR6enojMSBcZW5kc2V0enp6e1xuZXh0eyMxfX0KKworJSBAY2xlYXIgVkFSIGNsZWFycyAoaS5lLiwgdW5zZXRzKSB0aGUgdmFyaWFibGUgVkFSLgorJQorXHBhcnNlYXJnZGVmXGNsZWFyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVQjMVxlbmRjc25hbWU9XHJlbGF4CisgIH0lCit9CisKKyUgQHZhbHVle2Zvb30gZ2V0cyB0aGUgdGV4dCBzYXZlZCBpbiB2YXJpYWJsZSBmb28uCitcZGVmXHZhbHVle1xiZWdpbmdyb3VwXG1ha2V2YWx1ZWV4cGFuZGFibGVcdmFsdWV4eHh9CitcZGVmXHZhbHVleHh4IzF7XGV4cGFuZGFibGV2YWx1ZXsjMX1cZW5kZ3JvdXB9Cit7CisgIFxjYXRjb2RlYFwtID0gXGFjdGl2ZSBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgJQorICBcZ2RlZlxtYWtldmFsdWVleHBhbmRhYmxleyUKKyAgICBcbGV0XHZhbHVlID0gXGV4cGFuZGFibGV2YWx1ZQorICAgICUgV2UgZG9uJ3Qgd2FudCB0aGVzZSBjaGFyYWN0ZXJzIGFjdGl2ZSwgLi4uCisgICAgXGNhdGNvZGVgXC09XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcgorICAgICUgLi4uLCBidXQgd2UgbWlnaHQgZW5kIHVwIHdpdGggYWN0aXZlIG9uZXMgaW4gdGhlIGFyZ3VtZW50IGlmCisgICAgJSB3ZSdyZSBjYWxsZWQgZnJvbSBAY29kZSwgYXMgQGNvZGV7QHZhbHVle2Zvby1iYXJffX0sIHRob3VnaC4KKyAgICAlIFNvIFxsZXQgdGhlbSB0byB0aGVpciBub3JtYWwgZXF1aXZhbGVudHMuCisgICAgXGxldC1ccmVhbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQorICB9Cit9CisKKyUgV2UgaGF2ZSB0aGlzIHN1YnJvdXRpbmUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHNvbWUgQHZhbHVlJ3MKKyUgcHJvcGVybHkgaW4gaW5kZXhlcyAod2UgY2FsbCBcbWFrZXZhbHVlZXhwYW5kYWJsZSBpbiBcaW5kZXhkdW1taWVzKS4KKyUgVGhlIGNvbW1hbmQgaGFzIHRvIGJlIGZ1bGx5IGV4cGFuZGFibGUgKGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQpLCBzaW5jZQorJSB0aGUgcmVzdWx0IHdpbmRzIHVwIGluIHRoZSBpbmRleCBmaWxlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZQorJSB2YXJpYWJsZSdzIHZhbHVlIGNvbnRhaW5zIG90aGVyIFRleGluZm8gY29tbWFuZHMsIGl0J3MgYWxtb3N0IGNlcnRhaW4KKyUgaXQgd2lsbCBmYWlsIChhbHRob3VnaCBwZXJoYXBzIHdlIGNvdWxkIGZpeCB0aGF0IHdpdGggc3VmZmljaWVudCB3b3JrCislIHRvIGRvIGEgb25lLWxldmVsIGV4cGFuc2lvbiBvbiB0aGUgcmVzdWx0LCBpbnN0ZWFkIG9mIGNvbXBsZXRlKS4KKyUKK1xkZWZcZXhwYW5kYWJsZXZhbHVlIzF7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMVxlbmRjc25hbWVccmVsYXgKKyAgICB7W05vIHZhbHVlIGZvciBgYCMxJyddfSUKKyAgICBcbWVzc2FnZXtWYXJpYWJsZSBgIzEnLCB1c2VkIGluIEB2YWx1ZSwgaXMgbm90IHNldC59JQorICBcZWxzZQorICAgIFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lCisgIFxmaQorfQorCislIEBpZnNldCBWQVIgLi4uIEBlbmQgaWZzZXQgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIGJlZW4gZGVmaW5lZAorJSB3aXRoIEBzZXQuCislCislIFRvIGdldCBzcGVjaWFsIHRyZWF0bWVudCBvZiBgQGVuZCBpZnNldCwnIGNhbGwgXG1ha2VvbmQgYW5kIHRoZSByZWRlZmluZS4KKyUKK1xtYWtlY29uZHtpZnNldH0KK1xkZWZcaWZzZXR7XHBhcnNlYXJne1xkb2lmc2V0e1xsZXRcbmV4dD1caWZzZXRmYWlsfX19CitcZGVmXGRvaWZzZXQjMSMyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxsZXRcbmV4dD1cZW1wdHkKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMlxlbmRjc25hbWVccmVsYXgKKyAgICAgICMxJSBJZiBub3Qgc2V0LCByZWRlZmluZSBcbmV4dC4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQorCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIGRlZmluZWQgd2l0aCBAc2V0LCBvciBoYXMgYmVlbiB1bmRlZmluZWQgd2l0aCBAY2xlYXIuCislCislIFRoZSBgXGVsc2UnIGluc2lkZSB0aGUgYFxkb2lmc2V0JyBwYXJhbWV0ZXIgaXMgYSB0cmljayB0byByZXVzZSB0aGUKKyUgYWJvdmUgY29kZTogaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGRvIG5vdGhpbmcsIGlmIGl0IGlzIHNldCwKKyUgdGhlbiByZWRlZmluZSBcbmV4dCB0byBcaWZjbGVhcmZhaWwuCislCitcbWFrZWNvbmR7aWZjbGVhcn0KK1xkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQorXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CisKKyUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCislIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgorXGxldFxkaXJjYXRlZ29yeT1cY29tbWVudAorCislIEBkZWZpbmluZm9lbmNsb3NlLgorXGxldFxkZWZpbmZvZW5jbG9zZT1cY29tbWVudAorCisKK1xtZXNzYWdle2luZGV4aW5nLH0KKyUgSW5kZXggZ2VuZXJhdGlvbiBmYWNpbGl0aWVzCisKKyUgRGVmaW5lIFxuZXd3cml0ZSB0byBiZSBpZGVudGljYWwgdG8gcGxhaW4gdGV4J3MgXG5ld3dyaXRlCislIGV4Y2VwdCBub3QgXG91dGVyLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gbWFjcm9zIGFuZCBcaWYncy4KK1xlZGVmXG5ld3dyaXRle1xtYWtlY3NuYW1le3B0ZXhuZXd3cml0ZX19CisKKyUgXG5ld2luZGV4IHtmb299IGRlZmluZXMgYW4gaW5kZXggbmFtZWQgZm9vLgorJSBJdCBhdXRvbWF0aWNhbGx5IGRlZmluZXMgXGZvb2luZGV4IHN1Y2ggdGhhdAorJSBcZm9vaW5kZXggLi4ucmVzdCBvZiBsaW5lLi4uIHB1dHMgYW4gZW50cnkgaW4gdGhlIGluZGV4IGZvby4KKyUgSXQgYWxzbyBkZWZpbmVzIFxmb29pbmRmaWxlIHRvIGJlIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCBjaGFubmVsIGZvcgorJSB0aGUgZmlsZSB0aGF0IGFjY3VtdWxhdGVzIHRoaXMgaW5kZXguICBUaGUgZmlsZSdzIGV4dGVuc2lvbiBpcyBmb28uCislIFRoZSBuYW1lIG9mIGFuIGluZGV4IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMiBjaGFyYWN0ZXJzIGxvbmcKKyUgZm9yIHRoZSBzYWtlIG9mIHZtcy4KKyUKK1xkZWZcbmV3aW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEgJSBPcGVuIHRoZSBmaWxlCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslICAgICAlIERlZmluZSBAIzFpbmRleAorICAgIFxub2V4cGFuZFxkb2luZGV4eyMxfX0KK30KKworJSBAZGVmaW5kZXggZm9vICA9PSAgXG5ld2luZGV4e2Zvb30KKyUKK1xkZWZcZGVmaW5kZXh7XHBhcnNlYXJnXG5ld2luZGV4fQorCislIERlZmluZSBAZGVmY29kZWluZGV4LCBsaWtlIEBkZWZpbmRleCBleGNlcHQgcHV0IGFsbCBlbnRyaWVzIGluIEBjb2RlLgorJQorXGRlZlxkZWZjb2RlaW5kZXh7XHBhcnNlYXJnXG5ld2NvZGVpbmRleH0KKyUKK1xkZWZcbmV3Y29kZWluZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslCisgICAgXG5vZXhwYW5kXGRvY29kZWluZGV4eyMxfX0lCit9CisKKworJSBAc3luaW5kZXggZm9vIGJhciAgICBtYWtlcyBpbmRleCBmb28gZmVlZCBpbnRvIGluZGV4IGJhci4KKyUgRG8gdGhpcyBpbnN0ZWFkIG9mIEBkZWZpbmRleCBmb28gaWYgeW91IGRvbid0IHdhbnQgaXQgYXMgYSBzZXBhcmF0ZSBpbmRleC4KKyUKKyUgQHN5bmNvZGVpbmRleCBmb28gYmFyICAgc2ltaWxhciwgYnV0IHB1dCBhbGwgZW50cmllcyBtYWRlIGZvciBpbmRleCBmb28KKyUgaW5zaWRlIEBjb2RlLgorJQorXGRlZlxzeW5pbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2luZGV4eyMxfXsjMn19CitcZGVmXHN5bmNvZGVpbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2NvZGVpbmRleHsjMX17IzJ9fQorCislICMxIGlzIFxkb2luZGV4IG9yIFxkb2NvZGVpbmRleCwgIzIgdGhlIGluZGV4IGdldHRpbmcgcmVkZWZpbmVkIChmb28pLAorJSAjMyB0aGUgdGFyZ2V0IGluZGV4IChiYXIpLgorXGRlZlxkb3N5bmluZGV4IzEjMiMzeyUKKyAgJSBPbmx5IGRvIFxjbG9zZW91dCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBpdCwgZWxzZSB3ZSdsbCBlbmQgdXAKKyAgJSBjbG9zaW5nIHRoZSB0YXJnZXQgaW5kZXguCisgIFxleHBhbmRhZnRlciBcaWZ4XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgXHVuZGVmaW5lZAorICAgICUgVGhlIFxjbG9zZW91dCBoZWxwcyByZWR1Y2UgdW5uZWNlc3Nhcnkgb3BlbiBmaWxlczsgdGhlIGxpbWl0IG9uIHRoZQorICAgICUgQWNvcm4gUklTQyBPUyBpcyBhIG1lcmUgMTYgZmlsZXMuCisgICAgXGV4cGFuZGFmdGVyXGNsb3Nlb3V0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZVxkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCisgIFxmaQorICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lPVx0ZW1wCisgICUgcmVkZWZpbmUgXGZvb2luZGV4OgorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMmluZGV4XGVuZGNzbmFtZXtcbm9leHBhbmQjMXsjM319JQorfQorCislIERlZmluZSBcZG9pbmRleCwgdGhlIGRyaXZlciBmb3IgYWxsIFxmb29pbmRleCBtYWNyb3MuCislIEFyZ3VtZW50ICMxIGlzIGdlbmVyYXRlZCBieSB0aGUgY2FsbGluZyBcZm9vaW5kZXggbWFjcm8sCislICBhbmQgaXQgaXMgImZvbyIsIHRoZSBuYW1lIG9mIHRoZSBpbmRleC4KKworJSBcZG9pbmRleCBqdXN0IHVzZXMgXHBhcnNlYXJnOyBpdCBjYWxscyBcZG9pbmQgZm9yIHRoZSBhY3R1YWwgd29yay4KKyUgVGhpcyBpcyBiZWNhdXNlIFxkb2luZCBpcyBtb3JlIHVzZWZ1bCB0byBjYWxsIGZyb20gb3RoZXIgbWFjcm9zLgorCislIFRoZXJlIGlzIGFsc28gXGRvc3ViaW5kIHtpbmRleH17dG9waWN9e3N1YnRvcGljfQorJSB3aGljaCBtYWtlcyBhbiBlbnRyeSBpbiBhIHR3by1sZXZlbCBpbmRleCBzdWNoIGFzIHRoZSBvcGVyYXRpb24gaW5kZXguCisKK1xkZWZcZG9pbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlaW5kZXhlcn0KK1xkZWZcc2luZ2xlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17IzF9fQorCislIGxpa2UgdGhlIHByZXZpb3VzIHR3bywgYnV0IHRoZXkgcHV0IEBjb2RlIGFyb3VuZCB0aGUgYXJndW1lbnQuCitcZGVmXGRvY29kZWluZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVjb2RlaW5kZXhlcn0KK1xkZWZcc2luZ2xlY29kZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9e1xjb2RleyMxfX19CisKKyUgVGFrZSBjYXJlIG9mIFRleGluZm8gY29tbWFuZHMgdGhhdCBjYW4gYXBwZWFyIGluIGFuIGluZGV4IGVudHJ5LgorJSBTaW5jZSB0aGVyZSBhcmUgc29tZSBjb21tYW5kcyB3ZSB3YW50IHRvIGV4cGFuZCwgYW5kIG90aGVycyB3ZSBkb24ndCwKKyUgd2UgaGF2ZSB0byBsYWJvcmlvdXNseSBwcmV2ZW50IGV4cGFuc2lvbiBmb3IgdGhvc2UgdGhhdCB3ZSBkb24ndC4KKyUKK1xkZWZcaW5kZXhkdW1taWVzeyUKKyAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCisgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCisgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQorICAlCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgdGhpcywgYnV0IHdoZW4gYW4gaW5kZXggZW50cnkgaXMKKyAgJSBnZW5lcmF0ZWQgZnJvbSBhIG1hY3JvIGNhbGwsIHRoZSBcZW5kaW5wdXQgd2hpY2ggXHNjYW5tYWNybyBpbnNlcnRzCisgICUgY2F1c2VzIHByb2Nlc3NpbmcgdG8gYmUgcHJlbWF0dXJlbHkgdGVybWluYXRlZC4gIFRoaXMgaXMsCisgICUgYXBwYXJlbnRseSwgYmVjYXVzZSBcaW5kZXhzb3J0dG1wIGlzIGZ1bGx5IGV4cGFuZGVkLCBhbmQgXGVuZGlucHV0CisgICUgaXMgYW4gZXhwYW5kYWJsZSBjb21tYW5kLiAgVGhlIHJlZGVmaW5pdGlvbiBiZWxvdyBtYWtlcyBcZW5kaW5wdXQKKyAgJSBkaXNhcHBlYXIgYWx0b2dldGhlciBmb3IgdGhhdCBwdXJwb3NlIC0tIGFsdGhvdWdoIGxvZ2dpbmcgc2hvd3MgdGhhdAorICAlIHByb2Nlc3NpbmcgY29udGludWVzIHRvIHNvbWUgZnVydGhlciBwb2ludC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdAorICAlIHNlZW1zIFxlbmRpbnB1dCBkb2VzIG5vdCBodXJ0IGluIHRoZSBwcmludGVkIGluZGV4IGFyZywgc2luY2UgdGhhdAorICAlIGlzIHN0aWxsIGdldHRpbmcgd3JpdHRlbiB3aXRob3V0IGFwcGFyZW50IGhhcm0uCisgICUKKyAgJSBTYW1wbGUgc291cmNlIChtYWMtaWR4My50ZXgsIHJlcG9ydGVkIGJ5IEdyYWhhbSBQZXJjaXZhbCB0bworICAlIGhlbHAtdGV4aW5mbywgMjJtYXkwNik6CisgICUgQG1hY3JvIGZ1bmluZGV4IHtXT1JEfQorICAlIEBmaW5kZXggeHl6CisgICUgQGVuZCBtYWNybworICAlIC4uLgorICAlIEBmdW5pbmRleCBjb21tdGVzdAorICAlCisgICUgVGhlIGFib3ZlIGlzIG5vdCBlbm91Z2ggdG8gcmVwcm9kdWNlIHRoZSBidWcsIGJ1dCBpdCBnaXZlcyB0aGUgZmxhdm9yLgorICAlCisgICUgU2FtcGxlIHdoYXRzaXQgcmVzdWx0aW5nOgorICAlIC5Ad3JpdGUze1xlbnRyeXt4eXp9e0Bmb2xpbyB9e0Bjb2RlIHt4eXpAZW5kaW5wdXQgfX19CisgICUKKyAgJSBTbzoKKyAgXGxldFxlbmRpbnB1dCA9IFxlbXB0eQorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCit9CisKKyUgRm9yIHRoZSBhdXggYW5kIHRvYyBmaWxlcywgQCBpcyB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gIFNvIHdlIHdhbnQgdG8KKyUgcmVkZWZpbmUgZXZlcnl0aGluZyB1c2luZyBAIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChpbnN0ZWFkIG9mCislIFxyZWFsYmFja3NsYXNoLCBzdGlsbCB1c2VkIGZvciBpbmRleCBmaWxlcykuICBXaGVuIGV2ZXJ5dGhpbmcgdXNlcyBALAorJSB0aGlzIHdpbGwgYmUgc2ltcGxlci4KKyUKK1xkZWZcYXRkdW1taWVzeyUKKyAgXGRlZlxAe0BAfSUKKyAgXGRlZlwge0AgfSUKKyAgXGxldFx7ID0gXGxicmFjZWF0Y21kCisgIFxsZXRcfSA9IFxyYnJhY2VhdGNtZAorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCislIENhbGxlZCBmcm9tIFxpbmRleGR1bW1pZXMgYW5kIFxhdGR1bW1pZXMuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgICUgXGRlZmluZWR1bW15d29yZCBkZWZpbmVzIFwjMSBhcyBcc3RyaW5nXCMxXHNwYWNlLCB0aHVzIGVmZmVjdGl2ZWx5CisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wlIHdvcmRzLAorICAlIG5vdCBjb250cm9sIGxldHRlcnMsIGJlY2F1c2UgdGhlIFxzcGFjZSB3b3VsZCBiZSBpbmNvcnJlY3QgZm9yCisgICUgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZSBjb250cm9sIHdvcmQKKyAgJSBmcm9tIHdoYXRldmVyIGZvbGxvd3MuCisgICUKKyAgJSBGb3IgY29udHJvbCBsZXR0ZXJzLCB3ZSBoYXZlIFxkZWZpbmVkdW1teWxldHRlciwgd2hpY2ggb21pdHMgdGhlCisgICUgc3BhY2UuCisgICUKKyAgJSBUaGVzZSBjYW4gYmUgdXNlZCBib3RoIGZvciBjb250cm9sIHdvcmRzIHRoYXQgdGFrZSBhbiBhcmd1bWVudCBhbmQKKyAgJSB0aG9zZSB0aGF0IGRvIG5vdC4gIElmIGl0IGlzIGZvbGxvd2VkIGJ5IHthcmd9IGluIHRoZSBpbnB1dCwgdGhlbgorICAlIHRoYXQgd2lsbCBkdXRpZnVsbHkgZ2V0IHdyaXR0ZW4gdG8gdGhlIGluZGV4IChvciB3aGVyZXZlcikuCisgICUKKyAgXGRlZlxkZWZpbmVkdW1teXdvcmQgICMjMXtcZGVmIyMxe1xzdHJpbmcjIzFcc3BhY2V9fSUKKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcZGVmIyMxe1xzdHJpbmcjIzF9fSUKKyAgXGxldFxkZWZpbmVkdW1teWFjY2VudFxkZWZpbmVkdW1teWxldHRlcgorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgIFxkZWZpbmVkdW1teWxldHRlclxfJQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxBQQorICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcTAorICBcZGVmaW5lZHVtbXl3b3JkXE9FCisgIFxkZWZpbmVkdW1teXdvcmRcTworICBcZGVmaW5lZHVtbXl3b3JkXGFhCisgIFxkZWZpbmVkdW1teXdvcmRcYWUKKyAgXGRlZmluZWR1bW15d29yZFxsCisgIFxkZWZpbmVkdW1teXdvcmRcb2UKKyAgXGRlZmluZWR1bW15d29yZFxvCisgIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFxleGNsYW1kb3duCisgIFxkZWZpbmVkdW1teXdvcmRccXVlc3Rpb25kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcb3JkZgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZG0KKyAgJQorICAlIEFsdGhvdWdoIHRoZXNlIGludGVybmFsIGNvbW1hbmRzIHNob3VsZG4ndCBzaG93IHVwLCBzb21ldGltZXMgdGhleSBkby4KKyAgXGRlZmluZWR1bW15d29yZFxiZgorICBcZGVmaW5lZHVtbXl3b3JkXGd0cgorICBcZGVmaW5lZHVtbXl3b3JkXGhhdAorICBcZGVmaW5lZHVtbXl3b3JkXGxlc3MKKyAgXGRlZmluZWR1bW15d29yZFxzZgorICBcZGVmaW5lZHVtbXl3b3JkXHNsCisgIFxkZWZpbmVkdW1teXdvcmRcdGNsb3NlCisgIFxkZWZpbmVkdW1teXdvcmRcdHQKKyAgJQorICBcZGVmaW5lZHVtbXl3b3JkXExhVGVYCisgIFxkZWZpbmVkdW1teXdvcmRcVGVYCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcYnVsbGV0CisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWEKKyAgXGRlZmluZWR1bW15d29yZFxjb3B5cmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxyZWdpc3RlcmVkc3ltYm9sCisgIFxkZWZpbmVkdW1teXdvcmRcZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVuZGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlcXVpdgorICBcZGVmaW5lZHVtbXl3b3JkXGVycm9yCisgIFxkZWZpbmVkdW1teXdvcmRcZXVybworICBcZGVmaW5lZHVtbXl3b3JkXGV4cGFuc2lvbgorICBcZGVmaW5lZHVtbXl3b3JkXG1pbnVzCisgIFxkZWZpbmVkdW1teXdvcmRccG91bmRzCisgIFxkZWZpbmVkdW1teXdvcmRccG9pbnQKKyAgXGRlZmluZWR1bW15d29yZFxwcmludAorICBcZGVmaW5lZHVtbXl3b3JkXHJlc3VsdAorICBcZGVmaW5lZHVtbXl3b3JkXHRleHRkZWdyZWUKKyAgJQorICAlIFdlIHdhbnQgdG8gZGlzYWJsZSBhbGwgbWFjcm9zIHNvIHRoYXQgdGhleSBhcmUgbm90IGV4cGFuZGVkIGJ5IFx3cml0ZS4KKyAgXG1hY3JvbGlzdAorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBIYW5kbGUgc29tZSBjYXNlcyBvZiBAdmFsdWUgLS0gd2hlcmUgaXQgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgJSAobm9uLWZ1bGx5LWV4cGFuZGFibGUpIGNvbW1hbmRzLgorICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorfQorCislIFxjb21tb25kdW1taWVzbm9mb250czogY29tbW9uIHRvIFxjb21tb25kdW1taWVzIGFuZCBcaW5kZXhub2ZvbnRzLgorJQorXGRlZlxjb21tb25kdW1taWVzbm9mb250c3slCisgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICBcZGVmaW5lZHVtbXlsZXR0ZXJcISUKKyAgXGRlZmluZWR1bW15YWNjZW50XCIlCisgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcKiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCwlCisgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXDolCisgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcPyUKKyAgXGRlZmluZWR1bW15YWNjZW50XF4lCisgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcfiUKKyAgXGRlZmluZWR1bW15d29yZFx1CisgIFxkZWZpbmVkdW1teXdvcmRcdgorICBcZGVmaW5lZHVtbXl3b3JkXEgKKyAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdGllYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxkb3RsZXNzCisgICUKKyAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYgorICBcZGVmaW5lZHVtbXl3b3JkXGkKKyAgXGRlZmluZWR1bW15d29yZFxyCisgIFxkZWZpbmVkdW1teXdvcmRcc2MKKyAgXGRlZmluZWR1bW15d29yZFx0CisgICUKKyAgJSBDb21tYW5kcyB0aGF0IHRha2UgYXJndW1lbnRzLgorICBcZGVmaW5lZHVtbXl3b3JkXGFjcm9ueW0KKyAgXGRlZmluZWR1bW15d29yZFxjaXRlCisgIFxkZWZpbmVkdW1teXdvcmRcY29kZQorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hbmQKKyAgXGRlZmluZWR1bW15d29yZFxkZm4KKyAgXGRlZmluZWR1bW15d29yZFxlbXBoCisgIFxkZWZpbmVkdW1teXdvcmRcZW52CisgIFxkZWZpbmVkdW1teXdvcmRcZmlsZQorICBcZGVmaW5lZHVtbXl3b3JkXGtiZAorICBcZGVmaW5lZHVtbXl3b3JkXGtleQorICBcZGVmaW5lZHVtbXl3b3JkXG1hdGgKKyAgXGRlZmluZWR1bW15d29yZFxvcHRpb24KKyAgXGRlZmluZWR1bW15d29yZFxweHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHNhbXAKKyAgXGRlZmluZWR1bW15d29yZFxzdHJvbmcKKyAgXGRlZmluZWR1bW15d29yZFx0aWUKKyAgXGRlZmluZWR1bW15d29yZFx1cmVmCisgIFxkZWZpbmVkdW1teXdvcmRcdXJsCisgIFxkZWZpbmVkdW1teXdvcmRcdmFyCisgIFxkZWZpbmVkdW1teXdvcmRcdmVyYgorICBcZGVmaW5lZHVtbXl3b3JkXHcKKyAgXGRlZmluZWR1bW15d29yZFx4cmVmCit9CisKKyUgXGluZGV4bm9mb250cyBpcyB1c2VkIHdoZW4gb3V0cHV0dGluZyB0aGUgc3RyaW5ncyB0byBzb3J0IHRoZSBpbmRleAorJSBieSwgYW5kIHdoZW4gY29uc3RydWN0aW5nIGNvbnRyb2wgc2VxdWVuY2UgbmFtZXMuICBJdCBlbGltaW5hdGVzIGFsbAorJSBjb250cm9sIHNlcXVlbmNlcyBhbmQganVzdCB3cml0ZXMgd2hhdGV2ZXIgdGhlIGJlc3QgQVNDSUkgc29ydCBzdHJpbmcKKyUgd291bGQgYmUgZm9yIGEgZ2l2ZW4gY29tbWFuZCAodXN1YWxseSBpdHMgYXJndW1lbnQpLgorJQorXGRlZlxpbmRleG5vZm9udHN7JQorICAlIEFjY2VudCBjb21tYW5kcyBzaG91bGQgYmVjb21lIEBhc2lzLgorICBcZGVmXGRlZmluZWR1bW15YWNjZW50IyMxe1xsZXQjIzFcYXNpc30lCisgICUgV2UgY2FuIGp1c3QgaWdub3JlIG90aGVyIGNvbnRyb2wgbGV0dGVycy4KKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcbGV0IyMxXGVtcHR5fSUKKyAgJSBIb3BlZnVsbHksIGFsbCBjb250cm9sIHdvcmRzIGNhbiBiZWNvbWUgQGFzaXMuCisgIFxsZXRcZGVmaW5lZHVtbXl3b3JkXGRlZmluZWR1bW15YWNjZW50CisgICUKKyAgXGNvbW1vbmR1bW1pZXNub2ZvbnRzCisgICUKKyAgJSBEb24ndCBuby1vcCBcdHQsIHNpbmNlIGl0IGlzbid0IGEgdXNlci1sZXZlbCBjb21tYW5kCisgICUgYW5kIGlzIHVzZWQgaW4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBhY3RpdmUgY2hhcnMgbGlrZSA8LCA+LCB8LCBldGMuCisgICUgTGlrZXdpc2Ugd2l0aCB0aGUgb3RoZXIgcGxhaW4gdGV4IGZvbnQgY29tbWFuZHMuCisgICVcbGV0XHR0PVxhc2lzCisgICUKKyAgXGRlZlwgeyB9JQorICBcZGVmXEB7QH0lCisgICUgaG93IHRvIGhhbmRsZSBicmFjZXM/CisgIFxkZWZcX3tcbm9ybWFsdW5kZXJzY29yZX0lCisgICUKKyAgJSBOb24tRW5nbGlzaCBsZXR0ZXJzLgorICBcZGVmXEFBe0FBfSUKKyAgXGRlZlxBRXtBRX0lCisgIFxkZWZcTHtMfSUKKyAgXGRlZlxPRXtPRX0lCisgIFxkZWZcT3tPfSUKKyAgXGRlZlxhYXthYX0lCisgIFxkZWZcYWV7YWV9JQorICBcZGVmXGx7bH0lCisgIFxkZWZcb2V7b2V9JQorICBcZGVmXG97b30lCisgIFxkZWZcc3N7c3N9JQorICBcZGVmXGV4Y2xhbWRvd257IX0lCisgIFxkZWZccXVlc3Rpb25kb3duez99JQorICBcZGVmXG9yZGZ7YX0lCisgIFxkZWZcb3JkbXtvfSUKKyAgJQorICBcZGVmXExhVGVYe0xhVGVYfSUKKyAgXGRlZlxUZVh7VGVYfSUKKyAgJQorICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgJSAoVGhlIGZvbGxvd2luZyB7fSB3aWxsIGVuZCB1cCBpbiB0aGUgc29ydCBzdHJpbmcsIGJ1dCB0aGF0J3Mgb2suKQorICBcZGVmXGJ1bGxldHtidWxsZXR9JQorICBcZGVmXGNvbW1heyx9JQorICBcZGVmXGNvcHlyaWdodHtjb3B5cmlnaHR9JQorICBcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7Un0lCisgIFxkZWZcZG90c3suLi59JQorICBcZGVmXGVuZGRvdHN7Li4ufSUKKyAgXGRlZlxlcXVpdns9PX0lCisgIFxkZWZcZXJyb3J7ZXJyb3J9JQorICBcZGVmXGV1cm97ZXVyb30lCisgIFxkZWZcZXhwYW5zaW9uez09Pn0lCisgIFxkZWZcbWludXN7LX0lCisgIFxkZWZccG91bmRze3BvdW5kc30lCisgIFxkZWZccG9pbnR7Ln0lCisgIFxkZWZccHJpbnR7LXx9JQorICBcZGVmXHJlc3VsdHs9Pn0lCisgIFxkZWZcdGV4dGRlZ3JlZXtkZWdyZWVzfSUKKyAgJQorICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCisgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCisgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCisgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CisgICUgdGhhdCBzdGFydHMgd2l0aCBcLgorICAlCisgICUgU2luY2UgbWFjcm8gaW52b2NhdGlvbnMgYXJlIGZvbGxvd2VkIGJ5IGJyYWNlcywgd2UgY2FuIGp1c3QgcmVkZWZpbmUgdGhlbQorICAlIHRvIHRha2UgYSBzaW5nbGUgVGVYIGFyZ3VtZW50LiAgVGhlIGNhc2Ugb2YgYSBtYWNybyBpbnZvY2F0aW9uIHRoYXQKKyAgJSBnb2VzIHRvIGVuZC1vZi1saW5lIGlzIG5vdCBoYW5kbGVkLgorICAlCisgIFxtYWNyb2xpc3QKK30KKworXGxldFxpbmRleGJhY2tzbGFzaD0wICAlb3ZlcnJpZGRlbiBkdXJpbmcgXHByaW50aW5kZXguCitcbGV0XFNFVG1hcmdpbmluZGV4PVxyZWxheCAlIHB1dCBpbmRleCBlbnRyaWVzIGluIG1hcmdpbiAodW5kb2N1bWVudGVkKT8KKworJSBNb3N0IGluZGV4IGVudHJpZXMgZ28gdGhyb3VnaCBoZXJlLCBidXQgXGRvc3ViaW5kIGlzIHRoZSBnZW5lcmFsIGNhc2UuCislICMxIGlzIHRoZSBpbmRleCBuYW1lLCAjMiBpcyB0aGUgZW50cnkgdGV4dC4KK1xkZWZcZG9pbmQjMSMye1xkb3N1YmluZHsjMX17IzJ9e319CisKKyUgV29ya2hvcnNlIGZvciBhbGwgXGZvb2luZGV4ZXMuCislICMxIGlzIG5hbWUgb2YgaW5kZXgsICMyIGlzIHN0dWZmIHRvIHB1dCB0aGVyZSwgIzMgaXMgc3ViZW50cnkgLS0KKyUgZW1wdHkgaWYgY2FsbGVkIGZyb20gXGRvaW5kLCBhcyB3ZSB1c3VhbGx5IGFyZSAodGhlIG1haW4gZXhjZXB0aW9uCislIGlzIHdpdGggbW9zdCBkZWZ1bnMsIHdoaWNoIGNhbGwgdXMgZGlyZWN0bHkpLgorJQorXGRlZlxkb3N1YmluZCMxIzIjM3slCisgIFxpZmxpbmtzCisgIHslCisgICAgJSBTdG9yZSB0aGUgbWFpbiBpbmRleCBlbnRyeSB0ZXh0IChpbmNsdWRpbmcgdGhlIHRoaXJkIGFyZykuCisgICAgXHRva3MwID0geyMyfSUKKyAgICAlIElmIHRoaXJkIGFyZyBpcyBwcmVzZW50LCBwcmVjZWRlIGl0IHdpdGggYSBzcGFjZS4KKyAgICBcZGVmXHRoaXJkYXJneyMzfSUKKyAgICBcaWZ4XHRoaXJkYXJnXGVtcHR5IFxlbHNlCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XHRoZVx0b2tzMCBcc3BhY2UgIzN9JQorICAgIFxmaQorICAgICUKKyAgICBcZWRlZlx3cml0ZXRve1xjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lfSUKKyAgICAlCisgICAgXGlmdm1vZGUKKyAgICAgIFxkb3N1YmluZHNhbml0aXplCisgICAgXGVsc2UKKyAgICAgIFxkb3N1YmluZHdyaXRlCisgICAgXGZpCisgIH0lCisgIFxmaQorfQorCislIFdyaXRlIHRoZSBlbnRyeSBpbiBcdG9rczAgdG8gdGhlIGluZGV4IGZpbGU6CislCitcZGVmXGRvc3ViaW5kd3JpdGV7JQorICAlIFB1dCB0aGUgaW5kZXggZW50cnkgaW4gdGhlIG1hcmdpbiBpZiBkZXNpcmVkLgorICBcaWZ4XFNFVG1hcmdpbmluZGV4XHJlbGF4XGVsc2UKKyAgICBcaW5zZXJ0XG1hcmdpbntcaGJveHtcdnJ1bGUgaGVpZ2h0OHB0IGRlcHRoM3B0IHdpZHRoMHB0IFx0aGVcdG9rczB9fSUKKyAgXGZpCisgICUKKyAgJSBSZW1lbWJlciwgd2UgYXJlIHdpdGhpbiBhIGdyb3VwLgorICBcaW5kZXhkdW1taWVzICUgTXVzdCBkbyB0aGlzIGhlcmUsIHNpbmNlIFxiZiwgZXRjIGV4cGFuZCBhdCB0aGlzIHN0YWdlCisgIFxkZWZcYmFja3NsYXNoY3VyZm9udHtcaW5kZXhiYWNrc2xhc2h9JSBcaW5kZXhiYWNrc2xhc2ggaXNuJ3QgZGVmaW5lZCBub3cKKyAgICAgICUgc28gaXQgd2lsbCBiZSBvdXRwdXQgYXMgaXM7IGFuZCBpdCB3aWxsIHByaW50IGFzIGJhY2tzbGFzaC4KKyAgJQorICAlIFByb2Nlc3MgdGhlIGluZGV4IGVudHJ5IHdpdGggYWxsIGZvbnQgY29tbWFuZHMgdHVybmVkIG9mZiwgdG8KKyAgJSBnZXQgdGhlIHN0cmluZyB0byBzb3J0IGJ5LgorICB7XGluZGV4bm9mb250cworICAgXGVkZWZcdGVtcHtcdGhlXHRva3MwfSUgbmVlZCBmdWxsIGV4cGFuc2lvbgorICAgXHhkZWZcaW5kZXhzb3J0dG1we1x0ZW1wfSUKKyAgfSUKKyAgJQorICAlIFNldCB1cCB0aGUgY29tcGxldGUgaW5kZXggZW50cnksIHdpdGggYm90aCB0aGUgc29ydCBrZXkgYW5kCisgICUgdGhlIG9yaWdpbmFsIHRleHQsIGluY2x1ZGluZyBhbnkgZm9udCBjb21tYW5kcy4gIFdlIHdyaXRlCisgICUgdGhyZWUgYXJndW1lbnRzIHRvIFxlbnRyeSB0byB0aGUgLj8/IGZpbGUgKGZvdXIgaW4gdGhlCisgICUgc3ViZW50cnkgY2FzZSksIHRleGluZGV4IHJlZHVjZXMgdG8gdHdvIHdoZW4gd3JpdGluZyB0aGUgLj8/cworICAlIHNvcnRlZCByZXN1bHQuCisgIFxlZGVmXHRlbXB7JQorICAgIFx3cml0ZVx3cml0ZXRveyUKKyAgICAgIFxzdHJpbmdcZW50cnl7XGluZGV4c29ydHRtcH17XG5vZXhwYW5kXGZvbGlvfXtcdGhlXHRva3MwfX0lCisgIH0lCisgIFx0ZW1wCit9CisKKyUgVGFrZSBjYXJlIG9mIHVud2FudGVkIHBhZ2UgYnJlYWtzOgorJQorJSBJZiBhIHNraXAgaXMgdGhlIGxhc3QgdGhpbmcgb24gdGhlIGxpc3Qgbm93LCBwcmVzZXJ2ZSBpdAorJSBieSBiYWNraW5nIHVwIGJ5IFxsYXN0c2tpcCwgZG9pbmcgdGhlIFx3cml0ZSwgdGhlbiBpbnNlcnRpbmcKKyUgdGhlIHNraXAgYWdhaW4uICBPdGhlcndpc2UsIHRoZSB3aGF0c2l0IGdlbmVyYXRlZCBieSB0aGUKKyUgXHdyaXRlIHdpbGwgbWFrZSBcbGFzdHNraXAgemVyby4gIFRoZSByZXN1bHQgaXMgdGhhdCBzZXF1ZW5jZXMKKyUgbGlrZSB0aGlzOgorJSBAZW5kIGRlZnVuCislIEB0aW5kZXggd2hhdGV2ZXIKKyUgQGRlZnVuIC4uLgorJSB3aWxsIGhhdmUgZXh0cmEgc3BhY2UgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIFxtZWRicmVhayBpbiB0aGUKKyUgc3RhcnQgb2YgdGhlIEBkZWZ1biB3b24ndCBzZWUgdGhlIHNraXAgaW5zZXJ0ZWQgYnkgdGhlIEBlbmQgb2YKKyUgdGhlIHByZXZpb3VzIGRlZnVuLgorJQorJSBCdXQgZG9uJ3QgZG8gYW55IG9mIHRoaXMgaWYgd2UncmUgbm90IGluIHZlcnRpY2FsIG1vZGUuICBXZQorJSBkb24ndCB3YW50IHRvIGRvIGEgXHZza2lwIGFuZCBwcmVtYXR1cmVseSBlbmQgYSBwYXJhZ3JhcGguCislCislIEF2b2lkIHBhZ2UgYnJlYWtzIGR1ZSB0byB0aGVzZSBleHRyYSBza2lwcywgdG9vLgorJQorJSBCdXQgd2FpdCwgdGhlcmUgaXMgYSBjYXRjaCB0aGVyZToKKyUgV2UnbGwgaGF2ZSB0byBjaGVjayB3aGV0aGVyIFxsYXN0c2tpcCBpcyB6ZXJvIHNraXAuICBcaWZkaW0gaXMgbm90CislIHN1ZmZpY2llbnQgZm9yIHRoaXMgcHVycG9zZSwgYXMgaXQgaWdub3JlcyBzdHJldGNoIGFuZCBzaHJpbmsgcGFydHMKKyUgb2YgdGhlIHNraXAuICBUaGUgb25seSB3YXkgc2VlbXMgdG8gYmUgdG8gY2hlY2sgdGhlIHRleHR1YWwKKyUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNraXAuCislCislIFRoZSBmb2xsb3dpbmcgaXMgYWxtb3N0IGxpa2UgXGRlZlx6ZXJvc2tpcG1hY3JvezAuMHB0fSBleGNlcHQgdGhhdAorJSB0aGUgYGBwJycgYW5kIGBgdCcnIGNoYXJhY3RlcnMgaGF2ZSBjYXRjb2RlIFxvdGhlciwgbm90IDExIChsZXR0ZXIpLgorJQorXGVkZWZcemVyb3NraXBtYWNyb3tcZXhwYW5kYWZ0ZXJcdGhlXGNzbmFtZSB6QHNraXBcZW5kY3NuYW1lfQorJQorJSAuLi4sIHJlYWR5LCBHTzoKKyUKK1xkZWZcZG9zdWJpbmRzYW5pdGl6ZXslCisgICUgXGxhc3Rza2lwIGFuZCBcbGFzdHBlbmFsdHkgY2Fubm90IGJvdGggYmUgbm9uemVybyBzaW11bHRhbmVvdXNseS4KKyAgXHNraXAwID0gXGxhc3Rza2lwCisgIFxlZGVmXGxhc3Rza2lwbWFjcm97XHRoZVxsYXN0c2tpcH0lCisgIFxjb3VudDI1NSA9IFxsYXN0cGVuYWx0eQorICAlCisgICUgSWYgXGxhc3Rza2lwIGlzIG5vbnplcm8sIHRoYXQgbWVhbnMgdGhlIGxhc3QgaXRlbSB3YXMgYQorICAlIHNraXAuICBBbmQgc2luY2UgYSBza2lwIGlzIGRpc2NhcmRhYmxlLCB0aGF0IG1lYW5zIHRoaXMKKyAgJSAtXHNraXAwIGdsdWUgd2UncmUgaW5zZXJ0aW5nIGlzIHByZWNlZGVkIGJ5IGEKKyAgJSBub24tZGlzY2FyZGFibGUgaXRlbSwgdGhlcmVmb3JlIGl0IGlzIG5vdCBhIHBvdGVudGlhbAorICAlIGJyZWFrcG9pbnQsIHRoZXJlZm9yZSBubyBcbm9icmVhayBuZWVkZWQuCisgIFxpZnhcbGFzdHNraXBtYWNyb1x6ZXJvc2tpcG1hY3JvCisgIFxlbHNlCisgICAgXHZza2lwLVxza2lwMAorICBcZmkKKyAgJQorICBcZG9zdWJpbmR3cml0ZQorICAlCisgIFxpZnhcbGFzdHNraXBtYWNyb1x6ZXJvc2tpcG1hY3JvCisgICAgJSBJZiBcbGFzdHNraXAgd2FzIHplcm8sIHBlcmhhcHMgdGhlIGxhc3QgaXRlbSB3YXMgYSBwZW5hbHR5LCBhbmQKKyAgICAlIHBlcmhhcHMgaXQgd2FzID49MTAwMDAsIGUuZy4sIGEgXG5vYnJlYWsuICBJbiB0aGF0IGNhc2UsIHdlIHdhbnQKKyAgICAlIHRvIHJlLWluc2VydCB0aGUgc2FtZSBwZW5hbHR5ICh2YWx1ZXMgPjEwMDAwIGFyZSB1c2VkIGZvciB2YXJpb3VzCisgICAgJSBzaWduYWxzKTsgc2luY2Ugd2UganVzdCBpbnNlcnRlZCBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCBhbnkKKyAgICAlIGZvbGxvd2luZyBnbHVlIChzdWNoIGFzIGEgXHBhcnNraXApIHdvdWxkIGJlIGEgYnJlYWtwb2ludC4gIEZvciBleGFtcGxlOgorICAgICUKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVxjb3VudDI1NT45OTk5IFxwZW5hbHR5XGNvdW50MjU1IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcc2tpcDAKKyAgXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgJQorICAlIFNlZSBpZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LgorICAlIENoYW5nZSBjYXRjb2RlIG9mIEAgaGVyZSBzbyB0aGF0IGlmIHRoZSBpbmRleCBmaWxlIGNvbnRhaW5zCisgICUgXGluaXRpYWwge0B9CisgICUgYXMgaXRzIGZpcnN0IGxpbmUsIFRlWCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IG1pc21hdGNoZWQgYnJhY2VzCisgICUgKGJlY2F1c2UgaXQgdGhpbmtzIEB9IGlzIGEgY29udHJvbCBzZXF1ZW5jZSkuCisgIFxjYXRjb2RlYFxAID0gMTEKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLiMxcworICBcaWZlb2YgMQorICAgICUgXGVuZGRvdWJsZWNvbHVtbnMgZ2V0cyBjb25mdXNlZCBpZiB0aGVyZSBpcyBubyB0ZXh0IGluIHRoZSBpbmRleCwKKyAgICAlIGFuZCBpdCBsb3NlcyB0aGUgY2hhcHRlciB0aXRsZSBhbmQgdGhlIGF1eCBmaWxlIGVudHJpZXMgZm9yIHRoZQorICAgICUgaW5kZXguICBUaGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIHByb2JsZW0gaXMgdG8gbWFrZSBzdXJlCisgICAgJSB0aGVyZSBpcyBzb21lIHRleHQuCisgICAgXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50CisgIFxlbHNlCisgICAgJQorICAgICUgSWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgdGhlbiBcb3BlbmluIGxlYXZlcyBcaWZlb2YKKyAgICAlIGZhbHNlLiAgV2UgaGF2ZSB0byBtYWtlIFRlWCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgZnJvbSB0aGUgZmlsZSwgc28KKyAgICAlIGl0IGNhbiBkaXNjb3ZlciBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiBpdC4KKyAgICBccmVhZCAxIHRvIFx0ZW1wCisgICAgXGlmZW9mIDEKKyAgICAgIFxwdXR3b3JkSW5kZXhJc0VtcHR5CisgICAgXGVsc2UKKyAgICAgICUgSW5kZXggZmlsZXMgYXJlIGFsbW9zdCBUZXhpbmZvIHNvdXJjZSwgYnV0IHdlIHVzZSBcIGFzIHRoZSBlc2NhcGUKKyAgICAgICUgY2hhcmFjdGVyLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBALCBidXQgdGhhdCdzIHRvbyBiaWcgYSBjaGFuZ2UKKyAgICAgICUgdG8gbWFrZSByaWdodCBub3cuCisgICAgICBcZGVmXGluZGV4YmFja3NsYXNoe1xiYWNrc2xhc2hjdXJmb250fSUKKyAgICAgIFxjYXRjb2RlYFxcID0gMAorICAgICAgXGVzY2FwZWNoYXIgPSBgXFwKKyAgICAgIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgICAgIFxpbnB1dCBcam9ibmFtZS4jMXMKKyAgICAgIFxlbmRkb3VibGVjb2x1bW5zCisgICAgXGZpCisgIFxmaQorICBcY2xvc2VpbiAxCitcZW5kZ3JvdXB9CisKKyUgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBzb3J0ZWQgaW5kZXggZmlsZSBpdHNlbGYuCislIENoYW5nZSB0aGVtIHRvIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGluZGV4LgorCitcZGVmXGluaXRpYWwjMXt7JQorICAlIFNvbWUgbWlub3IgZm9udCBjaGFuZ2VzIGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHR0PVxzZWN0dCBcbGV0XHNmPVxzZWN0dAorICAlCisgICUgUmVtb3ZlIGFueSBnbHVlIHdlIG1heSBoYXZlLCB3ZSdsbCBiZSBpbnNlcnRpbmcgb3VyIG93bi4KKyAgXHJlbW92ZWxhc3Rza2lwCisgICUKKyAgJSBXZSBsaWtlIGJyZWFrcyBiZWZvcmUgdGhlIGluZGV4IGluaXRpYWxzLCBzbyBpbnNlcnQgYSBib251cy4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIDBwdCBwbHVzIDNcYmFzZWxpbmVza2lwCisgIFxwZW5hbHR5IDAKKyAgXHZza2lwIDBwdCBwbHVzIC0zXGJhc2VsaW5lc2tpcAorICAlCisgICUgVHlwZXNldCB0aGUgaW5pdGlhbC4gIE1ha2luZyB0aGlzIGFkZCB1cCB0byBhIHdob2xlIG51bWJlciBvZgorICAlIGJhc2VsaW5lc2tpcHMgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgdGhlIGRvdHMgbGluaW5nIHVwIGZyb20gY29sdW1uCisgICUgdG8gY29sdW1uLiAgSXQgc3RpbGwgd29uJ3Qgb2Z0ZW4gYmUgcGVyZmVjdCwgYmVjYXVzZSBvZiB0aGUgc3RyZXRjaAorICAlIHdlIG5lZWQgYmVmb3JlIGVhY2ggZW50cnksIGJ1dCBpdCdzIGJldHRlci4KKyAgJQorICAlIE5vIHNocmluayBiZWNhdXNlIGl0IGNvbmZ1c2VzIFxiYWxhbmNlY29sdW1ucy4KKyAgXHZza2lwIDEuNjdcYmFzZWxpbmVza2lwIHBsdXMgLjVcYmFzZWxpbmVza2lwCisgIFxsZWZ0bGluZXtcc2VjYmYgIzF9JQorICAlIERvIG91ciBiZXN0IG5vdCB0byBicmVhayBhZnRlciB0aGUgaW5pdGlhbC4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIC4zM1xiYXNlbGluZXNraXAgcGx1cyAuMVxiYXNlbGluZXNraXAKK319CisKKyUgXGVudHJ5IHR5cGVzZXRzIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgdGhlIHRleHQgKCMxKSwgZG90IGxlYWRlcnMsIGFuZAorJSB0aGVuIHBhZ2UgbnVtYmVyICgjMikgZmx1c2hlZCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgSXQgaXMgdXNlZCBmb3IgaW5kZXgKKyUgYW5kIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJpZXMuICBUaGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IFxsZWZ0c2tpcC4KKyUKKyUgQSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gd291bGQgc3RhcnQgbGlrZSB0aGlzOgorJQlcZGVmXGVudHJ5IzEjMnsuLi4KKyUgQnV0IHRoaXMgZnJvemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxkZWZcdGVtcGF7e1xybSB9fSUKKyAgICBcZGVmXHRlbXBieyMxfSUKKyAgICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICAgIFxlZGVmXHRlbXBke1x0ZW1wYn0lCisgICAgXGlmeFx0ZW1wY1x0ZW1wZAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBwbGFpbi50ZXgncyBcZG90ZmlsbCwgZXhjZXB0IHVzZXMgdXAgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUuXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKworXGRlZlxwcmltYXJ5ICMxe1xsaW5leyMxXGhmaWx9fQorCitcbmV3c2tpcFxzZWNvbmRhcnlpbmRlbnQgXHNlY29uZGFyeWluZGVudD0wLjVjbQorXGRlZlxzZWNvbmRhcnkjMSMye3slCisgIFxwYXJmaWxsc2tpcD0waW4KKyAgXHBhcnNraXA9MGluCisgIFxoYW5naW5kZW50PTFpbgorICBcaGFuZ2FmdGVyPTEKKyAgXG5vaW5kZW50XGhza2lwXHNlY29uZGFyeWluZGVudFxoYm94eyMxfVxpbmRleGRvdGZpbGwKKyAgXGlmcGRmCisgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICBcZWxzZQorICAgICMyCisgIFxmaQorICBccGFyCit9fQorCislIERlZmluZSB0d28tY29sdW1uIG1vZGUsIHdoaWNoIHdlIHVzZSB0byB0eXBlc2V0IGluZGV4ZXMuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaywgcGFnZSA0MTYsIHdoaWNoIGlzIHRvIHNheSwKKyUgdGhlIG1hbm1hYy50ZXggZm9ybWF0IHVzZWQgdG8gcHJpbnQgdGhlIFRlWGJvb2sgaXRzZWxmLgorXGNhdGNvZGVgXEA9MTEKKworXG5ld2JveFxwYXJ0aWFscGFnZQorXG5ld2RpbWVuXGRvdWJsZWNvbHVtbmhzaXplCisKK1xkZWZcYmVnaW5kb3VibGVjb2x1bW5ze1xiZWdpbmdyb3VwICUgZW5kZWQgYnkgXGVuZGRvdWJsZWNvbHVtbnMKKyAgJSBHcmFiIGFueSBzaW5nbGUtY29sdW1uIG1hdGVyaWFsIGFib3ZlIHVzLgorICBcb3V0cHV0ID0geyUKKyAgICAlCisgICAgJSBIZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IGZvcmVzZWVuIGluIG1hbm1hYzogaWYgd2UgYWNjdW11bGF0ZSBhCisgICAgJSB3aG9sZSBsb3Qgb2YgbWF0ZXJpYWwsIHdlIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHRoaXMgXG91dHB1dAorICAgICUgcm91dGluZSB0d2ljZSBpbiBhIHJvdyAoc2VlIHRoZSBkb3VibGVjb2wtbG9zZSB0ZXN0LCB3aGljaCBpcworICAgICUgZXNzZW50aWFsbHkgYSBjb3VwbGUgb2YgaW5kZXhlcyB3aXRoIEBzZXRjaGFwdGVybmV3cGFnZSBvZmYpLiAgSW4KKyAgICAlIHRoYXQgY2FzZSB3ZSBqdXN0IHNoaXAgb3V0IHdoYXQgaXMgaW4gXHBhcnRpYWxwYWdlIHdpdGggdGhlIG5vcm1hbAorICAgICUgb3V0cHV0IHJvdXRpbmUuICBHZW5lcmFsbHksIFxwYXJ0aWFscGFnZSB3aWxsIGJlIGVtcHR5IHdoZW4gdGhpcworICAgICUgcnVucyBhbmQgdGhpcyB3aWxsIGJlIGEgbm8tb3AuICBTZWUgdGhlIGluZGV4c3ByZWFkLnRleCB0ZXN0IGNhc2UuCisgICAgXGlmdm9pZFxwYXJ0aWFscGFnZSBcZWxzZQorICAgICAgXG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xwYXJ0aWFscGFnZX0lCisgICAgXGZpCisgICAgJQorICAgIFxnbG9iYWxcc2V0Ym94XHBhcnRpYWxwYWdlID0gXHZib3h7JQorICAgICAgJSBVbnZib3ggdGhlIG1haW4gb3V0cHV0IHBhZ2UuCisgICAgICBcdW52Ym94XFBBR0UKKyAgICAgIFxrZXJuLVx0b3Bza2lwIFxrZXJuXGJhc2VsaW5lc2tpcAorICAgIH0lCisgIH0lCisgIFxlamVjdCAlIHJ1biB0aGF0IG91dHB1dCByb3V0aW5lIHRvIHNldCBccGFydGlhbHBhZ2UKKyAgJQorICAlIFVzZSB0aGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3Igc3Vic2VxdWVudCBwYWdlcy4KKyAgXG91dHB1dCA9IHtcZG91YmxlY29sdW1ub3V0fSUKKyAgJQorICAlIENoYW5nZSB0aGUgcGFnZSBzaXplIHBhcmFtZXRlcnMuICBXZSBjb3VsZCBkbyB0aGlzIG9uY2Ugb3V0c2lkZSB0aGlzCisgICUgcm91dGluZSwgaW4gZWFjaCBvZiBAc21hbGxib29rLCBAYWZvdXJwYXBlciwgYW5kIHRoZSBkZWZhdWx0IDguNXgxMQorICAlIGZvcm1hdCwgYnV0IHRoZW4gd2UgcmVwZWF0IHRoZSBzYW1lIGNvbXB1dGF0aW9uLiAgUmVwZWF0aW5nIGEgY291cGxlCisgICUgb2YgYXNzaWdubWVudHMgb25jZSBwZXIgaW5kZXggaXMgY2xlYXJseSBtZWFuaW5nbGVzcyBmb3IgdGhlCisgICUgZXhlY3V0aW9uIHRpbWUsIHNvIHdlIG1heSBhcyB3ZWxsIGRvIGl0IGluIG9uZSBwbGFjZS4KKyAgJQorICAlIEZpcnN0IHdlIGhhbHZlIHRoZSBsaW5lIGxlbmd0aCwgbGVzcyBhIGxpdHRsZSBmb3IgdGhlIGd1dHRlciBiZXR3ZWVuCisgICUgdGhlIGNvbHVtbnMuICBXZSBjb21wdXRlIHRoZSBndXR0ZXIgYmFzZWQgb24gdGhlIGxpbmUgbGVuZ3RoLCBzbyBpdAorICAlIGNoYW5nZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSBwYXBlciBmb3JtYXQuICBUaGUgbWFnaWMgY29uc3RhbnQKKyAgJSBiZWxvdyBpcyBjaG9zZW4gc28gdGhhdCB0aGUgZ3V0dGVyIGhhcyB0aGUgc2FtZSB2YWx1ZSAod2VsbCwgKy08MXB0KQorICAlIGFzIGl0IGRpZCB3aGVuIHdlIGhhcmQtY29kZWQgaXQuCisgICUKKyAgJSBXZSBwdXQgdGhlIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLCBcZG91YmxlY29sdW1oc2l6ZSwgc28gd2UKKyAgJSBjYW4gcmVzdG9yZSBpdCBpbiBccGFnZXNvZmFyLCBhZnRlciBcaHNpemUgaXRzZWxmIGhhcyAocG90ZW50aWFsbHkpCisgICUgYmVlbiBjbG9iYmVyZWQuCisgICUKKyAgXGRvdWJsZWNvbHVtbmhzaXplID0gXGhzaXplCisgICAgXGFkdmFuY2VcZG91YmxlY29sdW1uaHNpemUgYnkgLS4wNDE1NFxoc2l6ZQorICAgIFxkaXZpZGVcZG91YmxlY29sdW1uaHNpemUgYnkgMgorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgJQorICAlIERvdWJsZSB0aGUgXHZzaXplIGFzIHdlbGwuICAoV2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJlZ2lzdGVyIGhlcmUsCisgICUgc2luY2Ugbm9ib2R5IGNsb2JiZXJzIFx2c2l6ZS4pCisgIFx2c2l6ZSA9IDJcdnNpemUKK30KKworJSBUaGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3IgYWxsIGRvdWJsZS1jb2x1bW4gcGFnZXMgZXhjZXB0CislIHRoZSBsYXN0LgorJQorXGRlZlxkb3VibGVjb2x1bW5vdXR7JQorICBcc3BsaXR0b3Bza2lwPVx0b3Bza2lwIFxzcGxpdG1heGRlcHRoPVxtYXhkZXB0aAorICAlIEdldCB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbHVtbnMgLS0gdGhlIG5vcm1hbAorICAlICh1bmRvdWJsZWQpIHBhZ2UgaGVpZ2h0IG1pbnVzIGFueSBtYXRlcmlhbCBsZWZ0IG92ZXIgZnJvbSB0aGUKKyAgJSBwcmV2aW91cyBwYWdlLgorICBcZGltZW5AID0gXHZzaXplCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IC1caHRccGFydGlhbHBhZ2UKKyAgJQorICAlIGJveDAgd2lsbCBiZSB0aGUgbGVmdC1oYW5kIGNvbHVtbiwgYm94MiB0aGUgcmlnaHQuCisgIFxzZXRib3gwPVx2c3BsaXQyNTUgdG9cZGltZW5AIFxzZXRib3gyPVx2c3BsaXQyNTUgdG9cZGltZW5ACisgIFxvbmVwYWdlb3V0XHBhZ2Vzb2ZhcgorICBcdW52Ym94MjU1CisgIFxwZW5hbHR5XG91dHB1dHBlbmFsdHkKK30KKyUKKyUgUmUtb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhZ2UgLS0gYW55IHByZXZpb3VzIG1hdGVyaWFsLAorJSBmb2xsb3dlZCBieSB0aGUgdHdvIGJveGVzIHdlIGp1c3Qgc3BsaXQsIGluIGJveDAgYW5kIGJveDIuCitcZGVmXHBhZ2Vzb2ZhcnslCisgIFx1bnZib3hccGFydGlhbHBhZ2UKKyAgJQorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgXHdkMD1caHNpemUgXHdkMj1caHNpemUKKyAgXGhib3ggdG9ccGFnZXdpZHRoe1xib3gwXGhmaWxcYm94Mn0lCit9CislCislIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCitcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICBcb3V0cHV0ID0geyUKKyAgICAlIFNwbGl0IHRoZSBsYXN0IG9mIHRoZSBkb3VibGUtY29sdW1uIG1hdGVyaWFsLiAgTGVhdmUgaXQgb24gdGhlCisgICAgJSBjdXJyZW50IHBhZ2UsIG5vIGF1dG9tYXRpYyBwYWdlIGJyZWFrLgorICAgIFxiYWxhbmNlY29sdW1ucworICAgICUKKyAgICAlIElmIHdlIGVuZCB1cCBzcGxpdHRpbmcgdG9vIG11Y2ggbWF0ZXJpYWwgZm9yIHRoZSBjdXJyZW50IHBhZ2UsCisgICAgJSB0aG91Z2gsIHRoZXJlIHdpbGwgYmUgYW5vdGhlciBwYWdlIGJyZWFrIHJpZ2h0IGFmdGVyIHRoaXMgXG91dHB1dAorICAgICUgaW52b2NhdGlvbiBlbmRzLiAgSGF2aW5nIGNhbGxlZCBcYmFsYW5jZWNvbHVtbnMgb25jZSwgd2UgZG8gbm90CisgICAgJSB3YW50IHRvIGNhbGwgaXQgYWdhaW4uICBUaGVyZWZvcmUsIHJlc2V0IFxvdXRwdXQgdG8gaXRzIG5vcm1hbAorICAgICUgZGVmaW5pdGlvbiByaWdodCBhd2F5LiAgKFdlIGhvcGUgXGJhbGFuY2Vjb2x1bW5zIHdpbGwgbmV2ZXIgYmUKKyAgICAlIGNhbGxlZCBvbiB0byBiYWxhbmNlIHRvbyBtdWNoIG1hdGVyaWFsLCBidXQgaWYgaXQgaXMsIHRoaXMgbWFrZXMKKyAgICAlIHRoZSBvdXRwdXQgc29tZXdoYXQgbW9yZSBwYWxhdGFibGUuKQorICAgIFxnbG9iYWxcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19JQorICB9JQorICBcZWplY3QKKyAgXGVuZGdyb3VwICUgc3RhcnRlZCBpbiBcYmVnaW5kb3VibGVjb2x1bW5zCisgICUKKyAgJSBccGFnZWdvYWwgd2FzIHNldCB0byB0aGUgZG91YmxlZCBcdnNpemUgYWJvdmUsIHNpbmNlIHdlIHJlc3RhcnRlZAorICAlIHRoZSBjdXJyZW50IHBhZ2UuICBXZSdyZSBub3cgYmFjayB0byBub3JtYWwgc2luZ2xlLWNvbHVtbgorICAlIHR5cGVzZXR0aW5nLCBzbyByZXNldCBccGFnZWdvYWwgdG8gdGhlIG5vcm1hbCBcdnNpemUgKGFmdGVyIHRoZQorICAlIFxlbmRncm91cCB3aGVyZSBcdnNpemUgZ290IHJlc3RvcmVkKS4KKyAgXHBhZ2Vnb2FsID0gXHZzaXplCit9CislCislIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkb3VibGUgY29sdW1uIG1hdGVyaWFsLgorXGRlZlxiYWxhbmNlY29sdW1uc3slCisgIFxzZXRib3gwID0gXHZib3h7XHVudmJveDI1NX0lIGxpa2UgXGJveDI1NSBidXQgbW9yZSBlZmZpY2llbnQsIHNlZSBwLjEyMC4KKyAgXGRpbWVuQCA9IFxodDAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IFx0b3Bza2lwCisgIFxhZHZhbmNlXGRpbWVuQCBieS1cYmFzZWxpbmVza2lwCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIgJSB0YXJnZXQgdG8gc3BsaXQgdG8KKyAgJWRlYnVnXG1lc3NhZ2V7ZmluYWwgMi1jb2x1bW4gbWF0ZXJpYWwgaGVpZ2h0PVx0aGVcaHQwLCB0YXJnZXQ9XHRoZVxkaW1lbkAufSUKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUgTG9vcCB1bnRpbCB3ZSBnZXQgYSBkZWNlbnQgYnJlYWtwb2ludC4KKyAgeyUKKyAgICBcdmJhZG5lc3MgPSAxMDAwMAorICAgIFxsb29wCisgICAgICBcZ2xvYmFsXHNldGJveDMgPSBcY29weTAKKyAgICAgIFxnbG9iYWxcc2V0Ym94MSA9IFx2c3BsaXQzIHRvIFxkaW1lbkAKKyAgICBcaWZkaW1caHQzPlxkaW1lbkAKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxkaW1lbkAgYnkgMXB0CisgICAgXHJlcGVhdAorICB9JQorICAlZGVidWdcbWVzc2FnZXtzcGxpdCB0byBcdGhlXGRpbWVuQCwgY29sdW1uIGhlaWdodHM6IFx0aGVcaHQxLCBcdGhlXGh0My59JQorICBcc2V0Ym94MD1cdmJveCB0b1xkaW1lbkB7XHVudmJveDF9JQorICBcc2V0Ym94Mj1cdmJveCB0b1xkaW1lbkB7XHVudmJveDN9JQorICAlCisgIFxwYWdlc29mYXIKK30KK1xjYXRjb2RlYFxAID0gXG90aGVyCisKKworXG1lc3NhZ2V7c2VjdGlvbmluZyx9CislIENoYXB0ZXJzLCBzZWN0aW9ucywgZXRjLgorCislIFx1bm51bWJlcmVkbm8gaXMgYW4gb3h5bW9yb24sIG9mIGNvdXJzZS4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAorJSBzZWN0aW9ucyBzbyB0aGF0IHdlIGNhbiByZWZlciB0byB0aGVtIHVuYW1iaWd1b3VzbHkgaW4gdGhlIHBkZgorJSBvdXRsaW5lcyBieSB0aGVpciAic2VjdGlvbiBudW1iZXIiLiAgV2UgYXZvaWQgY29sbGlzaW9ucyB3aXRoIGNoYXB0ZXIKKyUgbnVtYmVycyBieSBzdGFydGluZyB0aGVtIGF0IDEwMDAwLiAgKElmIGEgZG9jdW1lbnQgZXZlciBoYXMgMTAwMDAKKyUgY2hhcHRlcnMsIHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LCBJJ20gc3VyZS4pCitcbmV3Y291bnRcdW5udW1iZXJlZG5vIFx1bm51bWJlcmVkbm8gPSAxMDAwMAorXG5ld2NvdW50XGNoYXBubworXG5ld2NvdW50XHNlY25vICAgICAgICBcc2Vjbm89MAorXG5ld2NvdW50XHN1YnNlY25vICAgICBcc3Vic2Vjbm89MAorXG5ld2NvdW50XHN1YnN1YnNlY25vICBcc3Vic3Vic2Vjbm89MAorCislIFRoaXMgY291bnRlciBpcyBmdW5ueSBzaW5jZSBpdCBjb3VudHMgdGhyb3VnaCBjaGFyY29kZXMgb2YgbGV0dGVycyBBLCBCLCAuLi4KK1xuZXdjb3VudFxhcHBlbmRpeG5vICBcYXBwZW5kaXhubyA9IGBcQAorJQorJSBcZGVmXGFwcGVuZGl4bGV0dGVye1xjaGFyXHRoZVxhcHBlbmRpeG5vfQorJSBXZSBkbyB0aGUgZm9sbG93aW5nIHVnbHkgY29uZGl0aW9uYWwgaW5zdGVhZCBvZiB0aGUgYWJvdmUgc2ltcGxlCislIGNvbnN0cnVjdCBmb3IgdGhlIHNha2Ugb2YgcGRmdGV4LCB3aGljaCBuZWVkcyB0aGUgYWN0dWFsCislIGxldHRlciBpbiB0aGUgZXhwYW5zaW9uLCBub3QganVzdCB0eXBlc2V0LgorJQorXGRlZlxhcHBlbmRpeGxldHRlcnslCisgIFxpZm51bVxhcHBlbmRpeG5vPWBBIEElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEIgQiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gQyBDJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBEIEQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEUgRSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRiBGJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBHIEclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEggSCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSSBJJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBKIEolCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEsgSyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTCBMJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBNIE0lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE4gTiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTyBPJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBQIFAlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFEgUSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUiBSJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBTIFMlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFQgVCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVSBVJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBWIFYlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFcgVyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWCBYJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBZIFklCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFogWiUKKyAgJSBUaGUgXHRoZSBpcyBuZWNlc3NhcnksIGRlc3BpdGUgYXBwZWFyYW5jZXMsIGJlY2F1c2UgXGFwcGVuZGl4bGV0dGVyIGlzCisgICUgZXhwYW5kZWQgd2hpbGUgd3JpdGluZyB0aGUgLnRvYyBmaWxlLiAgXGNoYXJcYXBwZW5kaXhubyBpcyBub3QKKyAgJSBleHBhbmRhYmxlLCB0aHVzIGl0IGlzIHdyaXR0ZW4gbGl0ZXJhbGx5LCB0aHVzIGFsbCBhcHBlbmRpeGVzIGNvbWUgb3V0CisgICUgd2l0aCB0aGUgc2FtZSBsZXR0ZXIgKG9yIEApIGluIHRoZSB0b2Mgd2l0aG91dCBpdC4KKyAgXGVsc2VcY2hhclx0aGVcYXBwZW5kaXhubworICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpfQorCislIEVhY2ggQGNoYXB0ZXIgZGVmaW5lcyB0aGlzIGFzIHRoZSBuYW1lIG9mIHRoZSBjaGFwdGVyLgorJSBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncyBjYW4gdXNlIGl0LiAgQHNlY3Rpb24gZG9lcyBsaWtld2lzZS4KKyUgSG93ZXZlciwgdGhleSBhcmUgbm90IHJlbGlhYmxlLCBiZWNhdXNlIHdlIGRvbid0IHVzZSBtYXJrcy4KK1xkZWZcdGhpc2NoYXB0ZXJ7fQorXGRlZlx0aGlzc2VjdGlvbnt9CisKK1xuZXdjb3VudFxhYnNzZWNsZXZlbCAlIHVzZWQgdG8gY2FsY3VsYXRlIHByb3BlciBoZWFkaW5nIGxldmVsCitcbmV3Y291bnRcc2VjYmFzZVxzZWNiYXNlPTAgJSBAcmFpc2VzZWN0aW9ucy9AbG93ZXJzZWN0aW9ucyBtb2RpZnkgdGhpcyBjb3VudAorCislIEByYWlzZXNlY3Rpb25zOiB0cmVhdCBAc2VjdGlvbiBhcyBjaGFwdGVyLCBAc3Vic2VjdGlvbiBhcyBzZWN0aW9uLCBldGMuCitcZGVmXHJhaXNlc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgLTF9CitcbGV0XHVwPVxyYWlzZXNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgQGxvd2Vyc2VjdGlvbnM6IHRyZWF0IEBjaGFwdGVyIGFzIHNlY3Rpb24sIEBzZWN0aW9uIGFzIHN1YnNlY3Rpb24sIGV0Yy4KK1xkZWZcbG93ZXJzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAxfQorXGxldFxkb3duPVxsb3dlcnNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgd2Ugb25seSBoYXZlIHN1YnN1Yi4KK1xjaGFyZGVmXG1heHNlY2xldmVsID0gMworJQorJSBBIG51bWJlcmVkIHNlY3Rpb24gd2l0aGluIGFuIHVubnVtYmVyZWQgY2hhbmdlcyB0byB1bm51bWJlcmVkIHRvby4KKyUgVG8gYWNoaXZlIHRoaXMsIHJlbWVtYmVyIHRoZSAiYmlnZ2VzdCIgdW5udW0uIHNlYy4gd2UgYXJlIGN1cnJlbnRseSBpbjoKK1xjaGFyZGVmXHVubWxldmVsID0gXG1heHNlY2xldmVsCislCislIFRyYWNlIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcHRlciBpcyBhbiBhcHBlbmRpeCBvciBub3Q6CislIFxjaGFwaGVhZHR5cGUgaXMgIk4iIG9yICJBIiwgdW5udW1iZXJlZCBjaGFwdGVycyBhcmUgaWdub3JlZC4KK1xkZWZcY2hhcGhlYWR0eXBle059CisKKyUgQ2hvb3NlIGEgaGVhZGluZyBtYWNybworJSAjMSBpcyBoZWFkaW5nIHR5cGUKKyUgIzIgaXMgaGVhZGluZyBsZXZlbAorJSAjMyBpcyB0ZXh0IGZvciBoZWFkaW5nCitcZGVmXGdlbmhlYWQjMSMyIzN7JQorICAlIENvbXB1dGUgdGhlIGFicy4gc2VjLiBsZXZlbDoKKyAgXGFic3NlY2xldmVsPSMyCisgIFxhZHZhbmNlXGFic3NlY2xldmVsIGJ5IFxzZWNiYXNlCisgICUgTWFrZSBzdXJlIFxhYnNzZWNsZXZlbCBkb2Vzbid0IGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2U6CisgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCAwCisgICAgXGFic3NlY2xldmVsID0gMAorICBcZWxzZQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiAzCisgICAgICBcYWJzc2VjbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIFRoZSBoZWFkaW5nIHR5cGU6CisgIFxkZWZcaGVhZHR5cGV7IzF9JQorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IFx1bm1sZXZlbAorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSBcYWJzc2VjbGV2ZWwKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIENoZWNrIGZvciBhcHBlbmRpeCBzZWN0aW9uczoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID0gMAorICAgICAgXGVkZWZcY2hhcGhlYWR0eXBle1xoZWFkdHlwZX0lCisgICAgXGVsc2UKKyAgICAgIFxpZiBcaGVhZHR5cGUgQVxpZiBcY2hhcGhlYWR0eXBlIE4lCisJXGVycm1lc3NhZ2V7QGFwcGVuZGl4Li4uIHdpdGhpbiBhIG5vbi1hcHBlbmRpeCBjaGFwdGVyfSUKKyAgICAgIFxmaVxmaQorICAgIFxmaQorICAgICUgQ2hlY2sgZm9yIG51bWJlcmVkIHdpdGhpbiB1bm51bWJlcmVkOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiBcdW5tbGV2ZWwKKyAgICAgIFxkZWZcaGVhZHR5cGV7VX0lCisgICAgXGVsc2UKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBOb3cgcHJpbnQgdGhlIGhlYWRpbmc6CisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJXHVubnVtYmVyZWR6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZiBcaGVhZHR5cGUgQSUKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxhcHBlbmRpeHp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c2VjdGlvbnp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxjaGFwdGVyenp6eyMzfSUKKyAgICAgIFxvciBcc2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgYW4gaW50ZXJmYWNlOgorXGRlZlxudW1oZWFke1xnZW5oZWFkIE59CitcZGVmXGFwcGhlYWR7XGdlbmhlYWQgQX0KK1xkZWZcdW5ubWhlYWR7XGdlbmhlYWQgVX0KKworJSBAY2hhcHRlciwgQGFwcGVuZGl4LCBAdW5udW1iZXJlZC4gIEluY3JlbWVudCB0b3AtbGV2ZWwgY291bnRlciwgcmVzZXQKKyUgYWxsIGxvd2VyLWxldmVsIHNlY3Rpb25pbmcgY291bnRlcnMgdG8gemVyby4KKyUKKyUgQWxzbyBzZXQgXGNoYXBsZXZlbHByZWZpeCwgd2hpY2ggd2UgcHJlcGVuZCB0byBAZmxvYXQgc2VxdWVuY2UgbnVtYmVycworJSAoZS5nLiwgZmlndXJlcyksIHEudi4gIEJ5IGRlZmF1bHQgKGJlZm9yZSBhbnkgY2hhcHRlciksIHRoYXQgaXMgZW1wdHkuCitcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorJQorXG91dGVyXHBhcnNlYXJnZGVmXGNoYXB0ZXJ7XG51bWhlYWQweyMxfX0gJSBub3JtYWxseSBudW1oZWFkMCBjYWxscyBjaGFwdGVyenp6CitcZGVmXGNoYXB0ZXJ6enojMXslCisgICUgc2VjdGlvbiByZXNldHRpbmcgaXMgXGdsb2JhbCBpbiBjYXNlIHRoZSBjaGFwdGVyIGlzIGluIGEgZ3JvdXAsIHN1Y2gKKyAgJSBhcyBhbiBAaW5jbHVkZSBmaWxlLgorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxjaGFwbm8gYnkgMQorICAlCisgICUgVXNlZCBmb3IgXGZsb2F0LgorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XHRoZVxjaGFwbm8ufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcbWVzc2FnZXtccHV0d29yZENoYXB0ZXJcc3BhY2UgXHRoZVxjaGFwbm99JQorICAlCisgICUgV3JpdGUgdGhlIGFjdHVhbCBoZWFkaW5nLgorICBcY2hhcG1hY3JveyMxfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vfSUKKyAgJQorICAlIFNvIEBzZWN0aW9uIGFuZCB0aGUgbGlrZSBhcmUgbnVtYmVyZWQgdW5kZXJuZWF0aCB0aGlzIGNoYXB0ZXIuCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGFwcGhlYWQwIGNhbGxzIGFwcGVuZGl4enp6CitcZGVmXGFwcGVuZGl4enp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxhcHBlbmRpeG5vIGJ5IDEKKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1xhcHBlbmRpeGxldHRlci59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgIFxkZWZcYXBwZW5kaXhudW17XHB1dHdvcmRBcHBlbmRpeFxzcGFjZSBcYXBwZW5kaXhsZXR0ZXJ9JQorICBcbWVzc2FnZXtcYXBwZW5kaXhudW19JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXGFwcGVuZGl4c2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHtcdW5ubWhlYWQweyMxfX0gJSBub3JtYWxseSB1bm5taGVhZDAgY2FsbHMgdW5udW1iZXJlZHp6egorXGRlZlx1bm51bWJlcmVkenp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVx1bm51bWJlcmVkbm8gYnkgMQorICAlCisgICUgU2luY2UgYW4gdW5udW1iZXJlZCBoYXMgbm8gbnVtYmVyLCBubyBwcmVmaXggZm9yIGZpZ3VyZXMuCisgIFxnbG9iYWxcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgICUgVGhpcyB1c2VkIHRvIGJlIHNpbXBseSBcbWVzc2FnZXsjMX0sIGJ1dCBUZVggZnVsbHkgZXhwYW5kcyB0aGUKKyAgJSBhcmd1bWVudCB0byBcbWVzc2FnZS4gIFRoZXJlZm9yZSwgaWYgIzEgY29udGFpbmVkIEAtY29tbWFuZHMsIFRlWAorICAlIGV4cGFuZGVkIHRoZW0uICBGb3IgZXhhbXBsZSwgaW4gYEB1bm51bWJlcmVkIFRoZSBAY2l0ZXtCb29rfScsIFRlWAorICAlIGV4cGFuZGVkIEBjaXRlICh3aGljaCB0dXJucyBvdXQgdG8gY2F1c2UgZXJyb3JzIGJlY2F1c2UgXGNpdGUgaXMgbWVhbnQKKyAgJSB0byBiZSBleGVjdXRlZCwgbm90IGV4cGFuZGVkKS4KKyAgJQorICAlIEFueXdheSwgd2UgZG9uJ3Qgd2FudCB0aGUgZnVsbHktZXhwYW5kZWQgZGVmaW5pdGlvbiBvZiBAY2l0ZSB0byBhcHBlYXIKKyAgJSBhcyBhIHJlc3VsdCBvZiB0aGUgXG1lc3NhZ2UsIHdlIGp1c3Qgd2FudCBgQGNpdGUnIGl0c2VsZi4gIFdlIHVzZQorICAlIFx0aGU8dG9rcyByZWdpc3Rlcj4gdG8gYWNoaWV2ZSB0aGlzOiBUZVggZXhwYW5kcyBcdGhlPHRva3M+IG9ubHkgb25jZSwKKyAgJSBzaW1wbHkgeWllbGRpbmcgdGhlIGNvbnRlbnRzIG9mIDx0b2tzIHJlZ2lzdGVyPi4gIChXZSBhbHNvIGRvIHRoaXMgZm9yCisgICUgdGhlIHRvYyBlbnRyaWVzLikKKyAgXHRva3MwID0geyMxfSUKKyAgXG1lc3NhZ2V7KFx0aGVcdG9rczApfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm99JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcdW5udW1iZXJlZHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic3Vic2VjCit9CisKKyUgQGNlbnRlcmNoYXAgaXMgbGlrZSBAdW5udW1iZXJlZCwgYnV0IHRoZSBoZWFkaW5nIGlzIGNlbnRlcmVkLgorXG91dGVyXHBhcnNlYXJnZGVmXGNlbnRlcmNoYXB7JQorICAlIFdlbGwsIHdlIGNvdWxkIGRvIHRoZSBmb2xsb3dpbmcgaW4gYSBncm91cCwgYnV0IHRoYXQgd291bGQgYnJlYWsKKyAgJSBhbiBhc3N1bXB0aW9uIHRoYXQgXGNoYXBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIG91dGVybW9zdCBsZXZlbC4KKyAgJSBUaHVzIHdlIGFyZSBzYWZlciB0aGlzIHdheToJCS0ta2FzYWwsIDI0ZmViMDQKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBcY2VudGVycGFyYW1ldGVycworICBcdW5ubWhlYWQweyMxfSUKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK30KKworJSBAdG9wIGlzIGxpa2UgQHVubnVtYmVyZWQuCitcbGV0XHRvcFx1bm51bWJlcmVkCisKKyUgU2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzZWN7XG51bWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBzZWN6enoKK1xkZWZcc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c2VjdGlvbntcYXBwaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c2VjdGlvbnp6egorXGRlZlxhcHBlbmRpeHNlY3Rpb256enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vfSUKK30KK1xsZXRcYXBwZW5kaXhzZWNcYXBwZW5kaXhzZWN0aW9uCisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc2Vje1x1bm5taGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzZWN6enoKK1xkZWZcdW5udW1iZXJlZHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vfSUKK30KKworJSBTdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnNlY3tcbnVtaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIG51bWJlcmVkc3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnNlY3tcYXBwaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic2Vje1x1bm5taGVhZDJ7IzF9fSAlbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCislIFN1YnN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic3Vic2Vje1xudW1oZWFkM3sjMX19ICUgbm9ybWFsbHkgbnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbnVtYmVyZWR9JQorICAgICAgICAgICAgICAgICB7XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzdWJzZWN7XGFwcGhlYWQzeyMxfX0gJSBub3JtYWxseSBhcHBlbmRpeHN1YnN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3tcdW5ubWhlYWQzeyMxfX0gJW5vcm1hbGx5IHVubnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworJSBUaGVzZSBtYWNyb3MgY29udHJvbCB3aGF0IHRoZSBzZWN0aW9uIGNvbW1hbmRzIGRvLCBhY2NvcmRpbmcKKyUgdG8gd2hhdCBraW5kIG9mIGNoYXB0ZXIgd2UgYXJlIGluIChvcmRpbmFyeSwgYXBwZW5kaXgsIG9yIHVubnVtYmVyZWQpLgorJSBEZWZpbmUgdGhlbSBieSBkZWZhdWx0IGZvciBhIG51bWJlcmVkIGNoYXB0ZXIuCitcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKK1xsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCisKKyUgRGVmaW5lIEBtYWpvcmhlYWRpbmcsIEBoZWFkaW5nIGFuZCBAc3ViaGVhZGluZworCislIE5PVEUgb24gdXNlIG9mIFx2Ym94IGZvciBjaGFwdGVyIGhlYWRpbmdzLCBzZWN0aW9uIGhlYWRpbmdzLCBhbmQgc3VjaDoKKyUgICAgICAgMSkgV2UgdXNlIFx2Ym94IHJhdGhlciB0aGFuIHRoZSBlYXJsaWVyIFxsaW5lIHRvIHBlcm1pdAorJSAgICAgICAgICBvdmVybG9uZyBoZWFkaW5ncyB0byBmb2xkLgorJSAgICAgICAyKSBcaHlwaGVucGVuYWx0eSBpcyBzZXQgdG8gMTAwMDAgYmVjYXVzZSBoeXBoZW5hdGlvbiBpbiBhCislICAgICAgICAgIGhlYWRpbmcgaXMgb2Jub3hpb3VzOyB0aGlzIGZvcmJpZHMgaXQuCislICAgICAgIDMpIExpa2V3aXNlLCBoZWFkaW5ncyBsb29rIGJlc3QgaWYgbm8gXHBhcmluZGVudCBpcyB1c2VkLCBhbmQKKyUgICAgICAgICAgaWYganVzdGlmaWNhdGlvbiBpcyBub3QgYXR0ZW1wdGVkLiAgSGVuY2UgXHJhZ2dlZHJpZ2h0LgorCisKK1xkZWZcbWFqb3JoZWFkaW5neyUKKyAge1xhZHZhbmNlXGNoYXBoZWFkaW5nc2tpcCBieSAxMHB0IFxjaGFwYnJlYWsgfSUKKyAgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6Cit9CisKK1xkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CitcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQorICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fSUKKyAgXGJpZ3NraXAgXHBhclxwZW5hbHR5IDIwMFxyZWxheAorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIEBoZWFkaW5nLCBAc3ViaGVhZGluZywgQHN1YnN1YmhlYWRpbmcuCitccGFyc2VhcmdkZWZcaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXHBhcnNlYXJnZGVmXHN1YmhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CisKKyUgVGhlc2UgbWFjcm9zIGdlbmVyYXRlIGEgY2hhcHRlciwgc2VjdGlvbiwgZXRjLiBoZWFkaW5nIG9ubHkKKyUgKGluY2x1ZGluZyB3aGl0ZXNwYWNlLCBsaW5lYnJlYWtpbmcsIGV0Yy4gYXJvdW5kIGl0KSwKKyUgZ2l2ZW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiBjb252ZW5pZW50LCBwYXJzZWQgZm9ybS4KKworJSUlIEFyZ3MgYXJlIHRoZSBza2lwIGFuZCBwZW5hbHR5ICh1c3VhbGx5IG5lZ2F0aXZlKQorXGRlZlxkb2JyZWFrIzEjMntccGFyXGlmZGltXGxhc3Rza2lwPCMxXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHkjMlx2c2tpcCMxXGZpfQorCislJSUgRGVmaW5lIHBsYWluIGNoYXB0ZXIgc3RhcnRzLCBhbmQgcGFnZSBvbi9vZmYgc3dpdGNoaW5nIGZvciBpdAorJSBQYXJhbWV0ZXIgY29udHJvbGxpbmcgc2tpcCBiZWZvcmUgY2hhcHRlciBoZWFkaW5ncyAoaWYgbmVlZGVkKQorCitcbmV3c2tpcFxjaGFwaGVhZGluZ3NraXAKKworXGRlZlxjaGFwYnJlYWt7XGRvYnJlYWsgXGNoYXBoZWFkaW5nc2tpcCB7LTQwMDB9fQorXGRlZlxjaGFwcGFnZXJ7XHBhclx2ZmlsbFxzdXBlcmVqZWN0fQorXGRlZlxjaGFwb2RkcGFnZXtcY2hhcHBhZ2VyIFxpZm9kZFxwYWdlbm8gXGVsc2UgXGhib3ggdG8gMHB0e30gXGNoYXBwYWdlclxmaX0KKworXGRlZlxzZXRjaGFwdGVybmV3cGFnZSAjMSB7XGNzbmFtZSBDSEFQUEFHIzFcZW5kY3NuYW1lfQorCitcZGVmXENIQVBQQUdvZmZ7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcGJyZWFrCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyfQorCitcZGVmXENIQVBQQUdvbnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTc2luZ2xlfX0KKworXGRlZlxDSEFQUEFHb2RkeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9fQorCitcQ0hBUFBBR29uCisKKyUgQ2hhcHRlciBvcGVuaW5nLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gdHlwZSAoWW51bWJlcmVkLCBZbm90aGluZywKKyUgWWFwcGVuZGl4LCBZb21pdGZyb210b2MpLCAjMyB0aGUgY2hhcHRlciBudW1iZXIuCislCislIFRvIHRlc3QgYWdhaW5zdCBvdXIgYXJndW1lbnQuCitcZGVmXFlub3RoaW5na2V5d29yZHtZbm90aGluZ30KK1xkZWZcWW9taXRmcm9tdG9ja2V5d29yZHtZb21pdGZyb210b2N9CitcZGVmXFlhcHBlbmRpeGtleXdvcmR7WWFwcGVuZGl4fQorJQorXGRlZlxjaGFwbWFjcm8jMSMyIzN7JQorICBccGNoYXBzZXBtYWNybworICB7JQorICAgIFxjaGFwZm9udHMgXHJtCisgICAgJQorICAgICUgSGF2ZSB0byBkZWZpbmUgXHRoaXNzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIFxkb25vZGVyZWYsIGJlY2F1c2UgdGhlCisgICAgJSB4cmVmIGNvZGUgZXZlbnR1YWxseSB1c2VzIGl0LiAgT24gdGhlIG90aGVyIGhhbmQsIGl0IGhhcyB0byBiZSBjYWxsZWQKKyAgICAlIGFmdGVyIFxwY2hhcHNlcG1hY3JvLCBvciB0aGUgaGVhZGxpbmUgd2lsbCBjaGFuZ2UgdG9vIHNvb24uCisgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxnZGVmXHRoaXNjaGFwdGVybmFtZXsjMX0lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNlcGFyYXRpbmcgc3BhY2UgaWYgd2UgaGF2ZSBhIGNoYXB0ZXIvYXBwZW5kaXgKKyAgICAlIG51bWJlciwgYW5kIGRvbid0IHByaW50IHRoZSB1bm51bWJlcmVkIGBgbnVtYmVyJycuCisgICAgXGRlZlx0ZW1wdHlwZXsjMn0lCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm5jaGFwfSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUgY29udGVudHMgbGlrZSB1bm51bWJlcmVkLCBidXQgbm8gdG9jIGVudHJ5CisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcm51bXt9JQorICAgICAgXGdkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gIzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVybnVte1xhcHBlbmRpeGxldHRlcn0lCisgICAgICAlIFdlIGRvbid0IHN1YnN0aXR1dGUgdGhlIGFjdHVhbCBjaGFwdGVyIG5hbWUgaW50byBcdGhpc2NoYXB0ZXIKKyAgICAgICUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGl0cyBtYWNyb3MgZXZhbHVhdGVkIG5vdy4gIEFuZCB3ZSBkb24ndAorICAgICAgJSB1c2UgXHRoaXNzZWN0aW9uIGJlY2F1c2UgdGhhdCBjaGFuZ2VzIHdpdGggZWFjaCBzZWN0aW9uLgorICAgICAgJQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRBcHBlbmRpeHt9IFxhcHBlbmRpeGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bWNoYXB9JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJudW17XHRoZVxjaGFwbm99JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRDaGFwdGVye30gXHRoZVxjaGFwbm86CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IGZvciB0aGlzIGNoYXB0ZXIuICBNdXN0IGNvbWUgYmVmb3JlIHRoZQorICAgICUgXGRvbm9kZXJlZiwgYmVjYXVzZSB3ZSBpbmNsdWRlIHRoZSBjdXJyZW50IG5vZGUgbmFtZSBpbiB0aGUgdG9jCisgICAgJSBlbnRyeSwgYW5kIFxkb25vZGVyZWYgcmVzZXRzIGl0IHRvIGVtcHR5LgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlfXsjMX17IzN9JQorICAgICUKKyAgICAlIEZvciBwZGZ0ZXgsIHdlIGhhdmUgdG8gd3JpdGUgb3V0IHRoZSBub2RlIGRlZmluaXRpb24gKGFrYSwgbWFrZQorICAgICUgdGhlIHBkZmRlc3QpIGFmdGVyIGFueSBwYWdlIGJyZWFrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCBoYXMKKyAgICAlIGJlZW4gdHlwZXNldC4gIElmIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBkZiBvdXRsaW5lIGlzIGFmdGVyIHRoZQorICAgICUgdGV4dCwgdGhlbiBqdW1waW5nIGZyb20gdGhlIG91dGxpbmUgbWF5IHdpbmQgdXAgd2l0aCB0aGUgdGV4dCBub3QKKyAgICAlIGJlaW5nIHZpc2libGUsIGZvciBpbnN0YW5jZSB1bmRlciBoaWdoIG1hZ25pZmljYXRpb24uCisgICAgXGRvbm9kZXJlZnsjMn0lCisgICAgJQorICAgICUgVHlwZXNldCB0aGUgYWN0dWFsIGhlYWRpbmcuCisgICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQorICAgICAgICAgIFx1bmhib3gwICMxXHBhcn0lCisgIH0lCisgIFxub2JyZWFrXGJpZ3NraXAgJSBubyBwYWdlIGJyZWFrIGFmdGVyIGEgY2hhcHRlciB0aXRsZQorICBcbm9icmVhaworfQorCislIEBjZW50ZXJjaGFwIC0tIGNlbnRlcmVkIGFuZCB1bm51bWJlcmVkLgorXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK1xkZWZcY2VudGVycGFyYW1ldGVyc3slCisgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAzXHJpZ2h0c2tpcAorICBcbGVmdHNraXAgPSBccmlnaHRza2lwCisgIFxwYXJmaWxsc2tpcCA9IDBwdAorfQorCisKKyUgSSBkb24ndCB0aGluayB0aGlzIGNoYXB0ZXIgc3R5bGUgaXMgc3VwcG9ydGVkIGFueSBtb3JlLCBzbyBJJ20gbm90CislIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBub2RlcmVmIHN0dWZmLiAgV2UnbGwgc2VlLiAgLS1rYXJsLCAxMWF1ZzAzLgorJQorXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CislCitcZGVmXHVubmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHJhZ2dlZHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgIFxybSAjMVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXGNoZm9wZW4gIzEjMntcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMKK1x2Ym94IHRvIDNpbntcdmZpbCBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMn0gXGhib3ggdG9caHNpemV7XGhmaWwgIzF9IFx2ZmlsfX0lCitccGFyXHBlbmFsdHkgNTAwMCAlCit9CitcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0CisgICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXENIQVBGb3BlbnslCisgIFxnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmb3BlbgorICBcZ2xvYmFsXGxldFxjZW50ZXJjaGFwbWFjcm89XGNlbnRlcmNoZm9wZW59CisKKworJSBTZWN0aW9uIHRpdGxlcy4gIFRoZXNlIG1hY3JvcyBjb21iaW5lIHRoZSBzZWN0aW9uIG51bWJlciBwYXJ0cyBhbmQKKyUgY2FsbCB0aGUgZ2VuZXJpYyBcc2VjdGlvbmhlYWRpbmcgdG8gZG8gdGhlIHByaW50aW5nLgorJQorXG5ld3NraXBcc2VjaGVhZGluZ3NraXAKK1xkZWZcc2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzZWNoZWFkaW5nc2tpcHstMTAwMH19CisKKyUgU3Vic2VjdGlvbiB0aXRsZXMuCitcbmV3c2tpcFxzdWJzZWNoZWFkaW5nc2tpcAorXGRlZlxzdWJzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHN1YnNlY2hlYWRpbmdza2lwey01MDB9fQorCislIFN1YnN1YnNlY3Rpb24gdGl0bGVzLgorXGRlZlxzdWJzdWJzZWNoZWFkaW5nc2tpcHtcc3Vic2VjaGVhZGluZ3NraXB9CitcZGVmXHN1YnN1YnNlY2hlYWRpbmdicmVha3tcc3Vic2VjaGVhZGluZ2JyZWFrfQorCisKKyUgUHJpbnQgYW55IHNpemUsIGFueSB0eXBlLCBzZWN0aW9uIHRpdGxlLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gbGV2ZWwgKHNlYy9zdWJzZWMvc3Vic3Vic2VjKSwgIzMgaXMKKyUgdGhlIHNlY3Rpb24gdHlwZSBmb3IgeHJlZnMgKFludW1iZXJlZCwgWW5vdGhpbmcsIFlhcHBlbmRpeCksICM0IGlzIHRoZQorJSBzZWN0aW9uIG51bWJlci4KKyUKK1xkZWZcc2VjdGlvbmhlYWRpbmcjMSMyIzMjNHslCisgIHslCisgICAgJSBTd2l0Y2ggdG8gdGhlIHJpZ2h0IHNldCBvZiBmb250cy4KKyAgICBcY3NuYW1lICMyZm9udHNcZW5kY3NuYW1lIFxybQorICAgICUKKyAgICAlIEluc2VydCBzcGFjZSBhYm92ZSB0aGUgaGVhZGluZy4KKyAgICBcY3NuYW1lICMyaGVhZGluZ2JyZWFrXGVuZGNzbmFtZQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzcGFjZSBhZnRlciB0aGUgbnVtYmVyIGlmIHdlIGhhdmUgYSBzZWN0aW9uIG51bWJlci4KKyAgICBcZGVmXHNlY3Rpb25sZXZlbHsjMn0lCisgICAgXGRlZlx0ZW1wdHlwZXsjM30lCisgICAgJQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5ufSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgJSBmb3IgQGhlYWRpbmdzIC0tIG5vIHNlY3Rpb24gbnVtYmVyLCBkb24ndCBpbmNsdWRlIGluIHRvYywKKyAgICAgICUgYW5kIGRvbid0IHJlZGVmaW5lIFx0aGlzc2VjdGlvbi4KKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxsZXRcc2VjdGlvbmxldmVsPVxlbXB0eQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtfSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IChiZWZvcmUgXGRvbm9kZXJlZikuICBTZWUgY29tbWVudHMgaW4gXGNoYXBtYWNyby4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZVxzZWN0aW9ubGV2ZWx9eyMxfXsjNH0lCisgICAgJQorICAgICUgV3JpdGUgdGhlIG5vZGUgcmVmZXJlbmNlICg9IHBkZiBkZXN0aW5hdGlvbiBmb3IgcGRmdGV4KS4KKyAgICAlIEFnYWluLCBzZWUgY29tbWVudHMgaW4gXGNoYXBtYWNyby4KKyAgICBcZG9ub2RlcmVmeyMzfSUKKyAgICAlCisgICAgJSBJbnRlcmxpbmUgZ2x1ZSB3aWxsIGJlIGluc2VydGVkIHdoZW4gdGhlIHZib3ggaXMgY29tcGxldGVkLgorICAgICUgVGhhdCBnbHVlIHdpbGwgYmUgYSB2YWxpZCBicmVha3BvaW50IGZvciB0aGUgcGFnZSwgc2luY2UgaXQnbGwgYmUKKyAgICAlIHByZWNlZGVkIGJ5IGEgd2hhdHNpdCAodXN1YWxseSBmcm9tIHRoZSBcZG9ub2RlcmVmLCBvciBmcm9tIHRoZQorICAgICUgXHdyaXRldG9jZW50cnkgaWYgdGhlcmUgd2FzIG5vIG5vZGUpLiAgV2UgZG9uJ3Qgd2FudCB0byBhbGxvdyB0aGF0CisgICAgJSBicmVhaywgc2luY2UgdGhlbiB0aGUgd2hhdHNpdHMgY291bGQgZW5kIHVwIG9uIHBhZ2UgbiB3aGlsZSB0aGUKKyAgICAlIHNlY3Rpb24gaXMgb24gcGFnZSBuKzEsIHRodXMgdG9jL2V0Yy4gYXJlIHdyb25nLiAgRGViaWFuIGJ1ZyAyNzYwMDAuCisgICAgXG5vYnJlYWsKKyAgICAlCisgICAgJSBPdXRwdXQgdGhlIGFjdHVhbCBzZWN0aW9uIGhlYWRpbmcuCisgICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgICUgemVybyBpZiBubyBzZWN0aW9uIG51bWJlcgorICAgICAgICAgIFx1bmhib3gwICMxfSUKKyAgfSUKKyAgJSBBZGQgZXh0cmEgc3BhY2UgYWZ0ZXIgdGhlIGhlYWRpbmcgLS0gaGFsZiBvZiB3aGF0ZXZlciBjYW1lIGFib3ZlIGl0LgorICAlIERvbid0IGFsbG93IHN0cmV0Y2gsIHRob3VnaC4KKyAgXGtlcm4gLjUgXGNzbmFtZSAjMmhlYWRpbmdza2lwXGVuZGNzbmFtZQorICAlCisgICUgRG8gbm90IGxldCB0aGUga2VybiBiZSBhIHBvdGVudGlhbCBicmVha3BvaW50LCBhcyBpdCB3b3VsZCBiZSBpZiBpdAorICAlIHdhcyBmb2xsb3dlZCBieSBnbHVlLgorICBcbm9icmVhaworICAlCisgICUgV2UnbGwgYWxtb3N0IGNlcnRhaW5seSBzdGFydCBhIHBhcmFncmFwaCBuZXh0LCBzbyBkb24ndCBsZXQgdGhhdAorICAlIGdsdWUgYWNjdW11bGF0ZS4gIChOb3QgYSBicmVha3BvaW50IGJlY2F1c2UgaXQncyBwcmVjZWRlZCBieSBhCisgICUgZGlzY2FyZGFibGUgaXRlbS4pCisgIFx2c2tpcC1ccGFyc2tpcAorICAlCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlCisgICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKKyAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgXHBlbmFsdHkgMTAwMDEKK30KKworCitcbWVzc2FnZXt0b2MsfQorJSBUYWJsZSBvZiBjb250ZW50cy4KK1xuZXd3cml0ZVx0b2NmaWxlCisKKyUgV3JpdGUgYW4gZW50cnkgdG8gdGhlIHRvYyBmaWxlLCBvcGVuaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKyUgQ2FsbGVkIGZyb20gQGNoYXB0ZXIsIGV0Yy4KKyUKKyUgRXhhbXBsZSB1c2FnZTogXHdyaXRldG9jZW50cnl7c2VjfXtTZWN0aW9uIE5hbWV9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99CislIFdlIGFwcGVuZCB0aGUgY3VycmVudCBub2RlIG5hbWUgKGlmIGFueSkgYW5kIHBhZ2UgbnVtYmVyIGFzIGFkZGl0aW9uYWwKKyUgYXJndW1lbnRzIGZvciB0aGUgXHtjaGFwLHNlYywuLi59ZW50cnkgbWFjcm9zIHdoaWNoIHdpbGwgZXZlbnR1YWxseQorJSByZWFkIHRoaXMuICBUaGUgbm9kZSBuYW1lIGlzIHVzZWQgaW4gdGhlIHBkZiBvdXRsaW5lcyBhcyB0aGUKKyUgZGVzdGluYXRpb24gdG8ganVtcCB0by4KKyUKKyUgV2Ugb3BlbiB0aGUgLnRvYyBmaWxlIGZvciB3cml0aW5nIGhlcmUgaW5zdGVhZCBvZiBhdCBAc2V0ZmlsZW5hbWUgKG9yCislIGFueSBvdGhlciBmaXhlZCB0aW1lKSBzbyB0aGF0IEBjb250ZW50cyBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorJSBCdXQgaWYgIzEgaXMgYG9taXQnLCB0aGVuIHdlIGRvbid0IGRvIGFueXRoaW5nLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUKKyUgdGFibGUgb2YgY29udGVudHMgY2hhcHRlciBvcGVuaW5ncyB0aGVtc2VsdmVzLgorJQorXG5ld2lmXGlmdG9jZmlsZW9wZW5lZAorXGRlZlxvbWl0a2V5d29yZHtvbWl0fSUKKyUKK1xkZWZcd3JpdGV0b2NlbnRyeSMxIzIjM3slCisgIFxlZGVmXHdyaXRldG9jdHlwZXsjMX0lCisgIFxpZnhcd3JpdGV0b2N0eXBlXG9taXRrZXl3b3JkIFxlbHNlCisgICAgXGlmdG9jZmlsZW9wZW5lZFxlbHNlCisgICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcdG9jZmlsZSA9IFxqb2JuYW1lLnRvYworICAgICAgXGdsb2JhbFx0b2NmaWxlb3BlbmVkdHJ1ZQorICAgIFxmaQorICAgICUKKyAgICBcaWZsaW5rcworICAgICAge1xhdGR1bW1pZXMKKyAgICAgICBcZWRlZlx0ZW1weyUKKyAgICAgICAgIFx3cml0ZVx0b2NmaWxle0AjMWVudHJ5eyMyfXsjM317XGxhc3Rub2RlfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICAgXHRlbXAKKyAgICAgIH0lCisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJQorXGRlZlxhY3RpdmVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFwiPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCQ9XGFjdGl2ZQorICBcY2F0Y29kZWBcPD1cYWN0aXZlCisgIFxjYXRjb2RlYFw+PVxhY3RpdmUKKyAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorICBcY2F0Y29kZWBcXj1cYWN0aXZlCisgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXHw9XGFjdGl2ZQorICBcY2F0Y29kZWBcfj1cYWN0aXZlCit9CisKKworJSBSZWFkIHRoZSB0b2MgZmlsZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgVGV4aW5mbyBpbnB1dC4KK1xkZWZccmVhZHRvY2ZpbGV7JQorICBcc2V0dXBkYXRhZmlsZQorICBcYWN0aXZlY2F0Y29kZXMKKyAgXGlucHV0IFxqb2JuYW1lLnRvYworfQorCitcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgorXG5ld2NvdW50XHNhdmVwYWdlbm8KK1xuZXdjb3VudFxsYXN0bmVnYXRpdmVwYWdlbm8gXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IC0xCisKKyUgUHJlcGFyZSB0byByZWFkIHdoYXQgd2UndmUgd3JpdHRlbiB0byBcdG9jZmlsZS4KKyUKK1xkZWZcc3RhcnRjb250ZW50cyMxeyUKKyAgJSBJZiBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24sIGFuZCBAaGVhZGluZ3MgZG91YmxlLCB0aGUgY29udGVudHMgc2hvdWxkCisgICUgc3RhcnQgb24gYW4gb2RkIHBhZ2UsIHVubGlrZSBjaGFwdGVycy4gIFRodXMsIHdlIG1haW50YWluCisgICUgXGNvbnRlbnRzYWxpZ25tYWNybyBpbiBwYXJhbGxlbCB3aXRoIFxwYWdlYWxpZ25tYWNyby4KKyAgJSBGcm9tOiBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisgIFxjb250ZW50c2FsaWdubWFjcm8KKyAgXGltbWVkaWF0ZVxjbG9zZW91dFx0b2NmaWxlCisgICUKKyAgJSBEb24ndCBuZWVkIHRvIHB1dCBgQ29udGVudHMnIG9yIGBTaG9ydCBDb250ZW50cycgaW4gdGhlIGhlYWRsaW5lLgorICAlIEl0IGlzIGFidW5kYW50bHkgY2xlYXIgd2hhdCB0aGV5IGFyZS4KKyAgXGRlZlx0aGlzY2hhcHRlcnt9JQorICBcY2hhcG1hY3JveyMxfXtZb21pdGZyb210b2N9e30lCisgICUKKyAgXHNhdmVwYWdlbm8gPSBccGFnZW5vCisgIFxiZWdpbmdyb3VwICAgICAgICAgICAgICAgICAgJSBTZXQgdXAgdG8gaGFuZGxlIGNvbnRlbnRzIGZpbGVzIHByb3Blcmx5LgorICAgIFxyYWdnZWRib3R0b20gICAgICAgICAgICAgICUgV29ycnkgbW9yZSBhYm91dCBicmVha3BvaW50cyB0aGFuIHRoZSBib3R0b20uCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxjb250ZW50c3JpZ2h0bWFyZ2luICUgRG9uJ3QgdXNlIHRoZSBmdWxsIGxpbmUgbGVuZ3RoLgorICAgICUKKyAgICAlIFJvbWFuIG51bWVyYWxzIGZvciBwYWdlIG51bWJlcnMuCisgICAgXGlmbnVtIFxwYWdlbm8+MCBcZ2xvYmFsXHBhZ2VubyA9IFxsYXN0bmVnYXRpdmVwYWdlbm8gXGZpCit9CisKKworJSBOb3JtYWwgKGxvbmcpIHRvYy4KK1xkZWZcY29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFRPQ30lCisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcdmZpbGwgXGVqZWN0CisgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHBkZm1ha2VvdXRsaW5lcworICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCisgIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSBccGFnZW5vCisgIFxnbG9iYWxccGFnZW5vID0gXHNhdmVwYWdlbm8KK30KKworJSBBbmQganVzdCB0aGUgY2hhcHRlcnMuCitcZGVmXHN1bW1hcnljb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkU2hvcnRUT0N9JQorICAgICUKKyAgICBcbGV0XG51bWNoYXBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XHVubmNoYXBlbnRyeSA9IFxzaG9ydHVubmNoYXBlbnRyeQorICAgICUgV2Ugd2FudCBhIHRydWUgcm9tYW4gaGVyZSBmb3IgdGhlIHBhZ2UgbnVtYmVycy4KKyAgICBcc2VjZm9udHMKKyAgICBcbGV0XHJtPVxzaG9ydGNvbnRybSBcbGV0XGJmPVxzaG9ydGNvbnRiZgorICAgIFxsZXRcc2w9XHNob3J0Y29udHNsIFxsZXRcdHQ9XHNob3J0Y29udHR0CisgICAgXHJtCisgICAgXGh5cGhlbnBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXGJhc2VsaW5lc2tpcCBieSAxcHQgJSBPcGVuIGl0IHVwIGEgbGl0dGxlLgorICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7fQorICAgIFxsZXRcYXBwc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CitcbGV0XHNob3J0Y29udGVudHMgPSBcc3VtbWFyeWNvbnRlbnRzCisKKyUgVHlwZXNldCB0aGUgbGFiZWwgZm9yIGEgY2hhcHRlciBvciBhcHBlbmRpeCBmb3IgdGhlIHNob3J0IGNvbnRlbnRzLgorJSBUaGUgYXJnIGlzLCBlLmcuLCBgQScgZm9yIGFuIGFwcGVuZGl4LCBvciBgMycgZm9yIGEgY2hhcHRlci4KKyUKK1xkZWZcc2hvcnRjaGFwbGFiZWwjMXslCisgICUgVGhpcyBzcGFjZSBzaG91bGQgYmUgZW5vdWdoLCBzaW5jZSBhIHNpbmdsZSBudW1iZXIgaXMgLjVlbSwgYW5kIHRoZQorICAlIHdpZGVzdCBsZXR0ZXIgKE0pIGlzIDFlbSwgYXQgbGVhc3QgaW4gdGhlIENvbXB1dGVyIE1vZGVybiBmb250cy4KKyAgJSBCdXQgdXNlIFxoc3MganVzdCBpbiBjYXNlLgorICAlIChUaGlzIHNwYWNlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgZXh0cmEgc3BhY2UgdGhhdCBnZXRzIGFkZGVkIGFmdGVyCisgICUgdGhlIGxhYmVsOyB0aGF0IGdldHMgcHV0IGluIGJ5IFxzaG9ydGNoYXBlbnRyeSBhYm92ZS4pCisgICUKKyAgJSBXZSdkIGxpa2UgdG8gcmlnaHQtanVzdGlmeSBjaGFwdGVyIG51bWJlcnMsIGJ1dCB0aGF0IGxvb2tzIHN0cmFuZ2UKKyAgJSB3aXRoIGFwcGVuZGl4IGxldHRlcnMuICBBbmQgcmlnaHQtanVzdGlmeWluZyBudW1iZXJzIGFuZAorICAlIGxlZnQtanVzdGlmeWluZyBsZXR0ZXJzIGxvb2tzIHN0cmFuZ2Ugd2hlbiB0aGVyZSBpcyBsZXNzIHRoYW4gMTAKKyAgJSBjaGFwdGVycy4gIEhhdmUgdG8gcmVhZCB0aGUgd2hvbGUgdG9jIG9uY2UgdG8ga25vdyBob3cgbWFueSBjaGFwdGVycworICAlIHRoZXJlIGFyZSBiZWZvcmUgZGVjaWRpbmcgLi4uCisgIFxoYm94IHRvIDFlbXsjMVxoc3N9JQorfQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBpbmRpdmlkdWFsIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLgorJSBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNoYXB0ZXIgb3Igc2VjdGlvbiBuYW1lLgorJSBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgcGFnZSBudW1iZXIuCislIFRoZSBhcmd1bWVudHMgaW4gYmV0d2VlbiBhcmUgdGhlIGNoYXB0ZXIgbnVtYmVyLCBzZWN0aW9uIG51bWJlciwgLi4uCisKKyUgQ2hhcHRlcnMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorXGRlZlxudW1jaGFwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CislCislIENoYXB0ZXJzLCBpbiB0aGUgc2hvcnQgdG9jLgorJSBTZWUgY29tbWVudHMgaW4gXGRvY2hhcGVudHJ5IHJlIHZib3ggYW5kIHJlbGF0ZWQgc2V0dGluZ3MuCitcZGVmXHNob3J0Y2hhcGVudHJ5IzEjMiMzIzR7JQorICBcdG9jZW50cnl7XHNob3J0Y2hhcGxhYmVseyMyfVxsYWJlbHNwYWNlICMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9JQorfQorCislIEFwcGVuZGljZXMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorJSBOZWVkIHRoZSB3b3JkIEFwcGVuZGl4LCBhbmQgYSBmaXhlZC1zaXplIGJveC4KKyUKK1xkZWZcYXBwZW5kaXhib3gjMXslCisgICUgV2UgdXNlIE0gc2luY2UgaXQncyBwcm9iYWJseSB0aGUgd2lkZXN0IGxldHRlci4KKyAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gTX0lCisgIFxoYm94IHRvIFx3ZDB7XHB1dHdvcmRBcHBlbmRpeHt9ICMxXGhzc319CislCitcZGVmXGFwcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xhcHBlbmRpeGJveHsjMn1cbGFiZWxzcGFjZSMxfXsjNH19CisKKyUgVW5udW1iZXJlZCBjaGFwdGVycy4KK1xkZWZcdW5uY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMxfXsjNH19CitcZGVmXHNob3J0dW5uY2hhcGVudHJ5IzEjMiMzIzR7XHRvY2VudHJ5eyMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9fQorCislIFNlY3Rpb25zLgorXGRlZlxudW1zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzZWNlbnRyeT1cbnVtc2VjZW50cnkKK1xkZWZcdW5uc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMX17IzR9fQorCislIFN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzZWNlbnRyeT1cbnVtc3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMX17IzR9fQorCislIEFuZCBzdWJzdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic3Vic2VjZW50cnk9XG51bXN1YnN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgbGV2ZWxzLgorJSBTYW1lIGFzIFxkZWZhdWx0cGFyaW5kZW50LgorXG5ld2RpbWVuXHRvY2luZGVudCBcdG9jaW5kZW50ID0gMTVwdAorCislIE5vdyBmb3IgdGhlIGFjdHVhbCB0eXBlc2V0dGluZy4gSW4gYWxsIHRoZXNlLCAjMSBpcyB0aGUgdGV4dCBhbmQgIzIgaXMgdGhlCislIHBhZ2UgbnVtYmVyLgorJQorJSBJZiB0aGUgdG9jIGhhcyB0byBiZSBicm9rZW4gb3ZlciBwYWdlcywgd2Ugd2FudCBpdCB0byBiZSBhdCBjaGFwdGVycworJSBpZiBhdCBhbGwgcG9zc2libGU7IGhlbmNlIHRoZSBccGVuYWx0eS4KK1xkZWZcZG9jaGFwZW50cnkjMSMyeyUKKyAgIFxwZW5hbHR5LTMwMCBcdnNraXAxXGJhc2VsaW5lc2tpcCBwbHVzLjMzXGJhc2VsaW5lc2tpcCBtaW51cy4yNVxiYXNlbGluZXNraXAKKyAgIFxiZWdpbmdyb3VwCisgICAgIFxjaGFwZW50cnlmb250cworICAgICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorICAgXGVuZGdyb3VwCisgICBcbm9icmVha1x2c2tpcCAuMjVcYmFzZWxpbmVza2lwIHBsdXMuMVxiYXNlbGluZXNraXAKK30KKworXGRlZlxkb3NlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc2VjZW50cnlmb250cyBcbGVmdHNraXA9XHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0yXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0zXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCislIFdlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gYXMgZm9yIHRoZSBpbmRleCBlbnRyaWVzLgorXGxldFx0b2NlbnRyeSA9IFxlbnRyeQorCislIFNwYWNlIGJldHdlZW4gY2hhcHRlciAob3Igd2hhdGV2ZXIpIG51bWJlciBhbmQgdGhlIHRpdGxlLgorXGRlZlxsYWJlbHNwYWNle1xoc2tpcDFlbSBccmVsYXh9CisKK1xkZWZcZG9wYWdlbm8jMXt7XHJtICMxfX0KK1xkZWZcZG9zaG9ydHBhZ2VubyMxe3tccm0gIzF9fQorCitcZGVmXGNoYXBlbnRyeWZvbnRze1xzZWNmb250cyBccm19CitcZGVmXHNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorXGRlZlxzdWJzdWJzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CisKKworXG1lc3NhZ2V7ZW52aXJvbm1lbnRzLH0KKyUgQGZvbyAuLi4gQGVuZCBmb28uCisKKyUgQHBvaW50e30sIEByZXN1bHR7fSwgQGV4cGFuc2lvbnt9LCBAcHJpbnR7fSwgQGVxdWl2e30uCislCislIFNpbmNlIHRoZXNlIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gZXhhbXBsZXMsIGl0IHNob3VsZCBiZSBhbiBldmVuIG51bWJlciBvZgorJSBcdHQgd2lkdGhzLiBFYWNoIFx0dCBjaGFyYWN0ZXIgaXMgMWVuLCBzbyB0d28gbWFrZXMgaXQgMWVtLgorJQorXGRlZlxwb2ludHskXHN0YXIkfQorXGRlZlxyZXN1bHR7XGxlYXZldm1vZGVccmFpc2UuMTVleFxoYm94IHRvIDFlbXtcaGZpbCRcUmlnaHRhcnJvdyRcaGZpbH19CitcZGVmXGV4cGFuc2lvbntcbGVhdmV2bW9kZVxyYWlzZS4xZXhcaGJveCB0byAxZW17XGhmaWwkXG1hcHN0byRcaGZpbH19CitcZGVmXHByaW50e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcZGFzaHYkXGhmaWx9fQorXGRlZlxlcXVpdntcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXHB0ZXhlcXVpdiRcaGZpbH19CisKKyUgVGhlIEBlcnJvcnt9IGNvbW1hbmQuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaydzIFxib3hpdC4KKyUKK1xuZXdib3hcZXJyb3Jib3gKKyUKK3tcdGVudHQgXGdsb2JhbFxkaW1lbjAgPSAzZW19JSBXaWR0aCBvZiB0aGUgYm94LgorXGRpbWVuMiA9IC41NXB0ICUgVGhpY2tuZXNzIG9mIHJ1bGVzCislIFRoZSB0ZXh0LiAoYHInIGlzIG9wZW4gb24gdGhlIHJpZ2h0LCBgZScgc29tZXdoYXQgbGVzcyBzbyBvbiB0aGUgbGVmdC4pCitcc2V0Ym94MCA9IFxoYm94e1xrZXJuLS43NXB0IFxyZWR1Y2Vkc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0XHF1b3RlZXhwYW5kCisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CislIEBkaXNwbGF5L0BzbWFsbGRpc3BsYXk6IHNhbWUgYXMgQGxpc3AgZXhjZXB0IGtlZXAgY3VycmVudCBmb250LgorJQorXG1ha2VkaXNwZW52IHtkaXNwbGF5fXslCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmb3JtYXQvQHNtYWxsZm9ybWF0OiBzYW1lIGFzIEBkaXNwbGF5IGV4Y2VwdCBkb24ndCBuYXJyb3cgbWFyZ2lucy4KKyUKK1xtYWtlZGlzcGVudntmb3JtYXR9eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmbHVzaGxlZnQ6IHNhbWUgYXMgQGZvcm1hdCwgYnV0IGRvZXNuJ3Qgb2JleSBcU0VUZGlzcGVudnNpemUuCitcZW52ZGVmXGZsdXNobGVmdHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNobGVmdCA9IFxhZnRlcmVudmJyZWFrCisKKyUgQGZsdXNocmlnaHQuCislCitcZW52ZGVmXGZsdXNocmlnaHR7JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAwcHQgcGx1cyAxZmlsbAorICBcZ29iYmxlCit9CitcbGV0XEVmbHVzaHJpZ2h0ID0gXGFmdGVyZW52YnJlYWsKKworCislIEBxdW90YXRpb24gZG9lcyBub3JtYWwgbGluZWJyZWFraW5nIChoZW5jZSB3ZSBjYW4ndCB1c2UgXG5vbmZpbGxzdGFydCkKKyUgYW5kIG5hcnJvd3MgdGhlIG1hcmdpbnMuICBXZSBrZWVwIFxwYXJza2lwIG5vbnplcm8gaW4gZ2VuZXJhbCwgc2luY2UKKyUgd2UncmUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuICBTbywgd2hlbiB1c2luZyBcYWJvdmVlbnZicmVhayBhbmQKKyUgXGFmdGVyZW52YnJlYWssIHRlbXBvcmFyaWx5IG1ha2UgXHBhcnNraXAgMC4KKyUKK1xlbnZkZWZccXVvdGF0aW9ueyUKKyAge1xwYXJza2lwPTBwdCBcYWJvdmVlbnZicmVha30lIGJlY2F1c2UgXGFib3ZlZW52YnJlYWsgaW5zZXJ0cyBccGFyc2tpcAorICBccGFyaW5kZW50PTBwdAorICAlCisgICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCisgIFxwYXJzZWFyZ1xxdW90YXRpb25sYWJlbAorfQorCislIFdlIGhhdmUgcmV0YWluZWQgYSBub256ZXJvIHBhcnNraXAgZm9yIHRoZSBlbnZpcm9ubWVudCwgc2luY2Ugd2UncmUKKyUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuCislCitcZGVmXEVxdW90YXRpb257JQorICBccGFyCisgIFxpZnhccXVvdGF0aW9uYXV0aG9yXHVuZGVmaW5lZFxlbHNlCisgICAgJSBpbmRlbnQgYSBiaXQuCisgICAgXGxlZnRsaW5le1xrZXJuIDJcbGVmdHNraXAgXHNsIC0tLVxxdW90YXRpb25hdXRob3J9JQorICBcZmkKKyAge1xwYXJza2lwPTBwdCBcYWZ0ZXJlbnZicmVha30lCit9CisKKyUgSWYgd2UncmUgZ2l2ZW4gYW4gYXJndW1lbnQsIHR5cGVzZXQgaXQgaW4gYm9sZCB3aXRoIGEgY29sb24gYWZ0ZXIuCitcZGVmXHF1b3RhdGlvbmxhYmVsIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICB7XGJmICMxOiB9JQorICBcZmkKK30KKworCislIExhVGVYLWxpa2UgQHZlcmJhdGltLi4uQGVuZCB2ZXJiYXRpbSBhbmQgQHZlcmJ7PGNoYXI+Li4uPGNoYXI+fQorJSBJZiB3ZSB3YW50IHRvIGFsbG93IGFueSA8Y2hhcj4gYXMgZGVsaW1pdGVyLAorJSB3ZSBuZWVkIHRoZSBjdXJseSBicmFjZXMgc28gdGhhdCBtYWtlaW5mbyBzZWVzIHRoZSBAdmVyYiBjb21tYW5kLCBlZzoKKyUgYEB2ZXJieC4uLngnIHdvdWxkIGxvb2sgbGlrZSB0aGUgJ0B2ZXJieCcgY29tbWFuZC4gIC0tamFubmVrZUBnbnUub3JnCislCislIFtLbnV0aF06IERvbmFsZCBFcnZpbiBLbnV0aCwgMTk5Ni4gIFRoZSBUZVhib29rLgorJQorJSBbS251dGhdIHAuMzQ0OyBvbmx5IHdlIG5lZWQgdG8gZG8gdGhlIG90aGVyIGNoYXJhY3RlcnMgVGV4aW5mbyBzZXRzCislIGFjdGl2ZSB0b28uICBPdGhlcndpc2UsIHRoZXkgZ2V0IGxvc3QgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiBhCislIHZlcmJhdGltIGxpbmUuCitcZGVmXGRvc3BlY2lhbHN7JQorICBcZG9cIFxkb1xcXGRvXHtcZG9cfVxkb1wkXGRvXCYlCisgIFxkb1wjXGRvXF5cZG9cXl5LXGRvXF9cZG9cXl5BXGRvXCVcZG9cfiUKKyAgXGRvXDxcZG9cPlxkb1x8XGRvXEBcZG8rXGRvXCIlCit9CislCislIFtLbnV0aF0gcC4gMzgwCitcZGVmXHVuY2F0Y29kZXNwZWNpYWxzeyUKKyAgXGRlZlxkbyMjMXtcY2F0Y29kZWAjIzE9XG90aGVyfVxkb3NwZWNpYWxzfQorJQorJSBbS251dGhdIHBwLiAzODAsMzgxLDM5MQorJSBEaXNhYmxlIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udAorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZVxnZGVmYHtccmVsYXhcbHF9CitcZW5kZ3JvdXAKKyUKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYiBjb21tYW5kLgorJQorJSBFaWdodCBzcGFjZXMgZm9yIGEgdGFiCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZWlnaHRzcGFjZXN7XGNhdGNvZGVgXF5eST1cYWN0aXZlXGRlZl5eSXtcIFwgXCBcIFwgXCBcIFwgfX0KK1xlbmRncm91cAorJQorXGRlZlxzZXR1cHZlcmJ7JQorICBcdHQgICUgZWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVuZGdyYWZ9JQorICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0YWJlaWdodHNwYWNlcworICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworfQorCislIFNldHVwIGZvciB0aGUgQHZlcmJhdGltIGVudmlyb25tZW50CislCislIFJlYWwgdGFiIGV4cGFuc2lvbgorXG5ld2RpbWVuXHRhYncgXHNldGJveDA9XGhib3h7XHR0XHNwYWNlfSBcdGFidz04XHdkMCAlIHRhYiBhbW91bnQKKyUKK1xkZWZcc3RhcnR0YWJib3h7XHNldGJveDA9XGhib3hcYmdyb3VwfQorCislIEFsbG93IGFuIG9wdGlvbiB0byBub3QgcmVwbGFjZSBxdW90ZXMgd2l0aCBhIHJlZ3VsYXIgZGlyZWN0ZWQgcmlnaHQKKyUgcXVvdGUvYXBvc3Ryb3BoZSAoY2hhciAweDI3KSwgYnV0IGluc3RlYWQgdXNlIHRoZSB1bmRpcmVjdGVkIHF1b3RlCislIGZyb20gY210dCAoY2hhciAweDBkKS4gIFRoZSB1bmRpcmVjdGVkIHF1b3RlIGlzIHVnbHksIHNvIGRvbid0IG1ha2UgaXQKKyUgdGhlIGRlZmF1bHQsIGJ1dCBpdCB3b3JrcyBmb3IgcGFzdGluZyB3aXRoIG1vcmUgcGRmIHZpZXdlcnMgKGF0IGxlYXN0CislIGV2aW5jZSksIHRoZSBsaWx5cG9uZCBkZXZlbG9wZXJzIHJlcG9ydC4gIHhwZGYgZG9lcyB3b3JrIHdpdGggdGhlCislIHJlZ3VsYXIgMHgyNy4KKyUKK1xkZWZcY29kZXF1b3RlcmlnaHR7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVRjb2RlcXVvdGV1bmRpcmVjdGVkXGVuZGNzbmFtZVxyZWxheAorICAgICclCisgIFxlbHNlCisgICAgXGNoYXInMTUKKyAgXGZpCit9CislCislIGFuZCBhIHNpbWlsYXIgb3B0aW9uIGZvciB0aGUgbGVmdCBxdW90ZSBjaGFyIHZzLiBhIGdyYXZlIGFjY2VudC4KKyUgTW9kZXJuIGZvbnRzIGRpc3BsYXkgQVNDSUkgMHg2MCBhcyBhIGdyYXZlIGFjY2VudCwgc28gc29tZSBwZW9wbGUgbGlrZQorJSB0aGUgY29kZSBlbnZpcm9ubWVudHMgdG8gZG8gbGlrZXdpc2UuCislCitcZGVmXGNvZGVxdW90ZWxlZnR7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVRjb2RlcXVvdGViYWNrdGlja1xlbmRjc25hbWVccmVsYXgKKyAgICBgJQorICBcZWxzZQorICAgIFxjaGFyJzIyCisgIFxmaQorfQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmV4cGFuZHslCisgICAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgICAgXGRlZl5eSXtcbGVhdmV2bW9kZVxlZ3JvdXAKKyAgICAgIFxkaW1lbjA9XHdkMCAlIHRoZSB3aWR0aCBzbyBmYXIsIG9yIHNpbmNlIHRoZSBwcmV2aW91cyB0YWIKKyAgICAgIFxkaXZpZGVcZGltZW4wIGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lbjAgYnlcdGFidyAlIGNvbXB1dGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFxhZHZhbmNlXGRpbWVuMCBieVx0YWJ3ICAlIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXHdkMD1cZGltZW4wIFxib3gwIFxzdGFydHRhYmJveAorICAgIH0lCisgIH0KKyAgXGNhdGNvZGVgXCc9XGFjdGl2ZQorICBcZ2RlZlxycXVvdGVleHBhbmR7XGNhdGNvZGVccnF1b3RlQ2hhcj1cYWN0aXZlIFxkZWYne1xjb2RlcXVvdGVyaWdodH19JQorICAlCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXGdkZWZcbHF1b3RlZXhwYW5ke1xjYXRjb2RlXGxxdW90ZUNoYXI9XGFjdGl2ZSBcZGVmYHtcY29kZXF1b3RlbGVmdH19JQorICAlCisgIFxnZGVmXHF1b3RlZXhwYW5ke1xycXVvdGVleHBhbmQgXGxxdW90ZWV4cGFuZH0lCitcZW5kZ3JvdXAKKworJSBzdGFydCB0aGUgdmVyYmF0aW0gZW52aXJvbm1lbnQuCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICBccXVvdGVleHBhbmQKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKKyAgXGV2ZXJ5cGFye1xzdGFydHRhYmJveH0lCit9CisKKyUgRG8gdGhlIEB2ZXJiIG1hZ2ljOiB2ZXJiYXRpbSB0ZXh0IGlzIHF1b3RlZCBieSB1bmlxdWUKKyUgZGVsaW1pdGVyIGNoYXJhY3RlcnMuICBCZWZvcmUgZmlyc3QgZGVsaW1pdGVyIGV4cGVjdCBhCislIHJpZ2h0IGJyYWNlLCBhZnRlciBsYXN0IGRlbGltaXRlciBleHBlY3QgY2xvc2luZyBicmFjZToKKyUKKyUgICAgXGRlZlxkb3ZlcmIneyc8Y2hhcj4jMTxjaGFyPid9J3sjMX0KKyUKKyUgW0tudXRoXSBwLiAzODI7IG9ubHkgZWF0IG91dGVyIHt9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBbPTFcY2F0Y29kZWBdPTJcY2F0Y29kZWBcez1cb3RoZXJcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGdkZWZcZG92ZXJieyMxW1xkZWZcbmV4dCMjMSMxfVsjIzFcZW5kZ3JvdXBdXG5leHRdCitcZW5kZ3JvdXAKKyUKK1xkZWZcdmVyYntcYmVnaW5ncm91cFxzZXR1cHZlcmJcZG92ZXJifQorJQorJQorJSBEbyB0aGUgQHZlcmJhdGltIG1hZ2ljOiBkZWZpbmUgdGhlIG1hY3JvIFxkb3ZlcmJhdGltIHNvIHRoYXQKKyUgdGhlIChmaXJzdCkgYXJndW1lbnQgZW5kcyB3aGVuICdAZW5kIHZlcmJhdGltJyBpcyByZWFjaGVkLCBpZToKKyUKKyUgICAgIFxkZWZcZG92ZXJiYXRpbSMxQGVuZCB2ZXJiYXRpbXsjMX0KKyUKKyUgRm9yIFRleGluZm8gaXQncyBhIGxvdCBlYXNpZXIgdGhhbiBmb3IgTGFUZVgsCislIGJlY2F1c2UgdGV4aW5mbydzIFx2ZXJiYXRpbSBkb2Vzbid0IHN0b3AgYXQgJ1xlbmR7dmVyYmF0aW19JzoKKyUgd2UgbmVlZCBub3QgcmVkZWZpbmUgJ1wnLCAneycgYW5kICd9Jy4KKyUKKyUgSW5zcGlyZWQgYnkgTGFUZVgncyB2ZXJiYXRpbSBjb21tYW5kIHNldCBbbGF0ZXgubHR4XQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXCA9XGFjdGl2ZQorICBcb2JleWxpbmVzICUKKyAgJSBpZ25vcmUgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QgXl5NLCB0aGF0J3MgdGhlIG5ld2xpbmUgYXQgdGhlIGVuZAorICAlIG9mIHRoZSBAdmVyYmF0aW0gaW5wdXQgbGluZSBpdHNlbGYuICBPdGhlcndpc2Ugd2UgZ2V0IGFuIGV4dHJhIGJsYW5rCisgICUgbGluZSBpbiB0aGUgb3V0cHV0LgorICBceGRlZlxkb3ZlcmJhdGltIzFeXk0jMkBlbmQgdmVyYmF0aW17IzJcbm9leHBhbmRcZW5kXGdvYmJsZSB2ZXJiYXRpbX0lCisgICUgV2UgcmVhbGx5IHdhbnQgey4uLlxlbmQgdmVyYmF0aW19IGluIHRoZSBib2R5IG9mIHRoZSBtYWNybywgYnV0CisgICUgd2l0aG91dCB0aGUgYWN0aXZlIHNwYWNlOyB0aHVzIHdlIGhhdmUgdG8gdXNlIFx4ZGVmIGFuZCBcZ29iYmxlLgorXGVuZGdyb3VwCislCitcZW52ZGVmXHZlcmJhdGlteyUKKyAgICBcc2V0dXB2ZXJiYXRpbVxkb3ZlcmJhdGltCit9CitcbGV0XEV2ZXJiYXRpbSA9IFxhZnRlcmVudmJyZWFrCisKKworJSBAdmVyYmF0aW1pbmNsdWRlIEZJTEUgLSBpbnNlcnQgdGV4dCBvZiBmaWxlIGluIHZlcmJhdGltIGVudmlyb25tZW50LgorJQorXGRlZlx2ZXJiYXRpbWluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xkb3ZlcmJhdGltaW5jbHVkZX0KKyUKK1xkZWZcZG92ZXJiYXRpbWluY2x1ZGUjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcc2V0dXB2ZXJiYXRpbQorICAgIFxpbnB1dCAjMQorICAgIFxhZnRlcmVudmJyZWFrCisgIH0lCit9CisKKyUgQGNvcHlpbmcgLi4uIEBlbmQgY29weWluZy4KKyUgU2F2ZSB0aGUgdGV4dCBhd2F5IGZvciBAaW5zZXJ0Y29weWluZyBsYXRlci4KKyUKKyUgV2Ugc2F2ZSB0aGUgdW5pbnRlcnByZXRlZCB0b2tlbnMsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgYm94LgorJSBTYXZpbmcgdGhlIHRleHQgaW4gYSBib3ggd291bGQgYmUgbXVjaCBlYXNpZXIsIGJ1dCB0aGVuIGFsbCB0aGUKKyUgdHlwZXNldHRpbmcgY29tbWFuZHMgKEBzbWFsbGJvb2ssIGZvbnQgY2hhbmdlcywgZXRjLikgaGF2ZSB0byBiZSBkb25lCislIGJlZm9yZWhhbmQgLS0gYW5kIGEpIHdlIHdhbnQgQGNvcHlpbmcgdG8gYmUgZG9uZSBmaXJzdCBpbiB0aGUgc291cmNlCislIGZpbGU7IGIpIGxldHRpbmcgdXNlcnMgZGVmaW5lIHRoZSBmcm9udG1hdHRlciBpbiBhcyBmbGV4aWJsZSBvcmRlciBhcworJSBwb3NzaWJsZSBpcyB2ZXJ5IGRlc2lyYWJsZS4KKyUKK1xkZWZcY29weWluZ3tcY2hlY2tlbnZ7fVxiZWdpbmdyb3VwXHNjYW5hcmdjdHh0XGRvY29weWluZ30KK1xkZWZcZG9jb3B5aW5nIzFAZW5kIGNvcHlpbmd7XGVuZGdyb3VwXGRlZlxjb3B5aW5ndGV4dHsjMX19CislCitcZGVmXGluc2VydGNvcHlpbmd7JQorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQgPSAwcHQgICUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGxvb2tzIHdyb25nIG9uIHRpdGxlIHBhZ2UKKyAgICBcc2NhbmV4cFxjb3B5aW5ndGV4dAorICBcZW5kZ3JvdXAKK30KKworXG1lc3NhZ2V7ZGVmdW5zLH0KKyUgQGRlZnVuIGV0Yy4KKworXG5ld3NraXBcZGVmYm9keWluZGVudCBcZGVmYm9keWluZGVudD0uNGluCitcbmV3c2tpcFxkZWZhcmdzaW5kZW50IFxkZWZhcmdzaW5kZW50PTUwcHQKK1xuZXdza2lwXGRlZmxhc3RhcmdtYXJnaW4gXGRlZmxhc3RhcmdtYXJnaW49MThwdAorCislIFN0YXJ0IHRoZSBwcm9jZXNzaW5nIG9mIEBkZWZmbjoKK1xkZWZcc3RhcnRkZWZ1bnslCisgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMAorICAgIFxtZWRicmVhaworICBcZWxzZQorICAgICUgSWYgdGhlcmUgYXJlIHR3byBAZGVmIGNvbW1hbmRzIGluIGEgcm93LCB3ZSdsbCBoYXZlIGEgXG5vYnJlYWssCisgICAgJSB3aGljaCBpcyB0aGVyZSB0byBrZWVwIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlvbiB0b2dldGhlciB3aXRoIGl0cworICAgICUgaGVhZGVyLiAgQnV0IGlmIHRoZXJlJ3Mgbm90aGluZyBidXQgaGVhZGVycywgd2UgbmVlZCB0byBhbGxvdyBhCisgICAgJSBicmVhayBzb21ld2hlcmUuICBDaGVjayBzcGVjaWZpY2FsbHkgZm9yIHBlbmFsdHkgMTAwMDIsIGluc2VydGVkCisgICAgJSBieSBcZGVmYXJnc2NvbW1vbmVuZGluZywgaW5zdGVhZCBvZiAxMDAwMCwgc2luY2UgdGhlIHNlY3Rpb25pbmcKKyAgICAlIGNvbW1hbmRzIGFsc28gaW5zZXJ0IGEgbm9icmVhayBwZW5hbHR5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvdworICAgICUgYSBicmVhayBiZXR3ZWVuIGEgc2VjdGlvbiBoZWFkaW5nIGFuZCBhIGRlZnVuLgorICAgICUKKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZmkKKyAgJQorICAlIEFuZCBub3csIGl0J3MgdGltZSB0byByZXVzZSB0aGUgYm9keSBvZiB0aGUgb3JpZ2luYWwgZGVmdW46CisgIFxleHBhbmRhZnRlclxnb2JibGVkZWZ1biMxJQorfQorXGRlZlxnb2JibGVkZWZ1biMxXHN0YXJ0ZGVmdW57fQorCislIFxwcmludGRlZnVubGluZSBcZGVmZm5oZWFkZXJ7dGV4dH0KKyUKK1xkZWZccHJpbnRkZWZ1bmxpbmUjMSMyeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlIGNhbGwgXGRlZmZuaGVhZGVyOgorICAgICMxIzIgXGVuZGhlYWRlcgorICAgICUgY29tbW9uIGVuZGluZzoKKyAgICBcaW50ZXJsaW5lcGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgICBcZW5kZ3JhZgorICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAorICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUgSSd2ZSB2ZXJpZmllZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBib3RoIGZvciBlLVRlWCBhbmQgZm9yIG9yZGluYXJ5IFRlWAorICAgICUJCQkJCQkJLS1rYXNhbCwgMjlub3YwMworICAgIFxzY2FudG9rZW5zeyMxXGVuZGlucHV0fSUKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcc2NhbmV4cCMxeyUKKyAgXGVkZWZcdGVtcHtcbm9leHBhbmRcc2Nhbm1hY3JveyMxfX0lCisgIFx0ZW1wCit9CisKK1xuZXdjb3VudFxwYXJhbW5vICAgJSBDb3VudCBvZiBwYXJhbWV0ZXJzCitcbmV3dG9rc1xtYWNuYW1lICAgICUgTWFjcm8gbmFtZQorXG5ld2lmXGlmcmVjdXJzaXZlICAlIElzIGl0IHJlY3Vyc2l2ZT8KKworJSBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvcyBpbiB0aGUgZm9ybQorJSAgICBcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMVxkZWZpbmVkdW1teXdvcmRcbWFjcm8yLi4uCislIEN1cnJlbnRseSBpcyBhbHNvIGNvbnRhaW5zIGFsbCBAYWxpYXNlczsgdGhlIGxpc3QgY2FuIGJlIHNwbGl0CislIGlmIHRoZXJlIGlzIGEgbmVlZC4KK1xkZWZcbWFjcm9saXN0e30KKworJSBBZGQgdGhlIG1hY3JvIHRvIFxtYWNyb2xpc3QKK1xkZWZcYWRkdG9tYWNyb2xpc3QjMXtcZXhwYW5kYWZ0ZXIgXGFkZHRvbWFjcm9saXN0eHh4IFxjc25hbWUjMVxlbmRjc25hbWV9CitcZGVmXGFkZHRvbWFjcm9saXN0eHh4IzF7JQorICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XG1hY3JvbGlzdFxkZWZpbmVkdW1teXdvcmQjMX0lCisgICAgIFx4ZGVmXG1hY3JvbGlzdHtcdGhlXHRva3MwfSUKK30KKworJSBVdGlsaXR5IHJvdXRpbmVzLgorJSBUaGlzIGRvZXMgXGxldCAjMSA9ICMyLCB3aXRoIFxjc25hbWVzOyB0aGF0IGlzLAorJSAgIFxsZXQgXGNzbmFtZSMxXGVuZGNzbmFtZSA9IFxjc25hbWUjMlxlbmRjc25hbWUKKyUgKGV4Y2VwdCBvZiBjb3Vyc2Ugd2UgaGF2ZSB0byBwbGF5IGV4cGFuc2lvbiBnYW1lcykuCislCitcZGVmXGNzbGV0IzEjMnslCisgIFxleHBhbmRhZnRlclxsZXQKKyAgXGNzbmFtZSMxXGV4cGFuZGFmdGVyXGVuZGNzbmFtZQorICBcY3NuYW1lIzJcZW5kY3NuYW1lCit9CisKKyUgVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgb2ZmIGEgc3RyaW5nLgorJSBDb25jZXB0cyBmcm9tIGFyby1iZW5kIHByb2JsZW0gMTUgKHNlZSBDVEFOKS4KK3tcY2F0Y29kZWBcQD0xMQorXGdkZWZcZWF0c3BhY2VzICMxe1xleHBhbmRhZnRlclx0cmltQFxleHBhbmRhZnRlcnsjMSB9fQorXGdkZWZcdHJpbUAgIzF7XHRyaW1AQCBAIzEgQCAjMSBAIEBAfQorXGdkZWZcdHJpbUBAICMxQCAjMkAgIzNAQHtcdHJpbUBAQFxlbXB0eSAjMiBAfQorXGRlZlx1bmJyYWNlIzF7IzF9CitcdW5icmFjZXtcZ2RlZlx0cmltQEBAICMxIH0gIzJAeyMxfQorfQorCislIFRyaW0gYSBzaW5nbGUgdHJhaWxpbmcgXl5NIG9mZiBhIHN0cmluZy4KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcY2F0Y29kZWBcUT0zJQorXGdkZWZcZWF0Y3IgIzF7XGVhdGNyYSAjMVFeXk1RfSUKK1xnZGVmXGVhdGNyYSMxXl5NUXtcZWF0Y3JiIzFRfSUKK1xnZGVmXGVhdGNyYiMxUSMyUXsjMX0lCit9CisKKyUgTWFjcm8gYm9kaWVzIGFyZSBhYnNvcmJlZCBhcyBhbiBhcmd1bWVudCBpbiBhIGNvbnRleHQgd2hlcmUKKyUgYWxsIGNoYXJhY3RlcnMgYXJlIGNhdGNvZGUgMTAsIDExIG9yIDEyLCBleGNlcHQgXCB3aGljaCBpcyBhY3RpdmUKKyUgKGFzIGluIG5vcm1hbCB0ZXhpbmZvKS4gSXQgaXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBcLgorCislIEl0J3MgbmVjZXNzYXJ5IHRvIGhhdmUgaGFyZCBDUnMgd2hlbiB0aGUgbWFjcm8gaXMgZXhlY3V0ZWQuIFRoaXMgaXMKKyUgZG9uZSBieSAgbWFraW5nIF5eTSAoXGVuZGxpbmVjaGFyKSBjYXRjb2RlIDEyIHdoZW4gcmVhZGluZyB0aGUgbWFjcm8KKyUgYm9keSwgYW5kIHRoZW4gbWFraW5nIGl0IHRoZSBcbmV3bGluZWNoYXIgaW4gXHNjYW5tYWNyby4KKworXGRlZlxzY2FuY3R4dHslCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcKz1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF49XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXH49XG90aGVyCit9CisKK1xkZWZcc2NhbmFyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk09XG90aGVyCit9CisKK1xkZWZcbWFjcm9ib2R5Y3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcez1cb3RoZXIKKyAgXGNhdGNvZGVgXH09XG90aGVyCisgIFxjYXRjb2RlYFxeXk09XG90aGVyCisgIFx1c2VtYm9keWJhY2tzbGFzaAorfQorCitcZGVmXG1hY3JvYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKK30KKworJSBcbWJvZHliYWNrc2xhc2ggaXMgdGhlIGRlZmluaXRpb24gb2YgXCBpbiBAbWFjcm8gYm9kaWVzLgorJSBJdCBtYXBzIFxmb29cID0+IFxjc25hbWUgbWFjYXJnLmZvb1xlbmRjc25hbWUgPT4gI04KKyUgd2hlcmUgTiBpcyB0aGUgbWFjcm8gcGFyYW1ldGVyIG51bWJlci4KKyUgV2UgZGVmaW5lIFxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWUgdG8gYmUgXHJlYWxiYWNrc2xhc2gsIHNvCislIFxcIGluIG1hY3JvIHJlcGxhY2VtZW50IHRleHQgZ2V0cyB5b3UgYSBiYWNrc2xhc2guCisKK3tcY2F0Y29kZWBAPTAgQGNhdGNvZGVgQFw9QGFjdGl2ZQorIEBnZGVmQHVzZW1ib2R5YmFja3NsYXNoe0BsZXRcPUBtYm9keWJhY2tzbGFzaH0KKyBAZ2RlZkBtYm9keWJhY2tzbGFzaCMxXHtAY3NuYW1lIG1hY2FyZy4jMUBlbmRjc25hbWV9Cit9CitcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZXtccmVhbGJhY2tzbGFzaH0KKworXGRlZlxtYWNyb3tccmVjdXJzaXZlZmFsc2VccGFyc2VhcmdcbWFjcm94eHh9CitcZGVmXHJtYWNyb3tccmVjdXJzaXZldHJ1ZVxwYXJzZWFyZ1xtYWNyb3h4eH0KKworXGRlZlxtYWNyb3h4eCMxeyUKKyAgXGdldGFyZ3N7IzF9JSAgICAgICAgICAgbm93IFxtYWNuYW1lIGlzIHRoZSBtYWNuYW1lIGFuZCBcYXJnbCB0aGUgYXJnbGlzdAorICBcaWZ4XGFyZ2xcZW1wdHkgICAgICAgJSBubyBhcmd1bWVudHMKKyAgICAgXHBhcmFtbm89MCUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXHBhcnNlbWFyZ2RlZiBcYXJnbDslCisgIFxmaQorICBcaWYxXGNzbmFtZSBpc21hY3JvLlx0aGVcbWFjbmFtZVxlbmRjc25hbWUKKyAgICAgXG1lc3NhZ2V7V2FybmluZzogcmVkZWZpbmluZyBcdGhlXG1hY25hbWV9JQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBcdGhlXG1hY25hbWVcZW5kY3NuYW1lIFxyZWxheAorICAgICBcZWxzZSBcZXJybWVzc2FnZXtNYWNybyBuYW1lIFx0aGVcbWFjbmFtZVxzcGFjZSBhbHJlYWR5IGRlZmluZWR9XGZpCisgICAgIFxnbG9iYWxcY3NsZXR7bWFjc2F2ZS5cdGhlXG1hY25hbWV9e1x0aGVcbWFjbmFtZX0lCisgICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBpc21hY3JvLlx0aGVcbWFjbmFtZVxlbmRjc25hbWU9MSUKKyAgICAgXGFkZHRvbWFjcm9saXN0e1x0aGVcbWFjbmFtZX0lCisgIFxmaQorICBcYmVnaW5ncm91cCBcbWFjcm9ib2R5Y3R4dAorICBcaWZyZWN1cnNpdmUgXGV4cGFuZGFmdGVyXHBhcnNlcm1hY2JvZHkKKyAgXGVsc2UgXGV4cGFuZGFmdGVyXHBhcnNlbWFjYm9keQorICBcZml9CisKK1xwYXJzZWFyZ2RlZlx1bm1hY3JveyUKKyAgXGlmMVxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWUKKyAgICBcZ2xvYmFsXGNzbGV0eyMxfXttYWNzYXZlLiMxfSUKKyAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldCBcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lPTAlCisgICAgJSBSZW1vdmUgdGhlIG1hY3JvIG5hbWUgZnJvbSBcbWFjcm9saXN0OgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMxXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgIFxsZXRcZGVmaW5lZHVtbXl3b3JkXHVubWFjcm9kbworICAgICAgXHhkZWZcbWFjcm9saXN0e1xtYWNyb2xpc3R9JQorICAgIFxlbmRncm91cAorICBcZWxzZQorICAgIFxlcnJtZXNzYWdle01hY3JvICMxIG5vdCBkZWZpbmVkfSUKKyAgXGZpCit9CisKKyUgQ2FsbGVkIGJ5IFxkbyBmcm9tIFxkb3VubWFjcm8gb24gZWFjaCBtYWNyby4gIFRoZSBpZGVhIGlzIHRvIG9taXQgYW55CislIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gXHJlbGF4LgorJQorXGRlZlx1bm1hY3JvZG8jMXslCisgIFxpZnggIzFccmVsYXgKKyAgICAlIHJlbW92ZSB0aGlzCisgIFxlbHNlCisgICAgXG5vZXhwYW5kXGRlZmluZWR1bW15d29yZCBcbm9leHBhbmQjMSUKKyAgXGZpCit9CisKKyUgVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIG9ic2N1cmUgZmVhdHVyZSB0aGF0IGlmIHRoZSBsYXN0IHRva2VuIG9mIGEKKyUgPHBhcmFtZXRlciBsaXN0PiBpcyAjLCB0aGVuIHRoZSBwcmVjZWRpbmcgYXJndW1lbnQgaXMgZGVsaW1pdGVkIGJ5CislIGFuIG9wZW5pbmcgYnJhY2UsIGFuZCB0aGF0IG9wZW5pbmcgYnJhY2UgaXMgbm90IGNvbnN1bWVkLgorXGRlZlxnZXRhcmdzIzF7XGdldGFyZ3N4eHgjMXt9fQorXGRlZlxnZXRhcmdzeHh4IzEje1xnZXRtYWNuYW1lICMxIFxyZWxheFxnZXRtYWNhcmdzfQorXGRlZlxnZXRtYWNuYW1lICMxICMyXHJlbGF4e1xtYWNuYW1lPXsjMX19CitcZGVmXGdldG1hY2FyZ3MjMXtcZGVmXGFyZ2x7IzF9fQorCislIFBhcnNlIHRoZSBvcHRpb25hbCB7cGFyYW1zfSBsaXN0LiAgU2V0IHVwIFxwYXJhbW5vIGFuZCBccGFyYW1saXN0CislIHNvIFxkZWZtYWNybyBrbm93cyB3aGF0IHRvIGRvLiAgRGVmaW5lIFxtYWNhcmcuYmxhaCBmb3IgZWFjaCBibGFoCislIGluIHRoZSBwYXJhbXMgbGlzdCwgdG8gYmUgIyNOIHdoZXJlIE4gaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQgbGlzdC4KKyUgVGhhdCBnZXRzIHVzZWQgYnkgXG1ib2R5YmFja3NsYXNoIChhYm92ZSkuCisKKyUgV2UgbmVlZCB0byBnZXQgYG1hY3JvIHBhcmFtZXRlciBjaGFyICMnIGludG8gc2V2ZXJhbCBkZWZpbml0aW9ucy4KKyUgVGhlIHRlY2huaXF1ZSB1c2VkIGlzIHN0b2xlbiBmcm9tIExhVGVYOiAgbGV0IFxoYXNoIGJlIHNvbWV0aGluZworJSB1bmV4cGFuZGFibGUsIGluc2VydCB0aGF0IHdoZXJldmVyIHlvdSBuZWVkIGEgIywgYW5kIHRoZW4gcmVkZWZpbmUKKyUgaXQgdG8gIyBqdXN0IGJlZm9yZSB1c2luZyB0aGUgdG9rZW4gbGlzdCBwcm9kdWNlZC4KKyUKKyUgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgdG8gcHJvdGVjdCBcZWF0c3BhY2VzIHRpbGwganVzdCBiZWZvcmUKKyUgdGhlIG1hY3JvIGlzIHVzZWQuCisKK1xkZWZccGFyc2VtYXJnZGVmIzE7e1xwYXJhbW5vPTBcZGVmXHBhcmFtbGlzdHt9JQorICAgICAgICBcbGV0XGhhc2hccmVsYXhcbGV0XHhlYXRzcGFjZXNccmVsYXhccGFyc2VtYXJnZGVmeHh4IzEsOyx9CitcZGVmXHBhcnNlbWFyZ2RlZnh4eCMxLHslCisgIFxpZiMxO1xsZXRcbmV4dD1ccmVsYXgKKyAgXGVsc2UgXGxldFxuZXh0PVxwYXJzZW1hcmdkZWZ4eHgKKyAgICBcYWR2YW5jZVxwYXJhbW5vIGJ5IDElCisgICAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIG1hY2FyZy5cZWF0c3BhY2VzeyMxfVxlbmRjc25hbWUKKyAgICAgICAge1x4ZWF0c3BhY2Vze1xoYXNoXHRoZVxwYXJhbW5vfX0lCisgICAgXGVkZWZccGFyYW1saXN0e1xwYXJhbWxpc3RcaGFzaFx0aGVccGFyYW1ubyx9JQorICBcZmlcbmV4dH0KKworJSBUaGVzZSB0d28gY29tbWFuZHMgcmVhZCByZWN1cnNpdmUgYW5kIG5vbnJlY3Vyc2l2ZSBtYWNybyBib2RpZXMuCislIChUaGV5J3JlIGRpZmZlcmVudCBzaW5jZSByZWMgYW5kIG5vbnJlYyBtYWNyb3MgZW5kIGRpZmZlcmVudGx5LikKKworXGxvbmdcZGVmXHBhcnNlbWFjYm9keSMxQGVuZCBtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKK1xsb25nXGRlZlxwYXJzZXJtYWNib2R5IzFAZW5kIHJtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKKworJSBUaGlzIGRlZmluZXMgdGhlIG1hY3JvIGl0c2VsZi4gVGhlcmUgYXJlIHNpeCBjYXNlczogcmVjdXJzaXZlIGFuZAorJSBub25yZWN1cnNpdmUgbWFjcm9zIG9mIHplcm8sIG9uZSwgYW5kIG1hbnkgYXJndW1lbnRzLgorJSBNdWNoIG1hZ2ljIHdpdGggXGV4cGFuZGFmdGVyIGhlcmUuCislIFx4ZGVmIGlzIHVzZWQgc28gdGhhdCBtYWNybyBkZWZpbml0aW9ucyB3aWxsIHN1cnZpdmUgdGhlIGZpbGUKKyUgdGhleSdyZSBkZWZpbmVkIGluOyBAaW5jbHVkZSByZWFkcyB0aGUgZmlsZSBpbnNpZGUgYSBncm91cC4KK1xkZWZcZGVmbWFjcm97JQorICBcbGV0XGhhc2g9IyMlIGNvbnZlcnQgcGxhY2Vob2xkZXJzIHRvIG1hY3JvIHBhcmFtZXRlciBjaGFycworICBcaWZyZWN1cnNpdmUKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgXGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgICAgICBccGFyYW1saXN0e1xlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgXGVncm91cAorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgXHBhcmFtbGlzdHslCisgICAgICAgICAgXGVncm91cAorICAgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxmaQorICBcZml9CisKK1xkZWZcbm9yZWN1cnNlIzF7XGJncm91cFxjc2xldHsjMX17bWFjc2F2ZS4jMX19CisKKyUgXGJyYWNlb3JsaW5lIGRlY2lkZXMgd2hldGhlciB0aGUgbmV4dCBub253aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhCislIHsuICBJZiBzbyBpdCByZWFkcyB1cCB0byB0aGUgY2xvc2luZyB9LCBpZiBub3QsIGl0IHJlYWRzIHRoZSB3aG9sZQorJSBsaW5lLiAgV2hhdGV2ZXIgd2FzIHJlYWQgaXMgdGhlbiBmZWQgdG8gdGhlIG5leHQgY29udHJvbCBzZXF1ZW5jZQorJSBhcyBhbiBhcmd1bWVudCAoYnkgXHBhcnNlYnJhY2Ugb3IgXHBhcnNlYXJnKQorXGRlZlxicmFjZW9ybGluZSMxe1xsZXRcbWFjbmFtZXh4eD0jMVxmdXR1cmVsZXRcbmNoYXJcYnJhY2VvcmxpbmV4eHh9CitcZGVmXGJyYWNlb3JsaW5leHh4eyUKKyAgXGlmeFxuY2hhclxiZ3JvdXBcZWxzZQorICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZworICBcZmkgXG1hY25hbWV4eHh9CisKKworJSBAYWxpYXMuCislIFdlIG5lZWQgc29tZSB0cmlja2VyeSB0byByZW1vdmUgdGhlIG9wdGlvbmFsIHNwYWNlcyBhcm91bmQgdGhlIGVxdWFsCislIHNpZ24uICBKdXN0IG1ha2UgdGhlbSBhY3RpdmUgYW5kIHRoZW4gZXhwYW5kIHRoZW0gYWxsIHRvIG5vdGhpbmcuCitcZGVmXGFsaWFze1xwYXJzZWFyZ3VzaW5nXG9iZXlzcGFjZXNcYWxpYXN4eHh9CitcZGVmXGFsaWFzeHh4ICMxe1xhbGlhc3l5eSMxXHJlbGF4fQorXGRlZlxhbGlhc3l5eSAjMT0jMlxyZWxheHslCisgIHslCisgICAgXGV4cGFuZGFmdGVyXGxldFxvYmV5ZWRzcGFjZT1cZW1wdHkKKyAgICBcYWRkdG9tYWNyb2xpc3R7IzF9JQorICAgIFx4ZGVmXG5leHR7XGdsb2JhbFxsZXRcbWFrZWNzbmFtZXsjMX09XG1ha2Vjc25hbWV7IzJ9fSUKKyAgfSUKKyAgXG5leHQKK30KKworCitcbWVzc2FnZXtjcm9zcyByZWZlcmVuY2VzLH0KKworXG5ld3dyaXRlXGF1eGZpbGUKKworXG5ld2lmXGlmaGF2ZXhyZWZzICAgICUgVHJ1ZSBpZiB4cmVmIHZhbHVlcyBhcmUga25vd24uCitcbmV3aWZcaWZ3YXJuZWR4cmVmcyAgJSBUcnVlIGlmIHdlIHdhcm5lZCBvbmNlIHRoYXQgdGhleSBhcmVuJ3Qga25vd24uCisKKyUgQGluZm9yZWYgaXMgcmVsYXRpdmVseSBzaW1wbGUuCitcZGVmXGluZm9yZWYgIzF7XGluZm9yZWZ6enogIzEsLCwsKip9CitcZGVmXGluZm9yZWZ6enogIzEsIzIsIzMsIzQqKntccHV0d29yZFNlZXt9IFxwdXR3b3JkSW5mb3t9IFxwdXR3b3JkZmlsZXt9IFxmaWxle1xpZ25vcmVzcGFjZXMgIzN7fX0sCisgIG5vZGUgXHNhbXB7XGlnbm9yZXNwYWNlcyMxe319fQorCislIEBub2RlJ3Mgb25seSBqb2IgaW4gVGVYIGlzIHRvIGRlZmluZSBcbGFzdG5vZGUsIHdoaWNoIGlzIHVzZWQgaW4KKyUgY3Jvc3MtcmVmZXJlbmNlcy4gIFRoZSBAbm9kZSBsaW5lIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGNvbW1hcywgYW5kCislIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIHNwYWNlcyBiZWZvcmUgdGhlIGZpcnN0IGNvbW1hLCBsaWtlOgorJSBAbm9kZSBmb28gLCBiYXIgLCAuLi4KKyUgV2UgZG9uJ3Qgd2FudCBzdWNoIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgbm9kZSBuYW1lLgorJQorXHBhcnNlYXJnZGVmXG5vZGV7XGNoZWNrZW52e31cZG9ub2RlICMxICxcZmluaXNobm9kZXBhcnNlfQorJQorJSBhbHNvIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1hLCBpbiBjYXNlIG9mIHNvbWV0aGluZyBsaWtlIHRoaXM6CislIEBub2RlIEhlbHAtQ3Jvc3MsICAsICAsIENyb3NzLXJlZnMKK1xkZWZcZG9ub2RlIzEgLCMyXGZpbmlzaG5vZGVwYXJzZXtcZG9kb25vZGUgIzEsXGZpbmlzaG5vZGVwYXJzZX0KK1xkZWZcZG9kb25vZGUjMSwjMlxmaW5pc2hub2RlcGFyc2V7XGdkZWZcbGFzdG5vZGV7IzF9fQorCitcbGV0XG53bm9kZT1cbm9kZQorXGxldFxsYXN0bm9kZT1cZW1wdHkKKworJSBXcml0ZSBhIGNyb3NzLXJlZmVyZW5jZSBkZWZpbml0aW9uIGZvciB0aGUgY3VycmVudCBub2RlLiAgIzEgaXMgdGhlCislIHR5cGUgKFludW1iZXJlZCwgWWFwcGVuZGl4LCBZbm90aGluZykuCislCitcZGVmXGRvbm9kZXJlZiMxeyUKKyAgXGlmeFxsYXN0bm9kZVxlbXB0eVxlbHNlCisgICAgXHNldHJlZntcbGFzdG5vZGV9eyMxfSUKKyAgICBcZ2xvYmFsXGxldFxsYXN0bm9kZT1cZW1wdHkKKyAgXGZpCit9CisKKyUgQGFuY2hvcntOQU1FfSAtLSBkZWZpbmUgeHJlZiB0YXJnZXQgYXQgYXJiaXRyYXJ5IHBvaW50LgorJQorXG5ld2NvdW50XHNhdmVzZnJlZ2lzdGVyCislCitcZGVmXHNhdmVzZntccmVsYXggXGlmaG1vZGUgXHNhdmVzZnJlZ2lzdGVyPVxzcGFjZWZhY3RvciBcZml9CitcZGVmXHJlc3RvcmVzZntccmVsYXggXGlmaG1vZGUgXHNwYWNlZmFjdG9yPVxzYXZlc2ZyZWdpc3RlciBcZml9CitcZGVmXGFuY2hvciMxe1xzYXZlc2YgXHNldHJlZnsjMX17WW5vdGhpbmd9XHJlc3RvcmVzZiBcaWdub3Jlc3BhY2VzfQorCislIFxzZXRyZWZ7TkFNRX17U05UfSBkZWZpbmVzIGEgY3Jvc3MtcmVmZXJlbmNlIHBvaW50IE5BTUUgKGEgbm9kZSBvciBhbgorJSBhbmNob3IpLCB3aGljaCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0czoKKyUgMSkgTkFNRS10aXRsZSAtIHRoZSBjdXJyZW50IHNlY3Rpb25pbmcgbmFtZSB0YWtlbiBmcm9tIFx0aGlzc2VjdGlvbiwKKyUgICAgICAgICAgICAgICAgIG9yIHRoZSBhbmNob3IgbmFtZS4KKyUgMikgTkFNRS1zbnQgICAtIHNlY3Rpb24gbnVtYmVyIGFuZCB0eXBlLCBwYXNzZWQgYXMgdGhlIFNOVCBhcmcsIG9yCislICAgICAgICAgICAgICAgICBlbXB0eSBmb3IgYW5jaG9ycy4KKyUgMykgTkFNRS1wZyAgICAtIHRoZSBwYWdlIG51bWJlci4KKyUKKyUgVGhpcyBpcyBjYWxsZWQgZnJvbSBcZG9ub2RlcmVmLCBcYW5jaG9yLCBhbmQgXGRvZmxvYXQuICBJbiB0aGUgY2FzZSBvZgorJSBmbG9hdHMsIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcGFydCwgd2hpY2ggaXMgbm90IHdyaXR0ZW4gaGVyZToKKyUgNCkgTkFNRS1sb2YgICAtIHRoZSB0ZXh0IGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gYSBAbGlzdG9mZmxvYXRzLgorJQorXGRlZlxzZXRyZWYjMSMyeyUKKyAgXHBkZm1rZGVzdHsjMX0lCisgIFxpZmxpbmtzCisgICAgeyUKKyAgICAgIFxhdGR1bW1pZXMgICUgcHJlc2VydmUgY29tbWFuZHMsIGJ1dCBkb24ndCBleHBhbmQgdGhlbQorICAgICAgXGVkZWZcd3JpdGV4cmRlZiMjMSMjMnslCisJXHdyaXRlXGF1eGZpbGV7QHhyZGVmeyMxLSUgIzEgb2YgXHNldHJlZiwgZXhwYW5kZWQgYnkgdGhlIFxlZGVmCisJICAjIzF9eyMjMn19JSB0aGVzZSBhcmUgcGFyYW1ldGVycyBvZiBcd3JpdGV4cmRlZgorICAgICAgfSUKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhpc3NlY3Rpb259JQorICAgICAgXGltbWVkaWF0ZSBcd3JpdGV4cmRlZnt0aXRsZX17XHRoZVx0b2tzMCB9JQorICAgICAgXGltbWVkaWF0ZSBcd3JpdGV4cmRlZntzbnR9e1xjc25hbWUgIzJcZW5kY3NuYW1lfSUgXFludW1iZXJlZCBldGMuCisgICAgICBcd3JpdGV4cmRlZntwZ317XGZvbGlvfSUgd2lsbCBiZSB3cml0dGVuIGxhdGVyLCBkdXJpbmcgXHNoaXBvdXQKKyAgICB9JQorICBcZmkKK30KKworJSBAeHJlZiwgQHB4cmVmLCBhbmQgQHJlZiBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLiAgRm9yIFx4cmVmWCwgIzEgaXMKKyUgdGhlIG5vZGUgbmFtZSwgIzIgdGhlIG5hbWUgb2YgdGhlIEluZm8gY3Jvc3MtcmVmZXJlbmNlLCAjMyB0aGUgcHJpbnRlZAorJSBub2RlIG5hbWUsICM0IHRoZSBuYW1lIG9mIHRoZSBJbmZvIGZpbGUsICM1IHRoZSBuYW1lIG9mIHRoZSBwcmludGVkCislIG1hbnVhbC4gIEFsbCBidXQgdGhlIG5vZGUgbmFtZSBjYW4gYmUgb21pdHRlZC4KKyUKK1xkZWZccHhyZWYjMXtccHV0d29yZHNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmIzF7XHB1dHdvcmRTZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZccmVmIzF7XHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWZYWyMxLCMyLCMzLCM0LCM1LCM2XXtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXGRlZlxwcmludGVkbWFudWFse1xpZ25vcmVzcGFjZXMgIzV9JQorICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzN9JQorICBcc2V0Ym94MT1caGJveHtccHJpbnRlZG1hbnVhbFx1bnNraXB9JQorICBcc2V0Ym94MD1caGJveHtccHJpbnRlZHJlZm5hbWVcdW5za2lwfSUKKyAgXGlmZGltIFx3ZDAgPSAwcHQKKyAgICAlIE5vIHByaW50ZWQgbm9kZSBuYW1lIHdhcyBleHBsaWNpdGx5IGdpdmVuLgorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHhyZWYtYXV0b21hdGljLXNlY3Rpb24tdGl0bGVcZW5kY3NuYW1lXHJlbGF4CisgICAgICAlIFVzZSB0aGUgbm9kZSBuYW1lIGluc2lkZSB0aGUgc3F1YXJlIGJyYWNrZXRzLgorICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICBcZWxzZQorICAgICAgJSBVc2UgdGhlIGFjdHVhbCBjaGFwdGVyL3NlY3Rpb24gdGl0bGUgYXBwZWFyIGluc2lkZQorICAgICAgJSB0aGUgc3F1YXJlIGJyYWNrZXRzLiAgVXNlIHRoZSByZWFsIHNlY3Rpb24gdGl0bGUgaWYgd2UgaGF2ZSBpdC4KKyAgICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICAgICUgSXQgaXMgaW4gYW5vdGhlciBtYW51YWwsIHNvIHdlIGRvbid0IGhhdmUgaXQuCisgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgICAlIFdlIGtub3cgdGhlIHJlYWwgdGl0bGUgaWYgd2UgaGF2ZSB0aGUgeHJlZiB2YWx1ZXMuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtccmVmeHsjMS10aXRsZX17fX0lCisgICAgICAgIFxlbHNlCisgICAgICAgICAgJSBPdGhlcndpc2UganVzdCBjb3B5IHRoZSBJbmZvIG5vZGUgbmFtZS4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgICBcZmklCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgICUKKyAgJSBNYWtlIGxpbmsgaW4gcGRmIG91dHB1dC4KKyAgXGlmcGRmCisgICAgXGxlYXZldm1vZGUKKyAgICBcZ2V0ZmlsZW5hbWV7IzR9JQorICAgIHtcdHVybm9mZmFjdGl2ZQorICAgICAlIFNlZSBjb21tZW50cyBhdCBcYWN0aXZlYmFja3NsYXNoZG91YmxlLgorICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZ4cmVmZGVzdHsjMX0lCisgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZnhyZWZkZXN0fSUKKyAgICAgJQorICAgICBcaWZudW1cZmlsZW5hbWVsZW5ndGg+MAorICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICAgZ290byBmaWxle1x0aGVcZmlsZW5hbWUucGRmfSBuYW1le1xwZGZ4cmVmZGVzdH0lCisgICAgIFxlbHNlCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZ4cmVmZGVzdH19JQorICAgICBcZmkKKyAgICB9JQorICAgIFxsaW5rY29sb3IKKyAgXGZpCisgICUKKyAgJSBGbG9hdCByZWZlcmVuY2VzIGFyZSBwcmludGVkIGNvbXBsZXRlbHkgZGlmZmVyZW50bHk6ICJGaWd1cmUgMS4yIgorICAlIGluc3RlYWQgb2YgIltzb21lbm9kZV0sIHAuMyIuICBXZSBkaXN0aW5ndWlzaCB0aGVtIGJ5IHRoZQorICAlIExBQkVMLXRpdGxlIGJlaW5nIHNldCB0byBhIG1hZ2ljIHN0cmluZy4KKyAgeyUKKyAgICAlIEhhdmUgdG8gb3RoZXJpZnkgZXZlcnl0aGluZyBzcGVjaWFsIHRvIGFsbG93IHRoZSBcY3NuYW1lIHRvCisgICAgJSBpbmNsdWRlIGFuIF8gaW4gdGhlIHhyZWYgbmFtZSwgZXRjLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXFh0aGlzcmVmdGl0bGUKKyAgICAgIFxjc25hbWUgWFIjMS10aXRsZVxlbmRjc25hbWUKKyAgfSUKKyAgXGlmZmxvYXRcWHRoaXNyZWZ0aXRsZQorICAgICUgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBwcmludCBuYW1lICh0aGlyZCBhcmcpIHRvIHRoZSByZWYsCisgICAgJSBwcmludCBpdCBpbnN0ZWFkIG9mIG91ciB1c3VhbCAiRmlndXJlIDEuMiIuCisgICAgXGlmZGltXHdkMCA9IDBwdAorICAgICAgXHJlZnh7IzEtc250fXt9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRzZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGdkZWZcY3NuYW1lIFhSIzFcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmIHZhbHVlLgorICAlCisgICUgV2FzIHRoYXQgeHJlZiBjb250cm9sIHNlcXVlbmNlIHRoYXQgd2UganVzdCBkZWZpbmVkIGZvciBhIGZsb2F0PworICBcZXhwYW5kYWZ0ZXJcaWZmbG9hdFxjc25hbWUgWFIjMVxlbmRjc25hbWUKKyAgICAlIGl0IHdhcyBhIGZsb2F0LCBhbmQgd2UgaGF2ZSB0aGUgKHNhZmUpIGZsb2F0IHR5cGUgaW4gXGlmZmxvYXR0eXBlLgorICAgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcZmxvYXRsaXN0CisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICAlCisgICAgJSBJcyB0aGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBmbG9hdCB0eXBlPworICAgIFxleHBhbmRhZnRlclxpZnhcZmxvYXRsaXN0XHJlbGF4CisgICAgICBcdG9rczAgPSB7XGRvfSUgeWVzLCBzbyBqdXN0IFxkbworICAgIFxlbHNlCisgICAgICAlIGhhZCBpdCBiZWZvcmUsIHNvIHByZXNlcnZlIHByZXZpb3VzIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XGZsb2F0bGlzdFxkb30lCisgICAgXGZpCisgICAgJQorICAgICUgUmVtZW1iZXIgdGhpcyB4cmVmIGluIHRoZSBjb250cm9sIHNlcXVlbmNlIFxmbG9hdGxpc3RGTE9BVFRZUEUsCisgICAgJSBmb3IgbGF0ZXIgdXNlIGluIFxsaXN0b2ZmbG9hdHMuCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWV7XHRoZVx0b2tzMHsjMX19JQorICBcZmkKK30KKworJSBSZWFkIHRoZSBsYXN0IGV4aXN0aW5nIGF1eCBmaWxlLCBpZiBhbnkuICBObyBlcnJvciBpZiBub25lIGV4aXN0cy4KKyUKK1xkZWZcdHJ5YXV4ZmlsZXslCisgIFxvcGVuaW4gMSBcam9ibmFtZS5hdXgKKyAgXGlmZW9mIDEgXGVsc2UKKyAgICBccmVhZGRhdGFmaWxle2F1eH0lCisgICAgXGdsb2JhbFxoYXZleHJlZnN0cnVlCisgIFxmaQorICBcY2xvc2VpbiAxCit9CisKK1xkZWZcc2V0dXBkYXRhZmlsZXslCisgIFxjYXRjb2RlYFxeXkA9XG90aGVyCisgIFxjYXRjb2RlYFxeXkE9XG90aGVyCisgIFxjYXRjb2RlYFxeXkI9XG90aGVyCisgIFxjYXRjb2RlYFxeXkM9XG90aGVyCisgIFxjYXRjb2RlYFxeXkQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXkU9XG90aGVyCisgIFxjYXRjb2RlYFxeXkY9XG90aGVyCisgIFxjYXRjb2RlYFxeXkc9XG90aGVyCisgIFxjYXRjb2RlYFxeXkg9XG90aGVyCisgIFxjYXRjb2RlYFxeXks9XG90aGVyCisgIFxjYXRjb2RlYFxeXkw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk49XG90aGVyCisgIFxjYXRjb2RlYFxeXlA9XG90aGVyCisgIFxjYXRjb2RlYFxeXlE9XG90aGVyCisgIFxjYXRjb2RlYFxeXlI9XG90aGVyCisgIFxjYXRjb2RlYFxeXlM9XG90aGVyCisgIFxjYXRjb2RlYFxeXlQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXlU9XG90aGVyCisgIFxjYXRjb2RlYFxeXlY9XG90aGVyCisgIFxjYXRjb2RlYFxeXlc9XG90aGVyCisgIFxjYXRjb2RlYFxeXlg9XG90aGVyCisgIFxjYXRjb2RlYFxeXlo9XG90aGVyCisgIFxjYXRjb2RlYFxeXls9XG90aGVyCisgIFxjYXRjb2RlYFxeXlw9XG90aGVyCisgIFxjYXRjb2RlYFxeXl09XG90aGVyCisgIFxjYXRjb2RlYFxeXl49XG90aGVyCisgIFxjYXRjb2RlYFxeXl89XG90aGVyCisgICUgSXQgd2FzIHN1Z2dlc3RlZCB0byBzZXQgdGhlIGNhdGNvZGUgb2YgXiB0byA3LCB3aGljaCB3b3VsZCBhbGxvdyBeXmU0IGV0Yy4KKyAgJSBpbiB4cmVmIHRhZ3MsIGkuZS4sIG5vZGUgbmFtZXMuICBCdXQgc2luY2UgXl5lNCBub3RhdGlvbiBpc24ndAorICAlIHN1cHBvcnRlZCBpbiB0aGUgbWFpbiB0ZXh0LCBpdCBkb2Vzbid0IHNlZW0gZGVzaXJhYmxlLiAgRnVydGhlcm1vcmUsCisgICUgdGhhdCBpcyBub3QgZW5vdWdoOiBmb3Igbm9kZSBuYW1lcyB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gYSBeCisgICUgY2hhcmFjdGVyLCB3ZSB3b3VsZCBlbmQgdXAgd3JpdGluZyBhIGxpbmUgbGlrZSB0aGlzOiAneHJkZWYgeydoYXQKKyAgJSBiLXRpdGxlfXsnaGF0IGJ9IGFuZCBceHJkZWYgZG9lcyBhIFxjc25hbWUuLi5cZW5kY3NuYW1lIG9uIHRoZSBmaXJzdAorICAlIGFyZ3VtZW50LCBhbmQgXGhhdCBpcyBub3QgYW4gZXhwYW5kYWJsZSBjb250cm9sIHNlcXVlbmNlLiAgSXQgY291bGQKKyAgJSBhbGwgYmUgd29ya2VkIG91dCwgYnV0IHdoeT8gIEVpdGhlciB3ZSBzdXBwb3J0IF5eIG9yIHdlIGRvbid0LgorICAlCisgICUgVGhlIG90aGVyIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoaXMgd2FzIHRvIGRlZmluZSBcYXV4aGF0OgorICAlIFxkZWZcYXV4aGF0e1xkZWZeeydoYXQgfX0lIGV4dHJhIHNwYWNlIHNvIG9rIGlmIGZvbGxvd2VkIGJ5IGxldHRlcgorICAlIGFuZCB0aGVuIHRvIGNhbGwgXGF1eGhhdCBpbiBcc2V0cS4KKyAgJQorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgJQorICAlIFNwZWNpYWwgY2hhcmFjdGVycy4gIFNob3VsZCBiZSB0dXJuZWQgb2ZmIGFueXdheSwgYnV0Li4uCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcY2F0Y29kZWBcWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF09XG90aGVyCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXCQ9XG90aGVyCisgIFxjYXRjb2RlYFwjPVxvdGhlcgorICBcY2F0Y29kZWBcJj1cb3RoZXIKKyAgXGNhdGNvZGVgXCU9XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyICUgYXZvaWQgXCsgZm9yIHBhcmFub2lhIGV2ZW4gdGhvdWdoIHdlJ3ZlIHR1cm5lZCBpdCBvZmYKKyAgJQorICAlIFRoaXMgaXMgdG8gc3VwcG9ydCBcIGluIG5vZGUgbmFtZXMgYW5kIHRpdGxlcywgc2luY2UgdGhlIFwKKyAgJSBjaGFyYWN0ZXJzIGVuZCB1cCBpbiBhIFxjc25hbWUuICBJdCdzIGVhc2llciB0aGFuCisgICUgbGVhdmluZyBpdCBhY3RpdmUgYW5kIG1ha2luZyBpdHMgYWN0aXZlIGRlZmluaXRpb24gYW4gYWN0dWFsIFwKKyAgJSBjaGFyYWN0ZXIuICBXaGF0IEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyB3aHkgaXQgd29ya3MgaW4gdGhlICp2YWx1ZSoKKyAgJSBvZiB0aGUgeHJkZWYuICBTZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGNhdGNvZGUxMiBcLCBhbmQgdGhhdAorICAlIHNob3VsZCBub3QgdHlwZXNldCBwcm9wZXJseS4gIEJ1dCBpdCB3b3Jrcywgc28gSSdtIG1vdmluZyBvbiBmb3IKKyAgJSBub3cuICAtLWthcmwsIDE1amFuMDQuCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAlCisgICUgTWFrZSB0aGUgY2hhcmFjdGVycyAxMjgtMjU1IGJlIHByaW50aW5nIGNoYXJhY3RlcnMuCisgIHslCisgICAgXGNvdW50MT0xMjgKKyAgICBcZGVmXGxvb3B7JQorICAgICAgXGNhdGNvZGVcY291bnQxPVxvdGhlcgorICAgICAgXGFkdmFuY2VcY291bnQxIGJ5IDEKKyAgICAgIFxpZm51bSBcY291bnQxPDI1NiBcbG9vcCBcZmkKKyAgICB9JQorICB9JQorICAlCisgICUgQCBpcyBvdXIgZXNjYXBlIGNoYXJhY3RlciBpbiAuYXV4IGZpbGVzLCBhbmQgd2UgbmVlZCBicmFjZXMuCisgIFxjYXRjb2RlYFx7PTEKKyAgXGNhdGNvZGVgXH09MgorICBcY2F0Y29kZWBcQD0wCit9CisKK1xkZWZccmVhZGRhdGFmaWxlIzF7JQorXGJlZ2luZ3JvdXAKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGlucHV0XGpvYm5hbWUuIzEKK1xlbmRncm91cH0KKworXG1lc3NhZ2V7aW5zZXJ0aW9ucyx9CislIGluY2x1ZGluZyBmb290bm90ZXMuCisKK1xuZXdjb3VudCBcZm9vdG5vdGVubworCislIFRoZSB0cmFpbGluZyBzcGFjZSBpbiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gZm9yIHN1cGVyZWplY3QgaXMKKyUgdml0YWwgZm9yIHByb3BlciBmaWxsaW5nOyBwYWdlcyBjb21lIG91dCB1bmFsaWduZWQgd2hlbiB5b3UgZG8gYQorJSBwYWdlYWxpZ25tYWNybyBjYWxsIGlmIHRoYXQgc3BhY2UgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlIGlzCislIHJlbW92ZWQuIChHZW5lcmFsbHksIG51bWVyaWMgY29uc3RhbnRzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgYQorJSBzcGFjZSB0byBwcmV2ZW50IHN0cmFuZ2UgZXhwYW5zaW9uIGVycm9ycy4pCitcZGVmXHN1cGVyZWplY3R7XHBhclxwZW5hbHR5IC0yMDAwMFxmb290bm90ZW5vID0wIH0KKworJSBAZm9vdG5vdGVzdHlsZSBpcyBtZWFuaW5nZnVsIGZvciBpbmZvIG91dHB1dCBvbmx5LgorXGxldFxmb290bm90ZXN0eWxlPVxjb21tZW50CisKK3tcY2F0Y29kZSBgXEA9MTEKKyUKKyUgQXV0by1udW1iZXIgZm9vdG5vdGVzLiAgT3RoZXJ3aXNlIGxpa2UgcGxhaW4uCitcZ2RlZlxmb290bm90ZXslCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcZ2xvYmFsXGFkdmFuY2VcZm9vdG5vdGVubyBieSBcQG5lCisgIFxlZGVmXHRoaXNmb290bm97JF57XHRoZVxmb290bm90ZW5vfSR9JQorICAlCisgICUgSW4gY2FzZSB0aGUgZm9vdG5vdGUgY29tZXMgYXQgdGhlIGVuZCBvZiBhIHNlbnRlbmNlLCBwcmVzZXJ2ZSB0aGUKKyAgJSBleHRyYSBzcGFjaW5nIGFmdGVyIHdlIGRvIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFxsZXRcQHNmXGVtcHR5CisgIFxpZmhtb2RlXGVkZWZcQHNme1xzcGFjZWZhY3Rvclx0aGVcc3BhY2VmYWN0b3J9XHB0ZXhzbGFzaFxmaQorICAlCisgICUgUmVtb3ZlIGluYWR2ZXJ0ZW50IGJsYW5rIHNwYWNlIGJlZm9yZSB0eXBlc2V0dGluZyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcdW5za2lwCisgIFx0aGlzZm9vdG5vXEBzZgorICBcZG9mb290bm90ZQorfSUKKworJSBEb24ndCBib3RoZXIgd2l0aCB0aGUgdHJpY2tlcnkgaW4gcGxhaW4udGV4IHRvIG5vdCByZXF1aXJlIHRoZQorJSBmb290bm90ZSB0ZXh0IGFzIGEgcGFyYW1ldGVyLiAgT3VyIGZvb3Rub3RlcyBkb24ndCBuZWVkIHRvIGJlIHNvIGdlbmVyYWwuCislCislIE9oIHllcywgdGhleSBkbzsgb3RoZXJ3aXNlLCBAaWZzZXQgKGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcworJSBccGFyc2VhcmdsaW5lKSBmYWlscyBpbnNpZGUgZm9vdG5vdGVzIGJlY2F1c2UgdGhlIHRva2VucyBhcmUgZml4ZWQgd2hlbgorJSB0aGUgZm9vdG5vdGUgaXMgcmVhZC4gIC0ta2FybCwgMTZub3Y5Ni4KKyUKK1xnZGVmXGRvZm9vdG5vdGV7JQorICBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwCisgICUgV2Ugd2FudCB0byB0eXBlc2V0IHRoaXMgdGV4dCBhcyBhIG5vcm1hbCBwYXJhZ3JhcGgsIGV2ZW4gaWYgdGhlCisgICUgZm9vdG5vdGUgcmVmZXJlbmNlIG9jY3VycyBpbiAoZm9yIGV4YW1wbGUpIGEgZGlzcGxheSBlbnZpcm9ubWVudC4KKyAgJSBTbyByZXNldCBzb21lIHBhcmFtZXRlcnMuCisgIFxoc2l6ZT1ccGFnZXdpZHRoCisgIFxpbnRlcmxpbmVwZW5hbHR5XGludGVyZm9vdG5vdGVsaW5lcGVuYWx0eQorICBcc3BsaXR0b3Bza2lwXGh0XHN0cnV0Ym94ICUgdG9wIGJhc2VsaW5lIGZvciBicm9rZW4gZm9vdG5vdGVzCisgIFxzcGxpdG1heGRlcHRoXGRwXHN0cnV0Ym94CisgIFxmbG9hdGluZ3BlbmFsdHlcQE1NCisgIFxsZWZ0c2tpcFx6QHNraXAKKyAgXHJpZ2h0c2tpcFx6QHNraXAKKyAgXHNwYWNlc2tpcFx6QHNraXAKKyAgXHhzcGFjZXNraXBcekBza2lwCisgIFxwYXJpbmRlbnRcZGVmYXVsdHBhcmluZGVudAorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICAlCisgICUgQmVjYXVzZSB3ZSB1c2UgaGFuZ2luZyBpbmRlbnRhdGlvbiBpbiBmb290bm90ZXMsIGEgQG5vaW5kZW50IGFwcGVhcnMKKyAgJSB0byBleGRlbnQgdGhpcyB0ZXh0LCBzbyBtYWtlIGl0IGJlIGEgbm8tb3AuICBtYWtlaW5mbyBkb2VzIG5vdCB1c2UKKyAgJSBoYW5naW5nIGluZGVudGF0aW9uIHNvIEBub2luZGVudCBjYW4gc3RpbGwgYmUgbmVlZGVkIHdpdGhpbiBmb290bm90ZQorICAlIHRleHQgYWZ0ZXIgYW4gQGV4YW1wbGUgb3IgdGhlIGxpa2UgKG5vdCB0aGF0IHRoaXMgaXMgZ29vZCBzdHlsZSkuCisgIFxsZXRcbm9pbmRlbnQgPSBccmVsYXgKKyAgJQorICAlIEhhbmcgdGhlIGZvb3Rub3RlIHRleHQgb2ZmIHRoZSBudW1iZXIuICBVc2UgXGV2ZXJ5cGFyIGluIGNhc2UgdGhlCisgICUgZm9vdG5vdGUgZXh0ZW5kcyBmb3IgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGguCisgIFxldmVyeXBhciA9IHtcaGFuZ30lCisgIFx0ZXh0aW5kZW50e1x0aGlzZm9vdG5vfSUKKyAgJQorICAlIERvbid0IGNyYXNoIGludG8gdGhlIGxpbmUgYWJvdmUgdGhlIGZvb3Rub3RlIHRleHQuICBTaW5jZSB0aGlzCisgICUgZXhwYW5kcyBpbnRvIGEgYm94LCBpdCBtdXN0IGNvbWUgd2l0aGluIHRoZSBwYXJhZ3JhcGgsIGxlc3QgaXQKKyAgJSBwcm92aWRlIGEgcGxhY2Ugd2hlcmUgVGVYIGNhbiBzcGxpdCB0aGUgZm9vdG5vdGUuCisgIFxmb290c3RydXQKKyAgXGZ1dHVyZWxldFxuZXh0XGZvQHQKK30KK30lZW5kIFxjYXRjb2RlIGBcQD0xMQorCislIEluIGNhc2UgYSBAZm9vdG5vdGUgYXBwZWFycyBpbiBhIHZib3gsIHNhdmUgdGhlIGZvb3Rub3RlIHRleHQgYW5kIGNyZWF0ZQorJSB0aGUgcmVhbCBcaW5zZXJ0IGp1c3QgYWZ0ZXIgdGhlIHZib3ggZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24KKyUgd291bGQgYmUgbG9zdC4KKyUgU2ltaWxhcmlseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSB0ZXh0IHRvIGEgYm94IGFuZCBtYWtlIHRoZSBcaW5zZXJ0IHdoZW4gYSByb3cgb2YgdGhlIHRhYmxlIGlzIGZpbmlzaGVkLgorJSBBbmQgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIG90aGVyIGluc2VydCBjbGFzc2VzLiAgLS1rYXNhbCwgMTZub3YwMy4KKworJSBSZXBsYWNlIHRoZSBcaW5zZXJ0IHByaW1pdGl2ZSBieSBhIGNoZWF0aW5nIG1hY3JvLgorJSBEZWVwZXIgaW5zaWRlLCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBzYXZlZCBpbnNlcnRpb25zIGFyZSBub3Qgc3BpbGxlZAorJSBvdXQgcHJlbWF0dXJlbHkuCislCitcZGVmXHN0YXJ0c2F2aW5naW5zZXJ0c3slCisgIFxpZnggXGluc2VydFxwdGV4aW5zZXJ0CisgICAgXGxldFxpbnNlcnRcc2F2ZWluc2VydAorICBcZWxzZQorICAgIFxsZXRcY2hlY2tpbnNlcnRzXHJlbGF4CisgIFxmaQorfQorCislIFRoaXMgXGluc2VydCByZXBsYWNlbWVudCB3b3JrcyBmb3IgYm90aCBcaW5zZXJ0XGZvb3RpbnN7Zm9vfSBhbmQKKyUgXGluc2VydFxmb290aW5zXGJncm91cCBmb29cZWdyb3VwLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBcaW5zZXJ0Mjd7Zm9vfS4KKyUKK1xkZWZcc2F2ZWluc2VydCMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcc2F2ZXRvYm94IFxtYWtlU0FWRW5hbWUjMX0lCisgIFxhZnRlcmFzc2lnbm1lbnRcbmV4dAorICAlIHN3YWxsb3cgdGhlIGxlZnQgYnJhY2UKKyAgXGxldFx0ZW1wID0KK30KK1xkZWZcbWFrZVNBVkVuYW1lIzF7XG1ha2Vjc25hbWV7U0FWRVxleHBhbmRhZnRlclxnb2JibGVcc3RyaW5nIzF9fQorXGRlZlxzYXZldG9ib3gjMXtcZ2xvYmFsXHNldGJveCMxID0gXHZib3hcYmdyb3VwIFx1bnZib3gjMX0KKworXGRlZlxjaGVja3NhdmVpbnMjMXtcaWZ2b2lkIzFcZWxzZSBccGxhY2VzYXZlaW5zIzFcZml9CisKK1xkZWZccGxhY2VzYXZlaW5zIzF7JQorICBccHRleGluc2VydCBcY3NuYW1lXGV4cGFuZGFmdGVyXGdvYmJsZXNhdmVcc3RyaW5nIzFcZW5kY3NuYW1lCisgICAge1xib3gjMX0lCit9CisKKyUgZWF0IEBTQVZFIC0tIGJld2FyZSwgYWxsIG9mIHRoZW0gaGF2ZSBjYXRjb2RlIFxvdGhlcjoKK3sKKyAgXGRlZlxkb3NwZWNpYWxze1xkbyBTXGRvIEFcZG8gVlxkbyBFfSBcdW5jYXRjb2Rlc3BlY2lhbHMgICUgIDstKQorICBcZ2RlZlxnb2JibGVzYXZlIEBTQVZFe30KK30KKworJSBpbml0aWFsaXphdGlvbjoKK1xkZWZcbmV3c2F2ZWlucyAjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXG5ld3NhdmVpbnNYIFxtYWtlU0FWRW5hbWUjMX0lCisgIFxuZXh0Cit9CitcZGVmXG5ld3NhdmVpbnNYICMxeyUKKyAgXGNzbmFtZSBuZXdib3hcZW5kY3NuYW1lICMxJQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXGNoZWNraW5zZXJ0c1xleHBhbmRhZnRlcntcY2hlY2tpbnNlcnRzCisgICAgXGNoZWNrc2F2ZWlucyAjMX0lCit9CisKKyUgaW5pdGlhbGl6ZToKK1xsZXRcY2hlY2tpbnNlcnRzXGVtcHR5CitcbmV3c2F2ZWluc1xmb290aW5zCitcbmV3c2F2ZWluc1xtYXJnaW4KKworCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgICUgRG8gbm90IGJvdGhlciBzaG93aW5nIGJhbm5lciB3aXRoIGVwc2YudGV4IHYyLjdrIChhdmFpbGFibGUgaW4KKyAgJSBkb2MvZXBzZi50ZXggYW5kIG9uIGN0YW4pLgorICBcZGVmXGVwc2Zhbm5vdW5jZXtcdG9rczAgPSB9JQorICBcaW5wdXQgZXBzZi50ZXgKK1xmaQorXGNsb3NlaW4gMQorJQorJSBXZSB3aWxsIG9ubHkgY29tcGxhaW4gb25jZSBhYm91dCBsYWNrIG9mIGVwc2YudGV4LgorXG5ld2lmXGlmd2FybmVkbm9lcHNmCitcbmV3aGVscFxub2Vwc2ZoZWxwe2Vwc2YudGV4IG11c3QgYmUgaW5zdGFsbGVkIGZvciBpbWFnZXMgdG8KKyAgd29yay4gIEl0IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFRleGluZm8gZGlzdHJpYnV0aW9uLCBvciB5b3UgY2FuIGdldAorICBpdCBmcm9tIGZ0cDovL3R1Zy5vcmcvdGV4L2Vwc2YudGV4Ln0KKyUKK1xkZWZcaW1hZ2UjMXslCisgIFxpZnhcZXBzZmJveFx1bmRlZmluZWQKKyAgICBcaWZ3YXJuZWRub2Vwc2YgXGVsc2UKKyAgICAgIFxlcnJoZWxwID0gXG5vZXBzZmhlbHAKKyAgICAgIFxlcnJtZXNzYWdle2Vwc2YudGV4IG5vdCBmb3VuZCwgaW1hZ2VzIHdpbGwgYmUgaWdub3JlZH0lCisgICAgICBcZ2xvYmFsXHdhcm5lZG5vZXBzZnRydWUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaW1hZ2V4eHggIzEsLCwsLFxmaW5pc2gKKyAgXGZpCit9CislCislIEFyZ3VtZW50cyB0byBAaW1hZ2U6CislICMxIGlzIChtYW5kYXRvcnkpIGltYWdlIGZpbGVuYW1lOyB3ZSB0YWNrIG9uIC5lcHMgZXh0ZW5zaW9uLgorJSAjMiBpcyAob3B0aW9uYWwpIHdpZHRoLCAjMyBpcyAob3B0aW9uYWwpIGhlaWdodC4KKyUgIzQgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGh0bWwgYWx0IHRleHQuCislICM1IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBleHRlbnNpb24uCislICM2IGlzIGp1c3QgdGhlIHVzdWFsIGV4dHJhIGlnbm9yZWQgYXJnIGZvciBwYXJzaW5nIHRoaXMgc3R1ZmYuCitcbmV3aWZcaWZpbWFnZXZtb2RlCitcZGVmXGltYWdleHh4IzEsIzIsIzMsIzQsIzUsIzZcZmluaXNoe1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXk0gPSA1ICAgICAlIGluIGNhc2Ugd2UncmUgaW5zaWRlIGFuIGV4YW1wbGUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgYWxsb3cgXyBldCBhbC4gaW4gbmFtZXMKKyAgJSBJZiB0aGUgaW1hZ2UgaXMgYnkgaXRzZWxmLCBjZW50ZXIgaXQuCisgIFxpZnZtb2RlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXG5vYnJlYWtcYmlnc2tpcAorICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCisgICAgJSBhYm92ZSBhbmQgYmVsb3cuCisgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAorICAgIFxub2JyZWFrCisgICAgXGxpbmVcYmdyb3VwCisgIFxmaQorICAlCisgICUgT3V0cHV0IHRoZSBpbWFnZS4KKyAgXGlmcGRmCisgICAgXGRvcGRmaW1hZ2V7IzF9eyMyfXsjM30lCisgIFxlbHNlCisgICAgJSBcZXBzZmJveCBpdHNlbGYgcmVzZXRzIFxlcHNmP3NpemUgYXQgZWFjaCBmaWd1cmUuCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z4c2l6ZT0jMlxyZWxheCBcZmkKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnlzaXplPSMzXHJlbGF4IFxmaQorICAgIFxlcHNmYm94eyMxLmVwc30lCisgIFxmaQorICAlCisgIFxpZmltYWdldm1vZGUgXGVncm91cCBcYmlnYnJlYWsgXGZpICAlIHNwYWNlIGFmdGVyIHRoZSBpbWFnZQorXGVuZGdyb3VwfQorCisKKyUgQGZsb2F0IEZMT0FUVFlQRSxMQUJFTCxMT0MgLi4uIEBlbmQgZmxvYXQgZm9yIGRpc3BsYXllZCBmaWd1cmVzLCB0YWJsZXMsCislIGV0Yy4gIFdlIGRvbid0IGFjdHVhbGx5IGltcGxlbWVudCBmbG9hdGluZyB5ZXQsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZQorJSBmbG9hdCAiaGVyZSIuICBCdXQgaXQgc2VlbWVkIHRoZSBiZXN0IG5hbWUgZm9yIHRoZSBmdXR1cmUuCislCitcZW52cGFyc2VhcmdkZWZcZmxvYXR7XGVhdGNvbW1hc3BhY2VcZWF0Y29tbWFzcGFjZVxkb2Zsb2F0IzEsICwgLFxmaW5pc2h9CisKKyUgVGhlcmUgbWF5IGJlIGEgc3BhY2UgYmVmb3JlIHNlY29uZCBhbmQvb3IgdGhpcmQgcGFyYW1ldGVyOyBkZWxldGUgaXQuCitcZGVmXGVhdGNvbW1hc3BhY2UjMSwgeyMxLH0KKworJSAjMSBpcyB0aGUgb3B0aW9uYWwgRkxPQVRUWVBFLCB0aGUgdGV4dCBsYWJlbCBmb3IgdGhpcyBmbG9hdCwgdHlwaWNhbGx5CislICJGaWd1cmUiLCAiVGFibGUiLCAiRXhhbXBsZSIsIGV0Yy4gIENhbid0IGNvbnRhaW4gY29tbWFzLiAgSWYgb21pdHRlZCwKKyUgdGhpcyBmbG9hdCB3aWxsIG5vdCBiZSBudW1iZXJlZCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvLgorJQorJSAjMiBpcyB0aGUgb3B0aW9uYWwgeHJlZiBsYWJlbC4gIEFsc28gbXVzdCBiZSBwcmVzZW50IGZvciB0aGUgZmxvYXQgdG8KKyUgYmUgcmVmZXJhYmxlLgorJQorJSAjMyBpcyB0aGUgb3B0aW9uYWwgcG9zaXRpb25pbmcgYXJndW1lbnQ7IGZvciBub3csIGl0IGlzIGlnbm9yZWQuICBJdAorJSB3aWxsIHNvbWVob3cgc3BlY2lmeSB0aGUgcG9zaXRpb25zIGFsbG93ZWQgdG8gZmxvYXQgdG8gKGhlcmUsIHRvcCwgYm90dG9tKS4KKyUKKyUgV2Uga2VlcCBhIHNlcGFyYXRlIGNvdW50ZXIgZm9yIGVhY2ggRkxPQVRUWVBFLCB3aGljaCB3ZSByZXNldCBhdCBlYWNoCislIGNoYXB0ZXItbGV2ZWwgY29tbWFuZC4KK1xsZXRccmVzZXRhbGxmbG9hdG5vcz1cZW1wdHkKKyUKK1xkZWZcZG9mbG9hdCMxLCMyLCMzLCM0XGZpbmlzaHslCisgIFxsZXRcdGhpc2NhcHRpb249XGVtcHR5CisgIFxsZXRcdGhpc3Nob3J0Y2FwdGlvbj1cZW1wdHkKKyAgJQorICAlIGRvbid0IGxvc2UgZm9vdG5vdGVzIGluc2lkZSBAZmxvYXQuCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBXZSBjYW4ndCBiZSB1c2VkIGluc2lkZSBhIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgIFx2dG9wXGJncm91cAorICAgIFxkZWZcZmxvYXR0eXBleyMxfSUKKyAgICBcZGVmXGZsb2F0bGFiZWx7IzJ9JQorICAgIFxkZWZcZmxvYXRsb2N7IzN9JSB3ZSBkbyBub3RoaW5nIHdpdGggdGhpcyB5ZXQuCisgICAgJQorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5CisgICAgICBcbGV0XHNhZmVmbG9hdHR5cGU9XGVtcHR5CisgICAgXGVsc2UKKyAgICAgIHslCisgICAgICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICAgICAgXGluZGV4bm9mb250cworICAgICAgICBcdHVybm9mZmFjdGl2ZQorICAgICAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBsYWJlbCBpcyBnaXZlbiBidXQgbm8gdHlwZSwgd2UgaGFuZGxlIHRoYXQgYXMgdGhlIGVtcHR5IHR5cGUuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdlIHdhbnQgZWFjaCBGTE9BVFRZUEUgdG8gYmUgbnVtYmVyZWQgc2VwYXJhdGVseSAoRmlndXJlIDEsCisgICAgICAlIFRhYmxlIDEsIEZpZ3VyZSAyLCAuLi4pLiAgKEFuZCBpZiBubyBsYWJlbCwgbm8gbnVtYmVyLikKKyAgICAgICUKKyAgICAgIFxleHBhbmRhZnRlclxnZXRmbG9hdG5vXGNzbmFtZVxzYWZlZmxvYXR0eXBlIGZsb2F0bm9cZW5kY3NuYW1lCisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZmxvYXRubyBieSAxCisgICAgICAlCisgICAgICB7JQorICAgICAgICAlIFRoaXMgbWFnaWMgdmFsdWUgZm9yIFx0aGlzc2VjdGlvbiBpcyBvdXRwdXQgYnkgXHNldHJlZiBhcyB0aGUKKyAgICAgICAgJSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUuICBceHJlZlggdXNlcyBpdCB0byBkaXN0aW5ndWlzaCBmbG9hdAorICAgICAgICAlIGxhYmVscyAod2hpY2ggaGF2ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXQpIGZyb20KKyAgICAgICAgJSBub2RlIGFuZCBhbmNob3IgbGFiZWxzLiAgQW5kIFx4cmRlZiB1c2VzIGl0IHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgJSBsaXN0cyBvZiBmbG9hdHMuCisgICAgICAgICUKKyAgICAgICAgXGVkZWZcdGhpc3NlY3Rpb257XGZsb2F0bWFnaWM9XHNhZmVmbG9hdHR5cGV9JQorICAgICAgICBcc2V0cmVme1xmbG9hdGxhYmVsfXtZZmxvYXR9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBzdGFydCB3aXRoIFxwYXJza2lwIGdsdWUsIEkgZ3Vlc3MuCisgICAgXHZza2lwXHBhcnNraXAKKyAgICAlCisgICAgJSBEb24ndCBzdXBwcmVzcyBpbmRlbnRhdGlvbiBpZiBhIGZsb2F0IGhhcHBlbnMgdG8gc3RhcnQgYSBzZWN0aW9uLgorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSB3ZSBoYXZlIHRoZXNlIHBvc3NpYmlsaXRpZXM6CislIEBmbG9hdCBGb28sbGJsICYgQGNhcHRpb257Q2FwfTogRm9vIDEuMTogQ2FwCislIEBmbG9hdCBGb28sbGJsICYgbm8gY2FwdGlvbjogICAgRm9vIDEuMQorJSBAZmxvYXQgRm9vICYgQGNhcHRpb257Q2FwfTogICAgIEZvbzogQ2FwCislIEBmbG9hdCBGb28gJiBubyBjYXB0aW9uOiAgICAgICAgRm9vCislIEBmbG9hdCAsbGJsICYgQ2FwdGlvbntDYXB9OiAgICAgMS4xOiBDYXAKKyUgQGZsb2F0ICxsYmwgJiBubyBjYXB0aW9uOiAgICAgICAxLjEKKyUgQGZsb2F0ICYgQGNhcHRpb257Q2FwfTogICAgICAgICBDYXAKKyUgQGZsb2F0ICYgbm8gY2FwdGlvbjoKKyUKK1xkZWZcRWZsb2F0eyUKKyAgICBcbGV0XGZsb2F0aWRlbnQgPSBcZW1wdHkKKyAgICAlCisgICAgJSBJbiBhbGwgY2FzZXMsIGlmIHdlIGhhdmUgYSBmbG9hdCB0eXBlLCBpdCBjb21lcyBmaXJzdC4KKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSBcZGVmXGZsb2F0aWRlbnR7XGZsb2F0dHlwZX1cZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFuIHhyZWYgbGFiZWwsIHRoZSBudW1iZXIgY29tZXMgbmV4dC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlICUgaWYgYWxzbyBoYWQgZmxvYXQgdHlwZSwgbmVlZCB0aWUgZmlyc3QuCisgICAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XHRpZX0lCisgICAgICBcZmkKKyAgICAgICUgdGhlIG51bWJlci4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisgICAgXGZpCisgICAgJQorICAgICUgU3RhcnQgdGhlIHByaW50ZWQgY2FwdGlvbiB3aXRoIHdoYXQgd2UndmUgY29uc3RydWN0ZWQgaW4KKyAgICAlIFxmbG9hdGlkZW50LCBidXQga2VlcCBpdCBzZXBhcmF0ZTsgd2UgbmVlZCBcZmxvYXRpZGVudCBhZ2Fpbi4KKyAgICBcbGV0XGNhcHRpb25saW5lID0gXGZsb2F0aWRlbnQKKyAgICAlCisgICAgXGlmeFx0aGlzY2FwdGlvblxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdGlkZW50XGVtcHR5IFxlbHNlCisJXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7OiB9JSBoYWQgaWRlbnQsIHNvIG5lZWQgYSBjb2xvbiBiZXR3ZWVuCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgICUgY2FwdGlvbiB0ZXh0LgorICAgICAgXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7XHNjYW5leHBcdGhpc2NhcHRpb259JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gcHJpbnQsIHByaW50IGl0LCB3aXRoIHNwYWNlIGJlZm9yZS4KKyAgICAlIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZWNvbWUgYW4gXGluc2VydC4KKyAgICBcaWZ4XGNhcHRpb25saW5lXGVtcHR5IFxlbHNlCisgICAgICBcdnNraXAuNVxwYXJza2lwCisgICAgICBcY2FwdGlvbmxpbmUKKyAgICAgICUKKyAgICAgICUgU3BhY2UgYmVsb3cgY2FwdGlvbi4KKyAgICAgIFx2c2tpcFxwYXJza2lwCisgICAgXGZpCisgICAgJQorICAgICUgSWYgaGF2ZSBhbiB4cmVmIGxhYmVsLCB3cml0ZSB0aGUgbGlzdCBvZiBmbG9hdHMgaW5mby4gIERvIHRoaXMKKyAgICAlIGFmdGVyIHRoZSBjYXB0aW9uLCB0byBhdm9pZCBjaGFuY2Ugb2YgaXQgYmVpbmcgYSBicmVha3BvaW50LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXcml0ZSB0aGUgdGV4dCB0aGF0IGdvZXMgaW4gdGhlIGxvZiB0byB0aGUgYXV4IGZpbGUgYXMKKyAgICAgICUgXGZsb2F0bGFiZWwtbG9mLiAgQmVzaWRlcyBcZmxvYXRpZGVudCwgd2UgaW5jbHVkZSB0aGUgc2hvcnQKKyAgICAgICUgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2UgdGhlIGZ1bGwgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2Ugbm90aGluZy4KKyAgICAgIHslCisgICAgICAgIFxhdGR1bW1pZXMKKyAgICAgICAgJQorICAgICAgICAlIHNpbmNlIHdlIHJlYWQgdGhlIGNhcHRpb24gdGV4dCBpbiB0aGUgbWFjcm8gd29ybGQsIHdoZXJlIF5eTQorICAgICAgICAlIGlzIHR1cm5lZCBpbnRvIGEgbm9ybWFsIGNoYXJhY3Rlciwgd2UgaGF2ZSB0byBzY2FuIGl0IGJhY2ssIHNvCisgICAgICAgICUgd2UgZG9uJ3Qgd3JpdGUgdGhlIGxpdGVyYWwgdGhyZWUgY2hhcmFjdGVycyAiXl5NIiBpbnRvIHRoZSBhdXggZmlsZS4KKwlcc2NhbmV4cHslCisJICBceGRlZlxub2V4cGFuZFxndGVtcHslCisJICAgIFxpZnhcdGhpc3Nob3J0Y2FwdGlvblxlbXB0eQorCSAgICAgIFx0aGlzY2FwdGlvbgorCSAgICBcZWxzZQorCSAgICAgIFx0aGlzc2hvcnRjYXB0aW9uCisJICAgIFxmaQorCSAgfSUKKwl9JQorICAgICAgICBcaW1tZWRpYXRlXHdyaXRlXGF1eGZpbGV7QHhyZGVme1xmbG9hdGxhYmVsLWxvZn17XGZsb2F0aWRlbnQKKwkgIFxpZnhcZ3RlbXBcZW1wdHkgXGVsc2UgOiBcZ3RlbXAgXGZpfX0lCisgICAgICB9JQorICAgIFxmaQorICBcZWdyb3VwICAlIGVuZCBvZiBcdnRvcAorICAlCisgICUgcGxhY2UgdGhlIGNhcHR1cmVkIGluc2VydHMKKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0aW5nLCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcKKyAgJSB3aGVuZXZlciBhbiBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseQorICAlIGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CisgICUKKyAgXGNoZWNraW5zZXJ0cworfQorCislIEFwcGVuZCB0aGUgdG9rZW5zICMyIHRvIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvICMxLCBub3QgZXhwYW5kaW5nIGVpdGhlci4KKyUKK1xkZWZcYXBwZW5kdG9tYWNybyMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyIzFcZXhwYW5kYWZ0ZXJ7IzEjMn0lCit9CisKKyUgQGNhcHRpb24sIEBzaG9ydGNhcHRpb24KKyUKK1xkZWZcY2FwdGlvbntcZG9jYXB0aW9uXHRoaXNjYXB0aW9ufQorXGRlZlxzaG9ydGNhcHRpb257XGRvY2FwdGlvblx0aGlzc2hvcnRjYXB0aW9ufQorXGRlZlxkb2NhcHRpb257XGNoZWNrZW52XGZsb2F0IFxiZ3JvdXBcc2NhbmFyZ2N0eHRcZGVmY2FwdGlvbn0KK1xkZWZcZGVmY2FwdGlvbiMxIzJ7XGVncm91cCBcZGVmIzF7IzJ9fQorCislIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2UgaWRlbnRpZnlpbmcgdGhlIGNvdW50ZXIgd2UgYXJlCislIGdvaW5nIHRvIHVzZS4gIENyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCBhc3NpZ24gaXQgdG8gXGZsb2F0bm8uCitcZGVmXGdldGZsb2F0bm8jMXslCisgIFxpZngjMVxyZWxheAorICAgICAgJSBIYXZlbid0IHNlZW4gdGhpcyBmaWd1cmUgdHlwZSBiZWZvcmUuCisgICAgICBcY3NuYW1lIG5ld2NvdW50XGVuZGNzbmFtZSAjMSUKKyAgICAgICUKKyAgICAgICUgUmVtZW1iZXIgdG8gcmVzZXQgdGhpcyBmbG9hdG5vIGF0IHRoZSBuZXh0IGNoYXAuCisgICAgICBcZXhwYW5kYWZ0ZXJcZ2RlZlxleHBhbmRhZnRlclxyZXNldGFsbGZsb2F0bm9zCisgICAgICAgIFxleHBhbmRhZnRlcntccmVzZXRhbGxmbG9hdG5vcyAjMT0wIH0lCisgIFxmaQorICBcbGV0XGZsb2F0bm8jMSUKK30KKworJSBcc2V0cmVmIGNhbGxzIHRoaXMgdG8gZ2V0IHRoZSBYUkVGTEFCRUwtc250IHZhbHVlLiAgV2Ugd2FudCBhbiBAeHJlZgorJSB0byB0aGUgRkxPQVRMQUJFTCB0byBleHBhbmQgdG8gIkZpZ3VyZSAzLjEiLiAgV2UgY2FsbCBcc2V0cmVmIHdoZW4gd2UKKyUgZmlyc3QgcmVhZCB0aGUgQGZsb2F0IGNvbW1hbmQuCislCitcZGVmXFlmbG9hdHtcZmxvYXR0eXBlQHRpZSBcY2hhcGxldmVscHJlZml4XHRoZVxmbG9hdG5vfSUKKworJSBNYWdpYyBzdHJpbmcgdXNlZCBmb3IgdGhlIFhSRUZMQUJFTC10aXRsZSB2YWx1ZSwgc28gXHhyZWZYIGNhbgorJSBkaXN0aW5ndWlzaCBmbG9hdHMgZnJvbSBvdGhlciB4cmVmIHR5cGVzLgorXGRlZlxmbG9hdG1hZ2ljeyEhZmxvYXQhIX0KKworJSAjMSBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3ZSBhcmUgcGFzc2VkOyB3ZSBleHBhbmQgaW50byBhIGNvbmRpdGlvbmFsCislIHdoaWNoIGlzIHRydWUgaWYgIzEgcmVwcmVzZW50cyBhIGZsb2F0IHJlZi4gIFRoYXQgaXMsIHRoZSBtYWdpYworJSBcdGhpc3NlY3Rpb24gdmFsdWUgd2hpY2ggd2UgXHNldHJlZiBhYm92ZS4KKyUKK1xkZWZcaWZmbG9hdCMxe1xleHBhbmRhZnRlclxkb2lmZmxvYXQjMT09XGZpbmlzaH0KKyUKKyUgIzEgaXMgKG1heWJlKSB0aGUgXGZsb2F0bWFnaWMgc3RyaW5nLiAgSWYgc28sICMyIHdpbGwgYmUgdGhlCislIChzYWZlKSBmbG9hdCB0eXBlIGZvciB0aGlzIGZsb2F0LiAgV2Ugc2V0IFxpZmZsb2F0dHlwZSB0byAjMi4KKyUKK1xkZWZcZG9pZmZsb2F0IzE9IzI9IzNcZmluaXNoeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGRlZlxpZmZsb2F0dHlwZXsjMn0lCisgIFxpZnhcdGVtcFxmbG9hdG1hZ2ljCit9CisKKyUgQGxpc3RvZmZsb2F0cyBGTE9BVFRZUEUgLSBwcmludCBhIGxpc3Qgb2YgZmxvYXRzIGxpa2UgYSB0YWJsZSBvZiBjb250ZW50cy4KKyUKK1xwYXJzZWFyZ2RlZlxsaXN0b2ZmbG9hdHN7JQorICBcZGVmXGZsb2F0dHlwZXsjMX0lIGZsb2F0dHlwZQorICB7JQorICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICUgYnV0IHdlIG5lZWQgdG8gdXNlIGl0IGluIGEgY29udHJvbCBzZXF1ZW5jZSBuYW1lLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFx4ZGVmXHNhZmVmbG9hdHR5cGV7XGZsb2F0dHlwZX0lCisgIH0lCisgICUKKyAgJSBceHJkZWYgc2F2ZXMgdGhlIGZsb2F0cyBhcyBhIFxkby1saXN0IGluIFxmbG9hdGxpc3RTQUZFRkxPQVRUWVBFLgorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUgXHJlbGF4CisgICAgXGlmaGF2ZXhyZWZzCisgICAgICAlIGlmIHRoZSB1c2VyIHNhaWQgQGxpc3RvZmZsb2F0cyBmb28gYnV0IG5ldmVyIEBmbG9hdCBmb28uCisgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBObyBgXHNhZmVmbG9hdHR5cGUnIGZsb2F0cyB0byBsaXN0Ln0lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxsZWZ0c2tpcD1cdG9jaW5kZW50ICAlIGluZGVudCB0aGVzZSBlbnRyaWVzIGxpa2UgYSB0b2MKKyAgICAgIFxsZXRcZG89XGxpc3RvZmZsb2F0c2RvCisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZQorICAgIFxlbmRncm91cAorICBcZmkKK30KKworJSBUaGlzIGlzIGNhbGxlZCBvbiBlYWNoIGVudHJ5IGluIGEgbGlzdCBvZiBmbG9hdHMuICBXZSdyZSBwYXNzZWQgdGhlCislIHhyZWYgbGFiZWwsIGluIHRoZSBmb3JtIExBQkVMLXRpdGxlLCB3aGljaCBpcyBob3cgd2Ugc2F2ZSBpdCBpbiB0aGUKKyUgYXV4IGZpbGUuICBXZSBzdHJpcCBvZmYgdGhlIC10aXRsZSBhbmQgbG9vayB1cCBcWFJMQUJFTC1sb2YsIHdoaWNoCislIGhhcyB0aGUgdGV4dCB3ZSdyZSBzdXBwb3NlZCB0byB0eXBlc2V0IGhlcmUuCislCislIEZpZ3VyZXMgd2l0aG91dCB4cmVmIGxhYmVscyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCAoc2luY2UKKyUgdGhleSB3b24ndCBhcHBlYXIgaW4gdGhlIGF1eCBmaWxlKS4KKyUKK1xkZWZcbGlzdG9mZmxvYXRzZG8jMXtcbGlzdG9mZmxvYXRzZG9lbnRyeSMxXGZpbmlzaH0KK1xkZWZcbGlzdG9mZmxvYXRzZG9lbnRyeSMxLXRpdGxlXGZpbmlzaHt7JQorICAlIENhbid0IGZ1bGx5IGV4cGFuZCBYUiMxLWxvZiBiZWNhdXNlIGl0IGNhbiBjb250YWluIGFueXRoaW5nLiAgSnVzdAorICAlIHBhc3MgdGhlIGNvbnRyb2wgc2VxdWVuY2UuICBPbiB0aGUgb3RoZXIgaGFuZCwgWFIjMS1wZyBpcyBqdXN0IHRoZQorICAlIHBhZ2UgbnVtYmVyLCBhbmQgd2Ugd2FudCB0byBmdWxseSBleHBhbmQgdGhhdCBzbyB3ZSBjYW4gZ2V0IGEgbGluaworICAlIGluIHBkZiBvdXRwdXQuCisgIFx0b2tzQSA9IFxleHBhbmRhZnRlcntcY3NuYW1lIFhSIzEtbG9mXGVuZGNzbmFtZX0lCisgICUKKyAgJSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIHdlIHVzZSB0byBnZW5lcmF0ZSB0aGUgVE9DIGFuZCBpbmRleC4KKyAgXGVkZWZcd3JpdGVlbnRyeXtcbm9leHBhbmRcZW50cnl7XHRoZVx0b2tzQX17XGNzbmFtZSBYUiMxLXBnXGVuZGNzbmFtZX19JQorICBcd3JpdGVlbnRyeQorfX0KKworXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KKyUgYW5kIGkxOG4uCisKKyUgQGRvY3VtZW50bGFuZ3VhZ2UgaXMgdXN1YWxseSBnaXZlbiB2ZXJ5IGVhcmx5LCBqdXN0IGFmdGVyCislIEBzZXRmaWxlbmFtZS4gIElmIGRvbmUgdG9vIGxhdGUsIGl0IG1heSBub3Qgb3ZlcnJpZGUgZXZlcnl0aGluZworJSBwcm9wZXJseS4gIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgorJSBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHNldCB1cCBhIGh5cGhlbmF0aW9uIGZpbGUgaGVyZS4KKyUKK1xwYXJzZWFyZ2RlZlxkb2N1bWVudGxhbmd1YWdleyUKKyAgXHRleCAlIHJlYWQgdHhpLT8/LnRleCBmaWxlIGluIHBsYWluIFRlWC4KKyAgICAlIFJlYWQgdGhlIGZpbGUgaWYgaXQgZXhpc3RzLgorICAgIFxvcGVuaW4gMSB0eGktIzEudGV4CisgICAgXGlmZW9mIDEKKyAgICAgIFxlcnJoZWxwID0gXG5vbGFuZ2hlbHAKKyAgICAgIFxlcnJtZXNzYWdle0Nhbm5vdCByZWFkIGxhbmd1YWdlIGZpbGUgdHhpLSMxLnRleH0lCisgICAgXGVsc2UKKyAgICAgIFxpbnB1dCB0eGktIzEudGV4CisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICBcZW5kZ3JvdXAKK30KK1xuZXdoZWxwXG5vbGFuZ2hlbHB7VGhlIGdpdmVuIGxhbmd1YWdlIGRlZmluaXRpb24gZmlsZSBjYW5ub3QgYmUgZm91bmQgb3IKK2lzIGVtcHR5LiAgTWF5YmUgeW91IG5lZWQgdG8gaW5zdGFsbCBpdD8gIEluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorc2hvdWxkIHdvcmsgaWYgbm93aGVyZSBlbHNlIGRvZXMufQorCisKKyUgQGRvY3VtZW50ZW5jb2Rpbmcgc2hvdWxkIGNoYW5nZSBzb21ldGhpbmcgaW4gVGVYIGV2ZW50dWFsbHksIG1vc3QKKyUgbGlrZWx5LCBidXQgZm9yIG5vdyBqdXN0IHJlY29nbml6ZSBpdC4KK1xsZXRcZG9jdW1lbnRlbmNvZGluZyA9IFxjb21tZW50CisKKworJSBQYWdlIHNpemUgcGFyYW1ldGVycy4KKyUKK1xuZXdkaW1lblxkZWZhdWx0cGFyaW5kZW50IFxkZWZhdWx0cGFyaW5kZW50ID0gMTVwdAorCitcY2hhcGhlYWRpbmdza2lwID0gMTVwdCBwbHVzIDRwdCBtaW51cyAycHQKK1xzZWNoZWFkaW5nc2tpcCA9IDEycHQgcGx1cyAzcHQgbWludXMgMnB0Citcc3Vic2VjaGVhZGluZ3NraXAgPSA5cHQgcGx1cyAycHQgbWludXMgMnB0CisKKyUgUHJldmVudCB1bmRlcmZ1bGwgdmJveCBlcnJvciBtZXNzYWdlcy4KK1x2YmFkbmVzcyA9IDEwMDAwCisKKyUgRG9uJ3QgYmUgc28gZmluaWNreSBhYm91dCB1bmRlcmZ1bGwgaGJveGVzLCBlaXRoZXIuCitcaGJhZG5lc3MgPSAyMDAwCisKKyUgRm9sbG93aW5nIEdlb3JnZSBCdXNoLCBqdXN0IGdldCByaWQgb2Ygd2lkb3dzIGFuZCBvcnBoYW5zLgorXHdpZG93cGVuYWx0eT0xMDAwMAorXGNsdWJwZW5hbHR5PTEwMDAwCisKKyUgVXNlIFRlWCAzLjAncyBcZW1lcmdlbmN5c3RyZXRjaCB0byBoZWxwIGxpbmUgYnJlYWtpbmcsIGJ1dCBpZiB3ZSdyZQorJSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLiAgV2Ugd2FudCB0aGUgYW1vdW50IG9mCislIHN0cmV0Y2ggYWRkZWQgdG8gZGVwZW5kIG9uIHRoZSBsaW5lIGxlbmd0aCwgaGVuY2UgdGhlIGRlcGVuZGVuY2Ugb24KKyUgXGhzaXplLiAgV2UgY2FsbCB0aGlzIHdoZW5ldmVyIHRoZSBwYXBlciBzaXplIGlzIHNldC4KKyUKK1xkZWZcc2V0ZW1lcmdlbmN5c3RyZXRjaHslCisgIFxpZnhcZW1lcmdlbmN5c3RyZXRjaFx0aGlzaXN1bmRlZmluZWQKKyAgICAlIEFsbG93IHVzIHRvIGFzc2lnbiB0byBcZW1lcmdlbmN5c3RyZXRjaCBhbnl3YXkuCisgICAgXGRlZlxlbWVyZ2VuY3lzdHJldGNoe1xkaW1lbjB9JQorICBcZWxzZQorICAgIFxlbWVyZ2VuY3lzdHJldGNoID0gLjE1XGhzaXplCisgIFxmaQorfQorCislIFBhcmFtZXRlcnMgaW4gb3JkZXI6IDEpIHRleHRoZWlnaHQ7IDIpIHRleHR3aWR0aDsKKyUgMykgdm9mZnNldDsgNCkgaG9mZnNldDsgNSkgYmluZGluZyBvZmZzZXQ7IDYpIHRvcHNraXA7CislIDcpIHBoeXNpY2FsIHBhZ2UgaGVpZ2h0OyA4KSBwaHlzaWNhbCBwYWdlIHdpZHRoLgorJQorJSBXZSBhbHNvIGNhbGwgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSwgc28gdGhlIGNhbGxlciBzaG91bGQgZGVmaW5lCislIFx0ZXh0bGVhZGluZy4gIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gc2V0IFxwYXJza2lwLgorJQorXGRlZlxpbnRlcm5hbHBhZ2VzaXplcyMxIzIjMyM0IzUjNiM3Izh7JQorICBcdm9mZnNldCA9ICMzXHJlbGF4CisgIFx0b3Bza2lwID0gIzZccmVsYXgKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUKKyAgXHZzaXplID0gIzFccmVsYXgKKyAgXGFkdmFuY2VcdnNpemUgYnkgXHRvcHNraXAKKyAgXG91dGVydnNpemUgPSBcdnNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJ2c2l6ZSBieSAyXHRvcGFuZGJvdHRvbW1hcmdpbgorICBccGFnZWhlaWdodCA9IFx2c2l6ZQorICAlCisgIFxoc2l6ZSA9ICMyXHJlbGF4CisgIFxvdXRlcmhzaXplID0gXGhzaXplCisgIFxhZHZhbmNlXG91dGVyaHNpemUgYnkgMC41aW4KKyAgXHBhZ2V3aWR0aCA9IFxoc2l6ZQorICAlCisgIFxub3JtYWxvZmZzZXQgPSAjNFxyZWxheAorICBcYmluZGluZ29mZnNldCA9ICM1XHJlbGF4CisgICUKKyAgXGlmcGRmCisgICAgXHBkZnBhZ2VoZWlnaHQgIzdccmVsYXgKKyAgICBccGRmcGFnZXdpZHRoICM4XHJlbGF4CisgIFxmaQorICAlCisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30KKyAgJQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKKyAgXHNldGVtZXJnZW5jeXN0cmV0Y2gKK30KKworJSBAbGV0dGVycGFwZXIgKHRoZSBkZWZhdWx0KS4KK1xkZWZcbGV0dGVycGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisgICUKKyAgJSBJZiBwYWdlIGlzIG5vdGhpbmcgYnV0IHRleHQsIG1ha2UgaXQgY29tZSBvdXQgZXZlbi4KKyAgXGludGVybmFscGFnZXNpemVzezQ2XGJhc2VsaW5lc2tpcH17NmlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MzZwdH0lCisgICAgICAgICAgICAgICAgICAgIHsxMWlufXs4LjVpbn0lCit9fQorCislIFVzZSBAc21hbGxib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDd4OS4yNSB0cmltIHNpemUuCitcZGVmXHNtYWxsYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezE2cHR9JQorICAgICAgICAgICAgICAgICAgICB7OS4yNWlufXs3aW59JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4zaW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNWNtCit9fQorCislIFVzZSBAc21hbGxlcmJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgNng5IHRyaW0gc2l6ZS4KKyUgKEp1c3QgdGVzdGluZywgcGFyYW1ldGVycyBzdGlsbCBpbiBmbHV4LikKK1xkZWZcc21hbGxlcmJvb2t7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDEuNXB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny40aW59ezQuOGlufSUKKyAgICAgICAgICAgICAgICAgICAgey0uMmlufXstLjRpbn0lCisgICAgICAgICAgICAgICAgICAgIHswcHR9ezE0cHR9JQorICAgICAgICAgICAgICAgICAgICB7OWlufXs2aW59JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yNWluCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjRjbQorfX0KKworJSBVc2UgQGFmb3VycGFwZXIgdG8gcHJpbnQgb24gRXVyb3BlYW4gQTQgcGFwZXIuCitcZGVmXGFmb3VycGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisgICUKKyAgJSBEb3VibGUtc2lkZSBwcmludGluZyB2aWEgcG9zdHNjcmlwdCBvbiBMYXNlcmpldCA0MDUwCisgICUgcHJpbnRzIGRvdWJsZS1zaWRlZCBuaWNlbHkgd2hlbiBcYmluZGluZ29mZnNldD0xMG1tIGFuZCBcaG9mZnNldD0tNm1tLgorICAlIFRvIGNoYW5nZSB0aGUgc2V0dGluZ3MgZm9yIGEgZGlmZmVyZW50IHByaW50ZXIgb3Igc2l0dWF0aW9uLCBhZGp1c3QKKyAgJSBcbm9ybWFsb2Zmc2V0IHVudGlsIHRoZSBmcm9udC1zaWRlIGFuZCBiYWNrLXNpZGUgdGV4dHMgYWxpZ24uICBUaGVuCisgICUgZG8gdGhlIHNhbWUgZm9yIFxiaW5kaW5nb2Zmc2V0LiAgWW91IGNhbiBzZXQgdGhlc2UgZm9yIHRlc3RpbmcgaW4KKyAgJSB5b3VyIHRleGluZm8gc291cmNlIGZpbGUgbGlrZSB0aGlzOgorICAlIEB0ZXgKKyAgJSBcZ2xvYmFsXG5vcm1hbG9mZnNldCA9IC02bW0KKyAgJSBcZ2xvYmFsXGJpbmRpbmdvZmZzZXQgPSAxMG1tCisgICUgQGVuZCB0ZXgKKyAgXGludGVybmFscGFnZXNpemVzezUxXGJhc2VsaW5lc2tpcH17MTYwbW19CisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgJQorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDVtbQorfX0KKworJSBVc2UgQGFmaXZlcGFwZXIgdG8gcHJpbnQgb24gRXVyb3BlYW4gQTUgcGFwZXIuCislIEZyb20gcm9taWxkb0B1cmFuby5pY2ViLnVmb3AuYnIsIDIgSnVseSAyMDAwLgorJSBIZSBhbHNvIHJlY29tbWVuZHMgbWFraW5nIEBleGFtcGxlIGFuZCBAbGlzcCBiZSBzbWFsbC4KK1xkZWZcYWZpdmVwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0IG1pbnVzIDAuMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEyLjVwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3sxNjBtbX17MTIwbW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs4cHR9JQorICAgICAgICAgICAgICAgICAgICB7MjEwbW19ezE0OG1tfSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMmluCisgIFx0b2xlcmFuY2UgPSA4MDAKKyAgXGhmdXp6ID0gMS4ycHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAybW0KKyAgXHRhYmxlaW5kZW50ID0gMTJtbQorfX0KKworJSBBIHNwZWNpZmljIHRleHQgbGF5b3V0LCAyNHgxNWNtIG92ZXJhbGwsIGludGVuZGVkIGZvciBBNCBwYXBlci4KK1xkZWZcYWZvdXJsYXRleHt7XGdsb2JhbGRlZnMgPSAxCisgIFxhZm91cnBhcGVyCisgIFxpbnRlcm5hbHBhZ2VzaXplc3syMzdtbX17MTUwbW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ezQuNm1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgJQorICAlIE11c3QgZXhwbGljaXRseSByZXNldCB0byAwIGJlY2F1c2Ugd2UgY2FsbCBcYWZvdXJwYXBlci4KKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIFVzZSBAYWZvdXJ3aWRlIHRvIHByaW50IG9uIEE0IHBhcGVyIGluIGxhbmRzY2FwZSBmb3JtYXQuCitcZGVmXGFmb3Vyd2lkZXt7XGdsb2JhbGRlZnMgPSAxCisgIFxhZm91cnBhcGVyCisgIFxpbnRlcm5hbHBhZ2VzaXplc3syNDFtbX17MTY1bW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey0yLjk1bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgQHBhZ2VzaXplcyBURVhUSEVJR0hUWyxURVhUV0lEVEhdCislIFBlcmhhcHMgd2Ugc2hvdWxkIGFsbG93IHNldHRpbmcgdGhlIG1hcmdpbnMsIFx0b3Bza2lwLCBccGFyc2tpcCwKKyUgYW5kL29yIGxlYWRpbmcsIGFsc28uIE9yIHBlcmhhcHMgd2Ugc2hvdWxkIGNvbXB1dGUgdGhlbSBzb21laG93LgorJQorXHBhcnNlYXJnZGVmXHBhZ2VzaXplc3tccGFnZXNpemVzeXl5ICMxLCxcZmluaXNofQorXGRlZlxwYWdlc2l6ZXN5eXkjMSwjMiwjM1xmaW5pc2h7eyUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGhzaXplPSMyXHJlbGF4IFxmaQorICBcZ2xvYmFsZGVmcyA9IDEKKyAgJQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSUKKyAgJQorICBcZGltZW4wID0gIzEKKyAgXGFkdmFuY2VcZGltZW4wIGJ5IFx2b2Zmc2V0CisgICUKKyAgXGRpbWVuMiA9IFxoc2l6ZQorICBcYWR2YW5jZVxkaW1lbjIgYnkgXG5vcm1hbG9mZnNldAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3sjMX17XGhzaXplfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcbm9ybWFsb2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAge1xkaW1lbjB9e1xkaW1lbjJ9JQorfX0KKworJSBTZXQgZGVmYXVsdCB0byBsZXR0ZXIuCislCitcbGV0dGVycGFwZXIKKworCitcbWVzc2FnZXthbmQgdHVybmluZyBvbiB0ZXhpbmZvIGlucHV0IGZvcm1hdC59CisKKyUgRGVmaW5lIG1hY3JvcyB0byBvdXRwdXQgdmFyaW91cyBjaGFyYWN0ZXJzIHdpdGggY2F0Y29kZSBmb3Igbm9ybWFsIHRleHQuCitcY2F0Y29kZWBcIj1cb3RoZXIKK1xjYXRjb2RlYFx+PVxvdGhlcgorXGNhdGNvZGVgXF49XG90aGVyCitcY2F0Y29kZWBcXz1cb3RoZXIKK1xjYXRjb2RlYFx8PVxvdGhlcgorXGNhdGNvZGVgXDw9XG90aGVyCitcY2F0Y29kZWBcPj1cb3RoZXIKK1xjYXRjb2RlYFwrPVxvdGhlcgorXGNhdGNvZGVgXCQ9XG90aGVyCitcZGVmXG5vcm1hbGRvdWJsZXF1b3RleyJ9CitcZGVmXG5vcm1hbHRpbGRle359CitcZGVmXG5vcm1hbGNhcmV0e159CitcZGVmXG5vcm1hbHVuZGVyc2NvcmV7X30KK1xkZWZcbm9ybWFsdmVydGljYWxiYXJ7fH0KK1xkZWZcbm9ybWFsbGVzc3s8fQorXGRlZlxub3JtYWxncmVhdGVyez59CitcZGVmXG5vcm1hbHBsdXN7K30KK1xkZWZcbm9ybWFsZG9sbGFyeyR9JSQgZm9udC1sb2NrIGZpeAorCislIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBtYWtlIGEgY2hhcmFjdGVyIHByaW50IG9uZSB3YXkgaW4gXHR0CislICh3aGVyZSBpdCBjYW4gcHJvYmFibHkgYmUgb3V0cHV0IGFzLWlzKSwgYW5kIGFub3RoZXIgd2F5IGluIG90aGVyIGZvbnRzLAorJSB3aGVyZSBzb21ldGhpbmcgaGFpcmllciBwcm9iYWJseSBuZWVkcyB0byBiZSBkb25lLgorJQorJSAjMSBpcyB3aGF0IHRvIHByaW50IGlmIHdlIGFyZSBpbmRlZWQgdXNpbmcgXHR0OyAjMiBpcyB3aGF0IHRvIHByaW50CislIG90aGVyd2lzZS4gIFNpbmNlIGFsbCB0aGUgQ29tcHV0ZXIgTW9kZXJuIHR5cGV3cml0ZXIgZm9udHMgaGF2ZSB6ZXJvCislIGludGVyd29yZCBzdHJldGNoIChhbmQgc2hyaW5rKSwgYW5kIGl0IGlzIHJlYXNvbmFibGUgdG8gZXhwZWN0IGFsbAorJSB0eXBld3JpdGVyIGZvbnRzIHRvIGhhdmUgdGhpcywgd2UgY2FuIGNoZWNrIHRoYXQgZm9udCBwYXJhbWV0ZXIuCislCitcZGVmXGlmdXNpbmd0dCMxIzJ7XGlmZGltIFxmb250ZGltZW4zXGZvbnQ9MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgU2FtZSBhcyBhYm92ZSwgYnV0IGNoZWNrIGZvciBpdGFsaWMgZm9udC4gIEFjdHVhbGx5IHRoaXMgYWxzbyBjYXRjaGVzCislIG5vbi1pdGFsaWMgc2xhbnRlZCBmb250cyBzaW5jZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbQorJSBpdGFsaWMgZm9udHMuICBCdXQgc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgYnkgJCBhbmQgaXQgdXNlcyBcc2wgYW55d2F5CislIHRoaXMgaXMgbm90IGEgcHJvYmxlbS4KK1xkZWZcaWZ1c2luZ2l0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjFcZm9udD4wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBUdXJuIG9mZiBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIGV4Y2VwdCBACislIChhbmQgdGhvc2Ugd2hpY2ggdGhlIHVzZXIgY2FuIHVzZSBhcyBpZiB0aGV5IHdlcmUgb3JkaW5hcnkpLgorJSBNb3N0IG9mIHRoZXNlIHdlIHNpbXBseSBwcmludCBmcm9tIHRoZSBcdHQgZm9udCwgYnV0IGZvciBzb21lLCB3ZSBjYW4KKyUgdXNlIG1hdGggb3Igb3RoZXIgdmFyaWFudHMgdGhhdCBsb29rIGJldHRlciBpbiBub3JtYWwgdGV4dC4KKworXGNhdGNvZGVgXCI9XGFjdGl2ZQorXGRlZlxhY3RpdmVkb3VibGVxdW90ZXt7XHR0XGNoYXIzNH19CitcbGV0Ij1cYWN0aXZlZG91YmxlcXVvdGUKK1xjYXRjb2RlYFx+PVxhY3RpdmUKK1xkZWZ+e3tcdHRcY2hhcjEyNn19CitcY2hhcmRlZlxoYXQ9YFxeCitcY2F0Y29kZWBcXj1cYWN0aXZlCitcZGVmXnt7XHR0IFxoYXR9fQorCitcY2F0Y29kZWBcXz1cYWN0aXZlCitcZGVmX3tcaWZ1c2luZ3R0XG5vcm1hbHVuZGVyc2NvcmVcX30KK1xsZXRccmVhbHVuZGVyPV8KKyUgU3Vicm91dGluZSBmb3IgdGhlIHByZXZpb3VzIG1hY3JvLgorXGRlZlxfe1xsZWF2ZXZtb2RlIFxrZXJuLjA3ZW0gXHZib3h7XGhydWxlIHdpZHRoLjNlbSBoZWlnaHQuMWV4fVxrZXJuIC4wN2VtIH0KKworXGNhdGNvZGVgXHw9XGFjdGl2ZQorXGRlZnx7e1x0dFxjaGFyMTI0fX0KK1xjaGFyZGVmIFxsZXNzPWBcPAorXGNhdGNvZGVgXDw9XGFjdGl2ZQorXGRlZjx7e1x0dCBcbGVzc319CitcY2hhcmRlZiBcZ3RyPWBcPgorXGNhdGNvZGVgXD49XGFjdGl2ZQorXGRlZj57e1x0dCBcZ3RyfX0KK1xjYXRjb2RlYFwrPVxhY3RpdmUKK1xkZWYre3tcdHQgXGNoYXIgNDN9fQorXGNhdGNvZGVgXCQ9XGFjdGl2ZQorXGRlZiR7XGlmdXNpbmdpdHt7XHNsXCR9fVxub3JtYWxkb2xsYXJ9JSQgZm9udC1sb2NrIGZpeAorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gYSBmaWxlCislIG5hbWUgY2Fubm90IGJlIGFjdGl2ZSB1bnRpbCB3ZSBoYXZlIHBhcnNlZCB0aGUgY29tbWFuZCBsaW5lLgorJSBTbyB0dXJuIHRoZW0gb2ZmIGFnYWluLCBhbmQgaGF2ZSBcZXZlcnlqb2IgKG9yIEBzZXRmaWxlbmFtZSkgdHVybiB0aGVtIG9uLgorJSBcb3RoZXJpZnlhY3RpdmUgaXMgY2FsbGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCitcZGVmXG90aGVyaWZ5YWN0aXZle1xjYXRjb2RlYCs9XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcn0KKworJSBVc2VkIHNvbWV0aW1lcyB0byB0dXJuIG9mZiAoZWZmZWN0aXZlbHkpIHRoZSBhY3RpdmUgY2hhcmFjdGVycyBldmVuIGFmdGVyCislIHBhcnNpbmcgdGhlbS4KK1xkZWZcdHVybm9mZmFjdGl2ZXslCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCitcY2F0Y29kZWBcQD0wCisKKyUgXGJhY2tzbGFzaGN1cmZvbnQgb3V0cHV0cyBvbmUgYmFja3NsYXNoIGNoYXJhY3RlciBpbiBjdXJyZW50IGZvbnQsCislIGFzIGluIFxjaGFyYFxcLgorXGdsb2JhbFxjaGFyZGVmXGJhY2tzbGFzaGN1cmZvbnQ9YFxcCitcZ2xvYmFsXGxldFxyYXdiYWNrc2xhc2h4eD1cYmFja3NsYXNoY3VyZm9udCAgJSBsZXQgZXhpc3RpbmcgLj8/cyBmaWxlcyB3b3JrCisKKyUgXHJlYWxiYWNrc2xhc2ggaXMgYW4gYWN0dWFsIGNoYXJhY3RlciBgXCcgd2l0aCBjYXRjb2RlIG90aGVyLCBhbmQKKyUgXGRvdWJsZWJhY2tzbGFzaCBpcyB0d28gb2YgdGhlbSAoZm9yIHRoZSBwZGYgb3V0bGluZXMpLgore1xjYXRjb2RlYFxcPVxvdGhlciBAZ2RlZkByZWFsYmFja3NsYXNoe1x9IEBnZGVmQGRvdWJsZWJhY2tzbGFzaHtcXH19CisKKyUgSW4gdGV4aW5mbywgYmFja3NsYXNoIGlzIGFuIGFjdGl2ZSBjaGFyYWN0ZXI7IGl0IHByaW50cyB0aGUgYmFja3NsYXNoCislIGluIGZpeGVkIHdpZHRoIGZvbnQuCitcY2F0Y29kZWBcXD1cYWN0aXZlCitAZGVmQG5vcm1hbGJhY2tzbGFzaHt7QHR0QGJhY2tzbGFzaGN1cmZvbnR9fQorJSBPbiBzdGFydHVwLCBAZml4YmFja3NsYXNoIGFzc2lnbnM6CislICBAbGV0IFwgPSBAbm9ybWFsYmFja3NsYXNoCisKKyUgXHJhd2JhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGRvIFxiYWNrc2xhc2hjdXJmb250LgorJSBcb3RoZXJiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBiZSBhIGxpdGVyYWwgYFwnIGNoYXJhY3RlciB3aXRoCislIGNhdGNvZGUgb3RoZXIuCitAZ2RlZkByYXdiYWNrc2xhc2h7QGxldFw9QGJhY2tzbGFzaGN1cmZvbnR9CitAZ2RlZkBvdGhlcmJhY2tzbGFzaHtAbGV0XD1AcmVhbGJhY2tzbGFzaH0KKworJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuCislCitAZGVmQG5vcm1hbHR1cm5vZmZhY3RpdmV7JQorICBAbGV0XD1Abm9ybWFsYmFja3NsYXNoCisgIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQorICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgQGxldF49QG5vcm1hbGNhcmV0CisgIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCisgIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgorICBAbGV0PD1Abm9ybWFsbGVzcworICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgorICBAbGV0Kz1Abm9ybWFscGx1cworICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKKyAgQHVuc2Vwc3BhY2VzCit9CisKKyUgTWFrZSBfIGFuZCArIFxvdGhlciBjaGFyYWN0ZXJzLCB0ZW1wb3JhcmlseS4KKyUgVGhpcyBpcyBjYW5jZWxlZCBieSBAZml4YmFja3NsYXNoLgorQG90aGVyaWZ5YWN0aXZlCisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgd2UgZG9uJ3Qgd2FudCB0aGUgYFxpbnB1dCB0ZXhpbmZvJyB0byBzaG93IHVwLgorJSBUaGF0IGlzIHdoYXQgXGVhdGlucHV0IGlzIGZvcjsgYWZ0ZXIgdGhhdCwgdGhlIGBcJyBzaG91bGQgcmV2ZXJ0IHRvIHByaW50aW5nCislIGEgYmFja3NsYXNoLgorJQorQGdkZWZAZWF0aW5wdXQgaW5wdXQgdGV4aW5mb3tAZml4YmFja3NsYXNofQorQGdsb2JhbEBsZXRcID0gQGVhdGlucHV0CisKKyUgT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMgdGhlIGZpbGUgZGlkIG5vdCBoYXZlIGEgYFxpbnB1dCB0ZXhpbmZvJy4gVGhlbgorJSB0aGUgZmlyc3QgYFwnIGluIHRoZSBmaWxlIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIG1hY3JvIHRyaWVzIHRvIGZpeAorJSB0aGF0LCBhc3N1bWluZyBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBgXCcgY291bGQgcGxhdXNpYmx5IG9jY3VyLgorJSBBbHNvIHR1cm4gYmFjayBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiB0aGUgaW5wdXQKKyUgZmlsZSBuYW1lLCBpbiBjYXNlIG5vdCB1c2luZyBhIHByZS1kdW1wZWQgZm9ybWF0LgorJQorQGdkZWZAZml4YmFja3NsYXNoeyUKKyAgQGlmeFxAZWF0aW5wdXQgQGxldFwgPSBAbm9ybWFsYmFja3NsYXNoIEBmaQorICBAY2F0Y29kZWArPUBhY3RpdmUKKyAgQGNhdGNvZGVgQF89QGFjdGl2ZQorfQorCislIFNheSBAZm9vLCBub3QgXGZvbywgaW4gZXJyb3IgbWVzc2FnZXMuCitAZXNjYXBlY2hhciA9IGBAQAorCislIFRoZXNlIGxvb2sgb2sgaW4gYWxsIGZvbnRzLCBzbyBqdXN0IG1ha2UgdGhlbSBub3Qgc3BlY2lhbC4KK0BjYXRjb2RlYEAmID0gQG90aGVyCitAY2F0Y29kZWBAIyA9IEBvdGhlcgorQGNhdGNvZGVgQCUgPSBAb3RoZXIKKworCitAYyBMb2NhbCB2YXJpYWJsZXM6CitAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCitAYyBwYWdlLWRlbGltaXRlcjogIl5cXFxcbWVzc2FnZSIKK0BjIHRpbWUtc3RhbXAtc3RhcnQ6ICJkZWZcXFxcdGV4aW5mb3ZlcnNpb257IgorQGMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCitAYyB0aW1lLXN0YW1wLWVuZDogIn0iCitAYyBFbmQ6CisKK0BjIHZpbTpzdz0yOgorCitAaWdub3JlCisgICBhcmNoLXRhZzogZTFiMzZlMzItYzk2ZS00MTM1LWE0MWEtMGIyZWZhMmVhMTE1CitAZW5kIGlnbm9yZQpkaWZmIC0tZ2l0IGEvY2lwaGVyL0NoYW5nZUxvZy0yMDExIGIvY2lwaGVyL0NoYW5nZUxvZy0yMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvQ2hhbmdlTG9nLTIwMTEKQEAgLTAsMCArMSw0Mjc5IEBACisyMDExLTEyLTAxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJTkI6IENoYW5nZUxvZyBmaWxlcyBhcmUgbm8gbG9uZ2VyIG1hbnVhbGx5IG1haW50YWluZWQuICBTdGFydGluZworCW9uIERlY2VtYmVyIDFzdCwgMjAxMSB3ZSBwdXQgY2hhbmdlIGluZm9ybWF0aW9uIG9ubHkgaW4gdGhlIEdJVAorCWNvbW1pdCBsb2csIGFuZCBnZW5lcmF0ZSBhIHRvcC1sZXZlbCBDaGFuZ2VMb2cgZmlsZSBmcm9tIGxvZ3MgYXQKKwkibWFrZSBkaXN0Ii4gIFNlZSBkb2MvSEFDS0lORyBmb3IgZGV0YWlscy4KKworMjAxMS0wOS0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHJpbWVnZW4uYyAoX2djcnlfcHJpbWVnZW5faW5pdCk6IE5ldy4KKworMjAxMS0wOS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY2lwaGVyLWNiYy5jLCBjaXBoZXItY2ZiLmMsIGNpcGhlci1vZmIuYywgY2lwaGVyLWN0ci5jOiBOZXcuCisJKiBjaXBoZXItYWVzd3JhcC5jOiBOZXcuCisJKiBjaXBoZXItaW50ZXJuYWwuaDogTmV3LgorCSogY2lwaGVyLmMgKGNpcGhlcl9jb250ZXh0X2FsaWdubWVudF90LCBzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKQorCShDVFhfTUFHSUNfTk9STUFMLCBDVFhfTUFHSUNfU0VDVVJFLCBORUVEXzE2QllURV9BTElHTkVEX0NPTlRFWFQpCisJKE1BWF9CTE9DS1NJWkUpOiBNb3ZlIHRvIGNpcGhlci1pbnRlcm5hbC5oLgorCShkb19hZXN3cmFwX2VuY3J5cHQsIGRvX2Flc3dyYXBfZW5jcnlwdCkKKwkoZG9fY2JjX2VuY3J5cHQsIGRvX2NiY19kZWNyeXB0LCBkb19jdHJfZW5jcnlwdCwgZG9fY3RyX2RlY3J5cHQpCisJKGRvX29mYl9lbmNyeXB0LCBkb19vZmJfZGVjcnlwdCwgZG9fY3RyX2VuY3J5cHQpOiBNb3ZlIHRvIHRoZQorCXJlc3BlY3RpdmUgbmV3IGNpcGhlci1mb28uYyBmaWxlcy4KKwkoZG9fY3RyX2RlY3J5cHQpOiBSZW1vdmUuCisKKzIwMTEtMDktMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2xpc3QpOiBSZW1vdmUuCisJKGdjcnlfcGtfdW5yZWdpc3Rlcik6IFJlbW92ZS4KKwkqIG1kLmMgKGdjcnlfbWRfbGlzdCk6IFJlbW92ZS4KKwkoZ2NyeV9tZF91bnJlZ2lzdGVyKTogUmVtb3ZlLgorCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX2xpc3QpOiBSZW1vdmUuCisJKGdjcnlfY2lwaGVyX3VucmVnaXN0ZXIpOiBSZW1vdmUuCisJKiBhYy5jOiBSZW1vdmUuCisKKzIwMTEtMDYtMjkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jIChjaXBoZXJfZ2V0X2tleWxlbik6IFJldHVybiB6ZXJvIGZvciBhbiBpbnZhbGlkIGFsZ29yaXRobS4KKwkoY2lwaGVyX2dldF9ibG9ja3NpemUpOiBEaXR0by4KKworMjAxMS0wNi0xMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZHNhLmMgKHNlbGZ0ZXN0X3NpZ25fMTAyNCk6IFVzZSB0aGUgcmF3IGFuZCBub3QgdGhlIHBrY3MxIGZsYWcuCisKKwkqIHB1YmtleS5jIChnY3J5X3BrX3NpZ24pOiBTcGVjaWFsIGNhc2Ugb3V0cHV0IGdlbmVyYXRpb24gZm9yIFBLQ1MxLgorCShzZXhwX2RhdGFfdG9fbXBpKTogUGFyc2UgInJhbmRvbS1vdmVycmlkZSIgZm9yIHBrY3MxIGVuY3J5cHRpb24uCisJKHBrY3MxX2VuY29kZV9mb3JfZW5jcnlwdGlvbik6IEFkZCBhcmdzIFJBTkRPTV9PVkVSUklERSBhbmQKKwlSQU5ET01fT1ZFUlJJREVfTEVOLgorCShnY3J5X3BrX2VuY3J5cHQpOiBTcGVjaWFsIGNhc2Ugb3V0cHV0IGdlbmVyYXRpb24gZm9yIFBLQ1MxLgorCShzZXhwX2RhdGFfdG9fbXBpKTogVXNlIEdDUllNUElfRk1UX1VTRyBmb3IgcmF3IGVuY29kaW5nLgorCisyMDExLTA2LTEwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19zaWduKTogVXNlIGZvcm1hdCBzcGVjaWZpZXIgJyVNJyB0byBhdm9pZAorCWxlYWRpbmcgemVyb2VzLiAgU3BlY2lhbCBjYXNlIG91dHB1dCBnZW5lcmF0aW9uIGZvciBQU1MuCisJKGdjcnlfcGtfZW5jcnlwdCk6IFNwZWNpYWwgY2FzZSBvdXRwdXQgZ2VuZXJhdGlvbiBmb3IgT0FFUC4KKwkoc2V4cF9kYXRhX3RvX21waSk6IFVzZSBHQ1JZTVBJX0ZNVF9VU0cgZm9yIFBTUyB2ZXJpZnkuCisKKzIwMTEtMDYtMDkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChvYWVwX2RlY29kZSk6IE1ha2UgdXNlIG9mIG9jdGV0X3N0cmluZ19mcm9tX21waS4KKwkoc2V4cF90b19lbmMpOiBTa2lwICJyYW5kb20tb3ZlcnJpZGUiLgorCisJKiBwdWJrZXkuYyAob2FlcF9lbmNvZGUsIHBzc19lbmNvZGUpOiBBZGQgYXJncyBSQU5ET01fT1ZFUlJJREUgYW5kCisJUkFORE9NX09WRVJSSURFX0xFTi4KKwkoc2V4cF9kYXRhX3RvX21waSk6IEV4dHJhY3QgbmV3IHJhbmRvbS1vdmVycmlkZSBwYXJhbWV0ZXIuCisKKwkqIHB1YmtleS5jIChwc3NfZW5jb2RlLCBwc3NfdmVyaWZ5KTogVXNlIFZBTFVFIHZlcmJhdGltIGZvciBNSEFTSC4KKwkob2N0ZXRfc3RyaW5nX2Zyb21fbXBpKTogQWRkIGFyZyBTUEFDRS4KKworMjAxMS0wNi0wOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHBzc19lbmNvZGUsIHBzc192ZXJpZnkpOiBSZXN0cnVjdHVyZSBhbmQgY29tbWVudCBjb2RlCisJdG8gbWF0Y2ggcmZjLTM0NDcuICBSZXBsYWNlIHNlY3VyZSBhbGxvY3MgYnkgcGxhaW4gYWxsb2NzIGFuZAorCXdpcGVtZW1vcnkuICBVc2UgZ2NyeV9tZF9oYXNoX2J1ZmZlci4KKwkob2N0ZXRfc3RyaW5nX2Zyb21fbXBpKTogTmV3LgorCisyMDExLTA2LTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAob2FlcF9kZWNvZGUpOiBBZGQgbW9yZSBjb21tZW50cyBhbmQgcmVzdHJ1Y3R1cmUgdG8KKwltYXRjaCB0aGUgZGVzY3JpcHRpb24gaW4gUkZDLTM0NDcuCisJKG9hZXBfZW5jb2RlKTogQ2hlY2sgZm9yIG1nZjEgZXJyb3IuICBzL2RsZW4vaGxlbi8uCisKKzIwMTEtMDUtMzEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChtZ2YxKTogT3B0aW1pemUgYnkgdXNpbmcgZ2NyeV9tZF9yZXNldC4gIFJlLWltcGxlbWVudAorCWZvciBlYXNpZXIgcmVhZGFiaWxpdHkuCisJKG9hZXBfZW5jb2RlKTogQWRkIG1vcmUgY29tbWVudHMgYW5kIHJlc3RydWN0dXJlIHRvIG1hdGNoIHRoZQorCWRlc2NyaXB0aW9uIGluIFJGQy0zNDQ3LgorCisJKiBwdWJrZXkuYyAocGtjczFfZW5jb2RlX2Zvcl9zaWduYXR1cmUsIG9hZXBfZGVjb2RlKTogQ2hhbmdlCisJcmV0dXJuIHZhbHVlIGZyb20gb25lIE1QSSB0byBhIGJ1ZmZlci4KKwkoZ2NyeV9wa19kZWNyeXB0KTogQWRqdXN0IGZvciB0aGlzIGNoYW5nZS4KKworMjAxMS0wNS0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHBrY3MxX2RlY29kZV9mb3JfZW5jcnlwdGlvbik6IENoYW5nZSBoYW5kbGluZyBvZgorCWxlYWRpbmcgemVybyBieXRlLgorCisyMDExLTA1LTI3ICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2RlY3J5cHQpOiBGaXggZG91YmxlLWZyZWUgd2hlbiB1bi1wYWRkaW5nCisJaW52YWxpZCBkYXRhLiAgVGhhbmtzIHRvIFRvbSBSaXR0ZXIuCisKKzIwMTEtMDUtMjQgIERhaWtpIFVlbm8gIDx1ZW5vQHVuaXh1c2VyLm9yZz4KKworCSogcnNhLmMgKHJzYV92ZXJpZnkpOiBVc2UgQ01QIGlmIGdpdmVuLCB0byBjaGVjayB0aGUgZGVjcnlwdGVkCisJc2lnLgorCisJKiBwdWJrZXkuYyAoc2V4cF90b19lbmMsIHNleHBfZGF0YV90b19tcGkpOiBGYWN0b3Igb3V0CisJQ1RYIGluaXRpYWxpemF0aW9uIHRvIC4uLgorCShpbml0X2VuY29kaW5nX2N0eCk6IC4uIG5ldy4KKwkoZ2NyeV9wa192ZXJpZnkpOiBQYXNzIHZlcmlmeSBmdW5jIGFuZCB0aGUgYXJnIHRvIHB1YmtleV92ZXJpZnkuCisJKHBzc19lbmNvZGUsIHBzc192ZXJpZnksIHBzc192ZXJpZnlfY21wKTogTmV3LgorCisyMDExLTA1LTIzICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIHB1YmtleS5jIChwa2NzMV9kZWNvZGVfZm9yX2VuY3J5cHRpb24sIG9hZXBfZGVjb2RlKTogRml4IG1lbWxlYWsKKwl3aGVuIGdjcnlfbXBpX3ByaW50IGZhaWxzLgorCisyMDExLTA1LTE4ICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIHB1YmtleS5jIChzZXhwX2RhdGFfdG9fbXBpKTogRmFjdG9yIHNvbWUgY29kZSBvdXQgdG8gLi4uCisJKHBrY3MxX2VuY29kZV9mb3JfZW5jcnlwdGlvbik6IC4uIG5ldywKKwkocGtjczFfZW5jb2RlX2Zvcl9zaWduYXR1cmUpOiAuLiBuZXcuCisJKHBrY3MxX2RlY29kZV9mb3JfZW5jcnlwdGlvbik6IE5ldy4KKwkoZ2NyeV9wa19kZWNyeXB0KTogRG8gdW4tcGFkZGluZyBmb3IgUEtDUyMxIGFzIHdlbGwgYXMgT0FFUC4KKwkoc2V4cF90b19lbmMpOiBBYm9saXNoICJ1bnBhZCIgZmxhZywgd2hpY2ggaXMgbm90IG5lY2Vzc2FyeSBzaW5jZQorCXdlIGNhbiBkbyB1bi1wYWRkaW5nIGltcGxpY2l0bHkgd2hlbiAicGtjczEiIG9yICJvYWVwIiBpcyBnaXZlbi4KKworMjAxMS0wNS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNleHBfdG9fZW5jLCBzZXhwX2RhdGFfdG9fbXBpKTogU2V0IExBQkVMIHRvIE5VTEwKKwlhZnRlciBmcmVlLgorCShzZXhwX3RvX2VuYywgc2V4cF9kYXRhX3RvX21waSk6IERvIG5vdCBhbGxvdyBtdWx0aXBsZSBlbmNvZGluZworCWZsYWdzLgorCShvYWVwX2VuY29kZSwgb2FlcF9kZWNvZGUsIHNleHBfdG9fa2V5LCBzZXhwX3RvX3NpZykKKwkoc2V4cF90b19lbmMsIHNleHBfZGF0YV90b19tcGksIGdjcnlfcGtfZW5jcnlwdCwgZ2NyeV9wa19zaWduKQorCShnY3J5X3BrX2dlbmtleSwgX2djcnlfcGtfZ2V0X2VsZW1lbnRzKTogUmVwbGFjZSBhY2Nlc3MgdG8gRVJSTk8KKwlieSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvci4KKworMjAxMS0wNS0xMSAgRGFpa2kgVWVubyAgPHVlbm9AdW5peHVzZXIub3JnPgorCisJKiBwdWJrZXkuYyAoc2V4cF9kYXRhX3RvX21waSk6IEZhY3RvciBzb21lIGNvZGUgb3V0IHRvIC4uLgorCShnZXRfaGFzaF9hbGdvKTogLi4gbmV3LgorCShtZ2YxLCBvYWVwX2VuY29kZSwgb2FlcF9kZWNvZGUpOiBOZXcuCisJKHNleHBfdG9fZW5jKTogQWRkIGFyZyBDVFguICBSZW1vdmUgYXJnIFJFVF9XQU5UX1BLQ1MxLiAgU3VwcG9ydAorCU9BRVAuCisJKHNleHBfZGF0YV90b19tcGkpOiBBZGQgYXJnIENUWC4gIFN1cHBvcnQgT0FFUC4KKwkoZ2NyeV9wa19lbmNyeXB0KTogUGFzcyBhIENUWCB0byBzZXhwX2RhdGFfdG9fbXBpLgorCShnY3J5X3BrX2RlY3J5cHQpOiBQYXNzIGEgQ1RYIHRwIHNleHBfdG9fZW5jIGFuZCByZXBsYWNlCisJV0FOVF9QS0NTMS4gIEltcGxlbWVudCB1bnBhZGRpbmcgZm9yIE9BRVAuCisJKGdjcnlfcGtfc2lnbik6IFBhc3MgTlVMTCBmb3IgQ1RYIGFyZyBvZiBzZXhwX2RhdGFfdG9fbXBpLgorCShnY3J5X3BrX3ZlcmlmeSk6IERpdHRvLgorCisyMDExLTA0LTE5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3Blbik6IFJlcGxhY2UgZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gYnkKKwlncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvci4KKworMjAxMS0wNC0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBBdm9pZCBkb3VibGUgZnJlZSBvZiBMMi4KKworCSogY2lwaGVyLmMgKF9nY3J5X2NpcGhlcl9zZXRjdHIpOiBDbGVhciB1bnVzZWQgbGFzdGl2IGluZm8uCisJKGdjcnlfY2lwaGVyX2N0bCkgPEdDUllDVExfU0VUX0NUUj46IEltcGxlbWVudCBieSBjYWxsaW5nCisJX2djcnlfY2lwaGVyX3NldGN0ci4KKwkoZG9fY3RyX2VuY3J5cHQpOiBTYXZlIGxhc3QgY291bnRlciBhbmQgcmV1c2UgaXQuCisKKwkqIGNpcGhlci5jIChkb19jdHJfZW5jcnlwdCk6IEFsbG93IGFyYml0cmFyeSBsZW5ndGggaW5wdXRzIHRvCisJbWF0Y2ggdGhlIDEuNCBiZWhhdmlvdXIuCisKKzIwMTEtMDQtMDQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGVjYy5jIChjb21wdXRlX2tleWdyaXApOiBSZWxlYXNlIEwxIHdoaWxlIHBhcnNpbmcgImN1cnZlIi4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBBbHdheXMgcmVsZWFzZSBOQU1FIGFuZCBMMi4KKwlSZXBvcnRlZCBieSBCZW4gS2liYmV5LgorCisyMDExLTAzLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwcmltZWdlbi5jIChfZ2NyeV9nZW5lcmF0ZV9lbGdfcHJpbWUpOiBNYWtlIHN1cmUgdGhhdCBQUklNRSBpcworCU5VTEwgaWYgdGhlIGNhbGxlZCBmdW5jIGV2ZXIgcmV0dXJucyBhbiBlcnJvci4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZGVjcnlwdCk6IFJlbW92ZSB1bnVzZWQgdmFyIFBVQktFWS4KKworMjAxMS0wMy0wOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSoga2RmLmM6IE5ldy4KKworMjAxMS0wMi0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAoYWVzbmlfY2xlYW51cF8yXzQpOiBOZXcuCisJKGFlc2VuY194bW0xX3htbTAsIGRvX2Flc25pX2N0cl80KTogTmV3LgorCShfZ2NyeV9hZXNfY3RyX2VuYyk6IE5ldy4KKwkqIGNpcGhlci5jIChzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKTogQWRkIENUUl9FTkMuICBNb3ZlIGZpZWxkCisJQ1RSIGludG8gYW4gdV9jdHIgdW5pb24gYW5kIGFkanVzdCBhbGwgdXNlcnMuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBVc2UgX2djcnlfYWVzX2N0cl9lbmMuCisJKGRvX2N0cl9lbmNyeXB0KTogVXNlIGJ1bGsgbW9kZS4KKworMjAxMS0wMi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAodTMyX2FfdCk6IE5ldy4KKwkoZG9fZW5jcnlwdF9hbGlnbmVkLCBkb19lbmNyeXB0X2FsaWduZWQpOiBVc2UgdGhlIG5ldyB0eXBlIHRvCisJYXZvaWQgcHJvYmxlbXMgd2l0aCBzdHJpY3QgYWxpYXNpbmcgcnVsZXMuCisKKzIwMTEtMDItMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJpam5kYWVsLmMgKGRvX2Flc25pX2NmYikgW1VTRV9BRVNOSV06IE5ldy4KKwkoX2djcnlfYWVzX2NmYl9lbmMsIF9nY3J5X2Flc19jZmJfZGVjKSBbVVNFX0FFU05JXTogVXNlIG5ldyBmdWNudGlvbi4KKworMjAxMS0wMi0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAoZG9fYWVzbmlfZW5jX2FsaWduZWQsIGRvX2Flc25pX2RlY19hbGlnbmVkKTogVXNlCisJbW92ZHFhIGZvciB0aGUga2V5IGJ1dCBrZWVwIHVzaW5nIG1vdmRxdSBmb3IgdGhlIGRhdGEuCisJKGRvX2Flc25pKTogUmVtb3ZlIGFsaWdubWVudCBkZXRlY3Rpb24uICBEb24ndCBidXJuIHRoZSBzdGFjay4KKwkoYWVzbmlfcHJlcGFyZSwgYWVzbmlfY2xlYW51cCk6IE5ldyBtYWNyb3MuCisJKHJpam5kYWVsX2VuY3J5cHQsIF9nY3J5X2Flc19jZmJfZW5jLCBfZ2NyeV9hZXNfY2JjX2VuYykKKwkocmlqbmRhZWxfZGVjcnlwdCwgX2djcnlfYWVzX2NmYl9kZWMsIF9nY3J5X2Flc19jYmNfZGVjKTogVXNlCisJdGhlc2UgbWFjcm9zLiAgRG9uJ3QgYnVybiB0aGUgc3RhY2sgaW4gdGhlIFVTRV9BRVNOSSBjYXNlLgorCShkb19zZXRrZXkpOiBBZGQgZGlzYWJsZWQgY29kZSB0byB1c2UgYWVza2V5Z2VuYXNzaXN0LgorCisyMDExLTAyLTE0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByaWpuZGFlbC5jIChBVFRSX0FMSUdORURfMTYpOiBOZXcKKwkoZG9fYWVzbmkpOiBEbyBub3QgY29weSBpZiBhbHJlYWR5IGFsaWduZWQuCisJKGRvX2VuY3J5cHQsIGRvX2RlY3J5cHQpOiBEaXR0by4KKwkocmlqbmRhZWxfZGVjcnlwdCwgcmlqbmRhZWxfZW5jcnlwdCk6IEluY3JlYXNlIHN0YWNrIGJ1cm5pbmcgYW1vdW50LgorCisJKiByaWpuZGFlbC5jIChSSUpOREFFTF9jb250ZXh0KTogUmVvcmRlciBmaWVsZHMuICBDaGFuZ2UgZmllbGRuYW1lCisJUk9VTkRTIHRvIHJvdW5kcy4gIE1vdmUgcGFkbG9ja19rZXkgaW50byB1MS4KKwkoa2V5U2NoZWQsIGtleVNjaGVkMik6IFJlbmFtZSBtYWNyb3MgdG8ga2V5c2NoZXJyIGFuZCBrZXlzY2hkZWMKKwlhbmQgY2hhbmdlIGFsbCB1c2Vycy4KKwkocGFkbG9ja2tleSk6IE5ldyBtYWNyby4gIENoYW5nZSBhbGwgdXNlcnMgb2YgcGFkbG9ja19rZXkuCisJKiBjaXBoZXIuYyAoTkVFRF8xNkJZVEVfQUxJR05FRF9DT05URVhUKTogQWx3YXlzIGRlZmluZSBpZiB1c2luZyBnY2MuCisJKHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUpOiBBbGlnbiBVX0lWIHRvIGF0IGxlYXN0IDE2IGJ5dGUuCisKKzIwMTEtMDItMTMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJpam5kYWVsLmMgKFVTRV9BRVNOSSk6IE5ldy4gIERlZmluZSBmb3IgaWEzMiBhbmQgZ2NjID49IDQuCisJKG0xMjhpX3QpIFtVU0VfQUVTTkldOiBOZXcuCisJKFJJSk5EQUVMX2NvbnRleHQpIFtVU0VfQUVTTkldOiBBZGQgZmllbGQgdXNlX2Flc25pLgorCShkb19zZXRrZXkpOiBTZXQgVVNFX0FFU05JIGZvciBhbGwga2V5IGxlbmd0aHMuCisJKHByZXBhcmVfZGVjcnlwdGlvbikgW1VTRV9BRVNOSV06IFVzZSBhZXNpbWMgaW5zdG4gaWYgcmVxdWVzdGVkLgorCShkb19hZXNuaV9lbmNfYWxpZ25lZCwgZG9fYWVzbmlfZGVjX2FsaWduZWQpCisJKGRvX2Flc25pKSBbVVNFX0FFU05JXTogTmV3LgorCShyaWpuZGFlbF9lbmNyeXB0LCBfZ2NyeV9hZXNfY2ZiX2VuYywgX2djcnlfYWVzX2NiY19lbmMpCisJKHJpam5kYWVsX2RlY3J5cHQsIF9nY3J5X2Flc19jZmJfZGVjKQorCShfZ2NyeV9hZXNfY2JjX2RlYykgW1VTRV9BRVNOSV06IFVzZSBkb19hZXNuaS4KKworMjAxMS0wMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2N1cnZlKTogTmV3LgorCShzZXhwX3RvX2tleSk6IEFkZCBhcmcgT1ZFUlJJREVfRUxFTVMuCisJKHNleHBfZWxlbWVudHNfZXh0cmFjdF9lY2MpOiBBbGxvdyBmb3IgcGFyYW1zIG9ubHkuCisJKGdjcnlfcGtfZ2V0X3BhcmFtKTogTmV3LgorCSogZWNjLmMgKGVjY19nZXRfY3VydmUpOiBOZXcuCisJKGVjY19nZXRfcGFyYW1fc2V4cCk6IE5ldy4KKworMjAxMS0wMS0yOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2Vua2V5KTogSGFjayB0byBpbnNlcnQgdGhlIHVzZWQgY3VydmUgbmFtZS4KKworMjAxMS0wMS0yNyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZWNjLmMgKGZpbGxfaW5fY3VydmUpOiBSZW1vdmUuCisJKGdlbmVyYXRlX2N1cnZlKTogUmVuYW1lIHRvIC4uCisJKGZpbGxfaW5fY3VydmUpOiB0aGlzLiAgUmVtb3ZlIHNldHRpbmcgb2YgTkFNRV9PSUQuCisJKGVjY19lbmNyeXB0X3Jhdyk6IENoYW5nZSBuYW1lIG9mIGFyZyBEQVRBIHRvIEsgZm9yIGJldHRlcgorCXJlYWRhYmlsaXR5LiAgVXNlIEVDQ19wdWJsaWNfa2V5IGluc3RlYWQgb2YgRUNDX3NlY3JldF9rZXkuCisJUmVxdWlyZSBhIGNhbGxlciB0byBwYXNzIGEgY29tcGxldGUgcGtleSBhcnJheS4KKwkoZWNjX2RlY3J5cHRfcmF3KTogUmVxdWlyZSBhIGNhbGxlciB0byBwYXNzIGEgY29tcGxldGUgc2tleSBhcnJheS4KKwkoZWxsaXB0aWNfY3VydmVfdCk6IEFkZCBmaWVsZCBOQU1FLgorCShmaWxsX2luX2N1cnZlKTogU2V0IGZpZWxkLgorCShnZW5lcmF0ZV9rZXkpOiBBZGQgYXJnIFJfVVNFRF9DVVJWRS4KKwkoZWNjX2dlbmVyYXRlX2V4dCk6IFJldHVybiB1c2VkIGN1cnZlIG5hbWUuCisKKzIwMTEtMDEtMTMgIEFuZHJleSBKaXZzb3YgIDxvcGVucGdwQGJyYWluaHViLm9yZz4gICh3aykKKworCSogZWNjLmMgKGVjMm9zKTogRG8gbm90IGZyZWUgcGFzc2VkIHBhcmFtZXRlcnMgWCBhbmQgWS4gIEFkanVzdAorCWNhbGxlcnMuCisJKGVjY19lbmNyeXB0X3JhdywgZWNjX2RlY3J5cHRfcmF3KTogTmV3LgorCShlY2RoX25hbWVzLCBfZ2NyeV9wdWJrZXlfc3BlY19lY2RoKTogTmV3LgorCSogcHVia2V5LmMgKHB1YmtleV90YWJsZSk6IFN1cHBvcnQgRUNESC4KKworMjAxMC0wOC0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBSZW1vdmUgZG91YmxlIHJlbGVhc2Ugb2YgdGhlIG1vZHVsZS4KKwlGaXhlcyBidWcjMTI2My4KKworMjAxMC0wNi0xMCAgSmVmZiBKb2huc29uICA8bjNucHFAbWFjLmNvbT4gICh3aykKKworCSogZWNjLmMgKGVjY19nZW5lcmF0ZV9leHQpOiBQYXJzZSB0cmFuc2llbnQta2V5IGZsYWcuCisJKGdlbmVyYXRlX2tleSk6IEFkZCBhcmcgVFJBTlNJRU5UX0tFWSBhbmQgdXNlIGl0IHRvIHNldCB0aGUgcmFuZG9tCisJbGV2ZWwuCisKKzIwMTAtMDQtMTIgIEJyYWQgSGFyZHMgIDxicmFkaEBmcm9nbW91dGgubmV0PiAgKHdrKQorCisJU3BlbGxpbmcgZml4ZXMuCisKKzIwMTAtMDMtMjYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHRpZ2VyLmMgKGFzbik6IFVuZmV0dGVyIHRoZSBvbGQgVElHRVIgZnJvbSBhbiBPSUQuCisJKFRJR0VSX0NPTlRFWFQpOiBBZGQgZmllbGQgVkFSSUFOVC4KKwkodGlnZXJfaW5pdCk6IEZhY3RvciBjb2RlIG91dCB0byAuLi4KKwkoZG9faW5pdCk6IE5ldy4KKwkodGlnZXIxX2luaXQsIHRpZ2VyMl9pbml0KTogTmV3LgorCShfZ2NyeV9kaWdlc3Rfc3BlY190aWdlcjEsIF9nY3J5X2RpZ2VzdF9zcGVjX3RpZ2VyMik6IE5ldy4KKwkqIG1kLmMgKGRpZ2VzdF90YWJsZSk6IEFkZCBUSUdFUjEgYW5kIFRJR0VSMiB2YXJpYW50cy4KKworMjAwOS0xMi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc2hhMjU2LmMgKENobywgTWFqLCBTdW0wLCBTdW0xKTogVHVybiBtYWNyb3MgaW50byBpbmxpbmUKKwlmdW5jdGlvbnMuCisJKHRyYW5zZm9ybSk6IFBhcnRseSB1bnJvbGwgdG8gaW50ZXJ3ZWF2ZSB0aGUgY2hhaW4gdmFyaWFibGVzCisKKwkqIHNoYTUxMi5jIChST1RSLCBDaCwgTWFqLCBTdW0wLCBTdW0xKTogVHVybiBtYWNyb3MgaW50byBpbmxpbmUKKwlmdW5jdGlvbnMuCisJKHRyYW5zZm9ybSk6IFBhcnRseSB1bnJvbGwgdG8gaW50ZXJ3ZWF2ZSB0aGUgY2hhaW4gdmFyaWFibGVzLgorCVN1Z2dlc3RlZCBieSBDaHJpc3RpYW4gR3JvdGhvZmYuCisKKzIwMDktMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChvX2ZsYWdfbXVuZ2luZyk6IE5ldy4KKwkodGlnZXIubywgdGlnZXIubG8pOiBVc2UgaXQuCisKKwkqIGNpcGhlci5jIChkb19jdHJfZW5jcnlwdCk6IEFkZCBhcmcgT1VUQlVGTEVOLiAgQ2hlY2sgZm9yCisJc3VpdGFibGUgdmFsdWUuICBBZGQgY2hlY2sgZm9yIHZhbGlkIGlucHV0bGVuLiAgV2lwZSB0ZW1wb3JhcnkKKwltZW1vcnkuCisJKGRvX2N0cl9kZWNyeXB0KTogTGlrZXdpc2UuCisJKGRvX2NiY19lbmNyeXB0LCBkb19jYmNfZGVjcnlwdCk6IEFkZCBhcmcgT1VUQlVGTEVOLiAgQ2hlY2sgZm9yCisJc3VpdGFibGUgdmFsdWUuICBNb3ZlIGNoZWNrIGZvciB2YWxpZCBpbnB1dGxlbiB0byBoZXJlOyBjaGFuZ2UKKwlyZXR1cm5lZCBlcnJvciBmcm9tIElOVl9BUkcgdG8gSU5WX0xFTkdUSC4KKwkoZG9fZWNiX2VuY3J5cHQsIGRvX2VjYl9kZWNyeXB0KTogRGl0dG8uCisJKGRvX2NmYl9lbmNyeXB0LCBkb19jZmJfZGVjcnlwdCk6IERpdHRvLgorCShkb19vZmJfZW5jcnlwdCwgZG9fb2ZiX2RlY3J5cHQpOiBEaXR0by4KKwkoY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9lbmNyeXB0KTogQWRqdXN0IGZvciBhYm92ZSBjaGFuZ2VzLgorCShnY3J5X2NpcGhlcl9lbmNyeXB0LCBnY3J5X2NpcGhlcl9kZWNyeXB0KTogU2ltcGxpZnkuCisKKzIwMDktMTItMDkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9vcGVuKTogQWxsb3cgZm9yIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUC4KKwkoY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0KTogRGl0dG8uCisJKGRvX2Flc3dyYXBfZW5jcnlwdCwgZG9fYWVzd3JhcF9kZWNyeXB0KTogTmV3LgorCShzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKTogQWRkIGZpZWxkIG1hcmtzLgorCShjaXBoZXJfc2V0a2V5LCBjaXBoZXJfc2V0aXYpOiBVcGRhdGUgbWFya3MgZmxhZ3MuCisJKGNpcGhlcl9yZXNldCk6IFJlc2V0IG1hcmtzLgorCShjaXBoZXJfZW5jcnlwdCwgY2lwaGVyX2RlY3J5cHQpOiBBZGQgbmV3IGFyZyBPVVRCVUZMRU4uCisJKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGdjcnlfY2lwaGVyX2RlY3J5cHQpOiBQYXNzIG91dGJ1ZmxlbiB0bworCWNpcGhlcl9lbmNyeXB0LiAgUmVwbGFjZSBHUEdfRVJSX1RPT19TSE9SVCBieQorCUdQR19FUlJfQlVGRkVSX1RPT19TSE9SVC4KKworMjAwOS0wOC0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZHNhLmMgKGRzYV9nZW5lcmF0ZV9leHQpOiBSZWxlYXNlIHJldGZhY3RvcnMgYXJyYXkgYmVmb3JlCisJc2V0dGluZyBpdCB0byBOVUxMLiAgUmVwb3J0ZWQgYnkgRGFpa28gVWVuby4KKworMjAwOS0wNy0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbWQuYyAobWRfcmVhZCk6IEZpeCBpbmNvbXBsZXRlIGNoZWNrIGZvciBOVUxMLgorCVJlcG9ydGVkIGJ5IEZhYmlhbiBLYWlsLgorCisyMDA5LTAzLTMxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAocnNhX2NoZWNrX3NlY3JldF9rZXkpOiBSZXR1cm4gR1BHX0VSUl9CQURfU0VDS0VZIGFuZCBub3QKKwlHUEdfRVJSX1BVQktFWV9BTEdPLgorCisyMDA5LTAyLTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAoZ2VuZXJhdGVfeDkzMSk6IERvIG5vdCBpbml0aWFsaXplIFRCTCB3aXRoIGF1dG9tYXRpYworCXZhcmlhYmxlcy4KKwkqIHdoaXJscG9vbC5jLCB0aWdlci5jLCBzaGEyNTYuYywgc2hhMS5jLCBybWQxNjAuYywgbWQ1LmMKKwkqIG1kNC5jLCBjcmMuYzogUmVtb3ZlIG1lbW9yeS5oLiAgVGhpcyBpcyBnYXJiYWdlIGZyb20gZ251cGcuCisJUmVwb3J0ZWQgYnkgRGFuIEZhbmRyaWNoLgorCisyMDA5LTAxLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBlY2MuYyAoY29tcHV0ZV9rZXlncmlwKTogUmVtb3ZlIHN1cGVyZmx1b3VzIGNvbnN0LgorCisyMDA5LTAxLTA2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybWQxNjAuYyAob2lkX3NwZWNfcm1kMTYwKTogQWRkIFRlbGVUcnVzdCBpZGVudGlmaWVyLgorCisyMDA4LTEyLTEwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBkc2EuYyAoZ2VuZXJhdGUpOiBBZGQgYXJnIERPTUFJTiBhbmQgdXNlIGl0IGlmIHNwZWNpZmllZC4KKwkoZ2VuZXJhdGVfZmlwczE4Nik6IERpdHRvLgorCShkc2FfZ2VuZXJhdGVfZXh0KTogUGFyc2UgYW5kIGNoZWNrIHRoZSBvcHRpb25hbCAiZG9tYWluIgorCXBhcmFtZXRlciBhbmQgcGFzcyB0aGVtIHRvIHRoZSBnZW5lcmF0ZSBmdW5jdGlvbnMuCisKKwkqIHJpam5kYWVsLmMgKHJpam5kYWVsX25hbWVzKTogQWRkICJBRVMxMjgiIGFuZCAiQUVTLTEyOCIuCisJKHJpam5kYWVsMTkyX25hbWVzKTogQWRkICJBRVMtMTkyIi4KKwkocmlqbmRhZWwyNTZfbmFtZXMpOiBBZGQgIkFFUy0yNTYiLgorCisyMDA4LTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBkc2EuYyAoZ2VuZXJhdGUpOiBBZGQgYXJnIFRSQU5TSUVOVF9LRVkgYW5kIHVzZSBpdCB0byBkZXRybWluZQorCXRoZSBSTkcgcXVhbGl0eSBuZWVkZWQuCisJKGRzYV9nZW5lcmF0ZV9leHQpOiBQYXJzZSB0aGUgdHJhbnNpZW50LWtleSBmbGFnIHVuZCBwYXNzIGl0IHRvCisJZ2VuZXJhdGUuCisKKzIwMDgtMTEtMjggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGRzYS5jIChnZW5lcmF0ZV9maXBzMTg2KTogQWRkIGFyZyBERVJJVkVQQVJNUyBhbmQgdXNlIHRoZSBzZWVkCisJdmFsdWUgaWYgYXZhaWxhYmxlLgorCisJKiBwcmltZWdlbi5jIChfZ2NyeV9nZW5lcmF0ZV9maXBzMTg2XzJfcHJpbWUpOiBGaXggaW5uZXIgcCBsb29wLgorCisyMDA4LTExLTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwcmltZWdlbi5jIChfZ2NyeV9nZW5lcmF0ZV9maXBzMTg2XzNfcHJpbWUpOiBOZXcuCisJKiBkc2EuYyAoZ2VuZXJhdGVfZmlwczE4Nik6IEFkZCBhcmcgVVNFX0ZJUFMxODZfMi4KKwkoZHNhX2dlbmVyYXRlX2V4dCk6IFBhcnNlIG5ldyBmbGFnIHVzZS1maXBzMTgzLTIuCisKKzIwMDgtMTEtMjUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGRzYS5jIChnZW5lcmF0ZV9maXBzMTg2KTogTmV3LgorCShkc2FfZ2VuZXJhdGVfZXh0KTogVXNlIG5ldyBmdW5jdGlvbiBpZiBkZXJpdmUtcGFybXMgYXJlIGdpdmVuIG9yCisJaWYgaW4gRklQUyBtb2RlLgorCSogcHJpbWVnZW4uYyAoX2djcnlfZ2VuZXJhdGVfZmlwczE4Nl8yX3ByaW1lKTogTmV3LgorCisyMDA4LTExLTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBJbnNlcnQgY29kZSB0byBvdXRwdXQgZXh0cmFpbmZvLgorCShwdWJrZXlfZ2VuZXJhdGUpOiBBZGQgYXJnIFJfRVhUUkFJTkZPIGFuZCBwYXNzIGl0IHRvIHRoZSBleHRlbmRlZAorCWtleSBnZW5lcmF0aW9uIGZ1bmN0aW9uLgorCSogcnNhLmMgKGdlbl94OTMxX3Bhcm1feHAsIGdlbl94OTMxX3Bhcm1feGkpOiBOZXcuCisJKGdlbmVyYXRlX3g5MzEpOiBHZW5lcmF0ZSBwYXJhbXMgaWYgbm90IGdpdmVuLgorCShyc2FfZ2VuZXJhdGVfZXh0KTogUGFyc2UgdXNlLXg5MzEgZmxhZy4gIFJldHVybiBwLXEtc3dhcHBlZAorCWluZGljYXRvci4KKwkqIGRzYS5jIChkc2FfZ2VuZXJhdGVfZXh0KTogUHV0IFJFVEZBQ1RPUlMgaW50byBSX0VYVFJBSU5GTyBpZgorCXBvc3NpYmxlLgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBSZW1vdmUgcGFyc2luZyBvZiBhbG1vc3QgYWxsCisJcGFyYW1ldGVycyBhbmQgcGFzcyB0aGUgcGFyYW1ldGVyIFMtZXhwcmVzc2lvbiB0byBwdWJrZXlfZ2VuZXJhdGUuCisJKHB1YmtleV9nZW5lcmF0ZSk6IFNpbXBsaWZ5IGJ5IHJlcXVpdHJpbmcgbW9kdWxlcyB0byBwYXJzZSB0aGUKKwlwYXJhbWV0ZXJzLiBSZW1vdmUgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIEVsZ2FtYWwgYW5kIEVDQy4KKwkoc2V4cF9lbGVtZW50c19leHRyYWN0X2VjYyk6IEFkZCBhcmcgRVhUUkFTUEVDIGFuZCB1c2UgaXQuICBGaXgKKwlzbWFsbCBtZW1vcnkgbGVhay4KKwkoc2V4cF90b19rZXkpOiBQYXNzIEVYVFJBU1BFQyB0byBzZXhwX2VsZW1lbnRzX2V4dHJhY3RfZWNjLgorCShwdWJrZXlfdGFibGUpIFtVU0VfRUxHQU1BTF06IEFkZCByZWFsIGV4dHJhc3BlYy4KKwkqIHJzYS5jIChyc2FfZ2VuZXJhdGVfZXh0KTogQWRqdXN0IGZvciBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCSogZHNhLmMgKGRzYV9nZW5lcmF0ZV9leHQpOiBEaXR0by4KKwkqIGVsZ2FtYWwuYyAoX2djcnlfZWxnX2dlbmVyYXRlKTogRGl0dG8uIFJlbmFtZSB0byBlbGdfZ2VuZXJhdGVfZXh0LgorCShlbGdfZ2VuZXJhdGUpOiBOZXcuCisJKF9nY3J5X2VsZ19nZW5lcmF0ZV91c2luZ194KTogUmVtb3ZlIGFmdGVyIG1lcmdpbmcgY29kZSB3aXRoCisJZWxnX2dlbmVyYXRlX2V4dC4KKwkoX2djcnlfcHVia2V5X2V4dHJhc3BlY19lbGcpOiBOZXcuCisJKF9nY3J5X2VsZ19jaGVja19zZWNyZXRfa2V5LCBfZ2NyeV9lbGdfZW5jcnlwdCwgX2djcnlfZWxnX3NpZ24pCisJKF9nY3J5X2VsZ192ZXJpZnksIF9nY3J5X2VsZ19nZXRfbmJpdHMpOiBNYWtlIHN0YXRpYyBhbmQgcmVtb3ZlCisJX2djcnlfIHByZWZpeC4KKwkqIGVjYy5jIChfZ2NyeV9lY2NfZ2VuZXJhdGUpOiBSZW5hbWUgdG8gZWNjX2dlbmVyYXRlX2V4dCBhbmQKKwlhZGp1c3QgZm9yIG5ldyBjYWxsaW5nIGNvbnZlbnRpb24uCisJKF9nY3J5X2VjY19nZXRfcGFyYW0pOiBSZW5hbWUgdG8gZWNjX2dldF9wYXJhbSBhbmQgbWFrZSBzdGF0aWMuCisJKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfZWNkc2EpOiBBZGQgZWNjX2dlbmVyYXRlX2V4dCBhbmQKKwllY2NfZ2V0X3BhcmFtLgorCisyMDA4LTExLTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAocHVia2V5X2dlbmVyYXRlKTogQWRkIGFyZyBERVJJVkVQQVJNUy4KKwkoZ2NyeV9wa19nZW5rZXkpOiBQYXJzZSBkZXJpdmUtcGFybXMgYW5kIHBhc3MgaXQgdG8gYWJvdmUuCisJKiByc2EuYyAoZ2VuZXJhdGVfeDkzMSk6IE5ldy4KKwkocnNhX2dlbmVyYXRlX2V4dCk6IEFkZCBhcmcgREVSSVZFUEFSTVMgYW5kIGNhbGwgbmV3IGZ1bmN0aW9uIGluCisJZmlwcyBtb2RlIG9yIGlmIERFUklWRVBBUk1TIGlzIGdpdmVuLgorCSogcHJpbWVnZW4uYyAoX2djcnlfZGVyaXZlX3g5MzFfcHJpbWUsIGZpbmRfeDkzMV9wcmltZSk6IE5ldy4KKworMjAwOC0xMS0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcnNhLmMgKHJzYV9kZWNyeXB0KTogVXNlIGdjcnlfY3JlYXRlX25vbmNlIGZvciBibGluZGluZy4KKwkoZ2VuZXJhdGUpOiBSZW5hbWUgdG8gZ2VuZXJhdGVfc3RkLgorCisyMDA4LTExLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtZC5jIChtZF9vcGVuKTogVXNlIGEgc3dpdGNoIHRvIHNldCB0aGUgQnNpemUuCisJKHByZXBhcmVfbWFjcGFkcyk6IEZpeCBsb25nIGtleSBjYXNlIGZvciBTSEEzODQgYW5kIFNIQTUxMi4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX2hhbmRsZSk6IEFkZCBmaWVsZCBFWFRSQVNQRUMuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBTZXQgaXQuCisJKGdjcnlfY2lwaGVyX2N0bCk6IEFkZCBwcml2YXRlIGNvbnRyb2wgY29kZSB0byBkaXNhYmxlIHdlYWsga2V5CisJZGV0ZWN0aW9uIGFuZCB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgYmxvY2suCisJKiBkZXMuYyAoX3RyaXBsZWRlc19jdHgpOiBBZGQgZmllbGQgRkxBR1MuCisJKGRvX3RyaXBsZWRlc19zZXRfZXh0cmFfaW5mbyk6IE5ldy4KKwkoX2djcnlfY2lwaGVyX2V4dHJhc3BlY190cmlwbGVkZXMpOiBBZGQgbmV3IGZ1bmN0aW9uLgorCShkb190cmlwbGVkZXNfc2V0a2V5KTogRGlzYWJsZSB3ZWFrIGtleSBkZXRlY3Rpb24uCisKKzIwMDgtMTAtMjQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1kLmMgKGRpZ2VzdF90YWJsZSk6IEFsbG93IE1ENSBpbiBmaXBzIG1vZGUuCisJKG1kX3JlZ2lzdGVyX2RlZmF1bHQpOiBUYWtlIHNwZWNpYWwgYWN0aW9uIGZvciBNRDUuCisJKG1kX2VuYWJsZSwgZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IERpdHRvLgorCisyMDA4LTA5LTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByaWpuZGFlbC5jIChkb19zZXRrZXkpOiBQcm9wZXJseSBhbGlnbiAidCIgYW5kICJ0ayIuCisJKHByZXBhcmVfZGVjcnlwdGlvbik6IFByb3Blcmx5IGFsaWduICJ3Ii4gIEZpeGVzIGJ1ZyAjOTM2LgorCisyMDA4LTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBQYXJzZSBkb21haW4gcGFyYW1ldGVyLgorCShwdWJrZXlfZ2VuZXJhdGUpOiBBZGQgbmV3IGFyZyBET01BSU4gYW5kIHJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yCisJRFNBIHdpdGggcWJpdHMuCisJKiByc2EuYyAocnNhX2dlbmVyYXRlKTogQWRkIGR1bW15IGFyZ3MgUUJJVFMsIE5BTUUgYW5kIERPTUFJTiBhbmQKKwlyZW5hbWUgdG8gcnNhX2dlbmVyYXRlX2V4dC4gIENoYW5nZSBjYWxsZXIuCisJKF9nY3J5X3JzYV9nZW5lcmF0ZSwgX2djcnlfcnNhX2NoZWNrX3NlY3JldF9rZXkpCisJKF9nY3J5X3JzYV9lbmNyeXB0LCBfZ2NyeV9yc2FfZGVjcnlwdCwgX2djcnlfcnNhX3NpZ24pCisJKF9nY3J5X3JzYV92ZXJpZnksIF9nY3J5X3JzYV9nZXRfbmJpdHMpOiBNYWtlIHN0YXRpYyBhbmQgcmVtb3ZlCisJX2djcnlfIHByZWZpeC4KKwkoX2djcnlfcHVia2V5X3NwZWNfcnNhLCBfZ2NyeV9wdWJrZXlfZXh0cmFzcGVjX3JzYSk6IEFkanVzdCBuYW1lcy4KKwkqIGRzYS5jIChkc2FfZ2VuZXJhdGVfZXh0KTogTmV3LgorCShfZ2NyeV9kc2FfZ2VuZXJhdGUpOiBSZXBsYWNlIGNvZGUgYnkgYSBjYWxsIHRvIGRzYV9nZW5lcmF0ZS4KKwkoX2djcnlfZHNhX2NoZWNrX3NlY3JldF9rZXksIF9nY3J5X2RzYV9zaWduLCBfZ2NyeV9kc2FfdmVyaWZ5KQorCShfZ2NyeV9kc2FfZ2V0X25iaXRzKTogTWFrZSBzdGF0aWMgYW5kIHJlbW92ZSBfZ2NyeSBwcmVmaXguCisJKF9nY3J5X2RzYV9nZW5lcmF0ZTIpOiBSZW1vdmUuCisJKF9nY3J5X3B1YmtleV9zcGVjX2RzYSk6IEFkanVzdCB0byBuYW1lIGNoYW5nZXMuCisJKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfcnNhKTogQWRkIGRzYV9nZW5lcmF0ZV9leHQuCisKKzIwMDgtMDktMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGVjYy5jIChydW5fc2VsZnRlc3RzKTogQWRkIGFyZyBFWFRFTkRFRC4KKworMjAwOC0wOS0xMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcnNhLmMgKHRlc3Rfa2V5cyk6IERvIGEgYmFkIGNhc2Ugc2lnbmF0dXJlIGNoZWNrLgorCSogZHNhLmMgKHRlc3Rfa2V5cyk6IERvIGEgYmFkIGNhc2UgY2hlY2suCisKKwkqIGNpcGhlci5jIChfZ2NyeV9jaXBoZXJfc2VsZnRlc3QpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBwYXNzIGl0CisJdG8gdGhlIGNhbGxlZCB0ZXN0cy4KKwkqIG1kLmMgKF9nY3J5X21kX3NlbGZ0ZXN0KTogRGl0dG8uCisJKiBwdWJrZXkuYyAoX2djcnlfcGtfc2VsZnRlc3QpOiBEaXR0by4KKwkqIHJpam5kYWVsLmMgKHJ1bl9zZWxmdGVzdHMpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBwYXNzIGl0IHRvIHRoZQorCWNhbGxlZCB0ZXN0cy4KKwkoc2VsZnRlc3RfZmlwc18xMjgpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBydW4gb25seSBvbmUgdGVzdAorCW5vbi1leHRlbmRlZCBtb2RlLgorCShzZWxmdGVzdF9maXBzXzE5Mik6IEFkZCBkdW1teSBhcmcgRVhURU5ERUQuCisJKHNlbGZ0ZXN0X2ZpcHNfMjU2KTogRGl0dG8uCisJKiBobWFjLXRlc3RzLmMgKF9nY3J5X2htYWNfc2VsZnRlc3QpOiBEaXR0by4KKwkocnVuX3NlbGZ0ZXN0cyk6IERpdHRvLgorCShzZWxmdGVzdHNfc2hhMSk6IEFkZCBhcmcgRVhURU5ERUQgYW5kIHJ1biBvbmx5IG9uZSB0ZXN0CisJbm9uLWV4dGVuZGVkIG1vZGUuCisJKHNlbGZ0ZXN0c19zaGEyMjQsIHNlbGZ0ZXN0c19zaGEyNTYpOiBEaXR0by4KKwkoc2VsZnRlc3RzX3NoYTM4NCwgc2VsZnRlc3RzX3NoYTUxMik6IERpdHRvLgorCSogc2hhMS5jIChydW5fc2VsZnRlc3RzKTogQWRkIGFyZyBFWFRFTkRFRCBhbmQgcGFzcyBpdCB0byB0aGUKKwljYWxsZWQgdGVzdC4KKwkoc2VsZnRlc3RzX3NoYTEpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBydW4gb25seSBvbmUgdGVzdAorCW5vbi1leHRlbmRlZCBtb2RlLgorCSogc2hhMjU2LmMgKHJ1bl9zZWxmdGVzdHMpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBwYXNzIGl0IHRvIHRoZQorCWNhbGxlZCB0ZXN0cy4KKwkoc2VsZnRlc3RzX3NoYTIyNCk6IEFkZCBhcmcgRVhURU5ERUQgYW5kIHJ1biBvbmx5IG9uZSB0ZXN0CisJbm9uLWV4dGVuZGVkIG1vZGUuCisJKHNlbGZ0ZXN0c19zaGEyNTYpOiBEaXR0by4KKwkqIHNoYTUxMi5jIChydW5fc2VsZnRlc3RzKTogQWRkIGFyZyBFWFRFTkRFRCBhbmQgcGFzcyBpdCB0byB0aGUKKwljYWxsZWQgdGVzdHMuCisJKHNlbGZ0ZXN0c19zaGEzODQpOiBBZGQgYXJnIEVYVEVOREVEIGFuZCBydW4gb25seSBvbmUgdGVzdAorCW5vbi1leHRlbmRlZCBtb2RlLgorCShzZWxmdGVzdHNfc2hhNTEyKTogRGl0dG8uCisJKiBkZXMuYyAocnVuX3NlbGZ0ZXN0cyk6IEFkZCBhcmcgRVhURU5ERUQgYW5kIHBhc3MgaXQgdG8gdGhlCisJY2FsbGVkIHRlc3QuCisJKHNlbGZ0ZXN0X2ZpcHMpOiBBZGQgZHVtbXkgYXJnIEVYVEVOREVELgorCSogcnNhLmMgKHJ1bl9zZWxmdGVzdHMpOiBBZGQgZHVtbXkgYXJnIEVYVEVOREVELgorCisJKiBkc2EuYyAocnVuX3NlbGZ0ZXN0cyk6IEFkZCBkdW1teSBhcmcgRVhURU5ERUQuCisKKwkqIHJzYS5jIChleHRyYWN0X2FfZnJvbV9zZXhwKTogTmV3LgorCShzZWxmdGVzdF9lbmNyXzEwMjQpOiBDaGVjayB0aGF0IHRoZSBjaXBoZXJ0ZXh0IGRvZXMgbm90IG1hdGNoIHRoZQorCXBsYWludGV4dC4KKwkodGVzdF9rZXlzKTogSW1wcm92ZSB0ZXN0cyBhbmQgcmV0dXJuIGFuIGVycm9yIHN0YXR1cy4KKwkoZ2VuZXJhdGUpOiBSZXR1cm4gYW4gZXJyb3IgaWYgdGVzdF9rZXlzIGZhaWxzLgorCSogZHNhLmMgKHRlc3Rfa2V5cyk6IEFkZCBjb21tZW50cyBhbmQgcmV0dXJuIGFuIGVycm9yIHN0YXR1cy4KKwkoZ2VuZXJhdGUpOiBSZXR1cm4gYW4gZXJyb3IgaWYgdGVzdF9rZXlzIGZhaWxlZC4KKworMjAwOC0wOS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcnNhLmMgKF9nY3J5X3JzYV9kZWNyeXB0KTogUmV0dXJuIGFuIGVycm9yIGluc3RlYWQgb2YgY2FsbGluZworCUJVRyBpbiBjYXNlIG9mIGEgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSBjb25kaXRpb24uCisJKHNhbXBsZV9zZWNyZXRfa2V5LCBzYW1wbGVfcHVibGljX2tleSk6IE5ldy4KKwkoc2VsZnRlc3Rfc2lnbl8xMDI0LCBzZWxmdGVzdF9lbmNyXzEwMjQpOiBOZXcuCisJKHNlbGZ0ZXN0c19yc2EpOiBJbXBsZW1lbnQgdGVzdHMuCisJKiBkc2EuYyAoc2FtcGxlX3NlY3JldF9rZXksIHNhbXBsZV9wdWJsaWNfa2V5KTogTmV3LgorCShzZWxmdGVzdF9zaWduXzEwMjQpOiBOZXcuCisJKHNlbGZ0ZXN0c19kc2EpOiBJbXBsZW1lbnQgdGVzdHMuCisKKzIwMDgtMDktMDkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGhtYWMtdGVzdHMuYyAoc2VsZnRlc3RzX3NoYTEpOiBBZGQgdGVzdHMuCisJKHNlbGZ0ZXN0c19zaGEyMjQsIHNlbGZ0ZXN0c19zaGEzODQsIHNlbGZ0ZXN0c19zaGE1MTIpOiBNYWtlIHVwIHRlc3RzLgorCisJKiBoYXNoLWNvbW1vbi5jLCBoYXNoLWNvbW1vbi5oOiBOZXcuCisJKiBzaGExLmMgKHNlbGZ0ZXN0c19zaGExKTogQWRkIDMgdGVzdHMuCisJKiBzaGEyNTYuYyAoc2VsZnRlc3RzX3NoYTI1Niwgc2VsZnRlc3RzX3NoYTIyNCk6IERpdHRvLgorCSogc2hhNTEyLmMgKHNlbGZ0ZXN0c19zaGE1MTIsIHNlbGZ0ZXN0c19zaGEzODQpOiBEaXR0by4KKworMjAwOC0wOC0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBSZW1vdmUgdGhlIHNwZWNpYWwgY2FzZSBmb3IgUlNBCisJYW5kIGNoZWNrIHdoZXRoZXIgYSBjdXN0b20gY29tcHV0YXRpb24gZnVuY3Rpb24gaGFzIGJlZW4gc2V0dXAuCisJKiByc2EuYyAoY29tcHV0ZV9rZXlncmlwKTogTmV3LgorCShfZ2NyeV9wdWJrZXlfZXh0cmFzcGVjX3JzYSk6IFNldHVwIHRoaXMgZnVuY3Rpb24uCisJKiBlY2MuYyAoY29tcHV0ZV9rZXlncmlwKTogTmV3LgorCShfZ2NyeV9wdWJrZXlfZXh0cmFzcGVjX2VjZHNhKTogU2V0dXAgdGhpcyBmdW5jdGlvbi4KKworMjAwOC0wOC0yOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY2lwaGVyLmMgKGNpcGhlcl9kZWNyeXB0LCBjaXBoZXJfZW5jcnlwdCk6IFJldHVybiBhbiBlcnJvciBpZgorCW1vZGUgTk9ORSBpcyB1c2VkLgorCShnY3J5X2NpcGhlcl9vcGVuKTogQWxsb3cgbW9kZSBOT05FIG9ubHkgd2l0aCBhIGRlYnVnIGZsYWcgc2V0IGFuZAorCWlmIG5vdCBpbiBGSVBTIG1vZGUuCisKKzIwMDgtMDgtMjYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChwdWJrZXlfZ2VuZXJhdGUpOiBBZGQgYXJnIEtFWUdFTl9GTEFHUy4KKwkoZ2NyeV9wa19nZW5rZXkpOiBJbXBsZW1lbnQgbmV3IHBhcmFtZXRlciAidHJhbnNpZW50LWtleSIgYW5kCisJcGFzcyBpdCBhcyBmbGFncyB0byBwdWJrZXlfZ2VuZXJhdGUuCisJKHB1YmtleV9nZW5lcmF0ZSk6IE1ha2UgdXNlIG9mIGFuIGV4dF9nZW5lcmF0ZSBmdW5jdGlvbi4KKwkqIHJzYS5jIChnZW5lcmF0ZSk6IEFkZCBuZXcgYXJnIHRyYW5zaWVudF9rZXkgYW5kIHBhc3MgYXBwcm9wcmlhdGUKKwlhcmdzIHRvIHRoZSBwcmltZSBnZW5lcmF0b3IuCisJKF9nY3J5X3JzYV9nZW5lcmF0ZSk6IEZhY3RvciBhbGwgY29kZSBvdXQgdG8gLi4uCisJKHJzYV9nZW5lcmF0ZSk6IC4uIG5ldyBmdW5jIHdpdGggZXh0cmEgYXJnIEtFWUdFTl9GTEFHUy4KKwkoX2djcnlfcHVia2V5X2V4dHJhc3BlY19lY2RzYSk6IFNldHVwIHJzYV9nZW5lcmF0ZS4KKwkqIHByaW1lZ2VuLmMgKF9nY3J5X2dlbmVyYXRlX3NlY3JldF9wcmltZSkKKwkoX2djcnlfZ2VuZXJhdGVfcHVibGljX3ByaW1lKTogQWRkIG5ldyBhcmcgUkFORE9NX0xFVkVMLgorCisyMDA4LTA4LTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwcmltZWdlbi5jIChfZ2NyeV9nZW5lcmF0ZV9zZWNyZXRfcHJpbWUpCisJKF9nY3J5X2dlbmVyYXRlX3B1YmxpY19wcmltZSk6IFVzZSBhIGNvbnN0YW50IG1hY3JvIGZvciB0aGUgcmFuZG9tCisJbGV2ZWwuCisKKzIwMDgtMDgtMTkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3RfZWNjKSBbIVVTRV9FQ0NdOiBEbyBub3QgYWxsb3cKKwlhbGxvdyAiY3VydmUiIHBhcmFtZXRlci4KKworMjAwOC0wOC0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKF9nY3J5X3BrX3NlbGZ0ZXN0KTogTmV3LgorCSogZHNhLmMgKHNlbGZ0ZXN0c19kc2EsIHJ1bl9zZWxmdGVzdHMpOiBOZXcuCisJKiByc2EuYyAoc2VsZnRlc3RzX3JzYSwgcnVuX3NlbGZ0ZXN0cyk6IE5ldy4KKwkqIGVjYy5jIChzZWxmdGVzdHNfZWNkc2EsIHJ1bl9zZWxmdGVzdHMpOiBOZXcuCisKKwkqIG1kLmMgKF9nY3J5X21kX3NlbGZ0ZXN0KTogTmV3LgorCSogc2hhMS5jIChydW5fc2VsZnRlc3RzLCBzZWxmdGVzdHNfc2hhMSk6IE5ldy4KKwkqIHNoYTI1Ni5jIChzZWxmdGVzdHNfc2hhMjI0LCBzZWxmdGVzdHNfc2hhMjU2LCBydW5fc2VsZnRlc3RzKTogTmV3LgorCSogc2hhNTEyLmMgKHNlbGZ0ZXN0c19zaGEzODQsIHNlbGZ0ZXN0c19zaGE1MTIsIHJ1bl9zZWxmdGVzdHMpOiBOZXcuCisKKwkqIGRlcy5jIChzZWxmdGVzdCk6IFJlbW92ZSBzdGF0aWMgdmFyaWFibGUgZm9ybSBzZWxmdGVzdC4KKwkoZGVzX3NldGtleSk6IE5vIG9uLXRoZS1mbHkgc2VsZiB0ZXN0IGluIGZpcHMgbW9kZS4KKwkodHJpcGxlZGVzX3NldDNrZXlzKTogRGl0dG8uCisKKwkqIGNpcGhlci5jIChfZ2NyeV9jaXBoZXJfc2V0a2V5LCBfZ2NyeV9jaXBoZXJfc2V0aXYpOgorCisJKiBkc2EuYyAoZ2VuZXJhdGUpOiBCYWlsIG91dCBpbiBmaXBzIG1vZGUgaWYgTkJJVFMgaXMgbGVzcyB0aGFuCTEwMjQuCisJKiByc2EuYyAoZ2VuZXJhdGUpOiBSZXR1cm4gYW4gZXJyb3IgY29kZSBpZiB0aGUgdGhlIHJlcXVlc3RlZCBzaXplCisJaXMgbGVzcyB0aGFuIDEwMjQgYW5kIHdlIGFyZSBpbiBmcGlzIG1vZGUuCisJKF9nY3J5X3JzYV9nZW5lcmF0ZSk6IFRha2UgY2FyZSBvZiB0aGF0IGVycm9yIGNvZGUuCisKKwkqIGVjYy5jIChnZW5lcmF0ZV9jdXJ2ZSk6IEluIGZpcHMgbW9kZSBlbmFibGUgb25seSBOSVNUIGN1cnZlcy4KKworCSogY2lwaGVyLmMgKF9nY3J5X2NpcGhlcl9zZWxmdGVzdCk6IE5ldy4KKworCSogc2hhNTEyLmMgKF9nY3J5X2RpZ2VzdF9leHRyYXNwZWNfc2hhMzg0KQorCShfZ2NyeV9kaWdlc3RfZXh0cmFzcGVjX3NoYTUxMik6IE5ldy4KKwkqIHNoYTI1Ni5jIChfZ2NyeV9kaWdlc3RfZXh0cmFzcGVjX3NoYTIyNCkKKwkoX2djcnlfZGlnZXN0X2V4dHJhc3BlY19zaGEyNTYpOiBOZXcuCisJKiBzaGExLmMgKF9nY3J5X2RpZ2VzdF9leHRyYXNwZWNfc2hhMSk6IE5ldy4KKwkqIGVjYy5jIChfZ2NyeV9wdWJrZXlfZXh0cmFzcGVjX2VjZHNhKTogTmV3LgorCSogZHNhLmMgKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfZHNhKTogTmV3LgorCSogcnNhLmMgKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfcnNhKTogTmV3LgorCSogcmlqbmRhZWwuYyAoX2djcnlfY2lwaGVyX2V4dHJhc3BlY19hZXMpCisJKF9nY3J5X2NpcGhlcl9leHRyYXNwZWNfYWVzMTkyLCBfZ2NyeV9jaXBoZXJfZXh0cmFzcGVjX2FlczI1Nik6IE5ldy4KKwkqIGRlcy5jIChfZ2NyeV9jaXBoZXJfZXh0cmFzcGVjX3RyaXBsZWRlcyk6IE5ldy4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX3JlZ2lzdGVyKTogUmVuYW1lIHRvIF9nY3J5X2NpcGhlcl9yZWdpc3Rlci4KKwlBZGQgYXJnIEVYVFJBU1BFQy4KKwkoZHVtbXlfZXh0cmFfc3BlYyk6IE5ldy4KKwkoY2lwaGVyX3RhYmxlX2VudHJ5KTogQWRkIGV4dHJhc3BlYyBmaWVsZC4KKwkqIG1kLmMgKF9nY3J5X21kX3JlZ2lzdGVyKTogUmVuYW1lIHRvIF9nY3J5X21kX3JlZ2lzdGVyLiAgQWRkCisJYXJnIEVYVFJBU1BFQy4KKwkoZHVtbXlfZXh0cmFfc3BlYyk6IE5ldy4KKwkoZGlnZXN0X3RhYmxlX2VudHJ5KTogQWRkIGV4dHJhc3BlYyBmaWVsZC4KKwkqIHB1YmtleS5jIChnY3J5X3BrX3JlZ2lzdGVyKTogUmVuYW1lIHRvIF9nY3J5X3BrX3JlZ2lzdGVyLiAgQWRkCisJYXJnIEVYVFJBU1BFQy4KKwkoZHVtbXlfZXh0cmFfc3BlYyk6IE5ldy4KKwkocHVia2V5X3RhYmxlX2VudHJ5KTogQWRkIGV4dHJhc3BlYyBmaWVsZC4KKworCSogYWMuYzogTGV0IG1vc3QgcHVibGljIGZ1bmN0aW9ucyByZXR1cm4gR1BHX0VSUl9VTlNVUFBPUlRFRCBpbgorCWZpcHMgbW9kZS4KKworCSogcHVia2V5LmMgKHB1YmtleV90YWJsZV9lbnRyeSk6IEFkZCBmaWVsZCBGSVBTX0FMTE9XRUQgYW5kIG1hcmsKKwlhcHByb3ByaWF0ZSBhbGdvcml0aG1zLgorCShkdW1teV9nZW5lcmF0ZSwgZHVtbXlfY2hlY2tfc2VjcmV0X2tleSwgZHVtbXlfZW5jcnlwdCkKKwkoZHVtbXlfZGVjcnlwdCwgZHVtbXlfc2lnbiwgZHVtbXlfdmVyaWZ5LCBkdW1teV9nZXRfbmJpdHMpOiBTaWduYWwKKwlhIGZpcHMgZXJyb3Igd2hlbiB1c2VkLgorCShnY3J5X3BrX3JlZ2lzdGVyKTogSW4gZmlwcyBtb2RlIGRvIG5vdCBhbGxvdyB0byByZWdpc3RlciBuZXcKKwlhbGdvcml0aG1zLgorCisJKiBtZC5jIChkaWdlc3RfdGFibGUpOiBBZGQgZmllbGQgRklQU19BTExPV0VEIGFuZCBtYXJrIGFwcHJvcHJpYXRlCisJYWxnb3JpdGhtcy4KKwkobWRfcmVnaXN0ZXJfZGVmYXVsdCk6IEluIGZpcHMgbW9kZSByZWdpc3RlciBvbmx5IGZpcHMgYWxnb3JpdGhtcy4KKwkoZ2NyeV9tZF9yZWdpc3Rlcik6IEluIGZpcHMgbW9kZSBkbyBub3QgYWxsb3cgdG8gcmVnaXN0ZXIgbmV3CisJYWxnb3JpdGhtcy4KKwkoZ2NyeV9tZF9nZXQpOiBTaWduYWwgYSBmaXBzIGVycm9yIGlmIGNhbGxlZC4KKwkoZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IERvIG5vdCBhbGxvdyBybWQxNjAgd2hlbiBub3QgaW4gZmlwcyBtb2RlLgorCShtZF9zdGFydF9kZWJ1Zyk6IERpc2FibGUgaW4gZmlwc19tb2RlLgorCisJKiBtZC5jIChnY3J5X21kX3JlZ2lzdGVyX2RlZmF1bHQpOiBSZW5hbWUgdG8gLi4KKwkobWRfcmVnaXN0ZXJfZGVmYXVsdCk6IC4uIHRoaXMuCisJKG1kX2RpZ2VzdCk6IFJlbW92ZSB0aGlzIGNvbW1lbnRlZCBmdWNudGlvbi4KKwkqIHB1YmtleS5jIChnY3J5X3BrX3JlZ2lzdGVyX2RlZmF1bHQpOiBSZW5hbWUgdG8gLi4KKwkocGtfcmVnaXN0ZXJfZGVmYXVsdCk6IC4uIHRoaXMuCisKKwkqIGNpcGhlci5jIChjaXBoZXJfdGFibGVfZW50cnkpOiBBZGQgZmllbGQgRklQU19BTExPV0VELgorCShnY3J5X2NpcGhlcl9yZWdpc3Rlcl9kZWZhdWx0KTogUmVnaXN0ZXIgb25seSBmaXBzIGFwcHJvdmVkCisJYWxnb3JpdGhtcy4KKwkoZ2NyeV9jaXBoZXJfcmVnaXN0ZXIpOiBEbyBub3QgYWxsb3cgdG8gcmVnaXN0ZXIgbmV3IGNpcGhlcnMuCisJKGNpcGhlcl9zZXRpdik6IFNpZ25hbCBmaXBzIGVycm9yLgorCisJKiBjaXBoZXIgKGdjcnlfY2lwaGVyX3JlZ2lzdGVyX2RlZmF1bHQpOiBSZW5hbWUgdG8gLi4KKwkoY2lwaGVyX3JlZ2lzdGVyX2RlZmF1bHQpOiAuLiB0aGlzLgorCShSRUdJU1RFUl9ERUZBVUxUX0NJUEhFUlMpOiBBZGp1c3QgZm9yIHRoYXQgY2hhbmdlLgorCisyMDA4LTA3LTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20tZGFlbW9uLmMsIHJhbmRvbS5oLCBybmRody5jLCBybmR1bml4LmMsIHJhbmQtaW50ZXJuYWwuaAorCSogcmFuZG9tLmMsIHJuZGVnZC5jLCBybmRsaW51eC5jLCBybmR3MzIuYzogTW92ZSB0byAuLi9jaXBoZXIuCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIHJhbmRvbSBzdHVmZi4KKworMjAwOC0wNi0yNCAgU3pha2F0cyBJc3R2YW4gPHN6YWtpLm1zQGdtYWlsLmNvbT4gICh3aykKKworCSogYWMuYyAoX2djcnlfYWNfa2V5X2Rlc3Ryb3ksIF9nY3J5X2FjX2tleV9wYWlyX2dlbmVyYXRlKTogUmVsYXNlCisJc29tZSBtb3JlIG1lbW9yeS4KKworMjAwOC0wNC0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAoX2djcnlfYWVzX2NmYl9lbmMsIF9nY3J5X2Flc19jYmNfZW5jKQorCShfZ2NyeV9hZXNfY2ZiX2RlYywgX2djcnlfYWVzX2NiY19kZWMpOiBVc2UgUGFkbG9jayBpZiBwb3NzaWJsZS4KKworMjAwOC0wNC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc2hhMS5jICh0cmFuc2Zvcm1fYWxpZ25lZCk6IFJlbW92ZS4gIFRoYXQgaXMgd2lsbCBvYnZpb3N1bHkgbm90CisJd29yayBiZWNhdXNlIHdlIG5lZWQgYSBzY3JhdGNoIHdvcmtpbmcgYXJlYSBhbmQgb3VyIGludGVybmFsIEFQSQorCWRvZXMgbm90IGFsbG93IHRvIG1vZGlmeSB0aGUgYnVmZmVycy4KKworCSogcmlqbmRhZWwuYzogRmFjdG9yIHRhYmxlcyBvdXQgdG8gLi4KKwkqIHJpam5kYWVsLXRhYmxlcy5oOiAuLiBuZXcuCisKKwkqIGFjLmMgKGFjX2RhdGFfZXh0cmFjdCk6IE1ha2Ugc3RhdGljLgorCisJKiBjYW1lbGxpYS5oIFtIQVZFX0NPTkZJR19IXTogSW5jbHVkZSBjb25maWcuaC4KKworCSogcm5kdzMyLmMgKHJlZ2lzdHJ5X3BvbGwpOiBPbmx5IHByaW50IHRoZSBwZXJmb3JtYW5jZSBkYXRhCisJcHJvYmxlbSB3YXJuaW5nIG9uY2UuICBTdWdnZXN0ZWQgYnkgU2ltb24gSm9zZWZzc29uLgorCisyMDA4LTAzLTE5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3BlbikgW1VTRV9BRVNdOiBJbml0IGJ1bGsgZW5jcnlwdGlvbiBvbmx5CisJaWYgcmVxdWVzdGVkLiAgU3VnZ2VzdGVkIGJ5IERpcmsgU3RvZWNrZXIuCisKKzIwMDgtMDMtMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHNoYTEuYzogSW5jbHVkZSBzdGRpbnQuaC4KKwkodHJhbnNmb3JtKTogQWRkIGFyZyBOQkxPQ0tTIHNvIHRoYXQgd2UgY2FuIHdvcmsgb24gbW9yZSB0aGFuIG9uZQorCWJsb2NrIGFuZCBhdm9pZCB1cGRhdGVzIG9mIHRoZSBjaGFpbmluZyB2YXJpYWJsZXMuICBDaGFuZ2VkIGFsbAorCWNhbGxlcnMgdG8gdXNlIDEuCisJKHNoYTFfd3JpdGUpOiBSZXBsYWNlIGxvb3AgYXJvdW5kIHRyYW5zZm9ybS4KKwkodHJhbnNmb3JtX2FsaWduZWQpIFtXT1JEU19CSUdFTkRJQU5dOiBOZXcuCisJKFRSQU5TRk9STSk6IE5ldyBtYWNybyB0byByZXBsYWNlIGFsbCBkaXJlY3QgY2FsbHMgb2YgdHJhbnNmb3JtLgorCisyMDA4LTAzLTE3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByaWpuZGFlbC5jIChfZ2NyeV9hZXNfY2ZiX2RlYyk6IE5ldy4KKwkoZG9fZW5jcnlwdCk6IEZhY3RvciBjb2RlIG91dCB0byAuLgorCShkb19lbmNyeXB0X2FsaWduZWQpOiAuLiBOZXcuCisJKF9nY3J5X2Flc19jZmJfZW5jLCBfZ2NyeV9hZXNfY2ZiX2RlYyk6IFVzZSBuZXcgZnVuY3Rpb24uCisJKGRvX2RlY3J5cHQpOiBGYWN0b3IgY29kZSBvdXQgdG8gLi4KKwkoZG9fZGVjcnlwdF9hbGlnbmVkKTogLi4gbmV3LgorCShfZ2NyeV9hZXNfY2JjX2VuYywgX2djcnlfYWVzX2NiY19kZWMpOiBOZXcuCisJKiBjaXBoZXIuYyAoc3RydWN0IGdjcnlfY2lwaGVyX2hhbmRsZSk6IFB1dCBmaWVsZCBJViBpbnRvIG5ldworCXVuaW9uIFVfSVYgdG8gZW5mb3JjZSBwcm9wZXIgYWxpZ25tZW50LiAgQ2hhbmdlIGFsbCB1c2Vycy4KKwkoZG9fY2ZiX2RlY3J5cHQpOiBPcHRpbWl6ZS4KKwkoZG9fY2JjX2VuY3J5cHQsIGRvX2NiY19kZWNyeXB0KTogT3B0aW1pemUuCisKKzIwMDgtMDMtMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJpam5kYWVsLmMgKF9nY3J5X2Flc19jZmJfZW5jKTogTmV3LgorCSogY2lwaGVyLmMgKHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUpOiBBZGQgZmllbGQgQUxHTyBhbmQgQlVMSy4KKwkoZ2NyeV9jaXBoZXJfb3Blbik6IFNldCBBTEdPIGFuZCBCVUxLLgorCShkb19jZmJfZW5jcnlwdCk6IE9wdGltaXplLgorCisyMDA4LTAyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAoX2djcnlfcnNhX3ZlcmlmeSkgW0lTX0RFVkVMT1BNRU5UX1ZFUlNJT05dOiBQcmludAorCWludGVybWVkaWF0ZSByZXN1bHRzLgorCisyMDA4LTAxLTA4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAoYWRkX3JhbmRvbW5lc3MpOiBEbyBub3QganVzdCBpbmNyZW1lbnQKKwlQT09MX0ZJTExFRF9DT1VOVEVSIGJ1dCB1cGRhdGUgaXQgYnkgdGhlIGFjdHVhbCBhbW91bnQgb2YgZGF0YS4KKworMjAwNy0xMi0xMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNleHBfZGF0YV90b19tcGkpOiBTdXBwb3J0IFNIQS0yMjQuCisKKzIwMDctMTItMDUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJpam5kYWVsLmMgKFVTRV9QQURMT0NLKTogRGVwZW5kIG9uIEVOQUJMRV9QQURMT0NLX1NVUFBPUlQuCisJKiBybmRody5jIChVU0VfUEFETE9DSyk6IERpdHRvCisKKwkqIHJzYS5jIChzZWNyZXQpOiBGaXhlZCBjb25kaXRpb24gdGVzdCBmb3IgdXNpbmcgQ1JULiAgUmVwb3J0ZWQgYnkKKwlEZWFuIFNjYXJmZi4gIEZpeGVzIGJ1ZyM4NjQuCisJKF9nY3J5X3JzYV9jaGVja19zZWNyZXRfa2V5KTogUmV0dXJuIGFuIGVycm8gaWYgdGhlIG9wdGlvbmFsCisJcGFyYW1ldGVycyBhcmUgbWlzc2luZy4KKwkqIHB1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3QpOiBBZGQgYXJnIEFMR09fTkFNRS4gQ2hhbmdlZCBhbGwKKwljYWxsZXJzIHRvIHBhc3MgTlVMTC4gQWRkIGhhY2sgdG8gYWxsb3cgZm9yIG9wdGlvbmFsIFJTQQorCXBhcmFtZXRlcnMuCisJKHNleHBfdG9fa2V5KTogUGFzcyBhbGdvIG5hbWUgdG8gc2V4cF9lbGVtZW50c19leHRyYWN0LgorCisyMDA3LTEyLTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAoZ2NyeV9yYW5kb21fYWRkX2J5dGVzKTogSW1wbGVtZW50IGl0LgorCSogcmFuZC1pbnRlcm5hbC5oIChSQU5ET01fT1JJR0lOX0VYVEVSTkFMKTogTmV3LgorCisyMDA3LTExLTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmRody5jOiBOZXcuCisJKiBybmRsaW51eC5jIChfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tKTogVHJ5IHRvIHJlYWQgNTAlCisJZGlyZWN0bHkgZnJvbSB0aGUgaHdybmcuCisJKiByYW5kb20uYyAoZG9fZmFzdF9yYW5kb21fcG9sbCk6IEFsc28gcnVuIHRoZSBodyBybmcgZmFzdCBwb2xsLgorCShfZ2NyeV9yYW5kb21fZHVtcF9zdGF0cyk6IFRlbGwgd2hldGhlciB0aGUgaHcgcm5nIGZhaWxlZC4KKworMjAwNy0xMS0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAoVVNFX1BBRExPQ0spOiBEZWZpbmUgbmV3IG1hY3JvIHVzZWQgZm9yIGlhMzIuCisJKFJJSk5EQUVMX2NvbnRleHQpIFtVU0VfUEFETE9DS106IEFkZCBmaWVsZHMgVVNFX1BBRExPQ0sgYW5kCisJUEFETE9DS19LRVkuCisJKGRvX3NldGtleSkgW1VTRV9QQURMT0NLXTogRW5hYmxlIHBhZGxvY2sgaWYgYXZhaWxhYmxlIGZvciAxMjggYml0CisJQUVTLgorCShkb19wYWRsb2NrKSBbVVNFX1BBRExPQ0tdOiBOZXcuCisJKHJpam5kYWVsX2VuY3J5cHQsIHJpam5kYWVsX2RlY3J5cHQpIFtVU0VfUEFETE9DS106IERpdmVydCB0bworCWRvX3BhZGxvY2suCisJKiBjaXBoZXIuYyAoY2lwaGVyX2NvbnRleHRfYWxpZ25tZW50X3QpOiBOZXcuICBVc2UgaXQgaW4gdGhpcworCW1vZHVsZSBpbiBwbGFjZSBvZiBQUk9QRVJMWV9BTElHTkVEX1RZUEUuCisJKE5FRURfMTZCWVRFX0FMSUdORURfQ09OVEVYVCk6IERlZmluZSBtYWNybyBmb3IgaWEzMi4KKwkoc3RydWN0IGdjcnlfY2lwaGVyX2hhbmRsZSk6IEFkZCBmaWVsZCBIQU5ETEVfT0ZGU0VULgorCShnY3J5X2NpcGhlcl9vcGVuKTogVGFrZSBjYXJlIG9mIGluY3JlYXNlZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgorCShnY3J5X2NpcGhlcl9jbG9zZSk6IERpdHRvLgorCisyMDA3LTExLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzaGEyNTYuYyAoYXNuMjI0KTogRml4ZWQgd3JvbmcgdGVtcGxhdGUuICBJdCBoYXBwZW5lZCBkdWUgdG8gYQorCWJ1ZyBpbiBSRkM0ODgwLiAgU0hBLTIyNCBpcyBub3QgaW4gdGhlIHN0YWJsZSB2ZXJzaW9uIG9mIGxpYmdjcnlwdAorCXNvIHRoZSBjb25zZXF1ZW5jZXMgYXJlIGxpbWl0ZWQgdG8gdXNlcnMgb2YgdGhpcyBkZXZlbCB2ZXJzaW9uLgorCisyMDA3LTEwLTMxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChnY3J5X2FjX2RhdGFfbmV3KTogUmVtb3ZlIGR1ZSB0byB0aGUgdmlzaWJpbGl0eSB3cmFwcGVyLgorCShnY3J5X2FjX2RhdGFfZGVzdHJveSwgZ2NyeV9hY19kYXRhX2NvcHksIGdjcnlfYWNfZGF0YV9sZW5ndGgpCisJKGdjcnlfYWNfZGF0YV9zZXQsIGdjcnlfYWNfZGF0YV9nZXRfbmFtZSwgZ2NyeV9hY19kYXRhX2dldF9pbmRleCkKKwkoZ2NyeV9hY19kYXRhX3RvX3NleHAsIGdjcnlfYWNfZGF0YV9mcm9tX3NleHApCisJKGdjcnlfYWNfZGF0YV9jbGVhciwgZ2NyeV9hY19pb19pbml0LCBnY3J5X2FjX29wZW4pCisJKGdjcnlfYWNfY2xvc2UsIGdjcnlfYWNfa2V5X2luaXQsIGdjcnlfYWNfa2V5X3BhaXJfZ2VuZXJhdGUpCisJKGdjcnlfYWNfa2V5X3BhaXJfZXh0cmFjdCwgZ2NyeV9hY19rZXlfZGVzdHJveSkKKwkoZ2NyeV9hY19rZXlfcGFpcl9kZXN0cm95LCBnY3J5X2FjX2tleV9kYXRhX2dldCkKKwkoZ2NyeV9hY19rZXlfdGVzdCwgZ2NyeV9hY19rZXlfZ2V0X25iaXRzLCBnY3J5X2FjX2tleV9nZXRfZ3JpcCkKKwkoZ2NyeV9hY19kYXRhX2VuY3J5cHQsIGdjcnlfYWNfZGF0YV9kZWNyeXB0LCBnY3J5X2FjX2RhdGFfc2lnbikKKwkoZ2NyeV9hY19kYXRhX3ZlcmlmeSwgZ2NyeV9hY19kYXRhX2VuY29kZSwgZ2NyeV9hY19kYXRhX2RlY29kZSkKKwkoZ2NyeV9hY19tcGlfdG9fb3MsIGdjcnlfYWNfbXBpX3RvX29zX2FsbG9jLCBnY3J5X2FjX29zX3RvX21waSkKKwkoZ2NyeV9hY19kYXRhX2VuY3J5cHRfc2NoZW1lLCBnY3J5X2FjX2RhdGFfZGVjcnlwdF9zY2hlbWUpCisJKGdjcnlfYWNfZGF0YV9zaWduX3NjaGVtZSwgZ2NyeV9hY19kYXRhX3ZlcmlmeV9zY2hlbWUpCisJKGdjcnlfYWNfaW9faW5pdF92YSk6IERpdHRvLgorCShnY3J5X2FjX2lkX3RvX25hbWUsIGdjcnlfYWNfbmFtZV90b19pZCk6IFJlbW92ZSBhcyB0aGVzZQorCWRlcHJlY2F0ZWQgZnVuY3Rpb25zIGFyZSBub3cgaW1wbGVtZW50ZWQgYnkgdmlzaWJpbGl0eS5jLgorCisyMDA3LTEwLTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmR3MzIuYzogRGlzYWJsZSBkZWJ1ZyBmbGFnLgorCisyMDA3LTEwLTI1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmR3MzIuYzogVXBkYXRlZCBmcm9tIGN1cnJlbnQgY3J5cHRsaWIgc25hcHNob3QgYW5kIG1vZGlmaWVkCisJZm9yIG91ciB1c2UuICBSZW1vdmVkIHN1cHBvcnQgZnJvbSBwcmUgTlQgc3lzdGVtcy4KKwkoc2xvd19nYXRoZXJlcl93aW5kb3dzOTUpOiBSZW1vdmUuCisJKF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tKTogUmVxdWlyZSBhbiBOVCBwbGF0Zm9ybS4KKwkoaW5pdF9zeXN0ZW1fcm5nLCByZWFkX3N5c3RlbV9ybmcsIHJlYWRfbWJtX2RhdGEpOiBOZXcuCisJKHNsb3dfZ2F0aGVyZXJfd2luZG93c05UKTogUmVuYW1lIHRvIC4uLgorCShzbG93X2dhdGhlcmVyKTogLi4gdGhpcy4gIFJlYWQgc3lzdGVtIFJORyBhbmQgTUJNLgorCShyZWdpc3RyeV9wb2xsKTogTmV3IHdpdGggY29kZSBmYWN0b3JlZCBvdXQgZnJvbSBzbG93X2dhdGhlcmVyLgorCisyMDA3LTA4LTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAocG9vbF9maWxsZWRfY291bnRlcik6IE5ldy4KKwkoYWRkX3JhbmRvbW5lc3MpOiBVc2UgaXQuCisKKzIwMDctMDgtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZHczMi5jLCBybmR1bml4LmM6IFN3aXRjaGVkIHRvIExHUEwuCisKKzIwMDctMDUtMzAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNhbWVsbGlhLmgsIGNhbWVsbGlhLmM6IFJlcGxhY2UgYnkgbmV3IExHUEwgdmVyc2lvbiBhbmQgYWRqdXN0ZWQKKwljYW1lbGxpYS5oLgorCisyMDA3LTA1LTA5ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGFjLmMgKF9nY3J5X2FjX2lvX2luaXRfdmEsIF9nY3J5X2FjX2lvX3dyaXRlLCBfZ2NyeV9hY19pb19yZWFkKToKKwlBZGp1c3QgdXNlcnMgb2YgZ2NyeV9hY19pb190IGJlY2F1c2UgdW5pb24gaXMgbm90IGFub255bW91cworCWFueW1vcmUuCisKKzIwMDctMDUtMDIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNhbWVsbGlhLWdsdWUuYyAoY2FtZWxsaWFfc2V0a2V5LCBjYW1lbGxpYV9lbmNyeXB0KQorCShjYW1lbGxpYV9kZWNyeXB0KTogUmVjYWxjdWxhdGVkIHVzZWQgc3RhY2sgc2l6ZSBpbiBjYWxsZWQKKwlmdW5jdGlvbnMuCisJKiBjYW1lbGxpYS5oOiBSZWRlZmluZSBleHRlcm5hbCBzeW1ib2xzLgorCisyMDA3LTA1LTAyICBEYXZpZCBTaGF3ICA8ZHNoYXdAamFiYmVyd29ja3kuY29tPgorCisJKiBNYWtlZmlsZS5hbSwgY2lwaGVyLmM6IEFkZCBDYW1lbGxpYS4KKworCSogY2FtZWxsaWEtZ2x1ZS5jOiBOZXcuICBUaGUgbmVjZXNzYXJ5IGdsdWUgdG8gaW50ZXJmYWNlIGxpYmdjcnlwdAorCXRvIHRoZSBzdG9jayBOVFQgQ2FtZWxsaWEgZGlzdHJpYnV0aW9uLgorCisJKiBjYW1lbGxpYS5oLCBjYW1lbGxpYS5jOiBUaGUgc3RvY2sgTlRUIENhbWVsbGlhIGRpc3RyaWJ1dGlvbgorCShHUEwpLgorCisyMDA3LTA0LTMwICBEYXZpZCBTaGF3ICA8ZHNoYXdAamFiYmVyd29ja3kuY29tPgorCisJKiBjaXBoZXIuYzogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZiBhcyBjb25maWd1cmUgZGVmaW5lcyB0aGUKKwlVU0VfY2lwaGVyIGRlZmluZXMgYXMgMCBmb3IgZGlzYWJsZWQuCisKKzIwMDctMDQtMzAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZGVnZC5jIChfZ2NyeV9ybmRlZ2Rfc2V0X3NvY2tldF9uYW1lKTogTmV3LgorCisyMDA3LTA0LTMwICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGVjYy5jIChlYzJvcyk6IEZpeCByZWxvY2F0aW9uIG9mIHNob3J0IG51bWJlcnMuCisKKwkqIGVjYy5jIChnZW5lcmF0ZV9rZXkpOiBEbyBub3QgYWxsb2NhdGUgRCwgd2hpY2ggd2lsbCBiZSBhbGxvY2F0ZWQKKwlieSBHRU5fSy4gIFJlbW92ZSBHLiAgRml4IHRlc3QgaWYgZ194LCBnX3kgcmVzcC4gcV94LCBxX3kgYXJlCisJcmVxdWVzdGVkLgorCShfZ2NyeV9lY2NfZ2VuZXJhdGUpOiBSZWxlYXNlIHVubmVlZGVkIG1lbWJlcnMgb2YgU0suCisJKiBwdWJrZXkuYyAoc2V4cF90b19rZXkpOiBSZWxlYXNlIE5BTUUuCisKKzIwMDctMDQtMjggIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogYWMuYyAoZ2NyeV9hY19tcGkpOiBSZW1vdmUgbWVtYmVyIE5BTUVfUFJPVklERUQuCisJKGFjX2RhdGFfbXBpX2NvcHksIF9nY3J5X2FjX2RhdGFfc2V0LCBfZ2NyeV9hY19kYXRhX2dldF9uYW1lKQorCShfZ2NyeV9hY19kYXRhX2dldF9pbmRleCwgYWNfZGF0YV9jb25zdHJ1Y3QpOiBBZGp1c3QgaGFuZGxpbmcgb2YKKwlOQU1FIGFjY29yZGluZ2x5LgorCisyMDA3LTA0LTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBlY2MuYyAoZG9tYWluX3Bhcm1zKTogQWRkIHN0YW5kYXJkIGJyYWlucG9vbCBjdXJ2ZXMuCisKKzIwMDctMDQtMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGVjYy5jIChnZW5lcmF0ZV9jdXJ2ZSk6IEltcGxlbWVudCBhbGlhcyBtZWNoYW5pc20uCisKKwkqIHB1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3RfZWNjKTogTmV3LgorCShzZXhwX3RvX2tleSk6IEFkZCBzcGVjaWFsIGNhc2UgZm9yIGVjYy4KKwkoc2V4cF90b19rZXksIHNleHBfdG9fc2lnLCBzZXhwX3RvX2VuYywgZ2NyeV9wa19nZW5rZXkpOiBSZXBsYWNlCisJbmFtZV90ZXJtaW5hdGVkIHN0dWZmIGJ5IGEgY2FsbCB0byBfZ2NyeV9zZXhwX250aF9zdHJpbmcuCisJKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBEaXR0by4KKworMjAwNy0wNC0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZWNjLmMgKF9nY3J5X2VjY19nZW5lcmF0ZSk6IFJlbmFtZWQgRFVNTVkgdG8gQ1VSVkUgYW5kIHVzZSBpdC4KKworMjAwNy0wNC0xMyAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBhYy5jIChhY19kYXRhX2NvbnN0cnVjdCk6IENhc3QgY29uc3QgYXdheSB0byBzdXBwcmVzcyBjb21waWxlcgorCXdhcm5pbmcuCisKKwkqIGVjYy5jIChlY2NfZ2VuZXJhdGUpOiBBdm9pZCBjb21waWxlciB3YXJuaW5nIGZvciB1bnVzZWQgYXJndW1lbnQKKwlEVU1NWS4KKwkoZWNjX3ZlcmlmeSk6IEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgZm9yIHVudXNlZCBhcmd1bWVudHMgQ01QIGFuZAorCU9QQVFVRVYuCisKKzIwMDctMDQtMDYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHNoYTEuYyAob2lkX3NwZWNfc2hhMSk6IEFkZCBhbm90aGVyIG9pZCBmcm9tIFg5LjYyLgorCisyMDA3LTAzLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBEbyBub3QgaXNzdWUgbWlzYy1rZXktaW5mbyBpZiBpdCBpcworCWVtcHR5LgorCShnY3J5X3BrX2dlbmtleSk6IE5ldyBwYXJhbWV0ZXIgImN1cnZlIi4KKworCSogZWNjLmM6IEVudGlyZWx5IHJld3JpdHRlbiB3aXRoIG9ubHkgYSBmZXcgdHJhY2VzIG9mIHRoZSBvbGQKKwljb2RlIGxlZnQuCisJKF9nY3J5X2VjY19nZW5lcmF0ZSk6IE5ldy4KKwkoZ2VuZXJhdGVfa2V5KSBOZXcgYXJnIE5BTUUuCisJKGdlbmVyYXRlX2N1cnZlKTogRGl0dG8uICBSZXR1cm4gYWN0dWFsIG51bWJlciBvZiBOQklUUy4KKworMjAwNy0wMy0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2Vua2V5KTogSW5jcmVhc2Ugc2l6ZSBvZiBTS0VZIGFycmF5IGFuZCBhZGQgYQorCXJ1bnRpbWUgYm91bmRzIGNoZWNrLgorCisyMDA3LTAzLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBlY2MuYyAoZWNjX2N0eF9pbml0LCBlY2NfY3R4X2ZyZWUsIGVjY19tb2QsIGVjY19tdWxtKTogTmV3LgorCShkdXBsaWNhdGVfcG9pbnQsIHN1bV9wb2ludHMsIGVzY2FsYXJfbXVsdCk6IERvbid0IHVzZSBhCisJY29weSBvZiBiYXNlLT5wLiAgUmVwbGFjZWQgYWxsIG1waV9tdWxtIGJ5IGVjY19tdWxtIHNvIHRoYXQgd2UgY2FuCisJZXhwZXJpbWVudCB3aXRoIGRpZmZlcmVudCBhbGdvcml0aG1zLgorCShnZW5lcmF0ZV9rZXksIGNoZWNrX3NlY3JldF9rZXksIHNpZ24sIHZlcmlmeSk6IEluaXRpYWxpemUgYQorCWNvbXB1dGF0aW9uIGNvbnRleHQgZm9yIHVzZSBieSBlY2NfbXVsbS4KKworMjAwNy0wMy0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHB1YmtleV90YWJsZSk6IEluaXRpYWxpemUgRUNDLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX2xpYmNpcGhlcl9sYV9TT1VSQ0VTKTogQWRkIGVjYy5jLgorCSogZWNjLmM6IE5ldy4gSGVhdmlseSByZWZvcm1hdHRlZCBhbmQgY2hhbmdlZCBmb3IgdXNlIGluIGxpYmdjcnlwdC4KKwkocG9pbnRfaW5pdCk6IE5ldy4KKwkoZXNjYWxhcl9tdWx0KTogTWFrZSBhcmcgUiB0aGUgZmlyc3QgYXJnIHRvIGJlIHNpbWlsYXIgdG8gdGhlIG1waQorCWZ1bmN0aW9ucy4KKwkoZHVwbGljYXRlX3BvaW50KTogRGl0dG8KKwkoc3VtX3BvaW50cyk6IERpdHRvCisJKHNpZ24sIHZlcmlmeSk6IFJlbW92ZSB1bm5lZWRlZCBjb3B5IG9wZXJhdGlvbnMuCisJKHN1bV9wb2ludHMpOiBSZW1vdmVkIG1lbW9yeSBsZWFrcyBhbmQgb3B0aW1pemVkIHNvbWUgY29tcGFyZXMuCisJKHZlcmlmeSk6IFNpbXBsaWZpZWQgaW5wdXQgY2hlY2suCisKKzIwMDctMDMtMTQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS5jIChNQVNLX0xFVkVMKTogUmVtb3ZlZCBtYWNybyBhcyBpdCB3YXMgdXNlZCBvbmx5IGF0IG9uZQorCXBsYWNlLiAgT3BlbiBjb2RlZCBpdCB0aGVyZS4KKwkoZ2NyeV9yYW5kb21pemUsIF9nY3J5X3VwZGF0ZV9yYW5kb21fc2VlZF9maWxlKQorCShfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKTogRmFjdG9yIGxvY2sgY29kZSBvdXQgdG8gLi4KKwkobG9ja19wb29sLCB1bmxvY2tfcG9vbCk6IC4uIG5ldy4KKwkoaW5pdGlhbGl6ZSk6IExvb2sgdGhlIHBvb2wgd2hpbGUgYWxsb2NhdGluZy4KKwkocmVhZF9yYW5kb21fc291cmNlLCBkb19mYXN0X3JhbmRvbV9wb2xsKTogTW92ZWQgaW50aWFsaXphdGlvbiB0byAuLi4KKwkoaW5pdGlhbGl6ZSk6IC4uIGhlcmUuCisJKF9nY3J5X2VuYWJsZV9xdWlja19yYW5kb21fZ2VuKTogTm8gbW9yZSBuZWVkIGZvciBpbml0aWFsaXphdGlvbi4KKwkoaXNfaW5pdGlhbGl6ZWQpOiAgTW92ZWQgdGhpcyBnbG9iYWwgZmxhZyB0byAuLgorCShpbml0aWFsaXplKTogLi4gaGVyZSBhbmQgY2hhbmdlZCBhbGwgdXNlcnMgdG8gdW5jb25kaXRpb25hbGx5IGNhbGwKKwlpbml0aWFsaXplLgorCShhZGRfcmFuZG9tbmVzcyk6IFJlbW92ZSBpbml0YWxpemF0aW9uIGhlcmUuICBJdCBzaW1wbHkgY2FuJ3QKKwloYXBwZW4uCisKKwkqIHJhbmRvbS5jIChlbnVtIHJhbmRvbV9vcmlnaW5zKTogTW92ZWQgdG8gLi4KKwkqIHJhbmQtaW50ZXJuYWwuaDogLi4gaGVyZS4KKwkqIHJuZHVuaXguYyAoX2djcnlfcm5kdW5peF9nYXRoZXJfcmFuZG9tKTogVXNlIGVudW0gaW4gcHJvdG90eXBlCisJZm9yIE9SSUdJTiBhbmQgcmVuYW1lZCBSRVFVRVNUT1IgdG8gT1JJR0lOLgorCSogcm5kZWdkLmMgKF9nY3J5X3JuZGVnZF9nYXRoZXJfcmFuZG9tKTogRGl0dG8uCisJKiBybmRsaW51eC5jIChfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tKTogRGl0dG8uCisJKiBybmR3MzIuYyAoX2djcnlfcm5kdzMyX2dhdGhlcl9yYW5kb20pOiBEaXR0by4KKwkoX2djcnlfcm5kdzMyX2dhdGhlcl9yYW5kb21fZmFzdCk6IERpdHRvLgorCisyMDA3LTAzLTEzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAoZW51bSByYW5kb21fb3JpZ2lucyk6IE5ldy4KKwkoYWRkX3JhbmRvbW5lc3MpOiBSZW5hbWVkIGFyZyBTT1VSQ0UgdG8gT1JJR0lOLgorCShyZWFkX3JhbmRvbV9zb3VyY2UpOiBSZW5hbWVkIGFyZyBSRVFVRVNUT1IgdG8gT1JJR0lOLgorCShnZXRmbmNfZ2F0aGVyX3JhbmRvbSk6IFJlbW92ZWQgc3RhdGljIHZhcmlhYmxlIGJlY2F1c2UgdGhpcworCWZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uZSBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRoaXMKKwlvcHRpbWl6YXRpb24uCisJKF9nY3J5X3F1aWNrX3JhbmRvbV9nZW4pOiBSZW1vdmVkIGFuZCByZXBsYWNlZCBieS4uCisJKF9nY3J5X2VuYWJsZV9xdWlja19yYW5kb21fZ2VuKTogLi4gdGhpcy4gIEl0IGlzIG9ubHl1IHVzZWQgdG8KKwllbmFibGUgaXQgYW5kIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gZGlzYWJsZSBpdCBsYXRlci4gQ2hhbmdlZAorCXRoZSBvbmx5IG9uZSBjYWxsZXIgdG9vLgorCShnZXRfcmFuZG9tX2J5dGVzKTogUmVtb3ZlZC4KKwkoZ2NyeV9yYW5kb21fYnl0ZXMsIGdjcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSk6IEltcGxlbWVudCBpbiB0ZXJtcworCW9mIGdjcnlfcmFuZG9taXplLgorCSogcmFuZG9tLWRhZW1vbi5jIChfZ2NyeV9kYWVtb25fZ2V0X3JhbmRvbV9ieXRlcyk6IFJlbW92ZWQuCisKKzIwMDctMDItMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGVsZ2FtYWwuYyAoZ2VuZXJhdGUpOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSBURU1QLgorCSh0ZXN0X2tleXMpOiBOZXcgYXJnIE5PRElFLgorCShnZW5lcmF0ZV91c2luZ194LCBfZ2NyeV9lbGdfZ2VuZXJhdGVfdXNpbmdfeCk6IE5ldy4KKwkqIHB1YmtleS5jIChwdWJrZXlfZ2VuZXJhdGUpOiBOZXcgYXJnIFhWQUxVRSBhbmQgZGlyZWN0IGNhbGwgdG8KKwl0aGUgbmV3IGVsZ2FtYWwgZ2VuZXJhdGUgZnVjbnRpb24uCisJKGdjcnlfcGtfZ2Vua2V5KTogUGFyc2UgdGhlIG5ldyAieHZhbHVlIiB0YWcuCisKKzIwMDctMDItMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChzZXhwX2RhdGFfdG9fbXBpKTogSGFuZGxlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorCWFsZ29yaXRobXMuICBTdWdnZXN0ZWQgYnkgTmVpbCBEdW5iYXIuICBGaXhlcyBidWcjNTk2LgorCisJKiBybmR3MzIuYyAoX2djcnlfcm5kdzMyX2dhdGhlcl9yYW5kb21fZmFzdCk6IE1ha2UgaXQgcmV0dXJuIHZvaWQuCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9hbGdvX25hbWUpOiBTaW1wbGlmaWVkLgorCisJKiByYW5kb20uYzogVXNlIHRoZSBkYWVtb24gb25seSBpZiBjb21waWxlZCB3aXRoIFVTRV9SQU5ET01fREFFTU9OLgorCisJKiBNYWtlZmlsZS5hbSAobGliY2lwaGVyX2xhX1NPVVJDRVMpOiBCdWlsZCByYW5kb20tZGFlbW9uIHN1cHBvcnQKKwlvbmx5IGlmIHJlcXVlc3RlZC4KKworMjAwNy0wMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLmMgKHJuZHBvb2wsIGtleXBvb2wpOiBNYWtlIHVuc2lnbmVkLgorCShtaXhfcG9vbCk6IENoYW5nZSBjaGFyKiB2YXJpYWJsZXMgdG8gdW5zaWduZWQgY2hhciouCisJKGdjcnlfcmFuZG9taXplKTogTWFrZSBhcmcgQlVGRkVSIGEgdm9pZCouCisJKGdjcnlfY3JlYXRlX25vbmNlKTogRGl0dG8uCisKKwkqIHJtZDE2MC5jIChnY3J5X3JtZDE2MF9taXhibG9jayk6IE1ha2UgQlVGRkVSIGEgdm9pZCouCisJKF9nY3J5X3JtZDE2MF9oYXNoX2J1ZmZlcik6IE1ha2UgT1VUQlVGIGFuZCBCVUZGRVIgdm9pZCouCisJKiBzaGExLmMgKF9nY3J5X3NoYTFfaGFzaF9idWZmZXIpOiBEaXR0by4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGNyeV9jaXBoZXJfZGVjcnlwdCk6IENoYW5nZQorCWJ1ZmZlciBhcmdzIHRvIHZvaWQqLgorCShnY3J5X2NpcGhlcl9yZWdpc3Rlcik6IE1ha2UgQUxHT1JJVEhNX0lEIGEgaW50ICouCisKKwkqIG1kLmMgKG1kX3N0YXJ0X2RlYnVnKTogTWFrZSBTVUZGSVggYSBjb25zdCBjaGFyKi4gIFVzZSBzbnByaW50Zi4KKwkoZ2NyeV9tZF9kZWJ1Zyk6IE5ldy4KKwkoZ2NyeV9tZF9jdGwpOiBDaGFuZ2VkIGFyZyBCVUZGRVIgZnJvbSB1bnNpZ25lZCBjaGFyKi4KKworCSogbWQuYyAobWRfd3JpdGUpOiBNYWtlIElOQlVGIGEgY29uc3Qgdm9pZCouCisJKGdjcnlfbWRfd3JpdGUpOiBSZW1vdmUgbmVlZGxlc3MgY2FzdC4KKwkqIGNyYy5jIChjcmMzMl93cml0ZSk6IE1ha2UgSU5CVUYgYSBjb25zdCB2b2lkKgorCSh1cGRhdGVfY3JjMzIsIGNyYzI0cmZjMjQ0MF93cml0ZSk6IERpdHRvLgorCSogc2hhNTEyLmMgKHNoYTUxMl93cml0ZSwgdHJhbnNmb3JtKTogRGl0dG8uCisJKiBzaGEyNTYuYyAoc2hhMjU2X3dyaXRlLCB0cmFuc2Zvcm0pOiBEaXR0by4KKwkqIHJtZDE2MC5jIChybWQxNjBfd3JpdGUsIHRyYW5zZm9ybSk6IERpdHRvLgorCSogbWQ1LmMgKG1kNV93cml0ZSwgdHJhbnNmb3JtKTogRGl0dG8uCisJKiBtZDQuYyAobWQ0X3dyaXRlLCB0cmFuc2Zvcm0pOiBEaXR0by4KKwkqIHNoYTEuYyAoc2hhMV93cml0ZSwgdHJhbnNmb3JtKTogRGl0dG8uCisKKwkqIHRpZ2VyLmMgKHRpZ2VyX3dyaXRlLCB0cmFuc2Zvcm0pOiBEaXR0by4KKwkqIHdoaXJscG9vbC5jICh3aGlybHBvb2xfd3JpdGUsIHdoaXJscG9vbF9hZGQsIHRyYW5zZm9ybSk6IERpdHRvLgorCisJKiBlbGdhbWFsLmMgKGVsZ19uYW1lcyk6IENoYW5nZSB0byBhIGNvbnN0Ki4KKwkqIGRzYS5jIChkc2FfbmFtZXMpOiBEaXR0by4KKwkqIHJzYS5jIChyc2FfbmFtZXMpOiBEaXR0by4KKwkqIHB1YmtleS5jIChnY3J5X3BrX2xvb2t1cF9mdW5jX25hbWUpOiBNYWtlIEFMSUFTRVMgYSBjb25zdC4KKworMjAwNy0wMi0yMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcm5kbGludXguYyAob3Blbl9kZXZpY2UpOiBSZW1vdmUgdW5zdXNlZCBhcmcgTUlOT1IuCisKKzIwMDctMDEtMzAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHNoYTI1Ni5jIChvaWRfc3BlY19zaGEyNTYpOiBBZGQgYWxpYXMgZnJvbSBwa2NzIzEuCisJKiBzaGE1MTIuYyAob2lkX3NwZWNfc2hhNTEyKTogRGl0dG8uCisJKG9pZF9zcGVjX3NoYTM4NCk6IERpdHRvLgorCisyMDA2LTEyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmRsaW51eC5jIChzZXRfY2xvZXhlY19mbGFnKTogTmV3LgorCShvcGVuX2RldmljZSk6IFNldCBjbG9zZS1vbi1leGl0IGZsYWdzLiAgU3VnZ2VzdGVkIGJ5IE1heAorCUtlbGxlcm1hbm4uICBGaXhlcyBEZWJpYW4jNDAzNjEzLgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ1BQRkxBR1MsIEFNX0NGTEFHUyk6IFNwbGl0dGVkIGFuZCBtZXJnZWQKKwlNb3JpdHonIGNoYW5nZXMuCisJKElOQ0xVREVTKTogUmVtb3ZlZC4KKworMjAwNi0xMS0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc2VycGVudC5jIChieXRlX3N3YXBfMzIpOiBSZW1vdmUgdHJhaWxpbmcgc2VtaWNvbG9uLgorCisyMDA2LTExLTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBJbmNsdWRlIC4uL3NyYy8KKworMjAwNi0xMS0wMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLmMgW0hBVkVfR0VUVElNRU9GREFZXTogSW5jbHVkZWQgc3lzL3RpbWUuaCBhbmQgbm90CisJc3lzL3RpbWVzLmguICBSZXBvcnRlZCBieSBSYWZhw6tsIENhcnLDqS4KKworMjAwNi0xMS0wNSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGRlZCAtSSQodG9wX2J1aWxkZGlyKS9zcmMgc28gdGhhdCB0aGUKKwluZXcgZ2NyeXB0LmggaXMgdXNlZCwgbm90IHRoZSBvbmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisKKzIwMDYtMTAtMjUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHByaW1lZ2VuLmMgKHByaW1lX2dlbmVyYXRlX2ludGVybmFsKTogVHdlYWtlZCB1c2Ugb2Ygc2VjdXJlCisJbWVtb3J5IGFuZCBlbnRyb3B5IHVzZS4gU2FmZSB1bnVzZWQgcHJpbWVzIGZyb20gdGhlIHBvb2wuIEFsbG9jYXRlCisJYXQgbGVhc3QgYSBwb29sIG9mIDMwLgorCShzYXZlX3Bvb2xfcHJpbWUsIGdldF9wb29sX3ByaW1lKTogTmV3LgorCisyMDA2LTEwLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChfZ2NyeV9hY19kYXRhX2Zyb21fc2V4cCk6IFJlc2V0IHNleHBfdG1wIGZvciBmYWlsc2FmZQorCW1lYW5zLiAgUmVsZWFzZSBzZXhwX2N1ciBpZiBuZWVkZWQuICBSZXBvcnRlZCBieSBEaXJrIFN0b2Vja2VyLgorCisJKiBwdWJrZXkuYyAocHVia2V5c19yZWdpc3RlcmVkX2xvY2spOiBJbnRpYWxpemVkIGl0LiAgSXQgaXMgbm90CisJIHJlYWx5IG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgYSBtZXJlIGluaXRpYWxpemF0aW9uIHRvIDAgYW55d2F5LgorCSBOb3RlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworMjAwNi0xMC0xNyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZHNhLmMgKF9nY3J5X2RzYV9nZW5lcmF0ZTIpOiBOZXcuCisJKGdlbmVyYXRlKTogTmV3IGFyZyBRQklUUy4gIEFkZCBzYW5pdHkgY2hlY2tzIGZvciByZWFzb25hYmxlIHFiaXRzCisJYW5kIG5iaXRzLgorCSogcHVia2V5LmMgKGdjcnlfcGtfZ2Vua2V5KTogUGFyc2UgYW4gcWJpdHMgZWxlbWVudC4KKwkocHVia2V5X2dlbmVyYXRlKTogTmV3IGFyZyBRQklUUy4gIFBhc3MgaXQgdG8gdGhlIERTQSBnZW5lcmF0aW9uLgorCisyMDA2LTEwLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtZC5jIChnY3J5X21kX2FsZ29faW5mbykgPGdldF9hc25vaWQ+OiBDaGVjayB0aGF0IHRoZSBhbGdvIGlzCisJYXZhaWxhYmxlLgorCisyMDA2LTEwLTA0ICBEYXZpZCBTaGF3ICA8ZHNoYXdAamFiYmVyd29ja3kuY29tPiAgKHdrKQorCisJKiB0aWdlci5jIChyb3VuZCk6IFJlbmFtZSB0byB0aWdlcl9yb3VuZCBhcyBnY2MgNCBoYXMgYSBidWlsdC1pbgorCXJvdW5kIGZ1bmN0aW9uIHRoYXQgdGhpcyBjb25mbGljdHMgd2l0aC4KKworMjAwNi0wOS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcm5kdzMyLmMgKHNsb3dfZ2F0aGVyZXJfd2luZG93c05UKTogV2hpbGUgYWRkaW5nIGRhdGEgdXNlIHRoZQorCXNpemUgb2YgdGhlIGRpc2tQZXJmb3JtYW5jZSBhbmQgbm90IGl0cyBhZGRyZXNzLiBIYXMgYmVlbiBmaXhlZCBpbgorCUdudVBHIG1vcmUgdGhhbiBhIHllYXIgYWdvLiAgTm90ZWQgYnkgTGVlIEZpc2hlci4KKworMjAwNi0wOC0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNleHBfZGF0YV90b19tcGkpOiBOZWVkIHRvIGFsbG93ICJyaXBlbWQxNjAiIGhlcmUgYXMKKwl0aGlzIGlzIHRoZSBjYW5vbmljYWwgbmFtZS4KKworMjAwNi0wOC0yOSAgSHllLVNoaWsgQ2hhbmcgPHBlcmt5QEZyZWVCU0Qub3JnPiAgKHdrKQorCisJKiBzZWVkLmM6IE5ldy4KKworMjAwNi0wOC0wMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLWRhZW1vbi5jIChfZ2NyeV9kYWVtb25faW5pdGlhbGl6ZV9iYXNpY3MpOiBEb24ndAorCWluaXRpYWxpemUgdGhlIHNvY2tldC4gIFJlbW92ZSBhcmcgU09DS0VUTkFNRS4KKwkoY29ubmVjdF90b19zb2NrZXQpOiBNYWtlIHN1cmUgdGhhdCBkYWVtb24gaXMgc2V0IHRvIC0xIG9uIGVycm9yLgorCShjYWxsX2RhZW1vbik6IEluaXRpYWxpemUgdGhlIHNvY2tldCBvbiB0aGUgZmlyc3QgY2FsbC4KKwkoX2djcnlfZGFlbW9uX3JhbmRvbWl6ZSwgX2djcnlfZGFlbW9uX2dldF9yYW5kb21fYnl0ZXMpCisJKF9nY3J5X2RhZW1vbl9jcmVhdGVfbm9uY2UpOiBOZXcgYXJnIFNPQ0tFVE5BTUUuCisJKiByYW5kb20uYyAoaW5pdGlhbGl6ZSk6IENhbGwgbmV3IGRhZW1vbiBpbml0aWFsaXphdG9yLgorCShnZXRfcmFuZG9tX2J5dGVzLCBnY3J5X3JhbmRvbWl6ZSwgZ2NyeV9jcmVhdGVfbm9uY2UpOiBQYXNzIHNvY2tldAorCW5hbWUgdG8gZGFlbW9uIGNhbGwgYW5kIHJlc2V0IGFsbG93X2RhZW1vbiBvbiBmYWlsdXJlLgorCisyMDA2LTA3LTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybWQxNjAuYyAoX2djcnlfcm1kMTYwX21peGJsb2NrKTogQWRkIGNhc3QgdG8gdHJhbnNmb3JtIGNhbGwuCisKKwkqIGJsb3dmaXNoLmMgKHNlbGZ0ZXN0KTogQ2FzdCBzdHJpbmcgdG8gdXNuaWduZWQgY2hhciouCisKKwkqIHByaW1lZ2VuLmMgKHByaW1lX2dlbmVyYXRlX2ludGVybmFsKTogQ2FzdCB1bnNpZ25lZC9jaGFyKgorCW1pc21hdGNoIGluIGNhbGxpbmcgbV9vdXRfb2Zfbi4KKwkoaXNfcHJpbWUpOiBDaGFuZ2VkIENPVU5UIHRvIHVuc2lnbmVkIGludCAqLgorCisJKiBhYy5jIChfZ2NyeV9hY19kYXRhX2NvcHkpOiBJbml0aWFsaXplIERBVEFfTVBJUy4KKworCSogcmFuZG9tLmMgKGdjcnlfY3JlYXRlX25vbmNlKTogVXBkYXRlIHRoZSBwaWQgYWZ0ZXIgYSBmb3JrLgorCVJlcG9ydGVkIGJ5IFVvdGkgVXJwYWxhLgorCisyMDA2LTA3LTA0ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIHNoYTUxMi5jOiBGaXggdHlwbyBpbiBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA2LTA2LTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAoX2djcnlfcnNhX2dlbmVyYXRlKTogUmVwbGFjZSB4Y2FsbG9jIGJ5IGNhbGxvYy4KKwkqIHB1YmtleS5jIChnY3J5X3BrX2VuY3J5cHQsIGdjcnlfcGtfc2lnbik6IERpdHRvLgorCShzZXhwX3RvX2tleSwgc2V4cF90b19zaWcsIHNleHBfdG9fZW5jLCBnY3J5X3BrX2VuY3J5cHQpCisJKGdjcnlfcGtfc2lnbiwgZ2NyeV9wa19nZW5rZXksIGdjcnlfcGtfZ2V0X2tleWdyaXApOiBEaXR0by4KKwkqIG1kLmMgKG1kX2NvcHkpOiBEaXR0by4KKworMjAwNi0wNC0yMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS1kYWVtb24uYyAoX2djcnlfZGFlbW9uX2luaXRpYWxpemVfYmFzaWNzKTogTmV3IGFyZ3VtZW50OgorCVNPQ0tFVE5BTUUuICBQYXNzaW5nIG9uIHRvIGNvbm5lY3RfdG9fc29ja2V0KCkgaWYgbm9uLU5VTEwuCisJKGNvbm5lY3RfdG9fc29ja2V0LCB3cml0ZW4sIHJlYWRuLCBjYWxsX2RhZW1vbik6IE5ldyBmdW5jdGlvbnMuCisJKF9nY3J5X2RhZW1vbl9yYW5kb21pemUsIF9nY3J5X2RhZW1vbl9nZXRfcmFuZG9tX2J5dGVzKQorCShfZ2NyeV9kYWVtb25fY3JlYXRlX25vbmNlKTogQ2FsbCBjYWxsX2RhZW1vbigpLgorCShSQU5ET01fREFFTU9OX1NPQ0tFVCk6IE5ldyBzeW1ib2wuCisJKGRhZW1vbl9zb2NrZXQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCisJKiByYW5kb20uaCAoX2djcnlfZGFlbW9uX2luaXRpYWxpemVfYmFzaWNzKTogTmV3IHBhcmFtZXRlcjoKKwlTT0NLRVROQU1FLgorCShfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIHJhbmRvbS5jIChpbml0aWFsaXplX2Jhc2ljcyk6IFBhc3MgREFFTU9OX1NPQ0tFVF9OQU1FIHRvCisJX2djcnlfZGFlbW9uX2luaXRpYWxpemVfYmFzaWNzLgorCShfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQpOiBOZXcgZnVuY3Rpb24sIHNldHRpbmcKKwlEQUVNT05fU09DS0VUX05BTUUuCisKKzIwMDYtMDQtMDEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChlbWVfcGtjc192MV81X2VuY29kZSk6IFVzZSBLRVlfU0laRSBkaXJlY3RseSwgbm8gbmVlZCB0bworCWNhbGwgZ2NyeV9hY19rZXlfZ2V0X25iaXRzLgorCShlbWVfcGtjc192MV81X2RlY29kZSk6IExpa2V3aXNlLgorCShhY19lc19kZW5jb2RlX3ByZXBhcmVfcGtjc192MV81KTogRmlsbCBvcHRpb25zX2VtIHN0cnVjdHVyZSB3aXRoCisJa2V5X3NpemUuCisJKF9nY3J5X2FjX2RhdGFfZHVtcCwgZ2NyeV9hY19kYXRhX2R1bXApOiBOZXcgZnVuY3Rpb25zLgorCShfZ2NyeV9hY19kYXRhX3RvX3NleHAsIF9nY3J5X2FjX2RhdGFfZnJvbV9zZXhwKTogTW9yZSBvciBsZXNzCisJcmV3cml0dGVuOyBjaGFuZ2VkIFMtRXhwcmVzc2lvbiBmb3JtYXQgc28gdGhhdCBpdCBtYXRjaGVzIHRoZSBvbmUKKwl1c2VkIGluIHB1YmtleS5jLgorCisyMDA2LTAzLTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20tZGFlbW9uLmM6IE5ldy4KKwkqIHJhbmRvbS5jIChfZ2NyeV91c2VfcmFuZG9tX2RhZW1vbik6IE5ldy4KKwkoZ2V0X3JhbmRvbV9ieXRlcywgZ2NyeV9yYW5kb21pemUsIGdjcnlfY3JlYXRlX25vbmNlKTogVHJ5CisJZGl2ZXJ0aW5nIHRvIHRoZSBkYWVtb24gZnVuY3Rpb25zLgorCisyMDA2LTAzLTE0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAobG9ja19zZWVkX2ZpbGUpOiBOZXcuCisJKHJlYWRfc2VlZF9maWxlLCBfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSk6IFVzZSBpdC4KKworCSogcmFuZG9tLmMgKGdjcnlfY3JlYXRlX25vbmNlKTogIERldGVjdCBhIGZvcmsgYW5kIHJlLXNlZWQuCisJKHJlYWRfcG9vbCk6IEZpeGVkIHRoZSBmb3JrIGRldGVjdGlvbjsgaXQgdXNlZCB0byB3b3JrIG9ubHkgZm9yCisJbXVsdGktdGhyZWFkZWQgcHJvY2Vzc2VzLgorCisyMDA2LTAzLTEyICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3aykKKworCSogbWQuYyAobWRfb3Blbik6IFVzZSBuZXcgdmFyaWFibGUgbWFjcGFkc19Cc2l6ZSBpbnN0ZWFkIG9mCisJaGFyZHdpcmluZyB0aGUgYmxvY2sgc2l6ZS4gIENoYW5nZWQgYXQgYWxsIHBsYWNlcy4KKworMjAwNi0wMy0xMCAgQnJhZCBIYXJkcyAgPGJyYWRoQGZyb2dtb3V0aC5uZXQ+ICAod2ssIHBhdGNoIDIwMDUtMDQtMjIpCisKKwkqIG1kLmMsIHNoYTI1Ni5jOiAgQWRkIHN1cHBvcnQgZm9yIFNIQS0yMjQuCisJKHNoYTIyNF9pbml0KTogTmV3LgorCisyMDA2LTAxLTE4ICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3ayAyMDA2LTAzLTA3KQorCisJKiBjaXBoZXIuYyAoY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0LCBkb19vZmJfZW5jcnlwdCkKKwkoZG9fb2ZiX2RlY3J5cHQsIGdjcnlfY2lwaGVyX29wZW4pOiBJbXBsZW1lbnQgT3V0cHV0IEZlZWRiYWNrIE1vZGUuCisKKzIwMDUtMTEtMDIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19hbGdvX25hbWUpOiBSZXR1cm4gIj8iIGluc3RlYWQgb2YgTlVMTCBmb3IKKwl1bmtub3duIGFsZ29yaXRobSBJRHMuCisJKiBjaXBoZXIuYyAoY2lwaGVyX2FsZ29fdG9fc3RyaW5nKTogTGlrZXdpc2UuCisKKzIwMDUtMTEtMDEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19hbGdvX2luZm8pOiBEb24ndCBmb3JnZXQgdG8gYnJlYWsgYWZ0ZXIgc3dpdGNoCisJY2FzZS4KKworMjAwNS0wOS0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZHNhLmMgKGdlbmVyYXRlKTogQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIDIgYW5kIDQga2V5cy4KKwlSZXR1cm4gYW4gZXJyb3IgY29kZSBpZiB0aGUga2V5IHNpemUgaXMgbm90IHN1cHBvcnRlZC4KKwkoX2djcnlfZHNhX2dlbmVyYXRlKTogUmV0dXJuIGFuIGVycm9yLgorCisyMDA1LTA4LTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwcmltZWdlbi5jIChjaGVja19wcmltZSk6IE5ldyBhcmcgUk1fUk9VTkRTLgorCShwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCk6IENhbGwgaXQgaGVyZSB3aXRoIDUgcm91bmRzIGFzIHVzZWQKKwliZWZvcmUuCisJKGdjcnlfcHJpbWVfY2hlY2spOiBCdXQgaGVyZSB3aXRoIDY0IHJvdW5kcy4KKwkoaXNfcHJpbWUpOiBNYWtlIHN1cmUgbmV2ZXIgdG8gdXNlIGxlc3MgdGhhbiA1IHJvdW5kcy4KKworMjAwNS0wNC0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKF9nY3J5X2FjX2luaXQpOiBOZXcgZnVuY3Rpb24uCisKKzIwMDUtMDQtMTIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChfZ2NyeV9hY19pb193cml0ZSwgX2djcnlfYWNfaW9fcmVhZCk6IEluaXRpYWxpemUgZXJyIHRvCisJbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuCisJQWx3YXlzIHVzZSBlcnJubywgbm93IHRoYXQgZ2NyeV9tYWxsb2MoKSBpcyBndWFyYW50ZWVkIHRvIHNldAorCWVycm5vIG9uIGZhaWx1cmUuCisJKF9nY3J5X2FjX2RhdGFfdG9fc2V4cCk6IERvbid0IGZvcmdldCB0byBnb3RvIG91dCBhZnRlciBlcnJvciBpbgorCWxvb3AuCisJKF9nY3J5X2FjX2RhdGFfdG9fc2V4cCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGU6IG1waV9saXN0OworCShfZ2NyeV9hY19kYXRhX3RvX3NleHApOiBBbHdheXMgZGVhbGxvY2F0ZSBzZXhwX2J1ZmZlci4KKwkoX2djcnlfYWNfZGF0YV9mcm9tX3NleHApOiBEb24ndCBmb3JnZXQgdG8gaW5pdGlhbGl6ZSBkYXRhX3NldF9uZXcuCisJKF9nY3J5X2FjX2RhdGFfZnJvbV9zZXhwKTogSGFuZGxlIHNwZWNpYWwgY2FzZSwgd2hpY2ggaXMKKwluZWNlc3NhcnksIHNpbmNlIGdjcnlfc2V4cF9udGgoKSBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisJImVsZW1lbnQgZG9lcyBub3QgZXhpc3QiIGFuZCAiZWxlbWVudCBpcyB0aGUgZW1wdHkgbGlzdCIuCisJKF9nY3J5X2FjX2lvX2luaXRfdmEpOiBVc2UgYXNzZXJ0IHRvIG1ha2Ugc3VyZSB0aGF0IG1vZGUgYW5kIHR5cGUKKwlhcmUgY29ycmVjdC4KKwlVc2UgZ2NyeV9lcnJvcl90IHR5cGVzIHdoZXJlIGdjcnlfZXJyX2NvZGVfdCB0eXBlcyBoYXZlIGJlZW4gdXNlZAorCWJlZm9yZS4KKworMjAwNS0wNC0xMSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKF9nY3J5X2FjX2RhdGFfc2lnbl9zY2hlbWUpOiBEb24ndCBmb3JnZXQgdG8gaW5pdGlhbGl6ZQorCWJ1ZmZlci4KKworCSogd2hpcmxwb29sLmM6IE5ldyBmaWxlLgorCSogbWQuYyAoZGlnZXN0X3RhYmxlKTogQWRkIHdoaXJscG9vbC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9saWJjaXBoZXJfbGFfU09VUkNFUyk6IEFkZGVkOiB3aGlybHBvb2wuYy4KKworMjAwNS0wMy0zMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKF9nY3J5X2FjX2RhdGFfZnJvbV9zZXhwKTogVXNlIGxlbmd0aCBvZiBTRVhQX0NVUiwgbm90CisJbGVuZ3RoIG9mIFNFWFA7IGRvIG5vdCBmb3JnZXQgdG8gc2V0IFNFWFBfVE1QIHRvIE5VTEwgYWZ0ZXIgaXQgaGFzCisJYmVlbiByZWxlYXNlZC4KKworCShzdHJ1Y3QgZ2NyeV9hY19tcGkpOiBOZXcgbWVtYmVyOiBuYW1lX3Byb3ZpZGVkLgorCShfZ2NyeV9hY19kYXRhX3NldCk6IFJlbmFtZSB2YXJpYWJsZSBgbmFtZV9maW5hbCcgdG8gYG5hbWVfY3AnOworCXJlbW92ZSBjb25zdCBxdWFsaWZpZXI7IGNoYW5nZSBjb2RlIHRvIG5vdCBjYXN0IGF3YXkgY29uc3QKKwlxdWFsaWZpZXJzOyB1c2UgbmFtZV9wcm92aWRlZCBtZW1iZXIgYXMgd2VsbC4KKwkoX2djcnlfYWNfZGF0YV9zZXQsIF9nY3J5X2FjX2RhdGFfZ2V0X25hbWUpOiBVc2UgbmFtZV9wcm92aWRlZAorCW1lbWJlciBvZiBuYW1lZCBtcGkgc3RydWN0dXJlLgorCisJKGdjcnlfYWNfbmFtZV90b19pZCk6IERvIG5vdCBmb3JnZXQgdG8gaW5pdGlhbGl6ZSBlcnIuCisJKF9nY3J5X2FjX2RhdGFfZ2V0X2luZGV4KTogRG8gbm90IGZvcmdldCB0byBpbml0aWFsaXplIG1waV9yZXR1cm47CisJdXNlIGdjcnlfZnJlZSgpIGluc3RlYWQgb2YgZnJlZSgpOyByZW1vdmUgdW5uZWNlc3NhcnkgY2FzdDsgcmVuYW1lCisJbXBpX3JldHVybiBhbmQgbmFtZV9yZXR1cm4gdG8gbXBpX2NwIGFuZCBuYW1lX2NwOyBhZGp1c3QgY29kZS4KKwkoYWNfZGF0YV9tcGlfY29weSk6IERvIG5vdCBjYXN0IGF3YXkgY29uc3QgcXVhbGlmaWVyLgorCShhY19kYXRhX3ZhbHVlc19kZXN0cm95KTogTGlrZXdpc2UuCisJKGFjX2RhdGFfY29uc3RydWN0KTogTGlrZXdpc2UuCisKKwkoYWNfZGF0YV9tcGlfY29weSk6IEluaXRpYWxpemUgZmxhZ3MgdG8gR0NSWV9BQ19GTEFHX0RFQUxMT0MuCisJKGFjX2RhdGFfZXh0cmFjdCk6IFVzZSBHQ1JZX0FDX0ZMQUdfREVBTExPQyBpbnN0ZWFkIG9mCisJR0NSWV9BQ19GTEFHX0NPUFkuCisKKwkoX2djcnlfYWNfaW9faW5pdF92YSwgX2djcnlfYWNfaW9faW5pdCwgZ2NyeV9hY19pb19pbml0KQorCShnY3J5X2FjX2lvX2luaXRfdmEsIF9nY3J5X2FjX2lvX3dyaXRlLCBfZ2NyeV9hY19pb19yZWFkKQorCShfZ2NyeV9hY19pb19yZWFkX2FsbCwgX2djcnlfYWNfaW9fcHJvY2Vzcyk6IE5ldyBmdW5jdGlvbnMuCisJKGdyeV9hY19lbV9kZW5jb2RlX3QpOiBVc2UgZ2NyeV9hY19pb190IGluIHByb3RvdHlwZSBpbnN0ZWFkIG9mCisJbWVtcm95IHN0cmluZ3MgZGlyZWN0bHk7IGFkanVzdCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyB0byB1c2UgaW8KKwlvYmplY3RzLgorCShlbXNhX3BrY3NfdjFfNV9lbmNvZGVfZGF0YV9jYik6IE5ldyBmdW5jdGlvbiAuLi4KKwkoZW1zYV9wa2NzX3YxXzVfZW5jb2RlKTogLi4uIHVzZSBpdCBoZXJlLgorCShhY19kYXRhX2RlbmNvZGUpOiBVc2UgaW8gb2JqZWN0cy4KKwkoX2djcnlfYWNfZGF0YV9lbmNvZGUsIF9nY3J5X2FjX2RhdGFfZGVjb2RlLCBnY3J5X2FjX2RhdGFfZW5jb2RlKQorCShnY3J5X2FjX2RhdGFfZGVjb2RlKTogTGlrZXdpc2UuCisJKF9nY3J5X2FjX2RhdGFfZW5jcnlwdF9zY2hlbWUsIGdjcnlfYWNfZGF0YV9lbmNyeXB0X3NjaGVtZSkKKwkoX2djcnlfYWNfZGF0YV9kZWNyeXB0X3NjaGVtZSwgZ2NyeV9hY19kYXRhX2RlY3J5cHRfc2NoZW1lKQorCShfZ2NyeV9hY19kYXRhX3NpZ25fc2NoZW1lLCBnY3J5X2FjX2RhdGFfc2lnbl9zY2hlbWUpCisJKF9nY3J5X2FjX2RhdGFfdmVyaWZ5X3NjaGVtZSwgZ2NyeV9hY19kYXRhX3ZlcmlmeV9zY2hlbWUpOgorCUxpa2V3aXNlLgorCisyMDA1LTAzLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmR3MzIuYyAoX2djcnlfcm5kdzMyX2dhdGhlcl9yYW5kb21fZmFzdCk6IFdoaWxlIGFkZGluZyBkYXRhCisJdXNlIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgYW5kIG5vdCB0aGUgb25lIG9mIGl0cyBhZGRyZXNzLiAgQnVnCisJcmVwb3J0ZWQgYnkgU2FzY2hhIEtpZWZlci4KKworMjAwNS0wMy0xOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jIChkb19jYmNfZW5jcnlwdCk6IEJlIGNhcmVmdWwgdG8gbm90IG92ZXJ3cml0ZSBkYXRhLAorCXdoaWNoIGlzIHRvIGJlIHVzZWQgbGF0ZXIgb24uICBUaGlzIGhhcHBlbmQsIGluIGNhc2UgQ1RTIGlzCisJZW5hYmxlZCBhbmQgT1VUQlVGIGlzIGVxdWFsIHRvIElOQlVGLgorCisyMDA1LTAyLTI1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZXRfa2V5Z3JpcCk6IEFsbG93IGZvciBzaGFkb3dlZC1wcml2YXRlLWtleS4KKworMjAwNS0wMi0xMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHNlcnBlbnQuYzogVXBkYXRlZCBmcm9tIDEuMiBicmFuY2g6CisKKwlzL3UzMl90L3UzMi8gYW5kIHMvYnl0ZV90L2J5dGUvLiAgVG9vIG1hdGNoIHdoYXQgd2UgaGF2ZSBhbHdheXMKKwl1c2VkIGFuZCBhcmUgdXNpbmcgaW4gYWxsIG90aGVyIGZpbGVzIHRvbworCShzZXJwZW50X3Rlc3QpOiBNb3ZlZCBwcm90b3R5cGUgb3V0IG9mIGEgZnVjbnRpb24uCisKKzIwMDUtMDItMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhYy5jOiBNYWpvciBwYXJ0cyByZXdyaXR0ZW4uCisJKiBwdWJrZXkuYyAoX2djcnlfcGtfZ2V0X2VsZW1lbnRzKTogTmV3IGZ1bmN0aW9uLgorCisyMDA0LTEyLTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzZXJwZW50LmMgKHNlcnBlbnRfc2V0a2V5KTogTW92ZWQgcHJvdG90eXBlIG9mIHNlcnBlbnRfdGVzdCB0bworCW91dGVyIHNjb3BlLgorCisyMDA0LTA5LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHB1YmtleV90YWJsZSk6IEFkZGVkIGFuIGFsaWFzIGVudHJ5IGZvciBHQ1JZX1BLX0VMR19FLgorCisyMDA0LTA4LTIzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMuYzogRG8gbm90IGluY2x1ZGUgPGFzc2VydC5oPi4KKwkqIHJuZGVnZC5jOiBMaWtld2lzZS4KKwkqIHNoYTEuYzogTGlrZXdpc2UuCisJKiBybmR1bml4LmM6IExpa2V3aXNlLgorCSogcm5kbGludXguYzogTGlrZXdpc2UuCisJKiBybWQxNjAuYzogTGlrZXdpc2UuCisJKiBtZDUuYzogTGlrZXdpc2UuCisJKiBtZDQuYzogTGlrZXdpc2UuCisJKiBjaXBoZXIuYzogTGlrZXdpc2UuCisJKiBjcmMuYzogTGlrZXdpc2UuCisJKiBibG93ZmlzaC5jOiBMaWtld2lzZS4KKworCSogcHVia2V5LmMgKGR1bW15X2dlbmVyYXRlLCBkdW1teV9jaGVja19zZWNyZXRfa2V5KQorCShkdW1teV9lbmNyeXB0LCBkdW1teV9kZWNyeXB0LCBkdW1teV9zaWduLCBkdW1teV92ZXJpZnkpOiBSZXR1cm4KKwllcnIgY29kZSBHUEdfRVJSX05PVF9JTVBMRU1FTlRFRCBpbnN0ZWFkIG9mIGFib3J0aW5nIHRocm91Z2gKKwlsb2dfYnVnKCkuCisJKGR1bW15X2dldF9uYml0cyk6IFJldHVybiAwIGluc3RlYWQgb2YgYWJvcnRpbmcgdGhvdWdoIGxvZ19idWcoKS4KKworMjAwNC0wOC0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmRlPgorCisJKiBwdWJrZXkuYyAoc2V4cF9kYXRhX3RvX21waSk6IENoYW5nZWQgdGhlIHplcm8gcmFuZG9tIGJ5dGUKKwlzdWJzdGl0dXRpbmcgY29kZSB0byBhY3R1YWxseSBkbyBjbGV2ZXIgdGhpbmdzLiAgVGhhbmtzIHRvCisJTWF0dGhpYXMgVXJsaWNocyBmb3Igbm90aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9ibGVtLgorCisyMDA0LTA4LTA5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfc2lnbik6IEZpeGVkIG1lbW9yeSBsZWFrOyBmaXggcHJvdmlkZWQgYnkKKwlNb2Rlc3RhcyBWYWluaXVzLgorCisyMDA0LTA3LTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmlqbmRhZWwuYyAoZG9fZW5jcnlwdCk6IEZpeCBhbGlnbm1lbnQgcHJvYmxlbS4gIEJ1Z3MgZm91bmQgYnkKKwlNYXR0aGlhcyBVcmxpY2hzLgorCShkb19kZWNyeXB0KTogRGl0dG8uCisJKGtleVNjaGVkLCBrZXlTY2hlZDIpOiBVc2UgMiBtYWNyb3MgYWxvbmcgd2l0aCB1bmlvbnMgaW4gdGhlIGtleQorCXNjaGVkdWxlIGNvbnRleHQuCisKKzIwMDQtMDctMTQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAoX2djcnlfcnNhX2RlY3J5cHQpOiBEb24ndCBmb3JnZXQgdG8gZnJlZSAiYSIuICBUaGFua3MgdG8KKwlOaWtvcyBNYXZyb3lhbm9wb3Vsb3MuCisKKzIwMDQtMDUtMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiByYW5kb20uYyAocmVhZF9wb29sKTogTWl4IHRoZSBQSUQgaW4gdG8gYmV0dGVyIHByb3RlY3QgYWZ0ZXIgYQorCWZvcmsuCisKKzIwMDQtMDctMDQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBzZXJwZW50LmM6IFVzZSAidTMyX3QiIGluc3RlYWQgb2YgInVuc2lnbmVkIGxvbmciLCBkbyBub3QKKwlkZWNsYXJlIFMtQm94IHZhcmlhYmxlcyBhcyAicmVnaXN0ZXIiLiAgRml4ZXMgZmFpbHVyZSBvbgorCU9wZW5CU0Qvc3BhcmM2NCwgcmVwb3J0ZWQgYnkgTmlrb2xheSBTdHVybS4KKworMjAwNC0wNS0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJhbmRvbS5jIChpbml0aWFsaXplKTogRmFjdG9yZWQgb3V0IHNvbWUgY29kZSB0byAuLgorCShpbml0aWFsaXplX2Jhc2ljcyk6IC4uIG5ldyBmdW5jdGlvbi4KKwkoX2djcnlfcmFuZG9tX2luaXRpYWxpemUpOiBKdXN0IGNhbGwgaW5pdGlhbGl6ZV9iYXNpY3MgdW5sZXNzIHRoZQorCW5ldyBhcmcgRlVMTCBpcyBzZXQgdG8gVFJVRS4KKwkoX2djcnlfZmFzdF9yYW5kb21fcG9sbCk6IERvbid0IGRvIGFueXRoaW5nIHVubGVzcyB0aGUgcmFuZG9tCisJc3lzdGVtIGhhcyBiZWVuIHJlYWxseSBpbml0aWFsaXplZC4KKworMjAwNC0wNS0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5kZT4KKworCSogYWMuYyAoZ2NyeV9hY19vcGVuKTogRG8gbm90IGRlcmVmZXJlbmNlIE5VTEwgcG9pbnRlci4gIFJlcG9ydGVkCisJYnkgVW1iZXJ0byBTYWxzaS4KKworMjAwNC0wMi0yMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHByaW1lZ2VuLmMgKGNoZWNrX3ByaW1lKTogTmV3IGFyZ3MgQ0JfRlVOQyBhbmQgQ0JfQVJHOyBjYWxsIHRoZW0KKwlhdCBkaWZmZXJlbnQgc3RhZ2VzLiAgUGFzcyB0aGVzZSBhcmd1bWVudHMgdGhyb3VnaCBhbGwgY2FsbGVycy4KKworMjAwNC0wMi0wNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGRlcy5jOiBBZGQgYSBuZXcgT0lEIGFzIHVzZWQgYnkgcGtjcyMxMi4KKworCSogcmZjMjI2OC5jOiBOZXcuIFRha2VuIGZyb20gbGliZ2NyeXB0LgorCSogY2lwaGVyLmM6IFNldHVwIHRoZSByZmMyMjY4IGFsZ29yaXRobS4KKworMjAwNC0wMS0yNSAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogcHJpbWVnZW4uYyAocHJpbWVfZ2VuZXJhdGVfaW50ZXJuYWwpOiBEbyBub3QgZm9yZ2V0IHRvIGZyZWUKKwlgcV9mYWN0b3InOyBmaXhlZCBieSBCcmlldWMgSmV1bmhvbW1lLgorCShwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCk6IERvIG5vdCBmb3JnZXQgdG8gZnJlZSBgcHJpbWUnLgorCisyMDA0LTAxLTE0ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChnY3J5X2FjX2RhdGFfc2V0KTogTmV3IGFyZ3VtZW50OiBmbGFnczsgc2xpZ2h0bHkKKwlyZXdyaXR0ZW4uCisJKGdjcnlfYWNfZGF0YV9nZXRfbmFtZSwgZ2NyeV9hY19kYXRhX2dldF9pbmRleCk6IExpa2V3aXNlLgorCShnY3J5X2FjX2tleV9wYWlyX2dlbmVyYXRlKTogTmV3IGFyZ3VtZW50OiBtaXNjX2RhdGE7IG1vZGlmaWVkCisJb3JkZXIgb2YgYXJndW1lbnRzLgorCShnY3J5X2FjX2tleV90ZXN0KTogTmV3IGFyZ3VtZW50OiBoYW5kbGUuCisJKGdjcnlfYWNfa2V5X2dldF9uYml0cywgZ2NyeV9hY19rZXlfZ2V0X2dyaXApOiBMaWtld2lzZS4KKwlVc2UgR0NSWV9BQ19GTEFHX05PX0JMSU5ESU5HIGluc3RlYWQgb2YKKwlHQ1JZX0FDX0RBVEFfRkxBR19OT19CTElORElORy4KKwkoZ2NyeV9hY19tcGkpOiBOZXcgbWVtYmVyOiBmbGFncy4KKwkoZ2NyeV9hY19kYXRhX3NlYXJjaCwgZ2NyeV9hY19kYXRhX2FkZCk6IFJlbW92ZWQgZnVuY3Rpb25zLgorCisyMDAzLTEyLTIyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHJpbWVnZW4uYyAoaXNfcHJpbWUpOiBSZWxlYXNlIEEyLgorCisyMDAzLTEyLTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQuYzogTW92ZWQgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGRvd24gYmVsb3cgdGhlIGRhdGEgc3RydWN0dXJlCisJZGVmaW5pdGlvbnMuCisJKHN0cnVjdCBnY3J5X21kX2NvbnRleHQpOiBOZXcgZmllbGQgQUNUVUFMX0hBTkRMRV9TSVpFLgorCShtZF9vcGVuKTogU2V0IGl0IGhlcmUuCisJKHN0cmN1dCBnY3J5X21kX2xpc3QpOiBOZXcgZmllbGQgQUNUVUFMX1NUUlVDVF9TSVpFLgorCShtZF9lbmFibGUpOiBTZXQgaXQgaGVyZS4KKwkobWRfY2xvc2UpOiBXaXBlIHRoZSBjb250ZXh0IG1lbW9yeS4KKwlzZWN1cmUgbWVtb3J5LgorCSogY2lwaGVyLmMgKHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUpOiBOZXcgZmllbGQgQUNUVUFMX0hBTkRMRV9TSVpFLgorCShnY3J5X2NpcGhlcl9vcGVuKTogU2V0IGl0IGhlcmUuCisJKGdjcnlfY2lwaGVyX2Nsb3NlKTogVXNlIGl0IHRvIGFsd2F5cyB3aXBlIG91dCB0aGUgaGFuZGxlIGRhdGEuCisKKwkqIGFjLmMgKGdjcnlfYWNfb3Blbik6IE1ha2Ugc3VyZSBIQU5ETEUgZ2V0cyBpbml0aWFsaXplZCBldmVuIHdoZW4KKwl0aGUgZnVuY3Rpb24gaXMgbm90IHN1Y2Nlc3NmdWwuCisJKGdjcnlfYWNfY2xvc2UpOiBBbGxvdyBhIE5VTEwgaGFuZGxlLgorCShnY3J5X2FjX2tleV9kZXN0cm95LCBnY3J5X2FjX2tleV9wYWlyX2Rlc3Ryb3kpOiBEaXR0by4KKwkoZ2NyeV9hY19rZXlfZ2V0X2dyaXApOiBSZXR1cm4gSU5WX09CSiBvbiBlcnJvci4KKworCSogcHJpbWVnZW4uYyAocHJpbWVfZ2VuZXJhdGVfaW50ZXJuYWwpOiBGaXhlZCBlcnJvciBjb2RlIGZvcgorCWZhaWxlZCBtYWxsb2MuICBSZXBsYWNlZCB0aGUgIWVyciBpZiBjaGFpbiBieSBnb3Rvcy4KKwkoZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IpOiBSZW1vdmUgdGhlIGV4dHJhIHNhbml0eSBjaGVjay4KKworCSogbWQuYzogTWlub3IgY29kZSBhbmQgY29tbWVudCBjbGVhbnVwcy4KKworMjAwMy0xMi0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHByaW1lZ2VuLmMgKGdlbl9wcmltZSk6IERvYyBmaXguICBUaGFua3MgdG8gTmV3dG9uIEhhbW1ldC4KKworMjAwMy0xMi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJuZHVuaXguYyAoc2xvd19wb2xsKTogRG9uJ3QgdXNlICN3YXJuaW5nIGJ1dCAjZXJyb3IuCisKKwkqIHJuZGVnZC5jOiBDaGFuZ2VkIGluZGVudGF0aW9uLgorCShteV9tYWtlX2ZpbGVuYW1lKTogUmVtb3ZkIHRoZSB2YXJfYXJnIGNydWZ0IGJlY3Vhc2Ugd2UKKwlkb24ndCBuZWVkIGl0IGhlcmUuICBDaGFuZ2VkIGNhbGxlci4KKworCSogcm5kbGludXguYzogQ2hhbmdlZCBpbmRlbnRhdGlvbi4KKwkob3Blbl9kZXZpY2UpOiBSZW1vdmUgdGhlIHN1cGVyZmx1b3VzIHN0YXQgY2FsbCBhbmQgY2xhcmlmeQorCWNvbW1lbnQuCisKKwkqIHJzYS5jOiBDaGFuZ2VkIGluZGVudGF0aW9uLgorCShzZWNyZXQpOiBVc2UgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBpZiBwLCBxIGFuZCB1IGFyZSBub3QKKwlhdmFpbGFibGUuCisJKHJzYV9ibGluZCwgcnNhX3VuYmxpbmQpOiBSZW5hbWVkIGZyb20gX2djcnlfcnNhX2JsaW5kLAorCV9nY3J5X3JzYV91bmJsaW5kIGFuZCBtb3ZlZCBtb3JlIHRvIHRoZSB0b3AuCisKKwkqIG1kNC5jOiBDaGFuZ2VkIGluZGVudGF0aW9uLiAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYXN0cy4KKwkqIG1kNS5jLCBybWQxNjAuYywgc2hhMS5jLCB0aWdlci5jOiBEaXR0by4KKwkqIHJpam5kYWVsLmMsIHR3b2Zpc2guYzogRGl0dG8uCisJKiBzZXJwZW50LmM6IFJlbW92ZWQgdW5uZWNlc3NhcnkgY2FzdHMuCisJKiBzaGEyNTYuYywgc2hhNTEyLmM6IERpdHRvLgorCisyMDAzLTEyLTA5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZHNhLmM6IFVuaWZpZWQgaW5kZW50YXRpb24gc3R5bGUuCisJKiBlbGdhbWFsLmM6IERpdHRvLgorCSogZGVzLmMgKGRlc19rZXlfc2NoZWR1bGUpOiBDb2RlIGJlYXV0aWZpY2F0aW9ucy4KKwkqIGJsb3dmaXNoLmM6IENoYW5nZWQgaW5kZW50YXRpb24gc3R5bGUuCisJKiBjYXN0NS5jIChkb19jYXN0X3NldGtleSk6IERpdHRvLgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19lbmNyeXB0KTogUmVwbGFjZWQgdGhlIGNoYWluIG9mIGlmKCFlcnIpIHRlc3RzCisJYnkgc3RyYWlnaHRmb3J3YXJkIGdvdG9zLiBPdGhlciBjbGVhbnVwcy4KKwkoZ2NyeV9wa19kZWNyeXB0KTogRGl0dG8uCisJKGdjcnlfcGtfc2lnbik6IERpdHRvLgorCShnY3J5X3BrX3ZlcmlmeSk6IERpdHRvLgorCShnY3J5X3BrX2dlbmtleSk6IERpdHRvLiAgVXNlIHN0cnRvdWwgaW5zdGVhZCBvZiBzdHJ0b2wuCisJKGdjcnlfcGtfY3RsKTogVXNlIEdQR19FUlJfSU5WX0FSRyB0byBpbmRpY2F0ZSBiYWQgYXJndW1lbnRzLgorCisyMDAzLTEyLTA3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfcmVnaXN0ZXJfZGVmYXVsdCk6IFVuZGVmIHRoZSBoZWxwZXIgbWFjcm8uCisJKGdjcnlfcGtfbWFwX25hbWUpOiBBbGxvdyBOVUxMIGZvciBzdHJpbmcuCisJKHNleHBfdG9fa2V5KTogVXNlIG1lbWNweSBhbmQgbm90IHN0cm5jcHkuICBVc2UgZ2NyeV9mcmVlIGFuZCBub3QKKwlmcmVlLgorCShzZXhwX3RvX3NpZyk6IERpdHRvLgorCShzZXhwX3RvX2VuYyk6IERpdHRvLiAgUmVwbGFjZWQgdGhlIGNoYWluIG9mIGlmKCFlcnIpIHRlc3RzIGJ5CisJc3RyYWlnaHRmb3J3YXJkIGdvdG9zLgorCisyMDAzLTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY2lwaGVyLmM6IERvY3VtZW50YXRpb24gY2xlYW51cHMuCisJKGdjcnlfY2lwaGVyX21vZGVfZnJvbV9vaWQpOiBBbGxvdyBOVUxMIGZvciBTVFJJTkcuCisKKzIwMDMtMTItMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBlbGdhbWFsLmMgKHNpZ24sIGRvX2VuY3J5cHQsIGdlbl9rKTogTWFrZSBzdXJlIHRoYXQgYSBzbWFsbCBLIGlzCisJb25seSB1c2VkIGZvciBlbmNyeXB0aW9uLgorCisyMDAzLTExLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmFuZG9tLmggKHJuZHczMl9zZXRfZGxsX25hbWUpOiBSZW1vdmVkIHVudXNlZCBwcm90b3R5cGUuCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgTWFuaWZlc3QuCisKKzIwMDMtMTEtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBNYW5pZmVzdDogTmV3LgorCisyMDAzLTExLTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQuYyAoZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IFVzZSBzaG9ydGN1dCBmb3IgU0hBMQorCSogc2hhMS5jIChfZ2NyeV9zaGExX2hhc2hfYnVmZmVyKTogTmV3LgorCisJKiByYW5kb20uYzogUmVmb3JtYXR0ZWQgbW9zdCBmdW5jdGlvbnMuCisJKG1peF9wb29sKTogTW92ZWQgdGhlIGZhaWxzYWZlX2RpZ2VzdCBmcm9tIGdsb2JhbAorCXNjb3BlIHRvIGhlcmUuCisJKGRvX2Zhc3RfcmFuZG9tX3BvbGwpOiBVc2UgdGhlIGdlbmVyaWMgZnVjbnRpb25zIGV2ZW4gaWYgYSBmYXN0CisJZ2F0aGVyaW5nIGZ1bmN0aW9uIGhhcyBiZWVuIHVzZWQuCisJKHJlYWRfcG9vbCk6IERldGVjdCBhIGZvcmsgYW5kIHJldHJ5LgorCShnY3J5X3JhbmRvbWl6ZSwgZ2V0X3JhbmRvbV9ieXRlcyk6IERvbid0IGRpc3Rpbmd1aXNoIGFueW1vcmUKKwliZXR3ZWVuIHdlYWsgYW5kIHN0cm9uZyByYW5kb20uCisJKGdjcnlfY3JlYXRlX25vbmNlKTogTmV3LgorCisyMDAzLTEwLTMxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcm5kdzMyLmMgKHNsb3dfZ2F0aGVyZXJfd2luZG93c05UKTogVXNlIGEgcGxhaW4gYnVmZmVyIGZvciB0aGUKKwlkaXNrIHBlcmZvcm1hbmNlIHZhbHVlcyBhbmQgbm90IHRoZSBXMzIgQVBJIHN0cnVjdHVyZS4KKworCSogZHNhLmMgKHZlcmlmeSk6IHMvZXhwL2V4LyBkdWUgdG8gc2hhZG93aW5nIG9mIGEgYnVpbHRpbi4KKwkqIGVsZ2FtYWwuYyAodmVyaWZ5KTogRGl0dG8uCisKKwkqIGFjLmMgKGdjcnlfYWNfZGF0YV9nZXRfaW5kZXgpOiBzL2luZGV4L2lkeC8KKwkoZ2NyeV9hY19kYXRhX2NvcHlfaW50ZXJuYWwpOiBSZW1vdmUgdGhlIGNhc3QgaW4gX2djcnlfbWFsbG9jLgorCShnY3J5X2FjX2RhdGFfYWRkKTogTXVzdCB1c2UgZ2NyeV9yZWFsbG9jIGluc3RlYWQgb2YgcmVhbGxvYy4KKwkqIHB1YmtleS5jIChzZXhwX2VsZW1lbnRzX2V4dHJhY3QpOiBzL2luZGV4L2lkeC8gYXMgdHJpYnV0ZSB0byB0aGUKKwlmb3JlaGFja2Vycy4KKwkoZ2NyeV9wa19lbmNyeXB0KTogUmVtb3ZlZCBzaGFkb3dlZCBkZWZpbml0aW9uIG9mIEkuIFJlb3JkZXJlZAorCWFyZ3VtZW50cyB0byBtYWxsb2MgZm9yIGNsYXJpdHkuCisJKGdjcnlfcGtfc2lnbiwgZ2NyeV9wa19nZW5rZXkpOiBEaXR0by4KKwkqIHByaW1lZ2VuLmMgKHByaW1lX2dlbmVyYXRlX2ludGVybmFsKTogcy9yYW5kb20vcmFuZG9tbGV2ZWwvLgorCisyMDAzLTEwLTI3ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19lbmNyeXB0KTogRG9uJ3QgZm9yZ2V0IHRvIGRlYWxsb2NhdGUgcGtleS4KKworMjAwMy0xMC0yNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJhbmRvbS5jIChnY3J5X3JhbmRvbV9hZGRfYnl0ZXMpOiBSZXR1cm4gaWYgYnVmbGVuIGlzIHplcm8gdG8KKwlhdm9pZCBnY2Mgd2FybmluZyBhYm91dCB1bnNlZCBwYXJhbWV0ZXIuCisJKE1BU0tfTEVWRUwpOiBTaW1wbGlmaWVkOyBkb2VzIG5vdyB3b3JrIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkCisJdy9vIHdhcm5pbmdzLgorCisJKiBtZC5jIChtZF9zdGFydF9kZWJ1Zyk6IFJlbW92ZWQgdGhlIGNvbnN0IGZyb20gU1VGRklYLCBiZWNhdXNlCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgY29udHJvbCBmdWNudGlvbiB3aGljaCBkb2VzIG5vdAorCXJlcXVpcmUgY29uc3QuCisKKwlQcmVmaXhlZCBhbGwgKHB1YmtleSxkaWdlc3QsY2lwaGVyfV9zcGVjXyogZ2xvYmFsZSB2YXJpYWJsZXMgd2l0aAorCV9nY3J5Xy4KKworCSogYWMuYyAoYWNfa2V5X2lkZW50aWZpZXJzKTogTWFkZSBzdGF0aWMuCisKKwkqIHJhbmRvbS5jIChnZXRmbmNfZ2F0aGVyX3JhbmRvbSxnZXRmbmNfZmFzdF9yYW5kb21fcG9sbCk6IE1vdmUKKwlwcm90b3R5cGVzIHRvIC4uCisJKiByYW5kLWludGVybmFsLmg6IC4uIGhlcmUKKwkqIHJhbmRvbS5jIChnZXRmbmNfZ2F0aGVyX3JhbmRvbSk6IEluY2x1ZGUgcm5kdzMyIGdhdGhlcmVyLgorCSogcm5kdW5peC5jLCBybmR3MzIuYywgcm5kZWdkLmM6IEluY2x1ZGUgdGhlbSBoZXJlLgorCSogcm5kbGludXguYyAoX2djcnlfcm5kbGludXhfZ2F0aGVyX3JhbmRvbSk6IFByZXBlbmQgdGhlIF9nY3J5XworCXByZWZpeC4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCisJKiBybmRlZ2QuYyAoX2djcnlfcm5kZWdkX2dhdGhlcl9yYW5kb20pOiBMaWtld2lzZS4KKwkoX2djcnlfcm5kZWdkX2Nvbm5lY3Rfc29ja2V0KTogTGlrZXdpc2UuCisJKiBybmR1bml4LmMgKF9nY3J5X3JuZHVuaXhfZ2F0aGVyX3JhbmRvbSk6IExpa2V3aXNlLgorCSh3YWl0cGlkKTogTWFkZSBzdGF0aWMuCisJKiBybmR3MzIuYzogUmVtb3ZlZCB0aGUgb2xkIGFuZCB1bnVzZWQgd2luc2VlZC5kbGwgY3J1ZnQuCisJKF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tX2Zhc3QpOiBSZW5hbWVkIGZyb20KKwlnYXRoZXJfcmFuZG9tX2Zhc3QuCisJKF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tKTogUmVuYW1lZCBmcm9tIGdhdGhlcl9yYW5kb20uICBOb3RlLAorCXRoYXQgdGhlIGNoYW5nZXMgMjAwMy0wNC0wOCBzb21laG93IGdvdCBsb3N0LgorCisJKiBzaGE1MTIuYyAoc2hhNTEyX2luaXQsIHNoYTM4NF9pbml0KTogTWFkZSBzdGF0aWMuCisKKwkqIGNpcGhlci5jIChkb19jdHJfZGVjcnlwdCk6IFJlbW92ZWQgInJldHVybiIgZnJvbSB0aGlzIHZvaWQKKwlmdW5jdGlvbi4KKworMjAwMy0xMC0yNCAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogc2VycGVudC5jOiBGaXggYW4gaXNzdWUgb24gYmlnLWVuZGlhbiBzeXN0ZW1zLgorCisJKiBybmR3MzIuYzogUmVtb3ZlZCBJU19NT0RVTEUgLWNydWZ0LgorCSogcm5kbGludXguYyAocm5kbGludXhfZ2F0aGVyX3JhbmRvbSk6IExpa2V3aXNlLgorCisyMDAzLTEwLTEwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHJpbWVnZW4uYyAoZ2VuX3ByaW1lKTogQmFpbCBvdXQgaWYgTkJJVFMgaXMgbGVzcyB0aGFuIDE2LgorCShwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCk6IEluaXRpYWxpemUgcHJpbWUgdmFyaWFibGUgdG8gc3VwcHJlc3MKKwljb21waWxlciB3YXJuaW5nLiAgQ2hlY2sgcGJpdHMsIGluaXRpYWxpemUgcWJpdHMgd2hlbiBwYXNzZWQgYXMKKwl6ZXJvLgorCisJKiBwcmltZWdlbi5jIChwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCk6IE5ldyBhcmcKKwlBTExfRkFDVE9SUy4gQ2hhbmdlZCBhbGwgY2FsbGVycy4KKwkoZ2NyeV9wcmltZV9nZW5lcmF0ZSk6IE1ha2UgdGhlIGZhY3RvcnMgYXJnIG9wdGlvbmFsLiBSZXF1ZXN0CisJYWxsX2ZhY3RvcnMuICBNYWtlIHN1cmUgUFJJTUUgaXMgc2V0IHRvIE5VTEwgZXZlbiBvbiBlcnJvci4KKwkoZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IpOiBOZXcuCisJKGdjcnlfcHJpbWVfcmVsZWFzZV9mYWN0b3JzKTogTmV3LgorCisyMDAzLTEwLTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHJpbWVnZW4uYyAoZ2VuX3ByaW1lKTogQXNzZXJ0IHRoYXQgTkJJVFMgaXMgbmV2ZXIgemVybywgaXQKKwl3b3VsZCBjYXVzZSBhIHNlZ3YuCisKKzIwMDMtMDktMjggIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGFjLmM6IEluY2x1ZGUgImNpcGhlci5oIi4KKworMjAwMy0wOS0yNyAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogcm5kZWdkLmMgKGRvX3JlYWQpOiBSZXR1cm4gbnJlYWQgaW5zdGVhZCBvZiBuYnl0ZXM7IHRoYW5rcyB0bworCU1pY2hhZWwgQ2Flcnd5bi4KKworMjAwMy0wOS0wNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChfZ2NyeV9wa19hbGlhc2VkX2FsZ29fbmFtZSk6IE5ldy4KKwkqIGFjLmMgKGdjcnlfYWNfb3Blbik6IFVzZSBpdCBoZXJlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGQgc2VycGVudC5jCisKKzIwMDMtMDktMDIgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIHByaW1lZ2VuLmMgKGdjcnlfcHJpbWVfY2hlY2ssIGdjcnlfcHJpbWVfZ2VuZXJhdGUpOiBOZXcKKwlmdW5jdGlvbnMuCisJKHByaW1lX2dlbmVyYXRlX2ludGVybmFsKTogTmV3IGZ1bmN0aW9uLCBiYXNlZCBvbgorCV9nY3J5X2dlbmVyYXRlX2VsZ19wcmltZS4KKwkoX2djcnlfZ2VuZXJhdGVfZWxnX3ByaW1lKTogUmV3cml0dGVuIGFzIGEgd3JhcHBlciBmb3IKKwlwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbC4KKworMjAwMy0wOC0yOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2VuY3J5cHQpOiBEb24ndCBpbmNsdWRlIHRoZSBmbGFncyBsaXN0IGluIHRoZQorCXJldHVybiB2YWx1ZS4gIFRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZSBhbmQgYnJlYWtzIGFueSBwcm9ncmFtcworCXBhcnNpbmcgdGhlIG91dHB1dCBzdHJpY3RseSAoZS5nLiBjdXJyZW50IGdwZ3NtKS4KKwkoZ2NyeV9wa19lbmNyeXB0KTogSWYgYWxpYXNlcyBmb3IgdGhlIGFsZ29yaXRobSBuYW1lIGV4aXN0cywgdGFrZQorCXRoZSBmaXJzdCBvbmUgaW5zdGVhZCBvZiB0aGUgcmVndWxhciBuYW1lIHRvIGFkaGVyZSB0byBTUEtJCisJY29udmVudGlvbnMuCisJKGdjcnlfcGtfZ2Vua2V5KTogRGl0dG8uCisJKGdjcnlfcGtfc2lnbik6IERpdHRvLiBSZW1vdmVkIHVudXNlZCBLRVlfQUxHT19OQU1FLgorCisyMDAzLTA4LTE5ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYzogQWRkIHN1cHBvcnQgZm9yIFNlcnBlbnQKKwkqIHNlcnBlbnQuYzogTmV3IGZpbGUuCisKKzIwMDMtMDgtMTAgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiByc2EuYyAoX2djcnlfcnNhX2JsaW5kLCBfZ2NyeV9yc2FfdW5ibGluZCk6IERlY2xhcmUgc3RhdGljLgorCisyMDAzLTA4LTA5ICBUaW1vIFNjaHVseiAgPHR3b2FkYXlAZnJlYWttYWlsLmRlPgorCisJKiByYW5kb20uYyAoZ2V0Zm5jX2dhdGhlcl9yYW5kb20pOiBEb24ndCBjaGVjayBOQU1FX09GX0RFVl9SQU5ET00KKwl0d28gdGltZXMsIGJ1dCBhbHNvIHRoZSBOQU1FX09GX0RFVl9VUkFORE9NIGRldmljZS4KKworMjAwMy0wOC0wOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChzZXhwX3RvX2VuYyk6IEZpeGVkIGV4dHJhY3Rpb24gb2YgUy1FeHByZXNzaW9uOiBkbyBub3QKKwlmYWlsIGlmIG5vIGBmbGFncycgc3ViIFMtRXhwcmVzc2lvbiBpcyBmb3VuZC4KKworMjAwMy0wNy0yNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGdjcnlfbWRfbG9va3VwX2Z1bmNfb2lkKTogQWxsb3cgZm9yIGVtcHR5IE9JRCBsaXN0cy4KKworMjAwMy0wNy0yMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKGdjcnlfYWNfZGF0YV9jb25zdHJ1Y3QpOiBOZXcgYXJndW1lbnQ6IGluY2x1ZGVfZmxhZ3MsIG9ubHkKKwlpbmNsdWRlIGBmbGFncycgUy1leHByZXNzaW9uLCBpZiBpbmNsdWRlX2ZsYWdzIGlzIHRydWUuICBBZGp1c3QKKwljYWxsZXJzLiAgVGhhbmtzIGZvciB0cmlnZ2VyaW5nIGEgYnVnIGNhdXNlZCBieSBgZmxhZ3MnCisJc3ViLVMtZXhwcmVzc2lvbiB3aGVyZSB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgdG8gUmFsZiBTY2huZWlkZXIuCisKKzIwMDMtMDctMjEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19sb29rdXBfZnVuY19uYW1lKTogVXNlIG5ldyBtZW1iZXIgbmFtZQorCWBhbGlhc2VzJyBpbnN0ZWFkIG9mIGBzZXhwX25hbWVzJy4KKworCSogYWMuYyAoZ2NyeV9hY19rZXlfZGF0YV9nZXQpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9sb29rdXBfZnVuY19uYW1lKTogRml4IHJldHVybiB2YWx1ZS4KKworMjAwMy0wNy0yMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGJsb3dmaXNoLmM6IEFkanVzdGVkIGZvciBuZXcgZ2NyeV9jaXBoZXJfc3BlY190IHN0cnVjdHVyZS4KKwkqIGNhc3Q1LmM6IExpa2V3aXNlLgorCSogdHdvZmlzaC5jOiBMaWtld2lzZS4KKwkqIGFyY2ZvdXIuYzogTGlrZXdpc2UuCisJKiByaWpuZGFlbC5jIChyaWpuZGFlbF9vaWRzLCByaWpuZGFlbDE5Ml9vaWRzLCByaWpuZGFlbDI1Nl9vaWRzKToKKwlOZXcgdmFyaWFibGVzLCBhZGp1c3QgZm9yIG5ldyBnY3J5X2NpcGhlcl9zcGVjX3Qgc3RydWN0dXJlLgorCSogZGVzLmMgKG9pZHNfdHJpcGxlZGVzKTogTmV3IHZhcmlhYmxlLCBhZGp1c3QgZm9yIG5ldworCWdjcnlfY2lwaGVyX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIG1kLmMgKG9pZF90YWJsZSk6IFJlbW92ZWQuCisKKwkqIHRpZ2VyLmMgKG9pZF9zcGVjX3RpZ2VyKTogTmV3IHZhcmlhYmxlLgorCShkaWdlc3Rfc3BlY190aWdlcik6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIHNoYTUxMi5jIChvaWRfc3BlY19zaGE1MTIpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX3NoYTUxMik6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIHNoYTUxMi5jIChvaWRfc3BlY19zaGEzODQpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX3NoYTM4NCk6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIHNoYTI1Ni5jIChvaWRfc3BlY19zaGEyNTYpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX3NoYTI1Nik6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIHNoYTEuYyAob2lkX3NwZWNfc2hhMSk6IE5ldyB2YXJpYWJsZS4KKwkoZGlnZXN0X3NwZWNfc2hhMSk6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIHJtZDE2MC5jIChvaWRfc3BlY19ybWQxNjApOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX3JuZDE2MCk6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIG1kNS5jIChvaWRfc3BlY19tZDUpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX21kNSk6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIG1kNC5jIChvaWRfc3BlY19tZDQpOiBOZXcgdmFyaWFibGUuCisJKGRpZ2VzdF9zcGVjX21kNCk6IEFkanVzdGVkIGZvciBuZXcgZ3J5X21kX3NwZWNfdCBzdHJ1Y3R1cmUuCisKKwkqIGNyYy5jIChkaWdlc3Rfc3BlY19jcmMzMiwgZGlnZXN0X3NwZWNfY3JjMzJfcmZjMTUxMCwKKwlkaWdlc3Rfc3BlY19jcmMzMl9yZmMyNDQwKTogQWRqdXN0ZWQgZm9yIG5ldyBncnlfbWRfc3BlY190CisJc3RydWN0dXJlLgorCisyMDAzLTA3LTE5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbWQuYyAoZ2NyeV9tZF9sb29rdXBfZnVuY19vaWQpOiBOZXcgZnVuY3Rpb24uCisJKHNlYXJjaF9vaWQpOiBOZXcgZnVuY3Rpb24sIGNvcGllZCBmcm9tIGNpcGhlci5jLgorCShnY3J5X21kX21hcF9uYW1lKTogQWRqdXN0IGZvciBuZXcgc2VhcmNoX29pZF9pbnRlcmZhY2UuCisKKwkqIGNpcGhlci5jIChvaWRfdGFibGUpOiBSZW1vdmVkIHRhYmxlLgorCShnY3J5X2NpcGhlcl9sb29rdXBfZnVuY19vaWQpOiBOZXcgZnVuY3Rpb24uCisJKHNlYXJjaF9vaWQpOiBSZXdyaXR0ZW4gdG8gdXNlIHRoZSBtb2R1bGUgZnVuY3Rpb25zLgorCShnY3J5X2NpcGhlcl9tYXBfbmFtZSk6IEFkanVzdCBmb3IgbmV3IHNlYXJjaF9vaWQgaW50ZXJmYWNlLgorCShnY3J5X2NpcGhlcl9tb2RlX2Zyb21fb2lkKTogTGlrZXdpc2UuCisKKzIwMDMtMDctMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtZC5jIChnY3J5X21kX2hhc2hfYnVmZmVyKTogQ29udmVydCBFUlIgdG8gZ3BnX2Vycm9yX3QgaW4KKwlncGdfc3RyZXJyb3IuCisKKzIwMDMtMDctMTQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYyAoZ2NyeV9jaXBoZXJfbG9va3VwX2Z1bmNfbmFtZSk6IEFsc28gY2hlY2sgdGhlIGNpcGhlcgorCW5hbWUgYWxpYXNlcywgbm90IGp1c3QgdGhlIHByaW1hcnkgbmFtZS4KKwkoZ2NyeV9jaXBoZXJfbWFwX25hbWUpOiBSZW1vdmUga2x1ZGdlIGZvciBhbGlhc2luZyBSaWpuZGFlbCB0bworCUFFUy4KKworCSogYXJjZm91ci5jLCBibG93ZmlzaC5jLCBjYXN0NS5jLCBkZXMuYywgdHdvZmlzaC5jOiBBZGp1c3QgY2lwaGVyCisJc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmVzLgorCisJKiByaWpuZGFlbC5jIChyaWpuZGFlbF9uYW1lcywgcmlqbmRhZWwxOTJfbmFtZXMsCisJcmlqbmRhZWwyNTZfbmFtZXMpOiBOZXcgdmFyaWFibGVzLCB1c2UgdGhlbSBpbiB0aGUgY2lwaGVyCisJc3BlY2lmaWNhdGlvbnMuCisKKwkqIHJtZDE2MHRlc3QuYzogUmVtb3ZlZCBmaWxlLgorCisJKiBhYy5jLCBhcmNmb3VyLmMsIGJsb3dmaXNoLmMsIGNhc3Q1LmMsIGNpcGhlci5jLCBkZXMuYywgZHNhLmMsCisJZWxnYW1hbC5jLCBtZC5jLCBwdWJrZXkuYywgcmFuZG9tLmMsIHJpam5kYWVsLmMsIHJzYS5jLCB0d29maXNoLmM6CisJVXNlZCBnY3J5X2Vyciogd3JhcHBlcnMgZm9yIGxpYmdwZyBzeW1ib2xzLgorCisJKiBwcmltZWdlbi5jIChnZW5fcHJpbWUpOiBDb3JyZWN0IHRoZSBvcmRlciBhcmd1bWVudHMgdG8KKwlleHRyYV9jaGVjay4KKworMjAwMy0wNy0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmM6IFJlcGxhY2VkIGFsbCBwdWJsaWMgb2NjdXJlbmNlcyBvZiBncGdfZXJyb3JfdCB3aXRoCisJZ2NyeV9lcnJvcl90LgorCSogY2lwaGVyLmM6IExpa2V3aXNlLgorCSogbWQuYzogTGlrZXdpc2UuCisJKiBwdWJrZXkuYzogTGlrZXdpc2UuCisJKiByYW5kb20uYzogTGlrZXdpc2UuCisKKwkqIGNpcGhlci5jOiBBZGRlZCBzdXBwb3J0IGZvciBUV09GSVNIMTI4LgorCisyMDAzLTA3LTA4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMuYyAoZ2NyeV9hY19kYXRhX2NvcHlfaW50ZXJuYWwpOiBOZXcgZnVuY3Rpb24sIGJhc2VkIG9uCisJZ2NyeV9hY19kYXRhX2NvcHkuCisJKGdjcnlfYWNfZGF0YV9jb3B5KTogTWFkZSBwdWJsaWMsIHVzZSBnY3J5X2FjX2RhdGFfY29weV9pbnRlcm5hbC4KKwkoZ2NyeV9hY19rZXlfaW5pdCk6IFVzZSBnY3J5X2FjX2RhdGFfY29weV9pbnRlcm5hbC4KKworMjAwMy0wNy0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKGdjcnlfYWNfZGF0YV9zZXQpOiBPbmx5IHJlbGVhc2Ugb2xkIE1QSSB2YWx1ZSBpZiBpdCBpcworCWRpZmZlcmVudCBmcm9tIHRoZSBuZXcgdmFsdWUuICBCdWcgcmVwb3J0ZWQgYnkgU2ltb24gSm9zZWZzc29uCisJPGphc0BleHR1bmRvLmNvbT4uCisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2xpc3QpOiBOZXcgZnVuY3Rpb24uCisJKiBtZC5jIChnY3J5X21kX2xpc3QpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGFjLmMgKGdjcnlfYWNfa2V5X3BhaXJfZ2VuZXJhdGUpOiBGaXggY2FsY3VsYXRpb24gb2YgZm9ybWF0CisJc3RyaW5nIHNpemUuCisKKzIwMDMtMDctMDUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtZC5jOiBOYW1lZCBzdHJ1Y3Qgb2YgZGlnZXN0X3RhYmxlIGBkaWdlc3RfdGFibGVfZW50cnknLgorCShkaWdlc3RfdGFibGVfZW50cnkpOiBOZXcgbWVtYmVyOiBhbGdvcml0aG07IGZpbGxlZCBpbi4KKwkoZGlnZXN0X3RhYmxlX2VudHJ5KTogUmVtb3ZlZCB1bnVzZWQgbWVtYmVyOiBmbGFncy4KKwkoZ2NyeV9tZF9yZWdpc3Rlcik6IE5ldyBhcmd1bWVudDogYWxnb3JpdGhtX2lkLCBmaWxsZWQgaW4uCisJKGdjcnlfbWRfcmVnaXN0ZXJfZGVmYXVsdCk6IFVzZWQgYWxnb3JpdGhtIElEIGZyb20gbW9kdWxlCisJc3RydWN0dXJlLgorCShnY3J5X21kX21hcF9uYW1lKTogTGlrZXdpc2UuCisJKG1kX2VuYWJsZSk6IExpa2V3aXNlLgorCShtZF9yZWFkKTogTGlrZXdpc2UuCisJKGdjcnlfbWRfaW5mbyk6IExpa2V3aXNlLgorCisJKiBwdWJrZXkuYzogTmFtZWQgdHJ1Y3QgZm9yIHB1YmtleV90YWJsZSBgcHVia2V5X3RhYmxlX2VudHJ5Jy4KKwkocHVia2V5X3RhYmxlX2VudHJ5KTogTmV3IG1lbWJlcjogYWxnb3JpdGhtOyBmaWxsZWQgaW4uCisJKGdjcnlfcGtfcmVnaXN0ZXJfZGVmYXVsdCk6IFVzZWQgYWxnb3JpdGhtIElEIGZyb20gcHVia2V5X3RhYmxlLgorCShnY3J5X3BrX3JlZ2lzdGVyKTogTmV3IGFyZ3VtZW50OiBhbGdvcml0aG1faWQsIGZpbGxlZCBpbi4KKwkoZ2NyeV9wa19tYXBfbmFtZSk6IFVzZWQgYWxnb3JpdGhtIElEIGZyb20gbW9kdWxlIHN0cnVjdHVyZS4KKwkoZ2NyeV9wa19kZWNyeXB0KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfZW5jcnlwdCk6IExpa2V3aXNlLgorCShnY3J5X3BrX3ZlcmlmeSk6IExpa2V3aXNlLgorCShnY3J5X3BrX3NpZ24pOiBMaWtld2lzZS4KKwkoZ2NyeV9wa190ZXN0a2V5KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfZ2Vua2V5KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfZ2V0X25iaXRzKTogTGlrZXdpc2UuCisJKHNleHBfdG9fa2V5KTogUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGU6IGFsZ28uCisJKHNleHBfdG9fc2lnKTogTGlrZXdpc2UuCisKKwkqIGNpcGhlci5jOiBOYW1lZCBzdHJ1Y3QgZm9yIGNpcGhlcl90YWJsZSBgY2lwaGVyX3RhYmxlX2VudHJ5Jy4KKwkoY2lwaGVyX3RhYmxlX2VudHJ5KTogTmV3IG1lbWJlcjogYWxnb3JpdGhtOyBmaWxsZWQgaW4uCisJKGdjcnlfY2lwaGVyX3JlZ2lzdGVyX2RlZmF1bHQpOiBVc2VkIGFsZ29yaXRobSBJRCBmcm9tCisJY2lwaGVyX3RhYmxlLgorCShnY3J5X2NpcGhlcl9yZWdpc3Rlcik6IE5ldyBhcmd1bWVudDogYWxnb3JpdGhtX2lkLCBmaWxsZWQgaW4uCisJKGdjcnlfY2lwaGVyX21hcF9uYW1lKTogVXNlZCBhbGdvcml0aG0gSUQgZnJvbSBtb2R1bGUgc3RydWN0dXJlLgorCisJKiBhcmNmb3VyLmMgKGNpcGhlcl9zcGVjX2FyY2ZvdXIpOiBSZW1vdmVkIGFsZ29yaXRobSBJRC4KKwkqIGJsb3dmaXNoLmMgKGNpcGhlcl9zcGVjX2Jsb3dmaXNoKTogTGlrZXdpc2UuCisJKiBjYXN0NS5jIChjaXBoZXJfc3BlY19jYXN0NSk6IExpa2V3aXNlLgorCSogY3JjLmMgKGRpZ2VzdF9zcGVjX2NyYzMyKTogTGlrZXdpc2UuCisJKiBjcmMuYyAoZGlnZXN0X3NwZWNfY3JjMzJfcmZjMTUxMCk6IExpa2V3aXNlLgorCSogY3JjLmMgKGRpZ2VzdF9zcGVjX2NyYzMyX3JmYzI0NDApOiBMaWtld2lzZS4KKwkqIGRlcy5jIChjaXBoZXJfc3BlY19kZXMpOiBMaWtld2lzZS4KKwkqIGRlcy5jIChjaXBoZXJfc3BlY190cmlwbGVkZXMpOiBMaWtld2lzZS4KKwkqIGRzYS5jIChwdWJrZXlfc3BlY19kc2EpOiBMaWtld2lzZS4KKwkqIGVsZ2FtYWwuYyAocHVia2V5X3NwZWNfZWxnKTogTGlrZXdpc2UuCisJKiBtZDQuYyAoZGlnZXN0X3NwZWNfbWQ0KTogTGlrZXdpc2UuCisJKiBtZDUuYyAoZGlnZXN0X3NwZWNfbWQ1KTogTGlrZXdpc2UuCisJKiBhZXMuYyAoY2lwaGVyX3NwZWNfYWVzKTogTGlrZXdpc2UuCisJKiBhZXMuYyAoY2lwaGVyX3NwZWNfYWVzMTkyKTogTGlrZXdpc2UuCisJKiBhZXMuYyAoY2lwaGVyX3NwZWNfYWVzMjU2KTogTGlrZXdpc2UuCisJKiByc2EuYyAocHVia2V5X3NwZWNfcnNhKTogTGlrZXdpc2UuCisJKiBzaGExLmMgKGRpZ2VzdF9zcGVjX3NoYTEpOiBMaWtld2lzZS4KKwkqIHNoYTI1Ni5jIChkaWdlc3Rfc3BlY19zaGEyNTYpOiBMaWtld2lzZS4KKwkqIHNoYTUxMi5jIChkaWdlc3Rfc3BlY19zaGE1MTIpOiBMaWtld2lzZS4KKwkqIHRpZ2VyLmMgKGRpZ2VzdF9zcGVjX3RpZ2VyKTogTGlrZXdpc2UuCisJKiB0d29maXNoLmMgKGNpcGhlcl9zcGVjX3R3b2Zpc2gpOiBMaWtld2lzZS4KKwkqIHR3b2Zpc2guYyAoY2lwaGVyX3NwZWNfdHdvZmlzaDEyOCk6IExpa2V3aXNlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBGaXggbGlzdCBvZiBzb3VyY2UKKwlmaWxlczsgcmVwb3J0ZWQgYnkgU2ltb24gSm9zZWZzc29uIDxqYXNAZXh0dW5kby5jb20+LgorCisJKiBwdWJrZXkuYzogUmVwbGFjZWQgYWxsIG9jY3VyZW5jZXMgb2YgYGlkJyB3aXRoIGBhbGdvcml0aG0nLAorCXNpbmNlIGBpZCcgaXMgYSBrZXl3b3JkIGluIG9iai1jLgorCSogbWQuYzogTGlrZXdpc2UuCisJKiBjaXBoZXIuYzogTGlrZXdpc2UuCisKKwkqIGNyYy5jLCBtZDQuYywgbWQ1LmMsIHJtZDE2MC5jLCBzaGExLmMsIHNoYTI1Ni5jLCB0aWdlci5jOgorCVJlcGxhY2VkIGFsbCBvY2N1cmVuY2VzIG9mIGdjcnlfZGlnZXN0X3NwZWNfdCB3aXRoIGdjcnlfbWRfc3BlY190LgorCisJKiBkc2EuYywgcnNhLmMsIGVsZ2FtYWwuYzogUmVwbGFjZWQgYWxsIG9jY3VyZW5jZW5zIG9mCisJZ2NyeV9wdWJrZXlfc3BlY190IHdpdGggZ2NyeV9wa19zcGVjX3QuCisKKwkqIG1kLmM6IFJlcGxhY2VkIGFsbCBvY2N1cmVuY2VzIG9mIGdjcnlfZGlnZXN0X3NwZWNfdCB3aXRoCisJZ2NyeV9tZF9zcGVjX3QuCisJKGdjcnlfZGlnZXN0X3JlZ2lzdGVyX2RlZmF1bHQpOiBSZW5hbWVkIHRvIC4uLgorCShnY3J5X21kX3JlZ2lzdGVyX2RlZmF1bHQpOiAuLi4gdGhpczsgYWRqdXN0ZWQgY2FsbGVycy4KKwkoZ2NyeV9kaWdlc3RfbG9va3VwX2Z1bmNfbmFtZSk6IFJlbmFtZWQgdG8gLi4uCisJKGdjcnlfbWRfbG9va3VwX2Z1bmNfbmFtZSk6IC4uLiB0aGlzOyBhZGp1c3RlZCBjYWxsZXJzLgorCShnY3J5X2RpZ2VzdF9sb29rdXBfbmFtZSk6IFJlbmFtZWQgdG8gLi4uCisJKGdjcnlfbWRfbG9va3VwX25hbWUpOiAuLi4gdGhpczsgYWRqdXN0ZWQgY2FsbGVycy4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXIpOiBSZW5hbWVkIHRvIC4uLgorCShnY3J5X21kX3JlZ2lzdGVyKTogLi4uIHRoaXMuCisJKGdjcnlfZGlnZXN0X3VucmVnaXN0ZXIpOiBSZW5hbWVkIHRvIC4uLgorCShnY3J5X21kX3VucmVnaXN0ZXIpOiAuLi4gdGhpcy4KKworCSogcHVia2V5LmMgKGdjcnlfcHVia2V5X3JlZ2lzdGVyKTogUmVuYW1lZCB0byAuLi4KKwkoZ2NyeV9wa19yZWdpc3Rlcik6IC4uLiB0aGlzLgorCShnY3J5X3B1YmtleV91bnJlZ2lzdGVyKTogUmVuYW1lZCB0byAuLi4KKwkoZ2NyeV9wa191bnJlZ2lzdGVyKTogLi4uIHRoaXMuCisJUmVwbGFjZWQgYWxsIG9jY3VyZW5jZXMgb2YgZ2NyeV9wdWJrZXlfc3BlY190IHdpdGggZ2NyeV9wa19zcGVjX3QuCisJKGdjcnlfcHVia2V5X3JlZ2lzdGVyX2RlZmF1bHQpOiBSZW5hbWVkIHRvIC4uLgorCShnY3J5X3BrX3JlZ2lzdGVyX2RlZmF1bHQpOiAuLi4gdGhpczsgYWRqdXN0ZWQgY2FsbGVycy4KKwkoZ2NyeV9wdWJrZXlfbG9va3VwX2Z1bmNfbmFtZSk6IFJlbmFtZWQgdG8gLi4uCisJKGdjcnlfcGtfbG9va3VwX2Z1bmNfbmFtZSk6IC4uLiB0aGlzOyBhZGp1c3RlZCBjYWxsZXJzLgorCShnY3J5X3B1YmtleV9sb29rdXBfbmFtZSk6IFJlbmFtZWQgdG8gLi4uCisJKGdjcnlfcGtfbG9va3VwX25hbWUpOiAuLi4gdGhpczsgYWRqdXN0ZWQgY2FsbGVycy4KKworCSogbWQuYyAoZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IEZpeCBlcnJvciBjaGVja2luZy4gIFRoYW5rcyB0byBTaW1vbgorCUpvc2Vmc3NvbiA8amFzQGV4dHVuZGUuY29tPi4KKworMjAwMy0wNy0wNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9saXN0KTogTmV3IGZ1bmN0aW9uLgorCisyMDAzLTA3LTAxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNleHBfdG9fc2lnKTogQWNjZXB0IGEgYGZsYWdzJyBTLWV4cHJlc3Npb24gdG8gYmUgbW9yZQorCWNvbnNpc3RlbnQgd2l0aCBzZXhwX3RvX2VuYy4KKworMjAwMy0wNi0zMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJjaXBoZXJfbGFfU09VUkNFUyk6IEFkZGVkOiBhYy5jLgorCisJKiBwdWJrZXkuYyAoX2djcnlfcGtfbW9kdWxlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4KKwkoX2djcnlfcGtfbW9kdWxlX3JlbGVhc2UpOiBOZXcgZnVuY3Rpb24uCisKKzIwMDMtMDYtMjkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhYy5jOiBOZXcgZmlsZS4KKworMjAwMy0wNi0yNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGdjcnlfbWRfaGFzaF9idWZmZXIpOiBUcmlnZ2VyIEJVRyBjb3JyZWNseSB3aXRoIG5ldyBBUEkuCisKKzIwMDMtMDYtMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtZC5jIChnY3J5X21kX2lzX2VuYWJsZWQpOiBGaXhlZC4KKworMjAwMy0wNi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4pOiBOZXcuCisJKGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbik6IE5ldy4KKworMjAwMy0wNi0xOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFyY2ZvdXIuYywgY2lwaGVyLmMsIGJsb3dmaXNoLmMsIG1kLmMsIGNhc3Q1LmMsIHB1YmtleS5jLCBjcmMuYywKKwlkZXMuYywgZHNhLmMsIGVsZ2FtYWwuYywgbWQ0LmMsIG1kNS5jLCByYW5kb20uYywgcmlqbmRhZWwuYywKKwlybWQxNjAuYywgcnNhLmMsIHNoYTEuYywgc2hhMjU2LmMsIHNoYTUxMi5jLCB0aWdlci5jLCB0d29maXNoLmM6CisJUmVwbGFjZWQgb2xkZXIgdHlwZXMgR2NyeURpZ2VzdFNwZWMsIEdjcnlDaXBoZXJTcGVjIGFuZAorCUdjcnlQdWJrZXlTcGVjIHdpdGggbmV3ZXIgdHlwZXM6IGdjcnlfZGlnZXN0X3NwZWNfdCwKKwlnY3J5X2NpcGhlcl9zcGVjX3QgYW5kIGdjcnlfcHVia2V5X3NwZWNfdC4KKworCSogbWQuYyAoZ2NyeV9kaWdlc3RfaWRfbmV3KTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXIpOiBSZW1vdmVkIGNvZGUgZm9yIGdlbmVyYXRpbmcgYSBuZXcgbW9kdWxlCisJSUQuCisKKwkqIHB1YmtleS5jIChnY3J5X3B1YmtleV9pZF9uZXcpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCShnY3J5X3B1YmtleV9yZWdpc3Rlcik6IFJlbW92ZWQgY29kZSBmb3IgZ2VuZXJhdGluZyBhIG5ldyBtb2R1bGUKKwlJRC4KKworCSogY2lwaGVyLmMsIG1kLmMsIHB1YmtleS5jOiBSZXBsYWNlIG9sZCB0eXBlIEdjcnlNb2R1bGUgd2l0aCBuZXdlcgorCW9uZTogZ2NyeV9tb2R1bGVfdC4KKwkoZ2NyeV9jaXBoZXJfaWRfbmV3KTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfcmVnaXN0ZXIpOiBSZW1vdmVkIGNvZGUgZm9yIGdlbmVyYXRpbmcgYSBuZXcgbW9kdWxlCisJSUQuCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9yZWdpc3Rlcik6IEFkanVzdCBjYWxsIHRvCisJX2djcnlfbW9kdWxlX2FkZC4KKwkoZ2NyeV9jaXBoZXJfcmVnaXN0ZXJfZGVmYXVsdCk6IExpa2V3aXNlLgorCSogcHVia2V5LmMgKGdjcnlfcHVia2V5X3JlZ2lzdGVyX2RlZmF1bHQpOiBMaWtld2lzZS4KKwkoZ2NyeV9wdWJrZXlfcmVnaXN0ZXIpOiBMaWtld2lzZS4KKwkqIG1kLmMgKGdjcnlfZGlnZXN0X3JlZ2lzdGVyX2RlZmF1bHQpOiBMaWtld2lzZS4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXIpOiBMaWtld2lzZS4KKworCSogbWQuYyAoZ2NyeV9kaWdlc3RfbG9va3VwX2Z1bmNfaWQpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCShnY3J5X2RpZ2VzdF9sb29rdXBfaWQpOiBMaWtld2lzZS4KKwkoZ2NyeV9kaWdlc3RfaWRfbmV3KTogVXNlIF9nY3J5X21vZHVsZV9sb29rdXBfaWQgaW5zdGVhZCBvZgorCWdjcnlfZGlnZXN0X2xvb2t1cF9pZC4KKwkoZGlnZXN0X2FsZ29fdG9fc3RyaW5nKTogTGlrZXdpc2UuCisJKGNoZWNrX2RpZ2VzdF9hbGdvKTogTGlrZXdpc2UuCisJKG1kX2VuYWJsZSk6IExpa2V3aXNlLgorCShtZF9kaWdlc3RfbGVuZ3RoKTogTGlrZXdpc2UuCisJKG1kX2Fzbl9vaWQpOiBMaWtld2lzZS4KKworCSogcHVia2V5LmMgKGdjcnlfcHVia2V5X2xvb2t1cF9pZCk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKGdjcnlfcHVia2V5X2xvb2t1cF9mdW5jX2lkKTogTGlrZXdpc2UuCisJKGdjcnlfcHVia2V5X2lkX25ldyk6IFVzZSBfZ2NyeV9tb2R1bGVfbG9va3VwX2lkIGluc3RlYWQgb2YKKwlnY3J5X3B1YmtleV9pZF9uZXcuCisJKGdjcnlfcGtfYWxnb19uYW1lKTogTGlrZXdpc2UuCisJKGRpc2FibGVfcHVia2V5X2FsZ28pOiBMaWtld2lzZS4KKwkoY2hlY2tfcHVia2V5X2FsZ28pOiBMaWtld2lzZS4KKwkocHVia2V5X2dldF9ucGtleSk6IExpa2V3aXNlLgorCShwdWJrZXlfZ2V0X25za2V5KTogTGlrZXdpc2UuCisJKHB1YmtleV9nZXRfbnNpZyk6IExpa2V3aXNlLgorCShwdWJrZXlfZ2V0X25lbmMpOiBMaWtld2lzZS4KKwkocHVia2V5X2dlbmVyYXRlKTogTGlrZXdpc2UuCisJKHB1YmtleV9jaGVja19zZWNyZXRfa2V5KTogTGlrZXdpc2UuCisJKHB1YmtleV9lbmNyeXB0KTogTGlrZXdpc2UuCisJKHB1YmtleV9kZWNyeXB0KTogTGlrZXdpc2UuCisJKHB1YmtleV9zaWduKTogTGlrZXdpc2UuCisJKHB1YmtleV92ZXJpZnkpOiBMaWtld2lzZS4KKwkoZ2NyeV9wa19hbGdvX2luZm8pOiBMaWtld2lzZS4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX2xvb2t1cF9mdW5jX2lkKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfbG9va3VwX2lkKTogTGlrZXdpc2UuCisJKGNpcGhlcl9hbGdvX3RvX3N0cmluZyk6IHVzZSBfZ2NyeV9tb2R1bGVfbG9va3VwX2lkIGluc3RlYWQgb2YKKwlnY3J5X2NpcGhlcl9sb29rdXBfaWQuCisJKGRpc2FibGVfY2lwaGVyX2FsZ28pOiBMaWtld2lzZS4KKwkoY2hlY2tfY2lwaGVyX2FsZ28pOiBMaWtld2lzZS4KKwkoY2lwaGVyX2dldF9ibG9ja3NpemUpOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfb3Blbik6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9pZF9uZXcpOiBMaWtld2lzZS4KKworMjAwMy0wNi0xNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChHQ1JZUFRfTU9EVUxFUyk6IFNldCB0byBAR0NSWVBUX0NJUEhFUlNALAorCUBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNALCBAR0NSWVBUX0RJR0VTVFNAIGFuZCBAR0NSWVBUX1JBTkRPTUAuCisJKGxpYmNpcGhlcl9sYV9ERVBFTkRFTkNJRVMpOiBTZXQgdG8gJChHQ1JZUFRfTU9EVUxFUykuCisJKGxpYmNpcGhlcl9sYV9MSUJBREQpOiBMaWtld2lzZS4KKwkoQU1fQ0ZMQUdTKTogQWRkZWQ6IEBHUEdfRVJST1JfQ0ZMQUdTQC4KKwkoRVhUUkFfbGliY2lwaGVyX2xhX1NPVVJDRVMpOiBBZGRlZCBhbGwgY29uZGl0aW9uYWwgc291cmNlcy4KKworCSogbWQuYyAobWRfb3Blbik6IFVzZSBfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsIGluc3RlYWQgb2YKKwlmYXN0X3JhbmRvbV9wb2xsLgorCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBMaWtld2lzZS4KKworCSogcmFuZG9tLmggKGZhc3RfcmFuZG9tX3BvbGwpOiBSZW1vdmVkIG1hY3JvLgorCisJKiBibG93ZmlzaC5jLCBtZDQuYywgbWQ1LmMsIHJtZDE2MC5jLCBzaGExLmMsIHNoYTI1Ni5jLCBzaGE1MTIuYywKKwl0aWdlci5jOiBVc2UgQXV0b2NvbmYncyBXT1JEU19CSUdFTkRJQU4gaW5zdGVhZCBvZiBvdXIgb3duCisJQklHX0VORElBTl9IT1NULgorCisyMDAzLTA2LTE2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLmMgKGdldGZuY19nYXRoZXJfcmFuZG9tKTogRG8gbm90IHNwZWNpYWwtY2FzZQorCVVTRV9BTExfUkFORE9NX01PRFVMRVMsIG1ha2UgaXQgdGhlIGRlZmF1bHQuCisKKwkqIGRzYS5jOiBSZXBsYWNlIGxhc3Qgb2NjdXJlbmNlcyBvZiBvbGQgdHlwZSBuYW1lcyB3aXRoIG5ld2VyCisJbmFtZXMgKGkuZS4gcmVwbGFjZSBNUEkgd2l0aCBnY3J5X21waV90KS4KKwkqIGVsZ2FtYWwuYzogTGlrZXdpc2UuCisJKiBwcmltZWdlbi5jOiBMaWtld2lzZS4KKwkqIHB1YmtleS5jOiBMaWtld2lzZS4KKwkqIHJzYS5jOiBMaWtld2lzZS4KKworMjAwMy0wNi0xNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGRlcy5jIChkZXNfc2V0a2V5KTogQWRkIHNlbGZ0ZXN0IGNoZWNrLgorCSh0cmlwbGVkZXNfc2V0M2tleXMpOiBMaWtld2lzZS4KKwkoZG9fdHJpcGxlZGVzX3NldGtleSk6IFJlbW92ZSBzZWxmdGVzdCBjaGVjay4KKwkoZG9fZGVzX3NldGtleSk6IExpa2V3aXNlLgorCisyMDAzLTA2LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbWQuYyAoX2djcnlfbWRfaW5pdCk6IE5ldyBmdW5jdGlvbi4KKwkqIGNpcGhlci5jIChfZ2NyeV9jaXBoZXJfaW5pdCk6IE5ldyBmdW5jdGlvbi4KKwkqIHB1YmtleS5jIChfZ2NyeV9wa19pbml0KTogTmV3IGZ1bmN0aW9uLgorCisyMDAzLTA2LTEzICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQuYyAoZ2NyeV9tZF9nZXRfYWxnbyk6IFJldmVydGVkIHRvIG9sZCBBUEkuICBUaGlzIGlzIGEKKwljb252ZW5pZW5jZSBmdW5jdGlvbiBhbnl3YXkgYW5kIGVycm9yIGNoZWNraW5nIGlzIG5vdCBhcHByb3JpYXRlLgorCShnY3J5X21kX2lzX3NlY3VyZSk6IE5ldy4KKwkoZ2NyeV9tZF9pc19lbmFibGVkKTogTmV3LgorCisyMDAzLTA2LTEyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBNYWtlIHN1cmUgSEFORExFIGlzIHNldCB0byBOVUxMIG9uCisJZXJyb3IuCisKKzIwMDMtMDYtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtZC5jIChnY3J5X21kX29wZW4pOiBNYWtlIHN1cmUgSCByZWNlaXZlcyBlaXRoZXIgTlVMTCBvciBhbgorCXZhbGlkIGhhbmRsZS4KKwkoZ2NyeV9tZF9jb3B5KTogU3dhcHBlZCBhcmd1bWVudHMgc28gdGhhdCBpdCBpcyBtb3JlIGluIGxpb25lIHdpdGgKKwltZF9vcGVuIGFuZCBtb3N0IG90aGVyIEFQSSBmdWNudGlvbnMgbGlrZSBtZW1jcHkgKGRlc3RpbmF0aW9uCisJY29tZXMgZmlyc3QpLiAgTWFrZSBzdXJlIEhBTkRMRSBpcyBzZXQgdG8gTlVMTCBvbiBlcnJvci4KKworCSogcmlqbmRhZWwuYyAoZG9fZW5jcnlwdCk6IEhhY2sgdG8gZm9yY2UgY29ycmVjdCBhbGlnbm1lbnQuICBJdAorCXNlZW1zIG5vdCB0byBiZQlub3Qgc3VmZmljaWVudCwgdGhvdWdoLiAgV2Ugc2hvdWxkIHJld29yayB0aGlzCisJZnVjbnRpb25zIGFuZCByZW1vdmUgYWxsIHRoZXNlIHVnbHkgY2FzdHMuICBMZXQgdGhlIGNvbXBpbGVyCisJb3B0aW1pemUgb3IgaGF2ZSBhbiBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24uCisKKzIwMDMtMDYtMDkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlZCBydWxlcyBzZXJwZW50LCBzaW5jZSB0aGF0IGlzIG5vdCBjb21taXRlZAorCXlldC4KKworMjAwMy0wNi0wOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2VuY3J5cHQpOiBJbXByb3ZlIGNhbGN1bGF0aW9uIGZvciBzaXplIG9mIHRoZQorCWZvcm1hdCBzdHJpbmcuCisKKzIwMDMtMDYtMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhcmNmb3VyLmMsIGJpdGhlbHAuaCwgYmxvd2Zpc2guYywgY2FzdDUuYywgY2lwaGVyLmMsIGNyYy5jLAorCWRlcy5jLCBkc2EuYywgZWxnYW1hbC5jLCBtZDQuYywgbWQ1LmMsIG1kLmMsIHByaW1lZ2VuLmMsIHB1YmtleS5jLAorCXJhbmQtaW50ZXJuYWwuaCwgcmFuZG9tLmMsIHJhbmRvbS5oLCByaWpuZGFlbC5jLCBybWQxNjAuYywKKwlybWQxNjB0ZXN0LmMsIHJtZC5oLCBybmRlZ2VkLmMsIHJuZGxpbnV4LmMsIHJuZHVuaXguYywgcm5kdzMyLmMsCisJcnNhLmMsIHNoYTEuYywgc2hhMjU2LmMsIHNoYTUxMi5jLCB0aWdlci5jLCB0d29maXNoLmM6IEVkaXRlZCBhbGwKKwlwcmVwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgJyMnLgorCVRoaXMgaXMgbm90IHJlcXVpcmVkIGJ5IEM4OSwgYnV0IHRoZXJlIGFyZSBzb21lIGNvbXBpbGVycyBvdXQKKwl0aGVyZSB0aGF0IGRvbid0IGxpa2UgaXQuICBSZXBsYWNlZCBhbnkgb2NjdXJlbmNlIG9mIHRoZSBub3cKKwlkZXByZWNhdGVkIHR5cGUgbmFtZXMgd2l0aCB0aGUgbmV3IG9uZXMuCisKKzIwMDMtMDYtMDQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19lbmNyeXB0KTogQ29uc3RydWN0IGFuIGFyZ19saXN0IGFuZCB1c2UKKwlnY3J5X3NleHBfYnVpbGRfYXJyYXkgaW5zdGVhZCBvZiBnY3J5X3NleHBfYnVpbGQuCisJKGdjcnlfcGtfc2lnbik6IExpa2V3aXNlLgorCShnY3J5X3BrX2dlbmtleSk6IExpa2V3aXNlLgorCisyMDAzLTA2LTAxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZHNhLmMgKF9nY3J5X2RzYV9nZW5lcmF0ZSk6IERvIG5vdCBjaGVjayB3ZXRoZXIgdGhlIGFsZ29yaXRobSBJRAorCWRvZXMgaW5kZWVkIGJlbG9uZyB0byBEU0EuCisJKF9nY3J5X2RzYV9zaWduKTogTGlrZXdpc2UuCisJKF9nY3J5X2RzYV92ZXJpZnkpOiBMaWtld2lzZS4KKwkoX2djcnlfZHNhX2dldF9uYml0cyk6IExpa2V3aXNlLgorCisJKiBlbGdhbWFsLmMgKF9nY3J5X2VsZ19jaGVja19zZWNyZXRfa2V5KTogRG8gbm90IGNoZWNrIHdldGhlciB0aGUKKwlhbGdvcml0aG0gSUQgZG9lcyBpbmRlZWQgYmVsb25nIHRvIEVsR2FtYWwuCisJKF9nY3J5X2VsZ19lbmNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X2VsZ19kZWNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X2VsZ19zaWduKTogTGlrZXdpc2UuCisJKF9nY3J5X2VsZ192ZXJpZnkpOiBMaWtld2lzZS4KKwkoX2djcnlfZWxnX2dldF9uYml0cyk6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfZ2VuZXJhdGUpOiBMaWtld2lzZS4KKworCSogcnNhLmMgKF9nY3J5X3JzYV9nZW5lcmF0ZSk6IERvIG5vdCBjaGVjayB3ZXRoZXIgdGhlIGFsZ29yaXRobSBJRAorCWRvZXMgaW5kZWVkIGJlbG9uZyB0byBSU0EuCisJKF9nY3J5X3JzYV9lbmNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9kZWNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9zaWduKTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV92ZXJpZnkpOiBMaWtld2lzZS4KKwkoX2djcnlfcnNhX2dldF9uYml0cyk6IExpa2V3aXNlLgorCisyMDAzLTA1LTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbWQuYyAobWRfZ2V0X2FsZ28pOiBSZXR1cm4gemVybyBpbiBjYXNlIHRvIGFsZ29yaXRobSBpcyBlbmFibGVkLgorCisJKiBtZC5jIChnY3J5X21kX2luZm8pOiBBZGp1c3RlZCBmb3IgbmV3IG5vLWVycm5vLUFQSS4KKwkobWRfZmluYWwpOiBMaWtld2lzZS4KKwkoZ2NyeV9tZF9nZXRfYWxnbyk6IExpa2V3aXNlLgorCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBMaWtld2lzZS4KKwkoZ2NyeV9wa19jdGwpOiBMaWtld2lzZS4KKwkoZ2NyeV9wa19hbGdvX2luZm8pOiBMaWtld2lzZS4KKwkqIGRlcy5jIChzZWxmdGVzdCk6IExpa2V3aXNlLgorCisyMDAzLTA1LTI5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbWQuYyAobWRfZW5hYmxlKTogRG8gbm90IGZvcmdldCB0byByZWxlYXNlIG1vZHVsZSBvbiBlcnJvci4KKwkoZ2NyeV9tZF9vcGVuKTogQWRqdXN0ZWQgZm9yIG5ldyBuby1lcnJuby1BUEkuCisJKG1kX29wZW4pOiBMaWtld2lzZS4KKwkobWRfY29weSk6IExpa2V3aXNlLgorCShnY3J5X21kX2NvcHkpOiBMaWtld2lzZS4KKwkoZ2NyeV9tZF9zZXRrZXkpOiBMaWtld2lzZS4KKwkoZ2NyeV9tZF9hbGdvX2luZm8pOiBMaWtld2lzZS4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBBZGp1c3RlZCBmb3IgbmV3IG5vLWVycm5vLUFQSSBhbmQKKwlhbHNvIGZpeGVkIGEgbG9ja2luZyBidWcuCisJKGdjcnlfY2lwaGVyX2VuY3J5cHQpOiBBZGp1c3RlZCBmb3IgbmV3IG5vLWVycm5vLUFQSS4KKwkoZ2NyeV9jaXBoZXJfZGVjcnlwdCk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9jdGwpOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfaW5mbyk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9hbGdvX2luZm8pOiBMaWtld2lzZS4KKworMjAwMy0wNS0yOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIG1kLmMgKG1kX2VuYWJsZSk6IEFkanVzdGVkIGZvciBsaWJncGctZXJyb3IuCisJKGdjcnlfbWRfZW5hYmxlKTogTGlrZXdpc2UuCisJKGdjcnlfZGlnZXN0X3JlZ2lzdGVyX2RlZmF1bHQpOiBMaWtld2lzZS4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXIpOiBMaWtld2lzZS4KKwkoY2hlY2tfZGlnZXN0X2FsZ28pOiBMaWtld2lzZS4KKwkocHJlcGFyZV9tYWNwYWRzKTogTGlrZXdpc2UuCisJKGdjcnlfbWRfc2V0a2V5KTogTGlrZXdpc2UuCisJKGdjcnlfbWRfY3RsKTogTGlrZXdpc2UuCisJKGdjcnlfbWRfZ2V0KTogTGlrZXdpc2UuCisJKGdjcnlfbWRfYWxnb19pbmZvKTogTGlrZXdpc2UuCisJKGdjcnlfbWRfaW5mbyk6IExpa2V3aXNlLgorCSogZHNhLmMgKF9nY3J5X2RzYV9nZW5lcmF0ZSk6IExpa2V3aXNlLgorCShfZ2NyeV9kc2FfY2hlY2tfc2VjcmV0X2tleSk6IExpa2V3aXNlLgorCShfZ2NyeV9kc2Ffc2lnbik6IExpa2V3aWUuCisJKF9nY3J5X2RzYV92ZXJpZnkpOiBMaWtld2lzZS4KKwkqIHR3b2Zpc2guYyAoZG9fdHdvZmlzaF9zZXRrZXkpOiBMaWtld2lzZS4KKwkodHdvZmlzaF9zZXRrZXkpOiBMaWtld2lzZS4KKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9yZWdpc3Rlcik6IExpa2V3aXNlLgorCisyMDAzLTA1LTI1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcmlqbmRhZWwuYyAoZG9fc2V0a2V5KTogQWRqdXN0ZWQgZm9yIGxpYmdwZy1lcnJvci4KKwkocmlqbmRhZWxfc2V0a2V5KTogTGlrZXdpc2UuCisJKiByYW5kb20uYyAoZ2NyeV9yYW5kb21fYWRkX2J5dGVzKTogTGlrZXdpc2UuCisJKiBlbGdhbWFsLmMgKF9nY3J5X2VsZ19nZW5lcmF0ZSk6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfY2hlY2tfc2VjcmV0X2tleSk6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfZW5jcnlwdCk6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfZGVjcnlwdCk6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfc2lnbik6IExpa2V3aXNlLgorCShfZ2NyeV9lbGdfdmVyaWZ5KTogTGlrZXdpc2UuCisJKiByc2EuYyAoX2djcnlfcnNhX2dlbmVyYXRlKTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9jaGVja19zZWNyZXRfa2V5KTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9lbmNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9kZWNyeXB0KTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV9zaWduKTogTGlrZXdpc2UuCisJKF9nY3J5X3JzYV92ZXJpZnkpOiBMaWtld2lzZS4KKwkqIHB1YmtleS5jIChkdW1teV9nZW5lcmF0ZSwgZHVtbXlfY2hlY2tfc2VjcmV0X2tleSwgZHVtbXlfZW5jcnlwdCwKKwlkdW1teV9kZWNyeXB0LCBkdW1teV9zaWduLCBkdW1teV92ZXJpZnkpOiBMaWtld2lzZS4KKwkoZ2NyeV9wdWJrZXlfcmVnaXN0ZXIpOiBMaWtld2lzZS4KKwkoY2hlY2tfcHVia2V5X2FsZ28pOiBMaWtld2lzZS4KKwkocHVia2V5X2dlbmVyYXRlKTogTGlrZXdpc2UuCisJKHB1YmtleV9jaGVja19zZWNyZXRfa2V5KTogTGlrZXdpc2UuCisJKHB1YmtleV9lbmNyeXB0KTogTGlrZXdpc2UuCisJKHB1YmtleV9kZWNyeXB0KTogTGlrZXdpc2UuCisJKHB1YmtleV9zaWduKTogTGlrZXdpc2UuCisJKHB1YmtleV92ZXJpZnkpOiBMaWtld2lzZS4KKwkoc2V4cF9lbGVtZW50c19leHRyYWN0KTogTGlrZXdpc2UuCisJKHNleHBfdG9fa2V5KTogTGlrZXdpc2UuCisJKHNleHBfdG9fc2lnKTogTGlrZXdpc2UuCisJKHNleHBfdG9fZW5jKTogTGlrZXdpc2UuCisJKHNleHBfZGF0YV90b19tcGkpOiBMaWtld2lzZS4KKwkoZ2NyeV9wa19lbmNyeXB0KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfZGVjcnlwdCk6IExpa2V3aXNlLgorCShnY3J5X3BrX3NpZ24pOiBMaWtld2lzZS4KKwkoZ2NyeV9wa192ZXJpZnkpOiBMaWtld2lzZS4KKwkoZ2NyeV9wa190ZXN0a2V5KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfZ2Vua2V5KTogTGlrZXdpc2UuCisJKGdjcnlfcGtfY3RsKTogTGlrZXdpc2UuCisJKiBjaXBoZXIuYyAoZHVtbXlfc2V0a2V5KTogTGlrZXdpc2UuCisJKGNoZWNrX2NpcGhlcl9hbGdvKTogTGlrZXdpc2UuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBMaWtld2lzZS4KKwkoY2lwaGVyX3NldGtleSk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9jdGwpOiBMaWtld2lzZS4KKwkoY2lwaGVyX2VuY3J5cHQpOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfZW5jcnlwdCk6IExpa2V3aXNlLgorCShjaXBoZXJfZGVjcnlwdCk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9kZWNyeXB0KTogTGlrZXdpc2UuCisJKGdjcnlfY2lwaGVyX2luZm8pOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfYWxnb19pbmZvKTogTGlrZXdpc2UuCisJKiBjYXN0NS5jIChjYXN0X3NldGtleSk6IExpa2V3aXNlLgorCShkb19jYXN0X3NldGtleSk6IExpa2V3aXNlLgorCSogYXJjZm91ci5jIChhcmNmb3VyX3NldGtleSk6IExpa2V3aXNlLgorCShkb19hcmNmb3VyX3NldGtleSk6IExpa2V3aXNlLgorCSogYmxvd2Zpc2guYyAoZG9fYmZfc2V0a2V5KTogTGlrZXdpc2UuCisJKGJmX3NldGtleSk6IExpa2V3aXNlLgorCSogZGVzLmMgKGRvX2Rlc19zZXRrZXkpOiBMaWtld2lzZS4KKwkoZG9fdHJpcGxlZGVzX3NldGtleSk6IExpa2V3aXNlLgorCisyMDAzLTA1LTIyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogdGlnZXIuYzogTWVyZ2VkIGNvZGUgdXNzaW5nIHRoZSBVNjRfQyBtYWNybyBmcm9tIEdudVBHLgorCisJKiBzaGE1MTIuYzogTGlrZXdpc2UuCisKKzIwMDMtMDUtMTcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBGaXggdHlwZTogYWNxdWlyZSBhIGxvY2ssIGluc3RlYWQgb2YKKwlyZWxlYXNpbmcgaXQuCisKKzIwMDMtMDUtMTEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa190ZXN0a2V5KTogQ2FsbCBSRUdJU1RFUl9ERUZBVUxUX0NJUEhFUlMuCisJKGdjcnlfcGtfY3RsKTogTGlrZXdpc2UuCisKKzIwMDMtMDQtMjcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBSZWxlYXNlIHNleHAgYWZ0ZXIgZXh0cmFjdGVkIGRhdGEgaGFzCisJYmVlbiB1c2VkLgorCisJKiBtZC5jIChnY3J5X21kX2dldF9hbGdvX2RsZW4pOiBTaW1wbGlmaWVkLCBzaW1wbHkgY2FsbAorCW1kX2RpZ2VzdF9sZW5ndGggdG8gZG8gdGhlIGpvYi4KKworCSogZGVzLmMgKGRvX2Rlc19zZXRrZXkpOiBDaGVjayBmb3Igc2VsZnRlc3QgZmFpbHVyZSBub3Qgb25seQorCWR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkoZG9fdHJpcGxlZGVzX3NldGtleSk6IEluY2x1ZGUgY2hlY2sgZm9yIHNlbGZ0ZXN0IGZhaWx1cmUuCisKKwkqIHB1YmtleS5jIChnY3J5X3B1YmtleV9yZWdpc3Rlcl9kZWZhdWx0KTogTmV3IG1hY3JvCisJYHB1YmtleV91c2VfZHVtbXknLCB1c2UgaXQuCisKKwkqIGVsZ2FtYWwuYyAoZWxnX25hbWVzKTogTmV3IHZhcmlhYmxlLgorCShwdWJrZXlfc3BlY19lbGcpOiBJbmNsdWRlIGVsZ19uYW1lcy4KKworCSogZHNhLmMgKGRzYV9uYW1lcyk6IE5ldyB2YXJpYWJsZS4KKwkocHVia2V5X3NwZWNfZHNhKTogSW5jbHVkZSBkc2FfbmFtZXMuCisKKwkqIHJzYS5jIChyc2FfbmFtZXMpOiBOZXcgdmFyaWFibGUuCisJKHB1YmtleV9zcGVjX3JzYSk6IEluY2x1ZGUgcnNhX25hbWVzLgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wdWJrZXlfbG9va3VwX2Z1bmNfbmFtZSk6IENvbXBhcmUgbmFtZSBhbHNvIHdpdGgKKwl0aGUgbmFtZXMgbGlzdGVkIGluIGBzZXhwX25hbWVzJy4KKworMjAwMy0wNC0yNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHB1YmtleS5jIChzZXhwX3RvX2tleSk6IE5ldyB2YXJpYWJsZXM6IG1vZHVsZSwgcHVia2V5LiAgQWRqdXN0ZWQKKwl0byBuZXcgbW9kdWxlIGludGVyZmFjZS4KKwkoc2V4cF90b19rZXkpOiBDaGFuZ2VuZCB0eXBlIG9mIGFyZ3VtZW50IGByZXRhbGdvJyBmcm9tIGBpbnQgKicgdG8KKwlgR2NyeU1vZHVsZSAqKicuICBBZGp1c3RlZCBhbGwgY2FsbGVycy4gIFJlbW92ZWQgYXJndW1lbnQ6CisJcl9hbGdvdGJsaWR4LgorCShzZXhwX3RvX3NpZyk6IENoYW5nZW5kIHR5cGUgb2YgYXJndW1lbnQgYHJldGFsZ28nIGZyb20gYGludCAqJyB0bworCWBHY3J5TW9kdWxlICoqJy4gIEFkanVzdGVkIGFsbCBjYWxsZXJzLgorCShzZXhwX3RvX2VuYyk6IExpa2V3aXNlLgorCisJKHB1YmtleV9nZXRfbnBrZXksIHB1YmtleV9nZXRfbnNrZXksIHB1YmtleV9nZXRfbnNpZywKKwlwdWJrZXlfZ2V0X25lbmMpOiBVc2Ugc3RybGVuIHRvIGZpbmQgb3V0IHRoZSBudW1iZXIuCisKKwkqIHJzYS5jOiBBZGp1c3QgcHVia2V5X3NwZWNfcnNhIHRvIG5ldyBpbnRlcm5hbCBpbnRlcmZhY2UuCisJKiBkc2EuYzogTGlrZXdpc2UuCisJKiBlbGdhbWFsLmM6IExpa2V3aXNlLgorCisyMDAzLTA0LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNleHBfZWxlbWVudHNfZXh0cmFjdCk6IE5ldyBmdW5jdGlvbi4KKwkqIHB1YmtleS5jIChzZXhwX3RvX2tleSk6IFJlbW92ZWQgdmFyaWFibGUgYGlkeCcsIGFkZGVkIGBlcnInLCB1c2UKKwlzZXhwX2VsZW1lbnRzX2V4dHJhY3QuCisJKHNleHBfdG9fc2lnKTogTGlrZXdpc2UuCisJKHNleHBfdG9fZW5jKTogTGlrZXdpc2UuCisKKwkqIHB1YmtleS5jOiBUZXJtaW5hdGUgbGlzdCBjb3JyZWN0bHkuCisJKiBtZC5jOiBJbmNsdWRlIHNoYTUxMi9zaGEzODQgaW4gZGlnZXN0X3RhYmxlLgorCisyMDAzLTA0LTE2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEluY2x1ZGUgc3VwcG9ydCBmb3Igc2hhNTEyLmMuCisKKwkqIHNoYTUxMi5jOiBOZXcgZmlsZSwgbWVyZ2VkIGZyb20gR251UEcsIHdpdGggZmV3IG1vZGlmaWNhdGlvbnMKKwlmb3IgbGliZ2NyeXB0LgorCisJKiByYW5kLWludGVybmFsLmg6IFJlbW92ZWQgZGVjbGFyYXRpb25zIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbnMuCisKKwkqIG1kLmMgKG1kX2NvcHkpOiBDYWxsIF9nY3J5X21vZHVsZV91c2UgZm9yIGluY3JlbWVudGluZyB0aGUgdXNhZ2UKKwljb3VudGVyIG9mIHRoZSBkaWdlc3QgbW9kdWxlcy4KKworCSogcnNhLmM6IERvIG5vdCBpbmNsdWRlICJyc2EuaCIuCisJKiBkc2EuYzogRG8gbm90IGluY2x1ZGUgImRzYS5oIi4KKwkqIGVsZ2FtYWwuYzogRG8gbm90IGluY2x1ZGUgImVsZ2FtYWwuaCIuCisJKiBkZXMuYzogRG8gbm90IGluY2x1ZGUgImRlcy5oIi4KKwkqIGNhc3Q1LmM6IERvIG5vdCBpbmNsdWRlICJjYXN0NS5oIi4KKwkqIGJsb3dmaXNoLmM6IERvIG5vdCBpbmNsdWRlICJibG93ZmlzaC5oIi4KKwkqIGFyY2ZvdXIuYzogRG8gbm90IGluY2x1ZGUgImFyY2ZvdXIuaCIuCisKKwkqIE1ha2VmaWxlLmFtIChsaWJjaXBoZXJfbGFfREVQRU5ERU5DSUVTKTogUmVtb3ZlZC4KKwkobGliY2lwaGVyX2xhX0xJQkFERCk6IFJlbW92ZWQuCisJVXNlIEF1dG9tYWtlIGNvbmRpdGlvbmFscyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCisKKzIwMDMtMDQtMTMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYyAoZ2NyeV9jaXBoZXJfb3Blbik6IENhbGwgUkVHSVNURVJfREVGQVVMVF9DSVBIRVJTLgorCisJKiBtZC5jIChnY3J5X21kX2xpc3QpOiBOZXcgbWVtYmVyOiBtb2R1bGUuCisJKG1kX2VuYWJsZSk6IE5ldyB2YXJpYWJsZTogbW9kdWxlLCBjaGFuZ2VkIHVzZSBvZiBtb2R1bGUgYW5kCisJZGlnZXN0LgorCShtZF9lbmFibGUpOiBJbml0aWFsaXplIG1lbWJlcjogbW9kdWxlLgorCShtZF9jbG9zZSk6IENhbGwgX2djcnlfbW9kdWxlX3JlbGVhc2UuCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9vcGVuKTogTmV3IHZhcmlhYmxlOiBtb2R1bGUsIGNoYW5nZWQgdXNlIG9mCisJbW9kdWxlIGFuZCBjaXBoZXIuCisJKHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUpOiBOZXcgbWVtYmVyOiBtb2R1bGUuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBJbml0aWFsaXplIG1lbWJlcjogbW9kdWxlLgorCShnY3J5X2NpcGhlcl9jbG9zZSk6IENhbGwgX2djcnlfbW9kdWxlX3JlbGVhc2UuCisKKzIwMDMtMDQtMDkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuYzogSW5jbHVkZSAiYXRoLmgiLgorCSogbWQuYzogTGlrZXdpc2UuCisJKiBwdWJrZXkuYzogTGlrZXdpc2UuCisKKwkqIGNpcGhlci5jIChjaXBoZXJzX3JlZ2lzdGVyZWRfbG9jayk6IE5ldyB2YXJpYWJsZS4KKwkqIG1kLmMgKGRpZ2VzdHNfcmVnaXN0ZXJlZF9sb2NrKTogTmV3IHZhcmlhYmxlLgorCSogcHVia2V5LmMgKHB1YmtleXNfcmVnaXN0ZXJlZF9sb2NrKTogTmV3IHZhcmlhYmxlLgorCisJKiBybmRsaW51eC5jIChnbnVwZ2V4dF92ZXJzaW9uLCBmdW5jX3RhYmxlKTogUmVtb3ZlZCBkZWZpbml0aW9ucy4KKwkoZ251cGdleHRfZW51bV9mdW5jKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoX2djcnlfcm5kbGludXhfY29uc3RydWN0b3IpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiBybmRlZ2QuYyAoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3JuZGVnZF9jb25zdHJ1Y3Rvcik6IFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIHJuZHVuaXguYyAoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3JuZHVuaXhfY29uc3RydWN0b3IpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiBybmR3MzIuYyAoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3JuZHczMl9jb25zdHJ1Y3Rvcik6IFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIHJuZGVnZC5jIChybmRlZ2RfY29ubmVjdF9zb2NrZXQpOiBTaW1wbGlmeSBjb2RlIGZvciBjcmVhdGluZyB0aGUKKwllZ2Qgc29ja2V0IGFkZHJlc3MuCisJKHJuZGVnZF9jb25uZWN0X3NvY2tldCk6IENhbGwgbG9nX2ZhdGFsIHVzZSBpbnN0ZWFkIG9mCisJZzEwX2xvZ19mYXRhbC4KKwkoZWdkX2dhdGhlcl9yYW5kb20pOiBSZW5hbWVkIHRvIC4uLgorCShybmRlZ2RfZ2F0aGVyX3JhbmRvbSk6IC4uLiBoZXJlLgorCisyMDAzLTA0LTA4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcm5kbGludXguYzogRG8gbm90IGluY2x1ZGUgImR5bmxvYWQuaCIuCisJKiBybmR1bml4LmM6IExpa2V3aXNlLgorCSogcm5kdzMyLmM6IExpa2V3aXNlLgorCisJKiBybmRlZ2QuYyAocm5kZWdkX2Nvbm5lY3Rfc29ja2V0KTogRmFjdG9yZWQgb3V0IGZyb20gLi4uCisJKGVnZF9nYXRoZXJfcmFuZG9tKTogaGVyZTsgY2FsbCBpdC4KKwkoZWdkX3NvY2tldCk6IE5ldyB2YXJpYWJsZS4KKwkoZWdkX2dhdGhlcl9yYW5kb20pOiBJbml0aWFsaXplIGZkIHdpdGggZWdkX3NvY2tldCwgZG8gbm90IGRlY2xhcmUKKwlmZCBzdGF0aWMuCisJKGRvX3JlYWQpOiBNZXJnZWQgZmV3IGNoYW5nZXMgZnJvbSBHbnVQRy4gRklYTUUgLSBub3QgZmluaXNoZWQ/CisJRG8gbm90IGluY2x1ZGUgImR5bmxvYWQuaCIuCisKKwkqIHJuZHczMi5jIChnYXRoZXJfcmFuZG9tKTogUmVuYW1lZCB0byBybmR3MzJfZ2F0aGVyX3JhbmRvbSwgZG8KKwlub3QgZGVjbGFyZSBzdGF0aWMuCisJKGdhdGhlcl9yYW5kb21fZmFzdCk6IFJlbmFtZWQgdG8gcm5kdzMyX2dhdGhlcl9yYW5kb21fZmFzdCwgZG8gbm90CisJZGVjbGFyZSBzdGF0aWMuCisKKwkqIHJuZHVuaXguYyAoZ2F0aGVyX3JhbmRvbSk6IFJlbmFtZWQgdG8gcm5kdW5peF9nYXRoZXJfcmFuZG9tLCBkbworCW5vdCBkZWNsYXJlIHN0YXRpYy4KKwkqIHJuZGVnZC5jIChnYXRoZXJfcmFuZG9tKTogUmVuYW1lZCB0byBybmRlZ2RfZ2F0aGVyX3JhbmRvbSwgZG8KKwlub3QgZGVjbGFyZSBzdGF0aWMuCisJKiBybmRsaW51eC5jIChnYXRoZXJfcmFuZG9tKTogUmVuYW1lZCB0byBybmRsaW51eF9nYXRoZXJfcmFuZG9tLAorCWRvIG5vdCBkZWNsYXJlIHN0YXRpYy4KKworMjAwMy0wNC0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJjaXBoZXJfbGFfU09VUkNFUyk6IFJlbW92ZWQgY29uc3RydWN0LmMuCisJKGxpYmNpcGhlcl9sYV9TT1VSQ0VTKTogQWRkZWQgc2hhMS5jLCBzaGEyNTYuYywgcm1kMTYwLmMsIG1kNC5jLAorCW1kNS5jLCB0aWdlci5jIGFuZCBjcmMuYworCShFWFRSQV9QUk9HUkFNUyk6IFJlbW92ZWQgc2hhMSwgc2hhMjU2LCBybWQxNjAsIG1kNCwgbWQ1LCB0aWdlcgorCWFuZCBjcmMuICBSZW1vdmVkIGRlZmluaXRpb25zOiBFWFRSQV9tZDRfU09VUkNFUywKKwlFWFRSQV9tZDVfU09VUkNFUywgRVhUUkFfcm1kMTYwX1NPVVJDRVMsIEVYVFJBX3NoYTFfU09VUkNFUywKKwlFWFRSQV9zaGEyNTZfU09VUkNFUywgRVhUUkFfdGlnZXJfU09VUkNFUyBhbmQgRVhUUkFfY3JjX1NPVVJDRVMsCisJQlVJTFRfU09VUkNFUywgRElTVENMRUFORklMRVMuCisKKwkqIHB1YmtleS5jOiBEbyBub3QgaW5jbHVkZSAiZWxnYW1hbC5oIiwgImRzYS5oIiBhbmQgInJzYS5oIi4KKworCSogTWFrZWZpbGUuYW0gKGxpYmNpcGhlcl9sYV9TT1VSQ0VTKTogUmVtb3ZlZCByc2EuaCwgZWxnYW1hbC5oLAorCWRzYS5oLCBkZXMuaCwgY2FzdDUuaCwgYXJjZm91ci5oIGFuZCBibG93ZmlzaC5oLgorCisJKiByc2EuaDogUmVtb3ZlZCBmaWxlLgorCSogZWxnYW1hbC5oOiBSZW1vdmVkIGZpbGUuCisJKiBkc2EuaDogUmVtb3ZlZCBmaWxlLgorCSogZGVzLmg6IFJlbW92ZWQgZmlsZS4KKwkqIGNhc3Q1Lmg6IFJlbW92ZWQgZmlsZS4KKwkqIGFyY2ZvdXIuaDogUmVtb3ZlZCBmaWxlLgorCSogYmxvd2Zpc2guaDogUmVtb3ZlZCBmaWxlLgorCisJKiBNYWtlZmlsZS5hbSAobGliY2lwaGVyX2xhX1NPVVJDRVMpOiBSZW1vdmVkIGR5bmxvYWQuYyBhbmQKKwlkeW5sb2FkLmguCisKKwkqIHJzYS5jIChwdWJrZXlfc3BlY19yc2EpOiBOZXcgdmFyaWFibGUuCisJKiBkc2EuYyAocHVia2V5X3NwZWNfcnNhKTogTmV3IHZhcmlhYmxlLgorCSogZWxnYW1hbC5jIChwdWJrZXlfc3BlY19lbGcpOiBOZXcgdmFyaWFibGUuCisKKwkqIHJzYS5jIChfZ2NyeV9yc2FfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCSogZWxnYW1hbC5jIChfZ2NyeV9lbGdfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCSogZHNhLmMgKF9nY3J5X2RzYV9nZXRfaW5mbyk6IFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIHRpZ2VyLmMgKHRpZ2VyX2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3RpZ2VyX2NvbnN0cnVjdG9yKTogUmVtb3ZlZCBmdW5jdGlvbi4KKworCSogc2hhMS5jIChzaGExX2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3NoYTFfY29uc3RydWN0b3IpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiBzaGEyNTYuYyAoc2hhMjU2X2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X3NoYTI1Nl9jb25zdHJ1Y3Rvcik6IFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIHJtZDE2MC5jIChybWQxNjBfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCShnbnVwZ2V4dF92ZXJzaW9uLCBmdW5jX3RhYmxlKTogUmVtb3ZlZCBkZWZpbml0aW9ucy4KKwkoZ251cGdleHRfZW51bV9mdW5jKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoX2djcnlfcm1kMTYwX2NvbnN0cnVjdG9yKTogUmVtb3ZlZCBmdW5jdGlvbi4KKworCSogbWQ1LmMgKG1kNV9nZXRfaW5mbyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKGdudXBnZXh0X3ZlcnNpb24sIGZ1bmNfdGFibGUpOiBSZW1vdmVkIGRlZmluaXRpb25zLgorCShnbnVwZ2V4dF9lbnVtX2Z1bmMpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCShfZ2NyeV9tZDVfY29uc3RydWN0b3IpOiBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiBtZDQuYyAobWQ0X2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ251cGdleHRfdmVyc2lvbiwgZnVuY190YWJsZSk6IFJlbW92ZWQgZGVmaW5pdGlvbnMuCisJKGdudXBnZXh0X2VudW1fZnVuYyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKF9nY3J5X21kNF9jb25zdHJ1Y3Rvcik6IFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIGNyYy5jIChjcmNfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiBhcmNmb3VyLmMgKGRvX2FyY2ZvdXJfc2V0a2V5KTogQ2hhbmdlZCB0eXBlIG9mIGNvbnRleHQgYXJndW1lbnQKKwl0byBgdm9pZCAqJywgYWRkZWQgbG9jYWwgdmFyaWFibGUgZm9yIGNhc3QsIGFkanVzdGVkIGNhbGxlcnMuCisJKGFyY2ZvdXJfc2V0a2V5KTogTGlrZXdpc2UuCisJKGVuY3J5cHRfc3RyZWFtKTogTGlrZXdpc2UuCisJKiBjYXN0NS5jIChjYXN0X3NldGtleSk6IExpa2V3aXNlLgorCShlbmNyeXB0X2Jsb2NrKTogTGlrZXdpc2UuCisJKiByaWpuZGFlbC5jIChyaWpuZGFlbF9zZXRrZXkpOiBMaWtld2lzZS4KKwkocmlqbmRhZWxfZW5jcnlwdCk6IExpa2V3aXNlLgorCShyaWpuZGFlbF9kZWNyeXB0KTogTGlrZXdpc2UuCisJKiB0d29maXNoLmMgKHR3b2Zpc2hfc2V0a2V5KTogTGlrZXdpc2UuCisJKHR3b2Zpc2hfZW5jcnlwdCk6IExpa2V3aXNlLgorCSh0d29maXNoX2RlY3J5cHQpOiBMaWtld2lzZS4KKwkqIGRlcy5jIChkb19kZXNfc2V0a2V5KTogTGlrZXdpc2UuCisJKGRvX2Rlc19lbmNyeXB0KTogTGlrZXdpc2UuCisJKGRvX2Rlc19lbmNyeXB0KTogTGlrZXdpc2UuCisJKGRvX3RyaXBsZWRlc19lbmNyeXB0KTogTGlrZXdpc2UuCisJKGRvX3RyaXBsZWRlc19lbmNyeXB0KTogTGlrZXdpc2UuCisJKiBibG93ZmlzaC5jIChiZl9zZXRrZXk6IExpa2V3aXNlLgorCShlbmNyeXB0X2Jsb2NrKTogTGlrZXdpc2UuCisJKGRlY3J5cHRfYmxvY2spOiBMaWtld2lzZS4KKworCSogYXJjZm91ci5jIChlbmNyeXB0X3N0cmVhbSk6IExpa2V3aXNlLgorCisJKiByaWpuZGFlbC5jIChnbnVwZ2V4dF92ZXJzaW9uLCBmdW5jX3RhYmxlKTogUmVtb3ZlZCBkZWZpbml0aW9ucy4KKwkoZ251cGdleHRfZW51bV9mdW5jKSBSZW1vdmVkIGZ1bmN0aW9uLgorCisJKiB0d29maXNoLmMgKGdudXBnZXh0X3ZlcnNpb24sIGZ1bmNfdGFibGUpOiBSZW1vdmVkIGRlZmluaXRpb25zLgorCShnbnVwZ2V4dF9lbnVtX2Z1bmMpIFJlbW92ZWQgZnVuY3Rpb24uCisKKwkqIGNhc3Q1LmMgKENJUEhFUl9BTEdPX0NBU1Q1KTogUmVtb3ZlZC4KKworCSogYmxvd2Zpc2guYyAoRk5DQ0FTVF9TRVRLRVksIEZOQ0NBU1RfQ1JZUFQpOiBSZW1vdmVkIG1hY3Jvcy4KKwkoQ0lQSEVSX0FMR09fQkxPV0ZJU0gpOiBSZW1vdmVkIHN5bWJvbC4KKwkqIGNhc3Q1LmMgKEZOQ0NBU1RfU0VUS0VZLCBGTkNDQVNUX0NSWVBUKTogTGlrZXdpc2UuCisJKiBkZXMuYyAoc2VsZnRlc3RfZmFpbGVkKTogUmVtb3ZlZC4KKwkoaW5pdGlhbGl6ZWQpOiBOZXcgdmFyaWFibGUuCisJKGRvX2Rlc19zZXRrZXkpOiBSdW4gc2VsZnRlc3QsIGlmIG5vdCB5ZXQgZG9uZS4KKwkoRk5DQ0FTVF9TRVRLRVksIEZOQ0NBU1RfQ1JZUFQpOiBSZW1vdmVkIG1hY3Jvcy4KKworCSogYXJjZm91ci5jIChfZ2NyeV9hcmNmb3VyX2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkqIGJsb3dmaXNoLmMgKF9nY3J5X2Jsb3dmaXNoX2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkqIGNhc3Q1LmMgKF9nY3J5X2Nhc3Q1X2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkqIGRlcy5jIChfZ2NyeV9kZXNfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCSogcmlqbmRhZWwuYyAoX2djcnlfcmlqbmRhZWxfZ2V0X2luZm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCSogdHdvZmlzaC5jIChfZ2NyeV90d29maXNoX2dldF9pbmZvKTogUmVtb3ZlZCBmdW5jdGlvbi4KKworCSogYXJjZm91ci5jIChjaXBoZXJfc3BlY19hcmNmb3VyKTogTmV3IHZhcmlhYmxlLgorCSogdHdvZmlzaC5jIChjaXBoZXJfc3BlY190d29maXNoLCBjaXBoZXJfc3BlY190d29maXNoMTI4KTogTmV3CisJdmFyaWFibGVzLgorCSogcmlqbmRhZWwuYyAoY2lwaGVyX3NwZWNfYWVzLCBjaXBoZXJfc3BlY19hZXMxOTIsCisJY2lwaGVyX3NwZWMyNTYpOiBOZXcgdmFyaWFibGVzLgorCSogZGVzLmMgKGNpcGhlcl9zcGVjX2RlcywgY2lwaGVyX3NwZWNfdHJpcGxlZGVzKTogTmV3IHZhcmlhYmxlcy4KKwkqIGNhc3Q1LmMgKGNpcGhlcl9zcGVjX2Nhc3Q1KTogTmV3IHZhcmlhYmxlLgorCSogYmxvd2Zpc2guYyAoY2lwaGVyX3NwZWNfYmxvd2Zpc2gpOiBMaWtld2lzZS4KKworCSogdHdvZmlzaC5jOiBEbyBub3QgaW5jbHVkZSAiZHlubG9hZC5oIi4KKwkqIHJpam5kYWVsLmM6IExpa2V3aXNlLgorCSogZGVzLmM6IExpa2V3aXNlLgorCSogY2FzdDUuYzogTGlrZXdpc2UuCisJKiBibG93ZmlzaC5jOiBMaWtld2lzZS4KKwkqIGNpcGhlci5jOiBMaWtld2lzZS4KKwkqIGNyYy5jOiBMaWtld2lzZS4KKwkqIG1kNC5jOiBMaWtld2lzZS4KKwkqIG1kNS5jOiBMaWtld2lzZS4KKwkqIG1kLmM6IExpa2V3aXNlLgorCSogcHVia2V5LmM6IExpa2V3aXNlLgorCSogcmlqbmRhZWwuYzogTGlrZXdpc2UuCisJKiBzaGExLmM6IExpa2V3aXNlLgorCSogc2hhMjU2LmM6IExpa2V3aXNlLgorCisJKiBhcmNmb3VyLmM6IEluY2x1ZGUgImNpcGhlci5oIi4KKwkqIHR3b2Zpc2guYzogTGlrZXdpc2UuCisJKiByaWpuZGFlbC5jOiBMaWtld2lzZS4KKwkqIGRlcy5jOiBMaWtld2lzZS4KKwkqIGNhc3Q1LmM6IExpa2V3aXNlLgorCSogYmxvd2Zpc2guYzogTGlrZXdpc2UuCisKKwkqIHR3b2Zpc2guYyAodHdvZmlzaF9zZXRrZXkpOiBEZWNsYXJlZCBhcmd1bWVudCBga2V5JyBjb25zdC4KKwkodHdvZmlzaF9lbmNyeXB0KTogRGVjbGFyZWQgYXJndW1lbnQgYGluYnVmJyBjb25zdC4KKwkodHdvZmlzaF9kZWNyeXB0KTogTGlrZXdpc2UuCisKKwkqIHJpam5kYWVsLmMgKHJpam5kYWVsX3NldGtleSk6IERlY2xhcmVkIGFyZ3VtZW50IGBrZXknIGNvbnN0LgorCShyaWpuZGFlbF9lbmNyeXB0KTogRGVjbGFyZWQgYXJndW1lbnQgYGluYnVmJyBjb25zdC4KKwkocmlqbmRhZWxfZGVjcnlwdCk6IExpa2V3aXNlLgorCisJKiBkZXMuYyAoZG9fZGVzX3NldGtleSk6IERlY2xhcmVkIGFyZ3VtZW50IGBrZXknIGNvbnN0LgorCShkb190cmlwbGVkZXNfc2V0a2V5KTogTGlrZXdpc2UuCisJKGRvX2Rlc19lbmNyeXB0KTogRGVjbGFyZWQgYXJndW1lbnQgYGluYnVmJyBjb25zdC4KKwkoZG9fZGVzX2RlY3J5cHQpOiBMaWtld2lzZS4KKwkoZG9fdHJpcGxlZGVzX2VuY3J5cHQpOiBMaWtld2lzZS4KKwkoZG9fdHJpcGxlZGVzX2RlY3J5cHQpOiBMaWtld2lzZS4KKworCSogY2FzdDUuYyAoZW5jcnlwdF9ibG9jayk6IERlY2xhcmVkIGFyZ3VtZW50IGBpbmJ1ZicgY29uc3QuCisJKGRlY3J5cHRfYmxvY2spOiBMaWtld2lzZS4KKwkoY2FzdF9zZXRrZXkpOiBEZWNsYXJlZCBhcmd1bWVudCBga2V5JyBjb25zdC4KKworCSogYmxvd2Zpc2guYyAoZG9fYmZfc2V0a2V5KTogRGVjbGFyZWQgYXJndW1lbnQgYGtleScgY29uc3QuCisJKGVuY3J5cHRfYmxvY2spOiBEZWNsYXJlZCBhcmd1bWVudCBgaW5idWYnIGNvbnN0LgorCShlbmNyeXB0X2Jsb2NrKTogTGlrZXdpc2UuCisKKworCisJKiBjaXBoZXIuYzogUmVtb3ZlIENJUEhFUl9BTEdPX0RVTU1ZIHJlbGF0ZWQgY29kZS4KKwlSZW1vdmVkIHN0cnVjdCBjaXBoZXJfdGFibGVfcy4KKwlDaGFuZ2VkIGRlZmluaXRpb24gb2YgY2lwaGVyX3RhYmxlLgorCVJlbW92ZWQgZGVmaW5pdGlvbiBvZiBkaXNhYmxlZF9hbGdvcy4KKwkoY2lwaGVyc19yZWdpc3RlcmVkLCBkZWZhdWx0X2NpcGhlcnNfcmVnaXN0ZXJlZCk6IE5ldyB2YXJpYWJsZXMuCisJKFJFR0lTVEVSX0RFRkFVTFRfQ0lQSEVSUyk6IE5ldyBtYWNyby4KKwkoZHVtbXlfc2V0a2V5KTogRGVjbGFyZWQgYXJndW1lbnQgYGtleScgY29uc3QuCisJKGR1bW15X2VuY3J5cHRfYmxvY2spOiBEZWNsYXJlZCBhcmd1bWVudCBgaW5idWYnIGNvbnN0LgorCShkdW1teV9lbmNyeXB0X2Jsb2NrKTogTGlrZXdpc2UuCisJKGR1bW15X2VuY3J5cHRfc3RyZWFtKTogTGlrZXdpc2UuCisJKGR1bW15X2VuY3J5cHRfc3RyZWFtKTogTGlrZXdpc2UuCisJKGR1bW15X3NldGtleSk6IFVzZSBgdW5zaWduZWQgY2hhcicgaW5zdGVhZCBvZiBgYnl0ZScuCisJKGR1bW15X2VuY3J5cHRfYmxvY2spOiBMaWtld2lzZS4KKwkoZHVtbXlfZGVjcnlwdF9ibG9jayk6IExpa2V3aXNlLgorCShkdW1teV9lbmNyeXB0X3N0cmVhbSk6IExpa2V3aXNlLgorCShkdW1teV9kZWNyeXB0X3N0cmVhbSk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9yZWdpc3Rlcl9kZWZhdWx0KTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X2NpcGhlcl9sb29rdXBfZnVuY19pZCk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfbG9va3VwX2Z1bmNfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfbG9va3VwX2lkKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X2NpcGhlcl9sb29rdXBfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfaWRfbmV3KTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X2NpcGhlcl9yZWdpc3Rlcik6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9jaXBoZXJfdW5yZWdpc3Rlcik6IE5ldyBmdW5jdGlvbi4KKwkoc2V0dXBfY2lwaGVyX3RhYmxlKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkobG9hZF9jaXBoZXJfbW9kdWxlcyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKGdjcnlfY2lwaGVyX21hcF9uYW1lKTogQWRqdXN0ZWQgdG8gdXNlIG5ldyBtb2R1bGUgbWFuYWdlbWVudC4KKwkoY2lwaGVyX2FsZ29fdG9fc3RyaW5nKTogTGlrZXdpc2UuCisJKGRpc2FibGVfY2lwaGVyX2FsZ28pOiBMaWtld2lzZS4KKwkoY2hlY2tfY2lwaGVyX2FsZ28pOiBMaWtld2lzZS4KKwkoY2lwaGVyX2dldF9rZXlsZW4pOiBMaWtld2lzZS4KKwkoY2lwaGVyX2dldF9ibG9ja3NpemUpOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfb3Blbik6IExpa2V3aXNlLgorCShzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKTogUmVwbGFjZWQgbWVtYmVycyBhbGdvLCBhbGdvX2luZGV4LAorCWJsb2Nrc2l6ZSwgc2V0a2V5LCBlbmNyeXB0LCBkZWNyeXB0LCBzdGVuY3J5cHQsIHN0ZGVjcnlwdCB3aXRoIG9uZQorCW1lbWJlcjogY2lwaGVyLgorCShnY3J5X2NpcGhlcl9vcGVuKTogQWRqdXN0ZWQgY29kZSBmb3IgbmV3IGhhbmRsZSBzdHJ1Y3R1cmUuCisJKGNpcGhlcl9zZXRrZXkpOiBMaWtld2lzZS4KKwkoY2lwaGVyX3NldGl2KTogTGlrZXdpc2UuCisJKGNpcGhlcl9yZXNldCk6IExpa2V3aXNlLgorCShkb19lY2JfZW5jcnlwdCk6IExpa2V3aXNlLgorCShkb19lY2JfZGVjcnlwdCk6IExpa2V3aXNlLgorCShkb19jYmNfZW5jcnlwdCk6IExpa2V3aXNlLgorCShkb19jYmNfZGVjcnlwdCk6IExpa2V3aXNlLgorCShkb19jZmJfZW5jcnlwdCk6IExpa2V3aXNlLgorCShkb19jZmJfZGVjcnlwdCk6IExpa2V3aXNlLgorCShkb19jdHJfZW5jcnlwdCk6IExpa2V3aXNlLgorCShjaXBoZXJfZW5jcnlwdCk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9lbmNyeXB0KTogTGlrZXdpc2UuCisJKGNpcGhlcl9kZWNyeXB0KTogTGlrZXdpc2UuCisJKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiBMaWtld2lzZS4KKwkoY2lwaGVyX3N5bmMpOiBMaWtld2lzZS4KKwkoZ2NyeV9jaXBoZXJfY3RsKTogTGlrZXdpc2UuCisKKwkqIHB1YmtleS5jOiBSZW1vdmVkIHN0cnVjdCBwdWJrZXlfdGFibGVfcy4KKwlDaGFuZ2VkIGRlZmluaXRpb24gb2YgcHVia2V5X3RhYmxlLgorCVJlbW92ZWQgZGVmaW5pdGlvbiBvZiBkaXNhYmxlZF9hbGdvcy4KKwkocHVia2V5c19yZWdpc3RlcmVkLCBkZWZhdWx0X3B1YmtleXNfcmVnaXN0ZXJlZCk6IE5ldyB2YXJpYWJsZXMuCisJKFJFR0lTVEVSX0RFRkFVTFRfUFVCS0VZUyk6IE5ldyBtYWNyby4KKwkoc2V0dXBfcHVia2V5X3RhYmxlKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkobG9hZF9wdWJrZXlfbW9kdWxlcyk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKGdjcnlfcHVia2V5X3JlZ2lzdGVyX2RlZmF1bHQpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfcHVia2V5X2xvb2t1cF9mdW5jX2lkKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X3B1YmtleV9sb29rdXBfZnVuY19uYW1lKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X3B1YmtleV9sb29rdXBfaWQpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfcHVia2V5X2xvb2t1cF9uYW1lKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X3B1YmtleV9pZF9uZXcpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfcHVia2V5X3JlZ2lzdGVyKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X3B1YmtleV91bnJlZ2lzdGVyKTogTmV3IGZ1bmN0aW9uLgorCShnY3J5X3BrX21hcF9uYW1lKTogQWRqdXN0ZWQgdG8gdXNlIG5ldyBtb2R1bGUgbWFuYWdlbWVudC4KKwkoZ2NyeV9wa19hbGdvX25hbWUpOiBMaWtld2lzZS4KKwkoZGlzYWJsZV9wdWJrZXlfYWxnbyk6IExpa2V3aXNlLgorCShjaGVja19wdWJrZXlfYWxnbyk6IExpa2V3aXNlLgorCShwdWJrZXlfZ2V0X25wa2V5KTogTGlrZXdpc2UuCisJKHB1YmtleV9nZXRfbnNrZXkpOiBMaWtld2lzZS4KKwkocHVia2V5X2dldF9uc2lnKTogTGlrZXdpc2UuCisJKHB1YmtleV9nZXRfbmVuYyk6IExpa2V3aXNlLgorCShwdWJrZXlfZ2VuZXJhdGUpOiBMaWtld2lzZS4KKwkocHVia2V5X2NoZWNrX3NlY3JldF9rZXkpOiBMaWtld2lzZS4KKwkocHVia2V5X2VuY3J5cHQpOiBMaWtld2lzZS4KKwkocHVia2V5X2RlY3J5cHQpOiBMaWtld2lzZS4KKwkocHVia2V5X3NpZ24pOiBMaWtld2lzZS4KKwkocHVia2V5X3ZlcmlmeSk6IExpa2V3aXNlLgorCShnY3J5X3BrX2dldF9uYml0cyk6IExpa2V3aXNlLgorCShnY3J5X3BrX2FsZ29faW5mbyk6IExpa2V3aXNlLgorCisJKiBtZC5jOiBSZW1vdmVkIHN0cnVjdCBtZF9kaWdlc3RfbGlzdF9zLgorCShkaWdlc3RfbGlzdCk6IENoYW5nZWQgZGVmaW5pdGlvbi4KKwkoZGlnZXN0c19yZWdpc3RlcmVkLCBkZWZhdWx0X2RpZ2VzdHNfcmVnaXN0ZXJlZCk6IE5ldyB2YXJpYWJsZXMuCisJKFJFR0lTVEVSX0RFRkFVTFRfRElHRVNUUyk6IE5ldyBtYWNyby4KKwkobmV3X2xpc3RfaXRlbSk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKHNldHVwX21kX3RhYmxlKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkobG9hZF9kaWdlc3RfbW9kdWxlKTogUmVtb3ZlZCBmdW5jdGlvbi4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXJfZGVmYXVsdCk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9kaWdlc3RfbG9va3VwX2Z1bmNfaWQpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfZGlnZXN0X2xvb2t1cF9mdW5jX25hbWUpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfZGlnZXN0X2xvb2t1cF9pZCk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9kaWdlc3RfbG9va3VwX25hbWUpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfZGlnZXN0X2lkX25ldyk6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9kaWdlc3RfcmVnaXN0ZXIpOiBOZXcgZnVuY3Rpb24uCisJKGdjcnlfZGlnZXN0X3VucmVnaXN0ZXIpOiBOZXcgZnVuY3Rpb24uCisJKEdjcnlEaWdlc3RFbnRyeSk6IE5ldyB0eXBlLgorCShzdHJ1Y3QgZ2NyeV9tZF9jb250ZXh0KTogQWRqdXN0ZWQgdHlwZSBvZiBgbGlzdCcuCisJKGdjcnlfbWRfbWFwX25hbWUpOiBBZGp1c3RlZCB0byB1c2UgbmV3IG1vZHVsZSBtYW5hZ2VtZW50LgorCShkaWdlc3RfYWxnb190b19zdHJpbmcpOiBMaWtld2lzZS4KKwkoY2hlY2tfZGlnZXN0X2FsZ28pOiBMaWtld2lzZS4KKwkobWRfZW5hYmxlKTogTGlrZXdpc2UuCisJKG1kX2RpZ2VzdF9sZW5ndGgpOiBMaWtld2lzZS4KKwkobWRfYXNuX29pZCk6IExpa2V3aXNlLgorCisyMDAzLTA0LTA3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmM6IFJlcGxhY2VkIFBVQktFWV9BTEdPX0RTQSB3aXRoIEdDUllfUEtfRFNBLAorCVBVQktFWV9BTEdPX1JTQSB3aXRoIEdDUllfUEtfUlNBIGFuZCBQVUJLRVlfQUxHT19FTEdBTUFMIHdpdGgKKwlHQ1JZX1BLX0VMRy4KKworCSogZHNhLmM6IFJlcGxhY2VkIFBVQktFWV9BTEdPX0RTQSB3aXRoIEdDUllfUEtfRFNBLgorCisyMDAzLTA0LTAxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZGVzLmM6IFJlbW92ZWQgY2hlY2tzIGZvciBHQ1JZX0NJUEhFUl8zREVTIGFuZCBHQ1JZX0NJUEhFUl9ERVMuCisKKzIwMDMtMDMtMzEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiB0aWdlci5jICh0aWdlcl9nZXRfaW5mbyk6IERvIG5vdCBkZWNsYXJlIHN0YXRpYy4KKwkqIHNoYTI1Ni5jIChzaGEyNTZfZ2V0X2luZm8pOiBMaWtld2lzZS4KKwkqIHNoYTEuYyAoc2hhMV9nZXRfaW5mbyk6IExpa2V3aXNlLgorCSogcm1kMTYwLmMgKHJtZDE2MF9nZXRfaW5mbyk6IExpa2V3aXNlLgorCSogbWQ1LmMgKG1kNV9nZXRfaW5mbyk6IExpa2V3aXNlLgorCSogbWQ0LmMgKG1kNF9nZXRfaW5mbyk6IExpa2V3aXNlLgorCSogY3JjLmMgKGNyY19nZXRfaW5mbyk6IExpa2V3aXNlLgorCisJKiBtZC5jIChsb2FkX2RpZ2VzdF9tb2R1bGUpOiBDYWxsIHNldHVwX21kX3RhYmxlIGR1cmluZworCWluaXRpYWxpemF0aW9uLgorCShuZXdfbGlzdF9pdGVtKTogTGluayBuZXcgZWxlbWVudCBpbnRvIGRpZ2VzdF9saXN0LgorCisJKiBjaXBoZXIuYyAoZG9fY3RyX2RlY3J5cHQpOiBNYWRlIGRvX2N0cl9lbmNyeXB0IGFjdCBhcyBhIHdyYXBwZXIKKwlmb3IgZG9fY3RyX2VuY3J5cHQsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaWRlbnRpY2FsLgorCisyMDAzLTAzLTMwICBTaW1vbiBKb3NlZnNzb24gIDxqYXNAZXh0dW5kby5jb20+CisKKwkqIGNpcGhlci5jIChzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKTogQWRkIGNvdW50ZXIgZmllbGQuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBBZGQgQ1RSLgorCShjaXBoZXJfcmVzZXQpOiBDbGVhciBjb3VudGVyIGZpZWxkLgorCShkb19jdHJfZW5jcnlwdCwgZG9fY3RyX2RlY3J5cHQpOiBOZXcgZnVuY3Rpb25zLgorCShjaXBoZXJfZW5jcnlwdCwgY2lwaGVyX2RlY3J5cHQpOiBDYWxsIENUUiBmdW5jdGlvbnMuCisJKGdjcnlfY2lwaGVyX2N0bCk6IEFkZCBTRVRfQ1RSIHRvIHNldCBjb3VudGVyLgorCisyMDAzLTAzLTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcnNhLmMgKF9nY3J5X3JzYV9ibGluZCk6IE5ldyBmdW5jdGlvbi4KKwkoX2djcnlfcnNhX3VuYmxpbmQpOiBOZXcgZnVuY3Rpb24uCisJKF9nY3J5X3JzYV9kZWNyeXB0KTogVXNlIF9nY3J5X3JzYV9ibGluZCBhbmQgX2djcnlfcnNhX2RlY3J5cHQuCisKKzIwMDMtMDMtMjYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBkeW5sb2FkLmMgKF9nY3J5X2VudW1fZ251cGdleHRfcHVia2V5cyk6IEFkanVzdCBgZW5jcnlwdCcgYW5kCisJYGRlY3J5cHQnIGZ1bmN0aW9uIGFyZ3VtZW50cy4KKwkoX2djcnlfZW51bV9nbnVwZ2V4dF9wdWJrZXlzKTogTGlrZXdpc2UuCisJKiBkeW5sb2FkLmg6IExpa2V3aXNlLgorCisJKiBwdWJrZXkuYyAoZHVtbXlfZGVjcnlwdCk6IEFkZCBhcmd1bWVudDogaW50IGZsYWdzLgorCShkdW1teV9lbmNyeXB0KTogTGlrZXdpc2UuCisKKwkqIGVsZ2FtYWwuYyAoX2djcnlfZWxnX2VuY3J5cHQpOiBBZGQgYXJndW1lbnQ6IGludCBmbGFncy4KKwkoX2djcnlfZWxnX2RlY3J5cHQpOiBMaWtld2lzZS4KKworCSogcnNhLmMgKF9nY3J5X3JzYV9lbmNyeXB0KTogQWRkIGFyZ3VtZW50OiBpbnQgZmxhZ3MuCisJKF9nY3J5X3JzYV9kZWNyeXB0KTogTGlrZXdpc2UuCisKKwkqIHB1YmtleS5jOiBBZGQgYGZsYWdzJyBhcmd1bWVudCB0byBtZW1iZXJzIGBlbmNyeXB0JyBhbmQKKwlgZGVjcnlwdCcgb2Ygc3RydWN0IGBwdWJrZXlfdGFibGVfcycuCisKKwkqIHJzYS5oOiBBZGQgYGZsYWdzJyBhcmd1bWVudCB0byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisJKiBlbGdhbWFsLmg6IExpa2V3aXNlLgorCisJKiBwdWJrZXkuYyAoc2V4cF9kYXRhX3RvX21waSk6IE5ldyB2YXJpYWJsZTogaW50IHBhcnNlZF9mbGFncy4KKwkoc2V4cF9kYXRhX3RvX21waSk6IFNldCBgcGFyc2VkX2ZsYWdzJy4KKwkoc2V4cF9kYXRhX3RvX21waSk6IE5ldyBhcmd1bWVudDogaW50ICpmbGFncy4KKwkoZ2NyeV9wa19lbmNyeXB0KTogTmV3IHZhcmlhYmxlOiBpbnQgZmxhZ3MuCisJKGdjcnlfcGtfZW5jcnlwdCk6IFBhc3MgYGZsYWdzJyB0byBwdWJrZXlfZW5jcnlwdC4KKwkocHVia2V5X2VuY3J5cHQpOiBOZXcgdmFyaWFibGU6IGludCBmbGFncy4KKwkocHVia2V5X2VuY3J5cHQpOiBQYXNzIGBmbGFncycgdG8gcHVia2V5IGVuY3J5cHQgZnVuY3Rpb24uCisJKHB1YmtleV9kZWNyeXB0KTogTGlrZXdpc2UuCisJKHB1YmtleV9kZWNyeXB0KTogUGFzcyBgZmxhZ3MnIHRvIHB1YmtleSBlbmNyeXB0IGZ1bmN0aW9uLgorCShnY3J5X3BrX2VuY3J5cHQpOiBJbmNsdWRlIGBmbGFncycgcy1leHAgaW4gcmV0dXJuIGxpc3QuCisJKHNleHBfdG9fZW5jKTogTmV3IGFyZ3VtZW50OiBpbnQgKmZsYWdzLgorCShnY3J5X3BrX2RlY3J5cHQpOiBOZXcgdmFyaWFibGU6IGludCBmbGFncy4KKwkoZ2NyeV9wa19kZWNyeXB0KTogUGFzcyBgZmxhZ3MnIHRvIHB1YmtleV9kZWNyeXB0LgorCShzZXhwX3RvX2VuYyk6IE5ldyB2YXJpYWJsZTogaW50IHBhcnNlZF9mbGFncy4KKwkoc2V4cF90b19lbmMpOiBTZXQgYHBhcnNlZF9mbGFncycuCisKKzIwMDMtMDMtMjIgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4sIGRvX2NiY19lbmNyeXB0KQorCShnY3J5X2NpcGhlcl9lbmNyeXB0KTogU3VwcG9ydCBHQ1JZX0NJUEhFUl9DQkNfTUFDLgorCShnY3J5X2NpcGhlcl9jdGwpOiBTdXBwb3J0IEdDUllDVExfU0VUX0NCQ19NQUMuCisKKzIwMDMtMDMtMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBwcmltZWdlbi5jIChnZW5fcHJpbWUpOiBOZXcgYXJncyBFWFRSQV9DSEVDSyBhbmQgRVhUUkFfQ0hFQ0tfQVJHCisJdG8gYWxsb3cgZm9yIGEgdXNlciBjYWxsYmFjay4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCisJKF9nY3J5X2dlbmVyYXRlX3NlY3JldF9wcmltZSkKKwkoX2djcnlfZ2VuZXJhdGVfcHVibGljX3ByaW1lKTogRGl0dG8sIHBhc3MgdGhlbSB0byBnZW5fcHJpbWUuCisJKiByc2EuYyAoY2hlY2tfZXhwb25lbnQpOiBOZXcuCisJKGdlbmVyYXRlKTogVXNlIGEgY2FsbGJhY2sgdG8gZW5zdXJlIHRoYXQgYSBnaXZlbiBleHBvbmVudCBpcworCWFjdHVhbGx5IGdlbmVyYXRlZC4KKworMjAwMy0wMy0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHByaW1lZ2VuLmM6IEluaXRpYWxpemUgYG5vX29mX3NtYWxsX3ByaW1lX251bWJlcnMnIHN0YXRpY2FsbHkuCisJKGdlbl9wcmltZSk6IFJlbW92ZSBjYWxjdWxhdGlvbiBvZiBgbm9fb2Zfc21hbGxfcHJpbWVfbnVtYmVycycuCisKKzIwMDMtMDMtMDMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtZC5jIChnY3J5X21kX2N0bCk6IFJld3JpdHRlbiB0byB1c2Ugc2FtZSBzdHlsZSBsaWtlIHRoZSBvdGhlcgorCWZ1bmN0aW9ucyBkaXNwYXRjaGVycy4KKworMjAwMy0wMy0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jIChzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlKTogTmV3IG1lbWJlcjogYWxnb19pbmRleC4KKwkoZ2NyeV9jaXBoZXJfb3Blbik6IEFsbG9jYXRlIG1lbW9yeSBmb3IgdHdvIGNpcGhlciBjb250ZXh0cy4KKwlJbml0aWFsaXplIGFsZ29faW5kZXguCisJKGNpcGhlcl9zZXRrZXkpOiBEdXBsaWNhdGUgY29udGV4dCBpbnRvIHJlc2VydmVkIG1lbW9yeS4KKwkoY2lwaGVyX3Jlc2V0KTogTmV3IGZ1bmN0aW9uLCB3aGljaCByZXNldHMgdGhlIGNvbnRleHQgYW5kIGNsZWFyCisJdGhlIElWLgorCShnY3J5X2NpcGhlcl9jdGwpOiBDYWxsIGNpcGhlcl9yZXNldC4KKworMjAwMy0wMi0yMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci5jOiBSZW1vdmUgKGJvZ3VzKSBgZGlnaXRwJyBtYWNybyBkZWZpbml0aW9uLgorCSogbWQuYzogTGlrZXdpc2UuCisKKwkqIGJsb3dmaXNoLmMgKGJ1cm5fc3RhY2spOiBSZW1vdmVkLgorCSogYXJjZm91ci5jIChidXJuX3N0YWNrKTogTGlrZXdpc2UuCisJKiBjYXN0NS5jIChidXJuX3N0YWNrKTogTGlrZXdpc2UuCisJKiBkZXMuYyAoYnVybl9zdGFjayk6IExpa2V3aXNlLgorCSogbWQ0LmMgKGJ1cm5fc3RhY2spOiBMaWtld2lzZS4KKwkqIG1kNS5jIChidXJuX3N0YWNrKTogTGlrZXdpc2UuCisJKiByYW5kb20uYyAoYnVybl9zdGFjayk6IExpa2V3aXNlLgorCSogcmlqbmRhZWwuYyAoYnVybl9zdGFjayk6IExpa2V3aXNlLgorCSogcm1kMTYwLmMgKGJ1cm5fc3RhY2spOiBMaWtld2lzZS4KKwkqIHNoYTEuYyAoYnVybl9zdGFjayk6IExpa2V3aXNlLgorCSogc2hhMjU2LmMgKGJ1cm5fc3RhY2spOiBMaWtld2lzZS4KKwkqIHRpZ2VyLmMgKGJ1cm5fc3RhY2spOiBMaWtld2lzZS4KKwkqIHR3b2Zpc2guYyAoYnVybl9zdGFjayk6IExpa2V3aXNlLgorCisJKiBibG93ZmlzaC5jOiBDaGFuZ2VkIGFsbCBvY2N1cmVuY2VzIG9mIGJ1cm5fc3RhY2sgdG8KKwlfZ2NyeV9idXJuX3N0YWNrLgorCSogYXJjZm91ci5jOiBMaWtld2lzZS4KKwkqIGNhc3Q1LmM6IExpa2V3aXNlLgorCSogZGVzLmM6IExpa2V3aXNlLgorCSogbWQ0LmM6IExpa2V3aXNlLgorCSogbWQ1LmM6IExpa2V3aXNlLgorCSogcmFuZG9tLmM6IExpa2V3aXNlLgorCSogcmlqbmRhZWwuYzogTGlrZXdpc2UuCisJKiBybWQxNjAuYzogTGlrZXdpc2UuCisJKiBzaGExLmM6IExpa2V3aXNlLgorCSogc2hhMjU2LmM6IExpa2V3aXNlLgorCSogdGlnZXIuYzogTGlrZXdpc2UuCisJKiB0d29maXNoLmM6IExpa2V3aXNlLgorCisJKiBhcmNmb3VyLmMgKF9nY3J5X2FyY2ZvdXJfZ2V0X2luZm8pOiBVc2UgR0NSWV9DSVBIRVJfQVJDRk9VUgorCWluc3RlYWQgb2YgaGFyZC1jb2RlZCB2YWx1ZSBgMzAxJy4KKworMjAwMy0wMS0yNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJhbmRvbS5jIChfZ2NyeV9yZWdpc3Rlcl9yYW5kb21fcHJvZ3Jlc3MpOiBOZXcuCisJKF9nY3J5X3JhbmRvbV9wcm9ncmVzcyk6IE5ldy4KKworCSogcm5kbGludXguYyAoZ2F0aGVyX3JhbmRvbSk6IENhbGwgdGhlIHJhbmRvbSBwcm9ncmVzcyBmdW5jdGlvbi4KKworMjAwMy0wMS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJzYS5jIChnZW5lcmF0ZSk6IE5ldyBhcmcgVVNFX0UgdG8gcmVxdWVzdCBhIHNwZWNpZmljIHB1YmxpYworCWV4cG9uZW50LgorCShfZ2NyeV9yc2FfZ2VuZXJhdGUpOiBEaXR0by4KKwkqIGVsZ2FtYWwuYyAoX2djcnlfZWxnX2dlbmVyYXRlKTogTXVzdCBhZGQgYW4gZHVtbXkgYXJndW1lbnQKKwlpbnN0ZWFkIG9mIFVTRV9FLgorCSogZHNhLmMgKF9nY3J5X2RzYV9nZW5lcmF0ZSk6IERpdHRvLgorCSogcHVia2V5LmMgKGR1bW15X2dlbmVyYXRlKTogRGl0dG8uCisJKHB1YmtleV9nZW5lcmF0ZSk6IEFkZCBVU0VfRSBhcmcgYW5kIHBhc3MgaXQgZG93bi4KKwkoZ2NyeV9wa19nZW5rZXkpOiBEZXRlY3QgInJzYS11c2UtZSIgcGFyYW1ldGVyIGFuZCBwYXNzIGl0IHRvIGdlbmVyYXRlLgorCisJKiBwdWJrZXkuYyAoc2V4cF90b19lbmMpOiBOZXcgYXJnIFJFVF9NT0RFUk4uCisJKGdjcnlfcGtfZGVjcnlwdCk6IE1ha2UgdXNlIG9mIGl0IHRvIHJldHVybiBhIHJlYWwgUy1leHByZXNzaW9uLgorCVJldHVybiBiZXR0ZXIgZXJyb3IgY29kZXMuCisJKGdjcnlfcGtfdmVyaWZ5KTogUmV0dXJuIGJldHRlciBlcnJvciBjb2Rlcy4KKworMjAwMy0wMS0yMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJhbmRvbS5jIChnY3J5X3JhbmRvbV9hZGRfYnl0ZXMpOiBBZGQgUVVBTElUWSBhcmd1bWVudCwgbGV0CisJZnVuY3Rpb24gcmV0dXJuIGFuIGVycm9yIGNvZGUgYW5kIGRpc2FibGUgaXRzIGNvcmUgZm9yIG5vdy4KKworMjAwMy0wMS0yMSAgVGltbyBTY2h1bHogIDx0d29hZGF5QGZyZWFrbWFpbC5kZT4KKworCSogcmFuZG9tLmMgKGdjcnlfcmFuZG9tX2FkZF9ieXRlcyk6IE5ldy4gRnVuY3Rpb24gdG8gYWRkIGV4dGVybmFsCisJcmFuZG9tIHRvIHRoZSBwb29sLgorCisyMDAzLTAxLTIwICBTaW1vbiBKb3NlZnNzb24gIDxqYXNAZXh0dW5kby5jb20+CisKKwkqIGNyYy5jOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfUFJPR1JBTVMsIEVYVFJBX2NyY19TT1VSQ0VTKTogQWRkIGNyYy5jLgorCSogbWQuYyAoZ2NyeV9tZF9nZXRfYWxnb19kbGVuKTogQWRkIHZhbHVlcyBmb3IgQ1JDLgorCisyMDAzLTAxLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2hhMjU2LmM6IE5ldy4KKwkqIGJpdGhlbHAuaCAocm9yKTogTmV3LgorCSogTWFrZmlsZS5hbTogQWRkIHNoYTI1Ni5jLgorCSogbWQuYyAob2lkX3RhYmxlKTogQWRkIHZhbHVlcyBmb3IgU0hBMjU2IGV0IGFsLgorCShnY3J5X21kX2dldF9hbGdvX2RsZW4pOiBMaWtld2lzZQorCisyMDAzLTAxLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZ2V0X2tleWdyaXApOiBJbXBsZW1lbnRlZCBrZXlncmlwcyBmb3IgRFNBCisJYW5kIEVsR2FtYWwuCisKKzIwMDMtMDEtMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuYyAoZ2NyeV9jaXBoZXJfZW5jcnlwdCk6IFJld29ya2VkIHNvIHRoYXQgdGhlIG91dHB1dCB3aWxsCisJbmV2ZXIgY29udGFpbiB0aGUgcGxhaW50ZXh0IGV2ZW4gaWYgdGhlIGNhbGxlciBkaWQgbm90IGNoZWNrZWQgdGhlCisJcmV0dXJuIHZhbHVlLgorCisJKiBtZC5jIChnY3J5X21kX2dldF9hbGdvKTogQ2hhbmdlZCBlcnJvciBjb2RlIHRvIEdDUllFUlJfR0VORVJBTAorCWJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBpbnZhbGlkIG1kIGFsZ28gYnV0IG5vIGFsZ29yaXRobSBlbmFibGVkLgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBDaGFuZ2VkIGVycm9yIGNvZGUgZm9yIGJvdW5kcyBjaGVjaworCW9mIHRhYmxlIHBhcmFtZXRlcnMgdG8gR0NSWUVSUl9JTlRFUk5BTC4KKworCSogbWQuYyAoZ2NyeV9tZF9vcGVuKTogUGFydGx5IHJldmVydGVkIFRpbW8ncyBjaGFuZ2UgZnJvbQorCTIwMDItMTAtMTAgYnkgcmVtb3ZpbmcgdGhlIGNoZWNrIGZvciB0aGUgYWxnb3JpdGhtLiAgQW4gYWxnb3JpdGhtCisJb2YgMCBpcyBhbGxvd2VkIGFuZCBhbnl3YXkgd2Ugc2hvdWxkIG5vdCBkb3VibGUgY2hlY2sgaXQgb3IgY2hlY2sKKwlpdCB1c2luZyBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEFsc28gZml4ZWQgdGhlIGZsYWdzIGNoZWNrLgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19lbmNyeXB0KTogTWFrZSBzdXJlIHRoYXQgUl9DSVBIIHBvaW50cyB0byBOVUxMCisJb24gZXJyb3IuCisJKGdjcnlfcGtfZGVjcnlwdCk6IERpdHRvIGZvciBSX1BMQUlOLgorCShnY3J5X3BrX3NpZ24pOiBEaXR0byBmb3IgUl9TSUcuCisJKGdjcnlfcGtfZ2Vua2V5KTogRGl0dG8gZm9yIFJfS0VZLgorCisyMDAzLTAxLTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQuYyAoZ2NyeV9tZF93cml0ZSk6IENoYW5nZWQgMm5kIGFyZ3VtZW50IHR5cGUgdG8gdm9pZCouCisJKGdjcnlfbWRfaGFzaF9idWZmZXIpOiBDaGFuZ2VkIHR5cGUgb2YgYm90aHMgYnVmZmVycyB0byB2b2lkKi4KKwkoZ2NyeV9tZF9zZXRrZXkpOiBDaGFuZ2VkIDJuZCBhcmd1bWVudCB0eXBlIHRvIHZvaWQqLgorCisyMDAzLTAxLTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHVia2V5LmMgKHNleHBfZGF0YV90b19tcGkpOiBOZXcuICBUaGlzIGhhbmRsZXMgcGtjczEgcGFkZGluZy4KKwkoZ2NyeV9wa19zaWduLCBnY3J5X3BrX3ZlcmlmeSk6IFVzZSBpdCBoZXJlLgorCShnY3J5X3BrX2VuY3J5cHQpOiBBbmQgaGVyZS4KKwkocHVia2V5X3ZlcmlmeSk6IEFkZCBkZWJ1ZyBjb2RlLgorCShzZXhwX3RvX2VuYyk6IEhhbmRsZSBmbGFncyBpbiB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgcGtjczEgZmxhZworCWluIGEgbmV3IHBhcmFtZXRlci4KKwkoZ2NyeV9wa19kZWNyeXB0KTogUHJlcGFyZSBmb3IgZnV0dXJlIHBrY3MxIGhhbmRsaW5nLgorCisyMDAyLTEyLTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmFuZG9tLmMgKF9nY3J5X3JhbmRvbV9pbml0aWFsaXplKTogTmV3LgorCisyMDAyLTEyLTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY2lwaGVyLmM6IEFkZGVkIGEgVGVsZXRydXN0IHNwZWNpZmljIE9JRCBmb3IgM0RFUy4KKworMjAwMi0xMi0xMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmM6IEFkZGVkIGFub3RoZXIgb2RkYmFsbCBPSVcgT0lEIChzaGEtMVdpdGhSU0FFbmNyeXB0aW9uKS4KKworMjAwMi0xMS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGxvYWRfZGlnZXN0X21vZHVsZSk6IEVubGFyZ2VkIGNoZWNrZWRfYWxnb3MgYml0bWFwLgorCSogbWQ0LmMgKGZ1bmNfdGFibGUpOiAgRml4ZWQgZW50cnkgZm9yIG1kNC4KKwlCb3RoIGJ5IFNpbW9uIEpvc2VwaHNvbi4KKwkodHJhbnNmb3JtKTogQ29weSBkYXRhIHRvIGdldCB0aGUgYWxpZ25tZW50IHN0cmFpZ2h0LiBUZXN0ZWQgb25seQorCW9uIGkzODYuCisKKzIwMDItMTEtMTAgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBEb24ndCByZWplY3QgQ1RTIGZsYWcuCisJKGRvX2NiY19lbmNyeXB0LCBkb19jYmNfZGVjcnlwdCwgY2lwaGVyX2VuY3J5cHQpCisJKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0KQorCShnY3J5X2NpcGhlcl9kZWNyeXB0KTogU3VwcG9ydCBDVFMgZmxhZy4KKwkoZ2NyeV9jaXBoZXJfY3RsKTogVG9nZ2xlIENUUyBmbGFnLgorCisyMDAyLTExLTEwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQ0LmM6IE5ldy4gQnkgU2ltb24gSm9zZWZzc29uLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX1BST0dSQU1TKTogQWRkIG1kNC5jLgorCSogbWQuYyAob2lkX3RhYmxlLGdjcnlfbWRfZ2V0X2FsZ29fZGxlbik6IE1ENCBzdXBwb3J0LgorCisyMDAyLTEwLTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXJjZm91ci5jIChkb19lbmNyeXB0X3N0cmVhbSk6IERvbid0IHVzZSBpbmNyZW1lbnQgb3Agd2hlbgorCWFzc2lnbmluZyB0byB0aGUgc2FtZSB2YXJpYWJsZS4KKworMjAwMi0xMC0xMCAgVGltbyBTY2h1bHogIDx0c0B3aW5wdC5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2dlbmtleSk6IENoZWNrIGJvdW5kYXJpZXMuCisKKwkqIG1kLmMgKGdjcnlfbWRfb3Blbik6IENoZWNrIHRoYXQgYWxnbyBpcyBhdmFpbGFibGUgYW5kIG9ubHkKKwl2YWxpZCBmbGFnIHZhbHVlcyBhcmUgdXNlZC4KKwkoZ2NyeV9tZF9nZXRfYWxnbyk6IEFkZCBlcnJvciBoYW5kbGluZy4KKworMjAwMi0wOS0yNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmM6IEluY2x1ZGUgYW4gT0lEIGZvciBUSUdFUi4KKwkqIHRpZ2VyLmMgKHRpZ2VyX2dldF9pbmZvKTogVXNlIGEgcmVndWxhciBPSUQuCisKKzIwMDItMDktMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiByYW5kb20uYzogUmVwbGFjZWQgbXV0ZXguaCBieSB0aGUgbmV3IGF0aC5oLiAgQ2hhbmdlZCBhbGwgY2FsbHMuCisKKzIwMDItMDktMTYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhcmNmb3VyLmMgKGRvX2VuY3J5cHRfc3RyZWFtKTogVXNlIHJlZ2lzdGVyIG1vZGlmaWVyIGFuZCBtb2R1bG8uCisJQWNjb3JkaW5nIHRvIE5pa29zIE1hdnJveWFub3BvdWxvcyB0aGlzIGluY3JlYXNlcyBwZXJmcm9tYWNlIG9uCisJaTM4NiBzeXN0ZW0gbm90aWNhYmxlLiAgQW5kIEkgYWx3YXlzIHRvdWdodCBnY2MgaXMgY2xldmVyIGVub3VnaC4KKwkqIG1kNS5jICh0cmFuc2Zvcm0pOiBVc2UgcmVnaXN0ZXIgbW9kaWZpZXIuCisJKiBybWQxNjAuYyAodHJhbnNmb3JtKTogRGl0dG8uCisJKiBzaGExLmMgKHRyYW5zZm9ybSk6IERpdHRvLiAgV2UgaG9wZSB0aGF0IHRoZXJlIGFyZSA2IGZyZWUgcmVnaXN0ZXJzLgorCSogcmFuZG9tLmMgKGdjcnlfcmFuZG9taXplKTogUmV3cm90ZSB0byBhdm9pZCBtYWxsb2MgY2FsbHMuCisKKwkqIHJuZGxpbnV4LmMgKGdhdGhlcl9yYW5kb20pOiBSZXBsYWNlZCByZW1haW5pbmcgZnByaW50ZnMgYnkgbG9nXyouCisJKiBhcmNmb3VyLmMgKGRvX2FyY2ZvdXJfc2V0a2V5KTogRGl0dG8uCisJKiB0d29maXNoLmMgKGRvX3R3b2Zpc2hfc2V0a2V5KTogRGl0dG8uCisJKiBybmRlZ2QuYyAoZ2F0aGVyX3JhbmRvbSk6IERpdHRvLgorCSogcmlqbmRhZWwuYyAoZG9fc2V0a2V5KTogRGl0dG8uCisJKiByYW5kb20uYyAoX2djcnlfcmFuZG9tX2R1bXBfc3RhdHMpOiBEaXR0by4KKwkqIHByaW1lZ2VuLmMgKF9nY3J5X2dlbmVyYXRlX2VsZ19wcmltZSk6IERpdHRvLgorCSogZGVzLmMgKF9nY3J5X2Rlc19nZXRfaW5mbyk6IERpdHRvLgorCSogY2FzdDUuYyAoZG9fY2FzdF9zZXRrZXkpOiBEaXR0by4KKwkqIGJsb3dmaXNoLmMgKGRvX2JmX3NldGtleSk6IERpdHRvLgorCisyMDAyLTA4LTI2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZGVzLmMgKHdlYWtfa2V5cyk6IEZpeGVkIG9uZSBlbnRyeSBpbiB0aGUgdGFibGUgYW5kIGNvbXBhcmVkCisJYWxsIGVudHJpZXMgYWdhaW5zdCB0aGUgbGl0ZXJhdHVyZS4KKwkoc2VsZnRlc3QpOiBDaGVja3N1bSB0aGUgd2VhayBrZXkgdGFibGUuCisKKzIwMDItMDgtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBwdWJrZXkuYzogRW5hYmxlIGtleWdyaXAgY2FsY3VsYXRpb24gZm9yICJvcGVucGdwLXJzYSIuCisKKzIwMDItMDgtMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuYyAoc2V0dXBfY2lwaGVyX3RhYmxlKTogRG9uJ3Qgb3ZlcndyaXRlIHRoZSBERVMgZW50cnkKKwl3aXRoIHRoZSBlbnRyeSBmb3IgRFVNTVkuCisKKzIwMDItMDgtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBkZXMuYyAoZG9fZGVzX3NldGtleSxkb19kZXNfZW5jcnlwdCwgZG9fZGVzX2RlY3J5cHQpOiBOZXcuCisJKF9nY3J5X2Rlc19nZXRfaW5mbyk6IFN1cHBvcnQgcGxhaW4gb2xkIERFUy4KKwkqIGNpcGhlci5jIChzZXR1cF9jaXBoZXJfdGFibGUpOiBQdXQgREVTIGludG8gdGhlIHRhYmxlLgorCisyMDAyLTA3LTI1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcm5kdW5peC5jIChfZ2NyeV9ybmR1bml4X2NvbnN0cnVjdG9yKTogUHJlZml4ZWQgd2l0aCBfZ2NyeV8uCisJTm90ZWQgYnkgU3RlcGhhbiBBdXN0ZXJtdWVobGUuCisKKzIwMDItMDctMDggIFRpbW8gU2NodWx6ICA8dHNAd2lucHQub3JnPgorCisJKiBybmR3MzIuYzogUmVwbGFjZWQgdGhlIG1fIG1lbW9yeSBmdW5jdGlvbnMgd2l0aCB0aGUgcmVhbAorCWdjcnlfIGZ1bmN0aW9ucy4gUmVuYW1lZCBhbGwgZzEwXyBwcmVmaXhlZCBmdW5jdGlvbnMgdG8gbG9nXy4KKworMjAwMi0wNi0xMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJzYS5jIChnZW5lcmF0ZSk6IFVzZSBlID0gNjU1MzcgZm9yIG5vdy4KKworMjAwMi0wNi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2dldF9rZXlncmlwKTogQWxsb3cgYSAicHJvdGVjdGVkLXByaXZhdGUta2V5Ii4KKworMjAwMi0wNi0wNSAgVGltbyBTY2h1bHogIDx0c0B3aW5wdC5vcmc+CisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9lbmNyeXB0LCBnY3J5X2NpcGhlcl9kZWNyeXB0KToKKwlDaGVjayB0aGF0IHRoZSBpbnB1dCBzaXplIGlzIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2Nrc2l6ZS4KKworMjAwMi0wNS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKG9pZF90YWJsZSk6IEFkZCBhbiByc2Fkc2kgT0lEIGZvciBNRDUuCisKKzIwMDItMDUtMjEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBwcmltZWdlbi5jLCBlbGdhbWFsLmMsIGRzYS5jIChwcm9ncmVzcyk6IERvIG5vdCBwcmludCBhbnl0aGluZworCWJ5IGRlZmF1bHQuICBQYXNzIGFuIGV4dHJhIGlkZW50aWZ5aW5nIHN0cmluZyB0byB0aGUgY2FsbGJhY2sgYW5kCisJcmVzZXJ2ZWQgMiBhcmd1bWVuc3QgZm9yIGN1cnJlbnQgYW5kIHRvdGFsIGNvdW50ZXJzLiAgQ2hhbmdlZCB0aGUKKwlyZWdpc3RlciBmdW5jdGlvbiBwcm90b3R5cGUuCisKKzIwMDItMDUtMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBybmRlZ2QuYyAocm5kZWdkX2NvbnN0cnVjdG9yKTogRml4ZWQgbmFtZSBvZiByZWdpc3RlciBmdW5jdGlvbgorCWFuZCBwcmVmaXhlZCB0aGUgZnVuY3Rpb24gbmFtZSB3aXRoIF9nY3J5Xy4KKwkqIHJuZHczMi5jIChybmR3MzJfY29uc3RydWN0b3IpOiBEaXR0by4KKwkqIHRpZ2VyLmMgKHRpZ2VyX2NvbnN0cnVjdG9yKTogRGl0dG8uCisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmVkIGFsbCBkeW5hbWljIGxvYWRpbmcgc3R1ZmYuCisJKiBkeW5sb2FkLmM6IERpdHRvLiBOb3cgb25seSB1c2VkIGZvciB0aGUgY29uc3RydWN0b3Igc3lzdGVtLgorCisyMDAyLTA1LTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmFuZG9tLmMgKGdjcnlfcmFuZG9tX2J5dGVzLGdjcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSkKKwkoZ2NyeV9yYW5kb21pemUpOiBNYWtlIHN1cmUgd2UgYXJlIGluaXRpYWxpemVkLgorCisyMDAyLTA1LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUNoYW5nZWQgbGljZW5zZSBvZiBtb3N0IGZpbGVzIHRvIHRoZSBMR1BMLgorCisyMDAyLTA1LTAyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmFuZG9tLmMgKF9nY3J5X2Zhc3RfcmFuZG9tX3BvbGwpOiBJbml0aWFsaXplIHRoZSBtb2R1bGUgc28gdGhlCisJbXV0ZXggY2FuIGJlIHVzZWQuCisKKwkqIHByaW1lZ2VuLmMgKHNtYWxsX3ByaW1lX251bWJlcnMpOiBNb3ZlZCB0YWJsZSBmcm9tIHNtYWxscHJpbWUuYworCSogc21hbGxwcmltZS5jOiBGaWxlIHJlbW92ZWQuCisKKwkqIGRlcy5jIChsZWZ0a2V5X3N3YXAsIHJpZ2h0a2V5X3N3YXAsIHdvcmtpbmdfbWVtY21wKTogTWFkZSBzdGF0aWMuCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9tYXBfbmFtZSk6IE1hcCAiUklKTkRBRUwiIHRvICJBRVMiLgorCSogcmlqbmRhZWwuYyAocmlqbmRhZWxfZ2V0X2luZm8pOiBXZSBkbyBvbmx5IHN1cHBvcnQgYSAxMjggYml0CisJYmxvY2tzaXplIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGNoYW5nZSB0aGUgYWxnb3JpdGhtIHN0cmluZ3MgdG8KKwlBRVMuCisKKwkqIHRpZ2VyLmMgKHRpZ2VyX2ZpbmFsKTogUmVtb3ZlZCBzdXBlcmZsdW91cyB0b2tlbiBwYXN0aW5nIG9wZXJhdG9ycy4KKwkqIG1kNS5jIChtZDVfZmluYWwpOiBEaXR0by4KKworMjAwMi0wNC0zMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGNpcGhlci5jOiBGaXhlZCBsaXN0IG9mIGNvcHlyaWdodCB5ZWFycy4KKworMjAwMi0wMy0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJhbmRvbS5jIChpbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHBvb2wgbG9jayBtdXRleC4KKwkoX2djcnlfZmFzdF9yYW5kb21fcG9sbCk6IEFkZCBsb2NraW5nIGFuZCBtb3ZlZCBtYWluCisJY29kZSBvdXQgdG8uLi4KKwkoZG9fZmFzdF9yYW5kb21fcG9sbCk6IG5ldyBmdW5jdGlvbi4KKwkocmVhZF9wb29sKTogVXNlIHRoZSBuZXcgZnVuY3Rpb24gaGVyZS4KKwkoZ2V0X3JhbmRvbV9ieXRlcyk6IEFkZCBsb2NraW5nLgorCShfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSk6IERpdHRvLgorCisyMDAyLTAzLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQuYzogQWRkIHJzYVNpZ25hdHVyZVdpdGhyaXBlbWQxNjAgdG8gT0lEIHRhYmxlLgorCisyMDAyLTAyLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2hhMS5jOiBSZW1vdmVkIGEgbGVmdCBvdmVyIGNvbW1lbnQgbm90ZS4gIFRoZSBjb2RlIGhhcyBiZWVuCisJcmV3cml0dGVuIGZyb20gc2NyYXRjaCBpbiAxOTk4LiAgVGhhbmtzIHRvIE5pZWxzIE3DtmxsZXIgZm9yCisJcmVwb3J0aW5nIHRoaXMgbWlzbGVhZGluZyBjb21tZW50LgorCisyMDAyLTAyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcm5kdW5peC5jIChybmR1bml4X2NvbnN0cnVjdG9yKTogVXNlIHRoZSB0aGUgbmV3IHByZWZpeGVkCisJZnVuY3Rpb24gbmFtZS4gIFJlcG9ydGVkIGJ5IEpvcmRpIE1hbGxhY2guCisKKzIwMDItMDItMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiByYW5kb20uYyAobWl4X3Bvb2wpOiBDYXJyeSBhbiBleHRyYSBmYWlsc2FmZV9kaWdlc3QgYnVmZmVyCisJYXJvdW5kIHRvIG1ha2UgdGhlIGZ1bmN0aW9uIG1vcmUgcm9idXN0LgorCisyMDAyLTAyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcmFuZG9tLmMgKGFkZF9yYW5kb21uZXNzKTogWG9yIG5ldyBkYXRhIGludG8gdGhlIHBvb2wgYW5kIG5vdAorCWp1c3QgY29weSBpdC4gIFRoaXMgYXZvaWRzIGFueSBjaG9vc2VuIGlucHV0IGF0dGFja3Mgd2hpY2ggYXJlIG5vdAorCXNlcmlvdXMgaW4gb3VyIHNldHRpbmcgYmVjYXVzZSBhbiBvdXRzaWRlciB3b24ndCBiZSBhYmxlIHRvIG1peAorCWRhdGEgaW4gYW5kIGV2ZW4gdGhlbiB3ZSBrZWVwIGdvaW5nIHdpdGggYSBQUk5HLiAgVGhhbmtzIHRvIFN0ZWZhbgorCUtlbGxlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKKzIwMDItMDEtMDQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19nZW5rZXkpOiBEbyBub3QgcmVsZWFzZSBza2V5IC0gaXQgaXMgc3RhdGljLgorCisJKiBwcmltZWdlbi5jIChnZW5fcHJpbWUpOiBPZiBjb3Vyc2Ugd2Ugc2hvdWxkIHVzZSBzZXRfYml0CisJYW5kIG5vdCBzZXRfaGlnaGJpdCB0byBzZXQgdGhlIHNlY29uZCBoaWdoIGJpdC4KKworMjAwMS0xMi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJzYS5jIChnZW5lcmF0ZSk6IExvb3AgdW50aWwgd2UgZmluZCB0aGUgZXhhY3QgbW9kdWx1cyBzaXplLgorCUNoYW5nZWQgdGhlIGV4cG9uZW50IHRvIDQxLgorCShyc2FfZ2V0X2luZm8pOiBzL3VzYWdlL3JfdXNhZ2UvIHRvIGF2b2lkIHNoYWRvdyB3YXJuaW5ncy4KKwkqIHByaW1lZ2VuLmMgKGdlbl9wcmltZSk6IFNldCAyIGhpZ2ggb3JkZXIgYml0cyBmb3Igc2VjcmV0IHByaW1lcy4KKworCSogTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogSW5jbHVkZSBjb25zdHJ1Y3QuYy4KKworMjAwMS0xMi0xNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2dldF9rZXlncmlwKTogTmV3IC0gZXhwZXJpbWVudGFsLgorCisyMDAxLTEyLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY2lwaGVyLmM6IEFkZGVkIE9JRHMgZm9yIEFFUy4KKwkoZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCk6IE5ldy4KKwkoZ2NyeV9jaXBoZXJfbWFwX25hbWUpOiBNb3ZlZCBPSUQgc2VhcmNoIGNvZGUgdG8gLi4KKwkoc2VhcmNoX29pZCk6IC4uIG5ldyBmdW5jdGlvbi4KKworMjAwMS0xMi0xMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2VuY3J5cHQpOiBGaW5kIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtIGJ5IG5hbWUKKwlhbmQgbm90IGJ5IG51bWJlci4KKworCSogcHVia2V5LmMgKGdjcnlfcGtfZW5jcnlwdCxnY3J5X3BrX2RlY3J5cHQsZ2NyeV9wa19zaWduKQorCShnY3J5X3BrX3ZlcmlmeSxnY3J5X3BrX3Rlc3RrZXksIGdjcnlfcGtfZ2Vua2V5KQorCShnY3J5X3BrX2dldF9uYml0cyk6IFJlbGVhc2UgdGhlIGFycmF5cy4gIE5vdGVkIGJ5IE5pa29zCisJTWF2cm95YW5vcG91bG9zLgorCisyMDAxLTEyLTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX21hcF9uYW1lKTogTG9vayBhbHNvIGZvciBPSURzIHByZWZpeGVkCisJd2l0aCAib2lkLiIgIG9yICJPSUQuIi4KKworMjAwMS0xMi0wNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHB1YmtleS5jIChhbGdvX2luZm9fdGFibGUpOiBGaXhlZCBlbnRyeSBmb3Igb3BlbnBncC1yc2EuCisKKzIwMDEtMTEtMjQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBwdWJrZXkuYzogQWRkZWQgdGhlIHJzYUVuY3J5cHRpb24gT0lEIHRvIHRoZSB0YWJsZXMuCisJKHNleHBfdG9fa2V5KTogQWRkIGFuIGFyZyB0byByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBhbGdvcml0aG0sCisJY2hhbmdlZCBhbGwgY2FsbGVycy4KKwkoZ2NyeV9wa19zaWduKTogRmluZCB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSBieSBuYW1lIGFuZCBub3QgYnkKKwludW1iZXIuCisJKGdjcnlfcGtfZ2V0X25iaXRzKTogRml4ZWQgc28gdGhhdCB3ZSBjYW4gbm93IHJlYWxseSBwYXNzIGEgc2VjcmV0CisJa2V5IHRvIGdldCB0aGUgcmVzdWx0LgorCisJKiBtZC5jIChnY3J5X21kX21hcF9uYW1lKTogTG9vayBhbHNvIGZvciBPSURzIHByZWZpeGVkIHdpdGggIm9pZC4iCisJb3IgIk9JRC4iIHNvIHRoYXQgYW4gT0lEIHN0cmluZyBjYW4gYmUgdXNlZCBhcyBhbiBTLUV4cCB0b2tlbi4KKworMjAwMS0xMS0yMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGdjcnlfbWRfbWFwX25hbWUpOiBMb29rdXAgYnkgT0lEIGlmIHRoZSB0aGUgbmFtZSBiZWdpbnMKKwl3aXRoIGEgZGlnaXQuCisJKG9pZF90YWJsZSk6IE5ldy4KKworMjAwMS0xMS0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGdjcnlfbWRfaW5mbyk6IE5ldyBvcGVyYXRvciBHQ1JZQ1RMX0lTX0FMR09fRU5BQkxFRC4KKworMjAwMS0xMS0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1kLmMgKGdjcnlfbWRfaGFzaF9idWZmZXIpOiBDbG9zZSB0aGUgaGFuZGxlIHdoaWNoIHdhcyBsZWZ0IG9wZW4KKwlmb3IgYWxnb3JpdGhtcyBvdGhlciB0aGFuIHJtZDE2MC4KKworMjAwMS0wOC0wOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHJuZHczMi5jIChnYXRoZXJfcmFuZG9tKTogVXNlIHRvb2xoZWxwIGluIGFkZGl0aW9uIHRvIHRoZSBOVAorCWdhdGhlcmVyIGZvciBXaW5kb3dzMjAwMC4gIFN1Z2dlc3RlZCBieSBTYW1pIFRvbHZhbmVuLgorCisJKiByYW5kb20uYyAocmVhZF9wb29sKTogRml4ZWQgbGVuZ3RoIGNoZWNrLCB0aGlzIHVzZWQgdG8gYmUgb25lCisJYnl0ZSB0byBzdHJpY3QuICBNYWRlIGFuIGFzc2VydCBvdXQgb2YgaXQgYmVjYXVzZSB0aGUgY2FsbGVyIGhhcworCWFscmVhZHkgbWFkZSBzdXJlIHRoYXQgb25seSBwb29sc2l6ZSBieXRlcyBhcmUgcmVxdWVzdGVkLgorCVJlcG9ydGVkIGJ5IE1hcmN1cyBCcmlua21hbm4uCisKKzIwMDEtMDgtMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuYyAoY2lwaGVyX2VuY3J5cHQsIGNpcGhlcl9kZWNyeXB0KTogUHJlcGFyZSB0byByZXR1cm4KKwllcnJvcnMuIFdlIGhhdmUgdG8gY2hhbmdlIHRoZSBpbnRlcmZhY2UgdG8gYWxsIGNpcGhlcnMgdG8gbWFrZQorCXRoaXMgcmVhbGx5IHdvcmsgYnV0IHdlIHNob3VsZCBkbyBzbyB0byBwcmVwYXJlIGZvciBoYXJkd2FyZQorCWVuY3J5cHRpb24gbW9kdWxlcy4KKwkoZ2NyeV9jaXBoZXJfZW5jcnlwdCwgZ2NyeV9jaXBoZXJfZGVjcnlwdCk6IFJldHVybiB0aGUgZXJyb3IgYW5kCisJc2V0IGxhc3RlcnIuCisJKGdjcnlfY2lwaGVyX2N0bCk6IE1ha2Ugc3VyZSB0aGF0IGVycm9ycyBmcm9tIHNldGtleSBhcmUgcmV0dXJuZWQuCisKKzIwMDEtMDgtMDIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBybmRsaW51eC5jIChnYXRoZXJfcmFuZG9tKTogY2FzdGVkIGEgc2l6ZV90IGFyZyB0byBpbnQgc28gdGhhdAorCXRoZSBmb3JtYXQgc3RyaW5nIGlzIGNvcnJlY3QuICBDYXN0aW5nIGlzIG9rYXkgaGVyZSBhbmQgYXZvaWRzCisJdHJhbnNsYXRpb24gY2hhbmdlcy4KKworCSogcmFuZG9tLmMgKGZhc3RfcmFuZG9tX3BvbGwpOiBEbyBub3QgY2hlY2sgdGhlIHJldHVybiBjb2RlIG9mCisJZ2V0cnVzYWdlLgorCisJKiBybmR1bml4LmM6IEFkZCBhIHNpZ25hbC5oIGhlYWRlciB0byBhdm9pZCB3YXJuaW5ncyBvbiBTb2xhcmlzIDcKKwlhbmQgOC4KKworCSogdGlnZXIuYyAocHJpbnRfYWJjLHByaW50X2RhdGEpOiBSZW1vdmVkLgorCisJKiByaWpuZGFlbC5jLCBkZXMuYywgYmxvd2Zpc2guYywgdHdvZmlzaC5jLCBjYXN0NS5jLCBhcmNmb3VyLmMKKwkoYnVybl9zdGFjayk6IE5ldy4gIEFkZCB3cmFwcGVycyBmb3IgbW9zdCBmdW5jdGlvbnMgdG8gYmUgYWJsZSB0bworCWNhbGwgYnVybl9zdGFjayBhZnRlciB0aGUgZnVuY3Rpb24gaW52b2NhdGlvbi4gVGhpcyBtZXRob2RzIHNlZW1zCisJdG8gYmUgdGhlIG1vc3QgcG9ydGFibGUgd2F5IHRvIHplcm9pc2UgdGhlIHN0YWNrIHVzZWQuIEl0IGRvZXMKKwlvbmx5IHdvcmsgb24gc3RhY2sgZnJhbWUgYmFzZWQgbWFjaGluZXMgYnV0IGl0IGlzIGhpZ2hseSBwb3J0YWJsZQorCWFuZCBoYXMgbm8gc2lkZSBlZmZlY3RzLiAgSnVzdCBzZXR0aW5nIHRoZSBhdXRvbWF0aWMgdmFyaWFibGVzIGF0CisJdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHRvIHplcm8gZG9lcyBub3Qgd29yayB3ZWxsIGJlY2F1c2UgdGhlCisJY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGVtIGF3YXkgLSBtYXJraW5nIHRoZW0gYXMgdm9sYXRpbGUgd291bGQKKwliZSBiYWQgZm9yIHBlcmZvcm1hbmNlLgorCSogbWQ1LmMsIHNoYTEuYywgcm1kMTYwLmMsIHRpZ2VyLmMgKGJ1cm5fc3RhY2spOiBMaWtld2lzZS4KKwkqIHJhbmRvbS5jIChidXJuX3N0YWNrKTogTmV3LgorCShtaXhfcG9vbCk6IFVzZSBpdCBoZXJlIHRvIGJ1cm4gdGhlIHN0YWNrIG9mIHRoZSBtaXhibG9jayBmdW5jdGlvbi4KKworCSogcHJpbWVnZW4uYyAoX2djcnlfZ2VuZXJhdGVfZWxnX3ByaW1lKTogRnJlZWQgcSBhdCAzIHBsYWNlcy4KKwlUaGFua3MgdG8gVG9tbWkgS29tdWxhaW5lbi4KKworCSogYXJjZm91ci5jIChhcmNmb3VyX3NldGtleSk6IENoZWNrIHRoZSBtaW5pbWltIGtleWxlbmd0aCBhZ2FpbnN0CisJYnl0ZXMgYW5kIG5vdCBiaXRzLgorCShzZWxmdGVzdCk6IE11c3QgcmVzZXQgdGhlIGtleSBiZWZvcmUgZGVjcnlwdGlvbi4KKworMjAwMS0wNS0zMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNoYTEuYyAoc2hhMV9pbml0KTogTWFkZSBzdGF0aWMuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgZzEwXyBwcmVmaXhlZCBmdW5jdGlvbiBuYW1lcyBhcyB3ZWxsIGFzIHNvbWUgbXBpXworCWZ1bmN0aW9uIG5hbWVzIHRvIGNvcGUgd2l0aCB0aGUgaW50cm9kdWNlZCBuYW1pbmcgY2hhbmdlcy4KKworCSogbWQuYyAocHJlcGFyZV9tYWNwYWRzKTogTWFkZSBrZXkgY29uc3QuCisKKzIwMDEtMDUtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBybmRlZ2QuYyAoZ2F0aGVyX3JhbmRvbSk6IFJlbW92ZWQgdGhlIHVzZSBvZiB0dHlfcHJpbnRmLgorCisyMDAxLTAzLTI5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWQ1LmMgKG1kNV9maW5hbCk6IEZpeGVkIGNhbGN1bGF0aW9uIG9mIGhhc2hlZCBsZW5ndGguICBUaGFua3MKKwl0byBkaXNhc3RyeUBzYWlrbmVzLmx2IGZvciBwb2ludGluZyBvdXQgdGhhdCBpdCB3YXMgaG9ycmlibGUgd3JvbmcKKwlmb3IgbW9yZSB0aGFuIDUxMk1CIG9mIGlucHV0LgorCSogc2hhMS5jIChzaGExX2ZpbmFsKTogRGl0dG8uCisJKiBybWQxNjAuYyAocm1kMTYwX2ZpbmFsKTogRGl0dG8uCisJKiB0aWdlci5jICh0aWdlcl9maW5hbCk6IERpdHRvLgorCisJKiBibG93ZmlzaC5jIChlbmNyeXB0LGRvX2VuY3J5cHQpOiBDaGFuZ2VkIG5hbWUgdG8gZG9fZW5jcnlwdCB0bworCWF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIGFuIGVuY3J5cHQgZnVuY3Rpb24gaW4gc3RkbGliLmggb2YKKwlEeW5peC9QSVguICBUaGFua3MgdG8gR2VuZSBDYXJ0ZXIuCisJKiBlbGdhbWFsLmMgKGVuY3J5cHQsZG9fZW5jcnlwdCk6IERpdHRvLgorCisJKiB0d29maXNoLmMgKGdudXBnZXh0X2VudW1fZnVuYyk6IFVzZSBvbmx5IHdoZW4gd2hlbiBjb21waWxlZCBhcyBhCisJbW9kdWxlLgorCSogcmlqbmRhZWwuYyAoZ251cGdleHRfZW51bV9mdW5jKTogRGl0dG8uCisKKwkqIHRpZ2VyLmMgKHRpZ2VyX2dldF9pbmZvKTogUmV0dXJuICJUSUdFUjE5MiIgYW5kIG5vdCBqdXN0CisJIlRJR0VSIi4gIEJ5IEVkd2luIFdvdWR0LgorCisJKiByYW5kb20uYzogQWx3YXlzIGluY2x1ZGUgdGltZS5oIC0gc3RhbmRhcmQgcmVxdWlyZW1lbnQuICBUaGFua3MKKwl0byBKYW1lcyBUcm91cC4KKworCSogcm5kdzMyLmM6IEZpeGVzIHRvIHRoZSBtYWNyb3MuCisKKzIwMDEtMDEtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuYyAoY2lwaGVyX2VuY3J5cHQsZ2NyeV9jaXBoZXJfZW5jcnlwdCk6IFVzZSBibG9ja3NpemUgYW5kCisJbm90IDguCisKKzIwMDAtMTItMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJTWFqb3IgY2hhbmdlOgorCVJlbW92ZWQgYWxsIEdudVBHIHN0dWZmIGFuZCByZW5hbWVkIHRoaXMgcGllY2Ugb2Ygc29mdHdhcmUKKwl0byBnY3J5cHQuCisKKzIwMDAtMTEtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBkc2EuYyAodGVzdF9rZXlzKTogUmVwbGFjZWQgbXBpX2FsbG9jIGJ5IGdjcnlfbXBpX25ldyBhbmQKKwltcGlfZnJlZSBieSBnY3J5X21waV9yZWxlYXNlLgorCSogZWxnYW1hbC5jICh0ZXN0X2tleXMsZ2VuZXJhdGUpOiBEaXR0bywgYWxzbyBmb3IgbXBpX2FsbG9jX3NlY3VyZS4KKwkqIHJzYS5jICh0ZXN0X2tleXMsZ2VuZXJhdGUscnNhX3ZlcmlmeSk6IERpdHRvLgorCSogcHJpbWVnZW4uYyAoZ2VuZXJhdGVfZWxnX3ByaW1lKTogRGl0dG8uCisJKGdlbl9wcmltZSk6IERpdHRvIGFuZCByZW1vdmVkIG5saW1icy4KKworCSogcnNhLmMgKGdlbmVyYXRlKTogQWxsb2NhdGUgMiBtb3JlIHZhcnMgaW4gc2VjdXJlIG1lbW9yeS4KKworCSogTWFrZWZpbGUuYW0gKE9NSVRfREVQRU5ERU5DSUVTKTogSGFjayB0byB3b3JrIGFyb3VuZCBkZXBlbmRlbmN5CisJcHJvYmxlbXMuCisKKzIwMDAtMTAtMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhcmNmb3VyLmMsIGFyY2ZvdXIuaDogTmV3LgorCSogY2lwaGVyLmMgKGNpcGhlcl9lbmNyeXB0LCBjaXBoZXJfZGVjcnlwdCk6IEFkZCBzdHJlYW0gbW9kZS4KKwkoc2V0dXBfY2lwaGVyX3RhYmxlKTogQWRkIEFyY2ZvdXIuCisJKGdjcnlfY2lwaGVyX29wZW4pOiBLbHVkZ2UgdG8gYWxsb3cgc3RyZWFtIG1vZGUuCisKK1dlZCBPY3QgIDQgMTM6MTY6MTggQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAgICAgICAqIHNoYTEuYyAodHJhbnNmb3JtKTogVXNlIHJvbCgpIG1hY3JvLiAgQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVlZGVkCisgICAgICAgIGZvciBhIG5ld2VyIGdjYyBidXQgdGhlcmUgYXJlIHN0aWxsIGFvdGVyIGNvbXBpbGVycy4KKworICAgICAgICAqIHJzYS5jICh0ZXN0X2tleXMpOiBVc2UgbmV3IHJhbmRvbSBmdW5jdGlvbi4KKworICAgICAgICAqIG1kLmMgKGdjcnlfbWRfc2V0a2V5KTogTmV3IGZ1bmN0aW9uIHRvIG92ZXJjb21lIHByb2JsZW1zIHdpdGgKKyAgICAgICAgY29uc3QgY29uZmxpY3MuCisgICAgICAgIChnY3J5X21kX2N0bCk6IFBhc3Mgc2V0IGtleSB0byB0aGUgbmV3IGZ1bmN0aW9ucy4KKworICAgICAgICAqIHJpam5kYWVsLmM6IE5ldy4KKyAgICAgICAgKiBjaXBoZXIuYzogQWRkIFJpam5kYWVsIHN1cHBvcnQuCisKK01vbiBTZXAgMTggMTY6MzU6NDUgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAgICAgICAqIHJuZGxpbnV4LmMgKG9wZW5fZGV2aWNlKTogTG9vc2UgcmFuZG9tIGRldmljZSBjaGVja2luZy4KKyAgICAgICAgQnkgTmlscyBFbGxtZW5yZWljaC4KKworICAgICAgICAqIHJhbmRvbS5jIChmYXN0X3JhbmRvbV9wb2xsKTogQ2hlY2sgRU5PU1lTIGZvciBnZXRydXNhZ2UuCisgICAgICAgICogcm5kdW5peC5jOiAgQWRkIDIgc291cmNlcyBmb3IgUU5YLiBCeSBTYW0gUm9iZXJ0cy4KKworICAgICAgICAqIHB1YmtleS5jIChnY3J5X3BrX2FsZ29faW5mbyk6IEFkZCBHQ1JZQ1RMX0dFVF9BTEdPX1VTQUdFLgorCisgICAgICAgICogcnNhLmM6IENoYW5nZWQgdGhlIGNvbW1lbnQgYWJvdXQgdGhlIHBhdGVudC4KKyAgICAgICAgKHNlY3JldCk6IFNwZWVkIHVwIGJ5IHVzaW5nIHRoZSBDUlQuICBGb3IgYSAyayBrZXlzIHRoaXMKKyAgICAgICAgaXMgYWJvdXQgMyB0aW1lcyBmYXN0ZXIuCisgICAgICAgIChzdHJvbmdlcl9rZXlfY2hlY2spOiBOZXcgYnV0IHVudXNlZCBjb2RlIHRvIGNoZWNrIHRoZSBzZWNyZXQga2V5LgorICAgICAgICAqIE1ha2VmaWxlLmFtOiBJbmNsdWRlZCByc2EuW2NoXS4KKyAgICAgICAgKiBwdWJrZXkuYzogRW5hYmxlZCBSU0Egc3VwcG9ydC4KKyAgICAgICAgKHB1YmtleV9nZXRfbnBrZXkpOiBSZW1vdmVkIFJTQSB3b3JrYXJvdW5kLgorCitNb24gSnVsIDMxIDEwOjA0OjQ3IENFU1QgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BvcGVuaXQuZGU+CisKKyAgKiBwdWJrZXkuYzogUmVwbGFjZWQgYWxsIGdjcnlfc2V4cF97Y2FyLGNkcn1fe2RhdGEsbXBpfSBieSB0aGUgbmV3CisgIGdjcnlfc2V4cF9udGhfe2RhdGEsbXBpfSBmdW5jdGlvbnMuCisKK1R1ZSBKdWwgMjUgMTc6NDQ6MTUgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAqIHB1YmtleS5jIChleHBfdG9fa2V5LHNleHBfdG9fc2lnLHNleHBfdG9fZW5jLGdjcnlfcGtfZW5jcnlwdCwKKyAgICBnY3J5X3BrX2RlY3J5cHQsZ2NyeV9wa19zaWduLGdjcnlfcGtfZ2Vua2V5KTogQ2hhbmdlZCB0byB3b3JrIHdpdGgKKyAgICB0aGUgbmV3IFMtRXhwIGludGVyZmFjZS4KKworTW9uIEp1bCAxNyAxNjozNTo0NyBDRVNUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAPgorCisgICogcmFuZG9tLmMgKGdhdGhlcl9mYWtlZCk6IFJlcGxhY2VkIG1ha2VfdGltZXN0YW1wIGJ5IHRpbWUoMikgYWdhaW4uCisKK0ZyaSBKdWwgMTQgMTk6Mzg6MjMgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQD4KKworICAqIG1kLmMgKGdjcnlfbWRfY3RsKTogU3VwcG9ydCBHQ1JZQ1RMX3tTVEFSVCxTVE9QfV9EVU1QLgorCisgICogTWFrZWZpbGUuYW06IE5ldmVyIGNvbXBpbGUgbWluZ3czMiBhcyBtb2R1bGUuCisKKyAgKiBNYWtlZmlsZS5hbTogVHdlYWtlZCBtb2R1bGUgYnVpbGQgYW5kIHJlbW92ZWQgbGlidG9vbAorCisgICogTWFrZWZpbGUuYW06ICBSZXBsYWNlZCAtTzEgYnkgLU8uIFN1Z2dlc3RlZCBieSBBbGVjIEhhYmlnLgorCisgICogZWxnYW1hbC5jIChzaWduKTogUmVtb3ZlZCBpbmFjdGl2ZSBjb2RlLgorCisgICogcnNhLmMsIHJzYS5oOiBOZXcgYmFzZWQgb24gdGhlIG9sZCBtb2R1bGUgdmVyc2lvbiAob25seSBpbiBDVlMgZm9yIG5vdykuCisgICogcHVia2V5LmMgKHNldHVwX3B1YmtleV90YWJsZSk6IEFkZGVkIGNvbW1lbnRlZCBzdXBwb3J0IGZvciBSU0EuCisKKyAgKiBybmR1bml4LmMgKHdhaXRwaWQpOiBOZXcuIEZvciBVVFMgMi4xLiAgQWxsIGJ5IERhdmUgRHlrc3RyYS4KKyAgKG15X3BvcGVuKTogRG8gdGhlIEZEX0NMT0VYRUMgb25seSBpZiBpdCBpcyBhdmFpbGFibGUKKyAgKHN0YXJ0X2dhdGhlcmVyKTogQ29wZSB3aXRoIG1pc3NpbmcgX1NDX09QRU5fTUFYCisKKyAgKiBybmR1bml4LmM6IEFkZCBzb21lIG1vcmUgaGVhZGVycyBmb3IgUU5YLiBCeSBTYW0gUm9iZXJ0cy4KKworICAqIHJuZGVnZC5jIChnYXRoZXJfcmFuZG9tKTogU2hvcnRjdXQgbGV2ZWwgMC4KKyAgKiBybmR1bml4LmMgKGdhdGhlcl9yYW5kb20pOiBEaXR0by4KKyAgKiBybmR3MzIuYyAoZ2F0aGVyX3JhbmRvbSk6IERpdHRvLgorCisgICogcm5kdzMyLmM6IFJlcGxhY2VkIHdpdGggY29kZSBmcm9tIENyeXB0bGliIGFuZCBjb21tZW50ZWQgdGhlIG9sZCBzdHVmZi4KKyAgKiBybmR3MzIuYzogQWRkIHNvbWUgZGVidWdpbmcgY29kZSBlbmFibGVkIGJ5IGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICogcmFuZG9tLmMgKHJlYWRfc2VlZF9maWxlKTogQmluYXJ5IG9wZW4gZm9yIERPU2lzaCBzeXN0ZW0KKyAgKHVwZGF0ZV9yYW5kb21fc2VlZF9maWxlKTogRGl0dG8uCisgICogcmFuZG9tLmMgW01JTkdXMzJdOiBJbmNsdWRlIHByb2Nlc3MuaCBmb3IgZ2V0cGlkLgorICAqIHJhbmRvbS5jIChmYXN0X3JhbmRvbV9wb2xsKTogQWRkIGNsb2NrX2dldHRpbWUoKSBhcyBmYWxsYmFjayBmb3IKKyAgc3lzdGVtIHdoaWNoIHN1cHBvcnQgdGhpcyBQT1NJWC40IGZ1Y250aW9uLiBCeSBTYW0gUm9iZXJ0cy4KKworICAqIHJhbmRvbS5jIChyZWFkX3NlZWRfZmlsZSk6IFJlbW92ZWQgdGhlIFNfSVNMTksgdGVzdCBiZWN1YXNlIGl0CisgIGlzIGFscmVhZHkgY292ZXJlZCBieSAhU19JU1JFRyBhbmQgaXMgbm90IGRlZmluZWQgaW4gVW5peHdhcmUuCisgIFJlcG9ydGVkIGJ5IERhdmUgRHlrc3RyYS4KKyAgKHVwZGF0ZV9yYW5kb21fc2VlZF9maWxlKTogU2lsZW50bHkgaWdub3JlIHVwZGF0ZSByZXF1ZXN0IHdoZW4gcG9vbAorICBpcyBub3QgZmlsbGVkLgorCisgICogcmFuZG9tLmMgKHJlYWRfc2VlZF9maWxlKTogTmV3LgorICAoc2V0X3JhbmRvbV9zZWVkX2ZpbGUpOiBOZXcuCisgIChyZWFkX3Bvb2wpOiBUcnkgdG8gcmVhZCB0aGUgc2VlZGluZyBmaWxlLgorICAodXBkYXRlX3JhbmRvbV9zZWVkX2ZpbGUpOiBOZXcuCisKKyAgKHJlYWRfcG9vbCk6IERvIGFuIGluaXRpYWwgZXh0cmEgc2VlZGluZyB3aGVuIGxldmVsIDIgcXVhbGl0eSByYW5kb20KKyAgaXMgcmVxdWVzdGVkIHRoZSBmaXJzdCB0aW1lLglUaGlzIHJlcXVlc3RlcyBhdCBsZWFzdCBQT09MU0laRS8yIGJ5dGVzCisgIG9mIGVudHJvcHkuICBDb21waW5lZCB3aXRoIHRoZSBzZWVkaW5nIGZpbGUgdGhpcyBzaG91bGQgbWFrZSBub3JtYWwKKyAgcmFuZG9tIGJ5dGVzIGNoZWFwZXIgYW5kIGluY3JlYXNlIHRoZSBxdWFsaXR5IG9mIHRoZSByYW5kb20gYnl0ZXMKKyAgdXNlZCBmb3Iga2V5IGdlbmVyYXRpb24uCisKKyAgKiByYW5kb20uYyAocmVhZF9wb29sKTogUHJpbnQgYSBtb3JlIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgaW4KKyAgY2FzZXMgd2hlbiB0b28gbXVjaCByYW5kb20gaXMgcmVxdWVzdGVkIGluIG9uZSBjYWxsLgorCisgICogcmFuZG9tLmMgKGZhc3RfcmFuZG9tX3BvbGwpOiBDaGVjayB3aGV0aGVyIFJVU0FHRV9TRUxGIGlzIGRlZmluZWQ7CisgIHRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBzb21lIEVTSVggYW5kIFVuaXh3YXJlLCBhbHRob3VnaCB0aGV5IGhhdmUKKyAgZ2V0cnVzYWdlKCkuCisKKyAgKiBwcmltZWdlbi5jIChnZW5lcmF0ZV9lbGdfcHJpbWUpOiBBbGwgcHJpbWVzIGFyZSBub3cgZ2VuZXJhdGVkIHdpdGgKKyAgdGhlIGxvd2VzdCByYW5kb20gcXVhbGl0eSBsZXZlbC4gIEJlY2F1c2UgdGhleSBhcmUgcHVibGljIGFueXdheSB3ZQorICBkb24ndCBuZWVkIHN0cm9uZ2VyIHJhbmRvbSBhbmQgYnkgdGhpcyB3ZSBkbyBub3QgZHJhaW4gdGhlIHN5c3RlbXMKKyAgZW50cm9weSBzbyBtdWNoLgorCisgICogcHJpbWVnZW4uYyAocmVnaXN0ZXJfcHJpbWVnZW5fcHJvZ3Jlc3MpOiBOZXcuCisgICogZHNhLmMgKHJlZ2lzdGVyX3BrX2RzYV9wcm9ncmVzcyk6IE5ldy4KKyAgKiBlbGdhbWFsLmMgKHJlZ2lzdGVyX3BrX2VsZ19wcm9ncmVzcyk6IE5ldy4KKworICAqIGVsZ2FtYWwuYyAod2llbmVyX21hcCk6IE5ldy4KKyAgKGdlbl9rKTogVXNlIGEgbXVjaCBzbWFsbGVyIGsuCisgIChnZW5lcmF0ZSk6IENhbGN1bGF0ZSB0aGUgcWJpdHMgdXNpbmcgdGhlIHdpZW5lciBtYXAgYW5kCisgIGNob29zZSBhbiB4IGF0IGEgc2l6ZSBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY2hvb3NlbiBpbiBnZW5faworCisgICogcm1kMTYwLmMgKHJtZDE2MF9nZXRfaW5mbyk6IE1vdmVkIGNhc3RpbmcgdG8gdGhlIGxlZnQgc2lkZSBkdWUgdG8gYQorICBwcm9ibGVtIHdpdGggVVRTNC4zLglTdWdnZXN0ZWQgYnkgRGF2ZSBEeWtzdHJhLgorICAqIHNoYTEuYyAoc2hhMV9nZXRfaW5mbyk6IERpdHRvLgorICAqIHRpZ2VyLmMgKHRpZ2VyX2dldF9pbmZvKTogRGl0dG8uCisgICogbWQ1LmMgKG1kNV9nZXRfaW5mbyk6IERpdHRvCisgICogZGVzLmMgKGRlc19nZXRfaW5mbyk6IERpdHRvLgorICAqIGJsb3dmaXNoLmMgKGJsb3dmaXNoX2dldF9pbmZvKTogRGl0dG8uCisgICogY2FzdDUuYyAoY2FzdDVfZ2V0X2luZm8pOiBEaXR0by4KKyAgKiB0d29maXNoLmMgKHR3b2Zpc2hfZ2V0X2luZm8pOiBEaXR0by4KKworRnJpIE1hciAyNCAxMToyNTo0NSBDRVQgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BvcGVuaXQuZGU+CisKKwkqIG1kLmMgKG1kX29wZW4pOiBBZGQgaG1hYyBhcmcgYW5kIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgcGFkcy4KKwkobWRfZmluYWxpemUpOiBBZGQgSE1BQyBzdXBwb3J0LgorCShtZF9jb3B5KTogRGl0dG8uCisJKG1kX2Nsb3NlKTogRGl0dG8uCisJKGdjcnlfbWRfcmVzZXQpOiBEaXR0by4KKwkoZ2NyeV9tZF9jdGwpOiBEaXR0by4KKwkocHJlcGFyZV9tYWNwZGFzKTogTmV3LgorCitNb24gTWFyIDEzIDE5OjIyOjQ2IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworCSogbWQuYyAoZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IEFkZCBzdXBwb3J0IGZvciB0aGUgb3RoZXIgYWxnb3JpdGhtcy4KKworTW9uIEphbiAzMSAxNjozNzozNCBDRVQgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogZ2VucHJpbWUuYyAoZ2VuZXJhdGVfZWxnX3ByaW1lKTogRml4ZWQgcmV0dXJuZWQgZmFjdG9ycyB3aGljaCBuZXZlcgorCXdvcmtlZCBmb3Igbm9uLURTQSBrZXlzLgorCitUaHUgSmFuIDI3IDE4OjAwOjQ0IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBwdWJrZXkuYyAoc2V4cF90b19rZXkpOiBGaXhlZCBtZW0gbGVha3MgaW4gY2FzZSBvZiBlcnJvcnMuCisKK01vbiBKYW4gMjQgMjI6MjQ6MzggQ0VUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIHB1YmtleS5jIChnY3J5X3BrX2RlY3J5cHQpOiBJbXBsZW1lbnRlZC4KKwkoZ2NyeV9wa19lbmNyeXB0KTogSW1wbGVtZW50ZWQuCisJKGdjcnlfcGtfdGVzdGtleSk6IE5ldy4KKwkoZ2NyeV9wa19nZW5rZXkpOiBOZXcuCisJKHB1YmtleV9kZWNyeXB0KTogTWFkZSBzdGF0aWMuCisJKHB1YmtleV9lbmNyeXB0KTogRGl0dG8uCisJKHB1YmtleV9jaGVja19zZWNyZXRfa2V5KTogRGl0dG8uCisJKHB1YmtleV9nZW5lcmF0ZSk6IERpdHRvLgorCitNb24gSmFuIDI0IDEzOjA0OjI4IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBwdWJrZXkuYyAocHVia2V5X25iaXRzKTogUmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgLi4uCisJKGdjcnlfcGtfZ2V0X25iaXRzKTogdGhpcyBuZXcgb25lLgorCitXZWQgRGVjICA4IDIxOjU4OjMyIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBkc2EuYzogcy9tcGlfcG93bS9nY3J5X21waV9wb3dtL2cKKwkqIGVsZ2FtYWwuYzogRGl0dG8uCisJKiBwcmltZWdlbi5jOiBEaXR0by4KKworCSogOiBSZXBsYWNlZCBnMTBfb3B0X3ZlcmJvc2UgYnkgZzEwX2xvZ192ZXJib3NpdHkoKS4KKworCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogcmVtb3ZlZCBpbnRsLCBhZGQgLi4vZ2NyeXB0CisKK0ZyaSBOb3YgMTkgMTc6MTU6MjAgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIGR5bmxvYWQuYyAoY21wX2ZpbGVuYW1lcyk6IE5ldyB0byByZXBsYWNlZCBjb21wYXJlX2ZpbGVuYW1lKCkgaW4KKwltb2R1bGUuCisJKHJlZ2lzdGVyX2NpcGhlcl9leHRlbnNpb24pOiBSZW1vdmVkIHRoZSB0aWxkZSBleHBhbnNpb24gc3R1ZmYuCisJKiBybmRlZy5jIChteV9tYWtlX2ZpbGVuYW1lKTogTmV3LgorCisJKiA6IFJlcGxhY2VkIGhlYWRlciB1dGlsLmggYnkgZzEwbGliLmgKKworCSogcmFuZG9tLmMgKGdhdGhlcl9mYWtlZCk6IFJlcGxhY2VkIG1ha2VfdGltZXN0YW1wIGJ5IHRpbWUoMikuCisJRGlzYWJsZWQgd3JuaW5nIHByaW50ZWQgd2l0aCB0dHlfcHJpbnRmLgorCSogcm5kbGludXguYyAoZ2F0aGVyX3JhbmRvbSk6IEFsd2F5cyB1c2UgZnByaW50ZiBpbnN0ZWFkIG9mIHR0eV94eHg7CisJdGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi4KKworCSogcHJpbWVnZW4uYyAoZ2VuX3ByaW1lKTogVXNlIGdjcnlfbXBpX3JhbmRvbWl6ZS4KKwkoaXNfcHJpbWUpOiBEaXR0by4KKwkqIGVsZ2FtYWwuYyAodGVzdF9rZXlzKTogRGl0dG8uCisJKiBkc2EuYyAodGVzdF9rZXlzKTogRGl0dG8uCisKKwkqIGNpcGhlci5jIChnY3J5X2NpcGhlcl9jbG9zZSk6IERpZSBvbiBpbnZhbGlkIGhhbmRsZS4KKworTW9uIE5vdiAxNSAyMTozNjowMiBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogZWxnYW1hbC5jIChnZW5fayk6IFVzZSB0aGUgbmV3IHJhbmRvbSBBUEkuCisJKGdlbmVyYXRlKTogRGl0dG8uCisJKiBkc2EuYyAoZ2VuX2spOiBEaXR0by4KKwkoZ2VuZXJhdGUpOiBEaXR0by4KKworU2F0IE5vdiAxMyAxNzo0NDoyMyBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogcHVia2V5LmMgKGRpc2FibGVfcHVia2V5X2FsZ28pOiBNYWRlIHN0YXRpYy4KKwkoZ2NyeV9wa19jdGwpOiBOZXcuCisKKwkqIHJhbmRvbS5jIChnZXRfcmFuZG9tX2JpdHMpOiBSZW5hbWVkIHRvIC4uLgorCShnZXRfcmFuZG9tX2J5dGVzKTogLi4uIHRoaXMgYW5kIG1hZGUgc3RhdGljLgorCShnY3J5X3JhbmRvbV9ieXRlcyk6IE5ldy4KKwkoZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlKTogTmV3LgorCShyYW5kb21pemVfYnVmZmVyKTogUmVuYW1lZCB0byAuLi4KKwkoZ2NyeV9yYW5kb21pemUpOiAuLi50aGlzLgorCisJKiBtZC5jIChnY3J5X21kX2hhc2hfYnVmZmVyKTogTmV3LgorCisJKiBwdWJrZXkuYyAoZ2NyeV9wa19hbGdvX2luZm8pOiA0IG5ldyBjb21tYW5kcy4KKwkocHVia2V5X2dldF9ucGtleSk6IE1hZGUgc3RhdGljLgorCShwdWJrZXlfZ2V0X25za2V5KTogTWFkZSBzdGF0aWMuCisJKHB1YmtleV9nZXRfbnNpZyk6IE1hZGUgc3RhdGljLgorCShwdWJrZXlfZ2V0X25lbmMpOiBNYWRlIHN0YXRpYy4KKworCSogcHVia2V5LmM6IFJlbW92ZWQgYWxsIEcxMEVSUl94eHguCisJKiBjaXBoZXIuYzogQ2hhbmdlZCBhbGwgR0NSWUVSUl9JTlZfQUxHTyB0byBHQ1JZRVJSX0lOVl9DSVBIRVJfQUxHTy4KKwkqIG1kLmM6IENoYW5nZWQgYWxsIEdDUllFUlJfSU5WX0FMR08gdG8gR0NSWUVSUl9JTlZfTURfQUxHTy4KKwkqIGNhc3Q1LmMgKGNhc3Rfc2V0a2V5KTogQ2hhbmdlZCBlcnJvY29kZXMgdG8gR0NSWUVSUl94eHguCisJKiBibG93ZmlzaC5jOiBEaXR0by4KKwkqIGRlcy5jOiBEaXR0by4KKwkqIHR3b2Zpc2guYzogRGl0dG8uCisJKiBkc2EuYzogRGl0dG8uCisJKiBlbGdhbWFsLmM6IERpdHRvLgorCisJKiBnMTBjLmM6IFJlbW92ZWQKKworCSogY2lwaGVyLmMgKGdjcnlfY2lwaGVyX29wZW4pOiBSZXBsYWNlZCBhbGxvYyBmdW5jdGlvbnMgYW5kIHJldHVybiBOVUxMCisJaWYgd2UgYXJlIG91dCBvZiBjb3JlLgorCSogZHlubG9hZC5jOiBSZXBsYWNlZCBhbGwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCSogbWQuYzogRGl0dG8uCisJKiBwcmltZWdlbi5jOiBEaXR0by4KKwkqIHB1YmtleS5jOiBEaXR0by4KKwkqIHJhbmRvbS5jOiBEaXR0by4KKwkqIHJuZHczMi5jOiBEaXR0by4KKwkqIGVsZ2FtYWwuYzogRGl0dG8uCisJKiBkc2EuYzogRGl0dG8uCisKK1R1ZSBPY3QgMjYgMTQ6MTA6MjEgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBlbGdhbWFsLmMgKHNpZ24pOiBIdWdoIGZvdW5kIHN0cmFuZ2UgY29kZSBoZXJlLiBSZXBsYWNlZCBieSBCVUcoKS4KKworCSogY2lwaGVyLmM6IE1lcmdlZCB3aXRoIGdjcnlwdC9zeW1hcGkuYy4KKworCSogcHVia2V5LmMgKHN0cmluZ190b19wdWJrZXlfYWxnbyk6IFJlbmFtZWQgZnVuY3Rpb24gdG8gLi4uCisJKGdjcnlfcGtfbWFwX25hbWUpOiAuLi4gdGhpcy4KKwkocHVia2V5X2FsZ29fdG9fc3RyaW5nKTogUmVuYW1lZCBmdW5jdGlvbiB0byAuLi4KKwkoZ2NyeV9wa19hbGdvX25hbWUpOiAuLi4gdGhpcy4KKwkoZ2NyeV9wa19hbGdvX2luZm8pOiBOZXcuCisJKiBwdWJrZXkuYzogTWVyZ2VkIHdpdGggZ2NyeXB0L3BrYXBpLmMuCisKKwkqIG1kLmMgKG1kX3Jlc2V0KTogQ2xlYXIgZmluYWxpemVkOyB0aGFua3MgdG8gVWxmIE1vZWxsZXIgZm9yCisJZml4aW5nIHRoaXMgYnVnLgorCisJKiBtZC5jOiBNZXJnZWQgd2l0aCBnY3J5cHQvbWRhcGkuYworCitXZWQgU2VwIDE1IDE0OjM5OjU5IENFU1QgMTk5OSAgTWljaGFlbCBSb3RoIDxtcm90aEBuZXNzaWUuZGU+CisKKwkqIGRlcy5jOiBWYXJpb3VzIHNwZWVkIGltcHJvdmVtZW50czogT25lIGJpdCBwcmUgcm90YXRpb24KKwkgIHRyaWNrIGFmdGVyIGluaXRpYWwgcGVybXV0YXRpb24gKFJpY2hhcmQgT3V0ZXJicmlkZ2UpLgorCSAgRmluaXNoZWQgdGVzdCBvZiBTU0xlYXkgVHJpcHBsZS1ERVMgcGF0dGVybnMuCisKK1dlZCBTZXAgMTUgMTY6MjI6MTcgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBybmR3MzIuYzogTmV3LgorCitNb24gU2VwIDEzIDEwOjUxOjI5IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogYml0aGVscC5oOiBOZXcuCisJKiBybWQxNjAuaCwgc2hhMS5oLCBtZDUuaDogVXNlIHRoZSByb2wgbWFjcm8gZnJvbSBiaXRoZWxwLmgKKworVHVlIFNlcCAgNyAxNjoyMzozNiBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBGaXhlZCBzZWRzIGZvciBsYXRlc3QgZWdjYy4gQnkgT2xsaXZpZXIgUm9iZXJ0LgorCitNb24gU2VwICA2IDE5OjU5OjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZGVzLmMgKHNlbGZ0ZXN0KTogQWRkIHNvbWUgdGVzdHBhdHRlcm4KKworTW9uIEF1ZyAzMCAyMDozODozMyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNpcGhlci5jIChkb19jYmNfZW5jcnlwdCk6IEZpeGVkIHNlcmlvdXMgYnVnIG9jY3VyaW5nIHdoZW4gbm90IHVzaW5nCisJaW4gcGxhY2UgZW5jcnlwdGlvbi4gUG9pbnRlZCBvdXQgYnkgRnJhbmsgU3RhamFuby4KKworTW9uIEp1bCAyNiAwOTozNDo0NiBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1kNS5jIChtZDVfZmluYWwpOiBGaXggZm9yIGEgU0NPIGNwcCBidWcuCisKK1RodSBKdWwgMTUgMTA6MTU6MzUgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBlbGdhbWFsLmMgKGVsZ19jaGVja19zZWNyZXRfa2V5LGVsZ19lbmNyeXB0CisJZWxnX2RlY3J5cHQsZWxnX3NpZ24sZWxnX3ZlcmlmeSk6IFNhbml0eSBjaGVjayBvbiB0aGUgYXJncy4KKwkqIGRzYS5jIChkc2FfY2hlY2tfc2VjcmV0X2tleSxkc2Ffc2lnbixkc2FfdmVyaWZ5KTogRGl0dG8uCisKKwkqIHB1YmtleS5jIChkaXNhYmxlX3B1YmtleV9hbGdvKTogTmV3LgorCShjaGVja19wdWJrZXlfYWxnbzIpOiBMb29rIGF0IGRpc2FibGVkIGFsZ28gdGFibGUuCisJKiBjaXBoZXIuYyAoZGlzYWJsZV9jaXBoZXJfYWxnbyk6IE5ldy4KKwkoY2hlY2tfY2lwaGVyX2FsZ28pOiBMb29rIGF0IGRpc2FibGVkIGFsZ28gdGFibGUuCisKK1dlZCBKdWwgIDcgMTM6MDg6NDAgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBNYWtlZmlsZS5hbTogU3VwcG9ydCBmb3IgbGlidG9vbC4KKworRnJpIEp1bCAgMiAxMTo0NTo1NCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGRzYS5jIChnZW5fayk6IENoYW5nZWQgYWxnb3JpdGhtIHRvIGNvbnN1bWUgbGVzcyByYW5kb20gYnl0ZXMKKwkqIGVsZ2FtYWwuYyAoZ2VuX2spOiBEaXR0by4KKworCSogcmFuZG9tLmMgKHJhbmRvbV9kdW1wX3N0YXRzKTogTmV3LgorCitUaHUgSnVsICAxIDEyOjQ3OjMxIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogcHJpbWVnZW4uYywgZWxnYW1hbC5jLCBkc2EuYyAocHJvZ2Vzcyk6IE5ldyBhbmQgcmVwbGFjZWQgYWxsCisJZnB1dGMgd2l0aCBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKworU2F0IEp1biAyNiAxMjoxNTo1OSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHJuZGVnZC5jIChkb193cml0ZSk6IHMvc3NpemVfdC9pbnQvIGR1ZSB0byBTdW5PUyA0LjEgcHJvYnMuCisKKwkqIGNpcGhlci5jIChkb19jYmNfZW5jcnlwdCwgZG9fY2JjX2RlY3J5cHQpOiBOZXcuCisKKwkqIGR5bmxvYWQuYyAoSEFWRV9ETF9TSExfTE9BRCk6IE1hcCBocHV4IEFQSSB0byBkbG9wZW4gKERhdmUgRHlrc3RyYSkuCisJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1leGVjLWhvb2spOiBSZW1vdmVkLgorCitTdW4gTWF5IDIzIDE0OjIwOjIyIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY2lwaGVyLmMgKHNldHVwX2NpcGhlcl90YWJsZSk6IEVuYWJsZSBUd29maXNoCisKKwkqIHJhbmRvbS5jIChmYXN0X3JhbmRvbV9wb2xsKTogRGlzYWJsZSB1c2Ugb2YgdGltZXMoKSBmb3IgbWluZ3czMi4KKworTW9uIE1heSAxNyAyMTo1NDo0MyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGR5bmxvYWQuYyAocmVnaXN0ZXJfaW50ZXJuYWxfY2lwaGVyX2V4dGVuc2lvbik6IE1pbm9yIGluaXQgZml4LgorCitUdWUgTWF5ICA0IDE1OjQ3OjUzIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogcHJpbWVnZW4uYyAoZ2VuX3ByaW1lKTogUmVhZGRlZCB0aGUgRmVybWF0IHRlc3QuIEZpeGVkIHRoZSBidWcKKwl0aGF0IHdlIGRpZG4ndCBjb3JyZWN0IGZvciBzdGVwIHdoZW4gcGFzc2luZyB0aGUgcHJpbWUgdG8gdGhlCisJUmFiaW4tTWlsbGVyIHRlc3Qgd2hpY2ggbGVkIHRvIGJhZCBwZXJmb3JtYW5jZSAoU3RlZmFuIEtlbGxlcikuCisJKGNoZWNrX3ByaW1lKTogQWRkIGEgZmlyc3QgRmVybWF0IHRlc3QuCisKK1N1biBBcHIgMTggMTA6MTE6MjggQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjaXBoZXIuYyAoY2lwaGVyX3NldGl2KTogQWRkIGl2bGVuIGFyZywgY2hhbmdlZCBhbGwgY2FsbGVycy4KKworCSogcmFuZG9tLmMgKHJhbmRvbWl6ZV9idWZmZXIpOiBhbHdheSB1c2Ugc2VjdXJlIG1lbW9yeSBiZWNhdXNlCisJd2UgY2FuJ3QgdXNlIG1faXNfc2VjdXJlKCkgb24gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIuCisKKwkqIHR3b2Zpc2guYzogUmVwbGFjZWQgc29tZSBtYWNyb3MgYnkgYSBsb29wIHRvIHJlZHVjZSB0ZXh0IHNpemUuCisJKiBNYWtlZmlsZS5hbSAodHdvZmlzaCk6IE5vIG1vcmUgbmVlZCBmb3Igc2VkIGVkaXRpbmcuCisKK0ZyaSBBcHIgIDkgMTI6MjY6MjUgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjaXBoZXIuYyAoY2lwaGVyX29wZW4pOiBSZXZlcnNlZCB0aGUgY2hhbmdlcyBmb3IgQVVUT19DRkIuCisKKwkqIGJsb3dmaXNoLmM6IERyb3BwZWQgdGhlIEJsb3dmaXNoIDE2MCBtb2RlLgorCSogY2lwaGVyLmMgKGNpcGhlcl9vcGVuKTogRGl0dG8uCisJKHNldHVwX2NpcGhlcl90YWJsZSk6IERpdHRvLiAgQW5kIHJlbW92ZWQgc3VwcG9ydCBvZiB0d29maXNoMTI4CisKK1dlZCBBcHIgIDcgMjA6NTE6MzkgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiByYW5kb20uYyAoZ2V0X3JhbmRvbV9iaXRzKTogQ2FuIG5vdyBoYW5kbGUgcmVxdWVzdHMgPiBQT09MU0laRQorCisJKiBjaXBoZXIuYyAoY2lwaGVyX29wZW4pOiBOb3cgdXNlcyBzdGFuZGFyZCBDRkIgZm9yIGF1dG9tb2RlIGlmCisJdGhlIGJsb2Nrc2l6ZSBpcyBndCA4IChhY2NvcmRpbmcgdG8gcmZjMjQ0MCkuCisKKwkqIHR3b2Zpc2guYzogQXBwbGllZCBNYXR0aGV3IFNrYWxhJ3MgcGF0Y2hlcyBmb3IgMjU2IGJpdCBrZXkuCisKK1R1ZSBBcHIgIDYgMTk6NTg6MTIgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiByYW5kb20uYyAoZ2V0X3JhbmRvbV9iaXRzKTogQ2FuIG5vdyBoYW5kbGUgcmVxdWVzdHMgPiBQT09MU0laRQorCisJKiBjaXBoZXIuYyAoY2lwaGVyX29wZW4pOiBOb3cgdXNlcyBzdGFuZGFyZCBDRkIgZm9yIGF1dG9tb2RlIGlmCisJdGhlIGJsb2Nrc2l6ZSBpcyBndCA4IChhY2NvcmRpbmcgdG8gcmZjMjQ0MCkuCisKK1NhdCBNYXIgMjAgMTE6NDQ6MjEgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHJuZGxpbnV4LmMgKHR0eV9wcmludGYpIFtJU19NT0RVTEVdOiBSZW1vdmVkLgorCisJKiBybmRlZ2QuYyAoZ2F0aGVyX3JhbmRvbSk6IFNvbWUgZml4ZXMuCisKK1dlZCBNYXIgMTcgMTM6MDk6MDMgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHJuZGVnZC5jIChkb19yZWFkKTogTmV3LgorCShnYXRoZXJfcmFuZG9tKTogQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24uCisKK01vbiBNYXIgIDggMjA6NDc6MTcgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGR5bmxvYWQuYyAoRExTWU1fTkVFRFNfVU5ERVJTQ09SRSk6IFJlbmFtZWQuCisKK0ZyaSBGZWIgMjYgMTc6NTU6NDEgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1kLmM6IE5lYXJseSBhIHRvdGFsIHJld3JvdGUuCisKK1dlZCBGZWIgMjQgMTE6MDc6MjcgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGNpcGhlci5jIChjb250ZXh0KTogRml4ZWQgYWxpZ25tZW50CisJKiBtZC5jOiBEaXR0by4KKworCSogcm5kZWdkLmM6IE5ldworCitNb24gRmViIDIyIDIwOjA0OjAwIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBybmRlZ2QuYzogTmV3LgorCitXZWQgRmViIDEwIDE3OjE1OjM5IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBNYWtlZmlsZS5hbTogTW9kdWxlcyBhcmUgbm93IGZpZ3VyZWQgb3V0IGJ5IGNvbmZpZ3VyZQorCSogY29uc3RydWN0LmM6IE5ldy4gR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gQ2hhbmdlZCBhbGwgbW9kdWxlcworCXRvIHdvcmsgd2l0aCB0aGF0LgorCSogc2hhMS5oOiBSZW1vdmVkLgorCSogbWQ1Lmg6IFJlbW92ZWQuCisKKwkqIHR3b2Zpc2guYzogQ2hhbmdlZCBpbnRlcmZhY2UgdG8gYWxsb3cgVHdvZmlzaC8yNTYKKworCSogcm5kdW5peC5jIChzdGFydF9nYXRoZXJlcik6IERpZSBvbiBTSUdQSVBFLgorCitXZWQgSmFuIDIwIDE4OjU5OjQ5IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBybmR1bml4LmMgKGdhdGhlcl9yYW5kb20pOiBGaXggdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKworU3VuIEphbiAxNyAxMTowNDozMyBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZGVzLmMgKGlzX3dlYWtfa2V5KTogUmVwbGFjZSBzeXN0ZW0gbWVtY21wIGR1ZSB0byBidWdzCisJaW4gU3VuT1MncyBtZW1jbXAuCisJKGRlc19nZXRfaW5mbyk6IFJldHVybiBlcnJvciBvbiBmYWlsZWQgc2VsZnRlc3QuCisJKiB0d29maXNoLmMgKHR3b2Zpc2hfc2V0a2V5KTogUmV0dXJuIGVycm9yIG9uIGZhaWxlZCBzZWxmdGVzdCBvcgorCWludmFsaWQga2V5bGVuZ3RoLgorCSogY2FzdDUuYyAoY2FzdF9zZXRrZXkpOiBEaXR0by4KKwkqIGJsb3dmaXNoLmMgKGJmX3NldGtleSk6IFJldHVybiBlcnJvciBvbiBmYWlsZWQgc2VsZnRlc3QuCisKK1R1ZSBKYW4gMTIgMTE6MTc6MTggQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHJhbmRvbS5jIChyYW5kb21faXNfZmFrZWQpOiBOZXcuCisKKwkqIHRpZ2VyLmM6IE9ubHkgY29tcGlsZSBpZiB3ZSBoYXZlIHRoZSB1NjQgdHlwZQorCitTYXQgSmFuICA5IDE2OjAyOjIzIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBybmR1bml4LmMgKGdhdGhlcl9yYW5kb20pOiBjaGVjayBmb3Igc2V0dWlkLgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGEgd2F5IHRvIHN0YWljYWxseSBsaW5rIHJhbmRvbSBtb2R1bGVzCisKK1RodSBKYW4gIDcgMTg6MDA6NTggQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1kLmMgKG1kX3N0b3BfZGVidWcpOiBEbyBhIGZsdXNoIGZpcnN0LgorCShtZF9vcGVuKTogc2l6ZSBvZiBidWZmZXIgbm93IGRlcGVuZHMgb24gdGhlIHNlY3VyZSBwYXJhbWV0ZXIKKworU3VuIEphbiAgMyAxNToyODo0NCBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogcm5kdW5peC5jIChzdGFydF9nYXRoZXJlcik6IEZpeGVkIHN0dXBpZCA9PS89IGJ1ZworCisxOTk4LTEyLTMxICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgorCisJKiBkZXMuYyAoaXNfd2Vha19rZXkpOiBSZXdyaXRlIGxvb3AgZW5kIGNvbmRpdGlvbi4KKworVHVlIERlYyAyOSAxNDo0MTo0NyBDRVQgMTk5OCAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogcmFuZG9tLmM6IGFkZCB1bmlzdGQuaCBmb3IgZ2V0cGlkKCkuCisJKFJBTkRfTUFYKTogRmFsbGJhY2sgdmFsdWUgZm9yIFN1bi4KKworV2VkIERlYyAyMyAxNzoxMjoyNCBDRVQgMTk5OCAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogbWQuYyAobWRfY29weSk6IFJlc2V0IGRlYnVnLgorCitNb24gRGVjIDE0IDIxOjE4OjQ5IENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiByYW5kb20uYyAocmVhZF9yYW5kb21fc291cmNlKTogQ2hhbmdlZCB0aGUgaW50ZXJmYWNlIHRvIHRoZQorCXJhbmRvbSBnYXRoZXJpbmcgZnVuY3Rpb24uCisJKGdhdGhlcl9mYWtlZCk6IFVzZSBuZXcgaW50ZXJmYWNlLgorCSogZHlubG9hZC5jIChkeW5sb2FkX2dldGZuY19mYXN0X3JhbmRvbV9wb2xsKTogRGl0dG8uCisJKGR5bmxvYWRfZ2V0Zm5jX2dhdGhlcl9yYW5kb20pOiBEaXR0by4KKwkqIHJuZGxpbnV4LmMgKGdhdGhlcl9yYW5kb20pOiBEaXR0by4KKwkqIHJuZHVuaXguYyAoZ2F0aGVyX3JhbmRvbSk6IERpdHRvLgorCitTYXQgRGVjIDEyIDE4OjQwOjMyIENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBkeW5sb2FkLmMgKFNZTUJPTF9WRVJTSU9OKTogTmV3IHRvIGNvcGUgd2l0aCBzeXN0ZW0gd2hpY2ggbmVlZHMKKwl1bmRlcnNjb3Jlcy4KKworCSogcm5kdW5peC5jOiBSZXdyb3RlIGxhcmdlIHBhcnRzCisKK1RodSBEZWMgMTAgMjA6MTU6MzYgQ0VUIDE5OTggIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGR5bmxvYWQuYyAobG9hZF9leHRlbnNpb24pOiBpbmNyZWFzZWQgbmVlZGVkIHZlcmJvc2l0eSBsZXZlbC4KKworCSogcmFuZG9tLmMgKGZhc3RfcmFuZG9tX3BvbGwpOiBGYWxsYmFjayB0byBhIGRlZmF1bHQgZmFzdCByYW5kb20KKwlwb2xsIGZ1bmN0aW9uLgorCShyZWFkX3JhbmRvbV9zb3VyY2UpOiBBbHdheXMgdXNlIHRoZSBmYWtlZCBlbnRyb3kgZ2F0aGVyZXIgaWYgbm8KKwlnYXRoZXIgbW9kdWxlIGlzIGF2YWlsYWJsZS4KKwkqIHJuZGxpbnV4LmMgKGZhc3RfcG9sbCk6IFJlbW92ZWQuCisJKiBybmR1bml4LmMgKGZhc3RfcG9sbCk6IFJlbW92ZWQuCisKKworV2VkIE5vdiAyNSAxMjozMzo0MSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiByYW5kLSouYzogUmVtb3ZlZC4KKwkqIHJuZGxpbnV4LmMgOiBOZXcuCisJKiBybmR1bml4LmMgOiBOZXcuCisJKiByYW5kb20uYyA6IFJlc3RydWN0dXJlZCB0aGUgaW50ZXJmYWNlIHRvIHRoZSBnYXRoZXIgbW9kdWxlcy4KKwkoaW50aWFsaXplKTogQ2FsbCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKwkocmVhZF9yYWRub21fc291cmNlKTogTW92ZWQgdG8gaGVyZS4KKwkqIGR5bmxvYWQuYyAoZHlubG9hZF9nZXRmbmNfZ2F0aGVyX3JhbmRvbSk6IE5ldy4KKwkoZHlubG9hZF9nZXRmbmNfZmFzdF9yYW5kb21fcG9sbCk6IE5ldy4KKwkocmVnaXN0ZXJfaW50ZXJuYWxfY2lwaGVyX2V4dGVuc2lvbik6IE5ldy4KKwkocmVnaXN0ZXJfY2lwaGVyX2V4dGVuc2lvbik6IFN1cHBvcnQgb2YgaW50ZXJuYWwgbW9kdWxlcy4KKworU3VuIE5vdiAgOCAxNzo0NDozNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiByYW5kLXVuaXguYyAocmVhZF9yYW5kb21fc291cmNlKTogUmVtb3ZlZCB0aGUgYXNzZXJ0LgorCitNb24gT2N0IDE5IDE4OjM0OjMwIDE5OTggIG1lLCwsICAod2tAdG9ib2xkKQorCisJKiBwdWJrZXkuYzogSGFjayB0byBhbGxvdyB1cyB0byBnaXZlIHNvbWUgaW5mbyBhYm91dCBSU0Ega2V5cyBiYWNrLgorCitUaHUgT2N0IDE1IDExOjQ3OjU3IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGR5bmxvYWQuYzogU3VwcG9ydCBmb3IgRExECisKK1dlZCBPY3QgMTQgMTI6MTM6MDcgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogcmFuZC11bml4LmM6IE5vdyB1c2VzIG5hbWVzIGZyb20gY29uZmlndXJlIGZvciAvZGV2L3JhbmRvbS4KKworMTk5OC0xMC0xMCAgU0wgQmF1ciAgPHN0ZXZlQGFsdGFpci54ZW1hY3Mub3JnPgorCisJKiBNYWtlZmlsZS5hbTogZml4IHNlZCAtTyBzdWJzdGl0dXRpb25zIHRvIGNhdGNoIC1PNiwgZXRjLgorCitUdWUgT2N0ICA2IDEwOjA2OjMyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJhbmQtdW5peC5jIChIQVZFX0dFVFRJTUVPRkRBWSk6IEZpeGVkICh3YXMgLi5HRVRUSU1FT0ZUSU1FIDotKQorCSogcmFuZC1kdW1teS5jIChIQVZFX0dFVFRJTUVPRkRBWSk6IERpdHRvLgorCitNb24gU2VwIDI4IDEzOjIzOjA5IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1kLmMgKG1kX2RpZ2VzdCk6IE5ldy4KKwkobWRfcmVzZXQpOiBOZXcuCisKK1dlZCBTZXAgMjMgMTI6Mjc6MDIgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogdGlnZXIuYyAoVElHRVJfQ09OVEVYVCk6IG1vdmVkICJidWYiLCBzbyB0aGF0IGl0IGlzIDY0IGJpdCBhbGlnbmVkLgorCitNb24gU2VwIDIxIDA2OjIyOjUzIDE5OTggIFdlcm5lciBLb2NoICAod2tAKG5vbmUpKQorCisJKiBkZXMuYzogU29tZSBwYXRjaGVzIGZyb20gTWljaGFlbC4KKworVGh1IFNlcCAxNyAxOTowMDowNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQChub25lKSkKKworCSogZGVzLmMgOiBOZXcgZmlsZSBmcm9tIE1pY2hhZWwgUm90aCA8bXJvdGhAbmVzc2llLmRlPgorCitNb24gU2VwIDE0IDExOjEwOjU1IDE5OTggIFdlcm5lciBLb2NoICAod2tAKG5vbmUpKQorCisJKiBibG93ZmlzaC5jIChiZl9zZXRrZXkpOiBOaWtsYXMgSGVybmFldXMgcGF0Y2ggdG8gZGV0ZWN0IHdlYWsga2V5cy4KKworTW9uIFNlcCAxNCAwOToxOToyNSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQChub25lKSkKKworCSogZHlubG9hZC5jIChSVExEX05PVyk6IE5vdyBkZWZpbmVkIHRvIDEgaWYgaXQgaXMgdW5kZWZpbmVkLgorCitNb24gU2VwICA3IDE3OjA0OjMzIDE5OTggIFdlcm5lciBLb2NoICAod2tAKG5vbmUpKQorCisJKiBNYWtlZmlsZS5hbTogRml4ZXMgdG8gYWxsb3cgYSBkaWZmZXJlbnQgYnVpbGQgZGlyZWN0b3J5CisKK1RodSBBdWcgIDYgMTc6MjU6MzggMTk5OCAgV2VybmVyIEtvY2gsbW9iaWwsLCwJKHdrQHRvYm9sZCkKKworCSogcmFuZG9tLmMgKGdldF9yYW5kb21fYnl0ZSk6IFJlbW92ZWQgYW5kIGNoYW5nZWQgYWxsIGNhbGxlcnMKKwl0byB1c2UgZ2V0X3JhbmRvbV9iaXRzKCkKKworTW9uIEp1bCAyNyAxMDozMDoyMiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQChub25lKSkKKworCSogY2lwaGVyLmMgOiBTdXBwb3J0IGZvciBvdGhlciBibG9ja3NpemVzCisJKGNpcGhlcl9nZXRfYmxvY2tzaXplKTogTmV3LgorCSogdHdvZmlzaC5jOiBOZXcuCisJKiBNYWtlZmlsZS5hbTogQWRkIHR3b2Zpc2ggbW9kdWxlLgorCitNb24gSnVsIDEzIDIxOjMwOjUyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJhbmRvbS5jIChyZWFkX3Bvb2wpOiBTaW1wbGUgYWxsb2MgaWYgc2VjdXJlX2FsbG9jIGlzIG5vdCBzZXQuCisJKGdldF9yYW5kb21fYml0cyk6IERpdHRvLgorCitUaHUgSnVsICA5IDEzOjAxOjE0IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGR5bmxvYWQuYyAobG9hZF9leHRlbnNpb24pOiBGdW5jdGlvbiBub3cgbmJhaWxzIG91dCBpZgorCXRoZSBwcm9ncmFtIGlzIHJ1biBzZXR1aWQuCisKK1dlZCBKdWwgIDggMTg6NTg6MjMgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogcm1kMTYwLmMgKHJtZDE2MF9oYXNoX2J1ZmZlcik6IE5ldy4KKworVGh1IEp1bCAgMiAxMDo1MDozMCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjaXBoZXIuYyAoY2lwaGVyX29wZW4pOiBhbGdvcyA+PTEwMCB1c2Ugc3RhbmRhcmQgQ0ZCCisKK1RodSBKdW4gMjUgMTE6MTg6MjUgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogTWFrZWZpbGUuYW06IFN1cHBvcnQgZm9yIGV4dGVuc2lvbnMKKworVGh1IEp1biAxOCAxMjowOTozOCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiByYW5kb20uYyAobWl4X3Bvb2wpOiBzaW1wbGVyIGhhbmRsaW5nIGZvciBsZXZlbCAwCisKK01vbiBKdW4gMTUgMTQ6NDA6NDggMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogdGlnZXIuYzogUmVtb3ZlZCBmcm9tIGRpc3QsIHdpbGwgcmVhcHBlYXIgYXMgZHlubG9hZCBtb2R1bGUKKworU2F0IEp1biAxMyAxNDoxNjo1NyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBwdWJrZXkuYzogTWFqb3IgY2hhbmdlcyB0byBhbGxvdyBleHRlbnNpb25zLiBDaGFuZ2VkIHRoZSBpbnRlZmFjZQorCW9mIGFsbCBwdWJsaWMga2V5IGNpcGhlcnMgYW5kIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGxvYWQgZXh0ZW5zaW9ucworCW9uIGRlbWFuZC4KKworCSogbWlzYy5jOiBSZW1vdmVkLgorCitXZWQgSnVuIDEwIDA3OjUyOjA4IDE5OTggIFdlcm5lciBLb2NoLG1vYmlsLCwsCSh3a0B0b2JvbGQpCisKKwkqIGR5bmxvYWQuYzogTmV3LgorCSogY2lwaGVyLmM6IE1ham9yIGNoYW5nZXMgdG8gYWxsb3cgZXh0ZW5zaW9ucy4KKworTW9uIEp1biAgOCAyMjo0MzowMCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjaXBoZXIuYzogTWFqb3IgaW50ZXJuYWwgY2huYWdlcyB0byBzdXBwb3J0IGV4dGVuc2lvbnMuCisJKiBibG93ZmlzaC5jIChibG93ZmlzaF9nZXRfaW5mbyk6IE5ldyBhbmQgbWFkZSBhbGwgaW50ZXJuYWwKKwlmdW5jdGlvbnMgc3RhdGljLCBjaGFuZ2VkIGhlZGVyLgorCSogY2FzdDUuYyAoY2FzdDVfZ2V0X2luZm8pOiBMaWtld2lzZS4KKworTW9uIEp1biAgOCAxMjoyNzo1MiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiB0aWdlci5jICh0cmFuc2Zvcm0pOiBGaXggZm9yIGJpZyBlbmRpYW4KKworCSogY2lwaGVyLmMgKGRvX2NmYl9kZWNyeXB0KTogQmlnIGVuZGlhbiBmaXguCisKK0ZyaSBNYXkgMjIgMDc6MzA6MzkgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogbWQuYyAobWRfZ2V0X29pZCk6IEFkZCBhIG5ldyBvbmUgZm9yIFRJR0VSLgorCitUaHUgTWF5IDIxIDEzOjI0OjUyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNpcGhlci5jOiBBZGQgc3VwcG9ydCBmb3IgYSBkdW1teSBjaXBoZXIKKworVGh1IE1heSAxNCAxNTo0MDozNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBybWQxNjAuYyAodHJhbnNmb3JtKTogZml4ZWQgc2lnYnVzIC0gSSBzaG91bGQgYmV0dGVyCisJYWRkIENocmlzdGlhbiB2b24gUm9xdWVzJ3MgbmV3IGltcGxlbWVuYXRpb24gb2Ygcm1kMTYwX3dyaXRlLgorCitGcmkgTWF5ICA4IDE4OjA3OjQ0IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJhbmQtaW50ZXJuYWwuaCwgcmFuZC11bml4LmMsIHJhbmQtdzMyLmMsIHJhbmRfZHVtbXkuYzogTmV3CisJKiByYW5kb20uYzogTW92ZWQgc3lzdGVtIHNwZWNpZmljIGZ1bmN0aW9ucyB0byByYW5kLSoqKiouYworCitGcmkgTWF5ICA4IDE0OjAxOjE3IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJhbmRvbS5jIChmYXN0X3JhbmRvbV9wb2xsKTogYWRkIGNhbGwgdG8gZ2V0aHJ0aW1lLgorCitUdWUgTWF5ICA1IDIxOjI4OjU1IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGVsZ2FtYWwuYyAoZWxnX2dlbmVyYXRlKTogY2hvb3NpbmcgeCB3YXMgbm90IGNvcnJlY3QsIGNvdWxkCisJeWllbGQgNiBieXRlcyB3aGljaCBhcmUgbm90IGZyb20gdGhlIHJhbmRvbSBwb29sLCB0c3NzLCB0c3NzLi4KKworVHVlIE1heSAgNSAxNDowOTowNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBwcmltZWdlbi5jIChnZW5lcmF0ZV9lbGdfcHJpbWUpOiBBZGQgYXJnIG1vZGUsIGNoYW5nZWQgYWxsCisJY2FsbGVycyBhbmQgaW1wbGVtZW50ZWQgbW9kZSAxLgorCitNb24gQXByIDI3IDE0OjQxOjU4IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNpcGhlci5jIChjaXBoZXJfZ2V0X2tleWxlbik6IE5ldy4KKworU3VuIEFwciAyNiAxNDo0NDo1MiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiB0aWdlci5jLCB0aWdlci5oOiBOZXcuCisKK1dlZCBBcHIgIDggMTQ6NTc6MTEgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogbWlzYy5jIChjaGVja19wdWJrZXlfYWxnbzIpOiBOZXcuCisKK1R1ZSBBcHIgIDcgMTg6NDY6NDkgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY2lwaGVyLmM6IE5ldworCSogbWlzYy5jIChjaGVja19jaXBoZXJfYWxnbyk6IE1vdmVkIHRvIGNpcGhlci5jCisJKiBjYXN0NS5jOiBNb3ZlZCBtYW55IGZ1bmN0aW9ucyB0byBjaXBoZXIuYworCSogYmxvd2Zpc2guYzogTGlrZXdpc2UuCisKK1NhdCBBcHIgIDQgMTk6NTI6MDggMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY2FzdDUuYzogSW1wbGVtZW50ZWQgYW5kIHRlc3RlZC4KKworV2VkIEFwciAgMSAxNjozODoyNyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBlbGdhbWFsLmMgKGVsZ19nZW5lcmF0ZSk6IEZhc3RlciBnZW5lcmF0aW9uIG9mIHggaW4gc29tZSBjYXNlcy4KKworVGh1IE1hciAxOSAxMzo1NDo0OCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBibG93ZmlzaC5jIChibG93ZmlzaF9kZWNvZGVfY2ZiKTogY2hhbmdlZCBYT1Igb3BlcmF0aW9uCisJKGJsb3dmaXNoX2VuY29kZV9jZmIpOiBEaXR0by4KKworVGh1IE1hciAxMiAxNDowNDowNSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBzaGExLmMgKHRyYW5zZm9ybSk6IFJld3JvdGUKKworCSogYmxvd2Zpc2guYyAoZW5jcnlwdCk6IFVucm9sbGVkIGZvciByb3VuZHMgPT0gMTYKKwkoZGVjcnlwdCk6IERpdHRvLgorCitUdWUgTWFyIDEwIDE2OjMyOjA4IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJtZDE2MC5jICh0cmFuc2Zvcm0pOiBVbnJvbGxlZCB0aGUgbG9vcC4KKworVHVlIE1hciAxMCAxMzowNToxNCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiByYW5kb20uYyAocmVhZF9wb29sKTogQWRkIHBvb2xfYmFsYW5jZSBzdHVmZi4KKwkoZ2V0X3JhbmRvbV9iaXRzKTogTmV3LgorCisJKiBlbGdhbWFsLmMgKGVsZ19nZW5lcmF0ZSk6IE5vdyB1c2VzIGdldF9yYW5kb21fYml0cyB0byBnZW5lcmF0ZSB4LgorCisKK1R1ZSBNYXIgMTAgMTE6MzM6NTEgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogbWQuYyAobWRfZGlnZXN0X2xlbmd0aCk6IE5ldy4KKworVHVlIE1hciAxMCAxMToyNzo0MSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBkc2EuYyAoZHNhX3ZlcmlmeSk6IFdvcmtzLgorCitNb24gTWFyICA5IDEyOjU5OjA4IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGRzYS5jLCBkc2EuaDogUmVtb3ZlZCBzb21lIHVudXNlZCBjb2RlLgorCitXZWQgTWFyICA0IDEwOjM5OjIyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1kLmMgKG1kX29wZW4pOiBBZGQgY2FsbCB0byBmYXN0X3JhbmRvbV9wb2xsLgorCWJsb3dmaXNoLmMgKGJsb3dmaXNoX3NldGtleSk6IERpdHRvLgorCitUdWUgTWFyICAzIDEzOjMyOjU0IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIHJtZDE2MC5jIChybWQxNjBfbWl4YmxvY2spOiBOZXcuCisJKiByYW5kb20uYzogUmVzdHJ1Y3R1cmVkIHRvIHN0YXJ0IHdpdGggYSBuZXcgUk5HIGltcGxlbWVudGF0aW9uLgorCSogcmFuZG9tLmg6IE5ldy4KKworTW9uIE1hciAgMiAxOToyMTo0NiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBnb3N0LmMsIGdvc3QuaDogUmVtb3ZlZCBiZWNhdXNlIHRoZXkgZGlkIG9ubHkgY29udGFpbiB0cmFzaC4KKworU3VuIE1hciAgMSAxNjo0MjoyOSAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiByYW5kb20uYyAoZmlsbF9idWZmZXIpOiByZW1vdmVkIGVycm9yIG1lc3NhZ2UgaWYgbiA9PSAtMS4KKworRnJpIEZlYiAyNyAxNjozOTozNCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtZC5jIChtZF9lbmFibGUpOiBObyBpbml0IGlmIGNhbGxlZCB0d2ljZS4KKworVGh1IEZlYiAyNiAwNzo1NzowMiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBwcmltZWdlbi5jIChnZW5lcmF0ZV9lbGdfcHJpbWUpOiBDaGFuZ2VkIHRoZSBwcm9ncmVzcyBwcmludGluZy4KKwkoZ2VuX3ByaW1lKTogRGl0dG8uCisKK1R1ZSBGZWIgMjQgMTI6Mjg6NDIgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogbWQ1LmMsIG1kLjUgOiBSZXBsYWNlZCBieSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgbWQ1LmMgZnJvbQorCUdOVSB0ZXh0dXRpbHMgMS4yMi4KKworV2VkIEZlYiAxOCAxNDowODozMCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtZC5jLCBtZC5oIDogTmV3IGRlYnVnZ2luZyBzdXBwb3J0CisKK01vbiBGZWIgMTYgMTA6MDg6NDcgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogbWlzYy5jIChjaXBoZXJfYWxnb190b19zdHJpbmcpOiBOZXcKKwkocHVia2V5X2FsZ29fdG9fc3RyaW5nKTogTmV3LgorCShkaWdlc3RfYWxnb190b19zdHJpbmcpOiBOZXcuCisKKworIENvcHlyaWdodCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisJICAgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0xvY2FsIFZhcmlhYmxlczoKK2J1ZmZlci1yZWFkLW9ubHk6IHQKK0VuZDoKZGlmZiAtLWdpdCBhL2NpcGhlci9NYWtlZmlsZS5hbSBiL2NpcGhlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYyZDNjCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTA0IEBACisjIE1ha2VmaWxlIGZvciBjaXBoZXIgbW9kdWxlcworIyBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjICAgICAgICAgICAgICAgMjAwMywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisKK0VYVFJBX0RJU1QgPSBNYW5pZmVzdAorCisjIE5lZWQgdG8gaW5jbHVkZSAuLi9zcmMgaW4gYWRkaXRpb24gdG8gdG9wX3NyY2RpciBiZWNhdXNlIGdjcnlwdC5oIGlzCisjIGEgYnVpbHQgaGVhZGVyLgorQU1fQ1BQRkxBR1MgPSAtSS4uL3NyYyAtSSQodG9wX3NyY2Rpcikvc3JjCitBTV9DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpCisKK0FNX0NDQVNGTEFHUyA9ICQoTk9FWEVDU1RBQ0tfRkxBR1MpCisKKworbm9pbnN0X0xUTElCUkFSSUVTID0gbGliY2lwaGVyLmxhCisKK0dDUllQVF9NT0RVTEVTID0gQEdDUllQVF9DSVBIRVJTQCBAR0NSWVBUX1BVQktFWV9DSVBIRVJTQCBcCisgICAgICAgICAgICAgICAgIEBHQ1JZUFRfRElHRVNUU0AgQEdDUllQVF9LREZTQAorCitsaWJjaXBoZXJfbGFfREVQRU5ERU5DSUVTID0gJChHQ1JZUFRfTU9EVUxFUykKK2xpYmNpcGhlcl9sYV9MSUJBREQgPSAkKEdDUllQVF9NT0RVTEVTKQorCitsaWJjaXBoZXJfbGFfU09VUkNFUyA9IFwKK2NpcGhlci5jIGNpcGhlci1pbnRlcm5hbC5oIFwKK2NpcGhlci1jYmMuYyBjaXBoZXItY2ZiLmMgY2lwaGVyLW9mYi5jIGNpcGhlci1jdHIuYyBjaXBoZXItYWVzd3JhcC5jIFwKK2NpcGhlci1jY20uYyBjaXBoZXItY21hYy5jIGNpcGhlci1nY20uYyBcCitjaXBoZXItc2VsZnRlc3QuYyBjaXBoZXItc2VsZnRlc3QuaCBcCitwdWJrZXkuYyBwdWJrZXktaW50ZXJuYWwuaCBwdWJrZXktdXRpbC5jIFwKK21kLmMgXAorbWFjLmMgbWFjLWludGVybmFsLmggXAorbWFjLWhtYWMuYyBtYWMtY21hYy5jIG1hYy1nbWFjLmMgXAora2RmLmMga2RmLWludGVybmFsLmggXAoraG1hYy10ZXN0cy5jIFwKK2JpdGhlbHAuaCAgXAorYnVmaGVscC5oICBcCitwcmltZWdlbi5jICBcCitoYXNoLWNvbW1vbi5jIGhhc2gtY29tbW9uLmggXAorZHNhLWNvbW1vbi5jIHJzYS1jb21tb24uYyBcCitybWQuaAorCitFWFRSQV9saWJjaXBoZXJfbGFfU09VUkNFUyA9IFwKK2FyY2ZvdXIuYyBcCitibG93ZmlzaC5jIGJsb3dmaXNoLWFtZDY0LlMgYmxvd2Zpc2gtYXJtLlMgXAorY2FzdDUuYyBjYXN0NS1hbWQ2NC5TIGNhc3Q1LWFybS5TIFwKK2NyYy5jIFwKK2Rlcy5jIFwKK2RzYS5jIFwKK2VsZ2FtYWwuYyBcCitlY2MuYyBlY2MtY3VydmVzLmMgZWNjLW1pc2MuYyBlY2MtY29tbW9uLmggXAorZWNjLWVjZHNhLmMgZWNjLWVkZHNhLmMgZWNjLWdvc3QuYyBcCitpZGVhLmMgXAorZ29zdDI4MTQ3LmMgZ29zdC5oIFwKK2dvc3RyMzQxMS05NC5jIFwKK21kNC5jIFwKK21kNS5jIFwKK3Jpam5kYWVsLmMgcmlqbmRhZWwtdGFibGVzLmggcmlqbmRhZWwtYW1kNjQuUyByaWpuZGFlbC1hcm0uUyBcCitybWQxNjAuYyBcCityc2EuYyBcCitzYWxzYTIwLmMgc2Fsc2EyMC1hbWQ2NC5TIHNhbHNhMjAtYXJtdjctbmVvbi5TIFwKK3NjcnlwdC5jIFwKK3NlZWQuYyBcCitzZXJwZW50LmMgc2VycGVudC1zc2UyLWFtZDY0LlMgc2VycGVudC1hdngyLWFtZDY0LlMgc2VycGVudC1hcm12Ny1uZW9uLlMgXAorc2hhMS5jIHNoYTEtc3NzZTMtYW1kNjQuUyBcCitzaGEyNTYuYyBzaGEyNTYtc3NzZTMtYW1kNjQuUyBcCitzaGE1MTIuYyBzaGE1MTItc3NzZTMtYW1kNjQuUyBzaGE1MTItYXZ4LWFtZDY0LlMgc2hhNTEyLWF2eDItYm1pMi1hbWQ2NC5TIFwKKyAgc2hhNTEyLWFybXY3LW5lb24uUyBcCitzdHJpYm9nLmMgXAordGlnZXIuYyBcCit3aGlybHBvb2wuYyBcCit0d29maXNoLmMgdHdvZmlzaC1hbWQ2NC5TIHR3b2Zpc2gtYXJtLlMgXAorcmZjMjI2OC5jIFwKK2NhbWVsbGlhLmMgY2FtZWxsaWEuaCBjYW1lbGxpYS1nbHVlLmMgY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LlMgXAorICBjYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LlMgY2FtZWxsaWEtYXJtLlMKKworaWYgRU5BQkxFX09fRkxBR19NVU5HSU5HCitvX2ZsYWdfbXVuZ2luZyA9IHNlZCAtZSAncy8tT1woWzItOXNdWzItOXNdKlwpLy1PMS8nIC1lICdzLy1PZmFzdC8tTzEvZycKK2Vsc2UKK29fZmxhZ19tdW5naW5nID0gY2F0CitlbmRpZgorCisKKyMgV2UgbmVlZCB0byBsb3dlciB0aGUgb3B0aW1pemF0aW9uIGZvciB0aGlzIG1vZHVsZS4KK3RpZ2VyLm86ICQoc3JjZGlyKS90aWdlci5jCisJYGVjaG8gJChDT01QSUxFKSAtYyAkKHNyY2RpcikvdGlnZXIuYyB8ICQob19mbGFnX211bmdpbmcpIGAKKwordGlnZXIubG86ICQoc3JjZGlyKS90aWdlci5jCisJYGVjaG8gJChMVENPTVBJTEUpIC1jICQoc3JjZGlyKS90aWdlci5jIHwgJChvX2ZsYWdfbXVuZ2luZykgYApkaWZmIC0tZ2l0IGEvY2lwaGVyL01ha2VmaWxlLmluIGIvY2lwaGVyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjIwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NzEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBNYWtlZmlsZSBmb3IgY2lwaGVyIG1vZHVsZXMKKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAgICAgICAgICAgICAgIDIwMDMsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorCitWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gY2lwaGVyCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2dwZy1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9jay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25vZXhlY3N0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc29ja2xlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N5c19zb2NrZXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYW1fbGliY2lwaGVyX2xhX09CSkVDVFMgPSBjaXBoZXIubG8gY2lwaGVyLWNiYy5sbyBjaXBoZXItY2ZiLmxvIFwKKwljaXBoZXItb2ZiLmxvIGNpcGhlci1jdHIubG8gY2lwaGVyLWFlc3dyYXAubG8gY2lwaGVyLWNjbS5sbyBcCisJY2lwaGVyLWNtYWMubG8gY2lwaGVyLWdjbS5sbyBjaXBoZXItc2VsZnRlc3QubG8gcHVia2V5LmxvIFwKKwlwdWJrZXktdXRpbC5sbyBtZC5sbyBtYWMubG8gbWFjLWhtYWMubG8gbWFjLWNtYWMubG8gXAorCW1hYy1nbWFjLmxvIGtkZi5sbyBobWFjLXRlc3RzLmxvIHByaW1lZ2VuLmxvIGhhc2gtY29tbW9uLmxvIFwKKwlkc2EtY29tbW9uLmxvIHJzYS1jb21tb24ubG8KK2xpYmNpcGhlcl9sYV9PQkpFQ1RTID0gJChhbV9saWJjaXBoZXJfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDUFBBU0NPTVBJTEUgPSAkKENDQVMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKQorTFRDUFBBU0NPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQ0FTKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCitBTV9WX0NQUEFTID0gJChhbV9fdl9DUFBBU19AQU1fVkApCithbV9fdl9DUFBBU18gPSAkKGFtX192X0NQUEFTX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ1BQQVNfMCA9IEBlY2hvICIgIENQUEFTICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmNpcGhlcl9sYV9TT1VSQ0VTKSAkKEVYVFJBX2xpYmNpcGhlcl9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJjaXBoZXJfbGFfU09VUkNFUykgJChFWFRSQV9saWJjaXBoZXJfbGFfU09VUkNFUykKK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0ZJTEVWRVJTSU9OID0gQEJVSUxEX0ZJTEVWRVJTSU9OQAorQlVJTERfUkVWSVNJT04gPSBAQlVJTERfUkVWSVNJT05ACitCVUlMRF9USU1FU1RBTVAgPSBAQlVJTERfVElNRVNUQU1QQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkFMTEJBQ0tfU09DS0xFTl9UID0gQEZBTExCQUNLX1NPQ0tMRU5fVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NSWVBUX0NJUEhFUlMgPSBAR0NSWVBUX0NJUEhFUlNACitHQ1JZUFRfRElHRVNUUyA9IEBHQ1JZUFRfRElHRVNUU0AKK0dDUllQVF9IV0ZfTU9EVUxFUyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACitHQ1JZUFRfS0RGUyA9IEBHQ1JZUFRfS0RGU0AKK0dDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitHQ1JZUFRfUkFORE9NID0gQEdDUllQVF9SQU5ET01ACitHUEdfRVJST1JfQ0ZMQUdTID0gQEdQR19FUlJPUl9DRkxBR1NACitHUEdfRVJST1JfQ09ORklHID0gQEdQR19FUlJPUl9DT05GSUdACitHUEdfRVJST1JfTElCUyA9IEBHUEdfRVJST1JfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0lOU0VSVF9TWVNfU0VMRUNUX0ggPSBASU5TRVJUX1NZU19TRUxFQ1RfSEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJHQ1JZUFRfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfQ0lQSEVSU0AKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04gPSBATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTID0gQExJQkdDUllQVF9DT05GSUdfQ0ZMQUdTQAorTElCR0NSWVBUX0NPTkZJR19IT1NUID0gQExJQkdDUllQVF9DT05GSUdfSE9TVEAKK0xJQkdDUllQVF9DT05GSUdfTElCUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0xJQlNACitMSUJHQ1JZUFRfRElHRVNUUyA9IEBMSUJHQ1JZUFRfRElHRVNUU0AKK0xJQkdDUllQVF9MVF9BR0UgPSBATElCR0NSWVBUX0xUX0FHRUAKK0xJQkdDUllQVF9MVF9DVVJSRU5UID0gQExJQkdDUllQVF9MVF9DVVJSRU5UQAorTElCR0NSWVBUX0xUX1JFVklTSU9OID0gQExJQkdDUllQVF9MVF9SRVZJU0lPTkAKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMgPSBATElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK01QSV9TRkxBR1MgPSBATVBJX1NGTEFHU0AKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PRVhFQ1NUQUNLX0ZMQUdTID0gQE5PRVhFQ1NUQUNLX0ZMQUdTQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQVEhfQ0ZMQUdTID0gQFBUSF9DRkxBR1NACitQVEhfQ09ORklHID0gQFBUSF9DT05GSUdACitQVEhfTElCUyA9IEBQVEhfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitSQyA9IEBSQ0AKK1JVTl9MQVJHRV9EQVRBX1RFU1RTID0gQFJVTl9MQVJHRV9EQVRBX1RFU1RTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1NZU19TT0NLRVRfSCA9IEBTWVNfU09DS0VUX0hACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OX05VTUJFUiA9IEBWRVJTSU9OX05VTUJFUkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW4gPSBAZW1hY3NfbG9jYWxfdmFyc19iZWdpbkAKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kID0gQGVtYWNzX2xvY2FsX3ZhcnNfZW5kQAorZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHkgPSBAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitFWFRSQV9ESVNUID0gTWFuaWZlc3QKKworIyBOZWVkIHRvIGluY2x1ZGUgLi4vc3JjIGluIGFkZGl0aW9uIHRvIHRvcF9zcmNkaXIgYmVjYXVzZSBnY3J5cHQuaCBpcworIyBhIGJ1aWx0IGhlYWRlci4KK0FNX0NQUEZMQUdTID0gLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYworQU1fQ0ZMQUdTID0gJChHUEdfRVJST1JfQ0ZMQUdTKQorQU1fQ0NBU0ZMQUdTID0gJChOT0VYRUNTVEFDS19GTEFHUykKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmNpcGhlci5sYQorR0NSWVBUX01PRFVMRVMgPSBAR0NSWVBUX0NJUEhFUlNAIEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNAIFwKKyAgICAgICAgICAgICAgICAgQEdDUllQVF9ESUdFU1RTQCBAR0NSWVBUX0tERlNACisKK2xpYmNpcGhlcl9sYV9ERVBFTkRFTkNJRVMgPSAkKEdDUllQVF9NT0RVTEVTKQorbGliY2lwaGVyX2xhX0xJQkFERCA9ICQoR0NSWVBUX01PRFVMRVMpCitsaWJjaXBoZXJfbGFfU09VUkNFUyA9IFwKK2NpcGhlci5jIGNpcGhlci1pbnRlcm5hbC5oIFwKK2NpcGhlci1jYmMuYyBjaXBoZXItY2ZiLmMgY2lwaGVyLW9mYi5jIGNpcGhlci1jdHIuYyBjaXBoZXItYWVzd3JhcC5jIFwKK2NpcGhlci1jY20uYyBjaXBoZXItY21hYy5jIGNpcGhlci1nY20uYyBcCitjaXBoZXItc2VsZnRlc3QuYyBjaXBoZXItc2VsZnRlc3QuaCBcCitwdWJrZXkuYyBwdWJrZXktaW50ZXJuYWwuaCBwdWJrZXktdXRpbC5jIFwKK21kLmMgXAorbWFjLmMgbWFjLWludGVybmFsLmggXAorbWFjLWhtYWMuYyBtYWMtY21hYy5jIG1hYy1nbWFjLmMgXAora2RmLmMga2RmLWludGVybmFsLmggXAoraG1hYy10ZXN0cy5jIFwKK2JpdGhlbHAuaCAgXAorYnVmaGVscC5oICBcCitwcmltZWdlbi5jICBcCitoYXNoLWNvbW1vbi5jIGhhc2gtY29tbW9uLmggXAorZHNhLWNvbW1vbi5jIHJzYS1jb21tb24uYyBcCitybWQuaAorCitFWFRSQV9saWJjaXBoZXJfbGFfU09VUkNFUyA9IFwKK2FyY2ZvdXIuYyBcCitibG93ZmlzaC5jIGJsb3dmaXNoLWFtZDY0LlMgYmxvd2Zpc2gtYXJtLlMgXAorY2FzdDUuYyBjYXN0NS1hbWQ2NC5TIGNhc3Q1LWFybS5TIFwKK2NyYy5jIFwKK2Rlcy5jIFwKK2RzYS5jIFwKK2VsZ2FtYWwuYyBcCitlY2MuYyBlY2MtY3VydmVzLmMgZWNjLW1pc2MuYyBlY2MtY29tbW9uLmggXAorZWNjLWVjZHNhLmMgZWNjLWVkZHNhLmMgZWNjLWdvc3QuYyBcCitpZGVhLmMgXAorZ29zdDI4MTQ3LmMgZ29zdC5oIFwKK2dvc3RyMzQxMS05NC5jIFwKK21kNC5jIFwKK21kNS5jIFwKK3Jpam5kYWVsLmMgcmlqbmRhZWwtdGFibGVzLmggcmlqbmRhZWwtYW1kNjQuUyByaWpuZGFlbC1hcm0uUyBcCitybWQxNjAuYyBcCityc2EuYyBcCitzYWxzYTIwLmMgc2Fsc2EyMC1hbWQ2NC5TIHNhbHNhMjAtYXJtdjctbmVvbi5TIFwKK3NjcnlwdC5jIFwKK3NlZWQuYyBcCitzZXJwZW50LmMgc2VycGVudC1zc2UyLWFtZDY0LlMgc2VycGVudC1hdngyLWFtZDY0LlMgc2VycGVudC1hcm12Ny1uZW9uLlMgXAorc2hhMS5jIHNoYTEtc3NzZTMtYW1kNjQuUyBcCitzaGEyNTYuYyBzaGEyNTYtc3NzZTMtYW1kNjQuUyBcCitzaGE1MTIuYyBzaGE1MTItc3NzZTMtYW1kNjQuUyBzaGE1MTItYXZ4LWFtZDY0LlMgc2hhNTEyLWF2eDItYm1pMi1hbWQ2NC5TIFwKKyAgc2hhNTEyLWFybXY3LW5lb24uUyBcCitzdHJpYm9nLmMgXAordGlnZXIuYyBcCit3aGlybHBvb2wuYyBcCit0d29maXNoLmMgdHdvZmlzaC1hbWQ2NC5TIHR3b2Zpc2gtYXJtLlMgXAorcmZjMjI2OC5jIFwKK2NhbWVsbGlhLmMgY2FtZWxsaWEuaCBjYW1lbGxpYS1nbHVlLmMgY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LlMgXAorICBjYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LlMgY2FtZWxsaWEtYXJtLlMKKworQEVOQUJMRV9PX0ZMQUdfTVVOR0lOR19GQUxTRUBvX2ZsYWdfbXVuZ2luZyA9IGNhdAorQEVOQUJMRV9PX0ZMQUdfTVVOR0lOR19UUlVFQG9fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLy1PXChbMi05c11bMi05c10qXCkvLU8xLycgLWUgJ3MvLU9mYXN0Ly1PMS9nJworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuUyAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgY2lwaGVyL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGNpcGhlci9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGliY2lwaGVyLmxhOiAkKGxpYmNpcGhlcl9sYV9PQkpFQ1RTKSAkKGxpYmNpcGhlcl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliY2lwaGVyX2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChMSU5LKSAgJChsaWJjaXBoZXJfbGFfT0JKRUNUUykgJChsaWJjaXBoZXJfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmNmb3VyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmxvd2Zpc2gtYW1kNjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ibG93ZmlzaC1hcm0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ibG93ZmlzaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYW1lbGxpYS1hcm0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYW1lbGxpYS1nbHVlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2FtZWxsaWEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYXN0NS1hbWQ2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nhc3Q1LWFybS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nhc3Q1LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2lwaGVyLWFlc3dyYXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jaXBoZXItY2JjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2lwaGVyLWNjbS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NpcGhlci1jZmIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jaXBoZXItY21hYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NpcGhlci1jdHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jaXBoZXItZ2NtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2lwaGVyLW9mYi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NpcGhlci1zZWxmdGVzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NpcGhlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NyYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Rlcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RzYS1jb21tb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kc2EuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lY2MtY3VydmVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWNjLWVjZHNhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWNjLWVkZHNhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWNjLWdvc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lY2MtbWlzYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VjYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZ2FtYWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nb3N0MjgxNDcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nb3N0cjM0MTEtOTQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oYXNoLWNvbW1vbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2htYWMtdGVzdHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pZGVhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikva2RmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFjLWNtYWMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYWMtZ21hYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21hYy1obWFjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZDQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZDUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcmltZWdlbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3B1YmtleS11dGlsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHVia2V5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmZjMjI2OC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jpam5kYWVsLWFtZDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmlqbmRhZWwtYXJtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmlqbmRhZWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ybWQxNjAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yc2EtY29tbW9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcnNhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2Fsc2EyMC1hbWQ2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NhbHNhMjAtYXJtdjctbmVvbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NhbHNhMjAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zY3J5cHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZWVkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VycGVudC1hcm12Ny1uZW9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VycGVudC1hdngyLWFtZDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VycGVudC1zc2UyLWFtZDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VycGVudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYTEtc3NzZTMtYW1kNjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaGExLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2hhMjU2LXNzc2UzLWFtZDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2hhMjU2LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2hhNTEyLWFybXY3LW5lb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaGE1MTItYXZ4LWFtZDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2hhNTEyLWF2eDItYm1pMi1hbWQ2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYTUxMi1zc3NlMy1hbWQ2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYTUxMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmlib2cuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aWdlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3R3b2Zpc2gtYW1kNjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90d29maXNoLWFybS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3R3b2Zpc2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93aGlybHBvb2wuUGxvQGFtX19xdW90ZUAKKworLlMubzoKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2RlcEApJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5TLm9iajoKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuUy5sbzoKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKSQoTFRDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoTFRDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgV2UgbmVlZCB0byBsb3dlciB0aGUgb3B0aW1pemF0aW9uIGZvciB0aGlzIG1vZHVsZS4KK3RpZ2VyLm86ICQoc3JjZGlyKS90aWdlci5jCisJYGVjaG8gJChDT01QSUxFKSAtYyAkKHNyY2RpcikvdGlnZXIuYyB8ICQob19mbGFnX211bmdpbmcpIGAKKwordGlnZXIubG86ICQoc3JjZGlyKS90aWdlci5jCisJYGVjaG8gJChMVENPTVBJTEUpIC1jICQoc3JjZGlyKS90aWdlci5jIHwgJChvX2ZsYWdfbXVuZ2luZykgYAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jaXBoZXIvTWFuaWZlc3QgYi9jaXBoZXIvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkNjRmNwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9NYW5pZmVzdApAQCAtMCwwICsxLDczIEBACisjIE1hbmlmZXN0IC0gY2hlY2tzdW1zIG9mIHRoZSBjaXBoZXIgZGlyZWN0b3J5CisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisjIENoZWNrc3VtcyBmb3IgYWxsIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gRm9ybWF0IGlzCisjIGZpbGVuYW1lLCBibGFua3MsIGJhc2UtNjQgcGFydCBvZiBhbiBPcGVuUEdQIGRldGFjaGVkIHNpZ25hdHVyZQorIyB3aXRob3V0IHRoZSBoZWFkZXIgbGluZXMuICBCbGFuayBsaW5lcyBhbmQgbGluZXMgYmVnaW5uaW5nIHdpdGggYQorIyBoYXNoIG1hcmsgYXJlIGlnbm9yZWQuICBBIHRvb2wgdG8gcHJvY2VzcyB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlIGJ5CisjIGN2cyAtZCA6cHNlcnZlcjphbm9uY3ZzQGN2cy5nbnVwZy5vcmc6L2N2cy93ayBjbyBtaXNjLXNjcmlwdHMvbWFuaWZlc3QtdG9vbAorIworIyBUaGUgc3BlY2lhbCBlbnRyeSAiJG5hbWVzJCIgaG9sZHMgYSBzaWduYXR1cmUgb3ZlciBhbGwgc29ydGVkCisjIGZpbGVuYW1lcyBleGNsdWRpbmcgaXRzZWxmLgorCisKKyMgQWxnb3JpdGhtIEFQSQorY2lwaGVyLmMgaVFDVkF3VUFRRHpyVmpFQW5wODMyUy83QVFJUERnUCtPVkovWU5XWTVtN2MwOUVCYlBBekwvV3NHb2o2d3JCTk1ta1JsTU9xVEhlaCtPT3RqdUZIdDFmOXVoZk0yTnpsN3NKNStoNHJ5WktMRVptUVBSTVRaVG5BcWt2R2RzckpXSm5pZ1VBOVF3WWRWME9OcUM5QzYzZ3B1RzQ2NWdPOVRaVk9xbFF1L0ZUeFNSdVRRWVV1bGthQk5HNzFuOG5aRU91c0JWd1YyWUE9PTU4eEgKK3B1YmtleS5jIGlRQ1ZBd1VBUDlYUTNqRUFucDgzMlMvN0FRSjVVZ1FBeUhmRUJ2UFZKOHdUUmc4YzdpeFMyR2lWbUlnd0lvNXR2UWFpUUpUUFdBU2V2dllyQisyWjJxYTljQVR5dTUwQUNqTHpiYXF1R0JnUHpqSlYzZFUvcXR0VDFnQ3FSdU4vTENOdlhGZTVxbklaZXplamMzUkFhZEZOVHcvcE9USHEwd3hEMUtlZzY2cnVlaTlSMzZOYmE1OXBFUUlXSUJYVGZ1YlJmdDJoTVlrPT1FMDl0CithYy5jIGlRQ1ZBd1VBUUR6c096RUFucDgzMlMvN0FRSkNCUVAvV0k2RVYvZHNSNHJtaGE2UlZodmtqWm8xN2tROHo2cElsNUozY1hPdnFFa0lGZUQySFl1M0hIcldTVDVsN3lYbGZmaHBEa1ZIa2ZNaWg0cnVLNzZxNkZtMGR4Wjk4cE80Qy9kVnRnaW1sdnZjeS93T1FqcHpzRTBmWUFlMUJZZGc4MUxKMDlYMzN2VzV4NkMyOWx1bmZLUk9PMnRQbFY1aThmZmVvRnZtTUY4PT1qMjZnCittZC5jIGlRQ1ZBd1VBUCtORkdqRUFucDgzMlMvN0FRSnM4d1AvUWRrMEVBS3N5cjNPMS9wbU9TTjhBRzRyUEtiZDZLRFR6dm9CUEFONHVwRndLWVk0aFd3dnkxMlEzWVU5RG1FQ3J6WmtSQ1hIUjdtbGpWUUtzNkI3Q1JaSktqRkttT0VMcGNKRHRLdnU0MHZUczFiT0g0azlpSllacEdnUkE4M25rUStFTEFjcGhBYkNBK0tJcFZyMks0bUNKQUIwRmhwQzJ1T1E1MEpIQWtvPT1CZUY2CitwcmltZWdlbi5jIGlRQ1ZBd1VBUUR6c29ERUFucDgzMlMvN0FRS1lSd1AvVHFBUUJtMXJIVG5GMEhZRTA1UHFYZldsT3FhNkVvc3FWcGFPY3MvT0lXNlBhcVgweEgxVWxydWtLN2pOT2pLM3hDNG8xcU5RMVVLenoyZHZRYXExYk12Tk5pemVhdnhBaDEwU0paYzBoSWMvb2ZjODNJYmpMaDhTWlZXUTY3Snhqc1VkM0RPWG1TbWhQWitQcWQ3Y1VJaXc4ZkRvRitJOUVacXkzQ091MXdZPT0xZWJUCisKKyMgQWxnb3JpdGhtIGltcGxlbWVudGF0aW9ucworYXJjZm91ci5jIGlRQ1ZBd1VBUDlYUi9URUFucDgzMlMvN0FRSmNSd1A2QWx2WUV4KytmcFQ0bUlZbzB4UkRxS0VRZXFNUXZiYVJoSWcyZVY3NEp4SXRwSGEzcTVZc1lJbCtuMXlVejVnMzVKUldXWFNXbUFaQndPNXdMS3NIaWk0a1JVaGdyS1duU29RWm9QcGw0OUw1K04zUjU4T04zUzBydTVsc0JpRUpFemUzeHBsZjJ2cXdySDl2MVFIVkQrZ1U3VVRsZk5xcklKb09VWE4rMU80PT1UcSt4CitibG93ZmlzaC5jIGlRQ1ZBd1VBUDlYVEVURUFucDgzMlMvN0FRSmFFZ1FBZ2lxcWZ1Tyt6UXRzY2dUQjBydk96VnltSUtqUktqWWhGdUxqVnVjNzlHNHoxUkNBZmZ2SW4vWU0yZDdrdCtaL1FGN3pqY1RBT2dFVENRTDFYb2twWDJ6ejlIUEFNaTJ0bERZNXpzRHVmVE5xajBuNFdCTDluTTd3NlhBdnNpd1AxQjNicUNUdjlTakpWNEtieEo1OHZ3MXlRRStzcVc3NFIvUUlIRnZDN21VPT13Wm5YCitjYXN0NS5jIGlRQ1ZBd1VBUDlYVDZERUFucDgzMlMvN0FRSjN4Z1AvZWhMakVOM0dFTEd1ZGJxZW85MVhkK1BxaXRIcmt1QmJ0UklZWDdVZGQvZnlYTE4raDhyTUpWeUlRWDJtK21weGJCeHVkVlUzeDgvRE5UOEIwWkhBd0s2cXFKbUVCTExoRVlQZ0l1Rjc2aTlMTXJQMUtxVVBoQXdSWjJPcHBqSUl1Z0JRK3JQNzRhRDRlTHlkL2FLUUhOdVhNTDhRR1dSNkt3UVNob2hYTTVJPT0vQlJoCitjcmMuYyBpUUNWQXdVQVA3b3VlakVBbnA4MzJTLzdBUUlnd1FRQXBnNU5tNjN0SDVEUWtiTit6UHpNTzlZZ29qM3VreGZGVHlUQlBZU1hZS01pVGpFYkVTZWdhVTQwdU44am56MnZwcmNJUVdjZ1pmek80K29wRUpNY0kzNWFQd3pFazB2S09wMFMvUHJCTFVZMnJKZm5EVmtYNVhnSkZaYTJRN0xMZTgyNlVFQnpUVllXOTI0dXRpQ0NlOG9PYU9FV1ZOcGcxbXFka251M005bz09a3o1RAorZGVzLmMgaVFDVkF3VUFRQ04yb0RFQW5wODMyUy83QVFML2p3UDZBdW9xNm5aQ0RCanBnYzl0RHp1SVJ3YTlEcXl1TTNnWDk0dXZnRXBVd2RIc3piMmJHNDNkejAza1ZtY1l4dGoxTXpYYnlDZUNaT3dveDBiMlNLbUxneElick5QNnlHYnpWZFRqNjU5MmdEWXVmL1pYbWMxWk5KMUREbGRjUFEwbjlmWFVpcFVQd3lQYU5XbzNtU1phTmNNS1NXV3pkSzBKNmNpRzZuazdTV0k9PTlrL3QKK2RzYS5jIGlRQ1ZBd1VBUDlYWkhERUFucDgzMlMvN0FRTEJSZ1AvWHJCelRFWXg1Y2NNajFNTWI2c2czN2xpRUhkSXl5eTQ5emp2dDZqVXF4ajRSdXdWRU44UzZ2M3U0cS9ReUprSEFpMUUwRWtSRWdFTmx5SFc2UEtXaFliY3JkMHZQSUFOMTV5am5sMnlxdHJDckpJbWV4VUNvcUpKZXdLMEU0Sk9pY0diYWJUaWw4TVpqayttYmhFUG5qSkJxT2t5UDF3MGkzMXBFRGdFLzhNPT1wQzhzCitlbGdhbWFsLmMgaVFDVkF3VUFQOVhiWXpFQW5wODMyUy83QVFMWGFnUUEzSHJ2c3BaZmJUR2dtVUgwSXFMUVRKMGV4VVB4SnY1REVUMlR2b0l5NjJ0ckRtTU42bFRBajVQK2E3alE4dWRjdTB3K21SMnZYVUhjeFVwTkEyUHhMYU13R3pOU1k0elJETmU5cjNTRlREckZtNm00eTlLbzJlOFh0RUErV0Y2UC9YTHBjazRKbjd2TUVEbVZHUHdrTmQyMmtYRkZFOGRCR3dHNmk1SGsxTWs9PW9CVXMKK21kNC5jIGlRQ1ZBd1VBUDloNTBERUFucDgzMlMvN0FRSmhIZ1FBek5BL0I2TVdGRGxDdFBrSVZhVzhScFAxRWcwWk5Nc3kwczdTSmtvcE9DQmx1NkN3WFVPS2UrOHBwY1N4aGpZS2g0aTR1UXIvUXRmaXBZbEJqektKR25yYWZvRi9OdWdYTkNPSFNUR1QxMVR2SzdtQ2lCdVVNVmd2WkdBbE9KSW1rNmVUVGZValJyTWZhWE0vU1dsOGJkSjRacHpkakV5Vmg4OXI3STVKckdrPT14MlVECittZDUuYyBpUUNWQXdVQVA5aDdMekVBbnA4MzJTLzdBUUpVR1FQL2MwY2JmNldaWEN6bWp1Zkh4aUU5RkFRQnpUc0EwV3RhTnFkRmNIbDdmaG1pa0d0a25sYUVEOG41YTdlWWQvQzQ4MVVRVzZXZ3Evb1pkc3Znb1BXUGhHM2ZPQ3kyQ0ZQOWNaVlhJVHVNU2YwdWN5WlRGVUpOTzE1Zm5aK25EZnNVditKUGR2MWFTZVJpbkFVdGZBY1NLZmtTeVI5QkNQWnZreCt0Z1U2Y3BoVT09WnYraAorcmlqbmRhZWwuYyBpUUNWQXdVQVA5aDljVEVBbnA4MzJTLzdBUUtGMUFQK1AyTC90UHFESlJEZysvZndiT2s4VHMwTU54bnZ2WUVtM2dFNzNUS3VMdDFTK0IyK2prclpjS052TTVWR1BuVk1KYm5TMGxtSUswNG5tZWRIQ09mdEdUT3doR3VsWkFISElhS0d5c3RUM0pxbDRpUHdzL0pNZ0FqRTdGeXhoNVdaTXRCOXlFbGpLQnBKNVhOcWhyTXZ2eGNIcG55UDMrWXpJWE53emszNFYrYz09ZEo1aworcm1kMTYwLmMgaVFDVkF3VUFQOWgrYlRFQW5wODMyUy83QVFLMU9nUCtQTktGNk56aTZYOTNlYXNWbGtzZExxS0VzQXJDQXcyUWpHV0RHeXhUbmJpSk01NXFBbDlKeFIxbW4zVitvT0w3aXpMTHdUdDZFWUs5ZXZoemZjeFk1TjVNbmk4NVJBY3NMUHN1QWZRREV6akk2R1VXSHRRVUtQYk0rQmFvcnpmaFFqWUZTWnl2dW0vZFpZSi9XZml3d3docXFJS3lWVTJaRlNxQTM4WUdDL2M9PTlqZEEKK3JzYS5jIGlRQ1ZBd1VBUDlpSEl6RUFucDgzMlMvN0FRS0FZd1FBdVd0bk10ZTU0UUhOK0hpajl0NHNHdXlwWG9nYWpPYjF2UVF3R2dTMGZLc2FCWnN1U1AyYW16ZTRvNWRpSXZzUVRzRlE0Q3pqdnFvQ1Z1QkRvSE0zeGtTRDh3R0Rpemd2dENhbUF4a2RiRjd3bXpsZEtGbjhTcEpxbFZ3V1FNUDZrazFJalhIRXVZYjRJRFdHVGJWTWhmRXUrZU9sVTgrUFNLNEloWnFOdnQ0PT0vM2hwCitzZXJwZW50LmMgaVFDVkF3VUFQOWgvVnpFQW5wODMyUy83QVFMeUN3UC9kMXpibWI3bC9QcmlaTmE5L1o3bW8wMVhGZTVNbkFxQ2ZJd2hsOUdqZWFNc3pjb1MzN2pFQ05xNW5MdnJUVEZJSUpwbTNydkJlUHdpQ0c0V3d4MUkxOEhDeGFQMTk4cGNTYVIrQkxPSjNBajUyRVpQcnh0cWxES3VGcjM4Wk9QNWdpeVVxVVlWWUdWZHJ6NGtSTU5XQVpRSzUzR2VKbkdoWENuaHhvakxFZ0E9PWNrNDYKK3NoYTEuYyBpUUNWQXdVQVA5aUFUVEVBbnA4MzJTLzdBUUtjU3dRQXdBcy9Ibk5xaG8zbFUxWlVnQ1BOdDVQMi9Ccm02VzIxK3dXV0dLSmtTcnJhL2M0TllWS0pHRER3bHNGRTBiOWxuMXVadDdiSFJlRmtLWEszSm5yS1RtTlZjeC9DeTY0aUNNUk5NaGFNNzJNcXk3d1d4NXlIQkFtTUJ4ekZHbk5RS2JtZVk1MnplR2loNUhzTkxTaWJjMnBQdU9WaVdvMkpQSjVDaS93SXdsOD09L3d0Tworc2hhMjU2LmMgaVFDVkF3VUFQOWlBdHpFQW5wODMyUy83QVFKRDJRUC9VcXZMMGhoakcxd0VGYkdyZGtWOXRiYTFzTURYZG5uSzZYN0hkTHVScFZBZ05pUWlGZjhKRG1udGQvZFoyUTcxcDRVYWUyY3RxdmU0V29FaWpQVVpQakFDbnB1WmZ4MFNFUUwwbFFCa3d4ekpwN2x6OXVqVnR3UTJjTS9hWWV4SmtYY1dnR2Nsb0pOTE0zSmJXUEdJSm51WWJyL0l3SjZSUUY5dmdqMDM1N289PVVXTzEKK3NoYTUxMi5jIGlRQ1ZBd1VBUDlpQlRERUFucDgzMlMvN0FRSVBCQVFBMjhDSlNVUUxpVzBzMng5dTgvT0gyZUtueFBqQTRzWm1iNTBXUDc5MjBMZW02NlAzMUMzQnJPcXdmQm90NFJMaGpMK3poLytVYzRzM0hQd0FwWnVqOUU0QnhOTWxxTHYrVHFrKytEQWJkYU9lWVQ0amVVdCttbGhRUTZtSC9SRHN5MzJyWnNOc0dRMmJVR3hhelptZkcrK1BMM0p5aGF3cUN5MDBTVURyL28wPT1IKzBYCit0aWdlci5jIGlRQ1ZBd1VBUDlpQ2ZqRUFucDgzMlMvN0FRS3Vmd1AvZnJ5djNNcVNPWVkrOTAzMjVESDdYMy9DdGVreGVvb04wc2NHc0hYMGZ4QmFrV1NNZWNUTnJqMzNLUGRkTFM0NmdVL1M4OXpJYzJOL0J3LzdFVklBWFZGQTMvM0lwK09yRk91SU1PNFB5MXNDZEI4bzJZKzV5Z3Y4aVhMY3NYSXExTzBhdjc5aTlnNzc0VjN1YVhhMnFOOVpuWGUwQUVoY3k4RkhKMmkvd3JvPT01WFZCCit0d29maXNoLmMgaVFDVkF3VUFQOWlENlRFQW5wODMyUy83QVFLVW5RUC9ScThGYVllSFRHN0hiWnVxQXM5cGJQaXR6akRia2RaZGRtSW5XUjdObWV2QmtLdmhzSkFMalZvb2MwS0dRZm8ybEFBbXkzWGkvNFFRTjhWUG41MURWakRJZ2Y3eCtEUWgvOVRGSkhNY2N4STlhc1VnaTQrVE5ubU1xTFUxazNOOFMyUGp5WjFzamVDOEI3OWZLUHB3Q3pqNzJXa3FQa3padzNsMmpBcnIrZFU9PU5kSlQKK3JmYzIyNjguYyBpUUNWQXdVQVFDTiszakVBbnA4MzJTLzdBUUx2MWdRQTFoSmgyOWhBaktpNHVMU0d4WHZKNmN5WW1QZG1ldmRLcmJMbnVIWld0SGU0eHZDZ3kvblRkRW9qRXB4Z0xwL2hML29nYXN1V1JDMVcxNldpejlyeXhmN1lSMHVoWldheU8vYlFOYWdwZlU1TUlrSlRMdUtxcWdwd1l1bUNTUWZPdWdYVkFxY2dFemorMTNlZXlKYUZWcnp3ck5hNjdzaDg0bm1iak9qTmp2RT09MHpCcQorCisjIFJhbmRvbSBudW1iZXIgcmVsYXRlZAorcmFuZG9tLmMgaVFDVkF3VUFQN25zSVRFQW5wODMyUy83QVFLNFNBUUF0dmZVZ3J0R09RMlBseEdNbGEwcUpMUEhqSmFjTXdncTBlY3VzaUk3OWVsUGREc0ZmQ0NrNmRLMVVnMmtGYk5tMjJuQ0dITmNVcXVxYlg3bm9pN1pWUW5tUEJRWHp5TE5aZDdHbXJhd1JaZmRsUmVyVFVEQnBTblI4Vjh1aS81K1lZcDYyN0U3a0tHQzBoUFNncVhGcWw2b0JNSWZubzBMWndGSlRqSWV2Ulk9PUw0MTkKK3JhbmRvbS5oIGlRQ1ZBd1VBUDdvdktERUFucDgzMlMvN0FRSjNiUVFBam5QZWJueVRDN3NwaEF2Mkk3dUl6K3lQZ3cxWmZiVmhMditPaVdEbE85aXNoK2ZSeXlNcHkrSEVMQk9nWmpKZGdSZWdxaGxaQzZxeW5zNWFyTS9WZ2xZaStQenZkTE8zaElxSEUvWUZmcElGUHo4d0JyY21scXJZeWQzQ3NHcWNZc2Zqb2NYTnR0Q0JMZVNXbW9KMDlsdEtRSDh5ekpmM29BZ042WDF5dWM0PT1lTm9VCityYW5kLWludGVybmFsLmggaVFDVkF3VUFQN291dkRFQW5wODMyUy83QVFMWW5BUUFoZEk3RVJvSlZDa1Y4R2lWN01qYVV4djFXSUw3aVoraklPdlZodjRmTnloQ0dDR29FdFRqa3lwdXQvbGo3TnNoM0ZYRXFSaHlwR0dyQ0xmNDd4L2d1YTVuK0J3ZmZvZ3hWeVVEcWlPeXlHaE5UUHBlM2ZRY05CdmJQQ3Rjbzh5TUs0R0pPNUczQnF6bFB5TitCTWVvZ0x5bXlWNlNtMW12aDVMWkR5QUZiZlE9PXRaU0UKK3JuZGxpbnV4LmMgaVFDVkF3VUFQOWlQWVRFQW5wODMyUy83QVFMNi9BUC9aRHJiT2tWdUI5cUo3c0tlWDFNSW1aRXN6M21pMHhQb3ZKemFCdEJVN2EwaWRjVUtyV1lPdlFGV1JsTFVlcTBpQ1Q2K2gybDVibmlQN3E3aGVwemxLYStWUFk5VldhUXRocWVKbTJsNUxONlFRNVB5TWZCcTA0UXVCbmN3OUJKbkNHbUV5VEx0M1J4SVhCQVBkeG1pVnh0Y1JJRlVxQ0J0UXZvVVhHTHZlbXc9PXQzN2sKK3JuZGVnZC5jIGlRQ1ZBd1VBUDlpUFJERUFucDgzMlMvN0FRSW1CUVAvV0hLZytoS1hjbTFwUXZpbHpNTDBqWnB3SzVQQU1NNHVCbm5QSk5JWFdPWUJPNkkvWGc5ZC90UExnOE5sbW10eVFDbzJFdTB5YkRTdCs4bXUrZFd2ZUF5cyswTFRpME1JcWVQOUJNekNLejhkbldINitTOGh1TFh3VEYzbTBJcnFNMEpMYjZiNzFHSzlTT3E2c1dRMjJ5VzV2ZjYxaFhQOGtIOWRoSWFvTVpzPT1GYUhWCitybmR1bml4LmMgaVFDVkF3VUFQOWlRbHpFQW5wODMyUy83QVFML0tnUUEyOUdudmNENFhiNXFqRE1CZ1c5VEhFRTQrNGxmZXgvNmsrRmgwSVQ2MU9MSnNXVkxKN2JKcFJudGJ1cnc0dVFtNFRmN0NPOHZhaURGRFloS0tyelhlT0YxZm1kcGNMOGhBK2ZOcDlJL01VT2M0ZTlrTjkrWUo5d2lrVmEwU1pqMU9CZmh6Z2NGTGQxeE90dWxrcjNpaTUySExGOXZocnh6a2dWd3ZEMTBCaTg9PTJjTUwKK3JuZHczMi5jIGlRQ1ZBd1VBUDlpUktERUFucDgzMlMvN0FRSXVhQVFBM0FKcjNXcW54TkRzV0NJZHZlaGY4U3VvdHRoaitsYVg4bkpzdkRmRmhYUEtjWERwc2cwd1RUWFNubktneUVENTMrdVlpTURuVlJzeGVXQXloS3d2eDFNampsYVNNTWp6Ykg2aXNXVEg4RmFXcExncnhFa1hvUGVOcVlmNUZYcGRVa2NVeEdYMlJrUWV1WC9jSWZpSExORTlDVjB1c2FGMmp5c2pCWDJpRVJZPT1FRW5PCisKKyMgSGVscGVyCitiaXRoZWxwLmggaVFDVkF3VUFQN291UFRFQW5wODMyUy83QVFLWGdnUUFxamNndmloSUYzV2NsT2d3MUpWMnJiQVJ3NElTSURSTUZxZGFOQ3FCUng2QndFejNVR3NFSWx6NitpUjFzUy9yZXFONjFXdnRqTGIrRDArdHVqQWtHcmdRSmhGTEc4NVd0RzJ0QjVVVm9JM2FtMWZwa3dpUm0rYlI0cnYwckdrMEJZazgxYkM3K2w0S3JLOW81bFZwNGxDc3JvcmxVS3NkNDhsTm1CSHlBWE09PW1ERE4KK3JtZC5oIGlRQ1ZBd1VBUDdvdW1qRUFucDgzMlMvN0FRSmlKUVAvVjRiSndqWmFZbmRKelYrS1JuSURibDFrb0h1dytaSzVoZU1ZVnU4UWs0eWxxdi8vQkd5ZVJhM2paQ2NmUEhJMzVxNkhpbENzMlZCbThoaUJNakhTcVkvVlBuMlpRMHlnL2x0NnFFdmw3WWpzTG15TUlDdmpHK25jc3pIb3E5cFJ2bkYzdlRuTTE4c1BJaW9YTGs4ZnNrdU0wWE9DTkJzMEFSQkFRalk5VUdJPT1vbFVOCisKKyMgQ29uZmlndXJhdGlvbgorTWFrZWZpbGUuYW0gaVFDVkF3VUFRQ04zM1RFQW5wODMyUy83QVFLRkpBUUF6N0JEa0M4MTRxK1FpdUUvam51dEpIUjVxbGdicm0zaWtHYlF3ZFJ6WVVzY3N0NGJDQ1d5M3VLTC9zSVBHTGcrSlFYdEY1Rm5zUXkzczREOUJPWWhwNzJjQTlrdFlLNjVoaGk0cE5tL0pRMGxYa1pNTmZrOEdvNWxOektlemxXd0h2a013UlhSMEZlcDB3UGR5ZWFLVzVCZmFXMkFCdmdlcDZCcCtoSEVieWc9PXpTeWkKKyRuYW1lcyQgaVFDVkF3VUFRQ04zRURFQW5wODMyUy83QVFKWExBUDhEdkhUcG01RGtURjM1RW16ZUtwaTlpZTU5QVpjWmFuRDE5aXIvZS83K1BhUXhyMnJpdUxIREd3RktUanUrZGN2dkJzcXJ5Z1hPQzM3OEdYVld6SUYyT1p3UzRFZERjSitwZ29qbzlVcHNxcEtzSkhvdVk0VWd4NWNRaWFseGJhNDYya1VuOGhjaWhTQm5NeWM0THpiSjVXUTRwdVF1cXk1NDRkMng5NCsybXM9PUc0THMKZGlmZiAtLWdpdCBhL2NpcGhlci9hcmNmb3VyLmMgYi9jaXBoZXIvYXJjZm91ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTJjODQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvYXJjZm91ci5jCkBAIC0wLDAgKzEsMTg1IEBACisvKiBhcmNmb3VyLmMgIC0gIFRoZSBhcmNmb3VyIHN0cmVhbSBjaXBoZXIKKyAqCUNvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGFsZ29yaXRobSwgc2VlOgorICogICBCcnVjZSBTY2huZWllcjogQXBwbGllZCBDcnlwdG9ncmFwaHkuIEpvaG4gV2lsZXkgJiBTb25zLCAxOTk2LgorICogICBJU0JOIDAtNDcxLTExNzA5LTkuIFBhZ2VzIDM5NyBmZi4KKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdCh2b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGJ5dGUgc2JveFsyNTZdOworICAgIGludCBpZHhfaSwgaWR4X2o7Cit9IEFSQ0ZPVVJfY29udGV4dDsKKworc3RhdGljIHZvaWQKK2RvX2VuY3J5cHRfc3RyZWFtKCBBUkNGT1VSX2NvbnRleHQgKmN0eCwKKwkJICAgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1Ziwgc2l6ZV90IGxlbmd0aCApCit7CisjaWZuZGVmIF9faTM4Nl9fCisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpID0gY3R4LT5pZHhfaTsKKyAgcmVnaXN0ZXIgYnl0ZSBqID0gY3R4LT5pZHhfajsKKyAgcmVnaXN0ZXIgYnl0ZSAqc2JveCA9IGN0eC0+c2JveDsKKyAgcmVnaXN0ZXIgYnl0ZSB0LCB1OworCisgIHdoaWxlICggbGVuZ3RoLS0gKQorICAgIHsKKyAgICAgIGkrKzsKKyAgICAgIHQgPSBzYm94WyhieXRlKWldOworICAgICAgaiArPSB0OworICAgICAgdSA9IHNib3hbal07CisgICAgICBzYm94WyhieXRlKWldID0gdTsKKyAgICAgIHUgKz0gdDsKKyAgICAgIHNib3hbal0gPSB0OworICAgICAgKm91dGJ1ZisrID0gc2JveFt1XSBeICppbmJ1ZisrOworICAgIH0KKworICBjdHgtPmlkeF9pID0gKGJ5dGUpaTsKKyAgY3R4LT5pZHhfaiA9IChieXRlKWo7CisjZWxzZSAvKl9faTM4Nl9fKi8KKyAgLyogT2xkIGltcGxlbWVudGF0aW9uIG9mIGFyY2ZvdXIgaXMgZmFzdGVyIG9uIGkzODYgdGhhbiB0aGUgdmVyc2lvbiBhYm92ZS4KKyAgICogVGhpcyBpcyBiZWNhdXNlIHZlcnNpb24gYWJvdmUgaW5jcmVhc2VzIHJlZ2lzdGVyIHByZXNzdXJlIHdoaWNoIG9uIGkzODYKKyAgICogd291bGQgcHVzaCBzb21lIG9mIHRoZSB2YXJpYWJsZXMgdG8gbWVtb3J5L3N0YWNrLiAgVGhlcmVmb3JlIGtlZXAgdGhpcworICAgKiB2ZXJzaW9uIGZvciBpMzg2IHRvIGF2b2lkIHJlZ3Jlc3NpbmcgcGVyZm9ybWFuY2UuICAqLworICByZWdpc3RlciBpbnQgaSA9IGN0eC0+aWR4X2k7CisgIHJlZ2lzdGVyIGludCBqID0gY3R4LT5pZHhfajsKKyAgcmVnaXN0ZXIgYnl0ZSAqc2JveCA9IGN0eC0+c2JveDsKKyAgcmVnaXN0ZXIgaW50IHQ7CisKKyAgd2hpbGUgKCBsZW5ndGgtLSApCisgICAgeworICAgICAgaSsrOworICAgICAgaSA9IGkgJiAyNTU7IC8qIFRoZSBhbmQtb3Agc2VlbXMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlIG1vZC1vcC4gKi8KKyAgICAgIGogKz0gc2JveFtpXTsKKyAgICAgIGogJj0gMjU1OworICAgICAgdCA9IHNib3hbaV07IHNib3hbaV0gPSBzYm94W2pdOyBzYm94W2pdID0gdDsKKyAgICAgICpvdXRidWYrKyA9ICppbmJ1ZisrIF4gc2JveFsoc2JveFtpXSArIHNib3hbal0pICYgMjU1XTsKKyAgICB9CisKKyAgY3R4LT5pZHhfaSA9IGk7CisgIGN0eC0+aWR4X2ogPSBqOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitlbmNyeXB0X3N0cmVhbSAodm9pZCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgbGVuZ3RoKQoreworICBBUkNGT1VSX2NvbnRleHQgKmN0eCA9IChBUkNGT1VSX2NvbnRleHQgKikgY29udGV4dDsKKyAgZG9fZW5jcnlwdF9zdHJlYW0gKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgbGVuZ3RoICk7CisgIF9nY3J5X2J1cm5fc3RhY2sgKDY0KTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkb19hcmNmb3VyX3NldGtleSAodm9pZCAqY29udGV4dCwgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworICBzdGF0aWMgaW50IGluaXRpYWxpemVkOworICBzdGF0aWMgY29uc3QgY2hhciogc2VsZnRlc3RfZmFpbGVkOworICBpbnQgaSwgajsKKyAgYnl0ZSBrYXJyWzI1Nl07CisgIEFSQ0ZPVVJfY29udGV4dCAqY3R4ID0gKEFSQ0ZPVVJfY29udGV4dCAqKSBjb250ZXh0OworCisgIGlmICghaW5pdGlhbGl6ZWQgKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0KCk7CisgICAgICBpZiggc2VsZnRlc3RfZmFpbGVkICkKKyAgICAgICAgbG9nX2Vycm9yICgiQVJDRk9VUiBzZWxmdGVzdCBmYWlsZWQgKCVzKVxuIiwgc2VsZnRlc3RfZmFpbGVkICk7CisgICAgfQorICBpZiggc2VsZnRlc3RfZmFpbGVkICkKKyAgICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7CisKKyAgaWYoIGtleWxlbiA8IDQwLzggKSAvKiB3ZSB3YW50IGF0IGxlYXN0IDQwIGJpdHMgKi8KKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfS0VZTEVOOworCisgIGN0eC0+aWR4X2kgPSBjdHgtPmlkeF9qID0gMDsKKyAgZm9yIChpPTA7IGkgPCAyNTY7IGkrKyApCisgICAgY3R4LT5zYm94W2ldID0gaTsKKyAgZm9yIChpPWo9MDsgaSA8IDI1NjsgaSsrLGorKyApCisgICAgeworICAgICAgaWYgKGogPj0ga2V5bGVuKQorICAgICAgICBqID0gMDsKKyAgICAgIGthcnJbaV0gPSBrZXlbal07CisgICAgfQorICBmb3IgKGk9aj0wOyBpIDwgMjU2OyBpKysgKQorICAgIHsKKyAgICAgIGludCB0OworICAgICAgaiA9IChqICsgY3R4LT5zYm94W2ldICsga2FycltpXSkgJiAyNTU7CisgICAgICB0ID0gY3R4LT5zYm94W2ldOworICAgICAgY3R4LT5zYm94W2ldID0gY3R4LT5zYm94W2pdOworICAgICAgY3R4LT5zYm94W2pdID0gdDsKKyAgICB9CisgIHdpcGVtZW1vcnkoIGthcnIsIHNpemVvZihrYXJyKSApOworCisgIHJldHVybiBHUEdfRVJSX05PX0VSUk9SOworfQorCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CithcmNmb3VyX3NldGtleSAoIHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbiApCit7CisgIEFSQ0ZPVVJfY29udGV4dCAqY3R4ID0gKEFSQ0ZPVVJfY29udGV4dCAqKSBjb250ZXh0OworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSBkb19hcmNmb3VyX3NldGtleSAoY3R4LCBrZXksIGtleWxlbiApOworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdCh2b2lkKQoreworICBBUkNGT1VSX2NvbnRleHQgY3R4OworICBieXRlIHNjcmF0Y2hbMTZdOworCisgIC8qIFRlc3QgdmVjdG9yIGZyb20gQ3J5cHRsaWIgbGFiZWxlZCB0aGVyZTogImZyb20gdGhlCisgICAgIFN0YXRlL0NvbW1lcmNlIERlcGFydG1lbnQiLiAqLworICBzdGF0aWMgY29uc3QgYnl0ZSBrZXlfMVtdID0KKyAgICB7IDB4NjEsIDB4OEEsIDB4NjMsIDB4RDIsIDB4RkIgfTsKKyAgc3RhdGljIGNvbnN0IGJ5dGUgcGxhaW50ZXh0XzFbXSA9CisgICAgeyAweERDLCAweEVFLCAweDRDLCAweEY5LCAweDJDIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcnRleHRfMVtdID0KKyAgICB7IDB4RjEsIDB4MzgsIDB4MjksIDB4QzksIDB4REUgfTsKKworICBhcmNmb3VyX3NldGtleSggJmN0eCwga2V5XzEsIHNpemVvZihrZXlfMSkpOworICBlbmNyeXB0X3N0cmVhbSggJmN0eCwgc2NyYXRjaCwgcGxhaW50ZXh0XzEsIHNpemVvZihwbGFpbnRleHRfMSkpOworICBpZiAoIG1lbWNtcCAoc2NyYXRjaCwgY2lwaGVydGV4dF8xLCBzaXplb2YgKGNpcGhlcnRleHRfMSkpKQorICAgIHJldHVybiAiQXJjZm91ciBlbmNyeXB0aW9uIHRlc3QgMSBmYWlsZWQuIjsKKyAgYXJjZm91cl9zZXRrZXkoICZjdHgsIGtleV8xLCBzaXplb2Yoa2V5XzEpKTsKKyAgZW5jcnlwdF9zdHJlYW0oJmN0eCwgc2NyYXRjaCwgc2NyYXRjaCwgc2l6ZW9mKHBsYWludGV4dF8xKSk7IC8qIGRlY3J5cHQgKi8KKyAgaWYgKCBtZW1jbXAgKHNjcmF0Y2gsIHBsYWludGV4dF8xLCBzaXplb2YgKHBsYWludGV4dF8xKSkpCisgICAgcmV0dXJuICJBcmNmb3VyIGRlY3J5cHRpb24gdGVzdCAxIGZhaWxlZC4iOworICByZXR1cm4gTlVMTDsKK30KKworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfYXJjZm91ciA9CisgIHsKKyAgICBHQ1JZX0NJUEhFUl9BUkNGT1VSLCB7MCwgMH0sCisgICAgIkFSQ0ZPVVIiLCBOVUxMLCBOVUxMLCAxLCAxMjgsIHNpemVvZiAoQVJDRk9VUl9jb250ZXh0KSwKKyAgICBhcmNmb3VyX3NldGtleSwgTlVMTCwgTlVMTCwgZW5jcnlwdF9zdHJlYW0sIGVuY3J5cHRfc3RyZWFtLAorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2JpdGhlbHAuaCBiL2NpcGhlci9iaXRoZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1OWM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9iaXRoZWxwLmgKQEAgLTAsMCArMSw4MCBAQAorLyogYml0aGVscC5oICAtICBTb21lIGJpdCBtYW5pcHVsYXRpb24gaGVscGVycworICoJQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworI2lmbmRlZiBHMTBfQklUSEVMUF9ICisjZGVmaW5lIEcxMF9CSVRIRUxQX0gKKworI2luY2x1ZGUgInR5cGVzLmgiCisKKworLyoqKioqKioqKioqKioqKioKKyAqIFJvdGF0ZSB0aGUgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgWCBieSBOIGJpdHMgbGVmdC9yaWdodAorICovCitzdGF0aWMgaW5saW5lIHUzMiByb2wodTMyIHgsIGludCBuKQoreworCXJldHVybiAoICh4IDw8IChuJigzMi0xKSkpIHwgKHggPj4gKCgzMi1uKSYoMzItMSkpKSApOworfQorCitzdGF0aWMgaW5saW5lIHUzMiByb3IodTMyIHgsIGludCBuKQoreworCXJldHVybiAoICh4ID4+IChuJigzMi0xKSkpIHwgKHggPDwgKCgzMi1uKSYoMzItMSkpKSApOworfQorCisvKiBCeXRlIHN3YXAgZm9yIDMyLWJpdCBhbmQgNjQtYml0IGludGVnZXJzLiAgSWYgYXZhaWxhYmxlLCB1c2UgY29tcGlsZXIKKyAgIHByb3ZpZGVkIGhlbHBlcnMuICAqLworI2lmZGVmIEhBVkVfQlVJTFRJTl9CU1dBUDMyCisjIGRlZmluZSBfZ2NyeV9ic3dhcDMyIF9fYnVpbHRpbl9ic3dhcDMyCisjZWxzZQorc3RhdGljIGlubGluZSB1MzIKK19nY3J5X2Jzd2FwMzIodTMyIHgpCit7CisJcmV0dXJuICgocm9sKHgsIDgpICYgMHgwMGZmMDBmZkwpIHwgKHJvcih4LCA4KSAmIDB4ZmYwMGZmMDBMKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKyMgaWZkZWYgSEFWRV9CVUlMVElOX0JTV0FQNjQKKyMgIGRlZmluZSBfZ2NyeV9ic3dhcDY0IF9fYnVpbHRpbl9ic3dhcDY0CisjIGVsc2UKK3N0YXRpYyBpbmxpbmUgdTY0CitfZ2NyeV9ic3dhcDY0KHU2NCB4KQoreworCXJldHVybiAoKHU2NClfZ2NyeV9ic3dhcDMyKHgpIDw8IDMyKSB8IChfZ2NyeV9ic3dhcDMyKHggPj4gMzIpKTsKK30KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBFbmRpYW4gZGVwZW5kZW50IGJ5dGUgc3dhcCBvcGVyYXRpb25zLiAgKi8KKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZGVmaW5lIGxlX2Jzd2FwMzIoeCkgX2djcnlfYnN3YXAzMih4KQorIyBkZWZpbmUgYmVfYnN3YXAzMih4KSAoKHUzMikoeCkpCisjIGlmZGVmIEhBVkVfVTY0X1RZUEVERUYKKyMgIGRlZmluZSBsZV9ic3dhcDY0KHgpIF9nY3J5X2Jzd2FwNjQoeCkKKyMgIGRlZmluZSBiZV9ic3dhcDY0KHgpICgodTY0KSh4KSkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBsZV9ic3dhcDMyKHgpICgodTMyKSh4KSkKKyMgZGVmaW5lIGJlX2Jzd2FwMzIoeCkgX2djcnlfYnN3YXAzMih4KQorIyBpZmRlZiBIQVZFX1U2NF9UWVBFREVGCisjICBkZWZpbmUgbGVfYnN3YXA2NCh4KSAoKHU2NCkoeCkpCisjICBkZWZpbmUgYmVfYnN3YXA2NCh4KSBfZ2NyeV9ic3dhcDY0KHgpCisjIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qRzEwX0JJVEhFTFBfSCovCmRpZmYgLS1naXQgYS9jaXBoZXIvYmxvd2Zpc2gtYW1kNjQuUyBiL2NpcGhlci9ibG93ZmlzaC1hbWQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzVlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvYmxvd2Zpc2gtYW1kNjQuUwpAQCAtMCwwICsxLDUzMyBAQAorLyogYmxvd2Zpc2gtYW1kNjQuUyAgLSAgQU1ENjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgQmxvd2Zpc2ggY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgX194ODZfNjQKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpZiBkZWZpbmVkKFVTRV9CTE9XRklTSCkgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKQorCisudGV4dAorCisvKiBzdHJ1Y3R1cmUgb2YgQkxPV0ZJU0hfY29udGV4dDogKi8KKyNkZWZpbmUgczAJMAorI2RlZmluZSBzMQkoKHMwKSArIDI1NiAqIDQpCisjZGVmaW5lIHMyCSgoczEpICsgMjU2ICogNCkKKyNkZWZpbmUgczMJKChzMikgKyAyNTYgKiA0KQorI2RlZmluZSBwCSgoczMpICsgMjU2ICogNCkKKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIENUWCAlcmRpCisjZGVmaW5lIFJJTyAlcnNpCisKKyNkZWZpbmUgUlgwICVyYXgKKyNkZWZpbmUgUlgxICVyYngKKyNkZWZpbmUgUlgyICVyY3gKKyNkZWZpbmUgUlgzICVyZHgKKworI2RlZmluZSBSWDBkICVlYXgKKyNkZWZpbmUgUlgxZCAlZWJ4CisjZGVmaW5lIFJYMmQgJWVjeAorI2RlZmluZSBSWDNkICVlZHgKKworI2RlZmluZSBSWDBibCAlYWwKKyNkZWZpbmUgUlgxYmwgJWJsCisjZGVmaW5lIFJYMmJsICVjbAorI2RlZmluZSBSWDNibCAlZGwKKworI2RlZmluZSBSWDBiaCAlYWgKKyNkZWZpbmUgUlgxYmggJWJoCisjZGVmaW5lIFJYMmJoICVjaAorI2RlZmluZSBSWDNiaCAlZGgKKworI2RlZmluZSBSVDAgJXJicAorI2RlZmluZSBSVDEgJXJzaQorI2RlZmluZSBSVDIgJXI4CisjZGVmaW5lIFJUMyAlcjkKKworI2RlZmluZSBSVDBkICVlYnAKKyNkZWZpbmUgUlQxZCAlZXNpCisjZGVmaW5lIFJUMmQgJXI4ZAorI2RlZmluZSBSVDNkICVyOWQKKworI2RlZmluZSBSS0VZICVyMTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAxLXdheSBibG93ZmlzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGKCkgXAorCW1vdnpibCBSWDBiaCwJCVJUMWQ7IFwKKwltb3Z6YmwgUlgwYmwsCQlSVDNkOyBcCisJcm9ycSAkMTYsCQlSWDA7IFwKKwltb3Z6YmwgUlgwYmgsCQlSVDBkOyBcCisJbW92emJsIFJYMGJsLAkJUlQyZDsgXAorCXJvcnEgJDE2LAkJUlgwOyBcCisJbW92bCBzMChDVFgsUlQwLDQpLAlSVDBkOyBcCisJYWRkbCBzMShDVFgsUlQyLDQpLAlSVDBkOyBcCisJeG9ybCBzMihDVFgsUlQxLDQpLAlSVDBkOyBcCisJYWRkbCBzMyhDVFgsUlQzLDQpLAlSVDBkOyBcCisJeG9ycSBSVDAsCQlSWDA7CisKKyNkZWZpbmUgbG9hZF9yb3VuZGtleV9lbmMobikgXAorCW1vdnEgcCs0KihuKShDVFgpLCAJUlgzOworCisjZGVmaW5lIGFkZF9yb3VuZGtleV9lbmMoKSBcCisJeG9ycSBSWDMsIAkJUlgwOworCisjZGVmaW5lIHJvdW5kX2VuYyhuKSBcCisJYWRkX3JvdW5ka2V5X2VuYygpOyBcCisJbG9hZF9yb3VuZGtleV9lbmMobik7IFwKKwlcCisJRigpOyBcCisJRigpOworCisjZGVmaW5lIGxvYWRfcm91bmRrZXlfZGVjKG4pIFwKKwltb3ZxIHArNCoobi0xKShDVFgpLAlSWDM7IFwKKwlyb3JxICQzMiwJCVJYMzsKKworI2RlZmluZSBhZGRfcm91bmRrZXlfZGVjKCkgXAorCXhvcnEgUlgzLCAJCVJYMDsKKworI2RlZmluZSByb3VuZF9kZWMobikgXAorCWFkZF9yb3VuZGtleV9kZWMoKTsgXAorCWxvYWRfcm91bmRrZXlfZGVjKG4pOyBcCisJXAorCUYoKTsgXAorCUYoKTsKKworI2RlZmluZSByZWFkX2Jsb2NrKCkgXAorCW1vdnEgKFJJTyksIAkJUlgwOyBcCisJcm9ycSAkMzIsIAkJUlgwOyBcCisJYnN3YXBxIAkJCVJYMDsKKworI2RlZmluZSB3cml0ZV9ibG9jaygpIFwKKwlic3dhcHEgCQkJUlgwOyBcCisJbW92cSBSWDAsIAkJKFJJTyk7CisKKy5hbGlnbiA4CisudHlwZSAgIF9fYmxvd2Zpc2hfZW5jX2JsazEsQGZ1bmN0aW9uOworCitfX2Jsb3dmaXNoX2VuY19ibGsxOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJUlgwOiBpbnB1dCBwbGFpbnRleHQgYmxvY2sKKwkgKiBvdXRwdXQ6CisJICoJUlgwOiBvdXRwdXQgcGxhaW50ZXh0IGJsb2NrCisJICovCisJbW92cSAlcmJwLCAlcjExOworCisJbG9hZF9yb3VuZGtleV9lbmMoMCk7CisJcm91bmRfZW5jKDIpOworCXJvdW5kX2VuYyg0KTsKKwlyb3VuZF9lbmMoNik7CisJcm91bmRfZW5jKDgpOworCXJvdW5kX2VuYygxMCk7CisJcm91bmRfZW5jKDEyKTsKKwlyb3VuZF9lbmMoMTQpOworCXJvdW5kX2VuYygxNik7CisJYWRkX3JvdW5ka2V5X2VuYygpOworCisJbW92cSAlcjExLCAlcmJwOworCisJcmV0OworLnNpemUgX19ibG93ZmlzaF9lbmNfYmxrMSwuLV9fYmxvd2Zpc2hfZW5jX2JsazE7CisKKy5hbGlnbiA4CisuZ2xvYmwgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2RvX2VuY3J5cHQKKy50eXBlICAgX2djcnlfYmxvd2Zpc2hfYW1kNjRfZG9fZW5jcnlwdCxAZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FtZDY0X2RvX2VuY3J5cHQ6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiB1MzIgKnJldF94bAorCSAqCSVyZHg6IHUzMiAqcmV0X3hyCisJICovCisJbW92bCAoJXJkeCksIFJYMGQ7CisJc2hscSAkMzIsIFJYMDsKKwltb3ZsICglcnNpKSwgUlQzZDsKKwltb3ZxICVyZHgsICVyMTA7CisJb3JxIFJUMywgUlgwOworCW1vdnEgJXJzaSwgUlgyOworCisJY2FsbCBfX2Jsb3dmaXNoX2VuY19ibGsxOworCisJbW92bCBSWDBkLCAoJXIxMCk7CisJc2hycSAkMzIsIFJYMDsKKwltb3ZsIFJYMGQsIChSWDIpOworCisJcmV0OworLnNpemUgX2djcnlfYmxvd2Zpc2hfYW1kNjRfZG9fZW5jcnlwdCwuLV9nY3J5X2Jsb3dmaXNoX2FtZDY0X2RvX2VuY3J5cHQ7CisKKy5hbGlnbiA4CisuZ2xvYmwgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2VuY3J5cHRfYmxvY2sKKy50eXBlICAgX2djcnlfYmxvd2Zpc2hfYW1kNjRfZW5jcnlwdF9ibG9jayxAZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FtZDY0X2VuY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QKKwkgKgklcmR4OiBzcmMKKwkgKi8KKworCW1vdnEgJXJzaSwgJXIxMDsKKworCW1vdnEgJXJkeCwgUklPOworCXJlYWRfYmxvY2soKTsKKworCWNhbGwgX19ibG93ZmlzaF9lbmNfYmxrMTsKKworCW1vdnEgJXIxMCwgUklPOworCXdyaXRlX2Jsb2NrKCk7CisKKwlyZXQ7Cisuc2l6ZSBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrLC4tX2djcnlfYmxvd2Zpc2hfYW1kNjRfZW5jcnlwdF9ibG9jazsKKworLmFsaWduIDgKKy5nbG9ibCAgX2djcnlfYmxvd2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9kZWNyeXB0X2Jsb2NrLEBmdW5jdGlvbjsKKworX2djcnlfYmxvd2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdAorCSAqCSVyZHg6IHNyYworCSAqLworCW1vdnEgJXJicCwgJXIxMTsKKworCW1vdnEgJXJzaSwgJXIxMDsKKwltb3ZxICVyZHgsIFJJTzsKKworCXJlYWRfYmxvY2soKTsKKworCWxvYWRfcm91bmRrZXlfZGVjKDE3KTsKKwlyb3VuZF9kZWMoMTUpOworCXJvdW5kX2RlYygxMyk7CisJcm91bmRfZGVjKDExKTsKKwlyb3VuZF9kZWMoOSk7CisJcm91bmRfZGVjKDcpOworCXJvdW5kX2RlYyg1KTsKKwlyb3VuZF9kZWMoMyk7CisJcm91bmRfZGVjKDEpOworCWFkZF9yb3VuZGtleV9kZWMoKTsKKworCW1vdnEgJXIxMCwgUklPOworCXdyaXRlX2Jsb2NrKCk7CisKKwltb3ZxICVyMTEsICVyYnA7CisKKwlyZXQ7Cisuc2l6ZSBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9kZWNyeXB0X2Jsb2NrLC4tX2djcnlfYmxvd2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgNC13YXkgYmxvd2Zpc2gsIGZvdXIgYmxvY2tzIHBhcmFsbGVsCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRjQoeCkgXAorCW1vdnpibCB4ICMjIGJoLAkJUlQxZDsgXAorCW1vdnpibCB4ICMjIGJsLAkJUlQzZDsgXAorCXJvcnEgJDE2LAkJeDsgXAorCW1vdnpibCB4ICMjIGJoLAkJUlQwZDsgXAorCW1vdnpibCB4ICMjIGJsLAkJUlQyZDsgXAorCXJvcnEgJDE2LAkJeDsgXAorCW1vdmwgczAoQ1RYLFJUMCw0KSwJUlQwZDsgXAorCWFkZGwgczEoQ1RYLFJUMiw0KSwJUlQwZDsgXAorCXhvcmwgczIoQ1RYLFJUMSw0KSwJUlQwZDsgXAorCWFkZGwgczMoQ1RYLFJUMyw0KSwJUlQwZDsgXAorCXhvcnEgUlQwLAkJeDsKKworI2RlZmluZSBhZGRfcHJlbG9hZGVkX3JvdW5ka2V5NCgpIFwKKwl4b3JxIFJLRVksCQlSWDA7IFwKKwl4b3JxIFJLRVksCQlSWDE7IFwKKwl4b3JxIFJLRVksCQlSWDI7IFwKKwl4b3JxIFJLRVksCQlSWDM7CisKKyNkZWZpbmUgcHJlbG9hZF9yb3VuZGtleV9lbmMobikgXAorCW1vdnEgcCs0KihuKShDVFgpLAlSS0VZOworCisjZGVmaW5lIGFkZF9yb3VuZGtleV9lbmM0KG4pIFwKKwlhZGRfcHJlbG9hZGVkX3JvdW5ka2V5NCgpOyBcCisJcHJlbG9hZF9yb3VuZGtleV9lbmMobiArIDIpOworCisjZGVmaW5lIHJvdW5kX2VuYzQobikgXAorCWFkZF9yb3VuZGtleV9lbmM0KG4pOyBcCisJXAorCUY0KFJYMCk7IFwKKwlGNChSWDEpOyBcCisJRjQoUlgyKTsgXAorCUY0KFJYMyk7IFwKKwlcCisJRjQoUlgwKTsgXAorCUY0KFJYMSk7IFwKKwlGNChSWDIpOyBcCisJRjQoUlgzKTsKKworI2RlZmluZSBwcmVsb2FkX3JvdW5ka2V5X2RlYyhuKSBcCisJbW92cSBwKzQqKChuKS0xKShDVFgpLAlSS0VZOyBcCisJcm9ycSAkMzIsCQlSS0VZOworCisjZGVmaW5lIGFkZF9yb3VuZGtleV9kZWM0KG4pIFwKKwlhZGRfcHJlbG9hZGVkX3JvdW5ka2V5NCgpOyBcCisJcHJlbG9hZF9yb3VuZGtleV9kZWMobiAtIDIpOworCisjZGVmaW5lIHJvdW5kX2RlYzQobikgXAorCWFkZF9yb3VuZGtleV9kZWM0KG4pOyBcCisJXAorCUY0KFJYMCk7IFwKKwlGNChSWDEpOyBcCisJRjQoUlgyKTsgXAorCUY0KFJYMyk7IFwKKwlcCisJRjQoUlgwKTsgXAorCUY0KFJYMSk7IFwKKwlGNChSWDIpOyBcCisJRjQoUlgzKTsKKworI2RlZmluZSBpbmJzd2FwX2Jsb2NrNCgpIFwKKwlyb3JxICQzMiwJCVJYMDsgXAorCWJzd2FwcSAJCQlSWDA7IFwKKwlyb3JxICQzMiwJCVJYMTsgXAorCWJzd2FwcSAJCQlSWDE7IFwKKwlyb3JxICQzMiwJCVJYMjsgXAorCWJzd2FwcSAJCQlSWDI7IFwKKwlyb3JxICQzMiwJCVJYMzsgXAorCWJzd2FwcSAJCQlSWDM7CisKKyNkZWZpbmUgaW5jdHJzd2FwX2Jsb2NrNCgpIFwKKwlyb3JxICQzMiwJCVJYMDsgXAorCXJvcnEgJDMyLAkJUlgxOyBcCisJcm9ycSAkMzIsCQlSWDI7IFwKKwlyb3JxICQzMiwJCVJYMzsKKworI2RlZmluZSBvdXRic3dhcF9ibG9jazQoKSBcCisJYnN3YXBxIAkJCVJYMDsgXAorCWJzd2FwcSAJCQlSWDE7IFwKKwlic3dhcHEgCQkJUlgyOyBcCisJYnN3YXBxIAkJCVJYMzsKKworLmFsaWduIDgKKy50eXBlICAgX19ibG93ZmlzaF9lbmNfYmxrNCxAZnVuY3Rpb247CisKK19fYmxvd2Zpc2hfZW5jX2JsazQ6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKglSWDAsUlgxLFJYMixSWDM6IGZvdXIgaW5wdXQgaW5ic3dhcHBlZCBwbGFpbnRleHQgYmxvY2tzCisJICogb3V0cHV0OgorCSAqCVJYMCxSWDEsUlgyLFJYMzogZm91ciBvdXRwdXQgY2lwaGVydGV4dCBibG9ja3MKKwkgKi8KKwlwcmVsb2FkX3JvdW5ka2V5X2VuYygwKTsKKworCXJvdW5kX2VuYzQoMCk7CisJcm91bmRfZW5jNCgyKTsKKwlyb3VuZF9lbmM0KDQpOworCXJvdW5kX2VuYzQoNik7CisJcm91bmRfZW5jNCg4KTsKKwlyb3VuZF9lbmM0KDEwKTsKKwlyb3VuZF9lbmM0KDEyKTsKKwlyb3VuZF9lbmM0KDE0KTsKKwlhZGRfcHJlbG9hZGVkX3JvdW5ka2V5NCgpOworCisJb3V0YnN3YXBfYmxvY2s0KCk7CisKKwlyZXQ7Cisuc2l6ZSBfX2Jsb3dmaXNoX2VuY19ibGs0LC4tX19ibG93ZmlzaF9lbmNfYmxrNDsKKworLmFsaWduIDgKKy50eXBlICAgX19ibG93ZmlzaF9kZWNfYmxrNCxAZnVuY3Rpb247CisKK19fYmxvd2Zpc2hfZGVjX2JsazQ6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKglSWDAsUlgxLFJYMixSWDM6IGZvdXIgaW5wdXQgY2lwaGVydGV4dCBibG9ja3MKKwkgKiBvdXRwdXQ6CisJICoJUlgwLFJYMSxSWDIsUlgzOiBmb3VyIG91dHB1dCBwbGFpbnRleHQgYmxvY2tzCisJICovCisJcHJlbG9hZF9yb3VuZGtleV9kZWMoMTcpOworCisJaW5ic3dhcF9ibG9jazQoKTsKKworCXJvdW5kX2RlYzQoMTcpOworCXJvdW5kX2RlYzQoMTUpOworCXJvdW5kX2RlYzQoMTMpOworCXJvdW5kX2RlYzQoMTEpOworCXJvdW5kX2RlYzQoOSk7CisJcm91bmRfZGVjNCg3KTsKKwlyb3VuZF9kZWM0KDUpOworCXJvdW5kX2RlYzQoMyk7CisJYWRkX3ByZWxvYWRlZF9yb3VuZGtleTQoKTsKKworCW91dGJzd2FwX2Jsb2NrNCgpOworCisJcmV0OworLnNpemUgX19ibG93ZmlzaF9kZWNfYmxrNCwuLV9fYmxvd2Zpc2hfZGVjX2JsazQ7CisKKy5hbGlnbiA4CisuZ2xvYmwgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2N0cl9lbmMKKy50eXBlICAgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY3RyX2VuYyxAZnVuY3Rpb247CitfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jdHJfZW5jOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0ICg0IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDQgYmxvY2tzKQorCSAqCSVyY3g6IGl2IChiaWcgZW5kaWFuLCA2NGJpdCkKKwkgKi8KKwlwdXNocSAlcmJwOworCXB1c2hxICVyYng7CisJcHVzaHEgJXIxMjsKKwlwdXNocSAlcjEzOworCisJLyogJXIxMS0lcjEzIGFyZSBub3QgdXNlZCBieSBfX2Jsb3dmaXNoX2VuY19ibGs0ICovCisJbW92cSAlcmN4LCAlcjEzOyAvKml2Ki8KKwltb3ZxICVyZHgsICVyMTI7IC8qc3JjKi8KKwltb3ZxICVyc2ksICVyMTE7IC8qZHN0Ki8KKworCS8qIGxvYWQgSVYgYW5kIGJ5dGVzd2FwICovCisJbW92cSAoJXIxMyksIFJUMDsKKwlic3dhcHEgUlQwOworCW1vdnEgUlQwLCBSWDA7CisKKwkvKiBjb25zdHJ1Y3QgSVZzICovCisJbGVhcSAxKFJUMCksIFJYMTsKKwlsZWFxIDIoUlQwKSwgUlgyOworCWxlYXEgMyhSVDApLCBSWDM7CisJbGVhcSA0KFJUMCksIFJUMDsKKwlic3dhcHEgUlQwOworCisJaW5jdHJzd2FwX2Jsb2NrNCgpOworCisJLyogc3RvcmUgbmV3IElWICovCisJbW92cSBSVDAsICglcjEzKTsKKworCWNhbGwgX19ibG93ZmlzaF9lbmNfYmxrNDsKKworCS8qIFhPUiBrZXktc3RyZWFtIHdpdGggcGxhaW50ZXh0ICovCisJeG9ycSAwICogOCglcjEyKSwgUlgwOworCXhvcnEgMSAqIDgoJXIxMiksIFJYMTsKKwl4b3JxIDIgKiA4KCVyMTIpLCBSWDI7CisJeG9ycSAzICogOCglcjEyKSwgUlgzOworCW1vdnEgUlgwLCAwICogOCglcjExKTsKKwltb3ZxIFJYMSwgMSAqIDgoJXIxMSk7CisJbW92cSBSWDIsIDIgKiA4KCVyMTEpOworCW1vdnEgUlgzLCAzICogOCglcjExKTsKKworCXBvcHEgJXIxMzsKKwlwb3BxICVyMTI7CisJcG9wcSAlcmJ4OworCXBvcHEgJXJicDsKKworCXJldDsKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2N0cl9lbmMsLi1fZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jdHJfZW5jOworCisuYWxpZ24gOAorLmdsb2JsICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jYmNfZGVjCisudHlwZSAgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2NiY19kZWMsQGZ1bmN0aW9uOworX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2JjX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoNCBibG9ja3MpCisJICoJJXJkeDogc3JjICg0IGJsb2NrcykKKwkgKgklcmN4OiBpdiAoNjRiaXQpCisJICovCisJcHVzaHEgJXJicDsKKwlwdXNocSAlcmJ4OworCXB1c2hxICVyMTI7CisJcHVzaHEgJXIxMzsKKworCS8qICVyMTEtJXIxMyBhcmUgbm90IHVzZWQgYnkgX19ibG93ZmlzaF9kZWNfYmxrNCAqLworCW1vdnEgJXJzaSwgJXIxMTsgLypkc3QqLworCW1vdnEgJXJkeCwgJXIxMjsgLypzcmMqLworCW1vdnEgJXJjeCwgJXIxMzsgLyppdiovCisKKwkvKiBsb2FkIGlucHV0ICovCisJbW92cSAwICogOCglcjEyKSwgUlgwOworCW1vdnEgMSAqIDgoJXIxMiksIFJYMTsKKwltb3ZxIDIgKiA4KCVyMTIpLCBSWDI7CisJbW92cSAzICogOCglcjEyKSwgUlgzOworCisJY2FsbCBfX2Jsb3dmaXNoX2RlY19ibGs0OworCisJbW92cSAzICogOCglcjEyKSwgUlQwOworCXhvcnEgICAgICAoJXIxMyksIFJYMDsKKwl4b3JxIDAgKiA4KCVyMTIpLCBSWDE7CisJeG9ycSAxICogOCglcjEyKSwgUlgyOworCXhvcnEgMiAqIDgoJXIxMiksIFJYMzsKKwltb3ZxIFJUMCwgKCVyMTMpOyAvKiBzdG9yZSBuZXcgSVYgKi8KKworCW1vdnEgUlgwLCAwICogOCglcjExKTsKKwltb3ZxIFJYMSwgMSAqIDgoJXIxMSk7CisJbW92cSBSWDIsIDIgKiA4KCVyMTEpOworCW1vdnEgUlgzLCAzICogOCglcjExKTsKKworCXBvcHEgJXIxMzsKKwlwb3BxICVyMTI7CisJcG9wcSAlcmJ4OworCXBvcHEgJXJicDsKKworCXJldDsKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2NiY19kZWMsLi1fZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jYmNfZGVjOworCisuYWxpZ24gOAorLmdsb2JsICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jZmJfZGVjCisudHlwZSAgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2NmYl9kZWMsQGZ1bmN0aW9uOworX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2ZiX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoNCBibG9ja3MpCisJICoJJXJkeDogc3JjICg0IGJsb2NrcykKKwkgKgklcmN4OiBpdiAoNjRiaXQpCisJICovCisJcHVzaHEgJXJicDsKKwlwdXNocSAlcmJ4OworCXB1c2hxICVyMTI7CisJcHVzaHEgJXIxMzsKKworCS8qICVyMTEtJXIxMyBhcmUgbm90IHVzZWQgYnkgX19ibG93ZmlzaF9lbmNfYmxrNCAqLworCW1vdnEgJXJjeCwgJXIxMzsgLyppdiovCisJbW92cSAlcmR4LCAlcjEyOyAvKnNyYyovCisJbW92cSAlcnNpLCAlcjExOyAvKmRzdCovCisKKwkvKiBMb2FkIGlucHV0ICovCisJbW92cSAoJXIxMyksIFJYMDsKKwltb3ZxIDAgKiA4KCVyMTIpLCBSWDE7CisJbW92cSAxICogOCglcjEyKSwgUlgyOworCW1vdnEgMiAqIDgoJXIxMiksIFJYMzsKKworCWluYnN3YXBfYmxvY2s0KCk7CisKKwkvKiBVcGRhdGUgSVYgKi8KKwltb3ZxIDMgKiA4KCVyMTIpLCBSVDA7CisJbW92cSBSVDAsICglcjEzKTsKKworCWNhbGwgX19ibG93ZmlzaF9lbmNfYmxrNDsKKworCXhvcnEgMCAqIDgoJXIxMiksIFJYMDsKKwl4b3JxIDEgKiA4KCVyMTIpLCBSWDE7CisJeG9ycSAyICogOCglcjEyKSwgUlgyOworCXhvcnEgMyAqIDgoJXIxMiksIFJYMzsKKwltb3ZxIFJYMCwgMCAqIDgoJXIxMSk7CisJbW92cSBSWDEsIDEgKiA4KCVyMTEpOworCW1vdnEgUlgyLCAyICogOCglcjExKTsKKwltb3ZxIFJYMywgMyAqIDgoJXIxMSk7CisKKwlwb3BxICVyMTM7CisJcG9wcSAlcjEyOworCXBvcHEgJXJieDsKKwlwb3BxICVyYnA7CisJcmV0OworLnNpemUgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2ZiX2RlYywuLV9nY3J5X2Jsb3dmaXNoX2FtZDY0X2NmYl9kZWM7CisKKyNlbmRpZiAvKmRlZmluZWQoVVNFX0JMT1dGSVNIKSovCisjZW5kaWYgLypfX3g4Nl82NCovCmRpZmYgLS1naXQgYS9jaXBoZXIvYmxvd2Zpc2gtYXJtLlMgYi9jaXBoZXIvYmxvd2Zpc2gtYXJtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxZDBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9ibG93ZmlzaC1hcm0uUwpAQCAtMCwwICsxLDc0MyBAQAorLyogYmxvd2Zpc2gtYXJtLlMgIC0gIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiBCbG93ZmlzaCBjaXBoZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoX19BUk1FTF9fKQorI2lmZGVmIEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTCisKKy50ZXh0CisKKy5zeW50YXggdW5pZmllZAorLmFybQorCisvKiBzdHJ1Y3R1cmUgb2YgY3J5cHRvIGNvbnRleHQgKi8KKyNkZWZpbmUgczAJMAorI2RlZmluZSBzMQkoczAgKyAoMSAqIDI1NikgKiA0KQorI2RlZmluZSBzMgkoczAgKyAoMiAqIDI1NikgKiA0KQorI2RlZmluZSBzMwkoczAgKyAoMyAqIDI1NikgKiA0KQorI2RlZmluZSBwCShzMyArICgxICogMjU2KSAqIDQpCisKKy8qIHJlZ2lzdGVyIG1hY3JvcyAqLworI2RlZmluZSBDVFhzMCAlcjAKKyNkZWZpbmUgQ1RYczEgJXI5CisjZGVmaW5lIENUWHMyICVyOAorI2RlZmluZSBDVFhzMyAlcjEwCisjZGVmaW5lIFJNQVNLICVscgorI2RlZmluZSBSS0VZTCAlcjIKKyNkZWZpbmUgUktFWVIgJWlwCisKKyNkZWZpbmUgUkwwICVyMworI2RlZmluZSBSUjAgJXI0CisKKyNkZWZpbmUgUkwxICVyOQorI2RlZmluZSBSUjEgJXIxMAorCisjZGVmaW5lIFJUMCAlcjExCisjZGVmaW5lIFJUMSAlcjcKKyNkZWZpbmUgUlQyICVyNQorI2RlZmluZSBSVDMgJXI2CisKKy8qIGhlbHBlciBtYWNyb3MgKi8KKyNkZWZpbmUgbGRyX3VuYWxpZ25lZF9sZShyb3V0LCByc3JjLCBvZmZzLCBydG1wKSBcCisJbGRyYiByb3V0LCBbcnNyYywgIygob2ZmcykgKyAwKV07IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDEpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzg7IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDIpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzE2OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAzKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMyNDsKKworI2RlZmluZSBzdHJfdW5hbGlnbmVkX2xlKHJpbiwgcmRzdCwgb2ZmcywgcnRtcDAsIHJ0bXAxKSBcCisJbW92IHJ0bXAwLCByaW4sIGxzciAjODsgXAorCXN0cmIgcmluLCBbcmRzdCwgIygob2ZmcykgKyAwKV07IFwKKwltb3YgcnRtcDEsIHJpbiwgbHNyICMxNjsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDEpXTsgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzI0OyBcCisJc3RyYiBydG1wMSwgW3Jkc3QsICMoKG9mZnMpICsgMildOyBcCisJc3RyYiBydG1wMCwgW3Jkc3QsICMoKG9mZnMpICsgMyldOworCisjZGVmaW5lIGxkcl91bmFsaWduZWRfYmUocm91dCwgcnNyYywgb2ZmcywgcnRtcCkgXAorCWxkcmIgcm91dCwgW3JzcmMsICMoKG9mZnMpICsgMyldOyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAyKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICM4OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAxKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMxNjsgXAorCWxkcmIgcnRtcCwgW3JzcmMsICMoKG9mZnMpICsgMCldOyBcCisJb3JyIHJvdXQsIHJvdXQsIHJ0bXAsIGxzbCAjMjQ7CisKKyNkZWZpbmUgc3RyX3VuYWxpZ25lZF9iZShyaW4sIHJkc3QsIG9mZnMsIHJ0bXAwLCBydG1wMSkgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzg7IFwKKwlzdHJiIHJpbiwgW3Jkc3QsICMoKG9mZnMpICsgMyldOyBcCisJbW92IHJ0bXAxLCByaW4sIGxzciAjMTY7IFwKKwlzdHJiIHJ0bXAwLCBbcmRzdCwgIygob2ZmcykgKyAyKV07IFwKKwltb3YgcnRtcDAsIHJpbiwgbHNyICMyNDsgXAorCXN0cmIgcnRtcDEsIFtyZHN0LCAjKChvZmZzKSArIDEpXTsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDApXTsKKworI2lmZGVmIF9fQVJNRUxfXworCSNkZWZpbmUgbGRyX3VuYWxpZ25lZF9ob3N0IGxkcl91bmFsaWduZWRfbGUKKwkjZGVmaW5lIHN0cl91bmFsaWduZWRfaG9zdCBzdHJfdW5hbGlnbmVkX2xlCisKKwkvKiBic3dhcCBvbiBsaXR0bGUtZW5kaWFuICovCisjaWZkZWYgSEFWRV9BUk1fQVJDSF9WNgorCSNkZWZpbmUgaG9zdF90b19iZShyZWcsIHJ0bXApIFwKKwkJcmV2IHJlZywgcmVnOworCSNkZWZpbmUgYmVfdG9faG9zdChyZWcsIHJ0bXApIFwKKwkJcmV2IHJlZywgcmVnOworI2Vsc2UKKwkjZGVmaW5lIGhvc3RfdG9fYmUocmVnLCBydG1wKSBcCisJCWVvcglydG1wLCByZWcsIHJlZywgcm9yICMxNjsgXAorCQltb3YJcnRtcCwgcnRtcCwgbHNyICM4OyBcCisJCWJpYwlydG1wLCBydG1wLCAjNjUyODA7IFwKKwkJZW9yCXJlZywgcnRtcCwgcmVnLCByb3IgIzg7CisJI2RlZmluZSBiZV90b19ob3N0KHJlZywgcnRtcCkgXAorCQllb3IJcnRtcCwgcmVnLCByZWcsIHJvciAjMTY7IFwKKwkJbW92CXJ0bXAsIHJ0bXAsIGxzciAjODsgXAorCQliaWMJcnRtcCwgcnRtcCwgIzY1MjgwOyBcCisJCWVvcglyZWcsIHJ0bXAsIHJlZywgcm9yICM4OworI2VuZGlmCisjZWxzZQorCSNkZWZpbmUgbGRyX3VuYWxpZ25lZF9ob3N0IGxkcl91bmFsaWduZWRfYmUKKwkjZGVmaW5lIHN0cl91bmFsaWduZWRfaG9zdCBzdHJfdW5hbGlnbmVkX2JlCisKKwkvKiBub3Agb24gYmlnLWVuZGlhbiAqLworCSNkZWZpbmUgaG9zdF90b19iZShyZWcsIHJ0bXApIC8qXyovCisJI2RlZmluZSBiZV90b19ob3N0KHJlZywgcnRtcCkgLypfKi8KKyNlbmRpZgorCisjZGVmaW5lIGhvc3RfdG9faG9zdCh4LCB5KSAvKl8qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDEtd2F5IGJsb3dmaXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEYobCwgcikgXAorCWFuZCBSVDAsIFJNQVNLLCBsLCBsc3IjKDI0IC0gMik7IFwKKwlhbmQgUlQxLCBSTUFTSywgbCwgbHNyIygxNiAtIDIpOyBcCisJbGRyIFJUMCwgW0NUWHMwLCBSVDBdOyBcCisJYW5kIFJUMiwgUk1BU0ssIGwsIGxzciMoOCAtIDIpOyBcCisJbGRyIFJUMSwgW0NUWHMxLCBSVDFdOyBcCisJYW5kIFJUMywgUk1BU0ssIGwsIGxzbCMyOyBcCisJbGRyIFJUMiwgW0NUWHMyLCBSVDJdOyBcCisJYWRkIFJUMCwgUlQxOyBcCisJbGRyIFJUMywgW0NUWHMzLCBSVDNdOyBcCisJZW9yIFJUMCwgUlQyOyBcCisJYWRkIFJUMCwgUlQzOyBcCisJZW9yIHIsIFJUMDsKKworI2RlZmluZSBsb2FkX3JvdW5ka2V5X2VuYyhuKSBcCisJbGRyIFJLRVlMLCBbQ1RYczIsICMoKHAgLSBzMikgKyAoNCAqIChuKSArIDApKV07IFwKKwlsZHIgUktFWVIsIFtDVFhzMiwgIygocCAtIHMyKSArICg0ICogKG4pICsgNCkpXTsKKworI2RlZmluZSBhZGRfcm91bmRrZXlfZW5jKCkgXAorCWVvciBSTDAsIFJLRVlMOyBcCisJZW9yIFJSMCwgUktFWVI7CisKKyNkZWZpbmUgcm91bmRfZW5jKG4pIFwKKwlhZGRfcm91bmRrZXlfZW5jKCk7IFwKKwlsb2FkX3JvdW5ka2V5X2VuYyhuKTsgXAorCVwKKwlGKFJMMCwgUlIwKTsgXAorCUYoUlIwLCBSTDApOworCisjZGVmaW5lIGxvYWRfcm91bmRrZXlfZGVjKG4pIFwKKwlsZHIgUktFWUwsIFtDVFhzMiwgIygocCAtIHMyKSArICg0ICogKChuKSAtIDEpICsgNCkpXTsgXAorCWxkciBSS0VZUiwgW0NUWHMyLCAjKChwIC0gczIpICsgKDQgKiAoKG4pIC0gMSkgKyAwKSldOworCisjZGVmaW5lIGFkZF9yb3VuZGtleV9kZWMoKSBcCisJZW9yIFJMMCwgUktFWUw7IFwKKwllb3IgUlIwLCBSS0VZUjsKKworI2RlZmluZSByb3VuZF9kZWMobikgXAorCWFkZF9yb3VuZGtleV9kZWMoKTsgXAorCWxvYWRfcm91bmRrZXlfZGVjKG4pOyBcCisJXAorCUYoUkwwLCBSUjApOyBcCisJRihSUjAsIFJMMCk7CisKKyNkZWZpbmUgcmVhZF9ibG9ja19hbGlnbmVkKHJpbiwgb2ZmcywgbDAsIHIwLCBjb252ZXJ0LCBydG1wKSBcCisJbGRyIGwwLCBbcmluLCAjKChvZmZzKSArIDApXTsgXAorCWxkciByMCwgW3JpbiwgIygob2ZmcykgKyA0KV07IFwKKwljb252ZXJ0KGwwLCBydG1wKTsgXAorCWNvbnZlcnQocjAsIHJ0bXApOworCisjZGVmaW5lIHdyaXRlX2Jsb2NrX2FsaWduZWQocm91dCwgb2ZmcywgbDAsIHIwLCBjb252ZXJ0LCBydG1wKSBcCisJY29udmVydChsMCwgcnRtcCk7IFwKKwljb252ZXJ0KHIwLCBydG1wKTsgXAorCXN0ciBsMCwgW3JvdXQsICMoKG9mZnMpICsgMCldOyBcCisJc3RyIHIwLCBbcm91dCwgIygob2ZmcykgKyA0KV07CisKKyNpZmRlZiBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRAorCS8qIHVuYWxpZ25lZCB3b3JkIHJlYWRzIGFsbG93ZWQgKi8KKwkjZGVmaW5lIHJlYWRfYmxvY2socmluLCBvZmZzLCBsMCwgcjAsIHJ0bXAwKSBcCisJCXJlYWRfYmxvY2tfYWxpZ25lZChyaW4sIG9mZnMsIGwwLCByMCwgaG9zdF90b19iZSwgcnRtcDApCisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrKHJvdXQsIG9mZnMsIHIwLCBsMCwgcnRtcDAsIHJ0bXAxKSBcCisJCXdyaXRlX2Jsb2NrX2FsaWduZWQocm91dCwgb2ZmcywgcjAsIGwwLCBiZV90b19ob3N0LCBydG1wMCkKKworCSNkZWZpbmUgcmVhZF9ibG9ja19ob3N0KHJpbiwgb2ZmcywgbDAsIHIwLCBydG1wMCkgXAorCQlyZWFkX2Jsb2NrX2FsaWduZWQocmluLCBvZmZzLCBsMCwgcjAsIGhvc3RfdG9faG9zdCwgcnRtcDApCisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrX2hvc3Qocm91dCwgb2ZmcywgcjAsIGwwLCBydG1wMCwgcnRtcDEpIFwKKwkJd3JpdGVfYmxvY2tfYWxpZ25lZChyb3V0LCBvZmZzLCByMCwgbDAsIGhvc3RfdG9faG9zdCwgcnRtcDApCisjZWxzZQorCS8qIG5lZWQgdG8gaGFuZGxlIHVuYWxpZ25lZCByZWFkcyBieSBieXRlIHJlYWRzICovCisJI2RlZmluZSByZWFkX2Jsb2NrKHJpbiwgb2ZmcywgbDAsIHIwLCBydG1wMCkgXAorCQl0c3QgcmluLCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUobDAsIHJpbiwgKG9mZnMpICsgMCwgcnRtcDApOyBcCisJCQlsZHJfdW5hbGlnbmVkX2JlKHIwLCByaW4sIChvZmZzKSArIDQsIHJ0bXAwKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlyZWFkX2Jsb2NrX2FsaWduZWQocmluLCBvZmZzLCBsMCwgcjAsIGhvc3RfdG9fYmUsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgd3JpdGVfYmxvY2socm91dCwgb2ZmcywgbDAsIHIwLCBydG1wMCwgcnRtcDEpIFwKKwkJdHN0IHJvdXQsICMzOyBcCisJCWJlcSAxZjsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShsMCwgcm91dCwgKG9mZnMpICsgMCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShyMCwgcm91dCwgKG9mZnMpICsgNCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQl3cml0ZV9ibG9ja19hbGlnbmVkKHJvdXQsIG9mZnMsIGwwLCByMCwgYmVfdG9faG9zdCwgcnRtcDApOyBcCisJCTI6OworCisJI2RlZmluZSByZWFkX2Jsb2NrX2hvc3QocmluLCBvZmZzLCBsMCwgcjAsIHJ0bXAwKSBcCisJCXRzdCByaW4sICMzOyBcCisJCWJlcSAxZjsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KGwwLCByaW4sIChvZmZzKSArIDAsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KHIwLCByaW4sIChvZmZzKSArIDQsIHJ0bXAwKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlyZWFkX2Jsb2NrX2FsaWduZWQocmluLCBvZmZzLCBsMCwgcjAsIGhvc3RfdG9faG9zdCwgcnRtcDApOyBcCisJCTI6OworCisJI2RlZmluZSB3cml0ZV9ibG9ja19ob3N0KHJvdXQsIG9mZnMsIGwwLCByMCwgcnRtcDAsIHJ0bXAxKSBcCisJCXRzdCByb3V0LCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCXN0cl91bmFsaWduZWRfaG9zdChsMCwgcm91dCwgKG9mZnMpICsgMCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9ob3N0KHIwLCByb3V0LCAob2ZmcykgKyA0LCBydG1wMCwgcnRtcDEpOyBcCisJCQliIDJmOyBcCisJCTE6O1wKKwkJCXdyaXRlX2Jsb2NrX2FsaWduZWQocm91dCwgb2ZmcywgbDAsIHIwLCBob3N0X3RvX2hvc3QpOyBcCisJCTI6OworI2VuZGlmCisKKy5hbGlnbiAzCisudHlwZSAgX19ibG93ZmlzaF9lbmNfYmxrMSwlZnVuY3Rpb247CisKK19fYmxvd2Zpc2hfZW5jX2JsazE6CisJLyogaW5wdXQ6CisJICoJcHJlbG9hZGVkOiBDVFgKKwkgKglbUkwwLCBSUjBdOiBzcmMKKwkgKiBvdXRwdXQ6CisJICoJW1JSMCwgUkwwXTogZHN0CisJICovCisJcHVzaCB7JWxyfTsKKworCWFkZCBDVFhzMSwgQ1RYczAsICMoczEgLSBzMCk7CisJYWRkIENUWHMyLCBDVFhzMCwgIyhzMiAtIHMwKTsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsgLyogYnl0ZSBtYXNrICovCisJYWRkIENUWHMzLCBDVFhzMSwgIyhzMyAtIHMxKTsKKworCWxvYWRfcm91bmRrZXlfZW5jKDApOworCXJvdW5kX2VuYygyKTsKKwlyb3VuZF9lbmMoNCk7CisJcm91bmRfZW5jKDYpOworCXJvdW5kX2VuYyg4KTsKKwlyb3VuZF9lbmMoMTApOworCXJvdW5kX2VuYygxMik7CisJcm91bmRfZW5jKDE0KTsKKwlyb3VuZF9lbmMoMTYpOworCWFkZF9yb3VuZGtleV9lbmMoKTsKKworCXBvcCB7JXBjfTsKKy5zaXplIF9fYmxvd2Zpc2hfZW5jX2JsazEsLi1fX2Jsb3dmaXNoX2VuY19ibGsxOworCisuYWxpZ24gOAorLmdsb2JsICBfZ2NyeV9ibG93ZmlzaF9hcm1fZG9fZW5jcnlwdAorLnR5cGUgICBfZ2NyeV9ibG93ZmlzaF9hcm1fZG9fZW5jcnlwdCwlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9kb19lbmNyeXB0OgorCS8qIGlucHV0OgorCSAqCSVyMDogY3R4LCBDVFgKKwkgKgklcjE6IHUzMiAqcmV0X3hsCisJICoJJXIyOiB1MzIgKnJldF94cgorCSAqLworCXB1c2ggeyVyMiwgJXI0LSVyMTEsICVpcCwgJWxyfTsKKworCWxkciBSTDAsIFslcjFdOworCWxkciBSUjAsIFslcjJdOworCisJYmwgX19ibG93ZmlzaF9lbmNfYmxrMTsKKworCXBvcCB7JXIyfTsKKwlzdHIgUlIwLCBbJXIxXTsKKwlzdHIgUkwwLCBbJXIyXTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FybV9kb19lbmNyeXB0LC4tX2djcnlfYmxvd2Zpc2hfYXJtX2RvX2VuY3J5cHQ7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfYmxvd2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2sKKy50eXBlICAgX2djcnlfYmxvd2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2ssJWZ1bmN0aW9uOworCitfZ2NyeV9ibG93ZmlzaF9hcm1fZW5jcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcjA6IGN0eCwgQ1RYCisJICoJJXIxOiBkc3QKKwkgKgklcjI6IHNyYworCSAqLworCXB1c2ggeyVyNC0lcjExLCAlaXAsICVscn07CisKKwlyZWFkX2Jsb2NrKCVyMiwgMCwgUkwwLCBSUjAsIFJUMCk7CisKKwlibCBfX2Jsb3dmaXNoX2VuY19ibGsxOworCisJd3JpdGVfYmxvY2soJXIxLCAwLCBSUjAsIFJMMCwgUlQwLCBSVDEpOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLnNpemUgX2djcnlfYmxvd2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2ssLi1fZ2NyeV9ibG93ZmlzaF9hcm1fZW5jcnlwdF9ibG9jazsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9ibG93ZmlzaF9hcm1fZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV9ibG93ZmlzaF9hcm1fZGVjcnlwdF9ibG9jaywlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9kZWNyeXB0X2Jsb2NrOgorCS8qIGlucHV0OgorCSAqCSVyMDogY3R4LCBDVFgKKwkgKgklcjE6IGRzdAorCSAqCSVyMjogc3JjCisJICovCisJcHVzaCB7JXI0LSVyMTEsICVpcCwgJWxyfTsKKworCWFkZCBDVFhzMSwgQ1RYczAsICMoczEgLSBzMCk7CisJYWRkIENUWHMyLCBDVFhzMCwgIyhzMiAtIHMwKTsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsgLyogYnl0ZSBtYXNrICovCisJYWRkIENUWHMzLCBDVFhzMSwgIyhzMyAtIHMxKTsKKworCXJlYWRfYmxvY2soJXIyLCAwLCBSTDAsIFJSMCwgUlQwKTsKKworCWxvYWRfcm91bmRrZXlfZGVjKDE3KTsKKwlyb3VuZF9kZWMoMTUpOworCXJvdW5kX2RlYygxMyk7CisJcm91bmRfZGVjKDExKTsKKwlyb3VuZF9kZWMoOSk7CisJcm91bmRfZGVjKDcpOworCXJvdW5kX2RlYyg1KTsKKwlyb3VuZF9kZWMoMyk7CisJcm91bmRfZGVjKDEpOworCWFkZF9yb3VuZGtleV9kZWMoKTsKKworCXdyaXRlX2Jsb2NrKCVyMSwgMCwgUlIwLCBSTDAsIFJUMCwgUlQxKTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FybV9kZWNyeXB0X2Jsb2NrLC4tX2djcnlfYmxvd2Zpc2hfYXJtX2RlY3J5cHRfYmxvY2s7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMi13YXkgYmxvd2Zpc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRjIobiwgbDAsIHIwLCBsMSwgcjEsIHNldF9uZXh0aywgZGVjKSBcCisJXAorCWFuZCBSVDAsIFJNQVNLLCBsMCwgbHNyIygyNCAtIDIpOyBcCisJYW5kIFJUMSwgUk1BU0ssIGwwLCBsc3IjKDE2IC0gMik7IFwKKwlhbmQgUlQyLCBSTUFTSywgbDAsIGxzciMoOCAtIDIpOyBcCisJYWRkIFJUMSwgIyhzMSAtIHMwKTsgXAorCVwKKwlsZHIgUlQwLCBbQ1RYczAsIFJUMF07IFwKKwlhbmQgUlQzLCBSTUFTSywgbDAsIGxzbCMyOyBcCisJbGRyIFJUMSwgW0NUWHMwLCBSVDFdOyBcCisJYWRkIFJUMywgIyhzMyAtIHMyKTsgXAorCWxkciBSVDIsIFtDVFhzMiwgUlQyXTsgXAorCWFkZCBSVDAsIFJUMTsgXAorCWxkciBSVDMsIFtDVFhzMiwgUlQzXTsgXAorCVwKKwlhbmQgUlQxLCBSTUFTSywgbDEsIGxzciMoMjQgLSAyKTsgXAorCWVvciBSVDAsIFJUMjsgXAorCWFuZCBSVDIsIFJNQVNLLCBsMSwgbHNyIygxNiAtIDIpOyBcCisJYWRkIFJUMCwgUlQzOyBcCisJYWRkIFJUMiwgIyhzMSAtIHMwKTsgXAorCWFuZCBSVDMsIFJNQVNLLCBsMSwgbHNyIyg4IC0gMik7IFwKKwllb3IgcjAsIFJUMDsgXAorCVwKKwlsZHIgUlQxLCBbQ1RYczAsIFJUMV07IFwKKwlhbmQgUlQwLCBSTUFTSywgbDEsIGxzbCMyOyBcCisJbGRyIFJUMiwgW0NUWHMwLCBSVDJdOyBcCisJYWRkIFJUMCwgIyhzMyAtIHMyKTsgXAorCWxkciBSVDMsIFtDVFhzMiwgUlQzXTsgXAorCWFkZCBSVDEsIFJUMjsgXAorCWxkciBSVDAsIFtDVFhzMiwgUlQwXTsgXAorCVwKKwlhbmQgUlQyLCBSTUFTSywgcjAsIGxzciMoMjQgLSAyKTsgXAorCWVvciBSVDEsIFJUMzsgXAorCWFuZCBSVDMsIFJNQVNLLCByMCwgbHNyIygxNiAtIDIpOyBcCisJYWRkIFJUMSwgUlQwOyBcCisJYWRkIFJUMywgIyhzMSAtIHMwKTsgXAorCWFuZCBSVDAsIFJNQVNLLCByMCwgbHNyIyg4IC0gMik7IFwKKwllb3IgcjEsIFJUMTsgXAorCVwKKwlsZHIgUlQyLCBbQ1RYczAsIFJUMl07IFwKKwlhbmQgUlQxLCBSTUFTSywgcjAsIGxzbCMyOyBcCisJbGRyIFJUMywgW0NUWHMwLCBSVDNdOyBcCisJYWRkIFJUMSwgIyhzMyAtIHMyKTsgXAorCWxkciBSVDAsIFtDVFhzMiwgUlQwXTsgXAorCWFkZCBSVDIsIFJUMzsgXAorCWxkciBSVDEsIFtDVFhzMiwgUlQxXTsgXAorCVwKKwlhbmQgUlQzLCBSTUFTSywgcjEsIGxzciMoMjQgLSAyKTsgXAorCWVvciBSVDIsIFJUMDsgXAorCWFuZCBSVDAsIFJNQVNLLCByMSwgbHNyIygxNiAtIDIpOyBcCisJYWRkIFJUMiwgUlQxOyBcCisJYWRkIFJUMCwgIyhzMSAtIHMwKTsgXAorCWFuZCBSVDEsIFJNQVNLLCByMSwgbHNyIyg4IC0gMik7IFwKKwllb3IgbDAsIFJUMjsgXAorCVwKKwlsZHIgUlQzLCBbQ1RYczAsIFJUM107IFwKKwlhbmQgUlQyLCBSTUFTSywgcjEsIGxzbCMyOyBcCisJbGRyIFJUMCwgW0NUWHMwLCBSVDBdOyBcCisJYWRkIFJUMiwgIyhzMyAtIHMyKTsgXAorCWxkciBSVDEsIFtDVFhzMiwgUlQxXTsgXAorCWVvciBsMSwgUktFWUw7IFwKKwlsZHIgUlQyLCBbQ1RYczIsIFJUMl07IFwKKwlcCisJZW9yIHIwLCBSS0VZUjsgXAorCWFkZCBSVDMsIFJUMDsgXAorCWVvciByMSwgUktFWVI7IFwKKwllb3IgUlQzLCBSVDE7IFwKKwllb3IgbDAsIFJLRVlMOyBcCisJYWRkIFJUMywgUlQyOyBcCisJc2V0X25leHRrKFJLRVlMLCAocCAtIHMyKSArICg0ICogKG4pICsgKChkZWMpICogNCkpKTsgXAorCWVvciBsMSwgUlQzOyBcCisJc2V0X25leHRrKFJLRVlSLCAocCAtIHMyKSArICg0ICogKG4pICsgKCEoZGVjKSAqIDQpKSk7CisKKyNkZWZpbmUgbG9hZF9uX2FkZF9yb3VuZGtleV9lbmMyKG4pIFwKKwlsb2FkX3JvdW5ka2V5X2VuYyhuKTsgXAorCWVvciBSTDAsIFJLRVlMOyBcCisJZW9yIFJSMCwgUktFWVI7IFwKKwllb3IgUkwxLCBSS0VZTDsgXAorCWVvciBSUjEsIFJLRVlSOyBcCisJbG9hZF9yb3VuZGtleV9lbmMoKG4pICsgMik7CisKKyNkZWZpbmUgbmV4dF9rZXkocmVnLCBvZmZzKSBcCisJbGRyIHJlZywgW0NUWHMyLCAjKG9mZnMpXTsKKworI2RlZmluZSBkdW1teSh4LCB5KSAvKiBkbyBub3RoaW5nICovCisKKyNkZWZpbmUgcm91bmRfZW5jMihuLCBsb2FkX25leHRfa2V5KSBcCisJRjIoKG4pICsgMiwgUkwwLCBSUjAsIFJMMSwgUlIxLCBsb2FkX25leHRfa2V5LCAwKTsKKworI2RlZmluZSBsb2FkX25fYWRkX3JvdW5ka2V5X2RlYzIobikgXAorCWxvYWRfcm91bmRrZXlfZGVjKG4pOyBcCisJZW9yIFJMMCwgUktFWUw7IFwKKwllb3IgUlIwLCBSS0VZUjsgXAorCWVvciBSTDEsIFJLRVlMOyBcCisJZW9yIFJSMSwgUktFWVI7IFwKKwlsb2FkX3JvdW5ka2V5X2RlYygobikgLSAyKTsKKworI2RlZmluZSByb3VuZF9kZWMyKG4sIGxvYWRfbmV4dF9rZXkpIFwKKwlGMigobikgLSAzLCBSTDAsIFJSMCwgUkwxLCBSUjEsIGxvYWRfbmV4dF9rZXksIDEpOworCisjZGVmaW5lIHJlYWRfYmxvY2syX2FsaWduZWQocmluLCBsMCwgcjAsIGwxLCByMSwgY29udmVydCwgcnRtcCkgXAorCWxkciBsMCwgW3JpbiwgIygwKV07IFwKKwlsZHIgcjAsIFtyaW4sICMoNCldOyBcCisJY29udmVydChsMCwgcnRtcCk7IFwKKwlsZHIgbDEsIFtyaW4sICMoOCldOyBcCisJY29udmVydChyMCwgcnRtcCk7IFwKKwlsZHIgcjEsIFtyaW4sICMoMTIpXTsgXAorCWNvbnZlcnQobDEsIHJ0bXApOyBcCisJY29udmVydChyMSwgcnRtcCk7CisKKyNkZWZpbmUgd3JpdGVfYmxvY2syX2FsaWduZWQocm91dCwgbDAsIHIwLCBsMSwgcjEsIGNvbnZlcnQsIHJ0bXApIFwKKwljb252ZXJ0KGwwLCBydG1wKTsgXAorCWNvbnZlcnQocjAsIHJ0bXApOyBcCisJY29udmVydChsMSwgcnRtcCk7IFwKKwlzdHIgbDAsIFtyb3V0LCAjKDApXTsgXAorCWNvbnZlcnQocjEsIHJ0bXApOyBcCisJc3RyIHIwLCBbcm91dCwgIyg0KV07IFwKKwlzdHIgbDEsIFtyb3V0LCAjKDgpXTsgXAorCXN0ciByMSwgW3JvdXQsICMoMTIpXTsKKworI2lmZGVmIF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVECisJLyogdW5hbGlnbmVkIHdvcmQgcmVhZHMgYWxsb3dlZCAqLworCSNkZWZpbmUgcmVhZF9ibG9jazIocmluLCBsMCwgcjAsIGwxLCByMSwgcnRtcDApIFwKKwkJcmVhZF9ibG9jazJfYWxpZ25lZChyaW4sIGwwLCByMCwgbDEsIHIxLCBob3N0X3RvX2JlLCBydG1wMCkKKworCSNkZWZpbmUgd3JpdGVfYmxvY2syKHJvdXQsIGwwLCByMCwgbDEsIHIxLCBydG1wMCwgcnRtcDEpIFwKKwkJd3JpdGVfYmxvY2syX2FsaWduZWQocm91dCwgbDAsIHIwLCBsMSwgcjEsIGJlX3RvX2hvc3QsIHJ0bXAwKQorCisJI2RlZmluZSByZWFkX2Jsb2NrMl9ob3N0KHJpbiwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwKSBcCisJCXJlYWRfYmxvY2syX2FsaWduZWQocmluLCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19ob3N0LCBydG1wMCkKKworCSNkZWZpbmUgd3JpdGVfYmxvY2syX2hvc3Qocm91dCwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwLCBydG1wMSkgXAorCQl3cml0ZV9ibG9jazJfYWxpZ25lZChyb3V0LCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19ob3N0LCBydG1wMCkKKyNlbHNlCisJLyogbmVlZCB0byBoYW5kbGUgdW5hbGlnbmVkIHJlYWRzIGJ5IGJ5dGUgcmVhZHMgKi8KKwkjZGVmaW5lIHJlYWRfYmxvY2syKHJpbiwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwKSBcCisJCXRzdCByaW4sICMzOyBcCisJCWJlcSAxZjsgXAorCQkJbGRyX3VuYWxpZ25lZF9iZShsMCwgcmluLCAwLCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUocjAsIHJpbiwgNCwgcnRtcDApOyBcCisJCQlsZHJfdW5hbGlnbmVkX2JlKGwxLCByaW4sIDgsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9iZShyMSwgcmluLCAxMiwgcnRtcDApOyBcCisJCQliIDJmOyBcCisJCTE6O1wKKwkJCXJlYWRfYmxvY2syX2FsaWduZWQocmluLCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19iZSwgcnRtcDApOyBcCisJCTI6OworCisJI2RlZmluZSB3cml0ZV9ibG9jazIocm91dCwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwLCBydG1wMSkgXAorCQl0c3Qgcm91dCwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKGwwLCByb3V0LCAwLCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHIwLCByb3V0LCA0LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKGwxLCByb3V0LCA4LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHIxLCByb3V0LCAxMiwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQl3cml0ZV9ibG9jazJfYWxpZ25lZChyb3V0LCBsMCwgcjAsIGwxLCByMSwgYmVfdG9faG9zdCwgcnRtcDApOyBcCisJCTI6OworCisJI2RlZmluZSByZWFkX2Jsb2NrMl9ob3N0KHJpbiwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwKSBcCisJCXRzdCByaW4sICMzOyBcCisJCWJlcSAxZjsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KGwwLCByaW4sIDAsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KHIwLCByaW4sIDQsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KGwxLCByaW4sIDgsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9ob3N0KHIxLCByaW4sIDEyLCBydG1wMCk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJcmVhZF9ibG9jazJfYWxpZ25lZChyaW4sIGwwLCByMCwgbDEsIHIxLCBob3N0X3RvX2hvc3QsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgd3JpdGVfYmxvY2syX2hvc3Qocm91dCwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwLCBydG1wMSkgXAorCQl0c3Qgcm91dCwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlzdHJfdW5hbGlnbmVkX2hvc3QobDAsIHJvdXQsIDAsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCXN0cl91bmFsaWduZWRfaG9zdChyMCwgcm91dCwgNCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9ob3N0KGwxLCByb3V0LCA4LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2hvc3QocjEsIHJvdXQsIDEyLCBydG1wMCwgcnRtcDEpOyBcCisJCQliIDJmOyBcCisJCTE6O1wKKwkJCXdyaXRlX2Jsb2NrMl9hbGlnbmVkKHJvdXQsIGwwLCByMCwgbDEsIHIxLCBob3N0X3RvX2hvc3QsIHJ0bXAwKTsgXAorCQkyOjsKKyNlbmRpZgorCisuYWxpZ24gMworLnR5cGUgIF9nY3J5X2Jsb3dmaXNoX2FybV9lbmNfYmxrMiwlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9lbmNfYmxrMjoKKwkvKiBpbnB1dDoKKwkgKglwcmVsb2FkZWQ6IENUWAorCSAqCVtSTDAsIFJSMF0sIFtSTDEsIFJSMV06IHNyYworCSAqIG91dHB1dDoKKwkgKglbUlIwLCBSTDBdLCBbUlIxLCBSTDFdOiBkc3QKKwkgKi8KKwlwdXNoIHtSVDAsJWxyfTsKKworCWFkZCBDVFhzMiwgQ1RYczAsICMoczIgLSBzMCk7CisJbW92IFJNQVNLLCAjKDB4ZmYgPDwgMik7IC8qIGJ5dGUgbWFzayAqLworCisJbG9hZF9uX2FkZF9yb3VuZGtleV9lbmMyKDApOworCXJvdW5kX2VuYzIoMiwgbmV4dF9rZXkpOworCXJvdW5kX2VuYzIoNCwgbmV4dF9rZXkpOworCXJvdW5kX2VuYzIoNiwgbmV4dF9rZXkpOworCXJvdW5kX2VuYzIoOCwgbmV4dF9rZXkpOworCXJvdW5kX2VuYzIoMTAsIG5leHRfa2V5KTsKKwlyb3VuZF9lbmMyKDEyLCBuZXh0X2tleSk7CisJcm91bmRfZW5jMigxNCwgbmV4dF9rZXkpOworCXJvdW5kX2VuYzIoMTYsIGR1bW15KTsKKworCWhvc3RfdG9fYmUoUlIwLCBSVDApOworCWhvc3RfdG9fYmUoUkwwLCBSVDApOworCWhvc3RfdG9fYmUoUlIxLCBSVDApOworCWhvc3RfdG9fYmUoUkwxLCBSVDApOworCisJcG9wIHtSVDAsJXBjfTsKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FybV9lbmNfYmxrMiwuLV9nY3J5X2Jsb3dmaXNoX2FybV9lbmNfYmxrMjsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9ibG93ZmlzaF9hcm1fY2ZiX2RlYzsKKy50eXBlICBfZ2NyeV9ibG93ZmlzaF9hcm1fY2ZiX2RlYywlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9jZmJfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyMDogQ1RYCisJICoJJXIxOiBkc3QgKDIgYmxvY2tzKQorCSAqCSVyMjogc3JjICgyIGJsb2NrcykKKwkgKgklcjM6IGl2ICg2NGJpdCkKKwkgKi8KKwlwdXNoIHslcjIsICVyNC0lcjExLCAlaXAsICVscn07CisKKwltb3YgJWxyLCAlcjM7CisKKwkvKiBMb2FkIGlucHV0IChpdi8lcjMgaXMgYWxpZ25lZCwgc3JjLyVyMiBtaWdodCBub3QgYmUpICovCisJbGRtICVyMywge1JMMCwgUlIwfTsKKwlob3N0X3RvX2JlKFJMMCwgUlQwKTsKKwlob3N0X3RvX2JlKFJSMCwgUlQwKTsKKwlyZWFkX2Jsb2NrKCVyMiwgMCwgUkwxLCBSUjEsIFJUMCk7CisKKwkvKiBVcGRhdGUgSVYsIGxvYWQgc3JjWzFdIGFuZCBzYXZlIHRvIGl2WzBdICovCisJcmVhZF9ibG9ja19ob3N0KCVyMiwgOCwgJXI1LCAlcjYsIFJUMCk7CisJc3RtICVsciwgeyVyNSwgJXI2fTsKKworCWJsIF9nY3J5X2Jsb3dmaXNoX2FybV9lbmNfYmxrMjsKKwkvKiByZXN1bHQgaW4gUlIwOlJMMCwgUlIxOlJMMSA9ICVyNDolcjMsICVyMTA6JXI5ICovCisKKwkvKiAlcjE6IGRzdCwgJXIwOiAlc3JjICovCisJcG9wIHslcjB9OworCisJLyogZHN0ID0gc3JjIF4gcmVzdWx0ICovCisJcmVhZF9ibG9jazJfaG9zdCglcjAsICVyNSwgJXI2LCAlcjcsICVyOCwgJWxyKTsKKwllb3IgJXI1LCAlcjQ7CisJZW9yICVyNiwgJXIzOworCWVvciAlcjcsICVyMTA7CisJZW9yICVyOCwgJXI5OworCXdyaXRlX2Jsb2NrMl9ob3N0KCVyMSwgJXI1LCAlcjYsICVyNywgJXI4LCAlcjksICVyMTApOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9ibG93ZmlzaF9hcm1fY2ZiX2RlYywuLV9nY3J5X2Jsb3dmaXNoX2FybV9jZmJfZGVjOworCisuYWxpZ24gMworLmdsb2JsIF9nY3J5X2Jsb3dmaXNoX2FybV9jdHJfZW5jOworLnR5cGUgIF9nY3J5X2Jsb3dmaXNoX2FybV9jdHJfZW5jLCVmdW5jdGlvbjsKKworX2djcnlfYmxvd2Zpc2hfYXJtX2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXIwOiBDVFgKKwkgKgklcjE6IGRzdCAoMiBibG9ja3MpCisJICoJJXIyOiBzcmMgKDIgYmxvY2tzKQorCSAqCSVyMzogaXYgKDY0Yml0LCBiaWctZW5kaWFuKQorCSAqLworCXB1c2ggeyVyMiwgJXI0LSVyMTEsICVpcCwgJWxyfTsKKworCW1vdiAlbHIsICVyMzsKKworCS8qIExvYWQgSVYgKGJpZyA9PiBob3N0IGVuZGlhbikgKi8KKwlyZWFkX2Jsb2NrX2FsaWduZWQoJWxyLCAwLCBSTDAsIFJSMCwgYmVfdG9faG9zdCwgUlQwKTsKKworCS8qIENvbnN0cnVjdCBJVnMgKi8KKwlhZGRzIFJSMSwgUlIwLCAjMTsgLyogKzEgKi8KKwlhZGMgUkwxLCBSTDAsICMwOworCWFkZHMgJXI2LCBSUjEsICMxOyAvKiArMiAqLworCWFkYyAlcjUsIFJMMSwgIzA7CisKKwkvKiBTdG9yZSBuZXcgSVYgKGhvc3QgPT4gYmlnLWVuZGlhbikgKi8KKwl3cml0ZV9ibG9ja19hbGlnbmVkKCVsciwgMCwgJXI1LCAlcjYsIGhvc3RfdG9fYmUsIFJUMCk7CisKKwlibCBfZ2NyeV9ibG93ZmlzaF9hcm1fZW5jX2JsazI7CisJLyogcmVzdWx0IGluIFJSMDpSTDAsIFJSMTpSTDEgPSAlcjQ6JXIzLCAlcjEwOiVyOSAqLworCisJLyogJXIxOiBkc3QsICVyMDogJXNyYyAqLworCXBvcCB7JXIwfTsKKworCS8qIFhPUiBrZXktc3RyZWFtIHdpdGggcGxhaW50ZXh0ICovCisJcmVhZF9ibG9jazJfaG9zdCglcjAsICVyNSwgJXI2LCAlcjcsICVyOCwgJWxyKTsKKwllb3IgJXI1LCAlcjQ7CisJZW9yICVyNiwgJXIzOworCWVvciAlcjcsICVyMTA7CisJZW9yICVyOCwgJXI5OworCXdyaXRlX2Jsb2NrMl9ob3N0KCVyMSwgJXI1LCAlcjYsICVyNywgJXI4LCAlcjksICVyMTApOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9ibG93ZmlzaF9hcm1fY3RyX2VuYywuLV9nY3J5X2Jsb3dmaXNoX2FybV9jdHJfZW5jOworCisuYWxpZ24gMworLnR5cGUgIF9nY3J5X2Jsb3dmaXNoX2FybV9kZWNfYmxrMiwlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9kZWNfYmxrMjoKKwkvKiBpbnB1dDoKKwkgKglwcmVsb2FkZWQ6IENUWAorCSAqCVtSTDAsIFJSMF0sIFtSTDEsIFJSMV06IHNyYworCSAqIG91dHB1dDoKKwkgKglbUlIwLCBSTDBdLCBbUlIxLCBSTDFdOiBkc3QKKwkgKi8KKwlhZGQgQ1RYczIsIENUWHMwLCAjKHMyIC0gczApOworCW1vdiBSTUFTSywgIygweGZmIDw8IDIpOyAvKiBieXRlIG1hc2sgKi8KKworCWxvYWRfbl9hZGRfcm91bmRrZXlfZGVjMigxNyk7CisJcm91bmRfZGVjMigxNSwgbmV4dF9rZXkpOworCXJvdW5kX2RlYzIoMTMsIG5leHRfa2V5KTsKKwlyb3VuZF9kZWMyKDExLCBuZXh0X2tleSk7CisJcm91bmRfZGVjMig5LCBuZXh0X2tleSk7CisJcm91bmRfZGVjMig3LCBuZXh0X2tleSk7CisJcm91bmRfZGVjMig1LCBuZXh0X2tleSk7CisJcm91bmRfZGVjMigzLCBuZXh0X2tleSk7CisJcm91bmRfZGVjMigxLCBkdW1teSk7CisKKwlob3N0X3RvX2JlKFJSMCwgUlQwKTsKKwlob3N0X3RvX2JlKFJMMCwgUlQwKTsKKwlob3N0X3RvX2JlKFJSMSwgUlQwKTsKKwlob3N0X3RvX2JlKFJMMSwgUlQwKTsKKworCWIgLkxkZWNfY2JjX3RhaWw7CisubHRvcmcKKy5zaXplIF9nY3J5X2Jsb3dmaXNoX2FybV9kZWNfYmxrMiwuLV9nY3J5X2Jsb3dmaXNoX2FybV9kZWNfYmxrMjsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9ibG93ZmlzaF9hcm1fY2JjX2RlYzsKKy50eXBlICBfZ2NyeV9ibG93ZmlzaF9hcm1fY2JjX2RlYywlZnVuY3Rpb247CisKK19nY3J5X2Jsb3dmaXNoX2FybV9jYmNfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyMDogQ1RYCisJICoJJXIxOiBkc3QgKDIgYmxvY2tzKQorCSAqCSVyMjogc3JjICgyIGJsb2NrcykKKwkgKgklcjM6IGl2ICg2NGJpdCkKKwkgKi8KKwlwdXNoIHslcjItJXIxMSwgJWlwLCAlbHJ9OworCisJcmVhZF9ibG9jazIoJXIyLCBSTDAsIFJSMCwgUkwxLCBSUjEsIFJUMCk7CisKKwkvKiBkZWNfYmxrMiBpcyBvbmx5IHVzZWQgYnkgY2JjX2RlYywganVtcCBkaXJlY3RseSBpbi9vdXQgaW5zdGVhZAorCSAqIG9mIGZ1bmN0aW9uIGNhbGwuICovCisJYiBfZ2NyeV9ibG93ZmlzaF9hcm1fZGVjX2JsazI7CisuTGRlY19jYmNfdGFpbDoKKwkvKiByZXN1bHQgaW4gUlIwOlJMMCwgUlIxOlJMMSA9ICVyNDolcjMsICVyMTA6JXI5ICovCisKKwkvKiAlcjA6ICVzcmMsICVyMTogZHN0LCAlcjI6IGl2ICovCisJcG9wIHslcjAsICVyMn07CisKKwkvKiBsb2FkIElWKzEgKHNyY1swXSkgdG8gJXI3OiVyOC4gTWlnaHQgYmUgdW5hbGlnbmVkLiAqLworCXJlYWRfYmxvY2tfaG9zdCglcjAsIDAsICVyNywgJXI4LCAlcjUpOworCS8qIGxvYWQgSVYgKGl2WzBdKSB0byAlcjU6JXI2LiAnaXYnIGlzIGFsaWduZWQuICovCisJbGRtICVyMiwgeyVyNSwgJXI2fTsKKworCS8qIG91dFsxXSBePSBJVisxICovCisJZW9yICVyMTAsICVyNzsKKwllb3IgJXI5LCAlcjg7CisJLyogb3V0WzBdIF49IElWICovCisJZW9yICVyNCwgJXI1OworCWVvciAlcjMsICVyNjsKKworCS8qIGxvYWQgSVYrMiAoc3JjWzFdKSB0byAlcjc6JXI4LiBNaWdodCBiZSB1bmFsaWduZWQuICovCisJcmVhZF9ibG9ja19ob3N0KCVyMCwgOCwgJXI3LCAlcjgsICVyNSk7CisJLyogc3RvcmUgSVYrMiB0byBpdlswXSAoYWxpZ25lZCkuICovCisJc3RtICVyMiwgeyVyNywgJXI4fTsKKworCS8qIHN0b3JlIHJlc3VsdCB0byBkc3RbMC0zXS4gTWlnaHQgYmUgdW5hbGlnbmVkLiAqLworCXdyaXRlX2Jsb2NrMl9ob3N0KCVyMSwgJXI0LCAlcjMsICVyMTAsICVyOSwgJXI1LCAlcjYpOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9ibG93ZmlzaF9hcm1fY2JjX2RlYywuLV9nY3J5X2Jsb3dmaXNoX2FybV9jYmNfZGVjOworCisjZW5kaWYgLypIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKi8KKyNlbmRpZiAvKl9fQVJNX0FSQ0ggPj0gNiovCmRpZmYgLS1naXQgYS9jaXBoZXIvYmxvd2Zpc2guYyBiL2NpcGhlci9ibG93ZmlzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDcwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvYmxvd2Zpc2guYwpAQCAtMCwwICsxLDEwNDYgQEAKKy8qIGJsb3dmaXNoLmMgIC0gIEJsb3dmaXNoIGVuY3J5cHRpb24KKyAqCUNvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGFsZ29yaXRobSwgc2VlOgorICogICBCcnVjZSBTY2huZWllcjogQXBwbGllZCBDcnlwdG9ncmFwaHkuIEpvaG4gV2lsZXkgJiBTb25zLCAxOTk2LgorICogICBJU0JOIDAtNDcxLTExNzA5LTkuIFBhZ2VzIDMzNiBmZi4KKyAqLworCisvKiBUZXN0IHZhbHVlczoKKyAqIGtleQkgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgKiBwbGFpbiAgIkJMT1dGSVNIIgorICogY2lwaGVyIDMyIDRFIEQwIEZFIEY0IDEzIEEyIDAzCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci1zZWxmdGVzdC5oIgorCisjZGVmaW5lIEJMT1dGSVNIX0JMT0NLU0laRSA4CisjZGVmaW5lIEJMT1dGSVNIX1JPVU5EUyAxNgorCisKKy8qIFVTRV9BTUQ2NF9BU00gaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEFNRDY0IGFzc2VtYmx5IGNvZGUuICovCisjdW5kZWYgVVNFX0FNRDY0X0FTTQorI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgKEJMT1dGSVNIX1JPVU5EUyA9PSAxNikKKyMgZGVmaW5lIFVTRV9BTUQ2NF9BU00gMQorI2VuZGlmCisKKy8qIFVTRV9BUk1fQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBUk0gYXNzZW1ibHkgY29kZS4gKi8KKyN1bmRlZiBVU0VfQVJNX0FTTQorI2lmIGRlZmluZWQoX19BUk1FTF9fKQorIyBpZiAoQkxPV0ZJU0hfUk9VTkRTID09IDE2KSAmJiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTKQorIyAgZGVmaW5lIFVTRV9BUk1fQVNNIDEKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdTMyIHMwWzI1Nl07CisgICAgdTMyIHMxWzI1Nl07CisgICAgdTMyIHMyWzI1Nl07CisgICAgdTMyIHMzWzI1Nl07CisgICAgdTMyIHBbQkxPV0ZJU0hfUk9VTkRTKzJdOworfSBCTE9XRklTSF9jb250ZXh0OworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90IGJmX3NldGtleSAodm9pZCAqYywgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBrZXlsZW4pOworc3RhdGljIHVuc2lnbmVkIGludCBlbmNyeXB0X2Jsb2NrICh2b2lkICpiYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1Zik7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlY3J5cHRfYmxvY2sgKHZvaWQgKmJjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKTsKKworCisvKiBwcmVjb21wdXRlZCBTIGJveGVzICovCitzdGF0aWMgY29uc3QgdTMyIGtzMFsyNTZdID0geworICAgIDB4RDEzMTBCQTYsMHg5OERGQjVBQywweDJGRkQ3MkRCLDB4RDAxQURGQjcsMHhCOEUxQUZFRCwweDZBMjY3RTk2LAorICAgIDB4QkE3QzkwNDUsMHhGMTJDN0Y5OSwweDI0QTE5OTQ3LDB4QjM5MTZDRjcsMHgwODAxRjJFMiwweDg1OEVGQzE2LAorICAgIDB4NjM2OTIwRDgsMHg3MTU3NEU2OSwweEE0NThGRUEzLDB4RjQ5MzNEN0UsMHgwRDk1NzQ4RiwweDcyOEVCNjU4LAorICAgIDB4NzE4QkNENTgsMHg4MjE1NEFFRSwweDdCNTRBNDFELDB4QzI1QTU5QjUsMHg5QzMwRDUzOSwweDJBRjI2MDEzLAorICAgIDB4QzVEMUIwMjMsMHgyODYwODVGMCwweENBNDE3OTE4LDB4QjhEQjM4RUYsMHg4RTc5RENCMCwweDYwM0ExODBFLAorICAgIDB4NkM5RTBFOEIsMHhCMDFFOEEzRSwweEQ3MTU3N0MxLDB4QkQzMTRCMjcsMHg3OEFGMkZEQSwweDU1NjA1QzYwLAorICAgIDB4RTY1NTI1RjMsMHhBQTU1QUI5NCwweDU3NDg5ODYyLDB4NjNFODE0NDAsMHg1NUNBMzk2QSwweDJBQUIxMEI2LAorICAgIDB4QjRDQzVDMzQsMHgxMTQxRThDRSwweEExNTQ4NkFGLDB4N0M3MkU5OTMsMHhCM0VFMTQxMSwweDYzNkZCQzJBLAorICAgIDB4MkJBOUM1NUQsMHg3NDE4MzFGNiwweENFNUMzRTE2LDB4OUI4NzkzMUUsMHhBRkQ2QkEzMywweDZDMjRDRjVDLAorICAgIDB4N0EzMjUzODEsMHgyODk1ODY3NywweDNCOEY0ODk4LDB4NkI0QkI5QUYsMHhDNEJGRTgxQiwweDY2MjgyMTkzLAorICAgIDB4NjFEODA5Q0MsMHhGQjIxQTk5MSwweDQ4N0NBQzYwLDB4NURFQzgwMzIsMHhFRjg0NUQ1RCwweEU5ODU3NUIxLAorICAgIDB4REMyNjIzMDIsMHhFQjY1MUI4OCwweDIzODkzRTgxLDB4RDM5NkFDQzUsMHgwRjZENkZGMywweDgzRjQ0MjM5LAorICAgIDB4MkUwQjQ0ODIsMHhBNDg0MjAwNCwweDY5QzhGMDRBLDB4OUUxRjlCNUUsMHgyMUM2Njg0MiwweEY2RTk2QzlBLAorICAgIDB4NjcwQzlDNjEsMHhBQkQzODhGMCwweDZBNTFBMEQyLDB4RDg1NDJGNjgsMHg5NjBGQTcyOCwweEFCNTEzM0EzLAorICAgIDB4NkVFRjBCNkMsMHgxMzdBM0JFNCwweEJBM0JGMDUwLDB4N0VGQjJBOTgsMHhBMUYxNjUxRCwweDM5QUYwMTc2LAorICAgIDB4NjZDQTU5M0UsMHg4MjQzMEU4OCwweDhDRUU4NjE5LDB4NDU2RjlGQjQsMHg3RDg0QTVDMywweDNCOEI1RUJFLAorICAgIDB4RTA2Rjc1RDgsMHg4NUMxMjA3MywweDQwMUE0NDlGLDB4NTZDMTZBQTYsMHg0RUQzQUE2MiwweDM2M0Y3NzA2LAorICAgIDB4MUJGRURGNzIsMHg0MjlCMDIzRCwweDM3RDBENzI0LDB4RDAwQTEyNDgsMHhEQjBGRUFEMywweDQ5RjFDMDlCLAorICAgIDB4MDc1MzcyQzksMHg4MDk5MUI3QiwweDI1RDQ3OUQ4LDB4RjZFOERFRjcsMHhFM0ZFNTAxQSwweEI2Nzk0QzNCLAorICAgIDB4OTc2Q0UwQkQsMHgwNEMwMDZCQSwweEMxQTk0RkI2LDB4NDA5RjYwQzQsMHg1RTVDOUVDMiwweDE5NkEyNDYzLAorICAgIDB4NjhGQjZGQUYsMHgzRTZDNTNCNSwweDEzMzlCMkVCLDB4M0I1MkVDNkYsMHg2REZDNTExRiwweDlCMzA5NTJDLAorICAgIDB4Q0M4MTQ1NDQsMHhBRjVFQkQwOSwweEJFRTNEMDA0LDB4REUzMzRBRkQsMHg2NjBGMjgwNywweDE5MkU0QkIzLAorICAgIDB4QzBDQkE4NTcsMHg0NUM4NzQwRiwweEQyMEI1RjM5LDB4QjlEM0ZCREIsMHg1NTc5QzBCRCwweDFBNjAzMjBBLAorICAgIDB4RDZBMTAwQzYsMHg0MDJDNzI3OSwweDY3OUYyNUZFLDB4RkIxRkEzQ0MsMHg4RUE1RTlGOCwweERCMzIyMkY4LAorICAgIDB4M0M3NTE2REYsMHhGRDYxNkIxNSwweDJGNTAxRUM4LDB4QUQwNTUyQUIsMHgzMjNEQjVGQSwweEZEMjM4NzYwLAorICAgIDB4NTMzMTdCNDgsMHgzRTAwREY4MiwweDlFNUM1N0JCLDB4Q0E2RjhDQTAsMHgxQTg3NTYyRSwweERGMTc2OURCLAorICAgIDB4RDU0MkE4RjYsMHgyODdFRkZDMywweEFDNjczMkM2LDB4OEM0RjU1NzMsMHg2OTVCMjdCMCwweEJCQ0E1OEM4LAorICAgIDB4RTFGRkEzNUQsMHhCOEYwMTFBMCwweDEwRkEzRDk4LDB4RkQyMTgzQjgsMHg0QUZDQjU2QywweDJERDFEMzVCLAorICAgIDB4OUE1M0U0NzksMHhCNkY4NDU2NSwweEQyOEU0OUJDLDB4NEJGQjk3OTAsMHhFMURERjJEQSwweEE0Q0I3RTMzLAorICAgIDB4NjJGQjEzNDEsMHhDRUU0QzZFOCwweEVGMjBDQURBLDB4MzY3NzRDMDEsMHhEMDdFOUVGRSwweDJCRjExRkI0LAorICAgIDB4OTVEQkRBNEQsMHhBRTkwOTE5OCwweEVBQUQ4RTcxLDB4NkI5M0Q1QTAsMHhEMDhFRDFEMCwweEFGQzcyNUUwLAorICAgIDB4OEUzQzVCMkYsMHg4RTc1OTRCNywweDhGRjZFMkZCLDB4RjIxMjJCNjQsMHg4ODg4QjgxMiwweDkwMERGMDFDLAorICAgIDB4NEZBRDVFQTAsMHg2ODhGQzMxQywweEQxQ0ZGMTkxLDB4QjNBOEMxQUQsMHgyRjJGMjIxOCwweEJFMEUxNzc3LAorICAgIDB4RUE3NTJERkUsMHg4QjAyMUZBMSwweEU1QTBDQzBGLDB4QjU2Rjc0RTgsMHgxOEFDRjNENiwweENFODlFMjk5LAorICAgIDB4QjRBODRGRTAsMHhGRDEzRTBCNywweDdDQzQzQjgxLDB4RDJBREE4RDksMHgxNjVGQTI2NiwweDgwOTU3NzA1LAorICAgIDB4OTNDQzczMTQsMHgyMTFBMTQ3NywweEU2QUQyMDY1LDB4NzdCNUZBODYsMHhDNzU0NDJGNSwweEZCOUQzNUNGLAorICAgIDB4RUJDREFGMEMsMHg3QjNFODlBMCwweEQ2NDExQkQzLDB4QUUxRTdFNDksMHgwMDI1MEUyRCwweDIwNzFCMzVFLAorICAgIDB4MjI2ODAwQkIsMHg1N0I4RTBBRiwweDI0NjQzNjlCLDB4RjAwOUI5MUUsMHg1NTYzOTExRCwweDU5REZBNkFBLAorICAgIDB4NzhDMTQzODksMHhEOTVBNTM3RiwweDIwN0Q1QkEyLDB4MDJFNUI5QzUsMHg4MzI2MDM3NiwweDYyOTVDRkE5LAorICAgIDB4MTFDODE5NjgsMHg0RTczNEE0MSwweEIzNDcyRENBLDB4N0IxNEE5NEEsMHgxQjUxMDA1MiwweDlBNTMyOTE1LAorICAgIDB4RDYwRjU3M0YsMHhCQzlCQzZFNCwweDJCNjBBNDc2LDB4ODFFNjc0MDAsMHgwOEJBNkZCNSwweDU3MUJFOTFGLAorICAgIDB4RjI5NkVDNkIsMHgyQTBERDkxNSwweEI2NjM2NTIxLDB4RTdCOUY5QjYsMHhGRjM0MDUyRSwweEM1ODU1NjY0LAorICAgIDB4NTNCMDJENUQsMHhBOTlGOEZBMSwweDA4QkE0Nzk5LDB4NkU4NTA3NkEgfTsKKworc3RhdGljIGNvbnN0IHUzMiBrczFbMjU2XSA9IHsKKyAgICAweDRCN0E3MEU5LDB4QjVCMzI5NDQsMHhEQjc1MDkyRSwweEM0MTkyNjIzLDB4QUQ2RUE2QjAsMHg0OUE3REY3RCwKKyAgICAweDlDRUU2MEI4LDB4OEZFREIyNjYsMHhFQ0FBOEM3MSwweDY5OUExN0ZGLDB4NTY2NDUyNkMsMHhDMkIxOUVFMSwKKyAgICAweDE5MzYwMkE1LDB4NzUwOTRDMjksMHhBMDU5MTM0MCwweEU0MTgzQTNFLDB4M0Y1NDk4OUEsMHg1QjQyOUQ2NSwKKyAgICAweDZCOEZFNEQ2LDB4OTlGNzNGRDYsMHhBMUQyOUMwNywweEVGRTgzMEY1LDB4NEQyRDM4RTYsMHhGMDI1NURDMSwKKyAgICAweDRDREQyMDg2LDB4ODQ3MEVCMjYsMHg2MzgyRTlDNiwweDAyMUVDQzVFLDB4MDk2ODZCM0YsMHgzRUJBRUZDOSwKKyAgICAweDNDOTcxODE0LDB4NkI2QTcwQTEsMHg2ODdGMzU4NCwweDUyQTBFMjg2LDB4Qjc5QzUzMDUsMHhBQTUwMDczNywKKyAgICAweDNFMDc4NDFDLDB4N0ZERUFFNUMsMHg4RTdENDRFQywweDU3MTZGMkI4LDB4QjAzQURBMzcsMHhGMDUwMEMwRCwKKyAgICAweEYwMUMxRjA0LDB4MDIwMEIzRkYsMHhBRTBDRjUxQSwweDNDQjU3NEIyLDB4MjU4MzdBNTgsMHhEQzA5MjFCRCwKKyAgICAweEQxOTExM0Y5LDB4N0NBOTJGRjYsMHg5NDMyNDc3MywweDIyRjU0NzAxLDB4M0FFNUU1ODEsMHgzN0MyREFEQywKKyAgICAweEM4QjU3NjM0LDB4OUFGM0REQTcsMHhBOTQ0NjE0NiwweDBGRDAwMzBFLDB4RUNDOEM3M0UsMHhBNDc1MUU0MSwKKyAgICAweEUyMzhDRDk5LDB4M0JFQTBFMkYsMHgzMjgwQkJBMSwweDE4M0VCMzMxLDB4NEU1NDhCMzgsMHg0RjZEQjkwOCwKKyAgICAweDZGNDIwRDAzLDB4RjYwQTA0QkYsMHgyQ0I4MTI5MCwweDI0OTc3Qzc5LDB4NTY3OUIwNzIsMHhCQ0FGODlBRiwKKyAgICAweERFOUE3NzFGLDB4RDk5MzA4MTAsMHhCMzhCQUUxMiwweERDQ0YzRjJFLDB4NTUxMjcyMUYsMHgyRTZCNzEyNCwKKyAgICAweDUwMUFEREU2LDB4OUY4NENEODcsMHg3QTU4NDcxOCwweDc0MDhEQTE3LDB4QkM5RjlBQkMsMHhFOTRCN0Q4QywKKyAgICAweEVDN0FFQzNBLDB4REI4NTFERkEsMHg2MzA5NDM2NiwweEM0NjRDM0QyLDB4RUYxQzE4NDcsMHgzMjE1RDkwOCwKKyAgICAweERENDMzQjM3LDB4MjRDMkJBMTYsMHgxMkExNEQ0MywweDJBNjVDNDUxLDB4NTA5NDAwMDIsMHgxMzNBRTRERCwKKyAgICAweDcxREZGODlFLDB4MTAzMTRFNTUsMHg4MUFDNzdENiwweDVGMTExOTlCLDB4MDQzNTU2RjEsMHhEN0EzQzc2QiwKKyAgICAweDNDMTExODNCLDB4NTkyNEE1MDksMHhGMjhGRTZFRCwweDk3RjFGQkZBLDB4OUVCQUJGMkMsMHgxRTE1M0M2RSwKKyAgICAweDg2RTM0NTcwLDB4RUFFOTZGQjEsMHg4NjBFNUUwQSwweDVBM0UyQUIzLDB4NzcxRkU3MUMsMHg0RTNEMDZGQSwKKyAgICAweDI5NjVEQ0I5LDB4OTlFNzFEMEYsMHg4MDNFODlENiwweDUyNjZDODI1LDB4MkU0Q0M5NzgsMHg5QzEwQjM2QSwKKyAgICAweEM2MTUwRUJBLDB4OTRFMkVBNzgsMHhBNUZDM0M1MywweDFFMEEyREY0LDB4RjJGNzRFQTcsMHgzNjFEMkIzRCwKKyAgICAweDE5MzkyNjBGLDB4MTlDMjc5NjAsMHg1MjIzQTcwOCwweEY3MTMxMkI2LDB4RUJBREZFNkUsMHhFQUMzMUY2NiwKKyAgICAweEUzQkM0NTk1LDB4QTY3QkM4ODMsMHhCMTdGMzdEMSwweDAxOENGRjI4LDB4QzMzMkRERUYsMHhCRTZDNUFBNSwKKyAgICAweDY1NTgyMTg1LDB4NjhBQjk4MDIsMHhFRUNFQTUwRiwweERCMkY5NTNCLDB4MkFFRjdEQUQsMHg1QjZFMkY4NCwKKyAgICAweDE1MjFCNjI4LDB4MjkwNzYxNzAsMHhFQ0RENDc3NSwweDYxOUYxNTEwLDB4MTNDQ0E4MzAsMHhFQjYxQkQ5NiwKKyAgICAweDAzMzRGRTFFLDB4QUEwMzYzQ0YsMHhCNTczNUM5MCwweDRDNzBBMjM5LDB4RDU5RTlFMEIsMHhDQkFBREUxNCwKKyAgICAweEVFQ0M4NkJDLDB4NjA2MjJDQTcsMHg5Q0FCNUNBQiwweEIyRjM4NDZFLDB4NjQ4QjFFQUYsMHgxOUJERjBDQSwKKyAgICAweEEwMjM2OUI5LDB4NjU1QUJCNTAsMHg0MDY4NUEzMiwweDNDMkFCNEIzLDB4MzE5RUU5RDUsMHhDMDIxQjhGNywKKyAgICAweDlCNTQwQjE5LDB4ODc1RkEwOTksMHg5NUY3OTk3RSwweDYyM0Q3REE4LDB4RjgzNzg4OUEsMHg5N0UzMkQ3NywKKyAgICAweDExRUQ5MzVGLDB4MTY2ODEyODEsMHgwRTM1ODgyOSwweEM3RTYxRkQ2LDB4OTZERURGQTEsMHg3ODU4QkE5OSwKKyAgICAweDU3RjU4NEE1LDB4MUIyMjcyNjMsMHg5QjgzQzNGRiwweDFBQzI0Njk2LDB4Q0RCMzBBRUIsMHg1MzJFMzA1NCwKKyAgICAweDhGRDk0OEU0LDB4NkRCQzMxMjgsMHg1OEVCRjJFRiwweDM0QzZGRkVBLDB4RkUyOEVENjEsMHhFRTdDM0M3MywKKyAgICAweDVENEExNEQ5LDB4RTg2NEI3RTMsMHg0MjEwNUQxNCwweDIwM0UxM0UwLDB4NDVFRUUyQjYsMHhBM0FBQUJFQSwKKyAgICAweERCNkM0RjE1LDB4RkFDQjRGRDAsMHhDNzQyRjQ0MiwweEVGNkFCQkI1LDB4NjU0RjNCMUQsMHg0MUNEMjEwNSwKKyAgICAweEQ4MUU3OTlFLDB4ODY4NTREQzcsMHhFNDRCNDc2QSwweDNEODE2MjUwLDB4Q0Y2MkExRjIsMHg1QjhEMjY0NiwKKyAgICAweEZDODg4M0EwLDB4QzFDN0I2QTMsMHg3RjE1MjRDMywweDY5Q0I3NDkyLDB4NDc4NDhBMEIsMHg1NjkyQjI4NSwKKyAgICAweDA5NUJCRjAwLDB4QUQxOTQ4OUQsMHgxNDYyQjE3NCwweDIzODIwRTAwLDB4NTg0MjhEMkEsMHgwQzU1RjVFQSwKKyAgICAweDFEQURGNDNFLDB4MjMzRjcwNjEsMHgzMzcyRjA5MiwweDhEOTM3RTQxLDB4RDY1RkVDRjEsMHg2QzIyM0JEQiwKKyAgICAweDdDREUzNzU5LDB4Q0JFRTc0NjAsMHg0MDg1RjJBNywweENFNzczMjZFLDB4QTYwNzgwODQsMHgxOUY4NTA5RSwKKyAgICAweEU4RUZEODU1LDB4NjFEOTk3MzUsMHhBOTY5QTdBQSwweEM1MEMwNkMyLDB4NUEwNEFCRkMsMHg4MDBCQ0FEQywKKyAgICAweDlFNDQ3QTJFLDB4QzM0NTM0ODQsMHhGREQ1NjcwNSwweDBFMUU5RUM5LDB4REI3M0RCRDMsMHgxMDU1ODhDRCwKKyAgICAweDY3NUZEQTc5LDB4RTM2NzQzNDAsMHhDNUM0MzQ2NSwweDcxM0UzOEQ4LDB4M0QyOEY4OUUsMHhGMTZERkYyMCwKKyAgICAweDE1M0UyMUU3LDB4OEZCMDNENEEsMHhFNkUzOUYyQiwweERCODNBREY3IH07CisKK3N0YXRpYyBjb25zdCB1MzIga3MyWzI1Nl0gPSB7CisgICAgMHhFOTNENUE2OCwweDk0ODE0MEY3LDB4RjY0QzI2MUMsMHg5NDY5MjkzNCwweDQxMTUyMEY3LDB4NzYwMkQ0RjcsCisgICAgMHhCQ0Y0NkIyRSwweEQ0QTIwMDY4LDB4RDQwODI0NzEsMHgzMzIwRjQ2QSwweDQzQjdENEI3LDB4NTAwMDYxQUYsCisgICAgMHgxRTM5RjYyRSwweDk3MjQ0NTQ2LDB4MTQyMTRGNzQsMHhCRjhCODg0MCwweDREOTVGQzFELDB4OTZCNTkxQUYsCisgICAgMHg3MEY0REREMywweDY2QTAyRjQ1LDB4QkZCQzA5RUMsMHgwM0JEOTc4NSwweDdGQUM2REQwLDB4MzFDQjg1MDQsCisgICAgMHg5NkVCMjdCMywweDU1RkQzOTQxLDB4REEyNTQ3RTYsMHhBQkNBMEE5QSwweDI4NTA3ODI1LDB4NTMwNDI5RjQsCisgICAgMHgwQTJDODZEQSwweEU5QjY2REZCLDB4NjhEQzE0NjIsMHhENzQ4NjkwMCwweDY4MEVDMEE0LDB4MjdBMThERUUsCisgICAgMHg0RjNGRkVBMiwweEU4ODdBRDhDLDB4QjU4Q0UwMDYsMHg3QUY0RDZCNiwweEFBQ0UxRTdDLDB4RDMzNzVGRUMsCisgICAgMHhDRTc4QTM5OSwweDQwNkIyQTQyLDB4MjBGRTlFMzUsMHhEOUYzODVCOSwweEVFMzlEN0FCLDB4M0IxMjRFOEIsCisgICAgMHgxREM5RkFGNywweDRCNkQxODU2LDB4MjZBMzY2MzEsMHhFQUUzOTdCMiwweDNBNkVGQTc0LDB4REQ1QjQzMzIsCisgICAgMHg2ODQxRTdGNywweENBNzgyMEZCLDB4RkIwQUY1NEUsMHhEOEZFQjM5NywweDQ1NDA1NkFDLDB4QkE0ODk1MjcsCisgICAgMHg1NTUzM0EzQSwweDIwODM4RDg3LDB4RkU2QkE5QjcsMHhEMDk2OTU0QiwweDU1QTg2N0JDLDB4QTExNTlBNTgsCisgICAgMHhDQ0E5Mjk2MywweDk5RTFEQjMzLDB4QTYyQTRBNTYsMHgzRjMxMjVGOSwweDVFRjQ3RTFDLDB4OTAyOTMxN0MsCisgICAgMHhGREY4RTgwMiwweDA0MjcyRjcwLDB4ODBCQjE1NUMsMHgwNTI4MkNFMywweDk1QzExNTQ4LDB4RTRDNjZEMjIsCisgICAgMHg0OEMxMTMzRiwweEM3MEY4NkRDLDB4MDdGOUM5RUUsMHg0MTA0MUYwRiwweDQwNDc3OUE0LDB4NUQ4ODZFMTcsCisgICAgMHgzMjVGNTFFQiwweEQ1OUJDMEQxLDB4RjJCQ0MxOEYsMHg0MTExMzU2NCwweDI1N0I3ODM0LDB4NjAyQTlDNjAsCisgICAgMHhERkY4RThBMywweDFGNjM2QzFCLDB4MEUxMkI0QzIsMHgwMkUxMzI5RSwweEFGNjY0RkQxLDB4Q0FEMTgxMTUsCisgICAgMHg2QjIzOTVFMCwweDMzM0U5MkUxLDB4M0IyNDBCNjIsMHhFRUJFQjkyMiwweDg1QjJBMjBFLDB4RTZCQTBEOTksCisgICAgMHhERTcyMEM4QywweDJEQTJGNzI4LDB4RDAxMjc4NDUsMHg5NUI3OTRGRCwweDY0N0QwODYyLDB4RTdDQ0Y1RjAsCisgICAgMHg1NDQ5QTM2RiwweDg3N0Q0OEZBLDB4QzM5REZEMjcsMHhGMzNFOEQxRSwweDBBNDc2MzQxLDB4OTkyRUZGNzQsCisgICAgMHgzQTZGNkVBQiwweEY0RjhGRDM3LDB4QTgxMkRDNjAsMHhBMUVCRERGOCwweDk5MUJFMTRDLDB4REI2RTZCMEQsCisgICAgMHhDNjdCNTUxMCwweDZENjcyQzM3LDB4Mjc2NUQ0M0IsMHhEQ0QwRTgwNCwweEYxMjkwREM3LDB4Q0MwMEZGQTMsCisgICAgMHhCNTM5MEY5MiwweDY5MEZFRDBCLDB4NjY3QjlGRkIsMHhDRURCN0Q5QywweEEwOTFDRjBCLDB4RDkxNTVFQTMsCisgICAgMHhCQjEzMkY4OCwweDUxNUJBRDI0LDB4N0I5NDc5QkYsMHg3NjNCRDZFQiwweDM3MzkyRUIzLDB4Q0MxMTU5NzksCisgICAgMHg4MDI2RTI5NywweEY0MkUzMTJELDB4Njg0MkFEQTcsMHhDNjZBMkIzQiwweDEyNzU0Q0NDLDB4NzgyRUYxMUMsCisgICAgMHg2QTEyNDIzNywweEI3OTI1MUU3LDB4MDZBMUJCRTYsMHg0QkZCNjM1MCwweDFBNkIxMDE4LDB4MTFDQUVERkEsCisgICAgMHgzRDI1QkREOCwweEUyRTFDM0M5LDB4NDQ0MjE2NTksMHgwQTEyMTM4NiwweEQ5MENFQzZFLDB4RDVBQkVBMkEsCisgICAgMHg2NEFGNjc0RSwweERBODZBODVGLDB4QkVCRkU5ODgsMHg2NEU0QzNGRSwweDlEQkM4MDU3LDB4RjBGN0MwODYsCisgICAgMHg2MDc4N0JGOCwweDYwMDM2MDRELDB4RDFGRDgzNDYsMHhGNjM4MUZCMCwweDc3NDVBRTA0LDB4RDczNkZDQ0MsCisgICAgMHg4MzQyNkIzMywweEYwMUVBQjcxLDB4QjA4MDQxODcsMHgzQzAwNUU1RiwweDc3QTA1N0JFLDB4QkRFOEFFMjQsCisgICAgMHg1NTQ2NDI5OSwweEJGNTgyRTYxLDB4NEU1OEY0OEYsMHhGMkRERkRBMiwweEY0NzRFRjM4LDB4ODc4OUJEQzIsCisgICAgMHg1MzY2RjlDMywweEM4QjM4RTc0LDB4QjQ3NUYyNTUsMHg0NkZDRDlCOSwweDdBRUIyNjYxLDB4OEIxRERGODQsCisgICAgMHg4NDZBMEU3OSwweDkxNUY5NUUyLDB4NDY2RTU5OEUsMHgyMEI0NTc3MCwweDhDRDU1NTkxLDB4QzkwMkRFNEMsCisgICAgMHhCOTBCQUNFMSwweEJCODIwNUQwLDB4MTFBODYyNDgsMHg3NTc0QTk5RSwweEI3N0YxOUI2LDB4RTBBOURDMDksCisgICAgMHg2NjJEMDlBMSwweEM0MzI0NjMzLDB4RTg1QTFGMDIsMHgwOUYwQkU4QywweDRBOTlBMDI1LDB4MUQ2RUZFMTAsCisgICAgMHgxQUI5M0QxRCwweDBCQTVBNERGLDB4QTE4NkYyMEYsMHgyODY4RjE2OSwweERDQjdEQTgzLDB4NTczOTA2RkUsCisgICAgMHhBMUUyQ0U5QiwweDRGQ0Q3RjUyLDB4NTAxMTVFMDEsMHhBNzA2ODNGQSwweEEwMDJCNUM0LDB4MERFNkQwMjcsCisgICAgMHg5QUY4OEMyNywweDc3M0Y4NjQxLDB4QzM2MDRDMDYsMHg2MUE4MDZCNSwweEYwMTc3QTI4LDB4QzBGNTg2RTAsCisgICAgMHgwMDYwNThBQSwweDMwREM3RDYyLDB4MTFFNjlFRDcsMHgyMzM4RUE2MywweDUzQzJERDk0LDB4QzJDMjE2MzQsCisgICAgMHhCQkNCRUU1NiwweDkwQkNCNkRFLDB4RUJGQzdEQTEsMHhDRTU5MUQ3NiwweDZGMDVFNDA5LDB4NEI3QzAxODgsCisgICAgMHgzOTcyMEEzRCwweDdDOTI3QzI0LDB4ODZFMzcyNUYsMHg3MjREOURCOSwweDFBQzE1QkI0LDB4RDM5RUI4RkMsCisgICAgMHhFRDU0NTU3OCwweDA4RkNBNUI1LDB4RDgzRDdDRDMsMHg0REFEMEZDNCwweDFFNTBFRjVFLDB4QjE2MUU2RjgsCisgICAgMHhBMjg1MTREOSwweDZDNTExMzNDLDB4NkZENUM3RTcsMHg1NkUxNEVDNCwweDM2MkFCRkNFLDB4RERDNkM4MzcsCisgICAgMHhENzlBMzIzNCwweDkyNjM4MjEyLDB4NjcwRUZBOEUsMHg0MDYwMDBFMCB9OworCitzdGF0aWMgY29uc3QgdTMyIGtzM1syNTZdID0geworICAgIDB4M0EzOUNFMzcsMHhEM0ZBRjVDRiwweEFCQzI3NzM3LDB4NUFDNTJEMUIsMHg1Q0IwNjc5RSwweDRGQTMzNzQyLAorICAgIDB4RDM4MjI3NDAsMHg5OUJDOUJCRSwweEQ1MTE4RTlELDB4QkYwRjczMTUsMHhENjJEMUM3RSwweEM3MDBDNDdCLAorICAgIDB4Qjc4QzFCNkIsMHgyMUExOTA0NSwweEIyNkVCMUJFLDB4NkEzNjZFQjQsMHg1NzQ4QUIyRiwweEJDOTQ2RTc5LAorICAgIDB4QzZBMzc2RDIsMHg2NTQ5QzJDOCwweDUzMEZGOEVFLDB4NDY4RERFN0QsMHhENTczMEExRCwweDRDRDA0REM2LAorICAgIDB4MjkzOUJCREIsMHhBOUJBNDY1MCwweEFDOTUyNkU4LDB4QkU1RUUzMDQsMHhBMUZBRDVGMCwweDZBMkQ1MTlBLAorICAgIDB4NjNFRjhDRTIsMHg5QTg2RUUyMiwweEMwODlDMkI4LDB4NDMyNDJFRjYsMHhBNTFFMDNBQSwweDlDRjJEMEE0LAorICAgIDB4ODNDMDYxQkEsMHg5QkU5NkE0RCwweDhGRTUxNTUwLDB4QkE2NDVCRDYsMHgyODI2QTJGOSwweEE3M0EzQUUxLAorICAgIDB4NEJBOTk1ODYsMHhFRjU1NjJFOSwweEM3MkZFRkQzLDB4Rjc1MkY3REEsMHgzRjA0NkY2OSwweDc3RkEwQTU5LAorICAgIDB4ODBFNEE5MTUsMHg4N0IwODYwMSwweDlCMDlFNkFELDB4M0IzRUU1OTMsMHhFOTkwRkQ1QSwweDlFMzRENzk3LAorICAgIDB4MkNGMEI3RDksMHgwMjJCOEI1MSwweDk2RDVBQzNBLDB4MDE3REE2N0QsMHhEMUNGM0VENiwweDdDN0QyRDI4LAorICAgIDB4MUY5RjI1Q0YsMHhBREYyQjg5QiwweDVBRDZCNDcyLDB4NUE4OEY1NEMsMHhFMDI5QUM3MSwweEUwMTlBNUU2LAorICAgIDB4NDdCMEFDRkQsMHhFRDkzRkE5QiwweEU4RDNDNDhELDB4MjgzQjU3Q0MsMHhGOEQ1NjYyOSwweDc5MTMyRTI4LAorICAgIDB4Nzg1RjAxOTEsMHhFRDc1NjA1NSwweEY3OTYwRTQ0LDB4RTNEMzVFOEMsMHgxNTA1NkRENCwweDg4RjQ2REJBLAorICAgIDB4MDNBMTYxMjUsMHgwNTY0RjBCRCwweEMzRUI5RTE1LDB4M0M5MDU3QTIsMHg5NzI3MUFFQywweEE5M0EwNzJBLAorICAgIDB4MUIzRjZEOUIsMHgxRTYzMjFGNSwweEY1OUM2NkZCLDB4MjZEQ0YzMTksMHg3NTMzRDkyOCwweEIxNTVGREY1LAorICAgIDB4MDM1NjM0ODIsMHg4QUJBM0NCQiwweDI4NTE3NzExLDB4QzIwQUQ5RjgsMHhBQkNDNTE2NywweENDQUQ5MjVGLAorICAgIDB4NERFODE3NTEsMHgzODMwREM4RSwweDM3OUQ1ODYyLDB4OTMyMEY5OTEsMHhFQTdBOTBDMiwweEZCM0U3QkNFLAorICAgIDB4NTEyMUNFNjQsMHg3NzRGQkUzMiwweEE4QjZFMzdFLDB4QzMyOTNENDYsMHg0OERFNTM2OSwweDY0MTNFNjgwLAorICAgIDB4QTJBRTA4MTAsMHhERDZEQjIyNCwweDY5ODUyREZELDB4MDkwNzIxNjYsMHhCMzlBNDYwQSwweDY0NDVDMERELAorICAgIDB4NTg2Q0RFQ0YsMHgxQzIwQzhBRSwweDVCQkVGN0RELDB4MUI1ODhENDAsMHhDQ0QyMDE3RiwweDZCQjRFM0JCLAorICAgIDB4RERBMjZBN0UsMHgzQTU5RkY0NSwweDNFMzUwQTQ0LDB4QkNCNENERDUsMHg3MkVBQ0VBOCwweEZBNjQ4NEJCLAorICAgIDB4OEQ2NjEyQUUsMHhCRjNDNkY0NywweEQyOUJFNDYzLDB4NTQyRjVEOUUsMHhBRUMyNzcxQiwweEY2NEU2MzcwLAorICAgIDB4NzQwRTBEOEQsMHhFNzVCMTM1NywweEY4NzIxNjcxLDB4QUY1MzdENUQsMHg0MDQwQ0IwOCwweDRFQjRFMkNDLAorICAgIDB4MzREMjQ2NkEsMHgwMTE1QUY4NCwweEUxQjAwNDI4LDB4OTU5ODNBMUQsMHgwNkI4OUZCNCwweENFNkVBMDQ4LAorICAgIDB4NkYzRjNCODIsMHgzNTIwQUI4MiwweDAxMUExRDRCLDB4Mjc3MjI3RjgsMHg2MTE1NjBCMSwweEU3OTMzRkRDLAorICAgIDB4QkIzQTc5MkIsMHgzNDQ1MjVCRCwweEEwODgzOUUxLDB4NTFDRTc5NEIsMHgyRjMyQzlCNywweEEwMUZCQUM5LAorICAgIDB4RTAxQ0M4N0UsMHhCQ0M3RDFGNiwweENGMDExMUMzLDB4QTFFOEFBQzcsMHgxQTkwODc0OSwweEQ0NEZCRDlBLAorICAgIDB4RDBEQURFQ0IsMHhENTBBREEzOCwweDAzMzlDMzJBLDB4QzY5MTM2NjcsMHg4REY5MzE3QywweEUwQjEyQjRGLAorICAgIDB4Rjc5RTU5QjcsMHg0M0Y1QkIzQSwweEYyRDUxOUZGLDB4MjdEOTQ1OUMsMHhCRjk3MjIyQywweDE1RTZGQzJBLAorICAgIDB4MEY5MUZDNzEsMHg5Qjk0MTUyNSwweEZBRTU5MzYxLDB4Q0VCNjlDRUIsMHhDMkE4NjQ1OSwweDEyQkFBOEQxLAorICAgIDB4QjZDMTA3NUUsMHhFMzA1NkEwQywweDEwRDI1MDY1LDB4Q0IwM0E0NDIsMHhFMEVDNkUwRSwweDE2OThEQjNCLAorICAgIDB4NEM5OEEwQkUsMHgzMjc4RTk2NCwweDlGMUY5NTMyLDB4RTBEMzkyREYsMHhEM0EwMzQyQiwweDg5NzFGMjFFLAorICAgIDB4MUIwQTc0NDEsMHg0QkEzMzQ4QywweEM1QkU3MTIwLDB4QzM3NjMyRDgsMHhERjM1OUY4RCwweDlCOTkyRjJFLAorICAgIDB4RTYwQjZGNDcsMHgwRkUzRjExRCwweEU1NENEQTU0LDB4MUVEQUQ4OTEsMHhDRTYyNzlDRiwweENEM0U3RTZGLAorICAgIDB4MTYxOEIxNjYsMHhGRDJDMUQwNSwweDg0OEZEMkM1LDB4RjZGQjIyOTksMHhGNTIzRjM1NywweEE2MzI3NjIzLAorICAgIDB4OTNBODM1MzEsMHg1NkNDQ0QwMiwweEFDRjA4MTYyLDB4NUE3NUVCQjUsMHg2RTE2MzY5NywweDg4RDI3M0NDLAorICAgIDB4REU5NjYyOTIsMHg4MUI5NDlEMCwweDRDNTA5MDFCLDB4NzFDNjU2MTQsMHhFNkM2QzdCRCwweDMyN0ExNDBBLAorICAgIDB4NDVFMUQwMDYsMHhDM0YyN0I5QSwweEM5QUE1M0ZELDB4NjJBODBGMDAsMHhCQjI1QkZFMiwweDM1QkREMkY2LAorICAgIDB4NzExMjY5MDUsMHhCMjA0MDIyMiwweEI2Q0JDRjdDLDB4Q0Q3NjlDMkIsMHg1MzExM0VDMCwweDE2NDBFM0QzLAorICAgIDB4MzhBQkJENjAsMHgyNTQ3QURGMCwweEJBMzgyMDlDLDB4Rjc0NkNFNzYsMHg3N0FGQTFDNSwweDIwNzU2MDYwLAorICAgIDB4ODVDQkZFNEUsMHg4QUU4OEREOCwweDdBQUFGOUIwLDB4NENGOUFBN0UsMHgxOTQ4QzI1QywweDAyRkI4QThDLAorICAgIDB4MDFDMzZBRTQsMHhENkVCRTFGOSwweDkwRDRGODY5LDB4QTY1Q0RFQTAsMHgzRjA5MjUyRCwweEMyMDhFNjlGLAorICAgIDB4Qjc0RTYxMzIsMHhDRTc3RTI1QiwweDU3OEZERkUzLDB4M0FDMzcyRTYgfTsKKworc3RhdGljIGNvbnN0IHUzMiBwc1tCTE9XRklTSF9ST1VORFMrMl0gPSB7CisgICAgMHgyNDNGNkE4OCwweDg1QTMwOEQzLDB4MTMxOThBMkUsMHgwMzcwNzM0NCwweEE0MDkzODIyLDB4Mjk5RjMxRDAsCisgICAgMHgwODJFRkE5OCwweEVDNEU2Qzg5LDB4NDUyODIxRTYsMHgzOEQwMTM3NywweEJFNTQ2NkNGLDB4MzRFOTBDNkMsCisgICAgMHhDMEFDMjlCNywweEM5N0M1MERELDB4M0Y4NEQ1QjUsMHhCNTQ3MDkxNywweDkyMTZENUQ5LDB4ODk3OUZCMUIgfTsKKworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorCisvKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMgb2YgQmxvd2Zpc2guICovCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9kb19lbmNyeXB0KEJMT1dGSVNIX2NvbnRleHQgKmMsIHUzMiAqcmV0X3hsLAorCQkJCQkgICAgdTMyICpyZXRfeHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrKEJMT1dGSVNIX2NvbnRleHQgKmMsIGJ5dGUgKm91dCwKKwkJCQkJICAgICAgIGNvbnN0IGJ5dGUgKmluKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfYmxvd2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jayhCTE9XRklTSF9jb250ZXh0ICpjLCBieXRlICpvdXQsCisJCQkJCSAgICAgICBjb25zdCBieXRlICppbik7CisKKy8qIFRoZXNlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBwcm9jZXNzIGZvdXIgYmxvY2tzIGluIHBhcmFsbGVsLiAqLworZXh0ZXJuIHZvaWQgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY3RyX2VuYyhCTE9XRklTSF9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkJIGNvbnN0IGJ5dGUgKmluLCBieXRlICpjdHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jYmNfZGVjKEJMT1dGSVNIX2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0LAorCQkJCQkgY29uc3QgYnl0ZSAqaW4sIGJ5dGUgKml2KTsKKworZXh0ZXJuIHZvaWQgX2djcnlfYmxvd2Zpc2hfYW1kNjRfY2ZiX2RlYyhCTE9XRklTSF9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkJIGNvbnN0IGJ5dGUgKmluLCBieXRlICppdik7CisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0ICggQkxPV0ZJU0hfY29udGV4dCAqYmMsIHUzMiAqcmV0X3hsLCB1MzIgKnJldF94ciApCit7CisgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2RvX2VuY3J5cHQgKGJjLCByZXRfeGwsIHJldF94cik7Cit9CisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0X2Jsb2NrIChCTE9XRklTSF9jb250ZXh0ICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrIChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKK30KKworc3RhdGljIHZvaWQKK2RvX2RlY3J5cHRfYmxvY2sgKEJMT1dGSVNIX2NvbnRleHQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2RlY3J5cHRfYmxvY2sgKGNvbnRleHQsIG91dGJ1ZiwgaW5idWYpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitlbmNyeXB0X2Jsb2NrICh2b2lkICpjb250ZXh0ICwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQkxPV0ZJU0hfY29udGV4dCAqYyA9IChCTE9XRklTSF9jb250ZXh0ICopIGNvbnRleHQ7CisgIGRvX2VuY3J5cHRfYmxvY2sgKGMsIG91dGJ1ZiwgaW5idWYpOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDIqOCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIEJMT1dGSVNIX2NvbnRleHQgKmMgPSAoQkxPV0ZJU0hfY29udGV4dCAqKSBjb250ZXh0OworICBkb19kZWNyeXB0X2Jsb2NrIChjLCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgyKjgpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9BUk1fQVNNKQorCisvKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMgb2YgQmxvd2Zpc2guICovCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hcm1fZG9fZW5jcnlwdChCTE9XRklTSF9jb250ZXh0ICpjLCB1MzIgKnJldF94bCwKKwkJCQkJICAgIHUzMiAqcmV0X3hyKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfYmxvd2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2soQkxPV0ZJU0hfY29udGV4dCAqYywgYnl0ZSAqb3V0LAorCQkJCQkgICAgICAgY29uc3QgYnl0ZSAqaW4pOworCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hcm1fZGVjcnlwdF9ibG9jayhCTE9XRklTSF9jb250ZXh0ICpjLCBieXRlICpvdXQsCisJCQkJCSAgICAgICBjb25zdCBieXRlICppbik7CisKKy8qIFRoZXNlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBwcm9jZXNzIHR3byBibG9ja3MgaW4gcGFyYWxsZWwuICovCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hcm1fY3RyX2VuYyhCTE9XRklTSF9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkJIGNvbnN0IGJ5dGUgKmluLCBieXRlICpjdHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9ibG93ZmlzaF9hcm1fY2JjX2RlYyhCTE9XRklTSF9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkJIGNvbnN0IGJ5dGUgKmluLCBieXRlICppdik7CisKK2V4dGVybiB2b2lkIF9nY3J5X2Jsb3dmaXNoX2FybV9jZmJfZGVjKEJMT1dGSVNIX2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0LAorCQkJCQkgY29uc3QgYnl0ZSAqaW4sIGJ5dGUgKml2KTsKKworc3RhdGljIHZvaWQKK2RvX2VuY3J5cHQgKCBCTE9XRklTSF9jb250ZXh0ICpiYywgdTMyICpyZXRfeGwsIHUzMiAqcmV0X3hyICkKK3sKKyAgX2djcnlfYmxvd2Zpc2hfYXJtX2RvX2VuY3J5cHQgKGJjLCByZXRfeGwsIHJldF94cik7Cit9CisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0X2Jsb2NrIChCTE9XRklTSF9jb250ZXh0ICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBfZ2NyeV9ibG93ZmlzaF9hcm1fZW5jcnlwdF9ibG9jayAoY29udGV4dCwgb3V0YnVmLCBpbmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitkb19kZWNyeXB0X2Jsb2NrIChCTE9XRklTSF9jb250ZXh0ICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBfZ2NyeV9ibG93ZmlzaF9hcm1fZGVjcnlwdF9ibG9jayAoY29udGV4dCwgb3V0YnVmLCBpbmJ1Zik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2VuY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQgLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBCTE9XRklTSF9jb250ZXh0ICpjID0gKEJMT1dGSVNIX2NvbnRleHQgKikgY29udGV4dDsKKyAgZG9fZW5jcnlwdF9ibG9jayAoYywgb3V0YnVmLCBpbmJ1Zik7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMTAqNCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIEJMT1dGSVNIX2NvbnRleHQgKmMgPSAoQkxPV0ZJU0hfY29udGV4dCAqKSBjb250ZXh0OworICBkb19kZWNyeXB0X2Jsb2NrIChjLCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgxMCo0KTsKK30KKworI2Vsc2UgLypVU0VfQVJNX0FTTSovCisKKyNpZiBCTE9XRklTSF9ST1VORFMgIT0gMTYKK3N0YXRpYyBpbmxpbmUgdTMyCitmdW5jdGlvbl9GKCBCTE9XRklTSF9jb250ZXh0ICpiYywgdTMyIHggKQoreworICAgIHUxNiBhLCBiLCBjLCBkOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgYSA9ICgoYnl0ZSopJngpWzBdOworICAgIGIgPSAoKGJ5dGUqKSZ4KVsxXTsKKyAgICBjID0gKChieXRlKikmeClbMl07CisgICAgZCA9ICgoYnl0ZSopJngpWzNdOworI2Vsc2UKKyAgICBhID0gKChieXRlKikmeClbM107CisgICAgYiA9ICgoYnl0ZSopJngpWzJdOworICAgIGMgPSAoKGJ5dGUqKSZ4KVsxXTsKKyAgICBkID0gKChieXRlKikmeClbMF07CisjZW5kaWYKKworICAgIHJldHVybiAoKGJjLT5zMFthXSArIGJjLT5zMVtiXSkgXiBiYy0+czJbY10gKSArIGJjLT5zM1tkXTsKK30KKyNlbmRpZgorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIEYoeCkgKCgoIHMwWygoYnl0ZSopJngpWzBdXSArIHMxWygoYnl0ZSopJngpWzFdXSkJIFwKKwkJICAgXiBzMlsoKGJ5dGUqKSZ4KVsyXV0pICsgczNbKChieXRlKikmeClbM11dICkKKyNlbHNlCisjZGVmaW5lIEYoeCkgKCgoIHMwWygoYnl0ZSopJngpWzNdXSArIHMxWygoYnl0ZSopJngpWzJdXSkJIFwKKwkJICAgXiBzMlsoKGJ5dGUqKSZ4KVsxXV0pICsgczNbKChieXRlKikmeClbMF1dICkKKyNlbmRpZgorI2RlZmluZSBSKGwscixpKSAgZG8geyBsIF49IHBbaV07IHIgXj0gRihsKTsgfSB3aGlsZSgwKQorCisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0ICggQkxPV0ZJU0hfY29udGV4dCAqYmMsIHUzMiAqcmV0X3hsLCB1MzIgKnJldF94ciApCit7CisjaWYgQkxPV0ZJU0hfUk9VTkRTID09IDE2CisgIHUzMiB4bCwgeHIsICpzMCwgKnMxLCAqczIsICpzMywgKnA7CisKKyAgeGwgPSAqcmV0X3hsOworICB4ciA9ICpyZXRfeHI7CisgIHAgPSBiYy0+cDsKKyAgczAgPSBiYy0+czA7CisgIHMxID0gYmMtPnMxOworICBzMiA9IGJjLT5zMjsKKyAgczMgPSBiYy0+czM7CisKKyAgUiggeGwsIHhyLAkwKTsKKyAgUiggeHIsIHhsLAkxKTsKKyAgUiggeGwsIHhyLAkyKTsKKyAgUiggeHIsIHhsLAkzKTsKKyAgUiggeGwsIHhyLAk0KTsKKyAgUiggeHIsIHhsLAk1KTsKKyAgUiggeGwsIHhyLAk2KTsKKyAgUiggeHIsIHhsLAk3KTsKKyAgUiggeGwsIHhyLAk4KTsKKyAgUiggeHIsIHhsLAk5KTsKKyAgUiggeGwsIHhyLCAxMCk7CisgIFIoIHhyLCB4bCwgMTEpOworICBSKCB4bCwgeHIsIDEyKTsKKyAgUiggeHIsIHhsLCAxMyk7CisgIFIoIHhsLCB4ciwgMTQpOworICBSKCB4ciwgeGwsIDE1KTsKKworICB4bCBePSBwW0JMT1dGSVNIX1JPVU5EU107CisgIHhyIF49IHBbQkxPV0ZJU0hfUk9VTkRTKzFdOworCisgICpyZXRfeGwgPSB4cjsKKyAgKnJldF94ciA9IHhsOworCisjZWxzZQorICB1MzIgeGwsIHhyLCB0ZW1wLCAqcDsKKyAgaW50IGk7CisKKyAgeGwgPSAqcmV0X3hsOworICB4ciA9ICpyZXRfeHI7CisgIHAgPSBiYy0+cDsKKworICBmb3IoaT0wOyBpIDwgQkxPV0ZJU0hfUk9VTkRTOyBpKysgKQorICAgIHsKKyAgICAgIHhsIF49IHBbaV07CisgICAgICB4ciBePSBmdW5jdGlvbl9GKGJjLCB4bCk7CisgICAgICB0ZW1wID0geGw7CisgICAgICB4bCA9IHhyOworICAgICAgeHIgPSB0ZW1wOworICAgIH0KKyAgdGVtcCA9IHhsOworICB4bCA9IHhyOworICB4ciA9IHRlbXA7CisKKyAgeHIgXj0gcFtCTE9XRklTSF9ST1VORFNdOworICB4bCBePSBwW0JMT1dGSVNIX1JPVU5EUysxXTsKKworICAqcmV0X3hsID0geGw7CisgICpyZXRfeHIgPSB4cjsKKyNlbmRpZgorfQorCisKK3N0YXRpYyB2b2lkCitkZWNyeXB0ICggQkxPV0ZJU0hfY29udGV4dCAqYmMsIHUzMiAqcmV0X3hsLCB1MzIgKnJldF94ciApCit7CisjaWYgQkxPV0ZJU0hfUk9VTkRTID09IDE2CisgIHUzMiB4bCwgeHIsICpzMCwgKnMxLCAqczIsICpzMywgKnA7CisKKyAgeGwgPSAqcmV0X3hsOworICB4ciA9ICpyZXRfeHI7CisgIHAgPSBiYy0+cDsKKyAgczAgPSBiYy0+czA7CisgIHMxID0gYmMtPnMxOworICBzMiA9IGJjLT5zMjsKKyAgczMgPSBiYy0+czM7CisKKyAgUiggeGwsIHhyLCAxNyk7CisgIFIoIHhyLCB4bCwgMTYpOworICBSKCB4bCwgeHIsIDE1KTsKKyAgUiggeHIsIHhsLCAxNCk7CisgIFIoIHhsLCB4ciwgMTMpOworICBSKCB4ciwgeGwsIDEyKTsKKyAgUiggeGwsIHhyLCAxMSk7CisgIFIoIHhyLCB4bCwgMTApOworICBSKCB4bCwgeHIsCTkpOworICBSKCB4ciwgeGwsCTgpOworICBSKCB4bCwgeHIsCTcpOworICBSKCB4ciwgeGwsCTYpOworICBSKCB4bCwgeHIsCTUpOworICBSKCB4ciwgeGwsCTQpOworICBSKCB4bCwgeHIsCTMpOworICBSKCB4ciwgeGwsCTIpOworCisgIHhsIF49IHBbMV07CisgIHhyIF49IHBbMF07CisKKyAgKnJldF94bCA9IHhyOworICAqcmV0X3hyID0geGw7CisKKyNlbHNlCisgIHUzMiB4bCwgeHIsIHRlbXAsICpwOworICBpbnQgaTsKKworICB4bCA9ICpyZXRfeGw7CisgIHhyID0gKnJldF94cjsKKyAgcCA9IGJjLT5wOworCisgIGZvciAoaT1CTE9XRklTSF9ST1VORFMrMTsgaSA+IDE7IGktLSApCisgICAgeworICAgICAgeGwgXj0gcFtpXTsKKyAgICAgIHhyIF49IGZ1bmN0aW9uX0YoYmMsIHhsKTsKKyAgICAgIHRlbXAgPSB4bDsKKyAgICAgIHhsID0geHI7CisgICAgICB4ciA9IHRlbXA7CisgICAgfQorCisgIHRlbXAgPSB4bDsKKyAgeGwgPSB4cjsKKyAgeHIgPSB0ZW1wOworCisgIHhyIF49IHBbMV07CisgIHhsIF49IHBbMF07CisKKyAgKnJldF94bCA9IHhsOworICAqcmV0X3hyID0geHI7CisjZW5kaWYKK30KKworI3VuZGVmIEYKKyN1bmRlZiBSCisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0X2Jsb2NrICggQkxPV0ZJU0hfY29udGV4dCAqYmMsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYgKQoreworICB1MzIgZDEsIGQyOworCisgIGQxID0gYnVmX2dldF9iZTMyKGluYnVmKTsKKyAgZDIgPSBidWZfZ2V0X2JlMzIoaW5idWYgKyA0KTsKKyAgZG9fZW5jcnlwdCggYmMsICZkMSwgJmQyICk7CisgIGJ1Zl9wdXRfYmUzMihvdXRidWYsIGQxKTsKKyAgYnVmX3B1dF9iZTMyKG91dGJ1ZiArIDQsIGQyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZW5jcnlwdF9ibG9jayAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQkxPV0ZJU0hfY29udGV4dCAqYmMgPSAoQkxPV0ZJU0hfY29udGV4dCAqKSBjb250ZXh0OworICBkb19lbmNyeXB0X2Jsb2NrIChiYywgb3V0YnVmLCBpbmJ1Zik7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoNjQpOworfQorCisKK3N0YXRpYyB2b2lkCitkb19kZWNyeXB0X2Jsb2NrIChCTE9XRklTSF9jb250ZXh0ICpiYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgdTMyIGQxLCBkMjsKKworICBkMSA9IGJ1Zl9nZXRfYmUzMihpbmJ1Zik7CisgIGQyID0gYnVmX2dldF9iZTMyKGluYnVmICsgNCk7CisgIGRlY3J5cHQoIGJjLCAmZDEsICZkMiApOworICBidWZfcHV0X2JlMzIob3V0YnVmLCBkMSk7CisgIGJ1Zl9wdXRfYmUzMihvdXRidWYgKyA0LCBkMik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIEJMT1dGSVNIX2NvbnRleHQgKmJjID0gKEJMT1dGSVNIX2NvbnRleHQgKikgY29udGV4dDsKKyAgZG9fZGVjcnlwdF9ibG9jayAoYmMsIG91dGJ1ZiwgaW5idWYpOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDY0KTsKK30KKworI2VuZGlmIC8qIVVTRV9BTUQ2NF9BU00mJiFVU0VfQVJNX0FTTSovCisKKworLyogQnVsayBlbmNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDVFIgbW9kZS4gIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgaW50ZW5kZWQgZm9yIHRoZSBidWxrIGVuY3J5cHRpb24gZmVhdHVyZSBvZiBjaXBoZXIuYy4gIENUUiBpcyBleHBlY3RlZCB0byBiZQorICAgb2Ygc2l6ZSBCTE9XRklTSF9CTE9DS1NJWkUuICovCit2b2lkCitfZ2NyeV9ibG93ZmlzaF9jdHJfZW5jKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwgdm9pZCAqb3V0YnVmX2FyZywKKwkJICAgICAgIGNvbnN0IHZvaWQgKmluYnVmX2FyZywgc2l6ZV90IG5ibG9ja3MpCit7CisgIEJMT1dGSVNIX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBjaGFyIHRtcGJ1ZltCTE9XRklTSF9CTE9DS1NJWkVdOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9ICg2NCkgKyAyICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICBpbnQgaTsKKworI2lmZGVmIFVTRV9BTUQ2NF9BU00KKyAgeworICAgIGlmIChuYmxvY2tzID49IDQpCisgICAgICBidXJuX3N0YWNrX2RlcHRoICs9IDUgKiBzaXplb2Yodm9pZCopOworCisgICAgLyogUHJvY2VzcyBkYXRhIGluIDQgYmxvY2sgY2h1bmtzLiAqLworICAgIHdoaWxlIChuYmxvY2tzID49IDQpCisgICAgICB7CisgICAgICAgIF9nY3J5X2Jsb3dmaXNoX2FtZDY0X2N0cl9lbmMoY3R4LCBvdXRidWYsIGluYnVmLCBjdHIpOworCisgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgb3V0YnVmICs9IDQgKiBCTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICArPSA0ICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgICAvKiBUT0RPOiB1c2UgY2FjaGluZyBpbnN0ZWFkPyAqLworICB9CisjZWxpZiBkZWZpbmVkKFVTRV9BUk1fQVNNKQorICB7CisgICAgLyogUHJvY2VzcyBkYXRhIGluIDIgYmxvY2sgY2h1bmtzLiAqLworICAgIHdoaWxlIChuYmxvY2tzID49IDIpCisgICAgICB7CisgICAgICAgIF9nY3J5X2Jsb3dmaXNoX2FybV9jdHJfZW5jKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgY3RyKTsKKworICAgICAgICBuYmxvY2tzIC09IDI7CisgICAgICAgIG91dGJ1ZiArPSAyICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gMiAqIEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgLyogVE9ETzogdXNlIGNhY2hpbmcgaW5zdGVhZD8gKi8KKyAgfQorI2VuZGlmCisKKyAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgeworICAgICAgLyogRW5jcnlwdCB0aGUgY291bnRlci4gKi8KKyAgICAgIGRvX2VuY3J5cHRfYmxvY2soY3R4LCB0bXBidWYsIGN0cik7CisgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIGVuY3J5cHRlZCBjb3VudGVyIGFuZCBzdG9yZSBpbiBvdXRwdXQuICAqLworICAgICAgYnVmX3hvcihvdXRidWYsIHRtcGJ1ZiwgaW5idWYsIEJMT1dGSVNIX0JMT0NLU0laRSk7CisgICAgICBvdXRidWYgKz0gQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgaW5idWYgICs9IEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgIC8qIEluY3JlbWVudCB0aGUgY291bnRlci4gICovCisgICAgICBmb3IgKGkgPSBCTE9XRklTSF9CTE9DS1NJWkU7IGkgPiAwOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICBjdHJbaS0xXSsrOworICAgICAgICAgIGlmIChjdHJbaS0xXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIHdpcGVtZW1vcnkodG1wYnVmLCBzaXplb2YodG1wYnVmKSk7CisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKworLyogQnVsayBkZWNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDQkMgbW9kZS4gIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgaW50ZW5kZWQgZm9yIHRoZSBidWxrIGVuY3J5cHRpb24gZmVhdHVyZSBvZiBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X2Jsb3dmaXNoX2NiY19kZWModm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsIHZvaWQgKm91dGJ1Zl9hcmcsCisJCSAgICAgICBjb25zdCB2b2lkICppbmJ1Zl9hcmcsIHNpemVfdCBuYmxvY2tzKQoreworICBCTE9XRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciBzYXZlYnVmW0JMT1dGSVNIX0JMT0NLU0laRV07CisgIGludCBidXJuX3N0YWNrX2RlcHRoID0gKDY0KSArIDIgKiBCTE9XRklTSF9CTE9DS1NJWkU7CisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIHsKKyAgICBpZiAobmJsb2NrcyA+PSA0KQorICAgICAgYnVybl9zdGFja19kZXB0aCArPSA1ICogc2l6ZW9mKHZvaWQqKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA0IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA0KQorICAgICAgeworICAgICAgICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jYmNfZGVjKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgaXYpOworCisgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgb3V0YnVmICs9IDQgKiBCTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICArPSA0ICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgeworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAyIGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSAyKQorICAgICAgeworICAgICAgICBfZ2NyeV9ibG93ZmlzaF9hcm1fY2JjX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDI7CisgICAgICAgIG91dGJ1ZiArPSAyICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gMiAqIEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIElOQlVGIGlzIG5lZWRlZCBsYXRlciBhbmQgaXQgbWF5IGJlIGlkZW50aWNhbCB0byBPVVRCVUYsIHNvIHN0b3JlCisgICAgICAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCB0byBTQVZFQlVGLiAgKi8KKyAgICAgIGRvX2RlY3J5cHRfYmxvY2sgKGN0eCwgc2F2ZWJ1ZiwgaW5idWYpOworCisgICAgICBidWZfeG9yX25fY29weV8yKG91dGJ1Ziwgc2F2ZWJ1ZiwgaXYsIGluYnVmLCBCTE9XRklTSF9CTE9DS1NJWkUpOworICAgICAgaW5idWYgKz0gQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgb3V0YnVmICs9IEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICB9CisKKyAgd2lwZW1lbW9yeShzYXZlYnVmLCBzaXplb2Yoc2F2ZWJ1ZikpOworICBfZ2NyeV9idXJuX3N0YWNrKGJ1cm5fc3RhY2tfZGVwdGgpOworfQorCisKKy8qIEJ1bGsgZGVjcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ0ZCIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICovCit2b2lkCitfZ2NyeV9ibG93ZmlzaF9jZmJfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LCB2b2lkICpvdXRidWZfYXJnLAorCQkgICAgICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLCBzaXplX3QgbmJsb2NrcykKK3sKKyAgQkxPV0ZJU0hfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgY2hhciAqb3V0YnVmID0gb3V0YnVmX2FyZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIGludCBidXJuX3N0YWNrX2RlcHRoID0gKDY0KSArIDIgKiBCTE9XRklTSF9CTE9DS1NJWkU7CisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIHsKKyAgICBpZiAobmJsb2NrcyA+PSA0KQorICAgICAgYnVybl9zdGFja19kZXB0aCArPSA1ICogc2l6ZW9mKHZvaWQqKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA0IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA0KQorICAgICAgeworICAgICAgICBfZ2NyeV9ibG93ZmlzaF9hbWQ2NF9jZmJfZGVjKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgaXYpOworCisgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgb3V0YnVmICs9IDQgKiBCTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICArPSA0ICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgeworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAyIGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSAyKQorICAgICAgeworICAgICAgICBfZ2NyeV9ibG93ZmlzaF9hcm1fY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDI7CisgICAgICAgIG91dGJ1ZiArPSAyICogQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gMiAqIEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHRfYmxvY2soY3R4LCBpdiwgaXYpOworICAgICAgYnVmX3hvcl9uX2NvcHkob3V0YnVmLCBpdiwgaW5idWYsIEJMT1dGSVNIX0JMT0NLU0laRSk7CisgICAgICBvdXRidWYgKz0gQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgaW5idWYgICs9IEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgICB9CisKKyAgX2djcnlfYnVybl9zdGFjayhidXJuX3N0YWNrX2RlcHRoKTsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIEJMT1dGSVNILUNUUiwgdGVzdHMgSVYgaW5jcmVtZW50IG9mIGJ1bGsgQ1RSCisgICBlbmNyeXB0aW9uLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9jdHIgKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gNCsxOworICBjb25zdCBpbnQgYmxvY2tzaXplID0gQkxPV0ZJU0hfQkxPQ0tTSVpFOworICBjb25zdCBpbnQgY29udGV4dF9zaXplID0gc2l6ZW9mKEJMT1dGSVNIX2NvbnRleHQpOworCisgIHJldHVybiBfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyKCJCTE9XRklTSCIsICZiZl9zZXRrZXksCisgICAgICAgICAgICZlbmNyeXB0X2Jsb2NrLCAmX2djcnlfYmxvd2Zpc2hfY3RyX2VuYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBCTE9XRklTSC1DQkMsIHRlc3RzIGJ1bGsgQ0JDIGRlY3J5cHRpb24uCisgICBSZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3NlbGZ0ZXN0X2NiYyAodm9pZCkKK3sKKyAgY29uc3QgaW50IG5ibG9ja3MgPSA0KzI7CisgIGNvbnN0IGludCBibG9ja3NpemUgPSBCTE9XRklTSF9CTE9DS1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoQkxPV0ZJU0hfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jYmMoIkJMT1dGSVNIIiwgJmJmX3NldGtleSwKKyAgICAgICAgICAgJmVuY3J5cHRfYmxvY2ssICZfZ2NyeV9ibG93ZmlzaF9jYmNfZGVjLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIEJMT1dGSVNILUNGQiwgdGVzdHMgYnVsayBDQkMgZGVjcnlwdGlvbi4KKyAgIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorc2VsZnRlc3RfY2ZiICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDQrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IEJMT1dGSVNIX0JMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihCTE9XRklTSF9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2NmYigiQkxPV0ZJU0giLCAmYmZfc2V0a2V5LAorICAgICAgICAgICAmZW5jcnlwdF9ibG9jaywgJl9nY3J5X2Jsb3dmaXNoX2NmYl9kZWMsIG5ibG9ja3MsIGJsb2Nrc2l6ZSwKKwkgICBjb250ZXh0X3NpemUpOworfQorCisKK3N0YXRpYyBjb25zdCBjaGFyKgorc2VsZnRlc3Qodm9pZCkKK3sKKyAgQkxPV0ZJU0hfY29udGV4dCBjOworICBieXRlIHBsYWluW10gPSAiQkxPV0ZJU0giOworICBieXRlIGJ1ZmZlcls4XTsKKyAgc3RhdGljIGNvbnN0IGJ5dGUgcGxhaW4zW10gPQorICAgIHsgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9OworICBzdGF0aWMgY29uc3QgYnl0ZSBrZXkzW10gPQorICAgIHsgMHg0MSwgMHg3OSwgMHg2RSwgMHhBMCwgMHg1MiwgMHg2MSwgMHg2RSwgMHhFNCB9OworICBzdGF0aWMgY29uc3QgYnl0ZSBjaXBoZXIzW10gPQorICAgIHsgMHhFMSwgMHgxMywgMHhGNCwgMHgxMCwgMHgyQywgMHhGQywgMHhDRSwgMHg0MyB9OworICBjb25zdCBjaGFyICpyOworCisgIGJmX3NldGtleSggKHZvaWQgKikgJmMsCisgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsIDI2ICk7CisgIGVuY3J5cHRfYmxvY2soICh2b2lkICopICZjLCBidWZmZXIsIHBsYWluICk7CisgIGlmKCBtZW1jbXAoIGJ1ZmZlciwgIlx4MzJceDRFXHhEMFx4RkVceEY0XHgxM1x4QTJceDAzIiwgOCApICkKKyAgICByZXR1cm4gIkJsb3dmaXNoIHNlbGZ0ZXN0IGZhaWxlZCAoMSkuIjsKKyAgZGVjcnlwdF9ibG9jayggKHZvaWQgKikgJmMsIGJ1ZmZlciwgYnVmZmVyICk7CisgIGlmKCBtZW1jbXAoIGJ1ZmZlciwgcGxhaW4sIDggKSApCisgICAgcmV0dXJuICJCbG93ZmlzaCBzZWxmdGVzdCBmYWlsZWQgKDIpLiI7CisKKyAgYmZfc2V0a2V5KCAodm9pZCAqKSAmYywga2V5MywgOCApOworICBlbmNyeXB0X2Jsb2NrKCAodm9pZCAqKSAmYywgYnVmZmVyLCBwbGFpbjMgKTsKKyAgaWYoIG1lbWNtcCggYnVmZmVyLCBjaXBoZXIzLCA4ICkgKQorICAgIHJldHVybiAiQmxvd2Zpc2ggc2VsZnRlc3QgZmFpbGVkICgzKS4iOworICBkZWNyeXB0X2Jsb2NrKCAodm9pZCAqKSAmYywgYnVmZmVyLCBidWZmZXIgKTsKKyAgaWYoIG1lbWNtcCggYnVmZmVyLCBwbGFpbjMsIDggKSApCisgICAgcmV0dXJuICJCbG93ZmlzaCBzZWxmdGVzdCBmYWlsZWQgKDQpLiI7CisKKyAgaWYgKCAociA9IHNlbGZ0ZXN0X2NiYyAoKSkgKQorICAgIHJldHVybiByOworCisgIGlmICggKHIgPSBzZWxmdGVzdF9jZmIgKCkpICkKKyAgICByZXR1cm4gcjsKKworICBpZiAoIChyID0gc2VsZnRlc3RfY3RyICgpKSApCisgICAgcmV0dXJuIHI7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGhhc2hzZXRfZWxlbSB7CisgIHUzMiB2YWw7CisgIHNob3J0IG5pZHg7CisgIGNoYXIgdXNlZDsKK307CisKK3N0YXRpYyBpbmxpbmUgYnl0ZQordmFsX3RvX2hpZHgodTMyIHZhbCkKK3sKKyAgLyogYmYgc2JveGVzIGFyZSBxdWl0ZSByYW5kb20gYWxyZWFkeS4gKi8KKyAgcmV0dXJuICh2YWwgPj4gMjQpIF4gKHZhbCA+PiAxNikgIF4gKHZhbCA+PiA4KSBeIHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FkZF92YWwoc3RydWN0IGhhc2hzZXRfZWxlbSBoc2V0WzI1Nl0sIHUzMiB2YWwsIGludCAqbWlkeCwKKwlzdHJ1Y3QgaGFzaHNldF9lbGVtICptcG9vbCkKK3sKKyAgc3RydWN0IGhhc2hzZXRfZWxlbSAqZWxlbTsKKyAgYnl0ZSBoaWR4OworCisgIGhpZHggPSB2YWxfdG9faGlkeCh2YWwpOworICBlbGVtID0gJmhzZXRbaGlkeF07CisKKyAgLyogQ2hlY2sgaWYgZmlyc3QgaXMgaW4gdXNlLiAqLworICBpZiAoZWxlbS0+dXNlZCA9PSAwKQorICAgIHsKKyAgICAgIGVsZW0tPnZhbCA9IHZhbDsKKyAgICAgIGVsZW0tPm5pZHggPSAtMTsKKyAgICAgIGVsZW0tPnVzZWQgPSAxOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIENoZWNrIGlmIGZpcnN0IG1hdGNoZXMuICovCisgIGlmIChlbGVtLT52YWwgPT0gdmFsKQorICAgIHJldHVybiAxOworCisgIGZvciAoOyBlbGVtLT5uaWR4ID49IDA7IGVsZW0gPSAmbXBvb2xbZWxlbS0+bmlkeF0pCisgICAgeworICAgICAgLyogQ2hlY2sgaWYgZWxlbSBtYXRjaGVzLiAqLworICAgICAgaWYgKGVsZW0tPnZhbCA9PSB2YWwpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICBlbGVtLT5uaWR4ID0gKCptaWR4KSsrOworICBlbGVtID0gJm1wb29sW2VsZW0tPm5pZHhdOworCisgIGVsZW0tPnZhbCA9IHZhbDsKKyAgZWxlbS0+bmlkeCA9IC0xOworICBlbGVtLT51c2VkID0gMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZG9fYmZfc2V0a2V5IChCTE9XRklTSF9jb250ZXh0ICpjLCBjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGtleWxlbikKK3sKKyAgc3RydWN0IGhhc2hzZXRfZWxlbSBtZW1wb29sWzQgKiAyNTVdOyAvKiBFbm91Z2ggZW50cmllcyBmb3IgdGhlIHdvcnN0IGNhc2UuICovCisgIHN0cnVjdCBoYXNoc2V0X2VsZW0gaHNldFs0XVsyNTZdOworICBpbnQgbWVtaWR4ID0gMDsKKyAgaW50IHdlYWsgPSAwOworICBpbnQgaSwgaiwgcmV0OworICB1MzIgZGF0YSwgZGF0YWwsIGRhdGFyOworICBzdGF0aWMgaW50IGluaXRpYWxpemVkOworICBzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3RfZmFpbGVkOworCisgIGlmKCAhaW5pdGlhbGl6ZWQgKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0KCk7CisgICAgICBpZiggc2VsZnRlc3RfZmFpbGVkICkKKyAgICAgICAgbG9nX2Vycm9yICgiJXNcbiIsIHNlbGZ0ZXN0X2ZhaWxlZCApOworICAgIH0KKyAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisgICAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworCisgIG1lbXNldChoc2V0LCAwLCBzaXplb2YoaHNldCkpOworCisgIGZvcihpPTA7IGkgPCBCTE9XRklTSF9ST1VORFMrMjsgaSsrICkKKyAgICBjLT5wW2ldID0gcHNbaV07CisgIGZvcihpPTA7IGkgPCAyNTY7IGkrKyApCisgICAgeworICAgICAgYy0+czBbaV0gPSBrczBbaV07CisgICAgICBjLT5zMVtpXSA9IGtzMVtpXTsKKyAgICAgIGMtPnMyW2ldID0ga3MyW2ldOworICAgICAgYy0+czNbaV0gPSBrczNbaV07CisgICAgfQorCisgIGZvcihpPWo9MDsgaSA8IEJMT1dGSVNIX1JPVU5EUysyOyBpKysgKQorICAgIHsKKyAgICAgIGRhdGEgPSAoKHUzMilrZXlbal0gPDwgMjQpIHwKKyAgICAgICAgICAgICAoKHUzMilrZXlbKGorMSkla2V5bGVuXSA8PCAxNikgfAorICAgICAgICAgICAgICgodTMyKWtleVsoaisyKSVrZXlsZW5dIDw8IDgpIHwKKyAgICAgICAgICAgICAoKHUzMilrZXlbKGorMykla2V5bGVuXSk7CisgICAgICBjLT5wW2ldIF49IGRhdGE7CisgICAgICBqID0gKGorNCkgJSBrZXlsZW47CisgICAgfQorCisgIGRhdGFsID0gZGF0YXIgPSAwOworICBmb3IoaT0wOyBpIDwgQkxPV0ZJU0hfUk9VTkRTKzI7IGkgKz0gMiApCisgICAgeworICAgICAgZG9fZW5jcnlwdCggYywgJmRhdGFsLCAmZGF0YXIgKTsKKyAgICAgIGMtPnBbaV0gICA9IGRhdGFsOworICAgICAgYy0+cFtpKzFdID0gZGF0YXI7CisgICAgfQorICBmb3IoaT0wOyBpIDwgMjU2OyBpICs9IDIgKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHQoIGMsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICBjLT5zMFtpXSAgID0gZGF0YWw7CisgICAgICBjLT5zMFtpKzFdID0gZGF0YXI7CisKKyAgICAgIC8qIEFkZCB2YWx1ZXMgdG8gaGFzaHNldCwgZGV0ZWN0IGR1cGxpY2F0ZXMgKHdlYWsga2V5cykuICovCisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzBdLCBkYXRhbCwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzBdLCBkYXRhciwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgfQorICBmb3IoaT0wOyBpIDwgMjU2OyBpICs9IDIgKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHQoIGMsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICBjLT5zMVtpXSAgID0gZGF0YWw7CisgICAgICBjLT5zMVtpKzFdID0gZGF0YXI7CisKKyAgICAgIC8qIEFkZCB2YWx1ZXMgdG8gaGFzaHNldCwgZGV0ZWN0IGR1cGxpY2F0ZXMgKHdlYWsga2V5cykuICovCisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzFdLCBkYXRhbCwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzFdLCBkYXRhciwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgfQorICBmb3IoaT0wOyBpIDwgMjU2OyBpICs9IDIgKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHQoIGMsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICBjLT5zMltpXSAgID0gZGF0YWw7CisgICAgICBjLT5zMltpKzFdID0gZGF0YXI7CisKKyAgICAgIC8qIEFkZCB2YWx1ZXMgdG8gaGFzaHNldCwgZGV0ZWN0IGR1cGxpY2F0ZXMgKHdlYWsga2V5cykuICovCisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzJdLCBkYXRhbCwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzJdLCBkYXRhciwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgfQorICBmb3IoaT0wOyBpIDwgMjU2OyBpICs9IDIgKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHQoIGMsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICBjLT5zM1tpXSAgID0gZGF0YWw7CisgICAgICBjLT5zM1tpKzFdID0gZGF0YXI7CisKKyAgICAgIC8qIEFkZCB2YWx1ZXMgdG8gaGFzaHNldCwgZGV0ZWN0IGR1cGxpY2F0ZXMgKHdlYWsga2V5cykuICovCisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzNdLCBkYXRhbCwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgICByZXQgPSBhZGRfdmFsIChoc2V0WzNdLCBkYXRhciwgJm1lbWlkeCwgbWVtcG9vbCk7CisgICAgICB3ZWFrID0gcmV0ID8gMSA6IHdlYWs7CisgICAgfQorCisgIC8qIENsZWFyIHN0YWNrLiAqLworICB3aXBlbWVtb3J5KGhzZXQsIHNpemVvZihoc2V0KSk7CisgIHdpcGVtZW1vcnkobWVtcG9vbCwgc2l6ZW9mKG1lbXBvb2xbMF0pICogbWVtaWR4KTsKKworICBfZ2NyeV9idXJuX3N0YWNrICg2NCk7CisKKyAgLyogQ2hlY2sgZm9yIHdlYWsga2V5LiAgQSB3ZWFrIGtleSBpcyBhIGtleSBpbiB3aGljaCBhIHZhbHVlIGluCisgICAgIHRoZSBQLWFycmF5IChoZXJlIGMpIG9jY3VycyBtb3JlIHRoYW4gb25jZSBwZXIgdGFibGUuICAqLworICBpZiAod2VhaykKKyAgICByZXR1cm4gR1BHX0VSUl9XRUFLX0tFWTsKKworICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitiZl9zZXRrZXkgKHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQga2V5bGVuKQoreworICBCTE9XRklTSF9jb250ZXh0ICpjID0gKEJMT1dGSVNIX2NvbnRleHQgKikgY29udGV4dDsKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gZG9fYmZfc2V0a2V5IChjLCBrZXksIGtleWxlbik7CisgIHJldHVybiByYzsKK30KKworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfYmxvd2Zpc2ggPQorICB7CisgICAgR0NSWV9DSVBIRVJfQkxPV0ZJU0gsIHswLCAwfSwKKyAgICAiQkxPV0ZJU0giLCBOVUxMLCBOVUxMLCBCTE9XRklTSF9CTE9DS1NJWkUsIDEyOCwKKyAgICBzaXplb2YgKEJMT1dGSVNIX2NvbnRleHQpLAorICAgIGJmX3NldGtleSwgZW5jcnlwdF9ibG9jaywgZGVjcnlwdF9ibG9jaworICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2J1ZmhlbHAuaCBiL2NpcGhlci9idWZoZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhNzIwOQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9idWZoZWxwLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qIGJ1ZmhlbHAuaCAgLSAgU29tZSBidWZmZXIgbWFuaXB1bGF0aW9uIGhlbHBlcnMKKyAqCUNvcHlyaWdodCDCqSAyMDEyIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQG1ibmV0LmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworI2lmbmRlZiBHMTBfQlVGSEVMUF9ICisjZGVmaW5lIEcxMF9CVUZIRUxQX0gKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4gLyogdWludHB0cl90ICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSU5UVFlQRVNfSCkKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisvKiBJbiB0aGlzIGNhc2UsIHVpbnRwdHJfdCBpcyBwcm92aWRlZCBieSBjb25maWcuaC4gKi8KKyNlbmRpZgorCisjaW5jbHVkZSAiYml0aGVscC5oIgorCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEKSkgfHwgXAorICAgIGRlZmluZWQoX19hYXJjaDY0X18pCisvKiBUaGVzZSBhcmNoaXRlY3R1cmVzIGFyZSBhYmxlIG9mIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhbgorICAgaGFuZGxlIHRob3NlIGZhc3QuCisgKi8KKyMgZGVmaW5lIEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTIDEKKyNlbmRpZgorCisKKy8qIE9wdGltaXplZCBmdW5jdGlvbiBmb3Igc21hbGwgYnVmZmVyIGNvcHlpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYnVmX2NweSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3QgbGVuKQoreworI2lmIF9fR05VQ19fID49IDQgJiYgKGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykpCisgIC8qIEZvciBBTUQ2NCBhbmQgaTM4NiwgbWVtY3B5IGlzIGZhc3Rlci4gICovCisgIG1lbWNweShfZHN0LCBfc3JjLCBsZW4pOworI2Vsc2UKKyAgYnl0ZSAqZHN0ID0gX2RzdDsKKyAgY29uc3QgYnl0ZSAqc3JjID0gX3NyYzsKKyAgdWludHB0cl90ICpsZHN0OworICBjb25zdCB1aW50cHRyX3QgKmxzcmM7CisjaWZuZGVmIEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTCisgIGNvbnN0IHVuc2lnbmVkIGludCBsb25nbWFzayA9IHNpemVvZih1aW50cHRyX3QpIC0gMTsKKworICAvKiBTa2lwIGZhc3QgcHJvY2Vzc2luZyBpZiBidWZmZXJzIGFyZSB1bmFsaWduZWQuICAqLworICBpZiAoKCh1aW50cHRyX3QpZHN0IHwgKHVpbnRwdHJfdClzcmMpICYgbG9uZ21hc2spCisgICAgZ290byBkb19ieXRlczsKKyNlbmRpZgorCisgIGxkc3QgPSAodWludHB0cl90ICopKHZvaWQgKilkc3Q7CisgIGxzcmMgPSAoY29uc3QgdWludHB0cl90ICopKGNvbnN0IHZvaWQgKilzcmM7CisKKyAgZm9yICg7IGxlbiA+PSBzaXplb2YodWludHB0cl90KTsgbGVuIC09IHNpemVvZih1aW50cHRyX3QpKQorICAgICpsZHN0KysgPSAqbHNyYysrOworCisgIGRzdCA9IChieXRlICopbGRzdDsKKyAgc3JjID0gKGNvbnN0IGJ5dGUgKilsc3JjOworCisjaWZuZGVmIEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTCitkb19ieXRlczoKKyNlbmRpZgorICAvKiBIYW5kbGUgdGFpbC4gICovCisgIGZvciAoOyBsZW47IGxlbi0tKQorICAgICpkc3QrKyA9ICpzcmMrKzsKKyNlbmRpZiAvKl9fR05VQ19fID49IDQgJiYgKF9feDg2XzY0X18gfHwgX19pMzg2X18pKi8KK30KKworCisvKiBPcHRpbWl6ZWQgZnVuY3Rpb24gZm9yIGJ1ZmZlciB4b3JpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYnVmX3hvcih2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjMSwgY29uc3Qgdm9pZCAqX3NyYzIsIHNpemVfdCBsZW4pCit7CisgIGJ5dGUgKmRzdCA9IF9kc3Q7CisgIGNvbnN0IGJ5dGUgKnNyYzEgPSBfc3JjMTsKKyAgY29uc3QgYnl0ZSAqc3JjMiA9IF9zcmMyOworICB1aW50cHRyX3QgKmxkc3Q7CisgIGNvbnN0IHVpbnRwdHJfdCAqbHNyYzEsICpsc3JjMjsKKyNpZm5kZWYgQlVGSEVMUF9GQVNUX1VOQUxJR05FRF9BQ0NFU1MKKyAgY29uc3QgdW5zaWduZWQgaW50IGxvbmdtYXNrID0gc2l6ZW9mKHVpbnRwdHJfdCkgLSAxOworCisgIC8qIFNraXAgZmFzdCBwcm9jZXNzaW5nIGlmIGJ1ZmZlcnMgYXJlIHVuYWxpZ25lZC4gICovCisgIGlmICgoKHVpbnRwdHJfdClkc3QgfCAodWludHB0cl90KXNyYzEgfCAodWludHB0cl90KXNyYzIpICYgbG9uZ21hc2spCisgICAgZ290byBkb19ieXRlczsKKyNlbmRpZgorCisgIGxkc3QgPSAodWludHB0cl90ICopKHZvaWQgKilkc3Q7CisgIGxzcmMxID0gKGNvbnN0IHVpbnRwdHJfdCAqKShjb25zdCB2b2lkICopc3JjMTsKKyAgbHNyYzIgPSAoY29uc3QgdWludHB0cl90ICopKGNvbnN0IHZvaWQgKilzcmMyOworCisgIGZvciAoOyBsZW4gPj0gc2l6ZW9mKHVpbnRwdHJfdCk7IGxlbiAtPSBzaXplb2YodWludHB0cl90KSkKKyAgICAqbGRzdCsrID0gKmxzcmMxKysgXiAqbHNyYzIrKzsKKworICBkc3QgPSAoYnl0ZSAqKWxkc3Q7CisgIHNyYzEgPSAoY29uc3QgYnl0ZSAqKWxzcmMxOworICBzcmMyID0gKGNvbnN0IGJ5dGUgKilsc3JjMjsKKworI2lmbmRlZiBCVUZIRUxQX0ZBU1RfVU5BTElHTkVEX0FDQ0VTUworZG9fYnl0ZXM6CisjZW5kaWYKKyAgLyogSGFuZGxlIHRhaWwuICAqLworICBmb3IgKDsgbGVuOyBsZW4tLSkKKyAgICAqZHN0KysgPSAqc3JjMSsrIF4gKnNyYzIrKzsKK30KKworCisvKiBPcHRpbWl6ZWQgZnVuY3Rpb24gZm9yIGJ1ZmZlciB4b3Jpbmcgd2l0aCB0d28gZGVzdGluYXRpb24gYnVmZmVycy4gIFVzZWQKKyAgIG1haW5seSBieSBDRkIgbW9kZSBlbmNyeXB0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYnVmX3hvcl8yZHN0KHZvaWQgKl9kc3QxLCB2b2lkICpfZHN0MiwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IGxlbikKK3sKKyAgYnl0ZSAqZHN0MSA9IF9kc3QxOworICBieXRlICpkc3QyID0gX2RzdDI7CisgIGNvbnN0IGJ5dGUgKnNyYyA9IF9zcmM7CisgIHVpbnRwdHJfdCAqbGRzdDEsICpsZHN0MjsKKyAgY29uc3QgdWludHB0cl90ICpsc3JjOworI2lmbmRlZiBCVUZIRUxQX0ZBU1RfVU5BTElHTkVEX0FDQ0VTUworICBjb25zdCB1bnNpZ25lZCBpbnQgbG9uZ21hc2sgPSBzaXplb2YodWludHB0cl90KSAtIDE7CisKKyAgLyogU2tpcCBmYXN0IHByb2Nlc3NpbmcgaWYgYnVmZmVycyBhcmUgdW5hbGlnbmVkLiAgKi8KKyAgaWYgKCgodWludHB0cl90KXNyYyB8ICh1aW50cHRyX3QpZHN0MSB8ICh1aW50cHRyX3QpZHN0MikgJiBsb25nbWFzaykKKyAgICBnb3RvIGRvX2J5dGVzOworI2VuZGlmCisKKyAgbGRzdDEgPSAodWludHB0cl90ICopKHZvaWQgKilkc3QxOworICBsZHN0MiA9ICh1aW50cHRyX3QgKikodm9pZCAqKWRzdDI7CisgIGxzcmMgPSAoY29uc3QgdWludHB0cl90ICopKGNvbnN0IHZvaWQgKilzcmM7CisKKyAgZm9yICg7IGxlbiA+PSBzaXplb2YodWludHB0cl90KTsgbGVuIC09IHNpemVvZih1aW50cHRyX3QpKQorICAgICpsZHN0MSsrID0gKCpsZHN0MisrIF49ICpsc3JjKyspOworCisgIGRzdDEgPSAoYnl0ZSAqKWxkc3QxOworICBkc3QyID0gKGJ5dGUgKilsZHN0MjsKKyAgc3JjID0gKGNvbnN0IGJ5dGUgKilsc3JjOworCisjaWZuZGVmIEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTCitkb19ieXRlczoKKyNlbmRpZgorICAvKiBIYW5kbGUgdGFpbC4gICovCisgIGZvciAoOyBsZW47IGxlbi0tKQorICAgICpkc3QxKysgPSAoKmRzdDIrKyBePSAqc3JjKyspOworfQorCisKKy8qIE9wdGltaXplZCBmdW5jdGlvbiBmb3IgY29tYmluZWQgYnVmZmVyIHhvcmluZyBhbmQgY29weWluZy4gIFVzZWQgYnkgbWFpbmx5CisgICBDQkMgbW9kZSBkZWNyeXB0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYnVmX3hvcl9uX2NvcHlfMih2b2lkICpfZHN0X3hvciwgY29uc3Qgdm9pZCAqX3NyY194b3IsIHZvaWQgKl9zcmNkc3RfY3B5LAorCQkgY29uc3Qgdm9pZCAqX3NyY19jcHksIHNpemVfdCBsZW4pCit7CisgIGJ5dGUgKmRzdF94b3IgPSBfZHN0X3hvcjsKKyAgYnl0ZSAqc3JjZHN0X2NweSA9IF9zcmNkc3RfY3B5OworICBjb25zdCBieXRlICpzcmNfeG9yID0gX3NyY194b3I7CisgIGNvbnN0IGJ5dGUgKnNyY19jcHkgPSBfc3JjX2NweTsKKyAgYnl0ZSB0ZW1wOworICB1aW50cHRyX3QgKmxkc3RfeG9yLCAqbHNyY2RzdF9jcHk7CisgIGNvbnN0IHVpbnRwdHJfdCAqbHNyY19jcHksICpsc3JjX3hvcjsKKyAgdWludHB0cl90IGx0ZW1wOworI2lmbmRlZiBCVUZIRUxQX0ZBU1RfVU5BTElHTkVEX0FDQ0VTUworICBjb25zdCB1bnNpZ25lZCBpbnQgbG9uZ21hc2sgPSBzaXplb2YodWludHB0cl90KSAtIDE7CisKKyAgLyogU2tpcCBmYXN0IHByb2Nlc3NpbmcgaWYgYnVmZmVycyBhcmUgdW5hbGlnbmVkLiAgKi8KKyAgaWYgKCgodWludHB0cl90KXNyY19jcHkgfCAodWludHB0cl90KXNyY194b3IgfCAodWludHB0cl90KWRzdF94b3IgfAorICAgICAgICh1aW50cHRyX3Qpc3JjZHN0X2NweSkgJiBsb25nbWFzaykKKyAgICBnb3RvIGRvX2J5dGVzOworI2VuZGlmCisKKyAgbGRzdF94b3IgPSAodWludHB0cl90ICopKHZvaWQgKilkc3RfeG9yOworICBsc3JjX3hvciA9IChjb25zdCB1aW50cHRyX3QgKikodm9pZCAqKXNyY194b3I7CisgIGxzcmNkc3RfY3B5ID0gKHVpbnRwdHJfdCAqKSh2b2lkICopc3JjZHN0X2NweTsKKyAgbHNyY19jcHkgPSAoY29uc3QgdWludHB0cl90ICopKGNvbnN0IHZvaWQgKilzcmNfY3B5OworCisgIGZvciAoOyBsZW4gPj0gc2l6ZW9mKHVpbnRwdHJfdCk7IGxlbiAtPSBzaXplb2YodWludHB0cl90KSkKKyAgICB7CisgICAgICBsdGVtcCA9ICpsc3JjX2NweSsrOworICAgICAgKmxkc3RfeG9yKysgPSAqbHNyY2RzdF9jcHkgXiAqbHNyY194b3IrKzsKKyAgICAgICpsc3JjZHN0X2NweSsrID0gbHRlbXA7CisgICAgfQorCisgIGRzdF94b3IgPSAoYnl0ZSAqKWxkc3RfeG9yOworICBzcmNfeG9yID0gKGNvbnN0IGJ5dGUgKilsc3JjX3hvcjsKKyAgc3JjZHN0X2NweSA9IChieXRlICopbHNyY2RzdF9jcHk7CisgIHNyY19jcHkgPSAoY29uc3QgYnl0ZSAqKWxzcmNfY3B5OworCisjaWZuZGVmIEJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTCitkb19ieXRlczoKKyNlbmRpZgorICAvKiBIYW5kbGUgdGFpbC4gICovCisgIGZvciAoOyBsZW47IGxlbi0tKQorICAgIHsKKyAgICAgIHRlbXAgPSAqc3JjX2NweSsrOworICAgICAgKmRzdF94b3IrKyA9ICpzcmNkc3RfY3B5IF4gKnNyY194b3IrKzsKKyAgICAgICpzcmNkc3RfY3B5KysgPSB0ZW1wOworICAgIH0KK30KKworCisvKiBPcHRpbWl6ZWQgZnVuY3Rpb24gZm9yIGNvbWJpbmVkIGJ1ZmZlciB4b3JpbmcgYW5kIGNvcHlpbmcuICBVc2VkIGJ5IG1haW5seQorICAgQ0ZCIG1vZGUgZGVjcnlwdGlvbi4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2J1Zl94b3Jfbl9jb3B5KHZvaWQgKl9kc3RfeG9yLCB2b2lkICpfc3JjZHN0X2NweSwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IGxlbikKK3sKKyAgYnVmX3hvcl9uX2NvcHlfMihfZHN0X3hvciwgX3NyYywgX3NyY2RzdF9jcHksIF9zcmMsIGxlbik7Cit9CisKKworLyogQ29uc3RhbnQtdGltZSBjb21wYXJlIG9mIHR3byBidWZmZXJzLiAgUmV0dXJucyAxIGlmIGJ1ZmZlcnMgYXJlIGVxdWFsLAorICAgYW5kIDAgaWYgYnVmZmVycyBkaWZmZXIuICAqLworc3RhdGljIGlubGluZSBpbnQKK2J1Zl9lcV9jb25zdChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IsIHNpemVfdCBsZW4pCit7CisgIGNvbnN0IGJ5dGUgKmEgPSBfYTsKKyAgY29uc3QgYnl0ZSAqYiA9IF9iOworICBzaXplX3QgZGlmZiwgaTsKKworICAvKiBDb25zdGFudC10aW1lIGNvbXBhcmUuICovCisgIGZvciAoaSA9IDAsIGRpZmYgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgZGlmZiAtPSAhIShhW2ldIC0gYltpXSk7CisKKyAgcmV0dXJuICFkaWZmOworfQorCisKKyNpZm5kZWYgQlVGSEVMUF9GQVNUX1VOQUxJR05FRF9BQ0NFU1MKKworLyogRnVuY3Rpb25zIGZvciBsb2FkaW5nIGFuZCBzdG9yaW5nIHVuYWxpZ25lZCB1MzIgdmFsdWVzIG9mIGRpZmZlcmVudAorICAgZW5kaWFubmVzcy4gICovCitzdGF0aWMgaW5saW5lIHUzMiBidWZfZ2V0X2JlMzIoY29uc3Qgdm9pZCAqX2J1ZikKK3sKKyAgY29uc3QgYnl0ZSAqaW4gPSBfYnVmOworICByZXR1cm4gKCh1MzIpaW5bMF0gPDwgMjQpIHwgKCh1MzIpaW5bMV0gPDwgMTYpIHwgXAorICAgICAgICAgKCh1MzIpaW5bMl0gPDwgOCkgfCAodTMyKWluWzNdOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBidWZfZ2V0X2xlMzIoY29uc3Qgdm9pZCAqX2J1ZikKK3sKKyAgY29uc3QgYnl0ZSAqaW4gPSBfYnVmOworICByZXR1cm4gKCh1MzIpaW5bM10gPDwgMjQpIHwgKCh1MzIpaW5bMl0gPDwgMTYpIHwgXAorICAgICAgICAgKCh1MzIpaW5bMV0gPDwgOCkgfCAodTMyKWluWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9iZTMyKHZvaWQgKl9idWYsIHUzMiB2YWwpCit7CisgIGJ5dGUgKm91dCA9IF9idWY7CisgIG91dFswXSA9IHZhbCA+PiAyNDsKKyAgb3V0WzFdID0gdmFsID4+IDE2OworICBvdXRbMl0gPSB2YWwgPj4gODsKKyAgb3V0WzNdID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9sZTMyKHZvaWQgKl9idWYsIHUzMiB2YWwpCit7CisgIGJ5dGUgKm91dCA9IF9idWY7CisgIG91dFszXSA9IHZhbCA+PiAyNDsKKyAgb3V0WzJdID0gdmFsID4+IDE2OworICBvdXRbMV0gPSB2YWwgPj4gODsKKyAgb3V0WzBdID0gdmFsOworfQorCisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorLyogRnVuY3Rpb25zIGZvciBsb2FkaW5nIGFuZCBzdG9yaW5nIHVuYWxpZ25lZCB1NjQgdmFsdWVzIG9mIGRpZmZlcmVudAorICAgZW5kaWFubmVzcy4gICovCitzdGF0aWMgaW5saW5lIHU2NCBidWZfZ2V0X2JlNjQoY29uc3Qgdm9pZCAqX2J1ZikKK3sKKyAgY29uc3QgYnl0ZSAqaW4gPSBfYnVmOworICByZXR1cm4gKCh1NjQpaW5bMF0gPDwgNTYpIHwgKCh1NjQpaW5bMV0gPDwgNDgpIHwgXAorICAgICAgICAgKCh1NjQpaW5bMl0gPDwgNDApIHwgKCh1NjQpaW5bM10gPDwgMzIpIHwgXAorICAgICAgICAgKCh1NjQpaW5bNF0gPDwgMjQpIHwgKCh1NjQpaW5bNV0gPDwgMTYpIHwgXAorICAgICAgICAgKCh1NjQpaW5bNl0gPDwgOCkgfCAodTY0KWluWzddOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBidWZfZ2V0X2xlNjQoY29uc3Qgdm9pZCAqX2J1ZikKK3sKKyAgY29uc3QgYnl0ZSAqaW4gPSBfYnVmOworICByZXR1cm4gKCh1NjQpaW5bN10gPDwgNTYpIHwgKCh1NjQpaW5bNl0gPDwgNDgpIHwgXAorICAgICAgICAgKCh1NjQpaW5bNV0gPDwgNDApIHwgKCh1NjQpaW5bNF0gPDwgMzIpIHwgXAorICAgICAgICAgKCh1NjQpaW5bM10gPDwgMjQpIHwgKCh1NjQpaW5bMl0gPDwgMTYpIHwgXAorICAgICAgICAgKCh1NjQpaW5bMV0gPDwgOCkgfCAodTY0KWluWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9iZTY0KHZvaWQgKl9idWYsIHU2NCB2YWwpCit7CisgIGJ5dGUgKm91dCA9IF9idWY7CisgIG91dFswXSA9IHZhbCA+PiA1NjsKKyAgb3V0WzFdID0gdmFsID4+IDQ4OworICBvdXRbMl0gPSB2YWwgPj4gNDA7CisgIG91dFszXSA9IHZhbCA+PiAzMjsKKyAgb3V0WzRdID0gdmFsID4+IDI0OworICBvdXRbNV0gPSB2YWwgPj4gMTY7CisgIG91dFs2XSA9IHZhbCA+PiA4OworICBvdXRbN10gPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZfcHV0X2xlNjQodm9pZCAqX2J1ZiwgdTY0IHZhbCkKK3sKKyAgYnl0ZSAqb3V0ID0gX2J1ZjsKKyAgb3V0WzddID0gdmFsID4+IDU2OworICBvdXRbNl0gPSB2YWwgPj4gNDg7CisgIG91dFs1XSA9IHZhbCA+PiA0MDsKKyAgb3V0WzRdID0gdmFsID4+IDMyOworICBvdXRbM10gPSB2YWwgPj4gMjQ7CisgIG91dFsyXSA9IHZhbCA+PiAxNjsKKyAgb3V0WzFdID0gdmFsID4+IDg7CisgIG91dFswXSA9IHZhbDsKK30KKyNlbmRpZiAvKkhBVkVfVTY0X1RZUEVERUYqLworCisjZWxzZSAvKkJVRkhFTFBfRkFTVF9VTkFMSUdORURfQUNDRVNTKi8KKworLyogRnVuY3Rpb25zIGZvciBsb2FkaW5nIGFuZCBzdG9yaW5nIHVuYWxpZ25lZCB1MzIgdmFsdWVzIG9mIGRpZmZlcmVudAorICAgZW5kaWFubmVzcy4gICovCitzdGF0aWMgaW5saW5lIHUzMiBidWZfZ2V0X2JlMzIoY29uc3Qgdm9pZCAqX2J1ZikKK3sKKyAgcmV0dXJuIGJlX2Jzd2FwMzIoKihjb25zdCB1MzIgKilfYnVmKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgYnVmX2dldF9sZTMyKGNvbnN0IHZvaWQgKl9idWYpCit7CisgIHJldHVybiBsZV9ic3dhcDMyKCooY29uc3QgdTMyICopX2J1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZfcHV0X2JlMzIodm9pZCAqX2J1ZiwgdTMyIHZhbCkKK3sKKyAgdTMyICpvdXQgPSBfYnVmOworICAqb3V0ID0gYmVfYnN3YXAzMih2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9sZTMyKHZvaWQgKl9idWYsIHUzMiB2YWwpCit7CisgIHUzMiAqb3V0ID0gX2J1ZjsKKyAgKm91dCA9IGxlX2Jzd2FwMzIodmFsKTsKK30KKworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKy8qIEZ1bmN0aW9ucyBmb3IgbG9hZGluZyBhbmQgc3RvcmluZyB1bmFsaWduZWQgdTY0IHZhbHVlcyBvZiBkaWZmZXJlbnQKKyAgIGVuZGlhbm5lc3MuICAqLworc3RhdGljIGlubGluZSB1NjQgYnVmX2dldF9iZTY0KGNvbnN0IHZvaWQgKl9idWYpCit7CisgIHJldHVybiBiZV9ic3dhcDY0KCooY29uc3QgdTY0ICopX2J1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGJ1Zl9nZXRfbGU2NChjb25zdCB2b2lkICpfYnVmKQoreworICByZXR1cm4gbGVfYnN3YXA2NCgqKGNvbnN0IHU2NCAqKV9idWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9iZTY0KHZvaWQgKl9idWYsIHU2NCB2YWwpCit7CisgIHU2NCAqb3V0ID0gX2J1ZjsKKyAgKm91dCA9IGJlX2Jzd2FwNjQodmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9wdXRfbGU2NCh2b2lkICpfYnVmLCB1NjQgdmFsKQoreworICB1NjQgKm91dCA9IF9idWY7CisgICpvdXQgPSBsZV9ic3dhcDY0KHZhbCk7Cit9CisjZW5kaWYgLypIQVZFX1U2NF9UWVBFREVGKi8KKworI2VuZGlmIC8qQlVGSEVMUF9GQVNUX1VOQUxJR05FRF9BQ0NFU1MqLworCisjZW5kaWYgLypHMTBfQklUSEVMUF9IKi8KZGlmZiAtLWdpdCBhL2NpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQuUyBiL2NpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngtYW1kNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGVjN2EzCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5TCkBAIC0wLDAgKzEsMjE2NSBAQAorLyogY2FtZWxsaWEtYXZ4LWFlc25pLWFtZDY0LlMgIC0gIEFFUy1OSS9BVlggaW1wbGVtZW50YXRpb24gb2YgQ2FtZWxsaWEgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgX194ODZfNjQKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpZiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpICYmIFwKKyAgICBkZWZpbmVkKEVOQUJMRV9BRVNOSV9TVVBQT1JUKSAmJiBkZWZpbmVkKEVOQUJMRV9BVlhfU1VQUE9SVCkKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgKCVyaXApCisjZWxzZQorIyAgZGVmaW5lIFJJUAorI2VuZGlmCisKKyNkZWZpbmUgQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4gMjcyCisKKy8qIHN0cnVjdCBDQU1FTExJQV9jb250ZXh0OiAqLworI2RlZmluZSBrZXlfdGFibGUgMAorI2RlZmluZSBrZXlfYml0bGVuZ3RoIENBTUVMTElBX1RBQkxFX0JZVEVfTEVOCisKKy8qIHJlZ2lzdGVyIG1hY3JvcyAqLworI2RlZmluZSBDVFggJXJkaQorI2RlZmluZSBSSU8gJXI4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIGhlbHBlciBtYWNyb3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBmaWx0ZXJfOGJpdCh4LCBsb190LCBoaV90LCBtYXNrNGJpdCwgdG1wMCkgXAorCXZwYW5kIHgsIG1hc2s0Yml0LCB0bXAwOyBcCisJdnBhbmRuIHgsIG1hc2s0Yml0LCB4OyBcCisJdnBzcmxkICQ0LCB4LCB4OyBcCisJXAorCXZwc2h1ZmIgdG1wMCwgbG9fdCwgdG1wMDsgXAorCXZwc2h1ZmIgeCwgaGlfdCwgeDsgXAorCXZweG9yIHRtcDAsIHgsIHg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIDE2LXdheSBjYW1lbGxpYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJTjoKKyAqICAgeDAuLng3OiBieXRlLXNsaWNlZCBBQiBzdGF0ZQorICogICBtZW1fY2Q6IHJlZ2lzdGVyIHBvaW50ZXIgc3RvcmluZyBDRCBzdGF0ZQorICogICBrZXk6IGluZGV4IGZvciBrZXkgbWF0ZXJpYWwKKyAqIE9VVDoKKyAqICAgeDAuLng3OiBuZXcgYnl0ZS1zbGljZWQgQ0Qgc3RhdGUKKyAqLworI2RlZmluZSByb3VuZHNtMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgXAorCQkgIHQ3LCBtZW1fY2QsIGtleSkgXAorCS8qIFwKKwkgKiBTLWZ1bmN0aW9uIHdpdGggQUVTIHN1YmJ5dGVzIFwKKwkgKi8gXAorCXZtb3ZkcWEgLkxpbnZfc2hpZnRfcm93IFJJUCwgdDQ7IFwKKwl2YnJvYWRjYXN0c3MgLkwwZjBmMGYwZiBSSVAsIHQ3OyBcCisJdm1vdmRxYSAuTHByZV90Zl9sb19zMSBSSVAsIHQwOyBcCisJdm1vdmRxYSAuTHByZV90Zl9oaV9zMSBSSVAsIHQxOyBcCisJXAorCS8qIEFFUyBpbnZlcnNlIHNoaWZ0IHJvd3MgKi8gXAorCXZwc2h1ZmIgdDQsIHgwLCB4MDsgXAorCXZwc2h1ZmIgdDQsIHg3LCB4NzsgXAorCXZwc2h1ZmIgdDQsIHgxLCB4MTsgXAorCXZwc2h1ZmIgdDQsIHg0LCB4NDsgXAorCXZwc2h1ZmIgdDQsIHgyLCB4MjsgXAorCXZwc2h1ZmIgdDQsIHg1LCB4NTsgXAorCXZwc2h1ZmIgdDQsIHgzLCB4MzsgXAorCXZwc2h1ZmIgdDQsIHg2LCB4NjsgXAorCVwKKwkvKiBwcmVmaWx0ZXIgc2JveGVzIDEsIDIgYW5kIDMgKi8gXAorCXZtb3ZkcWEgLkxwcmVfdGZfbG9fczQgUklQLCB0MjsgXAorCXZtb3ZkcWEgLkxwcmVfdGZfaGlfczQgUklQLCB0MzsgXAorCWZpbHRlcl84Yml0KHgwLCB0MCwgdDEsIHQ3LCB0Nik7IFwKKwlmaWx0ZXJfOGJpdCh4NywgdDAsIHQxLCB0NywgdDYpOyBcCisJZmlsdGVyXzhiaXQoeDEsIHQwLCB0MSwgdDcsIHQ2KTsgXAorCWZpbHRlcl84Yml0KHg0LCB0MCwgdDEsIHQ3LCB0Nik7IFwKKwlmaWx0ZXJfOGJpdCh4MiwgdDAsIHQxLCB0NywgdDYpOyBcCisJZmlsdGVyXzhiaXQoeDUsIHQwLCB0MSwgdDcsIHQ2KTsgXAorCVwKKwkvKiBwcmVmaWx0ZXIgc2JveCA0ICovIFwKKwl2cHhvciB0NCwgdDQsIHQ0OyBcCisJZmlsdGVyXzhiaXQoeDMsIHQyLCB0MywgdDcsIHQ2KTsgXAorCWZpbHRlcl84Yml0KHg2LCB0MiwgdDMsIHQ3LCB0Nik7IFwKKwlcCisJLyogQUVTIHN1YmJ5dGVzICsgQUVTIHNoaWZ0IHJvd3MgKi8gXAorCXZtb3ZkcWEgLkxwb3N0X3RmX2xvX3MxIFJJUCwgdDA7IFwKKwl2bW92ZHFhIC5McG9zdF90Zl9oaV9zMSBSSVAsIHQxOyBcCisJdmFlc2VuY2xhc3QgdDQsIHgwLCB4MDsgXAorCXZhZXNlbmNsYXN0IHQ0LCB4NywgeDc7IFwKKwl2YWVzZW5jbGFzdCB0NCwgeDEsIHgxOyBcCisJdmFlc2VuY2xhc3QgdDQsIHg0LCB4NDsgXAorCXZhZXNlbmNsYXN0IHQ0LCB4MiwgeDI7IFwKKwl2YWVzZW5jbGFzdCB0NCwgeDUsIHg1OyBcCisJdmFlc2VuY2xhc3QgdDQsIHgzLCB4MzsgXAorCXZhZXNlbmNsYXN0IHQ0LCB4NiwgeDY7IFwKKwlcCisJLyogcG9zdGZpbHRlciBzYm94ZXMgMSBhbmQgNCAqLyBcCisJdm1vdmRxYSAuTHBvc3RfdGZfbG9fczMgUklQLCB0MjsgXAorCXZtb3ZkcWEgLkxwb3N0X3RmX2hpX3MzIFJJUCwgdDM7IFwKKwlmaWx0ZXJfOGJpdCh4MCwgdDAsIHQxLCB0NywgdDYpOyBcCisJZmlsdGVyXzhiaXQoeDcsIHQwLCB0MSwgdDcsIHQ2KTsgXAorCWZpbHRlcl84Yml0KHgzLCB0MCwgdDEsIHQ3LCB0Nik7IFwKKwlmaWx0ZXJfOGJpdCh4NiwgdDAsIHQxLCB0NywgdDYpOyBcCisJXAorCS8qIHBvc3RmaWx0ZXIgc2JveCAzICovIFwKKwl2bW92ZHFhIC5McG9zdF90Zl9sb19zMiBSSVAsIHQ0OyBcCisJdm1vdmRxYSAuTHBvc3RfdGZfaGlfczIgUklQLCB0NTsgXAorCWZpbHRlcl84Yml0KHgyLCB0MiwgdDMsIHQ3LCB0Nik7IFwKKwlmaWx0ZXJfOGJpdCh4NSwgdDIsIHQzLCB0NywgdDYpOyBcCisJXAorCXZweG9yIHQ2LCB0NiwgdDY7IFwKKwl2bW92cSBrZXksIHQwOyBcCisJXAorCS8qIHBvc3RmaWx0ZXIgc2JveCAyICovIFwKKwlmaWx0ZXJfOGJpdCh4MSwgdDQsIHQ1LCB0NywgdDIpOyBcCisJZmlsdGVyXzhiaXQoeDQsIHQ0LCB0NSwgdDcsIHQyKTsgXAorCVwKKwl2cHNybGRxICQ1LCB0MCwgdDU7IFwKKwl2cHNybGRxICQxLCB0MCwgdDE7IFwKKwl2cHNybGRxICQyLCB0MCwgdDI7IFwKKwl2cHNybGRxICQzLCB0MCwgdDM7IFwKKwl2cHNybGRxICQ0LCB0MCwgdDQ7IFwKKwl2cHNodWZiIHQ2LCB0MCwgdDA7IFwKKwl2cHNodWZiIHQ2LCB0MSwgdDE7IFwKKwl2cHNodWZiIHQ2LCB0MiwgdDI7IFwKKwl2cHNodWZiIHQ2LCB0MywgdDM7IFwKKwl2cHNodWZiIHQ2LCB0NCwgdDQ7IFwKKwl2cHNybGRxICQyLCB0NSwgdDc7IFwKKwl2cHNodWZiIHQ2LCB0NywgdDc7IFwKKwlcCisJLyogUC1mdW5jdGlvbiAqLyBcCisJdnB4b3IgeDUsIHgwLCB4MDsgXAorCXZweG9yIHg2LCB4MSwgeDE7IFwKKwl2cHhvciB4NywgeDIsIHgyOyBcCisJdnB4b3IgeDQsIHgzLCB4MzsgXAorCVwKKwl2cHhvciB4MiwgeDQsIHg0OyBcCisJdnB4b3IgeDMsIHg1LCB4NTsgXAorCXZweG9yIHgwLCB4NiwgeDY7IFwKKwl2cHhvciB4MSwgeDcsIHg3OyBcCisJXAorCXZweG9yIHg3LCB4MCwgeDA7IFwKKwl2cHhvciB4NCwgeDEsIHgxOyBcCisJdnB4b3IgeDUsIHgyLCB4MjsgXAorCXZweG9yIHg2LCB4MywgeDM7IFwKKwlcCisJdnB4b3IgeDMsIHg0LCB4NDsgXAorCXZweG9yIHgwLCB4NSwgeDU7IFwKKwl2cHhvciB4MSwgeDYsIHg2OyBcCisJdnB4b3IgeDIsIHg3LCB4NzsgLyogbm90ZTogaGlnaCBhbmQgbG93IHBhcnRzIHN3YXBwZWQgKi8gXAorCVwKKwkvKiBBZGQga2V5IG1hdGVyaWFsIGFuZCByZXN1bHQgdG8gQ0QgKHggYmVjb21lcyBuZXcgQ0QpICovIFwKKwlcCisJdnB4b3IgdDMsIHg0LCB4NDsgXAorCXZweG9yIDAgKiAxNihtZW1fY2QpLCB4NCwgeDQ7IFwKKwlcCisJdnB4b3IgdDIsIHg1LCB4NTsgXAorCXZweG9yIDEgKiAxNihtZW1fY2QpLCB4NSwgeDU7IFwKKwlcCisJdnBzcmxkcSAkMSwgdDUsIHQzOyBcCisJdnBzaHVmYiB0NiwgdDUsIHQ1OyBcCisJdnBzaHVmYiB0NiwgdDMsIHQ2OyBcCisJXAorCXZweG9yIHQxLCB4NiwgeDY7IFwKKwl2cHhvciAyICogMTYobWVtX2NkKSwgeDYsIHg2OyBcCisJXAorCXZweG9yIHQwLCB4NywgeDc7IFwKKwl2cHhvciAzICogMTYobWVtX2NkKSwgeDcsIHg3OyBcCisJXAorCXZweG9yIHQ3LCB4MCwgeDA7IFwKKwl2cHhvciA0ICogMTYobWVtX2NkKSwgeDAsIHgwOyBcCisJXAorCXZweG9yIHQ2LCB4MSwgeDE7IFwKKwl2cHhvciA1ICogMTYobWVtX2NkKSwgeDEsIHgxOyBcCisJXAorCXZweG9yIHQ1LCB4MiwgeDI7IFwKKwl2cHhvciA2ICogMTYobWVtX2NkKSwgeDIsIHgyOyBcCisJXAorCXZweG9yIHQ0LCB4MywgeDM7IFwKKwl2cHhvciA3ICogMTYobWVtX2NkKSwgeDMsIHgzOworCisvKgorICogSU4vT1VUOgorICogIHgwLi54NzogYnl0ZS1zbGljZWQgQUIgc3RhdGUgcHJlbG9hZGVkCisgKiAgbWVtX2FiOiBieXRlLXNsaWNlZCBBQiBzdGF0ZSBpbiBtZW1vcnkKKyAqICBtZW1fY2I6IGJ5dGUtc2xpY2VkIENEIHN0YXRlIGluIG1lbW9yeQorICovCisjZGVmaW5lIHR3b19yb3VuZHNtMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgIHk2LCB5NywgbWVtX2FiLCBtZW1fY2QsIGksIGRpciwgc3RvcmVfYWIpIFwKKwlyb3VuZHNtMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgeTYsIHk3LCBtZW1fY2QsIChrZXlfdGFibGUgKyAoaSkgKiA4KShDVFgpKTsgXAorCVwKKwl2bW92ZHF1IHg0LCAwICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeDUsIDEgKiAxNihtZW1fY2QpOyBcCisJdm1vdmRxdSB4NiwgMiAqIDE2KG1lbV9jZCk7IFwKKwl2bW92ZHF1IHg3LCAzICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeDAsIDQgKiAxNihtZW1fY2QpOyBcCisJdm1vdmRxdSB4MSwgNSAqIDE2KG1lbV9jZCk7IFwKKwl2bW92ZHF1IHgyLCA2ICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeDMsIDcgKiAxNihtZW1fY2QpOyBcCisJXAorCXJvdW5kc20xNih4NCwgeDUsIHg2LCB4NywgeDAsIHgxLCB4MiwgeDMsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICB5NiwgeTcsIG1lbV9hYiwgKGtleV90YWJsZSArICgoaSkgKyAoZGlyKSkgKiA4KShDVFgpKTsgXAorCVwKKwlzdG9yZV9hYih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIG1lbV9hYik7CisKKyNkZWZpbmUgZHVtbXlfc3RvcmUoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCBtZW1fYWIpIC8qIGRvIG5vdGhpbmcgKi8KKworI2RlZmluZSBzdG9yZV9hYl9zdGF0ZSh4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIG1lbV9hYikgXAorCS8qIFN0b3JlIG5ldyBBQiBzdGF0ZSAqLyBcCisJdm1vdmRxdSB4MCwgMCAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHgxLCAxICogMTYobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDIsIDIgKiAxNihtZW1fYWIpOyBcCisJdm1vdmRxdSB4MywgMyAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHg0LCA0ICogMTYobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDUsIDUgKiAxNihtZW1fYWIpOyBcCisJdm1vdmRxdSB4NiwgNiAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHg3LCA3ICogMTYobWVtX2FiKTsKKworI2RlZmluZSBlbmNfcm91bmRzMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgIHk2LCB5NywgbWVtX2FiLCBtZW1fY2QsIGkpIFwKKwl0d29fcm91bmRzbTE2KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCAoaSkgKyAyLCAxLCBzdG9yZV9hYl9zdGF0ZSk7IFwKKwl0d29fcm91bmRzbTE2KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCAoaSkgKyA0LCAxLCBzdG9yZV9hYl9zdGF0ZSk7IFwKKwl0d29fcm91bmRzbTE2KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCAoaSkgKyA2LCAxLCBkdW1teV9zdG9yZSk7CisKKyNkZWZpbmUgZGVjX3JvdW5kczE2KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCBpKSBcCisJdHdvX3JvdW5kc20xNih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgKGkpICsgNywgLTEsIHN0b3JlX2FiX3N0YXRlKTsgXAorCXR3b19yb3VuZHNtMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgIHk2LCB5NywgbWVtX2FiLCBtZW1fY2QsIChpKSArIDUsIC0xLCBzdG9yZV9hYl9zdGF0ZSk7IFwKKwl0d29fcm91bmRzbTE2KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCAoaSkgKyAzLCAtMSwgZHVtbXlfc3RvcmUpOworCisvKgorICogSU46CisgKiAgdjAuLjM6IGJ5dGUtc2xpY2VkIDMyLWJpdCBpbnRlZ2VycworICogT1VUOgorICogIHYwLi4zOiAoSU4gPDw8IDEpCisgKi8KKyNkZWZpbmUgcm9sMzJfMV8xNih2MCwgdjEsIHYyLCB2MywgdDAsIHQxLCB0MiwgemVybykgXAorCXZwY21wZ3RiIHYwLCB6ZXJvLCB0MDsgXAorCXZwYWRkYiB2MCwgdjAsIHYwOyBcCisJdnBhYnNiIHQwLCB0MDsgXAorCVwKKwl2cGNtcGd0YiB2MSwgemVybywgdDE7IFwKKwl2cGFkZGIgdjEsIHYxLCB2MTsgXAorCXZwYWJzYiB0MSwgdDE7IFwKKwlcCisJdnBjbXBndGIgdjIsIHplcm8sIHQyOyBcCisJdnBhZGRiIHYyLCB2MiwgdjI7IFwKKwl2cGFic2IgdDIsIHQyOyBcCisJXAorCXZwb3IgdDAsIHYxLCB2MTsgXAorCVwKKwl2cGNtcGd0YiB2MywgemVybywgdDA7IFwKKwl2cGFkZGIgdjMsIHYzLCB2MzsgXAorCXZwYWJzYiB0MCwgdDA7IFwKKwlcCisJdnBvciB0MSwgdjIsIHYyOyBcCisJdnBvciB0MiwgdjMsIHYzOyBcCisJdnBvciB0MCwgdjAsIHYwOworCisvKgorICogSU46CisgKiAgIHI6IGJ5dGUtc2xpY2VkIEFCIHN0YXRlIGluIG1lbW9yeQorICogICBsOiBieXRlLXNsaWNlZCBDRCBzdGF0ZSBpbiBtZW1vcnkKKyAqIE9VVDoKKyAqICAgeDAuLng3OiBuZXcgYnl0ZS1zbGljZWQgQ0Qgc3RhdGUKKyAqLworI2RlZmluZSBmbHMxNihsLCBsMCwgbDEsIGwyLCBsMywgbDQsIGw1LCBsNiwgbDcsIHIsIHQwLCB0MSwgdDIsIHQzLCB0dDAsIFwKKwkgICAgICB0dDEsIHR0MiwgdHQzLCBrbGwsIGtsciwga3JsLCBrcnIpIFwKKwkvKiBcCisJICogdDAgPSBrbGw7IFwKKwkgKiB0MCAmPSBsbDsgXAorCSAqIGxyIF49IHJvbDMyKHQwLCAxKTsgXAorCSAqLyBcCisJdnB4b3IgdHQwLCB0dDAsIHR0MDsgXAorCXZtb3ZkIGtsbCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQzOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MjsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDE7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQwOyBcCisJXAorCXZwYW5kIGwwLCB0MCwgdDA7IFwKKwl2cGFuZCBsMSwgdDEsIHQxOyBcCisJdnBhbmQgbDIsIHQyLCB0MjsgXAorCXZwYW5kIGwzLCB0MywgdDM7IFwKKwlcCisJcm9sMzJfMV8xNih0MywgdDIsIHQxLCB0MCwgdHQxLCB0dDIsIHR0MywgdHQwKTsgXAorCVwKKwl2cHhvciBsNCwgdDAsIGw0OyBcCisJdm1vdmRxdSBsNCwgNCAqIDE2KGwpOyBcCisJdnB4b3IgbDUsIHQxLCBsNTsgXAorCXZtb3ZkcXUgbDUsIDUgKiAxNihsKTsgXAorCXZweG9yIGw2LCB0MiwgbDY7IFwKKwl2bW92ZHF1IGw2LCA2ICogMTYobCk7IFwKKwl2cHhvciBsNywgdDMsIGw3OyBcCisJdm1vdmRxdSBsNywgNyAqIDE2KGwpOyBcCisJXAorCS8qIFwKKwkgKiB0MiA9IGtycjsgXAorCSAqIHQyIHw9IHJyOyBcCisJICogcmwgXj0gdDI7IFwKKwkgKi8gXAorCVwKKwl2bW92ZCBrcnIsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MzsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDI7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQxOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MDsgXAorCVwKKwl2cG9yIDQgKiAxNihyKSwgdDAsIHQwOyBcCisJdnBvciA1ICogMTYociksIHQxLCB0MTsgXAorCXZwb3IgNiAqIDE2KHIpLCB0MiwgdDI7IFwKKwl2cG9yIDcgKiAxNihyKSwgdDMsIHQzOyBcCisJXAorCXZweG9yIDAgKiAxNihyKSwgdDAsIHQwOyBcCisJdnB4b3IgMSAqIDE2KHIpLCB0MSwgdDE7IFwKKwl2cHhvciAyICogMTYociksIHQyLCB0MjsgXAorCXZweG9yIDMgKiAxNihyKSwgdDMsIHQzOyBcCisJdm1vdmRxdSB0MCwgMCAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MSwgMSAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MiwgMiAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MywgMyAqIDE2KHIpOyBcCisJXAorCS8qIFwKKwkgKiB0MiA9IGtybDsgXAorCSAqIHQyICY9IHJsOyBcCisJICogcnIgXj0gcm9sMzIodDIsIDEpOyBcCisJICovIFwKKwl2bW92ZCBrcmwsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MzsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDI7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQxOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MDsgXAorCVwKKwl2cGFuZCAwICogMTYociksIHQwLCB0MDsgXAorCXZwYW5kIDEgKiAxNihyKSwgdDEsIHQxOyBcCisJdnBhbmQgMiAqIDE2KHIpLCB0MiwgdDI7IFwKKwl2cGFuZCAzICogMTYociksIHQzLCB0MzsgXAorCVwKKwlyb2wzMl8xXzE2KHQzLCB0MiwgdDEsIHQwLCB0dDEsIHR0MiwgdHQzLCB0dDApOyBcCisJXAorCXZweG9yIDQgKiAxNihyKSwgdDAsIHQwOyBcCisJdnB4b3IgNSAqIDE2KHIpLCB0MSwgdDE7IFwKKwl2cHhvciA2ICogMTYociksIHQyLCB0MjsgXAorCXZweG9yIDcgKiAxNihyKSwgdDMsIHQzOyBcCisJdm1vdmRxdSB0MCwgNCAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MSwgNSAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MiwgNiAqIDE2KHIpOyBcCisJdm1vdmRxdSB0MywgNyAqIDE2KHIpOyBcCisJXAorCS8qIFwKKwkgKiB0MCA9IGtscjsgXAorCSAqIHQwIHw9IGxyOyBcCisJICogbGwgXj0gdDA7IFwKKwkgKi8gXAorCVwKKwl2bW92ZCBrbHIsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MzsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDI7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQxOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MDsgXAorCVwKKwl2cG9yIGw0LCB0MCwgdDA7IFwKKwl2cG9yIGw1LCB0MSwgdDE7IFwKKwl2cG9yIGw2LCB0MiwgdDI7IFwKKwl2cG9yIGw3LCB0MywgdDM7IFwKKwlcCisJdnB4b3IgbDAsIHQwLCBsMDsgXAorCXZtb3ZkcXUgbDAsIDAgKiAxNihsKTsgXAorCXZweG9yIGwxLCB0MSwgbDE7IFwKKwl2bW92ZHF1IGwxLCAxICogMTYobCk7IFwKKwl2cHhvciBsMiwgdDIsIGwyOyBcCisJdm1vdmRxdSBsMiwgMiAqIDE2KGwpOyBcCisJdnB4b3IgbDMsIHQzLCBsMzsgXAorCXZtb3ZkcXUgbDMsIDMgKiAxNihsKTsKKworI2RlZmluZSB0cmFuc3Bvc2VfNHg0KHgwLCB4MSwgeDIsIHgzLCB0MSwgdDIpIFwKKwl2cHVucGNraGRxIHgxLCB4MCwgdDI7IFwKKwl2cHVucGNrbGRxIHgxLCB4MCwgeDA7IFwKKwlcCisJdnB1bnBja2xkcSB4MywgeDIsIHQxOyBcCisJdnB1bnBja2hkcSB4MywgeDIsIHgyOyBcCisJXAorCXZwdW5wY2tocWRxIHQxLCB4MCwgeDE7IFwKKwl2cHVucGNrbHFkcSB0MSwgeDAsIHgwOyBcCisJXAorCXZwdW5wY2tocWRxIHgyLCB0MiwgeDM7IFwKKwl2cHVucGNrbHFkcSB4MiwgdDIsIHgyOworCisjZGVmaW5lIGJ5dGVzbGljZV8xNngxNmJfZmFzdChhMCwgYjAsIGMwLCBkMCwgYTEsIGIxLCBjMSwgZDEsIGEyLCBiMiwgYzIsIGQyLCBcCisJCQkgICAgICBhMywgYjMsIGMzLCBkMywgc3QwLCBzdDEpIFwKKwl2bW92ZHF1IGQyLCBzdDA7IFwKKwl2bW92ZHF1IGQzLCBzdDE7IFwKKwl0cmFuc3Bvc2VfNHg0KGEwLCBhMSwgYTIsIGEzLCBkMiwgZDMpOyBcCisJdHJhbnNwb3NlXzR4NChiMCwgYjEsIGIyLCBiMywgZDIsIGQzKTsgXAorCXZtb3ZkcXUgc3QwLCBkMjsgXAorCXZtb3ZkcXUgc3QxLCBkMzsgXAorCVwKKwl2bW92ZHF1IGEwLCBzdDA7IFwKKwl2bW92ZHF1IGExLCBzdDE7IFwKKwl0cmFuc3Bvc2VfNHg0KGMwLCBjMSwgYzIsIGMzLCBhMCwgYTEpOyBcCisJdHJhbnNwb3NlXzR4NChkMCwgZDEsIGQyLCBkMywgYTAsIGExKTsgXAorCVwKKwl2bW92ZHF1IC5Mc2h1ZmJfMTZ4MTZiIFJJUCwgYTA7IFwKKwl2bW92ZHF1IHN0MSwgYTE7IFwKKwl2cHNodWZiIGEwLCBhMiwgYTI7IFwKKwl2cHNodWZiIGEwLCBhMywgYTM7IFwKKwl2cHNodWZiIGEwLCBiMCwgYjA7IFwKKwl2cHNodWZiIGEwLCBiMSwgYjE7IFwKKwl2cHNodWZiIGEwLCBiMiwgYjI7IFwKKwl2cHNodWZiIGEwLCBiMywgYjM7IFwKKwl2cHNodWZiIGEwLCBhMSwgYTE7IFwKKwl2cHNodWZiIGEwLCBjMCwgYzA7IFwKKwl2cHNodWZiIGEwLCBjMSwgYzE7IFwKKwl2cHNodWZiIGEwLCBjMiwgYzI7IFwKKwl2cHNodWZiIGEwLCBjMywgYzM7IFwKKwl2cHNodWZiIGEwLCBkMCwgZDA7IFwKKwl2cHNodWZiIGEwLCBkMSwgZDE7IFwKKwl2cHNodWZiIGEwLCBkMiwgZDI7IFwKKwl2cHNodWZiIGEwLCBkMywgZDM7IFwKKwl2bW92ZHF1IGQzLCBzdDE7IFwKKwl2bW92ZHF1IHN0MCwgZDM7IFwKKwl2cHNodWZiIGEwLCBkMywgYTA7IFwKKwl2bW92ZHF1IGQyLCBzdDA7IFwKKwlcCisJdHJhbnNwb3NlXzR4NChhMCwgYjAsIGMwLCBkMCwgZDIsIGQzKTsgXAorCXRyYW5zcG9zZV80eDQoYTEsIGIxLCBjMSwgZDEsIGQyLCBkMyk7IFwKKwl2bW92ZHF1IHN0MCwgZDI7IFwKKwl2bW92ZHF1IHN0MSwgZDM7IFwKKwlcCisJdm1vdmRxdSBiMCwgc3QwOyBcCisJdm1vdmRxdSBiMSwgc3QxOyBcCisJdHJhbnNwb3NlXzR4NChhMiwgYjIsIGMyLCBkMiwgYjAsIGIxKTsgXAorCXRyYW5zcG9zZV80eDQoYTMsIGIzLCBjMywgZDMsIGIwLCBiMSk7IFwKKwl2bW92ZHF1IHN0MCwgYjA7IFwKKwl2bW92ZHF1IHN0MSwgYjE7IFwKKwkvKiBkb2VzIG5vdCBhZGp1c3Qgb3V0cHV0IGJ5dGVzIGluc2lkZSB2ZWN0b3JzICovCisKKyNkZWZpbmUgdHJhbnNwb3NlXzh4OGIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgdDAsIHQxLCB0MiwgdDMsIHQ0KSBcCisJdnB1bnBja2xidyBhLCBiLCB0MDsgXAorCXZwdW5wY2toYncgYSwgYiwgYjsgXAorCVwKKwl2cHVucGNrbGJ3IGMsIGQsIHQxOyBcCisJdnB1bnBja2hidyBjLCBkLCBkOyBcCisJXAorCXZwdW5wY2tsYncgZSwgZiwgdDI7IFwKKwl2cHVucGNraGJ3IGUsIGYsIGY7IFwKKwlcCisJdnB1bnBja2xidyBnLCBoLCB0MzsgXAorCXZwdW5wY2toYncgZywgaCwgaDsgXAorCVwKKwl2cHVucGNrbHdkIHQwLCB0MSwgZzsgXAorCXZwdW5wY2tod2QgdDAsIHQxLCB0MDsgXAorCVwKKwl2cHVucGNrbHdkIGIsIGQsIHQxOyBcCisJdnB1bnBja2h3ZCBiLCBkLCBlOyBcCisJXAorCXZwdW5wY2tsd2QgdDIsIHQzLCBjOyBcCisJdnB1bnBja2h3ZCB0MiwgdDMsIHQyOyBcCisJXAorCXZwdW5wY2tsd2QgZiwgaCwgdDM7IFwKKwl2cHVucGNraHdkIGYsIGgsIGI7IFwKKwlcCisJdnB1bnBja2x3ZCBlLCBiLCB0NDsgXAorCXZwdW5wY2tod2QgZSwgYiwgYjsgXAorCVwKKwl2cHVucGNrbHdkIHQxLCB0MywgZTsgXAorCXZwdW5wY2tod2QgdDEsIHQzLCBmOyBcCisJXAorCXZtb3ZkcWEgLkx0cmFuc3Bvc2VfOHg4X3NodWYgUklQLCB0MzsgXAorCVwKKwl2cHVucGNrbHdkIGcsIGMsIGQ7IFwKKwl2cHVucGNraHdkIGcsIGMsIGM7IFwKKwlcCisJdnB1bnBja2x3ZCB0MCwgdDIsIHQxOyBcCisJdnB1bnBja2h3ZCB0MCwgdDIsIGg7IFwKKwlcCisJdnB1bnBja2hxZHEgYiwgaCwgYTsgXAorCXZwc2h1ZmIgdDMsIGEsIGE7IFwKKwl2cHVucGNrbHFkcSBiLCBoLCBiOyBcCisJdnBzaHVmYiB0MywgYiwgYjsgXAorCVwKKwl2cHVucGNraHFkcSBlLCBkLCBnOyBcCisJdnBzaHVmYiB0MywgZywgZzsgXAorCXZwdW5wY2tscWRxIGUsIGQsIGg7IFwKKwl2cHNodWZiIHQzLCBoLCBoOyBcCisJXAorCXZwdW5wY2tocWRxIGYsIGMsIGU7IFwKKwl2cHNodWZiIHQzLCBlLCBlOyBcCisJdnB1bnBja2xxZHEgZiwgYywgZjsgXAorCXZwc2h1ZmIgdDMsIGYsIGY7IFwKKwlcCisJdnB1bnBja2hxZHEgdDQsIHQxLCBjOyBcCisJdnBzaHVmYiB0MywgYywgYzsgXAorCXZwdW5wY2tscWRxIHQ0LCB0MSwgZDsgXAorCXZwc2h1ZmIgdDMsIGQsIGQ7CisKKy8qIGxvYWQgYmxvY2tzIHRvIHJlZ2lzdGVycyBhbmQgYXBwbHkgcHJlLXdoaXRlbmluZyAqLworI2RlZmluZSBpbnBhY2sxNl9wcmUoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgeTYsIHk3LCByaW8sIGtleSkgXAorCXZtb3ZxIGtleSwgeDA7IFwKKwl2cHNodWZiIC5McGFja19ic3dhcCBSSVAsIHgwLCB4MDsgXAorCVwKKwl2cHhvciAwICogMTYocmlvKSwgeDAsIHk3OyBcCisJdnB4b3IgMSAqIDE2KHJpbyksIHgwLCB5NjsgXAorCXZweG9yIDIgKiAxNihyaW8pLCB4MCwgeTU7IFwKKwl2cHhvciAzICogMTYocmlvKSwgeDAsIHk0OyBcCisJdnB4b3IgNCAqIDE2KHJpbyksIHgwLCB5MzsgXAorCXZweG9yIDUgKiAxNihyaW8pLCB4MCwgeTI7IFwKKwl2cHhvciA2ICogMTYocmlvKSwgeDAsIHkxOyBcCisJdnB4b3IgNyAqIDE2KHJpbyksIHgwLCB5MDsgXAorCXZweG9yIDggKiAxNihyaW8pLCB4MCwgeDc7IFwKKwl2cHhvciA5ICogMTYocmlvKSwgeDAsIHg2OyBcCisJdnB4b3IgMTAgKiAxNihyaW8pLCB4MCwgeDU7IFwKKwl2cHhvciAxMSAqIDE2KHJpbyksIHgwLCB4NDsgXAorCXZweG9yIDEyICogMTYocmlvKSwgeDAsIHgzOyBcCisJdnB4b3IgMTMgKiAxNihyaW8pLCB4MCwgeDI7IFwKKwl2cHhvciAxNCAqIDE2KHJpbyksIHgwLCB4MTsgXAorCXZweG9yIDE1ICogMTYocmlvKSwgeDAsIHgwOworCisvKiBieXRlc2xpY2UgcHJlLXdoaXRlbmVkIGJsb2NrcyBhbmQgc3RvcmUgdG8gdGVtcG9yYXJ5IG1lbW9yeSAqLworI2RlZmluZSBpbnBhY2sxNl9wb3N0KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkKSBcCisJYnl0ZXNsaWNlXzE2eDE2Yl9mYXN0KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIFwKKwkJCSAgICAgIHk0LCB5NSwgeTYsIHk3LCAobWVtX2FiKSwgKG1lbV9jZCkpOyBcCisJXAorCXZtb3ZkcXUgeDAsIDAgKiAxNihtZW1fYWIpOyBcCisJdm1vdmRxdSB4MSwgMSAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHgyLCAyICogMTYobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDMsIDMgKiAxNihtZW1fYWIpOyBcCisJdm1vdmRxdSB4NCwgNCAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHg1LCA1ICogMTYobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDYsIDYgKiAxNihtZW1fYWIpOyBcCisJdm1vdmRxdSB4NywgNyAqIDE2KG1lbV9hYik7IFwKKwl2bW92ZHF1IHkwLCAwICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeTEsIDEgKiAxNihtZW1fY2QpOyBcCisJdm1vdmRxdSB5MiwgMiAqIDE2KG1lbV9jZCk7IFwKKwl2bW92ZHF1IHkzLCAzICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeTQsIDQgKiAxNihtZW1fY2QpOyBcCisJdm1vdmRxdSB5NSwgNSAqIDE2KG1lbV9jZCk7IFwKKwl2bW92ZHF1IHk2LCA2ICogMTYobWVtX2NkKTsgXAorCXZtb3ZkcXUgeTcsIDcgKiAxNihtZW1fY2QpOworCisvKiBkZS1ieXRlc2xpY2UsIGFwcGx5IHBvc3Qtd2hpdGVuaW5nIGFuZCBzdG9yZSBibG9ja3MgKi8KKyNkZWZpbmUgb3V0dW5wYWNrMTYoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIFwKKwkJICAgIHk1LCB5NiwgeTcsIGtleSwgc3RhY2tfdG1wMCwgc3RhY2tfdG1wMSkgXAorCWJ5dGVzbGljZV8xNngxNmJfZmFzdCh5MCwgeTQsIHgwLCB4NCwgeTEsIHk1LCB4MSwgeDUsIHkyLCB5NiwgeDIsIHg2LCBcCisJCQkgICAgICB5MywgeTcsIHgzLCB4Nywgc3RhY2tfdG1wMCwgc3RhY2tfdG1wMSk7IFwKKwlcCisJdm1vdmRxdSB4MCwgc3RhY2tfdG1wMDsgXAorCVwKKwl2bW92cSBrZXksIHgwOyBcCisJdnBzaHVmYiAuTHBhY2tfYnN3YXAgUklQLCB4MCwgeDA7IFwKKwlcCisJdnB4b3IgeDAsIHk3LCB5NzsgXAorCXZweG9yIHgwLCB5NiwgeTY7IFwKKwl2cHhvciB4MCwgeTUsIHk1OyBcCisJdnB4b3IgeDAsIHk0LCB5NDsgXAorCXZweG9yIHgwLCB5MywgeTM7IFwKKwl2cHhvciB4MCwgeTIsIHkyOyBcCisJdnB4b3IgeDAsIHkxLCB5MTsgXAorCXZweG9yIHgwLCB5MCwgeTA7IFwKKwl2cHhvciB4MCwgeDcsIHg3OyBcCisJdnB4b3IgeDAsIHg2LCB4NjsgXAorCXZweG9yIHgwLCB4NSwgeDU7IFwKKwl2cHhvciB4MCwgeDQsIHg0OyBcCisJdnB4b3IgeDAsIHgzLCB4MzsgXAorCXZweG9yIHgwLCB4MiwgeDI7IFwKKwl2cHhvciB4MCwgeDEsIHgxOyBcCisJdnB4b3Igc3RhY2tfdG1wMCwgeDAsIHgwOworCisjZGVmaW5lIHdyaXRlX291dHB1dCh4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICB5NiwgeTcsIHJpbykgXAorCXZtb3ZkcXUgeDAsIDAgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB4MSwgMSAqIDE2KHJpbyk7IFwKKwl2bW92ZHF1IHgyLCAyICogMTYocmlvKTsgXAorCXZtb3ZkcXUgeDMsIDMgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB4NCwgNCAqIDE2KHJpbyk7IFwKKwl2bW92ZHF1IHg1LCA1ICogMTYocmlvKTsgXAorCXZtb3ZkcXUgeDYsIDYgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB4NywgNyAqIDE2KHJpbyk7IFwKKwl2bW92ZHF1IHkwLCA4ICogMTYocmlvKTsgXAorCXZtb3ZkcXUgeTEsIDkgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5MiwgMTAgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5MywgMTEgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5NCwgMTIgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5NSwgMTMgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5NiwgMTQgKiAxNihyaW8pOyBcCisJdm1vdmRxdSB5NywgMTUgKiAxNihyaW8pOworCisuZGF0YQorLmFsaWduIDE2CisKKyNkZWZpbmUgU0hVRkJfQllURVMoaWR4KSBcCisJMCArIChpZHgpLCA0ICsgKGlkeCksIDggKyAoaWR4KSwgMTIgKyAoaWR4KQorCisuTHNodWZiXzE2eDE2YjoKKwkuYnl0ZSBTSFVGQl9CWVRFUygwKSwgU0hVRkJfQllURVMoMSksIFNIVUZCX0JZVEVTKDIpLCBTSFVGQl9CWVRFUygzKTsKKworLkxwYWNrX2Jzd2FwOgorCS5sb25nIDB4MDAwMTAyMDMKKwkubG9uZyAweDA0MDUwNjA3CisJLmxvbmcgMHg4MDgwODA4MAorCS5sb25nIDB4ODA4MDgwODAKKworLyogRm9yIENUUi1tb2RlIElWIGJ5dGVzd2FwICovCisuTGJzd2FwMTI4X21hc2s6CisJLmJ5dGUgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMAorCisvKgorICogcHJlLVN1YkJ5dGUgdHJhbnNmb3JtCisgKgorICogcHJlLWxvb2t1cCBmb3Igc2JveDEsIHNib3gyLCBzYm94MzoKKyAqICAgc3dhcF9iaXRlbmRpYW5uZXNzKAorICogICAgICAgaXNvbV9tYXBfY2FtZWxsaWFfdG9fYWVzKAorICogICAgICAgICAgIGNhbWVsbGlhX2YoCisgKiAgICAgICAgICAgICAgIHN3YXBfYml0ZW5kaWFuZXNzKGluKQorICogICAgICAgICAgICkKKyAqICAgICAgICkKKyAqICAgKQorICoKKyAqIChub3RlOiAn4oqVIDB4YzUnIGluc2lkZSBjYW1lbGxpYV9mKCkpCisgKi8KKy5McHJlX3RmX2xvX3MxOgorCS5ieXRlIDB4NDUsIDB4ZTgsIDB4NDAsIDB4ZWQsIDB4MmUsIDB4ODMsIDB4MmIsIDB4ODYKKwkuYnl0ZSAweDRiLCAweGU2LCAweDRlLCAweGUzLCAweDIwLCAweDhkLCAweDI1LCAweDg4CisuTHByZV90Zl9oaV9zMToKKwkuYnl0ZSAweDAwLCAweDUxLCAweGYxLCAweGEwLCAweDhhLCAweGRiLCAweDdiLCAweDJhCisJLmJ5dGUgMHgwOSwgMHg1OCwgMHhmOCwgMHhhOSwgMHg4MywgMHhkMiwgMHg3MiwgMHgyMworCisvKgorICogcHJlLVN1YkJ5dGUgdHJhbnNmb3JtCisgKgorICogcHJlLWxvb2t1cCBmb3Igc2JveDQ6CisgKiAgIHN3YXBfYml0ZW5kaWFubmVzcygKKyAqICAgICAgIGlzb21fbWFwX2NhbWVsbGlhX3RvX2FlcygKKyAqICAgICAgICAgICBjYW1lbGxpYV9mKAorICogICAgICAgICAgICAgICBzd2FwX2JpdGVuZGlhbmVzcyhpbiA8PDwgMSkKKyAqICAgICAgICAgICApCisgKiAgICAgICApCisgKiAgICkKKyAqCisgKiAobm90ZTogJ+KKlSAweGM1JyBpbnNpZGUgY2FtZWxsaWFfZigpKQorICovCisuTHByZV90Zl9sb19zNDoKKwkuYnl0ZSAweDQ1LCAweDQwLCAweDJlLCAweDJiLCAweDRiLCAweDRlLCAweDIwLCAweDI1CisJLmJ5dGUgMHgxNCwgMHgxMSwgMHg3ZiwgMHg3YSwgMHgxYSwgMHgxZiwgMHg3MSwgMHg3NAorLkxwcmVfdGZfaGlfczQ6CisJLmJ5dGUgMHgwMCwgMHhmMSwgMHg4YSwgMHg3YiwgMHgwOSwgMHhmOCwgMHg4MywgMHg3MgorCS5ieXRlIDB4YWQsIDB4NWMsIDB4MjcsIDB4ZDYsIDB4YTQsIDB4NTUsIDB4MmUsIDB4ZGYKKworLyoKKyAqIHBvc3QtU3ViQnl0ZSB0cmFuc2Zvcm0KKyAqCisgKiBwb3N0LWxvb2t1cCBmb3Igc2JveDEsIHNib3g0OgorICogIHN3YXBfYml0ZW5kaWFubmVzcygKKyAqICAgICAgY2FtZWxsaWFfaCgKKyAqICAgICAgICAgIGlzb21fbWFwX2Flc190b19jYW1lbGxpYSgKKyAqICAgICAgICAgICAgICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgICAgICAgICAgICAgIGFlc19pbnZlcnNlX2FmZmluZV90cmFuc2Zvcm0oaW4pCisgKiAgICAgICAgICAgICAgKQorICogICAgICAgICAgKQorICogICAgICApCisgKiAgKQorICoKKyAqIChub3RlOiAn4oqVIDB4NmUnIGluc2lkZSBjYW1lbGxpYV9oKCkpCisgKi8KKy5McG9zdF90Zl9sb19zMToKKwkuYnl0ZSAweDNjLCAweGNjLCAweGNmLCAweDNmLCAweDMyLCAweGMyLCAweGMxLCAweDMxCisJLmJ5dGUgMHhkYywgMHgyYywgMHgyZiwgMHhkZiwgMHhkMiwgMHgyMiwgMHgyMSwgMHhkMQorLkxwb3N0X3RmX2hpX3MxOgorCS5ieXRlIDB4MDAsIDB4ZjksIDB4ODYsIDB4N2YsIDB4ZDcsIDB4MmUsIDB4NTEsIDB4YTgKKwkuYnl0ZSAweGE0LCAweDVkLCAweDIyLCAweGRiLCAweDczLCAweDhhLCAweGY1LCAweDBjCisKKy8qCisgKiBwb3N0LVN1YkJ5dGUgdHJhbnNmb3JtCisgKgorICogcG9zdC1sb29rdXAgZm9yIHNib3gyOgorICogIHN3YXBfYml0ZW5kaWFubmVzcygKKyAqICAgICAgY2FtZWxsaWFfaCgKKyAqICAgICAgICAgIGlzb21fbWFwX2Flc190b19jYW1lbGxpYSgKKyAqICAgICAgICAgICAgICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgICAgICAgICAgICAgIGFlc19pbnZlcnNlX2FmZmluZV90cmFuc2Zvcm0oaW4pCisgKiAgICAgICAgICAgICAgKQorICogICAgICAgICAgKQorICogICAgICApCisgKiAgKSA8PDwgMQorICoKKyAqIChub3RlOiAn4oqVIDB4NmUnIGluc2lkZSBjYW1lbGxpYV9oKCkpCisgKi8KKy5McG9zdF90Zl9sb19zMjoKKwkuYnl0ZSAweDc4LCAweDk5LCAweDlmLCAweDdlLCAweDY0LCAweDg1LCAweDgzLCAweDYyCisJLmJ5dGUgMHhiOSwgMHg1OCwgMHg1ZSwgMHhiZiwgMHhhNSwgMHg0NCwgMHg0MiwgMHhhMworLkxwb3N0X3RmX2hpX3MyOgorCS5ieXRlIDB4MDAsIDB4ZjMsIDB4MGQsIDB4ZmUsIDB4YWYsIDB4NWMsIDB4YTIsIDB4NTEKKwkuYnl0ZSAweDQ5LCAweGJhLCAweDQ0LCAweGI3LCAweGU2LCAweDE1LCAweGViLCAweDE4CisKKy8qCisgKiBwb3N0LVN1YkJ5dGUgdHJhbnNmb3JtCisgKgorICogcG9zdC1sb29rdXAgZm9yIHNib3gzOgorICogIHN3YXBfYml0ZW5kaWFubmVzcygKKyAqICAgICAgY2FtZWxsaWFfaCgKKyAqICAgICAgICAgIGlzb21fbWFwX2Flc190b19jYW1lbGxpYSgKKyAqICAgICAgICAgICAgICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgICAgICAgICAgICAgIGFlc19pbnZlcnNlX2FmZmluZV90cmFuc2Zvcm0oaW4pCisgKiAgICAgICAgICAgICAgKQorICogICAgICAgICAgKQorICogICAgICApCisgKiAgKSA+Pj4gMQorICoKKyAqIChub3RlOiAn4oqVIDB4NmUnIGluc2lkZSBjYW1lbGxpYV9oKCkpCisgKi8KKy5McG9zdF90Zl9sb19zMzoKKwkuYnl0ZSAweDFlLCAweDY2LCAweGU3LCAweDlmLCAweDE5LCAweDYxLCAweGUwLCAweDk4CisJLmJ5dGUgMHg2ZSwgMHgxNiwgMHg5NywgMHhlZiwgMHg2OSwgMHgxMSwgMHg5MCwgMHhlOAorLkxwb3N0X3RmX2hpX3MzOgorCS5ieXRlIDB4MDAsIDB4ZmMsIDB4NDMsIDB4YmYsIDB4ZWIsIDB4MTcsIDB4YTgsIDB4NTQKKwkuYnl0ZSAweDUyLCAweGFlLCAweDExLCAweGVkLCAweGI5LCAweDQ1LCAweGZhLCAweDA2CisKKy8qIEZvciBpc29sYXRpbmcgU3ViQnl0ZXMgZnJvbSBBRVNFTkNMQVNULCBpbnZlcnNlIHNoaWZ0IHJvdyAqLworLkxpbnZfc2hpZnRfcm93OgorCS5ieXRlIDB4MDAsIDB4MGQsIDB4MGEsIDB4MDcsIDB4MDQsIDB4MDEsIDB4MGUsIDB4MGIKKwkuYnl0ZSAweDA4LCAweDA1LCAweDAyLCAweDBmLCAweDBjLCAweDA5LCAweDA2LCAweDAzCisKKy8qIHNodWZmbGUgbWFzayBmb3IgOHg4IGJ5dGUgdHJhbnNwb3NlICovCisuTHRyYW5zcG9zZV84eDhfc2h1ZjoKKwkuYnl0ZSAwLCAxLCA0LCA1LCAyLCAzLCA2LCA3LCA4KzAsIDgrMSwgOCs0LCA4KzUsIDgrMiwgOCszLCA4KzYsIDgrNworCisuYWxpZ24gNAorLyogNC1iaXQgbWFzayAqLworLkwwZjBmMGYwZjoKKwkubG9uZyAweDBmMGYwZjBmCisKKy50ZXh0CisKKy5hbGlnbiA4CisudHlwZSAgIF9fY2FtZWxsaWFfZW5jX2JsazE2LEBmdW5jdGlvbjsKKworX19jYW1lbGxpYV9lbmNfYmxrMTY6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcmF4OiB0ZW1wb3Jhcnkgc3RvcmFnZSwgMjU2IGJ5dGVzCisJICoJJXhtbTAuLiV4bW0xNTogMTYgcGxhaW50ZXh0IGJsb2NrcworCSAqIG91dHB1dDoKKwkgKgkleG1tMC4uJXhtbTE1OiAxNiBlbmNyeXB0ZWQgYmxvY2tzLCBvcmRlciBzd2FwcGVkOgorCSAqICAgICAgIDcsIDgsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKKwkgKi8KKworCWxlYXEgOCAqIDE2KCVyYXgpLCAlcmN4OworCisJaW5wYWNrMTZfcG9zdCgleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJCSAgICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAgICV4bW0xNSwgJXJheCwgJXJjeCk7CisKKwllbmNfcm91bmRzMTYoJXhtbTAsICV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tNSwgJXhtbTYsICV4bW03LAorCQkgICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAgJXhtbTE1LCAlcmF4LCAlcmN4LCAwKTsKKworCWZsczE2KCVyYXgsICV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkgICAgICAlcmN4LCAleG1tOCwgJXhtbTksICV4bW0xMCwgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LAorCSAgICAgICV4bW0xNSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgMCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgOCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgMTIpKENUWCkpOworCisJZW5jX3JvdW5kczE2KCV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkJICAgICAleG1tOCwgJXhtbTksICV4bW0xMCwgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LAorCQkgICAgICV4bW0xNSwgJXJheCwgJXJjeCwgOCk7CisKKwlmbHMxNiglcmF4LCAleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJICAgICAgJXJjeCwgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkgICAgICAleG1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoMTYpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMTYpICogOCkgKyAxMikoQ1RYKSk7CisKKwllbmNfcm91bmRzMTYoJXhtbTAsICV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tNSwgJXhtbTYsICV4bW03LAorCQkgICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAgJXhtbTE1LCAlcmF4LCAlcmN4LCAxNik7CisKKwltb3ZsICQyNCwgJXI4ZDsKKwljbXBsICQxMjgsIGtleV9iaXRsZW5ndGgoQ1RYKTsKKwlqbmUgLkxlbmNfbWF4MzI7CisKKy5MZW5jX2RvbmU6CisJLyogbG9hZCBDRCBmb3Igb3V0cHV0ICovCisJdm1vdmRxdSAwICogMTYoJXJjeCksICV4bW04OworCXZtb3ZkcXUgMSAqIDE2KCVyY3gpLCAleG1tOTsKKwl2bW92ZHF1IDIgKiAxNiglcmN4KSwgJXhtbTEwOworCXZtb3ZkcXUgMyAqIDE2KCVyY3gpLCAleG1tMTE7CisJdm1vdmRxdSA0ICogMTYoJXJjeCksICV4bW0xMjsKKwl2bW92ZHF1IDUgKiAxNiglcmN4KSwgJXhtbTEzOworCXZtb3ZkcXUgNiAqIDE2KCVyY3gpLCAleG1tMTQ7CisJdm1vdmRxdSA3ICogMTYoJXJjeCksICV4bW0xNTsKKworCW91dHVucGFjazE2KCV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkJICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAleG1tMTUsIChrZXlfdGFibGUpKENUWCwgJXI4LCA4KSwgKCVyYXgpLCAxICogMTYoJXJheCkpOworCisJcmV0OworCisuYWxpZ24gOAorLkxlbmNfbWF4MzI6CisJbW92bCAkMzIsICVyOGQ7CisKKwlmbHMxNiglcmF4LCAleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJICAgICAgJXJjeCwgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkgICAgICAleG1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDI0KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAxMikoQ1RYKSk7CisKKwllbmNfcm91bmRzMTYoJXhtbTAsICV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tNSwgJXhtbTYsICV4bW03LAorCQkgICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAgJXhtbTE1LCAlcmF4LCAlcmN4LCAyNCk7CisKKwlqbXAgLkxlbmNfZG9uZTsKKy5zaXplIF9fY2FtZWxsaWFfZW5jX2JsazE2LC4tX19jYW1lbGxpYV9lbmNfYmxrMTY7CisKKy5hbGlnbiA4CisudHlwZSAgIF9fY2FtZWxsaWFfZGVjX2JsazE2LEBmdW5jdGlvbjsKKworX19jYW1lbGxpYV9kZWNfYmxrMTY6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcmF4OiB0ZW1wb3Jhcnkgc3RvcmFnZSwgMjU2IGJ5dGVzCisJICoJJXI4ZDogMjQgZm9yIDE2IGJ5dGUga2V5LCAzMiBmb3IgbGFyZ2VyCisJICoJJXhtbTAuLiV4bW0xNTogMTYgZW5jcnlwdGVkIGJsb2NrcworCSAqIG91dHB1dDoKKwkgKgkleG1tMC4uJXhtbTE1OiAxNiBwbGFpbnRleHQgYmxvY2tzLCBvcmRlciBzd2FwcGVkOgorCSAqICAgICAgIDcsIDgsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKKwkgKi8KKworCWxlYXEgOCAqIDE2KCVyYXgpLCAlcmN4OworCisJaW5wYWNrMTZfcG9zdCgleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJCSAgICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAgICV4bW0xNSwgJXJheCwgJXJjeCk7CisKKwljbXBsICQzMiwgJXI4ZDsKKwlqZSAuTGRlY19tYXgzMjsKKworLkxkZWNfbWF4MjQ6CisJZGVjX3JvdW5kczE2KCV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkJICAgICAleG1tOCwgJXhtbTksICV4bW0xMCwgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LAorCQkgICAgICV4bW0xNSwgJXJheCwgJXJjeCwgMTYpOworCisJZmxzMTYoJXJheCwgJXhtbTAsICV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tNSwgJXhtbTYsICV4bW03LAorCSAgICAgICVyY3gsICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJICAgICAgJXhtbTE1LAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgOCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDEyKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgMCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDQpKENUWCkpOworCisJZGVjX3JvdW5kczE2KCV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkJICAgICAleG1tOCwgJXhtbTksICV4bW0xMCwgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LAorCQkgICAgICV4bW0xNSwgJXJheCwgJXJjeCwgOCk7CisKKwlmbHMxNiglcmF4LCAleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJICAgICAgJXJjeCwgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkgICAgICAleG1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoOCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoOCkgKiA4KSArIDEyKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDgpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDgpICogOCkgKyA0KShDVFgpKTsKKworCWRlY19yb3VuZHMxNigleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJCSAgICAgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkJICAgICAleG1tMTUsICVyYXgsICVyY3gsIDApOworCisJLyogbG9hZCBDRCBmb3Igb3V0cHV0ICovCisJdm1vdmRxdSAwICogMTYoJXJjeCksICV4bW04OworCXZtb3ZkcXUgMSAqIDE2KCVyY3gpLCAleG1tOTsKKwl2bW92ZHF1IDIgKiAxNiglcmN4KSwgJXhtbTEwOworCXZtb3ZkcXUgMyAqIDE2KCVyY3gpLCAleG1tMTE7CisJdm1vdmRxdSA0ICogMTYoJXJjeCksICV4bW0xMjsKKwl2bW92ZHF1IDUgKiAxNiglcmN4KSwgJXhtbTEzOworCXZtb3ZkcXUgNiAqIDE2KCVyY3gpLCAleG1tMTQ7CisJdm1vdmRxdSA3ICogMTYoJXJjeCksICV4bW0xNTsKKworCW91dHVucGFjazE2KCV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkJICAgICV4bW04LCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsCisJCSAgICAleG1tMTUsIChrZXlfdGFibGUpKENUWCksICglcmF4KSwgMSAqIDE2KCVyYXgpKTsKKworCXJldDsKKworLmFsaWduIDgKKy5MZGVjX21heDMyOgorCWRlY19yb3VuZHMxNigleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJCSAgICAgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkJICAgICAleG1tMTUsICVyYXgsICVyY3gsIDI0KTsKKworCWZsczE2KCVyYXgsICV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywKKwkgICAgICAlcmN4LCAleG1tOCwgJXhtbTksICV4bW0xMCwgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LAorCSAgICAgICV4bW0xNSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAxMikoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDApKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyA0KShDVFgpKTsKKworCWptcCAuTGRlY19tYXgyNDsKKy5zaXplIF9fY2FtZWxsaWFfZGVjX2JsazE2LC4tX19jYW1lbGxpYV9kZWNfYmxrMTY7CisKKyNkZWZpbmUgaW5jX2xlMTI4KHgsIG1pbnVzX29uZSwgdG1wKSBcCisJdnBjbXBlcXEgbWludXNfb25lLCB4LCB0bXA7IFwKKwl2cHN1YnEgbWludXNfb25lLCB4LCB4OyBcCisJdnBzbGxkcSAkOCwgdG1wLCB0bXA7IFwKKwl2cHN1YnEgdG1wLCB4LCB4OworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jdHJfZW5jCisudHlwZSAgIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jdHJfZW5jLEBmdW5jdGlvbjsKKworX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdiAoYmlnIGVuZGlhbiwgMTI4Yml0KQorCSAqLworCisJcHVzaHEgJXJicDsKKwltb3ZxICVyc3AsICVyYnA7CisKKwl2emVyb3VwcGVyOworCisJc3VicSAkKDE2ICogMTYpLCAlcnNwOworCWFuZHEgJH4zMSwgJXJzcDsKKwltb3ZxICVyc3AsICVyYXg7CisKKwl2bW92ZHFhIC5MYnN3YXAxMjhfbWFzayBSSVAsICV4bW0xNDsKKworCS8qIGxvYWQgSVYgYW5kIGJ5dGVzd2FwICovCisJdm1vdmRxdSAoJXJjeCksICV4bW0xNTsKKwl2bW92ZHF1ICV4bW0xNSwgMTUgKiAxNiglcmF4KTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTE1LCAleG1tMDsgLyogYmUgPT4gbGUgKi8KKworCXZwY21wZXFkICV4bW0xNSwgJXhtbTE1LCAleG1tMTU7CisJdnBzcmxkcSAkOCwgJXhtbTE1LCAleG1tMTU7IC8qIGxvdzogLTEsIGhpZ2g6IDAgKi8KKworCS8qIGNvbnN0cnVjdCBJVnMgKi8KKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0xMzsKKwl2bW92ZHF1ICV4bW0xMywgMTQgKiAxNiglcmF4KTsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0xMzsKKwl2bW92ZHF1ICV4bW0xMywgMTMgKiAxNiglcmF4KTsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0xMjsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0xMTsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0xMDsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW05OworCWluY19sZTEyOCgleG1tMCwgJXhtbTE1LCAleG1tMTMpOworCXZwc2h1ZmIgJXhtbTE0LCAleG1tMCwgJXhtbTg7CisJaW5jX2xlMTI4KCV4bW0wLCAleG1tMTUsICV4bW0xMyk7CisJdnBzaHVmYiAleG1tMTQsICV4bW0wLCAleG1tNzsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW02OworCWluY19sZTEyOCgleG1tMCwgJXhtbTE1LCAleG1tMTMpOworCXZwc2h1ZmIgJXhtbTE0LCAleG1tMCwgJXhtbTU7CisJaW5jX2xlMTI4KCV4bW0wLCAleG1tMTUsICV4bW0xMyk7CisJdnBzaHVmYiAleG1tMTQsICV4bW0wLCAleG1tNDsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2cHNodWZiICV4bW0xNCwgJXhtbTAsICV4bW0zOworCWluY19sZTEyOCgleG1tMCwgJXhtbTE1LCAleG1tMTMpOworCXZwc2h1ZmIgJXhtbTE0LCAleG1tMCwgJXhtbTI7CisJaW5jX2xlMTI4KCV4bW0wLCAleG1tMTUsICV4bW0xMyk7CisJdnBzaHVmYiAleG1tMTQsICV4bW0wLCAleG1tMTsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTEzKTsKKwl2bW92ZHFhICV4bW0wLCAleG1tMTM7CisJdnBzaHVmYiAleG1tMTQsICV4bW0wLCAleG1tMDsKKwlpbmNfbGUxMjgoJXhtbTEzLCAleG1tMTUsICV4bW0xNCk7CisJdnBzaHVmYiAuTGJzd2FwMTI4X21hc2sgUklQLCAleG1tMTMsICV4bW0xMzsgLyogbGUgPT4gYmUgKi8KKwl2bW92ZHF1ICV4bW0xMywgKCVyY3gpOworCisJLyogaW5wYWNrMTZfcHJlOiAqLworCXZtb3ZxIChrZXlfdGFibGUpKENUWCksICV4bW0xNTsKKwl2cHNodWZiIC5McGFja19ic3dhcCBSSVAsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0wLCAleG1tMTUsICV4bW0wOworCXZweG9yICV4bW0xLCAleG1tMTUsICV4bW0xOworCXZweG9yICV4bW0yLCAleG1tMTUsICV4bW0yOworCXZweG9yICV4bW0zLCAleG1tMTUsICV4bW0zOworCXZweG9yICV4bW00LCAleG1tMTUsICV4bW00OworCXZweG9yICV4bW01LCAleG1tMTUsICV4bW01OworCXZweG9yICV4bW02LCAleG1tMTUsICV4bW02OworCXZweG9yICV4bW03LCAleG1tMTUsICV4bW03OworCXZweG9yICV4bW04LCAleG1tMTUsICV4bW04OworCXZweG9yICV4bW05LCAleG1tMTUsICV4bW05OworCXZweG9yICV4bW0xMCwgJXhtbTE1LCAleG1tMTA7CisJdnB4b3IgJXhtbTExLCAleG1tMTUsICV4bW0xMTsKKwl2cHhvciAleG1tMTIsICV4bW0xNSwgJXhtbTEyOworCXZweG9yIDEzICogMTYoJXJheCksICV4bW0xNSwgJXhtbTEzOworCXZweG9yIDE0ICogMTYoJXJheCksICV4bW0xNSwgJXhtbTE0OworCXZweG9yIDE1ICogMTYoJXJheCksICV4bW0xNSwgJXhtbTE1OworCisJY2FsbCBfX2NhbWVsbGlhX2VuY19ibGsxNjsKKworCXZweG9yIDAgKiAxNiglcmR4KSwgJXhtbTcsICV4bW03OworCXZweG9yIDEgKiAxNiglcmR4KSwgJXhtbTYsICV4bW02OworCXZweG9yIDIgKiAxNiglcmR4KSwgJXhtbTUsICV4bW01OworCXZweG9yIDMgKiAxNiglcmR4KSwgJXhtbTQsICV4bW00OworCXZweG9yIDQgKiAxNiglcmR4KSwgJXhtbTMsICV4bW0zOworCXZweG9yIDUgKiAxNiglcmR4KSwgJXhtbTIsICV4bW0yOworCXZweG9yIDYgKiAxNiglcmR4KSwgJXhtbTEsICV4bW0xOworCXZweG9yIDcgKiAxNiglcmR4KSwgJXhtbTAsICV4bW0wOworCXZweG9yIDggKiAxNiglcmR4KSwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgOSAqIDE2KCVyZHgpLCAleG1tMTQsICV4bW0xNDsKKwl2cHhvciAxMCAqIDE2KCVyZHgpLCAleG1tMTMsICV4bW0xMzsKKwl2cHhvciAxMSAqIDE2KCVyZHgpLCAleG1tMTIsICV4bW0xMjsKKwl2cHhvciAxMiAqIDE2KCVyZHgpLCAleG1tMTEsICV4bW0xMTsKKwl2cHhvciAxMyAqIDE2KCVyZHgpLCAleG1tMTAsICV4bW0xMDsKKwl2cHhvciAxNCAqIDE2KCVyZHgpLCAleG1tOSwgJXhtbTk7CisJdnB4b3IgMTUgKiAxNiglcmR4KSwgJXhtbTgsICV4bW04OworCisJd3JpdGVfb3V0cHV0KCV4bW03LCAleG1tNiwgJXhtbTUsICV4bW00LCAleG1tMywgJXhtbTIsICV4bW0xLCAleG1tMCwKKwkJICAgICAleG1tMTUsICV4bW0xNCwgJXhtbTEzLCAleG1tMTIsICV4bW0xMSwgJXhtbTEwLCAleG1tOSwKKwkJICAgICAleG1tOCwgJXJzaSk7CisKKwl2emVyb2FsbDsKKworCWxlYXZlOworCXJldDsKKy5zaXplIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jdHJfZW5jLC4tX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2N0cl9lbmM7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NiY19kZWMKKy50eXBlICAgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NiY19kZWMsQGZ1bmN0aW9uOworCitfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY2JjX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoMTYgYmxvY2tzKQorCSAqCSVyZHg6IHNyYyAoMTYgYmxvY2tzKQorCSAqCSVyY3g6IGl2CisJICovCisKKwlwdXNocSAlcmJwOworCW1vdnEgJXJzcCwgJXJicDsKKworCXZ6ZXJvdXBwZXI7CisKKwltb3ZxICVyY3gsICVyOTsKKworCWNtcGwgJDEyOCwga2V5X2JpdGxlbmd0aChDVFgpOworCW1vdmwgJDMyLCAlcjhkOworCW1vdmwgJDI0LCAlZWF4OworCWNtb3ZlbCAlZWF4LCAlcjhkOyAvKiBtYXggKi8KKworCWlucGFjazE2X3ByZSgleG1tMCwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW01LCAleG1tNiwgJXhtbTcsCisJCSAgICAgJXhtbTgsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwKKwkJICAgICAleG1tMTUsICVyZHgsIChrZXlfdGFibGUpKENUWCwgJXI4LCA4KSk7CisKKwlzdWJxICQoMTYgKiAxNiksICVyc3A7CisJYW5kcSAkfjMxLCAlcnNwOworCW1vdnEgJXJzcCwgJXJheDsKKworCWNhbGwgX19jYW1lbGxpYV9kZWNfYmxrMTY7CisKKwkvKiBYT1Igb3V0cHV0IHdpdGggSVYgKi8KKwl2cHhvciAoJXI5KSwgJXhtbTcsICV4bW03OworCXZweG9yICgwICogMTYpKCVyZHgpLCAleG1tNiwgJXhtbTY7CisJdnB4b3IgKDEgKiAxNikoJXJkeCksICV4bW01LCAleG1tNTsKKwl2cHhvciAoMiAqIDE2KSglcmR4KSwgJXhtbTQsICV4bW00OworCXZweG9yICgzICogMTYpKCVyZHgpLCAleG1tMywgJXhtbTM7CisJdnB4b3IgKDQgKiAxNikoJXJkeCksICV4bW0yLCAleG1tMjsKKwl2cHhvciAoNSAqIDE2KSglcmR4KSwgJXhtbTEsICV4bW0xOworCXZweG9yICg2ICogMTYpKCVyZHgpLCAleG1tMCwgJXhtbTA7CisJdnB4b3IgKDcgKiAxNikoJXJkeCksICV4bW0xNSwgJXhtbTE1OworCXZweG9yICg4ICogMTYpKCVyZHgpLCAleG1tMTQsICV4bW0xNDsKKwl2cHhvciAoOSAqIDE2KSglcmR4KSwgJXhtbTEzLCAleG1tMTM7CisJdnB4b3IgKDEwICogMTYpKCVyZHgpLCAleG1tMTIsICV4bW0xMjsKKwl2cHhvciAoMTEgKiAxNikoJXJkeCksICV4bW0xMSwgJXhtbTExOworCXZweG9yICgxMiAqIDE2KSglcmR4KSwgJXhtbTEwLCAleG1tMTA7CisJdnB4b3IgKDEzICogMTYpKCVyZHgpLCAleG1tOSwgJXhtbTk7CisJdnB4b3IgKDE0ICogMTYpKCVyZHgpLCAleG1tOCwgJXhtbTg7CisJbW92cSAoMTUgKiAxNiArIDApKCVyZHgpLCAlcjEwOworCW1vdnEgKDE1ICogMTYgKyA4KSglcmR4KSwgJXIxMTsKKworCXdyaXRlX291dHB1dCgleG1tNywgJXhtbTYsICV4bW01LCAleG1tNCwgJXhtbTMsICV4bW0yLCAleG1tMSwgJXhtbTAsCisJCSAgICAgJXhtbTE1LCAleG1tMTQsICV4bW0xMywgJXhtbTEyLCAleG1tMTEsICV4bW0xMCwgJXhtbTksCisJCSAgICAgJXhtbTgsICVyc2kpOworCisJLyogc3RvcmUgbmV3IElWICovCisJbW92cSAlcjEwLCAoMCkoJXI5KTsKKwltb3ZxICVyMTEsICg4KSglcjkpOworCisJdnplcm9hbGw7CisKKwlsZWF2ZTsKKwlyZXQ7Cisuc2l6ZSBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY2JjX2RlYywuLV9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jYmNfZGVjOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jZmJfZGVjCisudHlwZSAgIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jZmJfZGVjLEBmdW5jdGlvbjsKKworX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NmYl9kZWM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJcHVzaHEgJXJicDsKKwltb3ZxICVyc3AsICVyYnA7CisKKwl2emVyb3VwcGVyOworCisJc3VicSAkKDE2ICogMTYpLCAlcnNwOworCWFuZHEgJH4zMSwgJXJzcDsKKwltb3ZxICVyc3AsICVyYXg7CisKKwkvKiBpbnBhY2sxNl9wcmU6ICovCisJdm1vdnEgKGtleV90YWJsZSkoQ1RYKSwgJXhtbTA7CisJdnBzaHVmYiAuTHBhY2tfYnN3YXAgUklQLCAleG1tMCwgJXhtbTA7CisJdnB4b3IgKCVyY3gpLCAleG1tMCwgJXhtbTE1OworCXZtb3ZkcXUgMTUgKiAxNiglcmR4KSwgJXhtbTE7CisJdm1vdmRxdSAleG1tMSwgKCVyY3gpOyAvKiBzdG9yZSBuZXcgSVYgKi8KKwl2cHhvciAwICogMTYoJXJkeCksICV4bW0wLCAleG1tMTQ7CisJdnB4b3IgMSAqIDE2KCVyZHgpLCAleG1tMCwgJXhtbTEzOworCXZweG9yIDIgKiAxNiglcmR4KSwgJXhtbTAsICV4bW0xMjsKKwl2cHhvciAzICogMTYoJXJkeCksICV4bW0wLCAleG1tMTE7CisJdnB4b3IgNCAqIDE2KCVyZHgpLCAleG1tMCwgJXhtbTEwOworCXZweG9yIDUgKiAxNiglcmR4KSwgJXhtbTAsICV4bW05OworCXZweG9yIDYgKiAxNiglcmR4KSwgJXhtbTAsICV4bW04OworCXZweG9yIDcgKiAxNiglcmR4KSwgJXhtbTAsICV4bW03OworCXZweG9yIDggKiAxNiglcmR4KSwgJXhtbTAsICV4bW02OworCXZweG9yIDkgKiAxNiglcmR4KSwgJXhtbTAsICV4bW01OworCXZweG9yIDEwICogMTYoJXJkeCksICV4bW0wLCAleG1tNDsKKwl2cHhvciAxMSAqIDE2KCVyZHgpLCAleG1tMCwgJXhtbTM7CisJdnB4b3IgMTIgKiAxNiglcmR4KSwgJXhtbTAsICV4bW0yOworCXZweG9yIDEzICogMTYoJXJkeCksICV4bW0wLCAleG1tMTsKKwl2cHhvciAxNCAqIDE2KCVyZHgpLCAleG1tMCwgJXhtbTA7CisKKwljYWxsIF9fY2FtZWxsaWFfZW5jX2JsazE2OworCisJdnB4b3IgMCAqIDE2KCVyZHgpLCAleG1tNywgJXhtbTc7CisJdnB4b3IgMSAqIDE2KCVyZHgpLCAleG1tNiwgJXhtbTY7CisJdnB4b3IgMiAqIDE2KCVyZHgpLCAleG1tNSwgJXhtbTU7CisJdnB4b3IgMyAqIDE2KCVyZHgpLCAleG1tNCwgJXhtbTQ7CisJdnB4b3IgNCAqIDE2KCVyZHgpLCAleG1tMywgJXhtbTM7CisJdnB4b3IgNSAqIDE2KCVyZHgpLCAleG1tMiwgJXhtbTI7CisJdnB4b3IgNiAqIDE2KCVyZHgpLCAleG1tMSwgJXhtbTE7CisJdnB4b3IgNyAqIDE2KCVyZHgpLCAleG1tMCwgJXhtbTA7CisJdnB4b3IgOCAqIDE2KCVyZHgpLCAleG1tMTUsICV4bW0xNTsKKwl2cHhvciA5ICogMTYoJXJkeCksICV4bW0xNCwgJXhtbTE0OworCXZweG9yIDEwICogMTYoJXJkeCksICV4bW0xMywgJXhtbTEzOworCXZweG9yIDExICogMTYoJXJkeCksICV4bW0xMiwgJXhtbTEyOworCXZweG9yIDEyICogMTYoJXJkeCksICV4bW0xMSwgJXhtbTExOworCXZweG9yIDEzICogMTYoJXJkeCksICV4bW0xMCwgJXhtbTEwOworCXZweG9yIDE0ICogMTYoJXJkeCksICV4bW05LCAleG1tOTsKKwl2cHhvciAxNSAqIDE2KCVyZHgpLCAleG1tOCwgJXhtbTg7CisKKwl3cml0ZV9vdXRwdXQoJXhtbTcsICV4bW02LCAleG1tNSwgJXhtbTQsICV4bW0zLCAleG1tMiwgJXhtbTEsICV4bW0wLAorCQkgICAgICV4bW0xNSwgJXhtbTE0LCAleG1tMTMsICV4bW0xMiwgJXhtbTExLCAleG1tMTAsICV4bW05LAorCQkgICAgICV4bW04LCAlcnNpKTsKKworCXZ6ZXJvYWxsOworCisJbGVhdmU7CisJcmV0OworLnNpemUgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NmYl9kZWMsLi1fZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY2ZiX2RlYzsKKworLyoKKyAqIElOOgorICogIGFiOiA2NC1iaXQgQUIgc3RhdGUKKyAqICBjZDogNjQtYml0IENEIHN0YXRlCisgKi8KKyNkZWZpbmUgY2FtZWxsaWFfZihhYiwgeCwgdDAsIHQxLCB0MiwgdDMsIHQ0LCBpbnZfc2hpZnRfcm93LCBzYm94NG1hc2ssIFwKKwkJICAgXzBmMGYwZjBmbWFzaywgcHJlX3MxbG9fbWFzaywgcHJlX3MxaGlfbWFzaywga2V5KSBcCisJdm1vdnEga2V5LCB0MDsgXAorCXZweG9yIHgsIHgsIHQzOyBcCisJXAorCXZweG9yIGFiLCB0MCwgeDsgXAorCVwKKwkvKiBcCisJICogUy1mdW5jdGlvbiB3aXRoIEFFUyBzdWJieXRlcyBcCisJICovIFwKKwlcCisJLyogaW5wdXQgcm90YXRpb24gZm9yIHNib3g0ICg8PDwgMSkgKi8gXAorCXZwYW5kIHgsIHNib3g0bWFzaywgdDA7IFwKKwl2cGFuZG4geCwgc2JveDRtYXNrLCB4OyBcCisJdnBhZGR3IHQwLCB0MCwgdDE7IFwKKwl2cHNybHcgJDcsIHQwLCB0MDsgXAorCXZwb3IgdDAsIHQxLCB0MDsgXAorCXZwYW5kIHNib3g0bWFzaywgdDAsIHQwOyBcCisJdnBvciB0MCwgeCwgeDsgXAorCVwKKwl2bW92ZHFhIC5McG9zdF90Zl9sb19zMSBSSVAsIHQwOyBcCisJdm1vdmRxYSAuTHBvc3RfdGZfaGlfczEgUklQLCB0MTsgXAorCVwKKwkvKiBwcmVmaWx0ZXIgc2JveGVzICovIFwKKwlmaWx0ZXJfOGJpdCh4LCBwcmVfczFsb19tYXNrLCBwcmVfczFoaV9tYXNrLCBfMGYwZjBmMGZtYXNrLCB0Mik7IFwKKwlcCisJLyogQUVTIHN1YmJ5dGVzICsgQUVTIHNoaWZ0IHJvd3MgKyBBRVMgaW52IHNoaWZ0IHJvd3MgKi8gXAorCXZhZXNlbmNsYXN0IHQzLCB4LCB4OyBcCisJXAorCS8qIHBvc3RmaWx0ZXIgc2JveGVzICovIFwKKwlmaWx0ZXJfOGJpdCh4LCB0MCwgdDEsIF8wZjBmMGYwZm1hc2ssIHQyKTsgXAorCVwKKwkvKiBvdXRwdXQgcm90YXRpb24gZm9yIHNib3gyICg8PDwgMSkgKi8gXAorCS8qIG91dHB1dCByb3RhdGlvbiBmb3Igc2JveDMgKD4+PiAxKSAqLyBcCisJdnBzaHVmYiBpbnZfc2hpZnRfcm93LCB4LCB0MTsgXAorCXZwc2h1ZmIgLkxzcDAwNDQ0NDA0NDQwNDQ0MDRtYXNrIFJJUCwgeCwgdDQ7IFwKKwl2cHNodWZiIC5Mc3AxMTEwMTExMDEwMDExMTEwbWFzayBSSVAsIHgsIHg7IFwKKwl2cGFkZGIgdDEsIHQxLCB0MjsgXAorCXZwc3JsdyAkNywgdDEsIHQwOyBcCisJdnBzbGx3ICQ3LCB0MSwgdDM7IFwKKwl2cG9yIHQwLCB0MiwgdDA7IFwKKwl2cHNybHcgJDEsIHQxLCB0MTsgXAorCXZwc2h1ZmIgLkxzcDAyMjIwMjIyMjIwMDAyMjJtYXNrIFJJUCwgdDAsIHQwOyBcCisJdnBvciB0MSwgdDMsIHQxOyBcCisJXAorCXZweG9yIHgsIHQ0LCB0NDsgXAorCXZwc2h1ZmIgLkxzcDMwMzMzMDMzMDMzMDMwMzNtYXNrIFJJUCwgdDEsIHQxOyBcCisJdnB4b3IgdDQsIHQwLCB0MDsgXAorCXZweG9yIHQxLCB0MCwgdDA7IFwKKwl2cHNybGRxICQ4LCB0MCwgeDsgXAorCXZweG9yIHQwLCB4LCB4OworCisjZGVmaW5lIHZlY19yb2wxMjgoaW4sIG91dCwgbnJvbCwgdDApIFwKKwl2cHNodWZkICQweDRlLCBpbiwgb3V0OyBcCisJdnBzbGxxICQobnJvbCksIGluLCB0MDsgXAorCXZwc3JscSAkKDY0LShucm9sKSksIG91dCwgb3V0OyBcCisJdnBhZGRkIHQwLCBvdXQsIG91dDsKKworI2RlZmluZSB2ZWNfcm9yMTI4KGluLCBvdXQsIG5yb3IsIHQwKSBcCisJdnBzaHVmZCAkMHg0ZSwgaW4sIG91dDsgXAorCXZwc3JscSAkKG5yb3IpLCBpbiwgdDA7IFwKKwl2cHNsbHEgJCg2NC0obnJvcikpLCBvdXQsIG91dDsgXAorCXZwYWRkZCB0MCwgb3V0LCBvdXQ7CisKKy5kYXRhCisKKy5hbGlnbiAxNgorLkxpbnZfc2hpZnRfcm93X2FuZF91bnBja2xidzoKKwkuYnl0ZSAweDAwLCAweGZmLCAweDBkLCAweGZmLCAweDBhLCAweGZmLCAweDA3LCAweGZmCisJLmJ5dGUgMHgwNCwgMHhmZiwgMHgwMSwgMHhmZiwgMHgwZSwgMHhmZiwgMHgwYiwgMHhmZgorLkxzcDAwNDQ0NDA0NDQwNDQ0MDRtYXNrOgorCS5sb25nIDB4ZmZmZjA0MDQsIDB4MDQwNGZmMDQ7CisJLmxvbmcgMHgwZDBkZmYwZCwgMHgwZDBkZmYwZDsKKy5Mc3AxMTEwMTExMDEwMDExMTEwbWFzazoKKwkubG9uZyAweDAwMDAwMGZmLCAweDAwMDAwMGZmOworCS5sb25nIDB4MGJmZmZmMGIsIDB4MGIwYjBiZmY7CisuTHNwMDIyMjAyMjIyMjAwMDIyMm1hc2s6CisJLmxvbmcgMHhmZjA2MDYwNiwgMHhmZjA2MDYwNjsKKwkubG9uZyAweDBjMGNmZmZmLCAweGZmMGMwYzBjOworLkxzcDMwMzMzMDMzMDMzMDMwMzNtYXNrOgorCS5sb25nIDB4MDRmZjA0MDQsIDB4MDRmZjA0MDQ7CisJLmxvbmcgMHhmZjBhMGFmZiwgMHgwYWZmMGEwYTsKKy5Mc2JveDRfaW5wdXRfbWFzazoKKwkuYnl0ZSAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwOworLkxzaWdtYTE6CisJLmxvbmcgMHgzQkNDOTA4QiwgMHhBMDlFNjY3RjsKKy5Mc2lnbWEyOgorCS5sb25nIDB4NENBQTczQjIsIDB4QjY3QUU4NTg7CisuTHNpZ21hMzoKKwkubG9uZyAweEU5NEY4MkJFLCAweEM2RUYzNzJGOworLkxzaWdtYTQ6CisJLmxvbmcgMHhGMUQzNkYxQywgMHg1NEZGNTNBNTsKKy5Mc2lnbWE1OgorCS5sb25nIDB4REU2ODJEMUQsIDB4MTBFNTI3RkE7CisuTHNpZ21hNjoKKwkubG9uZyAweEIzRTZDMUZELCAweEIwNTY4OEMyOworCisudGV4dAorCisuYWxpZ24gOAorLnR5cGUgIF9fY2FtZWxsaWFfYXZ4X3NldHVwMTI4LEBmdW5jdGlvbjsKK19fY2FtZWxsaWFfYXZ4X3NldHVwMTI4OgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYOyBzdWJrZXkgc3RvcmFnZSBhdCBrZXlfdGFibGUoQ1RYKQorCSAqCSV4bW0wOiBrZXkKKwkgKi8KKyNkZWZpbmUgY21sbF9zdWIobiwgY3R4KSAoa2V5X3RhYmxlKygobikqOCkpKGN0eCkKKyNkZWZpbmUgS0wxMjggJXhtbTAKKyNkZWZpbmUgS0ExMjggJXhtbTIKKworCXZwc2h1ZmIgLkxic3dhcDEyOF9tYXNrIFJJUCwgS0wxMjgsIEtMMTI4OworCisJdm1vdmRxYSAuTGludl9zaGlmdF9yb3dfYW5kX3VucGNrbGJ3IFJJUCwgJXhtbTExOworCXZtb3ZxIC5Mc2JveDRfaW5wdXRfbWFzayBSSVAsICV4bW0xMjsKKwl2YnJvYWRjYXN0c3MgLkwwZjBmMGYwZiBSSVAsICV4bW0xMzsKKwl2bW92ZHFhIC5McHJlX3RmX2xvX3MxIFJJUCwgJXhtbTE0OworCXZtb3ZkcWEgLkxwcmVfdGZfaGlfczEgUklQLCAleG1tMTU7CisKKwkvKgorCSAqIEdlbmVyYXRlIEtBCisJICovCisJdnBzcmxkcSAkOCwgS0wxMjgsICV4bW0yOworCXZtb3ZkcWEgS0wxMjgsICV4bW0zOworCXZwc2xsZHEgJDgsICV4bW0zLCAleG1tMzsKKwl2cHNybGRxICQ4LCAleG1tMywgJXhtbTM7CisKKwljYW1lbGxpYV9mKCV4bW0yLCAleG1tNCwgJXhtbTEsCisJCSAgICV4bW01LCAleG1tNiwgJXhtbTcsICV4bW04LAorCQkgICAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsICV4bW0xNSwgLkxzaWdtYTEgUklQKTsKKwl2cHhvciAleG1tNCwgJXhtbTMsICV4bW0zOworCWNhbWVsbGlhX2YoJXhtbTMsICV4bW0yLCAleG1tMSwKKwkJICAgJXhtbTUsICV4bW02LCAleG1tNywgJXhtbTgsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hMiBSSVApOworCWNhbWVsbGlhX2YoJXhtbTIsICV4bW0zLCAleG1tMSwKKwkJICAgJXhtbTUsICV4bW02LCAleG1tNywgJXhtbTgsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hMyBSSVApOworCXZweG9yICV4bW00LCAleG1tMywgJXhtbTM7CisJY2FtZWxsaWFfZigleG1tMywgJXhtbTQsICV4bW0xLAorCQkgICAleG1tNSwgJXhtbTYsICV4bW03LCAleG1tOCwKKwkJICAgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LCAleG1tMTUsIC5Mc2lnbWE0IFJJUCk7CisKKwl2cHNsbGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnB4b3IgJXhtbTQsICV4bW0yLCAleG1tMjsKKwl2cHNybGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnBzbGxkcSAkOCwgJXhtbTIsIEtBMTI4OworCXZwb3IgJXhtbTMsIEtBMTI4LCBLQTEyODsKKworICAgICAgICAvKgorICAgICAgICAgKiBHZW5lcmF0ZSBzdWJrZXlzCisgICAgICAgICAqLworCXZtb3ZkcXUgS0ExMjgsIGNtbGxfc3ViKDI0LCBDVFgpOworCXZlY19yb2wxMjgoS0wxMjgsICV4bW0zLCAxNSwgJXhtbTE1KTsKKwl2ZWNfcm9sMTI4KEtBMTI4LCAleG1tNCwgMTUsICV4bW0xNSk7CisJdmVjX3JvbDEyOChLQTEyOCwgJXhtbTUsIDMwLCAleG1tMTUpOworCXZlY19yb2wxMjgoS0wxMjgsICV4bW02LCA0NSwgJXhtbTE1KTsKKwl2ZWNfcm9sMTI4KEtBMTI4LCAleG1tNywgNDUsICV4bW0xNSk7CisJdmVjX3JvbDEyOChLTDEyOCwgJXhtbTgsIDYwLCAleG1tMTUpOworCXZlY19yb2wxMjgoS0ExMjgsICV4bW05LCA2MCwgJXhtbTE1KTsKKwl2ZWNfcm9yMTI4KEtMMTI4LCAleG1tMTAsIDEyOC03NywgJXhtbTE1KTsKKworCS8qIGFic29yYiBrdzIgdG8gb3RoZXIgc3Via2V5cyAqLworCXZwc2xsZHEgJDgsIEtMMTI4LCAleG1tMTU7CisJdnBzcmxkcSAkOCwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgJXhtbTE1LCBLQTEyOCwgS0ExMjg7CisJdnB4b3IgJXhtbTE1LCAleG1tMywgJXhtbTM7CisJdnB4b3IgJXhtbTE1LCAleG1tNCwgJXhtbTQ7CisKKwkvKiBzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3Vicig5KTsgKi8KKwl2cGFuZG4gJXhtbTE1LCAleG1tNSwgJXhtbTEzOworCXZwc2xsZHEgJDEyLCAleG1tMTMsICV4bW0xMzsKKwl2cHNybGRxICQ4LCAleG1tMTMsICV4bW0xMzsKKwl2cHhvciAleG1tMTMsICV4bW0xNSwgJXhtbTE1OworCS8qIGR3ID0gc3VibCgxKSAmIHN1YmwoOSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tMTUsICV4bW01LCAleG1tMTQ7CisJdnBzbGxkICQxLCAleG1tMTQsICV4bW0xMTsKKwl2cHNybGQgJDMxLCAleG1tMTQsICV4bW0xNDsKKwl2cGFkZGQgJXhtbTExLCAleG1tMTQsICV4bW0xNDsKKwl2cHNsbGRxICQ4LCAleG1tMTQsICV4bW0xNDsKKwl2cHNybGRxICQxMiwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKworCXZweG9yICV4bW0xNSwgJXhtbTYsICV4bW02OworCXZweG9yICV4bW0xNSwgJXhtbTgsICV4bW04OworCXZweG9yICV4bW0xNSwgJXhtbTksICV4bW05OworCisJLyogc3VibCgxKSBePSBzdWJyKDEpICYgfnN1YnIoMTcpOyAqLworCXZwYW5kbiAleG1tMTUsICV4bW0xMCwgJXhtbTEzOworCXZwc2xsZHEgJDEyLCAleG1tMTMsICV4bW0xMzsKKwl2cHNybGRxICQ4LCAleG1tMTMsICV4bW0xMzsKKwl2cHhvciAleG1tMTMsICV4bW0xNSwgJXhtbTE1OworCS8qIGR3ID0gc3VibCgxKSAmIHN1YmwoMTcpLCBzdWJyKDEpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tMTAsICV4bW0xNDsKKwl2cHNsbGQgJDEsICV4bW0xNCwgJXhtbTExOworCXZwc3JsZCAkMzEsICV4bW0xNCwgJXhtbTE0OworCXZwYWRkZCAleG1tMTEsICV4bW0xNCwgJXhtbTE0OworCXZwc2xsZHEgJDgsICV4bW0xNCwgJXhtbTE0OworCXZwc3JsZHEgJDEyLCAleG1tMTQsICV4bW0xNDsKKwl2cHhvciAleG1tMTQsICV4bW0xNSwgJXhtbTE1OworCisJdnBzaHVmZCAkMHgxYiwgS0wxMjgsIEtMMTI4OworCXZwc2h1ZmQgJDB4MWIsIEtBMTI4LCBLQTEyODsKKwl2cHNodWZkICQweDFiLCAleG1tMywgJXhtbTM7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTQsICV4bW00OworCXZwc2h1ZmQgJDB4MWIsICV4bW01LCAleG1tNTsKKwl2cHNodWZkICQweDFiLCAleG1tNiwgJXhtbTY7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTcsICV4bW03OworCXZwc2h1ZmQgJDB4MWIsICV4bW04LCAleG1tODsKKwl2cHNodWZkICQweDFiLCAleG1tOSwgJXhtbTk7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTEwLCAleG1tMTA7CisKKwl2bW92ZHF1IEtMMTI4LCBjbWxsX3N1YigwLCBDVFgpOworCXZwc2h1ZmQgJDB4MWIsIEtMMTI4LCBLTDEyODsKKwl2bW92ZHF1IEtBMTI4LCBjbWxsX3N1YigyLCBDVFgpOworCXZtb3ZkcXUgJXhtbTMsIGNtbGxfc3ViKDQsIENUWCk7CisJdm1vdmRxdSAleG1tNCwgY21sbF9zdWIoNiwgQ1RYKTsKKwl2bW92ZHF1ICV4bW01LCBjbWxsX3N1Yig4LCBDVFgpOworCXZtb3ZkcXUgJXhtbTYsIGNtbGxfc3ViKDEwLCBDVFgpOworCXZwc3JsZHEgJDgsICV4bW04LCAleG1tODsKKwl2bW92cSAleG1tNywgY21sbF9zdWIoMTIsIENUWCk7CisJdm1vdnEgJXhtbTgsIGNtbGxfc3ViKDEzLCBDVFgpOworCXZtb3ZkcXUgJXhtbTksIGNtbGxfc3ViKDE0LCBDVFgpOworCXZtb3ZkcXUgJXhtbTEwLCBjbWxsX3N1YigxNiwgQ1RYKTsKKworCXZtb3ZkcXUgY21sbF9zdWIoMjQsIENUWCksIEtBMTI4OworCisJdmVjX3JvcjEyOChLTDEyOCwgJXhtbTMsIDEyOCAtIDk0LCAleG1tNyk7CisJdmVjX3JvcjEyOChLQTEyOCwgJXhtbTQsIDEyOCAtIDk0LCAleG1tNyk7CisJdmVjX3JvcjEyOChLTDEyOCwgJXhtbTUsIDEyOCAtIDExMSwgJXhtbTcpOworCXZlY19yb3IxMjgoS0ExMjgsICV4bW02LCAxMjggLSAxMTEsICV4bW03KTsKKworCXZweG9yICV4bW0xNSwgJXhtbTMsICV4bW0zOworCXZweG9yICV4bW0xNSwgJXhtbTQsICV4bW00OworCXZweG9yICV4bW0xNSwgJXhtbTUsICV4bW01OworCXZwc2xsZHEgJDgsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0xNSwgJXhtbTYsICV4bW02OworCisJLyogYWJzb3JiIGt3NCB0byBvdGhlciBzdWJrZXlzICovCisJdnBzbGxkcSAkOCwgJXhtbTYsICV4bW0xNTsKKwl2cHhvciAleG1tMTUsICV4bW01LCAleG1tNTsKKwl2cHhvciAleG1tMTUsICV4bW00LCAleG1tNDsKKwl2cHhvciAleG1tMTUsICV4bW0zLCAleG1tMzsKKworCS8qIHN1YmwoMjUpIF49IHN1YnIoMjUpICYgfnN1YnIoMTYpOyAqLworCXZwc2h1ZmQgJDB4MWIsIGNtbGxfc3ViKDE2LCBDVFgpLCAleG1tMTA7CisJdnBhbmRuICV4bW0xNSwgJXhtbTEwLCAleG1tMTM7CisJdnBzbGxkcSAkNCwgJXhtbTEzLCAleG1tMTM7CisJdnB4b3IgJXhtbTEzLCAleG1tMTUsICV4bW0xNTsKKwkvKiBkdyA9IHN1YmwoMjUpICYgc3VibCgxNiksIHN1YnIoMjUpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tMTAsICV4bW0xNDsKKwl2cHNsbGQgJDEsICV4bW0xNCwgJXhtbTExOworCXZwc3JsZCAkMzEsICV4bW0xNCwgJXhtbTE0OworCXZwYWRkZCAleG1tMTEsICV4bW0xNCwgJXhtbTE0OworCXZwc3JsZHEgJDEyLCAleG1tMTQsICV4bW0xNDsKKwl2cHNsbGRxICQ4LCAleG1tMTQsICV4bW0xNDsKKwl2cHhvciAleG1tMTQsICV4bW0xNSwgJXhtbTE1OworCisJdnBzaHVmZCAkMHgxYiwgJXhtbTMsICV4bW0zOworCXZwc2h1ZmQgJDB4MWIsICV4bW00LCAleG1tNDsKKwl2cHNodWZkICQweDFiLCAleG1tNSwgJXhtbTU7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTYsICV4bW02OworCisJdm1vdmRxdSAleG1tMywgY21sbF9zdWIoMTgsIENUWCk7CisJdm1vdmRxdSAleG1tNCwgY21sbF9zdWIoMjAsIENUWCk7CisJdm1vdmRxdSAleG1tNSwgY21sbF9zdWIoMjIsIENUWCk7CisJdm1vdmRxdSAleG1tNiwgY21sbF9zdWIoMjQsIENUWCk7CisKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigxNCwgQ1RYKSwgJXhtbTM7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoMTIsIENUWCksICV4bW00OworCXZwc2h1ZmQgJDB4MWIsIGNtbGxfc3ViKDEwLCBDVFgpLCAleG1tNTsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1Yig4LCBDVFgpLCAleG1tNjsKKworCXZweG9yICV4bW0xNSwgJXhtbTMsICV4bW0zOworCXZweG9yICV4bW0xNSwgJXhtbTQsICV4bW00OworCXZweG9yICV4bW0xNSwgJXhtbTUsICV4bW01OworCisJLyogc3VibCgyNSkgXj0gc3VicigyNSkgJiB+c3Vicig4KTsgKi8KKwl2cGFuZG4gJXhtbTE1LCAleG1tNiwgJXhtbTEzOworCXZwc2xsZHEgJDQsICV4bW0xMywgJXhtbTEzOworCXZweG9yICV4bW0xMywgJXhtbTE1LCAleG1tMTU7CisJLyogZHcgPSBzdWJsKDI1KSAmIHN1YmwoOCksIHN1YnIoMjUpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tNiwgJXhtbTE0OworCXZwc2xsZCAkMSwgJXhtbTE0LCAleG1tMTE7CisJdnBzcmxkICQzMSwgJXhtbTE0LCAleG1tMTQ7CisJdnBhZGRkICV4bW0xMSwgJXhtbTE0LCAleG1tMTQ7CisJdnBzcmxkcSAkMTIsICV4bW0xNCwgJXhtbTE0OworCXZwc2xsZHEgJDgsICV4bW0xNCwgJXhtbTE0OworCXZweG9yICV4bW0xNCwgJXhtbTE1LCAleG1tMTU7CisKKwl2cHNodWZkICQweDFiLCAleG1tMywgJXhtbTM7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTQsICV4bW00OworCXZwc2h1ZmQgJDB4MWIsICV4bW01LCAleG1tNTsKKworCXZtb3ZkcXUgJXhtbTMsIGNtbGxfc3ViKDE0LCBDVFgpOworCXZtb3ZkcXUgJXhtbTQsIGNtbGxfc3ViKDEyLCBDVFgpOworCXZtb3ZkcXUgJXhtbTUsIGNtbGxfc3ViKDEwLCBDVFgpOworCisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoNiwgQ1RYKSwgJXhtbTY7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoNCwgQ1RYKSwgJXhtbTQ7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoMiwgQ1RYKSwgJXhtbTI7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoMCwgQ1RYKSwgJXhtbTA7CisKKwl2cHhvciAleG1tMTUsICV4bW02LCAleG1tNjsKKwl2cHhvciAleG1tMTUsICV4bW00LCAleG1tNDsKKwl2cHhvciAleG1tMTUsICV4bW0yLCAleG1tMjsKKwl2cHhvciAleG1tMTUsICV4bW0wLCAleG1tMDsKKworCXZwc2h1ZmQgJDB4MWIsICV4bW02LCAleG1tNjsKKwl2cHNodWZkICQweDFiLCAleG1tNCwgJXhtbTQ7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTIsICV4bW0yOworCXZwc2h1ZmQgJDB4MWIsICV4bW0wLCAleG1tMDsKKworCXZwc3JsZHEgJDgsICV4bW0yLCAleG1tMzsKKwl2cHNybGRxICQ4LCAleG1tNCwgJXhtbTU7CisJdnBzcmxkcSAkOCwgJXhtbTYsICV4bW03OworCisgICAgICAgIC8qCisJICoga2V5IFhPUiBpcyBlbmQgb2YgRi1mdW5jdGlvbi4KKwkgKi8KKwl2cHhvciAleG1tMiwgJXhtbTAsICV4bW0wOworCXZweG9yICV4bW00LCAleG1tMiwgJXhtbTI7CisKKwl2bW92cSAleG1tMCwgY21sbF9zdWIoMCwgQ1RYKTsKKwl2bW92cSAleG1tMywgY21sbF9zdWIoMiwgQ1RYKTsKKwl2cHhvciAleG1tNSwgJXhtbTMsICV4bW0zOworCXZweG9yICV4bW02LCAleG1tNCwgJXhtbTQ7CisJdnB4b3IgJXhtbTcsICV4bW01LCAleG1tNTsKKwl2bW92cSAleG1tMiwgY21sbF9zdWIoMywgQ1RYKTsKKwl2bW92cSAleG1tMywgY21sbF9zdWIoNCwgQ1RYKTsKKwl2bW92cSAleG1tNCwgY21sbF9zdWIoNSwgQ1RYKTsKKwl2bW92cSAleG1tNSwgY21sbF9zdWIoNiwgQ1RYKTsKKworCXZtb3ZxIGNtbGxfc3ViKDcsIENUWCksICV4bW03OworCXZtb3ZxIGNtbGxfc3ViKDgsIENUWCksICV4bW04OworCXZtb3ZxIGNtbGxfc3ViKDksIENUWCksICV4bW05OworCXZtb3ZxIGNtbGxfc3ViKDEwLCBDVFgpLCAleG1tMTA7CisJLyogdGwgPSBzdWJsKDEwKSBeIChzdWJyKDEwKSAmIH5zdWJyKDgpKTsgKi8KKwl2cGFuZG4gJXhtbTEwLCAleG1tOCwgJXhtbTE1OworCXZwc3JsZHEgJDQsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0xNSwgJXhtbTEwLCAleG1tMDsKKwkvKiBkdyA9IHRsICYgc3VibCg4KSwgdHIgPSBzdWJyKDEwKSBeIENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTgsICV4bW0wLCAleG1tMTU7CisJdnBzbGxkICQxLCAleG1tMTUsICV4bW0xNDsKKwl2cHNybGQgJDMxLCAleG1tMTUsICV4bW0xNTsKKwl2cGFkZGQgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKwl2cHNsbGRxICQxMiwgJXhtbTE1LCAleG1tMTU7CisJdnBzcmxkcSAkOCwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgJXhtbTE1LCAleG1tMCwgJXhtbTA7CisKKwl2cHhvciAleG1tMCwgJXhtbTYsICV4bW02OworCXZtb3ZxICV4bW02LCBjbWxsX3N1Yig3LCBDVFgpOworCisJdm1vdnEgY21sbF9zdWIoMTEsIENUWCksICV4bW0xMTsKKwl2bW92cSBjbWxsX3N1YigxMiwgQ1RYKSwgJXhtbTEyOworCXZtb3ZxIGNtbGxfc3ViKDEzLCBDVFgpLCAleG1tMTM7CisJdm1vdnEgY21sbF9zdWIoMTQsIENUWCksICV4bW0xNDsKKwl2bW92cSBjbWxsX3N1YigxNSwgQ1RYKSwgJXhtbTE1OworCS8qIHRsID0gc3VibCg3KSBeIChzdWJyKDcpICYgfnN1YnIoOSkpOyAqLworCXZwYW5kbiAleG1tNywgJXhtbTksICV4bW0xOworCXZwc3JsZHEgJDQsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTcsICV4bW0wOworCS8qIGR3ID0gdGwgJiBzdWJsKDkpLCB0ciA9IHN1YnIoNykgXiBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW05LCAleG1tMCwgJXhtbTE7CisJdnBzbGxkICQxLCAleG1tMSwgJXhtbTI7CisJdnBzcmxkICQzMSwgJXhtbTEsICV4bW0xOworCXZwYWRkZCAleG1tMiwgJXhtbTEsICV4bW0xOworCXZwc2xsZHEgJDEyLCAleG1tMSwgJXhtbTE7CisJdnBzcmxkcSAkOCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tMCwgJXhtbTA7CisKKwl2cHhvciAleG1tMTEsICV4bW0wLCAleG1tMDsKKwl2cHhvciAleG1tMTIsICV4bW0xMCwgJXhtbTEwOworCXZweG9yICV4bW0xMywgJXhtbTExLCAleG1tMTE7CisJdnB4b3IgJXhtbTE0LCAleG1tMTIsICV4bW0xMjsKKwl2cHhvciAleG1tMTUsICV4bW0xMywgJXhtbTEzOworCXZtb3ZxICV4bW0wLCBjbWxsX3N1YigxMCwgQ1RYKTsKKwl2bW92cSAleG1tMTAsIGNtbGxfc3ViKDExLCBDVFgpOworCXZtb3ZxICV4bW0xMSwgY21sbF9zdWIoMTIsIENUWCk7CisJdm1vdnEgJXhtbTEyLCBjbWxsX3N1YigxMywgQ1RYKTsKKwl2bW92cSAleG1tMTMsIGNtbGxfc3ViKDE0LCBDVFgpOworCisJdm1vdnEgY21sbF9zdWIoMTYsIENUWCksICV4bW02OworCXZtb3ZxIGNtbGxfc3ViKDE3LCBDVFgpLCAleG1tNzsKKwl2bW92cSBjbWxsX3N1YigxOCwgQ1RYKSwgJXhtbTg7CisJdm1vdnEgY21sbF9zdWIoMTksIENUWCksICV4bW05OworCXZtb3ZxIGNtbGxfc3ViKDIwLCBDVFgpLCAleG1tMTA7CisJLyogdGwgPSBzdWJsKDE4KSBeIChzdWJyKDE4KSAmIH5zdWJyKDE2KSk7ICovCisJdnBhbmRuICV4bW04LCAleG1tNiwgJXhtbTE7CisJdnBzcmxkcSAkNCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tOCwgJXhtbTA7CisJLyogZHcgPSB0bCAmIHN1YmwoMTYpLCB0ciA9IHN1YnIoMTgpIF4gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tNiwgJXhtbTAsICV4bW0xOworCXZwc2xsZCAkMSwgJXhtbTEsICV4bW0yOworCXZwc3JsZCAkMzEsICV4bW0xLCAleG1tMTsKKwl2cGFkZGQgJXhtbTIsICV4bW0xLCAleG1tMTsKKwl2cHNsbGRxICQxMiwgJXhtbTEsICV4bW0xOworCXZwc3JsZHEgJDgsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTAsICV4bW0wOworCisJdnB4b3IgJXhtbTE0LCAleG1tMCwgJXhtbTA7CisJdm1vdnEgJXhtbTAsIGNtbGxfc3ViKDE1LCBDVFgpOworCisJLyogdGwgPSBzdWJsKDE1KSBeIChzdWJyKDE1KSAmIH5zdWJyKDE3KSk7ICovCisJdnBhbmRuICV4bW0xNSwgJXhtbTcsICV4bW0xOworCXZwc3JsZHEgJDQsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTE1LCAleG1tMDsKKwkvKiBkdyA9IHRsICYgc3VibCgxNyksIHRyID0gc3VicigxNSkgXiBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW03LCAleG1tMCwgJXhtbTE7CisJdnBzbGxkICQxLCAleG1tMSwgJXhtbTI7CisJdnBzcmxkICQzMSwgJXhtbTEsICV4bW0xOworCXZwYWRkZCAleG1tMiwgJXhtbTEsICV4bW0xOworCXZwc2xsZHEgJDEyLCAleG1tMSwgJXhtbTE7CisJdnBzcmxkcSAkOCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tMCwgJXhtbTA7CisKKwl2bW92cSBjbWxsX3N1YigyMSwgQ1RYKSwgJXhtbTE7CisJdm1vdnEgY21sbF9zdWIoMjIsIENUWCksICV4bW0yOworCXZtb3ZxIGNtbGxfc3ViKDIzLCBDVFgpLCAleG1tMzsKKwl2bW92cSBjbWxsX3N1YigyNCwgQ1RYKSwgJXhtbTQ7CisKKwl2cHhvciAleG1tOSwgJXhtbTAsICV4bW0wOworCXZweG9yICV4bW0xMCwgJXhtbTgsICV4bW04OworCXZweG9yICV4bW0xLCAleG1tOSwgJXhtbTk7CisJdnB4b3IgJXhtbTIsICV4bW0xMCwgJXhtbTEwOworCXZweG9yICV4bW0zLCAleG1tMSwgJXhtbTE7CisJdnB4b3IgJXhtbTQsICV4bW0zLCAleG1tMzsKKworCXZtb3ZxICV4bW0wLCBjbWxsX3N1YigxOCwgQ1RYKTsKKwl2bW92cSAleG1tOCwgY21sbF9zdWIoMTksIENUWCk7CisJdm1vdnEgJXhtbTksIGNtbGxfc3ViKDIwLCBDVFgpOworCXZtb3ZxICV4bW0xMCwgY21sbF9zdWIoMjEsIENUWCk7CisJdm1vdnEgJXhtbTEsIGNtbGxfc3ViKDIyLCBDVFgpOworCXZtb3ZxICV4bW0yLCBjbWxsX3N1YigyMywgQ1RYKTsKKwl2bW92cSAleG1tMywgY21sbF9zdWIoMjQsIENUWCk7CisKKwkvKiBrdzIgYW5kIGt3NCBhcmUgdW51c2VkIG5vdy4gKi8KKwltb3ZxICQwLCBjbWxsX3N1YigxLCBDVFgpOworCW1vdnEgJDAsIGNtbGxfc3ViKDI1LCBDVFgpOworCisJdnplcm9hbGw7CisKKwlyZXQ7Cisuc2l6ZSBfX2NhbWVsbGlhX2F2eF9zZXR1cDEyOCwuLV9fY2FtZWxsaWFfYXZ4X3NldHVwMTI4OworCisuYWxpZ24gOAorLnR5cGUgIF9fY2FtZWxsaWFfYXZ4X3NldHVwMjU2LEBmdW5jdGlvbjsKKworX19jYW1lbGxpYV9hdnhfc2V0dXAyNTY6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFg7IHN1YmtleSBzdG9yYWdlIGF0IGtleV90YWJsZShDVFgpCisJICoJJXhtbTAgJiAleG1tMToga2V5CisJICovCisjZGVmaW5lIEtMMTI4ICV4bW0wCisjZGVmaW5lIEtSMTI4ICV4bW0xCisjZGVmaW5lIEtBMTI4ICV4bW0yCisjZGVmaW5lIEtCMTI4ICV4bW0zCisKKwl2cHNodWZiIC5MYnN3YXAxMjhfbWFzayBSSVAsIEtMMTI4LCBLTDEyODsKKwl2cHNodWZiIC5MYnN3YXAxMjhfbWFzayBSSVAsIEtSMTI4LCBLUjEyODsKKworCXZtb3ZkcWEgLkxpbnZfc2hpZnRfcm93X2FuZF91bnBja2xidyBSSVAsICV4bW0xMTsKKwl2bW92cSAuTHNib3g0X2lucHV0X21hc2sgUklQLCAleG1tMTI7CisJdmJyb2FkY2FzdHNzIC5MMGYwZjBmMGYgUklQLCAleG1tMTM7CisJdm1vdmRxYSAuTHByZV90Zl9sb19zMSBSSVAsICV4bW0xNDsKKwl2bW92ZHFhIC5McHJlX3RmX2hpX3MxIFJJUCwgJXhtbTE1OworCisJLyoKKwkgKiBHZW5lcmF0ZSBLQQorCSAqLworCXZweG9yIEtMMTI4LCBLUjEyOCwgJXhtbTM7CisJdnBzcmxkcSAkOCwgS1IxMjgsICV4bW02OworCXZwc3JsZHEgJDgsICV4bW0zLCAleG1tMjsKKwl2cHNsbGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnBzcmxkcSAkOCwgJXhtbTMsICV4bW0zOworCisJY2FtZWxsaWFfZigleG1tMiwgJXhtbTQsICV4bW01LAorCQkgICAleG1tNywgJXhtbTgsICV4bW05LCAleG1tMTAsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hMSBSSVApOworCXZweG9yICV4bW00LCAleG1tMywgJXhtbTM7CisJY2FtZWxsaWFfZigleG1tMywgJXhtbTIsICV4bW01LAorCQkgICAleG1tNywgJXhtbTgsICV4bW05LCAleG1tMTAsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hMiBSSVApOworCXZweG9yICV4bW02LCAleG1tMiwgJXhtbTI7CisJY2FtZWxsaWFfZigleG1tMiwgJXhtbTMsICV4bW01LAorCQkgICAleG1tNywgJXhtbTgsICV4bW05LCAleG1tMTAsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hMyBSSVApOworCXZweG9yICV4bW00LCAleG1tMywgJXhtbTM7CisJdnB4b3IgS1IxMjgsICV4bW0zLCAleG1tMzsKKwljYW1lbGxpYV9mKCV4bW0zLCAleG1tNCwgJXhtbTUsCisJCSAgICV4bW03LCAleG1tOCwgJXhtbTksICV4bW0xMCwKKwkJICAgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LCAleG1tMTUsIC5Mc2lnbWE0IFJJUCk7CisKKwl2cHNsbGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnB4b3IgJXhtbTQsICV4bW0yLCAleG1tMjsKKwl2cHNybGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnBzbGxkcSAkOCwgJXhtbTIsIEtBMTI4OworCXZwb3IgJXhtbTMsIEtBMTI4LCBLQTEyODsKKworCS8qCisJICogR2VuZXJhdGUgS0IKKwkgKi8KKwl2cHhvciBLQTEyOCwgS1IxMjgsICV4bW0zOworCXZwc3JsZHEgJDgsICV4bW0zLCAleG1tNDsKKwl2cHNsbGRxICQ4LCAleG1tMywgJXhtbTM7CisJdnBzcmxkcSAkOCwgJXhtbTMsICV4bW0zOworCisJY2FtZWxsaWFfZigleG1tNCwgJXhtbTUsICV4bW02LAorCQkgICAleG1tNywgJXhtbTgsICV4bW05LCAleG1tMTAsCisJCSAgICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgJXhtbTE1LCAuTHNpZ21hNSBSSVApOworCXZweG9yICV4bW01LCAleG1tMywgJXhtbTM7CisKKwljYW1lbGxpYV9mKCV4bW0zLCAleG1tNSwgJXhtbTYsCisJCSAgICV4bW03LCAleG1tOCwgJXhtbTksICV4bW0xMCwKKwkJICAgJXhtbTExLCAleG1tMTIsICV4bW0xMywgJXhtbTE0LCAleG1tMTUsIC5Mc2lnbWE2IFJJUCk7CisJdnBzbGxkcSAkOCwgJXhtbTMsICV4bW0zOworCXZweG9yICV4bW01LCAleG1tNCwgJXhtbTQ7CisJdnBzcmxkcSAkOCwgJXhtbTMsICV4bW0zOworCXZwc2xsZHEgJDgsICV4bW00LCAleG1tNDsKKwl2cG9yICV4bW0zLCAleG1tNCwgS0IxMjg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogR2VuZXJhdGUgc3Via2V5cworICAgICAgICAgKi8KKwl2bW92ZHF1IEtCMTI4LCBjbWxsX3N1YigzMiwgQ1RYKTsKKwl2ZWNfcm9sMTI4KEtSMTI4LCAleG1tNCwgMTUsICV4bW0xNSk7CisJdmVjX3JvbDEyOChLQTEyOCwgJXhtbTUsIDE1LCAleG1tMTUpOworCXZlY19yb2wxMjgoS1IxMjgsICV4bW02LCAzMCwgJXhtbTE1KTsKKwl2ZWNfcm9sMTI4KEtCMTI4LCAleG1tNywgMzAsICV4bW0xNSk7CisJdmVjX3JvbDEyOChLTDEyOCwgJXhtbTgsIDQ1LCAleG1tMTUpOworCXZlY19yb2wxMjgoS0ExMjgsICV4bW05LCA0NSwgJXhtbTE1KTsKKwl2ZWNfcm9sMTI4KEtMMTI4LCAleG1tMTAsIDYwLCAleG1tMTUpOworCXZlY19yb2wxMjgoS1IxMjgsICV4bW0xMSwgNjAsICV4bW0xNSk7CisJdmVjX3JvbDEyOChLQjEyOCwgJXhtbTEyLCA2MCwgJXhtbTE1KTsKKworCS8qIGFic29yYiBrdzIgdG8gb3RoZXIgc3Via2V5cyAqLworCXZwc2xsZHEgJDgsIEtMMTI4LCAleG1tMTU7CisJdnBzcmxkcSAkOCwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgJXhtbTE1LCBLQjEyOCwgS0IxMjg7CisJdnB4b3IgJXhtbTE1LCAleG1tNCwgJXhtbTQ7CisJdnB4b3IgJXhtbTE1LCAleG1tNSwgJXhtbTU7CisKKwkvKiBzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3Vicig5KTsgKi8KKwl2cGFuZG4gJXhtbTE1LCAleG1tNiwgJXhtbTEzOworCXZwc2xsZHEgJDEyLCAleG1tMTMsICV4bW0xMzsKKwl2cHNybGRxICQ4LCAleG1tMTMsICV4bW0xMzsKKwl2cHhvciAleG1tMTMsICV4bW0xNSwgJXhtbTE1OworCS8qIGR3ID0gc3VibCgxKSAmIHN1YmwoOSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tMTUsICV4bW02LCAleG1tMTQ7CisJdnBzbGxkICQxLCAleG1tMTQsICV4bW0xMzsKKwl2cHNybGQgJDMxLCAleG1tMTQsICV4bW0xNDsKKwl2cGFkZGQgJXhtbTEzLCAleG1tMTQsICV4bW0xNDsKKwl2cHNsbGRxICQ4LCAleG1tMTQsICV4bW0xNDsKKwl2cHNybGRxICQxMiwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKworCXZweG9yICV4bW0xNSwgJXhtbTcsICV4bW03OworCXZweG9yICV4bW0xNSwgJXhtbTgsICV4bW04OworCXZweG9yICV4bW0xNSwgJXhtbTksICV4bW05OworCisJdnBzaHVmZCAkMHgxYiwgS0wxMjgsIEtMMTI4OworCXZwc2h1ZmQgJDB4MWIsIEtCMTI4LCBLQjEyODsKKwl2cHNodWZkICQweDFiLCAleG1tNCwgJXhtbTQ7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTUsICV4bW01OworCXZwc2h1ZmQgJDB4MWIsICV4bW02LCAleG1tNjsKKwl2cHNodWZkICQweDFiLCAleG1tNywgJXhtbTc7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTgsICV4bW04OworCXZwc2h1ZmQgJDB4MWIsICV4bW05LCAleG1tOTsKKworCXZtb3ZkcXUgS0wxMjgsIGNtbGxfc3ViKDAsIENUWCk7CisJdnBzaHVmZCAkMHgxYiwgS0wxMjgsIEtMMTI4OworCXZtb3ZkcXUgS0IxMjgsIGNtbGxfc3ViKDIsIENUWCk7CisJdm1vdmRxdSAleG1tNCwgY21sbF9zdWIoNCwgQ1RYKTsKKwl2bW92ZHF1ICV4bW01LCBjbWxsX3N1Yig2LCBDVFgpOworCXZtb3ZkcXUgJXhtbTYsIGNtbGxfc3ViKDgsIENUWCk7CisJdm1vdmRxdSAleG1tNywgY21sbF9zdWIoMTAsIENUWCk7CisJdm1vdmRxdSAleG1tOCwgY21sbF9zdWIoMTIsIENUWCk7CisJdm1vdmRxdSAleG1tOSwgY21sbF9zdWIoMTQsIENUWCk7CisKKwl2bW92ZHF1IGNtbGxfc3ViKDMyLCBDVFgpLCBLQjEyODsKKworCS8qIHN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDE3KTsgKi8KKwl2cGFuZG4gJXhtbTE1LCAleG1tMTAsICV4bW0xMzsKKwl2cHNsbGRxICQxMiwgJXhtbTEzLCAleG1tMTM7CisJdnBzcmxkcSAkOCwgJXhtbTEzLCAleG1tMTM7CisJdnB4b3IgJXhtbTEzLCAleG1tMTUsICV4bW0xNTsKKwkvKiBkdyA9IHN1YmwoMSkgJiBzdWJsKDE3KSwgc3VicigxKSBePSBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW0xNSwgJXhtbTEwLCAleG1tMTQ7CisJdnBzbGxkICQxLCAleG1tMTQsICV4bW0xMzsKKwl2cHNybGQgJDMxLCAleG1tMTQsICV4bW0xNDsKKwl2cGFkZGQgJXhtbTEzLCAleG1tMTQsICV4bW0xNDsKKwl2cHNsbGRxICQ4LCAleG1tMTQsICV4bW0xNDsKKwl2cHNybGRxICQxMiwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKworCXZweG9yICV4bW0xNSwgJXhtbTExLCAleG1tMTE7CisJdnB4b3IgJXhtbTE1LCAleG1tMTIsICV4bW0xMjsKKworCXZlY19yb3IxMjgoS0wxMjgsICV4bW00LCAxMjgtNzcsICV4bW0xNCk7CisJdmVjX3JvcjEyOChLQTEyOCwgJXhtbTUsIDEyOC03NywgJXhtbTE0KTsKKwl2ZWNfcm9yMTI4KEtSMTI4LCAleG1tNiwgMTI4LTk0LCAleG1tMTQpOworCXZlY19yb3IxMjgoS0ExMjgsICV4bW03LCAxMjgtOTQsICV4bW0xNCk7CisJdmVjX3JvcjEyOChLTDEyOCwgJXhtbTgsIDEyOC0xMTEsICV4bW0xNCk7CisJdmVjX3JvcjEyOChLQjEyOCwgJXhtbTksIDEyOC0xMTEsICV4bW0xNCk7CisKKwl2cHhvciAleG1tMTUsICV4bW00LCAleG1tNDsKKworCXZwc2h1ZmQgJDB4MWIsICV4bW0xMCwgJXhtbTEwOworCXZwc2h1ZmQgJDB4MWIsICV4bW0xMSwgJXhtbTExOworCXZwc2h1ZmQgJDB4MWIsICV4bW0xMiwgJXhtbTEyOworCXZwc2h1ZmQgJDB4MWIsICV4bW00LCAleG1tNDsKKworCXZtb3ZkcXUgJXhtbTEwLCBjbWxsX3N1YigxNiwgQ1RYKTsKKwl2bW92ZHF1ICV4bW0xMSwgY21sbF9zdWIoMTgsIENUWCk7CisJdm1vdmRxdSAleG1tMTIsIGNtbGxfc3ViKDIwLCBDVFgpOworCXZtb3ZkcXUgJXhtbTQsIGNtbGxfc3ViKDIyLCBDVFgpOworCisJLyogc3VibCgxKSBePSBzdWJyKDEpICYgfnN1YnIoMjUpOyAqLworCXZwYW5kbiAleG1tMTUsICV4bW01LCAleG1tMTM7CisJdnBzbGxkcSAkMTIsICV4bW0xMywgJXhtbTEzOworCXZwc3JsZHEgJDgsICV4bW0xMywgJXhtbTEzOworCXZweG9yICV4bW0xMywgJXhtbTE1LCAleG1tMTU7CisJLyogZHcgPSBzdWJsKDEpICYgc3VibCgyNSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tMTUsICV4bW01LCAleG1tMTQ7CisJdnBzbGxkICQxLCAleG1tMTQsICV4bW0xMzsKKwl2cHNybGQgJDMxLCAleG1tMTQsICV4bW0xNDsKKwl2cGFkZGQgJXhtbTEzLCAleG1tMTQsICV4bW0xNDsKKwl2cHNsbGRxICQ4LCAleG1tMTQsICV4bW0xNDsKKwl2cHNybGRxICQxMiwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKworCXZweG9yICV4bW0xNSwgJXhtbTYsICV4bW02OworCXZweG9yICV4bW0xNSwgJXhtbTcsICV4bW03OworCXZweG9yICV4bW0xNSwgJXhtbTgsICV4bW04OworCXZwc2xsZHEgJDgsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0xNSwgJXhtbTksICV4bW05OworCisJLyogYWJzb3JiIGt3NCB0byBvdGhlciBzdWJrZXlzICovCisJdnBzbGxkcSAkOCwgJXhtbTksICV4bW0xNTsKKwl2cHhvciAleG1tMTUsICV4bW04LCAleG1tODsKKwl2cHhvciAleG1tMTUsICV4bW03LCAleG1tNzsKKwl2cHhvciAleG1tMTUsICV4bW02LCAleG1tNjsKKworCS8qIHN1YmwoMzMpIF49IHN1YnIoMzMpICYgfnN1YnIoMjQpOyAqLworCXZwYW5kbiAleG1tMTUsICV4bW01LCAleG1tMTQ7CisJdnBzbGxkcSAkNCwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKwkvKiBkdyA9IHN1YmwoMzMpICYgc3VibCgyNCksIHN1YnIoMzMpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tNSwgJXhtbTE0OworCXZwc2xsZCAkMSwgJXhtbTE0LCAleG1tMTM7CisJdnBzcmxkICQzMSwgJXhtbTE0LCAleG1tMTQ7CisJdnBhZGRkICV4bW0xMywgJXhtbTE0LCAleG1tMTQ7CisJdnBzcmxkcSAkMTIsICV4bW0xNCwgJXhtbTE0OworCXZwc2xsZHEgJDgsICV4bW0xNCwgJXhtbTE0OworCXZweG9yICV4bW0xNCwgJXhtbTE1LCAleG1tMTU7CisKKwl2cHNodWZkICQweDFiLCAleG1tNSwgJXhtbTU7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTYsICV4bW02OworCXZwc2h1ZmQgJDB4MWIsICV4bW03LCAleG1tNzsKKwl2cHNodWZkICQweDFiLCAleG1tOCwgJXhtbTg7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTksICV4bW05OworCisJdm1vdmRxdSAleG1tNSwgY21sbF9zdWIoMjQsIENUWCk7CisJdm1vdmRxdSAleG1tNiwgY21sbF9zdWIoMjYsIENUWCk7CisJdm1vdmRxdSAleG1tNywgY21sbF9zdWIoMjgsIENUWCk7CisJdm1vdmRxdSAleG1tOCwgY21sbF9zdWIoMzAsIENUWCk7CisJdm1vdmRxdSAleG1tOSwgY21sbF9zdWIoMzIsIENUWCk7CisKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigyMiwgQ1RYKSwgJXhtbTA7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoMjAsIENUWCksICV4bW0xOworCXZwc2h1ZmQgJDB4MWIsIGNtbGxfc3ViKDE4LCBDVFgpLCAleG1tMjsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigxNiwgQ1RYKSwgJXhtbTM7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoMTQsIENUWCksICV4bW00OworCXZwc2h1ZmQgJDB4MWIsIGNtbGxfc3ViKDEyLCBDVFgpLCAleG1tNTsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigxMCwgQ1RYKSwgJXhtbTY7CisJdnBzaHVmZCAkMHgxYiwgY21sbF9zdWIoOCwgQ1RYKSwgJXhtbTc7CisKKwl2cHhvciAleG1tMTUsICV4bW0wLCAleG1tMDsKKwl2cHhvciAleG1tMTUsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMTUsICV4bW0yLCAleG1tMjsKKworCS8qIHN1YmwoMzMpIF49IHN1YnIoMzMpICYgfnN1YnIoMjQpOyAqLworCXZwYW5kbiAleG1tMTUsICV4bW0zLCAleG1tMTQ7CisJdnBzbGxkcSAkNCwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKwkvKiBkdyA9IHN1YmwoMzMpICYgc3VibCgyNCksIHN1YnIoMzMpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tMywgJXhtbTE0OworCXZwc2xsZCAkMSwgJXhtbTE0LCAleG1tMTM7CisJdnBzcmxkICQzMSwgJXhtbTE0LCAleG1tMTQ7CisJdnBhZGRkICV4bW0xMywgJXhtbTE0LCAleG1tMTQ7CisJdnBzcmxkcSAkMTIsICV4bW0xNCwgJXhtbTE0OworCXZwc2xsZHEgJDgsICV4bW0xNCwgJXhtbTE0OworCXZweG9yICV4bW0xNCwgJXhtbTE1LCAleG1tMTU7CisKKwl2cHhvciAleG1tMTUsICV4bW00LCAleG1tNDsKKwl2cHhvciAleG1tMTUsICV4bW01LCAleG1tNTsKKwl2cHhvciAleG1tMTUsICV4bW02LCAleG1tNjsKKworCXZwc2h1ZmQgJDB4MWIsICV4bW0wLCAleG1tMDsKKwl2cHNodWZkICQweDFiLCAleG1tMSwgJXhtbTE7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTIsICV4bW0yOworCXZwc2h1ZmQgJDB4MWIsICV4bW00LCAleG1tNDsKKwl2cHNodWZkICQweDFiLCAleG1tNSwgJXhtbTU7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTYsICV4bW02OworCisJdm1vdmRxdSAleG1tMCwgY21sbF9zdWIoMjIsIENUWCk7CisJdm1vdmRxdSAleG1tMSwgY21sbF9zdWIoMjAsIENUWCk7CisJdm1vdmRxdSAleG1tMiwgY21sbF9zdWIoMTgsIENUWCk7CisJdm1vdmRxdSAleG1tNCwgY21sbF9zdWIoMTQsIENUWCk7CisJdm1vdmRxdSAleG1tNSwgY21sbF9zdWIoMTIsIENUWCk7CisJdm1vdmRxdSAleG1tNiwgY21sbF9zdWIoMTAsIENUWCk7CisKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1Yig2LCBDVFgpLCAleG1tNjsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1Yig0LCBDVFgpLCAleG1tNDsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigyLCBDVFgpLCAleG1tMjsKKwl2cHNodWZkICQweDFiLCBjbWxsX3N1YigwLCBDVFgpLCAleG1tMDsKKworCS8qIHN1YmwoMzMpIF49IHN1YnIoMzMpICYgfnN1YnIoMjQpOyAqLworCXZwYW5kbiAleG1tMTUsICV4bW03LCAleG1tMTQ7CisJdnBzbGxkcSAkNCwgJXhtbTE0LCAleG1tMTQ7CisJdnB4b3IgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKwkvKiBkdyA9IHN1YmwoMzMpICYgc3VibCgyNCksIHN1YnIoMzMpIF49IENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTE1LCAleG1tNywgJXhtbTE0OworCXZwc2xsZCAkMSwgJXhtbTE0LCAleG1tMTM7CisJdnBzcmxkICQzMSwgJXhtbTE0LCAleG1tMTQ7CisJdnBhZGRkICV4bW0xMywgJXhtbTE0LCAleG1tMTQ7CisJdnBzcmxkcSAkMTIsICV4bW0xNCwgJXhtbTE0OworCXZwc2xsZHEgJDgsICV4bW0xNCwgJXhtbTE0OworCXZweG9yICV4bW0xNCwgJXhtbTE1LCAleG1tMTU7CisKKwl2cHhvciAleG1tMTUsICV4bW02LCAleG1tNjsKKwl2cHhvciAleG1tMTUsICV4bW00LCAleG1tNDsKKwl2cHhvciAleG1tMTUsICV4bW0yLCAleG1tMjsKKwl2cHhvciAleG1tMTUsICV4bW0wLCAleG1tMDsKKworCXZwc2h1ZmQgJDB4MWIsICV4bW02LCAleG1tNjsKKwl2cHNodWZkICQweDFiLCAleG1tNCwgJXhtbTQ7CisJdnBzaHVmZCAkMHgxYiwgJXhtbTIsICV4bW0yOworCXZwc2h1ZmQgJDB4MWIsICV4bW0wLCAleG1tMDsKKworCXZwc3JsZHEgJDgsICV4bW0yLCAleG1tMzsKKwl2cHNybGRxICQ4LCAleG1tNCwgJXhtbTU7CisJdnBzcmxkcSAkOCwgJXhtbTYsICV4bW03OworCisgICAgICAgIC8qCisJICoga2V5IFhPUiBpcyBlbmQgb2YgRi1mdW5jdGlvbi4KKwkgKi8KKwl2cHhvciAleG1tMiwgJXhtbTAsICV4bW0wOworCXZweG9yICV4bW00LCAleG1tMiwgJXhtbTI7CisKKwl2bW92cSAleG1tMCwgY21sbF9zdWIoMCwgQ1RYKTsKKwl2bW92cSAleG1tMywgY21sbF9zdWIoMiwgQ1RYKTsKKwl2cHhvciAleG1tNSwgJXhtbTMsICV4bW0zOworCXZweG9yICV4bW02LCAleG1tNCwgJXhtbTQ7CisJdnB4b3IgJXhtbTcsICV4bW01LCAleG1tNTsKKwl2bW92cSAleG1tMiwgY21sbF9zdWIoMywgQ1RYKTsKKwl2bW92cSAleG1tMywgY21sbF9zdWIoNCwgQ1RYKTsKKwl2bW92cSAleG1tNCwgY21sbF9zdWIoNSwgQ1RYKTsKKwl2bW92cSAleG1tNSwgY21sbF9zdWIoNiwgQ1RYKTsKKworCXZtb3ZxIGNtbGxfc3ViKDcsIENUWCksICV4bW03OworCXZtb3ZxIGNtbGxfc3ViKDgsIENUWCksICV4bW04OworCXZtb3ZxIGNtbGxfc3ViKDksIENUWCksICV4bW05OworCXZtb3ZxIGNtbGxfc3ViKDEwLCBDVFgpLCAleG1tMTA7CisJLyogdGwgPSBzdWJsKDEwKSBeIChzdWJyKDEwKSAmIH5zdWJyKDgpKTsgKi8KKwl2cGFuZG4gJXhtbTEwLCAleG1tOCwgJXhtbTE1OworCXZwc3JsZHEgJDQsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0xNSwgJXhtbTEwLCAleG1tMDsKKwkvKiBkdyA9IHRsICYgc3VibCg4KSwgdHIgPSBzdWJyKDEwKSBeIENBTUVMTElBX1JMMShkdyk7ICovCisJdnBhbmQgJXhtbTgsICV4bW0wLCAleG1tMTU7CisJdnBzbGxkICQxLCAleG1tMTUsICV4bW0xNDsKKwl2cHNybGQgJDMxLCAleG1tMTUsICV4bW0xNTsKKwl2cGFkZGQgJXhtbTE0LCAleG1tMTUsICV4bW0xNTsKKwl2cHNsbGRxICQxMiwgJXhtbTE1LCAleG1tMTU7CisJdnBzcmxkcSAkOCwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgJXhtbTE1LCAleG1tMCwgJXhtbTA7CisKKwl2cHhvciAleG1tMCwgJXhtbTYsICV4bW02OworCXZtb3ZxICV4bW02LCBjbWxsX3N1Yig3LCBDVFgpOworCisJdm1vdnEgY21sbF9zdWIoMTEsIENUWCksICV4bW0xMTsKKwl2bW92cSBjbWxsX3N1YigxMiwgQ1RYKSwgJXhtbTEyOworCXZtb3ZxIGNtbGxfc3ViKDEzLCBDVFgpLCAleG1tMTM7CisJdm1vdnEgY21sbF9zdWIoMTQsIENUWCksICV4bW0xNDsKKwl2bW92cSBjbWxsX3N1YigxNSwgQ1RYKSwgJXhtbTE1OworCS8qIHRsID0gc3VibCg3KSBeIChzdWJyKDcpICYgfnN1YnIoOSkpOyAqLworCXZwYW5kbiAleG1tNywgJXhtbTksICV4bW0xOworCXZwc3JsZHEgJDQsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTcsICV4bW0wOworCS8qIGR3ID0gdGwgJiBzdWJsKDkpLCB0ciA9IHN1YnIoNykgXiBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW05LCAleG1tMCwgJXhtbTE7CisJdnBzbGxkICQxLCAleG1tMSwgJXhtbTI7CisJdnBzcmxkICQzMSwgJXhtbTEsICV4bW0xOworCXZwYWRkZCAleG1tMiwgJXhtbTEsICV4bW0xOworCXZwc2xsZHEgJDEyLCAleG1tMSwgJXhtbTE7CisJdnBzcmxkcSAkOCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tMCwgJXhtbTA7CisKKwl2cHhvciAleG1tMTEsICV4bW0wLCAleG1tMDsKKwl2cHhvciAleG1tMTIsICV4bW0xMCwgJXhtbTEwOworCXZweG9yICV4bW0xMywgJXhtbTExLCAleG1tMTE7CisJdnB4b3IgJXhtbTE0LCAleG1tMTIsICV4bW0xMjsKKwl2cHhvciAleG1tMTUsICV4bW0xMywgJXhtbTEzOworCXZtb3ZxICV4bW0wLCBjbWxsX3N1YigxMCwgQ1RYKTsKKwl2bW92cSAleG1tMTAsIGNtbGxfc3ViKDExLCBDVFgpOworCXZtb3ZxICV4bW0xMSwgY21sbF9zdWIoMTIsIENUWCk7CisJdm1vdnEgJXhtbTEyLCBjbWxsX3N1YigxMywgQ1RYKTsKKwl2bW92cSAleG1tMTMsIGNtbGxfc3ViKDE0LCBDVFgpOworCisJdm1vdnEgY21sbF9zdWIoMTYsIENUWCksICV4bW02OworCXZtb3ZxIGNtbGxfc3ViKDE3LCBDVFgpLCAleG1tNzsKKwl2bW92cSBjbWxsX3N1YigxOCwgQ1RYKSwgJXhtbTg7CisJdm1vdnEgY21sbF9zdWIoMTksIENUWCksICV4bW05OworCXZtb3ZxIGNtbGxfc3ViKDIwLCBDVFgpLCAleG1tMTA7CisJLyogdGwgPSBzdWJsKDE4KSBeIChzdWJyKDE4KSAmIH5zdWJyKDE2KSk7ICovCisJdnBhbmRuICV4bW04LCAleG1tNiwgJXhtbTE7CisJdnBzcmxkcSAkNCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tOCwgJXhtbTA7CisJLyogZHcgPSB0bCAmIHN1YmwoMTYpLCB0ciA9IHN1YnIoMTgpIF4gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tNiwgJXhtbTAsICV4bW0xOworCXZwc2xsZCAkMSwgJXhtbTEsICV4bW0yOworCXZwc3JsZCAkMzEsICV4bW0xLCAleG1tMTsKKwl2cGFkZGQgJXhtbTIsICV4bW0xLCAleG1tMTsKKwl2cHNsbGRxICQxMiwgJXhtbTEsICV4bW0xOworCXZwc3JsZHEgJDgsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTAsICV4bW0wOworCisJdnB4b3IgJXhtbTE0LCAleG1tMCwgJXhtbTA7CisJdm1vdnEgJXhtbTAsIGNtbGxfc3ViKDE1LCBDVFgpOworCisJLyogdGwgPSBzdWJsKDE1KSBeIChzdWJyKDE1KSAmIH5zdWJyKDE3KSk7ICovCisJdnBhbmRuICV4bW0xNSwgJXhtbTcsICV4bW0xOworCXZwc3JsZHEgJDQsICV4bW0xLCAleG1tMTsKKwl2cHhvciAleG1tMSwgJXhtbTE1LCAleG1tMDsKKwkvKiBkdyA9IHRsICYgc3VibCgxNyksIHRyID0gc3VicigxNSkgXiBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW03LCAleG1tMCwgJXhtbTE7CisJdnBzbGxkICQxLCAleG1tMSwgJXhtbTI7CisJdnBzcmxkICQzMSwgJXhtbTEsICV4bW0xOworCXZwYWRkZCAleG1tMiwgJXhtbTEsICV4bW0xOworCXZwc2xsZHEgJDEyLCAleG1tMSwgJXhtbTE7CisJdnBzcmxkcSAkOCwgJXhtbTEsICV4bW0xOworCXZweG9yICV4bW0xLCAleG1tMCwgJXhtbTA7CisKKwl2bW92cSBjbWxsX3N1YigyMSwgQ1RYKSwgJXhtbTE7CisJdm1vdnEgY21sbF9zdWIoMjIsIENUWCksICV4bW0yOworCXZtb3ZxIGNtbGxfc3ViKDIzLCBDVFgpLCAleG1tMzsKKwl2bW92cSBjbWxsX3N1YigyNCwgQ1RYKSwgJXhtbTQ7CisKKwl2cHhvciAleG1tOSwgJXhtbTAsICV4bW0wOworCXZweG9yICV4bW0xMCwgJXhtbTgsICV4bW04OworCXZweG9yICV4bW0xLCAleG1tOSwgJXhtbTk7CisJdnB4b3IgJXhtbTIsICV4bW0xMCwgJXhtbTEwOworCXZweG9yICV4bW0zLCAleG1tMSwgJXhtbTE7CisKKwl2bW92cSAleG1tMCwgY21sbF9zdWIoMTgsIENUWCk7CisJdm1vdnEgJXhtbTgsIGNtbGxfc3ViKDE5LCBDVFgpOworCXZtb3ZxICV4bW05LCBjbWxsX3N1YigyMCwgQ1RYKTsKKwl2bW92cSAleG1tMTAsIGNtbGxfc3ViKDIxLCBDVFgpOworCXZtb3ZxICV4bW0xLCBjbWxsX3N1YigyMiwgQ1RYKTsKKworCXZtb3ZxIGNtbGxfc3ViKDI1LCBDVFgpLCAleG1tNTsKKwl2bW92cSBjbWxsX3N1YigyNiwgQ1RYKSwgJXhtbTY7CisJdm1vdnEgY21sbF9zdWIoMjcsIENUWCksICV4bW03OworCXZtb3ZxIGNtbGxfc3ViKDI4LCBDVFgpLCAleG1tODsKKwl2bW92cSBjbWxsX3N1YigyOSwgQ1RYKSwgJXhtbTk7CisJdm1vdnEgY21sbF9zdWIoMzAsIENUWCksICV4bW0xMDsKKwl2bW92cSBjbWxsX3N1YigzMSwgQ1RYKSwgJXhtbTExOworCXZtb3ZxIGNtbGxfc3ViKDMyLCBDVFgpLCAleG1tMTI7CisKKwkvKiB0bCA9IHN1YmwoMjYpIF4gKHN1YnIoMjYpICYgfnN1YnIoMjQpKTsgKi8KKwl2cGFuZG4gJXhtbTYsICV4bW00LCAleG1tMTU7CisJdnBzcmxkcSAkNCwgJXhtbTE1LCAleG1tMTU7CisJdnB4b3IgJXhtbTE1LCAleG1tNiwgJXhtbTA7CisJLyogZHcgPSB0bCAmIHN1YmwoMjYpLCB0ciA9IHN1YnIoMjQpIF4gQ0FNRUxMSUFfUkwxKGR3KTsgKi8KKwl2cGFuZCAleG1tNCwgJXhtbTAsICV4bW0xNTsKKwl2cHNsbGQgJDEsICV4bW0xNSwgJXhtbTE0OworCXZwc3JsZCAkMzEsICV4bW0xNSwgJXhtbTE1OworCXZwYWRkZCAleG1tMTQsICV4bW0xNSwgJXhtbTE1OworCXZwc2xsZHEgJDEyLCAleG1tMTUsICV4bW0xNTsKKwl2cHNybGRxICQ4LCAleG1tMTUsICV4bW0xNTsKKwl2cHhvciAleG1tMTUsICV4bW0wLCAleG1tMDsKKworCXZweG9yICV4bW0wLCAleG1tMiwgJXhtbTI7CisJdm1vdnEgJXhtbTIsIGNtbGxfc3ViKDIzLCBDVFgpOworCisJLyogdGwgPSBzdWJsKDIzKSBeIChzdWJyKDIzKSAmICB+c3VicigyNSkpOyAqLworCXZwYW5kbiAleG1tMywgJXhtbTUsICV4bW0xNTsKKwl2cHNybGRxICQ0LCAleG1tMTUsICV4bW0xNTsKKwl2cHhvciAleG1tMTUsICV4bW0zLCAleG1tMDsKKwkvKiBkdyA9IHRsICYgc3VibCgyNiksIHRyID0gc3VicigyNCkgXiBDQU1FTExJQV9STDEoZHcpOyAqLworCXZwYW5kICV4bW01LCAleG1tMCwgJXhtbTE1OworCXZwc2xsZCAkMSwgJXhtbTE1LCAleG1tMTQ7CisJdnBzcmxkICQzMSwgJXhtbTE1LCAleG1tMTU7CisJdnBhZGRkICV4bW0xNCwgJXhtbTE1LCAleG1tMTU7CisJdnBzbGxkcSAkMTIsICV4bW0xNSwgJXhtbTE1OworCXZwc3JsZHEgJDgsICV4bW0xNSwgJXhtbTE1OworCXZweG9yICV4bW0xNSwgJXhtbTAsICV4bW0wOworCisJdnB4b3IgJXhtbTcsICV4bW0wLCAleG1tMDsKKwl2cHhvciAleG1tOCwgJXhtbTYsICV4bW02OworCXZweG9yICV4bW05LCAleG1tNywgJXhtbTc7CisJdnB4b3IgJXhtbTEwLCAleG1tOCwgJXhtbTg7CisJdnB4b3IgJXhtbTExLCAleG1tOSwgJXhtbTk7CisJdnB4b3IgJXhtbTEyLCAleG1tMTEsICV4bW0xMTsKKworCXZtb3ZxICV4bW0wLCBjbWxsX3N1YigyNiwgQ1RYKTsKKwl2bW92cSAleG1tNiwgY21sbF9zdWIoMjcsIENUWCk7CisJdm1vdnEgJXhtbTcsIGNtbGxfc3ViKDI4LCBDVFgpOworCXZtb3ZxICV4bW04LCBjbWxsX3N1YigyOSwgQ1RYKTsKKwl2bW92cSAleG1tOSwgY21sbF9zdWIoMzAsIENUWCk7CisJdm1vdnEgJXhtbTEwLCBjbWxsX3N1YigzMSwgQ1RYKTsKKwl2bW92cSAleG1tMTEsIGNtbGxfc3ViKDMyLCBDVFgpOworCisJLyoga3cyIGFuZCBrdzQgYXJlIHVudXNlZCBub3cuICovCisJbW92cSAkMCwgY21sbF9zdWIoMSwgQ1RYKTsKKwltb3ZxICQwLCBjbWxsX3N1YigzMywgQ1RYKTsKKworCXZ6ZXJvYWxsOworCisJcmV0OworLnNpemUgX19jYW1lbGxpYV9hdnhfc2V0dXAyNTYsLi1fX2NhbWVsbGlhX2F2eF9zZXR1cDI1NjsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfa2V5Z2VuCisudHlwZSAgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2tleWdlbixAZnVuY3Rpb247CisKK19nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9rZXlnZW46CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBrZXkKKwkgKgklcmR4OiBrZXlsZW4KKwkgKi8KKworCXZ6ZXJvdXBwZXI7CisKKwl2bW92ZHF1ICglcnNpKSwgJXhtbTA7CisJY21wbCAkMjQsICVlZHg7CisJamIgX19jYW1lbGxpYV9hdnhfc2V0dXAxMjg7CisJamUgLkxwcmVwYXJlX2tleTE5MjsKKworCXZtb3ZkcXUgMTYoJXJzaSksICV4bW0xOworCWptcCBfX2NhbWVsbGlhX2F2eF9zZXR1cDI1NjsKKworLkxwcmVwYXJlX2tleTE5MjoKKwl2cGNtcGVxZCAleG1tMiwgJXhtbTIsICV4bW0yOworCXZtb3ZxIDE2KCVyc2kpLCAleG1tMTsKKworCXZweG9yICV4bW0xLCAleG1tMiwgJXhtbTI7CisJdnBzbGxkcSAkOCwgJXhtbTIsICV4bW0yOworCXZwb3IgJXhtbTIsICV4bW0xLCAleG1tMTsKKworCWptcCBfX2NhbWVsbGlhX2F2eF9zZXR1cDI1NjsKKy5zaXplIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9rZXlnZW4sLi1fZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfa2V5Z2VuOworCisjZW5kaWYgLypkZWZpbmVkKEVOQUJMRV9BRVNOSV9TVVBQT1JUKSAmJiBkZWZpbmVkKEVOQUJMRV9BVlhfU1VQUE9SVCkqLworI2VuZGlmIC8qX194ODZfNjQqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NhbWVsbGlhLWFlc25pLWF2eDItYW1kNjQuUyBiL2NpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4OWZmNAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LlMKQEAgLTAsMCArMSwxMjYzIEBACisvKiBjYW1lbGxpYS1hdngyLWFlc25pLWFtZDY0LlMgIC0gIEFFUy1OSS9BVlgyIGltcGxlbWVudGF0aW9uIG9mIENhbWVsbGlhIGNpcGhlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIF9feDg2XzY0CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChFTkFCTEVfQUVTTklfU1VQUE9SVCkgJiYgZGVmaW5lZChFTkFCTEVfQVZYMl9TVVBQT1JUKQorCisjaWZkZWYgX19QSUNfXworIyAgZGVmaW5lIFJJUCAoJXJpcCkKKyNlbHNlCisjICBkZWZpbmUgUklQCisjZW5kaWYKKworI2RlZmluZSBDQU1FTExJQV9UQUJMRV9CWVRFX0xFTiAyNzIKKworLyogc3RydWN0IENBTUVMTElBX2NvbnRleHQ6ICovCisjZGVmaW5lIGtleV90YWJsZSAwCisjZGVmaW5lIGtleV9iaXRsZW5ndGggQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4KKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIENUWCAlcmRpCisjZGVmaW5lIFJJTyAlcjgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgaGVscGVyIG1hY3JvcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGZpbHRlcl84Yml0KHgsIGxvX3QsIGhpX3QsIG1hc2s0Yml0LCB0bXAwKSBcCisJdnBhbmQgeCwgbWFzazRiaXQsIHRtcDA7IFwKKwl2cGFuZG4geCwgbWFzazRiaXQsIHg7IFwKKwl2cHNybGQgJDQsIHgsIHg7IFwKKwlcCisJdnBzaHVmYiB0bXAwLCBsb190LCB0bXAwOyBcCisJdnBzaHVmYiB4LCBoaV90LCB4OyBcCisJdnB4b3IgdG1wMCwgeCwgeDsKKworI2RlZmluZSB5bW0wX3ggeG1tMAorI2RlZmluZSB5bW0xX3ggeG1tMQorI2RlZmluZSB5bW0yX3ggeG1tMgorI2RlZmluZSB5bW0zX3ggeG1tMworI2RlZmluZSB5bW00X3ggeG1tNAorI2RlZmluZSB5bW01X3ggeG1tNQorI2RlZmluZSB5bW02X3ggeG1tNgorI2RlZmluZSB5bW03X3ggeG1tNworI2RlZmluZSB5bW04X3ggeG1tOAorI2RlZmluZSB5bW05X3ggeG1tOQorI2RlZmluZSB5bW0xMF94IHhtbTEwCisjZGVmaW5lIHltbTExX3ggeG1tMTEKKyNkZWZpbmUgeW1tMTJfeCB4bW0xMgorI2RlZmluZSB5bW0xM194IHhtbTEzCisjZGVmaW5lIHltbTE0X3ggeG1tMTQKKyNkZWZpbmUgeW1tMTVfeCB4bW0xNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAzMi13YXkgY2FtZWxsaWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSU46CisgKiAgIHgwLi54NzogYnl0ZS1zbGljZWQgQUIgc3RhdGUKKyAqICAgbWVtX2NkOiByZWdpc3RlciBwb2ludGVyIHN0b3JpbmcgQ0Qgc3RhdGUKKyAqICAga2V5OiBpbmRleCBmb3Iga2V5IG1hdGVyaWFsCisgKiBPVVQ6CisgKiAgIHgwLi54NzogbmV3IGJ5dGUtc2xpY2VkIENEIHN0YXRlCisgKi8KKyNkZWZpbmUgcm91bmRzbTMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIFwKKwkJICB0NywgbWVtX2NkLCBrZXkpIFwKKwkvKiBcCisJICogUy1mdW5jdGlvbiB3aXRoIEFFUyBzdWJieXRlcyBcCisJICovIFwKKwl2YnJvYWRjYXN0aTEyOCAuTGludl9zaGlmdF9yb3cgUklQLCB0NDsgXAorCXZwYnJvYWRjYXN0ZCAuTDBmMGYwZjBmIFJJUCwgdDc7IFwKKwl2YnJvYWRjYXN0aTEyOCAuTHByZV90Zl9sb19zMSBSSVAsIHQ1OyBcCisJdmJyb2FkY2FzdGkxMjggLkxwcmVfdGZfaGlfczEgUklQLCB0NjsgXAorCXZicm9hZGNhc3RpMTI4IC5McHJlX3RmX2xvX3M0IFJJUCwgdDI7IFwKKwl2YnJvYWRjYXN0aTEyOCAuTHByZV90Zl9oaV9zNCBSSVAsIHQzOyBcCisJXAorCS8qIEFFUyBpbnZlcnNlIHNoaWZ0IHJvd3MgKi8gXAorCXZwc2h1ZmIgdDQsIHgwLCB4MDsgXAorCXZwc2h1ZmIgdDQsIHg3LCB4NzsgXAorCXZwc2h1ZmIgdDQsIHgzLCB4MzsgXAorCXZwc2h1ZmIgdDQsIHg2LCB4NjsgXAorCXZwc2h1ZmIgdDQsIHgyLCB4MjsgXAorCXZwc2h1ZmIgdDQsIHg1LCB4NTsgXAorCXZwc2h1ZmIgdDQsIHgxLCB4MTsgXAorCXZwc2h1ZmIgdDQsIHg0LCB4NDsgXAorCVwKKwkvKiBwcmVmaWx0ZXIgc2JveGVzIDEsIDIgYW5kIDMgKi8gXAorCS8qIHByZWZpbHRlciBzYm94IDQgKi8gXAorCWZpbHRlcl84Yml0KHgwLCB0NSwgdDYsIHQ3LCB0NCk7IFwKKwlmaWx0ZXJfOGJpdCh4NywgdDUsIHQ2LCB0NywgdDQpOyBcCisJdmV4dHJhY3RpMTI4ICQxLCB4MCwgdDAjI194OyBcCisJdmV4dHJhY3RpMTI4ICQxLCB4NywgdDEjI194OyBcCisJZmlsdGVyXzhiaXQoeDMsIHQyLCB0MywgdDcsIHQ0KTsgXAorCWZpbHRlcl84Yml0KHg2LCB0MiwgdDMsIHQ3LCB0NCk7IFwKKwl2ZXh0cmFjdGkxMjggJDEsIHgzLCB0MyMjX3g7IFwKKwl2ZXh0cmFjdGkxMjggJDEsIHg2LCB0MiMjX3g7IFwKKwlmaWx0ZXJfOGJpdCh4MiwgdDUsIHQ2LCB0NywgdDQpOyBcCisJZmlsdGVyXzhiaXQoeDUsIHQ1LCB0NiwgdDcsIHQ0KTsgXAorCWZpbHRlcl84Yml0KHgxLCB0NSwgdDYsIHQ3LCB0NCk7IFwKKwlmaWx0ZXJfOGJpdCh4NCwgdDUsIHQ2LCB0NywgdDQpOyBcCisJXAorCXZweG9yIHQ0IyNfeCwgdDQjI194LCB0NCMjX3g7IFwKKwlcCisJLyogQUVTIHN1YmJ5dGVzICsgQUVTIHNoaWZ0IHJvd3MgKi8gXAorCXZleHRyYWN0aTEyOCAkMSwgeDIsIHQ2IyNfeDsgXAorCXZleHRyYWN0aTEyOCAkMSwgeDUsIHQ1IyNfeDsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgeDAjI194LCB4MCMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHQwIyNfeCwgdDAjI194OyBcCisJdmFlc2VuY2xhc3QgdDQjI194LCB4NyMjX3gsIHg3IyNfeDsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgdDEjI194LCB0MSMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHgzIyNfeCwgeDMjI194OyBcCisJdmFlc2VuY2xhc3QgdDQjI194LCB0MyMjX3gsIHQzIyNfeDsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgeDYjI194LCB4NiMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHQyIyNfeCwgdDIjI194OyBcCisJdmluc2VydGkxMjggJDEsIHQwIyNfeCwgeDAsIHgwOyBcCisJdmluc2VydGkxMjggJDEsIHQxIyNfeCwgeDcsIHg3OyBcCisJdmluc2VydGkxMjggJDEsIHQzIyNfeCwgeDMsIHgzOyBcCisJdmluc2VydGkxMjggJDEsIHQyIyNfeCwgeDYsIHg2OyBcCisJdmV4dHJhY3RpMTI4ICQxLCB4MSwgdDMjI194OyBcCisJdmV4dHJhY3RpMTI4ICQxLCB4NCwgdDIjI194OyBcCisJdmJyb2FkY2FzdGkxMjggLkxwb3N0X3RmX2xvX3MxIFJJUCwgdDA7IFwKKwl2YnJvYWRjYXN0aTEyOCAuTHBvc3RfdGZfaGlfczEgUklQLCB0MTsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgeDIjI194LCB4MiMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHQ2IyNfeCwgdDYjI194OyBcCisJdmFlc2VuY2xhc3QgdDQjI194LCB4NSMjX3gsIHg1IyNfeDsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgdDUjI194LCB0NSMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHgxIyNfeCwgeDEjI194OyBcCisJdmFlc2VuY2xhc3QgdDQjI194LCB0MyMjX3gsIHQzIyNfeDsgXAorCXZhZXNlbmNsYXN0IHQ0IyNfeCwgeDQjI194LCB4NCMjX3g7IFwKKwl2YWVzZW5jbGFzdCB0NCMjX3gsIHQyIyNfeCwgdDIjI194OyBcCisJdmluc2VydGkxMjggJDEsIHQ2IyNfeCwgeDIsIHgyOyBcCisJdmluc2VydGkxMjggJDEsIHQ1IyNfeCwgeDUsIHg1OyBcCisJdmluc2VydGkxMjggJDEsIHQzIyNfeCwgeDEsIHgxOyBcCisJdmluc2VydGkxMjggJDEsIHQyIyNfeCwgeDQsIHg0OyBcCisJXAorCS8qIHBvc3RmaWx0ZXIgc2JveGVzIDEgYW5kIDQgKi8gXAorCXZicm9hZGNhc3RpMTI4IC5McG9zdF90Zl9sb19zMyBSSVAsIHQyOyBcCisJdmJyb2FkY2FzdGkxMjggLkxwb3N0X3RmX2hpX3MzIFJJUCwgdDM7IFwKKwlmaWx0ZXJfOGJpdCh4MCwgdDAsIHQxLCB0NywgdDQpOyBcCisJZmlsdGVyXzhiaXQoeDcsIHQwLCB0MSwgdDcsIHQ0KTsgXAorCWZpbHRlcl84Yml0KHgzLCB0MCwgdDEsIHQ3LCB0Nik7IFwKKwlmaWx0ZXJfOGJpdCh4NiwgdDAsIHQxLCB0NywgdDYpOyBcCisJXAorCS8qIHBvc3RmaWx0ZXIgc2JveCAzICovIFwKKwl2YnJvYWRjYXN0aTEyOCAuTHBvc3RfdGZfbG9fczIgUklQLCB0NDsgXAorCXZicm9hZGNhc3RpMTI4IC5McG9zdF90Zl9oaV9zMiBSSVAsIHQ1OyBcCisJZmlsdGVyXzhiaXQoeDIsIHQyLCB0MywgdDcsIHQ2KTsgXAorCWZpbHRlcl84Yml0KHg1LCB0MiwgdDMsIHQ3LCB0Nik7IFwKKwlcCisJdnBicm9hZGNhc3RxIGtleSwgdDA7IC8qIGhpZ2hlciA2NC1iaXQgZHVwbGljYXRlIGlnbm9yZWQgKi8gXAorCVwKKwkvKiBwb3N0ZmlsdGVyIHNib3ggMiAqLyBcCisJZmlsdGVyXzhiaXQoeDEsIHQ0LCB0NSwgdDcsIHQyKTsgXAorCWZpbHRlcl84Yml0KHg0LCB0NCwgdDUsIHQ3LCB0Mik7IFwKKwl2cHhvciB0NywgdDcsIHQ3OyBcCisJXAorCXZwc3JsZHEgJDEsIHQwLCB0MTsgXAorCXZwc3JsZHEgJDIsIHQwLCB0MjsgXAorCXZwc2h1ZmIgdDcsIHQxLCB0MTsgXAorCXZwc3JsZHEgJDMsIHQwLCB0MzsgXAorCVwKKwkvKiBQLWZ1bmN0aW9uICovIFwKKwl2cHhvciB4NSwgeDAsIHgwOyBcCisJdnB4b3IgeDYsIHgxLCB4MTsgXAorCXZweG9yIHg3LCB4MiwgeDI7IFwKKwl2cHhvciB4NCwgeDMsIHgzOyBcCisJXAorCXZwc2h1ZmIgdDcsIHQyLCB0MjsgXAorCXZwc3JsZHEgJDQsIHQwLCB0NDsgXAorCXZwc2h1ZmIgdDcsIHQzLCB0MzsgXAorCXZwc3JsZHEgJDUsIHQwLCB0NTsgXAorCXZwc2h1ZmIgdDcsIHQ0LCB0NDsgXAorCVwKKwl2cHhvciB4MiwgeDQsIHg0OyBcCisJdnB4b3IgeDMsIHg1LCB4NTsgXAorCXZweG9yIHgwLCB4NiwgeDY7IFwKKwl2cHhvciB4MSwgeDcsIHg3OyBcCisJXAorCXZwc3JsZHEgJDYsIHQwLCB0NjsgXAorCXZwc2h1ZmIgdDcsIHQ1LCB0NTsgXAorCXZwc2h1ZmIgdDcsIHQ2LCB0NjsgXAorCVwKKwl2cHhvciB4NywgeDAsIHgwOyBcCisJdnB4b3IgeDQsIHgxLCB4MTsgXAorCXZweG9yIHg1LCB4MiwgeDI7IFwKKwl2cHhvciB4NiwgeDMsIHgzOyBcCisJXAorCXZweG9yIHgzLCB4NCwgeDQ7IFwKKwl2cHhvciB4MCwgeDUsIHg1OyBcCisJdnB4b3IgeDEsIHg2LCB4NjsgXAorCXZweG9yIHgyLCB4NywgeDc7IC8qIG5vdGU6IGhpZ2ggYW5kIGxvdyBwYXJ0cyBzd2FwcGVkICovIFwKKwlcCisJLyogQWRkIGtleSBtYXRlcmlhbCBhbmQgcmVzdWx0IHRvIENEICh4IGJlY29tZXMgbmV3IENEKSAqLyBcCisJXAorCXZweG9yIHQ2LCB4MSwgeDE7IFwKKwl2cHhvciA1ICogMzIobWVtX2NkKSwgeDEsIHgxOyBcCisJXAorCXZwc3JsZHEgJDcsIHQwLCB0NjsgXAorCXZwc2h1ZmIgdDcsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdDcsIHQ2LCB0NzsgXAorCVwKKwl2cHhvciB0NywgeDAsIHgwOyBcCisJdnB4b3IgNCAqIDMyKG1lbV9jZCksIHgwLCB4MDsgXAorCVwKKwl2cHhvciB0NSwgeDIsIHgyOyBcCisJdnB4b3IgNiAqIDMyKG1lbV9jZCksIHgyLCB4MjsgXAorCVwKKwl2cHhvciB0NCwgeDMsIHgzOyBcCisJdnB4b3IgNyAqIDMyKG1lbV9jZCksIHgzLCB4MzsgXAorCVwKKwl2cHhvciB0MywgeDQsIHg0OyBcCisJdnB4b3IgMCAqIDMyKG1lbV9jZCksIHg0LCB4NDsgXAorCVwKKwl2cHhvciB0MiwgeDUsIHg1OyBcCisJdnB4b3IgMSAqIDMyKG1lbV9jZCksIHg1LCB4NTsgXAorCVwKKwl2cHhvciB0MSwgeDYsIHg2OyBcCisJdnB4b3IgMiAqIDMyKG1lbV9jZCksIHg2LCB4NjsgXAorCVwKKwl2cHhvciB0MCwgeDcsIHg3OyBcCisJdnB4b3IgMyAqIDMyKG1lbV9jZCksIHg3LCB4NzsKKworLyoKKyAqIElOL09VVDoKKyAqICB4MC4ueDc6IGJ5dGUtc2xpY2VkIEFCIHN0YXRlIHByZWxvYWRlZAorICogIG1lbV9hYjogYnl0ZS1zbGljZWQgQUIgc3RhdGUgaW4gbWVtb3J5CisgKiAgbWVtX2NiOiBieXRlLXNsaWNlZCBDRCBzdGF0ZSBpbiBtZW1vcnkKKyAqLworI2RlZmluZSB0d29fcm91bmRzbTMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCBpLCBkaXIsIHN0b3JlX2FiKSBcCisJcm91bmRzbTMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgIHk2LCB5NywgbWVtX2NkLCAoa2V5X3RhYmxlICsgKGkpICogOCkoQ1RYKSk7IFwKKwlcCisJdm1vdmRxdSB4MCwgNCAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHgxLCA1ICogMzIobWVtX2NkKTsgXAorCXZtb3ZkcXUgeDIsIDYgKiAzMihtZW1fY2QpOyBcCisJdm1vdmRxdSB4MywgNyAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHg0LCAwICogMzIobWVtX2NkKTsgXAorCXZtb3ZkcXUgeDUsIDEgKiAzMihtZW1fY2QpOyBcCisJdm1vdmRxdSB4NiwgMiAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHg3LCAzICogMzIobWVtX2NkKTsgXAorCVwKKwlyb3VuZHNtMzIoeDQsIHg1LCB4NiwgeDcsIHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgeTYsIHk3LCBtZW1fYWIsIChrZXlfdGFibGUgKyAoKGkpICsgKGRpcikpICogOCkoQ1RYKSk7IFwKKwlcCisJc3RvcmVfYWIoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCBtZW1fYWIpOworCisjZGVmaW5lIGR1bW15X3N0b3JlKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgbWVtX2FiKSAvKiBkbyBub3RoaW5nICovCisKKyNkZWZpbmUgc3RvcmVfYWJfc3RhdGUoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCBtZW1fYWIpIFwKKwkvKiBTdG9yZSBuZXcgQUIgc3RhdGUgKi8gXAorCXZtb3ZkcXUgeDQsIDQgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB4NSwgNSAqIDMyKG1lbV9hYik7IFwKKwl2bW92ZHF1IHg2LCA2ICogMzIobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDcsIDcgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB4MCwgMCAqIDMyKG1lbV9hYik7IFwKKwl2bW92ZHF1IHgxLCAxICogMzIobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDIsIDIgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB4MywgMyAqIDMyKG1lbV9hYik7CisKKyNkZWZpbmUgZW5jX3JvdW5kczMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCBpKSBcCisJdHdvX3JvdW5kc20zMih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgKGkpICsgMiwgMSwgc3RvcmVfYWJfc3RhdGUpOyBcCisJdHdvX3JvdW5kc20zMih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgKGkpICsgNCwgMSwgc3RvcmVfYWJfc3RhdGUpOyBcCisJdHdvX3JvdW5kc20zMih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgKGkpICsgNiwgMSwgZHVtbXlfc3RvcmUpOworCisjZGVmaW5lIGRlY19yb3VuZHMzMih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgaSkgXAorCXR3b19yb3VuZHNtMzIoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgIHk2LCB5NywgbWVtX2FiLCBtZW1fY2QsIChpKSArIDcsIC0xLCBzdG9yZV9hYl9zdGF0ZSk7IFwKKwl0d29fcm91bmRzbTMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgICB5NiwgeTcsIG1lbV9hYiwgbWVtX2NkLCAoaSkgKyA1LCAtMSwgc3RvcmVfYWJfc3RhdGUpOyBcCisJdHdvX3JvdW5kc20zMih4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCwgKGkpICsgMywgLTEsIGR1bW15X3N0b3JlKTsKKworLyoKKyAqIElOOgorICogIHYwLi4zOiBieXRlLXNsaWNlZCAzMi1iaXQgaW50ZWdlcnMKKyAqIE9VVDoKKyAqICB2MC4uMzogKElOIDw8PCAxKQorICovCisjZGVmaW5lIHJvbDMyXzFfMzIodjAsIHYxLCB2MiwgdjMsIHQwLCB0MSwgdDIsIHplcm8pIFwKKwl2cGNtcGd0YiB2MCwgemVybywgdDA7IFwKKwl2cGFkZGIgdjAsIHYwLCB2MDsgXAorCXZwYWJzYiB0MCwgdDA7IFwKKwlcCisJdnBjbXBndGIgdjEsIHplcm8sIHQxOyBcCisJdnBhZGRiIHYxLCB2MSwgdjE7IFwKKwl2cGFic2IgdDEsIHQxOyBcCisJXAorCXZwY21wZ3RiIHYyLCB6ZXJvLCB0MjsgXAorCXZwYWRkYiB2MiwgdjIsIHYyOyBcCisJdnBhYnNiIHQyLCB0MjsgXAorCVwKKwl2cG9yIHQwLCB2MSwgdjE7IFwKKwlcCisJdnBjbXBndGIgdjMsIHplcm8sIHQwOyBcCisJdnBhZGRiIHYzLCB2MywgdjM7IFwKKwl2cGFic2IgdDAsIHQwOyBcCisJXAorCXZwb3IgdDEsIHYyLCB2MjsgXAorCXZwb3IgdDIsIHYzLCB2MzsgXAorCXZwb3IgdDAsIHYwLCB2MDsKKworLyoKKyAqIElOOgorICogICByOiBieXRlLXNsaWNlZCBBQiBzdGF0ZSBpbiBtZW1vcnkKKyAqICAgbDogYnl0ZS1zbGljZWQgQ0Qgc3RhdGUgaW4gbWVtb3J5CisgKiBPVVQ6CisgKiAgIHgwLi54NzogbmV3IGJ5dGUtc2xpY2VkIENEIHN0YXRlCisgKi8KKyNkZWZpbmUgZmxzMzIobCwgbDAsIGwxLCBsMiwgbDMsIGw0LCBsNSwgbDYsIGw3LCByLCB0MCwgdDEsIHQyLCB0MywgdHQwLCBcCisJICAgICAgdHQxLCB0dDIsIHR0Mywga2xsLCBrbHIsIGtybCwga3JyKSBcCisJLyogXAorCSAqIHQwID0ga2xsOyBcCisJICogdDAgJj0gbGw7IFwKKwkgKiBsciBePSByb2wzMih0MCwgMSk7IFwKKwkgKi8gXAorCXZwYnJvYWRjYXN0ZCBrbGwsIHQwOyAvKiBvbmx5IGxvd2VzdCAzMi1iaXQgdXNlZCAqLyBcCisJdnB4b3IgdHQwLCB0dDAsIHR0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDM7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQyOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MTsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDA7IFwKKwlcCisJdnBhbmQgbDAsIHQwLCB0MDsgXAorCXZwYW5kIGwxLCB0MSwgdDE7IFwKKwl2cGFuZCBsMiwgdDIsIHQyOyBcCisJdnBhbmQgbDMsIHQzLCB0MzsgXAorCVwKKwlyb2wzMl8xXzMyKHQzLCB0MiwgdDEsIHQwLCB0dDEsIHR0MiwgdHQzLCB0dDApOyBcCisJXAorCXZweG9yIGw0LCB0MCwgbDQ7IFwKKwl2cGJyb2FkY2FzdGQga3JyLCB0MDsgLyogb25seSBsb3dlc3QgMzItYml0IHVzZWQgKi8gXAorCXZtb3ZkcXUgbDQsIDQgKiAzMihsKTsgXAorCXZweG9yIGw1LCB0MSwgbDU7IFwKKwl2bW92ZHF1IGw1LCA1ICogMzIobCk7IFwKKwl2cHhvciBsNiwgdDIsIGw2OyBcCisJdm1vdmRxdSBsNiwgNiAqIDMyKGwpOyBcCisJdnB4b3IgbDcsIHQzLCBsNzsgXAorCXZtb3ZkcXUgbDcsIDcgKiAzMihsKTsgXAorCVwKKwkvKiBcCisJICogdDIgPSBrcnI7IFwKKwkgKiB0MiB8PSBycjsgXAorCSAqIHJsIF49IHQyOyBcCisJICovIFwKKwlcCisJdnBzaHVmYiB0dDAsIHQwLCB0MzsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDI7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQxOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MDsgXAorCVwKKwl2cG9yIDQgKiAzMihyKSwgdDAsIHQwOyBcCisJdnBvciA1ICogMzIociksIHQxLCB0MTsgXAorCXZwb3IgNiAqIDMyKHIpLCB0MiwgdDI7IFwKKwl2cG9yIDcgKiAzMihyKSwgdDMsIHQzOyBcCisJXAorCXZweG9yIDAgKiAzMihyKSwgdDAsIHQwOyBcCisJdnB4b3IgMSAqIDMyKHIpLCB0MSwgdDE7IFwKKwl2cHhvciAyICogMzIociksIHQyLCB0MjsgXAorCXZweG9yIDMgKiAzMihyKSwgdDMsIHQzOyBcCisJdm1vdmRxdSB0MCwgMCAqIDMyKHIpOyBcCisJdnBicm9hZGNhc3RkIGtybCwgdDA7IC8qIG9ubHkgbG93ZXN0IDMyLWJpdCB1c2VkICovIFwKKwl2bW92ZHF1IHQxLCAxICogMzIocik7IFwKKwl2bW92ZHF1IHQyLCAyICogMzIocik7IFwKKwl2bW92ZHF1IHQzLCAzICogMzIocik7IFwKKwlcCisJLyogXAorCSAqIHQyID0ga3JsOyBcCisJICogdDIgJj0gcmw7IFwKKwkgKiByciBePSByb2wzMih0MiwgMSk7IFwKKwkgKi8gXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDM7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQyOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MTsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDA7IFwKKwlcCisJdnBhbmQgMCAqIDMyKHIpLCB0MCwgdDA7IFwKKwl2cGFuZCAxICogMzIociksIHQxLCB0MTsgXAorCXZwYW5kIDIgKiAzMihyKSwgdDIsIHQyOyBcCisJdnBhbmQgMyAqIDMyKHIpLCB0MywgdDM7IFwKKwlcCisJcm9sMzJfMV8zMih0MywgdDIsIHQxLCB0MCwgdHQxLCB0dDIsIHR0MywgdHQwKTsgXAorCVwKKwl2cHhvciA0ICogMzIociksIHQwLCB0MDsgXAorCXZweG9yIDUgKiAzMihyKSwgdDEsIHQxOyBcCisJdnB4b3IgNiAqIDMyKHIpLCB0MiwgdDI7IFwKKwl2cHhvciA3ICogMzIociksIHQzLCB0MzsgXAorCXZtb3ZkcXUgdDAsIDQgKiAzMihyKTsgXAorCXZwYnJvYWRjYXN0ZCBrbHIsIHQwOyAvKiBvbmx5IGxvd2VzdCAzMi1iaXQgdXNlZCAqLyBcCisJdm1vdmRxdSB0MSwgNSAqIDMyKHIpOyBcCisJdm1vdmRxdSB0MiwgNiAqIDMyKHIpOyBcCisJdm1vdmRxdSB0MywgNyAqIDMyKHIpOyBcCisJXAorCS8qIFwKKwkgKiB0MCA9IGtscjsgXAorCSAqIHQwIHw9IGxyOyBcCisJICogbGwgXj0gdDA7IFwKKwkgKi8gXAorCVwKKwl2cHNodWZiIHR0MCwgdDAsIHQzOyBcCisJdnBzcmxkcSAkMSwgdDAsIHQwOyBcCisJdnBzaHVmYiB0dDAsIHQwLCB0MjsgXAorCXZwc3JsZHEgJDEsIHQwLCB0MDsgXAorCXZwc2h1ZmIgdHQwLCB0MCwgdDE7IFwKKwl2cHNybGRxICQxLCB0MCwgdDA7IFwKKwl2cHNodWZiIHR0MCwgdDAsIHQwOyBcCisJXAorCXZwb3IgbDQsIHQwLCB0MDsgXAorCXZwb3IgbDUsIHQxLCB0MTsgXAorCXZwb3IgbDYsIHQyLCB0MjsgXAorCXZwb3IgbDcsIHQzLCB0MzsgXAorCVwKKwl2cHhvciBsMCwgdDAsIGwwOyBcCisJdm1vdmRxdSBsMCwgMCAqIDMyKGwpOyBcCisJdnB4b3IgbDEsIHQxLCBsMTsgXAorCXZtb3ZkcXUgbDEsIDEgKiAzMihsKTsgXAorCXZweG9yIGwyLCB0MiwgbDI7IFwKKwl2bW92ZHF1IGwyLCAyICogMzIobCk7IFwKKwl2cHhvciBsMywgdDMsIGwzOyBcCisJdm1vdmRxdSBsMywgMyAqIDMyKGwpOworCisjZGVmaW5lIHRyYW5zcG9zZV80eDQoeDAsIHgxLCB4MiwgeDMsIHQxLCB0MikgXAorCXZwdW5wY2toZHEgeDEsIHgwLCB0MjsgXAorCXZwdW5wY2tsZHEgeDEsIHgwLCB4MDsgXAorCVwKKwl2cHVucGNrbGRxIHgzLCB4MiwgdDE7IFwKKwl2cHVucGNraGRxIHgzLCB4MiwgeDI7IFwKKwlcCisJdnB1bnBja2hxZHEgdDEsIHgwLCB4MTsgXAorCXZwdW5wY2tscWRxIHQxLCB4MCwgeDA7IFwKKwlcCisJdnB1bnBja2hxZHEgeDIsIHQyLCB4MzsgXAorCXZwdW5wY2tscWRxIHgyLCB0MiwgeDI7CisKKyNkZWZpbmUgYnl0ZXNsaWNlXzE2eDE2Yl9mYXN0KGEwLCBiMCwgYzAsIGQwLCBhMSwgYjEsIGMxLCBkMSwgYTIsIGIyLCBjMiwgZDIsIFwKKwkJCSAgICAgIGEzLCBiMywgYzMsIGQzLCBzdDAsIHN0MSkgXAorCXZtb3ZkcXUgZDIsIHN0MDsgXAorCXZtb3ZkcXUgZDMsIHN0MTsgXAorCXRyYW5zcG9zZV80eDQoYTAsIGExLCBhMiwgYTMsIGQyLCBkMyk7IFwKKwl0cmFuc3Bvc2VfNHg0KGIwLCBiMSwgYjIsIGIzLCBkMiwgZDMpOyBcCisJdm1vdmRxdSBzdDAsIGQyOyBcCisJdm1vdmRxdSBzdDEsIGQzOyBcCisJXAorCXZtb3ZkcXUgYTAsIHN0MDsgXAorCXZtb3ZkcXUgYTEsIHN0MTsgXAorCXRyYW5zcG9zZV80eDQoYzAsIGMxLCBjMiwgYzMsIGEwLCBhMSk7IFwKKwl0cmFuc3Bvc2VfNHg0KGQwLCBkMSwgZDIsIGQzLCBhMCwgYTEpOyBcCisJXAorCXZicm9hZGNhc3RpMTI4IC5Mc2h1ZmJfMTZ4MTZiIFJJUCwgYTA7IFwKKwl2bW92ZHF1IHN0MSwgYTE7IFwKKwl2cHNodWZiIGEwLCBhMiwgYTI7IFwKKwl2cHNodWZiIGEwLCBhMywgYTM7IFwKKwl2cHNodWZiIGEwLCBiMCwgYjA7IFwKKwl2cHNodWZiIGEwLCBiMSwgYjE7IFwKKwl2cHNodWZiIGEwLCBiMiwgYjI7IFwKKwl2cHNodWZiIGEwLCBiMywgYjM7IFwKKwl2cHNodWZiIGEwLCBhMSwgYTE7IFwKKwl2cHNodWZiIGEwLCBjMCwgYzA7IFwKKwl2cHNodWZiIGEwLCBjMSwgYzE7IFwKKwl2cHNodWZiIGEwLCBjMiwgYzI7IFwKKwl2cHNodWZiIGEwLCBjMywgYzM7IFwKKwl2cHNodWZiIGEwLCBkMCwgZDA7IFwKKwl2cHNodWZiIGEwLCBkMSwgZDE7IFwKKwl2cHNodWZiIGEwLCBkMiwgZDI7IFwKKwl2cHNodWZiIGEwLCBkMywgZDM7IFwKKwl2bW92ZHF1IGQzLCBzdDE7IFwKKwl2bW92ZHF1IHN0MCwgZDM7IFwKKwl2cHNodWZiIGEwLCBkMywgYTA7IFwKKwl2bW92ZHF1IGQyLCBzdDA7IFwKKwlcCisJdHJhbnNwb3NlXzR4NChhMCwgYjAsIGMwLCBkMCwgZDIsIGQzKTsgXAorCXRyYW5zcG9zZV80eDQoYTEsIGIxLCBjMSwgZDEsIGQyLCBkMyk7IFwKKwl2bW92ZHF1IHN0MCwgZDI7IFwKKwl2bW92ZHF1IHN0MSwgZDM7IFwKKwlcCisJdm1vdmRxdSBiMCwgc3QwOyBcCisJdm1vdmRxdSBiMSwgc3QxOyBcCisJdHJhbnNwb3NlXzR4NChhMiwgYjIsIGMyLCBkMiwgYjAsIGIxKTsgXAorCXRyYW5zcG9zZV80eDQoYTMsIGIzLCBjMywgZDMsIGIwLCBiMSk7IFwKKwl2bW92ZHF1IHN0MCwgYjA7IFwKKwl2bW92ZHF1IHN0MSwgYjE7IFwKKwkvKiBkb2VzIG5vdCBhZGp1c3Qgb3V0cHV0IGJ5dGVzIGluc2lkZSB2ZWN0b3JzICovCisKKy8qIGxvYWQgYmxvY2tzIHRvIHJlZ2lzdGVycyBhbmQgYXBwbHkgcHJlLXdoaXRlbmluZyAqLworI2RlZmluZSBpbnBhY2szMl9wcmUoeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCBcCisJCSAgICAgeTYsIHk3LCByaW8sIGtleSkgXAorCXZwYnJvYWRjYXN0cSBrZXksIHgwOyBcCisJdnBzaHVmYiAuTHBhY2tfYnN3YXAgUklQLCB4MCwgeDA7IFwKKwlcCisJdnB4b3IgMCAqIDMyKHJpbyksIHgwLCB5NzsgXAorCXZweG9yIDEgKiAzMihyaW8pLCB4MCwgeTY7IFwKKwl2cHhvciAyICogMzIocmlvKSwgeDAsIHk1OyBcCisJdnB4b3IgMyAqIDMyKHJpbyksIHgwLCB5NDsgXAorCXZweG9yIDQgKiAzMihyaW8pLCB4MCwgeTM7IFwKKwl2cHhvciA1ICogMzIocmlvKSwgeDAsIHkyOyBcCisJdnB4b3IgNiAqIDMyKHJpbyksIHgwLCB5MTsgXAorCXZweG9yIDcgKiAzMihyaW8pLCB4MCwgeTA7IFwKKwl2cHhvciA4ICogMzIocmlvKSwgeDAsIHg3OyBcCisJdnB4b3IgOSAqIDMyKHJpbyksIHgwLCB4NjsgXAorCXZweG9yIDEwICogMzIocmlvKSwgeDAsIHg1OyBcCisJdnB4b3IgMTEgKiAzMihyaW8pLCB4MCwgeDQ7IFwKKwl2cHhvciAxMiAqIDMyKHJpbyksIHgwLCB4MzsgXAorCXZweG9yIDEzICogMzIocmlvKSwgeDAsIHgyOyBcCisJdnB4b3IgMTQgKiAzMihyaW8pLCB4MCwgeDE7IFwKKwl2cHhvciAxNSAqIDMyKHJpbyksIHgwLCB4MDsKKworLyogYnl0ZXNsaWNlIHByZS13aGl0ZW5lZCBibG9ja3MgYW5kIHN0b3JlIHRvIHRlbXBvcmFyeSBtZW1vcnkgKi8KKyNkZWZpbmUgaW5wYWNrMzJfcG9zdCh4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIFwKKwkJICAgICAgeTYsIHk3LCBtZW1fYWIsIG1lbV9jZCkgXAorCWJ5dGVzbGljZV8xNngxNmJfZmFzdCh4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHkwLCB5MSwgeTIsIHkzLCBcCisJCQkgICAgICB5NCwgeTUsIHk2LCB5NywgKG1lbV9hYiksIChtZW1fY2QpKTsgXAorCVwKKwl2bW92ZHF1IHgwLCAwICogMzIobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDEsIDEgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB4MiwgMiAqIDMyKG1lbV9hYik7IFwKKwl2bW92ZHF1IHgzLCAzICogMzIobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDQsIDQgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB4NSwgNSAqIDMyKG1lbV9hYik7IFwKKwl2bW92ZHF1IHg2LCA2ICogMzIobWVtX2FiKTsgXAorCXZtb3ZkcXUgeDcsIDcgKiAzMihtZW1fYWIpOyBcCisJdm1vdmRxdSB5MCwgMCAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHkxLCAxICogMzIobWVtX2NkKTsgXAorCXZtb3ZkcXUgeTIsIDIgKiAzMihtZW1fY2QpOyBcCisJdm1vdmRxdSB5MywgMyAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHk0LCA0ICogMzIobWVtX2NkKTsgXAorCXZtb3ZkcXUgeTUsIDUgKiAzMihtZW1fY2QpOyBcCisJdm1vdmRxdSB5NiwgNiAqIDMyKG1lbV9jZCk7IFwKKwl2bW92ZHF1IHk3LCA3ICogMzIobWVtX2NkKTsKKworLyogZGUtYnl0ZXNsaWNlLCBhcHBseSBwb3N0LXdoaXRlbmluZyBhbmQgc3RvcmUgYmxvY2tzICovCisjZGVmaW5lIG91dHVucGFjazMyKHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCBcCisJCSAgICB5NSwgeTYsIHk3LCBrZXksIHN0YWNrX3RtcDAsIHN0YWNrX3RtcDEpIFwKKwlieXRlc2xpY2VfMTZ4MTZiX2Zhc3QoeTAsIHk0LCB4MCwgeDQsIHkxLCB5NSwgeDEsIHg1LCB5MiwgeTYsIHgyLCB4NiwgXAorCQkJICAgICAgeTMsIHk3LCB4MywgeDcsIHN0YWNrX3RtcDAsIHN0YWNrX3RtcDEpOyBcCisJXAorCXZtb3ZkcXUgeDAsIHN0YWNrX3RtcDA7IFwKKwlcCisJdnBicm9hZGNhc3RxIGtleSwgeDA7IFwKKwl2cHNodWZiIC5McGFja19ic3dhcCBSSVAsIHgwLCB4MDsgXAorCVwKKwl2cHhvciB4MCwgeTcsIHk3OyBcCisJdnB4b3IgeDAsIHk2LCB5NjsgXAorCXZweG9yIHgwLCB5NSwgeTU7IFwKKwl2cHhvciB4MCwgeTQsIHk0OyBcCisJdnB4b3IgeDAsIHkzLCB5MzsgXAorCXZweG9yIHgwLCB5MiwgeTI7IFwKKwl2cHhvciB4MCwgeTEsIHkxOyBcCisJdnB4b3IgeDAsIHkwLCB5MDsgXAorCXZweG9yIHgwLCB4NywgeDc7IFwKKwl2cHhvciB4MCwgeDYsIHg2OyBcCisJdnB4b3IgeDAsIHg1LCB4NTsgXAorCXZweG9yIHgwLCB4NCwgeDQ7IFwKKwl2cHhvciB4MCwgeDMsIHgzOyBcCisJdnB4b3IgeDAsIHgyLCB4MjsgXAorCXZweG9yIHgwLCB4MSwgeDE7IFwKKwl2cHhvciBzdGFja190bXAwLCB4MCwgeDA7CisKKyNkZWZpbmUgd3JpdGVfb3V0cHV0KHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgXAorCQkgICAgIHk2LCB5NywgcmlvKSBcCisJdm1vdmRxdSB4MCwgMCAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHgxLCAxICogMzIocmlvKTsgXAorCXZtb3ZkcXUgeDIsIDIgKiAzMihyaW8pOyBcCisJdm1vdmRxdSB4MywgMyAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHg0LCA0ICogMzIocmlvKTsgXAorCXZtb3ZkcXUgeDUsIDUgKiAzMihyaW8pOyBcCisJdm1vdmRxdSB4NiwgNiAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHg3LCA3ICogMzIocmlvKTsgXAorCXZtb3ZkcXUgeTAsIDggKiAzMihyaW8pOyBcCisJdm1vdmRxdSB5MSwgOSAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHkyLCAxMCAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHkzLCAxMSAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHk0LCAxMiAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHk1LCAxMyAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHk2LCAxNCAqIDMyKHJpbyk7IFwKKwl2bW92ZHF1IHk3LCAxNSAqIDMyKHJpbyk7CisKKy5kYXRhCisuYWxpZ24gMzIKKworI2RlZmluZSBTSFVGQl9CWVRFUyhpZHgpIFwKKwkwICsgKGlkeCksIDQgKyAoaWR4KSwgOCArIChpZHgpLCAxMiArIChpZHgpCisKKy5Mc2h1ZmJfMTZ4MTZiOgorCS5ieXRlIFNIVUZCX0JZVEVTKDApLCBTSFVGQl9CWVRFUygxKSwgU0hVRkJfQllURVMoMiksIFNIVUZCX0JZVEVTKDMpCisJLmJ5dGUgU0hVRkJfQllURVMoMCksIFNIVUZCX0JZVEVTKDEpLCBTSFVGQl9CWVRFUygyKSwgU0hVRkJfQllURVMoMykKKworLkxwYWNrX2Jzd2FwOgorCS5sb25nIDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcsIDB4ODA4MDgwODAsIDB4ODA4MDgwODAKKwkubG9uZyAweDAwMDEwMjAzLCAweDA0MDUwNjA3LCAweDgwODA4MDgwLCAweDgwODA4MDgwCisKKy8qIEZvciBDVFItbW9kZSBJViBieXRlc3dhcCAqLworLkxic3dhcDEyOF9tYXNrOgorCS5ieXRlIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAKKworLyoKKyAqIHByZS1TdWJCeXRlIHRyYW5zZm9ybQorICoKKyAqIHByZS1sb29rdXAgZm9yIHNib3gxLCBzYm94Miwgc2JveDM6CisgKiAgIHN3YXBfYml0ZW5kaWFubmVzcygKKyAqICAgICAgIGlzb21fbWFwX2NhbWVsbGlhX3RvX2FlcygKKyAqICAgICAgICAgICBjYW1lbGxpYV9mKAorICogICAgICAgICAgICAgICBzd2FwX2JpdGVuZGlhbmVzcyhpbikKKyAqICAgICAgICAgICApCisgKiAgICAgICApCisgKiAgICkKKyAqCisgKiAobm90ZTogJ+KKlSAweGM1JyBpbnNpZGUgY2FtZWxsaWFfZigpKQorICovCisuTHByZV90Zl9sb19zMToKKwkuYnl0ZSAweDQ1LCAweGU4LCAweDQwLCAweGVkLCAweDJlLCAweDgzLCAweDJiLCAweDg2CisJLmJ5dGUgMHg0YiwgMHhlNiwgMHg0ZSwgMHhlMywgMHgyMCwgMHg4ZCwgMHgyNSwgMHg4OAorLkxwcmVfdGZfaGlfczE6CisJLmJ5dGUgMHgwMCwgMHg1MSwgMHhmMSwgMHhhMCwgMHg4YSwgMHhkYiwgMHg3YiwgMHgyYQorCS5ieXRlIDB4MDksIDB4NTgsIDB4ZjgsIDB4YTksIDB4ODMsIDB4ZDIsIDB4NzIsIDB4MjMKKworLyoKKyAqIHByZS1TdWJCeXRlIHRyYW5zZm9ybQorICoKKyAqIHByZS1sb29rdXAgZm9yIHNib3g0OgorICogICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgICBpc29tX21hcF9jYW1lbGxpYV90b19hZXMoCisgKiAgICAgICAgICAgY2FtZWxsaWFfZigKKyAqICAgICAgICAgICAgICAgc3dhcF9iaXRlbmRpYW5lc3MoaW4gPDw8IDEpCisgKiAgICAgICAgICAgKQorICogICAgICAgKQorICogICApCisgKgorICogKG5vdGU6ICfiipUgMHhjNScgaW5zaWRlIGNhbWVsbGlhX2YoKSkKKyAqLworLkxwcmVfdGZfbG9fczQ6CisJLmJ5dGUgMHg0NSwgMHg0MCwgMHgyZSwgMHgyYiwgMHg0YiwgMHg0ZSwgMHgyMCwgMHgyNQorCS5ieXRlIDB4MTQsIDB4MTEsIDB4N2YsIDB4N2EsIDB4MWEsIDB4MWYsIDB4NzEsIDB4NzQKKy5McHJlX3RmX2hpX3M0OgorCS5ieXRlIDB4MDAsIDB4ZjEsIDB4OGEsIDB4N2IsIDB4MDksIDB4ZjgsIDB4ODMsIDB4NzIKKwkuYnl0ZSAweGFkLCAweDVjLCAweDI3LCAweGQ2LCAweGE0LCAweDU1LCAweDJlLCAweGRmCisKKy8qCisgKiBwb3N0LVN1YkJ5dGUgdHJhbnNmb3JtCisgKgorICogcG9zdC1sb29rdXAgZm9yIHNib3gxLCBzYm94NDoKKyAqICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgIGNhbWVsbGlhX2goCisgKiAgICAgICAgICBpc29tX21hcF9hZXNfdG9fY2FtZWxsaWEoCisgKiAgICAgICAgICAgICAgc3dhcF9iaXRlbmRpYW5uZXNzKAorICogICAgICAgICAgICAgICAgICBhZXNfaW52ZXJzZV9hZmZpbmVfdHJhbnNmb3JtKGluKQorICogICAgICAgICAgICAgICkKKyAqICAgICAgICAgICkKKyAqICAgICAgKQorICogICkKKyAqCisgKiAobm90ZTogJ+KKlSAweDZlJyBpbnNpZGUgY2FtZWxsaWFfaCgpKQorICovCisuTHBvc3RfdGZfbG9fczE6CisJLmJ5dGUgMHgzYywgMHhjYywgMHhjZiwgMHgzZiwgMHgzMiwgMHhjMiwgMHhjMSwgMHgzMQorCS5ieXRlIDB4ZGMsIDB4MmMsIDB4MmYsIDB4ZGYsIDB4ZDIsIDB4MjIsIDB4MjEsIDB4ZDEKKy5McG9zdF90Zl9oaV9zMToKKwkuYnl0ZSAweDAwLCAweGY5LCAweDg2LCAweDdmLCAweGQ3LCAweDJlLCAweDUxLCAweGE4CisJLmJ5dGUgMHhhNCwgMHg1ZCwgMHgyMiwgMHhkYiwgMHg3MywgMHg4YSwgMHhmNSwgMHgwYworCisvKgorICogcG9zdC1TdWJCeXRlIHRyYW5zZm9ybQorICoKKyAqIHBvc3QtbG9va3VwIGZvciBzYm94MjoKKyAqICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgIGNhbWVsbGlhX2goCisgKiAgICAgICAgICBpc29tX21hcF9hZXNfdG9fY2FtZWxsaWEoCisgKiAgICAgICAgICAgICAgc3dhcF9iaXRlbmRpYW5uZXNzKAorICogICAgICAgICAgICAgICAgICBhZXNfaW52ZXJzZV9hZmZpbmVfdHJhbnNmb3JtKGluKQorICogICAgICAgICAgICAgICkKKyAqICAgICAgICAgICkKKyAqICAgICAgKQorICogICkgPDw8IDEKKyAqCisgKiAobm90ZTogJ+KKlSAweDZlJyBpbnNpZGUgY2FtZWxsaWFfaCgpKQorICovCisuTHBvc3RfdGZfbG9fczI6CisJLmJ5dGUgMHg3OCwgMHg5OSwgMHg5ZiwgMHg3ZSwgMHg2NCwgMHg4NSwgMHg4MywgMHg2MgorCS5ieXRlIDB4YjksIDB4NTgsIDB4NWUsIDB4YmYsIDB4YTUsIDB4NDQsIDB4NDIsIDB4YTMKKy5McG9zdF90Zl9oaV9zMjoKKwkuYnl0ZSAweDAwLCAweGYzLCAweDBkLCAweGZlLCAweGFmLCAweDVjLCAweGEyLCAweDUxCisJLmJ5dGUgMHg0OSwgMHhiYSwgMHg0NCwgMHhiNywgMHhlNiwgMHgxNSwgMHhlYiwgMHgxOAorCisvKgorICogcG9zdC1TdWJCeXRlIHRyYW5zZm9ybQorICoKKyAqIHBvc3QtbG9va3VwIGZvciBzYm94MzoKKyAqICBzd2FwX2JpdGVuZGlhbm5lc3MoCisgKiAgICAgIGNhbWVsbGlhX2goCisgKiAgICAgICAgICBpc29tX21hcF9hZXNfdG9fY2FtZWxsaWEoCisgKiAgICAgICAgICAgICAgc3dhcF9iaXRlbmRpYW5uZXNzKAorICogICAgICAgICAgICAgICAgICBhZXNfaW52ZXJzZV9hZmZpbmVfdHJhbnNmb3JtKGluKQorICogICAgICAgICAgICAgICkKKyAqICAgICAgICAgICkKKyAqICAgICAgKQorICogICkgPj4+IDEKKyAqCisgKiAobm90ZTogJ+KKlSAweDZlJyBpbnNpZGUgY2FtZWxsaWFfaCgpKQorICovCisuTHBvc3RfdGZfbG9fczM6CisJLmJ5dGUgMHgxZSwgMHg2NiwgMHhlNywgMHg5ZiwgMHgxOSwgMHg2MSwgMHhlMCwgMHg5OAorCS5ieXRlIDB4NmUsIDB4MTYsIDB4OTcsIDB4ZWYsIDB4NjksIDB4MTEsIDB4OTAsIDB4ZTgKKy5McG9zdF90Zl9oaV9zMzoKKwkuYnl0ZSAweDAwLCAweGZjLCAweDQzLCAweGJmLCAweGViLCAweDE3LCAweGE4LCAweDU0CisJLmJ5dGUgMHg1MiwgMHhhZSwgMHgxMSwgMHhlZCwgMHhiOSwgMHg0NSwgMHhmYSwgMHgwNgorCisvKiBGb3IgaXNvbGF0aW5nIFN1YkJ5dGVzIGZyb20gQUVTRU5DTEFTVCwgaW52ZXJzZSBzaGlmdCByb3cgKi8KKy5MaW52X3NoaWZ0X3JvdzoKKwkuYnl0ZSAweDAwLCAweDBkLCAweDBhLCAweDA3LCAweDA0LCAweDAxLCAweDBlLCAweDBiCisJLmJ5dGUgMHgwOCwgMHgwNSwgMHgwMiwgMHgwZiwgMHgwYywgMHgwOSwgMHgwNiwgMHgwMworCisuYWxpZ24gNAorLyogNC1iaXQgbWFzayAqLworLkwwZjBmMGYwZjoKKwkubG9uZyAweDBmMGYwZjBmCisKKy50ZXh0CisKKy5hbGlnbiA4CisudHlwZSAgIF9fY2FtZWxsaWFfZW5jX2JsazMyLEBmdW5jdGlvbjsKKworX19jYW1lbGxpYV9lbmNfYmxrMzI6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcmF4OiB0ZW1wb3Jhcnkgc3RvcmFnZSwgNTEyIGJ5dGVzCisJICoJJXltbTAuLiV5bW0xNTogMzIgcGxhaW50ZXh0IGJsb2NrcworCSAqIG91dHB1dDoKKwkgKgkleW1tMC4uJXltbTE1OiAzMiBlbmNyeXB0ZWQgYmxvY2tzLCBvcmRlciBzd2FwcGVkOgorCSAqICAgICAgIDcsIDgsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKKwkgKi8KKworCWxlYXEgOCAqIDMyKCVyYXgpLCAlcmN4OworCisJaW5wYWNrMzJfcG9zdCgleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJCSAgICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAgICV5bW0xNSwgJXJheCwgJXJjeCk7CisKKwllbmNfcm91bmRzMzIoJXltbTAsICV5bW0xLCAleW1tMiwgJXltbTMsICV5bW00LCAleW1tNSwgJXltbTYsICV5bW03LAorCQkgICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAgJXltbTE1LCAlcmF4LCAlcmN4LCAwKTsKKworCWZsczMyKCVyYXgsICV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkgICAgICAlcmN4LCAleW1tOCwgJXltbTksICV5bW0xMCwgJXltbTExLCAleW1tMTIsICV5bW0xMywgJXltbTE0LAorCSAgICAgICV5bW0xNSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgMCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgOCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICg4KSAqIDgpICsgMTIpKENUWCkpOworCisJZW5jX3JvdW5kczMyKCV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkJICAgICAleW1tOCwgJXltbTksICV5bW0xMCwgJXltbTExLCAleW1tMTIsICV5bW0xMywgJXltbTE0LAorCQkgICAgICV5bW0xNSwgJXJheCwgJXJjeCwgOCk7CisKKwlmbHMzMiglcmF4LCAleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJICAgICAgJXJjeCwgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkgICAgICAleW1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoMTYpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMTYpICogOCkgKyAxMikoQ1RYKSk7CisKKwllbmNfcm91bmRzMzIoJXltbTAsICV5bW0xLCAleW1tMiwgJXltbTMsICV5bW00LCAleW1tNSwgJXltbTYsICV5bW03LAorCQkgICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAgJXltbTE1LCAlcmF4LCAlcmN4LCAxNik7CisKKwltb3ZsICQyNCwgJXI4ZDsKKwljbXBsICQxMjgsIGtleV9iaXRsZW5ndGgoQ1RYKTsKKwlqbmUgLkxlbmNfbWF4MzI7CisKKy5MZW5jX2RvbmU6CisJLyogbG9hZCBDRCBmb3Igb3V0cHV0ICovCisJdm1vdmRxdSAwICogMzIoJXJjeCksICV5bW04OworCXZtb3ZkcXUgMSAqIDMyKCVyY3gpLCAleW1tOTsKKwl2bW92ZHF1IDIgKiAzMiglcmN4KSwgJXltbTEwOworCXZtb3ZkcXUgMyAqIDMyKCVyY3gpLCAleW1tMTE7CisJdm1vdmRxdSA0ICogMzIoJXJjeCksICV5bW0xMjsKKwl2bW92ZHF1IDUgKiAzMiglcmN4KSwgJXltbTEzOworCXZtb3ZkcXUgNiAqIDMyKCVyY3gpLCAleW1tMTQ7CisJdm1vdmRxdSA3ICogMzIoJXJjeCksICV5bW0xNTsKKworCW91dHVucGFjazMyKCV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkJICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAleW1tMTUsIChrZXlfdGFibGUpKENUWCwgJXI4LCA4KSwgKCVyYXgpLCAxICogMzIoJXJheCkpOworCisJcmV0OworCisuYWxpZ24gOAorLkxlbmNfbWF4MzI6CisJbW92bCAkMzIsICVyOGQ7CisKKwlmbHMzMiglcmF4LCAleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJICAgICAgJXJjeCwgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkgICAgICAleW1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDI0KSAqIDgpICsgNCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAxMikoQ1RYKSk7CisKKwllbmNfcm91bmRzMzIoJXltbTAsICV5bW0xLCAleW1tMiwgJXltbTMsICV5bW00LCAleW1tNSwgJXltbTYsICV5bW03LAorCQkgICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAgJXltbTE1LCAlcmF4LCAlcmN4LCAyNCk7CisKKwlqbXAgLkxlbmNfZG9uZTsKKy5zaXplIF9fY2FtZWxsaWFfZW5jX2JsazMyLC4tX19jYW1lbGxpYV9lbmNfYmxrMzI7CisKKy5hbGlnbiA4CisudHlwZSAgIF9fY2FtZWxsaWFfZGVjX2JsazMyLEBmdW5jdGlvbjsKKworX19jYW1lbGxpYV9kZWNfYmxrMzI6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcmF4OiB0ZW1wb3Jhcnkgc3RvcmFnZSwgNTEyIGJ5dGVzCisJICoJJXI4ZDogMjQgZm9yIDE2IGJ5dGUga2V5LCAzMiBmb3IgbGFyZ2VyCisJICoJJXltbTAuLiV5bW0xNTogMTYgZW5jcnlwdGVkIGJsb2NrcworCSAqIG91dHB1dDoKKwkgKgkleW1tMC4uJXltbTE1OiAxNiBwbGFpbnRleHQgYmxvY2tzLCBvcmRlciBzd2FwcGVkOgorCSAqICAgICAgIDcsIDgsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKKwkgKi8KKworCWxlYXEgOCAqIDMyKCVyYXgpLCAlcmN4OworCisJaW5wYWNrMzJfcG9zdCgleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJCSAgICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAgICV5bW0xNSwgJXJheCwgJXJjeCk7CisKKwljbXBsICQzMiwgJXI4ZDsKKwlqZSAuTGRlY19tYXgzMjsKKworLkxkZWNfbWF4MjQ6CisJZGVjX3JvdW5kczMyKCV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkJICAgICAleW1tOCwgJXltbTksICV5bW0xMCwgJXltbTExLCAleW1tMTIsICV5bW0xMywgJXltbTE0LAorCQkgICAgICV5bW0xNSwgJXJheCwgJXJjeCwgMTYpOworCisJZmxzMzIoJXJheCwgJXltbTAsICV5bW0xLCAleW1tMiwgJXltbTMsICV5bW00LCAleW1tNSwgJXltbTYsICV5bW03LAorCSAgICAgICVyY3gsICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJICAgICAgJXltbTE1LAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgOCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDEyKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDE2KSAqIDgpICsgMCkoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgxNikgKiA4KSArIDQpKENUWCkpOworCisJZGVjX3JvdW5kczMyKCV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkJICAgICAleW1tOCwgJXltbTksICV5bW0xMCwgJXltbTExLCAleW1tMTIsICV5bW0xMywgJXltbTE0LAorCQkgICAgICV5bW0xNSwgJXJheCwgJXJjeCwgOCk7CisKKwlmbHMzMiglcmF4LCAleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJICAgICAgJXJjeCwgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkgICAgICAleW1tMTUsCisJICAgICAgKChrZXlfdGFibGUgKyAoOCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoOCkgKiA4KSArIDEyKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDgpICogOCkgKyAwKShDVFgpLAorCSAgICAgICgoa2V5X3RhYmxlICsgKDgpICogOCkgKyA0KShDVFgpKTsKKworCWRlY19yb3VuZHMzMigleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJCSAgICAgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkJICAgICAleW1tMTUsICVyYXgsICVyY3gsIDApOworCisJLyogbG9hZCBDRCBmb3Igb3V0cHV0ICovCisJdm1vdmRxdSAwICogMzIoJXJjeCksICV5bW04OworCXZtb3ZkcXUgMSAqIDMyKCVyY3gpLCAleW1tOTsKKwl2bW92ZHF1IDIgKiAzMiglcmN4KSwgJXltbTEwOworCXZtb3ZkcXUgMyAqIDMyKCVyY3gpLCAleW1tMTE7CisJdm1vdmRxdSA0ICogMzIoJXJjeCksICV5bW0xMjsKKwl2bW92ZHF1IDUgKiAzMiglcmN4KSwgJXltbTEzOworCXZtb3ZkcXUgNiAqIDMyKCVyY3gpLCAleW1tMTQ7CisJdm1vdmRxdSA3ICogMzIoJXJjeCksICV5bW0xNTsKKworCW91dHVucGFjazMyKCV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkJICAgICV5bW04LCAleW1tOSwgJXltbTEwLCAleW1tMTEsICV5bW0xMiwgJXltbTEzLCAleW1tMTQsCisJCSAgICAleW1tMTUsIChrZXlfdGFibGUpKENUWCksICglcmF4KSwgMSAqIDMyKCVyYXgpKTsKKworCXJldDsKKworLmFsaWduIDgKKy5MZGVjX21heDMyOgorCWRlY19yb3VuZHMzMigleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJCSAgICAgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkJICAgICAleW1tMTUsICVyYXgsICVyY3gsIDI0KTsKKworCWZsczMyKCVyYXgsICV5bW0wLCAleW1tMSwgJXltbTIsICV5bW0zLCAleW1tNCwgJXltbTUsICV5bW02LCAleW1tNywKKwkgICAgICAlcmN4LCAleW1tOCwgJXltbTksICV5bW0xMCwgJXltbTExLCAleW1tMTIsICV5bW0xMywgJXltbTE0LAorCSAgICAgICV5bW0xNSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDgpKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyAxMikoQ1RYKSwKKwkgICAgICAoKGtleV90YWJsZSArICgyNCkgKiA4KSArIDApKENUWCksCisJICAgICAgKChrZXlfdGFibGUgKyAoMjQpICogOCkgKyA0KShDVFgpKTsKKworCWptcCAuTGRlY19tYXgyNDsKKy5zaXplIF9fY2FtZWxsaWFfZGVjX2JsazMyLC4tX19jYW1lbGxpYV9kZWNfYmxrMzI7CisKKyNkZWZpbmUgaW5jX2xlMTI4KHgsIG1pbnVzX29uZSwgdG1wKSBcCisJdnBjbXBlcXEgbWludXNfb25lLCB4LCB0bXA7IFwKKwl2cHN1YnEgbWludXNfb25lLCB4LCB4OyBcCisJdnBzbGxkcSAkOCwgdG1wLCB0bXA7IFwKKwl2cHN1YnEgdG1wLCB4LCB4OworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY3RyX2VuYworLnR5cGUgICBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2N0cl9lbmMsQGZ1bmN0aW9uOworCitfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDMyIGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDMyIGJsb2NrcykKKwkgKgklcmN4OiBpdiAoYmlnIGVuZGlhbiwgMTI4Yml0KQorCSAqLworCisJcHVzaHEgJXJicDsKKwltb3ZxICVyc3AsICVyYnA7CisKKwltb3ZxIDgoJXJjeCksICVyMTE7CisJYnN3YXBxICVyMTE7CisKKwl2emVyb3VwcGVyOworCisJc3VicSAkKDE2ICogMzIpLCAlcnNwOworCWFuZHEgJH42MywgJXJzcDsKKwltb3ZxICVyc3AsICVyYXg7CisKKwl2cGNtcGVxZCAleW1tMTUsICV5bW0xNSwgJXltbTE1OworCXZwc3JsZHEgJDgsICV5bW0xNSwgJXltbTE1OyAvKiBhYjogLTE6MCA7IGNkOiAtMTowICovCisKKwkvKiBsb2FkIElWIGFuZCBieXRlc3dhcCAqLworCXZtb3ZkcXUgKCVyY3gpLCAleG1tMDsKKwl2cHNodWZiIC5MYnN3YXAxMjhfbWFzayBSSVAsICV4bW0wLCAleG1tMDsKKwl2bW92ZHFhICV4bW0wLCAleG1tMTsKKwlpbmNfbGUxMjgoJXhtbTAsICV4bW0xNSwgJXhtbTE0KTsKKwl2YnJvYWRjYXN0aTEyOCAuTGJzd2FwMTI4X21hc2sgUklQLCAleW1tMTQ7CisJdmluc2VydGkxMjggJDEsICV4bW0wLCAleW1tMSwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMTM7CisJdm1vdmRxdSAleW1tMTMsIDE1ICogMzIoJXJheCk7CisKKwkvKiBjaGVjayBuZWVkIGZvciBoYW5kbGluZyA2NC1iaXQgb3ZlcmZsb3cgYW5kIGNhcnJ5ICovCisJY21wcSAkKDB4ZmZmZmZmZmZmZmZmZmZmZiAtIDMyKSwgJXIxMTsKKwlqYSAuTGxvYWRfY3RyX2NhcnJ5OworCisJLyogY29uc3RydWN0IElWcyAqLworCXZwYWRkcSAleW1tMTUsICV5bW0xNSwgJXltbTE1OyAvKiBhYjogLTI6MCA7IGNkOiAtMjowICovCisJdnBzdWJxICV5bW0xNSwgJXltbTAsICV5bW0wOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTEzOworCXZtb3ZkcXUgJXltbTEzLCAxNCAqIDMyKCVyYXgpOworCXZwc3VicSAleW1tMTUsICV5bW0wLCAleW1tMDsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW0xMzsKKwl2bW92ZHF1ICV5bW0xMywgMTMgKiAzMiglcmF4KTsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMTI7CisJdnBzdWJxICV5bW0xNSwgJXltbTAsICV5bW0wOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTExOworCXZwc3VicSAleW1tMTUsICV5bW0wLCAleW1tMDsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW0xMDsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tOTsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tODsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tNzsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tNjsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tNTsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tNDsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMzsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMjsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMTsKKwl2cHN1YnEgJXltbTE1LCAleW1tMCwgJXltbTA7ICAvKiArMzAgOyArMzEgKi8KKwl2cHN1YnEgJXhtbTE1LCAleG1tMCwgJXhtbTEzOyAvKiArMzIgKi8KKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW0wOworCXZwc2h1ZmIgJXhtbTE0LCAleG1tMTMsICV4bW0xMzsKKwl2bW92ZHF1ICV4bW0xMywgKCVyY3gpOworCisJam1wIC5MbG9hZF9jdHJfZG9uZTsKKworLmFsaWduIDQKKy5MbG9hZF9jdHJfY2Fycnk6CisJLyogY29uc3RydWN0IElWcyAqLworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOyAvKiBhYjogbGUxIDsgY2Q6IGxlMiAqLworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOyAvKiBhYjogbGUyIDsgY2Q6IGxlMyAqLworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTEzOworCXZtb3ZkcXUgJXltbTEzLCAxNCAqIDMyKCVyYXgpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTEzOworCXZtb3ZkcXUgJXltbTEzLCAxMyAqIDMyKCVyYXgpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTEyOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTExOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTEwOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTk7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tODsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW03OworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTY7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tNTsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW00OworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZwc2h1ZmIgJXltbTE0LCAleW1tMCwgJXltbTM7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJaW5jX2xlMTI4KCV5bW0wLCAleW1tMTUsICV5bW0xMyk7CisJdnBzaHVmYiAleW1tMTQsICV5bW0wLCAleW1tMjsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwlpbmNfbGUxMjgoJXltbTAsICV5bW0xNSwgJXltbTEzKTsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW0xOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCWluY19sZTEyOCgleW1tMCwgJXltbTE1LCAleW1tMTMpOworCXZleHRyYWN0aTEyOCAkMSwgJXltbTAsICV4bW0xMzsKKwl2cHNodWZiICV5bW0xNCwgJXltbTAsICV5bW0wOworCWluY19sZTEyOCgleG1tMTMsICV4bW0xNSwgJXhtbTE0KTsKKwl2cHNodWZiIC5MYnN3YXAxMjhfbWFzayBSSVAsICV4bW0xMywgJXhtbTEzOworCXZtb3ZkcXUgJXhtbTEzLCAoJXJjeCk7CisKKy5hbGlnbiA0CisuTGxvYWRfY3RyX2RvbmU6CisJLyogaW5wYWNrMTZfcHJlOiAqLworCXZwYnJvYWRjYXN0cSAoa2V5X3RhYmxlKShDVFgpLCAleW1tMTU7CisJdnBzaHVmYiAuTHBhY2tfYnN3YXAgUklQLCAleW1tMTUsICV5bW0xNTsKKwl2cHhvciAleW1tMCwgJXltbTE1LCAleW1tMDsKKwl2cHhvciAleW1tMSwgJXltbTE1LCAleW1tMTsKKwl2cHhvciAleW1tMiwgJXltbTE1LCAleW1tMjsKKwl2cHhvciAleW1tMywgJXltbTE1LCAleW1tMzsKKwl2cHhvciAleW1tNCwgJXltbTE1LCAleW1tNDsKKwl2cHhvciAleW1tNSwgJXltbTE1LCAleW1tNTsKKwl2cHhvciAleW1tNiwgJXltbTE1LCAleW1tNjsKKwl2cHhvciAleW1tNywgJXltbTE1LCAleW1tNzsKKwl2cHhvciAleW1tOCwgJXltbTE1LCAleW1tODsKKwl2cHhvciAleW1tOSwgJXltbTE1LCAleW1tOTsKKwl2cHhvciAleW1tMTAsICV5bW0xNSwgJXltbTEwOworCXZweG9yICV5bW0xMSwgJXltbTE1LCAleW1tMTE7CisJdnB4b3IgJXltbTEyLCAleW1tMTUsICV5bW0xMjsKKwl2cHhvciAxMyAqIDMyKCVyYXgpLCAleW1tMTUsICV5bW0xMzsKKwl2cHhvciAxNCAqIDMyKCVyYXgpLCAleW1tMTUsICV5bW0xNDsKKwl2cHhvciAxNSAqIDMyKCVyYXgpLCAleW1tMTUsICV5bW0xNTsKKworCWNhbGwgX19jYW1lbGxpYV9lbmNfYmxrMzI7CisKKwl2cHhvciAwICogMzIoJXJkeCksICV5bW03LCAleW1tNzsKKwl2cHhvciAxICogMzIoJXJkeCksICV5bW02LCAleW1tNjsKKwl2cHhvciAyICogMzIoJXJkeCksICV5bW01LCAleW1tNTsKKwl2cHhvciAzICogMzIoJXJkeCksICV5bW00LCAleW1tNDsKKwl2cHhvciA0ICogMzIoJXJkeCksICV5bW0zLCAleW1tMzsKKwl2cHhvciA1ICogMzIoJXJkeCksICV5bW0yLCAleW1tMjsKKwl2cHhvciA2ICogMzIoJXJkeCksICV5bW0xLCAleW1tMTsKKwl2cHhvciA3ICogMzIoJXJkeCksICV5bW0wLCAleW1tMDsKKwl2cHhvciA4ICogMzIoJXJkeCksICV5bW0xNSwgJXltbTE1OworCXZweG9yIDkgKiAzMiglcmR4KSwgJXltbTE0LCAleW1tMTQ7CisJdnB4b3IgMTAgKiAzMiglcmR4KSwgJXltbTEzLCAleW1tMTM7CisJdnB4b3IgMTEgKiAzMiglcmR4KSwgJXltbTEyLCAleW1tMTI7CisJdnB4b3IgMTIgKiAzMiglcmR4KSwgJXltbTExLCAleW1tMTE7CisJdnB4b3IgMTMgKiAzMiglcmR4KSwgJXltbTEwLCAleW1tMTA7CisJdnB4b3IgMTQgKiAzMiglcmR4KSwgJXltbTksICV5bW05OworCXZweG9yIDE1ICogMzIoJXJkeCksICV5bW04LCAleW1tODsKKwlsZWFxIDMyICogMTYoJXJkeCksICVyZHg7CisKKwl3cml0ZV9vdXRwdXQoJXltbTcsICV5bW02LCAleW1tNSwgJXltbTQsICV5bW0zLCAleW1tMiwgJXltbTEsICV5bW0wLAorCQkgICAgICV5bW0xNSwgJXltbTE0LCAleW1tMTMsICV5bW0xMiwgJXltbTExLCAleW1tMTAsICV5bW05LAorCQkgICAgICV5bW04LCAlcnNpKTsKKworCXZ6ZXJvYWxsOworCisJbGVhdmU7CisJcmV0OworLnNpemUgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jdHJfZW5jLC4tX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jdHJfZW5jOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYworLnR5cGUgICBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NiY19kZWMsQGZ1bmN0aW9uOworCitfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NiY19kZWM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJcHVzaHEgJXJicDsKKwltb3ZxICVyc3AsICVyYnA7CisKKwl2emVyb3VwcGVyOworCisJbW92cSAlcmN4LCAlcjk7CisKKwljbXBsICQxMjgsIGtleV9iaXRsZW5ndGgoQ1RYKTsKKwltb3ZsICQzMiwgJXI4ZDsKKwltb3ZsICQyNCwgJWVheDsKKwljbW92ZWwgJWVheCwgJXI4ZDsgLyogbWF4ICovCisKKwlzdWJxICQoMTYgKiAzMiksICVyc3A7CisJYW5kcSAkfjYzLCAlcnNwOworCW1vdnEgJXJzcCwgJXJheDsKKworCWlucGFjazMyX3ByZSgleW1tMCwgJXltbTEsICV5bW0yLCAleW1tMywgJXltbTQsICV5bW01LCAleW1tNiwgJXltbTcsCisJCSAgICAgJXltbTgsICV5bW05LCAleW1tMTAsICV5bW0xMSwgJXltbTEyLCAleW1tMTMsICV5bW0xNCwKKwkJICAgICAleW1tMTUsICVyZHgsIChrZXlfdGFibGUpKENUWCwgJXI4LCA4KSk7CisKKwljYWxsIF9fY2FtZWxsaWFfZGVjX2JsazMyOworCisJLyogWE9SIG91dHB1dCB3aXRoIElWICovCisJdm1vdmRxdSAleW1tOCwgKCVyYXgpOworCXZtb3ZkcXUgKCVyOSksICV4bW04OworCXZpbnNlcnRpMTI4ICQxLCAoJXJkeCksICV5bW04LCAleW1tODsKKwl2cHhvciAleW1tOCwgJXltbTcsICV5bW03OworCXZtb3ZkcXUgKCVyYXgpLCAleW1tODsKKwl2cHhvciAoMCAqIDMyICsgMTYpKCVyZHgpLCAleW1tNiwgJXltbTY7CisJdnB4b3IgKDEgKiAzMiArIDE2KSglcmR4KSwgJXltbTUsICV5bW01OworCXZweG9yICgyICogMzIgKyAxNikoJXJkeCksICV5bW00LCAleW1tNDsKKwl2cHhvciAoMyAqIDMyICsgMTYpKCVyZHgpLCAleW1tMywgJXltbTM7CisJdnB4b3IgKDQgKiAzMiArIDE2KSglcmR4KSwgJXltbTIsICV5bW0yOworCXZweG9yICg1ICogMzIgKyAxNikoJXJkeCksICV5bW0xLCAleW1tMTsKKwl2cHhvciAoNiAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTA7CisJdnB4b3IgKDcgKiAzMiArIDE2KSglcmR4KSwgJXltbTE1LCAleW1tMTU7CisJdnB4b3IgKDggKiAzMiArIDE2KSglcmR4KSwgJXltbTE0LCAleW1tMTQ7CisJdnB4b3IgKDkgKiAzMiArIDE2KSglcmR4KSwgJXltbTEzLCAleW1tMTM7CisJdnB4b3IgKDEwICogMzIgKyAxNikoJXJkeCksICV5bW0xMiwgJXltbTEyOworCXZweG9yICgxMSAqIDMyICsgMTYpKCVyZHgpLCAleW1tMTEsICV5bW0xMTsKKwl2cHhvciAoMTIgKiAzMiArIDE2KSglcmR4KSwgJXltbTEwLCAleW1tMTA7CisJdnB4b3IgKDEzICogMzIgKyAxNikoJXJkeCksICV5bW05LCAleW1tOTsKKwl2cHhvciAoMTQgKiAzMiArIDE2KSglcmR4KSwgJXltbTgsICV5bW04OworCW1vdnEgKDE1ICogMzIgKyAxNiArIDApKCVyZHgpLCAlcmF4OworCW1vdnEgKDE1ICogMzIgKyAxNiArIDgpKCVyZHgpLCAlcmN4OworCisJd3JpdGVfb3V0cHV0KCV5bW03LCAleW1tNiwgJXltbTUsICV5bW00LCAleW1tMywgJXltbTIsICV5bW0xLCAleW1tMCwKKwkJICAgICAleW1tMTUsICV5bW0xNCwgJXltbTEzLCAleW1tMTIsICV5bW0xMSwgJXltbTEwLCAleW1tOSwKKwkJICAgICAleW1tOCwgJXJzaSk7CisKKwkvKiBzdG9yZSBuZXcgSVYgKi8KKwltb3ZxICVyYXgsICgwKSglcjkpOworCW1vdnEgJXJjeCwgKDgpKCVyOSk7CisKKwl2emVyb2FsbDsKKworCWxlYXZlOworCXJldDsKKy5zaXplIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYywuLV9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYzsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NmYl9kZWMKKy50eXBlICAgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jZmJfZGVjLEBmdW5jdGlvbjsKKworX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4Ml9jZmJfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0ICgxNiBibG9ja3MpCisJICoJJXJkeDogc3JjICgxNiBibG9ja3MpCisJICoJJXJjeDogaXYKKwkgKi8KKworCXB1c2hxICVyYnA7CisJbW92cSAlcnNwLCAlcmJwOworCisJdnplcm91cHBlcjsKKworCXN1YnEgJCgxNiAqIDMyKSwgJXJzcDsKKwlhbmRxICR+NjMsICVyc3A7CisJbW92cSAlcnNwLCAlcmF4OworCisJLyogaW5wYWNrMTZfcHJlOiAqLworCXZwYnJvYWRjYXN0cSAoa2V5X3RhYmxlKShDVFgpLCAleW1tMDsKKwl2cHNodWZiIC5McGFja19ic3dhcCBSSVAsICV5bW0wLCAleW1tMDsKKwl2bW92ZHF1ICglcmN4KSwgJXhtbTE1OworCXZpbnNlcnRpMTI4ICQxLCAoJXJkeCksICV5bW0xNSwgJXltbTE1OworCXZweG9yICV5bW0xNSwgJXltbTAsICV5bW0xNTsKKwl2bW92ZHF1ICgxNSAqIDMyICsgMTYpKCVyZHgpLCAleG1tMTsKKwl2bW92ZHF1ICV4bW0xLCAoJXJjeCk7IC8qIHN0b3JlIG5ldyBJViAqLworCXZweG9yICgwICogMzIgKyAxNikoJXJkeCksICV5bW0wLCAleW1tMTQ7CisJdnB4b3IgKDEgKiAzMiArIDE2KSglcmR4KSwgJXltbTAsICV5bW0xMzsKKwl2cHhvciAoMiAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTEyOworCXZweG9yICgzICogMzIgKyAxNikoJXJkeCksICV5bW0wLCAleW1tMTE7CisJdnB4b3IgKDQgKiAzMiArIDE2KSglcmR4KSwgJXltbTAsICV5bW0xMDsKKwl2cHhvciAoNSAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTk7CisJdnB4b3IgKDYgKiAzMiArIDE2KSglcmR4KSwgJXltbTAsICV5bW04OworCXZweG9yICg3ICogMzIgKyAxNikoJXJkeCksICV5bW0wLCAleW1tNzsKKwl2cHhvciAoOCAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTY7CisJdnB4b3IgKDkgKiAzMiArIDE2KSglcmR4KSwgJXltbTAsICV5bW01OworCXZweG9yICgxMCAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTQ7CisJdnB4b3IgKDExICogMzIgKyAxNikoJXJkeCksICV5bW0wLCAleW1tMzsKKwl2cHhvciAoMTIgKiAzMiArIDE2KSglcmR4KSwgJXltbTAsICV5bW0yOworCXZweG9yICgxMyAqIDMyICsgMTYpKCVyZHgpLCAleW1tMCwgJXltbTE7CisJdnB4b3IgKDE0ICogMzIgKyAxNikoJXJkeCksICV5bW0wLCAleW1tMDsKKworCWNhbGwgX19jYW1lbGxpYV9lbmNfYmxrMzI7CisKKwl2cHhvciAwICogMzIoJXJkeCksICV5bW03LCAleW1tNzsKKwl2cHhvciAxICogMzIoJXJkeCksICV5bW02LCAleW1tNjsKKwl2cHhvciAyICogMzIoJXJkeCksICV5bW01LCAleW1tNTsKKwl2cHhvciAzICogMzIoJXJkeCksICV5bW00LCAleW1tNDsKKwl2cHhvciA0ICogMzIoJXJkeCksICV5bW0zLCAleW1tMzsKKwl2cHhvciA1ICogMzIoJXJkeCksICV5bW0yLCAleW1tMjsKKwl2cHhvciA2ICogMzIoJXJkeCksICV5bW0xLCAleW1tMTsKKwl2cHhvciA3ICogMzIoJXJkeCksICV5bW0wLCAleW1tMDsKKwl2cHhvciA4ICogMzIoJXJkeCksICV5bW0xNSwgJXltbTE1OworCXZweG9yIDkgKiAzMiglcmR4KSwgJXltbTE0LCAleW1tMTQ7CisJdnB4b3IgMTAgKiAzMiglcmR4KSwgJXltbTEzLCAleW1tMTM7CisJdnB4b3IgMTEgKiAzMiglcmR4KSwgJXltbTEyLCAleW1tMTI7CisJdnB4b3IgMTIgKiAzMiglcmR4KSwgJXltbTExLCAleW1tMTE7CisJdnB4b3IgMTMgKiAzMiglcmR4KSwgJXltbTEwLCAleW1tMTA7CisJdnB4b3IgMTQgKiAzMiglcmR4KSwgJXltbTksICV5bW05OworCXZweG9yIDE1ICogMzIoJXJkeCksICV5bW04LCAleW1tODsKKworCXdyaXRlX291dHB1dCgleW1tNywgJXltbTYsICV5bW01LCAleW1tNCwgJXltbTMsICV5bW0yLCAleW1tMSwgJXltbTAsCisJCSAgICAgJXltbTE1LCAleW1tMTQsICV5bW0xMywgJXltbTEyLCAleW1tMTEsICV5bW0xMCwgJXltbTksCisJCSAgICAgJXltbTgsICVyc2kpOworCisJdnplcm9hbGw7CisKKwlsZWF2ZTsKKwlyZXQ7Cisuc2l6ZSBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NmYl9kZWMsLi1fZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NmYl9kZWM7CisKKyNlbmRpZiAvKmRlZmluZWQoRU5BQkxFX0FFU05JX1NVUFBPUlQpICYmIGRlZmluZWQoRU5BQkxFX0FWWDJfU1VQUE9SVCkqLworI2VuZGlmIC8qX194ODZfNjQqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NhbWVsbGlhLWFybS5TIGIvY2lwaGVyL2NhbWVsbGlhLWFybS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGQxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2FtZWxsaWEtYXJtLlMKQEAgLTAsMCArMSw2MTMgQEAKKy8qIGNhbWVsbGlhLWFybS5TICAtICBBUk0gYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgQ2FtZWxsaWEgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyNpZmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUworCisudGV4dAorCisuc3ludGF4IHVuaWZpZWQKKy5hcm0KKworLyogc3RydWN0IGNhbWVsbGlhX2N0eDogKi8KKyNkZWZpbmUga2V5X3RhYmxlIDAKKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIENUWCAlcjAKKyNkZWZpbmUgUlRBQjEgJWlwCisjZGVmaW5lIFJUQUIzICVyMQorI2RlZmluZSBSTUFTSyAlbHIKKworI2RlZmluZSBJTCAlcjIKKyNkZWZpbmUgSVIgJXIzCisKKyNkZWZpbmUgWEwgJXI0CisjZGVmaW5lIFhSICVyNQorI2RlZmluZSBZTCAlcjYKKyNkZWZpbmUgWVIgJXI3CisKKyNkZWZpbmUgUlQwICVyOAorI2RlZmluZSBSVDEgJXI5CisjZGVmaW5lIFJUMiAlcjEwCisjZGVmaW5lIFJUMyAlcjExCisKKy8qIGhlbHBlciBtYWNyb3MgKi8KKyNkZWZpbmUgbGRyX3VuYWxpZ25lZF9iZShyb3V0LCByc3JjLCBvZmZzLCBydG1wKSBcCisJbGRyYiByb3V0LCBbcnNyYywgIygob2ZmcykgKyAzKV07IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDIpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzg7IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDEpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzE2OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAwKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMyNDsKKworI2RlZmluZSBzdHJfdW5hbGlnbmVkX2JlKHJpbiwgcmRzdCwgb2ZmcywgcnRtcDAsIHJ0bXAxKSBcCisJbW92IHJ0bXAwLCByaW4sIGxzciAjODsgXAorCXN0cmIgcmluLCBbcmRzdCwgIygob2ZmcykgKyAzKV07IFwKKwltb3YgcnRtcDEsIHJpbiwgbHNyICMxNjsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDIpXTsgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzI0OyBcCisJc3RyYiBydG1wMSwgW3Jkc3QsICMoKG9mZnMpICsgMSldOyBcCisJc3RyYiBydG1wMCwgW3Jkc3QsICMoKG9mZnMpICsgMCldOworCisjaWZkZWYgX19BUk1FTF9fCisjaWZkZWYgSEFWRV9BUk1fQVJDSF9WNgorCSNkZWZpbmUgaG9zdF90b19iZShyZWcsIHJ0bXApIFwKKwkJcmV2IHJlZywgcmVnOworCSNkZWZpbmUgYmVfdG9faG9zdChyZWcsIHJ0bXApIFwKKwkJcmV2IHJlZywgcmVnOworI2Vsc2UKKwkjZGVmaW5lIGhvc3RfdG9fYmUocmVnLCBydG1wKSBcCisJCWVvcglydG1wLCByZWcsIHJlZywgcm9yICMxNjsgXAorCQltb3YJcnRtcCwgcnRtcCwgbHNyICM4OyBcCisJCWJpYwlydG1wLCBydG1wLCAjNjUyODA7IFwKKwkJZW9yCXJlZywgcnRtcCwgcmVnLCByb3IgIzg7CisJI2RlZmluZSBiZV90b19ob3N0KHJlZywgcnRtcCkgXAorCQllb3IJcnRtcCwgcmVnLCByZWcsIHJvciAjMTY7IFwKKwkJbW92CXJ0bXAsIHJ0bXAsIGxzciAjODsgXAorCQliaWMJcnRtcCwgcnRtcCwgIzY1MjgwOyBcCisJCWVvcglyZWcsIHJ0bXAsIHJlZywgcm9yICM4OworI2VuZGlmCisjZWxzZQorCS8qIG5vcCBvbiBiaWctZW5kaWFuICovCisJI2RlZmluZSBob3N0X3RvX2JlKHJlZywgcnRtcCkgLypfKi8KKwkjZGVmaW5lIGJlX3RvX2hvc3QocmVnLCBydG1wKSAvKl8qLworI2VuZGlmCisKKyNkZWZpbmUgbGRyX2lucHV0X2FsaWduZWRfYmUocmluLCBhLCBiLCBjLCBkLCBydG1wKSBcCisJbGRyIGEsIFtyaW4sICMwXTsgXAorCWxkciBiLCBbcmluLCAjNF07IFwKKwliZV90b19ob3N0KGEsIHJ0bXApOyBcCisJbGRyIGMsIFtyaW4sICM4XTsgXAorCWJlX3RvX2hvc3QoYiwgcnRtcCk7IFwKKwlsZHIgZCwgW3JpbiwgIzEyXTsgXAorCWJlX3RvX2hvc3QoYywgcnRtcCk7IFwKKwliZV90b19ob3N0KGQsIHJ0bXApOworCisjZGVmaW5lIHN0cl9vdXRwdXRfYWxpZ25lZF9iZShyb3V0LCBhLCBiLCBjLCBkLCBydG1wKSBcCisJYmVfdG9faG9zdChhLCBydG1wKTsgXAorCWJlX3RvX2hvc3QoYiwgcnRtcCk7IFwKKwlzdHIgYSwgW3JvdXQsICMwXTsgXAorCWJlX3RvX2hvc3QoYywgcnRtcCk7IFwKKwlzdHIgYiwgW3JvdXQsICM0XTsgXAorCWJlX3RvX2hvc3QoZCwgcnRtcCk7IFwKKwlzdHIgYywgW3JvdXQsICM4XTsgXAorCXN0ciBkLCBbcm91dCwgIzEyXTsKKworI2lmZGVmIF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVECisJLyogdW5hbGlnbmVkIHdvcmQgcmVhZHMvd3JpdGVzIGFsbG93ZWQgKi8KKwkjZGVmaW5lIGxkcl9pbnB1dF9iZShyaW4sIHJhLCByYiwgcmMsIHJkLCBydG1wKSBcCisJCWxkcl9pbnB1dF9hbGlnbmVkX2JlKHJpbiwgcmEsIHJiLCByYywgcmQsIHJ0bXApCisKKwkjZGVmaW5lIHN0cl9vdXRwdXRfYmUocm91dCwgcmEsIHJiLCByYywgcmQsIHJ0bXAwLCBydG1wMSkgXAorCQlzdHJfb3V0cHV0X2FsaWduZWRfYmUocm91dCwgcmEsIHJiLCByYywgcmQsIHJ0bXAwKQorI2Vsc2UKKwkvKiBuZWVkIHRvIGhhbmRsZSB1bmFsaWduZWQgcmVhZHMvd3JpdGVzIGJ5IGJ5dGUgcmVhZHMgKi8KKwkjZGVmaW5lIGxkcl9pbnB1dF9iZShyaW4sIHJhLCByYiwgcmMsIHJkLCBydG1wMCkgXAorCQl0c3QgcmluLCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUocmEsIHJpbiwgMCwgcnRtcDApOyBcCisJCQlsZHJfdW5hbGlnbmVkX2JlKHJiLCByaW4sIDQsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9iZShyYywgcmluLCA4LCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUocmQsIHJpbiwgMTIsIHJ0bXAwKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlsZHJfaW5wdXRfYWxpZ25lZF9iZShyaW4sIHJhLCByYiwgcmMsIHJkLCBydG1wMCk7IFwKKwkJMjo7CisKKwkjZGVmaW5lIHN0cl9vdXRwdXRfYmUocm91dCwgcmEsIHJiLCByYywgcmQsIHJ0bXAwLCBydG1wMSkgXAorCQl0c3Qgcm91dCwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHJhLCByb3V0LCAwLCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHJiLCByb3V0LCA0LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHJjLCByb3V0LCA4LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2JlKHJkLCByb3V0LCAxMiwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlzdHJfb3V0cHV0X2FsaWduZWRfYmUocm91dCwgcmEsIHJiLCByYywgcmQsIHJ0bXAwKTsgXAorCQkyOjsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAxLXdheSBjYW1lbGxpYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIHJvdW5kc20oeGwsIHhyLCBrbCwga3IsIHlsLCB5cikgXAorCWxkciBSVDIsIFtDVFgsICMoa2V5X3RhYmxlICsgKChrbCkgKiA0KSldOyBcCisJYW5kICBJUiwgUk1BU0ssIHhyLCBsc2wjKDQpOyAgICAgIC8qc3AxMTEwKi8gXAorCWxkciBSVDMsIFtDVFgsICMoa2V5X3RhYmxlICsgKChrcikgKiA0KSldOyBcCisJYW5kICBJTCwgUk1BU0ssIHhsLCBsc3IjKDI0IC0gNCk7IC8qc3AxMTEwKi8gXAorCWFuZCBSVDAsIFJNQVNLLCB4ciwgbHNyIygxNiAtIDQpOyAvKnNwMzAzMyovIFwKKwlsZHIgIElSLCBbUlRBQjEsICBJUl07IFwKKwlhbmQgUlQxLCBSTUFTSywgeGwsIGxzciMoOCAtIDQpOyAgLypzcDMwMzMqLyBcCisJZW9yIHlsLCBSVDI7IFwKKwlsZHIgIElMLCBbUlRBQjEsICBJTF07IFwKKwllb3IgeXIsIFJUMzsgXAorCVwKKwlsZHIgUlQwLCBbUlRBQjMsIFJUMF07IFwKKwlhZGQgUlRBQjEsICM0OyBcCisJbGRyIFJUMSwgW1JUQUIzLCBSVDFdOyBcCisJYWRkIFJUQUIzLCAjNDsgXAorCVwKKwlhbmQgUlQyLCBSTUFTSywgeHIsIGxzciMoMjQgLSA0KTsgLypzcDAyMjIqLyBcCisJYW5kIFJUMywgUk1BU0ssIHhsLCBsc3IjKDE2IC0gNCk7IC8qc3AwMjIyKi8gXAorCVwKKwllb3IgSVIsIFJUMDsgXAorCWVvciBJTCwgUlQxOyBcCisJXAorCWxkciBSVDIsIFtSVEFCMSwgUlQyXTsgXAorCWFuZCBSVDAsIFJNQVNLLCB4ciwgbHNyIyg4IC0gNCk7ICAvKnNwNDQwNCovIFwKKwlsZHIgUlQzLCBbUlRBQjEsIFJUM107IFwKKwlhbmQgUlQxLCBSTUFTSywgeGwsIGxzbCMoNCk7ICAgICAgLypzcDQ0MDQqLyBcCisJXAorCWxkciBSVDAsIFtSVEFCMywgUlQwXTsgXAorCXN1YiBSVEFCMSwgIzQ7IFwKKwlsZHIgUlQxLCBbUlRBQjMsIFJUMV07IFwKKwlzdWIgUlRBQjMsICM0OyBcCisJXAorCWVvciBJUiwgUlQyOyBcCisJZW9yIElMLCBSVDM7IFwKKwllb3IgSVIsIFJUMDsgXAorCWVvciBJTCwgUlQxOyBcCisJXAorCWVvciBJUiwgSUw7IFwKKwllb3IgeXIsIHlyLCBJTCwgcm9yIzg7IFwKKwllb3IgeWwsIElSOyBcCisJZW9yIHlyLCBJUjsKKworI2RlZmluZSBlbmNfcm91bmRzKG4pIFwKKwlyb3VuZHNtKFhMLCBYUiwgKChuKSArIDIpICogMiArIDAsICgobikgKyAyKSAqIDIgKyAxLCBZTCwgWVIpOyBcCisJcm91bmRzbShZTCwgWVIsICgobikgKyAzKSAqIDIgKyAwLCAoKG4pICsgMykgKiAyICsgMSwgWEwsIFhSKTsgXAorCXJvdW5kc20oWEwsIFhSLCAoKG4pICsgNCkgKiAyICsgMCwgKChuKSArIDQpICogMiArIDEsIFlMLCBZUik7IFwKKwlyb3VuZHNtKFlMLCBZUiwgKChuKSArIDUpICogMiArIDAsICgobikgKyA1KSAqIDIgKyAxLCBYTCwgWFIpOyBcCisJcm91bmRzbShYTCwgWFIsICgobikgKyA2KSAqIDIgKyAwLCAoKG4pICsgNikgKiAyICsgMSwgWUwsIFlSKTsgXAorCXJvdW5kc20oWUwsIFlSLCAoKG4pICsgNykgKiAyICsgMCwgKChuKSArIDcpICogMiArIDEsIFhMLCBYUik7CisKKyNkZWZpbmUgZGVjX3JvdW5kcyhuKSBcCisJcm91bmRzbShYTCwgWFIsICgobikgKyA3KSAqIDIgKyAwLCAoKG4pICsgNykgKiAyICsgMSwgWUwsIFlSKTsgXAorCXJvdW5kc20oWUwsIFlSLCAoKG4pICsgNikgKiAyICsgMCwgKChuKSArIDYpICogMiArIDEsIFhMLCBYUik7IFwKKwlyb3VuZHNtKFhMLCBYUiwgKChuKSArIDUpICogMiArIDAsICgobikgKyA1KSAqIDIgKyAxLCBZTCwgWVIpOyBcCisJcm91bmRzbShZTCwgWVIsICgobikgKyA0KSAqIDIgKyAwLCAoKG4pICsgNCkgKiAyICsgMSwgWEwsIFhSKTsgXAorCXJvdW5kc20oWEwsIFhSLCAoKG4pICsgMykgKiAyICsgMCwgKChuKSArIDMpICogMiArIDEsIFlMLCBZUik7IFwKKwlyb3VuZHNtKFlMLCBZUiwgKChuKSArIDIpICogMiArIDAsICgobikgKyAyKSAqIDIgKyAxLCBYTCwgWFIpOworCisvKiBwZXJmb3JtIEZMIGFuZCBGTOKBu8K5ICovCisjZGVmaW5lIGZscyhsbCwgbHIsIHJsLCByciwga2xsLCBrbHIsIGtybCwga3JyKSBcCisJbGRyIFJUMCwgW0NUWCwgIyhrZXlfdGFibGUgKyAoKGtsbCkgKiA0KSldOyBcCisJbGRyIFJUMiwgW0NUWCwgIyhrZXlfdGFibGUgKyAoKGtycikgKiA0KSldOyBcCisJYW5kIFJUMCwgbGw7IFwKKwlsZHIgUlQzLCBbQ1RYLCAjKGtleV90YWJsZSArICgoa3JsKSAqIDQpKV07IFwKKwlvcnIgUlQyLCBycjsgXAorCWxkciBSVDEsIFtDVFgsICMoa2V5X3RhYmxlICsgKChrbHIpICogNCkpXTsgXAorCWVvciBybCwgUlQyOyBcCisJZW9yIGxyLCBsciwgUlQwLCByb3IjMzE7IFwKKwlhbmQgUlQzLCBybDsgXAorCW9yciBSVDEsIGxyOyBcCisJZW9yIGxsLCBSVDE7IFwKKwllb3IgcnIsIHJyLCBSVDMsIHJvciMzMTsKKworI2RlZmluZSBlbmNfZmxzKG4pIFwKKwlmbHMoWEwsIFhSLCBZTCwgWVIsIFwKKwkgICAgKG4pICogMiArIDAsIChuKSAqIDIgKyAxLCBcCisJICAgIChuKSAqIDIgKyAyLCAobikgKiAyICsgMyk7CisKKyNkZWZpbmUgZGVjX2ZscyhuKSBcCisJZmxzKFhMLCBYUiwgWUwsIFlSLCBcCisJICAgIChuKSAqIDIgKyAyLCAobikgKiAyICsgMywgXAorCSAgICAobikgKiAyICsgMCwgKG4pICogMiArIDEpOworCisjZGVmaW5lIGlucGFjayhuKSBcCisJbGRyX2lucHV0X2JlKCVyMiwgWEwsIFhSLCBZTCwgWVIsIFJUMCk7IFwKKwlsZHIgUlQwLCBbQ1RYLCAjKGtleV90YWJsZSArICgobikgKiA4KSArIDApXTsgXAorCWxkciBSVDEsIFtDVFgsICMoa2V5X3RhYmxlICsgKChuKSAqIDgpICsgNCldOyBcCisJZW9yIFhMLCBSVDA7IFwKKwllb3IgWFIsIFJUMTsKKworI2RlZmluZSBvdXR1bnBhY2sobikgXAorCWxkciBSVDAsIFtDVFgsICMoa2V5X3RhYmxlICsgKChuKSAqIDgpICsgMCldOyBcCisJbGRyIFJUMSwgW0NUWCwgIyhrZXlfdGFibGUgKyAoKG4pICogOCkgKyA0KV07IFwKKwllb3IgWUwsIFJUMDsgXAorCWVvciBZUiwgUlQxOyBcCisJc3RyX291dHB1dF9iZSglcjEsIFlMLCBZUiwgWEwsIFhSLCBSVDAsIFJUMSk7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfY2FtZWxsaWFfYXJtX2VuY3J5cHRfYmxvY2sKKy50eXBlICAgX2djcnlfY2FtZWxsaWFfYXJtX2VuY3J5cHRfYmxvY2ssJWZ1bmN0aW9uOworCitfZ2NyeV9jYW1lbGxpYV9hcm1fZW5jcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcjA6IGtleXRhYmxlCisJICoJJXIxOiBkc3QKKwkgKgklcjI6IHNyYworCSAqCSVyMzoga2V5Yml0bGVuCisJICovCisJcHVzaCB7JXIxLCAlcjQtJXIxMSwgJWlwLCAlbHJ9OworCisJbGRyIFJUQUIxLCA9LkxjYW1lbGxpYV9zcDExMTA7CisJbW92IFJNQVNLLCAjMHhmZjsKKwlhZGQgUlRBQjMsIFJUQUIxLCAjKDIgKiA0KTsKKwlwdXNoIHslcjN9OworCW1vdiBSTUFTSywgUk1BU0ssIGxzbCM0IC8qIGJ5dGUgbWFzayAqLworCisJaW5wYWNrKDApOworCisJZW5jX3JvdW5kcygwKTsKKwllbmNfZmxzKDgpOworCWVuY19yb3VuZHMoOCk7CisJZW5jX2ZscygxNik7CisJZW5jX3JvdW5kcygxNik7CisKKwlwb3Age1JUMH07CisJY21wIFJUMCwgIygxNiAqIDgpOworCWJuZSAuTGVuY18yNTY7CisKKwlwb3AgeyVyMX07CisJb3V0dW5wYWNrKDI0KTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5sdG9yZworCisuTGVuY18yNTY6CisJZW5jX2ZscygyNCk7CisJZW5jX3JvdW5kcygyNCk7CisKKwlwb3AgeyVyMX07CisJb3V0dW5wYWNrKDMyKTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5sdG9yZworLnNpemUgX2djcnlfY2FtZWxsaWFfYXJtX2VuY3J5cHRfYmxvY2ssLi1fZ2NyeV9jYW1lbGxpYV9hcm1fZW5jcnlwdF9ibG9jazsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9jYW1lbGxpYV9hcm1fZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV9jYW1lbGxpYV9hcm1fZGVjcnlwdF9ibG9jaywlZnVuY3Rpb247CisKK19nY3J5X2NhbWVsbGlhX2FybV9kZWNyeXB0X2Jsb2NrOgorCS8qIGlucHV0OgorCSAqCSVyMDoga2V5dGFibGUKKwkgKgklcjE6IGRzdAorCSAqCSVyMjogc3JjCisJICoJJXIzOiBrZXliaXRsZW4KKwkgKi8KKwlwdXNoIHslcjEsICVyNC0lcjExLCAlaXAsICVscn07CisKKwlsZHIgUlRBQjEsID0uTGNhbWVsbGlhX3NwMTExMDsKKwltb3YgUk1BU0ssICMweGZmOworCWFkZCBSVEFCMywgUlRBQjEsICMoMiAqIDQpOworCW1vdiBSTUFTSywgUk1BU0ssIGxzbCM0IC8qIGJ5dGUgbWFzayAqLworCisJY21wICVyMywgIygxNiAqIDgpOworCWJuZSAuTGRlY18yNTY7CisKKwlpbnBhY2soMjQpOworCisuTGRlY18xMjg6CisJZGVjX3JvdW5kcygxNik7CisJZGVjX2ZscygxNik7CisJZGVjX3JvdW5kcyg4KTsKKwlkZWNfZmxzKDgpOworCWRlY19yb3VuZHMoMCk7CisKKwlwb3AgeyVyMX07CisJb3V0dW5wYWNrKDApOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisKKy5MZGVjXzI1NjoKKwlpbnBhY2soMzIpOworCWRlY19yb3VuZHMoMjQpOworCWRlY19mbHMoMjQpOworCisJYiAuTGRlY18xMjg7CisubHRvcmcKKy5zaXplIF9nY3J5X2NhbWVsbGlhX2FybV9kZWNyeXB0X2Jsb2NrLC4tX2djcnlfY2FtZWxsaWFfYXJtX2RlY3J5cHRfYmxvY2s7CisKKy5kYXRhCisKKy8qIEVuY3J5cHRpb24vRGVjcnlwdGlvbiB0YWJsZXMgKi8KKy5hbGlnbiA1CisuTGNhbWVsbGlhX3NwMTExMDoKKy5sb25nIDB4NzA3MDcwMDAKKy5MY2FtZWxsaWFfc3AwMjIyOgorICAgICAgICAgICAgLmxvbmcgMHgwMGUwZTBlMAorLkxjYW1lbGxpYV9zcDMwMzM6CisgICAgICAgICAgICAgICAgICAgICAgICAubG9uZyAweDM4MDAzODM4CisuTGNhbWVsbGlhX3NwNDQwNDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nIDB4NzA3MDAwNzAKKy5sb25nIDB4ODI4MjgyMDAsIDB4MDAwNTA1MDUsIDB4NDEwMDQxNDEsIDB4MmMyYzAwMmMKKy5sb25nIDB4MmMyYzJjMDAsIDB4MDA1ODU4NTgsIDB4MTYwMDE2MTYsIDB4YjNiMzAwYjMKKy5sb25nIDB4ZWNlY2VjMDAsIDB4MDBkOWQ5ZDksIDB4NzYwMDc2NzYsIDB4YzBjMDAwYzAKKy5sb25nIDB4YjNiM2IzMDAsIDB4MDA2NzY3NjcsIDB4ZDkwMGQ5ZDksIDB4ZTRlNDAwZTQKKy5sb25nIDB4MjcyNzI3MDAsIDB4MDA0ZTRlNGUsIDB4OTMwMDkzOTMsIDB4NTc1NzAwNTcKKy5sb25nIDB4YzBjMGMwMDAsIDB4MDA4MTgxODEsIDB4NjAwMDYwNjAsIDB4ZWFlYTAwZWEKKy5sb25nIDB4ZTVlNWU1MDAsIDB4MDBjYmNiY2IsIDB4ZjIwMGYyZjIsIDB4YWVhZTAwYWUKKy5sb25nIDB4ZTRlNGU0MDAsIDB4MDBjOWM5YzksIDB4NzIwMDcyNzIsIDB4MjMyMzAwMjMKKy5sb25nIDB4ODU4NTg1MDAsIDB4MDAwYjBiMGIsIDB4YzIwMGMyYzIsIDB4NmI2YjAwNmIKKy5sb25nIDB4NTc1NzU3MDAsIDB4MDBhZWFlYWUsIDB4YWIwMGFiYWIsIDB4NDU0NTAwNDUKKy5sb25nIDB4MzUzNTM1MDAsIDB4MDA2YTZhNmEsIDB4OWEwMDlhOWEsIDB4YTVhNTAwYTUKKy5sb25nIDB4ZWFlYWVhMDAsIDB4MDBkNWQ1ZDUsIDB4NzUwMDc1NzUsIDB4ZWRlZDAwZWQKKy5sb25nIDB4MGMwYzBjMDAsIDB4MDAxODE4MTgsIDB4MDYwMDA2MDYsIDB4NGY0ZjAwNGYKKy5sb25nIDB4YWVhZWFlMDAsIDB4MDA1ZDVkNWQsIDB4NTcwMDU3NTcsIDB4MWQxZDAwMWQKKy5sb25nIDB4NDE0MTQxMDAsIDB4MDA4MjgyODIsIDB4YTAwMGEwYTAsIDB4OTI5MjAwOTIKKy5sb25nIDB4MjMyMzIzMDAsIDB4MDA0NjQ2NDYsIDB4OTEwMDkxOTEsIDB4ODY4NjAwODYKKy5sb25nIDB4ZWZlZmVmMDAsIDB4MDBkZmRmZGYsIDB4ZjcwMGY3ZjcsIDB4YWZhZjAwYWYKKy5sb25nIDB4NmI2YjZiMDAsIDB4MDBkNmQ2ZDYsIDB4YjUwMGI1YjUsIDB4N2M3YzAwN2MKKy5sb25nIDB4OTM5MzkzMDAsIDB4MDAyNzI3MjcsIDB4YzkwMGM5YzksIDB4MWYxZjAwMWYKKy5sb25nIDB4NDU0NTQ1MDAsIDB4MDA4YThhOGEsIDB4YTIwMGEyYTIsIDB4M2UzZTAwM2UKKy5sb25nIDB4MTkxOTE5MDAsIDB4MDAzMjMyMzIsIDB4OGMwMDhjOGMsIDB4ZGNkYzAwZGMKKy5sb25nIDB4YTVhNWE1MDAsIDB4MDA0YjRiNGIsIDB4ZDIwMGQyZDIsIDB4NWU1ZTAwNWUKKy5sb25nIDB4MjEyMTIxMDAsIDB4MDA0MjQyNDIsIDB4OTAwMDkwOTAsIDB4MGIwYjAwMGIKKy5sb25nIDB4ZWRlZGVkMDAsIDB4MDBkYmRiZGIsIDB4ZjYwMGY2ZjYsIDB4YTZhNjAwYTYKKy5sb25nIDB4MGUwZTBlMDAsIDB4MDAxYzFjMWMsIDB4MDcwMDA3MDcsIDB4MzkzOTAwMzkKKy5sb25nIDB4NGY0ZjRmMDAsIDB4MDA5ZTllOWUsIDB4YTcwMGE3YTcsIDB4ZDVkNTAwZDUKKy5sb25nIDB4NGU0ZTRlMDAsIDB4MDA5YzljOWMsIDB4MjcwMDI3MjcsIDB4NWQ1ZDAwNWQKKy5sb25nIDB4MWQxZDFkMDAsIDB4MDAzYTNhM2EsIDB4OGUwMDhlOGUsIDB4ZDlkOTAwZDkKKy5sb25nIDB4NjU2NTY1MDAsIDB4MDBjYWNhY2EsIDB4YjIwMGIyYjIsIDB4NWE1YTAwNWEKKy5sb25nIDB4OTI5MjkyMDAsIDB4MDAyNTI1MjUsIDB4NDkwMDQ5NDksIDB4NTE1MTAwNTEKKy5sb25nIDB4YmRiZGJkMDAsIDB4MDA3YjdiN2IsIDB4ZGUwMGRlZGUsIDB4NmM2YzAwNmMKKy5sb25nIDB4ODY4Njg2MDAsIDB4MDAwZDBkMGQsIDB4NDMwMDQzNDMsIDB4OGI4YjAwOGIKKy5sb25nIDB4YjhiOGI4MDAsIDB4MDA3MTcxNzEsIDB4NWMwMDVjNWMsIDB4OWE5YTAwOWEKKy5sb25nIDB4YWZhZmFmMDAsIDB4MDA1ZjVmNWYsIDB4ZDcwMGQ3ZDcsIDB4ZmJmYjAwZmIKKy5sb25nIDB4OGY4ZjhmMDAsIDB4MDAxZjFmMWYsIDB4YzcwMGM3YzcsIDB4YjBiMDAwYjAKKy5sb25nIDB4N2M3YzdjMDAsIDB4MDBmOGY4ZjgsIDB4M2UwMDNlM2UsIDB4NzQ3NDAwNzQKKy5sb25nIDB4ZWJlYmViMDAsIDB4MDBkN2Q3ZDcsIDB4ZjUwMGY1ZjUsIDB4MmIyYjAwMmIKKy5sb25nIDB4MWYxZjFmMDAsIDB4MDAzZTNlM2UsIDB4OGYwMDhmOGYsIDB4ZjBmMDAwZjAKKy5sb25nIDB4Y2VjZWNlMDAsIDB4MDA5ZDlkOWQsIDB4NjcwMDY3NjcsIDB4ODQ4NDAwODQKKy5sb25nIDB4M2UzZTNlMDAsIDB4MDA3YzdjN2MsIDB4MWYwMDFmMWYsIDB4ZGZkZjAwZGYKKy5sb25nIDB4MzAzMDMwMDAsIDB4MDA2MDYwNjAsIDB4MTgwMDE4MTgsIDB4Y2JjYjAwY2IKKy5sb25nIDB4ZGNkY2RjMDAsIDB4MDBiOWI5YjksIDB4NmUwMDZlNmUsIDB4MzQzNDAwMzQKKy5sb25nIDB4NWY1ZjVmMDAsIDB4MDBiZWJlYmUsIDB4YWYwMGFmYWYsIDB4NzY3NjAwNzYKKy5sb25nIDB4NWU1ZTVlMDAsIDB4MDBiY2JjYmMsIDB4MmYwMDJmMmYsIDB4NmQ2ZDAwNmQKKy5sb25nIDB4YzVjNWM1MDAsIDB4MDA4YjhiOGIsIDB4ZTIwMGUyZTIsIDB4YTlhOTAwYTkKKy5sb25nIDB4MGIwYjBiMDAsIDB4MDAxNjE2MTYsIDB4ODUwMDg1ODUsIDB4ZDFkMTAwZDEKKy5sb25nIDB4MWExYTFhMDAsIDB4MDAzNDM0MzQsIDB4MGQwMDBkMGQsIDB4MDQwNDAwMDQKKy5sb25nIDB4YTZhNmE2MDAsIDB4MDA0ZDRkNGQsIDB4NTMwMDUzNTMsIDB4MTQxNDAwMTQKKy5sb25nIDB4ZTFlMWUxMDAsIDB4MDBjM2MzYzMsIDB4ZjAwMGYwZjAsIDB4M2EzYTAwM2EKKy5sb25nIDB4MzkzOTM5MDAsIDB4MDA3MjcyNzIsIDB4OWMwMDljOWMsIDB4ZGVkZTAwZGUKKy5sb25nIDB4Y2FjYWNhMDAsIDB4MDA5NTk1OTUsIDB4NjUwMDY1NjUsIDB4MTExMTAwMTEKKy5sb25nIDB4ZDVkNWQ1MDAsIDB4MDBhYmFiYWIsIDB4ZWEwMGVhZWEsIDB4MzIzMjAwMzIKKy5sb25nIDB4NDc0NzQ3MDAsIDB4MDA4ZThlOGUsIDB4YTMwMGEzYTMsIDB4OWM5YzAwOWMKKy5sb25nIDB4NWQ1ZDVkMDAsIDB4MDBiYWJhYmEsIDB4YWUwMGFlYWUsIDB4NTM1MzAwNTMKKy5sb25nIDB4M2QzZDNkMDAsIDB4MDA3YTdhN2EsIDB4OWUwMDllOWUsIDB4ZjJmMjAwZjIKKy5sb25nIDB4ZDlkOWQ5MDAsIDB4MDBiM2IzYjMsIDB4ZWMwMGVjZWMsIDB4ZmVmZTAwZmUKKy5sb25nIDB4MDEwMTAxMDAsIDB4MDAwMjAyMDIsIDB4ODAwMDgwODAsIDB4Y2ZjZjAwY2YKKy5sb25nIDB4NWE1YTVhMDAsIDB4MDBiNGI0YjQsIDB4MmQwMDJkMmQsIDB4YzNjMzAwYzMKKy5sb25nIDB4ZDZkNmQ2MDAsIDB4MDBhZGFkYWQsIDB4NmIwMDZiNmIsIDB4N2E3YTAwN2EKKy5sb25nIDB4NTE1MTUxMDAsIDB4MDBhMmEyYTIsIDB4YTgwMGE4YTgsIDB4MjQyNDAwMjQKKy5sb25nIDB4NTY1NjU2MDAsIDB4MDBhY2FjYWMsIDB4MmIwMDJiMmIsIDB4ZThlODAwZTgKKy5sb25nIDB4NmM2YzZjMDAsIDB4MDBkOGQ4ZDgsIDB4MzYwMDM2MzYsIDB4NjA2MDAwNjAKKy5sb25nIDB4NGQ0ZDRkMDAsIDB4MDA5YTlhOWEsIDB4YTYwMGE2YTYsIDB4Njk2OTAwNjkKKy5sb25nIDB4OGI4YjhiMDAsIDB4MDAxNzE3MTcsIDB4YzUwMGM1YzUsIDB4YWFhYTAwYWEKKy5sb25nIDB4MGQwZDBkMDAsIDB4MDAxYTFhMWEsIDB4ODYwMDg2ODYsIDB4YTBhMDAwYTAKKy5sb25nIDB4OWE5YTlhMDAsIDB4MDAzNTM1MzUsIDB4NGQwMDRkNGQsIDB4YTFhMTAwYTEKKy5sb25nIDB4NjY2NjY2MDAsIDB4MDBjY2NjY2MsIDB4MzMwMDMzMzMsIDB4NjI2MjAwNjIKKy5sb25nIDB4ZmJmYmZiMDAsIDB4MDBmN2Y3ZjcsIDB4ZmQwMGZkZmQsIDB4NTQ1NDAwNTQKKy5sb25nIDB4Y2NjY2NjMDAsIDB4MDA5OTk5OTksIDB4NjYwMDY2NjYsIDB4MWUxZTAwMWUKKy5sb25nIDB4YjBiMGIwMDAsIDB4MDA2MTYxNjEsIDB4NTgwMDU4NTgsIDB4ZTBlMDAwZTAKKy5sb25nIDB4MmQyZDJkMDAsIDB4MDA1YTVhNWEsIDB4OTYwMDk2OTYsIDB4NjQ2NDAwNjQKKy5sb25nIDB4NzQ3NDc0MDAsIDB4MDBlOGU4ZTgsIDB4M2EwMDNhM2EsIDB4MTAxMDAwMTAKKy5sb25nIDB4MTIxMjEyMDAsIDB4MDAyNDI0MjQsIDB4MDkwMDA5MDksIDB4MDAwMDAwMDAKKy5sb25nIDB4MmIyYjJiMDAsIDB4MDA1NjU2NTYsIDB4OTUwMDk1OTUsIDB4YTNhMzAwYTMKKy5sb25nIDB4MjAyMDIwMDAsIDB4MDA0MDQwNDAsIDB4MTAwMDEwMTAsIDB4NzU3NTAwNzUKKy5sb25nIDB4ZjBmMGYwMDAsIDB4MDBlMWUxZTEsIDB4NzgwMDc4NzgsIDB4OGE4YTAwOGEKKy5sb25nIDB4YjFiMWIxMDAsIDB4MDA2MzYzNjMsIDB4ZDgwMGQ4ZDgsIDB4ZTZlNjAwZTYKKy5sb25nIDB4ODQ4NDg0MDAsIDB4MDAwOTA5MDksIDB4NDIwMDQyNDIsIDB4MDkwOTAwMDkKKy5sb25nIDB4OTk5OTk5MDAsIDB4MDAzMzMzMzMsIDB4Y2MwMGNjY2MsIDB4ZGRkZDAwZGQKKy5sb25nIDB4ZGZkZmRmMDAsIDB4MDBiZmJmYmYsIDB4ZWYwMGVmZWYsIDB4ODc4NzAwODcKKy5sb25nIDB4NGM0YzRjMDAsIDB4MDA5ODk4OTgsIDB4MjYwMDI2MjYsIDB4ODM4MzAwODMKKy5sb25nIDB4Y2JjYmNiMDAsIDB4MDA5Nzk3OTcsIDB4ZTUwMGU1ZTUsIDB4Y2RjZDAwY2QKKy5sb25nIDB4YzJjMmMyMDAsIDB4MDA4NTg1ODUsIDB4NjEwMDYxNjEsIDB4OTA5MDAwOTAKKy5sb25nIDB4MzQzNDM0MDAsIDB4MDA2ODY4NjgsIDB4MWEwMDFhMWEsIDB4NzM3MzAwNzMKKy5sb25nIDB4N2U3ZTdlMDAsIDB4MDBmY2ZjZmMsIDB4M2YwMDNmM2YsIDB4ZjZmNjAwZjYKKy5sb25nIDB4NzY3Njc2MDAsIDB4MDBlY2VjZWMsIDB4M2IwMDNiM2IsIDB4OWQ5ZDAwOWQKKy5sb25nIDB4MDUwNTA1MDAsIDB4MDAwYTBhMGEsIDB4ODIwMDgyODIsIDB4YmZiZjAwYmYKKy5sb25nIDB4NmQ2ZDZkMDAsIDB4MDBkYWRhZGEsIDB4YjYwMGI2YjYsIDB4NTI1MjAwNTIKKy5sb25nIDB4YjdiN2I3MDAsIDB4MDA2ZjZmNmYsIDB4ZGIwMGRiZGIsIDB4ZDhkODAwZDgKKy5sb25nIDB4YTlhOWE5MDAsIDB4MDA1MzUzNTMsIDB4ZDQwMGQ0ZDQsIDB4YzhjODAwYzgKKy5sb25nIDB4MzEzMTMxMDAsIDB4MDA2MjYyNjIsIDB4OTgwMDk4OTgsIDB4YzZjNjAwYzYKKy5sb25nIDB4ZDFkMWQxMDAsIDB4MDBhM2EzYTMsIDB4ZTgwMGU4ZTgsIDB4ODE4MTAwODEKKy5sb25nIDB4MTcxNzE3MDAsIDB4MDAyZTJlMmUsIDB4OGIwMDhiOGIsIDB4NmY2ZjAwNmYKKy5sb25nIDB4MDQwNDA0MDAsIDB4MDAwODA4MDgsIDB4MDIwMDAyMDIsIDB4MTMxMzAwMTMKKy5sb25nIDB4ZDdkN2Q3MDAsIDB4MDBhZmFmYWYsIDB4ZWIwMGViZWIsIDB4NjM2MzAwNjMKKy5sb25nIDB4MTQxNDE0MDAsIDB4MDAyODI4MjgsIDB4MGEwMDBhMGEsIDB4ZTllOTAwZTkKKy5sb25nIDB4NTg1ODU4MDAsIDB4MDBiMGIwYjAsIDB4MmMwMDJjMmMsIDB4YTdhNzAwYTcKKy5sb25nIDB4M2EzYTNhMDAsIDB4MDA3NDc0NzQsIDB4MWQwMDFkMWQsIDB4OWY5ZjAwOWYKKy5sb25nIDB4NjE2MTYxMDAsIDB4MDBjMmMyYzIsIDB4YjAwMGIwYjAsIDB4YmNiYzAwYmMKKy5sb25nIDB4ZGVkZWRlMDAsIDB4MDBiZGJkYmQsIDB4NmYwMDZmNmYsIDB4MjkyOTAwMjkKKy5sb25nIDB4MWIxYjFiMDAsIDB4MDAzNjM2MzYsIDB4OGQwMDhkOGQsIDB4ZjlmOTAwZjkKKy5sb25nIDB4MTExMTExMDAsIDB4MDAyMjIyMjIsIDB4ODgwMDg4ODgsIDB4MmYyZjAwMmYKKy5sb25nIDB4MWMxYzFjMDAsIDB4MDAzODM4MzgsIDB4MGUwMDBlMGUsIDB4YjRiNDAwYjQKKy5sb25nIDB4MzIzMjMyMDAsIDB4MDA2NDY0NjQsIDB4MTkwMDE5MTksIDB4Nzg3ODAwNzgKKy5sb25nIDB4MGYwZjBmMDAsIDB4MDAxZTFlMWUsIDB4ODcwMDg3ODcsIDB4MDYwNjAwMDYKKy5sb25nIDB4OWM5YzljMDAsIDB4MDAzOTM5MzksIDB4NGUwMDRlNGUsIDB4ZTdlNzAwZTcKKy5sb25nIDB4MTYxNjE2MDAsIDB4MDAyYzJjMmMsIDB4MGIwMDBiMGIsIDB4NzE3MTAwNzEKKy5sb25nIDB4NTM1MzUzMDAsIDB4MDBhNmE2YTYsIDB4YTkwMGE5YTksIDB4ZDRkNDAwZDQKKy5sb25nIDB4MTgxODE4MDAsIDB4MDAzMDMwMzAsIDB4MGMwMDBjMGMsIDB4YWJhYjAwYWIKKy5sb25nIDB4ZjJmMmYyMDAsIDB4MDBlNWU1ZTUsIDB4NzkwMDc5NzksIDB4ODg4ODAwODgKKy5sb25nIDB4MjIyMjIyMDAsIDB4MDA0NDQ0NDQsIDB4MTEwMDExMTEsIDB4OGQ4ZDAwOGQKKy5sb25nIDB4ZmVmZWZlMDAsIDB4MDBmZGZkZmQsIDB4N2YwMDdmN2YsIDB4NzI3MjAwNzIKKy5sb25nIDB4NDQ0NDQ0MDAsIDB4MDA4ODg4ODgsIDB4MjIwMDIyMjIsIDB4YjliOTAwYjkKKy5sb25nIDB4Y2ZjZmNmMDAsIDB4MDA5ZjlmOWYsIDB4ZTcwMGU3ZTcsIDB4ZjhmODAwZjgKKy5sb25nIDB4YjJiMmIyMDAsIDB4MDA2NTY1NjUsIDB4NTkwMDU5NTksIDB4YWNhYzAwYWMKKy5sb25nIDB4YzNjM2MzMDAsIDB4MDA4Nzg3ODcsIDB4ZTEwMGUxZTEsIDB4MzYzNjAwMzYKKy5sb25nIDB4YjViNWI1MDAsIDB4MDA2YjZiNmIsIDB4ZGEwMGRhZGEsIDB4MmEyYTAwMmEKKy5sb25nIDB4N2E3YTdhMDAsIDB4MDBmNGY0ZjQsIDB4M2QwMDNkM2QsIDB4M2MzYzAwM2MKKy5sb25nIDB4OTE5MTkxMDAsIDB4MDAyMzIzMjMsIDB4YzgwMGM4YzgsIDB4ZjFmMTAwZjEKKy5sb25nIDB4MjQyNDI0MDAsIDB4MDA0ODQ4NDgsIDB4MTIwMDEyMTIsIDB4NDA0MDAwNDAKKy5sb25nIDB4MDgwODA4MDAsIDB4MDAxMDEwMTAsIDB4MDQwMDA0MDQsIDB4ZDNkMzAwZDMKKy5sb25nIDB4ZThlOGU4MDAsIDB4MDBkMWQxZDEsIDB4NzQwMDc0NzQsIDB4YmJiYjAwYmIKKy5sb25nIDB4YThhOGE4MDAsIDB4MDA1MTUxNTEsIDB4NTQwMDU0NTQsIDB4NDM0MzAwNDMKKy5sb25nIDB4NjA2MDYwMDAsIDB4MDBjMGMwYzAsIDB4MzAwMDMwMzAsIDB4MTUxNTAwMTUKKy5sb25nIDB4ZmNmY2ZjMDAsIDB4MDBmOWY5ZjksIDB4N2UwMDdlN2UsIDB4YWRhZDAwYWQKKy5sb25nIDB4Njk2OTY5MDAsIDB4MDBkMmQyZDIsIDB4YjQwMGI0YjQsIDB4Nzc3NzAwNzcKKy5sb25nIDB4NTA1MDUwMDAsIDB4MDBhMGEwYTAsIDB4MjgwMDI4MjgsIDB4ODA4MDAwODAKKy5sb25nIDB4YWFhYWFhMDAsIDB4MDA1NTU1NTUsIDB4NTUwMDU1NTUsIDB4ODI4MjAwODIKKy5sb25nIDB4ZDBkMGQwMDAsIDB4MDBhMWExYTEsIDB4NjgwMDY4NjgsIDB4ZWNlYzAwZWMKKy5sb25nIDB4YTBhMGEwMDAsIDB4MDA0MTQxNDEsIDB4NTAwMDUwNTAsIDB4MjcyNzAwMjcKKy5sb25nIDB4N2Q3ZDdkMDAsIDB4MDBmYWZhZmEsIDB4YmUwMGJlYmUsIDB4ZTVlNTAwZTUKKy5sb25nIDB4YTFhMWExMDAsIDB4MDA0MzQzNDMsIDB4ZDAwMGQwZDAsIDB4ODU4NTAwODUKKy5sb25nIDB4ODk4OTg5MDAsIDB4MDAxMzEzMTMsIDB4YzQwMGM0YzQsIDB4MzUzNTAwMzUKKy5sb25nIDB4NjI2MjYyMDAsIDB4MDBjNGM0YzQsIDB4MzEwMDMxMzEsIDB4MGMwYzAwMGMKKy5sb25nIDB4OTc5Nzk3MDAsIDB4MDAyZjJmMmYsIDB4Y2IwMGNiY2IsIDB4NDE0MTAwNDEKKy5sb25nIDB4NTQ1NDU0MDAsIDB4MDBhOGE4YTgsIDB4MmEwMDJhMmEsIDB4ZWZlZjAwZWYKKy5sb25nIDB4NWI1YjViMDAsIDB4MDBiNmI2YjYsIDB4YWQwMGFkYWQsIDB4OTM5MzAwOTMKKy5sb25nIDB4MWUxZTFlMDAsIDB4MDAzYzNjM2MsIDB4MGYwMDBmMGYsIDB4MTkxOTAwMTkKKy5sb25nIDB4OTU5NTk1MDAsIDB4MDAyYjJiMmIsIDB4Y2EwMGNhY2EsIDB4MjEyMTAwMjEKKy5sb25nIDB4ZTBlMGUwMDAsIDB4MDBjMWMxYzEsIDB4NzAwMDcwNzAsIDB4MGUwZTAwMGUKKy5sb25nIDB4ZmZmZmZmMDAsIDB4MDBmZmZmZmYsIDB4ZmYwMGZmZmYsIDB4NGU0ZTAwNGUKKy5sb25nIDB4NjQ2NDY0MDAsIDB4MDBjOGM4YzgsIDB4MzIwMDMyMzIsIDB4NjU2NTAwNjUKKy5sb25nIDB4ZDJkMmQyMDAsIDB4MDBhNWE1YTUsIDB4NjkwMDY5NjksIDB4YmRiZDAwYmQKKy5sb25nIDB4MTAxMDEwMDAsIDB4MDAyMDIwMjAsIDB4MDgwMDA4MDgsIDB4YjhiODAwYjgKKy5sb25nIDB4YzRjNGM0MDAsIDB4MDA4OTg5ODksIDB4NjIwMDYyNjIsIDB4OGY4ZjAwOGYKKy5sb25nIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZWJlYjAwZWIKKy5sb25nIDB4NDg0ODQ4MDAsIDB4MDA5MDkwOTAsIDB4MjQwMDI0MjQsIDB4Y2VjZTAwY2UKKy5sb25nIDB4YTNhM2EzMDAsIDB4MDA0NzQ3NDcsIDB4ZDEwMGQxZDEsIDB4MzAzMDAwMzAKKy5sb25nIDB4ZjdmN2Y3MDAsIDB4MDBlZmVmZWYsIDB4ZmIwMGZiZmIsIDB4NWY1ZjAwNWYKKy5sb25nIDB4NzU3NTc1MDAsIDB4MDBlYWVhZWEsIDB4YmEwMGJhYmEsIDB4YzVjNTAwYzUKKy5sb25nIDB4ZGJkYmRiMDAsIDB4MDBiN2I3YjcsIDB4ZWQwMGVkZWQsIDB4MWExYTAwMWEKKy5sb25nIDB4OGE4YThhMDAsIDB4MDAxNTE1MTUsIDB4NDUwMDQ1NDUsIDB4ZTFlMTAwZTEKKy5sb25nIDB4MDMwMzAzMDAsIDB4MDAwNjA2MDYsIDB4ODEwMDgxODEsIDB4Y2FjYTAwY2EKKy5sb25nIDB4ZTZlNmU2MDAsIDB4MDBjZGNkY2QsIDB4NzMwMDczNzMsIDB4NDc0NzAwNDcKKy5sb25nIDB4ZGFkYWRhMDAsIDB4MDBiNWI1YjUsIDB4NmQwMDZkNmQsIDB4M2QzZDAwM2QKKy5sb25nIDB4MDkwOTA5MDAsIDB4MDAxMjEyMTIsIDB4ODQwMDg0ODQsIDB4MDEwMTAwMDEKKy5sb25nIDB4M2YzZjNmMDAsIDB4MDA3ZTdlN2UsIDB4OWYwMDlmOWYsIDB4ZDZkNjAwZDYKKy5sb25nIDB4ZGRkZGRkMDAsIDB4MDBiYmJiYmIsIDB4ZWUwMGVlZWUsIDB4NTY1NjAwNTYKKy5sb25nIDB4OTQ5NDk0MDAsIDB4MDAyOTI5MjksIDB4NGEwMDRhNGEsIDB4NGQ0ZDAwNGQKKy5sb25nIDB4ODc4Nzg3MDAsIDB4MDAwZjBmMGYsIDB4YzMwMGMzYzMsIDB4MGQwZDAwMGQKKy5sb25nIDB4NWM1YzVjMDAsIDB4MDBiOGI4YjgsIDB4MmUwMDJlMmUsIDB4NjY2NjAwNjYKKy5sb25nIDB4ODM4MzgzMDAsIDB4MDAwNzA3MDcsIDB4YzEwMGMxYzEsIDB4Y2NjYzAwY2MKKy5sb25nIDB4MDIwMjAyMDAsIDB4MDAwNDA0MDQsIDB4MDEwMDAxMDEsIDB4MmQyZDAwMmQKKy5sb25nIDB4Y2RjZGNkMDAsIDB4MDA5YjliOWIsIDB4ZTYwMGU2ZTYsIDB4MTIxMjAwMTIKKy5sb25nIDB4NGE0YTRhMDAsIDB4MDA5NDk0OTQsIDB4MjUwMDI1MjUsIDB4MjAyMDAwMjAKKy5sb25nIDB4OTA5MDkwMDAsIDB4MDAyMTIxMjEsIDB4NDgwMDQ4NDgsIDB4YjFiMTAwYjEKKy5sb25nIDB4MzMzMzMzMDAsIDB4MDA2NjY2NjYsIDB4OTkwMDk5OTksIDB4OTk5OTAwOTkKKy5sb25nIDB4NzM3MzczMDAsIDB4MDBlNmU2ZTYsIDB4YjkwMGI5YjksIDB4NGM0YzAwNGMKKy5sb25nIDB4Njc2NzY3MDAsIDB4MDBjZWNlY2UsIDB4YjMwMGIzYjMsIDB4YzJjMjAwYzIKKy5sb25nIDB4ZjZmNmY2MDAsIDB4MDBlZGVkZWQsIDB4N2IwMDdiN2IsIDB4N2U3ZTAwN2UKKy5sb25nIDB4ZjNmM2YzMDAsIDB4MDBlN2U3ZTcsIDB4ZjkwMGY5ZjksIDB4MDUwNTAwMDUKKy5sb25nIDB4OWQ5ZDlkMDAsIDB4MDAzYjNiM2IsIDB4Y2UwMGNlY2UsIDB4YjdiNzAwYjcKKy5sb25nIDB4N2Y3ZjdmMDAsIDB4MDBmZWZlZmUsIDB4YmYwMGJmYmYsIDB4MzEzMTAwMzEKKy5sb25nIDB4YmZiZmJmMDAsIDB4MDA3ZjdmN2YsIDB4ZGYwMGRmZGYsIDB4MTcxNzAwMTcKKy5sb25nIDB4ZTJlMmUyMDAsIDB4MDBjNWM1YzUsIDB4NzEwMDcxNzEsIDB4ZDdkNzAwZDcKKy5sb25nIDB4NTI1MjUyMDAsIDB4MDBhNGE0YTQsIDB4MjkwMDI5MjksIDB4NTg1ODAwNTgKKy5sb25nIDB4OWI5YjliMDAsIDB4MDAzNzM3MzcsIDB4Y2QwMGNkY2QsIDB4NjE2MTAwNjEKKy5sb25nIDB4ZDhkOGQ4MDAsIDB4MDBiMWIxYjEsIDB4NmMwMDZjNmMsIDB4MWIxYjAwMWIKKy5sb25nIDB4MjYyNjI2MDAsIDB4MDA0YzRjNGMsIDB4MTMwMDEzMTMsIDB4MWMxYzAwMWMKKy5sb25nIDB4YzhjOGM4MDAsIDB4MDA5MTkxOTEsIDB4NjQwMDY0NjQsIDB4MGYwZjAwMGYKKy5sb25nIDB4MzczNzM3MDAsIDB4MDA2ZTZlNmUsIDB4OWIwMDliOWIsIDB4MTYxNjAwMTYKKy5sb25nIDB4YzZjNmM2MDAsIDB4MDA4ZDhkOGQsIDB4NjMwMDYzNjMsIDB4MTgxODAwMTgKKy5sb25nIDB4M2IzYjNiMDAsIDB4MDA3Njc2NzYsIDB4OWQwMDlkOWQsIDB4MjIyMjAwMjIKKy5sb25nIDB4ODE4MTgxMDAsIDB4MDAwMzAzMDMsIDB4YzAwMGMwYzAsIDB4NDQ0NDAwNDQKKy5sb25nIDB4OTY5Njk2MDAsIDB4MDAyZDJkMmQsIDB4NGIwMDRiNGIsIDB4YjJiMjAwYjIKKy5sb25nIDB4NmY2ZjZmMDAsIDB4MDBkZWRlZGUsIDB4YjcwMGI3YjcsIDB4YjViNTAwYjUKKy5sb25nIDB4NGI0YjRiMDAsIDB4MDA5Njk2OTYsIDB4YTUwMGE1YTUsIDB4OTE5MTAwOTEKKy5sb25nIDB4MTMxMzEzMDAsIDB4MDAyNjI2MjYsIDB4ODkwMDg5ODksIDB4MDgwODAwMDgKKy5sb25nIDB4YmViZWJlMDAsIDB4MDA3ZDdkN2QsIDB4NWYwMDVmNWYsIDB4YThhODAwYTgKKy5sb25nIDB4NjM2MzYzMDAsIDB4MDBjNmM2YzYsIDB4YjEwMGIxYjEsIDB4ZmNmYzAwZmMKKy5sb25nIDB4MmUyZTJlMDAsIDB4MDA1YzVjNWMsIDB4MTcwMDE3MTcsIDB4NTA1MDAwNTAKKy5sb25nIDB4ZTllOWU5MDAsIDB4MDBkM2QzZDMsIDB4ZjQwMGY0ZjQsIDB4ZDBkMDAwZDAKKy5sb25nIDB4Nzk3OTc5MDAsIDB4MDBmMmYyZjIsIDB4YmMwMGJjYmMsIDB4N2Q3ZDAwN2QKKy5sb25nIDB4YTdhN2E3MDAsIDB4MDA0ZjRmNGYsIDB4ZDMwMGQzZDMsIDB4ODk4OTAwODkKKy5sb25nIDB4OGM4YzhjMDAsIDB4MDAxOTE5MTksIDB4NDYwMDQ2NDYsIDB4OTc5NzAwOTcKKy5sb25nIDB4OWY5ZjlmMDAsIDB4MDAzZjNmM2YsIDB4Y2YwMGNmY2YsIDB4NWI1YjAwNWIKKy5sb25nIDB4NmU2ZTZlMDAsIDB4MDBkY2RjZGMsIDB4MzcwMDM3MzcsIDB4OTU5NTAwOTUKKy5sb25nIDB4YmNiY2JjMDAsIDB4MDA3OTc5NzksIDB4NWUwMDVlNWUsIDB4ZmZmZjAwZmYKKy5sb25nIDB4OGU4ZThlMDAsIDB4MDAxZDFkMWQsIDB4NDcwMDQ3NDcsIDB4ZDJkMjAwZDIKKy5sb25nIDB4MjkyOTI5MDAsIDB4MDA1MjUyNTIsIDB4OTQwMDk0OTQsIDB4YzRjNDAwYzQKKy5sb25nIDB4ZjVmNWY1MDAsIDB4MDBlYmViZWIsIDB4ZmEwMGZhZmEsIDB4NDg0ODAwNDgKKy5sb25nIDB4ZjlmOWY5MDAsIDB4MDBmM2YzZjMsIDB4ZmMwMGZjZmMsIDB4ZjdmNzAwZjcKKy5sb25nIDB4YjZiNmI2MDAsIDB4MDA2ZDZkNmQsIDB4NWIwMDViNWIsIDB4ZGJkYjAwZGIKKy5sb25nIDB4MmYyZjJmMDAsIDB4MDA1ZTVlNWUsIDB4OTcwMDk3OTcsIDB4MDMwMzAwMDMKKy5sb25nIDB4ZmRmZGZkMDAsIDB4MDBmYmZiZmIsIDB4ZmUwMGZlZmUsIDB4ZGFkYTAwZGEKKy5sb25nIDB4YjRiNGI0MDAsIDB4MDA2OTY5NjksIDB4NWEwMDVhNWEsIDB4M2YzZjAwM2YKKy5sb25nIDB4NTk1OTU5MDAsIDB4MDBiMmIyYjIsIDB4YWMwMGFjYWMsIDB4OTQ5NDAwOTQKKy5sb25nIDB4Nzg3ODc4MDAsIDB4MDBmMGYwZjAsIDB4M2MwMDNjM2MsIDB4NWM1YzAwNWMKKy5sb25nIDB4OTg5ODk4MDAsIDB4MDAzMTMxMzEsIDB4NGMwMDRjNGMsIDB4MDIwMjAwMDIKKy5sb25nIDB4MDYwNjA2MDAsIDB4MDAwYzBjMGMsIDB4MDMwMDAzMDMsIDB4NGE0YTAwNGEKKy5sb25nIDB4NmE2YTZhMDAsIDB4MDBkNGQ0ZDQsIDB4MzUwMDM1MzUsIDB4MzMzMzAwMzMKKy5sb25nIDB4ZTdlN2U3MDAsIDB4MDBjZmNmY2YsIDB4ZjMwMGYzZjMsIDB4Njc2NzAwNjcKKy5sb25nIDB4NDY0NjQ2MDAsIDB4MDA4YzhjOGMsIDB4MjMwMDIzMjMsIDB4ZjNmMzAwZjMKKy5sb25nIDB4NzE3MTcxMDAsIDB4MDBlMmUyZTIsIDB4YjgwMGI4YjgsIDB4N2Y3ZjAwN2YKKy5sb25nIDB4YmFiYWJhMDAsIDB4MDA3NTc1NzUsIDB4NWQwMDVkNWQsIDB4ZTJlMjAwZTIKKy5sb25nIDB4ZDRkNGQ0MDAsIDB4MDBhOWE5YTksIDB4NmEwMDZhNmEsIDB4OWI5YjAwOWIKKy5sb25nIDB4MjUyNTI1MDAsIDB4MDA0YTRhNGEsIDB4OTIwMDkyOTIsIDB4MjYyNjAwMjYKKy5sb25nIDB4YWJhYmFiMDAsIDB4MDA1NzU3NTcsIDB4ZDUwMGQ1ZDUsIDB4MzczNzAwMzcKKy5sb25nIDB4NDI0MjQyMDAsIDB4MDA4NDg0ODQsIDB4MjEwMDIxMjEsIDB4M2IzYjAwM2IKKy5sb25nIDB4ODg4ODg4MDAsIDB4MDAxMTExMTEsIDB4NDQwMDQ0NDQsIDB4OTY5NjAwOTYKKy5sb25nIDB4YTJhMmEyMDAsIDB4MDA0NTQ1NDUsIDB4NTEwMDUxNTEsIDB4NGI0YjAwNGIKKy5sb25nIDB4OGQ4ZDhkMDAsIDB4MDAxYjFiMWIsIDB4YzYwMGM2YzYsIDB4YmViZTAwYmUKKy5sb25nIDB4ZmFmYWZhMDAsIDB4MDBmNWY1ZjUsIDB4N2QwMDdkN2QsIDB4MmUyZTAwMmUKKy5sb25nIDB4NzI3MjcyMDAsIDB4MDBlNGU0ZTQsIDB4MzkwMDM5MzksIDB4Nzk3OTAwNzkKKy5sb25nIDB4MDcwNzA3MDAsIDB4MDAwZTBlMGUsIDB4ODMwMDgzODMsIDB4OGM4YzAwOGMKKy5sb25nIDB4YjliOWI5MDAsIDB4MDA3MzczNzMsIDB4ZGMwMGRjZGMsIDB4NmU2ZTAwNmUKKy5sb25nIDB4NTU1NTU1MDAsIDB4MDBhYWFhYWEsIDB4YWEwMGFhYWEsIDB4OGU4ZTAwOGUKKy5sb25nIDB4ZjhmOGY4MDAsIDB4MDBmMWYxZjEsIDB4N2MwMDdjN2MsIDB4ZjVmNTAwZjUKKy5sb25nIDB4ZWVlZWVlMDAsIDB4MDBkZGRkZGQsIDB4NzcwMDc3NzcsIDB4YjZiNjAwYjYKKy5sb25nIDB4YWNhY2FjMDAsIDB4MDA1OTU5NTksIDB4NTYwMDU2NTYsIDB4ZmRmZDAwZmQKKy5sb25nIDB4MGEwYTBhMDAsIDB4MDAxNDE0MTQsIDB4MDUwMDA1MDUsIDB4NTk1OTAwNTkKKy5sb25nIDB4MzYzNjM2MDAsIDB4MDA2YzZjNmMsIDB4MWIwMDFiMWIsIDB4OTg5ODAwOTgKKy5sb25nIDB4NDk0OTQ5MDAsIDB4MDA5MjkyOTIsIDB4YTQwMGE0YTQsIDB4NmE2YTAwNmEKKy5sb25nIDB4MmEyYTJhMDAsIDB4MDA1NDU0NTQsIDB4MTUwMDE1MTUsIDB4NDY0NjAwNDYKKy5sb25nIDB4Njg2ODY4MDAsIDB4MDBkMGQwZDAsIDB4MzQwMDM0MzQsIDB4YmFiYTAwYmEKKy5sb25nIDB4M2MzYzNjMDAsIDB4MDA3ODc4NzgsIDB4MWUwMDFlMWUsIDB4MjUyNTAwMjUKKy5sb25nIDB4MzgzODM4MDAsIDB4MDA3MDcwNzAsIDB4MWMwMDFjMWMsIDB4NDI0MjAwNDIKKy5sb25nIDB4ZjFmMWYxMDAsIDB4MDBlM2UzZTMsIDB4ZjgwMGY4ZjgsIDB4YTJhMjAwYTIKKy5sb25nIDB4YTRhNGE0MDAsIDB4MDA0OTQ5NDksIDB4NTIwMDUyNTIsIDB4ZmFmYTAwZmEKKy5sb25nIDB4NDA0MDQwMDAsIDB4MDA4MDgwODAsIDB4MjAwMDIwMjAsIDB4MDcwNzAwMDcKKy5sb25nIDB4MjgyODI4MDAsIDB4MDA1MDUwNTAsIDB4MTQwMDE0MTQsIDB4NTU1NTAwNTUKKy5sb25nIDB4ZDNkM2QzMDAsIDB4MDBhN2E3YTcsIDB4ZTkwMGU5ZTksIDB4ZWVlZTAwZWUKKy5sb25nIDB4N2I3YjdiMDAsIDB4MDBmNmY2ZjYsIDB4YmQwMGJkYmQsIDB4MGEwYTAwMGEKKy5sb25nIDB4YmJiYmJiMDAsIDB4MDA3Nzc3NzcsIDB4ZGQwMGRkZGQsIDB4NDk0OTAwNDkKKy5sb25nIDB4YzljOWM5MDAsIDB4MDA5MzkzOTMsIDB4ZTQwMGU0ZTQsIDB4Njg2ODAwNjgKKy5sb25nIDB4NDM0MzQzMDAsIDB4MDA4Njg2ODYsIDB4YTEwMGExYTEsIDB4MzgzODAwMzgKKy5sb25nIDB4YzFjMWMxMDAsIDB4MDA4MzgzODMsIDB4ZTAwMGUwZTAsIDB4YTRhNDAwYTQKKy5sb25nIDB4MTUxNTE1MDAsIDB4MDAyYTJhMmEsIDB4OGEwMDhhOGEsIDB4MjgyODAwMjgKKy5sb25nIDB4ZTNlM2UzMDAsIDB4MDBjN2M3YzcsIDB4ZjEwMGYxZjEsIDB4N2I3YjAwN2IKKy5sb25nIDB4YWRhZGFkMDAsIDB4MDA1YjViNWIsIDB4ZDYwMGQ2ZDYsIDB4YzljOTAwYzkKKy5sb25nIDB4ZjRmNGY0MDAsIDB4MDBlOWU5ZTksIDB4N2EwMDdhN2EsIDB4YzFjMTAwYzEKKy5sb25nIDB4Nzc3Nzc3MDAsIDB4MDBlZWVlZWUsIDB4YmIwMGJiYmIsIDB4ZTNlMzAwZTMKKy5sb25nIDB4YzdjN2M3MDAsIDB4MDA4ZjhmOGYsIDB4ZTMwMGUzZTMsIDB4ZjRmNDAwZjQKKy5sb25nIDB4ODA4MDgwMDAsIDB4MDAwMTAxMDEsIDB4NDAwMDQwNDAsIDB4YzdjNzAwYzcKKy5sb25nIDB4OWU5ZTllMDAsIDB4MDAzZDNkM2QsIDB4NGYwMDRmNGYsIDB4OWU5ZTAwOWUKKworI2VuZGlmIC8qSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUyovCisjZW5kaWYgLypfX0FSTV9BUkNIID49IDYqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NhbWVsbGlhLWdsdWUuYyBiL2NpcGhlci9jYW1lbGxpYS1nbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZDEzNQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jYW1lbGxpYS1nbHVlLmMKQEAgLTAsMCArMSw3MTQgQEAKKy8qIGNhbWVsbGlhLWdsdWUuYyAtIEdsdWUgZm9yIHRoZSBDYW1lbGxpYSBjaXBoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBJIHB1dCBhbGwgdGhlIGxpYmdjcnlwdC1zcGVjaWZpYyBzdHVmZiBpbiB0aGlzIGZpbGUgdG8ga2VlcCB0aGUKKyAgIGNhbWVsbGlhLmMvY2FtZWxsaWEuaCBmaWxlcyBleGFjdGx5IGFzIHByb3ZpZGVkIGJ5IE5UVC4gIElmIHRoZXkKKyAgIHVwZGF0ZSB0aGVpciBjb2RlLCB0aGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byBicmluZyB0aGUgY2hhbmdlcworICAgaW4uIC0gZHNoYXcKKworICAgVGhlcmUgaXMgb25lIHNtYWxsIGNoYW5nZSB3aGljaCBuZWVkcyB0byBiZSBkb25lOiBJbmNsdWRlIHRoZQorICAgZm9sbG93aW5nIGNvZGUgYXQgdGhlIHRvcCBvZiBjYW1lbGxpYS5oOiAqLworI2lmIDAKKworLyogVG8gdXNlIENhbWVsbGlhIHdpdGggbGlicmFyaWVzIGl0IGlzIG9mdGVuIHVzZWZ1bCB0byBrZWVwIHRoZSBuYW1lCisgKiBzcGFjZSBvZiB0aGUgbGlicmFyeSBjbGVhbi4gIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgdGh1cyB1c2VmdWw6CisgKgorICogICAgICNkZWZpbmUgQ0FNRUxMSUFfRVhUX1NZTV9QUkVGSVggZm9vXworICoKKyAqIFRoaXMgcHJlZml4ZXMgYWxsIGV4dGVybmFsIHN5bWJvbHMgd2l0aCAiZm9vXyIuCisgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpZmRlZiBDQU1FTExJQV9FWFRfU1lNX1BSRUZJWAorI2RlZmluZSBDQU1FTExJQV9QUkVGSVgxKHgseSkgeCAjIyB5CisjZGVmaW5lIENBTUVMTElBX1BSRUZJWDIoeCx5KSBDQU1FTExJQV9QUkVGSVgxKHgseSkKKyNkZWZpbmUgQ0FNRUxMSUFfUFJFRklYKHgpICAgIENBTUVMTElBX1BSRUZJWDIoQ0FNRUxMSUFfRVhUX1NZTV9QUkVGSVgseCkKKyNkZWZpbmUgQ2FtZWxsaWFfRWtleWdlbiAgICAgIENBTUVMTElBX1BSRUZJWChDYW1lbGxpYV9Fa2V5Z2VuKQorI2RlZmluZSBDYW1lbGxpYV9FbmNyeXB0QmxvY2sgQ0FNRUxMSUFfUFJFRklYKENhbWVsbGlhX0VuY3J5cHRCbG9jaykKKyNkZWZpbmUgQ2FtZWxsaWFfRGVjcnlwdEJsb2NrIENBTUVMTElBX1BSRUZJWChDYW1lbGxpYV9EZWNyeXB0QmxvY2spCisjZGVmaW5lIGNhbWVsbGlhX2RlY3J5cHQxMjggICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfZGVjcnlwdDEyOCkKKyNkZWZpbmUgY2FtZWxsaWFfZGVjcnlwdDI1NiAgIENBTUVMTElBX1BSRUZJWChjYW1lbGxpYV9kZWNyeXB0MjU2KQorI2RlZmluZSBjYW1lbGxpYV9lbmNyeXB0MTI4ICAgQ0FNRUxMSUFfUFJFRklYKGNhbWVsbGlhX2VuY3J5cHQxMjgpCisjZGVmaW5lIGNhbWVsbGlhX2VuY3J5cHQyNTYgICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfZW5jcnlwdDI1NikKKyNkZWZpbmUgY2FtZWxsaWFfc2V0dXAxMjggICAgIENBTUVMTElBX1BSRUZJWChjYW1lbGxpYV9zZXR1cDEyOCkKKyNkZWZpbmUgY2FtZWxsaWFfc2V0dXAxOTIgICAgIENBTUVMTElBX1BSRUZJWChjYW1lbGxpYV9zZXR1cDE5MikKKyNkZWZpbmUgY2FtZWxsaWFfc2V0dXAyNTYgICAgIENBTUVMTElBX1BSRUZJWChjYW1lbGxpYV9zZXR1cDI1NikKKyNlbmRpZiAvKkNBTUVMTElBX0VYVF9TWU1fUFJFRklYKi8KKworI2VuZGlmIC8qIENvZGUgc2FtcGxlLiAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImNhbWVsbGlhLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci1zZWxmdGVzdC5oIgorCisvKiBIZWxwZXIgbWFjcm8gdG8gZm9yY2UgYWxpZ25tZW50IHRvIDE2IGJ5dGVzLiAgKi8KKyNpZmRlZiBIQVZFX0dDQ19BVFRSSUJVVEVfQUxJR05FRAorIyBkZWZpbmUgQVRUUl9BTElHTkVEXzE2ICBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSkKKyNlbHNlCisjIGRlZmluZSBBVFRSX0FMSUdORURfMTYKKyNlbmRpZgorCisvKiBVU0VfQUVTTkkgaW5pZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBJbnRlbCBBRVMtTkkvQVZYIGNvZGUuICovCisjdW5kZWYgVVNFX0FFU05JX0FWWAorI2lmIGRlZmluZWQoRU5BQkxFX0FFU05JX1NVUFBPUlQpICYmIGRlZmluZWQoRU5BQkxFX0FWWF9TVVBQT1JUKQorIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykKKyMgIGRlZmluZSBVU0VfQUVTTklfQVZYIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBVU0VfQUVTTklfQVZYMiBpbmlkaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEludGVsIEFFUy1OSS9BVlgyIGNvZGUuICovCisjdW5kZWYgVVNFX0FFU05JX0FWWDIKKyNpZiBkZWZpbmVkKEVOQUJMRV9BRVNOSV9TVVBQT1JUKSAmJiBkZWZpbmVkKEVOQUJMRV9BVlgyX1NVUFBPUlQpCisjIGlmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKQorIyAgZGVmaW5lIFVTRV9BRVNOSV9BVlgyIDEKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICBLRVlfVEFCTEVfVFlQRSBrZXl0YWJsZTsKKyAgaW50IGtleWJpdGxlbmd0aDsKKyNpZmRlZiBVU0VfQUVTTklfQVZYCisgIHVuc2lnbmVkIGludCB1c2VfYWVzbmlfYXZ4OjE7CS8qIEFFUy1OSS9BVlggaW1wbGVtZW50YXRpb24gc2hhbGwgYmUgdXNlZC4gICovCisjZW5kaWYgLypVU0VfQUVTTklfQVZYKi8KKyNpZmRlZiBVU0VfQUVTTklfQVZYMgorICB1bnNpZ25lZCBpbnQgdXNlX2Flc25pX2F2eDI6MTsvKiBBRVMtTkkvQVZYMiBpbXBsZW1lbnRhdGlvbiBzaGFsbCBiZSB1c2VkLiAgKi8KKyNlbmRpZiAvKlVTRV9BRVNOSV9BVlgyKi8KK30gQ0FNRUxMSUFfY29udGV4dDsKKworI2lmZGVmIFVTRV9BRVNOSV9BVlgKKy8qIEFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMgb2YgQ2FtZWxsaWEgdXNpbmcgQUVTLU5JIGFuZCBBVlguICBQcm9jZXNzIGRhdGEKKyAgIGluIDE2IGJsb2NrIHNhbWUgdGltZS4KKyAqLworZXh0ZXJuIHZvaWQgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2N0cl9lbmMoQ0FNRUxMSUFfY29udGV4dCAqY3R4LAorCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkJICAgICB1bnNpZ25lZCBjaGFyICpjdHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY2JjX2RlYyhDQU1FTExJQV9jb250ZXh0ICpjdHgsCisJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKml2KTsKKworZXh0ZXJuIHZvaWQgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NmYl9kZWMoQ0FNRUxMSUFfY29udGV4dCAqY3R4LAorCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkJICAgICB1bnNpZ25lZCBjaGFyICppdik7CisKK2V4dGVybiB2b2lkIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9rZXlnZW4oQ0FNRUxMSUFfY29udGV4dCAqY3R4LAorCQkJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorCQkJCQkgICAgdW5zaWduZWQgaW50IGtleWxlbik7CisjZW5kaWYKKworI2lmZGVmIFVTRV9BRVNOSV9BVlgyCisvKiBBc3NlbWJsZXIgaW1wbGVtZW50YXRpb25zIG9mIENhbWVsbGlhIHVzaW5nIEFFUy1OSSBhbmQgQVZYMi4gIFByb2Nlc3MgZGF0YQorICAgaW4gMzIgYmxvY2sgc2FtZSB0aW1lLgorICovCitleHRlcm4gdm9pZCBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2N0cl9lbmMoQ0FNRUxMSUFfY29udGV4dCAqY3R4LAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpjdHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NiY19kZWMoQ0FNRUxMSUFfY29udGV4dCAqY3R4LAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICppdik7CisKK2V4dGVybiB2b2lkIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2ZiX2RlYyhDQU1FTExJQV9jb250ZXh0ICpjdHgsCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKml2KTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3Qodm9pZCk7CisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NhbWVsbGlhX3NldGtleSh2b2lkICpjLCBjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGtleWxlbikKK3sKKyAgQ0FNRUxMSUFfY29udGV4dCAqY3R4PWM7CisgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ9MDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0X2ZhaWxlZD1OVUxMOworI2lmIGRlZmluZWQoVVNFX0FFU05JX0FWWCkgfHwgZGVmaW5lZChVU0VfQUVTTklfQVZYMikKKyAgdW5zaWduZWQgaW50IGh3ZiA9IF9nY3J5X2dldF9od19mZWF0dXJlcyAoKTsKKyNlbmRpZgorCisgIGlmKGtleWxlbiE9MTYgJiYga2V5bGVuIT0yNCAmJiBrZXlsZW4hPTMyKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9LRVlMRU47CisKKyAgaWYoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkPTE7CisgICAgICBzZWxmdGVzdF9mYWlsZWQ9c2VsZnRlc3QoKTsKKyAgICAgIGlmKHNlbGZ0ZXN0X2ZhaWxlZCkKKwlsb2dfZXJyb3IoIiVzXG4iLHNlbGZ0ZXN0X2ZhaWxlZCk7CisgICAgfQorCisgIGlmKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7CisKKyNpZmRlZiBVU0VfQUVTTklfQVZYCisgIGN0eC0+dXNlX2Flc25pX2F2eCA9IChod2YgJiBIV0ZfSU5URUxfQUVTTkkpICYmIChod2YgJiBIV0ZfSU5URUxfQVZYKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9BRVNOSV9BVlgyCisgIGN0eC0+dXNlX2Flc25pX2F2eDIgPSAoaHdmICYgSFdGX0lOVEVMX0FFU05JKSAmJiAoaHdmICYgSFdGX0lOVEVMX0FWWDIpOworI2VuZGlmCisKKyAgY3R4LT5rZXliaXRsZW5ndGg9a2V5bGVuKjg7CisKKyAgaWYgKDApCisgICAgeyB9CisjaWZkZWYgVVNFX0FFU05JX0FWWAorICBlbHNlIGlmIChjdHgtPnVzZV9hZXNuaV9hdngpCisgICAgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2tleWdlbihjdHgsIGtleSwga2V5bGVuKTsKKyAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgQ2FtZWxsaWFfRWtleWdlbihjdHgtPmtleWJpdGxlbmd0aCxrZXksY3R4LT5rZXl0YWJsZSk7CisgICAgICBfZ2NyeV9idXJuX3N0YWNrCisgICAgICAgICgoMTkrMzQrMzQpKnNpemVvZih1MzIpKzIqc2l6ZW9mKHZvaWQqKSAvKiBjYW1lbGxpYV9zZXR1cDI1NiAqLworICAgICAgICAgKyg0KzMyKSpzaXplb2YodTMyKSsyKnNpemVvZih2b2lkKikgICAgLyogY2FtZWxsaWFfc2V0dXAxOTIgKi8KKyAgICAgICAgICswK3NpemVvZihpbnQpKzIqc2l6ZW9mKHZvaWQqKSAgICAgICAgIC8qIENhbWVsbGlhX0VrZXlnZW4gKi8KKyAgICAgICAgICszKjIqc2l6ZW9mKHZvaWQqKSAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIGNhbGxzLiAgKi8KKyAgICAgICAgICk7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisjaWZkZWYgVVNFX0FSTV9BU00KKworLyogQXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIG9mIENhbWVsbGlhLiAqLworZXh0ZXJuIHZvaWQgX2djcnlfY2FtZWxsaWFfYXJtX2VuY3J5cHRfYmxvY2soY29uc3QgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUsCisJCQkJCSAgICAgICBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmLAorCQkJCQkgICAgICAgY29uc3QgaW50IGtleWJpdHMpOworCitleHRlcm4gdm9pZCBfZ2NyeV9jYW1lbGxpYV9hcm1fZGVjcnlwdF9ibG9jayhjb25zdCBLRVlfVEFCTEVfVFlQRSBrZXlUYWJsZSwKKwkJCQkJICAgICAgIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYsCisJCQkJCSAgICAgICBjb25zdCBpbnQga2V5Yml0cyk7CisKK3N0YXRpYyB2b2lkIENhbWVsbGlhX0VuY3J5cHRCbG9jayhjb25zdCBpbnQga2V5Qml0TGVuZ3RoLAorCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorCQkJCSAgY29uc3QgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUsCisJCQkJICB1bnNpZ25lZCBjaGFyICpjaXBoZXJUZXh0KQoreworICBfZ2NyeV9jYW1lbGxpYV9hcm1fZW5jcnlwdF9ibG9jayhrZXlUYWJsZSwgY2lwaGVyVGV4dCwgcGxhaW50ZXh0LAorCQkJCSAgICAga2V5Qml0TGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgQ2FtZWxsaWFfRGVjcnlwdEJsb2NrKGNvbnN0IGludCBrZXlCaXRMZW5ndGgsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJUZXh0LAorCQkJCSAgY29uc3QgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUsCisJCQkJICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQpCit7CisgIF9nY3J5X2NhbWVsbGlhX2FybV9kZWNyeXB0X2Jsb2NrKGtleVRhYmxlLCBwbGFpbnRleHQsIGNpcGhlclRleHQsCisJCQkJICAgICBrZXlCaXRMZW5ndGgpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitjYW1lbGxpYV9lbmNyeXB0KHZvaWQgKmMsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIENBTUVMTElBX2NvbnRleHQgKmN0eCA9IGM7CisgIENhbWVsbGlhX0VuY3J5cHRCbG9jayhjdHgtPmtleWJpdGxlbmd0aCxpbmJ1ZixjdHgtPmtleXRhYmxlLG91dGJ1Zik7CisjZGVmaW5lIENBTUVMTElBX2VuY3J5cHRfc3RhY2tfYnVybl9zaXplICgxNSo0KQorICByZXR1cm4gLypidXJuX3N0YWNrKi8gKENBTUVMTElBX2VuY3J5cHRfc3RhY2tfYnVybl9zaXplKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorY2FtZWxsaWFfZGVjcnlwdCh2b2lkICpjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBDQU1FTExJQV9jb250ZXh0ICpjdHg9YzsKKyAgQ2FtZWxsaWFfRGVjcnlwdEJsb2NrKGN0eC0+a2V5Yml0bGVuZ3RoLGluYnVmLGN0eC0+a2V5dGFibGUsb3V0YnVmKTsKKyNkZWZpbmUgQ0FNRUxMSUFfZGVjcnlwdF9zdGFja19idXJuX3NpemUgKDE1KjQpCisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoQ0FNRUxMSUFfZGVjcnlwdF9zdGFja19idXJuX3NpemUpOworfQorCisjZWxzZSAvKlVTRV9BUk1fQVNNKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorY2FtZWxsaWFfZW5jcnlwdCh2b2lkICpjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBDQU1FTExJQV9jb250ZXh0ICpjdHg9YzsKKworICBDYW1lbGxpYV9FbmNyeXB0QmxvY2soY3R4LT5rZXliaXRsZW5ndGgsaW5idWYsY3R4LT5rZXl0YWJsZSxvdXRidWYpOworCisjZGVmaW5lIENBTUVMTElBX2VuY3J5cHRfc3RhY2tfYnVybl9zaXplIFwKKyAgKHNpemVvZihpbnQpKzIqc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikrc2l6ZW9mKHZvaWQqLypLRVlfVEFCTEVfVFlQRSovKSBcCisgICAgICs0KnNpemVvZih1MzIpKzQqc2l6ZW9mKHUzMikgXAorICAgICArMipzaXplb2YodTMyKikrNCpzaXplb2YodTMyKSBcCisgICAgICsyKjIqc2l6ZW9mKHZvaWQqKSAvKiBGdW5jdGlvbiBjYWxscy4gICovIFwKKyAgICApCisKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovIChDQU1FTExJQV9lbmNyeXB0X3N0YWNrX2J1cm5fc2l6ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2NhbWVsbGlhX2RlY3J5cHQodm9pZCAqYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQ0FNRUxMSUFfY29udGV4dCAqY3R4PWM7CisKKyAgQ2FtZWxsaWFfRGVjcnlwdEJsb2NrKGN0eC0+a2V5Yml0bGVuZ3RoLGluYnVmLGN0eC0+a2V5dGFibGUsb3V0YnVmKTsKKworI2RlZmluZSBDQU1FTExJQV9kZWNyeXB0X3N0YWNrX2J1cm5fc2l6ZSBcCisgICAgKHNpemVvZihpbnQpKzIqc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikrc2l6ZW9mKHZvaWQqLypLRVlfVEFCTEVfVFlQRSovKSBcCisgICAgICs0KnNpemVvZih1MzIpKzQqc2l6ZW9mKHUzMikgXAorICAgICArMipzaXplb2YodTMyKikrNCpzaXplb2YodTMyKSBcCisgICAgICsyKjIqc2l6ZW9mKHZvaWQqKSAvKiBGdW5jdGlvbiBjYWxscy4gICovIFwKKyAgICApCisKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovIChDQU1FTExJQV9kZWNyeXB0X3N0YWNrX2J1cm5fc2l6ZSk7Cit9CisKKyNlbmRpZiAvKiFVU0VfQVJNX0FTTSovCisKKy8qIEJ1bGsgZW5jcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ1RSIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICBDVFIgaXMgZXhwZWN0ZWQgdG8gYmUKKyAgIG9mIHNpemUgQ0FNRUxMSUFfQkxPQ0tfU0laRS4gKi8KK3ZvaWQKK19nY3J5X2NhbWVsbGlhX2N0cl9lbmModm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqY3RyLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKQoreworICBDQU1FTExJQV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciB0bXBidWZbQ0FNRUxMSUFfQkxPQ0tfU0laRV07CisgIGludCBidXJuX3N0YWNrX2RlcHRoID0gQ0FNRUxMSUFfZW5jcnlwdF9zdGFja19idXJuX3NpemU7CisgIGludCBpOworCisjaWZkZWYgVVNFX0FFU05JX0FWWDIKKyAgaWYgKGN0eC0+dXNlX2Flc25pX2F2eDIpCisgICAgeworICAgICAgaW50IGRpZF91c2VfYWVzbmlfYXZ4MiA9IDA7CisKKyAgICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAzMiBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSAzMikKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY3RyX2VuYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGN0cik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDMyOworICAgICAgICAgIG91dGJ1ZiArPSAzMiAqIENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgICAgICAgaW5idWYgICs9IDMyICogQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgICAgICBkaWRfdXNlX2Flc25pX2F2eDIgPSAxOworICAgICAgICB9CisKKyAgICAgIGlmIChkaWRfdXNlX2Flc25pX2F2eDIpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgYXZ4Ml9idXJuX3N0YWNrX2RlcHRoID0gMzIgKiBDQU1FTExJQV9CTE9DS19TSVpFICsgMTYgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBzaXplb2Yodm9pZCAqKTsKKworICAgICAgICAgIGlmIChidXJuX3N0YWNrX2RlcHRoIDwgYXZ4Ml9idXJuX3N0YWNrX2RlcHRoKQorICAgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IGF2eDJfYnVybl9zdGFja19kZXB0aDsKKyAgICAgICAgfQorCisgICAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgICAgLyogVE9ETzogdXNlIGNhY2hpbmcgaW5zdGVhZD8gKi8KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9BRVNOSV9BVlgKKyAgaWYgKGN0eC0+dXNlX2Flc25pX2F2eCkKKyAgICB7CisgICAgICBpbnQgZGlkX3VzZV9hZXNuaV9hdnggPSAwOworCisgICAgICAvKiBQcm9jZXNzIGRhdGEgaW4gMTYgYmxvY2sgY2h1bmtzLiAqLworICAgICAgd2hpbGUgKG5ibG9ja3MgPj0gMTYpCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdnhfY3RyX2VuYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGN0cik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDE2OworICAgICAgICAgIG91dGJ1ZiArPSAxNiAqIENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgICAgICAgaW5idWYgICs9IDE2ICogQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgICAgICBkaWRfdXNlX2Flc25pX2F2eCA9IDE7CisgICAgICAgIH0KKworICAgICAgaWYgKGRpZF91c2VfYWVzbmlfYXZ4KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGJ1cm5fc3RhY2tfZGVwdGggPCAxNiAqIENBTUVMTElBX0JMT0NLX1NJWkUgKyAyICogc2l6ZW9mKHZvaWQgKikpCisgICAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gMTYgKiBDQU1FTExJQV9CTE9DS19TSVpFICsgMiAqIHNpemVvZih2b2lkICopOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgICAvKiBUT0RPOiB1c2UgY2FjaGluZyBpbnN0ZWFkPyAqLworICAgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIEVuY3J5cHQgdGhlIGNvdW50ZXIuICovCisgICAgICBDYW1lbGxpYV9FbmNyeXB0QmxvY2soY3R4LT5rZXliaXRsZW5ndGgsIGN0ciwgY3R4LT5rZXl0YWJsZSwgdG1wYnVmKTsKKyAgICAgIC8qIFhPUiB0aGUgaW5wdXQgd2l0aCB0aGUgZW5jcnlwdGVkIGNvdW50ZXIgYW5kIHN0b3JlIGluIG91dHB1dC4gICovCisgICAgICBidWZfeG9yKG91dGJ1ZiwgdG1wYnVmLCBpbmJ1ZiwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7CisgICAgICBvdXRidWYgKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgIGluYnVmICArPSBDQU1FTExJQV9CTE9DS19TSVpFOworICAgICAgLyogSW5jcmVtZW50IHRoZSBjb3VudGVyLiAgKi8KKyAgICAgIGZvciAoaSA9IENBTUVMTElBX0JMT0NLX1NJWkU7IGkgPiAwOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICBjdHJbaS0xXSsrOworICAgICAgICAgIGlmIChjdHJbaS0xXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIHdpcGVtZW1vcnkodG1wYnVmLCBzaXplb2YodG1wYnVmKSk7CisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKy8qIEJ1bGsgZGVjcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ0JDIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICovCit2b2lkCitfZ2NyeV9jYW1lbGxpYV9jYmNfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKQoreworICBDQU1FTExJQV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciBzYXZlYnVmW0NBTUVMTElBX0JMT0NLX1NJWkVdOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9IENBTUVMTElBX2RlY3J5cHRfc3RhY2tfYnVybl9zaXplOworCisjaWZkZWYgVVNFX0FFU05JX0FWWDIKKyAgaWYgKGN0eC0+dXNlX2Flc25pX2F2eDIpCisgICAgeworICAgICAgaW50IGRpZF91c2VfYWVzbmlfYXZ4MiA9IDA7CisKKyAgICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAzMiBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSAzMikKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eDJfY2JjX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICAgIG5ibG9ja3MgLT0gMzI7CisgICAgICAgICAgb3V0YnVmICs9IDMyICogQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gMzIgKiBDQU1FTExJQV9CTE9DS19TSVpFOworICAgICAgICAgIGRpZF91c2VfYWVzbmlfYXZ4MiA9IDE7CisgICAgICAgIH0KKworICAgICAgaWYgKGRpZF91c2VfYWVzbmlfYXZ4MikKKyAgICAgICAgeworICAgICAgICAgIGludCBhdngyX2J1cm5fc3RhY2tfZGVwdGggPSAzMiAqIENBTUVMTElBX0JMT0NLX1NJWkUgKyAxNiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIHNpemVvZih2b2lkICopOworCisgICAgICAgICAgaWYgKGJ1cm5fc3RhY2tfZGVwdGggPCBhdngyX2J1cm5fc3RhY2tfZGVwdGgpCisgICAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYXZ4Ml9idXJuX3N0YWNrX2RlcHRoOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfQUVTTklfQVZYCisgIGlmIChjdHgtPnVzZV9hZXNuaV9hdngpCisgICAgeworICAgICAgaW50IGRpZF91c2VfYWVzbmlfYXZ4ID0gMDsKKworICAgICAgLyogUHJvY2VzcyBkYXRhIGluIDE2IGJsb2NrIGNodW5rcy4gKi8KKyAgICAgIHdoaWxlIChuYmxvY2tzID49IDE2KQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfY2FtZWxsaWFfYWVzbmlfYXZ4X2NiY19kZWMoY3R4LCBvdXRidWYsIGluYnVmLCBpdik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDE2OworICAgICAgICAgIG91dGJ1ZiArPSAxNiAqIENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgICAgICAgaW5idWYgICs9IDE2ICogQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgICAgICBkaWRfdXNlX2Flc25pX2F2eCA9IDE7CisgICAgICAgIH0KKworICAgICAgaWYgKGRpZF91c2VfYWVzbmlfYXZ4KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGJ1cm5fc3RhY2tfZGVwdGggPCAxNiAqIENBTUVMTElBX0JMT0NLX1NJWkUgKyAyICogc2l6ZW9mKHZvaWQgKikpCisgICAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gMTYgKiBDQU1FTExJQV9CTE9DS19TSVpFICsgMiAqIHNpemVvZih2b2lkICopOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgfQorI2VuZGlmCisKKyAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgeworICAgICAgLyogSU5CVUYgaXMgbmVlZGVkIGxhdGVyIGFuZCBpdCBtYXkgYmUgaWRlbnRpY2FsIHRvIE9VVEJVRiwgc28gc3RvcmUKKyAgICAgICAgIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IHRvIFNBVkVCVUYuICAqLworICAgICAgQ2FtZWxsaWFfRGVjcnlwdEJsb2NrKGN0eC0+a2V5Yml0bGVuZ3RoLCBpbmJ1ZiwgY3R4LT5rZXl0YWJsZSwgc2F2ZWJ1Zik7CisKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5XzIob3V0YnVmLCBzYXZlYnVmLCBpdiwgaW5idWYsIENBTUVMTElBX0JMT0NLX1NJWkUpOworICAgICAgaW5idWYgKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgIG91dGJ1ZiArPSBDQU1FTExJQV9CTE9DS19TSVpFOworICAgIH0KKworICB3aXBlbWVtb3J5KHNhdmVidWYsIHNpemVvZihzYXZlYnVmKSk7CisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKy8qIEJ1bGsgZGVjcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ0ZCIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICovCit2b2lkCitfZ2NyeV9jYW1lbGxpYV9jZmJfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKQoreworICBDQU1FTExJQV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgaW50IGJ1cm5fc3RhY2tfZGVwdGggPSBDQU1FTExJQV9kZWNyeXB0X3N0YWNrX2J1cm5fc2l6ZTsKKworI2lmZGVmIFVTRV9BRVNOSV9BVlgyCisgIGlmIChjdHgtPnVzZV9hZXNuaV9hdngyKQorICAgIHsKKyAgICAgIGludCBkaWRfdXNlX2Flc25pX2F2eDIgPSAwOworCisgICAgICAvKiBQcm9jZXNzIGRhdGEgaW4gMzIgYmxvY2sgY2h1bmtzLiAqLworICAgICAgd2hpbGUgKG5ibG9ja3MgPj0gMzIpCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9jYW1lbGxpYV9hZXNuaV9hdngyX2NmYl9kZWMoY3R4LCBvdXRidWYsIGluYnVmLCBpdik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDMyOworICAgICAgICAgIG91dGJ1ZiArPSAzMiAqIENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgICAgICAgaW5idWYgICs9IDMyICogQ0FNRUxMSUFfQkxPQ0tfU0laRTsKKyAgICAgICAgICBkaWRfdXNlX2Flc25pX2F2eDIgPSAxOworICAgICAgICB9CisKKyAgICAgIGlmIChkaWRfdXNlX2Flc25pX2F2eDIpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgYXZ4Ml9idXJuX3N0YWNrX2RlcHRoID0gMzIgKiBDQU1FTExJQV9CTE9DS19TSVpFICsgMTYgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBzaXplb2Yodm9pZCAqKTsKKworICAgICAgICAgIGlmIChidXJuX3N0YWNrX2RlcHRoIDwgYXZ4Ml9idXJuX3N0YWNrX2RlcHRoKQorICAgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IGF2eDJfYnVybl9zdGFja19kZXB0aDsKKyAgICAgICAgfQorCisgICAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNFX0FFU05JX0FWWAorICBpZiAoY3R4LT51c2VfYWVzbmlfYXZ4KQorICAgIHsKKyAgICAgIGludCBkaWRfdXNlX2Flc25pX2F2eCA9IDA7CisKKyAgICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAxNiBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSAxNikKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2NhbWVsbGlhX2Flc25pX2F2eF9jZmJfZGVjKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgaXYpOworCisgICAgICAgICAgbmJsb2NrcyAtPSAxNjsKKyAgICAgICAgICBvdXRidWYgKz0gMTYgKiBDQU1FTExJQV9CTE9DS19TSVpFOworICAgICAgICAgIGluYnVmICArPSAxNiAqIENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgICAgICAgZGlkX3VzZV9hZXNuaV9hdnggPSAxOworICAgICAgICB9CisKKyAgICAgIGlmIChkaWRfdXNlX2Flc25pX2F2eCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChidXJuX3N0YWNrX2RlcHRoIDwgMTYgKiBDQU1FTExJQV9CTE9DS19TSVpFICsgMiAqIHNpemVvZih2b2lkICopKQorICAgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IDE2ICogQ0FNRUxMSUFfQkxPQ0tfU0laRSArIDIgKiBzaXplb2Yodm9pZCAqKTsKKyAgICAgICAgfQorCisgICAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIENhbWVsbGlhX0VuY3J5cHRCbG9jayhjdHgtPmtleWJpdGxlbmd0aCwgaXYsIGN0eC0+a2V5dGFibGUsIGl2KTsKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5KG91dGJ1ZiwgaXYsIGluYnVmLCBDQU1FTExJQV9CTE9DS19TSVpFKTsKKyAgICAgIG91dGJ1ZiArPSBDQU1FTExJQV9CTE9DS19TSVpFOworICAgICAgaW5idWYgICs9IENBTUVMTElBX0JMT0NLX1NJWkU7CisgICAgfQorCisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKy8qIFJ1biB0aGUgc2VsZi10ZXN0cyBmb3IgQ0FNRUxMSUEtQ1RSLTEyOCwgdGVzdHMgSVYgaW5jcmVtZW50IG9mIGJ1bGsgQ1RSCisgICBlbmNyeXB0aW9uLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2N0cl8xMjggKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gMzIrMTYrMTsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IENBTUVMTElBX0JMT0NLX1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoQ0FNRUxMSUFfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jdHIoIkNBTUVMTElBIiwgJmNhbWVsbGlhX3NldGtleSwKKyAgICAgICAgICAgJmNhbWVsbGlhX2VuY3J5cHQsICZfZ2NyeV9jYW1lbGxpYV9jdHJfZW5jLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBDQU1FTExJQS1DQkMtMTI4LCB0ZXN0cyBidWxrIENCQyBkZWNyeXB0aW9uLgorICAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2NiY18xMjggKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gMzIrMTYrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IENBTUVMTElBX0JMT0NLX1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoQ0FNRUxMSUFfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jYmMoIkNBTUVMTElBIiwgJmNhbWVsbGlhX3NldGtleSwKKyAgICAgICAgICAgJmNhbWVsbGlhX2VuY3J5cHQsICZfZ2NyeV9jYW1lbGxpYV9jYmNfZGVjLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBDQU1FTExJQS1DRkItMTI4LCB0ZXN0cyBidWxrIENGQiBkZWNyeXB0aW9uLgorICAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2NmYl8xMjggKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gMzIrMTYrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IENBTUVMTElBX0JMT0NLX1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoQ0FNRUxMSUFfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jZmIoIkNBTUVMTElBIiwgJmNhbWVsbGlhX3NldGtleSwKKyAgICAgICAgICAgJmNhbWVsbGlhX2VuY3J5cHQsICZfZ2NyeV9jYW1lbGxpYV9jZmJfZGVjLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc2VsZnRlc3Qodm9pZCkKK3sKKyAgQ0FNRUxMSUFfY29udGV4dCBjdHg7CisgIGJ5dGUgc2NyYXRjaFsxNl07CisgIGNvbnN0IGNoYXIgKnI7CisKKyAgLyogVGhlc2UgdGVzdCB2ZWN0b3JzIGFyZSBmcm9tIFJGQy0zNzEzICovCisgIHN0YXRpYyBjb25zdCBieXRlIHBsYWludGV4dFtdPQorICAgIHsKKyAgICAgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweGFiLDB4Y2QsMHhlZiwKKyAgICAgIDB4ZmUsMHhkYywweGJhLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMAorICAgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGtleV8xMjhbXT0KKyAgICB7CisgICAgICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhhYiwweGNkLDB4ZWYsCisgICAgICAweGZlLDB4ZGMsMHhiYSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAKKyAgICB9OworICBzdGF0aWMgY29uc3QgYnl0ZSBjaXBoZXJ0ZXh0XzEyOFtdPQorICAgIHsKKyAgICAgIDB4NjcsMHg2NywweDMxLDB4MzgsMHg1NCwweDk2LDB4NjksMHg3MywKKyAgICAgIDB4MDgsMHg1NywweDA2LDB4NTYsMHg0OCwweGVhLDB4YmUsMHg0MworICAgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGtleV8xOTJbXT0KKyAgICB7CisgICAgICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhhYiwweGNkLDB4ZWYsMHhmZSwweGRjLDB4YmEsMHg5OCwKKyAgICAgIDB4NzYsMHg1NCwweDMyLDB4MTAsMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3CisgICAgfTsKKyAgc3RhdGljIGNvbnN0IGJ5dGUgY2lwaGVydGV4dF8xOTJbXT0KKyAgICB7CisgICAgICAweGI0LDB4OTksMHgzNCwweDAxLDB4YjMsMHhlOSwweDk2LDB4ZjgsCisgICAgICAweDRlLDB4ZTUsMHhjZSwweGU3LDB4ZDcsMHg5YiwweDA5LDB4YjkKKyAgICB9OworICBzdGF0aWMgY29uc3QgYnl0ZSBrZXlfMjU2W109CisgICAgeworICAgICAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4YWIsMHhjZCwweGVmLDB4ZmUsMHhkYywweGJhLAorICAgICAgMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LAorICAgICAgMHg2NiwweDc3LDB4ODgsMHg5OSwweGFhLDB4YmIsMHhjYywweGRkLDB4ZWUsMHhmZgorICAgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcnRleHRfMjU2W109CisgICAgeworICAgICAgMHg5YSwweGNjLDB4MjMsMHg3ZCwweGZmLDB4MTYsMHhkNywweDZjLAorICAgICAgMHgyMCwweGVmLDB4N2MsMHg5MSwweDllLDB4M2EsMHg3NSwweDA5CisgICAgfTsKKworICBjYW1lbGxpYV9zZXRrZXkoJmN0eCxrZXlfMTI4LHNpemVvZihrZXlfMTI4KSk7CisgIGNhbWVsbGlhX2VuY3J5cHQoJmN0eCxzY3JhdGNoLHBsYWludGV4dCk7CisgIGlmKG1lbWNtcChzY3JhdGNoLGNpcGhlcnRleHRfMTI4LHNpemVvZihjaXBoZXJ0ZXh0XzEyOCkpIT0wKQorICAgIHJldHVybiAiQ0FNRUxMSUEtMTI4IHRlc3QgZW5jcnlwdGlvbiBmYWlsZWQuIjsKKyAgY2FtZWxsaWFfZGVjcnlwdCgmY3R4LHNjcmF0Y2gsc2NyYXRjaCk7CisgIGlmKG1lbWNtcChzY3JhdGNoLHBsYWludGV4dCxzaXplb2YocGxhaW50ZXh0KSkhPTApCisgICAgcmV0dXJuICJDQU1FTExJQS0xMjggdGVzdCBkZWNyeXB0aW9uIGZhaWxlZC4iOworCisgIGNhbWVsbGlhX3NldGtleSgmY3R4LGtleV8xOTIsc2l6ZW9mKGtleV8xOTIpKTsKKyAgY2FtZWxsaWFfZW5jcnlwdCgmY3R4LHNjcmF0Y2gscGxhaW50ZXh0KTsKKyAgaWYobWVtY21wKHNjcmF0Y2gsY2lwaGVydGV4dF8xOTIsc2l6ZW9mKGNpcGhlcnRleHRfMTkyKSkhPTApCisgICAgcmV0dXJuICJDQU1FTExJQS0xOTIgdGVzdCBlbmNyeXB0aW9uIGZhaWxlZC4iOworICBjYW1lbGxpYV9kZWNyeXB0KCZjdHgsc2NyYXRjaCxzY3JhdGNoKTsKKyAgaWYobWVtY21wKHNjcmF0Y2gscGxhaW50ZXh0LHNpemVvZihwbGFpbnRleHQpKSE9MCkKKyAgICByZXR1cm4gIkNBTUVMTElBLTE5MiB0ZXN0IGRlY3J5cHRpb24gZmFpbGVkLiI7CisKKyAgY2FtZWxsaWFfc2V0a2V5KCZjdHgsa2V5XzI1NixzaXplb2Yoa2V5XzI1NikpOworICBjYW1lbGxpYV9lbmNyeXB0KCZjdHgsc2NyYXRjaCxwbGFpbnRleHQpOworICBpZihtZW1jbXAoc2NyYXRjaCxjaXBoZXJ0ZXh0XzI1NixzaXplb2YoY2lwaGVydGV4dF8yNTYpKSE9MCkKKyAgICByZXR1cm4gIkNBTUVMTElBLTI1NiB0ZXN0IGVuY3J5cHRpb24gZmFpbGVkLiI7CisgIGNhbWVsbGlhX2RlY3J5cHQoJmN0eCxzY3JhdGNoLHNjcmF0Y2gpOworICBpZihtZW1jbXAoc2NyYXRjaCxwbGFpbnRleHQsc2l6ZW9mKHBsYWludGV4dCkpIT0wKQorICAgIHJldHVybiAiQ0FNRUxMSUEtMjU2IHRlc3QgZGVjcnlwdGlvbiBmYWlsZWQuIjsKKworICBpZiAoIChyID0gc2VsZnRlc3RfY3RyXzEyOCAoKSkgKQorICAgIHJldHVybiByOworCisgIGlmICggKHIgPSBzZWxmdGVzdF9jYmNfMTI4ICgpKSApCisgICAgcmV0dXJuIHI7CisKKyAgaWYgKCAociA9IHNlbGZ0ZXN0X2NmYl8xMjggKCkpICkKKyAgICByZXR1cm4gcjsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogVGhlc2Ugb2lkcyBhcmUgZnJvbQorICAgPGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2NhbWVsbGlhL3NwZWNpZmljYXRpb25zX29pZC5odG1sPiwKKyAgIHJldHJpZXZlZCBNYXkgMSwgMjAwNy4gKi8KKworc3RhdGljIGdjcnlfY2lwaGVyX29pZF9zcGVjX3QgY2FtZWxsaWExMjhfb2lkc1tdID0KKyAgeworICAgIHsiMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuMiIsIEdDUllfQ0lQSEVSX01PREVfQ0JDfSwKKyAgICB7IjAuMy40NDAxLjUuMy4xLjkuMSIsIEdDUllfQ0lQSEVSX01PREVfRUNCfSwKKyAgICB7IjAuMy40NDAxLjUuMy4xLjkuMyIsIEdDUllfQ0lQSEVSX01PREVfT0ZCfSwKKyAgICB7IjAuMy40NDAxLjUuMy4xLjkuNCIsIEdDUllfQ0lQSEVSX01PREVfQ0ZCfSwKKyAgICB7IE5VTEwgfQorICB9OworCitzdGF0aWMgZ2NyeV9jaXBoZXJfb2lkX3NwZWNfdCBjYW1lbGxpYTE5Ml9vaWRzW10gPQorICB7CisgICAgeyIxLjIuMzkyLjIwMDAxMS42MS4xLjEuMS4zIiwgR0NSWV9DSVBIRVJfTU9ERV9DQkN9LAorICAgIHsiMC4zLjQ0MDEuNS4zLjEuOS4yMSIsIEdDUllfQ0lQSEVSX01PREVfRUNCfSwKKyAgICB7IjAuMy40NDAxLjUuMy4xLjkuMjMiLCBHQ1JZX0NJUEhFUl9NT0RFX09GQn0sCisgICAgeyIwLjMuNDQwMS41LjMuMS45LjI0IiwgR0NSWV9DSVBIRVJfTU9ERV9DRkJ9LAorICAgIHsgTlVMTCB9CisgIH07CisKK3N0YXRpYyBnY3J5X2NpcGhlcl9vaWRfc3BlY190IGNhbWVsbGlhMjU2X29pZHNbXSA9CisgIHsKKyAgICB7IjEuMi4zOTIuMjAwMDExLjYxLjEuMS4xLjQiLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQ30sCisgICAgeyIwLjMuNDQwMS41LjMuMS45LjQxIiwgR0NSWV9DSVBIRVJfTU9ERV9FQ0J9LAorICAgIHsiMC4zLjQ0MDEuNS4zLjEuOS40MyIsIEdDUllfQ0lQSEVSX01PREVfT0ZCfSwKKyAgICB7IjAuMy40NDAxLjUuMy4xLjkuNDQiLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQn0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2NhbWVsbGlhMTI4ID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCB7MCwgMH0sCisgICAgIkNBTUVMTElBMTI4IixOVUxMLGNhbWVsbGlhMTI4X29pZHMsQ0FNRUxMSUFfQkxPQ0tfU0laRSwxMjgsCisgICAgc2l6ZW9mKENBTUVMTElBX2NvbnRleHQpLGNhbWVsbGlhX3NldGtleSxjYW1lbGxpYV9lbmNyeXB0LGNhbWVsbGlhX2RlY3J5cHQKKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2NhbWVsbGlhMTkyID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTkyLCB7MCwgMH0sCisgICAgIkNBTUVMTElBMTkyIixOVUxMLGNhbWVsbGlhMTkyX29pZHMsQ0FNRUxMSUFfQkxPQ0tfU0laRSwxOTIsCisgICAgc2l6ZW9mKENBTUVMTElBX2NvbnRleHQpLGNhbWVsbGlhX3NldGtleSxjYW1lbGxpYV9lbmNyeXB0LGNhbWVsbGlhX2RlY3J5cHQKKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2NhbWVsbGlhMjU2ID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMjU2LCB7MCwgMH0sCisgICAgIkNBTUVMTElBMjU2IixOVUxMLGNhbWVsbGlhMjU2X29pZHMsQ0FNRUxMSUFfQkxPQ0tfU0laRSwyNTYsCisgICAgc2l6ZW9mKENBTUVMTElBX2NvbnRleHQpLGNhbWVsbGlhX3NldGtleSxjYW1lbGxpYV9lbmNyeXB0LGNhbWVsbGlhX2RlY3J5cHQKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9jYW1lbGxpYS5jIGIvY2lwaGVyL2NhbWVsbGlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwODVhNwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jYW1lbGxpYS5jCkBAIC0wLDAgKzEsMTQxMyBAQAorLyogY2FtZWxsaWEuaAl2ZXIgMS4yLjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNworICogTlRUIChOaXBwb24gVGVsZWdyYXBoIGFuZCBUZWxlcGhvbmUgQ29ycG9yYXRpb24pLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBBbGdvcml0aG0gU3BlY2lmaWNhdGlvbgorICogIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2NhbWVsbGlhL3NwZWNpZmljYXRpb25zLmh0bWwKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJjYW1lbGxpYS5oIgorCit0eXBlZGVmIGJ5dGUgdTg7CisKKy8qIGtleSBjb25zdGFudHMgKi8KKworI2RlZmluZSBDQU1FTExJQV9TSUdNQTFMICgweEEwOUU2NjdGTCkKKyNkZWZpbmUgQ0FNRUxMSUFfU0lHTUExUiAoMHgzQkNDOTA4QkwpCisjZGVmaW5lIENBTUVMTElBX1NJR01BMkwgKDB4QjY3QUU4NThMKQorI2RlZmluZSBDQU1FTExJQV9TSUdNQTJSICgweDRDQUE3M0IyTCkKKyNkZWZpbmUgQ0FNRUxMSUFfU0lHTUEzTCAoMHhDNkVGMzcyRkwpCisjZGVmaW5lIENBTUVMTElBX1NJR01BM1IgKDB4RTk0RjgyQkVMKQorI2RlZmluZSBDQU1FTExJQV9TSUdNQTRMICgweDU0RkY1M0E1TCkKKyNkZWZpbmUgQ0FNRUxMSUFfU0lHTUE0UiAoMHhGMUQzNkYxQ0wpCisjZGVmaW5lIENBTUVMTElBX1NJR01BNUwgKDB4MTBFNTI3RkFMKQorI2RlZmluZSBDQU1FTExJQV9TSUdNQTVSICgweERFNjgyRDFETCkKKyNkZWZpbmUgQ0FNRUxMSUFfU0lHTUE2TCAoMHhCMDU2ODhDMkwpCisjZGVmaW5lIENBTUVMTElBX1NJR01BNlIgKDB4QjNFNkMxRkRMKQorCisvKgorICogIG1hY3JvcworICovCisKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisKKyMgZGVmaW5lIFNXQVAoeCkgKF9scm90bCh4LCA4KSAmIDB4MDBmZjAwZmYgfCBfbHJvdHIoeCwgOCkgJiAweGZmMDBmZjAwKQorIyBkZWZpbmUgR0VUVTMyKHApIFNXQVAoKigodTMyICopKHApKSkKKyMgZGVmaW5lIFBVVFUzMihjdCwgc3QpIHsqKCh1MzIgKikoY3QpKSA9IFNXQVAoKHN0KSk7fQorCisjZWxzZSAvKiBub3QgTVMtVkMgKi8KKworIyBkZWZpbmUgR0VUVTMyKHB0KSBidWZfZ2V0X2JlMzIocHQpCisjIGRlZmluZSBQVVRVMzIoY3QsIHN0KSBidWZfcHV0X2JlMzIoY3QsIHN0KQorCisjZW5kaWYKKworI2RlZmluZSBDYW1lbGxpYVN1YmtleUwoSU5ERVgpIChzdWJrZXlbKElOREVYKSoyXSkKKyNkZWZpbmUgQ2FtZWxsaWFTdWJrZXlSKElOREVYKSAoc3Via2V5WyhJTkRFWCkqMiArIDFdKQorCisvKiByb3RhdGlvbiByaWdodCBzaGlmdCAxYnl0ZSAqLworI2RlZmluZSBDQU1FTExJQV9SUjgoeCkgKCgoeCkgPj4gOCkgKyAoKHgpIDw8IDI0KSkKKy8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgMWJpdCAqLworI2RlZmluZSBDQU1FTExJQV9STDEoeCkgKCgoeCkgPDwgMSkgKyAoKHgpID4+IDMxKSkKKy8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgMWJ5dGUgKi8KKyNkZWZpbmUgQ0FNRUxMSUFfUkw4KHgpICgoKHgpIDw8IDgpICsgKCh4KSA+PiAyNCkpCisKKyNkZWZpbmUgQ0FNRUxMSUFfUk9MRFEobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJXAorICAgIGRvIHsJCQkJCQlcCisJdzAgPSBsbDsJCQkJCVwKKwlsbCA9IChsbCA8PCBiaXRzKSArIChsciA+PiAoMzIgLSBiaXRzKSk7CVwKKwlsciA9IChsciA8PCBiaXRzKSArIChybCA+PiAoMzIgLSBiaXRzKSk7CVwKKwlybCA9IChybCA8PCBiaXRzKSArIChyciA+PiAoMzIgLSBiaXRzKSk7CVwKKwlyciA9IChyciA8PCBiaXRzKSArICh3MCA+PiAoMzIgLSBiaXRzKSk7CVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQ0FNRUxMSUFfUk9MRFFvMzIobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJXAorICAgIGRvIHsJCQkJCQlcCisJdzAgPSBsbDsJCQkJCVwKKwl3MSA9IGxyOwkJCQkJXAorCWxsID0gKGxyIDw8IChiaXRzIC0gMzIpKSArIChybCA+PiAoNjQgLSBiaXRzKSk7CVwKKwlsciA9IChybCA8PCAoYml0cyAtIDMyKSkgKyAocnIgPj4gKDY0IC0gYml0cykpOwlcCisJcmwgPSAocnIgPDwgKGJpdHMgLSAzMikpICsgKHcwID4+ICg2NCAtIGJpdHMpKTsJXAorCXJyID0gKHcwIDw8IChiaXRzIC0gMzIpKSArICh3MSA+PiAoNjQgLSBiaXRzKSk7CVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQ0FNRUxMSUFfU1AxMTEwKElOREVYKSAoY2FtZWxsaWFfc3AxMTEwWyhJTkRFWCldKQorI2RlZmluZSBDQU1FTExJQV9TUDAyMjIoSU5ERVgpIChjYW1lbGxpYV9zcDAyMjJbKElOREVYKV0pCisjZGVmaW5lIENBTUVMTElBX1NQMzAzMyhJTkRFWCkgKGNhbWVsbGlhX3NwMzAzM1soSU5ERVgpXSkKKyNkZWZpbmUgQ0FNRUxMSUFfU1A0NDA0KElOREVYKSAoY2FtZWxsaWFfc3A0NDA0WyhJTkRFWCldKQorCisjZGVmaW5lIENBTUVMTElBX0YoeGwsIHhyLCBrbCwga3IsIHlsLCB5ciwgaWwsIGlyLCB0MCwgdDEpCVwKKyAgICBkbyB7CQkJCQkJCVwKKwlpbCA9IHhsIF4ga2w7CQkJCQkJXAorCWlyID0geHIgXiBrcjsJCQkJCQlcCisJdDAgPSBpbCA+PiAxNjsJCQkJCQlcCisJdDEgPSBpciA+PiAxNjsJCQkJCQlcCisJeWwgPSBDQU1FTExJQV9TUDExMTAoaXIgJiAweGZmKQkJCQlcCisJICAgIF4gQ0FNRUxMSUFfU1AwMjIyKCh0MSA+PiA4KSAmIDB4ZmYpCQkJXAorCSAgICBeIENBTUVMTElBX1NQMzAzMyh0MSAmIDB4ZmYpCQkJXAorCSAgICBeIENBTUVMTElBX1NQNDQwNCgoaXIgPj4gOCkgJiAweGZmKTsJCVwKKwl5ciA9IENBTUVMTElBX1NQMTExMCgodDAgPj4gOCkgJiAweGZmKQkJCVwKKwkgICAgXiBDQU1FTExJQV9TUDAyMjIodDAgJiAweGZmKQkJCVwKKwkgICAgXiBDQU1FTExJQV9TUDMwMzMoKGlsID4+IDgpICYgMHhmZikJCQlcCisJICAgIF4gQ0FNRUxMSUFfU1A0NDA0KGlsICYgMHhmZik7CQkJXAorCXlsIF49IHlyOwkJCQkJCVwKKwl5ciA9IENBTUVMTElBX1JSOCh5cik7CQkJCQlcCisJeXIgXj0geWw7CQkJCQkJXAorICAgIH0gd2hpbGUoMCkKKworCisvKgorICogZm9yIHNwZWVkIHVwCisgKgorICovCisjZGVmaW5lIENBTUVMTElBX0ZMUyhsbCwgbHIsIHJsLCByciwga2xsLCBrbHIsIGtybCwga3JyLCB0MCwgdDEsIHQyLCB0MykgXAorICAgIGRvIHsJCQkJCQkJCVwKKwl0MCA9IGtsbDsJCQkJCQkJXAorCXQwICY9IGxsOwkJCQkJCQlcCisJbHIgXj0gQ0FNRUxMSUFfUkwxKHQwKTsJCQkJCQlcCisJdDEgPSBrbHI7CQkJCQkJCVwKKwl0MSB8PSBscjsJCQkJCQkJXAorCWxsIF49IHQxOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdDIgPSBrcnI7CQkJCQkJCVwKKwl0MiB8PSBycjsJCQkJCQkJXAorCXJsIF49IHQyOwkJCQkJCQlcCisJdDMgPSBrcmw7CQkJCQkJCVwKKwl0MyAmPSBybDsJCQkJCQkJXAorCXJyIF49IENBTUVMTElBX1JMMSh0Myk7CQkJCQkJXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBDQU1FTExJQV9ST1VORFNNKHhsLCB4ciwga2wsIGtyLCB5bCwgeXIsIGlsLCBpciwgdDAsIHQxKQlcCisgICAgZG8gewkJCQkJCQkJXAorCXlsIF49IGtsOwkJCQkJCQlcCisJeXIgXj0ga3I7CQkJCQkJCVwKKwlpciA9IENBTUVMTElBX1NQMTExMCh4ciAmIDB4ZmYpCQkJCQlcCisJICAgIF4gQ0FNRUxMSUFfU1AwMjIyKCh4ciA+PiAyNCkgJiAweGZmKQkJCVwKKwkgICAgXiBDQU1FTExJQV9TUDMwMzMoKHhyID4+IDE2KSAmIDB4ZmYpCQkJXAorCSAgICBeIENBTUVMTElBX1NQNDQwNCgoeHIgPj4gOCkgJiAweGZmKTsJCQlcCisJaWwgPSBDQU1FTExJQV9TUDExMTAoKHhsID4+IDI0KSAmIDB4ZmYpCQkJCVwKKwkgICAgXiBDQU1FTExJQV9TUDAyMjIoKHhsID4+IDE2KSAmIDB4ZmYpCQkJXAorCSAgICBeIENBTUVMTElBX1NQMzAzMygoeGwgPj4gOCkgJiAweGZmKQkJCQlcCisJICAgIF4gQ0FNRUxMSUFfU1A0NDA0KHhsICYgMHhmZik7CQkJCVwKKwlpciBePSBpbDsJCQkJCQkJXAorCWlsID0gQ0FNRUxMSUFfUlI4KGlsKTsJCQkJCQlcCisJaWwgXj0gaXI7CQkJCQkJCVwKKwl5bCBePSBpcjsJCQkJCQkJXAorCXlyIF49IGlsOwkJCQkJCQlcCisgICAgfSB3aGlsZSgwKQorCisKK3N0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AxMTEwWzI1Nl0gPSB7CisgICAgMHg3MDcwNzAwMCwweDgyODI4MjAwLDB4MmMyYzJjMDAsMHhlY2VjZWMwMCwKKyAgICAweGIzYjNiMzAwLDB4MjcyNzI3MDAsMHhjMGMwYzAwMCwweGU1ZTVlNTAwLAorICAgIDB4ZTRlNGU0MDAsMHg4NTg1ODUwMCwweDU3NTc1NzAwLDB4MzUzNTM1MDAsCisgICAgMHhlYWVhZWEwMCwweDBjMGMwYzAwLDB4YWVhZWFlMDAsMHg0MTQxNDEwMCwKKyAgICAweDIzMjMyMzAwLDB4ZWZlZmVmMDAsMHg2YjZiNmIwMCwweDkzOTM5MzAwLAorICAgIDB4NDU0NTQ1MDAsMHgxOTE5MTkwMCwweGE1YTVhNTAwLDB4MjEyMTIxMDAsCisgICAgMHhlZGVkZWQwMCwweDBlMGUwZTAwLDB4NGY0ZjRmMDAsMHg0ZTRlNGUwMCwKKyAgICAweDFkMWQxZDAwLDB4NjU2NTY1MDAsMHg5MjkyOTIwMCwweGJkYmRiZDAwLAorICAgIDB4ODY4Njg2MDAsMHhiOGI4YjgwMCwweGFmYWZhZjAwLDB4OGY4ZjhmMDAsCisgICAgMHg3YzdjN2MwMCwweGViZWJlYjAwLDB4MWYxZjFmMDAsMHhjZWNlY2UwMCwKKyAgICAweDNlM2UzZTAwLDB4MzAzMDMwMDAsMHhkY2RjZGMwMCwweDVmNWY1ZjAwLAorICAgIDB4NWU1ZTVlMDAsMHhjNWM1YzUwMCwweDBiMGIwYjAwLDB4MWExYTFhMDAsCisgICAgMHhhNmE2YTYwMCwweGUxZTFlMTAwLDB4MzkzOTM5MDAsMHhjYWNhY2EwMCwKKyAgICAweGQ1ZDVkNTAwLDB4NDc0NzQ3MDAsMHg1ZDVkNWQwMCwweDNkM2QzZDAwLAorICAgIDB4ZDlkOWQ5MDAsMHgwMTAxMDEwMCwweDVhNWE1YTAwLDB4ZDZkNmQ2MDAsCisgICAgMHg1MTUxNTEwMCwweDU2NTY1NjAwLDB4NmM2YzZjMDAsMHg0ZDRkNGQwMCwKKyAgICAweDhiOGI4YjAwLDB4MGQwZDBkMDAsMHg5YTlhOWEwMCwweDY2NjY2NjAwLAorICAgIDB4ZmJmYmZiMDAsMHhjY2NjY2MwMCwweGIwYjBiMDAwLDB4MmQyZDJkMDAsCisgICAgMHg3NDc0NzQwMCwweDEyMTIxMjAwLDB4MmIyYjJiMDAsMHgyMDIwMjAwMCwKKyAgICAweGYwZjBmMDAwLDB4YjFiMWIxMDAsMHg4NDg0ODQwMCwweDk5OTk5OTAwLAorICAgIDB4ZGZkZmRmMDAsMHg0YzRjNGMwMCwweGNiY2JjYjAwLDB4YzJjMmMyMDAsCisgICAgMHgzNDM0MzQwMCwweDdlN2U3ZTAwLDB4NzY3Njc2MDAsMHgwNTA1MDUwMCwKKyAgICAweDZkNmQ2ZDAwLDB4YjdiN2I3MDAsMHhhOWE5YTkwMCwweDMxMzEzMTAwLAorICAgIDB4ZDFkMWQxMDAsMHgxNzE3MTcwMCwweDA0MDQwNDAwLDB4ZDdkN2Q3MDAsCisgICAgMHgxNDE0MTQwMCwweDU4NTg1ODAwLDB4M2EzYTNhMDAsMHg2MTYxNjEwMCwKKyAgICAweGRlZGVkZTAwLDB4MWIxYjFiMDAsMHgxMTExMTEwMCwweDFjMWMxYzAwLAorICAgIDB4MzIzMjMyMDAsMHgwZjBmMGYwMCwweDljOWM5YzAwLDB4MTYxNjE2MDAsCisgICAgMHg1MzUzNTMwMCwweDE4MTgxODAwLDB4ZjJmMmYyMDAsMHgyMjIyMjIwMCwKKyAgICAweGZlZmVmZTAwLDB4NDQ0NDQ0MDAsMHhjZmNmY2YwMCwweGIyYjJiMjAwLAorICAgIDB4YzNjM2MzMDAsMHhiNWI1YjUwMCwweDdhN2E3YTAwLDB4OTE5MTkxMDAsCisgICAgMHgyNDI0MjQwMCwweDA4MDgwODAwLDB4ZThlOGU4MDAsMHhhOGE4YTgwMCwKKyAgICAweDYwNjA2MDAwLDB4ZmNmY2ZjMDAsMHg2OTY5NjkwMCwweDUwNTA1MDAwLAorICAgIDB4YWFhYWFhMDAsMHhkMGQwZDAwMCwweGEwYTBhMDAwLDB4N2Q3ZDdkMDAsCisgICAgMHhhMWExYTEwMCwweDg5ODk4OTAwLDB4NjI2MjYyMDAsMHg5Nzk3OTcwMCwKKyAgICAweDU0NTQ1NDAwLDB4NWI1YjViMDAsMHgxZTFlMWUwMCwweDk1OTU5NTAwLAorICAgIDB4ZTBlMGUwMDAsMHhmZmZmZmYwMCwweDY0NjQ2NDAwLDB4ZDJkMmQyMDAsCisgICAgMHgxMDEwMTAwMCwweGM0YzRjNDAwLDB4MDAwMDAwMDAsMHg0ODQ4NDgwMCwKKyAgICAweGEzYTNhMzAwLDB4ZjdmN2Y3MDAsMHg3NTc1NzUwMCwweGRiZGJkYjAwLAorICAgIDB4OGE4YThhMDAsMHgwMzAzMDMwMCwweGU2ZTZlNjAwLDB4ZGFkYWRhMDAsCisgICAgMHgwOTA5MDkwMCwweDNmM2YzZjAwLDB4ZGRkZGRkMDAsMHg5NDk0OTQwMCwKKyAgICAweDg3ODc4NzAwLDB4NWM1YzVjMDAsMHg4MzgzODMwMCwweDAyMDIwMjAwLAorICAgIDB4Y2RjZGNkMDAsMHg0YTRhNGEwMCwweDkwOTA5MDAwLDB4MzMzMzMzMDAsCisgICAgMHg3MzczNzMwMCwweDY3Njc2NzAwLDB4ZjZmNmY2MDAsMHhmM2YzZjMwMCwKKyAgICAweDlkOWQ5ZDAwLDB4N2Y3ZjdmMDAsMHhiZmJmYmYwMCwweGUyZTJlMjAwLAorICAgIDB4NTI1MjUyMDAsMHg5YjliOWIwMCwweGQ4ZDhkODAwLDB4MjYyNjI2MDAsCisgICAgMHhjOGM4YzgwMCwweDM3MzczNzAwLDB4YzZjNmM2MDAsMHgzYjNiM2IwMCwKKyAgICAweDgxODE4MTAwLDB4OTY5Njk2MDAsMHg2ZjZmNmYwMCwweDRiNGI0YjAwLAorICAgIDB4MTMxMzEzMDAsMHhiZWJlYmUwMCwweDYzNjM2MzAwLDB4MmUyZTJlMDAsCisgICAgMHhlOWU5ZTkwMCwweDc5Nzk3OTAwLDB4YTdhN2E3MDAsMHg4YzhjOGMwMCwKKyAgICAweDlmOWY5ZjAwLDB4NmU2ZTZlMDAsMHhiY2JjYmMwMCwweDhlOGU4ZTAwLAorICAgIDB4MjkyOTI5MDAsMHhmNWY1ZjUwMCwweGY5ZjlmOTAwLDB4YjZiNmI2MDAsCisgICAgMHgyZjJmMmYwMCwweGZkZmRmZDAwLDB4YjRiNGI0MDAsMHg1OTU5NTkwMCwKKyAgICAweDc4Nzg3ODAwLDB4OTg5ODk4MDAsMHgwNjA2MDYwMCwweDZhNmE2YTAwLAorICAgIDB4ZTdlN2U3MDAsMHg0NjQ2NDYwMCwweDcxNzE3MTAwLDB4YmFiYWJhMDAsCisgICAgMHhkNGQ0ZDQwMCwweDI1MjUyNTAwLDB4YWJhYmFiMDAsMHg0MjQyNDIwMCwKKyAgICAweDg4ODg4ODAwLDB4YTJhMmEyMDAsMHg4ZDhkOGQwMCwweGZhZmFmYTAwLAorICAgIDB4NzI3MjcyMDAsMHgwNzA3MDcwMCwweGI5YjliOTAwLDB4NTU1NTU1MDAsCisgICAgMHhmOGY4ZjgwMCwweGVlZWVlZTAwLDB4YWNhY2FjMDAsMHgwYTBhMGEwMCwKKyAgICAweDM2MzYzNjAwLDB4NDk0OTQ5MDAsMHgyYTJhMmEwMCwweDY4Njg2ODAwLAorICAgIDB4M2MzYzNjMDAsMHgzODM4MzgwMCwweGYxZjFmMTAwLDB4YTRhNGE0MDAsCisgICAgMHg0MDQwNDAwMCwweDI4MjgyODAwLDB4ZDNkM2QzMDAsMHg3YjdiN2IwMCwKKyAgICAweGJiYmJiYjAwLDB4YzljOWM5MDAsMHg0MzQzNDMwMCwweGMxYzFjMTAwLAorICAgIDB4MTUxNTE1MDAsMHhlM2UzZTMwMCwweGFkYWRhZDAwLDB4ZjRmNGY0MDAsCisgICAgMHg3Nzc3NzcwMCwweGM3YzdjNzAwLDB4ODA4MDgwMDAsMHg5ZTllOWUwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AwMjIyWzI1Nl0gPSB7CisgICAgMHgwMGUwZTBlMCwweDAwMDUwNTA1LDB4MDA1ODU4NTgsMHgwMGQ5ZDlkOSwKKyAgICAweDAwNjc2NzY3LDB4MDA0ZTRlNGUsMHgwMDgxODE4MSwweDAwY2JjYmNiLAorICAgIDB4MDBjOWM5YzksMHgwMDBiMGIwYiwweDAwYWVhZWFlLDB4MDA2YTZhNmEsCisgICAgMHgwMGQ1ZDVkNSwweDAwMTgxODE4LDB4MDA1ZDVkNWQsMHgwMDgyODI4MiwKKyAgICAweDAwNDY0NjQ2LDB4MDBkZmRmZGYsMHgwMGQ2ZDZkNiwweDAwMjcyNzI3LAorICAgIDB4MDA4YThhOGEsMHgwMDMyMzIzMiwweDAwNGI0YjRiLDB4MDA0MjQyNDIsCisgICAgMHgwMGRiZGJkYiwweDAwMWMxYzFjLDB4MDA5ZTllOWUsMHgwMDljOWM5YywKKyAgICAweDAwM2EzYTNhLDB4MDBjYWNhY2EsMHgwMDI1MjUyNSwweDAwN2I3YjdiLAorICAgIDB4MDAwZDBkMGQsMHgwMDcxNzE3MSwweDAwNWY1ZjVmLDB4MDAxZjFmMWYsCisgICAgMHgwMGY4ZjhmOCwweDAwZDdkN2Q3LDB4MDAzZTNlM2UsMHgwMDlkOWQ5ZCwKKyAgICAweDAwN2M3YzdjLDB4MDA2MDYwNjAsMHgwMGI5YjliOSwweDAwYmViZWJlLAorICAgIDB4MDBiY2JjYmMsMHgwMDhiOGI4YiwweDAwMTYxNjE2LDB4MDAzNDM0MzQsCisgICAgMHgwMDRkNGQ0ZCwweDAwYzNjM2MzLDB4MDA3MjcyNzIsMHgwMDk1OTU5NSwKKyAgICAweDAwYWJhYmFiLDB4MDA4ZThlOGUsMHgwMGJhYmFiYSwweDAwN2E3YTdhLAorICAgIDB4MDBiM2IzYjMsMHgwMDAyMDIwMiwweDAwYjRiNGI0LDB4MDBhZGFkYWQsCisgICAgMHgwMGEyYTJhMiwweDAwYWNhY2FjLDB4MDBkOGQ4ZDgsMHgwMDlhOWE5YSwKKyAgICAweDAwMTcxNzE3LDB4MDAxYTFhMWEsMHgwMDM1MzUzNSwweDAwY2NjY2NjLAorICAgIDB4MDBmN2Y3ZjcsMHgwMDk5OTk5OSwweDAwNjE2MTYxLDB4MDA1YTVhNWEsCisgICAgMHgwMGU4ZThlOCwweDAwMjQyNDI0LDB4MDA1NjU2NTYsMHgwMDQwNDA0MCwKKyAgICAweDAwZTFlMWUxLDB4MDA2MzYzNjMsMHgwMDA5MDkwOSwweDAwMzMzMzMzLAorICAgIDB4MDBiZmJmYmYsMHgwMDk4OTg5OCwweDAwOTc5Nzk3LDB4MDA4NTg1ODUsCisgICAgMHgwMDY4Njg2OCwweDAwZmNmY2ZjLDB4MDBlY2VjZWMsMHgwMDBhMGEwYSwKKyAgICAweDAwZGFkYWRhLDB4MDA2ZjZmNmYsMHgwMDUzNTM1MywweDAwNjI2MjYyLAorICAgIDB4MDBhM2EzYTMsMHgwMDJlMmUyZSwweDAwMDgwODA4LDB4MDBhZmFmYWYsCisgICAgMHgwMDI4MjgyOCwweDAwYjBiMGIwLDB4MDA3NDc0NzQsMHgwMGMyYzJjMiwKKyAgICAweDAwYmRiZGJkLDB4MDAzNjM2MzYsMHgwMDIyMjIyMiwweDAwMzgzODM4LAorICAgIDB4MDA2NDY0NjQsMHgwMDFlMWUxZSwweDAwMzkzOTM5LDB4MDAyYzJjMmMsCisgICAgMHgwMGE2YTZhNiwweDAwMzAzMDMwLDB4MDBlNWU1ZTUsMHgwMDQ0NDQ0NCwKKyAgICAweDAwZmRmZGZkLDB4MDA4ODg4ODgsMHgwMDlmOWY5ZiwweDAwNjU2NTY1LAorICAgIDB4MDA4Nzg3ODcsMHgwMDZiNmI2YiwweDAwZjRmNGY0LDB4MDAyMzIzMjMsCisgICAgMHgwMDQ4NDg0OCwweDAwMTAxMDEwLDB4MDBkMWQxZDEsMHgwMDUxNTE1MSwKKyAgICAweDAwYzBjMGMwLDB4MDBmOWY5ZjksMHgwMGQyZDJkMiwweDAwYTBhMGEwLAorICAgIDB4MDA1NTU1NTUsMHgwMGExYTFhMSwweDAwNDE0MTQxLDB4MDBmYWZhZmEsCisgICAgMHgwMDQzNDM0MywweDAwMTMxMzEzLDB4MDBjNGM0YzQsMHgwMDJmMmYyZiwKKyAgICAweDAwYThhOGE4LDB4MDBiNmI2YjYsMHgwMDNjM2MzYywweDAwMmIyYjJiLAorICAgIDB4MDBjMWMxYzEsMHgwMGZmZmZmZiwweDAwYzhjOGM4LDB4MDBhNWE1YTUsCisgICAgMHgwMDIwMjAyMCwweDAwODk4OTg5LDB4MDAwMDAwMDAsMHgwMDkwOTA5MCwKKyAgICAweDAwNDc0NzQ3LDB4MDBlZmVmZWYsMHgwMGVhZWFlYSwweDAwYjdiN2I3LAorICAgIDB4MDAxNTE1MTUsMHgwMDA2MDYwNiwweDAwY2RjZGNkLDB4MDBiNWI1YjUsCisgICAgMHgwMDEyMTIxMiwweDAwN2U3ZTdlLDB4MDBiYmJiYmIsMHgwMDI5MjkyOSwKKyAgICAweDAwMGYwZjBmLDB4MDBiOGI4YjgsMHgwMDA3MDcwNywweDAwMDQwNDA0LAorICAgIDB4MDA5YjliOWIsMHgwMDk0OTQ5NCwweDAwMjEyMTIxLDB4MDA2NjY2NjYsCisgICAgMHgwMGU2ZTZlNiwweDAwY2VjZWNlLDB4MDBlZGVkZWQsMHgwMGU3ZTdlNywKKyAgICAweDAwM2IzYjNiLDB4MDBmZWZlZmUsMHgwMDdmN2Y3ZiwweDAwYzVjNWM1LAorICAgIDB4MDBhNGE0YTQsMHgwMDM3MzczNywweDAwYjFiMWIxLDB4MDA0YzRjNGMsCisgICAgMHgwMDkxOTE5MSwweDAwNmU2ZTZlLDB4MDA4ZDhkOGQsMHgwMDc2NzY3NiwKKyAgICAweDAwMDMwMzAzLDB4MDAyZDJkMmQsMHgwMGRlZGVkZSwweDAwOTY5Njk2LAorICAgIDB4MDAyNjI2MjYsMHgwMDdkN2Q3ZCwweDAwYzZjNmM2LDB4MDA1YzVjNWMsCisgICAgMHgwMGQzZDNkMywweDAwZjJmMmYyLDB4MDA0ZjRmNGYsMHgwMDE5MTkxOSwKKyAgICAweDAwM2YzZjNmLDB4MDBkY2RjZGMsMHgwMDc5Nzk3OSwweDAwMWQxZDFkLAorICAgIDB4MDA1MjUyNTIsMHgwMGViZWJlYiwweDAwZjNmM2YzLDB4MDA2ZDZkNmQsCisgICAgMHgwMDVlNWU1ZSwweDAwZmJmYmZiLDB4MDA2OTY5NjksMHgwMGIyYjJiMiwKKyAgICAweDAwZjBmMGYwLDB4MDAzMTMxMzEsMHgwMDBjMGMwYywweDAwZDRkNGQ0LAorICAgIDB4MDBjZmNmY2YsMHgwMDhjOGM4YywweDAwZTJlMmUyLDB4MDA3NTc1NzUsCisgICAgMHgwMGE5YTlhOSwweDAwNGE0YTRhLDB4MDA1NzU3NTcsMHgwMDg0ODQ4NCwKKyAgICAweDAwMTExMTExLDB4MDA0NTQ1NDUsMHgwMDFiMWIxYiwweDAwZjVmNWY1LAorICAgIDB4MDBlNGU0ZTQsMHgwMDBlMGUwZSwweDAwNzM3MzczLDB4MDBhYWFhYWEsCisgICAgMHgwMGYxZjFmMSwweDAwZGRkZGRkLDB4MDA1OTU5NTksMHgwMDE0MTQxNCwKKyAgICAweDAwNmM2YzZjLDB4MDA5MjkyOTIsMHgwMDU0NTQ1NCwweDAwZDBkMGQwLAorICAgIDB4MDA3ODc4NzgsMHgwMDcwNzA3MCwweDAwZTNlM2UzLDB4MDA0OTQ5NDksCisgICAgMHgwMDgwODA4MCwweDAwNTA1MDUwLDB4MDBhN2E3YTcsMHgwMGY2ZjZmNiwKKyAgICAweDAwNzc3Nzc3LDB4MDA5MzkzOTMsMHgwMDg2ODY4NiwweDAwODM4MzgzLAorICAgIDB4MDAyYTJhMmEsMHgwMGM3YzdjNywweDAwNWI1YjViLDB4MDBlOWU5ZTksCisgICAgMHgwMGVlZWVlZSwweDAwOGY4ZjhmLDB4MDAwMTAxMDEsMHgwMDNkM2QzZCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AzMDMzWzI1Nl0gPSB7CisgICAgMHgzODAwMzgzOCwweDQxMDA0MTQxLDB4MTYwMDE2MTYsMHg3NjAwNzY3NiwKKyAgICAweGQ5MDBkOWQ5LDB4OTMwMDkzOTMsMHg2MDAwNjA2MCwweGYyMDBmMmYyLAorICAgIDB4NzIwMDcyNzIsMHhjMjAwYzJjMiwweGFiMDBhYmFiLDB4OWEwMDlhOWEsCisgICAgMHg3NTAwNzU3NSwweDA2MDAwNjA2LDB4NTcwMDU3NTcsMHhhMDAwYTBhMCwKKyAgICAweDkxMDA5MTkxLDB4ZjcwMGY3ZjcsMHhiNTAwYjViNSwweGM5MDBjOWM5LAorICAgIDB4YTIwMGEyYTIsMHg4YzAwOGM4YywweGQyMDBkMmQyLDB4OTAwMDkwOTAsCisgICAgMHhmNjAwZjZmNiwweDA3MDAwNzA3LDB4YTcwMGE3YTcsMHgyNzAwMjcyNywKKyAgICAweDhlMDA4ZThlLDB4YjIwMGIyYjIsMHg0OTAwNDk0OSwweGRlMDBkZWRlLAorICAgIDB4NDMwMDQzNDMsMHg1YzAwNWM1YywweGQ3MDBkN2Q3LDB4YzcwMGM3YzcsCisgICAgMHgzZTAwM2UzZSwweGY1MDBmNWY1LDB4OGYwMDhmOGYsMHg2NzAwNjc2NywKKyAgICAweDFmMDAxZjFmLDB4MTgwMDE4MTgsMHg2ZTAwNmU2ZSwweGFmMDBhZmFmLAorICAgIDB4MmYwMDJmMmYsMHhlMjAwZTJlMiwweDg1MDA4NTg1LDB4MGQwMDBkMGQsCisgICAgMHg1MzAwNTM1MywweGYwMDBmMGYwLDB4OWMwMDljOWMsMHg2NTAwNjU2NSwKKyAgICAweGVhMDBlYWVhLDB4YTMwMGEzYTMsMHhhZTAwYWVhZSwweDllMDA5ZTllLAorICAgIDB4ZWMwMGVjZWMsMHg4MDAwODA4MCwweDJkMDAyZDJkLDB4NmIwMDZiNmIsCisgICAgMHhhODAwYThhOCwweDJiMDAyYjJiLDB4MzYwMDM2MzYsMHhhNjAwYTZhNiwKKyAgICAweGM1MDBjNWM1LDB4ODYwMDg2ODYsMHg0ZDAwNGQ0ZCwweDMzMDAzMzMzLAorICAgIDB4ZmQwMGZkZmQsMHg2NjAwNjY2NiwweDU4MDA1ODU4LDB4OTYwMDk2OTYsCisgICAgMHgzYTAwM2EzYSwweDA5MDAwOTA5LDB4OTUwMDk1OTUsMHgxMDAwMTAxMCwKKyAgICAweDc4MDA3ODc4LDB4ZDgwMGQ4ZDgsMHg0MjAwNDI0MiwweGNjMDBjY2NjLAorICAgIDB4ZWYwMGVmZWYsMHgyNjAwMjYyNiwweGU1MDBlNWU1LDB4NjEwMDYxNjEsCisgICAgMHgxYTAwMWExYSwweDNmMDAzZjNmLDB4M2IwMDNiM2IsMHg4MjAwODI4MiwKKyAgICAweGI2MDBiNmI2LDB4ZGIwMGRiZGIsMHhkNDAwZDRkNCwweDk4MDA5ODk4LAorICAgIDB4ZTgwMGU4ZTgsMHg4YjAwOGI4YiwweDAyMDAwMjAyLDB4ZWIwMGViZWIsCisgICAgMHgwYTAwMGEwYSwweDJjMDAyYzJjLDB4MWQwMDFkMWQsMHhiMDAwYjBiMCwKKyAgICAweDZmMDA2ZjZmLDB4OGQwMDhkOGQsMHg4ODAwODg4OCwweDBlMDAwZTBlLAorICAgIDB4MTkwMDE5MTksMHg4NzAwODc4NywweDRlMDA0ZTRlLDB4MGIwMDBiMGIsCisgICAgMHhhOTAwYTlhOSwweDBjMDAwYzBjLDB4NzkwMDc5NzksMHgxMTAwMTExMSwKKyAgICAweDdmMDA3ZjdmLDB4MjIwMDIyMjIsMHhlNzAwZTdlNywweDU5MDA1OTU5LAorICAgIDB4ZTEwMGUxZTEsMHhkYTAwZGFkYSwweDNkMDAzZDNkLDB4YzgwMGM4YzgsCisgICAgMHgxMjAwMTIxMiwweDA0MDAwNDA0LDB4NzQwMDc0NzQsMHg1NDAwNTQ1NCwKKyAgICAweDMwMDAzMDMwLDB4N2UwMDdlN2UsMHhiNDAwYjRiNCwweDI4MDAyODI4LAorICAgIDB4NTUwMDU1NTUsMHg2ODAwNjg2OCwweDUwMDA1MDUwLDB4YmUwMGJlYmUsCisgICAgMHhkMDAwZDBkMCwweGM0MDBjNGM0LDB4MzEwMDMxMzEsMHhjYjAwY2JjYiwKKyAgICAweDJhMDAyYTJhLDB4YWQwMGFkYWQsMHgwZjAwMGYwZiwweGNhMDBjYWNhLAorICAgIDB4NzAwMDcwNzAsMHhmZjAwZmZmZiwweDMyMDAzMjMyLDB4NjkwMDY5NjksCisgICAgMHgwODAwMDgwOCwweDYyMDA2MjYyLDB4MDAwMDAwMDAsMHgyNDAwMjQyNCwKKyAgICAweGQxMDBkMWQxLDB4ZmIwMGZiZmIsMHhiYTAwYmFiYSwweGVkMDBlZGVkLAorICAgIDB4NDUwMDQ1NDUsMHg4MTAwODE4MSwweDczMDA3MzczLDB4NmQwMDZkNmQsCisgICAgMHg4NDAwODQ4NCwweDlmMDA5ZjlmLDB4ZWUwMGVlZWUsMHg0YTAwNGE0YSwKKyAgICAweGMzMDBjM2MzLDB4MmUwMDJlMmUsMHhjMTAwYzFjMSwweDAxMDAwMTAxLAorICAgIDB4ZTYwMGU2ZTYsMHgyNTAwMjUyNSwweDQ4MDA0ODQ4LDB4OTkwMDk5OTksCisgICAgMHhiOTAwYjliOSwweGIzMDBiM2IzLDB4N2IwMDdiN2IsMHhmOTAwZjlmOSwKKyAgICAweGNlMDBjZWNlLDB4YmYwMGJmYmYsMHhkZjAwZGZkZiwweDcxMDA3MTcxLAorICAgIDB4MjkwMDI5MjksMHhjZDAwY2RjZCwweDZjMDA2YzZjLDB4MTMwMDEzMTMsCisgICAgMHg2NDAwNjQ2NCwweDliMDA5YjliLDB4NjMwMDYzNjMsMHg5ZDAwOWQ5ZCwKKyAgICAweGMwMDBjMGMwLDB4NGIwMDRiNGIsMHhiNzAwYjdiNywweGE1MDBhNWE1LAorICAgIDB4ODkwMDg5ODksMHg1ZjAwNWY1ZiwweGIxMDBiMWIxLDB4MTcwMDE3MTcsCisgICAgMHhmNDAwZjRmNCwweGJjMDBiY2JjLDB4ZDMwMGQzZDMsMHg0NjAwNDY0NiwKKyAgICAweGNmMDBjZmNmLDB4MzcwMDM3MzcsMHg1ZTAwNWU1ZSwweDQ3MDA0NzQ3LAorICAgIDB4OTQwMDk0OTQsMHhmYTAwZmFmYSwweGZjMDBmY2ZjLDB4NWIwMDViNWIsCisgICAgMHg5NzAwOTc5NywweGZlMDBmZWZlLDB4NWEwMDVhNWEsMHhhYzAwYWNhYywKKyAgICAweDNjMDAzYzNjLDB4NGMwMDRjNGMsMHgwMzAwMDMwMywweDM1MDAzNTM1LAorICAgIDB4ZjMwMGYzZjMsMHgyMzAwMjMyMywweGI4MDBiOGI4LDB4NWQwMDVkNWQsCisgICAgMHg2YTAwNmE2YSwweDkyMDA5MjkyLDB4ZDUwMGQ1ZDUsMHgyMTAwMjEyMSwKKyAgICAweDQ0MDA0NDQ0LDB4NTEwMDUxNTEsMHhjNjAwYzZjNiwweDdkMDA3ZDdkLAorICAgIDB4MzkwMDM5MzksMHg4MzAwODM4MywweGRjMDBkY2RjLDB4YWEwMGFhYWEsCisgICAgMHg3YzAwN2M3YywweDc3MDA3Nzc3LDB4NTYwMDU2NTYsMHgwNTAwMDUwNSwKKyAgICAweDFiMDAxYjFiLDB4YTQwMGE0YTQsMHgxNTAwMTUxNSwweDM0MDAzNDM0LAorICAgIDB4MWUwMDFlMWUsMHgxYzAwMWMxYywweGY4MDBmOGY4LDB4NTIwMDUyNTIsCisgICAgMHgyMDAwMjAyMCwweDE0MDAxNDE0LDB4ZTkwMGU5ZTksMHhiZDAwYmRiZCwKKyAgICAweGRkMDBkZGRkLDB4ZTQwMGU0ZTQsMHhhMTAwYTFhMSwweGUwMDBlMGUwLAorICAgIDB4OGEwMDhhOGEsMHhmMTAwZjFmMSwweGQ2MDBkNmQ2LDB4N2EwMDdhN2EsCisgICAgMHhiYjAwYmJiYiwweGUzMDBlM2UzLDB4NDAwMDQwNDAsMHg0ZjAwNGY0ZiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3A0NDA0WzI1Nl0gPSB7CisgICAgMHg3MDcwMDA3MCwweDJjMmMwMDJjLDB4YjNiMzAwYjMsMHhjMGMwMDBjMCwKKyAgICAweGU0ZTQwMGU0LDB4NTc1NzAwNTcsMHhlYWVhMDBlYSwweGFlYWUwMGFlLAorICAgIDB4MjMyMzAwMjMsMHg2YjZiMDA2YiwweDQ1NDUwMDQ1LDB4YTVhNTAwYTUsCisgICAgMHhlZGVkMDBlZCwweDRmNGYwMDRmLDB4MWQxZDAwMWQsMHg5MjkyMDA5MiwKKyAgICAweDg2ODYwMDg2LDB4YWZhZjAwYWYsMHg3YzdjMDA3YywweDFmMWYwMDFmLAorICAgIDB4M2UzZTAwM2UsMHhkY2RjMDBkYywweDVlNWUwMDVlLDB4MGIwYjAwMGIsCisgICAgMHhhNmE2MDBhNiwweDM5MzkwMDM5LDB4ZDVkNTAwZDUsMHg1ZDVkMDA1ZCwKKyAgICAweGQ5ZDkwMGQ5LDB4NWE1YTAwNWEsMHg1MTUxMDA1MSwweDZjNmMwMDZjLAorICAgIDB4OGI4YjAwOGIsMHg5YTlhMDA5YSwweGZiZmIwMGZiLDB4YjBiMDAwYjAsCisgICAgMHg3NDc0MDA3NCwweDJiMmIwMDJiLDB4ZjBmMDAwZjAsMHg4NDg0MDA4NCwKKyAgICAweGRmZGYwMGRmLDB4Y2JjYjAwY2IsMHgzNDM0MDAzNCwweDc2NzYwMDc2LAorICAgIDB4NmQ2ZDAwNmQsMHhhOWE5MDBhOSwweGQxZDEwMGQxLDB4MDQwNDAwMDQsCisgICAgMHgxNDE0MDAxNCwweDNhM2EwMDNhLDB4ZGVkZTAwZGUsMHgxMTExMDAxMSwKKyAgICAweDMyMzIwMDMyLDB4OWM5YzAwOWMsMHg1MzUzMDA1MywweGYyZjIwMGYyLAorICAgIDB4ZmVmZTAwZmUsMHhjZmNmMDBjZiwweGMzYzMwMGMzLDB4N2E3YTAwN2EsCisgICAgMHgyNDI0MDAyNCwweGU4ZTgwMGU4LDB4NjA2MDAwNjAsMHg2OTY5MDA2OSwKKyAgICAweGFhYWEwMGFhLDB4YTBhMDAwYTAsMHhhMWExMDBhMSwweDYyNjIwMDYyLAorICAgIDB4NTQ1NDAwNTQsMHgxZTFlMDAxZSwweGUwZTAwMGUwLDB4NjQ2NDAwNjQsCisgICAgMHgxMDEwMDAxMCwweDAwMDAwMDAwLDB4YTNhMzAwYTMsMHg3NTc1MDA3NSwKKyAgICAweDhhOGEwMDhhLDB4ZTZlNjAwZTYsMHgwOTA5MDAwOSwweGRkZGQwMGRkLAorICAgIDB4ODc4NzAwODcsMHg4MzgzMDA4MywweGNkY2QwMGNkLDB4OTA5MDAwOTAsCisgICAgMHg3MzczMDA3MywweGY2ZjYwMGY2LDB4OWQ5ZDAwOWQsMHhiZmJmMDBiZiwKKyAgICAweDUyNTIwMDUyLDB4ZDhkODAwZDgsMHhjOGM4MDBjOCwweGM2YzYwMGM2LAorICAgIDB4ODE4MTAwODEsMHg2ZjZmMDA2ZiwweDEzMTMwMDEzLDB4NjM2MzAwNjMsCisgICAgMHhlOWU5MDBlOSwweGE3YTcwMGE3LDB4OWY5ZjAwOWYsMHhiY2JjMDBiYywKKyAgICAweDI5MjkwMDI5LDB4ZjlmOTAwZjksMHgyZjJmMDAyZiwweGI0YjQwMGI0LAorICAgIDB4Nzg3ODAwNzgsMHgwNjA2MDAwNiwweGU3ZTcwMGU3LDB4NzE3MTAwNzEsCisgICAgMHhkNGQ0MDBkNCwweGFiYWIwMGFiLDB4ODg4ODAwODgsMHg4ZDhkMDA4ZCwKKyAgICAweDcyNzIwMDcyLDB4YjliOTAwYjksMHhmOGY4MDBmOCwweGFjYWMwMGFjLAorICAgIDB4MzYzNjAwMzYsMHgyYTJhMDAyYSwweDNjM2MwMDNjLDB4ZjFmMTAwZjEsCisgICAgMHg0MDQwMDA0MCwweGQzZDMwMGQzLDB4YmJiYjAwYmIsMHg0MzQzMDA0MywKKyAgICAweDE1MTUwMDE1LDB4YWRhZDAwYWQsMHg3Nzc3MDA3NywweDgwODAwMDgwLAorICAgIDB4ODI4MjAwODIsMHhlY2VjMDBlYywweDI3MjcwMDI3LDB4ZTVlNTAwZTUsCisgICAgMHg4NTg1MDA4NSwweDM1MzUwMDM1LDB4MGMwYzAwMGMsMHg0MTQxMDA0MSwKKyAgICAweGVmZWYwMGVmLDB4OTM5MzAwOTMsMHgxOTE5MDAxOSwweDIxMjEwMDIxLAorICAgIDB4MGUwZTAwMGUsMHg0ZTRlMDA0ZSwweDY1NjUwMDY1LDB4YmRiZDAwYmQsCisgICAgMHhiOGI4MDBiOCwweDhmOGYwMDhmLDB4ZWJlYjAwZWIsMHhjZWNlMDBjZSwKKyAgICAweDMwMzAwMDMwLDB4NWY1ZjAwNWYsMHhjNWM1MDBjNSwweDFhMWEwMDFhLAorICAgIDB4ZTFlMTAwZTEsMHhjYWNhMDBjYSwweDQ3NDcwMDQ3LDB4M2QzZDAwM2QsCisgICAgMHgwMTAxMDAwMSwweGQ2ZDYwMGQ2LDB4NTY1NjAwNTYsMHg0ZDRkMDA0ZCwKKyAgICAweDBkMGQwMDBkLDB4NjY2NjAwNjYsMHhjY2NjMDBjYywweDJkMmQwMDJkLAorICAgIDB4MTIxMjAwMTIsMHgyMDIwMDAyMCwweGIxYjEwMGIxLDB4OTk5OTAwOTksCisgICAgMHg0YzRjMDA0YywweGMyYzIwMGMyLDB4N2U3ZTAwN2UsMHgwNTA1MDAwNSwKKyAgICAweGI3YjcwMGI3LDB4MzEzMTAwMzEsMHgxNzE3MDAxNywweGQ3ZDcwMGQ3LAorICAgIDB4NTg1ODAwNTgsMHg2MTYxMDA2MSwweDFiMWIwMDFiLDB4MWMxYzAwMWMsCisgICAgMHgwZjBmMDAwZiwweDE2MTYwMDE2LDB4MTgxODAwMTgsMHgyMjIyMDAyMiwKKyAgICAweDQ0NDQwMDQ0LDB4YjJiMjAwYjIsMHhiNWI1MDBiNSwweDkxOTEwMDkxLAorICAgIDB4MDgwODAwMDgsMHhhOGE4MDBhOCwweGZjZmMwMGZjLDB4NTA1MDAwNTAsCisgICAgMHhkMGQwMDBkMCwweDdkN2QwMDdkLDB4ODk4OTAwODksMHg5Nzk3MDA5NywKKyAgICAweDViNWIwMDViLDB4OTU5NTAwOTUsMHhmZmZmMDBmZiwweGQyZDIwMGQyLAorICAgIDB4YzRjNDAwYzQsMHg0ODQ4MDA0OCwweGY3ZjcwMGY3LDB4ZGJkYjAwZGIsCisgICAgMHgwMzAzMDAwMywweGRhZGEwMGRhLDB4M2YzZjAwM2YsMHg5NDk0MDA5NCwKKyAgICAweDVjNWMwMDVjLDB4MDIwMjAwMDIsMHg0YTRhMDA0YSwweDMzMzMwMDMzLAorICAgIDB4Njc2NzAwNjcsMHhmM2YzMDBmMywweDdmN2YwMDdmLDB4ZTJlMjAwZTIsCisgICAgMHg5YjliMDA5YiwweDI2MjYwMDI2LDB4MzczNzAwMzcsMHgzYjNiMDAzYiwKKyAgICAweDk2OTYwMDk2LDB4NGI0YjAwNGIsMHhiZWJlMDBiZSwweDJlMmUwMDJlLAorICAgIDB4Nzk3OTAwNzksMHg4YzhjMDA4YywweDZlNmUwMDZlLDB4OGU4ZTAwOGUsCisgICAgMHhmNWY1MDBmNSwweGI2YjYwMGI2LDB4ZmRmZDAwZmQsMHg1OTU5MDA1OSwKKyAgICAweDk4OTgwMDk4LDB4NmE2YTAwNmEsMHg0NjQ2MDA0NiwweGJhYmEwMGJhLAorICAgIDB4MjUyNTAwMjUsMHg0MjQyMDA0MiwweGEyYTIwMGEyLDB4ZmFmYTAwZmEsCisgICAgMHgwNzA3MDAwNywweDU1NTUwMDU1LDB4ZWVlZTAwZWUsMHgwYTBhMDAwYSwKKyAgICAweDQ5NDkwMDQ5LDB4Njg2ODAwNjgsMHgzODM4MDAzOCwweGE0YTQwMGE0LAorICAgIDB4MjgyODAwMjgsMHg3YjdiMDA3YiwweGM5YzkwMGM5LDB4YzFjMTAwYzEsCisgICAgMHhlM2UzMDBlMywweGY0ZjQwMGY0LDB4YzdjNzAwYzcsMHg5ZTllMDA5ZSwKK307CisKKworLyoqCisgKiBTdHVmZiByZWxhdGVkIHRvIHRoZSBDYW1lbGxpYSBrZXkgc2NoZWR1bGUKKyAqLworI2RlZmluZSBzdWJsKHgpIHN1YkxbKHgpXQorI2RlZmluZSBzdWJyKHgpIHN1YlJbKHgpXQorCit2b2lkIGNhbWVsbGlhX3NldHVwMTI4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdTMyICpzdWJrZXkpCit7CisgICAgdTMyIGtsbCwga2xyLCBrcmwsIGtycjsKKyAgICB1MzIgaWwsIGlyLCB0MCwgdDEsIHcwLCB3MTsKKyAgICB1MzIga3c0bCwga3c0ciwgZHcsIHRsLCB0cjsKKyAgICB1MzIgc3ViTFsyNl07CisgICAgdTMyIHN1YlJbMjZdOworCisgICAgLyoqCisgICAgICogIGsgPT0ga2xsIHx8IGtsciB8fCBrcmwgfHwga3JyICh8fCBpcyBjb25jYXRpbmF0aW9uKQorICAgICAqLworICAgIGtsbCA9IEdFVFUzMihrZXkgICAgICk7CisgICAga2xyID0gR0VUVTMyKGtleSArICA0KTsKKyAgICBrcmwgPSBHRVRVMzIoa2V5ICsgIDgpOworICAgIGtyciA9IEdFVFUzMihrZXkgKyAxMik7CisgICAgLyoqCisgICAgICogZ2VuZXJhdGUgS0wgZGVwZW5kZW50IHN1YmtleXMKKyAgICAgKi8KKyAgICBzdWJsKDApID0ga2xsOyBzdWJyKDApID0ga2xyOworICAgIHN1YmwoMSkgPSBrcmw7IHN1YnIoMSkgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDQpID0ga2xsOyBzdWJyKDQpID0ga2xyOworICAgIHN1YmwoNSkgPSBrcmw7IHN1YnIoNSkgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDMwKTsKKyAgICBzdWJsKDEwKSA9IGtsbDsgc3VicigxMCkgPSBrbHI7CisgICAgc3VibCgxMSkgPSBrcmw7IHN1YnIoMTEpID0ga3JyOworICAgIENBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7CisgICAgc3VibCgxMykgPSBrcmw7IHN1YnIoMTMpID0ga3JyOworICAgIENBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNyk7CisgICAgc3VibCgxNikgPSBrbGw7IHN1YnIoMTYpID0ga2xyOworICAgIHN1YmwoMTcpID0ga3JsOyBzdWJyKDE3KSA9IGtycjsKKyAgICBDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTcpOworICAgIHN1YmwoMTgpID0ga2xsOyBzdWJyKDE4KSA9IGtscjsKKyAgICBzdWJsKDE5KSA9IGtybDsgc3VicigxOSkgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE3KTsKKyAgICBzdWJsKDIyKSA9IGtsbDsgc3VicigyMikgPSBrbHI7CisgICAgc3VibCgyMykgPSBrcmw7IHN1YnIoMjMpID0ga3JyOworCisgICAgLyogZ2VuZXJhdGUgS0EgKi8KKyAgICBrbGwgPSBzdWJsKDApOyBrbHIgPSBzdWJyKDApOworICAgIGtybCA9IHN1YmwoMSk7IGtyciA9IHN1YnIoMSk7CisgICAgQ0FNRUxMSUFfRihrbGwsIGtsciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUExTCwgQ0FNRUxMSUFfU0lHTUExUiwKKwkgICAgICAgdzAsIHcxLCBpbCwgaXIsIHQwLCB0MSk7CisgICAga3JsIF49IHcwOyBrcnIgXj0gdzE7CisgICAgQ0FNRUxMSUFfRihrcmwsIGtyciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUEyTCwgQ0FNRUxMSUFfU0lHTUEyUiwKKwkgICAgICAga2xsLCBrbHIsIGlsLCBpciwgdDAsIHQxKTsKKyAgICBDQU1FTExJQV9GKGtsbCwga2xyLAorCSAgICAgICBDQU1FTExJQV9TSUdNQTNMLCBDQU1FTExJQV9TSUdNQTNSLAorCSAgICAgICBrcmwsIGtyciwgaWwsIGlyLCB0MCwgdDEpOworICAgIGtybCBePSB3MDsga3JyIF49IHcxOworICAgIENBTUVMTElBX0Yoa3JsLCBrcnIsCisJICAgICAgIENBTUVMTElBX1NJR01BNEwsIENBTUVMTElBX1NJR01BNFIsCisJICAgICAgIHcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOworICAgIGtsbCBePSB3MDsga2xyIF49IHcxOworCisgICAgLyogZ2VuZXJhdGUgS0EgZGVwZW5kZW50IHN1YmtleXMgKi8KKyAgICBzdWJsKDIpID0ga2xsOyBzdWJyKDIpID0ga2xyOworICAgIHN1YmwoMykgPSBrcmw7IHN1YnIoMykgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDYpID0ga2xsOyBzdWJyKDYpID0ga2xyOworICAgIHN1YmwoNykgPSBrcmw7IHN1YnIoNykgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDgpID0ga2xsOyBzdWJyKDgpID0ga2xyOworICAgIHN1YmwoOSkgPSBrcmw7IHN1YnIoOSkgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDEyKSA9IGtsbDsgc3VicigxMikgPSBrbHI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDE0KSA9IGtsbDsgc3VicigxNCkgPSBrbHI7CisgICAgc3VibCgxNSkgPSBrcmw7IHN1YnIoMTUpID0ga3JyOworICAgIENBTUVMTElBX1JPTERRbzMyKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAzNCk7CisgICAgc3VibCgyMCkgPSBrbGw7IHN1YnIoMjApID0ga2xyOworICAgIHN1YmwoMjEpID0ga3JsOyBzdWJyKDIxKSA9IGtycjsKKyAgICBDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTcpOworICAgIHN1YmwoMjQpID0ga2xsOyBzdWJyKDI0KSA9IGtscjsKKyAgICBzdWJsKDI1KSA9IGtybDsgc3VicigyNSkgPSBrcnI7CisKKworICAgIC8qIGFic29yYiBrdzIgdG8gb3RoZXIgc3Via2V5cyAqLworICAgIHN1YmwoMykgXj0gc3VibCgxKTsgc3VicigzKSBePSBzdWJyKDEpOworICAgIHN1YmwoNSkgXj0gc3VibCgxKTsgc3Vicig1KSBePSBzdWJyKDEpOworICAgIHN1YmwoNykgXj0gc3VibCgxKTsgc3Vicig3KSBePSBzdWJyKDEpOworICAgIHN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDkpOworICAgIGR3ID0gc3VibCgxKSAmIHN1YmwoOSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBzdWJsKDExKSBePSBzdWJsKDEpOyBzdWJyKDExKSBePSBzdWJyKDEpOworICAgIHN1YmwoMTMpIF49IHN1YmwoMSk7IHN1YnIoMTMpIF49IHN1YnIoMSk7CisgICAgc3VibCgxNSkgXj0gc3VibCgxKTsgc3VicigxNSkgXj0gc3VicigxKTsKKyAgICBzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3VicigxNyk7CisgICAgZHcgPSBzdWJsKDEpICYgc3VibCgxNyksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBzdWJsKDE5KSBePSBzdWJsKDEpOyBzdWJyKDE5KSBePSBzdWJyKDEpOworICAgIHN1YmwoMjEpIF49IHN1YmwoMSk7IHN1YnIoMjEpIF49IHN1YnIoMSk7CisgICAgc3VibCgyMykgXj0gc3VibCgxKTsgc3VicigyMykgXj0gc3VicigxKTsKKyAgICBzdWJsKDI0KSBePSBzdWJsKDEpOyBzdWJyKDI0KSBePSBzdWJyKDEpOworCisgICAgLyogYWJzb3JiIGt3NCB0byBvdGhlciBzdWJrZXlzICovCisgICAga3c0bCA9IHN1YmwoMjUpOyBrdzRyID0gc3VicigyNSk7CisgICAgc3VibCgyMikgXj0ga3c0bDsgc3VicigyMikgXj0ga3c0cjsKKyAgICBzdWJsKDIwKSBePSBrdzRsOyBzdWJyKDIwKSBePSBrdzRyOworICAgIHN1YmwoMTgpIF49IGt3NGw7IHN1YnIoMTgpIF49IGt3NHI7CisgICAga3c0bCBePSBrdzRyICYgfnN1YnIoMTYpOworICAgIGR3ID0ga3c0bCAmIHN1YmwoMTYpLCBrdzRyIF49IENBTUVMTElBX1JMMShkdyk7CisgICAgc3VibCgxNCkgXj0ga3c0bDsgc3VicigxNCkgXj0ga3c0cjsKKyAgICBzdWJsKDEyKSBePSBrdzRsOyBzdWJyKDEyKSBePSBrdzRyOworICAgIHN1YmwoMTApIF49IGt3NGw7IHN1YnIoMTApIF49IGt3NHI7CisgICAga3c0bCBePSBrdzRyICYgfnN1YnIoOCk7CisgICAgZHcgPSBrdzRsICYgc3VibCg4KSwga3c0ciBePSBDQU1FTExJQV9STDEoZHcpOworICAgIHN1YmwoNikgXj0ga3c0bDsgc3Vicig2KSBePSBrdzRyOworICAgIHN1YmwoNCkgXj0ga3c0bDsgc3Vicig0KSBePSBrdzRyOworICAgIHN1YmwoMikgXj0ga3c0bDsgc3VicigyKSBePSBrdzRyOworICAgIHN1YmwoMCkgXj0ga3c0bDsgc3VicigwKSBePSBrdzRyOworCisgICAgLyoga2V5IFhPUiBpcyBlbmQgb2YgRi1mdW5jdGlvbiAqLworICAgIENhbWVsbGlhU3Via2V5TCgwKSA9IHN1YmwoMCkgXiBzdWJsKDIpOworICAgIENhbWVsbGlhU3Via2V5UigwKSA9IHN1YnIoMCkgXiBzdWJyKDIpOworICAgIENhbWVsbGlhU3Via2V5TCgyKSA9IHN1YmwoMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDIpID0gc3VicigzKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMykgPSBzdWJsKDIpIF4gc3VibCg0KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMykgPSBzdWJyKDIpIF4gc3Vicig0KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNCkgPSBzdWJsKDMpIF4gc3VibCg1KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNCkgPSBzdWJyKDMpIF4gc3Vicig1KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNSkgPSBzdWJsKDQpIF4gc3VibCg2KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNSkgPSBzdWJyKDQpIF4gc3Vicig2KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNikgPSBzdWJsKDUpIF4gc3VibCg3KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNikgPSBzdWJyKDUpIF4gc3Vicig3KTsKKyAgICB0bCA9IHN1YmwoMTApIF4gKHN1YnIoMTApICYgfnN1YnIoOCkpOworICAgIGR3ID0gdGwgJiBzdWJsKDgpLCB0ciA9IHN1YnIoMTApIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNykgPSBzdWJsKDYpIF4gdGw7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDcpID0gc3Vicig2KSBeIHRyOworICAgIENhbWVsbGlhU3Via2V5TCg4KSA9IHN1YmwoOCk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDgpID0gc3Vicig4KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoOSkgPSBzdWJsKDkpOworICAgIENhbWVsbGlhU3Via2V5Uig5KSA9IHN1YnIoOSk7CisgICAgdGwgPSBzdWJsKDcpIF4gKHN1YnIoNykgJiB+c3Vicig5KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoOSksIHRyID0gc3Vicig3KSBeIENBTUVMTElBX1JMMShkdyk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEwKSA9IHRsIF4gc3VibCgxMSk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEwKSA9IHRyIF4gc3VicigxMSk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSA9IHN1YmwoMTApIF4gc3VibCgxMik7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDExKSA9IHN1YnIoMTApIF4gc3VicigxMik7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEyKSA9IHN1YmwoMTEpIF4gc3VibCgxMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEyKSA9IHN1YnIoMTEpIF4gc3VicigxMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEzKSA9IHN1YmwoMTIpIF4gc3VibCgxNCk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEzKSA9IHN1YnIoMTIpIF4gc3VicigxNCk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSA9IHN1YmwoMTMpIF4gc3VibCgxNSk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDE0KSA9IHN1YnIoMTMpIF4gc3VicigxNSk7CisgICAgdGwgPSBzdWJsKDE4KSBeIChzdWJyKDE4KSAmIH5zdWJyKDE2KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoMTYpLAl0ciA9IHN1YnIoMTgpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTUpID0gc3VibCgxNCkgXiB0bDsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTUpID0gc3VicigxNCkgXiB0cjsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTYpID0gc3VibCgxNik7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDE2KSA9IHN1YnIoMTYpOworICAgIENhbWVsbGlhU3Via2V5TCgxNykgPSBzdWJsKDE3KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTcpID0gc3VicigxNyk7CisgICAgdGwgPSBzdWJsKDE1KSBeIChzdWJyKDE1KSAmIH5zdWJyKDE3KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoMTcpLAl0ciA9IHN1YnIoMTUpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTgpID0gdGwgXiBzdWJsKDE5KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTgpID0gdHIgXiBzdWJyKDE5KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTkpID0gc3VibCgxOCkgXiBzdWJsKDIwKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTkpID0gc3VicigxOCkgXiBzdWJyKDIwKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjApID0gc3VibCgxOSkgXiBzdWJsKDIxKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjApID0gc3VicigxOSkgXiBzdWJyKDIxKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjEpID0gc3VibCgyMCkgXiBzdWJsKDIyKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjEpID0gc3VicigyMCkgXiBzdWJyKDIyKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjIpID0gc3VibCgyMSkgXiBzdWJsKDIzKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjIpID0gc3VicigyMSkgXiBzdWJyKDIzKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjMpID0gc3VibCgyMik7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDIzKSA9IHN1YnIoMjIpOworICAgIENhbWVsbGlhU3Via2V5TCgyNCkgPSBzdWJsKDI0KSBeIHN1YmwoMjMpOworICAgIENhbWVsbGlhU3Via2V5UigyNCkgPSBzdWJyKDI0KSBeIHN1YnIoMjMpOworCisgICAgcmV0dXJuOworfQorCit2b2lkIGNhbWVsbGlhX3NldHVwMjU2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdTMyICpzdWJrZXkpCit7CisgICAgdTMyIGtsbCxrbHIsa3JsLGtycjsgICAgICAgICAgIC8qIGxlZnQgaGFsZiBvZiBrZXkgKi8KKyAgICB1MzIga3JsbCxrcmxyLGtycmwsa3JycjsgICAgICAgLyogcmlnaHQgaGFsZiBvZiBrZXkgKi8KKyAgICB1MzIgaWwsIGlyLCB0MCwgdDEsIHcwLCB3MTsgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLworICAgIHUzMiBrdzRsLCBrdzRyLCBkdywgdGwsIHRyOworICAgIHUzMiBzdWJMWzM0XTsKKyAgICB1MzIgc3ViUlszNF07CisKKyAgICAvKioKKyAgICAgKiAga2V5ID0gKGtsbCB8fCBrbHIgfHwga3JsIHx8IGtyciB8fCBrcmxsIHx8IGtybHIgfHwga3JybCB8fCBrcnJyKQorICAgICAqICAofHwgaXMgY29uY2F0aW5hdGlvbikKKyAgICAgKi8KKworICAgIGtsbCAgPSBHRVRVMzIoa2V5ICAgICApOworICAgIGtsciAgPSBHRVRVMzIoa2V5ICsgIDQpOworICAgIGtybCAgPSBHRVRVMzIoa2V5ICsgIDgpOworICAgIGtyciAgPSBHRVRVMzIoa2V5ICsgMTIpOworICAgIGtybGwgPSBHRVRVMzIoa2V5ICsgMTYpOworICAgIGtybHIgPSBHRVRVMzIoa2V5ICsgMjApOworICAgIGtycmwgPSBHRVRVMzIoa2V5ICsgMjQpOworICAgIGtycnIgPSBHRVRVMzIoa2V5ICsgMjgpOworCisgICAgLyogZ2VuZXJhdGUgS0wgZGVwZW5kZW50IHN1YmtleXMgKi8KKyAgICBzdWJsKDApID0ga2xsOyBzdWJyKDApID0ga2xyOworICAgIHN1YmwoMSkgPSBrcmw7IHN1YnIoMSkgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFFvMzIoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDQ1KTsKKyAgICBzdWJsKDEyKSA9IGtsbDsgc3VicigxMikgPSBrbHI7CisgICAgc3VibCgxMykgPSBrcmw7IHN1YnIoMTMpID0ga3JyOworICAgIENBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7CisgICAgc3VibCgxNikgPSBrbGw7IHN1YnIoMTYpID0ga2xyOworICAgIHN1YmwoMTcpID0ga3JsOyBzdWJyKDE3KSA9IGtycjsKKyAgICBDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTcpOworICAgIHN1YmwoMjIpID0ga2xsOyBzdWJyKDIyKSA9IGtscjsKKyAgICBzdWJsKDIzKSA9IGtybDsgc3VicigyMykgPSBrcnI7CisgICAgQ0FNRUxMSUFfUk9MRFFvMzIoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDM0KTsKKyAgICBzdWJsKDMwKSA9IGtsbDsgc3VicigzMCkgPSBrbHI7CisgICAgc3VibCgzMSkgPSBrcmw7IHN1YnIoMzEpID0ga3JyOworCisgICAgLyogZ2VuZXJhdGUgS1IgZGVwZW5kZW50IHN1YmtleXMgKi8KKyAgICBDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDE1KTsKKyAgICBzdWJsKDQpID0ga3JsbDsgc3Vicig0KSA9IGtybHI7CisgICAgc3VibCg1KSA9IGtycmw7IHN1YnIoNSkgPSBrcnJyOworICAgIENBTUVMTElBX1JPTERRKGtybGwsIGtybHIsIGtycmwsIGtycnIsIHcwLCB3MSwgMTUpOworICAgIHN1YmwoOCkgPSBrcmxsOyBzdWJyKDgpID0ga3JscjsKKyAgICBzdWJsKDkpID0ga3JybDsgc3Vicig5KSA9IGtycnI7CisgICAgQ0FNRUxMSUFfUk9MRFEoa3JsbCwga3Jsciwga3JybCwga3JyciwgdzAsIHcxLCAzMCk7CisgICAgc3VibCgxOCkgPSBrcmxsOyBzdWJyKDE4KSA9IGtybHI7CisgICAgc3VibCgxOSkgPSBrcnJsOyBzdWJyKDE5KSA9IGtycnI7CisgICAgQ0FNRUxMSUFfUk9MRFFvMzIoa3JsbCwga3Jsciwga3JybCwga3JyciwgdzAsIHcxLCAzNCk7CisgICAgc3VibCgyNikgPSBrcmxsOyBzdWJyKDI2KSA9IGtybHI7CisgICAgc3VibCgyNykgPSBrcnJsOyBzdWJyKDI3KSA9IGtycnI7CisgICAgQ0FNRUxMSUFfUk9MRFFvMzIoa3JsbCwga3Jsciwga3JybCwga3JyciwgdzAsIHcxLCAzNCk7CisKKyAgICAvKiBnZW5lcmF0ZSBLQSAqLworICAgIGtsbCA9IHN1YmwoMCkgXiBrcmxsOyBrbHIgPSBzdWJyKDApIF4ga3JscjsKKyAgICBrcmwgPSBzdWJsKDEpIF4ga3JybDsga3JyID0gc3VicigxKSBeIGtycnI7CisgICAgQ0FNRUxMSUFfRihrbGwsIGtsciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUExTCwgQ0FNRUxMSUFfU0lHTUExUiwKKwkgICAgICAgdzAsIHcxLCBpbCwgaXIsIHQwLCB0MSk7CisgICAga3JsIF49IHcwOyBrcnIgXj0gdzE7CisgICAgQ0FNRUxMSUFfRihrcmwsIGtyciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUEyTCwgQ0FNRUxMSUFfU0lHTUEyUiwKKwkgICAgICAga2xsLCBrbHIsIGlsLCBpciwgdDAsIHQxKTsKKyAgICBrbGwgXj0ga3JsbDsga2xyIF49IGtybHI7CisgICAgQ0FNRUxMSUFfRihrbGwsIGtsciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUEzTCwgQ0FNRUxMSUFfU0lHTUEzUiwKKwkgICAgICAga3JsLCBrcnIsIGlsLCBpciwgdDAsIHQxKTsKKyAgICBrcmwgXj0gdzAgXiBrcnJsOyBrcnIgXj0gdzEgXiBrcnJyOworICAgIENBTUVMTElBX0Yoa3JsLCBrcnIsCisJICAgICAgIENBTUVMTElBX1NJR01BNEwsIENBTUVMTElBX1NJR01BNFIsCisJICAgICAgIHcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOworICAgIGtsbCBePSB3MDsga2xyIF49IHcxOworCisgICAgLyogZ2VuZXJhdGUgS0IgKi8KKyAgICBrcmxsIF49IGtsbDsga3JsciBePSBrbHI7CisgICAga3JybCBePSBrcmw7IGtycnIgXj0ga3JyOworICAgIENBTUVMTElBX0Yoa3JsbCwga3JsciwKKwkgICAgICAgQ0FNRUxMSUFfU0lHTUE1TCwgQ0FNRUxMSUFfU0lHTUE1UiwKKwkgICAgICAgdzAsIHcxLCBpbCwgaXIsIHQwLCB0MSk7CisgICAga3JybCBePSB3MDsga3JyciBePSB3MTsKKyAgICBDQU1FTExJQV9GKGtycmwsIGtycnIsCisJICAgICAgIENBTUVMTElBX1NJR01BNkwsIENBTUVMTElBX1NJR01BNlIsCisJICAgICAgIHcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOworICAgIGtybGwgXj0gdzA7IGtybHIgXj0gdzE7CisKKyAgICAvKiBnZW5lcmF0ZSBLQSBkZXBlbmRlbnQgc3Via2V5cyAqLworICAgIENBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7CisgICAgc3VibCg2KSA9IGtsbDsgc3Vicig2KSA9IGtscjsKKyAgICBzdWJsKDcpID0ga3JsOyBzdWJyKDcpID0ga3JyOworICAgIENBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAzMCk7CisgICAgc3VibCgxNCkgPSBrbGw7IHN1YnIoMTQpID0ga2xyOworICAgIHN1YmwoMTUpID0ga3JsOyBzdWJyKDE1KSA9IGtycjsKKyAgICBzdWJsKDI0KSA9IGtscjsgc3VicigyNCkgPSBrcmw7CisgICAgc3VibCgyNSkgPSBrcnI7IHN1YnIoMjUpID0ga2xsOworICAgIENBTUVMTElBX1JPTERRbzMyKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCA0OSk7CisgICAgc3VibCgyOCkgPSBrbGw7IHN1YnIoMjgpID0ga2xyOworICAgIHN1YmwoMjkpID0ga3JsOyBzdWJyKDI5KSA9IGtycjsKKworICAgIC8qIGdlbmVyYXRlIEtCIGRlcGVuZGVudCBzdWJrZXlzICovCisgICAgc3VibCgyKSA9IGtybGw7IHN1YnIoMikgPSBrcmxyOworICAgIHN1YmwoMykgPSBrcnJsOyBzdWJyKDMpID0ga3JycjsKKyAgICBDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDMwKTsKKyAgICBzdWJsKDEwKSA9IGtybGw7IHN1YnIoMTApID0ga3JscjsKKyAgICBzdWJsKDExKSA9IGtycmw7IHN1YnIoMTEpID0ga3JycjsKKyAgICBDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDMwKTsKKyAgICBzdWJsKDIwKSA9IGtybGw7IHN1YnIoMjApID0ga3JscjsKKyAgICBzdWJsKDIxKSA9IGtycmw7IHN1YnIoMjEpID0ga3JycjsKKyAgICBDQU1FTExJQV9ST0xEUW8zMihrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDUxKTsKKyAgICBzdWJsKDMyKSA9IGtybGw7IHN1YnIoMzIpID0ga3JscjsKKyAgICBzdWJsKDMzKSA9IGtycmw7IHN1YnIoMzMpID0ga3JycjsKKworICAgIC8qIGFic29yYiBrdzIgdG8gb3RoZXIgc3Via2V5cyAqLworICAgIHN1YmwoMykgXj0gc3VibCgxKTsgc3VicigzKSBePSBzdWJyKDEpOworICAgIHN1YmwoNSkgXj0gc3VibCgxKTsgc3Vicig1KSBePSBzdWJyKDEpOworICAgIHN1YmwoNykgXj0gc3VibCgxKTsgc3Vicig3KSBePSBzdWJyKDEpOworICAgIHN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDkpOworICAgIGR3ID0gc3VibCgxKSAmIHN1YmwoOSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBzdWJsKDExKSBePSBzdWJsKDEpOyBzdWJyKDExKSBePSBzdWJyKDEpOworICAgIHN1YmwoMTMpIF49IHN1YmwoMSk7IHN1YnIoMTMpIF49IHN1YnIoMSk7CisgICAgc3VibCgxNSkgXj0gc3VibCgxKTsgc3VicigxNSkgXj0gc3VicigxKTsKKyAgICBzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3VicigxNyk7CisgICAgZHcgPSBzdWJsKDEpICYgc3VibCgxNyksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBzdWJsKDE5KSBePSBzdWJsKDEpOyBzdWJyKDE5KSBePSBzdWJyKDEpOworICAgIHN1YmwoMjEpIF49IHN1YmwoMSk7IHN1YnIoMjEpIF49IHN1YnIoMSk7CisgICAgc3VibCgyMykgXj0gc3VibCgxKTsgc3VicigyMykgXj0gc3VicigxKTsKKyAgICBzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3VicigyNSk7CisgICAgZHcgPSBzdWJsKDEpICYgc3VibCgyNSksIHN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBzdWJsKDI3KSBePSBzdWJsKDEpOyBzdWJyKDI3KSBePSBzdWJyKDEpOworICAgIHN1YmwoMjkpIF49IHN1YmwoMSk7IHN1YnIoMjkpIF49IHN1YnIoMSk7CisgICAgc3VibCgzMSkgXj0gc3VibCgxKTsgc3VicigzMSkgXj0gc3VicigxKTsKKyAgICBzdWJsKDMyKSBePSBzdWJsKDEpOyBzdWJyKDMyKSBePSBzdWJyKDEpOworCisgICAgLyogYWJzb3JiIGt3NCB0byBvdGhlciBzdWJrZXlzICovCisgICAga3c0bCA9IHN1YmwoMzMpOyBrdzRyID0gc3VicigzMyk7CisgICAgc3VibCgzMCkgXj0ga3c0bDsgc3VicigzMCkgXj0ga3c0cjsKKyAgICBzdWJsKDI4KSBePSBrdzRsOyBzdWJyKDI4KSBePSBrdzRyOworICAgIHN1YmwoMjYpIF49IGt3NGw7IHN1YnIoMjYpIF49IGt3NHI7CisgICAga3c0bCBePSBrdzRyICYgfnN1YnIoMjQpOworICAgIGR3ID0ga3c0bCAmIHN1YmwoMjQpLCBrdzRyIF49IENBTUVMTElBX1JMMShkdyk7CisgICAgc3VibCgyMikgXj0ga3c0bDsgc3VicigyMikgXj0ga3c0cjsKKyAgICBzdWJsKDIwKSBePSBrdzRsOyBzdWJyKDIwKSBePSBrdzRyOworICAgIHN1YmwoMTgpIF49IGt3NGw7IHN1YnIoMTgpIF49IGt3NHI7CisgICAga3c0bCBePSBrdzRyICYgfnN1YnIoMTYpOworICAgIGR3ID0ga3c0bCAmIHN1YmwoMTYpLCBrdzRyIF49IENBTUVMTElBX1JMMShkdyk7CisgICAgc3VibCgxNCkgXj0ga3c0bDsgc3VicigxNCkgXj0ga3c0cjsKKyAgICBzdWJsKDEyKSBePSBrdzRsOyBzdWJyKDEyKSBePSBrdzRyOworICAgIHN1YmwoMTApIF49IGt3NGw7IHN1YnIoMTApIF49IGt3NHI7CisgICAga3c0bCBePSBrdzRyICYgfnN1YnIoOCk7CisgICAgZHcgPSBrdzRsICYgc3VibCg4KSwga3c0ciBePSBDQU1FTExJQV9STDEoZHcpOworICAgIHN1YmwoNikgXj0ga3c0bDsgc3Vicig2KSBePSBrdzRyOworICAgIHN1YmwoNCkgXj0ga3c0bDsgc3Vicig0KSBePSBrdzRyOworICAgIHN1YmwoMikgXj0ga3c0bDsgc3VicigyKSBePSBrdzRyOworICAgIHN1YmwoMCkgXj0ga3c0bDsgc3VicigwKSBePSBrdzRyOworCisgICAgLyoga2V5IFhPUiBpcyBlbmQgb2YgRi1mdW5jdGlvbiAqLworICAgIENhbWVsbGlhU3Via2V5TCgwKSA9IHN1YmwoMCkgXiBzdWJsKDIpOworICAgIENhbWVsbGlhU3Via2V5UigwKSA9IHN1YnIoMCkgXiBzdWJyKDIpOworICAgIENhbWVsbGlhU3Via2V5TCgyKSA9IHN1YmwoMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDIpID0gc3VicigzKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMykgPSBzdWJsKDIpIF4gc3VibCg0KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMykgPSBzdWJyKDIpIF4gc3Vicig0KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNCkgPSBzdWJsKDMpIF4gc3VibCg1KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNCkgPSBzdWJyKDMpIF4gc3Vicig1KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNSkgPSBzdWJsKDQpIF4gc3VibCg2KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNSkgPSBzdWJyKDQpIF4gc3Vicig2KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNikgPSBzdWJsKDUpIF4gc3VibCg3KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoNikgPSBzdWJyKDUpIF4gc3Vicig3KTsKKyAgICB0bCA9IHN1YmwoMTApIF4gKHN1YnIoMTApICYgfnN1YnIoOCkpOworICAgIGR3ID0gdGwgJiBzdWJsKDgpLCB0ciA9IHN1YnIoMTApIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoNykgPSBzdWJsKDYpIF4gdGw7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDcpID0gc3Vicig2KSBeIHRyOworICAgIENhbWVsbGlhU3Via2V5TCg4KSA9IHN1YmwoOCk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDgpID0gc3Vicig4KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoOSkgPSBzdWJsKDkpOworICAgIENhbWVsbGlhU3Via2V5Uig5KSA9IHN1YnIoOSk7CisgICAgdGwgPSBzdWJsKDcpIF4gKHN1YnIoNykgJiB+c3Vicig5KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoOSksIHRyID0gc3Vicig3KSBeIENBTUVMTElBX1JMMShkdyk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEwKSA9IHRsIF4gc3VibCgxMSk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEwKSA9IHRyIF4gc3VicigxMSk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSA9IHN1YmwoMTApIF4gc3VibCgxMik7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDExKSA9IHN1YnIoMTApIF4gc3VicigxMik7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEyKSA9IHN1YmwoMTEpIF4gc3VibCgxMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEyKSA9IHN1YnIoMTEpIF4gc3VicigxMyk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDEzKSA9IHN1YmwoMTIpIF4gc3VibCgxNCk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDEzKSA9IHN1YnIoMTIpIF4gc3VicigxNCk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSA9IHN1YmwoMTMpIF4gc3VibCgxNSk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDE0KSA9IHN1YnIoMTMpIF4gc3VicigxNSk7CisgICAgdGwgPSBzdWJsKDE4KSBeIChzdWJyKDE4KSAmIH5zdWJyKDE2KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoMTYpLCB0ciA9IHN1YnIoMTgpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTUpID0gc3VibCgxNCkgXiB0bDsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTUpID0gc3VicigxNCkgXiB0cjsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTYpID0gc3VibCgxNik7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDE2KSA9IHN1YnIoMTYpOworICAgIENhbWVsbGlhU3Via2V5TCgxNykgPSBzdWJsKDE3KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTcpID0gc3VicigxNyk7CisgICAgdGwgPSBzdWJsKDE1KSBeIChzdWJyKDE1KSAmIH5zdWJyKDE3KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoMTcpLCB0ciA9IHN1YnIoMTUpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTgpID0gdGwgXiBzdWJsKDE5KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTgpID0gdHIgXiBzdWJyKDE5KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMTkpID0gc3VibCgxOCkgXiBzdWJsKDIwKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMTkpID0gc3VicigxOCkgXiBzdWJyKDIwKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjApID0gc3VibCgxOSkgXiBzdWJsKDIxKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjApID0gc3VicigxOSkgXiBzdWJyKDIxKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjEpID0gc3VibCgyMCkgXiBzdWJsKDIyKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjEpID0gc3VicigyMCkgXiBzdWJyKDIyKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjIpID0gc3VibCgyMSkgXiBzdWJsKDIzKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjIpID0gc3VicigyMSkgXiBzdWJyKDIzKTsKKyAgICB0bCA9IHN1YmwoMjYpIF4gKHN1YnIoMjYpICYgfnN1YnIoMjQpKTsKKyAgICBkdyA9IHRsICYgc3VibCgyNCksIHRyID0gc3VicigyNikgXiBDQU1FTExJQV9STDEoZHcpOworICAgIENhbWVsbGlhU3Via2V5TCgyMykgPSBzdWJsKDIyKSBeIHRsOworICAgIENhbWVsbGlhU3Via2V5UigyMykgPSBzdWJyKDIyKSBeIHRyOworICAgIENhbWVsbGlhU3Via2V5TCgyNCkgPSBzdWJsKDI0KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjQpID0gc3VicigyNCk7CisgICAgQ2FtZWxsaWFTdWJrZXlMKDI1KSA9IHN1YmwoMjUpOworICAgIENhbWVsbGlhU3Via2V5UigyNSkgPSBzdWJyKDI1KTsKKyAgICB0bCA9IHN1YmwoMjMpIF4gKHN1YnIoMjMpICYgIH5zdWJyKDI1KSk7CisgICAgZHcgPSB0bCAmIHN1YmwoMjUpLCB0ciA9IHN1YnIoMjMpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjYpID0gdGwgXiBzdWJsKDI3KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjYpID0gdHIgXiBzdWJyKDI3KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjcpID0gc3VibCgyNikgXiBzdWJsKDI4KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjcpID0gc3VicigyNikgXiBzdWJyKDI4KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjgpID0gc3VibCgyNykgXiBzdWJsKDI5KTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjgpID0gc3VicigyNykgXiBzdWJyKDI5KTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMjkpID0gc3VibCgyOCkgXiBzdWJsKDMwKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMjkpID0gc3VicigyOCkgXiBzdWJyKDMwKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMzApID0gc3VibCgyOSkgXiBzdWJsKDMxKTsKKyAgICBDYW1lbGxpYVN1YmtleVIoMzApID0gc3VicigyOSkgXiBzdWJyKDMxKTsKKyAgICBDYW1lbGxpYVN1YmtleUwoMzEpID0gc3VibCgzMCk7CisgICAgQ2FtZWxsaWFTdWJrZXlSKDMxKSA9IHN1YnIoMzApOworICAgIENhbWVsbGlhU3Via2V5TCgzMikgPSBzdWJsKDMyKSBeIHN1YmwoMzEpOworICAgIENhbWVsbGlhU3Via2V5UigzMikgPSBzdWJyKDMyKSBeIHN1YnIoMzEpOworCisgICAgcmV0dXJuOworfQorCit2b2lkIGNhbWVsbGlhX3NldHVwMTkyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdTMyICpzdWJrZXkpCit7CisgICAgdW5zaWduZWQgY2hhciBra1szMl07CisgICAgdTMyIGtybGwsIGtybHIsIGtycmwsa3JycjsKKworICAgIG1lbWNweShraywga2V5LCAyNCk7CisgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopJmtybGwsIGtleSsxNiw0KTsKKyAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikma3Jsciwga2V5KzIwLDQpOworICAgIGtycmwgPSB+a3JsbDsKKyAgICBrcnJyID0gfmtybHI7CisgICAgbWVtY3B5KGtrKzI0LCAodW5zaWduZWQgY2hhciAqKSZrcnJsLCA0KTsKKyAgICBtZW1jcHkoa2srMjgsICh1bnNpZ25lZCBjaGFyICopJmtycnIsIDQpOworICAgIGNhbWVsbGlhX3NldHVwMjU2KGtrLCBzdWJrZXkpOworICAgIHJldHVybjsKK30KKworCisjaWZuZGVmIFVTRV9BUk1fQVNNCisvKioKKyAqIFN0dWZmIHJlbGF0ZWQgdG8gY2FtZWxsaWEgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogImlvIiBtdXN0IGJlIDRieXRlIGFsaWduZWQgYW5kIGJpZy1lbmRpYW4gZGF0YS4KKyAqLwordm9pZCBjYW1lbGxpYV9lbmNyeXB0MTI4KGNvbnN0IHUzMiAqc3Via2V5LCB1MzIgKmJsb2NrcykKK3sKKyAgICB1MzIgaWwsIGlyLCB0MCwgdDE7CisgICAgdTMyIGlvWzRdOworCisgICAgaW9bMF0gPSBibG9ja3NbMF07CisgICAgaW9bMV0gPSBibG9ja3NbMV07CisgICAgaW9bMl0gPSBibG9ja3NbMl07CisgICAgaW9bM10gPSBibG9ja3NbM107CisKKyAgICAvKiBwcmUgd2hpdGVuaW5nIGJ1dCBhYnNvcmIga3cyKi8KKyAgICBpb1swXSBePSBDYW1lbGxpYVN1YmtleUwoMCk7CisgICAgaW9bMV0gXj0gQ2FtZWxsaWFTdWJrZXlSKDApOworICAgIC8qIG1haW4gaXRlcmF0aW9uICovCisKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyKSxDYW1lbGxpYVN1YmtleVIoMiksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDMpLENhbWVsbGlhU3Via2V5UigzKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNCksQ2FtZWxsaWFTdWJrZXlSKDQpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCg1KSxDYW1lbGxpYVN1YmtleVIoNSksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDYpLENhbWVsbGlhU3Via2V5Uig2KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNyksQ2FtZWxsaWFTdWJrZXlSKDcpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKworICAgIENBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKKwkJIENhbWVsbGlhU3Via2V5TCg4KSxDYW1lbGxpYVN1YmtleVIoOCksCisJCSBDYW1lbGxpYVN1YmtleUwoOSksQ2FtZWxsaWFTdWJrZXlSKDkpLAorCQkgdDAsdDEsaWwsaXIpOworCisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTApLENhbWVsbGlhU3Via2V5UigxMCksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSxDYW1lbGxpYVN1YmtleVIoMTEpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMiksQ2FtZWxsaWFTdWJrZXlSKDEyKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTMpLENhbWVsbGlhU3Via2V5UigxMyksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSxDYW1lbGxpYVN1YmtleVIoMTQpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxNSksQ2FtZWxsaWFTdWJrZXlSKDE1KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisKKyAgICBDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCisJCSBDYW1lbGxpYVN1YmtleUwoMTYpLENhbWVsbGlhU3Via2V5UigxNiksCisJCSBDYW1lbGxpYVN1YmtleUwoMTcpLENhbWVsbGlhU3Via2V5UigxNyksCisJCSB0MCx0MSxpbCxpcik7CisKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxOCksQ2FtZWxsaWFTdWJrZXlSKDE4KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTkpLENhbWVsbGlhU3Via2V5UigxOSksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyMSksQ2FtZWxsaWFTdWJrZXlSKDIxKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjIpLENhbWVsbGlhU3Via2V5UigyMiksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKworICAgIC8qIHBvc3Qgd2hpdGVuaW5nIGJ1dCBrdzQgKi8KKyAgICBpb1syXSBePSBDYW1lbGxpYVN1YmtleUwoMjQpOworICAgIGlvWzNdIF49IENhbWVsbGlhU3Via2V5UigyNCk7CisKKyAgICB0MCA9IGlvWzBdOworICAgIHQxID0gaW9bMV07CisgICAgaW9bMF0gPSBpb1syXTsKKyAgICBpb1sxXSA9IGlvWzNdOworICAgIGlvWzJdID0gdDA7CisgICAgaW9bM10gPSB0MTsKKworICAgIGJsb2Nrc1swXSA9IGlvWzBdOworICAgIGJsb2Nrc1sxXSA9IGlvWzFdOworICAgIGJsb2Nrc1syXSA9IGlvWzJdOworICAgIGJsb2Nrc1szXSA9IGlvWzNdOworCisgICAgcmV0dXJuOworfQorCit2b2lkIGNhbWVsbGlhX2RlY3J5cHQxMjgoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqYmxvY2tzKQoreworICAgIHUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFsaWFibGVzICovCisgICAgdTMyIGlvWzRdOworCisgICAgaW9bMF0gPSBibG9ja3NbMF07CisgICAgaW9bMV0gPSBibG9ja3NbMV07CisgICAgaW9bMl0gPSBibG9ja3NbMl07CisgICAgaW9bM10gPSBibG9ja3NbM107CisKKyAgICAvKiBwcmUgd2hpdGVuaW5nIGJ1dCBhYnNvcmIga3cyKi8KKyAgICBpb1swXSBePSBDYW1lbGxpYVN1YmtleUwoMjQpOworICAgIGlvWzFdIF49IENhbWVsbGlhU3Via2V5UigyNCk7CisKKyAgICAvKiBtYWluIGl0ZXJhdGlvbiAqLworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyMiksQ2FtZWxsaWFTdWJrZXlSKDIyKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjEpLENhbWVsbGlhU3Via2V5UigyMSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxOSksQ2FtZWxsaWFTdWJrZXlSKDE5KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTgpLENhbWVsbGlhU3Via2V5UigxOCksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworCisgICAgQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDE3KSxDYW1lbGxpYVN1YmtleVIoMTcpLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDE2KSxDYW1lbGxpYVN1YmtleVIoMTYpLAorCQkgdDAsdDEsaWwsaXIpOworCisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTUpLENhbWVsbGlhU3Via2V5UigxNSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSxDYW1lbGxpYVN1YmtleVIoMTQpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMyksQ2FtZWxsaWFTdWJrZXlSKDEzKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTIpLENhbWVsbGlhU3Via2V5UigxMiksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSxDYW1lbGxpYVN1YmtleVIoMTEpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMCksQ2FtZWxsaWFTdWJrZXlSKDEwKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisKKyAgICBDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCisJCSBDYW1lbGxpYVN1YmtleUwoOSksQ2FtZWxsaWFTdWJrZXlSKDkpLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDgpLENhbWVsbGlhU3Via2V5Uig4KSwKKwkJIHQwLHQxLGlsLGlyKTsKKworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDcpLENhbWVsbGlhU3Via2V5Uig3KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNiksQ2FtZWxsaWFTdWJrZXlSKDYpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCg1KSxDYW1lbGxpYVN1YmtleVIoNSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDQpLENhbWVsbGlhU3Via2V5Uig0KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMyksQ2FtZWxsaWFTdWJrZXlSKDMpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyKSxDYW1lbGxpYVN1YmtleVIoMiksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworCisgICAgLyogcG9zdCB3aGl0ZW5pbmcgYnV0IGt3NCAqLworICAgIGlvWzJdIF49IENhbWVsbGlhU3Via2V5TCgwKTsKKyAgICBpb1szXSBePSBDYW1lbGxpYVN1YmtleVIoMCk7CisKKyAgICB0MCA9IGlvWzBdOworICAgIHQxID0gaW9bMV07CisgICAgaW9bMF0gPSBpb1syXTsKKyAgICBpb1sxXSA9IGlvWzNdOworICAgIGlvWzJdID0gdDA7CisgICAgaW9bM10gPSB0MTsKKworICAgIGJsb2Nrc1swXSA9IGlvWzBdOworICAgIGJsb2Nrc1sxXSA9IGlvWzFdOworICAgIGJsb2Nrc1syXSA9IGlvWzJdOworICAgIGJsb2Nrc1szXSA9IGlvWzNdOworCisgICAgcmV0dXJuOworfQorCisvKioKKyAqIHN0dWZmIGZvciAxOTIgYW5kIDI1NmJpdCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLwordm9pZCBjYW1lbGxpYV9lbmNyeXB0MjU2KGNvbnN0IHUzMiAqc3Via2V5LCB1MzIgKmJsb2NrcykKK3sKKyAgICB1MzIgaWwsaXIsdDAsdDE7ICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFsaWFibGVzICovCisgICAgdTMyIGlvWzRdOworCisgICAgaW9bMF0gPSBibG9ja3NbMF07CisgICAgaW9bMV0gPSBibG9ja3NbMV07CisgICAgaW9bMl0gPSBibG9ja3NbMl07CisgICAgaW9bM10gPSBibG9ja3NbM107CisKKyAgICAvKiBwcmUgd2hpdGVuaW5nIGJ1dCBhYnNvcmIga3cyKi8KKyAgICBpb1swXSBePSBDYW1lbGxpYVN1YmtleUwoMCk7CisgICAgaW9bMV0gXj0gQ2FtZWxsaWFTdWJrZXlSKDApOworCisgICAgLyogbWFpbiBpdGVyYXRpb24gKi8KKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyKSxDYW1lbGxpYVN1YmtleVIoMiksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDMpLENhbWVsbGlhU3Via2V5UigzKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNCksQ2FtZWxsaWFTdWJrZXlSKDQpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCg1KSxDYW1lbGxpYVN1YmtleVIoNSksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDYpLENhbWVsbGlhU3Via2V5Uig2KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNyksQ2FtZWxsaWFTdWJrZXlSKDcpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKworICAgIENBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKKwkJIENhbWVsbGlhU3Via2V5TCg4KSxDYW1lbGxpYVN1YmtleVIoOCksCisJCSBDYW1lbGxpYVN1YmtleUwoOSksQ2FtZWxsaWFTdWJrZXlSKDkpLAorCQkgdDAsdDEsaWwsaXIpOworCisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTApLENhbWVsbGlhU3Via2V5UigxMCksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSxDYW1lbGxpYVN1YmtleVIoMTEpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMiksQ2FtZWxsaWFTdWJrZXlSKDEyKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTMpLENhbWVsbGlhU3Via2V5UigxMyksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSxDYW1lbGxpYVN1YmtleVIoMTQpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxNSksQ2FtZWxsaWFTdWJrZXlSKDE1KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisKKyAgICBDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCisJCSBDYW1lbGxpYVN1YmtleUwoMTYpLENhbWVsbGlhU3Via2V5UigxNiksCisJCSBDYW1lbGxpYVN1YmtleUwoMTcpLENhbWVsbGlhU3Via2V5UigxNyksCisJCSB0MCx0MSxpbCxpcik7CisKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxOCksQ2FtZWxsaWFTdWJrZXlSKDE4KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTkpLENhbWVsbGlhU3Via2V5UigxOSksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyMSksQ2FtZWxsaWFTdWJrZXlSKDIxKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjIpLENhbWVsbGlhU3Via2V5UigyMiksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKworICAgIENBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKKwkJIENhbWVsbGlhU3Via2V5TCgyNCksQ2FtZWxsaWFTdWJrZXlSKDI0KSwKKwkJIENhbWVsbGlhU3Via2V5TCgyNSksQ2FtZWxsaWFTdWJrZXlSKDI1KSwKKwkJIHQwLHQxLGlsLGlyKTsKKworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDI2KSxDYW1lbGxpYVN1YmtleVIoMjYpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyNyksQ2FtZWxsaWFTdWJrZXlSKDI3KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjgpLENhbWVsbGlhU3Via2V5UigyOCksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDI5KSxDYW1lbGxpYVN1YmtleVIoMjkpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgzMCksQ2FtZWxsaWFTdWJrZXlSKDMwKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMzEpLENhbWVsbGlhU3Via2V5UigzMSksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworCisgICAgLyogcG9zdCB3aGl0ZW5pbmcgYnV0IGt3NCAqLworICAgIGlvWzJdIF49IENhbWVsbGlhU3Via2V5TCgzMik7CisgICAgaW9bM10gXj0gQ2FtZWxsaWFTdWJrZXlSKDMyKTsKKworICAgIHQwID0gaW9bMF07CisgICAgdDEgPSBpb1sxXTsKKyAgICBpb1swXSA9IGlvWzJdOworICAgIGlvWzFdID0gaW9bM107CisgICAgaW9bMl0gPSB0MDsKKyAgICBpb1szXSA9IHQxOworCisgICAgYmxvY2tzWzBdID0gaW9bMF07CisgICAgYmxvY2tzWzFdID0gaW9bMV07CisgICAgYmxvY2tzWzJdID0gaW9bMl07CisgICAgYmxvY2tzWzNdID0gaW9bM107CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgY2FtZWxsaWFfZGVjcnlwdDI1Nihjb25zdCB1MzIgKnN1YmtleSwgdTMyICpibG9ja3MpCit7CisgICAgdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhbGlhYmxlcyAqLworICAgIHUzMiBpb1s0XTsKKworICAgIGlvWzBdID0gYmxvY2tzWzBdOworICAgIGlvWzFdID0gYmxvY2tzWzFdOworICAgIGlvWzJdID0gYmxvY2tzWzJdOworICAgIGlvWzNdID0gYmxvY2tzWzNdOworCisgICAgLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiovCisgICAgaW9bMF0gXj0gQ2FtZWxsaWFTdWJrZXlMKDMyKTsKKyAgICBpb1sxXSBePSBDYW1lbGxpYVN1YmtleVIoMzIpOworCisgICAgLyogbWFpbiBpdGVyYXRpb24gKi8KKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgzMSksQ2FtZWxsaWFTdWJrZXlSKDMxKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMzApLENhbWVsbGlhU3Via2V5UigzMCksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDI5KSxDYW1lbGxpYVN1YmtleVIoMjkpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyOCksQ2FtZWxsaWFTdWJrZXlSKDI4KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjcpLENhbWVsbGlhU3Via2V5UigyNyksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDI2KSxDYW1lbGxpYVN1YmtleVIoMjYpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKworICAgIENBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKKwkJIENhbWVsbGlhU3Via2V5TCgyNSksQ2FtZWxsaWFTdWJrZXlSKDI1KSwKKwkJIENhbWVsbGlhU3Via2V5TCgyNCksQ2FtZWxsaWFTdWJrZXlSKDI0KSwKKwkJIHQwLHQxLGlsLGlyKTsKKworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyMiksQ2FtZWxsaWFTdWJrZXlSKDIyKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMjEpLENhbWVsbGlhU3Via2V5UigyMSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxOSksQ2FtZWxsaWFTdWJrZXlSKDE5KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTgpLENhbWVsbGlhU3Via2V5UigxOCksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworCisgICAgQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDE3KSxDYW1lbGxpYVN1YmtleVIoMTcpLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDE2KSxDYW1lbGxpYVN1YmtleVIoMTYpLAorCQkgdDAsdDEsaWwsaXIpOworCisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTUpLENhbWVsbGlhU3Via2V5UigxNSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDE0KSxDYW1lbGxpYVN1YmtleVIoMTQpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMyksQ2FtZWxsaWFTdWJrZXlSKDEzKSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMTIpLENhbWVsbGlhU3Via2V5UigxMiksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDExKSxDYW1lbGxpYVN1YmtleVIoMTEpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgxMCksQ2FtZWxsaWFTdWJrZXlSKDEwKSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisKKyAgICBDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCisJCSBDYW1lbGxpYVN1YmtleUwoOSksQ2FtZWxsaWFTdWJrZXlSKDkpLAorCQkgQ2FtZWxsaWFTdWJrZXlMKDgpLENhbWVsbGlhU3Via2V5Uig4KSwKKwkJIHQwLHQxLGlsLGlyKTsKKworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDcpLENhbWVsbGlhU3Via2V5Uig3KSwKKwkJICAgICBpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoNiksQ2FtZWxsaWFTdWJrZXlSKDYpLAorCQkgICAgIGlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCg1KSxDYW1lbGxpYVN1YmtleVIoNSksCisJCSAgICAgaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOworICAgIENBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCisJCSAgICAgQ2FtZWxsaWFTdWJrZXlMKDQpLENhbWVsbGlhU3Via2V5Uig0KSwKKwkJICAgICBpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7CisgICAgQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKKwkJICAgICBDYW1lbGxpYVN1YmtleUwoMyksQ2FtZWxsaWFTdWJrZXlSKDMpLAorCQkgICAgIGlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKKyAgICBDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAorCQkgICAgIENhbWVsbGlhU3Via2V5TCgyKSxDYW1lbGxpYVN1YmtleVIoMiksCisJCSAgICAgaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOworCisgICAgLyogcG9zdCB3aGl0ZW5pbmcgYnV0IGt3NCAqLworICAgIGlvWzJdIF49IENhbWVsbGlhU3Via2V5TCgwKTsKKyAgICBpb1szXSBePSBDYW1lbGxpYVN1YmtleVIoMCk7CisKKyAgICB0MCA9IGlvWzBdOworICAgIHQxID0gaW9bMV07CisgICAgaW9bMF0gPSBpb1syXTsKKyAgICBpb1sxXSA9IGlvWzNdOworICAgIGlvWzJdID0gdDA7CisgICAgaW9bM10gPSB0MTsKKworICAgIGJsb2Nrc1swXSA9IGlvWzBdOworICAgIGJsb2Nrc1sxXSA9IGlvWzFdOworICAgIGJsb2Nrc1syXSA9IGlvWzJdOworICAgIGJsb2Nrc1szXSA9IGlvWzNdOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8qIVVTRV9BUk1fQVNNKi8KKworCisvKioqCisgKgorICogQVBJIGZvciBjb21wYXRpYmlsaXR5CisgKi8KKwordm9pZCBDYW1lbGxpYV9Fa2V5Z2VuKGNvbnN0IGludCBrZXlCaXRMZW5ndGgsCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhd0tleSwKKwkJICAgICAgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUpCit7CisgICAgc3dpdGNoKGtleUJpdExlbmd0aCkgeworICAgIGNhc2UgMTI4OgorCWNhbWVsbGlhX3NldHVwMTI4KHJhd0tleSwga2V5VGFibGUpOworCWJyZWFrOworICAgIGNhc2UgMTkyOgorCWNhbWVsbGlhX3NldHVwMTkyKHJhd0tleSwga2V5VGFibGUpOworCWJyZWFrOworICAgIGNhc2UgMjU2OgorCWNhbWVsbGlhX3NldHVwMjU2KHJhd0tleSwga2V5VGFibGUpOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKyNpZm5kZWYgVVNFX0FSTV9BU00KK3ZvaWQgQ2FtZWxsaWFfRW5jcnlwdEJsb2NrKGNvbnN0IGludCBrZXlCaXRMZW5ndGgsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisJCQkgICBjb25zdCBLRVlfVEFCTEVfVFlQRSBrZXlUYWJsZSwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQpCit7CisgICAgdTMyIHRtcFs0XTsKKworICAgIHRtcFswXSA9IEdFVFUzMihwbGFpbnRleHQpOworICAgIHRtcFsxXSA9IEdFVFUzMihwbGFpbnRleHQgKyA0KTsKKyAgICB0bXBbMl0gPSBHRVRVMzIocGxhaW50ZXh0ICsgOCk7CisgICAgdG1wWzNdID0gR0VUVTMyKHBsYWludGV4dCArIDEyKTsKKworICAgIHN3aXRjaCAoa2V5Qml0TGVuZ3RoKSB7CisgICAgY2FzZSAxMjg6CisJY2FtZWxsaWFfZW5jcnlwdDEyOChrZXlUYWJsZSwgdG1wKTsKKwlicmVhazsKKyAgICBjYXNlIDE5MjoKKwkvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIDI1NjoKKwljYW1lbGxpYV9lbmNyeXB0MjU2KGtleVRhYmxlLCB0bXApOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorCisgICAgUFVUVTMyKGNpcGhlcnRleHQsIHRtcFswXSk7CisgICAgUFVUVTMyKGNpcGhlcnRleHQgKyA0LCB0bXBbMV0pOworICAgIFBVVFUzMihjaXBoZXJ0ZXh0ICsgOCwgdG1wWzJdKTsKKyAgICBQVVRVMzIoY2lwaGVydGV4dCArIDEyLCB0bXBbM10pOworfQorCit2b2lkIENhbWVsbGlhX0RlY3J5cHRCbG9jayhjb25zdCBpbnQga2V5Qml0TGVuZ3RoLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKKwkJCSAgIGNvbnN0IEtFWV9UQUJMRV9UWVBFIGtleVRhYmxlLAorCQkJICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0KQoreworICAgIHUzMiB0bXBbNF07CisKKyAgICB0bXBbMF0gPSBHRVRVMzIoY2lwaGVydGV4dCk7CisgICAgdG1wWzFdID0gR0VUVTMyKGNpcGhlcnRleHQgKyA0KTsKKyAgICB0bXBbMl0gPSBHRVRVMzIoY2lwaGVydGV4dCArIDgpOworICAgIHRtcFszXSA9IEdFVFUzMihjaXBoZXJ0ZXh0ICsgMTIpOworCisgICAgc3dpdGNoIChrZXlCaXRMZW5ndGgpIHsKKyAgICBjYXNlIDEyODoKKwljYW1lbGxpYV9kZWNyeXB0MTI4KGtleVRhYmxlLCB0bXApOworCWJyZWFrOworICAgIGNhc2UgMTkyOgorCS8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgMjU2OgorCWNhbWVsbGlhX2RlY3J5cHQyNTYoa2V5VGFibGUsIHRtcCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9CisgICAgUFVUVTMyKHBsYWludGV4dCwgdG1wWzBdKTsKKyAgICBQVVRVMzIocGxhaW50ZXh0ICsgNCwgdG1wWzFdKTsKKyAgICBQVVRVMzIocGxhaW50ZXh0ICsgOCwgdG1wWzJdKTsKKyAgICBQVVRVMzIocGxhaW50ZXh0ICsgMTIsIHRtcFszXSk7Cit9CisjZW5kaWYgLyohVVNFX0FSTV9BU00qLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NhbWVsbGlhLmggYi9jaXBoZXIvY2FtZWxsaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGUzYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2NhbWVsbGlhLmgKQEAgLTAsMCArMSw5MCBAQAorLyogY2FtZWxsaWEuaAl2ZXIgMS4yLjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNworICogTlRUIChOaXBwb24gVGVsZWdyYXBoIGFuZCBUZWxlcGhvbmUgQ29ycG9yYXRpb24pLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBIRUFERVJfQ0FNRUxMSUFfSAorI2RlZmluZSBIRUFERVJfQ0FNRUxMSUFfSAorCisvKiBUbyB1c2UgQ2FtZWxsaWEgd2l0aCBsaWJyYXJpZXMgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGtlZXAgdGhlIG5hbWUKKyAqIHNwYWNlIG9mIHRoZSBsaWJyYXJ5IGNsZWFuLiAgVGhlIGZvbGxvd2luZyBtYWNybyBpcyB0aHVzIHVzZWZ1bDoKKyAqCisgKiAgICAgI2RlZmluZSBDQU1FTExJQV9FWFRfU1lNX1BSRUZJWCBmb29fCisgKgorICogVGhpcyBwcmVmaXhlcyBhbGwgZXh0ZXJuYWwgc3ltYm9scyB3aXRoICJmb29fIi4KKyAqLworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qIFVTRV9BUk1fQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBUk0gYXNzZW1ibHkgY29kZS4gKi8KKyMgdW5kZWYgVVNFX0FSTV9BU00KKyMgaWYgZGVmaW5lZChfX0FSTUVMX18pCisjICBpZmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUworIyAgIGRlZmluZSBVU0VfQVJNX0FTTSAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ0FNRUxMSUFfRVhUX1NZTV9QUkVGSVgKKyNkZWZpbmUgQ0FNRUxMSUFfUFJFRklYMSh4LHkpIHggIyMgeQorI2RlZmluZSBDQU1FTExJQV9QUkVGSVgyKHgseSkgQ0FNRUxMSUFfUFJFRklYMSh4LHkpCisjZGVmaW5lIENBTUVMTElBX1BSRUZJWCh4KSAgICBDQU1FTExJQV9QUkVGSVgyKENBTUVMTElBX0VYVF9TWU1fUFJFRklYLHgpCisjZGVmaW5lIENhbWVsbGlhX0VrZXlnZW4gICAgICBDQU1FTExJQV9QUkVGSVgoQ2FtZWxsaWFfRWtleWdlbikKKyNkZWZpbmUgQ2FtZWxsaWFfRW5jcnlwdEJsb2NrIENBTUVMTElBX1BSRUZJWChDYW1lbGxpYV9FbmNyeXB0QmxvY2spCisjZGVmaW5lIENhbWVsbGlhX0RlY3J5cHRCbG9jayBDQU1FTExJQV9QUkVGSVgoQ2FtZWxsaWFfRGVjcnlwdEJsb2NrKQorI2RlZmluZSBjYW1lbGxpYV9kZWNyeXB0MTI4ICAgQ0FNRUxMSUFfUFJFRklYKGNhbWVsbGlhX2RlY3J5cHQxMjgpCisjZGVmaW5lIGNhbWVsbGlhX2RlY3J5cHQyNTYgICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfZGVjcnlwdDI1NikKKyNkZWZpbmUgY2FtZWxsaWFfZW5jcnlwdDEyOCAgIENBTUVMTElBX1BSRUZJWChjYW1lbGxpYV9lbmNyeXB0MTI4KQorI2RlZmluZSBjYW1lbGxpYV9lbmNyeXB0MjU2ICAgQ0FNRUxMSUFfUFJFRklYKGNhbWVsbGlhX2VuY3J5cHQyNTYpCisjZGVmaW5lIGNhbWVsbGlhX3NldHVwMTI4ICAgICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfc2V0dXAxMjgpCisjZGVmaW5lIGNhbWVsbGlhX3NldHVwMTkyICAgICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfc2V0dXAxOTIpCisjZGVmaW5lIGNhbWVsbGlhX3NldHVwMjU2ICAgICBDQU1FTExJQV9QUkVGSVgoY2FtZWxsaWFfc2V0dXAyNTYpCisjZW5kaWYgLypDQU1FTExJQV9FWFRfU1lNX1BSRUZJWCovCisKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBDQU1FTExJQV9CTE9DS19TSVpFIDE2CisjZGVmaW5lIENBTUVMTElBX1RBQkxFX0JZVEVfTEVOIDI3MgorI2RlZmluZSBDQU1FTExJQV9UQUJMRV9XT1JEX0xFTiAoQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4gLyA0KQorCit0eXBlZGVmIHVuc2lnbmVkIGludCBLRVlfVEFCTEVfVFlQRVtDQU1FTExJQV9UQUJMRV9XT1JEX0xFTl07CisKKwordm9pZCBDYW1lbGxpYV9Fa2V5Z2VuKGNvbnN0IGludCBrZXlCaXRMZW5ndGgsCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhd0tleSwKKwkJICAgICAgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUpOworCisjaWZuZGVmIFVTRV9BUk1fQVNNCit2b2lkIENhbWVsbGlhX0VuY3J5cHRCbG9jayhjb25zdCBpbnQga2V5Qml0TGVuZ3RoLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorCQkJICAgY29uc3QgS0VZX1RBQkxFX1RZUEUga2V5VGFibGUsCisJCQkgICB1bnNpZ25lZCBjaGFyICpjaXBoZXJUZXh0KTsKKwordm9pZCBDYW1lbGxpYV9EZWNyeXB0QmxvY2soY29uc3QgaW50IGtleUJpdExlbmd0aCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlclRleHQsCisJCQkgICBjb25zdCBLRVlfVEFCTEVfVFlQRSBrZXlUYWJsZSwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCk7CisjZW5kaWYgLyohVVNFX0FSTVY2X0FTTSovCisKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FNRUxMSUFfSCAqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2Nhc3Q1LWFtZDY0LlMgYi9jaXBoZXIvY2FzdDUtYW1kNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I4MTlkCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2Nhc3Q1LWFtZDY0LlMKQEAgLTAsMCArMSw1ODcgQEAKKy8qIGNhc3Q1LWFtZDY0LlMgIC0gIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIENBU1Q1IGNpcGhlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIF9feDg2XzY0CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBkZWZpbmVkKFVTRV9DQVNUNSkKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgJXJpcAorIyAgZGVmaW5lIEdFVF9FWFRFUk5fUE9JTlRFUihuYW1lLCByZWcpIG1vdnEgbmFtZUBHT1RQQ1JFTCglcmlwKSwgcmVnCisjZWxzZQorIyAgZGVmaW5lIFJJUAorIyAgZGVmaW5lIEdFVF9FWFRFUk5fUE9JTlRFUihuYW1lLCByZWcpIGxlYXEgbmFtZSwgcmVnCisjZW5kaWYKKworLnRleHQKKworLmV4dGVybiBfZ2NyeV9jYXN0NV9zMXRvNDsKKworI2RlZmluZSBzMSAwCisjZGVmaW5lIHMyIChzMSArICg0ICogMjU2KSkKKyNkZWZpbmUgczMgKHMyICsgKDQgKiAyNTYpKQorI2RlZmluZSBzNCAoczMgKyAoNCAqIDI1NikpCisKKy8qIHN0cnVjdHVyZSBvZiBDQVNUNV9jb250ZXh0OiAqLworI2RlZmluZSBLbSAwCisjZGVmaW5lIEtyIChLbSArICgxNiAqIDQpKQorCisvKiByZWdpc3RlciBtYWNyb3MgKi8KKyNkZWZpbmUgQ1RYICVyZGkKKyNkZWZpbmUgUklPICVyc2kKKyNkZWZpbmUgUlRBQiAlcjgKKworI2RlZmluZSBSTFIwICVyOQorI2RlZmluZSBSTFIxICVyMTAKKyNkZWZpbmUgUkxSMiAlcjExCisjZGVmaW5lIFJMUjMgJXIxMgorCisjZGVmaW5lIFJMUjBkICVyOWQKKyNkZWZpbmUgUkxSMWQgJXIxMGQKKyNkZWZpbmUgUkxSMmQgJXIxMWQKKyNkZWZpbmUgUkxSM2QgJXIxMmQKKworI2RlZmluZSBSWDAgJXJheAorI2RlZmluZSBSWDEgJXJieAorI2RlZmluZSBSWDIgJXJkeAorCisjZGVmaW5lIFJYMGQgJWVheAorI2RlZmluZSBSWDFkICVlYngKKyNkZWZpbmUgUlgyZCAlZWR4CisKKyNkZWZpbmUgUlgwYmwgJWFsCisjZGVmaW5lIFJYMWJsICVibAorI2RlZmluZSBSWDJibCAlZGwKKworI2RlZmluZSBSWDBiaCAlYWgKKyNkZWZpbmUgUlgxYmggJWJoCisjZGVmaW5lIFJYMmJoICVkaAorCisjZGVmaW5lIFJLUiAlcmN4CisjZGVmaW5lIFJLUmQgJWVjeAorI2RlZmluZSBSS1JibCAlY2wKKworI2RlZmluZSBSVDAgJXJicAorI2RlZmluZSBSVDEgJXJzaQorCisjZGVmaW5lIFJUMGQgJWVicAorI2RlZmluZSBSVDFkICVlc2kKKworI2RlZmluZSBSS00wZCAlcjEzZAorI2RlZmluZSBSS00xZCAlcjE0ZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDEtd2F5IGNhc3Q1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGR1bW15KHgpCisKKyNkZWZpbmUgc2hyX2tyKG5vbmUpIFwKKwlzaHJxICQ4LAkJCVJLUjsKKworI2RlZmluZSBGKGttLCBsb2FkX25leHRfa3IsIG9wMCwgb3AxLCBvcDIsIG9wMykgXAorCW9wMCAjIyBsIFJMUjBkLAkJCWttICMjIGQ7IFwKKwlyb2xsIFJLUmJsLAkJCWttICMjIGQ7IFwKKwlyb3JxICQzMiwJCQlSTFIwOyBcCisJbW92emJsIGttICMjIGJoLAkJUlQwZDsgXAorCW1vdnpibCBrbSAjIyBibCwJCVJUMWQ7IFwKKwlyb2xsICQxNiwJCQlrbSAjIyBkOyBcCisJbW92bCBzMShSVEFCLFJUMCw0KSwJCVJUMGQ7IFwKKwlvcDEgIyMgbCBzMihSVEFCLFJUMSw0KSwJUlQwZDsgXAorCWxvYWRfbmV4dF9rcihrcl9uZXh0KTsgXAorCW1vdnpibCBrbSAjIyBiaCwJCVJUMWQ7IFwKKwltb3Z6Ymwga20gIyMgYmwsCQlrbSAjIyBkOyBcCisJb3AyICMjIGwgczMoUlRBQixSVDEsNCksCVJUMGQ7IFwKKwlvcDMgIyMgbCBzNChSVEFCLGttLDQpLAkJUlQwZDsgXAorCXhvcnEgUlQwLAkJCVJMUjA7CisKKyNkZWZpbmUgRjEoa20sIGxvYWRfbmV4dF9rcikgXAorCUYoIyNrbSwgbG9hZF9uZXh0X2tyLCBhZGQsIHhvciwgc3ViLCBhZGQpCisjZGVmaW5lIEYyKGttLCBsb2FkX25leHRfa3IpIFwKKwlGKCMja20sIGxvYWRfbmV4dF9rciwgeG9yLCBzdWIsIGFkZCwgeG9yKQorI2RlZmluZSBGMyhrbSwgbG9hZF9uZXh0X2tyKSBcCisJRigjI2ttLCBsb2FkX25leHRfa3IsIHN1YiwgYWRkLCB4b3IsIHN1YikKKworI2RlZmluZSBnZXRfcm91bmRfa20obiwga20pIFwKKwltb3ZsIEttKzQqKG4pKENUWCksIAkJa207CisKKyNkZWZpbmUgZ2V0X3JvdW5kX2tyX2VuYyhuKSBcCisJbW92cSAkMHgxMDEwMTAxMDEwMTAxMDEwLAlSS1I7IFwKKwlcCisJLyogbWVyZ2Ugcm9ybCByayBhbmQgcm9ybCAkMTYgKi8gXAorCXhvcnEgS3IrKG4pKENUWCksCQlSS1I7CisKKyNkZWZpbmUgZ2V0X3JvdW5kX2tyX2RlYyhuKSBcCisJbW92cSAkMHgxMDEwMTAxMDEwMTAxMDEwLAlSS1I7IFwKKwlcCisJLyogbWVyZ2Ugcm9ybCByayBhbmQgcm9ybCAkMTYgKi8gXAorCXhvcnEgS3IrKG4gLSA3KShDVFgpLAkJUktSOyBcCisJYnN3YXBxCQkJCVJLUjsKKworI2RlZmluZSByb3VuZF9lbmMobiwgRkEsIEZCLCBmbjEsIGZuMikgXAorCWdldF9yb3VuZF9rbShuICsgMSwgUlgyZCk7IFwKKwlGQShSWDAsIGZuMSk7IFwKKwlnZXRfcm91bmRfa20obiArIDIsIFJYMGQpOyBcCisJRkIoUlgyLCBmbjIpOworCisjZGVmaW5lIHJvdW5kX2VuY19sYXN0KG4sIEZYQSwgRlhCKSBcCisJZ2V0X3JvdW5kX2ttKG4gKyAxLCBSWDJkKTsgXAorCVwKKwlGWEEoUlgwLCBzaHJfa3IpOyBcCisJRlhCKFJYMiwgZHVtbXkpOworCisjZGVmaW5lIHJvdW5kX2VuY18xKG4sIEZBLCBGQikgXAorCXJvdW5kX2VuYyhuLCBGQSwgRkIsIHNocl9rciwgc2hyX2tyKQorCisjZGVmaW5lIHJvdW5kX2VuY18yKG4sIEZBLCBGQikgXAorCXJvdW5kX2VuYyhuLCBGQSwgRkIsIHNocl9rciwgZHVtbXkpCisKKyNkZWZpbmUgcm91bmRfZGVjKG4sIEZBLCBGQiwgZm4xLCBmbjIpIFwKKwlnZXRfcm91bmRfa20obiAtIDEsIFJYMmQpOyBcCisJRkEoUlgwLCBmbjEpOyBcCisJZ2V0X3JvdW5kX2ttKG4gLSAyLCBSWDBkKTsgXAorCUZCKFJYMiwgZm4yKTsKKworI2RlZmluZSByb3VuZF9kZWNfbGFzdChuLCBGWEEsIEZYQikgXAorCWdldF9yb3VuZF9rbShuIC0gMSwgUlgyZCk7IFwKKwlGWEEoUlgwLCBzaHJfa3IpOyBcCisJRlhCKFJYMiwgZHVtbXkpOworCisjZGVmaW5lIHJvdW5kX2RlY18xKG4sIEZBLCBGQikgXAorCXJvdW5kX2RlYyhuLCBGQSwgRkIsIHNocl9rciwgc2hyX2tyKQorCisjZGVmaW5lIHJvdW5kX2RlY18yKG4sIEZBLCBGQikgXAorCXJvdW5kX2RlYyhuLCBGQSwgRkIsIHNocl9rciwgZHVtbXkpCisKKyNkZWZpbmUgcmVhZF9ibG9jaygpIFwKKwltb3ZxIChSSU8pLCAJCVJMUjA7IFwKKwlic3dhcHEgCQkJUkxSMDsKKworI2RlZmluZSB3cml0ZV9ibG9jaygpIFwKKwlic3dhcHEgCQkJUkxSMDsgXAorCXJvcnEgJDMyLAkJUkxSMDsgXAorCW1vdnEgUkxSMCwgCQkoUklPKTsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9jYXN0NV9hbWQ2NF9lbmNyeXB0X2Jsb2NrCisudHlwZSAgIF9nY3J5X2Nhc3Q1X2FtZDY0X2VuY3J5cHRfYmxvY2ssQGZ1bmN0aW9uOworCitfZ2NyeV9jYXN0NV9hbWQ2NF9lbmNyeXB0X2Jsb2NrOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0CisJICoJJXJkeDogc3JjCisJICovCisJcHVzaHEgJXJicDsKKwlwdXNocSAlcmJ4OworCisJbW92cSAlcnNpLCAlcjEwOworCisJR0VUX0VYVEVSTl9QT0lOVEVSKF9nY3J5X2Nhc3Q1X3MxdG80LCBSVEFCKTsKKworCW1vdnEgJXJkeCwgUklPOworCXJlYWRfYmxvY2soKTsKKworCWdldF9yb3VuZF9rbSgwLCBSWDBkKTsKKwlnZXRfcm91bmRfa3JfZW5jKDApOworCXJvdW5kX2VuY18xKDAsIEYxLCBGMik7CisJcm91bmRfZW5jXzEoMiwgRjMsIEYxKTsKKwlyb3VuZF9lbmNfMSg0LCBGMiwgRjMpOworCXJvdW5kX2VuY18yKDYsIEYxLCBGMik7CisJZ2V0X3JvdW5kX2tyX2VuYyg4KTsKKwlyb3VuZF9lbmNfMSg4LCBGMywgRjEpOworCXJvdW5kX2VuY18xKDEwLCBGMiwgRjMpOworCXJvdW5kX2VuY18xKDEyLCBGMSwgRjIpOworCXJvdW5kX2VuY19sYXN0KDE0LCBGMywgRjEpOworCisJbW92cSAlcjEwLCBSSU87CisJd3JpdGVfYmxvY2soKTsKKworCXBvcHEgJXJieDsKKwlwb3BxICVyYnA7CisJcmV0OworLnNpemUgX2djcnlfY2FzdDVfYW1kNjRfZW5jcnlwdF9ibG9jaywuLV9nY3J5X2Nhc3Q1X2FtZDY0X2VuY3J5cHRfYmxvY2s7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfY2FzdDVfYW1kNjRfZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV9jYXN0NV9hbWQ2NF9kZWNyeXB0X2Jsb2NrLEBmdW5jdGlvbjsKKworX2djcnlfY2FzdDVfYW1kNjRfZGVjcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdAorCSAqCSVyZHg6IHNyYworCSAqLworCXB1c2hxICVyYnA7CisJcHVzaHEgJXJieDsKKworCW1vdnEgJXJzaSwgJXIxMDsKKworCUdFVF9FWFRFUk5fUE9JTlRFUihfZ2NyeV9jYXN0NV9zMXRvNCwgUlRBQik7CisKKwltb3ZxICVyZHgsIFJJTzsKKwlyZWFkX2Jsb2NrKCk7CisKKwlnZXRfcm91bmRfa20oMTUsIFJYMGQpOworCWdldF9yb3VuZF9rcl9kZWMoMTUpOworCXJvdW5kX2RlY18xKDE1LCBGMSwgRjMpOworCXJvdW5kX2RlY18xKDEzLCBGMiwgRjEpOworCXJvdW5kX2RlY18xKDExLCBGMywgRjIpOworCXJvdW5kX2RlY18yKDksIEYxLCBGMyk7CisJZ2V0X3JvdW5kX2tyX2RlYyg3KTsKKwlyb3VuZF9kZWNfMSg3LCBGMiwgRjEpOworCXJvdW5kX2RlY18xKDUsIEYzLCBGMik7CisJcm91bmRfZGVjXzEoMywgRjEsIEYzKTsKKwlyb3VuZF9kZWNfbGFzdCgxLCBGMiwgRjEpOworCisJbW92cSAlcjEwLCBSSU87CisJd3JpdGVfYmxvY2soKTsKKworCXBvcHEgJXJieDsKKwlwb3BxICVyYnA7CisJcmV0OworLnNpemUgX2djcnlfY2FzdDVfYW1kNjRfZGVjcnlwdF9ibG9jaywuLV9nY3J5X2Nhc3Q1X2FtZDY0X2RlY3J5cHRfYmxvY2s7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIDQtd2F5IGNhc3Q1LCBmb3VyIGJsb2NrcyBwYXJhbGxlbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZfdGFpbChybHIsIHJ4LCBvcDEsIG9wMiwgb3AzKSBcCisJbW92emJsIHJ4ICMjIGJoLAkJUlQwZDsgXAorCW1vdnpibCByeCAjIyBibCwJCVJUMWQ7IFwKKwlyb2xsICQxNiwJCQlyeCAjIyBkOyBcCisJbW92bCBzMShSVEFCLFJUMCw0KSwJCVJUMGQ7IFwKKwlvcDEgIyMgbCBzMihSVEFCLFJUMSw0KSwJUlQwZDsgXAorCW1vdnpibCByeCAjIyBiaCwJCVJUMWQ7IFwKKwltb3Z6YmwgcnggIyMgYmwsCQlyeCAjIyBkOyBcCisJb3AyICMjIGwgczMoUlRBQixSVDEsNCksCVJUMGQ7IFwKKwlvcDMgIyMgbCBzNChSVEFCLHJ4LDQpLAkJUlQwZDsgXAorCXhvcnEgUlQwLAkJCXJscjsKKworI2RlZmluZSBGNChrbSwgbG9hZF9uZXh0X2tyLCBvcDAsIG9wMSwgb3AyLCBvcDMpIFwKKwltb3ZsIGttLAkJCVJYMGQ7IFwKKwlvcDAgIyMgbCBSTFIwZCwJCQlSWDBkOyBcCisJcm9sbCBSS1JibCwJCQlSWDBkOyBcCisJcm9ycSAkMzIsCQkJUkxSMDsgXAorCVwKKwltb3ZsIGttLAkJCVJYMWQ7IFwKKwlvcDAgIyMgbCBSTFIxZCwJCQlSWDFkOyBcCisJcm9sbCBSS1JibCwJCQlSWDFkOyBcCisJcm9ycSAkMzIsCQkJUkxSMTsgXAorCVwKKwltb3ZsIGttLAkJCVJYMmQ7IFwKKwlvcDAgIyMgbCBSTFIyZCwJCQlSWDJkOyBcCisJcm9sbCBSS1JibCwJCQlSWDJkOyBcCisJcm9ycSAkMzIsCQkJUkxSMjsgXAorCVwKKwlGX3RhaWwoUkxSMCwgUlgwLCBvcDEsIG9wMiwgb3AzKTsgXAorCUZfdGFpbChSTFIxLCBSWDEsIG9wMSwgb3AyLCBvcDMpOyBcCisJRl90YWlsKFJMUjIsIFJYMiwgb3AxLCBvcDIsIG9wMyk7IFwKKwlcCisJbW92bCBrbSwJCQlSWDBkOyBcCisJb3AwICMjIGwgUkxSM2QsCQkJUlgwZDsgXAorCXJvbGwgUktSYmwsCQkJUlgwZDsgXAorCWxvYWRfbmV4dF9rcigpOwkJCVwKKwlyb3JxICQzMiwJCQlSTFIzOyBcCisJXAorCUZfdGFpbChSTFIzLCBSWDAsIG9wMSwgb3AyLCBvcDMpOworCisjZGVmaW5lIEY0XzEoa20sIGxvYWRfbmV4dF9rcikgXAorCUY0KGttLCBsb2FkX25leHRfa3IsIGFkZCwgeG9yLCBzdWIsIGFkZCkKKyNkZWZpbmUgRjRfMihrbSwgbG9hZF9uZXh0X2tyKSBcCisJRjQoa20sIGxvYWRfbmV4dF9rciwgeG9yLCBzdWIsIGFkZCwgeG9yKQorI2RlZmluZSBGNF8zKGttLCBsb2FkX25leHRfa3IpIFwKKwlGNChrbSwgbG9hZF9uZXh0X2tyLCBzdWIsIGFkZCwgeG9yLCBzdWIpCisKKyNkZWZpbmUgcm91bmRfZW5jNChuLCBGQSwgRkIsIGZuMSwgZm4yKSBcCisJZ2V0X3JvdW5kX2ttKG4gKyAxLCBSS00xZCk7IFwKKwlGQShSS00wZCwgZm4xKTsgXAorCWdldF9yb3VuZF9rbShuICsgMiwgUktNMGQpOyBcCisJRkIoUktNMWQsIGZuMik7CisKKyNkZWZpbmUgcm91bmRfZW5jX2xhc3Q0KG4sIEZYQSwgRlhCKSBcCisJZ2V0X3JvdW5kX2ttKG4gKyAxLCBSS00xZCk7IFwKKwlGWEEoUktNMGQsIHNocl9rcik7IFwKKwlGWEIoUktNMWQsIGR1bW15KTsKKworI2RlZmluZSByb3VuZF9lbmM0XzEobiwgRkEsIEZCKSBcCisJcm91bmRfZW5jNChuLCBGQSwgRkIsIHNocl9rciwgc2hyX2tyKTsKKworI2RlZmluZSByb3VuZF9lbmM0XzIobiwgRkEsIEZCKSBcCisJcm91bmRfZW5jNChuLCBGQSwgRkIsIHNocl9rciwgZHVtbXkpOworCisjZGVmaW5lIHJvdW5kX2RlYzQobiwgRkEsIEZCLCBmbjEsIGZuMikgXAorCWdldF9yb3VuZF9rbShuIC0gMSwgUktNMWQpOyBcCisJRkEoUktNMGQsIGZuMSk7IFwKKwlnZXRfcm91bmRfa20obiAtIDIsIFJLTTBkKTsgXAorCUZCKFJLTTFkLCBmbjIpOworCisjZGVmaW5lIHJvdW5kX2RlY19sYXN0NChuLCBGWEEsIEZYQikgXAorCWdldF9yb3VuZF9rbShuIC0gMSwgUktNMWQpOyBcCisJRlhBKFJLTTBkLCBzaHJfa3IpOyBcCisJRlhCKFJLTTFkLCBkdW1teSk7CisKKyNkZWZpbmUgcm91bmRfZGVjNF8xKG4sIEZBLCBGQikgXAorCXJvdW5kX2RlYzQobiwgRkEsIEZCLCBzaHJfa3IsIHNocl9rcik7CisKKyNkZWZpbmUgcm91bmRfZGVjNF8yKG4sIEZBLCBGQikgXAorCXJvdW5kX2RlYzQobiwgRkEsIEZCLCBzaHJfa3IsIGR1bW15KTsKKworI2RlZmluZSBpbmJzd2FwX2Jsb2NrNChhLCBiLCBjLCBkKSBcCisJYnN3YXBxIAkJCWE7IFwKKwlic3dhcHEgCQkJYjsgXAorCWJzd2FwcSAJCQljOyBcCisJYnN3YXBxIAkJCWQ7CisKKyNkZWZpbmUgb3V0YnN3YXBfYmxvY2s0KGEsIGIsIGMsIGQpIFwKKwlic3dhcHEgCQkJYTsgXAorCWJzd2FwcSAJCQliOyBcCisJYnN3YXBxIAkJCWM7IFwKKwlic3dhcHEgCQkJZDsgXAorCXJvcnEgJDMyLAkJYTsgXAorCXJvcnEgJDMyLAkJYjsgXAorCXJvcnEgJDMyLAkJYzsgXAorCXJvcnEgJDMyLAkJZDsKKworLmFsaWduIDgKKy50eXBlICAgX19jYXN0NV9lbmNfYmxrNCxAZnVuY3Rpb247CisKK19fY2FzdDVfZW5jX2JsazQ6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKglSTFIwLFJMUjEsUkxSMixSTFIzOiBmb3VyIGlucHV0IHBsYWludGV4dCBibG9ja3MKKwkgKiBvdXRwdXQ6CisJICoJUkxSMCxSTFIxLFJMUjIsUkxSMzogZm91ciBvdXRwdXQgY2lwaGVydGV4dCBibG9ja3MKKwkgKi8KKwlHRVRfRVhURVJOX1BPSU5URVIoX2djcnlfY2FzdDVfczF0bzQsIFJUQUIpOworCisJZ2V0X3JvdW5kX2ttKDAsIFJLTTBkKTsKKwlnZXRfcm91bmRfa3JfZW5jKDApOworCXJvdW5kX2VuYzRfMSgwLCBGNF8xLCBGNF8yKTsKKwlyb3VuZF9lbmM0XzEoMiwgRjRfMywgRjRfMSk7CisJcm91bmRfZW5jNF8xKDQsIEY0XzIsIEY0XzMpOworCXJvdW5kX2VuYzRfMig2LCBGNF8xLCBGNF8yKTsKKwlnZXRfcm91bmRfa3JfZW5jKDgpOworCXJvdW5kX2VuYzRfMSg4LCBGNF8zLCBGNF8xKTsKKwlyb3VuZF9lbmM0XzEoMTAsIEY0XzIsIEY0XzMpOworCXJvdW5kX2VuYzRfMSgxMiwgRjRfMSwgRjRfMik7CisJcm91bmRfZW5jX2xhc3Q0KDE0LCBGNF8zLCBGNF8xKTsKKworCW91dGJzd2FwX2Jsb2NrNChSTFIwLCBSTFIxLCBSTFIyLCBSTFIzKTsKKwlyZXQ7Cisuc2l6ZSBfX2Nhc3Q1X2VuY19ibGs0LC4tX19jYXN0NV9lbmNfYmxrNDsKKworLmFsaWduIDgKKy50eXBlICAgX19jYXN0NV9kZWNfYmxrNCxAZnVuY3Rpb247CisKK19fY2FzdDVfZGVjX2JsazQ6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKglSTFIwLFJMUjEsUkxSMixSTFIzOiBmb3VyIGlucHV0IGNpcGhlcnRleHQgYmxvY2tzCisJICogb3V0cHV0OgorCSAqCVJMUjAsUkxSMSxSTFIyLFJMUjM6IGZvdXIgb3V0cHV0IHBsYWludGV4dCBibG9ja3MKKwkgKi8KKwlHRVRfRVhURVJOX1BPSU5URVIoX2djcnlfY2FzdDVfczF0bzQsIFJUQUIpOworCisJaW5ic3dhcF9ibG9jazQoUkxSMCwgUkxSMSwgUkxSMiwgUkxSMyk7CisKKwlnZXRfcm91bmRfa20oMTUsIFJLTTBkKTsKKwlnZXRfcm91bmRfa3JfZGVjKDE1KTsKKwlyb3VuZF9kZWM0XzEoMTUsIEY0XzEsIEY0XzMpOworCXJvdW5kX2RlYzRfMSgxMywgRjRfMiwgRjRfMSk7CisJcm91bmRfZGVjNF8xKDExLCBGNF8zLCBGNF8yKTsKKwlyb3VuZF9kZWM0XzIoOSwgRjRfMSwgRjRfMyk7CisJZ2V0X3JvdW5kX2tyX2RlYyg3KTsKKwlyb3VuZF9kZWM0XzEoNywgRjRfMiwgRjRfMSk7CisJcm91bmRfZGVjNF8xKDUsIEY0XzMsIEY0XzIpOworCXJvdW5kX2RlYzRfMSgzLCBGNF8xLCBGNF8zKTsKKwlyb3VuZF9kZWNfbGFzdDQoMSwgRjRfMiwgRjRfMSk7CisKKwlvdXRic3dhcF9ibG9jazQoUkxSMCwgUkxSMSwgUkxSMiwgUkxSMyk7CisJcmV0OworLnNpemUgX19jYXN0NV9kZWNfYmxrNCwuLV9fY2FzdDVfZGVjX2JsazQ7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfY2FzdDVfYW1kNjRfY3RyX2VuYworLnR5cGUgICBfZ2NyeV9jYXN0NV9hbWQ2NF9jdHJfZW5jLEBmdW5jdGlvbjsKK19nY3J5X2Nhc3Q1X2FtZDY0X2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDggYmxvY2tzKQorCSAqCSVyZHg6IHNyYyAoOCBibG9ja3MpCisJICoJJXJjeDogaXYgKGJpZyBlbmRpYW4sIDY0Yml0KQorCSAqLworCisJcHVzaHEgJXJicDsKKwlwdXNocSAlcmJ4OworCXB1c2hxICVyMTI7CisJcHVzaHEgJXIxMzsKKwlwdXNocSAlcjE0OworCisJcHVzaHEgJXJzaTsKKwlwdXNocSAlcmR4OworCisJLyogbG9hZCBJViBhbmQgYnl0ZXN3YXAgKi8KKwltb3ZxICglcmN4KSwgUlgwOworCWJzd2FwcSBSWDA7CisJbW92cSBSWDAsIFJMUjA7CisKKwkvKiBjb25zdHJ1Y3QgSVZzICovCisJbGVhcSAxKFJYMCksIFJMUjE7CisJbGVhcSAyKFJYMCksIFJMUjI7CisJbGVhcSAzKFJYMCksIFJMUjM7CisJbGVhcSA0KFJYMCksIFJYMDsKKwlic3dhcHEgUlgwOworCisJLyogc3RvcmUgbmV3IElWICovCisJbW92cSBSWDAsICglcmN4KTsKKworCWNhbGwgX19jYXN0NV9lbmNfYmxrNDsKKworCXBvcHEgJXIxNDsgLypzcmMqLworCXBvcHEgJXIxMzsgLypkc3QqLworCisJLyogWE9SIGtleS1zdHJlYW0gd2l0aCBwbGFpbnRleHQgKi8KKwl4b3JxIDAgKiA4KCVyMTQpLCBSTFIwOworCXhvcnEgMSAqIDgoJXIxNCksIFJMUjE7CisJeG9ycSAyICogOCglcjE0KSwgUkxSMjsKKwl4b3JxIDMgKiA4KCVyMTQpLCBSTFIzOworCW1vdnEgUkxSMCwgMCAqIDgoJXIxMyk7CisJbW92cSBSTFIxLCAxICogOCglcjEzKTsKKwltb3ZxIFJMUjIsIDIgKiA4KCVyMTMpOworCW1vdnEgUkxSMywgMyAqIDgoJXIxMyk7CisKKwlwb3BxICVyMTQ7CisJcG9wcSAlcjEzOworCXBvcHEgJXIxMjsKKwlwb3BxICVyYng7CisJcG9wcSAlcmJwOworCXJldAorLnNpemUgX2djcnlfY2FzdDVfYW1kNjRfY3RyX2VuYywuLV9nY3J5X2Nhc3Q1X2FtZDY0X2N0cl9lbmM7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfY2FzdDVfYW1kNjRfY2JjX2RlYworLnR5cGUgICBfZ2NyeV9jYXN0NV9hbWQ2NF9jYmNfZGVjLEBmdW5jdGlvbjsKK19nY3J5X2Nhc3Q1X2FtZDY0X2NiY19kZWM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDggYmxvY2tzKQorCSAqCSVyZHg6IHNyYyAoOCBibG9ja3MpCisJICoJJXJjeDogaXYgKDY0Yml0KQorCSAqLworCisJcHVzaHEgJXJicDsKKwlwdXNocSAlcmJ4OworCXB1c2hxICVyMTI7CisJcHVzaHEgJXIxMzsKKwlwdXNocSAlcjE0OworCisJcHVzaHEgJXJjeDsKKwlwdXNocSAlcnNpOworCXB1c2hxICVyZHg7CisKKwkvKiBsb2FkIGlucHV0ICovCisJbW92cSAwICogOCglcmR4KSwgUkxSMDsKKwltb3ZxIDEgKiA4KCVyZHgpLCBSTFIxOworCW1vdnEgMiAqIDgoJXJkeCksIFJMUjI7CisJbW92cSAzICogOCglcmR4KSwgUkxSMzsKKworCWNhbGwgX19jYXN0NV9kZWNfYmxrNDsKKworCXBvcHEgUlgwOyAvKnNyYyovCisJcG9wcSBSWDE7IC8qZHN0Ki8KKwlwb3BxIFJYMjsgLyppdiovCisKKwltb3ZxIDMgKiA4KFJYMCksICVyMTQ7CisJeG9ycSAgICAgIChSWDIpLCBSTFIwOworCXhvcnEgMCAqIDgoUlgwKSwgUkxSMTsKKwl4b3JxIDEgKiA4KFJYMCksIFJMUjI7CisJeG9ycSAyICogOChSWDApLCBSTFIzOworCW1vdnEgJXIxNCwgKFJYMik7IC8qIHN0b3JlIG5ldyBJViAqLworCisJbW92cSBSTFIwLCAwICogOChSWDEpOworCW1vdnEgUkxSMSwgMSAqIDgoUlgxKTsKKwltb3ZxIFJMUjIsIDIgKiA4KFJYMSk7CisJbW92cSBSTFIzLCAzICogOChSWDEpOworCisJcG9wcSAlcjE0OworCXBvcHEgJXIxMzsKKwlwb3BxICVyMTI7CisJcG9wcSAlcmJ4OworCXBvcHEgJXJicDsKKwlyZXQ7CisKKy5zaXplIF9nY3J5X2Nhc3Q1X2FtZDY0X2NiY19kZWMsLi1fZ2NyeV9jYXN0NV9hbWQ2NF9jYmNfZGVjOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2Nhc3Q1X2FtZDY0X2NmYl9kZWMKKy50eXBlICAgX2djcnlfY2FzdDVfYW1kNjRfY2ZiX2RlYyxAZnVuY3Rpb247CitfZ2NyeV9jYXN0NV9hbWQ2NF9jZmJfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0ICg4IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDggYmxvY2tzKQorCSAqCSVyY3g6IGl2ICg2NGJpdCkKKwkgKi8KKworCXB1c2hxICVyYnA7CisJcHVzaHEgJXJieDsKKwlwdXNocSAlcjEyOworCXB1c2hxICVyMTM7CisJcHVzaHEgJXIxNDsKKworCXB1c2hxICVyc2k7CisJcHVzaHEgJXJkeDsKKworCS8qIExvYWQgaW5wdXQgKi8KKwltb3ZxICglcmN4KSwgUkxSMDsKKwltb3ZxIDAgKiA4KCVyZHgpLCBSTFIxOworCW1vdnEgMSAqIDgoJXJkeCksIFJMUjI7CisJbW92cSAyICogOCglcmR4KSwgUkxSMzsKKworCWluYnN3YXBfYmxvY2s0KFJMUjAsIFJMUjEsIFJMUjIsIFJMUjMpOworCisJLyogVXBkYXRlIElWICovCisJbW92cSAzICogOCglcmR4KSwgJXJkeDsKKwltb3ZxICVyZHgsICglcmN4KTsKKworCWNhbGwgX19jYXN0NV9lbmNfYmxrNDsKKworCXBvcHEgJXJkeDsgLypzcmMqLworCXBvcHEgJXJjeDsgLypkc3QqLworCisJeG9ycSAwICogOCglcmR4KSwgUkxSMDsKKwl4b3JxIDEgKiA4KCVyZHgpLCBSTFIxOworCXhvcnEgMiAqIDgoJXJkeCksIFJMUjI7CisJeG9ycSAzICogOCglcmR4KSwgUkxSMzsKKwltb3ZxIFJMUjAsIDAgKiA4KCVyY3gpOworCW1vdnEgUkxSMSwgMSAqIDgoJXJjeCk7CisJbW92cSBSTFIyLCAyICogOCglcmN4KTsKKwltb3ZxIFJMUjMsIDMgKiA4KCVyY3gpOworCisJcG9wcSAlcjE0OworCXBvcHEgJXIxMzsKKwlwb3BxICVyMTI7CisJcG9wcSAlcmJ4OworCXBvcHEgJXJicDsKKwlyZXQ7CisKKy5zaXplIF9nY3J5X2Nhc3Q1X2FtZDY0X2NmYl9kZWMsLi1fZ2NyeV9jYXN0NV9hbWQ2NF9jZmJfZGVjOworCisjZW5kaWYgLypkZWZpbmVkKFVTRV9DQVNUNSkqLworI2VuZGlmIC8qX194ODZfNjQqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2Nhc3Q1LWFybS5TIGIvY2lwaGVyL2Nhc3Q1LWFybS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2ZhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2FzdDUtYXJtLlMKQEAgLTAsMCArMSw3MTUgQEAKKy8qIGNhc3Q1LWFybS5TICAtICBBUk0gYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgQ0FTVDUgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyNpZmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUworCisudGV4dAorCisuc3ludGF4IHVuaWZpZWQKKy5hcm0KKworLmV4dGVybiBfZ2NyeV9jYXN0NV9zMXRvNDsKKworLyogc3RydWN0dXJlIG9mIGNyeXB0byBjb250ZXh0ICovCisjZGVmaW5lIEttIDAKKyNkZWZpbmUgS3IgKEttICsgKDE2ICogNCkpCisjZGVmaW5lIEtyX2FybV9lbmMgKEtyICsgKDE2KSkKKyNkZWZpbmUgS3JfYXJtX2RlYyAoS3JfYXJtX2VuYyArICgxNikpCisKKy8qIHJlZ2lzdGVyIG1hY3JvcyAqLworI2RlZmluZSBDVFggJXIwCisjZGVmaW5lIFJzMSAlcjcKKyNkZWZpbmUgUnMyICVyOAorI2RlZmluZSBSczMgJXI5CisjZGVmaW5lIFJzNCAlcjEwCisjZGVmaW5lIFJNQVNLICVyMTEKKyNkZWZpbmUgUktNICVyMQorI2RlZmluZSBSS1IgJXIyCisKKyNkZWZpbmUgUkwwICVyMworI2RlZmluZSBSUjAgJXI0CisKKyNkZWZpbmUgUkwxICVyOQorI2RlZmluZSBSUjEgJXIxMAorCisjZGVmaW5lIFJUMCAlbHIKKyNkZWZpbmUgUlQxICVpcAorI2RlZmluZSBSVDIgJXI1CisjZGVmaW5lIFJUMyAlcjYKKworLyogaGVscGVyIG1hY3JvcyAqLworI2RlZmluZSBsZHJfdW5hbGlnbmVkX2xlKHJvdXQsIHJzcmMsIG9mZnMsIHJ0bXApIFwKKwlsZHJiIHJvdXQsIFtyc3JjLCAjKChvZmZzKSArIDApXTsgXAorCWxkcmIgcnRtcCwgW3JzcmMsICMoKG9mZnMpICsgMSldOyBcCisJb3JyIHJvdXQsIHJvdXQsIHJ0bXAsIGxzbCAjODsgXAorCWxkcmIgcnRtcCwgW3JzcmMsICMoKG9mZnMpICsgMildOyBcCisJb3JyIHJvdXQsIHJvdXQsIHJ0bXAsIGxzbCAjMTY7IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDMpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzI0OworCisjZGVmaW5lIHN0cl91bmFsaWduZWRfbGUocmluLCByZHN0LCBvZmZzLCBydG1wMCwgcnRtcDEpIFwKKwltb3YgcnRtcDAsIHJpbiwgbHNyICM4OyBcCisJc3RyYiByaW4sIFtyZHN0LCAjKChvZmZzKSArIDApXTsgXAorCW1vdiBydG1wMSwgcmluLCBsc3IgIzE2OyBcCisJc3RyYiBydG1wMCwgW3Jkc3QsICMoKG9mZnMpICsgMSldOyBcCisJbW92IHJ0bXAwLCByaW4sIGxzciAjMjQ7IFwKKwlzdHJiIHJ0bXAxLCBbcmRzdCwgIygob2ZmcykgKyAyKV07IFwKKwlzdHJiIHJ0bXAwLCBbcmRzdCwgIygob2ZmcykgKyAzKV07CisKKyNkZWZpbmUgbGRyX3VuYWxpZ25lZF9iZShyb3V0LCByc3JjLCBvZmZzLCBydG1wKSBcCisJbGRyYiByb3V0LCBbcnNyYywgIygob2ZmcykgKyAzKV07IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDIpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzg7IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDEpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzE2OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAwKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMyNDsKKworI2RlZmluZSBzdHJfdW5hbGlnbmVkX2JlKHJpbiwgcmRzdCwgb2ZmcywgcnRtcDAsIHJ0bXAxKSBcCisJbW92IHJ0bXAwLCByaW4sIGxzciAjODsgXAorCXN0cmIgcmluLCBbcmRzdCwgIygob2ZmcykgKyAzKV07IFwKKwltb3YgcnRtcDEsIHJpbiwgbHNyICMxNjsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDIpXTsgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzI0OyBcCisJc3RyYiBydG1wMSwgW3Jkc3QsICMoKG9mZnMpICsgMSldOyBcCisJc3RyYiBydG1wMCwgW3Jkc3QsICMoKG9mZnMpICsgMCldOworCisjaWZkZWYgX19BUk1FTF9fCisJI2RlZmluZSBsZHJfdW5hbGlnbmVkX2hvc3QgbGRyX3VuYWxpZ25lZF9sZQorCSNkZWZpbmUgc3RyX3VuYWxpZ25lZF9ob3N0IHN0cl91bmFsaWduZWRfbGUKKworCS8qIGJzd2FwIG9uIGxpdHRsZS1lbmRpYW4gKi8KKyNpZmRlZiBIQVZFX0FSTV9BUkNIX1Y2CisJI2RlZmluZSBob3N0X3RvX2JlKHJlZywgcnRtcCkgXAorCQlyZXYgcmVnLCByZWc7CisJI2RlZmluZSBiZV90b19ob3N0KHJlZywgcnRtcCkgXAorCQlyZXYgcmVnLCByZWc7CisjZWxzZQorCSNkZWZpbmUgaG9zdF90b19iZShyZWcsIHJ0bXApIFwKKwkJZW9yCXJ0bXAsIHJlZywgcmVnLCByb3IgIzE2OyBcCisJCW1vdglydG1wLCBydG1wLCBsc3IgIzg7IFwKKwkJYmljCXJ0bXAsIHJ0bXAsICM2NTI4MDsgXAorCQllb3IJcmVnLCBydG1wLCByZWcsIHJvciAjODsKKwkjZGVmaW5lIGJlX3RvX2hvc3QocmVnLCBydG1wKSBcCisJCWVvcglydG1wLCByZWcsIHJlZywgcm9yICMxNjsgXAorCQltb3YJcnRtcCwgcnRtcCwgbHNyICM4OyBcCisJCWJpYwlydG1wLCBydG1wLCAjNjUyODA7IFwKKwkJZW9yCXJlZywgcnRtcCwgcmVnLCByb3IgIzg7CisjZW5kaWYKKyNlbHNlCisJI2RlZmluZSBsZHJfdW5hbGlnbmVkX2hvc3QgbGRyX3VuYWxpZ25lZF9iZQorCSNkZWZpbmUgc3RyX3VuYWxpZ25lZF9ob3N0IHN0cl91bmFsaWduZWRfYmUKKworCS8qIG5vcCBvbiBiaWctZW5kaWFuICovCisJI2RlZmluZSBob3N0X3RvX2JlKHJlZywgcnRtcCkgLypfKi8KKwkjZGVmaW5lIGJlX3RvX2hvc3QocmVnLCBydG1wKSAvKl8qLworI2VuZGlmCisKKyNkZWZpbmUgaG9zdF90b19ob3N0KHgsIHkpIC8qXyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIDEtd2F5IGNhc3Q1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBkdW1teShuKSAvKl8qLworCisjZGVmaW5lIGxvYWRfa3IobikgXAorCWxkciBSS1IsIFtDVFgsICMoS3JfYXJtX2VuYyArIChuKSldOyAvKiBLcltuXSAqLworCisjZGVmaW5lIGxvYWRfZGVjX2tyKG4pIFwKKwlsZHIgUktSLCBbQ1RYLCAjKEtyX2FybV9kZWMgKyAobikgLSAzKV07IC8qIEtyW25dICovCisKKyNkZWZpbmUgbG9hZF9rbShuKSBcCisJbGRyIFJLTSwgW0NUWCwgIyhLbSArIChuKSAqIDQpXTsgLyogS21bbl0gKi8KKworI2RlZmluZSBzaGlmdF9rcihkdW1teSkgXAorCW1vdiBSS1IsIFJLUiwgbHNyICM4OworCisjZGVmaW5lIEYobiwgcmwsIHJyLCBvcDEsIG9wMiwgb3AzLCBvcDQsIGRlYywgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpIFwKKwlvcDEgUktNLCBycjsgXAorCW1vdiBSS00sIFJLTSwgcm9yIFJLUjsgXAorCVwKKwlhbmQgUlQwLCBSTUFTSywgUktNLCByb3IgIygyNCk7IFwKKwlhbmQgUlQxLCBSTUFTSywgUktNLCBsc3IgIygxNik7IFwKKwlhbmQgUlQyLCBSTUFTSywgUktNLCBsc3IgIyg4KTsgXAorCWxkciBSVDAsIFtSczEsIFJUMF07IFwKKwlhbmQgUlQzLCBSTUFTSywgUktNOyBcCisJbGRyIFJUMSwgW1JzMiwgUlQxXTsgXAorCXNoaWZ0a3IoUktSKTsgXAorCVwKKwlsZHIgUlQyLCBbUnMzLCBSVDJdOyBcCisJXAorCW9wMiBSVDAsIFJUMTsgXAorCWxkciBSVDMsIFtSczQsIFJUM107IFwKKwlvcDMgUlQwLCBSVDI7IFwKKwlsb2Fka20oKG4pICsgKDEgLSAoKGRlYykgKiAyKSkpOyBcCisJb3A0IFJUMCwgUlQzOyBcCisJbG9hZGtyKChuKSArICgxIC0gKChkZWMpICogMikpKTsgXAorCWVvciBybCwgUlQwOworCisjZGVmaW5lIEYxKG4sIHJsLCByciwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUYobiwgcmwsIHJyLCBhZGQsIGVvciwgc3ViLCBhZGQsIGRlYywgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisjZGVmaW5lIEYyKG4sIHJsLCByciwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUYobiwgcmwsIHJyLCBlb3IsIHN1YiwgYWRkLCBlb3IsIGRlYywgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisjZGVmaW5lIEYzKG4sIHJsLCByciwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUYobiwgcmwsIHJyLCBzdWIsIGFkZCwgZW9yLCBzdWIsIGRlYywgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisKKyNkZWZpbmUgZW5jX3JvdW5kKG4sIEZ4LCBybCwgcnIsIGxvYWRrbSwgc2hpZnRrciwgbG9hZGtyKSBcCisJRngobiwgcmwsIHJyLCAwLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikKKworI2RlZmluZSBkZWNfcm91bmQobiwgRngsIHJsLCByciwgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpIFwKKwlGeChuLCBybCwgcnIsIDEsIGxvYWRrbSwgc2hpZnRrciwgbG9hZGtyKQorCisjZGVmaW5lIHJlYWRfYmxvY2tfYWxpZ25lZChyaW4sIG9mZnMsIGwwLCByMCwgY29udmVydCwgcnRtcCkgXAorCWxkciBsMCwgW3JpbiwgIygob2ZmcykgKyAwKV07IFwKKwlsZHIgcjAsIFtyaW4sICMoKG9mZnMpICsgNCldOyBcCisJY29udmVydChsMCwgcnRtcCk7IFwKKwljb252ZXJ0KHIwLCBydG1wKTsKKworI2RlZmluZSB3cml0ZV9ibG9ja19hbGlnbmVkKHJvdXQsIG9mZnMsIGwwLCByMCwgY29udmVydCwgcnRtcCkgXAorCWNvbnZlcnQobDAsIHJ0bXApOyBcCisJY29udmVydChyMCwgcnRtcCk7IFwKKwlzdHIgbDAsIFtyb3V0LCAjKChvZmZzKSArIDApXTsgXAorCXN0ciByMCwgW3JvdXQsICMoKG9mZnMpICsgNCldOworCisjaWZkZWYgX19BUk1fRkVBVFVSRV9VTkFMSUdORUQKKwkvKiB1bmFsaWduZWQgd29yZCByZWFkcyBhbGxvd2VkICovCisJI2RlZmluZSByZWFkX2Jsb2NrKHJpbiwgb2ZmcywgbDAsIHIwLCBydG1wMCkgXAorCQlyZWFkX2Jsb2NrX2FsaWduZWQocmluLCBvZmZzLCBsMCwgcjAsIGhvc3RfdG9fYmUsIHJ0bXAwKQorCisJI2RlZmluZSB3cml0ZV9ibG9jayhyb3V0LCBvZmZzLCByMCwgbDAsIHJ0bXAwLCBydG1wMSkgXAorCQl3cml0ZV9ibG9ja19hbGlnbmVkKHJvdXQsIG9mZnMsIHIwLCBsMCwgYmVfdG9faG9zdCwgcnRtcDApCisKKwkjZGVmaW5lIHJlYWRfYmxvY2tfaG9zdChyaW4sIG9mZnMsIGwwLCByMCwgcnRtcDApIFwKKwkJcmVhZF9ibG9ja19hbGlnbmVkKHJpbiwgb2ZmcywgbDAsIHIwLCBob3N0X3RvX2hvc3QsIHJ0bXAwKQorCisJI2RlZmluZSB3cml0ZV9ibG9ja19ob3N0KHJvdXQsIG9mZnMsIHIwLCBsMCwgcnRtcDAsIHJ0bXAxKSBcCisJCXdyaXRlX2Jsb2NrX2FsaWduZWQocm91dCwgb2ZmcywgcjAsIGwwLCBob3N0X3RvX2hvc3QsIHJ0bXAwKQorI2Vsc2UKKwkvKiBuZWVkIHRvIGhhbmRsZSB1bmFsaWduZWQgcmVhZHMgYnkgYnl0ZSByZWFkcyAqLworCSNkZWZpbmUgcmVhZF9ibG9jayhyaW4sIG9mZnMsIGwwLCByMCwgcnRtcDApIFwKKwkJdHN0IHJpbiwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlsZHJfdW5hbGlnbmVkX2JlKGwwLCByaW4sIChvZmZzKSArIDAsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9iZShyMCwgcmluLCAob2ZmcykgKyA0LCBydG1wMCk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJcmVhZF9ibG9ja19hbGlnbmVkKHJpbiwgb2ZmcywgbDAsIHIwLCBob3N0X3RvX2JlLCBydG1wMCk7IFwKKwkJMjo7CisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrKHJvdXQsIG9mZnMsIGwwLCByMCwgcnRtcDAsIHJ0bXAxKSBcCisJCXRzdCByb3V0LCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCXN0cl91bmFsaWduZWRfYmUobDAsIHJvdXQsIChvZmZzKSArIDAsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCXN0cl91bmFsaWduZWRfYmUocjAsIHJvdXQsIChvZmZzKSArIDQsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJd3JpdGVfYmxvY2tfYWxpZ25lZChyb3V0LCBvZmZzLCBsMCwgcjAsIGJlX3RvX2hvc3QsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgcmVhZF9ibG9ja19ob3N0KHJpbiwgb2ZmcywgbDAsIHIwLCBydG1wMCkgXAorCQl0c3QgcmluLCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChsMCwgcmluLCAob2ZmcykgKyAwLCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChyMCwgcmluLCAob2ZmcykgKyA0LCBydG1wMCk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJcmVhZF9ibG9ja19hbGlnbmVkKHJpbiwgb2ZmcywgbDAsIHIwLCBob3N0X3RvX2hvc3QsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgd3JpdGVfYmxvY2tfaG9zdChyb3V0LCBvZmZzLCBsMCwgcjAsIHJ0bXAwLCBydG1wMSkgXAorCQl0c3Qgcm91dCwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlzdHJfdW5hbGlnbmVkX2hvc3QobDAsIHJvdXQsIChvZmZzKSArIDAsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCXN0cl91bmFsaWduZWRfaG9zdChyMCwgcm91dCwgKG9mZnMpICsgNCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQl3cml0ZV9ibG9ja19hbGlnbmVkKHJvdXQsIG9mZnMsIGwwLCByMCwgaG9zdF90b19ob3N0LCBydG1wMCk7IFwKKwkJMjo7CisjZW5kaWYKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9jYXN0NV9hcm1fZW5jcnlwdF9ibG9jaworLnR5cGUgIF9nY3J5X2Nhc3Q1X2FybV9lbmNyeXB0X2Jsb2NrLCVmdW5jdGlvbjsKKworX2djcnlfY2FzdDVfYXJtX2VuY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXIwOiBDVFgKKwkgKgklcjE6IGRzdAorCSAqCSVyMjogc3JjCisJICovCisJcHVzaCB7JXIxLCAlcjQtJXIxMSwgJWlwLCAlbHJ9OworCisJbGRyIFJzMSwgPV9nY3J5X2Nhc3Q1X3MxdG80OworCW1vdiBSTUFTSywgIygweGZmIDw8IDIpOworCWFkZCBSczIsIFJzMSwgIygweDEwMCo0KTsKKwlhZGQgUnMzLCBSczEsICMoMHgxMDAqNCoyKTsKKwlhZGQgUnM0LCBSczEsICMoMHgxMDAqNCozKTsKKworCXJlYWRfYmxvY2soJXIyLCAwLCBSTDAsIFJSMCwgUlQwKTsKKworCWxvYWRfa20oMCk7CisJbG9hZF9rcigwKTsKKwllbmNfcm91bmQoMCwgRjEsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZCgxLCBGMiwgUlIwLCBSTDAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kKDIsIEYzLCBSTDAsIFJSMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQoMywgRjEsIFJSMCwgUkwwLCBsb2FkX2ttLCBkdW1teSwgbG9hZF9rcik7CisJZW5jX3JvdW5kKDQsIEYyLCBSTDAsIFJSMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQoNSwgRjMsIFJSMCwgUkwwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZCg2LCBGMSwgUkwwLCBSUjAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kKDcsIEYyLCBSUjAsIFJMMCwgbG9hZF9rbSwgZHVtbXksIGxvYWRfa3IpOworCWVuY19yb3VuZCg4LCBGMywgUkwwLCBSUjAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kKDksIEYxLCBSUjAsIFJMMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQoMTAsIEYyLCBSTDAsIFJSMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQoMTEsIEYzLCBSUjAsIFJMMCwgbG9hZF9rbSwgZHVtbXksIGxvYWRfa3IpOworCWVuY19yb3VuZCgxMiwgRjEsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZCgxMywgRjIsIFJSMCwgUkwwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZCgxNCwgRjMsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZCgxNSwgRjEsIFJSMCwgUkwwLCBkdW1teSwgZHVtbXksIGR1bW15KTsKKworCWxkciAlcjEsIFslc3BdLCAjNDsKKwl3cml0ZV9ibG9jayglcjEsIDAsIFJSMCwgUkwwLCBSVDAsIFJUMSk7CisKKwlwb3AgeyVyNC0lcjExLCAlaXAsICVwY307CisubHRvcmcKKy5zaXplIF9nY3J5X2Nhc3Q1X2FybV9lbmNyeXB0X2Jsb2NrLC4tX2djcnlfY2FzdDVfYXJtX2VuY3J5cHRfYmxvY2s7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfY2FzdDVfYXJtX2RlY3J5cHRfYmxvY2sKKy50eXBlICBfZ2NyeV9jYXN0NV9hcm1fZGVjcnlwdF9ibG9jaywlZnVuY3Rpb247CisKK19nY3J5X2Nhc3Q1X2FybV9kZWNyeXB0X2Jsb2NrOgorCS8qIGlucHV0OgorCSAqCSVyMDogQ1RYCisJICoJJXIxOiBkc3QKKwkgKgklcjI6IHNyYworCSAqLworCXB1c2ggeyVyMSwgJXI0LSVyMTEsICVpcCwgJWxyfTsKKworCWxkciBSczEsID1fZ2NyeV9jYXN0NV9zMXRvNDsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsKKwlhZGQgUnMyLCBSczEsICMoMHgxMDAgKiA0KTsKKwlhZGQgUnMzLCBSczEsICMoMHgxMDAgKiA0ICogMik7CisJYWRkIFJzNCwgUnMxLCAjKDB4MTAwICogNCAqIDMpOworCisJcmVhZF9ibG9jayglcjIsIDAsIFJMMCwgUlIwLCBSVDApOworCisJbG9hZF9rbSgxNSk7CisJbG9hZF9kZWNfa3IoMTUpOworCWRlY19yb3VuZCgxNSwgRjEsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCgxNCwgRjMsIFJSMCwgUkwwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCgxMywgRjIsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCgxMiwgRjEsIFJSMCwgUkwwLCBsb2FkX2ttLCBkdW1teSwgbG9hZF9kZWNfa3IpOworCWRlY19yb3VuZCgxMSwgRjMsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCgxMCwgRjIsIFJSMCwgUkwwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCg5LCBGMSwgUkwwLCBSUjAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kKDgsIEYzLCBSUjAsIFJMMCwgbG9hZF9rbSwgZHVtbXksIGxvYWRfZGVjX2tyKTsKKwlkZWNfcm91bmQoNywgRjIsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCg2LCBGMSwgUlIwLCBSTDAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kKDUsIEYzLCBSTDAsIFJSMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQoNCwgRjIsIFJSMCwgUkwwLCBsb2FkX2ttLCBkdW1teSwgbG9hZF9kZWNfa3IpOworCWRlY19yb3VuZCgzLCBGMSwgUkwwLCBSUjAsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kKDIsIEYzLCBSUjAsIFJMMCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQoMSwgRjIsIFJMMCwgUlIwLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZCgwLCBGMSwgUlIwLCBSTDAsIGR1bW15LCBkdW1teSwgZHVtbXkpOworCisJbGRyICVyMSwgWyVzcF0sICM0OworCXdyaXRlX2Jsb2NrKCVyMSwgMCwgUlIwLCBSTDAsIFJUMCwgUlQxKTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5sdG9yZworLnNpemUgX2djcnlfY2FzdDVfYXJtX2RlY3J5cHRfYmxvY2ssLi1fZ2NyeV9jYXN0NV9hcm1fZGVjcnlwdF9ibG9jazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgMi13YXkgY2FzdDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZfMncobiwgcmwwLCBycjAsIHJsMSwgcnIxLCBvcDEsIG9wMiwgb3AzLCBvcDQsIGRlYywgbG9hZGttLCBzaGlmdGtyLCBcCisJICAgICBsb2Fka3IpIFwKKwlvcDEgUlQzLCBSS00sIHJyMDsgXAorCW9wMSBSS00sIFJLTSwgcnIxOyBcCisJbW92IFJUMywgUlQzLCByb3IgUktSOyBcCisJbW92IFJLTSwgUktNLCByb3IgUktSOyBcCisJXAorCWFuZCBSVDAsIFJNQVNLLCBSVDMsIHJvciAjKDI0KTsgXAorCWFuZCBSVDEsIFJNQVNLLCBSVDMsIGxzciAjKDE2KTsgXAorCWFuZCBSVDIsIFJNQVNLLCBSVDMsIGxzciAjKDgpOyBcCisJYW5kIFJUMywgUk1BU0ssIFJUMzsgXAorCVwKKwlsZHIgUlQwLCBbUnMxLCBSVDBdOyBcCisJYWRkIFJUMiwgIygweDEwMCAqIDQpOyBcCisJbGRyIFJUMSwgW1JzMiwgUlQxXTsgXAorCWFkZCBSVDMsICMoMHgxMDAgKiA0ICogMik7IFwKKwlcCisJbGRyIFJUMiwgW1JzMiwgUlQyXTsgXAorCVwKKwlvcDIgUlQwLCBSVDE7IFwKKwlsZHIgUlQzLCBbUnMyLCBSVDNdOyBcCisJYW5kIFJUMSwgUk1BU0ssIFJLTSwgcm9yICMoMjQpOyBcCisJb3AzIFJUMCwgUlQyOyBcCisJYW5kIFJUMiwgUk1BU0ssIFJLTSwgbHNyICMoMTYpOyBcCisJb3A0IFJUMCwgUlQzOyBcCisJYW5kIFJUMywgUk1BU0ssIFJLTSwgbHNyICMoOCk7IFwKKwllb3IgcmwwLCBSVDA7IFwKKwlhZGQgUlQzLCAjKDB4MTAwICogNCk7IFwKKwlsZHIgUlQxLCBbUnMxLCBSVDFdOyBcCisJYW5kIFJUMCwgUk1BU0ssIFJLTTsgXAorCWxkciBSVDIsIFtSczIsIFJUMl07IFwKKwlhZGQgUlQwLCAjKDB4MTAwICogNCAqIDIpOyBcCisJXAorCWxkciBSVDMsIFtSczIsIFJUM107IFwKKwlcCisJb3AyIFJUMSwgUlQyOyBcCisJbGRyIFJUMCwgW1JzMiwgUlQwXTsgXAorCW9wMyBSVDEsIFJUMzsgXAorCWxvYWRrbSgobikgKyAoMSAtICgoZGVjKSAqIDIpKSk7IFwKKwlvcDQgUlQxLCBSVDA7IFwKKwlsb2Fka3IoKG4pICsgKDEgLSAoKGRlYykgKiAyKSkpOyBcCisJc2hpZnRrcihSS1IpOyBcCisJZW9yIHJsMSwgUlQxOworCisjZGVmaW5lIEYxXzJ3KG4sIHJsMCwgcnIwLCBybDEsIHJyMSwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUZfMncobiwgcmwwLCBycjAsIHJsMSwgcnIxLCBhZGQsIGVvciwgc3ViLCBhZGQsIGRlYywgXAorCSAgICAgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisjZGVmaW5lIEYyXzJ3KG4sIHJsMCwgcnIwLCBybDEsIHJyMSwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUZfMncobiwgcmwwLCBycjAsIHJsMSwgcnIxLCBlb3IsIHN1YiwgYWRkLCBlb3IsIGRlYywgXAorCSAgICAgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisjZGVmaW5lIEYzXzJ3KG4sIHJsMCwgcnIwLCBybDEsIHJyMSwgZGVjLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUZfMncobiwgcmwwLCBycjAsIHJsMSwgcnIxLCBzdWIsIGFkZCwgZW9yLCBzdWIsIGRlYywgXAorCSAgICAgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpCisKKyNkZWZpbmUgZW5jX3JvdW5kMihuLCBGeCwgcmwsIHJyLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikgXAorCUZ4IyNfMncobiwgcmwjIzAsIHJyIyMwLCBybCMjMSwgcnIjIzEsIDAsIGxvYWRrbSwgc2hpZnRrciwgbG9hZGtyKQorCisjZGVmaW5lIGRlY19yb3VuZDIobiwgRngsIHJsLCByciwgbG9hZGttLCBzaGlmdGtyLCBsb2Fka3IpIFwKKwlGeCMjXzJ3KG4sIHJsIyMwLCByciMjMCwgcmwjIzEsIHJyIyMxLCAxLCBsb2Fka20sIHNoaWZ0a3IsIGxvYWRrcikKKworI2RlZmluZSByZWFkX2Jsb2NrMl9hbGlnbmVkKHJpbiwgbDAsIHIwLCBsMSwgcjEsIGNvbnZlcnQsIHJ0bXApIFwKKwlsZHIgbDAsIFtyaW4sICMoMCldOyBcCisJbGRyIHIwLCBbcmluLCAjKDQpXTsgXAorCWNvbnZlcnQobDAsIHJ0bXApOyBcCisJbGRyIGwxLCBbcmluLCAjKDgpXTsgXAorCWNvbnZlcnQocjAsIHJ0bXApOyBcCisJbGRyIHIxLCBbcmluLCAjKDEyKV07IFwKKwljb252ZXJ0KGwxLCBydG1wKTsgXAorCWNvbnZlcnQocjEsIHJ0bXApOworCisjZGVmaW5lIHdyaXRlX2Jsb2NrMl9hbGlnbmVkKHJvdXQsIGwwLCByMCwgbDEsIHIxLCBjb252ZXJ0LCBydG1wKSBcCisJY29udmVydChsMCwgcnRtcCk7IFwKKwljb252ZXJ0KHIwLCBydG1wKTsgXAorCWNvbnZlcnQobDEsIHJ0bXApOyBcCisJc3RyIGwwLCBbcm91dCwgIygwKV07IFwKKwljb252ZXJ0KHIxLCBydG1wKTsgXAorCXN0ciByMCwgW3JvdXQsICMoNCldOyBcCisJc3RyIGwxLCBbcm91dCwgIyg4KV07IFwKKwlzdHIgcjEsIFtyb3V0LCAjKDEyKV07CisKKyNpZmRlZiBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRAorCS8qIHVuYWxpZ25lZCB3b3JkIHJlYWRzIGFsbG93ZWQgKi8KKwkjZGVmaW5lIHJlYWRfYmxvY2syKHJpbiwgbDAsIHIwLCBsMSwgcjEsIHJ0bXAwKSBcCisJCXJlYWRfYmxvY2syX2FsaWduZWQocmluLCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19iZSwgcnRtcDApCisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrMihyb3V0LCBsMCwgcjAsIGwxLCByMSwgcnRtcDAsIHJ0bXAxKSBcCisJCXdyaXRlX2Jsb2NrMl9hbGlnbmVkKHJvdXQsIGwwLCByMCwgbDEsIHIxLCBiZV90b19ob3N0LCBydG1wMCkKKworCSNkZWZpbmUgcmVhZF9ibG9jazJfaG9zdChyaW4sIGwwLCByMCwgbDEsIHIxLCBydG1wMCkgXAorCQlyZWFkX2Jsb2NrMl9hbGlnbmVkKHJpbiwgbDAsIHIwLCBsMSwgcjEsIGhvc3RfdG9faG9zdCwgcnRtcDApCisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrMl9ob3N0KHJvdXQsIGwwLCByMCwgbDEsIHIxLCBydG1wMCwgcnRtcDEpIFwKKwkJd3JpdGVfYmxvY2syX2FsaWduZWQocm91dCwgbDAsIHIwLCBsMSwgcjEsIGhvc3RfdG9faG9zdCwgcnRtcDApCisjZWxzZQorCS8qIG5lZWQgdG8gaGFuZGxlIHVuYWxpZ25lZCByZWFkcyBieSBieXRlIHJlYWRzICovCisJI2RlZmluZSByZWFkX2Jsb2NrMihyaW4sIGwwLCByMCwgbDEsIHIxLCBydG1wMCkgXAorCQl0c3QgcmluLCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUobDAsIHJpbiwgMCwgcnRtcDApOyBcCisJCQlsZHJfdW5hbGlnbmVkX2JlKHIwLCByaW4sIDQsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9iZShsMSwgcmluLCA4LCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfYmUocjEsIHJpbiwgMTIsIHJ0bXAwKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlyZWFkX2Jsb2NrMl9hbGlnbmVkKHJpbiwgbDAsIHIwLCBsMSwgcjEsIGhvc3RfdG9fYmUsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgd3JpdGVfYmxvY2syKHJvdXQsIGwwLCByMCwgbDEsIHIxLCBydG1wMCwgcnRtcDEpIFwKKwkJdHN0IHJvdXQsICMzOyBcCisJCWJlcSAxZjsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShsMCwgcm91dCwgMCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShyMCwgcm91dCwgNCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShsMSwgcm91dCwgOCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9iZShyMSwgcm91dCwgMTIsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJd3JpdGVfYmxvY2syX2FsaWduZWQocm91dCwgbDAsIHIwLCBsMSwgcjEsIGJlX3RvX2hvc3QsIHJ0bXAwKTsgXAorCQkyOjsKKworCSNkZWZpbmUgcmVhZF9ibG9jazJfaG9zdChyaW4sIGwwLCByMCwgbDEsIHIxLCBydG1wMCkgXAorCQl0c3QgcmluLCAjMzsgXAorCQliZXEgMWY7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChsMCwgcmluLCAwLCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChyMCwgcmluLCA0LCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChsMSwgcmluLCA4LCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfaG9zdChyMSwgcmluLCAxMiwgcnRtcDApOyBcCisJCQliIDJmOyBcCisJCTE6O1wKKwkJCXJlYWRfYmxvY2syX2FsaWduZWQocmluLCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19ob3N0LCBydG1wMCk7IFwKKwkJMjo7CisKKwkjZGVmaW5lIHdyaXRlX2Jsb2NrMl9ob3N0KHJvdXQsIGwwLCByMCwgbDEsIHIxLCBydG1wMCwgcnRtcDEpIFwKKwkJdHN0IHJvdXQsICMzOyBcCisJCWJlcSAxZjsgXAorCQkJc3RyX3VuYWxpZ25lZF9ob3N0KGwwLCByb3V0LCAwLCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2hvc3QocjAsIHJvdXQsIDQsIHJ0bXAwLCBydG1wMSk7IFwKKwkJCXN0cl91bmFsaWduZWRfaG9zdChsMSwgcm91dCwgOCwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJc3RyX3VuYWxpZ25lZF9ob3N0KHIxLCByb3V0LCAxMiwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQl3cml0ZV9ibG9jazJfYWxpZ25lZChyb3V0LCBsMCwgcjAsIGwxLCByMSwgaG9zdF90b19ob3N0LCBydG1wMCk7IFwKKwkJMjo7CisjZW5kaWYKKworLmFsaWduIDMKKy50eXBlICBfZ2NyeV9jYXN0NV9hcm1fZW5jX2JsazIsJWZ1bmN0aW9uOworCitfZ2NyeV9jYXN0NV9hcm1fZW5jX2JsazI6CisJLyogaW5wdXQ6CisJICoJcHJlbG9hZGVkOiBDVFgKKwkgKglbUkwwLCBSUjBdLCBbUkwxLCBSUjFdOiBzcmMKKwkgKiBvdXRwdXQ6CisJICoJW1JSMCwgUkwwXSwgW1JSMSwgUkwxXTogZHN0CisJICovCisJcHVzaCB7JWxyfTsKKworCWxkciBSczEsID1fZ2NyeV9jYXN0NV9zMXRvNDsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsKKwlhZGQgUnMyLCBSczEsICMoMHgxMDAgKiA0KTsKKworCWxvYWRfa20oMCk7CisJbG9hZF9rcigwKTsKKwllbmNfcm91bmQyKDAsIEYxLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kMigxLCBGMiwgUlIsIFJMLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZDIoMiwgRjMsIFJMLCBSUiwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQyKDMsIEYxLCBSUiwgUkwsIGxvYWRfa20sIGR1bW15LCBsb2FkX2tyKTsKKwllbmNfcm91bmQyKDQsIEYyLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kMig1LCBGMywgUlIsIFJMLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZDIoNiwgRjEsIFJMLCBSUiwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQyKDcsIEYyLCBSUiwgUkwsIGxvYWRfa20sIGR1bW15LCBsb2FkX2tyKTsKKwllbmNfcm91bmQyKDgsIEYzLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kMig5LCBGMSwgUlIsIFJMLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZDIoMTAsIEYyLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kMigxMSwgRjMsIFJSLCBSTCwgbG9hZF9rbSwgZHVtbXksIGxvYWRfa3IpOworCWVuY19yb3VuZDIoMTIsIEYxLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZW5jX3JvdW5kMigxMywgRjIsIFJSLCBSTCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwllbmNfcm91bmQyKDE0LCBGMywgUkwsIFJSLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWVuY19yb3VuZDIoMTUsIEYxLCBSUiwgUkwsIGR1bW15LCBkdW1teSwgZHVtbXkpOworCisJaG9zdF90b19iZShSUjAsIFJUMCk7CisJaG9zdF90b19iZShSTDAsIFJUMCk7CisJaG9zdF90b19iZShSUjEsIFJUMCk7CisJaG9zdF90b19iZShSTDEsIFJUMCk7CisKKwlwb3AgeyVwY307CisubHRvcmcKKy5zaXplIF9nY3J5X2Nhc3Q1X2FybV9lbmNfYmxrMiwuLV9nY3J5X2Nhc3Q1X2FybV9lbmNfYmxrMjsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9jYXN0NV9hcm1fY2ZiX2RlYzsKKy50eXBlICBfZ2NyeV9jYXN0NV9hcm1fY2ZiX2RlYywlZnVuY3Rpb247CisKK19nY3J5X2Nhc3Q1X2FybV9jZmJfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyMDogQ1RYCisJICoJJXIxOiBkc3QgKDIgYmxvY2tzKQorCSAqCSVyMjogc3JjICgyIGJsb2NrcykKKwkgKgklcjM6IGl2ICg2NGJpdCkKKwkgKi8KKwlwdXNoIHslcjEsICVyMiwgJXI0LSVyMTEsICVpcCwgJWxyfTsKKworCW1vdiAlbHIsICVyMzsKKworCS8qIExvYWQgaW5wdXQgKGl2LyVyMyBpcyBhbGlnbmVkLCBzcmMvJXIyIG1pZ2h0IG5vdCBiZSkgKi8KKwlsZG0gJXIzLCB7UkwwLCBSUjB9OworCWhvc3RfdG9fYmUoUkwwLCBSVDEpOworCWhvc3RfdG9fYmUoUlIwLCBSVDEpOworCXJlYWRfYmxvY2soJXIyLCAwLCBSTDEsIFJSMSwgJWlwKTsKKworCS8qIFVwZGF0ZSBJViwgbG9hZCBzcmNbMV0gYW5kIHNhdmUgdG8gaXZbMF0gKi8KKwlyZWFkX2Jsb2NrX2hvc3QoJXIyLCA4LCAlcjUsICVyNiwgJXI3KTsKKwlzdG0gJWxyLCB7JXI1LCAlcjZ9OworCisJYmwgX2djcnlfY2FzdDVfYXJtX2VuY19ibGsyOworCS8qIHJlc3VsdCBpbiBSUjA6UkwwLCBSUjE6UkwxID0gJXI0OiVyMywgJXIxMDolcjkgKi8KKworCS8qICVyMDogZHN0LCAlcjE6ICVzcmMgKi8KKwlwb3AgeyVyMCwgJXIxfTsKKworCS8qIGRzdCA9IHNyYyBeIHJlc3VsdCAqLworCXJlYWRfYmxvY2syX2hvc3QoJXIxLCAlcjUsICVyNiwgJXI3LCAlcjgsICVscik7CisJZW9yICVyNSwgJXI0OworCWVvciAlcjYsICVyMzsKKwllb3IgJXI3LCAlcjEwOworCWVvciAlcjgsICVyOTsKKwl3cml0ZV9ibG9jazJfaG9zdCglcjAsICVyNSwgJXI2LCAlcjcsICVyOCwgJXIxLCAlcjIpOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9jYXN0NV9hcm1fY2ZiX2RlYywuLV9nY3J5X2Nhc3Q1X2FybV9jZmJfZGVjOworCisuYWxpZ24gMworLmdsb2JsIF9nY3J5X2Nhc3Q1X2FybV9jdHJfZW5jOworLnR5cGUgIF9nY3J5X2Nhc3Q1X2FybV9jdHJfZW5jLCVmdW5jdGlvbjsKKworX2djcnlfY2FzdDVfYXJtX2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXIwOiBDVFgKKwkgKgklcjE6IGRzdCAoMiBibG9ja3MpCisJICoJJXIyOiBzcmMgKDIgYmxvY2tzKQorCSAqCSVyMzogaXYgKDY0Yml0LCBiaWctZW5kaWFuKQorCSAqLworCXB1c2ggeyVyMSwgJXIyLCAlcjQtJXIxMSwgJWlwLCAlbHJ9OworCisJbW92ICVsciwgJXIzOworCisJLyogTG9hZCBJViAoYmlnID0+IGhvc3QgZW5kaWFuKSAqLworCXJlYWRfYmxvY2tfYWxpZ25lZCglbHIsIDAsIFJMMCwgUlIwLCBiZV90b19ob3N0LCBSVDEpOworCisJLyogQ29uc3RydWN0IElWcyAqLworCWFkZHMgUlIxLCBSUjAsICMxOyAvKiArMSAqLworCWFkYyBSTDEsIFJMMCwgIzA7CisJYWRkcyAlcjYsIFJSMSwgIzE7IC8qICsyICovCisJYWRjICVyNSwgUkwxLCAjMDsKKworCS8qIFN0b3JlIG5ldyBJViAoaG9zdCA9PiBiaWctZW5kaWFuKSAqLworCXdyaXRlX2Jsb2NrX2FsaWduZWQoJWxyLCAwLCAlcjUsICVyNiwgaG9zdF90b19iZSwgUlQxKTsKKworCWJsIF9nY3J5X2Nhc3Q1X2FybV9lbmNfYmxrMjsKKwkvKiByZXN1bHQgaW4gUlIwOlJMMCwgUlIxOlJMMSA9ICVyNDolcjMsICVyMTA6JXI5ICovCisKKwkvKiAlcjA6IGRzdCwgJXIxOiAlc3JjICovCisJcG9wIHslcjAsICVyMX07CisKKwkvKiBYT1Iga2V5LXN0cmVhbSB3aXRoIHBsYWludGV4dCAqLworCXJlYWRfYmxvY2syX2hvc3QoJXIxLCAlcjUsICVyNiwgJXI3LCAlcjgsICVscik7CisJZW9yICVyNSwgJXI0OworCWVvciAlcjYsICVyMzsKKwllb3IgJXI3LCAlcjEwOworCWVvciAlcjgsICVyOTsKKwl3cml0ZV9ibG9jazJfaG9zdCglcjAsICVyNSwgJXI2LCAlcjcsICVyOCwgJXIxLCAlcjIpOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9jYXN0NV9hcm1fY3RyX2VuYywuLV9nY3J5X2Nhc3Q1X2FybV9jdHJfZW5jOworCisuYWxpZ24gMworLnR5cGUgIF9nY3J5X2Nhc3Q1X2FybV9kZWNfYmxrMiwlZnVuY3Rpb247CisKK19nY3J5X2Nhc3Q1X2FybV9kZWNfYmxrMjoKKwkvKiBpbnB1dDoKKwkgKglwcmVsb2FkZWQ6IENUWAorCSAqCVtSTDAsIFJSMF0sIFtSTDEsIFJSMV06IHNyYworCSAqIG91dHB1dDoKKwkgKglbUlIwLCBSTDBdLCBbUlIxLCBSTDFdOiBkc3QKKwkgKi8KKworCWxkciBSczEsID1fZ2NyeV9jYXN0NV9zMXRvNDsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsKKwlhZGQgUnMyLCBSczEsICMoMHgxMDAgKiA0KTsKKworCWxvYWRfa20oMTUpOworCWxvYWRfZGVjX2tyKDE1KTsKKwlkZWNfcm91bmQyKDE1LCBGMSwgUkwsIFJSLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZDIoMTQsIEYzLCBSUiwgUkwsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kMigxMywgRjIsIFJMLCBSUiwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQyKDEyLCBGMSwgUlIsIFJMLCBsb2FkX2ttLCBkdW1teSwgbG9hZF9kZWNfa3IpOworCWRlY19yb3VuZDIoMTEsIEYzLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kMigxMCwgRjIsIFJSLCBSTCwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQyKDksIEYxLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kMig4LCBGMywgUlIsIFJMLCBsb2FkX2ttLCBkdW1teSwgbG9hZF9kZWNfa3IpOworCWRlY19yb3VuZDIoNywgRjIsIFJMLCBSUiwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQyKDYsIEYxLCBSUiwgUkwsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kMig1LCBGMywgUkwsIFJSLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZDIoNCwgRjIsIFJSLCBSTCwgbG9hZF9rbSwgZHVtbXksIGxvYWRfZGVjX2tyKTsKKwlkZWNfcm91bmQyKDMsIEYxLCBSTCwgUlIsIGxvYWRfa20sIHNoaWZ0X2tyLCBkdW1teSk7CisJZGVjX3JvdW5kMigyLCBGMywgUlIsIFJMLCBsb2FkX2ttLCBzaGlmdF9rciwgZHVtbXkpOworCWRlY19yb3VuZDIoMSwgRjIsIFJMLCBSUiwgbG9hZF9rbSwgc2hpZnRfa3IsIGR1bW15KTsKKwlkZWNfcm91bmQyKDAsIEYxLCBSUiwgUkwsIGR1bW15LCBkdW1teSwgZHVtbXkpOworCisJaG9zdF90b19iZShSUjAsIFJUMCk7CisJaG9zdF90b19iZShSTDAsIFJUMCk7CisJaG9zdF90b19iZShSUjEsIFJUMCk7CisJaG9zdF90b19iZShSTDEsIFJUMCk7CisKKwliIC5MZGVjX2NiY190YWlsOworLmx0b3JnCisuc2l6ZSBfZ2NyeV9jYXN0NV9hcm1fZGVjX2JsazIsLi1fZ2NyeV9jYXN0NV9hcm1fZGVjX2JsazI7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfY2FzdDVfYXJtX2NiY19kZWM7CisudHlwZSAgX2djcnlfY2FzdDVfYXJtX2NiY19kZWMsJWZ1bmN0aW9uOworCitfZ2NyeV9jYXN0NV9hcm1fY2JjX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcjA6IENUWAorCSAqCSVyMTogZHN0ICgyIGJsb2NrcykKKwkgKgklcjI6IHNyYyAoMiBibG9ja3MpCisJICoJJXIzOiBpdiAoNjRiaXQpCisJICovCisJcHVzaCB7JXIxLSVyMTEsICVpcCwgJWxyfTsKKworCXJlYWRfYmxvY2syKCVyMiwgUkwwLCBSUjAsIFJMMSwgUlIxLCBSVDApOworCisJLyogZGVjX2JsazIgaXMgb25seSB1c2VkIGJ5IGNiY19kZWMsIGp1bXAgZGlyZWN0bHkgaW4vb3V0IGluc3RlYWQKKwkgKiBvZiBmdW5jdGlvbiBjYWxsLiAqLworCWIgX2djcnlfY2FzdDVfYXJtX2RlY19ibGsyOworLkxkZWNfY2JjX3RhaWw6CisJLyogcmVzdWx0IGluIFJSMDpSTDAsIFJSMTpSTDEgPSAlcjQ6JXIzLCAlcjEwOiVyOSAqLworCisJLyogJXIwOiBkc3QsICVyMTogJXNyYywgJXIyOiBpdiAqLworCXBvcCB7JXIwLSVyMn07CisKKwkvKiBsb2FkIElWKzEgKHNyY1swXSkgdG8gJXI3OiVyOC4gTWlnaHQgYmUgdW5hbGlnbmVkLiAqLworCXJlYWRfYmxvY2tfaG9zdCglcjEsIDAsICVyNywgJXI4LCAlcjUpOworCS8qIGxvYWQgSVYgKGl2WzBdKSB0byAlcjU6JXI2LiAnaXYnIGlzIGFsaWduZWQuICovCisJbGRtICVyMiwgeyVyNSwgJXI2fTsKKworCS8qIG91dFsxXSBePSBJVisxICovCisJZW9yICVyMTAsICVyNzsKKwllb3IgJXI5LCAlcjg7CisJLyogb3V0WzBdIF49IElWICovCisJZW9yICVyNCwgJXI1OworCWVvciAlcjMsICVyNjsKKworCS8qIGxvYWQgSVYrMiAoc3JjWzFdKSB0byAlcjc6JXI4LiBNaWdodCBiZSB1bmFsaWduZWQuICovCisJcmVhZF9ibG9ja19ob3N0KCVyMSwgOCwgJXI3LCAlcjgsICVyNSk7CisJLyogc3RvcmUgSVYrMiB0byBpdlswXSAoYWxpZ25lZCkuICovCisJc3RtICVyMiwgeyVyNywgJXI4fTsKKworCS8qIHN0b3JlIHJlc3VsdCB0byBkc3RbMC0zXS4gTWlnaHQgYmUgdW5hbGlnbmVkLiAqLworCXdyaXRlX2Jsb2NrMl9ob3N0KCVyMCwgJXI0LCAlcjMsICVyMTAsICVyOSwgJXI1LCAlcjYpOworCisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworLmx0b3JnCisuc2l6ZSBfZ2NyeV9jYXN0NV9hcm1fY2JjX2RlYywuLV9nY3J5X2Nhc3Q1X2FybV9jYmNfZGVjOworCisjZW5kaWYgLypIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKi8KKyNlbmRpZiAvKl9fQVJNX0FSQ0ggPj0gNiovCmRpZmYgLS1naXQgYS9jaXBoZXIvY2FzdDUuYyBiL2NpcGhlci9jYXN0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNWUxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2FzdDUuYwpAQCAtMCwwICsxLDk4OCBAQAorLyogY2FzdDUuYyAgLSAgQ0FTVDUgY2lwaGVyIChSRkMyMTQ0KQorICoJQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisvKiBUZXN0IHZlY3RvcnM6CisgKgorICogMTI4LWJpdCBrZXkJICAgICAgID0gMDEgMjMgNDUgNjcgMTIgMzQgNTYgNzggMjMgNDUgNjcgODkgMzQgNTYgNzggOUEKKyAqCSAgIHBsYWludGV4dCAgID0gMDEgMjMgNDUgNjcgODkgQUIgQ0QgRUYKKyAqCSAgIGNpcGhlcnRleHQgID0gMjMgOEIgNEYgRTUgODQgN0UgNDQgQjIKKyAqCisgKiA4MC1iaXQgIGtleQkgICAgICAgPSAwMSAyMyA0NSA2NyAxMiAzNCA1NiA3OCAyMyA0NQorICoJCSAgICAgICA9IDAxIDIzIDQ1IDY3IDEyIDM0IDU2IDc4IDIzIDQ1IDAwIDAwIDAwIDAwIDAwIDAwCisgKgkgICBwbGFpbnRleHQgICA9IDAxIDIzIDQ1IDY3IDg5IEFCIENEIEVGCisgKgkgICBjaXBoZXJ0ZXh0ICA9IEVCIDZBIDcxIDFBIDJDIDAyIDI3IDFCCisgKgorICogNDAtYml0ICBrZXkJICAgICAgID0gMDEgMjMgNDUgNjcgMTIKKyAqCQkgICAgICAgPSAwMSAyMyA0NSA2NyAxMiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorICoJICAgcGxhaW50ZXh0ICAgPSAwMSAyMyA0NSA2NyA4OSBBQiBDRCBFRgorICoJICAgY2lwaGVydGV4dCAgPSA3QSBDOCAxNiBEMSA2RSA5QiAzMCAyRQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJjaXBoZXItc2VsZnRlc3QuaCIKKworLyogVVNFX0FNRDY0X0FTTSBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQU1ENjQgYXNzZW1ibHkgY29kZS4gKi8KKyN1bmRlZiBVU0VfQU1ENjRfQVNNCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpCisjIGRlZmluZSBVU0VfQU1ENjRfQVNNIDEKKyNlbmRpZgorCisvKiBVU0VfQVJNX0FTTSBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQVJNIGFzc2VtYmx5IGNvZGUuICovCisjdW5kZWYgVVNFX0FSTV9BU00KKyNpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyMgaWZkZWYgSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMKKyMgIGRlZmluZSBVU0VfQVJNX0FTTSAxCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBDQVNUNV9CTE9DS1NJWkUgOAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdTMyICBLbVsxNl07CisgICAgYnl0ZSBLclsxNl07CisjaWZkZWYgVVNFX0FSTV9BU00KKyAgICB1MzIgS3JfYXJtX2VuY1sxNiAvIHNpemVvZih1MzIpXTsKKyAgICB1MzIgS3JfYXJtX2RlY1sxNiAvIHNpemVvZih1MzIpXTsKKyNlbmRpZgorfSBDQVNUNV9jb250ZXh0OworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90IGNhc3Rfc2V0a2V5ICh2b2lkICpjLCBjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGtleWxlbik7CitzdGF0aWMgdW5zaWduZWQgaW50IGVuY3J5cHRfYmxvY2sgKHZvaWQgKmMsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpOworc3RhdGljIHVuc2lnbmVkIGludCBkZWNyeXB0X2Jsb2NrICh2b2lkICpjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKTsKKworCisKKyNkZWZpbmUgczEgX2djcnlfY2FzdDVfczF0bzRbMF0KKyNkZWZpbmUgczIgX2djcnlfY2FzdDVfczF0bzRbMV0KKyNkZWZpbmUgczMgX2djcnlfY2FzdDVfczF0bzRbMl0KKyNkZWZpbmUgczQgX2djcnlfY2FzdDVfczF0bzRbM10KKworY29uc3QgdTMyIF9nY3J5X2Nhc3Q1X3MxdG80WzRdWzI1Nl0gPSB7IHsKKzB4MzBmYjQwZDQsIDB4OWZhMGZmMGIsIDB4NmJlY2NkMmYsIDB4M2YyNThjN2EsIDB4MWUyMTNmMmYsIDB4OWMwMDRkZDMsIDB4NjAwM2U1NDAsIDB4Y2Y5ZmM5NDksCisweGJmZDRhZjI3LCAweDg4YmJiZGI1LCAweGUyMDM0MDkwLCAweDk4ZDA5Njc1LCAweDZlNjNhMGUwLCAweDE1YzM2MWQyLCAweGMyZTc2NjFkLCAweDIyZDRmZjhlLAorMHgyODY4M2I2ZiwgMHhjMDdmZDA1OSwgMHhmZjIzNzljOCwgMHg3NzVmNTBlMiwgMHg0M2MzNDBkMywgMHhkZjJmODY1NiwgMHg4ODdjYTQxYSwgMHhhMmQyYmQyZCwKKzB4YTFjOWUwZDYsIDB4MzQ2YzQ4MTksIDB4NjFiNzZkODcsIDB4MjI1NDBmMmYsIDB4MmFiZTMyZTEsIDB4YWE1NDE2NmIsIDB4MjI1NjhlM2EsIDB4YTJkMzQxZDAsCisweDY2ZGI0MGM4LCAweGE3ODQzOTJmLCAweDAwNGRmZjJmLCAweDJkYjlkMmRlLCAweDk3OTQzZmFjLCAweDRhOTdjMWQ4LCAweDUyNzY0NGI3LCAweGI1ZjQzN2E3LAorMHhiODJjYmFlZiwgMHhkNzUxZDE1OSwgMHg2ZmY3ZjBlZCwgMHg1YTA5N2ExZiwgMHg4MjdiNjhkMCwgMHg5MGVjZjUyZSwgMHgyMmIwYzA1NCwgMHhiYzhlNTkzNSwKKzB4NGI2ZDJmN2YsIDB4NTBiYjY0YTIsIDB4ZDI2NjQ5MTAsIDB4YmVlNTgxMmQsIDB4YjczMzIyOTAsIDB4ZTkzYjE1OWYsIDB4YjQ4ZWU0MTEsIDB4NGJmZjM0NWQsCisweGZkNDVjMjQwLCAweGFkMzE5NzNmLCAweGM0ZjZkMDJlLCAweDU1ZmM4MTY1LCAweGQ1YjFjYWFkLCAweGExYWMyZGFlLCAweGEyZDRiNzZkLCAweGMxOWIwYzUwLAorMHg4ODIyNDBmMiwgMHgwYzZlNGYzOCwgMHhhNGU0YmZkNywgMHg0ZjViYTI3MiwgMHg1NjRjMWQyZiwgMHhjNTljNTMxOSwgMHhiOTQ5ZTM1NCwgMHhiMDQ2NjlmZSwKKzB4YjFiNmFiOGEsIDB4YzcxMzU4ZGQsIDB4NjM4NWM1NDUsIDB4MTEwZjkzNWQsIDB4NTc1MzhhZDUsIDB4NmEzOTA0OTMsIDB4ZTYzZDM3ZTAsIDB4MmE1NGY2YjMsCisweDNhNzg3ZDVmLCAweDYyNzZhMGI1LCAweDE5YTZmY2RmLCAweDdhNDIyMDZhLCAweDI5ZjlkNGQ1LCAweGY2MWIxODkxLCAweGJiNzIyNzVlLCAweGFhNTA4MTY3LAorMHgzODkwMTA5MSwgMHhjNmI1MDVlYiwgMHg4NGM3Y2I4YywgMHgyYWQ3NWEwZiwgMHg4NzRhMTQyNywgMHhhMmQxOTM2YiwgMHgyYWQyODZhZiwgMHhhYTU2ZDI5MSwKKzB4ZDc4OTQzNjAsIDB4NDI1Yzc1MGQsIDB4OTNiMzllMjYsIDB4MTg3MTg0YzksIDB4NmMwMGIzMmQsIDB4NzNlMmJiMTQsIDB4YTBiZWJjM2MsIDB4NTQ2MjM3NzksCisweDY0NDU5ZWFiLCAweDNmMzI4YjgyLCAweDc3MThjZjgyLCAweDU5YTJjZWE2LCAweDA0ZWUwMDJlLCAweDg5ZmU3OGU2LCAweDNmYWIwOTUwLCAweDMyNWZmNmMyLAorMHg4MTM4M2YwNSwgMHg2OTYzYzVjOCwgMHg3NmNiNWFkNiwgMHhkNDk5NzRjOSwgMHhjYTE4MGRjZiwgMHgzODA3ODJkNSwgMHhjN2ZhNWNmNiwgMHg4YWMzMTUxMSwKKzB4MzVlNzllMTMsIDB4NDdkYTkxZDAsIDB4ZjQwZjkwODYsIDB4YTdlMjQxOWUsIDB4MzEzNjYyNDEsIDB4MDUxZWY0OTUsIDB4YWE1NzNiMDQsIDB4NGE4MDVkOGQsCisweDU0ODMwMGQwLCAweDAwMzIyYTNjLCAweGJmNjRjZGRmLCAweGJhNTdhNjhlLCAweDc1YzYzNzJiLCAweDUwYWZkMzQxLCAweGE3YzEzMjc1LCAweDkxNWEwYmY1LAorMHg2YjU0YmZhYiwgMHgyYjBiMTQyNiwgMHhhYjRjYzlkNywgMHg0NDljY2Q4MiwgMHhmN2ZiZjI2NSwgMHhhYjg1YzVmMywgMHgxYjU1ZGI5NCwgMHhhYWQ0ZTMyNCwKKzB4Y2ZhNGJkM2YsIDB4MmRlYWEzZTIsIDB4OWUyMDRkMDIsIDB4YzhiZDI1YWMsIDB4ZWFkZjU1YjMsIDB4ZDViZDllOTgsIDB4ZTMxMjMxYjIsIDB4MmFkNWFkNmMsCisweDk1NDMyOWRlLCAweGFkYmU0NTI4LCAweGQ4NzEwZjY5LCAweGFhNTFjOTBmLCAweGFhNzg2YmY2LCAweDIyNTEzZjFlLCAweGFhNTFhNzliLCAweDJhZDM0NGNjLAorMHg3YjVhNDFmMCwgMHhkMzdjZmJhZCwgMHgxYjA2OTUwNSwgMHg0MWVjZTQ5MSwgMHhiNGMzMzJlNiwgMHgwMzIyNjhkNCwgMHhjOTYwMGFjYywgMHhjZTM4N2U2ZCwKKzB4YmY2YmIxNmMsIDB4NmE3MGZiNzgsIDB4MGQwM2Q5YzksIDB4ZDRkZjM5ZGUsIDB4ZTAxMDYzZGEsIDB4NDczNmY0NjQsIDB4NWFkMzI4ZDgsIDB4YjM0N2NjOTYsCisweDc1YmIwZmMzLCAweDk4NTExYmZiLCAweDRmZmJjYzM1LCAweGI1OGJjZjZhLCAweGUxMWYwYWJjLCAweGJmYzVmZTRhLCAweGE3MGFlYzEwLCAweGFjMzk1NzBhLAorMHgzZjA0NDQyZiwgMHg2MTg4YjE1MywgMHhlMDM5N2EyZSwgMHg1NzI3Y2I3OSwgMHg5Y2ViNDE4ZiwgMHgxY2FjZDY4ZCwgMHgyYWQzN2M5NiwgMHgwMTc1Y2I5ZCwKKzB4YzY5ZGZmMDksIDB4Yzc1YjY1ZjAsIDB4ZDlkYjQwZDgsIDB4ZWMwZTc3NzksIDB4NDc0NGVhZDQsIDB4YjExYzMyNzQsIDB4ZGQyNGNiOWUsIDB4N2UxYzU0YmQsCisweGYwMTE0NGY5LCAweGQyMjQwZWIxLCAweDk2NzViM2ZkLCAweGEzYWMzNzU1LCAweGQ0N2MyN2FmLCAweDUxYzg1ZjRkLCAweDU2OTA3NTk2LCAweGE1YmIxNWU2LAorMHg1ODAzMDRmMCwgMHhjYTA0MmNmMSwgMHgwMTFhMzdlYSwgMHg4ZGJmYWFkYiwgMHgzNWJhM2U0YSwgMHgzNTI2ZmZhMCwgMHhjMzdiNGQwOSwgMHhiYzMwNmVkOSwKKzB4OThhNTI2NjYsIDB4NTY0OGY3MjUsIDB4ZmY1ZTU2OWQsIDB4MGNlZDYzZDAsIDB4N2M2M2IyY2YsIDB4NzAwYjQ1ZTEsIDB4ZDVlYTUwZjEsIDB4ODVhOTI4NzIsCisweGFmMWZiZGE3LCAweGQ0MjM0ODcwLCAweGE3ODcwYmYzLCAweDJkM2I0ZDc5LCAweDQyZTA0MTk4LCAweDBjZDBlZGU3LCAweDI2NDcwZGI4LCAweGY4ODE4MTRjLAorMHg0NzRkNmFkNywgMHg3YzBjNWU1YywgMHhkMTIzMTk1OSwgMHgzODFiNzI5OCwgMHhmNWQyZjRkYiwgMHhhYjgzODY1MywgMHg2ZTJmMWUyMywgMHg4MzcxOWM5ZSwKKzB4YmQ5MWUwNDYsIDB4OWE1NjQ1NmUsIDB4ZGMzOTIwMGMsIDB4MjBjOGM1NzEsIDB4OTYyYmRhMWMsIDB4ZTFlNjk2ZmYsIDB4YjE0MWFiMDgsIDB4N2NjYTg5YjksCisweDFhNjllNzgzLCAweDAyY2M0ODQzLCAweGEyZjdjNTc5LCAweDQyOWVmNDdkLCAweDQyN2IxNjljLCAweDVhYzlmMDQ5LCAweGRkOGYwZjAwLCAweDVjODE2NWJmCit9LCB7CisweDFmMjAxMDk0LCAweGVmMGJhNzViLCAweDY5ZTNjZjdlLCAweDM5M2Y0MzgwLCAweGZlNjFjZjdhLCAweGVlYzUyMDdhLCAweDU1ODg5Yzk0LCAweDcyZmMwNjUxLAorMHhhZGE3ZWY3OSwgMHg0ZTFkNzIzNSwgMHhkNTVhNjNjZSwgMHhkZTA0MzZiYSwgMHg5OWM0MzBlZiwgMHg1ZjBjMDc5NCwgMHgxOGRjZGI3ZCwgMHhhMWQ2ZWZmMywKKzB4YTBiNTJmN2IsIDB4NTllODM2MDUsIDB4ZWUxNWIwOTQsIDB4ZTlmZmQ5MDksIDB4ZGM0NDAwODYsIDB4ZWY5NDQ0NTksIDB4YmE4M2NjYjMsIDB4ZTBjM2NkZmIsCisweGQxZGE0MTgxLCAweDNiMDkyYWIxLCAweGY5OTdmMWMxLCAweGE1ZTZjZjdiLCAweDAxNDIwZGRiLCAweGU0ZTdlZjViLCAweDI1YTFmZjQxLCAweGUxODBmODA2LAorMHgxZmM0MTA4MCwgMHgxNzliZWU3YSwgMHhkMzdhYzZhOSwgMHhmZTU4MzBhNCwgMHg5OGRlOGI3ZiwgMHg3N2U4M2Y0ZSwgMHg3OTkyOTI2OSwgMHgyNGZhOWY3YiwKKzB4ZTExM2M4NWIsIDB4YWNjNDAwODMsIDB4ZDc1MDM1MjUsIDB4ZjdlYTYxNWYsIDB4NjIxNDMxNTQsIDB4MGQ1NTRiNjMsIDB4NWQ2ODExMjEsIDB4Yzg2NmMzNTksCisweDNkNjNjZjczLCAweGNlZTIzNGMwLCAweGQ0ZDg3ZTg3LCAweDVjNjcyYjIxLCAweDA3MWY2MTgxLCAweDM5Zjc2MjdmLCAweDM2MWUzMDg0LCAweGU0ZWI1NzNiLAorMHg2MDJmNjRhNCwgMHhkNjNhY2Q5YywgMHgxYmJjNDYzNSwgMHg5ZTgxMDMyZCwgMHgyNzAxZjUwYywgMHg5OTg0N2FiNCwgMHhhMGUzZGY3OSwgMHhiYTZjZjM4YywKKzB4MTA4NDMwOTQsIDB4MjUzN2E5NWUsIDB4ZjQ2ZjZmZmUsIDB4YTFmZjNiMWYsIDB4MjA4Y2ZiNmEsIDB4OGY0NThjNzQsIDB4ZDllMGEyMjcsIDB4NGVjNzNhMzQsCisweGZjODg0ZjY5LCAweDNlNGRlOGRmLCAweGVmMGUwMDg4LCAweDM1NTk2NDhkLCAweDhhNDUzODhjLCAweDFkODA0MzY2LCAweDcyMWQ5YmZkLCAweGE1ODY4NGJiLAorMHhlODI1NjMzMywgMHg4NDRlODIxMiwgMHgxMjhkODA5OCwgMHhmZWQzM2ZiNCwgMHhjZTI4MGFlMSwgMHgyN2UxOWJhNSwgMHhkNWE2YzI1MiwgMHhlNDk3NTRiZCwKKzB4YzVkNjU1ZGQsIDB4ZWI2NjcwNjQsIDB4Nzc4NDBiNGQsIDB4YTFiNmE4MDEsIDB4ODRkYjI2YTksIDB4ZTBiNTY3MTQsIDB4MjFmMDQzYjcsIDB4ZTVkMDU4NjAsCisweDU0ZjAzMDg0LCAweDA2NmZmNDcyLCAweGEzMWFhMTUzLCAweGRhZGM0NzU1LCAweGI1NjI1ZGJmLCAweDY4NTYxYmU2LCAweDgzY2E2Yjk0LCAweDJkNmVkMjNiLAorMHhlY2NmMDFkYiwgMHhhNmQzZDBiYSwgMHhiNjgwM2Q1YywgMHhhZjc3YTcwOSwgMHgzM2I0YTM0YywgMHgzOTdiYzhkNiwgMHg1ZWUyMmI5NSwgMHg1ZjBlNTMwNCwKKzB4ODFlZDZmNjEsIDB4MjBlNzQzNjQsIDB4YjQ1ZTEzNzgsIDB4ZGUxODYzOWIsIDB4ODgxY2ExMjIsIDB4Yjk2NzI2ZDEsIDB4ODA0OWE3ZTgsIDB4MjJiN2RhN2IsCisweDVlNTUyZDI1LCAweDUyNzJkMjM3LCAweDc5ZDI5NTFjLCAweGM2MGQ4OTRjLCAweDQ4OGNiNDAyLCAweDFiYTRmZTViLCAweGE0YjA5ZjZiLCAweDFjYTgxNWNmLAorMHhhMjBjMzAwNSwgMHg4ODcxZGY2MywgMHhiOWRlMmZjYiwgMHgwY2M2YzllOSwgMHgwYmVlZmY1MywgMHhlMzIxNDUxNywgMHhiNDU0MjgzNSwgMHg5ZjYzMjkzYywKKzB4ZWU0MWU3MjksIDB4NmUxZDJkN2MsIDB4NTAwNDUyODYsIDB4MWU2Njg1ZjMsIDB4ZjMzNDAxYzYsIDB4MzBhMjJjOTUsIDB4MzFhNzA4NTAsIDB4NjA5MzBmMTMsCisweDczZjk4NDE3LCAweGExMjY5ODU5LCAweGVjNjQ1YzQ0LCAweDUyYzg3N2E5LCAweGNkZmYzM2E2LCAweGEwMmIxNzQxLCAweDdjYmFkOWEyLCAweDIxODAwMzZmLAorMHg1MGQ5OWMwOCwgMHhjYjNmNDg2MSwgMHhjMjZiZDc2NSwgMHg2NGEzZjZhYiwgMHg4MDM0MjY3NiwgMHgyNWE3NWU3YiwgMHhlNGU2ZDFmYywgMHgyMGM3MTBlNiwKKzB4Y2RmMGI2ODAsIDB4MTc4NDRkM2IsIDB4MzFlZWY4NGQsIDB4N2UwODI0ZTQsIDB4MmNjYjQ5ZWIsIDB4ODQ2YTNiYWUsIDB4OGZmNzc4ODgsIDB4ZWU1ZDYwZjYsCisweDdhZjc1NjczLCAweDJmZGQ1Y2RiLCAweGExMTYzMWMxLCAweDMwZjY2ZjQzLCAweGIzZmFlYzU0LCAweDE1N2ZkN2ZhLCAweGVmODU3OWNjLCAweGQxNTJkZTU4LAorMHhkYjJmZmQ1ZSwgMHg4ZjMyY2UxOSwgMHgzMDZhZjk3YSwgMHgwMmYwM2VmOCwgMHg5OTMxOWFkNSwgMHhjMjQyZmEwZiwgMHhhN2UzZWJiMCwgMHhjNjhlNDkwNiwKKzB4YjhkYTIzMGMsIDB4ODA4MjMwMjgsIDB4ZGNkZWYzYzgsIDB4ZDM1ZmIxNzEsIDB4MDg4YTFiYzgsIDB4YmVjMGM1NjAsIDB4NjFhM2M5ZTgsIDB4YmNhOGY1NGQsCisweGM3MmZlZmZhLCAweDIyODIyZTk5LCAweDgyYzU3MGI0LCAweGQ4ZDk0ZTg5LCAweDhiMWMzNGJjLCAweDMwMWUxNmU2LCAweDI3M2JlOTc5LCAweGIwZmZlYWE2LAorMHg2MWQ5YjhjNiwgMHgwMGIyNDg2OSwgMHhiN2ZmY2UzZiwgMHgwOGRjMjgzYiwgMHg0M2RhZjY1YSwgMHhmN2UxOTc5OCwgMHg3NjE5YjcyZiwgMHg4ZjFjOWJhNCwKKzB4ZGM4NjM3YTAsIDB4MTZhN2QzYjEsIDB4OWZjMzkzYjcsIDB4YTcxMzZlZWIsIDB4YzZiY2M2M2UsIDB4MWE1MTM3NDIsIDB4ZWY2ODI4YmMsIDB4NTIwMzY1ZDYsCisweDJkNmE3N2FiLCAweDM1MjdlZDRiLCAweDgyMWZkMjE2LCAweDA5NWM2ZTJlLCAweGRiOTJmMmZiLCAweDVlZWEyOWNiLCAweDE0NTg5MmY1LCAweDkxNTg0ZjdmLAorMHg1NDgzNjk3YiwgMHgyNjY3YThjYywgMHg4NTE5NjA0OCwgMHg4YzRiYWNlYSwgMHg4MzM4NjBkNCwgMHgwZDIzZTBmOSwgMHg2YzM4N2U4YSwgMHgwYWU2ZDI0OSwKKzB4YjI4NDYwMGMsIDB4ZDgzNTczMWQsIDB4ZGNiMWM2NDcsIDB4YWM0YzU2ZWEsIDB4M2ViZDgxYjMsIDB4MjMwZWFiYjAsIDB4NjQzOGJjODcsIDB4ZjBiNWIxZmEsCisweDhmNWVhMmIzLCAweGZjMTg0NjQyLCAweDBhMDM2YjdhLCAweDRmYjA4OWJkLCAweDY0OWRhNTg5LCAweGEzNDU0MTVlLCAweDVjMDM4MzIzLCAweDNlNWQzYmI5LAorMHg0M2Q3OTU3MiwgMHg3ZTZkZDA3YywgMHgwNmRmZGYxZSwgMHg2YzZjYzRlZiwgMHg3MTYwYTUzOSwgMHg3M2JmYmU3MCwgMHg4Mzg3NzYwNSwgMHg0NTIzZWNmMQorfSwgeworMHg4ZGVmYzI0MCwgMHgyNWZhNWQ5ZiwgMHhlYjkwM2RiZiwgMHhlODEwYzkwNywgMHg0NzYwN2ZmZiwgMHgzNjlmZTQ0YiwgMHg4YzFmYzY0NCwgMHhhZWNlY2E5MCwKKzB4YmViMWY5YmYsIDB4ZWVmYmNhZWEsIDB4ZThjZjE5NTAsIDB4NTFkZjA3YWUsIDB4OTIwZTg4MDYsIDB4ZjBhZDA1NDgsIDB4ZTEzYzhkODMsIDB4OTI3MDEwZDUsCisweDExMTA3ZDlmLCAweDA3NjQ3ZGI5LCAweGIyZTNlNGQ0LCAweDNkNGYyODVlLCAweGI5YWZhODIwLCAweGZhZGU4MmUwLCAweGEwNjcyNjhiLCAweDgyNzI3OTJlLAorMHg1NTNmYjJjMCwgMHg0ODlhZTIyYiwgMHhkNGVmOTc5NCwgMHgxMjVlM2ZiYywgMHgyMWZmZmNlZSwgMHg4MjViMWJmZCwgMHg5MjU1YzVlZCwgMHgxMjU3YTI0MCwKKzB4NGUxYTgzMDIsIDB4YmFlMDdmZmYsIDB4NTI4MjQ2ZTcsIDB4OGU1NzE0MGUsIDB4MzM3M2Y3YmYsIDB4OGM5ZjgxODgsIDB4YTZmYzRlZTgsIDB4Yzk4MmI1YTUsCisweGE4YzAxZGI3LCAweDU3OWZjMjY0LCAweDY3MDk0ZjMxLCAweGYyYmQzZjVmLCAweDQwZmZmN2MxLCAweDFmYjc4ZGZjLCAweDhlNmJkMmMxLCAweDQzN2JlNTliLAorMHg5OWIwM2RiZiwgMHhiNWRiYzY0YiwgMHg2MzhkYzBlNiwgMHg1NTgxOWQ5OSwgMHhhMTk3YzgxYywgMHg0YTAxMmQ2ZSwgMHhjNTg4NGEyOCwgMHhjY2MzNmY3MSwKKzB4Yjg0M2MyMTMsIDB4NmMwNzQzZjEsIDB4ODMwOTg5M2MsIDB4MGZlZGRkNWYsIDB4MmY3ZmU4NTAsIDB4ZDdjMDdmN2UsIDB4MDI1MDdmYmYsIDB4NWFmYjlhMDQsCisweGE3NDdkMmQwLCAweDE2NTExOTJlLCAweGFmNzBiZjNlLCAweDU4YzMxMzgwLCAweDVmOTgzMDJlLCAweDcyN2NjM2M0LCAweDBhMGZiNDAyLCAweDBmN2ZlZjgyLAorMHg4Yzk2ZmRhZCwgMHg1ZDJjMmFhZSwgMHg4ZWU5OWE0OSwgMHg1MGRhODhiOCwgMHg4NDI3ZjRhMCwgMHgxZWFjNTc5MCwgMHg3OTZmYjQ0OSwgMHg4MjUyZGMxNSwKKzB4ZWZiZDdkOWIsIDB4YTY3MjU5N2QsIDB4YWRhODQwZDgsIDB4NDVmNTQ1MDQsIDB4ZmE1ZDc0MDMsIDB4ZTgzZWMzMDUsIDB4NGY5MTc1MWEsIDB4OTI1NjY5YzIsCisweDIzZWZlOTQxLCAweGE5MDNmMTJlLCAweDYwMjcwZGYyLCAweDAyNzZlNGI2LCAweDk0ZmQ2NTc0LCAweDkyNzk4NWIyLCAweDgyNzZkYmNiLCAweDAyNzc4MTc2LAorMHhmOGFmOTE4ZCwgMHg0ZTQ4Zjc5ZSwgMHg4ZjYxNmRkZiwgMHhlMjlkODQwZSwgMHg4NDJmN2Q4MywgMHgzNDBjZTVjOCwgMHg5NmJiYjY4MiwgMHg5M2I0YjE0OCwKKzB4ZWYzMDNjYWIsIDB4OTg0ZmFmMjgsIDB4Nzc5ZmFmOWIsIDB4OTJkYzU2MGQsIDB4MjI0ZDFlMjAsIDB4ODQzN2FhODgsIDB4N2QyOWRjOTYsIDB4Mjc1NmQzZGMsCisweDhiOTA3Y2VlLCAweGI1MWZkMjQwLCAweGU3YzA3Y2UzLCAweGU1NjZiNGExLCAweGMzZTk2MTVlLCAweDNjZjgyMDlkLCAweDYwOTRkMWUzLCAweGNkOWNhMzQxLAorMHg1Yzc2NDYwZSwgMHgwMGVhOTgzYiwgMHhkNGQ2Nzg4MSwgMHhmZDQ3NTcyYywgMHhmNzZjZWRkOSwgMHhiZGE4MjI5YywgMHgxMjdkYWRhYSwgMHg0MzhhMDc0ZSwKKzB4MWY5N2MwOTAsIDB4MDgxYmRiOGEsIDB4OTNhMDdlYmUsIDB4YjkzOGNhMTUsIDB4OTdiMDNjZmYsIDB4M2RjMmMwZjgsIDB4OGQxYWIyZWMsIDB4NjQzODBlNTEsCisweDY4Y2M3YmZiLCAweGQ5MGYyNzg4LCAweDEyNDkwMTgxLCAweDVkZTVmZmQ0LCAweGRkN2VmODZhLCAweDc2YTJlMjE0LCAweGI5YTQwMzY4LCAweDkyNWQ5NThmLAorMHg0YjM5ZmZmYSwgMHhiYTM5YWVlOSwgMHhhNGZmZDMwYiwgMHhmYWY3OTMzYiwgMHg2ZDQ5ODYyMywgMHgxOTNjYmNmYSwgMHgyNzYyNzU0NSwgMHg4MjVjZjQ3YSwKKzB4NjFiZDhiYTAsIDB4ZDExZTQyZDEsIDB4Y2VhZDA0ZjQsIDB4MTI3ZWEzOTIsIDB4MTA0MjhkYjcsIDB4ODI3MmE5NzIsIDB4OTI3MGM0YTgsIDB4MTI3ZGU1MGIsCisweDI4NWJhMWM4LCAweDNjNjJmNDRmLCAweDM1YzBlYWE1LCAweGU4MDVkMjMxLCAweDQyODkyOWZiLCAweGI0ZmNkZjgyLCAweDRmYjY2YTUzLCAweDBlN2RjMTViLAorMHgxZjA4MWZhYiwgMHgxMDg2MThhZSwgMHhmY2ZkMDg2ZCwgMHhmOWZmMjg4OSwgMHg2OTRiY2MxMSwgMHgyMzZhNWNhZSwgMHgxMmRlY2E0ZCwgMHgyYzNmOGNjNSwKKzB4ZDJkMDJkZmUsIDB4ZjhlZjU4OTYsIDB4ZTRjZjUyZGEsIDB4OTUxNTViNjcsIDB4NDk0YTQ4OGMsIDB4YjliNmE4MGMsIDB4NWM4ZjgyYmMsIDB4ODlkMzZiNDUsCisweDNhNjA5NDM3LCAweGVjMDBjOWE5LCAweDQ0NzE1MjUzLCAweDBhODc0YjQ5LCAweGQ3NzNiYzQwLCAweDdjMzQ2NzFjLCAweDAyNzE3ZWY2LCAweDRmZWI1NTM2LAorMHhhMmQwMmZmZiwgMHhkMmJmNjBjNCwgMHhkNDNmMDNjMCwgMHg1MGI0ZWY2ZCwgMHgwNzQ3OGNkMSwgMHgwMDZlMTg4OCwgMHhhMmU1M2Y1NSwgMHhiOWU2ZDRiYywKKzB4YTIwNDgwMTYsIDB4OTc1NzM4MzMsIDB4ZDcyMDdkNjcsIDB4ZGUwZjhmM2QsIDB4NzJmODdiMzMsIDB4YWJjYzRmMzMsIDB4NzY4OGM1NWQsIDB4N2IwMGE2YjAsCisweDk0N2IwMDAxLCAweDU3MDA3NWQyLCAweGY5YmI4OGY4LCAweDg5NDIwMTllLCAweDQyNjRhNWZmLCAweDg1NjMwMmUwLCAweDcyZGJkOTJiLCAweGVlOTcxYjY5LAorMHg2ZWEyMmZkZSwgMHg1ZjA4YWUyYiwgMHhhZjdhNjE2ZCwgMHhlNWM5ODc2NywgMHhjZjFmZWJkMiwgMHg2MWVmYzhjMiwgMHhmMWFjMjU3MSwgMHhjYzgyMzljMiwKKzB4NjcyMTRjYjgsIDB4YjFlNTgzZDEsIDB4YjdkYzNlNjIsIDB4N2YxMGJkY2UsIDB4ZjkwYTVjMzgsIDB4MGZmMDQ0M2QsIDB4NjA2ZTZkYzYsIDB4NjA1NDNhNDksCisweDU3MjdjMTQ4LCAweDJiZTk4YTFkLCAweDhhYjQxNzM4LCAweDIwZTFiZTI0LCAweGFmOTZkYTBmLCAweDY4NDU4NDI1LCAweDk5ODMzYmU1LCAweDYwMGQ0NTdkLAorMHgyODJmOTM1MCwgMHg4MzM0YjM2MiwgMHhkOTFkMTEyMCwgMHgyYjZkOGRhMCwgMHg2NDJiMWUzMSwgMHg5YzMwNWEwMCwgMHg1MmJjZTY4OCwgMHgxYjAzNTg4YSwKKzB4ZjdiYWVmZDUsIDB4NDE0MmVkOWMsIDB4YTQzMTVjMTEsIDB4ODMzMjNlYzUsIDB4ZGZlZjQ2MzYsIDB4YTEzM2M1MDEsIDB4ZTlkMzUzMWMsIDB4ZWUzNTM3ODMKK30sIHsKKzB4OWRiMzA0MjAsIDB4MWZiNmU5ZGUsIDB4YTdiZTdiZWYsIDB4ZDI3M2EyOTgsIDB4NGE0ZjdiZGIsIDB4NjRhZDhjNTcsIDB4ODU1MTA0NDMsIDB4ZmEwMjBlZDEsCisweDdlMjg3YWZmLCAweGU2MGZiNjYzLCAweDA5NWYzNWExLCAweDc5ZWJmMTIwLCAweGZkMDU5ZDQzLCAweDY0OTdiN2IxLCAweGYzNjQxZjYzLCAweDI0MWU0YWRmLAorMHgyODE0N2Y1ZiwgMHg0ZmEyYjhjZCwgMHhjOTQzMDA0MCwgMHgwY2MzMjIyMCwgMHhmZGQzMGIzMCwgMHhjMGE1Mzc0ZiwgMHgxZDJkMDBkOSwgMHgyNDE0N2IxNSwKKzB4ZWU0ZDExMWEsIDB4MGZjYTUxNjcsIDB4NzFmZjkwNGMsIDB4MmQxOTVmZmUsIDB4MWEwNTY0NWYsIDB4MGMxM2ZlZmUsIDB4MDgxYjA4Y2EsIDB4MDUxNzAxMjEsCisweDgwNTMwMTAwLCAweGU4M2U1ZWZlLCAweGFjOWFmNGY4LCAweDdmZTcyNzAxLCAweGQyYjhlZTVmLCAweDA2ZGY0MjYxLCAweGJiOWU5YjhhLCAweDcyOTNlYTI1LAorMHhjZTg0ZmZkZiwgMHhmNTcxODgwMSwgMHgzZGQ2NGIwNCwgMHhhMjZmMjYzYiwgMHg3ZWQ0ODQwMCwgMHg1NDdlZWJlNiwgMHg0NDZkNGNhMCwgMHg2Y2YzZDZmNSwKKzB4MjY0OWFiZGYsIDB4YWVhMGM3ZjUsIDB4MzYzMzhjYzEsIDB4NTAzZjdlOTMsIDB4ZDM3NzIwNjEsIDB4MTFiNjM4ZTEsIDB4NzI1MDBlMDMsIDB4ZjgwZWIyYmIsCisweGFiZTA1MDJlLCAweGVjOGQ3N2RlLCAweDU3OTcxZTgxLCAweGUxNGY2NzQ2LCAweGM5MzM1NDAwLCAweDY5MjAzMThmLCAweDA4MWRiYjk5LCAweGZmYzMwNGE1LAorMHg0ZDM1MTgwNSwgMHg3ZjNkNWNlMywgMHhhNmM4NjZjNiwgMHg1ZDViY2NhOSwgMHhkYWVjNmZlYSwgMHg5ZjkyNmY5MSwgMHg5ZjQ2MjIyZiwgMHgzOTkxNDY3ZCwKKzB4YTViZjZkOGUsIDB4MTE0M2M0NGYsIDB4NDM5NTgzMDIsIDB4ZDAyMTRlZWIsIDB4MDIyMDgzYjgsIDB4M2ZiNjE4MGMsIDB4MThmODkzMWUsIDB4MjgxNjU4ZTYsCisweDI2NDg2ZTNlLCAweDhiZDc4YTcwLCAweDc0NzdlNGMxLCAweGI1MDZlMDdjLCAweGYzMmQwYTI1LCAweDc5MDk4YjAyLCAweGU0ZWFiYjgxLCAweDI4MTIzYjIzLAorMHg2OWRlYWQzOCwgMHgxNTc0Y2ExNiwgMHhkZjg3MWI2MiwgMHgyMTFjNDBiNywgMHhhNTFhOWVmOSwgMHgwMDE0Mzc3YiwgMHgwNDFlOGFjOCwgMHgwOTExNDAwMywKKzB4YmQ1OWU0ZDIsIDB4ZTNkMTU2ZDUsIDB4NGZlODc2ZDUsIDB4MmY5MWEzNDAsIDB4NTU3YmU4ZGUsIDB4MDBlYWU0YTcsIDB4MGNlNWMyZWMsIDB4NGRiNGJiYTYsCisweGU3NTZiZGZmLCAweGRkMzM2OWFjLCAweGVjMTdiMDM1LCAweDA2NTcyMzI3LCAweDk5YWZjOGIwLCAweDU2YzhjMzkxLCAweDZiNjU4MTFjLCAweDVlMTQ2MTE5LAorMHg2ZTg1Y2I3NSwgMHhiZTA3YzAwMiwgMHhjMjMyNTU3NywgMHg4OTNmZjRlYywgMHg1YmJmYzkyZCwgMHhkMGVjM2IyNSwgMHhiNzgwMWFiNywgMHg4ZDZkM2IyNCwKKzB4MjBjNzYzZWYsIDB4YzM2NmE1ZmMsIDB4OWMzODI4ODAsIDB4MGFjZTMyMDUsIDB4YWFjOTU0OGEsIDB4ZWNhMWQ3YzcsIDB4MDQxYWZhMzIsIDB4MWQxNjYyNWEsCisweDY3MDE5MDJjLCAweDliNzU3YTU0LCAweDMxZDQ3N2Y3LCAweDkxMjZiMDMxLCAweDM2Y2M2ZmRiLCAweGM3MGI4YjQ2LCAweGQ5ZTY2YTQ4LCAweDU2ZTU1YTc5LAorMHgwMjZhNGNlYiwgMHg1MjQzN2VmZiwgMHgyZjhmNzZiNCwgMHgwZGY5ODBhNSwgMHg4Njc0Y2RlMywgMHhlZGRhMDRlYiwgMHgxN2E5YmUwNCwgMHgyYzE4ZjRkZiwKKzB4Yjc3NDdmOWQsIDB4YWIyYWY3YjQsIDB4ZWZjMzRkMjAsIDB4MmUwOTZiN2MsIDB4MTc0MWEyNTQsIDB4ZTViNmEwMzUsIDB4MjEzZDQyZjYsIDB4MmMxYzdjMjYsCisweDYxYzJmNTBmLCAweDY1NTJkYWY5LCAweGQyYzIzMWY4LCAweDI1MTMwZjY5LCAweGQ4MTY3ZmEyLCAweDA0MThmMmM4LCAweDAwMWE5NmE2LCAweDBkMTUyNmFiLAorMHg2MzMxNWMyMSwgMHg1ZTBhNzJlYywgMHg0OWJhZmVmZCwgMHgxODc5MDhkOSwgMHg4ZDBkYmQ4NiwgMHgzMTExNzBhNywgMHgzZTliNjQwYywgMHhjYzNlMTBkNywKKzB4ZDVjYWQzYjYsIDB4MGNhZWMzODgsIDB4ZjczMDAxZTEsIDB4NmM3MjhhZmYsIDB4NzFlYWUyYTEsIDB4MWY5YWYzNmUsIDB4Y2ZjYmQxMmYsIDB4YzFkZTg0MTcsCisweGFjMDdiZTZiLCAweGNiNDRhMWQ4LCAweDhiOWIwZjU2LCAweDAxMzk4OGMzLCAweGIxYzUyZmNhLCAweGI0YmUzMWNkLCAweGQ4NzgyODA2LCAweDEyYTNhNGUyLAorMHg2ZjdkZTUzMiwgMHg1OGZkN2ViNiwgMHhkMDFlZTkwMCwgMHgyNGFkZmZjMiwgMHhmNDk5MGZjNSwgMHg5NzExYWFjNSwgMHgwMDFkN2I5NSwgMHg4MmU1ZTdkMiwKKzB4MTA5ODczZjYsIDB4MDA2MTMwOTYsIDB4YzMyZDk1MjEsIDB4YWRhMTIxZmYsIDB4Mjk5MDg0MTUsIDB4N2ZiYjk3N2YsIDB4YWY5ZWIzZGIsIDB4MjljOWVkMmEsCisweDVjZTJhNDY1LCAweGE3MzBmMzJjLCAweGQwYWEzZmU4LCAweDhhNWNjMDkxLCAweGQ0OWUyY2U3LCAweDBjZTQ1NGE5LCAweGQ2MGFjZDg2LCAweDAxNWYxOTE5LAorMHg3NzA3OTEwMywgMHhkZWEwM2FmNiwgMHg3OGE4NTY1ZSwgMHhkZWUzNTZkZiwgMHgyMWYwNWNiZSwgMHg4Yjc1ZTM4NywgMHhiM2M1MDY1MSwgMHhiOGE1YzNlZiwKKzB4ZDhlZWI2ZDIsIDB4ZTUyM2JlNzcsIDB4YzIxNTQ1MjksIDB4MmY2OWVmZGYsIDB4YWZlNjdhZmIsIDB4ZjQ3MGM0YjIsIDB4ZjNlMGViNWIsIDB4ZDZjYzk4NzYsCisweDM5ZTQ0NjBjLCAweDFmZGE4NTM4LCAweDE5ODc4MzJmLCAweGNhMDA3MzY3LCAweGE5OTE0NGY4LCAweDI5NmIyOTllLCAweDQ5MmZjMjk1LCAweDkyNjZiZWFiLAorMHhiNTY3NmU2OSwgMHg5YmQzZGRkYSwgMHhkZjdlMDUyZiwgMHhkYjI1NzAxYywgMHgxYjVlNTFlZSwgMHhmNjUzMjRlNiwgMHg2YWZjZTM2YywgMHgwMzE2Y2MwNCwKKzB4ODY0NDIxM2UsIDB4YjdkYzU5ZDAsIDB4Nzk2NTI5MWYsIDB4Y2NkNmZkNDMsIDB4NDE4MjM5NzksIDB4OTMyYmNkZjYsIDB4YjY1N2MzNGQsIDB4NGVkZmQyODIsCisweDdhZTUyOTBjLCAweDNjYjk1MzZiLCAweDg1MWUyMGZlLCAweDk4MzM1NTdlLCAweDEzZWNmMGIwLCAweGQzZmZiMzcyLCAweDNmODVjNWMxLCAweDBhZWY3ZWQyCit9IH07CitzdGF0aWMgY29uc3QgdTMyIHM1WzI1Nl0gPSB7CisweDdlYzkwYzA0LCAweDJjNmU3NGI5LCAweDliMGU2NmRmLCAweGE2MzM3OTExLCAweGI4NmE3ZmZmLCAweDFkZDM1OGY1LCAweDQ0ZGQ5ZDQ0LCAweDE3MzExNjdmLAorMHgwOGZiZjFmYSwgMHhlN2Y1MTFjYywgMHhkMjA1MWIwMCwgMHg3MzVhYmEwMCwgMHgyYWI3MjJkOCwgMHgzODYzODFjYiwgMHhhY2Y2MjQzYSwgMHg2OWJlZmQ3YSwKKzB4ZTZhMmU3N2YsIDB4ZjBjNzIwY2QsIDB4YzQ0OTQ4MTYsIDB4Y2NmNWMxODAsIDB4Mzg4NTE2NDAsIDB4MTViMGE4NDgsIDB4ZTY4YjE4Y2IsIDB4NGNhYWRlZmYsCisweDVmNDgwYTAxLCAweDA0MTJiMmFhLCAweDI1OTgxNGZjLCAweDQxZDBlZmUyLCAweDRlNDBiNDhkLCAweDI0OGViNmZiLCAweDhkYmExY2ZlLCAweDQxYTk5YjAyLAorMHgxYTU1MGEwNCwgMHhiYThmNjVjYiwgMHg3MjUxZjRlNywgMHg5NWE1MTcyNSwgMHhjMTA2ZWNkNywgMHg5N2E1OTgwYSwgMHhjNTM5YjlhYSwgMHg0ZDc5ZmU2YSwKKzB4ZjJmM2Y3NjMsIDB4NjhhZjgwNDAsIDB4ZWQwYzllNTYsIDB4MTFiNDk1OGIsIDB4ZTFlYjVhODgsIDB4ODcwOWU2YjAsIDB4ZDdlMDcxNTYsIDB4NGUyOWZlYTcsCisweDYzNjZlNTJkLCAweDAyZDFjMDAwLCAweGM0YWM4ZTA1LCAweDkzNzdmNTcxLCAweDBjMDUzNzJhLCAweDU3ODUzNWYyLCAweDIyNjFiZTAyLCAweGQ2NDJhMGM5LAorMHhkZjEzYTI4MCwgMHg3NGI1NWJkMiwgMHg2ODIxOTljMCwgMHhkNDIxZTVlYywgMHg1M2ZiM2NlOCwgMHhjOGFkZWRiMywgMHgyOGE4N2ZjOSwgMHgzZDk1OTk4MSwKKzB4NWMxZmY5MDAsIDB4ZmUzOGQzOTksIDB4MGM0ZWZmMGIsIDB4MDYyNDA3ZWEsIDB4YWEyZjRmYjEsIDB4NGZiOTY5NzYsIDB4OTBjNzk1MDUsIDB4YjBhOGE3NzQsCisweGVmNTVhMWZmLCAweGU1OWNhMmMyLCAweGE2YjYyZDI3LCAweGU2NmE0MjYzLCAweGRmNjUwMDFmLCAweDBlYzUwOTY2LCAweGRmZGQ1NWJjLCAweDI5ZGUwNjU1LAorMHg5MTFlNzM5YSwgMHgxN2FmODk3NSwgMHgzMmM3OTExYywgMHg4OWY4OTQ2OCwgMHgwZDAxZTk4MCwgMHg1MjQ3NTVmNCwgMHgwM2I2M2NjOSwgMHgwY2M4NDRiMiwKKzB4YmNmM2YwYWEsIDB4ODdhYzM2ZTksIDB4ZTUzYTc0MjYsIDB4MDFiM2Q4MmIsIDB4MWE5ZTc0NDksIDB4NjRlZTJkN2UsIDB4Y2RkYmIxZGEsIDB4MDFjOTQ5MTAsCisweGI4NjhiZjgwLCAweDBkMjZmM2ZkLCAweDkzNDJlZGU3LCAweDA0YTVjMjg0LCAweDYzNjczN2I2LCAweDUwZjViNjE2LCAweGYyNDc2NmUzLCAweDhlY2EzNmMxLAorMHgxMzZlMDVkYiwgMHhmZWYxODM5MSwgMHhmYjg4N2EzNywgMHhkNmU3ZjdkNCwgMHhjN2ZiN2RjOSwgMHgzMDYzZmNkZiwgMHhiNmY1ODlkZSwgMHhlYzI5NDFkYSwKKzB4MjZlNDY2OTUsIDB4Yjc1NjY0MTksIDB4ZjY1NGVmYzUsIDB4ZDA4ZDU4YjcsIDB4NDg5MjU0MDEsIDB4YzFiYWNiN2YsIDB4ZTVmZjU1MGYsIDB4YjYwODMwNDksCisweDViYjVkMGU4LCAweDg3ZDcyZTVhLCAweGFiNmE2ZWUxLCAweDIyM2E2NmNlLCAweGM2MmJmM2NkLCAweDllMDg4NWY5LCAweDY4Y2IzZTQ3LCAweDA4NmMwMTBmLAorMHhhMjFkZTgyMCwgMHhkMThiNjlkZSwgMHhmM2Y2NTc3NywgMHhmYTAyYzNmNiwgMHg0MDdlZGFjMywgMHhjYmIzZDU1MCwgMHgxNzkzMDg0ZCwgMHhiMGQ3MGViYSwKKzB4MGFiMzc4ZDUsIDB4ZDk1MWZiMGMsIDB4ZGVkN2RhNTYsIDB4NDEyNGJiZTQsIDB4OTRjYTBiNTYsIDB4MGY1NzU1ZDEsIDB4ZTBlMWU1NmUsIDB4NjE4NGI1YmUsCisweDU4MGEyNDlmLCAweDk0Zjc0YmMwLCAweGUzMjc4ODhlLCAweDlmN2I1NTYxLCAweGMzZGMwMjgwLCAweDA1Njg3NzE1LCAweDY0NmM2YmQ3LCAweDQ0OTA0ZGIzLAorMHg2NmI0ZjBhMywgMHhjMGYxNjQ4YSwgMHg2OTdlZDVhZiwgMHg0OWU5MmZmNiwgMHgzMDllMzc0ZiwgMHgyY2I2MzU2YSwgMHg4NTgwODU3MywgMHg0OTkxZjg0MCwKKzB4NzZmMGFlMDIsIDB4MDgzYmU4NGQsIDB4Mjg0MjFjOWEsIDB4NDQ0ODk0MDYsIDB4NzM2ZTRjYjgsIDB4YzEwOTI5MTAsIDB4OGJjOTVmYzYsIDB4N2Q4NjljZjQsCisweDEzNGY2MTZmLCAweDJlNzcxMThkLCAweGIzMWIyYmUxLCAweGFhOTBiNDcyLCAweDNjYTVkNzE3LCAweDdkMTYxYmJhLCAweDljYWQ5MDEwLCAweGFmNDYyYmEyLAorMHg5ZmU0NTlkMiwgMHg0NWQzNDU1OSwgMHhkOWYyZGExMywgMHhkYmM2NTQ4NywgMHhmM2U0Zjk0ZSwgMHgxNzZkNDg2ZiwgMHgwOTdjMTNlYSwgMHg2MzFkYTVjNywKKzB4NDQ1ZjczODIsIDB4MTc1NjgzZjQsIDB4Y2RjNjZhOTcsIDB4NzBiZTAyODgsIDB4YjNjZGNmNzIsIDB4NmU1ZGQyZjMsIDB4MjA5MzYwNzksIDB4NDU5YjgwYTUsCisweGJlNjBlMmRiLCAweGE5YzIzMTAxLCAweGViYTUzMTVjLCAweDIyNGU0MmYyLCAweDFjNWMxNTcyLCAweGY2NzIxYjJjLCAweDFhZDJmZmYzLCAweDhjMjU0MDRlLAorMHgzMjRlZDcyZiwgMHg0MDY3YjdmZCwgMHgwNTIzMTM4ZSwgMHg1Y2EzYmM3OCwgMHhkYzBmZDY2ZSwgMHg3NTkyMjI4MywgMHg3ODRkNmIxNywgMHg1OGViYjE2ZSwKKzB4NDQwOTRmODUsIDB4M2Y0ODFkODcsIDB4ZmNmZWFlN2IsIDB4NzdiNWZmNzYsIDB4OGMyMzAyYmYsIDB4YWFmNDc1NTYsIDB4NWY0NmIwMmEsIDB4MmIwOTI4MDEsCisweDNkMzhmNWY3LCAweDBjYTgxZjM2LCAweDUyYWY0YThhLCAweDY2ZDVlN2MwLCAweGRmM2IwODc0LCAweDk1MDU1MTEwLCAweDFiNWFkN2E4LCAweGY2MWVkNWFkLAorMHg2Y2Y2ZTQ3OSwgMHgyMDc1ODE4NCwgMHhkMGNlZmE2NSwgMHg4OGY3YmU1OCwgMHg0YTA0NjgyNiwgMHgwZmY2ZjhmMywgMHhhMDljN2Y3MCwgMHg1MzQ2YWJhMCwKKzB4NWNlOTZjMjgsIDB4ZTE3NmVkYTMsIDB4NmJhYzMwN2YsIDB4Mzc2ODI5ZDIsIDB4ODUzNjBmYTksIDB4MTdlM2ZlMmEsIDB4MjRiNzk3NjcsIDB4ZjVhOTZiMjAsCisweGQ2Y2QyNTk1LCAweDY4ZmYxZWJmLCAweDc1NTU0NDJjLCAweGYxOWYwNmJlLCAweGY5ZTA2NTlhLCAweGVlYjk0OTFkLCAweDM0MDEwNzE4LCAweGJiMzBjYWI4LAorMHhlODIyZmUxNSwgMHg4ODU3MDk4MywgMHg3NTBlNjI0OSwgMHhkYTYyN2U1NSwgMHg1ZTc2ZmZhOCwgMHhiMTUzNDU0NiwgMHg2ZDQ3ZGUwOCwgMHhlZmU5ZTdkNAorfTsKK3N0YXRpYyBjb25zdCB1MzIgczZbMjU2XSA9IHsKKzB4ZjZmYThmOWQsIDB4MmNhYzZjZTEsIDB4NGNhMzQ4NjcsIDB4ZTIzMzdmN2MsIDB4OTVkYjA4ZTcsIDB4MDE2ODQzYjQsIDB4ZWNlZDVjYmMsIDB4MzI1NTUzYWMsCisweGJmOWYwOTYwLCAweGRmYTFlMmVkLCAweDgzZjA1NzlkLCAweDYzZWQ4NmI5LCAweDFhYjZhNmI4LCAweGRlNWViZTM5LCAweGYzOGZmNzMyLCAweDg5ODliMTM4LAorMHgzM2YxNDk2MSwgMHhjMDE5MzdiZCwgMHhmNTA2YzZkYSwgMHhlNDYyNWU3ZSwgMHhhMzA4ZWE5OSwgMHg0ZTIzZTMzYywgMHg3OWNiZDdjYywgMHg0OGExNDM2NywKKzB4YTMxNDk2MTksIDB4ZmVjOTRiZDUsIDB4YTExNDE3NGEsIDB4ZWFhMDE4NjYsIDB4YTA4NGRiMmQsIDB4MDlhODQ4NmYsIDB4YTg4ODYxNGEsIDB4MjkwMGFmOTgsCisweDAxNjY1OTkxLCAweGUxOTkyODYzLCAweGM4ZjMwYzYwLCAweDJlNzhlZjNjLCAweGQwZDUxOTMyLCAweGNmMGZlYzE0LCAweGY3Y2EwN2QyLCAweGQwYTgyMDcyLAorMHhmZDQxMTk3ZSwgMHg5MzA1YTZiMCwgMHhlODZiZTNkYSwgMHg3NGJlZDNjZCwgMHgzNzJkYTUzYywgMHg0YzdmNDQ0OCwgMHhkYWI1ZDQ0MCwgMHg2ZGJhMGVjMywKKzB4MDgzOTE5YTcsIDB4OWZiYWVlZDksIDB4NDlkYmNmYjAsIDB4NGU2NzBjNTMsIDB4NWMzZDljMDEsIDB4NjRiZGI5NDEsIDB4MmMwZTYzNmEsIDB4YmE3ZGQ5Y2QsCisweGVhNmY3Mzg4LCAweGU3MGJjNzYyLCAweDM1ZjI5YWRiLCAweDVjNGNkZDhkLCAweGYwZDQ4ZDhjLCAweGI4ODE1M2UyLCAweDA4YTE5ODY2LCAweDFhZTJlYWM4LAorMHgyODRjYWY4OSwgMHhhYTkyODIyMywgMHg5MzM0YmU1MywgMHgzYjNhMjFiZiwgMHgxNjQzNGJlMywgMHg5YWVhMzkwNiwgMHhlZmU4YzM2ZSwgMHhmODkwY2RkOSwKKzB4ODAyMjZkYWUsIDB4YzM0MGE0YTMsIDB4ZGY3ZTljMDksIDB4YTY5NGE4MDcsIDB4NWI3YzVlY2MsIDB4MjIxZGIzYTYsIDB4OWE2OWEwMmYsIDB4Njg4MThhNTQsCisweGNlYjIyOTZmLCAweDUzYzA4NDNhLCAweGZlODkzNjU1LCAweDI1YmZlNjhhLCAweGI0NjI4YWJjLCAweGNmMjIyZWJmLCAweDI1YWM2ZjQ4LCAweGE5YTk5Mzg3LAorMHg1M2JkZGI2NSwgMHhlNzZmZmJlNywgMHhlOTY3ZmQ3OCwgMHgwYmE5MzU2MywgMHg4ZTM0MmJjMSwgMHhlOGExMWJlOSwgMHg0OTgwNzQwZCwgMHhjODA4N2RmYywKKzB4OGRlNGJmOTksIDB4YTExMTAxYTAsIDB4N2ZkMzc5NzUsIDB4ZGE1YTI2YzAsIDB4ZTgxZjk5NGYsIDB4OTUyOGNkODksIDB4ZmQzMzlmZWQsIDB4Yjg3ODM0YmYsCisweDVmMDQ0NTZkLCAweDIyMjU4Njk4LCAweGM5YzRjODNiLCAweDJkYzE1NmJlLCAweDRmNjI4ZGFhLCAweDU3ZjU1ZWM1LCAweGUyMjIwYWJlLCAweGQyOTE2ZWJmLAorMHg0ZWM3NWI5NSwgMHgyNGYyYzNjMCwgMHg0MmQxNWQ5OSwgMHhjZDBkN2ZhMCwgMHg3YjZlMjdmZiwgMHhhOGRjOGFmMCwgMHg3MzQ1YzEwNiwgMHhmNDFlMjMyZiwKKzB4MzUxNjIzODYsIDB4ZTZlYTg5MjYsIDB4MzMzM2IwOTQsIDB4MTU3ZWM2ZjIsIDB4MzcyYjc0YWYsIDB4NjkyNTczZTQsIDB4ZTlhOWQ4NDgsIDB4ZjMxNjAyODksCisweDNhNjJlZjFkLCAweGE3ODdlMjM4LCAweGYzYTVmNjc2LCAweDc0MzY0ODUzLCAweDIwOTUxMDYzLCAweDQ1NzY2OThkLCAweGI2ZmFkNDA3LCAweDU5MmFmOTUwLAorMHgzNmY3MzUyMywgMHg0Y2ZiNmU4NywgMHg3ZGE0Y2VjMCwgMHg2YzE1MmRhYSwgMHhjYjAzOTZhOCwgMHhjNTBkZmU1ZCwgMHhmY2Q3MDdhYiwgMHgwOTIxYzQyZiwKKzB4ODlkZmYwYmIsIDB4NWZlMmJlNzgsIDB4NDQ4ZjRmMzMsIDB4NzU0NjEzYzksIDB4MmIwNWQwOGQsIDB4NDhiOWQ1ODUsIDB4ZGMwNDk0NDEsIDB4YzgwOThmOWIsCisweDdkZWRlNzg2LCAweGMzOWEzMzczLCAweDQyNDEwMDA1LCAweDZhMDkxNzUxLCAweDBlZjNjOGE2LCAweDg5MDA3MmQ2LCAweDI4MjA3NjgyLCAweGE5YTlmN2JlLAorMHhiZjMyNjc5ZCwgMHhkNDViNWI3NSwgMHhiMzUzZmQwMCwgMHhjYmIwZTM1OCwgMHg4MzBmMjIwYSwgMHgxZjhmYjIxNCwgMHhkMzcyY2YwOCwgMHhjYzNjNGExMywKKzB4OGNmNjMxNjYsIDB4MDYxYzg3YmUsIDB4ODhjOThmODgsIDB4NjA2MmUzOTcsIDB4NDdjZjhlN2EsIDB4YjZjODUyODMsIDB4M2NjMmFjZmIsIDB4M2ZjMDY5NzYsCisweDRlOGYwMjUyLCAweDY0ZDgzMTRkLCAweGRhMzg3MGUzLCAweDFlNjY1NDU5LCAweGMxMDkwOGYwLCAweDUxMzAyMWE1LCAweDZjNWI2OGI3LCAweDgyMmY4YWEwLAorMHgzMDA3Y2QzZSwgMHg3NDcxOWVlZiwgMHhkYzg3MjY4MSwgMHgwNzMzNDBkNCwgMHg3ZTQzMmZkOSwgMHgwYzVlYzI0MSwgMHg4ODA5Mjg2YywgMHhmNTkyZDg5MSwKKzB4MDhhOTMwZjYsIDB4OTU3ZWYzMDUsIDB4YjdmYmZmYmQsIDB4YzI2NmU5NmYsIDB4NmZlNGFjOTgsIDB4YjE3M2VjYzAsIDB4YmM2MGI0MmEsIDB4OTUzNDk4ZGEsCisweGZiYTFhZTEyLCAweDJkNGJkNzM2LCAweDBmMjVmYWFiLCAweGE0ZjNmY2ViLCAweGUyOTY5MTIzLCAweDI1N2YwYzNkLCAweDkzNDhhZjQ5LCAweDM2MTQwMGJjLAorMHhlODgxNmY0YSwgMHgzODE0ZjIwMCwgMHhhM2Y5NDA0MywgMHg5YzdhNTRjMiwgMHhiYzcwNGY1NywgMHhkYTQxZTdmOSwgMHhjMjVhZDMzYSwgMHg1NGY0YTA4NCwKKzB4YjE3ZjU1MDUsIDB4NTkzNTdjYmUsIDB4ZWRiZDE1YzgsIDB4N2Y5N2M1YWIsIDB4YmE1YWM3YjUsIDB4YjZmNmRlYWYsIDB4M2E0NzljM2EsIDB4NTMwMmRhMjUsCisweDY1M2Q3ZTZhLCAweDU0MjY4ZDQ5LCAweDUxYTQ3N2VhLCAweDUwMTdkNTViLCAweGQ3ZDI1ZDg4LCAweDQ0MTM2Yzc2LCAweDA0MDRhOGM4LCAweGI4ZTVhMTIxLAorMHhiODFhOTI4YSwgMHg2MGVkNTg2OSwgMHg5N2M1NWI5NiwgMHhlYWVjOTkxYiwgMHgyOTkzNTkxMywgMHgwMWZkYjdmMSwgMHgwODhlOGRmYSwgMHg5YWI2ZjZmNSwKKzB4M2I0Y2JmOWYsIDB4NGE1ZGUzYWIsIDB4ZTYwNTFkMzUsIDB4YTBlMWQ4NTUsIDB4ZDM2YjRjZjEsIDB4ZjU0NGVkZWIsIDB4YjBlOTM1MjQsIDB4YmViYjhmYmQsCisweGEyZDc2MmNmLCAweDQ5YzkyZjU0LCAweDM4YjVmMzMxLCAweDcxMjhhNDU0LCAweDQ4MzkyOTA1LCAweGE2NWIxZGI4LCAweDg1MWM5N2JkLCAweGQ2NzVjZjJmCit9Oworc3RhdGljIGNvbnN0IHUzMiBzN1syNTZdID0geworMHg4NWUwNDAxOSwgMHgzMzJiZjU2NywgMHg2NjJkYmZmZiwgMHhjZmM2NTY5MywgMHgyYThkN2Y2ZiwgMHhhYjliYzkxMiwgMHhkZTYwMDhhMSwgMHgyMDI4ZGExZiwKKzB4MDIyN2JjZTcsIDB4NGQ2NDI5MTYsIDB4MThmYWMzMDAsIDB4NTBmMThiODIsIDB4MmNiMmNiMTEsIDB4YjIzMmU3NWMsIDB4NGIzNjk1ZjIsIDB4YjI4NzA3ZGUsCisweGEwNWZiY2Y2LCAweGNkNDE4MWU5LCAweGUxNTAyMTBjLCAweGUyNGVmMWJkLCAweGIxNjhjMzgxLCAweGZkZTRlNzg5LCAweDVjNzliMGQ4LCAweDFlOGJmZDQzLAorMHg0ZDQ5NTAwMSwgMHgzOGJlNDM0MSwgMHg5MTNjZWUxZCwgMHg5MmE3OWMzZiwgMHgwODk3NjZiZSwgMHhiYWVlYWRmNCwgMHgxMjg2YmVjZiwgMHhiNmVhY2IxOSwKKzB4MjY2MGMyMDAsIDB4NzU2NWJkZTQsIDB4NjQyNDFmN2EsIDB4ODI0OGRjYTksIDB4YzNiM2FkNjYsIDB4MjgxMzYwODYsIDB4MGJkOGRmYTgsIDB4MzU2ZDFjZjIsCisweDEwNzc4OWJlLCAweGIzYjJlOWNlLCAweDA1MDJhYThmLCAweDBiYzAzNTFlLCAweDE2NmJmNTJhLCAweGViMTJmZjgyLCAweGUzNDg2OTExLCAweGQzNGQ3NTE2LAorMHg0ZTdiM2FmZiwgMHg1ZjQzNjcxYiwgMHg5Y2Y2ZTAzNywgMHg0OTgxYWM4MywgMHgzMzQyNjZjZSwgMHg4YzkzNDFiNywgMHhkMGQ4NTRjMCwgMHhjYjNhNmM4OCwKKzB4NDdiYzI4MjksIDB4NDcyNWJhMzcsIDB4YTY2YWQyMmIsIDB4N2FkNjFmMWUsIDB4MGM1Y2JhZmEsIDB4NDQzN2YxMDcsIDB4YjZlNzk5NjIsIDB4NDJkMmQ4MTYsCisweDBhOTYxMjg4LCAweGUxYTVjMDZlLCAweDEzNzQ5ZTY3LCAweDcyZmMwODFhLCAweGIxZDEzOWY3LCAweGY5NTgzNzQ1LCAweGNmMTlkZjU4LCAweGJlYzNmNzU2LAorMHhjMDZlYmEzMCwgMHgwNzIxMWIyNCwgMHg0NWMyODgyOSwgMHhjOTVlMzE3ZiwgMHhiYzhlYzUxMSwgMHgzOGJjNDZlOSwgMHhjNmU2ZmExNCwgMHhiYWU4NTg0YSwKKzB4YWQ0ZWJjNDYsIDB4NDY4ZjUwOGIsIDB4NzgyOTQzNWYsIDB4ZjEyNDE4M2IsIDB4ODIxZGJhOWYsIDB4YWZmNjBmZjQsIDB4ZWEyYzRlNmQsIDB4MTZlMzkyNjQsCisweDkyNTQ0YThiLCAweDAwOWI0ZmMzLCAweGFiYTY4Y2VkLCAweDlhYzk2Zjc4LCAweDA2YTViNzlhLCAweGIyODU2ZTZlLCAweDFhZWMzY2E5LCAweGJlODM4Njg4LAorMHgwZTA4MDRlOSwgMHg1NWYxYmU1NiwgMHhlN2U1MzYzYiwgMHhiM2ExZjI1ZCwgMHhmN2RlYmI4NSwgMHg2MWZlMDMzYywgMHgxNjc0NjIzMywgMHgzYzAzNGMyOCwKKzB4ZGE2ZDBjNzQsIDB4NzlhYWM1NmMsIDB4M2NlNGUxYWQsIDB4NTFmMGM4MDIsIDB4OThmOGYzNWEsIDB4MTYyNmE0OWYsIDB4ZWVkODJiMjksIDB4MWQzODJmZTMsCisweDBjNGZiOTlhLCAweGJiMzI1Nzc4LCAweDNlYzZkOTdiLCAweDZlNzdhNmE5LCAweGNiNjU4YjVjLCAweGQ0NTIzMGM3LCAweDJiZDE0MDhiLCAweDYwYzAzZWI3LAorMHhiOTA2OGQ3OCwgMHhhMzM3NTRmNCwgMHhmNDMwYzg3ZCwgMHhjOGE3MTMwMiwgMHhiOTZkOGMzMiwgMHhlYmQ0ZTdiZSwgMHhiZThiOWQyZCwgMHg3OTc5ZmIwNiwKKzB4ZTcyMjUzMDgsIDB4OGI3NWNmNzcsIDB4MTFlZjhkYTQsIDB4ZTA4M2M4NTgsIDB4OGQ2Yjc4NmYsIDB4NWE2MzE3YTYsIDB4ZmE1Y2Y3YTAsIDB4NWRkYTAwMzMsCisweGYyOGViZmIwLCAweGY1YjljMzEwLCAweGEwZWFjMjgwLCAweDA4Yjk3NjdhLCAweGEzZDlkMmIwLCAweDc5ZDM0MjE3LCAweDAyMWE3MThkLCAweDlhYzYzMzZhLAorMHgyNzExZmQ2MCwgMHg0MzgwNTBlMywgMHgwNjk5MDhhOCwgMHgzZDdmZWRjNCwgMHg4MjZkMmJlZiwgMHg0ZWViODQ3NiwgMHg0ODhkY2YyNSwgMHgzNmM5ZDU2NiwKKzB4MjhlNzRlNDEsIDB4YzI2MTBhY2EsIDB4M2Q0OWE5Y2YsIDB4YmFlM2I5ZGYsIDB4YjY1ZjhkZTYsIDB4OTJhZWFmNjQsIDB4M2FjN2Q1ZTYsIDB4OWVhODA1MDksCisweGYyMmIwMTdkLCAweGE0MTczZjcwLCAweGRkMWUxNmMzLCAweDE1ZTBkN2Y5LCAweDUwYjFiODg3LCAweDJiOWY0ZmQ1LCAweDYyNWFiYTgyLCAweDZhMDE3OTYyLAorMHgyZWMwMWI5YywgMHgxNTQ4OGFhOSwgMHhkNzE2ZTc0MCwgMHg0MDA1NWEyYywgMHg5M2QyOWEyMiwgMHhlMzJkYmY5YSwgMHgwNTg3NDViOSwgMHgzNDUzZGMxZSwKKzB4ZDY5OTI5NmUsIDB4NDk2Y2ZmNmYsIDB4MWM5ZjQ5ODYsIDB4ZGZlMmVkMDcsIDB4Yjg3MjQyZDEsIDB4MTlkZTdlYWUsIDB4MDUzZTU2MWEsIDB4MTVhZDZmOGMsCisweDY2NjI2YzFjLCAweDcxNTRjMjRjLCAweGVhMDgyYjJhLCAweDkzZWIyOTM5LCAweDE3ZGNiMGYwLCAweDU4ZDRmMmFlLCAweDllYTI5NGZiLCAweDUyY2Y1NjRjLAorMHg5ODgzZmU2NiwgMHgyZWM0MDU4MSwgMHg3NjM5NTNjMywgMHgwMWQ2NjkyZSwgMHhkM2EwYzEwOCwgMHhhMWU3MTYwZSwgMHhlNGYyZGZhNiwgMHg2OTNlZDI4NSwKKzB4NzQ5MDQ2OTgsIDB4NGMyYjBlZGQsIDB4NGY3NTc2NTYsIDB4NWQzOTMzNzgsIDB4YTEzMjIzNGYsIDB4M2QzMjFjNWQsIDB4YzNmNWUxOTQsIDB4NGIyNjkzMDEsCisweGM3OWYwMjJmLCAweDNjOTk3ZTdlLCAweDVlNGY5NTA0LCAweDNmZmFmYmJkLCAweDc2ZjdhZDBlLCAweDI5NjY5M2Y0LCAweDNkMWZjZTZmLCAweGM2MWU0NWJlLAorMHhkM2I1YWIzNCwgMHhmNzJiZjliNywgMHgxYjA0MzRjMCwgMHg0ZTcyYjU2NywgMHg1NTkyYTMzZCwgMHhiNTIyOTMwMSwgMHhjZmQyYTg3ZiwgMHg2MGFlYjc2NywKKzB4MTgxNDM4NmIsIDB4MzBiY2MzM2QsIDB4MzhhMGMwN2QsIDB4ZmQxNjA2ZjIsIDB4YzM2MzUxOWIsIDB4NTg5ZGQzOTAsIDB4NTQ3OWY4ZTYsIDB4MWNiOGQ2NDcsCisweDk3ZmQ2MWE5LCAweGVhNzc1OWY0LCAweDJkNTc1MzlkLCAweDU2OWE1OGNmLCAweGU4NGU2M2FkLCAweDQ2MmUxYjc4LCAweDY1ODBmODdlLCAweGYzODE3OTE0LAorMHg5MWRhNTVmNCwgMHg0MGEyMzBmMywgMHhkMTk4OGYzNSwgMHhiNmUzMThkMiwgMHgzZmZhNTBiYywgMHgzZDQwZjAyMSwgMHhjM2MwYmRhZSwgMHg0OTU4YzI0YywKKzB4NTE4ZjM2YjIsIDB4ODRiMWQzNzAsIDB4MGZlZGNlODMsIDB4ODc4ZGRhZGEsIDB4ZjJhMjc5YzcsIDB4OTRlMDFiZTgsIDB4OTA3MTZmNGIsIDB4OTU0YjhhYTMKK307CitzdGF0aWMgY29uc3QgdTMyIHM4WzI1Nl0gPSB7CisweGUyMTYzMDBkLCAweGJiZGRmZmZjLCAweGE3ZWJkYWJkLCAweDM1NjQ4MDk1LCAweDc3ODlmOGI3LCAweGU2YzExMjFiLCAweDBlMjQxNjAwLCAweDA1MmNlOGI1LAorMHgxMWE5Y2ZiMCwgMHhlNTk1MmYxMSwgMHhlY2U3OTkwYSwgMHg5Mzg2ZDE3NCwgMHgyYTQyOTMxYywgMHg3NmUzODExMSwgMHhiMTJkZWYzYSwgMHgzN2RkZGRmYywKKzB4ZGU5YWRlYjEsIDB4MGEwY2MzMmMsIDB4YmUxOTcwMjksIDB4ODRhMDA5NDAsIDB4YmIyNDNhMGYsIDB4YjRkMTM3Y2YsIDB4YjQ0ZTc5ZjAsIDB4MDQ5ZWVkZmQsCisweDBiMTVhMTVkLCAweDQ4MGQzMTY4LCAweDhiYmJkZTVhLCAweDY2OWRlZDQyLCAweGM3ZWNlODMxLCAweDNmOGY5NWU3LCAweDcyZGYxOTFiLCAweDc1ODAzMzBkLAorMHg5NDA3NDI1MSwgMHg1YzdkY2RmYSwgMHhhYmJlNmQ2MywgMHhhYTQwMjE2NCwgMHhiMzAxZDQwYSwgMHgwMmU3ZDFjYSwgMHg1MzU3MWRhZSwgMHg3YTMxODJhMiwKKzB4MTJhOGRkZWMsIDB4ZmRhYTMzNWQsIDB4MTc2ZjQzZTgsIDB4NzFmYjQ2ZDQsIDB4MzgxMjkwMjIsIDB4Y2U5NDlhZDQsIDB4Yjg0NzY5YWQsIDB4OTY1YmQ4NjIsCisweDgyZjNkMDU1LCAweDY2ZmI5NzY3LCAweDE1YjgwYjRlLCAweDFkNWI0N2EwLCAweDRjZmRlMDZmLCAweGMyOGVjNGI4LCAweDU3ZTg3MjZlLCAweDY0N2E3OGZjLAorMHg5OTg2NWQ0NCwgMHg2MDhiZDU5MywgMHg2YzIwMGUwMywgMHgzOWRjNWZmNiwgMHg1ZDBiMDBhMywgMHhhZTYzYWZmMiwgMHg3ZThiZDYzMiwgMHg3MDEwOGMwYywKKzB4YmJkMzUwNDksIDB4Mjk5OGRmMDQsIDB4OTgwY2Y0MmEsIDB4OWI2ZGY0OTEsIDB4OWU3ZWRkNTMsIDB4MDY5MTg1NDgsIDB4NThjYjdlMDcsIDB4M2I3NGVmMmUsCisweDUyMmZmZmIxLCAweGQyNDcwOGNjLCAweDFjN2UyN2NkLCAweGE0ZWIyMTViLCAweDNjZjFkMmUyLCAweDE5YjQ3YTM4LCAweDQyNGY3NjE4LCAweDM1ODU2MDM5LAorMHg5ZDE3ZGVlNywgMHgyN2ViMzVlNiwgMHhjOWFmZjY3YiwgMHgzNmJhZjViOCwgMHgwOWM0NjdjZCwgMHhjMTg5MTBiMSwgMHhlMTFkYmY3YiwgMHgwNmNkMWFmOCwKKzB4NzE3MGM2MDgsIDB4MmQ1ZTMzNTQsIDB4ZDRkZTQ5NWEsIDB4NjRjNmQwMDYsIDB4YmNjMGM2MmMsIDB4M2RkMDBkYjMsIDB4NzA4ZjhmMzQsIDB4NzdkNTFiNDIsCisweDI2NGY2MjBmLCAweDI0YjhkMmJmLCAweDE1YzFiNzllLCAweDQ2YTUyNTY0LCAweGY4ZDdlNTRlLCAweDNlMzc4MTYwLCAweDc4OTVjZGE1LCAweDg1OWMxNWE1LAorMHhlNjQ1OTc4OCwgMHhjMzdiYzc1ZiwgMHhkYjA3YmEwYywgMHgwNjc2YTNhYiwgMHg3ZjIyOWIxZSwgMHgzMTg0MmU3YiwgMHgyNDI1OWZkNywgMHhmOGJlZjQ3MiwKKzB4ODM1ZmZjYjgsIDB4NmRmNGMxZjIsIDB4OTZmNWIxOTUsIDB4ZmQwYWYwZmMsIDB4YjBmZTEzNGMsIDB4ZTI1MDZkM2QsIDB4NGY5YjEyZWEsIDB4ZjIxNWYyMjUsCisweGEyMjM3MzZmLCAweDlmYjRjNDI4LCAweDI1ZDA0OTc5LCAweDM0YzcxM2Y4LCAweGM0NjE4MTg3LCAweGVhN2E2ZTk4LCAweDdjZDE2ZWZjLCAweDE0MzY4NzZjLAorMHhmMTU0NDEwNywgMHhiZWRlZWUxNCwgMHg1NmU5YWYyNywgMHhhMDRhYTQ0MSwgMHgzY2Y3Yzg5OSwgMHg5MmVjYmFlNiwgMHhkZDY3MDE2ZCwgMHgxNTE2ODJlYiwKKzB4YTg0MmVlZGYsIDB4ZmRiYTYwYjQsIDB4ZjE5MDdiNzUsIDB4MjBlMzAzMGYsIDB4MjRkOGMyOWUsIDB4ZTEzOTY3M2IsIDB4ZWZhNjNmYjgsIDB4NzE4NzMwNTQsCisweGI2ZjJjZjNiLCAweDlmMzI2NDQyLCAweGNiMTVhNGNjLCAweGIwMWE0NTA0LCAweGYxZTQ3ZDhkLCAweDg0NGExYmU1LCAweGJhZTdkZmRjLCAweDQyY2JkYTcwLAorMHhjZDdkYWUwYSwgMHg1N2U4NWI3YSwgMHhkNTNmNWFmNiwgMHgyMGNmNGQ4YywgMHhjZWE0ZDQyOCwgMHg3OWQxMzBhNCwgMHgzNDg2ZWJmYiwgMHgzM2QzY2RkYywKKzB4Nzc4NTNiNTMsIDB4MzdlZmZjYjUsIDB4YzUwNjg3NzgsIDB4ZTU4MGIzZTYsIDB4NGU2OGI4ZjQsIDB4YzVjOGIzN2UsIDB4MGQ4MDllYTIsIDB4Mzk4ZmViN2MsCisweDEzMmE0Zjk0LCAweDQzYjc5NTBlLCAweDJmZWU3ZDFjLCAweDIyMzYxM2JkLCAweGRkMDZjYWEyLCAweDM3ZGY5MzJiLCAweGM0MjQ4Mjg5LCAweGFjZjNlYmMzLAorMHg1NzE1ZjZiNywgMHhlZjM0NzhkZCwgMHhmMjY3NjE2ZiwgMHhjMTQ4Y2JlNCwgMHg5MDUyODE1ZSwgMHg1ZTQxMGZhYiwgMHhiNDhhMjQ2NSwgMHgyZWRhN2ZhNCwKKzB4ZTg3YjQwZTQsIDB4ZTk4ZWEwODQsIDB4NTg4OWU5ZTEsIDB4ZWZkMzkwZmMsIDB4ZGQwN2QzNWIsIDB4ZGI0ODU2OTQsIDB4MzhkN2U1YjIsIDB4NTc3MjAxMDEsCisweDczMGVkZWJjLCAweDViNjQzMTEzLCAweDk0OTE3ZTRmLCAweDUwM2MyZmJhLCAweDY0NmYxMjgyLCAweDc1MjNkMjRhLCAweGUwNzc5Njk1LCAweGY5YzE3YThmLAorMHg3YTViMjEyMSwgMHhkMTg3Yjg5NiwgMHgyOTI2M2E0ZCwgMHhiYTUxMGNkZiwgMHg4MWY0N2M5ZiwgMHhhZDExNjNlZCwgMHhlYTdiNTk2NSwgMHgxYTAwNzI2ZSwKKzB4MTE0MDMwOTIsIDB4MDBkYTZkNzcsIDB4NGEwY2RkNjEsIDB4YWQxZjQ2MDMsIDB4NjA1YmRmYjAsIDB4OWVlZGMzNjQsIDB4MjJlYmU2YTgsIDB4Y2VlN2QyOGEsCisweGEwZTczNmEwLCAweDU1NjRhNmI5LCAweDEwODUzMjA5LCAweGM3ZWI4ZjM3LCAweDJkZTcwNWNhLCAweDg5NTE1NzBmLCAweGRmMDk4MjJiLCAweGJkNjkxYTZjLAorMHhhYTEyZTRmMiwgMHg4NzQ1MWMwZiwgMHhlMGY2YTI3YSwgMHgzYWRhNDgxOSwgMHg0Y2YxNzY0ZiwgMHgwZDc3MWMyYiwgMHg2N2NkYjE1NiwgMHgzNTBkODM4NCwKKzB4NTkzOGZhMGYsIDB4NDIzOTllZjMsIDB4MzY5OTdiMDcsIDB4MGU4NDA5M2QsIDB4NGFhOTNlNjEsIDB4ODM2MGQ4N2IsIDB4MWZhOThiMGMsIDB4MTE0OTM4MmMsCisweGU5NzYyNWE1LCAweDA2MTRkMWI3LCAweDBlMjUyNDRiLCAweDBjNzY4MzQ3LCAweDU4OWU4ZDgyLCAweDBkMjA1OWQxLCAweGE0NjZiYjFlLCAweGY4ZGEwYTgyLAorMHgwNGYxOTEzMCwgMHhiYTZlNGVjMCwgMHg5OTI2NTE2NCwgMHgxZWU3MjMwZCwgMHg1MGIyYWQ4MCwgMHhlYWVlNjgwMSwgMHg4ZGIyYTI4MywgMHhlYThiZjU5ZQorfTsKKworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorCisvKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMgb2YgQ0FTVDUuICovCitleHRlcm4gdm9pZCBfZ2NyeV9jYXN0NV9hbWQ2NF9lbmNyeXB0X2Jsb2NrKENBU1Q1X2NvbnRleHQgKmMsIGJ5dGUgKm91dGJ1ZiwKKwkJCQkJICAgIGNvbnN0IGJ5dGUgKmluYnVmKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYW1kNjRfZGVjcnlwdF9ibG9jayhDQVNUNV9jb250ZXh0ICpjLCBieXRlICpvdXRidWYsCisJCQkJCSAgICBjb25zdCBieXRlICppbmJ1Zik7CisKKy8qIFRoZXNlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBwcm9jZXNzIGZvdXIgYmxvY2tzIGluIHBhcmFsbGVsLiAqLworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYW1kNjRfY3RyX2VuYyhDQVNUNV9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkgICAgICBjb25zdCBieXRlICppbiwgYnl0ZSAqY3RyKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYW1kNjRfY2JjX2RlYyhDQVNUNV9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkgICAgICBjb25zdCBieXRlICppbiwgYnl0ZSAqaXYpOworCitleHRlcm4gdm9pZCBfZ2NyeV9jYXN0NV9hbWQ2NF9jZmJfZGVjKENBU1Q1X2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0LAorCQkJCSAgICAgIGNvbnN0IGJ5dGUgKmluLCBieXRlICppdik7CisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0X2Jsb2NrIChDQVNUNV9jb250ZXh0ICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBfZ2NyeV9jYXN0NV9hbWQ2NF9lbmNyeXB0X2Jsb2NrIChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKK30KKworc3RhdGljIHZvaWQKK2RvX2RlY3J5cHRfYmxvY2sgKENBU1Q1X2NvbnRleHQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIF9nY3J5X2Nhc3Q1X2FtZDY0X2RlY3J5cHRfYmxvY2sgKGNvbnRleHQsIG91dGJ1ZiwgaW5idWYpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitlbmNyeXB0X2Jsb2NrICh2b2lkICpjb250ZXh0ICwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQ0FTVDVfY29udGV4dCAqYyA9IChDQVNUNV9jb250ZXh0ICopIGNvbnRleHQ7CisgIGRvX2VuY3J5cHRfYmxvY2sgKGMsIG91dGJ1ZiwgaW5idWYpOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDIqOCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIENBU1Q1X2NvbnRleHQgKmMgPSAoQ0FTVDVfY29udGV4dCAqKSBjb250ZXh0OworICBfZ2NyeV9jYXN0NV9hbWQ2NF9kZWNyeXB0X2Jsb2NrIChjLCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgyKjgpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9BUk1fQVNNKQorCisvKiBBUk0gYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIG9mIENBU1Q1LiAqLworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYXJtX2VuY3J5cHRfYmxvY2soQ0FTVDVfY29udGV4dCAqYywgYnl0ZSAqb3V0YnVmLAorCQkJCQkgICAgY29uc3QgYnl0ZSAqaW5idWYpOworCitleHRlcm4gdm9pZCBfZ2NyeV9jYXN0NV9hcm1fZGVjcnlwdF9ibG9jayhDQVNUNV9jb250ZXh0ICpjLCBieXRlICpvdXRidWYsCisJCQkJCSAgICBjb25zdCBieXRlICppbmJ1Zik7CisKKy8qIFRoZXNlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBwcm9jZXNzIHR3byBibG9ja3MgaW4gcGFyYWxsZWwuICovCitleHRlcm4gdm9pZCBfZ2NyeV9jYXN0NV9hcm1fY3RyX2VuYyhDQVNUNV9jb250ZXh0ICpjdHgsIGJ5dGUgKm91dCwKKwkJCQkgICAgICBjb25zdCBieXRlICppbiwgYnl0ZSAqY3RyKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYXJtX2NiY19kZWMoQ0FTVDVfY29udGV4dCAqY3R4LCBieXRlICpvdXQsCisJCQkJICAgICAgY29uc3QgYnl0ZSAqaW4sIGJ5dGUgKml2KTsKKworZXh0ZXJuIHZvaWQgX2djcnlfY2FzdDVfYXJtX2NmYl9kZWMoQ0FTVDVfY29udGV4dCAqY3R4LCBieXRlICpvdXQsCisJCQkJICAgICAgY29uc3QgYnl0ZSAqaW4sIGJ5dGUgKml2KTsKKworc3RhdGljIHZvaWQKK2RvX2VuY3J5cHRfYmxvY2sgKENBU1Q1X2NvbnRleHQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIF9nY3J5X2Nhc3Q1X2FybV9lbmNyeXB0X2Jsb2NrIChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKK30KKworc3RhdGljIHZvaWQKK2RvX2RlY3J5cHRfYmxvY2sgKENBU1Q1X2NvbnRleHQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIF9nY3J5X2Nhc3Q1X2FybV9kZWNyeXB0X2Jsb2NrIChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZW5jcnlwdF9ibG9jayAodm9pZCAqY29udGV4dCAsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIENBU1Q1X2NvbnRleHQgKmMgPSAoQ0FTVDVfY29udGV4dCAqKSBjb250ZXh0OworICBkb19lbmNyeXB0X2Jsb2NrIChjLCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgxMCo0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZGVjcnlwdF9ibG9jayAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQ0FTVDVfY29udGV4dCAqYyA9IChDQVNUNV9jb250ZXh0ICopIGNvbnRleHQ7CisgIGRvX2RlY3J5cHRfYmxvY2sgKGMsIG91dGJ1ZiwgaW5idWYpOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDEwKjQpOworfQorCisjZWxzZSAvKlVTRV9BUk1fQVNNKi8KKworI2RlZmluZSBGMShELG0scikgICggIChJID0gKChtKSArIChEKSkpLCAoST1yb2woSSwocikpKSwgICBcCisgICAgKCgoczFbSSA+PiAyNF0gXiBzMlsoST4+MTYpJjB4ZmZdKSAtIHMzWyhJPj44KSYweGZmXSkgKyBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYyKEQsbSxyKSAgKCAgKEkgPSAoKG0pIF4gKEQpKSksIChJPXJvbChJLChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKKyNkZWZpbmUgRjMoRCxtLHIpICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sKEksKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkgKQorCitzdGF0aWMgdm9pZAorZG9fZW5jcnlwdF9ibG9jayggQ0FTVDVfY29udGV4dCAqYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZiApCit7CisgICAgdTMyIGwsIHIsIHQ7CisgICAgdTMyIEk7ICAgLyogdXNlZCBieSB0aGUgRnggbWFjcm9zICovCisgICAgdTMyICpLbTsKKyAgICBieXRlICpLcjsKKworICAgIEttID0gYy0+S207CisgICAgS3IgPSBjLT5LcjsKKworICAgIC8qIChMMCxSMCkgPC0tIChtMS4uLm02NCkuCShTcGxpdCB0aGUgcGxhaW50ZXh0IGludG8gbGVmdCBhbmQKKyAgICAgKiByaWdodCAzMi1iaXQgaGFsdmVzIEwwID0gbTEuLi5tMzIgYW5kIFIwID0gbTMzLi4ubTY0LikKKyAgICAgKi8KKyAgICBsID0gYnVmX2dldF9iZTMyKGluYnVmICsgMCk7CisgICAgciA9IGJ1Zl9nZXRfYmUzMihpbmJ1ZiArIDQpOworCisgICAgLyogKDE2IHJvdW5kcykgZm9yIGkgZnJvbSAxIHRvIDE2LCBjb21wdXRlIExpIGFuZCBSaSBhcyBmb2xsb3dzOgorICAgICAqCUxpID0gUmktMTsKKyAgICAgKglSaSA9IExpLTEgXiBmKFJpLTEsS21pLEtyaSksIHdoZXJlIGYgaXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuMgorICAgICAqIFJvdW5kcyAxLCA0LCA3LCAxMCwgMTMsIGFuZCAxNiB1c2UgZiBmdW5jdGlvbiBUeXBlIDEuCisgICAgICogUm91bmRzIDIsIDUsIDgsIDExLCBhbmQgMTQgdXNlIGYgZnVuY3Rpb24gVHlwZSAyLgorICAgICAqIFJvdW5kcyAzLCA2LCA5LCAxMiwgYW5kIDE1IHVzZSBmIGZ1bmN0aW9uIFR5cGUgMy4KKyAgICAgKi8KKworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsgMF0sIEtyWyAwXSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyAxXSwgS3JbIDFdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bIDJdLCBLclsgMl0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsgM10sIEtyWyAzXSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyA0XSwgS3JbIDRdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bIDVdLCBLclsgNV0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsgNl0sIEtyWyA2XSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyA3XSwgS3JbIDddKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bIDhdLCBLclsgOF0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsgOV0sIEtyWyA5XSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEwXSwgS3JbMTBdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMTFdLCBLclsxMV0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsxMl0sIEtyWzEyXSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEzXSwgS3JbMTNdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMTRdLCBLclsxNF0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVsxNV0sIEtyWzE1XSk7CisKKyAgICAvKiBjMS4uLmM2NCA8LS0gKFIxNixMMTYpLgkoRXhjaGFuZ2UgZmluYWwgYmxvY2tzIEwxNiwgUjE2IGFuZAorICAgICAqCWNvbmNhdGVuYXRlIHRvIGZvcm0gdGhlIGNpcGhlcnRleHQuKSAqLworICAgIGJ1Zl9wdXRfYmUzMihvdXRidWYgKyAwLCByKTsKKyAgICBidWZfcHV0X2JlMzIob3V0YnVmICsgNCwgbCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2VuY3J5cHRfYmxvY2sgKHZvaWQgKmNvbnRleHQgLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBDQVNUNV9jb250ZXh0ICpjID0gKENBU1Q1X2NvbnRleHQgKikgY29udGV4dDsKKyAgZG9fZW5jcnlwdF9ibG9jayAoYywgb3V0YnVmLCBpbmJ1Zik7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMjArNCpzaXplb2Yodm9pZCopKTsKK30KKworCitzdGF0aWMgdm9pZAorZG9fZGVjcnlwdF9ibG9jayAoQ0FTVDVfY29udGV4dCAqYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZiApCit7CisgICAgdTMyIGwsIHIsIHQ7CisgICAgdTMyIEk7CisgICAgdTMyICpLbTsKKyAgICBieXRlICpLcjsKKworICAgIEttID0gYy0+S207CisgICAgS3IgPSBjLT5LcjsKKworICAgIGwgPSBidWZfZ2V0X2JlMzIoaW5idWYgKyAwKTsKKyAgICByID0gYnVmX2dldF9iZTMyKGluYnVmICsgNCk7CisKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMTVdLCBLclsxNV0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsxNF0sIEtyWzE0XSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEzXSwgS3JbMTNdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMTJdLCBLclsxMl0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsxMV0sIEtyWzExXSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEwXSwgS3JbMTBdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bIDldLCBLclsgOV0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsgOF0sIEtyWyA4XSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyA3XSwgS3JbIDddKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bIDZdLCBLclsgNl0pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsgNV0sIEtyWyA1XSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyA0XSwgS3JbIDRdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bIDNdLCBLclsgM10pOworICAgIHQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsgMl0sIEtyWyAyXSk7CisgICAgdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWyAxXSwgS3JbIDFdKTsKKyAgICB0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bIDBdLCBLclsgMF0pOworCisgICAgYnVmX3B1dF9iZTMyKG91dGJ1ZiArIDAsIHIpOworICAgIGJ1Zl9wdXRfYmUzMihvdXRidWYgKyA0LCBsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZGVjcnlwdF9ibG9jayAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgQ0FTVDVfY29udGV4dCAqYyA9IChDQVNUNV9jb250ZXh0ICopIGNvbnRleHQ7CisgIGRvX2RlY3J5cHRfYmxvY2sgKGMsIG91dGJ1ZiwgaW5idWYpOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDIwKzQqc2l6ZW9mKHZvaWQqKSk7Cit9CisKKyNlbmRpZiAvKiFVU0VfQVJNX0FTTSovCisKKworLyogQnVsayBlbmNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDVFIgbW9kZS4gIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgaW50ZW5kZWQgZm9yIHRoZSBidWxrIGVuY3J5cHRpb24gZmVhdHVyZSBvZiBjaXBoZXIuYy4gIENUUiBpcyBleHBlY3RlZCB0byBiZQorICAgb2Ygc2l6ZSBDQVNUNV9CTE9DS1NJWkUuICovCit2b2lkCitfZ2NyeV9jYXN0NV9jdHJfZW5jKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwgdm9pZCAqb3V0YnVmX2FyZywKKwkJICAgIGNvbnN0IHZvaWQgKmluYnVmX2FyZywgc2l6ZV90IG5ibG9ja3MpCit7CisgIENBU1Q1X2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBjaGFyIHRtcGJ1ZltDQVNUNV9CTE9DS1NJWkVdOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9ICgyMCArIDQgKiBzaXplb2Yodm9pZCopKSArIDIgKiBDQVNUNV9CTE9DS1NJWkU7CisKKyAgaW50IGk7CisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIHsKKyAgICBpZiAobmJsb2NrcyA+PSA0KQorICAgICAgYnVybl9zdGFja19kZXB0aCArPSA4ICogc2l6ZW9mKHZvaWQqKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA0IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA0KQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hbWQ2NF9jdHJfZW5jKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgY3RyKTsKKworICAgICAgICBuYmxvY2tzIC09IDQ7CisgICAgICAgIG91dGJ1ZiArPSA0ICogQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gNCAqIENBU1Q1X0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgLyogVE9ETzogdXNlIGNhY2hpbmcgaW5zdGVhZD8gKi8KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgeworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAyIGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSAyKQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hcm1fY3RyX2VuYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGN0cik7CisKKyAgICAgICAgbmJsb2NrcyAtPSAyOworICAgICAgICBvdXRidWYgKz0gMiAqIENBU1Q1X0JMT0NLU0laRTsKKyAgICAgICAgaW5idWYgICs9IDIgKiBDQVNUNV9CTE9DS1NJWkU7CisgICAgICB9CisKKyAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgIC8qIFRPRE86IHVzZSBjYWNoaW5nIGluc3RlYWQ/ICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIEVuY3J5cHQgdGhlIGNvdW50ZXIuICovCisgICAgICBkb19lbmNyeXB0X2Jsb2NrKGN0eCwgdG1wYnVmLCBjdHIpOworICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBlbmNyeXB0ZWQgY291bnRlciBhbmQgc3RvcmUgaW4gb3V0cHV0LiAgKi8KKyAgICAgIGJ1Zl94b3Iob3V0YnVmLCB0bXBidWYsIGluYnVmLCBDQVNUNV9CTE9DS1NJWkUpOworICAgICAgb3V0YnVmICs9IENBU1Q1X0JMT0NLU0laRTsKKyAgICAgIGluYnVmICArPSBDQVNUNV9CTE9DS1NJWkU7CisgICAgICAvKiBJbmNyZW1lbnQgdGhlIGNvdW50ZXIuICAqLworICAgICAgZm9yIChpID0gQ0FTVDVfQkxPQ0tTSVpFOyBpID4gMDsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgY3RyW2ktMV0rKzsKKyAgICAgICAgICBpZiAoY3RyW2ktMV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICB3aXBlbWVtb3J5KHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZikpOworICBfZ2NyeV9idXJuX3N0YWNrKGJ1cm5fc3RhY2tfZGVwdGgpOworfQorCisKKy8qIEJ1bGsgZGVjcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ0JDIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICovCit2b2lkCitfZ2NyeV9jYXN0NV9jYmNfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LCB2b2lkICpvdXRidWZfYXJnLAorCQkgICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLCBzaXplX3QgbmJsb2NrcykKK3sKKyAgQ0FTVDVfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgY2hhciAqb3V0YnVmID0gb3V0YnVmX2FyZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIHVuc2lnbmVkIGNoYXIgc2F2ZWJ1ZltDQVNUNV9CTE9DS1NJWkVdOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9ICgyMCArIDQgKiBzaXplb2Yodm9pZCopKSArIDIgKiBDQVNUNV9CTE9DS1NJWkU7CisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIHsKKyAgICBpZiAobmJsb2NrcyA+PSA0KQorICAgICAgYnVybl9zdGFja19kZXB0aCArPSA4ICogc2l6ZW9mKHZvaWQqKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA0IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA0KQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hbWQ2NF9jYmNfZGVjKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgaXYpOworCisgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgb3V0YnVmICs9IDQgKiBDQVNUNV9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICArPSA0ICogQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgeworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAyIGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSAyKQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hcm1fY2JjX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDI7CisgICAgICAgIG91dGJ1ZiArPSAyICogQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gMiAqIENBU1Q1X0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIElOQlVGIGlzIG5lZWRlZCBsYXRlciBhbmQgaXQgbWF5IGJlIGlkZW50aWNhbCB0byBPVVRCVUYsIHNvIHN0b3JlCisgICAgICAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCB0byBTQVZFQlVGLiAgKi8KKyAgICAgIGRvX2RlY3J5cHRfYmxvY2sgKGN0eCwgc2F2ZWJ1ZiwgaW5idWYpOworCisgICAgICBidWZfeG9yX25fY29weV8yKG91dGJ1Ziwgc2F2ZWJ1ZiwgaXYsIGluYnVmLCBDQVNUNV9CTE9DS1NJWkUpOworICAgICAgaW5idWYgKz0gQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgb3V0YnVmICs9IENBU1Q1X0JMT0NLU0laRTsKKyAgICB9CisKKyAgd2lwZW1lbW9yeShzYXZlYnVmLCBzaXplb2Yoc2F2ZWJ1ZikpOworICBfZ2NyeV9idXJuX3N0YWNrKGJ1cm5fc3RhY2tfZGVwdGgpOworfQorCisvKiBCdWxrIGRlY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENGQiBtb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mIGNpcGhlci5jLiAqLwordm9pZAorX2djcnlfY2FzdDVfY2ZiX2RlYyh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwgdm9pZCAqb3V0YnVmX2FyZywKKwkJICAgIGNvbnN0IHZvaWQgKmluYnVmX2FyZywgc2l6ZV90IG5ibG9ja3MpCit7CisgIENBU1Q1X2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9ICgyMCArIDQgKiBzaXplb2Yodm9pZCopKSArIDIgKiBDQVNUNV9CTE9DS1NJWkU7CisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIHsKKyAgICBpZiAobmJsb2NrcyA+PSA0KQorICAgICAgYnVybl9zdGFja19kZXB0aCArPSA4ICogc2l6ZW9mKHZvaWQqKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA0IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA0KQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hbWQ2NF9jZmJfZGVjKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgaXYpOworCisgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgb3V0YnVmICs9IDQgKiBDQVNUNV9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICArPSA0ICogQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgeworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAyIGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSAyKQorICAgICAgeworICAgICAgICBfZ2NyeV9jYXN0NV9hcm1fY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDI7CisgICAgICAgIG91dGJ1ZiArPSAyICogQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiAgKz0gMiAqIENBU1Q1X0JMT0NLU0laRTsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIGRvX2VuY3J5cHRfYmxvY2soY3R4LCBpdiwgaXYpOworICAgICAgYnVmX3hvcl9uX2NvcHkob3V0YnVmLCBpdiwgaW5idWYsIENBU1Q1X0JMT0NLU0laRSk7CisgICAgICBvdXRidWYgKz0gQ0FTVDVfQkxPQ0tTSVpFOworICAgICAgaW5idWYgICs9IENBU1Q1X0JMT0NLU0laRTsKKyAgICB9CisKKyAgX2djcnlfYnVybl9zdGFjayhidXJuX3N0YWNrX2RlcHRoKTsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIENBU1Q1LUNUUiwgdGVzdHMgSVYgaW5jcmVtZW50IG9mIGJ1bGsgQ1RSCisgICBlbmNyeXB0aW9uLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9jdHIgKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gNCsxOworICBjb25zdCBpbnQgYmxvY2tzaXplID0gQ0FTVDVfQkxPQ0tTSVpFOworICBjb25zdCBpbnQgY29udGV4dF9zaXplID0gc2l6ZW9mKENBU1Q1X2NvbnRleHQpOworCisgIHJldHVybiBfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyKCJDQVNUNSIsICZjYXN0X3NldGtleSwKKyAgICAgICAgICAgJmVuY3J5cHRfYmxvY2ssICZfZ2NyeV9jYXN0NV9jdHJfZW5jLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIENBU1Q1LUNCQywgdGVzdHMgYnVsayBDQkMgZGVjcnlwdGlvbi4KKyAgIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorc2VsZnRlc3RfY2JjICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDQrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IENBU1Q1X0JMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihDQVNUNV9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2NiYygiQ0FTVDUiLCAmY2FzdF9zZXRrZXksCisgICAgICAgICAgICZlbmNyeXB0X2Jsb2NrLCAmX2djcnlfY2FzdDVfY2JjX2RlYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBDQVNUNS1DRkIsIHRlc3RzIGJ1bGsgQ0JDIGRlY3J5cHRpb24uCisgICBSZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3NlbGZ0ZXN0X2NmYiAodm9pZCkKK3sKKyAgY29uc3QgaW50IG5ibG9ja3MgPSA0KzI7CisgIGNvbnN0IGludCBibG9ja3NpemUgPSBDQVNUNV9CTE9DS1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoQ0FTVDVfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jZmIoIkNBU1Q1IiwgJmNhc3Rfc2V0a2V5LAorICAgICAgICAgICAmZW5jcnlwdF9ibG9jaywgJl9nY3J5X2Nhc3Q1X2NmYl9kZWMsIG5ibG9ja3MsIGJsb2Nrc2l6ZSwKKwkgICBjb250ZXh0X3NpemUpOworfQorCisKK3N0YXRpYyBjb25zdCBjaGFyKgorc2VsZnRlc3Qodm9pZCkKK3sKKyAgICBDQVNUNV9jb250ZXh0IGM7CisgICAgc3RhdGljIGNvbnN0IGJ5dGUga2V5WzE2XSA9CisgICAgICAgICAgICAgICAgICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwKKwkJICAgICAgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5QSAgfTsKKyAgICBzdGF0aWMgY29uc3QgYnl0ZSBwbGFpbls4XSA9CisgICAgICAgICAgICAgICAgICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiB9OworICAgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcls4XSA9CisgICAgICAgICAgICAgICAgICAgIHsgMHgyMywgMHg4QiwgMHg0RiwgMHhFNSwgMHg4NCwgMHg3RSwgMHg0NCwgMHhCMiB9OworICAgIGJ5dGUgYnVmZmVyWzhdOworICAgIGNvbnN0IGNoYXIgKnI7CisKKyAgICBjYXN0X3NldGtleSggJmMsIGtleSwgMTYgKTsKKyAgICBlbmNyeXB0X2Jsb2NrKCAmYywgYnVmZmVyLCBwbGFpbiApOworICAgIGlmKCBtZW1jbXAoIGJ1ZmZlciwgY2lwaGVyLCA4ICkgKQorCXJldHVybiAiMSI7CisgICAgZGVjcnlwdF9ibG9jayggJmMsIGJ1ZmZlciwgYnVmZmVyICk7CisgICAgaWYoIG1lbWNtcCggYnVmZmVyLCBwbGFpbiwgOCApICkKKwlyZXR1cm4gIjIiOworCisjaWYgMCAvKiBmdWxsIG1haW50ZW5hbmNlIHRlc3QgKi8KKyAgICB7CisJaW50IGk7CisJYnl0ZSBhMFsxNl0gPSB7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHgxMiwweDM0LDB4NTYsMHg3OCwKKwkJCTB4MjMsMHg0NSwweDY3LDB4ODksMHgzNCwweDU2LDB4NzgsMHg5QSB9OworCWJ5dGUgYjBbMTZdID0geyAweDAxLDB4MjMsMHg0NSwweDY3LDB4MTIsMHgzNCwweDU2LDB4NzgsCisJCQkweDIzLDB4NDUsMHg2NywweDg5LDB4MzQsMHg1NiwweDc4LDB4OUEgfTsKKwlieXRlIGExWzE2XSA9IHsgMHhFRSwweEE5LDB4RDAsMHhBMiwweDQ5LDB4RkQsMHgzQiwweEE2LAorCQkJMHhCMywweDQzLDB4NkYsMHhCOCwweDlELDB4NkQsMHhDQSwweDkyIH07CisJYnl0ZSBiMVsxNl0gPSB7IDB4QjIsMHhDOSwweDVFLDB4QjAsMHgwQywweDMxLDB4QUQsMHg3MSwKKwkJCTB4ODAsMHhBQywweDA1LDB4QjgsMHhFOCwweDNELDB4NjksMHg2RSB9OworCisJZm9yKGk9MDsgaSA8IDEwMDAwMDA7IGkrKyApIHsKKwkgICAgY2FzdF9zZXRrZXkoICZjLCBiMCwgMTYgKTsKKwkgICAgZW5jcnlwdF9ibG9jayggJmMsIGEwLCBhMCApOworCSAgICBlbmNyeXB0X2Jsb2NrKCAmYywgYTArOCwgYTArOCApOworCSAgICBjYXN0X3NldGtleSggJmMsIGEwLCAxNiApOworCSAgICBlbmNyeXB0X2Jsb2NrKCAmYywgYjAsIGIwICk7CisJICAgIGVuY3J5cHRfYmxvY2soICZjLCBiMCs4LCBiMCs4ICk7CisJfQorCWlmKCBtZW1jbXAoIGEwLCBhMSwgMTYgKSB8fCBtZW1jbXAoIGIwLCBiMSwgMTYgKSApCisJICAgIHJldHVybiAiMyI7CisKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggKHIgPSBzZWxmdGVzdF9jYmMgKCkpICkKKyAgICAgIHJldHVybiByOworCisgICAgaWYgKCAociA9IHNlbGZ0ZXN0X2NmYiAoKSkgKQorICAgICAgcmV0dXJuIHI7CisKKyAgICBpZiAoIChyID0gc2VsZnRlc3RfY3RyICgpKSApCisgICAgICByZXR1cm4gcjsKKworICAgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkCitrZXlfc2NoZWR1bGUoIHUzMiAqeCwgdTMyICp6LCB1MzIgKmsgKQoreworCisjZGVmaW5lIHhpKGkpICAgKCh4WyhpKS80XSA+PiAoOCooMy0oKGkpJTQpKSkpICYgMHhmZikKKyNkZWZpbmUgemkoaSkgICAoKHpbKGkpLzRdID4+ICg4KigzLSgoaSklNCkpKSkgJiAweGZmKQorCisgICAgelswXSA9IHhbMF0gXiBzNVt4aSgxMyldXnM2W3hpKDE1KV1eczdbeGkoMTIpXV5zOFt4aSgxNCldXnM3W3hpKCA4KV07CisgICAgelsxXSA9IHhbMl0gXiBzNVt6aSggMCldXnM2W3ppKCAyKV1eczdbemkoIDEpXV5zOFt6aSggMyldXnM4W3hpKDEwKV07CisgICAgelsyXSA9IHhbM10gXiBzNVt6aSggNyldXnM2W3ppKCA2KV1eczdbemkoIDUpXV5zOFt6aSggNCldXnM1W3hpKCA5KV07CisgICAgelszXSA9IHhbMV0gXiBzNVt6aSgxMCldXnM2W3ppKCA5KV1eczdbemkoMTEpXV5zOFt6aSggOCldXnM2W3hpKDExKV07CisgICAga1swXSA9IHM1W3ppKCA4KV1eczZbemkoIDkpXV5zN1t6aSggNyldXnM4W3ppKCA2KV1eczVbemkoIDIpXTsKKyAgICBrWzFdID0gczVbemkoMTApXV5zNlt6aSgxMSldXnM3W3ppKCA1KV1eczhbemkoIDQpXV5zNlt6aSggNildOworICAgIGtbMl0gPSBzNVt6aSgxMildXnM2W3ppKDEzKV1eczdbemkoIDMpXV5zOFt6aSggMildXnM3W3ppKCA5KV07CisgICAga1szXSA9IHM1W3ppKDE0KV1eczZbemkoMTUpXV5zN1t6aSggMSldXnM4W3ppKCAwKV1eczhbemkoMTIpXTsKKworICAgIHhbMF0gPSB6WzJdIF4gczVbemkoIDUpXV5zNlt6aSggNyldXnM3W3ppKCA0KV1eczhbemkoIDYpXV5zN1t6aSggMCldOworICAgIHhbMV0gPSB6WzBdIF4gczVbeGkoIDApXV5zNlt4aSggMildXnM3W3hpKCAxKV1eczhbeGkoIDMpXV5zOFt6aSggMildOworICAgIHhbMl0gPSB6WzFdIF4gczVbeGkoIDcpXV5zNlt4aSggNildXnM3W3hpKCA1KV1eczhbeGkoIDQpXV5zNVt6aSggMSldOworICAgIHhbM10gPSB6WzNdIF4gczVbeGkoMTApXV5zNlt4aSggOSldXnM3W3hpKDExKV1eczhbeGkoIDgpXV5zNlt6aSggMyldOworICAgIGtbNF0gPSBzNVt4aSggMyldXnM2W3hpKCAyKV1eczdbeGkoMTIpXV5zOFt4aSgxMyldXnM1W3hpKCA4KV07CisgICAga1s1XSA9IHM1W3hpKCAxKV1eczZbeGkoIDApXV5zN1t4aSgxNCldXnM4W3hpKDE1KV1eczZbeGkoMTMpXTsKKyAgICBrWzZdID0gczVbeGkoIDcpXV5zNlt4aSggNildXnM3W3hpKCA4KV1eczhbeGkoIDkpXV5zN1t4aSggMyldOworICAgIGtbN10gPSBzNVt4aSggNSldXnM2W3hpKCA0KV1eczdbeGkoMTApXV5zOFt4aSgxMSldXnM4W3hpKCA3KV07CisKKyAgICB6WzBdID0geFswXSBeIHM1W3hpKDEzKV1eczZbeGkoMTUpXV5zN1t4aSgxMildXnM4W3hpKDE0KV1eczdbeGkoIDgpXTsKKyAgICB6WzFdID0geFsyXSBeIHM1W3ppKCAwKV1eczZbemkoIDIpXV5zN1t6aSggMSldXnM4W3ppKCAzKV1eczhbeGkoMTApXTsKKyAgICB6WzJdID0geFszXSBeIHM1W3ppKCA3KV1eczZbemkoIDYpXV5zN1t6aSggNSldXnM4W3ppKCA0KV1eczVbeGkoIDkpXTsKKyAgICB6WzNdID0geFsxXSBeIHM1W3ppKDEwKV1eczZbemkoIDkpXV5zN1t6aSgxMSldXnM4W3ppKCA4KV1eczZbeGkoMTEpXTsKKyAgICBrWzhdID0gczVbemkoIDMpXV5zNlt6aSggMildXnM3W3ppKDEyKV1eczhbemkoMTMpXV5zNVt6aSggOSldOworICAgIGtbOV0gPSBzNVt6aSggMSldXnM2W3ppKCAwKV1eczdbemkoMTQpXV5zOFt6aSgxNSldXnM2W3ppKDEyKV07CisgICAga1sxMF09IHM1W3ppKCA3KV1eczZbemkoIDYpXV5zN1t6aSggOCldXnM4W3ppKCA5KV1eczdbemkoIDIpXTsKKyAgICBrWzExXT0gczVbemkoIDUpXV5zNlt6aSggNCldXnM3W3ppKDEwKV1eczhbemkoMTEpXV5zOFt6aSggNildOworCisgICAgeFswXSA9IHpbMl0gXiBzNVt6aSggNSldXnM2W3ppKCA3KV1eczdbemkoIDQpXV5zOFt6aSggNildXnM3W3ppKCAwKV07CisgICAgeFsxXSA9IHpbMF0gXiBzNVt4aSggMCldXnM2W3hpKCAyKV1eczdbeGkoIDEpXV5zOFt4aSggMyldXnM4W3ppKCAyKV07CisgICAgeFsyXSA9IHpbMV0gXiBzNVt4aSggNyldXnM2W3hpKCA2KV1eczdbeGkoIDUpXV5zOFt4aSggNCldXnM1W3ppKCAxKV07CisgICAgeFszXSA9IHpbM10gXiBzNVt4aSgxMCldXnM2W3hpKCA5KV1eczdbeGkoMTEpXV5zOFt4aSggOCldXnM2W3ppKCAzKV07CisgICAga1sxMl09IHM1W3hpKCA4KV1eczZbeGkoIDkpXV5zN1t4aSggNyldXnM4W3hpKCA2KV1eczVbeGkoIDMpXTsKKyAgICBrWzEzXT0gczVbeGkoMTApXV5zNlt4aSgxMSldXnM3W3hpKCA1KV1eczhbeGkoIDQpXV5zNlt4aSggNyldOworICAgIGtbMTRdPSBzNVt4aSgxMildXnM2W3hpKDEzKV1eczdbeGkoIDMpXV5zOFt4aSggMildXnM3W3hpKCA4KV07CisgICAga1sxNV09IHM1W3hpKDE0KV1eczZbeGkoMTUpXV5zN1t4aSggMSldXnM4W3hpKCAwKV1eczhbeGkoMTMpXTsKKworI3VuZGVmIHhpCisjdW5kZWYgemkKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkb19jYXN0X3NldGtleSggQ0FTVDVfY29udGV4dCAqYywgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBrZXlsZW4gKQoreworICBzdGF0aWMgaW50IGluaXRpYWxpemVkOworICBzdGF0aWMgY29uc3QgY2hhciogc2VsZnRlc3RfZmFpbGVkOworICBpbnQgaTsKKyAgdTMyIHhbNF07CisgIHUzMiB6WzRdOworICB1MzIga1sxNl07CisKKyAgaWYoICFpbml0aWFsaXplZCApCisgICAgeworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgICAgc2VsZnRlc3RfZmFpbGVkID0gc2VsZnRlc3QoKTsKKyAgICAgIGlmKCBzZWxmdGVzdF9mYWlsZWQgKQorICAgICAgICBsb2dfZXJyb3IgKCJDQVNUNSBzZWxmdGVzdCBmYWlsZWQgKCVzKS5cbiIsIHNlbGZ0ZXN0X2ZhaWxlZCApOworICAgIH0KKyAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisgICAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworCisgIGlmKCBrZXlsZW4gIT0gMTYgKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9LRVlMRU47CisKKyAgeFswXSA9IGJ1Zl9nZXRfYmUzMihrZXkgKyAwKTsKKyAgeFsxXSA9IGJ1Zl9nZXRfYmUzMihrZXkgKyA0KTsKKyAgeFsyXSA9IGJ1Zl9nZXRfYmUzMihrZXkgKyA4KTsKKyAgeFszXSA9IGJ1Zl9nZXRfYmUzMihrZXkgKyAxMik7CisKKyAga2V5X3NjaGVkdWxlKCB4LCB6LCBrICk7CisgIGZvcihpPTA7IGkgPCAxNjsgaSsrICkKKyAgICBjLT5LbVtpXSA9IGtbaV07CisgIGtleV9zY2hlZHVsZSggeCwgeiwgayApOworICBmb3IoaT0wOyBpIDwgMTY7IGkrKyApCisgICAgYy0+S3JbaV0gPSBrW2ldICYgMHgxZjsKKworI2lmZGVmIFVTRV9BUk1fQVNNCisgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgYnl0ZSBLcl9hcm1bNF07CisKKyAgICAgIC8qIENvbnZlcnQgcm90YXRlIGxlZnQgdG8gcm90YXRlIHJpZ2h0IGFuZCBhZGQgc2hpZnQgbGVmdAorICAgICAgICogYnkgMi4gICovCisgICAgICBLcl9hcm1bMF0gPSAoKDMyIC0gYy0+S3JbNCAqIGkgKyAwXSkgLSAyKSAmIDB4MWY7CisgICAgICBLcl9hcm1bMV0gPSAoKDMyIC0gYy0+S3JbNCAqIGkgKyAxXSkgLSAyKSAmIDB4MWY7CisgICAgICBLcl9hcm1bMl0gPSAoKDMyIC0gYy0+S3JbNCAqIGkgKyAyXSkgLSAyKSAmIDB4MWY7CisgICAgICBLcl9hcm1bM10gPSAoKDMyIC0gYy0+S3JbNCAqIGkgKyAzXSkgLSAyKSAmIDB4MWY7CisKKyAgICAgIC8qIEVuZGlhbiBmcmllbmRseSBzdG9yZS4gICovCisgICAgICBjLT5Lcl9hcm1fZW5jW2ldID0gS3JfYXJtWzBdIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChLcl9hcm1bMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKEtyX2FybVsyXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKEtyX2FybVszXSA8PCAyNCk7CisgICAgICBjLT5Lcl9hcm1fZGVjW2ldID0gS3JfYXJtWzNdIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChLcl9hcm1bMl0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKEtyX2FybVsxXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKEtyX2FybVswXSA8PCAyNCk7CisKKyAgICAgIHdpcGVtZW1vcnkoS3JfYXJtLCBzaXplb2YoS3JfYXJtKSk7CisgICAgfQorI2VuZGlmCisKKyAgd2lwZW1lbW9yeSh4LCBzaXplb2YgeCk7CisgIHdpcGVtZW1vcnkoeiwgc2l6ZW9mIHopOworICB3aXBlbWVtb3J5KGssIHNpemVvZiBrKTsKKworI3VuZGVmIHhpCisjdW5kZWYgemkKKyAgcmV0dXJuIEdQR19FUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2Nhc3Rfc2V0a2V5ICh2b2lkICpjb250ZXh0LCBjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGtleWxlbiApCit7CisgIENBU1Q1X2NvbnRleHQgKmMgPSAoQ0FTVDVfY29udGV4dCAqKSBjb250ZXh0OworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSBkb19jYXN0X3NldGtleSAoYywga2V5LCBrZXlsZW4pOworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2Nhc3Q1ID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0NBU1Q1LCB7MCwgMH0sCisgICAgIkNBU1Q1IiwgTlVMTCwgTlVMTCwgQ0FTVDVfQkxPQ0tTSVpFLCAxMjgsIHNpemVvZiAoQ0FTVDVfY29udGV4dCksCisgICAgY2FzdF9zZXRrZXksIGVuY3J5cHRfYmxvY2ssIGRlY3J5cHRfYmxvY2sKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9jaXBoZXItYWVzd3JhcC5jIGIvY2lwaGVyL2NpcGhlci1hZXN3cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhYzEwNwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jaXBoZXItYWVzd3JhcC5jCkBAIC0wLDAgKzEsMjEwIEBACisvKiBjaXBoZXItYWVzd3JhcC5jICAtIEdlbmVyaWMgQUVTV1JBUCBtb2RlIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdGguaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKworCisvKiBQZXJmb3JtIHRoZSBBRVMtV3JhcCBhbGdvcml0aG0gYXMgc3BlY2lmaWVkIGJ5IFJGQzMzOTQuICBXZQorICAgaW1wbGVtZW50IHRoaXMgYXMgYSBtb2RlIHVzYWJsZSB3aXRoIGFueSBjaXBoZXIgYWxnb3JpdGhtIG9mCisgICBibG9ja3NpemUgMTI4LiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2Flc3dyYXBfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSAqaW5idWYsIHNpemVfdCBpbmJ1ZmxlbiApCit7CisgIGludCBqLCB4OworICBzaXplX3QgbiwgaTsKKyAgdW5zaWduZWQgY2hhciAqciwgKmEsICpiOworICB1bnNpZ25lZCBjaGFyIHRbOF07CisgIHVuc2lnbmVkIGludCBidXJuLCBuYnVybjsKKworI2lmIE1BWF9CTE9DS1NJWkUgPCA4CisjZXJyb3IgSW52YWxpZCBibG9jayBzaXplCisjZW5kaWYKKyAgLyogV2UgcmVxdWlyZSBhIGNpcGhlciB3aXRoIGEgMTI4IGJpdCBibG9jayBsZW5ndGguICAqLworICBpZiAoYy0+c3BlYy0+YmxvY2tzaXplICE9IDE2KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisKKyAgLyogVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhYmxlIHRvIGhvbGQgdGhlIGlucHV0IGRhdGEgcGx1cyBvbmUKKyAgICAgYWRkaXRpb25hbCBibG9jay4gICovCisgIGlmIChvdXRidWZsZW4gPCBpbmJ1ZmxlbiArIDgpCisgICAgcmV0dXJuIEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVDsKKyAgLyogSW5wdXQgZGF0YSBtdXN0IGJlIG11bHRpcGxlIG9mIDY0IGJpdHMuICAqLworICBpZiAoaW5idWZsZW4gJSA4KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgbiA9IGluYnVmbGVuIC8gODsKKworICAvKiBXZSBuZWVkIGF0IGxlYXN0IHR3byA2NCBiaXQgYmxvY2tzLiAgKi8KKyAgaWYgKG4gPCAyKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgYnVybiA9IDA7CisKKyAgciA9IG91dGJ1ZjsKKyAgYSA9IG91dGJ1ZjsgIC8qIFdlIHN0b3JlIEEgZGlyZWN0bHkgaW4gT1VUQlVGLiAgKi8KKyAgYiA9IGMtPnVfY3RyLmN0cjsgIC8qIEIgaXMgYWxzbyB1c2VkIHRvIGNvbmNhdGVuYXRlIHN0dWZmLiAgKi8KKworICAvKiBJZiBhbiBJViBoYXMgYmVlbiBzZXQgd2UgdXNlIHRoYXQgSVYgYXMgdGhlIEFsdGVybmF0aXZlIEluaXRpYWwKKyAgICAgVmFsdWU7IGlmIGl0IGhhcyBub3QgYmVlbiBzZXQgd2UgdXNlIHRoZSBzdGFuZGFyZCB2YWx1ZS4gICovCisgIGlmIChjLT5tYXJrcy5pdikKKyAgICBtZW1jcHkgKGEsIGMtPnVfaXYuaXYsIDgpOworICBlbHNlCisgICAgbWVtc2V0IChhLCAweGE2LCA4KTsKKworICAvKiBDb3B5IHRoZSBpbmJ1ZiB0byB0aGUgb3V0YnVmLiAqLworICBtZW1tb3ZlIChyKzgsIGluYnVmLCBpbmJ1Zmxlbik7CisKKyAgbWVtc2V0ICh0LCAwLCBzaXplb2YgdCk7IC8qIHQgOj0gMC4gICovCisKKyAgZm9yIChqID0gMDsgaiA8PSA1OyBqKyspCisgICAgeworICAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAvKiBCIDo9IEFFU19rKCBBIHwgUltpXSApICovCisgICAgICAgICAgbWVtY3B5IChiLCBhLCA4KTsKKyAgICAgICAgICBtZW1jcHkgKGIrOCwgcitpKjgsIDgpOworICAgICAgICAgIG5idXJuID0gYy0+c3BlYy0+ZW5jcnlwdCAoJmMtPmNvbnRleHQuYywgYiwgYik7CisgICAgICAgICAgYnVybiA9IG5idXJuID4gYnVybiA/IG5idXJuIDogYnVybjsKKyAgICAgICAgICAvKiB0IDo9IHQgKyAxICAqLworCSAgZm9yICh4ID0gNzsgeCA+PSAwOyB4LS0pCisJICAgIHsKKwkgICAgICB0W3hdKys7CisJICAgICAgaWYgKHRbeF0pCisJCWJyZWFrOworCSAgICB9CisgICAgICAgICAgLyogQSA6PSBNU0JfNjQoQikgXiB0ICovCisJICBidWZfeG9yKGEsIGIsIHQsIDgpOworICAgICAgICAgIC8qIFJbaV0gOj0gTFNCXzY0KEIpICovCisgICAgICAgICAgbWVtY3B5IChyK2kqOCwgYis4LCA4KTsKKyAgICAgICAgfQorICAgfQorCisgIGlmIChidXJuID4gMCkKKyAgICBfZ2NyeV9idXJuX3N0YWNrIChidXJuICsgNCAqIHNpemVvZih2b2lkICopKTsKKworICByZXR1cm4gMDsKK30KKworLyogUGVyZm9ybSB0aGUgQUVTLVVud3JhcCBhbGdvcml0aG0gYXMgc3BlY2lmaWVkIGJ5IFJGQzMzOTQuICBXZQorICAgaW1wbGVtZW50IHRoaXMgYXMgYSBtb2RlIHVzYWJsZSB3aXRoIGFueSBjaXBoZXIgYWxnb3JpdGhtIG9mCisgICBibG9ja3NpemUgMTI4LiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2Flc3dyYXBfZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSAqaW5idWYsIHNpemVfdCBpbmJ1ZmxlbikKK3sKKyAgaW50IGosIHg7CisgIHNpemVfdCBuLCBpOworICB1bnNpZ25lZCBjaGFyICpyLCAqYSwgKmI7CisgIHVuc2lnbmVkIGNoYXIgdFs4XTsKKyAgdW5zaWduZWQgaW50IGJ1cm4sIG5idXJuOworCisjaWYgTUFYX0JMT0NLU0laRSA8IDgKKyNlcnJvciBJbnZhbGlkIGJsb2NrIHNpemUKKyNlbmRpZgorICAvKiBXZSByZXF1aXJlIGEgY2lwaGVyIHdpdGggYSAxMjggYml0IGJsb2NrIGxlbmd0aC4gICovCisgIGlmIChjLT5zcGVjLT5ibG9ja3NpemUgIT0gMTYpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICAvKiBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFibGUgdG8gaG9sZCB0aGUgaW5wdXQgZGF0YSBtaW51cyBvbmUKKyAgICAgYWRkaXRpb25hbCBibG9jay4gIEZpeG1lOiBUaGUgY2FsbGVyIGhhcyBtb3JlIHJlc3RyaWN0aXZlIGNoZWNrcworICAgICAtIHdlIG1heSB3YW50IHRvIGZpeCB0aGVtIGZvciB0aGlzIG1vZGUuICAqLworICBpZiAob3V0YnVmbGVuICsgOCAgPCBpbmJ1ZmxlbikKKyAgICByZXR1cm4gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUOworICAvKiBJbnB1dCBkYXRhIG11c3QgYmUgbXVsdGlwbGUgb2YgNjQgYml0cy4gICovCisgIGlmIChpbmJ1ZmxlbiAlIDgpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICBuID0gaW5idWZsZW4gLyA4OworCisgIC8qIFdlIG5lZWQgYXQgbGVhc3QgdGhyZWUgNjQgYml0IGJsb2Nrcy4gICovCisgIGlmIChuIDwgMykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworCisgIGJ1cm4gPSAwOworCisgIHIgPSBvdXRidWY7CisgIGEgPSBjLT5sYXN0aXY7ICAvKiBXZSB1c2UgYy0+TEFTVElWIGFzIGJ1ZmZlciBmb3IgQS4gICovCisgIGIgPSBjLT51X2N0ci5jdHI7ICAgICAvKiBCIGlzIGFsc28gdXNlZCB0byBjb25jYXRlbmF0ZSBzdHVmZi4gICovCisKKyAgLyogQ29weSB0aGUgaW5idWYgdG8gdGhlIG91dGJ1ZiBhbmQgc2F2ZSBBLiAqLworICBtZW1jcHkgKGEsIGluYnVmLCA4KTsKKyAgbWVtbW92ZSAociwgaW5idWYrOCwgaW5idWZsZW4tOCk7CisgIG4tLTsgLyogUmVkdWNlIHRvIGFjdHVhbCBudW1iZXIgb2YgZGF0YSBibG9ja3MuICAqLworCisgIC8qIHQgOj0gNiAqIG4gICovCisgIGkgPSBuICogNjsgIC8qIFRoZSByYW5nZSBpcyB2YWxpZCBiZWNhdXNlOiBuID0gaW5idWZsZW4gLyA4IC0gMS4gICovCisgIGZvciAoeD0wOyB4IDwgOCAmJiB4IDwgc2l6ZW9mIChpKTsgeCsrKQorICAgIHRbNy14XSA9IGkgPj4gKDgqeCk7CisgIGZvciAoOyB4IDwgODsgeCsrKQorICAgIHRbNy14XSA9IDA7CisKKyAgZm9yIChqID0gNTsgaiA+PSAwOyBqLS0pCisgICAgeworICAgICAgZm9yIChpID0gbjsgaSA+PSAxOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICAvKiBCIDo9IEFFU19rXjEoIChBIF4gdCl8IFJbaV0gKSAqLworCSAgYnVmX3hvcihiLCBhLCB0LCA4KTsKKyAgICAgICAgICBtZW1jcHkgKGIrOCwgcisoaS0xKSo4LCA4KTsKKyAgICAgICAgICBuYnVybiA9IGMtPnNwZWMtPmRlY3J5cHQgKCZjLT5jb250ZXh0LmMsIGIsIGIpOworICAgICAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICAgICAgLyogdCA6PSB0IC0gMSAgKi8KKwkgIGZvciAoeCA9IDc7IHggPj0gMDsgeC0tKQorCSAgICB7CisJICAgICAgdFt4XS0tOworCSAgICAgIGlmICh0W3hdICE9IDB4ZmYpCisJCWJyZWFrOworCSAgICB9CisgICAgICAgICAgLyogQSA6PSBNU0JfNjQoQikgKi8KKyAgICAgICAgICBtZW1jcHkgKGEsIGIsIDgpOworICAgICAgICAgIC8qIFJbaV0gOj0gTFNCXzY0KEIpICovCisgICAgICAgICAgbWVtY3B5IChyKyhpLTEpKjgsIGIrOCwgOCk7CisgICAgICAgIH0KKyAgIH0KKworICAvKiBJZiBhbiBJViBoYXMgYmVlbiBzZXQgd2UgY29tcGFyZSBhZ2FpbnN0IHRoaXMgQWx0ZXJuYXRpdmUgSW5pdGlhbAorICAgICBWYWx1ZTsgaWYgaXQgaGFzIG5vdCBiZWVuIHNldCB3ZSBjb21wYXJlIGFnYWluc3QgdGhlIHN0YW5kYXJkIElWLiAgKi8KKyAgaWYgKGMtPm1hcmtzLml2KQorICAgIGogPSBtZW1jbXAgKGEsIGMtPnVfaXYuaXYsIDgpOworICBlbHNlCisgICAgeworICAgICAgZm9yIChqPTAsIHg9MDsgeCA8IDg7IHgrKykKKyAgICAgICAgaWYgKGFbeF0gIT0gMHhhNikKKyAgICAgICAgICB7CisgICAgICAgICAgICBqPTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgfQorCisgIGlmIChidXJuID4gMCkKKyAgICBfZ2NyeV9idXJuX3N0YWNrIChidXJuICsgNCAqIHNpemVvZih2b2lkICopKTsKKworICByZXR1cm4gaj8gR1BHX0VSUl9DSEVDS1NVTSA6IDA7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvY2lwaGVyLWNiYy5jIGIvY2lwaGVyL2NpcGhlci1jYmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkyOWRhCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2NpcGhlci1jYmMuYwpAQCAtMCwwICsxLDIwNSBAQAorLyogY2lwaGVyLWNiYy5jICAtIEdlbmVyaWMgQ0JDIG1vZGUgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworICogICAgICAgICAgICAgICAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYXRoLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisKKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jYmNfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pCit7CisgIHNpemVfdCBuOworICB1bnNpZ25lZCBjaGFyICppdnA7CisgIGludCBpOworICBzaXplX3QgYmxvY2tzaXplID0gYy0+c3BlYy0+YmxvY2tzaXplOworICBnY3J5X2NpcGhlcl9lbmNyeXB0X3QgZW5jX2ZuID0gYy0+c3BlYy0+ZW5jcnlwdDsKKyAgc2l6ZV90IG5ibG9ja3MgPSBpbmJ1ZmxlbiAvIGJsb2Nrc2l6ZTsKKyAgdW5zaWduZWQgaW50IGJ1cm4sIG5idXJuOworCisgIGlmIChvdXRidWZsZW4gPCAoKGMtPmZsYWdzICYgR0NSWV9DSVBIRVJfQ0JDX01BQyk/IGJsb2Nrc2l6ZSA6IGluYnVmbGVuKSkKKyAgICByZXR1cm4gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUOworCisgIGlmICgoaW5idWZsZW4gJSBibG9ja3NpemUpCisgICAgICAmJiAhKGluYnVmbGVuID4gYmxvY2tzaXplCisgICAgICAgICAgICYmIChjLT5mbGFncyAmIEdDUllfQ0lQSEVSX0NCQ19DVFMpKSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfTEVOR1RIOworCisgIGJ1cm4gPSAwOworCisgIGlmICgoYy0+ZmxhZ3MgJiBHQ1JZX0NJUEhFUl9DQkNfQ1RTKSAmJiBpbmJ1ZmxlbiA+IGJsb2Nrc2l6ZSkKKyAgICB7CisgICAgICBpZiAoKGluYnVmbGVuICUgYmxvY2tzaXplKSA9PSAwKQorCW5ibG9ja3MtLTsKKyAgICB9CisKKyAgaWYgKGMtPmJ1bGsuY2JjX2VuYykKKyAgICB7CisgICAgICBjLT5idWxrLmNiY19lbmMgKCZjLT5jb250ZXh0LmMsIGMtPnVfaXYuaXYsIG91dGJ1ZiwgaW5idWYsIG5ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgIChjLT5mbGFncyAmIEdDUllfQ0lQSEVSX0NCQ19NQUMpKTsKKyAgICAgIGluYnVmICArPSBuYmxvY2tzICogYmxvY2tzaXplOworICAgICAgaWYgKCEoYy0+ZmxhZ3MgJiBHQ1JZX0NJUEhFUl9DQkNfTUFDKSkKKyAgICAgICAgb3V0YnVmICs9IG5ibG9ja3MgKiBibG9ja3NpemU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaXZwID0gYy0+dV9pdi5pdjsKKworICAgICAgZm9yIChuPTA7IG4gPCBuYmxvY2tzOyBuKysgKQorICAgICAgICB7CisgICAgICAgICAgYnVmX3hvciAob3V0YnVmLCBpbmJ1ZiwgaXZwLCBibG9ja3NpemUpOworICAgICAgICAgIG5idXJuID0gZW5jX2ZuICggJmMtPmNvbnRleHQuYywgb3V0YnVmLCBvdXRidWYgKTsKKyAgICAgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgICAgIGl2cCA9IG91dGJ1ZjsKKyAgICAgICAgICBpbmJ1ZiAgKz0gYmxvY2tzaXplOworICAgICAgICAgIGlmICghKGMtPmZsYWdzICYgR0NSWV9DSVBIRVJfQ0JDX01BQykpCisgICAgICAgICAgICBvdXRidWYgKz0gYmxvY2tzaXplOworICAgICAgICB9CisKKyAgICAgIGlmIChpdnAgIT0gYy0+dV9pdi5pdikKKyAgICAgICAgYnVmX2NweSAoYy0+dV9pdi5pdiwgaXZwLCBibG9ja3NpemUgKTsKKyAgICB9CisKKyAgaWYgKChjLT5mbGFncyAmIEdDUllfQ0lQSEVSX0NCQ19DVFMpICYmIGluYnVmbGVuID4gYmxvY2tzaXplKQorICAgIHsKKyAgICAgIC8qIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLCBzaW5jZSBvdXRidWYgbWlnaHQgYmUgZXF1YWwgdG8KKyAgICAgICAgIGluYnVmLiAgKi8KKyAgICAgIHNpemVfdCByZXN0Ynl0ZXM7CisgICAgICB1bnNpZ25lZCBjaGFyIGI7CisKKyAgICAgIGlmICgoaW5idWZsZW4gJSBibG9ja3NpemUpID09IDApCisgICAgICAgIHJlc3RieXRlcyA9IGJsb2Nrc2l6ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdGJ5dGVzID0gaW5idWZsZW4gJSBibG9ja3NpemU7CisKKyAgICAgIG91dGJ1ZiAtPSBibG9ja3NpemU7CisgICAgICBmb3IgKGl2cCA9IGMtPnVfaXYuaXYsIGkgPSAwOyBpIDwgcmVzdGJ5dGVzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBiID0gaW5idWZbaV07CisgICAgICAgICAgb3V0YnVmW2Jsb2Nrc2l6ZSArIGldID0gb3V0YnVmW2ldOworICAgICAgICAgIG91dGJ1ZltpXSA9IGIgXiAqaXZwKys7CisgICAgICAgIH0KKyAgICAgIGZvciAoOyBpIDwgYmxvY2tzaXplOyBpKyspCisgICAgICAgIG91dGJ1ZltpXSA9IDAgXiAqaXZwKys7CisKKyAgICAgIG5idXJuID0gZW5jX2ZuICgmYy0+Y29udGV4dC5jLCBvdXRidWYsIG91dGJ1Zik7CisgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgYnVmX2NweSAoYy0+dV9pdi5pdiwgb3V0YnVmLCBibG9ja3NpemUpOworICAgIH0KKworICBpZiAoYnVybiA+IDApCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIDQgKiBzaXplb2Yodm9pZCAqKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2JjX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKQoreworICBzaXplX3QgbjsKKyAgaW50IGk7CisgIHNpemVfdCBibG9ja3NpemUgPSBjLT5zcGVjLT5ibG9ja3NpemU7CisgIGdjcnlfY2lwaGVyX2RlY3J5cHRfdCBkZWNfZm4gPSBjLT5zcGVjLT5kZWNyeXB0OworICBzaXplX3QgbmJsb2NrcyA9IGluYnVmbGVuIC8gYmxvY2tzaXplOworICB1bnNpZ25lZCBpbnQgYnVybiwgbmJ1cm47CisKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisKKyAgaWYgKChpbmJ1ZmxlbiAlIGJsb2Nrc2l6ZSkKKyAgICAgICYmICEoaW5idWZsZW4gPiBibG9ja3NpemUKKyAgICAgICAgICAgJiYgKGMtPmZsYWdzICYgR0NSWV9DSVBIRVJfQ0JDX0NUUykpKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisKKyAgYnVybiA9IDA7CisKKyAgaWYgKChjLT5mbGFncyAmIEdDUllfQ0lQSEVSX0NCQ19DVFMpICYmIGluYnVmbGVuID4gYmxvY2tzaXplKQorICAgIHsKKyAgICAgIG5ibG9ja3MtLTsKKyAgICAgIGlmICgoaW5idWZsZW4gJSBibG9ja3NpemUpID09IDApCisJbmJsb2Nrcy0tOworICAgICAgYnVmX2NweSAoYy0+bGFzdGl2LCBjLT51X2l2Lml2LCBibG9ja3NpemUpOworICAgIH0KKworICBpZiAoYy0+YnVsay5jYmNfZGVjKQorICAgIHsKKyAgICAgIGMtPmJ1bGsuY2JjX2RlYyAoJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgb3V0YnVmLCBpbmJ1ZiwgbmJsb2Nrcyk7CisgICAgICBpbmJ1ZiAgKz0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgICAgIG91dGJ1ZiArPSBuYmxvY2tzICogYmxvY2tzaXplOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAobj0wOyBuIDwgbmJsb2NrczsgbisrICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEJlY2F1c2Ugb3V0YnVmIGFuZCBpbmJ1ZiBtaWdodCBiZSB0aGUgc2FtZSwgd2UgbXVzdCBub3Qgb3ZlcndyaXRlCisgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIGNpcGhlcnRleHQgYmxvY2suICBXZSB1c2UgTEFTVElWIGFzIGludGVybWVkaWF0ZQorICAgICAgICAgICAgIHN0b3JhZ2UgaGVyZSBiZWNhdXNlIGl0IGlzIG5vdCB1c2VkIG90aGVyd2lzZS4gICovCisgICAgICAgICAgbmJ1cm4gPSBkZWNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT5sYXN0aXYsIGluYnVmICk7CisgICAgICAgICAgYnVybiA9IG5idXJuID4gYnVybiA/IG5idXJuIDogYnVybjsKKyAgICAgICAgICBidWZfeG9yX25fY29weV8yKG91dGJ1ZiwgYy0+bGFzdGl2LCBjLT51X2l2Lml2LCBpbmJ1ZiwgYmxvY2tzaXplKTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gYmxvY2tzaXplOworICAgICAgICAgIG91dGJ1ZiArPSBibG9ja3NpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKChjLT5mbGFncyAmIEdDUllfQ0lQSEVSX0NCQ19DVFMpICYmIGluYnVmbGVuID4gYmxvY2tzaXplKQorICAgIHsKKyAgICAgIHNpemVfdCByZXN0Ynl0ZXM7CisKKyAgICAgIGlmICgoaW5idWZsZW4gJSBibG9ja3NpemUpID09IDApCisgICAgICAgIHJlc3RieXRlcyA9IGJsb2Nrc2l6ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdGJ5dGVzID0gaW5idWZsZW4gJSBibG9ja3NpemU7CisKKyAgICAgIGJ1Zl9jcHkgKGMtPmxhc3RpdiwgYy0+dV9pdi5pdiwgYmxvY2tzaXplICk7ICAgICAgICAgLyogU2F2ZSBDbi0yLiAqLworICAgICAgYnVmX2NweSAoYy0+dV9pdi5pdiwgaW5idWYgKyBibG9ja3NpemUsIHJlc3RieXRlcyApOyAvKiBTYXZlIENuLiAqLworCisgICAgICBuYnVybiA9IGRlY19mbiAoICZjLT5jb250ZXh0LmMsIG91dGJ1ZiwgaW5idWYgKTsKKyAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICBidWZfeG9yKG91dGJ1Ziwgb3V0YnVmLCBjLT51X2l2Lml2LCByZXN0Ynl0ZXMpOworCisgICAgICBidWZfY3B5IChvdXRidWYgKyBibG9ja3NpemUsIG91dGJ1ZiwgcmVzdGJ5dGVzKTsKKyAgICAgIGZvcihpPXJlc3RieXRlczsgaSA8IGJsb2Nrc2l6ZTsgaSsrKQorICAgICAgICBjLT51X2l2Lml2W2ldID0gb3V0YnVmW2ldOworICAgICAgbmJ1cm4gPSBkZWNfZm4gKCZjLT5jb250ZXh0LmMsIG91dGJ1ZiwgYy0+dV9pdi5pdik7CisgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgYnVmX3hvcihvdXRidWYsIG91dGJ1ZiwgYy0+bGFzdGl2LCBibG9ja3NpemUpOworICAgICAgLyogYy0+bGFzdGl2IGlzIG5vdyByZWFsbHkgbGFzdGxhc3RpdiwgZG9lcyB0aGlzIG1hdHRlcj8gKi8KKyAgICB9CisKKyAgaWYgKGJ1cm4gPiAwKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyA0ICogc2l6ZW9mKHZvaWQgKikpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NpcGhlci1jY20uYyBiL2NpcGhlci9jaXBoZXItY2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmMjE2MgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jaXBoZXItY2NtLmMKQEAgLTAsMCArMSw0NDIgQEAKKy8qIGNpcGhlci1jY20uYyAtIENUUiBtb2RlIHdpdGggQ0JDLU1BQyBtb2RlIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdGguaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKworLyogV2UgbmVlZCBhIDY0IGJpdCB0eXBlIGZvciB0aGlzIGNvZGUuICAqLworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKworCisjZGVmaW5lIHNldF9idXJuKGJ1cm4sIG5idXJuKSBkbyB7IFwKKyAgdW5zaWduZWQgaW50IF9fbmJ1cm4gPSAobmJ1cm4pOyBcCisgIChidXJuKSA9IChidXJuKSA+IF9fbmJ1cm4gPyAoYnVybikgOiBfX25idXJuOyB9IHdoaWxlICgwKQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RvX2NiY19tYWMgKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIHNpemVfdCBpbmxlbiwKKyAgICAgICAgICAgIGludCBkb19wYWRkaW5nKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gMTY7CisgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNfZm4gPSBjLT5zcGVjLT5lbmNyeXB0OworICB1bnNpZ25lZCBjaGFyIHRtcFtibG9ja3NpemVdOworICB1bnNpZ25lZCBpbnQgYnVybiA9IDA7CisgIHVuc2lnbmVkIGludCB1bnVzZWQgPSBjLT51X21vZGUuY2NtLm1hY191bnVzZWQ7CisgIHNpemVfdCBuYmxvY2tzOworCisgIGlmIChpbmxlbiA9PSAwICYmICh1bnVzZWQgPT0gMCB8fCAhZG9fcGFkZGluZykpCisgICAgcmV0dXJuIDA7CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoaW5sZW4gKyB1bnVzZWQgPCBibG9ja3NpemUgfHwgdW51c2VkID4gMCkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoOyBpbmxlbiAmJiB1bnVzZWQgPCBibG9ja3NpemU7IGlubGVuLS0pCisgICAgICAgICAgICBjLT51X21vZGUuY2NtLm1hY2J1Zlt1bnVzZWQrK10gPSAqaW5idWYrKzsKKyAgICAgICAgfQorICAgICAgaWYgKCFpbmxlbikKKyAgICAgICAgeworICAgICAgICAgIGlmICghZG9fcGFkZGluZykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgd2hpbGUgKHVudXNlZCA8IGJsb2Nrc2l6ZSkKKyAgICAgICAgICAgIGMtPnVfbW9kZS5jY20ubWFjYnVmW3VudXNlZCsrXSA9IDA7CisgICAgICAgIH0KKworICAgICAgaWYgKHVudXNlZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBQcm9jZXNzIG9uZSBibG9jayBmcm9tIG1hY2J1Zi4gICovCisgICAgICAgICAgYnVmX3hvcihjLT51X2l2Lml2LCBjLT51X2l2Lml2LCBjLT51X21vZGUuY2NtLm1hY2J1ZiwgYmxvY2tzaXplKTsKKyAgICAgICAgICBzZXRfYnVybiAoYnVybiwgZW5jX2ZuICggJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgYy0+dV9pdi5pdiApKTsKKworICAgICAgICAgIHVudXNlZCA9IDA7CisgICAgICAgIH0KKworICAgICAgaWYgKGMtPmJ1bGsuY2JjX2VuYykKKyAgICAgICAgeworICAgICAgICAgIG5ibG9ja3MgPSBpbmxlbiAvIGJsb2Nrc2l6ZTsKKyAgICAgICAgICBjLT5idWxrLmNiY19lbmMgKCZjLT5jb250ZXh0LmMsIGMtPnVfaXYuaXYsIHRtcCwgaW5idWYsIG5ibG9ja3MsIDEpOworICAgICAgICAgIGluYnVmICs9IG5ibG9ja3MgKiBibG9ja3NpemU7CisgICAgICAgICAgaW5sZW4gLT0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKworICAgICAgICAgIHdpcGVtZW1vcnkgKHRtcCwgc2l6ZW9mKHRtcCkpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoaW5sZW4gPj0gYmxvY2tzaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBidWZfeG9yKGMtPnVfaXYuaXYsIGMtPnVfaXYuaXYsIGluYnVmLCBibG9ja3NpemUpOworCisgICAgICAgICAgICAgIHNldF9idXJuIChidXJuLCBlbmNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2ICkpOworCisgICAgICAgICAgICAgIGlubGVuIC09IGJsb2Nrc2l6ZTsKKyAgICAgICAgICAgICAgaW5idWYgKz0gYmxvY2tzaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICB3aGlsZSAoaW5sZW4gPiAwKTsKKworICBjLT51X21vZGUuY2NtLm1hY191bnVzZWQgPSB1bnVzZWQ7CisKKyAgaWYgKGJ1cm4pCisgICAgYnVybiArPSA0ICogc2l6ZW9mKHZvaWQgKik7CisKKyAgcmV0dXJuIGJ1cm47Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2NtX3NldF9ub25jZSAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbm9uY2VsZW4pCit7CisgIHNpemVfdCBMID0gMTUgLSBub25jZWxlbjsKKyAgc2l6ZV90IExfOworCisgIExfID0gTCAtIDE7CisKKyAgaWYgKCFub25jZSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworICAvKiBMZW5ndGggZmllbGQgbXVzdCBiZSAyLCAzLCAuLi4sIG9yIDguICovCisgIGlmIChMIDwgMiB8fCBMID4gOCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfTEVOR1RIOworCisgIC8qIFJlc2V0IHN0YXRlICovCisgIG1lbXNldCAoJmMtPnVfbW9kZSwgMCwgc2l6ZW9mKGMtPnVfbW9kZSkpOworICBtZW1zZXQgKCZjLT5tYXJrcywgMCwgc2l6ZW9mKGMtPm1hcmtzKSk7CisgIG1lbXNldCAoJmMtPnVfaXYsIDAsIHNpemVvZihjLT51X2l2KSk7CisgIG1lbXNldCAoJmMtPnVfY3RyLCAwLCBzaXplb2YoYy0+dV9jdHIpKTsKKyAgbWVtc2V0IChjLT5sYXN0aXYsIDAsIHNpemVvZihjLT5sYXN0aXYpKTsKKyAgYy0+dW51c2VkID0gMDsKKworICAvKiBTZXR1cCBDVFIgKi8KKyAgYy0+dV9jdHIuY3RyWzBdID0gTF87CisgIG1lbWNweSAoJmMtPnVfY3RyLmN0clsxXSwgbm9uY2UsIG5vbmNlbGVuKTsKKyAgbWVtc2V0ICgmYy0+dV9jdHIuY3RyWzEgKyBub25jZWxlbl0sIDAsIEwpOworCisgIC8qIFNldHVwIElWICovCisgIGMtPnVfaXYuaXZbMF0gPSBMXzsKKyAgbWVtY3B5ICgmYy0+dV9pdi5pdlsxXSwgbm9uY2UsIG5vbmNlbGVuKTsKKyAgLyogQWRkICg4ICogTV8gKyA2NCAqIGZsYWdzKSB0byBpdlswXSBhbmQgc2V0IGl2W25vbmNlbGVuICsgMSAuLi4gMTVdIGxhdGVyCisgICAgIGluIHNldF9hYWQuICAqLworICBtZW1zZXQgKCZjLT51X2l2Lml2WzEgKyBub25jZWxlbl0sIDAsIEwpOworCisgIGMtPnVfbW9kZS5jY20ubm9uY2UgPSAxOworCisgIHJldHVybiBHUEdfRVJSX05PX0VSUk9SOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9zZXRfbGVuZ3RocyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCB1NjQgZW5jcnlwdGxlbiwgdTY0IGFhZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCB0YWdsZW4pCit7CisgIHVuc2lnbmVkIGludCBidXJuID0gMDsKKyAgdW5zaWduZWQgY2hhciBiMFsxNl07CisgIHNpemVfdCBub25jZWxlbiA9IDE1IC0gKGMtPnVfaXYuaXZbMF0gKyAxKTsKKyAgdTY0IE0gPSB0YWdsZW47CisgIHU2NCBNXzsKKyAgaW50IGk7CisKKyAgTV8gPSAoTSAtIDIpIC8gMjsKKworICAvKiBBdXRoZW50aWNhdGlvbiBmaWVsZCBtdXN0IGJlIDQsIDYsIDgsIDEwLCAxMiwgMTQgb3IgMTYuICovCisgIGlmICgoTV8gKiAyICsgMikgIT0gTSB8fCBNIDwgNCB8fCBNID4gMTYpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKyAgaWYgKCFjLT51X21vZGUuY2NtLm5vbmNlIHx8IGMtPm1hcmtzLnRhZykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfU1RBVEU7CisgIGlmIChjLT51X21vZGUuY2NtLmxlbmd0aHMpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1NUQVRFOworCisgIGMtPnVfbW9kZS5jY20uYXV0aGxlbiA9IHRhZ2xlbjsKKyAgYy0+dV9tb2RlLmNjbS5lbmNyeXB0bGVuID0gZW5jcnlwdGxlbjsKKyAgYy0+dV9tb2RlLmNjbS5hYWRsZW4gPSBhYWRsZW47CisKKyAgLyogQ29tcGxldGUgSVYgc2V0dXAuICAqLworICBjLT51X2l2Lml2WzBdICs9IChhYWRsZW4gPiAwKSAqIDY0ICsgTV8gKiA4OworICBmb3IgKGkgPSAxNiAtIDE7IGkgPj0gMSArIG5vbmNlbGVuOyBpLS0pCisgICAgeworICAgICAgYy0+dV9pdi5pdltpXSA9IGVuY3J5cHRsZW4gJiAweGZmOworICAgICAgZW5jcnlwdGxlbiA+Pj0gODsKKyAgICB9CisKKyAgbWVtY3B5IChiMCwgYy0+dV9pdi5pdiwgMTYpOworICBtZW1zZXQgKGMtPnVfaXYuaXYsIDAsIDE2KTsKKworICBzZXRfYnVybiAoYnVybiwgZG9fY2JjX21hYyAoYywgYjAsIDE2LCAwKSk7CisKKyAgaWYgKGFhZGxlbiA9PSAwKQorICAgIHsKKyAgICAgIC8qIERvIG5vdGhpbmcuICAqLworICAgIH0KKyAgZWxzZSBpZiAoYWFkbGVuID4gMCAmJiBhYWRsZW4gPD0gKHVuc2lnbmVkIGludCkweGZlZmYpCisgICAgeworICAgICAgYjBbMF0gPSAoYWFkbGVuID4+IDgpICYgMHhmZjsKKyAgICAgIGIwWzFdID0gYWFkbGVuICYgMHhmZjsKKyAgICAgIHNldF9idXJuIChidXJuLCBkb19jYmNfbWFjIChjLCBiMCwgMiwgMCkpOworICAgIH0KKyAgZWxzZSBpZiAoYWFkbGVuID4gMHhmZWZmICYmIGFhZGxlbiA8PSAodW5zaWduZWQgaW50KTB4ZmZmZmZmZmYpCisgICAgeworICAgICAgYjBbMF0gPSAweGZmOworICAgICAgYjBbMV0gPSAweGZlOworICAgICAgYnVmX3B1dF9iZTMyKCZiMFsyXSwgYWFkbGVuKTsKKyAgICAgIHNldF9idXJuIChidXJuLCBkb19jYmNfbWFjIChjLCBiMCwgNiwgMCkpOworICAgIH0KKyAgZWxzZSBpZiAoYWFkbGVuID4gKHVuc2lnbmVkIGludCkweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIGIwWzBdID0gMHhmZjsKKyAgICAgIGIwWzFdID0gMHhmZjsKKyAgICAgIGJ1Zl9wdXRfYmU2NCgmYjBbMl0sIGFhZGxlbik7CisgICAgICBzZXRfYnVybiAoYnVybiwgZG9fY2JjX21hYyAoYywgYjAsIDEwLCAwKSk7CisgICAgfQorCisgIC8qIEdlbmVyYXRlIFNfMCBhbmQgaW5jcmVhc2UgY291bnRlci4gICovCisgIHNldF9idXJuIChidXJuLCBjLT5zcGVjLT5lbmNyeXB0ICggJmMtPmNvbnRleHQuYywgYy0+dV9tb2RlLmNjbS5zMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT51X2N0ci5jdHIgKSk7CisgIGMtPnVfY3RyLmN0clsxNV0rKzsKKworICBpZiAoYnVybikKKyAgICBfZ2NyeV9idXJuX3N0YWNrIChidXJuICsgc2l6ZW9mKHZvaWQgKikgKiA1KTsKKworICBjLT51X21vZGUuY2NtLmxlbmd0aHMgPSAxOworCisgIHJldHVybiBHUEdfRVJSX05PX0VSUk9SOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9hdXRoZW50aWNhdGUgKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWJ1ZmxlbikKK3sKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgaWYgKGFidWZsZW4gPiAwICYmICFhYnVmKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisgIGlmICghYy0+dV9tb2RlLmNjbS5ub25jZSB8fCAhYy0+dV9tb2RlLmNjbS5sZW5ndGhzIHx8IGMtPm1hcmtzLnRhZykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfU1RBVEU7CisgIGlmIChhYnVmbGVuID4gYy0+dV9tb2RlLmNjbS5hYWRsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICBjLT51X21vZGUuY2NtLmFhZGxlbiAtPSBhYnVmbGVuOworICBidXJuID0gZG9fY2JjX21hYyAoYywgYWJ1ZiwgYWJ1ZmxlbiwgYy0+dV9tb2RlLmNjbS5hYWRsZW4gPT0gMCk7CisKKyAgaWYgKGJ1cm4pCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIHNpemVvZih2b2lkICopICogNSk7CisKKyAgcmV0dXJuIEdQR19FUlJfTk9fRVJST1I7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2NtX3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCB1bnNpZ25lZCBjaGFyICpvdXRidWYsCisJCSAgICAgIHNpemVfdCBvdXRidWZsZW4sIGludCBjaGVjaykKK3sKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgaWYgKCFvdXRidWYgfHwgb3V0YnVmbGVuID09IDApCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgLyogVGFnIGxlbmd0aCBtdXN0IGJlIHNhbWUgYXMgaW5pdGlhbCBhdXRobGVuLiAgKi8KKyAgaWYgKGMtPnVfbW9kZS5jY20uYXV0aGxlbiAhPSBvdXRidWZsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKyAgaWYgKCFjLT51X21vZGUuY2NtLm5vbmNlIHx8ICFjLT51X21vZGUuY2NtLmxlbmd0aHMgfHwgYy0+dV9tb2RlLmNjbS5hYWRsZW4gPiAwKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9TVEFURTsKKyAgLyogSW5pdGlhbCBlbmNyeXB0IGxlbmd0aCBtdXN0IG1hdGNoIHdpdGggbGVuZ3RoIG9mIGFjdHVhbCBkYXRhIHByb2Nlc3NlZC4gICovCisgIGlmIChjLT51X21vZGUuY2NtLmVuY3J5cHRsZW4gPiAwKQorICAgIHJldHVybiBHUEdfRVJSX1VORklOSVNIRUQ7CisKKyAgaWYgKCFjLT5tYXJrcy50YWcpCisgICAgeworICAgICAgYnVybiA9IGRvX2NiY19tYWMgKGMsIE5VTEwsIDAsIDEpOyAvKiBQZXJmb3JtIGZpbmFsIHBhZGRpbmcuICAqLworCisgICAgICAvKiBBZGQgU18wICovCisgICAgICBidWZfeG9yIChjLT51X2l2Lml2LCBjLT51X2l2Lml2LCBjLT51X21vZGUuY2NtLnMwLCAxNik7CisKKyAgICAgIHdpcGVtZW1vcnkgKGMtPnVfY3RyLmN0ciwgMTYpOworICAgICAgd2lwZW1lbW9yeSAoYy0+dV9tb2RlLmNjbS5zMCwgMTYpOworICAgICAgd2lwZW1lbW9yeSAoYy0+dV9tb2RlLmNjbS5tYWNidWYsIDE2KTsKKworICAgICAgaWYgKGJ1cm4pCisgICAgICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyBzaXplb2Yodm9pZCAqKSAqIDUpOworCisgICAgICBjLT5tYXJrcy50YWcgPSAxOworICAgIH0KKworICBpZiAoIWNoZWNrKQorICAgIHsKKyAgICAgIG1lbWNweSAob3V0YnVmLCBjLT51X2l2Lml2LCBvdXRidWZsZW4pOworICAgICAgcmV0dXJuIEdQR19FUlJfTk9fRVJST1I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIGJ1Zl9lcV9jb25zdChvdXRidWYsIGMtPnVfaXYuaXYsIG91dGJ1ZmxlbikgPworICAgICAgICAgICAgIEdQR19FUlJfTk9fRVJST1IgOiBHUEdfRVJSX0NIRUNLU1VNOworICAgIH0KK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jY21fZ2V0X3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCB1bnNpZ25lZCBjaGFyICpvdXR0YWcsCisJCQkgIHNpemVfdCB0YWdsZW4pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfY2NtX3RhZyAoYywgb3V0dGFnLCB0YWdsZW4sIDApOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9jaGVja190YWcgKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW50YWcsCisJCQkgICAgc2l6ZV90IHRhZ2xlbikKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9jY21fdGFnIChjLCAodW5zaWduZWQgY2hhciAqKWludGFnLCB0YWdsZW4sIDEpOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9lbmNyeXB0IChnY3J5X2NpcGhlcl9oZF90IGMsIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dGJ1ZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmJ1ZmxlbikKK3sKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisgIGlmICghYy0+dV9tb2RlLmNjbS5ub25jZSB8fCBjLT5tYXJrcy50YWcgfHwgIWMtPnVfbW9kZS5jY20ubGVuZ3RocyB8fAorICAgICAgYy0+dV9tb2RlLmNjbS5hYWRsZW4gPiAwKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9TVEFURTsKKyAgaWYgKGluYnVmbGVuID4gYy0+dV9tb2RlLmNjbS5lbmNyeXB0bGVuKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisKKyAgYy0+dV9tb2RlLmNjbS5lbmNyeXB0bGVuIC09IGluYnVmbGVuOworICBidXJuID0gZG9fY2JjX21hYyAoYywgaW5idWYsIGluYnVmbGVuLCAwKTsKKyAgaWYgKGJ1cm4pCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIHNpemVvZih2b2lkICopICogNSk7CisKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2NtX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywgdW5zaWduZWQgY2hhciAqb3V0YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0YnVmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluYnVmbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgZXJyOworICB1bnNpZ25lZCBpbnQgYnVybjsKKworICBpZiAob3V0YnVmbGVuIDwgaW5idWZsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVDsKKyAgaWYgKCFjLT51X21vZGUuY2NtLm5vbmNlIHx8IGMtPm1hcmtzLnRhZyB8fCAhYy0+dV9tb2RlLmNjbS5sZW5ndGhzIHx8CisgICAgICBjLT51X21vZGUuY2NtLmFhZGxlbiA+IDApCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1NUQVRFOworICBpZiAoaW5idWZsZW4gPiBjLT51X21vZGUuY2NtLmVuY3J5cHRsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICBlcnIgPSBfZ2NyeV9jaXBoZXJfY3RyX2VuY3J5cHQgKGMsIG91dGJ1Ziwgb3V0YnVmbGVuLCBpbmJ1ZiwgaW5idWZsZW4pOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgYy0+dV9tb2RlLmNjbS5lbmNyeXB0bGVuIC09IGluYnVmbGVuOworICBidXJuID0gZG9fY2JjX21hYyAoYywgb3V0YnVmLCBpbmJ1ZmxlbiwgMCk7CisgIGlmIChidXJuKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyBzaXplb2Yodm9pZCAqKSAqIDUpOworCisgIHJldHVybiBlcnI7Cit9CisKKyNlbHNlCisKKy8qCisgKiBQcm92aWRlIGR1bW15IGZ1bmN0aW9ucyBzbyB0aGF0IHdlIGF2b2lkIGFkZGluZyB0b28gbXVjaCAjaWZkZWZzIGluCisgKiBjaXBoZXIuYy4KKyAqLworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jY21fZW5jcnlwdChnY3J5X2NpcGhlcl9oZF90IGMsIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiwKKwkJCSBzaXplX3Qgb3V0YnVmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwKKwkJCSBzaXplX3QgaW5idWZsZW4pCit7CisgICh2b2lkKWM7CisgICh2b2lkKW91dGJ1ZjsKKyAgKHZvaWQpb3V0YnVmbGVuOworICAodm9pZClpbmJ1ZjsKKyAgKHZvaWQpaW5idWZsZW47CisgIHJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQ7Cit9CisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9kZWNyeXB0KGdjcnlfY2lwaGVyX2hkX3QgYywgdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJIHNpemVfdCBvdXRidWZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLAorCQkJIHNpemVfdCBpbmJ1ZmxlbikKK3sKKyAgKHZvaWQpYzsKKyAgKHZvaWQpb3V0YnVmOworICAodm9pZClvdXRidWZsZW47CisgICh2b2lkKWluYnVmOworICAodm9pZClpbmJ1ZmxlbjsKKyAgcmV0dXJuIEdQR19FUlJfTk9UX1NVUFBPUlRFRDsKK30KKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2NtX3NldF9ub25jZShnY3J5X2NpcGhlcl9oZF90IGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLAorCQkJICAgc2l6ZV90IG5vbmNlbGVuKQoreworICAodm9pZCljOworICAodm9pZClub25jZTsKKyAgKHZvaWQpbm9uY2VsZW47CisgIHJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQ7Cit9CisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9hdXRoZW50aWNhdGUoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLAorCQkJICAgICAgc2l6ZV90IGFidWZsZW4pCit7CisgICh2b2lkKWM7CisgICh2b2lkKWFidWY7CisgICh2b2lkKWFidWZsZW47CisgIHJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQ7Cit9CisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NjbV9nZXRfdGFnKGdjcnlfY2lwaGVyX2hkX3QgYywgdW5zaWduZWQgY2hhciAqb3V0dGFnLAorCQkJIHNpemVfdCB0YWdsZW4pCit7CisgICh2b2lkKWM7CisgICh2b2lkKW91dHRhZzsKKyAgKHZvaWQpdGFnbGVuOworICByZXR1cm4gR1BHX0VSUl9OT1RfU1VQUE9SVEVEOworfQorCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jY21fY2hlY2tfdGFnKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW50YWcsCisJCQkgICBzaXplX3QgdGFnbGVuKQoreworICAodm9pZCljOworICAodm9pZClpbnRhZzsKKyAgKHZvaWQpdGFnbGVuOworICByZXR1cm4gR1BHX0VSUl9OT1RfU1VQUE9SVEVEOworfQorCisjZW5kaWYgLypIQVZFX1U2NF9UWVBFREVGKi8KZGlmZiAtLWdpdCBhL2NpcGhlci9jaXBoZXItY2ZiLmMgYi9jaXBoZXIvY2lwaGVyLWNmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MzlmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2lwaGVyLWNmYi5jCkBAIC0wLDAgKzEsMjI2IEBACisvKiBjaXBoZXItY2ZiLmMgIC0gR2VuZXJpYyBDRkIgbW9kZSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisgKiAgICAgICAgICAgICAgIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdGguaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jZmJfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgKml2cDsKKyAgZ2NyeV9jaXBoZXJfZW5jcnlwdF90IGVuY19mbiA9IGMtPnNwZWMtPmVuY3J5cHQ7CisgIHNpemVfdCBibG9ja3NpemUgPSBjLT5zcGVjLT5ibG9ja3NpemU7CisgIHNpemVfdCBibG9ja3NpemVfeF8yID0gYmxvY2tzaXplICsgYmxvY2tzaXplOworICB1bnNpZ25lZCBpbnQgYnVybiwgbmJ1cm47CisKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisKKyAgaWYgKCBpbmJ1ZmxlbiA8PSBjLT51bnVzZWQgKQorICAgIHsKKyAgICAgIC8qIFNob3J0IGVub3VnaCB0byBiZSBlbmNvZGVkIGJ5IHRoZSByZW1haW5pbmcgWE9SIG1hc2suICovCisgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIElWIGFuZCBzdG9yZSBpbnB1dCBpbnRvIElWLiAqLworICAgICAgaXZwID0gYy0+dV9pdi5pdiArIGJsb2Nrc2l6ZSAtIGMtPnVudXNlZDsKKyAgICAgIGJ1Zl94b3JfMmRzdChvdXRidWYsIGl2cCwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGMtPnVudXNlZCAtPSBpbmJ1ZmxlbjsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBidXJuID0gMDsKKworICBpZiAoIGMtPnVudXNlZCApCisgICAgeworICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBJViBhbmQgc3RvcmUgaW5wdXQgaW50byBJViAqLworICAgICAgaW5idWZsZW4gLT0gYy0+dW51c2VkOworICAgICAgaXZwID0gYy0+dV9pdi5pdiArIGJsb2Nrc2l6ZSAtIGMtPnVudXNlZDsKKyAgICAgIGJ1Zl94b3JfMmRzdChvdXRidWYsIGl2cCwgaW5idWYsIGMtPnVudXNlZCk7CisgICAgICBvdXRidWYgKz0gYy0+dW51c2VkOworICAgICAgaW5idWYgKz0gYy0+dW51c2VkOworICAgICAgYy0+dW51c2VkID0gMDsKKyAgICB9CisKKyAgLyogTm93IHdlIGNhbiBwcm9jZXNzIGNvbXBsZXRlIGJsb2Nrcy4gIFdlIHVzZSBhIGxvb3AgYXMgbG9uZyBhcyB3ZQorICAgICBoYXZlIGF0IGxlYXN0IDIgYmxvY2tzIGFuZCB1c2UgY29uZGl0aW9ucyBmb3IgdGhlIHJlc3QuICBUaGlzCisgICAgIGFsc28gYWxsb3dzIHRvIHVzZSBhIGJ1bGsgZW5jcnlwdGlvbiBmdW5jdGlvbiBpZiBhdmFpbGFibGUuICAqLworICBpZiAoaW5idWZsZW4gPj0gYmxvY2tzaXplX3hfMiAmJiBjLT5idWxrLmNmYl9lbmMpCisgICAgeworICAgICAgc2l6ZV90IG5ibG9ja3MgPSBpbmJ1ZmxlbiAvIGJsb2Nrc2l6ZTsKKyAgICAgIGMtPmJ1bGsuY2ZiX2VuYyAoJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgb3V0YnVmLCBpbmJ1ZiwgbmJsb2Nrcyk7CisgICAgICBvdXRidWYgKz0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgICAgIGluYnVmICArPSBuYmxvY2tzICogYmxvY2tzaXplOworICAgICAgaW5idWZsZW4gLT0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3aGlsZSAoIGluYnVmbGVuID49IGJsb2Nrc2l6ZV94XzIgKQorICAgICAgICB7CisgICAgICAgICAgLyogRW5jcnlwdCB0aGUgSVYuICovCisgICAgICAgICAgbmJ1cm4gPSBlbmNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2ICk7CisgICAgICAgICAgYnVybiA9IG5idXJuID4gYnVybiA/IG5idXJuIDogYnVybjsKKyAgICAgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIElWIGFuZCBzdG9yZSBpbnB1dCBpbnRvIElWLiAgKi8KKyAgICAgICAgICBidWZfeG9yXzJkc3Qob3V0YnVmLCBjLT51X2l2Lml2LCBpbmJ1ZiwgYmxvY2tzaXplKTsKKyAgICAgICAgICBvdXRidWYgKz0gYmxvY2tzaXplOworICAgICAgICAgIGluYnVmICs9IGJsb2Nrc2l6ZTsKKyAgICAgICAgICBpbmJ1ZmxlbiAtPSBibG9ja3NpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCBpbmJ1ZmxlbiA+PSBibG9ja3NpemUgKQorICAgIHsKKyAgICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgSVYgYW5kIHRoZW4gZW5jcnlwdCB0aGUgSVYuICovCisgICAgICBidWZfY3B5KCBjLT5sYXN0aXYsIGMtPnVfaXYuaXYsIGJsb2Nrc2l6ZSApOworICAgICAgbmJ1cm4gPSBlbmNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2ICk7CisgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBJViBhbmQgc3RvcmUgaW5wdXQgaW50byBJViAqLworICAgICAgYnVmX3hvcl8yZHN0KG91dGJ1ZiwgYy0+dV9pdi5pdiwgaW5idWYsIGJsb2Nrc2l6ZSk7CisgICAgICBvdXRidWYgKz0gYmxvY2tzaXplOworICAgICAgaW5idWYgKz0gYmxvY2tzaXplOworICAgICAgaW5idWZsZW4gLT0gYmxvY2tzaXplOworICAgIH0KKyAgaWYgKCBpbmJ1ZmxlbiApCisgICAgeworICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBJViBhbmQgdGhlbiBlbmNyeXB0IHRoZSBJVi4gKi8KKyAgICAgIGJ1Zl9jcHkoIGMtPmxhc3RpdiwgYy0+dV9pdi5pdiwgYmxvY2tzaXplICk7CisgICAgICBuYnVybiA9IGVuY19mbiAoICZjLT5jb250ZXh0LmMsIGMtPnVfaXYuaXYsIGMtPnVfaXYuaXYgKTsKKyAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICBjLT51bnVzZWQgPSBibG9ja3NpemU7CisgICAgICAvKiBBcHBseSB0aGUgWE9SLiAqLworICAgICAgYy0+dW51c2VkIC09IGluYnVmbGVuOworICAgICAgYnVmX3hvcl8yZHN0KG91dGJ1ZiwgYy0+dV9pdi5pdiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIG91dGJ1ZiArPSBpbmJ1ZmxlbjsKKyAgICAgIGluYnVmICs9IGluYnVmbGVuOworICAgICAgaW5idWZsZW4gPSAwOworICAgIH0KKworICBpZiAoYnVybiA+IDApCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIDQgKiBzaXplb2Yodm9pZCAqKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2ZiX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKQoreworICB1bnNpZ25lZCBjaGFyICppdnA7CisgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNfZm4gPSBjLT5zcGVjLT5lbmNyeXB0OworICBzaXplX3QgYmxvY2tzaXplID0gYy0+c3BlYy0+YmxvY2tzaXplOworICBzaXplX3QgYmxvY2tzaXplX3hfMiA9IGJsb2Nrc2l6ZSArIGJsb2Nrc2l6ZTsKKyAgdW5zaWduZWQgaW50IGJ1cm4sIG5idXJuOworCisgIGlmIChvdXRidWZsZW4gPCBpbmJ1ZmxlbikKKyAgICByZXR1cm4gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUOworCisgIGlmIChpbmJ1ZmxlbiA8PSBjLT51bnVzZWQpCisgICAgeworICAgICAgLyogU2hvcnQgZW5vdWdoIHRvIGJlIGVuY29kZWQgYnkgdGhlIHJlbWFpbmluZyBYT1IgbWFzay4gKi8KKyAgICAgIC8qIFhPUiB0aGUgaW5wdXQgd2l0aCB0aGUgSVYgYW5kIHN0b3JlIGlucHV0IGludG8gSVYuICovCisgICAgICBpdnAgPSBjLT51X2l2Lml2ICsgYmxvY2tzaXplIC0gYy0+dW51c2VkOworICAgICAgYnVmX3hvcl9uX2NvcHkob3V0YnVmLCBpdnAsIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBjLT51bnVzZWQgLT0gaW5idWZsZW47CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgYnVybiA9IDA7CisKKyAgaWYgKGMtPnVudXNlZCkKKyAgICB7CisgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIElWIGFuZCBzdG9yZSBpbnB1dCBpbnRvIElWLiAqLworICAgICAgaW5idWZsZW4gLT0gYy0+dW51c2VkOworICAgICAgaXZwID0gYy0+dV9pdi5pdiArIGJsb2Nrc2l6ZSAtIGMtPnVudXNlZDsKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5KG91dGJ1ZiwgaXZwLCBpbmJ1ZiwgYy0+dW51c2VkKTsKKyAgICAgIG91dGJ1ZiArPSBjLT51bnVzZWQ7CisgICAgICBpbmJ1ZiArPSBjLT51bnVzZWQ7CisgICAgICBjLT51bnVzZWQgPSAwOworICAgIH0KKworICAvKiBOb3cgd2UgY2FuIHByb2Nlc3MgY29tcGxldGUgYmxvY2tzLiAgV2UgdXNlIGEgbG9vcCBhcyBsb25nIGFzIHdlCisgICAgIGhhdmUgYXQgbGVhc3QgMiBibG9ja3MgYW5kIHVzZSBjb25kaXRpb25zIGZvciB0aGUgcmVzdC4gIFRoaXMKKyAgICAgYWxzbyBhbGxvd3MgdG8gdXNlIGEgYnVsayBlbmNyeXB0aW9uIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZS4gICovCisgIGlmIChpbmJ1ZmxlbiA+PSBibG9ja3NpemVfeF8yICYmIGMtPmJ1bGsuY2ZiX2RlYykKKyAgICB7CisgICAgICBzaXplX3QgbmJsb2NrcyA9IGluYnVmbGVuIC8gYmxvY2tzaXplOworICAgICAgYy0+YnVsay5jZmJfZGVjICgmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBvdXRidWYsIGluYnVmLCBuYmxvY2tzKTsKKyAgICAgIG91dGJ1ZiArPSBuYmxvY2tzICogYmxvY2tzaXplOworICAgICAgaW5idWYgICs9IG5ibG9ja3MgKiBibG9ja3NpemU7CisgICAgICBpbmJ1ZmxlbiAtPSBuYmxvY2tzICogYmxvY2tzaXplOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHdoaWxlIChpbmJ1ZmxlbiA+PSBibG9ja3NpemVfeF8yICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEVuY3J5cHQgdGhlIElWLiAqLworICAgICAgICAgIG5idXJuID0gZW5jX2ZuICggJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgYy0+dV9pdi5pdiApOworICAgICAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBJViBhbmQgc3RvcmUgaW5wdXQgaW50byBJVi4gKi8KKyAgICAgICAgICBidWZfeG9yX25fY29weShvdXRidWYsIGMtPnVfaXYuaXYsIGluYnVmLCBibG9ja3NpemUpOworICAgICAgICAgIG91dGJ1ZiArPSBibG9ja3NpemU7CisgICAgICAgICAgaW5idWYgKz0gYmxvY2tzaXplOworICAgICAgICAgIGluYnVmbGVuIC09IGJsb2Nrc2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoaW5idWZsZW4gPj0gYmxvY2tzaXplICkKKyAgICB7CisgICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IElWIGFuZCB0aGVuIGVuY3J5cHQgdGhlIElWLiAqLworICAgICAgYnVmX2NweSAoIGMtPmxhc3RpdiwgYy0+dV9pdi5pdiwgYmxvY2tzaXplKTsKKyAgICAgIG5idXJuID0gZW5jX2ZuICggJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgYy0+dV9pdi5pdiApOworICAgICAgYnVybiA9IG5idXJuID4gYnVybiA/IG5idXJuIDogYnVybjsKKyAgICAgIC8qIFhPUiB0aGUgaW5wdXQgd2l0aCB0aGUgSVYgYW5kIHN0b3JlIGlucHV0IGludG8gSVYgKi8KKyAgICAgIGJ1Zl94b3Jfbl9jb3B5KG91dGJ1ZiwgYy0+dV9pdi5pdiwgaW5idWYsIGJsb2Nrc2l6ZSk7CisgICAgICBvdXRidWYgKz0gYmxvY2tzaXplOworICAgICAgaW5idWYgKz0gYmxvY2tzaXplOworICAgICAgaW5idWZsZW4gLT0gYmxvY2tzaXplOworICAgIH0KKworICBpZiAoaW5idWZsZW4pCisgICAgeworICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBJViBhbmQgdGhlbiBlbmNyeXB0IHRoZSBJVi4gKi8KKyAgICAgIGJ1Zl9jcHkgKCBjLT5sYXN0aXYsIGMtPnVfaXYuaXYsIGJsb2Nrc2l6ZSApOworICAgICAgbmJ1cm4gPSBlbmNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2ICk7CisgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgYy0+dW51c2VkID0gYmxvY2tzaXplOworICAgICAgLyogQXBwbHkgdGhlIFhPUi4gKi8KKyAgICAgIGMtPnVudXNlZCAtPSBpbmJ1ZmxlbjsKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5KG91dGJ1ZiwgYy0+dV9pdi5pdiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIG91dGJ1ZiArPSBpbmJ1ZmxlbjsKKyAgICAgIGluYnVmICs9IGluYnVmbGVuOworICAgICAgaW5idWZsZW4gPSAwOworICAgIH0KKworICBpZiAoYnVybiA+IDApCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIDQgKiBzaXplb2Yodm9pZCAqKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvY2lwaGVyLWNtYWMuYyBiL2NpcGhlci9jaXBoZXItY21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDVkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2lwaGVyLWNtYWMuYwpAQCAtMCwwICsxLDIzOCBAQAorLyogY21hYy5jIC0gQ01BQywgQ2lwaGVyLWJhc2VkIE1BQy4KKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJjaXBoZXItaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisKKworI2RlZmluZSBzZXRfYnVybihidXJuLCBuYnVybikgZG8geyBcCisgIHVuc2lnbmVkIGludCBfX25idXJuID0gKG5idXJuKTsgXAorICAoYnVybikgPSAoYnVybikgPiBfX25idXJuID8gKGJ1cm4pIDogX19uYnVybjsgfSB3aGlsZSAoMCkKKworCitzdGF0aWMgdm9pZAorY21hY193cml0ZSAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCBieXRlICogaW5idWYsIHNpemVfdCBpbmxlbikKK3sKKyAgZ2NyeV9jaXBoZXJfZW5jcnlwdF90IGVuY19mbiA9IGMtPnNwZWMtPmVuY3J5cHQ7CisgIGNvbnN0IHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBjLT5zcGVjLT5ibG9ja3NpemU7CisgIGJ5dGUgb3V0YnVmW01BWF9CTE9DS1NJWkVdOworICB1bnNpZ25lZCBpbnQgYnVybiA9IDA7CisgIHVuc2lnbmVkIGludCBuYmxvY2tzOworCisgIGlmICghaW5sZW4gfHwgIWluYnVmKQorICAgIHJldHVybjsKKworICAvKiBMYXN0IGJsb2NrIGlzIG5lZWRlZCBmb3IgY21hY19maW5hbC4gICovCisgIGlmIChjLT51bnVzZWQgKyBpbmxlbiA8PSBibG9ja3NpemUpCisgICAgeworICAgICAgZm9yICg7IGlubGVuICYmIGMtPnVudXNlZCA8IGJsb2Nrc2l6ZTsgaW5sZW4tLSkKKyAgICAgICAgYy0+bGFzdGl2W2MtPnVudXNlZCsrXSA9ICppbmJ1ZisrOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoYy0+dW51c2VkKQorICAgIHsKKyAgICAgIGZvciAoOyBpbmxlbiAmJiBjLT51bnVzZWQgPCBibG9ja3NpemU7IGlubGVuLS0pCisgICAgICAgIGMtPmxhc3RpdltjLT51bnVzZWQrK10gPSAqaW5idWYrKzsKKworICAgICAgYnVmX3hvciAoYy0+dV9pdi5pdiwgYy0+dV9pdi5pdiwgYy0+bGFzdGl2LCBibG9ja3NpemUpOworICAgICAgc2V0X2J1cm4gKGJ1cm4sIGVuY19mbiAoJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgYy0+dV9pdi5pdikpOworCisgICAgICBjLT51bnVzZWQgPSAwOworICAgIH0KKworICBpZiAoYy0+YnVsay5jYmNfZW5jICYmIGlubGVuID4gYmxvY2tzaXplKQorICAgIHsKKyAgICAgIG5ibG9ja3MgPSBpbmxlbiAvIGJsb2Nrc2l6ZTsKKyAgICAgIG5ibG9ja3MgLT0gKG5ibG9ja3MgKiBibG9ja3NpemUgPT0gaW5sZW4pOworCisgICAgICBjLT5idWxrLmNiY19lbmMgKCZjLT5jb250ZXh0LmMsIGMtPnVfaXYuaXYsIG91dGJ1ZiwgaW5idWYsIG5ibG9ja3MsIDEpOworICAgICAgaW5idWYgKz0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgICAgIGlubGVuIC09IG5ibG9ja3MgKiBibG9ja3NpemU7CisKKyAgICAgIHdpcGVtZW1vcnkgKG91dGJ1Ziwgc2l6ZW9mIChvdXRidWYpKTsKKyAgICB9CisgIGVsc2UKKyAgICB3aGlsZSAoaW5sZW4gPiBibG9ja3NpemUpCisgICAgICB7CisgICAgICAgIGJ1Zl94b3IgKGMtPnVfaXYuaXYsIGMtPnVfaXYuaXYsIGluYnVmLCBibG9ja3NpemUpOworICAgICAgICBzZXRfYnVybiAoYnVybiwgZW5jX2ZuICgmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2KSk7CisgICAgICAgIGlubGVuIC09IGJsb2Nrc2l6ZTsKKyAgICAgICAgaW5idWYgKz0gYmxvY2tzaXplOworICAgICAgfQorCisgIC8qIE1ha2Ugc3VyZSB0aGF0IGxhc3QgYmxvY2sgaXMgcGFzc2VkIHRvIGNtYWNfZmluYWwuICAqLworICBpZiAoaW5sZW4gPT0gMCkKKyAgICBCVUcgKCk7CisKKyAgZm9yICg7IGlubGVuICYmIGMtPnVudXNlZCA8IGJsb2Nrc2l6ZTsgaW5sZW4tLSkKKyAgICBjLT5sYXN0aXZbYy0+dW51c2VkKytdID0gKmluYnVmKys7CisKKyAgaWYgKGJ1cm4pCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIDQgKiBzaXplb2YgKHZvaWQgKikpOworfQorCisKK3N0YXRpYyB2b2lkCitjbWFjX2dlbmVyYXRlX3N1YmtleXMgKGdjcnlfY2lwaGVyX2hkX3QgYykKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGMtPnNwZWMtPmJsb2Nrc2l6ZTsKKyAgYnl0ZSByYiwgY2FycnksIHQsIGJpOworICB1bnNpZ25lZCBpbnQgYnVybjsKKyAgaW50IGksIGo7CisgIHVuaW9uCisgIHsKKyAgICBzaXplX3QgX2FsaWduZWQ7CisgICAgYnl0ZSBidWZbTUFYX0JMT0NLU0laRV07CisgIH0gdTsKKworICBpZiAoTUFYX0JMT0NLU0laRSA8IGJsb2Nrc2l6ZSkKKyAgICBCVUcgKCk7CisKKyAgLyogZW5jcnlwdCB6ZXJvIGJsb2NrICovCisgIG1lbXNldCAodS5idWYsIDAsIGJsb2Nrc2l6ZSk7CisgIGJ1cm4gPSBjLT5zcGVjLT5lbmNyeXB0ICgmYy0+Y29udGV4dC5jLCB1LmJ1ZiwgdS5idWYpOworCisgIC8qIEN1cnJlbnRseSBzdXBwb3J0ZWQgYmxvY2tzaXplcyBhcmUgMTYgYW5kIDguICovCisgIHJiID0gYmxvY2tzaXplID09IDE2ID8gMHg4NyA6IDB4MUIgLypibG9ja3NpemUgPT0gOCAqLyA7CisKKyAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKyAgICB7CisgICAgICAvKiBHZW5lcmF0ZSBzdWJrZXlzIEsxIGFuZCBLMiAqLworICAgICAgY2FycnkgPSAwOworICAgICAgZm9yIChpID0gYmxvY2tzaXplIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICBiaSA9IHUuYnVmW2ldOworICAgICAgICAgIHQgPSBjYXJyeSB8IChiaSA8PCAxKTsKKyAgICAgICAgICBjYXJyeSA9IGJpID4+IDc7CisgICAgICAgICAgdS5idWZbaV0gPSB0ICYgMHhmZjsKKyAgICAgICAgICBjLT51X21vZGUuY21hYy5zdWJrZXlzW2pdW2ldID0gdS5idWZbaV07CisgICAgICAgIH0KKyAgICAgIHUuYnVmW2Jsb2Nrc2l6ZSAtIDFdIF49IGNhcnJ5ID8gcmIgOiAwOworICAgICAgYy0+dV9tb2RlLmNtYWMuc3Via2V5c1tqXVtibG9ja3NpemUgLSAxXSA9IHUuYnVmW2Jsb2Nrc2l6ZSAtIDFdOworICAgIH0KKworICB3aXBlbWVtb3J5ICgmdSwgc2l6ZW9mICh1KSk7CisgIGlmIChidXJuKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyA0ICogc2l6ZW9mICh2b2lkICopKTsKK30KKworCitzdGF0aWMgdm9pZAorY21hY19maW5hbCAoZ2NyeV9jaXBoZXJfaGRfdCBjKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gYy0+c3BlYy0+YmxvY2tzaXplOworICB1bnNpZ25lZCBpbnQgY291bnQgPSBjLT51bnVzZWQ7CisgIHVuc2lnbmVkIGludCBidXJuOworICBieXRlICpzdWJrZXk7CisKKyAgaWYgKGNvdW50ID09IGJsb2Nrc2l6ZSkKKyAgICBzdWJrZXkgPSBjLT51X21vZGUuY21hYy5zdWJrZXlzWzBdOyAgICAgICAgLyogSzEgKi8KKyAgZWxzZQorICAgIHsKKyAgICAgIHN1YmtleSA9IGMtPnVfbW9kZS5jbWFjLnN1YmtleXNbMV07ICAgICAgLyogSzIgKi8KKyAgICAgIGMtPmxhc3Rpdltjb3VudCsrXSA9IDB4ODA7CisgICAgICB3aGlsZSAoY291bnQgPCBibG9ja3NpemUpCisgICAgICAgIGMtPmxhc3Rpdltjb3VudCsrXSA9IDA7CisgICAgfQorCisgIGJ1Zl94b3IgKGMtPmxhc3RpdiwgYy0+bGFzdGl2LCBzdWJrZXksIGJsb2Nrc2l6ZSk7CisKKyAgYnVmX3hvciAoYy0+dV9pdi5pdiwgYy0+dV9pdi5pdiwgYy0+bGFzdGl2LCBibG9ja3NpemUpOworICBidXJuID0gYy0+c3BlYy0+ZW5jcnlwdCAoJmMtPmNvbnRleHQuYywgYy0+dV9pdi5pdiwgYy0+dV9pdi5pdik7CisgIGlmIChidXJuKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyA0ICogc2l6ZW9mICh2b2lkICopKTsKKworICBjLT51bnVzZWQgPSAwOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NtYWNfdGFnIChnY3J5X2NpcGhlcl9oZF90IGMsIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ2xlbiwgaW50IGNoZWNrKQoreworICBpZiAoIXRhZyB8fCB0YWdsZW4gPT0gMCB8fCB0YWdsZW4gPiBjLT5zcGVjLT5ibG9ja3NpemUpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICBpZiAoIWMtPnVfbW9kZS5jbWFjLnRhZykKKyAgICB7CisgICAgICBjbWFjX2ZpbmFsIChjKTsKKyAgICAgIGMtPnVfbW9kZS5jbWFjLnRhZyA9IDE7CisgICAgfQorCisgIGlmICghY2hlY2spCisgICAgeworICAgICAgbWVtY3B5ICh0YWcsIGMtPnVfaXYuaXYsIHRhZ2xlbik7CisgICAgICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gYnVmX2VxX2NvbnN0ICh0YWcsIGMtPnVfaXYuaXYsIHRhZ2xlbikgPworICAgICAgICBHUEdfRVJSX05PX0VSUk9SIDogR1BHX0VSUl9DSEVDS1NVTTsKKyAgICB9Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY21hY19hdXRoZW50aWNhdGUgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1Ziwgc2l6ZV90IGFidWZsZW4pCit7CisgIGlmIChhYnVmbGVuID4gMCAmJiAhYWJ1ZikKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworICBpZiAoYy0+dV9tb2RlLmNtYWMudGFnKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9TVEFURTsKKyAgLyogVG8gc3VwcG9ydCBuZXcgYmxvY2tzaXplLCB1cGRhdGUgY21hY19nZW5lcmF0ZV9zdWJrZXlzKCkgdGhlbiBhZGQgbmV3CisgICAgIGJsb2Nrc2l6ZSBoZXJlLiAqLworICBpZiAoYy0+c3BlYy0+YmxvY2tzaXplICE9IDE2ICYmIGMtPnNwZWMtPmJsb2Nrc2l6ZSAhPSA4KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKworICBjbWFjX3dyaXRlIChjLCBhYnVmLCBhYnVmbGVuKTsKKworICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jbWFjX2dldF90YWcgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHRhZywgc2l6ZV90IHRhZ2xlbikKK3sKKyAgcmV0dXJuIGNtYWNfdGFnIChjLCBvdXR0YWcsIHRhZ2xlbiwgMCk7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY21hY19jaGVja190YWcgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW50YWcsIHNpemVfdCB0YWdsZW4pCit7CisgIHJldHVybiBjbWFjX3RhZyAoYywgKHVuc2lnbmVkIGNoYXIgKikgaW50YWcsIHRhZ2xlbiwgMSk7Cit9CisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2NtYWNfc2V0X3N1YmtleXMgKGdjcnlfY2lwaGVyX2hkX3QgYykKK3sKKyAgY21hY19nZW5lcmF0ZV9zdWJrZXlzIChjKTsKKworICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9jaXBoZXItY3RyLmMgYi9jaXBoZXIvY2lwaGVyLWN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzEzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2lwaGVyLWN0ci5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBjaXBoZXItY3RyLmMgIC0gR2VuZXJpYyBDVFIgbW9kZSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisgKiAgICAgICAgICAgICAgIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdGguaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pCit7CisgIHNpemVfdCBuOworICBpbnQgaTsKKyAgZ2NyeV9jaXBoZXJfZW5jcnlwdF90IGVuY19mbiA9IGMtPnNwZWMtPmVuY3J5cHQ7CisgIHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBjLT5zcGVjLT5ibG9ja3NpemU7CisgIHNpemVfdCBuYmxvY2tzOworICB1bnNpZ25lZCBpbnQgYnVybiwgbmJ1cm47CisKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisKKyAgYnVybiA9IDA7CisKKyAgLyogRmlyc3QgcHJvY2VzcyBhIGxlZnQgb3ZlciBlbmNyeXB0ZWQgY291bnRlci4gICovCisgIGlmIChjLT51bnVzZWQpCisgICAgeworICAgICAgZ2NyeV9hc3NlcnQgKGMtPnVudXNlZCA8IGJsb2Nrc2l6ZSk7CisgICAgICBpID0gYmxvY2tzaXplIC0gYy0+dW51c2VkOworICAgICAgbiA9IGMtPnVudXNlZCA+IGluYnVmbGVuID8gaW5idWZsZW4gOiBjLT51bnVzZWQ7CisgICAgICBidWZfeG9yKG91dGJ1ZiwgaW5idWYsICZjLT5sYXN0aXZbaV0sIG4pOworICAgICAgYy0+dW51c2VkIC09IG47CisgICAgICBpbmJ1ZiAgKz0gbjsKKyAgICAgIG91dGJ1ZiArPSBuOworICAgICAgaW5idWZsZW4gLT0gbjsKKyAgICB9CisKKyAgLyogVXNlIGEgYnVsayBtZXRob2QgaWYgYXZhaWxhYmxlLiAgKi8KKyAgbmJsb2NrcyA9IGluYnVmbGVuIC8gYmxvY2tzaXplOworICBpZiAobmJsb2NrcyAmJiBjLT5idWxrLmN0cl9lbmMpCisgICAgeworICAgICAgYy0+YnVsay5jdHJfZW5jICgmYy0+Y29udGV4dC5jLCBjLT51X2N0ci5jdHIsIG91dGJ1ZiwgaW5idWYsIG5ibG9ja3MpOworICAgICAgaW5idWYgICs9IG5ibG9ja3MgKiBibG9ja3NpemU7CisgICAgICBvdXRidWYgKz0gbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgICAgIGluYnVmbGVuIC09IG5ibG9ja3MgKiBibG9ja3NpemU7CisgICAgfQorCisgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBidWxrIG1ldGhvZCB1c2UgdGhlIHN0YW5kYXJkIG1ldGhvZC4gIFdlIGFsc28KKyAgICAgdXNlIHRoaXMgbWV0aG9kIGZvciB0aGUgYSByZW1haW5pbmcgcGFydGlhbCBibG9jay4gICovCisgIGlmIChpbmJ1ZmxlbikKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIHRtcFtNQVhfQkxPQ0tTSVpFXTsKKworICAgICAgZG8geworICAgICAgICBuYnVybiA9IGVuY19mbiAoJmMtPmNvbnRleHQuYywgdG1wLCBjLT51X2N0ci5jdHIpOworICAgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworCisgICAgICAgIGZvciAoaSA9IGJsb2Nrc2l6ZTsgaSA+IDA7IGktLSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjLT51X2N0ci5jdHJbaS0xXSsrOworICAgICAgICAgICAgaWYgKGMtPnVfY3RyLmN0cltpLTFdICE9IDApCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBuID0gYmxvY2tzaXplIDwgaW5idWZsZW4gPyBibG9ja3NpemUgOiBpbmJ1ZmxlbjsKKyAgICAgICAgYnVmX3hvcihvdXRidWYsIGluYnVmLCB0bXAsIG4pOworCisgICAgICAgIGluYnVmbGVuIC09IG47CisgICAgICAgIG91dGJ1ZiArPSBuOworICAgICAgICBpbmJ1ZiArPSBuOworICAgICAgfSB3aGlsZSAoaW5idWZsZW4pOworCisgICAgICAvKiBTYXZlIHRoZSB1bnVzZWQgYnl0ZXMgb2YgdGhlIGNvdW50ZXIuICAqLworICAgICAgYy0+dW51c2VkID0gYmxvY2tzaXplIC0gbjsKKyAgICAgIGlmIChjLT51bnVzZWQpCisgICAgICAgIGJ1Zl9jcHkgKGMtPmxhc3RpdituLCB0bXArbiwgYy0+dW51c2VkKTsKKworICAgICAgd2lwZW1lbW9yeSAodG1wLCBzaXplb2YgdG1wKTsKKyAgICB9CisKKyAgaWYgKGJ1cm4gPiAwKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyA0ICogc2l6ZW9mKHZvaWQgKikpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NpcGhlci1nY20uYyBiL2NpcGhlci9jaXBoZXItZ2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3ZTMzNwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jaXBoZXItZ2NtLmMKQEAgLTAsMCArMSwxMTgwIEBACisvKiBjaXBoZXItZ2NtLmMgIC0gR2VuZXJpYyBHYWxvaXMgQ291bnRlciBNb2RlIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImF0aC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICIuL2NpcGhlci1pbnRlcm5hbC5oIgorCisjaWZkZWYgR0NNX1VTRV9UQUJMRVMKK3N0YXRpYyBjb25zdCB1MTYgZ2NtUlsyNTZdID0geworICAweDAwMDAsIDB4MDFjMiwgMHgwMzg0LCAweDAyNDYsIDB4MDcwOCwgMHgwNmNhLCAweDA0OGMsIDB4MDU0ZSwKKyAgMHgwZTEwLCAweDBmZDIsIDB4MGQ5NCwgMHgwYzU2LCAweDA5MTgsIDB4MDhkYSwgMHgwYTljLCAweDBiNWUsCisgIDB4MWMyMCwgMHgxZGUyLCAweDFmYTQsIDB4MWU2NiwgMHgxYjI4LCAweDFhZWEsIDB4MThhYywgMHgxOTZlLAorICAweDEyMzAsIDB4MTNmMiwgMHgxMWI0LCAweDEwNzYsIDB4MTUzOCwgMHgxNGZhLCAweDE2YmMsIDB4MTc3ZSwKKyAgMHgzODQwLCAweDM5ODIsIDB4M2JjNCwgMHgzYTA2LCAweDNmNDgsIDB4M2U4YSwgMHgzY2NjLCAweDNkMGUsCisgIDB4MzY1MCwgMHgzNzkyLCAweDM1ZDQsIDB4MzQxNiwgMHgzMTU4LCAweDMwOWEsIDB4MzJkYywgMHgzMzFlLAorICAweDI0NjAsIDB4MjVhMiwgMHgyN2U0LCAweDI2MjYsIDB4MjM2OCwgMHgyMmFhLCAweDIwZWMsIDB4MjEyZSwKKyAgMHgyYTcwLCAweDJiYjIsIDB4MjlmNCwgMHgyODM2LCAweDJkNzgsIDB4MmNiYSwgMHgyZWZjLCAweDJmM2UsCisgIDB4NzA4MCwgMHg3MTQyLCAweDczMDQsIDB4NzJjNiwgMHg3Nzg4LCAweDc2NGEsIDB4NzQwYywgMHg3NWNlLAorICAweDdlOTAsIDB4N2Y1MiwgMHg3ZDE0LCAweDdjZDYsIDB4Nzk5OCwgMHg3ODVhLCAweDdhMWMsIDB4N2JkZSwKKyAgMHg2Y2EwLCAweDZkNjIsIDB4NmYyNCwgMHg2ZWU2LCAweDZiYTgsIDB4NmE2YSwgMHg2ODJjLCAweDY5ZWUsCisgIDB4NjJiMCwgMHg2MzcyLCAweDYxMzQsIDB4NjBmNiwgMHg2NWI4LCAweDY0N2EsIDB4NjYzYywgMHg2N2ZlLAorICAweDQ4YzAsIDB4NDkwMiwgMHg0YjQ0LCAweDRhODYsIDB4NGZjOCwgMHg0ZTBhLCAweDRjNGMsIDB4NGQ4ZSwKKyAgMHg0NmQwLCAweDQ3MTIsIDB4NDU1NCwgMHg0NDk2LCAweDQxZDgsIDB4NDAxYSwgMHg0MjVjLCAweDQzOWUsCisgIDB4NTRlMCwgMHg1NTIyLCAweDU3NjQsIDB4NTZhNiwgMHg1M2U4LCAweDUyMmEsIDB4NTA2YywgMHg1MWFlLAorICAweDVhZjAsIDB4NWIzMiwgMHg1OTc0LCAweDU4YjYsIDB4NWRmOCwgMHg1YzNhLCAweDVlN2MsIDB4NWZiZSwKKyAgMHhlMTAwLCAweGUwYzIsIDB4ZTI4NCwgMHhlMzQ2LCAweGU2MDgsIDB4ZTdjYSwgMHhlNThjLCAweGU0NGUsCisgIDB4ZWYxMCwgMHhlZWQyLCAweGVjOTQsIDB4ZWQ1NiwgMHhlODE4LCAweGU5ZGEsIDB4ZWI5YywgMHhlYTVlLAorICAweGZkMjAsIDB4ZmNlMiwgMHhmZWE0LCAweGZmNjYsIDB4ZmEyOCwgMHhmYmVhLCAweGY5YWMsIDB4Zjg2ZSwKKyAgMHhmMzMwLCAweGYyZjIsIDB4ZjBiNCwgMHhmMTc2LCAweGY0MzgsIDB4ZjVmYSwgMHhmN2JjLCAweGY2N2UsCisgIDB4ZDk0MCwgMHhkODgyLCAweGRhYzQsIDB4ZGIwNiwgMHhkZTQ4LCAweGRmOGEsIDB4ZGRjYywgMHhkYzBlLAorICAweGQ3NTAsIDB4ZDY5MiwgMHhkNGQ0LCAweGQ1MTYsIDB4ZDA1OCwgMHhkMTlhLCAweGQzZGMsIDB4ZDIxZSwKKyAgMHhjNTYwLCAweGM0YTIsIDB4YzZlNCwgMHhjNzI2LCAweGMyNjgsIDB4YzNhYSwgMHhjMWVjLCAweGMwMmUsCisgIDB4Y2I3MCwgMHhjYWIyLCAweGM4ZjQsIDB4YzkzNiwgMHhjYzc4LCAweGNkYmEsIDB4Y2ZmYywgMHhjZTNlLAorICAweDkxODAsIDB4OTA0MiwgMHg5MjA0LCAweDkzYzYsIDB4OTY4OCwgMHg5NzRhLCAweDk1MGMsIDB4OTRjZSwKKyAgMHg5ZjkwLCAweDllNTIsIDB4OWMxNCwgMHg5ZGQ2LCAweDk4OTgsIDB4OTk1YSwgMHg5YjFjLCAweDlhZGUsCisgIDB4OGRhMCwgMHg4YzYyLCAweDhlMjQsIDB4OGZlNiwgMHg4YWE4LCAweDhiNmEsIDB4ODkyYywgMHg4OGVlLAorICAweDgzYjAsIDB4ODI3MiwgMHg4MDM0LCAweDgxZjYsIDB4ODRiOCwgMHg4NTdhLCAweDg3M2MsIDB4ODZmZSwKKyAgMHhhOWMwLCAweGE4MDIsIDB4YWE0NCwgMHhhYjg2LCAweGFlYzgsIDB4YWYwYSwgMHhhZDRjLCAweGFjOGUsCisgIDB4YTdkMCwgMHhhNjEyLCAweGE0NTQsIDB4YTU5NiwgMHhhMGQ4LCAweGExMWEsIDB4YTM1YywgMHhhMjllLAorICAweGI1ZTAsIDB4YjQyMiwgMHhiNjY0LCAweGI3YTYsIDB4YjJlOCwgMHhiMzJhLCAweGIxNmMsIDB4YjBhZSwKKyAgMHhiYmYwLCAweGJhMzIsIDB4Yjg3NCwgMHhiOWI2LCAweGJjZjgsIDB4YmQzYSwgMHhiZjdjLCAweGJlYmUsCit9OworCisjaWZkZWYgR0NNX1RBQkxFU19VU0VfVTY0CitzdGF0aWMgdm9pZAorYnNoaWZ0ICh1NjQgKiBiMCwgdTY0ICogYjEpCit7CisgIHU2NCB0WzJdLCBtYXNrOworCisgIHRbMF0gPSAqYjA7CisgIHRbMV0gPSAqYjE7CisgIG1hc2sgPSB0WzFdICYgMSA/IDB4ZTEgOiAwOworICBtYXNrIDw8PSA1NjsKKworICAqYjEgPSAodFsxXSA+PiAxKSBeICh0WzBdIDw8IDYzKTsKKyAgKmIwID0gKHRbMF0gPj4gMSkgXiBtYXNrOworfQorCitzdGF0aWMgdm9pZAorZG9fZmlsbE0gKHVuc2lnbmVkIGNoYXIgKmgsIHU2NCAqTSkKK3sKKyAgaW50IGksIGo7CisKKyAgTVswICsgMF0gPSAwOworICBNWzAgKyAxNl0gPSAwOworCisgIE1bOCArIDBdID0gYnVmX2dldF9iZTY0IChoICsgMCk7CisgIE1bOCArIDE2XSA9IGJ1Zl9nZXRfYmU2NCAoaCArIDgpOworCisgIGZvciAoaSA9IDQ7IGkgPiAwOyBpIC89IDIpCisgICAgeworICAgICAgTVtpICsgMF0gPSBNWzIgKiBpICsgMF07CisgICAgICBNW2kgKyAxNl0gPSBNWzIgKiBpICsgMTZdOworCisgICAgICBic2hpZnQgKCZNW2ldLCAmTVtpICsgMTZdKTsKKyAgICB9CisKKyAgZm9yIChpID0gMjsgaSA8IDE2OyBpICo9IDIpCisgICAgZm9yIChqID0gMTsgaiA8IGk7IGorKykKKyAgICAgIHsKKyAgICAgICAgTVsoaSArIGopICsgMF0gPSBNW2kgKyAwXSBeIE1baiArIDBdOworICAgICAgICBNWyhpICsgaikgKyAxNl0gPSBNW2kgKyAxNl0gXiBNW2ogKyAxNl07CisgICAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citkb19naGFzaCAodW5zaWduZWQgY2hhciAqcmVzdWx0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGNvbnN0IHU2NCAqZ2NtTSkKK3sKKyAgdTY0IFZbMl07CisgIHU2NCB0bXBbMl07CisgIGNvbnN0IHU2NCAqTTsKKyAgdTY0IFQ7CisgIHUzMiBBOworICBpbnQgaTsKKworICBidWZfeG9yIChWLCByZXN1bHQsIGJ1ZiwgMTYpOworICBWWzBdID0gYmVfYnN3YXA2NCAoVlswXSk7CisgIFZbMV0gPSBiZV9ic3dhcDY0IChWWzFdKTsKKworICAvKiBGaXJzdCByb3VuZCBjYW4gYmUgbWFudWFsbHkgdHdlYWtlZCBiYXNlZCBvbiBmYWN0IHRoYXQgJ3RtcCcgaXMgemVyby4gKi8KKyAgaSA9IDE1OworCisgIE0gPSAmZ2NtTVsoVlsxXSAmIDB4ZildOworICBWWzFdID4+PSA0OworICB0bXBbMF0gPSAoTVswXSA+PiA0KSBeICgodTY0KSBnY21SWyhNWzE2XSAmIDB4ZikgPDwgNF0gPDwgNDgpOworICB0bXBbMV0gPSAoTVsxNl0gPj4gNCkgXiAoTVswXSA8PCA2MCk7CisgIHRtcFswXSBePSBnY21NWyhWWzFdICYgMHhmKSArIDBdOworICB0bXBbMV0gXj0gZ2NtTVsoVlsxXSAmIDB4ZikgKyAxNl07CisgIFZbMV0gPj49IDQ7CisKKyAgLS1pOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBNID0gJmdjbU1bKFZbMV0gJiAweGYpXTsKKyAgICAgIFZbMV0gPj49IDQ7CisKKyAgICAgIEEgPSB0bXBbMV0gJiAweGZmOworICAgICAgVCA9IHRtcFswXTsKKyAgICAgIHRtcFswXSA9IChUID4+IDgpIF4gKCh1NjQpIGdjbVJbQV0gPDwgNDgpIF4gZ2NtTVsoVlsxXSAmIDB4ZikgKyAwXTsKKyAgICAgIHRtcFsxXSA9IChUIDw8IDU2KSBeICh0bXBbMV0gPj4gOCkgXiBnY21NWyhWWzFdICYgMHhmKSArIDE2XTsKKworICAgICAgdG1wWzBdIF49IChNWzBdID4+IDQpIF4gKCh1NjQpIGdjbVJbKE1bMTZdICYgMHhmKSA8PCA0XSA8PCA0OCk7CisgICAgICB0bXBbMV0gXj0gKE1bMTZdID4+IDQpIF4gKE1bMF0gPDwgNjApOworCisgICAgICBpZiAoaSA9PSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGVsc2UgaWYgKGkgPT0gOCkKKyAgICAgICAgVlsxXSA9IFZbMF07CisgICAgICBlbHNlCisgICAgICAgIFZbMV0gPj49IDQ7CisgICAgICAtLWk7CisgICAgfQorCisgIGJ1Zl9wdXRfYmU2NCAocmVzdWx0ICsgMCwgdG1wWzBdKTsKKyAgYnVmX3B1dF9iZTY0IChyZXN1bHQgKyA4LCB0bXBbMV0pOworCisgIHJldHVybiAoc2l6ZW9mKFYpICsgc2l6ZW9mKFQpICsgc2l6ZW9mKHRtcCkgKworICAgICAgICAgIHNpemVvZihpbnQpKjIgKyBzaXplb2Yodm9pZCopKjUpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZAorYnNoaWZ0ICh1MzIgKiBNLCBpbnQgaSkKK3sKKyAgdTMyIHRbNF0sIG1hc2s7CisKKyAgdFswXSA9IE1baSAqIDQgKyAwXTsKKyAgdFsxXSA9IE1baSAqIDQgKyAxXTsKKyAgdFsyXSA9IE1baSAqIDQgKyAyXTsKKyAgdFszXSA9IE1baSAqIDQgKyAzXTsKKyAgbWFzayA9IHRbM10gJiAxID8gMHhlMSA6IDA7CisKKyAgTVtpICogNCArIDNdID0gKHRbM10gPj4gMSkgXiAodFsyXSA8PCAzMSk7CisgIE1baSAqIDQgKyAyXSA9ICh0WzJdID4+IDEpIF4gKHRbMV0gPDwgMzEpOworICBNW2kgKiA0ICsgMV0gPSAodFsxXSA+PiAxKSBeICh0WzBdIDw8IDMxKTsKKyAgTVtpICogNCArIDBdID0gKHRbMF0gPj4gMSkgXiAobWFzayA8PCAyNCk7Cit9CisKK3N0YXRpYyB2b2lkCitkb19maWxsTSAodW5zaWduZWQgY2hhciAqaCwgdTMyICpNKQoreworICBpbnQgaSwgajsKKworICBNWzAgKiA0ICsgMF0gPSAwOworICBNWzAgKiA0ICsgMV0gPSAwOworICBNWzAgKiA0ICsgMl0gPSAwOworICBNWzAgKiA0ICsgM10gPSAwOworCisgIE1bOCAqIDQgKyAwXSA9IGJ1Zl9nZXRfYmUzMiAoaCArIDApOworICBNWzggKiA0ICsgMV0gPSBidWZfZ2V0X2JlMzIgKGggKyA0KTsKKyAgTVs4ICogNCArIDJdID0gYnVmX2dldF9iZTMyIChoICsgOCk7CisgIE1bOCAqIDQgKyAzXSA9IGJ1Zl9nZXRfYmUzMiAoaCArIDEyKTsKKworICBmb3IgKGkgPSA0OyBpID4gMDsgaSAvPSAyKQorICAgIHsKKyAgICAgIE1baSAqIDQgKyAwXSA9IE1bMiAqIGkgKiA0ICsgMF07CisgICAgICBNW2kgKiA0ICsgMV0gPSBNWzIgKiBpICogNCArIDFdOworICAgICAgTVtpICogNCArIDJdID0gTVsyICogaSAqIDQgKyAyXTsKKyAgICAgIE1baSAqIDQgKyAzXSA9IE1bMiAqIGkgKiA0ICsgM107CisKKyAgICAgIGJzaGlmdCAoTSwgaSk7CisgICAgfQorCisgIGZvciAoaSA9IDI7IGkgPCAxNjsgaSAqPSAyKQorICAgIGZvciAoaiA9IDE7IGogPCBpOyBqKyspCisgICAgICB7CisgICAgICAgIE1bKGkgKyBqKSAqIDQgKyAwXSA9IE1baSAqIDQgKyAwXSBeIE1baiAqIDQgKyAwXTsKKyAgICAgICAgTVsoaSArIGopICogNCArIDFdID0gTVtpICogNCArIDFdIF4gTVtqICogNCArIDFdOworICAgICAgICBNWyhpICsgaikgKiA0ICsgMl0gPSBNW2kgKiA0ICsgMl0gXiBNW2ogKiA0ICsgMl07CisgICAgICAgIE1bKGkgKyBqKSAqIDQgKyAzXSA9IE1baSAqIDQgKyAzXSBeIE1baiAqIDQgKyAzXTsKKyAgICAgIH0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2RvX2doYXNoICh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgY29uc3QgdTMyICpnY21NKQoreworICBieXRlIFZbMTZdOworICB1MzIgdG1wWzRdOworICB1MzIgdjsKKyAgY29uc3QgdTMyICpNLCAqbTsKKyAgdTMyIFRbM107CisgIGludCBpOworCisgIGJ1Zl94b3IgKFYsIHJlc3VsdCwgYnVmLCAxNik7IC8qIFYgaXMgYmlnLWVuZGlhbiAqLworCisgIC8qIEZpcnN0IHJvdW5kIGNhbiBiZSBtYW51YWxseSB0d2Vha2VkIGJhc2VkIG9uIGZhY3QgdGhhdCAndG1wJyBpcyB6ZXJvLiAqLworICBpID0gMTU7CisKKyAgdiA9IFZbaV07CisgIE0gPSAmZ2NtTVsodiAmIDB4ZikgKiA0XTsKKyAgdiA9ICh2ICYgMHhmMCkgPj4gNDsKKyAgbSA9ICZnY21NW3YgKiA0XTsKKyAgdiA9IFZbLS1pXTsKKworICB0bXBbMF0gPSAoTVswXSA+PiA0KSBeICgodTY0KSBnY21SWyhNWzNdIDw8IDQpICYgMHhmMF0gPDwgMTYpIF4gbVswXTsKKyAgdG1wWzFdID0gKE1bMV0gPj4gNCkgXiAoTVswXSA8PCAyOCkgXiBtWzFdOworICB0bXBbMl0gPSAoTVsyXSA+PiA0KSBeIChNWzFdIDw8IDI4KSBeIG1bMl07CisgIHRtcFszXSA9IChNWzNdID4+IDQpIF4gKE1bMl0gPDwgMjgpIF4gbVszXTsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBNID0gJmdjbU1bKHYgJiAweGYpICogNF07CisgICAgICB2ID0gKHYgJiAweGYwKSA+PiA0OworICAgICAgbSA9ICZnY21NW3YgKiA0XTsKKworICAgICAgVFswXSA9IHRtcFswXTsKKyAgICAgIFRbMV0gPSB0bXBbMV07CisgICAgICBUWzJdID0gdG1wWzJdOworICAgICAgdG1wWzBdID0gKFRbMF0gPj4gOCkgXiAoKHUzMikgZ2NtUlt0bXBbM10gJiAweGZmXSA8PCAxNikgXiBtWzBdOworICAgICAgdG1wWzFdID0gKFRbMF0gPDwgMjQpIF4gKHRtcFsxXSA+PiA4KSBeIG1bMV07CisgICAgICB0bXBbMl0gPSAoVFsxXSA8PCAyNCkgXiAodG1wWzJdID4+IDgpIF4gbVsyXTsKKyAgICAgIHRtcFszXSA9IChUWzJdIDw8IDI0KSBeICh0bXBbM10gPj4gOCkgXiBtWzNdOworCisgICAgICB0bXBbMF0gXj0gKE1bMF0gPj4gNCkgXiAoKHU2NCkgZ2NtUlsoTVszXSA8PCA0KSAmIDB4ZjBdIDw8IDE2KTsKKyAgICAgIHRtcFsxXSBePSAoTVsxXSA+PiA0KSBeIChNWzBdIDw8IDI4KTsKKyAgICAgIHRtcFsyXSBePSAoTVsyXSA+PiA0KSBeIChNWzFdIDw8IDI4KTsKKyAgICAgIHRtcFszXSBePSAoTVszXSA+PiA0KSBeIChNWzJdIDw8IDI4KTsKKworICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHYgPSBWWy0taV07CisgICAgfQorCisgIGJ1Zl9wdXRfYmUzMiAocmVzdWx0ICsgMCwgdG1wWzBdKTsKKyAgYnVmX3B1dF9iZTMyIChyZXN1bHQgKyA0LCB0bXBbMV0pOworICBidWZfcHV0X2JlMzIgKHJlc3VsdCArIDgsIHRtcFsyXSk7CisgIGJ1Zl9wdXRfYmUzMiAocmVzdWx0ICsgMTIsIHRtcFszXSk7CisKKyAgcmV0dXJuIChzaXplb2YoVikgKyBzaXplb2YoVCkgKyBzaXplb2YodG1wKSArCisgICAgICAgICAgc2l6ZW9mKGludCkqMiArIHNpemVvZih2b2lkKikqNik7Cit9CisjZW5kaWYgLyogIUhBVkVfVTY0X1RZUEVERUYgfHwgU0laRU9GX1VOU0lHTkVEX0xPTkcgIT0gOCAqLworCisjZGVmaW5lIGZpbGxNKGMsIGgpIGRvX2ZpbGxNIChoLCBjLT51X21vZGUuZ2NtLmdjbV90YWJsZSkKKyNkZWZpbmUgR0hBU0goYywgcmVzdWx0LCBidWYpIGRvX2doYXNoIChyZXN1bHQsIGJ1ZiwgYy0+dV9tb2RlLmdjbS5nY21fdGFibGUpCisKKyNlbHNlCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitic2hpZnQgKHVuc2lnbmVkIGxvbmcgKmIpCit7CisgIHVuc2lnbmVkIGxvbmcgYzsKKyAgaW50IGk7CisgIGMgPSBiWzNdICYgMTsKKyAgZm9yIChpID0gMzsgaSA+IDA7IGktLSkKKyAgICB7CisgICAgICBiW2ldID0gKGJbaV0gPj4gMSkgfCAoYltpIC0gMV0gPDwgMzEpOworICAgIH0KKyAgYltpXSA+Pj0gMTsKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RvX2doYXNoICh1bnNpZ25lZCBjaGFyICpoc3ViLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgdW5zaWduZWQgbG9uZyBWWzRdOworICBpbnQgaSwgajsKKyAgYnl0ZSAqcDsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICBwID0gcmVzdWx0OworI2Vsc2UKKyAgdW5zaWduZWQgbG9uZyBUWzRdOworCisgIGJ1Zl94b3IgKFYsIHJlc3VsdCwgYnVmLCAxNik7CisgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgVltpXSA9IChWW2ldICYgMHgwMGZmMDBmZikgPDwgOCB8IChWW2ldICYgMHhmZjAwZmYwMCkgPj4gODsKKyAgICAgIFZbaV0gPSAoVltpXSAmIDB4MDAwMGZmZmYpIDw8IDE2IHwgKFZbaV0gJiAweGZmZmYwMDAwKSA+PiAxNjsKKyAgICB9CisgIHAgPSAoYnl0ZSAqKSBUOworI2VuZGlmCisKKyAgbWVtc2V0IChwLCAwLCAxNik7CisKKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgZm9yIChqID0gMHg4MDsgajsgaiA+Pj0gMSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChoc3ViW2ldICYgaikKKyAgICAgICAgICAgIGJ1Zl94b3IgKHAsIHAsIFYsIDE2KTsKKyAgICAgICAgICBpZiAoYnNoaWZ0IChWKSkKKyAgICAgICAgICAgIFZbMF0gXj0gMHhlMTAwMDAwMDsKKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisgIGZvciAoaSA9IDAsIHAgPSAoYnl0ZSAqKSBUOyBpIDwgMTY7IGkgKz0gNCwgcCArPSA0KQorICAgIHsKKyAgICAgIHJlc3VsdFtpICsgMF0gPSBwWzNdOworICAgICAgcmVzdWx0W2kgKyAxXSA9IHBbMl07CisgICAgICByZXN1bHRbaSArIDJdID0gcFsxXTsKKyAgICAgIHJlc3VsdFtpICsgM10gPSBwWzBdOworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiAoc2l6ZW9mKFYpICsgc2l6ZW9mKFQpICsgc2l6ZW9mKGludCkqMiArIHNpemVvZih2b2lkKikqNSk7Cit9CisKKyNkZWZpbmUgZmlsbE0oYywgaCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBHSEFTSChjLCByZXN1bHQsIGJ1ZikgZG9fZ2hhc2ggKGMtPnVfbW9kZS5nY20udV9naGFzaF9rZXkua2V5LCByZXN1bHQsIGJ1ZikKKworI2VuZGlmIC8qICFHQ01fVVNFX1RBQkxFUyAqLworCisKKyNpZmRlZiBHQ01fVVNFX0lOVEVMX1BDTE1VTAorLyoKKyBJbnRlbCBQQ0xNVUwgZ2hhc2ggYmFzZWQgb24gd2hpdGUgcGFwZXI6CisgICJJbnRlbMKuIENhcnJ5LUxlc3MgTXVsdGlwbGljYXRpb24gSW5zdHJ1Y3Rpb24gYW5kIGl0cyBVc2FnZSBmb3IgQ29tcHV0aW5nIHRoZQorICAgR0NNIE1vZGUgLSBSZXYgMi4wMSI7IFNoYXkgR3Vlcm9uLCBNaWNoYWVsIEUuIEtvdW5hdmlzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ZtdWxfcGNsbXVsKHZvaWQpCit7CisgIC8qIElucHV0OiBYTU0wIGFuZCBYTU0xLCBPdXRwdXQ6IFhNTTEuIElucHV0IFhNTTAgc3RheXMgdW5tb2RpZmllZC4KKyAgICAgSW5wdXQgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gbGl0dGxlLWVuZGlhbi4KKyAgICovCisgIGFzbSB2b2xhdGlsZSAoLyogZ2ZtdWwsIHhtbTAgaGFzIG9wZXJhdG9yIGEgYW5kIHhtbTEgaGFzIG9wZXJhdG9yIGIuICovCisgICAgICAgICAgICAgICAgInBzaHVmZCAkNzgsICUleG1tMCwgJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAicHNodWZkICQ3OCwgJSV4bW0xLCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yXG5cdCIgLyogeG1tMiBob2xkcyBhMCthMSAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW00XG5cdCIgLyogeG1tNCBob2xkcyBiMCtiMSAqLworCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTAsICUleG1tM1xuXHQiCisgICAgICAgICAgICAgICAgInBjbG11bHFkcSAkMCwgJSV4bW0xLCAlJXhtbTNcblx0IiAgLyogeG1tMyBob2xkcyBhMCpiMCAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0wLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDE3LCAlJXhtbTEsICUleG1tNlxuXHQiIC8qIHhtbTYgaG9sZHMgYTEqYjEgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicGNsbXVscWRxICQwLCAlJXhtbTIsICUleG1tNFxuXHQiICAvKiB4bW00IGhvbGRzIChhMCthMSkqKGIwK2IxKSAqLworCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW02LCAlJXhtbTVcblx0IiAvKiB4bW01IGhvbGRzIGEwKmIwK2ExKmIxICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTRcblx0IiAvKiB4bW00IGhvbGRzIGEwKmIwK2ExKmIxKyhhMCthMSkqKGIwK2IxKSAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW00LCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZHEgJDgsICUleG1tNFxuXHQiCisgICAgICAgICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tM1xuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW00LCAlJXhtbTZcblx0IiAvKiA8eG1tNjp4bW0zPiBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycnktbGVzcyBtdWx0aXBsaWNhdGlvbiBvZiB4bW0wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSB4bW0xICovCisKKyAgICAgICAgICAgICAgICAvKiBzaGlmdCB0aGUgcmVzdWx0IGJ5IG9uZSBiaXQgcG9zaXRpb24gdG8gdGhlIGxlZnQgY29wZSBmb3IKKyAgICAgICAgICAgICAgICAgICB0aGUgZmFjdCB0aGF0IGJpdHMgYXJlIHJldmVyc2VkICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNFxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTYsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgInBzbGxkICQxLCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZCAkMSwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGQgJDMxLCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZCAkMzEsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTQsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZHEgJDEyLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJwb3IgJSV4bW00LCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICAgICJwb3IgJSV4bW01LCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICJwb3IgJSV4bW02LCAlJXhtbTFcblx0IgorCisgICAgICAgICAgICAgICAgLyogZmlyc3QgcGhhc2Ugb2YgdGhlIHJlZHVjdGlvbiAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTdcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZCAkMzEsICUleG1tNlxuXHQiICAvKiBwYWNrZWQgcmlnaHQgc2hpZnRpbmcgPDwgMzEgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHNsbGQgJDMwLCAlJXhtbTdcblx0IiAgLyogcGFja2VkIHJpZ2h0IHNoaWZ0aW5nIHNoaWZ0IDw8IDMwICovCisgICAgICAgICAgICAgICAgInBzbGxkICQyNSwgJSV4bW01XG5cdCIgIC8qIHBhY2tlZCByaWdodCBzaGlmdGluZyBzaGlmdCA8PCAyNSAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tNywgJSV4bW02XG5cdCIgLyogeG9yIHRoZSBzaGlmdGVkIHZlcnNpb25zICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW02LCAlJXhtbTdcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZHEgJDEyLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZHEgJDQsICUleG1tN1xuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW02LCAlJXhtbTNcblx0IiAvKiBmaXJzdCBwaGFzZSBvZiB0aGUgcmVkdWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSAqLworCisgICAgICAgICAgICAgICAgLyogc2Vjb25kIHBoYXNlIG9mIHRoZSByZWR1Y3Rpb24gKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGQgJDEsICUleG1tMlxuXHQiICAgIC8qIHBhY2tlZCBsZWZ0IHNoaWZ0aW5nID4+IDEgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGQgJDIsICUleG1tNFxuXHQiICAgIC8qIHBhY2tlZCBsZWZ0IHNoaWZ0aW5nID4+IDIgKi8KKyAgICAgICAgICAgICAgICAicHNybGQgJDcsICUleG1tNVxuXHQiICAgIC8qIHBhY2tlZCBsZWZ0IHNoaWZ0aW5nID4+IDcgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTQsICUleG1tMlxuXHQiIC8qIHhvciB0aGUgc2hpZnRlZCB2ZXJzaW9ucyAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTcsICUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tMywgJSV4bW0xXG5cdCIgLyogdGhlIHJlc3VsdCBpcyBpbiB4bW0xICovCisgICAgICAgICAgICAgICAgOjo6ICJjYyIgKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZm11bF9wY2xtdWxfYWdncjQodm9pZCkKK3sKKyAgLyogSW5wdXQ6CisgICAgICBIwrk6IFhNTTAJCVhfaSAgICAgICAgICAgIDogWE1NNgorICAgICAgSMKyOiBYTU04CQlYXyhpLTEpICAgICAgICA6IFhNTTMKKyAgICAgIEjCszogWE1NOQkJWF8oaS0yKSAgICAgICAgOiBYTU0yCisgICAgICBI4oG0OiBYTU0xMAkJWF8oaS0zKeKKlVlfKGktNCk6IFhNTTEKKyAgICAgT3V0cHV0OgorICAgICAgWV9pOiBYTU0xCisgICAgIElucHV0cyBYTU0wIHN0YXlzIHVubW9kaWZpZWQuCisgICAgIElucHV0IG11c3QgYmUgY29udmVydGVkIHRvIGxpdHRsZS1lbmRpYW4uCisgICAqLworICBhc20gdm9sYXRpbGUgKC8qIHBlcmZvcm0gY2xtdWwgYW5kIG1lcmdlIHJlc3VsdHMuLi4gKi8KKyAgICAgICAgICAgICAgICAicHNodWZkICQ3OCwgJSV4bW0xMCwgJSV4bW0xMVxuXHQiCisgICAgICAgICAgICAgICAgInBzaHVmZCAkNzgsICUleG1tMSwgJSV4bW0xMlxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xMCwgJSV4bW0xMVxuXHQiIC8qIHhtbTExIGhvbGRzIDQ6YTArYTEgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMTJcblx0IiAvKiB4bW0xMiBob2xkcyA0OmIwK2IxICovCisKKyAgICAgICAgICAgICAgICAicHNodWZkICQ3OCwgJSV4bW05LCAlJXhtbTEzXG5cdCIKKyAgICAgICAgICAgICAgICAicHNodWZkICQ3OCwgJSV4bW0yLCAlJXhtbTE0XG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTksICUleG1tMTNcblx0IiAvKiB4bW0xMyBob2xkcyAzOmEwK2ExICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTE0XG5cdCIgLyogeG1tMTQgaG9sZHMgMzpiMCtiMSAqLworCisgICAgICAgICAgICAgICAgInBzaHVmZCAkNzgsICUleG1tOCwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHNodWZkICQ3OCwgJSV4bW0zLCAlJXhtbTE1XG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTgsICUleG1tNVxuXHQiIC8qIHhtbTEgaG9sZHMgMjphMCthMSAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tMywgJSV4bW0xNVxuXHQiIC8qIHhtbTIgaG9sZHMgMjpiMCtiMSAqLworCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEwLCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW05LCAlJXhtbTdcblx0IgorICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDAsICUleG1tMSwgJSV4bW00XG5cdCIgICAvKiB4bW00IGhvbGRzIDQ6YTAqYjAgKi8KKyAgICAgICAgICAgICAgICAicGNsbXVscWRxICQwLCAlJXhtbTIsICUleG1tN1xuXHQiICAgLyogeG1tNyBob2xkcyAzOmEwKmIwICovCisgICAgICAgICAgICAgICAgInBjbG11bHFkcSAkMTcsICUleG1tMTAsICUleG1tMVxuXHQiIC8qIHhtbTEgaG9sZHMgNDphMSpiMSAqLworICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDE3LCAlJXhtbTksICUleG1tMlxuXHQiICAvKiB4bW05IGhvbGRzIDM6YTEqYjEgKi8KKyAgICAgICAgICAgICAgICAicGNsbXVscWRxICQwLCAlJXhtbTExLCAlJXhtbTEyXG5cdCIgLyogeG1tMTIgaG9sZHMgNDooYTArYTEpKihiMCtiMSkgKi8KKyAgICAgICAgICAgICAgICAicGNsbXVscWRxICQwLCAlJXhtbTEzLCAlJXhtbTE0XG5cdCIgLyogeG1tMTQgaG9sZHMgMzooYTArYTEpKihiMCtiMSkgKi8KKworICAgICAgICAgICAgICAgICJwc2h1ZmQgJDc4LCAlJXhtbTAsICUleG1tMTBcblx0IgorICAgICAgICAgICAgICAgICJwc2h1ZmQgJDc4LCAlJXhtbTYsICUleG1tMTFcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0xMFxuXHQiIC8qIHhtbTEwIGhvbGRzIDE6YTArYTEgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTYsICUleG1tMTFcblx0IiAvKiB4bW0xMSBob2xkcyAxOmIwK2IxICovCisKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTQsICUleG1tN1xuXHQiICAgLyogeG1tNyBob2xkcyAzKzQ6YTAqYjAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMVxuXHQiICAgLyogeG1tMSBob2xkcyAzKzQ6YTEqYjEgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTE0LCAlJXhtbTEyXG5cdCIgLyogeG1tMTIgaG9sZHMgMys0OihhMCthMSkqKGIwK2IxKSAqLworCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTgsICUleG1tMTNcblx0IgorICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDAsICUleG1tMywgJSV4bW0xM1xuXHQiICAvKiB4bW0xMyBob2xkcyAyOmEwKmIwICovCisgICAgICAgICAgICAgICAgInBjbG11bHFkcSAkMTcsICUleG1tOCwgJSV4bW0zXG5cdCIgIC8qIHhtbTMgaG9sZHMgMjphMSpiMSAqLworICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDAsICUleG1tNSwgJSV4bW0xNVxuXHQiIC8qIHhtbTE1IGhvbGRzIDI6KGEwK2ExKSooYjArYjEpICovCisKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEzLCAlJXhtbTdcblx0IiAvKiB4bW03IGhvbGRzIDIrMys0OmEwKmIwICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0zLCAlJXhtbTFcblx0IiAgLyogeG1tMSBob2xkcyAyKzMrNDphMSpiMSAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tMTUsICUleG1tMTJcblx0IiAvKiB4bW0xMiBob2xkcyAyKzMrNDooYTArYTEpKihiMCtiMSkgKi8KKworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0wLCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDAsICUleG1tNiwgJSV4bW0zXG5cdCIgIC8qIHhtbTMgaG9sZHMgMTphMCpiMCAqLworICAgICAgICAgICAgICAgICJwY2xtdWxxZHEgJDE3LCAlJXhtbTAsICUleG1tNlxuXHQiIC8qIHhtbTYgaG9sZHMgMTphMSpiMSAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xMSwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAicGNsbXVscWRxICQwLCAlJXhtbTEwLCAlJXhtbTRcblx0IiAvKiB4bW00IGhvbGRzIDE6KGEwK2ExKSooYjArYjEpICovCisKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTcsICUleG1tM1xuXHQiICAvKiB4bW0zIGhvbGRzIDErMiszKzQ6YTAqYjAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tNlxuXHQiICAvKiB4bW02IGhvbGRzIDErMiszKzQ6YTEqYjEgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEyLCAlJXhtbTRcblx0IiAvKiB4bW00IGhvbGRzIDErMiszKzQ6KGEwK2ExKSooYjArYjEpICovCisKKyAgICAgICAgICAgICAgICAvKiBhZ2dyZWdhdGVkIHJlZHVjdGlvbi4uLiAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tNiwgJSV4bW01XG5cdCIgLyogeG1tNSBob2xkcyBhMCpiMCthMSpiMSAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW00XG5cdCIgLyogeG1tNCBob2xkcyBhMCpiMCthMSpiMSsoYTArYTEpKihiMCtiMSkgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNCwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGRxICQ4LCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZHEgJDgsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW02XG5cdCIgLyogPHhtbTY6eG1tMz4gaG9sZHMgdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnJ5LWxlc3MgbXVsdGlwbGljYXRpb24gb2YgeG1tMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgeG1tMSAqLworCisgICAgICAgICAgICAgICAgLyogc2hpZnQgdGhlIHJlc3VsdCBieSBvbmUgYml0IHBvc2l0aW9uIHRvIHRoZSBsZWZ0IGNvcGUgZm9yCisgICAgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBiaXRzIGFyZSByZXZlcnNlZCAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTRcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW02LCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZCAkMSwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAicHNsbGQgJDEsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgInBzcmxkICQzMSwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGQgJDMxLCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW00LCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJwc2xsZHEgJDQsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGRxICQxMiwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAicG9yICUleG1tNCwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAicG9yICUleG1tNSwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAicG9yICUleG1tNiwgJSV4bW0xXG5cdCIKKworICAgICAgICAgICAgICAgIC8qIGZpcnN0IHBoYXNlIG9mIHRoZSByZWR1Y3Rpb24gKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAicHNsbGQgJDMxLCAlJXhtbTZcblx0IiAgLyogcGFja2VkIHJpZ2h0IHNoaWZ0aW5nIDw8IDMxICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgInBzbGxkICQzMCwgJSV4bW03XG5cdCIgIC8qIHBhY2tlZCByaWdodCBzaGlmdGluZyBzaGlmdCA8PCAzMCAqLworICAgICAgICAgICAgICAgICJwc2xsZCAkMjUsICUleG1tNVxuXHQiICAvKiBwYWNrZWQgcmlnaHQgc2hpZnRpbmcgc2hpZnQgPDwgMjUgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTcsICUleG1tNlxuXHQiIC8qIHhvciB0aGUgc2hpZnRlZCB2ZXJzaW9ucyAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNiwgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAicHNsbGRxICQxMiwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAicHNybGRxICQ0LCAlJXhtbTdcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tNiwgJSV4bW0zXG5cdCIgLyogZmlyc3QgcGhhc2Ugb2YgdGhlIHJlZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgKi8KKworICAgICAgICAgICAgICAgIC8qIHNlY29uZCBwaGFzZSBvZiB0aGUgcmVkdWN0aW9uICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNFxuXHQiCisgICAgICAgICAgICAgICAgInBzcmxkICQxLCAlJXhtbTJcblx0IiAgICAvKiBwYWNrZWQgbGVmdCBzaGlmdGluZyA+PiAxICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgInBzcmxkICQyLCAlJXhtbTRcblx0IiAgICAvKiBwYWNrZWQgbGVmdCBzaGlmdGluZyA+PiAyICovCisgICAgICAgICAgICAgICAgInBzcmxkICQ3LCAlJXhtbTVcblx0IiAgICAvKiBwYWNrZWQgbGVmdCBzaGlmdGluZyA+PiA3ICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW00LCAlJXhtbTJcblx0IiAvKiB4b3IgdGhlIHNoaWZ0ZWQgdmVyc2lvbnMgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW03LCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICJweG9yICUleG1tMiwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tMVxuXHQiIC8qIHRoZSByZXN1bHQgaXMgaW4geG1tMSAqLworICAgICAgICAgICAgICAgIDo6OiJjYyIpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKkdDTV9VU0VfSU5URUxfUENMTVVMKi8KKworCitzdGF0aWMgdW5zaWduZWQgaW50CitnaGFzaCAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBieXRlICpyZXN1bHQsIGNvbnN0IGJ5dGUgKmJ1ZiwKKyAgICAgICBzaXplX3QgbmJsb2NrcykKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IEdDUllfR0NNX0JMT0NLX0xFTjsKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgaWYgKG5ibG9ja3MgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgR0NNX1VTRV9JTlRFTF9QQ0xNVUwKKyAgZWxzZSBpZiAoYy0+dV9tb2RlLmdjbS51c2VfaW50ZWxfcGNsbXVsKQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJlX21hc2tbMTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKSA9CisgICAgICAgIHsgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCB9OworCisgICAgICAvKiBQcmVsb2FkIGhhc2ggYW5kIEgxLiAqLworICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICVbaGFzaF0sICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJVtoc3ViXSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInBzaHVmYiAlW2JlX21hc2tdLCAlJXhtbTFcblx0IiAvKiBiZSA9PiBsZSAqLworICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgIDogW2hhc2hdICJtIiAoKnJlc3VsdCksIFtiZV9tYXNrXSAibSIgKCpiZV9tYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICBbaHN1Yl0gIm0iICgqYy0+dV9tb2RlLmdjbS51X2doYXNoX2tleS5rZXkpKTsKKworI2lmZGVmIF9feDg2XzY0X18KKyAgICAgIGlmIChuYmxvY2tzID49IDQpCisgICAgICAgIHsKKyAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJtb3ZkcWEgJVtiZV9tYXNrXSwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDAqMTYoJVtidWZdKSwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDEqMTYoJVtidWZdKSwgJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDIqMTYoJVtidWZdKSwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDMqMTYoJVtidWZdKSwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHNodWZiICUleG1tNCwgJSV4bW01XG5cdCIgLyogYmUgPT4gbGUgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgSDIsIEgzLCBINC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDIqMTYoJVtoXzIzNF0pLCAlJXhtbTEwXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZHF1IDEqMTYoJVtoXzIzNF0pLCAlJXhtbTlcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkcXUgMCoxNiglW2hfMjM0XSksICUleG1tOFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzaHVmYiAlJXhtbTQsICUleG1tMlxuXHQiIC8qIGJlID0+IGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzaHVmYiAlJXhtbTQsICUleG1tM1xuXHQiIC8qIGJlID0+IGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzaHVmYiAlJXhtbTQsICUleG1tNlxuXHQiIC8qIGJlID0+IGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW2J1Zl0gInIiIChidWYpLCBbYmVfbWFza10gIm0iICgqYmVfbWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaF8yMzRdICJyIiAoYy0+dV9tb2RlLmdjbS5nY21fdGFibGUpKTsKKworICAgICAgICAgICAgICBnZm11bF9wY2xtdWxfYWdncjQgKCk7CisKKyAgICAgICAgICAgICAgYnVmICs9IDQgKiBibG9ja3NpemU7CisgICAgICAgICAgICAgIG5ibG9ja3MgLT0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB3aGlsZSAobmJsb2NrcyA+PSA0KTsKKworICAgICAgICAgIC8qIENsZWFyIHVzZWQgeDg2LTY0L1hNTSByZWdpc3RlcnMuICovCisgICAgICAgICAgYXNtIHZvbGF0aWxlKCAicHhvciAlJXhtbTgsICUleG1tOFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTksICUleG1tOVxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEwLCAlJXhtbTEwXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tMTEsICUleG1tMTFcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xMiwgJSV4bW0xMlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEzLCAlJXhtbTEzXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tMTQsICUleG1tMTRcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xNSwgJSV4bW0xNVxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICA6OjogImNjIiApOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgd2hpbGUgKG5ibG9ja3MtLSkKKyAgICAgICAgeworICAgICAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdmRxdSAlW2J1Zl0sICUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAicHNodWZiICVbYmVfbWFza10sICUleG1tMlxuXHQiIC8qIGJlID0+IGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICA6IFtidWZdICJtIiAoKmJ1ZiksIFtiZV9tYXNrXSAibSIgKCpiZV9tYXNrKSk7CisKKyAgICAgICAgICBnZm11bF9wY2xtdWwgKCk7CisKKyAgICAgICAgICBidWYgKz0gYmxvY2tzaXplOworICAgICAgICB9CisKKyAgICAgIC8qIFN0b3JlIGhhc2guICovCisgICAgICBhc20gdm9sYXRpbGUgKCJwc2h1ZmIgJVtiZV9tYXNrXSwgJSV4bW0xXG5cdCIgLyogYmUgPT4gbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTEsICVbaGFzaF1cblx0IgorICAgICAgICAgICAgICAgICAgICA6IFtoYXNoXSAiPW0iICgqcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICA6IFtiZV9tYXNrXSAibSIgKCpiZV9tYXNrKSk7CisKKyAgICAgIC8qIENsZWFyIHVzZWQgcmVnaXN0ZXJzLiAqLworICAgICAgYXNtIHZvbGF0aWxlKCAicHhvciAlJXhtbTAsICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tM1xuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTYsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tNywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgOjo6ICJjYyIgKTsKKyAgICAgIGJ1cm4gPSAwOworICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgeworICAgICAgd2hpbGUgKG5ibG9ja3MpCisgICAgICAgIHsKKyAgICAgICAgICBidXJuID0gR0hBU0ggKGMsIHJlc3VsdCwgYnVmKTsKKyAgICAgICAgICBidWYgKz0gYmxvY2tzaXplOworICAgICAgICAgIG5ibG9ja3MtLTsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gYnVybiArIChidXJuID8gNSpzaXplb2Yodm9pZCopIDogMCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NldHVwTSAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBieXRlICpoKQoreworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgR0NNX1VTRV9JTlRFTF9QQ0xNVUwKKyAgZWxzZSBpZiAoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX0lOVEVMX1BDTE1VTCkKKyAgICB7CisgICAgICB1NjQgdG1wWzJdOworCisgICAgICBjLT51X21vZGUuZ2NtLnVzZV9pbnRlbF9wY2xtdWwgPSAxOworCisgICAgICAvKiBTd2FwIGVuZGlhbm5lc3Mgb2YgaHN1Yi4gKi8KKyAgICAgIHRtcFswXSA9IGJ1Zl9nZXRfYmU2NChjLT51X21vZGUuZ2NtLnVfZ2hhc2hfa2V5LmtleSArIDgpOworICAgICAgdG1wWzFdID0gYnVmX2dldF9iZTY0KGMtPnVfbW9kZS5nY20udV9naGFzaF9rZXkua2V5ICsgMCk7CisgICAgICBidWZfY3B5IChjLT51X21vZGUuZ2NtLnVfZ2hhc2hfa2V5LmtleSwgdG1wLCBHQ1JZX0dDTV9CTE9DS19MRU4pOworCisjaWZkZWYgX194ODZfNjRfXworICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICVbaF8xXSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTAsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgOiBbaF8xXSAibSIgKCp0bXApKTsKKworICAgICAgZ2ZtdWxfcGNsbXVsICgpOyAvKiBI4oCiSCA9PiBIwrIgKi8KKworICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICUleG1tMSwgMCoxNiglW2hfMjM0XSlcblx0IgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW04XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICA6IFtoXzIzNF0gInIiIChjLT51X21vZGUuZ2NtLmdjbV90YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgIGdmbXVsX3BjbG11bCAoKTsgLyogSOKAokjCsiA9PiBIwrMgKi8KKworICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHFhICUleG1tOCwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTEsIDEqMTYoJVtoXzIzNF0pXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTgsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgOiBbaF8yMzRdICJyIiAoYy0+dV9tb2RlLmdjbS5nY21fdGFibGUpCisgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworCisgICAgICBnZm11bF9wY2xtdWwgKCk7IC8qIEjCsuKAokjCsiA9PiBI4oG0ICovCisKKyAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdmRxdSAlJXhtbTEsIDIqMTYoJVtoXzIzNF0pXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICA6IFtoXzIzNF0gInIiIChjLT51X21vZGUuZ2NtLmdjbV90YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgIC8qIENsZWFyIHVzZWQgcmVnaXN0ZXJzLiAqLworICAgICAgYXNtIHZvbGF0aWxlKCAicHhvciAlJXhtbTAsICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tM1xuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW00XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICAgICAicHhvciAlJXhtbTYsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tNywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW04LCAlJXhtbThcblx0IgorICAgICAgICAgICAgICAgICAgICA6OjogImNjIiApOworI2VuZGlmCisKKyAgICAgIHdpcGVtZW1vcnkgKHRtcCwgc2l6ZW9mKHRtcCkpOworICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgZmlsbE0gKGMsIGgpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2NtX2J5dGVjb3VudGVyX2FkZCAodTMyIGN0clsyXSwgc2l6ZV90IGFkZCkKK3sKKyAgaWYgKHNpemVvZihhZGQpID4gc2l6ZW9mKHUzMikpCisgICAgeworICAgICAgdTMyIGhpZ2hfYWRkID0gKChhZGQgPj4gMzEpID4+IDEpICYgMHhmZmZmZmZmZjsKKyAgICAgIGN0clsxXSArPSBoaWdoX2FkZDsKKyAgICB9CisKKyAgY3RyWzBdICs9IGFkZDsKKyAgaWYgKGN0clswXSA+PSBhZGQpCisgICAgcmV0dXJuOworICArK2N0clsxXTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMgorZ2NtX2FkZDMyX2JlMTI4IChieXRlICpjdHIsIHVuc2lnbmVkIGludCBhZGQpCit7CisgIC8qICdjdHInIG11c3QgYmUgYWxpZ25lZCB0byBmb3VyIGJ5dGVzLiAqLworICBjb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gR0NSWV9HQ01fQkxPQ0tfTEVOOworICB1MzIgKnB2YWwgPSAodTMyICopKHZvaWQgKikoY3RyICsgYmxvY2tzaXplIC0gc2l6ZW9mKHUzMikpOworICB1MzIgdmFsOworCisgIHZhbCA9IGJlX2Jzd2FwMzIoKnB2YWwpICsgYWRkOworICAqcHZhbCA9IGJlX2Jzd2FwMzIodmFsKTsKKworICByZXR1cm4gdmFsOyAvKiByZXR1cm4gcmVzdWx0IGFzIGhvc3QtZW5kaWFuIHZhbHVlICovCit9CisKKworc3RhdGljIGlubGluZSBpbnQKK2djbV9jaGVja19kYXRhbGVuICh1MzIgY3RyWzJdKQoreworICAvKiBsZW4ocGxhaW50ZXh0KSA8PSAyXjM5LTI1NiBiaXRzID09IDJeMzYtMzIgYnl0ZXMgPT0gMl4zMi0yIGJsb2NrcyAqLworICBpZiAoY3RyWzFdID4gMHhmVSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGN0clsxXSA8IDB4ZlUpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKGN0clswXSA8PSAweGZmZmZmZmUwVSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludAorZ2NtX2NoZWNrX2FhZGxlbl9vcl9pdmxlbiAodTMyIGN0clsyXSkKK3sKKyAgLyogbGVuKGFhZC9pdikgPD0gMl42NC0xIGJpdHMgfj0gMl42MS0xIGJ5dGVzICovCisgIGlmIChjdHJbMV0gPiAweDFmZmZmZmZmVSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGN0clsxXSA8IDB4MWZmZmZmZmZVKQorICAgIHJldHVybiAxOworCisgIGlmIChjdHJbMF0gPD0gMHhmZmZmZmZmZlUpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK2RvX2doYXNoX2J1ZihnY3J5X2NpcGhlcl9oZF90IGMsIGJ5dGUgKmhhc2gsIGNvbnN0IGJ5dGUgKmJ1ZiwKKyAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLCBpbnQgZG9fcGFkZGluZykKK3sKKyAgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IEdDUllfR0NNX0JMT0NLX0xFTjsKKyAgdW5zaWduZWQgaW50IHVudXNlZCA9IGMtPnVfbW9kZS5nY20ubWFjX3VudXNlZDsKKyAgc2l6ZV90IG5ibG9ja3MsIG47CisgIHVuc2lnbmVkIGludCBidXJuID0gMDsKKworICBpZiAoYnVmbGVuID09IDAgJiYgKHVudXNlZCA9PSAwIHx8ICFkb19wYWRkaW5nKSkKKyAgICByZXR1cm47CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoYnVmbGVuICsgdW51c2VkIDwgYmxvY2tzaXplIHx8IHVudXNlZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBuID0gYmxvY2tzaXplIC0gdW51c2VkOworICAgICAgICAgIG4gPSBuIDwgYnVmbGVuID8gbiA6IGJ1ZmxlbjsKKworICAgICAgICAgIGJ1Zl9jcHkgKCZjLT51X21vZGUuZ2NtLm1hY2J1Zlt1bnVzZWRdLCBidWYsIG4pOworCisgICAgICAgICAgdW51c2VkICs9IG47CisgICAgICAgICAgYnVmICs9IG47CisgICAgICAgICAgYnVmbGVuIC09IG47CisgICAgICAgIH0KKyAgICAgIGlmICghYnVmbGVuKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFkb19wYWRkaW5nKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICB3aGlsZSAodW51c2VkIDwgYmxvY2tzaXplKQorICAgICAgICAgICAgYy0+dV9tb2RlLmdjbS5tYWNidWZbdW51c2VkKytdID0gMDsKKyAgICAgICAgfQorCisgICAgICBpZiAodW51c2VkID4gMCkKKyAgICAgICAgeworICAgICAgICAgIGdjcnlfYXNzZXJ0ICh1bnVzZWQgPT0gYmxvY2tzaXplKTsKKworICAgICAgICAgIC8qIFByb2Nlc3Mgb25lIGJsb2NrIGZyb20gbWFjYnVmLiAgKi8KKyAgICAgICAgICBidXJuID0gZ2hhc2ggKGMsIGhhc2gsIGMtPnVfbW9kZS5nY20ubWFjYnVmLCAxKTsKKyAgICAgICAgICB1bnVzZWQgPSAwOworICAgICAgICB9CisKKyAgICAgIG5ibG9ja3MgPSBidWZsZW4gLyBibG9ja3NpemU7CisKKyAgICAgIGlmIChuYmxvY2tzKQorICAgICAgICB7CisgICAgICAgICAgYnVybiA9IGdoYXNoIChjLCBoYXNoLCBidWYsIG5ibG9ja3MpOworICAgICAgICAgIGJ1ZiArPSBibG9ja3NpemUgKiBuYmxvY2tzOworICAgICAgICAgIGJ1ZmxlbiAtPSBibG9ja3NpemUgKiBuYmxvY2tzOworICAgICAgICB9CisgICAgfQorICB3aGlsZSAoYnVmbGVuID4gMCk7CisKKyAgYy0+dV9tb2RlLmdjbS5tYWNfdW51c2VkID0gdW51c2VkOworCisgIGlmIChidXJuKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4pOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2djbV9lbmNyeXB0IChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKm91dGJ1Ziwgc2l6ZV90IG91dGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSAqaW5idWYsIHNpemVfdCBpbmJ1ZmxlbikKK3sKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgemVyb2J1ZltNQVhfQkxPQ0tTSVpFXTsKKyAgZ2NyeV9lcnJfY29kZV90IGVycjsKKworICBpZiAoYy0+c3BlYy0+YmxvY2tzaXplICE9IEdDUllfR0NNX0JMT0NLX0xFTikKKyAgICByZXR1cm4gR1BHX0VSUl9DSVBIRVJfQUxHTzsKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisgIGlmIChjLT51X21vZGUuZ2NtLmRhdGFsZW5fb3Zlcl9saW1pdHMpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKyAgaWYgKGMtPm1hcmtzLnRhZyB8fCBjLT51X21vZGUuZ2NtLmdoYXNoX2RhdGFfZmluYWxpemVkKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9TVEFURTsKKworICBpZiAoIWMtPm1hcmtzLml2KQorICAgIF9nY3J5X2NpcGhlcl9nY21fc2V0aXYgKGMsIHplcm9idWYsIEdDUllfR0NNX0JMT0NLX0xFTik7CisKKyAgaWYgKGMtPnVfbW9kZS5nY20uZGlzYWxsb3dfZW5jcnlwdGlvbl9iZWNhdXNlX29mX3NldGl2X2luX2ZpcHNfbW9kZSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfU1RBVEU7CisKKyAgaWYgKCFjLT51X21vZGUuZ2NtLmdoYXNoX2FhZF9maW5hbGl6ZWQpCisgICAgeworICAgICAgLyogU3RhcnQgb2YgZW5jcnlwdGlvbiBtYXJrcyBlbmQgb2YgQUFEIHN0cmVhbS4gKi8KKyAgICAgIGRvX2doYXNoX2J1ZihjLCBjLT51X21vZGUuZ2NtLnVfdGFnLnRhZywgTlVMTCwgMCwgMSk7CisgICAgICBjLT51X21vZGUuZ2NtLmdoYXNoX2FhZF9maW5hbGl6ZWQgPSAxOworICAgIH0KKworICBnY21fYnl0ZWNvdW50ZXJfYWRkKGMtPnVfbW9kZS5nY20uZGF0YWxlbiwgaW5idWZsZW4pOworICBpZiAoIWdjbV9jaGVja19kYXRhbGVuKGMtPnVfbW9kZS5nY20uZGF0YWxlbikpCisgICAgeworICAgICAgYy0+dV9tb2RlLmdjbS5kYXRhbGVuX292ZXJfbGltaXRzID0gMTsKKyAgICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisgICAgfQorCisgIGVyciA9IF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHJldHVybiBlcnI7CisKKyAgZG9fZ2hhc2hfYnVmKGMsIGMtPnVfbW9kZS5nY20udV90YWcudGFnLCBvdXRidWYsIGluYnVmbGVuLCAwKTsKKworICByZXR1cm4gMDsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9nY21fZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pCit7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHplcm9idWZbTUFYX0JMT0NLU0laRV07CisKKyAgaWYgKGMtPnNwZWMtPmJsb2Nrc2l6ZSAhPSBHQ1JZX0dDTV9CTE9DS19MRU4pCisgICAgcmV0dXJuIEdQR19FUlJfQ0lQSEVSX0FMR087CisgIGlmIChvdXRidWZsZW4gPCBpbmJ1ZmxlbikKKyAgICByZXR1cm4gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUOworICBpZiAoYy0+dV9tb2RlLmdjbS5kYXRhbGVuX292ZXJfbGltaXRzKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisgIGlmIChjLT5tYXJrcy50YWcgfHwgYy0+dV9tb2RlLmdjbS5naGFzaF9kYXRhX2ZpbmFsaXplZCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfU1RBVEU7CisKKyAgaWYgKCFjLT5tYXJrcy5pdikKKyAgICBfZ2NyeV9jaXBoZXJfZ2NtX3NldGl2IChjLCB6ZXJvYnVmLCBHQ1JZX0dDTV9CTE9DS19MRU4pOworCisgIGlmICghYy0+dV9tb2RlLmdjbS5naGFzaF9hYWRfZmluYWxpemVkKQorICAgIHsKKyAgICAgIC8qIFN0YXJ0IG9mIGRlY3J5cHRpb24gbWFya3MgZW5kIG9mIEFBRCBzdHJlYW0uICovCisgICAgICBkb19naGFzaF9idWYoYywgYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIE5VTEwsIDAsIDEpOworICAgICAgYy0+dV9tb2RlLmdjbS5naGFzaF9hYWRfZmluYWxpemVkID0gMTsKKyAgICB9CisKKyAgZ2NtX2J5dGVjb3VudGVyX2FkZChjLT51X21vZGUuZ2NtLmRhdGFsZW4sIGluYnVmbGVuKTsKKyAgaWYgKCFnY21fY2hlY2tfZGF0YWxlbihjLT51X21vZGUuZ2NtLmRhdGFsZW4pKQorICAgIHsKKyAgICAgIGMtPnVfbW9kZS5nY20uZGF0YWxlbl9vdmVyX2xpbWl0cyA9IDE7CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfTEVOR1RIOworICAgIH0KKworICBkb19naGFzaF9idWYoYywgYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIGluYnVmLCBpbmJ1ZmxlbiwgMCk7CisKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9nY21fYXV0aGVudGljYXRlIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSAqIGFhZGJ1Ziwgc2l6ZV90IGFhZGJ1ZmxlbikKK3sKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgemVyb2J1ZltNQVhfQkxPQ0tTSVpFXTsKKworICBpZiAoYy0+c3BlYy0+YmxvY2tzaXplICE9IEdDUllfR0NNX0JMT0NLX0xFTikKKyAgICByZXR1cm4gR1BHX0VSUl9DSVBIRVJfQUxHTzsKKyAgaWYgKGMtPnVfbW9kZS5nY20uZGF0YWxlbl9vdmVyX2xpbWl0cykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfTEVOR1RIOworICBpZiAoYy0+bWFya3MudGFnIHx8IGMtPnVfbW9kZS5nY20uZ2hhc2hfYWFkX2ZpbmFsaXplZCB8fAorICAgICAgYy0+dV9tb2RlLmdjbS5naGFzaF9kYXRhX2ZpbmFsaXplZCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfU1RBVEU7CisKKyAgaWYgKCFjLT5tYXJrcy5pdikKKyAgICBfZ2NyeV9jaXBoZXJfZ2NtX3NldGl2IChjLCB6ZXJvYnVmLCBHQ1JZX0dDTV9CTE9DS19MRU4pOworCisgIGdjbV9ieXRlY291bnRlcl9hZGQoYy0+dV9tb2RlLmdjbS5hYWRsZW4sIGFhZGJ1Zmxlbik7CisgIGlmICghZ2NtX2NoZWNrX2FhZGxlbl9vcl9pdmxlbihjLT51X21vZGUuZ2NtLmFhZGxlbikpCisgICAgeworICAgICAgYy0+dV9tb2RlLmdjbS5kYXRhbGVuX292ZXJfbGltaXRzID0gMTsKKyAgICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisgICAgfQorCisgIGRvX2doYXNoX2J1ZihjLCBjLT51X21vZGUuZ2NtLnVfdGFnLnRhZywgYWFkYnVmLCBhYWRidWZsZW4sIDApOworCisgIHJldHVybiAwOworfQorCisKK3ZvaWQKK19nY3J5X2NpcGhlcl9nY21fc2V0a2V5IChnY3J5X2NpcGhlcl9oZF90IGMpCit7CisgIG1lbXNldCAoYy0+dV9tb2RlLmdjbS51X2doYXNoX2tleS5rZXksIDAsIEdDUllfR0NNX0JMT0NLX0xFTik7CisKKyAgYy0+c3BlYy0+ZW5jcnlwdCAoJmMtPmNvbnRleHQuYywgYy0+dV9tb2RlLmdjbS51X2doYXNoX2tleS5rZXksCisgICAgICAgICAgICAgICAgICAgIGMtPnVfbW9kZS5nY20udV9naGFzaF9rZXkua2V5KTsKKyAgc2V0dXBNIChjLCBjLT51X21vZGUuZ2NtLnVfZ2hhc2hfa2V5LmtleSk7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2djbV9pbml0aXYgKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgYnl0ZSAqaXYsIHNpemVfdCBpdmxlbikKK3sKKyAgbWVtc2V0IChjLT51X21vZGUuZ2NtLmFhZGxlbiwgMCwgc2l6ZW9mKGMtPnVfbW9kZS5nY20uYWFkbGVuKSk7CisgIG1lbXNldCAoYy0+dV9tb2RlLmdjbS5kYXRhbGVuLCAwLCBzaXplb2YoYy0+dV9tb2RlLmdjbS5kYXRhbGVuKSk7CisgIG1lbXNldCAoYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIDAsIEdDUllfR0NNX0JMT0NLX0xFTik7CisgIGMtPnVfbW9kZS5nY20uZGF0YWxlbl9vdmVyX2xpbWl0cyA9IDA7CisgIGMtPnVfbW9kZS5nY20uZ2hhc2hfZGF0YV9maW5hbGl6ZWQgPSAwOworICBjLT51X21vZGUuZ2NtLmdoYXNoX2FhZF9maW5hbGl6ZWQgPSAwOworCisgIGlmIChpdmxlbiA9PSAwKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisKKyAgaWYgKGl2bGVuICE9IEdDUllfR0NNX0JMT0NLX0xFTiAtIDQpCisgICAgeworICAgICAgdTMyIGl2X2J5dGVzWzJdID0gezAsIDB9OworICAgICAgdTMyIGJpdGxlbmd0aHNbMl1bMl07CisKKyAgICAgIG1lbXNldChjLT51X2N0ci5jdHIsIDAsIEdDUllfR0NNX0JMT0NLX0xFTik7CisKKyAgICAgIGdjbV9ieXRlY291bnRlcl9hZGQoaXZfYnl0ZXMsIGl2bGVuKTsKKyAgICAgIGlmICghZ2NtX2NoZWNrX2FhZGxlbl9vcl9pdmxlbihpdl9ieXRlcykpCisgICAgICAgIHsKKyAgICAgICAgICBjLT51X21vZGUuZ2NtLmRhdGFsZW5fb3Zlcl9saW1pdHMgPSAxOworICAgICAgICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisgICAgICAgIH0KKworICAgICAgZG9fZ2hhc2hfYnVmKGMsIGMtPnVfY3RyLmN0ciwgaXYsIGl2bGVuLCAxKTsKKworICAgICAgLyogaXYgbGVuZ3RoLCA2NC1iaXQgKi8KKyAgICAgIGJpdGxlbmd0aHNbMV1bMV0gPSBiZV9ic3dhcDMyKGl2X2J5dGVzWzBdIDw8IDMpOworICAgICAgYml0bGVuZ3Roc1sxXVswXSA9IGJlX2Jzd2FwMzIoKGl2X2J5dGVzWzBdID4+IDI5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXZfYnl0ZXNbMV0gPDwgMykpOworICAgICAgLyogemVyb3MsIDY0LWJpdCAqLworICAgICAgYml0bGVuZ3Roc1swXVsxXSA9IDA7CisgICAgICBiaXRsZW5ndGhzWzBdWzBdID0gMDsKKworICAgICAgZG9fZ2hhc2hfYnVmKGMsIGMtPnVfY3RyLmN0ciwgKGJ5dGUqKWJpdGxlbmd0aHMsIEdDUllfR0NNX0JMT0NLX0xFTiwgMSk7CisKKyAgICAgIHdpcGVtZW1vcnkgKGl2X2J5dGVzLCBzaXplb2YgaXZfYnl0ZXMpOworICAgICAgd2lwZW1lbW9yeSAoYml0bGVuZ3Rocywgc2l6ZW9mIGJpdGxlbmd0aHMpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIDk2LWJpdCBJViBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiAqLworICAgICAgbWVtY3B5IChjLT51X2N0ci5jdHIsIGl2LCBpdmxlbik7CisgICAgICBjLT51X2N0ci5jdHJbMTJdID0gYy0+dV9jdHIuY3RyWzEzXSA9IGMtPnVfY3RyLmN0clsxNF0gPSAwOworICAgICAgYy0+dV9jdHIuY3RyWzE1XSA9IDE7CisgICAgfQorCisgIGMtPnNwZWMtPmVuY3J5cHQgKCZjLT5jb250ZXh0LmMsIGMtPnVfbW9kZS5nY20udGFnaXYsIGMtPnVfY3RyLmN0cik7CisKKyAgZ2NtX2FkZDMyX2JlMTI4IChjLT51X2N0ci5jdHIsIDEpOworCisgIGMtPnVudXNlZCA9IDA7CisgIGMtPm1hcmtzLml2ID0gMTsKKyAgYy0+bWFya3MudGFnID0gMDsKKworICByZXR1cm4gMDsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9nY21fc2V0aXYgKGdjcnlfY2lwaGVyX2hkX3QgYywgY29uc3QgYnl0ZSAqaXYsIHNpemVfdCBpdmxlbikKK3sKKyAgYy0+bWFya3MuaXYgPSAwOworICBjLT5tYXJrcy50YWcgPSAwOworICBjLT51X21vZGUuZ2NtLmRpc2FsbG93X2VuY3J5cHRpb25fYmVjYXVzZV9vZl9zZXRpdl9pbl9maXBzX21vZGUgPSAwOworCisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgeworICAgICAgLyogRGlyZWN0IGludm9jYXRpb24gb2YgR0NNIHNldGl2IGluIEZJUFMgbW9kZSBkaXNhYmxlcyBlbmNyeXB0aW9uLiAqLworICAgICAgYy0+dV9tb2RlLmdjbS5kaXNhbGxvd19lbmNyeXB0aW9uX2JlY2F1c2Vfb2Zfc2V0aXZfaW5fZmlwc19tb2RlID0gMTsKKyAgICB9CisKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9nY21faW5pdGl2IChjLCBpdiwgaXZsZW4pOworfQorCisKKyNpZiAwICYmIFRPRE8KK3ZvaWQKK19nY3J5X2NpcGhlcl9nY21fZ2VuaXYgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKml2b3V0LCBzaXplX3QgaXZvdXRsZW4sIGNvbnN0IGJ5dGUgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5vbmNlbGVuKQoreworICAvKiBub25jZTogICAgdXNlciBwcm92aWRlZCBwYXJ0IChtaWdodCBiZSBudWxsKSAqLworICAvKiBub25jZWxlbjogY2hlY2sgaWYgcHJvcGVyIGxlbmd0aCAoaWYgbm9uY2Ugbm90IG51bGwpICovCisgIC8qIGl2b3V0OiAgICBpdiB1c2VkIHRvIGluaXRpYWxpemUgZ2NtLCBvdXRwdXQgdG8gdXNlciAqLworICAvKiBpdm91dGxlbjogY2hlY2sgY29ycmVjdCBzaXplICovCisgIGJ5dGUgaXZbSVZMRU5dOworCisgIGlmICghaXZvdXQpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgaWYgKGl2b3V0bGVuICE9IElWTEVOKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9MRU5HVEg7CisgIGlmIChub25jZSAhPSBOVUxMICYmICFpc19ub25jZV9va19sZW4obm9uY2VsZW4pKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgZ2NtX2dlbmVyYXRlX2l2KGl2LCBub25jZSwgbm9uY2VsZW4pOworCisgIGMtPm1hcmtzLml2ID0gMDsKKyAgYy0+bWFya3MudGFnID0gMDsKKyAgYy0+dV9tb2RlLmdjbS5kaXNhbGxvd19lbmNyeXB0aW9uX2JlY2F1c2Vfb2Zfc2V0aXZfaW5fZmlwc19tb2RlID0gMDsKKworICBfZ2NyeV9jaXBoZXJfZ2NtX2luaXRpdiAoYywgaXYsIElWTEVOKTsKKworICBidWZfY3B5KGl2b3V0LCBpdiwgSVZMRU4pOworICB3aXBlbWVtb3J5KGl2LCBzaXplb2YoaXYpKTsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9nY21fdGFnIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgICAgYnl0ZSAqIG91dGJ1Ziwgc2l6ZV90IG91dGJ1ZmxlbiwgaW50IGNoZWNrKQoreworICBpZiAob3V0YnVmbGVuIDwgR0NSWV9HQ01fQkxPQ0tfTEVOKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisgIGlmIChjLT51X21vZGUuZ2NtLmRhdGFsZW5fb3Zlcl9saW1pdHMpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICBpZiAoIWMtPm1hcmtzLnRhZykKKyAgICB7CisgICAgICB1MzIgYml0bGVuZ3Roc1syXVsyXTsKKworICAgICAgLyogYWFkIGxlbmd0aCAqLworICAgICAgYml0bGVuZ3Roc1swXVsxXSA9IGJlX2Jzd2FwMzIoYy0+dV9tb2RlLmdjbS5hYWRsZW5bMF0gPDwgMyk7CisgICAgICBiaXRsZW5ndGhzWzBdWzBdID0gYmVfYnN3YXAzMigoYy0+dV9tb2RlLmdjbS5hYWRsZW5bMF0gPj4gMjkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjLT51X21vZGUuZ2NtLmFhZGxlblsxXSA8PCAzKSk7CisgICAgICAvKiBkYXRhIGxlbmd0aCAqLworICAgICAgYml0bGVuZ3Roc1sxXVsxXSA9IGJlX2Jzd2FwMzIoYy0+dV9tb2RlLmdjbS5kYXRhbGVuWzBdIDw8IDMpOworICAgICAgYml0bGVuZ3Roc1sxXVswXSA9IGJlX2Jzd2FwMzIoKGMtPnVfbW9kZS5nY20uZGF0YWxlblswXSA+PiAyOSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMtPnVfbW9kZS5nY20uZGF0YWxlblsxXSA8PCAzKSk7CisKKyAgICAgIC8qIEZpbmFsaXplIGRhdGEtc3RyZWFtLiAqLworICAgICAgZG9fZ2hhc2hfYnVmKGMsIGMtPnVfbW9kZS5nY20udV90YWcudGFnLCBOVUxMLCAwLCAxKTsKKyAgICAgIGMtPnVfbW9kZS5nY20uZ2hhc2hfYWFkX2ZpbmFsaXplZCA9IDE7CisgICAgICBjLT51X21vZGUuZ2NtLmdoYXNoX2RhdGFfZmluYWxpemVkID0gMTsKKworICAgICAgLyogQWRkIGJpdGxlbmd0aHMgdG8gdGFnLiAqLworICAgICAgZG9fZ2hhc2hfYnVmKGMsIGMtPnVfbW9kZS5nY20udV90YWcudGFnLCAoYnl0ZSopYml0bGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICBHQ1JZX0dDTV9CTE9DS19MRU4sIDEpOworICAgICAgYnVmX3hvciAoYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIGMtPnVfbW9kZS5nY20udGFnaXYsCisgICAgICAgICAgICAgICBjLT51X21vZGUuZ2NtLnVfdGFnLnRhZywgR0NSWV9HQ01fQkxPQ0tfTEVOKTsKKyAgICAgIGMtPm1hcmtzLnRhZyA9IDE7CisKKyAgICAgIHdpcGVtZW1vcnkgKGJpdGxlbmd0aHMsIHNpemVvZiAoYml0bGVuZ3RocykpOworICAgICAgd2lwZW1lbW9yeSAoYy0+dV9tb2RlLmdjbS5tYWNidWYsIEdDUllfR0NNX0JMT0NLX0xFTik7CisgICAgICB3aXBlbWVtb3J5IChjLT51X21vZGUuZ2NtLnRhZ2l2LCBHQ1JZX0dDTV9CTE9DS19MRU4pOworICAgICAgd2lwZW1lbW9yeSAoYy0+dV9tb2RlLmdjbS5hYWRsZW4sIHNpemVvZiAoYy0+dV9tb2RlLmdjbS5hYWRsZW4pKTsKKyAgICAgIHdpcGVtZW1vcnkgKGMtPnVfbW9kZS5nY20uZGF0YWxlbiwgc2l6ZW9mIChjLT51X21vZGUuZ2NtLmRhdGFsZW4pKTsKKyAgICB9CisKKyAgaWYgKCFjaGVjaykKKyAgICB7CisgICAgICBtZW1jcHkgKG91dGJ1ZiwgYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIG91dGJ1Zmxlbik7CisgICAgICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gYnVmX2VxX2NvbnN0KG91dGJ1ZiwgYy0+dV9tb2RlLmdjbS51X3RhZy50YWcsIG91dGJ1ZmxlbikgPworICAgICAgICAgICAgICAgR1BHX0VSUl9OT19FUlJPUiA6IEdQR19FUlJfQ0hFQ0tTVU07CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2djbV9nZXRfdGFnIChnY3J5X2NpcGhlcl9oZF90IGMsIHVuc2lnbmVkIGNoYXIgKm91dHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ2xlbikKK3sKKyAgLyogT3V0cHV0dGluZyBhdXRoZW50aWNhdGlvbiB0YWcgaXMgcGFydCBvZiBlbmNyeXB0aW9uLiAqLworICBpZiAoYy0+dV9tb2RlLmdjbS5kaXNhbGxvd19lbmNyeXB0aW9uX2JlY2F1c2Vfb2Zfc2V0aXZfaW5fZmlwc19tb2RlKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9TVEFURTsKKworICByZXR1cm4gX2djcnlfY2lwaGVyX2djbV90YWcgKGMsIG91dHRhZywgdGFnbGVuLCAwKTsKK30KKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfZ2NtX2NoZWNrX3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnbGVuKQoreworICByZXR1cm4gX2djcnlfY2lwaGVyX2djbV90YWcgKGMsICh1bnNpZ25lZCBjaGFyICopIGludGFnLCB0YWdsZW4sIDEpOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oIGIvY2lwaGVyL2NpcGhlci1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYWM0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2lwaGVyLWludGVybmFsLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qIGNpcGhlci1pbnRlcm5hbC5oICAtIEludGVybmFsIGRlZnMgZm9yIGNpcGhlci5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgRzEwX0NJUEhFUl9JTlRFUk5BTF9ICisjZGVmaW5lIEcxMF9DSVBIRVJfSU5URVJOQUxfSAorCisvKiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSBvZiBhIGJsb2NrIGluIGJ5dGVzLiAgKi8KKyNkZWZpbmUgTUFYX0JMT0NLU0laRSAxNgorCisvKiBNYWdpYyB2YWx1ZXMgZm9yIHRoZSBjb250ZXh0IHN0cnVjdHVyZS4gICovCisjZGVmaW5lIENUWF9NQUdJQ19OT1JNQUwgMHgyNDA5MTk2NAorI2RlZmluZSBDVFhfTUFHSUNfU0VDVVJFIDB4NDY5MTkwNDIKKworLyogVHJ5IHRvIHVzZSAxNiBieXRlIGFsaWduZWQgY2lwaGVyIGNvbnRleHQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgIFdlIHVzZSB0aGUgYWxpZ25lZCBhdHRyaWJ1dGUsIHRodXMgaXQgaXMgb25seSBwb3NzaWJsZSB0byBpbXBsZW1lbnQKKyAgIHRoaXMgd2l0aCBnY2MuICAqLworI3VuZGVmIE5FRURfMTZCWVRFX0FMSUdORURfQ09OVEVYVAorI2lmZGVmIEhBVkVfR0NDX0FUVFJJQlVURV9BTElHTkVECisjIGRlZmluZSBORUVEXzE2QllURV9BTElHTkVEX0NPTlRFWFQgMQorI2VuZGlmCisKKy8qIFVuZGVmIHRoaXMgc3ltYm9sIHRvIHRyYWRlIEdDTSBzcGVlZCBmb3IgMjU2IGJ5dGVzIG9mIG1lbW9yeSBwZXIgY29udGV4dCAqLworI2RlZmluZSBHQ01fVVNFX1RBQkxFUyAxCisKKworLyogR0NNX1VTRV9JTlRFTF9QQ0xNVUwgaW5pZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgR0NNIHdpdGggSW50ZWwgUENMTVVMCisgICBjb2RlLiAgKi8KKyN1bmRlZiBHQ01fVVNFX0lOVEVMX1BDTE1VTAorI2lmIGRlZmluZWQoRU5BQkxFX1BDTE1VTF9TVVBQT1JUKSAmJiBkZWZpbmVkKEdDTV9VU0VfVEFCTEVTKQorIyBpZiAoKGRlZmluZWQoX19pMzg2X18pICYmIFNJWkVPRl9VTlNJR05FRF9MT05HID09IDQpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjICBpZiBfX0dOVUNfXyA+PSA0CisjICAgZGVmaW5lIEdDTV9VU0VfSU5URUxfUENMTVVMIDEKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogR0NNX1VTRV9JTlRFTF9QQ0xNVUwgKi8KKworCisvKiBBIFZJQSBwcm9jZXNzb3Igd2l0aCB0aGUgUGFkbG9jayBlbmdpbmUgYXMgd2VsbCBhcyB0aGUgSW50ZWwgQUVTX05JCisgICBpbnN0cnVjdGlvbnMgcmVxdWlyZSBhbiBhbGlnbm1lbnQgb2YgbW9zdCBkYXRhIG9uIGEgMTYgYnl0ZQorICAgYm91bmRhcnkuICBCZWNhdXNlIHdlIHRyaWNrIG91dCB0aGUgY29tcGlsZXIgd2hpbGUgYWxsb2NhdGluZyB0aGUKKyAgIGNvbnRleHQsIHRoZSBhbGlnbiBhdHRyaWJ1dGUgYXMgdXNlZCBpbiByaWpuZGFlbC5jIGRvZXMgbm90IHdvcmsgb24KKyAgIGl0cyBvd24uICBUaHVzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBjb250ZXh0CisgICBzdHJ1Y3R1cmUgaXMgYSBhbGlnbmVkIG9uIHRoYXQgYm91bmRhcnkuICBXZSBhY2hpZXZlIHRoaXMgYnkKKyAgIGRlZmluaW5nIGEgbmV3IHR5cGUgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2Ygb3VyIHVzdWFsIGFsaWdubWVudAorICAgdHlwZS4gICovCit0eXBlZGVmIHVuaW9uCit7CisgIFBST1BFUkxZX0FMSUdORURfVFlQRSBmb287CisjaWZkZWYgTkVFRF8xNkJZVEVfQUxJR05FRF9DT05URVhUCisgIGNoYXIgYmFyWzE2XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CisjZW5kaWYKKyAgY2hhciBjWzFdOworfSBjaXBoZXJfY29udGV4dF9hbGlnbm1lbnRfdDsKKworCisvKiBUaGUgaGFuZGxlIHN0cnVjdHVyZS4gICovCitzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlCit7CisgIGludCBtYWdpYzsKKyAgc2l6ZV90IGFjdHVhbF9oYW5kbGVfc2l6ZTsgICAgIC8qIEFsbG9jYXRlZCBzaXplIG9mIHRoaXMgaGFuZGxlLiAqLworICBzaXplX3QgaGFuZGxlX29mZnNldDsgICAgICAgICAgLyogT2Zmc2V0IHRvIHRoZSBtYWxsb2NlZCBibG9jay4gICovCisgIGdjcnlfY2lwaGVyX3NwZWNfdCAqc3BlYzsKKworICAvKiBUaGUgYWxnb3JpdGhtIGlkLiAgVGhpcyBpcyBhIGhhY2sgcmVxdWlyZWQgYmVjYXVzZSB0aGUgbW9kdWxlCisgICAgIGludGVyZmFjZSBkb2VzIG5vdCBlYXNpbHkgYWxsb3cgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZS4gKi8KKyAgaW50IGFsZ287CisKKyAgLyogQSBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbiBwb2ludGVycyBmb3IgYnVsayBvcGVyYXRpb25zLiAgRHVlIHRvCisgICAgIGxpbWl0YXRpb25zIG9mIHRoZSBtb2R1bGUgc3lzdGVtICh3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUKKyAgICAgQVBJKSB3ZSBuZWVkIHRvIGtlZXAgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgaGVyZS4gIFRoZSBjaXBoZXIKKyAgICAgb3BlbiBmdW5jdGlvbiBpbnRpYWxpemVzIHRoZW0gYW5kIHRoZSBhY3R1YWwgZW5jcnlwdGlvbiByb3V0aW5lcworICAgICB1c2UgdGhlbSBpZiB0aGV5IGFyZSBub3QgTlVMTC4gICovCisgIHN0cnVjdCB7CisgICAgdm9pZCAoKmNmYl9lbmMpKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKKyAgICB2b2lkICgqY2ZiX2RlYykodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpOworICAgIHZvaWQgKCpjYmNfZW5jKSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2NrcywgaW50IGNiY19tYWMpOworICAgIHZvaWQgKCpjYmNfZGVjKSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2Nrcyk7CisgICAgdm9pZCAoKmN0cl9lbmMpKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKKyAgfSBidWxrOworCisKKyAgaW50IG1vZGU7CisgIHVuc2lnbmVkIGludCBmbGFnczsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBrZXk6MTsgLyogU2V0IHRvIDEgaWYgYSBrZXkgaGFzIGJlZW4gc2V0LiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgaXY6MTsgIC8qIFNldCB0byAxIGlmIGEgSVYgaGFzIGJlZW4gc2V0LiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdGFnOjE7IC8qIFNldCB0byAxIGlmIGEgdGFnIGlzIGZpbmFsaXplZC4gKi8KKyAgfSBtYXJrczsKKworICAvKiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiAgRm9yIGJlc3QgcGVyZm9ybWFuY2Ugd2UgbWFrZSBzdXJlCisgICAgIHRoYXQgaXQgaXMgcHJvcGVybHkgYWxpZ25lZC4gIEluIHBhcnRpY3VsYXIgc29tZSBpbXBsZW1lbnRhdGlvbnMKKyAgICAgb2YgYnVsayBvcGVyYXRpb25zIGV4cGVjdCBhbiAxNiBieXRlIGFsaWduZWQgSVYuICBJViBpcyBhbHNvIHVzZWQKKyAgICAgdG8gc3RvcmUgQ0JDLU1BQyBpbiBDQ00gbW9kZTsgY291bnRlciBJViBpcyBzdG9yZWQgaW4gVV9DVFIuICAqLworICB1bmlvbiB7CisgICAgY2lwaGVyX2NvbnRleHRfYWxpZ25tZW50X3QgaXZfYWxpZ247CisgICAgdW5zaWduZWQgY2hhciBpdltNQVhfQkxPQ0tTSVpFXTsKKyAgfSB1X2l2OworCisgIC8qIFRoZSBjb3VudGVyIGZvciBDVFIgbW9kZS4gIFRoaXMgZmllbGQgaXMgYWxzbyB1c2VkIGJ5IEFFU1dSQVAgYW5kCisgICAgIHRodXMgd2UgY2FuJ3QgdXNlIHRoZSBVX0lWIHVuaW9uLiAgKi8KKyAgdW5pb24geworICAgIGNpcGhlcl9jb250ZXh0X2FsaWdubWVudF90IGl2X2FsaWduOworICAgIHVuc2lnbmVkIGNoYXIgY3RyW01BWF9CTE9DS1NJWkVdOworICB9IHVfY3RyOworCisgIC8qIFNwYWNlIHRvIHNhdmUgYW4gSVYgb3IgQ1RSIGZvciBjaGFpbmluZyBvcGVyYXRpb25zLiAgKi8KKyAgdW5zaWduZWQgY2hhciBsYXN0aXZbTUFYX0JMT0NLU0laRV07CisgIGludCB1bnVzZWQ7ICAvKiBOdW1iZXIgb2YgdW51c2VkIGJ5dGVzIGluIExBU1RJVi4gKi8KKworICB1bmlvbiB7CisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorICAgIC8qIE1vZGUgc3BlY2lmaWMgc3RvcmFnZSBmb3IgQ0NNIG1vZGUuICovCisgICAgc3RydWN0IHsKKyAgICAgIHU2NCBlbmNyeXB0bGVuOworICAgICAgdTY0IGFhZGxlbjsKKyAgICAgIHVuc2lnbmVkIGludCBhdXRobGVuOworCisgICAgICAvKiBTcGFjZSB0byBzYXZlIHBhcnRpYWwgaW5wdXQgbGVuZ3RocyBmb3IgTUFDLiAqLworICAgICAgdW5zaWduZWQgY2hhciBtYWNidWZbR0NSWV9DQ01fQkxPQ0tfTEVOXTsKKyAgICAgIGludCBtYWNfdW51c2VkOyAgLyogTnVtYmVyIG9mIHVucHJvY2Vzc2VkIGJ5dGVzIGluIE1BQ0JVRi4gKi8KKworICAgICAgdW5zaWduZWQgY2hhciBzMFtHQ1JZX0NDTV9CTE9DS19MRU5dOworCisgICAgICB1bnNpZ25lZCBpbnQgbm9uY2U6MTsvKiBTZXQgdG8gMSBpZiBub25jZSBoYXMgYmVlbiBzZXQuICAqLworICAgICAgdW5zaWduZWQgaW50IGxlbmd0aHM6MTsgLyogU2V0IHRvIDEgaWYgQ0NNIGxlbmd0aCBwYXJhbWV0ZXJzIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuICAqLworICAgIH0gY2NtOworI2VuZGlmCisKKyAgICAvKiBNb2RlIHNwZWNpZmljIHN0b3JhZ2UgZm9yIENNQUMgbW9kZS4gKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgaW50IHRhZzoxOyAvKiBTZXQgdG8gMSBpZiB0YWcgaGFzIGJlZW4gZmluYWxpemVkLiAgKi8KKworICAgICAgLyogU3Via2V5cyBmb3IgdGFnIGNyZWF0aW9uLCBub3QgY2xlYXJlZCBieSBnY3J5X2NpcGhlcl9yZXNldC4gKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgc3Via2V5c1syXVtNQVhfQkxPQ0tTSVpFXTsKKyAgICB9IGNtYWM7CisKKyAgICAvKiBNb2RlIHNwZWNpZmljIHN0b3JhZ2UgZm9yIEdDTSBtb2RlLiAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBUaGUgaW50ZXJpbSB0YWcgZm9yIEdDTSBtb2RlLiAgKi8KKyAgICAgIHVuaW9uIHsKKyAgICAgICAgY2lwaGVyX2NvbnRleHRfYWxpZ25tZW50X3QgaXZfYWxpZ247CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnW01BWF9CTE9DS1NJWkVdOworICAgICAgfSB1X3RhZzsKKworICAgICAgLyogU3BhY2UgdG8gc2F2ZSBwYXJ0aWFsIGlucHV0IGxlbmd0aHMgZm9yIE1BQy4gKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgbWFjYnVmW0dDUllfQ0NNX0JMT0NLX0xFTl07CisgICAgICBpbnQgbWFjX3VudXNlZDsgIC8qIE51bWJlciBvZiB1bnByb2Nlc3NlZCBieXRlcyBpbiBNQUNCVUYuICovCisKKyAgICAgIC8qIGJ5dGUgY291bnRlcnMgZm9yIEdDTSAqLworICAgICAgdTMyIGFhZGxlblsyXTsKKyAgICAgIHUzMiBkYXRhbGVuWzJdOworCisgICAgICAvKiBlbmNyeXB0ZWQgdGFnIGNvdW50ZXIgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgdGFnaXZbTUFYX0JMT0NLU0laRV07CisKKyAgICAgIHVuc2lnbmVkIGludCBnaGFzaF9kYXRhX2ZpbmFsaXplZDoxOworICAgICAgdW5zaWduZWQgaW50IGdoYXNoX2FhZF9maW5hbGl6ZWQ6MTsKKworICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW5fb3Zlcl9saW1pdHM6MTsKKyAgICAgIHVuc2lnbmVkIGludCBkaXNhbGxvd19lbmNyeXB0aW9uX2JlY2F1c2Vfb2Zfc2V0aXZfaW5fZmlwc19tb2RlOjE7CisKKyAgICAgIC8qIC0tLSBGb2xsb3dpbmcgbWVtYmVycyBhcmUgbm90IGNsZWFyZWQgaW4gZ2NyeV9jaXBoZXJfcmVzZXQgLS0tICovCisKKyAgICAgIC8qIEdIQVNIIG11bHRpcGxpZXIgZnJvbSBrZXkuICAqLworICAgICAgdW5pb24geworICAgICAgICBjaXBoZXJfY29udGV4dF9hbGlnbm1lbnRfdCBpdl9hbGlnbjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBrZXlbTUFYX0JMT0NLU0laRV07CisgICAgICB9IHVfZ2hhc2hfa2V5OworCisjaWZkZWYgR0NNX1VTRV9JTlRFTF9QQ0xNVUwKKyAgICAgIC8qIFVzZSBJbnRlbCBQQ0xNVUwgaW5zdHJ1Y3Rpb25zIGZvciBhY2NlbGVyYXRlZCBHSEFTSC4gKi8KKyAgICAgIHVuc2lnbmVkIGludCB1c2VfaW50ZWxfcGNsbXVsOjE7CisjZW5kaWYKKworICAgICAgLyogUHJlLWNhbGN1bGF0ZWQgdGFibGUgZm9yIEdDTS4gKi8KKyNpZmRlZiBHQ01fVVNFX1RBQkxFUworICNpZiBkZWZpbmVkKEhBVkVfVTY0X1RZUEVERUYpICYmIChTSVpFT0ZfVU5TSUdORURfTE9ORyA9PSA4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyAgICAgICNkZWZpbmUgR0NNX1RBQkxFU19VU0VfVTY0IDEKKyAgICAgIHU2NCBnY21fdGFibGVbMiAqIDE2XTsKKyAjZWxzZQorICAgICAgI3VuZGVmIEdDTV9UQUJMRVNfVVNFX1U2NAorICAgICAgdTMyIGdjbV90YWJsZVs0ICogMTZdOworICNlbmRpZgorI2VuZGlmCisgICAgfSBnY207CisgIH0gdV9tb2RlOworCisgIC8qIFdoYXQgZm9sbG93cyBhcmUgdHdvIGNvbnRleHRzIG9mIHRoZSBjaXBoZXIgaW4gdXNlLiAgVGhlIGZpcnN0CisgICAgIG9uZSBuZWVkcyB0byBiZSBhbGlnbmVkIHdlbGwgZW5vdWdoIGZvciB0aGUgY2lwaGVyIG9wZXJhdGlvbgorICAgICB3aGVyZWFzIHRoZSBzZWNvbmQgb25lIGlzIGEgY29weSBjcmVhdGVkIGJ5IGNpcGhlcl9zZXRrZXkgYW5kCisgICAgIHVzZWQgYnkgY2lwaGVyX3Jlc2V0LiAgVGhhdCBzZWNvbmQgY29weSBoYXMgbm8gbmVlZCBmb3IgcHJvcGVyCisgICAgIGFsaWdtZW50IGJlY2F1c2UgaXQgaXMgb25seSBhY2Nlc3NlZCBieSBtZW1jcHkuICAqLworICBjaXBoZXJfY29udGV4dF9hbGlnbm1lbnRfdCBjb250ZXh0OworfTsKKworCisvKi0tIGNpcGhlci1jYmMuYyAtLSovCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NiY19lbmNyeXB0CisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY2JjX2RlY3J5cHQKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworCisvKi0tIGNpcGhlci1jZmIuYyAtLSovCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NmYl9lbmNyeXB0CisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY2ZiX2RlY3J5cHQKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworCisKKy8qLS0gY2lwaGVyLW9mYi5jIC0tKi8KK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfb2ZiX2VuY3J5cHQKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworCisvKi0tIGNpcGhlci1jdHIuYyAtLSovCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2N0cl9lbmNyeXB0CisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKTsKKworCisvKi0tIGNpcGhlci1hZXN3cmFwLmMgLS0qLworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9hZXN3cmFwX2VuY3J5cHQKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9hZXN3cmFwX2RlY3J5cHQKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworCisKKy8qLS0gY2lwaGVyLWNjbS5jIC0tKi8KK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY2NtX2VuY3J5cHQKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9jY21fZGVjcnlwdAorLyogICAgICAgICAgICovIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG91dGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIHNpemVfdCBpbmJ1Zmxlbik7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NjbV9zZXRfbm9uY2UKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IG5vbmNlbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY2NtX2F1dGhlbnRpY2F0ZQorLyogICAgICAgICAgICovIChnY3J5X2NpcGhlcl9oZF90IGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIHNpemVfdCBhYnVmbGVuKTsKKyNpZmRlZiBIQVZFX1U2NF9UWVBFREVGCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NjbV9zZXRfbGVuZ3RocworLyogICAgICAgICAgICovIChnY3J5X2NpcGhlcl9oZF90IGMsIHU2NCBlbmNyeXB0ZWRsZW4sIHU2NCBhYWRsZW4sIHU2NCB0YWdsZW4pOworI2VuZGlmCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NjbV9nZXRfdGFnCisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0dGFnLCBzaXplX3QgdGFnbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY2NtX2NoZWNrX3RhZworLyogICAgICAgICAgICovIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmludGFnLCBzaXplX3QgdGFnbGVuKTsKKworCisvKi0tIGNpcGhlci1nY20uYyAtLSovCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2djbV9lbmNyeXB0CisvKiAgICAgICAgICAgKi8gICAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG91dGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfZ2NtX2RlY3J5cHQKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9nY21fc2V0aXYKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdmxlbik7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2djbV9hdXRoZW50aWNhdGUKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWFkYnVmLCBzaXplX3QgYWFkYnVmbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfZ2NtX2dldF90YWcKKy8qICAgICAgICAgICAqLyAgIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0dGFnLCBzaXplX3QgdGFnbGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfZ2NtX2NoZWNrX3RhZworLyogICAgICAgICAgICovICAgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnRhZywgc2l6ZV90IHRhZ2xlbik7Cit2b2lkIF9nY3J5X2NpcGhlcl9nY21fc2V0a2V5CisvKiAgICAgICAgICAgKi8gICAoZ2NyeV9jaXBoZXJfaGRfdCBjKTsKKworCisjZW5kaWYgLypHMTBfQ0lQSEVSX0lOVEVSTkFMX0gqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NpcGhlci1vZmIuYyBiL2NpcGhlci9jaXBoZXItb2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg0Mjc3NAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jaXBoZXItb2ZiLmMKQEAgLTAsMCArMSw5NiBAQAorLyogY2lwaGVyLW9mYi5jICAtIEdlbmVyaWMgT0ZCIG1vZGUgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworICogICAgICAgICAgICAgICAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYXRoLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgIi4vY2lwaGVyLWludGVybmFsLmgiCisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfb2ZiX2VuY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKQoreworICB1bnNpZ25lZCBjaGFyICppdnA7CisgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNfZm4gPSBjLT5zcGVjLT5lbmNyeXB0OworICBzaXplX3QgYmxvY2tzaXplID0gYy0+c3BlYy0+YmxvY2tzaXplOworICB1bnNpZ25lZCBpbnQgYnVybiwgbmJ1cm47CisKKyAgaWYgKG91dGJ1ZmxlbiA8IGluYnVmbGVuKQorICAgIHJldHVybiBHUEdfRVJSX0JVRkZFUl9UT09fU0hPUlQ7CisKKyAgaWYgKCBpbmJ1ZmxlbiA8PSBjLT51bnVzZWQgKQorICAgIHsKKyAgICAgIC8qIFNob3J0IGVub3VnaCB0byBiZSBlbmNvZGVkIGJ5IHRoZSByZW1haW5pbmcgWE9SIG1hc2suICovCisgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIElWICovCisgICAgICBpdnAgPSBjLT51X2l2Lml2ICsgYmxvY2tzaXplIC0gYy0+dW51c2VkOworICAgICAgYnVmX3hvcihvdXRidWYsIGl2cCwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGMtPnVudXNlZCAtPSBpbmJ1ZmxlbjsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBidXJuID0gMDsKKworICBpZiggYy0+dW51c2VkICkKKyAgICB7CisgICAgICBpbmJ1ZmxlbiAtPSBjLT51bnVzZWQ7CisgICAgICBpdnAgPSBjLT51X2l2Lml2ICsgYmxvY2tzaXplIC0gYy0+dW51c2VkOworICAgICAgYnVmX3hvcihvdXRidWYsIGl2cCwgaW5idWYsIGMtPnVudXNlZCk7CisgICAgICBvdXRidWYgKz0gYy0+dW51c2VkOworICAgICAgaW5idWYgKz0gYy0+dW51c2VkOworICAgICAgYy0+dW51c2VkID0gMDsKKyAgICB9CisKKyAgLyogTm93IHdlIGNhbiBwcm9jZXNzIGNvbXBsZXRlIGJsb2Nrcy4gKi8KKyAgd2hpbGUgKCBpbmJ1ZmxlbiA+PSBibG9ja3NpemUgKQorICAgIHsKKyAgICAgIC8qIEVuY3J5cHQgdGhlIElWIChhbmQgc2F2ZSB0aGUgY3VycmVudCBvbmUpLiAqLworICAgICAgbmJ1cm4gPSBlbmNfZm4gKCAmYy0+Y29udGV4dC5jLCBjLT51X2l2Lml2LCBjLT51X2l2Lml2ICk7CisgICAgICBidXJuID0gbmJ1cm4gPiBidXJuID8gbmJ1cm4gOiBidXJuOworICAgICAgYnVmX3hvcihvdXRidWYsIGMtPnVfaXYuaXYsIGluYnVmLCBibG9ja3NpemUpOworICAgICAgb3V0YnVmICs9IGJsb2Nrc2l6ZTsKKyAgICAgIGluYnVmICs9IGJsb2Nrc2l6ZTsKKyAgICAgIGluYnVmbGVuIC09IGJsb2Nrc2l6ZTsKKyAgICB9CisgIGlmICggaW5idWZsZW4gKQorICAgIHsgLyogcHJvY2VzcyB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgICAgICBuYnVybiA9IGVuY19mbiAoICZjLT5jb250ZXh0LmMsIGMtPnVfaXYuaXYsIGMtPnVfaXYuaXYgKTsKKyAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICBjLT51bnVzZWQgPSBibG9ja3NpemU7CisgICAgICBjLT51bnVzZWQgLT0gaW5idWZsZW47CisgICAgICBidWZfeG9yKG91dGJ1ZiwgYy0+dV9pdi5pdiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIG91dGJ1ZiArPSBpbmJ1ZmxlbjsKKyAgICAgIGluYnVmICs9IGluYnVmbGVuOworICAgICAgaW5idWZsZW4gPSAwOworICAgIH0KKworICBpZiAoYnVybiA+IDApCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybiArIDQgKiBzaXplb2Yodm9pZCAqKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvY2lwaGVyLXNlbGZ0ZXN0LmMgYi9jaXBoZXIvY2lwaGVyLXNlbGZ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzM2Q5NAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9jaXBoZXItc2VsZnRlc3QuYwpAQCAtMCwwICsxLDQ3MCBAQAorLyogY2lwaGVyLXNlbGZ0ZXN0LmMgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBidWxrIGVuY3J5cHRpb24gc2VsZnRlc3RzLgorICoJQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWZkZWYgSEFWRV9TWVNMT0cKKyMgaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJjaXBoZXItc2VsZnRlc3QuaCIKKworI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+IC8qIHVpbnRwdHJfdCAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lOVFRZUEVTX0gpCisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorLyogSW4gdGhpcyBjYXNlLCB1aW50cHRyX3QgaXMgcHJvdmlkZWQgYnkgY29uZmlnLmguICovCisjZW5kaWYKKworLyogSGVscGVyIG1hY3JvIHRvIGZvcmNlIGFsaWdubWVudCB0byAxNiBieXRlcy4gICovCisjaWZkZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKyMgZGVmaW5lIEFUVFJfQUxJR05FRF8xNiAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpCisjZWxzZQorIyBkZWZpbmUgQVRUUl9BTElHTkVEXzE2CisjZW5kaWYKKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIDxibG9jayBjaXBoZXI+LUNCQy08YmxvY2sgc2l6ZT4sIHRlc3RzIGJ1bGsgQ0JDCisgICBkZWNyeXB0aW9uLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitjb25zdCBjaGFyICoKK19nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jYmMgKGNvbnN0IGNoYXIgKmNpcGhlciwgZ2NyeV9jaXBoZXJfc2V0a2V5X3Qgc2V0a2V5X2Z1bmMsCisJCQkgICBnY3J5X2NpcGhlcl9lbmNyeXB0X3QgZW5jcnlwdF9vbmUsCisJCQkgICBnY3J5X2NpcGhlcl9idWxrX2NiY19kZWNfdCBidWxrX2NiY19kZWMsCisJCQkgICBjb25zdCBpbnQgbmJsb2NrcywgY29uc3QgaW50IGJsb2Nrc2l6ZSwKKwkJCSAgIGNvbnN0IGludCBjb250ZXh0X3NpemUpCit7CisgIGludCBpLCBvZmZzOworICB1bnNpZ25lZCBjaGFyICpjdHgsICpwbGFpbnRleHQsICpwbGFpbnRleHQyLCAqY2lwaGVydGV4dCwgKml2LCAqaXYyLCAqbWVtOworICB1bnNpZ25lZCBpbnQgY3R4X2FsaWduZWRfc2l6ZSwgbWVtc2l6ZTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdIEFUVFJfQUxJR05FRF8xNiA9IHsKKyAgICAgIDB4NjYsMHg5QSwweDAwLDB4N0YsMHhDNywweDZBLDB4NDUsMHg5RiwKKyAgICAgIDB4OTgsMHhCQSwweEY5LDB4MTcsMHhGRSwweERGLDB4OTUsMHgyMgorICAgIH07CisKKyAgLyogQWxsb2NhdGUgYnVmZmVycywgYWxpZ24gZmlyc3QgdHdvIGVsZW1lbnRzIHRvIDE2IGJ5dGVzIGFuZCBsYXR0ZXIgdG8KKyAgICAgYmxvY2sgc2l6ZS4gICovCisgIGN0eF9hbGlnbmVkX3NpemUgPSBjb250ZXh0X3NpemUgKyAxNTsKKyAgY3R4X2FsaWduZWRfc2l6ZSAtPSBjdHhfYWxpZ25lZF9zaXplICYgMHhmOworCisgIG1lbXNpemUgPSBjdHhfYWxpZ25lZF9zaXplICsgKGJsb2Nrc2l6ZSAqIDIpICsgKGJsb2Nrc2l6ZSAqIG5ibG9ja3MgKiAzKSArIDE2OworCisgIG1lbSA9IHh0cnljYWxsb2MgKDEsIG1lbXNpemUpOworICBpZiAoIW1lbSkKKyAgICByZXR1cm4gImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiOworCisgIG9mZnMgPSAoMTYgLSAoKHVpbnRwdHJfdCltZW0gJiAxNSkpICYgMTU7CisgIGN0eCA9ICh2b2lkKikobWVtICsgb2Zmcyk7CisgIGl2ID0gY3R4ICsgY3R4X2FsaWduZWRfc2l6ZTsKKyAgaXYyID0gaXYgKyBibG9ja3NpemU7CisgIHBsYWludGV4dCA9IGl2MiArIGJsb2Nrc2l6ZTsKKyAgcGxhaW50ZXh0MiA9IHBsYWludGV4dCArIG5ibG9ja3MgKiBibG9ja3NpemU7CisgIGNpcGhlcnRleHQgPSBwbGFpbnRleHQyICsgbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKworICAvKiBJbml0aWFsaXplIGN0eCAqLworICBzZXRrZXlfZnVuYyAoY3R4LCBrZXksIHNpemVvZihrZXkpKTsKKworICAvKiBUZXN0IHNpbmdsZSBibG9jayBjb2RlIHBhdGggKi8KKyAgbWVtc2V0IChpdiwgMHg0ZSwgYmxvY2tzaXplKTsKKyAgbWVtc2V0IChpdjIsIDB4NGUsIGJsb2Nrc2l6ZSk7CisgIGZvciAoaSA9IDA7IGkgPCBibG9ja3NpemU7IGkrKykKKyAgICBwbGFpbnRleHRbaV0gPSBpOworCisgIC8qIENCQyBtYW51YWxseS4gICovCisgIGJ1Zl94b3IgKGNpcGhlcnRleHQsIGl2LCBwbGFpbnRleHQsIGJsb2Nrc2l6ZSk7CisgIGVuY3J5cHRfb25lIChjdHgsIGNpcGhlcnRleHQsIGNpcGhlcnRleHQpOworICBtZW1jcHkgKGl2LCBjaXBoZXJ0ZXh0LCBibG9ja3NpemUpOworCisgIC8qIENCQyBkZWNyeXB0LiAgKi8KKyAgYnVsa19jYmNfZGVjIChjdHgsIGl2MiwgcGxhaW50ZXh0MiwgY2lwaGVydGV4dCwgMSk7CisgIGlmIChtZW1jbXAgKHBsYWludGV4dDIsIHBsYWludGV4dCwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZSAobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DQkMtJWQgdGVzdCBmYWlsZWQgKHBsYWludGV4dCBtaXNtYXRjaCkiLCBjaXBoZXIsCisJICAgICAgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENCQyBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisKKyAgaWYgKG1lbWNtcCAoaXYyLCBpdiwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZSAobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DQkMtJWQgdGVzdCBmYWlsZWQgKElWIG1pc21hdGNoKSIsIGNpcGhlciwgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENCQyBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisKKyAgLyogVGVzdCBwYXJhbGxlbGl6ZWQgY29kZSBwYXRocyAqLworICBtZW1zZXQgKGl2LCAweDVmLCBibG9ja3NpemUpOworICBtZW1zZXQgKGl2MiwgMHg1ZiwgYmxvY2tzaXplKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbmJsb2NrcyAqIGJsb2Nrc2l6ZTsgaSsrKQorICAgIHBsYWludGV4dFtpXSA9IGk7CisKKyAgLyogQ3JlYXRlIENCQyBjaXBoZXJ0ZXh0IG1hbnVhbGx5LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5ibG9ja3MgKiBibG9ja3NpemU7IGkrPWJsb2Nrc2l6ZSkKKyAgICB7CisgICAgICBidWZfeG9yICgmY2lwaGVydGV4dFtpXSwgaXYsICZwbGFpbnRleHRbaV0sIGJsb2Nrc2l6ZSk7CisgICAgICBlbmNyeXB0X29uZSAoY3R4LCAmY2lwaGVydGV4dFtpXSwgJmNpcGhlcnRleHRbaV0pOworICAgICAgbWVtY3B5IChpdiwgJmNpcGhlcnRleHRbaV0sIGJsb2Nrc2l6ZSk7CisgICAgfQorCisgIC8qIERlY3J5cHQgdXNpbmcgYnVsayBDQkMgYW5kIGNvbXBhcmUgcmVzdWx0LiAgKi8KKyAgYnVsa19jYmNfZGVjIChjdHgsIGl2MiwgcGxhaW50ZXh0MiwgY2lwaGVydGV4dCwgbmJsb2Nrcyk7CisKKyAgaWYgKG1lbWNtcCAocGxhaW50ZXh0MiwgcGxhaW50ZXh0LCBuYmxvY2tzICogYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZSAobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DQkMtJWQgdGVzdCBmYWlsZWQgKHBsYWludGV4dCBtaXNtYXRjaCwgcGFyYWxsZWwgcGF0aCkiLAorCSAgICAgIGNpcGhlciwgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENCQyBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisgIGlmIChtZW1jbXAgKGl2MiwgaXYsIGJsb2Nrc2l6ZSkpCisgICAgeworICAgICAgeGZyZWUgKG1lbSk7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX1dBUk5JTkcsICJMaWJnY3J5cHQgd2FybmluZzogIgorICAgICAgICAgICAgICAiJXMtQ0JDLSVkIHRlc3QgZmFpbGVkIChJViBtaXNtYXRjaCwgcGFyYWxsZWwgcGF0aCkiLAorCSAgICAgIGNpcGhlciwgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENCQyBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisKKyAgeGZyZWUgKG1lbSk7CisgIHJldHVybiBOVUxMOworfQorCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIDxibG9jayBjaXBoZXI+LUNGQi08YmxvY2sgc2l6ZT4sIHRlc3RzIGJ1bGsgQ0ZCCisgICBkZWNyeXB0aW9uLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitjb25zdCBjaGFyICoKK19nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jZmIgKGNvbnN0IGNoYXIgKmNpcGhlciwgZ2NyeV9jaXBoZXJfc2V0a2V5X3Qgc2V0a2V5X2Z1bmMsCisJCQkgICBnY3J5X2NpcGhlcl9lbmNyeXB0X3QgZW5jcnlwdF9vbmUsCisJCQkgICBnY3J5X2NpcGhlcl9idWxrX2NmYl9kZWNfdCBidWxrX2NmYl9kZWMsCisJCQkgICBjb25zdCBpbnQgbmJsb2NrcywgY29uc3QgaW50IGJsb2Nrc2l6ZSwKKwkJCSAgIGNvbnN0IGludCBjb250ZXh0X3NpemUpCit7CisgIGludCBpLCBvZmZzOworICB1bnNpZ25lZCBjaGFyICpjdHgsICpwbGFpbnRleHQsICpwbGFpbnRleHQyLCAqY2lwaGVydGV4dCwgKml2LCAqaXYyLCAqbWVtOworICB1bnNpZ25lZCBpbnQgY3R4X2FsaWduZWRfc2l6ZSwgbWVtc2l6ZTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdIEFUVFJfQUxJR05FRF8xNiA9IHsKKyAgICAgIDB4MTEsMHg5QSwweDAwLDB4N0YsMHhDNywweDZBLDB4NDUsMHg5RiwKKyAgICAgIDB4OTgsMHhCQSwweEY5LDB4MTcsMHhGRSwweERGLDB4OTUsMHgzMworICAgIH07CisKKyAgLyogQWxsb2NhdGUgYnVmZmVycywgYWxpZ24gZmlyc3QgdHdvIGVsZW1lbnRzIHRvIDE2IGJ5dGVzIGFuZCBsYXR0ZXIgdG8KKyAgICAgYmxvY2sgc2l6ZS4gICovCisgIGN0eF9hbGlnbmVkX3NpemUgPSBjb250ZXh0X3NpemUgKyAxNTsKKyAgY3R4X2FsaWduZWRfc2l6ZSAtPSBjdHhfYWxpZ25lZF9zaXplICYgMHhmOworCisgIG1lbXNpemUgPSBjdHhfYWxpZ25lZF9zaXplICsgKGJsb2Nrc2l6ZSAqIDIpICsgKGJsb2Nrc2l6ZSAqIG5ibG9ja3MgKiAzKSArIDE2OworCisgIG1lbSA9IHh0cnljYWxsb2MgKDEsIG1lbXNpemUpOworICBpZiAoIW1lbSkKKyAgICByZXR1cm4gImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiOworCisgIG9mZnMgPSAoMTYgLSAoKHVpbnRwdHJfdCltZW0gJiAxNSkpICYgMTU7CisgIGN0eCA9ICh2b2lkKikobWVtICsgb2Zmcyk7CisgIGl2ID0gY3R4ICsgY3R4X2FsaWduZWRfc2l6ZTsKKyAgaXYyID0gaXYgKyBibG9ja3NpemU7CisgIHBsYWludGV4dCA9IGl2MiArIGJsb2Nrc2l6ZTsKKyAgcGxhaW50ZXh0MiA9IHBsYWludGV4dCArIG5ibG9ja3MgKiBibG9ja3NpemU7CisgIGNpcGhlcnRleHQgPSBwbGFpbnRleHQyICsgbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKworICAvKiBJbml0aWFsaXplIGN0eCAqLworICBzZXRrZXlfZnVuYyAoY3R4LCBrZXksIHNpemVvZihrZXkpKTsKKworICAvKiBUZXN0IHNpbmdsZSBibG9jayBjb2RlIHBhdGggKi8KKyAgbWVtc2V0KGl2LCAweGQzLCBibG9ja3NpemUpOworICBtZW1zZXQoaXYyLCAweGQzLCBibG9ja3NpemUpOworICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpKyspCisgICAgcGxhaW50ZXh0W2ldID0gaTsKKworICAvKiBDRkIgbWFudWFsbHkuICAqLworICBlbmNyeXB0X29uZSAoY3R4LCBjaXBoZXJ0ZXh0LCBpdik7CisgIGJ1Zl94b3JfMmRzdCAoaXYsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgYmxvY2tzaXplKTsKKworICAvKiBDRkIgZGVjcnlwdC4gICovCisgIGJ1bGtfY2ZiX2RlYyAoY3R4LCBpdjIsIHBsYWludGV4dDIsIGNpcGhlcnRleHQsIDEpOworICBpZiAobWVtY21wKHBsYWludGV4dDIsIHBsYWludGV4dCwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZShtZW0pOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19XQVJOSU5HLCAiTGliZ2NyeXB0IHdhcm5pbmc6ICIKKyAgICAgICAgICAgICAgIiVzLUNGQi0lZCB0ZXN0IGZhaWxlZCAocGxhaW50ZXh0IG1pc21hdGNoKSIsIGNpcGhlciwKKwkgICAgICBibG9ja3NpemUgKiA4KTsKKyNlbmRpZgorICAgICAgcmV0dXJuICJzZWxmdGVzdCBmb3IgQ0ZCIGZhaWxlZCAtIHNlZSBzeXNsb2cgZm9yIGRldGFpbHMiOworICAgIH0KKworICBpZiAobWVtY21wKGl2MiwgaXYsIGJsb2Nrc2l6ZSkpCisgICAgeworICAgICAgeGZyZWUobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DRkItJWQgdGVzdCBmYWlsZWQgKElWIG1pc21hdGNoKSIsIGNpcGhlciwgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENGQiBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisKKyAgLyogVGVzdCBwYXJhbGxlbGl6ZWQgY29kZSBwYXRocyAqLworICBtZW1zZXQoaXYsIDB4ZTYsIGJsb2Nrc2l6ZSk7CisgIG1lbXNldChpdjIsIDB4ZTYsIGJsb2Nrc2l6ZSk7CisKKyAgZm9yIChpID0gMDsgaSA8IG5ibG9ja3MgKiBibG9ja3NpemU7IGkrKykKKyAgICBwbGFpbnRleHRbaV0gPSBpOworCisgIC8qIENyZWF0ZSBDRkIgY2lwaGVydGV4dCBtYW51YWxseS4gICovCisgIGZvciAoaSA9IDA7IGkgPCBuYmxvY2tzICogYmxvY2tzaXplOyBpKz1ibG9ja3NpemUpCisgICAgeworICAgICAgZW5jcnlwdF9vbmUgKGN0eCwgJmNpcGhlcnRleHRbaV0sIGl2KTsKKyAgICAgIGJ1Zl94b3JfMmRzdCAoaXYsICZjaXBoZXJ0ZXh0W2ldLCAmcGxhaW50ZXh0W2ldLCBibG9ja3NpemUpOworICAgIH0KKworICAvKiBEZWNyeXB0IHVzaW5nIGJ1bGsgQ0JDIGFuZCBjb21wYXJlIHJlc3VsdC4gICovCisgIGJ1bGtfY2ZiX2RlYyAoY3R4LCBpdjIsIHBsYWludGV4dDIsIGNpcGhlcnRleHQsIG5ibG9ja3MpOworCisgIGlmIChtZW1jbXAocGxhaW50ZXh0MiwgcGxhaW50ZXh0LCBuYmxvY2tzICogYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZShtZW0pOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19XQVJOSU5HLCAiTGliZ2NyeXB0IHdhcm5pbmc6ICIKKyAgICAgICAgICAgICAgIiVzLUNGQi0lZCB0ZXN0IGZhaWxlZCAocGxhaW50ZXh0IG1pc21hdGNoLCBwYXJhbGxlbCBwYXRoKSIsCisgICAgICAgICAgICAgIGNpcGhlciwgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENGQiBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisgIGlmIChtZW1jbXAoaXYyLCBpdiwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZShtZW0pOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19XQVJOSU5HLCAiTGliZ2NyeXB0IHdhcm5pbmc6ICIKKyAgICAgICAgICAgICAgIiVzLUNGQi0lZCB0ZXN0IGZhaWxlZCAoSVYgbWlzbWF0Y2gsIHBhcmFsbGVsIHBhdGgpIiwgY2lwaGVyLAorCSAgICAgIGJsb2Nrc2l6ZSAqIDgpOworI2VuZGlmCisgICAgICByZXR1cm4gInNlbGZ0ZXN0IGZvciBDRkIgZmFpbGVkIC0gc2VlIHN5c2xvZyBmb3IgZGV0YWlscyI7CisgICAgfQorCisgIHhmcmVlKG1lbSk7CisgIHJldHVybiBOVUxMOworfQorCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIDxibG9jayBjaXBoZXI+LUNUUi08YmxvY2sgc2l6ZT4sIHRlc3RzIElWIGluY3JlbWVudAorICAgb2YgYnVsayBDVFIgZW5jcnlwdGlvbi4gIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworY29uc3QgY2hhciAqCitfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyIChjb25zdCBjaGFyICpjaXBoZXIsIGdjcnlfY2lwaGVyX3NldGtleV90IHNldGtleV9mdW5jLAorCQkJICAgZ2NyeV9jaXBoZXJfZW5jcnlwdF90IGVuY3J5cHRfb25lLAorCQkJICAgZ2NyeV9jaXBoZXJfYnVsa19jdHJfZW5jX3QgYnVsa19jdHJfZW5jLAorCQkJICAgY29uc3QgaW50IG5ibG9ja3MsIGNvbnN0IGludCBibG9ja3NpemUsCisJCQkgICBjb25zdCBpbnQgY29udGV4dF9zaXplKQoreworICBpbnQgaSwgaiwgb2ZmcywgZGlmZjsKKyAgdW5zaWduZWQgY2hhciAqY3R4LCAqcGxhaW50ZXh0LCAqcGxhaW50ZXh0MiwgKmNpcGhlcnRleHQsICpjaXBoZXJ0ZXh0MiwKKyAgICAgICAgICAgICAgICAqaXYsICppdjIsICptZW07CisgIHVuc2lnbmVkIGludCBjdHhfYWxpZ25lZF9zaXplLCBtZW1zaXplOworCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl0gQVRUUl9BTElHTkVEXzE2ID0geworICAgICAgMHgwNiwweDlBLDB4MDAsMHg3RiwweEM3LDB4NkEsMHg0NSwweDlGLAorICAgICAgMHg5OCwweEJBLDB4RjksMHgxNywweEZFLDB4REYsMHg5NSwweDIxCisgICAgfTsKKworICAvKiBBbGxvY2F0ZSBidWZmZXJzLCBhbGlnbiBmaXJzdCB0d28gZWxlbWVudHMgdG8gMTYgYnl0ZXMgYW5kIGxhdHRlciB0bworICAgICBibG9jayBzaXplLiAgKi8KKyAgY3R4X2FsaWduZWRfc2l6ZSA9IGNvbnRleHRfc2l6ZSArIDE1OworICBjdHhfYWxpZ25lZF9zaXplIC09IGN0eF9hbGlnbmVkX3NpemUgJiAweGY7CisKKyAgbWVtc2l6ZSA9IGN0eF9hbGlnbmVkX3NpemUgKyAoYmxvY2tzaXplICogMikgKyAoYmxvY2tzaXplICogbmJsb2NrcyAqIDQpICsgMTY7CisKKyAgbWVtID0geHRyeWNhbGxvYyAoMSwgbWVtc2l6ZSk7CisgIGlmICghbWVtKQorICAgIHJldHVybiAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSI7CisKKyAgb2ZmcyA9ICgxNiAtICgodWludHB0cl90KW1lbSAmIDE1KSkgJiAxNTsKKyAgY3R4ID0gKHZvaWQqKShtZW0gKyBvZmZzKTsKKyAgaXYgPSBjdHggKyBjdHhfYWxpZ25lZF9zaXplOworICBpdjIgPSBpdiArIGJsb2Nrc2l6ZTsKKyAgcGxhaW50ZXh0ID0gaXYyICsgYmxvY2tzaXplOworICBwbGFpbnRleHQyID0gcGxhaW50ZXh0ICsgbmJsb2NrcyAqIGJsb2Nrc2l6ZTsKKyAgY2lwaGVydGV4dCA9IHBsYWludGV4dDIgKyBuYmxvY2tzICogYmxvY2tzaXplOworICBjaXBoZXJ0ZXh0MiA9IGNpcGhlcnRleHQgKyBuYmxvY2tzICogYmxvY2tzaXplOworCisgIC8qIEluaXRpYWxpemUgY3R4ICovCisgIHNldGtleV9mdW5jIChjdHgsIGtleSwgc2l6ZW9mKGtleSkpOworCisgIC8qIFRlc3Qgc2luZ2xlIGJsb2NrIGNvZGUgcGF0aCAqLworICBtZW1zZXQgKGl2LCAweGZmLCBibG9ja3NpemUpOworICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpKyspCisgICAgcGxhaW50ZXh0W2ldID0gaTsKKworICAvKiBDVFIgbWFudWFsbHkuICAqLworICBlbmNyeXB0X29uZSAoY3R4LCBjaXBoZXJ0ZXh0LCBpdik7CisgIGZvciAoaSA9IDA7IGkgPCBibG9ja3NpemU7IGkrKykKKyAgICBjaXBoZXJ0ZXh0W2ldIF49IHBsYWludGV4dFtpXTsKKyAgZm9yIChpID0gYmxvY2tzaXplOyBpID4gMDsgaS0tKQorICAgIHsKKyAgICAgIGl2W2ktMV0rKzsKKyAgICAgIGlmIChpdltpLTFdKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgbWVtc2V0IChpdjIsIDB4ZmYsIGJsb2Nrc2l6ZSk7CisgIGJ1bGtfY3RyX2VuYyAoY3R4LCBpdjIsIHBsYWludGV4dDIsIGNpcGhlcnRleHQsIDEpOworCisgIGlmIChtZW1jbXAgKHBsYWludGV4dDIsIHBsYWludGV4dCwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZSAobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DVFItJWQgdGVzdCBmYWlsZWQgKHBsYWludGV4dCBtaXNtYXRjaCkiLCBjaXBoZXIsCisJICAgICAgYmxvY2tzaXplICogOCk7CisjZW5kaWYKKyAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENUUiBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICB9CisKKyAgaWYgKG1lbWNtcCAoaXYyLCBpdiwgYmxvY2tzaXplKSkKKyAgICB7CisgICAgICB4ZnJlZSAobWVtKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICIlcy1DVFItJWQgdGVzdCBmYWlsZWQgKElWIG1pc21hdGNoKSIsIGNpcGhlciwKKwkgICAgICBibG9ja3NpemUgKiA4KTsKKyNlbmRpZgorICAgICAgcmV0dXJuICJzZWxmdGVzdCBmb3IgQ1RSIGZhaWxlZCAtIHNlZSBzeXNsb2cgZm9yIGRldGFpbHMiOworICAgIH0KKworICAvKiBUZXN0IGJ1bGsgZW5jcnlwdGlvbiB3aXRoIHR5cGljYWwgSVYuICovCisgIG1lbXNldChpdiwgMHg1NywgYmxvY2tzaXplLTQpOworICBpdltibG9ja3NpemUtMV0gPSAxOworICBpdltibG9ja3NpemUtMl0gPSAwOworICBpdltibG9ja3NpemUtM10gPSAwOworICBpdltibG9ja3NpemUtNF0gPSAwOworICBtZW1zZXQoaXYyLCAweDU3LCBibG9ja3NpemUtNCk7CisgIGl2MltibG9ja3NpemUtMV0gPSAxOworICBpdjJbYmxvY2tzaXplLTJdID0gMDsKKyAgaXYyW2Jsb2Nrc2l6ZS0zXSA9IDA7CisgIGl2MltibG9ja3NpemUtNF0gPSAwOworCisgIGZvciAoaSA9IDA7IGkgPCBibG9ja3NpemUgKiBuYmxvY2tzOyBpKyspCisgICAgcGxhaW50ZXh0MltpXSA9IHBsYWludGV4dFtpXSA9IGk7CisKKyAgLyogQ3JlYXRlIENUUiBjaXBoZXJ0ZXh0IG1hbnVhbGx5LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGJsb2Nrc2l6ZSAqIG5ibG9ja3M7IGkrPWJsb2Nrc2l6ZSkKKyAgICB7CisgICAgICBlbmNyeXB0X29uZSAoY3R4LCAmY2lwaGVydGV4dFtpXSwgaXYpOworICAgICAgZm9yIChqID0gMDsgaiA8IGJsb2Nrc2l6ZTsgaisrKQorICAgICAgICBjaXBoZXJ0ZXh0W2kral0gXj0gcGxhaW50ZXh0W2kral07CisgICAgICBmb3IgKGogPSBibG9ja3NpemU7IGogPiAwOyBqLS0pCisgICAgICAgIHsKKyAgICAgICAgICBpdltqLTFdKys7CisgICAgICAgICAgaWYgKGl2W2otMV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICBidWxrX2N0cl9lbmMgKGN0eCwgaXYyLCBjaXBoZXJ0ZXh0MiwgcGxhaW50ZXh0MiwgbmJsb2Nrcyk7CisKKyAgaWYgKG1lbWNtcCAoY2lwaGVydGV4dDIsIGNpcGhlcnRleHQsIGJsb2Nrc2l6ZSAqIG5ibG9ja3MpKQorICAgIHsKKyAgICAgIHhmcmVlIChtZW0pOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19XQVJOSU5HLCAiTGliZ2NyeXB0IHdhcm5pbmc6ICIKKyAgICAgICAgICAgICAgIiVzLUNUUi0lZCB0ZXN0IGZhaWxlZCAoY2lwaGVydGV4dCBtaXNtYXRjaCwgYnVsaykiLCBjaXBoZXIsCisgICAgICAgICAgICAgIGJsb2Nrc2l6ZSAqIDgpOworI2VuZGlmCisgICAgICByZXR1cm4gInNlbGZ0ZXN0IGZvciBDVFIgZmFpbGVkIC0gc2VlIHN5c2xvZyBmb3IgZGV0YWlscyI7CisgICAgfQorICBpZiAobWVtY21wKGl2MiwgaXYsIGJsb2Nrc2l6ZSkpCisgICAgeworICAgICAgeGZyZWUgKG1lbSk7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX1dBUk5JTkcsICJMaWJnY3J5cHQgd2FybmluZzogIgorICAgICAgICAgICAgICAiJXMtQ1RSLSVkIHRlc3QgZmFpbGVkIChJViBtaXNtYXRjaCwgYnVsaykiLCBjaXBoZXIsCisgICAgICAgICAgICAgIGJsb2Nrc2l6ZSAqIDgpOworI2VuZGlmCisgICAgICByZXR1cm4gInNlbGZ0ZXN0IGZvciBDVFIgZmFpbGVkIC0gc2VlIHN5c2xvZyBmb3IgZGV0YWlscyI7CisgICAgfQorCisgIC8qIFRlc3QgcGFyYWxsZWxpemVkIGNvZGUgcGF0aHMgKGNoZWNrIGNvdW50ZXIgb3ZlcmZsb3cgaGFuZGxpbmcpICovCisgIGZvciAoZGlmZiA9IDA7IGRpZmYgPCBuYmxvY2tzOyBkaWZmKyspIHsKKyAgICBtZW1zZXQoaXYsIDB4ZmYsIGJsb2Nrc2l6ZSk7CisgICAgaXZbYmxvY2tzaXplLTFdIC09IGRpZmY7CisgICAgaXZbMF0gPSBpdlsxXSA9IDA7CisgICAgaXZbMl0gPSAweDA3OworCisgICAgZm9yIChpID0gMDsgaSA8IGJsb2Nrc2l6ZSAqIG5ibG9ja3M7IGkrKykKKyAgICAgIHBsYWludGV4dFtpXSA9IGk7CisKKyAgICAvKiBDcmVhdGUgQ1RSIGNpcGhlcnRleHQgbWFudWFsbHkuICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja3NpemUgKiBuYmxvY2tzOyBpKz1ibG9ja3NpemUpCisgICAgICB7CisgICAgICAgIGVuY3J5cHRfb25lIChjdHgsICZjaXBoZXJ0ZXh0W2ldLCBpdik7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBibG9ja3NpemU7IGorKykKKyAgICAgICAgICBjaXBoZXJ0ZXh0W2kral0gXj0gcGxhaW50ZXh0W2kral07CisgICAgICAgIGZvciAoaiA9IGJsb2Nrc2l6ZTsgaiA+IDA7IGotLSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpdltqLTFdKys7CisgICAgICAgICAgICBpZiAoaXZbai0xXSkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgLyogRGVjcnlwdCB1c2luZyBidWxrIENUUiBhbmQgY29tcGFyZSByZXN1bHQuICAqLworICAgIG1lbXNldChpdjIsIDB4ZmYsIGJsb2Nrc2l6ZSk7CisgICAgaXYyW2Jsb2Nrc2l6ZS0xXSAtPSBkaWZmOworICAgIGl2MlswXSA9IGl2MlsxXSA9IDA7CisgICAgaXYyWzJdID0gMHgwNzsKKworICAgIGJ1bGtfY3RyX2VuYyAoY3R4LCBpdjIsIHBsYWludGV4dDIsIGNpcGhlcnRleHQsIG5ibG9ja3MpOworCisgICAgaWYgKG1lbWNtcCAocGxhaW50ZXh0MiwgcGxhaW50ZXh0LCBibG9ja3NpemUgKiBuYmxvY2tzKSkKKyAgICAgIHsKKyAgICAgICAgeGZyZWUgKG1lbSk7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICAgIiVzLUNUUi0lZCB0ZXN0IGZhaWxlZCAocGxhaW50ZXh0IG1pc21hdGNoLCBkaWZmOiAlZCkiLCBjaXBoZXIsCisJCWJsb2Nrc2l6ZSAqIDgsIGRpZmYpOworI2VuZGlmCisgICAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENUUiBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICAgIH0KKyAgICBpZiAobWVtY21wKGl2MiwgaXYsIGJsb2Nrc2l6ZSkpCisgICAgICB7CisgICAgICAgIHhmcmVlIChtZW0pOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX1dBUk5JTkcsICJMaWJnY3J5cHQgd2FybmluZzogIgorICAgICAgICAgICAgICAgICIlcy1DVFItJWQgdGVzdCBmYWlsZWQgKElWIG1pc21hdGNoLCBkaWZmOiAlZCkiLCBjaXBoZXIsCisJCWJsb2Nrc2l6ZSAqIDgsIGRpZmYpOworI2VuZGlmCisgICAgICAgIHJldHVybiAic2VsZnRlc3QgZm9yIENUUiBmYWlsZWQgLSBzZWUgc3lzbG9nIGZvciBkZXRhaWxzIjsKKyAgICAgIH0KKyAgfQorCisgIHhmcmVlIChtZW0pOworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9jaXBoZXItc2VsZnRlc3QuaCBiL2NpcGhlci9jaXBoZXItc2VsZnRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBmZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2NpcGhlci1zZWxmdGVzdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIGNpcGhlci1zZWxmdGVzdC5oIC0gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYnVsayBlbmNyeXB0aW9uIHNlbGZ0ZXN0cy4KKyAqCUNvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHMTBfU0VMRlRFU1RfSEVMUF9ICisjZGVmaW5lIEcxMF9TRUxGVEVTVF9IRUxQX0gKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKK3R5cGVkZWYgdm9pZCAoKmdjcnlfY2lwaGVyX2J1bGtfY2JjX2RlY190KSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKwkJCQkJICAgdm9pZCAqb3V0YnVmX2FyZywKKwkJCQkJICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorCQkJCQkgICBzaXplX3QgbmJsb2Nrcyk7CisKK3R5cGVkZWYgdm9pZCAoKmdjcnlfY2lwaGVyX2J1bGtfY2ZiX2RlY190KSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKwkJCQkJICAgdm9pZCAqb3V0YnVmX2FyZywKKwkJCQkJICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorCQkJCQkgICBzaXplX3QgbmJsb2Nrcyk7CisKK3R5cGVkZWYgdm9pZCAoKmdjcnlfY2lwaGVyX2J1bGtfY3RyX2VuY190KSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKwkJCQkJICAgdm9pZCAqb3V0YnVmX2FyZywKKwkJCQkJICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorCQkJCQkgICBzaXplX3QgbmJsb2Nrcyk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYnVsayBDQkMgZGVjcnlwdGlvbiBzZWxmdGVzdCAqLworY29uc3QgY2hhciAqCitfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2JjIChjb25zdCBjaGFyICpjaXBoZXIsIGdjcnlfY2lwaGVyX3NldGtleV90IHNldGtleSwKKwkJCSAgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNyeXB0X29uZSwKKwkJCSAgIGdjcnlfY2lwaGVyX2J1bGtfY2JjX2RlY190IGJ1bGtfY2JjX2RlYywKKwkJCSAgIGNvbnN0IGludCBuYmxvY2tzLCBjb25zdCBpbnQgYmxvY2tzaXplLAorCQkJICAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYnVsayBDRkIgZGVjcnlwdGlvbiBzZWxmdGVzdCAqLworY29uc3QgY2hhciAqCitfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2ZiIChjb25zdCBjaGFyICpjaXBoZXIsIGdjcnlfY2lwaGVyX3NldGtleV90IHNldGtleSwKKwkJCSAgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNyeXB0X29uZSwKKwkJCSAgIGdjcnlfY2lwaGVyX2J1bGtfY2ZiX2RlY190IGJ1bGtfY2ZiX2RlYywKKwkJCSAgIGNvbnN0IGludCBuYmxvY2tzLCBjb25zdCBpbnQgYmxvY2tzaXplLAorCQkJICAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYnVsayBDVFIgZW5jcnlwdGlvbiBzZWxmdGVzdCAqLworY29uc3QgY2hhciAqCitfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY3RyIChjb25zdCBjaGFyICpjaXBoZXIsIGdjcnlfY2lwaGVyX3NldGtleV90IHNldGtleSwKKwkJCSAgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBlbmNyeXB0X29uZSwKKwkJCSAgIGdjcnlfY2lwaGVyX2J1bGtfY3RyX2VuY190IGJ1bGtfY3RyX2VuYywKKwkJCSAgIGNvbnN0IGludCBuYmxvY2tzLCBjb25zdCBpbnQgYmxvY2tzaXplLAorCQkJICAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSk7CisKKyNlbmRpZiAvKkcxMF9TRUxGVEVTVF9IRUxQX0gqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NpcGhlci5jIGIvY2lwaGVyL2NpcGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNWEwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY2lwaGVyLmMKQEAgLTAsMCArMSwxMzkzIEBACisvKiBjaXBoZXIuYyAgLQljaXBoZXIgZGlzcGF0Y2hlcgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisgKiAgICAgICAgICAgICAgIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYXRoLmgiCisjaW5jbHVkZSAiLi9jaXBoZXItaW50ZXJuYWwuaCIKKworCisvKiBUaGlzIGlzIHRoZSBsaXN0IG9mIHRoZSBkZWZhdWx0IGNpcGhlcnMsIHdoaWNoIGFyZSBpbmNsdWRlZCBpbgorICAgbGliZ2NyeXB0LiAgKi8KK3N0YXRpYyBnY3J5X2NpcGhlcl9zcGVjX3QgKmNpcGhlcl9saXN0W10gPQorICB7CisjaWYgVVNFX0JMT1dGSVNICisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19ibG93ZmlzaCwKKyNlbmRpZgorI2lmIFVTRV9ERVMKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX2RlcywKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX3RyaXBsZWRlcywKKyNlbmRpZgorI2lmIFVTRV9BUkNGT1VSCisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19hcmNmb3VyLAorI2VuZGlmCisjaWYgVVNFX0NBU1Q1CisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19jYXN0NSwKKyNlbmRpZgorI2lmIFVTRV9BRVMKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX2FlcywKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX2FlczE5MiwKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX2FlczI1NiwKKyNlbmRpZgorI2lmIFVTRV9UV09GSVNICisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY190d29maXNoLAorICAgICAmX2djcnlfY2lwaGVyX3NwZWNfdHdvZmlzaDEyOCwKKyNlbmRpZgorI2lmIFVTRV9TRVJQRU5UCisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MTI4LAorICAgICAmX2djcnlfY2lwaGVyX3NwZWNfc2VycGVudDE5MiwKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX3NlcnBlbnQyNTYsCisjZW5kaWYKKyNpZiBVU0VfUkZDMjI2OAorICAgICAmX2djcnlfY2lwaGVyX3NwZWNfcmZjMjI2OF80MCwKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX3JmYzIyNjhfMTI4LAorI2VuZGlmCisjaWYgVVNFX1NFRUQKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX3NlZWQsCisjZW5kaWYKKyNpZiBVU0VfQ0FNRUxMSUEKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX2NhbWVsbGlhMTI4LAorICAgICAmX2djcnlfY2lwaGVyX3NwZWNfY2FtZWxsaWExOTIsCisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19jYW1lbGxpYTI1NiwKKyNlbmRpZgorI2lmZGVmIFVTRV9JREVBCisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19pZGVhLAorI2VuZGlmCisjaWYgVVNFX1NBTFNBMjAKKyAgICAgJl9nY3J5X2NpcGhlcl9zcGVjX3NhbHNhMjAsCisgICAgICZfZ2NyeV9jaXBoZXJfc3BlY19zYWxzYTIwcjEyLAorI2VuZGlmCisjaWYgVVNFX0dPU1QyODE0NworICAgICAmX2djcnlfY2lwaGVyX3NwZWNfZ29zdDI4MTQ3LAorI2VuZGlmCisgICAgTlVMTAorICB9OworCisKKworDAorc3RhdGljIGludAorbWFwX2FsZ28gKGludCBhbGdvKQoreworICByZXR1cm4gYWxnbzsKK30KKworCisvKiBSZXR1cm4gdGhlIHNwZWMgc3RydWN0dXJlIGZvciB0aGUgY2lwaGVyIGFsZ29yaXRobSBBTEdPLiAgRm9yCisgICBhbiB1bmtub3duIGFsZ29yaXRobSBOVUxMIGlzIHJldHVybmVkLiAgKi8KK3N0YXRpYyBnY3J5X2NpcGhlcl9zcGVjX3QgKgorc3BlY19mcm9tX2FsZ28gKGludCBhbGdvKQoreworICBpbnQgaWR4OworICBnY3J5X2NpcGhlcl9zcGVjX3QgKnNwZWM7CisKKyAgYWxnbyA9IG1hcF9hbGdvIChhbGdvKTsKKworICBmb3IgKGlkeCA9IDA7IChzcGVjID0gY2lwaGVyX2xpc3RbaWR4XSk7IGlkeCsrKQorICAgIGlmIChhbGdvID09IHNwZWMtPmFsZ28pCisgICAgICByZXR1cm4gc3BlYzsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogTG9va3VwIGEgY2lwaGVyJ3Mgc3BlYyBieSBpdHMgbmFtZS4gICovCitzdGF0aWMgZ2NyeV9jaXBoZXJfc3BlY190ICoKK3NwZWNfZnJvbV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X2NpcGhlcl9zcGVjX3QgKnNwZWM7CisgIGludCBpZHg7CisgIGNvbnN0IGNoYXIgKiphbGlhc2VzOworCisgIGZvciAoaWR4PTA7IChzcGVjID0gY2lwaGVyX2xpc3RbaWR4XSk7IGlkeCsrKQorICAgIHsKKyAgICAgIGlmICghc3RyaWNtcCAobmFtZSwgc3BlYy0+bmFtZSkpCisgICAgICAgIHJldHVybiBzcGVjOworICAgICAgaWYgKHNwZWMtPmFsaWFzZXMpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGFsaWFzZXMgPSBzcGVjLT5hbGlhc2VzOyAqYWxpYXNlczsgYWxpYXNlcysrKQorICAgICAgICAgICAgaWYgKCFzdHJpY21wIChuYW1lLCAqYWxpYXNlcykpCisgICAgICAgICAgICAgIHJldHVybiBzcGVjOworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisKKy8qIExvb2t1cCBhIGNpcGhlcidzIHNwZWMgYnkgaXRzIE9JRC4gICovCitzdGF0aWMgZ2NyeV9jaXBoZXJfc3BlY190ICoKK3NwZWNfZnJvbV9vaWQgKGNvbnN0IGNoYXIgKm9pZCkKK3sKKyAgZ2NyeV9jaXBoZXJfc3BlY190ICpzcGVjOworICBnY3J5X2NpcGhlcl9vaWRfc3BlY190ICpvaWRfc3BlY3M7CisgIGludCBpZHgsIGo7CisKKyAgZm9yIChpZHg9MDsgKHNwZWMgPSBjaXBoZXJfbGlzdFtpZHhdKTsgaWR4KyspCisgICAgeworICAgICAgb2lkX3NwZWNzID0gc3BlYy0+b2lkczsKKyAgICAgIGlmIChvaWRfc3BlY3MpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGogPSAwOyBvaWRfc3BlY3Nbal0ub2lkOyBqKyspCisgICAgICAgICAgICBpZiAoIXN0cmljbXAgKG9pZCwgb2lkX3NwZWNzW2pdLm9pZCkpCisgICAgICAgICAgICAgIHJldHVybiBzcGVjOworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisKKy8qIExvY2F0ZSB0aGUgT0lEIGluIHRoZSBvaWQgdGFibGUgYW5kIHJldHVybiB0aGUgc3BlYyBvciBOVUxMIGlmIG5vdAorICAgZm91bmQuICBBbiBvcHRpb25hbCAib2lkLiIgb3IgIk9JRC4iIHByZWZpeCBpbiBPSUQgaXMgaWdub3JlZCwgdGhlCisgICBPSUQgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gc3RhbmRhcmQgSUVURiBkb3R0ZWQgbm90YXRpb24uICBBIHBvaW50ZXIKKyAgIHRvIHRoZSBPSUQgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGlzIGFsZ29yaXRobQorICAgaXMgcmV0dXJuIGluIE9JRF9TUEVDIHVubGVzcyBwYXNzZWQgYXMgTlVMTC4qLworc3RhdGljIGdjcnlfY2lwaGVyX3NwZWNfdCAqCitzZWFyY2hfb2lkIChjb25zdCBjaGFyICpvaWQsIGdjcnlfY2lwaGVyX29pZF9zcGVjX3QgKm9pZF9zcGVjKQoreworICBnY3J5X2NpcGhlcl9zcGVjX3QgKnNwZWM7CisgIGludCBpOworCisgIGlmIChvaWQgJiYgKCghIHN0cm5jbXAgKG9pZCwgIm9pZC4iLCA0KSkKKwkgICAgICB8fCAoISBzdHJuY21wIChvaWQsICJPSUQuIiwgNCkpKSkKKyAgICBvaWQgKz0gNDsKKworICBzcGVjID0gc3BlY19mcm9tX29pZCAob2lkKTsKKyAgaWYgKHNwZWMgJiYgc3BlYy0+b2lkcykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBzcGVjLT5vaWRzW2ldLm9pZDsgaSsrKQorCWlmICghc3RyaWNtcCAob2lkLCBzcGVjLT5vaWRzW2ldLm9pZCkpCisJICB7CisJICAgIGlmIChvaWRfc3BlYykKKwkgICAgICAqb2lkX3NwZWMgPSBzcGVjLT5vaWRzW2ldOworICAgICAgICAgICAgcmV0dXJuIHNwZWM7CisJICB9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisKKy8qIE1hcCBTVFJJTkcgdG8gdGhlIGNpcGhlciBhbGdvcml0aG0gaWRlbnRpZmllci4gIFJldHVybnMgdGhlCisgICBhbGdvcml0aG0gSUQgb2YgdGhlIGNpcGhlciBmb3IgdGhlIGdpdmVuIG5hbWUgb3IgMCBpZiB0aGUgbmFtZSBpcworICAgbm90IGtub3duLiAgSXQgaXMgdmFsaWQgdG8gcGFzcyBOVUxMIGZvciBTVFJJTkcgd2hpY2ggcmVzdWx0cyBpbiBhCisgICByZXR1cm4gdmFsdWUgb2YgMC4gKi8KK2ludAorX2djcnlfY2lwaGVyX21hcF9uYW1lIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGdjcnlfY2lwaGVyX3NwZWNfdCAqc3BlYzsKKworICBpZiAoIXN0cmluZykKKyAgICByZXR1cm4gMDsKKworICAvKiBJZiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgZGlnaXQgKG9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0aAorICAgICBlaXRoZXIgIk9JRC4iIG9yICJvaWQuIiksIHdlIGZpcnN0IGxvb2sgaW50byBvdXIgdGFibGUgb2YgQVNOLjEKKyAgICAgb2JqZWN0IGlkZW50aWZpZXJzIHRvIGZpZ3VyZSBvdXQgdGhlIGFsZ29yaXRobSAqLworCisgIHNwZWMgPSBzZWFyY2hfb2lkIChzdHJpbmcsIE5VTEwpOworICBpZiAoc3BlYykKKyAgICByZXR1cm4gc3BlYy0+YWxnbzsKKworICBzcGVjID0gc3BlY19mcm9tX25hbWUgKHN0cmluZyk7CisgIGlmIChzcGVjKQorICAgIHJldHVybiBzcGVjLT5hbGdvOworCisgIHJldHVybiAwOworfQorCisKKy8qIEdpdmVuIGEgU1RSSU5HIHdpdGggYW4gT0lEIGluIGRvdHRlZCBkZWNpbWFsIG5vdGF0aW9uLCB0aGlzCisgICBmdW5jdGlvbiByZXR1cm5zIHRoZSBjaXBoZXIgbW9kZSAoR0NSWV9DSVBIRVJfTU9ERV8qKSBhc3NvY2lhdGVkCisgICB3aXRoIHRoYXQgT0lEIG9yIDAgaWYgbm8gbW9kZSBpcyBrbm93bi4gIFBhc3NpbmcgTlVMTCBmb3Igc3RyaW5nCisgICB5aWVsZHMgYSByZXR1cm4gdmFsdWUgb2YgMC4gKi8KK2ludAorX2djcnlfY2lwaGVyX21vZGVfZnJvbV9vaWQgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ2NyeV9jaXBoZXJfc3BlY190ICpzcGVjOworICBnY3J5X2NpcGhlcl9vaWRfc3BlY190IG9pZF9zcGVjOworCisgIGlmICghc3RyaW5nKQorICAgIHJldHVybiAwOworCisgIHNwZWMgPSBzZWFyY2hfb2lkIChzdHJpbmcsICZvaWRfc3BlYyk7CisgIGlmIChzcGVjKQorICAgIHJldHVybiBvaWRfc3BlYy5tb2RlOworCisgIHJldHVybiAwOworfQorCisKKy8qIE1hcCB0aGUgY2lwaGVyIGFsZ29yaXRobSBpZGVudGlmaWVyIEFMR09SSVRITSB0byBhIHN0cmluZworICAgcmVwcmVzZW50aW5nIHRoaXMgYWxnb3JpdGhtLiAgVGhpcyBzdHJpbmcgaXMgdGhlIGRlZmF1bHQgbmFtZSBhcworICAgdXNlZCBieSBMaWJnY3J5cHQuICBBICI/IiBpcyByZXR1cm5lZCBmb3IgYW4gdW5rbm93biBhbGdvcml0aG0uCisgICBOVUxMIGlzIG5ldmVyIHJldHVybmVkLiAqLworY29uc3QgY2hhciAqCitfZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKQoreworICBnY3J5X2NpcGhlcl9zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvcml0aG0pOworICByZXR1cm4gc3BlYz8gc3BlYy0+bmFtZSA6ICI/IjsKK30KKworCisvKiBGbGFnIHRoZSBjaXBoZXIgYWxnb3JpdGhtIHdpdGggdGhlIGlkZW50aWZpZXIgQUxHT1JJVEhNIGFzCisgICBkaXNhYmxlZC4gIFRoZXJlIGlzIG5vIGVycm9yIHJldHVybiwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBmb3IKKyAgIHVua25vd24gYWxnb3JpdGhtcy4gIERpc2FibGVkIGFsZ29yaXRobXMgYXJlIHZpcnR1YWxseSBub3QKKyAgIGF2YWlsYWJsZSBpbiBMaWJnY3J5cHQuICBUaGlzIGlzIG5vdCB0aHJlYWQgc2FmZSBhbmQgc2hvdWxkIHRodXMgYmUKKyAgIGNhbGxlZCBlYXJseS4gKi8KK3N0YXRpYyB2b2lkCitkaXNhYmxlX2NpcGhlcl9hbGdvIChpbnQgYWxnbykKK3sKKyAgZ2NyeV9jaXBoZXJfc3BlY190ICpzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ28pOworCisgIGlmIChzcGVjKQorICAgIHNwZWMtPmZsYWdzLmRpc2FibGVkID0gMTsKK30KKworCisvKiBSZXR1cm4gMCBpZiB0aGUgY2lwaGVyIGFsZ29yaXRobSB3aXRoIGlkZW50aWZpZXIgQUxHT1JJVEhNIGlzCisgICBhdmFpbGFibGUuIFJldHVybnMgYSBiYXNpYyBlcnJvciBjb2RlIHZhbHVlIGlmIGl0IGlzIG5vdAorICAgYXZhaWxhYmxlLiAgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NoZWNrX2NpcGhlcl9hbGdvIChpbnQgYWxnb3JpdGhtKQoreworICBnY3J5X2NpcGhlcl9zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvcml0aG0pOworICBpZiAoc3BlYyAmJiAhc3BlYy0+ZmxhZ3MuZGlzYWJsZWQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIEdQR19FUlJfQ0lQSEVSX0FMR087Cit9CisKKworLyogUmV0dXJuIHRoZSBzdGFuZGFyZCBsZW5ndGggaW4gYml0cyBvZiB0aGUga2V5IGZvciB0aGUgY2lwaGVyCisgICBhbGdvcml0aG0gd2l0aCB0aGUgaWRlbnRpZmllciBBTEdPUklUSE0uICAqLworc3RhdGljIHVuc2lnbmVkIGludAorY2lwaGVyX2dldF9rZXlsZW4gKGludCBhbGdvcml0aG0pCit7CisgIGdjcnlfY2lwaGVyX3NwZWNfdCAqc3BlYzsKKyAgdW5zaWduZWQgbGVuID0gMDsKKworICBzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ29yaXRobSk7CisgIGlmIChzcGVjKQorICAgIHsKKyAgICAgIGxlbiA9IHNwZWMtPmtleWxlbjsKKyAgICAgIGlmICghbGVuKQorCWxvZ19idWcgKCJjaXBoZXIgJWQgdy9vIGtleSBsZW5ndGhcbiIsIGFsZ29yaXRobSk7CisgICAgfQorCisgIHJldHVybiBsZW47Cit9CisKKworLyogUmV0dXJuIHRoZSBibG9jayBsZW5ndGggb2YgdGhlIGNpcGhlciBhbGdvcml0aG0gd2l0aCB0aGUgaWRlbnRpZmllcgorICAgQUxHT1JJVEhNLiAgVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBmb3IgYW4gaW52YWxpZCBhbGdvcml0aG0uICAqLworc3RhdGljIHVuc2lnbmVkIGludAorY2lwaGVyX2dldF9ibG9ja3NpemUgKGludCBhbGdvcml0aG0pCit7CisgIGdjcnlfY2lwaGVyX3NwZWNfdCAqc3BlYzsKKyAgdW5zaWduZWQgbGVuID0gMDsKKworICBzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ29yaXRobSk7CisgIGlmIChzcGVjKQorICAgIHsKKyAgICAgIGxlbiA9IHNwZWMtPmJsb2Nrc2l6ZTsKKyAgICAgIGlmICghbGVuKQorICAgICAgICBsb2dfYnVnICgiY2lwaGVyICVkIHcvbyBibG9ja3NpemVcbiIsIGFsZ29yaXRobSk7CisgICAgfQorCisgIHJldHVybiBsZW47Cit9CisKKworLyoKKyAgIE9wZW4gYSBjaXBoZXIgaGFuZGxlIGZvciB1c2Ugd2l0aCBjaXBoZXIgYWxnb3JpdGhtIEFMR09SSVRITSwgdXNpbmcKKyAgIHRoZSBjaXBoZXIgbW9kZSBNT0RFIChvbmUgb2YgdGhlIEdDUllfQ0lQSEVSX01PREVfKikgYW5kIHJldHVybiBhCisgICBoYW5kbGUgaW4gSEFORExFLiAgUHV0IE5VTEwgaW50byBIQU5ETEUgYW5kIHJldHVybiBhbiBlcnJvciBjb2RlIGlmCisgICBzb21ldGhpbmcgZ29lcyB3cm9uZy4gIEZMQUdTIG1heSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKKyAgIG9wZXJhdGlvbi4gIFRoZSBkZWZpbmVkIGZsYWdzIGFyZToKKworICAgR0NSWV9DSVBIRVJfU0VDVVJFOiAgYWxsb2NhdGUgYWxsIGludGVybmFsIGJ1ZmZlcnMgaW4gc2VjdXJlIG1lbW9yeS4KKyAgIEdDUllfQ0lQSEVSX0VOQUJMRV9TWU5DOiAgRW5hYmxlIHRoZSBzeW5jIG9wZXJhdGlvbiBhcyB1c2VkIGluIE9wZW5QR1AuCisgICBHQ1JZX0NJUEhFUl9DQkNfQ1RTOiAgRW5hYmxlIENUUyBtb2RlLgorICAgR0NSWV9DSVBIRVJfQ0JDX01BQzogIEVuYWJsZSBNQUMgbW9kZS4KKworICAgVmFsdWVzIGZvciB0aGVzZSBmbGFncyBtYXkgYmUgY29tYmluZWQgdXNpbmcgT1IuCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX29wZW4gKGdjcnlfY2lwaGVyX2hkX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICBpbnQgYWxnbywgaW50IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBnY3J5X2NpcGhlcl9oZF90IGggPSBOVUxMOworCisgIGlmIChtb2RlID49IEdDUllfQ0lQSEVSX01PREVfSU5URVJOQUwpCisgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgZWxzZQorICAgIHJjID0gX2djcnlfY2lwaGVyX29wZW5faW50ZXJuYWwgKCZoLCBhbGdvLCBtb2RlLCBmbGFncyk7CisKKyAgKmhhbmRsZSA9IHJjID8gTlVMTCA6IGg7CisKKyAgcmV0dXJuIHJjOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX29wZW5faW50ZXJuYWwgKGdjcnlfY2lwaGVyX2hkX3QgKmhhbmRsZSwKKwkJCSAgICBpbnQgYWxnbywgaW50IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgaW50IHNlY3VyZSA9IChmbGFncyAmIEdDUllfQ0lQSEVSX1NFQ1VSRSk7CisgIGdjcnlfY2lwaGVyX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoID0gTlVMTDsKKyAgZ2NyeV9lcnJfY29kZV90IGVycjsKKworICAvKiBJZiB0aGUgYXBwbGljYXRpb24gbWlzc2VkIHRvIGNhbGwgdGhlIHJhbmRvbSBwb2xsIGZ1bmN0aW9uLCB3ZSBkbworICAgICBpdCBoZXJlIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHVzZWQgb25jZSBpbiBhIHdoaWxlLiAqLworICBfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsICgpOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisgIGlmICghc3BlYykKKyAgICBlcnIgPSBHUEdfRVJSX0NJUEhFUl9BTEdPOworICBlbHNlIGlmIChzcGVjLT5mbGFncy5kaXNhYmxlZCkKKyAgICBlcnIgPSBHUEdfRVJSX0NJUEhFUl9BTEdPOworICBlbHNlCisgICAgZXJyID0gMDsKKworICAvKiBjaGVjayBmbGFncyAqLworICBpZiAoKCEgZXJyKQorICAgICAgJiYgKChmbGFncyAmIH4oMAorCQkgICAgIHwgR0NSWV9DSVBIRVJfU0VDVVJFCisJCSAgICAgfCBHQ1JZX0NJUEhFUl9FTkFCTEVfU1lOQworCQkgICAgIHwgR0NSWV9DSVBIRVJfQ0JDX0NUUworCQkgICAgIHwgR0NSWV9DSVBIRVJfQ0JDX01BQykpCisJICB8fCAoZmxhZ3MgJiBHQ1JZX0NJUEhFUl9DQkNfQ1RTICYgR0NSWV9DSVBIRVJfQ0JDX01BQykpKQorICAgIGVyciA9IEdQR19FUlJfQ0lQSEVSX0FMR087CisKKyAgLyogY2hlY2sgdGhhdCBhIHZhbGlkIG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVkICovCisgIGlmICghIGVycikKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgICB7CisgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ0NNOgorI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKwlpZiAoc3BlYy0+YmxvY2tzaXplICE9IEdDUllfQ0NNX0JMT0NLX0xFTikKKwkgIGVyciA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworCWlmICghc3BlYy0+ZW5jcnlwdCB8fCAhc3BlYy0+ZGVjcnlwdCkKKwkgIGVyciA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworCWJyZWFrOworI2Vsc2UKKyAgICAgICAgZXJyID0gR1BHX0VSUl9OT1RfU1VQUE9SVEVEOworI2VuZGlmCisKKyAgICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9FQ0I6CisgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ0JDOgorICAgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NGQjoKKyAgICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9PRkI6CisgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ1RSOgorICAgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVA6CisgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ01BQzoKKyAgICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9HQ006CisJaWYgKCFzcGVjLT5lbmNyeXB0IHx8ICFzcGVjLT5kZWNyeXB0KQorCSAgZXJyID0gR1BHX0VSUl9JTlZfQ0lQSEVSX01PREU7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9TVFJFQU06CisJaWYgKCFzcGVjLT5zdGVuY3J5cHQgfHwgIXNwZWMtPnN0ZGVjcnlwdCkKKwkgIGVyciA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworCWJyZWFrOworCisgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfTk9ORToKKyAgICAgICAgLyogVGhpcyBtb2RlIG1heSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuICBJdCBjb3BpZXMgdGhlIG1haW4KKyAgICAgICAgICAgdGV4dCB2ZXJiYXRpbSB0byB0aGUgY2lwaGVydGV4dC4gIFdlIGRvIG5vdCBhbGxvdyB0aGlzIGluCisgICAgICAgICAgIGZpcHMgbW9kZSBvciBpZiBubyBkZWJ1ZyBmbGFnIGhhcyBiZWVuIHNldC4gICovCisJaWYgKGZpcHNfbW9kZSAoKSB8fCAhX2djcnlfZ2V0X2RlYnVnX2ZsYWcgKDApKQorICAgICAgICAgIGVyciA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCWVyciA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworICAgICAgfQorCisgIC8qIFBlcmZvcm0gc2VsZnRlc3QgaGVyZSBhbmQgbWFyayB0aGlzIHdpdGggYSBmbGFnIGluIGNpcGhlcl90YWJsZT8KKyAgICAgTm8sIHdlIHNob3VsZCBub3QgZG8gdGhpcyBhcyBpdCB0YWtlcyB0b28gbG9uZy4gIEZ1cnRoZXIgaXQgZG9lcworICAgICBub3QgbWFrZSBzZW5zZSB0byBleGNsdWRlIGFsZ29yaXRobXMgd2l0aCBmYWlsaW5nIHNlbGZ0ZXN0cyBhdAorICAgICBydW50aW1lOiBJZiBhIHNlbGZ0ZXN0IGZhaWxzIHRoZXJlIGlzIHNvbWV0aGluZyBzZXJpb3VzbHkgd3Jvbmcgd2l0aCB0aGUgc3lzdGVtIGFuZCB0aHVzIHdlIGJldHRlciBkaWUgaW1tZWRpYXRlbHkuICovCisKKyAgaWYgKCEgZXJyKQorICAgIHsKKyAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZiAoKmgpCisgICAgICAgICAgICAgICAgICAgICArIDIgKiBzcGVjLT5jb250ZXh0c2l6ZQorICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YgKGNpcGhlcl9jb250ZXh0X2FsaWdubWVudF90KQorI2lmZGVmIE5FRURfMTZCWVRFX0FMSUdORURfQ09OVEVYVAorICAgICAgICAgICAgICAgICAgICAgKyAxNSAgLyogU3BhY2UgZm9yIGxlYWRpbmcgYWxpZ25tZW50IGdhcC4gICovCisjZW5kaWYgLypORUVEXzE2QllURV9BTElHTkVEX0NPTlRFWFQqLworICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgaWYgKHNlY3VyZSkKKwloID0geHRyeWNhbGxvY19zZWN1cmUgKDEsIHNpemUpOworICAgICAgZWxzZQorCWggPSB4dHJ5Y2FsbG9jICgxLCBzaXplKTsKKworICAgICAgaWYgKCEgaCkKKwllcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGVsc2UKKwl7CisgICAgICAgICAgc2l6ZV90IG9mZiA9IDA7CisKKyNpZmRlZiBORUVEXzE2QllURV9BTElHTkVEX0NPTlRFWFQKKyAgICAgICAgICBpZiAoICgodW5zaWduZWQgbG9uZyloICYgMHgwZikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUaGUgbWFsbG9jZWQgYmxvY2sgaXMgbm90IGFsaWduZWQgb24gYSAxNiBieXRlCisgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiAgQ29ycmVjdCBmb3IgdGhpcy4gICovCisgICAgICAgICAgICAgIG9mZiA9IDE2IC0gKCh1bnNpZ25lZCBsb25nKWggJiAweDBmKTsKKyAgICAgICAgICAgICAgaCA9ICh2b2lkKikoKGNoYXIqKWggKyBvZmYpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qTkVFRF8xNkJZVEVfQUxJR05FRF9DT05URVhUKi8KKworCSAgaC0+bWFnaWMgPSBzZWN1cmUgPyBDVFhfTUFHSUNfU0VDVVJFIDogQ1RYX01BR0lDX05PUk1BTDsKKyAgICAgICAgICBoLT5hY3R1YWxfaGFuZGxlX3NpemUgPSBzaXplIC0gb2ZmOworICAgICAgICAgIGgtPmhhbmRsZV9vZmZzZXQgPSBvZmY7CisJICBoLT5zcGVjID0gc3BlYzsKKyAgICAgICAgICBoLT5hbGdvID0gYWxnbzsKKwkgIGgtPm1vZGUgPSBtb2RlOworCSAgaC0+ZmxhZ3MgPSBmbGFnczsKKworICAgICAgICAgIC8qIFNldHVwIGJ1bGsgZW5jcnlwdGlvbiByb3V0aW5lcy4gICovCisgICAgICAgICAgc3dpdGNoIChhbGdvKQorICAgICAgICAgICAgeworI2lmZGVmIFVTRV9BRVMKKyAgICAgICAgICAgIGNhc2UgR0NSWV9DSVBIRVJfQUVTMTI4OgorICAgICAgICAgICAgY2FzZSBHQ1JZX0NJUEhFUl9BRVMxOTI6CisgICAgICAgICAgICBjYXNlIEdDUllfQ0lQSEVSX0FFUzI1NjoKKyAgICAgICAgICAgICAgaC0+YnVsay5jZmJfZW5jID0gX2djcnlfYWVzX2NmYl9lbmM7CisgICAgICAgICAgICAgIGgtPmJ1bGsuY2ZiX2RlYyA9IF9nY3J5X2Flc19jZmJfZGVjOworICAgICAgICAgICAgICBoLT5idWxrLmNiY19lbmMgPSBfZ2NyeV9hZXNfY2JjX2VuYzsKKyAgICAgICAgICAgICAgaC0+YnVsay5jYmNfZGVjID0gX2djcnlfYWVzX2NiY19kZWM7CisgICAgICAgICAgICAgIGgtPmJ1bGsuY3RyX2VuYyA9IF9nY3J5X2Flc19jdHJfZW5jOworICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKlVTRV9BRVMqLworI2lmZGVmIFVTRV9CTE9XRklTSAorCSAgICBjYXNlIEdDUllfQ0lQSEVSX0JMT1dGSVNIOgorICAgICAgICAgICAgICBoLT5idWxrLmNmYl9kZWMgPSBfZ2NyeV9ibG93ZmlzaF9jZmJfZGVjOworICAgICAgICAgICAgICBoLT5idWxrLmNiY19kZWMgPSBfZ2NyeV9ibG93ZmlzaF9jYmNfZGVjOworICAgICAgICAgICAgICBoLT5idWxrLmN0cl9lbmMgPSBfZ2NyeV9ibG93ZmlzaF9jdHJfZW5jOworICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKlVTRV9CTE9XRklTSCovCisjaWZkZWYgVVNFX0NBU1Q1CisJICAgIGNhc2UgR0NSWV9DSVBIRVJfQ0FTVDU6CisgICAgICAgICAgICAgIGgtPmJ1bGsuY2ZiX2RlYyA9IF9nY3J5X2Nhc3Q1X2NmYl9kZWM7CisgICAgICAgICAgICAgIGgtPmJ1bGsuY2JjX2RlYyA9IF9nY3J5X2Nhc3Q1X2NiY19kZWM7CisgICAgICAgICAgICAgIGgtPmJ1bGsuY3RyX2VuYyA9IF9nY3J5X2Nhc3Q1X2N0cl9lbmM7CisgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qVVNFX0NBTUVMTElBKi8KKyNpZmRlZiBVU0VfQ0FNRUxMSUEKKwkgICAgY2FzZSBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyODoKKwkgICAgY2FzZSBHQ1JZX0NJUEhFUl9DQU1FTExJQTE5MjoKKwkgICAgY2FzZSBHQ1JZX0NJUEhFUl9DQU1FTExJQTI1NjoKKyAgICAgICAgICAgICAgaC0+YnVsay5jYmNfZGVjID0gX2djcnlfY2FtZWxsaWFfY2JjX2RlYzsKKyAgICAgICAgICAgICAgaC0+YnVsay5jZmJfZGVjID0gX2djcnlfY2FtZWxsaWFfY2ZiX2RlYzsKKyAgICAgICAgICAgICAgaC0+YnVsay5jdHJfZW5jID0gX2djcnlfY2FtZWxsaWFfY3RyX2VuYzsKKyAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLypVU0VfQ0FNRUxMSUEqLworI2lmZGVmIFVTRV9TRVJQRU5UCisJICAgIGNhc2UgR0NSWV9DSVBIRVJfU0VSUEVOVDEyODoKKwkgICAgY2FzZSBHQ1JZX0NJUEhFUl9TRVJQRU5UMTkyOgorCSAgICBjYXNlIEdDUllfQ0lQSEVSX1NFUlBFTlQyNTY6CisgICAgICAgICAgICAgIGgtPmJ1bGsuY2JjX2RlYyA9IF9nY3J5X3NlcnBlbnRfY2JjX2RlYzsKKyAgICAgICAgICAgICAgaC0+YnVsay5jZmJfZGVjID0gX2djcnlfc2VycGVudF9jZmJfZGVjOworICAgICAgICAgICAgICBoLT5idWxrLmN0cl9lbmMgPSBfZ2NyeV9zZXJwZW50X2N0cl9lbmM7CisgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qVVNFX1NFUlBFTlQqLworI2lmZGVmIFVTRV9UV09GSVNICisJICAgIGNhc2UgR0NSWV9DSVBIRVJfVFdPRklTSDoKKwkgICAgY2FzZSBHQ1JZX0NJUEhFUl9UV09GSVNIMTI4OgorICAgICAgICAgICAgICBoLT5idWxrLmNiY19kZWMgPSBfZ2NyeV90d29maXNoX2NiY19kZWM7CisgICAgICAgICAgICAgIGgtPmJ1bGsuY2ZiX2RlYyA9IF9nY3J5X3R3b2Zpc2hfY2ZiX2RlYzsKKyAgICAgICAgICAgICAgaC0+YnVsay5jdHJfZW5jID0gX2djcnlfdHdvZmlzaF9jdHJfZW5jOworICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKlVTRV9UV09GSVNIKi8KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorICAgIH0KKworICAvKiBEb25lLiAgKi8KKworICAqaGFuZGxlID0gZXJyID8gTlVMTCA6IGg7CisKKyAgcmV0dXJuIGdjcnlfZXJyb3IgKGVycik7Cit9CisKKworLyogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2lwaGVyIGhhbmRsZSBILiBIIG1heSBiZQorICAgTlVMTCBpbiB3aGljaCBjYXNlIHRoaXMgaXMgYSBuby1vcGVyYXRpb24uICovCit2b2lkCitfZ2NyeV9jaXBoZXJfY2xvc2UgKGdjcnlfY2lwaGVyX2hkX3QgaCkKK3sKKyAgc2l6ZV90IG9mZjsKKworICBpZiAoIWgpCisgICAgcmV0dXJuOworCisgIGlmICgoaC0+bWFnaWMgIT0gQ1RYX01BR0lDX1NFQ1VSRSkKKyAgICAgICYmIChoLT5tYWdpYyAhPSBDVFhfTUFHSUNfTk9STUFMKSkKKyAgICBfZ2NyeV9mYXRhbF9lcnJvcihHUEdfRVJSX0lOVEVSTkFMLAorCQkgICAgICAiZ2NyeV9jaXBoZXJfY2xvc2U6IGFscmVhZHkgY2xvc2VkL2ludmFsaWQgaGFuZGxlIik7CisgIGVsc2UKKyAgICBoLT5tYWdpYyA9IDA7CisKKyAgLyogV2UgYWx3YXlzIHdhbnQgdG8gd2lwZSBvdXQgdGhlIG1lbW9yeSBldmVuIHdoZW4gdGhlIGNvbnRleHQgaGFzCisgICAgIGJlZW4gYWxsb2NhdGVkIGluIHNlY3VyZSBtZW1vcnkuICBUaGUgdXNlciBtaWdodCBoYXZlIGRpc2FibGVkCisgICAgIHNlY3VyZSBtZW1vcnkgb3IgaXMgdXNpbmcgaGlzIG93biBpbXBsZW1lbnRhdGlvbiB3aGljaCBkb2VzIG5vdAorICAgICBkbyB0aGUgd2lwaW5nLiAgVG8gYWNjb21wbGlzaCB0aGlzIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUKKyAgICAgYWN0dWFsIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgYmVjYXVzZSB3ZSBoYXZlIG5vIHdheSB0byBrbm93bgorICAgICBob3cgbGFyZ2UgdGhlIGFsbG9jYXRlZCBhcmVhIHdhcyB3aGVuIHVzaW5nIGEgc3RhbmRhcmQgbWFsbG9jLiAqLworICBvZmYgPSBoLT5oYW5kbGVfb2Zmc2V0OworICB3aXBlbWVtb3J5IChoLCBoLT5hY3R1YWxfaGFuZGxlX3NpemUpOworCisgIHhmcmVlICgoY2hhciopaCAtIG9mZik7Cit9CisKKworLyogU2V0IHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgdGhlIGVuY3J5cHRpb24gY29udGV4dCBDIHRvIEtFWSB3aXRoCisgICBsZW5ndGggS0VZTEVOLiAgVGhlIGxlbmd0aCBzaG91bGQgbWF0Y2ggdGhlIHJlcXVpcmVkIGxlbmd0aC4gKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NpcGhlcl9zZXRrZXkgKGdjcnlfY2lwaGVyX2hkX3QgYywgYnl0ZSAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgcmMgPSBjLT5zcGVjLT5zZXRrZXkgKCZjLT5jb250ZXh0LmMsIGtleSwga2V5bGVuKTsKKyAgaWYgKCFyYykKKyAgICB7CisgICAgICAvKiBEdXBsaWNhdGUgaW5pdGlhbCBjb250ZXh0LiAgKi8KKyAgICAgIG1lbWNweSAoKHZvaWQgKikgKChjaGFyICopICZjLT5jb250ZXh0LmMgKyBjLT5zcGVjLT5jb250ZXh0c2l6ZSksCisgICAgICAgICAgICAgICh2b2lkICopICZjLT5jb250ZXh0LmMsCisgICAgICAgICAgICAgIGMtPnNwZWMtPmNvbnRleHRzaXplKTsKKyAgICAgIGMtPm1hcmtzLmtleSA9IDE7CisKKyAgICAgIHN3aXRjaCAoYy0+bW9kZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ01BQzoKKyAgICAgICAgICBfZ2NyeV9jaXBoZXJfY21hY19zZXRfc3Via2V5cyAoYyk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0dDTToKKyAgICAgICAgICBfZ2NyeV9jaXBoZXJfZ2NtX3NldGtleSAoYyk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKyAgICB9CisgIGVsc2UKKyAgICBjLT5tYXJrcy5rZXkgPSAwOworCisgIHJldHVybiByYzsKK30KKworCisvKiBTZXQgdGhlIElWIHRvIGJlIHVzZWQgZm9yIHRoZSBlbmNyeXB0aW9uIGNvbnRleHQgQyB0byBJViB3aXRoCisgICBsZW5ndGggSVZMRU4uICBUaGUgbGVuZ3RoIHNob3VsZCBtYXRjaCB0aGUgcmVxdWlyZWQgbGVuZ3RoLiAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorY2lwaGVyX3NldGl2IChnY3J5X2NpcGhlcl9oZF90IGMsIGNvbnN0IGJ5dGUgKml2LCBzaXplX3QgaXZsZW4pCit7CisgIC8qIEdDTSBoYXMgaXRzIG93biBJViBoYW5kbGVyICovCisgIGlmIChjLT5tb2RlID09IEdDUllfQ0lQSEVSX01PREVfR0NNKQorICAgIHJldHVybiBfZ2NyeV9jaXBoZXJfZ2NtX3NldGl2IChjLCBpdiwgaXZsZW4pOworCisgIC8qIElmIHRoZSBjaXBoZXIgaGFzIGl0cyBvd24gSVYgaGFuZGxlciwgd2UgdXNlIG9ubHkgdGhpcyBvbmUuICBUaGlzCisgICAgIGlzIGN1cnJlbnRseSB1c2VkIGZvciBzdHJlYW0gY2lwaGVycyByZXF1aXJpbmcgYSBub25jZS4gICovCisgIGlmIChjLT5zcGVjLT5zZXRpdikKKyAgICB7CisgICAgICBjLT5zcGVjLT5zZXRpdiAoJmMtPmNvbnRleHQuYywgaXYsIGl2bGVuKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBtZW1zZXQgKGMtPnVfaXYuaXYsIDAsIGMtPnNwZWMtPmJsb2Nrc2l6ZSk7CisgIGlmIChpdikKKyAgICB7CisgICAgICBpZiAoaXZsZW4gIT0gYy0+c3BlYy0+YmxvY2tzaXplKQorICAgICAgICB7CisgICAgICAgICAgbG9nX2luZm8gKCJXQVJOSU5HOiBjaXBoZXJfc2V0aXY6IGl2bGVuPSV1IGJsa2xlbj0ldVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClpdmxlbiwgKHVuc2lnbmVkIGludCljLT5zcGVjLT5ibG9ja3NpemUpOworICAgICAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgiSVYgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGJsb2NrbGVuZ3RoIik7CisgICAgICAgIH0KKyAgICAgIGlmIChpdmxlbiA+IGMtPnNwZWMtPmJsb2Nrc2l6ZSkKKyAgICAgICAgaXZsZW4gPSBjLT5zcGVjLT5ibG9ja3NpemU7CisgICAgICBtZW1jcHkgKGMtPnVfaXYuaXYsIGl2LCBpdmxlbik7CisgICAgICBjLT5tYXJrcy5pdiA9IDE7CisgICAgfQorICBlbHNlCisgICAgICBjLT5tYXJrcy5pdiA9IDA7CisgIGMtPnVudXNlZCA9IDA7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogUmVzZXQgdGhlIGNpcGhlciBjb250ZXh0IHRvIHRoZSBpbml0aWFsIGNvbnRleHQuICBUaGlzIGlzIGJhc2ljYWxseQorICAgdGhlIHNhbWUgYXMgYW4gcmVsZWFzZSBmb2xsb3dlZCBieSBhIG5ldy4gKi8KK3N0YXRpYyB2b2lkCitjaXBoZXJfcmVzZXQgKGdjcnlfY2lwaGVyX2hkX3QgYykKK3sKKyAgdW5zaWduZWQgaW50IG1hcmtzX2tleTsKKworICBtYXJrc19rZXkgPSBjLT5tYXJrcy5rZXk7CisKKyAgbWVtY3B5ICgmYy0+Y29udGV4dC5jLAorCSAgKGNoYXIgKikgJmMtPmNvbnRleHQuYyArIGMtPnNwZWMtPmNvbnRleHRzaXplLAorCSAgYy0+c3BlYy0+Y29udGV4dHNpemUpOworICBtZW1zZXQgKCZjLT5tYXJrcywgMCwgc2l6ZW9mIGMtPm1hcmtzKTsKKyAgbWVtc2V0IChjLT51X2l2Lml2LCAwLCBjLT5zcGVjLT5ibG9ja3NpemUpOworICBtZW1zZXQgKGMtPmxhc3RpdiwgMCwgYy0+c3BlYy0+YmxvY2tzaXplKTsKKyAgbWVtc2V0IChjLT51X2N0ci5jdHIsIDAsIGMtPnNwZWMtPmJsb2Nrc2l6ZSk7CisgIGMtPnVudXNlZCA9IDA7CisKKyAgYy0+bWFya3Mua2V5ID0gbWFya3Nfa2V5OworCisgIHN3aXRjaCAoYy0+bW9kZSkKKyAgICB7CisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NNQUM6CisgICAgICAvKiBPbmx5IGNsZWFyICd0YWcnIGZvciBjbWFjLCBrZWVwIHN1YmtleXMuICovCisgICAgICBjLT51X21vZGUuY21hYy50YWcgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfR0NNOgorICAgICAgLyogT25seSBjbGVhciBoZWFkIG9mIHVfbW9kZSwga2VlcCBnaGFzaF9rZXkgYW5kIGdjbV90YWJsZS4gKi8KKyAgICAgIHsKKyAgICAgICAgYnl0ZSAqdV9tb2RlX3BvcyA9ICh2b2lkICopJmMtPnVfbW9kZTsKKyAgICAgICAgYnl0ZSAqZ2hhc2hfa2V5X3BvcyA9IGMtPnVfbW9kZS5nY20udV9naGFzaF9rZXkua2V5OworICAgICAgICBzaXplX3QgdV9tb2RlX2hlYWRfbGVuZ3RoID0gZ2hhc2hfa2V5X3BvcyAtIHVfbW9kZV9wb3M7CisKKyAgICAgICAgbWVtc2V0ICgmYy0+dV9tb2RlLCAwLCB1X21vZGVfaGVhZF9sZW5ndGgpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyNpZmRlZiBIQVZFX1U2NF9UWVBFREVGCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NDTToKKyAgICAgIG1lbXNldCAoJmMtPnVfbW9kZS5jY20sIDAsIHNpemVvZiBjLT51X21vZGUuY2NtKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7IC8qIHVfbW9kZSB1bnVzZWQgYnkgb3RoZXIgbW9kZXMuICovCisgICAgfQorfQorCisKKwwKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX2VjYl9jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5idWZsZW4sCisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCBjcnlwdF9mbikKK3sKKyAgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGMtPnNwZWMtPmJsb2Nrc2l6ZTsKKyAgc2l6ZV90IG4sIG5ibG9ja3M7CisgIHVuc2lnbmVkIGludCBidXJuLCBuYnVybjsKKworICBpZiAob3V0YnVmbGVuIDwgaW5idWZsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVDsKKyAgaWYgKChpbmJ1ZmxlbiAlIGJsb2Nrc2l6ZSkpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICBuYmxvY2tzID0gaW5idWZsZW4gLyBibG9ja3NpemU7CisgIGJ1cm4gPSAwOworCisgIGZvciAobj0wOyBuIDwgbmJsb2NrczsgbisrICkKKyAgICB7CisgICAgICBuYnVybiA9IGNyeXB0X2ZuICgmYy0+Y29udGV4dC5jLCBvdXRidWYsIGluYnVmKTsKKyAgICAgIGJ1cm4gPSBuYnVybiA+IGJ1cm4gPyBuYnVybiA6IGJ1cm47CisgICAgICBpbmJ1ZiAgKz0gYmxvY2tzaXplOworICAgICAgb3V0YnVmICs9IGJsb2Nrc2l6ZTsKKyAgICB9CisKKyAgaWYgKGJ1cm4gPiAwKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm4gKyA0ICogc2l6ZW9mKHZvaWQgKikpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkb19lY2JfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBjLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG91dGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKQoreworICByZXR1cm4gZG9fZWNiX2NyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuLCBjLT5zcGVjLT5lbmNyeXB0KTsKK30KKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZG9fZWNiX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRidWYsIHNpemVfdCBvdXRidWZsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIHNpemVfdCBpbmJ1ZmxlbikKK3sKKyAgcmV0dXJuIGRvX2VjYl9jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1ZmxlbiwgYy0+c3BlYy0+ZGVjcnlwdCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIEVuY3J5cHQgSU5CVUYgdG8gT1VUQlVGIHdpdGggdGhlIG1vZGUgc2VsZWN0ZWQgYXQgb3Blbi4KKyAqIGluYnVmIGFuZCBvdXRidWYgbWF5IG92ZXJsYXAgb3IgYmUgdGhlIHNhbWUuCisgKiBEZXBlbmRpbmcgb24gdGhlIG1vZGUgc29tZSBjb25zdHJhaW50cyBhcHBseSB0byBJTkJVRkxFTi4KKyAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorY2lwaGVyX2VuY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorCQljb25zdCBieXRlICppbmJ1Ziwgc2l6ZV90IGluYnVmbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgc3dpdGNoIChjLT5tb2RlKQorICAgIHsKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfRUNCOgorICAgICAgcmMgPSBkb19lY2JfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9DQkM6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9jYmNfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9DRkI6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9jZmJfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9PRkI6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9vZmJfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9DVFI6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9jdHJfZW5jcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9BRVNXUkFQOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfYWVzd3JhcF9lbmNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NDTToKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NjbV9lbmNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NNQUM6CisgICAgICByYyA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfR0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfZ2NtX2VuY3J5cHQgKGMsIG91dGJ1Ziwgb3V0YnVmbGVuLCBpbmJ1ZiwgaW5idWZsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfU1RSRUFNOgorICAgICAgYy0+c3BlYy0+c3RlbmNyeXB0ICgmYy0+Y29udGV4dC5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRidWYsIChieXRlKikvKmFyZ2dnKi9pbmJ1ZiwgaW5idWZsZW4pOworICAgICAgcmMgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfTk9ORToKKyAgICAgIGlmIChmaXBzX21vZGUgKCkgfHwgIV9nY3J5X2dldF9kZWJ1Z19mbGFnICgwKSkKKyAgICAgICAgeworICAgICAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgiY2lwaGVyIG1vZGUgTk9ORSB1c2VkIik7CisgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKGluYnVmICE9IG91dGJ1ZikKKyAgICAgICAgICAgIG1lbW1vdmUgKG91dGJ1ZiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgICAgICByYyA9IDA7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ19mYXRhbCAoImNpcGhlcl9lbmNyeXB0OiBpbnZhbGlkIG1vZGUgJWRcbiIsIGMtPm1vZGUgKTsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfQ0lQSEVSX01PREU7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBFbmNyeXB0IElOIGFuZCB3cml0ZSBpdCB0byBPVVQuICBJZiBJTiBpcyBOVUxMLCBpbi1wbGFjZSBlbmNyeXB0aW9uIGhhcworICogYmVlbiByZXF1ZXN0ZWQuCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2VuY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgaCwgdm9pZCAqb3V0LCBzaXplX3Qgb3V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgaWYgKCFpbikgIC8qIENhbGxlciByZXF1ZXN0ZWQgaW4tcGxhY2UgZW5jcnlwdGlvbi4gICovCisgICAgeworICAgICAgaW4gPSBvdXQ7CisgICAgICBpbmxlbiA9IG91dHNpemU7CisgICAgfQorCisgIHJjID0gY2lwaGVyX2VuY3J5cHQgKGgsIG91dCwgb3V0c2l6ZSwgaW4sIGlubGVuKTsKKworICAvKiBGYWlsc2FmZTogTWFrZSBzdXJlIHRoYXQgdGhlIHBsYWludGV4dCB3aWxsIG5ldmVyIG1ha2UgaXQgaW50bworICAgICBPVVQgaWYgdGhlIGVuY3J5cHRpb24gcmV0dXJuZWQgYW4gZXJyb3IuICAqLworICBpZiAocmMgJiYgb3V0KQorICAgIG1lbXNldCAob3V0LCAweDQyLCBvdXRzaXplKTsKKworICByZXR1cm4gcmM7Cit9CisKKworCisvKioqKioqKioqKioqKioqKgorICogRGVjcnlwdCBJTkJVRiB0byBPVVRCVUYgd2l0aCB0aGUgbW9kZSBzZWxlY3RlZCBhdCBvcGVuLgorICogaW5idWYgYW5kIG91dGJ1ZiBtYXkgb3ZlcmxhcCBvciBiZSB0aGUgc2FtZS4KKyAqIERlcGVuZGluZyBvbiB0aGUgbW9kZSBzb21lIHNvbWUgY29udHJhaW50cyBhcHBseSB0byBJTkJVRkxFTi4KKyAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorY2lwaGVyX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgYywgYnl0ZSAqb3V0YnVmLCBzaXplX3Qgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgaW5idWZsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKworICBzd2l0Y2ggKGMtPm1vZGUpCisgICAgeworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9FQ0I6CisgICAgICByYyA9IGRvX2VjYl9kZWNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NCQzoKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NiY19kZWNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NGQjoKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NmYl9kZWNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX09GQjoKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX29mYl9lbmNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NUUjoKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2N0cl9lbmNyeXB0IChjLCBvdXRidWYsIG91dGJ1ZmxlbiwgaW5idWYsIGluYnVmbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVA6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9hZXN3cmFwX2RlY3J5cHQgKGMsIG91dGJ1Ziwgb3V0YnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgaW5idWZsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfY2NtX2RlY3J5cHQgKGMsIG91dGJ1Ziwgb3V0YnVmbGVuLCBpbmJ1ZiwgaW5idWZsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ01BQzoKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfQ0lQSEVSX01PREU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9HQ006CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9nY21fZGVjcnlwdCAoYywgb3V0YnVmLCBvdXRidWZsZW4sIGluYnVmLCBpbmJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9TVFJFQU06CisgICAgICBjLT5zcGVjLT5zdGRlY3J5cHQgKCZjLT5jb250ZXh0LmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJ1ZiwgKGJ5dGUqKS8qYXJnZ2cqL2luYnVmLCBpbmJ1Zmxlbik7CisgICAgICByYyA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9OT05FOgorICAgICAgaWYgKGZpcHNfbW9kZSAoKSB8fCAhX2djcnlfZ2V0X2RlYnVnX2ZsYWcgKDApKQorICAgICAgICB7CisgICAgICAgICAgZmlwc19zaWduYWxfZXJyb3IgKCJjaXBoZXIgbW9kZSBOT05FIHVzZWQiKTsKKyAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaW5idWYgIT0gb3V0YnVmKQorICAgICAgICAgICAgbWVtbW92ZSAob3V0YnVmLCBpbmJ1ZiwgaW5idWZsZW4pOworICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nX2ZhdGFsICgiY2lwaGVyX2RlY3J5cHQ6IGludmFsaWQgbW9kZSAlZFxuIiwgYy0+bW9kZSApOworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBoLCB2b2lkICpvdXQsIHNpemVfdCBvdXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4pCit7CisgIGlmICghaW4pIC8qIENhbGxlciByZXF1ZXN0ZWQgaW4tcGxhY2UgZW5jcnlwdGlvbi4gKi8KKyAgICB7CisgICAgICBpbiA9IG91dDsKKyAgICAgIGlubGVuID0gb3V0c2l6ZTsKKyAgICB9CisKKyAgcmV0dXJuIGNpcGhlcl9kZWNyeXB0IChoLCBvdXQsIG91dHNpemUsIGluLCBpbmxlbik7Cit9CisKKworCisvKioqKioqKioqKioqKioqKgorICogVXNlZCBmb3IgUEdQJ3Mgc29tZXdoYXQgc3RyYW5nZSBDRkIgbW9kZS4gT25seSB3b3JrcyBpZgorICogdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBzZXQuCisgKi8KK3N0YXRpYyB2b2lkCitjaXBoZXJfc3luYyAoZ2NyeV9jaXBoZXJfaGRfdCBjKQoreworICBpZiAoKGMtPmZsYWdzICYgR0NSWV9DSVBIRVJfRU5BQkxFX1NZTkMpICYmIGMtPnVudXNlZCkKKyAgICB7CisgICAgICBtZW1tb3ZlIChjLT51X2l2Lml2ICsgYy0+dW51c2VkLAorICAgICAgICAgICAgICAgYy0+dV9pdi5pdiwgYy0+c3BlYy0+YmxvY2tzaXplIC0gYy0+dW51c2VkKTsKKyAgICAgIG1lbWNweSAoYy0+dV9pdi5pdiwKKyAgICAgICAgICAgICAgYy0+bGFzdGl2ICsgYy0+c3BlYy0+YmxvY2tzaXplIC0gYy0+dW51c2VkLCBjLT51bnVzZWQpOworICAgICAgYy0+dW51c2VkID0gMDsKKyAgICB9Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfc2V0a2V5IChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4pCit7CisgIHJldHVybiBjaXBoZXJfc2V0a2V5IChoZCwgKHZvaWQqKWtleSwga2V5bGVuKTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9zZXRpdiAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaXYsIHNpemVfdCBpdmxlbikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKworICBzd2l0Y2ggKGhkLT5tb2RlKQorICAgIHsKKyAgICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9DQ006CisgICAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NjbV9zZXRfbm9uY2UgKGhkLCBpdiwgaXZsZW4pOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmMgPSBjaXBoZXJfc2V0aXYgKGhkLCBpdiwgaXZsZW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiByYzsKK30KKworLyogU2V0IGNvdW50ZXIgZm9yIENUUiBtb2RlLiAgKENUUixDVFJMRU4pIG11c3QgZGVub3RlIGEgYnVmZmVyIG9mCisgICBibG9jayBzaXplIGxlbmd0aCwgb3IgKE5VTEwsMCkgdG8gc2V0IHRoZSBDVFIgdG8gdGhlIGFsbC16ZXJvCisgICBibG9jay4gKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfc2V0Y3RyIChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICpjdHIsIHNpemVfdCBjdHJsZW4pCit7CisgIGlmIChjdHIgJiYgY3RybGVuID09IGhkLT5zcGVjLT5ibG9ja3NpemUpCisgICAgeworICAgICAgbWVtY3B5IChoZC0+dV9jdHIuY3RyLCBjdHIsIGhkLT5zcGVjLT5ibG9ja3NpemUpOworICAgICAgaGQtPnVudXNlZCA9IDA7CisgICAgfQorICBlbHNlIGlmICghY3RyIHx8ICFjdHJsZW4pCisgICAgeworICAgICAgbWVtc2V0IChoZC0+dV9jdHIuY3RyLCAwLCBoZC0+c3BlYy0+YmxvY2tzaXplKTsKKyAgICAgIGhkLT51bnVzZWQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgcmV0dXJuIDA7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlIChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICphYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFidWZsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKworICBzd2l0Y2ggKGhkLT5tb2RlKQorICAgIHsKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfY2NtX2F1dGhlbnRpY2F0ZSAoaGQsIGFidWYsIGFidWZsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ01BQzoKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NtYWNfYXV0aGVudGljYXRlIChoZCwgYWJ1ZiwgYWJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9HQ006CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9nY21fYXV0aGVudGljYXRlIChoZCwgYWJ1ZiwgYWJ1Zmxlbik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dfZXJyb3IgKCJnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGU6IGludmFsaWQgbW9kZSAlZFxuIiwgaGQtPm1vZGUpOworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfZ2V0dGFnIChnY3J5X2NpcGhlcl9oZF90IGhkLCB2b2lkICpvdXR0YWcsIHNpemVfdCB0YWdsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKworICBzd2l0Y2ggKGhkLT5tb2RlKQorICAgIHsKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfQ0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfY2NtX2dldF90YWcgKGhkLCBvdXR0YWcsIHRhZ2xlbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9DSVBIRVJfTU9ERV9DTUFDOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfY21hY19nZXRfdGFnIChoZCwgb3V0dGFnLCB0YWdsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfR0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfZ2NtX2dldF90YWcgKGhkLCBvdXR0YWcsIHRhZ2xlbik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dfZXJyb3IgKCJnY3J5X2NpcGhlcl9nZXR0YWc6IGludmFsaWQgbW9kZSAlZFxuIiwgaGQtPm1vZGUpOworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY2hlY2t0YWcgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmludGFnLCBzaXplX3QgdGFnbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgc3dpdGNoIChoZC0+bW9kZSkKKyAgICB7CisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NDTToKKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX2NjbV9jaGVja190YWcgKGhkLCBpbnRhZywgdGFnbGVuKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0NJUEhFUl9NT0RFX0NNQUM6CisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9jbWFjX2NoZWNrX3RhZyAoaGQsIGludGFnLCB0YWdsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllfQ0lQSEVSX01PREVfR0NNOgorICAgICAgcmMgPSBfZ2NyeV9jaXBoZXJfZ2NtX2NoZWNrX3RhZyAoaGQsIGludGFnLCB0YWdsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nX2Vycm9yICgiZ2NyeV9jaXBoZXJfY2hlY2t0YWc6IGludmFsaWQgbW9kZSAlZFxuIiwgaGQtPm1vZGUpOworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9DSVBIRVJfTU9ERTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9jaXBoZXJfY3RsIChnY3J5X2NpcGhlcl9oZF90IGgsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKworICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSBHQ1JZQ1RMX1JFU0VUOgorICAgICAgY2lwaGVyX3Jlc2V0IChoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0NGQl9TWU5DOgorICAgICAgY2lwaGVyX3N5bmMoIGggKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1NFVF9DQkNfQ1RTOgorICAgICAgaWYgKGJ1ZmxlbikKKwlpZiAoaC0+ZmxhZ3MgJiBHQ1JZX0NJUEhFUl9DQkNfTUFDKQorCSAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworCWVsc2UKKwkgIGgtPmZsYWdzIHw9IEdDUllfQ0lQSEVSX0NCQ19DVFM7CisgICAgICBlbHNlCisJaC0+ZmxhZ3MgJj0gfkdDUllfQ0lQSEVSX0NCQ19DVFM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9TRVRfQ0JDX01BQzoKKyAgICAgIGlmIChidWZsZW4pCisJaWYgKGgtPmZsYWdzICYgR0NSWV9DSVBIRVJfQ0JDX0NUUykKKwkgIHJjID0gR1BHX0VSUl9JTlZfRkxBRzsKKwllbHNlCisJICBoLT5mbGFncyB8PSBHQ1JZX0NJUEhFUl9DQkNfTUFDOworICAgICAgZWxzZQorCWgtPmZsYWdzICY9IH5HQ1JZX0NJUEhFUl9DQkNfTUFDOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VUX0NDTV9MRU5HVEhTOgorI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKyAgICAgIHsKKyAgICAgICAgdTY0IHBhcmFtc1szXTsKKyAgICAgICAgc2l6ZV90IGVuY3J5cHRlZGxlbjsKKyAgICAgICAgc2l6ZV90IGFhZGxlbjsKKyAgICAgICAgc2l6ZV90IGF1dGh0YWdsZW47CisKKyAgICAgICAgaWYgKGgtPm1vZGUgIT0gR0NSWV9DSVBIRVJfTU9ERV9DQ00pCisgICAgICAgICAgcmV0dXJuIGdjcnlfZXJyb3IgKEdQR19FUlJfSU5WX0NJUEhFUl9NT0RFKTsKKworICAgICAgICBpZiAoIWJ1ZmZlciB8fCBidWZsZW4gIT0gMyAqIHNpemVvZih1NjQpKQorICAgICAgICAgIHJldHVybiBnY3J5X2Vycm9yIChHUEdfRVJSX0lOVl9BUkcpOworCisgICAgICAgIC8qIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBsZW5ndGggcGFyYW1ldGVycyBuZWVkZWQKKyAgICAgICAgICAgYnkgQ0NNIG1vZGUgdG8gaW5pdGlhbGl6ZSBDQkMtTUFDLiAgKi8KKyAgICAgICAgbWVtY3B5IChwYXJhbXMsIGJ1ZmZlciwgc2l6ZW9mKHBhcmFtcykpOworICAgICAgICBlbmNyeXB0ZWRsZW4gPSBwYXJhbXNbMF07CisgICAgICAgIGFhZGxlbiA9IHBhcmFtc1sxXTsKKyAgICAgICAgYXV0aHRhZ2xlbiA9IHBhcmFtc1syXTsKKworICAgICAgICByYyA9IF9nY3J5X2NpcGhlcl9jY21fc2V0X2xlbmd0aHMgKGgsIGVuY3J5cHRlZGxlbiwgYWFkbGVuLCBhdXRodGFnbGVuKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICByYyA9IEdQR19FUlJfTk9UX1NVUFBPUlRFRDsKKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfRElTQUJMRV9BTEdPOgorICAgICAgLyogVGhpcyBjb21tYW5kIGV4cGVjdHMgTlVMTCBmb3IgSCBhbmQgQlVGRkVSIHRvIHBvaW50IHRvIGFuCisgICAgICAgICBpbnRlZ2VyIHdpdGggdGhlIGFsZ28gbnVtYmVyLiAgKi8KKyAgICAgIGlmKCBoIHx8ICFidWZmZXIgfHwgYnVmbGVuICE9IHNpemVvZihpbnQpICkKKwlyZXR1cm4gZ2NyeV9lcnJvciAoR1BHX0VSUl9DSVBIRVJfQUxHTyk7CisgICAgICBkaXNhYmxlX2NpcGhlcl9hbGdvKCAqKGludCopYnVmZmVyICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNjE6ICAvKiBEaXNhYmxlIHdlYWsga2V5IGRldGVjdGlvbiAocHJpdmF0ZSkuICAqLworICAgICAgaWYgKGgtPnNwZWMtPnNldF9leHRyYV9pbmZvKQorICAgICAgICByYyA9IGgtPnNwZWMtPnNldF9leHRyYV9pbmZvCisgICAgICAgICAgKCZoLT5jb250ZXh0LmMsIENJUEhFUl9JTkZPX05PX1dFQUtfS0VZLCBOVUxMLCAwKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBHUEdfRVJSX05PVF9TVVBQT1JURUQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNjI6IC8qIFJldHVybiBjdXJyZW50IGlucHV0IHZlY3RvciAocHJpdmF0ZSkuICAqLworICAgICAgLyogVGhpcyBpcyB0aGUgaW5wdXQgYmxvY2sgYXMgdXNlZCBpbiBDRkIgYW5kIE9GQiBtb2RlIHdoaWNoIGhhcworICAgICAgICAgaW5pdGlhbGx5IGJlZW4gc2V0IGFzIElWLiAgVGhlIHJldHVybmVkIGZvcm1hdCBpczoKKyAgICAgICAgICAgMSBieXRlICBBY3R1YWwgbGVuZ3RoIG9mIHRoZSBibG9jayBpbiBieXRlcy4KKyAgICAgICAgICAgbiBieXRlICBUaGUgYmxvY2suCisgICAgICAgICBJZiB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuICovCisgICAgICBpZiAoYnVmbGVuIDwgKDEgKyBoLT5zcGVjLT5ibG9ja3NpemUpKQorICAgICAgICByYyA9IEdQR19FUlJfVE9PX1NIT1JUOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXZwOworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCA9IGJ1ZmZlcjsKKyAgICAgICAgICBpbnQgbiA9IGgtPnVudXNlZDsKKworICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgIG4gPSBoLT5zcGVjLT5ibG9ja3NpemU7CisgICAgICAgICAgZ2NyeV9hc3NlcnQgKG4gPD0gaC0+c3BlYy0+YmxvY2tzaXplKTsKKyAgICAgICAgICAqZHN0KysgPSBuOworICAgICAgICAgIGl2cCA9IGgtPnVfaXYuaXYgKyBoLT5zcGVjLT5ibG9ja3NpemUgLSBuOworICAgICAgICAgIHdoaWxlIChuLS0pCisgICAgICAgICAgICAqZHN0KysgPSAqaXZwKys7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT1A7CisgICAgfQorCisgIHJldHVybiByYzsKK30KKworCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNpcGhlciBoYW5kbGUgSC4gIENNRCBpcyB0aGUga2luZCBvZgorICAgaW5mb3JtYXRpb24gcmVxdWVzdGVkLiAgQlVGRkVSIGFuZCBOQllURVMgYXJlIHJlc2VydmVkIGZvciBub3cuCisKKyAgIFRoZXJlIGFyZSBubyB2YWx1ZXMgZm9yIENNRCB5ZXQgZGVmaW5lZC4KKworICAgVGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIEdQR19FUlJfSU5WX09QLgorCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2luZm8gKGdjcnlfY2lwaGVyX2hkX3QgaCwgaW50IGNtZCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKworICAodm9pZCloOworICAodm9pZClidWZmZXI7CisgICh2b2lkKW5ieXRlczsKKworICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT1A7CisgICAgfQorCisgIHJldHVybiByYzsKK30KKworLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBjaXBoZXIgYWxnb3JpdGhtIEFMR08uCisKKyAgIFdIQVQgc2VsZWN0IHRoZSBraW5kIG9mIGluZm9ybWF0aW9uIHJldHVybmVkOgorCisgICAgR0NSWUNUTF9HRVRfS0VZTEVOOgorICAJUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGtleS4gIElmIHRoZSBhbGdvcml0aG0gQUxHTworICAJc3VwcG9ydHMgbXVsdGlwbGUga2V5IGxlbmd0aHMsIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBrZXkgbGVuZ3RoCisgIAlpcyByZXR1cm5lZC4gIFRoZSBrZXkgbGVuZ3RoIGlzIHJldHVybmVkIGFzIG51bWJlciBvZiBvY3RldHMuCisgIAlCVUZGRVIgYW5kIE5CWVRFUyBtdXN0IGJlIHplcm8uCisKKyAgICBHQ1JZQ1RMX0dFVF9CTEtMRU46CisgIAlSZXR1cm4gdGhlIGJsb2NrbGVuZ3RoIG9mIHRoZSBhbGdvcml0aG0gQUxHTyBjb3VudGVkIGluIG9jdGV0cy4KKyAgCUJVRkZFUiBhbmQgTkJZVEVTIG11c3QgYmUgemVyby4KKworICAgIEdDUllDVExfVEVTVF9BTEdPOgorICAJUmV0dXJucyAwIGlmIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtIEFMR08gaXMgYXZhaWxhYmxlIGZvciB1c2UuCisgIAlCVUZGRVIgYW5kIE5CWVRFUyBtdXN0IGJlIHplcm8uCisKKyAgIE5vdGU6IEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBpbiBtb3N0IGNhc2VzIHVzZWQgdG8gcmV0dXJuIGFuCisgICBpbnRlZ2VyIHZhbHVlLCB3ZSBjYW4gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBjYWxsZXIgdG8ganVzdCBsb29rIGF0CisgICB0aGUgcmV0dXJuIHZhbHVlLiAgVGhlIGNhbGxlciB3aWxsIGluIGFsbCBjYXNlcyBjb25zdWx0IHRoZSB2YWx1ZQorICAgYW5kIHRoZXJlYnkgZGV0ZWN0aW5nIHdoZXRoZXIgYSBlcnJvciBvY2N1cnJlZCBvciBub3QgKGkuZS4gd2hpbGUKKyAgIGNoZWNraW5nIHRoZSBibG9jayBzaXplKQorICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2NpcGhlcl9hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKyAgdW5zaWduZWQgaW50IHVpOworCisgIHN3aXRjaCAod2hhdCkKKyAgICB7CisgICAgY2FzZSBHQ1JZQ1RMX0dFVF9LRVlMRU46CisgICAgICBpZiAoYnVmZmVyIHx8ICghIG5ieXRlcykpCisJcmMgPSBHUEdfRVJSX0NJUEhFUl9BTEdPOworICAgICAgZWxzZQorCXsKKwkgIHVpID0gY2lwaGVyX2dldF9rZXlsZW4gKGFsZ28pOworCSAgaWYgKCh1aSA+IDApICYmICh1aSA8PSA1MTIpKQorCSAgICAqbmJ5dGVzID0gKHNpemVfdCkgdWkgLyA4OworCSAgZWxzZQorCSAgICAvKiBUaGUgb25seSByZWFzb24gZm9yIGFuIGVycm9yIGlzIGFuIGludmFsaWQgYWxnby4gICovCisJICAgIHJjID0gR1BHX0VSUl9DSVBIRVJfQUxHTzsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9HRVRfQkxLTEVOOgorICAgICAgaWYgKGJ1ZmZlciB8fCAoISBuYnl0ZXMpKQorCXJjID0gR1BHX0VSUl9DSVBIRVJfQUxHTzsKKyAgICAgIGVsc2UKKwl7CisJICB1aSA9IGNpcGhlcl9nZXRfYmxvY2tzaXplIChhbGdvKTsKKwkgIGlmICgodWkgPiAwKSAmJiAodWkgPCAxMDAwMCkpCisJICAgICpuYnl0ZXMgPSB1aTsKKwkgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVGhlIG9ubHkgcmVhc29uIGlzIGFuIGludmFsaWQgYWxnbyBvciBhIHN0cmFuZ2UKKyAgICAgICAgICAgICAgICAgYmxvY2tzaXplLiAgKi8KKyAgICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0NJUEhFUl9BTEdPOworICAgICAgICAgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1RFU1RfQUxHTzoKKyAgICAgIGlmIChidWZmZXIgfHwgbmJ5dGVzKQorCXJjID0gR1BHX0VSUl9JTlZfQVJHOworICAgICAgZWxzZQorCXJjID0gY2hlY2tfY2lwaGVyX2FsZ28gKGFsZ28pOworICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisJcmMgPSBHUEdfRVJSX0lOVl9PUDsKKyAgICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBsZW5ndGggb2YgdGhlIGtleSBmb3IgYWxnb3JpdGhtIEFMR08uICBJZiB0aGUKKyAgIGFsZ29yaXRobSBzdXBwb3J0cyBtdWx0aXBsZSBrZXkgbGVuZ3RocywgdGhlIG1heGltdW0gc3VwcG9ydGVkIGtleQorICAgbGVuZ3RoIGlzIHJldHVybmVkLiAgT24gZXJyb3IgMCBpcyByZXR1cm5lZC4gIFRoZSBrZXkgbGVuZ3RoIGlzCisgICByZXR1cm5lZCBhcyBudW1iZXIgb2Ygb2N0ZXRzLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlcgorICAgZ2NyeV9jaXBoZXJfYWxnb19pbmZvIGJlY2F1c2UgaXQgYWxsb3dzIGZvciBwcm9wZXIgdHlwZQorICAgY2hlY2tpbmcuICAqLworc2l6ZV90CitfZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIChpbnQgYWxnbykKK3sKKyAgc2l6ZV90IG47CisKKyAgaWYgKF9nY3J5X2NpcGhlcl9hbGdvX2luZm8gKGFsZ28sIEdDUllDVExfR0VUX0tFWUxFTiwgTlVMTCwgJm4pKQorICAgIG4gPSAwOworICByZXR1cm4gbjsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zIHRoZSBibG9ja2xlbmd0aCBvZiB0aGUgYWxnb3JpdGhtIEFMR08KKyAgIGNvdW50ZWQgaW4gb2N0ZXRzLiAgT24gZXJyb3IgMCBpcyByZXR1cm5lZC4KKworICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIKKyAgIGdjcnlfY2lwaGVyX2FsZ29faW5mbyBiZWNhdXNlIGl0IGFsbG93cyBmb3IgcHJvcGVyIHR5cGUKKyAgIGNoZWNraW5nLiAgKi8KK3NpemVfdAorX2djcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbiAoaW50IGFsZ28pCit7CisgIHNpemVfdCBuOworCisgIGlmIChfZ2NyeV9jaXBoZXJfYWxnb19pbmZvKCBhbGdvLCBHQ1JZQ1RMX0dFVF9CTEtMRU4sIE5VTEwsICZuKSkKKyAgICBuID0gMDsKKyAgcmV0dXJuIG47Cit9CisKKworLyogRXhwbGljaXRseSBpbml0aWFsaXplIHRoaXMgbW9kdWxlLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfY2lwaGVyX2luaXQgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCisKKy8qIFJ1biB0aGUgc2VsZnRlc3RzIGZvciBjaXBoZXIgYWxnb3JpdGhtIEFMR08gd2l0aCBvcHRpb25hbCByZXBvcnRpbmcKKyAgIGZ1bmN0aW9uIFJFUE9SVC4gICovCitncGdfZXJyb3JfdAorX2djcnlfY2lwaGVyX3NlbGZ0ZXN0IChpbnQgYWxnbywgaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVjID0gMDsKKyAgZ2NyeV9jaXBoZXJfc3BlY190ICpzcGVjOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisgIGlmIChzcGVjICYmICFzcGVjLT5mbGFncy5kaXNhYmxlZCAmJiBzcGVjLT5zZWxmdGVzdCkKKyAgICBlYyA9IHNwZWMtPnNlbGZ0ZXN0IChhbGdvLCBleHRlbmRlZCwgcmVwb3J0KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGVjID0gR1BHX0VSUl9DSVBIRVJfQUxHTzsKKyAgICAgIGlmIChyZXBvcnQpCisgICAgICAgIHJlcG9ydCAoImNpcGhlciIsIGFsZ28sICJtb2R1bGUiLAorICAgICAgICAgICAgICAgIChzcGVjICYmICFzcGVjLT5mbGFncy5kaXNhYmxlZCk/CisgICAgICAgICAgICAgICAgIm5vIHNlbGZ0ZXN0IGF2YWlsYWJsZSIgOgorICAgICAgICAgICAgICAgIHNwZWM/ICJhbGdvcml0aG0gZGlzYWJsZWQiIDogImFsZ29yaXRobSBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoZWMpOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2NyYy5jIGIvY2lwaGVyL2NyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjJmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvY3JjLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qIGNyYy5jIC0gQ3ljbGljIHJlZHVuZGFuY3kgY2hlY2tzLgorICogQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2luY2x1ZGUgImJpdGhlbHAuaCIKKworLyogVGFibGUgb2YgQ1JDcyBvZiBhbGwgOC1iaXQgbWVzc2FnZXMuICBHZW5lcmF0ZWQgYnkgcnVubmluZyBjb2RlCisgICBmcm9tIFJGQyAxOTUyIG1vZGlmaWVkIHRvIHByaW50IG91dCB0aGUgdGFibGUuICovCitzdGF0aWMgdTMyIGNyYzMyX3RhYmxlWzI1Nl0gPSB7CisgIDB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsIDB4MDc2ZGM0MTksIDB4NzA2YWY0OGYsCisgIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsIDB4ZTBkNWU5MWUsIDB4OTdkMmQ5ODgsCisgIDB4MDliNjRjMmIsIDB4N2ViMTdjYmQsIDB4ZTdiODJkMDcsIDB4OTBiZjFkOTEsIDB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsCisgIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsIDB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4ODNkMzg1YzcsCisgIDB4MTM2Yzk4NTYsIDB4NjQ2YmE4YzAsIDB4ZmQ2MmY5N2EsIDB4OGE2NWM5ZWMsIDB4MTQwMTVjNGYsIDB4NjMwNjZjZDksCisgIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsIDB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsIDB4YTI2NzcxNzIsCisgIDB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsIDB4MzViNWE4ZmEsIDB4NDJiMjk4NmMsCisgIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsIDB4MzJkODZjZTMsIDB4NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksCisgIDB4MjZkOTMwYWMsIDB4NTFkZTAwM2EsIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsCisgIDB4Y2ZiYTk1OTksIDB4YjhiZGE1MGYsIDB4MjgwMmI4OWUsIDB4NWYwNTg4MDgsIDB4YzYwY2Q5YjIsIDB4YjEwYmU5MjQsCisgIDB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2NjJkM2QsIDB4NzZkYzQxOTAsIDB4MDFkYjcxMDYsCisgIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsIDB4NzFiMTg1ODksIDB4MDZiNmI1MWYsIDB4OWZiZmU0YTUsIDB4ZThiOGQ0MzMsCisgIDB4NzgwN2M5YTIsIDB4MGYwMGY5MzQsIDB4OTYwOWE4OGUsIDB4ZTEwZTk4MTgsIDB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsCisgIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsIDB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsCisgIDB4NmMwNjk1ZWQsIDB4MWIwMWE1N2IsIDB4ODIwOGY0YzEsIDB4ZjUwZmM0NTcsIDB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsCisgIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsIDB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsIDB4ZmJkNDRjNjUsCisgIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIsIDB4NGFkZmE1NDEsIDB4M2RkODk1ZDcsCisgIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIsIDB4NDM2OWU5NmEsIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsCisgIDB4NDQwNDJkNzMsIDB4MzMwMzFkZTUsIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsCisgIDB4YmUwYjEwMTAsIDB4YzkwYzIwODYsIDB4NTc2OGI1MjUsIDB4MjA2Zjg1YjMsIDB4Yjk2NmQ0MDksIDB4Y2U2MWU0OWYsCisgIDB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4MjIsIDB4YzdkN2E4YjQsIDB4NTliMzNkMTcsIDB4MmViNDBkODEsCisgIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsIDB4MDNiNmUyMGMsIDB4NzRiMWQyOWEsCisgIDB4ZWFkNTQ3MzksIDB4OWRkMjc3YWYsIDB4MDRkYjI2MTUsIDB4NzNkYzE2ODMsIDB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsCisgIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsIDB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsCisgIDB4ZjAwZjkzNDQsIDB4ODcwOGEzZDIsIDB4MWUwMWYyNjgsIDB4NjkwNmMyZmUsIDB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsCisgIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsIDB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdhNWEsIDB4NjdkZDRhY2MsCisgIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4NjBiMDhlZDUsIDB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsCisgIDB4MzhkOGMyYzQsIDB4NGZkZmYyNTIsIDB4ZDFiYjY3ZjEsIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsCisgIDB4ZDgwZDJiZGEsIDB4YWYwYTFiNGMsIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsIDB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsCisgIDB4MzE2ZThlZWYsIDB4NDY2OWJlNzksIDB4Y2I2MWIzOGMsIDB4YmM2NjgzMWEsIDB4MjU2ZmQyYTAsIDB4NTI2OGUyMzYsCisgIDB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMsIDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsIDB4YzViYTNiYmUsIDB4YjJiZDBiMjgsCisgIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsIDB4MmNkOTllOGIsIDB4NWJkZWFlMWQsCisgIDB4OWI2NGMyYjAsIDB4ZWM2M2YyMjYsIDB4NzU2YWEzOWMsIDB4MDI2ZDkzMGEsIDB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsCisgIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsIDB4OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsCisgIDB4OTJkMjhlOWIsIDB4ZTVkNWJlMGQsIDB4N2NkY2VmYjcsIDB4MGJkYmRmMjEsIDB4ODZkM2QyZDQsIDB4ZjFkNGUyNDIsCisgIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsIDB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIsIDB4NmZiMDc3ZTEsIDB4MThiNzQ3NzcsCisgIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYwNjNiY2EsIDB4MTEwMTBiNWMsIDB4OGY2NTllZmYsIDB4Zjg2MmFlNjksCisgIDB4NjE2YmZmZDMsIDB4MTY2Y2NmNDUsIDB4YTAwYWUyNzgsIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2IzYzIsCisgIDB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsIDB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsIDB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsCisgIDB4NDBkZjBiNjYsIDB4MzdkODNiZjAsIDB4YTliY2FlNTMsIDB4ZGViYjllYzUsIDB4NDdiMmNmN2YsIDB4MzBiNWZmZTksCisgIDB4YmRiZGYyMWMsIDB4Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsIDB4YmFkMDM2MDUsIDB4Y2RkNzA2OTMsCisgIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsIDB4NWQ2ODFiMDIsIDB4MmE2ZjJiOTQsCisgIDB4YjQwYmJlMzcsIDB4YzMwYzhlYTEsIDB4NWEwNWRmMWIsIDB4MmQwMmVmOGQKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZnJvbSBSRkMgMTk1MiBieSBTaW1vbgorICogSm9zZWZzc29uLCBmb3IgdGhlIFNoaXNoaSBwcm9qZWN0LCBhbmQgbW9kaWZpZWQgdG8gYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGUgbW9kaWZpZWQgQ1JDLTMyIHVzZWQgYnkgUkZDIDE1MTAsIGFuZCBzdWJzZXF1ZW50bHkKKyAqIG1vZGlmaWVkIGZvciBHTlUgTGliZ2NyeXB0IHRvIGFsbG93IGl0IHRvIGJlIHVzZWQgZm9yIGNhbGN1bGF0aW5nCisgKiBib3RoIHVubW9kaWZpZWQgQ1JDLTMyIGFuZCBtb2RpZmllZCBDUkMtMzIgdmFsdWVzLiAgT3JpZ2luYWwKKyAqIGNvcHlyaWdodCBhbmQgbm90aWNlIGZyb20gdGhlIGRvY3VtZW50IGZvbGxvd3M6CisgKgorICogICAgQ29weXJpZ2h0IChjKSAxOTk2IEwuIFBldGVyIERldXRzY2gKKyAqCisgKiAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGRvY3VtZW50IGZvcgorICogICAgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgY2hhcmdlLCBpbmNsdWRpbmcgdHJhbnNsYXRpb25zIGludG8KKyAqICAgIG90aGVyIGxhbmd1YWdlcyBhbmQgaW5jb3Jwb3JhdGlvbiBpbnRvIGNvbXBpbGF0aW9ucywgcHJvdmlkZWQKKyAqICAgIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQsIGFuZAorICogICAgdGhhdCBhbnkgc3Vic3RhbnRpdmUgY2hhbmdlcyBvciBkZWxldGlvbnMgZnJvbSB0aGUgb3JpZ2luYWwgYXJlCisgKiAgICBjbGVhcmx5IG1hcmtlZC4KKyAqCisgKiBUaGUgY29weXJpZ2h0IG9uIFJGQ3MsIGFuZCBjb25zZXF1ZW50bHkgdGhlIGZ1bmN0aW9uIGJlbG93LCBhcmUKKyAqIHN1cHBvc2VkbHkgYWxzbyByZXRyb2FjdGl2ZWx5IGNsYWltZWQgYnkgdGhlIEludGVybmV0IFNvY2lldHkKKyAqIChhY2NvcmRpbmcgdG8gcmZjLWVkaXRvckByZmMtZWRpdG9yLm9yZyksIHdpdGggdGhlIGZvbGxvd2luZworICogY29weXJpZ2h0IG5vdGljZToKKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgICBUaGlzIGRvY3VtZW50IGFuZCB0cmFuc2xhdGlvbnMgb2YgaXQgbWF5IGJlIGNvcGllZCBhbmQgZnVybmlzaGVkCisgKiAgICB0byBvdGhlcnMsIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgY29tbWVudCBvbiBvciBvdGhlcndpc2UKKyAqICAgIGV4cGxhaW4gaXQgb3IgYXNzaXN0IGluIGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgcHJlcGFyZWQsCisgKiAgICBjb3BpZWQsIHB1Ymxpc2hlZCBhbmQgZGlzdHJpYnV0ZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhvdXQKKyAqICAgIHJlc3RyaWN0aW9uIG9mIGFueSBraW5kLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlIGluY2x1ZGVkIG9uIGFsbCBzdWNoIGNvcGllcyBhbmQKKyAqICAgIGRlcml2YXRpdmUgd29ya3MuICBIb3dldmVyLCB0aGlzIGRvY3VtZW50IGl0c2VsZiBtYXkgbm90IGJlCisgKiAgICBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdWNoIGFzIGJ5IHJlbW92aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yCisgKiAgICByZWZlcmVuY2VzIHRvIHRoZSBJbnRlcm5ldCBTb2NpZXR5IG9yIG90aGVyIEludGVybmV0CisgKiAgICBvcmdhbml6YXRpb25zLCBleGNlcHQgYXMgbmVlZGVkIGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nCisgKiAgICBJbnRlcm5ldCBzdGFuZGFyZHMgaW4gd2hpY2ggY2FzZSB0aGUgcHJvY2VkdXJlcyBmb3IgY29weXJpZ2h0cworICogICAgZGVmaW5lZCBpbiB0aGUgSW50ZXJuZXQgU3RhbmRhcmRzIHByb2Nlc3MgbXVzdCBiZSBmb2xsb3dlZCwgb3IKKyAqICAgIGFzIHJlcXVpcmVkIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2guCisgKgorICogICAgVGhlIGxpbWl0ZWQgcGVybWlzc2lvbnMgZ3JhbnRlZCBhYm92ZSBhcmUgcGVycGV0dWFsIGFuZCB3aWxsIG5vdCBiZQorICogICAgcmV2b2tlZCBieSB0aGUgSW50ZXJuZXQgU29jaWV0eSBvciBpdHMgc3VjY2Vzc29ycyBvciBhc3NpZ25zLgorICoKKyAqICAgIFRoaXMgZG9jdW1lbnQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHByb3ZpZGVkCisgKiAgICBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgSU5URVJORVQgU09DSUVUWSBBTkQgVEhFIElOVEVSTkVUCisgKiAgICBFTkdJTkVFUklORyBUQVNLIEZPUkNFIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorICogICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFCisgKiAgICBPRiBUSEUgSU5GT1JNQVRJT04gSEVSRUlOIFdJTEwgTk9UIElORlJJTkdFIEFOWSBSSUdIVFMgT1IgQU5ZCisgKiAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEKKyAqICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KK3N0YXRpYyB1MzIKK3VwZGF0ZV9jcmMzMiAodTMyIGNyYywgY29uc3Qgdm9pZCAqYnVmX2FyZywgc2l6ZV90IGxlbikKK3sKKyAgY29uc3QgY2hhciAqYnVmID0gYnVmX2FyZzsKKyAgc2l6ZV90IG47CisKKyAgZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKQorICAgIGNyYyA9IGNyYzMyX3RhYmxlWyhjcmMgXiBidWZbbl0pICYgMHhmZl0gXiAoY3JjID4+IDgpOworCisgIHJldHVybiBjcmM7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHUzMiBDUkM7CisgIGJ5dGUgYnVmWzRdOworfQorQ1JDX0NPTlRFWFQ7CisKKy8qIENSQzMyICovCisKK3N0YXRpYyB2b2lkCitjcmMzMl9pbml0ICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIENSQ19DT05URVhUICpjdHggPSAoQ1JDX0NPTlRFWFQgKikgY29udGV4dDsKKworICAodm9pZClmbGFnczsKKworICBjdHgtPkNSQyA9IDAgXiAweGZmZmZmZmZmTDsKK30KKworc3RhdGljIHZvaWQKK2NyYzMyX3dyaXRlICh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICppbmJ1Ziwgc2l6ZV90IGlubGVuKQoreworICBDUkNfQ09OVEVYVCAqY3R4ID0gKENSQ19DT05URVhUICopIGNvbnRleHQ7CisgIGlmICghaW5idWYpCisgICAgcmV0dXJuOworICBjdHgtPkNSQyA9IHVwZGF0ZV9jcmMzMiAoY3R4LT5DUkMsIGluYnVmLCBpbmxlbik7Cit9CisKK3N0YXRpYyBieXRlICoKK2NyYzMyX3JlYWQgKHZvaWQgKmNvbnRleHQpCit7CisgIENSQ19DT05URVhUICpjdHggPSAoQ1JDX0NPTlRFWFQgKikgY29udGV4dDsKKyAgcmV0dXJuIGN0eC0+YnVmOworfQorCitzdGF0aWMgdm9pZAorY3JjMzJfZmluYWwgKHZvaWQgKmNvbnRleHQpCit7CisgIENSQ19DT05URVhUICpjdHggPSAoQ1JDX0NPTlRFWFQgKikgY29udGV4dDsKKyAgY3R4LT5DUkMgXj0gMHhmZmZmZmZmZkw7CisgIGN0eC0+YnVmWzBdID0gKGN0eC0+Q1JDID4+IDI0KSAmIDB4RkY7CisgIGN0eC0+YnVmWzFdID0gKGN0eC0+Q1JDID4+IDE2KSAmIDB4RkY7CisgIGN0eC0+YnVmWzJdID0gKGN0eC0+Q1JDID4+ICA4KSAmIDB4RkY7CisgIGN0eC0+YnVmWzNdID0gKGN0eC0+Q1JDICAgICAgKSAmIDB4RkY7Cit9CisKKy8qIENSQzMyIGEnbGEgUkZDIDE1MTAgKi8KK3N0YXRpYyB2b2lkCitjcmMzMnJmYzE1MTBfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBDUkNfQ09OVEVYVCAqY3R4ID0gKENSQ19DT05URVhUICopIGNvbnRleHQ7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgY3R4LT5DUkMgPSAwOworfQorCitzdGF0aWMgdm9pZAorY3JjMzJyZmMxNTEwX2ZpbmFsICh2b2lkICpjb250ZXh0KQoreworICBDUkNfQ09OVEVYVCAqY3R4ID0gKENSQ19DT05URVhUICopIGNvbnRleHQ7CisgIGN0eC0+YnVmWzBdID0gKGN0eC0+Q1JDID4+IDI0KSAmIDB4RkY7CisgIGN0eC0+YnVmWzFdID0gKGN0eC0+Q1JDID4+IDE2KSAmIDB4RkY7CisgIGN0eC0+YnVmWzJdID0gKGN0eC0+Q1JDID4+ICA4KSAmIDB4RkY7CisgIGN0eC0+YnVmWzNdID0gKGN0eC0+Q1JDICAgICAgKSAmIDB4RkY7Cit9CisKKy8qIENSQzI0IGEnbGEgUkZDIDI0NDAgKi8KKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyAyNCByb3V0aW5lcyBhcmUgYWRhcHRlZCBmcm9tIFJGQyAyNDQwLCB3aGljaCBoYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZToKKyAqCisgKiAgIENvcHlyaWdodCAoQykgVGhlIEludGVybmV0IFNvY2lldHkgKDE5OTgpLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgZG9jdW1lbnQgYW5kIHRyYW5zbGF0aW9ucyBvZiBpdCBtYXkgYmUgY29waWVkIGFuZCBmdXJuaXNoZWQKKyAqICAgdG8gb3RoZXJzLCBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IGNvbW1lbnQgb24gb3Igb3RoZXJ3aXNlCisgKiAgIGV4cGxhaW4gaXQgb3IgYXNzaXN0IGluIGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgcHJlcGFyZWQsCisgKiAgIGNvcGllZCwgcHVibGlzaGVkIGFuZCBkaXN0cmlidXRlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dAorICogICByZXN0cmljdGlvbiBvZiBhbnkga2luZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZQorICogICBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlIGluY2x1ZGVkIG9uIGFsbCBzdWNoIGNvcGllcyBhbmQgZGVyaXZhdGl2ZQorICogICB3b3Jrcy4gIEhvd2V2ZXIsIHRoaXMgZG9jdW1lbnQgaXRzZWxmIG1heSBub3QgYmUgbW9kaWZpZWQgaW4gYW55CisgKiAgIHdheSwgc3VjaCBhcyBieSByZW1vdmluZyB0aGUgY29weXJpZ2h0IG5vdGljZSBvciByZWZlcmVuY2VzIHRvCisgKiAgIHRoZSBJbnRlcm5ldCBTb2NpZXR5IG9yIG90aGVyIEludGVybmV0IG9yZ2FuaXphdGlvbnMsIGV4Y2VwdCBhcworICogICBuZWVkZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGRldmVsb3BpbmcgSW50ZXJuZXQgc3RhbmRhcmRzIGluIHdoaWNoCisgKiAgIGNhc2UgdGhlIHByb2NlZHVyZXMgZm9yIGNvcHlyaWdodHMgZGVmaW5lZCBpbiB0aGUgSW50ZXJuZXQKKyAqICAgU3RhbmRhcmRzIHByb2Nlc3MgbXVzdCBiZSBmb2xsb3dlZCwgb3IgYXMgcmVxdWlyZWQgdG8gdHJhbnNsYXRlCisgKiAgIGl0IGludG8gbGFuZ3VhZ2VzIG90aGVyIHRoYW4gRW5nbGlzaC4KKyAqCisgKiAgIFRoZSBsaW1pdGVkIHBlcm1pc3Npb25zIGdyYW50ZWQgYWJvdmUgYXJlIHBlcnBldHVhbCBhbmQgd2lsbCBub3QgYmUKKyAqICAgcmV2b2tlZCBieSB0aGUgSW50ZXJuZXQgU29jaWV0eSBvciBpdHMgc3VjY2Vzc29ycyBvciBhc3NpZ25zLgorICoKKyAqICAgVGhpcyBkb2N1bWVudCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgcHJvdmlkZWQgb24KKyAqICAgYW4gIkFTIElTIiBiYXNpcyBhbmQgVEhFIElOVEVSTkVUIFNPQ0lFVFkgQU5EIFRIRSBJTlRFUk5FVAorICogICBFTkdJTkVFUklORyBUQVNLIEZPUkNFIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorICogICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBVU0UKKyAqICAgT0YgVEhFIElORk9STUFUSU9OIEhFUkVJTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUklHSFRTIE9SIEFOWQorICogICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogICBQVVJQT1NFLgorICovCisKKyNkZWZpbmUgQ1JDMjRfSU5JVCAweGI3MDRjZUwKKyNkZWZpbmUgQ1JDMjRfUE9MWSAweDE4NjRjZmJMCisKK3N0YXRpYyB2b2lkCitjcmMyNHJmYzI0NDBfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBDUkNfQ09OVEVYVCAqY3R4ID0gKENSQ19DT05URVhUICopIGNvbnRleHQ7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgY3R4LT5DUkMgPSBDUkMyNF9JTklUOworfQorCitzdGF0aWMgdm9pZAorY3JjMjRyZmMyNDQwX3dyaXRlICh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsIHNpemVfdCBpbmxlbikKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIGludCBpOworICBDUkNfQ09OVEVYVCAqY3R4ID0gKENSQ19DT05URVhUICopIGNvbnRleHQ7CisKKyAgaWYgKCFpbmJ1ZikKKyAgICByZXR1cm47CisKKyAgd2hpbGUgKGlubGVuLS0pIHsKKyAgICBjdHgtPkNSQyBePSAoKmluYnVmKyspIDw8IDE2OworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgIGN0eC0+Q1JDIDw8PSAxOworICAgICAgaWYgKGN0eC0+Q1JDICYgMHgxMDAwMDAwKQorCWN0eC0+Q1JDIF49IENSQzI0X1BPTFk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitjcmMyNHJmYzI0NDBfZmluYWwgKHZvaWQgKmNvbnRleHQpCit7CisgIENSQ19DT05URVhUICpjdHggPSAoQ1JDX0NPTlRFWFQgKikgY29udGV4dDsKKyAgY3R4LT5idWZbMF0gPSAoY3R4LT5DUkMgPj4gMTYpICYgMHhGRjsKKyAgY3R4LT5idWZbMV0gPSAoY3R4LT5DUkMgPj4gIDgpICYgMHhGRjsKKyAgY3R4LT5idWZbMl0gPSAoY3R4LT5DUkMgICAgICApICYgMHhGRjsKK30KKworLyogV2UgYWxsb3cgdGhlIENSQyBhbGdvcml0aG1zIGV2ZW4gaW4gRklQUyBtb2RlIGJlY2F1c2UgdGhleSBhcmUKKyAgIGFjdHVhbGx5IG5vIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcy4gICovCisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyID0KKyAgeworICAgIEdDUllfTURfQ1JDMzIsIHswLCAxfSwKKyAgICAiQ1JDMzIiLCBOVUxMLCAwLCBOVUxMLCA0LAorICAgIGNyYzMyX2luaXQsIGNyYzMyX3dyaXRlLCBjcmMzMl9maW5hbCwgY3JjMzJfcmVhZCwKKyAgICBzaXplb2YgKENSQ19DT05URVhUKQorICB9OworCitnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19jcmMzMl9yZmMxNTEwID0KKyAgeworICAgIEdDUllfTURfQ1JDMzJfUkZDMTUxMCwgezAsIDF9LAorICAgICJDUkMzMlJGQzE1MTAiLCBOVUxMLCAwLCBOVUxMLCA0LAorICAgIGNyYzMycmZjMTUxMF9pbml0LCBjcmMzMl93cml0ZSwKKyAgICBjcmMzMnJmYzE1MTBfZmluYWwsIGNyYzMyX3JlYWQsCisgICAgc2l6ZW9mIChDUkNfQ09OVEVYVCkKKyAgfTsKKworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfY3JjMjRfcmZjMjQ0MCA9CisgIHsKKyAgICBHQ1JZX01EX0NSQzI0X1JGQzI0NDAsIHswLCAxfSwKKyAgICAiQ1JDMjRSRkMyNDQwIiwgTlVMTCwgMCwgTlVMTCwgMywKKyAgICBjcmMyNHJmYzI0NDBfaW5pdCwgY3JjMjRyZmMyNDQwX3dyaXRlLAorICAgIGNyYzI0cmZjMjQ0MF9maW5hbCwgY3JjMzJfcmVhZCwKKyAgICBzaXplb2YgKENSQ19DT05URVhUKQorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2Rlcy5jIGIvY2lwaGVyL2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZGVzLmMKQEAgLTAsMCArMSwxMTk1IEBACisvKiBkZXMuYyAtIERFUyBhbmQgVHJpcGxlLURFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gQWxnb3JpdGhtCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMsCisgKiAgICAgICAgICAgICAgIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0cmlwbGUgZW5jcnlwdGlvbiwgc2VlOgorICogICBCcnVjZSBTY2huZWllcjogQXBwbGllZCBDcnlwdG9ncmFwaHkuIFNlY29uZCBFZGl0aW9uLgorICogICBKb2huIFdpbGV5ICYgU29ucywgMTk5Ni4gSVNCTiAwLTQ3MS0xMjg0NS03LiBQYWdlcyAzNTggZmYuCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGFjY29yZGluZyB0byB0aGUgZGVmaW5pdGlvbiBvZiBERVMgaW4gRklQUworICogUFVCIDQ2LTIgZnJvbSBEZWNlbWJlciAxOTkzLgorICovCisKKworLyoKKyAqIFdyaXR0ZW4gYnkgTWljaGFlbCBSb3RoIDxtcm90aEBuZXNzaWUuZGU+LCBTZXB0ZW1iZXIgMTk5OAorICovCisKKworLyoKKyAqICBVIFMgQSBHIEUKKyAqID09PT09PT09PT09CisgKgorICogRm9yIERFUyBvciBUcmlwbGUtREVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB5b3UgbXVzdCBpbml0aWFsaXplIGEgcHJvcGVyCisgKiBlbmNyeXB0aW9uIGNvbnRleHQgd2l0aCBhIGtleS4KKyAqCisgKiBBIERFUyBrZXkgaXMgNjRiaXQgd2lkZSBidXQgb25seSA1NmJpdHMgb2YgdGhlIGtleSBhcmUgdXNlZC4gVGhlIHJlbWFpbmluZworICogYml0cyBhcmUgcGFyaXR5IGJpdHMgYW5kIHRoZXkgd2lsbCBfbm90XyBjaGVja2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGJ1dAorICogc2ltcGx5IGlnbm9yZWQuCisgKgorICogRm9yIFRyaXBsZS1ERVMgeW91IGNvdWxkIHVzZSBlaXRoZXIgdHdvIDY0Yml0IGtleXMgb3IgdGhyZWUgNjRiaXQga2V5cy4KKyAqIFRoZSBwYXJpdHkgYml0cyB3aWxsIF9ub3RfIGNoZWNrZWQsIHRvby4KKyAqCisgKiBBZnRlciBpbml0aWFsaXppbmcgYSBjb250ZXh0IHdpdGggYSBrZXkgeW91IGNvdWxkIHVzZSB0aGlzIGNvbnRleHQgdG8KKyAqIGVuY3J5cHQgb3IgZGVjcnlwdCBkYXRhIGluIDY0Yml0IGJsb2NrcyBpbiBFbGVjdHJvbmljIENvZGVib29rIE1vZGUuCisgKgorICogKEluIHRoZSBleGFtcGxlcyBiZWxvdyB0aGUgc2xhc2hlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgb2YgY29tbWVudHMKKyAqIGFyZSBvbWl0ZWQuKQorICoKKyAqIERFUyBFeGFtcGxlCisgKiAtLS0tLS0tLS0tLQorICogICAgIHVuc2lnbmVkIGNoYXIga2V5WzhdOworICogICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworICogICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKyAqICAgICB1bnNpZ25lZCBjaGFyIHJlY292ZXJkWzhdOworICogICAgIGRlc19jdHggY29udGV4dDsKKyAqCisgKiAgICAgKiBGaWxsICdrZXknIGFuZCAncGxhaW50ZXh0JyB3aXRoIHNvbWUgZGF0YSAqCisgKiAgICAgLi4uLgorICoKKyAqICAgICAqIFNldCB1cCB0aGUgREVTIGVuY3J5cHRpb24gY29udGV4dCAqCisgKiAgICAgZGVzX3NldGtleShjb250ZXh0LCBrZXkpOworICoKKyAqICAgICAqIEVuY3J5cHQgdGhlIHBsYWludGV4dCAqCisgKiAgICAgZGVzX2VjYl9lbmNyeXB0KGNvbnRleHQsIHBsYWludGV4dCwgY2lwaGVydGV4dCk7CisgKgorICogICAgICogVG8gcmVjb3ZlciB0aGUgb3JnaW5hbCBwbGFpbnRleHQgZnJvbSBjaXBoZXJ0ZXh0IHVzZTogKgorICogICAgIGRlc19lY2JfZGVjcnlwdChjb250ZXh0LCBjaXBoZXJ0ZXh0LCByZWNvdmVyZCk7CisgKgorICoKKyAqIFRyaXBsZS1ERVMgRXhhbXBsZQorICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgdW5zaWduZWQgY2hhciBrZXkxWzhdOworICogICAgIHVuc2lnbmVkIGNoYXIga2V5Mls4XTsKKyAqICAgICB1bnNpZ25lZCBjaGFyIGtleTNbOF07CisgKiAgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisgKiAgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworICogICAgIHVuc2lnbmVkIGNoYXIgcmVjb3ZlcmRbOF07CisgKiAgICAgdHJpcGxlZGVzX2N0eCBjb250ZXh0OworICoKKyAqICAgICAqIElmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0d28gNjRiaXQga2V5cywgZmlsbCAna2V5MScgYW5kJ2tleTInCisgKgkgdGhlbiBzZXR1cCB0aGUgZW5jcnlwdGlvbiBjb250ZXh0OiAqCisgKiAgICAgdHJpcGxlZGVzX3NldDJrZXlzKGNvbnRleHQsIGtleTEsIGtleTIpOworICoKKyAqICAgICAqIFRvIHVzZSB0aHJlZSA2NGJpdCBrZXlzIHdpdGggVHJpcGxlLURFUyB1c2U6ICoKKyAqICAgICB0cmlwbGVkZXNfc2V0M2tleXMoY29udGV4dCwga2V5MSwga2V5Miwga2V5Myk7CisgKgorICogICAgICogRW5jcnlwdGluZyBwbGFpbnRleHQgd2l0aCBUcmlwbGUtREVTICoKKyAqICAgICB0cmlwbGVkZXNfZWNiX2VuY3J5cHQoY29udGV4dCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0KTsKKyAqCisgKiAgICAgKiBEZWNyeXB0aW5nIGNpcGhlcnRleHQgdG8gcmVjb3ZlciB0aGUgcGxhaW50ZXh0IHdpdGggVHJpcGxlLURFUyAqCisgKiAgICAgdHJpcGxlZGVzX2VjYl9kZWNyeXB0KGNvbnRleHQsIGNpcGhlcnRleHQsIHJlY292ZXJkKTsKKyAqCisgKgorICogU2VsZnRlc3QKKyAqIC0tLS0tLS0tCisgKiAgICAgY2hhciAqZXJyb3JfbXNnOworICoKKyAqICAgICAqIFRvIHBlcmZvcm0gYSBzZWxmdGVzdCBvZiB0aGlzIERFUy9UcmlwbGUtREVTIGltcGxlbWVudGF0aW9uIHVzZSB0aGUKKyAqCSBmdW5jdGlvbiBzZWxmdGVzdCgpLiBJdCB3aWxsIHJldHVybiBhbiBlcnJvciBzdHJpbmcgaWYgdGhlcmUgYXJlCisgKgkgc29tZSBwcm9ibGVtcyB3aXRoIHRoaXMgbGlicmFyeS4gKgorICoKKyAqICAgICBpZiAoIChlcnJvcl9tc2cgPSBzZWxmdGVzdCgpKSApCisgKiAgICAgeworICoJICAgZnByaW50ZihzdGRlcnIsICJBbiBlcnJvciBpbiB0aGUgREVTL1RyaXBsZS1ERVMgaW1wbGVtZW50YXRpb24gb2NjdXJyZWQ6ICVzXG4iLCBlcnJvcl9tc2cpOworICoJICAgYWJvcnQoKTsKKyAqICAgICB9CisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4JICAgICAgIC8qIG1lbWNweSwgbWVtY21wICovCisjaW5jbHVkZSAidHlwZXMuaCIgICAgICAgICAgICAgLyogZm9yIGJ5dGUgYW5kIHUzMiB0eXBlZGVmcyAqLworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVfTElCUkFSWV9fKQorI2RlZmluZSB3b3JraW5nX21lbWNtcCBtZW1jbXAKKyNlbHNlCisvKgorICogQWNjb3JkaW5nIHRvIHRoZSBTdW5PUyBtYW4gcGFnZSwgbWVtY21wIHJldHVybnMgaW5kZXRlcm1pbmF0ZSBzaWduCisgKiBkZXBlbmRpbmcgb24gd2hldGhlciBjaGFyYWN0ZXJzIGFyZSBzaWduZWQgb3Igbm90LgorICovCitzdGF0aWMgaW50Cit3b3JraW5nX21lbWNtcCggY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IG4gKQoreworICAgIGZvciggOyBuOyBuLS0sIGErKywgYisrICkKKwlpZiggKmEgIT0gKmIgKQorCSAgICByZXR1cm4gKGludCkoKihieXRlKilhKSAtIChpbnQpKCooYnl0ZSopYik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEVuY3J5cHRpb24vRGVjcnlwdGlvbiBjb250ZXh0IG9mIERFUworICovCit0eXBlZGVmIHN0cnVjdCBfZGVzX2N0eAorICB7CisgICAgdTMyIGVuY3J5cHRfc3Via2V5c1szMl07CisgICAgdTMyIGRlY3J5cHRfc3Via2V5c1szMl07CisgIH0KK2Rlc19jdHhbMV07CisKKy8qCisgKiBFbmNyeXB0aW9uL0RlY3J5cHRpb24gY29udGV4dCBvZiBUcmlwbGUtREVTCisgKi8KK3R5cGVkZWYgc3RydWN0IF90cmlwbGVkZXNfY3R4CisgIHsKKyAgICB1MzIgZW5jcnlwdF9zdWJrZXlzWzk2XTsKKyAgICB1MzIgZGVjcnlwdF9zdWJrZXlzWzk2XTsKKyAgICBzdHJ1Y3QgeworICAgICAgaW50IG5vX3dlYWtfa2V5OworICAgIH0gZmxhZ3M7CisgIH0KK3RyaXBsZWRlc19jdHhbMV07CisKK3N0YXRpYyB2b2lkIGRlc19rZXlfc2NoZWR1bGUgKGNvbnN0IGJ5dGUgKiwgdTMyICopOworc3RhdGljIGludCBkZXNfc2V0a2V5IChzdHJ1Y3QgX2Rlc19jdHggKiwgY29uc3QgYnl0ZSAqKTsKK3N0YXRpYyBpbnQgZGVzX2VjYl9jcnlwdCAoc3RydWN0IF9kZXNfY3R4ICosIGNvbnN0IGJ5dGUgKiwgYnl0ZSAqLCBpbnQpOworc3RhdGljIGludCB0cmlwbGVkZXNfc2V0MmtleXMgKHN0cnVjdCBfdHJpcGxlZGVzX2N0eCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKiwgY29uc3QgYnl0ZSAqKTsKK3N0YXRpYyBpbnQgdHJpcGxlZGVzX3NldDNrZXlzIChzdHJ1Y3QgX3RyaXBsZWRlc19jdHggKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlICosIGNvbnN0IGJ5dGUgKiwgY29uc3QgYnl0ZSAqKTsKK3N0YXRpYyBpbnQgdHJpcGxlZGVzX2VjYl9jcnlwdCAoc3RydWN0IF90cmlwbGVkZXNfY3R4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKiwgYnl0ZSAqLCBpbnQpOworc3RhdGljIGludCBpc193ZWFrX2tleSAoIGNvbnN0IGJ5dGUgKmtleSApOworc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0ICh2b2lkKTsKKworc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCisKKworLyoKKyAqIFRoZSBzLWJveCB2YWx1ZXMgYXJlIHBlcm11dGVkIGFjY29yZGluZyB0byB0aGUgJ3ByaW1pdGl2ZSBmdW5jdGlvbiBQJworICogYW5kIGFyZSByb3RhdGVkIG9uZSBiaXQgdG8gdGhlIGxlZnQuCisgKi8KK3N0YXRpYyB1MzIgc2JveDFbNjRdID0KK3sKKyAgMHgwMTAxMDQwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMTAxMDQwNCwgMHgwMTAxMDAwNCwgMHgwMDAxMDQwNCwgMHgwMDAwMDAwNCwgMHgwMDAxMDAwMCwKKyAgMHgwMDAwMDQwMCwgMHgwMTAxMDQwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDQwMCwgMHgwMTAwMDQwNCwgMHgwMTAxMDAwNCwgMHgwMTAwMDAwMCwgMHgwMDAwMDAwNCwKKyAgMHgwMDAwMDQwNCwgMHgwMTAwMDQwMCwgMHgwMTAwMDQwMCwgMHgwMDAxMDQwMCwgMHgwMDAxMDQwMCwgMHgwMTAxMDAwMCwgMHgwMTAxMDAwMCwgMHgwMTAwMDQwNCwKKyAgMHgwMDAxMDAwNCwgMHgwMTAwMDAwNCwgMHgwMTAwMDAwNCwgMHgwMDAxMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDQwNCwgMHgwMDAxMDQwNCwgMHgwMTAwMDAwMCwKKyAgMHgwMDAxMDAwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDAwNCwgMHgwMTAxMDAwMCwgMHgwMTAxMDQwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMDAwMDQwMCwKKyAgMHgwMTAxMDAwNCwgMHgwMDAxMDAwMCwgMHgwMDAxMDQwMCwgMHgwMTAwMDAwNCwgMHgwMDAwMDQwMCwgMHgwMDAwMDAwNCwgMHgwMTAwMDQwNCwgMHgwMDAxMDQwNCwKKyAgMHgwMTAxMDQwNCwgMHgwMDAxMDAwNCwgMHgwMTAxMDAwMCwgMHgwMTAwMDQwNCwgMHgwMTAwMDAwNCwgMHgwMDAwMDQwNCwgMHgwMDAxMDQwNCwgMHgwMTAxMDQwMCwKKyAgMHgwMDAwMDQwNCwgMHgwMTAwMDQwMCwgMHgwMTAwMDQwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwNCwgMHgwMDAxMDQwMCwgMHgwMDAwMDAwMCwgMHgwMTAxMDAwNAorfTsKKworc3RhdGljIHUzMiBzYm94Mls2NF0gPQoreworICAweDgwMTA4MDIwLCAweDgwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMTA4MDIwLCAweDAwMTAwMDAwLCAweDAwMDAwMDIwLCAweDgwMTAwMDIwLCAweDgwMDA4MDIwLAorICAweDgwMDAwMDIwLCAweDgwMTA4MDIwLCAweDgwMTA4MDAwLCAweDgwMDAwMDAwLCAweDgwMDA4MDAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDIwLCAweDgwMTAwMDIwLAorICAweDAwMTA4MDAwLCAweDAwMTAwMDIwLCAweDgwMDA4MDIwLCAweDAwMDAwMDAwLCAweDgwMDAwMDAwLCAweDAwMDA4MDAwLCAweDAwMTA4MDIwLCAweDgwMTAwMDAwLAorICAweDAwMTAwMDIwLCAweDgwMDAwMDIwLCAweDAwMDAwMDAwLCAweDAwMTA4MDAwLCAweDAwMDA4MDIwLCAweDgwMTA4MDAwLCAweDgwMTAwMDAwLCAweDAwMDA4MDIwLAorICAweDAwMDAwMDAwLCAweDAwMTA4MDIwLCAweDgwMTAwMDIwLCAweDAwMTAwMDAwLCAweDgwMDA4MDIwLCAweDgwMTAwMDAwLCAweDgwMTA4MDAwLCAweDAwMDA4MDAwLAorICAweDgwMTAwMDAwLCAweDgwMDA4MDAwLCAweDAwMDAwMDIwLCAweDgwMTA4MDIwLCAweDAwMTA4MDIwLCAweDAwMDAwMDIwLCAweDAwMDA4MDAwLCAweDgwMDAwMDAwLAorICAweDAwMDA4MDIwLCAweDgwMTA4MDAwLCAweDAwMTAwMDAwLCAweDgwMDAwMDIwLCAweDAwMTAwMDIwLCAweDgwMDA4MDIwLCAweDgwMDAwMDIwLCAweDAwMTAwMDIwLAorICAweDAwMTA4MDAwLCAweDAwMDAwMDAwLCAweDgwMDA4MDAwLCAweDAwMDA4MDIwLCAweDgwMDAwMDAwLCAweDgwMTAwMDIwLCAweDgwMTA4MDIwLCAweDAwMTA4MDAwCit9OworCitzdGF0aWMgdTMyIHNib3gzWzY0XSA9Cit7CisgIDB4MDAwMDAyMDgsIDB4MDgwMjAyMDAsIDB4MDAwMDAwMDAsIDB4MDgwMjAwMDgsIDB4MDgwMDAyMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAyMDgsIDB4MDgwMDAyMDAsCisgIDB4MDAwMjAwMDgsIDB4MDgwMDAwMDgsIDB4MDgwMDAwMDgsIDB4MDAwMjAwMDAsIDB4MDgwMjAyMDgsIDB4MDAwMjAwMDgsIDB4MDgwMjAwMDAsIDB4MDAwMDAyMDgsCisgIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MDgwMjAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMjAyMDAsIDB4MDgwMjAwMDAsIDB4MDgwMjAwMDgsIDB4MDAwMjAyMDgsCisgIDB4MDgwMDAyMDgsIDB4MDAwMjAyMDAsIDB4MDAwMjAwMDAsIDB4MDgwMDAyMDgsIDB4MDAwMDAwMDgsIDB4MDgwMjAyMDgsIDB4MDAwMDAyMDAsIDB4MDgwMDAwMDAsCisgIDB4MDgwMjAyMDAsIDB4MDgwMDAwMDAsIDB4MDAwMjAwMDgsIDB4MDAwMDAyMDgsIDB4MDAwMjAwMDAsIDB4MDgwMjAyMDAsIDB4MDgwMDAyMDAsIDB4MDAwMDAwMDAsCisgIDB4MDAwMDAyMDAsIDB4MDAwMjAwMDgsIDB4MDgwMjAyMDgsIDB4MDgwMDAyMDAsIDB4MDgwMDAwMDgsIDB4MDAwMDAyMDAsIDB4MDAwMDAwMDAsIDB4MDgwMjAwMDgsCisgIDB4MDgwMDAyMDgsIDB4MDAwMjAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMjAyMDgsIDB4MDAwMDAwMDgsIDB4MDAwMjAyMDgsIDB4MDAwMjAyMDAsIDB4MDgwMDAwMDgsCisgIDB4MDgwMjAwMDAsIDB4MDgwMDAyMDgsIDB4MDAwMDAyMDgsIDB4MDgwMjAwMDAsIDB4MDAwMjAyMDgsIDB4MDAwMDAwMDgsIDB4MDgwMjAwMDgsIDB4MDAwMjAyMDAKK307CisKK3N0YXRpYyB1MzIgc2JveDRbNjRdID0KK3sKKyAgMHgwMDgwMjAwMSwgMHgwMDAwMjA4MSwgMHgwMDAwMjA4MSwgMHgwMDAwMDA4MCwgMHgwMDgwMjA4MCwgMHgwMDgwMDA4MSwgMHgwMDgwMDAwMSwgMHgwMDAwMjAwMSwKKyAgMHgwMDAwMDAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMCwgMHgwMDgwMDA4MCwgMHgwMDgwMDAwMSwKKyAgMHgwMDAwMDAwMSwgMHgwMDAwMjAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMjAwMSwgMHgwMDAwMDA4MCwgMHgwMDgwMDAwMCwgMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwKKyAgMHgwMDgwMDA4MSwgMHgwMDAwMDAwMSwgMHgwMDAwMjA4MCwgMHgwMDgwMDA4MCwgMHgwMDAwMjAwMCwgMHgwMDgwMjA4MCwgMHgwMDgwMjA4MSwgMHgwMDAwMDA4MSwKKyAgMHgwMDgwMDA4MCwgMHgwMDgwMDAwMSwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDgwMjAwMCwKKyAgMHgwMDAwMjA4MCwgMHgwMDgwMDA4MCwgMHgwMDgwMDA4MSwgMHgwMDAwMDAwMSwgMHgwMDgwMjAwMSwgMHgwMDAwMjA4MSwgMHgwMDAwMjA4MSwgMHgwMDAwMDA4MCwKKyAgMHgwMDgwMjA4MSwgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMSwgMHgwMDAwMjAwMCwgMHgwMDgwMDAwMSwgMHgwMDAwMjAwMSwgMHgwMDgwMjA4MCwgMHgwMDgwMDA4MSwKKyAgMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMjAwMSwgMHgwMDAwMDA4MCwgMHgwMDgwMDAwMCwgMHgwMDAwMjAwMCwgMHgwMDgwMjA4MAorfTsKKworc3RhdGljIHUzMiBzYm94NVs2NF0gPQoreworICAweDAwMDAwMTAwLCAweDAyMDgwMTAwLCAweDAyMDgwMDAwLCAweDQyMDAwMTAwLCAweDAwMDgwMDAwLCAweDAwMDAwMTAwLCAweDQwMDAwMDAwLCAweDAyMDgwMDAwLAorICAweDQwMDgwMTAwLCAweDAwMDgwMDAwLCAweDAyMDAwMTAwLCAweDQwMDgwMTAwLCAweDQyMDAwMTAwLCAweDQyMDgwMDAwLCAweDAwMDgwMTAwLCAweDQwMDAwMDAwLAorICAweDAyMDAwMDAwLCAweDQwMDgwMDAwLCAweDQwMDgwMDAwLCAweDAwMDAwMDAwLCAweDQwMDAwMTAwLCAweDQyMDgwMTAwLCAweDQyMDgwMTAwLCAweDAyMDAwMTAwLAorICAweDQyMDgwMDAwLCAweDQwMDAwMTAwLCAweDAwMDAwMDAwLCAweDQyMDAwMDAwLCAweDAyMDgwMTAwLCAweDAyMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMDgwMTAwLAorICAweDAwMDgwMDAwLCAweDQyMDAwMTAwLCAweDAwMDAwMTAwLCAweDAyMDAwMDAwLCAweDQwMDAwMDAwLCAweDAyMDgwMDAwLCAweDQyMDAwMTAwLCAweDQwMDgwMTAwLAorICAweDAyMDAwMTAwLCAweDQwMDAwMDAwLCAweDQyMDgwMDAwLCAweDAyMDgwMTAwLCAweDQwMDgwMTAwLCAweDAwMDAwMTAwLCAweDAyMDAwMDAwLCAweDQyMDgwMDAwLAorICAweDQyMDgwMTAwLCAweDAwMDgwMTAwLCAweDQyMDAwMDAwLCAweDQyMDgwMTAwLCAweDAyMDgwMDAwLCAweDAwMDAwMDAwLCAweDQwMDgwMDAwLCAweDQyMDAwMDAwLAorICAweDAwMDgwMTAwLCAweDAyMDAwMTAwLCAweDQwMDAwMTAwLCAweDAwMDgwMDAwLCAweDAwMDAwMDAwLCAweDQwMDgwMDAwLCAweDAyMDgwMTAwLCAweDQwMDAwMTAwCit9OworCitzdGF0aWMgdTMyIHNib3g2WzY0XSA9Cit7CisgIDB4MjAwMDAwMTAsIDB4MjA0MDAwMDAsIDB4MDAwMDQwMDAsIDB4MjA0MDQwMTAsIDB4MjA0MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA0MDQwMTAsIDB4MDA0MDAwMDAsCisgIDB4MjAwMDQwMDAsIDB4MDA0MDQwMTAsIDB4MDA0MDAwMDAsIDB4MjAwMDAwMTAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4MDAwMDQwMTAsCisgIDB4MDAwMDAwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAsIDB4MDAwMDQwMDAsIDB4MDA0MDQwMDAsIDB4MjAwMDQwMTAsIDB4MDAwMDAwMTAsIDB4MjA0MDAwMTAsCisgIDB4MjA0MDAwMTAsIDB4MDAwMDAwMDAsIDB4MDA0MDQwMTAsIDB4MjA0MDQwMDAsIDB4MDAwMDQwMTAsIDB4MDA0MDQwMDAsIDB4MjA0MDQwMDAsIDB4MjAwMDAwMDAsCisgIDB4MjAwMDQwMDAsIDB4MDAwMDAwMTAsIDB4MjA0MDAwMTAsIDB4MDA0MDQwMDAsIDB4MjA0MDQwMTAsIDB4MDA0MDAwMDAsIDB4MDAwMDQwMTAsIDB4MjAwMDAwMTAsCisgIDB4MDA0MDAwMDAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4MDAwMDQwMTAsIDB4MjAwMDAwMTAsIDB4MjA0MDQwMTAsIDB4MDA0MDQwMDAsIDB4MjA0MDAwMDAsCisgIDB4MDA0MDQwMTAsIDB4MjA0MDQwMDAsIDB4MDAwMDAwMDAsIDB4MjA0MDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDQwMDAsIDB4MjA0MDAwMDAsIDB4MDA0MDQwMTAsCisgIDB4MDAwMDQwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAsIDB4MDAwMDAwMDAsIDB4MjA0MDQwMDAsIDB4MjAwMDAwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAKK307CisKK3N0YXRpYyB1MzIgc2JveDdbNjRdID0KK3sKKyAgMHgwMDIwMDAwMCwgMHgwNDIwMDAwMiwgMHgwNDAwMDgwMiwgMHgwMDAwMDAwMCwgMHgwMDAwMDgwMCwgMHgwNDAwMDgwMiwgMHgwMDIwMDgwMiwgMHgwNDIwMDgwMCwKKyAgMHgwNDIwMDgwMiwgMHgwMDIwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMiwgMHgwMDAwMDgwMiwKKyAgMHgwNDAwMDgwMCwgMHgwMDIwMDgwMiwgMHgwMDIwMDAwMiwgMHgwNDAwMDgwMCwgMHgwNDAwMDAwMiwgMHgwNDIwMDAwMCwgMHgwNDIwMDgwMCwgMHgwMDIwMDAwMiwKKyAgMHgwNDIwMDAwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMiwgMHgwNDIwMDgwMiwgMHgwMDIwMDgwMCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwMCwgMHgwMDIwMDgwMCwKKyAgMHgwNDAwMDAwMCwgMHgwMDIwMDgwMCwgMHgwMDIwMDAwMCwgMHgwNDAwMDgwMiwgMHgwNDAwMDgwMiwgMHgwNDIwMDAwMiwgMHgwNDIwMDAwMiwgMHgwMDAwMDAwMiwKKyAgMHgwMDIwMDAwMiwgMHgwNDAwMDAwMCwgMHgwNDAwMDgwMCwgMHgwMDIwMDAwMCwgMHgwNDIwMDgwMCwgMHgwMDAwMDgwMiwgMHgwMDIwMDgwMiwgMHgwNDIwMDgwMCwKKyAgMHgwMDAwMDgwMiwgMHgwNDAwMDAwMiwgMHgwNDIwMDgwMiwgMHgwNDIwMDAwMCwgMHgwMDIwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDIwMDgwMiwKKyAgMHgwMDAwMDAwMCwgMHgwMDIwMDgwMiwgMHgwNDIwMDAwMCwgMHgwMDAwMDgwMCwgMHgwNDAwMDAwMiwgMHgwNDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDIwMDAwMgorfTsKKworc3RhdGljIHUzMiBzYm94OFs2NF0gPQoreworICAweDEwMDAxMDQwLCAweDAwMDAxMDAwLCAweDAwMDQwMDAwLCAweDEwMDQxMDQwLCAweDEwMDAwMDAwLCAweDEwMDAxMDQwLCAweDAwMDAwMDQwLCAweDEwMDAwMDAwLAorICAweDAwMDQwMDQwLCAweDEwMDQwMDAwLCAweDEwMDQxMDQwLCAweDAwMDQxMDAwLCAweDEwMDQxMDAwLCAweDAwMDQxMDQwLCAweDAwMDAxMDAwLCAweDAwMDAwMDQwLAorICAweDEwMDQwMDAwLCAweDEwMDAwMDQwLCAweDEwMDAxMDAwLCAweDAwMDAxMDQwLCAweDAwMDQxMDAwLCAweDAwMDQwMDQwLCAweDEwMDQwMDQwLCAweDEwMDQxMDAwLAorICAweDAwMDAxMDQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwMDQwMDQwLCAweDEwMDAwMDQwLCAweDEwMDAxMDAwLCAweDAwMDQxMDQwLCAweDAwMDQwMDAwLAorICAweDAwMDQxMDQwLCAweDAwMDQwMDAwLCAweDEwMDQxMDAwLCAweDAwMDAxMDAwLCAweDAwMDAwMDQwLCAweDEwMDQwMDQwLCAweDAwMDAxMDAwLCAweDAwMDQxMDQwLAorICAweDEwMDAxMDAwLCAweDAwMDAwMDQwLCAweDEwMDAwMDQwLCAweDEwMDQwMDAwLCAweDEwMDQwMDQwLCAweDEwMDAwMDAwLCAweDAwMDQwMDAwLCAweDEwMDAxMDQwLAorICAweDAwMDAwMDAwLCAweDEwMDQxMDQwLCAweDAwMDQwMDQwLCAweDEwMDAwMDQwLCAweDEwMDQwMDAwLCAweDEwMDAxMDAwLCAweDEwMDAxMDQwLCAweDAwMDAwMDAwLAorICAweDEwMDQxMDQwLCAweDAwMDQxMDAwLCAweDAwMDQxMDAwLCAweDAwMDAxMDQwLCAweDAwMDAxMDQwLCAweDAwMDQwMDQwLCAweDEwMDAwMDAwLCAweDEwMDQxMDAwCit9OworCisKKy8qCisgKiBUaGVzZSB0d28gdGFibGVzIGFyZSBwYXJ0IG9mIHRoZSAncGVybXV0ZWQgY2hvaWNlIDEnIGZ1bmN0aW9uLgorICogSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBzZXZlcmFsIHNwZWVkIGltcHJvdmVtZW50cyBhcmUgZG9uZS4KKyAqLworc3RhdGljIHUzMiBsZWZ0a2V5X3N3YXBbMTZdID0KK3sKKyAgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDEwMCwgMHgwMDAwMDEwMSwKKyAgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDAxMDEwMCwgMHgwMDAxMDEwMSwKKyAgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMSwgMHgwMTAwMDEwMCwgMHgwMTAwMDEwMSwKKyAgMHgwMTAxMDAwMCwgMHgwMTAxMDAwMSwgMHgwMTAxMDEwMCwgMHgwMTAxMDEwMQorfTsKKworc3RhdGljIHUzMiByaWdodGtleV9zd2FwWzE2XSA9Cit7CisgIDB4MDAwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDAwMTAwMDAsIDB4MDEwMTAwMDAsCisgIDB4MDAwMDAxMDAsIDB4MDEwMDAxMDAsIDB4MDAwMTAxMDAsIDB4MDEwMTAxMDAsCisgIDB4MDAwMDAwMDEsIDB4MDEwMDAwMDEsIDB4MDAwMTAwMDEsIDB4MDEwMTAwMDEsCisgIDB4MDAwMDAxMDEsIDB4MDEwMDAxMDEsIDB4MDAwMTAxMDEsIDB4MDEwMTAxMDEsCit9OworCisKKworLyoKKyAqIE51bWJlcnMgb2YgbGVmdCBzaGlmdHMgcGVyIHJvdW5kIGZvciBlbmNyeXB0aW9uIHN1YmtleXMuCisgKiBUbyBjYWxjdWxhdGUgdGhlIGRlY3J5cHRpb24gc3Via2V5cyB3ZSBqdXN0IHJldmVyc2UgdGhlCisgKiBvcmRlcmluZyBvZiB0aGUgY2FsY3VsYXRlZCBlbmNyeXB0aW9uIHN1YmtleXMuIFNvIHRoZWlyCisgKiBpcyBubyBuZWVkIGZvciBhIGRlY3J5cHRpb24gcm90YXRlIHRhYi4KKyAqLworc3RhdGljIGJ5dGUgZW5jcnlwdF9yb3RhdGVfdGFiWzE2XSA9Cit7CisgIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDEKK307CisKKworCisvKgorICogVGFibGUgd2l0aCB3ZWFrIERFUyBrZXlzIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuCisgKiBJbiBERVMgdGhlaXIgYXJlIDY0IGtub3duIGtleXMgd2hpY2ggYXJlIHdlYWsuIFRoZXkgYXJlIHdlYWsKKyAqIGJlY2F1c2UgdGhleSBwcm9kdWNlIG9ubHkgb25lLCB0d28gb3IgZm91ciBkaWZmZXJlbnQKKyAqIHN1YmtleXMgaW4gdGhlIHN1YmtleSBzY2hlZHVsaW5nIHByb2Nlc3MuCisgKiBUaGUga2V5cyBpbiB0aGlzIHRhYmxlIGhhdmUgYWxsIHRoZWlyIHBhcml0eSBiaXRzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyBieXRlIHdlYWtfa2V5c1s2NF1bOF0gPQoreworICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwgLyp3Ki8KKyAgeyAweDAwLCAweDAwLCAweDFlLCAweDFlLCAweDAwLCAweDAwLCAweDBlLCAweDBlIH0sCisgIHsgMHgwMCwgMHgwMCwgMHhlMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCB9LAorICB7IDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmUsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmUgfSwKKyAgeyAweDAwLCAweDFlLCAweDAwLCAweDFlLCAweDAwLCAweDBlLCAweDAwLCAweDBlIH0sIC8qc3cqLworICB7IDB4MDAsIDB4MWUsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MGUsIDB4MDAgfSwKKyAgeyAweDAwLCAweDFlLCAweGUwLCAweGZlLCAweDAwLCAweDBlLCAweGYwLCAweGZlIH0sCisgIHsgMHgwMCwgMHgxZSwgMHhmZSwgMHhlMCwgMHgwMCwgMHgwZSwgMHhmZSwgMHhmMCB9LAorICB7IDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAgfSwgLypzdyovCisgIHsgMHgwMCwgMHhlMCwgMHgxZSwgMHhmZSwgMHgwMCwgMHhmMCwgMHgwZSwgMHhmZSB9LAorICB7IDB4MDAsIDB4ZTAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4MDAgfSwKKyAgeyAweDAwLCAweGUwLCAweGZlLCAweDFlLCAweDAwLCAweGYwLCAweGZlLCAweDBlIH0sCisgIHsgMHgwMCwgMHhmZSwgMHgwMCwgMHhmZSwgMHgwMCwgMHhmZSwgMHgwMCwgMHhmZSB9LCAvKnN3Ki8KKyAgeyAweDAwLCAweGZlLCAweDFlLCAweGUwLCAweDAwLCAweGZlLCAweDBlLCAweGYwIH0sCisgIHsgMHgwMCwgMHhmZSwgMHhlMCwgMHgxZSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwZSB9LAorICB7IDB4MDAsIDB4ZmUsIDB4ZmUsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmUsIDB4MDAgfSwKKyAgeyAweDFlLCAweDAwLCAweDAwLCAweDFlLCAweDBlLCAweDAwLCAweDAwLCAweDBlIH0sCisgIHsgMHgxZSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwZSwgMHgwMCB9LCAvKnN3Ki8KKyAgeyAweDFlLCAweDAwLCAweGUwLCAweGZlLCAweDBlLCAweDAwLCAweGYwLCAweGZlIH0sCisgIHsgMHgxZSwgMHgwMCwgMHhmZSwgMHhlMCwgMHgwZSwgMHgwMCwgMHhmZSwgMHhmMCB9LAorICB7IDB4MWUsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MGUsIDB4MDAsIDB4MDAgfSwKKyAgeyAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDBlLCAweDBlLCAweDBlLCAweDBlIH0sIC8qdyovCisgIHsgMHgxZSwgMHgxZSwgMHhlMCwgMHhlMCwgMHgwZSwgMHgwZSwgMHhmMCwgMHhmMCB9LAorICB7IDB4MWUsIDB4MWUsIDB4ZmUsIDB4ZmUsIDB4MGUsIDB4MGUsIDB4ZmUsIDB4ZmUgfSwKKyAgeyAweDFlLCAweGUwLCAweDAwLCAweGZlLCAweDBlLCAweGYwLCAweDAwLCAweGZlIH0sCisgIHsgMHgxZSwgMHhlMCwgMHgxZSwgMHhlMCwgMHgwZSwgMHhmMCwgMHgwZSwgMHhmMCB9LCAvKnN3Ki8KKyAgeyAweDFlLCAweGUwLCAweGUwLCAweDFlLCAweDBlLCAweGYwLCAweGYwLCAweDBlIH0sCisgIHsgMHgxZSwgMHhlMCwgMHhmZSwgMHgwMCwgMHgwZSwgMHhmMCwgMHhmZSwgMHgwMCB9LAorICB7IDB4MWUsIDB4ZmUsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4ZmUsIDB4MDAsIDB4ZjAgfSwKKyAgeyAweDFlLCAweGZlLCAweDFlLCAweGZlLCAweDBlLCAweGZlLCAweDBlLCAweGZlIH0sIC8qc3cqLworICB7IDB4MWUsIDB4ZmUsIDB4ZTAsIDB4MDAsIDB4MGUsIDB4ZmUsIDB4ZjAsIDB4MDAgfSwKKyAgeyAweDFlLCAweGZlLCAweGZlLCAweDFlLCAweDBlLCAweGZlLCAweGZlLCAweDBlIH0sCisgIHsgMHhlMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHhmMCB9LAorICB7IDB4ZTAsIDB4MDAsIDB4MWUsIDB4ZmUsIDB4ZjAsIDB4MDAsIDB4MGUsIDB4ZmUgfSwKKyAgeyAweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwIH0sIC8qc3cqLworICB7IDB4ZTAsIDB4MDAsIDB4ZmUsIDB4MWUsIDB4ZjAsIDB4MDAsIDB4ZmUsIDB4MGUgfSwKKyAgeyAweGUwLCAweDFlLCAweDAwLCAweGZlLCAweGYwLCAweDBlLCAweDAwLCAweGZlIH0sCisgIHsgMHhlMCwgMHgxZSwgMHgxZSwgMHhlMCwgMHhmMCwgMHgwZSwgMHgwZSwgMHhmMCB9LAorICB7IDB4ZTAsIDB4MWUsIDB4ZTAsIDB4MWUsIDB4ZjAsIDB4MGUsIDB4ZjAsIDB4MGUgfSwgLypzdyovCisgIHsgMHhlMCwgMHgxZSwgMHhmZSwgMHgwMCwgMHhmMCwgMHgwZSwgMHhmZSwgMHgwMCB9LAorICB7IDB4ZTAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAgfSwKKyAgeyAweGUwLCAweGUwLCAweDFlLCAweDFlLCAweGYwLCAweGYwLCAweDBlLCAweDBlIH0sCisgIHsgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCB9LCAvKncqLworICB7IDB4ZTAsIDB4ZTAsIDB4ZmUsIDB4ZmUsIDB4ZjAsIDB4ZjAsIDB4ZmUsIDB4ZmUgfSwKKyAgeyAweGUwLCAweGZlLCAweDAwLCAweDFlLCAweGYwLCAweGZlLCAweDAwLCAweDBlIH0sCisgIHsgMHhlMCwgMHhmZSwgMHgxZSwgMHgwMCwgMHhmMCwgMHhmZSwgMHgwZSwgMHgwMCB9LAorICB7IDB4ZTAsIDB4ZmUsIDB4ZTAsIDB4ZmUsIDB4ZjAsIDB4ZmUsIDB4ZjAsIDB4ZmUgfSwgLypzdyovCisgIHsgMHhlMCwgMHhmZSwgMHhmZSwgMHhlMCwgMHhmMCwgMHhmZSwgMHhmZSwgMHhmMCB9LAorICB7IDB4ZmUsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmUsIDB4MDAsIDB4MDAsIDB4ZmUgfSwKKyAgeyAweGZlLCAweDAwLCAweDFlLCAweGUwLCAweGZlLCAweDAwLCAweDBlLCAweGYwIH0sCisgIHsgMHhmZSwgMHgwMCwgMHhlMCwgMHgxZSwgMHhmZSwgMHgwMCwgMHhmMCwgMHgwZSB9LAorICB7IDB4ZmUsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4ZmUsIDB4MDAgfSwgLypzdyovCisgIHsgMHhmZSwgMHgxZSwgMHgwMCwgMHhlMCwgMHhmZSwgMHgwZSwgMHgwMCwgMHhmMCB9LAorICB7IDB4ZmUsIDB4MWUsIDB4MWUsIDB4ZmUsIDB4ZmUsIDB4MGUsIDB4MGUsIDB4ZmUgfSwKKyAgeyAweGZlLCAweDFlLCAweGUwLCAweDAwLCAweGZlLCAweDBlLCAweGYwLCAweDAwIH0sCisgIHsgMHhmZSwgMHgxZSwgMHhmZSwgMHgxZSwgMHhmZSwgMHgwZSwgMHhmZSwgMHgwZSB9LCAvKnN3Ki8KKyAgeyAweGZlLCAweGUwLCAweDAwLCAweDFlLCAweGZlLCAweGYwLCAweDAwLCAweDBlIH0sCisgIHsgMHhmZSwgMHhlMCwgMHgxZSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwZSwgMHgwMCB9LAorICB7IDB4ZmUsIDB4ZTAsIDB4ZTAsIDB4ZmUsIDB4ZmUsIDB4ZjAsIDB4ZjAsIDB4ZmUgfSwKKyAgeyAweGZlLCAweGUwLCAweGZlLCAweGUwLCAweGZlLCAweGYwLCAweGZlLCAweGYwIH0sIC8qc3cqLworICB7IDB4ZmUsIDB4ZmUsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmUsIDB4MDAsIDB4MDAgfSwKKyAgeyAweGZlLCAweGZlLCAweDFlLCAweDFlLCAweGZlLCAweGZlLCAweDBlLCAweDBlIH0sCisgIHsgMHhmZSwgMHhmZSwgMHhlMCwgMHhlMCwgMHhmZSwgMHhmZSwgMHhmMCwgMHhmMCB9LAorICB7IDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUgfSAgLyp3Ki8KK307CitzdGF0aWMgdW5zaWduZWQgY2hhciB3ZWFrX2tleXNfY2hrc3VtWzIwXSA9IHsKKyAgMHhEMCwgMHhDRiwgMHgwNywgMHgzOCwgMHg5MywgMHg3MCwgMHg4QSwgMHg4MywgMHg3RCwgMHhENywKKyAgMHg4QSwgMHgzNiwgMHg2NSwgMHgyOSwgMHg2QywgMHgxRiwgMHg3QywgMHgzRiwgMHhEMywgMHg0MQorfTsKKworCisKKy8qCisgKiBNYWNybyB0byBzd2FwIGJpdHMgYWNyb3NzIHR3byB3b3Jkcy4KKyAqLworI2RlZmluZSBET19QRVJNVVRBVElPTihhLCB0ZW1wLCBiLCBvZmZzZXQsIG1hc2spCVwKKyAgICB0ZW1wID0gKChhPj5vZmZzZXQpIF4gYikgJiBtYXNrOwkJCVwKKyAgICBiIF49IHRlbXA7CQkJCQkJXAorICAgIGEgXj0gdGVtcDw8b2Zmc2V0OworCisKKy8qCisgKiBUaGlzIHBlcmZvcm1zIHRoZSAnaW5pdGlhbCBwZXJtdXRhdGlvbicgb2YgdGhlIGRhdGEgdG8gYmUgZW5jcnlwdGVkCisgKiBvciBkZWNyeXB0ZWQuIEFkZGl0aW9uYWxseSB0aGUgcmVzdWx0aW5nIHR3byB3b3JkcyBhcmUgcm90YXRlZCBvbmUgYml0CisgKiB0byB0aGUgbGVmdC4KKyAqLworI2RlZmluZSBJTklUSUFMX1BFUk1VVEFUSU9OKGxlZnQsIHRlbXAsIHJpZ2h0KQkJXAorICAgIERPX1BFUk1VVEFUSU9OKGxlZnQsIHRlbXAsIHJpZ2h0LCA0LCAweDBmMGYwZjBmKQlcCisgICAgRE9fUEVSTVVUQVRJT04obGVmdCwgdGVtcCwgcmlnaHQsIDE2LCAweDAwMDBmZmZmKQlcCisgICAgRE9fUEVSTVVUQVRJT04ocmlnaHQsIHRlbXAsIGxlZnQsIDIsIDB4MzMzMzMzMzMpCVwKKyAgICBET19QRVJNVVRBVElPTihyaWdodCwgdGVtcCwgbGVmdCwgOCwgMHgwMGZmMDBmZikJXAorICAgIHJpZ2h0ID0gIChyaWdodCA8PCAxKSB8IChyaWdodCA+PiAzMSk7CQlcCisgICAgdGVtcCAgPSAgKGxlZnQgXiByaWdodCkgJiAweGFhYWFhYWFhOwkJXAorICAgIHJpZ2h0IF49IHRlbXA7CQkJCQlcCisgICAgbGVmdCAgXj0gdGVtcDsJCQkJCVwKKyAgICBsZWZ0ICA9ICAobGVmdCA8PCAxKSB8IChsZWZ0ID4+IDMxKTsKKworLyoKKyAqIFRoZSAnaW52ZXJzZSBpbml0aWFsIHBlcm11dGF0aW9uJy4KKyAqLworI2RlZmluZSBGSU5BTF9QRVJNVVRBVElPTihsZWZ0LCB0ZW1wLCByaWdodCkJCVwKKyAgICBsZWZ0ICA9ICAobGVmdCA8PCAzMSkgfCAobGVmdCA+PiAxKTsJCVwKKyAgICB0ZW1wICA9ICAobGVmdCBeIHJpZ2h0KSAmIDB4YWFhYWFhYWE7CQlcCisgICAgbGVmdCAgXj0gdGVtcDsJCQkJCVwKKyAgICByaWdodCBePSB0ZW1wOwkJCQkJXAorICAgIHJpZ2h0ICA9ICAocmlnaHQgPDwgMzEpIHwgKHJpZ2h0ID4+IDEpOwkJXAorICAgIERPX1BFUk1VVEFUSU9OKHJpZ2h0LCB0ZW1wLCBsZWZ0LCA4LCAweDAwZmYwMGZmKQlcCisgICAgRE9fUEVSTVVUQVRJT04ocmlnaHQsIHRlbXAsIGxlZnQsIDIsIDB4MzMzMzMzMzMpCVwKKyAgICBET19QRVJNVVRBVElPTihsZWZ0LCB0ZW1wLCByaWdodCwgMTYsIDB4MDAwMGZmZmYpCVwKKyAgICBET19QRVJNVVRBVElPTihsZWZ0LCB0ZW1wLCByaWdodCwgNCwgMHgwZjBmMGYwZikKKworCisvKgorICogQSBmdWxsIERFUyByb3VuZCBpbmNsdWRpbmcgJ2V4cGFuc2lvbiBmdW5jdGlvbicsICdzYm94IHN1YnN0aXR1dGlvbicKKyAqIGFuZCAncHJpbWl0aXZlIGZ1bmN0aW9uIFAnIGJ1dCB3aXRob3V0IHN3YXBwaW5nIHRoZSBsZWZ0IGFuZCByaWdodCB3b3JkLgorICogUGxlYXNlIG5vdGU6IFRoZSBkYXRhIGluICdmcm9tJyBhbmQgJ3RvJyBpcyBhbHJlYWR5IHJvdGF0ZWQgb25lIGJpdCB0bworICogdGhlIGxlZnQsIGRvbmUgaW4gdGhlIGluaXRpYWwgcGVybXV0YXRpb24uCisgKi8KKyNkZWZpbmUgREVTX1JPVU5EKGZyb20sIHRvLCB3b3JrLCBzdWJrZXkpCQlcCisgICAgd29yayA9IGZyb20gXiAqc3Via2V5Kys7CQkJCVwKKyAgICB0byBePSBzYm94OFsgIHdvcmsJICAgICYgMHgzZiBdOwkJCVwKKyAgICB0byBePSBzYm94NlsgKHdvcms+PjgpICAmIDB4M2YgXTsJCQlcCisgICAgdG8gXj0gc2JveDRbICh3b3JrPj4xNikgJiAweDNmIF07CQkJXAorICAgIHRvIF49IHNib3gyWyAod29yaz4+MjQpICYgMHgzZiBdOwkJCVwKKyAgICB3b3JrID0gKChmcm9tIDw8IDI4KSB8IChmcm9tID4+IDQpKSBeICpzdWJrZXkrKzsJXAorICAgIHRvIF49IHNib3g3WyAgd29yawkgICAgJiAweDNmIF07CQkJXAorICAgIHRvIF49IHNib3g1WyAod29yaz4+OCkgICYgMHgzZiBdOwkJCVwKKyAgICB0byBePSBzYm94M1sgKHdvcms+PjE2KSAmIDB4M2YgXTsJCQlcCisgICAgdG8gXj0gc2JveDFbICh3b3JrPj4yNCkgJiAweDNmIF07CisKKy8qCisgKiBNYWNyb3MgdG8gY29udmVydCA4IGJ5dGVzIGZyb20vdG8gMzJiaXQgd29yZHMuCisgKi8KKyNkZWZpbmUgUkVBRF82NEJJVF9EQVRBKGRhdGEsIGxlZnQsIHJpZ2h0KQkJCQkgICBcCisgICAgbGVmdCA9IGJ1Zl9nZXRfYmUzMihkYXRhICsgMCk7CQkJCQkgICBcCisgICAgcmlnaHQgPSBidWZfZ2V0X2JlMzIoZGF0YSArIDQpOworCisjZGVmaW5lIFdSSVRFXzY0QklUX0RBVEEoZGF0YSwgbGVmdCwgcmlnaHQpCQkJCSAgIFwKKyAgICBidWZfcHV0X2JlMzIoZGF0YSArIDAsIGxlZnQpOwkJCQkJICAgXAorICAgIGJ1Zl9wdXRfYmUzMihkYXRhICsgNCwgcmlnaHQpOworCisvKgorICogSGFuZHkgbWFjcm9zIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9mIGRhdGEKKyAqLworI2RlZmluZSBkZXNfZWNiX2VuY3J5cHQoY3R4LCBmcm9tLCB0bykJICAgICAgZGVzX2VjYl9jcnlwdChjdHgsIGZyb20sIHRvLCAwKQorI2RlZmluZSBkZXNfZWNiX2RlY3J5cHQoY3R4LCBmcm9tLCB0bykJICAgICAgZGVzX2VjYl9jcnlwdChjdHgsIGZyb20sIHRvLCAxKQorI2RlZmluZSB0cmlwbGVkZXNfZWNiX2VuY3J5cHQoY3R4LCBmcm9tLCB0bykgdHJpcGxlZGVzX2VjYl9jcnlwdChjdHgsZnJvbSx0bywwKQorI2RlZmluZSB0cmlwbGVkZXNfZWNiX2RlY3J5cHQoY3R4LCBmcm9tLCB0bykgdHJpcGxlZGVzX2VjYl9jcnlwdChjdHgsZnJvbSx0bywxKQorCisKKworCisKKworLyoKKyAqIGRlc19rZXlfc2NoZWR1bGUoKToJICBDYWxjdWxhdGUgMTYgc3Via2V5cyBwYWlycyAoZXZlbi9vZGQpIGZvcgorICoJCQkgIDE2IGVuY3J5cHRpb24gcm91bmRzLgorICoJCQkgIFRvIGNhbGN1bGF0ZSBzdWJrZXlzIGZvciBkZWNyeXB0aW9uIHRoZSBjYWxsZXIKKyAqCQkJICBoYXZlIHRvIHJlb3JkZXIgdGhlIGdlbmVyYXRlZCBzdWJrZXlzLgorICoKKyAqICAgIHJhd2tleToJICAgIDggQnl0ZXMgb2Yga2V5IGRhdGEKKyAqICAgIHN1YmtleToJICAgIEFycmF5IG9mIGF0IGxlYXN0IDMyIHUzMnMuIFdpbGwgYmUgZmlsbGVkCisgKgkJICAgIHdpdGggY2FsY3VsYXRlZCBzdWJrZXlzLgorICoKKyAqLworc3RhdGljIHZvaWQKK2Rlc19rZXlfc2NoZWR1bGUgKGNvbnN0IGJ5dGUgKiByYXdrZXksIHUzMiAqIHN1YmtleSkKK3sKKyAgdTMyIGxlZnQsIHJpZ2h0LCB3b3JrOworICBpbnQgcm91bmQ7CisKKyAgUkVBRF82NEJJVF9EQVRBIChyYXdrZXksIGxlZnQsIHJpZ2h0KQorCisgIERPX1BFUk1VVEFUSU9OIChyaWdodCwgd29yaywgbGVmdCwgNCwgMHgwZjBmMGYwZikKKyAgRE9fUEVSTVVUQVRJT04gKHJpZ2h0LCB3b3JrLCBsZWZ0LCAwLCAweDEwMTAxMDEwKQorCisgIGxlZnQgPSAoKGxlZnRrZXlfc3dhcFsobGVmdCA+PiAwKSAmIDB4Zl0gPDwgMykKKyAgICAgICAgICB8IChsZWZ0a2V5X3N3YXBbKGxlZnQgPj4gOCkgJiAweGZdIDw8IDIpCisgICAgICAgICAgfCAobGVmdGtleV9zd2FwWyhsZWZ0ID4+IDE2KSAmIDB4Zl0gPDwgMSkKKyAgICAgICAgICB8IChsZWZ0a2V5X3N3YXBbKGxlZnQgPj4gMjQpICYgMHhmXSkKKyAgICAgICAgICB8IChsZWZ0a2V5X3N3YXBbKGxlZnQgPj4gNSkgJiAweGZdIDw8IDcpCisgICAgICAgICAgfCAobGVmdGtleV9zd2FwWyhsZWZ0ID4+IDEzKSAmIDB4Zl0gPDwgNikKKyAgICAgICAgICB8IChsZWZ0a2V5X3N3YXBbKGxlZnQgPj4gMjEpICYgMHhmXSA8PCA1KQorICAgICAgICAgIHwgKGxlZnRrZXlfc3dhcFsobGVmdCA+PiAyOSkgJiAweGZdIDw8IDQpKTsKKworICBsZWZ0ICY9IDB4MGZmZmZmZmY7CisKKyAgcmlnaHQgPSAoKHJpZ2h0a2V5X3N3YXBbKHJpZ2h0ID4+IDEpICYgMHhmXSA8PCAzKQorICAgICAgICAgICB8IChyaWdodGtleV9zd2FwWyhyaWdodCA+PiA5KSAmIDB4Zl0gPDwgMikKKyAgICAgICAgICAgfCAocmlnaHRrZXlfc3dhcFsocmlnaHQgPj4gMTcpICYgMHhmXSA8PCAxKQorICAgICAgICAgICB8IChyaWdodGtleV9zd2FwWyhyaWdodCA+PiAyNSkgJiAweGZdKQorICAgICAgICAgICB8IChyaWdodGtleV9zd2FwWyhyaWdodCA+PiA0KSAmIDB4Zl0gPDwgNykKKyAgICAgICAgICAgfCAocmlnaHRrZXlfc3dhcFsocmlnaHQgPj4gMTIpICYgMHhmXSA8PCA2KQorICAgICAgICAgICB8IChyaWdodGtleV9zd2FwWyhyaWdodCA+PiAyMCkgJiAweGZdIDw8IDUpCisgICAgICAgICAgIHwgKHJpZ2h0a2V5X3N3YXBbKHJpZ2h0ID4+IDI4KSAmIDB4Zl0gPDwgNCkpOworCisgIHJpZ2h0ICY9IDB4MGZmZmZmZmY7CisKKyAgZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgMTY7ICsrcm91bmQpCisgICAgeworICAgICAgbGVmdCA9ICgobGVmdCA8PCBlbmNyeXB0X3JvdGF0ZV90YWJbcm91bmRdKQorICAgICAgICAgICAgICB8IChsZWZ0ID4+ICgyOCAtIGVuY3J5cHRfcm90YXRlX3RhYltyb3VuZF0pKSkgJiAweDBmZmZmZmZmOworICAgICAgcmlnaHQgPSAoKHJpZ2h0IDw8IGVuY3J5cHRfcm90YXRlX3RhYltyb3VuZF0pCisgICAgICAgICAgICAgICB8IChyaWdodCA+PiAoMjggLSBlbmNyeXB0X3JvdGF0ZV90YWJbcm91bmRdKSkpICYgMHgwZmZmZmZmZjsKKworICAgICAgKnN1YmtleSsrID0gKCgobGVmdCA8PCA0KSAmIDB4MjQwMDAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgMjgpICYgMHgxMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA8PCAxNCkgJiAweDA4MDAwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChsZWZ0IDw8IDE4KSAmIDB4MDIwODAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgNikgJiAweDAxMDAwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChsZWZ0IDw8IDkpICYgMHgwMDIwMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA+PiAxKSAmIDB4MDAxMDAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgMTApICYgMHgwMDA0MDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA8PCAyKSAmIDB4MDAwMjAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPj4gMTApICYgMHgwMDAxMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMTMpICYgMHgwMDAwMjAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gNCkgJiAweDAwMDAxMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA8PCA2KSAmIDB4MDAwMDA4MDApCisgICAgICAgICAgICAgICAgICAgfCAoKHJpZ2h0ID4+IDEpICYgMHgwMDAwMDQwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMTQpICYgMHgwMDAwMDIwMCkKKyAgICAgICAgICAgICAgICAgICB8IChyaWdodCAmIDB4MDAwMDAxMDApCisgICAgICAgICAgICAgICAgICAgfCAoKHJpZ2h0ID4+IDUpICYgMHgwMDAwMDAyMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMTApICYgMHgwMDAwMDAxMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMykgJiAweDAwMDAwMDA4KQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA+PiAxOCkgJiAweDAwMDAwMDA0KQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA+PiAyNikgJiAweDAwMDAwMDAyKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA+PiAyNCkgJiAweDAwMDAwMDAxKSk7CisKKyAgICAgICpzdWJrZXkrKyA9ICgoKGxlZnQgPDwgMTUpICYgMHgyMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA8PCAxNykgJiAweDEwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChsZWZ0IDw8IDEwKSAmIDB4MDgwMDAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgMjIpICYgMHgwNDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA+PiAyKSAmIDB4MDIwMDAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgMSkgJiAweDAxMDAwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChsZWZ0IDw8IDE2KSAmIDB4MDAyMDAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPDwgMTEpICYgMHgwMDEwMDAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgobGVmdCA8PCAzKSAmIDB4MDAwODAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPj4gNikgJiAweDAwMDQwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChsZWZ0IDw8IDE1KSAmIDB4MDAwMjAwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKGxlZnQgPj4gNCkgJiAweDAwMDEwMDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA+PiAyKSAmIDB4MDAwMDIwMDApCisgICAgICAgICAgICAgICAgICAgfCAoKHJpZ2h0IDw8IDgpICYgMHgwMDAwMTAwMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMTQpICYgMHgwMDAwMDgwOCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gOSkgJiAweDAwMDAwNDAwKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCkgJiAweDAwMDAwMjAwKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA8PCA3KSAmIDB4MDAwMDAxMDApCisgICAgICAgICAgICAgICAgICAgfCAoKHJpZ2h0ID4+IDcpICYgMHgwMDAwMDAyMCkKKyAgICAgICAgICAgICAgICAgICB8ICgocmlnaHQgPj4gMykgJiAweDAwMDAwMDExKQorICAgICAgICAgICAgICAgICAgIHwgKChyaWdodCA8PCAyKSAmIDB4MDAwMDAwMDQpCisgICAgICAgICAgICAgICAgICAgfCAoKHJpZ2h0ID4+IDIxKSAmIDB4MDAwMDAwMDIpKTsKKyAgICB9Cit9CisKKworLyoKKyAqIEZpbGwgYSBERVMgY29udGV4dCB3aXRoIHN1YmtleXMgY2FsY3VsYXRlZCBmcm9tIGEgNjRiaXQga2V5LgorICogRG9lcyBub3QgY2hlY2sgcGFyaXR5IGJpdHMsIGJ1dCBzaW1wbHkgaWdub3JlIHRoZW0uCisgKiBEb2VzIG5vdCBjaGVjayBmb3Igd2VhayBrZXlzLgorICovCitzdGF0aWMgaW50CitkZXNfc2V0a2V5IChzdHJ1Y3QgX2Rlc19jdHggKmN0eCwgY29uc3QgYnl0ZSAqIGtleSkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0X2ZhaWxlZDsKKyAgaW50IGk7CisKKyAgaWYgKCFmaXBzX21vZGUgKCkgJiYgIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0ICgpOworCisgICAgICBpZiAoc2VsZnRlc3RfZmFpbGVkKQorCWxvZ19lcnJvciAoIiVzXG4iLCBzZWxmdGVzdF9mYWlsZWQpOworICAgIH0KKyAgaWYgKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7CisKKyAgZGVzX2tleV9zY2hlZHVsZSAoa2V5LCBjdHgtPmVuY3J5cHRfc3Via2V5cyk7CisgIF9nY3J5X2J1cm5fc3RhY2sgKDMyKTsKKworICBmb3IoaT0wOyBpPDMyOyBpKz0yKQorICAgIHsKKyAgICAgIGN0eC0+ZGVjcnlwdF9zdWJrZXlzW2ldCT0gY3R4LT5lbmNyeXB0X3N1YmtleXNbMzAtaV07CisgICAgICBjdHgtPmRlY3J5cHRfc3Via2V5c1tpKzFdID0gY3R4LT5lbmNyeXB0X3N1YmtleXNbMzEtaV07CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKworLyoKKyAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgTW9kZSBERVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIG9mIGRhdGEgYWNjb3JkaW5nCisgKiB0byAnbW9kZScuCisgKi8KK3N0YXRpYyBpbnQKK2Rlc19lY2JfY3J5cHQgKHN0cnVjdCBfZGVzX2N0eCAqY3R4LCBjb25zdCBieXRlICogZnJvbSwgYnl0ZSAqIHRvLCBpbnQgbW9kZSkKK3sKKyAgdTMyIGxlZnQsIHJpZ2h0LCB3b3JrOworICB1MzIgKmtleXM7CisKKyAga2V5cyA9IG1vZGUgPyBjdHgtPmRlY3J5cHRfc3Via2V5cyA6IGN0eC0+ZW5jcnlwdF9zdWJrZXlzOworCisgIFJFQURfNjRCSVRfREFUQSAoZnJvbSwgbGVmdCwgcmlnaHQpCisgIElOSVRJQUxfUEVSTVVUQVRJT04gKGxlZnQsIHdvcmssIHJpZ2h0KQorCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpCisKKyAgRklOQUxfUEVSTVVUQVRJT04gKHJpZ2h0LCB3b3JrLCBsZWZ0KQorICBXUklURV82NEJJVF9EQVRBICh0bywgcmlnaHQsIGxlZnQpCisKKyAgcmV0dXJuIDA7Cit9CisKKworCisvKgorICogRmlsbCBhIFRyaXBsZS1ERVMgY29udGV4dCB3aXRoIHN1YmtleXMgY2FsY3VsYXRlZCBmcm9tIHR3byA2NGJpdCBrZXlzLgorICogRG9lcyBub3QgY2hlY2sgdGhlIHBhcml0eSBiaXRzIG9mIHRoZSBrZXlzLCBidXQgc2ltcGx5IGlnbm9yZSB0aGVtLgorICogRG9lcyBub3QgY2hlY2sgZm9yIHdlYWsga2V5cy4KKyAqLworc3RhdGljIGludAordHJpcGxlZGVzX3NldDJrZXlzIChzdHJ1Y3QgX3RyaXBsZWRlc19jdHggKmN0eCwKKwkJICAgIGNvbnN0IGJ5dGUgKiBrZXkxLAorCQkgICAgY29uc3QgYnl0ZSAqIGtleTIpCit7CisgIGludCBpOworCisgIGRlc19rZXlfc2NoZWR1bGUgKGtleTEsIGN0eC0+ZW5jcnlwdF9zdWJrZXlzKTsKKyAgZGVzX2tleV9zY2hlZHVsZSAoa2V5MiwgJihjdHgtPmRlY3J5cHRfc3Via2V5c1szMl0pKTsKKyAgX2djcnlfYnVybl9zdGFjayAoMzIpOworCisgIGZvcihpPTA7IGk8MzI7IGkrPTIpCisgICAgeworICAgICAgY3R4LT5kZWNyeXB0X3N1YmtleXNbaV0JID0gY3R4LT5lbmNyeXB0X3N1YmtleXNbMzAtaV07CisgICAgICBjdHgtPmRlY3J5cHRfc3Via2V5c1tpKzFdICA9IGN0eC0+ZW5jcnlwdF9zdWJrZXlzWzMxLWldOworCisgICAgICBjdHgtPmVuY3J5cHRfc3Via2V5c1tpKzMyXSA9IGN0eC0+ZGVjcnlwdF9zdWJrZXlzWzYyLWldOworICAgICAgY3R4LT5lbmNyeXB0X3N1YmtleXNbaSszM10gPSBjdHgtPmRlY3J5cHRfc3Via2V5c1s2My1pXTsKKworICAgICAgY3R4LT5lbmNyeXB0X3N1YmtleXNbaSs2NF0gPSBjdHgtPmVuY3J5cHRfc3Via2V5c1tpXTsKKyAgICAgIGN0eC0+ZW5jcnlwdF9zdWJrZXlzW2krNjVdID0gY3R4LT5lbmNyeXB0X3N1YmtleXNbaSsxXTsKKworICAgICAgY3R4LT5kZWNyeXB0X3N1YmtleXNbaSs2NF0gPSBjdHgtPmRlY3J5cHRfc3Via2V5c1tpXTsKKyAgICAgIGN0eC0+ZGVjcnlwdF9zdWJrZXlzW2krNjVdID0gY3R4LT5kZWNyeXB0X3N1YmtleXNbaSsxXTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworCisvKgorICogRmlsbCBhIFRyaXBsZS1ERVMgY29udGV4dCB3aXRoIHN1YmtleXMgY2FsY3VsYXRlZCBmcm9tIHRocmVlIDY0Yml0IGtleXMuCisgKiBEb2VzIG5vdCBjaGVjayB0aGUgcGFyaXR5IGJpdHMgb2YgdGhlIGtleXMsIGJ1dCBzaW1wbHkgaWdub3JlIHRoZW0uCisgKiBEb2VzIG5vdCBjaGVjayBmb3Igd2VhayBrZXlzLgorICovCitzdGF0aWMgaW50Cit0cmlwbGVkZXNfc2V0M2tleXMgKHN0cnVjdCBfdHJpcGxlZGVzX2N0eCAqY3R4LAorCQkgICAgY29uc3QgYnl0ZSAqIGtleTEsCisJCSAgICBjb25zdCBieXRlICoga2V5MiwKKwkJICAgIGNvbnN0IGJ5dGUgKiBrZXkzKQoreworICBzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3RfZmFpbGVkOworICBpbnQgaTsKKworICBpZiAoIWZpcHNfbW9kZSAoKSAmJiAhaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgICAgc2VsZnRlc3RfZmFpbGVkID0gc2VsZnRlc3QgKCk7CisKKyAgICAgIGlmIChzZWxmdGVzdF9mYWlsZWQpCisJbG9nX2Vycm9yICgiJXNcbiIsIHNlbGZ0ZXN0X2ZhaWxlZCk7CisgICAgfQorICBpZiAoc2VsZnRlc3RfZmFpbGVkKQorICAgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKworICBkZXNfa2V5X3NjaGVkdWxlIChrZXkxLCBjdHgtPmVuY3J5cHRfc3Via2V5cyk7CisgIGRlc19rZXlfc2NoZWR1bGUgKGtleTIsICYoY3R4LT5kZWNyeXB0X3N1YmtleXNbMzJdKSk7CisgIGRlc19rZXlfc2NoZWR1bGUgKGtleTMsICYoY3R4LT5lbmNyeXB0X3N1YmtleXNbNjRdKSk7CisgIF9nY3J5X2J1cm5fc3RhY2sgKDMyKTsKKworICBmb3IoaT0wOyBpPDMyOyBpKz0yKQorICAgIHsKKyAgICAgIGN0eC0+ZGVjcnlwdF9zdWJrZXlzW2ldCSA9IGN0eC0+ZW5jcnlwdF9zdWJrZXlzWzk0LWldOworICAgICAgY3R4LT5kZWNyeXB0X3N1YmtleXNbaSsxXSAgPSBjdHgtPmVuY3J5cHRfc3Via2V5c1s5NS1pXTsKKworICAgICAgY3R4LT5lbmNyeXB0X3N1YmtleXNbaSszMl0gPSBjdHgtPmRlY3J5cHRfc3Via2V5c1s2Mi1pXTsKKyAgICAgIGN0eC0+ZW5jcnlwdF9zdWJrZXlzW2krMzNdID0gY3R4LT5kZWNyeXB0X3N1YmtleXNbNjMtaV07CisKKyAgICAgIGN0eC0+ZGVjcnlwdF9zdWJrZXlzW2krNjRdID0gY3R4LT5lbmNyeXB0X3N1YmtleXNbMzAtaV07CisgICAgICBjdHgtPmRlY3J5cHRfc3Via2V5c1tpKzY1XSA9IGN0eC0+ZW5jcnlwdF9zdWJrZXlzWzMxLWldOworICAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworCisvKgorICogRWxlY3Ryb25pYyBDb2RlYm9vayBNb2RlIFRyaXBsZS1ERVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIG9mIGRhdGEKKyAqIGFjY29yZGluZyB0byAnbW9kZScuICBTb21ldGltZXMgdGhpcyBtb2RlIGlzIG5hbWVkICdFREUnIG1vZGUKKyAqIChFbmNyeXB0aW9uLURlY3J5cHRpb24tRW5jcnlwdGlvbikuCisgKi8KK3N0YXRpYyBpbnQKK3RyaXBsZWRlc19lY2JfY3J5cHQgKHN0cnVjdCBfdHJpcGxlZGVzX2N0eCAqY3R4LCBjb25zdCBieXRlICogZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKiB0bywgaW50IG1vZGUpCit7CisgIHUzMiBsZWZ0LCByaWdodCwgd29yazsKKyAgdTMyICprZXlzOworCisgIGtleXMgPSBtb2RlID8gY3R4LT5kZWNyeXB0X3N1YmtleXMgOiBjdHgtPmVuY3J5cHRfc3Via2V5czsKKworICBSRUFEXzY0QklUX0RBVEEgKGZyb20sIGxlZnQsIHJpZ2h0KQorICBJTklUSUFMX1BFUk1VVEFUSU9OIChsZWZ0LCB3b3JrLCByaWdodCkKKworICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorICBERVNfUk9VTkQgKHJpZ2h0LCBsZWZ0LCB3b3JrLCBrZXlzKSBERVNfUk9VTkQgKGxlZnQsIHJpZ2h0LCB3b3JrLCBrZXlzKQorCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisgIERFU19ST1VORCAobGVmdCwgcmlnaHQsIHdvcmssIGtleXMpIERFU19ST1VORCAocmlnaHQsIGxlZnQsIHdvcmssIGtleXMpCisKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKyAgREVTX1JPVU5EIChyaWdodCwgbGVmdCwgd29yaywga2V5cykgREVTX1JPVU5EIChsZWZ0LCByaWdodCwgd29yaywga2V5cykKKworICBGSU5BTF9QRVJNVVRBVElPTiAocmlnaHQsIHdvcmssIGxlZnQpCisgIFdSSVRFXzY0QklUX0RBVEEgKHRvLCByaWdodCwgbGVmdCkKKworICByZXR1cm4gMDsKK30KKworCisKKworCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgOCBieXRlIGtleSBpcyB3ZWFrLgorICogRG9lcyBub3QgY2hlY2sgdGhlIHBhcml0eSBiaXRzIG9mIHRoZSBrZXkgYnV0IHNpbXBsZSBpZ25vcmUgdGhlbS4KKyAqLworc3RhdGljIGludAoraXNfd2Vha19rZXkgKCBjb25zdCBieXRlICprZXkgKQoreworICBieXRlIHdvcmtbOF07CisgIGludCBpLCBsZWZ0LCByaWdodCwgbWlkZGxlLCBjbXBfcmVzdWx0OworCisgIC8qIGNsZWFyIHBhcml0eSBiaXRzICovCisgIGZvcihpPTA7IGk8ODsgKytpKQorICAgICB3b3JrW2ldID0ga2V5W2ldICYgMHhmZTsKKworICAvKiBiaW5hcnkgc2VhcmNoIGluIHRoZSB3ZWFrIGtleSB0YWJsZSAqLworICBsZWZ0ID0gMDsKKyAgcmlnaHQgPSA2MzsKKyAgd2hpbGUobGVmdCA8PSByaWdodCkKKyAgICB7CisgICAgICBtaWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7CisKKyAgICAgIGlmICggIShjbXBfcmVzdWx0PXdvcmtpbmdfbWVtY21wKHdvcmssIHdlYWtfa2V5c1ttaWRkbGVdLCA4KSkgKQorCSAgcmV0dXJuIC0xOworCisgICAgICBpZiAoIGNtcF9yZXN1bHQgPiAwICkKKwkgIGxlZnQgPSBtaWRkbGUgKyAxOworICAgICAgZWxzZQorCSAgcmlnaHQgPSBtaWRkbGUgLSAxOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCisKKy8qCisgKiBQZXJmb3JtcyBhIHNlbGZ0ZXN0IG9mIHRoaXMgREVTL1RyaXBsZS1ERVMgaW1wbGVtZW50YXRpb24uCisgKiBSZXR1cm5zIGFuIHN0cmluZyB3aXRoIHRoZSBlcnJvciB0ZXh0IG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIE5VTEwgaWYgYWxsIGlzIG9rLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdCAodm9pZCkKK3sKKyAgLyoKKyAgICogQ2hlY2sgaWYgJ3UzMicgaXMgcmVhbGx5IDMyIGJpdHMgd2lkZS4gVGhpcyBERVMgLyAzREVTIGltcGxlbWVudGF0aW9uCisgICAqIG5lZWQgdGhpcy4KKyAgICovCisgIGlmIChzaXplb2YgKHUzMikgIT0gNCkKKyAgICByZXR1cm4gIldyb25nIHdvcmQgc2l6ZSBmb3IgREVTIGNvbmZpZ3VyZWQuIjsKKworICAvKgorICAgKiBERVMgTWFpbnRlbmFuY2UgVGVzdAorICAgKi8KKyAgeworICAgIGludCBpOworICAgIGJ5dGUga2V5WzhdID0KKyAgICAgIHsweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1fTsKKyAgICBieXRlIGlucHV0WzhdID0KKyAgICAgIHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKyAgICBieXRlIHJlc3VsdFs4XSA9CisgICAgICB7MHgyNCwgMHg2ZSwgMHg5ZCwgMHhiOSwgMHhjNSwgMHg1MCwgMHgzOCwgMHgxYX07CisgICAgYnl0ZSB0ZW1wMVs4XSwgdGVtcDJbOF0sIHRlbXAzWzhdOworICAgIGRlc19jdHggZGVzOworCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyArK2kpCisgICAgICB7CisJZGVzX3NldGtleSAoZGVzLCBrZXkpOworCWRlc19lY2JfZW5jcnlwdCAoZGVzLCBpbnB1dCwgdGVtcDEpOworCWRlc19lY2JfZW5jcnlwdCAoZGVzLCB0ZW1wMSwgdGVtcDIpOworCWRlc19zZXRrZXkgKGRlcywgdGVtcDIpOworCWRlc19lY2JfZGVjcnlwdCAoZGVzLCB0ZW1wMSwgdGVtcDMpOworCW1lbWNweSAoa2V5LCB0ZW1wMywgOCk7CisJbWVtY3B5IChpbnB1dCwgdGVtcDEsIDgpOworICAgICAgfQorICAgIGlmIChtZW1jbXAgKHRlbXAzLCByZXN1bHQsIDgpKQorICAgICAgcmV0dXJuICJERVMgbWFpbnRlbmFuY2UgdGVzdCBmYWlsZWQuIjsKKyAgfQorCisKKyAgLyoKKyAgICogU2VsZiBtYWRlIFRyaXBsZS1ERVMgdGVzdAkoRG9lcyBzb21lYm9keSBrbm93IGFuIG9mZmljaWFsIHRlc3Q/KQorICAgKi8KKyAgeworICAgIGludCBpOworICAgIGJ5dGUgaW5wdXRbOF0gPQorICAgICAgezB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTB9OworICAgIGJ5dGUga2V5MVs4XSA9CisgICAgICB7MHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5YSwgMHhiYywgMHhkZSwgMHhmMH07CisgICAgYnl0ZSBrZXkyWzhdID0KKyAgICAgIHsweDExLCAweDIyLCAweDMzLCAweDQ0LCAweGZmLCAweGFhLCAweGNjLCAweGRkfTsKKyAgICBieXRlIHJlc3VsdFs4XSA9CisgICAgICB7MHg3YiwgMHgzOCwgMHgzYiwgMHgyMywgMHhhMiwgMHg3ZCwgMHgyNiwgMHhkM307CisKKyAgICB0cmlwbGVkZXNfY3R4IGRlczM7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKKyAgICAgIHsKKwl0cmlwbGVkZXNfc2V0MmtleXMgKGRlczMsIGtleTEsIGtleTIpOworCXRyaXBsZWRlc19lY2JfZW5jcnlwdCAoZGVzMywgaW5wdXQsIGtleTEpOworCXRyaXBsZWRlc19lY2JfZGVjcnlwdCAoZGVzMywgaW5wdXQsIGtleTIpOworCXRyaXBsZWRlc19zZXQza2V5cyAoZGVzMywga2V5MSwgaW5wdXQsIGtleTIpOworCXRyaXBsZWRlc19lY2JfZW5jcnlwdCAoZGVzMywgaW5wdXQsIGlucHV0KTsKKyAgICAgIH0KKyAgICBpZiAobWVtY21wIChpbnB1dCwgcmVzdWx0LCA4KSkKKyAgICAgIHJldHVybiAiVHJpcGxlLURFUyB0ZXN0IGZhaWxlZC4iOworICB9CisKKyAgLyoKKyAgICogTW9yZSBUcmlwbGUtREVTIHRlc3QuICBUaGVzZSBhcmUgdGVzdHZlY3RvcnMgYXMgdXNlZCBieSBTU0xlYXksCisgICAqIHRoYW5rcyB0byBKZXJvZW4gQy4gdmFuIEdlbGRlcmVuLgorICAgKi8KKyAgeworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyBieXRlIGtleVsyNF07IGJ5dGUgcGxhaW5bOF07IGJ5dGUgY2lwaGVyWzhdOyB9CisgICAgICB0ZXN0ZGF0YVtdID0geworICAgICAgeyB7IDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwKKyAgICAgICAgICAweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsCisgICAgICAgICAgMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxICB9LAorICAgICAgICB7IDB4OTUsMHhGOCwweEE1LDB4RTUsMHhERCwweDMxLDB4RDksMHgwMCAgfSwKKyAgICAgICAgeyAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgIH0KKyAgICAgIH0sCisKKyAgICAgIHsgeyAweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsCisgICAgICAgICAgMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLAorICAgICAgICAgIDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSAgfSwKKyAgICAgICAgeyAweDlELDB4NjQsMHg1NSwweDVBLDB4OUEsMHgxMCwweEI4LDB4NTIsIH0sCisgICAgICAgIHsgMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwICB9CisgICAgICB9LAorICAgICAgeyB7IDB4MzgsMHg0OSwweDY3LDB4NEMsMHgyNiwweDAyLDB4MzEsMHg5RSwKKyAgICAgICAgICAweDM4LDB4NDksMHg2NywweDRDLDB4MjYsMHgwMiwweDMxLDB4OUUsCisgICAgICAgICAgMHgzOCwweDQ5LDB4NjcsMHg0QywweDI2LDB4MDIsMHgzMSwweDlFICB9LAorICAgICAgICB7IDB4NTEsMHg0NSwweDRCLDB4NTgsMHgyRCwweERGLDB4NDQsMHgwQSAgfSwKKyAgICAgICAgeyAweDcxLDB4NzgsMHg4NywweDZFLDB4MDEsMHhGMSwweDlCLDB4MkEgIH0KKyAgICAgIH0sCisgICAgICB7IHsgMHgwNCwweEI5LDB4MTUsMHhCQSwweDQzLDB4RkUsMHhCNSwweEI2LAorICAgICAgICAgIDB4MDQsMHhCOSwweDE1LDB4QkEsMHg0MywweEZFLDB4QjUsMHhCNiwKKyAgICAgICAgICAweDA0LDB4QjksMHgxNSwweEJBLDB4NDMsMHhGRSwweEI1LDB4QjYgIH0sCisgICAgICAgIHsgMHg0MiwweEZELDB4NDQsMHgzMCwweDU5LDB4NTcsMHg3RiwweEEyICB9LAorICAgICAgICB7IDB4QUYsMHgzNywweEZCLDB4NDIsMHgxRiwweDhDLDB4NDAsMHg5NSAgfQorICAgICAgfSwKKyAgICAgIHsgeyAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCisgICAgICAgICAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorICAgICAgICAgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiAgfSwKKyAgICAgICAgeyAweDczLDB4NkYsMHg2RCwweDY1LDB4NjQsMHg2MSwweDc0LDB4NjEgIH0sCisgICAgICAgIHsgMHgzRCwweDEyLDB4NEYsMHhFMiwweDE5LDB4OEIsMHhBMywweDE4ICB9CisgICAgICB9LAorICAgICAgeyB7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKKyAgICAgICAgICAweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsCisgICAgICAgICAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGICB9LAorICAgICAgICB7IDB4NzMsMHg2RiwweDZELDB4NjUsMHg2NCwweDYxLDB4NzQsMHg2MSAgfSwKKyAgICAgICAgeyAweEZCLDB4QUIsMHhBMSwweEZGLDB4OUQsMHgwNSwweEU5LDB4QjEgIH0KKyAgICAgIH0sCisgICAgICB7IHsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorICAgICAgICAgIDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwKKyAgICAgICAgICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAgIH0sCisgICAgICAgIHsgMHg3MywweDZGLDB4NkQsMHg2NSwweDY0LDB4NjEsMHg3NCwweDYxICB9LAorICAgICAgICB7IDB4MTgsMHhkNywweDQ4LDB4ZTUsMHg2MywweDYyLDB4MDUsMHg3MiAgfQorICAgICAgfSwKKyAgICAgIHsgeyAweDAzLDB4NTIsMHgwMiwweDA3LDB4NjcsMHgyMCwweDgyLDB4MTcsCisgICAgICAgICAgMHg4NiwweDAyLDB4ODcsMHg2NiwweDU5LDB4MDgsMHgyMSwweDk4LAorICAgICAgICAgIDB4NjQsMHgwNSwweDZBLDB4QkQsMHhGRSwweEE5LDB4MzQsMHg1NyAgfSwKKyAgICAgICAgeyAweDczLDB4NzEsMHg3NSwweDY5LDB4NjcsMHg2NywweDZDLDB4NjUgIH0sCisgICAgICAgIHsgMHhjMCwweDdkLDB4MmEsMHgwZiwweGE1LDB4NjYsMHhmYSwweDMwICB9CisgICAgICB9LAorICAgICAgeyB7IDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwKKyAgICAgICAgICAweDgwLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsCisgICAgICAgICAgMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyICB9LAorICAgICAgICB7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCAgfSwKKyAgICAgICAgeyAweGU2LDB4ZTYsMHhkZCwweDViLDB4N2UsMHg3MiwweDI5LDB4NzQgIH0KKyAgICAgIH0sCisgICAgICB7IHsgMHgxMCwweDQ2LDB4MTAsMHgzNCwweDg5LDB4OTgsMHg4MCwweDIwLAorICAgICAgICAgIDB4OTEsMHgwNywweEQwLDB4MTUsMHg4OSwweDE5LDB4MDEsMHgwMSwKKyAgICAgICAgICAweDE5LDB4MDcsMHg5MiwweDEwLDB4OTgsMHgxQSwweDAxLDB4MDEgIH0sCisgICAgICAgIHsgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwICB9LAorICAgICAgICB7IDB4ZTEsMHhlZiwweDYyLDB4YzMsMHgzMiwweGZlLDB4ODIsMHg1YiAgfQorICAgICAgfQorICAgIH07CisKKyAgICBieXRlCQlyZXN1bHRbOF07CisgICAgaW50CQlpOworICAgIHRyaXBsZWRlc19jdHgJZGVzMzsKKworICAgIGZvciAoaT0wOyBpPHNpemVvZih0ZXN0ZGF0YSkvc2l6ZW9mKCp0ZXN0ZGF0YSk7ICsraSkKKyAgICAgIHsKKyAgICAgICAgdHJpcGxlZGVzX3NldDNrZXlzIChkZXMzLCB0ZXN0ZGF0YVtpXS5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRhdGFbaV0ua2V5ICsgOCwgdGVzdGRhdGFbaV0ua2V5ICsgMTYpOworCisgICAgICAgIHRyaXBsZWRlc19lY2JfZW5jcnlwdCAoZGVzMywgdGVzdGRhdGFbaV0ucGxhaW4sIHJlc3VsdCk7CisgICAgICAgIGlmIChtZW1jbXAgKHRlc3RkYXRhW2ldLmNpcGhlciwgcmVzdWx0LCA4KSkKKyAgICAgICAgICByZXR1cm4gIlRyaXBsZS1ERVMgU1NMZWF5IHRlc3QgZmFpbGVkIG9uIGVuY3J5cHRpb24uIjsKKworICAgICAgICB0cmlwbGVkZXNfZWNiX2RlY3J5cHQgKGRlczMsIHRlc3RkYXRhW2ldLmNpcGhlciwgcmVzdWx0KTsKKyAgICAgICAgaWYgKG1lbWNtcCAodGVzdGRhdGFbaV0ucGxhaW4sIHJlc3VsdCwgOCkpCisgICAgICAgICAgcmV0dXJuICAiVHJpcGxlLURFUyBTU0xlYXkgdGVzdCBmYWlsZWQgb24gZGVjcnlwdGlvbi4iOzsKKyAgICAgIH0KKyAgfQorCisgIC8qCisgICAqIENoZWNrIHRoZSB3ZWFrIGtleSBkZXRlY3Rpb24uIFdlIHNpbXBseSBhc3N1bWUgdGhhdCB0aGUgdGFibGUKKyAgICogd2l0aCB3ZWFrIGtleXMgaXMgb2sgYW5kIGNoZWNrIGV2ZXJ5IGtleSBpbiB0aGUgdGFibGUgaWYgaXQgaXMKKyAgICogZGV0ZWN0ZWQuLi4gKFRoaXMgdGVzdCBpcyBhIGxpdHRsZSBiaXQgc3R1cGlkKS4KKyAgICovCisgIHsKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIGdjcnlfbWRfaGRfdCBoOworCisgICAgaWYgKF9nY3J5X21kX29wZW4gKCZoLCBHQ1JZX01EX1NIQTEsIDApKQorICAgICAgcmV0dXJuICJTSEExIG5vdCBhdmFpbGFibGUiOworCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyArK2kpCisgICAgICBfZ2NyeV9tZF93cml0ZSAoaCwgd2Vha19rZXlzW2ldLCA4KTsKKyAgICBwID0gX2djcnlfbWRfcmVhZCAoaCwgR0NSWV9NRF9TSEExKTsKKyAgICBpID0gbWVtY21wIChwLCB3ZWFrX2tleXNfY2hrc3VtLCAyMCk7CisgICAgX2djcnlfbWRfY2xvc2UgKGgpOworICAgIGlmIChpKQorICAgICAgcmV0dXJuICJ3ZWFrIGtleSB0YWJsZSBkZWZlY3QiOworCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyArK2kpCisgICAgICBpZiAoIWlzX3dlYWtfa2V5KHdlYWtfa2V5c1tpXSkpCisgICAgICAgIHJldHVybiAiREVTIHdlYWsga2V5IGRldGVjdGlvbiBmYWlsZWQiOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZG9fdHJpcGxlZGVzX3NldGtleSAoIHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQga2V5bGVuICkKK3sKKyAgc3RydWN0IF90cmlwbGVkZXNfY3R4ICpjdHggPSAoc3RydWN0IF90cmlwbGVkZXNfY3R4ICopIGNvbnRleHQ7CisKKyAgaWYoIGtleWxlbiAhPSAyNCApCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICB0cmlwbGVkZXNfc2V0M2tleXMgKCBjdHgsIGtleSwga2V5KzgsIGtleSsxNik7CisKKyAgaWYgKGN0eC0+ZmxhZ3Mubm9fd2Vha19rZXkpCisgICAgOyAvKiBEZXRlY3Rpb24gaGFzIGJlZW4gZGlzYWJsZWQuICAqLworICBlbHNlIGlmIChpc193ZWFrX2tleSAoa2V5KSB8fCBpc193ZWFrX2tleSAoa2V5KzgpIHx8IGlzX3dlYWtfa2V5IChrZXkrMTYpKQorICAgIHsKKyAgICAgIF9nY3J5X2J1cm5fc3RhY2sgKDY0KTsKKyAgICAgIHJldHVybiBHUEdfRVJSX1dFQUtfS0VZOworICAgIH0KKyAgX2djcnlfYnVybl9zdGFjayAoNjQpOworCisgIHJldHVybiBHUEdfRVJSX05PX0VSUk9SOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX3RyaXBsZWRlc19zZXRfZXh0cmFfaW5mbyAodm9pZCAqY29udGV4dCwgaW50IHdoYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgc3RydWN0IF90cmlwbGVkZXNfY3R4ICpjdHggPSAoc3RydWN0IF90cmlwbGVkZXNfY3R4ICopY29udGV4dDsKKyAgZ3BnX2Vycl9jb2RlX3QgZWMgPSAwOworCisgICh2b2lkKWJ1ZmZlcjsKKyAgKHZvaWQpYnVmbGVuOworCisgIHN3aXRjaCAod2hhdCkKKyAgICB7CisgICAgY2FzZSBDSVBIRVJfSU5GT19OT19XRUFLX0tFWToKKyAgICAgIGN0eC0+ZmxhZ3Mubm9fd2Vha19rZXkgPSAxOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZWMgPSBHUEdfRVJSX0lOVl9PUDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIGVjOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RvX3RyaXBsZWRlc19lbmNyeXB0KCB2b2lkICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmICkKK3sKKyAgc3RydWN0IF90cmlwbGVkZXNfY3R4ICpjdHggPSAoc3RydWN0IF90cmlwbGVkZXNfY3R4ICopIGNvbnRleHQ7CisKKyAgdHJpcGxlZGVzX2VjYl9lbmNyeXB0ICggY3R4LCBpbmJ1Ziwgb3V0YnVmICk7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMzIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citkb190cmlwbGVkZXNfZGVjcnlwdCggdm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZiApCit7CisgIHN0cnVjdCBfdHJpcGxlZGVzX2N0eCAqY3R4ID0gKHN0cnVjdCBfdHJpcGxlZGVzX2N0eCAqKSBjb250ZXh0OworICB0cmlwbGVkZXNfZWNiX2RlY3J5cHQgKCBjdHgsIGluYnVmLCBvdXRidWYgKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgzMik7Cit9CisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX2Rlc19zZXRrZXkgKHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQga2V5bGVuKQoreworICBzdHJ1Y3QgX2Rlc19jdHggKmN0eCA9IChzdHJ1Y3QgX2Rlc19jdHggKikgY29udGV4dDsKKworICBpZiAoa2V5bGVuICE9IDgpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICBkZXNfc2V0a2V5IChjdHgsIGtleSk7CisKKyAgaWYgKGlzX3dlYWtfa2V5IChrZXkpKSB7CisgICAgX2djcnlfYnVybl9zdGFjayAoNjQpOworICAgIHJldHVybiBHUEdfRVJSX1dFQUtfS0VZOworICB9CisgIF9nY3J5X2J1cm5fc3RhY2sgKDY0KTsKKworICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50Citkb19kZXNfZW5jcnlwdCggdm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZiApCit7CisgIHN0cnVjdCBfZGVzX2N0eCAqY3R4ID0gKHN0cnVjdCBfZGVzX2N0eCAqKSBjb250ZXh0OworCisgIGRlc19lY2JfZW5jcnlwdCAoIGN0eCwgaW5idWYsIG91dGJ1ZiApOworICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDMyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZG9fZGVzX2RlY3J5cHQoIHZvaWQgKmNvbnRleHQsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYgKQoreworICBzdHJ1Y3QgX2Rlc19jdHggKmN0eCA9IChzdHJ1Y3QgX2Rlc19jdHggKikgY29udGV4dDsKKworICBkZXNfZWNiX2RlY3J5cHQgKCBjdHgsIGluYnVmLCBvdXRidWYgKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgzMik7Cit9CisKKworCisMCisvKgorICAgICBTZWxmLXRlc3Qgc2VjdGlvbi4KKyAqLworCisKKy8qIFNlbGZ0ZXN0IGZvciBUcmlwbGVERVMuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitzZWxmdGVzdF9maXBzIChpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisKKyAgKHZvaWQpZXh0ZW5kZWQ7IC8qIE5vIGV4dGVuZGVkIHRlc3RzIGF2YWlsYWJsZS4gICovCisKKyAgd2hhdCA9ICJsb3ctbGV2ZWwiOworICBlcnJ0eHQgPSBzZWxmdGVzdCAoKTsKKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworICAvKiBUaGUgbG93LWxldmVsIHNlbGYtdGVzdHMgYXJlIHF1aXRlIGV4dGVuc2l2ZSBhbmQgdGh1cyB3ZSBjYW4gZG8KKyAgICAgd2l0aG91dCBoaWdoIGxldmVsIHRlc3RzLiAgVGhpcyBpcyBhbHNvIGp1c3RpZmllZCBiZWNhdXNlIHdlIGhhdmUKKyAgICAgbm8gY3VzdG9tIGJsb2NrIGNvZGUgaW1wbGVtZW50YXRpb24gZm9yIDNkZXMgYnV0IGFsd2F5cyB1c2UgdGhlCisgICAgIHN0YW5kYXJkIGhpZ2ggbGV2ZWwgYmxvY2sgY29kZS4gICovCisKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KKworIGZhaWxlZDoKKyAgaWYgKHJlcG9ydCkKKyAgICByZXBvcnQgKCJjaXBoZXIiLCBHQ1JZX0NJUEhFUl8zREVTLCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworCisvKiBSdW4gYSBmdWxsIHNlbGYtdGVzdCBmb3IgQUxHTyBhbmQgcmV0dXJuIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3J1bl9zZWxmdGVzdHMgKGludCBhbGdvLCBpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgR0NSWV9DSVBIRVJfM0RFUzoKKyAgICAgIGVjID0gc2VsZnRlc3RfZmlwcyAoZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZWMgPSBHUEdfRVJSX0NJUEhFUl9BTEdPOworICAgICAgYnJlYWs7CisKKyAgICB9CisgIHJldHVybiBlYzsKK30KKworCisMCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfZGVzID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0RFUywgezAsIDB9LAorICAgICJERVMiLCBOVUxMLCBOVUxMLCA4LCA2NCwgc2l6ZW9mIChzdHJ1Y3QgX2Rlc19jdHgpLAorICAgIGRvX2Rlc19zZXRrZXksIGRvX2Rlc19lbmNyeXB0LCBkb19kZXNfZGVjcnlwdAorICB9OworCitzdGF0aWMgZ2NyeV9jaXBoZXJfb2lkX3NwZWNfdCBvaWRzX3RyaXBsZWRlc1tdID0KKyAgeworICAgIHsgIjEuMi44NDAuMTEzNTQ5LjMuNyIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgLyogVGVsZXRydXN0IHNwZWNpZmljIE9JRCBmb3IgM0RFUy4gKi8KKyAgICB7ICIxLjMuMzYuMy4xLjMuMi4xIiwgICBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgIC8qIHBiZVdpdGhTSEFBbmQzX0tleVRyaXBsZURFU19DQkMgKi8KKyAgICB7ICIxLjIuODQwLjExMzU0OS4xLjEyLjEuMyIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX3RyaXBsZWRlcyA9CisgIHsKKyAgICBHQ1JZX0NJUEhFUl8zREVTLCB7MCwgMX0sCisgICAgIjNERVMiLCBOVUxMLCBvaWRzX3RyaXBsZWRlcywgOCwgMTkyLCBzaXplb2YgKHN0cnVjdCBfdHJpcGxlZGVzX2N0eCksCisgICAgZG9fdHJpcGxlZGVzX3NldGtleSwgZG9fdHJpcGxlZGVzX2VuY3J5cHQsIGRvX3RyaXBsZWRlc19kZWNyeXB0LAorICAgIE5VTEwsIE5VTEwsCisgICAgcnVuX3NlbGZ0ZXN0cywKKyAgICBkb190cmlwbGVkZXNfc2V0X2V4dHJhX2luZm8KKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9kc2EtY29tbW9uLmMgYi9jaXBoZXIvZHNhLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZTQyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZHNhLWNvbW1vbi5jCkBAIC0wLDAgKzEsMzk0IEBACisvKiBkc2EtY29tbW9uLmMgLSBDb21tb24gY29kZSBmb3IgRFNBCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJwdWJrZXktaW50ZXJuYWwuaCIKKworCisvKgorICogR2VuZXJhdGUgYSByYW5kb20gc2VjcmV0IGV4cG9uZW50IEsgbGVzcyB0aGFuIFEuCisgKiBOb3RlIHRoYXQgRUNEU0EgdXNlcyB0aGlzIGNvZGUgYWxzbyB0byBnZW5lcmF0ZSBELgorICovCitnY3J5X21waV90CitfZ2NyeV9kc2FfZ2VuX2sgKGdjcnlfbXBpX3QgcSwgaW50IHNlY3VyaXR5X2xldmVsKQoreworICBnY3J5X21waV90IGsgICAgICAgID0gbXBpX2FsbG9jX3NlY3VyZSAobXBpX2dldF9ubGltYnMgKHEpKTsKKyAgdW5zaWduZWQgaW50IG5iaXRzICA9IG1waV9nZXRfbmJpdHMgKHEpOworICB1bnNpZ25lZCBpbnQgbmJ5dGVzID0gKG5iaXRzKzcpLzg7CisgIGNoYXIgKnJuZGJ1ZiA9IE5VTEw7CisKKyAgLyogVG8gbGVhcm4gd2h5IHdlIGRvbid0IHVzZSBtcGlfbW9kIHRvIGdldCB0aGUgcmVxdWVzdGVkIGJpdCBzaXplLAorICAgICByZWFkIHRoZSBwYXBlcjogIlRoZSBJbnNlY3VyaXR5IG9mIHRoZSBEaWdpdGFsIFNpZ25hdHVyZQorICAgICBBbGdvcml0aG0gd2l0aCBQYXJ0aWFsbHkgS25vd24gTm9uY2VzIiBieSBOZ3V5ZW4gYW5kIFNocGFybGluc2tpLgorICAgICBKb3VybmFsIG9mIENyeXB0b2xvZ3ksIE5ldyBZb3JrLiBWb2wgMTUsIG5yIDMgKDIwMDMpICAqLworCisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImNob29zaW5nIGEgcmFuZG9tIGsgb2YgJXUgYml0cyBhdCBzZWNsZXZlbCAlZFxuIiwKKyAgICAgICAgICAgICAgIG5iaXRzLCBzZWN1cml0eV9sZXZlbCk7CisgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKCAhcm5kYnVmIHx8IG5iaXRzIDwgMzIgKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUgKHJuZGJ1Zik7CisgICAgICAgICAgcm5kYnVmID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAobmJ5dGVzLCBzZWN1cml0eV9sZXZlbCk7CisJfQorICAgICAgZWxzZQorICAgICAgICB7IC8qIENoYW5nZSBvbmx5IHNvbWUgb2YgdGhlIGhpZ2hlciBiaXRzLiAgV2UgY291bGQgaW1wcm92ZQorCSAgICAgdGhpcyBieSBkaXJlY3RseSByZXF1ZXN0aW5nIG1vcmUgbWVtb3J5IGF0IHRoZSBmaXJzdCBjYWxsCisJICAgICB0byBnZXRfcmFuZG9tX2J5dGVzKCkgYW5kIHVzZSB0aGVzZSBleHRyYSBieXRlcyBoZXJlLgorCSAgICAgSG93ZXZlciB0aGUgcmVxdWlyZWQgbWFuYWdlbWVudCBjb2RlIGlzIG1vcmUgY29tcGxleCBhbmQKKwkgICAgIHRodXMgd2UgYmV0dGVyIHVzZSB0aGlzIHNpbXBsZSBtZXRob2QuICAqLworICAgICAgICAgIGNoYXIgKnBwID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoNCwgc2VjdXJpdHlfbGV2ZWwpOworICAgICAgICAgIG1lbWNweSAocm5kYnVmLCBwcCwgNCk7CisgICAgICAgICAgeGZyZWUgKHBwKTsKKwl9CisgICAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciAoaywgcm5kYnVmLCBuYnl0ZXMsIDApOworCisgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBiaXRzLiAgVGhpcyBjb2RlCisgICAgICAgICBsb29rcyBhIGJpdCBmdW5ueSBidXQgaXQgaXMgZWFzeSB0byB1bmRlcnN0YW5kIGlmIHlvdQorICAgICAgICAgY29uc2lkZXIgdGhhdCBtcGlfc2V0X2hpZ2hiaXQgY2xlYXJzIGFsbCBoaWdoZXIgYml0cy4gIFdlCisgICAgICAgICBkb24ndCBoYXZlIGEgY2xlYXJfaGlnaGJpdCwgdGh1cyB3ZSBmaXJzdCBzZXQgdGhlIGhpZ2ggYml0CisgICAgICAgICBhbmQgdGhlbiBjbGVhciBpdCBhZ2Fpbi4gICovCisgICAgICBpZiAobXBpX3Rlc3RfYml0IChrLCBuYml0cy0xKSkKKyAgICAgICAgbXBpX3NldF9oaWdoYml0IChrLCBuYml0cy0xKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIG1waV9zZXRfaGlnaGJpdCAoaywgbmJpdHMtMSk7CisgICAgICAgICAgbXBpX2NsZWFyX2JpdCAoaywgbmJpdHMtMSk7CisJfQorCisgICAgICBpZiAoIShtcGlfY21wIChrLCBxKSA8IDApKSAgICAvKiBjaGVjazogayA8IHEgKi8KKyAgICAgICAgeworICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgbG9nX2RlYnVnICgiXHRrIHRvbyBsYXJnZSAtIGFnYWluXG4iKTsKKyAgICAgICAgICBjb250aW51ZTsgLyogbm8gICovCisgICAgICAgIH0KKyAgICAgIGlmICghKG1waV9jbXBfdWkgKGssIDApID4gMCkpIC8qIGNoZWNrOiBrID4gMCAqLworICAgICAgICB7CisgICAgICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgICAgICBsb2dfZGVidWcgKCJcdGsgaXMgemVybyAtIGFnYWluXG4iKTsKKyAgICAgICAgICBjb250aW51ZTsgLyogbm8gKi8KKyAgICAgICAgfQorICAgICAgYnJlYWs7CS8qIG9rYXkgKi8KKyAgICB9CisgIHhmcmVlIChybmRidWYpOworCisgIHJldHVybiBrOworfQorCisKKy8qIFR1cm4gVkFMVUUgaW50byBhbiBvY3RldCBzdHJpbmcgYW5kIHN0b3JlIGl0IGluIGFuIGFsbG9jYXRlZCBidWZmZXIKKyAgIGF0IFJfRlJBTUUuICBJZiB0aGUgcmVzdWx0aW5nIG9jdGV0IHN0cmluZyBpcyBzaG9ydGVyIHRoYW4gTkJZVEVTCisgICB0aGUgcmVzdWx0IHdpbGwgYmUgbGVmdCBwYWRkZWQgd2l0aCB6ZXJvZXMuICBJZiBWQUxVRSBkb2VzIG5vdCBmaXQKKyAgIGludG8gTkJZVEVTIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitpbnQyb2N0ZXRzICh1bnNpZ25lZCBjaGFyICoqcl9mcmFtZSwgZ2NyeV9tcGlfdCB2YWx1ZSwgc2l6ZV90IG5ieXRlcykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHNpemVfdCBuZnJhbWUsIG5vZmYsIG47CisgIHVuc2lnbmVkIGNoYXIgKmZyYW1lOworCisgIHJjID0gX2djcnlfbXBpX3ByaW50IChHQ1JZTVBJX0ZNVF9VU0csIE5VTEwsIDAsICZuZnJhbWUsIHZhbHVlKTsKKyAgaWYgKHJjKQorICAgIHJldHVybiByYzsKKyAgaWYgKG5mcmFtZSA+IG5ieXRlcykKKyAgICByZXR1cm4gR1BHX0VSUl9UT09fTEFSR0U7IC8qIFZhbHVlIHRvbyBsb25nIHRvIGZpdCBpbnRvIE5CWVRFUy4gICovCisKKyAgbm9mZiA9IChuZnJhbWUgPCBuYnl0ZXMpPyBuYnl0ZXMgLSBuZnJhbWUgOiAwOworICBuID0gbmZyYW1lICsgbm9mZjsKKyAgZnJhbWUgPSBtcGlfaXNfc2VjdXJlICh2YWx1ZSk/IHh0cnltYWxsb2Nfc2VjdXJlIChuKSA6IHh0cnltYWxsb2MgKG4pOworICBpZiAoIWZyYW1lKQorICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgaWYgKG5vZmYpCisgICAgbWVtc2V0IChmcmFtZSwgMCwgbm9mZik7CisgIG5mcmFtZSArPSBub2ZmOworICByYyA9IF9nY3J5X21waV9wcmludCAoR0NSWU1QSV9GTVRfVVNHLCBmcmFtZStub2ZmLCBuZnJhbWUtbm9mZiwgTlVMTCwgdmFsdWUpOworICBpZiAocmMpCisgICAgeworICAgICAgeGZyZWUgKGZyYW1lKTsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgKnJfZnJhbWUgPSBmcmFtZTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogQ29ubmVydCB0aGUgYml0IHN0cmluZyBCSVRTIG9mIGxlbmd0aCBOQklUUyBpbnRvIGFuIG9jdGV0IHN0cmluZworICAgd2l0aCBhIGxlbmd0aCBvZiAoUUJJVFMrNykvOCBieXRlcy4gIE9uIHN1Y2Nlc3Mgc3RvcmUgdGhlIHJlc3VsdCBhdAorICAgUl9GUkFNRS4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK2JpdHMyb2N0ZXRzICh1bnNpZ25lZCBjaGFyICoqcl9mcmFtZSwKKyAgICAgICAgICAgICBjb25zdCB2b2lkICpiaXRzLCB1bnNpZ25lZCBpbnQgbmJpdHMsCisgICAgICAgICAgICAgZ2NyeV9tcGlfdCBxLCB1bnNpZ25lZCBpbnQgcWJpdHMpCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICBnY3J5X21waV90IHoxOworCisgIC8qIHoxID0gYml0czJpbnQgKGIpICovCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZ6MSwgR0NSWU1QSV9GTVRfVVNHLCBiaXRzLCAobmJpdHMrNykvOCwgTlVMTCk7CisgIGlmIChyYykKKyAgICByZXR1cm4gcmM7CisgIGlmIChuYml0cyA+IHFiaXRzKQorICAgIG1waV9yc2hpZnQgKHoxLCB6MSwgbmJpdHMgLSBxYml0cyk7CisKKyAgLyogejIgLSB6MSBtb2QgcSAqLworICBpZiAobXBpX2NtcCAoejEsIHEpID49IDApCisgICAgbXBpX3N1YiAoejEsIHoxLCBxKTsKKworICAvKiBDb252ZXJ0IHRvIGFuIG9jdGV0IHN0cmluZy4gICovCisgIHJjID0gaW50Mm9jdGV0cyAocl9mcmFtZSwgejEsIChxYml0cys3KS84KTsKKworICBtcGlfZnJlZSAoejEpOworICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBzZWNyZXQgZXhwb25lbnQgSyBsZXNzIHRoYW4gRFNBX1EuICBIMSBpcworICogdGhlIHRvIGJlIHNpZ25lZCBkaWdlc3Qgd2l0aCBhIGxlbmd0aCBvZiBITEVOIGJ5dGVzLiAgSEFMR08gaXMgdGhlCisgKiBhbGdvcml0aG0gdXNlZCB0byBjcmVhdGUgdGhlIGhhc2guICBPbiBzdWNjZXNzIHRoZSB2YWx1ZSBmb3IgSyBpcworICogc3RvcmVkIGF0IFJfSy4KKyAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2RzYV9nZW5fcmZjNjk3OV9rIChnY3J5X21waV90ICpyX2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBkc2FfcSwgZ2NyeV9tcGlfdCBkc2FfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoMSwgdW5zaWduZWQgaW50IGhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhbGdvLCB1bnNpZ25lZCBpbnQgZXh0cmFsb29wcykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHVuc2lnbmVkIGNoYXIgKlYgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpLID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqeF9idWYgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpoMV9idWYgPSBOVUxMOworICBnY3J5X21kX2hkX3QgaGQgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICp0ID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBrID0gTlVMTDsKKyAgdW5zaWduZWQgaW50IHRiaXRzLCBxYml0czsKKyAgaW50IGk7CisKKyAgcWJpdHMgPSBtcGlfZ2V0X25iaXRzIChkc2FfcSk7CisKKyAgaWYgKCFxYml0cyB8fCAhaDEgfHwgIWhsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfRUlOVkFMOworCisgIGlmIChfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChoYWxnbykgIT0gaGxlbikKKyAgICByZXR1cm4gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKworICAvKiBTdGVwIGI6ICBWID0gMHgwMSAweDAxIDB4MDEgLi4uIDB4MDEgKi8KKyAgViA9IHh0cnltYWxsb2MgKGhsZW4pOworICBpZiAoIVYpCisgICAgeworICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBmb3IgKGk9MDsgaSA8IGhsZW47IGkrKykKKyAgICBWW2ldID0gMTsKKworICAvKiBTdGVwIGM6ICBLID0gMHgwMCAweDAwIDB4MDAgLi4uIDB4MDAgKi8KKyAgSyA9IHh0cnljYWxsb2MgKDEsIGhsZW4pOworICBpZiAoIUspCisgICAgeworICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHJjID0gaW50Mm9jdGV0cyAoJnhfYnVmLCBkc2FfeCwgKHFiaXRzKzcpLzgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICByYyA9IGJpdHMyb2N0ZXRzICgmaDFfYnVmLCBoMSwgaGxlbio4LCBkc2FfcSwgcWJpdHMpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBDcmVhdGUgYSBoYW5kbGUgdG8gY29tcHV0ZSB0aGUgSE1BQ3MuICAqLworICByYyA9IF9nY3J5X21kX29wZW4gKCZoZCwgaGFsZ28sIChHQ1JZX01EX0ZMQUdfU0VDVVJFIHwgR0NSWV9NRF9GTEFHX0hNQUMpKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgLyogU3RlcCBkOiAgSyA9IEhNQUNfSyhWIHx8IDB4MDAgfHwgaW50Mm9jdGV0cyh4KSB8fCBiaXRzMm9jdGV0cyhoMSkgKi8KKyAgcmMgPSBfZ2NyeV9tZF9zZXRrZXkgKGhkLCBLLCBobGVuKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIF9nY3J5X21kX3dyaXRlIChoZCwgViwgaGxlbik7CisgIF9nY3J5X21kX3dyaXRlIChoZCwgIiIsIDEpOworICBfZ2NyeV9tZF93cml0ZSAoaGQsIHhfYnVmLCAocWJpdHMrNykvOCk7CisgIF9nY3J5X21kX3dyaXRlIChoZCwgaDFfYnVmLCAocWJpdHMrNykvOCk7CisgIG1lbWNweSAoSywgX2djcnlfbWRfcmVhZCAoaGQsIDApLCBobGVuKTsKKworICAvKiBTdGVwIGU6ICBWID0gSE1BQ19LKFYpICovCisgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoZCwgSywgaGxlbik7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBfZ2NyeV9tZF93cml0ZSAoaGQsIFYsIGhsZW4pOworICBtZW1jcHkgKFYsIF9nY3J5X21kX3JlYWQgKGhkLCAwKSwgaGxlbik7CisKKyAgLyogU3RlcCBmOiAgSyA9IEhNQUNfSyhWIHx8IDB4MDEgfHwgaW50Mm9jdGV0cyh4KSB8fCBiaXRzMm9jdGV0cyhoMSkgKi8KKyAgcmMgPSBfZ2NyeV9tZF9zZXRrZXkgKGhkLCBLLCBobGVuKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIF9nY3J5X21kX3dyaXRlIChoZCwgViwgaGxlbik7CisgIF9nY3J5X21kX3dyaXRlIChoZCwgIlx4MDEiLCAxKTsKKyAgX2djcnlfbWRfd3JpdGUgKGhkLCB4X2J1ZiwgKHFiaXRzKzcpLzgpOworICBfZ2NyeV9tZF93cml0ZSAoaGQsIGgxX2J1ZiwgKHFiaXRzKzcpLzgpOworICBtZW1jcHkgKEssIF9nY3J5X21kX3JlYWQgKGhkLCAwKSwgaGxlbik7CisKKyAgLyogU3RlcCBnOiAgViA9IEhNQUNfSyhWKSAqLworICByYyA9IF9nY3J5X21kX3NldGtleSAoaGQsIEssIGhsZW4pOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgX2djcnlfbWRfd3JpdGUgKGhkLCBWLCBobGVuKTsKKyAgbWVtY3B5IChWLCBfZ2NyeV9tZF9yZWFkIChoZCwgMCksIGhsZW4pOworCisgIC8qIFN0ZXAgaC4gKi8KKyAgdCA9IHh0cnltYWxsb2MgKChxYml0cys3KS84K2hsZW4pOworICBpZiAoIXQpCisgICAgeworICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgYWdhaW46CisgIGZvciAodGJpdHMgPSAwOyB0Yml0cyA8IHFiaXRzOykKKyAgICB7CisgICAgICAvKiBWID0gSE1BQ19LKFYpICovCisgICAgICByYyA9IF9nY3J5X21kX3NldGtleSAoaGQsIEssIGhsZW4pOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgICAgX2djcnlfbWRfd3JpdGUgKGhkLCBWLCBobGVuKTsKKyAgICAgIG1lbWNweSAoViwgX2djcnlfbWRfcmVhZCAoaGQsIDApLCBobGVuKTsKKworICAgICAgLyogVCA9IFQgfHwgViAqLworICAgICAgbWVtY3B5ICh0Kyh0Yml0cys3KS84LCBWLCBobGVuKTsKKyAgICAgIHRiaXRzICs9IDgqaGxlbjsKKyAgICB9CisKKyAgLyogayA9IGJpdHMyaW50IChUKSAqLworICBtcGlfZnJlZSAoayk7CisgIGsgPSBOVUxMOworICByYyA9IF9nY3J5X21waV9zY2FuICgmaywgR0NSWU1QSV9GTVRfVVNHLCB0LCAodGJpdHMrNykvOCwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAodGJpdHMgPiBxYml0cykKKyAgICBtcGlfcnNoaWZ0IChrLCBrLCB0Yml0cyAtIHFiaXRzKTsKKworICAvKiBDaGVjazogayA8IHEgYW5kIGsgPiAxICovCisgIGlmICghKG1waV9jbXAgKGssIGRzYV9xKSA8IDAgJiYgbXBpX2NtcF91aSAoaywgMCkgPiAwKSkKKyAgICB7CisgICAgICAvKiBLID0gSE1BQ19LKFYgfHwgMHgwMCkgKi8KKyAgICAgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoZCwgSywgaGxlbik7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICBfZ2NyeV9tZF93cml0ZSAoaGQsIFYsIGhsZW4pOworICAgICAgX2djcnlfbWRfd3JpdGUgKGhkLCAiIiwgMSk7CisgICAgICBtZW1jcHkgKEssIF9nY3J5X21kX3JlYWQgKGhkLCAwKSwgaGxlbik7CisKKyAgICAgIC8qIFYgPSBITUFDX0soVikgKi8KKyAgICAgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoZCwgSywgaGxlbik7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICBfZ2NyeV9tZF93cml0ZSAoaGQsIFYsIGhsZW4pOworICAgICAgbWVtY3B5IChWLCBfZ2NyeV9tZF9yZWFkIChoZCwgMCksIGhsZW4pOworCisgICAgICBnb3RvIGFnYWluOworICAgIH0KKworICAvKiBUaGUgY2FsbGVyIG1heSBoYXZlIHJlcXVlc3RlZCB0aGF0IHdlIGludHJvZHVjZSBzb21lIGV4dHJhIGxvb3BzLgorICAgICBUaGlzIGlzIGZvciBleGFtcGxlIHVzZWZ1bCBpZiB0aGUgY2FsbGVyIHdhbnRzIGFub3RoZXIgdmFsdWUgZm9yCisgICAgIEsgYmVjYXVzZSB0aGUgbGFzdCByZXR1cm5lZCBvbmUgeWllbGRlZCBhbiBSIG9mIDAuICBCZWN1YXNlIHRoaXMKKyAgICAgaXMgdmVyeSB1bmxpa2VseSB3ZSBpbXBsZW1lbnQgaXQgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LiAgKi8KKyAgaWYgKGV4dHJhbG9vcHMpCisgICAgeworICAgICAgZXh0cmFsb29wcy0tOworCisgICAgICAvKiBLID0gSE1BQ19LKFYgfHwgMHgwMCkgKi8KKyAgICAgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoZCwgSywgaGxlbik7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICBfZ2NyeV9tZF93cml0ZSAoaGQsIFYsIGhsZW4pOworICAgICAgX2djcnlfbWRfd3JpdGUgKGhkLCAiIiwgMSk7CisgICAgICBtZW1jcHkgKEssIF9nY3J5X21kX3JlYWQgKGhkLCAwKSwgaGxlbik7CisKKyAgICAgIC8qIFYgPSBITUFDX0soVikgKi8KKyAgICAgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoZCwgSywgaGxlbik7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICBfZ2NyeV9tZF93cml0ZSAoaGQsIFYsIGhsZW4pOworICAgICAgbWVtY3B5IChWLCBfZ2NyeV9tZF9yZWFkIChoZCwgMCksIGhsZW4pOworCisgICAgICBnb3RvIGFnYWluOworICAgIH0KKworICAvKiBsb2dfbXBpZHVtcCAoIiAgayIsIGspOyAqLworCisgbGVhdmU6CisgIHhmcmVlICh0KTsKKyAgX2djcnlfbWRfY2xvc2UgKGhkKTsKKyAgeGZyZWUgKGgxX2J1Zik7CisgIHhmcmVlICh4X2J1Zik7CisgIHhmcmVlIChLKTsKKyAgeGZyZWUgKFYpOworCisgIGlmIChyYykKKyAgICBtcGlfZnJlZSAoayk7CisgIGVsc2UKKyAgICAqcl9rID0gazsKKyAgcmV0dXJuIHJjOworfQorCisvKgorICogVHJ1bmNhdGUgb3BhcXVlIGhhc2ggdmFsdWUgdG8gcWJpdHMgZm9yIERTQS4KKyAqIE5vbi1vcGFxdWUgaW5wdXQgaXMgbm90IHRydW5jYXRlZCwgaW4gaG9wZSB0aGF0IHVzZXIKKyAqIGtub3dzIHdoYXQgaXMgcGFzc2VkLiBJdCBpcyBub3QgcG9zc2libGUgdG8gY29ycmVjdGx5CisgKiB0cnVjYXRlIG5vbi1vcGFxdWUgaW5wdXRzLgorICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZHNhX25vcm1hbGl6ZV9oYXNoIChnY3J5X21waV90IGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICpvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxYml0cykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmMgPSAwOworICBjb25zdCB2b2lkICphYnVmOworICB1bnNpZ25lZCBpbnQgYWJpdHM7CisgIGdjcnlfbXBpX3QgaGFzaDsKKworICBpZiAobXBpX2lzX29wYXF1ZSAoaW5wdXQpKQorICAgIHsKKyAgICAgIGFidWYgPSBtcGlfZ2V0X29wYXF1ZSAoaW5wdXQsICZhYml0cyk7CisgICAgICByYyA9IF9nY3J5X21waV9zY2FuICgmaGFzaCwgR0NSWU1QSV9GTVRfVVNHLCBhYnVmLCAoYWJpdHMrNykvOCwgTlVMTCk7CisgICAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKyAgICAgIGlmIChhYml0cyA+IHFiaXRzKQorICAgICAgICBtcGlfcnNoaWZ0IChoYXNoLCBoYXNoLCBhYml0cyAtIHFiaXRzKTsKKyAgICB9CisgIGVsc2UKKyAgICBoYXNoID0gaW5wdXQ7CisKKyAgKm91dCA9IGhhc2g7CisKKyAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2RzYS5jIGIvY2lwaGVyL2RzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDdkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZHNhLmMKQEAgLTAsMCArMSwxMjk1IEBACisvKiBkc2EuYyAtIERTQSBzaWduYXR1cmUgYWxnb3JpdGhtCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsCisgKiAgICAgICAgICAgICAgIDIwMDYsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkguCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAibXBpLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAicHVia2V5LWludGVybmFsLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tcGlfdCBwOwkgICAgLyogcHJpbWUgKi8KKyAgZ2NyeV9tcGlfdCBxOwkgICAgLyogZ3JvdXAgb3JkZXIgKi8KKyAgZ2NyeV9tcGlfdCBnOwkgICAgLyogZ3JvdXAgZ2VuZXJhdG9yICovCisgIGdjcnlfbXBpX3QgeTsJICAgIC8qIGdeeCBtb2QgcCAqLworfSBEU0FfcHVibGljX2tleTsKKworCit0eXBlZGVmIHN0cnVjdAoreworICBnY3J5X21waV90IHA7CSAgICAvKiBwcmltZSAqLworICBnY3J5X21waV90IHE7CSAgICAvKiBncm91cCBvcmRlciAqLworICBnY3J5X21waV90IGc7CSAgICAvKiBncm91cCBnZW5lcmF0b3IgKi8KKyAgZ2NyeV9tcGlfdCB5OwkgICAgLyogZ154IG1vZCBwICovCisgIGdjcnlfbXBpX3QgeDsJICAgIC8qIHNlY3JldCBleHBvbmVudCAqLworfSBEU0Ffc2VjcmV0X2tleTsKKworCisvKiBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgZG9tYWluIHBhcmFtZXRlcnMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tcGlfdCBwOwkgICAgLyogcHJpbWUgKi8KKyAgZ2NyeV9tcGlfdCBxOwkgICAgLyogZ3JvdXAgb3JkZXIgKi8KKyAgZ2NyeV9tcGlfdCBnOwkgICAgLyogZ3JvdXAgZ2VuZXJhdG9yICovCit9IGRzYV9kb21haW5fdDsKKworCitzdGF0aWMgY29uc3QgY2hhciAqZHNhX25hbWVzW10gPQorICB7CisgICAgImRzYSIsCisgICAgIm9wZW5wZ3AtZHNhIiwKKyAgICBOVUxMLAorICB9OworCisKKy8qIEEgc2FtcGxlIDEwMjQgYml0IERTQSBrZXkgdXNlZCBmb3IgdGhlIHNlbGZ0ZXN0cy4gICovCitzdGF0aWMgY29uc3QgY2hhciBzYW1wbGVfc2VjcmV0X2tleVtdID0KKyIocHJpdmF0ZS1rZXkiCisiIChkc2EiCisiICAocCAjMDBBRDdDMDAyNUJBMUExNUY3NzVGM0YyRDY3MzcxODM5MUQwMDQ1Njk3OEQzNDdCMzNEN0I0OUU3RjMyRURBQiIKKyIgICAgICA5NjI3Mzg5OUREOEIyQkI0NkNENkVDQTI2M0ZBRjA0QTI4OTAzNTAzRDU5MDYyQTg4NjVEMkFFOEFERkI1MTkxIgorIiAgICAgIENGMzZGRkI1NjJEMEUyRjU4MDk4MDFBMUY2NzVEQUU1OTY5OEE5RTAxRUZFOEQ3RENGQ0EwODRGNEM2RjVBNDQiCisiICAgICAgNDRENDk5QTA2RkZBRUE1RThFRjVFMDFGMkZEMjBBN0I3RUYzRjY5NjhBRkJBMUZCOEQ5MUYxNTU5RDUyRDg3NzdCIykiCisiICAocSAjMDBFQjdCNTc1MUQyNUVCQkI3QkQ1OUQ5MjAzMTVGRDg0MEUxOUFFQkY5IykiCisiICAoZyAjMTU3NDM2MzM4N0ZERkQxRERGMzhGNEZCRTEzNUJCMjBDN0VFNDc3MkZCOTRDMzM3QUY4NkVBOEU0OTY2NjUwMyIKKyIgICAgICBBRTA0QjZCRTgxQTJGOEREMDk1MzExRTAyMTdBQ0E2OThBMTFFNkM1RDMzQ0NEQUU3MTQ5OEVEMzVEMTM5OTFFIgorIiAgICAgIEIwMkYwOUFCNDBCRDhGNEM1RUQ4Qzc1REE3NzlEMEFFMTA0QkMzNEM5NjBCMDAyMzc3MDY4QUI0QjVBMUY5ODQiCisiICAgICAgM0ZCQTkxRjUzN0YxQjdDQUM0RDhERDZEODlCMEQ4NjNBRjcwMjVENTQ5RjlDNzY1RDJGQzA3RUUyMDhGOEQxNSMpIgorIiAgKHkgIzY0QjExRUY4ODcxQkU0QUI1NzJBQTgxMEQ1RDNDQTExQTZDREJDNjM3QTgwMTQ2MDJDNzI5NjBEQjEzNUJGNDYiCisiICAgICAgQTE4MTZBNzI0QzM0Rjg3MzMwRkM5RTE4N0M1RDY2ODk3QTA0NTM1Q0MyQUM5MTY0QTcxNTBBQkZBODE3OTgyNyIKKyIgICAgICA2RTQ1ODMxQUI4MTFFRUU4NDhFQkIyNEQ5RjVGMjg4M0I2RTVEREM0QzY1OURFRjk0NERDRkQ4MEJGNEQwQTIwIgorIiAgICAgIDQyQ0FBN0RDMjg5RjBDNUE5RDE1NUYwMkQzRDU1MURCNzQxQTgxNjk1Qjc0RDRDOEY0NzdGOUM3ODM4RUIwRkIjKSIKKyIgICh4ICMxMUQ1NEU0QURCRDMwMzQxNjBGMkNFRDRCN0NEMjkyQTRFQkYzRUMwIykpKSI7CisvKiBBIHNhbXBsZSAxMDI0IGJpdCBEU0Ega2V5IHVzZWQgZm9yIHRoZSBzZWxmdGVzdHMgKHB1YmxpYyBvbmx5KS4gICovCitzdGF0aWMgY29uc3QgY2hhciBzYW1wbGVfcHVibGljX2tleVtdID0KKyIocHVibGljLWtleSIKKyIgKGRzYSIKKyIgIChwICMwMEFEN0MwMDI1QkExQTE1Rjc3NUYzRjJENjczNzE4MzkxRDAwNDU2OTc4RDM0N0IzM0Q3QjQ5RTdGMzJFREFCIgorIiAgICAgIDk2MjczODk5REQ4QjJCQjQ2Q0Q2RUNBMjYzRkFGMDRBMjg5MDM1MDNENTkwNjJBODg2NUQyQUU4QURGQjUxOTEiCisiICAgICAgQ0YzNkZGQjU2MkQwRTJGNTgwOTgwMUExRjY3NURBRTU5Njk4QTlFMDFFRkU4RDdEQ0ZDQTA4NEY0QzZGNUE0NCIKKyIgICAgICA0NEQ0OTlBMDZGRkFFQTVFOEVGNUUwMUYyRkQyMEE3QjdFRjNGNjk2OEFGQkExRkI4RDkxRjE1NTlENTJEODc3N0IjKSIKKyIgIChxICMwMEVCN0I1NzUxRDI1RUJCQjdCRDU5RDkyMDMxNUZEODQwRTE5QUVCRjkjKSIKKyIgIChnICMxNTc0MzYzMzg3RkRGRDFEREYzOEY0RkJFMTM1QkIyMEM3RUU0NzcyRkI5NEMzMzdBRjg2RUE4RTQ5NjY2NTAzIgorIiAgICAgIEFFMDRCNkJFODFBMkY4REQwOTUzMTFFMDIxN0FDQTY5OEExMUU2QzVEMzNDQ0RBRTcxNDk4RUQzNUQxMzk5MUUiCisiICAgICAgQjAyRjA5QUI0MEJEOEY0QzVFRDhDNzVEQTc3OUQwQUUxMDRCQzM0Qzk2MEIwMDIzNzcwNjhBQjRCNUExRjk4NCIKKyIgICAgICAzRkJBOTFGNTM3RjFCN0NBQzREOERENkQ4OUIwRDg2M0FGNzAyNUQ1NDlGOUM3NjVEMkZDMDdFRTIwOEY4RDE1IykiCisiICAoeSAjNjRCMTFFRjg4NzFCRTRBQjU3MkFBODEwRDVEM0NBMTFBNkNEQkM2MzdBODAxNDYwMkM3Mjk2MERCMTM1QkY0NiIKKyIgICAgICBBMTgxNkE3MjRDMzRGODczMzBGQzlFMTg3QzVENjY4OTdBMDQ1MzVDQzJBQzkxNjRBNzE1MEFCRkE4MTc5ODI3IgorIiAgICAgIDZFNDU4MzFBQjgxMUVFRTg0OEVCQjI0RDlGNUYyODgzQjZFNUREQzRDNjU5REVGOTQ0RENGRDgwQkY0RDBBMjAiCisiICAgICAgNDJDQUE3REMyODlGMEM1QTlEMTU1RjAyRDNENTUxREI3NDFBODE2OTVCNzRENEM4RjQ3N0Y5Qzc4MzhFQjBGQiMpKSkiOworCisKKworDAorc3RhdGljIGludCB0ZXN0X2tleXMgKERTQV9zZWNyZXRfa2V5ICpzaywgdW5zaWduZWQgaW50IHFiaXRzKTsKK3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0X2tleSAoRFNBX3NlY3JldF9rZXkgKnNrKTsKK3N0YXRpYyBncGdfZXJyX2NvZGVfdCBnZW5lcmF0ZSAoRFNBX3NlY3JldF9rZXkgKnNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5zaWVudF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9kb21haW5fdCAqZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICoqcmV0X2ZhY3RvcnMpOworc3RhdGljIGdwZ19lcnJfY29kZV90IHNpZ24gKGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBzLCBnY3J5X21waV90IGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTQV9zZWNyZXRfa2V5ICpza2V5LCBpbnQgZmxhZ3MsIGludCBoYXNoYWxnbyk7CitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QgdmVyaWZ5IChnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgcywgZ2NyeV9tcGlfdCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICBEU0FfcHVibGljX2tleSAqcGtleSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGRzYV9nZXRfbmJpdHMgKGdjcnlfc2V4cF90IHBhcm1zKTsKKworCitzdGF0aWMgdm9pZCAoKnByb2dyZXNzX2NiKSAodm9pZCAqLGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCApOworc3RhdGljIHZvaWQgKnByb2dyZXNzX2NiX2RhdGE7CisKKwordm9pZAorX2djcnlfcmVnaXN0ZXJfcGtfZHNhX3Byb2dyZXNzICh2b2lkICgqY2IpICh2b2lkICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCksCisJCQkJdm9pZCAqY2JfZGF0YSkKK3sKKyAgcHJvZ3Jlc3NfY2IgPSBjYjsKKyAgcHJvZ3Jlc3NfY2JfZGF0YSA9IGNiX2RhdGE7Cit9CisKKworc3RhdGljIHZvaWQKK3Byb2dyZXNzIChpbnQgYykKK3sKKyAgaWYgKHByb2dyZXNzX2NiKQorICAgIHByb2dyZXNzX2NiIChwcm9ncmVzc19jYl9kYXRhLCAicGtfZHNhIiwgYywgMCwgMCk7Cit9CisKKworLyogQ2hlY2sgdGhhdCBhIGZyZXNobHkgZ2VuZXJhdGVkIGtleSBhY3R1YWxseSB3b3Jrcy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGludAordGVzdF9rZXlzIChEU0Ffc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBxYml0cykKK3sKKyAgaW50IHJlc3VsdCA9IC0xOyAgLyogRGVmYXVsdCB0byBmYWlsdXJlLiAgKi8KKyAgRFNBX3B1YmxpY19rZXkgcGs7CisgIGdjcnlfbXBpX3QgZGF0YSAgPSBtcGlfbmV3IChxYml0cyk7CisgIGdjcnlfbXBpX3Qgc2lnX2EgPSBtcGlfbmV3IChxYml0cyk7CisgIGdjcnlfbXBpX3Qgc2lnX2IgPSBtcGlfbmV3IChxYml0cyk7CisKKyAgLyogUHV0IHRoZSByZWxldmFudCBwYXJhbWV0ZXJzIGludG8gYSBwdWJsaWMga2V5IHN0cnVjdHVyZS4gICovCisgIHBrLnAgPSBzay0+cDsKKyAgcGsucSA9IHNrLT5xOworICBway5nID0gc2stPmc7CisgIHBrLnkgPSBzay0+eTsKKworICAvKiBDcmVhdGUgYSByYW5kb20gcGxhaW50ZXh0LiAgKi8KKyAgX2djcnlfbXBpX3JhbmRvbWl6ZSAoZGF0YSwgcWJpdHMsIEdDUllfV0VBS19SQU5ET00pOworCisgIC8qIFNpZ24gREFUQSB1c2luZyB0aGUgc2VjcmV0IGtleS4gICovCisgIHNpZ24gKHNpZ19hLCBzaWdfYiwgZGF0YSwgc2ssIDAsIDApOworCisgIC8qIFZlcmlmeSB0aGUgc2lnbmF0dXJlIHVzaW5nIHRoZSBwdWJsaWMga2V5LiAgKi8KKyAgaWYgKCB2ZXJpZnkgKHNpZ19hLCBzaWdfYiwgZGF0YSwgJnBrKSApCisgICAgZ290byBsZWF2ZTsgLyogU2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoLiAgKi8KKworICAvKiBNb2RpZnkgdGhlIGRhdGEgYW5kIGNoZWNrIHRoYXQgdGhlIHNpZ25pbmcgZmFpbHMuICAqLworICBtcGlfYWRkX3VpIChkYXRhLCBkYXRhLCAxKTsKKyAgaWYgKCAhdmVyaWZ5IChzaWdfYSwgc2lnX2IsIGRhdGEsICZwaykgKQorICAgIGdvdG8gbGVhdmU7IC8qIFNpZ25hdHVyZSBtYXRjaGVzIGJ1dCBzaG91bGQgbm90LiAgKi8KKworICByZXN1bHQgPSAwOyAvKiBUaGUgdGVzdCBzdWNjZWVkZWQuICAqLworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfYik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfYSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChkYXRhKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisKKy8qCisgICBHZW5lcmF0ZSBhIERTQSBrZXkgcGFpciB3aXRoIGEga2V5IG9mIHNpemUgTkJJVFMuICBJZiB0cmFuc2llbnRfa2V5CisgICBpcyB0cnVlIHRoZSBrZXkgaXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBSTkcgYW5kIG5vdCB0aGUKKyAgIHZlcnkgc2VjdXJlIG9uZS4KKworICAgUmV0dXJuczogMiBzdHJ1Y3R1cmVzIGZpbGxlZCB3aXRoIGFsbCBuZWVkZWQgdmFsdWVzCisgCSAgICBhbmQgYW4gYXJyYXkgd2l0aCB0aGUgbi0xIGZhY3RvcnMgb2YgKHAtMSkKKyAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitnZW5lcmF0ZSAoRFNBX3NlY3JldF9rZXkgKnNrLCB1bnNpZ25lZCBpbnQgbmJpdHMsIHVuc2lnbmVkIGludCBxYml0cywKKyAgICAgICAgICBpbnQgdHJhbnNpZW50X2tleSwgZHNhX2RvbWFpbl90ICpkb21haW4sIGdjcnlfbXBpX3QgKipyZXRfZmFjdG9ycyApCit7CisgIGdjcnlfbXBpX3QgcDsgICAgLyogdGhlIHByaW1lICovCisgIGdjcnlfbXBpX3QgcTsgICAgLyogdGhlIDE2MCBiaXQgcHJpbWUgZmFjdG9yICovCisgIGdjcnlfbXBpX3QgZzsgICAgLyogdGhlIGdlbmVyYXRvciAqLworICBnY3J5X21waV90IHk7ICAgIC8qIGdeeCBtb2QgcCAqLworICBnY3J5X21waV90IHg7ICAgIC8qIHRoZSBzZWNyZXQgZXhwb25lbnQgKi8KKyAgZ2NyeV9tcGlfdCBoLCBlOyAgLyogaGVscGVyICovCisgIHVuc2lnbmVkIGNoYXIgKnJuZGJ1ZjsKKyAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWw7CisKKyAgaWYgKHFiaXRzKQorICAgIDsgLyogQ2FsbGVyIHN1cHBsaWVkIHFiaXRzLiAgVXNlIHRoaXMgdmFsdWUuICAqLworICBlbHNlIGlmICggbmJpdHMgPj0gNTEyICYmIG5iaXRzIDw9IDEwMjQgKQorICAgIHFiaXRzID0gMTYwOworICBlbHNlIGlmICggbmJpdHMgPT0gMjA0OCApCisgICAgcWJpdHMgPSAyMjQ7CisgIGVsc2UgaWYgKCBuYml0cyA9PSAzMDcyICkKKyAgICBxYml0cyA9IDI1NjsKKyAgZWxzZSBpZiAoIG5iaXRzID09IDc2ODAgKQorICAgIHFiaXRzID0gMzg0OworICBlbHNlIGlmICggbmJpdHMgPT0gMTUzNjAgKQorICAgIHFiaXRzID0gNTEyOworICBlbHNlCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworCisgIGlmIChxYml0cyA8IDE2MCB8fCBxYml0cyA+IDUxMiB8fCAocWJpdHMlOCkgKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9WQUxVRTsKKyAgaWYgKG5iaXRzIDwgMipxYml0cyB8fCBuYml0cyA+IDE1MzYwKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9WQUxVRTsKKworICBpZiAoZmlwc19tb2RlICgpKQorICAgIHsKKyAgICAgIGlmIChuYml0cyA8IDEwMjQpCisgICAgICAgIHJldHVybiBHUEdfRVJSX0lOVl9WQUxVRTsKKyAgICAgIGlmICh0cmFuc2llbnRfa2V5KQorICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisgICAgfQorCisgIGlmIChkb21haW4tPnAgJiYgZG9tYWluLT5xICYmIGRvbWFpbi0+ZykKKyAgICB7CisgICAgICAvKiBEb21haW4gcGFyYW1ldGVycyBhcmUgZ2l2ZW47IHVzZSB0aGVtLiAgKi8KKyAgICAgIHAgPSBtcGlfY29weSAoZG9tYWluLT5wKTsKKyAgICAgIHEgPSBtcGlfY29weSAoZG9tYWluLT5xKTsKKyAgICAgIGcgPSBtcGlfY29weSAoZG9tYWluLT5nKTsKKyAgICAgIGdjcnlfYXNzZXJ0IChtcGlfZ2V0X25iaXRzIChwKSA9PSBuYml0cyk7CisgICAgICBnY3J5X2Fzc2VydCAobXBpX2dldF9uYml0cyAocSkgPT0gcWJpdHMpOworICAgICAgaCA9IG1waV9hbGxvYyAoMCk7CisgICAgICBlID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBHZW5lcmF0ZSBuZXcgZG9tYWluIHBhcmFtZXRlcnMuICAqLworICAgICAgcCA9IF9nY3J5X2dlbmVyYXRlX2VsZ19wcmltZSAoMSwgbmJpdHMsIHFiaXRzLCBOVUxMLCByZXRfZmFjdG9ycyk7CisgICAgICAvKiBHZXQgcSBvdXQgb2YgZmFjdG9ycy4gICovCisgICAgICBxID0gbXBpX2NvcHkgKCgqcmV0X2ZhY3RvcnMpWzBdKTsKKyAgICAgIGdjcnlfYXNzZXJ0IChtcGlfZ2V0X25iaXRzIChxKSA9PSBxYml0cyk7CisKKyAgICAgIC8qIEZpbmQgYSBnZW5lcmF0b3IgZyAoaCBhbmQgZSBhcmUgaGVscGVycykuCisgICAgICAgICBlID0gKHAtMSkvcSAqLworICAgICAgZSA9IG1waV9hbGxvYyAobXBpX2dldF9ubGltYnMgKHApKTsKKyAgICAgIG1waV9zdWJfdWkgKGUsIHAsIDEpOworICAgICAgbXBpX2ZkaXZfcSAoZSwgZSwgcSk7CisgICAgICBnID0gbXBpX2FsbG9jIChtcGlfZ2V0X25saW1icyAocCkpOworICAgICAgaCA9IG1waV9hbGxvY19zZXRfdWkgKDEpOyAvKiAoV2Ugc3RhcnQgd2l0aCAyLikgKi8KKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfYWRkX3VpIChoLCBoLCAxKTsKKyAgICAgICAgICAvKiBnID0gaF5lIG1vZCBwICovCisgICAgICAgICAgbXBpX3Bvd20gKGcsIGgsIGUsIHApOworICAgICAgICB9CisgICAgICB3aGlsZSAoIW1waV9jbXBfdWkgKGcsIDEpKTsgIC8qIENvbnRpbnVlIHVudGlsIGcgIT0gMS4gKi8KKyAgICB9CisKKyAgLyogU2VsZWN0IGEgcmFuZG9tIG51bWJlciBYIHdpdGggdGhlIHByb3BlcnR5OgorICAgKgkgMCA8IHggPCBxLTEKKyAgICoKKyAgICogRklYTUU6IFdoeSBkbyB3ZSB1c2UgdGhlIHJlcXVpcmVtZW50IHggPCBxLTEgPyBJdCBzaG91bGQgYmUKKyAgICogc3VmZmljaWVudCB0byB0ZXN0IGZvciB4IDwgcS4gIEZJUFMtMTg2LTMgY2hlY2sgeCA8IHEtMSBidXQgaXQKKyAgICogZG9lcyBub3QgY2hlY2sgZm9yIDAgPCB4IGJlY2F1c2UgaXQgbWFrZXMgc3VyZSB0aGF0IFEgaXMgdW5zaWduZWQKKyAgICogYW5kIGZpbmFsbHkgYWRkcyBvbmUgdG8gdGhlIHJlc3VsdCBzbyB0aGF0IDAgd2lsbCBuZXZlciBiZQorICAgKiByZXR1cm5lZC4gIFdlIHNob3VsZCByZXBsYWNlIHRoZSBjb2RlIGJlbG93IHdpdGggX2djcnlfZHNhX2dlbl9rLgorICAgKgorICAgKiBUaGlzIG11c3QgYmUgYSB2ZXJ5IGdvb2QgcmFuZG9tIG51bWJlciBiZWNhdXNlIHRoaXMgaXMgdGhlIHNlY3JldAorICAgKiBwYXJ0LiAgVGhlIHJhbmRvbSBxdWFsaXR5IGRlcGVuZHMgb24gdGhlIHRyYW5zaWVudF9rZXkgZmxhZy4gICovCisgIHJhbmRvbV9sZXZlbCA9IHRyYW5zaWVudF9rZXkgPyBHQ1JZX1NUUk9OR19SQU5ET00gOiBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnKCJjaG9vc2luZyBhIHJhbmRvbSB4JXNcbiIsIHRyYW5zaWVudF9rZXk/ICIgKHRyYW5zaWVudC1rZXkpIjoiIik7CisgIGdjcnlfYXNzZXJ0KCBxYml0cyA+PSAxNjAgKTsKKyAgeCA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHEpICk7CisgIG1waV9zdWJfdWkoIGgsIHEsIDEgKTsgIC8qIHB1dCBxLTEgaW50byBoICovCisgIHJuZGJ1ZiA9IE5VTEw7CisgIGRvCisgICAgeworICAgICAgaWYoIERCR19DSVBIRVIgKQorICAgICAgICBwcm9ncmVzcygnLicpOworICAgICAgaWYoICFybmRidWYgKQorICAgICAgICBybmRidWYgPSBfZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlICgocWJpdHMrNykvOCwgcmFuZG9tX2xldmVsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeyAvKiBDaGFuZ2Ugb25seSBzb21lIG9mIHRoZSBoaWdoZXIgYml0cyAoPSAyIGJ5dGVzKSovCisgICAgICAgICAgY2hhciAqciA9IF9nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUgKDIsIHJhbmRvbV9sZXZlbCk7CisgICAgICAgICAgbWVtY3B5KHJuZGJ1ZiwgciwgMiApOworICAgICAgICAgIHhmcmVlKHIpOworICAgICAgICB9CisKKyAgICAgIF9nY3J5X21waV9zZXRfYnVmZmVyKCB4LCBybmRidWYsIChxYml0cys3KS84LCAwICk7CisgICAgICBtcGlfY2xlYXJfaGlnaGJpdCggeCwgcWJpdHMrMSApOworICAgIH0KKyAgd2hpbGUgKCAhKCBtcGlfY21wX3VpKCB4LCAwICk+MCAmJiBtcGlfY21wKCB4LCBoICk8MCApICk7CisgIHhmcmVlKHJuZGJ1Zik7CisgIG1waV9mcmVlKCBlICk7CisgIG1waV9mcmVlKCBoICk7CisKKyAgLyogeSA9IGdeeCBtb2QgcCAqLworICB5ID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhwKSApOworICBtcGlfcG93bSAoeSwgZywgeCwgcCk7CisKKyAgaWYoIERCR19DSVBIRVIgKQorICAgIHsKKyAgICAgIHByb2dyZXNzKCdcbicpOworICAgICAgbG9nX21waWR1bXAoImRzYSAgcCIsIHAgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCJkc2EgIHEiLCBxICk7CisgICAgICBsb2dfbXBpZHVtcCgiZHNhICBnIiwgZyApOworICAgICAgbG9nX21waWR1bXAoImRzYSAgeSIsIHkgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCJkc2EgIHgiLCB4ICk7CisgICAgfQorCisgIC8qIENvcHkgdGhlIHN0dWZmIHRvIHRoZSBrZXkgc3RydWN0dXJlcy4gKi8KKyAgc2stPnAgPSBwOworICBzay0+cSA9IHE7CisgIHNrLT5nID0gZzsKKyAgc2stPnkgPSB5OworICBzay0+eCA9IHg7CisKKyAgLyogTm93IHdlIGNhbiB0ZXN0IG91ciBrZXlzICh0aGlzIHNob3VsZCBuZXZlciBmYWlsISkuICovCisgIGlmICggdGVzdF9rZXlzIChzaywgcWJpdHMpICkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnApOyBzay0+cCA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnEpOyBzay0+cSA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPmcpOyBzay0+ZyA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnkpOyBzay0+eSA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPngpOyBzay0+eCA9IE5VTEw7CisgICAgICBmaXBzX3NpZ25hbF9lcnJvciAoInNlbGYtdGVzdCBhZnRlciBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQiKTsKKyAgICAgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKyAgICB9CisgIHJldHVybiAwOworfQorCisKKy8qIEdlbmVyYXRlIGEgRFNBIGtleSBwYWlyIHdpdGggYSBrZXkgb2Ygc2l6ZSBOQklUUyB1c2luZyB0aGUKKyAgIGFsZ29yaXRobSBnaXZlbiBpbiBGSVBTLTE4Ni0zLiAgSWYgVVNFX0ZJUFMxODZfMiBpcyB0cnVlLAorICAgRklQUy0xODYtMiBpcyB1c2VkIGFuZCB0aHVzIHRoZSBsZW5ndGggaXMgcmVzdHJpY3RlZCB0byAxMDI0LzE2MC4KKyAgIElmIERFUklWRVBBUk1TIGlzIG5vdCBOVUxMIGl0IG1heSBjb250YWluIGEgc2VlZCB2YWx1ZS4gIElmIGRvbWFpbgorICAgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGluIERPTUFJTiwgREVSSVZFUEFSTVMgbWF5IG5vdCBiZSBnaXZlbgorICAgYW5kIE5CSVRTIGFuZCBRQklUUyBtdXN0IG1hdGNoIHRoZSBzcGVjaWZpZWQgZG9tYWluIHBhcmFtZXRlcnMuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitnZW5lcmF0ZV9maXBzMTg2IChEU0Ffc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cywgdW5zaWduZWQgaW50IHFiaXRzLAorICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgZGVyaXZlcGFybXMsIGludCB1c2VfZmlwczE4Nl8yLAorICAgICAgICAgICAgICAgICAgZHNhX2RvbWFpbl90ICpkb21haW4sCisgICAgICAgICAgICAgICAgICBpbnQgKnJfY291bnRlciwgdm9pZCAqKnJfc2VlZCwgc2l6ZV90ICpyX3NlZWRsZW4sCisgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICpyX2gpCit7CisgIGdwZ19lcnJfY29kZV90IGVjOworICBzdHJ1Y3QgeworICAgIGdjcnlfc2V4cF90IHNleHA7CisgICAgY29uc3Qgdm9pZCAqc2VlZDsKKyAgICBzaXplX3Qgc2VlZGxlbjsKKyAgfSBpbml0aWFsX3NlZWQgPSB7IE5VTEwsIE5VTEwsIDAgfTsKKyAgZ2NyeV9tcGlfdCBwcmltZV9xID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBwcmltZV9wID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCB2YWx1ZV9nID0gTlVMTDsgLyogVGhlIGdlbmVyYXRvci4gKi8KKyAgZ2NyeV9tcGlfdCB2YWx1ZV95ID0gTlVMTDsgLyogZ154IG1vZCBwICovCisgIGdjcnlfbXBpX3QgdmFsdWVfeCA9IE5VTEw7IC8qIFRoZSBzZWNyZXQgZXhwb25lbnQuICovCisgIGdjcnlfbXBpX3QgdmFsdWVfaCA9IE5VTEw7IC8qIEhlbHBlci4gICovCisgIGdjcnlfbXBpX3QgdmFsdWVfZSA9IE5VTEw7IC8qIEhlbHBlci4gICovCisKKyAgLyogUHJlc2V0IHJldHVybiB2YWx1ZXMuICAqLworICAqcl9jb3VudGVyID0gMDsKKyAgKnJfc2VlZCA9IE5VTEw7CisgICpyX3NlZWRsZW4gPSAwOworICAqcl9oID0gTlVMTDsKKworICAvKiBEZXJpdmUgUUJJVFMgZnJvbSBOQklUUyBpZiByZXF1ZXN0ZWQgICovCisgIGlmICghcWJpdHMpCisgICAgeworICAgICAgaWYgKG5iaXRzID09IDEwMjQpCisgICAgICAgIHFiaXRzID0gMTYwOworICAgICAgZWxzZSBpZiAobmJpdHMgPT0gMjA0OCkKKyAgICAgICAgcWJpdHMgPSAyMjQ7CisgICAgICBlbHNlIGlmIChuYml0cyA9PSAzMDcyKQorICAgICAgICBxYml0cyA9IDI1NjsKKyAgICB9CisKKyAgLyogQ2hlY2sgdGhhdCBRQklUUyBhbmQgTkJJVFMgbWF0Y2ggdGhlIHN0YW5kYXJkLiAgTm90ZSB0aGF0IEZJUFMKKyAgICAgMTg2LTMgdXNlcyBOIGZvciBRQklUUyBhbmQgTCBmb3IgTkJJVFMuICAqLworICBpZiAobmJpdHMgPT0gMTAyNCAmJiBxYml0cyA9PSAxNjApCisgICAgOworICBlbHNlIGlmIChuYml0cyA9PSAyMDQ4ICYmIHFiaXRzID09IDIyNCkKKyAgICA7CisgIGVsc2UgaWYgKG5iaXRzID09IDIwNDggJiYgcWJpdHMgPT0gMjU2KQorICAgIDsKKyAgZWxzZSBpZiAobmJpdHMgPT0gMzA3MiAmJiBxYml0cyA9PSAyNTYpCisgICAgOworICBlbHNlCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworCisgIGlmIChkb21haW4tPnAgJiYgZG9tYWluLT5xICYmIGRvbWFpbi0+ZykKKyAgICB7CisgICAgICAvKiBEb21haW4gcGFyYW1ldGVycyBhcmUgZ2l2ZW47IHVzZSB0aGVtLiAgKi8KKyAgICAgIHByaW1lX3AgPSBtcGlfY29weSAoZG9tYWluLT5wKTsKKyAgICAgIHByaW1lX3EgPSBtcGlfY29weSAoZG9tYWluLT5xKTsKKyAgICAgIHZhbHVlX2cgPSBtcGlfY29weSAoZG9tYWluLT5nKTsKKyAgICAgIGdjcnlfYXNzZXJ0IChtcGlfZ2V0X25iaXRzIChwcmltZV9wKSA9PSBuYml0cyk7CisgICAgICBnY3J5X2Fzc2VydCAobXBpX2dldF9uYml0cyAocHJpbWVfcSkgPT0gcWJpdHMpOworICAgICAgZ2NyeV9hc3NlcnQgKCFkZXJpdmVwYXJtcyk7CisgICAgICBlYyA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogR2VuZXJhdGUgbmV3IGRvbWFpbiBwYXJhbWV0ZXJzLiAgKi8KKworICAgICAgLyogR2V0IGFuIGluaXRpYWwgc2VlZCB2YWx1ZS4gICovCisgICAgICBpZiAoZGVyaXZlcGFybXMpCisgICAgICAgIHsKKyAgICAgICAgICBpbml0aWFsX3NlZWQuc2V4cCA9IHNleHBfZmluZF90b2tlbiAoZGVyaXZlcGFybXMsICJzZWVkIiwgMCk7CisgICAgICAgICAgaWYgKGluaXRpYWxfc2VlZC5zZXhwKQorICAgICAgICAgICAgaW5pdGlhbF9zZWVkLnNlZWQgPSBzZXhwX250aF9kYXRhIChpbml0aWFsX3NlZWQuc2V4cCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdGlhbF9zZWVkLnNlZWRsZW4pOworICAgICAgICB9CisKKyAgICAgIC8qIEZpeG1lOiBFbmFibGUgMTg2LTMgYWZ0ZXIgaXQgaGFzIGJlZW4gYXBwcm92ZWQgYW5kIGFmdGVyIGZpeGluZworICAgICAgICAgdGhlIGdlbmVyYXRpb24gZnVuY3Rpb24uICAqLworICAgICAgLyogICBpZiAodXNlX2ZpcHMxODZfMikgKi8KKyAgICAgICh2b2lkKXVzZV9maXBzMTg2XzI7CisgICAgICBlYyA9IF9nY3J5X2dlbmVyYXRlX2ZpcHMxODZfMl9wcmltZSAobmJpdHMsIHFiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfc2VlZC5zZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfc2VlZC5zZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmltZV9xLCAmcHJpbWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcl9zZWVkLCByX3NlZWRsZW4pOworICAgICAgLyogICBlbHNlICovCisgICAgICAvKiAgICAgZWMgPSBfZ2NyeV9nZW5lcmF0ZV9maXBzMTg2XzNfcHJpbWUgKG5iaXRzLCBxYml0cywgTlVMTCwgMCwgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaW1lX3EsICZwcmltZV9wLCAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX2NvdW50ZXIsICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfc2VlZCwgcl9zZWVkbGVuLCBOVUxMKTsgKi8KKyAgICAgIHNleHBfcmVsZWFzZSAoaW5pdGlhbF9zZWVkLnNleHApOworICAgICAgaWYgKGVjKQorICAgICAgICBnb3RvIGxlYXZlOworCisgICAgICAvKiBGaW5kIGEgZ2VuZXJhdG9yIGcgKGggYW5kIGUgYXJlIGhlbHBlcnMpLgorICAgICAgICAgZSA9IChwLTEpL3EgKi8KKyAgICAgIHZhbHVlX2UgPSBtcGlfYWxsb2NfbGlrZSAocHJpbWVfcCk7CisgICAgICBtcGlfc3ViX3VpICh2YWx1ZV9lLCBwcmltZV9wLCAxKTsKKyAgICAgIG1waV9mZGl2X3EgKHZhbHVlX2UsIHZhbHVlX2UsIHByaW1lX3EgKTsKKyAgICAgIHZhbHVlX2cgPSBtcGlfYWxsb2NfbGlrZSAocHJpbWVfcCk7CisgICAgICB2YWx1ZV9oID0gbXBpX2FsbG9jX3NldF91aSAoMSk7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgbXBpX2FkZF91aSAodmFsdWVfaCwgdmFsdWVfaCwgMSk7CisgICAgICAgICAgLyogZyA9IGheZSBtb2QgcCAqLworICAgICAgICAgIG1waV9wb3dtICh2YWx1ZV9nLCB2YWx1ZV9oLCB2YWx1ZV9lLCBwcmltZV9wKTsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCFtcGlfY21wX3VpICh2YWx1ZV9nLCAxKSk7ICAvKiBDb250aW51ZSB1bnRpbCBnICE9IDEuICAqLworICAgIH0KKworCisgIC8qIFNlbGVjdCBhIHJhbmRvbSBudW1iZXIgeCB3aXRoOiAgMCA8IHggPCBxICAqLworICB2YWx1ZV94ID0gbXBpX3NuZXcgKHFiaXRzKTsKKyAgZG8KKyAgICB7CisgICAgICBpZiggREJHX0NJUEhFUiApCisgICAgICAgIHByb2dyZXNzKCcuJyk7CisgICAgICBfZ2NyeV9tcGlfcmFuZG9taXplICh2YWx1ZV94LCBxYml0cywgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICAgICAgbXBpX2NsZWFyX2hpZ2hiaXQgKHZhbHVlX3gsIHFiaXRzKzEpOworICAgIH0KKyAgd2hpbGUgKCEobXBpX2NtcF91aSAodmFsdWVfeCwgMCkgPiAwICYmIG1waV9jbXAgKHZhbHVlX3gsIHByaW1lX3EpIDwgMCkpOworCisgIC8qIHkgPSBnXnggbW9kIHAgKi8KKyAgdmFsdWVfeSA9IG1waV9hbGxvY19saWtlIChwcmltZV9wKTsKKyAgbXBpX3Bvd20gKHZhbHVlX3ksIHZhbHVlX2csIHZhbHVlX3gsIHByaW1lX3ApOworCisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIHByb2dyZXNzKCdcbicpOworICAgICAgbG9nX21waWR1bXAoImRzYSAgcCIsIHByaW1lX3AgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCJkc2EgIHEiLCBwcmltZV9xICk7CisgICAgICBsb2dfbXBpZHVtcCgiZHNhICBnIiwgdmFsdWVfZyApOworICAgICAgbG9nX21waWR1bXAoImRzYSAgeSIsIHZhbHVlX3kgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCJkc2EgIHgiLCB2YWx1ZV94ICk7CisgICAgICBsb2dfbXBpZHVtcCgiZHNhICBoIiwgdmFsdWVfaCApOworICAgIH0KKworICAvKiBDb3B5IHRoZSBzdHVmZiB0byB0aGUga2V5IHN0cnVjdHVyZXMuICovCisgIHNrLT5wID0gcHJpbWVfcDsgcHJpbWVfcCA9IE5VTEw7CisgIHNrLT5xID0gcHJpbWVfcTsgcHJpbWVfcSA9IE5VTEw7CisgIHNrLT5nID0gdmFsdWVfZzsgdmFsdWVfZyA9IE5VTEw7CisgIHNrLT55ID0gdmFsdWVfeTsgdmFsdWVfeSA9IE5VTEw7CisgIHNrLT54ID0gdmFsdWVfeDsgdmFsdWVfeCA9IE5VTEw7CisgICpyX2ggPSB2YWx1ZV9oOyB2YWx1ZV9oID0gTlVMTDsKKworIGxlYXZlOgorICBfZ2NyeV9tcGlfcmVsZWFzZSAocHJpbWVfcCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChwcmltZV9xKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHZhbHVlX2cpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAodmFsdWVfeSk7CisgIF9nY3J5X21waV9yZWxlYXNlICh2YWx1ZV94KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHZhbHVlX2gpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAodmFsdWVfZSk7CisKKyAgLyogQXMgYSBsYXN0IHN0ZXAgdGVzdCB0aGlzIGtleXMgKHRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgb2YgY291cnNlKS4gKi8KKyAgaWYgKCFlYyAmJiB0ZXN0X2tleXMgKHNrLCBxYml0cykgKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+cCk7IHNrLT5wID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+cSk7IHNrLT5xID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+Zyk7IHNrLT5nID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+eSk7IHNrLT55ID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+eCk7IHNrLT54ID0gTlVMTDsKKyAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgic2VsZi10ZXN0IGFmdGVyIGtleSBnZW5lcmF0aW9uIGZhaWxlZCIpOworICAgICAgZWMgPSBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKyAgICB9CisKKyAgaWYgKGVjKQorICAgIHsKKyAgICAgICpyX2NvdW50ZXIgPSAwOworICAgICAgeGZyZWUgKCpyX3NlZWQpOyAqcl9zZWVkID0gTlVMTDsKKyAgICAgICpyX3NlZWRsZW4gPSAwOworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCpyX2gpOyAqcl9oID0gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIGVjOworfQorCisKKworLyoKKyAgIFRlc3Qgd2hldGhlciB0aGUgc2VjcmV0IGtleSBpcyB2YWxpZC4KKyAgIFJldHVybnM6IGlmIHRoaXMgaXMgYSB2YWxpZCBrZXkuCisgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX3NlY3JldF9rZXkoIERTQV9zZWNyZXRfa2V5ICpzayApCit7CisgIGludCByYzsKKyAgZ2NyeV9tcGlfdCB5ID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhzay0+eSkgKTsKKworICBtcGlfcG93bSggeSwgc2stPmcsIHNrLT54LCBzay0+cCApOworICByYyA9ICFtcGlfY21wKCB5LCBzay0+eSApOworICBtcGlfZnJlZSggeSApOworICByZXR1cm4gcmM7Cit9CisKKworCisvKgorICAgTWFrZSBhIERTQSBzaWduYXR1cmUgZnJvbSBJTlBVVCBhbmQgcHV0IGl0IGludG8gciBhbmQgcy4KKworICAgSU5QVVQgbWF5IGVpdGhlciBiZSBhIHBsYWluIE1QSSBvciBhbiBvcGFxdWUgTVBJIHdoaWNoIGlzIHRoZW4KKyAgIGludGVybmFsbHkgY29udmVydGVkIHRvIGEgcGxhaW4gTVBJLiAgRkxBR1MgYW5kIEhBU0hBTEdPIG1heSBib3RoCisgICBiZSAwIGZvciBzdGFuZGFyZCBvcGVyYXRpb24gbW9kZS4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyAwIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4gIE5vdGUgdGhhdCBmb3IKKyAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBhbnkgZXJyb3IgaWYKKyAgIEZMQUdTIGFuZCBIQVNIQUxHTyBhcmUgYm90aCAwIGFuZCBJTlBVVCBpcyBhIHBsYWluIE1QSS4KKyAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitzaWduIChnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgcywgZ2NyeV9tcGlfdCBpbnB1dCwgRFNBX3NlY3JldF9rZXkgKnNrZXksCisgICAgICBpbnQgZmxhZ3MsIGludCBoYXNoYWxnbykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbXBpX3QgaGFzaDsKKyAgZ2NyeV9tcGlfdCBrOworICBnY3J5X21waV90IGtpbnY7CisgIGdjcnlfbXBpX3QgdG1wOworICBjb25zdCB2b2lkICphYnVmOworICB1bnNpZ25lZCBpbnQgYWJpdHMsIHFiaXRzOworICBpbnQgZXh0cmFsb29wcyA9IDA7CisKKyAgcWJpdHMgPSBtcGlfZ2V0X25iaXRzIChza2V5LT5xKTsKKworICAvKiBDb252ZXJ0IHRoZSBJTlBVVCBpbnRvIGFuIE1QSS4gICovCisgIHJjID0gX2djcnlfZHNhX25vcm1hbGl6ZV9oYXNoIChpbnB1dCwgJmhhc2gsIHFiaXRzKTsKKyAgaWYgKHJjKQorICAgIHJldHVybiByYzsKKworIGFnYWluOgorICAvKiBDcmVhdGUgdGhlIEsgdmFsdWUuICAqLworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfUkZDNjk3OSkgJiYgaGFzaGFsZ28pCisgICAgeworICAgICAgLyogVXNlIFBvcm5pbidzIG1ldGhvZCBmb3IgZGV0ZXJtaW5pc3RpYyBEU0EuICBJZiB0aGlzIGZsYWcgaXMKKyAgICAgICAgIHNldCwgaXQgaXMgZXhwZWN0ZWQgdGhhdCBIQVNIIGlzIGFuIG9wYXF1ZSBNUEkgd2l0aCB0aGUgdG8gYmUKKyAgICAgICAgIHNpZ25lZCBoYXNoLiAgVGhhdCBoYXNoIGlzIGFsc28gdXNlZCBhcyBoMSBmcm9tIDMuMi5hLiAgKi8KKyAgICAgIGlmICghbXBpX2lzX29wYXF1ZSAoaW5wdXQpKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBHUEdfRVJSX0NPTkZMSUNUOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgYWJ1ZiA9IG1waV9nZXRfb3BhcXVlIChpbnB1dCwgJmFiaXRzKTsKKyAgICAgIHJjID0gX2djcnlfZHNhX2dlbl9yZmM2OTc5X2sgKCZrLCBza2V5LT5xLCBza2V5LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJ1ZiwgKGFiaXRzKzcpLzgsIGhhc2hhbGdvLCBleHRyYWxvb3BzKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTZWxlY3QgYSByYW5kb20gayB3aXRoIDAgPCBrIDwgcSAqLworICAgICAgayA9IF9nY3J5X2RzYV9nZW5fayAoc2tleS0+cSwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgICB9CisKKyAgLyogciA9IChhXmsgbW9kIHApIG1vZCBxICovCisgIG1waV9wb3dtKCByLCBza2V5LT5nLCBrLCBza2V5LT5wICk7CisgIG1waV9mZGl2X3IoIHIsIHIsIHNrZXktPnEgKTsKKworICAvKiBraW52ID0ga14oLTEpIG1vZCBxICovCisgIGtpbnYgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKGspICk7CisgIG1waV9pbnZtKGtpbnYsIGssIHNrZXktPnEgKTsKKworICAvKiBzID0gKGtpbnYgKiAoIGhhc2ggKyB4ICogcikpIG1vZCBxICovCisgIHRtcCA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnMoc2tleS0+cCkgKTsKKyAgbXBpX211bCggdG1wLCBza2V5LT54LCByICk7CisgIG1waV9hZGQoIHRtcCwgdG1wLCBoYXNoICk7CisgIG1waV9tdWxtKCBzICwga2ludiwgdG1wLCBza2V5LT5xICk7CisKKyAgbXBpX2ZyZWUoayk7CisgIG1waV9mcmVlKGtpbnYpOworICBtcGlfZnJlZSh0bXApOworCisgIGlmICghbXBpX2NtcF91aSAociwgMCkpCisgICAgeworICAgICAgLyogVGhpcyBpcyBhIGhpZ2hseSB1bmxpa2VseSBjb2RlIHBhdGguICAqLworICAgICAgZXh0cmFsb29wcysrOworICAgICAgZ290byBhZ2FpbjsKKyAgICB9CisKKyAgcmMgPSAwOworCisgbGVhdmU6CisgIGlmIChoYXNoICE9IGlucHV0KQorICAgIG1waV9mcmVlIChoYXNoKTsKKworICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIGNvbXBvc2VkIGZyb20gUiBhbmQgUyBpcyB2YWxpZC4KKyAqLworc3RhdGljIGdwZ19lcnJfY29kZV90Cit2ZXJpZnkgKGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBzLCBnY3J5X21waV90IGlucHV0LCBEU0FfcHVibGljX2tleSAqcGtleSApCit7CisgIGdwZ19lcnJfY29kZV90IHJjID0gMDsKKyAgZ2NyeV9tcGlfdCB3LCB1MSwgdTIsIHY7CisgIGdjcnlfbXBpX3QgYmFzZVszXTsKKyAgZ2NyeV9tcGlfdCBleFszXTsKKyAgZ2NyeV9tcGlfdCBoYXNoOworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisKKyAgaWYoICEobXBpX2NtcF91aSggciwgMCApID4gMCAmJiBtcGlfY21wKCByLCBwa2V5LT5xICkgPCAwKSApCisgICAgcmV0dXJuIEdQR19FUlJfQkFEX1NJR05BVFVSRTsgLyogQXNzZXJ0aW9uCTAgPCByIDwgbiAgZmFpbGVkLiAgKi8KKyAgaWYoICEobXBpX2NtcF91aSggcywgMCApID4gMCAmJiBtcGlfY21wKCBzLCBwa2V5LT5xICkgPCAwKSApCisgICAgcmV0dXJuIEdQR19FUlJfQkFEX1NJR05BVFVSRTsgLyogQXNzZXJ0aW9uCTAgPCBzIDwgbiAgZmFpbGVkLiAgKi8KKworICBuYml0cyA9IG1waV9nZXRfbmJpdHMgKHBrZXktPnEpOworICByYyA9IF9nY3J5X2RzYV9ub3JtYWxpemVfaGFzaCAoaW5wdXQsICZoYXNoLCBuYml0cyk7CisgIGlmIChyYykKKyAgICByZXR1cm4gcmM7CisKKyAgdyAgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHBrZXktPnEpICk7CisgIHUxID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhwa2V5LT5xKSApOworICB1MiA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnMocGtleS0+cSkgKTsKKyAgdiAgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHBrZXktPnApICk7CisKKyAgLyogdyA9IHNeKC0xKSBtb2QgcSAqLworICBtcGlfaW52bSggdywgcywgcGtleS0+cSApOworCisgIC8qIHUxID0gKGhhc2ggKiB3KSBtb2QgcSAqLworICBtcGlfbXVsbSggdTEsIGhhc2gsIHcsIHBrZXktPnEgKTsKKworICAvKiB1MiA9IHIgKiB3IG1vZCBxICAqLworICBtcGlfbXVsbSggdTIsIHIsIHcsIHBrZXktPnEgKTsKKworICAvKiB2ID0gIGdedTEgKiB5XnUyIG1vZCBwIG1vZCBxICovCisgIGJhc2VbMF0gPSBwa2V5LT5nOyBleFswXSA9IHUxOworICBiYXNlWzFdID0gcGtleS0+eTsgZXhbMV0gPSB1MjsKKyAgYmFzZVsyXSA9IE5VTEw7ICAgIGV4WzJdID0gTlVMTDsKKyAgbXBpX211bHBvd20oIHYsIGJhc2UsIGV4LCBwa2V5LT5wICk7CisgIG1waV9mZGl2X3IoIHYsIHYsIHBrZXktPnEgKTsKKworICBpZiAobXBpX2NtcCggdiwgciApKQorICAgIHsKKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICB7CisgICAgICAgICAgbG9nX21waWR1bXAgKCIgICAgIGkiLCBpbnB1dCk7CisgICAgICAgICAgbG9nX21waWR1bXAgKCIgICAgIGgiLCBoYXNoKTsKKyAgICAgICAgICBsb2dfbXBpZHVtcCAoIiAgICAgdiIsIHYpOworICAgICAgICAgIGxvZ19tcGlkdW1wICgiICAgICByIiwgcik7CisgICAgICAgICAgbG9nX21waWR1bXAgKCIgICAgIHMiLCBzKTsKKyAgICAgICAgfQorICAgICAgcmMgPSBHUEdfRVJSX0JBRF9TSUdOQVRVUkU7CisgICAgfQorCisgIG1waV9mcmVlKHcpOworICBtcGlfZnJlZSh1MSk7CisgIG1waV9mcmVlKHUyKTsKKyAgbXBpX2ZyZWUodik7CisgIGlmIChoYXNoICE9IGlucHV0KQorICAgIG1waV9mcmVlIChoYXNoKTsKKworICByZXR1cm4gcmM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBpbnRlcmZhY2UgICoqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZHNhX2dlbmVyYXRlIChjb25zdCBnY3J5X3NleHBfdCBnZW5wYXJtcywgZ2NyeV9zZXhwX3QgKnJfc2tleSkKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHVuc2lnbmVkIGludCBuYml0czsKKyAgZ2NyeV9zZXhwX3QgZG9tYWluc2V4cDsKKyAgRFNBX3NlY3JldF9rZXkgc2s7CisgIGdjcnlfc2V4cF90IGwxOworICB1bnNpZ25lZCBpbnQgcWJpdHMgPSAwOworICBnY3J5X3NleHBfdCBkZXJpdmVwYXJtcyA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHNlZWRpbmZvID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgbWlzY19pbmZvID0gTlVMTDsKKyAgaW50IGZsYWdzID0gMDsKKyAgZHNhX2RvbWFpbl90IGRvbWFpbjsKKyAgZ2NyeV9tcGlfdCAqZmFjdG9ycyA9IE5VTEw7CisKKyAgbWVtc2V0ICgmc2ssIDAsIHNpemVvZiBzayk7CisgIG1lbXNldCAoJmRvbWFpbiwgMCwgc2l6ZW9mIGRvbWFpbik7CisKKyAgcmMgPSBfZ2NyeV9wa191dGlsX2dldF9uYml0cyAoZ2VucGFybXMsICZuYml0cyk7CisgIGlmIChyYykKKyAgICByZXR1cm4gcmM7CisKKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsIGZsYWdzIGxpc3QuICAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoZ2VucGFybXMsICJmbGFncyIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsMSwgJmZsYWdzLCBOVUxMKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7XAorICAgIH0KKworICAvKiBQYXJzZSB0aGUgb3B0aW9uYWwgcWJpdHMgZWxlbWVudC4gICovCisgIGwxID0gc2V4cF9maW5kX3Rva2VuIChnZW5wYXJtcywgInFiaXRzIiwgMCk7CisgIGlmIChsMSkKKyAgICB7CisgICAgICBjaGFyIGJ1Zls1MF07CisgICAgICBjb25zdCBjaGFyICpzOworICAgICAgc2l6ZV90IG47CisKKyAgICAgIHMgPSBzZXhwX250aF9kYXRhIChsMSwgMSwgJm4pOworICAgICAgaWYgKCFzIHx8IG4gPj0gRElNIChidWYpIC0gMSApCisgICAgICAgIHsKKyAgICAgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOyAvKiBObyB2YWx1ZSBvciB2YWx1ZSB0b28gbGFyZ2UuICAqLworICAgICAgICB9CisgICAgICBtZW1jcHkgKGJ1Ziwgcywgbik7CisgICAgICBidWZbbl0gPSAwOworICAgICAgcWJpdHMgPSAodW5zaWduZWQgaW50KXN0cnRvdWwgKGJ1ZiwgTlVMTCwgMCk7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICB9CisKKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsIHRyYW5zaWVudC1rZXkgZmxhZy4gICovCisgIGlmICghKGZsYWdzICYgUFVCS0VZX0ZMQUdfVFJBTlNJRU5UX0tFWSkpCisgICAgeworICAgICAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAidHJhbnNpZW50LWtleSIsIDApOworICAgICAgaWYgKGwxKQorICAgICAgICB7CisgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfVFJBTlNJRU5UX0tFWTsKKyAgICAgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBHZXQgdGhlIG9wdGlvbmFsIGRlcml2ZSBwYXJhbWV0ZXJzLiAgKi8KKyAgZGVyaXZlcGFybXMgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAiZGVyaXZlLXBhcm1zIiwgMCk7CisKKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsICJ1c2UtZmlwczE4NiIgZmxhZ3MuICAqLworICBpZiAoIShmbGFncyAmIFBVQktFWV9GTEFHX1VTRV9GSVBTMTg2KSkKKyAgICB7CisgICAgICBsMSA9IHNleHBfZmluZF90b2tlbiAoZ2VucGFybXMsICJ1c2UtZmlwczE4NiIsIDApOworICAgICAgaWYgKGwxKQorICAgICAgICB7CisgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODY7CisgICAgICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgICAgIH0KKyAgICB9CisgIGlmICghKGZsYWdzICYgUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMikpCisgICAgeworICAgICAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAidXNlLWZpcHMxODYtMiIsIDApOworICAgICAgaWYgKGwxKQorICAgICAgICB7CisgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMjsKKyAgICAgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBDaGVjayB3aGV0aGVyIGRvbWFpbiBwYXJhbWV0ZXJzIGFyZSBnaXZlbi4gICovCisgIGRvbWFpbnNleHAgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAiZG9tYWluIiwgMCk7CisgIGlmIChkb21haW5zZXhwKQorICAgIHsKKyAgICAgIC8qIERFUklWRVBBUk1TIGNhbid0IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBkb21haW4gcGFyYW1ldGVycy4KKyAgICAgICAgIE5CSVRTIGFibmQgUUJJVFMgbWF5IG5vdCBiZSBzcGVjaWZpZWQgYmVjYXVzZSB0aGVyZSB2YWx1ZXMKKyAgICAgICAgIGFyZSBkZXJpdmVkIGZyb20gdGhlIGRvbWFpbiBwYXJhbWV0ZXJzLiAgKi8KKyAgICAgIGlmIChkZXJpdmVwYXJtcyB8fCBxYml0cyB8fCBuYml0cykKKyAgICAgICAgeworICAgICAgICAgIHNleHBfcmVsZWFzZSAoZG9tYWluc2V4cCk7CisgICAgICAgICAgc2V4cF9yZWxlYXNlIChkZXJpdmVwYXJtcyk7CisgICAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgIC8qIFB1dCBhbGwgZG9tYWluIHBhcmFtZXRlcnMgaW50byB0aGUgZG9tYWluIG9iamVjdC4gICovCisgICAgICBsMSA9IHNleHBfZmluZF90b2tlbiAoZG9tYWluc2V4cCwgInAiLCAwKTsKKyAgICAgIGRvbWFpbi5wID0gc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGRvbWFpbnNleHAsICJxIiwgMCk7CisgICAgICBkb21haW4ucSA9IHNleHBfbnRoX21waSAobDEsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgIGwxID0gc2V4cF9maW5kX3Rva2VuIChkb21haW5zZXhwLCAiZyIsIDApOworICAgICAgZG9tYWluLmcgPSBzZXhwX250aF9tcGkgKGwxLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgICBzZXhwX3JlbGVhc2UgKGRvbWFpbnNleHApOworCisgICAgICAvKiBDaGVjayB0aGF0IGFsbCBkb21haW4gcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlLiAgKi8KKyAgICAgIGlmICghZG9tYWluLnAgfHwgIWRvbWFpbi5xIHx8ICFkb21haW4uZykKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChkb21haW4ucCk7CisgICAgICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKGRvbWFpbi5xKTsKKyAgICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoZG9tYWluLmcpOworICAgICAgICAgIHNleHBfcmVsZWFzZSAoZGVyaXZlcGFybXMpOworICAgICAgICAgIHJldHVybiBHUEdfRVJSX01JU1NJTkdfVkFMVUU7CisgICAgICAgIH0KKworICAgICAgLyogR2V0IE5CSVRTIGFuZCBRQklUUyBmcm9tIHRoZSBkb21haW4gcGFyYW1ldGVycy4gICovCisgICAgICBuYml0cyA9IG1waV9nZXRfbmJpdHMgKGRvbWFpbi5wKTsKKyAgICAgIHFiaXRzID0gbXBpX2dldF9uYml0cyAoZG9tYWluLnEpOworICAgIH0KKworICBpZiAoZGVyaXZlcGFybXMKKyAgICAgIHx8IChmbGFncyAmIFBVQktFWV9GTEFHX1VTRV9GSVBTMTg2KQorICAgICAgfHwgKGZsYWdzICYgUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMikKKyAgICAgIHx8IGZpcHNfbW9kZSAoKSkKKyAgICB7CisgICAgICBpbnQgY291bnRlcjsKKyAgICAgIHZvaWQgKnNlZWQ7CisgICAgICBzaXplX3Qgc2VlZGxlbjsKKyAgICAgIGdjcnlfbXBpX3QgaF92YWx1ZTsKKworICAgICAgcmMgPSBnZW5lcmF0ZV9maXBzMTg2ICgmc2ssIG5iaXRzLCBxYml0cywgZGVyaXZlcGFybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudGVyLCAmc2VlZCwgJnNlZWRsZW4sICZoX3ZhbHVlKTsKKyAgICAgIGlmICghcmMgJiYgaF92YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEZvcm1hdCB0aGUgc2VlZC12YWx1ZXMgdW5sZXNzIGRvbWFpbiBwYXJhbWV0ZXJzIGFyZSB1c2VkCisgICAgICAgICAgICAgZm9yIHdoaWNoIGEgSF9WQUxVRSBvZiBOVUxMIGlzIGFuIGluZGljYXRpb24uICAqLworICAgICAgICAgIHJjID0gc2V4cF9idWlsZCAoJnNlZWRpbmZvLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzZWVkLXZhbHVlcyhjb3VudGVyICVkKShzZWVkICViKShoICVtKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciwgKGludClzZWVkbGVuLCBzZWVkLCBoX3ZhbHVlKTsKKyAgICAgICAgICB4ZnJlZSAoc2VlZCk7CisgICAgICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKGhfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmMgPSBnZW5lcmF0ZSAoJnNrLCBuYml0cywgcWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAhIShmbGFncyAmIFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVkpLAorICAgICAgICAgICAgICAgICAgICAgJmRvbWFpbiwgJmZhY3RvcnMpOworICAgIH0KKworICBpZiAoIXJjKQorICAgIHsKKyAgICAgIC8qIFB1dCB0aGUgZmFjdG9ycyBpbnRvIE1JU0NfSU5GTy4gIE5vdGUgdGhhdCB0aGUgZmFjdG9ycyBhcmUKKyAgICAgICAgIG5vdCBjb25maWRlbnRpYWwgdGh1cyB3ZSBjYW4gc3RvcmUgdGhlbSBpbiBzdGFuZGFyZCBtZW1vcnkuICAqLworICAgICAgaW50IG5mYWN0b3JzLCBpLCBqOworICAgICAgY2hhciAqcDsKKyAgICAgIGNoYXIgKmZvcm1hdCA9IE5VTEw7CisgICAgICB2b2lkICoqYXJnX2xpc3QgPSBOVUxMOworCisgICAgICBmb3IgKG5mYWN0b3JzPTA7IGZhY3RvcnMgJiYgZmFjdG9yc1tuZmFjdG9yc107IG5mYWN0b3JzKyspCisgICAgICAgIDsKKyAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZm9ybWF0IHN0cmluZzoKKyAgICAgICAgICIobWlzYy1rZXktaW5mbyVTKHBtMS1mYWN0b3JzJW0pKSIKKyAgICAgICAgIHdpdGggb25lICIlbSIgZm9yIGVhY2ggZmFjdG9yIGFuZCBjb25zdHJ1Y3QgaXQuICAqLworICAgICAgZm9ybWF0ID0geHRyeW1hbGxvYyAoNTAgKyAyKm5mYWN0b3JzKTsKKyAgICAgIGlmICghZm9ybWF0KQorICAgICAgICByYyA9IGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcCA9IHN0cGNweSAoZm9ybWF0LCAiKG1pc2Mta2V5LWluZm8iKTsKKyAgICAgICAgICBpZiAoc2VlZGluZm8pCisgICAgICAgICAgICBwID0gc3RwY3B5IChwLCAiJVMiKTsKKyAgICAgICAgICBpZiAobmZhY3RvcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHAgPSBzdHBjcHkgKHAsICIocG0xLWZhY3RvcnMiKTsKKyAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBuZmFjdG9yczsgaSsrKQorICAgICAgICAgICAgICAgIHAgPSBzdHBjcHkgKHAsICIlbSIpOworICAgICAgICAgICAgICBwID0gc3RwY3B5IChwLCAiKSIpOworICAgICAgICAgICAgfQorICAgICAgICAgIHAgPSBzdHBjcHkgKHAsICIpIik7CisKKyAgICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGxpc3Qgb2YgZmFjdG9ycyBwbHVzIG9uZSBmb3IgdGhlCisgICAgICAgICAgICAgc2VlZGluZm8gcy1leHAgcGx1cyBhbiBleHRyYSBOVUxMIGVudHJ5IGZvciBzYWZldHkgYW5kCisgICAgICAgICAgICAgZmlsbCBpdCB3aXRoIHRoZSBmYWN0b3JzLiAgKi8KKyAgICAgICAgICBhcmdfbGlzdCA9IHh0cnljYWxsb2MgKG5mYWN0b3JzKzErMSwgc2l6ZW9mICphcmdfbGlzdCk7CisgICAgICAgICAgaWYgKCFhcmdfbGlzdCkKKyAgICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgaWYgKHNlZWRpbmZvKQorICAgICAgICAgICAgICAgIGFyZ19saXN0W2krK10gPSAmc2VlZGluZm87CisgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgbmZhY3RvcnM7IGorKykKKyAgICAgICAgICAgICAgICBhcmdfbGlzdFtpKytdID0gZmFjdG9ycyArIGo7CisgICAgICAgICAgICAgIGFyZ19saXN0W2ldID0gTlVMTDsKKworICAgICAgICAgICAgICByYyA9IHNleHBfYnVpbGRfYXJyYXkgKCZtaXNjX2luZm8sIE5VTEwsIGZvcm1hdCwgYXJnX2xpc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHhmcmVlIChhcmdfbGlzdCk7CisgICAgICB4ZnJlZSAoZm9ybWF0KTsKKyAgICB9CisKKyAgaWYgKCFyYykKKyAgICByYyA9IHNleHBfYnVpbGQgKHJfc2tleSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICIoa2V5LWRhdGEiCisgICAgICAgICAgICAgICAgICAgICAiIChwdWJsaWMta2V5IgorICAgICAgICAgICAgICAgICAgICAgIiAgKGRzYShwJW0pKHElbSkoZyVtKSh5JW0pKSkiCisgICAgICAgICAgICAgICAgICAgICAiIChwcml2YXRlLWtleSIKKyAgICAgICAgICAgICAgICAgICAgICIgIChkc2EocCVtKShxJW0pKGclbSkoeSVtKSh4JW0pKSkiCisgICAgICAgICAgICAgICAgICAgICAiICVTKSIsCisgICAgICAgICAgICAgICAgICAgICBzay5wLCBzay5xLCBzay5nLCBzay55LAorICAgICAgICAgICAgICAgICAgICAgc2sucCwgc2sucSwgc2suZywgc2sueSwgc2sueCwKKyAgICAgICAgICAgICAgICAgICAgIG1pc2NfaW5mbyk7CisKKworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sucCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5xKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLmcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sueSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay54KTsKKworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZG9tYWluLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZG9tYWluLnEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZG9tYWluLmcpOworCisgIHNleHBfcmVsZWFzZSAoc2VlZGluZm8pOworICBzZXhwX3JlbGVhc2UgKG1pc2NfaW5mbyk7CisgIHNleHBfcmVsZWFzZSAoZGVyaXZlcGFybXMpOworICBpZiAoZmFjdG9ycykKKyAgICB7CisgICAgICBnY3J5X21waV90ICptcDsKKyAgICAgIGZvciAobXAgPSBmYWN0b3JzOyAqbXA7IG1wKyspCisgICAgICAgIG1waV9mcmVlICgqbXApOworICAgICAgeGZyZWUgKGZhY3RvcnMpOworICAgIH0KKyAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZHNhX2NoZWNrX3NlY3JldF9rZXkgKGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIERTQV9zZWNyZXRfa2V5IHNrID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworCisgIHJjID0gX2djcnlfc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgInBxZ3l4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5wLCAmc2sucSwgJnNrLmcsICZzay55LCAmc2sueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAoIWNoZWNrX3NlY3JldF9rZXkgKCZzaykpCisgICAgcmMgPSBHUEdfRVJSX0JBRF9TRUNLRVk7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sucSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5nKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnkpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sueCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImRzYV90ZXN0a2V5ICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkc2Ffc2lnbiAoZ2NyeV9zZXhwX3QgKnJfc2lnLCBnY3J5X3NleHBfdCBzX2RhdGEsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X21waV90IGRhdGEgPSBOVUxMOworICBEU0Ffc2VjcmV0X2tleSBzayA9IHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfTsKKyAgZ2NyeV9tcGlfdCBzaWdfciA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2lnX3MgPSBOVUxMOworCisgIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKCZjdHgsIFBVQktFWV9PUF9TSUdOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2FfZ2V0X25iaXRzIChrZXlwYXJtcykpOworCisgIC8qIEV4dHJhY3QgdGhlIGRhdGEuICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfZGF0YV90b19tcGkgKHNfZGF0YSwgJmRhdGEsICZjdHgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX21waWR1bXAgKCJkc2Ffc2lnbiAgIGRhdGEiLCBkYXRhKTsKKworICAvKiBFeHRyYWN0IHRoZSBrZXkuICAqLworICByYyA9IF9nY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICJwcWd5eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2sucCwgJnNrLnEsICZzay5nLCAmc2sueSwgJnNrLngsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJkc2Ffc2lnbiAgICAgIHAiLCBzay5wKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZHNhX3NpZ24gICAgICBxIiwgc2sucSk7CisgICAgICBsb2dfbXBpZHVtcCAoImRzYV9zaWduICAgICAgZyIsIHNrLmcpOworICAgICAgbG9nX21waWR1bXAgKCJkc2Ffc2lnbiAgICAgIHkiLCBzay55KTsKKyAgICAgIGlmICghZmlwc19tb2RlICgpKQorICAgICAgICBsb2dfbXBpZHVtcCAoImRzYV9zaWduICAgICAgeCIsIHNrLngpOworICAgIH0KKworICBzaWdfciA9IG1waV9uZXcgKDApOworICBzaWdfcyA9IG1waV9uZXcgKDApOworICByYyA9IHNpZ24gKHNpZ19yLCBzaWdfcywgZGF0YSwgJnNrLCBjdHguZmxhZ3MsIGN0eC5oYXNoX2FsZ28pOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJkc2Ffc2lnbiAgc2lnX3IiLCBzaWdfcik7CisgICAgICBsb2dfbXBpZHVtcCAoImRzYV9zaWduICBzaWdfcyIsIHNpZ19zKTsKKyAgICB9CisgIHJjID0gc2V4cF9idWlsZCAocl9zaWcsIE5VTEwsICIoc2lnLXZhbChkc2EociVNKShzJU0pKSkiLCBzaWdfciwgc2lnX3MpOworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5wKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay55KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLngpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKCZjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJkc2Ffc2lnbiAgICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkc2FfdmVyaWZ5IChnY3J5X3NleHBfdCBzX3NpZywgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBzX2tleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X3NleHBfdCBsMSA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2lnX3IgPSBOVUxMOworICBnY3J5X21waV90IHNpZ19zID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkYXRhID0gTlVMTDsKKyAgRFNBX3B1YmxpY19rZXkgcGsgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICBfZ2NyeV9wa191dGlsX2luaXRfZW5jb2RpbmdfY3R4ICgmY3R4LCBQVUJLRVlfT1BfVkVSSUZZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2FfZ2V0X25iaXRzIChzX2tleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoc19kYXRhLCAmZGF0YSwgJmN0eCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoImRzYV92ZXJpZnkgZGF0YSIsIGRhdGEpOworCisgIC8qIEV4dHJhY3QgdGhlIHNpZ25hdHVyZSB2YWx1ZS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9wcmVwYXJzZV9zaWd2YWwgKHNfc2lnLCBkc2FfbmFtZXMsICZsMSwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICByYyA9IF9nY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAobDEsIE5VTEwsICJycyIsICZzaWdfciwgJnNpZ19zLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIGxvZ19tcGlkdW1wICgiZHNhX3ZlcmlmeSAgc19yIiwgc2lnX3IpOworICAgICAgbG9nX21waWR1bXAgKCJkc2FfdmVyaWZ5ICBzX3MiLCBzaWdfcyk7CisgICAgfQorCisgIC8qIEV4dHJhY3QgdGhlIGtleS4gICovCisgIHJjID0gX2djcnlfc2V4cF9leHRyYWN0X3BhcmFtIChzX2tleXBhcm1zLCBOVUxMLCAicHFneSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGsucCwgJnBrLnEsICZway5nLCAmcGsueSwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCAoImRzYV92ZXJpZnkgICAgcCIsIHBrLnApOworICAgICAgbG9nX21waWR1bXAgKCJkc2FfdmVyaWZ5ICAgIHEiLCBway5xKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZHNhX3ZlcmlmeSAgICBnIiwgcGsuZyk7CisgICAgICBsb2dfbXBpZHVtcCAoImRzYV92ZXJpZnkgICAgeSIsIHBrLnkpOworICAgIH0KKworICAvKiBWZXJpZnkgdGhlIHNpZ25hdHVyZS4gICovCisgIHJjID0gdmVyaWZ5IChzaWdfciwgc2lnX3MsIGRhdGEsICZwayk7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsucSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChway5nKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLnkpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcyk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZHNhX3ZlcmlmeSAgICA9PiAlc1xuIiwgcmM/Z3BnX3N0cmVycm9yIChyYyk6Ikdvb2QiKTsKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBrZXkgZGVzY3JpYmVkIGJ5IFBBUk1TLiAgT24gZXJyb3IKKyAqIDAgaXMgcmV0dXJuZWQuICBUaGUgZm9ybWF0IG9mIFBBUk1TIHN0YXJ0cyB3aXRoIHRoZSBhbGdvcml0aG0gbmFtZTsKKyAqIGZvciBleGFtcGxlOgorICoKKyAqICAgKGRzYQorICogICAgIChwIDxtcGk+KQorICogICAgIChxIDxtcGk+KQorICogICAgIChnIDxtcGk+KQorICogICAgICh5IDxtcGk+KSkKKyAqCisgKiBNb3JlIHBhcmFtZXRlcnMgbWF5IGJlIGdpdmVuIGJ1dCB3ZSBvbmx5IG5lZWQgUCBoZXJlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50Citkc2FfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBwYXJtcykKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGdjcnlfbXBpX3QgcDsKKyAgdW5zaWduZWQgaW50IG5iaXRzOworCisgIGwxID0gc2V4cF9maW5kX3Rva2VuIChwYXJtcywgInAiLCAxKTsKKyAgaWYgKCFsMSkKKyAgICByZXR1cm4gMDsgLyogUGFyYW1ldGVyIFAgbm90IGZvdW5kLiAgKi8KKworICBwID0gc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgc2V4cF9yZWxlYXNlIChsMSk7CisgIG5iaXRzID0gcD8gbXBpX2dldF9uYml0cyAocCkgOiAwOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocCk7CisgIHJldHVybiBuYml0czsKK30KKworCisMCisvKgorICAgICBTZWxmLXRlc3Qgc2VjdGlvbi4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9zaWduXzEwMjQgKGdjcnlfc2V4cF90IHBrZXksIGdjcnlfc2V4cF90IHNrZXkpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9kYXRhW10gPQorICAgICIoZGF0YSAoZmxhZ3MgcmF3KSIKKyAgICAiICh2YWx1ZSAjYTBiMWMyZDNlNGY1MDAxMDIwMzA0MDUwNjA3MDgwOTBhMWIyYzNkNCMpKSI7CisgIHN0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9kYXRhX2JhZFtdID0KKyAgICAiKGRhdGEgKGZsYWdzIHJhdykiCisgICAgIiAodmFsdWUgI2EwYjFjMmQzZTRmNTEwMTAyMDMwNDA1MDYwNzA4MDkwYTFiMmMzZDQjKSkiOworCisgIGNvbnN0IGNoYXIgKmVycnR4dCA9IE5VTEw7CisgIGdjcnlfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IGRhdGEgPSBOVUxMOworICBnY3J5X3NleHBfdCBkYXRhX2JhZCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHNpZyA9IE5VTEw7CisKKyAgZXJyID0gc2V4cF9zc2NhbiAoJmRhdGEsIE5VTEwsIHNhbXBsZV9kYXRhLCBzdHJsZW4gKHNhbXBsZV9kYXRhKSk7CisgIGlmICghZXJyKQorICAgIGVyciA9IHNleHBfc3NjYW4gKCZkYXRhX2JhZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZGF0YV9iYWQsIHN0cmxlbiAoc2FtcGxlX2RhdGFfYmFkKSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gImNvbnZlcnRpbmcgZGF0YSBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgZXJyID0gX2djcnlfcGtfc2lnbiAoJnNpZywgZGF0YSwgc2tleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gInNpZ25pbmcgZmFpbGVkIjsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBlcnIgPSBfZ2NyeV9wa192ZXJpZnkgKHNpZywgZGF0YSwgcGtleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gInZlcmlmeSBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGVyciA9IF9nY3J5X3BrX3ZlcmlmeSAoc2lnLCBkYXRhX2JhZCwgcGtleSk7CisgIGlmIChnY3J5X2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfQkFEX1NJR05BVFVSRSkKKyAgICB7CisgICAgICBlcnJ0eHQgPSAiYmFkIHNpZ25hdHVyZSBub3QgZGV0ZWN0ZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKworIGxlYXZlOgorICBzZXhwX3JlbGVhc2UgKHNpZyk7CisgIHNleHBfcmVsZWFzZSAoZGF0YV9iYWQpOworICBzZXhwX3JlbGVhc2UgKGRhdGEpOworICByZXR1cm4gZXJydHh0OworfQorCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX2RzYSAoc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIGNvbnN0IGNoYXIgKmVycnR4dDsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qgc2tleSA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHBrZXkgPSBOVUxMOworCisgIC8qIENvbnZlcnQgdGhlIFMtZXhwcmVzc2lvbnMgaW50byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uICAqLworICB3aGF0ID0gImNvbnZlcnQiOworICBlcnIgPSBzZXhwX3NzY2FuICgmc2tleSwgTlVMTCwgc2FtcGxlX3NlY3JldF9rZXksIHN0cmxlbiAoc2FtcGxlX3NlY3JldF9rZXkpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gc2V4cF9zc2NhbiAoJnBrZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3B1YmxpY19rZXksIHN0cmxlbiAoc2FtcGxlX3B1YmxpY19rZXkpKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9zdHJlcnJvciAoZXJyKTsKKyAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICB3aGF0ID0gImtleSBjb25zaXN0ZW5jeSI7CisgIGVyciA9IF9nY3J5X3BrX3Rlc3RrZXkgKHNrZXkpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGVycnR4dCA9IF9nY3J5X3N0cmVycm9yIChlcnIpOworICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgIHdoYXQgPSAic2lnbiI7CisgIGVycnR4dCA9IHNlbGZ0ZXN0X3NpZ25fMTAyNCAocGtleSwgc2tleSk7CisgIGlmIChlcnJ0eHQpCisgICAgZ290byBmYWlsZWQ7CisKKyAgc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgc2V4cF9yZWxlYXNlIChza2V5KTsKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KKworIGZhaWxlZDoKKyAgc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgc2V4cF9yZWxlYXNlIChza2V5KTsKKyAgaWYgKHJlcG9ydCkKKyAgICByZXBvcnQgKCJwdWJrZXkiLCBHQ1JZX1BLX0RTQSwgd2hhdCwgZXJydHh0KTsKKyAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworfQorCisKKy8qIFJ1biBhIGZ1bGwgc2VsZi10ZXN0IGZvciBBTEdPIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorcnVuX3NlbGZ0ZXN0cyAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGdwZ19lcnJfY29kZV90IGVjOworCisgICh2b2lkKWV4dGVuZGVkOworCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSBHQ1JZX1BLX0RTQToKKyAgICAgIGVjID0gc2VsZnRlc3RzX2RzYSAocmVwb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlYyA9IEdQR19FUlJfUFVCS0VZX0FMR087CisgICAgICBicmVhazsKKworICAgIH0KKyAgcmV0dXJuIGVjOworfQorCisKKworDAorZ2NyeV9wa19zcGVjX3QgX2djcnlfcHVia2V5X3NwZWNfZHNhID0KKyAgeworICAgIEdDUllfUEtfRFNBLCB7IDAsIDEgfSwKKyAgICBHQ1JZX1BLX1VTQUdFX1NJR04sCisgICAgIkRTQSIsIGRzYV9uYW1lcywKKyAgICAicHFneSIsICJwcWd5eCIsICIiLCAicnMiLCAicHFneSIsCisgICAgZHNhX2dlbmVyYXRlLAorICAgIGRzYV9jaGVja19zZWNyZXRfa2V5LAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBkc2Ffc2lnbiwKKyAgICBkc2FfdmVyaWZ5LAorICAgIGRzYV9nZXRfbmJpdHMsCisgICAgcnVuX3NlbGZ0ZXN0cworICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2VjYy1jb21tb24uaCBiL2NpcGhlci9lY2MtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwN2M3NAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9lY2MtY29tbW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qIGVjYy1jb21tb24uaCAtIERlY2xhcmF0aW9ucyBvZiBjb21tb24gRUNDIGNvZGUKKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgR0NSWV9FQ0NfQ09NTU9OX0gKKyNkZWZpbmUgR0NSWV9FQ0NfQ09NTU9OX0gKKworCisvKiBEZWZpbml0aW9uIG9mIGEgY3VydmUuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZW51bSBnY3J5X21waV9lY19tb2RlbHMgbW9kZWw7LyogVGhlIG1vZGVsIGRlc2NyaW5iaW5nIHRoaXMgY3VydmUuICAqLworICBlbnVtIGVjY19kaWFsZWN0cyBkaWFsZWN0OyAgICAvKiBUaGUgZGlhbGVjdCB1c2VkIHdpdGggdGhlIGN1cnZlLiAgICovCisgIGdjcnlfbXBpX3QgcDsgICAgICAgICAvKiBQcmltZSBzcGVjaWZ5aW5nIHRoZSBmaWVsZCBHRihwKS4gICovCisgIGdjcnlfbXBpX3QgYTsgICAgICAgICAvKiBGaXJzdCBjb2VmZmljaWVudCBvZiB0aGUgV2VpZXJzdHJhc3MgZXF1YXRpb24uICAqLworICBnY3J5X21waV90IGI7ICAgICAgICAgLyogU2Vjb25kIGNvZWZmaWNpZW50IG9mIHRoZSBXZWllcnN0cmFzcyBlcXVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGQgYXMgdXNlZCBieSBUd2lzdGVkIEVkd2FyZHMgY3VydmVzLiAgKi8KKyAgbXBpX3BvaW50X3N0cnVjdCBHOyAgIC8qIEJhc2UgcG9pbnQgKGdlbmVyYXRvcikuICAqLworICBnY3J5X21waV90IG47ICAgICAgICAgLyogT3JkZXIgb2YgRy4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAvKiBOYW1lIG9mIHRoZSBjdXJ2ZSBvciBOVUxMLiAgKi8KK30gZWxsaXB0aWNfY3VydmVfdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICBlbGxpcHRpY19jdXJ2ZV90IEU7CisgIG1waV9wb2ludF9zdHJ1Y3QgUTsgLyogUSA9IFtkXUcgICovCit9IEVDQ19wdWJsaWNfa2V5OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGVsbGlwdGljX2N1cnZlX3QgRTsKKyAgbXBpX3BvaW50X3N0cnVjdCBROworICBnY3J5X21waV90IGQ7Cit9IEVDQ19zZWNyZXRfa2V5OworCisKKworLyogU2V0IHRoZSB2YWx1ZSBmcm9tIFMgaW50byBELiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcG9pbnRfc2V0IChtcGlfcG9pbnRfdCBkLCBtcGlfcG9pbnRfdCBzKQoreworICBtcGlfc2V0IChkLT54LCBzLT54KTsKKyAgbXBpX3NldCAoZC0+eSwgcy0+eSk7CisgIG1waV9zZXQgKGQtPnosIHMtPnopOworfQorCisjZGVmaW5lIHBvaW50X2luaXQoYSkgIF9nY3J5X21waV9wb2ludF9pbml0ICgoYSkpCisjZGVmaW5lIHBvaW50X2ZyZWUoYSkgIF9nY3J5X21waV9wb2ludF9mcmVlX3BhcnRzICgoYSkpCisKKworLyotLSBlY2MtY3VydmVzLmMgLS0qLworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUgKHVuc2lnbmVkIGludCBuYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwdGljX2N1cnZlX3QgKmN1cnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYml0cyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9lY2NfdXBkYXRlX2N1cnZlX3BhcmFtIChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X21waV9lY19tb2RlbHMgKm1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBlY2NfZGlhbGVjdHMgKmRpYWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICpwLCBnY3J5X21waV90ICphLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqYiwgZ2NyeV9tcGlfdCAqZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKm4pOworCitjb25zdCBjaGFyICpfZ2NyeV9lY2NfZ2V0X2N1cnZlIChnY3J5X3NleHBfdCBrZXlwYXJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYml0cyk7CitnY3J5X3NleHBfdCBfZ2NyeV9lY2NfZ2V0X3BhcmFtX3NleHAgKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKi0tIGVjYy1taXNjLmMgLS0qLwordm9pZCBfZ2NyeV9lY2NfY3VydmVfZnJlZSAoZWxsaXB0aWNfY3VydmVfdCAqRSk7CitlbGxpcHRpY19jdXJ2ZV90IF9nY3J5X2VjY19jdXJ2ZV9jb3B5IChlbGxpcHRpY19jdXJ2ZV90IEUpOworY29uc3QgY2hhciAqX2djcnlfZWNjX21vZGVsMnN0ciAoZW51bSBnY3J5X21waV9lY19tb2RlbHMgbW9kZWwpOworY29uc3QgY2hhciAqX2djcnlfZWNjX2RpYWxlY3Qyc3RyIChlbnVtIGVjY19kaWFsZWN0cyBkaWFsZWN0KTsKK2djcnlfbXBpX3QgICBfZ2NyeV9lY2NfZWMyb3MgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHApOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2VjY19vczJlYyAobXBpX3BvaW50X3QgcmVzdWx0LCBnY3J5X21waV90IHZhbHVlKTsKKworbXBpX3BvaW50X3QgIF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyAobXBpX3BvaW50X3QgUSwgbXBpX2VjX3QgZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfcG9pbnRfdCBHLCBnY3J5X21waV90IGQpOworCisvKi0tIGVjYy5jIC0tKi8KKworLyotLSBlY2MtZWNkc2EuYyAtLSovCitncGdfZXJyX2NvZGVfdCBfZ2NyeV9lY2NfZWNkc2Ffc2lnbiAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3NlY3JldF9rZXkgKnNrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCByLCBnY3J5X21waV90IHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgaGFzaGFsZ28pOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2VjZHNhX3ZlcmlmeSAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3B1YmxpY19rZXkgKnBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHIsIGdjcnlfbXBpX3Qgcyk7CisKKy8qLS0gZWNjLWVkZHNhLmMgLS0qLworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2VkZHNhX3JlY292ZXJfeCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGludCBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgZWMpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2VkZHNhX2VuY29kZXBvaW50IChtcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnJfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnJfYnVmbGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2VjY19lZGRzYV9lbnN1cmVfY29tcGFjdCAoZ2NyeV9tcGlfdCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCAoZ2NyeV9tcGlfdCBwaywgbXBpX2VjX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipyX2VuY3BrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnJfZW5jcGtsZW4pOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2VkZHNhX2NvbXB1dGVfaF9kICh1bnNpZ25lZCBjaGFyICoqcl9kaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZCwgbXBpX2VjX3QgZWMpOworCitncGdfZXJyX2NvZGVfdCBfZ2NyeV9lY2NfZWRkc2FfZ2Vua2V5IChFQ0Nfc2VjcmV0X2tleSAqc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHRpY19jdXJ2ZV90ICpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWwpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZWNjX2VkZHNhX3NpZ24gKGdjcnlfbXBpX3QgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUNDX3NlY3JldF9rZXkgKnNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgcl9yLCBnY3J5X21waV90IHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2hhbGdvLCBnY3J5X21waV90IHBrKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2VjY19lZGRzYV92ZXJpZnkgKGdjcnlfbXBpX3QgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ0NfcHVibGljX2tleSAqcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNoYWxnbywgZ2NyeV9tcGlfdCBwa21waSk7CisKKy8qLS0gZWNjLWdvc3QuYyAtLSovCitncGdfZXJyX2NvZGVfdCBfZ2NyeV9lY2NfZ29zdF9zaWduIChnY3J5X21waV90IGlucHV0LCBFQ0Nfc2VjcmV0X2tleSAqc2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBzKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2VjY19nb3N0X3ZlcmlmeSAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3B1YmxpY19rZXkgKnBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBzKTsKKworCisjZW5kaWYgLypHQ1JZX0VDQ19DT01NT05fSCovCmRpZmYgLS1naXQgYS9jaXBoZXIvZWNjLWN1cnZlcy5jIGIvY2lwaGVyL2VjYy1jdXJ2ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFkZmQxCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2VjYy1jdXJ2ZXMuYwpAQCAtMCwwICsxLDExNjIgQEAKKy8qIGVjYy1jdXJ2ZXMuYyAgLSAgRWxsaXB0aWMgQ3VydmUgcGFyYW1ldGVyIG1hbmdlbWVudAorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1waS5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImNvbnRleHQuaCIKKyNpbmNsdWRlICJlYy1jb250ZXh0LmgiCisjaW5jbHVkZSAicHVia2V5LWludGVybmFsLmgiCisjaW5jbHVkZSAiZWNjLWNvbW1vbi5oIgorCisKKy8qIFRoaXMgdGFibGVzIGRlZmluZXMgYWxpYXNlcyBmb3IgY3VydmUgbmFtZXMuICAqLworc3RhdGljIGNvbnN0IHN0cnVjdAoreworICBjb25zdCBjaGFyICpuYW1lOyAgLyogT3VyIG5hbWUuICAqLworICBjb25zdCBjaGFyICpvdGhlcjsgLyogT3RoZXIgbmFtZS4gKi8KK30gY3VydmVfYWxpYXNlc1tdID0KKyAgeworICAvKnsgIkN1cnZlMjU1MTkiLCAiMS4zLjYuMS40LjEuMzAyOS4xLjUuMSIgfSwqLworICAgIHsgIkVkMjU1MTkiLCAgICAiMS4zLjYuMS40LjEuMTE1OTEuMTUuMSIgfSwKKworICAgIHsgIk5JU1QgUC0xOTIiLCAiMS4yLjg0MC4xMDA0NS4zLjEuMSIgfSwgLyogWDkuNjIgT0lEICAqLworICAgIHsgIk5JU1QgUC0xOTIiLCAicHJpbWUxOTJ2MSIgfSwgICAgICAgICAgLyogWDkuNjIgbmFtZS4gICovCisgICAgeyAiTklTVCBQLTE5MiIsICJzZWNwMTkycjEiICB9LCAgICAgICAgICAvKiBTRUNQIG5hbWUuICAqLworICAgIHsgIk5JU1QgUC0xOTIiLCAibmlzdHAxOTIiICAgfSwgICAgICAgICAgLyogcmZjNTY1Ni4gICovCisKKyAgICB7ICJOSVNUIFAtMjI0IiwgInNlY3AyMjRyMSIgfSwKKyAgICB7ICJOSVNUIFAtMjI0IiwgIjEuMy4xMzIuMC4zMyIgfSwgICAgICAgIC8qIFNFQ1AgT0lELiAgKi8KKyAgICB7ICJOSVNUIFAtMjI0IiwgIm5pc3RwMjI0IiAgIH0sICAgICAgICAgIC8qIHJmYzU2NTYuICAqLworCisgICAgeyAiTklTVCBQLTI1NiIsICIxLjIuODQwLjEwMDQ1LjMuMS43IiB9LCAvKiBGcm9tIE5JU1QgU1AgODAwLTc4LTEuICAqLworICAgIHsgIk5JU1QgUC0yNTYiLCAicHJpbWUyNTZ2MSIgfSwKKyAgICB7ICJOSVNUIFAtMjU2IiwgInNlY3AyNTZyMSIgIH0sCisgICAgeyAiTklTVCBQLTI1NiIsICJuaXN0cDI1NiIgICB9LCAgICAgICAgICAvKiByZmM1NjU2LiAgKi8KKworICAgIHsgIk5JU1QgUC0zODQiLCAic2VjcDM4NHIxIiB9LAorICAgIHsgIk5JU1QgUC0zODQiLCAiMS4zLjEzMi4wLjM0IiB9LAorICAgIHsgIk5JU1QgUC0zODQiLCAibmlzdHAzODQiICAgfSwgICAgICAgICAgLyogcmZjNTY1Ni4gICovCisKKyAgICB7ICJOSVNUIFAtNTIxIiwgInNlY3A1MjFyMSIgfSwKKyAgICB7ICJOSVNUIFAtNTIxIiwgIjEuMy4xMzIuMC4zNSIgfSwKKyAgICB7ICJOSVNUIFAtNTIxIiwgIm5pc3RwNTIxIiAgIH0sICAgICAgICAgIC8qIHJmYzU2NTYuICAqLworCisgICAgeyAiYnJhaW5wb29sUDE2MHIxIiwgIjEuMy4zNi4zLjMuMi44LjEuMS4xIiB9LAorICAgIHsgImJyYWlucG9vbFAxOTJyMSIsICIxLjMuMzYuMy4zLjIuOC4xLjEuMyIgfSwKKyAgICB7ICJicmFpbnBvb2xQMjI0cjEiLCAiMS4zLjM2LjMuMy4yLjguMS4xLjUiIH0sCisgICAgeyAiYnJhaW5wb29sUDI1NnIxIiwgIjEuMy4zNi4zLjMuMi44LjEuMS43IiB9LAorICAgIHsgImJyYWlucG9vbFAzMjByMSIsICIxLjMuMzYuMy4zLjIuOC4xLjEuOSIgfSwKKyAgICB7ICJicmFpbnBvb2xQMzg0cjEiLCAiMS4zLjM2LjMuMy4yLjguMS4xLjExIn0sCisgICAgeyAiYnJhaW5wb29sUDUxMnIxIiwgIjEuMy4zNi4zLjMuMi44LjEuMS4xMyJ9LAorCisgICAgeyBOVUxMLCBOVUxMfQorICB9OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IGNoYXIgKmRlc2M7ICAgICAgICAgICAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgY3VydmUuICAqLworICB1bnNpZ25lZCBpbnQgbmJpdHM7ICAgICAgICAgLyogTnVtYmVyIG9mIGJpdHMuICAqLworICB1bnNpZ25lZCBpbnQgZmlwczoxOyAgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgRklQUzE0MC0yIGFwcHJvdmVkIGN1cnZlLiAqLworCisgIC8qIFRoZSBtb2RlbCBkZXNjcmliaW5nIHRoaXMgY3VydmUuICBUaGlzIGlzIG1haW5seSB1c2VkIHRvIHNlbGVjdAorICAgICB0aGUgZ3JvdXAgZXF1YXRpb24uICovCisgIGVudW0gZ2NyeV9tcGlfZWNfbW9kZWxzIG1vZGVsOworCisgIC8qIFRoZSBhY3R1YWwgRUNDIGRpYWxlY3QgdXNlZC4gIFRoaXMgaXMgdXNlZCBmb3IgY3VydmUgc3BlY2lmaWMKKyAgICAgb3B0aW1pemF0aW9ucyBhbmQgdG8gc2VsZWN0IGVuY29kaW5ncyBldGMuICovCisgIGVudW0gZWNjX2RpYWxlY3RzIGRpYWxlY3Q7CisKKyAgY29uc3QgY2hhciAqcDsgICAgICAgICAgICAgIC8qIFRoZSBwcmltZSBkZWZpbmluZyB0aGUgZmllbGQuICAqLworICBjb25zdCBjaGFyICphLCAqYjsgICAgICAgICAgLyogVGhlIGNvZWZmaWNpZW50cy4gIEZvciBUd2lzdGVkIEVkd2FyZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnZlcyBiIGlzIHVzZWQgZm9yIGQuICAqLworICBjb25zdCBjaGFyICpuOyAgICAgICAgICAgICAgLyogVGhlIG9yZGVyIG9mIHRoZSBiYXNlIHBvaW50LiAgKi8KKyAgY29uc3QgY2hhciAqZ194LCAqZ195OyAgICAgIC8qIEJhc2UgcG9pbnQuICAqLworfSBlY2NfZG9tYWluX3Bhcm1zX3Q7CisKKworLyogVGhpcyBzdGF0aWMgdGFibGUgZGVmaW5lcyBhbGwgYXZhaWxhYmxlIGN1cnZlcy4gICovCitzdGF0aWMgY29uc3QgZWNjX2RvbWFpbl9wYXJtc190IGRvbWFpbl9wYXJtc1tdID0KKyAgeworICAgIHsKKyAgICAgIC8qICgteF4yICsgeV4yID0gMSArIGR4XjJ5XjIpICovCisgICAgICAiRWQyNTUxOSIsIDI1NiwgMCwKKyAgICAgIE1QSV9FQ19UV0lTVEVERURXQVJEUywgRUNDX0RJQUxFQ1RfRUQyNTUxOSwKKyAgICAgICIweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUQiLAorICAgICAgIi0weDAxIiwKKyAgICAgICItMHgyREZDOTMxMUQ0OTAwMThDNzMzOEJGODY4ODg2MTc2N0ZGOEZGNUIyQkVCRTI3NTQ4QTE0QjIzNUVDQTY4NzRBIiwKKyAgICAgICIweDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRERUY5REVBMkY3OUNENjU4MTI2MzFBNUNGNUQzRUQiLAorICAgICAgIjB4MjE2OTM2RDNDRDZFNTNGRUMwQTRFMjMxRkRENkRDNUM2OTJDQzc2MDk1MjVBN0IyQzk1NjJENjA4RjI1RDUxQSIsCisgICAgICAiMHg2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4IgorICAgIH0sCisgICAgeworICAgICAgIk5JU1QgUC0xOTIiLCAxOTIsIDEsCisgICAgICBNUElfRUNfV0VJRVJTVFJBU1MsIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZmZmZmIiwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZmZmYyIsCisgICAgICAiMHg2NDIxMDUxOWU1OWM4MGU3MGZhN2U5YWI3MjI0MzA0OWZlYjhkZWVjYzE0NmI5YjEiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTlkZWY4MzYxNDZiYzliMWI0ZDIyODMxIiwKKworICAgICAgIjB4MTg4ZGE4MGViMDMwOTBmNjdjYmYyMGViNDNhMTg4MDBmNGZmMGFmZDgyZmYxMDEyIiwKKyAgICAgICIweDA3MTkyYjk1ZmZjOGRhNzg2MzEwMTFlZDZiMjRjZGQ1NzNmOTc3YTExZTc5NDgxMSIKKyAgICB9LAorICAgIHsKKyAgICAgICJOSVNUIFAtMjI0IiwgMjI0LCAxLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlIiwKKyAgICAgICIweGI0MDUwYTg1MGMwNGIzYWJmNTQxMzI1NjUwNDRiMGI3ZDdiZmQ4YmEyNzBiMzk0MzIzNTVmZmI0IiwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxNmEyZTBiOGYwM2UxM2RkMjk0NTVjNWMyYTNkIiAsCisKKyAgICAgICIweGI3MGUwY2JkNmJiNGJmN2YzMjEzOTBiOTRhMDNjMWQzNTZjMjExMjIzNDMyODBkNjExNWMxZDIxIiwKKyAgICAgICIweGJkMzc2Mzg4YjVmNzIzZmI0YzIyZGZlNmNkNDM3NWEwNWEwNzQ3NjQ0NGQ1ODE5OTg1MDA3ZTM0IgorICAgIH0sCisgICAgeworICAgICAgIk5JU1QgUC0yNTYiLCAyNTYsIDEsCisgICAgICBNUElfRUNfV0VJRVJTVFJBU1MsIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgIjB4ZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisgICAgICAiMHhmZmZmZmZmZjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjIiwKKyAgICAgICIweDVhYzYzNWQ4YWEzYTkzZTdiM2ViYmQ1NTc2OTg4NmJjNjUxZDA2YjBjYzUzYjBmNjNiY2UzYzNlMjdkMjYwNGIiLAorICAgICAgIjB4ZmZmZmZmZmYwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZiY2U2ZmFhZGE3MTc5ZTg0ZjNiOWNhYzJmYzYzMjU1MSIsCisKKyAgICAgICIweDZiMTdkMWYyZTEyYzQyNDdmOGJjZTZlNTYzYTQ0MGYyNzcwMzdkODEyZGViMzNhMGY0YTEzOTQ1ZDg5OGMyOTYiLAorICAgICAgIjB4NGZlMzQyZTJmZTFhN2Y5YjhlZTdlYjRhN2MwZjllMTYyYmNlMzM1NzZiMzE1ZWNlY2JiNjQwNjgzN2JmNTFmNSIKKyAgICB9LAorICAgIHsKKyAgICAgICJOSVNUIFAtMzg0IiwgMzg0LCAxLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUiCisgICAgICAiZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwZmZmZmZmZmYiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZSIKKyAgICAgICJmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmYyIsCisgICAgICAiMHhiMzMxMmZhN2UyM2VlN2U0OTg4ZTA1NmJlM2Y4MmQxOTE4MWQ5YzZlZmU4MTQxMTIwMzE0MDg4ZjUwMTM4NzVhIgorICAgICAgImM2NTYzOThkOGEyZWQxOWQyYTg1YzhlZGQzZWMyYWVmIiwKKyAgICAgICIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM3NjM0ZDgxZjQzNzJkZGYiCisgICAgICAiNTgxYTBkYjI0OGIwYTc3YWVjZWMxOTZhY2NjNTI5NzMiLAorCisgICAgICAiMHhhYTg3Y2EyMmJlOGIwNTM3OGViMWM3MWVmMzIwYWQ3NDZlMWQzYjYyOGJhNzliOTg1OWY3NDFlMDgyNTQyYTM4IgorICAgICAgIjU1MDJmMjVkYmY1NTI5NmMzYTU0NWUzODcyNzYwYWI3IiwKKyAgICAgICIweDM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAiCisgICAgICAiMGE2MGIxY2UxZDdlODE5ZDdhNDMxZDdjOTBlYTBlNWYiCisgICAgfSwKKyAgICB7CisgICAgICAiTklTVCBQLTUyMSIsIDUyMSwgMSwKKyAgICAgIE1QSV9FQ19XRUlFUlNUUkFTUywgRUNDX0RJQUxFQ1RfU1RBTkRBUkQsCisgICAgICAiMHgwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIgorICAgICAgImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyAgICAgICIweDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiCisgICAgICAiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMiLAorICAgICAgIjB4MDUxOTUzZWI5NjE4ZTFjOWExZjkyOWEyMWEwYjY4NTQwZWVhMmRhNzI1Yjk5YjMxNWYzYjhiNDg5OTE4ZWYxMCIKKyAgICAgICI5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIxYmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwIiwKKyAgICAgICIweDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiCisgICAgICAiZmZhNTE4Njg3ODNiZjJmOTY2YjdmY2MwMTQ4ZjcwOWE1ZDAzYmI1YzliODg5OWM0N2FlYmI2ZmI3MWU5MTM4NjQwOSIsCisKKyAgICAgICIweDAwYzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1MjFmODI4YWY2MDZiNGQiCisgICAgICAiM2RiYWExNGI1ZTc3ZWZlNzU5MjhmZTFkYzEyN2EyZmZhOGRlMzM0OGIzYzE4NTZhNDI5YmY5N2U3ZTMxYzJlNWJkNjYiLAorICAgICAgIjB4MDExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZSIKKyAgICAgICI2NjJjOTdlZTcyOTk1ZWY0MjY0MGM1NTBiOTAxM2ZhZDA3NjEzNTNjNzA4NmEyNzJjMjQwODhiZTk0NzY5ZmQxNjY1MCIKKyAgICB9LAorCisgICAgeyAiYnJhaW5wb29sUDE2MHIxIiwgMTYwLCAwLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweGU5NWU0YTVmNzM3MDU5ZGM2MGRmYzdhZDk1YjNkODEzOTUxNTYyMGYiLAorICAgICAgIjB4MzQwZTdiZTJhMjgwZWI3NGUyYmU2MWJhZGE3NDVkOTdlOGY3YzMwMCIsCisgICAgICAiMHgxZTU4OWE4NTk1NDIzNDEyMTM0ZmFhMmRiZGVjOTVjOGQ4Njc1ZTU4IiwKKyAgICAgICIweGU5NWU0YTVmNzM3MDU5ZGM2MGRmNTk5MWQ0NTAyOTQwOWU2MGZjMDkiLAorICAgICAgIjB4YmVkNWFmMTZlYTNmNmE0ZjYyOTM4YzQ2MzFlYjVhZjdiZGJjZGJjMyIsCisgICAgICAiMHgxNjY3Y2I0NzdhMWE4ZWMzMzhmOTQ3NDE2NjljOTc2MzE2ZGE2MzIxIgorICAgIH0sCisKKyAgICB7ICJicmFpbnBvb2xQMTkycjEiLCAxOTIsIDAsCisgICAgICBNUElfRUNfV0VJRVJTVFJBU1MsIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgIjB4YzMwMmY0MWQ5MzJhMzZjZGE3YTM0NjMwOTNkMThkYjc4ZmNlNDc2ZGUxYTg2Mjk3IiwKKyAgICAgICIweDZhOTExNzQwNzZiMWUwZTE5YzM5YzAzMWZlODY4NWMxY2FlMDQwZTVjNjlhMjhlZiIsCisgICAgICAiMHg0NjlhMjhlZjdjMjhjY2EzZGM3MjFkMDQ0ZjQ0OTZiY2NhN2VmNDE0NmZiZjI1YzkiLAorICAgICAgIjB4YzMwMmY0MWQ5MzJhMzZjZGE3YTM0NjJmOWU5ZTkxNmI1YmU4ZjEwMjlhYzRhY2MxIiwKKyAgICAgICIweGMwYTA2NDdlYWFiNmE0ODc1M2IwMzNjNTZjYjBmMDkwMGEyZjVjNDg1MzM3NWZkNiIsCisgICAgICAiMHgxNGI2OTA4NjZhYmQ1YmI4OGI1ZjQ4MjhjMTQ5MDAwMmU2NzczZmEyZmEyOTliOGYiCisgICAgfSwKKworICAgIHsgImJyYWlucG9vbFAyMjRyMSIsIDIyNCwgMCwKKyAgICAgIE1QSV9FQ19XRUlFUlNUUkFTUywgRUNDX0RJQUxFQ1RfU1RBTkRBUkQsCisgICAgICAiMHhkN2MxMzRhYTI2NDM2Njg2MmExODMwMjU3NWQxZDc4N2IwOWYwNzU3OTdkYTg5ZjU3ZWM4YzBmZiIsCisgICAgICAiMHg2OGE1ZTYyY2E5Y2U2YzFjMjk5ODAzYTZjMTUzMGI1MTRlMTgyYWQ4YjAwNDJhNTljYWQyOWY0MyIsCisgICAgICAiMHgyNTgwZjYzY2NmZTQ0MTM4ODcwNzEzYjFhOTIzNjllMzNlMjEzNWQyNjZkYmIzNzIzODZjNDAwYiIsCisgICAgICAiMHhkN2MxMzRhYTI2NDM2Njg2MmExODMwMjU3NWQwZmI5OGQxMTZiYzRiNmRkZWJjYTNhNWE3OTM5ZiIsCisgICAgICAiMHgwZDkwMjlhZDJjN2U1Y2Y0MzQwODIzYjJhODdkYzY4YzllNGNlMzE3NGMxZTZlZmRlZTEyYzA3ZCIsCisgICAgICAiMHg1OGFhNTZmNzcyYzA3MjZmMjRjNmI4OWU0ZWNkYWMyNDM1NGI5ZTk5Y2FhM2Y2ZDM3NjE0MDJjZCIKKyAgICB9LAorCisgICAgeyAiYnJhaW5wb29sUDI1NnIxIiwgMjU2LCAwLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweGE5ZmI1N2RiYTFlZWE5YmMzZTY2MGE5MDlkODM4ZDcyNmUzYmY2MjNkNTI2MjAyODIwMTM0ODFkMWY2ZTUzNzciLAorICAgICAgIjB4N2Q1YTA5NzVmYzJjMzA1N2VlZjY3NTMwNDE3YWZmZTdmYjgwNTVjMTI2ZGM1YzZjZTk0YTRiNDRmMzMwYjVkOSIsCisgICAgICAiMHgyNmRjNWM2Y2U5NGE0YjQ0ZjMzMGI1ZDliYmQ3N2NiZjk1ODQxNjI5NWNmN2UxY2U2YmNjZGMxOGZmOGMwN2I2IiwKKyAgICAgICIweGE5ZmI1N2RiYTFlZWE5YmMzZTY2MGE5MDlkODM4ZDcxOGMzOTdhYTNiNTYxYTZmNzkwMWUwZTgyOTc0ODU2YTciLAorICAgICAgIjB4OGJkMmFlYjljYjdlNTdjYjJjNGI0ODJmZmM4MWI3YWZiOWRlMjdlMWUzYmQyM2MyM2E0NDUzYmQ5YWNlMzI2MiIsCisgICAgICAiMHg1NDdlZjgzNWMzZGFjNGZkOTdmODQ2MWExNDYxMWRjOWMyNzc0NTEzMmRlZDhlNTQ1YzFkNTRjNzJmMDQ2OTk3IgorICAgIH0sCisKKyAgICB7ICJicmFpbnBvb2xQMzIwcjEiLCAzMjAsIDAsCisgICAgICBNUElfRUNfV0VJRVJTVFJBU1MsIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgIjB4ZDM1ZTQ3MjAzNmJjNGZiN2UxM2M3ODVlZDIwMWUwNjVmOThmY2ZhNmY2ZjQwZGVmNGY5MmI5ZWM3ODkzZWMyOCIKKyAgICAgICJmY2Q0MTJiMWYxYjMyZTI3IiwKKyAgICAgICIweDNlZTMwYjU2OGZiYWIwZjg4M2NjZWJkNDZkM2YzYmI4YTJhNzM1MTNmNWViNzlkYTY2MTkwZWIwODVmZmE5ZjQiCisgICAgICAiOTJmMzc1YTk3ZDg2MGViNCIsCisgICAgICAiMHg1MjA4ODM5NDlkZmRiYzQyZDNhZDE5ODY0MDY4OGE2ZmUxM2Y0MTM0OTU1NGI0OWFjYzMxZGNjZDg4NDUzOTgxIgorICAgICAgIjZmNWViNGFjOGZiMWYxYTYiLAorICAgICAgIjB4ZDM1ZTQ3MjAzNmJjNGZiN2UxM2M3ODVlZDIwMWUwNjVmOThmY2ZhNWI2OGYxMmEzMmQ0ODJlYzdlZTg2NThlOSIKKyAgICAgICI4NjkxNTU1YjQ0YzU5MzExIiwKKyAgICAgICIweDQzYmQ3ZTlhZmI1M2Q4Yjg1Mjg5YmNjNDhlZTViZmU2ZjIwMTM3ZDEwYTA4N2ViNmU3ODcxZTJhMTBhNTk5YzciCisgICAgICAiMTBhZjhkMGQzOWUyMDYxMSIsCisgICAgICAiMHgxNGZkZDA1NTQ1ZWMxY2M4YWI0MDkzMjQ3Zjc3Mjc1ZTA3NDNmZmVkMTE3MTgyZWFhOWM3Nzg3N2FhYWM2YWM3IgorICAgICAgImQzNTI0NWQxNjkyZThlZTEiCisgICAgfSwKKworICAgIHsgImJyYWlucG9vbFAzODRyMSIsIDM4NCwgMCwKKyAgICAgIE1QSV9FQ19XRUlFUlNUUkFTUywgRUNDX0RJQUxFQ1RfU1RBTkRBUkQsCisgICAgICAiMHg4Y2I5MWU4MmEzMzg2ZDI4MGY1ZDZmN2U1MGU2NDFkZjE1MmY3MTA5ZWQ1NDU2YjQxMmIxZGExOTdmYjcxMTIzIgorICAgICAgImFjZDNhNzI5OTAxZDFhNzE4NzQ3MDAxMzMxMDdlYzUzIiwKKyAgICAgICIweDdiYzM4MmM2M2Q4YzE1MGMzYzcyMDgwYWNlMDVhZmEwYzJiZWEyOGU0ZmIyMjc4NzEzOTE2NWVmYmE5MWY5MGYiCisgICAgICAiOGFhNTgxNGE1MDNhZDRlYjA0YThjN2RkMjJjZTI4MjYiLAorICAgICAgIjB4MDRhOGM3ZGQyMmNlMjgyNjhiMzliNTU0MTZmMDQ0N2MyZmI3N2RlMTA3ZGNkMmE2MmU4ODBlYTUzZWViNjJkNSIKKyAgICAgICI3Y2I0MzkwMjk1ZGJjOTk0M2FiNzg2OTZmYTUwNGMxMSIsCisgICAgICAiMHg4Y2I5MWU4MmEzMzg2ZDI4MGY1ZDZmN2U1MGU2NDFkZjE1MmY3MTA5ZWQ1NDU2YjMxZjE2NmU2Y2FjMDQyNWE3IgorICAgICAgImNmM2FiNmFmNmI3ZmMzMTAzYjg4MzIwMmU5MDQ2NTY1IiwKKyAgICAgICIweDFkMWM2NGYwNjhjZjQ1ZmZhMmE2M2E4MWI3YzEzZjZiODg0N2EzZTc3ZWYxNGZlM2RiN2ZjYWZlMGNiZDEwZTgiCisgICAgICAiZTgyNmUwMzQzNmQ2NDZhYWVmODdiMmUyNDdkNGFmMWUiLAorICAgICAgIjB4OGFiZTFkNzUyMGY5YzJhNDVjYjFlYjhlOTVjZmQ1NTI2MmI3MGIyOWZlZWM1ODY0ZTE5YzA1NGZmOTkxMjkyOCIKKyAgICAgICIwZTQ2NDYyMTc3OTE4MTExNDI4MjAzNDEyNjNjNTMxNSIKKyAgICB9LAorCisgICAgeyAiYnJhaW5wb29sUDUxMnIxIiwgNTEyLCAwLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweGFhZGQ5ZGI4ZGJlOWM0OGIzZmQ0ZTZhZTMzYzlmYzA3Y2IzMDhkYjNiM2M5ZDIwZWQ2NjM5Y2NhNzAzMzA4NzEiCisgICAgICAiN2Q0ZDliMDA5YmM2Njg0MmFlY2RhMTJhZTZhMzgwZTYyODgxZmYyZjJkODJjNjg1MjhhYTYwNTY1ODNhNDhmMyIsCisgICAgICAiMHg3ODMwYTMzMThiNjAzYjg5ZTIzMjcxNDVhYzIzNGNjNTk0Y2JkZDhkM2RmOTE2MTBhODM0NDFjYWVhOTg2M2JjIgorICAgICAgIjJkZWQ1ZDVhYTgyNTNhYTEwYTJlZjFjOThiOWFjOGI1N2YxMTE3YTcyYmYyYzdiOWU3YzFhYzRkNzdmYzk0Y2EiLAorICAgICAgIjB4M2RmOTE2MTBhODM0NDFjYWVhOTg2M2JjMmRlZDVkNWFhODI1M2FhMTBhMmVmMWM5OGI5YWM4YjU3ZjExMTdhNyIKKyAgICAgICIyYmYyYzdiOWU3YzFhYzRkNzdmYzk0Y2FkYzA4M2U2Nzk4NDA1MGI3NWViYWU1ZGQyODA5YmQ2MzgwMTZmNzIzIiwKKyAgICAgICIweGFhZGQ5ZGI4ZGJlOWM0OGIzZmQ0ZTZhZTMzYzlmYzA3Y2IzMDhkYjNiM2M5ZDIwZWQ2NjM5Y2NhNzAzMzA4NzAiCisgICAgICAiNTUzZTVjNDE0Y2E5MjYxOTQxODY2MTE5N2ZhYzEwNDcxZGIxZDM4MTA4NWRkYWRkYjU4Nzk2ODI5Y2E5MDA2OSIsCisgICAgICAiMHg4MWFlZTRiZGQ4MmVkOTY0NWEyMTMyMmU5YzRjNmE5Mzg1ZWQ5ZjcwYjVkOTE2YzFiNDNiNjJlZWY0ZDAwOThlIgorICAgICAgImZmM2IxZjc4ZTJkMGQ0OGQ1MGQxNjg3YjkzYjk3ZDVmN2M2ZDUwNDc0MDZhNWU2ODhiMzUyMjA5YmNiOWY4MjIiLAorICAgICAgIjB4N2RkZTM4NWQ1NjYzMzJlY2MwZWFiZmE5Y2Y3ODIyZmRmMjA5ZjcwMDI0YTU3YjFhYTAwMGM1NWI4ODFmODExMSIKKyAgICAgICJiMmRjZGU0OTRhNWY0ODVlNWJjYTRiZDg4YTI3NjNhZWQxY2EyYjJmYThmMDU0MDY3OGNkMWUwZjNhZDgwODkyIgorICAgIH0sCisgICAgeworICAgICAgIkdPU1QyMDAxLXRlc3QiLCAyNTYsIDAsCisgICAgICBNUElfRUNfV0VJRVJTVFJBU1MsIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgIjB4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzMSIsCisgICAgICAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3IiwKKyAgICAgICIweDVmYmZmNDk4YWE5MzhjZTczOWI4ZTAyMmZiYWZlZjQwNTYzZjZlNmEzNDcyZmMyYTUxNGMwY2U5ZGFlMjNiN2UiLAorICAgICAgIjB4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1MGZlOGExODkyOTc2MTU0YzU5Y2ZjMTkzYWNjZjViMyIsCisKKyAgICAgICIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIiLAorICAgICAgIjB4MDhlMmE4YTBlNjUxNDdkNGJkNjMxNjAzMGUxNmQxOWM4NWM5N2YwYTljYTI2NzEyMmI5NmFiYmNlYTdlOGZjOCIsCisgICAgfSwKKworICAgIHsKKyAgICAgICJHT1NUMjAxMi10ZXN0IiwgNTExLCAwLAorICAgICAgTVBJX0VDX1dFSUVSU1RSQVNTLCBFQ0NfRElBTEVDVF9TVEFOREFSRCwKKyAgICAgICIweDQ1MzFhY2QxZmUwMDIzYzc1NTBkMjY3YjZiMmZlZTgwOTIyYjE0YjJmZmI5MGYwNGQ0ZWI3YzA5YjVkMmQxNWQiCisgICAgICAiZjFkODUyNzQxYWY0NzA0YTA0NTgwNDdlODBlNDU0NmQzNWI4MzM2ZmFjMjI0ZGQ4MTY2NGJiZjUyOGJlNjM3MyIsCisgICAgICAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3IiwKKyAgICAgICIweDFjZmYwODA2YTMxMTE2ZGEyOWQ4Y2ZhNTRlNTdlYjc0OGJjNWYzNzdlNDk0MDBmZGQ3ODhiNjQ5ZWNhMWFjNCIKKyAgICAgICIzNjE4MzQwMTNiMmFkNzMyMjQ4MGE4OWNhNThlMGNmNzRiYzllNTQwYzJhZGQ2ODk3ZmFkMGEzMDg0ZjMwMmFkYyIsCisgICAgICAiMHg0NTMxYWNkMWZlMDAyM2M3NTUwZDI2N2I2YjJmZWU4MDkyMmIxNGIyZmZiOTBmMDRkNGViN2MwOWI1ZDJkMTVkIgorICAgICAgImE4MmYyZDdlY2IxZGJhYzcxOTkwNWM1ZWVjYzQyM2YxZDg2ZTI1ZWRiZTIzYzU5NWQ2NDRhYWYxODdlNmU2ZGYiLAorCisgICAgICAiMHgyNGQxOWNjNjQ1NzJlZTMwZjM5NmJmNmViYmZkN2E2YzUyMTNiM2IzZDcwNTdjYzgyNWY5MTA5M2E2OGNkNzYyIgorICAgICAgImZkNjA2MTEyNjJjZDgzOGRjNmI2MGFhN2VlZTgwNGUyOGJjODQ5OTc3ZmFjMzNiNGI1MzBmMWIxMjAyNDhhOWEiLAorICAgICAgIjB4MmJiMzEyYTQzYmQyY2U2ZTBkMDIwNjEzYzg1N2FjZGRjZmJmMDYxZTkxZTVmMmMzZjMyNDQ3YzI1OWYzOWIyIgorICAgICAgImM4M2FiMTU2ZDc3ZjE0OTZiZjdlYjMzNTFlMWVlNGU0M2RjMWExOGI5MWIyNDY0MGI2ZGJiOTJjYjFhZGQzNzFlIiwKKyAgICB9LAorCisgICAgeyBOVUxMLCAwLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KKyAgfTsKKworCisKKwwKKy8qIFJldHVybiBhIGNvcHkgb2YgUE9JTlQuICAqLworc3RhdGljIGdjcnlfbXBpX3BvaW50X3QKK3BvaW50X2NvcHkgKGdjcnlfbXBpX3BvaW50X3QgcG9pbnQpCit7CisgIGdjcnlfbXBpX3BvaW50X3QgbmV3cG9pbnQ7CisKKyAgaWYgKHBvaW50KQorICAgIHsKKyAgICAgIG5ld3BvaW50ID0gbXBpX3BvaW50X25ldyAoMCk7CisgICAgICBwb2ludF9zZXQgKG5ld3BvaW50LCBwb2ludCk7CisgICAgfQorICBlbHNlCisgICAgbmV3cG9pbnQgPSBOVUxMOworICByZXR1cm4gbmV3cG9pbnQ7Cit9CisKKworLyogSGVscGVyIHRvIHNjYW4gYSBoZXggc3RyaW5nLiAqLworc3RhdGljIGdjcnlfbXBpX3QKK3NjYW52YWwgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbXBpX3QgdmFsOworCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZ2YWwsIEdDUllNUElfRk1UX0hFWCwgc3RyaW5nLCAwLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGxvZ19mYXRhbCAoInNjYW5uaW5nIEVDQyBwYXJhbWV0ZXIgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByZXR1cm4gdmFsOworfQorCisKKy8qIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGRvbWFpbl9wYXJtcyB0YWJsZSBmb3IgYSBjdXJ2ZSB3aXRoIE5BTUUuCisgICBSZXR1cm4gLTEgaWYgbm90IGZvdW5kLiAgKi8KK3N0YXRpYyBpbnQKK2ZpbmRfZG9tYWluX3Bhcm1zX2lkeCAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaW50IGlkeCwgYWxpYXNubzsKKworICAvKiBGaXJzdCBjaGVjayBvdXIgbmF0aXZlIGN1cnZlcy4gICovCisgIGZvciAoaWR4ID0gMDsgZG9tYWluX3Bhcm1zW2lkeF0uZGVzYzsgaWR4KyspCisgICAgaWYgKCFzdHJjbXAgKG5hbWUsIGRvbWFpbl9wYXJtc1tpZHhdLmRlc2MpKQorICAgICAgcmV0dXJuIGlkeDsKKworICAvKiBJZiBub3QgZm91bmQgY29uc3VsdCB0aGUgYWxpYXMgdGFibGUuICAqLworICBpZiAoIWRvbWFpbl9wYXJtc1tpZHhdLmRlc2MpCisgICAgeworICAgICAgZm9yIChhbGlhc25vID0gMDsgY3VydmVfYWxpYXNlc1thbGlhc25vXS5uYW1lOyBhbGlhc25vKyspCisgICAgICAgIGlmICghc3RyY21wIChuYW1lLCBjdXJ2ZV9hbGlhc2VzW2FsaWFzbm9dLm90aGVyKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgIGlmIChjdXJ2ZV9hbGlhc2VzW2FsaWFzbm9dLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGlkeCA9IDA7IGRvbWFpbl9wYXJtc1tpZHhdLmRlc2M7IGlkeCsrKQorICAgICAgICAgICAgaWYgKCFzdHJjbXAgKGN1cnZlX2FsaWFzZXNbYWxpYXNub10ubmFtZSwgZG9tYWluX3Bhcm1zW2lkeF0uZGVzYykpCisgICAgICAgICAgICAgIHJldHVybiBpZHg7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIC0xOworfQorCisKKy8qIEdlbmVyYXRlIHRoZSBjcnlwdG8gc3lzdGVtIHNldHVwLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgTkFNRSBvZgorICAgYSBjdXJ2ZSBvciB0aGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBhbmQgc3RvcmVzIGF0IFJfQ1VSVkUgdGhlCisgICBwYXJhbWV0ZXJzIG9mIHRoZSBuYW1lZCBjdXJ2ZSBvciB0aG9zZSBvZiBhIHN1aXRhYmxlIGN1cnZlLiAgSWYKKyAgIFJfTkJJVFMgaXMgbm90IE5VTEwsIHRoZSBjaG9zZW4gbnVtYmVyIG9mIGJpdHMgaXMgc3RvcmVkIHRoZXJlLgorICAgTlVMTCBtYXkgYmUgZ2l2ZW4gZm9yIFJfQ1VSVkUsIGlmIHRoZSB2YWx1ZSBpcyBub3QgcmVxdWlyZWQgYW5kIGZvcgorICAgZXhhbXBsZSBvbmx5IGEgcXVpY2sgdGVzdCBmb3IgYXZhaWxhYmlsaXR5IGlzIGRlc2lyZWQuICBOb3RlIHRoYXQKKyAgIHRoZSBjdXJ2ZSBmaWVsZHMgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8gYmVjYXVzZSBmaWVsZHMgd2hpY2gKKyAgIGFyZSBub3QgTlVMTCBhcmUgc2tpcHBlZC4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUgKHVuc2lnbmVkIGludCBuYml0cywgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHRpY19jdXJ2ZV90ICpjdXJ2ZSwgdW5zaWduZWQgaW50ICpyX25iaXRzKQoreworICBpbnQgaWR4OworICBjb25zdCBjaGFyICpyZXNuYW1lID0gTlVMTDsgLyogU2V0IHRvIGEgZm91bmQgY3VydmUgbmFtZS4gICovCisKKyAgaWYgKG5hbWUpCisgICAgaWR4ID0gZmluZF9kb21haW5fcGFybXNfaWR4IChuYW1lKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaWR4ID0gMDsgZG9tYWluX3Bhcm1zW2lkeF0uZGVzYzsgaWR4KyspCisgICAgICAgIGlmIChuYml0cyA9PSBkb21haW5fcGFybXNbaWR4XS5uYml0cworICAgICAgICAgICAgJiYgZG9tYWluX3Bhcm1zW2lkeF0ubW9kZWwgPT0gTVBJX0VDX1dFSUVSU1RSQVNTKQorICAgICAgICAgIGJyZWFrOworICAgICAgaWYgKCFkb21haW5fcGFybXNbaWR4XS5kZXNjKQorICAgICAgICBpZHggPSAtMTsKKyAgICB9CisgIGlmIChpZHggPCAwKQorICAgIHJldHVybiBHUEdfRVJSX1VOS05PV05fQ1VSVkU7CisKKyAgcmVzbmFtZSA9IGRvbWFpbl9wYXJtc1tpZHhdLmRlc2M7CisKKyAgLyogSW4gZmlwcyBtb2RlIHdlIG9ubHkgc3VwcG9ydCBOSVNUIGN1cnZlcy4gIE5vdGUgdGhhdCBpdCBpcworICAgICBwb3NzaWJsZSB0byBieXBhc3MgdGhpcyBjaGVjayBieSBzcGVjaWZ5aW5nIHRoZSBjdXJ2ZSBwYXJhbWV0ZXJzCisgICAgIGRpcmVjdGx5LiAgKi8KKyAgaWYgKGZpcHNfbW9kZSAoKSAmJiAhZG9tYWluX3Bhcm1zW2lkeF0uZmlwcyApCisgICAgcmV0dXJuIEdQR19FUlJfTk9UX1NVUFBPUlRFRDsKKworICBzd2l0Y2ggKGRvbWFpbl9wYXJtc1tpZHhdLm1vZGVsKQorICAgIHsKKyAgICBjYXNlIE1QSV9FQ19XRUlFUlNUUkFTUzoKKyAgICBjYXNlIE1QSV9FQ19UV0lTVEVERURXQVJEUzoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJX0VDX01PTlRHT01FUlk6CisgICAgICByZXR1cm4gR1BHX0VSUl9OT1RfU1VQUE9SVEVEOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gR1BHX0VSUl9CVUc7CisgICAgfQorCisKKyAgaWYgKHJfbmJpdHMpCisgICAgKnJfbmJpdHMgPSBkb21haW5fcGFybXNbaWR4XS5uYml0czsKKworICBpZiAoY3VydmUpCisgICAgeworICAgICAgY3VydmUtPm1vZGVsID0gZG9tYWluX3Bhcm1zW2lkeF0ubW9kZWw7CisgICAgICBjdXJ2ZS0+ZGlhbGVjdCA9IGRvbWFpbl9wYXJtc1tpZHhdLmRpYWxlY3Q7CisgICAgICBpZiAoIWN1cnZlLT5wKQorICAgICAgICBjdXJ2ZS0+cCA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLnApOworICAgICAgaWYgKCFjdXJ2ZS0+YSkKKyAgICAgICAgY3VydmUtPmEgPSBzY2FudmFsIChkb21haW5fcGFybXNbaWR4XS5hKTsKKyAgICAgIGlmICghY3VydmUtPmIpCisgICAgICAgIGN1cnZlLT5iID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0uYik7CisgICAgICBpZiAoIWN1cnZlLT5uKQorICAgICAgICBjdXJ2ZS0+biA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLm4pOworICAgICAgaWYgKCFjdXJ2ZS0+Ry54KQorICAgICAgICBjdXJ2ZS0+Ry54ID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0uZ194KTsKKyAgICAgIGlmICghY3VydmUtPkcueSkKKyAgICAgICAgY3VydmUtPkcueSA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLmdfeSk7CisgICAgICBpZiAoIWN1cnZlLT5HLnopCisgICAgICAgIGN1cnZlLT5HLnogPSBtcGlfYWxsb2Nfc2V0X3VpICgxKTsKKyAgICAgIGlmICghY3VydmUtPm5hbWUpCisgICAgICAgIGN1cnZlLT5uYW1lID0gcmVzbmFtZTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogR2l2ZSB0aGUgbmFtZSBvZiB0aGUgY3VydmUgTkFNRSwgc3RvcmUgdGhlIGN1cnZlIHBhcmFtZXRlcnMgaW50byBQLAorICAgQSwgQiwgRywgYW5kIE4gaWYgdGhleSBwb2ludCB0byBOVUxMIHZhbHVlLiAgTm90ZSB0aGF0IEcgaXMgcmV0dXJuZWQKKyAgIGluIHN0YW5kYXJkIHVuY29tcHJlc3NlZCBmb3JtYXQuICBBbHNvIHVwZGF0ZSBNT0RFTCBhbmQgRElBTEVDVCBpZgorICAgdGhleSBhcmUgbm90IE5VTEwuICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX3VwZGF0ZV9jdXJ2ZV9wYXJhbSAoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9tcGlfZWNfbW9kZWxzICptb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZWNjX2RpYWxlY3RzICpkaWFsZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqcCwgZ2NyeV9tcGlfdCAqYSwgZ2NyeV9tcGlfdCAqYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKmcsIGdjcnlfbXBpX3QgKm4pCit7CisgIGludCBpZHg7CisKKyAgaWR4ID0gZmluZF9kb21haW5fcGFybXNfaWR4IChuYW1lKTsKKyAgaWYgKGlkeCA8IDApCisgICAgcmV0dXJuIEdQR19FUlJfVU5LTk9XTl9DVVJWRTsKKworICBpZiAoZykKKyAgICB7CisgICAgICBjaGFyICpidWY7CisgICAgICBzaXplX3QgbGVuOworCisgICAgICBsZW4gPSA0OworICAgICAgbGVuICs9IHN0cmxlbiAoZG9tYWluX3Bhcm1zW2lkeF0uZ194KzIpOworICAgICAgbGVuICs9IHN0cmxlbiAoZG9tYWluX3Bhcm1zW2lkeF0uZ195KzIpOworICAgICAgbGVuKys7CisgICAgICBidWYgPSB4dHJ5bWFsbG9jIChsZW4pOworICAgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIHN0cmNweSAoc3RwY3B5IChzdHBjcHkgKGJ1ZiwgIjB4MDQiKSwgZG9tYWluX3Bhcm1zW2lkeF0uZ194KzIpLAorICAgICAgICAgICAgICBkb21haW5fcGFybXNbaWR4XS5nX3krMik7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoKmcpOworICAgICAgKmcgPSBzY2FudmFsIChidWYpOworICAgICAgeGZyZWUgKGJ1Zik7CisgICAgfQorICBpZiAobW9kZWwpCisgICAgKm1vZGVsID0gZG9tYWluX3Bhcm1zW2lkeF0ubW9kZWw7CisgIGlmIChkaWFsZWN0KQorICAgICpkaWFsZWN0ID0gZG9tYWluX3Bhcm1zW2lkeF0uZGlhbGVjdDsKKyAgaWYgKHApCisgICAgeworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCpwKTsKKyAgICAgICpwID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0ucCk7CisgICAgfQorICBpZiAoYSkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoKmEpOworICAgICAgKmEgPSBzY2FudmFsIChkb21haW5fcGFybXNbaWR4XS5hKTsKKyAgICB9CisgIGlmIChiKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICgqYik7CisgICAgICAqYiA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLmIpOworICAgIH0KKyAgaWYgKG4pCisgICAgeworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCpuKTsKKyAgICAgICpuID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0ubik7CisgICAgfQorICByZXR1cm4gMDsKK30KKworCisvKiBSZXR1cm4gdGhlIG5hbWUgbWF0Y2hpbmcgdGhlIHBhcmFtZXRlcnMgaW4gUEtFWS4gIFRoaXMgd29ya3Mgb25seQorICAgd2l0aCBjdXJ2ZXMgZGVzY3JpYmVkIGJ5IHRoZSBXZWllcnN0cmFzcyBlcXVhdGlvbi4gKi8KK2NvbnN0IGNoYXIgKgorX2djcnlfZWNjX2dldF9jdXJ2ZSAoZ2NyeV9zZXhwX3Qga2V5cGFybXMsIGludCBpdGVyYXRvciwgdW5zaWduZWQgaW50ICpyX25iaXRzKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgY29uc3QgY2hhciAqcmVzdWx0ID0gTlVMTDsKKyAgZWxsaXB0aWNfY3VydmVfdCBFOworICBnY3J5X21waV90IG1waV9nID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCB0bXAgPSBOVUxMOworICBpbnQgaWR4OworCisgIG1lbXNldCAoJkUsIDAsIHNpemVvZiBFKTsKKworICBpZiAocl9uYml0cykKKyAgICAqcl9uYml0cyA9IDA7CisKKyAgaWYgKCFrZXlwYXJtcykKKyAgICB7CisgICAgICBpZHggPSBpdGVyYXRvcjsKKyAgICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCBESU0gKGRvbWFpbl9wYXJtcykpCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBkb21haW5fcGFybXNbaWR4XS5kZXNjOworICAgICAgICAgIGlmIChyX25iaXRzKQorICAgICAgICAgICAgKnJfbmJpdHMgPSBkb21haW5fcGFybXNbaWR4XS5uYml0czsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKworICAvKgorICAgKiBFeHRyYWN0IHRoZSBjdXJ2ZSBwYXJhbWV0ZXJzLi4KKyAgICovCisgIHJjID0gZ3BnX2Vycl9jb2RlIChzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAiLXBhYmduIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkUucCwgJkUuYSwgJkUuYiwgJm1waV9nLCAmRS5uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7CisgIGlmIChyYyA9PSBHUEdfRVJSX05PX09CSikKKyAgICB7CisgICAgICAvKiBUaGlzIG1pZ2h0IGJlIHRoZSBzZWNvbmQgdXNlIGNhc2Ugb2YgY2hlY2tpbmcgd2hldGhlciBhCisgICAgICAgICBzcGVjaWZpYyBjdXJ2ZSBnaXZlbiBieSBuYW1lIGlzIHN1cHBvcnRlZC4gICovCisgICAgICBnY3J5X3NleHBfdCBsMTsKKyAgICAgIGNoYXIgKm5hbWU7CisKKyAgICAgIGwxID0gc2V4cF9maW5kX3Rva2VuIChrZXlwYXJtcywgImN1cnZlIiwgNSk7CisgICAgICBpZiAoIWwxKQorICAgICAgICBnb3RvIGxlYXZlOyAgLyogTm8gY3VydmUgbmFtZSBwYXJhbWV0ZXIuICAqLworCisgICAgICBuYW1lID0gc2V4cF9udGhfc3RyaW5nIChsMSwgMSk7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgIGlmICghbmFtZSkKKyAgICAgICAgZ290byBsZWF2ZTsgIC8qIE5hbWUgbWlzc2luZyBvciBvdXQgb2YgY29yZS4gKi8KKworICAgICAgaWR4ID0gZmluZF9kb21haW5fcGFybXNfaWR4IChuYW1lKTsKKyAgICAgIHhmcmVlIChuYW1lKTsKKyAgICAgIGlmIChpZHggPj0gMCkgIC8qIEN1cnZlIGZvdW5kLiAgKi8KKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IGRvbWFpbl9wYXJtc1tpZHhdLmRlc2M7CisgICAgICAgICAgaWYgKHJfbmJpdHMpCisgICAgICAgICAgICAqcl9uYml0cyA9IGRvbWFpbl9wYXJtc1tpZHhdLm5iaXRzOworICAgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAobXBpX2cpCisgICAgeworICAgICAgX2djcnlfbXBpX3BvaW50X2luaXQgKCZFLkcpOworICAgICAgaWYgKF9nY3J5X2VjY19vczJlYyAoJkUuRywgbXBpX2cpKQorICAgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBmb3IgKGlkeCA9IDA7IGRvbWFpbl9wYXJtc1tpZHhdLmRlc2M7IGlkeCsrKQorICAgIHsKKyAgICAgIG1waV9mcmVlICh0bXApOworICAgICAgdG1wID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0ucCk7CisgICAgICBpZiAoIW1waV9jbXAgKHRtcCwgRS5wKSkKKyAgICAgICAgeworICAgICAgICAgIG1waV9mcmVlICh0bXApOworICAgICAgICAgIHRtcCA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLmEpOworICAgICAgICAgIGlmICghbXBpX2NtcCAodG1wLCBFLmEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtcGlfZnJlZSAodG1wKTsKKyAgICAgICAgICAgICAgdG1wID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0uYik7CisgICAgICAgICAgICAgIGlmICghbXBpX2NtcCAodG1wLCBFLmIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1waV9mcmVlICh0bXApOworICAgICAgICAgICAgICAgICAgdG1wID0gc2NhbnZhbCAoZG9tYWluX3Bhcm1zW2lkeF0ubik7CisgICAgICAgICAgICAgICAgICBpZiAoIW1waV9jbXAgKHRtcCwgRS5uKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIG1waV9mcmVlICh0bXApOworICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLmdfeCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtcGlfY21wICh0bXAsIEUuRy54KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2ZyZWUgKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHNjYW52YWwgKGRvbWFpbl9wYXJtc1tpZHhdLmdfeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXBpX2NtcCAodG1wLCBFLkcueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZG9tYWluX3Bhcm1zW2lkeF0uZGVzYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyX25iaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcl9uYml0cyA9IGRvbWFpbl9wYXJtc1tpZHhdLm5iaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHRtcCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChFLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoRS5hKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKEUuYik7CisgIF9nY3J5X21waV9yZWxlYXNlIChtcGlfZyk7CisgIF9nY3J5X21waV9wb2ludF9mcmVlX3BhcnRzICgmRS5HKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKEUubik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogSGVscGVyIHRvIGV4dHJhY3QgYW4gTVBJIGZyb20ga2V5IHBhcmFtZXRlcnMuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CittcGlfZnJvbV9rZXlwYXJhbSAoZ2NyeV9tcGlfdCAqcl9hLCBnY3J5X3NleHBfdCBrZXlwYXJhbSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVjID0gMDsKKyAgZ2NyeV9zZXhwX3QgbDE7CisKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGtleXBhcmFtLCBuYW1lLCAwKTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgICpyX2EgPSBzZXhwX250aF9tcGkgKGwxLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgICBpZiAoISpyX2EpCisgICAgICAgIGVjID0gR1BHX0VSUl9JTlZfT0JKOworICAgIH0KKyAgcmV0dXJuIGVjOworfQorCisvKiBIZWxwZXIgdG8gZXh0cmFjdCBhIHBvaW50IGZyb20ga2V5IHBhcmFtZXRlcnMuICBJZiBubyBwYXJhbWV0ZXIKKyAgIHdpdGggTkFNRSBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9ucyB0cmllcyB0byBmaW5kIGEgbm9uLWVuY29kZWQgcG9pbnQKKyAgIGJ5IGFwcGVuZGluZyAiLngiLCAiLnkiIGFuZCAiLnoiIHRvIE5BTUUuICAiLnoiIGlzIGluIHRoaXMgY2FzZQorICAgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIDEuICBFQyBpcyB0aGUgY29udGV4dCB3aGljaCBhdCB0aGlzIHBvaW50CisgICBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLiAqLworc3RhdGljIGdwZ19lcnJfY29kZV90Citwb2ludF9mcm9tX2tleXBhcmFtIChnY3J5X21waV9wb2ludF90ICpyX2EsCisgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBrZXlwYXJhbSwgY29uc3QgY2hhciAqbmFtZSwgbXBpX2VjX3QgZWMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQ7CisKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGtleXBhcmFtLCBuYW1lLCAwKTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgIGdjcnlfbXBpX3QgYTsKKworICAgICAgYSA9IHNleHBfbnRoX21waSAobDEsIDEsIEdDUllNUElfRk1UX09QQVFVRSk7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX09CSjsKKworICAgICAgcG9pbnQgPSBtcGlfcG9pbnRfbmV3ICgwKTsKKyAgICAgIGlmIChlYyAmJiBlYy0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCAoYSwgZWMsIHBvaW50LCBOVUxMLCBOVUxMKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBfZ2NyeV9lY2Nfb3MyZWMgKHBvaW50LCBhKTsKKyAgICAgIG1waV9mcmVlIChhKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgeworICAgICAgICAgIG1waV9wb2ludF9yZWxlYXNlIChwb2ludCk7CisgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY2hhciAqdG1wbmFtZTsKKyAgICAgIGdjcnlfbXBpX3QgeCA9IE5VTEw7CisgICAgICBnY3J5X21waV90IHkgPSBOVUxMOworICAgICAgZ2NyeV9tcGlfdCB6ID0gTlVMTDsKKworICAgICAgdG1wbmFtZSA9IHh0cnltYWxsb2MgKHN0cmxlbiAobmFtZSkgKyAyICsgMSk7CisgICAgICBpZiAoIXRtcG5hbWUpCisgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIHN0cmNweSAoc3RwY3B5ICh0bXBuYW1lLCBuYW1lKSwgIi54Iik7CisgICAgICByYyA9IG1waV9mcm9tX2tleXBhcmFtICgmeCwga2V5cGFyYW0sIHRtcG5hbWUpOworICAgICAgaWYgKHJjKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUgKHRtcG5hbWUpOworICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorICAgICAgc3RyY3B5IChzdHBjcHkgKHRtcG5hbWUsIG5hbWUpLCAiLnkiKTsKKyAgICAgIHJjID0gbXBpX2Zyb21fa2V5cGFyYW0gKCZ5LCBrZXlwYXJhbSwgdG1wbmFtZSk7CisgICAgICBpZiAocmMpCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfZnJlZSAoeCk7CisgICAgICAgICAgeGZyZWUgKHRtcG5hbWUpOworICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorICAgICAgc3RyY3B5IChzdHBjcHkgKHRtcG5hbWUsIG5hbWUpLCAiLnoiKTsKKyAgICAgIHJjID0gbXBpX2Zyb21fa2V5cGFyYW0gKCZ6LCBrZXlwYXJhbSwgdG1wbmFtZSk7CisgICAgICBpZiAocmMpCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfZnJlZSAoeSk7CisgICAgICAgICAgbXBpX2ZyZWUgKHgpOworICAgICAgICAgIHhmcmVlICh0bXBuYW1lKTsKKyAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICAgIGlmICgheikKKyAgICAgICAgeiA9IG1waV9zZXRfdWkgKE5VTEwsIDEpOworICAgICAgaWYgKHggJiYgeSkKKyAgICAgICAgcG9pbnQgPSBtcGlfcG9pbnRfc25hdGNoX3NldCAoTlVMTCwgeCwgeSwgeik7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfZnJlZSAoeCk7CisgICAgICAgICAgbXBpX2ZyZWUgKHkpOworICAgICAgICAgIG1waV9mcmVlICh6KTsKKyAgICAgICAgICBwb2ludCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIHhmcmVlICh0bXBuYW1lKTsKKyAgICB9CisKKyAgaWYgKHBvaW50KQorICAgICpyX2EgPSBwb2ludDsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGNvbnRleHQgZm9yIGVsbGlwdGljIGN1cnZlIG9wZXJhdGlvbnMuCisgICBFaXRoZXIgS0VZUEFSQU0gb3IgQ1VSVkVOQU1FIG11c3QgYmUgZ2l2ZW4uICBJZiBib3RoIGFyZSBnaXZlbiBhbmQKKyAgIEtFWVBBUkFNIGhhcyBubyBjdXJ2ZSBwYXJhbWV0ZXIsIENVUlZFTkFNRSBpcyB1c2VkIHRvIGFkZCBtaXNzaW5nCisgICBwYXJhbWV0ZXJzLiAgT24gc3VjY2VzcyAwIGlzIHJldHVybmVkIGFuZCB0aGUgbmV3IGNvbnRleHQgc3RvcmVkIGF0CisgICBSX0NUWC4gIE9uIGVycm9yIE5VTEwgaXMgc3RvcmVkIGF0IFJfQ1RYIGFuZCBhbiBlcnJvciBjb2RlIGlzCisgICByZXR1cm5lZC4gIFRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIHVzaW5nCisgICBnY3J5X2N0eF9yZWxlYXNlLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9tcGlfZWNfbmV3IChnY3J5X2N0eF90ICpyX2N0eCwKKyAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGtleXBhcmFtLCBjb25zdCBjaGFyICpjdXJ2ZW5hbWUpCit7CisgIGdwZ19lcnJfY29kZV90IGVycmM7CisgIGdjcnlfY3R4X3QgY3R4ID0gTlVMTDsKKyAgZW51bSBnY3J5X21waV9lY19tb2RlbHMgbW9kZWwgPSBNUElfRUNfV0VJRVJTVFJBU1M7CisgIGVudW0gZWNjX2RpYWxlY3RzIGRpYWxlY3QgPSBFQ0NfRElBTEVDVF9TVEFOREFSRDsKKyAgZ2NyeV9tcGlfdCBwID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBhID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBiID0gTlVMTDsKKyAgZ2NyeV9tcGlfcG9pbnRfdCBHID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBuID0gTlVMTDsKKyAgZ2NyeV9tcGlfcG9pbnRfdCBRID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkID0gTlVMTDsKKyAgaW50IGZsYWdzID0gMDsKKyAgZ2NyeV9zZXhwX3QgbDE7CisKKyAgKnJfY3R4ID0gTlVMTDsKKworICBpZiAoa2V5cGFyYW0pCisgICAgeworICAgICAgLyogUGFyc2UgYW4gb3B0aW9uYWwgZmxhZ3MgbGlzdC4gICovCisgICAgICBsMSA9IHNleHBfZmluZF90b2tlbiAoa2V5cGFyYW0sICJmbGFncyIsIDApOworICAgICAgaWYgKGwxKQorICAgICAgICB7CisgICAgICAgICAgZXJyYyA9IF9nY3J5X3BrX3V0aWxfcGFyc2VfZmxhZ2xpc3QgKGwxLCAmZmxhZ3MsIE5VTEwpOworICAgICAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgICAgIGwxID0gTlVMTDsKKyAgICAgICAgICBpZiAoZXJyYykKKyAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgLyogQ2hlY2sgd2hldGhlciBhIGN1cnZlIG5hbWUgd2FzIGdpdmVuLiAgKi8KKyAgICAgIGwxID0gc2V4cF9maW5kX3Rva2VuIChrZXlwYXJhbSwgImN1cnZlIiwgNSk7CisKKyAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjdXJ2ZSBuYW1lIG9yIGlmIG92ZXJyaWRlIHBhcmFtZXRlcnMgaGF2ZQorICAgICAgICAgZXhwbGljaXRseSBiZWVuIHJlcXVlc3RlZCwgcGFyc2UgdGhlbS4gICovCisgICAgICBpZiAoIWwxIHx8IChmbGFncyAmIFBVQktFWV9GTEFHX1BBUkFNKSkKKyAgICAgICAgeworICAgICAgICAgIGVycmMgPSBtcGlfZnJvbV9rZXlwYXJhbSAoJnAsIGtleXBhcmFtLCAicCIpOworICAgICAgICAgIGlmIChlcnJjKQorICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICBlcnJjID0gbXBpX2Zyb21fa2V5cGFyYW0gKCZhLCBrZXlwYXJhbSwgImEiKTsKKyAgICAgICAgICBpZiAoZXJyYykKKyAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgZXJyYyA9IG1waV9mcm9tX2tleXBhcmFtICgmYiwga2V5cGFyYW0sICJiIik7CisgICAgICAgICAgaWYgKGVycmMpCisgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgIGVycmMgPSBwb2ludF9mcm9tX2tleXBhcmFtICgmRywga2V5cGFyYW0sICJnIiwgTlVMTCk7CisgICAgICAgICAgaWYgKGVycmMpCisgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgIGVycmMgPSBtcGlfZnJvbV9rZXlwYXJhbSAoJm4sIGtleXBhcmFtLCAibiIpOworICAgICAgICAgIGlmIChlcnJjKQorICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIGwxID0gTlVMTDsgLyogTm8gY3VydmVuYW1lLiAgKi8KKworICAvKiBDaGVjayB3aGV0aGVyIGEgY3VydmUgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBhbmQgdXNlIHRoYXQgdG8gZmlsbAorICAgICBpbiBtaXNzaW5nIHZhbHVlcy4gIElmIG5vIGN1cnZlIHBhcmFtZXRlciBpcyBhdmFpbGFibGUgdHJ5IGFuCisgICAgIG9wdGlvbmFsIHByb3ZpZGVkIGN1cnZlbmFtZS4gIElmIG9ubHkgdGhlIGN1cnZlbmFtZSBoYXMgYmVlbgorICAgICBnaXZlbiB1c2UgdGhhdCBvbmUuICovCisgIGlmIChsMSB8fCBjdXJ2ZW5hbWUpCisgICAgeworICAgICAgY2hhciAqbmFtZTsKKyAgICAgIGVsbGlwdGljX2N1cnZlX3QgKkU7CisKKyAgICAgIGlmIChsMSkKKyAgICAgICAgeworICAgICAgICAgIG5hbWUgPSBzZXhwX250aF9zdHJpbmcgKGwxLCAxKTsKKyAgICAgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVycmMgPSBHUEdfRVJSX0lOVl9PQko7IC8qIE5hbWUgbWlzc2luZyBvciBvdXQgb2YgY29yZS4gKi8KKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBuYW1lID0gTlVMTDsKKworICAgICAgRSA9IHh0cnljYWxsb2MgKDEsIHNpemVvZiAqRSk7CisgICAgICBpZiAoIUUpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgeGZyZWUgKG5hbWUpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgZXJyYyA9IF9nY3J5X2VjY19maWxsX2luX2N1cnZlICgwLCBuYW1lPyBuYW1lIDogY3VydmVuYW1lLCBFLCBOVUxMKTsKKyAgICAgIHhmcmVlIChuYW1lKTsKKyAgICAgIGlmIChlcnJjKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUgKEUpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgbW9kZWwgPSBFLT5tb2RlbDsKKyAgICAgIGRpYWxlY3QgPSBFLT5kaWFsZWN0OworCisgICAgICBpZiAoIXApCisgICAgICAgIHsKKyAgICAgICAgICBwID0gRS0+cDsKKyAgICAgICAgICBFLT5wID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgaWYgKCFhKQorICAgICAgICB7CisgICAgICAgICAgYSA9IEUtPmE7CisgICAgICAgICAgRS0+YSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGlmICghYikKKyAgICAgICAgeworICAgICAgICAgIGIgPSBFLT5iOworICAgICAgICAgIEUtPmIgPSBOVUxMOworICAgICAgICB9CisgICAgICBpZiAoIUcpCisgICAgICAgIHsKKyAgICAgICAgICBHID0gbXBpX3BvaW50X3NuYXRjaF9zZXQgKE5VTEwsIEUtPkcueCwgRS0+Ry55LCBFLT5HLnopOworICAgICAgICAgIEUtPkcueCA9IE5VTEw7CisgICAgICAgICAgRS0+Ry55ID0gTlVMTDsKKyAgICAgICAgICBFLT5HLnogPSBOVUxMOworICAgICAgICB9CisgICAgICBpZiAoIW4pCisgICAgICAgIHsKKyAgICAgICAgICBuID0gRS0+bjsKKyAgICAgICAgICBFLT5uID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgX2djcnlfZWNjX2N1cnZlX2ZyZWUgKEUpOworICAgICAgeGZyZWUgKEUpOworICAgIH0KKworCisgIGVycmMgPSBfZ2NyeV9tcGlfZWNfcF9uZXcgKCZjdHgsIG1vZGVsLCBkaWFsZWN0LCBmbGFncywgcCwgYSwgYik7CisgIGlmICghZXJyYykKKyAgICB7CisgICAgICBtcGlfZWNfdCBlYyA9IF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpOworCisgICAgICBpZiAoYikKKyAgICAgICAgeworICAgICAgICAgIG1waV9mcmVlIChlYy0+Yik7CisgICAgICAgICAgZWMtPmIgPSBiOworICAgICAgICAgIGIgPSBOVUxMOworICAgICAgICB9CisgICAgICBpZiAoRykKKyAgICAgICAgeworICAgICAgICAgIGVjLT5HID0gRzsKKyAgICAgICAgICBHID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgaWYgKG4pCisgICAgICAgIHsKKyAgICAgICAgICBlYy0+biA9IG47CisgICAgICAgICAgbiA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgLyogTm93IHRoYXQgd2Uga25vdyB0aGUgY3VydmUgbmFtZSB3ZSBjYW4gbG9vayBmb3IgdGhlIHB1YmxpYyBrZXkKKyAgICAgICAgIFEuICBwb2ludF9mcm9tX2tleXBhcmFtIG5lZWRzIHRvIGtub3cgdGhlIGN1cnZlIHBhcmFtZXRlcnMgc28KKyAgICAgICAgIHRoYXQgaXQgaXMgYWJsZSB0byB1c2UgdGhlIGNvcnJlY3QgZGVjb21wcmVzc2lvbi4gIFBhcnNpbmcKKyAgICAgICAgIHRoZSBwcml2YXRlIGtleSBEIGNvdWxkIGhhdmUgYmVlbiBkb25lIGVhcmxpZXIgYnV0IGl0IGlzIGxlc3MKKyAgICAgICAgIHN1cnByaXNpbmcgaWYgd2UgZG8gaXQgaGVyZSBhcyB3ZWxsLiAgKi8KKyAgICAgIGlmIChrZXlwYXJhbSkKKyAgICAgICAgeworICAgICAgICAgIGVycmMgPSBwb2ludF9mcm9tX2tleXBhcmFtICgmUSwga2V5cGFyYW0sICJxIiwgZWMpOworICAgICAgICAgIGlmIChlcnJjKQorICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICBlcnJjID0gbXBpX2Zyb21fa2V5cGFyYW0gKCZkLCBrZXlwYXJhbSwgImQiKTsKKyAgICAgICAgICBpZiAoZXJyYykKKyAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgaWYgKFEpCisgICAgICAgIHsKKyAgICAgICAgICBlYy0+USA9IFE7CisgICAgICAgICAgUSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGlmIChkKQorICAgICAgICB7CisgICAgICAgICAgZWMtPmQgPSBkOworICAgICAgICAgIGQgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICpyX2N0eCA9IGN0eDsKKyAgICAgIGN0eCA9IE5VTEw7CisgICAgfQorCisgbGVhdmU6CisgIF9nY3J5X2N0eF9yZWxlYXNlIChjdHgpOworICBtcGlfZnJlZSAocCk7CisgIG1waV9mcmVlIChhKTsKKyAgbXBpX2ZyZWUgKGIpOworICBfZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoRyk7CisgIG1waV9mcmVlIChuKTsKKyAgX2djcnlfbXBpX3BvaW50X3JlbGVhc2UgKFEpOworICBtcGlfZnJlZSAoZCk7CisgIHJldHVybiBlcnJjOworfQorCisKKy8qIFJldHVybiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgY3VydmUgTkFNRSBhcyBhbiBTLWV4cHJlc3Npb24uICAqLworZ2NyeV9zZXhwX3QKK19nY3J5X2VjY19nZXRfcGFyYW1fc2V4cCAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgdW5zaWduZWQgaW50IG5iaXRzOworICBlbGxpcHRpY19jdXJ2ZV90IEU7CisgIG1waV9lY190IGN0eDsKKyAgZ2NyeV9tcGlfdCBnX3gsIGdfeTsKKyAgZ2NyeV9tcGlfdCBwa2V5WzZdOworICBnY3J5X3NleHBfdCByZXN1bHQ7CisgIGludCBpOworCisgIG1lbXNldCAoJkUsIDAsIHNpemVvZiBFKTsKKyAgaWYgKF9nY3J5X2VjY19maWxsX2luX2N1cnZlICgwLCBuYW1lLCAmRSwgJm5iaXRzKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBnX3ggPSBtcGlfbmV3ICgwKTsKKyAgZ195ID0gbXBpX25ldyAoMCk7CisgIGN0eCA9IF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyAoTVBJX0VDX1dFSUVSU1RSQVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ19ESUFMRUNUX1NUQU5EQVJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRS5wLCBFLmEsIE5VTEwpOworICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKGdfeCwgZ195LCAmRS5HLCBjdHgpKQorICAgIGxvZ19mYXRhbCAoImVjYyBnZXQgcGFyYW06IEZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzXG4iKTsKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGN0eCk7CisgIF9nY3J5X21waV9wb2ludF9mcmVlX3BhcnRzICgmRS5HKTsKKworICBwa2V5WzBdID0gRS5wOworICBwa2V5WzFdID0gRS5hOworICBwa2V5WzJdID0gRS5iOworICBwa2V5WzNdID0gX2djcnlfZWNjX2VjMm9zIChnX3gsIGdfeSwgRS5wKTsKKyAgcGtleVs0XSA9IEUubjsKKyAgcGtleVs1XSA9IE5VTEw7CisKKyAgbXBpX2ZyZWUgKGdfeCk7CisgIG1waV9mcmVlIChnX3kpOworCisgIGlmIChzZXhwX2J1aWxkICgmcmVzdWx0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgIihwdWJsaWMta2V5KGVjYyhwJW0pKGElbSkoYiVtKShnJW0pKG4lbSkpKSIsCisgICAgICAgICAgICAgICAgICBwa2V5WzBdLCBwa2V5WzFdLCBwa2V5WzJdLCBwa2V5WzNdLCBwa2V5WzRdKSkKKyAgICByZXN1bHQgPSBOVUxMOworCisgIGZvciAoaT0wOyBwa2V5W2ldOyBpKyspCisgICAgX2djcnlfbXBpX3JlbGVhc2UgKHBrZXlbaV0pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogUmV0dXJuIGFuIE1QSSAob3Igb3BhcXVlIE1QSSkgZGVzY3JpYmVkIGJ5IE5BTUUgYW5kIHRoZSBjb250ZXh0IEVDLgorICAgSWYgQ09QWSBpcyB0cnVlIGEgY29weSBpcyByZXR1cm5lZCwgaWYgbm90IGEgY29uc3QgTVBJIG1heSBiZQorICAgcmV0dXJuZWQuICBJbiBhbnkgY2FzZSBtcGlfZnJlZSBtdXN0IGJlIHVzZWQuICAqLworZ2NyeV9tcGlfdAorX2djcnlfZWNjX2dldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIG1waV9lY190IGVjLCBpbnQgY29weSkKK3sKKyAgaWYgKCEqbmFtZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoIXN0cmNtcCAobmFtZSwgInAiKSAmJiBlYy0+cCkKKyAgICByZXR1cm4gbXBpX2lzX2NvbnN0IChlYy0+cCkgJiYgIWNvcHk/IGVjLT5wIDogbXBpX2NvcHkgKGVjLT5wKTsKKyAgaWYgKCFzdHJjbXAgKG5hbWUsICJhIikgJiYgZWMtPmEpCisgICAgcmV0dXJuIG1waV9pc19jb25zdCAoZWMtPmEpICYmICFjb3B5PyBlYy0+YSA6IG1waV9jb3B5IChlYy0+YSk7CisgIGlmICghc3RyY21wIChuYW1lLCAiYiIpICYmIGVjLT5iKQorICAgIHJldHVybiBtcGlfaXNfY29uc3QgKGVjLT5iKSAmJiAhY29weT8gZWMtPmIgOiBtcGlfY29weSAoZWMtPmIpOworICBpZiAoIXN0cmNtcCAobmFtZSwgIm4iKSAmJiBlYy0+bikKKyAgICByZXR1cm4gbXBpX2lzX2NvbnN0IChlYy0+bikgJiYgIWNvcHk/IGVjLT5uIDogbXBpX2NvcHkgKGVjLT5uKTsKKyAgaWYgKCFzdHJjbXAgKG5hbWUsICJkIikgJiYgZWMtPmQpCisgICAgcmV0dXJuIG1waV9pc19jb25zdCAoZWMtPmQpICYmICFjb3B5PyBlYy0+ZCA6IG1waV9jb3B5IChlYy0+ZCk7CisKKyAgLyogUmV0dXJuIGEgcmVxdWVzdGVkIHBvaW50IGNvb3JkaW5hdGUuICAqLworICBpZiAoIXN0cmNtcCAobmFtZSwgImcueCIpICYmIGVjLT5HICYmIGVjLT5HLT54KQorICAgIHJldHVybiBtcGlfaXNfY29uc3QgKGVjLT5HLT54KSAmJiAhY29weT8gZWMtPkctPnggOiBtcGlfY29weSAoZWMtPkctPngpOworICBpZiAoIXN0cmNtcCAobmFtZSwgImcueSIpICYmIGVjLT5HICYmIGVjLT5HLT55KQorICAgIHJldHVybiBtcGlfaXNfY29uc3QgKGVjLT5HLT55KSAmJiAhY29weT8gZWMtPkctPnkgOiBtcGlfY29weSAoZWMtPkctPnkpOworICBpZiAoIXN0cmNtcCAobmFtZSwgInEueCIpICYmIGVjLT5RICYmIGVjLT5RLT54KQorICAgIHJldHVybiBtcGlfaXNfY29uc3QgKGVjLT5RLT54KSAmJiAhY29weT8gZWMtPlEtPnggOiBtcGlfY29weSAoZWMtPlEtPngpOworICBpZiAoIXN0cmNtcCAobmFtZSwgInEueSIpICYmIGVjLT5RICYmIGVjLT5RLT55KQorICAgIHJldHVybiBtcGlfaXNfY29uc3QgKGVjLT5HLT55KSAmJiAhY29weT8gZWMtPlEtPnkgOiBtcGlfY29weSAoZWMtPlEtPnkpOworCisgIC8qIElmIHRoZSBiYXNlIHBvaW50IGhhcyBiZWVuIHJlcXVlc3RlZCwgcmV0dXJuIGl0IGluIHN0YW5kYXJkCisgICAgIGVuY29kaW5nLiAgKi8KKyAgaWYgKCFzdHJjbXAgKG5hbWUsICJnIikgJiYgZWMtPkcpCisgICAgcmV0dXJuIF9nY3J5X21waV9lY19lYzJvcyAoZWMtPkcsIGVjKTsKKworICAvKiBJZiB0aGUgcHVibGljIGtleSBoYXMgYmVlbiByZXF1ZXN0ZWQsIHJldHVybiBpdCBieSBkZWZhdWx0IGluCisgICAgIHN0YW5kYXJkIHVuY29tcHJlc3NlZCBlbmNvZGluZyBvciBpZiByZXF1ZXN0ZWQgaW4gb3RoZXIKKyAgICAgZW5jb2RpbmdzLiAgKi8KKyAgaWYgKCpuYW1lID09ICdxJyAmJiAoIW5hbWVbMV0gfHwgbmFtZVsxXSA9PSAnQCcpKQorICAgIHsKKyAgICAgIC8qIElmIG9ubHkgdGhlIHByaXZhdGUga2V5IGlzIGdpdmVuLCBjb21wdXRlIHRoZSBwdWJsaWMga2V5LiAgKi8KKyAgICAgIGlmICghZWMtPlEpCisgICAgICAgIGVjLT5RID0gX2djcnlfZWNjX2NvbXB1dGVfcHVibGljIChOVUxMLCBlYywgTlVMTCwgTlVMTCk7CisKKyAgICAgIGlmICghZWMtPlEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBpZiAobmFtZVsxXSAhPSAnQCcpCisgICAgICAgIHJldHVybiBfZ2NyeV9tcGlfZWNfZWMyb3MgKGVjLT5RLCBlYyk7CisKKyAgICAgIGlmICghc3RyY21wIChuYW1lKzIsICJlZGRzYSIpICYmIGVjLT5tb2RlbCA9PSBNUElfRUNfVFdJU1RFREVEV0FSRFMpCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbmNwazsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgZW5jcGtsZW47CisKKyAgICAgICAgICBpZiAoIV9nY3J5X2VjY19lZGRzYV9lbmNvZGVwb2ludCAoZWMtPlEsIGVjLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jcGssICZlbmNwa2xlbikpCisgICAgICAgICAgICByZXR1cm4gbXBpX3NldF9vcGFxdWUgKE5VTEwsIGVuY3BrLCBlbmNwa2xlbio4KTsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludCBkZXNjcmliZWQgYnkgTkFNRSBhbmQgdGhlIGNvbnRleHQgRUMuICAqLworZ2NyeV9tcGlfcG9pbnRfdAorX2djcnlfZWNjX2dldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwgbXBpX2VjX3QgZWMpCit7CisgIGlmICghc3RyY21wIChuYW1lLCAiZyIpICYmIGVjLT5HKQorICAgIHJldHVybiBwb2ludF9jb3B5IChlYy0+Ryk7CisgIGlmICghc3RyY21wIChuYW1lLCAicSIpKQorICAgIHsKKyAgICAgIC8qIElmIG9ubHkgdGhlIHByaXZhdGUga2V5IGlzIGdpdmVuLCBjb21wdXRlIHRoZSBwdWJsaWMga2V5LiAgKi8KKyAgICAgIGlmICghZWMtPlEpCisgICAgICAgIGVjLT5RID0gX2djcnlfZWNjX2NvbXB1dGVfcHVibGljIChOVUxMLCBlYywgTlVMTCwgTlVMTCk7CisKKyAgICAgIGlmIChlYy0+USkKKyAgICAgICAgcmV0dXJuIHBvaW50X2NvcHkgKGVjLT5RKTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogU3RvcmUgdGhlIE1QSSBORVdWQUxVRSBpbnRvIHRoZSBjb250ZXh0IEVDIHVuZGVyIE5BTUUuICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3QgbmV3dmFsdWUsIG1waV9lY190IGVjKQoreworICBncGdfZXJyX2NvZGVfdCByYyA9IDA7CisKKyAgaWYgKCEqbmFtZSkKKyAgICA7CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJwIikpCisgICAgeworICAgICAgbXBpX2ZyZWUgKGVjLT5wKTsKKyAgICAgIGVjLT5wID0gbXBpX2NvcHkgKG5ld3ZhbHVlKTsKKyAgICAgIF9nY3J5X21waV9lY19nZXRfcmVzZXQgKGVjKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJhIikpCisgICAgeworICAgICAgbXBpX2ZyZWUgKGVjLT5hKTsKKyAgICAgIGVjLT5hID0gbXBpX2NvcHkgKG5ld3ZhbHVlKTsKKyAgICAgIF9nY3J5X21waV9lY19nZXRfcmVzZXQgKGVjKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJiIikpCisgICAgeworICAgICAgbXBpX2ZyZWUgKGVjLT5iKTsKKyAgICAgIGVjLT5iID0gbXBpX2NvcHkgKG5ld3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJuIikpCisgICAgeworICAgICAgbXBpX2ZyZWUgKGVjLT5uKTsKKyAgICAgIGVjLT5uID0gbXBpX2NvcHkgKG5ld3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKCpuYW1lID09ICdxJyAmJiAoIW5hbWVbMV0gfHwgbmFtZVsxXSA9PSAnQCcpKQorICAgIHsKKyAgICAgIGlmIChuZXd2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICghZWMtPlEpCisgICAgICAgICAgICBlYy0+USA9IG1waV9wb2ludF9uZXcgKDApOworICAgICAgICAgIGlmIChlYy0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgICAgICAgICAgcmMgPSBfZ2NyeV9lY2NfZWRkc2FfZGVjb2RlcG9pbnQgKG5ld3ZhbHVlLCBlYywgZWMtPlEsIE5VTEwsIE5VTEwpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjIChlYy0+USwgbmV3dmFsdWUpOworICAgICAgICB9CisgICAgICBpZiAocmMgfHwgIW5ld3ZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfbXBpX3BvaW50X3JlbGVhc2UgKGVjLT5RKTsKKyAgICAgICAgICBlYy0+USA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIC8qIE5vdGU6IFdlIGFzc3VtZSB0aGF0IFEgbWF0Y2hlcyBkIGFuZCB0aHVzIGRvIG5vdCByZXNldCBkLiAgKi8KKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJkIikpCisgICAgeworICAgICAgbXBpX2ZyZWUgKGVjLT5kKTsKKyAgICAgIGVjLT5kID0gbXBpX2NvcHkgKG5ld3ZhbHVlKTsKKyAgICAgIGlmIChlYy0+ZCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHB1YmxpYyBrZXkgYmVjYXVzZSBpdCBtYXkgbm90CisgICAgICAgICAgICAgYW55bW9yZSBtYXRjaC4gICovCisgICAgICAgICAgX2djcnlfbXBpX3BvaW50X3JlbGVhc2UgKGVjLT5RKTsKKyAgICAgICAgICBlYy0+USA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgIHJjID0gR1BHX0VSUl9VTktOT1dOX05BTUU7CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFN0b3JlIHRoZSBwb2ludCBORVdWQUxVRSBpbnRvIHRoZSBjb250ZXh0IEVDIHVuZGVyIE5BTUUuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2VjY19zZXRfcG9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3BvaW50X3QgbmV3dmFsdWUsIG1waV9lY190IGVjKQoreworICBpZiAoIXN0cmNtcCAobmFtZSwgImciKSkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoZWMtPkcpOworICAgICAgZWMtPkcgPSBwb2ludF9jb3B5IChuZXd2YWx1ZSk7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChuYW1lLCAicSIpKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9wb2ludF9yZWxlYXNlIChlYy0+USk7CisgICAgICBlYy0+USA9IHBvaW50X2NvcHkgKG5ld3ZhbHVlKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gR1BHX0VSUl9VTktOT1dOX05BTUU7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvZWNjLWVjZHNhLmMgYi9jaXBoZXIvZWNjLWVjZHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4NDgzMAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9lY2MtZWNkc2EuYwpAQCAtMCwwICsxLDIzNCBAQAorLyogZWNjLWVjZHNhLmMgIC0gIEVsbGlwdGljIEN1cnZlIEVDRFNBIHNpZ25hdHVyZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisjaW5jbHVkZSAiZWMtY29udGV4dC5oIgorI2luY2x1ZGUgInB1YmtleS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImVjYy1jb21tb24uaCIKKworCisvKiBDb21wdXRlIGFuIEVDRFNBIHNpZ25hdHVyZS4KKyAqIFJldHVybiB0aGUgc2lnbmF0dXJlIHN0cnVjdCAocixzKSBmcm9tIHRoZSBtZXNzYWdlIGhhc2guICBUaGUgY2FsbGVyCisgKiBtdXN0IGhhdmUgYWxsb2NhdGVkIFIgYW5kIFMuCisgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9lY2NfZWNkc2Ffc2lnbiAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3NlY3JldF9rZXkgKnNrZXksCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCByLCBnY3J5X21waV90IHMsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgaGFzaGFsZ28pCit7CisgIGdwZ19lcnJfY29kZV90IHJjID0gMDsKKyAgaW50IGV4dHJhbG9vcHMgPSAwOworICBnY3J5X21waV90IGssIGRyLCBzdW0sIGtfMSwgeDsKKyAgbXBpX3BvaW50X3N0cnVjdCBJOworICBnY3J5X21waV90IGhhc2g7CisgIGNvbnN0IHZvaWQgKmFidWY7CisgIHVuc2lnbmVkIGludCBhYml0cywgcWJpdHM7CisgIG1waV9lY190IGN0eDsKKworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoImVjZHNhIHNpZ24gaGFzaCAgIiwgaW5wdXQgKTsKKworICBxYml0cyA9IG1waV9nZXRfbmJpdHMgKHNrZXktPkUubik7CisKKyAgLyogQ29udmVydCB0aGUgSU5QVVQgaW50byBhbiBNUEkgaWYgbmVlZGVkLiAgKi8KKyAgcmMgPSBfZ2NyeV9kc2Ffbm9ybWFsaXplX2hhc2ggKGlucHV0LCAmaGFzaCwgcWJpdHMpOworICBpZiAocmMpCisgICAgcmV0dXJuIHJjOworCisgIGsgPSBOVUxMOworICBkciA9IG1waV9hbGxvYyAoMCk7CisgIHN1bSA9IG1waV9hbGxvYyAoMCk7CisgIGtfMSA9IG1waV9hbGxvYyAoMCk7CisgIHggPSBtcGlfYWxsb2MgKDApOworICBwb2ludF9pbml0ICgmSSk7CisKKyAgY3R4ID0gX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3IChza2V5LT5FLm1vZGVsLCBza2V5LT5FLmRpYWxlY3QsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tleS0+RS5wLCBza2V5LT5FLmEsIHNrZXktPkUuYik7CisKKyAgLyogVHdvIGxvb3BzIHRvIGF2b2lkIFIgb3IgUyBhcmUgemVyby4gIFRoaXMgaXMgbW9yZSBvZiBhIGpva2UgdGhhbgorICAgICBhIHJlYWwgZGVtYW5kIGJlY2F1c2UgdGhlIHByb2JhYmlsaXR5IG9mIHRoZW0gYmVpbmcgemVybyBpcyBsZXNzCisgICAgIHRoYW4gYW55IGhhcmR3YXJlIGZhaWx1cmUuICBTb21lIHNwZWNzIGhvd2V2ZXIgcmVxdWlyZSBpdC4gICovCisgIGRvCisgICAgeworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIG1waV9mcmVlIChrKTsKKyAgICAgICAgICBrID0gTlVMTDsKKyAgICAgICAgICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfUkZDNjk3OSkgJiYgaGFzaGFsZ28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFVzZSBQb3JuaW4ncyBtZXRob2QgZm9yIGRldGVybWluaXN0aWMgRFNBLiAgSWYgdGhpcworICAgICAgICAgICAgICAgICBmbGFnIGlzIHNldCwgaXQgaXMgZXhwZWN0ZWQgdGhhdCBIQVNIIGlzIGFuIG9wYXF1ZQorICAgICAgICAgICAgICAgICBNUEkgd2l0aCB0aGUgdG8gYmUgc2lnbmVkIGhhc2guICBUaGF0IGhhc2ggaXMgYWxzbworICAgICAgICAgICAgICAgICB1c2VkIGFzIGgxIGZyb20gMy4yLmEuICAqLworICAgICAgICAgICAgICBpZiAoIW1waV9pc19vcGFxdWUgKGlucHV0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfQ09ORkxJQ1Q7CisgICAgICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBhYnVmID0gbXBpX2dldF9vcGFxdWUgKGlucHV0LCAmYWJpdHMpOworICAgICAgICAgICAgICByYyA9IF9nY3J5X2RzYV9nZW5fcmZjNjk3OV9rICgmaywgc2tleS0+RS5uLCBza2V5LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnVmLCAoYWJpdHMrNykvOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGFsZ28sIGV4dHJhbG9vcHMpOworICAgICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICAgZXh0cmFsb29wcysrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGsgPSBfZ2NyeV9kc2FfZ2VuX2sgKHNrZXktPkUubiwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKworICAgICAgICAgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKCZJLCBrLCAmc2tleS0+RS5HLCBjdHgpOworICAgICAgICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgTlVMTCwgJkksIGN0eCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZyAoImVjYyBzaWduOiBGYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisgICAgICAgICAgICAgIHJjID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgfQorICAgICAgICAgIG1waV9tb2QgKHIsIHgsIHNrZXktPkUubik7ICAvKiByID0geCBtb2QgbiAqLworICAgICAgICB9CisgICAgICB3aGlsZSAoIW1waV9jbXBfdWkgKHIsIDApKTsKKworICAgICAgbXBpX211bG0gKGRyLCBza2V5LT5kLCByLCBza2V5LT5FLm4pOyAvKiBkciA9IGQqciBtb2QgbiAgKi8KKyAgICAgIG1waV9hZGRtIChzdW0sIGhhc2gsIGRyLCBza2V5LT5FLm4pOyAgLyogc3VtID0gaGFzaCArIChkKnIpIG1vZCBuICAqLworICAgICAgbXBpX2ludm0gKGtfMSwgaywgc2tleS0+RS5uKTsgICAgICAgICAvKiBrXzEgPSBrXigtMSkgbW9kIG4gICovCisgICAgICBtcGlfbXVsbSAocywga18xLCBzdW0sIHNrZXktPkUubik7ICAgIC8qIHMgPSBrXigtMSkqKGhhc2grKGQqcikpIG1vZCBuICovCisgICAgfQorICB3aGlsZSAoIW1waV9jbXBfdWkgKHMsIDApKTsKKworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCAoImVjZHNhIHNpZ24gcmVzdWx0IHIgIiwgcik7CisgICAgICBsb2dfbXBpZHVtcCAoImVjZHNhIHNpZ24gcmVzdWx0IHMgIiwgcyk7CisgICAgfQorCisgbGVhdmU6CisgIF9nY3J5X21waV9lY19mcmVlIChjdHgpOworICBwb2ludF9mcmVlICgmSSk7CisgIG1waV9mcmVlICh4KTsKKyAgbXBpX2ZyZWUgKGtfMSk7CisgIG1waV9mcmVlIChzdW0pOworICBtcGlfZnJlZSAoZHIpOworICBtcGlfZnJlZSAoayk7CisKKyAgaWYgKGhhc2ggIT0gaW5wdXQpCisgICAgbXBpX2ZyZWUgKGhhc2gpOworCisgIHJldHVybiByYzsKK30KKworCisvKiBWZXJpZnkgYW4gRUNEU0Egc2lnbmF0dXJlLgorICogQ2hlY2sgaWYgUiBhbmQgUyB2ZXJpZmllcyBJTlBVVC4KKyAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2VjY19lY2RzYV92ZXJpZnkgKGdjcnlfbXBpX3QgaW5wdXQsIEVDQ19wdWJsaWNfa2V5ICpwa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCByLCBnY3J5X21waV90IHMpCit7CisgIGdwZ19lcnJfY29kZV90IGVyciA9IDA7CisgIGdjcnlfbXBpX3QgaGFzaCwgaCwgaDEsIGgyLCB4OworICBtcGlfcG9pbnRfc3RydWN0IFEsIFExLCBRMjsKKyAgbXBpX2VjX3QgY3R4OworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisKKyAgaWYoICEobXBpX2NtcF91aSAociwgMCkgPiAwICYmIG1waV9jbXAgKHIsIHBrZXktPkUubikgPCAwKSApCisgICAgcmV0dXJuIEdQR19FUlJfQkFEX1NJR05BVFVSRTsgLyogQXNzZXJ0aW9uCTAgPCByIDwgbiAgZmFpbGVkLiAgKi8KKyAgaWYoICEobXBpX2NtcF91aSAocywgMCkgPiAwICYmIG1waV9jbXAgKHMsIHBrZXktPkUubikgPCAwKSApCisgICAgcmV0dXJuIEdQR19FUlJfQkFEX1NJR05BVFVSRTsgLyogQXNzZXJ0aW9uCTAgPCBzIDwgbiAgZmFpbGVkLiAgKi8KKworICBuYml0cyA9IG1waV9nZXRfbmJpdHMgKHBrZXktPkUubik7CisgIGVyciA9IF9nY3J5X2RzYV9ub3JtYWxpemVfaGFzaCAoaW5wdXQsICZoYXNoLCBuYml0cyk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICBoICA9IG1waV9hbGxvYyAoMCk7CisgIGgxID0gbXBpX2FsbG9jICgwKTsKKyAgaDIgPSBtcGlfYWxsb2MgKDApOworICB4ID0gbXBpX2FsbG9jICgwKTsKKyAgcG9pbnRfaW5pdCAoJlEpOworICBwb2ludF9pbml0ICgmUTEpOworICBwb2ludF9pbml0ICgmUTIpOworCisgIGN0eCA9IF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyAocGtleS0+RS5tb2RlbCwgcGtleS0+RS5kaWFsZWN0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZXktPkUucCwgcGtleS0+RS5hLCBwa2V5LT5FLmIpOworCisgIC8qIGggID0gc14oLTEpIChtb2QgbikgKi8KKyAgbXBpX2ludm0gKGgsIHMsIHBrZXktPkUubik7CisgIC8qIGgxID0gaGFzaCAqIHNeKC0xKSAobW9kIG4pICovCisgIG1waV9tdWxtIChoMSwgaGFzaCwgaCwgcGtleS0+RS5uKTsKKyAgLyogUTEgPSBbIGhhc2ggKiBzXigtMSkgXUcgICovCisgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKCZRMSwgaDEsICZwa2V5LT5FLkcsIGN0eCk7CisgIC8qIGgyID0gciAqIHNeKC0xKSAobW9kIG4pICovCisgIG1waV9tdWxtIChoMiwgciwgaCwgcGtleS0+RS5uKTsKKyAgLyogUTIgPSBbIHIgKiBzXigtMSkgXVEgKi8KKyAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJlEyLCBoMiwgJnBrZXktPlEsIGN0eCk7CisgIC8qIFEgID0gKFtoYXNoICogc14oLTEpXUcpICsgKFtyICogc14oLTEpXVEpICovCisgIF9nY3J5X21waV9lY19hZGRfcG9pbnRzICgmUSwgJlExLCAmUTIsIGN0eCk7CisKKyAgaWYgKCFtcGlfY21wX3VpIChRLnosIDApKQorICAgIHsKKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgIGxvZ19kZWJ1ZyAoImVjYyB2ZXJpZnk6IFJlamVjdGVkXG4iKTsKKyAgICAgIGVyciA9IEdQR19FUlJfQkFEX1NJR05BVFVSRTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIE5VTEwsICZRLCBjdHgpKQorICAgIHsKKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICBsb2dfZGVidWcgKCJlY2MgdmVyaWZ5OiBGYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisgICAgICBlcnIgPSBHUEdfRVJSX0JBRF9TSUdOQVRVUkU7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgbXBpX21vZCAoeCwgeCwgcGtleS0+RS5uKTsgLyogeCA9IHggbW9kIEVfbiAqLworICBpZiAobXBpX2NtcCAoeCwgcikpICAgLyogeCAhPSByICovCisgICAgeworICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfbXBpZHVtcCAoIiAgICAgeCIsIHgpOworICAgICAgICAgIGxvZ19tcGlkdW1wICgiICAgICByIiwgcik7CisgICAgICAgICAgbG9nX21waWR1bXAgKCIgICAgIHMiLCBzKTsKKyAgICAgICAgfQorICAgICAgZXJyID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGN0eCk7CisgIHBvaW50X2ZyZWUgKCZRMik7CisgIHBvaW50X2ZyZWUgKCZRMSk7CisgIHBvaW50X2ZyZWUgKCZRKTsKKyAgbXBpX2ZyZWUgKHgpOworICBtcGlfZnJlZSAoaDIpOworICBtcGlfZnJlZSAoaDEpOworICBtcGlfZnJlZSAoaCk7CisgIGlmIChoYXNoICE9IGlucHV0KQorICAgIG1waV9mcmVlIChoYXNoKTsKKworICByZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2VjYy1lZGRzYS5jIGIvY2lwaGVyL2VjYy1lZGRzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZWNjLWVkZHNhLmMKQEAgLTAsMCArMSw4MDggQEAKKy8qIGVjYy1lZGRzYS5jICAtICBFbGxpcHRpYyBDdXJ2ZSBFZERTQSBzaWduYXR1cmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAibXBpLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiY29udGV4dC5oIgorI2luY2x1ZGUgImVjLWNvbnRleHQuaCIKKyNpbmNsdWRlICJlY2MtY29tbW9uLmgiCisKKworDAorc3RhdGljIHZvaWQKK3JldmVyc2VfYnVmZmVyICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgIHVuc2lnbmVkIGludCB0bXAsIGk7CisKKyAgZm9yIChpPTA7IGkgPCBsZW5ndGgvMjsgaSsrKQorICAgIHsKKyAgICAgIHRtcCA9IGJ1ZmZlcltpXTsKKyAgICAgIGJ1ZmZlcltpXSA9IGJ1ZmZlcltsZW5ndGgtMS1pXTsKKyAgICAgIGJ1ZmZlcltsZW5ndGgtMS1pXSA9IHRtcDsKKyAgICB9Cit9CisKKworLyogSGVscGVyIHRvIHNjYW4gYSBoZXggc3RyaW5nLiAqLworc3RhdGljIGdjcnlfbXBpX3QKK3NjYW52YWwgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbXBpX3QgdmFsOworCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZ2YWwsIEdDUllNUElfRk1UX0hFWCwgc3RyaW5nLCAwLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGxvZ19mYXRhbCAoInNjYW5uaW5nIEVDQyBwYXJhbWV0ZXIgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByZXR1cm4gdmFsOworfQorCisKKwwKKy8qIEVuY29kZSBNUEkgdXNpbmcgdGhlIEVkRFNBIHNjaGVtZS4gIE1JTkxFTiBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkCisgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4gIE9uIHN1Y2Nlc3MgMCBpcyByZXR1cm5lZCBhbiBhCisgICBtYWxsb2NlZCBidWZmZXIgd2l0aCB0aGUgZW5jb2RlZCBwb2ludCBpcyBzdG9yZWQgYXQgUl9CVUZGRVI7IHRoZQorICAgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyIGlzIHN0b3JlZCBhdCBSX0JVRkxFTi4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK2VkZHNhX2VuY29kZW1waSAoZ2NyeV9tcGlfdCBtcGksIHVuc2lnbmVkIGludCBtaW5sZW4sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipyX2J1ZmZlciwgdW5zaWduZWQgaW50ICpyX2J1ZmxlbikKK3sKKyAgdW5zaWduZWQgY2hhciAqcmF3bXBpOworICB1bnNpZ25lZCBpbnQgcmF3bXBpbGVuOworCisgIHJhd21waSA9IF9nY3J5X21waV9nZXRfYnVmZmVyIChtcGksIG1pbmxlbiwgJnJhd21waWxlbiwgTlVMTCk7CisgIGlmICghcmF3bXBpKQorICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKworICAqcl9idWZmZXIgPSByYXdtcGk7CisgICpyX2J1ZmxlbiA9IHJhd21waWxlbjsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogRW5jb2RlIChYLFkpIHVzaW5nIHRoZSBFZERTQSBzY2hlbWUuICBNSU5MRU4gaXMgdGhlIHJlcXVpcmVkIGxlbmd0aAorICAgaW4gYnl0ZXMgZm9yIHRoZSByZXN1bHQuICBPbiBzdWNjZXNzIDAgaXMgcmV0dXJuZWQgYW5kIGEgbWFsbG9jZWQKKyAgIGJ1ZmZlciB3aXRoIHRoZSBlbmNvZGVkIHBvaW50IGlzIHN0b3JlZCBhdCBSX0JVRkZFUjsgdGhlIGxlbmd0aCBvZgorICAgdGhpcyBidWZmZXIgaXMgc3RvcmVkIGF0IFJfQlVGTEVOLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorZWRkc2FfZW5jb2RlX3hfeSAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIHVuc2lnbmVkIGludCBtaW5sZW4sCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcl9idWZmZXIsIHVuc2lnbmVkIGludCAqcl9idWZsZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgKnJhd21waTsKKyAgdW5zaWduZWQgaW50IHJhd21waWxlbjsKKworICByYXdtcGkgPSBfZ2NyeV9tcGlfZ2V0X2J1ZmZlciAoeSwgbWlubGVuLCAmcmF3bXBpbGVuLCBOVUxMKTsKKyAgaWYgKCFyYXdtcGkpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICBpZiAobXBpX3Rlc3RfYml0ICh4LCAwKSAmJiByYXdtcGlsZW4pCisgICAgcmF3bXBpW3Jhd21waWxlbiAtIDFdIHw9IDB4ODA7ICAvKiBTZXQgc2lnbiBiaXQuICAqLworCisgICpyX2J1ZmZlciA9IHJhd21waTsKKyAgKnJfYnVmbGVuID0gcmF3bXBpbGVuOworICByZXR1cm4gMDsKK30KKworLyogRW5jb2RlIFBPSU5UIHVzaW5nIHRoZSBFZERTQSBzY2hlbWUuICBYIGFuZCBZIGFyZSBlaXRoZXIgc2NyYXRjaAorICAgdmFyaWFibGVzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIgb3IgTlVMTC4gIENUWCBpcyB0aGUgdXN1YWwKKyAgIGNvbnRleHQuICBPbiBzdWNjZXNzIDAgaXMgcmV0dXJuZWQgYW5kIGEgbWFsbG9jZWQgYnVmZmVyIHdpdGggdGhlCisgICBlbmNvZGVkIHBvaW50IGlzIHN0b3JlZCBhdCBSX0JVRkZFUjsgdGhlIGxlbmd0aCBvZiB0aGlzIGJ1ZmZlciBpcworICAgc3RvcmVkIGF0IFJfQlVGTEVOLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9lY2NfZWRkc2FfZW5jb2RlcG9pbnQgKG1waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB4X2luLCBnY3J5X21waV90IHlfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipyX2J1ZmZlciwgdW5zaWduZWQgaW50ICpyX2J1ZmxlbikKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbXBpX3QgeCwgeTsKKworICB4ID0geF9pbj8geF9pbiA6IG1waV9uZXcgKDApOworICB5ID0geV9pbj8geV9pbiA6IG1waV9uZXcgKDApOworCisgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgcG9pbnQsIGVjKSkKKyAgICB7CisgICAgICBsb2dfZXJyb3IgKCJlZGRzYV9lbmNvZGVwb2ludDogRmFpbGVkIHRvIGdldCBhZmZpbmUgY29vcmRpbmF0ZXNcbiIpOworICAgICAgcmMgPSBHUEdfRVJSX0lOVEVSTkFMOworICAgIH0KKyAgZWxzZQorICAgIHJjID0gZWRkc2FfZW5jb2RlX3hfeSAoeCwgeSwgZWMtPm5iaXRzLzgsIHJfYnVmZmVyLCByX2J1Zmxlbik7CisKKyAgaWYgKCF4X2luKQorICAgIG1waV9mcmVlICh4KTsKKyAgaWYgKCF5X2luKQorICAgIG1waV9mcmVlICh5KTsKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcGFxdWUgTVBJIFZBTFVFIGlzIGluIGNvbXBhY3QgRWREU0EgZm9ybWF0LgorICAgVGhpcyBmdW5jdGlvbiB1cGRhdGVzIE1QSSBpZiBuZWVkZWQuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2VjY19lZGRzYV9lbnN1cmVfY29tcGFjdCAoZ2NyeV9tcGlfdCB2YWx1ZSwgdW5zaWduZWQgaW50IG5iaXRzKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmOworICB1bnNpZ25lZCBpbnQgcmF3bXBpbGVuOworICBnY3J5X21waV90IHgsIHk7CisgIHVuc2lnbmVkIGNoYXIgKmVuYzsKKyAgdW5zaWduZWQgaW50IGVuY2xlbjsKKworICBpZiAoIW1waV9pc19vcGFxdWUgKHZhbHVlKSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICBidWYgPSBtcGlfZ2V0X29wYXF1ZSAodmFsdWUsICZyYXdtcGlsZW4pOworICBpZiAoIWJ1ZikKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICByYXdtcGlsZW4gPSAocmF3bXBpbGVuICsgNykvODsKKworICAvKiBDaGVjayB3aGV0aGVyIHRoZSBwdWJsaWMga2V5IGhhcyBiZWVuIGdpdmVuIGluIHN0YW5kYXJkCisgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQuICBJbiB0aGlzIGNhc2UgZXh0cmFjdCB5IGFuZCBjb21wcmVzcy4gICovCisgIGlmIChyYXdtcGlsZW4gPiAxICYmIGJ1ZlswXSA9PSAweDA0ICYmIChyYXdtcGlsZW4lMikpCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9tcGlfc2NhbiAoJngsIEdDUllNUElfRk1UX1NURCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZisxLCAocmF3bXBpbGVuLTEpLzIsIE5VTEwpOworICAgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisgICAgICByYyA9IF9nY3J5X21waV9zY2FuICgmeSwgR0NSWU1QSV9GTVRfU1RELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmKzErKHJhd21waWxlbi0xKS8yLCAocmF3bXBpbGVuLTEpLzIsIE5VTEwpOworICAgICAgaWYgKHJjKQorICAgICAgICB7CisgICAgICAgICAgbXBpX2ZyZWUgKHgpOworICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorCisgICAgICByYyA9IGVkZHNhX2VuY29kZV94X3kgKHgsIHksIG5iaXRzLzgsICZlbmMsICZlbmNsZW4pOworICAgICAgbXBpX2ZyZWUgKHgpOworICAgICAgbXBpX2ZyZWUgKHkpOworICAgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAgIG1waV9zZXRfb3BhcXVlICh2YWx1ZSwgZW5jLCA4KmVuY2xlbik7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKy8qIFJlY292ZXIgWCBmcm9tIFkgYW5kIFNJR04gKHdoaWNoIGFjdHVhbGx5IGlzIGEgcGFyaXR5IGJpdCkuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2VjY19lZGRzYV9yZWNvdmVyX3ggKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBpbnQgc2lnbiwgbXBpX2VjX3QgZWMpCit7CisgIGdwZ19lcnJfY29kZV90IHJjID0gMDsKKyAgZ2NyeV9tcGlfdCB1LCB2LCB2MywgdDsKKyAgc3RhdGljIGdjcnlfbXBpX3QgcDU4LCBzZXZlbjsKKworICBpZiAoZWMtPmRpYWxlY3QgIT0gRUNDX0RJQUxFQ1RfRUQyNTUxOSkKKyAgICByZXR1cm4gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisKKyAgaWYgKCFwNTgpCisgICAgcDU4ID0gc2NhbnZhbCAoIjBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgorICAgICAgICAgICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRCIpOworICBpZiAoIXNldmVuKQorICAgIHNldmVuID0gbXBpX3NldF91aSAoTlVMTCwgNyk7CisKKyAgdSAgID0gbXBpX25ldyAoMCk7CisgIHYgICA9IG1waV9uZXcgKDApOworICB2MyAgPSBtcGlfbmV3ICgwKTsKKyAgdCAgID0gbXBpX25ldyAoMCk7CisKKyAgLyogQ29tcHV0ZSB1IGFuZCB2ICovCisgIC8qIHUgPSB5XjIgICAgKi8KKyAgbXBpX211bG0gKHUsIHksIHksIGVjLT5wKTsKKyAgLyogdiA9IGIqeV4yICAgKi8KKyAgbXBpX211bG0gKHYsIGVjLT5iLCB1LCBlYy0+cCk7CisgIC8qIHUgPSB5XjItMSAgKi8KKyAgbXBpX3N1Yl91aSAodSwgdSwgMSk7CisgIC8qIHYgPSBiKnleMisxICovCisgIG1waV9hZGRfdWkgKHYsIHYsIDEpOworCisgIC8qIENvbXB1dGUgc3FydCh1L3YpICovCisgIC8qIHYzID0gdl4zICovCisgIG1waV9wb3dtICh2MywgdiwgbXBpX2NvbnN0IChNUElfQ19USFJFRSksIGVjLT5wKTsKKyAgLyogdCA9IHYzICogdjMgKiB1ICogdiA9IHUgKiB2XjcgKi8KKyAgbXBpX3Bvd20gKHQsIHYsIHNldmVuLCBlYy0+cCk7CisgIG1waV9tdWxtICh0LCB0LCB1LCBlYy0+cCk7CisgIC8qIHQgPSB0XigocC01KS84KSA9ICh1ICogdl43KV4oKHAtNSkvOCkgICovCisgIG1waV9wb3dtICh0LCB0LCBwNTgsIGVjLT5wKTsKKyAgLyogeCA9IHQgKiB1ICogdl4zID0gKHUgKiB2XjMpICogKHUgKiB2XjcpXigocC01KS84KSAqLworICBtcGlfbXVsbSAodCwgdCwgdSwgZWMtPnApOworICBtcGlfbXVsbSAoeCwgdCwgdjMsIGVjLT5wKTsKKworICAvKiBBZGp1c3QgaWYgbmVlZGVkLiAgKi8KKyAgLyogdCA9IHYgKiB4XjIgICovCisgIG1waV9tdWxtICh0LCB4LCB4LCBlYy0+cCk7CisgIG1waV9tdWxtICh0LCB0LCB2LCBlYy0+cCk7CisgIC8qIC10ID09IHUgPyB4ID0geCAqIHNxcnQoLTEpICovCisgIG1waV9uZWcgKHQsIHQpOworICBpZiAoIW1waV9jbXAgKHQsIHUpKQorICAgIHsKKyAgICAgIHN0YXRpYyBnY3J5X21waV90IG0xOyAgLyogRml4bWU6IHRoaXMgaXMgbm90IHRocmVhZC1zYWZlLiAgKi8KKyAgICAgIGlmICghbTEpCisgICAgICAgIG0xID0gc2NhbnZhbCAoIjJCODMyNDgwNEZDMURGMEIyQjREMDA5OTNERkJEN0E3IgorICAgICAgICAgICAgICAgICAgICAgICIyRjQzMTgwNkFEMkZFNDc4QzRFRTFCMjc0QTBFQTBCMCIpOworICAgICAgbXBpX211bG0gKHgsIHgsIG0xLCBlYy0+cCk7CisgICAgICAvKiB0ID0gdiAqIHheMiAgKi8KKyAgICAgIG1waV9tdWxtICh0LCB4LCB4LCBlYy0+cCk7CisgICAgICBtcGlfbXVsbSAodCwgdCwgdiwgZWMtPnApOworICAgICAgLyogLXQgPT0gdSA/IHggPSB4ICogc3FydCgtMSkgKi8KKyAgICAgIG1waV9uZWcgKHQsIHQpOworICAgICAgaWYgKCFtcGlfY21wICh0LCB1KSkKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgfQorCisgIC8qIENob29zZSB0aGUgZGVzaXJlZCBzcXVhcmUgcm9vdCBhY2NvcmRpbmcgdG8gcGFyaXR5ICovCisgIGlmIChtcGlfdGVzdF9iaXQgKHgsIDApICE9ICEhc2lnbikKKyAgICBtcGlfc3ViICh4LCBlYy0+cCwgeCk7CisKKyAgbXBpX2ZyZWUgKHQpOworICBtcGlfZnJlZSAodjMpOworICBtcGlfZnJlZSAodik7CisgIG1waV9mcmVlICh1KTsKKworICByZXR1cm4gcmM7Cit9CisKKworLyogRGVjb2RlIHRoZSBFZERTQSBzdHlsZSBlbmNvZGVkIFBLIGFuZCBzZXQgaXQgaW50byBSRVNVTFQuICBDVFggaXMKKyAgIHRoZSB1c3VhbCBjdXJ2ZSBjb250ZXh0LiAgSWYgUl9FTkNQSyBpcyBub3QgTlVMTCwgdGhlIGVuY29kZWQgUEsgaXMKKyAgIHN0b3JlZCBhdCB0aGF0IGFkZHJlc3M7IHRoaXMgaXMgYSBuZXcgY29weSB0byBiZSByZWxlYXNlZCBieSB0aGUKKyAgIGNhbGxlci4gIEluIGNvbnRyYXN0IHRvIHRoZSBzdXBwbGllZCBQSywgdGhpcyBpcyBub3QgYW4gTVBJIGFuZAorICAgdGh1cyBndWFybmF0ZWVkIHRvIGJlIHByb3Blcmx5IHBhZGRlZC4gIFJfRU5DUEtMRU4gcmVjZWl2ZXMgdGhlCisgICBsZW5ndGggb2YgdGhhdCBlbmNvZGVkIGtleS4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX2VkZHNhX2RlY29kZXBvaW50IChnY3J5X21waV90IHBrLCBtcGlfZWNfdCBjdHgsIG1waV9wb2ludF90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnJfZW5jcGssIHVuc2lnbmVkIGludCAqcl9lbmNwa2xlbikKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHVuc2lnbmVkIGNoYXIgKnJhd21waTsKKyAgdW5zaWduZWQgaW50IHJhd21waWxlbjsKKyAgaW50IHNpZ247CisKKyAgaWYgKG1waV9pc19vcGFxdWUgKHBrKSkKKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICAgIGJ1ZiA9IG1waV9nZXRfb3BhcXVlIChwaywgJnJhd21waWxlbik7CisgICAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX09CSjsKKyAgICAgIHJhd21waWxlbiA9IChyYXdtcGlsZW4gKyA3KS84OworCisgICAgICAvKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBwdWJsaWMga2V5IGhhcyBiZWVuIGdpdmVuIGluIHN0YW5kYXJkCisgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0LiAgTm8gbmVlZCB0byByZWNvdmVyIHggaW4gdGhpcyBjYXNlLgorICAgICAgICAgRGV0ZWN0aW9uIGlzIGVhc3k6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgd2lsbCBiZSBvZGQgYW5kIHRoZQorICAgICAgICAgZmlyc3QgYnl0ZSBiZSAweDA0LiAgKi8KKyAgICAgIGlmIChyYXdtcGlsZW4gPiAxICYmIGJ1ZlswXSA9PSAweDA0ICYmIChyYXdtcGlsZW4lMikpCisgICAgICAgIHsKKyAgICAgICAgICBnY3J5X21waV90IHgsIHk7CisKKyAgICAgICAgICByYyA9IF9nY3J5X21waV9zY2FuICgmeCwgR0NSWU1QSV9GTVRfU1RELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZisxLCAocmF3bXBpbGVuLTEpLzIsIE5VTEwpOworICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICByYyA9IF9nY3J5X21waV9zY2FuICgmeSwgR0NSWU1QSV9GTVRfU1RELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZisxKyhyYXdtcGlsZW4tMSkvMiwgKHJhd21waWxlbi0xKS8yLCBOVUxMKTsKKyAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1waV9mcmVlICh4KTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHJfZW5jcGspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJjID0gZWRkc2FfZW5jb2RlX3hfeSAoeCwgeSwgY3R4LT5uYml0cy84LCByX2VuY3BrLCByX2VuY3BrbGVuKTsKKyAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1waV9mcmVlICh4KTsKKyAgICAgICAgICAgICAgICAgIG1waV9mcmVlICh5KTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgbXBpX3NuYXRjaCAocmVzdWx0LT54LCB4KTsKKyAgICAgICAgICBtcGlfc25hdGNoIChyZXN1bHQtPnksIHkpOworICAgICAgICAgIG1waV9zZXRfdWkgKHJlc3VsdC0+eiwgMSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgLyogRWREU0EgY29tcHJlc3NlZCBwb2ludC4gICovCisgICAgICByYXdtcGkgPSB4dHJ5bWFsbG9jIChyYXdtcGlsZW4/IHJhd21waWxlbjoxKTsKKyAgICAgIGlmICghcmF3bXBpKQorICAgICAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBtZW1jcHkgKHJhd21waSwgYnVmLCByYXdtcGlsZW4pOworICAgICAgcmV2ZXJzZV9idWZmZXIgKHJhd21waSwgcmF3bXBpbGVuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RlOiBXaXRob3V0IHVzaW5nIGFuIG9wYXF1ZSBNUEkgaXQgaXMgbm90IHJlbGlhYmxlIHBvc3NpYmxlCisgICAgICAgICB0byBmaW5kIG91dCB3aGV0aGVyIHRoZSBwdWJsaWMga2V5IGhhcyBiZWVuIGdpdmVuIGluCisgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0LiAgVGh1cyB3ZSBleHBlY3QgRWREU0EgZm9ybWF0IGhlcmUuICAqLworICAgICAgcmF3bXBpID0gX2djcnlfbXBpX2dldF9idWZmZXIgKHBrLCBjdHgtPm5iaXRzLzgsICZyYXdtcGlsZW4sIE5VTEwpOworICAgICAgaWYgKCFyYXdtcGkpCisgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICB9CisKKyAgaWYgKHJhd21waWxlbikKKyAgICB7CisgICAgICBzaWduID0gISEocmF3bXBpWzBdICYgMHg4MCk7CisgICAgICByYXdtcGlbMF0gJj0gMHg3ZjsKKyAgICB9CisgIGVsc2UKKyAgICBzaWduID0gMDsKKyAgX2djcnlfbXBpX3NldF9idWZmZXIgKHJlc3VsdC0+eSwgcmF3bXBpLCByYXdtcGlsZW4sIDApOworICBpZiAocl9lbmNwaykKKyAgICB7CisgICAgICAvKiBSZXZlcnQgdG8gbGl0dGxlIGVuZGlhbi4gICovCisgICAgICBpZiAoc2lnbiAmJiByYXdtcGlsZW4pCisgICAgICAgIHJhd21waVswXSB8PSAweDgwOworICAgICAgcmV2ZXJzZV9idWZmZXIgKHJhd21waSwgcmF3bXBpbGVuKTsKKyAgICAgICpyX2VuY3BrID0gcmF3bXBpOworICAgICAgaWYgKHJfZW5jcGtsZW4pCisgICAgICAgICpyX2VuY3BrbGVuID0gcmF3bXBpbGVuOworICAgIH0KKyAgZWxzZQorICAgIHhmcmVlIChyYXdtcGkpOworCisgIHJjID0gX2djcnlfZWNjX2VkZHNhX3JlY292ZXJfeCAocmVzdWx0LT54LCByZXN1bHQtPnksIHNpZ24sIGN0eCk7CisgIG1waV9zZXRfdWkgKHJlc3VsdC0+eiwgMSk7CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIENvbXB1dGUgdGhlIEEgdmFsdWUgYXMgdXNlZCBieSBFZERTQS4gIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHJvdmlkZQorICAgdGhlIGNvbnRleHQgRUMgYW5kIHRoZSBhY3R1YWwgc2VjcmV0IEQgYXMgYW4gTVBJLiAgVGhlIGZ1bmN0aW9uCisgICByZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIDY0IGJ5dGUgYnVmZmVyIGF0IHJfZGlnZXN0OyB0aGUgZmlyc3QgMzIKKyAgIGJ5dGVzIHJlcHJlc2VudCB0aGUgQSB2YWx1ZS4gIE5VTEwgaXMgcmV0dXJuZWQgb24gZXJyb3IgYW5kIE5VTEwKKyAgIHN0b3JlZCBhdCBSX0RJR0VTVC4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX2VkZHNhX2NvbXB1dGVfaF9kICh1bnNpZ25lZCBjaGFyICoqcl9kaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZCwgbXBpX2VjX3QgZWMpCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICB1bnNpZ25lZCBjaGFyICpyYXdtcGkgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgcmF3bXBpbGVuOworICB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIGdjcnlfYnVmZmVyX3QgaHZlY1syXTsKKyAgaW50IGhhc2hhbGdvLCBiOworCisgICpyX2RpZ2VzdCA9IE5VTEw7CisKKyAgaGFzaGFsZ28gPSBHQ1JZX01EX1NIQTUxMjsKKyAgaWYgKGhhc2hhbGdvICE9IEdDUllfTURfU0hBNTEyKQorICAgIHJldHVybiBHUEdfRVJSX0RJR0VTVF9BTEdPOworCisgIGIgPSAoZWMtPm5iaXRzKzcpLzg7CisgIGlmIChiICE9IDI1Ni84KQorICAgIHJldHVybiBHUEdfRVJSX0lOVEVSTkFMOyAvKiBXZSBvbmx5IHN1cHBvcnQgMjU2IGJpdC4gKi8KKworICAvKiBOb3RlIHRoYXQgd2UgY2xlYXIgRElHRVNUIHNvIHdlIGNhbiB1c2UgaXQgYXMgaW5wdXQgdG8gbGVmdCBwYWQKKyAgICAgdGhlIGtleSB3aXRoIHplcm9lcyBmb3IgaGFzaGluZy4gICovCisgIGRpZ2VzdCA9IHh0cnljYWxsb2Nfc2VjdXJlICgyLCBiKTsKKyAgaWYgKCFkaWdlc3QpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworCisgIG1lbXNldCAoaHZlYywgMCwgc2l6ZW9mIGh2ZWMpOworCisgIHJhd21waSA9IF9nY3J5X21waV9nZXRfYnVmZmVyIChkLCAwLCAmcmF3bXBpbGVuLCBOVUxMKTsKKyAgaWYgKCFyYXdtcGkpCisgICAgeworICAgICAgeGZyZWUgKGRpZ2VzdCk7CisgICAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgfQorCisgIGh2ZWNbMF0uZGF0YSA9IGRpZ2VzdDsKKyAgaHZlY1swXS5vZmYgPSAwOworICBodmVjWzBdLmxlbiA9IGIgPiByYXdtcGlsZW4/IGIgLSByYXdtcGlsZW4gOiAwOworICBodmVjWzFdLmRhdGEgPSByYXdtcGk7CisgIGh2ZWNbMV0ub2ZmID0gMDsKKyAgaHZlY1sxXS5sZW4gPSByYXdtcGlsZW47CisgIHJjID0gX2djcnlfbWRfaGFzaF9idWZmZXJzIChoYXNoYWxnbywgMCwgZGlnZXN0LCBodmVjLCAyKTsKKyAgeGZyZWUgKHJhd21waSk7CisgIGlmIChyYykKKyAgICB7CisgICAgICB4ZnJlZSAoZGlnZXN0KTsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgLyogQ29tcHV0ZSB0aGUgQSB2YWx1ZS4gICovCisgIHJldmVyc2VfYnVmZmVyIChkaWdlc3QsIDMyKTsgIC8qIE9ubHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGhhc2guICAqLworICBkaWdlc3RbMF0gICA9IChkaWdlc3RbMF0gJiAweDdmKSB8IDB4NDA7CisgIGRpZ2VzdFszMV0gJj0gMHhmODsKKworICAqcl9kaWdlc3QgPSBkaWdlc3Q7CisgIHJldHVybiAwOworfQorCisKKy8qIEVkMjU1MTkgdmVyc2lvbiBvZiB0aGUga2V5IGdlbmVyYXRpb24uICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2VjY19lZGRzYV9nZW5rZXkgKEVDQ19zZWNyZXRfa2V5ICpzaywgZWxsaXB0aWNfY3VydmVfdCAqRSwgbXBpX2VjX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWwpCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICBpbnQgYiA9IDI1Ni84OyAgICAgICAgICAgICAvKiBUaGUgb25seSBzaXplIHdlIGN1cnJlbnRseSBzdXBwb3J0LiAgKi8KKyAgZ2NyeV9tcGlfdCBhLCB4LCB5OworICBtcGlfcG9pbnRfc3RydWN0IFE7CisgIGNoYXIgKmRidWY7CisgIHNpemVfdCBkbGVuOworICBnY3J5X2J1ZmZlcl90IGh2ZWNbMV07CisgIHVuc2lnbmVkIGNoYXIgKmhhc2hfZCA9IE5VTEw7CisKKyAgcG9pbnRfaW5pdCAoJlEpOworICBtZW1zZXQgKGh2ZWMsIDAsIHNpemVvZiBodmVjKTsKKworICBhID0gbXBpX3NuZXcgKDApOworICB4ID0gbXBpX25ldyAoMCk7CisgIHkgPSBtcGlfbmV3ICgwKTsKKworICAvKiBHZW5lcmF0ZSBhIHNlY3JldC4gICovCisgIGhhc2hfZCA9IHh0cnltYWxsb2Nfc2VjdXJlICgyKmIpOworICBpZiAoIWhhc2hfZCkKKyAgICB7CisgICAgICByYyA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGRsZW4gPSBiOworICBkYnVmID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoZGxlbiwgcmFuZG9tX2xldmVsKTsKKworICAvKiBDb21wdXRlIHRoZSBBIHZhbHVlLiAgKi8KKyAgaHZlY1swXS5kYXRhID0gZGJ1ZjsKKyAgaHZlY1swXS5sZW4gPSBkbGVuOworICByYyA9IF9nY3J5X21kX2hhc2hfYnVmZmVycyAoR0NSWV9NRF9TSEE1MTIsIDAsIGhhc2hfZCwgaHZlYywgMSk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBzay0+ZCA9IF9nY3J5X21waV9zZXRfb3BhcXVlIChOVUxMLCBkYnVmLCBkbGVuKjgpOworICBkYnVmID0gTlVMTDsKKyAgcmV2ZXJzZV9idWZmZXIgKGhhc2hfZCwgMzIpOyAgLyogT25seSB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgaGFzaC4gICovCisgIGhhc2hfZFswXSA9IChoYXNoX2RbMF0gJiAweDdmKSB8IDB4NDA7CisgIGhhc2hfZFszMV0gJj0gMHhmODsKKyAgX2djcnlfbXBpX3NldF9idWZmZXIgKGEsIGhhc2hfZCwgMzIsIDApOworICB4ZnJlZSAoaGFzaF9kKTsgaGFzaF9kID0gTlVMTDsKKyAgLyogbG9nX3ByaW50bXBpICgiZWNnZW4gICAgICAgICBhIiwgYSk7ICovCisKKyAgLyogQ29tcHV0ZSBRLiAgKi8KKyAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJlEsIGEsICZFLT5HLCBjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRwbnQgKCJlY2dlbiAgICAgIHBrIiwgJlEsIGN0eCk7CisKKyAgLyogQ29weSB0aGUgc3R1ZmYgdG8gdGhlIGtleSBzdHJ1Y3R1cmVzLiAqLworICBzay0+RS5tb2RlbCA9IEUtPm1vZGVsOworICBzay0+RS5kaWFsZWN0ID0gRS0+ZGlhbGVjdDsKKyAgc2stPkUucCA9IG1waV9jb3B5IChFLT5wKTsKKyAgc2stPkUuYSA9IG1waV9jb3B5IChFLT5hKTsKKyAgc2stPkUuYiA9IG1waV9jb3B5IChFLT5iKTsKKyAgcG9pbnRfaW5pdCAoJnNrLT5FLkcpOworICBwb2ludF9zZXQgKCZzay0+RS5HLCAmRS0+Ryk7CisgIHNrLT5FLm4gPSBtcGlfY29weSAoRS0+bik7CisgIHBvaW50X2luaXQgKCZzay0+USk7CisgIHBvaW50X3NldCAoJnNrLT5RLCAmUSk7CisKKyBsZWF2ZToKKyAgcG9pbnRfZnJlZSAoJlEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoYSk7CisgIF9nY3J5X21waV9yZWxlYXNlICh4KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHkpOworICB4ZnJlZSAoaGFzaF9kKTsKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIENvbXB1dGUgYW4gRWREU0Egc2lnbmF0dXJlLiBTZWU6CisgKiAgIFtlZDI1NTE5XSAyM3BwLiAoUERGKSBEYW5pZWwgSi4gQmVybnN0ZWluLCBOaWVscyBEdWlmLCBUYW5qYQorICogICBMYW5nZSwgUGV0ZXIgU2Nod2FiZSwgQm8tWWluIFlhbmcuIEhpZ2gtc3BlZWQgaGlnaC1zZWN1cml0eQorICogICBzaWduYXR1cmVzLiAgSm91cm5hbCBvZiBDcnlwdG9ncmFwaGljIEVuZ2luZWVyaW5nIDIgKDIwMTIpLCA3Ny04OS4KKyAqICAgRG9jdW1lbnQgSUQ6IGExYTYyYTJmNzZkMjNmNjVkNjIyNDg0ZGRkMDljYWY4LgorICogICBVUkw6IGh0dHA6Ly9jci55cC50by9wYXBlcnMuaHRtbCNlZDI1NTE5LiBEYXRlOiAyMDExLjA5LjI2LgorICoKKyAqIERlc3BpdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgaGFzaAorICogYWxnb3JpdGhtLCB3ZSBvbmx5IHN1cHBvcnQgd2hhdCBoYXMgYmVlbiBzcGVjaWZpZWQgYnkgdGhlIHBhcGVyLgorICogVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhlIHVzZWQKKyAqIGN1cnZlOyB0aGUgdXNlciBpcyByZXNwb25zaWJsZSB0byB1c2UgRWQyNTUxOS4KKyAqCisgKiBSZXR1cm4gdGhlIHNpZ25hdHVyZSBzdHJ1Y3QgKHIscykgZnJvbSB0aGUgbWVzc2FnZSBoYXNoLiAgVGhlIGNhbGxlcgorICogbXVzdCBoYXZlIGFsbG9jYXRlZCBSX1IgYW5kIFMuCisgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9lY2NfZWRkc2Ffc2lnbiAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3NlY3JldF9rZXkgKnNrZXksCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCByX3IsIGdjcnlfbXBpX3QgcywgaW50IGhhc2hhbGdvLCBnY3J5X21waV90IHBrKQoreworICBpbnQgcmM7CisgIG1waV9lY190IGN0eCA9IE5VTEw7CisgIGludCBiOworICB1bnNpZ25lZCBpbnQgdG1wOworICB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIGdjcnlfYnVmZmVyX3QgaHZlY1szXTsKKyAgY29uc3Qgdm9pZCAqbWJ1ZjsKKyAgc2l6ZV90IG1sZW47CisgIHVuc2lnbmVkIGNoYXIgKnJhd21waSA9IE5VTEw7CisgIHVuc2lnbmVkIGludCByYXdtcGlsZW47CisgIHVuc2lnbmVkIGNoYXIgKmVuY3BrID0gTlVMTDsgLyogRW5jb2RlZCBwdWJsaWMga2V5LiAgKi8KKyAgdW5zaWduZWQgaW50IGVuY3BrbGVuOworICBtcGlfcG9pbnRfc3RydWN0IEk7ICAgICAgICAgIC8qIEludGVybWVkaWF0ZSB2YWx1ZS4gICovCisgIG1waV9wb2ludF9zdHJ1Y3QgUTsgICAgICAgICAgLyogUHVibGljIGtleS4gICovCisgIGdjcnlfbXBpX3QgYSwgeCwgeSwgcjsKKworICBtZW1zZXQgKGh2ZWMsIDAsIHNpemVvZiBodmVjKTsKKworICBpZiAoIW1waV9pc19vcGFxdWUgKGlucHV0KSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfREFUQTsKKworICAvKiBJbml0aWFsaXplIHNvbWUgaGVscGVycy4gICovCisgIHBvaW50X2luaXQgKCZJKTsKKyAgcG9pbnRfaW5pdCAoJlEpOworICBhID0gbXBpX3NuZXcgKDApOworICB4ID0gbXBpX25ldyAoMCk7CisgIHkgPSBtcGlfbmV3ICgwKTsKKyAgciA9IG1waV9uZXcgKDApOworICBjdHggPSBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKHNrZXktPkUubW9kZWwsIHNrZXktPkUuZGlhbGVjdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2V5LT5FLnAsIHNrZXktPkUuYSwgc2tleS0+RS5iKTsKKyAgYiA9IChjdHgtPm5iaXRzKzcpLzg7CisgIGlmIChiICE9IDI1Ni84KQorICAgIHJldHVybiBHUEdfRVJSX0lOVEVSTkFMOyAvKiBXZSBvbmx5IHN1cHBvcnQgMjU2IGJpdC4gKi8KKworICByYyA9IF9nY3J5X2VjY19lZGRzYV9jb21wdXRlX2hfZCAoJmRpZ2VzdCwgc2tleS0+ZCwgY3R4KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIF9nY3J5X21waV9zZXRfYnVmZmVyIChhLCBkaWdlc3QsIDMyLCAwKTsKKworICAvKiBDb21wdXRlIHRoZSBwdWJsaWMga2V5IGlmIGl0IGhhcyBub3QgYmVlbiBzdXBwbGllZCBhcyBvcHRpb25hbAorICAgICBwYXJhbWV0ZXIuICAqLworICBpZiAocGspCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9lY2NfZWRkc2FfZGVjb2RlcG9pbnQgKHBrLCBjdHgsICZRLCAgJmVuY3BrLCAmZW5jcGtsZW4pOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgIGxvZ19wcmludGhleCAoIiogZV9wayIsIGVuY3BrLCBlbmNwa2xlbik7CisgICAgICBpZiAoIV9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoJlEsIGN0eCkpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IEdQR19FUlJfQlJPS0VOX1BVQktFWTsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJlEsIGEsICZza2V5LT5FLkcsIGN0eCk7CisgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9lbmNvZGVwb2ludCAoJlEsIGN0eCwgeCwgeSwgJmVuY3BrLCAmZW5jcGtsZW4pOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgIGxvZ19wcmludGhleCAoIiAgZV9wayIsIGVuY3BrLCBlbmNwa2xlbik7CisgICAgfQorCisgIC8qIENvbXB1dGUgUi4gICovCisgIG1idWYgPSBtcGlfZ2V0X29wYXF1ZSAoaW5wdXQsICZ0bXApOworICBtbGVuID0gKHRtcCArNykvODsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50aGV4ICgiICAgICBtIiwgbWJ1ZiwgbWxlbik7CisKKyAgaHZlY1swXS5kYXRhID0gZGlnZXN0OworICBodmVjWzBdLm9mZiAgPSAzMjsKKyAgaHZlY1swXS5sZW4gID0gMzI7CisgIGh2ZWNbMV0uZGF0YSA9IChjaGFyKiltYnVmOworICBodmVjWzFdLmxlbiAgPSBtbGVuOworICByYyA9IF9nY3J5X21kX2hhc2hfYnVmZmVycyAoaGFzaGFsZ28sIDAsIGRpZ2VzdCwgaHZlYywgMik7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICByZXZlcnNlX2J1ZmZlciAoZGlnZXN0LCA2NCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludGhleCAoIiAgICAgciIsIGRpZ2VzdCwgNjQpOworICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciAociwgZGlnZXN0LCA2NCwgMCk7CisgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKCZJLCByLCAmc2tleS0+RS5HLCBjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRwbnQgKCIgICByIiwgJkksIGN0eCk7CisKKyAgLyogQ29udmVydCBSIGludG8gYWZmaW5lIGNvb3JkaW5hdGVzIGFuZCBhcHBseSBlbmNvZGluZy4gICovCisgIHJjID0gX2djcnlfZWNjX2VkZHNhX2VuY29kZXBvaW50ICgmSSwgY3R4LCB4LCB5LCAmcmF3bXBpLCAmcmF3bXBpbGVuKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludGhleCAoIiAgIGVfciIsIHJhd21waSwgcmF3bXBpbGVuKTsKKworICAvKiBTID0gciArIGEgKiBIKGVuY29kZXBvaW50KFIpICsgZW5jb2RlcG9pbnQocGspICsgbSkgbW9kIG4gICovCisgIGh2ZWNbMF0uZGF0YSA9IHJhd21waTsgIC8qICh0aGlzIGlzIFIpICovCisgIGh2ZWNbMF0ub2ZmICA9IDA7CisgIGh2ZWNbMF0ubGVuICA9IHJhd21waWxlbjsKKyAgaHZlY1sxXS5kYXRhID0gZW5jcGs7CisgIGh2ZWNbMV0ub2ZmICA9IDA7CisgIGh2ZWNbMV0ubGVuICA9IGVuY3BrbGVuOworICBodmVjWzJdLmRhdGEgPSAoY2hhciopbWJ1ZjsKKyAgaHZlY1syXS5vZmYgID0gMDsKKyAgaHZlY1syXS5sZW4gID0gbWxlbjsKKyAgcmMgPSBfZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGhhc2hhbGdvLCAwLCBkaWdlc3QsIGh2ZWMsIDMpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBObyBtb3JlIG5lZWQgZm9yIFJBV01QSSB0aHVzIHdlIG5vdyB0cmFuc2ZlciBpdCB0byBSX1IuICAqLworICBtcGlfc2V0X29wYXF1ZSAocl9yLCByYXdtcGksIHJhd21waWxlbio4KTsKKyAgcmF3bXBpID0gTlVMTDsKKworICByZXZlcnNlX2J1ZmZlciAoZGlnZXN0LCA2NCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludGhleCAoIiBIKFIrKSIsIGRpZ2VzdCwgNjQpOworICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciAocywgZGlnZXN0LCA2NCwgMCk7CisgIG1waV9tdWxtIChzLCBzLCBhLCBza2V5LT5FLm4pOworICBtcGlfYWRkbSAocywgcywgciwgc2tleS0+RS5uKTsKKyAgcmMgPSBlZGRzYV9lbmNvZGVtcGkgKHMsIGIsICZyYXdtcGksICZyYXdtcGlsZW4pOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50aGV4ICgiICAgZV9zIiwgcmF3bXBpLCByYXdtcGlsZW4pOworICBtcGlfc2V0X29wYXF1ZSAocywgcmF3bXBpLCByYXdtcGlsZW4qOCk7CisgIHJhd21waSA9IE5VTEw7CisKKyAgcmMgPSAwOworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChhKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHgpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoeSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChyKTsKKyAgeGZyZWUgKGRpZ2VzdCk7CisgIF9nY3J5X21waV9lY19mcmVlIChjdHgpOworICBwb2ludF9mcmVlICgmSSk7CisgIHBvaW50X2ZyZWUgKCZRKTsKKyAgeGZyZWUgKGVuY3BrKTsKKyAgeGZyZWUgKHJhd21waSk7CisgIHJldHVybiByYzsKK30KKworCisvKiBWZXJpZnkgYW4gRWREU0Egc2lnbmF0dXJlLiAgU2VlIHNpZ25fZWRkc2EgZm9yIHRoZSByZWZlcmVuY2UuCisgKiBDaGVjayBpZiBSX0lOIGFuZCBTX0lOIHZlcmlmaWVzIElOUFVULiAgUEtFWSBoYXMgdGhlIGN1cnZlCisgKiBwYXJhbWV0ZXJzIGFuZCBQSyBpcyB0aGUgRWREU0Egc3R5bGUgZW5jb2RlZCBwdWJsaWMga2V5LgorICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX2VkZHNhX3ZlcmlmeSAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3B1YmxpY19rZXkgKnBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHJfaW4sIGdjcnlfbXBpX3Qgc19pbiwgaW50IGhhc2hhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBwaykKK3sKKyAgaW50IHJjOworICBtcGlfZWNfdCBjdHggPSBOVUxMOworICBpbnQgYjsKKyAgdW5zaWduZWQgaW50IHRtcDsKKyAgbXBpX3BvaW50X3N0cnVjdCBROyAgICAgICAgICAvKiBQdWJsaWMga2V5LiAgKi8KKyAgdW5zaWduZWQgY2hhciAqZW5jcGsgPSBOVUxMOyAvKiBFbmNvZGVkIHB1YmxpYyBrZXkuICAqLworICB1bnNpZ25lZCBpbnQgZW5jcGtsZW47CisgIGNvbnN0IHZvaWQgKm1idWYsICpyYnVmOworICB1bnNpZ25lZCBjaGFyICp0YnVmID0gTlVMTDsKKyAgc2l6ZV90IG1sZW4sIHJsZW47CisgIHVuc2lnbmVkIGludCB0bGVuOworICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFs2NF07CisgIGdjcnlfYnVmZmVyX3QgaHZlY1szXTsKKyAgZ2NyeV9tcGlfdCBoLCBzOworICBtcGlfcG9pbnRfc3RydWN0IElhLCBJYjsKKworICBpZiAoIW1waV9pc19vcGFxdWUgKGlucHV0KSB8fCAhbXBpX2lzX29wYXF1ZSAocl9pbikgfHwgIW1waV9pc19vcGFxdWUgKHNfaW4pKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9EQVRBOworICBpZiAoaGFzaGFsZ28gIT0gR0NSWV9NRF9TSEE1MTIpCisgICAgcmV0dXJuIEdQR19FUlJfRElHRVNUX0FMR087CisKKyAgcG9pbnRfaW5pdCAoJlEpOworICBwb2ludF9pbml0ICgmSWEpOworICBwb2ludF9pbml0ICgmSWIpOworICBoID0gbXBpX25ldyAoMCk7CisgIHMgPSBtcGlfbmV3ICgwKTsKKworICBjdHggPSBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKHBrZXktPkUubW9kZWwsIHBrZXktPkUuZGlhbGVjdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2V5LT5FLnAsIHBrZXktPkUuYSwgcGtleS0+RS5iKTsKKyAgYiA9IGN0eC0+bmJpdHMvODsKKyAgaWYgKGIgIT0gMjU2LzgpCisgICAgcmV0dXJuIEdQR19FUlJfSU5URVJOQUw7IC8qIFdlIG9ubHkgc3VwcG9ydCAyNTYgYml0LiAqLworCisgIC8qIERlY29kZSBhbmQgY2hlY2sgdGhlIHB1YmxpYyBrZXkuICAqLworICByYyA9IF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCAocGssIGN0eCwgJlEsICZlbmNwaywgJmVuY3BrbGVuKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmICghX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50ICgmUSwgY3R4KSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfQlJPS0VOX1BVQktFWTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRoZXggKCIgIGVfcGsiLCBlbmNwaywgZW5jcGtsZW4pOworICBpZiAoZW5jcGtsZW4gIT0gYikKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0xFTkdUSDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIENvbnZlcnQgdGhlIG90aGVyIGlucHV0IHBhcmFtZXRlcnMuICAqLworICBtYnVmID0gbXBpX2dldF9vcGFxdWUgKGlucHV0LCAmdG1wKTsKKyAgbWxlbiA9ICh0bXAgKzcpLzg7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludGhleCAoIiAgICAgbSIsIG1idWYsIG1sZW4pOworICByYnVmID0gbXBpX2dldF9vcGFxdWUgKHJfaW4sICZ0bXApOworICBybGVuID0gKHRtcCArNykvODsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50aGV4ICgiICAgICByIiwgcmJ1Ziwgcmxlbik7CisgIGlmIChybGVuICE9IGIpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9MRU5HVEg7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBoID0gSChlbmNvZGVwb2ludChSKSArIGVuY29kZXBvaW50KHBrKSArIG0pICAqLworICBodmVjWzBdLmRhdGEgPSAoY2hhciopcmJ1ZjsKKyAgaHZlY1swXS5vZmYgID0gMDsKKyAgaHZlY1swXS5sZW4gID0gcmxlbjsKKyAgaHZlY1sxXS5kYXRhID0gZW5jcGs7CisgIGh2ZWNbMV0ub2ZmICA9IDA7CisgIGh2ZWNbMV0ubGVuICA9IGVuY3BrbGVuOworICBodmVjWzJdLmRhdGEgPSAoY2hhciopbWJ1ZjsKKyAgaHZlY1syXS5vZmYgID0gMDsKKyAgaHZlY1syXS5sZW4gID0gbWxlbjsKKyAgcmMgPSBfZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGhhc2hhbGdvLCAwLCBkaWdlc3QsIGh2ZWMsIDMpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgcmV2ZXJzZV9idWZmZXIgKGRpZ2VzdCwgNjQpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRoZXggKCIgSChSKykiLCBkaWdlc3QsIDY0KTsKKyAgX2djcnlfbXBpX3NldF9idWZmZXIgKGgsIGRpZ2VzdCwgNjQsIDApOworCisgIC8qIEFjY29yZGluZyB0byB0aGUgcGFwZXIgdGhlIGJlc3Qgd2F5IGZvciB2ZXJpZmljYXRpb24gaXM6CisgICAgICAgICBlbmNvZGVwb2ludChzRyAtIGjCt1EpID0gZW5jb2RlcG9pbnQocikKKyAgICAgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZSBSLiAqLworICB7CisgICAgdm9pZCAqc2J1ZjsKKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKworICAgIHNidWYgPSBfZ2NyeV9tcGlfZ2V0X29wYXF1ZV9jb3B5IChzX2luLCAmdG1wKTsKKyAgICBzbGVuID0gKHRtcCArNykvODsKKyAgICByZXZlcnNlX2J1ZmZlciAoc2J1Ziwgc2xlbik7CisgICAgaWYgKERCR19DSVBIRVIpCisgICAgICBsb2dfcHJpbnRoZXggKCIgICAgIHMiLCBzYnVmLCBzbGVuKTsKKyAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciAocywgc2J1Ziwgc2xlbiwgMCk7CisgICAgeGZyZWUgKHNidWYpOworICAgIGlmIChzbGVuICE9IGIpCisgICAgICB7CisgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfTEVOR1RIOworICAgICAgICBnb3RvIGxlYXZlOworICAgICAgfQorICB9CisKKyAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJklhLCBzLCAmcGtleS0+RS5HLCBjdHgpOworICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50ICgmSWIsIGgsICZRLCBjdHgpOworICBfZ2NyeV9tcGlfbmVnIChJYi54LCBJYi54KTsKKyAgX2djcnlfbXBpX2VjX2FkZF9wb2ludHMgKCZJYSwgJklhLCAmSWIsIGN0eCk7CisgIHJjID0gX2djcnlfZWNjX2VkZHNhX2VuY29kZXBvaW50ICgmSWEsIGN0eCwgcywgaCwgJnRidWYsICZ0bGVuKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmICh0bGVuICE9IHJsZW4gfHwgbWVtY21wICh0YnVmLCByYnVmLCB0bGVuKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfQkFEX1NJR05BVFVSRTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHJjID0gMDsKKworIGxlYXZlOgorICB4ZnJlZSAoZW5jcGspOworICB4ZnJlZSAodGJ1Zik7CisgIF9nY3J5X21waV9lY19mcmVlIChjdHgpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChoKTsKKyAgcG9pbnRfZnJlZSAoJklhKTsKKyAgcG9pbnRfZnJlZSAoJkliKTsKKyAgcG9pbnRfZnJlZSAoJlEpOworICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvZWNjLWdvc3QuYyBiL2NpcGhlci9lY2MtZ29zdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGZhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZWNjLWdvc3QuYwpAQCAtMCwwICsxLDIzMyBAQAorLyogZWNjLWdvdHMuYyAgLSAgRWxsaXB0aWMgQ3VydmUgR09TVCBzaWduYXR1cmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1waS5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImNvbnRleHQuaCIKKyNpbmNsdWRlICJlYy1jb250ZXh0LmgiCisjaW5jbHVkZSAiZWNjLWNvbW1vbi5oIgorI2luY2x1ZGUgInB1YmtleS1pbnRlcm5hbC5oIgorCisKKy8qIENvbXB1dGUgYW4gR09TVCBSIDM0LjEwLTAxLy0xMiBzaWduYXR1cmUuCisgKiBSZXR1cm4gdGhlIHNpZ25hdHVyZSBzdHJ1Y3QgKHIscykgZnJvbSB0aGUgbWVzc2FnZSBoYXNoLiAgVGhlIGNhbGxlcgorICogbXVzdCBoYXZlIGFsbG9jYXRlZCBSIGFuZCBTLgorICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfZWNjX2dvc3Rfc2lnbiAoZ2NyeV9tcGlfdCBpbnB1dCwgRUNDX3NlY3JldF9rZXkgKnNrZXksCisgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgcykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmMgPSAwOworICBnY3J5X21waV90IGssIGRyLCBzdW0sIGtlLCB4LCBlOworICBtcGlfcG9pbnRfc3RydWN0IEk7CisgIGdjcnlfbXBpX3QgaGFzaDsKKyAgY29uc3Qgdm9pZCAqYWJ1ZjsKKyAgdW5zaWduZWQgaW50IGFiaXRzLCBxYml0czsKKyAgbXBpX2VjX3QgY3R4OworCisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19tcGlkdW1wICgiZ29zdCBzaWduIGhhc2ggICIsIGlucHV0ICk7CisKKyAgcWJpdHMgPSBtcGlfZ2V0X25iaXRzIChza2V5LT5FLm4pOworCisgIC8qIENvbnZlcnQgdGhlIElOUFVUIGludG8gYW4gTVBJIGlmIG5lZWRlZC4gICovCisgIGlmIChtcGlfaXNfb3BhcXVlIChpbnB1dCkpCisgICAgeworICAgICAgYWJ1ZiA9IG1waV9nZXRfb3BhcXVlIChpbnB1dCwgJmFiaXRzKTsKKyAgICAgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZoYXNoLCBHQ1JZTVBJX0ZNVF9VU0csIGFidWYsIChhYml0cys3KS84LCBOVUxMKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworICAgICAgaWYgKGFiaXRzID4gcWJpdHMpCisgICAgICAgIG1waV9yc2hpZnQgKGhhc2gsIGhhc2gsIGFiaXRzIC0gcWJpdHMpOworICAgIH0KKyAgZWxzZQorICAgIGhhc2ggPSBpbnB1dDsKKworCisgIGsgPSBOVUxMOworICBkciA9IG1waV9hbGxvYyAoMCk7CisgIHN1bSA9IG1waV9hbGxvYyAoMCk7CisgIGtlID0gbXBpX2FsbG9jICgwKTsKKyAgZSA9IG1waV9hbGxvYyAoMCk7CisgIHggPSBtcGlfYWxsb2MgKDApOworICBwb2ludF9pbml0ICgmSSk7CisKKyAgY3R4ID0gX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3IChza2V5LT5FLm1vZGVsLCBza2V5LT5FLmRpYWxlY3QsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tleS0+RS5wLCBza2V5LT5FLmEsIHNrZXktPkUuYik7CisKKyAgbXBpX21vZCAoZSwgaW5wdXQsIHNrZXktPkUubik7IC8qIGUgPSBoYXNoIG1vZCBuICovCisKKyAgaWYgKCFtcGlfY21wX3VpIChlLCAwKSkKKyAgICBtcGlfc2V0X3VpIChlLCAxKTsKKworICAvKiBUd28gbG9vcHMgdG8gYXZvaWQgUiBvciBTIGFyZSB6ZXJvLiAgVGhpcyBpcyBtb3JlIG9mIGEgam9rZSB0aGFuCisgICAgIGEgcmVhbCBkZW1hbmQgYmVjYXVzZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlbSBiZWluZyB6ZXJvIGlzIGxlc3MKKyAgICAgdGhhbiBhbnkgaGFyZHdhcmUgZmFpbHVyZS4gIFNvbWUgc3BlY3MgaG93ZXZlciByZXF1aXJlIGl0LiAgKi8KKyAgZG8KKyAgICB7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgbXBpX2ZyZWUgKGspOworICAgICAgICAgIGsgPSBfZ2NyeV9kc2FfZ2VuX2sgKHNrZXktPkUubiwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKworICAgICAgICAgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKCZJLCBrLCAmc2tleS0+RS5HLCBjdHgpOworICAgICAgICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgTlVMTCwgJkksIGN0eCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZyAoImVjYyBzaWduOiBGYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisgICAgICAgICAgICAgIHJjID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgfQorICAgICAgICAgIG1waV9tb2QgKHIsIHgsIHNrZXktPkUubik7ICAvKiByID0geCBtb2QgbiAqLworICAgICAgICB9CisgICAgICB3aGlsZSAoIW1waV9jbXBfdWkgKHIsIDApKTsKKyAgICAgIG1waV9tdWxtIChkciwgc2tleS0+ZCwgciwgc2tleS0+RS5uKTsgLyogZHIgPSBkKnIgbW9kIG4gICovCisgICAgICBtcGlfbXVsbSAoa2UsIGssIGUsIHNrZXktPkUubik7IC8qIGtlID0gayplIG1vZCBuICovCisgICAgICBtcGlfYWRkbSAocywga2UsIGRyLCBza2V5LT5FLm4pOyAvKiBzdW0gPSAoayplKyBkKnIpIG1vZCBuICAqLworICAgIH0KKyAgd2hpbGUgKCFtcGlfY21wX3VpIChzLCAwKSk7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJnb3N0IHNpZ24gcmVzdWx0IHIgIiwgcik7CisgICAgICBsb2dfbXBpZHVtcCAoImdvc3Qgc2lnbiByZXN1bHQgcyAiLCBzKTsKKyAgICB9CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGN0eCk7CisgIHBvaW50X2ZyZWUgKCZJKTsKKyAgbXBpX2ZyZWUgKHgpOworICBtcGlfZnJlZSAoZSk7CisgIG1waV9mcmVlIChrZSk7CisgIG1waV9mcmVlIChzdW0pOworICBtcGlfZnJlZSAoZHIpOworICBtcGlfZnJlZSAoayk7CisKKyAgaWYgKGhhc2ggIT0gaW5wdXQpCisgICAgbXBpX2ZyZWUgKGhhc2gpOworCisgIHJldHVybiByYzsKK30KKworCisvKiBWZXJpZnkgYSBHT1NUIFIgMzQuMTAtMDEvLTEyIHNpZ25hdHVyZS4KKyAqIENoZWNrIGlmIFIgYW5kIFMgdmVyaWZpZXMgSU5QVVQuCisgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9lY2NfZ29zdF92ZXJpZnkgKGdjcnlfbXBpX3QgaW5wdXQsIEVDQ19wdWJsaWNfa2V5ICpwa2V5LAorICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgcykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZXJyID0gMDsKKyAgZ2NyeV9tcGlfdCBlLCB4LCB6MSwgejIsIHYsIHJ2LCB6ZXJvOworICBtcGlfcG9pbnRfc3RydWN0IFEsIFExLCBRMjsKKyAgbXBpX2VjX3QgY3R4OworCisgIGlmKCAhKG1waV9jbXBfdWkgKHIsIDApID4gMCAmJiBtcGlfY21wIChyLCBwa2V5LT5FLm4pIDwgMCkgKQorICAgIHJldHVybiBHUEdfRVJSX0JBRF9TSUdOQVRVUkU7IC8qIEFzc2VydGlvbgkwIDwgciA8IG4gIGZhaWxlZC4gICovCisgIGlmKCAhKG1waV9jbXBfdWkgKHMsIDApID4gMCAmJiBtcGlfY21wIChzLCBwa2V5LT5FLm4pIDwgMCkgKQorICAgIHJldHVybiBHUEdfRVJSX0JBRF9TSUdOQVRVUkU7IC8qIEFzc2VydGlvbgkwIDwgcyA8IG4gIGZhaWxlZC4gICovCisKKyAgeCA9IG1waV9hbGxvYyAoMCk7CisgIGUgPSBtcGlfYWxsb2MgKDApOworICB6MSA9IG1waV9hbGxvYyAoMCk7CisgIHoyID0gbXBpX2FsbG9jICgwKTsKKyAgdiA9IG1waV9hbGxvYyAoMCk7CisgIHJ2ID0gbXBpX2FsbG9jICgwKTsKKyAgemVybyA9IG1waV9hbGxvYyAoMCk7CisKKyAgcG9pbnRfaW5pdCAoJlEpOworICBwb2ludF9pbml0ICgmUTEpOworICBwb2ludF9pbml0ICgmUTIpOworCisgIGN0eCA9IF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyAocGtleS0+RS5tb2RlbCwgcGtleS0+RS5kaWFsZWN0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZXktPkUucCwgcGtleS0+RS5hLCBwa2V5LT5FLmIpOworCisgIG1waV9tb2QgKGUsIGlucHV0LCBwa2V5LT5FLm4pOyAvKiBlID0gaGFzaCBtb2QgbiAqLworICBpZiAoIW1waV9jbXBfdWkgKGUsIDApKQorICAgIG1waV9zZXRfdWkgKGUsIDEpOworICBtcGlfaW52bSAodiwgZSwgcGtleS0+RS5uKTsgLyogdiA9IGVeKC0xKSAobW9kIG4pICovCisgIG1waV9tdWxtICh6MSwgcywgdiwgcGtleS0+RS5uKTsgLyogejEgPSBzKnYgKG1vZCBuKSAqLworICBtcGlfbXVsbSAocnYsIHIsIHYsIHBrZXktPkUubik7IC8qIHJ2ID0gcyp2IChtb2QgbikgKi8KKyAgbXBpX3N1Ym0gKHoyLCB6ZXJvLCBydiwgcGtleS0+RS5uKTsgLyogejIgPSAtcip2IChtb2QgbikgKi8KKworICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50ICgmUTEsIHoxLCAmcGtleS0+RS5HLCBjdHgpOworLyogICBsb2dfbXBpZHVtcCAoIlExLngiLCBRMS54KTsgKi8KKy8qICAgbG9nX21waWR1bXAgKCJRMS55IiwgUTEueSk7ICovCisvKiAgIGxvZ19tcGlkdW1wICgiUTEueiIsIFExLnopOyAqLworICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50ICgmUTIsIHoyLCAmcGtleS0+USwgY3R4KTsKKy8qICAgbG9nX21waWR1bXAgKCJRMi54IiwgUTIueCk7ICovCisvKiAgIGxvZ19tcGlkdW1wICgiUTIueSIsIFEyLnkpOyAqLworLyogICBsb2dfbXBpZHVtcCAoIlEyLnoiLCBRMi56KTsgKi8KKyAgX2djcnlfbXBpX2VjX2FkZF9wb2ludHMgKCZRLCAmUTEsICZRMiwgY3R4KTsKKy8qICAgbG9nX21waWR1bXAgKCIgUS54IiwgUS54KTsgKi8KKy8qICAgbG9nX21waWR1bXAgKCIgUS55IiwgUS55KTsgKi8KKy8qICAgbG9nX21waWR1bXAgKCIgUS56IiwgUS56KTsgKi8KKworICBpZiAoIW1waV9jbXBfdWkgKFEueiwgMCkpCisgICAgeworICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgICAgbG9nX2RlYnVnICgiZWNjIHZlcmlmeTogUmVqZWN0ZWRcbiIpOworICAgICAgZXJyID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgTlVMTCwgJlEsIGN0eCkpCisgICAgeworICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgIGxvZ19kZWJ1ZyAoImVjYyB2ZXJpZnk6IEZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzXG4iKTsKKyAgICAgIGVyciA9IEdQR19FUlJfQkFEX1NJR05BVFVSRTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBtcGlfbW9kICh4LCB4LCBwa2V5LT5FLm4pOyAvKiB4ID0geCBtb2QgRV9uICovCisgIGlmIChtcGlfY21wICh4LCByKSkgICAvKiB4ICE9IHIgKi8KKyAgICB7CisgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgeworICAgICAgICAgIGxvZ19tcGlkdW1wICgiICAgICB4IiwgeCk7CisgICAgICAgICAgbG9nX21waWR1bXAgKCIgICAgIHIiLCByKTsKKyAgICAgICAgICBsb2dfbXBpZHVtcCAoIiAgICAgcyIsIHMpOworICAgICAgICAgIGxvZ19kZWJ1ZyAoImVjYyB2ZXJpZnk6IE5vdCB2ZXJpZmllZFxuIik7CisgICAgICAgIH0KKyAgICAgIGVyciA9IEdQR19FUlJfQkFEX1NJR05BVFVSRTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJlY2MgdmVyaWZ5OiBBY2NlcHRlZFxuIik7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGN0eCk7CisgIHBvaW50X2ZyZWUgKCZRMik7CisgIHBvaW50X2ZyZWUgKCZRMSk7CisgIHBvaW50X2ZyZWUgKCZRKTsKKyAgbXBpX2ZyZWUgKHplcm8pOworICBtcGlfZnJlZSAocnYpOworICBtcGlfZnJlZSAodik7CisgIG1waV9mcmVlICh6Mik7CisgIG1waV9mcmVlICh6MSk7CisgIG1waV9mcmVlICh4KTsKKyAgbXBpX2ZyZWUgKGUpOworICByZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2VjYy1taXNjLmMgYi9jaXBoZXIvZWNjLW1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjc1MGMwCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2VjYy1taXNjLmMKQEAgLTAsMCArMSwyODcgQEAKKy8qIGVjYy1taXNjLmMgIC0gIEVsbGlwdGljIEN1cnZlIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAibXBpLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiY29udGV4dC5oIgorI2luY2x1ZGUgImVjLWNvbnRleHQuaCIKKyNpbmNsdWRlICJlY2MtY29tbW9uLmgiCisKKworLyoKKyAqIFJlbGVhc2UgYSBjdXJ2ZSBvYmplY3QuCisgKi8KK3ZvaWQKK19nY3J5X2VjY19jdXJ2ZV9mcmVlIChlbGxpcHRpY19jdXJ2ZV90ICpFKQoreworICBtcGlfZnJlZSAoRS0+cCk7IEUtPnAgPSBOVUxMOworICBtcGlfZnJlZSAoRS0+YSk7IEUtPmEgPSBOVUxMOworICBtcGlfZnJlZSAoRS0+Yik7ICBFLT5iID0gTlVMTDsKKyAgX2djcnlfbXBpX3BvaW50X2ZyZWVfcGFydHMgKCZFLT5HKTsKKyAgbXBpX2ZyZWUgKEUtPm4pOyAgRS0+biA9IE5VTEw7Cit9CisKKworLyoKKyAqIFJldHVybiBhIGNvcHkgb2YgYSBjdXJ2ZSBvYmplY3QuCisgKi8KK2VsbGlwdGljX2N1cnZlX3QKK19nY3J5X2VjY19jdXJ2ZV9jb3B5IChlbGxpcHRpY19jdXJ2ZV90IEUpCit7CisgIGVsbGlwdGljX2N1cnZlX3QgUjsKKworICBSLm1vZGVsID0gRS5tb2RlbDsKKyAgUi5kaWFsZWN0ID0gRS5kaWFsZWN0OworICBSLm5hbWUgPSBFLm5hbWU7CisgIFIucCA9IG1waV9jb3B5IChFLnApOworICBSLmEgPSBtcGlfY29weSAoRS5hKTsKKyAgUi5iID0gbXBpX2NvcHkgKEUuYik7CisgIF9nY3J5X21waV9wb2ludF9pbml0ICgmUi5HKTsKKyAgcG9pbnRfc2V0ICgmUi5HLCAmRS5HKTsKKyAgUi5uID0gbXBpX2NvcHkgKEUubik7CisKKyAgcmV0dXJuIFI7Cit9CisKKworLyoKKyAqIFJldHVybiBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJ2ZSBtb2RlbC4KKyAqLworY29uc3QgY2hhciAqCitfZ2NyeV9lY2NfbW9kZWwyc3RyIChlbnVtIGdjcnlfbXBpX2VjX21vZGVscyBtb2RlbCkKK3sKKyAgY29uc3QgY2hhciAqc3RyID0gIj8iOworICBzd2l0Y2ggKG1vZGVsKQorICAgIHsKKyAgICBjYXNlIE1QSV9FQ19XRUlFUlNUUkFTUzogICAgc3RyID0gIldlaWVyc3RyYXNzIjsgYnJlYWs7CisgICAgY2FzZSBNUElfRUNfTU9OVEdPTUVSWTogICAgIHN0ciA9ICJNb250Z29tZXJ5IjsgIGJyZWFrOworICAgIGNhc2UgTVBJX0VDX1RXSVNURURFRFdBUkRTOiBzdHIgPSAiVHdpc3RlZCBFZHdhcmRzIjsgYnJlYWs7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCisKKy8qCisgKiBSZXR1cm4gYSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VydmUgZGlhbGVjdC4KKyAqLworY29uc3QgY2hhciAqCitfZ2NyeV9lY2NfZGlhbGVjdDJzdHIgKGVudW0gZWNjX2RpYWxlY3RzIGRpYWxlY3QpCit7CisgIGNvbnN0IGNoYXIgKnN0ciA9ICI/IjsKKyAgc3dpdGNoIChkaWFsZWN0KQorICAgIHsKKyAgICBjYXNlIEVDQ19ESUFMRUNUX1NUQU5EQVJEOiAgc3RyID0gIlN0YW5kYXJkIjsgYnJlYWs7CisgICAgY2FzZSBFQ0NfRElBTEVDVF9FRDI1NTE5OiAgIHN0ciA9ICJFZDI1NTE5IjsgYnJlYWs7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCisKK2djcnlfbXBpX3QKK19nY3J5X2VjY19lYzJvcyAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgcCkKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGludCBwYnl0ZXMgPSAobXBpX2dldF9uYml0cyAocCkrNykvODsKKyAgc2l6ZV90IG47CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnB0cjsKKyAgZ2NyeV9tcGlfdCByZXN1bHQ7CisKKyAgYnVmID0geG1hbGxvYyAoIDEgKyAyKnBieXRlcyApOworICAqYnVmID0gMDQ7IC8qIFVuY29tcHJlc3NlZCBwb2ludC4gICovCisgIHB0ciA9IGJ1ZisxOworICByYyA9IF9nY3J5X21waV9wcmludCAoR0NSWU1QSV9GTVRfVVNHLCBwdHIsIHBieXRlcywgJm4sIHgpOworICBpZiAocmMpCisgICAgbG9nX2ZhdGFsICgibXBpX3ByaW50IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgaWYgKG4gPCBwYnl0ZXMpCisgICAgeworICAgICAgbWVtbW92ZSAocHRyKyhwYnl0ZXMtbiksIHB0ciwgbik7CisgICAgICBtZW1zZXQgKHB0ciwgMCwgKHBieXRlcy1uKSk7CisgICAgfQorICBwdHIgKz0gcGJ5dGVzOworICByYyA9IF9nY3J5X21waV9wcmludCAoR0NSWU1QSV9GTVRfVVNHLCBwdHIsIHBieXRlcywgJm4sIHkpOworICBpZiAocmMpCisgICAgbG9nX2ZhdGFsICgibXBpX3ByaW50IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgaWYgKG4gPCBwYnl0ZXMpCisgICAgeworICAgICAgbWVtbW92ZSAocHRyKyhwYnl0ZXMtbiksIHB0ciwgbik7CisgICAgICBtZW1zZXQgKHB0ciwgMCwgKHBieXRlcy1uKSk7CisgICAgfQorCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZyZXN1bHQsIEdDUllNUElfRk1UX1VTRywgYnVmLCAxKzIqcGJ5dGVzLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGxvZ19mYXRhbCAoIm1waV9zY2FuIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgeGZyZWUgKGJ1Zik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBDb252ZXJ0IFBPSU5UIGludG8gYWZmaW5lIGNvb3JkaW5hdGVzIHVzaW5nIHRoZSBjb250ZXh0IENUWCBhbmQKKyAgIHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBNUEkuICBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgcG9zc2libGUKKyAgIE5VTEwgaXMgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIHdvbid0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UuICAqLworZ2NyeV9tcGlfdAorX2djcnlfbXBpX2VjX2VjMm9zIChnY3J5X21waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBlY3R4KQoreworICBnY3J5X21waV90IGdfeCwgZ195LCByZXN1bHQ7CisKKyAgZ194ID0gbXBpX25ldyAoMCk7CisgIGdfeSA9IG1waV9uZXcgKDApOworICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKGdfeCwgZ195LCBwb2ludCwgZWN0eCkpCisgICAgcmVzdWx0ID0gTlVMTDsKKyAgZWxzZQorICAgIHJlc3VsdCA9IF9nY3J5X2VjY19lYzJvcyAoZ194LCBnX3ksIGVjdHgtPnApOworICBtcGlfZnJlZSAoZ194KTsKKyAgbXBpX2ZyZWUgKGdfeSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBSRVNVTFQgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGlzIHNldCBvbiBzdWNjZXNzIHRvIHRoZQorICAgcG9pbnQgZ2l2ZW4gYnkgVkFMVUUuICAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9lY2Nfb3MyZWMgKG1waV9wb2ludF90IHJlc3VsdCwgZ2NyeV9tcGlfdCB2YWx1ZSkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBzaXplX3QgbjsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmOworICB1bnNpZ25lZCBjaGFyICpidWZfbWVtb3J5OworICBnY3J5X21waV90IHgsIHk7CisKKyAgaWYgKG1waV9pc19vcGFxdWUgKHZhbHVlKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgbmJpdHM7CisKKyAgICAgIGJ1ZiA9IG1waV9nZXRfb3BhcXVlICh2YWx1ZSwgJm5iaXRzKTsKKyAgICAgIGlmICghYnVmKQorICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICAgICAgbiA9IChuYml0cyArIDcpLzg7CisgICAgICBidWZfbWVtb3J5ID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuID0gKG1waV9nZXRfbmJpdHMgKHZhbHVlKSs3KS84OworICAgICAgYnVmX21lbW9yeSA9IHhtYWxsb2MgKG4pOworICAgICAgcmMgPSBfZ2NyeV9tcGlfcHJpbnQgKEdDUllNUElfRk1UX1VTRywgYnVmX21lbW9yeSwgbiwgJm4sIHZhbHVlKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgeworICAgICAgICAgIHhmcmVlIChidWZfbWVtb3J5KTsKKyAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICAgIGJ1ZiA9IGJ1Zl9tZW1vcnk7CisgICAgfQorCisgIGlmIChuIDwgMSkKKyAgICB7CisgICAgICB4ZnJlZSAoYnVmX21lbW9yeSk7CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICAgIH0KKyAgaWYgKCpidWYgIT0gNCkKKyAgICB7CisgICAgICB4ZnJlZSAoYnVmX21lbW9yeSk7CisgICAgICByZXR1cm4gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7IC8qIE5vIHN1cHBvcnQgZm9yIHBvaW50IGNvbXByZXNzaW9uLiAgKi8KKyAgICB9CisgIGlmICggKChuLTEpJTIpICkKKyAgICB7CisgICAgICB4ZnJlZSAoYnVmX21lbW9yeSk7CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICAgIH0KKyAgbiA9IChuLTEpLzI7CisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZ4LCBHQ1JZTVBJX0ZNVF9VU0csIGJ1ZisxLCBuLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIHsKKyAgICAgIHhmcmVlIChidWZfbWVtb3J5KTsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisgIHJjID0gX2djcnlfbXBpX3NjYW4gKCZ5LCBHQ1JZTVBJX0ZNVF9VU0csIGJ1ZisxK24sIG4sIE5VTEwpOworICB4ZnJlZSAoYnVmX21lbW9yeSk7CisgIGlmIChyYykKKyAgICB7CisgICAgICBtcGlfZnJlZSAoeCk7CisgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgIG1waV9zZXQgKHJlc3VsdC0+eCwgeCk7CisgIG1waV9zZXQgKHJlc3VsdC0+eSwgeSk7CisgIG1waV9zZXRfdWkgKHJlc3VsdC0+eiwgMSk7CisKKyAgbXBpX2ZyZWUgKHgpOworICBtcGlfZnJlZSAoeSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogQ29tcHV0ZSB0aGUgcHVibGljIGtleSBmcm9tIHRoZSB0aGUgY29udGV4dCBFQy4gIE9idmlvdXNseSBhCisgICByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBzZWNyZXQga2V5IGlzIGF2YWlsYWJsZSBpbiBFQy4gIE9uIHN1Y2Nlc3MKKyAgIFEgaXMgcmV0dXJuZWQ7IG9uIGVycm9yIE5VTEwuICBJZiBRIGlzIE5VTEwgYSBuZXdseSBhbGxvY2F0ZWQgcG9pbnQKKyAgIGlzIHJldHVybmVkLiAgSWYgRyBvciBEIGFyZSBnaXZlbiB0aGV5IG92ZXJyaWRlIHRoZSB2YWx1ZXMgdGFrZW4KKyAgIGZyb20gRUMuICovCittcGlfcG9pbnRfdAorX2djcnlfZWNjX2NvbXB1dGVfcHVibGljIChtcGlfcG9pbnRfdCBRLCBtcGlfZWNfdCBlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3BvaW50X3QgRywgZ2NyeV9tcGlfdCBkKQoreworICBpZiAoIUcpCisgICAgRyA9IGVjLT5HOworICBpZiAoIWQpCisgICAgZCA9IGVjLT5kOworCisgIGlmICghZCB8fCAhRyB8fCAhZWMtPnAgfHwgIWVjLT5hKQorICAgIHJldHVybiBOVUxMOworICBpZiAoZWMtPm1vZGVsID09IE1QSV9FQ19UV0lTVEVERURXQVJEUyAmJiAhZWMtPmIpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKGVjLT5kaWFsZWN0ID09IEVDQ19ESUFMRUNUX0VEMjU1MTkKKyAgICAgICYmIChlYy0+ZmxhZ3MgJiBQVUJLRVlfRkxBR19FRERTQSkpCisgICAgeworICAgICAgZ2NyeV9tcGlfdCBhOworICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0OworCisgICAgICBpZiAoX2djcnlfZWNjX2VkZHNhX2NvbXB1dGVfaF9kICgmZGlnZXN0LCBkLCBlYykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBhID0gbXBpX3NuZXcgKDApOworICAgICAgX2djcnlfbXBpX3NldF9idWZmZXIgKGEsIGRpZ2VzdCwgMzIsIDApOworICAgICAgeGZyZWUgKGRpZ2VzdCk7CisKKyAgICAgIC8qIEFuZCBmaW5hbGx5IHRoZSBwdWJsaWMga2V5LiAgKi8KKyAgICAgIGlmICghUSkKKyAgICAgICAgUSA9IG1waV9wb2ludF9uZXcgKDApOworICAgICAgaWYgKFEpCisgICAgICAgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKFEsIGEsIEcsIGVjKTsKKyAgICAgIG1waV9mcmVlIChhKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIVEpCisgICAgICAgIFEgPSBtcGlfcG9pbnRfbmV3ICgwKTsKKyAgICAgIGlmIChRKQorICAgICAgICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50IChRLCBkLCBHLCBlYyk7CisgICAgfQorCisgIHJldHVybiBROworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL2VjYy5jIGIvY2lwaGVyL2VjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmI3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZWNjLmMKQEAgLTAsMCArMSwxNzYwIEBACisvKiBlY2MuYyAgLSAgRWxsaXB0aWMgQ3VydmUgQ3J5cHRvZ3JhcGh5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKiBUaGlzIGNvZGUgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgUGF0Y2ggMC4xLjYgZm9yIHRoZSBnbnVwZworICAgMS40LnggYnJhbmNoIGFzIHJldHJpZXZlZCBvbiAyMDA3LTAzLTIxIGZyb20KKyAgIGh0dHA6Ly93d3cuY2FsY3VyY28uY2F0L2VjY0dudVBHL3NyYy9nbnVwZy0xLjQuNi1lY2MwLjIuMGJldGExLmRpZmYuYnoyCisgICBUaGUgb3JpZ2luYWwgYXV0aG9ycyBhcmU6CisgICAgIFdyaXR0ZW4gYnkKKyAgICAgIFNlcmdpIEJsYW5jaCBpIFRvcm5lIDxkNDM3MjIxMSBhdCBhbHVtbmVzLmV1cC51ZGwuZXM+LAorICAgICAgUmFtaXJvIE1vcmVubyBDaGlyYWwgPHJhbWlybyBhdCBldXAudWRsLmVzPgorICAgICBNYWludGFpbmVycworICAgICAgU2VyZ2kgQmxhbmNoIGkgVG9ybmUKKyAgICAgIFJhbWlybyBNb3Jlbm8gQ2hpcmFsCisgICAgICBNaWthZWwgTXlsbmlrb3YgKG1tcikKKyAgRm9yIHVzZSBpbiBMaWJnY3J5cHQgdGhlIGNvZGUgaGFzIGJlZW4gaGVhdmlseSBtb2RpZmllZCBhbmQgY2xlYW5lZAorICB1cC4gSW4gZmFjdCB0aGVyZSBpcyBub3QgbXVjaCBsZWZ0IG9mIHRoZSBvcmdpbmFsbHkgY29kZSBleGNlcHQgZm9yCisgIHNvbWUgdmFyaWFibGUgbmFtZXMgYW5kIHRoZSB0ZXh0IGJvb2sgaW1wbGVtZW50YWlvbiBvZiB0aGUgc2lnbiBhbmQKKyAgdmVyaWZpY2F0aW9uIGFsZ29yaXRobXMuICBUaGUgYXJpdGhtZXRpYyBmdW5jdGlvbnMgaGF2ZSBlbnRpcmVseQorICBiZWVuIHJld3JpdHRlbiBhbmQgbW92ZWQgdG8gbXBpL2VjLmMuCisKKyAgRUNESCBlbmNyeXB0IGFuZCBkZWNyeXB0IGNvZGUgd3JpdHRlbiBieSBBbmRyZXkgSml2c292LAorKi8KKworCisvKiBUT0RPOgorCisgIC0gSWYgd2Ugc3VwcG9ydCBwb2ludCBjb21wcmVzc2lvbiB3ZSBuZWVkIHRvIHVuY29tcHJlc3MgYmVmb3JlCisgICAgY29tcHV0aW5nIHRoZSBrZXlncmlwCisKKyAgLSBJbiBtcGkvZWMuYyB3ZSB1c2UgbXBpX3Bvd20gZm9yIHheMiBtb2QgcDogRWl0aGVyIGltcGxlbWVudCBhCisgICAgc3BlY2lhbCBjYXNlIGluIG1waV9wb3dtIG9yIGNoZWNrIHdoZXRoZXIgbXBpX211bG0gaXMgZmFzdGVyLgorCisqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisjaW5jbHVkZSAiZWMtY29udGV4dC5oIgorI2luY2x1ZGUgInB1YmtleS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImVjYy1jb21tb24uaCIKKworCitzdGF0aWMgY29uc3QgY2hhciAqZWNjX25hbWVzW10gPQorICB7CisgICAgImVjYyIsCisgICAgImVjZHNhIiwKKyAgICAiZWNkaCIsCisgICAgImVkZHNhIiwKKyAgICAiZ29zdCIsCisgICAgTlVMTCwKKyAgfTsKKworCisvKiBSZWdpc3RlcmVkIHByb2dyZXNzIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGJhY2sgdmFsdWUuICovCitzdGF0aWMgdm9pZCAoKnByb2dyZXNzX2NiKSAodm9pZCAqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQsIGludCk7CitzdGF0aWMgdm9pZCAqcHJvZ3Jlc3NfY2JfZGF0YTsKKworCisMCisvKiBMb2NhbCBwcm90b3R5cGVzLiAqLworc3RhdGljIHZvaWQgdGVzdF9rZXlzIChFQ0Nfc2VjcmV0X2tleSAqIHNrLCB1bnNpZ25lZCBpbnQgbmJpdHMpOworc3RhdGljIHVuc2lnbmVkIGludCBlY2NfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBwYXJtcyk7CisKKworCisMCit2b2lkCitfZ2NyeV9yZWdpc3Rlcl9wa19lY2NfcHJvZ3Jlc3MgKHZvaWQgKCpjYikgKHZvaWQgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKyAgcHJvZ3Jlc3NfY2IgPSBjYjsKKyAgcHJvZ3Jlc3NfY2JfZGF0YSA9IGNiX2RhdGE7Cit9CisKKy8qIHN0YXRpYyB2b2lkICovCisvKiBwcm9ncmVzcyAoaW50IGMpICovCisvKiB7ICovCisvKiAgIGlmIChwcm9ncmVzc19jYikgKi8KKy8qICAgICBwcm9ncmVzc19jYiAocHJvZ3Jlc3NfY2JfZGF0YSwgInBrX2VjYyIsIGMsIDAsIDApOyAqLworLyogfSAqLworCisKKwwKKy8qIFN0YW5kYXJkIHZlcnNpb24gb2YgdGhlIGtleSBnZW5lcmF0aW9uLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorbmlzdF9nZW5lcmF0ZV9rZXkgKEVDQ19zZWNyZXRfa2V5ICpzaywgZWxsaXB0aWNfY3VydmVfdCAqRSwgbXBpX2VjX3QgY3R4LAorICAgICAgICAgICAgICAgICAgIGdjcnlfcmFuZG9tX2xldmVsX3QgcmFuZG9tX2xldmVsLCB1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIG1waV9wb2ludF9zdHJ1Y3QgUTsKKworICBwb2ludF9pbml0ICgmUSk7CisKKyAgLyogR2VuZXJhdGUgYSBzZWNyZXQuICAqLworICBpZiAoY3R4LT5kaWFsZWN0ID09IEVDQ19ESUFMRUNUX0VEMjU1MTkpCisgICAgeworICAgICAgY2hhciAqcm5kYnVmOworCisgICAgICBzay0+ZCA9IG1waV9zbmV3ICgyNTYpOworICAgICAgcm5kYnVmID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoMzIsIHJhbmRvbV9sZXZlbCk7CisgICAgICBybmRidWZbMF0gJj0gMHg3ZjsgIC8qIENsZWFyIGJpdCAyNTUuICovCisgICAgICBybmRidWZbMF0gfD0gMHg0MDsgIC8qIFNldCBiaXQgMjU0LiAgICovCisgICAgICBybmRidWZbMzFdICY9IDB4Zjg7IC8qIENsZWFyIGJpdHMgMi4uMCBzbyB0aGF0IGQgbW9kIDggPT0gMCAgKi8KKyAgICAgIF9nY3J5X21waV9zZXRfYnVmZmVyIChzay0+ZCwgcm5kYnVmLCAzMiwgMCk7CisgICAgICB4ZnJlZSAocm5kYnVmKTsKKyAgICB9CisgIGVsc2UKKyAgICBzay0+ZCA9IF9nY3J5X2RzYV9nZW5fayAoRS0+biwgcmFuZG9tX2xldmVsKTsKKworCisgIC8qIENvbXB1dGUgUS4gICovCisgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKCZRLCBzay0+ZCwgJkUtPkcsIGN0eCk7CisKKyAgLyogQ29weSB0aGUgc3R1ZmYgdG8gdGhlIGtleSBzdHJ1Y3R1cmVzLiAqLworICBzay0+RS5tb2RlbCA9IEUtPm1vZGVsOworICBzay0+RS5kaWFsZWN0ID0gRS0+ZGlhbGVjdDsKKyAgc2stPkUucCA9IG1waV9jb3B5IChFLT5wKTsKKyAgc2stPkUuYSA9IG1waV9jb3B5IChFLT5hKTsKKyAgc2stPkUuYiA9IG1waV9jb3B5IChFLT5iKTsKKyAgcG9pbnRfaW5pdCAoJnNrLT5FLkcpOworICBwb2ludF9zZXQgKCZzay0+RS5HLCAmRS0+Ryk7CisgIHNrLT5FLm4gPSBtcGlfY29weSAoRS0+bik7CisgIHBvaW50X2luaXQgKCZzay0+USk7CisKKyAgLyogV2Ugd2FudCB0aGUgUT0oeCx5KSBiZSBhICJjb21wbGlhbnQga2V5IiBpbiB0ZXJtcyBvZiB0aGUKKyAgICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaml2c292LWVjYy1jb21wYWN0LCB3aGljaCBzaW1wbHkKKyAgICogbWVhbnMgdGhhdCB3ZSBjaG9vc2UgZWl0aGVyIFE9KHgseSkgb3IgLVE9KHgscC15KSBzdWNoIHRoYXQgd2UKKyAgICogZW5kIHVwIHdpdGggdGhlIG1pbih5LHAteSkgYXMgdGhlIHkgY29vcmRpbmF0ZS4gIFN1Y2ggYSBwdWJsaWMKKyAgICoga2V5IGFsbG93cyB0aGUgbW9zdCBlZmZpY2llbnQgY29tcHJlc3Npb246IHkgY2FuIHNpbXBseSBiZQorICAgKiBkcm9wcGVkIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGl0J3MgYSBtaW5pbXVtIG9mIHRoZSB0d28KKyAgICogcG9zc2liaWxpdGllcyB3aXRob3V0IGFueSBsb3NzIG9mIHNlY3VyaXR5LiAgTm90ZSB0aGF0IHdlIGRvbid0CisgICAqIGRvIHRoYXQgZm9yIEVkMjU1MTkgc28gdGhhdCB3ZSBkbyBub3QgdmlvbGF0ZSB0aGUgc3BlY2lhbAorICAgKiBjb25zdHJ1Y3Rpb24gb2YgdGhlIHNlY3JldCBrZXkuICAqLworICBpZiAoRS0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgIHBvaW50X3NldCAoJnNrLT5RLCAmUSk7CisgIGVsc2UKKyAgICB7CisgICAgICBnY3J5X21waV90IHgsIHksIG5lZ2F0aXZlOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IHBiaXRzID0gbXBpX2dldF9uYml0cyAoRS0+cCk7CisKKyAgICAgIHggPSBtcGlfbmV3IChwYml0cyk7CisgICAgICB5ID0gbXBpX25ldyAocGJpdHMpOworICAgICAgbmVnYXRpdmUgPSBtcGlfbmV3IChwYml0cyk7CisKKyAgICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgJlEsIGN0eCkpCisgICAgICAgIGxvZ19mYXRhbCAoImVjZ2VuOiBGYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlcyBmb3IgJXNcbiIsICJRIik7CisKKyAgICAgIGlmIChFLT5tb2RlbCA9PSBNUElfRUNfV0VJRVJTVFJBU1MpCisgICAgICAgIG1waV9zdWIgKG5lZ2F0aXZlLCBFLT5wLCB5KTsgICAgICAvKiBuZWdhdGl2ZSA9IHAgLSB5ICovCisgICAgICBlbHNlCisgICAgICAgIG1waV9zdWIgKG5lZ2F0aXZlLCBFLT5wLCB4KTsgICAgICAvKiBuZWdhdGl2ZSA9IHAgLSB4ICovCisKKyAgICAgIGlmIChtcGlfY21wIChuZWdhdGl2ZSwgeSkgPCAwKSAgIC8qIHAgLSB5IDwgcCAqLworICAgICAgICB7CisgICAgICAgICAgLyogV2UgbmVlZCB0byBlbmQgdXAgd2l0aCAtUTsgdGhpcyBhc3N1cmVzIHRoYXQgbmV3IFEncyB5IGlzCisgICAgICAgICAgICAgdGhlIHNtYWxsZXN0IG9uZSAqLworICAgICAgICAgIG1waV9zdWIgKHNrLT5kLCBFLT5uLCBzay0+ZCk7ICAgLyogZCA9IG9yZGVyIC0gZCAqLworICAgICAgICAgIGlmIChFLT5tb2RlbCA9PSBNUElfRUNfV0VJRVJTVFJBU1MpCisgICAgICAgICAgICBtcGlfcG9pbnRfc25hdGNoX3NldCAoJnNrLT5RLCB4LCBuZWdhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9hbGxvY19zZXRfdWkgKDEpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBtcGlfcG9pbnRfc25hdGNoX3NldCAoJnNrLT5RLCBuZWdhdGl2ZSwgeSwgbXBpX2FsbG9jX3NldF91aSAoMSkpOworCisgICAgICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgICAgICBsb2dfZGVidWcgKCJlY2dlbiBjb252ZXJ0ZWQgUSB0byBhIGNvbXBsaWFudCBwb2ludFxuIik7CisgICAgICAgIH0KKyAgICAgIGVsc2UgLyogcCAtIHkgPj0gcCAqLworICAgICAgICB7CisgICAgICAgICAgLyogTm8gY2hhbmdlIGlzIG5lZWRlZCBleGFjdGx5IDUwJSBvZiB0aGUgdGltZToganVzdCBjb3B5LiAqLworICAgICAgICAgIHBvaW50X3NldCAoJnNrLT5RLCAmUSk7CisgICAgICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgICAgICBsb2dfZGVidWcgKCJlY2dlbiBkaWRuJ3QgbmVlZCB0byBjb252ZXJ0IFEgdG8gYSBjb21wbGlhbnQgcG9pbnRcbiIpOworCisgICAgICAgICAgbXBpX2ZyZWUgKG5lZ2F0aXZlKTsKKyAgICAgICAgICBpZiAoRS0+bW9kZWwgPT0gTVBJX0VDX1dFSUVSU1RSQVNTKQorICAgICAgICAgICAgbXBpX2ZyZWUgKHgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1waV9mcmVlICh5KTsKKyAgICAgICAgfQorCisgICAgICBpZiAoRS0+bW9kZWwgPT0gTVBJX0VDX1dFSUVSU1RSQVNTKQorICAgICAgICBtcGlfZnJlZSAoeSk7CisgICAgICBlbHNlCisgICAgICAgIG1waV9mcmVlICh4KTsKKyAgICB9CisKKyAgcG9pbnRfZnJlZSAoJlEpOworICAvKiBOb3cgd2UgY2FuIHRlc3Qgb3VyIGtleXMgKHRoaXMgc2hvdWxkIG5ldmVyIGZhaWwhKS4gICovCisgIHRlc3Rfa2V5cyAoc2ssIG5iaXRzIC0gNjQpOworCisgIHJldHVybiAwOworfQorCisKKy8qCisgKiBUbyB2ZXJpZnkgY29ycmVjdCBza2V5IGl0IHVzZSBhIHJhbmRvbSBpbmZvcm1hdGlvbi4KKyAqIEZpcnN0LCBlbmNyeXB0IGFuZCBkZWNyeXB0IHRoaXMgZHVtbXkgdmFsdWUsCisgKiB0ZXN0IGlmIHRoZSBpbmZvcm1hdGlvbiBpcyByZWN1cGVyYXRlZC4KKyAqIFNlY29uZCwgdGVzdCB3aXRoIHRoZSBzaWduIGFuZCB2ZXJpZnkgZnVuY3Rpb25zLgorICovCitzdGF0aWMgdm9pZAordGVzdF9rZXlzIChFQ0Nfc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cykKK3sKKyAgRUNDX3B1YmxpY19rZXkgcGs7CisgIGdjcnlfbXBpX3QgdGVzdCA9IG1waV9uZXcgKG5iaXRzKTsKKyAgbXBpX3BvaW50X3N0cnVjdCBSXzsKKyAgZ2NyeV9tcGlfdCBjID0gbXBpX25ldyAobmJpdHMpOworICBnY3J5X21waV90IG91dCA9IG1waV9uZXcgKG5iaXRzKTsKKyAgZ2NyeV9tcGlfdCByID0gbXBpX25ldyAobmJpdHMpOworICBnY3J5X21waV90IHMgPSBtcGlfbmV3IChuYml0cyk7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiVGVzdGluZyBrZXkuXG4iKTsKKworICBwb2ludF9pbml0ICgmUl8pOworCisgIHBrLkUgPSBfZ2NyeV9lY2NfY3VydmVfY29weSAoc2stPkUpOworICBwb2ludF9pbml0ICgmcGsuUSk7CisgIHBvaW50X3NldCAoJnBrLlEsICZzay0+USk7CisKKyAgX2djcnlfbXBpX3JhbmRvbWl6ZSAodGVzdCwgbmJpdHMsIEdDUllfV0VBS19SQU5ET00pOworCisgIGlmIChfZ2NyeV9lY2NfZWNkc2Ffc2lnbiAodGVzdCwgc2ssIHIsIHMsIDAsIDApICkKKyAgICBsb2dfZmF0YWwgKCJFQ0RTQSBvcGVyYXRpb246IHNpZ24gZmFpbGVkXG4iKTsKKworICBpZiAoX2djcnlfZWNjX2VjZHNhX3ZlcmlmeSAodGVzdCwgJnBrLCByLCBzKSkKKyAgICB7CisgICAgICBsb2dfZmF0YWwgKCJFQ0RTQSBvcGVyYXRpb246IHNpZ24sIHZlcmlmeSBmYWlsZWRcbiIpOworICAgIH0KKworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJFQ0RTQSBvcGVyYXRpb246IHNpZ24sIHZlcmlmeSBvay5cbiIpOworCisgIHBvaW50X2ZyZWUgKCZway5RKTsKKyAgX2djcnlfZWNjX2N1cnZlX2ZyZWUgKCZway5FKTsKKworICBwb2ludF9mcmVlICgmUl8pOworICBtcGlfZnJlZSAocyk7CisgIG1waV9mcmVlIChyKTsKKyAgbXBpX2ZyZWUgKG91dCk7CisgIG1waV9mcmVlIChjKTsKKyAgbXBpX2ZyZWUgKHRlc3QpOworfQorCisKKy8qCisgKiBUbyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHZhbHVlLCByZWNhbGN1bGF0ZSB0aGUgY29ycmVzcG9uZGVuY2UKKyAqIGJldHdlZW4gdGhlIHB1YmxpYyB2YWx1ZSBhbmQgdGhlIHNlY3JldCBvbmUuCisgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX3NlY3JldF9rZXkgKEVDQ19zZWNyZXRfa2V5ICpzaywgbXBpX2VjX3QgZWMsIGludCBmbGFncykKK3sKKyAgaW50IHJjID0gMTsKKyAgbXBpX3BvaW50X3N0cnVjdCBROworICBnY3J5X21waV90IHgxLCB5MTsKKyAgZ2NyeV9tcGlfdCB4MiA9IE5VTEw7CisgIGdjcnlfbXBpX3QgeTIgPSBOVUxMOworCisgIHBvaW50X2luaXQgKCZRKTsKKyAgeDEgPSBtcGlfbmV3ICgwKTsKKyAgeTEgPSBtcGlfbmV3ICgwKTsKKworICAvKiBHIGluIEUoRl9wKSAqLworICBpZiAoIV9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoJnNrLT5FLkcsIGVjKSkKKyAgICB7CisgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgbG9nX2RlYnVnICgiQmFkIGNoZWNrOiBQb2ludCAnRycgZG9lcyBub3QgYmVsb25nIHRvIGN1cnZlICdFJyFcbiIpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRyAhPSBQYUkgKi8KKyAgaWYgKCFtcGlfY21wX3VpIChzay0+RS5HLnosIDApKQorICAgIHsKKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICBsb2dfZGVidWcgKCJCYWQgY2hlY2s6ICdHJyBjYW5ub3QgYmUgUG9pbnQgYXQgSW5maW5pdHkhXG4iKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIENoZWNrIG9yZGVyIG9mIGN1cnZlLiAgKi8KKyAgaWYgKHNrLT5FLmRpYWxlY3QgIT0gRUNDX0RJQUxFQ1RfRUQyNTUxOSkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50ICgmUSwgc2stPkUubiwgJnNrLT5FLkcsIGVjKTsKKyAgICAgIGlmIChtcGlfY21wX3VpIChRLnosIDApKQorICAgICAgICB7CisgICAgICAgICAgaWYgKERCR19DSVBIRVIpCisgICAgICAgICAgICBsb2dfZGVidWcgKCJjaGVja19zZWNyZXRfa2V5OiBFIGlzIG5vdCBhIGN1cnZlIG9mIG9yZGVyIG5cbiIpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogUHVia2V5IGNhbm5vdCBiZSBQYUkgKi8KKyAgaWYgKCFtcGlfY21wX3VpIChzay0+US56LCAwKSkKKyAgICB7CisgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgbG9nX2RlYnVnICgiQmFkIGNoZWNrOiBRIGNhbiBub3QgYmUgYSBQb2ludCBhdCBJbmZpbml0eSFcbiIpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogcHVia2V5ID0gW2RdRyBvdmVyIEUgKi8KKyAgaWYgKCFfZ2NyeV9lY2NfY29tcHV0ZV9wdWJsaWMgKCZRLCBlYywgJnNrLT5FLkcsIHNrLT5kKSkKKyAgICB7CisgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgbG9nX2RlYnVnICgiQmFkIGNoZWNrOiBjb21wdXRhdGlvbiBvZiBkRyBmYWlsZWRcbiIpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeDEsIHkxLCAmUSwgZWMpKQorICAgIHsKKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICBsb2dfZGVidWcgKCJCYWQgY2hlY2s6IFEgY2FuIG5vdCBiZSBhIFBvaW50IGF0IEluZmluaXR5IVxuIik7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKQorICAgIDsgLyogRml4bWU6IEVkRFNBIGlzIHNwZWNpYWwuICAqLworICBlbHNlIGlmICghbXBpX2NtcF91aSAoc2stPlEueiwgMSkpCisgICAgeworICAgICAgLyogRmFzdCBwYXRoIGlmIFEgaXMgYWxyZWFkeSBpbiBhZmZpbmUgY29vcmRpbmF0ZXMuICAqLworICAgICAgaWYgKG1waV9jbXAgKHgxLCBzay0+US54KSB8fCBtcGlfY21wICh5MSwgc2stPlEueSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgICAgIGxvZ19kZWJ1ZworICAgICAgICAgICAgICAoIkJhZCBjaGVjazogVGhlcmUgaXMgTk8gY29ycmVzcG9uZGVuY2UgYmV0d2VlbiAnZCcgYW5kICdRJyFcbiIpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB4MiA9IG1waV9uZXcgKDApOworICAgICAgeTIgPSBtcGlfbmV3ICgwKTsKKyAgICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeDIsIHkyLCAmc2stPlEsIGVjKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgbG9nX2RlYnVnICgiQmFkIGNoZWNrOiBRIGNhbiBub3QgYmUgYSBQb2ludCBhdCBJbmZpbml0eSFcbiIpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgaWYgKG1waV9jbXAgKHgxLCB4MikgfHwgbXBpX2NtcCAoeTEsIHkyKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgbG9nX2RlYnVnCisgICAgICAgICAgICAgICgiQmFkIGNoZWNrOiBUaGVyZSBpcyBOTyBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuICdkJyBhbmQgJ1EnIVxuIik7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorICAgIH0KKyAgcmMgPSAwOyAvKiBPa2F5LiAgKi8KKworIGxlYXZlOgorICBtcGlfZnJlZSAoeDIpOworICBtcGlfZnJlZSAoeDEpOworICBtcGlfZnJlZSAoeTEpOworICBtcGlfZnJlZSAoeTIpOworICBwb2ludF9mcmVlICgmUSk7CisgIHJldHVybiByYzsKK30KKworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIGludGVyZmFjZSAgKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitlY2NfZ2VuZXJhdGUgKGNvbnN0IGdjcnlfc2V4cF90IGdlbnBhcm1zLCBnY3J5X3NleHBfdCAqcl9za2V5KQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgdW5zaWduZWQgaW50IG5iaXRzOworICBlbGxpcHRpY19jdXJ2ZV90IEU7CisgIEVDQ19zZWNyZXRfa2V5IHNrOworICBnY3J5X21waV90IHggPSBOVUxMOworICBnY3J5X21waV90IHkgPSBOVUxMOworICBjaGFyICpjdXJ2ZV9uYW1lID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGdjcnlfcmFuZG9tX2xldmVsX3QgcmFuZG9tX2xldmVsOworICBtcGlfZWNfdCBjdHggPSBOVUxMOworICBnY3J5X3NleHBfdCBjdXJ2ZV9pbmZvID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgY3VydmVfZmxhZ3MgPSBOVUxMOworICBnY3J5X21waV90IGJhc2UgPSBOVUxMOworICBnY3J5X21waV90IHB1YmxpYyA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2VjcmV0ID0gTlVMTDsKKyAgaW50IGZsYWdzID0gMDsKKworICBtZW1zZXQgKCZFLCAwLCBzaXplb2YgRSk7CisgIG1lbXNldCAoJnNrLCAwLCBzaXplb2Ygc2spOworCisgIHJjID0gX2djcnlfcGtfdXRpbF9nZXRfbmJpdHMgKGdlbnBhcm1zLCAmbmJpdHMpOworICBpZiAocmMpCisgICAgcmV0dXJuIHJjOworCisgIC8qIFBhcnNlIHRoZSBvcHRpb25hbCAiY3VydmUiIHBhcmFtZXRlci4gKi8KKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAiY3VydmUiLCAwKTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgIGN1cnZlX25hbWUgPSBfZ2NyeV9zZXhwX250aF9zdHJpbmcgKGwxLCAxKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKCFjdXJ2ZV9uYW1lKQorICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOyAvKiBObyBjdXJ2ZSBuYW1lIG9yIHZhbHVlIHRvbyBsYXJnZS4gKi8KKyAgICB9CisKKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsIGZsYWdzIGxpc3QuICAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoZ2VucGFybXMsICJmbGFncyIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsMSwgJmZsYWdzLCBOVUxMKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBQYXJzZSB0aGUgZGVwcmVjYXRlZCBvcHRpb25hbCB0cmFuc2llbnQta2V5IGZsYWcuICAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoZ2VucGFybXMsICJ0cmFuc2llbnQta2V5IiwgMCk7CisgIGlmIChsMSkKKyAgICB7CisgICAgICBmbGFncyB8PSBQVUJLRVlfRkxBR19UUkFOU0lFTlRfS0VZOworICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgfQorCisgIC8qIE5CSVRTIGlzIHJlcXVpcmVkIGlmIG5vIGN1cnZlIG5hbWUgaGFzIGJlZW4gZ2l2ZW4uICAqLworICBpZiAoIW5iaXRzICYmICFjdXJ2ZV9uYW1lKQorICAgIHJldHVybiBHUEdfRVJSX05PX09CSjsgLyogTm8gTkJJVFMgcGFyYW1ldGVyLiAqLworCisgIHJjID0gX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUgKG5iaXRzLCBjdXJ2ZV9uYW1lLCAmRSwgJm5iaXRzKTsKKyAgeGZyZWUgKGN1cnZlX25hbWUpOyBjdXJ2ZV9uYW1lID0gTlVMTDsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX2RlYnVnICgiZWNnZW4gY3VydmUgaW5mbzogJXMvJXNcbiIsCisgICAgICAgICAgICAgICAgIF9nY3J5X2VjY19tb2RlbDJzdHIgKEUubW9kZWwpLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfZGlhbGVjdDJzdHIgKEUuZGlhbGVjdCkpOworICAgICAgaWYgKEUubmFtZSkKKyAgICAgICAgbG9nX2RlYnVnICgiZWNnZW4gY3VydmUgdXNlZDogJXNcbiIsIEUubmFtZSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2dlbiBjdXJ2ZSAgIHAiLCBFLnApOworICAgICAgbG9nX3ByaW50bXBpICgiZWNnZW4gY3VydmUgICBhIiwgRS5hKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjZ2VuIGN1cnZlICAgYiIsIEUuYik7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2dlbiBjdXJ2ZSAgIG4iLCBFLm4pOworICAgICAgbG9nX3ByaW50cG50ICgiZWNnZW4gY3VydmUgRyIsICZFLkcsIE5VTEwpOworICAgIH0KKworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfVFJBTlNJRU5UX0tFWSkpCisgICAgcmFuZG9tX2xldmVsID0gR0NSWV9TVFJPTkdfUkFORE9NOworICBlbHNlCisgICAgcmFuZG9tX2xldmVsID0gR0NSWV9WRVJZX1NUUk9OR19SQU5ET007CisKKyAgY3R4ID0gX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3IChFLm1vZGVsLCBFLmRpYWxlY3QsIDAsIEUucCwgRS5hLCBFLmIpOworICB4ID0gbXBpX25ldyAoMCk7CisgIHkgPSBtcGlfbmV3ICgwKTsKKworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKQorICAgIHJjID0gX2djcnlfZWNjX2VkZHNhX2dlbmtleSAoJnNrLCAmRSwgY3R4LCByYW5kb21fbGV2ZWwpOworICBlbHNlCisgICAgcmMgPSBuaXN0X2dlbmVyYXRlX2tleSAoJnNrLCAmRSwgY3R4LCByYW5kb21fbGV2ZWwsIG5iaXRzKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgLyogQ29weSBkYXRhIHRvIHRoZSByZXN1bHQuICAqLworICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksICZzay5FLkcsIGN0eCkpCisgICAgbG9nX2ZhdGFsICgiZWNnZW46IEZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzIGZvciAlc1xuIiwgIkciKTsKKyAgYmFzZSA9IF9nY3J5X2VjY19lYzJvcyAoeCwgeSwgc2suRS5wKTsKKyAgaWYgKHNrLkUuZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5ICYmICEoZmxhZ3MgJiBQVUJLRVlfRkxBR19OT0NPTVApKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmVuY3BrOworICAgICAgdW5zaWduZWQgaW50IGVuY3BrbGVuOworCisgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9lbmNvZGVwb2ludCAoJnNrLlEsIGN0eCwgeCwgeSwgJmVuY3BrLCAmZW5jcGtsZW4pOworICAgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisgICAgICBwdWJsaWMgPSBtcGlfbmV3ICgwKTsKKyAgICAgIG1waV9zZXRfb3BhcXVlIChwdWJsaWMsIGVuY3BrLCBlbmNwa2xlbio4KTsKKyAgICAgIGVuY3BrID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksICZzay5RLCBjdHgpKQorICAgICAgICBsb2dfZmF0YWwgKCJlY2dlbjogRmFpbGVkIHRvIGdldCBhZmZpbmUgY29vcmRpbmF0ZXMgZm9yICVzXG4iLCAiUSIpOworICAgICAgcHVibGljID0gX2djcnlfZWNjX2VjMm9zICh4LCB5LCBzay5FLnApOworICAgIH0KKyAgc2VjcmV0ID0gc2suZDsgc2suZCA9IE5VTEw7CisgIGlmIChFLm5hbWUpCisgICAgeworICAgICAgcmMgPSBzZXhwX2J1aWxkICgmY3VydmVfaW5mbywgTlVMTCwgIihjdXJ2ZSAlcykiLCBFLm5hbWUpOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfUEFSQU0pIHx8IChmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICB7CisgICAgICByYyA9IHNleHBfYnVpbGQKKyAgICAgICAgKCZjdXJ2ZV9mbGFncywgTlVMTCwKKyAgICAgICAgICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19QQVJBTSkgJiYgKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKT8KKyAgICAgICAgICIoZmxhZ3MgcGFyYW0gZWRkc2EpIiA6CisgICAgICAgICAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfUEFSQU0pKT8KKyAgICAgICAgICIoZmxhZ3MgcGFyYW0pIiA6CisgICAgICAgICAiKGZsYWdzIGVkZHNhKSIpOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfUEFSQU0pICYmIEUubmFtZSkKKyAgICByYyA9IHNleHBfYnVpbGQgKHJfc2tleSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICIoa2V5LWRhdGEiCisgICAgICAgICAgICAgICAgICAgICAiIChwdWJsaWMta2V5IgorICAgICAgICAgICAgICAgICAgICAgIiAgKGVjYyVTJVMocCVtKShhJW0pKGIlbSkoZyVtKShuJW0pKHElbSkpKSIKKyAgICAgICAgICAgICAgICAgICAgICIgKHByaXZhdGUta2V5IgorICAgICAgICAgICAgICAgICAgICAgIiAgKGVjYyVTJVMocCVtKShhJW0pKGIlbSkoZyVtKShuJW0pKHElbSkoZCVtKSkpIgorICAgICAgICAgICAgICAgICAgICAgIiApIiwKKyAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8sIGN1cnZlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgc2suRS5wLCBzay5FLmEsIHNrLkUuYiwgYmFzZSwgc2suRS5uLCBwdWJsaWMsCisgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLCBjdXJ2ZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgIHNrLkUucCwgc2suRS5hLCBzay5FLmIsIGJhc2UsIHNrLkUubiwgcHVibGljLCBzZWNyZXQpOworICBlbHNlCisgICAgcmMgPSBzZXhwX2J1aWxkIChyX3NrZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAiKGtleS1kYXRhIgorICAgICAgICAgICAgICAgICAgICAgIiAocHVibGljLWtleSIKKyAgICAgICAgICAgICAgICAgICAgICIgIChlY2MlUyVTKHElbSkpKSIKKyAgICAgICAgICAgICAgICAgICAgICIgKHByaXZhdGUta2V5IgorICAgICAgICAgICAgICAgICAgICAgIiAgKGVjYyVTJVMocSVtKShkJW0pKSkiCisgICAgICAgICAgICAgICAgICAgICAiICkiLAorICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mbywgY3VydmVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMsCisgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLCBjdXJ2ZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgIHB1YmxpYywgc2VjcmV0KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX3ByaW50bXBpICgiZWNnZW4gcmVzdWx0ICBwIiwgc2suRS5wKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjZ2VuIHJlc3VsdCAgYSIsIHNrLkUuYSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2dlbiByZXN1bHQgIGIiLCBzay5FLmIpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNnZW4gcmVzdWx0ICBHIiwgYmFzZSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2dlbiByZXN1bHQgIG4iLCBzay5FLm4pOworICAgICAgbG9nX3ByaW50bXBpICgiZWNnZW4gcmVzdWx0ICBRIiwgcHVibGljKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjZ2VuIHJlc3VsdCAgZCIsIHNlY3JldCk7CisgICAgICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKQorICAgICAgICBsb2dfZGVidWcgKCJlY2dlbiByZXN1bHQgIHVzaW5nIEVkMjU1MTkrRWREU0FcbiIpOworICAgIH0KKworIGxlYXZlOgorICBtcGlfZnJlZSAoc2VjcmV0KTsKKyAgbXBpX2ZyZWUgKHB1YmxpYyk7CisgIG1waV9mcmVlIChiYXNlKTsKKyAgeworICAgIF9nY3J5X2VjY19jdXJ2ZV9mcmVlICgmc2suRSk7CisgICAgcG9pbnRfZnJlZSAoJnNrLlEpOworICAgIG1waV9mcmVlIChzay5kKTsKKyAgfQorICBfZ2NyeV9lY2NfY3VydmVfZnJlZSAoJkUpOworICBtcGlfZnJlZSAoeCk7CisgIG1waV9mcmVlICh5KTsKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGN0eCk7CisgIHNleHBfcmVsZWFzZSAoY3VydmVfZmxhZ3MpOworICBzZXhwX3JlbGVhc2UgKGN1cnZlX2luZm8pOworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZWNjX2NoZWNrX3NlY3JldF9rZXkgKGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgaW50IGZsYWdzID0gMDsKKyAgY2hhciAqY3VydmVuYW1lID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfZyA9IE5VTEw7CisgIGdjcnlfbXBpX3QgbXBpX3EgPSBOVUxMOworICBFQ0Nfc2VjcmV0X2tleSBzazsKKyAgbXBpX2VjX3QgZWMgPSBOVUxMOworCisgIG1lbXNldCAoJnNrLCAwLCBzaXplb2Ygc2spOworCisgIC8qIExvb2sgZm9yIGZsYWdzLiAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoa2V5cGFybXMsICJmbGFncyIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsMSwgJmZsYWdzLCBOVUxMKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUgcGFyYW1ldGVycy4gICovCisgIGlmICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19QQVJBTSkpCisgICAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAiLXA/YT9iP2c/bj8vcT8rZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5FLnAsICZzay5FLmEsICZzay5FLmIsICZtcGlfZywgJnNrLkUubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9xLCAmc2suZCwgTlVMTCk7CisgIGVsc2UKKyAgICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICIvcT8rZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtcGlfcSwgJnNrLmQsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBBZGQgbWlzc2luZyBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBvcHRpb25hbCBjdXJ2ZSBwYXJhbWV0ZXIuICAqLworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGtleXBhcm1zLCAiY3VydmUiLCA1KTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgIGN1cnZlbmFtZSA9IHNleHBfbnRoX3N0cmluZyAobDEsIDEpOworICAgICAgaWYgKGN1cnZlbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gX2djcnlfZWNjX3VwZGF0ZV9jdXJ2ZV9wYXJhbSAoY3VydmVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNrLkUubW9kZWwsICZzay5FLmRpYWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2suRS5wLCAmc2suRS5hLCAmc2suRS5iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9nLCAmc2suRS5uKTsKKyAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChtcGlfZykKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmc2suRS5HKTsKKyAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjICgmc2suRS5HLCBtcGlfZyk7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEd1ZXNzIHJlcXVpcmVkIGZpZWxkcyBpZiBhIGN1cnZlIHBhcmFtZXRlciBoYXMgbm90IGJlZW4gZ2l2ZW4uCisgICAgIEZJWE1FOiBUaGlzIGlzIGEgY3J1ZGUgaGFja3MuICBXZSBuZWVkIHRvIGZpeCB0aGF0LiAgKi8KKyAgaWYgKCFjdXJ2ZW5hbWUpCisgICAgeworICAgICAgc2suRS5tb2RlbCA9ICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19FRERTQSkKKyAgICAgICAgICAgICAgID8gTVBJX0VDX1RXSVNURURFRFdBUkRTCisgICAgICAgICAgICAgICA6IE1QSV9FQ19XRUlFUlNUUkFTUyk7CisgICAgICBzay5FLmRpYWxlY3QgPSAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpCisgICAgICAgICAgICAgICAgICAgICAgPyBFQ0NfRElBTEVDVF9FRDI1NTE5CisgICAgICAgICAgICAgICAgICAgICAgOiBFQ0NfRElBTEVDVF9TVEFOREFSRCk7CisgICAgfQorICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfZGVidWcgKCJlY2NfdGVzdGtleSBpbmY6ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfbW9kZWwyc3RyIChzay5FLm1vZGVsKSwKKyAgICAgICAgICAgICAgICAgX2djcnlfZWNjX2RpYWxlY3Qyc3RyIChzay5FLmRpYWxlY3QpKTsKKyAgICAgIGlmIChzay5FLm5hbWUpCisgICAgICAgIGxvZ19kZWJ1ZyAgKCJlY2NfdGVzdGtleSBuYW06ICVzXG4iLCBzay5FLm5hbWUpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX3Rlc3RrZXkgICBwIiwgc2suRS5wKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY190ZXN0a2V5ICAgYSIsIHNrLkUuYSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfdGVzdGtleSAgIGIiLCBzay5FLmIpOworICAgICAgbG9nX3ByaW50cG50ICgiZWNjX3Rlc3RrZXkgZyIsICAgJnNrLkUuRywgTlVMTCk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfdGVzdGtleSAgIG4iLCBzay5FLm4pOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX3Rlc3RrZXkgICBxIiwgbXBpX3EpOworICAgICAgaWYgKCFmaXBzX21vZGUgKCkpCisgICAgICAgIGxvZ19wcmludG1waSAoImVjY190ZXN0a2V5ICAgZCIsIHNrLmQpOworICAgIH0KKyAgaWYgKCFzay5FLnAgfHwgIXNrLkUuYSB8fCAhc2suRS5iIHx8ICFzay5FLkcueCB8fCAhc2suRS5uIHx8ICFzay5kKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9OT19PQko7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBlYyA9IF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyAoc2suRS5tb2RlbCwgc2suRS5kaWFsZWN0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2suRS5wLCBzay5FLmEsIHNrLkUuYik7CisKKyAgaWYgKG1waV9xKQorICAgIHsKKyAgICAgIHBvaW50X2luaXQgKCZzay5RKTsKKyAgICAgIGlmIChlYy0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9kZWNvZGVwb2ludCAobXBpX3EsIGVjLCAmc2suUSwgTlVMTCwgTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjICgmc2suUSwgbXBpX3EpOworICAgICAgaWYgKHJjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBzZWNyZXQga2V5IHRlc3QgcmVxdWlyZXMgUS4gICovCisgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgaWYgKGNoZWNrX3NlY3JldF9rZXkgKCZzaywgZWMsIGZsYWdzKSkKKyAgICByYyA9IEdQR19FUlJfQkFEX1NFQ0tFWTsKKworIGxlYXZlOgorICBfZ2NyeV9tcGlfZWNfZnJlZSAoZWMpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suRS5wKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLkUuYSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5FLmIpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAobXBpX2cpOworICBwb2ludF9mcmVlICgmc2suRS5HKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLkUubik7CisgIF9nY3J5X21waV9yZWxlYXNlIChtcGlfcSk7CisgIHBvaW50X2ZyZWUgKCZzay5RKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLmQpOworICB4ZnJlZSAoY3VydmVuYW1lKTsKKyAgc2V4cF9yZWxlYXNlIChsMSk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImVjY190ZXN0a2V5ICAgPT4gJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2VjY19zaWduIChnY3J5X3NleHBfdCAqcl9zaWcsIGdjcnlfc2V4cF90IHNfZGF0YSwgZ2NyeV9zZXhwX3Qga2V5cGFybXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgY2hhciAqY3VydmVuYW1lID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfZyA9IE5VTEw7CisgIGdjcnlfbXBpX3QgbXBpX3EgPSBOVUxMOworICBFQ0Nfc2VjcmV0X2tleSBzazsKKyAgZ2NyeV9tcGlfdCBzaWdfciA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2lnX3MgPSBOVUxMOworCisgIG1lbXNldCAoJnNrLCAwLCBzaXplb2Ygc2spOworCisgIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKCZjdHgsIFBVQktFWV9PUF9TSUdOLCAwKTsKKworICAvKiBFeHRyYWN0IHRoZSBkYXRhLiAgKi8KKyAgcmMgPSBfZ2NyeV9wa191dGlsX2RhdGFfdG9fbXBpIChzX2RhdGEsICZkYXRhLCAmY3R4KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19tcGlkdW1wICgiZWNjX3NpZ24gICBkYXRhIiwgZGF0YSk7CisKKyAgLyoKKyAgICogRXh0cmFjdCB0aGUga2V5LgorICAgKi8KKyAgaWYgKChjdHguZmxhZ3MgJiBQVUJLRVlfRkxBR19QQVJBTSkpCisgICAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAiLXA/YT9iP2c/bj8vcT8rZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5FLnAsICZzay5FLmEsICZzay5FLmIsICZtcGlfZywgJnNrLkUubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9xLCAmc2suZCwgTlVMTCk7CisgIGVsc2UKKyAgICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICIvcT8rZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtcGlfcSwgJnNrLmQsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKG1waV9nKQorICAgIHsKKyAgICAgIHBvaW50X2luaXQgKCZzay5FLkcpOworICAgICAgcmMgPSBfZ2NyeV9lY2Nfb3MyZWMgKCZzay5FLkcsIG1waV9nKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIC8qIEFkZCBtaXNzaW5nIHBhcmFtZXRlcnMgdXNpbmcgdGhlIG9wdGlvbmFsIGN1cnZlIHBhcmFtZXRlci4gICovCisgIHNleHBfcmVsZWFzZSAobDEpOworICBsMSA9IHNleHBfZmluZF90b2tlbiAoa2V5cGFybXMsICJjdXJ2ZSIsIDUpOworICBpZiAobDEpCisgICAgeworICAgICAgY3VydmVuYW1lID0gc2V4cF9udGhfc3RyaW5nIChsMSwgMSk7CisgICAgICBpZiAoY3VydmVuYW1lKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBfZ2NyeV9lY2NfZmlsbF9pbl9jdXJ2ZSAoMCwgY3VydmVuYW1lLCAmc2suRSwgTlVMTCk7CisgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorICAvKiBHdWVzcyByZXF1aXJlZCBmaWVsZHMgaWYgYSBjdXJ2ZSBwYXJhbWV0ZXIgaGFzIG5vdCBiZWVuIGdpdmVuLgorICAgICBGSVhNRTogVGhpcyBpcyBhIGNydWRlIGhhY2tzLiAgV2UgbmVlZCB0byBmaXggdGhhdC4gICovCisgIGlmICghY3VydmVuYW1lKQorICAgIHsKKyAgICAgIHNrLkUubW9kZWwgPSAoKGN0eC5mbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKQorICAgICAgICAgICAgICAgICAgICA/IE1QSV9FQ19UV0lTVEVERURXQVJEUworICAgICAgICAgICAgICAgICAgICA6IE1QSV9FQ19XRUlFUlNUUkFTUyk7CisgICAgICBzay5FLmRpYWxlY3QgPSAoKGN0eC5mbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKQorICAgICAgICAgICAgICAgICAgICAgID8gRUNDX0RJQUxFQ1RfRUQyNTUxOQorICAgICAgICAgICAgICAgICAgICAgIDogRUNDX0RJQUxFQ1RfU1RBTkRBUkQpOworICAgIH0KKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX2RlYnVnICgiZWNjX3NpZ24gICBpbmZvOiAlcy8lcyVzXG4iLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfbW9kZWwyc3RyIChzay5FLm1vZGVsKSwKKyAgICAgICAgICAgICAgICAgX2djcnlfZWNjX2RpYWxlY3Qyc3RyIChzay5FLmRpYWxlY3QpLAorICAgICAgICAgICAgICAgICAoY3R4LmZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpPyAiK0VkRFNBIjoiIik7CisgICAgICBpZiAoc2suRS5uYW1lKQorICAgICAgICBsb2dfZGVidWcgICgiZWNjX3NpZ24gICBuYW1lOiAlc1xuIiwgc2suRS5uYW1lKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY19zaWduICAgICAgcCIsIHNrLkUucCk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2Nfc2lnbiAgICAgIGEiLCBzay5FLmEpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX3NpZ24gICAgICBiIiwgc2suRS5iKTsKKyAgICAgIGxvZ19wcmludHBudCAoImVjY19zaWduICAgIGciLCAgICZzay5FLkcsIE5VTEwpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX3NpZ24gICAgICBuIiwgc2suRS5uKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY19zaWduICAgICAgcSIsIG1waV9xKTsKKyAgICAgIGlmICghZmlwc19tb2RlICgpKQorICAgICAgICBsb2dfcHJpbnRtcGkgKCJlY2Nfc2lnbiAgICAgIGQiLCBzay5kKTsKKyAgICB9CisgIGlmICghc2suRS5wIHx8ICFzay5FLmEgfHwgIXNrLkUuYiB8fCAhc2suRS5HLnggfHwgIXNrLkUubiB8fCAhc2suZCkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKworICBzaWdfciA9IG1waV9uZXcgKDApOworICBzaWdfcyA9IG1waV9uZXcgKDApOworICBpZiAoKGN0eC5mbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICB7CisgICAgICAvKiBFZERTQSByZXF1aXJlcyB0aGUgcHVibGljIGtleS4gICovCisgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9zaWduIChkYXRhLCAmc2ssIHNpZ19yLCBzaWdfcywgY3R4Lmhhc2hfYWxnbywgbXBpX3EpOworICAgICAgaWYgKCFyYykKKyAgICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3NpZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKHNpZy12YWwoZWRkc2EociVNKShzJU0pKSkiLCBzaWdfciwgc2lnX3MpOworICAgIH0KKyAgZWxzZSBpZiAoKGN0eC5mbGFncyAmIFBVQktFWV9GTEFHX0dPU1QpKQorICAgIHsKKyAgICAgIHJjID0gX2djcnlfZWNjX2dvc3Rfc2lnbiAoZGF0YSwgJnNrLCBzaWdfciwgc2lnX3MpOworICAgICAgaWYgKCFyYykKKyAgICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3NpZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKHNpZy12YWwoZ29zdChyJU0pKHMlTSkpKSIsIHNpZ19yLCBzaWdfcyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9lY2NfZWNkc2Ffc2lnbiAoZGF0YSwgJnNrLCBzaWdfciwgc2lnX3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmxhZ3MsIGN0eC5oYXNoX2FsZ28pOworICAgICAgaWYgKCFyYykKKyAgICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3NpZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKHNpZy12YWwoZWNkc2EociVNKShzJU0pKSkiLCBzaWdfciwgc2lnX3MpOworICAgIH0KKworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5FLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suRS5hKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLkUuYik7CisgIF9nY3J5X21waV9yZWxlYXNlIChtcGlfZyk7CisgIHBvaW50X2ZyZWUgKCZzay5FLkcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suRS5uKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKG1waV9xKTsKKyAgcG9pbnRfZnJlZSAoJnNrLlEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcyk7CisgIHhmcmVlIChjdXJ2ZW5hbWUpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZWNjX3NpZ24gICAgICA9PiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZWNjX3ZlcmlmeSAoZ2NyeV9zZXhwX3Qgc19zaWcsIGdjcnlfc2V4cF90IHNfZGF0YSwgZ2NyeV9zZXhwX3Qgc19rZXlwYXJtcykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBzdHJ1Y3QgcGtfZW5jb2RpbmdfY3R4IGN0eDsKKyAgZ2NyeV9zZXhwX3QgbDEgPSBOVUxMOworICBjaGFyICpjdXJ2ZW5hbWUgPSBOVUxMOworICBnY3J5X21waV90IG1waV9nID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfcSA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2lnX3IgPSBOVUxMOworICBnY3J5X21waV90IHNpZ19zID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkYXRhID0gTlVMTDsKKyAgRUNDX3B1YmxpY19rZXkgcGs7CisgIGludCBzaWdmbGFnczsKKworICBtZW1zZXQgKCZwaywgMCwgc2l6ZW9mIHBrKTsKKyAgX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCAoJmN0eCwgUFVCS0VZX09QX1ZFUklGWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2dldF9uYml0cyAoc19rZXlwYXJtcykpOworCisgIC8qIEV4dHJhY3QgdGhlIGRhdGEuICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfZGF0YV90b19tcGkgKHNfZGF0YSwgJmRhdGEsICZjdHgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX21waWR1bXAgKCJlY2NfdmVyaWZ5IGRhdGEiLCBkYXRhKTsKKworICAvKgorICAgKiBFeHRyYWN0IHRoZSBzaWduYXR1cmUgdmFsdWUuCisgICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfcHJlcGFyc2Vfc2lndmFsIChzX3NpZywgZWNjX25hbWVzLCAmbDEsICZzaWdmbGFncyk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAobDEsIE5VTEwsIChzaWdmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKT8gIi9ycyI6InJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWdfciwgJnNpZ19zLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWNjX3ZlcmlmeSAgc19yIiwgc2lnX3IpOworICAgICAgbG9nX21waWR1bXAgKCJlY2NfdmVyaWZ5ICBzX3MiLCBzaWdfcyk7CisgICAgfQorICBpZiAoKGN0eC5mbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSBeIChzaWdmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfQ09ORkxJQ1Q7IC8qIEluY29uc2lzdGVudCB1c2Ugb2YgZmxhZy9hbGdvbmFtZS4gICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworCisgIC8qCisgICAqIEV4dHJhY3QgdGhlIGtleS4KKyAgICovCisgIGlmICgoY3R4LmZsYWdzICYgUFVCS0VZX0ZMQUdfUEFSQU0pKQorICAgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChzX2tleXBhcm1zLCBOVUxMLCAiLXA/YT9iP2c/bj8vcSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZway5FLnAsICZway5FLmEsICZway5FLmIsICZtcGlfZywgJnBrLkUubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9xLCBOVUxMKTsKKyAgZWxzZQorICAgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChzX2tleXBhcm1zLCBOVUxMLCAiL3EiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXBpX3EsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKG1waV9nKQorICAgIHsKKyAgICAgIHBvaW50X2luaXQgKCZway5FLkcpOworICAgICAgcmMgPSBfZ2NyeV9lY2Nfb3MyZWMgKCZway5FLkcsIG1waV9nKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIC8qIEFkZCBtaXNzaW5nIHBhcmFtZXRlcnMgdXNpbmcgdGhlIG9wdGlvbmFsIGN1cnZlIHBhcmFtZXRlci4gICovCisgIHNleHBfcmVsZWFzZSAobDEpOworICBsMSA9IHNleHBfZmluZF90b2tlbiAoc19rZXlwYXJtcywgImN1cnZlIiwgNSk7CisgIGlmIChsMSkKKyAgICB7CisgICAgICBjdXJ2ZW5hbWUgPSBzZXhwX250aF9zdHJpbmcgKGwxLCAxKTsKKyAgICAgIGlmIChjdXJ2ZW5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IF9nY3J5X2VjY19maWxsX2luX2N1cnZlICgwLCBjdXJ2ZW5hbWUsICZway5FLCBOVUxMKTsKKyAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICB9CisgIC8qIEd1ZXNzIHJlcXVpcmVkIGZpZWxkcyBpZiBhIGN1cnZlIHBhcmFtZXRlciBoYXMgbm90IGJlZW4gZ2l2ZW4uCisgICAgIEZJWE1FOiBUaGlzIGlzIGEgY3J1ZGUgaGFja3MuICBXZSBuZWVkIHRvIGZpeCB0aGF0LiAgKi8KKyAgaWYgKCFjdXJ2ZW5hbWUpCisgICAgeworICAgICAgcGsuRS5tb2RlbCA9ICgoc2lnZmxhZ3MgJiBQVUJLRVlfRkxBR19FRERTQSkKKyAgICAgICAgICAgICAgICAgICAgPyBNUElfRUNfVFdJU1RFREVEV0FSRFMKKyAgICAgICAgICAgICAgICAgICAgOiBNUElfRUNfV0VJRVJTVFJBU1MpOworICAgICAgcGsuRS5kaWFsZWN0ID0gKChzaWdmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKQorICAgICAgICAgICAgICAgICAgICAgID8gRUNDX0RJQUxFQ1RfRUQyNTUxOQorICAgICAgICAgICAgICAgICAgICAgIDogRUNDX0RJQUxFQ1RfU1RBTkRBUkQpOworICAgIH0KKworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfZGVidWcgKCJlY2NfdmVyaWZ5IGluZm86ICVzLyVzJXNcbiIsCisgICAgICAgICAgICAgICAgIF9nY3J5X2VjY19tb2RlbDJzdHIgKHBrLkUubW9kZWwpLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfZGlhbGVjdDJzdHIgKHBrLkUuZGlhbGVjdCksCisgICAgICAgICAgICAgICAgIChzaWdmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKT8gIitFZERTQSI6IiIpOworICAgICAgaWYgKHBrLkUubmFtZSkKKyAgICAgICAgbG9nX2RlYnVnICAoImVjY192ZXJpZnkgbmFtZTogJXNcbiIsIHBrLkUubmFtZSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfdmVyaWZ5ICAgIHAiLCBway5FLnApOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX3ZlcmlmeSAgICBhIiwgcGsuRS5hKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY192ZXJpZnkgICAgYiIsIHBrLkUuYik7CisgICAgICBsb2dfcHJpbnRwbnQgKCJlY2NfdmVyaWZ5ICBnIiwgICAmcGsuRS5HLCBOVUxMKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY192ZXJpZnkgICAgbiIsIHBrLkUubik7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfdmVyaWZ5ICAgIHEiLCBtcGlfcSk7CisgICAgfQorICBpZiAoIXBrLkUucCB8fCAhcGsuRS5hIHx8ICFway5FLmIgfHwgIXBrLkUuRy54IHx8ICFway5FLm4gfHwgIW1waV9xKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9OT19PQko7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworCisgIC8qCisgICAqIFZlcmlmeSB0aGUgc2lnbmF0dXJlLgorICAgKi8KKyAgaWYgKChzaWdmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICB7CisgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV92ZXJpZnkgKGRhdGEsICZwaywgc2lnX3IsIHNpZ19zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaGFzaF9hbGdvLCBtcGlfcSk7CisgICAgfQorICBlbHNlIGlmICgoc2lnZmxhZ3MgJiBQVUJLRVlfRkxBR19HT1NUKSkKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmcGsuUSk7CisgICAgICByYyA9IF9nY3J5X2VjY19vczJlYyAoJnBrLlEsIG1waV9xKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKworICAgICAgcmMgPSBfZ2NyeV9lY2NfZ29zdF92ZXJpZnkgKGRhdGEsICZwaywgc2lnX3IsIHNpZ19zKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmcGsuUSk7CisgICAgICBpZiAocGsuRS5kaWFsZWN0ID09IEVDQ19ESUFMRUNUX0VEMjU1MTkpCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfZWNfdCBlYzsKKworICAgICAgICAgIC8qIEZpeG1lOiBGYWN0b3IgdGhlIGN1cnZlIGNvbnRleHQgc2V0dXAgb3V0IG9mIGVkZHNhX3ZlcmlmeQorICAgICAgICAgICAgIGFuZCBlY2RzYV92ZXJpZnkuIFNvIHRoYXQgd2UgZG9uJ3QgZG8gaXQgdHdpY2UuICAqLworICAgICAgICAgIGVjID0gX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3IChway5FLm1vZGVsLCBway5FLmRpYWxlY3QsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrLkUucCwgcGsuRS5hLCBway5FLmIpOworCisgICAgICAgICAgcmMgPSBfZ2NyeV9lY2NfZWRkc2FfZGVjb2RlcG9pbnQgKG1waV9xLCBlYywgJnBrLlEsIE5VTEwsIE5VTEwpOworICAgICAgICAgIF9nY3J5X21waV9lY19mcmVlIChlYyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjICgmcGsuUSwgbXBpX3EpOworICAgICAgICB9CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisKKyAgICAgIGlmIChtcGlfaXNfb3BhcXVlIChkYXRhKSkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IHZvaWQgKmFidWY7CisgICAgICAgICAgdW5zaWduZWQgaW50IGFiaXRzLCBxYml0czsKKyAgICAgICAgICBnY3J5X21waV90IGE7CisKKyAgICAgICAgICBxYml0cyA9IG1waV9nZXRfbmJpdHMgKHBrLkUubik7CisKKyAgICAgICAgICBhYnVmID0gbXBpX2dldF9vcGFxdWUgKGRhdGEsICZhYml0cyk7CisgICAgICAgICAgcmMgPSBfZ2NyeV9tcGlfc2NhbiAoJmEsIEdDUllNUElfRk1UX1VTRywgYWJ1ZiwgKGFiaXRzKzcpLzgsIE5VTEwpOworICAgICAgICAgIGlmICghcmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChhYml0cyA+IHFiaXRzKQorICAgICAgICAgICAgICAgIG1waV9yc2hpZnQgKGEsIGEsIGFiaXRzIC0gcWJpdHMpOworCisgICAgICAgICAgICAgIHJjID0gX2djcnlfZWNjX2VjZHNhX3ZlcmlmeSAoYSwgJnBrLCBzaWdfciwgc2lnX3MpOworICAgICAgICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBfZ2NyeV9lY2NfZWNkc2FfdmVyaWZ5IChkYXRhLCAmcGssIHNpZ19yLCBzaWdfcyk7CisgICAgfQorCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChway5FLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsuRS5hKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLkUuYik7CisgIF9nY3J5X21waV9yZWxlYXNlIChtcGlfZyk7CisgIHBvaW50X2ZyZWUgKCZway5FLkcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsuRS5uKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKG1waV9xKTsKKyAgcG9pbnRfZnJlZSAoJnBrLlEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcyk7CisgIHhmcmVlIChjdXJ2ZW5hbWUpOworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgX2djcnlfcGtfdXRpbF9mcmVlX2VuY29kaW5nX2N0eCAoJmN0eCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImVjY192ZXJpZnkgICAgPT4gJXNcbiIsIHJjP2dwZ19zdHJlcnJvciAocmMpOiJHb29kIik7CisgIHJldHVybiByYzsKK30KKworCisvKiBlY2RoIHJhdyBpcyBjbGFzc2ljIDItcm91bmQgREggcHJvdG9jb2wgcHVibGlzaGVkIGluIDE5NzYuCisgKgorICogT3ZlcnZpZXcgb2YgZWNjX2VuY3J5cHRfcmF3IGFuZCBlY2NfZGVjcnlwdF9yYXcuCisgKgorICogQXMgd2l0aCBhbnkgUEsgb3BlcmF0aW9uLCBlbmNyeXB0IHZlcnNpb24gdXNlcyBhIHB1YmxpYyBrZXkgYW5kCisgKiBkZWNyeXB0IC0tIHByaXZhdGUuCisgKgorICogU3ltYm9scyB1c2VkIGJlbG93OgorICogICAgIEcgLSBmaWVsZCBnZW5lcmF0b3IgcG9pbnQKKyAqICAgICBkIC0gcHJpdmF0ZSBsb25nLXRlcm0gc2NhbGFyCisgKiAgICBkRyAtIHB1YmxpYyBsb25nLXRlcm0ga2V5CisgKiAgICAgayAtIGVwaGVtZXJhbCBzY2FsYXIKKyAqICAgIGtHIC0gZXBoZW1lcmFsIHB1YmxpYyBrZXkKKyAqICAgZGtHIC0gc2hhcmVkIHNlY3JldAorICoKKyAqIGVjY19lbmNyeXB0X3JhdyBkZXNjcmlwdGlvbjoKKyAqICAgaW5wdXQ6CisgKiAgICAgZGF0YVswXSA6IHByaXZhdGUgc2NhbGFyIChrKQorICogICBvdXRwdXQ6IEEgbmV3IFMtZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXJhbWV0ZXJzOgorICogICAgIHMgOiBzaGFyZWQgcG9pbnQgKGtkRykKKyAqICAgICBlIDogZ2VuZXJhdGVkIGVwaGVtZXJhbCBwdWJsaWMga2V5IChrRykKKyAqCisgKiBlY2NfZGVjcnlwdF9yYXcgZGVzY3JpcHRpb246CisgKiAgIGlucHV0OgorICogICAgIGRhdGFbMF0gOiBhIHBvaW50IGtHIChlcGhlbWVyYWwgcHVibGljIGtleSkKKyAqICAgb3V0cHV0OgorICogICAgIHJlc3VsdFswXSA6IHNoYXJlZCBwb2ludCAoa2RHKQorICovCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitlY2NfZW5jcnlwdF9yYXcgKGdjcnlfc2V4cF90ICpyX2NpcGgsIGdjcnlfc2V4cF90IHNfZGF0YSwgZ2NyeV9zZXhwX3Qga2V5cGFybXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgY2hhciAqY3VydmVuYW1lID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfZyA9IE5VTEw7CisgIGdjcnlfbXBpX3QgbXBpX3EgPSBOVUxMOworICBnY3J5X21waV90IG1waV9zID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfZSA9IE5VTEw7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIEVDQ19wdWJsaWNfa2V5IHBrOworICBtcGlfZWNfdCBlYyA9IE5VTEw7CisKKyAgbWVtc2V0ICgmcGssIDAsIHNpemVvZiBwayk7CisgIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKCZjdHgsIFBVQktFWV9PUF9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2NfZ2V0X25iaXRzIChrZXlwYXJtcykpOworCisgIC8qCisgICAqIEV4dHJhY3QgdGhlIGRhdGEuCisgICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfZGF0YV90b19tcGkgKHNfZGF0YSwgJmRhdGEsICZjdHgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX21waWR1bXAgKCJlY2NfZW5jcnlwdCBkYXRhIiwgZGF0YSk7CisgIGlmIChtcGlfaXNfb3BhcXVlIChkYXRhKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0RBVEE7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworCisgIC8qCisgICAqIEV4dHJhY3QgdGhlIGtleS4KKyAgICovCisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgIi1wP2E/Yj9nP24/K3EiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBrLkUucCwgJnBrLkUuYSwgJnBrLkUuYiwgJm1waV9nLCAmcGsuRS5uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9xLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChtcGlfZykKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmcGsuRS5HKTsKKyAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjICgmcGsuRS5HLCBtcGlfZyk7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICAvKiBBZGQgbWlzc2luZyBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBvcHRpb25hbCBjdXJ2ZSBwYXJhbWV0ZXIuICAqLworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGtleXBhcm1zLCAiY3VydmUiLCA1KTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgIGN1cnZlbmFtZSA9IHNleHBfbnRoX3N0cmluZyAobDEsIDEpOworICAgICAgaWYgKGN1cnZlbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUgKDAsIGN1cnZlbmFtZSwgJnBrLkUsIE5VTEwpOworICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorICAgIH0KKyAgLyogR3Vlc3MgcmVxdWlyZWQgZmllbGRzIGlmIGEgY3VydmUgcGFyYW1ldGVyIGhhcyBub3QgYmVlbiBnaXZlbi4gICovCisgIGlmICghY3VydmVuYW1lKQorICAgIHsKKyAgICAgIHBrLkUubW9kZWwgPSBNUElfRUNfV0VJRVJTVFJBU1M7CisgICAgICBway5FLmRpYWxlY3QgPSBFQ0NfRElBTEVDVF9TVEFOREFSRDsKKyAgICB9CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX2RlYnVnICgiZWNjX2VuY3J5cHQgaW5mbzogJXMvJXNcbiIsCisgICAgICAgICAgICAgICAgIF9nY3J5X2VjY19tb2RlbDJzdHIgKHBrLkUubW9kZWwpLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfZGlhbGVjdDJzdHIgKHBrLkUuZGlhbGVjdCkpOworICAgICAgaWYgKHBrLkUubmFtZSkKKyAgICAgICAgbG9nX2RlYnVnICAoImVjY19lbmNyeXB0IG5hbWU6ICVzXG4iLCBway5FLm5hbWUpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX2VuY3J5cHQgICAgcCIsIHBrLkUucCk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfZW5jcnlwdCAgICBhIiwgcGsuRS5hKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY19lbmNyeXB0ICAgIGIiLCBway5FLmIpOworICAgICAgbG9nX3ByaW50cG50ICgiZWNjX2VuY3J5cHQgIGciLCAgICZway5FLkcsIE5VTEwpOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX2VuY3J5cHQgICAgbiIsIHBrLkUubik7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfZW5jcnlwdCAgICBxIiwgbXBpX3EpOworICAgIH0KKyAgaWYgKCFway5FLnAgfHwgIXBrLkUuYSB8fCAhcGsuRS5iIHx8ICFway5FLkcueCB8fCAhcGsuRS5uIHx8ICFtcGlfcSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogQ29udmVydCB0aGUgcHVibGljIGtleS4gICovCisgIGlmIChtcGlfcSkKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmcGsuUSk7CisgICAgICByYyA9IF9nY3J5X2VjY19vczJlYyAoJnBrLlEsIG1waV9xKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogQ29tcHV0ZSB0aGUgZW5jcnlwdGVkIHZhbHVlLiAgKi8KKyAgZWMgPSBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKHBrLkUubW9kZWwsIHBrLkUuZGlhbGVjdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrLkUucCwgcGsuRS5hLCBway5FLmIpOworCisgIC8qIFRoZSBmb2xsb3dpbmcgaXMgZmFsc2U6IGFzc2VydCggbXBpX2NtcF91aSggUi54LCAxICk9PTAgKTssIHNvICovCisgIHsKKyAgICBtcGlfcG9pbnRfc3RydWN0IFI7ICAvKiBSZXN1bHQgdGhhdCB3ZSByZXR1cm4uICAqLworICAgIGdjcnlfbXBpX3QgeCwgeTsKKworICAgIHggPSBtcGlfbmV3ICgwKTsKKyAgICB5ID0gbXBpX25ldyAoMCk7CisKKyAgICBwb2ludF9pbml0ICgmUik7CisKKyAgICAvKiBSID0ga1EgIDw9PiAgUiA9IGtkRyAgKi8KKyAgICBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50ICgmUiwgZGF0YSwgJnBrLlEsIGVjKTsKKworICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgJlIsIGVjKSkKKyAgICAgIGxvZ19mYXRhbCAoImVjZGg6IEZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzIGZvciBrZEdcbiIpOworICAgIG1waV9zID0gX2djcnlfZWNjX2VjMm9zICh4LCB5LCBway5FLnApOworCisgICAgLyogUiA9IGtHICovCisgICAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJlIsIGRhdGEsICZway5FLkcsIGVjKTsKKworICAgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgJlIsIGVjKSkKKyAgICAgIGxvZ19mYXRhbCAoImVjZGg6IEZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzIGZvciBrR1xuIik7CisgICAgbXBpX2UgPSBfZ2NyeV9lY2NfZWMyb3MgKHgsIHksIHBrLkUucCk7CisKKyAgICBtcGlfZnJlZSAoeCk7CisgICAgbXBpX2ZyZWUgKHkpOworCisgICAgcG9pbnRfZnJlZSAoJlIpOworICB9CisKKyAgcmMgPSBzZXhwX2J1aWxkIChyX2NpcGgsIE5VTEwsICIoZW5jLXZhbChlY2RoKHMlbSkoZSVtKSkpIiwgbXBpX3MsIG1waV9lKTsKKworIGxlYXZlOgorICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsuRS5wKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLkUuYSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChway5FLmIpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAobXBpX2cpOworICBwb2ludF9mcmVlICgmcGsuRS5HKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLkUubik7CisgIF9nY3J5X21waV9yZWxlYXNlIChtcGlfcSk7CisgIHBvaW50X2ZyZWUgKCZway5RKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAobXBpX3MpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAobXBpX2UpOworICB4ZnJlZSAoY3VydmVuYW1lKTsKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGVjKTsKKyAgX2djcnlfcGtfdXRpbF9mcmVlX2VuY29kaW5nX2N0eCAoJmN0eCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImVjY19lbmNyeXB0ICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCisvKiAgaW5wdXQ6CisgKiAgICAgZGF0YVswXSA6IGEgcG9pbnQga0cgKGVwaGVtZXJhbCBwdWJsaWMga2V5KQorICogICBvdXRwdXQ6CisgKiAgICAgcmVzYWRkclswXSA6IHNoYXJlZCBwb2ludCBrZEcKKyAqCisgKiAgc2VlIGVjY19lbmNyeXB0X3JhdyBmb3IgZGV0YWlscy4KKyAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZWNjX2RlY3J5cHRfcmF3IChnY3J5X3NleHBfdCAqcl9wbGFpbiwgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBrZXlwYXJtcykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X3NleHBfdCBsMSA9IE5VTEw7CisgIGdjcnlfbXBpX3QgZGF0YV9lID0gTlVMTDsKKyAgRUNDX3NlY3JldF9rZXkgc2s7CisgIGdjcnlfbXBpX3QgbXBpX2cgPSBOVUxMOworICBjaGFyICpjdXJ2ZW5hbWUgPSBOVUxMOworICBtcGlfZWNfdCBlYyA9IE5VTEw7CisgIG1waV9wb2ludF9zdHJ1Y3Qga0c7CisgIG1waV9wb2ludF9zdHJ1Y3QgUjsKKyAgZ2NyeV9tcGlfdCByID0gTlVMTDsKKworICBtZW1zZXQgKCZzaywgMCwgc2l6ZW9mIHNrKTsKKyAgcG9pbnRfaW5pdCAoJmtHKTsKKyAgcG9pbnRfaW5pdCAoJlIpOworCisgIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKCZjdHgsIFBVQktFWV9PUF9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2NfZ2V0X25iaXRzIChrZXlwYXJtcykpOworCisgIC8qCisgICAqIEV4dHJhY3QgdGhlIGRhdGEuCisgICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfcHJlcGFyc2VfZW5jdmFsIChzX2RhdGEsIGVjY19uYW1lcywgJmwxLCAmY3R4KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChsMSwgTlVMTCwgImUiLCAmZGF0YV9lLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludG1waSAoImVjY19kZWNyeXB0ICBkX2UiLCBkYXRhX2UpOworICBpZiAobXBpX2lzX29wYXF1ZSAoZGF0YV9lKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0RBVEE7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKgorICAgKiBFeHRyYWN0IHRoZSBrZXkuCisgICAqLworICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICItcD9hP2I/Zz9uPytkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5FLnAsICZzay5FLmEsICZzay5FLmIsICZtcGlfZywgJnNrLkUubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5kLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChtcGlfZykKKyAgICB7CisgICAgICBwb2ludF9pbml0ICgmc2suRS5HKTsKKyAgICAgIHJjID0gX2djcnlfZWNjX29zMmVjICgmc2suRS5HLCBtcGlfZyk7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICAvKiBBZGQgbWlzc2luZyBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBvcHRpb25hbCBjdXJ2ZSBwYXJhbWV0ZXIuICAqLworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGtleXBhcm1zLCAiY3VydmUiLCA1KTsKKyAgaWYgKGwxKQorICAgIHsKKyAgICAgIGN1cnZlbmFtZSA9IHNleHBfbnRoX3N0cmluZyAobDEsIDEpOworICAgICAgaWYgKGN1cnZlbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gX2djcnlfZWNjX2ZpbGxfaW5fY3VydmUgKDAsIGN1cnZlbmFtZSwgJnNrLkUsIE5VTEwpOworICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorICAgIH0KKyAgLyogR3Vlc3MgcmVxdWlyZWQgZmllbGRzIGlmIGEgY3VydmUgcGFyYW1ldGVyIGhhcyBub3QgYmVlbiBnaXZlbi4gICovCisgIGlmICghY3VydmVuYW1lKQorICAgIHsKKyAgICAgIHNrLkUubW9kZWwgPSBNUElfRUNfV0VJRVJTVFJBU1M7CisgICAgICBzay5FLmRpYWxlY3QgPSBFQ0NfRElBTEVDVF9TVEFOREFSRDsKKyAgICB9CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIGxvZ19kZWJ1ZyAoImVjY19kZWNyeXB0IGluZm86ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgICBfZ2NyeV9lY2NfbW9kZWwyc3RyIChzay5FLm1vZGVsKSwKKyAgICAgICAgICAgICAgICAgX2djcnlfZWNjX2RpYWxlY3Qyc3RyIChzay5FLmRpYWxlY3QpKTsKKyAgICAgIGlmIChzay5FLm5hbWUpCisgICAgICAgIGxvZ19kZWJ1ZyAgKCJlY2NfZGVjcnlwdCBuYW1lOiAlc1xuIiwgc2suRS5uYW1lKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY19kZWNyeXB0ICAgIHAiLCBzay5FLnApOworICAgICAgbG9nX3ByaW50bXBpICgiZWNjX2RlY3J5cHQgICAgYSIsIHNrLkUuYSk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlY2NfZGVjcnlwdCAgICBiIiwgc2suRS5iKTsKKyAgICAgIGxvZ19wcmludHBudCAoImVjY19kZWNyeXB0ICBnIiwgICAmc2suRS5HLCBOVUxMKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVjY19kZWNyeXB0ICAgIG4iLCBzay5FLm4pOworICAgICAgaWYgKCFmaXBzX21vZGUgKCkpCisgICAgICAgIGxvZ19wcmludG1waSAoImVjY19kZWNyeXB0ICAgIGQiLCBzay5kKTsKKyAgICB9CisgIGlmICghc2suRS5wIHx8ICFzay5FLmEgfHwgIXNrLkUuYiB8fCAhc2suRS5HLnggfHwgIXNrLkUubiB8fCAhc2suZCkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKworICAvKgorICAgKiBDb21wdXRlIHRoZSBwbGFpbnRleHQuCisgICAqLworICByYyA9IF9nY3J5X2VjY19vczJlYyAoJmtHLCBkYXRhX2UpOworICBpZiAocmMpCisgICAgeworICAgICAgcG9pbnRfZnJlZSAoJmtHKTsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgZWMgPSBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKHNrLkUubW9kZWwsIHNrLkUuZGlhbGVjdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrLkUucCwgc2suRS5hLCBzay5FLmIpOworCisgIC8qIFIgPSBka0cgKi8KKyAgX2djcnlfbXBpX2VjX211bF9wb2ludCAoJlIsIHNrLmQsICZrRywgZWMpOworCisgIC8qIFRoZSBmb2xsb3dpbmcgaXMgZmFsc2U6IGFzc2VydCggbXBpX2NtcF91aSggUi54LCAxICk9PTAgKTssIHNvOiAgKi8KKyAgeworICAgIGdjcnlfbXBpX3QgeCwgeTsKKworICAgIHggPSBtcGlfbmV3ICgwKTsKKyAgICB5ID0gbXBpX25ldyAoMCk7CisKKyAgICBpZiAoX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksICZSLCBlYykpCisgICAgICBsb2dfZmF0YWwgKCJlY2RoOiBGYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisKKyAgICByID0gX2djcnlfZWNjX2VjMm9zICh4LCB5LCBzay5FLnApOworICAgIGlmICghcikKKyAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgZWxzZQorICAgICAgcmMgPSAwOworICAgIG1waV9mcmVlICh4KTsKKyAgICBtcGlfZnJlZSAoeSk7CisgIH0KKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50bXBpICgiZWNjX2RlY3J5cHQgIHJlcyIsIHIpOworCisgIGlmICghcmMpCisgICAgcmMgPSBzZXhwX2J1aWxkIChyX3BsYWluLCBOVUxMLCAiKHZhbHVlICVtKSIsIHIpOworCisgbGVhdmU6CisgIHBvaW50X2ZyZWUgKCZSKTsKKyAgcG9pbnRfZnJlZSAoJmtHKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHIpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suRS5wKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLkUuYSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5FLmIpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAobXBpX2cpOworICBwb2ludF9mcmVlICgmc2suRS5HKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLkUubik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5kKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGFfZSk7CisgIHhmcmVlIChjdXJ2ZW5hbWUpOworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgX2djcnlfbXBpX2VjX2ZyZWUgKGVjKTsKKyAgX2djcnlfcGtfdXRpbF9mcmVlX2VuY29kaW5nX2N0eCAoJmN0eCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoImVjY19kZWNyeXB0ICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUga2V5IGRlc2NyaWJlZCBieSBQQVJNUy4gIE9uIGVycm9yCisgKiAwIGlzIHJldHVybmVkLiAgVGhlIGZvcm1hdCBvZiBQQVJNUyBzdGFydHMgd2l0aCB0aGUgYWxnb3JpdGhtIG5hbWU7CisgKiBmb3IgZXhhbXBsZToKKyAqCisgKiAgIChlY2MKKyAqICAgICAocCA8bXBpPikKKyAqICAgICAoYSA8bXBpPikKKyAqICAgICAoYiA8bXBpPikKKyAqICAgICAoZyA8bXBpPikKKyAqICAgICAobiA8bXBpPikKKyAqICAgICAocSA8bXBpPikpCisgKgorICogTW9yZSBwYXJhbWV0ZXJzIG1heSBiZSBnaXZlbiBjdXJyZW50bHkgUCBpcyBuZWVkZWQuICBGSVhNRTogV2UKKyAqIG5lZWQgYWxsb3cgZm9yIGEgImN1cnZlIiBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2VjY19nZXRfbmJpdHMgKGdjcnlfc2V4cF90IHBhcm1zKQoreworICBnY3J5X3NleHBfdCBsMTsKKyAgZ2NyeV9tcGlfdCBwOworICB1bnNpZ25lZCBpbnQgbmJpdHMgPSAwOworICBjaGFyICpjdXJ2ZTsKKworICBsMSA9IHNleHBfZmluZF90b2tlbiAocGFybXMsICJwIiwgMSk7CisgIGlmICghbDEpCisgICAgeyAvKiBQYXJhbWV0ZXIgUCBub3QgZm91bmQgLSBjaGVjayB3aGV0aGVyIHdlIGhhdmUgImN1cnZlIi4gICovCisgICAgICBsMSA9IHNleHBfZmluZF90b2tlbiAocGFybXMsICJjdXJ2ZSIsIDUpOworICAgICAgaWYgKCFsMSkKKyAgICAgICAgcmV0dXJuIDA7IC8qIE5laXRoZXIgUCBub3IgQ1VSVkUgZm91bmQuICAqLworCisgICAgICBjdXJ2ZSA9IHNleHBfbnRoX3N0cmluZyAobDEsIDEpOworICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgICBpZiAoIWN1cnZlKQorICAgICAgICByZXR1cm4gMDsgIC8qIE5vIGN1cnZlIG5hbWUgZ2l2ZW4gKG9yIG91dCBvZiBjb3JlKS4gKi8KKworICAgICAgaWYgKF9nY3J5X2VjY19maWxsX2luX2N1cnZlICgwLCBjdXJ2ZSwgTlVMTCwgJm5iaXRzKSkKKyAgICAgICAgbmJpdHMgPSAwOworICAgICAgeGZyZWUgKGN1cnZlKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwID0gc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKHApCisgICAgICAgIHsKKyAgICAgICAgICBuYml0cyA9IG1waV9nZXRfbmJpdHMgKHApOworICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChwKTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIG5iaXRzOworfQorCisKKy8qIFNlZSByc2EuYyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorY29tcHV0ZV9rZXlncmlwIChnY3J5X21kX2hkX3QgbWQsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworI2RlZmluZSBOX0NPTVBPTkVOVFMgNgorICBzdGF0aWMgY29uc3QgY2hhciBuYW1lc1tOX0NPTVBPTkVOVFMrMV0gPSAicGFiZ25xIjsKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfc2V4cF90IGwxOworICBnY3J5X21waV90IHZhbHVlc1tOX0NPTVBPTkVOVFNdOworICBpbnQgaWR4OworICBjaGFyICpjdXJ2ZW5hbWUgPSBOVUxMOworICBpbnQgZmxhZ3MgPSAwOworICBlbnVtIGdjcnlfbXBpX2VjX21vZGVscyBtb2RlbCA9IDA7CisgIGVudW0gZWNjX2RpYWxlY3RzIGRpYWxlY3QgPSAwOworCisgIC8qIENsZWFyIHRoZSB2YWx1ZXMgZmlyc3QuICAqLworICBmb3IgKGlkeD0wOyBpZHggPCBOX0NPTVBPTkVOVFM7IGlkeCsrKQorICAgIHZhbHVlc1tpZHhdID0gTlVMTDsKKworCisgIC8qIExvb2sgZm9yIGZsYWdzLiAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoa2V5cGFybXMsICJmbGFncyIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgcmMgPSBfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsMSwgJmZsYWdzLCBOVUxMKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUgcGFyYW1ldGVycy4gICovCisgIGlmICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19QQVJBTSkpCisgICAgeworICAgICAgaWYgKChmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICAgICAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAicD9hP2I/Zz9uPy9xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZXNbMF0sICZ2YWx1ZXNbMV0sICZ2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVzWzNdLCAmdmFsdWVzWzRdLCAmdmFsdWVzWzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgInA/YT9iP2c/bj9xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZXNbMF0sICZ2YWx1ZXNbMV0sICZ2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVzWzNdLCAmdmFsdWVzWzRdLCAmdmFsdWVzWzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKChmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKSkKKyAgICAgICAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAiL3EiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlc1s1XSwgTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgInEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlc1s1XSwgTlVMTCk7CisgICAgfQorICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBDaGVjayB3aGV0aGVyIGEgY3VydmUgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBhbmQgdXNlIHRoYXQgdG8gZmlsbAorICAgICBpbiBtaXNzaW5nIHZhbHVlcy4gICovCisgIHNleHBfcmVsZWFzZSAobDEpOworICBsMSA9IHNleHBfZmluZF90b2tlbiAoa2V5cGFybXMsICJjdXJ2ZSIsIDUpOworICBpZiAobDEpCisgICAgeworICAgICAgY3VydmVuYW1lID0gc2V4cF9udGhfc3RyaW5nIChsMSwgMSk7CisgICAgICBpZiAoY3VydmVuYW1lKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBfZ2NyeV9lY2NfdXBkYXRlX2N1cnZlX3BhcmFtIChjdXJ2ZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kZWwsICZkaWFsZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlc1swXSwgJnZhbHVlc1sxXSwgJnZhbHVlc1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZXNbM10sICZ2YWx1ZXNbNF0pOworICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogR3Vlc3MgcmVxdWlyZWQgZmllbGRzIGlmIGEgY3VydmUgcGFyYW1ldGVyIGhhcyBub3QgYmVlbiBnaXZlbi4KKyAgICAgRklYTUU6IFRoaXMgaXMgYSBjcnVkZSBoYWNrcy4gIFdlIG5lZWQgdG8gZml4IHRoYXQuICAqLworICBpZiAoIWN1cnZlbmFtZSkKKyAgICB7CisgICAgICBtb2RlbCA9ICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19FRERTQSkKKyAgICAgICAgICAgICAgID8gTVBJX0VDX1RXSVNURURFRFdBUkRTCisgICAgICAgICAgICAgICA6IE1QSV9FQ19XRUlFUlNUUkFTUyk7CisgICAgICBkaWFsZWN0ID0gKChmbGFncyAmIFBVQktFWV9GTEFHX0VERFNBKQorICAgICAgICAgICAgICAgICA/IEVDQ19ESUFMRUNUX0VEMjU1MTkKKyAgICAgICAgICAgICAgICAgOiBFQ0NfRElBTEVDVF9TVEFOREFSRCk7CisgICAgfQorCisgIC8qIENoZWNrIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIGtub3duIGFuZCBub3JtYWxpemUgYWxsIE1QSXMgKHRoYXQKKyAgICAgc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBidXQgd2UgdXNlIGFuIGludGVybmFsIGZ1bmN0aW9uIGxhdGVyIGFuZAorICAgICB0aHVzIHdlIGJldHRlciBtYWtlIDEwMCUgc3VyZSB0aGF0IHRoZXkgYXJlIG5vcm1hbGl6ZWQpLiAqLworICBmb3IgKGlkeCA9IDA7IGlkeCA8IE5fQ09NUE9ORU5UUzsgaWR4KyspCisgICAgaWYgKCF2YWx1ZXNbaWR4XSkKKyAgICAgIHsKKyAgICAgICAgcmMgPSBHUEdfRVJSX05PX09CSjsKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfZ2NyeV9tcGlfbm9ybWFsaXplICh2YWx1ZXNbaWR4XSk7CisKKyAgLyogVW5jb21wcmVzcyB0aGUgcHVibGljIGtleSB3aXRoIHRoZSBleGNlcHRpb24gb2YgRWREU0Egd2hlcmUKKyAgICAgY29tcHJlc3Npb24gaXMgdGhlIGRlZmF1bHQgYW5kIHdlIHRodXMgY29tcHV0ZSB0aGUga2V5Z3JpcCB1c2luZworICAgICB0aGUgY29tcHJlc3NlZCB2ZXJzaW9uLiAgQmVjYXVzZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBub24tZWRkc2EKKyAgICAgY29tcHJlc3Npb24sIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgdG8gY29tcHJlc3MKKyAgICAgRWREU0EuICAqLworICBpZiAoKGZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKQorICAgIHsKKyAgICAgIGlmIChkaWFsZWN0ID09IEVDQ19ESUFMRUNUX0VEMjU1MTkpCisgICAgICAgIHJjID0gX2djcnlfZWNjX2VkZHNhX2Vuc3VyZV9jb21wYWN0ICh2YWx1ZXNbNV0sIDI1Nik7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEhhc2ggdGhlbSBhbGwuICAqLworICBmb3IgKGlkeCA9IDA7IGlkeCA8IE5fQ09NUE9ORU5UUzsgaWR4KyspCisgICAgeworICAgICAgY2hhciBidWZbMzBdOworCisgICAgICBpZiAobXBpX2lzX29wYXF1ZSAodmFsdWVzW2lkeF0pKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmF3OworICAgICAgICAgIHVuc2lnbmVkIGludCBuOworCisgICAgICAgICAgcmF3ID0gbXBpX2dldF9vcGFxdWUgKHZhbHVlc1tpZHhdLCAmbik7CisgICAgICAgICAgbiA9IChuICsgNykvODsKKyAgICAgICAgICBzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiKDE6JWMldToiLCBuYW1lc1tpZHhdLCBuKTsKKyAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsIGJ1Ziwgc3RybGVuIChidWYpKTsKKyAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsIHJhdywgbik7CisgICAgICAgICAgX2djcnlfbWRfd3JpdGUgKG1kLCAiKSIsIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyYXdtcGk7CisgICAgICAgICAgdW5zaWduZWQgaW50IHJhd21waWxlbjsKKworICAgICAgICAgIHJhd21waSA9IF9nY3J5X21waV9nZXRfYnVmZmVyICh2YWx1ZXNbaWR4XSwgMCwgJnJhd21waWxlbiwgTlVMTCk7CisgICAgICAgICAgaWYgKCFyYXdtcGkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIigxOiVjJXU6IiwgbmFtZXNbaWR4XSwgcmF3bXBpbGVuKTsKKyAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsIGJ1Ziwgc3RybGVuIChidWYpKTsKKyAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsIHJhd21waSwgcmF3bXBpbGVuKTsKKyAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsICIpIiwgMSk7CisgICAgICAgICAgeGZyZWUgKHJhd21waSk7CisgICAgICAgIH0KKyAgICB9CisKKyBsZWF2ZToKKyAgeGZyZWUgKGN1cnZlbmFtZSk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBmb3IgKGlkeCA9IDA7IGlkeCA8IE5fQ09NUE9ORU5UUzsgaWR4KyspCisgICAgX2djcnlfbXBpX3JlbGVhc2UgKHZhbHVlc1tpZHhdKTsKKworICByZXR1cm4gcmM7CisjdW5kZWYgTl9DT01QT05FTlRTCit9CisKKworDAorLyoKKyAgIExvdy1sZXZlbCBBUEkgaGVscGVyIGZ1bmN0aW9ucy4KKyAqLworCisvKiBUaGlzIGlzIHRoZSB3b3JrZXIgZnVuY3Rpb24gZm9yIGdjcnlfcHVia2V5X2dldF9zZXhwIGZvciBFQ0MKKyAgIGFsZ29yaXRobXMuICBOb3RlIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBzdG9yZWQgTlVMTCBhdAorICAgUl9TRVhQLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9wa19lY2NfZ2V0X3NleHAgKGdjcnlfc2V4cF90ICpyX3NleHAsIGludCBtb2RlLCBtcGlfZWNfdCBlYykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbXBpX3QgbXBpX0cgPSBOVUxMOworICBnY3J5X21waV90IG1waV9RID0gTlVMTDsKKworICBpZiAoIWVjLT5wIHx8ICFlYy0+YSB8fCAhZWMtPmIgfHwgIWVjLT5HIHx8ICFlYy0+bikKKyAgICByZXR1cm4gR1BHX0VSUl9CQURfQ1JZUFRfQ1RYOworCisgIGlmIChtb2RlID09IEdDUllfUEtfR0VUX1NFQ0tFWSAmJiAhZWMtPmQpCisgICAgcmV0dXJuIEdQR19FUlJfTk9fU0VDS0VZOworCisgIC8qIENvbXB1dGUgdGhlIHB1YmxpYyBwb2ludCBpZiBpdCBpcyBtaXNzaW5nLiAgKi8KKyAgaWYgKCFlYy0+USAmJiBlYy0+ZCkKKyAgICBlYy0+USA9IF9nY3J5X2VjY19jb21wdXRlX3B1YmxpYyAoTlVMTCwgZWMsIE5VTEwsIE5VTEwpOworCisgIC8qIEVuY29kZSBHIGFuZCBRLiAgKi8KKyAgbXBpX0cgPSBfZ2NyeV9tcGlfZWNfZWMyb3MgKGVjLT5HLCBlYyk7CisgIGlmICghbXBpX0cpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0JST0tFTl9QVUJLRVk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgaWYgKCFlYy0+USkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfQkFEX0NSWVBUX0NUWDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGlmIChlYy0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmVuY3BrOworICAgICAgdW5zaWduZWQgaW50IGVuY3BrbGVuOworCisgICAgICByYyA9IF9nY3J5X2VjY19lZGRzYV9lbmNvZGVwb2ludCAoZWMtPlEsIGVjLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNwaywgJmVuY3BrbGVuKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgIG1waV9RID0gbXBpX3NldF9vcGFxdWUgKE5VTEwsIGVuY3BrLCBlbmNwa2xlbio4KTsKKyAgICAgIGVuY3BrID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcGlfUSA9IF9nY3J5X21waV9lY19lYzJvcyAoZWMtPlEsIGVjKTsKKyAgICB9CisgIGlmICghbXBpX1EpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0JST0tFTl9QVUJLRVk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBGaXhtZTogV2Ugc2hvdWxkIHJldHVybiBhIGN1cnZlIG5hbWUgaW5zdGVhZCBvZiB0aGUgcGFyYW1ldGVycyBpZgorICAgICBpZiBrbm93IHRoYXQgdGhleSBtYXRjaCBhIGN1cnZlLiAgKi8KKworICBpZiAoZWMtPmQgJiYgKCFtb2RlIHx8IG1vZGUgPT0gR0NSWV9QS19HRVRfU0VDS0VZKSkKKyAgICB7CisgICAgICAvKiBMZXQncyByZXR1cm4gYSBwcml2YXRlIGtleS4gKi8KKyAgICAgIHJjID0gc2V4cF9idWlsZCAocl9zZXhwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiKHByaXZhdGUta2V5KGVjYyhwJW0pKGElbSkoYiVtKShnJW0pKG4lbSkocSVtKShkJW0pKSkiLAorICAgICAgICAgICAgICAgICAgICAgICBlYy0+cCwgZWMtPmEsIGVjLT5iLCBtcGlfRywgZWMtPm4sIG1waV9RLCBlYy0+ZCk7CisgICAgfQorICBlbHNlIGlmIChlYy0+USkKKyAgICB7CisgICAgICAvKiBMZXQncyByZXR1cm4gYSBwdWJsaWMga2V5LiAgKi8KKyAgICAgIHJjID0gc2V4cF9idWlsZCAocl9zZXhwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiKHB1YmxpYy1rZXkoZWNjKHAlbSkoYSVtKShiJW0pKGclbSkobiVtKShxJW0pKSkiLAorICAgICAgICAgICAgICAgICAgICAgICBlYy0+cCwgZWMtPmEsIGVjLT5iLCBtcGlfRywgZWMtPm4sIG1waV9RKTsKKyAgICB9CisgIGVsc2UKKyAgICByYyA9IEdQR19FUlJfQkFEX0NSWVBUX0NUWDsKKworIGxlYXZlOgorICBtcGlfZnJlZSAobXBpX1EpOworICBtcGlfZnJlZSAobXBpX0cpOworICByZXR1cm4gcmM7Cit9CisKKworDAorLyoKKyAgICAgU2VsZi10ZXN0IHNlY3Rpb24uCisgKi8KKworCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3NlbGZ0ZXN0c19lY2RzYSAoc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIGNvbnN0IGNoYXIgKmVycnR4dDsKKworICB3aGF0ID0gImxvdy1sZXZlbCI7CisgIGVycnR4dCA9IE5VTEw7IC8qc2VsZnRlc3QgKCk7Ki8KKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworICAvKiBGSVhNRTogIG5lZWQgbW9yZSB0ZXN0cy4gICovCisKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KKworIGZhaWxlZDoKKyAgaWYgKHJlcG9ydCkKKyAgICByZXBvcnQgKCJwdWJrZXkiLCBHQ1JZX1BLX0VDQywgd2hhdCwgZXJydHh0KTsKKyAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworfQorCisKKy8qIFJ1biBhIGZ1bGwgc2VsZi10ZXN0IGZvciBBTEdPIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorcnVuX3NlbGZ0ZXN0cyAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgICh2b2lkKWV4dGVuZGVkOworCisgIGlmIChhbGdvICE9IEdDUllfUEtfRUNDKQorICAgIHJldHVybiBHUEdfRVJSX1BVQktFWV9BTEdPOworCisgIHJldHVybiBzZWxmdGVzdHNfZWNkc2EgKHJlcG9ydCk7Cit9CisKKworCisMCitnY3J5X3BrX3NwZWNfdCBfZ2NyeV9wdWJrZXlfc3BlY19lY2MgPQorICB7CisgICAgR0NSWV9QS19FQ0MsIHsgMCwgMCB9LAorICAgIChHQ1JZX1BLX1VTQUdFX1NJR04gfCBHQ1JZX1BLX1VTQUdFX0VOQ1IpLAorICAgICJFQ0MiLCBlY2NfbmFtZXMsCisgICAgInBhYmducSIsICJwYWJnbnFkIiwgInN3IiwgInJzIiwgInBhYmducSIsCisgICAgZWNjX2dlbmVyYXRlLAorICAgIGVjY19jaGVja19zZWNyZXRfa2V5LAorICAgIGVjY19lbmNyeXB0X3JhdywKKyAgICBlY2NfZGVjcnlwdF9yYXcsCisgICAgZWNjX3NpZ24sCisgICAgZWNjX3ZlcmlmeSwKKyAgICBlY2NfZ2V0X25iaXRzLAorICAgIHJ1bl9zZWxmdGVzdHMsCisgICAgY29tcHV0ZV9rZXlncmlwLAorICAgIF9nY3J5X2VjY19nZXRfY3VydmUsCisgICAgX2djcnlfZWNjX2dldF9wYXJhbV9zZXhwCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvZWxnYW1hbC5jIGIvY2lwaGVyL2VsZ2FtYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFhOWJjCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2VsZ2FtYWwuYwpAQCAtMCwwICsxLDEwOTcgQEAKKy8qIEVsZ2FtYWwuYyAgLSAgRWxnYW1hbCBQdWJsaWMgS2V5IGVuY3J5cHRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKKyAqICAgICAgICAgICAgICAgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxnb3JpdGhtLCBzZWU6CisgKiAgIEJydWNlIFNjaG5laWVyOiBBcHBsaWVkIENyeXB0b2dyYXBoeS4gSm9obiBXaWxleSAmIFNvbnMsIDE5OTYuCisgKiAgIElTQk4gMC00NzEtMTE3MDktOS4gUGFnZXMgNDc2IGZmLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1waS5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgInB1YmtleS1pbnRlcm5hbC5oIgorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdjcnlfbXBpX3QgcDsJICAgIC8qIHByaW1lICovCisgIGdjcnlfbXBpX3QgZzsJICAgIC8qIGdyb3VwIGdlbmVyYXRvciAqLworICBnY3J5X21waV90IHk7CSAgICAvKiBnXnggbW9kIHAgKi8KK30gRUxHX3B1YmxpY19rZXk7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tcGlfdCBwOwkgICAgLyogcHJpbWUgKi8KKyAgZ2NyeV9tcGlfdCBnOwkgICAgLyogZ3JvdXAgZ2VuZXJhdG9yICovCisgIGdjcnlfbXBpX3QgeTsJICAgIC8qIGdeeCBtb2QgcCAqLworICBnY3J5X21waV90IHg7CSAgICAvKiBzZWNyZXQgZXhwb25lbnQgKi8KK30gRUxHX3NlY3JldF9rZXk7CisKKworc3RhdGljIGNvbnN0IGNoYXIgKmVsZ19uYW1lc1tdID0KKyAgeworICAgICJlbGciLAorICAgICJvcGVucGdwLWVsZyIsCisgICAgIm9wZW5wZ3AtZWxnLXNpZyIsCisgICAgTlVMTCwKKyAgfTsKKworCitzdGF0aWMgaW50IHRlc3Rfa2V5cyAoRUxHX3NlY3JldF9rZXkgKnNrLCB1bnNpZ25lZCBpbnQgbmJpdHMsIGludCBub2RpZSk7CitzdGF0aWMgZ2NyeV9tcGlfdCBnZW5fayAoZ2NyeV9tcGlfdCBwLCBpbnQgc21hbGxfayk7CitzdGF0aWMgdm9pZCBnZW5lcmF0ZSAoRUxHX3NlY3JldF9rZXkgKnNrLCB1bnNpZ25lZCBuYml0cywgZ2NyeV9tcGlfdCAqKmZhY3RvcnMpOworc3RhdGljIGludCAgY2hlY2tfc2VjcmV0X2tleSAoRUxHX3NlY3JldF9rZXkgKnNrKTsKK3N0YXRpYyB2b2lkIGRvX2VuY3J5cHQgKGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiLCBnY3J5X21waV90IGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgRUxHX3B1YmxpY19rZXkgKnBrZXkpOworc3RhdGljIHZvaWQgZGVjcnlwdCAoZ2NyeV9tcGlfdCBvdXRwdXQsIGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiLAorICAgICAgICAgICAgICAgICAgICAgRUxHX3NlY3JldF9rZXkgKnNrZXkpOworc3RhdGljIHZvaWQgc2lnbiAoZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIsIGdjcnlfbXBpX3QgaW5wdXQsCisgICAgICAgICAgICAgICAgICBFTEdfc2VjcmV0X2tleSAqc2tleSk7CitzdGF0aWMgaW50ICB2ZXJpZnkgKGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiLCBnY3J5X21waV90IGlucHV0LAorICAgICAgICAgICAgICAgICAgICBFTEdfcHVibGljX2tleSAqcGtleSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGVsZ19nZXRfbmJpdHMgKGdjcnlfc2V4cF90IHBhcm1zKTsKKworCitzdGF0aWMgdm9pZCAoKnByb2dyZXNzX2NiKSAodm9pZCAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgKnByb2dyZXNzX2NiX2RhdGE7CisKK3ZvaWQKK19nY3J5X3JlZ2lzdGVyX3BrX2VsZ19wcm9ncmVzcyAodm9pZCAoKmNiKSAodm9pZCAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQpLAorCQkJCXZvaWQgKmNiX2RhdGEpCit7CisgIHByb2dyZXNzX2NiID0gY2I7CisgIHByb2dyZXNzX2NiX2RhdGEgPSBjYl9kYXRhOworfQorCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzcyAoaW50IGMpCit7CisgIGlmIChwcm9ncmVzc19jYikKKyAgICBwcm9ncmVzc19jYiAocHJvZ3Jlc3NfY2JfZGF0YSwgInBrX2VsZyIsIGMsIDAsIDApOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBNaWNoYWVsIFdpZW5lcidzIHRhYmxlIG9uIHN1Ymdyb3VwIHNpemVzIHRvIG1hdGNoIGZpZWxkIHNpemVzLgorICogKGZsb2F0aW5nIGFyb3VuZCBzb21ld2hlcmUsIHByb2JhYmx5IGJhc2VkIG9uIHRoZSBwYXBlciBmcm9tCisgKiBFdXJvY3J5cHQgOTYsIHBhZ2UgMzMyKQorICovCitzdGF0aWMgdW5zaWduZWQgaW50Cit3aWVuZXJfbWFwKCB1bnNpZ25lZCBpbnQgbiApCit7CisgIHN0YXRpYyBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgcF9uLCBxX247IH0gdFtdID0KKyAgICB7IC8qICAgcAkgIHEJIGF0dGFjayBjb3N0ICovCisgICAgICB7ICA1MTIsIDExOSB9LAkvKiA5IHggMTBeMTcgKi8KKyAgICAgIHsgIDc2OCwgMTQ1IH0sCS8qIDYgeCAxMF4yMSAqLworICAgICAgeyAxMDI0LCAxNjUgfSwJLyogNyB4IDEwXjI0ICovCisgICAgICB7IDEyODAsIDE4MyB9LAkvKiAzIHggMTBeMjcgKi8KKyAgICAgIHsgMTUzNiwgMTk4IH0sCS8qIDcgeCAxMF4yOSAqLworICAgICAgeyAxNzkyLCAyMTIgfSwJLyogOSB4IDEwXjMxICovCisgICAgICB7IDIwNDgsIDIyNSB9LAkvKiA4IHggMTBeMzMgKi8KKyAgICAgIHsgMjMwNCwgMjM3IH0sCS8qIDUgeCAxMF4zNSAqLworICAgICAgeyAyNTYwLCAyNDkgfSwJLyogMyB4IDEwXjM3ICovCisgICAgICB7IDI4MTYsIDI1OSB9LAkvKiAxIHggMTBeMzkgKi8KKyAgICAgIHsgMzA3MiwgMjY5IH0sCS8qIDMgeCAxMF40MCAqLworICAgICAgeyAzMzI4LCAyNzkgfSwJLyogOCB4IDEwXjQxICovCisgICAgICB7IDM1ODQsIDI4OCB9LAkvKiAyIHggMTBeNDMgKi8KKyAgICAgIHsgMzg0MCwgMjk2IH0sCS8qIDQgeCAxMF40NCAqLworICAgICAgeyA0MDk2LCAzMDUgfSwJLyogNyB4IDEwXjQ1ICovCisgICAgICB7IDQzNTIsIDMxMyB9LAkvKiAxIHggMTBeNDcgKi8KKyAgICAgIHsgNDYwOCwgMzIwIH0sCS8qIDIgeCAxMF40OCAqLworICAgICAgeyA0ODY0LCAzMjggfSwJLyogMiB4IDEwXjQ5ICovCisgICAgICB7IDUxMjAsIDMzNSB9LAkvKiAzIHggMTBeNTAgKi8KKyAgICAgIHsgMCwgMCB9CisgICAgfTsKKyAgaW50IGk7CisKKyAgZm9yKGk9MDsgdFtpXS5wX247IGkrKyApCisgICAgeworICAgICAgaWYoIG4gPD0gdFtpXS5wX24gKQorICAgICAgICByZXR1cm4gdFtpXS5xX247CisgICAgfQorICAvKiBOb3QgaW4gdGFibGUgLSB1c2UgYW4gYXJiaXRyYXJ5IGhpZ2ggbnVtYmVyLiAqLworICByZXR1cm4gIG4gLyA4ICsgMjAwOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2tleXMgKCBFTEdfc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cywgaW50IG5vZGllICkKK3sKKyAgRUxHX3B1YmxpY19rZXkgcGs7CisgIGdjcnlfbXBpX3QgdGVzdCAgID0gbXBpX25ldyAoIDAgKTsKKyAgZ2NyeV9tcGlfdCBvdXQxX2EgPSBtcGlfbmV3ICggbmJpdHMgKTsKKyAgZ2NyeV9tcGlfdCBvdXQxX2IgPSBtcGlfbmV3ICggbmJpdHMgKTsKKyAgZ2NyeV9tcGlfdCBvdXQyICAgPSBtcGlfbmV3ICggbmJpdHMgKTsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyAgcGsucCA9IHNrLT5wOworICBway5nID0gc2stPmc7CisgIHBrLnkgPSBzay0+eTsKKworICBfZ2NyeV9tcGlfcmFuZG9taXplICggdGVzdCwgbmJpdHMsIEdDUllfV0VBS19SQU5ET00gKTsKKworICBkb19lbmNyeXB0ICggb3V0MV9hLCBvdXQxX2IsIHRlc3QsICZwayApOworICBkZWNyeXB0ICggb3V0Miwgb3V0MV9hLCBvdXQxX2IsIHNrICk7CisgIGlmICggbXBpX2NtcCggdGVzdCwgb3V0MiApICkKKyAgICBmYWlsZWQgfD0gMTsKKworICBzaWduICggb3V0MV9hLCBvdXQxX2IsIHRlc3QsIHNrICk7CisgIGlmICggIXZlcmlmeSggb3V0MV9hLCBvdXQxX2IsIHRlc3QsICZwayApICkKKyAgICBmYWlsZWQgfD0gMjsKKworICBfZ2NyeV9tcGlfcmVsZWFzZSAoIHRlc3QgKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKCBvdXQxX2EgKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKCBvdXQxX2IgKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKCBvdXQyICk7CisKKyAgaWYgKGZhaWxlZCAmJiAhbm9kaWUpCisgICAgbG9nX2ZhdGFsICgiRWxnYW1hbCB0ZXN0IGtleSBmb3IgJXMgJXMgZmFpbGVkXG4iLAorICAgICAgICAgICAgICAgKGZhaWxlZCAmIDEpPyAiZW5jcnlwdCtkZWNyeXB0IjoiIiwKKyAgICAgICAgICAgICAgIChmYWlsZWQgJiAyKT8gInNpZ24rdmVyaWZ5IjoiIik7CisgIGlmIChmYWlsZWQgJiYgREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJFbGdhbWFsIHRlc3Qga2V5IGZvciAlcyAlcyBmYWlsZWRcbiIsCisgICAgICAgICAgICAgICAoZmFpbGVkICYgMSk/ICJlbmNyeXB0K2RlY3J5cHQiOiIiLAorICAgICAgICAgICAgICAgKGZhaWxlZCAmIDIpPyAic2lnbit2ZXJpZnkiOiIiKTsKKworICByZXR1cm4gZmFpbGVkOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBHZW5lcmF0ZSBhIHJhbmRvbSBzZWNyZXQgZXhwb25lbnQgayBmcm9tIHByaW1lIHAsIHNvIHRoYXQgayBpcworICogcmVsYXRpdmVseSBwcmltZSB0byBwLTEuICBXaXRoIFNNQUxMX0sgc2V0LCBrIHdpbGwgYmUgc2VsZWN0ZWQgZm9yCisgKiBiZXR0ZXIgZW5jcnlwdGlvbiBwZXJmb3JtYW5jZSAtIHRoaXMgbXVzdCBuZXZlciBiZSB1c2VkIHNpZ25pbmchCisgKi8KK3N0YXRpYyBnY3J5X21waV90CitnZW5fayggZ2NyeV9tcGlfdCBwLCBpbnQgc21hbGxfayApCit7CisgIGdjcnlfbXBpX3QgayA9IG1waV9hbGxvY19zZWN1cmUoIDAgKTsKKyAgZ2NyeV9tcGlfdCB0ZW1wID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhwKSApOworICBnY3J5X21waV90IHBfMSA9IG1waV9jb3B5KHApOworICB1bnNpZ25lZCBpbnQgb3JpZ19uYml0cyA9IG1waV9nZXRfbmJpdHMocCk7CisgIHVuc2lnbmVkIGludCBuYml0cywgbmJ5dGVzOworICBjaGFyICpybmRidWYgPSBOVUxMOworCisgIGlmIChzbWFsbF9rKQorICAgIHsKKyAgICAgIC8qIFVzaW5nIGEgayBtdWNoIGxlc3NlciB0aGFuIHAgaXMgc3VmZmljaWVudCBmb3IgZW5jcnlwdGlvbiBhbmQKKyAgICAgICAqIGl0IGdyZWF0bHkgaW1wcm92ZXMgdGhlIGVuY3J5cHRpb24gcGVyZm9ybWFuY2UuICBXZSB1c2UKKyAgICAgICAqIFdpZW5lcidzIHRhYmxlIGFuZCBhZGQgYSBsYXJnZSBzYWZldHkgbWFyZ2luLiAqLworICAgICAgbmJpdHMgPSB3aWVuZXJfbWFwKCBvcmlnX25iaXRzICkgKiAzIC8gMjsKKyAgICAgIGlmKCBuYml0cyA+PSBvcmlnX25iaXRzICkKKyAgICAgICAgQlVHKCk7CisgICAgfQorICBlbHNlCisgICAgbmJpdHMgPSBvcmlnX25iaXRzOworCisKKyAgbmJ5dGVzID0gKG5iaXRzKzcpLzg7CisgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICBsb2dfZGVidWcoImNob29zaW5nIGEgcmFuZG9tIGtcbiIpOworICBtcGlfc3ViX3VpKCBwXzEsIHAsIDEpOworICBmb3IoOzspCisgICAgeworICAgICAgaWYoICFybmRidWYgfHwgbmJpdHMgPCAzMiApCisgICAgICAgIHsKKyAgICAgICAgICB4ZnJlZShybmRidWYpOworICAgICAgICAgIHJuZGJ1ZiA9IF9nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUoIG5ieXRlcywgR0NSWV9TVFJPTkdfUkFORE9NICk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIENoYW5nZSBvbmx5IHNvbWUgb2YgdGhlIGhpZ2hlciBiaXRzLiAgV2UgY291bGQgaW1wcm92ZQorICAgICAgICAgICAgIHRoaXMgYnkgZGlyZWN0bHkgcmVxdWVzdGluZyBtb3JlIG1lbW9yeSBhdCB0aGUgZmlyc3QgY2FsbAorICAgICAgICAgICAgIHRvIGdldF9yYW5kb21fYnl0ZXMoKSBhbmQgdXNlIHRoaXMgdGhlIGhlcmUgbWF5YmUgaXQgaXMKKyAgICAgICAgICAgICBlYXNpZXIgdG8gZG8gdGhpcyBkaXJlY3RseSBpbiByYW5kb20uYyBBbnl3YXksIGl0IGlzCisgICAgICAgICAgICAgaGlnaGx5IGlubGlrZWx5IHRoYXQgd2Ugd2lsbCBldmVyIHJlYWNoIHRoaXMgY29kZS4gKi8KKyAgICAgICAgICBjaGFyICpwcCA9IF9nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUoIDQsIEdDUllfU1RST05HX1JBTkRPTSApOworICAgICAgICAgIG1lbWNweSggcm5kYnVmLCBwcCwgNCApOworICAgICAgICAgIHhmcmVlKHBwKTsKKwl9CisgICAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciggaywgcm5kYnVmLCBuYnl0ZXMsIDAgKTsKKworICAgICAgZm9yKDs7KQorICAgICAgICB7CisgICAgICAgICAgaWYoICEobXBpX2NtcCggaywgcF8xICkgPCAwKSApICAvKiBjaGVjazogayA8IChwLTEpICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICAgICAgICAgICAgICBwcm9ncmVzcygnKycpOworICAgICAgICAgICAgICBicmVhazsgLyogbm8gICovCisgICAgICAgICAgICB9CisgICAgICAgICAgaWYoICEobXBpX2NtcF91aSggaywgMCApID4gMCkgKSAgLyogY2hlY2s6IGsgPiAwICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICAgICAgICAgICAgICBwcm9ncmVzcygnLScpOworICAgICAgICAgICAgICBicmVhazsgLyogbm8gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobXBpX2djZCggdGVtcCwgaywgcF8xICkpCisgICAgICAgICAgICBnb3RvIGZvdW5kOyAgLyogb2theSwgayBpcyByZWxhdGl2ZSBwcmltZSB0byAocC0xKSAqLworICAgICAgICAgIG1waV9hZGRfdWkoIGssIGssIDEgKTsKKyAgICAgICAgICBpZiggREJHX0NJUEhFUiApCisgICAgICAgICAgICBwcm9ncmVzcygnLicpOworCX0KKyAgICB9CisgZm91bmQ6CisgIHhmcmVlIChybmRidWYpOworICBpZiggREJHX0NJUEhFUiApCisgICAgcHJvZ3Jlc3MoJ1xuJyk7CisgIG1waV9mcmVlKHBfMSk7CisgIG1waV9mcmVlKHRlbXApOworCisgIHJldHVybiBrOworfQorCisvKioqKioqKioqKioqKioqKgorICogR2VuZXJhdGUgYSBrZXkgcGFpciB3aXRoIGEga2V5IG9mIHNpemUgTkJJVFMKKyAqIFJldHVybnM6IDIgc3RydWN0dXJlcyBmaWxsZWQgd2l0aCBhbGwgbmVlZGVkIHZhbHVlcworICoJICAgIGFuZCBhbiBhcnJheSB3aXRoIG4tMSBmYWN0b3JzIG9mIChwLTEpCisgKi8KK3N0YXRpYyB2b2lkCitnZW5lcmF0ZSAoIEVMR19zZWNyZXRfa2V5ICpzaywgdW5zaWduZWQgaW50IG5iaXRzLCBnY3J5X21waV90ICoqcmV0X2ZhY3RvcnMgKQoreworICBnY3J5X21waV90IHA7ICAgIC8qIHRoZSBwcmltZSAqLworICBnY3J5X21waV90IHBfbWluMTsKKyAgZ2NyeV9tcGlfdCBnOworICBnY3J5X21waV90IHg7ICAgIC8qIHRoZSBzZWNyZXQgZXhwb25lbnQgKi8KKyAgZ2NyeV9tcGlfdCB5OworICB1bnNpZ25lZCBpbnQgcWJpdHM7CisgIHVuc2lnbmVkIGludCB4Yml0czsKKyAgYnl0ZSAqcm5kYnVmOworCisgIHBfbWluMSA9IG1waV9uZXcgKCBuYml0cyApOworICBxYml0cyA9IHdpZW5lcl9tYXAoIG5iaXRzICk7CisgIGlmKCBxYml0cyAmIDEgKSAvKiBiZXR0ZXIgaGF2ZSBhIGV2ZW4gb25lICovCisgICAgcWJpdHMrKzsKKyAgZyA9IG1waV9hbGxvYygxKTsKKyAgcCA9IF9nY3J5X2dlbmVyYXRlX2VsZ19wcmltZSggMCwgbmJpdHMsIHFiaXRzLCBnLCByZXRfZmFjdG9ycyApOworICBtcGlfc3ViX3VpKHBfbWluMSwgcCwgMSk7CisKKworICAvKiBTZWxlY3QgYSByYW5kb20gbnVtYmVyIHdoaWNoIGhhcyB0aGVzZSBwcm9wZXJ0aWVzOgorICAgKgkgMCA8IHggPCBwLTEKKyAgICogVGhpcyBtdXN0IGJlIGEgdmVyeSBnb29kIHJhbmRvbSBudW1iZXIgYmVjYXVzZSB0aGlzIGlzIHRoZQorICAgKiBzZWNyZXQgcGFydC4gIFRoZSBwcmltZSBpcyBwdWJsaWMgYW5kIG1heSBiZSBzaGFyZWQgYW55d2F5LAorICAgKiBzbyBhIHJhbmRvbSBnZW5lcmF0b3IgbGV2ZWwgb2YgMSBpcyB1c2VkIGZvciB0aGUgcHJpbWUuCisgICAqCisgICAqIEkgZG9uJ3Qgc2VlIGEgcmVhc29uIHRvIGhhdmUgYSB4IG9mIGFib3V0IHRoZSBzYW1lIHNpemUKKyAgICogYXMgdGhlIHAuICBJdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBoYXZlIG9uZSBhYm91dCB0aGUgc2l6ZQorICAgKiBvZiBxIG9yIHRoZSBsYXRlciB1c2VkIGsgcGx1cyBhIGxhcmdlIHNhZmV0eSBtYXJnaW4uIERlY3J5cHRpb24KKyAgICogd2lsbCBiZSBtdWNoIGZhc3RlciB3aXRoIHN1Y2ggYW4geC4KKyAgICovCisgIHhiaXRzID0gcWJpdHMgKiAzIC8gMjsKKyAgaWYoIHhiaXRzID49IG5iaXRzICkKKyAgICBCVUcoKTsKKyAgeCA9IG1waV9zbmV3ICggeGJpdHMgKTsKKyAgaWYoIERCR19DSVBIRVIgKQorICAgIGxvZ19kZWJ1ZygiY2hvb3NpbmcgYSByYW5kb20geCBvZiBzaXplICV1XG4iLCB4Yml0cyApOworICBybmRidWYgPSBOVUxMOworICBkbworICAgIHsKKyAgICAgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICAgICAgcHJvZ3Jlc3MoJy4nKTsKKyAgICAgIGlmKCBybmRidWYgKQorICAgICAgICB7IC8qIENoYW5nZSBvbmx5IHNvbWUgb2YgdGhlIGhpZ2hlciBiaXRzICovCisgICAgICAgICAgaWYoIHhiaXRzIDwgMTYgKSAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIC4uLiAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ZnJlZShybmRidWYpOworICAgICAgICAgICAgICBybmRidWYgPSBfZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlICgoeGJpdHMrNykvOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2hhciAqciA9IF9nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUgKDIsIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NKTsKKyAgICAgICAgICAgICAgbWVtY3B5KHJuZGJ1ZiwgciwgMiApOworICAgICAgICAgICAgICB4ZnJlZSAocik7CisgICAgICAgICAgICB9CisJfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcm5kYnVmID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoKHhiaXRzKzcpLzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gKTsKKwl9CisgICAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciggeCwgcm5kYnVmLCAoeGJpdHMrNykvOCwgMCApOworICAgICAgbXBpX2NsZWFyX2hpZ2hiaXQoIHgsIHhiaXRzKzEgKTsKKyAgICB9CisgIHdoaWxlKCAhKCBtcGlfY21wX3VpKCB4LCAwICk+MCAmJiBtcGlfY21wKCB4LCBwX21pbjEgKTwwICkgKTsKKyAgeGZyZWUocm5kYnVmKTsKKworICB5ID0gbXBpX25ldyAobmJpdHMpOworICBtcGlfcG93bSggeSwgZywgeCwgcCApOworCisgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICB7CisgICAgICBwcm9ncmVzcyAoJ1xuJyk7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZyAgcCIsIHAgKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnICBnIiwgZyApOworICAgICAgbG9nX21waWR1bXAgKCJlbGcgIHkiLCB5ICk7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZyAgeCIsIHggKTsKKyAgICB9CisKKyAgLyogQ29weSB0aGUgc3R1ZmYgdG8gdGhlIGtleSBzdHJ1Y3R1cmVzICovCisgIHNrLT5wID0gcDsKKyAgc2stPmcgPSBnOworICBzay0+eSA9IHk7CisgIHNrLT54ID0geDsKKworICBfZ2NyeV9tcGlfcmVsZWFzZSAoIHBfbWluMSApOworCisgIC8qIE5vdyB3ZSBjYW4gdGVzdCBvdXIga2V5cyAodGhpcyBzaG91bGQgbmV2ZXIgZmFpbCEpICovCisgIHRlc3Rfa2V5cyAoIHNrLCBuYml0cyAtIDY0LCAwICk7Cit9CisKKworLyogR2VuZXJhdGUgYSBrZXkgcGFpciB3aXRoIGEga2V5IG9mIHNpemUgTkJJVFMgbm90IHVzaW5nIGEgcmFuZG9tCisgICB2YWx1ZSBmb3IgdGhlIHNlY3JldCBrZXkgYnV0IHRoZSBvbmUgZ2l2ZW4gYXMgWC4gIFRoaXMgaXMgdXNlZnVsIHRvCisgICBpbXBsZW1lbnQgYSBwYXNzcGhyYXNlIGJhc2VkIGRlY3J5cHRpb24gZm9yIGEgcHVibGljIGtleSBiYXNlZAorICAgZW5jcnlwdGlvbi4gIEl0IGhhcyBhcHBsaWFjdGlvbnMgaW4gYmFja3VwIHN5c3RlbXMuCisKKyAgIFJldHVybnM6IEEgc3RydWN0dXJlIGZpbGxlZCB3aXRoIGFsbCBuZWVkZWQgdmFsdWVzIGFuZCBhbiBhcnJheQorIAkgICAgd2l0aCBuLTEgZmFjdG9ycyBvZiAocC0xKS4gICovCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitnZW5lcmF0ZV91c2luZ194IChFTEdfc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cywgZ2NyeV9tcGlfdCB4LAorICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqKnJldF9mYWN0b3JzICkKK3sKKyAgZ2NyeV9tcGlfdCBwOyAgICAgIC8qIFRoZSBwcmltZS4gICovCisgIGdjcnlfbXBpX3QgcF9taW4xOyAvKiBUaGUgcHJpbWUgbWludXMgMS4gICovCisgIGdjcnlfbXBpX3QgZzsgICAgICAvKiBUaGUgZ2VuZXJhdG9yLiAgKi8KKyAgZ2NyeV9tcGlfdCB5OyAgICAgIC8qIGdeeCBtb2QgcC4gICovCisgIHVuc2lnbmVkIGludCBxYml0czsKKyAgdW5zaWduZWQgaW50IHhiaXRzOworCisgIHNrLT5wID0gTlVMTDsKKyAgc2stPmcgPSBOVUxMOworICBzay0+eSA9IE5VTEw7CisgIHNrLT54ID0gTlVMTDsKKworICAvKiBEbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSB3aGV0aGVyIFggaXMgc3VpdGFibGUuICAqLworICB4Yml0cyA9IG1waV9nZXRfbmJpdHMgKHgpOworICBpZiAoIHhiaXRzIDwgNjQgfHwgeGJpdHMgPj0gbmJpdHMgKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9WQUxVRTsKKworICBwX21pbjEgPSBtcGlfbmV3ICggbmJpdHMgKTsKKyAgcWJpdHMgID0gd2llbmVyX21hcCAoIG5iaXRzICk7CisgIGlmICggKHFiaXRzICYgMSkgKSAvKiBCZXR0ZXIgaGF2ZSBhbiBldmVuIG9uZS4gICovCisgICAgcWJpdHMrKzsKKyAgZyA9IG1waV9hbGxvYyAoMSk7CisgIHAgPSBfZ2NyeV9nZW5lcmF0ZV9lbGdfcHJpbWUgKCAwLCBuYml0cywgcWJpdHMsIGcsIHJldF9mYWN0b3JzICk7CisgIG1waV9zdWJfdWkgKHBfbWluMSwgcCwgMSk7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgidXNpbmcgYSBzdXBwbGllZCB4IG9mIHNpemUgJXUiLCB4Yml0cyApOworICBpZiAoICEobXBpX2NtcF91aSAoIHgsIDAgKSA+IDAgJiYgbXBpX2NtcCAoIHgsIHBfbWluMSApIDwwICkgKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICggcF9taW4xICk7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoIHAgKTsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICggZyApOworICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworICAgIH0KKworICB5ID0gbXBpX25ldyAobmJpdHMpOworICBtcGlfcG93bSAoIHksIGcsIHgsIHAgKTsKKworICBpZiAoIERCR19DSVBIRVIgKQorICAgIHsKKyAgICAgIHByb2dyZXNzICgnXG4nKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnICBwIiwgcCApOworICAgICAgbG9nX21waWR1bXAgKCJlbGcgIGciLCBnICk7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZyAgeSIsIHkgKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnICB4IiwgeCApOworICAgIH0KKworICAvKiBDb3B5IHRoZSBzdHVmZiB0byB0aGUga2V5IHN0cnVjdHVyZXMgKi8KKyAgc2stPnAgPSBwOworICBzay0+ZyA9IGc7CisgIHNrLT55ID0geTsKKyAgc2stPnggPSBtcGlfY29weSAoeCk7CisKKyAgX2djcnlfbXBpX3JlbGVhc2UgKCBwX21pbjEgKTsKKworICAvKiBOb3cgd2UgY2FuIHRlc3Qgb3VyIGtleXMuICovCisgIGlmICggdGVzdF9rZXlzICggc2ssIG5iaXRzIC0gNjQsIDEgKSApCisgICAgeworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCBzay0+cCApOyBzay0+cCA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoIHNrLT5nICk7IHNrLT5nID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICggc2stPnkgKTsgc2stPnkgPSBOVUxMOworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCBzay0+eCApOyBzay0+eCA9IE5VTEw7CisgICAgICByZXR1cm4gR1BHX0VSUl9CQURfU0VDS0VZOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogVGVzdCB3aGV0aGVyIHRoZSBzZWNyZXQga2V5IGlzIHZhbGlkLgorICogUmV0dXJuczogaWYgdGhpcyBpcyBhIHZhbGlkIGtleS4KKyAqLworc3RhdGljIGludAorY2hlY2tfc2VjcmV0X2tleSggRUxHX3NlY3JldF9rZXkgKnNrICkKK3sKKyAgaW50IHJjOworICBnY3J5X21waV90IHkgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHNrLT55KSApOworCisgIG1waV9wb3dtICh5LCBzay0+Zywgc2stPngsIHNrLT5wKTsKKyAgcmMgPSAhbXBpX2NtcCggeSwgc2stPnkgKTsKKyAgbXBpX2ZyZWUoIHkgKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0KGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiLCBnY3J5X21waV90IGlucHV0LCBFTEdfcHVibGljX2tleSAqcGtleSApCit7CisgIGdjcnlfbXBpX3QgazsKKworICAvKiBOb3RlOiBtYXliZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBpbnRlcmZhY2UsIHNvIHRoYXQgaXQKKyAgICogaXMgcG9zc2libGUgdG8gY2hlY2sgdGhhdCBpbnB1dCBpcyA8IHAgYW5kIHJldHVybiBhbgorICAgKiBlcnJvciBjb2RlLgorICAgKi8KKworICBrID0gZ2VuX2soIHBrZXktPnAsIDEgKTsKKyAgbXBpX3Bvd20gKGEsIHBrZXktPmcsIGssIHBrZXktPnApOworCisgIC8qIGIgPSAoeV5rICogaW5wdXQpIG1vZCBwCisgICAqCSA9ICgoeV5rIG1vZCBwKSAqIChpbnB1dCBtb2QgcCkpIG1vZCBwCisgICAqIGFuZCBiZWNhdXNlIGlucHV0IGlzIDwgcAorICAgKgkgPSAoKHleayBtb2QgcCkgKiBpbnB1dCkgbW9kIHAKKyAgICovCisgIG1waV9wb3dtIChiLCBwa2V5LT55LCBrLCBwa2V5LT5wKTsKKyAgbXBpX211bG0gKGIsIGIsIGlucHV0LCBwa2V5LT5wKTsKKyNpZiAwCisgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCgiZWxnIGVuY3J5cHRlZCB5IiwgcGtleS0+eSk7CisgICAgICBsb2dfbXBpZHVtcCgiZWxnIGVuY3J5cHRlZCBwIiwgcGtleS0+cCk7CisgICAgICBsb2dfbXBpZHVtcCgiZWxnIGVuY3J5cHRlZCBrIiwgayk7CisgICAgICBsb2dfbXBpZHVtcCgiZWxnIGVuY3J5cHRlZCBNIiwgaW5wdXQpOworICAgICAgbG9nX21waWR1bXAoImVsZyBlbmNyeXB0ZWQgYSIsIGEpOworICAgICAgbG9nX21waWR1bXAoImVsZyBlbmNyeXB0ZWQgYiIsIGIpOworICAgIH0KKyNlbmRpZgorICBtcGlfZnJlZShrKTsKK30KKworCisKKworc3RhdGljIHZvaWQKK2RlY3J5cHQgKGdjcnlfbXBpX3Qgb3V0cHV0LCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYiwgRUxHX3NlY3JldF9rZXkgKnNrZXkgKQoreworICBnY3J5X21waV90IHQxID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrZXktPnAgKSApOworCisgIG1waV9ub3JtYWxpemUgKGEpOworICBtcGlfbm9ybWFsaXplIChiKTsKKworICAvKiBvdXRwdXQgPSBiLyhhXngpIG1vZCBwICovCisgIG1waV9wb3dtKCB0MSwgYSwgc2tleS0+eCwgc2tleS0+cCApOworICBtcGlfaW52bSggdDEsIHQxLCBza2V5LT5wICk7CisgIG1waV9tdWxtKCBvdXRwdXQsIGIsIHQxLCBza2V5LT5wICk7CisjaWYgMAorICBpZiggREJHX0NJUEhFUiApCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJlbGcgZGVjcnlwdGVkIHgiLCBza2V5LT54KTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnIGRlY3J5cHRlZCBwIiwgc2tleS0+cCk7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZyBkZWNyeXB0ZWQgYSIsIGEpOworICAgICAgbG9nX21waWR1bXAgKCJlbGcgZGVjcnlwdGVkIGIiLCBiKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnIGRlY3J5cHRlZCBNIiwgb3V0cHV0KTsKKyAgICB9CisjZW5kaWYKKyAgbXBpX2ZyZWUodDEpOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBNYWtlIGFuIEVsZ2FtYWwgc2lnbmF0dXJlIG91dCBvZiBJTlBVVAorICovCisKK3N0YXRpYyB2b2lkCitzaWduKGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiLCBnY3J5X21waV90IGlucHV0LCBFTEdfc2VjcmV0X2tleSAqc2tleSApCit7CisgICAgZ2NyeV9tcGlfdCBrOworICAgIGdjcnlfbXBpX3QgdCAgID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhhKSApOworICAgIGdjcnlfbXBpX3QgaW52ID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhhKSApOworICAgIGdjcnlfbXBpX3QgcF8xID0gbXBpX2NvcHkoc2tleS0+cCk7CisKKyAgIC8qCisgICAgKiBiID0gKHQgKiBpbnYpIG1vZCAocC0xKQorICAgICogYiA9ICh0ICogaW52KGssKHAtMSksKHAtMSkpIG1vZCAocC0xKQorICAgICogYiA9ICgoKE0teCphKSBtb2QgKHAtMSkpICogaW52KGssKHAtMSksKHAtMSkpKSBtb2QgKHAtMSkKKyAgICAqCisgICAgKi8KKyAgICBtcGlfc3ViX3VpKHBfMSwgcF8xLCAxKTsKKyAgICBrID0gZ2VuX2soIHNrZXktPnAsIDAgLyogbm8gc21hbGwgSyAhICovICk7CisgICAgbXBpX3Bvd20oIGEsIHNrZXktPmcsIGssIHNrZXktPnAgKTsKKyAgICBtcGlfbXVsKHQsIHNrZXktPngsIGEgKTsKKyAgICBtcGlfc3VibSh0LCBpbnB1dCwgdCwgcF8xICk7CisgICAgbXBpX2ludm0oaW52LCBrLCBwXzEgKTsKKyAgICBtcGlfbXVsbShiLCB0LCBpbnYsIHBfMSApOworCisjaWYgMAorICAgIGlmKCBEQkdfQ0lQSEVSICkKKyAgICAgIHsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIHAiLCBza2V5LT5wKTsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIGciLCBza2V5LT5nKTsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIHkiLCBza2V5LT55KTsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIHgiLCBza2V5LT54KTsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIGsiLCBrKTsKKwlsb2dfbXBpZHVtcCAoImVsZyBzaWduIE0iLCBpbnB1dCk7CisJbG9nX21waWR1bXAgKCJlbGcgc2lnbiBhIiwgYSk7CisJbG9nX21waWR1bXAgKCJlbGcgc2lnbiBiIiwgYik7CisgICAgICB9CisjZW5kaWYKKyAgICBtcGlfZnJlZShrKTsKKyAgICBtcGlfZnJlZSh0KTsKKyAgICBtcGlfZnJlZShpbnYpOworICAgIG1waV9mcmVlKHBfMSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIGNvbXBvc2VkIG9mIEEgYW5kIEIgaXMgdmFsaWQuCisgKi8KK3N0YXRpYyBpbnQKK3ZlcmlmeShnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYiwgZ2NyeV9tcGlfdCBpbnB1dCwgRUxHX3B1YmxpY19rZXkgKnBrZXkgKQoreworICBpbnQgcmM7CisgIGdjcnlfbXBpX3QgdDE7CisgIGdjcnlfbXBpX3QgdDI7CisgIGdjcnlfbXBpX3QgYmFzZVs0XTsKKyAgZ2NyeV9tcGlfdCBleFs0XTsKKworICBpZiggIShtcGlfY21wX3VpKCBhLCAwICkgPiAwICYmIG1waV9jbXAoIGEsIHBrZXktPnAgKSA8IDApICkKKyAgICByZXR1cm4gMDsgLyogYXNzZXJ0aW9uCTAgPCBhIDwgcCAgZmFpbGVkICovCisKKyAgdDEgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKGEpICk7CisgIHQyID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhhKSApOworCisjaWYgMAorICAvKiB0MSA9ICh5XmEgbW9kIHApICogKGFeYiBtb2QgcCkgbW9kIHAgKi8KKyAgZ2NyeV9tcGlfcG93bSggdDEsIHBrZXktPnksIGEsIHBrZXktPnAgKTsKKyAgZ2NyeV9tcGlfcG93bSggdDIsIGEsIGIsIHBrZXktPnAgKTsKKyAgbXBpX211bG0oIHQxLCB0MSwgdDIsIHBrZXktPnAgKTsKKworICAvKiB0MiA9IGcgXiBpbnB1dCBtb2QgcCAqLworICBnY3J5X21waV9wb3dtKCB0MiwgcGtleS0+ZywgaW5wdXQsIHBrZXktPnAgKTsKKworICByYyA9ICFtcGlfY21wKCB0MSwgdDIgKTsKKyNlbGlmIDAKKyAgLyogdDEgPSAoeV5hIG1vZCBwKSAqIChhXmIgbW9kIHApIG1vZCBwICovCisgIGJhc2VbMF0gPSBwa2V5LT55OyBleFswXSA9IGE7CisgIGJhc2VbMV0gPSBhOyAgICAgICBleFsxXSA9IGI7CisgIGJhc2VbMl0gPSBOVUxMOyAgICBleFsyXSA9IE5VTEw7CisgIG1waV9tdWxwb3dtKCB0MSwgYmFzZSwgZXgsIHBrZXktPnAgKTsKKworICAvKiB0MiA9IGcgXiBpbnB1dCBtb2QgcCAqLworICBnY3J5X21waV9wb3dtKCB0MiwgcGtleS0+ZywgaW5wdXQsIHBrZXktPnAgKTsKKworICByYyA9ICFtcGlfY21wKCB0MSwgdDIgKTsKKyNlbHNlCisgIC8qIHQxID0gZyBeIC0gaW5wdXQgKiB5IF4gYSAqIGEgXiBiICBtb2QgcCAqLworICBtcGlfaW52bSh0MiwgcGtleS0+ZywgcGtleS0+cCApOworICBiYXNlWzBdID0gdDIgICAgIDsgZXhbMF0gPSBpbnB1dDsKKyAgYmFzZVsxXSA9IHBrZXktPnk7IGV4WzFdID0gYTsKKyAgYmFzZVsyXSA9IGE7ICAgICAgIGV4WzJdID0gYjsKKyAgYmFzZVszXSA9IE5VTEw7ICAgIGV4WzNdID0gTlVMTDsKKyAgbXBpX211bHBvd20oIHQxLCBiYXNlLCBleCwgcGtleS0+cCApOworICByYyA9ICFtcGlfY21wX3VpKCB0MSwgMSApOworCisjZW5kaWYKKworICBtcGlfZnJlZSh0MSk7CisgIG1waV9mcmVlKHQyKTsKKyAgcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIGludGVyZmFjZSAgKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK2VsZ19nZW5lcmF0ZSAoY29uc3QgZ2NyeV9zZXhwX3QgZ2VucGFybXMsIGdjcnlfc2V4cF90ICpyX3NrZXkpCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisgIEVMR19zZWNyZXRfa2V5IHNrOworICBnY3J5X21waV90IHh2YWx1ZSA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGwxOworICBnY3J5X21waV90ICpmYWN0b3JzID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgbWlzY19pbmZvID0gTlVMTDsKKworICBtZW1zZXQgKCZzaywgMCwgc2l6ZW9mIHNrKTsKKworICByYyA9IF9nY3J5X3BrX3V0aWxfZ2V0X25iaXRzIChnZW5wYXJtcywgJm5iaXRzKTsKKyAgaWYgKHJjKQorICAgIHJldHVybiByYzsKKworICAvKiBQYXJzZSB0aGUgb3B0aW9uYWwgeHZhbHVlIGVsZW1lbnQuICovCisgIGwxID0gc2V4cF9maW5kX3Rva2VuIChnZW5wYXJtcywgInh2YWx1ZSIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgeHZhbHVlID0gc2V4cF9udGhfbXBpIChsMSwgMSwgMCk7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgIGlmICgheHZhbHVlKQorICAgICAgICByZXR1cm4gR1BHX0VSUl9CQURfTVBJOworICAgIH0KKworICBpZiAoeHZhbHVlKQorICAgIHsKKyAgICAgIHJjID0gZ2VuZXJhdGVfdXNpbmdfeCAoJnNrLCBuYml0cywgeHZhbHVlLCAmZmFjdG9ycyk7CisgICAgICBtcGlfZnJlZSAoeHZhbHVlKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnZW5lcmF0ZSAoJnNrLCBuYml0cywgJmZhY3RvcnMpOworICAgICAgcmMgPSAwOworICAgIH0KKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKGZhY3RvcnMgJiYgZmFjdG9yc1swXSkKKyAgICB7CisgICAgICBpbnQgbmZhYzsKKyAgICAgIHZvaWQgKiphcmdfbGlzdDsKKyAgICAgIGNoYXIgKmJ1ZmZlciwgKnA7CisKKyAgICAgIGZvciAobmZhYyA9IDA7IGZhY3RvcnNbbmZhY107IG5mYWMrKykKKyAgICAgICAgOworICAgICAgYXJnX2xpc3QgPSB4dHJ5Y2FsbG9jIChuZmFjKzEsIHNpemVvZiAqYXJnX2xpc3QpOworICAgICAgaWYgKCFhcmdfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorICAgICAgYnVmZmVyID0geHRyeW1hbGxvYyAoMzAgKyBuZmFjKjIgKyAyICsgMSk7CisgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgeGZyZWUgKGFyZ19saXN0KTsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisgICAgICBwID0gc3RwY3B5IChidWZmZXIsICIobWlzYy1rZXktaW5mbyhwbTEtZmFjdG9ycyIpOworICAgICAgZm9yKG5mYWMgPSAwOyBmYWN0b3JzW25mYWNdOyBuZmFjKyspCisgICAgICAgIHsKKyAgICAgICAgICBwID0gc3RwY3B5IChwLCAiJW0iKTsKKyAgICAgICAgICBhcmdfbGlzdFtuZmFjXSA9IGZhY3RvcnMgKyBuZmFjOworICAgICAgICB9CisgICAgICBwID0gc3RwY3B5IChwLCAiKSkiKTsKKyAgICAgIHJjID0gc2V4cF9idWlsZF9hcnJheSAoJm1pc2NfaW5mbywgTlVMTCwgYnVmZmVyLCBhcmdfbGlzdCk7CisgICAgICB4ZnJlZSAoYXJnX2xpc3QpOworICAgICAgeGZyZWUgKGJ1ZmZlcik7CisgICAgICBpZiAocmMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHJjID0gc2V4cF9idWlsZCAocl9za2V5LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICIoa2V5LWRhdGEiCisgICAgICAgICAgICAgICAgICAgIiAocHVibGljLWtleSIKKyAgICAgICAgICAgICAgICAgICAiICAoZWxnKHAlbSkoZyVtKSh5JW0pKSkiCisgICAgICAgICAgICAgICAgICAgIiAocHJpdmF0ZS1rZXkiCisgICAgICAgICAgICAgICAgICAgIiAgKGVsZyhwJW0pKGclbSkoeSVtKSh4JW0pKSkiCisgICAgICAgICAgICAgICAgICAgIiAlUykiLAorICAgICAgICAgICAgICAgICAgIHNrLnAsIHNrLmcsIHNrLnksCisgICAgICAgICAgICAgICAgICAgc2sucCwgc2suZywgc2sueSwgc2sueCwKKyAgICAgICAgICAgICAgICAgICBtaXNjX2luZm8pOworCisgbGVhdmU6CisgIG1waV9mcmVlIChzay5wKTsKKyAgbXBpX2ZyZWUgKHNrLmcpOworICBtcGlfZnJlZSAoc2sueSk7CisgIG1waV9mcmVlIChzay54KTsKKyAgc2V4cF9yZWxlYXNlIChtaXNjX2luZm8pOworICBpZiAoZmFjdG9ycykKKyAgICB7CisgICAgICBnY3J5X21waV90ICptcDsKKyAgICAgIGZvciAobXAgPSBmYWN0b3JzOyAqbXA7IG1wKyspCisgICAgICAgIG1waV9mcmVlICgqbXApOworICAgICAgeGZyZWUgKGZhY3RvcnMpOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZWxnX2NoZWNrX3NlY3JldF9rZXkgKGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIEVMR19zZWNyZXRfa2V5IHNrID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworCisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgInBneXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNrLnAsICZzay5nLCAmc2sueSwgJnNrLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKCFjaGVja19zZWNyZXRfa2V5ICgmc2spKQorICAgIHJjID0gR1BHX0VSUl9CQURfU0VDS0VZOworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5wKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLmcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sueSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay54KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZWxnX3Rlc3RrZXkgICAgPT4gJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2VsZ19lbmNyeXB0IChnY3J5X3NleHBfdCAqcl9jaXBoLCBnY3J5X3NleHBfdCBzX2RhdGEsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X21waV90IG1waV9hID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBtcGlfYiA9IE5VTEw7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIEVMR19wdWJsaWNfa2V5IHBrID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCAoJmN0eCwgUFVCS0VZX09QX0VOQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZ19nZXRfbmJpdHMgKGtleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoc19kYXRhLCAmZGF0YSwgJmN0eCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoImVsZ19lbmNyeXB0IGRhdGEiLCBkYXRhKTsKKyAgaWYgKG1waV9pc19vcGFxdWUgKGRhdGEpKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfREFUQTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEV4dHJhY3QgdGhlIGtleS4gICovCisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgInBneSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGsucCwgJnBrLmcsICZway55LCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX2VuY3J5cHQgIHAiLCBway5wKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX2VuY3J5cHQgIGciLCBway5nKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX2VuY3J5cHQgIHkiLCBway55KTsKKyAgICB9CisKKyAgLyogRG8gRWxnYW1hbCBjb21wdXRhdGlvbiBhbmQgYnVpbGQgcmVzdWx0LiAgKi8KKyAgbXBpX2EgPSBtcGlfbmV3ICgwKTsKKyAgbXBpX2IgPSBtcGlfbmV3ICgwKTsKKyAgZG9fZW5jcnlwdCAobXBpX2EsIG1waV9iLCBkYXRhLCAmcGspOworICByYyA9IHNleHBfYnVpbGQgKHJfY2lwaCwgTlVMTCwgIihlbmMtdmFsKGVsZyhhJW0pKGIlbSkpKSIsIG1waV9hLCBtcGlfYik7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKG1waV9hKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKG1waV9iKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsuZyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChway55KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZWxnX2VuY3J5cHQgICA9PiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZWxnX2RlY3J5cHQgKGdjcnlfc2V4cF90ICpyX3BsYWluLCBnY3J5X3NleHBfdCBzX2RhdGEsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkYXRhX2EgPSBOVUxMOworICBnY3J5X21waV90IGRhdGFfYiA9IE5VTEw7CisgIEVMR19zZWNyZXRfa2V5IHNrID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworICBnY3J5X21waV90IHBsYWluID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqdW5wYWQgPSBOVUxMOworICBzaXplX3QgdW5wYWRsZW4gPSAwOworCisgIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKCZjdHgsIFBVQktFWV9PUF9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGdfZ2V0X25iaXRzIChrZXlwYXJtcykpOworCisgIC8qIEV4dHJhY3QgdGhlIGRhdGEuICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfcHJlcGFyc2VfZW5jdmFsIChzX2RhdGEsIGVsZ19uYW1lcywgJmwxLCAmY3R4KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChsMSwgTlVMTCwgImFiIiwgJmRhdGFfYSwgJmRhdGFfYiwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlbGdfZGVjcnlwdCAgZF9hIiwgZGF0YV9hKTsKKyAgICAgIGxvZ19wcmludG1waSAoImVsZ19kZWNyeXB0ICBkX2IiLCBkYXRhX2IpOworICAgIH0KKyAgaWYgKG1waV9pc19vcGFxdWUgKGRhdGFfYSkgfHwgbXBpX2lzX29wYXF1ZSAoZGF0YV9iKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0RBVEE7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBFeHRyYWN0IHRoZSBrZXkuICAqLworICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICJwZ3l4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzay5wLCAmc2suZywgJnNrLnksICZzay54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlbGdfZGVjcnlwdCAgICBwIiwgc2sucCk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlbGdfZGVjcnlwdCAgICBnIiwgc2suZyk7CisgICAgICBsb2dfcHJpbnRtcGkgKCJlbGdfZGVjcnlwdCAgICB5Iiwgc2sueSk7CisgICAgICBpZiAoIWZpcHNfbW9kZSAoKSkKKyAgICAgICAgbG9nX3ByaW50bXBpICgiZWxnX2RlY3J5cHQgICAgeCIsIHNrLngpOworICAgIH0KKworICBwbGFpbiA9IG1waV9zbmV3IChjdHgubmJpdHMpOworICBkZWNyeXB0IChwbGFpbiwgZGF0YV9hLCBkYXRhX2IsICZzayk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludG1waSAoImVsZ19kZWNyeXB0ICByZXMiLCBwbGFpbik7CisKKyAgLyogUmV2ZXJzZSB0aGUgZW5jb2RpbmcgYW5kIGJ1aWxkIHRoZSBzLWV4cHJlc3Npb24uICAqLworICBzd2l0Y2ggKGN0eC5lbmNvZGluZykKKyAgICB7CisgICAgY2FzZSBQVUJLRVlfRU5DX1BLQ1MxOgorICAgICAgcmMgPSBfZ2NyeV9yc2FfcGtjczFfZGVjb2RlX2Zvcl9lbmMgKCZ1bnBhZCwgJnVucGFkbGVuLCBjdHgubmJpdHMsIHBsYWluKTsKKyAgICAgIG1waV9mcmVlIChwbGFpbik7IHBsYWluID0gTlVMTDsKKyAgICAgIGlmICghcmMpCisgICAgICAgIHJjID0gc2V4cF9idWlsZCAocl9wbGFpbiwgTlVMTCwgIih2YWx1ZSAlYikiLCAoaW50KXVucGFkbGVuLCB1bnBhZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFVCS0VZX0VOQ19PQUVQOgorICAgICAgcmMgPSBfZ2NyeV9yc2Ffb2FlcF9kZWNvZGUgKCZ1bnBhZCwgJnVucGFkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5uYml0cywgY3R4Lmhhc2hfYWxnbywgcGxhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxhYmVsLCBjdHgubGFiZWxsZW4pOworICAgICAgbXBpX2ZyZWUgKHBsYWluKTsgcGxhaW4gPSBOVUxMOworICAgICAgaWYgKCFyYykKKyAgICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3BsYWluLCBOVUxMLCAiKHZhbHVlICViKSIsIChpbnQpdW5wYWRsZW4sIHVucGFkKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFJhdyBmb3JtYXQuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGFzc3VtZSBhCisgICAgICAgICBzaWduZWQgbXBpIGJ5IHVzaW5nIHRoZSBzZXhwIGZvcm1hdCBzdHJpbmcgIiVtIi4gICovCisgICAgICByYyA9IHNleHBfYnVpbGQgKHJfcGxhaW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIChjdHguZmxhZ3MgJiBQVUJLRVlfRkxBR19MRUdBQ1lSRVNVTFQpCisgICAgICAgICAgICAgICAgICAgICAgID8gIiVtIiA6ICIodmFsdWUgJW0pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4pOworICAgICAgYnJlYWs7CisgICAgfQorCisKKyBsZWF2ZToKKyAgeGZyZWUgKHVucGFkKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBsYWluKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay55KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLngpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YV9hKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGFfYik7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZWxnX2RlY3J5cHQgICAgPT4gJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2VsZ19zaWduIChnY3J5X3NleHBfdCAqcl9zaWcsIGdjcnlfc2V4cF90IHNfZGF0YSwgZ2NyeV9zZXhwX3Qga2V5cGFybXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIEVMR19zZWNyZXRfa2V5IHNrID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworICBnY3J5X21waV90IHNpZ19yID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBzaWdfcyA9IE5VTEw7CisKKyAgX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCAoJmN0eCwgUFVCS0VZX09QX1NJR04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZ19nZXRfbmJpdHMgKGtleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoc19kYXRhLCAmZGF0YSwgJmN0eCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoImVsZ19zaWduICAgZGF0YSIsIGRhdGEpOworICBpZiAobXBpX2lzX29wYXF1ZSAoZGF0YSkpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9EQVRBOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUga2V5LiAgKi8KKyAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAicGd5eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2sucCwgJnNrLmcsICZzay55LCAmc2sueCwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZ19zaWduICAgICAgcCIsIHNrLnApOworICAgICAgbG9nX21waWR1bXAgKCJlbGdfc2lnbiAgICAgIGciLCBzay5nKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX3NpZ24gICAgICB5Iiwgc2sueSk7CisgICAgICBpZiAoIWZpcHNfbW9kZSAoKSkKKyAgICAgICAgbG9nX21waWR1bXAgKCJlbGdfc2lnbiAgICAgIHgiLCBzay54KTsKKyAgICB9CisKKyAgc2lnX3IgPSBtcGlfbmV3ICgwKTsKKyAgc2lnX3MgPSBtcGlfbmV3ICgwKTsKKyAgc2lnbiAoc2lnX3IsIHNpZ19zLCBkYXRhLCAmc2spOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZ19zaWduICBzaWdfciIsIHNpZ19yKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX3NpZ24gIHNpZ19zIiwgc2lnX3MpOworICAgIH0KKyAgcmMgPSBzZXhwX2J1aWxkIChyX3NpZywgTlVMTCwgIihzaWctdmFsKGVsZyhyJU0pKHMlTSkpKSIsIHNpZ19yLCBzaWdfcyk7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNpZ19yKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNpZ19zKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZyk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay55KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLngpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKCZjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJlbGdfc2lnbiAgICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitlbGdfdmVyaWZ5IChnY3J5X3NleHBfdCBzX3NpZywgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBzX2tleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X3NleHBfdCBsMSA9IE5VTEw7CisgIGdjcnlfbXBpX3Qgc2lnX3IgPSBOVUxMOworICBnY3J5X21waV90IHNpZ19zID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkYXRhID0gTlVMTDsKKyAgRUxHX3B1YmxpY19rZXkgcGsgPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICBfZ2NyeV9wa191dGlsX2luaXRfZW5jb2RpbmdfY3R4ICgmY3R4LCBQVUJLRVlfT1BfVkVSSUZZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGdfZ2V0X25iaXRzIChzX2tleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoc19kYXRhLCAmZGF0YSwgJmN0eCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoImVsZ192ZXJpZnkgZGF0YSIsIGRhdGEpOworICBpZiAobXBpX2lzX29wYXF1ZSAoZGF0YSkpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9EQVRBOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUgc2lnbmF0dXJlIHZhbHVlLiAgKi8KKyAgcmMgPSBfZ2NyeV9wa191dGlsX3ByZXBhcnNlX3NpZ3ZhbCAoc19zaWcsIGVsZ19uYW1lcywgJmwxLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChsMSwgTlVMTCwgInJzIiwgJnNpZ19yLCAmc2lnX3MsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJlbGdfdmVyaWZ5ICBzX3IiLCBzaWdfcik7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZ192ZXJpZnkgIHNfcyIsIHNpZ19zKTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUga2V5LiAgKi8KKyAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKHNfa2V5cGFybXMsIE5VTEwsICJwZ3kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBrLnAsICZway5nLCAmcGsueSwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfbXBpZHVtcCAoImVsZ192ZXJpZnkgICAgcCIsIHBrLnApOworICAgICAgbG9nX21waWR1bXAgKCJlbGdfdmVyaWZ5ICAgIGciLCBway5nKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiZWxnX3ZlcmlmeSAgICB5IiwgcGsueSk7CisgICAgfQorCisgIC8qIFZlcmlmeSB0aGUgc2lnbmF0dXJlLiAgKi8KKyAgaWYgKCF2ZXJpZnkgKHNpZ19yLCBzaWdfcywgZGF0YSwgJnBrKSkKKyAgICByYyA9IEdQR19FUlJfQkFEX1NJR05BVFVSRTsKKworIGxlYXZlOgorICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsucCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChway5nKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBrLnkpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWdfcyk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZWxnX3ZlcmlmeSAgICA9PiAlc1xuIiwgcmM/Z3BnX3N0cmVycm9yIChyYyk6Ikdvb2QiKTsKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBrZXkgZGVzY3JpYmVkIGJ5IFBBUk1TLiAgT24gZXJyb3IKKyAqIDAgaXMgcmV0dXJuZWQuICBUaGUgZm9ybWF0IG9mIFBBUk1TIHN0YXJ0cyB3aXRoIHRoZSBhbGdvcml0aG0gbmFtZTsKKyAqIGZvciBleGFtcGxlOgorICoKKyAqICAgKGRzYQorICogICAgIChwIDxtcGk+KQorICogICAgIChnIDxtcGk+KQorICogICAgICh5IDxtcGk+KSkKKyAqCisgKiBNb3JlIHBhcmFtZXRlcnMgbWF5IGJlIGdpdmVuIGJ1dCB3ZSBvbmx5IG5lZWQgUCBoZXJlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitlbGdfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBwYXJtcykKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGdjcnlfbXBpX3QgcDsKKyAgdW5zaWduZWQgaW50IG5iaXRzOworCisgIGwxID0gc2V4cF9maW5kX3Rva2VuIChwYXJtcywgInAiLCAxKTsKKyAgaWYgKCFsMSkKKyAgICByZXR1cm4gMDsgLyogUGFyYW1ldGVyIFAgbm90IGZvdW5kLiAgKi8KKworICBwPSBzZXhwX250aF9tcGkgKGwxLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgbmJpdHMgPSBwPyBtcGlfZ2V0X25iaXRzIChwKSA6IDA7CisgIF9nY3J5X21waV9yZWxlYXNlIChwKTsKKyAgcmV0dXJuIG5iaXRzOworfQorCisKKwwKK2djcnlfcGtfc3BlY190IF9nY3J5X3B1YmtleV9zcGVjX2VsZyA9CisgIHsKKyAgICBHQ1JZX1BLX0VMRywgeyAwLCAwIH0sCisgICAgKEdDUllfUEtfVVNBR0VfU0lHTiB8IEdDUllfUEtfVVNBR0VfRU5DUiksCisgICAgIkVMRyIsIGVsZ19uYW1lcywKKyAgICAicGd5IiwgInBneXgiLCAiYWIiLCAicnMiLCAicGd5IiwKKyAgICBlbGdfZ2VuZXJhdGUsCisgICAgZWxnX2NoZWNrX3NlY3JldF9rZXksCisgICAgZWxnX2VuY3J5cHQsCisgICAgZWxnX2RlY3J5cHQsCisgICAgZWxnX3NpZ24sCisgICAgZWxnX3ZlcmlmeSwKKyAgICBlbGdfZ2V0X25iaXRzLAorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2dvc3QuaCBiL2NpcGhlci9nb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1OGViMgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9nb3N0LmgKQEAgLTAsMCArMSwzMSBAQAorLyogZ29zdC5oIC0gR09TVCAyODE0Ny04OSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9HQ1JZX0dPU1RfSAorI2RlZmluZSBfR0NSWV9HT1NUX0gKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1MzIga2V5WzhdOworfSBHT1NUMjgxNDdfY29udGV4dDsKKworLyogVGhpcyBpcyBhIHNpbXBsZSBpbnRlcmZhY2UgdGhhdCB3aWxsIGJlIHVzZWQgYnkgR09TVCBSIDM0LjExLTk0ICovCitleHRlcm4gdW5zaWduZWQgaW50IF9nY3J5X2dvc3RfZW5jX29uZSAoR09TVDI4MTQ3X2NvbnRleHQgKmMsIGNvbnN0IGJ5dGUgKmtleSwKKyAgICBieXRlICpvdXQsIGJ5dGUgKmluKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jaXBoZXIvZ29zdDI4MTQ3LmMgYi9jaXBoZXIvZ29zdDI4MTQ3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5NDIwOQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9nb3N0MjgxNDcuYwpAQCAtMCwwICsxLDQ1MiBAQAorLyogZ29zdDI4MTQ3LmMgLSBHT1NUIDI4MTQ3LTg5IGltcGxlbWVudGF0aW9uIGZvciBMaWJnY3J5cHQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogR09TVCAyODE0Ny04OSBkZWZpbmVzIHNldmVyYWwgbW9kZXMgb2YgZW5jcnlwdGlvbjoKKyAqIC0gRUNCIHdoaWNoIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIGtleSB0cmFuc2ZlcgorICogLSBDRkIgbW9kZQorICogLSBPRkItbGlrZSBtb2RlIHdpdGggYWRkaXRpb25hbCB0cmFuc2Zvcm1hdGlvbiBvbiBrZXlzdHJlYW0KKyAqICAgUkZDIDU4MzAgbmFtZXMgdGhpcyAnY291bnRlciBlbmNyeXB0aW9uJyBtb2RlCisgKiAgIE9yaWdpbmFsIEdPU1QgdGV4dCB1c2VzIHRoZSB0ZXJtICdnYW1taXJvdmFuaWUnCisgKiAtIE1BQyBtb2RlCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIEVDQiBhbmQgQ0ZCIG1vZGVzIHZpYSB1c3VhbCBsaWJnY3J5cHQgaGFuZGxpbmcuCisgKiBPRkItbGlrZSBhbmQgTUFDIG1vZGVzIGFyZSB1bnN1cHBvcnRlZC4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworCisvKiBUaGlzIGlzIGFuIHMtYm94IGZyb20gUkZDNDM1NywgbmFtZWQgR29zdFIzNDExLTk0LVRlc3RQYXJhbVNldAorICogRm9yIG5vdyBpdCBpcyB0aGUgb25seSBzLWJveCBzdXBwb3J0ZWQsIGFzIGxpYmdjcnlwdCBsYWNrcyBtZWNoYW5pc20KKyAqIGZvciBwYXNzaW5nIHBhcmFtZXRlcnMgdG8gY2lwaGVyIGluIGEgdXNlZnVsbCB3YXkuCisgKiBTLWJveGVzIHdhcyBtb2RpZmllZCBmcm9tIDQtPjQgdG8gOC0+OCBiaXRzIHVuaXQgd2l0aCBwcmVjYWxjdWxhdGVkCisgKiBzaGlmdCBhbmQgcm90YXRpb24gYnkgb3B0aW1pc2F0aW9uIHJlYXNvbnMuCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgdGVzdF9zYm94WzRdWzI1Nl0gPSB7CisgIC8qIDAgKi8KKyAgeyAweDAwMDcyMDAwLCAweDAwMDc1MDAwLCAweDAwMDc0ODAwLCAweDAwMDcxMDAwLAorICAgIDB4MDAwNzY4MDAsIDB4MDAwNzQwMDAsIDB4MDAwNzAwMDAsIDB4MDAwNzcwMDAsCisgICAgMHgwMDA3MzAwMCwgMHgwMDA3NTgwMCwgMHgwMDA3MDgwMCwgMHgwMDA3NjAwMCwKKyAgICAweDAwMDczODAwLCAweDAwMDc3ODAwLCAweDAwMDcyODAwLCAweDAwMDcxODAwLAorICAgIDB4MDAwNWEwMDAsIDB4MDAwNWQwMDAsIDB4MDAwNWM4MDAsIDB4MDAwNTkwMDAsCisgICAgMHgwMDA1ZTgwMCwgMHgwMDA1YzAwMCwgMHgwMDA1ODAwMCwgMHgwMDA1ZjAwMCwKKyAgICAweDAwMDViMDAwLCAweDAwMDVkODAwLCAweDAwMDU4ODAwLCAweDAwMDVlMDAwLAorICAgIDB4MDAwNWI4MDAsIDBYMDAwNUY4MDAsIDB4MDAwNWE4MDAsIDB4MDAwNTk4MDAsCisgICAgMHgwMDAyMjAwMCwgMHgwMDAyNTAwMCwgMHgwMDAyNDgwMCwgMHgwMDAyMTAwMCwKKyAgICAweDAwMDI2ODAwLCAweDAwMDI0MDAwLCAweDAwMDIwMDAwLCAweDAwMDI3MDAwLAorICAgIDBYMDAwMjMwMDAsIDB4MDAwMjU4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjYwMDAsCisgICAgMHgwMDAyMzgwMCwgMHgwMDAyNzgwMCwgMHgwMDAyMjgwMCwgMHgwMDAyMTgwMCwKKyAgICAweDAwMDYyMDAwLCAweDAwMDY1MDAwLCAweDAwMDY0ODAwLCAweDAwMDYxMDAwLAorICAgIDB4MDAwNjY4MDAsIDB4MDAwNjQwMDAsIDB4MDAwNjAwMDAsIDB4MDAwNjcwMDAsCisgICAgMHgwMDA2MzAwMCwgMHgwMDA2NTgwMCwgMHgwMDA2MDgwMCwgMHgwMDA2NjAwMCwKKyAgICAweDAwMDYzODAwLCAweDAwMDY3ODAwLCAweDAwMDYyODAwLCAweDAwMDYxODAwLAorICAgIDB4MDAwMzIwMDAsIDB4MDAwMzUwMDAsIDB4MDAwMzQ4MDAsIDB4MDAwMzEwMDAsCisgICAgMHgwMDAzNjgwMCwgMHgwMDAzNDAwMCwgMHgwMDAzMDAwMCwgMHgwMDAzNzAwMCwKKyAgICAweDAwMDMzMDAwLCAweDAwMDM1ODAwLCAweDAwMDMwODAwLCAweDAwMDM2MDAwLAorICAgIDB4MDAwMzM4MDAsIDB4MDAwMzc4MDAsIDB4MDAwMzI4MDAsIDB4MDAwMzE4MDAsCisgICAgMHgwMDA2YTAwMCwgMHgwMDA2ZDAwMCwgMHgwMDA2YzgwMCwgMHgwMDA2OTAwMCwKKyAgICAweDAwMDZlODAwLCAweDAwMDZjMDAwLCAweDAwMDY4MDAwLCAweDAwMDZmMDAwLAorICAgIDB4MDAwNmIwMDAsIDB4MDAwNmQ4MDAsIDB4MDAwNjg4MDAsIDB4MDAwNmUwMDAsCisgICAgMHgwMDA2YjgwMCwgMHgwMDA2ZjgwMCwgMHgwMDA2YTgwMCwgMHgwMDA2OTgwMCwKKyAgICAweDAwMDdhMDAwLCAweDAwMDdkMDAwLCAweDAwMDdjODAwLCAweDAwMDc5MDAwLAorICAgIDB4MDAwN2U4MDAsIDB4MDAwN2MwMDAsIDB4MDAwNzgwMDAsIDB4MDAwN2YwMDAsCisgICAgMHgwMDA3YjAwMCwgMHgwMDA3ZDgwMCwgMHgwMDA3ODgwMCwgMHgwMDA3ZTAwMCwKKyAgICAweDAwMDdiODAwLCAweDAwMDdmODAwLCAweDAwMDdhODAwLCAweDAwMDc5ODAwLAorICAgIDB4MDAwNTIwMDAsIDB4MDAwNTUwMDAsIDB4MDAwNTQ4MDAsIDB4MDAwNTEwMDAsCisgICAgMHgwMDA1NjgwMCwgMHgwMDA1NDAwMCwgMHgwMDA1MDAwMCwgMHgwMDA1NzAwMCwKKyAgICAweDAwMDUzMDAwLCAweDAwMDU1ODAwLCAweDAwMDUwODAwLCAweDAwMDU2MDAwLAorICAgIDB4MDAwNTM4MDAsIDB4MDAwNTc4MDAsIDB4MDAwNTI4MDAsIDB4MDAwNTE4MDAsCisgICAgMHgwMDAxMjAwMCwgMHgwMDAxNTAwMCwgMHgwMDAxNDgwMCwgMHgwMDAxMTAwMCwKKyAgICAweDAwMDE2ODAwLCAweDAwMDE0MDAwLCAweDAwMDEwMDAwLCAweDAwMDE3MDAwLAorICAgIDB4MDAwMTMwMDAsIDB4MDAwMTU4MDAsIDB4MDAwMTA4MDAsIDB4MDAwMTYwMDAsCisgICAgMHgwMDAxMzgwMCwgMHgwMDAxNzgwMCwgMHgwMDAxMjgwMCwgMHgwMDAxMTgwMCwKKyAgICAweDAwMDFhMDAwLCAweDAwMDFkMDAwLCAweDAwMDFjODAwLCAweDAwMDE5MDAwLAorICAgIDB4MDAwMWU4MDAsIDB4MDAwMWMwMDAsIDB4MDAwMTgwMDAsIDB4MDAwMWYwMDAsCisgICAgMHgwMDAxYjAwMCwgMHgwMDAxZDgwMCwgMHgwMDAxODgwMCwgMHgwMDAxZTAwMCwKKyAgICAweDAwMDFiODAwLCAweDAwMDFmODAwLCAweDAwMDFhODAwLCAweDAwMDE5ODAwLAorICAgIDB4MDAwNDIwMDAsIDB4MDAwNDUwMDAsIDB4MDAwNDQ4MDAsIDB4MDAwNDEwMDAsCisgICAgMHgwMDA0NjgwMCwgMHgwMDA0NDAwMCwgMHgwMDA0MDAwMCwgMHgwMDA0NzAwMCwKKyAgICAweDAwMDQzMDAwLCAweDAwMDQ1ODAwLCAweDAwMDQwODAwLCAweDAwMDQ2MDAwLAorICAgIDB4MDAwNDM4MDAsIDB4MDAwNDc4MDAsIDB4MDAwNDI4MDAsIDB4MDAwNDE4MDAsCisgICAgMHgwMDAwYTAwMCwgMHgwMDAwZDAwMCwgMHgwMDAwYzgwMCwgMHgwMDAwOTAwMCwKKyAgICAweDAwMDBlODAwLCAweDAwMDBjMDAwLCAweDAwMDA4MDAwLCAweDAwMDBmMDAwLAorICAgIDB4MDAwMGIwMDAsIDB4MDAwMGQ4MDAsIDB4MDAwMDg4MDAsIDB4MDAwMGUwMDAsCisgICAgMHgwMDAwYjgwMCwgMHgwMDAwZjgwMCwgMHgwMDAwYTgwMCwgMHgwMDAwOTgwMCwKKyAgICAweDAwMDAyMDAwLCAweDAwMDA1MDAwLCAweDAwMDA0ODAwLCAweDAwMDAxMDAwLAorICAgIDB4MDAwMDY4MDAsIDB4MDAwMDQwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcwMDAsCisgICAgMHgwMDAwMzAwMCwgMHgwMDAwNTgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwNjAwMCwKKyAgICAweDAwMDAzODAwLCAweDAwMDA3ODAwLCAweDAwMDAyODAwLCAweDAwMDAxODAwLAorICAgIDB4MDAwM2EwMDAsIDB4MDAwM2QwMDAsIDB4MDAwM2M4MDAsIDB4MDAwMzkwMDAsCisgICAgMHgwMDAzZTgwMCwgMHgwMDAzYzAwMCwgMHgwMDAzODAwMCwgMHgwMDAzZjAwMCwKKyAgICAweDAwMDNiMDAwLCAweDAwMDNkODAwLCAweDAwMDM4ODAwLCAweDAwMDNlMDAwLAorICAgIDB4MDAwM2I4MDAsIDB4MDAwM2Y4MDAsIDB4MDAwM2E4MDAsIDB4MDAwMzk4MDAsCisgICAgMHgwMDAyYTAwMCwgMHgwMDAyZDAwMCwgMHgwMDAyYzgwMCwgMHgwMDAyOTAwMCwKKyAgICAweDAwMDJlODAwLCAweDAwMDJjMDAwLCAweDAwMDI4MDAwLCAweDAwMDJmMDAwLAorICAgIDB4MDAwMmIwMDAsIDB4MDAwMmQ4MDAsIDB4MDAwMjg4MDAsIDB4MDAwMmUwMDAsCisgICAgMHgwMDAyYjgwMCwgMHgwMDAyZjgwMCwgMHgwMDAyYTgwMCwgMHgwMDAyOTgwMCwKKyAgICAweDAwMDRhMDAwLCAweDAwMDRkMDAwLCAweDAwMDRjODAwLCAweDAwMDQ5MDAwLAorICAgIDB4MDAwNGU4MDAsIDB4MDAwNGMwMDAsIDB4MDAwNDgwMDAsIDB4MDAwNGYwMDAsCisgICAgMHgwMDA0YjAwMCwgMHgwMDA0ZDgwMCwgMHgwMDA0ODgwMCwgMHgwMDA0ZTAwMCwKKyAgICAweDAwMDRiODAwLCAweDAwMDRmODAwLCAweDAwMDRhODAwLCAweDAwMDQ5ODAwIH0sCisgIC8qIDEgKi8KKyAgeyAweDAzYTgwMDAwLCAweDAzYzAwMDAwLCAweDAzODgwMDAwLCAweDAzZTgwMDAwLAorICAgIDB4MDNkMDAwMDAsIDB4MDM5ODAwMDAsIDB4MDNhMDAwMDAsIDB4MDM5MDAwMDAsCisgICAgMHgwM2YwMDAwMCwgMHgwM2Y4MDAwMCwgMHgwM2UwMDAwMCwgMHgwM2I4MDAwMCwKKyAgICAweDAzYjAwMDAwLCAweDAzODAwMDAwLCAweDAzYzgwMDAwLCAweDAzZDgwMDAwLAorICAgIDB4MDZhODAwMDAsIDB4MDZjMDAwMDAsIDB4MDY4ODAwMDAsIDB4MDZlODAwMDAsCisgICAgMHgwNmQwMDAwMCwgMHgwNjk4MDAwMCwgMHgwNmEwMDAwMCwgMHgwNjkwMDAwMCwKKyAgICAweDA2ZjAwMDAwLCAweDA2ZjgwMDAwLCAweDA2ZTAwMDAwLCAweDA2YjgwMDAwLAorICAgIDB4MDZiMDAwMDAsIDB4MDY4MDAwMDAsIDB4MDZjODAwMDAsIDB4MDZkODAwMDAsCisgICAgMHgwNTI4MDAwMCwgMHgwNTQwMDAwMCwgMHgwNTA4MDAwMCwgMHgwNTY4MDAwMCwKKyAgICAweDA1NTAwMDAwLCAweDA1MTgwMDAwLCAweDA1MjAwMDAwLCAweDA1MTAwMDAwLAorICAgIDB4MDU3MDAwMDAsIDB4MDU3ODAwMDAsIDB4MDU2MDAwMDAsIDB4MDUzODAwMDAsCisgICAgMHgwNTMwMDAwMCwgMHgwNTAwMDAwMCwgMHgwNTQ4MDAwMCwgMHgwNTU4MDAwMCwKKyAgICAweDAwYTgwMDAwLCAweDAwYzAwMDAwLCAweDAwODgwMDAwLCAweDAwZTgwMDAwLAorICAgIDB4MDBkMDAwMDAsIDB4MDA5ODAwMDAsIDB4MDBhMDAwMDAsIDB4MDA5MDAwMDAsCisgICAgMHgwMGYwMDAwMCwgMHgwMGY4MDAwMCwgMHgwMGUwMDAwMCwgMHgwMGI4MDAwMCwKKyAgICAweDAwYjAwMDAwLCAweDAwODAwMDAwLCAweDAwYzgwMDAwLCAweDAwZDgwMDAwLAorICAgIDB4MDAyODAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwODAwMDAsIDB4MDA2ODAwMDAsCisgICAgMHgwMDUwMDAwMCwgMHgwMDE4MDAwMCwgMHgwMDIwMDAwMCwgMHgwMDEwMDAwMCwKKyAgICAweDAwNzAwMDAwLCAweDAwNzgwMDAwLCAweDAwNjAwMDAwLCAweDAwMzgwMDAwLAorICAgIDB4MDAzMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA0ODAwMDAsIDB4MDA1ODAwMDAsCisgICAgMHgwNDI4MDAwMCwgMHgwNDQwMDAwMCwgMHgwNDA4MDAwMCwgMHgwNDY4MDAwMCwKKyAgICAweDA0NTAwMDAwLCAweDA0MTgwMDAwLCAweDA0MjAwMDAwLCAweDA0MTAwMDAwLAorICAgIDB4MDQ3MDAwMDAsIDB4MDQ3ODAwMDAsIDB4MDQ2MDAwMDAsIDB4MDQzODAwMDAsCisgICAgMHgwNDMwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDU4MDAwMCwKKyAgICAweDA0YTgwMDAwLCAweDA0YzAwMDAwLCAweDA0ODgwMDAwLCAweDA0ZTgwMDAwLAorICAgIDB4MDRkMDAwMDAsIDB4MDQ5ODAwMDAsIDB4MDRhMDAwMDAsIDB4MDQ5MDAwMDAsCisgICAgMHgwNGYwMDAwMCwgMHgwNGY4MDAwMCwgMHgwNGUwMDAwMCwgMHgwNGI4MDAwMCwKKyAgICAweDA0YjAwMDAwLCAweDA0ODAwMDAwLCAweDA0YzgwMDAwLCAweDA0ZDgwMDAwLAorICAgIDB4MDdhODAwMDAsIDB4MDdjMDAwMDAsIDB4MDc4ODAwMDAsIDB4MDdlODAwMDAsCisgICAgMHgwN2QwMDAwMCwgMHgwNzk4MDAwMCwgMHgwN2EwMDAwMCwgMHgwNzkwMDAwMCwKKyAgICAweDA3ZjAwMDAwLCAweDA3ZjgwMDAwLCAweDA3ZTAwMDAwLCAweDA3YjgwMDAwLAorICAgIDB4MDdiMDAwMDAsIDB4MDc4MDAwMDAsIDB4MDdjODAwMDAsIDB4MDdkODAwMDAsCisgICAgMHgwNzI4MDAwMCwgMHgwNzQwMDAwMCwgMHgwNzA4MDAwMCwgMHgwNzY4MDAwMCwKKyAgICAweDA3NTAwMDAwLCAweDA3MTgwMDAwLCAweDA3MjAwMDAwLCAweDA3MTAwMDAwLAorICAgIDB4MDc3MDAwMDAsIDB4MDc3ODAwMDAsIDB4MDc2MDAwMDAsIDB4MDczODAwMDAsCisgICAgMHgwNzMwMDAwMCwgMHgwNzAwMDAwMCwgMHgwNzQ4MDAwMCwgMHgwNzU4MDAwMCwKKyAgICAweDAyMjgwMDAwLCAweDAyNDAwMDAwLCAweDAyMDgwMDAwLCAweDAyNjgwMDAwLAorICAgIDB4MDI1MDAwMDAsIDB4MDIxODAwMDAsIDB4MDIyMDAwMDAsIDB4MDIxMDAwMDAsCisgICAgMHgwMjcwMDAwMCwgMHgwMjc4MDAwMCwgMHgwMjYwMDAwMCwgMHgwMjM4MDAwMCwKKyAgICAweDAyMzAwMDAwLCAweDAyMDAwMDAwLCAweDAyNDgwMDAwLCAweDAyNTgwMDAwLAorICAgIDB4MDMyODAwMDAsIDB4MDM0MDAwMDAsIDB4MDMwODAwMDAsIDB4MDM2ODAwMDAsCisgICAgMHgwMzUwMDAwMCwgMHgwMzE4MDAwMCwgMHgwMzIwMDAwMCwgMHgwMzEwMDAwMCwKKyAgICAweDAzNzAwMDAwLCAweDAzNzgwMDAwLCAweDAzNjAwMDAwLCAweDAzMzgwMDAwLAorICAgIDB4MDMzMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDM0ODAwMDAsIDB4MDM1ODAwMDAsCisgICAgMHgwNjI4MDAwMCwgMHgwNjQwMDAwMCwgMHgwNjA4MDAwMCwgMHgwNjY4MDAwMCwKKyAgICAweDA2NTAwMDAwLCAweDA2MTgwMDAwLCAweDA2MjAwMDAwLCAweDA2MTAwMDAwLAorICAgIDB4MDY3MDAwMDAsIDB4MDY3ODAwMDAsIDB4MDY2MDAwMDAsIDB4MDYzODAwMDAsCisgICAgMHgwNjMwMDAwMCwgMHgwNjAwMDAwMCwgMHgwNjQ4MDAwMCwgMHgwNjU4MDAwMCwKKyAgICAweDA1YTgwMDAwLCAweDA1YzAwMDAwLCAweDA1ODgwMDAwLCAweDA1ZTgwMDAwLAorICAgIDB4MDVkMDAwMDAsIDB4MDU5ODAwMDAsIDB4MDVhMDAwMDAsIDB4MDU5MDAwMDAsCisgICAgMHgwNWYwMDAwMCwgMHgwNWY4MDAwMCwgMHgwNWUwMDAwMCwgMHgwNWI4MDAwMCwKKyAgICAweDA1YjAwMDAwLCAweDA1ODAwMDAwLCAweDA1YzgwMDAwLCAweDA1ZDgwMDAwLAorICAgIDB4MDEyODAwMDAsIDB4MDE0MDAwMDAsIDB4MDEwODAwMDAsIDB4MDE2ODAwMDAsCisgICAgMHgwMTUwMDAwMCwgMHgwMTE4MDAwMCwgMHgwMTIwMDAwMCwgMHgwMTEwMDAwMCwKKyAgICAweDAxNzAwMDAwLCAweDAxNzgwMDAwLCAweDAxNjAwMDAwLCAweDAxMzgwMDAwLAorICAgIDB4MDEzMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDE0ODAwMDAsIDB4MDE1ODAwMDAsCisgICAgMHgwMmE4MDAwMCwgMHgwMmMwMDAwMCwgMHgwMjg4MDAwMCwgMHgwMmU4MDAwMCwKKyAgICAweDAyZDAwMDAwLCAweDAyOTgwMDAwLCAweDAyYTAwMDAwLCAweDAyOTAwMDAwLAorICAgIDB4MDJmMDAwMDAsIDB4MDJmODAwMDAsIDB4MDJlMDAwMDAsIDB4MDJiODAwMDAsCisgICAgMHgwMmIwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMmM4MDAwMCwgMHgwMmQ4MDAwMCwKKyAgICAweDAxYTgwMDAwLCAweDAxYzAwMDAwLCAweDAxODgwMDAwLCAweDAxZTgwMDAwLAorICAgIDB4MDFkMDAwMDAsIDB4MDE5ODAwMDAsIDB4MDFhMDAwMDAsIDB4MDE5MDAwMDAsCisgICAgMHgwMWYwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMWUwMDAwMCwgMHgwMWI4MDAwMCwKKyAgICAweDAxYjAwMDAwLCAweDAxODAwMDAwLCAweDAxYzgwMDAwLCAweDAxZDgwMDAwIH0sCisgIC8qIDIgKi8KKyAgeyAweDMwMDAwMDAyLCAweDYwMDAwMDAyLCAweDM4MDAwMDAyLCAweDA4MDAwMDAyLAorICAgIDB4MjgwMDAwMDIsIDB4NzgwMDAwMDIsIDB4NjgwMDAwMDIsIDB4NDAwMDAwMDIsCisgICAgMHgyMDAwMDAwMiwgMHg1MDAwMDAwMiwgMHg0ODAwMDAwMiwgMHg3MDAwMDAwMiwKKyAgICAweDAwMDAwMDAyLCAweDE4MDAwMDAyLCAweDU4MDAwMDAyLCAweDEwMDAwMDAyLAorICAgIDB4YjAwMDAwMDUsIDB4ZTAwMDAwMDUsIDB4YjgwMDAwMDUsIDB4ODgwMDAwMDUsCisgICAgMHhhODAwMDAwNSwgMHhmODAwMDAwNSwgMHhlODAwMDAwNSwgMHhjMDAwMDAwNSwKKyAgICAweGEwMDAwMDA1LCAweGQwMDAwMDA1LCAweGM4MDAwMDA1LCAweGYwMDAwMDA1LAorICAgIDB4ODAwMDAwMDUsIDB4OTgwMDAwMDUsIDB4ZDgwMDAwMDUsIDB4OTAwMDAwMDUsCisgICAgMHgzMDAwMDAwNSwgMHg2MDAwMDAwNSwgMHgzODAwMDAwNSwgMHgwODAwMDAwNSwKKyAgICAweDI4MDAwMDA1LCAweDc4MDAwMDA1LCAweDY4MDAwMDA1LCAweDQwMDAwMDA1LAorICAgIDB4MjAwMDAwMDUsIDB4NTAwMDAwMDUsIDB4NDgwMDAwMDUsIDB4NzAwMDAwMDUsCisgICAgMHgwMDAwMDAwNSwgMHgxODAwMDAwNSwgMHg1ODAwMDAwNSwgMHgxMDAwMDAwNSwKKyAgICAweDMwMDAwMDAwLCAweDYwMDAwMDAwLCAweDM4MDAwMDAwLCAweDA4MDAwMDAwLAorICAgIDB4MjgwMDAwMDAsIDB4NzgwMDAwMDAsIDB4NjgwMDAwMDAsIDB4NDAwMDAwMDAsCisgICAgMHgyMDAwMDAwMCwgMHg1MDAwMDAwMCwgMHg0ODAwMDAwMCwgMHg3MDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLCAweDE4MDAwMDAwLCAweDU4MDAwMDAwLCAweDEwMDAwMDAwLAorICAgIDB4YjAwMDAwMDMsIDB4ZTAwMDAwMDMsIDB4YjgwMDAwMDMsIDB4ODgwMDAwMDMsCisgICAgMHhhODAwMDAwMywgMHhmODAwMDAwMywgMHhlODAwMDAwMywgMHhjMDAwMDAwMywKKyAgICAweGEwMDAwMDAzLCAweGQwMDAwMDAzLCAweGM4MDAwMDAzLCAweGYwMDAwMDAzLAorICAgIDB4ODAwMDAwMDMsIDB4OTgwMDAwMDMsIDB4ZDgwMDAwMDMsIDB4OTAwMDAwMDMsCisgICAgMHgzMDAwMDAwMSwgMHg2MDAwMDAwMSwgMHgzODAwMDAwMSwgMHgwODAwMDAwMSwKKyAgICAweDI4MDAwMDAxLCAweDc4MDAwMDAxLCAweDY4MDAwMDAxLCAweDQwMDAwMDAxLAorICAgIDB4MjAwMDAwMDEsIDB4NTAwMDAwMDEsIDB4NDgwMDAwMDEsIDB4NzAwMDAwMDEsCisgICAgMHgwMDAwMDAwMSwgMHgxODAwMDAwMSwgMHg1ODAwMDAwMSwgMHgxMDAwMDAwMSwKKyAgICAweGIwMDAwMDAwLCAweGUwMDAwMDAwLCAweGI4MDAwMDAwLCAweDg4MDAwMDAwLAorICAgIDB4YTgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZTgwMDAwMDAsIDB4YzAwMDAwMDAsCisgICAgMHhhMDAwMDAwMCwgMHhkMDAwMDAwMCwgMHhjODAwMDAwMCwgMHhmMDAwMDAwMCwKKyAgICAweDgwMDAwMDAwLCAweDk4MDAwMDAwLCAweGQ4MDAwMDAwLCAweDkwMDAwMDAwLAorICAgIDB4YjAwMDAwMDYsIDB4ZTAwMDAwMDYsIDB4YjgwMDAwMDYsIDB4ODgwMDAwMDYsCisgICAgMHhhODAwMDAwNiwgMHhmODAwMDAwNiwgMHhlODAwMDAwNiwgMHhjMDAwMDAwNiwKKyAgICAweGEwMDAwMDA2LCAweGQwMDAwMDA2LCAweGM4MDAwMDA2LCAweGYwMDAwMDA2LAorICAgIDB4ODAwMDAwMDYsIDB4OTgwMDAwMDYsIDB4ZDgwMDAwMDYsIDB4OTAwMDAwMDYsCisgICAgMHhiMDAwMDAwMSwgMHhlMDAwMDAwMSwgMHhiODAwMDAwMSwgMHg4ODAwMDAwMSwKKyAgICAweGE4MDAwMDAxLCAweGY4MDAwMDAxLCAweGU4MDAwMDAxLCAweGMwMDAwMDAxLAorICAgIDB4YTAwMDAwMDEsIDB4ZDAwMDAwMDEsIDB4YzgwMDAwMDEsIDB4ZjAwMDAwMDEsCisgICAgMHg4MDAwMDAwMSwgMHg5ODAwMDAwMSwgMHhkODAwMDAwMSwgMHg5MDAwMDAwMSwKKyAgICAweDMwMDAwMDAzLCAweDYwMDAwMDAzLCAweDM4MDAwMDAzLCAweDA4MDAwMDAzLAorICAgIDB4MjgwMDAwMDMsIDB4NzgwMDAwMDMsIDB4NjgwMDAwMDMsIDB4NDAwMDAwMDMsCisgICAgMHgyMDAwMDAwMywgMHg1MDAwMDAwMywgMHg0ODAwMDAwMywgMHg3MDAwMDAwMywKKyAgICAweDAwMDAwMDAzLCAweDE4MDAwMDAzLCAweDU4MDAwMDAzLCAweDEwMDAwMDAzLAorICAgIDB4MzAwMDAwMDQsIDB4NjAwMDAwMDQsIDB4MzgwMDAwMDQsIDB4MDgwMDAwMDQsCisgICAgMHgyODAwMDAwNCwgMHg3ODAwMDAwNCwgMHg2ODAwMDAwNCwgMHg0MDAwMDAwNCwKKyAgICAweDIwMDAwMDA0LCAweDUwMDAwMDA0LCAweDQ4MDAwMDA0LCAweDcwMDAwMDA0LAorICAgIDB4MDAwMDAwMDQsIDB4MTgwMDAwMDQsIDB4NTgwMDAwMDQsIDB4MTAwMDAwMDQsCisgICAgMHhiMDAwMDAwMiwgMHhlMDAwMDAwMiwgMHhiODAwMDAwMiwgMHg4ODAwMDAwMiwKKyAgICAweGE4MDAwMDAyLCAweGY4MDAwMDAyLCAweGU4MDAwMDAyLCAweGMwMDAwMDAyLAorICAgIDB4YTAwMDAwMDIsIDB4ZDAwMDAwMDIsIDB4YzgwMDAwMDIsIDB4ZjAwMDAwMDIsCisgICAgMHg4MDAwMDAwMiwgMHg5ODAwMDAwMiwgMHhkODAwMDAwMiwgMHg5MDAwMDAwMiwKKyAgICAweGIwMDAwMDA0LCAweGUwMDAwMDA0LCAweGI4MDAwMDA0LCAweDg4MDAwMDA0LAorICAgIDB4YTgwMDAwMDQsIDB4ZjgwMDAwMDQsIDB4ZTgwMDAwMDQsIDB4YzAwMDAwMDQsCisgICAgMHhhMDAwMDAwNCwgMHhkMDAwMDAwNCwgMHhjODAwMDAwNCwgMHhmMDAwMDAwNCwKKyAgICAweDgwMDAwMDA0LCAweDk4MDAwMDA0LCAweGQ4MDAwMDA0LCAweDkwMDAwMDA0LAorICAgIDB4MzAwMDAwMDYsIDB4NjAwMDAwMDYsIDB4MzgwMDAwMDYsIDB4MDgwMDAwMDYsCisgICAgMHgyODAwMDAwNiwgMHg3ODAwMDAwNiwgMHg2ODAwMDAwNiwgMHg0MDAwMDAwNiwKKyAgICAweDIwMDAwMDA2LCAweDUwMDAwMDA2LCAweDQ4MDAwMDA2LCAweDcwMDAwMDA2LAorICAgIDB4MDAwMDAwMDYsIDB4MTgwMDAwMDYsIDB4NTgwMDAwMDYsIDB4MTAwMDAwMDYsCisgICAgMHhiMDAwMDAwNywgMHhlMDAwMDAwNywgMHhiODAwMDAwNywgMHg4ODAwMDAwNywKKyAgICAweGE4MDAwMDA3LCAweGY4MDAwMDA3LCAweGU4MDAwMDA3LCAweGMwMDAwMDA3LAorICAgIDB4YTAwMDAwMDcsIDB4ZDAwMDAwMDcsIDB4YzgwMDAwMDcsIDB4ZjAwMDAwMDcsCisgICAgMHg4MDAwMDAwNywgMHg5ODAwMDAwNywgMHhkODAwMDAwNywgMHg5MDAwMDAwNywKKyAgICAweDMwMDAwMDA3LCAweDYwMDAwMDA3LCAweDM4MDAwMDA3LCAweDA4MDAwMDA3LAorICAgIDB4MjgwMDAwMDcsIDB4NzgwMDAwMDcsIDB4NjgwMDAwMDcsIDB4NDAwMDAwMDcsCisgICAgMHgyMDAwMDAwNywgMHg1MDAwMDAwNywgMHg0ODAwMDAwNywgMHg3MDAwMDAwNywKKyAgICAweDAwMDAwMDA3LCAweDE4MDAwMDA3LCAweDU4MDAwMDA3LCAweDEwMDAwMDA3IH0sCisgIC8qIDMgKi8KKyAgeyAweDAwMDAwMGU4LCAweDAwMDAwMGQ4LCAweDAwMDAwMGEwLCAweDAwMDAwMDg4LAorICAgIDB4MDAwMDAwOTgsIDB4MDAwMDAwZjgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYzgsCisgICAgMHgwMDAwMDA4MCwgMHgwMDAwMDBkMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBiOCwKKyAgICAweDAwMDAwMGIwLCAweDAwMDAwMGMwLCAweDAwMDAwMDkwLCAweDAwMDAwMGUwLAorICAgIDB4MDAwMDA3ZTgsIDB4MDAwMDA3ZDgsIDB4MDAwMDA3YTAsIDB4MDAwMDA3ODgsCisgICAgMHgwMDAwMDc5OCwgMHgwMDAwMDdmOCwgMHgwMDAwMDdhOCwgMHgwMDAwMDdjOCwKKyAgICAweDAwMDAwNzgwLCAweDAwMDAwN2QwLCAweDAwMDAwN2YwLCAweDAwMDAwN2I4LAorICAgIDB4MDAwMDA3YjAsIDB4MDAwMDA3YzAsIDB4MDAwMDA3OTAsIDB4MDAwMDA3ZTAsCisgICAgMHgwMDAwMDZlOCwgMHgwMDAwMDZkOCwgMHgwMDAwMDZhMCwgMHgwMDAwMDY4OCwKKyAgICAweDAwMDAwNjk4LCAweDAwMDAwNmY4LCAweDAwMDAwNmE4LCAweDAwMDAwNmM4LAorICAgIDB4MDAwMDA2ODAsIDB4MDAwMDA2ZDAsIDB4MDAwMDA2ZjAsIDB4MDAwMDA2YjgsCisgICAgMHgwMDAwMDZiMCwgMHgwMDAwMDZjMCwgMHgwMDAwMDY5MCwgMHgwMDAwMDZlMCwKKyAgICAweDAwMDAwMDY4LCAweDAwMDAwMDU4LCAweDAwMDAwMDIwLCAweDAwMDAwMDA4LAorICAgIDB4MDAwMDAwMTgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMjgsIDB4MDAwMDAwNDgsCisgICAgMHgwMDAwMDAwMCwgMHgwMDAwMDA1MCwgMHgwMDAwMDA3MCwgMHgwMDAwMDAzOCwKKyAgICAweDAwMDAwMDMwLCAweDAwMDAwMDQwLCAweDAwMDAwMDEwLCAweDAwMDAwMDYwLAorICAgIDB4MDAwMDAyZTgsIDB4MDAwMDAyZDgsIDB4MDAwMDAyYTAsIDB4MDAwMDAyODgsCisgICAgMHgwMDAwMDI5OCwgMHgwMDAwMDJmOCwgMHgwMDAwMDJhOCwgMHgwMDAwMDJjOCwKKyAgICAweDAwMDAwMjgwLCAweDAwMDAwMmQwLCAweDAwMDAwMmYwLCAweDAwMDAwMmI4LAorICAgIDB4MDAwMDAyYjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAyOTAsIDB4MDAwMDAyZTAsCisgICAgMHgwMDAwMDNlOCwgMHgwMDAwMDNkOCwgMHgwMDAwMDNhMCwgMHgwMDAwMDM4OCwKKyAgICAweDAwMDAwMzk4LCAweDAwMDAwM2Y4LCAweDAwMDAwM2E4LCAweDAwMDAwM2M4LAorICAgIDB4MDAwMDAzODAsIDB4MDAwMDAzZDAsIDB4MDAwMDAzZjAsIDB4MDAwMDAzYjgsCisgICAgMHgwMDAwMDNiMCwgMHgwMDAwMDNjMCwgMHgwMDAwMDM5MCwgMHgwMDAwMDNlMCwKKyAgICAweDAwMDAwNTY4LCAweDAwMDAwNTU4LCAweDAwMDAwNTIwLCAweDAwMDAwNTA4LAorICAgIDB4MDAwMDA1MTgsIDB4MDAwMDA1NzgsIDB4MDAwMDA1MjgsIDB4MDAwMDA1NDgsCisgICAgMHgwMDAwMDUwMCwgMHgwMDAwMDU1MCwgMHgwMDAwMDU3MCwgMHgwMDAwMDUzOCwKKyAgICAweDAwMDAwNTMwLCAweDAwMDAwNTQwLCAweDAwMDAwNTEwLCAweDAwMDAwNTYwLAorICAgIDB4MDAwMDAyNjgsIDB4MDAwMDAyNTgsIDB4MDAwMDAyMjAsIDB4MDAwMDAyMDgsCisgICAgMHgwMDAwMDIxOCwgMHgwMDAwMDI3OCwgMHgwMDAwMDIyOCwgMHgwMDAwMDI0OCwKKyAgICAweDAwMDAwMjAwLCAweDAwMDAwMjUwLCAweDAwMDAwMjcwLCAweDAwMDAwMjM4LAorICAgIDB4MDAwMDAyMzAsIDB4MDAwMDAyNDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyNjAsCisgICAgMHgwMDAwMDRlOCwgMHgwMDAwMDRkOCwgMHgwMDAwMDRhMCwgMHgwMDAwMDQ4OCwKKyAgICAweDAwMDAwNDk4LCAweDAwMDAwNGY4LCAweDAwMDAwNGE4LCAweDAwMDAwNGM4LAorICAgIDB4MDAwMDA0ODAsIDB4MDAwMDA0ZDAsIDB4MDAwMDA0ZjAsIDB4MDAwMDA0YjgsCisgICAgMHgwMDAwMDRiMCwgMHgwMDAwMDRjMCwgMHgwMDAwMDQ5MCwgMHgwMDAwMDRlMCwKKyAgICAweDAwMDAwMTY4LCAweDAwMDAwMTU4LCAweDAwMDAwMTIwLCAweDAwMDAwMTA4LAorICAgIDB4MDAwMDAxMTgsIDB4MDAwMDAxNzgsIDB4MDAwMDAxMjgsIDB4MDAwMDAxNDgsCisgICAgMHgwMDAwMDEwMCwgMHgwMDAwMDE1MCwgMHgwMDAwMDE3MCwgMHgwMDAwMDEzOCwKKyAgICAweDAwMDAwMTMwLCAweDAwMDAwMTQwLCAweDAwMDAwMTEwLCAweDAwMDAwMTYwLAorICAgIDB4MDAwMDAxZTgsIDB4MDAwMDAxZDgsIDB4MDAwMDAxYTAsIDB4MDAwMDAxODgsCisgICAgMHgwMDAwMDE5OCwgMHgwMDAwMDFmOCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFjOCwKKyAgICAweDAwMDAwMTgwLCAweDAwMDAwMWQwLCAweDAwMDAwMWYwLCAweDAwMDAwMWI4LAorICAgIDB4MDAwMDAxYjAsIDB4MDAwMDAxYzAsIDB4MDAwMDAxOTAsIDB4MDAwMDAxZTAsCisgICAgMHgwMDAwMDc2OCwgMHgwMDAwMDc1OCwgMHgwMDAwMDcyMCwgMHgwMDAwMDcwOCwKKyAgICAweDAwMDAwNzE4LCAweDAwMDAwNzc4LCAweDAwMDAwNzI4LCAweDAwMDAwNzQ4LAorICAgIDB4MDAwMDA3MDAsIDB4MDAwMDA3NTAsIDB4MDAwMDA3NzAsIDB4MDAwMDA3MzgsCisgICAgMHgwMDAwMDczMCwgMHgwMDAwMDc0MCwgMHgwMDAwMDcxMCwgMHgwMDAwMDc2MCwKKyAgICAweDAwMDAwMzY4LCAweDAwMDAwMzU4LCAweDAwMDAwMzIwLCAweDAwMDAwMzA4LAorICAgIDB4MDAwMDAzMTgsIDB4MDAwMDAzNzgsIDB4MDAwMDAzMjgsIDB4MDAwMDAzNDgsCisgICAgMHgwMDAwMDMwMCwgMHgwMDAwMDM1MCwgMHgwMDAwMDM3MCwgMHgwMDAwMDMzOCwKKyAgICAweDAwMDAwMzMwLCAweDAwMDAwMzQwLCAweDAwMDAwMzEwLCAweDAwMDAwMzYwLAorICAgIDB4MDAwMDA1ZTgsIDB4MDAwMDA1ZDgsIDB4MDAwMDA1YTAsIDB4MDAwMDA1ODgsCisgICAgMHgwMDAwMDU5OCwgMHgwMDAwMDVmOCwgMHgwMDAwMDVhOCwgMHgwMDAwMDVjOCwKKyAgICAweDAwMDAwNTgwLCAweDAwMDAwNWQwLCAweDAwMDAwNWYwLCAweDAwMDAwNWI4LAorICAgIDB4MDAwMDA1YjAsIDB4MDAwMDA1YzAsIDB4MDAwMDA1OTAsIDB4MDAwMDA1ZTAsCisgICAgMHgwMDAwMDQ2OCwgMHgwMDAwMDQ1OCwgMHgwMDAwMDQyMCwgMHgwMDAwMDQwOCwKKyAgICAweDAwMDAwNDE4LCAweDAwMDAwNDc4LCAweDAwMDAwNDI4LCAweDAwMDAwNDQ4LAorICAgIDB4MDAwMDA0MDAsIDB4MDAwMDA0NTAsIDB4MDAwMDA0NzAsIDB4MDAwMDA0MzgsCisgICAgMHgwMDAwMDQzMCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQxMCwgMHgwMDAwMDQ2MCwKKyAgICAweDAwMDAwNjY4LCAweDAwMDAwNjU4LCAweDAwMDAwNjIwLCAweDAwMDAwNjA4LAorICAgIDB4MDAwMDA2MTgsIDB4MDAwMDA2NzgsIDB4MDAwMDA2MjgsIDB4MDAwMDA2NDgsCisgICAgMHgwMDAwMDYwMCwgMHgwMDAwMDY1MCwgMHgwMDAwMDY3MCwgMHgwMDAwMDYzOCwKKyAgICAweDAwMDAwNjMwLCAweDAwMDAwNjQwLCAweDAwMDAwNjEwLCAweDAwMDAwNjYwIH0KK307CisKKyNpbmNsdWRlICJnb3N0LmgiCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2dvc3Rfc2V0a2V5ICh2b2lkICpjLCBjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGtleWxlbikKK3sKKyAgaW50IGk7CisgIEdPU1QyODE0N19jb250ZXh0ICpjdHggPSBjOworCisgIGlmIChrZXlsZW4gIT0gMjU2IC8gOCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfS0VZTEVOOworCisgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisgICAgeworICAgICAgY3R4LT5rZXlbaV0gPSAoa2V5WzQgKiBpICsgM10gPDwgMjQpIHwKKyAgICAgICAgICAgICAgICAgICAgKGtleVs0ICogaSArIDJdIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAgIChrZXlbNCAqIGkgKyAxXSA8PCAgOCkgfAorICAgICAgICAgICAgICAgICAgICAoa2V5WzQgKiBpICsgMF0gPDwgIDApOworICAgIH0KKyAgcmV0dXJuIEdQR19FUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyB1MzIKK2dvc3RfdmFsIChHT1NUMjgxNDdfY29udGV4dCAqY3R4LCB1MzIgY20xLCBpbnQgc3Via2V5KQoreworICBjbTEgKz0gY3R4LT5rZXlbc3Via2V5XTsKKyAgY20xID0gdGVzdF9zYm94WzBdWyAoY20xID4+ICAwKSAmIDB4ZmZdIHwKKyAgICAgICAgdGVzdF9zYm94WzFdWyAoY20xID4+ICA4KSAmIDB4ZmZdIHwKKyAgICAgICAgdGVzdF9zYm94WzJdWyAoY20xID4+IDE2KSAmIDB4ZmZdIHwKKyAgICAgICAgdGVzdF9zYm94WzNdWyAoY20xID4+IDI0KSAmIDB4ZmZdOworICByZXR1cm4gY20xOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citnb3N0X2VuY3J5cHRfYmxvY2sgKHZvaWQgKmMsIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYpCit7CisgIEdPU1QyODE0N19jb250ZXh0ICpjdHggPSBjOworICB1MzIgbjEsIG4yOworCisgIG4xID0gIChpbmJ1ZlswXSA8PCAwKSB8CisgICAgICAgIChpbmJ1ZlsxXSA8PCA4KSB8CisgICAgICAgIChpbmJ1ZlsyXSA8PCAxNikgfAorICAgICAgICAoaW5idWZbM10gPDwgMjQpOworICBuMiA9ICAoaW5idWZbNF0gPDwgMCkgfAorICAgICAgICAoaW5idWZbNV0gPDwgOCkgfAorICAgICAgICAoaW5idWZbNl0gPDwgMTYpIHwKKyAgICAgICAgKGluYnVmWzddIDw8IDI0KTsKKworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgMCk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCAxKTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDIpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMyk7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA0KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDUpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNik7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA3KTsKKworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgMCk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCAxKTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDIpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMyk7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA0KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDUpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNik7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA3KTsKKworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgMCk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCAxKTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDIpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMyk7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA0KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDUpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNik7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA3KTsKKworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNyk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA2KTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDUpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgNCk7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCAzKTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDIpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgMSk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCAwKTsKKworICBvdXRidWZbMCArIDBdID0gKG4yID4+ICgwICogOCkpICYgMHhmZjsKKyAgb3V0YnVmWzEgKyAwXSA9IChuMiA+PiAoMSAqIDgpKSAmIDB4ZmY7CisgIG91dGJ1ZlsyICsgMF0gPSAobjIgPj4gKDIgKiA4KSkgJiAweGZmOworICBvdXRidWZbMyArIDBdID0gKG4yID4+ICgzICogOCkpICYgMHhmZjsKKyAgb3V0YnVmWzAgKyA0XSA9IChuMSA+PiAoMCAqIDgpKSAmIDB4ZmY7CisgIG91dGJ1ZlsxICsgNF0gPSAobjEgPj4gKDEgKiA4KSkgJiAweGZmOworICBvdXRidWZbMiArIDRdID0gKG4xID4+ICgyICogOCkpICYgMHhmZjsKKyAgb3V0YnVmWzMgKyA0XSA9IChuMSA+PiAoMyAqIDgpKSAmIDB4ZmY7CisKKyAgcmV0dXJuIC8qIGJ1cm5fc3RhY2sgKi8gNCpzaXplb2Yodm9pZCopIC8qIGZ1bmMgY2FsbCAqLyArCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMqc2l6ZW9mKHZvaWQqKSAvKiBzdGFjayAqLyArCisgICAgICAgICAgICAgICAgICAgICAgICAgIDQqc2l6ZW9mKHZvaWQqKSAvKiBnb3N0X3ZhbCBjYWxsICovOworfQorCit1bnNpZ25lZCBpbnQgX2djcnlfZ29zdF9lbmNfb25lIChHT1NUMjgxNDdfY29udGV4dCAqYywgY29uc3QgYnl0ZSAqa2V5LAorICAgIGJ5dGUgKm91dCwgYnl0ZSAqaW4pCit7CisgIGdvc3Rfc2V0a2V5IChjLCBrZXksIDMyKTsKKyAgcmV0dXJuIGdvc3RfZW5jcnlwdF9ibG9jayAoYywgb3V0LCBpbikgKyA1ICogc2l6ZW9mKHZvaWQgKik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dvc3RfZGVjcnlwdF9ibG9jayAodm9pZCAqYywgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgR09TVDI4MTQ3X2NvbnRleHQgKmN0eCA9IGM7CisgIHUzMiBuMSwgbjI7CisKKyAgbjEgPSAgKGluYnVmWzBdIDw8IDApIHwKKyAgICAgICAgKGluYnVmWzFdIDw8IDgpIHwKKyAgICAgICAgKGluYnVmWzJdIDw8IDE2KSB8CisgICAgICAgIChpbmJ1ZlszXSA8PCAyNCk7CisgIG4yID0gIChpbmJ1Zls0XSA8PCAwKSB8CisgICAgICAgIChpbmJ1Zls1XSA8PCA4KSB8CisgICAgICAgIChpbmJ1Zls2XSA8PCAxNikgfAorICAgICAgICAoaW5idWZbN10gPDwgMjQpOworCisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCAwKTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDEpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgMik7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCAzKTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDQpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgNSk7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA2KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDcpOworCisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA3KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDYpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNSk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA0KTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDMpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMik7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCAxKTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDApOworCisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA3KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDYpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNSk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA0KTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDMpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMik7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCAxKTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDApOworCisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCA3KTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDYpOworICBuMiBePSBnb3N0X3ZhbCAoY3R4LCBuMSwgNSk7IG4xIF49IGdvc3RfdmFsIChjdHgsIG4yLCA0KTsKKyAgbjIgXj0gZ29zdF92YWwgKGN0eCwgbjEsIDMpOyBuMSBePSBnb3N0X3ZhbCAoY3R4LCBuMiwgMik7CisgIG4yIF49IGdvc3RfdmFsIChjdHgsIG4xLCAxKTsgbjEgXj0gZ29zdF92YWwgKGN0eCwgbjIsIDApOworCisgIG91dGJ1ZlswICsgMF0gPSAobjIgPj4gKDAgKiA4KSkgJiAweGZmOworICBvdXRidWZbMSArIDBdID0gKG4yID4+ICgxICogOCkpICYgMHhmZjsKKyAgb3V0YnVmWzIgKyAwXSA9IChuMiA+PiAoMiAqIDgpKSAmIDB4ZmY7CisgIG91dGJ1ZlszICsgMF0gPSAobjIgPj4gKDMgKiA4KSkgJiAweGZmOworICBvdXRidWZbMCArIDRdID0gKG4xID4+ICgwICogOCkpICYgMHhmZjsKKyAgb3V0YnVmWzEgKyA0XSA9IChuMSA+PiAoMSAqIDgpKSAmIDB4ZmY7CisgIG91dGJ1ZlsyICsgNF0gPSAobjEgPj4gKDIgKiA4KSkgJiAweGZmOworICBvdXRidWZbMyArIDRdID0gKG4xID4+ICgzICogOCkpICYgMHhmZjsKKworICByZXR1cm4gLyogYnVybl9zdGFjayAqLyA0KnNpemVvZih2b2lkKikgLyogZnVuYyBjYWxsICovICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMypzaXplb2Yodm9pZCopIC8qIHN0YWNrICovICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNCpzaXplb2Yodm9pZCopIC8qIGdvc3RfdmFsIGNhbGwgKi87Cit9CisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19nb3N0MjgxNDcgPQorICB7CisgICAgR0NSWV9DSVBIRVJfR09TVDI4MTQ3LCB7MCwgMH0sCisgICAgIkdPU1QyODE0NyIsIE5VTEwsIE5VTEwsIDgsIDI1NiwKKyAgICBzaXplb2YgKEdPU1QyODE0N19jb250ZXh0KSwKKyAgICBnb3N0X3NldGtleSwKKyAgICBnb3N0X2VuY3J5cHRfYmxvY2ssCisgICAgZ29zdF9kZWNyeXB0X2Jsb2NrLAorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL2dvc3RyMzQxMS05NC5jIGIvY2lwaGVyL2dvc3RyMzQxMS05NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvZ29zdHIzNDExLTk0LmMKQEAgLTAsMCArMSwyODYgQEAKKy8qIGdvc3RyMzQxMS05NC5jIC0gR09TVCBSIDM0LjExLTk0IGhhc2ggZnVuY3Rpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImJpdGhlbHAuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisjaW5jbHVkZSAiZ29zdC5oIgorCisjZGVmaW5lIG1heChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2NyeV9tZF9ibG9ja19jdHhfdCBiY3R4OworICBHT1NUMjgxNDdfY29udGV4dCBoZDsKKyAgYnl0ZSBoWzMyXTsKKyAgYnl0ZSBzaWdtYVszMl07CisgIHUzMiBsZW47Cit9IEdPU1RSMzQxMV9DT05URVhUOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKHZvaWQgKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworCitzdGF0aWMgdm9pZAorZ29zdDM0MTFfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBHT1NUUjM0MTFfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworCisgICh2b2lkKWZsYWdzOworCisgIG1lbXNldCAoJmhkLT5oZCwgMCwgc2l6ZW9mKGhkLT5oZCkpOworICBtZW1zZXQgKGhkLT5oLCAwLCAzMik7CisgIG1lbXNldCAoaGQtPnNpZ21hLCAwLCAzMik7CisKKyAgaGQtPmJjdHgubmJsb2NrcyA9IDA7CisgIGhkLT5iY3R4LmNvdW50ID0gMDsKKyAgaGQtPmJjdHguYmxvY2tzaXplID0gMzI7CisgIGhkLT5iY3R4LmJ3cml0ZSA9IHRyYW5zZm9ybTsKK30KKworc3RhdGljIHZvaWQKK2RvX3AgKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKnUsIHVuc2lnbmVkIGNoYXIgKnYpCit7CisgIGludCBpLCBrOworICBmb3IgKGsgPSAwOyBrIDwgODsgaysrKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBwW2kgKyA0ICoga10gPSB1WzggKiBpICsga10gXiB2WzggKiBpICsga107CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitkb19hICh1bnNpZ25lZCBjaGFyICp1KQoreworICB1bnNpZ25lZCBjaGFyIHRlbXBbOF07CisgIGludCBpOworICBtZW1jcHkgKHRlbXAsIHUsIDgpOworICBtZW1tb3ZlICh1LCB1KzgsIDI0KTsKKyAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICB7CisgICAgICB1WzI0ICsgaV0gPSB1W2ldIF4gdGVtcFtpXTsKKyAgICB9Cit9CisvKiBhcHBseSBkb19hIHR3aWNlOiAxIDIgMyA0IC0+IDMgNCAxXjIgMl4zICovCitzdGF0aWMgdm9pZAorZG9fYTIgKHVuc2lnbmVkIGNoYXIgKnUpCit7CisgIHVuc2lnbmVkIGNoYXIgdGVtcFsxNl07CisgIGludCBpOworICBtZW1jcHkgKHRlbXAsIHUsIDE2KTsKKyAgbWVtY3B5ICh1LCB1ICsgMTYsIDE2KTsKKyAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICB7CisgICAgICB1WzE2ICsgaV0gPSB0ZW1wW2ldIF4gdGVtcFs4ICsgaV07CisgICAgICB1WzI0ICsgaV0gPSAgICB1W2ldIF4gdGVtcFs4ICsgaV07CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZG9fYXBwbHlfYzIgKHVuc2lnbmVkIGNoYXIgKnUpCit7CisgIHVbIDFdIF49IDB4ZmY7CisgIHVbIDNdIF49IDB4ZmY7CisgIHVbIDVdIF49IDB4ZmY7CisgIHVbIDddIF49IDB4ZmY7CisKKyAgdVsgOF0gXj0gMHhmZjsKKyAgdVsxMF0gXj0gMHhmZjsKKyAgdVsxMl0gXj0gMHhmZjsKKyAgdVsxNF0gXj0gMHhmZjsKKworICB1WzE3XSBePSAweGZmOworICB1WzE4XSBePSAweGZmOworICB1WzIwXSBePSAweGZmOworICB1WzIzXSBePSAweGZmOworCisgIHVbMjRdIF49IDB4ZmY7CisgIHVbMjhdIF49IDB4ZmY7CisgIHVbMjldIF49IDB4ZmY7CisgIHVbMzFdIF49IDB4ZmY7Cit9CisKKyNkZWZpbmUgZG9fcGhpX3N0ZXAoZSwgaSkgXAorICBlWygwICsgMippKSAlIDMyXSBePSBlWygyICsgMippKSAlIDMyXSBeIGVbKDQgKyAyKmkpICUgMzJdIF4gZVsoNiArIDIqaSkgJSAzMl0gXiBlWygyNCArIDIqaSkgJSAzMl0gXiBlWygzMCArIDIqaSkgJSAzMl07IFwKKyAgZVsoMSArIDIqaSkgJSAzMl0gXj0gZVsoMyArIDIqaSkgJSAzMl0gXiBlWyg1ICsgMippKSAlIDMyXSBeIGVbKDcgKyAyKmkpICUgMzJdIF4gZVsoMjUgKyAyKmkpICUgMzJdIF4gZVsoMzEgKyAyKmkpICUgMzJdOworCitzdGF0aWMgdm9pZAorZG9fcGhpX3N1Ym1peCAodW5zaWduZWQgY2hhciAqZSwgdW5zaWduZWQgY2hhciAqeCwgaW50IHJvdW5kKQoreworICBpbnQgaTsKKyAgcm91bmQgKj0gMjsKKyAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisgICAgeworICAgICAgZVsoaSArIHJvdW5kKSAlIDMyXSBePSB4W2ldOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2RvX2FkZCAodW5zaWduZWQgY2hhciAqcywgdW5zaWduZWQgY2hhciAqYSkKK3sKKyAgdW5zaWduZWQgdGVtcCA9IDA7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorICAgIHsKKyAgICAgIHRlbXAgPSBzW2ldICsgYVtpXSArICh0ZW1wID4+IDgpOworICAgICAgc1tpXSA9IHRlbXAgJiAweGZmOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZG9faGFzaF9zdGVwIChHT1NUMjgxNDdfY29udGV4dCAqaGQsIHVuc2lnbmVkIGNoYXIgKmgsIHVuc2lnbmVkIGNoYXIgKm0pCit7CisgIHVuc2lnbmVkIGNoYXIgdVszMl0sIHZbMzJdLCBzWzMyXTsKKyAgdW5zaWduZWQgY2hhciBrWzMyXTsKKyAgdW5zaWduZWQgaW50IGJ1cm47CisgIGludCBpOworCisgIG1lbWNweSAodSwgaCwgMzIpOworICBtZW1jcHkgKHYsIG0sIDMyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgZG9fcCAoaywgdSwgdik7CisKKyAgICBidXJuID0gX2djcnlfZ29zdF9lbmNfb25lIChoZCwgaywgcyArIGkqOCwgaCArIGkqOCk7CisKKyAgICBkb19hICh1KTsKKyAgICBpZiAoaSA9PSAxKQorICAgICAgZG9fYXBwbHlfYzIgKHUpOworICAgIGRvX2EyICh2KTsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgeworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDApOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDEpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDIpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDMpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDQpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDUpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDYpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDcpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDgpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDkpOworICAgICAgLyogVGhhdCBpcyBpbiB0b3RhbCAxMiArIDEgKyA2MSA9IDc0ID0gMTYgKiA0ICsgMTAgcm91bmRzICovCisgICAgICBpZiAoaSA9PSA0KQorICAgICAgICBicmVhazsKKyAgICAgIGRvX3BoaV9zdGVwIChzLCAxMCk7CisgICAgICBkb19waGlfc3RlcCAocywgMTEpOworICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgZG9fcGhpX3N1Ym1peChzLCBtLCAxMik7CisgICAgICBkb19waGlfc3RlcCAocywgMTIpOworICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgZG9fcGhpX3N1Ym1peChzLCBoLCAxMyk7CisgICAgICBkb19waGlfc3RlcCAocywgMTMpOworICAgICAgZG9fcGhpX3N0ZXAgKHMsIDE0KTsKKyAgICAgIGRvX3BoaV9zdGVwIChzLCAxNSk7CisgICAgfQorCisgIG1lbWNweSAoaCwgcysyMCwgMTIpOworICBtZW1jcHkgKGgrMTIsIHMsIDIwKTsKKworICByZXR1cm4gLyogYnVybl9zdGFjayAqLyA0ICogc2l6ZW9mKHZvaWQqKSAvKiBmdW5jIGNhbGwgKHJldCBhZGRyICsgYXJncykgKi8gKworICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogMzIgKyAyICogc2l6ZW9mKGludCkgLyogc3RhY2sgKi8gKworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoYnVybiAvKiBfZ2NyeV9nb3N0X2VuY19vbmUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yodm9pZCopICogMiAvKiBkb19hMiBjYWxsICovICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgc2l6ZW9mKGludCkgLyogZG9fYTIgc3RhY2sgKi8gKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgR09TVFIzNDExX0NPTlRFWFQgKmhkID0gY3R4OworICBieXRlIG1bMzJdOworICB1bnNpZ25lZCBpbnQgYnVybjsKKworICBtZW1jcHkgKG0sIGRhdGEsIDMyKTsKKyAgYnVybiA9IGRvX2hhc2hfc3RlcCAoJmhkLT5oZCwgaGQtPmgsIG0pOworICBkb19hZGQgKGhkLT5zaWdtYSwgbSk7CisKKyAgcmV0dXJuIC8qIGJ1cm5fc3RhY2sgKi8gYnVybiArIDMgKiBzaXplb2Yodm9pZCopICsgMzIgKyAyICogc2l6ZW9mKHZvaWQqKTsKK30KKworLyoKKyAgIFRoZSByb3V0aW5lIGZpbmFsbHkgdGVybWluYXRlcyB0aGUgY29tcHV0YXRpb24gYW5kIHJldHVybnMgdGhlCisgICBkaWdlc3QuICBUaGUgaGFuZGxlIGlzIHByZXBhcmVkIGZvciBhIG5ldyBjeWNsZSwgYnV0IGFkZGluZyBieXRlcworICAgdG8gdGhlIGhhbmRsZSB3aWxsIHRoZSBkZXN0cm95IHRoZSByZXR1cm5lZCBidWZmZXIuICBSZXR1cm5zOiAzMgorICAgYnl0ZXMgd2l0aCB0aGUgbWVzc2FnZSB0aGUgZGlnZXN0LiAgKi8KK3N0YXRpYyB2b2lkCitnb3N0MzQxMV9maW5hbCAodm9pZCAqY29udGV4dCkKK3sKKyAgR09TVFIzNDExX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKyAgc2l6ZV90IHBhZGxlbiA9IDA7CisgIGJ5dGUgbFszMl07CisgIGludCBpOworICB1MzIgbmJsb2NrczsKKworICBpZiAoaGQtPmJjdHguY291bnQgPiAwKQorICAgIHsKKyAgICAgIHBhZGxlbiA9IDMyIC0gaGQtPmJjdHguY291bnQ7CisgICAgICBtZW1zZXQgKGhkLT5iY3R4LmJ1ZiArIGhkLT5iY3R4LmNvdW50LCAwLCBwYWRsZW4pOworICAgICAgaGQtPmJjdHguY291bnQgKz0gcGFkbGVuOworICAgICAgX2djcnlfbWRfYmxvY2tfd3JpdGUgKGhkLCBOVUxMLCAwKTsgLyogZmx1c2ggKi87CisgICAgfQorCisgIGlmIChoZC0+YmN0eC5jb3VudCAhPSAwKQorICAgIHJldHVybjsgLyogU29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKworICBtZW1zZXQgKGwsIDAsIDMyKTsKKworICBuYmxvY2tzID0gaGQtPmJjdHgubmJsb2NrczsKKyAgaWYgKHBhZGxlbikKKyAgICB7CisgICAgICBuYmxvY2tzIC0tOworICAgICAgbFswXSA9IDI1NiAtIHBhZGxlbiAqIDg7CisgICAgfQorCisgIGZvciAoaSA9IDE7IGkgPCAzMiAmJiBuYmxvY2tzICE9IDA7IGkrKykKKyAgICB7CisgICAgICBsW2ldID0gbmJsb2NrcyAlIDI1NjsKKyAgICAgIG5ibG9ja3MgLz0gMjU2OworICAgIH0KKworICBkb19oYXNoX3N0ZXAgKCZoZC0+aGQsIGhkLT5oLCBsKTsKKyAgZG9faGFzaF9zdGVwICgmaGQtPmhkLCBoZC0+aCwgaGQtPnNpZ21hKTsKK30KKworc3RhdGljIGJ5dGUgKgorZ29zdDM0MTFfcmVhZCAodm9pZCAqY29udGV4dCkKK3sKKyAgR09TVFIzNDExX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICByZXR1cm4gaGQtPmg7Cit9CitnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19nb3N0MzQxMV85NCA9CisgIHsKKyAgICBHQ1JZX01EX0dPU1RSMzQxMV85NCwgezAsIDB9LAorICAgICJHT1NUUjM0MTFfOTQiLCBOVUxMLCAwLCBOVUxMLCAzMiwKKyAgICBnb3N0MzQxMV9pbml0LCBfZ2NyeV9tZF9ibG9ja193cml0ZSwgZ29zdDM0MTFfZmluYWwsIGdvc3QzNDExX3JlYWQsCisgICAgc2l6ZW9mIChHT1NUUjM0MTFfQ09OVEVYVCkKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9oYXNoLWNvbW1vbi5jIGIvY2lwaGVyL2hhc2gtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiYzM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9oYXNoLWNvbW1vbi5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBoYXNoLWNvbW1vbi5jIC0gQ29tbW9uIGNvZGUgZm9yIGhhc2ggYWxnb3JpdGhtcworICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisKKy8qIFJ1biBhIHNlbGZ0ZXN0IGZvciBoYXNoIGFsZ29yaXRobSBBTEdPLiAgSWYgdGhlIHJlc3VsdGluZyBkaWdlc3QKKyAgIG1hdGNoZXMgRVhQRUNUL0VYUEVDVExFTiBhbmQgZXZlcnl0aGluZyBlbHNlIGlzIGZpbmUgYXMgd2VsbCwKKyAgIHJldHVybiBOVUxMLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gYSBzdGF0aWMgdGV4dCBzdHJpbmcKKyAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLgorCisgICBEQVRBTU9ERSBjb250cm9scyB3aGF0IHdpbGwgYmUgaGFzaGVkIGFjY29yZGluZyB0byB0aGlzIHRhYmxlOgorCisgICAgIDAgLSBIYXNoIHRoZSBzdXBwbGllZCBEQVRBIG9mIERBVEFMRU4uCisgICAgIDEgLSBIYXNoIG9uZSBtaWxsaW9uIHRpbWVzIGEgJ2EnLiAgREFUQSBhbmQgREFUQUxFTiBhcmUgaWdub3JlZC4KKworKi8KK2NvbnN0IGNoYXIgKgorX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUgKGludCBhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXRhbW9kZSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZXhwZWN0LCBzaXplX3QgZXhwZWN0bGVuKQoreworICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICBnY3J5X2Vycm9yX3QgZXJyID0gMDsKKyAgZ2NyeV9tZF9oZF90IGhkOworICB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisKKyAgaWYgKF9nY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pICE9IGV4cGVjdGxlbikKKyAgICByZXR1cm4gImRpZ2VzdCBzaXplIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHNpemUiOworCisgIGVyciA9IF9nY3J5X21kX29wZW4gKCZoZCwgYWxnbywgMCk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuICJnY3J5X21kX29wZW4gZmFpbGVkIjsKKworICBzd2l0Y2ggKGRhdGFtb2RlKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBfZ2NyeV9tZF93cml0ZSAoaGQsIGRhdGEsIGRhdGFsZW4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6IC8qIEhhc2ggb25lIG1pbGxpb24gdGltZXMgYW4gImEiLiAqLworICAgICAgeworICAgICAgICBjaGFyIGFhYVsxMDAwXTsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgLyogV3JpdGUgaW4gb2RkIHNpemUgY2h1bmtzIHNvIHRoYXQgd2UgdGVzdCB0aGUgYnVmZmVyaW5nLiAgKi8KKyAgICAgICAgbWVtc2V0IChhYWEsICdhJywgMTAwMCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisgICAgICAgICAgX2djcnlfbWRfd3JpdGUgKGhkLCBhYWEsIDEwMDApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0ID0gImludmFsaWQgREFUQU1PREUiOworICAgIH0KKworICBpZiAoIXJlc3VsdCkKKyAgICB7CisgICAgICBkaWdlc3QgPSBfZ2NyeV9tZF9yZWFkIChoZCwgYWxnbyk7CisKKyAgICAgIGlmICggbWVtY21wIChkaWdlc3QsIGV4cGVjdCwgZXhwZWN0bGVuKSApCisgICAgICAgIHJlc3VsdCA9ICJkaWdlc3QgbWlzbWF0Y2giOworICAgIH0KKworICBfZ2NyeV9tZF9jbG9zZSAoaGQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogQ29tbW9uIGZ1bmN0aW9uIHRvIHdyaXRlIGEgY2h1bmsgb2YgZGF0YSB0byB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uCisgICBvZiBhIGhhc2ggYWxnb3JpdGhtLiAgTm90ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlIHRlcm0gImJsb2NrIiBkb2VzCisgICBub3QgaW1wbHkgYSBmaXhlZCBzaXplIGJsb2NrLiAgKi8KK3ZvaWQKK19nY3J5X21kX2Jsb2NrX3dyaXRlICh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsIHNpemVfdCBpbmxlbikKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIGdjcnlfbWRfYmxvY2tfY3R4X3QgKmhkID0gY29udGV4dDsKKyAgdW5zaWduZWQgaW50IHN0YWNrX2J1cm4gPSAwOworCisgIGlmIChzaXplb2YoaGQtPmJ1ZikgPCBoZC0+YmxvY2tzaXplKQorICAgIEJVRygpOworCisgIGlmIChoZC0+YnVmID09IE5VTEwgfHwgaGQtPmJ3cml0ZSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBpZiAoaGQtPmNvdW50ID09IGhkLT5ibG9ja3NpemUpICAvKiBGbHVzaCB0aGUgYnVmZmVyLiAqLworICAgIHsKKyAgICAgIHN0YWNrX2J1cm4gPSBoZC0+YndyaXRlIChoZCwgaGQtPmJ1Zik7CisgICAgICBfZ2NyeV9idXJuX3N0YWNrIChzdGFja19idXJuKTsKKyAgICAgIHN0YWNrX2J1cm4gPSAwOworICAgICAgaGQtPmNvdW50ID0gMDsKKyAgICAgIGlmICghKytoZC0+bmJsb2NrcykKKyAgICAgICAgaGQtPm5ibG9ja3NfaGlnaCsrOworICAgIH0KKyAgaWYgKCFpbmJ1ZikKKyAgICByZXR1cm47CisKKyAgaWYgKGhkLT5jb3VudCkKKyAgICB7CisgICAgICBmb3IgKDsgaW5sZW4gJiYgaGQtPmNvdW50IDwgaGQtPmJsb2Nrc2l6ZTsgaW5sZW4tLSkKKyAgICAgICAgaGQtPmJ1ZltoZC0+Y291bnQrK10gPSAqaW5idWYrKzsKKyAgICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlIChoZCwgTlVMTCwgMCk7CisgICAgICBpZiAoIWlubGVuKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgIHdoaWxlIChpbmxlbiA+PSBoZC0+YmxvY2tzaXplKQorICAgIHsKKyAgICAgIHN0YWNrX2J1cm4gPSBoZC0+YndyaXRlIChoZCwgaW5idWYpOworICAgICAgaGQtPmNvdW50ID0gMDsKKyAgICAgIGlmICghKytoZC0+bmJsb2NrcykKKyAgICAgICAgaGQtPm5ibG9ja3NfaGlnaCsrOworICAgICAgaW5sZW4gLT0gaGQtPmJsb2Nrc2l6ZTsKKyAgICAgIGluYnVmICs9IGhkLT5ibG9ja3NpemU7CisgICAgfQorICBfZ2NyeV9idXJuX3N0YWNrIChzdGFja19idXJuKTsKKyAgZm9yICg7IGlubGVuICYmIGhkLT5jb3VudCA8IGhkLT5ibG9ja3NpemU7IGlubGVuLS0pCisgICAgaGQtPmJ1ZltoZC0+Y291bnQrK10gPSAqaW5idWYrKzsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9oYXNoLWNvbW1vbi5oIGIvY2lwaGVyL2hhc2gtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5NTM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9oYXNoLWNvbW1vbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIGhhc2gtY29tbW9uLmggLSBEZWNsYXJhdGlvbnMgb2YgY29tbW9uIGNvZGUgZm9yIGhhc2ggYWxnb3JpdGhtcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHQ1JZX0hBU0hfQ09NTU9OX0gKKyNkZWZpbmUgR0NSWV9IQVNIX0NPTU1PTl9ICisKKyNpbmNsdWRlICJ0eXBlcy5oIgorCisKK2NvbnN0IGNoYXIgKiBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorLyoqLyAgICAgICAgIChpbnQgYWxnbywKKyAgICAgICAgICAgICAgaW50IGRhdGFtb2RlLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbiwKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZXhwZWN0LCBzaXplX3QgZXhwZWN0bGVuKTsKKworLyogVHlwZSBmb3IgdGhlIG1kX3dyaXRlIGhlbHBlciBmdW5jdGlvbi4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCAoKl9nY3J5X21kX2Jsb2NrX3dyaXRlX3QpICh2b2lkICpjLAorCQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKKworI2lmIGRlZmluZWQoSEFWRV9VNjRfVFlQRURFRikgJiYgKGRlZmluZWQoVVNFX1NIQTUxMikgfHwgZGVmaW5lZChVU0VfV0hJUkxQT09MKSkKKy8qIFNIQS01MTIgbmVlZHMgdTY0IGFuZCBsYXJnZXIgYnVmZmVyLiBXaGlybHBvb2wgbmVlZHMgdTY0LiAqLworIyBkZWZpbmUgTURfQkxPQ0tfTUFYX0JMT0NLU0laRSAxMjgKKyMgZGVmaW5lIE1EX05CTE9DS1NfVFlQRSB1NjQKKyNlbHNlCisjIGRlZmluZSBNRF9CTE9DS19NQVhfQkxPQ0tTSVpFIDY0CisjIGRlZmluZSBNRF9OQkxPQ0tTX1RZUEUgdTMyCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tZF9ibG9ja19jdHgKK3sKKyAgICBieXRlIGJ1ZltNRF9CTE9DS19NQVhfQkxPQ0tTSVpFXTsKKyAgICBNRF9OQkxPQ0tTX1RZUEUgbmJsb2NrczsKKyAgICBNRF9OQkxPQ0tTX1RZUEUgbmJsb2Nrc19oaWdoOworICAgIGludCBjb3VudDsKKyAgICBzaXplX3QgYmxvY2tzaXplOworICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlX3QgYndyaXRlOworfSBnY3J5X21kX2Jsb2NrX2N0eF90OworCisKK3ZvaWQKK19nY3J5X21kX2Jsb2NrX3dyaXRlKCB2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsIHNpemVfdCBpbmxlbik7CisKKyNlbmRpZiAvKkdDUllfSEFTSF9DT01NT05fSCovCmRpZmYgLS1naXQgYS9jaXBoZXIvaG1hYy10ZXN0cy5jIGIvY2lwaGVyL2htYWMtdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzI3MzQyCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL2htYWMtdGVzdHMuYwpAQCAtMCwwICsxLDczMiBAQAorLyogaG1hYy10ZXN0cy5jIC0gSE1BQyBzZWxmdGVzdHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgICBBbHRob3VnaCBhbGdvcml0aG0gc2VsZi10ZXN0cyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCBpbiB0aGUgbW9kdWxlCisgICBpbXBsZW1lbnRpbmcgdGhlIGFsZ29yaXRobSwgdGhlIGNhc2UgZm9yIEhNQUMgaXMgZGlmZmVyZW50IGJlY2F1c2UKKyAgIEhNQUMgaXMgaW1wbGVtbmV0ZCBvbiBhIGhpZ2hlciBsZXZlbCB1c2luZyBhIHNwZWNpYWwgZmVhdHVyZSBvZiB0aGUKKyAgIGdjcnlfbWRfIGZ1bmN0aW9ucy4gIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgYWxzbyBpbiB0aGUKKyAgIGRpZ2VzdCBhbGdvcml0aG0gbW9kdWxlcywgYnV0IHRoYXQgd291bGQgYmxvdyB1cCB0aGUgY29kZSB0b28gbXVjaAorICAgYW5kIHNwcmVhZCB0aGUgaG1hYyB0ZXN0cyBvdmVyIHNldmVyYWwgbW9kdWxlcy4KKworICAgVGh1cyB3ZSBpbXBsZW1lbnQgYWxsIEhNQUMgdGVzdHMgaW4gdGhpcyB0ZXN0IG1vZHVsZSBhbmQgcHJvdmlkZSBhCisgICBmdW5jdGlvbiB0byBydW4gdGhlIHRlc3RzLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiaG1hYzI1Ni5oIgorCisvKiBDaGVjayBvbmUgSE1BQyB3aXRoIGRpZ2VzdCBBTEdPIHVzaW5nIHRoZSByZWd1YWxyIEhBTUMKKyAgIEFQSS4gKERBVEEsREFUQUxFTikgaXMgdGhlIGRhdGEgdG8gYmUgTUFDZWQsIChLRVksS0VZTEVOKSB0aGUga2V5CisgICBhbmQgKEVYUEVDVCxFWFBFQ1RMRU4pIHRoZSBleHBlY3RlZCByZXN1bHQuICBSZXR1cm5zIE5VTEwgb24KKyAgIHN1Y2NkZXNzIG9yIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZhaWx1cmUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorY2hlY2tfb25lIChpbnQgYWxnbywKKyAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgY29uc3Qgdm9pZCAqZXhwZWN0LCBzaXplX3QgZXhwZWN0bGVuKQoreworICBnY3J5X21kX2hkX3QgaGQ7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKworLyogICBwcmludGYgKCJITUFDIGFsZ28gJWRcbiIsIGFsZ28pOyAqLworICBpZiAoX2djcnlfbWRfZ2V0X2FsZ29fZGxlbiAoYWxnbykgIT0gZXhwZWN0bGVuKQorICAgIHJldHVybiAiaW52YWxpZCB0ZXN0cyBkYXRhIjsKKyAgaWYgKF9nY3J5X21kX29wZW4gKCZoZCwgYWxnbywgR0NSWV9NRF9GTEFHX0hNQUMpKQorICAgIHJldHVybiAiZ2NyeV9tZF9vcGVuIGZhaWxlZCI7CisgIGlmIChfZ2NyeV9tZF9zZXRrZXkgKGhkLCBrZXksIGtleWxlbikpCisgICAgeworICAgICAgX2djcnlfbWRfY2xvc2UgKGhkKTsKKyAgICAgIHJldHVybiAiZ2NyeV9tZF9zZXRrZXkgZmFpbGVkIjsKKyAgICB9CisgIF9nY3J5X21kX3dyaXRlIChoZCwgZGF0YSwgZGF0YWxlbik7CisgIGRpZ2VzdCA9IF9nY3J5X21kX3JlYWQgKGhkLCBhbGdvKTsKKyAgaWYgKCFkaWdlc3QpCisgICAgeworICAgICAgX2djcnlfbWRfY2xvc2UgKGhkKTsKKyAgICAgIHJldHVybiAiZ2NyeV9tZF9yZWFkIGZhaWxlZCI7CisgICAgfQorICBpZiAobWVtY21wIChkaWdlc3QsIGV4cGVjdCwgZXhwZWN0bGVuKSkKKyAgICB7CisvKiAgICAgICBpbnQgaTsgKi8KKworLyogICAgICAgZnB1dHMgKCIgICAgICAgIHsiLCBzdGRvdXQpOyAqLworLyogICAgICAgZm9yIChpPTA7IGkgPCBleHBlY3RsZW4tMTsgaSsrKSAqLworLyogICAgICAgICB7ICovCisvKiAgICAgICAgICAgaWYgKGkgJiYgIShpICUgOCkpICovCisvKiAgICAgICAgICAgICBmcHV0cyAoIlxuICAgICAgICAgIiwgc3Rkb3V0KTsgKi8KKy8qICAgICAgICAgICBwcmludGYgKCIgMHglMDJ4LCIsIGRpZ2VzdFtpXSk7ICovCisvKiAgICAgICAgIH0gKi8KKy8qICAgICAgIHByaW50ZiAoIiAweCUwMnggfSB9LFxuIiwgZGlnZXN0W2ldKTsgKi8KKworICAgICAgX2djcnlfbWRfY2xvc2UgKGhkKTsKKyAgICAgIHJldHVybiAiZG9lcyBub3QgbWF0Y2giOworICAgIH0KKyAgX2djcnlfbWRfY2xvc2UgKGhkKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGdwZ19lcnJfY29kZV90CitzZWxmdGVzdHNfc2hhMSAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworICB1bnNpZ25lZCBjaGFyIGtleVsxMjhdOworICBpbnQgaSwgajsKKworICB3aGF0ID0gIkZJUFMtMTk4YSwgQS4xIjsKKyAgZm9yIChpPTA7IGkgPCA2NDsgaSsrKQorICAgIGtleVtpXSA9IGk7CisgIGVycnR4dCA9IGNoZWNrX29uZSAoR0NSWV9NRF9TSEExLAorICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGUgIzEiLCA5LAorICAgICAgICAgICAgICAgICAgICAgIGtleSwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgIlx4NGZceDRjXHhhM1x4ZDVceGQ2XHg4Ylx4YTdceGNjXHgwYVx4MTIiCisgICAgICAgICAgICAgICAgICAgICAgIlx4MDhceGM5XHhjNlx4MWVceDljXHg1ZFx4YTBceDQwXHgzY1x4MGEiLCAyMCk7CisgIGlmIChlcnJ0eHQpCisgICAgZ290byBmYWlsZWQ7CisKKyAgaWYgKGV4dGVuZGVkKQorICAgIHsKKyAgICAgIHdoYXQgPSAiRklQUy0xOThhLCBBLjIiOworICAgICAgZm9yIChpPTAsIGo9MHgzMDsgaSA8IDIwOyBpKyspCisgICAgICAgIGtleVtpXSA9IGorKzsKKyAgICAgIGVycnR4dCA9IGNoZWNrX29uZSAoR0NSWV9NRF9TSEExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlICMyIiwgOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDlceDIyXHhkM1x4NDBceDVmXHhhYVx4M2RceDE5XHg0Zlx4ODIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGE0XHg1OFx4MzBceDczXHg3ZFx4NWNceGM2XHhjN1x4NWRceDI0IiwgMjApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICAgIHdoYXQgPSAiRklQUy0xOThhLCBBLjMiOworICAgICAgZm9yIChpPTAsIGo9MHg1MDsgaSA8IDEwMDsgaSsrKQorICAgICAgICBrZXlbaV0gPSBqKys7CisgICAgICBlcnJ0eHQgPSBjaGVja19vbmUgKEdDUllfTURfU0hBMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZSAjMyIsIDksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhiY1x4ZjRceDFlXHhhYlx4OGJceGIyXHhkOFx4MDJceGYzXHhkMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4NWNceGFmXHg3Y1x4YjBceDkyXHhlY1x4ZjhceGQxXHhhM1x4YWEiLCAyMCApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICAgIHdoYXQgPSAiRklQUy0xOThhLCBBLjQiOworICAgICAgZm9yIChpPTAsIGo9MHg3MDsgaSA8IDQ5OyBpKyspCisgICAgICAgIGtleVtpXSA9IGorKzsKKyAgICAgIGVycnR4dCA9IGNoZWNrX29uZSAoR0NSWV9NRF9TSEExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlICM0IiwgOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCA0OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OWVceGE4XHg4Nlx4ZWZceGUyXHg2OFx4ZGJceGVjXHhjZVx4NDIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDBjXHg3NVx4MjRceGRmXHgzMlx4ZTBceDc1XHgxYVx4MmFceDI2IiwgMjAgKTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoImhtYWMiLCBHQ1JZX01EX1NIQTEsIHdoYXQsIGVycnR4dCk7CisgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKK30KKworCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTIyNCAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgc3RhdGljIHN0cnVjdAorICB7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGRlc2M7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGRhdGE7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGtleTsKKyAgICBjb25zdCBjaGFyIGV4cGVjdFsyOF07CisgIH0gdHZbXSA9CisgICAgeworICAgICAgeyAiZGF0YS0yOCBrZXktNCIsCisgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwKKyAgICAgICAgIkplZmUiLAorICAgICAgICB7IDB4YTMsIDB4MGUsIDB4MDEsIDB4MDksIDB4OGIsIDB4YzYsIDB4ZGIsIDB4YmYsCisgICAgICAgICAgMHg0NSwgMHg2OSwgMHgwZiwgMHgzYSwgMHg3ZSwgMHg5ZSwgMHg2ZCwgMHgwZiwKKyAgICAgICAgICAweDhiLCAweGJlLCAweGEyLCAweGEzLCAweDllLCAweDYxLCAweDQ4LCAweDAwLAorICAgICAgICAgIDB4OGYsIDB4ZDAsIDB4NWUsIDB4NDQgfSB9LAorCisgICAgICB7ICJkYXRhLTkga2V5LTIwIiwKKyAgICAgICAgIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGIiLAorICAgICAgICB7IDB4ODksIDB4NmYsIDB4YjEsIDB4MTIsIDB4OGEsIDB4YmIsIDB4ZGYsIDB4MTksCisgICAgICAgICAgMHg2OCwgMHgzMiwgMHgxMCwgMHg3YywgMHhkNCwgMHg5ZCwgMHhmMywgMHgzZiwKKyAgICAgICAgICAweDQ3LCAweGI0LCAweGIxLCAweDE2LCAweDk5LCAweDEyLCAweGJhLCAweDRmLAorICAgICAgICAgIDB4NTMsIDB4NjgsIDB4NGIsIDB4MjIgfSB9LAorCisgICAgICB7ICJkYXRhLTUwIGtleS0yMCIsCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZCIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDdmLCAweGIzLCAweGNiLCAweDM1LCAweDg4LCAweGM2LCAweGMxLCAweGY2LAorICAgICAgICAgIDB4ZmYsIDB4YTksIDB4NjksIDB4NGQsIDB4N2QsIDB4NmEsIDB4ZDIsIDB4NjQsCisgICAgICAgICAgMHg5MywgMHg2NSwgMHhiMCwgMHhjMSwgMHhmNiwgMHg1ZCwgMHg2OSwgMHhkMSwKKyAgICAgICAgICAweGVjLCAweDgzLCAweDMzLCAweGVhIH0gfSwKKworICAgICAgeyAiZGF0YS01MCBrZXktMjYiLAorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorICAgICAgICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKyAgICAgICAgeyAweDZjLCAweDExLCAweDUwLCAweDY4LCAweDc0LCAweDAxLCAweDNjLCAweGFjLAorICAgICAgICAgIDB4NmEsIDB4MmEsIDB4YmMsIDB4MWIsIDB4YjMsIDB4ODIsIDB4NjIsIDB4N2MsCisgICAgICAgICAgMHhlYywgMHg2YSwgMHg5MCwgMHhkOCwgMHg2ZSwgMHhmYywgMHgwMSwgMHgyZCwKKyAgICAgICAgICAweGU3LCAweGFmLCAweGVjLCAweDVhIH0gfSwKKworICAgICAgeyAiZGF0YS01NCBrZXktMTMxIiwKKyAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDk1LCAweGU5LCAweGEwLCAweGRiLCAweDk2LCAweDIwLCAweDk1LCAweGFkLAorICAgICAgICAgIDB4YWUsIDB4YmUsIDB4OWIsIDB4MmQsIDB4NmYsIDB4MGQsIDB4YmMsIDB4ZTIsCisgICAgICAgICAgMHhkNCwgMHg5OSwgMHhmMSwgMHgxMiwgMHhmMiwgMHhkMiwgMHhiNywgMHgyNywKKyAgICAgICAgICAweDNmLCAweGE2LCAweDg3LCAweDBlIH0gfSwKKworICAgICAgeyAiZGF0YS0xNTIga2V5LTEzMSIsCisgICAgICAgICJUaGlzIGlzIGEgdGVzdCB1c2luZyBhIGxhcmdlciB0aGFuIGJsb2NrLXNpemUga2V5IGFuZCBhIGxhcmdlciAiCisgICAgICAgICJ0aGFuIGJsb2NrLXNpemUgZGF0YS4gVGhlIGtleSBuZWVkcyB0byBiZSBoYXNoZWQgYmVmb3JlIGJlaW5nICIKKyAgICAgICAgInVzZWQgYnkgdGhlIEhNQUMgYWxnb3JpdGhtLiIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDNhLCAweDg1LCAweDQxLCAweDY2LCAweGFjLCAweDVkLCAweDlmLCAweDAyLAorICAgICAgICAgIDB4M2YsIDB4NTQsIDB4ZDUsIDB4MTcsIDB4ZDAsIDB4YjMsIDB4OWQsIDB4YmQsCisgICAgICAgICAgMHg5NCwgMHg2NywgMHg3MCwgMHhkYiwgMHg5YywgMHgyYiwgMHg5NSwgMHhjOSwKKyAgICAgICAgICAweGY2LCAweGY1LCAweDY1LCAweGQxIH0gfSwKKworICAgICAgeyBOVUxMIH0KKyAgICB9OworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisgIGludCB0dmlkeDsKKworICBmb3IgKHR2aWR4PTA7IHR2W3R2aWR4XS5kZXNjOyB0dmlkeCsrKQorICAgIHsKKyAgICAgIHdoYXQgPSB0dlt0dmlkeF0uZGVzYzsKKyAgICAgIGVycnR4dCA9IGNoZWNrX29uZSAoR0NSWV9NRF9TSEEyMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5kYXRhLCBzdHJsZW4gKHR2W3R2aWR4XS5kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLmtleSwgc3RybGVuICh0dlt0dmlkeF0ua2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLmV4cGVjdCwgRElNICh0dlt0dmlkeF0uZXhwZWN0KSApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICBpZiAoIWV4dGVuZGVkKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KKworIGZhaWxlZDoKKyAgaWYgKHJlcG9ydCkKKyAgICByZXBvcnQgKCJobWFjIiwgR0NSWV9NRF9TSEEyMjQsIHdoYXQsIGVycnR4dCk7CisgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKK30KKworCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3NlbGZ0ZXN0c19zaGEyNTYgKGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIHN0YXRpYyBzdHJ1Y3QKKyAgeworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkZXNjOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkYXRhOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBrZXk7CisgICAgY29uc3QgY2hhciBleHBlY3RbMzJdOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIHsgImRhdGEtMjgga2V5LTQiLAorICAgICAgICAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCisgICAgICAgICJKZWZlIiwKKwl7IDB4NWIsIDB4ZGMsIDB4YzEsIDB4NDYsIDB4YmYsIDB4NjAsIDB4NzUsIDB4NGUsCisgICAgICAgICAgMHg2YSwgMHgwNCwgMHgyNCwgMHgyNiwgMHgwOCwgMHg5NSwgMHg3NSwgMHhjNywKKyAgICAgICAgICAweDVhLCAweDAwLCAweDNmLCAweDA4LCAweDlkLCAweDI3LCAweDM5LCAweDgzLAorICAgICAgICAgIDB4OWQsIDB4ZWMsIDB4NTgsIDB4YjksIDB4NjQsIDB4ZWMsIDB4MzgsIDB4NDMgfSB9LAorCisgICAgICB7ICJkYXRhLTkga2V5LTIwIiwKKyAgICAgICAgIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGIiLAorICAgICAgICB7IDB4YjAsIDB4MzQsIDB4NGMsIDB4NjEsIDB4ZDgsIDB4ZGIsIDB4MzgsIDB4NTMsCisgICAgICAgICAgMHg1YywgMHhhOCwgMHhhZiwgMHhjZSwgMHhhZiwgMHgwYiwgMHhmMSwgMHgyYiwKKyAgICAgICAgICAweDg4LCAweDFkLCAweGMyLCAweDAwLCAweGM5LCAweDgzLCAweDNkLCAweGE3LAorICAgICAgICAgIDB4MjYsIDB4ZTksIDB4MzcsIDB4NmMsIDB4MmUsIDB4MzIsIDB4Y2YsIDB4ZjcgfSB9LAorCisgICAgICB7ICJkYXRhLTUwIGtleS0yMCIsCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZCIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDc3LCAweDNlLCAweGE5LCAweDFlLCAweDM2LCAweDgwLCAweDBlLCAweDQ2LAorICAgICAgICAgIDB4ODUsIDB4NGQsIDB4YjgsIDB4ZWIsIDB4ZDAsIDB4OTEsIDB4ODEsIDB4YTcsCisgICAgICAgICAgMHgyOSwgMHg1OSwgMHgwOSwgMHg4YiwgMHgzZSwgMHhmOCwgMHhjMSwgMHgyMiwKKyAgICAgICAgICAweGQ5LCAweDYzLCAweDU1LCAweDE0LCAweGNlLCAweGQ1LCAweDY1LCAweGZlIH0gfSwKKworICAgICAgeyAiZGF0YS01MCBrZXktMjYiLAorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorICAgICAgICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKwl7IDB4ODIsIDB4NTUsIDB4OGEsIDB4MzgsIDB4OWEsIDB4NDQsIDB4M2MsIDB4MGUsCisgICAgICAgICAgMHhhNCwgMHhjYywgMHg4MSwgMHg5OCwgMHg5OSwgMHhmMiwgMHgwOCwgMHgzYSwKKyAgICAgICAgICAweDg1LCAweGYwLCAweGZhLCAweGEzLCAweGU1LCAweDc4LCAweGY4LCAweDA3LAorICAgICAgICAgIDB4N2EsIDB4MmUsIDB4M2YsIDB4ZjQsIDB4NjcsIDB4MjksIDB4NjYsIDB4NWIgfSB9LAorCisgICAgICB7ICJkYXRhLTU0IGtleS0xMzEiLAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorCXsgMHg2MCwgMHhlNCwgMHgzMSwgMHg1OSwgMHgxZSwgMHhlMCwgMHhiNiwgMHg3ZiwKKyAgICAgICAgICAweDBkLCAweDhhLCAweDI2LCAweGFhLCAweGNiLCAweGY1LCAweGI3LCAweDdmLAorICAgICAgICAgIDB4OGUsIDB4MGIsIDB4YzYsIDB4MjEsIDB4MzcsIDB4MjgsIDB4YzUsIDB4MTQsCisgICAgICAgICAgMHgwNSwgMHg0NiwgMHgwNCwgMHgwZiwgMHgwZSwgMHhlMywgMHg3ZiwgMHg1NCB9IH0sCisKKyAgICAgIHsgImRhdGEtMTUyIGtleS0xMzEiLAorICAgICAgICAiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgIgorICAgICAgICAidGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyAiCisgICAgICAgICJ1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYSIsCisJeyAweDliLCAweDA5LCAweGZmLCAweGE3LCAweDFiLCAweDk0LCAweDJmLCAweGNiLAorICAgICAgICAgIDB4MjcsIDB4NjMsIDB4NWYsIDB4YmMsIDB4ZDUsIDB4YjAsIDB4ZTksIDB4NDQsCisgICAgICAgICAgMHhiZiwgMHhkYywgMHg2MywgMHg2NCwgMHg0ZiwgMHgwNywgMHgxMywgMHg5MywKKyAgICAgICAgICAweDhhLCAweDdmLCAweDUxLCAweDUzLCAweDVjLCAweDNhLCAweDM1LCAweGUyIH0gfSwKKworICAgICAgeyBOVUxMIH0KKyAgICB9OworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisgIGludCB0dmlkeDsKKworICBmb3IgKHR2aWR4PTA7IHR2W3R2aWR4XS5kZXNjOyB0dmlkeCsrKQorICAgIHsKKyAgICAgIGhtYWMyNTZfY29udGV4dF90IGhtYWNoZDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKyAgICAgIHNpemVfdCBkbGVuOworCisgICAgICB3aGF0ID0gdHZbdHZpZHhdLmRlc2M7CisgICAgICBlcnJ0eHQgPSBjaGVja19vbmUgKEdDUllfTURfU0hBMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0uZGF0YSwgc3RybGVuICh0dlt0dmlkeF0uZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5rZXksIHN0cmxlbiAodHZbdHZpZHhdLmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5leHBlY3QsIERJTSAodHZbdHZpZHhdLmV4cGVjdCkgKTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworCisgICAgICBobWFjaGQgPSBfZ2NyeV9obWFjMjU2X25ldyAodHZbdHZpZHhdLmtleSwgc3RybGVuICh0dlt0dmlkeF0ua2V5KSk7CisgICAgICBpZiAoIWhtYWNoZCkKKyAgICAgICAgeworICAgICAgICAgIGVycnR4dCA9ICJfZ2NyeV9obWFjMjU2X25ldyBmYWlsZWQiOworICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICBfZ2NyeV9obWFjMjU2X3VwZGF0ZSAoaG1hY2hkLCB0dlt0dmlkeF0uZGF0YSwgc3RybGVuICh0dlt0dmlkeF0uZGF0YSkpOworICAgICAgZGlnZXN0ID0gX2djcnlfaG1hYzI1Nl9maW5hbGl6ZSAoaG1hY2hkLCAmZGxlbik7CisgICAgICBpZiAoIWRpZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIGVycnR4dCA9ICJfZ2NyeV9obWFjMjU2X2ZpbmFsaXplIGZhaWxlZCI7CisgICAgICAgICAgX2djcnlfaG1hYzI1Nl9yZWxlYXNlIChobWFjaGQpOworICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICBpZiAoZGxlbiAhPSBESU0gKHR2W3R2aWR4XS5leHBlY3QpCisgICAgICAgICAgfHwgbWVtY21wIChkaWdlc3QsIHR2W3R2aWR4XS5leHBlY3QsIERJTSAodHZbdHZpZHhdLmV4cGVjdCkpKQorICAgICAgICB7CisgICAgICAgICAgZXJydHh0ID0gImRvZXMgbm90IG1hdGNoIGluIHNlY29uZCBpbXBsZW1lbnRhdGlvbiI7CisgICAgICAgICAgX2djcnlfaG1hYzI1Nl9yZWxlYXNlIChobWFjaGQpOworICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICBfZ2NyeV9obWFjMjU2X3JlbGVhc2UgKGhtYWNoZCk7CisKKyAgICAgIGlmICghZXh0ZW5kZWQpCisgICAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoImhtYWMiLCBHQ1JZX01EX1NIQTI1Niwgd2hhdCwgZXJydHh0KTsKKyAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworfQorCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTM4NCAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgc3RhdGljIHN0cnVjdAorICB7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGRlc2M7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGRhdGE7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGtleTsKKyAgICBjb25zdCBjaGFyIGV4cGVjdFs0OF07CisgIH0gdHZbXSA9CisgICAgeworICAgICAgeyAiZGF0YS0yOCBrZXktNCIsCisgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwKKyAgICAgICAgIkplZmUiLAorICAgICAgICB7IDB4YWYsIDB4NDUsIDB4ZDIsIDB4ZTMsIDB4NzYsIDB4NDgsIDB4NDAsIDB4MzEsCisgICAgICAgICAgMHg2MSwgMHg3ZiwgMHg3OCwgMHhkMiwgMHhiNSwgMHg4YSwgMHg2YiwgMHgxYiwKKyAgICAgICAgICAweDljLCAweDdlLCAweGY0LCAweDY0LCAweGY1LCAweGEwLCAweDFiLCAweDQ3LAorICAgICAgICAgIDB4ZTQsIDB4MmUsIDB4YzMsIDB4NzMsIDB4NjMsIDB4MjIsIDB4NDQsIDB4NWUsCisgICAgICAgICAgMHg4ZSwgMHgyMiwgMHg0MCwgMHhjYSwgMHg1ZSwgMHg2OSwgMHhlMiwgMHhjNywKKyAgICAgICAgICAweDhiLCAweDMyLCAweDM5LCAweGVjLCAweGZhLCAweGIyLCAweDE2LCAweDQ5IH0gfSwKKworICAgICAgeyAiZGF0YS05IGtleS0yMCIsCisgICAgICAgICJIaSBUaGVyZSIsCisJIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisgICAgICAgICJceDBiXHgwYlx4MGJceDBiIiwKKyAgICAgICAgeyAweGFmLCAweGQwLCAweDM5LCAweDQ0LCAweGQ4LCAweDQ4LCAweDk1LCAweDYyLAorICAgICAgICAgIDB4NmIsIDB4MDgsIDB4MjUsIDB4ZjQsIDB4YWIsIDB4NDYsIDB4OTAsIDB4N2YsCisgICAgICAgICAgMHgxNSwgMHhmOSwgMHhkYSwgMHhkYiwgMHhlNCwgMHgxMCwgMHgxZSwgMHhjNiwKKyAgICAgICAgICAweDgyLCAweGFhLCAweDAzLCAweDRjLCAweDdjLCAweGViLCAweGM1LCAweDljLAorICAgICAgICAgIDB4ZmEsIDB4ZWEsIDB4OWUsIDB4YTksIDB4MDcsIDB4NmUsIDB4ZGUsIDB4N2YsCisgICAgICAgICAgMHg0YSwgMHhmMSwgMHg1MiwgMHhlOCwgMHhiMiwgMHhmYSwgMHg5YywgMHhiNiB9IH0sCisKKyAgICAgIHsgImRhdGEtNTAga2V5LTIwIiwKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWEiLAorICAgICAgICB7IDB4ODgsIDB4MDYsIDB4MjYsIDB4MDgsIDB4ZDMsIDB4ZTYsIDB4YWQsIDB4OGEsCisgICAgICAgICAgMHgwYSwgMHhhMiwgMHhhYywgMHhlMCwgMHgxNCwgMHhjOCwgMHhhOCwgMHg2ZiwKKyAgICAgICAgICAweDBhLCAweGE2LCAweDM1LCAweGQ5LCAweDQ3LCAweGFjLCAweDlmLCAweGViLAorICAgICAgICAgIDB4ZTgsIDB4M2UsIDB4ZjQsIDB4ZTUsIDB4NTksIDB4NjYsIDB4MTQsIDB4NGIsCisgICAgICAgICAgMHgyYSwgMHg1YSwgMHhiMywgMHg5ZCwgMHhjMSwgMHgzOCwgMHgxNCwgMHhiOSwKKyAgICAgICAgICAweDRlLCAweDNhLCAweGI2LCAweGUxLCAweDAxLCAweGEzLCAweDRmLCAweDI3IH0gfSwKKworICAgICAgeyAiZGF0YS01MCBrZXktMjYiLAorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorICAgICAgICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKyAgICAgICAgeyAweDNlLCAweDhhLCAweDY5LCAweGI3LCAweDc4LCAweDNjLCAweDI1LCAweDg1LAorICAgICAgICAgIDB4MTksIDB4MzMsIDB4YWIsIDB4NjIsIDB4OTAsIDB4YWYsIDB4NmMsIDB4YTcsCisgICAgICAgICAgMHg3YSwgMHg5OSwgMHg4MSwgMHg0OCwgMHgwOCwgMHg1MCwgMHgwMCwgMHg5YywKKyAgICAgICAgICAweGM1LCAweDU3LCAweDdjLCAweDZlLCAweDFmLCAweDU3LCAweDNiLCAweDRlLAorICAgICAgICAgIDB4NjgsIDB4MDEsIDB4ZGQsIDB4MjMsIDB4YzQsIDB4YTcsIDB4ZDYsIDB4NzksCisgICAgICAgICAgMHhjYywgMHhmOCwgMHhhMywgMHg4NiwgMHhjNiwgMHg3NCwgMHhjZiwgMHhmYiB9IH0sCisKKyAgICAgIHsgImRhdGEtNTQga2V5LTEzMSIsCisgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYSIsCisgICAgICAgIHsgMHg0ZSwgMHhjZSwgMHgwOCwgMHg0NCwgMHg4NSwgMHg4MSwgMHgzZSwgMHg5MCwKKyAgICAgICAgICAweDg4LCAweGQyLCAweGM2LCAweDNhLCAweDA0LCAweDFiLCAweGM1LCAweGI0LAorICAgICAgICAgIDB4NGYsIDB4OWUsIDB4ZjEsIDB4MDEsIDB4MmEsIDB4MmIsIDB4NTgsIDB4OGYsCisgICAgICAgICAgMHgzYywgMHhkMSwgMHgxZiwgMHgwNSwgMHgwMywgMHgzYSwgMHhjNCwgMHhjNiwKKyAgICAgICAgICAweDBjLCAweDJlLCAweGY2LCAweGFiLCAweDQwLCAweDMwLCAweGZlLCAweDgyLAorICAgICAgICAgIDB4OTYsIDB4MjQsIDB4OGQsIDB4ZjEsIDB4NjMsIDB4ZjQsIDB4NDksIDB4NTIgfSB9LAorCisgICAgICB7ICJkYXRhLTE1MiBrZXktMTMxIiwKKyAgICAgICAgIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyICIKKyAgICAgICAgInRoYW4gYmxvY2stc2l6ZSBkYXRhLiBUaGUga2V5IG5lZWRzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgIgorICAgICAgICAidXNlZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorICAgICAgICB7IDB4NjYsIDB4MTcsIDB4MTcsIDB4OGUsIDB4OTQsIDB4MWYsIDB4MDIsIDB4MGQsCisgICAgICAgICAgMHgzNSwgMHgxZSwgMHgyZiwgMHgyNSwgMHg0ZSwgMHg4ZiwgMHhkMywgMHgyYywKKyAgICAgICAgICAweDYwLCAweDI0LCAweDIwLCAweGZlLCAweGIwLCAweGI4LCAweGZiLCAweDlhLAorICAgICAgICAgIDB4ZGMsIDB4Y2UsIDB4YmIsIDB4ODIsIDB4NDYsIDB4MWUsIDB4OTksIDB4YzUsCisgICAgICAgICAgMHhhNiwgMHg3OCwgMHhjYywgMHgzMSwgMHhlNywgMHg5OSwgMHgxNywgMHg2ZCwKKyAgICAgICAgICAweDM4LCAweDYwLCAweGU2LCAweDExLCAweDBjLCAweDQ2LCAweDUyLCAweDNlIH0gfSwKKworICAgICAgeyBOVUxMIH0KKyAgICB9OworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisgIGludCB0dmlkeDsKKworICBmb3IgKHR2aWR4PTA7IHR2W3R2aWR4XS5kZXNjOyB0dmlkeCsrKQorICAgIHsKKyAgICAgIHdoYXQgPSB0dlt0dmlkeF0uZGVzYzsKKyAgICAgIGVycnR4dCA9IGNoZWNrX29uZSAoR0NSWV9NRF9TSEEzODQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5kYXRhLCBzdHJsZW4gKHR2W3R2aWR4XS5kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLmtleSwgc3RybGVuICh0dlt0dmlkeF0ua2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLmV4cGVjdCwgRElNICh0dlt0dmlkeF0uZXhwZWN0KSApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICBpZiAoIWV4dGVuZGVkKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KKworIGZhaWxlZDoKKyAgaWYgKHJlcG9ydCkKKyAgICByZXBvcnQgKCJobWFjIiwgR0NSWV9NRF9TSEEzODQsIHdoYXQsIGVycnR4dCk7CisgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKK30KKworCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3NlbGZ0ZXN0c19zaGE1MTIgKGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIHN0YXRpYyBzdHJ1Y3QKKyAgeworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkZXNjOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkYXRhOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBrZXk7CisgICAgY29uc3QgY2hhciBleHBlY3RbNjRdOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIHsgImRhdGEtMjgga2V5LTQiLAorICAgICAgICAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCisgICAgICAgICJKZWZlIiwKKyAgICAgICAgeyAweDE2LCAweDRiLCAweDdhLCAweDdiLCAweGZjLCAweGY4LCAweDE5LCAweGUyLAorICAgICAgICAgIDB4ZTMsIDB4OTUsIDB4ZmIsIDB4ZTcsIDB4M2IsIDB4NTYsIDB4ZTAsIDB4YTMsCisgICAgICAgICAgMHg4NywgMHhiZCwgMHg2NCwgMHgyMiwgMHgyZSwgMHg4MywgMHgxZiwgMHhkNiwKKyAgICAgICAgICAweDEwLCAweDI3LCAweDBjLCAweGQ3LCAweGVhLCAweDI1LCAweDA1LCAweDU0LAorICAgICAgICAgIDB4OTcsIDB4NTgsIDB4YmYsIDB4NzUsIDB4YzAsIDB4NWEsIDB4OTksIDB4NGEsCisgICAgICAgICAgMHg2ZCwgMHgwMywgMHg0ZiwgMHg2NSwgMHhmOCwgMHhmMCwgMHhlNiwgMHhmZCwKKyAgICAgICAgICAweGNhLCAweGVhLCAweGIxLCAweGEzLCAweDRkLCAweDRhLCAweDZiLCAweDRiLAorICAgICAgICAgIDB4NjMsIDB4NmUsIDB4MDcsIDB4MGEsIDB4MzgsIDB4YmMsIDB4ZTcsIDB4MzcgfSB9LAorCisgICAgICB7ICJkYXRhLTkga2V5LTIwIiwKKyAgICAgICAgIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGIiLAorICAgICAgICB7IDB4ODcsIDB4YWEsIDB4N2MsIDB4ZGUsIDB4YTUsIDB4ZWYsIDB4NjEsIDB4OWQsCisgICAgICAgICAgMHg0ZiwgMHhmMCwgMHhiNCwgMHgyNCwgMHgxYSwgMHgxZCwgMHg2YywgMHhiMCwKKyAgICAgICAgICAweDIzLCAweDc5LCAweGY0LCAweGUyLCAweGNlLCAweDRlLCAweGMyLCAweDc4LAorICAgICAgICAgIDB4N2EsIDB4ZDAsIDB4YjMsIDB4MDUsIDB4NDUsIDB4ZTEsIDB4N2MsIDB4ZGUsCisgICAgICAgICAgMHhkYSwgMHhhOCwgMHgzMywgMHhiNywgMHhkNiwgMHhiOCwgMHhhNywgMHgwMiwKKyAgICAgICAgICAweDAzLCAweDhiLCAweDI3LCAweDRlLCAweGFlLCAweGEzLCAweGY0LCAweGU0LAorICAgICAgICAgIDB4YmUsIDB4OWQsIDB4OTEsIDB4NGUsIDB4ZWIsIDB4NjEsIDB4ZjEsIDB4NzAsCisgICAgICAgICAgMHgyZSwgMHg2OSwgMHg2YywgMHgyMCwgMHgzYSwgMHgxMiwgMHg2OCwgMHg1NCB9IH0sCisKKyAgICAgIHsgImRhdGEtNTAga2V5LTIwIiwKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWEiLAorICAgICAgICB7IDB4ZmEsIDB4NzMsIDB4YjAsIDB4MDgsIDB4OWQsIDB4NTYsIDB4YTIsIDB4ODQsCisgICAgICAgICAgMHhlZiwgMHhiMCwgMHhmMCwgMHg3NSwgMHg2YywgMHg4OSwgMHgwYiwgMHhlOSwKKyAgICAgICAgICAweGIxLCAweGI1LCAweGRiLCAweGRkLCAweDhlLCAweGU4LCAweDFhLCAweDM2LAorICAgICAgICAgIDB4NTUsIDB4ZjgsIDB4M2UsIDB4MzMsIDB4YjIsIDB4MjcsIDB4OWQsIDB4MzksCisgICAgICAgICAgMHhiZiwgMHgzZSwgMHg4NCwgMHg4MiwgMHg3OSwgMHhhNywgMHgyMiwgMHhjOCwKKyAgICAgICAgICAweDA2LCAweGI0LCAweDg1LCAweGE0LCAweDdlLCAweDY3LCAweGM4LCAweDA3LAorICAgICAgICAgIDB4YjksIDB4NDYsIDB4YTMsIDB4MzcsIDB4YmUsIDB4ZTgsIDB4OTQsIDB4MjYsCisgICAgICAgICAgMHg3NCwgMHgyNywgMHg4OCwgMHg1OSwgMHhlMSwgMHgzMiwgMHg5MiwgMHhmYiB9IH0sCisKKyAgICAgIHsgImRhdGEtNTAga2V5LTI2IiwKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkIiwKKwkiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMCIKKyAgICAgICAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOSIsCisgICAgICAgIHsgMHhiMCwgMHhiYSwgMHg0NiwgMHg1NiwgMHgzNywgMHg0NSwgMHg4YywgMHg2OSwKKyAgICAgICAgICAweDkwLCAweGU1LCAweGE4LCAweGM1LCAweGY2LCAweDFkLCAweDRhLCAweGY3LAorICAgICAgICAgIDB4ZTUsIDB4NzYsIDB4ZDksIDB4N2YsIDB4ZjksIDB4NGIsIDB4ODcsIDB4MmQsCisgICAgICAgICAgMHhlNywgMHg2ZiwgMHg4MCwgMHg1MCwgMHgzNiwgMHgxZSwgMHhlMywgMHhkYiwKKyAgICAgICAgICAweGE5LCAweDFjLCAweGE1LCAweGMxLCAweDFhLCAweGEyLCAweDVlLCAweGI0LAorICAgICAgICAgIDB4ZDYsIDB4NzksIDB4MjcsIDB4NWMsIDB4YzUsIDB4NzgsIDB4ODAsIDB4NjMsCisgICAgICAgICAgMHhhNSwgMHhmMSwgMHg5NywgMHg0MSwgMHgxMiwgMHgwYywgMHg0ZiwgMHgyZCwKKyAgICAgICAgICAweGUyLCAweGFkLCAweGViLCAweGViLCAweDEwLCAweGEyLCAweDk4LCAweGRkIH0gfSwKKworICAgICAgeyAiZGF0YS01NCBrZXktMTMxIiwKKyAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDgwLCAweGIyLCAweDQyLCAweDYzLCAweGM3LCAweGMxLCAweGEzLCAweGViLAorICAgICAgICAgIDB4YjcsIDB4MTQsIDB4OTMsIDB4YzEsIDB4ZGQsIDB4N2IsIDB4ZTgsIDB4YjQsCisgICAgICAgICAgMHg5YiwgMHg0NiwgMHhkMSwgMHhmNCwgMHgxYiwgMHg0YSwgMHhlZSwgMHhjMSwKKyAgICAgICAgICAweDEyLCAweDFiLCAweDAxLCAweDM3LCAweDgzLCAweGY4LCAweGYzLCAweDUyLAorICAgICAgICAgIDB4NmIsIDB4NTYsIDB4ZDAsIDB4MzcsIDB4ZTAsIDB4NWYsIDB4MjUsIDB4OTgsCisgICAgICAgICAgMHhiZCwgMHgwZiwgMHhkMiwgMHgyMSwgMHg1ZCwgMHg2YSwgMHgxZSwgMHg1MiwKKyAgICAgICAgICAweDk1LCAweGU2LCAweDRmLCAweDczLCAweGY2LCAweDNmLCAweDBhLCAweGVjLAorICAgICAgICAgIDB4OGIsIDB4OTEsIDB4NWEsIDB4OTgsIDB4NWQsIDB4NzgsIDB4NjUsIDB4OTggfSB9LAorCisgICAgICB7ICJkYXRhLTE1MiBrZXktMTMxIiwKKyAgICAgICAgIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyICIKKyAgICAgICAgInRoYW4gYmxvY2stc2l6ZSBkYXRhLiBUaGUga2V5IG5lZWRzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgIgorICAgICAgICAidXNlZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorICAgICAgICB7IDB4ZTMsIDB4N2IsIDB4NmEsIDB4NzcsIDB4NWQsIDB4YzgsIDB4N2QsIDB4YmEsCisgICAgICAgICAgMHhhNCwgMHhkZiwgMHhhOSwgMHhmOSwgMHg2ZSwgMHg1ZSwgMHgzZiwgMHhmZCwKKyAgICAgICAgICAweGRlLCAweGJkLCAweDcxLCAweGY4LCAweDg2LCAweDcyLCAweDg5LCAweDg2LAorICAgICAgICAgIDB4NWQsIDB4ZjUsIDB4YTMsIDB4MmQsIDB4MjAsIDB4Y2QsIDB4YzksIDB4NDQsCisgICAgICAgICAgMHhiNiwgMHgwMiwgMHgyYywgMHhhYywgMHgzYywgMHg0OSwgMHg4MiwgMHhiMSwKKyAgICAgICAgICAweDBkLCAweDVlLCAweGViLCAweDU1LCAweGMzLCAweGU0LCAweGRlLCAweDE1LAorICAgICAgICAgIDB4MTMsIDB4NDYsIDB4NzYsIDB4ZmIsIDB4NmQsIDB4ZTAsIDB4NDQsIDB4NjAsCisgICAgICAgICAgMHg2NSwgMHhjOSwgMHg3NCwgMHg0MCwgMHhmYSwgMHg4YywgMHg2YSwgMHg1OCB9IH0sCisKKyAgICAgIHsgTlVMTCB9CisgICAgfTsKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworICBpbnQgdHZpZHg7CisKKyAgZm9yICh0dmlkeD0wOyB0dlt0dmlkeF0uZGVzYzsgdHZpZHgrKykKKyAgICB7CisgICAgICB3aGF0ID0gdHZbdHZpZHhdLmRlc2M7CisgICAgICBlcnJ0eHQgPSBjaGVja19vbmUgKEdDUllfTURfU0hBNTEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0uZGF0YSwgc3RybGVuICh0dlt0dmlkeF0uZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5rZXksIHN0cmxlbiAodHZbdHZpZHhdLmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5leHBlY3QsIERJTSAodHZbdHZpZHhdLmV4cGVjdCkgKTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgaWYgKCFleHRlbmRlZCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiaG1hYyIsIEdDUllfTURfU0hBNTEyLCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworCisvKiBSdW4gYSBmdWxsIHNlbGYtdGVzdCBmb3IgQUxHTyBhbmQgcmV0dXJuIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3J1bl9zZWxmdGVzdHMgKGludCBhbGdvLCBpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgR0NSWV9NRF9TSEExOgorICAgICAgZWMgPSBzZWxmdGVzdHNfc2hhMSAoZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdDUllfTURfU0hBMjI0OgorICAgICAgZWMgPSBzZWxmdGVzdHNfc2hhMjI0IChleHRlbmRlZCwgcmVwb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR0NSWV9NRF9TSEEyNTY6CisgICAgICBlYyA9IHNlbGZ0ZXN0c19zaGEyNTYgKGV4dGVuZGVkLCByZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ1JZX01EX1NIQTM4NDoKKyAgICAgIGVjID0gc2VsZnRlc3RzX3NoYTM4NCAoZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdDUllfTURfU0hBNTEyOgorICAgICAgZWMgPSBzZWxmdGVzdHNfc2hhNTEyIChleHRlbmRlZCwgcmVwb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlYyA9IEdQR19FUlJfRElHRVNUX0FMR087CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBlYzsKK30KKworCisKKworLyogUnVuIHRoZSBzZWxmdGVzdHMgZm9yIEhNQUMgd2l0aCBkaWdlc3QgYWxnb3JpdGhtIEFMR08gd2l0aCBvcHRpb25hbAorICAgcmVwb3J0aW5nIGZ1bmN0aW9uIFJFUE9SVC4gICovCitncGdfZXJyb3JfdAorX2djcnlfaG1hY19zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlYyA9IDA7CisKKyAgaWYgKCFfZ2NyeV9tZF90ZXN0X2FsZ28gKGFsZ28pKQorICAgIHsKKyAgICAgIGVjID0gcnVuX3NlbGZ0ZXN0cyAoYWxnbywgZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZWMgPSBHUEdfRVJSX0RJR0VTVF9BTEdPOworICAgICAgaWYgKHJlcG9ydCkKKyAgICAgICAgcmVwb3J0ICgiaG1hYyIsIGFsZ28sICJtb2R1bGUiLCAiYWxnb3JpdGhtIG5vdCBhdmFpbGFibGUiKTsKKyAgICB9CisgIHJldHVybiBncGdfZXJyb3IgKGVjKTsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9pZGVhLmMgYi9jaXBoZXIvaWRlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjM0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvaWRlYS5jCkBAIC0wLDAgKzEsMzc5IEBACisvKiBpZGVhLmMgIC0gIElERUEgZnVuY3Rpb24KKyAqIENvcHlyaWdodCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAxIFdlcm5lciBLb2NoIChkZDlqbikKKyAqIENvcHlyaWdodCAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFdFUk5FUiBLT0NIIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgV2VybmVyIEtvY2ggc2hhbGwgbm90IGJlCisgKiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKKyAqIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBXZXJuZXIgS29jaC4KKyAqCisgKiBQYXRlbnRzIG9uIElERUEgaGF2ZSBleHBpcmVkOgorICogICBFdXJvcGU6IEVQMDQ4MjE1NCBvbiAyMDExLTA1LTE2LAorICogICBKYXBhbjogIEpQMzIyNTQ0MCBvbiAyMDExLTA1LTE2LAorICogICBVLlMuOiAgIDUsMjE0LDcwMyBvbiAyMDEyLTAxLTA3LgorICovCisKKy8qCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cubm9lcGF0ZW50cy5vcmcvIHRvIGxlYXJuIHdoeSBzb2Z0d2FyZSBwYXRlbnRzCisgKiBhcmUgYmFkIGZvciBzb2NpZXR5IGFuZCB3aGF0IHlvdSBjYW4gZG8gdG8gZmlnaHQgdGhlbS4KKyAqCisgKiBUaGUgY29kZSBoZXJlaW4gaXMgYmFzZWQgb24gdGhlIG9uZSBmcm9tOgorICogICBCcnVjZSBTY2huZWllcjogQXBwbGllZCBDcnlwdG9ncmFwaHkuIEpvaG4gV2lsZXkgJiBTb25zLCAxOTk2LgorICogICBJU0JOIDAtNDcxLTExNzA5LTkuCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgInR5cGVzLmgiICAvKiBmb3IgYnl0ZSBhbmQgdTMyIHR5cGVkZWZzICovCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKKworI2RlZmluZSBJREVBX0tFWVNJWkUgMTYKKyNkZWZpbmUgSURFQV9CTE9DS1NJWkUgOAorI2RlZmluZSBJREVBX1JPVU5EUyA4CisjZGVmaW5lIElERUFfS0VZTEVOICg2KklERUFfUk9VTkRTKzQpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1MTYgZWtbSURFQV9LRVlMRU5dOworICAgIHUxNiBka1tJREVBX0tFWUxFTl07CisgICAgaW50IGhhdmVfZGs7Cit9IElERUFfY29udGV4dDsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0KHZvaWQpOworCisKK3N0YXRpYyB1MTYKK211bF9pbnYoIHUxNiB4ICkKK3sKKyAgICB1MTYgdDAsIHQxOworICAgIHUxNiBxLCB5OworCisgICAgaWYoIHggPCAyICkKKwlyZXR1cm4geDsKKyAgICB0MSA9IDB4MTAwMDFVTCAvIHg7CisgICAgeSA9ICAweDEwMDAxVUwgJSB4OworICAgIGlmKCB5ID09IDEgKQorCXJldHVybiAoMS10MSkgJiAweGZmZmY7CisKKyAgICB0MCA9IDE7CisgICAgZG8geworCXEgPSB4IC8geTsKKwl4ID0geCAlIHk7CisJdDAgKz0gcSAqIHQxOworCWlmKCB4ID09IDEgKQorCSAgICByZXR1cm4gdDA7CisJcSA9IHkgLyB4OworCXkgPSB5ICUgeDsKKwl0MSArPSBxICogdDA7CisgICAgfSB3aGlsZSggeSAhPSAxICk7CisgICAgcmV0dXJuICgxLXQxKSAmIDB4ZmZmZjsKK30KKworCisKK3N0YXRpYyB2b2lkCitleHBhbmRfa2V5KCBjb25zdCBieXRlICp1c2Vya2V5LCB1MTYgKmVrICkKK3sKKyAgICBpbnQgaSxqOworCisgICAgZm9yKGo9MDsgaiA8IDg7IGorKyApIHsKKwlla1tqXSA9ICgqdXNlcmtleSA8PCA4KSArIHVzZXJrZXlbMV07CisJdXNlcmtleSArPSAyOworICAgIH0KKyAgICBmb3IoaT0wOyBqIDwgSURFQV9LRVlMRU47IGorKyApIHsKKwlpKys7CisJZWtbaSs3XSA9IGVrW2kmN10gPDwgOSB8IGVrWyhpKzEpJjddID4+IDc7CisJZWsgKz0gaSAmIDg7CisJaSAmPSA3OworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAoraW52ZXJ0X2tleSggdTE2ICplaywgdTE2IGRrW0lERUFfS0VZTEVOXSApCit7CisgICAgaW50IGk7CisgICAgdTE2IHQxLCB0MiwgdDM7CisgICAgdTE2IHRlbXBbSURFQV9LRVlMRU5dOworICAgIHUxNiAqcCA9IHRlbXAgKyBJREVBX0tFWUxFTjsKKworICAgIHQxID0gbXVsX2ludiggKmVrKysgKTsKKyAgICB0MiA9IC0qZWsrKzsKKyAgICB0MyA9IC0qZWsrKzsKKyAgICAqLS1wID0gbXVsX2ludiggKmVrKysgKTsKKyAgICAqLS1wID0gdDM7CisgICAgKi0tcCA9IHQyOworICAgICotLXAgPSB0MTsKKworICAgIGZvcihpPTA7IGkgPCBJREVBX1JPVU5EUy0xOyBpKysgKSB7CisJdDEgPSAqZWsrKzsKKwkqLS1wID0gKmVrKys7CisJKi0tcCA9IHQxOworCisJdDEgPSBtdWxfaW52KCAqZWsrKyApOworCXQyID0gLSplaysrOworCXQzID0gLSplaysrOworCSotLXAgPSBtdWxfaW52KCAqZWsrKyApOworCSotLXAgPSB0MjsKKwkqLS1wID0gdDM7CisJKi0tcCA9IHQxOworICAgIH0KKyAgICB0MSA9ICplaysrOworICAgICotLXAgPSAqZWsrKzsKKyAgICAqLS1wID0gdDE7CisKKyAgICB0MSA9IG11bF9pbnYoICplaysrICk7CisgICAgdDIgPSAtKmVrKys7CisgICAgdDMgPSAtKmVrKys7CisgICAgKi0tcCA9IG11bF9pbnYoICplaysrICk7CisgICAgKi0tcCA9IHQzOworICAgICotLXAgPSB0MjsKKyAgICAqLS1wID0gdDE7CisgICAgbWVtY3B5KGRrLCB0ZW1wLCBzaXplb2YodGVtcCkgKTsKKyAgICBtZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApICk7ICAvKiBidXJuIHRlbXAgKi8KK30KKworCitzdGF0aWMgdm9pZAorY2lwaGVyKCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmLCB1MTYgKmtleSApCit7CisgICAgdTE2IHMyLCBzMzsKKyAgICB1MTYgaW5bNF07CisgICAgaW50IHIgPSBJREVBX1JPVU5EUzsKKyNkZWZpbmUgeDEgKGluWzBdKQorI2RlZmluZSB4MiAoaW5bMV0pCisjZGVmaW5lIHgzIChpblsyXSkKKyNkZWZpbmUgeDQgKGluWzNdKQorI2RlZmluZSBNVUwoeCx5KSBcCisJZG8ge3UxNiBfdDE2OyB1MzIgX3QzMjsgCQkgICAgXAorCSAgICBpZiggKF90MTYgPSAoeSkpICkgewkJICAgIFwKKwkJaWYoICh4ID0gKHgpJjB4ZmZmZikgKSB7CSAgICBcCisJCSAgICBfdDMyID0gKHUzMil4ICogX3QxNjsJICAgIFwKKwkJICAgIHggPSBfdDMyICYgMHhmZmZmOwkJICAgIFwKKwkJICAgIF90MTYgPSBfdDMyID4+IDE2OwkJICAgIFwKKwkJICAgIHggPSAoKHgpLV90MTYpICsgKHg8X3QxNj8xOjApOyAgXAorCQl9CQkJCSAgICBcCisJCWVsc2UgewkJCQkgICAgXAorCQkgICAgeCA9IDEgLSBfdDE2OwkJICAgIFwKKwkJfQkJCQkgICAgXAorCSAgICB9CQkJCQkgICAgXAorCSAgICBlbHNlIHsJCQkJICAgIFwKKwkJeCA9IDEgLSB4OwkJCSAgICBcCisJICAgIH0JCQkJCSAgICBcCisJfSB3aGlsZSgwKQorCisgICAgbWVtY3B5IChpbiwgaW5idWYsIHNpemVvZiBpbik7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorICAgIHgxID0gKHgxPj44KSB8ICh4MTw8OCk7CisgICAgeDIgPSAoeDI+PjgpIHwgKHgyPDw4KTsKKyAgICB4MyA9ICh4Mz4+OCkgfCAoeDM8PDgpOworICAgIHg0ID0gKHg0Pj44KSB8ICh4NDw8OCk7CisjZW5kaWYKKyAgICBkbyB7CisJTVVMKHgxLCAqa2V5KyspOworCXgyICs9ICprZXkrKzsKKwl4MyArPSAqa2V5Kys7CisJTVVMKHg0LCAqa2V5KysgKTsKKworCXMzID0geDM7CisJeDMgXj0geDE7CisJTVVMKHgzLCAqa2V5KyspOworCXMyID0geDI7CisJeDIgXj14NDsKKwl4MiArPSB4MzsKKwlNVUwoeDIsICprZXkrKyk7CisJeDMgKz0geDI7CisKKwl4MSBePSB4MjsKKwl4NCBePSB4MzsKKworCXgyIF49IHMzOworCXgzIF49IHMyOworICAgIH0gd2hpbGUoIC0tciApOworICAgIE1VTCh4MSwgKmtleSsrKTsKKyAgICB4MyArPSAqa2V5Kys7CisgICAgeDIgKz0gKmtleSsrOworICAgIE1VTCh4NCwgKmtleSk7CisKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisgICAgeDEgPSAoeDE+PjgpIHwgKHgxPDw4KTsKKyAgICB4MiA9ICh4Mj4+OCkgfCAoeDI8PDgpOworICAgIHgzID0gKHgzPj44KSB8ICh4Mzw8OCk7CisgICAgeDQgPSAoeDQ+PjgpIHwgKHg0PDw4KTsKKyNlbmRpZgorICAgIG1lbWNweSAob3V0YnVmKzAsICZ4MSwgMik7CisgICAgbWVtY3B5IChvdXRidWYrMiwgJngzLCAyKTsKKyAgICBtZW1jcHkgKG91dGJ1Zis0LCAmeDIsIDIpOworICAgIG1lbWNweSAob3V0YnVmKzYsICZ4NCwgMik7CisjdW5kZWYgTVVMCisjdW5kZWYgeDEKKyN1bmRlZiB4MgorI3VuZGVmIHgzCisjdW5kZWYgeDQKK30KKworCitzdGF0aWMgaW50Citkb19zZXRrZXkoIElERUFfY29udGV4dCAqYywgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuICkKK3sKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3RfZmFpbGVkID0gMDsKKworICAgIGlmKCAhaW5pdGlhbGl6ZWQgKSB7CisJaW5pdGlhbGl6ZWQgPSAxOworCXNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0KCk7CisJaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisJICAgIGxvZ19lcnJvciggIiVzXG4iLCBzZWxmdGVzdF9mYWlsZWQgKTsKKyAgICB9CisgICAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisJcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworCisgICAgYXNzZXJ0KGtleWxlbiA9PSAxNik7CisgICAgYy0+aGF2ZV9kayA9IDA7CisgICAgZXhwYW5kX2tleSgga2V5LCBjLT5layApOworICAgIGludmVydF9rZXkoIGMtPmVrLCBjLT5kayApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitpZGVhX3NldGtleSAodm9pZCAqY29udGV4dCwgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworICAgIElERUFfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgICBpbnQgcmMgPSBkb19zZXRrZXkgKGN0eCwga2V5LCBrZXlsZW4pOworICAgIF9nY3J5X2J1cm5fc3RhY2sgKDIzKzYqc2l6ZW9mKHZvaWQqKSk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorZW5jcnlwdF9ibG9jayggSURFQV9jb250ZXh0ICpjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmICkKK3sKKyAgICBjaXBoZXIoIG91dGJ1ZiwgaW5idWYsIGMtPmVrICk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lkZWFfZW5jcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgICBJREVBX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgICAgZW5jcnlwdF9ibG9jayAoY3R4LCBvdXQsIGluKTsKKyAgICByZXR1cm4gLypidXJuX3N0YWNrKi8gKDI0KzMqc2l6ZW9mICh2b2lkKikpOworfQorCitzdGF0aWMgdm9pZAorZGVjcnlwdF9ibG9jayggSURFQV9jb250ZXh0ICpjLCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmICkKK3sKKyAgICBpZiggIWMtPmhhdmVfZGsgKSB7CisgICAgICAgYy0+aGF2ZV9kayA9IDE7CisgICAgICAgaW52ZXJ0X2tleSggYy0+ZWssIGMtPmRrICk7CisgICAgfQorICAgIGNpcGhlciggb3V0YnVmLCBpbmJ1ZiwgYy0+ZGsgKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraWRlYV9kZWNyeXB0ICh2b2lkICpjb250ZXh0LCBieXRlICpvdXQsIGNvbnN0IGJ5dGUgKmluKQoreworICAgIElERUFfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgICBkZWNyeXB0X2Jsb2NrIChjdHgsIG91dCwgaW4pOworICAgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMjQrMypzaXplb2YgKHZvaWQqKSk7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKgorc2VsZnRlc3QoIHZvaWQgKQoreworc3RhdGljIHN0cnVjdCB7CisgICAgYnl0ZSBrZXlbMTZdOworICAgIGJ5dGUgcGxhaW5bOF07CisgICAgYnl0ZSBjaXBoZXJbOF07Cit9IHRlc3RfdmVjdG9yc1tdID0geworICAgIHsgeyAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDA0LAorCTB4MDAsIDB4MDUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDggfSwKKyAgICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMyB9LAorICAgICAgeyAweDExLCAweEZCLCAweEVELCAweDJCLCAweDAxLCAweDk4LCAweDZELCAweEU1IH0gfSwKKyAgICB7IHsgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwNCwKKwkweDAwLCAweDA1LCAweDAwLCAweDA2LCAweDAwLCAweDA3LCAweDAwLCAweDA4IH0sCisgICAgICB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDggfSwKKyAgICAgIHsgMHg1NCwgMHgwRSwgMHg1RiwgMHhFQSwgMHgxOCwgMHhDMiwgMHhGOCwgMHhCMSB9IH0sCisgICAgeyB7IDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDQsCisJMHgwMCwgMHgwNSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwOCB9LAorICAgICAgeyAweDAwLCAweDE5LCAweDMyLCAweDRCLCAweDY0LCAweDdELCAweDk2LCAweEFGIH0sCisgICAgICB7IDB4OUYsIDB4MEEsIDB4MEEsIDB4QjYsIDB4RTEsIDB4MEMsIDB4RUQsIDB4NzggfSB9LAorICAgIHsgeyAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDA0LAorCTB4MDAsIDB4MDUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDggfSwKKyAgICAgIHsgMHhGNSwgMHgyMCwgMHgyRCwgMHg1QiwgMHg5QywgMHg2NywgMHgxQiwgMHgwOCB9LAorICAgICAgeyAweENGLCAweDE4LCAweEZELCAweDczLCAweDU1LCAweEUyLCAweEM1LCAweEM1IH0gfSwKKyAgICB7IHsgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwNCwKKwkweDAwLCAweDA1LCAweDAwLCAweDA2LCAweDAwLCAweDA3LCAweDAwLCAweDA4IH0sCisgICAgICB7IDB4RkEsIDB4RTYsIDB4RDIsIDB4QkUsIDB4QUEsIDB4OTYsIDB4ODIsIDB4NkUgfSwKKyAgICAgIHsgMHg4NSwgMHhERiwgMHg1MiwgMHgwMCwgMHg1NiwgMHgwOCwgMHgxOSwgMHgzRCB9IH0sCisgICAgeyB7IDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDQsCisJMHgwMCwgMHgwNSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwOCB9LAorICAgICAgeyAweDBBLCAweDE0LCAweDFFLCAweDI4LCAweDMyLCAweDNDLCAweDQ2LCAweDUwIH0sCisgICAgICB7IDB4MkYsIDB4N0QsIDB4RTcsIDB4NTAsIDB4MjEsIDB4MkYsIDB4QjcsIDB4MzQgfSB9LAorICAgIHsgeyAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDA0LAorCTB4MDAsIDB4MDUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDggfSwKKyAgICAgIHsgMHgwNSwgMHgwQSwgMHgwRiwgMHgxNCwgMHgxOSwgMHgxRSwgMHgyMywgMHgyOCB9LAorICAgICAgeyAweDdCLCAweDczLCAweDE0LCAweDkyLCAweDVELCAweEU1LCAweDlDLCAweDA5IH0gfSwKKyAgICB7IHsgMHgwMCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgxNCwKKwkweDAwLCAweDE5LCAweDAwLCAweDFFLCAweDAwLCAweDIzLCAweDAwLCAweDI4IH0sCisgICAgICB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDggfSwKKyAgICAgIHsgMHgzRSwgMHhDMCwgMHg0NywgMHg4MCwgMHhCRSwgMHhGRiwgMHg2RSwgMHgyMCB9IH0sCisgICAgeyB7IDB4M0EsIDB4OTgsIDB4NEUsIDB4MjAsIDB4MDAsIDB4MTksIDB4NUQsIDB4QjMsCisJMHgyRSwgMHhFNSwgMHgwMSwgMHhDOCwgMHhDNCwgMHg3QywgMHhFQSwgMHg2MCB9LAorICAgICAgeyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4IH0sCisgICAgICB7IDB4OTcsIDB4QkMsIDB4RDgsIDB4MjAsIDB4MDcsIDB4ODAsIDB4REEsIDB4ODYgfSB9LAorICAgIHsgeyAweDAwLCAweDY0LCAweDAwLCAweEM4LCAweDAxLCAweDJDLCAweDAxLCAweDkwLAorCTB4MDEsIDB4RjQsIDB4MDIsIDB4NTgsIDB4MDIsIDB4QkMsIDB4MDMsIDB4MjAgfSwKKyAgICAgIHsgMHgwNSwgMHgzMiwgMHgwQSwgMHg2NCwgMHgxNCwgMHhDOCwgMHgxOSwgMHhGQSB9LAorICAgICAgeyAweDY1LCAweEJFLCAweDg3LCAweEU3LCAweEEyLCAweDUzLCAweDhBLCAweEVEIH0gfSwKKyAgICB7IHsgMHg5RCwgMHg0MCwgMHg3NSwgMHhDMSwgMHgwMywgMHhCQywgMHgzMiwgMHgyQSwKKwkweEZCLCAweDAzLCAweEU3LCAweEJFLCAweDZBLCAweEIzLCAweDAwLCAweDA2IH0sCisgICAgICB7IDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDggfSwKKyAgICAgIHsgMHhGNSwgMHhEQiwgMHgxQSwgMHhDNCwgMHg1RSwgMHg1RSwgMHhGOSwgMHhGOSB9IH0KK307CisgICAgSURFQV9jb250ZXh0IGM7CisgICAgYnl0ZSBidWZmZXJbOF07CisgICAgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpIDwgRElNKHRlc3RfdmVjdG9ycyk7IGkrKyApIHsKKwlkb19zZXRrZXkoICZjLCB0ZXN0X3ZlY3RvcnNbaV0ua2V5LCAxNiApOworCWVuY3J5cHRfYmxvY2soICZjLCBidWZmZXIsIHRlc3RfdmVjdG9yc1tpXS5wbGFpbiApOworCWlmKCBtZW1jbXAoIGJ1ZmZlciwgdGVzdF92ZWN0b3JzW2ldLmNpcGhlciwgOCApICkKKwkgICAgcmV0dXJuICJJREVBIHRlc3QgZW5jcnlwdGlvbiBmYWlsZWQuIjsKKwlkZWNyeXB0X2Jsb2NrKCAmYywgYnVmZmVyLCB0ZXN0X3ZlY3RvcnNbaV0uY2lwaGVyICk7CisJaWYoIG1lbWNtcCggYnVmZmVyLCB0ZXN0X3ZlY3RvcnNbaV0ucGxhaW4sIDggKSApCisJICAgIHJldHVybiAiSURFQSB0ZXN0IGRlY3J5cHRpb24gZmFpbGVkLiI7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2lkZWEgPQorICB7CisgICAgR0NSWV9DSVBIRVJfSURFQSwgezAsIDB9LAorICAgICJJREVBIiwgTlVMTCwgTlVMTCwgSURFQV9CTE9DS1NJWkUsIDEyOCwKKyAgICBzaXplb2YgKElERUFfY29udGV4dCksCisgICAgaWRlYV9zZXRrZXksIGlkZWFfZW5jcnlwdCwgaWRlYV9kZWNyeXB0CisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIva2RmLWludGVybmFsLmggYi9jaXBoZXIva2RmLWludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3OTg2MAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9rZGYtaW50ZXJuYWwuaApAQCAtMCwwICsxLDQwIEBACisvKiBrZGYtaW50ZXJuYWwuaCAgLSBJbnRlcm5hbCBkZWZzIGZvciBrZGYuYworICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHQ1JZX0tERl9JTlRFUk5BTF9ICisjZGVmaW5lIEdDUllfS0RGX0lOVEVSTkFMX0gKKworLyotLSBrZGYuYyAtLSovCitncGdfZXJyX2NvZGVfdAorX2djcnlfa2RmX3BrZGYyIChjb25zdCB2b2lkICpwYXNzcGhyYXNlLCBzaXplX3QgcGFzc3BocmFzZWxlbiwKKyAgICAgICAgICAgICAgICAgaW50IGhhc2hhbGdvLAorICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzYWx0LCBzaXplX3Qgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICBzaXplX3Qga2V5c2l6ZSwgdm9pZCAqa2V5YnVmZmVyKTsKKworLyotLSBzY3J5cHQuYyAtLSovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2tkZl9zY3J5cHQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgc2l6ZV90IHBhc3N3ZGxlbiwKKyAgICAgICAgICAgICAgICAgIGludCBhbGdvLCBpbnQgc3ViYWxnbywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgc2l6ZV90IGRrbGVuLCB1bnNpZ25lZCBjaGFyICpkayk7CisKKworI2VuZGlmIC8qR0NSWV9LREZfSU5URVJOQUxfSCovCmRpZmYgLS1naXQgYS9jaXBoZXIva2RmLmMgYi9jaXBoZXIva2RmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwZGM0OAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9rZGYuYwpAQCAtMCwwICsxLDMwMCBAQAorLyoga2RmLmMgIC0gS2V5IERlcml2YXRpb24gRnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYXRoLmgiCisjaW5jbHVkZSAia2RmLWludGVybmFsLmgiCisKKworLyogVHJhbnNmb3JtIGEgcGFzc3BocmFzZSBpbnRvIGEgc3VpdGFibGUga2V5IG9mIGxlbmd0aCBLRVlTSVpFIGFuZAorICAgc3RvcmUgdGhpcyBrZXkgaW4gdGhlIGNhbGxlciBwcm92aWRlZCBidWZmZXIgS0VZQlVGRkVSLiAgVGhlIGNhbGxlcgorICAgbXVzdCBwcm92aWRlIGFuIEhBU0hBTEdPLCBhIHZhbGlkIEFMR08gYW5kIGRlcGVuZGluZyBvbiB0aGF0IGFsZ28gYQorICAgU0FMVCBvZiA4IGJ5dGVzIGFuZCB0aGUgbnVtYmVyIG9mIElURVJBVElPTlMuICBDb2RlIHRha2VuIGZyb20KKyAgIGdudXBnL2FnZW50L3Byb3RlY3QuYzpoYXNoX3Bhc3NwaHJhc2UuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitvcGVucGdwX3MyayAoY29uc3Qgdm9pZCAqcGFzc3BocmFzZSwgc2l6ZV90IHBhc3NwaHJhc2VsZW4sCisgICAgICAgICAgICAgaW50IGFsZ28sIGludCBoYXNoYWxnbywKKyAgICAgICAgICAgICBjb25zdCB2b2lkICpzYWx0LCBzaXplX3Qgc2FsdGxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgc2l6ZV90IGtleXNpemUsIHZvaWQgKmtleWJ1ZmZlcikKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZWM7CisgIGdjcnlfbWRfaGRfdCBtZDsKKyAgY2hhciAqa2V5ID0ga2V5YnVmZmVyOworICBpbnQgcGFzcywgaTsKKyAgaW50IHVzZWQgPSAwOworICBpbnQgc2VjbW9kZTsKKworICBpZiAoKGFsZ28gPT0gR0NSWV9LREZfU0FMVEVEX1MySyB8fCBhbGdvID09IEdDUllfS0RGX0lURVJTQUxURURfUzJLKQorICAgICAgJiYgKCFzYWx0IHx8IHNhbHRsZW4gIT0gOCkpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworCisgIHNlY21vZGUgPSBfZ2NyeV9pc19zZWN1cmUgKHBhc3NwaHJhc2UpIHx8IF9nY3J5X2lzX3NlY3VyZSAoa2V5YnVmZmVyKTsKKworICBlYyA9IF9nY3J5X21kX29wZW4gKCZtZCwgaGFzaGFsZ28sIHNlY21vZGU/IEdDUllfTURfRkxBR19TRUNVUkUgOiAwKTsKKyAgaWYgKGVjKQorICAgIHJldHVybiBlYzsKKworICBmb3IgKHBhc3M9MDsgdXNlZCA8IGtleXNpemU7IHBhc3MrKykKKyAgICB7CisgICAgICBpZiAocGFzcykKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X21kX3Jlc2V0IChtZCk7CisgICAgICAgICAgZm9yIChpPTA7IGkgPCBwYXNzOyBpKyspIC8qIFByZXNldCB0aGUgaGFzaCBjb250ZXh0LiAgKi8KKyAgICAgICAgICAgIF9nY3J5X21kX3B1dGMgKG1kLCAwKTsKKwl9CisKKyAgICAgIGlmIChhbGdvID09IEdDUllfS0RGX1NBTFRFRF9TMksgfHwgYWxnbyA9PSBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySykKKyAgICAgICAgeworICAgICAgICAgIGludCBsZW4yID0gcGFzc3BocmFzZWxlbiArIDg7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCA9IGxlbjI7CisKKyAgICAgICAgICBpZiAoYWxnbyA9PSBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY291bnQgPSBpdGVyYXRpb25zOworICAgICAgICAgICAgICBpZiAoY291bnQgPCBsZW4yKQorICAgICAgICAgICAgICAgIGNvdW50ID0gbGVuMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHdoaWxlIChjb3VudCA+IGxlbjIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgc2FsdCwgc2FsdGxlbik7CisgICAgICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgcGFzc3BocmFzZSwgcGFzc3BocmFzZWxlbik7CisgICAgICAgICAgICAgIGNvdW50IC09IGxlbjI7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGNvdW50IDwgc2FsdGxlbikKKyAgICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgc2FsdCwgY291bnQpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX2djcnlfbWRfd3JpdGUgKG1kLCBzYWx0LCBzYWx0bGVuKTsKKyAgICAgICAgICAgICAgY291bnQgLT0gc2FsdGxlbjsKKyAgICAgICAgICAgICAgX2djcnlfbWRfd3JpdGUgKG1kLCBwYXNzcGhyYXNlLCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgX2djcnlfbWRfd3JpdGUgKG1kLCBwYXNzcGhyYXNlLCBwYXNzcGhyYXNlbGVuKTsKKworICAgICAgX2djcnlfbWRfZmluYWwgKG1kKTsKKyAgICAgIGkgPSBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChoYXNoYWxnbyk7CisgICAgICBpZiAoaSA+IGtleXNpemUgLSB1c2VkKQorICAgICAgICBpID0ga2V5c2l6ZSAtIHVzZWQ7CisgICAgICBtZW1jcHkgKGtleSt1c2VkLCBfZ2NyeV9tZF9yZWFkIChtZCwgaGFzaGFsZ28pLCBpKTsKKyAgICAgIHVzZWQgKz0gaTsKKyAgICB9CisgIF9nY3J5X21kX2Nsb3NlIChtZCk7CisgIHJldHVybiAwOworfQorCisKKy8qIFRyYW5zZm9ybSBhIHBhc3NwaHJhc2UgaW50byBhIHN1aXRhYmxlIGtleSBvZiBsZW5ndGggS0VZU0laRSBhbmQKKyAgIHN0b3JlIHRoaXMga2V5IGluIHRoZSBjYWxsZXIgcHJvdmlkZWQgYnVmZmVyIEtFWUJVRkZFUi4gIFRoZSBjYWxsZXIKKyAgIG11c3QgcHJvdmlkZSBQUkZBTEdPIHdoaWNoIGluZGljYXRlcyB0aGUgcHNldWRvcmFuZG9tIGZ1bmN0aW9uIHRvCisgICB1c2U6IFRoaXMgc2hhbGwgYmUgdGhlIGFsZ29yaXRobXMgaWQgb2YgYSBoYXNoIGFsZ29yaXRobTsgaXQgaXMKKyAgIHVzZWQgaW4gSE1BQyBtb2RlLiAgU0FMVCBpcyBhIHNhbHQgb2YgbGVuZ3RoIFNBTFRMRU4gYW5kIElURVJBVElPTlMKKyAgIGdpdmVzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfa2RmX3BrZGYyIChjb25zdCB2b2lkICpwYXNzcGhyYXNlLCBzaXplX3QgcGFzc3BocmFzZWxlbiwKKyAgICAgICAgICAgICAgICAgaW50IGhhc2hhbGdvLAorICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzYWx0LCBzaXplX3Qgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICBzaXplX3Qga2V5c2l6ZSwgdm9pZCAqa2V5YnVmZmVyKQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKyAgZ2NyeV9tZF9oZF90IG1kOworICBpbnQgc2VjbW9kZTsKKyAgdW5zaWduZWQgaW50IGRrbGVuID0ga2V5c2l6ZTsKKyAgY2hhciAqZGsgPSBrZXlidWZmZXI7CisgIHVuc2lnbmVkIGludCBobGVuOyAgIC8qIE91dHB1dCBsZW5ndGggb2YgdGhlIGRpZ2VzdCBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBsOyAgICAgIC8qIFJvdW5kZWQgdXAgbnVtYmVyIG9mIGJsb2Nrcy4gICovCisgIHVuc2lnbmVkIGludCByOyAgICAgIC8qIE51bWJlciBvZiBvY3RldHMgaW4gdGhlIGxhc3QgYmxvY2suICAqLworICBjaGFyICpzYnVmOyAgICAgICAgICAvKiBNYWxsb2NlZCBidWZmZXIgdG8gY29uY2F0ZW5hdGUgc2FsdCBhbmQgaXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIHNwYWNlIHRvIGhvbGQgVEJVRiBhbmQgVUJVRi4gICovCisgIGNoYXIgKnRidWY7ICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgVDsgcHRyIGludG8gU0JVRiwgc2l6ZSBpcyBITEVOLiAqLworICBjaGFyICp1YnVmOyAgICAgICAgICAvKiBCdWZmZXIgZm9yIFU7IHB0ciBpbnRvIFNCVUYsIHNpemUgaXMgSExFTi4gKi8KKyAgdW5zaWduZWQgaW50IGxpZHg7ICAgLyogQ3VycmVudCBibG9jayBudW1iZXIuICAqLworICB1bnNpZ25lZCBsb25nIGl0ZXI7ICAvKiBDdXJyZW50IGl0ZXJhdGlvbiBudW1iZXIuICAqLworICB1bnNpZ25lZCBpbnQgaTsKKworICAvKiBOV2UgYWxsb3cgZm9yIGEgc2FsdGxlbiBvZiAwIGhlcmUgdG8gc3VwcG9ydCBzY3J5cHQuICBJdCBpcyBub3QKKyAgICAgY2xlYXIgd2hldGhlciByZmMyODk4IGFsbG93cyBmb3IgdGhpcyB0aGlzLCB0aHVzIHdlIGRvIGEgdGVzdCBvbgorICAgICBzYWx0bGVuID4gMCBvbmx5IGluIGdjcnlfa2RmX2Rlcml2ZS4gICovCisgIGlmICghc2FsdCB8fCAhaXRlcmF0aW9ucyB8fCAhZGtsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworCisgIGhsZW4gPSBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChoYXNoYWxnbyk7CisgIGlmICghaGxlbikKKyAgICByZXR1cm4gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKworICBzZWNtb2RlID0gX2djcnlfaXNfc2VjdXJlIChwYXNzcGhyYXNlKSB8fCBfZ2NyeV9pc19zZWN1cmUgKGtleWJ1ZmZlcik7CisKKyAgLyogV2UgaWdub3JlIHN0ZXAgMSBmcm9tIHBrc2M1djIuMSB3aGljaCBkZW1hbmRzIGEgY2hlY2sgdGhhdCBka2xlbgorICAgICBpcyBub3QgbGFyZ2VyIHRoYXQgMHhmZmZmZmZmZiAqIGhsZW4uICAqLworCisgIC8qIFN0ZXAgMiAqLworICBsID0gKChka2xlbiAtIDEpLyBobGVuKSArIDE7CisgIHIgPSBka2xlbiAtIChsIC0gMSkgKiBobGVuOworCisgIC8qIFNldHVwIGJ1ZmZlcnMgYW5kIHByZXBhcmUgYSBoYXNoIGNvbnRleHQuICAqLworICBzYnVmID0gKHNlY21vZGUKKyAgICAgICAgICA/IHh0cnltYWxsb2Nfc2VjdXJlIChzYWx0bGVuICsgNCArIGhsZW4gKyBobGVuKQorICAgICAgICAgIDogeHRyeW1hbGxvYyAoc2FsdGxlbiArIDQgKyBobGVuICsgaGxlbikpOworICBpZiAoIXNidWYpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICB0YnVmID0gc2J1ZiArIHNhbHRsZW4gKyA0OworICB1YnVmID0gdGJ1ZiArIGhsZW47CisKKyAgZWMgPSBfZ2NyeV9tZF9vcGVuICgmbWQsIGhhc2hhbGdvLCAoR0NSWV9NRF9GTEFHX0hNQUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2VjbW9kZT9HQ1JZX01EX0ZMQUdfU0VDVVJFOjApKSk7CisgIGlmIChlYykKKyAgICB7CisgICAgICB4ZnJlZSAoc2J1Zik7CisgICAgICByZXR1cm4gZWM7CisgICAgfQorCisgIGVjID0gX2djcnlfbWRfc2V0a2V5IChtZCwgcGFzc3BocmFzZSwgcGFzc3BocmFzZWxlbik7CisgIGlmIChlYykKKyAgICB7CisgICAgICBfZ2NyeV9tZF9jbG9zZSAobWQpOworICAgICAgeGZyZWUgKHNidWYpOworICAgICAgcmV0dXJuIGVjOworICAgIH0KKworICAvKiBTdGVwIDMgYW5kIDQuICovCisgIG1lbWNweSAoc2J1Ziwgc2FsdCwgc2FsdGxlbik7CisgIGZvciAobGlkeCA9IDE7IGxpZHggPD0gbDsgbGlkeCsrKQorICAgIHsKKyAgICAgIGZvciAoaXRlciA9IDA7IGl0ZXIgPCBpdGVyYXRpb25zOyBpdGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9tZF9yZXNldCAobWQpOworICAgICAgICAgIGlmICghaXRlcikgLyogQ29tcHV0ZSBVXzE6ICAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICBzYnVmW3NhbHRsZW5dICAgICA9IChsaWR4ID4+IDI0KTsKKyAgICAgICAgICAgICAgc2J1ZltzYWx0bGVuICsgMV0gPSAobGlkeCA+PiAxNik7CisgICAgICAgICAgICAgIHNidWZbc2FsdGxlbiArIDJdID0gKGxpZHggPj4gOCk7CisgICAgICAgICAgICAgIHNidWZbc2FsdGxlbiArIDNdID0gbGlkeDsKKyAgICAgICAgICAgICAgX2djcnlfbWRfd3JpdGUgKG1kLCBzYnVmLCBzYWx0bGVuICsgNCk7CisgICAgICAgICAgICAgIG1lbWNweSAodWJ1ZiwgX2djcnlfbWRfcmVhZCAobWQsIDApLCBobGVuKTsKKyAgICAgICAgICAgICAgbWVtY3B5ICh0YnVmLCB1YnVmLCBobGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIC8qIENvbXB1dGUgVV8oMi4uYyk6ICAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICBfZ2NyeV9tZF93cml0ZSAobWQsIHVidWYsIGhsZW4pOworICAgICAgICAgICAgICBtZW1jcHkgKHVidWYsIF9nY3J5X21kX3JlYWQgKG1kLCAwKSwgaGxlbik7CisgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgaGxlbjsgaSsrKQorICAgICAgICAgICAgICAgIHRidWZbaV0gXj0gdWJ1ZltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKGxpZHggPT0gbCkgIC8qIExhc3QgYmxvY2suICAqLworICAgICAgICBtZW1jcHkgKGRrLCB0YnVmLCByKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweSAoZGssIHRidWYsIGhsZW4pOworICAgICAgICAgIGRrICs9IGhsZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgX2djcnlfbWRfY2xvc2UgKG1kKTsKKyAgeGZyZWUgKHNidWYpOworICByZXR1cm4gMDsKK30KKworCisvKiBEZXJpdmUgYSBrZXkgZnJvbSBhIHBhc3NwaHJhc2UuICBLRVlTSVpFIGdpdmVzIHRoZSByZXF1ZXN0ZWQgc2l6ZQorICAgb2YgdGhlIGtleXMgaW4gb2N0ZXRzLiAgS0VZQlVGRkVSIGlzIGEgY2FsbGVyIHByb3ZpZGVkIGJ1ZmZlcgorICAgZmlsbGVkIG9uIHN1Y2Nlc3Mgd2l0aCB0aGUgZGVyaXZlZCBrZXkuICBUaGUgaW5wdXQgcGFzc3BocmFzZSBpcworICAgdGFrZW4gZnJvbSAoUEFTU1BIUkFTRSxQQVNTUEhSQVNFTEVOKSB3aGljaCBpcyBhbiBhcmJpdHJhcnkgbWVtb3J5CisgICBidWZmZXIuICBBTEdPIHNwZWNpZmllcyB0aGUgS0RGIGFsZ29yaXRobSB0byB1c2U7IHRoZXNlIGFyZSB0aGUKKyAgIGNvbnN0YW50cyBHQ1JZX0tERl8qLiAgU1VCQUxHTyBzcGVjaWZpZXMgYW4gYWxnb3JpdGhtIHVzZWQKKyAgIGludGVybmFsbHkgYnkgdGhlIEtERiBhbGdvcml0aG1zOyB0aGlzIGlzIHVzdWFsbHkgYSBoYXNoIGFsZ29yaXRobQorICAgYnV0IGNlcnRhaW4gS0RGIGFsZ29yaXRobSBtYXkgdXNlIGl0IGRpZmZlcmVudGx5LiAge1NBTFQsU0FMVExFTn0KKyAgIGlzIGEgc2FsdCBhcyBuZWVkZWQgYnkgbW9zdCBLREYgYWxnb3JpdGhtcy4gIElURVJBVElPTlMgaXMgYQorICAgcG9zaXRpdmUgaW50ZWdlciBwYXJhbWV0ZXIgdG8gbW9zdCBLREZzLiAgMCBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLAorICAgb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9rZGZfZGVyaXZlIChjb25zdCB2b2lkICpwYXNzcGhyYXNlLCBzaXplX3QgcGFzc3BocmFzZWxlbiwKKyAgICAgICAgICAgICAgICAgIGludCBhbGdvLCBpbnQgc3ViYWxnbywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleXNpemUsIHZvaWQgKmtleWJ1ZmZlcikKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZWM7CisKKyAgaWYgKCFwYXNzcGhyYXNlKQorICAgIHsKKyAgICAgIGVjID0gR1BHX0VSUl9JTlZfREFUQTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGlmICgha2V5YnVmZmVyIHx8ICFrZXlzaXplKQorICAgIHsKKyAgICAgIGVjID0gR1BHX0VSUl9JTlZfVkFMVUU7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSBHQ1JZX0tERl9TSU1QTEVfUzJLOgorICAgIGNhc2UgR0NSWV9LREZfU0FMVEVEX1MySzoKKyAgICBjYXNlIEdDUllfS0RGX0lURVJTQUxURURfUzJLOgorICAgICAgaWYgKCFwYXNzcGhyYXNlbGVuKQorICAgICAgICBlYyA9IEdQR19FUlJfSU5WX0RBVEE7CisgICAgICBlbHNlCisgICAgICAgIGVjID0gb3BlbnBncF9zMmsgKHBhc3NwaHJhc2UsIHBhc3NwaHJhc2VsZW4sIGFsZ28sIHN1YmFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHQsIHNhbHRsZW4sIGl0ZXJhdGlvbnMsIGtleXNpemUsIGtleWJ1ZmZlcik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWV9LREZfUEJLREYxOgorICAgICAgZWMgPSBHUEdfRVJSX1VOU1VQUE9SVEVEX0FMR09SSVRITTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZX0tERl9QQktERjI6CisgICAgICBpZiAoIXNhbHRsZW4pCisgICAgICAgIGVjID0gR1BHX0VSUl9JTlZfVkFMVUU7CisgICAgICBlbHNlCisgICAgICAgIGVjID0gX2djcnlfa2RmX3BrZGYyIChwYXNzcGhyYXNlLCBwYXNzcGhyYXNlbGVuLCBzdWJhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdCwgc2FsdGxlbiwgaXRlcmF0aW9ucywga2V5c2l6ZSwga2V5YnVmZmVyKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0MToKKyAgICBjYXNlIEdDUllfS0RGX1NDUllQVDoKKyNpZiBVU0VfU0NSWVBUCisgICAgICBlYyA9IF9nY3J5X2tkZl9zY3J5cHQgKHBhc3NwaHJhc2UsIHBhc3NwaHJhc2VsZW4sIGFsZ28sIHN1YmFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHQsIHNhbHRsZW4sIGl0ZXJhdGlvbnMsIGtleXNpemUsIGtleWJ1ZmZlcik7CisjZWxzZQorICAgICAgZWMgPSBHUEdfRVJSX1VOU1VQUE9SVEVEX0FMR09SSVRITTsKKyNlbmRpZiAvKlVTRV9TQ1JZUFQqLworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZWMgPSBHUEdfRVJSX1VOS05PV05fQUxHT1JJVEhNOworICAgICAgYnJlYWs7CisgICAgfQorCisgbGVhdmU6CisgIHJldHVybiBlYzsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9tYWMtY21hYy5jIGIvY2lwaGVyL21hYy1jbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMmYxNwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9tYWMtY21hYy5jCkBAIC0wLDAgKzEsMjI2IEBACisvKiBtYWMtY21hYy5jICAtICBDTUFDIGdsdWUgZm9yIE1BQyBBUEkKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgIi4vbWFjLWludGVybmFsLmgiCisKKworc3RhdGljIGludAorbWFwX21hY19hbGdvX3RvX2NpcGhlciAoaW50IG1hY19hbGdvKQoreworICBzd2l0Y2ggKG1hY19hbGdvKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX05PTkU7CisgICAgY2FzZSBHQ1JZX01BQ19DTUFDX0FFUzoKKyAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9BRVM7CisgICAgY2FzZSBHQ1JZX01BQ19DTUFDXzNERVM6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfM0RFUzsKKyAgICBjYXNlIEdDUllfTUFDX0NNQUNfQ0FNRUxMSUE6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjg7CisgICAgY2FzZSBHQ1JZX01BQ19DTUFDX0lERUE6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfSURFQTsKKyAgICBjYXNlIEdDUllfTUFDX0NNQUNfQ0FTVDU6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfQ0FTVDU7CisgICAgY2FzZSBHQ1JZX01BQ19DTUFDX0JMT1dGSVNIOgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX0JMT1dGSVNIOworICAgIGNhc2UgR0NSWV9NQUNfQ01BQ19UV09GSVNIOgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX1RXT0ZJU0g7CisgICAgY2FzZSBHQ1JZX01BQ19DTUFDX1NFUlBFTlQ6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfU0VSUEVOVDEyODsKKyAgICBjYXNlIEdDUllfTUFDX0NNQUNfU0VFRDoKKyAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9TRUVEOworICAgIGNhc2UgR0NSWV9NQUNfQ01BQ19SRkMyMjY4OgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX1JGQzIyNjhfMTI4OworICAgIGNhc2UgR0NSWV9NQUNfQ01BQ19HT1NUMjgxNDc6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfR09TVDI4MTQ3OworICAgIH0KK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitjbWFjX29wZW4gKGdjcnlfbWFjX2hkX3QgaCkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVycjsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZDsKKyAgaW50IHNlY3VyZSA9IChoLT5tYWdpYyA9PSBDVFhfTUFHSUNfU0VDVVJFKTsKKyAgaW50IGNpcGhlcl9hbGdvOworICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyAgY2lwaGVyX2FsZ28gPSBtYXBfbWFjX2FsZ29fdG9fY2lwaGVyIChoLT5zcGVjLT5hbGdvKTsKKyAgZmxhZ3MgPSAoc2VjdXJlID8gR0NSWV9DSVBIRVJfU0VDVVJFIDogMCk7CisKKyAgZXJyID0gX2djcnlfY2lwaGVyX29wZW5faW50ZXJuYWwgKCZoZCwgY2lwaGVyX2FsZ28sIEdDUllfQ0lQSEVSX01PREVfQ01BQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworCisgIGgtPnUuY21hYy5jaXBoZXJfYWxnbyA9IGNpcGhlcl9hbGdvOworICBoLT51LmNtYWMuY3R4ID0gaGQ7CisgIGgtPnUuY21hYy5ibGtsZW4gPSBfZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIChjaXBoZXJfYWxnbyk7CisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkCitjbWFjX2Nsb3NlIChnY3J5X21hY19oZF90IGgpCit7CisgIF9nY3J5X2NpcGhlcl9jbG9zZSAoaC0+dS5jbWFjLmN0eCk7CisgIGgtPnUuY21hYy5jdHggPSBOVUxMOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NtYWNfc2V0a2V5IChnY3J5X21hY19oZF90IGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbikKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9zZXRrZXkgKGgtPnUuY21hYy5jdHgsIGtleSwga2V5bGVuKTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitjbWFjX3Jlc2V0IChnY3J5X21hY19oZF90IGgpCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfcmVzZXQgKGgtPnUuY21hYy5jdHgpOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NtYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgaCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICByZXR1cm4gX2djcnlfY2lwaGVyX2NtYWNfYXV0aGVudGljYXRlIChoLT51LmNtYWMuY3R4LCBidWYsIGJ1Zmxlbik7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorY21hY19yZWFkIChnY3J5X21hY19oZF90IGgsIHVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90ICogb3V0bGVuKQoreworICBpZiAoKm91dGxlbiA+IGgtPnUuY21hYy5ibGtsZW4pCisgICAgKm91dGxlbiA9IGgtPnUuY21hYy5ibGtsZW47CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfY21hY19nZXRfdGFnIChoLT51LmNtYWMuY3R4LCBvdXRidWYsICpvdXRsZW4pOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NtYWNfdmVyaWZ5IChnY3J5X21hY19oZF90IGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9jbWFjX2NoZWNrX3RhZyAoaC0+dS5jbWFjLmN0eCwgYnVmLCBidWZsZW4pOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2NtYWNfZ2V0X21hY2xlbiAoaW50IGFsZ28pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIChtYXBfbWFjX2FsZ29fdG9fY2lwaGVyIChhbGdvKSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorY21hY19nZXRfa2V5bGVuIChpbnQgYWxnbykKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4gKG1hcF9tYWNfYWxnb190b19jaXBoZXIgKGFsZ28pKTsKK30KKworCitzdGF0aWMgZ2NyeV9tYWNfc3BlY19vcHNfdCBjbWFjX29wcyA9IHsKKyAgY21hY19vcGVuLAorICBjbWFjX2Nsb3NlLAorICBjbWFjX3NldGtleSwKKyAgTlVMTCwKKyAgY21hY19yZXNldCwKKyAgY21hY193cml0ZSwKKyAgY21hY19yZWFkLAorICBjbWFjX3ZlcmlmeSwKKyAgY21hY19nZXRfbWFjbGVuLAorICBjbWFjX2dldF9rZXlsZW4KK307CisKKworI2lmIFVTRV9CTE9XRklTSAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19ibG93ZmlzaCA9IHsKKyAgR0NSWV9NQUNfQ01BQ19CTE9XRklTSCwgezAsIDB9LCAiQ01BQ19CTE9XRklTSCIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9ERVMKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfdHJpcGxlZGVzID0geworICBHQ1JZX01BQ19DTUFDXzNERVMsIHswLCAxfSwgIkNNQUNfM0RFUyIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9DQVNUNQorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19jYXN0NSA9IHsKKyAgR0NSWV9NQUNfQ01BQ19DQVNUNSwgezAsIDB9LCAiQ01BQ19DQVNUNSIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9BRVMKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfYWVzID0geworICBHQ1JZX01BQ19DTUFDX0FFUywgezAsIDF9LCAiQ01BQ19BRVMiLAorICAmY21hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfVFdPRklTSAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY190d29maXNoID0geworICBHQ1JZX01BQ19DTUFDX1RXT0ZJU0gsIHswLCAwfSwgIkNNQUNfVFdPRklTSCIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9TRVJQRU5UCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX3NlcnBlbnQgPSB7CisgIEdDUllfTUFDX0NNQUNfU0VSUEVOVCwgezAsIDB9LCAiQ01BQ19TRVJQRU5UIiwKKyAgJmNtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX1JGQzIyNjgKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfcmZjMjI2OCA9IHsKKyAgR0NSWV9NQUNfQ01BQ19SRkMyMjY4LCB7MCwgMH0sICJDTUFDX1JGQzIyNjgiLAorICAmY21hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfU0VFRAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19zZWVkID0geworICBHQ1JZX01BQ19DTUFDX1NFRUQsIHswLCAwfSwgIkNNQUNfU0VFRCIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9DQU1FTExJQQorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19jYW1lbGxpYSA9IHsKKyAgR0NSWV9NQUNfQ01BQ19DQU1FTExJQSwgezAsIDB9LCAiQ01BQ19DQU1FTExJQSIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgorI2lmZGVmIFVTRV9JREVBCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX2lkZWEgPSB7CisgIEdDUllfTUFDX0NNQUNfSURFQSwgezAsIDB9LCAiQ01BQ19JREVBIiwKKyAgJmNtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX0dPU1QyODE0NworZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19nb3N0MjgxNDcgPSB7CisgIEdDUllfTUFDX0NNQUNfR09TVDI4MTQ3LCB7MCwgMH0sICJDTUFDX0dPU1QyODE0NyIsCisgICZjbWFjX29wcworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2lwaGVyL21hYy1nbWFjLmMgYi9jaXBoZXIvbWFjLWdtYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ1NmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL21hYy1nbWFjLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qIG1hYy1nbWFjLmMgIC0gIEdNQUMgZ2x1ZSBmb3IgTUFDIEFQSQorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiLi9tYWMtaW50ZXJuYWwuaCIKKworCitzdGF0aWMgaW50CittYXBfbWFjX2FsZ29fdG9fY2lwaGVyIChpbnQgbWFjX2FsZ28pCit7CisgIHN3aXRjaCAobWFjX2FsZ28pCisgICAgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfTk9ORTsKKyAgICBjYXNlIEdDUllfTUFDX0dNQUNfQUVTOgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX0FFUzsKKyAgICBjYXNlIEdDUllfTUFDX0dNQUNfQ0FNRUxMSUE6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjg7CisgICAgY2FzZSBHQ1JZX01BQ19HTUFDX1RXT0ZJU0g6CisgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfVFdPRklTSDsKKyAgICBjYXNlIEdDUllfTUFDX0dNQUNfU0VSUEVOVDoKKyAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9TRVJQRU5UMTI4OworICAgIGNhc2UgR0NSWV9NQUNfR01BQ19TRUVEOgorICAgICAgcmV0dXJuIEdDUllfQ0lQSEVSX1NFRUQ7CisgICAgfQorfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2dtYWNfb3BlbiAoZ2NyeV9tYWNfaGRfdCBoKQoreworICBnY3J5X2Vycl9jb2RlX3QgZXJyOworICBnY3J5X2NpcGhlcl9oZF90IGhkOworICBpbnQgc2VjdXJlID0gKGgtPm1hZ2ljID09IENUWF9NQUdJQ19TRUNVUkUpOworICBpbnQgY2lwaGVyX2FsZ287CisgIHVuc2lnbmVkIGludCBmbGFnczsKKworICBjaXBoZXJfYWxnbyA9IG1hcF9tYWNfYWxnb190b19jaXBoZXIgKGgtPnNwZWMtPmFsZ28pOworICBmbGFncyA9IChzZWN1cmUgPyBHQ1JZX0NJUEhFUl9TRUNVUkUgOiAwKTsKKworICBlcnIgPSBfZ2NyeV9jaXBoZXJfb3Blbl9pbnRlcm5hbCAoJmhkLCBjaXBoZXJfYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9HQ00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICBoLT51LmdtYWMuY2lwaGVyX2FsZ28gPSBjaXBoZXJfYWxnbzsKKyAgaC0+dS5nbWFjLmN0eCA9IGhkOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorZ21hY19jbG9zZSAoZ2NyeV9tYWNfaGRfdCBoKQoreworICBfZ2NyeV9jaXBoZXJfY2xvc2UgKGgtPnUuZ21hYy5jdHgpOworICBoLT51LmdtYWMuY3R4ID0gTlVMTDsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitnbWFjX3NldGtleSAoZ2NyeV9tYWNfaGRfdCBoLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfc2V0a2V5IChoLT51LmdtYWMuY3R4LCBrZXksIGtleWxlbik7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZ21hY19zZXRpdiAoZ2NyeV9tYWNfaGRfdCBoLCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2bGVuKQoreworICByZXR1cm4gX2djcnlfY2lwaGVyX3NldGl2IChoLT51LmdtYWMuY3R4LCBpdiwgaXZsZW4pOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2dtYWNfcmVzZXQgKGdjcnlfbWFjX2hkX3QgaCkKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9yZXNldCAoaC0+dS5nbWFjLmN0eCk7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZ21hY193cml0ZSAoZ2NyeV9tYWNfaGRfdCBoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlIChoLT51LmdtYWMuY3R4LCBidWYsIGJ1Zmxlbik7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZ21hY19yZWFkIChnY3J5X21hY19oZF90IGgsIHVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90ICogb3V0bGVuKQoreworICBpZiAoKm91dGxlbiA+IEdDUllfR0NNX0JMT0NLX0xFTikKKyAgICAqb3V0bGVuID0gR0NSWV9HQ01fQkxPQ0tfTEVOOworICByZXR1cm4gX2djcnlfY2lwaGVyX2dldHRhZyAoaC0+dS5nbWFjLmN0eCwgb3V0YnVmLCAqb3V0bGVuKTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitnbWFjX3ZlcmlmeSAoZ2NyeV9tYWNfaGRfdCBoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfY2hlY2t0YWcgKGgtPnUuZ21hYy5jdHgsIGJ1ZiwgYnVmbGVuKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50CitnbWFjX2dldF9tYWNsZW4gKGludCBhbGdvKQoreworICAodm9pZClhbGdvOworICByZXR1cm4gR0NSWV9HQ01fQkxPQ0tfTEVOOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dtYWNfZ2V0X2tleWxlbiAoaW50IGFsZ28pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIChtYXBfbWFjX2FsZ29fdG9fY2lwaGVyIChhbGdvKSk7Cit9CisKKworc3RhdGljIGdjcnlfbWFjX3NwZWNfb3BzX3QgZ21hY19vcHMgPSB7CisgIGdtYWNfb3BlbiwKKyAgZ21hY19jbG9zZSwKKyAgZ21hY19zZXRrZXksCisgIGdtYWNfc2V0aXYsCisgIGdtYWNfcmVzZXQsCisgIGdtYWNfd3JpdGUsCisgIGdtYWNfcmVhZCwKKyAgZ21hY192ZXJpZnksCisgIGdtYWNfZ2V0X21hY2xlbiwKKyAgZ21hY19nZXRfa2V5bGVuCit9OworCisKKyNpZiBVU0VfQUVTCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX2FlcyA9IHsKKyAgR0NSWV9NQUNfR01BQ19BRVMsIHswLCAxfSwgIkdNQUNfQUVTIiwKKyAgJmdtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX1RXT0ZJU0gKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfdHdvZmlzaCA9IHsKKyAgR0NSWV9NQUNfR01BQ19UV09GSVNILCB7MCwgMH0sICJHTUFDX1RXT0ZJU0giLAorICAmZ21hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfU0VSUEVOVAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfZ21hY19zZXJwZW50ID0geworICBHQ1JZX01BQ19HTUFDX1NFUlBFTlQsIHswLCAwfSwgIkdNQUNfU0VSUEVOVCIsCisgICZnbWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9TRUVECitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX3NlZWQgPSB7CisgIEdDUllfTUFDX0dNQUNfU0VFRCwgezAsIDB9LCAiR01BQ19TRUVEIiwKKyAgJmdtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX0NBTUVMTElBCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX2NhbWVsbGlhID0geworICBHQ1JZX01BQ19HTUFDX0NBTUVMTElBLCB7MCwgMH0sICJHTUFDX0NBTUVMTElBIiwKKyAgJmdtYWNfb3BzCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jaXBoZXIvbWFjLWhtYWMuYyBiL2NpcGhlci9tYWMtaG1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzYxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvbWFjLWhtYWMuYwpAQCAtMCwwICsxLDI3MiBAQAorLyogbWFjLWhtYWMuYyAgLSAgSE1BQyBnbHVlIGZvciBNQUMgQVBJCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICIuL21hYy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKworCitzdGF0aWMgaW50CittYXBfbWFjX2FsZ29fdG9fbWQgKGludCBtYWNfYWxnbykKK3sKKyAgc3dpdGNoIChtYWNfYWxnbykKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBHQ1JZX01EX05PTkU7CisgICAgY2FzZSBHQ1JZX01BQ19ITUFDX01ENDoKKyAgICAgIHJldHVybiBHQ1JZX01EX01ENDsKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfTUQ1OgorICAgICAgcmV0dXJuIEdDUllfTURfTUQ1OworICAgIGNhc2UgR0NSWV9NQUNfSE1BQ19TSEExOgorICAgICAgcmV0dXJuIEdDUllfTURfU0hBMTsKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfU0hBMjI0OgorICAgICAgcmV0dXJuIEdDUllfTURfU0hBMjI0OworICAgIGNhc2UgR0NSWV9NQUNfSE1BQ19TSEEyNTY6CisgICAgICByZXR1cm4gR0NSWV9NRF9TSEEyNTY7CisgICAgY2FzZSBHQ1JZX01BQ19ITUFDX1NIQTM4NDoKKyAgICAgIHJldHVybiBHQ1JZX01EX1NIQTM4NDsKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfU0hBNTEyOgorICAgICAgcmV0dXJuIEdDUllfTURfU0hBNTEyOworICAgIGNhc2UgR0NSWV9NQUNfSE1BQ19STUQxNjA6CisgICAgICByZXR1cm4gR0NSWV9NRF9STUQxNjA7CisgICAgY2FzZSBHQ1JZX01BQ19ITUFDX1RJR0VSMToKKyAgICAgIHJldHVybiBHQ1JZX01EX1RJR0VSMTsKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfV0hJUkxQT09MOgorICAgICAgcmV0dXJuIEdDUllfTURfV0hJUkxQT09MOworICAgIGNhc2UgR0NSWV9NQUNfSE1BQ19HT1NUUjM0MTFfOTQ6CisgICAgICByZXR1cm4gR0NSWV9NRF9HT1NUUjM0MTFfOTQ7CisgICAgY2FzZSBHQ1JZX01BQ19ITUFDX1NUUklCT0cyNTY6CisgICAgICByZXR1cm4gR0NSWV9NRF9TVFJJQk9HMjU2OworICAgIGNhc2UgR0NSWV9NQUNfSE1BQ19TVFJJQk9HNTEyOgorICAgICAgcmV0dXJuIEdDUllfTURfU1RSSUJPRzUxMjsKKyAgICB9Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAoraG1hY19vcGVuIChnY3J5X21hY19oZF90IGgpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlcnI7CisgIGdjcnlfbWRfaGRfdCBoZDsKKyAgaW50IHNlY3VyZSA9IChoLT5tYWdpYyA9PSBDVFhfTUFHSUNfU0VDVVJFKTsKKyAgdW5zaWduZWQgaW50IGZsYWdzOworICBpbnQgbWRfYWxnbzsKKworICBtZF9hbGdvID0gbWFwX21hY19hbGdvX3RvX21kIChoLT5zcGVjLT5hbGdvKTsKKworICBmbGFncyA9IEdDUllfTURfRkxBR19ITUFDOworICBmbGFncyB8PSAoc2VjdXJlID8gR0NSWV9NRF9GTEFHX1NFQ1VSRSA6IDApOworCisgIGVyciA9IF9nY3J5X21kX29wZW4gKCZoZCwgbWRfYWxnbywgZmxhZ3MpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgaC0+dS5obWFjLm1kX2FsZ28gPSBtZF9hbGdvOworICBoLT51LmhtYWMubWRfY3R4ID0gaGQ7CisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkCitobWFjX2Nsb3NlIChnY3J5X21hY19oZF90IGgpCit7CisgIF9nY3J5X21kX2Nsb3NlIChoLT51LmhtYWMubWRfY3R4KTsKKyAgaC0+dS5obWFjLm1kX2N0eCA9IE5VTEw7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAoraG1hY19zZXRrZXkgKGdjcnlfbWFjX2hkX3QgaCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworICByZXR1cm4gX2djcnlfbWRfc2V0a2V5IChoLT51LmhtYWMubWRfY3R4LCBrZXksIGtleWxlbik7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAoraG1hY19yZXNldCAoZ2NyeV9tYWNfaGRfdCBoKQoreworICBfZ2NyeV9tZF9yZXNldCAoaC0+dS5obWFjLm1kX2N0eCk7CisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2htYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgaCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBfZ2NyeV9tZF93cml0ZSAoaC0+dS5obWFjLm1kX2N0eCwgYnVmLCBidWZsZW4pOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitobWFjX3JlYWQgKGdjcnlfbWFjX2hkX3QgaCwgdW5zaWduZWQgY2hhciAqb3V0YnVmLCBzaXplX3QgKiBvdXRsZW4pCit7CisgIHVuc2lnbmVkIGludCBkbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisKKyAgZGxlbiA9IF9nY3J5X21kX2dldF9hbGdvX2RsZW4gKGgtPnUuaG1hYy5tZF9hbGdvKTsKKyAgZGlnZXN0ID0gX2djcnlfbWRfcmVhZCAoaC0+dS5obWFjLm1kX2N0eCwgaC0+dS5obWFjLm1kX2FsZ28pOworCisgIGlmICgqb3V0bGVuIDw9IGRsZW4pCisgICAgYnVmX2NweSAob3V0YnVmLCBkaWdlc3QsICpvdXRsZW4pOworICBlbHNlCisgICAgeworICAgICAgYnVmX2NweSAob3V0YnVmLCBkaWdlc3QsIGRsZW4pOworICAgICAgKm91dGxlbiA9IGRsZW47CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2htYWNfdmVyaWZ5IChnY3J5X21hY19oZF90IGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgdW5zaWduZWQgaW50IGRsZW47CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKworICBkbGVuID0gX2djcnlfbWRfZ2V0X2FsZ29fZGxlbiAoaC0+dS5obWFjLm1kX2FsZ28pOworICBkaWdlc3QgPSBfZ2NyeV9tZF9yZWFkIChoLT51LmhtYWMubWRfY3R4LCBoLT51LmhtYWMubWRfYWxnbyk7CisKKyAgaWYgKGJ1ZmxlbiA+IGRsZW4pCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0xFTkdUSDsKKworICByZXR1cm4gYnVmX2VxX2NvbnN0IChidWYsIGRpZ2VzdCwgYnVmbGVuKSA/IDAgOiBHUEdfRVJSX0NIRUNLU1VNOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2htYWNfZ2V0X21hY2xlbiAoaW50IGFsZ28pCit7CisgIHJldHVybiBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChtYXBfbWFjX2FsZ29fdG9fbWQgKGFsZ28pKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50CitobWFjX2dldF9rZXlsZW4gKGludCBhbGdvKQoreworICAvKiBSZXR1cm4gYmxvY2tzaXplIGZvciBkZWZhdWx0IGtleSBsZW5ndGguICovCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSBHQ1JZX01BQ19ITUFDX1NIQTM4NDoKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfU0hBNTEyOgorICAgICAgcmV0dXJuIDEyODsKKyAgICBjYXNlIEdDUllfTUFDX0hNQUNfR09TVFIzNDExXzk0OgorICAgICAgcmV0dXJuIDMyOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gNjQ7CisgICAgfQorfQorCisKK3N0YXRpYyBjb25zdCBnY3J5X21hY19zcGVjX29wc190IGhtYWNfb3BzID0geworICBobWFjX29wZW4sCisgIGhtYWNfY2xvc2UsCisgIGhtYWNfc2V0a2V5LAorICBOVUxMLAorICBobWFjX3Jlc2V0LAorICBobWFjX3dyaXRlLAorICBobWFjX3JlYWQsCisgIGhtYWNfdmVyaWZ5LAorICBobWFjX2dldF9tYWNsZW4sCisgIGhtYWNfZ2V0X2tleWxlbgorfTsKKworCisjaWYgVVNFX1NIQTEKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfc2hhMSA9IHsKKyAgR0NSWV9NQUNfSE1BQ19TSEExLCB7MCwgMX0sICJITUFDX1NIQTEiLAorICAmaG1hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfU0hBMjU2CitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3NoYTI1NiA9IHsKKyAgR0NSWV9NQUNfSE1BQ19TSEEyNTYsIHswLCAxfSwgIkhNQUNfU0hBMjU2IiwKKyAgJmhtYWNfb3BzCit9OworCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3NoYTIyNCA9IHsKKyAgR0NSWV9NQUNfSE1BQ19TSEEyMjQsIHswLCAxfSwgIkhNQUNfU0hBMjI0IiwKKyAgJmhtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX1NIQTUxMgorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGE1MTIgPSB7CisgIEdDUllfTUFDX0hNQUNfU0hBNTEyLCB7MCwgMX0sICJITUFDX1NIQTUxMiIsCisgICZobWFjX29wcworfTsKKworZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEzODQgPSB7CisgIEdDUllfTUFDX0hNQUNfU0hBMzg0LCB7MCwgMX0sICJITUFDX1NIQTM4NCIsCisgICZobWFjX29wcworfTsKKyNlbmRpZgorI2lmZGVmIFVTRV9HT1NUX1JfMzQxMV85NAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19nb3N0MzQxMV85NCA9IHsKKyAgR0NSWV9NQUNfSE1BQ19HT1NUUjM0MTFfOTQsIHswLCAwfSwgIkhNQUNfR09TVFIzNDExXzk0IiwKKyAgJmhtYWNfb3BzCit9OworI2VuZGlmCisjaWZkZWYgVVNFX0dPU1RfUl8zNDExXzEyCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3N0cmlib2cyNTYgPSB7CisgIEdDUllfTUFDX0hNQUNfU1RSSUJPRzI1NiwgezAsIDB9LCAiSE1BQ19TVFJJQk9HMjU2IiwKKyAgJmhtYWNfb3BzCit9OworCitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3N0cmlib2c1MTIgPSB7CisgIEdDUllfTUFDX0hNQUNfU1RSSUJPRzUxMiwgezAsIDB9LCAiSE1BQ19TVFJJQk9HNTEyIiwKKyAgJmhtYWNfb3BzCit9OworI2VuZGlmCisjaWYgVVNFX1dISVJMUE9PTAorZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY193aGlybHBvb2wgPSB7CisgIEdDUllfTUFDX0hNQUNfV0hJUkxQT09MLCB7MCwgMH0sICJITUFDX1dISVJMUE9PTCIsCisgICZobWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9STUQxNjAKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfcm1kMTYwID0geworICBHQ1JZX01BQ19ITUFDX1JNRDE2MCwgezAsIDB9LCAiSE1BQ19SSVBFTUQxNjAiLAorICAmaG1hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfVElHRVIKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfdGlnZXIxID0geworICBHQ1JZX01BQ19ITUFDX1RJR0VSMSwgezAsIDB9LCAiSE1BQ19USUdFUiIsCisgICZobWFjX29wcworfTsKKyNlbmRpZgorI2lmIFVTRV9NRDUKK2djcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfbWQ1ID0geworICBHQ1JZX01BQ19ITUFDX01ENSwgezAsIDB9LCAiSE1BQ19NRDUiLAorICAmaG1hY19vcHMKK307CisjZW5kaWYKKyNpZiBVU0VfTUQ0CitnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX21kNCA9IHsKKyAgR0NSWV9NQUNfSE1BQ19NRDQsIHswLCAwfSwgIkhNQUNfTUQ0IiwKKyAgJmhtYWNfb3BzCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jaXBoZXIvbWFjLWludGVybmFsLmggYi9jaXBoZXIvbWFjLWludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjMzA0YgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9tYWMtaW50ZXJuYWwuaApAQCAtMCwwICsxLDIwNCBAQAorLyogbWFjLWludGVybmFsLmggIC0gIEludGVybmFsIGRlZnMgZm9yIG1hYy5jCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIFRoZSBkYXRhIG9iamVjdCB1c2VkIHRvIGhvbGQgYSBoYW5kbGUgdG8gYW4gZW5jcnlwdGlvbiBvYmplY3QuICAqLworc3RydWN0IGdjcnlfbWFjX2hhbmRsZTsKKworDAorLyoKKyAqCisgKiBNZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAqCisgKi8KKworCisvKiBNYWdpYyB2YWx1ZXMgZm9yIHRoZSBjb250ZXh0IHN0cnVjdHVyZS4gICovCisjZGVmaW5lIENUWF9NQUdJQ19OT1JNQUwgMHg1OWQ5YjhhZgorI2RlZmluZSBDVFhfTUFHSUNfU0VDVVJFIDB4MTJjMjdjZDAKKworCisvKiBNQUMgbW9kdWxlIGZ1bmN0aW9ucy4gKi8KK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9tYWNfb3Blbl9mdW5jX3QpKGdjcnlfbWFjX2hkX3QgaCk7Cit0eXBlZGVmIHZvaWQgKCpnY3J5X21hY19jbG9zZV9mdW5jX3QpKGdjcnlfbWFjX2hkX3QgaCk7Cit0eXBlZGVmIGdjcnlfZXJyX2NvZGVfdCAoKmdjcnlfbWFjX3NldGtleV9mdW5jX3QpKGdjcnlfbWFjX2hkX3QgaCwKKwkJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorCQkJCQkJICBzaXplX3Qga2V5bGVuKTsKK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9tYWNfc2V0aXZfZnVuY190KShnY3J5X21hY19oZF90IGgsCisJCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisJCQkJCQkgc2l6ZV90IGl2bGVuKTsKK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9tYWNfcmVzZXRfZnVuY190KShnY3J5X21hY19oZF90IGgpOwordHlwZWRlZiBnY3J5X2Vycl9jb2RlX3QgKCpnY3J5X21hY193cml0ZV9mdW5jX3QpKGdjcnlfbWFjX2hkX3QgaCwKKwkJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwKKwkJCQkJCSBzaXplX3QgaW5sZW4pOwordHlwZWRlZiBnY3J5X2Vycl9jb2RlX3QgKCpnY3J5X21hY19yZWFkX2Z1bmNfdCkoZ2NyeV9tYWNfaGRfdCBoLAorCQkJCQkJdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJCQkJc2l6ZV90ICpvdXRsZW4pOwordHlwZWRlZiBnY3J5X2Vycl9jb2RlX3QgKCpnY3J5X21hY192ZXJpZnlfZnVuY190KShnY3J5X21hY19oZF90IGgsCisJCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLAorCQkJCQkJICBzaXplX3QgaW5sZW4pOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpnY3J5X21hY19nZXRfbWFjbGVuX2Z1bmNfdCkoaW50IGFsZ28pOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpnY3J5X21hY19nZXRfa2V5bGVuX2Z1bmNfdCkoaW50IGFsZ28pOworCisKK3R5cGVkZWYgc3RydWN0IGdjcnlfbWFjX3NwZWNfb3BzCit7CisgIGdjcnlfbWFjX29wZW5fZnVuY190IG9wZW47CisgIGdjcnlfbWFjX2Nsb3NlX2Z1bmNfdCBjbG9zZTsKKyAgZ2NyeV9tYWNfc2V0a2V5X2Z1bmNfdCBzZXRrZXk7CisgIGdjcnlfbWFjX3NldGl2X2Z1bmNfdCBzZXRpdjsKKyAgZ2NyeV9tYWNfcmVzZXRfZnVuY190IHJlc2V0OworICBnY3J5X21hY193cml0ZV9mdW5jX3Qgd3JpdGU7CisgIGdjcnlfbWFjX3JlYWRfZnVuY190IHJlYWQ7CisgIGdjcnlfbWFjX3ZlcmlmeV9mdW5jX3QgdmVyaWZ5OworICBnY3J5X21hY19nZXRfbWFjbGVuX2Z1bmNfdCBnZXRfbWFjbGVuOworICBnY3J5X21hY19nZXRfa2V5bGVuX2Z1bmNfdCBnZXRfa2V5bGVuOworfSBnY3J5X21hY19zcGVjX29wc190OworCisKKy8qIE1vZHVsZSBzcGVjaWZpY2F0aW9uIHN0cnVjdHVyZSBmb3IgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2Rlcy4gICovCit0eXBlZGVmIHN0cnVjdCBnY3J5X21hY19zcGVjCit7CisgIGludCBhbGdvOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBkaXNhYmxlZDoxOworICAgIHVuc2lnbmVkIGludCBmaXBzOjE7CisgIH0gZmxhZ3M7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IGdjcnlfbWFjX3NwZWNfb3BzX3QgKm9wczsKK30gZ2NyeV9tYWNfc3BlY190OworCisKKworLyogVGhlIGhhbmRsZSBzdHJ1Y3R1cmUuICAqLworc3RydWN0IGdjcnlfbWFjX2hhbmRsZQoreworICBpbnQgbWFnaWM7CisgIGludCBhbGdvOworICBjb25zdCBnY3J5X21hY19zcGVjX3QgKnNwZWM7CisgIGdjcnlfY3R4X3QgZ2NyeV9jdHg7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgZ2NyeV9tZF9oZF90IG1kX2N0eDsKKyAgICAgIGludCBtZF9hbGdvOworICAgIH0gaG1hYzsKKyAgICBzdHJ1Y3QgeworICAgICAgZ2NyeV9jaXBoZXJfaGRfdCBjdHg7CisgICAgICBpbnQgY2lwaGVyX2FsZ287CisgICAgICB1bnNpZ25lZCBpbnQgYmxrbGVuOworICAgIH0gY21hYzsKKyAgICBzdHJ1Y3QgeworICAgICAgZ2NyeV9jaXBoZXJfaGRfdCBjdHg7CisgICAgICBpbnQgY2lwaGVyX2FsZ287CisgICAgfSBnbWFjOworICB9IHU7Cit9OworCisKKy8qCisgKiBUaGUgSE1BQyBhbGdvcml0aG0gc3BlY2lmaWNhdGlvbnMgKG1hYy1obWFjLmMpLgorICovCisjaWYgVVNFX1NIQTEKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3NoYTE7CisjZW5kaWYKKyNpZiBVU0VfU0hBMjU2CitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEyNTY7CitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEyMjQ7CisjZW5kaWYKKyNpZiBVU0VfU0hBNTEyCitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGE1MTI7CitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEzODQ7CisjZW5kaWYKKyNpZmRlZiBVU0VfR09TVF9SXzM0MTFfOTQKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX2dvc3QzNDExXzk0OworI2VuZGlmCisjaWZkZWYgVVNFX0dPU1RfUl8zNDExXzEyCitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zdHJpYm9nMjU2OworZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfc3RyaWJvZzUxMjsKKyNlbmRpZgorI2lmIFVTRV9XSElSTFBPT0wKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3doaXJscG9vbDsKKyNlbmRpZgorI2lmIFVTRV9STUQxNjAKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3JtZDE2MDsKKyNlbmRpZgorI2lmIFVTRV9USUdFUgorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfdGlnZXIxOworI2VuZGlmCisjaWYgVVNFX01ENQorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfbWQ1OworI2VuZGlmCisjaWYgVVNFX01ENAorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfbWQ0OworI2VuZGlmCisKKy8qCisgKiBUaGUgQ01BQyBhbGdvcml0aG0gc3BlY2lmaWNhdGlvbnMgKG1hYy1jbWFjLmMpLgorICovCisjaWYgVVNFX0JMT1dGSVNICitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19ibG93ZmlzaDsKKyNlbmRpZgorI2lmIFVTRV9ERVMKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX3RyaXBsZWRlczsKKyNlbmRpZgorI2lmIFVTRV9DQVNUNQorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfY2FzdDU7CisjZW5kaWYKKyNpZiBVU0VfQUVTCitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19hZXM7CisjZW5kaWYKKyNpZiBVU0VfVFdPRklTSAorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfdHdvZmlzaDsKKyNlbmRpZgorI2lmIFVTRV9TRVJQRU5UCitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfY21hY19zZXJwZW50OworI2VuZGlmCisjaWYgVVNFX1JGQzIyNjgKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX3JmYzIyNjg7CisjZW5kaWYKKyNpZiBVU0VfU0VFRAorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfc2VlZDsKKyNlbmRpZgorI2lmIFVTRV9DQU1FTExJQQorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfY2FtZWxsaWE7CisjZW5kaWYKKyNpZmRlZiBVU0VfSURFQQorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfaWRlYTsKKyNlbmRpZgorI2lmIFVTRV9HT1NUMjgxNDcKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX2dvc3QyODE0NzsKKyNlbmRpZgorCisvKgorICogVGhlIEdNQUMgYWxnb3JpdGhtIHNwZWNpZmljYXRpb25zIChtYWMtZ21hYy5jKS4KKyAqLworI2lmIFVTRV9BRVMKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX2FlczsKKyNlbmRpZgorI2lmIFVTRV9UV09GSVNICitleHRlcm4gZ2NyeV9tYWNfc3BlY190IF9nY3J5X21hY190eXBlX3NwZWNfZ21hY190d29maXNoOworI2VuZGlmCisjaWYgVVNFX1NFUlBFTlQKK2V4dGVybiBnY3J5X21hY19zcGVjX3QgX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX3NlcnBlbnQ7CisjZW5kaWYKKyNpZiBVU0VfU0VFRAorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfc2VlZDsKKyNlbmRpZgorI2lmIFVTRV9DQU1FTExJQQorZXh0ZXJuIGdjcnlfbWFjX3NwZWNfdCBfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfY2FtZWxsaWE7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NpcGhlci9tYWMuYyBiL2NpcGhlci9tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTM2YzdkCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL21hYy5jCkBAIC0wLDAgKzEsNDY1IEBACisvKiBtYWMuYyAgLSAgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGRpc3BhdGNoZXIKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1hYy1pbnRlcm5hbC5oIgorCisKKy8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgdGhlIGRpZ2VzdCBpbXBsZW1lbnRhdGlvbnMgaW5jbHVkZWQgaW4KKyAgIGxpYmdjcnlwdC4gICovCitzdGF0aWMgZ2NyeV9tYWNfc3BlY190ICptYWNfbGlzdFtdID0geworI2lmIFVTRV9TSEExCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfc2hhMSwKKyNlbmRpZgorI2lmIFVTRV9TSEEyNTYKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEyNTYsCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfc2hhMjI0LAorI2VuZGlmCisjaWYgVVNFX1NIQTUxMgorICAmX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3NoYTUxMiwKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfaG1hY19zaGEzODQsCisjZW5kaWYKKyNpZmRlZiBVU0VfR09TVF9SXzM0MTFfOTQKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfaG1hY19nb3N0MzQxMV85NCwKKyNlbmRpZgorI2lmZGVmIFVTRV9HT1NUX1JfMzQxMV8xMgorICAmX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX3N0cmlib2cyNTYsCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfc3RyaWJvZzUxMiwKKyNlbmRpZgorI2lmIFVTRV9XSElSTFBPT0wKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfaG1hY193aGlybHBvb2wsCisjZW5kaWYKKyNpZiBVU0VfUk1EMTYwCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfcm1kMTYwLAorI2VuZGlmCisjaWYgVVNFX1RJR0VSCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2htYWNfdGlnZXIxLAorI2VuZGlmCisjaWYgVVNFX01ENQorICAmX2djcnlfbWFjX3R5cGVfc3BlY19obWFjX21kNSwKKyNlbmRpZgorI2lmIFVTRV9NRDQKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfaG1hY19tZDQsCisjZW5kaWYKKyNpZiBVU0VfQkxPV0ZJU0gKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfY21hY19ibG93ZmlzaCwKKyNlbmRpZgorI2lmIFVTRV9ERVMKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfY21hY190cmlwbGVkZXMsCisjZW5kaWYKKyNpZiBVU0VfQ0FTVDUKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfY21hY19jYXN0NSwKKyNlbmRpZgorI2lmIFVTRV9BRVMKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfY21hY19hZXMsCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfYWVzLAorI2VuZGlmCisjaWYgVVNFX1RXT0ZJU0gKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfY21hY190d29maXNoLAorICAmX2djcnlfbWFjX3R5cGVfc3BlY19nbWFjX3R3b2Zpc2gsCisjZW5kaWYKKyNpZiBVU0VfU0VSUEVOVAorICAmX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX3NlcnBlbnQsCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfc2VycGVudCwKKyNlbmRpZgorI2lmIFVTRV9SRkMyMjY4CisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfcmZjMjI2OCwKKyNlbmRpZgorI2lmIFVTRV9TRUVECisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfc2VlZCwKKyAgJl9nY3J5X21hY190eXBlX3NwZWNfZ21hY19zZWVkLAorI2VuZGlmCisjaWYgVVNFX0NBTUVMTElBCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfY2FtZWxsaWEsCisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2dtYWNfY2FtZWxsaWEsCisjZW5kaWYKKyNpZmRlZiBVU0VfSURFQQorICAmX2djcnlfbWFjX3R5cGVfc3BlY19jbWFjX2lkZWEsCisjZW5kaWYKKyNpZiBVU0VfR09TVDI4MTQ3CisgICZfZ2NyeV9tYWNfdHlwZV9zcGVjX2NtYWNfZ29zdDI4MTQ3LAorI2VuZGlmCisgIE5VTEwsCit9OworCisKKwwKKy8qIFJldHVybiB0aGUgc3BlYyBzdHJ1Y3R1cmUgZm9yIHRoZSBNQUMgYWxnb3JpdGhtIEFMR08uICBGb3IgYW4KKyAgIHVua25vd24gYWxnb3JpdGhtIE5VTEwgaXMgcmV0dXJuZWQuICAqLworc3RhdGljIGdjcnlfbWFjX3NwZWNfdCAqCitzcGVjX2Zyb21fYWxnbyAoaW50IGFsZ28pCit7CisgIGdjcnlfbWFjX3NwZWNfdCAqc3BlYzsKKyAgaW50IGlkeDsKKworICBmb3IgKGlkeCA9IDA7IChzcGVjID0gbWFjX2xpc3RbaWR4XSk7IGlkeCsrKQorICAgIGlmIChhbGdvID09IHNwZWMtPmFsZ28pCisgICAgICByZXR1cm4gc3BlYzsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogTG9va3VwIGEgbWFjJ3Mgc3BlYyBieSBpdHMgbmFtZS4gICovCitzdGF0aWMgZ2NyeV9tYWNfc3BlY190ICoKK3NwZWNfZnJvbV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X21hY19zcGVjX3QgKnNwZWM7CisgIGludCBpZHg7CisKKyAgZm9yIChpZHggPSAwOyAoc3BlYyA9IG1hY19saXN0W2lkeF0pOyBpZHgrKykKKyAgICBpZiAoIXN0cmljbXAgKG5hbWUsIHNwZWMtPm5hbWUpKQorICAgICAgcmV0dXJuIHNwZWM7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIE1hcCBhIHN0cmluZyB0byB0aGUgbWFjIGFsZ28KKyAqLworaW50CitfZ2NyeV9tYWNfbWFwX25hbWUgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ2NyeV9tYWNfc3BlY190ICpzcGVjOworCisgIGlmICghc3RyaW5nKQorICAgIHJldHVybiAwOworCisgIC8qIE5vdCBmb3VuZCwgc2VhcmNoIGEgbWF0Y2hpbmcgbWFjIG5hbWUuICAqLworICBzcGVjID0gc3BlY19mcm9tX25hbWUgKHN0cmluZyk7CisgIGlmIChzcGVjKQorICAgIHJldHVybiBzcGVjLT5hbGdvOworCisgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0gb3Igc29tZSBjb25zdGFudAorICogc3RyaW5nIHdoZW4gdGhlcmUgaXMgbm8gYWxnby4gIEl0IHdpbGwgbmV2ZXIgcmV0dXJuIE5VTEwuCisgKiBVc2UgdGhlIG1hY3JvIGdjcnlfbWFjX3Rlc3RfYWxnbygpIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFsZ29yaXRobQorICogaXMgdmFsaWQuCisgKi8KK2NvbnN0IGNoYXIgKgorX2djcnlfbWFjX2FsZ29fbmFtZSAoaW50IGFsZ29yaXRobSkKK3sKKyAgZ2NyeV9tYWNfc3BlY190ICpzcGVjOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnb3JpdGhtKTsKKyAgcmV0dXJuIHNwZWMgPyBzcGVjLT5uYW1lIDogIj8iOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NoZWNrX21hY19hbGdvIChpbnQgYWxnb3JpdGhtKQoreworICBnY3J5X21hY19zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvcml0aG0pOworICBpZiAoc3BlYyAmJiAhc3BlYy0+ZmxhZ3MuZGlzYWJsZWQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIEdQR19FUlJfTUFDX0FMR087Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIE9wZW4gYSBtZXNzYWdlIGRpZ2VzdCBoYW5kbGUgZm9yIHVzZSB3aXRoIGFsZ29yaXRobSBBTEdPLgorICovCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CittYWNfb3BlbiAoZ2NyeV9tYWNfaGRfdCAqIGhkLCBpbnQgYWxnbywgaW50IHNlY3VyZSwgZ2NyeV9jdHhfdCBjdHgpCit7CisgIGdjcnlfbWFjX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9lcnJfY29kZV90IGVycjsKKyAgZ2NyeV9tYWNfaGRfdCBoOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisgIGlmICghc3BlYykKKyAgICByZXR1cm4gR1BHX0VSUl9NQUNfQUxHTzsKKyAgZWxzZSBpZiAoc3BlYy0+ZmxhZ3MuZGlzYWJsZWQpCisgICAgcmV0dXJuIEdQR19FUlJfTUFDX0FMR087CisgIGVsc2UgaWYgKCFzcGVjLT5vcHMpCisgICAgcmV0dXJuIEdQR19FUlJfTUFDX0FMR087CisgIGVsc2UgaWYgKCFzcGVjLT5vcHMtPm9wZW4gfHwgIXNwZWMtPm9wcy0+d3JpdGUgfHwgIXNwZWMtPm9wcy0+c2V0a2V5IHx8CisgICAgICAgICAgICFzcGVjLT5vcHMtPnJlYWQgfHwgIXNwZWMtPm9wcy0+dmVyaWZ5IHx8ICFzcGVjLT5vcHMtPnJlc2V0KQorICAgIHJldHVybiBHUEdfRVJSX01BQ19BTEdPOworCisgIGlmIChzZWN1cmUpCisgICAgaCA9IHh0cnljYWxsb2Nfc2VjdXJlICgxLCBzaXplb2YgKCpoKSk7CisgIGVsc2UKKyAgICBoID0geHRyeWNhbGxvYyAoMSwgc2l6ZW9mICgqaCkpOworCisgIGlmICghaCkKKyAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisKKyAgaC0+bWFnaWMgPSBzZWN1cmUgPyBDVFhfTUFHSUNfU0VDVVJFIDogQ1RYX01BR0lDX05PUk1BTDsKKyAgaC0+c3BlYyA9IHNwZWM7CisgIGgtPmFsZ28gPSBhbGdvOworICBoLT5nY3J5X2N0eCA9IGN0eDsKKworICBlcnIgPSBoLT5zcGVjLT5vcHMtPm9wZW4gKGgpOworICBpZiAoZXJyKQorICAgIHhmcmVlIChoKTsKKyAgZWxzZQorICAgICpoZCA9IGg7CisKKyAgcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJvcl90CittYWNfcmVzZXQgKGdjcnlfbWFjX2hkX3QgaGQpCit7CisgIGlmIChoZC0+c3BlYy0+b3BzLT5yZXNldCkKKyAgICByZXR1cm4gaGQtPnNwZWMtPm9wcy0+cmVzZXQgKGhkKTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorbWFjX2Nsb3NlIChnY3J5X21hY19oZF90IGhkKQoreworICBpZiAoaGQtPnNwZWMtPm9wcy0+Y2xvc2UpCisgICAgaGQtPnNwZWMtPm9wcy0+Y2xvc2UgKGhkKTsKKworICB3aXBlbWVtb3J5IChoZCwgc2l6ZW9mICgqaGQpKTsKKworICB4ZnJlZSAoaGQpOworfQorCisKK3N0YXRpYyBnY3J5X2Vycm9yX3QKK21hY19zZXRrZXkgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbikKK3sKKyAgaWYgKCFoZC0+c3BlYy0+b3BzLT5zZXRrZXkpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgaWYgKGtleWxlbiA+IDAgJiYgIWtleSkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworCisgIHJldHVybiBoZC0+c3BlYy0+b3BzLT5zZXRrZXkgKGhkLCBrZXksIGtleWxlbik7Cit9CisKKworc3RhdGljIGdjcnlfZXJyb3JfdAorbWFjX3NldGl2IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICppdiwgc2l6ZV90IGl2bGVuKQoreworICBpZiAoIWhkLT5zcGVjLT5vcHMtPnNldGl2KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisgIGlmIChpdmxlbiA+IDAgJiYgIWl2KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgcmV0dXJuIGhkLT5zcGVjLT5vcHMtPnNldGl2IChoZCwgaXYsIGl2bGVuKTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJvcl90CittYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmluYnVmLCBzaXplX3QgaW5sZW4pCit7CisgIGlmICghaGQtPnNwZWMtPm9wcy0+d3JpdGUpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgaWYgKGlubGVuID4gMCAmJiAhaW5idWYpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICByZXR1cm4gaGQtPnNwZWMtPm9wcy0+d3JpdGUgKGhkLCBpbmJ1ZiwgaW5sZW4pOworfQorCisKK3N0YXRpYyBnY3J5X2Vycm9yX3QKK21hY19yZWFkIChnY3J5X21hY19oZF90IGhkLCB2b2lkICpvdXRidWYsIHNpemVfdCAqIG91dGxlbikKK3sKKyAgaWYgKCFvdXRidWYgfHwgIW91dGxlbiB8fCAqb3V0bGVuID09IDAgfHwgIWhkLT5zcGVjLT5vcHMtPnJlYWQpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICByZXR1cm4gaGQtPnNwZWMtPm9wcy0+cmVhZCAoaGQsIG91dGJ1Ziwgb3V0bGVuKTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJvcl90CittYWNfdmVyaWZ5IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGlmICghYnVmIHx8IGJ1ZmxlbiA9PSAwIHx8ICFoZC0+c3BlYy0+b3BzLT52ZXJpZnkpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICByZXR1cm4gaGQtPnNwZWMtPm9wcy0+dmVyaWZ5IChoZCwgYnVmLCBidWZsZW4pOworfQorCisKKy8qIENyZWF0ZSBhIE1BQyBvYmplY3QgZm9yIGFsZ29yaXRobSBBTEdPLiAgRkxBR1MgbWF5IGJlCisgICBnaXZlbiBhcyBhbiBiaXR3aXNlIE9SIG9mIHRoZSBnY3J5X21hY19mbGFncyB2YWx1ZXMuCisgICBIIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSB2YWxpZCBoYW5kbGUgb3IgTlVMTCBvbiBlcnJvci4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfbWFjX29wZW4gKGdjcnlfbWFjX2hkX3QgKiBoLCBpbnQgYWxnbywgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfbWFjX2hkX3QgaGQgPSBOVUxMOworCisgIGlmICgoZmxhZ3MgJiB+R0NSWV9NQUNfRkxBR19TRUNVUkUpKQorICAgIHJjID0gR1BHX0VSUl9JTlZfQVJHOworICBlbHNlCisgICAgcmMgPSBtYWNfb3BlbiAoJmhkLCBhbGdvLCAhIShmbGFncyAmIEdDUllfTUFDX0ZMQUdfU0VDVVJFKSwgY3R4KTsKKworICAqaCA9IHJjID8gTlVMTCA6IGhkOworICByZXR1cm4gcmM7Cit9CisKKwordm9pZAorX2djcnlfbWFjX2Nsb3NlIChnY3J5X21hY19oZF90IGhkKQoreworICBtYWNfY2xvc2UgKGhkKTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21hY19zZXRrZXkgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbikKK3sKKyAgcmV0dXJuIG1hY19zZXRrZXkgKGhkLCBrZXksIGtleWxlbik7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tYWNfc2V0aXYgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKml2LCBzaXplX3QgaXZsZW4pCit7CisgIHJldHVybiBtYWNfc2V0aXYgKGhkLCBpdiwgaXZsZW4pOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfbWFjX3dyaXRlIChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICppbmJ1Ziwgc2l6ZV90IGlubGVuKQoreworICByZXR1cm4gbWFjX3dyaXRlIChoZCwgaW5idWYsIGlubGVuKTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21hY19yZWFkIChnY3J5X21hY19oZF90IGhkLCB2b2lkICpvdXRidWYsIHNpemVfdCAqIG91dGxlbikKK3sKKyAgcmV0dXJuIG1hY19yZWFkIChoZCwgb3V0YnVmLCBvdXRsZW4pOworfQorCisKK2djcnlfZXJyX2NvZGVfdAorX2djcnlfbWFjX3ZlcmlmeSAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICByZXR1cm4gbWFjX3ZlcmlmeSAoaGQsIGJ1ZiwgYnVmbGVuKTsKK30KKworCit1bnNpZ25lZCBpbnQKK19nY3J5X21hY19nZXRfYWxnb19tYWNsZW4gKGludCBhbGdvKQoreworICBnY3J5X21hY19zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKyAgaWYgKCFzcGVjIHx8ICFzcGVjLT5vcHMgfHwgIXNwZWMtPm9wcy0+Z2V0X21hY2xlbikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gc3BlYy0+b3BzLT5nZXRfbWFjbGVuIChhbGdvKTsKK30KKworCit1bnNpZ25lZCBpbnQKK19nY3J5X21hY19nZXRfYWxnb19rZXlsZW4gKGludCBhbGdvKQoreworICBnY3J5X21hY19zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKyAgaWYgKCFzcGVjIHx8ICFzcGVjLT5vcHMgfHwgIXNwZWMtPm9wcy0+Z2V0X2tleWxlbikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gc3BlYy0+b3BzLT5nZXRfa2V5bGVuIChhbGdvKTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21hY19jdGwgKGdjcnlfbWFjX2hkX3QgaGQsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworCisgIC8qIEN1cnJlbnRseSBub3QgdXNlZC4gICovCisgICh2b2lkKSBoZDsKKyAgKHZvaWQpIGJ1ZmZlcjsKKyAgKHZvaWQpIGJ1ZmxlbjsKKworICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSBHQ1JZQ1RMX1JFU0VUOgorICAgICAgcmMgPSBtYWNfcmVzZXQgKGhkKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByYyA9IEdQR19FUlJfSU5WX09QOworICAgIH0KKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gTUFDIGFsZ29yaXRobSBBTEdPLgorCisgICAgR0NSWUNUTF9URVNUX0FMR086CisgICAgICAgIFJldHVybnMgMCBpZiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobSBBTEdPIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorICAgICAgICBCVUZGRVIgYW5kIE5CWVRFUyBtdXN0IGJlIHplcm8uCisKKyAgIE5vdGU6IEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBpbiBtb3N0IGNhc2VzIHVzZWQgdG8gcmV0dXJuIGFuCisgICBpbnRlZ2VyIHZhbHVlLCB3ZSBjYW4gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBjYWxsZXIgdG8ganVzdCBsb29rIGF0CisgICB0aGUgcmV0dXJuIHZhbHVlLiAgVGhlIGNhbGxlciB3aWxsIGluIGFsbCBjYXNlcyBjb25zdWx0IHRoZSB2YWx1ZQorICAgYW5kIHRoZXJlYnkgZGV0ZWN0aW5nIHdoZXRoZXIgYSBlcnJvciBvY2N1cnJlZCBvciBub3QgKGkuZS4gd2hpbGUKKyAgIGNoZWNraW5nIHRoZSBibG9jayBzaXplKQorICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21hY19hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKiBuYnl0ZXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisgIHVuc2lnbmVkIGludCB1aTsKKworICBzd2l0Y2ggKHdoYXQpCisgICAgeworICAgIGNhc2UgR0NSWUNUTF9HRVRfS0VZTEVOOgorICAgICAgaWYgKGJ1ZmZlciB8fCAoIW5ieXRlcykpCisgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfQVJHOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdWkgPSBfZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuIChhbGdvKTsKKyAgICAgICAgICBpZiAodWkgPiAwKQorICAgICAgICAgICAgKm5ieXRlcyA9IChzaXplX3QpIHVpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8qIFRoZSBvbmx5IHJlYXNvbiBmb3IgYW4gZXJyb3IgaXMgYW4gaW52YWxpZCBhbGdvLiAgKi8KKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9NQUNfQUxHTzsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ1JZQ1RMX1RFU1RfQUxHTzoKKyAgICAgIGlmIChidWZmZXIgfHwgbmJ5dGVzKQorICAgICAgICByYyA9IEdQR19FUlJfSU5WX0FSRzsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBjaGVja19tYWNfYWxnbyAoYWxnbyk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByYyA9IEdQR19FUlJfSU5WX09QOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvbWQuYyBiL2NpcGhlci9tZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvbWQuYwpAQCAtMCwwICsxLDEyNjAgQEAKKy8qIG1kLmMgIC0gIG1lc3NhZ2UgZGlnZXN0IGRpc3BhdGNoZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMiwgMjAwMywgMjAwNiwKKyAqICAgICAgICAgICAgICAgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdGguaCIKKworI2luY2x1ZGUgInJtZC5oIgorCisKKy8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgdGhlIGRpZ2VzdCBpbXBsZW1lbnRhdGlvbnMgaW5jbHVkZWQgaW4KKyAgIGxpYmdjcnlwdC4gICovCitzdGF0aWMgZ2NyeV9tZF9zcGVjX3QgKmRpZ2VzdF9saXN0W10gPQorICB7CisjaWYgVVNFX0NSQworICAgICAmX2djcnlfZGlnZXN0X3NwZWNfY3JjMzIsCisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19jcmMzMl9yZmMxNTEwLAorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfY3JjMjRfcmZjMjQ0MCwKKyNlbmRpZgorI2lmIFVTRV9TSEExCisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGExLAorI2VuZGlmCisjaWYgVVNFX1NIQTI1NgorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfc2hhMjU2LAorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfc2hhMjI0LAorI2VuZGlmCisjaWYgVVNFX1NIQTUxMgorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfc2hhNTEyLAorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfc2hhMzg0LAorI2VuZGlmCisjaWZkZWYgVVNFX0dPU1RfUl8zNDExXzk0CisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19nb3N0MzQxMV85NCwKKyNlbmRpZgorI2lmZGVmIFVTRV9HT1NUX1JfMzQxMV8xMgorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfc3RyaWJvZ18yNTYsCisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19zdHJpYm9nXzUxMiwKKyNlbmRpZgorI2lmIFVTRV9XSElSTFBPT0wKKyAgICAgJl9nY3J5X2RpZ2VzdF9zcGVjX3doaXJscG9vbCwKKyNlbmRpZgorI2lmIFVTRV9STUQxNjAKKyAgICAgJl9nY3J5X2RpZ2VzdF9zcGVjX3JtZDE2MCwKKyNlbmRpZgorI2lmIFVTRV9USUdFUgorICAgICAmX2djcnlfZGlnZXN0X3NwZWNfdGlnZXIsCisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY190aWdlcjEsCisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY190aWdlcjIsCisjZW5kaWYKKyNpZiBVU0VfTUQ1CisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19tZDUsCisjZW5kaWYKKyNpZiBVU0VfTUQ0CisgICAgICZfZ2NyeV9kaWdlc3Rfc3BlY19tZDQsCisjZW5kaWYKKyAgICBOVUxMCisgIH07CisKKwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tZF9saXN0Cit7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworICBzdHJ1Y3QgZ2NyeV9tZF9saXN0ICpuZXh0OworICBzaXplX3QgYWN0dWFsX3N0cnVjdF9zaXplOyAgICAgLyogQWxsb2NhdGVkIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUuICovCisgIFBST1BFUkxZX0FMSUdORURfVFlQRSBjb250ZXh0OworfSBHY3J5RGlnZXN0RW50cnk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHB1dCByaWdodCBhZnRlciB0aGUgZ2NyeV9tZF9oZF90IGJ1ZmZlciwgc28gdGhhdAorICogb25seSBvbmUgbWVtb3J5IGJsb2NrIGlzIG5lZWRlZC4gKi8KK3N0cnVjdCBnY3J5X21kX2NvbnRleHQKK3sKKyAgaW50ICBtYWdpYzsKKyAgc2l6ZV90IGFjdHVhbF9oYW5kbGVfc2l6ZTsgICAgIC8qIEFsbG9jYXRlZCBzaXplIG9mIHRoaXMgaGFuZGxlLiAqLworICBGSUxFICAqZGVidWc7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHNlY3VyZTogMTsKKyAgICB1bnNpZ25lZCBpbnQgZmluYWxpemVkOjE7CisgICAgdW5zaWduZWQgaW50IGJ1Z2VtdTE6MTsKKyAgfSBmbGFnczsKKyAgR2NyeURpZ2VzdEVudHJ5ICpsaXN0OworICBieXRlICptYWNwYWRzOworICBpbnQgbWFjcGFkc19Cc2l6ZTsgICAgICAgICAgICAgLyogQmxvY2tzaXplIGFzIHVzZWQgZm9yIHRoZSBITUFDIHBhZHMuICovCit9OworCisKKyNkZWZpbmUgQ1RYX01BR0lDX05PUk1BTCAweDExMDcxOTYxCisjZGVmaW5lIENUWF9NQUdJQ19TRUNVUkUgMHgxNjkxNzAxMQorCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90IG1kX2VuYWJsZSAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnbyk7CitzdGF0aWMgdm9pZCBtZF9jbG9zZSAoZ2NyeV9tZF9oZF90IGEpOworc3RhdGljIHZvaWQgbWRfd3JpdGUgKGdjcnlfbWRfaGRfdCBhLCBjb25zdCB2b2lkICppbmJ1Ziwgc2l6ZV90IGlubGVuKTsKK3N0YXRpYyBieXRlICptZF9yZWFkKCBnY3J5X21kX2hkX3QgYSwgaW50IGFsZ28gKTsKK3N0YXRpYyBpbnQgbWRfZ2V0X2FsZ28oIGdjcnlfbWRfaGRfdCBhICk7CitzdGF0aWMgaW50IG1kX2RpZ2VzdF9sZW5ndGgoIGludCBhbGdvICk7CitzdGF0aWMgdm9pZCBtZF9zdGFydF9kZWJ1ZyAoIGdjcnlfbWRfaGRfdCBhLCBjb25zdCBjaGFyICpzdWZmaXggKTsKK3N0YXRpYyB2b2lkIG1kX3N0b3BfZGVidWcgKCBnY3J5X21kX2hkX3QgYSApOworCisKKwwKK3N0YXRpYyBpbnQKK21hcF9hbGdvIChpbnQgYWxnbykKK3sKKyAgcmV0dXJuIGFsZ287Cit9CisKKworLyogUmV0dXJuIHRoZSBzcGVjIHN0cnVjdHVyZSBmb3IgdGhlIGhhc2ggYWxnb3JpdGhtIEFMR08uICBGb3IgYW4KKyAgIHVua25vd24gYWxnb3JpdGhtIE5VTEwgaXMgcmV0dXJuZWQuICAqLworc3RhdGljIGdjcnlfbWRfc3BlY190ICoKK3NwZWNfZnJvbV9hbGdvIChpbnQgYWxnbykKK3sKKyAgaW50IGlkeDsKKyAgZ2NyeV9tZF9zcGVjX3QgKnNwZWM7CisKKyAgYWxnbyA9IG1hcF9hbGdvIChhbGdvKTsKKworICBmb3IgKGlkeCA9IDA7IChzcGVjID0gZGlnZXN0X2xpc3RbaWR4XSk7IGlkeCsrKQorICAgIGlmIChhbGdvID09IHNwZWMtPmFsZ28pCisgICAgICByZXR1cm4gc3BlYzsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogTG9va3VwIGEgaGFzaCdzIHNwZWMgYnkgaXRzIG5hbWUuICAqLworc3RhdGljIGdjcnlfbWRfc3BlY190ICoKK3NwZWNfZnJvbV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X21kX3NwZWNfdCAqc3BlYzsKKyAgaW50IGlkeDsKKworICBmb3IgKGlkeD0wOyAoc3BlYyA9IGRpZ2VzdF9saXN0W2lkeF0pOyBpZHgrKykKKyAgICB7CisgICAgICBpZiAoIXN0cmljbXAgKG5hbWUsIHNwZWMtPm5hbWUpKQorICAgICAgICByZXR1cm4gc3BlYzsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogTG9va3VwIGEgaGFzaCdzIHNwZWMgYnkgaXRzIE9JRC4gICovCitzdGF0aWMgZ2NyeV9tZF9zcGVjX3QgKgorc3BlY19mcm9tX29pZCAoY29uc3QgY2hhciAqb2lkKQoreworICBnY3J5X21kX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9tZF9vaWRfc3BlY190ICpvaWRfc3BlY3M7CisgIGludCBpZHgsIGo7CisKKyAgZm9yIChpZHg9MDsgKHNwZWMgPSBkaWdlc3RfbGlzdFtpZHhdKTsgaWR4KyspCisgICAgeworICAgICAgb2lkX3NwZWNzID0gc3BlYy0+b2lkczsKKyAgICAgIGlmIChvaWRfc3BlY3MpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGogPSAwOyBvaWRfc3BlY3Nbal0ub2lkc3RyaW5nOyBqKyspCisgICAgICAgICAgICBpZiAoIXN0cmljbXAgKG9pZCwgb2lkX3NwZWNzW2pdLm9pZHN0cmluZykpCisgICAgICAgICAgICAgIHJldHVybiBzcGVjOworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBnY3J5X21kX3NwZWNfdCAqCitzZWFyY2hfb2lkIChjb25zdCBjaGFyICpvaWQsIGdjcnlfbWRfb2lkX3NwZWNfdCAqb2lkX3NwZWMpCit7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworICBpbnQgaTsKKworICBpZiAob2lkICYmICgoISBzdHJuY21wIChvaWQsICJvaWQuIiwgNCkpCisJICAgICAgfHwgKCEgc3RybmNtcCAob2lkLCAiT0lELiIsIDQpKSkpCisgICAgb2lkICs9IDQ7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9vaWQgKG9pZCk7CisgIGlmIChzcGVjICYmIHNwZWMtPm9pZHMpCisgICAgeworICAgICAgZm9yIChpID0gMDsgc3BlYy0+b2lkc1tpXS5vaWRzdHJpbmc7IGkrKykKKwlpZiAoIXN0cmljbXAgKG9pZCwgc3BlYy0+b2lkc1tpXS5vaWRzdHJpbmcpKQorCSAgeworCSAgICBpZiAob2lkX3NwZWMpCisJICAgICAgKm9pZF9zcGVjID0gc3BlYy0+b2lkc1tpXTsKKwkgICAgcmV0dXJuIHNwZWM7CisJICB9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBNYXAgYSBzdHJpbmcgdG8gdGhlIGRpZ2VzdCBhbGdvCisgKi8KK2ludAorX2djcnlfbWRfbWFwX25hbWUgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ2NyeV9tZF9zcGVjX3QgKnNwZWM7CisKKyAgaWYgKCFzdHJpbmcpCisgICAgcmV0dXJuIDA7CisKKyAgLyogSWYgdGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGRpZ2l0IChvcHRpb25hbGx5IHByZWZpeGVkIHdpdGgKKyAgICAgZWl0aGVyICJPSUQuIiBvciAib2lkLiIpLCB3ZSBmaXJzdCBsb29rIGludG8gb3VyIHRhYmxlIG9mIEFTTi4xCisgICAgIG9iamVjdCBpZGVudGlmaWVycyB0byBmaWd1cmUgb3V0IHRoZSBhbGdvcml0aG0gKi8KKyAgc3BlYyA9IHNlYXJjaF9vaWQgKHN0cmluZywgTlVMTCk7CisgIGlmIChzcGVjKQorICAgIHJldHVybiBzcGVjLT5hbGdvOworCisgIC8qIE5vdCBmb3VuZCwgc2VhcmNoIGEgbWF0Y2hpbmcgZGlnZXN0IG5hbWUuICAqLworICBzcGVjID0gc3BlY19mcm9tX25hbWUgKHN0cmluZyk7CisgIGlmIChzcGVjKQorICAgIHJldHVybiBzcGVjLT5hbGdvOworCisgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0gb3Igc29tZSBjb25zdGFudAorICogc3RyaW5nIHdoZW4gdGhlcmUgaXMgbm8gYWxnby4gIEl0IHdpbGwgbmV2ZXIgcmV0dXJuIE5VTEwuCisgKiBVc2UJdGhlIG1hY3JvIGdjcnlfbWRfdGVzdF9hbGdvKCkgdG8gY2hlY2sgd2hldGhlciB0aGUgYWxnb3JpdGhtCisgKiBpcyB2YWxpZC4KKyAqLworY29uc3QgY2hhciAqCitfZ2NyeV9tZF9hbGdvX25hbWUgKGludCBhbGdvcml0aG0pCit7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnb3JpdGhtKTsKKyAgcmV0dXJuIHNwZWMgPyBzcGVjLT5uYW1lIDogIj8iOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NoZWNrX2RpZ2VzdF9hbGdvIChpbnQgYWxnb3JpdGhtKQoreworICBnY3J5X21kX3NwZWNfdCAqc3BlYzsKKworICBzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ29yaXRobSk7CisgIGlmIChzcGVjICYmICFzcGVjLT5mbGFncy5kaXNhYmxlZCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBPcGVuIGEgbWVzc2FnZSBkaWdlc3QgaGFuZGxlIGZvciB1c2Ugd2l0aCBhbGdvcml0aG0gQUxHTy4KKyAqIE1vcmUgYWxnb3JpdGhtcyBtYXkgYmUgYWRkZWQgYnkgbWRfZW5hYmxlKCkuIFRoZSBpbml0aWFsIGFsZ29yaXRobQorICogbWF5IGJlIDAuCisgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK21kX29wZW4gKGdjcnlfbWRfaGRfdCAqaCwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVyciA9IDA7CisgIGludCBzZWN1cmUgPSAhIShmbGFncyAmIEdDUllfTURfRkxBR19TRUNVUkUpOworICBpbnQgaG1hYyA9ICAgISEoZmxhZ3MgJiBHQ1JZX01EX0ZMQUdfSE1BQyk7CisgIGludCBidWZzaXplID0gc2VjdXJlID8gNTEyIDogMTAyNDsKKyAgc3RydWN0IGdjcnlfbWRfY29udGV4dCAqY3R4OworICBnY3J5X21kX2hkX3QgaGQ7CisgIHNpemVfdCBuOworCisgIC8qIEFsbG9jYXRlIGEgbWVtb3J5IGFyZWEgdG8gaG9sZCB0aGUgY2FsbGVyIHZpc2libGUgYnVmZmVyIHdpdGggaXQncworICAgKiBjb250cm9sIGluZm9ybWF0aW9uIGFuZCB0aGUgZGF0YSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZS4gU2V0IHRoZQorICAgKiBjb250ZXh0IHBvaW50ZXIgYXQgdGhlIGJlZ2lubmluZyB0byB0aGlzIGFyZWEuCisgICAqIFdlIGhhdmUgdG8gdXNlIHRoaXMgc3RyYW5nZSBzY2hlbWUgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZGUgdGhlCisgICAqIGludGVybmFsIGRhdGEgYnV0IGhhdmUgYSB2YXJpYWJsZSBzaXplZCBidWZmZXIuCisgICAqCisgICAqCSstLS0rLS0tLS0tKy0tLS4uLi4uLi4uLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAqCSFjdHghIGJjdGwgISAgYnVmZmVyCSAgICAgISBwcml2YXRlCSAgICEKKyAgICoJKy0tLSstLS0tLS0rLS0tLi4uLi4uLi4tLS0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICoJICAhCQkJICAgICAgXgorICAgKgkgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0hCisgICAqCisgICAqIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgcHJpdmF0ZSBpcyB3ZWxsIGFsaWduZWQuCisgICAqLworICBuID0gc2l6ZW9mIChzdHJ1Y3QgZ2NyeV9tZF9oYW5kbGUpICsgYnVmc2l6ZTsKKyAgbiA9ICgobiArIHNpemVvZiAoUFJPUEVSTFlfQUxJR05FRF9UWVBFKSAtIDEpCisgICAgICAgLyBzaXplb2YgKFBST1BFUkxZX0FMSUdORURfVFlQRSkpICogc2l6ZW9mIChQUk9QRVJMWV9BTElHTkVEX1RZUEUpOworCisgIC8qIEFsbG9jYXRlIGFuZCBzZXQgdGhlIENvbnRleHQgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhICovCisgIGlmIChzZWN1cmUpCisgICAgaGQgPSB4dHJ5bWFsbG9jX3NlY3VyZSAobiArIHNpemVvZiAoc3RydWN0IGdjcnlfbWRfY29udGV4dCkpOworICBlbHNlCisgICAgaGQgPSB4dHJ5bWFsbG9jIChuICsgc2l6ZW9mIChzdHJ1Y3QgZ2NyeV9tZF9jb250ZXh0KSk7CisKKyAgaWYgKCEgaGQpCisgICAgZXJyID0gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKworICBpZiAoISBlcnIpCisgICAgeworICAgICAgaGQtPmN0eCA9IGN0eCA9IChzdHJ1Y3QgZ2NyeV9tZF9jb250ZXh0ICopICgoY2hhciAqKSBoZCArIG4pOworICAgICAgLyogU2V0dXAgdGhlIGdsb2JhbGx5IHZpc2libGUgZGF0YSAoYmN0bCBpbiB0aGUgZGlhZ3JhbSkuKi8KKyAgICAgIGhkLT5idWZzaXplID0gbiAtIHNpemVvZiAoc3RydWN0IGdjcnlfbWRfaGFuZGxlKSArIDE7CisgICAgICBoZC0+YnVmcG9zID0gMDsKKworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBkYXRhLiAqLworICAgICAgbWVtc2V0IChoZC0+Y3R4LCAwLCBzaXplb2YgKmhkLT5jdHgpOworICAgICAgY3R4LT5tYWdpYyA9IHNlY3VyZSA/IENUWF9NQUdJQ19TRUNVUkUgOiBDVFhfTUFHSUNfTk9STUFMOworICAgICAgY3R4LT5hY3R1YWxfaGFuZGxlX3NpemUgPSBuICsgc2l6ZW9mIChzdHJ1Y3QgZ2NyeV9tZF9jb250ZXh0KTsKKyAgICAgIGN0eC0+ZmxhZ3Muc2VjdXJlID0gc2VjdXJlOworICAgICAgY3R4LT5mbGFncy5idWdlbXUxID0gISEoZmxhZ3MgJiBHQ1JZX01EX0ZMQUdfQlVHRU1VMSk7CisKKyAgICAgIGlmIChobWFjKQorCXsKKwkgIHN3aXRjaCAoYWxnbykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHQ1JZX01EX1NIQTM4NDoKKyAgICAgICAgICAgICAgY2FzZSBHQ1JZX01EX1NIQTUxMjoKKyAgICAgICAgICAgICAgICBjdHgtPm1hY3BhZHNfQnNpemUgPSAxMjg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0NSWV9NRF9HT1NUUjM0MTFfOTQ6CisgICAgICAgICAgICAgICAgY3R4LT5tYWNwYWRzX0JzaXplID0gMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY3R4LT5tYWNwYWRzX0JzaXplID0gNjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgY3R4LT5tYWNwYWRzID0geHRyeW1hbGxvY19zZWN1cmUgKDIqKGN0eC0+bWFjcGFkc19Cc2l6ZSkpOworCSAgaWYgKCFjdHgtPm1hY3BhZHMpCisJICAgIHsKKwkgICAgICBlcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pOworCSAgICAgIG1kX2Nsb3NlIChoZCk7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmICghIGVycikKKyAgICB7CisgICAgICAvKiBIbW1tLCBzaG91bGQgd2UgcmVhbGx5IGRvIHRoYXQ/IC0geWVzIFstd2tdICovCisgICAgICBfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsICgpOworCisgICAgICBpZiAoYWxnbykKKwl7CisJICBlcnIgPSBtZF9lbmFibGUgKGhkLCBhbGdvKTsKKwkgIGlmIChlcnIpCisJICAgIG1kX2Nsb3NlIChoZCk7CisJfQorICAgIH0KKworICBpZiAoISBlcnIpCisgICAgKmggPSBoZDsKKworICByZXR1cm4gZXJyOworfQorCisvKiBDcmVhdGUgYSBtZXNzYWdlIGRpZ2VzdCBvYmplY3QgZm9yIGFsZ29yaXRobSBBTEdPLiAgRkxBR1MgbWF5IGJlCisgICBnaXZlbiBhcyBhbiBiaXR3aXNlIE9SIG9mIHRoZSBnY3J5X21kX2ZsYWdzIHZhbHVlcy4gIEFMR08gbWF5IGJlCisgICBnaXZlbiBhcyAwIGlmIHRoZSBhbGdvcml0aG1zIHRvIGJlIHVzZWQgYXJlIGxhdGVyIHNldCB1c2luZworICAgZ2NyeV9tZF9lbmFibGUuIEggaXMgZ3VhcmFudGVlZCB0byBiZSBhIHZhbGlkIGhhbmRsZSBvciBOVUxMIG9uCisgICBlcnJvci4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX29wZW4gKGdjcnlfbWRfaGRfdCAqaCwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBnY3J5X21kX2hkX3QgaGQ7CisKKyAgaWYgKChmbGFncyAmIH4oR0NSWV9NRF9GTEFHX1NFQ1VSRQorICAgICAgICAgICAgICAgICB8IEdDUllfTURfRkxBR19ITUFDCisgICAgICAgICAgICAgICAgIHwgR0NSWV9NRF9GTEFHX0JVR0VNVTEpKSkKKyAgICByYyA9IEdQR19FUlJfSU5WX0FSRzsKKyAgZWxzZQorICAgIHJjID0gbWRfb3BlbiAoJmhkLCBhbGdvLCBmbGFncyk7CisKKyAgKmggPSByYz8gTlVMTCA6IGhkOworICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CittZF9lbmFibGUgKGdjcnlfbWRfaGRfdCBoZCwgaW50IGFsZ29yaXRobSkKK3sKKyAgc3RydWN0IGdjcnlfbWRfY29udGV4dCAqaCA9IGhkLT5jdHg7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworICBHY3J5RGlnZXN0RW50cnkgKmVudHJ5OworICBnY3J5X2Vycl9jb2RlX3QgZXJyID0gMDsKKworICBmb3IgKGVudHJ5ID0gaC0+bGlzdDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpCisgICAgaWYgKGVudHJ5LT5zcGVjLT5hbGdvID09IGFsZ29yaXRobSkKKyAgICAgIHJldHVybiAwOyAvKiBBbHJlYWR5IGVuYWJsZWQgKi8KKworICBzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ29yaXRobSk7CisgIGlmICghc3BlYykKKyAgICB7CisgICAgICBsb2dfZGVidWcgKCJtZF9lbmFibGU6IGFsZ29yaXRobSAlZCBub3QgYXZhaWxhYmxlXG4iLCBhbGdvcml0aG0pOworICAgICAgZXJyID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICB9CisKKworICBpZiAoIWVyciAmJiBhbGdvcml0aG0gPT0gR0NSWV9NRF9NRDUgJiYgZmlwc19tb2RlICgpKQorICAgIHsKKyAgICAgIF9nY3J5X2luYWN0aXZhdGVfZmlwc19tb2RlICgiTUQ1IHVzZWQiKTsKKyAgICAgIGlmIChfZ2NyeV9lbmZvcmNlZF9maXBzX21vZGUgKCkgKQorICAgICAgICB7CisgICAgICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIGdldCB0byBoZXJlIGJlY2F1c2Ugd2UgZG8gbm90IHJlZ2lzdGVyCisgICAgICAgICAgICAgTUQ1IGluIGVuZm9yY2VkIGZpcHMgbW9kZS4gQnV0IGJldHRlciB0aHJvdyBhbiBlcnJvci4gICovCisgICAgICAgICAgZXJyID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIWVycikKKyAgICB7CisgICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YgKCplbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICsgc3BlYy0+Y29udGV4dHNpemUKKyAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mIChlbnRyeS0+Y29udGV4dCkpOworCisgICAgICAvKiBBbmQgYWxsb2NhdGUgYSBuZXcgbGlzdCBlbnRyeS4gKi8KKyAgICAgIGlmIChoLT5mbGFncy5zZWN1cmUpCisJZW50cnkgPSB4dHJ5bWFsbG9jX3NlY3VyZSAoc2l6ZSk7CisgICAgICBlbHNlCisJZW50cnkgPSB4dHJ5bWFsbG9jIChzaXplKTsKKworICAgICAgaWYgKCEgZW50cnkpCisJZXJyID0gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKyAgICAgIGVsc2UKKwl7CisJICBlbnRyeS0+c3BlYyA9IHNwZWM7CisJICBlbnRyeS0+bmV4dCA9IGgtPmxpc3Q7CisgICAgICAgICAgZW50cnktPmFjdHVhbF9zdHJ1Y3Rfc2l6ZSA9IHNpemU7CisJICBoLT5saXN0ID0gZW50cnk7CisKKwkgIC8qIEFuZCBpbml0IHRoaXMgaW5zdGFuY2UuICovCisJICBlbnRyeS0+c3BlYy0+aW5pdCAoJmVudHJ5LT5jb250ZXh0LmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPmZsYWdzLmJ1Z2VtdTE/IEdDUllfTURfRkxBR19CVUdFTVUxOjApOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX2VuYWJsZSAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnb3JpdGhtKQoreworICByZXR1cm4gbWRfZW5hYmxlIChoZCwgYWxnb3JpdGhtKTsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CittZF9jb3B5IChnY3J5X21kX2hkX3QgYWhkLCBnY3J5X21kX2hkX3QgKmJfaGQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlcnIgPSAwOworICBzdHJ1Y3QgZ2NyeV9tZF9jb250ZXh0ICphID0gYWhkLT5jdHg7CisgIHN0cnVjdCBnY3J5X21kX2NvbnRleHQgKmI7CisgIEdjcnlEaWdlc3RFbnRyeSAqYXIsICpicjsKKyAgZ2NyeV9tZF9oZF90IGJoZDsKKyAgc2l6ZV90IG47CisKKyAgaWYgKGFoZC0+YnVmcG9zKQorICAgIG1kX3dyaXRlIChhaGQsIE5VTEwsIDApOworCisgIG4gPSAoY2hhciAqKSBhaGQtPmN0eCAtIChjaGFyICopIGFoZDsKKyAgaWYgKGEtPmZsYWdzLnNlY3VyZSkKKyAgICBiaGQgPSB4dHJ5bWFsbG9jX3NlY3VyZSAobiArIHNpemVvZiAoc3RydWN0IGdjcnlfbWRfY29udGV4dCkpOworICBlbHNlCisgICAgYmhkID0geHRyeW1hbGxvYyAobiArIHNpemVvZiAoc3RydWN0IGdjcnlfbWRfY29udGV4dCkpOworCisgIGlmICghIGJoZCkKKyAgICBlcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pOworCisgIGlmICghIGVycikKKyAgICB7CisgICAgICBiaGQtPmN0eCA9IGIgPSAoc3RydWN0IGdjcnlfbWRfY29udGV4dCAqKSAoKGNoYXIgKikgYmhkICsgbik7CisgICAgICAvKiBObyBuZWVkIHRvIGNvcHkgdGhlIGJ1ZmZlciBkdWUgdG8gdGhlIHdyaXRlIGFib3ZlLiAqLworICAgICAgZ2NyeV9hc3NlcnQgKGFoZC0+YnVmc2l6ZSA9PSAobiAtIHNpemVvZiAoc3RydWN0IGdjcnlfbWRfaGFuZGxlKSArIDEpKTsKKyAgICAgIGJoZC0+YnVmc2l6ZSA9IGFoZC0+YnVmc2l6ZTsKKyAgICAgIGJoZC0+YnVmcG9zID0gMDsKKyAgICAgIGdjcnlfYXNzZXJ0ICghIGFoZC0+YnVmcG9zKTsKKyAgICAgIG1lbWNweSAoYiwgYSwgc2l6ZW9mICphKTsKKyAgICAgIGItPmxpc3QgPSBOVUxMOworICAgICAgYi0+ZGVidWcgPSBOVUxMOworICAgICAgaWYgKGEtPm1hY3BhZHMpCisJeworCSAgYi0+bWFjcGFkcyA9IHh0cnltYWxsb2Nfc2VjdXJlICgyKihhLT5tYWNwYWRzX0JzaXplKSk7CisJICBpZiAoISBiLT5tYWNwYWRzKQorCSAgICB7CisJICAgICAgZXJyID0gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKwkgICAgICBtZF9jbG9zZSAoYmhkKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBtZW1jcHkgKGItPm1hY3BhZHMsIGEtPm1hY3BhZHMsICgyKihhLT5tYWNwYWRzX0JzaXplKSkpOworCX0KKyAgICB9CisKKyAgLyogQ29weSB0aGUgY29tcGxldGUgbGlzdCBvZiBhbGdvcml0aG1zLiAgVGhlIGNvcGllZCBsaXN0IGlzCisgICAgIHJldmVyc2VkLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gKi8KKyAgaWYgKCFlcnIpCisgICAgeworICAgICAgZm9yIChhciA9IGEtPmxpc3Q7IGFyOyBhciA9IGFyLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGEtPmZsYWdzLnNlY3VyZSkKKyAgICAgICAgICAgIGJyID0geHRyeW1hbGxvY19zZWN1cmUgKHNpemVvZiAqYnIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXItPnNwZWMtPmNvbnRleHRzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihhci0+Y29udGV4dCkpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyID0geHRyeW1hbGxvYyAoc2l6ZW9mICpicgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFyLT5zcGVjLT5jb250ZXh0c2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZiAoYXItPmNvbnRleHQpKTsKKyAgICAgICAgICBpZiAoIWJyKQorICAgICAgICAgICAgeworCSAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICAgICAgICAgIG1kX2Nsb3NlIChiaGQpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIG1lbWNweSAoYnIsIGFyLCAoc2l6ZW9mICgqYnIpICsgYXItPnNwZWMtPmNvbnRleHRzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZiAoYXItPmNvbnRleHQpKSk7CisgICAgICAgICAgYnItPm5leHQgPSBiLT5saXN0OworICAgICAgICAgIGItPmxpc3QgPSBicjsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoYS0+ZGVidWcgJiYgIWVycikKKyAgICBtZF9zdGFydF9kZWJ1ZyAoYmhkLCAidW5rbm93biIpOworCisgIGlmICghZXJyKQorICAgICpiX2hkID0gYmhkOworCisgIHJldHVybiBlcnI7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tZF9jb3B5IChnY3J5X21kX2hkX3QgKmhhbmRsZSwgZ2NyeV9tZF9oZF90IGhkKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgcmMgPSBtZF9jb3B5IChoZCwgaGFuZGxlKTsKKyAgaWYgKHJjKQorICAgICpoYW5kbGUgPSBOVUxMOworICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIFJlc2V0IGFsbCBjb250ZXh0cyBhbmQgZGlzY2FyZCBhbnkgYnVmZmVyZWQgc3R1ZmYuICBUaGlzIG1heSBiZSB1c2VkCisgKiBpbnN0ZWFkIG9mIGEgbWRfY2xvc2UoKTsgbWRfb3BlbigpLgorICovCit2b2lkCitfZ2NyeV9tZF9yZXNldCAoZ2NyeV9tZF9oZF90IGEpCit7CisgIEdjcnlEaWdlc3RFbnRyeSAqcjsKKworICAvKiBOb3RlOiBXZSBhbGxvdyB0aGlzIGV2ZW4gaW4gZmlwcyBub24gb3BlcmF0aW9uYWwgbW9kZS4gICovCisKKyAgYS0+YnVmcG9zID0gYS0+Y3R4LT5mbGFncy5maW5hbGl6ZWQgPSAwOworCisgIGZvciAociA9IGEtPmN0eC0+bGlzdDsgcjsgciA9IHItPm5leHQpCisgICAgeworICAgICAgbWVtc2V0IChyLT5jb250ZXh0LmMsIDAsIHItPnNwZWMtPmNvbnRleHRzaXplKTsKKyAgICAgICgqci0+c3BlYy0+aW5pdCkgKCZyLT5jb250ZXh0LmMsCisgICAgICAgICAgICAgICAgICAgICAgICBhLT5jdHgtPmZsYWdzLmJ1Z2VtdTE/IEdDUllfTURfRkxBR19CVUdFTVUxOjApOworICAgIH0KKyAgaWYgKGEtPmN0eC0+bWFjcGFkcykKKyAgICBtZF93cml0ZSAoYSwgYS0+Y3R4LT5tYWNwYWRzLCBhLT5jdHgtPm1hY3BhZHNfQnNpemUpOyAvKiBpbm5lciBwYWQgKi8KK30KKworCitzdGF0aWMgdm9pZAorbWRfY2xvc2UgKGdjcnlfbWRfaGRfdCBhKQoreworICBHY3J5RGlnZXN0RW50cnkgKnIsICpyMjsKKworICBpZiAoISBhKQorICAgIHJldHVybjsKKyAgaWYgKGEtPmN0eC0+ZGVidWcpCisgICAgbWRfc3RvcF9kZWJ1ZyAoYSk7CisgIGZvciAociA9IGEtPmN0eC0+bGlzdDsgcjsgciA9IHIyKQorICAgIHsKKyAgICAgIHIyID0gci0+bmV4dDsKKyAgICAgIHdpcGVtZW1vcnkgKHIsIHItPmFjdHVhbF9zdHJ1Y3Rfc2l6ZSk7CisgICAgICB4ZnJlZSAocik7CisgICAgfQorCisgIGlmIChhLT5jdHgtPm1hY3BhZHMpCisgICAgeworICAgICAgd2lwZW1lbW9yeSAoYS0+Y3R4LT5tYWNwYWRzLCAyKihhLT5jdHgtPm1hY3BhZHNfQnNpemUpKTsKKyAgICAgIHhmcmVlKGEtPmN0eC0+bWFjcGFkcyk7CisgICAgfQorCisgIHdpcGVtZW1vcnkgKGEsIGEtPmN0eC0+YWN0dWFsX2hhbmRsZV9zaXplKTsKKyAgeGZyZWUoYSk7Cit9CisKKwordm9pZAorX2djcnlfbWRfY2xvc2UgKGdjcnlfbWRfaGRfdCBoZCkKK3sKKyAgLyogTm90ZTogV2UgYWxsb3cgdGhpcyBldmVuIGluIGZpcHMgbm9uIG9wZXJhdGlvbmFsIG1vZGUuICAqLworICBtZF9jbG9zZSAoaGQpOworfQorCisKK3N0YXRpYyB2b2lkCittZF93cml0ZSAoZ2NyeV9tZF9oZF90IGEsIGNvbnN0IHZvaWQgKmluYnVmLCBzaXplX3QgaW5sZW4pCit7CisgIEdjcnlEaWdlc3RFbnRyeSAqcjsKKworICBpZiAoYS0+Y3R4LT5kZWJ1ZykKKyAgICB7CisgICAgICBpZiAoYS0+YnVmcG9zICYmIGZ3cml0ZSAoYS0+YnVmLCBhLT5idWZwb3MsIDEsIGEtPmN0eC0+ZGVidWcpICE9IDEpCisJQlVHKCk7CisgICAgICBpZiAoaW5sZW4gJiYgZndyaXRlIChpbmJ1ZiwgaW5sZW4sIDEsIGEtPmN0eC0+ZGVidWcpICE9IDEpCisJQlVHKCk7CisgICAgfQorCisgIGZvciAociA9IGEtPmN0eC0+bGlzdDsgcjsgciA9IHItPm5leHQpCisgICAgeworICAgICAgaWYgKGEtPmJ1ZnBvcykKKwkoKnItPnNwZWMtPndyaXRlKSAoJnItPmNvbnRleHQuYywgYS0+YnVmLCBhLT5idWZwb3MpOworICAgICAgKCpyLT5zcGVjLT53cml0ZSkgKCZyLT5jb250ZXh0LmMsIGluYnVmLCBpbmxlbik7CisgICAgfQorICBhLT5idWZwb3MgPSAwOworfQorCisKK3ZvaWQKK19nY3J5X21kX3dyaXRlIChnY3J5X21kX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmluYnVmLCBzaXplX3QgaW5sZW4pCit7CisgIG1kX3dyaXRlIChoZCwgaW5idWYsIGlubGVuKTsKK30KKworCitzdGF0aWMgdm9pZAorbWRfZmluYWwgKGdjcnlfbWRfaGRfdCBhKQoreworICBHY3J5RGlnZXN0RW50cnkgKnI7CisKKyAgaWYgKGEtPmN0eC0+ZmxhZ3MuZmluYWxpemVkKQorICAgIHJldHVybjsKKworICBpZiAoYS0+YnVmcG9zKQorICAgIG1kX3dyaXRlIChhLCBOVUxMLCAwKTsKKworICBmb3IgKHIgPSBhLT5jdHgtPmxpc3Q7IHI7IHIgPSByLT5uZXh0KQorICAgICgqci0+c3BlYy0+ZmluYWwpICgmci0+Y29udGV4dC5jKTsKKworICBhLT5jdHgtPmZsYWdzLmZpbmFsaXplZCA9IDE7CisKKyAgaWYgKGEtPmN0eC0+bWFjcGFkcykKKyAgICB7CisgICAgICAvKiBGaW5pc2ggdGhlIGhtYWMuICovCisgICAgICBpbnQgYWxnbyA9IG1kX2dldF9hbGdvIChhKTsKKyAgICAgIGJ5dGUgKnAgPSBtZF9yZWFkIChhLCBhbGdvKTsKKyAgICAgIHNpemVfdCBkbGVuID0gbWRfZGlnZXN0X2xlbmd0aCAoYWxnbyk7CisgICAgICBnY3J5X21kX2hkX3Qgb207CisgICAgICBnY3J5X2Vycl9jb2RlX3QgZXJyOworCisgICAgICBlcnIgPSBtZF9vcGVuICgmb20sIGFsZ28sCisgICAgICAgICAgICAgICAgICAgICAoKGEtPmN0eC0+ZmxhZ3Muc2VjdXJlPyBHQ1JZX01EX0ZMQUdfU0VDVVJFOjApCisgICAgICAgICAgICAgICAgICAgICAgfCAoYS0+Y3R4LT5mbGFncy5idWdlbXUxPyBHQ1JZX01EX0ZMQUdfQlVHRU1VMTowKSkpOworICAgICAgaWYgKGVycikKKwlfZ2NyeV9mYXRhbF9lcnJvciAoZXJyLCBOVUxMKTsKKyAgICAgIG1kX3dyaXRlIChvbSwKKyAgICAgICAgICAgICAgICAoYS0+Y3R4LT5tYWNwYWRzKSsoYS0+Y3R4LT5tYWNwYWRzX0JzaXplKSwKKyAgICAgICAgICAgICAgICBhLT5jdHgtPm1hY3BhZHNfQnNpemUpOworICAgICAgbWRfd3JpdGUgKG9tLCBwLCBkbGVuKTsKKyAgICAgIG1kX2ZpbmFsIChvbSk7CisgICAgICAvKiBSZXBsYWNlIG91ciBkaWdlc3Qgd2l0aCB0aGUgbWFjICh0aGV5IGhhdmUgdGhlIHNhbWUgc2l6ZSkuICovCisgICAgICBtZW1jcHkgKHAsIG1kX3JlYWQgKG9tLCBhbGdvKSwgZGxlbik7CisgICAgICBtZF9jbG9zZSAob20pOworICAgIH0KK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitwcmVwYXJlX21hY3BhZHMgKGdjcnlfbWRfaGRfdCBoZCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworICBpbnQgaTsKKyAgaW50IGFsZ28gPSBtZF9nZXRfYWxnbyAoaGQpOworICB1bnNpZ25lZCBjaGFyICpoZWxwa2V5ID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqaXBhZCwgKm9wYWQ7CisKKyAgaWYgKCFhbGdvKQorICAgIHJldHVybiBHUEdfRVJSX0RJR0VTVF9BTEdPOyAvKiBNaWdodCBoYXBwZW4gaWYgbm8gYWxnbyBpcyBlbmFibGVkLiAgKi8KKworICBpZiAoIGtleWxlbiA+IGhkLT5jdHgtPm1hY3BhZHNfQnNpemUgKQorICAgIHsKKyAgICAgIGhlbHBrZXkgPSB4dHJ5bWFsbG9jX3NlY3VyZSAobWRfZGlnZXN0X2xlbmd0aCAoYWxnbykpOworICAgICAgaWYgKCFoZWxwa2V5KQorICAgICAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKyAgICAgIF9nY3J5X21kX2hhc2hfYnVmZmVyIChhbGdvLCBoZWxwa2V5LCBrZXksIGtleWxlbik7CisgICAgICBrZXkgPSBoZWxwa2V5OworICAgICAga2V5bGVuID0gbWRfZGlnZXN0X2xlbmd0aCAoYWxnbyk7CisgICAgICBnY3J5X2Fzc2VydCAoIGtleWxlbiA8PSBoZC0+Y3R4LT5tYWNwYWRzX0JzaXplICk7CisgICAgfQorCisgIG1lbXNldCAoIGhkLT5jdHgtPm1hY3BhZHMsIDAsIDIqKGhkLT5jdHgtPm1hY3BhZHNfQnNpemUpICk7CisgIGlwYWQgPSBoZC0+Y3R4LT5tYWNwYWRzOworICBvcGFkID0gKGhkLT5jdHgtPm1hY3BhZHMpKyhoZC0+Y3R4LT5tYWNwYWRzX0JzaXplKTsKKyAgbWVtY3B5ICggaXBhZCwga2V5LCBrZXlsZW4gKTsKKyAgbWVtY3B5ICggb3BhZCwga2V5LCBrZXlsZW4gKTsKKyAgZm9yIChpPTA7IGkgPCBoZC0+Y3R4LT5tYWNwYWRzX0JzaXplOyBpKysgKQorICAgIHsKKyAgICAgIGlwYWRbaV0gXj0gMHgzNjsKKyAgICAgIG9wYWRbaV0gXj0gMHg1YzsKKyAgICB9CisgIHhmcmVlIChoZWxwa2V5KTsKKworICByZXR1cm4gMDsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX2N0bCAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgY21kLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisKKyAgKHZvaWQpYnVmbGVuOyAvKiBDdXJyZW50bHkgbm90IHVzZWQuICAqLworCisgIHN3aXRjaCAoY21kKQorICAgIHsKKyAgICBjYXNlIEdDUllDVExfRklOQUxJWkU6CisgICAgICBtZF9maW5hbCAoaGQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ1JZQ1RMX1NUQVJUX0RVTVA6CisgICAgICBtZF9zdGFydF9kZWJ1ZyAoaGQsIGJ1ZmZlcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdDUllDVExfU1RPUF9EVU1QOgorICAgICAgbWRfc3RvcF9kZWJ1ZyAoIGhkICk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PUDsKKyAgICB9CisgIHJldHVybiByYzsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX3NldGtleSAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKworICBpZiAoIWhkLT5jdHgtPm1hY3BhZHMpCisgICAgcmMgPSBHUEdfRVJSX0NPTkZMSUNUOworICBlbHNlCisgICAgeworICAgICAgcmMgPSBwcmVwYXJlX21hY3BhZHMgKGhkLCBrZXksIGtleWxlbik7CisgICAgICBpZiAoIXJjKQorCV9nY3J5X21kX3Jlc2V0IChoZCk7CisgICAgfQorCisgIHJldHVybiByYzsKK30KKworCisvKiBUaGUgbmV3IGRlYnVnIGludGVyZmFjZS4gIElmIFNVRkZJWCBpcyBhIHN0cmluZyBpdCBjcmVhdGVzIGFuIGRlYnVnCisgICBmaWxlIGZvciB0aGUgY29udGV4dCBIRC4gIElGIHN1ZmZpeCBpcyBOVUxMLCB0aGUgZmlsZSBpcyBjbG9zZWQgYW5kCisgICBkZWJ1Z2dpbmcgaXMgc3RvcHBlZC4gICovCit2b2lkCitfZ2NyeV9tZF9kZWJ1ZyAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisgIGlmIChzdWZmaXgpCisgICAgbWRfc3RhcnRfZGVidWcgKGhkLCBzdWZmaXgpOworICBlbHNlCisgICAgbWRfc3RvcF9kZWJ1ZyAoaGQpOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBJZiBBTEdPIGlzIG51bGwgZ2V0IHRoZSBkaWdlc3QgZm9yIHRoZSB1c2VkIGFsZ28gKHdoaWNoIHNob3VsZCBiZQorICogb25seSBvbmUpCisgKi8KK3N0YXRpYyBieXRlICoKK21kX3JlYWQoIGdjcnlfbWRfaGRfdCBhLCBpbnQgYWxnbyApCit7CisgIEdjcnlEaWdlc3RFbnRyeSAqciA9IGEtPmN0eC0+bGlzdDsKKworICBpZiAoISBhbGdvKQorICAgIHsKKyAgICAgIC8qIFJldHVybiB0aGUgZmlyc3QgYWxnb3JpdGhtICovCisgICAgICBpZiAocikKKyAgICAgICAgeworICAgICAgICAgIGlmIChyLT5uZXh0KQorICAgICAgICAgICAgbG9nX2RlYnVnICgibW9yZSB0aGFuIG9uZSBhbGdvcml0aG0gaW4gbWRfcmVhZCgwKVxuIik7CisgICAgICAgICAgcmV0dXJuIHItPnNwZWMtPnJlYWQgKCZyLT5jb250ZXh0LmMpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChyID0gYS0+Y3R4LT5saXN0OyByOyByID0gci0+bmV4dCkKKwlpZiAoci0+c3BlYy0+YWxnbyA9PSBhbGdvKQorCSAgcmV0dXJuIHItPnNwZWMtPnJlYWQgKCZyLT5jb250ZXh0LmMpOworICAgIH0KKyAgQlVHKCk7CisgIHJldHVybiBOVUxMOworfQorCisKKy8qCisgKiBSZWFkIG91dCB0aGUgY29tcGxldGUgZGlnZXN0LCB0aGlzIGZ1bmN0aW9uIGltcGxpY3RseSBmaW5hbGl6ZXMKKyAqIHRoZSBoYXNoLgorICovCitieXRlICoKK19nY3J5X21kX3JlYWQgKGdjcnlfbWRfaGRfdCBoZCwgaW50IGFsZ28pCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYWx3YXlzIHJldHVybiBhIGRpZ2VzdCwgdGh1cyB3ZQorICAgICBjYW4ndCByZXR1cm4gYW4gZXJyb3Igd2hpY2ggd2UgYWN0dWFsbHkgc2hvdWxkIGRvIGluCisgICAgIG5vbi1vcGVyYXRpb25hbCBzdGF0ZS4gICovCisgIF9nY3J5X21kX2N0bCAoaGQsIEdDUllDVExfRklOQUxJWkUsIE5VTEwsIDApOworICByZXR1cm4gbWRfcmVhZCAoaGQsIGFsZ28pOworfQorCisKKy8qCisgKiBSZWFkIG91dCBhbiBpbnRlcm1lZGlhdGUgZGlnZXN0LiAgTm90IHlldCBmdW5jdGlvbmFsLgorICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX2dldCAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnbywgYnl0ZSAqYnVmZmVyLCBpbnQgYnVmbGVuKQoreworICAodm9pZCloZDsKKyAgKHZvaWQpYWxnbzsKKyAgKHZvaWQpYnVmZmVyOworICAodm9pZClidWZsZW47CisKKyAgLyptZF9kaWdlc3QgLi4uICovCisgIGZpcHNfc2lnbmFsX2Vycm9yICgidW5pbXBsZW1lbnRlZCBmdW5jdGlvbiBjYWxsZWQiKTsKKyAgcmV0dXJuIEdQR19FUlJfSU5URVJOQUw7Cit9CisKKworLyoKKyAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGhhc2ggYSBidWZmZXIgd2l0aCBhIGdpdmVuIGFsZ28uIFRoZSBvbmx5CisgKiBndWFyYW50ZWVkIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBSSVBFLU1EMTYwIGFuZCBTSEEtMS4gVGhlCisgKiBzdXBwbGllZCBkaWdlc3QgYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcKKyAqIGhhc2guICBObyBlcnJvciBpcyByZXR1cm5lZCwgdGhlIGZ1bmN0aW9uIHdpbGwgYWJvcnQgb24gYW4gaW52YWxpZAorICogYWxnby4gIERJU0FCTEVEX0FMR09TIGFyZSBpZ25vcmVkIGhlcmUuICAqLwordm9pZAorX2djcnlfbWRfaGFzaF9idWZmZXIgKGludCBhbGdvLCB2b2lkICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBpZiAoYWxnbyA9PSBHQ1JZX01EX1NIQTEpCisgICAgX2djcnlfc2hhMV9oYXNoX2J1ZmZlciAoZGlnZXN0LCBidWZmZXIsIGxlbmd0aCk7CisgIGVsc2UgaWYgKGFsZ28gPT0gR0NSWV9NRF9STUQxNjAgJiYgIWZpcHNfbW9kZSAoKSApCisgICAgX2djcnlfcm1kMTYwX2hhc2hfYnVmZmVyIChkaWdlc3QsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEZvciB0aGUgb3RoZXJzIHdlIGRvIG5vdCBoYXZlIGEgZmFzdCBmdW5jdGlvbiwgc28gd2UgdXNlIHRoZQorCSBub3JtYWwgZnVuY3Rpb25zLiAqLworICAgICAgZ2NyeV9tZF9oZF90IGg7CisgICAgICBncGdfZXJyX2NvZGVfdCBlcnI7CisKKyAgICAgIGlmIChhbGdvID09IEdDUllfTURfTUQ1ICYmIGZpcHNfbW9kZSAoKSkKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2luYWN0aXZhdGVfZmlwc19tb2RlICgiTUQ1IHVzZWQiKTsKKyAgICAgICAgICBpZiAoX2djcnlfZW5mb3JjZWRfZmlwc19tb2RlICgpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIGdldCB0byBoZXJlIGJlY2F1c2Ugd2UgZG8gbm90IHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgIE1ENSBpbiBlbmZvcmNlZCBmaXBzIG1vZGUuICAqLworICAgICAgICAgICAgICBfZ2NyeV9maXBzX25vcmV0dXJuICgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGVyciA9IG1kX29wZW4gKCZoLCBhbGdvLCAwKTsKKyAgICAgIGlmIChlcnIpCisJbG9nX2J1ZyAoImdjcnlfbWRfb3BlbiBmYWlsZWQgZm9yIGFsZ28gJWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgYWxnbywgZ3BnX3N0cmVycm9yIChnY3J5X2Vycm9yKGVycikpKTsKKyAgICAgIG1kX3dyaXRlIChoLCAoYnl0ZSAqKSBidWZmZXIsIGxlbmd0aCk7CisgICAgICBtZF9maW5hbCAoaCk7CisgICAgICBtZW1jcHkgKGRpZ2VzdCwgbWRfcmVhZCAoaCwgYWxnbyksIG1kX2RpZ2VzdF9sZW5ndGggKGFsZ28pKTsKKyAgICAgIG1kX2Nsb3NlIChoKTsKKyAgICB9Cit9CisKKworLyogU2hvcnRjdXQgZnVuY3Rpb24gdG8gaGFzaCBtdWx0aXBsZSBidWZmZXJzIHdpdGggYSBnaXZlbiBhbGdvLiAgSW4KKyAgIGNvbnRyYXN0IHRvIGdjcnlfbWRfaGFzaF9idWZmZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBvbgorICAgaW52YWxpZCBhcmd1bWVudHMgb3Igb24gb3RoZXIgcHJvYmxlbXM7IGRpc2FibGVkIGFsZ29yaXRobXMgYXJlCisgICBfbm90XyBpZ25vcmVkIGJ1dCBmbGFnZ2VkIGFzIGFuIGVycm9yLgorCisgICBUaGUgZGF0YSB0byBzaWduIGlzIHRha2VuIGZyb20gdGhlIGFycmF5IElPViB3aGljaCBoYXMgSU9WQ05UIGl0ZW1zLgorCisgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpbiBGTEFHUyBpcyBHQ1JZX01EX0ZMQUdfSE1BQyB3aGljaCB0dXJucworICAgdGhpcyBmdW5jdGlvbiBpbnRvIGEgSE1BQyBmdW5jdGlvbjsgdGhlIGZpcnN0IGl0ZW0gaW4gSU9WIGlzIHRoZW4KKyAgIHVzZWQgYXMgdGhlIGtleS4KKworICAgT24gc3VjY2VzcyAwIGlzIHJldHVybmVkIGFuZCByZXN1bHRpbmcgaGFzaCBvciBITUFDIGlzIHN0b3JlZCBhdAorICAgRElHRVNUIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgd2l0aCBhbgorICAgYXBwcm9wcmlhdGUgbGVuZ3RoLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGludCBhbGdvLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9idWZmZXJfdCAqaW92LCBpbnQgaW92Y250KQoreworICBpbnQgaG1hYzsKKworICBpZiAoIWlvdiB8fCBpb3ZjbnQgPCAwKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisgIGlmIChmbGFncyAmIH4oR0NSWV9NRF9GTEFHX0hNQUMpKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgaG1hYyA9ICEhKGZsYWdzICYgR0NSWV9NRF9GTEFHX0hNQUMpOworICBpZiAoaG1hYyAmJiBpb3ZjbnQgPCAxKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgaWYgKGFsZ28gPT0gR0NSWV9NRF9TSEExICYmICFobWFjKQorICAgIF9nY3J5X3NoYTFfaGFzaF9idWZmZXJzIChkaWdlc3QsIGlvdiwgaW92Y250KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEZvciB0aGUgb3RoZXJzIHdlIGRvIG5vdCBoYXZlIGEgZmFzdCBmdW5jdGlvbiwgc28gd2UgdXNlIHRoZQorCSBub3JtYWwgZnVuY3Rpb25zLiAqLworICAgICAgZ2NyeV9tZF9oZF90IGg7CisgICAgICBncGdfZXJyX2NvZGVfdCByYzsKKworICAgICAgaWYgKGFsZ28gPT0gR0NSWV9NRF9NRDUgJiYgZmlwc19tb2RlICgpKQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfaW5hY3RpdmF0ZV9maXBzX21vZGUgKCJNRDUgdXNlZCIpOworICAgICAgICAgIGlmIChfZ2NyeV9lbmZvcmNlZF9maXBzX21vZGUgKCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIGhlcmUgYmVjYXVzZSB3ZSBkbyBub3QgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgTUQ1IGluIGVuZm9yY2VkIGZpcHMgbW9kZS4gICovCisgICAgICAgICAgICAgIF9nY3J5X2ZpcHNfbm9yZXR1cm4gKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgcmMgPSBtZF9vcGVuICgmaCwgYWxnbywgKGhtYWM/IEdDUllfTURfRkxBR19ITUFDOjApKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgICBpZiAoaG1hYykKKyAgICAgICAgeworICAgICAgICAgIHJjID0gX2djcnlfbWRfc2V0a2V5IChoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopaW92WzBdLmRhdGEgKyBpb3ZbMF0ub2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZbMF0ubGVuKTsKKyAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1kX2Nsb3NlIChoKTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgfQorICAgICAgICAgIGlvdisrOyBpb3ZjbnQtLTsKKyAgICAgICAgfQorICAgICAgZm9yICg7aW92Y250OyBpb3YrKywgaW92Y250LS0pCisgICAgICAgIG1kX3dyaXRlIChoLCAoY29uc3QgY2hhciopaW92WzBdLmRhdGEgKyBpb3ZbMF0ub2ZmLCBpb3ZbMF0ubGVuKTsKKyAgICAgIG1kX2ZpbmFsIChoKTsKKyAgICAgIG1lbWNweSAoZGlnZXN0LCBtZF9yZWFkIChoLCBhbGdvKSwgbWRfZGlnZXN0X2xlbmd0aCAoYWxnbykpOworICAgICAgbWRfY2xvc2UgKGgpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CittZF9nZXRfYWxnbyAoZ2NyeV9tZF9oZF90IGEpCit7CisgIEdjcnlEaWdlc3RFbnRyeSAqciA9IGEtPmN0eC0+bGlzdDsKKworICBpZiAociAmJiByLT5uZXh0KQorICAgIHsKKyAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgicG9zc2libGUgdXNhZ2UgZXJyb3IiKTsKKyAgICAgIGxvZ19lcnJvciAoIldBUk5JTkc6IG1vcmUgdGhhbiBvbmUgYWxnb3JpdGhtIGluIG1kX2dldF9hbGdvKClcbiIpOworICAgIH0KKyAgcmV0dXJuIHIgPyByLT5zcGVjLT5hbGdvIDogMDsKK30KKworCitpbnQKK19nY3J5X21kX2dldF9hbGdvIChnY3J5X21kX2hkX3QgaGQpCit7CisgIHJldHVybiBtZF9nZXRfYWxnbyAoaGQpOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0CisgKi8KK3N0YXRpYyBpbnQKK21kX2RpZ2VzdF9sZW5ndGggKGludCBhbGdvcml0aG0pCit7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnb3JpdGhtKTsKKyAgcmV0dXJuIHNwZWM/IHNwZWMtPm1kbGVuIDogMDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdCBpbiBieXRlcy4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpbiBjYXNlIG9mIGVycm9ycy4KKyAqLwordW5zaWduZWQgaW50CitfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChpbnQgYWxnb3JpdGhtKQoreworICByZXR1cm4gbWRfZGlnZXN0X2xlbmd0aCAoYWxnb3JpdGhtKTsKK30KKworCisvKiBIbW1tOiBhZGQgYSBtb2RlIHRvIGVudW1lcmF0ZSB0aGUgT0lEcworICoJdG8gbWFrZSBnMTAvc2lnLWNoZWNrLmMgbW9yZSBwb3J0YWJsZSAqLworc3RhdGljIGNvbnN0IGJ5dGUgKgorbWRfYXNuX29pZCAoaW50IGFsZ29yaXRobSwgc2l6ZV90ICphc25sZW4sIHNpemVfdCAqbWRsZW4pCit7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworICBjb25zdCBieXRlICphc25vaWQgPSBOVUxMOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnb3JpdGhtKTsKKyAgaWYgKHNwZWMpCisgICAgeworICAgICAgaWYgKGFzbmxlbikKKwkqYXNubGVuID0gc3BlYy0+YXNubGVuOworICAgICAgaWYgKG1kbGVuKQorCSptZGxlbiA9IHNwZWMtPm1kbGVuOworICAgICAgYXNub2lkID0gc3BlYy0+YXNub2lkOworICAgIH0KKyAgZWxzZQorICAgIGxvZ19idWcgKCJubyBBU04uMSBPSUQgZm9yIG1kIGFsZ28gJWRcbiIsIGFsZ29yaXRobSk7CisKKyAgcmV0dXJuIGFzbm9pZDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBjaXBoZXIgYWxnb3JpdGhtCisgKiBXSEFUIHNlbGVjdCB0aGUga2luZCBvZiBpbmZvcm1hdGlvbiByZXR1cm5lZDoKKyAqICBHQ1JZQ1RMX1RFU1RfQUxHTzoKKyAqCVJldHVybnMgMCB3aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorICoJYnVmZmVyIGFuZCBuYnl0ZXMgbXVzdCBiZSB6ZXJvLgorICogIEdDUllDVExfR0VUX0FTTk9JRDoKKyAqCVJldHVybiB0aGUgQVNOT0lEIG9mIHRoZSBhbGdvcml0aG0gaW4gYnVmZmVyLiBpZiBidWZmZXIgaXMgTlVMTCwgb25seQorICoJdGhlIHJlcXVpcmVkIGxlbmd0aCBpcyByZXR1cm5lZC4KKyAqICBHQ1JZQ1RMX1NFTEZURVNUCisgKiAgICAgIEhlbHBlciBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgLSBzaGFsbCBub3QgYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuCisgKgorICogTm90ZTogIEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBpbiBtb3N0IGNhc2VzIHVzZWQgdG8gcmV0dXJuIGFuCisgKiBpbnRlZ2VyIHZhbHVlLCB3ZSBjYW4gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBjYWxsZXIgdG8ganVzdCBsb29rIGF0CisgKiB0aGUgcmV0dXJuIHZhbHVlLiAgVGhlIGNhbGxlciB3aWxsIGluIGFsbCBjYXNlcyBjb25zdWx0IHRoZSB2YWx1ZQorICogYW5kIHRoZXJlYnkgZGV0ZWN0aW5nIHdoZXRoZXIgYSBlcnJvciBvY2N1cnJlZCBvciBub3QgKGkuZS4gd2hpbGUgY2hlY2tpbmcKKyAqIHRoZSBibG9jayBzaXplKQorICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsIHNpemVfdCAqbmJ5dGVzKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisKKyAgc3dpdGNoICh3aGF0KQorICAgIHsKKyAgICBjYXNlIEdDUllDVExfVEVTVF9BTEdPOgorICAgICAgaWYgKGJ1ZmZlciB8fCBuYnl0ZXMpCisJcmMgPSBHUEdfRVJSX0lOVl9BUkc7CisgICAgICBlbHNlCisJcmMgPSBjaGVja19kaWdlc3RfYWxnbyAoYWxnbyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9HRVRfQVNOT0lEOgorICAgICAgLyogV2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBhbGdvIGlzIGF2YWlsYWJsZSBiZWNhdXNlCisgICAgICAgICBtZF9hc25fb2lkIHdvdWxkIG90aGVyd2lzZSByYWlzZSBhbiBhc3NlcnRpb24uICovCisgICAgICByYyA9IGNoZWNrX2RpZ2VzdF9hbGdvIChhbGdvKTsKKyAgICAgIGlmICghcmMpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyIHVuc2lnbmVkICphc247CisgICAgICAgICAgc2l6ZV90IGFzbmxlbjsKKworICAgICAgICAgIGFzbiA9IG1kX2Fzbl9vaWQgKGFsZ28sICZhc25sZW4sIE5VTEwpOworICAgICAgICAgIGlmIChidWZmZXIgJiYgKCpuYnl0ZXMgPj0gYXNubGVuKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWVtY3B5IChidWZmZXIsIGFzbiwgYXNubGVuKTsKKyAgICAgICAgICAgICAgKm5ieXRlcyA9IGFzbmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghYnVmZmVyICYmIG5ieXRlcykKKyAgICAgICAgICAgICpuYnl0ZXMgPSBhc25sZW47CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgICAgIHJjID0gR1BHX0VSUl9UT09fU0hPUlQ7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX0FSRzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VMRlRFU1Q6CisgICAgICAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSByZWdyZXNzaW9uIHRlc3RzLiAgKi8KKyAgICAgIHJjID0gZ3BnX2Vycl9jb2RlIChfZ2NyeV9tZF9zZWxmdGVzdCAoYWxnbywgbmJ5dGVzPyAoaW50KSpuYnl0ZXMgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PUDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB2b2lkCittZF9zdGFydF9kZWJ1ZyAoIGdjcnlfbWRfaGRfdCBtZCwgY29uc3QgY2hhciAqc3VmZml4ICkKK3sKKyAgc3RhdGljIGludCBpZHg9MDsKKyAgY2hhciBidWZbNTBdOworCisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgcmV0dXJuOworCisgIGlmICggbWQtPmN0eC0+ZGVidWcgKQorICAgIHsKKyAgICAgIGxvZ19kZWJ1ZygiT29wczogbWQgZGVidWcgYWxyZWFkeSBzdGFydGVkXG4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGlkeCsrOworICBzbnByaW50ZiAoYnVmLCBESU0oYnVmKS0xLCAiZGJnbWQtJTA1ZC4lLjEwcyIsIGlkeCwgc3VmZml4ICk7CisgIG1kLT5jdHgtPmRlYnVnID0gZm9wZW4oYnVmLCAidyIpOworICBpZiAoICFtZC0+Y3R4LT5kZWJ1ZyApCisgICAgbG9nX2RlYnVnKCJtZCBkZWJ1ZzogY2FuJ3Qgb3BlbiAlc1xuIiwgYnVmICk7Cit9CisKKworc3RhdGljIHZvaWQKK21kX3N0b3BfZGVidWcoIGdjcnlfbWRfaGRfdCBtZCApCit7CisgIGlmICggbWQtPmN0eC0+ZGVidWcgKQorICAgIHsKKyAgICAgIGlmICggbWQtPmJ1ZnBvcyApCisgICAgICAgIG1kX3dyaXRlICggbWQsIE5VTEwsIDAgKTsKKyAgICAgIGZjbG9zZSAobWQtPmN0eC0+ZGVidWcpOworICAgICAgbWQtPmN0eC0+ZGVidWcgPSBOVUxMOworICAgIH0KKworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKKyAgeyAgLyogYSBrbHVkZ2UgdG8gcHVsbCBpbiB0aGUgX19tdWxkaTMgZm9yIFNvbGFyaXMgKi8KKyAgICB2b2xhdGlsZSB1MzIgYSA9ICh1MzIpKHVsb25nKW1kOworICAgIHZvbGF0aWxlIHU2NCBiID0gNDI7CisgICAgdm9sYXRpbGUgdTY0IGM7CisgICAgYyA9IGEgKiBiOworICAgICh2b2lkKWM7CisgIH0KKyNlbmRpZgorfQorCisKKworLyoKKyAqIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlnZXN0IGhhbmRsZS4KKyAqICBHQ1JZQ1RMX0lTX1NFQ1VSRToKKyAqCVJldHVybnMgMSB3aGVuIHRoZSBoYW5kbGUgd29ya3Mgb24gc2VjdXJlZCBtZW1vcnkKKyAqCW90aGVyd2lzZSAwIGlzIHJldHVybmVkLiAgVGhlcmUgaXMgbm8gZXJyb3IgcmV0dXJuLgorICogIEdDUllDVExfSVNfQUxHT19FTkFCTEVEOgorICogICAgIFJldHVybnMgMSBpZiB0aGUgYWxnbyBpcyBlbmFibGVkIGZvciB0aGF0IGhhbmRsZS4KKyAqICAgICBUaGUgYWxnbyBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgYWRkcmVzcyBvZiBhbiBpbnQuCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfbWRfaW5mbyAoZ2NyeV9tZF9oZF90IGgsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisKKyAgc3dpdGNoIChjbWQpCisgICAgeworICAgIGNhc2UgR0NSWUNUTF9JU19TRUNVUkU6CisgICAgICAqbmJ5dGVzID0gaC0+Y3R4LT5mbGFncy5zZWN1cmU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9JU19BTEdPX0VOQUJMRUQ6CisgICAgICB7CisJR2NyeURpZ2VzdEVudHJ5ICpyOworCWludCBhbGdvOworCisJaWYgKCAhYnVmZmVyIHx8IChuYnl0ZXMgJiYgKCpuYnl0ZXMgIT0gc2l6ZW9mIChpbnQpKSkpCisJICByYyA9IEdQR19FUlJfSU5WX0FSRzsKKwllbHNlCisJICB7CisJICAgIGFsZ28gPSAqKGludCopYnVmZmVyOworCisJICAgICpuYnl0ZXMgPSAwOworCSAgICBmb3Iocj1oLT5jdHgtPmxpc3Q7IHI7IHIgPSByLT5uZXh0ICkgeworCSAgICAgIGlmIChyLT5zcGVjLT5hbGdvID09IGFsZ28pCisJCXsKKwkJICAqbmJ5dGVzID0gMTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgZGVmYXVsdDoKKyAgICByYyA9IEdQR19FUlJfSU5WX09QOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIEV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21kX2luaXQgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCisKK2ludAorX2djcnlfbWRfaXNfc2VjdXJlIChnY3J5X21kX2hkX3QgYSkKK3sKKyAgc2l6ZV90IHZhbHVlOworCisgIGlmIChfZ2NyeV9tZF9pbmZvIChhLCBHQ1JZQ1RMX0lTX1NFQ1VSRSwgTlVMTCwgJnZhbHVlKSkKKyAgICB2YWx1ZSA9IDE7IC8qIEl0IHNlZW1zIHRvIGJlIGJldHRlciB0byBhc3N1bWUgc2VjdXJlIG1lbW9yeSBvbgorICAgICAgICAgICAgICAgICAgZXJyb3IuICovCisgIHJldHVybiB2YWx1ZTsKK30KKworCitpbnQKK19nY3J5X21kX2lzX2VuYWJsZWQgKGdjcnlfbWRfaGRfdCBhLCBpbnQgYWxnbykKK3sKKyAgc2l6ZV90IHZhbHVlOworCisgIHZhbHVlID0gc2l6ZW9mIGFsZ287CisgIGlmIChfZ2NyeV9tZF9pbmZvIChhLCBHQ1JZQ1RMX0lTX0FMR09fRU5BQkxFRCwgJmFsZ28sICZ2YWx1ZSkpCisgICAgdmFsdWUgPSAwOworICByZXR1cm4gdmFsdWU7Cit9CisKKworLyogUnVuIHRoZSBzZWxmdGVzdHMgZm9yIGRpZ2VzdCBhbGdvcml0aG0gQUxHTyB3aXRoIG9wdGlvbmFsIHJlcG9ydGluZworICAgZnVuY3Rpb24gUkVQT1JULiAgKi8KK2dwZ19lcnJvcl90CitfZ2NyeV9tZF9zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlYyA9IDA7CisgIGdjcnlfbWRfc3BlY190ICpzcGVjOworCisgIHNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisgIGlmIChzcGVjICYmICFzcGVjLT5mbGFncy5kaXNhYmxlZCAmJiBzcGVjLT5zZWxmdGVzdCkKKyAgICBlYyA9IHNwZWMtPnNlbGZ0ZXN0IChhbGdvLCBleHRlbmRlZCwgcmVwb3J0KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGVjID0gc3BlYy0+c2VsZnRlc3Q/IEdQR19FUlJfRElHRVNUX0FMR08gOiBHUEdfRVJSX05PVF9JTVBMRU1FTlRFRDsKKyAgICAgIGlmIChyZXBvcnQpCisgICAgICAgIHJlcG9ydCAoImRpZ2VzdCIsIGFsZ28sICJtb2R1bGUiLAorICAgICAgICAgICAgICAgIChzcGVjICYmICFzcGVjLT5mbGFncy5kaXNhYmxlZCk/CisgICAgICAgICAgICAgICAgIm5vIHNlbGZ0ZXN0IGF2YWlsYWJsZSIgOgorICAgICAgICAgICAgICAgIHNwZWM/ICJhbGdvcml0aG0gZGlzYWJsZWQiIDogImFsZ29yaXRobSBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoZWMpOworfQpkaWZmIC0tZ2l0IGEvY2lwaGVyL21kNC5jIGIvY2lwaGVyL21kNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGFlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvbWQ0LmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qIG1kNC5jIC0gTUQ0IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobQorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBCYXNlZCBvbiBtZDUuYyBpbiBsaWJnY3J5cHQsIGJ1dCByZXdyaXR0ZW4gdG8gY29tcHV0ZSBtZDQgY2hlY2tzdW1zCisgKiB1c2luZyBhIHB1YmxpYyBkb21haW4gbWQ0IGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjb21tZW50czoKKyAqCisgKiBNb2RpZmllZCBieSBXZWkgRGFpIGZyb20gQW5kcmV3IE0uIEt1Y2hsaW5nJ3MgbWQ0LmMKKyAqIFRoZSBvcmlnaW5hbCBjb2RlIGFuZCBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKgorICogVGhpcyBpcyB0aGUgb3JpZ2luYWwgaW50cm9kdWN0b3J5IGNvbW1lbnQ6CisgKgorICogIG1kNC5jIDogTUQ0IGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIFBhcnQgb2YgdGhlIFB5dGhvbiBDcnlwdG9ncmFwaHkgVG9vbGtpdCwgdmVyc2lvbiAxLjEKKyAqCisgKiBEaXN0cmlidXRlIGFuZCB1c2UgZnJlZWx5OyB0aGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIGZ1cnRoZXIKKyAqIGRpc3NlbWluYXRpb24gYW5kIHVzYWdlIGV4Y2VwdCB0aG9zZSBpbXBvc2VkIGJ5IHRoZSBsYXdzIG9mIHlvdXIKKyAqIGNvdW50cnkgb2YgcmVzaWRlbmNlLgorICoKKyAqLworCisvKiBNRDQgdGVzdCBzdWl0ZToKKyAqIE1ENCAoIiIpID0gMzFkNmNmZTBkMTZhZTkzMWI3M2M1OWQ3ZTBjMDg5YzAKKyAqIE1ENCAoImEiKSA9IGJkZTUyY2IzMWRlMzNlNDYyNDVlMDVmYmRiZDZmYjI0CisgKiBNRDQgKCJhYmMiKSA9IGE0NDgwMTdhYWYyMWQ4NTI1ZmMxMGFlODdhYTY3MjlkCisgKiBNRDQgKCJtZXNzYWdlIGRpZ2VzdCIpID0gZDkxMzBhODE2NDU0OWZlODE4ODc0ODA2ZTFjNzAxNGIKKyAqIE1ENCAoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikgPSBkNzllMWMzMDhhYTViYmNkZWVhOGVkNjNkZjQxMmRhOQorICogTUQ0ICgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiKSA9CisgKiAwNDNmODU4MmYyNDFkYjM1MWNlNjI3ZTE1M2U3ZjBlNAorICogTUQ0ICgiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2CisgKiA3ODkwMTIzNDU2Nzg5MCIpID0gZTMzYjRkZGM5YzM4ZjIxOTljM2U3YjE2NGZjYzA1MzYKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBnY3J5X21kX2Jsb2NrX2N0eF90IGJjdHg7CisgICAgdTMyIEEsQixDLEQ7CSAgLyogY2hhaW5pbmcgdmFyaWFibGVzICovCit9IE1ENF9DT05URVhUOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKCB2b2lkICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICk7CisKK3N0YXRpYyB2b2lkCittZDRfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBNRDRfQ09OVEVYVCAqY3R4ID0gY29udGV4dDsKKworICAodm9pZClmbGFnczsKKworICBjdHgtPkEgPSAweDY3NDUyMzAxOworICBjdHgtPkIgPSAweGVmY2RhYjg5OworICBjdHgtPkMgPSAweDk4YmFkY2ZlOworICBjdHgtPkQgPSAweDEwMzI1NDc2OworCisgIGN0eC0+YmN0eC5uYmxvY2tzID0gMDsKKyAgY3R4LT5iY3R4Lm5ibG9ja3NfaGlnaCA9IDA7CisgIGN0eC0+YmN0eC5jb3VudCA9IDA7CisgIGN0eC0+YmN0eC5ibG9ja3NpemUgPSA2NDsKKyAgY3R4LT5iY3R4LmJ3cml0ZSA9IHRyYW5zZm9ybTsKK30KKworI2RlZmluZSBGKHgsIHksIHopICgoeikgXiAoKHgpICYgKCh5KSBeICh6KSkpKQorI2RlZmluZSBHKHgsIHksIHopICgoKHgpICYgKHkpKSB8ICgoeCkgJiAoeikpIHwgKCh5KSAmICh6KSkpCisjZGVmaW5lIEgoeCwgeSwgeikgKCh4KSBeICh5KSBeICh6KSkKKworCisvKioqKioqKioqKioqKioqKgorICogdHJhbnNmb3JtIDY0IGJ5dGVzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAoIHZvaWQgKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKQoreworICBNRDRfQ09OVEVYVCAqY3R4ID0gYzsKKyAgdTMyIGluWzE2XTsKKyAgcmVnaXN0ZXIgdTMyIEEgPSBjdHgtPkE7CisgIHJlZ2lzdGVyIHUzMiBCID0gY3R4LT5COworICByZWdpc3RlciB1MzIgQyA9IGN0eC0+QzsKKyAgcmVnaXN0ZXIgdTMyIEQgPSBjdHgtPkQ7CisgIGludCBpOworCisgIGZvciAoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgaW5baV0gPSBidWZfZ2V0X2xlMzIoZGF0YSArIGkgKiA0KTsKKworICAvKiBSb3VuZCAxLiAgKi8KKyNkZWZpbmUgZnVuY3Rpb24oYSxiLGMsZCxrLHMpIGE9cm9sKGErRihiLGMsZCkraW5ba10scyk7CisgIGZ1bmN0aW9uKEEsQixDLEQsIDAsIDMpOworICBmdW5jdGlvbihELEEsQixDLCAxLCA3KTsKKyAgZnVuY3Rpb24oQyxELEEsQiwgMiwxMSk7CisgIGZ1bmN0aW9uKEIsQyxELEEsIDMsMTkpOworICBmdW5jdGlvbihBLEIsQyxELCA0LCAzKTsKKyAgZnVuY3Rpb24oRCxBLEIsQywgNSwgNyk7CisgIGZ1bmN0aW9uKEMsRCxBLEIsIDYsMTEpOworICBmdW5jdGlvbihCLEMsRCxBLCA3LDE5KTsKKyAgZnVuY3Rpb24oQSxCLEMsRCwgOCwgMyk7CisgIGZ1bmN0aW9uKEQsQSxCLEMsIDksIDcpOworICBmdW5jdGlvbihDLEQsQSxCLDEwLDExKTsKKyAgZnVuY3Rpb24oQixDLEQsQSwxMSwxOSk7CisgIGZ1bmN0aW9uKEEsQixDLEQsMTIsIDMpOworICBmdW5jdGlvbihELEEsQixDLDEzLCA3KTsKKyAgZnVuY3Rpb24oQyxELEEsQiwxNCwxMSk7CisgIGZ1bmN0aW9uKEIsQyxELEEsMTUsMTkpOworCisjdW5kZWYgZnVuY3Rpb24KKworICAvKiBSb3VuZCAyLiAgKi8KKyNkZWZpbmUgZnVuY3Rpb24oYSxiLGMsZCxrLHMpIGE9cm9sKGErRyhiLGMsZCkraW5ba10rMHg1YTgyNzk5OSxzKTsKKworICBmdW5jdGlvbihBLEIsQyxELCAwLCAzKTsKKyAgZnVuY3Rpb24oRCxBLEIsQywgNCwgNSk7CisgIGZ1bmN0aW9uKEMsRCxBLEIsIDgsIDkpOworICBmdW5jdGlvbihCLEMsRCxBLDEyLDEzKTsKKyAgZnVuY3Rpb24oQSxCLEMsRCwgMSwgMyk7CisgIGZ1bmN0aW9uKEQsQSxCLEMsIDUsIDUpOworICBmdW5jdGlvbihDLEQsQSxCLCA5LCA5KTsKKyAgZnVuY3Rpb24oQixDLEQsQSwxMywxMyk7CisgIGZ1bmN0aW9uKEEsQixDLEQsIDIsIDMpOworICBmdW5jdGlvbihELEEsQixDLCA2LCA1KTsKKyAgZnVuY3Rpb24oQyxELEEsQiwxMCwgOSk7CisgIGZ1bmN0aW9uKEIsQyxELEEsMTQsMTMpOworICBmdW5jdGlvbihBLEIsQyxELCAzLCAzKTsKKyAgZnVuY3Rpb24oRCxBLEIsQywgNywgNSk7CisgIGZ1bmN0aW9uKEMsRCxBLEIsMTEsIDkpOworICBmdW5jdGlvbihCLEMsRCxBLDE1LDEzKTsKKworI3VuZGVmIGZ1bmN0aW9uCisKKyAgLyogUm91bmQgMy4gICovCisjZGVmaW5lIGZ1bmN0aW9uKGEsYixjLGQsayxzKSBhPXJvbChhK0goYixjLGQpK2luW2tdKzB4NmVkOWViYTEscyk7CisKKyAgZnVuY3Rpb24oQSxCLEMsRCwgMCwgMyk7CisgIGZ1bmN0aW9uKEQsQSxCLEMsIDgsIDkpOworICBmdW5jdGlvbihDLEQsQSxCLCA0LDExKTsKKyAgZnVuY3Rpb24oQixDLEQsQSwxMiwxNSk7CisgIGZ1bmN0aW9uKEEsQixDLEQsIDIsIDMpOworICBmdW5jdGlvbihELEEsQixDLDEwLCA5KTsKKyAgZnVuY3Rpb24oQyxELEEsQiwgNiwxMSk7CisgIGZ1bmN0aW9uKEIsQyxELEEsMTQsMTUpOworICBmdW5jdGlvbihBLEIsQyxELCAxLCAzKTsKKyAgZnVuY3Rpb24oRCxBLEIsQywgOSwgOSk7CisgIGZ1bmN0aW9uKEMsRCxBLEIsIDUsMTEpOworICBmdW5jdGlvbihCLEMsRCxBLDEzLDE1KTsKKyAgZnVuY3Rpb24oQSxCLEMsRCwgMywgMyk7CisgIGZ1bmN0aW9uKEQsQSxCLEMsMTEsIDkpOworICBmdW5jdGlvbihDLEQsQSxCLCA3LDExKTsKKyAgZnVuY3Rpb24oQixDLEQsQSwxNSwxNSk7CisKKworICAvKiBQdXQgY2hlY2tzdW0gaW4gY29udGV4dCBnaXZlbiBhcyBhcmd1bWVudC4gICovCisgIGN0eC0+QSArPSBBOworICBjdHgtPkIgKz0gQjsKKyAgY3R4LT5DICs9IEM7CisgIGN0eC0+RCArPSBEOworCisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyA4MCs2KnNpemVvZih2b2lkKik7Cit9CisKKworCisvKiBUaGUgcm91dGluZSBmaW5hbCB0ZXJtaW5hdGVzIHRoZSBtZXNzYWdlLWRpZ2VzdCBjb21wdXRhdGlvbiBhbmQKKyAqIGVuZHMgd2l0aCB0aGUgZGVzaXJlZCBtZXNzYWdlIGRpZ2VzdCBpbiBtZENvbnRleHQtPmRpZ2VzdFswLi4uMTVdLgorICogVGhlIGhhbmRsZSBpcyBwcmVwYXJlZCBmb3IgYSBuZXcgTUQ0IGN5Y2xlLgorICogUmV0dXJucyAxNiBieXRlcyByZXByZXNlbnRpbmcgdGhlIGRpZ2VzdC4KKyAqLworCitzdGF0aWMgdm9pZAorbWQ0X2ZpbmFsKCB2b2lkICpjb250ZXh0ICkKK3sKKyAgTUQ0X0NPTlRFWFQgKmhkID0gY29udGV4dDsKKyAgdTMyIHQsIHRoLCBtc2IsIGxzYjsKKyAgYnl0ZSAqcDsKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgX2djcnlfbWRfYmxvY2tfd3JpdGUoaGQsIE5VTEwsIDApOyAvKiBmbHVzaCAqLzsKKworICB0ID0gaGQtPmJjdHgubmJsb2NrczsKKyAgaWYgKHNpemVvZiB0ID09IHNpemVvZiBoZC0+YmN0eC5uYmxvY2tzKQorICAgIHRoID0gaGQtPmJjdHgubmJsb2Nrc19oaWdoOworICBlbHNlCisgICAgdGggPSBoZC0+YmN0eC5uYmxvY2tzID4+IDMyOworCisgIC8qIG11bHRpcGx5IGJ5IDY0IHRvIG1ha2UgYSBieXRlIGNvdW50ICovCisgIGxzYiA9IHQgPDwgNjsKKyAgbXNiID0gKHRoIDw8IDYpIHwgKHQgPj4gMjYpOworICAvKiBhZGQgdGhlIGNvdW50ICovCisgIHQgPSBsc2I7CisgIGlmKCAobHNiICs9IGhkLT5iY3R4LmNvdW50KSA8IHQgKQorICAgIG1zYisrOworICAvKiBtdWx0aXBseSBieSA4IHRvIG1ha2UgYSBiaXQgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgbHNiIDw8PSAzOworICBtc2IgPDw9IDM7CisgIG1zYiB8PSB0ID4+IDI5OworCisgIGlmKCBoZC0+YmN0eC5jb3VudCA8IDU2ICkgIC8qIGVub3VnaCByb29tICovCisgICAgeworICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMHg4MDsgLyogcGFkICovCisgICAgICB3aGlsZSggaGQtPmJjdHguY291bnQgPCA1NiApCisgICAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDA7ICAvKiBwYWQgKi8KKyAgICB9CisgIGVsc2UgLyogbmVlZCBvbmUgZXh0cmEgYmxvY2sgKi8KKyAgICB7CisgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAweDgwOyAvKiBwYWQgY2hhcmFjdGVyICovCisgICAgICB3aGlsZSggaGQtPmJjdHguY291bnQgPCA2NCApCisgICAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDA7CisgICAgICBfZ2NyeV9tZF9ibG9ja193cml0ZShoZCwgTlVMTCwgMCk7ICAvKiBmbHVzaCAqLzsKKyAgICAgIG1lbXNldChoZC0+YmN0eC5idWYsIDAsIDU2ICk7IC8qIGZpbGwgbmV4dCBibG9jayB3aXRoIHplcm9lcyAqLworICAgIH0KKyAgLyogYXBwZW5kIHRoZSA2NCBiaXQgY291bnQgKi8KKyAgYnVmX3B1dF9sZTMyKGhkLT5iY3R4LmJ1ZiArIDU2LCBsc2IpOworICBidWZfcHV0X2xlMzIoaGQtPmJjdHguYnVmICsgNjAsIG1zYik7CisgIGJ1cm4gPSB0cmFuc2Zvcm0oIGhkLCBoZC0+YmN0eC5idWYgKTsKKyAgX2djcnlfYnVybl9zdGFjayAoYnVybik7CisKKyAgcCA9IGhkLT5iY3R4LmJ1ZjsKKyNkZWZpbmUgWChhKSBkbyB7ICoodTMyKilwID0gbGVfYnN3YXAzMigoKmhkKS5hKSA7IHAgKz0gNDsgfSB3aGlsZSgwKQorICBYKEEpOworICBYKEIpOworICBYKEMpOworICBYKEQpOworI3VuZGVmIFgKKworfQorCitzdGF0aWMgYnl0ZSAqCittZDRfcmVhZCAodm9pZCAqY29udGV4dCkKK3sKKyAgTUQ0X0NPTlRFWFQgKmhkID0gY29udGV4dDsKKyAgcmV0dXJuIGhkLT5iY3R4LmJ1ZjsKK30KKworc3RhdGljIGJ5dGUgYXNuWzE4XSA9IC8qIE9iamVjdCBJRCBpcyAxLjIuODQwLjExMzU0OS4yLjQgKi8KKyAgeyAweDMwLCAweDIwLCAweDMwLCAweDBjLCAweDA2LCAweDA4LCAweDJhLCAweDg2LDB4NDgsCisgICAgMHg4NiwgMHhmNywgMHgwZCwgMHgwMiwgMHgwNCwgMHgwNSwgMHgwMCwgMHgwNCwgMHgxMCB9OworCitzdGF0aWMgZ2NyeV9tZF9vaWRfc3BlY190IG9pZF9zcGVjX21kNFtdID0KKyAgeworICAgIC8qIGlzby5tZW1iZXItYm9keS51cy5yc2Fkc2kuZGlnZXN0QWxnb3JpdGhtLm1kNCAqLworICAgIHsgIjEuMi44NDAuMTEzNTQ5LjIuNCIgfSwKKyAgICB7IE5VTEwgfSwKKyAgfTsKKworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfbWQ0ID0KKyAgeworICAgIEdDUllfTURfTUQ0LCB7MCwgMH0sCisgICAgIk1ENCIsIGFzbiwgRElNIChhc24pLCBvaWRfc3BlY19tZDQsMTYsCisgICAgbWQ0X2luaXQsIF9nY3J5X21kX2Jsb2NrX3dyaXRlLCBtZDRfZmluYWwsIG1kNF9yZWFkLAorICAgIHNpemVvZiAoTUQ0X0NPTlRFWFQpCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvbWQ1LmMgYi9jaXBoZXIvbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxODdjOQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9tZDUuYwpAQCAtMCwwICsxLDMwMiBAQAorLyogbWQ1LmMgLSBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NiwxOTk4LDE5OTksMjAwMSwyMDAyLAorICogICAgICAgICAgICAgICAyMDAzICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogQWNjb3JkaW5nIHRvIHRoZSBkZWZpbml0aW9uIG9mIE1ENSBpbiBSRkMgMTMyMSBmcm9tIEFwcmlsIDE5OTIuCisgKiBOT1RFOiBUaGlzIGlzICpub3QqIHRoZSBzYW1lIGZpbGUgYXMgdGhlIG9uZSBmcm9tIGdsaWJjLgorICogV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisgKiBoZWF2aWx5IG1vZGlmaWVkIGZvciBHbnVQRyBieSBXZXJuZXIgS29jaCA8d2tAZ251cGcub3JnPgorICovCisKKy8qIFRlc3QgdmFsdWVzOgorICogIiIgICAgICAgICAgICAgICAgICBENCAxRCA4QyBEOSA4RiAwMCBCMiAwNCAgRTkgODAgMDkgOTggRUMgRjggNDIgN0UKKyAqICJhIiAgICAgICAgICAgICAgICAgMEMgQzEgNzUgQjkgQzAgRjEgQjYgQTggIDMxIEMzIDk5IEUyIDY5IDc3IDI2IDYxCisgKiAiYWJjICAgICAgICAgICAgICAgIDkwIDAxIDUwIDk4IDNDIEQyIDRGIEIwICBENiA5NiAzRiA3RCAyOCBFMSA3RiA3MgorICogIm1lc3NhZ2UgZGlnZXN0IiAgICBGOSA2QiA2OSA3RCA3QyBCNyA5MyA4RCAgNTIgNUEgMkYgMzEgQUEgRjEgNjEgRDAKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBnY3J5X21kX2Jsb2NrX2N0eF90IGJjdHg7CisgICAgdTMyIEEsQixDLEQ7CSAgLyogY2hhaW5pbmcgdmFyaWFibGVzICovCit9IE1ENV9DT05URVhUOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKTsKKworc3RhdGljIHZvaWQKK21kNV9pbml0KCB2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIE1ENV9DT05URVhUICpjdHggPSBjb250ZXh0OworCisgICh2b2lkKWZsYWdzOworCisgIGN0eC0+QSA9IDB4Njc0NTIzMDE7CisgIGN0eC0+QiA9IDB4ZWZjZGFiODk7CisgIGN0eC0+QyA9IDB4OThiYWRjZmU7CisgIGN0eC0+RCA9IDB4MTAzMjU0NzY7CisKKyAgY3R4LT5iY3R4Lm5ibG9ja3MgPSAwOworICBjdHgtPmJjdHgubmJsb2Nrc19oaWdoID0gMDsKKyAgY3R4LT5iY3R4LmNvdW50ID0gMDsKKyAgY3R4LT5iY3R4LmJsb2Nrc2l6ZSA9IDY0OworICBjdHgtPmJjdHguYndyaXRlID0gdHJhbnNmb3JtOworfQorCisKKy8qIFRoZXNlIGFyZSB0aGUgZm91ciBmdW5jdGlvbnMgdXNlZCBpbiB0aGUgZm91ciBzdGVwcyBvZiB0aGUgTUQ1IGFsZ29yaXRobQorICAgYW5kIGRlZmluZWQgaW4gdGhlIFJGQyAxMzIxLiAgVGhlIGZpcnN0IGZ1bmN0aW9uIGlzIGEgbGl0dGxlIGJpdCBvcHRpbWl6ZWQKKyAgIChhcyBmb3VuZCBpbiBDb2xpbiBQbHVtYnMgcHVibGljIGRvbWFpbiBpbXBsZW1lbnRhdGlvbikuICAqLworLyogI2RlZmluZSBGRihiLCBjLCBkKSAoKGIgJiBjKSB8ICh+YiAmIGQpKSAqLworI2RlZmluZSBGRihiLCBjLCBkKSAoZCBeIChiICYgKGMgXiBkKSkpCisjZGVmaW5lIEZHKGIsIGMsIGQpIEZGIChkLCBiLCBjKQorI2RlZmluZSBGSChiLCBjLCBkKSAoYiBeIGMgXiBkKQorI2RlZmluZSBGSShiLCBjLCBkKSAoYyBeIChiIHwgfmQpKQorCisKKy8qKioqKioqKioqKioqKioqCisgKiB0cmFuc2Zvcm0gbio2NCBieXRlcworICovCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKCB2b2lkICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgTUQ1X0NPTlRFWFQgKmN0eCA9IGM7CisgIHUzMiBjb3JyZWN0X3dvcmRzWzE2XTsKKyAgcmVnaXN0ZXIgdTMyIEEgPSBjdHgtPkE7CisgIHJlZ2lzdGVyIHUzMiBCID0gY3R4LT5COworICByZWdpc3RlciB1MzIgQyA9IGN0eC0+QzsKKyAgcmVnaXN0ZXIgdTMyIEQgPSBjdHgtPkQ7CisgIHUzMiAqY3dwID0gY29ycmVjdF93b3JkczsKKyAgaW50IGk7CisKKyAgZm9yICggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICBjb3JyZWN0X3dvcmRzW2ldID0gYnVmX2dldF9sZTMyKGRhdGEgKyBpICogNCk7CisKKyNkZWZpbmUgT1AoYSwgYiwgYywgZCwgcywgVCkgXAorICBkbwkJCSAgICAgICAgIAkgICBcCisgICAgewkJCQkJICAgXAorICAgICAgYSArPSBGRiAoYiwgYywgZCkgKyAoKmN3cCsrKSArIFQ7ICAgIFwKKyAgICAgIGEgPSByb2woYSwgcyk7CQkJICAgXAorICAgICAgYSArPSBiOwkJCQkgICBcCisgICAgfQkJCQkJICAgXAorICB3aGlsZSAoMCkKKworICAvKiBCZWZvcmUgd2Ugc3RhcnQsIG9uZSB3b3JkIGFib3V0IHRoZSBzdHJhbmdlIGNvbnN0YW50cy4KKyAgICAgVGhleSBhcmUgZGVmaW5lZCBpbiBSRkMgMTMyMSBhcworCisgICAgIFRbaV0gPSAoaW50KSAoNDI5NDk2NzI5Ni4wICogZmFicyAoc2luIChpKSkpLCBpPTEuLjY0CisgICovCisKKyAgLyogUm91bmQgMS4gICovCisgIE9QIChBLCBCLCBDLCBELCAgNywgMHhkNzZhYTQ3OCk7CisgIE9QIChELCBBLCBCLCBDLCAxMiwgMHhlOGM3Yjc1Nik7CisgIE9QIChDLCBELCBBLCBCLCAxNywgMHgyNDIwNzBkYik7CisgIE9QIChCLCBDLCBELCBBLCAyMiwgMHhjMWJkY2VlZSk7CisgIE9QIChBLCBCLCBDLCBELCAgNywgMHhmNTdjMGZhZik7CisgIE9QIChELCBBLCBCLCBDLCAxMiwgMHg0Nzg3YzYyYSk7CisgIE9QIChDLCBELCBBLCBCLCAxNywgMHhhODMwNDYxMyk7CisgIE9QIChCLCBDLCBELCBBLCAyMiwgMHhmZDQ2OTUwMSk7CisgIE9QIChBLCBCLCBDLCBELCAgNywgMHg2OTgwOThkOCk7CisgIE9QIChELCBBLCBCLCBDLCAxMiwgMHg4YjQ0ZjdhZik7CisgIE9QIChDLCBELCBBLCBCLCAxNywgMHhmZmZmNWJiMSk7CisgIE9QIChCLCBDLCBELCBBLCAyMiwgMHg4OTVjZDdiZSk7CisgIE9QIChBLCBCLCBDLCBELCAgNywgMHg2YjkwMTEyMik7CisgIE9QIChELCBBLCBCLCBDLCAxMiwgMHhmZDk4NzE5Myk7CisgIE9QIChDLCBELCBBLCBCLCAxNywgMHhhNjc5NDM4ZSk7CisgIE9QIChCLCBDLCBELCBBLCAyMiwgMHg0OWI0MDgyMSk7CisKKyN1bmRlZiBPUAorI2RlZmluZSBPUChmLCBhLCBiLCBjLCBkLCBrLCBzLCBUKSAgXAorICAgIGRvCQkJCQkJCQkgICAgICBcCisgICAgICB7IAkJCQkJCQkgICAgICBcCisJYSArPSBmIChiLCBjLCBkKSArIGNvcnJlY3Rfd29yZHNba10gKyBUOwkJICAgICAgXAorCWEgPSByb2woYSwgcyk7CQkJCQkJICAgICAgXAorCWEgKz0gYjsgCQkJCQkJICAgICAgXAorICAgICAgfSAJCQkJCQkJICAgICAgXAorICAgIHdoaWxlICgwKQorCisgIC8qIFJvdW5kIDIuICAqLworICBPUCAoRkcsIEEsIEIsIEMsIEQsICAxLCAgNSwgMHhmNjFlMjU2Mik7CisgIE9QIChGRywgRCwgQSwgQiwgQywgIDYsICA5LCAweGMwNDBiMzQwKTsKKyAgT1AgKEZHLCBDLCBELCBBLCBCLCAxMSwgMTQsIDB4MjY1ZTVhNTEpOworICBPUCAoRkcsIEIsIEMsIEQsIEEsICAwLCAyMCwgMHhlOWI2YzdhYSk7CisgIE9QIChGRywgQSwgQiwgQywgRCwgIDUsICA1LCAweGQ2MmYxMDVkKTsKKyAgT1AgKEZHLCBELCBBLCBCLCBDLCAxMCwgIDksIDB4MDI0NDE0NTMpOworICBPUCAoRkcsIEMsIEQsIEEsIEIsIDE1LCAxNCwgMHhkOGExZTY4MSk7CisgIE9QIChGRywgQiwgQywgRCwgQSwgIDQsIDIwLCAweGU3ZDNmYmM4KTsKKyAgT1AgKEZHLCBBLCBCLCBDLCBELCAgOSwgIDUsIDB4MjFlMWNkZTYpOworICBPUCAoRkcsIEQsIEEsIEIsIEMsIDE0LCAgOSwgMHhjMzM3MDdkNik7CisgIE9QIChGRywgQywgRCwgQSwgQiwgIDMsIDE0LCAweGY0ZDUwZDg3KTsKKyAgT1AgKEZHLCBCLCBDLCBELCBBLCAgOCwgMjAsIDB4NDU1YTE0ZWQpOworICBPUCAoRkcsIEEsIEIsIEMsIEQsIDEzLCAgNSwgMHhhOWUzZTkwNSk7CisgIE9QIChGRywgRCwgQSwgQiwgQywgIDIsICA5LCAweGZjZWZhM2Y4KTsKKyAgT1AgKEZHLCBDLCBELCBBLCBCLCAgNywgMTQsIDB4Njc2ZjAyZDkpOworICBPUCAoRkcsIEIsIEMsIEQsIEEsIDEyLCAyMCwgMHg4ZDJhNGM4YSk7CisKKyAgLyogUm91bmQgMy4gICovCisgIE9QIChGSCwgQSwgQiwgQywgRCwgIDUsICA0LCAweGZmZmEzOTQyKTsKKyAgT1AgKEZILCBELCBBLCBCLCBDLCAgOCwgMTEsIDB4ODc3MWY2ODEpOworICBPUCAoRkgsIEMsIEQsIEEsIEIsIDExLCAxNiwgMHg2ZDlkNjEyMik7CisgIE9QIChGSCwgQiwgQywgRCwgQSwgMTQsIDIzLCAweGZkZTUzODBjKTsKKyAgT1AgKEZILCBBLCBCLCBDLCBELCAgMSwgIDQsIDB4YTRiZWVhNDQpOworICBPUCAoRkgsIEQsIEEsIEIsIEMsICA0LCAxMSwgMHg0YmRlY2ZhOSk7CisgIE9QIChGSCwgQywgRCwgQSwgQiwgIDcsIDE2LCAweGY2YmI0YjYwKTsKKyAgT1AgKEZILCBCLCBDLCBELCBBLCAxMCwgMjMsIDB4YmViZmJjNzApOworICBPUCAoRkgsIEEsIEIsIEMsIEQsIDEzLCAgNCwgMHgyODliN2VjNik7CisgIE9QIChGSCwgRCwgQSwgQiwgQywgIDAsIDExLCAweGVhYTEyN2ZhKTsKKyAgT1AgKEZILCBDLCBELCBBLCBCLCAgMywgMTYsIDB4ZDRlZjMwODUpOworICBPUCAoRkgsIEIsIEMsIEQsIEEsICA2LCAyMywgMHgwNDg4MWQwNSk7CisgIE9QIChGSCwgQSwgQiwgQywgRCwgIDksICA0LCAweGQ5ZDRkMDM5KTsKKyAgT1AgKEZILCBELCBBLCBCLCBDLCAxMiwgMTEsIDB4ZTZkYjk5ZTUpOworICBPUCAoRkgsIEMsIEQsIEEsIEIsIDE1LCAxNiwgMHgxZmEyN2NmOCk7CisgIE9QIChGSCwgQiwgQywgRCwgQSwgIDIsIDIzLCAweGM0YWM1NjY1KTsKKworICAvKiBSb3VuZCA0LiAgKi8KKyAgT1AgKEZJLCBBLCBCLCBDLCBELCAgMCwgIDYsIDB4ZjQyOTIyNDQpOworICBPUCAoRkksIEQsIEEsIEIsIEMsICA3LCAxMCwgMHg0MzJhZmY5Nyk7CisgIE9QIChGSSwgQywgRCwgQSwgQiwgMTQsIDE1LCAweGFiOTQyM2E3KTsKKyAgT1AgKEZJLCBCLCBDLCBELCBBLCAgNSwgMjEsIDB4ZmM5M2EwMzkpOworICBPUCAoRkksIEEsIEIsIEMsIEQsIDEyLCAgNiwgMHg2NTViNTljMyk7CisgIE9QIChGSSwgRCwgQSwgQiwgQywgIDMsIDEwLCAweDhmMGNjYzkyKTsKKyAgT1AgKEZJLCBDLCBELCBBLCBCLCAxMCwgMTUsIDB4ZmZlZmY0N2QpOworICBPUCAoRkksIEIsIEMsIEQsIEEsICAxLCAyMSwgMHg4NTg0NWRkMSk7CisgIE9QIChGSSwgQSwgQiwgQywgRCwgIDgsICA2LCAweDZmYTg3ZTRmKTsKKyAgT1AgKEZJLCBELCBBLCBCLCBDLCAxNSwgMTAsIDB4ZmUyY2U2ZTApOworICBPUCAoRkksIEMsIEQsIEEsIEIsICA2LCAxNSwgMHhhMzAxNDMxNCk7CisgIE9QIChGSSwgQiwgQywgRCwgQSwgMTMsIDIxLCAweDRlMDgxMWExKTsKKyAgT1AgKEZJLCBBLCBCLCBDLCBELCAgNCwgIDYsIDB4Zjc1MzdlODIpOworICBPUCAoRkksIEQsIEEsIEIsIEMsIDExLCAxMCwgMHhiZDNhZjIzNSk7CisgIE9QIChGSSwgQywgRCwgQSwgQiwgIDIsIDE1LCAweDJhZDdkMmJiKTsKKyAgT1AgKEZJLCBCLCBDLCBELCBBLCAgOSwgMjEsIDB4ZWI4NmQzOTEpOworCisgIC8qIFB1dCBjaGVja3N1bSBpbiBjb250ZXh0IGdpdmVuIGFzIGFyZ3VtZW50LiAgKi8KKyAgY3R4LT5BICs9IEE7CisgIGN0eC0+QiArPSBCOworICBjdHgtPkMgKz0gQzsKKyAgY3R4LT5EICs9IEQ7CisKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovIDgwKzYqc2l6ZW9mKHZvaWQqKTsKK30KKworCisKKy8qIFRoZSByb3V0aW5lIGZpbmFsIHRlcm1pbmF0ZXMgdGhlIG1lc3NhZ2UtZGlnZXN0IGNvbXB1dGF0aW9uIGFuZAorICogZW5kcyB3aXRoIHRoZSBkZXNpcmVkIG1lc3NhZ2UgZGlnZXN0IGluIG1kQ29udGV4dC0+ZGlnZXN0WzAuLi4xNV0uCisgKiBUaGUgaGFuZGxlIGlzIHByZXBhcmVkIGZvciBhIG5ldyBNRDUgY3ljbGUuCisgKiBSZXR1cm5zIDE2IGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgZGlnZXN0LgorICovCisKK3N0YXRpYyB2b2lkCittZDVfZmluYWwoIHZvaWQgKmNvbnRleHQpCit7CisgIE1ENV9DT05URVhUICpoZCA9IGNvbnRleHQ7CisgIHUzMiB0LCB0aCwgbXNiLCBsc2I7CisgIGJ5dGUgKnA7CisgIHVuc2lnbmVkIGludCBidXJuOworCisgIF9nY3J5X21kX2Jsb2NrX3dyaXRlKGhkLCBOVUxMLCAwKTsgLyogZmx1c2ggKi87CisKKyAgdCA9IGhkLT5iY3R4Lm5ibG9ja3M7CisgIGlmIChzaXplb2YgdCA9PSBzaXplb2YgaGQtPmJjdHgubmJsb2NrcykKKyAgICB0aCA9IGhkLT5iY3R4Lm5ibG9ja3NfaGlnaDsKKyAgZWxzZQorICAgIHRoID0gaGQtPmJjdHgubmJsb2NrcyA+PiAzMjsKKworICAvKiBtdWx0aXBseSBieSA2NCB0byBtYWtlIGEgYnl0ZSBjb3VudCAqLworICBsc2IgPSB0IDw8IDY7CisgIG1zYiA9ICh0aCA8PCA2KSB8ICh0ID4+IDI2KTsKKyAgLyogYWRkIHRoZSBjb3VudCAqLworICB0ID0gbHNiOworICBpZiggKGxzYiArPSBoZC0+YmN0eC5jb3VudCkgPCB0ICkKKyAgICBtc2IrKzsKKyAgLyogbXVsdGlwbHkgYnkgOCB0byBtYWtlIGEgYml0IGNvdW50ICovCisgIHQgPSBsc2I7CisgIGxzYiA8PD0gMzsKKyAgbXNiIDw8PSAzOworICBtc2IgfD0gdCA+PiAyOTsKKworICBpZiggaGQtPmJjdHguY291bnQgPCA1NiApICAvKiBlbm91Z2ggcm9vbSAqLworICAgIHsKKyAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCAqLworICAgICAgd2hpbGUoIGhkLT5iY3R4LmNvdW50IDwgNTYgKQorICAgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAwOyAgLyogcGFkICovCisgICAgfQorICBlbHNlICAvKiBuZWVkIG9uZSBleHRyYSBibG9jayAqLworICAgIHsKKyAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCBjaGFyYWN0ZXIgKi8KKyAgICAgIHdoaWxlKCBoZC0+YmN0eC5jb3VudCA8IDY0ICkKKyAgICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMDsKKyAgICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlKGhkLCBOVUxMLCAwKTsgIC8qIGZsdXNoICovOworICAgICAgbWVtc2V0KGhkLT5iY3R4LmJ1ZiwgMCwgNTYgKTsgLyogZmlsbCBuZXh0IGJsb2NrIHdpdGggemVyb2VzICovCisgICAgfQorICAvKiBhcHBlbmQgdGhlIDY0IGJpdCBjb3VudCAqLworICBidWZfcHV0X2xlMzIoaGQtPmJjdHguYnVmICsgNTYsIGxzYik7CisgIGJ1Zl9wdXRfbGUzMihoZC0+YmN0eC5idWYgKyA2MCwgbXNiKTsKKyAgYnVybiA9IHRyYW5zZm9ybSggaGQsIGhkLT5iY3R4LmJ1ZiApOworICBfZ2NyeV9idXJuX3N0YWNrIChidXJuKTsKKworICBwID0gaGQtPmJjdHguYnVmOworI2RlZmluZSBYKGEpIGRvIHsgKih1MzIqKXAgPSBsZV9ic3dhcDMyKCgqaGQpLmEpIDsgcCArPSA0OyB9IHdoaWxlKDApCisgIFgoQSk7CisgIFgoQik7CisgIFgoQyk7CisgIFgoRCk7CisjdW5kZWYgWAorCit9CisKK3N0YXRpYyBieXRlICoKK21kNV9yZWFkKCB2b2lkICpjb250ZXh0ICkKK3sKKyAgTUQ1X0NPTlRFWFQgKmhkID0gKE1ENV9DT05URVhUICopIGNvbnRleHQ7CisgIHJldHVybiBoZC0+YmN0eC5idWY7Cit9CisKK3N0YXRpYyBieXRlIGFzblsxOF0gPSAvKiBPYmplY3QgSUQgaXMgMS4yLjg0MC4xMTM1NDkuMi41ICovCisgIHsgMHgzMCwgMHgyMCwgMHgzMCwgMHgwYywgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwweDQ4LAorICAgIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MTAgfTsKKworc3RhdGljIGdjcnlfbWRfb2lkX3NwZWNfdCBvaWRfc3BlY19tZDVbXSA9CisgIHsKKyAgICAvKiBpc28ubWVtYmVyLWJvZHkudXMucnNhZHNpLnBrY3MucGtjcy0xLjQgKG1kNVdpdGhSU0FFbmNyeXB0aW9uKSAqLworICAgIHsgIjEuMi44NDAuMTEzNTQ5LjEuMS40IiB9LAorICAgIC8qIFJTQURTSSBkaWdlc3RBbGdvcml0aG0gTUQ1ICovCisgICAgeyAiMS4yLjg0MC4xMTM1NDkuMi41IiB9LAorICAgIHsgTlVMTCB9LAorICB9OworCitnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19tZDUgPQorICB7CisgICAgR0NSWV9NRF9NRDUsIHswLCAxfSwKKyAgICAiTUQ1IiwgYXNuLCBESU0gKGFzbiksIG9pZF9zcGVjX21kNSwgMTYsCisgICAgbWQ1X2luaXQsIF9nY3J5X21kX2Jsb2NrX3dyaXRlLCBtZDVfZmluYWwsIG1kNV9yZWFkLAorICAgIHNpemVvZiAoTUQ1X0NPTlRFWFQpCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvcHJpbWVnZW4uYyBiL2NpcGhlci9wcmltZWdlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NWIwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvcHJpbWVnZW4uYwpAQCAtMCwwICsxLDE4NjMgQEAKKy8qIHByaW1lZ2VuLmMgLSBwcmltZSBudW1iZXIgZ2VuZXJhdG9yCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyAqICAgICAgICAgICAgICAgMjAwNCwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAibXBpLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYXRoLmgiCisKK3N0YXRpYyBnY3J5X21waV90IGdlbl9wcmltZSAodW5zaWduZWQgaW50IG5iaXRzLCBpbnQgc2VjcmV0LCBpbnQgcmFuZG9tbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmV4dHJhX2NoZWNrKSh2b2lkICosIGdjcnlfbXBpX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYV9jaGVja19hcmcpOworc3RhdGljIGludCBjaGVja19wcmltZSggZ2NyeV9tcGlfdCBwcmltZSwgZ2NyeV9tcGlfdCB2YWxfMiwgaW50IHJtX3JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfcHJpbWVfY2hlY2tfZnVuY190IGNiX2Z1bmMsIHZvaWQgKmNiX2FyZyApOworc3RhdGljIGludCBpc19wcmltZSAoZ2NyeV9tcGlfdCBuLCBpbnQgc3RlcHMsIHVuc2lnbmVkIGludCAqY291bnQpOworc3RhdGljIHZvaWQgbV9vdXRfb2ZfbiggY2hhciAqYXJyYXksIGludCBtLCBpbnQgbiApOworCitzdGF0aWMgdm9pZCAoKnByb2dyZXNzX2NiKSAodm9pZCAqLGNvbnN0IGNoYXIqLGludCxpbnQsIGludCApOworc3RhdGljIHZvaWQgKnByb2dyZXNzX2NiX2RhdGE7CisKKy8qIE5vdGU6IDIgaXMgbm90IGluY2x1ZGVkIGJlY2F1c2UgaXQgY2FuIGJlIHRlc3RlZCBtb3JlIGVhc2lseSBieQorICAgbG9va2luZyBhdCBiaXQgMC4gVGhlIGxhc3QgZW50cnkgaW4gdGhpcyBsaXN0IGlzIG1hcmtlZCBieSBhIHplcm8gKi8KK3N0YXRpYyB1c2hvcnQgc21hbGxfcHJpbWVfbnVtYmVyc1tdID0geworICAgIDMsIDUsIDcsIDExLCAxMywgMTcsIDE5LCAyMywgMjksIDMxLCAzNywgNDEsIDQzLAorICAgIDQ3LCA1MywgNTksIDYxLCA2NywgNzEsIDczLCA3OSwgODMsIDg5LCA5NywgMTAxLAorICAgIDEwMywgMTA3LCAxMDksIDExMywgMTI3LCAxMzEsIDEzNywgMTM5LCAxNDksIDE1MSwKKyAgICAxNTcsIDE2MywgMTY3LCAxNzMsIDE3OSwgMTgxLCAxOTEsIDE5MywgMTk3LCAxOTksCisgICAgMjExLCAyMjMsIDIyNywgMjI5LCAyMzMsIDIzOSwgMjQxLCAyNTEsIDI1NywgMjYzLAorICAgIDI2OSwgMjcxLCAyNzcsIDI4MSwgMjgzLCAyOTMsIDMwNywgMzExLCAzMTMsIDMxNywKKyAgICAzMzEsIDMzNywgMzQ3LCAzNDksIDM1MywgMzU5LCAzNjcsIDM3MywgMzc5LCAzODMsCisgICAgMzg5LCAzOTcsIDQwMSwgNDA5LCA0MTksIDQyMSwgNDMxLCA0MzMsIDQzOSwgNDQzLAorICAgIDQ0OSwgNDU3LCA0NjEsIDQ2MywgNDY3LCA0NzksIDQ4NywgNDkxLCA0OTksIDUwMywKKyAgICA1MDksIDUyMSwgNTIzLCA1NDEsIDU0NywgNTU3LCA1NjMsIDU2OSwgNTcxLCA1NzcsCisgICAgNTg3LCA1OTMsIDU5OSwgNjAxLCA2MDcsIDYxMywgNjE3LCA2MTksIDYzMSwgNjQxLAorICAgIDY0MywgNjQ3LCA2NTMsIDY1OSwgNjYxLCA2NzMsIDY3NywgNjgzLCA2OTEsIDcwMSwKKyAgICA3MDksIDcxOSwgNzI3LCA3MzMsIDczOSwgNzQzLCA3NTEsIDc1NywgNzYxLCA3NjksCisgICAgNzczLCA3ODcsIDc5NywgODA5LCA4MTEsIDgyMSwgODIzLCA4MjcsIDgyOSwgODM5LAorICAgIDg1MywgODU3LCA4NTksIDg2MywgODc3LCA4ODEsIDg4MywgODg3LCA5MDcsIDkxMSwKKyAgICA5MTksIDkyOSwgOTM3LCA5NDEsIDk0NywgOTUzLCA5NjcsIDk3MSwgOTc3LCA5ODMsCisgICAgOTkxLCA5OTcsIDEwMDksIDEwMTMsIDEwMTksIDEwMjEsIDEwMzEsIDEwMzMsCisgICAgMTAzOSwgMTA0OSwgMTA1MSwgMTA2MSwgMTA2MywgMTA2OSwgMTA4NywgMTA5MSwKKyAgICAxMDkzLCAxMDk3LCAxMTAzLCAxMTA5LCAxMTE3LCAxMTIzLCAxMTI5LCAxMTUxLAorICAgIDExNTMsIDExNjMsIDExNzEsIDExODEsIDExODcsIDExOTMsIDEyMDEsIDEyMTMsCisgICAgMTIxNywgMTIyMywgMTIyOSwgMTIzMSwgMTIzNywgMTI0OSwgMTI1OSwgMTI3NywKKyAgICAxMjc5LCAxMjgzLCAxMjg5LCAxMjkxLCAxMjk3LCAxMzAxLCAxMzAzLCAxMzA3LAorICAgIDEzMTksIDEzMjEsIDEzMjcsIDEzNjEsIDEzNjcsIDEzNzMsIDEzODEsIDEzOTksCisgICAgMTQwOSwgMTQyMywgMTQyNywgMTQyOSwgMTQzMywgMTQzOSwgMTQ0NywgMTQ1MSwKKyAgICAxNDUzLCAxNDU5LCAxNDcxLCAxNDgxLCAxNDgzLCAxNDg3LCAxNDg5LCAxNDkzLAorICAgIDE0OTksIDE1MTEsIDE1MjMsIDE1MzEsIDE1NDMsIDE1NDksIDE1NTMsIDE1NTksCisgICAgMTU2NywgMTU3MSwgMTU3OSwgMTU4MywgMTU5NywgMTYwMSwgMTYwNywgMTYwOSwKKyAgICAxNjEzLCAxNjE5LCAxNjIxLCAxNjI3LCAxNjM3LCAxNjU3LCAxNjYzLCAxNjY3LAorICAgIDE2NjksIDE2OTMsIDE2OTcsIDE2OTksIDE3MDksIDE3MjEsIDE3MjMsIDE3MzMsCisgICAgMTc0MSwgMTc0NywgMTc1MywgMTc1OSwgMTc3NywgMTc4MywgMTc4NywgMTc4OSwKKyAgICAxODAxLCAxODExLCAxODIzLCAxODMxLCAxODQ3LCAxODYxLCAxODY3LCAxODcxLAorICAgIDE4NzMsIDE4NzcsIDE4NzksIDE4ODksIDE5MDEsIDE5MDcsIDE5MTMsIDE5MzEsCisgICAgMTkzMywgMTk0OSwgMTk1MSwgMTk3MywgMTk3OSwgMTk4NywgMTk5MywgMTk5NywKKyAgICAxOTk5LCAyMDAzLCAyMDExLCAyMDE3LCAyMDI3LCAyMDI5LCAyMDM5LCAyMDUzLAorICAgIDIwNjMsIDIwNjksIDIwODEsIDIwODMsIDIwODcsIDIwODksIDIwOTksIDIxMTEsCisgICAgMjExMywgMjEyOSwgMjEzMSwgMjEzNywgMjE0MSwgMjE0MywgMjE1MywgMjE2MSwKKyAgICAyMTc5LCAyMjAzLCAyMjA3LCAyMjEzLCAyMjIxLCAyMjM3LCAyMjM5LCAyMjQzLAorICAgIDIyNTEsIDIyNjcsIDIyNjksIDIyNzMsIDIyODEsIDIyODcsIDIyOTMsIDIyOTcsCisgICAgMjMwOSwgMjMxMSwgMjMzMywgMjMzOSwgMjM0MSwgMjM0NywgMjM1MSwgMjM1NywKKyAgICAyMzcxLCAyMzc3LCAyMzgxLCAyMzgzLCAyMzg5LCAyMzkzLCAyMzk5LCAyNDExLAorICAgIDI0MTcsIDI0MjMsIDI0MzcsIDI0NDEsIDI0NDcsIDI0NTksIDI0NjcsIDI0NzMsCisgICAgMjQ3NywgMjUwMywgMjUyMSwgMjUzMSwgMjUzOSwgMjU0MywgMjU0OSwgMjU1MSwKKyAgICAyNTU3LCAyNTc5LCAyNTkxLCAyNTkzLCAyNjA5LCAyNjE3LCAyNjIxLCAyNjMzLAorICAgIDI2NDcsIDI2NTcsIDI2NTksIDI2NjMsIDI2NzEsIDI2NzcsIDI2ODMsIDI2ODcsCisgICAgMjY4OSwgMjY5MywgMjY5OSwgMjcwNywgMjcxMSwgMjcxMywgMjcxOSwgMjcyOSwKKyAgICAyNzMxLCAyNzQxLCAyNzQ5LCAyNzUzLCAyNzY3LCAyNzc3LCAyNzg5LCAyNzkxLAorICAgIDI3OTcsIDI4MDEsIDI4MDMsIDI4MTksIDI4MzMsIDI4MzcsIDI4NDMsIDI4NTEsCisgICAgMjg1NywgMjg2MSwgMjg3OSwgMjg4NywgMjg5NywgMjkwMywgMjkwOSwgMjkxNywKKyAgICAyOTI3LCAyOTM5LCAyOTUzLCAyOTU3LCAyOTYzLCAyOTY5LCAyOTcxLCAyOTk5LAorICAgIDMwMDEsIDMwMTEsIDMwMTksIDMwMjMsIDMwMzcsIDMwNDEsIDMwNDksIDMwNjEsCisgICAgMzA2NywgMzA3OSwgMzA4MywgMzA4OSwgMzEwOSwgMzExOSwgMzEyMSwgMzEzNywKKyAgICAzMTYzLCAzMTY3LCAzMTY5LCAzMTgxLCAzMTg3LCAzMTkxLCAzMjAzLCAzMjA5LAorICAgIDMyMTcsIDMyMjEsIDMyMjksIDMyNTEsIDMyNTMsIDMyNTcsIDMyNTksIDMyNzEsCisgICAgMzI5OSwgMzMwMSwgMzMwNywgMzMxMywgMzMxOSwgMzMyMywgMzMyOSwgMzMzMSwKKyAgICAzMzQzLCAzMzQ3LCAzMzU5LCAzMzYxLCAzMzcxLCAzMzczLCAzMzg5LCAzMzkxLAorICAgIDM0MDcsIDM0MTMsIDM0MzMsIDM0NDksIDM0NTcsIDM0NjEsIDM0NjMsIDM0NjcsCisgICAgMzQ2OSwgMzQ5MSwgMzQ5OSwgMzUxMSwgMzUxNywgMzUyNywgMzUyOSwgMzUzMywKKyAgICAzNTM5LCAzNTQxLCAzNTQ3LCAzNTU3LCAzNTU5LCAzNTcxLCAzNTgxLCAzNTgzLAorICAgIDM1OTMsIDM2MDcsIDM2MTMsIDM2MTcsIDM2MjMsIDM2MzEsIDM2MzcsIDM2NDMsCisgICAgMzY1OSwgMzY3MSwgMzY3MywgMzY3NywgMzY5MSwgMzY5NywgMzcwMSwgMzcwOSwKKyAgICAzNzE5LCAzNzI3LCAzNzMzLCAzNzM5LCAzNzYxLCAzNzY3LCAzNzY5LCAzNzc5LAorICAgIDM3OTMsIDM3OTcsIDM4MDMsIDM4MjEsIDM4MjMsIDM4MzMsIDM4NDcsIDM4NTEsCisgICAgMzg1MywgMzg2MywgMzg3NywgMzg4MSwgMzg4OSwgMzkwNywgMzkxMSwgMzkxNywKKyAgICAzOTE5LCAzOTIzLCAzOTI5LCAzOTMxLCAzOTQzLCAzOTQ3LCAzOTY3LCAzOTg5LAorICAgIDQwMDEsIDQwMDMsIDQwMDcsIDQwMTMsIDQwMTksIDQwMjEsIDQwMjcsIDQwNDksCisgICAgNDA1MSwgNDA1NywgNDA3MywgNDA3OSwgNDA5MSwgNDA5MywgNDA5OSwgNDExMSwKKyAgICA0MTI3LCA0MTI5LCA0MTMzLCA0MTM5LCA0MTUzLCA0MTU3LCA0MTU5LCA0MTc3LAorICAgIDQyMDEsIDQyMTEsIDQyMTcsIDQyMTksIDQyMjksIDQyMzEsIDQyNDEsIDQyNDMsCisgICAgNDI1MywgNDI1OSwgNDI2MSwgNDI3MSwgNDI3MywgNDI4MywgNDI4OSwgNDI5NywKKyAgICA0MzI3LCA0MzM3LCA0MzM5LCA0MzQ5LCA0MzU3LCA0MzYzLCA0MzczLCA0MzkxLAorICAgIDQzOTcsIDQ0MDksIDQ0MjEsIDQ0MjMsIDQ0NDEsIDQ0NDcsIDQ0NTEsIDQ0NTcsCisgICAgNDQ2MywgNDQ4MSwgNDQ4MywgNDQ5MywgNDUwNywgNDUxMywgNDUxNywgNDUxOSwKKyAgICA0NTIzLCA0NTQ3LCA0NTQ5LCA0NTYxLCA0NTY3LCA0NTgzLCA0NTkxLCA0NTk3LAorICAgIDQ2MDMsIDQ2MjEsIDQ2MzcsIDQ2MzksIDQ2NDMsIDQ2NDksIDQ2NTEsIDQ2NTcsCisgICAgNDY2MywgNDY3MywgNDY3OSwgNDY5MSwgNDcwMywgNDcyMSwgNDcyMywgNDcyOSwKKyAgICA0NzMzLCA0NzUxLCA0NzU5LCA0NzgzLCA0Nzg3LCA0Nzg5LCA0NzkzLCA0Nzk5LAorICAgIDQ4MDEsIDQ4MTMsIDQ4MTcsIDQ4MzEsIDQ4NjEsIDQ4NzEsIDQ4NzcsIDQ4ODksCisgICAgNDkwMywgNDkwOSwgNDkxOSwgNDkzMSwgNDkzMywgNDkzNywgNDk0MywgNDk1MSwKKyAgICA0OTU3LCA0OTY3LCA0OTY5LCA0OTczLCA0OTg3LCA0OTkzLCA0OTk5LAorICAgIDAKK307CitzdGF0aWMgaW50IG5vX29mX3NtYWxsX3ByaW1lX251bWJlcnMgPSBESU0gKHNtYWxsX3ByaW1lX251bWJlcnMpIC0gMTsKKworCisMCisvKiBBbiBvYmplY3QgYW5kIGEgbGlzdCB0byBidWlsZCB1cCBhIGdsb2JhbCBwb29sIG9mIHByaW1lcy4gIFNlZQorICAgc2F2ZV9wb29sX3ByaW1lIGFuZCBnZXRfcG9vbF9wcmltZS4gKi8KK3N0cnVjdCBwcmltZXBvb2xfcworeworICBzdHJ1Y3QgcHJpbWVwb29sX3MgKm5leHQ7CisgIGdjcnlfbXBpX3QgcHJpbWU7ICAgICAgLyogSWYgdGhpcyBpcyBOVUxMIHRoZSBlbnRyeSBpcyBub3QgdXNlZC4gKi8KKyAgdW5zaWduZWQgaW50IG5iaXRzOworICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbWxldmVsOworfTsKK3N0cnVjdCBwcmltZXBvb2xfcyAqcHJpbWVwb29sOworLyogTXV0ZXggdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGUgcHJpbWVwb29sLiAgKi8KK3N0YXRpYyBhdGhfbXV0ZXhfdCBwcmltZXBvb2xfbG9jazsKKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3ByaW1lZ2VuX2luaXQgKHZvaWQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlYzsKKworICBlYyA9IGF0aF9tdXRleF9pbml0ICgmcHJpbWVwb29sX2xvY2spOworICBpZiAoZWMpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlYyk7CisgIHJldHVybiBlYzsKK30KKworCisvKiBTYXZlIFBSSU1FIHdoaWNoIGhhcyBiZWVuIGdlbmVyYXRlZCBhdCBSQU5ET01MRVZFTCBmb3IgbGF0ZXIKKyAgIHVzZS4gTmVlZHMgdG8gYmUgY2FsbGVkIHdoaWxlIHByaW1lcG9vbF9sb2NrIGlzIGJlaW5nIGhvbGQuICBOb3RlCisgICB0aGF0IFBSSU1FIHNob3VsZCBiZSBjb25zaWRlcmVkIHJlbGVhc2VkIGFmdGVyIGNhbGxpbmcgdGhpcworICAgZnVuY3Rpb24uICovCitzdGF0aWMgdm9pZAorc2F2ZV9wb29sX3ByaW1lIChnY3J5X21waV90IHByaW1lLCBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbWxldmVsKQoreworICBzdHJ1Y3QgcHJpbWVwb29sX3MgKml0ZW0sICppdGVtMjsKKyAgc2l6ZV90IG47CisKKyAgZm9yIChuPTAsIGl0ZW0gPSBwcmltZXBvb2w7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0LCBuKyspCisgICAgaWYgKCFpdGVtLT5wcmltZSkKKyAgICAgIGJyZWFrOworICBpZiAoIWl0ZW0gJiYgbiA+IDEwMCkKKyAgICB7CisgICAgICAvKiBSZW1vdmUgc29tZSBvZiB0aGUgZW50cmllcy4gIE91ciBzdHJhdGVneSBpcyByZW1vdmluZworICAgICAgICAgdGhlIGxhc3QgdGhpcmQgZnJvbSB0aGUgbGlzdC4gKi8KKyAgICAgIGludCBpOworCisgICAgICBmb3IgKGk9MCwgaXRlbTIgPSBwcmltZXBvb2w7IGl0ZW0yOyBpdGVtMiA9IGl0ZW0yLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGkgPj0gbi8zKjIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChpdGVtMi0+cHJpbWUpOworICAgICAgICAgICAgICBpdGVtMi0+cHJpbWUgPSBOVUxMOworICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW0yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBpZiAoIWl0ZW0pCisgICAgeworICAgICAgaXRlbSA9IHh0cnljYWxsb2MgKDEsIHNpemVvZiAqaXRlbSk7CisgICAgICBpZiAoIWl0ZW0pCisgICAgICAgIHsKKyAgICAgICAgICAvKiBPdXQgb2YgbWVtb3J5LiAgU2lsZW50bHkgZ2l2aW5nIHVwLiAqLworICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChwcmltZSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBpdGVtLT5uZXh0ID0gcHJpbWVwb29sOworICAgICAgcHJpbWVwb29sID0gaXRlbTsKKyAgICB9CisgIGl0ZW0tPnByaW1lID0gcHJpbWU7CisgIGl0ZW0tPm5iaXRzID0gbXBpX2dldF9uYml0cyAocHJpbWUpOworICBpdGVtLT5yYW5kb21sZXZlbCA9IHJhbmRvbWxldmVsOworfQorCisKKy8qIFJldHVybiBhIHByaW1lIGZvciB0aGUgcHJpbWUgcG9vbCBvciBOVUxMIGlmIG5vbmUgaGFzIGJlZW4gZm91bmQuCisgICBUaGUgcHJpbWUgbmVlZHMgdG8gbWF0Y2ggTkJJVFMgYW5kIHJhbmRvbWxldmVsLiBUaGlzIGZ1bmN0aW9uIG5lZWRzCisgICB0byBiZSBjYWxsZWQgd2l0aCB0aGUgcHJpbWVwb29sX2xvb2sgaXMgYmVpbmcgaG9sZC4gKi8KK3N0YXRpYyBnY3J5X21waV90CitnZXRfcG9vbF9wcmltZSAodW5zaWduZWQgaW50IG5iaXRzLCBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbWxldmVsKQoreworICBzdHJ1Y3QgcHJpbWVwb29sX3MgKml0ZW07CisKKyAgZm9yIChpdGVtID0gcHJpbWVwb29sOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkKKyAgICBpZiAoaXRlbS0+cHJpbWUKKyAgICAgICAgJiYgaXRlbS0+bmJpdHMgPT0gbmJpdHMgJiYgaXRlbS0+cmFuZG9tbGV2ZWwgPT0gcmFuZG9tbGV2ZWwpCisgICAgICB7CisgICAgICAgIGdjcnlfbXBpX3QgcHJpbWUgPSBpdGVtLT5wcmltZTsKKyAgICAgICAgaXRlbS0+cHJpbWUgPSBOVUxMOworICAgICAgICBnY3J5X2Fzc2VydCAobmJpdHMgPT0gbXBpX2dldF9uYml0cyAocHJpbWUpKTsKKyAgICAgICAgcmV0dXJuIHByaW1lOworICAgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworCisKKworCisMCit2b2lkCitfZ2NyeV9yZWdpc3Rlcl9wcmltZWdlbl9wcm9ncmVzcyAoIHZvaWQgKCpjYikodm9pZCAqLGNvbnN0IGNoYXIqLGludCxpbnQsaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfZGF0YSApCit7CisgIHByb2dyZXNzX2NiID0gY2I7CisgIHByb2dyZXNzX2NiX2RhdGEgPSBjYl9kYXRhOworfQorCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzcyggaW50IGMgKQoreworICBpZiAoIHByb2dyZXNzX2NiICkKKyAgICBwcm9ncmVzc19jYiAoIHByb2dyZXNzX2NiX2RhdGEsICJwcmltZWdlbiIsIGMsIDAsIDAgKTsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogR2VuZXJhdGUgYSBwcmltZSBudW1iZXIgKHN0b3JlZCBpbiBzZWN1cmUgbWVtb3J5KQorICovCitnY3J5X21waV90CitfZ2NyeV9nZW5lcmF0ZV9zZWNyZXRfcHJpbWUgKHVuc2lnbmVkIGludCBuYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmV4dHJhX2NoZWNrKSh2b2lkKiwgZ2NyeV9tcGlfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dHJhX2NoZWNrX2FyZykKK3sKKyAgZ2NyeV9tcGlfdCBwcmltZTsKKworICBwcmltZSA9IGdlbl9wcmltZSAobmJpdHMsIDEsIHJhbmRvbV9sZXZlbCwgZXh0cmFfY2hlY2ssIGV4dHJhX2NoZWNrX2FyZyk7CisgIHByb2dyZXNzKCdcbicpOworICByZXR1cm4gcHJpbWU7Cit9CisKKworLyogR2VuZXJhdGUgYSBwcmltZSBudW1iZXIgd2hpY2ggbWF5IGJlIHB1YmxpYywgaS5lLiBub3QgYWxsb2NhdGVkIGluCisgICBzZWN1cmUgbWVtb3J5LiAgKi8KK2djcnlfbXBpX3QKK19nY3J5X2dlbmVyYXRlX3B1YmxpY19wcmltZSAodW5zaWduZWQgaW50IG5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZXh0cmFfY2hlY2spKHZvaWQqLCBnY3J5X21waV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXh0cmFfY2hlY2tfYXJnKQoreworICBnY3J5X21waV90IHByaW1lOworCisgIHByaW1lID0gZ2VuX3ByaW1lIChuYml0cywgMCwgcmFuZG9tX2xldmVsLCBleHRyYV9jaGVjaywgZXh0cmFfY2hlY2tfYXJnKTsKKyAgcHJvZ3Jlc3MoJ1xuJyk7CisgIHJldHVybiBwcmltZTsKK30KKworCisvKiBDb3JlIHByaW1lIGdlbmVyYXRpb24gZnVuY3Rpb24uICBUaGUgYWxnb3JpdGhtIHVzZWQgdG8gZ2VuZXJhdGUKKyAgIHByYWN0aWNhbGx5IHNhdmUgcHJpbWVzIGlzIGR1ZSB0byBMaW0gYW5kIExlZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICBDUllQVE8gJzk3IHByb2NlZWRpbmdzIChJU0JOMzU0MDYzMzg0NykgcGFnZSAyNjAuCisKKyAgIE5FRURfUV9GQUNUT1I6IElmIHRydWUgbWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGZhY3RvciBpcyBvZgorICAgICAgICAgICAgICAgICAgc2l6ZSBxYml0cy4gIFRoaXMgaXMgZm9yIGV4YW1wbGUgcmVxdWlyZWQgZm9yIERTQS4KKyAgIFBSSU1FX0dFTkVSQVRFRDogQWRyZXNzcyBvZiBhIHZhcmlhYmxlIHdoZXJlIHRoZSByZXN1bHRpbmcgcHJpbWUKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIHdpbGwgYmUgc3RvcmVkLgorICAgUEJJVFM6IFJlcXVlc3RlZCBzaXplIG9mIHRoZSBwcmltZSBudW1iZXIuICBBdCBsZWFzdCA0OC4KKyAgIFFCSVRTOiBPbmUgZmFjdG9yIG9mIHRoZSBwcmltZSBuZWVkcyB0byBiZSBvZiB0aGlzIHNpemUuICBNYXliZSAwCisgICAgICAgICAgaWYgdGhpcyBpcyBub3QgcmVxdWlyZWQuICBTZWUgYWxzbyBNT0RFLgorICAgRzogSWYgbm90IE5VTEwgYW4gTVBJIHdoaWNoIHdpbGwgcmVjZWl2ZSBhIGdlbmVyYXRvciBmb3IgdGhlIHByaW1lCisgICAgICBmb3IgdXNlIHdpdGggRWxnYW1hbC4KKyAgIFJFVF9GQUNUT1JTOiBpZiBub3QgTlVMTCwgYW4gYXJyYXkgd2l0aCBhbGwgZmFjdG9ycyBhcmUgc3RvcmVkIGF0CisgICAgICAgICAgICAgICAgdGhhdCBhZGRyZXNzLgorICAgQUxMX0ZBQ1RPUlM6IElmIHNldCB0byB0cnVlIGFsbCBmYWN0b3JzIG9mIHByaW1lLTEgYXJlIHJldHVybmVkLgorICAgUkFORE9NTEVWRUw6ICBIb3cgc3Ryb25nIHNob3VsZCB0aGUgcmFuZG9tIG51bWVycyBiZS4KKyAgIEZMQUdTOiBQcmltZSBnZW5lcmF0aW9uIGJpdCBmbGFncy4gQ3VycmVudGx5IHN1cHBvcnRlZDoKKyAgICAgICAgICBHQ1JZX1BSSU1FX0ZMQUdfU0VDUkVUIC0gVGhlIHByaW1lIG5lZWRzIHRvIGJlIGtlcHQgc2VjcmV0LgorICAgQ0JfRlVOQywgQ0JfQVJHOiAgQ2FsbGJhY2sgdG8gYmUgdXNlZCBmb3IgZXh0cmEgY2hlY2tzLgorCisgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3ByaW1lX2dlbmVyYXRlX2ludGVybmFsIChpbnQgbmVlZF9xX2ZhY3RvciwKKwkJCSBnY3J5X21waV90ICpwcmltZV9nZW5lcmF0ZWQsIHVuc2lnbmVkIGludCBwYml0cywKKwkJCSB1bnNpZ25lZCBpbnQgcWJpdHMsIGdjcnlfbXBpX3QgZywKKwkJCSBnY3J5X21waV90ICoqcmV0X2ZhY3RvcnMsCisJCQkgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21sZXZlbCwgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxfZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCBjYl9mdW5jLCB2b2lkICpjYl9hcmcpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlcnIgPSAwOworICBnY3J5X21waV90ICpmYWN0b3JzX25ldyA9IE5VTEw7IC8qIEZhY3RvcnMgdG8gcmV0dXJuIHRvIHRoZQorCQkJCSAgICAgY2FsbGVyLiAgKi8KKyAgZ2NyeV9tcGlfdCAqZmFjdG9ycyA9IE5VTEw7CS8qIEN1cnJlbnQgZmFjdG9ycy4gICovCisgIGdjcnlfcmFuZG9tX2xldmVsX3QgcG9vbHJhbmRvbWxldmVsOyAvKiBSYW5kb20gbGV2ZWwgdXNlZCBmb3IgcG9vbCBwcmltZXMuICovCisgIGdjcnlfbXBpX3QgKnBvb2wgPSBOVUxMOwkvKiBQb29sIG9mIHByaW1lcy4gICovCisgIGludCAqcG9vbF9pbl91c2UgPSBOVUxMOyAgICAgIC8qIEFycmF5IHdpdGggY3VycmVudGx5IHVzZWQgUE9PTCBlbGVtZW50cy4gKi8KKyAgdW5zaWduZWQgY2hhciAqcGVybXMgPSBOVUxMOwkvKiBQZXJtdXRhdGlvbnMgb2YgUE9PTC4gICovCisgIGdjcnlfbXBpX3QgcV9mYWN0b3IgPSBOVUxMOwkvKiBVc2VkIGlmIFFCSVRTIGlzIG5vbi16ZXJvLiAgKi8KKyAgdW5zaWduZWQgaW50IGZiaXRzID0gMDsJLyogTGVuZ3RoIG9mIHByaW1lIGZhY3RvcnMuICAqLworICB1bnNpZ25lZCBpbnQgbiA9IDA7CQkvKiBOdW1iZXIgb2YgZmFjdG9ycy4gICovCisgIHVuc2lnbmVkIGludCBtID0gMDsJCS8qIE51bWJlciBvZiBwcmltZXMgaW4gcG9vbC4gICovCisgIGdjcnlfbXBpX3QgcSA9IE5VTEw7CQkvKiBGaXJzdCBwcmltZSBmYWN0b3IuICAqLworICBnY3J5X21waV90IHByaW1lID0gTlVMTDsJLyogUHJpbWUgY2FuZGlkYXRlLiAgKi8KKyAgdW5zaWduZWQgaW50IG5wcmltZSA9IDA7CS8qIEJpdHMgb2YgUFJJTUUuICAqLworICB1bnNpZ25lZCBpbnQgcmVxX3FiaXRzOyAgICAgICAvKiBUaGUgb3JpZ2luYWwgUUJJVFMgdmFsdWUuICAqLworICBnY3J5X21waV90IHZhbF8yOyAgICAgICAgICAgICAvKiBGb3IgY2hlY2tfcHJpbWUoKS4gICovCisgIGludCBpc19sb2NrZWQgPSAwOyAgICAgICAgICAgIC8qIEZsYWcgdG8gaGVscCB1bmxvY2tpbmcgdGhlIHByaW1lcG9vbC4gKi8KKyAgdW5zaWduZWQgaW50IGlzX3NlY3JldCA9IChmbGFncyAmIEdDUllfUFJJTUVfRkxBR19TRUNSRVQpOworICB1bnNpZ25lZCBpbnQgY291bnQxID0gMCwgY291bnQyID0gMDsKKyAgdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKworICBpZiAocGJpdHMgPCA0OCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworCisgIC8qIFdlIHdvbid0IHVzZSBhIHRvbyBzdHJvbmcgcmFuZG9tIGVsdmVsIGZvciB0aGUgcG9vbGVkIHN1YnByaW1lcy4gKi8KKyAgcG9vbHJhbmRvbWxldmVsID0gKHJhbmRvbWxldmVsID4gR0NSWV9TVFJPTkdfUkFORE9NPworICAgICAgICAgICAgICAgICAgICAgR0NSWV9TVFJPTkdfUkFORE9NIDogcmFuZG9tbGV2ZWwpOworCisKKyAgLyogSWYgUUJJVFMgaXMgbm90IGdpdmVuLCBhc3N1bWUgYSByZWFzb25hYmxlIHZhbHVlLiAqLworICBpZiAoIXFiaXRzKQorICAgIHFiaXRzID0gcGJpdHMgLyAzOworCisgIHJlcV9xYml0cyA9IHFiaXRzOworCisgIC8qIEZpbmQgbnVtYmVyIG9mIG5lZWRlZCBwcmltZSBmYWN0b3JzIE4uICAqLworICBmb3IgKG4gPSAxOyAocGJpdHMgLSBxYml0cyAtIDEpIC8gbiAgPj0gcWJpdHM7IG4rKykKKyAgICA7CisgIG4tLTsKKworICB2YWxfMiA9IG1waV9hbGxvY19zZXRfdWkgKDIpOworCisgIGlmICgoISBuKSB8fCAoKG5lZWRfcV9mYWN0b3IpICYmIChuIDwgMikpKQorICAgIHsKKyAgICAgIGVyciA9IEdQR19FUlJfSU5WX0FSRzsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGlmIChuZWVkX3FfZmFjdG9yKQorICAgIHsKKyAgICAgIG4tLTsgIC8qIE5lZWQgb25lIGZhY3RvciBsZXNzIGJlY2F1c2Ugd2Ugd2FudCBhIHNwZWNpZmljIFEtRkFDVE9SLiAqLworICAgICAgZmJpdHMgPSAocGJpdHMgLSAyICogcmVxX3FiaXRzIC0xKSAvIG47CisgICAgICBxYml0cyA9ICBwYml0cyAtIHJlcV9xYml0cyAtIG4gKiBmYml0czsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmYml0cyA9IChwYml0cyAtIHJlcV9xYml0cyAtMSkgLyBuOworICAgICAgcWJpdHMgPSBwYml0cyAtIG4gKiBmYml0czsKKyAgICB9CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgiZ2VuIHByaW1lOiBwYml0cz0ldSBxYml0cz0ldSBmYml0cz0ldS8ldSBuPSVkXG4iLAorICAgICAgICAgICAgICAgcGJpdHMsIHJlcV9xYml0cywgcWJpdHMsIGZiaXRzLCBuKTsKKworICAvKiBBbGxvY2F0ZSBhbiBpbnRlZ2VyIHRvIG9sZCB0aGUgbmV3IHByaW1lLiAqLworICBwcmltZSA9IG1waV9uZXcgKHBiaXRzKTsKKworICAvKiBHZW5lcmF0ZSBmaXJzdCBwcmltZSBmYWN0b3IuICAqLworICBxID0gZ2VuX3ByaW1lIChxYml0cywgaXNfc2VjcmV0LCByYW5kb21sZXZlbCwgTlVMTCwgTlVMTCk7CisKKyAgLyogR2VuZXJhdGUgYSBzcGVjaWZpYyBRLUZhY3RvciBpZiByZXF1ZXN0ZWQuICovCisgIGlmIChuZWVkX3FfZmFjdG9yKQorICAgIHFfZmFjdG9yID0gZ2VuX3ByaW1lIChyZXFfcWJpdHMsIGlzX3NlY3JldCwgcmFuZG9tbGV2ZWwsIE5VTEwsIE5VTEwpOworCisgIC8qIEFsbG9jYXRlIGFuIGFycmF5IHRvIGhvbGQgYWxsIGZhY3RvcnMgKyAyIGZvciBsYXRlciB1c2FnZS4gICovCisgIGZhY3RvcnMgPSB4dHJ5Y2FsbG9jIChuICsgMiwgc2l6ZW9mICgqZmFjdG9ycykpOworICBpZiAoIWZhY3RvcnMpCisgICAgeworICAgICAgZXJyID0gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEFsbG9jYXRlIGFuIGFycmF5IHRvIHRyYWNrIHBvb2wgdXNhZ2UuICovCisgIHBvb2xfaW5fdXNlID0geHRyeW1hbGxvYyAobiAqIHNpemVvZiAqcG9vbF9pbl91c2UpOworICBpZiAoIXBvb2xfaW5fdXNlKQorICAgIHsKKyAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgZm9yIChpPTA7IGkgPCBuOyBpKyspCisgICAgcG9vbF9pbl91c2VbaV0gPSAtMTsKKworICAvKiBNYWtlIGEgcG9vbCBvZiAzbis1IHByaW1lcyAodGhpcyBpcyBhbiBhcmJpdHJhcnkgdmFsdWUpLiAgV2UKKyAgICAgcmVxdWlyZSBhdCBsZWFzdCAzMCBwcmltZXMgZm9yIGFyZSB1c2VmdWwgc2VsZWN0aW9uIHByb2Nlc3MuCisKKyAgICAgRml4bWU6IFdlIG5lZWQgdG8gcmVzZWFyY2ggdGhlIGJlc3QgZm9ybXVsYSBmb3Igc2l6aW5nIHRoZSBwb29sLgorICAqLworICBtID0gbiAqIDMgKyA1OworICBpZiAobmVlZF9xX2ZhY3RvcikgLyogTmVlZCBzb21lIG1vcmUgaW4gdGhpcyBjYXNlLiAqLworICAgIG0gKz0gNTsKKyAgaWYgKG0gPCAzMCkKKyAgICBtID0gMzA7CisgIHBvb2wgPSB4dHJ5Y2FsbG9jIChtICwgc2l6ZW9mICgqcG9vbCkpOworICBpZiAoISBwb29sKQorICAgIHsKKyAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBQZXJtdXRhdGUgb3ZlciB0aGUgcG9vbCBvZiBwcmltZXMgdW50aWwgd2UgZmluZCBhIHByaW1lIG9mIHRoZQorICAgICByZXF1ZXN0ZWQgbGVuZ3RoLiAgKi8KKyAgZG8KKyAgICB7CisgICAgbmV4dF90cnk6CisgICAgICBmb3IgKGk9MDsgaSA8IG47IGkrKykKKyAgICAgICAgcG9vbF9pbl91c2VbaV0gPSAtMTsKKworICAgICAgaWYgKCFwZXJtcykKKyAgICAgICAgeworICAgICAgICAgIC8qIEFsbG9jYXRlIG5ldyBwcmltZXMuICBUaGlzIGlzIGRvbmUgcmlnaHQgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAgICAgIG9mIHRoZSBsb29wIGFuZCBpZiB3ZSBoYXZlIGxhdGVyIHJ1biBvdXQgb2YgcHJpbWVzLiAqLworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1waV9mcmVlIChwb29sW2ldKTsKKyAgICAgICAgICAgICAgcG9vbFtpXSA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBJbml0IG1fb3V0X29mX24oKS4gICovCisgICAgICAgICAgcGVybXMgPSB4dHJ5Y2FsbG9jICgxLCBtKTsKKyAgICAgICAgICBpZiAoIXBlcm1zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGF0aF9tdXRleF9sb2NrICgmcHJpbWVwb29sX2xvY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBHUEdfRVJSX0lOVEVSTkFMOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgfQorICAgICAgICAgIGlzX2xvY2tlZCA9IDE7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcGVybXNbaV0gPSAxOworICAgICAgICAgICAgICAvKiBBdCBhIG1heGltdW0gd2UgdXNlIHN0cm9uZyByYW5kb20gZm9yIHRoZSBmYWN0b3JzLgorICAgICAgICAgICAgICAgICBUaGlzIHNhdmVzIHVzIGEgbG90IG9mIGVudHJvcHkuIEdpdmVuIHRoYXQgUSBhbmQKKyAgICAgICAgICAgICAgICAgcG9zc2libGUgUS1mYWN0b3IgYXJlIGFsc28gdXNlZCBpbiB0aGUgZmluYWwgcHJpbWUKKyAgICAgICAgICAgICAgICAgdGhpcyBzaG91bGQgYmUgYWNjZXB0YWJsZS4gIFdlIGFsc28gZG9uJ3QgYWxsb2NhdGUgaW4KKyAgICAgICAgICAgICAgICAgc2VjdXJlIG1lbW9yeSB0byBzYXZlIG9uIHRoYXQgc2NhcmUgcmVzb3VyY2UgdG9vLiAgSWYKKyAgICAgICAgICAgICAgICAgUSBoYXMgYmVlbiBhbGxvY2F0ZWQgaW4gc2VjdXJlIG1lbW9yeSwgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgIHByaW1lIHdpbGwgYmUgc2F2ZWQgdGhlcmUgYW55d2F5LiAgVGhpcyBpcyBiZWNhdXNlCisgICAgICAgICAgICAgICAgIG91ciBNUEkgcm91dGluZXMgdGFrZSBjYXJlIG9mIHRoYXQuICBHbnVQRyBoYXMgd29ya2VkCisgICAgICAgICAgICAgICAgIHRoaXMgd2F5IGV2ZXIgc2luY2UuICAqLworICAgICAgICAgICAgICBwb29sW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgaWYgKGlzX2xvY2tlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwb29sW2ldID0gZ2V0X3Bvb2xfcHJpbWUgKGZiaXRzLCBwb29scmFuZG9tbGV2ZWwpOworICAgICAgICAgICAgICAgICAgaWYgKCFwb29sW2ldKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0aF9tdXRleF91bmxvY2sgKCZwcmltZXBvb2xfbG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEdQR19FUlJfSU5URVJOQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaXNfbG9ja2VkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCFwb29sW2ldKQorICAgICAgICAgICAgICAgIHBvb2xbaV0gPSBnZW5fcHJpbWUgKGZiaXRzLCAwLCBwb29scmFuZG9tbGV2ZWwsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICBwb29sX2luX3VzZVtpXSA9IGk7CisgICAgICAgICAgICAgIGZhY3RvcnNbaV0gPSBwb29sW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChpc19sb2NrZWQgJiYgYXRoX211dGV4X3VubG9jayAoJnByaW1lcG9vbF9sb2NrKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gR1BHX0VSUl9JTlRFUk5BTDsKKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpc19sb2NrZWQgPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBHZXQgbmV4dCBwZXJtdXRhdGlvbi4gKi8KKyAgICAgICAgICBtX291dF9vZl9uICggKGNoYXIqKXBlcm1zLCBuLCBtKTsKKyAgICAgICAgICBpZiAoYXRoX211dGV4X2xvY2sgKCZwcmltZXBvb2xfbG9jaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IEdQR19FUlJfSU5URVJOQUw7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgaXNfbG9ja2VkID0gMTsKKyAgICAgICAgICBmb3IgKGkgPSBqID0gMDsgKGkgPCBtKSAmJiAoaiA8IG4pOyBpKyspCisgICAgICAgICAgICBpZiAocGVybXNbaV0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgc3VicHJpbWUgaGFzIG5vdCB5ZXQgYmVlZCBnZW5lcmF0ZWQgZG8gaXQgbm93LiAqLworICAgICAgICAgICAgICAgIGlmICghcG9vbFtpXSAmJiBpc19sb2NrZWQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBvb2xbaV0gPSBnZXRfcG9vbF9wcmltZSAoZmJpdHMsIHBvb2xyYW5kb21sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcG9vbFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXRoX211dGV4X3VubG9jayAoJnByaW1lcG9vbF9sb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEdQR19FUlJfSU5URVJOQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbG9ja2VkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwb29sW2ldKQorICAgICAgICAgICAgICAgICAgcG9vbFtpXSA9IGdlbl9wcmltZSAoZmJpdHMsIDAsIHBvb2xyYW5kb21sZXZlbCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcG9vbF9pbl91c2Vbal0gPSBpOworICAgICAgICAgICAgICAgIGZhY3RvcnNbaisrXSA9IHBvb2xbaV07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoaXNfbG9ja2VkICYmIGF0aF9tdXRleF91bmxvY2sgKCZwcmltZXBvb2xfbG9jaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IEdQR19FUlJfSU5URVJOQUw7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgaXNfbG9ja2VkID0gMDsKKyAgICAgICAgICBpZiAoaSA9PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBSYW4gb3V0IG9mIHBlcm11dGF0aW9uczogQWxsb2NhdGUgbmV3IHByaW1lcy4gICovCisgICAgICAgICAgICAgIHhmcmVlIChwZXJtcyk7CisgICAgICAgICAgICAgIHBlcm1zID0gTlVMTDsKKyAgICAgICAgICAgICAgcHJvZ3Jlc3MgKCchJyk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dF90cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCS8qIEdlbmVyYXRlIG5leHQgcHJpbWUgY2FuZGlkYXRlOgorCSAgIHAgPSAyICogcSBbICogcV9mYWN0b3JdICogZmFjdG9yXzAgKiBmYWN0b3JfMSAqIC4uLiAqIGZhY3Rvcl9uICsgMS4KKyAgICAgICAgICovCisJbXBpX3NldCAocHJpbWUsIHEpOworCW1waV9tdWxfdWkgKHByaW1lLCBwcmltZSwgMik7CisJaWYgKG5lZWRfcV9mYWN0b3IpCisJICBtcGlfbXVsIChwcmltZSwgcHJpbWUsIHFfZmFjdG9yKTsKKwlmb3IoaSA9IDA7IGkgPCBuOyBpKyspCisJICBtcGlfbXVsIChwcmltZSwgcHJpbWUsIGZhY3RvcnNbaV0pOworCW1waV9hZGRfdWkgKHByaW1lLCBwcmltZSwgMSk7CisJbnByaW1lID0gbXBpX2dldF9uYml0cyAocHJpbWUpOworCisJaWYgKG5wcmltZSA8IHBiaXRzKQorCSAgeworCSAgICBpZiAoKytjb3VudDEgPiAyMCkKKwkgICAgICB7CisJCWNvdW50MSA9IDA7CisJCXFiaXRzKys7CisJCXByb2dyZXNzKCc+Jyk7CisJCW1waV9mcmVlIChxKTsKKwkJcSA9IGdlbl9wcmltZSAocWJpdHMsIGlzX3NlY3JldCwgcmFuZG9tbGV2ZWwsIE5VTEwsIE5VTEwpOworCQlnb3RvIG5leHRfdHJ5OworCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICBjb3VudDEgPSAwOworCisJaWYgKG5wcmltZSA+IHBiaXRzKQorCSAgeworCSAgICBpZiAoKytjb3VudDIgPiAyMCkKKwkgICAgICB7CisJCWNvdW50MiA9IDA7CisJCXFiaXRzLS07CisJCXByb2dyZXNzKCc8Jyk7CisJCW1waV9mcmVlIChxKTsKKwkJcSA9IGdlbl9wcmltZSAocWJpdHMsIGlzX3NlY3JldCwgcmFuZG9tbGV2ZWwsIE5VTEwsIE5VTEwpOworCQlnb3RvIG5leHRfdHJ5OworCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICBjb3VudDIgPSAwOworICAgIH0KKyAgd2hpbGUgKCEgKChucHJpbWUgPT0gcGJpdHMpICYmIGNoZWNrX3ByaW1lIChwcmltZSwgdmFsXzIsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JfZnVuYywgY2JfYXJnKSkpOworCisgIGlmIChEQkdfQ0lQSEVSKQorICAgIHsKKyAgICAgIHByb2dyZXNzICgnXG4nKTsKKyAgICAgIGxvZ19tcGlkdW1wICgicHJpbWUgICAgIiwgcHJpbWUpOworICAgICAgbG9nX21waWR1bXAgKCJmYWN0b3IgIHEiLCBxKTsKKyAgICAgIGlmIChuZWVkX3FfZmFjdG9yKQorICAgICAgICBsb2dfbXBpZHVtcCAoImZhY3RvciBxMCIsIHFfZmFjdG9yKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIGxvZ19tcGlkdW1wICgiZmFjdG9yIHBpIiwgZmFjdG9yc1tpXSk7CisgICAgICBsb2dfZGVidWcgKCJiaXQgc2l6ZXM6IHByaW1lPSV1LCBxPSV1IiwKKyAgICAgICAgICAgICAgICAgbXBpX2dldF9uYml0cyAocHJpbWUpLCBtcGlfZ2V0X25iaXRzIChxKSk7CisgICAgICBpZiAobmVlZF9xX2ZhY3RvcikKKyAgICAgICAgbG9nX3ByaW50ZiAoIiwgcTA9JXUiLCBtcGlfZ2V0X25iaXRzIChxX2ZhY3RvcikpOworICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgbG9nX3ByaW50ZiAoIiwgcCVkPSV1IiwgaSwgbXBpX2dldF9uYml0cyAoZmFjdG9yc1tpXSkpOworICAgICAgbG9nX3ByaW50ZiAoIlxuIik7CisgICAgfQorCisgIGlmIChyZXRfZmFjdG9ycykKKyAgICB7CisgICAgICAvKiBDYWxsZXIgd2FudHMgdGhlIGZhY3RvcnMuICAqLworICAgICAgZmFjdG9yc19uZXcgPSB4dHJ5Y2FsbG9jIChuICsgNCwgc2l6ZW9mICgqZmFjdG9yc19uZXcpKTsKKyAgICAgIGlmICghIGZhY3RvcnNfbmV3KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKTsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisKKyAgICAgIGlmIChhbGxfZmFjdG9ycykKKyAgICAgICAgeworICAgICAgICAgIGkgPSAwOworICAgICAgICAgIGZhY3RvcnNfbmV3W2krK10gPSBtcGlfc2V0X3VpIChOVUxMLCAyKTsKKyAgICAgICAgICBmYWN0b3JzX25ld1tpKytdID0gbXBpX2NvcHkgKHEpOworICAgICAgICAgIGlmIChuZWVkX3FfZmFjdG9yKQorICAgICAgICAgICAgZmFjdG9yc19uZXdbaSsrXSA9IG1waV9jb3B5IChxX2ZhY3Rvcik7CisgICAgICAgICAgZm9yKGo9MDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIGZhY3RvcnNfbmV3W2krK10gPSBtcGlfY29weSAoZmFjdG9yc1tqXSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGkgPSAwOworICAgICAgICAgIGlmIChuZWVkX3FfZmFjdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWN0b3JzX25ld1tpKytdID0gbXBpX2NvcHkgKHFfZmFjdG9yKTsKKyAgICAgICAgICAgICAgZm9yICg7IGkgPD0gbjsgaSsrKQorICAgICAgICAgICAgICAgIGZhY3RvcnNfbmV3W2ldID0gbXBpX2NvcHkgKGZhY3RvcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrICkKKyAgICAgICAgICAgICAgZmFjdG9yc19uZXdbaV0gPSBtcGlfY29weSAoZmFjdG9yc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGcpCisgICAgeworICAgICAgLyogQ3JlYXRlIGEgZ2VuZXJhdG9yIChzdGFydCB3aXRoIDMpLiAgKi8KKyAgICAgIGdjcnlfbXBpX3QgdG1wID0gbXBpX2FsbG9jIChtcGlfZ2V0X25saW1icyAocHJpbWUpKTsKKyAgICAgIGdjcnlfbXBpX3QgYiA9IG1waV9hbGxvYyAobXBpX2dldF9ubGltYnMgKHByaW1lKSk7CisgICAgICBnY3J5X21waV90IHBtaW4xID0gbXBpX2FsbG9jIChtcGlfZ2V0X25saW1icyAocHJpbWUpKTsKKworICAgICAgaWYgKG5lZWRfcV9mYWN0b3IpCisgICAgICAgIGVyciA9IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZmFjdG9yc1tuXSA9IHE7CisgICAgICAgICAgZmFjdG9yc1tuICsgMV0gPSBtcGlfYWxsb2Nfc2V0X3VpICgyKTsKKyAgICAgICAgICBtcGlfc3ViX3VpIChwbWluMSwgcHJpbWUsIDEpOworICAgICAgICAgIG1waV9zZXRfdWkgKGcsIDIpOworICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1waV9hZGRfdWkgKGcsIGcsIDEpOworICAgICAgICAgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJjaGVja2luZyBnIiwgZyk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm9ncmVzcygnXicpOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbiArIDI7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBtcGlfZmRpdl9xICh0bXAsIHBtaW4xLCBmYWN0b3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgIC8qIE5vIG1waV9wb3coKSwgYnV0IGl0IGlzIG9rYXkgdG8gdXNlIHRoaXMgd2l0aCBtb2QKKyAgICAgICAgICAgICAgICAgICAgIHByaW1lLiAgKi8KKyAgICAgICAgICAgICAgICAgIG1waV9wb3dtIChiLCBnLCB0bXAsIHByaW1lKTsKKyAgICAgICAgICAgICAgICAgIGlmICghIG1waV9jbXBfdWkgKGIsIDEpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICAgICAgICAgIHByb2dyZXNzKCdcbicpOworICAgICAgICAgICAgfQorICAgICAgICAgIHdoaWxlIChpIDwgbiArIDIpOworCisgICAgICAgICAgbXBpX2ZyZWUgKGZhY3RvcnNbbisxXSk7CisgICAgICAgICAgbXBpX2ZyZWUgKHRtcCk7CisgICAgICAgICAgbXBpX2ZyZWUgKGIpOworICAgICAgICAgIG1waV9mcmVlIChwbWluMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCEgREJHX0NJUEhFUikKKyAgICBwcm9ncmVzcyAoJ1xuJyk7CisKKworIGxlYXZlOgorICBpZiAocG9vbCkKKyAgICB7CisgICAgICBpc19sb2NrZWQgPSAhYXRoX211dGV4X2xvY2sgKCZwcmltZXBvb2xfbG9jayk7CisgICAgICBmb3IoaSA9IDA7IGkgPCBtOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocG9vbFtpXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBuOyBqKyspCisgICAgICAgICAgICAgICAgaWYgKHBvb2xfaW5fdXNlW2pdID09IGkpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgaWYgKGogPT0gbiAmJiBpc19sb2NrZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogVGhpcyBwb29sZWQgc3VicHJpbWUgaGFzIG5vdCBiZWVuIHVzZWQuICovCisgICAgICAgICAgICAgICAgICBzYXZlX3Bvb2xfcHJpbWUgKHBvb2xbaV0sIHBvb2xyYW5kb21sZXZlbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbXBpX2ZyZWUgKHBvb2xbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAoaXNfbG9ja2VkICYmIGF0aF9tdXRleF91bmxvY2sgKCZwcmltZXBvb2xfbG9jaykpCisgICAgICAgIGVyciA9IEdQR19FUlJfSU5URVJOQUw7CisgICAgICBpc19sb2NrZWQgPSAwOworICAgICAgeGZyZWUgKHBvb2wpOworICAgIH0KKyAgeGZyZWUgKHBvb2xfaW5fdXNlKTsKKyAgaWYgKGZhY3RvcnMpCisgICAgeGZyZWUgKGZhY3RvcnMpOyAgLyogRmFjdG9ycyBhcmUgc2hhbGxvdyBjb3BpZXMuICAqLworICBpZiAocGVybXMpCisgICAgeGZyZWUgKHBlcm1zKTsKKworICBtcGlfZnJlZSAodmFsXzIpOworICBtcGlfZnJlZSAocSk7CisgIG1waV9mcmVlIChxX2ZhY3Rvcik7CisKKyAgaWYgKCEgZXJyKQorICAgIHsKKyAgICAgICpwcmltZV9nZW5lcmF0ZWQgPSBwcmltZTsKKyAgICAgIGlmIChyZXRfZmFjdG9ycykKKwkqcmV0X2ZhY3RvcnMgPSBmYWN0b3JzX25ldzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZmFjdG9yc19uZXcpCisJeworCSAgZm9yIChpID0gMDsgZmFjdG9yc19uZXdbaV07IGkrKykKKwkgICAgbXBpX2ZyZWUgKGZhY3RvcnNfbmV3W2ldKTsKKwkgIHhmcmVlIChmYWN0b3JzX25ldyk7CisJfQorICAgICAgbXBpX2ZyZWUgKHByaW1lKTsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworCisvKiBHZW5lcmF0ZSBhIHByaW1lIHVzZWQgZm9yIGRpc2NyZXRlIGxvZ2FyaXRobSBhbGdvcml0aG1zOyBpLmUuIHRoaXMKKyAgIHByaW1lIHdpbGwgYmUgcHVibGljIGFuZCBubyBzdHJvbmcgcmFuZG9tIGlzIHJlcXVpcmVkLiAgKi8KK2djcnlfbXBpX3QKK19nY3J5X2dlbmVyYXRlX2VsZ19wcmltZSAoaW50IG1vZGUsIHVuc2lnbmVkIHBiaXRzLCB1bnNpZ25lZCBxYml0cywKKwkJCSAgZ2NyeV9tcGlfdCBnLCBnY3J5X21waV90ICoqcmV0X2ZhY3RvcnMpCit7CisgIGdjcnlfbXBpX3QgcHJpbWUgPSBOVUxMOworCisgIGlmIChwcmltZV9nZW5lcmF0ZV9pbnRlcm5hbCAoKG1vZGUgPT0gMSksICZwcmltZSwgcGJpdHMsIHFiaXRzLCBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9mYWN0b3JzLCBHQ1JZX1dFQUtfUkFORE9NLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpKQorICAgIHByaW1lID0gTlVMTDsgLyogKFNob3VsZCBiZSBOVUxMIGluIHRoZSBlcnJvciBjYXNlIGFueXdheS4pICAqLworCisgIHJldHVybiBwcmltZTsKK30KKworCitzdGF0aWMgZ2NyeV9tcGlfdAorZ2VuX3ByaW1lICh1bnNpZ25lZCBpbnQgbmJpdHMsIGludCBzZWNyZXQsIGludCByYW5kb21sZXZlbCwKKyAgICAgICAgICAgaW50ICgqZXh0cmFfY2hlY2spKHZvaWQgKiwgZ2NyeV9tcGlfdCksIHZvaWQgKmV4dHJhX2NoZWNrX2FyZykKK3sKKyAgZ2NyeV9tcGlfdCBwcmltZSwgcHRlc3QsIHBtaW51czEsIHZhbF8yLCB2YWxfMywgcmVzdWx0OworICBpbnQgaTsKKyAgdW5zaWduZWQgaW50IHgsIHN0ZXA7CisgIHVuc2lnbmVkIGludCBjb3VudDEsIGNvdW50MjsKKyAgaW50ICptb2RzOworCisvKiAgIGlmICggIERCR19DSVBIRVIgKSAqLworLyogICAgIGxvZ19kZWJ1ZyAoImdlbmVyYXRlIGEgcHJpbWUgb2YgJXUgYml0cyAiLCBuYml0cyApOyAqLworCisgIGlmIChuYml0cyA8IDE2KQorICAgIGxvZ19mYXRhbCAoImNhbid0IGdlbmVyYXRlIGEgcHJpbWUgd2l0aCBsZXNzIHRoYW4gJWQgYml0c1xuIiwgMTYpOworCisgIG1vZHMgPSB4bWFsbG9jIChub19vZl9zbWFsbF9wcmltZV9udW1iZXJzICogc2l6ZW9mICptb2RzKTsKKyAgLyogTWFrZSBuYml0cyBmaXQgaW50byBnY3J5X21waV90IGltcGxlbWVudGF0aW9uLiAqLworICB2YWxfMiAgPSBtcGlfYWxsb2Nfc2V0X3VpKCAyICk7CisgIHZhbF8zID0gbXBpX2FsbG9jX3NldF91aSggMyk7CisgIHByaW1lICA9IHNlY3JldD8gbXBpX3NuZXcgKG5iaXRzKTogbXBpX25ldyAobmJpdHMpOworICByZXN1bHQgPSBtcGlfYWxsb2NfbGlrZSggcHJpbWUgKTsKKyAgcG1pbnVzMT0gbXBpX2FsbG9jX2xpa2UoIHByaW1lICk7CisgIHB0ZXN0ICA9IG1waV9hbGxvY19saWtlKCBwcmltZSApOworICBjb3VudDEgPSBjb3VudDIgPSAwOworICBmb3IgKDs7KQorICAgIHsgIC8qIHRyeSBmb3J2ZXZlciAqLworICAgICAgaW50IGRvdGNvdW50PTA7CisKKyAgICAgIC8qIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciAqLworICAgICAgX2djcnlfbXBpX3JhbmRvbWl6ZSggcHJpbWUsIG5iaXRzLCByYW5kb21sZXZlbCApOworCisgICAgICAvKiBTZXQgaGlnaCBvcmRlciBiaXQgdG8gMSwgc2V0IGxvdyBvcmRlciBiaXQgdG8gMS4gIElmIHdlIGFyZQorICAgICAgICAgZ2VuZXJhdGluZyBhIHNlY3JldCBwcmltZSB3ZSBhcmUgbW9zdCBwcm9iYWJseSBkb2luZyB0aGF0CisgICAgICAgICBmb3IgUlNBLCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWx1cyBkb2VzIGhhdmUgdGhlCisgICAgICAgICByZXF1ZXN0ZWQga2V5IHNpemUgd2Ugc2V0IHRoZSAyIGhpZ2ggb3JkZXIgYml0cy4gKi8KKyAgICAgIG1waV9zZXRfaGlnaGJpdCAocHJpbWUsIG5iaXRzLTEpOworICAgICAgaWYgKHNlY3JldCkKKyAgICAgICAgbXBpX3NldF9iaXQgKHByaW1lLCBuYml0cy0yKTsKKyAgICAgIG1waV9zZXRfYml0KHByaW1lLCAwKTsKKworICAgICAgLyogQ2FsY3VsYXRlIGFsbCByZW1haW5kZXJzLiAqLworICAgICAgZm9yIChpPTA7ICh4ID0gc21hbGxfcHJpbWVfbnVtYmVyc1tpXSk7IGkrKyApCisgICAgICAgIG1vZHNbaV0gPSBtcGlfZmRpdl9yX3VpKE5VTEwsIHByaW1lLCB4KTsKKworICAgICAgLyogTm93IHRyeSBzb21lIHByaW1lcyBzdGFydGluZyB3aXRoIHByaW1lLiAqLworICAgICAgZm9yKHN0ZXA9MDsgc3RlcCA8IDIwMDAwOyBzdGVwICs9IDIgKQorICAgICAgICB7CisgICAgICAgICAgLyogQ2hlY2sgYWdhaW5zdCBhbGwgdGhlIHNtYWxsIHByaW1lcyB3ZSBoYXZlIGluIG1vZHMuICovCisgICAgICAgICAgY291bnQxKys7CisgICAgICAgICAgZm9yIChpPTA7ICh4ID0gc21hbGxfcHJpbWVfbnVtYmVyc1tpXSk7IGkrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlICggbW9kc1tpXSArIHN0ZXAgPj0geCApCisgICAgICAgICAgICAgICAgbW9kc1tpXSAtPSB4OworICAgICAgICAgICAgICBpZiAoICEobW9kc1tpXSArIHN0ZXApICkKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgfQorICAgICAgICAgIGlmICggeCApCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBGb3VuZCBhIG11bHRpcGxlIG9mIGFuIGFscmVhZHkga25vd24gcHJpbWUuICovCisKKyAgICAgICAgICBtcGlfYWRkX3VpKCBwdGVzdCwgcHJpbWUsIHN0ZXAgKTsKKworICAgICAgICAgIC8qIERvIGEgZmFzdCBGZXJtYXQgdGVzdCBub3cuICovCisgICAgICAgICAgY291bnQyKys7CisgICAgICAgICAgbXBpX3N1Yl91aSggcG1pbnVzMSwgcHRlc3QsIDEpOworICAgICAgICAgIG1waV9wb3dtKCByZXN1bHQsIHZhbF8yLCBwbWludXMxLCBwdGVzdCApOworICAgICAgICAgIGlmICggIW1waV9jbXBfdWkoIHJlc3VsdCwgMSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogTm90IGNvbXBvc2l0ZSwgcGVyZm9ybSBzdHJvbmdlciB0ZXN0cyAqLworICAgICAgICAgICAgICBpZiAoaXNfcHJpbWUocHRlc3QsIDUsICZjb3VudDIgKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoIW1waV90ZXN0X2JpdCggcHRlc3QsIG5iaXRzLTEtc2VjcmV0ICkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcygnXG4nKTsKKyAgICAgICAgICAgICAgICAgICAgICBsb2dfZGVidWcgKCJvdmVyZmxvdyBpbiBwcmltZSBnZW5lcmF0aW9uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogU3RvcCBsb29wLCBjb250aW51ZSB3aXRoIGEgbmV3IHByaW1lLiAqLworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGlmIChleHRyYV9jaGVjayAmJiBleHRyYV9jaGVjayAoZXh0cmFfY2hlY2tfYXJnLCBwdGVzdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZXh0cmEgY2hlY2sgdG9sZCB1cyB0aGF0IHRoaXMgcHJpbWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgb2YgdGhlIGNhbGxlcidzIHRhc3RlLiAqLworICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzICgnLycpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBHb3QgaXQuICovCisgICAgICAgICAgICAgICAgICAgICAgbXBpX2ZyZWUodmFsXzIpOworICAgICAgICAgICAgICAgICAgICAgIG1waV9mcmVlKHZhbF8zKTsKKyAgICAgICAgICAgICAgICAgICAgICBtcGlfZnJlZShyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgIG1waV9mcmVlKHBtaW51czEpOworICAgICAgICAgICAgICAgICAgICAgIG1waV9mcmVlKHByaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICB4ZnJlZShtb2RzKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHRlc3Q7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJICAgIH0KKyAgICAgICAgICBpZiAoKytkb3Rjb3VudCA9PSAxMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHByb2dyZXNzKCcuJyk7CisgICAgICAgICAgICAgIGRvdGNvdW50ID0gMDsKKwkgICAgfQorCX0KKyAgICAgIHByb2dyZXNzKCc6Jyk7IC8qIHJlc3RhcnQgd2l0aCBhIG5ldyByYW5kb20gdmFsdWUgKi8KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBSZXR1cm5zOiB0cnVlIGlmIHRoaXMgbWF5IGJlIGEgcHJpbWUKKyAqIFJNX1JPVU5EUyBnaXZlcyB0aGUgbnVtYmVyIG9mIFJhYmluLU1pbGxlciB0ZXN0cyB0byBydW4uCisgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX3ByaW1lKCBnY3J5X21waV90IHByaW1lLCBnY3J5X21waV90IHZhbF8yLCBpbnQgcm1fcm91bmRzLAorICAgICAgICAgICAgIGdjcnlfcHJpbWVfY2hlY2tfZnVuY190IGNiX2Z1bmMsIHZvaWQgKmNiX2FyZykKK3sKKyAgaW50IGk7CisgIHVuc2lnbmVkIGludCB4OworICB1bnNpZ25lZCBpbnQgY291bnQ9MDsKKworICAvKiBDaGVjayBhZ2FpbnN0IHNtYWxsIHByaW1lcy4gKi8KKyAgZm9yIChpPTA7ICh4ID0gc21hbGxfcHJpbWVfbnVtYmVyc1tpXSk7IGkrKyApCisgICAgeworICAgICAgaWYgKCBtcGlfZGl2aXNpYmxlX3VpKCBwcmltZSwgeCApICkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIEEgcXVpY2sgRmVybWF0IHRlc3QuICovCisgIHsKKyAgICBnY3J5X21waV90IHJlc3VsdCA9IG1waV9hbGxvY19saWtlKCBwcmltZSApOworICAgIGdjcnlfbXBpX3QgcG1pbnVzMSA9IG1waV9hbGxvY19saWtlKCBwcmltZSApOworICAgIG1waV9zdWJfdWkoIHBtaW51czEsIHByaW1lLCAxKTsKKyAgICBtcGlfcG93bSggcmVzdWx0LCB2YWxfMiwgcG1pbnVzMSwgcHJpbWUgKTsKKyAgICBtcGlfZnJlZSggcG1pbnVzMSApOworICAgIGlmICggbXBpX2NtcF91aSggcmVzdWx0LCAxICkgKQorICAgICAgeworICAgICAgICAvKiBJcyBjb21wb3NpdGUuICovCisgICAgICAgIG1waV9mcmVlKCByZXN1bHQgKTsKKyAgICAgICAgcHJvZ3Jlc3MoJy4nKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgbXBpX2ZyZWUoIHJlc3VsdCApOworICB9CisKKyAgaWYgKCFjYl9mdW5jIHx8IGNiX2Z1bmMgKGNiX2FyZywgR0NSWV9QUklNRV9DSEVDS19BVF9NQVlCRV9QUklNRSwgcHJpbWUpKQorICAgIHsKKyAgICAgIC8qIFBlcmZvcm0gc3Ryb25nZXIgdGVzdHMuICovCisgICAgICBpZiAoIGlzX3ByaW1lKCBwcmltZSwgcm1fcm91bmRzLCAmY291bnQgKSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWNiX2Z1bmMKKyAgICAgICAgICAgICAgfHwgY2JfZnVuYyAoY2JfYXJnLCBHQ1JZX1BSSU1FX0NIRUNLX0FUX0dPVF9QUklNRSwgcHJpbWUpKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIFByb2JhYmx5IGEgcHJpbWUuICovCisgICAgICAgIH0KKyAgICB9CisgIHByb2dyZXNzKCcuJyk7CisgIHJldHVybiAwOworfQorCisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBuIGlzIHByb2JhYmx5IGEgcHJpbWUKKyAqLworc3RhdGljIGludAoraXNfcHJpbWUgKGdjcnlfbXBpX3QgbiwgaW50IHN0ZXBzLCB1bnNpZ25lZCBpbnQgKmNvdW50KQoreworICBnY3J5X21waV90IHggPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKCBuICkgKTsKKyAgZ2NyeV9tcGlfdCB5ID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyggbiApICk7CisgIGdjcnlfbXBpX3QgeiA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnMoIG4gKSApOworICBnY3J5X21waV90IG5taW51czEgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKCBuICkgKTsKKyAgZ2NyeV9tcGlfdCBhMiA9IG1waV9hbGxvY19zZXRfdWkoIDIgKTsKKyAgZ2NyeV9tcGlfdCBxOworICB1bnNpZ25lZCBpLCBqLCBrOworICBpbnQgcmMgPSAwOworICB1bnNpZ25lZCBuYml0cyA9IG1waV9nZXRfbmJpdHMoIG4gKTsKKworICBpZiAoc3RlcHMgPCA1KSAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBhdCBsZWFzdCA1IHJvdW5kcy4gKi8KKyAgICBzdGVwcyA9IDU7CisKKyAgbXBpX3N1Yl91aSggbm1pbnVzMSwgbiwgMSApOworCisgIC8qIEZpbmQgcSBhbmQgaywgc28gdGhhdCBuID0gMSArIDJeayAqIHEgLiAqLworICBxID0gbXBpX2NvcHkgKCBubWludXMxICk7CisgIGsgPSBtcGlfdHJhaWxpbmdfemVyb3MgKCBxICk7CisgIG1waV90ZGl2X3FfMmV4cCAocSwgcSwgayk7CisKKyAgZm9yIChpPTAgOyBpIDwgc3RlcHM7IGkrKyApCisgICAgeworICAgICAgKysqY291bnQ7CisgICAgICBpZiggIWkgKQorICAgICAgICB7CisgICAgICAgICAgbXBpX3NldF91aSggeCwgMiApOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9tcGlfcmFuZG9taXplKCB4LCBuYml0cywgR0NSWV9XRUFLX1JBTkRPTSApOworCisgICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlIHByaW1lIGFuZAorICAgICAgICAgICAgIGtlZXAgdGhlIHJhbmRvbW5lc3Mgb2YgdGhlIGhpZ2ggYml0LiAqLworICAgICAgICAgIGlmICggbXBpX3Rlc3RfYml0ICggeCwgbmJpdHMtMikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtcGlfc2V0X2hpZ2hiaXQgKCB4LCBuYml0cy0yKTsgLyogQ2xlYXIgYWxsIGhpZ2hlciBiaXRzLiAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbXBpX3NldF9oaWdoYml0KCB4LCBuYml0cy0yICk7CisgICAgICAgICAgICAgIG1waV9jbGVhcl9iaXQoIHgsIG5iaXRzLTIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2Fzc2VydCAobXBpX2NtcCAoeCwgbm1pbnVzMSkgPCAwICYmIG1waV9jbXBfdWkgKHgsIDEpID4gMCk7CisJfQorICAgICAgbXBpX3Bvd20gKCB5LCB4LCBxLCBuKTsKKyAgICAgIGlmICggbXBpX2NtcF91aSh5LCAxKSAmJiBtcGlfY21wKCB5LCBubWludXMxICkgKQorICAgICAgICB7CisgICAgICAgICAgZm9yICggaj0xOyBqIDwgayAmJiBtcGlfY21wKCB5LCBubWludXMxICk7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1waV9wb3dtKHksIHksIGEyLCBuKTsKKyAgICAgICAgICAgICAgaWYoICFtcGlfY21wX3VpKCB5LCAxICkgKQorICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7IC8qIE5vdCBhIHByaW1lLiAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChtcGlfY21wKCB5LCBubWludXMxICkgKQorICAgICAgICAgICAgZ290byBsZWF2ZTsgLyogTm90IGEgcHJpbWUuICovCisJfQorICAgICAgcHJvZ3Jlc3MoJysnKTsKKyAgICB9CisgIHJjID0gMTsgLyogTWF5IGJlIGEgcHJpbWUuICovCisKKyBsZWF2ZToKKyAgbXBpX2ZyZWUoIHggKTsKKyAgbXBpX2ZyZWUoIHkgKTsKKyAgbXBpX2ZyZWUoIHogKTsKKyAgbXBpX2ZyZWUoIG5taW51czEgKTsKKyAgbXBpX2ZyZWUoIHEgKTsKKyAgbXBpX2ZyZWUoIGEyICk7CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIEdpdmVuIEFSUkFZIG9mIHNpemUgTiB3aXRoIE0gZWxlbWVudHMgc2V0IHRvIHRydWUgcHJvZHVjZSBhCisgICBtb2RpZmllZCBhcnJheSB3aXRoIHRoZSBuZXh0IHBlcm11dGF0aW9uIG9mIE0gZWxlbWVudHMuICBOb3RlLCB0aGF0CisgICBBUlJBWSBpcyB1c2VkIGluIGEgb25lLWJpdC1wZXItYnl0ZSBhcHByb2FjaC4gIFRvIGRldGVjdGVkIHRoZSBsYXN0CisgICBwZXJtdXRhdGlvbiBpdCBpcyB1c2VmdWwgdG8gaW5pdGlhbGl6ZSB0aGUgYXJyYXkgd2l0aCB0aGUgZmlyc3QgTQorICAgZWxlbWVudCBzZXQgdG8gdHJ1ZSBhbmQgdXNlIHRoaXMgdGVzdDoKKyAgICAgICBtX291dF9vZl9uIChhcnJheSwgbSwgbik7CisgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBuICYmIGogPCBtOyBpKyspCisgICAgICAgICBpZiAoYXJyYXlbaV0pCisgICAgICAgICAgIGorKzsKKyAgICAgICBpZiAoaiA9PSBtKQorICAgICAgICAgZ290byByZWFkeTsKKworICAgVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gNDUyIGZyb20gdGhlICJDb2xsZWN0ZWQKKyAgIEFsZ29yaXRobXMgRnJvbSBBQ00sIFZvbHVtZSBJSSIgYnkgQy4gTi4gTGl1IGFuZCBELiBULiBUYW5nLgorKi8KK3N0YXRpYyB2b2lkCittX291dF9vZl9uICggY2hhciAqYXJyYXksIGludCBtLCBpbnQgbiApCit7CisgIGludCBpPTAsIGkxPTAsIGo9MCwganA9MCwgIGoxPTAsIGsxPTAsIGsyPTA7CisKKyAgaWYoICFtIHx8IG0gPj0gbiApCisgICAgcmV0dXJuOworCisgIC8qIE5lZWQgdG8gaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2Ugc2VwYXJhdGVseS4gKi8KKyAgaWYoIG0gPT0gMSApCisgICAgeworICAgICAgZm9yIChpPTA7IGkgPCBuOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBhcnJheVtpXSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFycmF5W2krK10gPSAwOworICAgICAgICAgICAgICBpZiggaSA+PSBuICkKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgYXJyYXlbaV0gPSAxOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIEJVRygpOworICAgIH0KKworCisgIGZvciAoaj0xOyBqIDwgbjsgaisrICkKKyAgICB7CisgICAgICBpZiAoIGFycmF5W24tMV0gPT0gYXJyYXlbbi1qLTFdKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGoxID0gajsKKyAgICAgIGJyZWFrOworICAgIH0KKworICBpZiAoIChtICYgMSkgKQorICAgIHsKKyAgICAgIC8qIE0gaXMgb2RkLiAqLworICAgICAgaWYoIGFycmF5W24tMV0gKQorICAgICAgICB7CisgICAgICAgICAgaWYoIGoxICYgMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGsxID0gbiAtIGoxOworICAgICAgICAgICAgICBrMiA9IGsxKzI7CisgICAgICAgICAgICAgIGlmKCBrMiA+IG4gKQorICAgICAgICAgICAgICAgIGsyID0gbjsKKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnb3RvIHNjYW47CisgICAgICAgIH0KKyAgICAgIGsyID0gbiAtIGoxIC0gMTsKKyAgICAgIGlmKCBrMiA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIGsxID0gaTsKKyAgICAgICAgICBrMiA9IG4gLSBqMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiggYXJyYXlbazJdICYmIGFycmF5W2syLTFdICkKKyAgICAgICAgazEgPSBuOworICAgICAgZWxzZQorICAgICAgICBrMSA9IGsyICsgMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBNIGlzIGV2ZW4uICovCisgICAgICBpZiggIWFycmF5W24tMV0gKQorICAgICAgICB7CisgICAgICAgICAgazEgPSBuIC0gajE7CisgICAgICAgICAgazIgPSBrMSArIDE7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorCisgICAgICBpZiggIShqMSAmIDEpICkKKyAgICAgICAgeworICAgICAgICAgIGsxID0gbiAtIGoxOworICAgICAgICAgIGsyID0gazErMjsKKyAgICAgICAgICBpZiggazIgPiBuICkKKyAgICAgICAgICAgIGsyID0gbjsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisgICAgc2NhbjoKKyAgICAgIGpwID0gbiAtIGoxIC0gMTsKKyAgICAgIGZvciAoaT0xOyBpIDw9IGpwOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgaTEgPSBqcCArIDIgLSBpOworICAgICAgICAgIGlmKCBhcnJheVtpMS0xXSAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiggYXJyYXlbaTEtMl0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGsxID0gaTEgLSAxOworICAgICAgICAgICAgICAgICAgazIgPSBuIC0gajE7CisJCX0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGsxID0gaTEgLSAxOworICAgICAgICAgICAgICAgICAgazIgPSBuICsgMSAtIGoxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgazEgPSAxOworICAgICAgazIgPSBuICsgMSAtIG07CisgICAgfQorIGxlYXZlOgorICAvKiBOb3cgY29tcGxlbWVudCB0aGUgdHdvIHNlbGVjdGVkIGJpdHMuICovCisgIGFycmF5W2sxLTFdID0gIWFycmF5W2sxLTFdOworICBhcnJheVtrMi0xXSA9ICFhcnJheVtrMi0xXTsKK30KKworCisvKiBHZW5lcmF0ZSBhIG5ldyBwcmltZSBudW1iZXIgb2YgUFJJTUVfQklUUyBiaXRzIGFuZCBzdG9yZSBpdCBpbgorICAgUFJJTUUuICBJZiBGQUNUT1JfQklUUyBpcyBub24temVybywgb25lIG9mIHRoZSBwcmltZSBmYWN0b3JzIG9mCisgICAocHJpbWUgLSAxKSAvIDIgbXVzdCBiZSBGQUNUT1JfQklUUyBiaXRzIGxvbmcuICBJZiBGQUNUT1JTIGlzCisgICBub24temVybywgYWxsb2NhdGUgYSBuZXcsIE5VTEwtdGVybWluYXRlZCBhcnJheSBob2xkaW5nIHRoZSBwcmltZQorICAgZmFjdG9ycyBhbmQgc3RvcmUgaXQgaW4gRkFDVE9SUy4gIEZMQUdTIG1pZ2h0IGJlIHVzZWQgdG8gaW5mbHVlbmNlCisgICB0aGUgcHJpbWUgbnVtYmVyIGdlbmVyYXRpb24gcHJvY2Vzcy4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3ByaW1lX2dlbmVyYXRlIChnY3J5X21waV90ICpwcmltZSwgdW5zaWduZWQgaW50IHByaW1lX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZhY3Rvcl9iaXRzLCBnY3J5X21waV90ICoqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICBnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCBjYl9mdW5jLCB2b2lkICpjYl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSAwOworICBnY3J5X21waV90ICpmYWN0b3JzX2dlbmVyYXRlZCA9IE5VTEw7CisgIGdjcnlfbXBpX3QgcHJpbWVfZ2VuZXJhdGVkID0gTlVMTDsKKyAgdW5zaWduZWQgaW50IG1vZGUgPSAwOworCisgIGlmICghcHJpbWUpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgKnByaW1lID0gTlVMTDsKKworICBpZiAoZmxhZ3MgJiBHQ1JZX1BSSU1FX0ZMQUdfU1BFQ0lBTF9GQUNUT1IpCisgICAgbW9kZSA9IDE7CisKKyAgLyogR2VuZXJhdGUuICAqLworICByYyA9IHByaW1lX2dlbmVyYXRlX2ludGVybmFsICgobW9kZT09MSksICZwcmltZV9nZW5lcmF0ZWQsIHByaW1lX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9iaXRzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JzPyAmZmFjdG9yc19nZW5lcmF0ZWQgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fbGV2ZWwsIGZsYWdzLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYl9mdW5jLCBjYl9hcmcpOworCisgIGlmICghcmMgJiYgY2JfZnVuYykKKyAgICB7CisgICAgICAvKiBBZGRpdGlvbmFsIGNoZWNrLiAqLworICAgICAgaWYgKCAhY2JfZnVuYyAoY2JfYXJnLCBHQ1JZX1BSSU1FX0NIRUNLX0FUX0ZJTklTSCwgcHJpbWVfZ2VuZXJhdGVkKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEZhaWxlZCwgZGVhbGxvY2F0ZSByZXNvdXJjZXMuICAqLworICAgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgICAgbXBpX2ZyZWUgKHByaW1lX2dlbmVyYXRlZCk7CisgICAgICAgICAgaWYgKGZhY3RvcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGZhY3RvcnNfZ2VuZXJhdGVkW2ldOyBpKyspCisgICAgICAgICAgICAgICAgbXBpX2ZyZWUgKGZhY3RvcnNfZ2VuZXJhdGVkW2ldKTsKKyAgICAgICAgICAgICAgeGZyZWUgKGZhY3RvcnNfZ2VuZXJhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICByYyA9IEdQR19FUlJfR0VORVJBTDsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIXJjKQorICAgIHsKKyAgICAgIGlmIChmYWN0b3JzKQorICAgICAgICAqZmFjdG9ycyA9IGZhY3RvcnNfZ2VuZXJhdGVkOworICAgICAgKnByaW1lID0gcHJpbWVfZ2VuZXJhdGVkOworICAgIH0KKworICByZXR1cm4gcmM7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIG51bWJlciBYIGlzIHByaW1lLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcHJpbWVfY2hlY2sgKGdjcnlfbXBpX3QgeCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSAwOworICBnY3J5X21waV90IHZhbF8yID0gbXBpX2FsbG9jX3NldF91aSAoMik7IC8qIFVzZWQgYnkgdGhlIEZlcm1hdCB0ZXN0LiAqLworCisgICh2b2lkKWZsYWdzOworCisgIC8qIFdlIHVzZSA2NCByb3VuZHMgYmVjYXVzZSB0aGUgcHJpbWUgd2UgYXJlIGdvaW5nIHRvIHRlc3QgaXMgbm90CisgICAgIGd1YXJhbnRlZWQgdG8gYmUgYSByYW5kb20gb25lLiAqLworICBpZiAoISBjaGVja19wcmltZSAoeCwgdmFsXzIsIDY0LCBOVUxMLCBOVUxMKSkKKyAgICByYyA9IEdQR19FUlJfTk9fUFJJTUU7CisKKyAgbXBpX2ZyZWUgKHZhbF8yKTsKKworICByZXR1cm4gcmM7Cit9CisKKy8qIEZpbmQgYSBnZW5lcmF0b3IgZm9yIFBSSU1FIHdoZXJlIHRoZSBmYWN0b3JpemF0aW9uIG9mIChwcmltZS0xKSBpcworICAgaW4gdGhlIE5VTEwgdGVybWluYXRlZCBhcnJheSBGQUNUT1JTLiBSZXR1cm4gdGhlIGdlbmVyYXRvciBhcyBhCisgICBuZXdseSBhbGxvY2F0ZWQgTVBJIGluIFJfRy4gIElmIFNUQVJUX0cgaXMgbm90IE5VTEwsIHVzZSB0aGlzIGFzIHMKKyAgIGF0YXJ0IGZvciB0aGUgc2VhcmNoLiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4qLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgKGdjcnlfbXBpX3QgKnJfZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBwcmltZSwgZ2NyeV9tcGlfdCAqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBzdGFydF9nKQoreworICBnY3J5X21waV90IHRtcCAgID0gbXBpX25ldyAoMCk7CisgIGdjcnlfbXBpX3QgYiAgICAgPSBtcGlfbmV3ICgwKTsKKyAgZ2NyeV9tcGlfdCBwbWluMSA9IG1waV9uZXcgKDApOworICBnY3J5X21waV90IGcgPSBzdGFydF9nPyBtcGlfY29weSAoc3RhcnRfZykgOiBtcGlfc2V0X3VpIChOVUxMLCAzKTsKKyAgaW50IGZpcnN0ID0gMTsKKyAgaW50IGksIG47CisKKyAgaWYgKCFmYWN0b3JzIHx8ICFyX2cgfHwgIXByaW1lKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisgICpyX2cgPSBOVUxMOworCisgIGZvciAobj0wOyBmYWN0b3JzW25dOyBuKyspCisgICAgOworICBpZiAobiA8IDIpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICAvKiBFeHRyYSBzYW5pdHkgY2hlY2sgLSB1c3VhbGx5IGRpc2FibGVkLiAqLworLyogICBtcGlfc2V0ICh0bXAsIGZhY3RvcnNbMF0pOyAqLworLyogICBmb3IoaSA9IDE7IGkgPCBuOyBpKyspICovCisvKiAgICAgbXBpX211bCAodG1wLCB0bXAsIGZhY3RvcnNbaV0pOyAqLworLyogICBtcGlfYWRkX3VpICh0bXAsIHRtcCwgMSk7ICovCisvKiAgIGlmIChtcGlfY21wIChwcmltZSwgdG1wKSkgKi8KKy8qICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9BUkcpOyAqLworCisgIG1waV9zdWJfdWkgKHBtaW4xLCBwcmltZSwgMSk7CisgIGRvCisgICAgeworICAgICAgaWYgKGZpcnN0KQorICAgICAgICBmaXJzdCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIG1waV9hZGRfdWkgKGcsIGcsIDEpOworCisgICAgICBpZiAoREJHX0NJUEhFUikKKyAgICAgICAgbG9nX3ByaW50bXBpICgiY2hlY2tpbmcgZyIsIGcpOworICAgICAgZWxzZQorICAgICAgICBwcm9ncmVzcygnXicpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgbXBpX2ZkaXZfcSAodG1wLCBwbWluMSwgZmFjdG9yc1tpXSk7CisgICAgICAgICAgbXBpX3Bvd20gKGIsIGcsIHRtcCwgcHJpbWUpOworICAgICAgICAgIGlmICghIG1waV9jbXBfdWkgKGIsIDEpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmIChEQkdfQ0lQSEVSKQorICAgICAgICBwcm9ncmVzcygnXG4nKTsKKyAgICB9CisgIHdoaWxlIChpIDwgbik7CisKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHRtcCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChiKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBtaW4xKTsKKyAgKnJfZyA9IGc7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIGZhY3RvcnMgYXJyYXkuICovCit2b2lkCitfZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMgKGdjcnlfbXBpX3QgKmZhY3RvcnMpCit7CisgIGlmIChmYWN0b3JzKQorICAgIHsKKyAgICAgIGludCBpOworCisgICAgICBmb3IgKGk9MDsgZmFjdG9yc1tpXTsgaSsrKQorICAgICAgICBtcGlfZnJlZSAoZmFjdG9yc1tpXSk7CisgICAgICB4ZnJlZSAoZmFjdG9ycyk7CisgICAgfQorfQorCisKKwwKKy8qIEhlbHBlciBmb3IgX2djcnlfZGVyaXZlX3g5MzFfcHJpbWUuICAqLworc3RhdGljIGdjcnlfbXBpX3QKK2ZpbmRfeDkzMV9wcmltZSAoY29uc3QgZ2NyeV9tcGlfdCBwZmlyc3QpCit7CisgIGdjcnlfbXBpX3QgdmFsXzIgPSBtcGlfYWxsb2Nfc2V0X3VpICgyKTsKKyAgZ2NyeV9tcGlfdCBwcmltZTsKKworICBwcmltZSA9IG1waV9jb3B5IChwZmlyc3QpOworICAvKiBJZiBQIGlzIGV2ZW4gYWRkIDEuICAqLworICBtcGlfc2V0X2JpdCAocHJpbWUsIDApOworCisgIC8qIFdlIHVzZSA2NCBSYWJpbi1NaWxsZXIgcm91bmRzIHdoaWNoIGlzIGJldHRlciBhbmQgdGh1cworICAgICBzdWZmaWNpZW50LiAgV2UgZG8gbm90IGhhdmUgYSBMdWNhcyB0ZXN0IGltcGxlbWVudGFpb24gdGh1cyB3ZQorICAgICBjYW4ndCBkbyBpdCBpbiB0aGUgWDkuMzEgcHJlZmVycmVkIHdheSBvZiBydW5uaW5nIGEgZmV3CisgICAgIFJhYmluLU1pbGxlciBmb2xsb3dlZCBieSBvbmUgTHVjYXMgdGVzdC4gICovCisgIHdoaWxlICggIWNoZWNrX3ByaW1lIChwcmltZSwgdmFsXzIsIDY0LCBOVUxMLCBOVUxMKSApCisgICAgbXBpX2FkZF91aSAocHJpbWUsIHByaW1lLCAyKTsKKworICBtcGlfZnJlZSAodmFsXzIpOworCisgIHJldHVybiBwcmltZTsKK30KKworCisvKiBHZW5lcmF0ZSBhIHByaW1lIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBYOS4zMSBhcHBlbmRpeCBCLjQuCisKKyAgIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgcHJvdmlkZWQgcHVibGljIGV4cG9uZW50IEUgaXMgb2RkLgorICAgWFAsIFhQMSBhbmQgWFAyIGFyZSB0aGUgc2VlZCB2YWx1ZXMuICBBbGwgdmFsdWVzIGFyZSBtYW5kYXRvcnkuCisKKyAgIE9uIHN1Y2Nlc3MgdGhlIHByaW1lIGlzIHJldHVybmVkLiAgSWYgUl9QMSBvciBSX1AyIGFyZSBnaXZlbiB0aGUKKyAgIGludGVybmFsIHZhbHVlcyBQMSBhbmQgUDIgYXJlIHNhdmVkIGF0IHRoZXNlIGFkZHJlc3Nlcy4gIE9uIGVycm9yCisgICBOVUxMIGlzIHJldHVybmVkLiAgKi8KK2djcnlfbXBpX3QKK19nY3J5X2Rlcml2ZV94OTMxX3ByaW1lIChjb25zdCBnY3J5X21waV90IHhwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgeHAxLCBjb25zdCBnY3J5X21waV90IHhwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X21waV90IGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqcl9wMSwgZ2NyeV9tcGlfdCAqcl9wMikKK3sKKyAgZ2NyeV9tcGlfdCBwMSwgcDIsIHAxcDIsIHlwMDsKKworICBpZiAoIXhwIHx8ICF4cDEgfHwgIXhwMikKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCFlIHx8ICFtcGlfdGVzdF9iaXQgKGUsIDApKQorICAgIHJldHVybiBOVUxMOyAgLyogV2Ugc3VwcG9ydCBvbmx5IG9kZCB2YWx1ZXMgZm9yIEUuICAqLworCisgIHAxID0gZmluZF94OTMxX3ByaW1lICh4cDEpOworICBwMiA9IGZpbmRfeDkzMV9wcmltZSAoeHAyKTsKKyAgcDFwMiA9IG1waV9hbGxvY19saWtlICh4cCk7CisgIG1waV9tdWwgKHAxcDIsIHAxLCBwMik7CisKKyAgeworICAgIGdjcnlfbXBpX3QgcjEsIHRtcDsKKworICAgIC8qIHIxID0gKHAyXnstMX0gbW9kIHAxKXAyIC0gKHAxXnstMX0gbW9kIHAyKSAqLworICAgIHRtcCA9IG1waV9hbGxvY19saWtlIChwMSk7CisgICAgbXBpX2ludm0gKHRtcCwgcDIsIHAxKTsKKyAgICBtcGlfbXVsICh0bXAsIHRtcCwgcDIpOworICAgIHIxID0gdG1wOworCisgICAgdG1wID0gbXBpX2FsbG9jX2xpa2UgKHAyKTsKKyAgICBtcGlfaW52bSAodG1wLCBwMSwgcDIpOworICAgIG1waV9tdWwgKHRtcCwgdG1wLCBwMSk7CisgICAgbXBpX3N1YiAocjEsIHIxLCB0bXApOworCisgICAgLyogRml4dXAgYSBuZWdhdGl2ZSB2YWx1ZS4gICovCisgICAgaWYgKG1waV9oYXNfc2lnbiAocjEpKQorICAgICAgbXBpX2FkZCAocjEsIHIxLCBwMXAyKTsKKworICAgIC8qIHlwMCA9IHhwICsgKHIxIC0geHAgbW9kIHAxKnAyKSAgKi8KKyAgICB5cDAgPSB0bXA7IHRtcCA9IE5VTEw7CisgICAgbXBpX3N1Ym0gKHlwMCwgcjEsIHhwLCBwMXAyKTsKKyAgICBtcGlfYWRkICh5cDAsIHlwMCwgeHApOworICAgIG1waV9mcmVlIChyMSk7CisKKyAgICAvKiBGaXh1cCBhIG5lZ2F0aXZlIHZhbHVlLiAgKi8KKyAgICBpZiAobXBpX2NtcCAoeXAwLCB4cCkgPCAwICkKKyAgICAgIG1waV9hZGQgKHlwMCwgeXAwLCBwMXAyKTsKKyAgfQorCisgIC8qIHlwMCBpcyBub3cgdGhlIGZpcnN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHhwIHdpdGggcDEgYmVpbmcgYQorICAgICBsYXJnZSBwcmltZSBmYWN0b3Igb2YgeXAwLTEgYW5kIHAyIGEgbGFyZ2UgcHJpbWUgZmFjdG9yIG9mIHlwMCsxLiAgKi8KKworICAvKiBOb3RlIHRoYXQgdGhlIGZpcnN0IGV4YW1wbGUgZnJvbSBYOS4zMSAoRC4xLjEpIHdoaWNoIHVzZXMKKyAgICAgICAoWHExICMxQTVDRjcyRUU3NzBERTUwQ0IwOUFDQ0VBOSMpCisgICAgICAgKFhxMiAjMTM0RTRDQUExNkQyMzUwQTIxRDc3NUM0MDQjKQorICAgICAgIChYcSAgI0NDMTA5MjQ5NUQ4NjdFNjQwNjVERUUzRTc5NTVGMkVCQzdENDdBMkQKKyAgICAgICAgICAgICA3Qzk5NTMzODhGOTdERERDM0UxQ0ExOUMzNUNBNjU5RURDMkZDMzI1CisgICAgICAgICAgICAgNkQyOUMyNjI3NDc5QzA4NkE2OTlBNDlDNEM5Q0VFN0VGN0JEMUIzNAorICAgICAgICAgICAgIDMyMURFMzRBIykpKSkKKyAgICAgcmV0dXJucyBhbiB5cDAgb2YKKyAgICAgICAgICAgICNDQzEwOTI0OTVEODY3RTY0MDY1REVFM0U3OTU1RjJFQkM3RDQ3QTJECisgICAgICAgICAgICAgN0M5OTUzMzg4Rjk3REREQzNFMUNBMTlDMzVDQTY1OUVEQzJGQzRFMworICAgICAgICAgICAgIEJGMjBDQjg5NkVFMzdFMDk4QTkwNjMxMzI3MTQyMjE2MkNCNkM2NDIKKyAgICAgICAgICAgICA3NUMxMjAxRiMKKyAgICAgYW5kIG5vdAorICAgICAgICAgICAgI0NDMTA5MjQ5NUQ4NjdFNjQwNjVERUUzRTc5NTVGMkVCQzdENDdBMkQKKyAgICAgICAgICAgICA3Qzk5NTMzODhGOTdERERDM0UxQ0ExOUMzNUNBNjU5RURDMkZDMkU2CisgICAgICAgICAgICAgQzg4RkUyOTlENTJENzhCRTQwNUE5N0UwMUZENzFERDc4MTlFQ0I5MQorICAgICAgICAgICAgIEZBODVBMDc2IworICAgICBhcyBzdGF0ZWQgaW4gdGhlIHN0YW5kYXJkLiAgVGhpcyBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBYOS4zMS4KKyAgICovCisKKyAgeworICAgIGdjcnlfbXBpX3QgdmFsXzIgPSBtcGlfYWxsb2Nfc2V0X3VpICgyKTsKKyAgICBnY3J5X21waV90IGdjZHRtcCA9IG1waV9hbGxvY19saWtlICh5cDApOworICAgIGludCBnY2RyZXM7CisKKyAgICBtcGlfc3ViX3VpIChwMXAyLCBwMXAyLCAxKTsgLyogQWRqdXN0IGZvciBsb29wIGJvZHkuICAqLworICAgIG1waV9zdWJfdWkgKHlwMCwgeXAwLCAxKTsgICAvKiBEaXR0by4gICovCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgZ2NkcmVzID0gbXBpX2djZCAoZ2NkdG1wLCBlLCB5cDApOworICAgICAgICBtcGlfYWRkX3VpICh5cDAsIHlwMCwgMSk7CisgICAgICAgIGlmICghZ2NkcmVzKQorICAgICAgICAgIHByb2dyZXNzICgnLycpOyAgLyogZ2NkIChlLCB5cDAtMSkgIT0gMSAgKi8KKyAgICAgICAgZWxzZSBpZiAoY2hlY2tfcHJpbWUgKHlwMCwgdmFsXzIsIDY0LCBOVUxMLCBOVUxMKSkKKyAgICAgICAgICBicmVhazsgLyogRm91bmQuICAqLworICAgICAgICAvKiBXZSBhZGQgcDFwMi0xIGJlY2F1c2UgeXAwIGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBnY2QgdGVzdC4gICovCisgICAgICAgIG1waV9hZGQgKHlwMCwgeXAwLCBwMXAyKTsKKyAgICAgIH0KKyAgICBtcGlfZnJlZSAoZ2NkdG1wKTsKKyAgICBtcGlfZnJlZSAodmFsXzIpOworICB9CisKKyAgbXBpX2ZyZWUgKHAxcDIpOworCisgIHByb2dyZXNzKCdcbicpOworICBpZiAocl9wMSkKKyAgICAqcl9wMSA9IHAxOworICBlbHNlCisgICAgbXBpX2ZyZWUgKHAxKTsKKyAgaWYgKHJfcDIpCisgICAgKnJfcDIgPSBwMjsKKyAgZWxzZQorICAgIG1waV9mcmVlIChwMik7CisgIHJldHVybiB5cDA7Cit9CisKKworDAorLyogR2VuZXJhdGUgdGhlIHR3byBwcmltZSB1c2VkIGZvciBEU0EgdXNpbmcgdGhlIGFsZ29yaXRobSBzcGVjaWZpZWQKKyAgIGluIEZJUFMgMTg2LTIuICBQQklUUyBpcyB0aGUgZGVzaXJlZCBsZW5ndGggb2YgdGhlIHByaW1lIFAgYW5kIGEKKyAgIFFCSVRTIHRoZSBsZW5ndGggb2YgdGhlIHByaW1lIFEuICBJZiBTRUVEIGlzIG5vdCBzdXBwbGllZCBhbmQKKyAgIFNFRURMRU4gaXMgMCB0aGUgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIGFwcHJvcHJpYXRlIFNFRUQuICBPbgorICAgc3VjY2VzcyB0aGUgZ2VuZXJhdGVkIHByaW1lcyBhcmUgc3RvcmVkIGF0IFJfUSBhbmQgUl9QLCB0aGUgY291bnRlcgorICAgdmFsdWUgaXMgc3RvcmVkIGF0IFJfQ09VTlRFUiBhbmQgdGhlIHNlZWQgYWN0dWFsbHkgdXNlZCBmb3IKKyAgIGdlbmVyYXRpb24gaXMgc3RvcmVkIGF0IFJfU0VFRCBhbmQgUl9TRUVEVkFMVUUuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2dlbmVyYXRlX2ZpcHMxODZfMl9wcmltZSAodW5zaWduZWQgaW50IHBiaXRzLCB1bnNpZ25lZCBpbnQgcWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICpyX3EsIGdjcnlfbXBpX3QgKnJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipyX3NlZWQsIHNpemVfdCAqcl9zZWVkbGVuKQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKyAgdW5zaWduZWQgY2hhciBzZWVkX2hlbHBfYnVmZmVyWzE2MC84XTsgIC8qIFVzZWQgdG8gaG9sZCBhIGdlbmVyYXRlZCBTRUVELiAqLworICB1bnNpZ25lZCBjaGFyICpzZWVkX3BsdXM7ICAgICAvKiBNYWxsb2NlZCBidWZmZXIgdG8gaG9sZCBTRUVEK3guICAqLworICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNjAvOF07ICAvKiBIZWxwZXIgYnVmZmVyIGZvciBTSEEtMSBkaWdlc3QuICAqLworICBnY3J5X21waV90IHZhbF8yID0gTlVMTDsgICAgICAvKiBIZWxwZXIgZm9yIHRoZSBwcmltZSB0ZXN0LiAgKi8KKyAgZ2NyeV9tcGlfdCB0bXB2YWwgPSBOVUxMOyAgICAgLyogSGVscGVyIHZhcmlhYmxlLiAgKi8KKyAgaW50IGk7CisKKyAgdW5zaWduZWQgY2hhciB2YWx1ZV91WzE2MC84XTsKKyAgaW50IHZhbHVlX24sIHZhbHVlX2IsIHZhbHVlX2s7CisgIGludCBjb3VudGVyOworICBnY3J5X21waV90IHZhbHVlX3cgPSBOVUxMOworICBnY3J5X21waV90IHZhbHVlX3ggPSBOVUxMOworICBnY3J5X21waV90IHByaW1lX3EgPSBOVUxMOworICBnY3J5X21waV90IHByaW1lX3AgPSBOVUxMOworCisgIC8qIEZJUFMgMTg2LTIgYWxsb3dzIG9ubHkgZm9yIDEwMjQvMTYwIGJpdC4gICovCisgIGlmIChwYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfS0VZTEVOOworCisgIGlmICghc2VlZCAmJiAhc2VlZGxlbikKKyAgICA7IC8qIE5vIHNlZWQgdmFsdWUgZ2l2ZW46ICBXZSBhcmUgYXNrZWQgdG8gZ2VuZXJhdGUgaXQuICAqLworICBlbHNlIGlmICghc2VlZCB8fCBzZWVkbGVuIDwgcWJpdHMvOCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworCisgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIGxhdGVyIGNvbXB1dGUgU0VFRCtzb21lX2luY3JlbWVudC4gKi8KKyAgc2VlZF9wbHVzID0geHRyeW1hbGxvYyAoc2VlZGxlbiA8IDIwPyAyMDpzZWVkbGVuKTsKKyAgaWYgKCFzZWVkX3BsdXMpCisgICAgeworICAgICAgZWMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHZhbF8yICAgPSBtcGlfYWxsb2Nfc2V0X3VpICgyKTsKKyAgdmFsdWVfbiA9IChwYml0cyAtIDEpIC8gcWJpdHM7CisgIHZhbHVlX2IgPSAocGJpdHMgLSAxKSAtIHZhbHVlX24gKiBxYml0czsKKyAgdmFsdWVfdyA9IG1waV9uZXcgKHBiaXRzKTsKKyAgdmFsdWVfeCA9IG1waV9uZXcgKHBiaXRzKTsKKworIHJlc3RhcnQ6CisgIC8qIEdlbmVyYXRlIFEuICAqLworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIC8qIFN0ZXAgMTogR2VuZXJhdGUgYSAobmV3KSBzZWVkIHVubGVzcyBvbmUgaGFzIGJlZW4gc3VwcGxpZWQuICAqLworICAgICAgaWYgKCFzZWVkKQorICAgICAgICB7CisgICAgICAgICAgc2VlZGxlbiA9IHNpemVvZiBzZWVkX2hlbHBfYnVmZmVyOworICAgICAgICAgIF9nY3J5X2NyZWF0ZV9ub25jZSAoc2VlZF9oZWxwX2J1ZmZlciwgc2VlZGxlbik7CisgICAgICAgICAgc2VlZCA9IHNlZWRfaGVscF9idWZmZXI7CisgICAgICAgIH0KKworICAgICAgLyogU3RlcCAyOiBVID0gc2hhMShzZWVkKSBeIHNoYTEoKHNlZWQrMSkgbW9kIDJee3FiaXRzfSkgICovCisgICAgICBtZW1jcHkgKHNlZWRfcGx1cywgc2VlZCwgc2VlZGxlbik7CisgICAgICBmb3IgKGk9c2VlZGxlbi0xOyBpID49IDA7IGktLSkKKyAgICAgICAgeworICAgICAgICAgIHNlZWRfcGx1c1tpXSsrOworICAgICAgICAgIGlmIChzZWVkX3BsdXNbaV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgX2djcnlfbWRfaGFzaF9idWZmZXIgKEdDUllfTURfU0hBMSwgdmFsdWVfdSwgc2VlZCwgc2VlZGxlbik7CisgICAgICBfZ2NyeV9tZF9oYXNoX2J1ZmZlciAoR0NSWV9NRF9TSEExLCBkaWdlc3QsIHNlZWRfcGx1cywgc2VlZGxlbik7CisgICAgICBmb3IgKGk9MDsgaSA8IHNpemVvZiB2YWx1ZV91OyBpKyspCisgICAgICAgIHZhbHVlX3VbaV0gXj0gZGlnZXN0W2ldOworCisgICAgICAvKiBTdGVwIDM6ICBGb3JtIHEgZnJvbSBVICAqLworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKHByaW1lX3EpOyBwcmltZV9xID0gTlVMTDsKKyAgICAgIGVjID0gX2djcnlfbXBpX3NjYW4gKCZwcmltZV9xLCBHQ1JZTVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV91LCBzaXplb2YgdmFsdWVfdSwgTlVMTCk7CisgICAgICBpZiAoZWMpCisgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICBtcGlfc2V0X2hpZ2hiaXQgKHByaW1lX3EsIHFiaXRzLTEgKTsKKyAgICAgIG1waV9zZXRfYml0IChwcmltZV9xLCAwKTsKKworICAgICAgLyogU3RlcCA0OiAgVGVzdCB3aGV0aGVyIFEgaXMgcHJpbWUgdXNpbmcgNjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyLiAgKi8KKyAgICAgIGlmIChjaGVja19wcmltZSAocHJpbWVfcSwgdmFsXzIsIDY0LCBOVUxMLCBOVUxMKSkKKyAgICAgICAgYnJlYWs7IC8qIFllcywgUSBpcyBwcmltZS4gICovCisKKyAgICAgIC8qIFN0ZXAgNS4gICovCisgICAgICBzZWVkID0gTlVMTDsgIC8qIEZvcmNlIGEgbmV3IHNlZWQgYXQgU3RlcCAxLiAgKi8KKyAgICB9CisKKyAgLyogU3RlcCA2LiAgTm90ZSB0aGF0IHdlIGRvIG5vIHVzZSBhbiBleHBsaWNpdCBvZmZzZXQgYnV0IGluY3JlbWVudAorICAgICBTRUVEX1BMVVMgYWNjb3JkaW5nbHkuICBTRUVEX1BMVVMgaXMgY3VycmVudGx5IFNFRUQrMS4gICovCisgIGNvdW50ZXIgPSAwOworCisgIC8qIEdlbmVyYXRlIFAuICovCisgIHByaW1lX3AgPSBtcGlfbmV3IChwYml0cyk7CisgIGZvciAoOzspCisgICAgeworICAgICAgLyogU3RlcCA3OiBGb3IgayA9IDAsLi4ubiBsZXQKKyAgICAgICAgICAgICAgICAgICBWX2sgPSBzaGExKHNlZWQrb2Zmc2V0K2spIG1vZCAyXntxYml0c30KKyAgICAgICAgIFN0ZXAgODogVyA9IFZfMCArIFZfMSoyXjE2MCArCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgKyBWX3tuLTF9KjJeeyhuLTEpKjE2MH0KKyAgICAgICAgICAgICAgICAgICAgICAgICArIChWX3tufSBtb2QgMl5iKSoyXntuKjE2MH0KKyAgICAgICAqLworICAgICAgbXBpX3NldF91aSAodmFsdWVfdywgMCk7CisgICAgICBmb3IgKHZhbHVlX2s9MDsgdmFsdWVfayA8PSB2YWx1ZV9uOyB2YWx1ZV9rKyspCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGVyZSBpcyBubyBuZWVkIHRvIGhhdmUgYW4gZXhwbGljaXQgb2Zmc2V0IHZhcmlhYmxlOiAgSW4KKyAgICAgICAgICAgICB0aGUgZmlyc3Qgcm91bmQgd2Ugc2hhbGwgaGF2ZSBhbiBvZmZzZXQgb2YgMiwgdGhpcyBpcworICAgICAgICAgICAgIGFjaGlldmVkIGJ5IHVzaW5nIFNFRURfUExVUyB3aGljaCBpcyBhbHJlYWR5IGF0IFNFRUQrMSwKKyAgICAgICAgICAgICB0aHVzIHdlIGp1c3QgbmVlZCB0byBpbmNyZW1lbnQgaXQgb25jZSBhZ2Fpbi4gIFRoZQorICAgICAgICAgICAgIHJlcXVpcmVtZW50IGZvciB0aGUgbmV4dCByb3VuZCBpcyB0byB1cGRhdGUgb2Zmc2V0IGJ5IE4sCisgICAgICAgICAgICAgd2hpY2ggd2UgaW1wbGljdGx5IGRpZCBhdCB0aGUgZW5kIG9mIHRoaXMgbG9vcCwgYW5kIHRoZW4KKyAgICAgICAgICAgICB0byBhZGQgb25lOyB0aGlzIG9uZSBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgZmlyc3Qgcm91bmQuICAqLworICAgICAgICAgIGZvciAoaT1zZWVkbGVuLTE7IGkgPj0gMDsgaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWVkX3BsdXNbaV0rKzsKKyAgICAgICAgICAgICAgaWYgKHNlZWRfcGx1c1tpXSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfZ2NyeV9tZF9oYXNoX2J1ZmZlciAoR0NSWV9NRF9TSEExLCBkaWdlc3QsIHNlZWRfcGx1cywgc2VlZGxlbik7CisKKyAgICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAodG1wdmFsKTsgdG1wdmFsID0gTlVMTDsKKyAgICAgICAgICBlYyA9IF9nY3J5X21waV9zY2FuICgmdG1wdmFsLCBHQ1JZTVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LCBzaXplb2YgZGlnZXN0LCBOVUxMKTsKKyAgICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgIGlmICh2YWx1ZV9rID09IHZhbHVlX24pCisgICAgICAgICAgICBtcGlfY2xlYXJfaGlnaGJpdCAodG1wdmFsLCB2YWx1ZV9iKTsgLyogKFZfbiBtb2QgMl5iKSAqLworICAgICAgICAgIG1waV9sc2hpZnQgKHRtcHZhbCwgdG1wdmFsLCB2YWx1ZV9rKnFiaXRzKTsKKyAgICAgICAgICBtcGlfYWRkICh2YWx1ZV93LCB2YWx1ZV93LCB0bXB2YWwpOworICAgICAgICB9CisKKyAgICAgIC8qIFN0ZXAgOCBjb250aW51ZWQ6IFggPSBXICsgMl57TC0xfSAgKi8KKyAgICAgIG1waV9zZXRfdWkgKHZhbHVlX3gsIDApOworICAgICAgbXBpX3NldF9oaWdoYml0ICh2YWx1ZV94LCBwYml0cy0xKTsKKyAgICAgIG1waV9hZGQgKHZhbHVlX3gsIHZhbHVlX3gsIHZhbHVlX3cpOworCisgICAgICAvKiBTdGVwIDk6ICBjID0gWCBtb2QgMnEsICBwID0gWCAtIChjIC0gMSkgICovCisgICAgICBtcGlfbXVsXzJleHAgKHRtcHZhbCwgcHJpbWVfcSwgMSk7CisgICAgICBtcGlfbW9kICh0bXB2YWwsIHZhbHVlX3gsIHRtcHZhbCk7CisgICAgICBtcGlfc3ViX3VpICh0bXB2YWwsIHRtcHZhbCwgMSk7CisgICAgICBtcGlfc3ViIChwcmltZV9wLCB2YWx1ZV94LCB0bXB2YWwpOworCisgICAgICAvKiBTdGVwIDEwOiBJZiAgcCA8IDJee0wtMX0gIHNraXAgdGhlIHByaW1hbGl0eSB0ZXN0LiAgKi8KKyAgICAgIC8qIFN0ZXAgMTEgYW5kIDEyOiBQcmltYWxpdHkgdGVzdC4gICovCisgICAgICBpZiAobXBpX2dldF9uYml0cyAocHJpbWVfcCkgPj0gcGJpdHMtMQorICAgICAgICAgICYmIGNoZWNrX3ByaW1lIChwcmltZV9wLCB2YWxfMiwgNjQsIE5VTEwsIE5VTEwpICkKKyAgICAgICAgYnJlYWs7IC8qIFllcywgUCBpcyBwcmltZSwgY29udGludWUgd2l0aCBTdGVwIDE1LiAgKi8KKworICAgICAgLyogU3RlcCAxMzogY291bnRlciA9IGNvdW50ZXIgKyAxLCBvZmZzZXQgPSBvZmZzZXQgKyBuICsgMS4gKi8KKyAgICAgIGNvdW50ZXIrKzsKKworICAgICAgLyogU3RlcCAxNDogSWYgY291bnRlciA+PSAyXjEyICBnb3RvIFN0ZXAgMS4gICovCisgICAgICBpZiAoY291bnRlciA+PSA0MDk2KQorICAgICAgICBnb3RvIHJlc3RhcnQ7CisgICAgfQorCisgIC8qIFN0ZXAgMTU6ICBTYXZlIHAsIHEsIGNvdW50ZXIgYW5kIHNlZWQuICAqLworLyogICBsb2dfZGVidWcgKCJmaXBzMTg2LTIgcGJpdHMgcD0ldSBxPSV1IGNvdW50ZXI9JWRcbiIsICovCisvKiAgICAgICAgICAgICAgbXBpX2dldF9uYml0cyAocHJpbWVfcCksIG1waV9nZXRfbmJpdHMgKHByaW1lX3EpLCBjb3VudGVyKTsgKi8KKy8qICAgbG9nX3ByaW50aGV4KCJmaXBzMTg2LTIgc2VlZDoiLCBzZWVkLCBzZWVkbGVuKTsgKi8KKy8qICAgbG9nX21waWR1bXAgKCJmaXBzMTg2LTIgcHJpbWUgcCIsIHByaW1lX3ApOyAqLworLyogICBsb2dfbXBpZHVtcCAoImZpcHMxODYtMiBwcmltZSBxIiwgcHJpbWVfcSk7ICovCisgIGlmIChyX3EpCisgICAgeworICAgICAgKnJfcSA9IHByaW1lX3E7CisgICAgICBwcmltZV9xID0gTlVMTDsKKyAgICB9CisgIGlmIChyX3ApCisgICAgeworICAgICAgKnJfcCA9IHByaW1lX3A7CisgICAgICBwcmltZV9wID0gTlVMTDsKKyAgICB9CisgIGlmIChyX2NvdW50ZXIpCisgICAgKnJfY291bnRlciA9IGNvdW50ZXI7CisgIGlmIChyX3NlZWQgJiYgcl9zZWVkbGVuKQorICAgIHsKKyAgICAgIG1lbWNweSAoc2VlZF9wbHVzLCBzZWVkLCBzZWVkbGVuKTsKKyAgICAgICpyX3NlZWQgPSBzZWVkX3BsdXM7CisgICAgICBzZWVkX3BsdXMgPSBOVUxMOworICAgICAgKnJfc2VlZGxlbiA9IHNlZWRsZW47CisgICAgfQorCisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHRtcHZhbCk7CisgIF9nY3J5X21waV9yZWxlYXNlICh2YWx1ZV94KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHZhbHVlX3cpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocHJpbWVfcCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChwcmltZV9xKTsKKyAgeGZyZWUgKHNlZWRfcGx1cyk7CisgIF9nY3J5X21waV9yZWxlYXNlICh2YWxfMik7CisgIHJldHVybiBlYzsKK30KKworCisMCisvKiBXQVJOSU5HOiBUaGUgY29kZSBiZWxvdyBoYXMgbm90IHlldCBiZWVuIHRlc3RlZCEgIEhvd2V2ZXIsIGl0IGlzCisgICBub3QgeWV0IHVzZWQuICBXZSBuZWVkIHRvIHdhaXQgZm9yIEZJUFMgMTg2LTMgZmluYWwgYW5kIGZvciB0ZXN0CisgICB2ZWN0b3JzLgorCisgICBHZW5lcmF0ZSB0aGUgdHdvIHByaW1lIHVzZWQgZm9yIERTQSB1c2luZyB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZAorICAgaW4gRklQUyAxODYtMywgQS4xLjEuMi4gIFBCSVRTIGlzIHRoZSBkZXNpcmVkIGxlbmd0aCBvZiB0aGUgcHJpbWUgUAorICAgYW5kIGEgUUJJVFMgdGhlIGxlbmd0aCBvZiB0aGUgcHJpbWUgUS4gIElmIFNFRUQgaXMgbm90IHN1cHBsaWVkIGFuZAorICAgU0VFRExFTiBpcyAwIHRoZSBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gYXBwcm9wcmlhdGUgU0VFRC4gIE9uCisgICBzdWNjZXNzIHRoZSBnZW5lcmF0ZWQgcHJpbWVzIGFyZSBzdG9yZWQgYXQgUl9RIGFuZCBSX1AsIHRoZSBjb3VudGVyCisgICB2YWx1ZSBpcyBzdG9yZWQgYXQgUl9DT1VOVEVSIGFuZCB0aGUgc2VlZCBhY3R1YWxseSB1c2VkIGZvcgorICAgZ2VuZXJhdGlvbiBpcyBzdG9yZWQgYXQgUl9TRUVEIGFuZCBSX1NFRURWQUxVRS4gIFRoZSBoYXNoIGFsZ29yaXRobQorICAgdXNlZCBpcyBzdG9yZWQgYXQgUl9IQVNIQUxHTy4KKworICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBmaXBzMTg2XzIgY29kZS4gIER1ZQorICAgdG8gdGhlIG1pbm9yIGRpZmZlcmVuY2VzLCBvdGhlciBidWZmZXIgc2l6ZXMgYW5kIGZvciBkb2N1bWVudGFyaW9uLAorICAgd2UgdXNlIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X2dlbmVyYXRlX2ZpcHMxODZfM19wcmltZSAodW5zaWduZWQgaW50IHBiaXRzLCB1bnNpZ25lZCBpbnQgcWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICpyX3EsIGdjcnlfbXBpX3QgKnJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipyX3NlZWQsIHNpemVfdCAqcl9zZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJfaGFzaGFsZ28pCit7CisgIGdwZ19lcnJfY29kZV90IGVjOworICB1bnNpZ25lZCBjaGFyIHNlZWRfaGVscF9idWZmZXJbMjU2LzhdOyAgLyogVXNlZCB0byBob2xkIGEgZ2VuZXJhdGVkIFNFRUQuICovCisgIHVuc2lnbmVkIGNoYXIgKnNlZWRfcGx1czsgICAgIC8qIE1hbGxvY2VkIGJ1ZmZlciB0byBob2xkIFNFRUQreC4gICovCisgIHVuc2lnbmVkIGNoYXIgZGlnZXN0WzI1Ni84XTsgIC8qIEhlbHBlciBidWZmZXIgZm9yIFNIQS0xIGRpZ2VzdC4gICovCisgIGdjcnlfbXBpX3QgdmFsXzIgPSBOVUxMOyAgICAgIC8qIEhlbHBlciBmb3IgdGhlIHByaW1lIHRlc3QuICAqLworICBnY3J5X21waV90IHRtcHZhbCA9IE5VTEw7ICAgICAvKiBIZWxwZXIgdmFyaWFibGUuICAqLworICBpbnQgaGFzaGFsZ287ICAgICAgICAgICAgICAgICAvKiBUaGUgaWQgb2YgdGhlIEFwcHJvdmVkIEhhc2ggRnVuY3Rpb24uICAqLworICBpbnQgaTsKKworICB1bnNpZ25lZCBjaGFyIHZhbHVlX3VbMjU2LzhdOworICBpbnQgdmFsdWVfbiwgdmFsdWVfYiwgdmFsdWVfajsKKyAgaW50IGNvdW50ZXI7CisgIGdjcnlfbXBpX3QgdmFsdWVfdyA9IE5VTEw7CisgIGdjcnlfbXBpX3QgdmFsdWVfeCA9IE5VTEw7CisgIGdjcnlfbXBpX3QgcHJpbWVfcSA9IE5VTEw7CisgIGdjcnlfbXBpX3QgcHJpbWVfcCA9IE5VTEw7CisKKyAgZ2NyeV9hc3NlcnQgKHNpemVvZiBzZWVkX2hlbHBfYnVmZmVyID09IHNpemVvZiBkaWdlc3QKKyAgICAgICAgICAgICAgICYmIHNpemVvZiBzZWVkX2hlbHBfYnVmZmVyID09IHNpemVvZiB2YWx1ZV91KTsKKworICAvKiBTdGVwIDE6ICBDaGVjayB0aGUgcmVxdWVzdGVkIHByaW1lIGxlbmd0aHMuICAqLworICAvKiBOb3RlIHRoYXQgZHVlIHRvIHRoZSBzaXplIG9mIG91ciBidWZmZXJzIFFCSVRTIGlzIGxpbWl0ZWQgdG8gMjU2LiAgKi8KKyAgaWYgKHBiaXRzID09IDEwMjQgJiYgcWJpdHMgPT0gMTYwKQorICAgIGhhc2hhbGdvID0gR0NSWV9NRF9TSEExOworICBlbHNlIGlmIChwYml0cyA9PSAyMDQ4ICYmIHFiaXRzID09IDIyNCkKKyAgICBoYXNoYWxnbyA9IEdDUllfTURfU0hBMjI0OworICBlbHNlIGlmIChwYml0cyA9PSAyMDQ4ICYmIHFiaXRzID09IDI1NikKKyAgICBoYXNoYWxnbyA9IEdDUllfTURfU0hBMjU2OworICBlbHNlIGlmIChwYml0cyA9PSAzMDcyICYmIHFiaXRzID09IDI1NikKKyAgICBoYXNoYWxnbyA9IEdDUllfTURfU0hBMjU2OworICBlbHNlCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICAvKiBBbHNvIGNoZWNrIHRoYXQgdGhlIGhhc2ggYWxnb3JpdGhtIGlzIGF2YWlsYWJsZS4gICovCisgIGVjID0gX2djcnlfbWRfdGVzdF9hbGdvIChoYXNoYWxnbyk7CisgIGlmIChlYykKKyAgICByZXR1cm4gZWM7CisgIGdjcnlfYXNzZXJ0IChxYml0cy84IDw9IHNpemVvZiBkaWdlc3QpOworICBnY3J5X2Fzc2VydCAoX2djcnlfbWRfZ2V0X2FsZ29fZGxlbiAoaGFzaGFsZ28pID09IHFiaXRzLzgpOworCisKKyAgLyogU3RlcCAyOiAgQ2hlY2sgc2VlZGxlbi4gICovCisgIGlmICghc2VlZCAmJiAhc2VlZGxlbikKKyAgICA7IC8qIE5vIHNlZWQgdmFsdWUgZ2l2ZW46ICBXZSBhcmUgYXNrZWQgdG8gZ2VuZXJhdGUgaXQuICAqLworICBlbHNlIGlmICghc2VlZCB8fCBzZWVkbGVuIDwgcWJpdHMvOCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworCisgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIGxhdGVyIGNvbXB1dGUgU0VFRCtzb21lX2luY3JlbWVudCBhbmQgYSBmZXcKKyAgICAgaGVscGVyIHZhcmlhYmxlcy4gICovCisgIHNlZWRfcGx1cyA9IHh0cnltYWxsb2MgKHNlZWRsZW4gPCBzaXplb2Ygc2VlZF9oZWxwX2J1ZmZlcj8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIHNlZWRfaGVscF9idWZmZXIgOiBzZWVkbGVuKTsKKyAgaWYgKCFzZWVkX3BsdXMpCisgICAgeworICAgICAgZWMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICB2YWxfMiAgID0gbXBpX2FsbG9jX3NldF91aSAoMik7CisgIHZhbHVlX3cgPSBtcGlfbmV3IChwYml0cyk7CisgIHZhbHVlX3ggPSBtcGlfbmV3IChwYml0cyk7CisKKyAgLyogU3RlcCAzOiBuID0gXGxjZWlsIEwgLyBvdXRsZW4gXHJjZWlsIC0gMSAgKi8KKyAgdmFsdWVfbiA9IChwYml0cyArIHFiaXRzIC0gMSkgLyBxYml0cyAtIDE7CisgIC8qIFN0ZXAgNDogYiA9IEwgLSAxIC0gKG4gKiBvdXRsZW4pICAqLworICB2YWx1ZV9iID0gcGJpdHMgLSAxIC0gKHZhbHVlX24gKiBxYml0cyk7CisKKyByZXN0YXJ0OgorICAvKiBHZW5lcmF0ZSBRLiAgKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICAvKiBTdGVwIDU6ICBHZW5lcmF0ZSBhIChuZXcpIHNlZWQgdW5sZXNzIG9uZSBoYXMgYmVlbiBzdXBwbGllZC4gICovCisgICAgICBpZiAoIXNlZWQpCisgICAgICAgIHsKKyAgICAgICAgICBzZWVkbGVuID0gcWJpdHMvODsKKyAgICAgICAgICBnY3J5X2Fzc2VydCAoc2VlZGxlbiA8PSBzaXplb2Ygc2VlZF9oZWxwX2J1ZmZlcik7CisgICAgICAgICAgX2djcnlfY3JlYXRlX25vbmNlIChzZWVkX2hlbHBfYnVmZmVyLCBzZWVkbGVuKTsKKyAgICAgICAgICBzZWVkID0gc2VlZF9oZWxwX2J1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAvKiBTdGVwIDY6ICBVID0gaGFzaChzZWVkKSAgKi8KKyAgICAgIF9nY3J5X21kX2hhc2hfYnVmZmVyIChoYXNoYWxnbywgdmFsdWVfdSwgc2VlZCwgc2VlZGxlbik7CisKKyAgICAgIC8qIFN0ZXAgNzogIHEgPSAyXntOLTF9ICsgVSArIDEgLSAoVSBtb2QgMikgICovCisgICAgICBpZiAoICEodmFsdWVfdVtxYml0cy84LTFdICYgMHgwMSkgKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpPXFiaXRzLzgtMTsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhbHVlX3VbaV0rKzsKKyAgICAgICAgICAgICAgaWYgKHZhbHVlX3VbaV0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChwcmltZV9xKTsgcHJpbWVfcSA9IE5VTEw7CisgICAgICBlYyA9IF9nY3J5X21waV9zY2FuICgmcHJpbWVfcSwgR0NSWU1QSV9GTVRfVVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdSwgc2l6ZW9mIHZhbHVlX3UsIE5VTEwpOworICAgICAgaWYgKGVjKQorICAgICAgICBnb3RvIGxlYXZlOworICAgICAgbXBpX3NldF9oaWdoYml0IChwcmltZV9xLCBxYml0cy0xICk7CisKKyAgICAgIC8qIFN0ZXAgODogIFRlc3Qgd2hldGhlciBRIGlzIHByaW1lIHVzaW5nIDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlci4KKyAgICAgICAgICAgICAgICAgIEFjY29yZGluZyB0byB0YWJsZSBDLjEgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhbGwKKyAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBwcmltZSBzaXplcyAoaS5lLiB1cCAzMDcyLzI1NikuICAqLworICAgICAgaWYgKGNoZWNrX3ByaW1lIChwcmltZV9xLCB2YWxfMiwgNjQsIE5VTEwsIE5VTEwpKQorICAgICAgICBicmVhazsgLyogWWVzLCBRIGlzIHByaW1lLiAgKi8KKworICAgICAgLyogU3RlcCA4LiAgKi8KKyAgICAgIHNlZWQgPSBOVUxMOyAgLyogRm9yY2UgYSBuZXcgc2VlZCBhdCBTdGVwIDUuICAqLworICAgIH0KKworICAvKiBTdGVwIDExLiAgTm90ZSB0aGF0IHdlIGRvIG5vIHVzZSBhbiBleHBsaWNpdCBvZmZzZXQgYnV0IGluY3JlbWVudAorICAgICBTRUVEX1BMVVMgYWNjb3JkaW5nbHkuICAqLworICBtZW1jcHkgKHNlZWRfcGx1cywgc2VlZCwgc2VlZGxlbik7CisgIGNvdW50ZXIgPSAwOworCisgIC8qIEdlbmVyYXRlIFAuICovCisgIHByaW1lX3AgPSBtcGlfbmV3IChwYml0cyk7CisgIGZvciAoOzspCisgICAgeworICAgICAgLyogU3RlcCAxMS4xOiBGb3IgaiA9IDAsLi4ubiBsZXQKKyAgICAgICAgICAgICAgICAgICAgICBWX2ogPSBoYXNoKHNlZWQrb2Zmc2V0K2opCisgICAgICAgICBTdGVwIDExLjI6IFcgPSBWXzAgKyBWXzEqMl5vdXRsZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVl97bi0xfSoyXnsobi0xKSpvdXRsZW59CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoVl97bn0gbW9kIDJeYikqMl57bipvdXRsZW59CisgICAgICAgKi8KKyAgICAgIG1waV9zZXRfdWkgKHZhbHVlX3csIDApOworICAgICAgZm9yICh2YWx1ZV9qPTA7IHZhbHVlX2ogPD0gdmFsdWVfbjsgdmFsdWVfaisrKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhlcmUgaXMgbm8gbmVlZCB0byBoYXZlIGFuIGV4cGxpY2l0IG9mZnNldCB2YXJpYWJsZTogSW4KKyAgICAgICAgICAgICB0aGUgZmlyc3Qgcm91bmQgd2Ugc2hhbGwgaGF2ZSBhbiBvZmZzZXQgb2YgMSBhbmQgYSBqIG9mCisgICAgICAgICAgICAgMC4gIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW5jcmVtZW50aW5nIFNFRURfUExVUyBoZXJlLiAgRm9yCisgICAgICAgICAgICAgdGhlIG5leHQgcm91bmQgb2Zmc2V0IGlzIGltcGxpY2l0bHkgdXBkYXRlZCBieSB1c2luZworICAgICAgICAgICAgIFNFRURfUExVUyBhZ2Fpbi4gICovCisgICAgICAgICAgZm9yIChpPXNlZWRsZW4tMTsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNlZWRfcGx1c1tpXSsrOworICAgICAgICAgICAgICBpZiAoc2VlZF9wbHVzW2ldKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIF9nY3J5X21kX2hhc2hfYnVmZmVyIChHQ1JZX01EX1NIQTEsIGRpZ2VzdCwgc2VlZF9wbHVzLCBzZWVkbGVuKTsKKworICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlICh0bXB2YWwpOyB0bXB2YWwgPSBOVUxMOworICAgICAgICAgIGVjID0gX2djcnlfbXBpX3NjYW4gKCZ0bXB2YWwsIEdDUllNUElfRk1UX1VTRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QsIHNpemVvZiBkaWdlc3QsIE5VTEwpOworICAgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgaWYgKHZhbHVlX2ogPT0gdmFsdWVfbikKKyAgICAgICAgICAgIG1waV9jbGVhcl9oaWdoYml0ICh0bXB2YWwsIHZhbHVlX2IpOyAvKiAoVl9uIG1vZCAyXmIpICovCisgICAgICAgICAgbXBpX2xzaGlmdCAodG1wdmFsLCB0bXB2YWwsIHZhbHVlX2oqcWJpdHMpOworICAgICAgICAgIG1waV9hZGQgKHZhbHVlX3csIHZhbHVlX3csIHRtcHZhbCk7CisgICAgICAgIH0KKworICAgICAgLyogU3RlcCAxMS4zOiBYID0gVyArIDJee0wtMX0gICovCisgICAgICBtcGlfc2V0X3VpICh2YWx1ZV94LCAwKTsKKyAgICAgIG1waV9zZXRfaGlnaGJpdCAodmFsdWVfeCwgcGJpdHMtMSk7CisgICAgICBtcGlfYWRkICh2YWx1ZV94LCB2YWx1ZV94LCB2YWx1ZV93KTsKKworICAgICAgLyogU3RlcCAxMS40OiAgYyA9IFggbW9kIDJxICAqLworICAgICAgbXBpX211bF8yZXhwICh0bXB2YWwsIHByaW1lX3EsIDEpOworICAgICAgbXBpX21vZCAodG1wdmFsLCB2YWx1ZV94LCB0bXB2YWwpOworCisgICAgICAvKiBTdGVwIDExLjU6ICBwID0gWCAtIChjIC0gMSkgICovCisgICAgICBtcGlfc3ViX3VpICh0bXB2YWwsIHRtcHZhbCwgMSk7CisgICAgICBtcGlfc3ViIChwcmltZV9wLCB2YWx1ZV94LCB0bXB2YWwpOworCisgICAgICAvKiBTdGVwIDExLjY6IElmICBwIDwgMl57TC0xfSAgc2tpcCB0aGUgcHJpbWFsaXR5IHRlc3QuICAqLworICAgICAgLyogU3RlcCAxMS43IGFuZCAxMS44OiBQcmltYWxpdHkgdGVzdC4gICovCisgICAgICBpZiAobXBpX2dldF9uYml0cyAocHJpbWVfcCkgPj0gcGJpdHMtMQorICAgICAgICAgICYmIGNoZWNrX3ByaW1lIChwcmltZV9wLCB2YWxfMiwgNjQsIE5VTEwsIE5VTEwpICkKKyAgICAgICAgYnJlYWs7IC8qIFllcywgUCBpcyBwcmltZSwgY29udGludWUgd2l0aCBTdGVwIDE1LiAgKi8KKworICAgICAgLyogU3RlcCAxMS45OiBjb3VudGVyID0gY291bnRlciArIDEsIG9mZnNldCA9IG9mZnNldCArIG4gKyAxLgorICAgICAgICAgICAgICAgICAgICBJZiBjb3VudGVyID49IDRMICBnb3RvIFN0ZXAgNS4gICovCisgICAgICBjb3VudGVyKys7CisgICAgICBpZiAoY291bnRlciA+PSA0KnBiaXRzKQorICAgICAgICBnb3RvIHJlc3RhcnQ7CisgICAgfQorCisgIC8qIFN0ZXAgMTI6ICBTYXZlIHAsIHEsIGNvdW50ZXIgYW5kIHNlZWQuICAqLworICBsb2dfZGVidWcgKCJmaXBzMTg2LTMgcGJpdHMgcD0ldSBxPSV1IGNvdW50ZXI9JWRcbiIsCisgICAgICAgICAgICAgbXBpX2dldF9uYml0cyAocHJpbWVfcCksIG1waV9nZXRfbmJpdHMgKHByaW1lX3EpLCBjb3VudGVyKTsKKyAgbG9nX3ByaW50aGV4ICgiZmlwczE4Ni0zIHNlZWQiLCBzZWVkLCBzZWVkbGVuKTsKKyAgbG9nX3ByaW50bXBpICgiZmlwczE4Ni0zICAgIHAiLCBwcmltZV9wKTsKKyAgbG9nX3ByaW50bXBpICgiZmlwczE4Ni0zICAgIHEiLCBwcmltZV9xKTsKKyAgaWYgKHJfcSkKKyAgICB7CisgICAgICAqcl9xID0gcHJpbWVfcTsKKyAgICAgIHByaW1lX3EgPSBOVUxMOworICAgIH0KKyAgaWYgKHJfcCkKKyAgICB7CisgICAgICAqcl9wID0gcHJpbWVfcDsKKyAgICAgIHByaW1lX3AgPSBOVUxMOworICAgIH0KKyAgaWYgKHJfY291bnRlcikKKyAgICAqcl9jb3VudGVyID0gY291bnRlcjsKKyAgaWYgKHJfc2VlZCAmJiByX3NlZWRsZW4pCisgICAgeworICAgICAgbWVtY3B5IChzZWVkX3BsdXMsIHNlZWQsIHNlZWRsZW4pOworICAgICAgKnJfc2VlZCA9IHNlZWRfcGx1czsKKyAgICAgIHNlZWRfcGx1cyA9IE5VTEw7CisgICAgICAqcl9zZWVkbGVuID0gc2VlZGxlbjsKKyAgICB9CisgIGlmIChyX2hhc2hhbGdvKQorICAgICpyX2hhc2hhbGdvID0gaGFzaGFsZ287CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHRtcHZhbCk7CisgIF9nY3J5X21waV9yZWxlYXNlICh2YWx1ZV94KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHZhbHVlX3cpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocHJpbWVfcCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChwcmltZV9xKTsKKyAgeGZyZWUgKHNlZWRfcGx1cyk7CisgIF9nY3J5X21waV9yZWxlYXNlICh2YWxfMik7CisgIHJldHVybiBlYzsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9wdWJrZXktaW50ZXJuYWwuaCBiL2NpcGhlci9wdWJrZXktaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMyNDhjCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3B1YmtleS1pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBwdWJrZXktaW50ZXJuYWwuaCAgLSBJbnRlcm5hbCBkZWZzIGZvciBwdWJrZXkuYworICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBjb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHQ1JZX1BVQktFWV9JTlRFUk5BTF9ICisjZGVmaW5lIEdDUllfUFVCS0VZX0lOVEVSTkFMX0gKKworLyotLSBwdWJrZXktdXRpbC5jIC0tKi8KK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3V0aWxfcGFyc2VfZmxhZ2xpc3QgKGdjcnlfc2V4cF90IGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBrX2VuY29kaW5nICpyX2VuY29kaW5nKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3V0aWxfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYml0cyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wa191dGlsX2dldF9yc2FfdXNlX2UgKGdjcnlfc2V4cF90IGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnJfZSk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wa191dGlsX3ByZXBhcnNlX3NpZ3ZhbCAoZ2NyeV9zZXhwX3Qgc19zaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmFsZ29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgKnJfcGFybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyX2VjY2ZsYWdzKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3V0aWxfcHJlcGFyc2VfZW5jdmFsIChnY3J5X3NleHBfdCBzZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiphbGdvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90ICpyX3Bhcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCk7Cit2b2lkIF9nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwa19vcGVyYXRpb24gb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cyk7Cit2b2lkIF9nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCk7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoZ2NyeV9zZXhwX3QgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqcmV0X21waSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGtfZW5jb2RpbmdfY3R4ICpjdHgpOworCisKKworLyotLSByc2EtY29tbW9uLmMgLS0qLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3JzYV9wa2NzMV9lbmNvZGVfZm9yX2VuYyAoZ2NyeV9tcGlfdCAqcl9yZXN1bHQsIHVuc2lnbmVkIGludCBuYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmFuZG9tX292ZXJyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmFuZG9tX292ZXJyaWRlX2xlbik7CitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX3BrY3MxX2RlY29kZV9mb3JfZW5jICh1bnNpZ25lZCBjaGFyICoqcl9yZXN1bHQsIHNpemVfdCAqcl9yZXN1bHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgZ2NyeV9tcGlfdCB2YWx1ZSk7CitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX3BrY3MxX2VuY29kZV9mb3Jfc2lnIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxnbyk7CitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX29hZXBfZW5jb2RlIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmFuZG9tX292ZXJyaWRlLCBzaXplX3QgcmFuZG9tX292ZXJyaWRlX2xlbik7CitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX29hZXBfZGVjb2RlICh1bnNpZ25lZCBjaGFyICoqcl9yZXN1bHQsIHNpemVfdCAqcl9yZXN1bHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgaW50IGFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGFiZWxsZW4pOworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3JzYV9wc3NfZW5jb2RlIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuLCBpbnQgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpyYW5kb21fb3ZlcnJpZGUsIHNpemVfdCByYW5kb21fb3ZlcnJpZGVfbGVuKTsKK2dwZ19lcnJfY29kZV90CitfZ2NyeV9yc2FfcHNzX3ZlcmlmeSAoZ2NyeV9tcGlfdCB2YWx1ZSwgZ2NyeV9tcGlfdCBlbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgaW50IGFsZ28sIHNpemVfdCBzYWx0bGVuKTsKKworCisKKy8qLS0gZHNhLWNvbW1vbi5jIC0tKi8KK2djcnlfbXBpX3QgX2djcnlfZHNhX2dlbl9rIChnY3J5X21waV90IHEsIGludCBzZWN1cml0eV9sZXZlbCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9kc2FfZ2VuX3JmYzY5NzlfayAoZ2NyeV9tcGlfdCAqcl9rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZHNhX3EsIGdjcnlfbXBpX3QgZHNhX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGgxbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFsb29wcyk7CisKK2dwZ19lcnJfY29kZV90IF9nY3J5X2RzYV9ub3JtYWxpemVfaGFzaCAoZ2NyeV9tcGlfdCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcWJpdHMpOworCisvKi0tIGVjYy5jIC0tKi8KK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX2VjY19nZXRfc2V4cCAoZ2NyeV9zZXhwX3QgKnJfc2V4cCwgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9lY190IGVjKTsKKworCisjZW5kaWYgLypHQ1JZX1BVQktFWV9JTlRFUk5BTF9IKi8KZGlmZiAtLWdpdCBhL2NpcGhlci9wdWJrZXktdXRpbC5jIGIvY2lwaGVyL3B1YmtleS11dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2YjQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9wdWJrZXktdXRpbC5jCkBAIC0wLDAgKzEsMTA1MCBAQAorLyogcHVia2V5LXV0aWwuYyAtIFN1cHBvcnRpbmcgZnVuY3Rpb25zIGZvciBhbGwgcHVia2V5IG1vZHVsZXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDUsCisgKiAgICAgICAgICAgICAgIDIwMDcsIDIwMDgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJwdWJrZXktaW50ZXJuYWwuaCIKKworCisvKiBDYWxsYmFjayBmb3IgdGhlIHB1YmtleSBhbGdvcml0aG0gY29kZSB0byB2ZXJpZnkgUFNTIHNpZ25hdHVyZXMuCisgICBPUEFRVUUgaXMgdGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGFjdHVhbCBjYWxsZXIuICBUaGUgbWVhbmluZyBvZgorICAgVE1QIGRlcGVuZHMgb24gdGhlIGFjdHVhbCBhbGdvcml0aG0gKGJ1dCB0aGVyZSBpcyBvbmx5IFJTQSk7IG5vdworICAgZm9yIFJTQSBpdCBpcyB0aGUgb3V0cHV0IG9mIHJ1bm5pbmcgdGhlIHB1YmxpYyBrZXkgZnVuY3Rpb24gb24gdGhlCisgICBpbnB1dC4gICovCitzdGF0aWMgaW50Citwc3NfdmVyaWZ5X2NtcCAodm9pZCAqb3BhcXVlLCBnY3J5X21waV90IHRtcCkKK3sKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCAqY3R4ID0gb3BhcXVlOworICBnY3J5X21waV90IGhhc2ggPSBjdHgtPnZlcmlmeV9hcmc7CisKKyAgcmV0dXJuIF9nY3J5X3JzYV9wc3NfdmVyaWZ5IChoYXNoLCB0bXAsIGN0eC0+bmJpdHMgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aGFzaF9hbGdvLCBjdHgtPnNhbHRsZW4pOworfQorCisKKy8qIFBhcnNlciBmb3IgYSBmbGFnIGxpc3QuICBPbiByZXR1cm4gdGhlIGVuY29kaW5nIGlzIHN0b3JlZCBhdAorICAgUl9FTkNPRElORyBhbmQgdGhlIGZsYWdzIGFyZSBzdG9yZWQgYXQgUl9GTEFHUy4gIElmIGFueSBvZiB0aGVtIGlzCisgICBub3QgbmVlZGVkLCBOVUxMIG1heSBiZSBwYXNzZWQuICBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgIG9yIGFuIGVycm9yIGNvZGUuICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcGtfdXRpbF9wYXJzZV9mbGFnbGlzdCAoZ2NyeV9zZXhwX3QgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcl9mbGFncywgZW51bSBwa19lbmNvZGluZyAqcl9lbmNvZGluZykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmMgPSAwOworICBjb25zdCBjaGFyICpzOworICBzaXplX3QgbjsKKyAgaW50IGk7CisgIGludCBlbmNvZGluZyA9IFBVQktFWV9FTkNfVU5LTk9XTjsKKyAgaW50IGZsYWdzID0gMDsKKyAgaW50IGlnbmludmZsYWcgPSAwOworCisgIGZvciAoaSA9IGxpc3QgPyBzZXhwX2xlbmd0aCAobGlzdCktMSA6IDA7IGkgPiAwOyBpLS0pCisgICAgeworICAgICAgcyA9IHNleHBfbnRoX2RhdGEgKGxpc3QsIGksICZuKTsKKyAgICAgIGlmICghcykKKyAgICAgICAgY29udGludWU7IC8qIE5vdCBhIGRhdGEgZWxlbWVudC4gKi8KKworICAgICAgc3dpdGNoIChuKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgInBzcyIsIDMpICYmIGVuY29kaW5nID09IFBVQktFWV9FTkNfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW5jb2RpbmcgPSBQVUJLRVlfRU5DX1BTUzsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfRklYRURMRU47CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIW1lbWNtcCAocywgInJhdyIsIDMpICYmIGVuY29kaW5nID09IFBVQktFWV9FTkNfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW5jb2RpbmcgPSBQVUJLRVlfRU5DX1JBVzsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfUkFXX0ZMQUc7IC8qIEV4cGxpY2l0bHkgZ2l2ZW4uICAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgImNvbXAiLCA0KSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX0NPTVA7CisgICAgICAgICAgZWxzZSBpZiAoIW1lbWNtcCAocywgIm9hZXAiLCA0KSAmJiBlbmNvZGluZyA9PSBQVUJLRVlfRU5DX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVuY29kaW5nID0gUFVCS0VZX0VOQ19PQUVQOworICAgICAgICAgICAgICBmbGFncyB8PSBQVUJLRVlfRkxBR19GSVhFRExFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghbWVtY21wIChzLCAiZ29zdCIsIDQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbmNvZGluZyA9IFBVQktFWV9FTkNfUkFXOworICAgICAgICAgICAgICBmbGFncyB8PSBQVUJLRVlfRkxBR19HT1NUOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgImVkZHNhIiwgNSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVuY29kaW5nID0gUFVCS0VZX0VOQ19SQVc7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX0VERFNBOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFtZW1jbXAgKHMsICJwa2NzMSIsIDUpICYmIGVuY29kaW5nID09IFBVQktFWV9FTkNfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW5jb2RpbmcgPSBQVUJLRVlfRU5DX1BLQ1MxOworICAgICAgICAgICAgICBmbGFncyB8PSBQVUJLRVlfRkxBR19GSVhFRExFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghbWVtY21wIChzLCAicGFyYW0iLCA1KSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX1BBUkFNOworICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgIm5vY29tcCIsIDYpKQorICAgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfTk9DT01QOworICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgInJmYzY5NzkiLCA3KSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX1JGQzY5Nzk7CisgICAgICAgICAgZWxzZSBpZiAoIW1lbWNtcCAocywgIm5vcGFyYW0iLCA3KSkKKyAgICAgICAgICAgIDsgLyogSWdub3JlIC0gaXQgaXMgdGhlIGRlZmF1bHQuICAqLworICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICBpZiAoIW1lbWNtcCAocywgInVzZS14OTMxIiwgOCkpCisgICAgICAgICAgICBmbGFncyB8PSBQVUJLRVlfRkxBR19VU0VfWDkzMTsKKyAgICAgICAgICBlbHNlIGlmICghaWduaW52ZmxhZykKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfRkxBRzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgIGlmICghbWVtY21wIChzLCAiaWduaW52ZmxhZyIsIDEwKSkKKyAgICAgICAgICAgIGlnbmludmZsYWcgPSAxOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgaWYgKCFtZW1jbXAgKHMsICJuby1ibGluZGluZyIsIDExKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX05PX0JMSU5ESU5HOworICAgICAgICAgIGVsc2UgaWYgKCFtZW1jbXAgKHMsICJ1c2UtZmlwczE4NiIsIDExKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX1VTRV9GSVBTMTg2OworICAgICAgICAgIGVsc2UgaWYgKCFpZ25pbnZmbGFnKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9GTEFHOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgaWYgKCFtZW1jbXAgKHMsICJ1c2UtZmlwczE4Ni0yIiwgMTMpKQorICAgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMjsKKyAgICAgICAgICBlbHNlIGlmICghbWVtY21wIChzLCAidHJhbnNpZW50LWtleSIsIDEzKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVk7CisgICAgICAgICAgZWxzZSBpZiAoIWlnbmludmZsYWcpCisgICAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX0ZMQUc7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAoIWlnbmludmZsYWcpCisgICAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX0ZMQUc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKHJfZmxhZ3MpCisgICAgKnJfZmxhZ3MgPSBmbGFnczsKKyAgaWYgKHJfZW5jb2RpbmcpCisgICAgKnJfZW5jb2RpbmcgPSBlbmNvZGluZzsKKworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludAorZ2V0X2hhc2hfYWxnbyAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pCit7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyBjb25zdCBjaGFyICpuYW1lOyBpbnQgYWxnbzsgfSBoYXNobmFtZXNbXSA9IHsKKyAgICB7ICJzaGExIiwgICBHQ1JZX01EX1NIQTEgfSwKKyAgICB7ICJtZDUiLCAgICBHQ1JZX01EX01ENSB9LAorICAgIHsgInNoYTI1NiIsIEdDUllfTURfU0hBMjU2IH0sCisgICAgeyAicmlwZW1kMTYwIiwgR0NSWV9NRF9STUQxNjAgfSwKKyAgICB7ICJybWQxNjAiLCBHQ1JZX01EX1JNRDE2MCB9LAorICAgIHsgInNoYTM4NCIsIEdDUllfTURfU0hBMzg0IH0sCisgICAgeyAic2hhNTEyIiwgR0NSWV9NRF9TSEE1MTIgfSwKKyAgICB7ICJzaGEyMjQiLCBHQ1JZX01EX1NIQTIyNCB9LAorICAgIHsgIm1kMiIsICAgIEdDUllfTURfTUQyIH0sCisgICAgeyAibWQ0IiwgICAgR0NSWV9NRF9NRDQgfSwKKyAgICB7ICJ0aWdlciIsICBHQ1JZX01EX1RJR0VSIH0sCisgICAgeyAiaGF2YWwiLCAgR0NSWV9NRF9IQVZBTCB9LAorICAgIHsgTlVMTCwgMCB9CisgIH07CisgIGludCBhbGdvOworICBpbnQgaTsKKworICBmb3IgKGk9MDsgaGFzaG5hbWVzW2ldLm5hbWU7IGkrKykKKyAgICB7CisgICAgICBpZiAoIHN0cmxlbiAoaGFzaG5hbWVzW2ldLm5hbWUpID09IG4KKwkgICAmJiAhbWVtY21wIChoYXNobmFtZXNbaV0ubmFtZSwgcywgbikpCisJYnJlYWs7CisgICAgfQorICBpZiAoaGFzaG5hbWVzW2ldLm5hbWUpCisgICAgYWxnbyA9IGhhc2huYW1lc1tpXS5hbGdvOworICBlbHNlCisgICAgeworICAgICAgLyogSW4gY2FzZSBvZiBub3QgbGlzdGVkIG9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBoYXNoCisJIGFsZ29yaXRobSB3ZSBmYWxsIGJhY2sgdG8gdGhpcyBzb21ld2hhdCBzbG93ZXIKKwkgbWV0aG9kLiAgRnVydGhlciwgaXQgYWxzbyBhbGxvd3MgdG8gdXNlIE9JRHMgYXMKKwkgYWxnb3JpdGhtIG5hbWVzLiAqLworICAgICAgY2hhciAqdG1wbmFtZTsKKworICAgICAgdG1wbmFtZSA9IHh0cnltYWxsb2MgKG4rMSk7CisgICAgICBpZiAoIXRtcG5hbWUpCisJYWxnbyA9IDA7ICAvKiBPdXQgb2YgY29yZSAtIHNpbGVudGx5IGdpdmUgdXAuICAqLworICAgICAgZWxzZQorCXsKKwkgIG1lbWNweSAodG1wbmFtZSwgcywgbik7CisJICB0bXBuYW1lW25dID0gMDsKKwkgIGFsZ28gPSBfZ2NyeV9tZF9tYXBfbmFtZSAodG1wbmFtZSk7CisJICB4ZnJlZSAodG1wbmFtZSk7CisJfQorICAgIH0KKyAgcmV0dXJuIGFsZ287Cit9CisKKworLyogR2V0IHRoZSAibmJpdHMiIHBhcmFtZXRlciBmcm9tIGFuIHMtZXhwcmVzc2lvbiBvZiB0aGUgZm9ybWF0OgorICoKKyAqICAgKGFsZ28KKyAqICAgICAocGFyYW1ldGVyX25hbWVfMSAuLi4uKQorICogICAgICAuLi4uCisgKiAgICAgKHBhcmFtZXRlcl9uYW1lX24gLi4uLikpCisgKgorICogRXhhbXBsZToKKyAqCisgKiAgIChyc2EKKyAqICAgICAobmJpdHMgNDoyMDQ4KSkKKyAqCisgKiBPbiBzdWNjZXNzIHRoZSB2YWx1ZSBmb3IgbmJpdHMgaXMgc3RvcmVkIGF0IFJfTkJJVFMuICBJZiBubyBuYml0cworICogcGFyYW1ldGVyIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzIGFuZCBzdG9yZXMgMCBhdAorICogUl9OQklUUy4gIEZvciBwYXJzaW5nIGVycm9ycyB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlIGFuZAorICogc3RvcmVzIDAgYXQgUl9OQklUUy4KKyAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3BrX3V0aWxfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBsaXN0LCB1bnNpZ25lZCBpbnQgKnJfbmJpdHMpCit7CisgIGNoYXIgYnVmWzUwXTsKKyAgY29uc3QgY2hhciAqczsKKyAgc2l6ZV90IG47CisKKyAgKnJfbmJpdHMgPSAwOworCisgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKGxpc3QsICJuYml0cyIsIDApOworICBpZiAoIWxpc3QpCisgICAgcmV0dXJuIDA7IC8qIE5vIE5CSVRTIGZvdW5kLiAgKi8KKworICBzID0gc2V4cF9udGhfZGF0YSAobGlzdCwgMSwgJm4pOworICBpZiAoIXMgfHwgbiA+PSBESU0gKGJ1ZikgLSAxICkKKyAgICB7CisgICAgICAvKiBOQklUUyBnaXZlbiB3aXRob3V0IGEgY2RyLiAgKi8KKyAgICAgIHNleHBfcmVsZWFzZSAobGlzdCk7CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICAgIH0KKyAgbWVtY3B5IChidWYsIHMsIG4pOworICBidWZbbl0gPSAwOworICAqcl9uYml0cyA9ICh1bnNpZ25lZCBpbnQpc3RydG91bCAoYnVmLCBOVUxMLCAwKTsKKyAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogR2V0IHRoZSBvcHRpb25hbCAicnNhLXVzZS1lIiBwYXJhbWV0ZXIgZnJvbSBhbiBzLWV4cHJlc3Npb24gb2YgdGhlCisgKiBmb3JtYXQ6CisgKgorICogICAoYWxnbworICogICAgIChwYXJhbWV0ZXJfbmFtZV8xIC4uLi4pCisgKiAgICAgIC4uLi4KKyAqICAgICAocGFyYW1ldGVyX25hbWVfbiAuLi4uKSkKKyAqCisgKiBFeGFtcGxlOgorICoKKyAqICAgKHJzYQorICogICAgIChuYml0cyA0OjIwNDgpCisgKiAgICAgKHJzYS11c2UtZSAyOjQxKSkKKyAqCisgKiBPbiBzdWNjZXNzIHRoZSB2YWx1ZSBmb3IgbmJpdHMgaXMgc3RvcmVkIGF0IFJfRS4gIElmIG5vIHJzYS11c2UtZQorICogcGFyYW1ldGVyIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzIGFuZCBzdG9yZXMgNjU1MzcgYXQKKyAqIFJfRS4gIEZvciBwYXJzaW5nIGVycm9ycyB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlIGFuZAorICogc3RvcmVzIDAgYXQgUl9FLgorICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcGtfdXRpbF9nZXRfcnNhX3VzZV9lIChnY3J5X3NleHBfdCBsaXN0LCB1bnNpZ25lZCBsb25nICpyX2UpCit7CisgIGNoYXIgYnVmWzUwXTsKKyAgY29uc3QgY2hhciAqczsKKyAgc2l6ZV90IG47CisKKyAgKnJfZSA9IDA7CisKKyAgbGlzdCA9IHNleHBfZmluZF90b2tlbiAobGlzdCwgInJzYS11c2UtZSIsIDApOworICBpZiAoIWxpc3QpCisgICAgeworICAgICAgKnJfZSA9IDY1NTM3OyAvKiBOb3QgZ2l2ZW4sIHVzZSB0aGUgdmFsdWUgZ2VuZXJhdGVkIGJ5IG9sZCB2ZXJzaW9ucy4gKi8KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBzID0gc2V4cF9udGhfZGF0YSAobGlzdCwgMSwgJm4pOworICBpZiAoIXMgfHwgbiA+PSBESU0gKGJ1ZikgLSAxICkKKyAgICB7CisgICAgICAvKiBObyB2YWx1ZSBvciB2YWx1ZSB0b28gbGFyZ2UuICAqLworICAgICAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgICAgIHJldHVybiBHUEdfRVJSX0lOVl9PQko7CisgICAgfQorICBtZW1jcHkgKGJ1Ziwgcywgbik7CisgIGJ1ZltuXSA9IDA7CisgICpyX2UgPSBzdHJ0b3VsIChidWYsIE5VTEwsIDApOworICBzZXhwX3JlbGVhc2UgKGxpc3QpOworICByZXR1cm4gMDsKK30KKworCisvKiBQYXJzZSBhICJzaWctdmFsIiBzLWV4cHJlc3Npb24gYW5kIHN0b3JlIHRoZSBpbm5lciBwYXJhbWV0ZXIgbGlzdCBhdAorICAgUl9QQVJNUy4gIEFMR09fTkFNRVMgaXMgdXNlZCB0byB2ZXJpZnkgdGhhdCB0aGUgYWxnb3JpdGhtIGluCisgICAic2lnLXZhbCIgaXMgdmFsaWQuICBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgc3RvcmVzIGEgbmV3IGxpc3QgYXQKKyAgIFJfUEFSTVMgd2hpY2ggbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAgT24gZXJyb3IgUl9QQVJNUyBpcyBzZXQKKyAgIHRvIE5VTEwgYW5kIGFuIGVycm9yIGNvZGUgcmV0dXJuZWQuICBJZiBSX0VDQ0ZMQUdTIGlzIG5vdCBOVUxMIGZsYWcKKyAgIHZhbHVlcyBhcmUgc2V0IGludG8gaXQ7IGFzIG9mIG5vdyB0aGV5IGFyZSBvbmx5IHVzZWQgd2l0aCBlY2MKKyAgIGFsZ29yaXRobXMuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3BrX3V0aWxfcHJlcGFyc2Vfc2lndmFsIChnY3J5X3NleHBfdCBzX3NpZywgY29uc3QgY2hhciAqKmFsZ29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgKnJfcGFybXMsIGludCAqcl9lY2NmbGFncykKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgbDIgPSBOVUxMOworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgaW50IGk7CisKKyAgKnJfcGFybXMgPSBOVUxMOworICBpZiAocl9lY2NmbGFncykKKyAgICAqcl9lY2NmbGFncyA9IDA7CisKKyAgLyogRXh0cmFjdCB0aGUgc2lnbmF0dXJlIHZhbHVlLiAgKi8KKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKHNfc2lnLCAic2lnLXZhbCIsIDApOworICBpZiAoIWwxKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBEb2VzIG5vdCBjb250YWluIGEgc2lnbmF0dXJlIHZhbHVlIG9iamVjdC4gICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBsMiA9IHNleHBfbnRoIChsMSwgMSk7CisgIGlmICghbDIpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX05PX09CSjsgICAvKiBObyBjYWRyIGZvciB0aGUgc2lnIG9iamVjdC4gICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgbmFtZSA9IHNleHBfbnRoX3N0cmluZyAobDIsIDApOworICBpZiAoIW5hbWUpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7ICAvKiBJbnZhbGlkIHN0cnVjdHVyZSBvZiBvYmplY3QuICAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJmbGFncyIpKQorICAgIHsKKyAgICAgIC8qIFNraXAgYSAiZmxhZ3MiIHBhcmFtZXRlciBhbmQgbG9vayBhZ2FpbiBmb3IgdGhlIGFsZ29yaXRobQorCSBuYW1lLiAgVGhpcyBpcyBub3QgdXNlZCBidXQgaGVyZSBqdXN0IGZvciB0aGUgc2FrZSBvZgorCSBjb25zaXN0ZW50IFMtZXhwcmVzc2lvbnMgd2UgbmVlZCB0byBoYW5kbGUgaXQuICovCisgICAgICBzZXhwX3JlbGVhc2UgKGwyKTsKKyAgICAgIGwyID0gc2V4cF9udGggKGwxLCAyKTsKKyAgICAgIGlmICghbDIpCisJeworCSAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICAgICAgZ290byBsZWF2ZTsKKwl9CisgICAgICB4ZnJlZSAobmFtZSk7CisgICAgICBuYW1lID0gc2V4cF9udGhfc3RyaW5nIChsMiwgMCk7CisgICAgICBpZiAoIW5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsgIC8qIEludmFsaWQgc3RydWN0dXJlIG9mIG9iamVjdC4gICovCisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorICAgIH0KKworICBmb3IgKGk9MDsgYWxnb19uYW1lc1tpXTsgaSsrKQorICAgIGlmICghc3RyaWNtcCAobmFtZSwgYWxnb19uYW1lc1tpXSkpCisgICAgICBicmVhazsKKyAgaWYgKCFhbGdvX25hbWVzW2ldKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9DT05GTElDVDsgLyogInNpZy12YWwiIHVzZXMgYW4gdW5leHBlY3RlZCBhbGdvLiAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGlmIChyX2VjY2ZsYWdzKQorICAgIHsKKyAgICAgIGlmICghc3RyY21wIChuYW1lLCAiZWRkc2EiKSkKKyAgICAgICAgKnJfZWNjZmxhZ3MgPSBQVUJLRVlfRkxBR19FRERTQTsKKyAgICAgIGlmICghc3RyY21wIChuYW1lLCAiZ29zdCIpKQorICAgICAgICAqcl9lY2NmbGFncyA9IFBVQktFWV9GTEFHX0dPU1Q7CisgICAgfQorCisgICpyX3Bhcm1zID0gbDI7CisgIGwyID0gTlVMTDsKKyAgcmMgPSAwOworCisgbGVhdmU6CisgIHhmcmVlIChuYW1lKTsKKyAgc2V4cF9yZWxlYXNlIChsMik7CisgIHNleHBfcmVsZWFzZSAobDEpOworICByZXR1cm4gcmM7Cit9CisKKworLyogUGFyc2UgYSAiZW5jLXZhbCIgcy1leHByZXNzaW9uIGFuZCBzdG9yZSB0aGUgaW5uZXIgcGFyYW1ldGVyIGxpc3QKKyAgIGF0IFJfUEFSTVMuICBBTEdPX05BTUVTIGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGFsZ29yaXRobSBpbgorICAgImVuYy12YWwiIGlzIHZhbGlkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIHN0b3JlcyBhIG5ldyBsaXN0IGF0CisgICBSX1BBUk1TIHdoaWNoIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4gIE9uIGVycm9yIFJfUEFSTVMgaXMgc2V0CisgICB0byBOVUxMIGFuZCBhbiBlcnJvciBjb2RlIHJldHVybmVkLiAgSWYgUl9FQ0NGTEFHUyBpcyBub3QgTlVMTCBmbGFnCisgICB2YWx1ZXMgYXJlIHNldCBpbnRvIGl0OyBhcyBvZiBub3cgdGhleSBhcmUgb25seSB1c2VkIHdpdGggZWNjCisgICBhbGdvcml0aG1zLgorCisgICAgIChlbmMtdmFsCisgICAgICAgWyhmbGFncyBbcmF3LCBwa2NzMSwgb2FlcCwgbm8tYmxpbmRpbmddKV0KKyAgICAgICBbKGhhc2gtYWxnbyA8YWxnbz4pXQorICAgICAgIFsobGFiZWwgPGxhYmVsPildCisgICAgICAgICg8YWxnbz4KKyAgICAgICAgICAoPHBhcmFtX25hbWUxPiA8bXBpPikKKyAgICAgICAgICAuLi4KKyAgICAgICAgICAoPHBhcmFtX25hbWVuPiA8bXBpPikpKQorCisgICBIQVNILUFMR08gYW5kIExBQkVMIGFyZSBzcGVjaWZpYyB0byBPQUVQLiAgQ1RYIHdpbGwgYmUgdXBkYXRlZCB3aXRoCisgICBlbmNvZGluZyBpbmZvcm1hdGlvbi4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcGtfdXRpbF9wcmVwYXJzZV9lbmN2YWwgKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIgKiphbGdvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90ICpyX3Bhcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKyAgZ2NyeV9zZXhwX3QgbDEgPSBOVUxMOworICBnY3J5X3NleHBfdCBsMiA9IE5VTEw7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBzaXplX3QgbjsKKyAgaW50IHBhcnNlZF9mbGFncyA9IDA7CisgIGludCBpOworCisgICpyX3Bhcm1zID0gTlVMTDsKKworICAvKiBDaGVjayB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGlzIHZhbGlkLiAgKi8KKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKHNleHAsICJlbmMtdmFsIiAsIDApOworICBpZiAoIWwxKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBEb2VzIG5vdCBjb250YWluIGFuIGVuY3J5cHRlZCB2YWx1ZSBvYmplY3QuICAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgbDIgPSBzZXhwX250aCAobDEsIDEpOworICBpZiAoIWwyKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9OT19PQko7ICAvKiBObyBjYWRyIGZvciB0aGUgZGF0YSBvYmplY3QuICAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCBpZGVudGlmaWVyIG9mIHN1Ymxpc3QuICAqLworICBuYW1lID0gc2V4cF9udGhfc3RyaW5nIChsMiwgMCk7CisgIGlmICghbmFtZSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsgLyogSW52YWxpZCBzdHJ1Y3R1cmUgb2Ygb2JqZWN0LiAgKi8KKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGlmICghc3RyY21wIChuYW1lLCAiZmxhZ3MiKSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzOworCisgICAgICAvKiBUaGVyZSBpcyBhIGZsYWdzIGVsZW1lbnQgLSBwcm9jZXNzIGl0LiAgKi8KKyAgICAgIHJjID0gX2djcnlfcGtfdXRpbF9wYXJzZV9mbGFnbGlzdCAobDIsICZwYXJzZWRfZmxhZ3MsICZjdHgtPmVuY29kaW5nKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgIGlmIChjdHgtPmVuY29kaW5nID09IFBVQktFWV9FTkNfUFNTKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBHUEdfRVJSX0NPTkZMSUNUOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgLyogR2V0IHRoZSBPQUVQIHBhcmFtZXRlcnMgSEFTSC1BTEdPIGFuZCBMQUJFTCwgaWYgYW55LiAqLworICAgICAgaWYgKGN0eC0+ZW5jb2RpbmcgPT0gUFVCS0VZX0VOQ19PQUVQKQorCXsKKwkgIC8qIEdldCBIQVNILUFMR08uICovCisgICAgICAgICAgc2V4cF9yZWxlYXNlIChsMik7CisJICBsMiA9IHNleHBfZmluZF90b2tlbiAobDEsICJoYXNoLWFsZ28iLCAwKTsKKwkgIGlmIChsMikKKwkgICAgeworCSAgICAgIHMgPSBzZXhwX250aF9kYXRhIChsMiwgMSwgJm4pOworCSAgICAgIGlmICghcykKKwkJcmMgPSBHUEdfRVJSX05PX09CSjsKKwkgICAgICBlbHNlCisJCXsKKwkJICBjdHgtPmhhc2hfYWxnbyA9IGdldF9oYXNoX2FsZ28gKHMsIG4pOworCQkgIGlmICghY3R4LT5oYXNoX2FsZ28pCisJCSAgICByYyA9IEdQR19FUlJfRElHRVNUX0FMR087CisJCX0KKwkgICAgICBpZiAocmMpCisJCWdvdG8gbGVhdmU7CisJICAgIH0KKworCSAgLyogR2V0IExBQkVMLiAqLworICAgICAgICAgIHNleHBfcmVsZWFzZSAobDIpOworCSAgbDIgPSBzZXhwX2ZpbmRfdG9rZW4gKGwxLCAibGFiZWwiLCAwKTsKKwkgIGlmIChsMikKKwkgICAgeworCSAgICAgIHMgPSBzZXhwX250aF9kYXRhIChsMiwgMSwgJm4pOworCSAgICAgIGlmICghcykKKwkJcmMgPSBHUEdfRVJSX05PX09CSjsKKwkgICAgICBlbHNlIGlmIChuID4gMCkKKwkJeworCQkgIGN0eC0+bGFiZWwgPSB4dHJ5bWFsbG9jIChuKTsKKwkJICBpZiAoIWN0eC0+bGFiZWwpCisJCSAgICByYyA9IGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgbWVtY3B5IChjdHgtPmxhYmVsLCBzLCBuKTsKKwkJICAgICAgY3R4LT5sYWJlbGxlbiA9IG47CisJCSAgICB9CisJCX0KKwkgICAgICBpZiAocmMpCisJCWdvdG8gbGVhdmU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIEdldCB0aGUgbmV4dCB3aGljaCBoYXMgdGhlIGFjdHVhbCBkYXRhIC0gc2tpcCBIQVNILUFMR08gYW5kIExBQkVMLiAqLworICAgICAgZm9yIChpID0gMjsgKHNleHBfcmVsZWFzZSAobDIpLCBsMiA9IHNleHBfbnRoIChsMSwgaSkpOyBpKyspCisJeworCSAgcyA9IHNleHBfbnRoX2RhdGEgKGwyLCAwLCAmbik7CisJICBpZiAoIShuID09IDkgJiYgIW1lbWNtcCAocywgImhhc2gtYWxnbyIsIDkpKQorCSAgICAgICYmICEobiA9PSA1ICYmICFtZW1jbXAgKHMsICJsYWJlbCIsIDUpKQorCSAgICAgICYmICEobiA9PSAxNSAmJiAhbWVtY21wIChzLCAicmFuZG9tLW92ZXJyaWRlIiwgMTUpKSkKKwkgICAgYnJlYWs7CisJfQorICAgICAgaWYgKCFsMikKKyAgICAgICAgeworICAgICAgICAgIHJjID0gR1BHX0VSUl9OT19PQko7IC8qIE5vIGNhZHIgZm9yIHRoZSBkYXRhIG9iamVjdC4gKi8KKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisKKyAgICAgIC8qIEV4dHJhY3Qgc3VibGlzdCBpZGVudGlmaWVyLiAgKi8KKyAgICAgIHhmcmVlIChuYW1lKTsKKyAgICAgIG5hbWUgPSBzZXhwX250aF9zdHJpbmcgKGwyLCAwKTsKKyAgICAgIGlmICghbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBJbnZhbGlkIHN0cnVjdHVyZSBvZiBvYmplY3QuICovCisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSAvKiBObyBmbGFncyAtIGZsYWcgYXMgbGVnYWN5IHN0cnVjdHVyZS4gICovCisgICAgcGFyc2VkX2ZsYWdzIHw9IFBVQktFWV9GTEFHX0xFR0FDWVJFU1VMVDsKKworICBmb3IgKGk9MDsgYWxnb19uYW1lc1tpXTsgaSsrKQorICAgIGlmICghc3RyaWNtcCAobmFtZSwgYWxnb19uYW1lc1tpXSkpCisgICAgICBicmVhazsKKyAgaWYgKCFhbGdvX25hbWVzW2ldKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9DT05GTElDVDsgLyogImVuYy12YWwiIHVzZXMgYW4gdW5leHBlY3RlZCBhbGdvLiAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgKnJfcGFybXMgPSBsMjsKKyAgbDIgPSBOVUxMOworICBjdHgtPmZsYWdzIHw9IHBhcnNlZF9mbGFnczsKKyAgcmMgPSAwOworCisgbGVhdmU6CisgIHhmcmVlIChuYW1lKTsKKyAgc2V4cF9yZWxlYXNlIChsMik7CisgIHNleHBfcmVsZWFzZSAobDEpOworICByZXR1cm4gcmM7Cit9CisKKworLyogSW5pdGlhbGl6ZSBhbiBlbmNvZGluZyBjb250ZXh0LiAgKi8KK3ZvaWQKK19nY3J5X3BrX3V0aWxfaW5pdF9lbmNvZGluZ19jdHggKHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGtfb3BlcmF0aW9uIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzKQoreworICBjdHgtPm9wID0gb3A7CisgIGN0eC0+bmJpdHMgPSBuYml0czsKKyAgY3R4LT5lbmNvZGluZyA9IFBVQktFWV9FTkNfVU5LTk9XTjsKKyAgY3R4LT5mbGFncyA9IDA7CisgIGN0eC0+aGFzaF9hbGdvID0gR0NSWV9NRF9TSEExOworICBjdHgtPmxhYmVsID0gTlVMTDsKKyAgY3R4LT5sYWJlbGxlbiA9IDA7CisgIGN0eC0+c2FsdGxlbiA9IDIwOworICBjdHgtPnZlcmlmeV9jbXAgPSBOVUxMOworICBjdHgtPnZlcmlmeV9hcmcgPSBOVUxMOworfQorCisvKiBGcmVlIGEgY29udGV4dCBpbml0aWFsemllZCBieSBfZ2NyeV9wa191dGlsX2luaXRfZW5jb2RpbmdfY3R4LiAgKi8KK3ZvaWQKK19nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCkKK3sKKyAgeGZyZWUgKGN0eC0+bGFiZWwpOworfQorCisKKy8qIFRha2UgdGhlIGhhc2ggdmFsdWUgYW5kIGNvbnZlcnQgaW50byBhbiBNUEksIHN1aXRhYmxlIGZvcgorICAgcGFzc2luZyB0byB0aGUgbG93IGxldmVsIGZ1bmN0aW9ucy4gIFdlIGN1cnJlbnRseSBzdXBwb3J0IHRoZQorICAgb2xkIHN0eWxlIHdheSBvZiBwYXNzaW5nIGp1c3QgYSBNUEkgYW5kIHRoZSBtb2Rlcm4gaW50ZXJmYWNlIHdoaWNoCisgICBhbGxvd3MgdG8gcGFzcyBmbGFncyBzbyB0aGF0IHdlIGNhbiBjaG9vc2UgYmV0d2VlbiByYXcgYW5kIHBrY3MxCisgICBwYWRkaW5nIC0gbWF5IGJlIG1vcmUgcGFkZGluZyBvcHRpb25zIGxhdGVyLgorCisgICAoPG1waT4pCisgICBvcgorICAgKGRhdGEKKyAgICBbKGZsYWdzIFtyYXcsIGRpcmVjdCwgcGtjczEsIG9hZXAsIHBzcywgbm8tYmxpbmRpbmcsIHJmYzY5NzksIGVkZHNhXSldCisgICAgWyhoYXNoIDxhbGdvPiA8dmFsdWU+KV0KKyAgICBbKHZhbHVlIDx0ZXh0PildCisgICAgWyhoYXNoLWFsZ28gPGFsZ28+KV0KKyAgICBbKGxhYmVsIDxsYWJlbD4pXQorICAgIFsoc2FsdC1sZW5ndGggPGxlbmd0aD4pXQorICAgIFsocmFuZG9tLW92ZXJyaWRlIDxkYXRhPildCisgICApCisKKyAgIEVpdGhlciB0aGUgVkFMVUUgb3IgdGhlIEhBU0ggZWxlbWVudCBtdXN0IGJlIHByZXNlbnQgZm9yIHVzZQorICAgd2l0aCBzaWduYXR1cmVzLiAgVkFMVUUgaXMgdXNlZCBmb3IgZW5jcnlwdGlvbi4KKworICAgSEFTSC1BTEdPIGlzIHNwZWNpZmljIHRvIE9BRVAgYW5kIEVERFNBLgorCisgICBMQUJFTCBpcyBzcGVjaWZpYyB0byBPQUVQLgorCisgICBTQUxULUxFTkdUSCBpcyBmb3IgUFNTLgorCisgICBSQU5ET00tT1ZFUlJJREUgaXMgdXNlZCB0byByZXBsYWNlIHJhbmRvbSBub25jZXMgZm9yIHJlZ3Jlc3Npb24KKyAgIHRlc3RpbmcuICAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9wa191dGlsX2RhdGFfdG9fbXBpIChnY3J5X3NleHBfdCBpbnB1dCwgZ2NyeV9tcGlfdCAqcmV0X21waSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggKmN0eCkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKyAgZ2NyeV9zZXhwX3QgbGRhdGEsIGxoYXNoLCBsdmFsdWU7CisgIHNpemVfdCBuOworICBjb25zdCBjaGFyICpzOworICBpbnQgdW5rbm93bl9mbGFnID0gMDsKKyAgaW50IHBhcnNlZF9mbGFncyA9IDA7CisKKyAgKnJldF9tcGkgPSBOVUxMOworICBsZGF0YSA9IHNleHBfZmluZF90b2tlbiAoaW5wdXQsICJkYXRhIiwgMCk7CisgIGlmICghbGRhdGEpCisgICAgeyAvKiBhc3N1bWUgb2xkIHN0eWxlICovCisgICAgICAqcmV0X21waSA9IHNleHBfbnRoX21waSAoaW5wdXQsIDAsIDApOworICAgICAgcmV0dXJuICpyZXRfbXBpID8gR1BHX0VSUl9OT19FUlJPUiA6IEdQR19FUlJfSU5WX09CSjsKKyAgICB9CisKKyAgLyogU2VlIHdoZXRoZXIgdGhlcmUgaXMgYSBmbGFncyBsaXN0LiAgKi8KKyAgeworICAgIGdjcnlfc2V4cF90IGxmbGFncyA9IHNleHBfZmluZF90b2tlbiAobGRhdGEsICJmbGFncyIsIDApOworICAgIGlmIChsZmxhZ3MpCisgICAgICB7CisgICAgICAgIGlmIChfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VkX2ZsYWdzLCAmY3R4LT5lbmNvZGluZykpCisgICAgICAgICAgdW5rbm93bl9mbGFnID0gMTsKKyAgICAgICAgc2V4cF9yZWxlYXNlIChsZmxhZ3MpOworICAgICAgfQorICB9CisKKyAgaWYgKGN0eC0+ZW5jb2RpbmcgPT0gUFVCS0VZX0VOQ19VTktOT1dOKQorICAgIGN0eC0+ZW5jb2RpbmcgPSBQVUJLRVlfRU5DX1JBVzsgLyogZGVmYXVsdCB0byByYXcgKi8KKworICAvKiBHZXQgSEFTSCBvciBNUEkgKi8KKyAgbGhhc2ggPSBzZXhwX2ZpbmRfdG9rZW4gKGxkYXRhLCAiaGFzaCIsIDApOworICBsdmFsdWUgPSBsaGFzaD8gTlVMTCA6IHNleHBfZmluZF90b2tlbiAobGRhdGEsICJ2YWx1ZSIsIDApOworCisgIGlmICghKCFsaGFzaCBeICFsdmFsdWUpKQorICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBub25lIG9yIGJvdGggZ2l2ZW4gKi8KKyAgZWxzZSBpZiAodW5rbm93bl9mbGFnKQorICAgIHJjID0gR1BHX0VSUl9JTlZfRkxBRzsKKyAgZWxzZSBpZiAoY3R4LT5lbmNvZGluZyA9PSBQVUJLRVlfRU5DX1JBVworICAgICAgICAgICAmJiAocGFyc2VkX2ZsYWdzICYgUFVCS0VZX0ZMQUdfRUREU0EpKQorICAgIHsKKyAgICAgIC8qIFByZXBhcmUgZm9yIEVkRFNBLiAgKi8KKyAgICAgIGdjcnlfc2V4cF90IGxpc3Q7CisgICAgICB2b2lkICp2YWx1ZTsKKyAgICAgIHNpemVfdCB2YWx1ZWxlbjsKKworICAgICAgaWYgKCFsdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisgICAgICAvKiBHZXQgSEFTSC1BTEdPLiAqLworICAgICAgbGlzdCA9IHNleHBfZmluZF90b2tlbiAobGRhdGEsICJoYXNoLWFsZ28iLCAwKTsKKyAgICAgIGlmIChsaXN0KQorICAgICAgICB7CisgICAgICAgICAgcyA9IHNleHBfbnRoX2RhdGEgKGxpc3QsIDEsICZuKTsKKyAgICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3R4LT5oYXNoX2FsZ28gPSBnZXRfaGFzaF9hbGdvIChzLCBuKTsKKyAgICAgICAgICAgICAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKyAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfRElHRVNUX0FMR087CisgICAgICAgICAgICB9CisgICAgICAgICAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKworICAgICAgLyogR2V0IFZBTFVFLiAgKi8KKyAgICAgIHZhbHVlID0gc2V4cF9udGhfYnVmZmVyIChsdmFsdWUsIDEsICZ2YWx1ZWxlbik7CisgICAgICBpZiAoIXZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgLyogV2UgYXNzdW1lIHRoYXQgYSB6ZXJvIGxlbmd0aCBtZXNzYWdlIGlzIG1lYW50IGJ5CisgICAgICAgICAgICAgIih2YWx1ZSkiLiAgVGhpcyBpcyBjb21tb25seSB1c2VkIGJ5IHRlc3QgdmVjdG9ycy4gIE5vdGUKKyAgICAgICAgICAgICB0aGF0IFMtZXhwcmVzc2lvbiBkbyBub3QgYWxsb3cgemVybyBsZW5ndGggaXRlbXMuICovCisgICAgICAgICAgdmFsdWVsZW4gPSAwOworICAgICAgICAgIHZhbHVlID0geHRyeW1hbGxvYyAoMSk7CisgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCh2YWx1ZWxlbiAqIDgpIDwgdmFsdWVsZW4pCisgICAgICAgIHsKKyAgICAgICAgICB4ZnJlZSAodmFsdWUpOworICAgICAgICAgIHJjID0gR1BHX0VSUl9UT09fTEFSR0U7CisgICAgICAgIH0KKyAgICAgIGlmIChyYykKKyAgICAgICAgZ290byBsZWF2ZTsKKworICAgICAgLyogTm90ZSB0aGF0IG1waV9zZXRfb3BhcXVlIHRha2VzIG93bmVyc2hpcCBvZiBWQUxVRS4gICovCisgICAgICAqcmV0X21waSA9IG1waV9zZXRfb3BhcXVlIChOVUxMLCB2YWx1ZSwgdmFsdWVsZW4qOCk7CisgICAgfQorICBlbHNlIGlmIChjdHgtPmVuY29kaW5nID09IFBVQktFWV9FTkNfUkFXICYmIGxoYXNoCisgICAgICAgICAgICYmICgocGFyc2VkX2ZsYWdzICYgUFVCS0VZX0ZMQUdfUkFXX0ZMQUcpCisgICAgICAgICAgICAgICB8fCAocGFyc2VkX2ZsYWdzICYgUFVCS0VZX0ZMQUdfUkZDNjk3OSkpKQorICAgIHsKKyAgICAgIC8qIFJhdyBlbmNvZGluZyBhbG9uZyB3aXRoIGEgaGFzaCBlbGVtZW50LiAgVGhpcyBpcyBjb21tb25seQorICAgICAgICAgdXNlZCBmb3IgRFNBLiAgRm9yIGJldHRlciBiYWNrd2FyZCBlcnJvciBjb21wYXRpYmlsaXR5IHdlCisgICAgICAgICBhbGxvdyB0aGlzIG9ubHkgaWYgZWl0aGVyIHRoZSByZmM2OTc5IGZsYWcgaGFzIGJlZW4gZ2l2ZW4gb3IKKyAgICAgICAgIHRoZSByYXcgZmxhZ3Mgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uICAqLworICAgICAgaWYgKHNleHBfbGVuZ3RoIChsaGFzaCkgIT0gMykKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlIGlmICggIShzPXNleHBfbnRoX2RhdGEgKGxoYXNoLCAxLCAmbikpIHx8ICFuICkKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB2b2lkICp2YWx1ZTsKKyAgICAgICAgICBzaXplX3QgdmFsdWVsZW47CisKKwkgIGN0eC0+aGFzaF9hbGdvID0gZ2V0X2hhc2hfYWxnbyAocywgbik7CisgICAgICAgICAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgICAgICBlbHNlIGlmICghKHZhbHVlPXNleHBfbnRoX2J1ZmZlciAobGhhc2gsIDIsICZ2YWx1ZWxlbikpKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICAgICAgZWxzZSBpZiAoKHZhbHVlbGVuICogOCkgPCB2YWx1ZWxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeGZyZWUgKHZhbHVlKTsKKyAgICAgICAgICAgICAgcmMgPSBHUEdfRVJSX1RPT19MQVJHRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAqcmV0X21waSA9IG1waV9zZXRfb3BhcXVlIChOVUxMLCB2YWx1ZSwgdmFsdWVsZW4qOCk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKGN0eC0+ZW5jb2RpbmcgPT0gUFVCS0VZX0VOQ19SQVcgJiYgbHZhbHVlKQorICAgIHsKKyAgICAgIC8qIFJGQzY5NjkgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBhIGhhc2ggdmFsdWUgYW5kIG5vdCB0aGUKKyAgICAgICAgIE1QSSBiYXNlZCB2YWx1ZS4gICovCisgICAgICBpZiAocGFyc2VkX2ZsYWdzICYgUFVCS0VZX0ZMQUdfUkZDNjk3OSkKKyAgICAgICAgeworICAgICAgICAgIHJjID0gR1BHX0VSUl9DT05GTElDVDsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisKKyAgICAgIC8qIEdldCB0aGUgdmFsdWUgKi8KKyAgICAgICpyZXRfbXBpID0gc2V4cF9udGhfbXBpIChsdmFsdWUsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICBpZiAoISpyZXRfbXBpKQorICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsKKyAgICB9CisgIGVsc2UgaWYgKGN0eC0+ZW5jb2RpbmcgPT0gUFVCS0VZX0VOQ19QS0NTMSAmJiBsdmFsdWUKKwkgICAmJiBjdHgtPm9wID09IFBVQktFWV9PUF9FTkNSWVBUKQorICAgIHsKKyAgICAgIGNvbnN0IHZvaWQgKiB2YWx1ZTsKKyAgICAgIHNpemVfdCB2YWx1ZWxlbjsKKyAgICAgIGdjcnlfc2V4cF90IGxpc3Q7CisgICAgICB2b2lkICpyYW5kb21fb3ZlcnJpZGUgPSBOVUxMOworICAgICAgc2l6ZV90IHJhbmRvbV9vdmVycmlkZV9sZW4gPSAwOworCisgICAgICBpZiAoICEodmFsdWU9c2V4cF9udGhfZGF0YSAobHZhbHVlLCAxLCAmdmFsdWVsZW4pKSB8fCAhdmFsdWVsZW4gKQorICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIEdldCBvcHRpb25hbCBSQU5ET00tT1ZFUlJJREUuICAqLworICAgICAgICAgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKGxkYXRhLCAicmFuZG9tLW92ZXJyaWRlIiwgMCk7CisgICAgICAgICAgaWYgKGxpc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHMgPSBzZXhwX250aF9kYXRhIChsaXN0LCAxLCAmbik7CisgICAgICAgICAgICAgIGlmICghcykKKyAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgICAgICAgICBlbHNlIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICByYW5kb21fb3ZlcnJpZGUgPSB4dHJ5bWFsbG9jIChuKTsKKyAgICAgICAgICAgICAgICAgIGlmICghcmFuZG9tX292ZXJyaWRlKQorICAgICAgICAgICAgICAgICAgICByYyA9IGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChyYW5kb21fb3ZlcnJpZGUsIHMsIG4pOworICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9vdmVycmlkZV9sZW4gPSBuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZXhwX3JlbGVhc2UgKGxpc3QpOworICAgICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHJjID0gX2djcnlfcnNhX3BrY3MxX2VuY29kZV9mb3JfZW5jIChyZXRfbXBpLCBjdHgtPm5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdmFsdWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9vdmVycmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX292ZXJyaWRlX2xlbik7CisgICAgICAgICAgeGZyZWUgKHJhbmRvbV9vdmVycmlkZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKGN0eC0+ZW5jb2RpbmcgPT0gUFVCS0VZX0VOQ19QS0NTMSAmJiBsaGFzaAorCSAgICYmIChjdHgtPm9wID09IFBVQktFWV9PUF9TSUdOIHx8IGN0eC0+b3AgPT0gUFVCS0VZX09QX1ZFUklGWSkpCisgICAgeworICAgICAgaWYgKHNleHBfbGVuZ3RoIChsaGFzaCkgIT0gMykKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlIGlmICggIShzPXNleHBfbnRoX2RhdGEgKGxoYXNoLCAxLCAmbikpIHx8ICFuICkKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWU7CisgICAgICAgICAgc2l6ZV90IHZhbHVlbGVuOworCisJICBjdHgtPmhhc2hfYWxnbyA9IGdldF9oYXNoX2FsZ28gKHMsIG4pOworCisgICAgICAgICAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgICAgICBlbHNlIGlmICggISh2YWx1ZT1zZXhwX250aF9kYXRhIChsaGFzaCwgMiwgJnZhbHVlbGVuKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXZhbHVlbGVuICkKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOworICAgICAgICAgIGVsc2UKKwkgICAgcmMgPSBfZ2NyeV9yc2FfcGtjczFfZW5jb2RlX2Zvcl9zaWcgKHJldF9tcGksIGN0eC0+bmJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aGFzaF9hbGdvKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoY3R4LT5lbmNvZGluZyA9PSBQVUJLRVlfRU5DX09BRVAgJiYgbHZhbHVlCisJICAgJiYgY3R4LT5vcCA9PSBQVUJLRVlfT1BfRU5DUllQVCkKKyAgICB7CisgICAgICBjb25zdCB2b2lkICogdmFsdWU7CisgICAgICBzaXplX3QgdmFsdWVsZW47CisKKyAgICAgIGlmICggISh2YWx1ZT1zZXhwX250aF9kYXRhIChsdmFsdWUsIDEsICZ2YWx1ZWxlbikpIHx8ICF2YWx1ZWxlbiApCisJcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlCisJeworCSAgZ2NyeV9zZXhwX3QgbGlzdDsKKyAgICAgICAgICB2b2lkICpyYW5kb21fb3ZlcnJpZGUgPSBOVUxMOworICAgICAgICAgIHNpemVfdCByYW5kb21fb3ZlcnJpZGVfbGVuID0gMDsKKworCSAgLyogR2V0IEhBU0gtQUxHTy4gKi8KKwkgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKGxkYXRhLCAiaGFzaC1hbGdvIiwgMCk7CisJICBpZiAobGlzdCkKKwkgICAgeworCSAgICAgIHMgPSBzZXhwX250aF9kYXRhIChsaXN0LCAxLCAmbik7CisJICAgICAgaWYgKCFzKQorCQlyYyA9IEdQR19FUlJfTk9fT0JKOworCSAgICAgIGVsc2UKKwkJeworCQkgIGN0eC0+aGFzaF9hbGdvID0gZ2V0X2hhc2hfYWxnbyAocywgbik7CisJCSAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKwkJICAgIHJjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKwkJfQorCSAgICAgIHNleHBfcmVsZWFzZSAobGlzdCk7CisJICAgICAgaWYgKHJjKQorCQlnb3RvIGxlYXZlOworCSAgICB9CisKKwkgIC8qIEdldCBMQUJFTC4gKi8KKwkgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKGxkYXRhLCAibGFiZWwiLCAwKTsKKwkgIGlmIChsaXN0KQorCSAgICB7CisJICAgICAgcyA9IHNleHBfbnRoX2RhdGEgKGxpc3QsIDEsICZuKTsKKwkgICAgICBpZiAoIXMpCisJCXJjID0gR1BHX0VSUl9OT19PQko7CisJICAgICAgZWxzZSBpZiAobiA+IDApCisJCXsKKwkJICBjdHgtPmxhYmVsID0geHRyeW1hbGxvYyAobik7CisJCSAgaWYgKCFjdHgtPmxhYmVsKQorCQkgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIG1lbWNweSAoY3R4LT5sYWJlbCwgcywgbik7CisJCSAgICAgIGN0eC0+bGFiZWxsZW4gPSBuOworCQkgICAgfQorCQl9CisJICAgICAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKwkgICAgICBpZiAocmMpCisJCWdvdG8gbGVhdmU7CisJICAgIH0KKyAgICAgICAgICAvKiBHZXQgb3B0aW9uYWwgUkFORE9NLU9WRVJSSURFLiAgKi8KKyAgICAgICAgICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChsZGF0YSwgInJhbmRvbS1vdmVycmlkZSIsIDApOworICAgICAgICAgIGlmIChsaXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzID0gc2V4cF9udGhfZGF0YSAobGlzdCwgMSwgJm4pOworICAgICAgICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICAgICAgcmMgPSBHUEdfRVJSX05PX09CSjsKKyAgICAgICAgICAgICAgZWxzZSBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcmFuZG9tX292ZXJyaWRlID0geHRyeW1hbGxvYyAobik7CisgICAgICAgICAgICAgICAgICBpZiAoIXJhbmRvbV9vdmVycmlkZSkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAocmFuZG9tX292ZXJyaWRlLCBzLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fb3ZlcnJpZGVfbGVuID0gbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisKKwkgIHJjID0gX2djcnlfcnNhX29hZXBfZW5jb2RlIChyZXRfbXBpLCBjdHgtPm5iaXRzLCBjdHgtPmhhc2hfYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmxhYmVsLCBjdHgtPmxhYmVsbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fb3ZlcnJpZGUsIHJhbmRvbV9vdmVycmlkZV9sZW4pOworCisgICAgICAgICAgeGZyZWUgKHJhbmRvbV9vdmVycmlkZSk7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoY3R4LT5lbmNvZGluZyA9PSBQVUJLRVlfRU5DX1BTUyAmJiBsaGFzaAorCSAgICYmIGN0eC0+b3AgPT0gUFVCS0VZX09QX1NJR04pCisgICAgeworICAgICAgaWYgKHNleHBfbGVuZ3RoIChsaGFzaCkgIT0gMykKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlIGlmICggIShzPXNleHBfbnRoX2RhdGEgKGxoYXNoLCAxLCAmbikpIHx8ICFuICkKKyAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PQko7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWU7CisgICAgICAgICAgc2l6ZV90IHZhbHVlbGVuOworICAgICAgICAgIHZvaWQgKnJhbmRvbV9vdmVycmlkZSA9IE5VTEw7CisgICAgICAgICAgc2l6ZV90IHJhbmRvbV9vdmVycmlkZV9sZW4gPSAwOworCisJICBjdHgtPmhhc2hfYWxnbyA9IGdldF9oYXNoX2FsZ28gKHMsIG4pOworCisgICAgICAgICAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgICAgICBlbHNlIGlmICggISh2YWx1ZT1zZXhwX250aF9kYXRhIChsaGFzaCwgMiwgJnZhbHVlbGVuKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXZhbHVlbGVuICkKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOworICAgICAgICAgIGVsc2UKKwkgICAgeworCSAgICAgIGdjcnlfc2V4cF90IGxpc3Q7CisKKwkgICAgICAvKiBHZXQgU0FMVC1MRU5HVEguICovCisJICAgICAgbGlzdCA9IHNleHBfZmluZF90b2tlbiAobGRhdGEsICJzYWx0LWxlbmd0aCIsIDApOworCSAgICAgIGlmIChsaXN0KQorCQl7CisJCSAgcyA9IHNleHBfbnRoX2RhdGEgKGxpc3QsIDEsICZuKTsKKwkJICBpZiAoIXMpCisJCSAgICB7CisJCSAgICAgIHJjID0gR1BHX0VSUl9OT19PQko7CisJCSAgICAgIGdvdG8gbGVhdmU7CisJCSAgICB9CisJCSAgY3R4LT5zYWx0bGVuID0gKHVuc2lnbmVkIGludClzdHJ0b3VsIChzLCBOVUxMLCAxMCk7CisJCSAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKwkJfQorCisgICAgICAgICAgICAgIC8qIEdldCBvcHRpb25hbCBSQU5ET00tT1ZFUlJJREUuICAqLworICAgICAgICAgICAgICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChsZGF0YSwgInJhbmRvbS1vdmVycmlkZSIsIDApOworICAgICAgICAgICAgICBpZiAobGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzID0gc2V4cF9udGhfZGF0YSAobGlzdCwgMSwgJm4pOworICAgICAgICAgICAgICAgICAgaWYgKCFzKQorICAgICAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fb3ZlcnJpZGUgPSB4dHJ5bWFsbG9jIChuKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmRvbV9vdmVycmlkZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKHJhbmRvbV9vdmVycmlkZSwgcywgbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9vdmVycmlkZV9sZW4gPSBuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBzZXhwX3JlbGVhc2UgKGxpc3QpOworICAgICAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAvKiBFbmNvZGUgdGhlIGRhdGEuICAoTkJJVFMtMSBpcyBkdWUgdG8gOC4xLjEsIHN0ZXAgMS4pICovCisJICAgICAgcmMgPSBfZ2NyeV9yc2FfcHNzX2VuY29kZSAocmV0X21waSwgY3R4LT5uYml0cyAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aGFzaF9hbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdmFsdWVsZW4sIGN0eC0+c2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX292ZXJyaWRlLCByYW5kb21fb3ZlcnJpZGVfbGVuKTsKKworICAgICAgICAgICAgICB4ZnJlZSAocmFuZG9tX292ZXJyaWRlKTsKKwkgICAgfQorICAgICAgICB9CisgICAgfQorICBlbHNlIGlmIChjdHgtPmVuY29kaW5nID09IFBVQktFWV9FTkNfUFNTICYmIGxoYXNoCisJICAgJiYgY3R4LT5vcCA9PSBQVUJLRVlfT1BfVkVSSUZZKQorICAgIHsKKyAgICAgIGlmIChzZXhwX2xlbmd0aCAobGhhc2gpICE9IDMpCisgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOworICAgICAgZWxzZSBpZiAoICEocz1zZXhwX250aF9kYXRhIChsaGFzaCwgMSwgJm4pKSB8fCAhbiApCisgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOworICAgICAgZWxzZQorICAgICAgICB7CisJICBjdHgtPmhhc2hfYWxnbyA9IGdldF9oYXNoX2FsZ28gKHMsIG4pOworCisgICAgICAgICAgaWYgKCFjdHgtPmhhc2hfYWxnbykKKyAgICAgICAgICAgIHJjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpyZXRfbXBpID0gc2V4cF9udGhfbXBpIChsaGFzaCwgMiwgR0NSWU1QSV9GTVRfVVNHKTsKKwkgICAgICBpZiAoISpyZXRfbXBpKQorCQlyYyA9IEdQR19FUlJfSU5WX09CSjsKKwkgICAgICBjdHgtPnZlcmlmeV9jbXAgPSBwc3NfdmVyaWZ5X2NtcDsKKwkgICAgICBjdHgtPnZlcmlmeV9hcmcgPSAqcmV0X21waTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICByYyA9IEdQR19FUlJfQ09ORkxJQ1Q7CisKKyBsZWF2ZToKKyAgc2V4cF9yZWxlYXNlIChsZGF0YSk7CisgIHNleHBfcmVsZWFzZSAobGhhc2gpOworICBzZXhwX3JlbGVhc2UgKGx2YWx1ZSk7CisKKyAgaWYgKCFyYykKKyAgICBjdHgtPmZsYWdzID0gcGFyc2VkX2ZsYWdzOworICBlbHNlCisgICAgeworICAgICAgeGZyZWUgKGN0eC0+bGFiZWwpOworICAgICAgY3R4LT5sYWJlbCA9IE5VTEw7CisgICAgfQorCisgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2NpcGhlci9wdWJrZXkuYyBiL2NpcGhlci9wdWJrZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTMwMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3B1YmtleS5jCkBAIC0wLDAgKzEsOTYyIEBACisvKiBwdWJrZXkuYyAgLQlwdWJrZXkgZGlzcGF0Y2hlcgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA1LAorICogICAgICAgICAgICAgICAyMDA3LCAyMDA4LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1waS5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImF0aC5oIgorI2luY2x1ZGUgImNvbnRleHQuaCIKKyNpbmNsdWRlICJwdWJrZXktaW50ZXJuYWwuaCIKKworCisvKiBUaGlzIGlzIHRoZSBsaXN0IG9mIHRoZSBwdWJsaWMta2V5IGFsZ29yaXRobXMgaW5jbHVkZWQgaW4KKyAgIExpYmdjcnlwdC4gICovCitzdGF0aWMgZ2NyeV9wa19zcGVjX3QgKnB1YmtleV9saXN0W10gPQorICB7CisjaWYgVVNFX0VDQworICAgICZfZ2NyeV9wdWJrZXlfc3BlY19lY2MsCisjZW5kaWYKKyNpZiBVU0VfUlNBCisgICAgJl9nY3J5X3B1YmtleV9zcGVjX3JzYSwKKyNlbmRpZgorI2lmIFVTRV9EU0EKKyAgICAmX2djcnlfcHVia2V5X3NwZWNfZHNhLAorI2VuZGlmCisjaWYgVVNFX0VMR0FNQUwKKyAgICAmX2djcnlfcHVia2V5X3NwZWNfZWxnLAorI2VuZGlmCisgICAgTlVMTAorICB9OworCisKK3N0YXRpYyBpbnQKK21hcF9hbGdvIChpbnQgYWxnbykKK3sKKyBzd2l0Y2ggKGFsZ28pCisgICB7CisgICBjYXNlIEdDUllfUEtfRUNEU0E6CisgICBjYXNlIEdDUllfUEtfRUNESDoKKyAgICAgcmV0dXJuIEdDUllfUEtfRUNDOworICAgY2FzZSBHQ1JZX1BLX0VMR19FOgorICAgICByZXR1cm4gR0NSWV9QS19FTEc7CisgICBkZWZhdWx0OgorICAgICByZXR1cm4gYWxnbzsKKyAgIH0KK30KKworCisKKy8qIFJldHVybiB0aGUgc3BlYyBzdHJ1Y3R1cmUgZm9yIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSBBTEdPLiAgRm9yCisgICBhbiB1bmtub3duIGFsZ29yaXRobSBOVUxMIGlzIHJldHVybmVkLiAgKi8KK3N0YXRpYyBnY3J5X3BrX3NwZWNfdCAqCitzcGVjX2Zyb21fYWxnbyAoaW50IGFsZ28pCit7CisgIGludCBpZHg7CisgIGdjcnlfcGtfc3BlY190ICpzcGVjOworCisgIGFsZ28gPSBtYXBfYWxnbyAoYWxnbyk7CisKKyAgZm9yIChpZHggPSAwOyAoc3BlYyA9IHB1YmtleV9saXN0W2lkeF0pOyBpZHgrKykKKyAgICBpZiAoYWxnbyA9PSBzcGVjLT5hbGdvKQorICAgICAgcmV0dXJuIHNwZWM7CisgIHJldHVybiBOVUxMOworfQorCisKKy8qIFJldHVybiB0aGUgc3BlYyBzdHJ1Y3R1cmUgZm9yIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB3aXRoIE5BTUUuCisgICBGb3IgYW4gdW5rbm93biBuYW1lIE5VTEwgaXMgcmV0dXJuZWQuICAqLworc3RhdGljIGdjcnlfcGtfc3BlY190ICoKK3NwZWNfZnJvbV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X3BrX3NwZWNfdCAqc3BlYzsKKyAgaW50IGlkeDsKKyAgY29uc3QgY2hhciAqKmFsaWFzZXM7CisKKyAgZm9yIChpZHg9MDsgKHNwZWMgPSBwdWJrZXlfbGlzdFtpZHhdKTsgaWR4KyspCisgICAgeworICAgICAgaWYgKCFzdHJpY21wIChuYW1lLCBzcGVjLT5uYW1lKSkKKyAgICAgICAgcmV0dXJuIHNwZWM7CisgICAgICBmb3IgKGFsaWFzZXMgPSBzcGVjLT5hbGlhc2VzOyAqYWxpYXNlczsgYWxpYXNlcysrKQorICAgICAgICBpZiAoIXN0cmljbXAgKG5hbWUsICphbGlhc2VzKSkKKyAgICAgICAgICByZXR1cm4gc3BlYzsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworCisvKiBHaXZlbiB0aGUgcy1leHByZXNzaW9uIFNFWFAgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBiZSBlaXRoZXIKKyAqICJwcml2YXRlLWtleSIgb3IgInB1YmxpYy1rZXkiIHJldHVybiB0aGUgc3BlYyBzdHJ1Y3R1cmUgZm9yIGl0LiAgV2UKKyAqIGxvb2sgdGhyb3VnaCB0aGUgbGlzdCB0byBmaW5kIGEgbGlzdCBiZWdpbm5pbmcgd2l0aCAicHJpdmF0ZS1rZXkiCisgKiBvciAicHVibGljLWtleSIgLSB0aGUgZmlyc3Qgb25lIGZvdW5kIGlzIHVzZWQuICBJZiBXQU5UX1BSSVZBVEUgaXMKKyAqIHNldCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHN1Y2NlZWQgaWYgYSBwcml2YXRlIGtleSBoYXMgYmVlbiBnaXZlbi4KKyAqIE9uIHN1Y2Nlc3MgdGhlIHNwZWMgaXMgc3RvcmVkIGF0IFJfU1BFQy4gIE9uIGVycm9yIE5VTEwgaXMgc3RvcmVkCisgKiBhdCBSX1NQRUMgYW5kIGFuIGVycm9yIGNvZGUgcmV0dXJuZWQuICBJZiBSX1BBUk1TIGlzIG5vdCBOVUxMIGFuZAorICogdGhlIGZ1Y250aW9uIHJldHVybnMgc3VjY2VzcywgdGhlIHBhcmFtZXRlciBsaXN0IGJlbG93CisgKiAicHJpdmF0ZS1rZXkiIG9yICJwdWJsaWMta2V5IiBpcyBzdG9yZWQgdGhlcmUgYW5kIHRoZSBjYWxsZXIgbXVzdAorICogY2FsbCBnY3J5X3NleHBfcmVsZWFzZSBvbiBpdC4KKyAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorc3BlY19mcm9tX3NleHAgKGdjcnlfc2V4cF90IHNleHAsIGludCB3YW50X3ByaXZhdGUsCisgICAgICAgICAgICAgICAgZ2NyeV9wa19zcGVjX3QgKipyX3NwZWMsIGdjcnlfc2V4cF90ICpyX3Bhcm1zKQoreworICBnY3J5X3NleHBfdCBsaXN0LCBsMjsKKyAgY2hhciAqbmFtZTsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisKKyAgKnJfc3BlYyA9IE5VTEw7CisgIGlmIChyX3Bhcm1zKQorICAgICpyX3Bhcm1zID0gTlVMTDsKKworICAvKiBDaGVjayB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGlzIHZhbGlkLiAgSWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEKKyAgICAgcHVibGljIGtleSBidXQgYSBwcml2YXRlIGtleSB3YXMgc3VwcGxpZWQsIHdlIGFsbG93IHRoZSB1c2Ugb2YKKyAgICAgdGhlIHByaXZhdGUga2V5IGFueXdheS4gIFRoZSByYXRpb25hbGUgZm9yIHRoaXMgaXMgdGhhdCB0aGUKKyAgICAgcHJpdmF0ZSBrZXkgaXMgYSBzdXBlcnNldCBvZiB0aGUgcHVibGljIGtleS4gICovCisgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKHNleHAsIHdhbnRfcHJpdmF0ZT8gInByaXZhdGUta2V5IjoicHVibGljLWtleSIsIDApOworICBpZiAoIWxpc3QgJiYgIXdhbnRfcHJpdmF0ZSkKKyAgICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChzZXhwLCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCFsaXN0KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9PQko7IC8qIERvZXMgbm90IGNvbnRhaW4gYSBrZXkgb2JqZWN0LiAgKi8KKworICBsMiA9IHNleHBfY2FkciAobGlzdCk7CisgIHNleHBfcmVsZWFzZSAobGlzdCk7CisgIGxpc3QgPSBsMjsKKyAgbmFtZSA9IHNleHBfbnRoX3N0cmluZyAobGlzdCwgMCk7CisgIGlmICghbmFtZSkKKyAgICB7CisgICAgICBzZXhwX3JlbGVhc2UgKCBsaXN0ICk7CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOyAgICAgIC8qIEludmFsaWQgc3RydWN0dXJlIG9mIG9iamVjdC4gKi8KKyAgICB9CisgIHNwZWMgPSBzcGVjX2Zyb21fbmFtZSAobmFtZSk7CisgIHhmcmVlIChuYW1lKTsKKyAgaWYgKCFzcGVjKQorICAgIHsKKyAgICAgIHNleHBfcmVsZWFzZSAobGlzdCk7CisgICAgICByZXR1cm4gR1BHX0VSUl9QVUJLRVlfQUxHTzsgLyogVW5rbm93biBhbGdvcml0aG0uICovCisgICAgfQorICAqcl9zcGVjID0gc3BlYzsKKyAgaWYgKHJfcGFybXMpCisgICAgKnJfcGFybXMgPSBsaXN0OworICBlbHNlCisgICAgc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgcmV0dXJuIDA7Cit9CisKKworCisvKiBEaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIGFsZ29yaXRobSBBTEdPLiAgVGhpcyBpcyBub3QgdGhyZWFkIHNhZmUgYW5kCisgICBzaG91bGQgdGh1cyBiZSBjYWxsZWQgZWFybHkuICAqLworc3RhdGljIHZvaWQKK2Rpc2FibGVfcHVia2V5X2FsZ28gKGludCBhbGdvKQoreworICBnY3J5X3BrX3NwZWNfdCAqc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKworICBpZiAoc3BlYykKKyAgICBzcGVjLT5mbGFncy5kaXNhYmxlZCA9IDE7Cit9CisKKworDAorLyoKKyAqIE1hcCBhIHN0cmluZyB0byB0aGUgcHVia2V5IGFsZ28KKyAqLworaW50CitfZ2NyeV9wa19tYXBfbmFtZSAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBnY3J5X3BrX3NwZWNfdCAqc3BlYzsKKworICBpZiAoIXN0cmluZykKKyAgICByZXR1cm4gMDsKKyAgc3BlYyA9IHNwZWNfZnJvbV9uYW1lIChzdHJpbmcpOworICBpZiAoIXNwZWMpCisgICAgcmV0dXJuIDA7CisgIGlmIChzcGVjLT5mbGFncy5kaXNhYmxlZCkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIHNwZWMtPmFsZ287Cit9CisKKworLyogTWFwIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB3aG9zZSBJRCBpcyBjb250YWluZWQgaW4gQUxHT1JJVEhNIHRvCisgICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIG5hbWUuICBGb3IgdW5rbm93bgorICAgYWxnb3JpdGhtIElEcyB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zICI/Ii4gKi8KK2NvbnN0IGNoYXIgKgorX2djcnlfcGtfYWxnb19uYW1lIChpbnQgYWxnbykKK3sKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKyAgaWYgKHNwZWMpCisgICAgcmV0dXJuIHNwZWMtPm5hbWU7CisgIHJldHVybiAiPyI7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIEEgVVNFIG9mIDAgbWVhbnM6IGRvbid0IGNhcmUuCisgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2NoZWNrX3B1YmtleV9hbGdvIChpbnQgYWxnbywgdW5zaWduZWQgdXNlKQoreworICBnY3J5X2Vycl9jb2RlX3QgZXJyID0gMDsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKyAgaWYgKHNwZWMpCisgICAgeworICAgICAgaWYgKCgodXNlICYgR0NSWV9QS19VU0FHRV9TSUdOKQorCSAgICYmICghIChzcGVjLT51c2UgJiBHQ1JZX1BLX1VTQUdFX1NJR04pKSkKKwkgIHx8ICgodXNlICYgR0NSWV9QS19VU0FHRV9FTkNSKQorCSAgICAgICYmICghIChzcGVjLT51c2UgJiBHQ1JZX1BLX1VTQUdFX0VOQ1IpKSkpCisJZXJyID0gR1BHX0VSUl9XUk9OR19QVUJLRVlfQUxHTzsKKyAgICB9CisgIGVsc2UKKyAgICBlcnIgPSBHUEdfRVJSX1BVQktFWV9BTEdPOworCisgIHJldHVybiBlcnI7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHB1YmxpYyBrZXkgbWF0ZXJpYWwgbnVtYmVycworICovCitzdGF0aWMgaW50CitwdWJrZXlfZ2V0X25wa2V5IChpbnQgYWxnbykKK3sKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisKKyAgcmV0dXJuIHNwZWM/IHN0cmxlbiAoc3BlYy0+ZWxlbWVudHNfcGtleSkgOiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWNyZXQga2V5IG1hdGVyaWFsIG51bWJlcnMKKyAqLworc3RhdGljIGludAorcHVia2V5X2dldF9uc2tleSAoaW50IGFsZ28pCit7CisgIGdjcnlfcGtfc3BlY190ICpzcGVjID0gc3BlY19mcm9tX2FsZ28gKGFsZ28pOworCisgIHJldHVybiBzcGVjPyBzdHJsZW4gKHNwZWMtPmVsZW1lbnRzX3NrZXkpIDogMDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlIG1hdGVyaWFsIG51bWJlcnMKKyAqLworc3RhdGljIGludAorcHVia2V5X2dldF9uc2lnIChpbnQgYWxnbykKK3sKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisKKyAgcmV0dXJuIHNwZWM/IHN0cmxlbiAoc3BlYy0+ZWxlbWVudHNfc2lnKSA6IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbmNyeXB0aW9uIG1hdGVyaWFsIG51bWJlcnMKKyAqLworc3RhdGljIGludAorcHVia2V5X2dldF9uZW5jIChpbnQgYWxnbykKK3sKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWMgPSBzcGVjX2Zyb21fYWxnbyAoYWxnbyk7CisKKyAgcmV0dXJuIHNwZWM/IHN0cmxlbiAoc3BlYy0+ZWxlbWVudHNfZW5jKSA6IDA7Cit9CisKKworDAorLyoKKyAgIERvIGEgUEsgZW5jcnlwdCBvcGVyYXRpb24KKworICAgQ2FsbGVyIGhhcyB0byBwcm92aWRlIGEgcHVibGljIGtleSBhcyB0aGUgU0VYUCBwa2V5IGFuZCBkYXRhIGFzIGEKKyAgIFNFWFAgd2l0aCBqdXN0IG9uZSBNUEkgaW4gaXQuIEFsdGVybmF0aXZlbHkgU19EQVRBIG1pZ2h0IGJlIGEKKyAgIGNvbXBsZXggUy1FeHByZXNzaW9uLCBzaW1pbGFyIHRvIHRoZSBvbmUgdXNlZCBmb3Igc2lnbmF0dXJlCisgICB2ZXJpZmljYXRpb24uICBUaGlzIHByb3ZpZGVzIGEgZmxhZyB3aGljaCBhbGxvd3MgdG8gaGFuZGxlIFBLQ1MjMQorICAgYmxvY2sgdHlwZSAyIHBhZGRpbmcuICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHNleHAgd2hpY2ggbWF5IGJlCisgICBwYXNzZWQgdG8gdG8gcGtfZGVjcnlwdC4KKworICAgUmV0dXJuczogMCBvciBhbiBlcnJvcmNvZGUuCisKKyAgIHNfZGF0YSA9IFNlZSBjb21tZW50IGZvciBfZ2NyeV9wa191dGlsX2RhdGFfdG9fbXBpCisgICBzX3BrZXkgPSA8a2V5LWFzLWRlZmluZWQtaW4tc2V4cF90b19rZXk+CisgICByX2NpcGggPSAoZW5jLXZhbAorICAgICAgICAgICAgICAgKDxhbGdvPgorICAgICAgICAgICAgICAgICAoPHBhcmFtX25hbWUxPiA8bXBpPikKKyAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICg8cGFyYW1fbmFtZW4+IDxtcGk+KQorICAgICAgICAgICAgICAgKSkKKworKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfZW5jcnlwdCAoZ2NyeV9zZXhwX3QgKnJfY2lwaCwgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBzX3BrZXkpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisgIGdjcnlfc2V4cF90IGtleXBhcm1zOworCisgICpyX2NpcGggPSBOVUxMOworCisgIHJjID0gc3BlY19mcm9tX3NleHAgKHNfcGtleSwgMCwgJnNwZWMsICZrZXlwYXJtcyk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworCisgIGlmIChzcGVjLT5lbmNyeXB0KQorICAgIHJjID0gc3BlYy0+ZW5jcnlwdCAocl9jaXBoLCBzX2RhdGEsIGtleXBhcm1zKTsKKyAgZWxzZQorICAgIHJjID0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisKKyBsZWF2ZToKKyAgc2V4cF9yZWxlYXNlIChrZXlwYXJtcyk7CisgIHJldHVybiByYzsKK30KKworCisvKgorICAgRG8gYSBQSyBkZWNyeXB0IG9wZXJhdGlvbgorCisgICBDYWxsZXIgaGFzIHRvIHByb3ZpZGUgYSBzZWNyZXQga2V5IGFzIHRoZSBTRVhQIHNrZXkgYW5kIGRhdGEgaW4gYQorICAgZm9ybWF0IGFzIGNyZWF0ZWQgYnkgZ2NyeV9wa19lbmNyeXB0LiAgRm9yIGhpc3RvcmljIHJlYXNvbnMgdGhlCisgICBmdW5jdGlvbiByZXR1cm5zIHNpbXBseSBhbiBNUEkgYXMgYW4gUy1leHByZXNzaW9uIHBhcnQ7IHRoaXMgaXMKKyAgIGRlcHJlY2F0ZWQgYW5kIHRoZSBuZXcgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdoaWNoIHJldHVybnMgYSByZWFsCisgICBTLWV4cHJlc3Npb25sIHRoaXMgaXMgc2VsZWN0ZWQgYnkgYWRkaW5nIGF0IGxlYXN0IGFuIGVtcHR5IGZsYWdzCisgICBsaXN0IHRvIFNfREFUQS4KKworICAgUmV0dXJuczogMCBvciBhbiBlcnJvcmNvZGUuCisKKyAgIHNfZGF0YSA9IChlbmMtdmFsCisgICAgICAgICAgICAgIFsoZmxhZ3MgW3JhdywgcGtjczEsIG9hZXBdKV0KKyAgICAgICAgICAgICAgKDxhbGdvPgorICAgICAgICAgICAgICAgICg8cGFyYW1fbmFtZTE+IDxtcGk+KQorICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICg8cGFyYW1fbmFtZW4+IDxtcGk+KQorICAgICAgICAgICAgICApKQorICAgc19za2V5ID0gPGtleS1hcy1kZWZpbmVkLWluLXNleHBfdG9fa2V5PgorICAgcl9wbGFpbj0gRWl0aGVyIGFuIGluY29tcGxldGUgUy1leHByZXNzaW9uIHdpdGhvdXQgdGhlIHBhcmVudGhlc2VzCisgICAgICAgICAgICBvciBpZiB0aGUgZmxhZ3MgbGlzdCBpcyB1c2VkIChldmVuIGlmIGVtcHR5KSBhIHJlYWwgUy1leHByZXNzaW9uOgorICAgICAgICAgICAgKHZhbHVlIFBMQUlOKS4gIEluIHJhdyBtb2RlIChvciBubyBmbGFncyBnaXZlbikgdGhlIHJldHVybmVkIHZhbHVlCisgICAgICAgICAgICBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCBNUEksIHRodXMgaXQgbWF5IGhhdmUgYW4gZXh0cmEKKyAgICAgICAgICAgIGxlYWRpbmcgemVybyBvY3RldCBldmVuIGlmIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICAgICAgICAgIFdpdGggcGtjczEgb3Igb2FlcCBkZWNvZGluZyBlbmFibGVkIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhCisgICAgICAgICAgICB2ZXJiYXRpbSBvY3RldCBzdHJpbmcuCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfZGVjcnlwdCAoZ2NyeV9zZXhwX3QgKnJfcGxhaW4sIGdjcnlfc2V4cF90IHNfZGF0YSwgZ2NyeV9zZXhwX3Qgc19za2V5KQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfcGtfc3BlY190ICpzcGVjOworICBnY3J5X3NleHBfdCBrZXlwYXJtczsKKworICAqcl9wbGFpbiA9IE5VTEw7CisKKyAgcmMgPSBzcGVjX2Zyb21fc2V4cCAoc19za2V5LCAxLCAmc3BlYywgJmtleXBhcm1zKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKHNwZWMtPmRlY3J5cHQpCisgICAgcmMgPSBzcGVjLT5kZWNyeXB0IChyX3BsYWluLCBzX2RhdGEsIGtleXBhcm1zKTsKKyAgZWxzZQorICAgIHJjID0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisKKyBsZWF2ZToKKyAgc2V4cF9yZWxlYXNlIChrZXlwYXJtcyk7CisgIHJldHVybiByYzsKK30KKworCisKKy8qCisgICBDcmVhdGUgYSBzaWduYXR1cmUuCisKKyAgIENhbGxlciBoYXMgdG8gcHJvdmlkZSBhIHNlY3JldCBrZXkgYXMgdGhlIFNFWFAgc2tleSBhbmQgZGF0YQorICAgZXhwcmVzc2VkIGFzIGEgU0VYUCBsaXN0IGhhc2ggd2l0aCBvbmx5IG9uZSBlbGVtZW50IHdoaWNoIHNob3VsZAorICAgaW5zdGFudGx5IGJlIGF2YWlsYWJsZSBhcyBhIE1QSS4gQWx0ZXJuYXRpdmVseSB0aGUgc3RydWN0dXJlIGdpdmVuCisgICBiZWxvdyBtYXkgYmUgdXNlZCBmb3IgU19IQVNILCBpdCBwcm92aWRlcyB0aGUgYWJpbGl5IHRvIHBhc3MgZmxhZ3MKKyAgIHRvIHRoZSBvcGVyYXRpb247IHRoZSBmbGFncyBkZWZpbmVkIGJ5IG5vdyBhcmUgInBrY3MxIiB3aGljaCBkb2VzCisgICBQS0NTIzEgYmxvY2sgdHlwZSAxIHN0eWxlIHBhZGRpbmcgYW5kICJwc3MiIGZvciBQU1MgZW5jb2RpbmcuCisKKyAgIFJldHVybnM6IDAgb3IgYW4gZXJyb3Jjb2RlLgorICAgICAgICAgICAgSW4gY2FzZSBvZiAwIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IFNFWFAgd2l0aCB0aGUKKyAgICAgICAgICAgIHNpZ25hdHVyZSB2YWx1ZTsgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIHNpZ25hdHVyZSBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgb3RoZXIgYXJndW1lbnRzIGJ1dCBpcyBhbHdheXMgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvCisgICAgICAgICAgICBnY3J5X3BrX3ZlcmlmeQorCisgICBzX2hhc2ggPSBTZWUgY29tbWVudCBmb3IgX2djcnktcGtfdXRpbF9kYXRhX3RvX21waQorCisgICBzX3NrZXkgPSA8a2V5LWFzLWRlZmluZWQtaW4tc2V4cF90b19rZXk+CisgICByX3NpZyAgPSAoc2lnLXZhbAorICAgICAgICAgICAgICAoPGFsZ28+CisgICAgICAgICAgICAgICAgKDxwYXJhbV9uYW1lMT4gPG1waT4pCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgKDxwYXJhbV9uYW1lbj4gPG1waT4pKQorICAgICAgICAgICAgIFsoaGFzaCBhbGdvKV0pCisKKyAgTm90ZSB0aGF0IChoYXNoIGFsZ28pIGluIFJfU0lHIGlzIG5vdCB1c2VkLgorKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfc2lnbiAoZ2NyeV9zZXhwX3QgKnJfc2lnLCBnY3J5X3NleHBfdCBzX2hhc2gsIGdjcnlfc2V4cF90IHNfc2tleSkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBnY3J5X3BrX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9zZXhwX3Qga2V5cGFybXM7CisKKyAgKnJfc2lnID0gTlVMTDsKKworICByYyA9IHNwZWNfZnJvbV9zZXhwIChzX3NrZXksIDEsICZzcGVjLCAma2V5cGFybXMpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAoc3BlYy0+c2lnbikKKyAgICByYyA9IHNwZWMtPnNpZ24gKHJfc2lnLCBzX2hhc2gsIGtleXBhcm1zKTsKKyAgZWxzZQorICAgIHJjID0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisKKyBsZWF2ZToKKyAgc2V4cF9yZWxlYXNlIChrZXlwYXJtcyk7CisgIHJldHVybiByYzsKK30KKworCisvKgorICAgVmVyaWZ5IGEgc2lnbmF0dXJlLgorCisgICBDYWxsZXIgaGFzIHRvIHN1cHBseSB0aGUgcHVibGljIGtleSBwa2V5LCB0aGUgc2lnbmF0dXJlIHNpZyBhbmQgaGlzCisgICBoYXNodmFsdWUgZGF0YS4gIFB1YmxpYyBrZXkgaGFzIHRvIGJlIGEgc3RhbmRhcmQgcHVibGljIGtleSBnaXZlbgorICAgYXMgYW4gUy1FeHAsIHNpZyBpcyBhIFMtRXhwIGFzIHJldHVybmVkIGZyb20gZ2NyeV9wa19zaWduIGFuZCBkYXRhCisgICBtdXN0IGJlIGFuIFMtRXhwIGxpa2UgdGhlIG9uZSBpbiBzaWduIHRvby4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3BrX3ZlcmlmeSAoZ2NyeV9zZXhwX3Qgc19zaWcsIGdjcnlfc2V4cF90IHNfaGFzaCwgZ2NyeV9zZXhwX3Qgc19wa2V5KQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIGdjcnlfcGtfc3BlY190ICpzcGVjOworICBnY3J5X3NleHBfdCBrZXlwYXJtczsKKworICByYyA9IHNwZWNfZnJvbV9zZXhwIChzX3BrZXksIDAsICZzcGVjLCAma2V5cGFybXMpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAoc3BlYy0+dmVyaWZ5KQorICAgIHJjID0gc3BlYy0+dmVyaWZ5IChzX3NpZywgc19oYXNoLCBrZXlwYXJtcyk7CisgIGVsc2UKKyAgICByYyA9IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEOworCisgbGVhdmU6CisgIHNleHBfcmVsZWFzZSAoa2V5cGFybXMpOworICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAgIFRlc3QgYSBrZXkuCisKKyAgIFRoaXMgbWF5IGJlIHVzZWQgZWl0aGVyIGZvciBhIHB1YmxpYyBvciBhIHNlY3JldCBrZXkgdG8gc2VlIHdoZXRoZXIKKyAgIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgb2theS4KKworICAgUmV0dXJuczogMCBvciBhbiBlcnJvcmNvZGUuCisKKyAgIE5PVEU6IFdlIGN1cnJlbnRseSBzdXBwb3J0IG9ubHkgc2VjcmV0IGtleSBjaGVja2luZy4gKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfdGVzdGtleSAoZ2NyeV9zZXhwX3Qgc19rZXkpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisgIGdjcnlfc2V4cF90IGtleXBhcm1zOworCisgIHJjID0gc3BlY19mcm9tX3NleHAgKHNfa2V5LCAxLCAmc3BlYywgJmtleXBhcm1zKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKHNwZWMtPmNoZWNrX3NlY3JldF9rZXkpCisgICAgcmMgPSBzcGVjLT5jaGVja19zZWNyZXRfa2V5IChrZXlwYXJtcyk7CisgIGVsc2UKKyAgICByYyA9IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEOworCisgbGVhdmU6CisgIHNleHBfcmVsZWFzZSAoa2V5cGFybXMpOworICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAgQ3JlYXRlIGEgcHVibGljIGtleSBwYWlyIGFuZCByZXR1cm4gaXQgaW4gcl9rZXkuCisgIEhvdyB0aGUga2V5IGlzIGNyZWF0ZWQgZGVwZW5kcyBvbiBzX3Bhcm1zOgorICAoZ2Vua2V5CisgICAoYWxnbworICAgICAocGFyYW1ldGVyX25hbWVfMSAuLi4uKQorICAgICAgLi4uLgorICAgICAocGFyYW1ldGVyX25hbWVfbiAuLi4uKQorICApKQorICBUaGUga2V5IGlzIHJldHVybmVkIGluIGEgZm9ybWF0IGRlcGVuZGluZyBvbiB0aGUKKyAgYWxnb3JpdGhtLiBCb3RoLCBwcml2YXRlIGFuZCBzZWNyZXQga2V5cyBhcmUgcmV0dXJuZWQKKyAgYW5kIG9wdGlvbmFsbHkgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW4uCisgIEZvciBlbGdhbWFsIHdlIHJldHVybiB0aGlzIHN0cnVjdHVyZToKKyAgKGtleS1kYXRhCisgICAocHVibGljLWtleQorICAgICAoZWxnCisgCShwIDxtcGk+KQorIAkoZyA8bXBpPikKKyAJKHkgPG1waT4pCisgICAgICkKKyAgICkKKyAgIChwcml2YXRlLWtleQorICAgICAoZWxnCisgCShwIDxtcGk+KQorIAkoZyA8bXBpPikKKyAJKHkgPG1waT4pCisgCSh4IDxtcGk+KQorICAgICApCisgICApCisgICAobWlzYy1rZXktaW5mbworICAgICAgKHBtMS1mYWN0b3JzIG4xIG4yIC4uLiBubikKKyAgICkpCisgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfZ2Vua2V5IChnY3J5X3NleHBfdCAqcl9rZXksIGdjcnlfc2V4cF90IHNfcGFybXMpCit7CisgIGdjcnlfcGtfc3BlY190ICpzcGVjID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgbGlzdCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGwyID0gTlVMTDsKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKworICAqcl9rZXkgPSBOVUxMOworCisgIGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKHNfcGFybXMsICJnZW5rZXkiLCAwKTsKKyAgaWYgKCFsaXN0KQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBEb2VzIG5vdCBjb250YWluIGdlbmtleSBkYXRhLiAqLworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgbDIgPSBzZXhwX2NhZHIgKGxpc3QpOworICBzZXhwX3JlbGVhc2UgKGxpc3QpOworICBsaXN0ID0gbDI7CisgIGwyID0gTlVMTDsKKyAgaWYgKCEgbGlzdCkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOyAvKiBObyBjZHIgZm9yIHRoZSBnZW5rZXkuICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBuYW1lID0gX2djcnlfc2V4cF9udGhfc3RyaW5nIChsaXN0LCAwKTsKKyAgaWYgKCFuYW1lKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOyAvKiBBbGdvIHN0cmluZyBtaXNzaW5nLiAgKi8KKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHNwZWMgPSBzcGVjX2Zyb21fbmFtZSAobmFtZSk7CisgIHhmcmVlIChuYW1lKTsKKyAgbmFtZSA9IE5VTEw7CisgIGlmICghc3BlYykKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfUFVCS0VZX0FMR087IC8qIFVua25vd24gYWxnb3JpdGhtLiAgKi8KKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGlmIChzcGVjLT5nZW5lcmF0ZSkKKyAgICByYyA9IHNwZWMtPmdlbmVyYXRlIChsaXN0LCByX2tleSk7CisgIGVsc2UKKyAgICByYyA9IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEOworCisgbGVhdmU6CisgIHNleHBfcmVsZWFzZSAobGlzdCk7CisgIHhmcmVlIChuYW1lKTsKKyAgc2V4cF9yZWxlYXNlIChsMik7CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qCisgICBHZXQgdGhlIG51bWJlciBvZiBuYml0cyBmcm9tIHRoZSBwdWJsaWMga2V5LgorCisgICBIbW1tOiBTaG91bGQgd2UgaGF2ZSByZWFsbHkgdGhpcyBmdW5jdGlvbiBvciBpcyBpdCBiZXR0ZXIgdG8gaGF2ZSBhCisgICBtb3JlIGdlbmVyYWwgZnVuY3Rpb24gdG8gcmV0cmlldmUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGtleT8gICovCit1bnNpZ25lZCBpbnQKK19nY3J5X3BrX2dldF9uYml0cyAoZ2NyeV9zZXhwX3Qga2V5KQoreworICBnY3J5X3BrX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9zZXhwX3QgcGFybXM7CisgIHVuc2lnbmVkIGludCBuYml0czsKKworICAvKiBQYXJzaW5nIEtFWSBtaWdodCBiZSBjb25zaWRlcmVkIHRvbyBtdWNoIG92ZXJoZWFkLiAgRm9yIGV4YW1wbGUKKyAgICAgZm9yIFJTQSB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gbG9vayBhdCBQIGFuZCBzdG9wIHBhcnNpbmcgcmlnaHQKKyAgICAgYXdheS4gIEhvd2V2ZXIsIHdpdGggRUNDIHRoaW5ncyBhcmUgbW9yZSBjb21wbGljYXRlIGluIHRoYXQgb25seQorICAgICBhIGN1cnZlIG5hbWUgbWlnaHQgYmUgc3BlY2lmaWVkLiAgVGh1cyB3ZSBuZWVkIHRvIHRlYXIgdGhlIHNleHAKKyAgICAgYXBhcnQuICovCisKKyAgaWYgKHNwZWNfZnJvbV9zZXhwIChrZXksIDAsICZzcGVjLCAmcGFybXMpKQorICAgIHJldHVybiAwOyAvKiBFcnJvciAtIDAgaXMgYSBzdWl0YWJsZSBpbmRpY2F0aW9uIGZvciB0aGF0LiAgKi8KKworICBuYml0cyA9IHNwZWMtPmdldF9uYml0cyAocGFybXMpOworICBzZXhwX3JlbGVhc2UgKHBhcm1zKTsKKyAgcmV0dXJuIG5iaXRzOworfQorCisKKy8qIFJldHVybiB0aGUgc28gY2FsbGVkIEtFWUdSSVAgd2hpY2ggaXMgdGhlIFNIQS0xIGhhc2ggb2YgdGhlIHB1YmxpYworICAga2V5IHBhcmFtZXRlcnMgZXhwcmVzc2VkIGluIGEgd2F5IGRlcGVuZGluZyBvbiB0aGUgYWxnb3JpdGhtLgorCisgICBBUlJBWSBtdXN0IGVpdGhlciBiZSAyMCBieXRlcyBsb25nIG9yIE5VTEw7IGluIHRoZSBsYXR0ZXIgY2FzZSBhCisgICBuZXdseSBhbGxvY2F0ZWQgYXJyYXkgb2YgdGhhdCBzaXplIGlzIHJldHVybmVkLCBvdGhlcndpc2UgQVJSQVkgb3IKKyAgIE5VTEwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgYW4gZXJyb3Igd2hpY2ggaXMgbW9zdCBsaWtlbHkgYW4KKyAgIHVua25vd24gYWxnb3JpdGhtLiAgVGhlIGZ1bmN0aW9uIGFjY2VwdHMgcHVibGljIG9yIHNlY3JldCBrZXlzLiAqLwordW5zaWduZWQgY2hhciAqCitfZ2NyeV9wa19nZXRfa2V5Z3JpcCAoZ2NyeV9zZXhwX3Qga2V5LCB1bnNpZ25lZCBjaGFyICphcnJheSkKK3sKKyAgZ2NyeV9zZXhwX3QgbGlzdCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGwyID0gTlVMTDsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWMgPSBOVUxMOworICBjb25zdCBjaGFyICpzOworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgaW50IGlkeDsKKyAgY29uc3QgY2hhciAqZWxlbXM7CisgIGdjcnlfbWRfaGRfdCBtZCA9IE5VTEw7CisgIGludCBva2F5ID0gMDsKKworICAvKiBDaGVjayB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGlzIHZhbGlkLiAqLworICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghIGxpc3QpCisgICAgbGlzdCA9IHNleHBfZmluZF90b2tlbiAoa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCEgbGlzdCkKKyAgICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChrZXksICJwcm90ZWN0ZWQtcHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCEgbGlzdCkKKyAgICBsaXN0ID0gc2V4cF9maW5kX3Rva2VuIChrZXksICJzaGFkb3dlZC1wcml2YXRlLWtleSIsIDApOworICBpZiAoISBsaXN0KQorICAgIHJldHVybiBOVUxMOyAvKiBObyBwdWJsaWMtIG9yIHByaXZhdGUta2V5IG9iamVjdC4gKi8KKworICBsMiA9IHNleHBfY2FkciAobGlzdCk7CisgIHNleHBfcmVsZWFzZSAobGlzdCk7CisgIGxpc3QgPSBsMjsKKyAgbDIgPSBOVUxMOworCisgIG5hbWUgPSBfZ2NyeV9zZXhwX250aF9zdHJpbmcgKGxpc3QsIDApOworICBpZiAoIW5hbWUpCisgICAgZ290byBmYWlsOyAvKiBJbnZhbGlkIHN0cnVjdHVyZSBvZiBvYmplY3QuICovCisKKyAgc3BlYyA9IHNwZWNfZnJvbV9uYW1lIChuYW1lKTsKKyAgaWYgKCFzcGVjKQorICAgIGdvdG8gZmFpbDsgLyogVW5rbm93biBhbGdvcml0aG0uICAqLworCisgIGVsZW1zID0gc3BlYy0+ZWxlbWVudHNfZ3JpcDsKKyAgaWYgKCFlbGVtcykKKyAgICBnb3RvIGZhaWw7IC8qIE5vIGdyaXAgcGFyYW1ldGVyLiAgKi8KKworICBpZiAoX2djcnlfbWRfb3BlbiAoJm1kLCBHQ1JZX01EX1NIQTEsIDApKQorICAgIGdvdG8gZmFpbDsKKworICBpZiAoc3BlYy0+Y29tcF9rZXlncmlwKQorICAgIHsKKyAgICAgIC8qIE1vZHVsZSBzcGVjaWZpYyBtZXRob2QgdG8gY29tcHV0ZSBhIGtleWdyaXAuICAqLworICAgICAgaWYgKHNwZWMtPmNvbXBfa2V5Z3JpcCAobWQsIGxpc3QpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogR2VuZXJpYyBtZXRob2QgdG8gY29tcHV0ZSBhIGtleWdyaXAuICAqLworICAgICAgZm9yIChpZHggPSAwLCBzID0gZWxlbXM7ICpzOyBzKyssIGlkeCsrKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgY2hhciAqZGF0YTsKKyAgICAgICAgICBzaXplX3QgZGF0YWxlbjsKKyAgICAgICAgICBjaGFyIGJ1ZlszMF07CisKKyAgICAgICAgICBsMiA9IHNleHBfZmluZF90b2tlbiAobGlzdCwgcywgMSk7CisgICAgICAgICAgaWYgKCEgbDIpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgZGF0YSA9IHNleHBfbnRoX2RhdGEgKGwyLCAxLCAmZGF0YWxlbik7CisgICAgICAgICAgaWYgKCEgZGF0YSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgIHNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIoMTolYyV1OiIsICpzLCAodW5zaWduZWQgaW50KWRhdGFsZW4pOworICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgYnVmLCBzdHJsZW4gKGJ1ZikpOworICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgZGF0YSwgZGF0YWxlbik7CisgICAgICAgICAgc2V4cF9yZWxlYXNlIChsMik7CisgICAgICAgICAgbDIgPSBOVUxMOworICAgICAgICAgIF9nY3J5X21kX3dyaXRlIChtZCwgIikiLCAxKTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIWFycmF5KQorICAgIHsKKyAgICAgIGFycmF5ID0geHRyeW1hbGxvYyAoMjApOworICAgICAgaWYgKCEgYXJyYXkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgbWVtY3B5IChhcnJheSwgX2djcnlfbWRfcmVhZCAobWQsIEdDUllfTURfU0hBMSksIDIwKTsKKyAgb2theSA9IDE7CisKKyBmYWlsOgorICB4ZnJlZSAobmFtZSk7CisgIHNleHBfcmVsZWFzZSAobDIpOworICBfZ2NyeV9tZF9jbG9zZSAobWQpOworICBzZXhwX3JlbGVhc2UgKGxpc3QpOworICByZXR1cm4gb2theT8gYXJyYXkgOiBOVUxMOworfQorCisKKwwKK2NvbnN0IGNoYXIgKgorX2djcnlfcGtfZ2V0X2N1cnZlIChnY3J5X3NleHBfdCBrZXksIGludCBpdGVyYXRvciwgdW5zaWduZWQgaW50ICpyX25iaXRzKQoreworICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICBnY3J5X3BrX3NwZWNfdCAqc3BlYzsKKyAgZ2NyeV9zZXhwX3Qga2V5cGFybXMgPSBOVUxMOworCisgIGlmIChyX25iaXRzKQorICAgICpyX25iaXRzID0gMDsKKworICBpZiAoa2V5KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yID0gMDsKKworICAgICAgaWYgKHNwZWNfZnJvbV9zZXhwIChrZXksIDAsICZzcGVjLCAma2V5cGFybXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzcGVjID0gc3BlY19mcm9tX25hbWUgKCJlY2MiKTsKKyAgICAgIGlmICghc3BlYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGlmIChzcGVjLT5nZXRfY3VydmUpCisgICAgcmVzdWx0ID0gc3BlYy0+Z2V0X2N1cnZlIChrZXlwYXJtcywgaXRlcmF0b3IsIHJfbmJpdHMpOworCisgIHNleHBfcmVsZWFzZSAoa2V5cGFybXMpOworICByZXR1cm4gcmVzdWx0OworfQorCisKKwwKK2djcnlfc2V4cF90CitfZ2NyeV9wa19nZXRfcGFyYW0gKGludCBhbGdvLCBjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X3NleHBfdCByZXN1bHQgPSBOVUxMOworICBnY3J5X3BrX3NwZWNfdCAqc3BlYyA9IE5VTEw7CisKKyAgYWxnbyA9IG1hcF9hbGdvIChhbGdvKTsKKworICBpZiAoYWxnbyAhPSBHQ1JZX1BLX0VDQykKKyAgICByZXR1cm4gTlVMTDsKKworICBzcGVjID0gc3BlY19mcm9tX25hbWUgKCJlY2MiKTsKKyAgaWYgKHNwZWMpCisgICAgeworICAgICAgaWYgKHNwZWMgJiYgc3BlYy0+Z2V0X2N1cnZlX3BhcmFtKQorICAgICAgICByZXN1bHQgPSBzcGVjLT5nZXRfY3VydmVfcGFyYW0gKG5hbWUpOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisMCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3BrX2N0bCAoaW50IGNtZCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSAwOworCisgIHN3aXRjaCAoY21kKQorICAgIHsKKyAgICBjYXNlIEdDUllDVExfRElTQUJMRV9BTEdPOgorICAgICAgLyogVGhpcyBvbmUgZXhwZWN0cyBhIGJ1ZmZlciBwb2ludGluZyB0byBhbiBpbnRlZ2VyIHdpdGggdGhlCisgICAgICAgICBhbGdvIG51bWJlci4gICovCisgICAgICBpZiAoKCEgYnVmZmVyKSB8fCAoYnVmbGVuICE9IHNpemVvZiAoaW50KSkpCisJcmMgPSBHUEdfRVJSX0lOVl9BUkc7CisgICAgICBlbHNlCisJZGlzYWJsZV9wdWJrZXlfYWxnbyAoKigoaW50ICopIGJ1ZmZlcikpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmMgPSBHUEdfRVJSX0lOVl9PUDsKKyAgICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gYWxnb3JpdGhtCisKKyAgIFdIQVQgc2VsZWN0cyB0aGUga2luZCBvZiBpbmZvcm1hdGlvbiByZXR1cm5lZDoKKworICAgIEdDUllDVExfVEVTVF9BTEdPOgorICAgICAgICBSZXR1cm5zIDAgd2hlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpcyBhdmFpbGFibGUgZm9yIHVzZS4KKyAgICAgICAgQnVmZmVyIG11c3QgYmUgTlVMTCwgbmJ5dGVzICBtYXkgaGF2ZSB0aGUgYWRkcmVzcyBvZiBhIHZhcmlhYmxlCisgICAgICAgIHdpdGggdGhlIHJlcXVpcmVkIHVzYWdlIG9mIHRoZSBhbGdvcml0aG0uIEl0IG1heSBiZSAwIGZvciBkb24ndAorICAgICAgICBjYXJlIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIEdDUllfUEtfVVNBR0VfeHh4IGZsYWdzOworCisgICAgR0NSWUNUTF9HRVRfQUxHT19VU0FHRToKKyAgICAgICAgUmV0dXJuIHRoZSB1c2FnZSBmbGFncyBmb3IgdGhlIGdpdmVuIGFsZ28uICBBbiBpbnZhbGlkIGFsZ28KKyAgICAgICAgcmV0dXJucyAwLiAgRGlzYWJsZWQgYWxnb3MgYXJlIGlnbm9yZWQgaGVyZSBiZWNhdXNlIHdlCisgICAgICAgIG9ubHkgd2FudCB0byBrbm93IHdoZXRoZXIgdGhlIGFsZ28gaXMgYXQgYWxsIGNhcGFibGUgb2YKKyAgICAgICAgdGhlIHVzYWdlLgorCisgICBOb3RlOiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gbW9zdCBjYXNlcyB1c2VkIHRvIHJldHVybiBhbgorICAgaW50ZWdlciB2YWx1ZSwgd2UgY2FuIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgY2FsbGVyIHRvIGp1c3QgbG9vayBhdAorICAgdGhlIHJldHVybiB2YWx1ZS4gIFRoZSBjYWxsZXIgd2lsbCBpbiBhbGwgY2FzZXMgY29uc3VsdCB0aGUgdmFsdWUKKyAgIGFuZCB0aGVyZWJ5IGRldGVjdGluZyB3aGV0aGVyIGEgZXJyb3Igb2NjdXJyZWQgb3Igbm90IChpLmUuIHdoaWxlCisgICBjaGVja2luZyB0aGUgYmxvY2sgc2l6ZSkgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfYWxnb19pbmZvIChpbnQgYWxnb3JpdGhtLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKworICBzd2l0Y2ggKHdoYXQpCisgICAgeworICAgIGNhc2UgR0NSWUNUTF9URVNUX0FMR086CisgICAgICB7CisJaW50IHVzZSA9IG5ieXRlcyA/ICpuYnl0ZXMgOiAwOworCWlmIChidWZmZXIpCisJICByYyA9IEdQR19FUlJfSU5WX0FSRzsKKwllbHNlIGlmIChjaGVja19wdWJrZXlfYWxnbyAoYWxnb3JpdGhtLCB1c2UpKQorCSAgcmMgPSBHUEdfRVJSX1BVQktFWV9BTEdPOworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBHQ1JZQ1RMX0dFVF9BTEdPX1VTQUdFOgorICAgICAgeworCWdjcnlfcGtfc3BlY190ICpzcGVjOworCisJc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvcml0aG0pOworICAgICAgICAqbmJ5dGVzID0gc3BlYz8gc3BlYy0+dXNlIDogMDsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgR0NSWUNUTF9HRVRfQUxHT19OUEtFWToKKyAgICAgIHsKKwkvKiBGSVhNRT8gICovCisJaW50IG5wa2V5ID0gcHVia2V5X2dldF9ucGtleSAoYWxnb3JpdGhtKTsKKwkqbmJ5dGVzID0gbnBrZXk7CisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSBHQ1JZQ1RMX0dFVF9BTEdPX05TS0VZOgorICAgICAgeworCS8qIEZJWE1FPyAgKi8KKwlpbnQgbnNrZXkgPSBwdWJrZXlfZ2V0X25za2V5IChhbGdvcml0aG0pOworCSpuYnl0ZXMgPSBuc2tleTsKKwlicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIEdDUllDVExfR0VUX0FMR09fTlNJR046CisgICAgICB7CisJLyogRklYTUU/ICAqLworCWludCBuc2lnbiA9IHB1YmtleV9nZXRfbnNpZyAoYWxnb3JpdGhtKTsKKwkqbmJ5dGVzID0gbnNpZ247CisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSBHQ1JZQ1RMX0dFVF9BTEdPX05FTkNSOgorICAgICAgeworCS8qIEZJWE1FPyAgKi8KKwlpbnQgbmVuY3IgPSBwdWJrZXlfZ2V0X25lbmMgKGFsZ29yaXRobSk7CisJKm5ieXRlcyA9IG5lbmNyOworCWJyZWFrOworICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT1A7CisgICAgfQorCisgIHJldHVybiByYzsKK30KKworCisvKiBSZXR1cm4gYW4gUy1leHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29udGV4dCBDVFguICBEZXBlbmRpbmcgb24KKyAgIHRoZSBzdGF0ZSBvZiB0aGF0IGNvbnRleHQsIHRoZSBTLWV4cHJlc3Npb24gbWF5IGVpdGhlciBiZSBhIHB1YmxpYworICAga2V5LCBhIHByaXZhdGUga2V5IG9yIGFueSBvdGhlciBvYmplY3QgdXNlZCB3aXRoIHB1YmxpYyBrZXkKKyAgIG9wZXJhdGlvbnMuICBPbiBzdWNjZXNzIGEgbmV3IFMtZXhwcmVzc2lvbiBpcyBzdG9yZWQgYXQgUl9TRVhQIGFuZAorICAgMCBpcyByZXR1cm5lZCwgb24gZXJyb3IgTlVMTCBpcyBzdG9yZSB0aGVyZSBhbmQgYW4gZXJyb3IgY29kZSBpcworICAgcmV0dXJuZWQuICBNT0RFIGlzIGVpdGhlciAwIG9yIG9uZSBvZiB0aGUgR0NSWV9QS19HRVRfeHh4IHZhbHVlcy4KKworICAgQXMgb2Ygbm93IGl0IG9ubHkgc3VwcG9ydCBjZXJ0YWluIEVDQyBvcGVyYXRpb25zIGJlY2F1c2UgYSBjb250ZXh0CisgICBvYmplY3QgaXMgcmlnaHQgbm93IG9ubHkgZGVmaW5lZCBmb3IgRUNDLiAgT3ZlciB0aW1lIHRoaXMgZnVuY3Rpb24KKyAgIHdpbGwgYmUgZXh0ZW5kZWQgdG8gY292ZXIgbW9yZSBhbGdvcml0aG1zLiAgTm90ZSBhbHNvIHRoYXQgdGhlIG5hbWUKKyAgIG9mIHRoZSBmdW5jdGlvbiBpcyBnY3J5X3B1YmtleV94eHggYW5kIG5vdCBnY3J5X3BrX3h4eC4gIFRoZSBpZGVhCisgICBpcyB0aGF0IHdlIHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIHZhcmlhbnRzIG9mIHRoZSBleGlzdGluZworICAgZ2NyeV9wa194eHggZnVuY3Rpb25zIHdoaWNoIHdpbGwgdGFrZSBhIGNvbnRleHQgcGFyYW1ldGVyLiAgICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3B1YmtleV9nZXRfc2V4cCAoZ2NyeV9zZXhwX3QgKnJfc2V4cCwgaW50IG1vZGUsIGdjcnlfY3R4X3QgY3R4KQoreworICBtcGlfZWNfdCBlYzsKKworICBpZiAoIXJfc2V4cCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisgICpyX3NleHAgPSBOVUxMOworICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIEdDUllfUEtfR0VUX1BVQktFWToKKyAgICBjYXNlIEdDUllfUEtfR0VUX1NFQ0tFWToKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisgICAgfQorICBpZiAoIWN0eCkKKyAgICByZXR1cm4gR1BHX0VSUl9OT19DUllQVF9DVFg7CisKKyAgZWMgPSBfZ2NyeV9jdHhfZmluZF9wb2ludGVyIChjdHgsIENPTlRFWFRfVFlQRV9FQyk7CisgIGlmIChlYykKKyAgICByZXR1cm4gX2djcnlfcGtfZWNjX2dldF9zZXhwIChyX3NleHAsIG1vZGUsIGVjKTsKKworICByZXR1cm4gR1BHX0VSUl9XUk9OR19DUllQVF9DVFg7Cit9CisKKworDAorLyogRXhwbGljaXRseSBpbml0aWFsaXplIHRoaXMgbW9kdWxlLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcGtfaW5pdCAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKworLyogUnVuIHRoZSBzZWxmdGVzdHMgZm9yIHB1YmtleSBhbGdvcml0aG0gQUxHTyB3aXRoIG9wdGlvbmFsIHJlcG9ydGluZworICAgZnVuY3Rpb24gUkVQT1JULiAgKi8KK2dwZ19lcnJvcl90CitfZ2NyeV9wa19zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlYzsKKyAgZ2NyeV9wa19zcGVjX3QgKnNwZWM7CisKKyAgYWxnbyA9IG1hcF9hbGdvIChhbGdvKTsKKyAgc3BlYyA9IHNwZWNfZnJvbV9hbGdvIChhbGdvKTsKKyAgaWYgKHNwZWMgJiYgIXNwZWMtPmZsYWdzLmRpc2FibGVkICYmIHNwZWMtPnNlbGZ0ZXN0KQorICAgIGVjID0gc3BlYy0+c2VsZnRlc3QgKGFsZ28sIGV4dGVuZGVkLCByZXBvcnQpOworICBlbHNlCisgICAgeworICAgICAgZWMgPSBHUEdfRVJSX1BVQktFWV9BTEdPOworICAgICAgLyogRml4bWU6IFdlIG5lZWQgdG8gY2hhbmdlIHRoZSByZXBvcnQgZnVjbnRpb24gdG8gYWxsb3cgcGFzc2luZworICAgICAgICAgb2YgYW4gZW5jcnlwdGlvbiBtb2RlIChlLmcuIHBrY3MxLCBlY2RzYSwgb3IgZWNkaCkuICAqLworICAgICAgaWYgKHJlcG9ydCkKKyAgICAgICAgcmVwb3J0ICgicHVia2V5IiwgYWxnbywgIm1vZHVsZSIsCisgICAgICAgICAgICAgICAgc3BlYyAmJiAhc3BlYy0+ZmxhZ3MuZGlzYWJsZWQ/CisgICAgICAgICAgICAgICAgIm5vIHNlbGZ0ZXN0IGF2YWlsYWJsZSIgOgorICAgICAgICAgICAgICAgIHNwZWM/ICJhbGdvcml0aG0gZGlzYWJsZWQiIDoKKyAgICAgICAgICAgICAgICAiYWxnb3JpdGhtIG5vdCBmb3VuZCIpOworICAgIH0KKworICByZXR1cm4gZ3BnX2Vycm9yIChlYyk7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvcmZjMjI2OC5jIGIvY2lwaGVyL3JmYzIyNjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQ4Y2FkCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3JmYzIyNjguYwpAQCAtMCwwICsxLDM3NSBAQAorLyogcmZjMjI2OC5jICAtIFRoZSBjaXBoZXIgZGVzY3JpYmVkIGluIHJmYzIyNjg7IGFrYSBSb24ncyBDaXBoZXIgMi4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBOaWtvcyBNYXZyb3lhbm9wb3Vsb3MKKyAqIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQKKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisvKiBUaGlzIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIGJ5IE5pa29zIE1hdnJveWFub3BvdWxvcyBmb3IgR05VVExTCisgKiBhcyBhIExpYmdjcnlwdCBtb2R1bGUgKGdudXRscy9saWIveDUwOS9yYzIuYykgYW5kIGxhdGVyIGFkYXB0ZWQgZm9yCisgKiBkaXJlY3QgdXNlIGJ5IExpYmdjcnlwdCBieSBXZXJuZXIgS29jaC4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMKKyAqIG9ubHkgdXNlZnVsIGZvciBwa2NzIzEyIGRlY3J5cHRpb24uCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gUGV0ZXIgR3V0bWFubidzIFJSQy4yIHBhcGVyLgorICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2RlZmluZSBSRkMyMjY4X0JMT0NLU0laRSA4CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHUxNiBTWzY0XTsKK30gUkZDMjI2OF9jb250ZXh0OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZmMyMjY4X3Nib3hbXSA9IHsKKyAgMjE3LCAxMjAsIDI0OSwgMTk2LCAgMjUsIDIyMSwgMTgxLCAyMzcsCisgICA0MCwgMjMzLCAyNTMsIDEyMSwgIDc0LCAxNjAsIDIxNiwgMTU3LAorICAxOTgsIDEyNiwgIDU1LCAxMzEsICA0MywgMTE4LCAgODMsIDE0MiwKKyAgIDk4LCAgNzYsIDEwMCwgMTM2LCAgNjgsIDEzOSwgMjUxLCAxNjIsCisgICAyMywgMTU0LCAgODksIDI0NSwgMTM1LCAxNzksICA3OSwgIDE5LAorICAgOTcsICA2OSwgMTA5LCAxNDEsICAgOSwgMTI5LCAxMjUsICA1MCwKKyAgMTg5LCAxNDMsICA2NCwgMjM1LCAxMzQsIDE4MywgMTIzLCAgMTEsCisgIDI0MCwgMTQ5LCAgMzMsICAzNCwgIDkyLCAxMDcsICA3OCwgMTMwLAorICAgODQsIDIxNCwgMTAxLCAxNDcsIDIwNiwgIDk2LCAxNzgsICAyOCwKKyAgMTE1LCAgODYsIDE5MiwgIDIwLCAxNjcsIDE0MCwgMjQxLCAyMjAsCisgICAxOCwgMTE3LCAyMDIsICAzMSwgIDU5LCAxOTAsIDIyOCwgMjA5LAorICAgNjYsICA2MSwgMjEyLCAgNDgsIDE2MywgIDYwLCAxODIsICAzOCwKKyAgMTExLCAxOTEsICAxNCwgMjE4LCAgNzAsIDEwNSwgICA3LCAgODcsCisgICAzOSwgMjQyLCAgMjksIDE1NSwgMTg4LCAxNDgsICA2NywgICAzLAorICAyNDgsICAxNywgMTk5LCAyNDYsIDE0NCwgMjM5LCAgNjIsIDIzMSwKKyAgICA2LCAxOTUsIDIxMywgIDQ3LCAyMDAsIDEwMiwgIDMwLCAyMTUsCisgICAgOCwgMjMyLCAyMzQsIDIyMiwgMTI4LCAgODIsIDIzOCwgMjQ3LAorICAxMzIsIDE3MCwgMTE0LCAxNzIsICA1MywgIDc3LCAxMDYsICA0MiwKKyAgMTUwLCAgMjYsIDIxMCwgMTEzLCAgOTAsICAyMSwgIDczLCAxMTYsCisgICA3NSwgMTU5LCAyMDgsICA5NCwgICA0LCAgMjQsIDE2NCwgMjM2LAorICAxOTQsIDIyNCwgIDY1LCAxMTAsICAxNSwgIDgxLCAyMDMsIDIwNCwKKyAgIDM2LCAxNDUsIDE3NSwgIDgwLCAxNjEsIDI0NCwgMTEyLCAgNTcsCisgIDE1MywgMTI0LCAgNTgsIDEzMywgIDM1LCAxODQsIDE4MCwgMTIyLAorICAyNTIsICAgMiwgIDU0LCAgOTEsICAzNywgIDg1LCAxNTEsICA0OSwKKyAgIDQ1LCAgOTMsIDI1MCwgMTUyLCAyMjcsIDEzOCwgMTQ2LCAxNzQsCisgICAgNSwgMjIzLCAgNDEsICAxNiwgMTAzLCAxMDgsIDE4NiwgMjAxLAorICAyMTEsICAgMCwgMjMwLCAyMDcsIDIyNSwgMTU4LCAxNjgsICA0NCwKKyAgIDk5LCAgMjIsICAgMSwgIDYzLCAgODgsIDIyNiwgMTM3LCAxNjksCisgICAxMywgIDU2LCAgNTIsICAyNywgMTcxLCAgNTEsIDI1NSwgMTc2LAorICAxODcsICA3MiwgIDEyLCAgOTUsIDE4NSwgMTc3LCAyMDUsICA0NiwKKyAgMTk3LCAyNDMsIDIxOSwgIDcxLCAyMjksIDE2NSwgMTU2LCAxMTksCisgICAxMCwgMTY2LCAgMzIsIDEwNCwgMjU0LCAxMjcsIDE5MywgMTczCit9OworCisjZGVmaW5lIHJvdGwxNih4LG4pICAgKCgoeCkgPDwgKCh1MTYpKG4pKSkgfCAoKHgpID4+ICgxNiAtICh1MTYpKG4pKSkpCisjZGVmaW5lIHJvdHIxNih4LG4pICAgKCgoeCkgPj4gKCh1MTYpKG4pKSkgfCAoKHgpIDw8ICgxNiAtICh1MTYpKG4pKSkpCisKK3N0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdCAodm9pZCk7CisKKworc3RhdGljIHZvaWQKK2RvX2VuY3J5cHQgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYpCit7CisgIFJGQzIyNjhfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgcmVnaXN0ZXIgaW50IGksIGo7CisgIHUxNiB3b3JkMCA9IDAsIHdvcmQxID0gMCwgd29yZDIgPSAwLCB3b3JkMyA9IDA7CisKKyAgd29yZDAgPSAod29yZDAgPDwgOCkgfCBpbmJ1ZlsxXTsKKyAgd29yZDAgPSAod29yZDAgPDwgOCkgfCBpbmJ1ZlswXTsKKyAgd29yZDEgPSAod29yZDEgPDwgOCkgfCBpbmJ1ZlszXTsKKyAgd29yZDEgPSAod29yZDEgPDwgOCkgfCBpbmJ1ZlsyXTsKKyAgd29yZDIgPSAod29yZDIgPDwgOCkgfCBpbmJ1Zls1XTsKKyAgd29yZDIgPSAod29yZDIgPDwgOCkgfCBpbmJ1Zls0XTsKKyAgd29yZDMgPSAod29yZDMgPDwgOCkgfCBpbmJ1Zls3XTsKKyAgd29yZDMgPSAod29yZDMgPDwgOCkgfCBpbmJ1Zls2XTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgICBqID0gaSAqIDQ7CisgICAgICAvKiBGb3Igc29tZSByZWFzb24gSSBjYW5ub3QgY29tYmluZSB0aG9zZSBzdGVwcy4gKi8KKyAgICAgIHdvcmQwICs9ICh3b3JkMSAmIH53b3JkMykgKyAod29yZDIgJiB3b3JkMykgKyBjdHgtPlNbal07CisgICAgICB3b3JkMCA9IHJvdGwxNih3b3JkMCwgMSk7CisKKyAgICAgIHdvcmQxICs9ICh3b3JkMiAmIH53b3JkMCkgKyAod29yZDMgJiB3b3JkMCkgKyBjdHgtPlNbaiArIDFdOworICAgICAgd29yZDEgPSByb3RsMTYod29yZDEsIDIpOworCisgICAgICB3b3JkMiArPSAod29yZDMgJiB+d29yZDEpICsgKHdvcmQwICYgd29yZDEpICsgY3R4LT5TW2ogKyAyXTsKKyAgICAgIHdvcmQyID0gcm90bDE2KHdvcmQyLCAzKTsKKworICAgICAgd29yZDMgKz0gKHdvcmQwICYgfndvcmQyKSArICh3b3JkMSAmIHdvcmQyKSArIGN0eC0+U1tqICsgM107CisgICAgICB3b3JkMyA9IHJvdGwxNih3b3JkMywgNSk7CisKKyAgICAgIGlmIChpID09IDQgfHwgaSA9PSAxMCkKKyAgICAgICAgeworICAgICAgICAgIHdvcmQwICs9IGN0eC0+U1t3b3JkMyAmIDYzXTsKKyAgICAgICAgICB3b3JkMSArPSBjdHgtPlNbd29yZDAgJiA2M107CisgICAgICAgICAgd29yZDIgKz0gY3R4LT5TW3dvcmQxICYgNjNdOworICAgICAgICAgIHdvcmQzICs9IGN0eC0+U1t3b3JkMiAmIDYzXTsKKyAgICAgICAgfQorCisgICAgfQorCisgIG91dGJ1ZlswXSA9IHdvcmQwICYgMjU1OworICBvdXRidWZbMV0gPSB3b3JkMCA+PiA4OworICBvdXRidWZbMl0gPSB3b3JkMSAmIDI1NTsKKyAgb3V0YnVmWzNdID0gd29yZDEgPj4gODsKKyAgb3V0YnVmWzRdID0gd29yZDIgJiAyNTU7CisgIG91dGJ1Zls1XSA9IHdvcmQyID4+IDg7CisgIG91dGJ1Zls2XSA9IHdvcmQzICYgMjU1OworICBvdXRidWZbN10gPSB3b3JkMyA+PiA4OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitlbmNyeXB0X2Jsb2NrICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpvdXRidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmKQoreworICBkb19lbmNyeXB0IChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0ICogc2l6ZW9mKHZvaWQgKikgKyBzaXplb2Yodm9pZCAqKSArIHNpemVvZih1MzIpICogNCk7Cit9CisKK3N0YXRpYyB2b2lkCitkb19kZWNyeXB0ICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpvdXRidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmKQoreworICBSRkMyMjY4X2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHJlZ2lzdGVyIGludCBpLCBqOworICB1MTYgd29yZDAgPSAwLCB3b3JkMSA9IDAsIHdvcmQyID0gMCwgd29yZDMgPSAwOworCisgIHdvcmQwID0gKHdvcmQwIDw8IDgpIHwgaW5idWZbMV07CisgIHdvcmQwID0gKHdvcmQwIDw8IDgpIHwgaW5idWZbMF07CisgIHdvcmQxID0gKHdvcmQxIDw8IDgpIHwgaW5idWZbM107CisgIHdvcmQxID0gKHdvcmQxIDw8IDgpIHwgaW5idWZbMl07CisgIHdvcmQyID0gKHdvcmQyIDw8IDgpIHwgaW5idWZbNV07CisgIHdvcmQyID0gKHdvcmQyIDw8IDgpIHwgaW5idWZbNF07CisgIHdvcmQzID0gKHdvcmQzIDw8IDgpIHwgaW5idWZbN107CisgIHdvcmQzID0gKHdvcmQzIDw8IDgpIHwgaW5idWZbNl07CisKKyAgZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIGogPSBpICogNDsKKworICAgICAgd29yZDMgPSByb3RyMTYod29yZDMsIDUpOworICAgICAgd29yZDMgLT0gKHdvcmQwICYgfndvcmQyKSArICh3b3JkMSAmIHdvcmQyKSArIGN0eC0+U1tqICsgM107CisKKyAgICAgIHdvcmQyID0gcm90cjE2KHdvcmQyLCAzKTsKKyAgICAgIHdvcmQyIC09ICh3b3JkMyAmIH53b3JkMSkgKyAod29yZDAgJiB3b3JkMSkgKyBjdHgtPlNbaiArIDJdOworCisgICAgICB3b3JkMSA9IHJvdHIxNih3b3JkMSwgMik7CisgICAgICB3b3JkMSAtPSAod29yZDIgJiB+d29yZDApICsgKHdvcmQzICYgd29yZDApICsgY3R4LT5TW2ogKyAxXTsKKworICAgICAgd29yZDAgPSByb3RyMTYod29yZDAsIDEpOworICAgICAgd29yZDAgLT0gKHdvcmQxICYgfndvcmQzKSArICh3b3JkMiAmIHdvcmQzKSArIGN0eC0+U1tqXTsKKworICAgICAgaWYgKGkgPT0gNSB8fCBpID09IDExKQorICAgICAgICB7CisgICAgICAgICAgd29yZDMgPSB3b3JkMyAtIGN0eC0+U1t3b3JkMiAmIDYzXTsKKyAgICAgICAgICB3b3JkMiA9IHdvcmQyIC0gY3R4LT5TW3dvcmQxICYgNjNdOworICAgICAgICAgIHdvcmQxID0gd29yZDEgLSBjdHgtPlNbd29yZDAgJiA2M107CisgICAgICAgICAgd29yZDAgPSB3b3JkMCAtIGN0eC0+U1t3b3JkMyAmIDYzXTsKKyAgICAgICAgfQorCisgICAgfQorCisgIG91dGJ1ZlswXSA9IHdvcmQwICYgMjU1OworICBvdXRidWZbMV0gPSB3b3JkMCA+PiA4OworICBvdXRidWZbMl0gPSB3b3JkMSAmIDI1NTsKKyAgb3V0YnVmWzNdID0gd29yZDEgPj4gODsKKyAgb3V0YnVmWzRdID0gd29yZDIgJiAyNTU7CisgIG91dGJ1Zls1XSA9IHdvcmQyID4+IDg7CisgIG91dGJ1Zls2XSA9IHdvcmQzICYgMjU1OworICBvdXRidWZbN10gPSB3b3JkMyA+PiA4OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitkZWNyeXB0X2Jsb2NrICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpvdXRidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmKQoreworICBkb19kZWNyeXB0IChjb250ZXh0LCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0ICogc2l6ZW9mKHZvaWQgKikgKyBzaXplb2Yodm9pZCAqKSArIHNpemVvZih1MzIpICogNCk7Cit9CisKKworc3RhdGljIGdwZ19lcnJfY29kZV90CitzZXRrZXlfY29yZSAodm9pZCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuLCBpbnQgd2l0aF9waGFzZTIpCit7CisgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisgIHN0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdF9mYWlsZWQ7CisgIFJGQzIyNjhfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKlMsIHg7CisgIGludCBsZW47CisgIGludCBiaXRzID0ga2V5bGVuICogODsKKworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0ICgpOworICAgICAgaWYgKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICAgICAgbG9nX2Vycm9yICgiUkZDMjI2OCBzZWxmdGVzdCBmYWlsZWQgKCVzKS5cbiIsIHNlbGZ0ZXN0X2ZhaWxlZCk7CisgICAgfQorICBpZiAoc2VsZnRlc3RfZmFpbGVkKQorICAgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKworICBpZiAoa2V5bGVuIDwgNDAgLyA4KQkvKiBXZSB3YW50IGF0IGxlYXN0IDQwIGJpdHMuICovCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICBTID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5TOworCisgIGZvciAoaSA9IDA7IGkgPCBrZXlsZW47IGkrKykKKyAgICBTW2ldID0ga2V5W2ldOworCisgIGZvciAoaSA9IGtleWxlbjsgaSA8IDEyODsgaSsrKQorICAgIFNbaV0gPSByZmMyMjY4X3Nib3hbKFNbaSAtIGtleWxlbl0gKyBTW2kgLSAxXSkgJiAyNTVdOworCisgIFNbMF0gPSByZmMyMjY4X3Nib3hbU1swXV07CisKKyAgLyogUGhhc2UgMiAtIHJlZHVjZSBlZmZlY3RpdmUga2V5IHNpemUgdG8gImJpdHMiLiBUaGlzIHdhcyBub3QKKyAgICogZGlzY3Vzc2VkIGluIEd1dG1hbm4ncyBwYXBlci4gSSd2ZSBjb3BpZWQgdGhhdCBmcm9tIHRoZSBwdWJsaWMKKyAgICogZG9tYWluIGNvZGUgcG9zdGVkIGluIHNjaS5jcnlwdC4gKi8KKyAgaWYgKHdpdGhfcGhhc2UyKQorICAgIHsKKyAgICAgIGxlbiA9IChiaXRzICsgNykgPj4gMzsKKyAgICAgIGkgPSAxMjggLSBsZW47CisgICAgICB4ID0gcmZjMjI2OF9zYm94W1NbaV0gJiAoMjU1ID4+ICg3ICYgLWJpdHMpKV07CisgICAgICBTW2ldID0geDsKKworICAgICAgd2hpbGUgKGktLSkKKyAgICAgICAgeworICAgICAgICAgIHggPSByZmMyMjY4X3Nib3hbeCBeIFNbaSArIGxlbl1dOworICAgICAgICAgIFNbaV0gPSB4OworICAgICAgICB9CisgICAgfQorCisgIC8qIE1ha2UgdGhlIGV4cGFuZGVkIGtleSwgZW5kaWFuIGluZGVwZW5kZW50LiAqLworICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKyAgICBjdHgtPlNbaV0gPSAoICh1MTYpIFNbaSAqIDJdIHwgKCgodTE2KSBTW2kgKiAyICsgMV0pIDw8IDgpKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdwZ19lcnJfY29kZV90Citkb19zZXRrZXkgKHZvaWQgKmNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKyAgcmV0dXJuIHNldGtleV9jb3JlIChjb250ZXh0LCBrZXksIGtleWxlbiwgMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NlbGZ0ZXN0ICh2b2lkKQoreworICBSRkMyMjY4X2NvbnRleHQgY3R4OworICB1bnNpZ25lZCBjaGFyIHNjcmF0Y2hbMTZdOworCisgIC8qIFRlc3QgdmVjdG9ycyBmcm9tIFBldGVyIEd1dG1hbm4ncyBwYXBlci4gKi8KKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5XzFbXSA9CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBsYWludGV4dF8xW10gPQorICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0XzFbXSA9CisgICAgeyAweDFDLCAweDE5LCAweDhBLCAweDgzLCAweDhELCAweEYwLCAweDI4LCAweEI3IH07CisKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5XzJbXSA9CisgICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRgorICAgIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBsYWludGV4dF8yW10gPQorICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworICBzdGF0aWMgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0XzJbXSA9CisgICAgeyAweDUwLCAweERDLCAweDAxLCAweDYyLCAweEJELCAweDc1LCAweDdGLCAweDMxIH07CisKKyAgLyogVGhpcyBvbmUgd2FzIGNoZWNrZWQgYWdhaW5zdCBsaWJtY3J5cHQncyBSRkMyMjY4LiAqLworICBzdGF0aWMgdW5zaWduZWQgY2hhciBrZXlfM1tdID0KKyAgICB7IDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgfTsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0XzNbXSA9CisgICAgeyAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRfM1tdID0KKyAgICB7IDB4OGYsIDB4ZDEsIDB4MDMsIDB4ODksIDB4MzMsIDB4NmIsIDB4ZjksIDB4NWUgfTsKKworCisgIC8qIEZpcnN0IHRlc3QuICovCisgIHNldGtleV9jb3JlICgmY3R4LCBrZXlfMSwgc2l6ZW9mKGtleV8xKSwgMCk7CisgIGRvX2VuY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dF8xKTsKKworICBpZiAobWVtY21wIChzY3JhdGNoLCBjaXBoZXJ0ZXh0XzEsIHNpemVvZihjaXBoZXJ0ZXh0XzEpKSkKKyAgICByZXR1cm4gIlJGQzIyNjggZW5jcnlwdGlvbiB0ZXN0IDEgZmFpbGVkLiI7CisKKyAgc2V0a2V5X2NvcmUgKCZjdHgsIGtleV8xLCBzaXplb2Yoa2V5XzEpLCAwKTsKKyAgZG9fZGVjcnlwdCAoJmN0eCwgc2NyYXRjaCwgc2NyYXRjaCk7CisgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIHBsYWludGV4dF8xLCBzaXplb2YocGxhaW50ZXh0XzEpKSkKKyAgICByZXR1cm4gIlJGQzIyNjggZGVjcnlwdGlvbiB0ZXN0IDEgZmFpbGVkLiI7CisKKyAgLyogU2Vjb25kIHRlc3QuICovCisgIHNldGtleV9jb3JlICgmY3R4LCBrZXlfMiwgc2l6ZW9mKGtleV8yKSwgMCk7CisgIGRvX2VuY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dF8yKTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgY2lwaGVydGV4dF8yLCBzaXplb2YoY2lwaGVydGV4dF8yKSkpCisgICAgcmV0dXJuICJSRkMyMjY4IGVuY3J5cHRpb24gdGVzdCAyIGZhaWxlZC4iOworCisgIHNldGtleV9jb3JlICgmY3R4LCBrZXlfMiwgc2l6ZW9mKGtleV8yKSwgMCk7CisgIGRvX2RlY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHNjcmF0Y2gpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBwbGFpbnRleHRfMiwgc2l6ZW9mKHBsYWludGV4dF8yKSkpCisgICAgcmV0dXJuICJSRkMyMjY4IGRlY3J5cHRpb24gdGVzdCAyIGZhaWxlZC4iOworCisgIC8qIFRoaXJkIHRlc3QuICovCisgIHNldGtleV9jb3JlKCZjdHgsIGtleV8zLCBzaXplb2Yoa2V5XzMpLCAwKTsKKyAgZG9fZW5jcnlwdCgmY3R4LCBzY3JhdGNoLCBwbGFpbnRleHRfMyk7CisKKyAgaWYgKG1lbWNtcChzY3JhdGNoLCBjaXBoZXJ0ZXh0XzMsIHNpemVvZihjaXBoZXJ0ZXh0XzMpKSkKKyAgICByZXR1cm4gIlJGQzIyNjggZW5jcnlwdGlvbiB0ZXN0IDMgZmFpbGVkLiI7CisKKyAgc2V0a2V5X2NvcmUgKCZjdHgsIGtleV8zLCBzaXplb2Yoa2V5XzMpLCAwKTsKKyAgZG9fZGVjcnlwdCAoJmN0eCwgc2NyYXRjaCwgc2NyYXRjaCk7CisgIGlmIChtZW1jbXAoc2NyYXRjaCwgcGxhaW50ZXh0XzMsIHNpemVvZihwbGFpbnRleHRfMykpKQorICAgIHJldHVybiAiUkZDMjI2OCBkZWNyeXB0aW9uIHRlc3QgMyBmYWlsZWQuIjsKKworICByZXR1cm4gTlVMTDsKK30KKworCisKK3N0YXRpYyBnY3J5X2NpcGhlcl9vaWRfc3BlY190IG9pZHNfcmZjMjI2OF80MFtdID0KKyAgeworICAgIC8qeyAiMS4yLjg0MC4xMTM1NDkuMy4yIiwgR0NSWV9DSVBIRVJfTU9ERV9DQkMgfSwqLworICAgIC8qIHBiZVdpdGhTSEFBbmQ0MEJpdFJDMl9DQkMgKi8KKyAgICB7ICIxLjIuODQwLjExMzU0OS4xLjEyLjEuNiIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworc3RhdGljIGdjcnlfY2lwaGVyX29pZF9zcGVjX3Qgb2lkc19yZmMyMjY4XzEyOFtdID0KKyAgeworICAgIC8qIHBiZVdpdGhTSEFBbmQxMjhCaXRSQzJfQ0JDICovCisgICAgeyAiMS4yLjg0MC4xMTM1NDkuMS4xMi4xLjUiLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgIHsgTlVMTCB9CisgIH07CisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19yZmMyMjY4XzQwID0KKyAgeworICAgIEdDUllfQ0lQSEVSX1JGQzIyNjhfNDAsIHswLCAwfSwKKyAgICAiUkZDMjI2OF80MCIsIE5VTEwsIG9pZHNfcmZjMjI2OF80MCwKKyAgICBSRkMyMjY4X0JMT0NLU0laRSwgNDAsIHNpemVvZihSRkMyMjY4X2NvbnRleHQpLAorICAgIGRvX3NldGtleSwgZW5jcnlwdF9ibG9jaywgZGVjcnlwdF9ibG9jaworICB9OworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfcmZjMjI2OF8xMjggPQorICB7CisgICAgR0NSWV9DSVBIRVJfUkZDMjI2OF8xMjgsIHswLCAwfSwKKyAgICAiUkZDMjI2OF8xMjgiLCBOVUxMLCBvaWRzX3JmYzIyNjhfMTI4LAorICAgIFJGQzIyNjhfQkxPQ0tTSVpFLCAxMjgsIHNpemVvZihSRkMyMjY4X2NvbnRleHQpLAorICAgIGRvX3NldGtleSwgZW5jcnlwdF9ibG9jaywgZGVjcnlwdF9ibG9jaworICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3Jpam5kYWVsLWFtZDY0LlMgYi9jaXBoZXIvcmlqbmRhZWwtYW1kNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE5ZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3Jpam5kYWVsLWFtZDY0LlMKQEAgLTAsMCArMSwxNDE2IEBACisvKiByaW5qZGFlbC1hbWQ2NC5TICAtICBBTUQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiBBRVMgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgX194ODZfNjQKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpZiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpICYmIGRlZmluZWQoVVNFX0FFUykKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgKCVyaXApCisjZWxzZQorIyAgZGVmaW5lIFJJUAorI2VuZGlmCisKKy50ZXh0CisKKy8qIHRhYmxlIG1hY3JvcyAqLworI2RlZmluZSBFMAkoLkx0YWJsZUUwLS5MdGFibGVFMCkKKyNkZWZpbmUgRTEJKC5MdGFibGVFMS0uTHRhYmxlRTApCisjZGVmaW5lIEUyCSguTHRhYmxlRTItLkx0YWJsZUUwKQorI2RlZmluZSBFMwkoLkx0YWJsZUUzLS5MdGFibGVFMCkKKyNkZWZpbmUgRXMwCSguTHRhYmxlRXMwLS5MdGFibGVFMCkKKyNkZWZpbmUgRXMxCSguTHRhYmxlRXMxLS5MdGFibGVFMCkKKyNkZWZpbmUgRXMyCSguTHRhYmxlRXMyLS5MdGFibGVFMCkKKyNkZWZpbmUgRXMzCSguTHRhYmxlRXMzLS5MdGFibGVFMCkKKyNkZWZpbmUgRXNpemUJOAorCisjZGVmaW5lIEQwCSguTHRhYmxlRDAtLkx0YWJsZUQwKQorI2RlZmluZSBEMQkoLkx0YWJsZUQxLS5MdGFibGVEMCkKKyNkZWZpbmUgRDIJKC5MdGFibGVEMi0uTHRhYmxlRDApCisjZGVmaW5lIEQzCSguTHRhYmxlRDMtLkx0YWJsZUQwKQorI2RlZmluZSBEczAJKC5MdGFibGVEczAtLkx0YWJsZUQwKQorI2RlZmluZSBEczEJKC5MdGFibGVEczEtLkx0YWJsZUQwKQorI2RlZmluZSBEczIJKC5MdGFibGVEczItLkx0YWJsZUQwKQorI2RlZmluZSBEczMJKC5MdGFibGVEczMtLkx0YWJsZUQwKQorI2RlZmluZSBEc2l6ZQk4CisKKy8qIHJlZ2lzdGVyIG1hY3JvcyAqLworI2RlZmluZSBDVFgJJXJkaQorI2RlZmluZSBSVEFCCSVyMTIKKworI2RlZmluZSBSQQklcmF4CisjZGVmaW5lIFJCCSVyYngKKyNkZWZpbmUgUkMJJXJjeAorI2RlZmluZSBSRAklcmR4CisKKyNkZWZpbmUgUkFkCSVlYXgKKyNkZWZpbmUgUkJkCSVlYngKKyNkZWZpbmUgUkNkCSVlY3gKKyNkZWZpbmUgUkRkCSVlZHgKKworI2RlZmluZSBSQWJsCSVhbAorI2RlZmluZSBSQmJsCSVibAorI2RlZmluZSBSQ2JsCSVjbAorI2RlZmluZSBSRGJsCSVkbAorCisjZGVmaW5lIFJBYmgJJWFoCisjZGVmaW5lIFJCYmgJJWJoCisjZGVmaW5lIFJDYmgJJWNoCisjZGVmaW5lIFJEYmgJJWRoCisKKyNkZWZpbmUgUk5BCSVyOAorI2RlZmluZSBSTkIJJXI5CisjZGVmaW5lIFJOQwklcjEwCisjZGVmaW5lIFJORAklcjExCisKKyNkZWZpbmUgUk5BZAklcjhkCisjZGVmaW5lIFJOQmQJJXI5ZAorI2RlZmluZSBSTkNkCSVyMTBkCisjZGVmaW5lIFJORGQJJXIxMWQKKworI2RlZmluZSBSVDAJJXJicAorI2RlZmluZSBSVDEJJXJzaQorCisjZGVmaW5lIFJUMGQJJWVicAorI2RlZmluZSBSVDFkCSVlc2kKKworLyogaGVscGVyIG1hY3JvcyAqLworI2RlZmluZSBkbzE2Yml0KG9wLCBzb3VyY2UsIHRhYmxlbXVsLCB0YWJsZTEsIGRlc3QxLCB0YWJsZTIsIGRlc3QyLCB0MCwgdDEpIFwKKwltb3Z6Ymwgc291cmNlICMjIGJoLAkJCXQxICMjIGQ7IFwKKwltb3Z6Ymwgc291cmNlICMjIGJsLAkJCXQwICMjIGQ7IFwKKwlvcCAjIyBsIHRhYmxlMShSVEFCLHQwLHRhYmxlbXVsKSwJZGVzdDEgIyMgZDsgXAorCW9wICMjIGwgdGFibGUyKFJUQUIsdDEsdGFibGVtdWwpLAlkZXN0MiAjIyBkOworCisjZGVmaW5lIGRvMTZiaXRfc2hyKHNoZiwgb3AsIHNvdXJjZSwgdGFibGVtdWwsIHRhYmxlMSwgZGVzdDEsIHRhYmxlMiwgZGVzdDIsIHQwLCB0MSkgXAorCW1vdnpibCBzb3VyY2UgIyMgYmwsCQkJdDAgIyMgZDsgXAorCW1vdnpibCBzb3VyY2UgIyMgYmgsCQkJdDEgIyMgZDsgXAorCXNocmwgJChzaGYpLAkJCQlzb3VyY2UgIyMgZDsgXAorCW9wICMjIGwgdGFibGUxKFJUQUIsdDAsdGFibGVtdWwpLAlkZXN0MSAjIyBkOyBcCisJb3AgIyMgbCB0YWJsZTIoUlRBQix0MSx0YWJsZW11bCksCWRlc3QyICMjIGQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQU1ENjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFFUyBjaXBoZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgYWRkcm91bmRrZXkocm91bmQsIHJhLCByYiwgcmMsIHJkKSBcCisJeG9ybCAoKChyb3VuZCkgKiAxNikgKyAwICogNCkoQ1RYKSwgcmEgIyMgZDsgXAorCXhvcmwgKCgocm91bmQpICogMTYpICsgMSAqIDQpKENUWCksIHJiICMjIGQ7IFwKKwl4b3JsICgoKHJvdW5kKSAqIDE2KSArIDIgKiA0KShDVFgpLCByYyAjIyBkOyBcCisJeG9ybCAoKChyb3VuZCkgKiAxNikgKyAzICogNCkoQ1RYKSwgcmQgIyMgZDsKKworI2RlZmluZSBkb19lbmNyb3VuZChuZXh0X3IpIFwKKwlkbzE2Yml0X3NocigxNiwgbW92LCBSQSwgRXNpemUsIEUwLCBSTkEsIEUxLCBSTkQsIFJUMCwgUlQxKTsgXAorCWRvMTZiaXQoICAgICAgICBtb3YsIFJBLCBFc2l6ZSwgRTIsIFJOQywgRTMsIFJOQiwgUlQwLCBSVDEpOyBcCisJbW92bCAoKChuZXh0X3IpICogMTYpICsgMCAqIDQpKENUWCksIFJBZDsgXAorCXhvcmwgUk5BZCwgUkFkOyBcCisJXAorCWRvMTZiaXRfc2hyKDE2LCB4b3IsIFJELCBFc2l6ZSwgRTAsIFJORCwgRTEsIFJOQywgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgIHhvciwgUkQsIEVzaXplLCBFMiwgUk5CLCBFMywgUkEsICBSVDAsIFJUMSk7IFwKKwltb3ZsICgoKG5leHRfcikgKiAxNikgKyAzICogNCkoQ1RYKSwgUkRkOyBcCisJeG9ybCBSTkRkLCBSRGQ7IFwKKwlcCisJZG8xNmJpdF9zaHIoMTYsIHhvciwgUkMsIEVzaXplLCBFMCwgUk5DLCBFMSwgUk5CLCBSVDAsIFJUMSk7IFwKKwlkbzE2Yml0KCAgICAgICAgeG9yLCBSQywgRXNpemUsIEUyLCBSQSwgIEUzLCBSRCwgIFJUMCwgUlQxKTsgXAorCW1vdmwgKCgobmV4dF9yKSAqIDE2KSArIDIgKiA0KShDVFgpLCBSQ2Q7IFwKKwl4b3JsIFJOQ2QsIFJDZDsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgeG9yLCBSQiwgRXNpemUsIEUwLCBSTkIsIEUxLCBSQSwgIFJUMCwgUlQxKTsgXAorCWRvMTZiaXQoICAgICAgICB4b3IsIFJCLCBFc2l6ZSwgRTIsIFJELCAgRTMsIFJDLCAgUlQwLCBSVDEpOyBcCisJbW92bCAoKChuZXh0X3IpICogMTYpICsgMSAqIDQpKENUWCksIFJCZDsgXAorCXhvcmwgUk5CZCwgUkJkOworCisjZGVmaW5lIGRvX2xhc3RlbmNyb3VuZChuZXh0X3IpIFwKKwlkbzE2Yml0X3NocigxNiwgbW92LCBSQSwgRXNpemUsIEVzMCwgUk5BLCBFczEsIFJORCwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgIG1vdiwgUkEsIEVzaXplLCBFczIsIFJOQywgRXMzLCBSTkIsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSQiwgRXNpemUsIEVzMCwgUk5CLCBFczEsIFJOQSwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkIsIEVzaXplLCBFczIsIFJORCwgRXMzLCBSTkMsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSQywgRXNpemUsIEVzMCwgUk5DLCBFczEsIFJOQiwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkMsIEVzaXplLCBFczIsIFJOQSwgRXMzLCBSTkQsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSRCwgRXNpemUsIEVzMCwgUk5ELCBFczEsIFJOQywgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkQsIEVzaXplLCBFczIsIFJOQiwgRXMzLCBSTkEsIFJUMCwgUlQxKTsKKworI2RlZmluZSBmaXJzdGVuY3JvdW5kKHJvdW5kKSBcCisJYWRkcm91bmRrZXkocm91bmQsIFJBLCBSQiwgUkMsIFJEKTsgXAorCWRvX2VuY3JvdW5kKChyb3VuZCkgKyAxKTsKKworI2RlZmluZSBlbmNyb3VuZChyb3VuZCkgXAorCWRvX2VuY3JvdW5kKChyb3VuZCkgKyAxKTsKKworI2RlZmluZSBsYXN0ZW5jcm91bmQocm91bmQpIFwKKwlkb19sYXN0ZW5jcm91bmQoKTsgXAorCWFkZHJvdW5ka2V5KChyb3VuZCkgKyAxLCBSTkEsIFJOQiwgUk5DLCBSTkQpOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2Flc19hbWQ2NF9lbmNyeXB0X2Jsb2NrCisudHlwZSAgIF9nY3J5X2Flc19hbWQ2NF9lbmNyeXB0X2Jsb2NrLEBmdW5jdGlvbjsKKworX2djcnlfYWVzX2FtZDY0X2VuY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXJkaToga2V5c2NoZWQsIENUWAorCSAqCSVyc2k6IGRzdAorCSAqCSVyZHg6IHNyYworCSAqCSVlY3g6IG51bWJlciBvZiByb3VuZHMuLiAxMCwgMTIgb3IgMTQKKwkgKi8KKwlzdWJxICQoNSAqIDgpLCAlcnNwOworCW1vdnEgJXJzaSwgKDAgKiA4KSglcnNwKTsKKwltb3ZsICVlY3gsICgxICogOCkoJXJzcCk7CisJbW92cSAlcmJwLCAoMiAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDMgKiA4KSglcnNwKTsKKwltb3ZxICVyMTIsICg0ICogOCkoJXJzcCk7CisKKwlsZWFxIC5MdGFibGVFMCBSSVAsIFJUQUI7CisKKwkvKiByZWFkIGlucHV0IGJsb2NrICovCisJbW92bCAwICogNCglcmR4KSwgUkFkOworCW1vdmwgMSAqIDQoJXJkeCksIFJCZDsKKwltb3ZsIDIgKiA0KCVyZHgpLCBSQ2Q7CisJbW92bCAzICogNCglcmR4KSwgUkRkOworCisJZmlyc3RlbmNyb3VuZCgwKTsKKwllbmNyb3VuZCgxKTsKKwllbmNyb3VuZCgyKTsKKwllbmNyb3VuZCgzKTsKKwllbmNyb3VuZCg0KTsKKwllbmNyb3VuZCg1KTsKKwllbmNyb3VuZCg2KTsKKwllbmNyb3VuZCg3KTsKKwllbmNyb3VuZCg4KTsKKwljbXBsICQxMiwgKDEgKiA4KSglcnNwKTsKKwlqbmIgLkxlbmNfbm90XzEyODsKKwlsYXN0ZW5jcm91bmQoOSk7CisKKy5hbGlnbiA0CisuTGVuY19kb25lOgorCS8qIHdyaXRlIG91dHB1dCBibG9jayAqLworCW1vdnEgKDAgKiA4KSglcnNwKSwgJXJzaTsKKwltb3ZsIFJOQWQsIDAgKiA0KCVyc2kpOworCW1vdmwgUk5CZCwgMSAqIDQoJXJzaSk7CisJbW92bCBSTkNkLCAyICogNCglcnNpKTsKKwltb3ZsIFJORGQsIDMgKiA0KCVyc2kpOworCisJbW92cSAoNCAqIDgpKCVyc3ApLCAlcjEyOworCW1vdnEgKDMgKiA4KSglcnNwKSwgJXJieDsKKwltb3ZxICgyICogOCkoJXJzcCksICVyYnA7CisJYWRkcSAkKDUgKiA4KSwgJXJzcDsKKworCXJldDsKKworLmFsaWduIDQKKy5MZW5jX25vdF8xMjg6CisJamUgLkxlbmNfMTkyCisKKwllbmNyb3VuZCg5KTsKKwllbmNyb3VuZCgxMCk7CisJZW5jcm91bmQoMTEpOworCWVuY3JvdW5kKDEyKTsKKwlsYXN0ZW5jcm91bmQoMTMpOworCisJam1wIC5MZW5jX2RvbmU7CisKKy5hbGlnbiA0CisuTGVuY18xOTI6CisJZW5jcm91bmQoOSk7CisJZW5jcm91bmQoMTApOworCWxhc3RlbmNyb3VuZCgxMSk7CisKKwlqbXAgLkxlbmNfZG9uZTsKKy5zaXplIF9nY3J5X2Flc19hbWQ2NF9lbmNyeXB0X2Jsb2NrLC4tX2djcnlfYWVzX2FtZDY0X2VuY3J5cHRfYmxvY2s7CisKKyNkZWZpbmUgZG9fZGVjcm91bmQobmV4dF9yKSBcCisJZG8xNmJpdF9zaHIoMTYsIG1vdiwgUkEsIERzaXplLCBEMCwgUk5BLCBEMSwgUk5CLCBSVDAsIFJUMSk7IFwKKwlkbzE2Yml0KCAgICAgICAgbW92LCBSQSwgRHNpemUsIEQyLCBSTkMsIEQzLCBSTkQsIFJUMCwgUlQxKTsgXAorCW1vdmwgKCgobmV4dF9yKSAqIDE2KSArIDAgKiA0KShDVFgpLCBSQWQ7IFwKKwl4b3JsIFJOQWQsIFJBZDsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgeG9yLCBSQiwgRHNpemUsIEQwLCBSTkIsIEQxLCBSTkMsIFJUMCwgUlQxKTsgXAorCWRvMTZiaXQoICAgICAgICB4b3IsIFJCLCBEc2l6ZSwgRDIsIFJORCwgRDMsIFJBLCAgUlQwLCBSVDEpOyBcCisJbW92bCAoKChuZXh0X3IpICogMTYpICsgMSAqIDQpKENUWCksIFJCZDsgXAorCXhvcmwgUk5CZCwgUkJkOyBcCisJXAorCWRvMTZiaXRfc2hyKDE2LCB4b3IsIFJDLCBEc2l6ZSwgRDAsIFJOQywgRDEsIFJORCwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgIHhvciwgUkMsIERzaXplLCBEMiwgUkEsICBEMywgUkIsICBSVDAsIFJUMSk7IFwKKwltb3ZsICgoKG5leHRfcikgKiAxNikgKyAyICogNCkoQ1RYKSwgUkNkOyBcCisJeG9ybCBSTkNkLCBSQ2Q7IFwKKwlcCisJZG8xNmJpdF9zaHIoMTYsIHhvciwgUkQsIERzaXplLCBEMCwgUk5ELCBEMSwgUkEsICBSVDAsIFJUMSk7IFwKKwlkbzE2Yml0KCAgICAgICAgeG9yLCBSRCwgRHNpemUsIEQyLCBSQiwgIEQzLCBSQywgIFJUMCwgUlQxKTsgXAorCW1vdmwgKCgobmV4dF9yKSAqIDE2KSArIDMgKiA0KShDVFgpLCBSRGQ7IFwKKwl4b3JsIFJORGQsIFJEZDsgXAorCisjZGVmaW5lIGRvX2xhc3RkZWNyb3VuZCgpIFwKKwlkbzE2Yml0X3NocigxNiwgbW92LCBSQSwgRHNpemUsIERzMCwgUk5BLCBEczEsIFJOQiwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgIG1vdiwgUkEsIERzaXplLCBEczIsIFJOQywgRHMzLCBSTkQsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSQiwgRHNpemUsIERzMCwgUk5CLCBEczEsIFJOQywgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkIsIERzaXplLCBEczIsIFJORCwgRHMzLCBSTkEsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSQywgRHNpemUsIERzMCwgUk5DLCBEczEsIFJORCwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkMsIERzaXplLCBEczIsIFJOQSwgRHMzLCBSTkIsIFJUMCwgUlQxKTsgXAorCVwKKwlkbzE2Yml0X3NocigxNiwgIG9yLCBSRCwgRHNpemUsIERzMCwgUk5ELCBEczEsIFJOQSwgUlQwLCBSVDEpOyBcCisJZG8xNmJpdCggICAgICAgICBvciwgUkQsIERzaXplLCBEczIsIFJOQiwgRHMzLCBSTkMsIFJUMCwgUlQxKTsKKworI2RlZmluZSBmaXJzdGRlY3JvdW5kKHJvdW5kKSBcCisJYWRkcm91bmRrZXkoKHJvdW5kICsgMSksIFJBLCBSQiwgUkMsIFJEKTsgXAorCWRvX2RlY3JvdW5kKHJvdW5kKTsKKworI2RlZmluZSBkZWNyb3VuZChyb3VuZCkgXAorCWRvX2RlY3JvdW5kKHJvdW5kKTsKKworI2RlZmluZSBsYXN0ZGVjcm91bmQocm91bmQpIFwKKwlkb19sYXN0ZGVjcm91bmQoKTsgXAorCWFkZHJvdW5ka2V5KHJvdW5kLCBSTkEsIFJOQiwgUk5DLCBSTkQpOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X2Flc19hbWQ2NF9kZWNyeXB0X2Jsb2NrCisudHlwZSAgIF9nY3J5X2Flc19hbWQ2NF9kZWNyeXB0X2Jsb2NrLEBmdW5jdGlvbjsKKworX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXJkaToga2V5c2NoZWQsIENUWAorCSAqCSVyc2k6IGRzdAorCSAqCSVyZHg6IHNyYworCSAqCSVlY3g6IG51bWJlciBvZiByb3VuZHMuLiAxMCwgMTIgb3IgMTQKKwkgKi8KKwlzdWJxICQoNSAqIDgpLCAlcnNwOworCW1vdnEgJXJzaSwgKDAgKiA4KSglcnNwKTsKKwltb3ZsICVlY3gsICgxICogOCkoJXJzcCk7CisJbW92cSAlcmJwLCAoMiAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDMgKiA4KSglcnNwKTsKKwltb3ZxICVyMTIsICg0ICogOCkoJXJzcCk7CisKKwlsZWFxIC5MdGFibGVEMCBSSVAsIFJUQUI7CisKKwkvKiByZWFkIGlucHV0IGJsb2NrICovCisJbW92bCAwICogNCglcmR4KSwgUkFkOworCW1vdmwgMSAqIDQoJXJkeCksIFJCZDsKKwltb3ZsIDIgKiA0KCVyZHgpLCBSQ2Q7CisJbW92bCAzICogNCglcmR4KSwgUkRkOworCisJY21wbCAkMTIsICgxICogOCkoJXJzcCk7CisJam5iIC5MZGVjXzI1NjsKKworCWZpcnN0ZGVjcm91bmQoOSk7CisuYWxpZ24gNAorLkxkZWNfdGFpbDoKKwlkZWNyb3VuZCg4KTsKKwlkZWNyb3VuZCg3KTsKKwlkZWNyb3VuZCg2KTsKKwlkZWNyb3VuZCg1KTsKKwlkZWNyb3VuZCg0KTsKKwlkZWNyb3VuZCgzKTsKKwlkZWNyb3VuZCgyKTsKKwlkZWNyb3VuZCgxKTsKKwlsYXN0ZGVjcm91bmQoMCk7CisKKwkvKiB3cml0ZSBvdXRwdXQgYmxvY2sgKi8KKwltb3ZxICgwICogOCkoJXJzcCksICVyc2k7CisJbW92bCBSTkFkLCAwICogNCglcnNpKTsKKwltb3ZsIFJOQmQsIDEgKiA0KCVyc2kpOworCW1vdmwgUk5DZCwgMiAqIDQoJXJzaSk7CisJbW92bCBSTkRkLCAzICogNCglcnNpKTsKKworCW1vdnEgKDQgKiA4KSglcnNwKSwgJXIxMjsKKwltb3ZxICgzICogOCkoJXJzcCksICVyYng7CisJbW92cSAoMiAqIDgpKCVyc3ApLCAlcmJwOworCWFkZHEgJCg1ICogOCksICVyc3A7CisKKwlyZXQ7CisKKy5hbGlnbiA0CisuTGRlY18yNTY6CisJamUgLkxkZWNfMTkyOworCisJZmlyc3RkZWNyb3VuZCgxMyk7CisJZGVjcm91bmQoMTIpOworCWRlY3JvdW5kKDExKTsKKwlkZWNyb3VuZCgxMCk7CisJZGVjcm91bmQoOSk7CisKKwlqbXAgLkxkZWNfdGFpbDsKKworLmFsaWduIDQKKy5MZGVjXzE5MjoKKwlmaXJzdGRlY3JvdW5kKDExKTsKKwlkZWNyb3VuZCgxMCk7CisJZGVjcm91bmQoOSk7CisKKwlqbXAgLkxkZWNfdGFpbDsKKy5zaXplIF9nY3J5X2Flc19hbWQ2NF9kZWNyeXB0X2Jsb2NrLC4tX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2s7CisKKy5kYXRhCisuYWxpZ24gMTYKKworLyogRW5jcnlwdGlvbiB0YWJsZXMgKi8KKy5MdGFibGVFMDoKKy5sb25nIDB4YTU2MzYzYzYKKy5MdGFibGVFczA6CisubG9uZyAgICAgICAgICAgICAweDAwMDAwMDYzLCAweDg0N2M3Y2Y4LCAweDAwMDAwMDdjCisubG9uZyAweDk5Nzc3N2VlLCAweDAwMDAwMDc3LCAweDhkN2I3YmY2LCAweDAwMDAwMDdiCisubG9uZyAweDBkZjJmMmZmLCAweDAwMDAwMGYyLCAweGJkNmI2YmQ2LCAweDAwMDAwMDZiCisubG9uZyAweGIxNmY2ZmRlLCAweDAwMDAwMDZmLCAweDU0YzVjNTkxLCAweDAwMDAwMGM1CisubG9uZyAweDUwMzAzMDYwLCAweDAwMDAwMDMwLCAweDAzMDEwMTAyLCAweDAwMDAwMDAxCisubG9uZyAweGE5Njc2N2NlLCAweDAwMDAwMDY3LCAweDdkMmIyYjU2LCAweDAwMDAwMDJiCisubG9uZyAweDE5ZmVmZWU3LCAweDAwMDAwMGZlLCAweDYyZDdkN2I1LCAweDAwMDAwMGQ3CisubG9uZyAweGU2YWJhYjRkLCAweDAwMDAwMGFiLCAweDlhNzY3NmVjLCAweDAwMDAwMDc2CisubG9uZyAweDQ1Y2FjYThmLCAweDAwMDAwMGNhLCAweDlkODI4MjFmLCAweDAwMDAwMDgyCisubG9uZyAweDQwYzljOTg5LCAweDAwMDAwMGM5LCAweDg3N2Q3ZGZhLCAweDAwMDAwMDdkCisubG9uZyAweDE1ZmFmYWVmLCAweDAwMDAwMGZhLCAweGViNTk1OWIyLCAweDAwMDAwMDU5CisubG9uZyAweGM5NDc0NzhlLCAweDAwMDAwMDQ3LCAweDBiZjBmMGZiLCAweDAwMDAwMGYwCisubG9uZyAweGVjYWRhZDQxLCAweDAwMDAwMGFkLCAweDY3ZDRkNGIzLCAweDAwMDAwMGQ0CisubG9uZyAweGZkYTJhMjVmLCAweDAwMDAwMGEyLCAweGVhYWZhZjQ1LCAweDAwMDAwMGFmCisubG9uZyAweGJmOWM5YzIzLCAweDAwMDAwMDljLCAweGY3YTRhNDUzLCAweDAwMDAwMGE0CisubG9uZyAweDk2NzI3MmU0LCAweDAwMDAwMDcyLCAweDViYzBjMDliLCAweDAwMDAwMGMwCisubG9uZyAweGMyYjdiNzc1LCAweDAwMDAwMGI3LCAweDFjZmRmZGUxLCAweDAwMDAwMGZkCisubG9uZyAweGFlOTM5MzNkLCAweDAwMDAwMDkzLCAweDZhMjYyNjRjLCAweDAwMDAwMDI2CisubG9uZyAweDVhMzYzNjZjLCAweDAwMDAwMDM2LCAweDQxM2YzZjdlLCAweDAwMDAwMDNmCisubG9uZyAweDAyZjdmN2Y1LCAweDAwMDAwMGY3LCAweDRmY2NjYzgzLCAweDAwMDAwMGNjCisubG9uZyAweDVjMzQzNDY4LCAweDAwMDAwMDM0LCAweGY0YTVhNTUxLCAweDAwMDAwMGE1CisubG9uZyAweDM0ZTVlNWQxLCAweDAwMDAwMGU1LCAweDA4ZjFmMWY5LCAweDAwMDAwMGYxCisubG9uZyAweDkzNzE3MWUyLCAweDAwMDAwMDcxLCAweDczZDhkOGFiLCAweDAwMDAwMGQ4CisubG9uZyAweDUzMzEzMTYyLCAweDAwMDAwMDMxLCAweDNmMTUxNTJhLCAweDAwMDAwMDE1CisubG9uZyAweDBjMDQwNDA4LCAweDAwMDAwMDA0LCAweDUyYzdjNzk1LCAweDAwMDAwMGM3CisubG9uZyAweDY1MjMyMzQ2LCAweDAwMDAwMDIzLCAweDVlYzNjMzlkLCAweDAwMDAwMGMzCisubG9uZyAweDI4MTgxODMwLCAweDAwMDAwMDE4LCAweGExOTY5NjM3LCAweDAwMDAwMDk2CisubG9uZyAweDBmMDUwNTBhLCAweDAwMDAwMDA1LCAweGI1OWE5YTJmLCAweDAwMDAwMDlhCisubG9uZyAweDA5MDcwNzBlLCAweDAwMDAwMDA3LCAweDM2MTIxMjI0LCAweDAwMDAwMDEyCisubG9uZyAweDliODA4MDFiLCAweDAwMDAwMDgwLCAweDNkZTJlMmRmLCAweDAwMDAwMGUyCisubG9uZyAweDI2ZWJlYmNkLCAweDAwMDAwMGViLCAweDY5MjcyNzRlLCAweDAwMDAwMDI3CisubG9uZyAweGNkYjJiMjdmLCAweDAwMDAwMGIyLCAweDlmNzU3NWVhLCAweDAwMDAwMDc1CisubG9uZyAweDFiMDkwOTEyLCAweDAwMDAwMDA5LCAweDllODM4MzFkLCAweDAwMDAwMDgzCisubG9uZyAweDc0MmMyYzU4LCAweDAwMDAwMDJjLCAweDJlMWExYTM0LCAweDAwMDAwMDFhCisubG9uZyAweDJkMWIxYjM2LCAweDAwMDAwMDFiLCAweGIyNmU2ZWRjLCAweDAwMDAwMDZlCisubG9uZyAweGVlNWE1YWI0LCAweDAwMDAwMDVhLCAweGZiYTBhMDViLCAweDAwMDAwMGEwCisubG9uZyAweGY2NTI1MmE0LCAweDAwMDAwMDUyLCAweDRkM2IzYjc2LCAweDAwMDAwMDNiCisubG9uZyAweDYxZDZkNmI3LCAweDAwMDAwMGQ2LCAweGNlYjNiMzdkLCAweDAwMDAwMGIzCisubG9uZyAweDdiMjkyOTUyLCAweDAwMDAwMDI5LCAweDNlZTNlM2RkLCAweDAwMDAwMGUzCisubG9uZyAweDcxMmYyZjVlLCAweDAwMDAwMDJmLCAweDk3ODQ4NDEzLCAweDAwMDAwMDg0CisubG9uZyAweGY1NTM1M2E2LCAweDAwMDAwMDUzLCAweDY4ZDFkMWI5LCAweDAwMDAwMGQxCisubG9uZyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDJjZWRlZGMxLCAweDAwMDAwMGVkCisubG9uZyAweDYwMjAyMDQwLCAweDAwMDAwMDIwLCAweDFmZmNmY2UzLCAweDAwMDAwMGZjCisubG9uZyAweGM4YjFiMTc5LCAweDAwMDAwMGIxLCAweGVkNWI1YmI2LCAweDAwMDAwMDViCisubG9uZyAweGJlNmE2YWQ0LCAweDAwMDAwMDZhLCAweDQ2Y2JjYjhkLCAweDAwMDAwMGNiCisubG9uZyAweGQ5YmViZTY3LCAweDAwMDAwMGJlLCAweDRiMzkzOTcyLCAweDAwMDAwMDM5CisubG9uZyAweGRlNGE0YTk0LCAweDAwMDAwMDRhLCAweGQ0NGM0Yzk4LCAweDAwMDAwMDRjCisubG9uZyAweGU4NTg1OGIwLCAweDAwMDAwMDU4LCAweDRhY2ZjZjg1LCAweDAwMDAwMGNmCisubG9uZyAweDZiZDBkMGJiLCAweDAwMDAwMGQwLCAweDJhZWZlZmM1LCAweDAwMDAwMGVmCisubG9uZyAweGU1YWFhYTRmLCAweDAwMDAwMGFhLCAweDE2ZmJmYmVkLCAweDAwMDAwMGZiCisubG9uZyAweGM1NDM0Mzg2LCAweDAwMDAwMDQzLCAweGQ3NGQ0ZDlhLCAweDAwMDAwMDRkCisubG9uZyAweDU1MzMzMzY2LCAweDAwMDAwMDMzLCAweDk0ODU4NTExLCAweDAwMDAwMDg1CisubG9uZyAweGNmNDU0NThhLCAweDAwMDAwMDQ1LCAweDEwZjlmOWU5LCAweDAwMDAwMGY5CisubG9uZyAweDA2MDIwMjA0LCAweDAwMDAwMDAyLCAweDgxN2Y3ZmZlLCAweDAwMDAwMDdmCisubG9uZyAweGYwNTA1MGEwLCAweDAwMDAwMDUwLCAweDQ0M2MzYzc4LCAweDAwMDAwMDNjCisubG9uZyAweGJhOWY5ZjI1LCAweDAwMDAwMDlmLCAweGUzYThhODRiLCAweDAwMDAwMGE4CisubG9uZyAweGYzNTE1MWEyLCAweDAwMDAwMDUxLCAweGZlYTNhMzVkLCAweDAwMDAwMGEzCisubG9uZyAweGMwNDA0MDgwLCAweDAwMDAwMDQwLCAweDhhOGY4ZjA1LCAweDAwMDAwMDhmCisubG9uZyAweGFkOTI5MjNmLCAweDAwMDAwMDkyLCAweGJjOWQ5ZDIxLCAweDAwMDAwMDlkCisubG9uZyAweDQ4MzgzODcwLCAweDAwMDAwMDM4LCAweDA0ZjVmNWYxLCAweDAwMDAwMGY1CisubG9uZyAweGRmYmNiYzYzLCAweDAwMDAwMGJjLCAweGMxYjZiNjc3LCAweDAwMDAwMGI2CisubG9uZyAweDc1ZGFkYWFmLCAweDAwMDAwMGRhLCAweDYzMjEyMTQyLCAweDAwMDAwMDIxCisubG9uZyAweDMwMTAxMDIwLCAweDAwMDAwMDEwLCAweDFhZmZmZmU1LCAweDAwMDAwMGZmCisubG9uZyAweDBlZjNmM2ZkLCAweDAwMDAwMGYzLCAweDZkZDJkMmJmLCAweDAwMDAwMGQyCisubG9uZyAweDRjY2RjZDgxLCAweDAwMDAwMGNkLCAweDE0MGMwYzE4LCAweDAwMDAwMDBjCisubG9uZyAweDM1MTMxMzI2LCAweDAwMDAwMDEzLCAweDJmZWNlY2MzLCAweDAwMDAwMGVjCisubG9uZyAweGUxNWY1ZmJlLCAweDAwMDAwMDVmLCAweGEyOTc5NzM1LCAweDAwMDAwMDk3CisubG9uZyAweGNjNDQ0NDg4LCAweDAwMDAwMDQ0LCAweDM5MTcxNzJlLCAweDAwMDAwMDE3CisubG9uZyAweDU3YzRjNDkzLCAweDAwMDAwMGM0LCAweGYyYTdhNzU1LCAweDAwMDAwMGE3CisubG9uZyAweDgyN2U3ZWZjLCAweDAwMDAwMDdlLCAweDQ3M2QzZDdhLCAweDAwMDAwMDNkCisubG9uZyAweGFjNjQ2NGM4LCAweDAwMDAwMDY0LCAweGU3NWQ1ZGJhLCAweDAwMDAwMDVkCisubG9uZyAweDJiMTkxOTMyLCAweDAwMDAwMDE5LCAweDk1NzM3M2U2LCAweDAwMDAwMDczCisubG9uZyAweGEwNjA2MGMwLCAweDAwMDAwMDYwLCAweDk4ODE4MTE5LCAweDAwMDAwMDgxCisubG9uZyAweGQxNGY0ZjllLCAweDAwMDAwMDRmLCAweDdmZGNkY2EzLCAweDAwMDAwMGRjCisubG9uZyAweDY2MjIyMjQ0LCAweDAwMDAwMDIyLCAweDdlMmEyYTU0LCAweDAwMDAwMDJhCisubG9uZyAweGFiOTA5MDNiLCAweDAwMDAwMDkwLCAweDgzODg4ODBiLCAweDAwMDAwMDg4CisubG9uZyAweGNhNDY0NjhjLCAweDAwMDAwMDQ2LCAweDI5ZWVlZWM3LCAweDAwMDAwMGVlCisubG9uZyAweGQzYjhiODZiLCAweDAwMDAwMGI4LCAweDNjMTQxNDI4LCAweDAwMDAwMDE0CisubG9uZyAweDc5ZGVkZWE3LCAweDAwMDAwMGRlLCAweGUyNWU1ZWJjLCAweDAwMDAwMDVlCisubG9uZyAweDFkMGIwYjE2LCAweDAwMDAwMDBiLCAweDc2ZGJkYmFkLCAweDAwMDAwMGRiCisubG9uZyAweDNiZTBlMGRiLCAweDAwMDAwMGUwLCAweDU2MzIzMjY0LCAweDAwMDAwMDMyCisubG9uZyAweDRlM2EzYTc0LCAweDAwMDAwMDNhLCAweDFlMGEwYTE0LCAweDAwMDAwMDBhCisubG9uZyAweGRiNDk0OTkyLCAweDAwMDAwMDQ5LCAweDBhMDYwNjBjLCAweDAwMDAwMDA2CisubG9uZyAweDZjMjQyNDQ4LCAweDAwMDAwMDI0LCAweGU0NWM1Y2I4LCAweDAwMDAwMDVjCisubG9uZyAweDVkYzJjMjlmLCAweDAwMDAwMGMyLCAweDZlZDNkM2JkLCAweDAwMDAwMGQzCisubG9uZyAweGVmYWNhYzQzLCAweDAwMDAwMGFjLCAweGE2NjI2MmM0LCAweDAwMDAwMDYyCisubG9uZyAweGE4OTE5MTM5LCAweDAwMDAwMDkxLCAweGE0OTU5NTMxLCAweDAwMDAwMDk1CisubG9uZyAweDM3ZTRlNGQzLCAweDAwMDAwMGU0LCAweDhiNzk3OWYyLCAweDAwMDAwMDc5CisubG9uZyAweDMyZTdlN2Q1LCAweDAwMDAwMGU3LCAweDQzYzhjODhiLCAweDAwMDAwMGM4CisubG9uZyAweDU5MzczNzZlLCAweDAwMDAwMDM3LCAweGI3NmQ2ZGRhLCAweDAwMDAwMDZkCisubG9uZyAweDhjOGQ4ZDAxLCAweDAwMDAwMDhkLCAweDY0ZDVkNWIxLCAweDAwMDAwMGQ1CisubG9uZyAweGQyNGU0ZTljLCAweDAwMDAwMDRlLCAweGUwYTlhOTQ5LCAweDAwMDAwMGE5CisubG9uZyAweGI0NmM2Y2Q4LCAweDAwMDAwMDZjLCAweGZhNTY1NmFjLCAweDAwMDAwMDU2CisubG9uZyAweDA3ZjRmNGYzLCAweDAwMDAwMGY0LCAweDI1ZWFlYWNmLCAweDAwMDAwMGVhCisubG9uZyAweGFmNjU2NWNhLCAweDAwMDAwMDY1LCAweDhlN2E3YWY0LCAweDAwMDAwMDdhCisubG9uZyAweGU5YWVhZTQ3LCAweDAwMDAwMGFlLCAweDE4MDgwODEwLCAweDAwMDAwMDA4CisubG9uZyAweGQ1YmFiYTZmLCAweDAwMDAwMGJhLCAweDg4Nzg3OGYwLCAweDAwMDAwMDc4CisubG9uZyAweDZmMjUyNTRhLCAweDAwMDAwMDI1LCAweDcyMmUyZTVjLCAweDAwMDAwMDJlCisubG9uZyAweDI0MWMxYzM4LCAweDAwMDAwMDFjLCAweGYxYTZhNjU3LCAweDAwMDAwMGE2CisubG9uZyAweGM3YjRiNDczLCAweDAwMDAwMGI0LCAweDUxYzZjNjk3LCAweDAwMDAwMGM2CisubG9uZyAweDIzZThlOGNiLCAweDAwMDAwMGU4LCAweDdjZGRkZGExLCAweDAwMDAwMGRkCisubG9uZyAweDljNzQ3NGU4LCAweDAwMDAwMDc0LCAweDIxMWYxZjNlLCAweDAwMDAwMDFmCisubG9uZyAweGRkNGI0Yjk2LCAweDAwMDAwMDRiLCAweGRjYmRiZDYxLCAweDAwMDAwMGJkCisubG9uZyAweDg2OGI4YjBkLCAweDAwMDAwMDhiLCAweDg1OGE4YTBmLCAweDAwMDAwMDhhCisubG9uZyAweDkwNzA3MGUwLCAweDAwMDAwMDcwLCAweDQyM2UzZTdjLCAweDAwMDAwMDNlCisubG9uZyAweGM0YjViNTcxLCAweDAwMDAwMGI1LCAweGFhNjY2NmNjLCAweDAwMDAwMDY2CisubG9uZyAweGQ4NDg0ODkwLCAweDAwMDAwMDQ4LCAweDA1MDMwMzA2LCAweDAwMDAwMDAzCisubG9uZyAweDAxZjZmNmY3LCAweDAwMDAwMGY2LCAweDEyMGUwZTFjLCAweDAwMDAwMDBlCisubG9uZyAweGEzNjE2MWMyLCAweDAwMDAwMDYxLCAweDVmMzUzNTZhLCAweDAwMDAwMDM1CisubG9uZyAweGY5NTc1N2FlLCAweDAwMDAwMDU3LCAweGQwYjliOTY5LCAweDAwMDAwMGI5CisubG9uZyAweDkxODY4NjE3LCAweDAwMDAwMDg2LCAweDU4YzFjMTk5LCAweDAwMDAwMGMxCisubG9uZyAweDI3MWQxZDNhLCAweDAwMDAwMDFkLCAweGI5OWU5ZTI3LCAweDAwMDAwMDllCisubG9uZyAweDM4ZTFlMWQ5LCAweDAwMDAwMGUxLCAweDEzZjhmOGViLCAweDAwMDAwMGY4CisubG9uZyAweGIzOTg5ODJiLCAweDAwMDAwMDk4LCAweDMzMTExMTIyLCAweDAwMDAwMDExCisubG9uZyAweGJiNjk2OWQyLCAweDAwMDAwMDY5LCAweDcwZDlkOWE5LCAweDAwMDAwMGQ5CisubG9uZyAweDg5OGU4ZTA3LCAweDAwMDAwMDhlLCAweGE3OTQ5NDMzLCAweDAwMDAwMDk0CisubG9uZyAweGI2OWI5YjJkLCAweDAwMDAwMDliLCAweDIyMWUxZTNjLCAweDAwMDAwMDFlCisubG9uZyAweDkyODc4NzE1LCAweDAwMDAwMDg3LCAweDIwZTllOWM5LCAweDAwMDAwMGU5CisubG9uZyAweDQ5Y2VjZTg3LCAweDAwMDAwMGNlLCAweGZmNTU1NWFhLCAweDAwMDAwMDU1CisubG9uZyAweDc4MjgyODUwLCAweDAwMDAwMDI4LCAweDdhZGZkZmE1LCAweDAwMDAwMGRmCisubG9uZyAweDhmOGM4YzAzLCAweDAwMDAwMDhjLCAweGY4YTFhMTU5LCAweDAwMDAwMGExCisubG9uZyAweDgwODk4OTA5LCAweDAwMDAwMDg5LCAweDE3MGQwZDFhLCAweDAwMDAwMDBkCisubG9uZyAweGRhYmZiZjY1LCAweDAwMDAwMGJmLCAweDMxZTZlNmQ3LCAweDAwMDAwMGU2CisubG9uZyAweGM2NDI0Mjg0LCAweDAwMDAwMDQyLCAweGI4Njg2OGQwLCAweDAwMDAwMDY4CisubG9uZyAweGMzNDE0MTgyLCAweDAwMDAwMDQxLCAweGIwOTk5OTI5LCAweDAwMDAwMDk5CisubG9uZyAweDc3MmQyZDVhLCAweDAwMDAwMDJkLCAweDExMGYwZjFlLCAweDAwMDAwMDBmCisubG9uZyAweGNiYjBiMDdiLCAweDAwMDAwMGIwLCAweGZjNTQ1NGE4LCAweDAwMDAwMDU0CisubG9uZyAweGQ2YmJiYjZkLCAweDAwMDAwMGJiLCAweDNhMTYxNjJjLCAweDAwMDAwMDE2CisuTHRhYmxlRTE6CisubG9uZyAweDYzNjNjNmE1CisuTHRhYmxlRXMxOgorLmxvbmcgICAgICAgICAgICAgMHgwMDAwNjMwMCwgMHg3YzdjZjg4NCwgMHgwMDAwN2MwMAorLmxvbmcgMHg3Nzc3ZWU5OSwgMHgwMDAwNzcwMCwgMHg3YjdiZjY4ZCwgMHgwMDAwN2IwMAorLmxvbmcgMHhmMmYyZmYwZCwgMHgwMDAwZjIwMCwgMHg2YjZiZDZiZCwgMHgwMDAwNmIwMAorLmxvbmcgMHg2ZjZmZGViMSwgMHgwMDAwNmYwMCwgMHhjNWM1OTE1NCwgMHgwMDAwYzUwMAorLmxvbmcgMHgzMDMwNjA1MCwgMHgwMDAwMzAwMCwgMHgwMTAxMDIwMywgMHgwMDAwMDEwMAorLmxvbmcgMHg2NzY3Y2VhOSwgMHgwMDAwNjcwMCwgMHgyYjJiNTY3ZCwgMHgwMDAwMmIwMAorLmxvbmcgMHhmZWZlZTcxOSwgMHgwMDAwZmUwMCwgMHhkN2Q3YjU2MiwgMHgwMDAwZDcwMAorLmxvbmcgMHhhYmFiNGRlNiwgMHgwMDAwYWIwMCwgMHg3Njc2ZWM5YSwgMHgwMDAwNzYwMAorLmxvbmcgMHhjYWNhOGY0NSwgMHgwMDAwY2EwMCwgMHg4MjgyMWY5ZCwgMHgwMDAwODIwMAorLmxvbmcgMHhjOWM5ODk0MCwgMHgwMDAwYzkwMCwgMHg3ZDdkZmE4NywgMHgwMDAwN2QwMAorLmxvbmcgMHhmYWZhZWYxNSwgMHgwMDAwZmEwMCwgMHg1OTU5YjJlYiwgMHgwMDAwNTkwMAorLmxvbmcgMHg0NzQ3OGVjOSwgMHgwMDAwNDcwMCwgMHhmMGYwZmIwYiwgMHgwMDAwZjAwMAorLmxvbmcgMHhhZGFkNDFlYywgMHgwMDAwYWQwMCwgMHhkNGQ0YjM2NywgMHgwMDAwZDQwMAorLmxvbmcgMHhhMmEyNWZmZCwgMHgwMDAwYTIwMCwgMHhhZmFmNDVlYSwgMHgwMDAwYWYwMAorLmxvbmcgMHg5YzljMjNiZiwgMHgwMDAwOWMwMCwgMHhhNGE0NTNmNywgMHgwMDAwYTQwMAorLmxvbmcgMHg3MjcyZTQ5NiwgMHgwMDAwNzIwMCwgMHhjMGMwOWI1YiwgMHgwMDAwYzAwMAorLmxvbmcgMHhiN2I3NzVjMiwgMHgwMDAwYjcwMCwgMHhmZGZkZTExYywgMHgwMDAwZmQwMAorLmxvbmcgMHg5MzkzM2RhZSwgMHgwMDAwOTMwMCwgMHgyNjI2NGM2YSwgMHgwMDAwMjYwMAorLmxvbmcgMHgzNjM2NmM1YSwgMHgwMDAwMzYwMCwgMHgzZjNmN2U0MSwgMHgwMDAwM2YwMAorLmxvbmcgMHhmN2Y3ZjUwMiwgMHgwMDAwZjcwMCwgMHhjY2NjODM0ZiwgMHgwMDAwY2MwMAorLmxvbmcgMHgzNDM0Njg1YywgMHgwMDAwMzQwMCwgMHhhNWE1NTFmNCwgMHgwMDAwYTUwMAorLmxvbmcgMHhlNWU1ZDEzNCwgMHgwMDAwZTUwMCwgMHhmMWYxZjkwOCwgMHgwMDAwZjEwMAorLmxvbmcgMHg3MTcxZTI5MywgMHgwMDAwNzEwMCwgMHhkOGQ4YWI3MywgMHgwMDAwZDgwMAorLmxvbmcgMHgzMTMxNjI1MywgMHgwMDAwMzEwMCwgMHgxNTE1MmEzZiwgMHgwMDAwMTUwMAorLmxvbmcgMHgwNDA0MDgwYywgMHgwMDAwMDQwMCwgMHhjN2M3OTU1MiwgMHgwMDAwYzcwMAorLmxvbmcgMHgyMzIzNDY2NSwgMHgwMDAwMjMwMCwgMHhjM2MzOWQ1ZSwgMHgwMDAwYzMwMAorLmxvbmcgMHgxODE4MzAyOCwgMHgwMDAwMTgwMCwgMHg5Njk2MzdhMSwgMHgwMDAwOTYwMAorLmxvbmcgMHgwNTA1MGEwZiwgMHgwMDAwMDUwMCwgMHg5YTlhMmZiNSwgMHgwMDAwOWEwMAorLmxvbmcgMHgwNzA3MGUwOSwgMHgwMDAwMDcwMCwgMHgxMjEyMjQzNiwgMHgwMDAwMTIwMAorLmxvbmcgMHg4MDgwMWI5YiwgMHgwMDAwODAwMCwgMHhlMmUyZGYzZCwgMHgwMDAwZTIwMAorLmxvbmcgMHhlYmViY2QyNiwgMHgwMDAwZWIwMCwgMHgyNzI3NGU2OSwgMHgwMDAwMjcwMAorLmxvbmcgMHhiMmIyN2ZjZCwgMHgwMDAwYjIwMCwgMHg3NTc1ZWE5ZiwgMHgwMDAwNzUwMAorLmxvbmcgMHgwOTA5MTIxYiwgMHgwMDAwMDkwMCwgMHg4MzgzMWQ5ZSwgMHgwMDAwODMwMAorLmxvbmcgMHgyYzJjNTg3NCwgMHgwMDAwMmMwMCwgMHgxYTFhMzQyZSwgMHgwMDAwMWEwMAorLmxvbmcgMHgxYjFiMzYyZCwgMHgwMDAwMWIwMCwgMHg2ZTZlZGNiMiwgMHgwMDAwNmUwMAorLmxvbmcgMHg1YTVhYjRlZSwgMHgwMDAwNWEwMCwgMHhhMGEwNWJmYiwgMHgwMDAwYTAwMAorLmxvbmcgMHg1MjUyYTRmNiwgMHgwMDAwNTIwMCwgMHgzYjNiNzY0ZCwgMHgwMDAwM2IwMAorLmxvbmcgMHhkNmQ2Yjc2MSwgMHgwMDAwZDYwMCwgMHhiM2IzN2RjZSwgMHgwMDAwYjMwMAorLmxvbmcgMHgyOTI5NTI3YiwgMHgwMDAwMjkwMCwgMHhlM2UzZGQzZSwgMHgwMDAwZTMwMAorLmxvbmcgMHgyZjJmNWU3MSwgMHgwMDAwMmYwMCwgMHg4NDg0MTM5NywgMHgwMDAwODQwMAorLmxvbmcgMHg1MzUzYTZmNSwgMHgwMDAwNTMwMCwgMHhkMWQxYjk2OCwgMHgwMDAwZDEwMAorLmxvbmcgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhlZGVkYzEyYywgMHgwMDAwZWQwMAorLmxvbmcgMHgyMDIwNDA2MCwgMHgwMDAwMjAwMCwgMHhmY2ZjZTMxZiwgMHgwMDAwZmMwMAorLmxvbmcgMHhiMWIxNzljOCwgMHgwMDAwYjEwMCwgMHg1YjViYjZlZCwgMHgwMDAwNWIwMAorLmxvbmcgMHg2YTZhZDRiZSwgMHgwMDAwNmEwMCwgMHhjYmNiOGQ0NiwgMHgwMDAwY2IwMAorLmxvbmcgMHhiZWJlNjdkOSwgMHgwMDAwYmUwMCwgMHgzOTM5NzI0YiwgMHgwMDAwMzkwMAorLmxvbmcgMHg0YTRhOTRkZSwgMHgwMDAwNGEwMCwgMHg0YzRjOThkNCwgMHgwMDAwNGMwMAorLmxvbmcgMHg1ODU4YjBlOCwgMHgwMDAwNTgwMCwgMHhjZmNmODU0YSwgMHgwMDAwY2YwMAorLmxvbmcgMHhkMGQwYmI2YiwgMHgwMDAwZDAwMCwgMHhlZmVmYzUyYSwgMHgwMDAwZWYwMAorLmxvbmcgMHhhYWFhNGZlNSwgMHgwMDAwYWEwMCwgMHhmYmZiZWQxNiwgMHgwMDAwZmIwMAorLmxvbmcgMHg0MzQzODZjNSwgMHgwMDAwNDMwMCwgMHg0ZDRkOWFkNywgMHgwMDAwNGQwMAorLmxvbmcgMHgzMzMzNjY1NSwgMHgwMDAwMzMwMCwgMHg4NTg1MTE5NCwgMHgwMDAwODUwMAorLmxvbmcgMHg0NTQ1OGFjZiwgMHgwMDAwNDUwMCwgMHhmOWY5ZTkxMCwgMHgwMDAwZjkwMAorLmxvbmcgMHgwMjAyMDQwNiwgMHgwMDAwMDIwMCwgMHg3ZjdmZmU4MSwgMHgwMDAwN2YwMAorLmxvbmcgMHg1MDUwYTBmMCwgMHgwMDAwNTAwMCwgMHgzYzNjNzg0NCwgMHgwMDAwM2MwMAorLmxvbmcgMHg5ZjlmMjViYSwgMHgwMDAwOWYwMCwgMHhhOGE4NGJlMywgMHgwMDAwYTgwMAorLmxvbmcgMHg1MTUxYTJmMywgMHgwMDAwNTEwMCwgMHhhM2EzNWRmZSwgMHgwMDAwYTMwMAorLmxvbmcgMHg0MDQwODBjMCwgMHgwMDAwNDAwMCwgMHg4ZjhmMDU4YSwgMHgwMDAwOGYwMAorLmxvbmcgMHg5MjkyM2ZhZCwgMHgwMDAwOTIwMCwgMHg5ZDlkMjFiYywgMHgwMDAwOWQwMAorLmxvbmcgMHgzODM4NzA0OCwgMHgwMDAwMzgwMCwgMHhmNWY1ZjEwNCwgMHgwMDAwZjUwMAorLmxvbmcgMHhiY2JjNjNkZiwgMHgwMDAwYmMwMCwgMHhiNmI2NzdjMSwgMHgwMDAwYjYwMAorLmxvbmcgMHhkYWRhYWY3NSwgMHgwMDAwZGEwMCwgMHgyMTIxNDI2MywgMHgwMDAwMjEwMAorLmxvbmcgMHgxMDEwMjAzMCwgMHgwMDAwMTAwMCwgMHhmZmZmZTUxYSwgMHgwMDAwZmYwMAorLmxvbmcgMHhmM2YzZmQwZSwgMHgwMDAwZjMwMCwgMHhkMmQyYmY2ZCwgMHgwMDAwZDIwMAorLmxvbmcgMHhjZGNkODE0YywgMHgwMDAwY2QwMCwgMHgwYzBjMTgxNCwgMHgwMDAwMGMwMAorLmxvbmcgMHgxMzEzMjYzNSwgMHgwMDAwMTMwMCwgMHhlY2VjYzMyZiwgMHgwMDAwZWMwMAorLmxvbmcgMHg1ZjVmYmVlMSwgMHgwMDAwNWYwMCwgMHg5Nzk3MzVhMiwgMHgwMDAwOTcwMAorLmxvbmcgMHg0NDQ0ODhjYywgMHgwMDAwNDQwMCwgMHgxNzE3MmUzOSwgMHgwMDAwMTcwMAorLmxvbmcgMHhjNGM0OTM1NywgMHgwMDAwYzQwMCwgMHhhN2E3NTVmMiwgMHgwMDAwYTcwMAorLmxvbmcgMHg3ZTdlZmM4MiwgMHgwMDAwN2UwMCwgMHgzZDNkN2E0NywgMHgwMDAwM2QwMAorLmxvbmcgMHg2NDY0YzhhYywgMHgwMDAwNjQwMCwgMHg1ZDVkYmFlNywgMHgwMDAwNWQwMAorLmxvbmcgMHgxOTE5MzIyYiwgMHgwMDAwMTkwMCwgMHg3MzczZTY5NSwgMHgwMDAwNzMwMAorLmxvbmcgMHg2MDYwYzBhMCwgMHgwMDAwNjAwMCwgMHg4MTgxMTk5OCwgMHgwMDAwODEwMAorLmxvbmcgMHg0ZjRmOWVkMSwgMHgwMDAwNGYwMCwgMHhkY2RjYTM3ZiwgMHgwMDAwZGMwMAorLmxvbmcgMHgyMjIyNDQ2NiwgMHgwMDAwMjIwMCwgMHgyYTJhNTQ3ZSwgMHgwMDAwMmEwMAorLmxvbmcgMHg5MDkwM2JhYiwgMHgwMDAwOTAwMCwgMHg4ODg4MGI4MywgMHgwMDAwODgwMAorLmxvbmcgMHg0NjQ2OGNjYSwgMHgwMDAwNDYwMCwgMHhlZWVlYzcyOSwgMHgwMDAwZWUwMAorLmxvbmcgMHhiOGI4NmJkMywgMHgwMDAwYjgwMCwgMHgxNDE0MjgzYywgMHgwMDAwMTQwMAorLmxvbmcgMHhkZWRlYTc3OSwgMHgwMDAwZGUwMCwgMHg1ZTVlYmNlMiwgMHgwMDAwNWUwMAorLmxvbmcgMHgwYjBiMTYxZCwgMHgwMDAwMGIwMCwgMHhkYmRiYWQ3NiwgMHgwMDAwZGIwMAorLmxvbmcgMHhlMGUwZGIzYiwgMHgwMDAwZTAwMCwgMHgzMjMyNjQ1NiwgMHgwMDAwMzIwMAorLmxvbmcgMHgzYTNhNzQ0ZSwgMHgwMDAwM2EwMCwgMHgwYTBhMTQxZSwgMHgwMDAwMGEwMAorLmxvbmcgMHg0OTQ5OTJkYiwgMHgwMDAwNDkwMCwgMHgwNjA2MGMwYSwgMHgwMDAwMDYwMAorLmxvbmcgMHgyNDI0NDg2YywgMHgwMDAwMjQwMCwgMHg1YzVjYjhlNCwgMHgwMDAwNWMwMAorLmxvbmcgMHhjMmMyOWY1ZCwgMHgwMDAwYzIwMCwgMHhkM2QzYmQ2ZSwgMHgwMDAwZDMwMAorLmxvbmcgMHhhY2FjNDNlZiwgMHgwMDAwYWMwMCwgMHg2MjYyYzRhNiwgMHgwMDAwNjIwMAorLmxvbmcgMHg5MTkxMzlhOCwgMHgwMDAwOTEwMCwgMHg5NTk1MzFhNCwgMHgwMDAwOTUwMAorLmxvbmcgMHhlNGU0ZDMzNywgMHgwMDAwZTQwMCwgMHg3OTc5ZjI4YiwgMHgwMDAwNzkwMAorLmxvbmcgMHhlN2U3ZDUzMiwgMHgwMDAwZTcwMCwgMHhjOGM4OGI0MywgMHgwMDAwYzgwMAorLmxvbmcgMHgzNzM3NmU1OSwgMHgwMDAwMzcwMCwgMHg2ZDZkZGFiNywgMHgwMDAwNmQwMAorLmxvbmcgMHg4ZDhkMDE4YywgMHgwMDAwOGQwMCwgMHhkNWQ1YjE2NCwgMHgwMDAwZDUwMAorLmxvbmcgMHg0ZTRlOWNkMiwgMHgwMDAwNGUwMCwgMHhhOWE5NDllMCwgMHgwMDAwYTkwMAorLmxvbmcgMHg2YzZjZDhiNCwgMHgwMDAwNmMwMCwgMHg1NjU2YWNmYSwgMHgwMDAwNTYwMAorLmxvbmcgMHhmNGY0ZjMwNywgMHgwMDAwZjQwMCwgMHhlYWVhY2YyNSwgMHgwMDAwZWEwMAorLmxvbmcgMHg2NTY1Y2FhZiwgMHgwMDAwNjUwMCwgMHg3YTdhZjQ4ZSwgMHgwMDAwN2EwMAorLmxvbmcgMHhhZWFlNDdlOSwgMHgwMDAwYWUwMCwgMHgwODA4MTAxOCwgMHgwMDAwMDgwMAorLmxvbmcgMHhiYWJhNmZkNSwgMHgwMDAwYmEwMCwgMHg3ODc4ZjA4OCwgMHgwMDAwNzgwMAorLmxvbmcgMHgyNTI1NGE2ZiwgMHgwMDAwMjUwMCwgMHgyZTJlNWM3MiwgMHgwMDAwMmUwMAorLmxvbmcgMHgxYzFjMzgyNCwgMHgwMDAwMWMwMCwgMHhhNmE2NTdmMSwgMHgwMDAwYTYwMAorLmxvbmcgMHhiNGI0NzNjNywgMHgwMDAwYjQwMCwgMHhjNmM2OTc1MSwgMHgwMDAwYzYwMAorLmxvbmcgMHhlOGU4Y2IyMywgMHgwMDAwZTgwMCwgMHhkZGRkYTE3YywgMHgwMDAwZGQwMAorLmxvbmcgMHg3NDc0ZTg5YywgMHgwMDAwNzQwMCwgMHgxZjFmM2UyMSwgMHgwMDAwMWYwMAorLmxvbmcgMHg0YjRiOTZkZCwgMHgwMDAwNGIwMCwgMHhiZGJkNjFkYywgMHgwMDAwYmQwMAorLmxvbmcgMHg4YjhiMGQ4NiwgMHgwMDAwOGIwMCwgMHg4YThhMGY4NSwgMHgwMDAwOGEwMAorLmxvbmcgMHg3MDcwZTA5MCwgMHgwMDAwNzAwMCwgMHgzZTNlN2M0MiwgMHgwMDAwM2UwMAorLmxvbmcgMHhiNWI1NzFjNCwgMHgwMDAwYjUwMCwgMHg2NjY2Y2NhYSwgMHgwMDAwNjYwMAorLmxvbmcgMHg0ODQ4OTBkOCwgMHgwMDAwNDgwMCwgMHgwMzAzMDYwNSwgMHgwMDAwMDMwMAorLmxvbmcgMHhmNmY2ZjcwMSwgMHgwMDAwZjYwMCwgMHgwZTBlMWMxMiwgMHgwMDAwMGUwMAorLmxvbmcgMHg2MTYxYzJhMywgMHgwMDAwNjEwMCwgMHgzNTM1NmE1ZiwgMHgwMDAwMzUwMAorLmxvbmcgMHg1NzU3YWVmOSwgMHgwMDAwNTcwMCwgMHhiOWI5NjlkMCwgMHgwMDAwYjkwMAorLmxvbmcgMHg4Njg2MTc5MSwgMHgwMDAwODYwMCwgMHhjMWMxOTk1OCwgMHgwMDAwYzEwMAorLmxvbmcgMHgxZDFkM2EyNywgMHgwMDAwMWQwMCwgMHg5ZTllMjdiOSwgMHgwMDAwOWUwMAorLmxvbmcgMHhlMWUxZDkzOCwgMHgwMDAwZTEwMCwgMHhmOGY4ZWIxMywgMHgwMDAwZjgwMAorLmxvbmcgMHg5ODk4MmJiMywgMHgwMDAwOTgwMCwgMHgxMTExMjIzMywgMHgwMDAwMTEwMAorLmxvbmcgMHg2OTY5ZDJiYiwgMHgwMDAwNjkwMCwgMHhkOWQ5YTk3MCwgMHgwMDAwZDkwMAorLmxvbmcgMHg4ZThlMDc4OSwgMHgwMDAwOGUwMCwgMHg5NDk0MzNhNywgMHgwMDAwOTQwMAorLmxvbmcgMHg5YjliMmRiNiwgMHgwMDAwOWIwMCwgMHgxZTFlM2MyMiwgMHgwMDAwMWUwMAorLmxvbmcgMHg4Nzg3MTU5MiwgMHgwMDAwODcwMCwgMHhlOWU5YzkyMCwgMHgwMDAwZTkwMAorLmxvbmcgMHhjZWNlODc0OSwgMHgwMDAwY2UwMCwgMHg1NTU1YWFmZiwgMHgwMDAwNTUwMAorLmxvbmcgMHgyODI4NTA3OCwgMHgwMDAwMjgwMCwgMHhkZmRmYTU3YSwgMHgwMDAwZGYwMAorLmxvbmcgMHg4YzhjMDM4ZiwgMHgwMDAwOGMwMCwgMHhhMWExNTlmOCwgMHgwMDAwYTEwMAorLmxvbmcgMHg4OTg5MDk4MCwgMHgwMDAwODkwMCwgMHgwZDBkMWExNywgMHgwMDAwMGQwMAorLmxvbmcgMHhiZmJmNjVkYSwgMHgwMDAwYmYwMCwgMHhlNmU2ZDczMSwgMHgwMDAwZTYwMAorLmxvbmcgMHg0MjQyODRjNiwgMHgwMDAwNDIwMCwgMHg2ODY4ZDBiOCwgMHgwMDAwNjgwMAorLmxvbmcgMHg0MTQxODJjMywgMHgwMDAwNDEwMCwgMHg5OTk5MjliMCwgMHgwMDAwOTkwMAorLmxvbmcgMHgyZDJkNWE3NywgMHgwMDAwMmQwMCwgMHgwZjBmMWUxMSwgMHgwMDAwMGYwMAorLmxvbmcgMHhiMGIwN2JjYiwgMHgwMDAwYjAwMCwgMHg1NDU0YThmYywgMHgwMDAwNTQwMAorLmxvbmcgMHhiYmJiNmRkNiwgMHgwMDAwYmIwMCwgMHgxNjE2MmMzYSwgMHgwMDAwMTYwMAorLkx0YWJsZUUyOgorLmxvbmcgMHg2M2M2YTU2MworLkx0YWJsZUVzMjoKKy5sb25nICAgICAgICAgICAgIDB4MDA2MzAwMDAsIDB4N2NmODg0N2MsIDB4MDA3YzAwMDAKKy5sb25nIDB4NzdlZTk5NzcsIDB4MDA3NzAwMDAsIDB4N2JmNjhkN2IsIDB4MDA3YjAwMDAKKy5sb25nIDB4ZjJmZjBkZjIsIDB4MDBmMjAwMDAsIDB4NmJkNmJkNmIsIDB4MDA2YjAwMDAKKy5sb25nIDB4NmZkZWIxNmYsIDB4MDA2ZjAwMDAsIDB4YzU5MTU0YzUsIDB4MDBjNTAwMDAKKy5sb25nIDB4MzA2MDUwMzAsIDB4MDAzMDAwMDAsIDB4MDEwMjAzMDEsIDB4MDAwMTAwMDAKKy5sb25nIDB4NjdjZWE5NjcsIDB4MDA2NzAwMDAsIDB4MmI1NjdkMmIsIDB4MDAyYjAwMDAKKy5sb25nIDB4ZmVlNzE5ZmUsIDB4MDBmZTAwMDAsIDB4ZDdiNTYyZDcsIDB4MDBkNzAwMDAKKy5sb25nIDB4YWI0ZGU2YWIsIDB4MDBhYjAwMDAsIDB4NzZlYzlhNzYsIDB4MDA3NjAwMDAKKy5sb25nIDB4Y2E4ZjQ1Y2EsIDB4MDBjYTAwMDAsIDB4ODIxZjlkODIsIDB4MDA4MjAwMDAKKy5sb25nIDB4Yzk4OTQwYzksIDB4MDBjOTAwMDAsIDB4N2RmYTg3N2QsIDB4MDA3ZDAwMDAKKy5sb25nIDB4ZmFlZjE1ZmEsIDB4MDBmYTAwMDAsIDB4NTliMmViNTksIDB4MDA1OTAwMDAKKy5sb25nIDB4NDc4ZWM5NDcsIDB4MDA0NzAwMDAsIDB4ZjBmYjBiZjAsIDB4MDBmMDAwMDAKKy5sb25nIDB4YWQ0MWVjYWQsIDB4MDBhZDAwMDAsIDB4ZDRiMzY3ZDQsIDB4MDBkNDAwMDAKKy5sb25nIDB4YTI1ZmZkYTIsIDB4MDBhMjAwMDAsIDB4YWY0NWVhYWYsIDB4MDBhZjAwMDAKKy5sb25nIDB4OWMyM2JmOWMsIDB4MDA5YzAwMDAsIDB4YTQ1M2Y3YTQsIDB4MDBhNDAwMDAKKy5sb25nIDB4NzJlNDk2NzIsIDB4MDA3MjAwMDAsIDB4YzA5YjViYzAsIDB4MDBjMDAwMDAKKy5sb25nIDB4Yjc3NWMyYjcsIDB4MDBiNzAwMDAsIDB4ZmRlMTFjZmQsIDB4MDBmZDAwMDAKKy5sb25nIDB4OTMzZGFlOTMsIDB4MDA5MzAwMDAsIDB4MjY0YzZhMjYsIDB4MDAyNjAwMDAKKy5sb25nIDB4MzY2YzVhMzYsIDB4MDAzNjAwMDAsIDB4M2Y3ZTQxM2YsIDB4MDAzZjAwMDAKKy5sb25nIDB4ZjdmNTAyZjcsIDB4MDBmNzAwMDAsIDB4Y2M4MzRmY2MsIDB4MDBjYzAwMDAKKy5sb25nIDB4MzQ2ODVjMzQsIDB4MDAzNDAwMDAsIDB4YTU1MWY0YTUsIDB4MDBhNTAwMDAKKy5sb25nIDB4ZTVkMTM0ZTUsIDB4MDBlNTAwMDAsIDB4ZjFmOTA4ZjEsIDB4MDBmMTAwMDAKKy5sb25nIDB4NzFlMjkzNzEsIDB4MDA3MTAwMDAsIDB4ZDhhYjczZDgsIDB4MDBkODAwMDAKKy5sb25nIDB4MzE2MjUzMzEsIDB4MDAzMTAwMDAsIDB4MTUyYTNmMTUsIDB4MDAxNTAwMDAKKy5sb25nIDB4MDQwODBjMDQsIDB4MDAwNDAwMDAsIDB4Yzc5NTUyYzcsIDB4MDBjNzAwMDAKKy5sb25nIDB4MjM0NjY1MjMsIDB4MDAyMzAwMDAsIDB4YzM5ZDVlYzMsIDB4MDBjMzAwMDAKKy5sb25nIDB4MTgzMDI4MTgsIDB4MDAxODAwMDAsIDB4OTYzN2ExOTYsIDB4MDA5NjAwMDAKKy5sb25nIDB4MDUwYTBmMDUsIDB4MDAwNTAwMDAsIDB4OWEyZmI1OWEsIDB4MDA5YTAwMDAKKy5sb25nIDB4MDcwZTA5MDcsIDB4MDAwNzAwMDAsIDB4MTIyNDM2MTIsIDB4MDAxMjAwMDAKKy5sb25nIDB4ODAxYjliODAsIDB4MDA4MDAwMDAsIDB4ZTJkZjNkZTIsIDB4MDBlMjAwMDAKKy5sb25nIDB4ZWJjZDI2ZWIsIDB4MDBlYjAwMDAsIDB4Mjc0ZTY5MjcsIDB4MDAyNzAwMDAKKy5sb25nIDB4YjI3ZmNkYjIsIDB4MDBiMjAwMDAsIDB4NzVlYTlmNzUsIDB4MDA3NTAwMDAKKy5sb25nIDB4MDkxMjFiMDksIDB4MDAwOTAwMDAsIDB4ODMxZDllODMsIDB4MDA4MzAwMDAKKy5sb25nIDB4MmM1ODc0MmMsIDB4MDAyYzAwMDAsIDB4MWEzNDJlMWEsIDB4MDAxYTAwMDAKKy5sb25nIDB4MWIzNjJkMWIsIDB4MDAxYjAwMDAsIDB4NmVkY2IyNmUsIDB4MDA2ZTAwMDAKKy5sb25nIDB4NWFiNGVlNWEsIDB4MDA1YTAwMDAsIDB4YTA1YmZiYTAsIDB4MDBhMDAwMDAKKy5sb25nIDB4NTJhNGY2NTIsIDB4MDA1MjAwMDAsIDB4M2I3NjRkM2IsIDB4MDAzYjAwMDAKKy5sb25nIDB4ZDZiNzYxZDYsIDB4MDBkNjAwMDAsIDB4YjM3ZGNlYjMsIDB4MDBiMzAwMDAKKy5sb25nIDB4Mjk1MjdiMjksIDB4MDAyOTAwMDAsIDB4ZTNkZDNlZTMsIDB4MDBlMzAwMDAKKy5sb25nIDB4MmY1ZTcxMmYsIDB4MDAyZjAwMDAsIDB4ODQxMzk3ODQsIDB4MDA4NDAwMDAKKy5sb25nIDB4NTNhNmY1NTMsIDB4MDA1MzAwMDAsIDB4ZDFiOTY4ZDEsIDB4MDBkMTAwMDAKKy5sb25nIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZWRjMTJjZWQsIDB4MDBlZDAwMDAKKy5sb25nIDB4MjA0MDYwMjAsIDB4MDAyMDAwMDAsIDB4ZmNlMzFmZmMsIDB4MDBmYzAwMDAKKy5sb25nIDB4YjE3OWM4YjEsIDB4MDBiMTAwMDAsIDB4NWJiNmVkNWIsIDB4MDA1YjAwMDAKKy5sb25nIDB4NmFkNGJlNmEsIDB4MDA2YTAwMDAsIDB4Y2I4ZDQ2Y2IsIDB4MDBjYjAwMDAKKy5sb25nIDB4YmU2N2Q5YmUsIDB4MDBiZTAwMDAsIDB4Mzk3MjRiMzksIDB4MDAzOTAwMDAKKy5sb25nIDB4NGE5NGRlNGEsIDB4MDA0YTAwMDAsIDB4NGM5OGQ0NGMsIDB4MDA0YzAwMDAKKy5sb25nIDB4NThiMGU4NTgsIDB4MDA1ODAwMDAsIDB4Y2Y4NTRhY2YsIDB4MDBjZjAwMDAKKy5sb25nIDB4ZDBiYjZiZDAsIDB4MDBkMDAwMDAsIDB4ZWZjNTJhZWYsIDB4MDBlZjAwMDAKKy5sb25nIDB4YWE0ZmU1YWEsIDB4MDBhYTAwMDAsIDB4ZmJlZDE2ZmIsIDB4MDBmYjAwMDAKKy5sb25nIDB4NDM4NmM1NDMsIDB4MDA0MzAwMDAsIDB4NGQ5YWQ3NGQsIDB4MDA0ZDAwMDAKKy5sb25nIDB4MzM2NjU1MzMsIDB4MDAzMzAwMDAsIDB4ODUxMTk0ODUsIDB4MDA4NTAwMDAKKy5sb25nIDB4NDU4YWNmNDUsIDB4MDA0NTAwMDAsIDB4ZjllOTEwZjksIDB4MDBmOTAwMDAKKy5sb25nIDB4MDIwNDA2MDIsIDB4MDAwMjAwMDAsIDB4N2ZmZTgxN2YsIDB4MDA3ZjAwMDAKKy5sb25nIDB4NTBhMGYwNTAsIDB4MDA1MDAwMDAsIDB4M2M3ODQ0M2MsIDB4MDAzYzAwMDAKKy5sb25nIDB4OWYyNWJhOWYsIDB4MDA5ZjAwMDAsIDB4YTg0YmUzYTgsIDB4MDBhODAwMDAKKy5sb25nIDB4NTFhMmYzNTEsIDB4MDA1MTAwMDAsIDB4YTM1ZGZlYTMsIDB4MDBhMzAwMDAKKy5sb25nIDB4NDA4MGMwNDAsIDB4MDA0MDAwMDAsIDB4OGYwNThhOGYsIDB4MDA4ZjAwMDAKKy5sb25nIDB4OTIzZmFkOTIsIDB4MDA5MjAwMDAsIDB4OWQyMWJjOWQsIDB4MDA5ZDAwMDAKKy5sb25nIDB4Mzg3MDQ4MzgsIDB4MDAzODAwMDAsIDB4ZjVmMTA0ZjUsIDB4MDBmNTAwMDAKKy5sb25nIDB4YmM2M2RmYmMsIDB4MDBiYzAwMDAsIDB4YjY3N2MxYjYsIDB4MDBiNjAwMDAKKy5sb25nIDB4ZGFhZjc1ZGEsIDB4MDBkYTAwMDAsIDB4MjE0MjYzMjEsIDB4MDAyMTAwMDAKKy5sb25nIDB4MTAyMDMwMTAsIDB4MDAxMDAwMDAsIDB4ZmZlNTFhZmYsIDB4MDBmZjAwMDAKKy5sb25nIDB4ZjNmZDBlZjMsIDB4MDBmMzAwMDAsIDB4ZDJiZjZkZDIsIDB4MDBkMjAwMDAKKy5sb25nIDB4Y2Q4MTRjY2QsIDB4MDBjZDAwMDAsIDB4MGMxODE0MGMsIDB4MDAwYzAwMDAKKy5sb25nIDB4MTMyNjM1MTMsIDB4MDAxMzAwMDAsIDB4ZWNjMzJmZWMsIDB4MDBlYzAwMDAKKy5sb25nIDB4NWZiZWUxNWYsIDB4MDA1ZjAwMDAsIDB4OTczNWEyOTcsIDB4MDA5NzAwMDAKKy5sb25nIDB4NDQ4OGNjNDQsIDB4MDA0NDAwMDAsIDB4MTcyZTM5MTcsIDB4MDAxNzAwMDAKKy5sb25nIDB4YzQ5MzU3YzQsIDB4MDBjNDAwMDAsIDB4YTc1NWYyYTcsIDB4MDBhNzAwMDAKKy5sb25nIDB4N2VmYzgyN2UsIDB4MDA3ZTAwMDAsIDB4M2Q3YTQ3M2QsIDB4MDAzZDAwMDAKKy5sb25nIDB4NjRjOGFjNjQsIDB4MDA2NDAwMDAsIDB4NWRiYWU3NWQsIDB4MDA1ZDAwMDAKKy5sb25nIDB4MTkzMjJiMTksIDB4MDAxOTAwMDAsIDB4NzNlNjk1NzMsIDB4MDA3MzAwMDAKKy5sb25nIDB4NjBjMGEwNjAsIDB4MDA2MDAwMDAsIDB4ODExOTk4ODEsIDB4MDA4MTAwMDAKKy5sb25nIDB4NGY5ZWQxNGYsIDB4MDA0ZjAwMDAsIDB4ZGNhMzdmZGMsIDB4MDBkYzAwMDAKKy5sb25nIDB4MjI0NDY2MjIsIDB4MDAyMjAwMDAsIDB4MmE1NDdlMmEsIDB4MDAyYTAwMDAKKy5sb25nIDB4OTAzYmFiOTAsIDB4MDA5MDAwMDAsIDB4ODgwYjgzODgsIDB4MDA4ODAwMDAKKy5sb25nIDB4NDY4Y2NhNDYsIDB4MDA0NjAwMDAsIDB4ZWVjNzI5ZWUsIDB4MDBlZTAwMDAKKy5sb25nIDB4Yjg2YmQzYjgsIDB4MDBiODAwMDAsIDB4MTQyODNjMTQsIDB4MDAxNDAwMDAKKy5sb25nIDB4ZGVhNzc5ZGUsIDB4MDBkZTAwMDAsIDB4NWViY2UyNWUsIDB4MDA1ZTAwMDAKKy5sb25nIDB4MGIxNjFkMGIsIDB4MDAwYjAwMDAsIDB4ZGJhZDc2ZGIsIDB4MDBkYjAwMDAKKy5sb25nIDB4ZTBkYjNiZTAsIDB4MDBlMDAwMDAsIDB4MzI2NDU2MzIsIDB4MDAzMjAwMDAKKy5sb25nIDB4M2E3NDRlM2EsIDB4MDAzYTAwMDAsIDB4MGExNDFlMGEsIDB4MDAwYTAwMDAKKy5sb25nIDB4NDk5MmRiNDksIDB4MDA0OTAwMDAsIDB4MDYwYzBhMDYsIDB4MDAwNjAwMDAKKy5sb25nIDB4MjQ0ODZjMjQsIDB4MDAyNDAwMDAsIDB4NWNiOGU0NWMsIDB4MDA1YzAwMDAKKy5sb25nIDB4YzI5ZjVkYzIsIDB4MDBjMjAwMDAsIDB4ZDNiZDZlZDMsIDB4MDBkMzAwMDAKKy5sb25nIDB4YWM0M2VmYWMsIDB4MDBhYzAwMDAsIDB4NjJjNGE2NjIsIDB4MDA2MjAwMDAKKy5sb25nIDB4OTEzOWE4OTEsIDB4MDA5MTAwMDAsIDB4OTUzMWE0OTUsIDB4MDA5NTAwMDAKKy5sb25nIDB4ZTRkMzM3ZTQsIDB4MDBlNDAwMDAsIDB4NzlmMjhiNzksIDB4MDA3OTAwMDAKKy5sb25nIDB4ZTdkNTMyZTcsIDB4MDBlNzAwMDAsIDB4Yzg4YjQzYzgsIDB4MDBjODAwMDAKKy5sb25nIDB4Mzc2ZTU5MzcsIDB4MDAzNzAwMDAsIDB4NmRkYWI3NmQsIDB4MDA2ZDAwMDAKKy5sb25nIDB4OGQwMThjOGQsIDB4MDA4ZDAwMDAsIDB4ZDViMTY0ZDUsIDB4MDBkNTAwMDAKKy5sb25nIDB4NGU5Y2QyNGUsIDB4MDA0ZTAwMDAsIDB4YTk0OWUwYTksIDB4MDBhOTAwMDAKKy5sb25nIDB4NmNkOGI0NmMsIDB4MDA2YzAwMDAsIDB4NTZhY2ZhNTYsIDB4MDA1NjAwMDAKKy5sb25nIDB4ZjRmMzA3ZjQsIDB4MDBmNDAwMDAsIDB4ZWFjZjI1ZWEsIDB4MDBlYTAwMDAKKy5sb25nIDB4NjVjYWFmNjUsIDB4MDA2NTAwMDAsIDB4N2FmNDhlN2EsIDB4MDA3YTAwMDAKKy5sb25nIDB4YWU0N2U5YWUsIDB4MDBhZTAwMDAsIDB4MDgxMDE4MDgsIDB4MDAwODAwMDAKKy5sb25nIDB4YmE2ZmQ1YmEsIDB4MDBiYTAwMDAsIDB4NzhmMDg4NzgsIDB4MDA3ODAwMDAKKy5sb25nIDB4MjU0YTZmMjUsIDB4MDAyNTAwMDAsIDB4MmU1YzcyMmUsIDB4MDAyZTAwMDAKKy5sb25nIDB4MWMzODI0MWMsIDB4MDAxYzAwMDAsIDB4YTY1N2YxYTYsIDB4MDBhNjAwMDAKKy5sb25nIDB4YjQ3M2M3YjQsIDB4MDBiNDAwMDAsIDB4YzY5NzUxYzYsIDB4MDBjNjAwMDAKKy5sb25nIDB4ZThjYjIzZTgsIDB4MDBlODAwMDAsIDB4ZGRhMTdjZGQsIDB4MDBkZDAwMDAKKy5sb25nIDB4NzRlODljNzQsIDB4MDA3NDAwMDAsIDB4MWYzZTIxMWYsIDB4MDAxZjAwMDAKKy5sb25nIDB4NGI5NmRkNGIsIDB4MDA0YjAwMDAsIDB4YmQ2MWRjYmQsIDB4MDBiZDAwMDAKKy5sb25nIDB4OGIwZDg2OGIsIDB4MDA4YjAwMDAsIDB4OGEwZjg1OGEsIDB4MDA4YTAwMDAKKy5sb25nIDB4NzBlMDkwNzAsIDB4MDA3MDAwMDAsIDB4M2U3YzQyM2UsIDB4MDAzZTAwMDAKKy5sb25nIDB4YjU3MWM0YjUsIDB4MDBiNTAwMDAsIDB4NjZjY2FhNjYsIDB4MDA2NjAwMDAKKy5sb25nIDB4NDg5MGQ4NDgsIDB4MDA0ODAwMDAsIDB4MDMwNjA1MDMsIDB4MDAwMzAwMDAKKy5sb25nIDB4ZjZmNzAxZjYsIDB4MDBmNjAwMDAsIDB4MGUxYzEyMGUsIDB4MDAwZTAwMDAKKy5sb25nIDB4NjFjMmEzNjEsIDB4MDA2MTAwMDAsIDB4MzU2YTVmMzUsIDB4MDAzNTAwMDAKKy5sb25nIDB4NTdhZWY5NTcsIDB4MDA1NzAwMDAsIDB4Yjk2OWQwYjksIDB4MDBiOTAwMDAKKy5sb25nIDB4ODYxNzkxODYsIDB4MDA4NjAwMDAsIDB4YzE5OTU4YzEsIDB4MDBjMTAwMDAKKy5sb25nIDB4MWQzYTI3MWQsIDB4MDAxZDAwMDAsIDB4OWUyN2I5OWUsIDB4MDA5ZTAwMDAKKy5sb25nIDB4ZTFkOTM4ZTEsIDB4MDBlMTAwMDAsIDB4ZjhlYjEzZjgsIDB4MDBmODAwMDAKKy5sb25nIDB4OTgyYmIzOTgsIDB4MDA5ODAwMDAsIDB4MTEyMjMzMTEsIDB4MDAxMTAwMDAKKy5sb25nIDB4NjlkMmJiNjksIDB4MDA2OTAwMDAsIDB4ZDlhOTcwZDksIDB4MDBkOTAwMDAKKy5sb25nIDB4OGUwNzg5OGUsIDB4MDA4ZTAwMDAsIDB4OTQzM2E3OTQsIDB4MDA5NDAwMDAKKy5sb25nIDB4OWIyZGI2OWIsIDB4MDA5YjAwMDAsIDB4MWUzYzIyMWUsIDB4MDAxZTAwMDAKKy5sb25nIDB4ODcxNTkyODcsIDB4MDA4NzAwMDAsIDB4ZTljOTIwZTksIDB4MDBlOTAwMDAKKy5sb25nIDB4Y2U4NzQ5Y2UsIDB4MDBjZTAwMDAsIDB4NTVhYWZmNTUsIDB4MDA1NTAwMDAKKy5sb25nIDB4Mjg1MDc4MjgsIDB4MDAyODAwMDAsIDB4ZGZhNTdhZGYsIDB4MDBkZjAwMDAKKy5sb25nIDB4OGMwMzhmOGMsIDB4MDA4YzAwMDAsIDB4YTE1OWY4YTEsIDB4MDBhMTAwMDAKKy5sb25nIDB4ODkwOTgwODksIDB4MDA4OTAwMDAsIDB4MGQxYTE3MGQsIDB4MDAwZDAwMDAKKy5sb25nIDB4YmY2NWRhYmYsIDB4MDBiZjAwMDAsIDB4ZTZkNzMxZTYsIDB4MDBlNjAwMDAKKy5sb25nIDB4NDI4NGM2NDIsIDB4MDA0MjAwMDAsIDB4NjhkMGI4NjgsIDB4MDA2ODAwMDAKKy5sb25nIDB4NDE4MmMzNDEsIDB4MDA0MTAwMDAsIDB4OTkyOWIwOTksIDB4MDA5OTAwMDAKKy5sb25nIDB4MmQ1YTc3MmQsIDB4MDAyZDAwMDAsIDB4MGYxZTExMGYsIDB4MDAwZjAwMDAKKy5sb25nIDB4YjA3YmNiYjAsIDB4MDBiMDAwMDAsIDB4NTRhOGZjNTQsIDB4MDA1NDAwMDAKKy5sb25nIDB4YmI2ZGQ2YmIsIDB4MDBiYjAwMDAsIDB4MTYyYzNhMTYsIDB4MDAxNjAwMDAKKy5MdGFibGVFMzoKKy5sb25nIDB4YzZhNTYzNjMKKy5MdGFibGVFczM6CisubG9uZyAgICAgICAgICAgICAweDYzMDAwMDAwLCAweGY4ODQ3YzdjLCAweDdjMDAwMDAwCisubG9uZyAweGVlOTk3Nzc3LCAweDc3MDAwMDAwLCAweGY2OGQ3YjdiLCAweDdiMDAwMDAwCisubG9uZyAweGZmMGRmMmYyLCAweGYyMDAwMDAwLCAweGQ2YmQ2YjZiLCAweDZiMDAwMDAwCisubG9uZyAweGRlYjE2ZjZmLCAweDZmMDAwMDAwLCAweDkxNTRjNWM1LCAweGM1MDAwMDAwCisubG9uZyAweDYwNTAzMDMwLCAweDMwMDAwMDAwLCAweDAyMDMwMTAxLCAweDAxMDAwMDAwCisubG9uZyAweGNlYTk2NzY3LCAweDY3MDAwMDAwLCAweDU2N2QyYjJiLCAweDJiMDAwMDAwCisubG9uZyAweGU3MTlmZWZlLCAweGZlMDAwMDAwLCAweGI1NjJkN2Q3LCAweGQ3MDAwMDAwCisubG9uZyAweDRkZTZhYmFiLCAweGFiMDAwMDAwLCAweGVjOWE3Njc2LCAweDc2MDAwMDAwCisubG9uZyAweDhmNDVjYWNhLCAweGNhMDAwMDAwLCAweDFmOWQ4MjgyLCAweDgyMDAwMDAwCisubG9uZyAweDg5NDBjOWM5LCAweGM5MDAwMDAwLCAweGZhODc3ZDdkLCAweDdkMDAwMDAwCisubG9uZyAweGVmMTVmYWZhLCAweGZhMDAwMDAwLCAweGIyZWI1OTU5LCAweDU5MDAwMDAwCisubG9uZyAweDhlYzk0NzQ3LCAweDQ3MDAwMDAwLCAweGZiMGJmMGYwLCAweGYwMDAwMDAwCisubG9uZyAweDQxZWNhZGFkLCAweGFkMDAwMDAwLCAweGIzNjdkNGQ0LCAweGQ0MDAwMDAwCisubG9uZyAweDVmZmRhMmEyLCAweGEyMDAwMDAwLCAweDQ1ZWFhZmFmLCAweGFmMDAwMDAwCisubG9uZyAweDIzYmY5YzljLCAweDljMDAwMDAwLCAweDUzZjdhNGE0LCAweGE0MDAwMDAwCisubG9uZyAweGU0OTY3MjcyLCAweDcyMDAwMDAwLCAweDliNWJjMGMwLCAweGMwMDAwMDAwCisubG9uZyAweDc1YzJiN2I3LCAweGI3MDAwMDAwLCAweGUxMWNmZGZkLCAweGZkMDAwMDAwCisubG9uZyAweDNkYWU5MzkzLCAweDkzMDAwMDAwLCAweDRjNmEyNjI2LCAweDI2MDAwMDAwCisubG9uZyAweDZjNWEzNjM2LCAweDM2MDAwMDAwLCAweDdlNDEzZjNmLCAweDNmMDAwMDAwCisubG9uZyAweGY1MDJmN2Y3LCAweGY3MDAwMDAwLCAweDgzNGZjY2NjLCAweGNjMDAwMDAwCisubG9uZyAweDY4NWMzNDM0LCAweDM0MDAwMDAwLCAweDUxZjRhNWE1LCAweGE1MDAwMDAwCisubG9uZyAweGQxMzRlNWU1LCAweGU1MDAwMDAwLCAweGY5MDhmMWYxLCAweGYxMDAwMDAwCisubG9uZyAweGUyOTM3MTcxLCAweDcxMDAwMDAwLCAweGFiNzNkOGQ4LCAweGQ4MDAwMDAwCisubG9uZyAweDYyNTMzMTMxLCAweDMxMDAwMDAwLCAweDJhM2YxNTE1LCAweDE1MDAwMDAwCisubG9uZyAweDA4MGMwNDA0LCAweDA0MDAwMDAwLCAweDk1NTJjN2M3LCAweGM3MDAwMDAwCisubG9uZyAweDQ2NjUyMzIzLCAweDIzMDAwMDAwLCAweDlkNWVjM2MzLCAweGMzMDAwMDAwCisubG9uZyAweDMwMjgxODE4LCAweDE4MDAwMDAwLCAweDM3YTE5Njk2LCAweDk2MDAwMDAwCisubG9uZyAweDBhMGYwNTA1LCAweDA1MDAwMDAwLCAweDJmYjU5YTlhLCAweDlhMDAwMDAwCisubG9uZyAweDBlMDkwNzA3LCAweDA3MDAwMDAwLCAweDI0MzYxMjEyLCAweDEyMDAwMDAwCisubG9uZyAweDFiOWI4MDgwLCAweDgwMDAwMDAwLCAweGRmM2RlMmUyLCAweGUyMDAwMDAwCisubG9uZyAweGNkMjZlYmViLCAweGViMDAwMDAwLCAweDRlNjkyNzI3LCAweDI3MDAwMDAwCisubG9uZyAweDdmY2RiMmIyLCAweGIyMDAwMDAwLCAweGVhOWY3NTc1LCAweDc1MDAwMDAwCisubG9uZyAweDEyMWIwOTA5LCAweDA5MDAwMDAwLCAweDFkOWU4MzgzLCAweDgzMDAwMDAwCisubG9uZyAweDU4NzQyYzJjLCAweDJjMDAwMDAwLCAweDM0MmUxYTFhLCAweDFhMDAwMDAwCisubG9uZyAweDM2MmQxYjFiLCAweDFiMDAwMDAwLCAweGRjYjI2ZTZlLCAweDZlMDAwMDAwCisubG9uZyAweGI0ZWU1YTVhLCAweDVhMDAwMDAwLCAweDViZmJhMGEwLCAweGEwMDAwMDAwCisubG9uZyAweGE0ZjY1MjUyLCAweDUyMDAwMDAwLCAweDc2NGQzYjNiLCAweDNiMDAwMDAwCisubG9uZyAweGI3NjFkNmQ2LCAweGQ2MDAwMDAwLCAweDdkY2ViM2IzLCAweGIzMDAwMDAwCisubG9uZyAweDUyN2IyOTI5LCAweDI5MDAwMDAwLCAweGRkM2VlM2UzLCAweGUzMDAwMDAwCisubG9uZyAweDVlNzEyZjJmLCAweDJmMDAwMDAwLCAweDEzOTc4NDg0LCAweDg0MDAwMDAwCisubG9uZyAweGE2ZjU1MzUzLCAweDUzMDAwMDAwLCAweGI5NjhkMWQxLCAweGQxMDAwMDAwCisubG9uZyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGMxMmNlZGVkLCAweGVkMDAwMDAwCisubG9uZyAweDQwNjAyMDIwLCAweDIwMDAwMDAwLCAweGUzMWZmY2ZjLCAweGZjMDAwMDAwCisubG9uZyAweDc5YzhiMWIxLCAweGIxMDAwMDAwLCAweGI2ZWQ1YjViLCAweDViMDAwMDAwCisubG9uZyAweGQ0YmU2YTZhLCAweDZhMDAwMDAwLCAweDhkNDZjYmNiLCAweGNiMDAwMDAwCisubG9uZyAweDY3ZDliZWJlLCAweGJlMDAwMDAwLCAweDcyNGIzOTM5LCAweDM5MDAwMDAwCisubG9uZyAweDk0ZGU0YTRhLCAweDRhMDAwMDAwLCAweDk4ZDQ0YzRjLCAweDRjMDAwMDAwCisubG9uZyAweGIwZTg1ODU4LCAweDU4MDAwMDAwLCAweDg1NGFjZmNmLCAweGNmMDAwMDAwCisubG9uZyAweGJiNmJkMGQwLCAweGQwMDAwMDAwLCAweGM1MmFlZmVmLCAweGVmMDAwMDAwCisubG9uZyAweDRmZTVhYWFhLCAweGFhMDAwMDAwLCAweGVkMTZmYmZiLCAweGZiMDAwMDAwCisubG9uZyAweDg2YzU0MzQzLCAweDQzMDAwMDAwLCAweDlhZDc0ZDRkLCAweDRkMDAwMDAwCisubG9uZyAweDY2NTUzMzMzLCAweDMzMDAwMDAwLCAweDExOTQ4NTg1LCAweDg1MDAwMDAwCisubG9uZyAweDhhY2Y0NTQ1LCAweDQ1MDAwMDAwLCAweGU5MTBmOWY5LCAweGY5MDAwMDAwCisubG9uZyAweDA0MDYwMjAyLCAweDAyMDAwMDAwLCAweGZlODE3ZjdmLCAweDdmMDAwMDAwCisubG9uZyAweGEwZjA1MDUwLCAweDUwMDAwMDAwLCAweDc4NDQzYzNjLCAweDNjMDAwMDAwCisubG9uZyAweDI1YmE5ZjlmLCAweDlmMDAwMDAwLCAweDRiZTNhOGE4LCAweGE4MDAwMDAwCisubG9uZyAweGEyZjM1MTUxLCAweDUxMDAwMDAwLCAweDVkZmVhM2EzLCAweGEzMDAwMDAwCisubG9uZyAweDgwYzA0MDQwLCAweDQwMDAwMDAwLCAweDA1OGE4ZjhmLCAweDhmMDAwMDAwCisubG9uZyAweDNmYWQ5MjkyLCAweDkyMDAwMDAwLCAweDIxYmM5ZDlkLCAweDlkMDAwMDAwCisubG9uZyAweDcwNDgzODM4LCAweDM4MDAwMDAwLCAweGYxMDRmNWY1LCAweGY1MDAwMDAwCisubG9uZyAweDYzZGZiY2JjLCAweGJjMDAwMDAwLCAweDc3YzFiNmI2LCAweGI2MDAwMDAwCisubG9uZyAweGFmNzVkYWRhLCAweGRhMDAwMDAwLCAweDQyNjMyMTIxLCAweDIxMDAwMDAwCisubG9uZyAweDIwMzAxMDEwLCAweDEwMDAwMDAwLCAweGU1MWFmZmZmLCAweGZmMDAwMDAwCisubG9uZyAweGZkMGVmM2YzLCAweGYzMDAwMDAwLCAweGJmNmRkMmQyLCAweGQyMDAwMDAwCisubG9uZyAweDgxNGNjZGNkLCAweGNkMDAwMDAwLCAweDE4MTQwYzBjLCAweDBjMDAwMDAwCisubG9uZyAweDI2MzUxMzEzLCAweDEzMDAwMDAwLCAweGMzMmZlY2VjLCAweGVjMDAwMDAwCisubG9uZyAweGJlZTE1ZjVmLCAweDVmMDAwMDAwLCAweDM1YTI5Nzk3LCAweDk3MDAwMDAwCisubG9uZyAweDg4Y2M0NDQ0LCAweDQ0MDAwMDAwLCAweDJlMzkxNzE3LCAweDE3MDAwMDAwCisubG9uZyAweDkzNTdjNGM0LCAweGM0MDAwMDAwLCAweDU1ZjJhN2E3LCAweGE3MDAwMDAwCisubG9uZyAweGZjODI3ZTdlLCAweDdlMDAwMDAwLCAweDdhNDczZDNkLCAweDNkMDAwMDAwCisubG9uZyAweGM4YWM2NDY0LCAweDY0MDAwMDAwLCAweGJhZTc1ZDVkLCAweDVkMDAwMDAwCisubG9uZyAweDMyMmIxOTE5LCAweDE5MDAwMDAwLCAweGU2OTU3MzczLCAweDczMDAwMDAwCisubG9uZyAweGMwYTA2MDYwLCAweDYwMDAwMDAwLCAweDE5OTg4MTgxLCAweDgxMDAwMDAwCisubG9uZyAweDllZDE0ZjRmLCAweDRmMDAwMDAwLCAweGEzN2ZkY2RjLCAweGRjMDAwMDAwCisubG9uZyAweDQ0NjYyMjIyLCAweDIyMDAwMDAwLCAweDU0N2UyYTJhLCAweDJhMDAwMDAwCisubG9uZyAweDNiYWI5MDkwLCAweDkwMDAwMDAwLCAweDBiODM4ODg4LCAweDg4MDAwMDAwCisubG9uZyAweDhjY2E0NjQ2LCAweDQ2MDAwMDAwLCAweGM3MjllZWVlLCAweGVlMDAwMDAwCisubG9uZyAweDZiZDNiOGI4LCAweGI4MDAwMDAwLCAweDI4M2MxNDE0LCAweDE0MDAwMDAwCisubG9uZyAweGE3NzlkZWRlLCAweGRlMDAwMDAwLCAweGJjZTI1ZTVlLCAweDVlMDAwMDAwCisubG9uZyAweDE2MWQwYjBiLCAweDBiMDAwMDAwLCAweGFkNzZkYmRiLCAweGRiMDAwMDAwCisubG9uZyAweGRiM2JlMGUwLCAweGUwMDAwMDAwLCAweDY0NTYzMjMyLCAweDMyMDAwMDAwCisubG9uZyAweDc0NGUzYTNhLCAweDNhMDAwMDAwLCAweDE0MWUwYTBhLCAweDBhMDAwMDAwCisubG9uZyAweDkyZGI0OTQ5LCAweDQ5MDAwMDAwLCAweDBjMGEwNjA2LCAweDA2MDAwMDAwCisubG9uZyAweDQ4NmMyNDI0LCAweDI0MDAwMDAwLCAweGI4ZTQ1YzVjLCAweDVjMDAwMDAwCisubG9uZyAweDlmNWRjMmMyLCAweGMyMDAwMDAwLCAweGJkNmVkM2QzLCAweGQzMDAwMDAwCisubG9uZyAweDQzZWZhY2FjLCAweGFjMDAwMDAwLCAweGM0YTY2MjYyLCAweDYyMDAwMDAwCisubG9uZyAweDM5YTg5MTkxLCAweDkxMDAwMDAwLCAweDMxYTQ5NTk1LCAweDk1MDAwMDAwCisubG9uZyAweGQzMzdlNGU0LCAweGU0MDAwMDAwLCAweGYyOGI3OTc5LCAweDc5MDAwMDAwCisubG9uZyAweGQ1MzJlN2U3LCAweGU3MDAwMDAwLCAweDhiNDNjOGM4LCAweGM4MDAwMDAwCisubG9uZyAweDZlNTkzNzM3LCAweDM3MDAwMDAwLCAweGRhYjc2ZDZkLCAweDZkMDAwMDAwCisubG9uZyAweDAxOGM4ZDhkLCAweDhkMDAwMDAwLCAweGIxNjRkNWQ1LCAweGQ1MDAwMDAwCisubG9uZyAweDljZDI0ZTRlLCAweDRlMDAwMDAwLCAweDQ5ZTBhOWE5LCAweGE5MDAwMDAwCisubG9uZyAweGQ4YjQ2YzZjLCAweDZjMDAwMDAwLCAweGFjZmE1NjU2LCAweDU2MDAwMDAwCisubG9uZyAweGYzMDdmNGY0LCAweGY0MDAwMDAwLCAweGNmMjVlYWVhLCAweGVhMDAwMDAwCisubG9uZyAweGNhYWY2NTY1LCAweDY1MDAwMDAwLCAweGY0OGU3YTdhLCAweDdhMDAwMDAwCisubG9uZyAweDQ3ZTlhZWFlLCAweGFlMDAwMDAwLCAweDEwMTgwODA4LCAweDA4MDAwMDAwCisubG9uZyAweDZmZDViYWJhLCAweGJhMDAwMDAwLCAweGYwODg3ODc4LCAweDc4MDAwMDAwCisubG9uZyAweDRhNmYyNTI1LCAweDI1MDAwMDAwLCAweDVjNzIyZTJlLCAweDJlMDAwMDAwCisubG9uZyAweDM4MjQxYzFjLCAweDFjMDAwMDAwLCAweDU3ZjFhNmE2LCAweGE2MDAwMDAwCisubG9uZyAweDczYzdiNGI0LCAweGI0MDAwMDAwLCAweDk3NTFjNmM2LCAweGM2MDAwMDAwCisubG9uZyAweGNiMjNlOGU4LCAweGU4MDAwMDAwLCAweGExN2NkZGRkLCAweGRkMDAwMDAwCisubG9uZyAweGU4OWM3NDc0LCAweDc0MDAwMDAwLCAweDNlMjExZjFmLCAweDFmMDAwMDAwCisubG9uZyAweDk2ZGQ0YjRiLCAweDRiMDAwMDAwLCAweDYxZGNiZGJkLCAweGJkMDAwMDAwCisubG9uZyAweDBkODY4YjhiLCAweDhiMDAwMDAwLCAweDBmODU4YThhLCAweDhhMDAwMDAwCisubG9uZyAweGUwOTA3MDcwLCAweDcwMDAwMDAwLCAweDdjNDIzZTNlLCAweDNlMDAwMDAwCisubG9uZyAweDcxYzRiNWI1LCAweGI1MDAwMDAwLCAweGNjYWE2NjY2LCAweDY2MDAwMDAwCisubG9uZyAweDkwZDg0ODQ4LCAweDQ4MDAwMDAwLCAweDA2MDUwMzAzLCAweDAzMDAwMDAwCisubG9uZyAweGY3MDFmNmY2LCAweGY2MDAwMDAwLCAweDFjMTIwZTBlLCAweDBlMDAwMDAwCisubG9uZyAweGMyYTM2MTYxLCAweDYxMDAwMDAwLCAweDZhNWYzNTM1LCAweDM1MDAwMDAwCisubG9uZyAweGFlZjk1NzU3LCAweDU3MDAwMDAwLCAweDY5ZDBiOWI5LCAweGI5MDAwMDAwCisubG9uZyAweDE3OTE4Njg2LCAweDg2MDAwMDAwLCAweDk5NThjMWMxLCAweGMxMDAwMDAwCisubG9uZyAweDNhMjcxZDFkLCAweDFkMDAwMDAwLCAweDI3Yjk5ZTllLCAweDllMDAwMDAwCisubG9uZyAweGQ5MzhlMWUxLCAweGUxMDAwMDAwLCAweGViMTNmOGY4LCAweGY4MDAwMDAwCisubG9uZyAweDJiYjM5ODk4LCAweDk4MDAwMDAwLCAweDIyMzMxMTExLCAweDExMDAwMDAwCisubG9uZyAweGQyYmI2OTY5LCAweDY5MDAwMDAwLCAweGE5NzBkOWQ5LCAweGQ5MDAwMDAwCisubG9uZyAweDA3ODk4ZThlLCAweDhlMDAwMDAwLCAweDMzYTc5NDk0LCAweDk0MDAwMDAwCisubG9uZyAweDJkYjY5YjliLCAweDliMDAwMDAwLCAweDNjMjIxZTFlLCAweDFlMDAwMDAwCisubG9uZyAweDE1OTI4Nzg3LCAweDg3MDAwMDAwLCAweGM5MjBlOWU5LCAweGU5MDAwMDAwCisubG9uZyAweDg3NDljZWNlLCAweGNlMDAwMDAwLCAweGFhZmY1NTU1LCAweDU1MDAwMDAwCisubG9uZyAweDUwNzgyODI4LCAweDI4MDAwMDAwLCAweGE1N2FkZmRmLCAweGRmMDAwMDAwCisubG9uZyAweDAzOGY4YzhjLCAweDhjMDAwMDAwLCAweDU5ZjhhMWExLCAweGExMDAwMDAwCisubG9uZyAweDA5ODA4OTg5LCAweDg5MDAwMDAwLCAweDFhMTcwZDBkLCAweDBkMDAwMDAwCisubG9uZyAweDY1ZGFiZmJmLCAweGJmMDAwMDAwLCAweGQ3MzFlNmU2LCAweGU2MDAwMDAwCisubG9uZyAweDg0YzY0MjQyLCAweDQyMDAwMDAwLCAweGQwYjg2ODY4LCAweDY4MDAwMDAwCisubG9uZyAweDgyYzM0MTQxLCAweDQxMDAwMDAwLCAweDI5YjA5OTk5LCAweDk5MDAwMDAwCisubG9uZyAweDVhNzcyZDJkLCAweDJkMDAwMDAwLCAweDFlMTEwZjBmLCAweDBmMDAwMDAwCisubG9uZyAweDdiY2JiMGIwLCAweGIwMDAwMDAwLCAweGE4ZmM1NDU0LCAweDU0MDAwMDAwCisubG9uZyAweDZkZDZiYmJiLCAweGJiMDAwMDAwLCAweDJjM2ExNjE2LCAweDE2MDAwMDAwCisKKy8qIERlY3J5cHRpb24gdGFibGVzICovCisuTHRhYmxlRDA6CisubG9uZyAweDUwYTdmNDUxCisuTHRhYmxlRHMwOgorLmxvbmcgICAgICAgICAgICAgMHgwMDAwMDA1MiwgMHg1MzY1NDE3ZSwgMHgwMDAwMDAwOQorLmxvbmcgMHhjM2E0MTcxYSwgMHgwMDAwMDA2YSwgMHg5NjVlMjczYSwgMHgwMDAwMDBkNQorLmxvbmcgMHhjYjZiYWIzYiwgMHgwMDAwMDAzMCwgMHhmMTQ1OWQxZiwgMHgwMDAwMDAzNgorLmxvbmcgMHhhYjU4ZmFhYywgMHgwMDAwMDBhNSwgMHg5MzAzZTM0YiwgMHgwMDAwMDAzOAorLmxvbmcgMHg1NWZhMzAyMCwgMHgwMDAwMDBiZiwgMHhmNjZkNzZhZCwgMHgwMDAwMDA0MAorLmxvbmcgMHg5MTc2Y2M4OCwgMHgwMDAwMDBhMywgMHgyNTRjMDJmNSwgMHgwMDAwMDA5ZQorLmxvbmcgMHhmY2Q3ZTU0ZiwgMHgwMDAwMDA4MSwgMHhkN2NiMmFjNSwgMHgwMDAwMDBmMworLmxvbmcgMHg4MDQ0MzUyNiwgMHgwMDAwMDBkNywgMHg4ZmEzNjJiNSwgMHgwMDAwMDBmYgorLmxvbmcgMHg0OTVhYjFkZSwgMHgwMDAwMDA3YywgMHg2NzFiYmEyNSwgMHgwMDAwMDBlMworLmxvbmcgMHg5ODBlZWE0NSwgMHgwMDAwMDAzOSwgMHhlMWMwZmU1ZCwgMHgwMDAwMDA4MgorLmxvbmcgMHgwMjc1MmZjMywgMHgwMDAwMDA5YiwgMHgxMmYwNGM4MSwgMHgwMDAwMDAyZgorLmxvbmcgMHhhMzk3NDY4ZCwgMHgwMDAwMDBmZiwgMHhjNmY5ZDM2YiwgMHgwMDAwMDA4NworLmxvbmcgMHhlNzVmOGYwMywgMHgwMDAwMDAzNCwgMHg5NTljOTIxNSwgMHgwMDAwMDA4ZQorLmxvbmcgMHhlYjdhNmRiZiwgMHgwMDAwMDA0MywgMHhkYTU5NTI5NSwgMHgwMDAwMDA0NAorLmxvbmcgMHgyZDgzYmVkNCwgMHgwMDAwMDBjNCwgMHhkMzIxNzQ1OCwgMHgwMDAwMDBkZQorLmxvbmcgMHgyOTY5ZTA0OSwgMHgwMDAwMDBlOSwgMHg0NGM4Yzk4ZSwgMHgwMDAwMDBjYgorLmxvbmcgMHg2YTg5YzI3NSwgMHgwMDAwMDA1NCwgMHg3ODc5OGVmNCwgMHgwMDAwMDA3YgorLmxvbmcgMHg2YjNlNTg5OSwgMHgwMDAwMDA5NCwgMHhkZDcxYjkyNywgMHgwMDAwMDAzMgorLmxvbmcgMHhiNjRmZTFiZSwgMHgwMDAwMDBhNiwgMHgxN2FkODhmMCwgMHgwMDAwMDBjMgorLmxvbmcgMHg2NmFjMjBjOSwgMHgwMDAwMDAyMywgMHhiNDNhY2U3ZCwgMHgwMDAwMDAzZAorLmxvbmcgMHgxODRhZGY2MywgMHgwMDAwMDBlZSwgMHg4MjMxMWFlNSwgMHgwMDAwMDA0YworLmxvbmcgMHg2MDMzNTE5NywgMHgwMDAwMDA5NSwgMHg0NTdmNTM2MiwgMHgwMDAwMDAwYgorLmxvbmcgMHhlMDc3NjRiMSwgMHgwMDAwMDA0MiwgMHg4NGFlNmJiYiwgMHgwMDAwMDBmYQorLmxvbmcgMHgxY2EwODFmZSwgMHgwMDAwMDBjMywgMHg5NDJiMDhmOSwgMHgwMDAwMDA0ZQorLmxvbmcgMHg1ODY4NDg3MCwgMHgwMDAwMDAwOCwgMHgxOWZkNDU4ZiwgMHgwMDAwMDAyZQorLmxvbmcgMHg4NzZjZGU5NCwgMHgwMDAwMDBhMSwgMHhiN2Y4N2I1MiwgMHgwMDAwMDA2NgorLmxvbmcgMHgyM2QzNzNhYiwgMHgwMDAwMDAyOCwgMHhlMjAyNGI3MiwgMHgwMDAwMDBkOQorLmxvbmcgMHg1NzhmMWZlMywgMHgwMDAwMDAyNCwgMHgyYWFiNTU2NiwgMHgwMDAwMDBiMgorLmxvbmcgMHgwNzI4ZWJiMiwgMHgwMDAwMDA3NiwgMHgwM2MyYjUyZiwgMHgwMDAwMDA1YgorLmxvbmcgMHg5YTdiYzU4NiwgMHgwMDAwMDBhMiwgMHhhNTA4MzdkMywgMHgwMDAwMDA0OQorLmxvbmcgMHhmMjg3MjgzMCwgMHgwMDAwMDA2ZCwgMHhiMmE1YmYyMywgMHgwMDAwMDA4YgorLmxvbmcgMHhiYTZhMDMwMiwgMHgwMDAwMDBkMSwgMHg1YzgyMTZlZCwgMHgwMDAwMDAyNQorLmxvbmcgMHgyYjFjY2Y4YSwgMHgwMDAwMDA3MiwgMHg5MmI0NzlhNywgMHgwMDAwMDBmOAorLmxvbmcgMHhmMGYyMDdmMywgMHgwMDAwMDBmNiwgMHhhMWUyNjk0ZSwgMHgwMDAwMDA2NAorLmxvbmcgMHhjZGY0ZGE2NSwgMHgwMDAwMDA4NiwgMHhkNWJlMDUwNiwgMHgwMDAwMDA2OAorLmxvbmcgMHgxZjYyMzRkMSwgMHgwMDAwMDA5OCwgMHg4YWZlYTZjNCwgMHgwMDAwMDAxNgorLmxvbmcgMHg5ZDUzMmUzNCwgMHgwMDAwMDBkNCwgMHhhMDU1ZjNhMiwgMHgwMDAwMDBhNAorLmxvbmcgMHgzMmUxOGEwNSwgMHgwMDAwMDA1YywgMHg3NWViZjZhNCwgMHgwMDAwMDBjYworLmxvbmcgMHgzOWVjODMwYiwgMHgwMDAwMDA1ZCwgMHhhYWVmNjA0MCwgMHgwMDAwMDA2NQorLmxvbmcgMHgwNjlmNzE1ZSwgMHgwMDAwMDBiNiwgMHg1MTEwNmViZCwgMHgwMDAwMDA5MgorLmxvbmcgMHhmOThhMjEzZSwgMHgwMDAwMDA2YywgMHgzZDA2ZGQ5NiwgMHgwMDAwMDA3MAorLmxvbmcgMHhhZTA1M2VkZCwgMHgwMDAwMDA0OCwgMHg0NmJkZTY0ZCwgMHgwMDAwMDA1MAorLmxvbmcgMHhiNThkNTQ5MSwgMHgwMDAwMDBmZCwgMHgwNTVkYzQ3MSwgMHgwMDAwMDBlZAorLmxvbmcgMHg2ZmQ0MDYwNCwgMHgwMDAwMDBiOSwgMHhmZjE1NTA2MCwgMHgwMDAwMDBkYQorLmxvbmcgMHgyNGZiOTgxOSwgMHgwMDAwMDA1ZSwgMHg5N2U5YmRkNiwgMHgwMDAwMDAxNQorLmxvbmcgMHhjYzQzNDA4OSwgMHgwMDAwMDA0NiwgMHg3NzllZDk2NywgMHgwMDAwMDA1NworLmxvbmcgMHhiZDQyZThiMCwgMHgwMDAwMDBhNywgMHg4ODhiODkwNywgMHgwMDAwMDA4ZAorLmxvbmcgMHgzODViMTllNywgMHgwMDAwMDA5ZCwgMHhkYmVlYzg3OSwgMHgwMDAwMDA4NAorLmxvbmcgMHg0NzBhN2NhMSwgMHgwMDAwMDA5MCwgMHhlOTBmNDI3YywgMHgwMDAwMDBkOAorLmxvbmcgMHhjOTFlODRmOCwgMHgwMDAwMDBhYiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorLmxvbmcgMHg4Mzg2ODAwOSwgMHgwMDAwMDA4YywgMHg0OGVkMmIzMiwgMHgwMDAwMDBiYworLmxvbmcgMHhhYzcwMTExZSwgMHgwMDAwMDBkMywgMHg0ZTcyNWE2YywgMHgwMDAwMDAwYQorLmxvbmcgMHhmYmZmMGVmZCwgMHgwMDAwMDBmNywgMHg1NjM4ODUwZiwgMHgwMDAwMDBlNAorLmxvbmcgMHgxZWQ1YWUzZCwgMHgwMDAwMDA1OCwgMHgyNzM5MmQzNiwgMHgwMDAwMDAwNQorLmxvbmcgMHg2NGQ5MGYwYSwgMHgwMDAwMDBiOCwgMHgyMWE2NWM2OCwgMHgwMDAwMDBiMworLmxvbmcgMHhkMTU0NWI5YiwgMHgwMDAwMDA0NSwgMHgzYTJlMzYyNCwgMHgwMDAwMDAwNgorLmxvbmcgMHhiMTY3MGEwYywgMHgwMDAwMDBkMCwgMHgwZmU3NTc5MywgMHgwMDAwMDAyYworLmxvbmcgMHhkMjk2ZWViNCwgMHgwMDAwMDAxZSwgMHg5ZTkxOWIxYiwgMHgwMDAwMDA4ZgorLmxvbmcgMHg0ZmM1YzA4MCwgMHgwMDAwMDBjYSwgMHhhMjIwZGM2MSwgMHgwMDAwMDAzZgorLmxvbmcgMHg2OTRiNzc1YSwgMHgwMDAwMDAwZiwgMHgxNjFhMTIxYywgMHgwMDAwMDAwMgorLmxvbmcgMHgwYWJhOTNlMiwgMHgwMDAwMDBjMSwgMHhlNTJhYTBjMCwgMHgwMDAwMDBhZgorLmxvbmcgMHg0M2UwMjIzYywgMHgwMDAwMDBiZCwgMHgxZDE3MWIxMiwgMHgwMDAwMDAwMworLmxvbmcgMHgwYjBkMDkwZSwgMHgwMDAwMDAwMSwgMHhhZGM3OGJmMiwgMHgwMDAwMDAxMworLmxvbmcgMHhiOWE4YjYyZCwgMHgwMDAwMDA4YSwgMHhjOGE5MWUxNCwgMHgwMDAwMDA2YgorLmxvbmcgMHg4NTE5ZjE1NywgMHgwMDAwMDAzYSwgMHg0YzA3NzVhZiwgMHgwMDAwMDA5MQorLmxvbmcgMHhiYmRkOTllZSwgMHgwMDAwMDAxMSwgMHhmZDYwN2ZhMywgMHgwMDAwMDA0MQorLmxvbmcgMHg5ZjI2MDFmNywgMHgwMDAwMDA0ZiwgMHhiY2Y1NzI1YywgMHgwMDAwMDA2NworLmxvbmcgMHhjNTNiNjY0NCwgMHgwMDAwMDBkYywgMHgzNDdlZmI1YiwgMHgwMDAwMDBlYQorLmxvbmcgMHg3NjI5NDM4YiwgMHgwMDAwMDA5NywgMHhkY2M2MjNjYiwgMHgwMDAwMDBmMgorLmxvbmcgMHg2OGZjZWRiNiwgMHgwMDAwMDBjZiwgMHg2M2YxZTRiOCwgMHgwMDAwMDBjZQorLmxvbmcgMHhjYWRjMzFkNywgMHgwMDAwMDBmMCwgMHgxMDg1NjM0MiwgMHgwMDAwMDBiNAorLmxvbmcgMHg0MDIyOTcxMywgMHgwMDAwMDBlNiwgMHgyMDExYzY4NCwgMHgwMDAwMDA3MworLmxvbmcgMHg3ZDI0NGE4NSwgMHgwMDAwMDA5NiwgMHhmODNkYmJkMiwgMHgwMDAwMDBhYworLmxvbmcgMHgxMTMyZjlhZSwgMHgwMDAwMDA3NCwgMHg2ZGExMjljNywgMHgwMDAwMDAyMgorLmxvbmcgMHg0YjJmOWUxZCwgMHgwMDAwMDBlNywgMHhmMzMwYjJkYywgMHgwMDAwMDBhZAorLmxvbmcgMHhlYzUyODYwZCwgMHgwMDAwMDAzNSwgMHhkMGUzYzE3NywgMHgwMDAwMDA4NQorLmxvbmcgMHg2YzE2YjMyYiwgMHgwMDAwMDBlMiwgMHg5OWI5NzBhOSwgMHgwMDAwMDBmOQorLmxvbmcgMHhmYTQ4OTQxMSwgMHgwMDAwMDAzNywgMHgyMjY0ZTk0NywgMHgwMDAwMDBlOAorLmxvbmcgMHhjNDhjZmNhOCwgMHgwMDAwMDAxYywgMHgxYTNmZjBhMCwgMHgwMDAwMDA3NQorLmxvbmcgMHhkODJjN2Q1NiwgMHgwMDAwMDBkZiwgMHhlZjkwMzMyMiwgMHgwMDAwMDA2ZQorLmxvbmcgMHhjNzRlNDk4NywgMHgwMDAwMDA0NywgMHhjMWQxMzhkOSwgMHgwMDAwMDBmMQorLmxvbmcgMHhmZWEyY2E4YywgMHgwMDAwMDAxYSwgMHgzNjBiZDQ5OCwgMHgwMDAwMDA3MQorLmxvbmcgMHhjZjgxZjVhNiwgMHgwMDAwMDAxZCwgMHgyOGRlN2FhNSwgMHgwMDAwMDAyOQorLmxvbmcgMHgyNjhlYjdkYSwgMHgwMDAwMDBjNSwgMHhhNGJmYWQzZiwgMHgwMDAwMDA4OQorLmxvbmcgMHhlNDlkM2EyYywgMHgwMDAwMDA2ZiwgMHgwZDkyNzg1MCwgMHgwMDAwMDBiNworLmxvbmcgMHg5YmNjNWY2YSwgMHgwMDAwMDA2MiwgMHg2MjQ2N2U1NCwgMHgwMDAwMDAwZQorLmxvbmcgMHhjMjEzOGRmNiwgMHgwMDAwMDBhYSwgMHhlOGI4ZDg5MCwgMHgwMDAwMDAxOAorLmxvbmcgMHg1ZWY3MzkyZSwgMHgwMDAwMDBiZSwgMHhmNWFmYzM4MiwgMHgwMDAwMDAxYgorLmxvbmcgMHhiZTgwNWQ5ZiwgMHgwMDAwMDBmYywgMHg3YzkzZDA2OSwgMHgwMDAwMDA1NgorLmxvbmcgMHhhOTJkZDU2ZiwgMHgwMDAwMDAzZSwgMHhiMzEyMjVjZiwgMHgwMDAwMDA0YgorLmxvbmcgMHgzYjk5YWNjOCwgMHgwMDAwMDBjNiwgMHhhNzdkMTgxMCwgMHgwMDAwMDBkMgorLmxvbmcgMHg2ZTYzOWNlOCwgMHgwMDAwMDA3OSwgMHg3YmJiM2JkYiwgMHgwMDAwMDAyMAorLmxvbmcgMHgwOTc4MjZjZCwgMHgwMDAwMDA5YSwgMHhmNDE4NTk2ZSwgMHgwMDAwMDBkYgorLmxvbmcgMHgwMWI3OWFlYywgMHgwMDAwMDBjMCwgMHhhODlhNGY4MywgMHgwMDAwMDBmZQorLmxvbmcgMHg2NTZlOTVlNiwgMHgwMDAwMDA3OCwgMHg3ZWU2ZmZhYSwgMHgwMDAwMDBjZAorLmxvbmcgMHgwOGNmYmMyMSwgMHgwMDAwMDA1YSwgMHhlNmU4MTVlZiwgMHgwMDAwMDBmNAorLmxvbmcgMHhkOTliZTdiYSwgMHgwMDAwMDAxZiwgMHhjZTM2NmY0YSwgMHgwMDAwMDBkZAorLmxvbmcgMHhkNDA5OWZlYSwgMHgwMDAwMDBhOCwgMHhkNjdjYjAyOSwgMHgwMDAwMDAzMworLmxvbmcgMHhhZmIyYTQzMSwgMHgwMDAwMDA4OCwgMHgzMTIzM2YyYSwgMHgwMDAwMDAwNworLmxvbmcgMHgzMDk0YTVjNiwgMHgwMDAwMDBjNywgMHhjMDY2YTIzNSwgMHgwMDAwMDAzMQorLmxvbmcgMHgzN2JjNGU3NCwgMHgwMDAwMDBiMSwgMHhhNmNhODJmYywgMHgwMDAwMDAxMgorLmxvbmcgMHhiMGQwOTBlMCwgMHgwMDAwMDAxMCwgMHgxNWQ4YTczMywgMHgwMDAwMDA1OQorLmxvbmcgMHg0YTk4MDRmMSwgMHgwMDAwMDAyNywgMHhmN2RhZWM0MSwgMHgwMDAwMDA4MAorLmxvbmcgMHgwZTUwY2Q3ZiwgMHgwMDAwMDBlYywgMHgyZmY2OTExNywgMHgwMDAwMDA1ZgorLmxvbmcgMHg4ZGQ2NGQ3NiwgMHgwMDAwMDA2MCwgMHg0ZGIwZWY0MywgMHgwMDAwMDA1MQorLmxvbmcgMHg1NDRkYWFjYywgMHgwMDAwMDA3ZiwgMHhkZjA0OTZlNCwgMHgwMDAwMDBhOQorLmxvbmcgMHhlM2I1ZDE5ZSwgMHgwMDAwMDAxOSwgMHgxYjg4NmE0YywgMHgwMDAwMDBiNQorLmxvbmcgMHhiODFmMmNjMSwgMHgwMDAwMDA0YSwgMHg3ZjUxNjU0NiwgMHgwMDAwMDAwZAorLmxvbmcgMHgwNGVhNWU5ZCwgMHgwMDAwMDAyZCwgMHg1ZDM1OGMwMSwgMHgwMDAwMDBlNQorLmxvbmcgMHg3Mzc0ODdmYSwgMHgwMDAwMDA3YSwgMHgyZTQxMGJmYiwgMHgwMDAwMDA5ZgorLmxvbmcgMHg1YTFkNjdiMywgMHgwMDAwMDA5MywgMHg1MmQyZGI5MiwgMHgwMDAwMDBjOQorLmxvbmcgMHgzMzU2MTBlOSwgMHgwMDAwMDA5YywgMHgxMzQ3ZDY2ZCwgMHgwMDAwMDBlZgorLmxvbmcgMHg4YzYxZDc5YSwgMHgwMDAwMDBhMCwgMHg3YTBjYTEzNywgMHgwMDAwMDBlMAorLmxvbmcgMHg4ZTE0Zjg1OSwgMHgwMDAwMDAzYiwgMHg4OTNjMTNlYiwgMHgwMDAwMDA0ZAorLmxvbmcgMHhlZTI3YTljZSwgMHgwMDAwMDBhZSwgMHgzNWM5NjFiNywgMHgwMDAwMDAyYQorLmxvbmcgMHhlZGU1MWNlMSwgMHgwMDAwMDBmNSwgMHgzY2IxNDc3YSwgMHgwMDAwMDBiMAorLmxvbmcgMHg1OWRmZDI5YywgMHgwMDAwMDBjOCwgMHgzZjczZjI1NSwgMHgwMDAwMDBlYgorLmxvbmcgMHg3OWNlMTQxOCwgMHgwMDAwMDBiYiwgMHhiZjM3Yzc3MywgMHgwMDAwMDAzYworLmxvbmcgMHhlYWNkZjc1MywgMHgwMDAwMDA4MywgMHg1YmFhZmQ1ZiwgMHgwMDAwMDA1MworLmxvbmcgMHgxNDZmM2RkZiwgMHgwMDAwMDA5OSwgMHg4NmRiNDQ3OCwgMHgwMDAwMDA2MQorLmxvbmcgMHg4MWYzYWZjYSwgMHgwMDAwMDAxNywgMHgzZWM0NjhiOSwgMHgwMDAwMDAyYgorLmxvbmcgMHgyYzM0MjQzOCwgMHgwMDAwMDAwNCwgMHg1ZjQwYTNjMiwgMHgwMDAwMDA3ZQorLmxvbmcgMHg3MmMzMWQxNiwgMHgwMDAwMDBiYSwgMHgwYzI1ZTJiYywgMHgwMDAwMDA3NworLmxvbmcgMHg4YjQ5M2MyOCwgMHgwMDAwMDBkNiwgMHg0MTk1MGRmZiwgMHgwMDAwMDAyNgorLmxvbmcgMHg3MTAxYTgzOSwgMHgwMDAwMDBlMSwgMHhkZWIzMGMwOCwgMHgwMDAwMDA2OQorLmxvbmcgMHg5Y2U0YjRkOCwgMHgwMDAwMDAxNCwgMHg5MGMxNTY2NCwgMHgwMDAwMDA2MworLmxvbmcgMHg2MTg0Y2I3YiwgMHgwMDAwMDA1NSwgMHg3MGI2MzJkNSwgMHgwMDAwMDAyMQorLmxvbmcgMHg3NDVjNmM0OCwgMHgwMDAwMDAwYywgMHg0MjU3YjhkMCwgMHgwMDAwMDA3ZAorLkx0YWJsZUQxOgorLmxvbmcgMHhhN2Y0NTE1MAorLkx0YWJsZURzMToKKy5sb25nICAgICAgICAgICAgIDB4MDAwMDUyMDAsIDB4NjU0MTdlNTMsIDB4MDAwMDA5MDAKKy5sb25nIDB4YTQxNzFhYzMsIDB4MDAwMDZhMDAsIDB4NWUyNzNhOTYsIDB4MDAwMGQ1MDAKKy5sb25nIDB4NmJhYjNiY2IsIDB4MDAwMDMwMDAsIDB4NDU5ZDFmZjEsIDB4MDAwMDM2MDAKKy5sb25nIDB4NThmYWFjYWIsIDB4MDAwMGE1MDAsIDB4MDNlMzRiOTMsIDB4MDAwMDM4MDAKKy5sb25nIDB4ZmEzMDIwNTUsIDB4MDAwMGJmMDAsIDB4NmQ3NmFkZjYsIDB4MDAwMDQwMDAKKy5sb25nIDB4NzZjYzg4OTEsIDB4MDAwMGEzMDAsIDB4NGMwMmY1MjUsIDB4MDAwMDllMDAKKy5sb25nIDB4ZDdlNTRmZmMsIDB4MDAwMDgxMDAsIDB4Y2IyYWM1ZDcsIDB4MDAwMGYzMDAKKy5sb25nIDB4NDQzNTI2ODAsIDB4MDAwMGQ3MDAsIDB4YTM2MmI1OGYsIDB4MDAwMGZiMDAKKy5sb25nIDB4NWFiMWRlNDksIDB4MDAwMDdjMDAsIDB4MWJiYTI1NjcsIDB4MDAwMGUzMDAKKy5sb25nIDB4MGVlYTQ1OTgsIDB4MDAwMDM5MDAsIDB4YzBmZTVkZTEsIDB4MDAwMDgyMDAKKy5sb25nIDB4NzUyZmMzMDIsIDB4MDAwMDliMDAsIDB4ZjA0YzgxMTIsIDB4MDAwMDJmMDAKKy5sb25nIDB4OTc0NjhkYTMsIDB4MDAwMGZmMDAsIDB4ZjlkMzZiYzYsIDB4MDAwMDg3MDAKKy5sb25nIDB4NWY4ZjAzZTcsIDB4MDAwMDM0MDAsIDB4OWM5MjE1OTUsIDB4MDAwMDhlMDAKKy5sb25nIDB4N2E2ZGJmZWIsIDB4MDAwMDQzMDAsIDB4NTk1Mjk1ZGEsIDB4MDAwMDQ0MDAKKy5sb25nIDB4ODNiZWQ0MmQsIDB4MDAwMGM0MDAsIDB4MjE3NDU4ZDMsIDB4MDAwMGRlMDAKKy5sb25nIDB4NjllMDQ5MjksIDB4MDAwMGU5MDAsIDB4YzhjOThlNDQsIDB4MDAwMGNiMDAKKy5sb25nIDB4ODljMjc1NmEsIDB4MDAwMDU0MDAsIDB4Nzk4ZWY0NzgsIDB4MDAwMDdiMDAKKy5sb25nIDB4M2U1ODk5NmIsIDB4MDAwMDk0MDAsIDB4NzFiOTI3ZGQsIDB4MDAwMDMyMDAKKy5sb25nIDB4NGZlMWJlYjYsIDB4MDAwMGE2MDAsIDB4YWQ4OGYwMTcsIDB4MDAwMGMyMDAKKy5sb25nIDB4YWMyMGM5NjYsIDB4MDAwMDIzMDAsIDB4M2FjZTdkYjQsIDB4MDAwMDNkMDAKKy5sb25nIDB4NGFkZjYzMTgsIDB4MDAwMGVlMDAsIDB4MzExYWU1ODIsIDB4MDAwMDRjMDAKKy5sb25nIDB4MzM1MTk3NjAsIDB4MDAwMDk1MDAsIDB4N2Y1MzYyNDUsIDB4MDAwMDBiMDAKKy5sb25nIDB4Nzc2NGIxZTAsIDB4MDAwMDQyMDAsIDB4YWU2YmJiODQsIDB4MDAwMGZhMDAKKy5sb25nIDB4YTA4MWZlMWMsIDB4MDAwMGMzMDAsIDB4MmIwOGY5OTQsIDB4MDAwMDRlMDAKKy5sb25nIDB4Njg0ODcwNTgsIDB4MDAwMDA4MDAsIDB4ZmQ0NThmMTksIDB4MDAwMDJlMDAKKy5sb25nIDB4NmNkZTk0ODcsIDB4MDAwMGExMDAsIDB4Zjg3YjUyYjcsIDB4MDAwMDY2MDAKKy5sb25nIDB4ZDM3M2FiMjMsIDB4MDAwMDI4MDAsIDB4MDI0YjcyZTIsIDB4MDAwMGQ5MDAKKy5sb25nIDB4OGYxZmUzNTcsIDB4MDAwMDI0MDAsIDB4YWI1NTY2MmEsIDB4MDAwMGIyMDAKKy5sb25nIDB4MjhlYmIyMDcsIDB4MDAwMDc2MDAsIDB4YzJiNTJmMDMsIDB4MDAwMDViMDAKKy5sb25nIDB4N2JjNTg2OWEsIDB4MDAwMGEyMDAsIDB4MDgzN2QzYTUsIDB4MDAwMDQ5MDAKKy5sb25nIDB4ODcyODMwZjIsIDB4MDAwMDZkMDAsIDB4YTViZjIzYjIsIDB4MDAwMDhiMDAKKy5sb25nIDB4NmEwMzAyYmEsIDB4MDAwMGQxMDAsIDB4ODIxNmVkNWMsIDB4MDAwMDI1MDAKKy5sb25nIDB4MWNjZjhhMmIsIDB4MDAwMDcyMDAsIDB4YjQ3OWE3OTIsIDB4MDAwMGY4MDAKKy5sb25nIDB4ZjIwN2YzZjAsIDB4MDAwMGY2MDAsIDB4ZTI2OTRlYTEsIDB4MDAwMDY0MDAKKy5sb25nIDB4ZjRkYTY1Y2QsIDB4MDAwMDg2MDAsIDB4YmUwNTA2ZDUsIDB4MDAwMDY4MDAKKy5sb25nIDB4NjIzNGQxMWYsIDB4MDAwMDk4MDAsIDB4ZmVhNmM0OGEsIDB4MDAwMDE2MDAKKy5sb25nIDB4NTMyZTM0OWQsIDB4MDAwMGQ0MDAsIDB4NTVmM2EyYTAsIDB4MDAwMGE0MDAKKy5sb25nIDB4ZTE4YTA1MzIsIDB4MDAwMDVjMDAsIDB4ZWJmNmE0NzUsIDB4MDAwMGNjMDAKKy5sb25nIDB4ZWM4MzBiMzksIDB4MDAwMDVkMDAsIDB4ZWY2MDQwYWEsIDB4MDAwMDY1MDAKKy5sb25nIDB4OWY3MTVlMDYsIDB4MDAwMGI2MDAsIDB4MTA2ZWJkNTEsIDB4MDAwMDkyMDAKKy5sb25nIDB4OGEyMTNlZjksIDB4MDAwMDZjMDAsIDB4MDZkZDk2M2QsIDB4MDAwMDcwMDAKKy5sb25nIDB4MDUzZWRkYWUsIDB4MDAwMDQ4MDAsIDB4YmRlNjRkNDYsIDB4MDAwMDUwMDAKKy5sb25nIDB4OGQ1NDkxYjUsIDB4MDAwMGZkMDAsIDB4NWRjNDcxMDUsIDB4MDAwMGVkMDAKKy5sb25nIDB4ZDQwNjA0NmYsIDB4MDAwMGI5MDAsIDB4MTU1MDYwZmYsIDB4MDAwMGRhMDAKKy5sb25nIDB4ZmI5ODE5MjQsIDB4MDAwMDVlMDAsIDB4ZTliZGQ2OTcsIDB4MDAwMDE1MDAKKy5sb25nIDB4NDM0MDg5Y2MsIDB4MDAwMDQ2MDAsIDB4OWVkOTY3NzcsIDB4MDAwMDU3MDAKKy5sb25nIDB4NDJlOGIwYmQsIDB4MDAwMGE3MDAsIDB4OGI4OTA3ODgsIDB4MDAwMDhkMDAKKy5sb25nIDB4NWIxOWU3MzgsIDB4MDAwMDlkMDAsIDB4ZWVjODc5ZGIsIDB4MDAwMDg0MDAKKy5sb25nIDB4MGE3Y2ExNDcsIDB4MDAwMDkwMDAsIDB4MGY0MjdjZTksIDB4MDAwMGQ4MDAKKy5sb25nIDB4MWU4NGY4YzksIDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKy5sb25nIDB4ODY4MDA5ODMsIDB4MDAwMDhjMDAsIDB4ZWQyYjMyNDgsIDB4MDAwMGJjMDAKKy5sb25nIDB4NzAxMTFlYWMsIDB4MDAwMGQzMDAsIDB4NzI1YTZjNGUsIDB4MDAwMDBhMDAKKy5sb25nIDB4ZmYwZWZkZmIsIDB4MDAwMGY3MDAsIDB4Mzg4NTBmNTYsIDB4MDAwMGU0MDAKKy5sb25nIDB4ZDVhZTNkMWUsIDB4MDAwMDU4MDAsIDB4MzkyZDM2MjcsIDB4MDAwMDA1MDAKKy5sb25nIDB4ZDkwZjBhNjQsIDB4MDAwMGI4MDAsIDB4YTY1YzY4MjEsIDB4MDAwMGIzMDAKKy5sb25nIDB4NTQ1YjliZDEsIDB4MDAwMDQ1MDAsIDB4MmUzNjI0M2EsIDB4MDAwMDA2MDAKKy5sb25nIDB4NjcwYTBjYjEsIDB4MDAwMGQwMDAsIDB4ZTc1NzkzMGYsIDB4MDAwMDJjMDAKKy5sb25nIDB4OTZlZWI0ZDIsIDB4MDAwMDFlMDAsIDB4OTE5YjFiOWUsIDB4MDAwMDhmMDAKKy5sb25nIDB4YzVjMDgwNGYsIDB4MDAwMGNhMDAsIDB4MjBkYzYxYTIsIDB4MDAwMDNmMDAKKy5sb25nIDB4NGI3NzVhNjksIDB4MDAwMDBmMDAsIDB4MWExMjFjMTYsIDB4MDAwMDAyMDAKKy5sb25nIDB4YmE5M2UyMGEsIDB4MDAwMGMxMDAsIDB4MmFhMGMwZTUsIDB4MDAwMGFmMDAKKy5sb25nIDB4ZTAyMjNjNDMsIDB4MDAwMGJkMDAsIDB4MTcxYjEyMWQsIDB4MDAwMDAzMDAKKy5sb25nIDB4MGQwOTBlMGIsIDB4MDAwMDAxMDAsIDB4Yzc4YmYyYWQsIDB4MDAwMDEzMDAKKy5sb25nIDB4YThiNjJkYjksIDB4MDAwMDhhMDAsIDB4YTkxZTE0YzgsIDB4MDAwMDZiMDAKKy5sb25nIDB4MTlmMTU3ODUsIDB4MDAwMDNhMDAsIDB4MDc3NWFmNGMsIDB4MDAwMDkxMDAKKy5sb25nIDB4ZGQ5OWVlYmIsIDB4MDAwMDExMDAsIDB4NjA3ZmEzZmQsIDB4MDAwMDQxMDAKKy5sb25nIDB4MjYwMWY3OWYsIDB4MDAwMDRmMDAsIDB4ZjU3MjVjYmMsIDB4MDAwMDY3MDAKKy5sb25nIDB4M2I2NjQ0YzUsIDB4MDAwMGRjMDAsIDB4N2VmYjViMzQsIDB4MDAwMGVhMDAKKy5sb25nIDB4Mjk0MzhiNzYsIDB4MDAwMDk3MDAsIDB4YzYyM2NiZGMsIDB4MDAwMGYyMDAKKy5sb25nIDB4ZmNlZGI2NjgsIDB4MDAwMGNmMDAsIDB4ZjFlNGI4NjMsIDB4MDAwMGNlMDAKKy5sb25nIDB4ZGMzMWQ3Y2EsIDB4MDAwMGYwMDAsIDB4ODU2MzQyMTAsIDB4MDAwMGI0MDAKKy5sb25nIDB4MjI5NzEzNDAsIDB4MDAwMGU2MDAsIDB4MTFjNjg0MjAsIDB4MDAwMDczMDAKKy5sb25nIDB4MjQ0YTg1N2QsIDB4MDAwMDk2MDAsIDB4M2RiYmQyZjgsIDB4MDAwMGFjMDAKKy5sb25nIDB4MzJmOWFlMTEsIDB4MDAwMDc0MDAsIDB4YTEyOWM3NmQsIDB4MDAwMDIyMDAKKy5sb25nIDB4MmY5ZTFkNGIsIDB4MDAwMGU3MDAsIDB4MzBiMmRjZjMsIDB4MDAwMGFkMDAKKy5sb25nIDB4NTI4NjBkZWMsIDB4MDAwMDM1MDAsIDB4ZTNjMTc3ZDAsIDB4MDAwMDg1MDAKKy5sb25nIDB4MTZiMzJiNmMsIDB4MDAwMGUyMDAsIDB4Yjk3MGE5OTksIDB4MDAwMGY5MDAKKy5sb25nIDB4NDg5NDExZmEsIDB4MDAwMDM3MDAsIDB4NjRlOTQ3MjIsIDB4MDAwMGU4MDAKKy5sb25nIDB4OGNmY2E4YzQsIDB4MDAwMDFjMDAsIDB4M2ZmMGEwMWEsIDB4MDAwMDc1MDAKKy5sb25nIDB4MmM3ZDU2ZDgsIDB4MDAwMGRmMDAsIDB4OTAzMzIyZWYsIDB4MDAwMDZlMDAKKy5sb25nIDB4NGU0OTg3YzcsIDB4MDAwMDQ3MDAsIDB4ZDEzOGQ5YzEsIDB4MDAwMGYxMDAKKy5sb25nIDB4YTJjYThjZmUsIDB4MDAwMDFhMDAsIDB4MGJkNDk4MzYsIDB4MDAwMDcxMDAKKy5sb25nIDB4ODFmNWE2Y2YsIDB4MDAwMDFkMDAsIDB4ZGU3YWE1MjgsIDB4MDAwMDI5MDAKKy5sb25nIDB4OGViN2RhMjYsIDB4MDAwMGM1MDAsIDB4YmZhZDNmYTQsIDB4MDAwMDg5MDAKKy5sb25nIDB4OWQzYTJjZTQsIDB4MDAwMDZmMDAsIDB4OTI3ODUwMGQsIDB4MDAwMGI3MDAKKy5sb25nIDB4Y2M1ZjZhOWIsIDB4MDAwMDYyMDAsIDB4NDY3ZTU0NjIsIDB4MDAwMDBlMDAKKy5sb25nIDB4MTM4ZGY2YzIsIDB4MDAwMGFhMDAsIDB4YjhkODkwZTgsIDB4MDAwMDE4MDAKKy5sb25nIDB4ZjczOTJlNWUsIDB4MDAwMGJlMDAsIDB4YWZjMzgyZjUsIDB4MDAwMDFiMDAKKy5sb25nIDB4ODA1ZDlmYmUsIDB4MDAwMGZjMDAsIDB4OTNkMDY5N2MsIDB4MDAwMDU2MDAKKy5sb25nIDB4MmRkNTZmYTksIDB4MDAwMDNlMDAsIDB4MTIyNWNmYjMsIDB4MDAwMDRiMDAKKy5sb25nIDB4OTlhY2M4M2IsIDB4MDAwMGM2MDAsIDB4N2QxODEwYTcsIDB4MDAwMGQyMDAKKy5sb25nIDB4NjM5Y2U4NmUsIDB4MDAwMDc5MDAsIDB4YmIzYmRiN2IsIDB4MDAwMDIwMDAKKy5sb25nIDB4NzgyNmNkMDksIDB4MDAwMDlhMDAsIDB4MTg1OTZlZjQsIDB4MDAwMGRiMDAKKy5sb25nIDB4Yjc5YWVjMDEsIDB4MDAwMGMwMDAsIDB4OWE0ZjgzYTgsIDB4MDAwMGZlMDAKKy5sb25nIDB4NmU5NWU2NjUsIDB4MDAwMDc4MDAsIDB4ZTZmZmFhN2UsIDB4MDAwMGNkMDAKKy5sb25nIDB4Y2ZiYzIxMDgsIDB4MDAwMDVhMDAsIDB4ZTgxNWVmZTYsIDB4MDAwMGY0MDAKKy5sb25nIDB4OWJlN2JhZDksIDB4MDAwMDFmMDAsIDB4MzY2ZjRhY2UsIDB4MDAwMGRkMDAKKy5sb25nIDB4MDk5ZmVhZDQsIDB4MDAwMGE4MDAsIDB4N2NiMDI5ZDYsIDB4MDAwMDMzMDAKKy5sb25nIDB4YjJhNDMxYWYsIDB4MDAwMDg4MDAsIDB4MjMzZjJhMzEsIDB4MDAwMDA3MDAKKy5sb25nIDB4OTRhNWM2MzAsIDB4MDAwMGM3MDAsIDB4NjZhMjM1YzAsIDB4MDAwMDMxMDAKKy5sb25nIDB4YmM0ZTc0MzcsIDB4MDAwMGIxMDAsIDB4Y2E4MmZjYTYsIDB4MDAwMDEyMDAKKy5sb25nIDB4ZDA5MGUwYjAsIDB4MDAwMDEwMDAsIDB4ZDhhNzMzMTUsIDB4MDAwMDU5MDAKKy5sb25nIDB4OTgwNGYxNGEsIDB4MDAwMDI3MDAsIDB4ZGFlYzQxZjcsIDB4MDAwMDgwMDAKKy5sb25nIDB4NTBjZDdmMGUsIDB4MDAwMGVjMDAsIDB4ZjY5MTE3MmYsIDB4MDAwMDVmMDAKKy5sb25nIDB4ZDY0ZDc2OGQsIDB4MDAwMDYwMDAsIDB4YjBlZjQzNGQsIDB4MDAwMDUxMDAKKy5sb25nIDB4NGRhYWNjNTQsIDB4MDAwMDdmMDAsIDB4MDQ5NmU0ZGYsIDB4MDAwMGE5MDAKKy5sb25nIDB4YjVkMTllZTMsIDB4MDAwMDE5MDAsIDB4ODg2YTRjMWIsIDB4MDAwMGI1MDAKKy5sb25nIDB4MWYyY2MxYjgsIDB4MDAwMDRhMDAsIDB4NTE2NTQ2N2YsIDB4MDAwMDBkMDAKKy5sb25nIDB4ZWE1ZTlkMDQsIDB4MDAwMDJkMDAsIDB4MzU4YzAxNWQsIDB4MDAwMGU1MDAKKy5sb25nIDB4NzQ4N2ZhNzMsIDB4MDAwMDdhMDAsIDB4NDEwYmZiMmUsIDB4MDAwMDlmMDAKKy5sb25nIDB4MWQ2N2IzNWEsIDB4MDAwMDkzMDAsIDB4ZDJkYjkyNTIsIDB4MDAwMGM5MDAKKy5sb25nIDB4NTYxMGU5MzMsIDB4MDAwMDljMDAsIDB4NDdkNjZkMTMsIDB4MDAwMGVmMDAKKy5sb25nIDB4NjFkNzlhOGMsIDB4MDAwMGEwMDAsIDB4MGNhMTM3N2EsIDB4MDAwMGUwMDAKKy5sb25nIDB4MTRmODU5OGUsIDB4MDAwMDNiMDAsIDB4M2MxM2ViODksIDB4MDAwMDRkMDAKKy5sb25nIDB4MjdhOWNlZWUsIDB4MDAwMGFlMDAsIDB4Yzk2MWI3MzUsIDB4MDAwMDJhMDAKKy5sb25nIDB4ZTUxY2UxZWQsIDB4MDAwMGY1MDAsIDB4YjE0NzdhM2MsIDB4MDAwMGIwMDAKKy5sb25nIDB4ZGZkMjljNTksIDB4MDAwMGM4MDAsIDB4NzNmMjU1M2YsIDB4MDAwMGViMDAKKy5sb25nIDB4Y2UxNDE4NzksIDB4MDAwMGJiMDAsIDB4MzdjNzczYmYsIDB4MDAwMDNjMDAKKy5sb25nIDB4Y2RmNzUzZWEsIDB4MDAwMDgzMDAsIDB4YWFmZDVmNWIsIDB4MDAwMDUzMDAKKy5sb25nIDB4NmYzZGRmMTQsIDB4MDAwMDk5MDAsIDB4ZGI0NDc4ODYsIDB4MDAwMDYxMDAKKy5sb25nIDB4ZjNhZmNhODEsIDB4MDAwMDE3MDAsIDB4YzQ2OGI5M2UsIDB4MDAwMDJiMDAKKy5sb25nIDB4MzQyNDM4MmMsIDB4MDAwMDA0MDAsIDB4NDBhM2MyNWYsIDB4MDAwMDdlMDAKKy5sb25nIDB4YzMxZDE2NzIsIDB4MDAwMGJhMDAsIDB4MjVlMmJjMGMsIDB4MDAwMDc3MDAKKy5sb25nIDB4NDkzYzI4OGIsIDB4MDAwMGQ2MDAsIDB4OTUwZGZmNDEsIDB4MDAwMDI2MDAKKy5sb25nIDB4MDFhODM5NzEsIDB4MDAwMGUxMDAsIDB4YjMwYzA4ZGUsIDB4MDAwMDY5MDAKKy5sb25nIDB4ZTRiNGQ4OWMsIDB4MDAwMDE0MDAsIDB4YzE1NjY0OTAsIDB4MDAwMDYzMDAKKy5sb25nIDB4ODRjYjdiNjEsIDB4MDAwMDU1MDAsIDB4YjYzMmQ1NzAsIDB4MDAwMDIxMDAKKy5sb25nIDB4NWM2YzQ4NzQsIDB4MDAwMDBjMDAsIDB4NTdiOGQwNDIsIDB4MDAwMDdkMDAKKy5MdGFibGVEMjoKKy5sb25nIDB4ZjQ1MTUwYTcKKy5MdGFibGVEczI6CisubG9uZyAgICAgICAgICAgICAweDAwNTIwMDAwLCAweDQxN2U1MzY1LCAweDAwMDkwMDAwCisubG9uZyAweDE3MWFjM2E0LCAweDAwNmEwMDAwLCAweDI3M2E5NjVlLCAweDAwZDUwMDAwCisubG9uZyAweGFiM2JjYjZiLCAweDAwMzAwMDAwLCAweDlkMWZmMTQ1LCAweDAwMzYwMDAwCisubG9uZyAweGZhYWNhYjU4LCAweDAwYTUwMDAwLCAweGUzNGI5MzAzLCAweDAwMzgwMDAwCisubG9uZyAweDMwMjA1NWZhLCAweDAwYmYwMDAwLCAweDc2YWRmNjZkLCAweDAwNDAwMDAwCisubG9uZyAweGNjODg5MTc2LCAweDAwYTMwMDAwLCAweDAyZjUyNTRjLCAweDAwOWUwMDAwCisubG9uZyAweGU1NGZmY2Q3LCAweDAwODEwMDAwLCAweDJhYzVkN2NiLCAweDAwZjMwMDAwCisubG9uZyAweDM1MjY4MDQ0LCAweDAwZDcwMDAwLCAweDYyYjU4ZmEzLCAweDAwZmIwMDAwCisubG9uZyAweGIxZGU0OTVhLCAweDAwN2MwMDAwLCAweGJhMjU2NzFiLCAweDAwZTMwMDAwCisubG9uZyAweGVhNDU5ODBlLCAweDAwMzkwMDAwLCAweGZlNWRlMWMwLCAweDAwODIwMDAwCisubG9uZyAweDJmYzMwMjc1LCAweDAwOWIwMDAwLCAweDRjODExMmYwLCAweDAwMmYwMDAwCisubG9uZyAweDQ2OGRhMzk3LCAweDAwZmYwMDAwLCAweGQzNmJjNmY5LCAweDAwODcwMDAwCisubG9uZyAweDhmMDNlNzVmLCAweDAwMzQwMDAwLCAweDkyMTU5NTljLCAweDAwOGUwMDAwCisubG9uZyAweDZkYmZlYjdhLCAweDAwNDMwMDAwLCAweDUyOTVkYTU5LCAweDAwNDQwMDAwCisubG9uZyAweGJlZDQyZDgzLCAweDAwYzQwMDAwLCAweDc0NThkMzIxLCAweDAwZGUwMDAwCisubG9uZyAweGUwNDkyOTY5LCAweDAwZTkwMDAwLCAweGM5OGU0NGM4LCAweDAwY2IwMDAwCisubG9uZyAweGMyNzU2YTg5LCAweDAwNTQwMDAwLCAweDhlZjQ3ODc5LCAweDAwN2IwMDAwCisubG9uZyAweDU4OTk2YjNlLCAweDAwOTQwMDAwLCAweGI5MjdkZDcxLCAweDAwMzIwMDAwCisubG9uZyAweGUxYmViNjRmLCAweDAwYTYwMDAwLCAweDg4ZjAxN2FkLCAweDAwYzIwMDAwCisubG9uZyAweDIwYzk2NmFjLCAweDAwMjMwMDAwLCAweGNlN2RiNDNhLCAweDAwM2QwMDAwCisubG9uZyAweGRmNjMxODRhLCAweDAwZWUwMDAwLCAweDFhZTU4MjMxLCAweDAwNGMwMDAwCisubG9uZyAweDUxOTc2MDMzLCAweDAwOTUwMDAwLCAweDUzNjI0NTdmLCAweDAwMGIwMDAwCisubG9uZyAweDY0YjFlMDc3LCAweDAwNDIwMDAwLCAweDZiYmI4NGFlLCAweDAwZmEwMDAwCisubG9uZyAweDgxZmUxY2EwLCAweDAwYzMwMDAwLCAweDA4Zjk5NDJiLCAweDAwNGUwMDAwCisubG9uZyAweDQ4NzA1ODY4LCAweDAwMDgwMDAwLCAweDQ1OGYxOWZkLCAweDAwMmUwMDAwCisubG9uZyAweGRlOTQ4NzZjLCAweDAwYTEwMDAwLCAweDdiNTJiN2Y4LCAweDAwNjYwMDAwCisubG9uZyAweDczYWIyM2QzLCAweDAwMjgwMDAwLCAweDRiNzJlMjAyLCAweDAwZDkwMDAwCisubG9uZyAweDFmZTM1NzhmLCAweDAwMjQwMDAwLCAweDU1NjYyYWFiLCAweDAwYjIwMDAwCisubG9uZyAweGViYjIwNzI4LCAweDAwNzYwMDAwLCAweGI1MmYwM2MyLCAweDAwNWIwMDAwCisubG9uZyAweGM1ODY5YTdiLCAweDAwYTIwMDAwLCAweDM3ZDNhNTA4LCAweDAwNDkwMDAwCisubG9uZyAweDI4MzBmMjg3LCAweDAwNmQwMDAwLCAweGJmMjNiMmE1LCAweDAwOGIwMDAwCisubG9uZyAweDAzMDJiYTZhLCAweDAwZDEwMDAwLCAweDE2ZWQ1YzgyLCAweDAwMjUwMDAwCisubG9uZyAweGNmOGEyYjFjLCAweDAwNzIwMDAwLCAweDc5YTc5MmI0LCAweDAwZjgwMDAwCisubG9uZyAweDA3ZjNmMGYyLCAweDAwZjYwMDAwLCAweDY5NGVhMWUyLCAweDAwNjQwMDAwCisubG9uZyAweGRhNjVjZGY0LCAweDAwODYwMDAwLCAweDA1MDZkNWJlLCAweDAwNjgwMDAwCisubG9uZyAweDM0ZDExZjYyLCAweDAwOTgwMDAwLCAweGE2YzQ4YWZlLCAweDAwMTYwMDAwCisubG9uZyAweDJlMzQ5ZDUzLCAweDAwZDQwMDAwLCAweGYzYTJhMDU1LCAweDAwYTQwMDAwCisubG9uZyAweDhhMDUzMmUxLCAweDAwNWMwMDAwLCAweGY2YTQ3NWViLCAweDAwY2MwMDAwCisubG9uZyAweDgzMGIzOWVjLCAweDAwNWQwMDAwLCAweDYwNDBhYWVmLCAweDAwNjUwMDAwCisubG9uZyAweDcxNWUwNjlmLCAweDAwYjYwMDAwLCAweDZlYmQ1MTEwLCAweDAwOTIwMDAwCisubG9uZyAweDIxM2VmOThhLCAweDAwNmMwMDAwLCAweGRkOTYzZDA2LCAweDAwNzAwMDAwCisubG9uZyAweDNlZGRhZTA1LCAweDAwNDgwMDAwLCAweGU2NGQ0NmJkLCAweDAwNTAwMDAwCisubG9uZyAweDU0OTFiNThkLCAweDAwZmQwMDAwLCAweGM0NzEwNTVkLCAweDAwZWQwMDAwCisubG9uZyAweDA2MDQ2ZmQ0LCAweDAwYjkwMDAwLCAweDUwNjBmZjE1LCAweDAwZGEwMDAwCisubG9uZyAweDk4MTkyNGZiLCAweDAwNWUwMDAwLCAweGJkZDY5N2U5LCAweDAwMTUwMDAwCisubG9uZyAweDQwODljYzQzLCAweDAwNDYwMDAwLCAweGQ5Njc3NzllLCAweDAwNTcwMDAwCisubG9uZyAweGU4YjBiZDQyLCAweDAwYTcwMDAwLCAweDg5MDc4ODhiLCAweDAwOGQwMDAwCisubG9uZyAweDE5ZTczODViLCAweDAwOWQwMDAwLCAweGM4NzlkYmVlLCAweDAwODQwMDAwCisubG9uZyAweDdjYTE0NzBhLCAweDAwOTAwMDAwLCAweDQyN2NlOTBmLCAweDAwZDgwMDAwCisubG9uZyAweDg0ZjhjOTFlLCAweDAwYWIwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwCisubG9uZyAweDgwMDk4Mzg2LCAweDAwOGMwMDAwLCAweDJiMzI0OGVkLCAweDAwYmMwMDAwCisubG9uZyAweDExMWVhYzcwLCAweDAwZDMwMDAwLCAweDVhNmM0ZTcyLCAweDAwMGEwMDAwCisubG9uZyAweDBlZmRmYmZmLCAweDAwZjcwMDAwLCAweDg1MGY1NjM4LCAweDAwZTQwMDAwCisubG9uZyAweGFlM2QxZWQ1LCAweDAwNTgwMDAwLCAweDJkMzYyNzM5LCAweDAwMDUwMDAwCisubG9uZyAweDBmMGE2NGQ5LCAweDAwYjgwMDAwLCAweDVjNjgyMWE2LCAweDAwYjMwMDAwCisubG9uZyAweDViOWJkMTU0LCAweDAwNDUwMDAwLCAweDM2MjQzYTJlLCAweDAwMDYwMDAwCisubG9uZyAweDBhMGNiMTY3LCAweDAwZDAwMDAwLCAweDU3OTMwZmU3LCAweDAwMmMwMDAwCisubG9uZyAweGVlYjRkMjk2LCAweDAwMWUwMDAwLCAweDliMWI5ZTkxLCAweDAwOGYwMDAwCisubG9uZyAweGMwODA0ZmM1LCAweDAwY2EwMDAwLCAweGRjNjFhMjIwLCAweDAwM2YwMDAwCisubG9uZyAweDc3NWE2OTRiLCAweDAwMGYwMDAwLCAweDEyMWMxNjFhLCAweDAwMDIwMDAwCisubG9uZyAweDkzZTIwYWJhLCAweDAwYzEwMDAwLCAweGEwYzBlNTJhLCAweDAwYWYwMDAwCisubG9uZyAweDIyM2M0M2UwLCAweDAwYmQwMDAwLCAweDFiMTIxZDE3LCAweDAwMDMwMDAwCisubG9uZyAweDA5MGUwYjBkLCAweDAwMDEwMDAwLCAweDhiZjJhZGM3LCAweDAwMTMwMDAwCisubG9uZyAweGI2MmRiOWE4LCAweDAwOGEwMDAwLCAweDFlMTRjOGE5LCAweDAwNmIwMDAwCisubG9uZyAweGYxNTc4NTE5LCAweDAwM2EwMDAwLCAweDc1YWY0YzA3LCAweDAwOTEwMDAwCisubG9uZyAweDk5ZWViYmRkLCAweDAwMTEwMDAwLCAweDdmYTNmZDYwLCAweDAwNDEwMDAwCisubG9uZyAweDAxZjc5ZjI2LCAweDAwNGYwMDAwLCAweDcyNWNiY2Y1LCAweDAwNjcwMDAwCisubG9uZyAweDY2NDRjNTNiLCAweDAwZGMwMDAwLCAweGZiNWIzNDdlLCAweDAwZWEwMDAwCisubG9uZyAweDQzOGI3NjI5LCAweDAwOTcwMDAwLCAweDIzY2JkY2M2LCAweDAwZjIwMDAwCisubG9uZyAweGVkYjY2OGZjLCAweDAwY2YwMDAwLCAweGU0Yjg2M2YxLCAweDAwY2UwMDAwCisubG9uZyAweDMxZDdjYWRjLCAweDAwZjAwMDAwLCAweDYzNDIxMDg1LCAweDAwYjQwMDAwCisubG9uZyAweDk3MTM0MDIyLCAweDAwZTYwMDAwLCAweGM2ODQyMDExLCAweDAwNzMwMDAwCisubG9uZyAweDRhODU3ZDI0LCAweDAwOTYwMDAwLCAweGJiZDJmODNkLCAweDAwYWMwMDAwCisubG9uZyAweGY5YWUxMTMyLCAweDAwNzQwMDAwLCAweDI5Yzc2ZGExLCAweDAwMjIwMDAwCisubG9uZyAweDllMWQ0YjJmLCAweDAwZTcwMDAwLCAweGIyZGNmMzMwLCAweDAwYWQwMDAwCisubG9uZyAweDg2MGRlYzUyLCAweDAwMzUwMDAwLCAweGMxNzdkMGUzLCAweDAwODUwMDAwCisubG9uZyAweGIzMmI2YzE2LCAweDAwZTIwMDAwLCAweDcwYTk5OWI5LCAweDAwZjkwMDAwCisubG9uZyAweDk0MTFmYTQ4LCAweDAwMzcwMDAwLCAweGU5NDcyMjY0LCAweDAwZTgwMDAwCisubG9uZyAweGZjYThjNDhjLCAweDAwMWMwMDAwLCAweGYwYTAxYTNmLCAweDAwNzUwMDAwCisubG9uZyAweDdkNTZkODJjLCAweDAwZGYwMDAwLCAweDMzMjJlZjkwLCAweDAwNmUwMDAwCisubG9uZyAweDQ5ODdjNzRlLCAweDAwNDcwMDAwLCAweDM4ZDljMWQxLCAweDAwZjEwMDAwCisubG9uZyAweGNhOGNmZWEyLCAweDAwMWEwMDAwLCAweGQ0OTgzNjBiLCAweDAwNzEwMDAwCisubG9uZyAweGY1YTZjZjgxLCAweDAwMWQwMDAwLCAweDdhYTUyOGRlLCAweDAwMjkwMDAwCisubG9uZyAweGI3ZGEyNjhlLCAweDAwYzUwMDAwLCAweGFkM2ZhNGJmLCAweDAwODkwMDAwCisubG9uZyAweDNhMmNlNDlkLCAweDAwNmYwMDAwLCAweDc4NTAwZDkyLCAweDAwYjcwMDAwCisubG9uZyAweDVmNmE5YmNjLCAweDAwNjIwMDAwLCAweDdlNTQ2MjQ2LCAweDAwMGUwMDAwCisubG9uZyAweDhkZjZjMjEzLCAweDAwYWEwMDAwLCAweGQ4OTBlOGI4LCAweDAwMTgwMDAwCisubG9uZyAweDM5MmU1ZWY3LCAweDAwYmUwMDAwLCAweGMzODJmNWFmLCAweDAwMWIwMDAwCisubG9uZyAweDVkOWZiZTgwLCAweDAwZmMwMDAwLCAweGQwNjk3YzkzLCAweDAwNTYwMDAwCisubG9uZyAweGQ1NmZhOTJkLCAweDAwM2UwMDAwLCAweDI1Y2ZiMzEyLCAweDAwNGIwMDAwCisubG9uZyAweGFjYzgzYjk5LCAweDAwYzYwMDAwLCAweDE4MTBhNzdkLCAweDAwZDIwMDAwCisubG9uZyAweDljZTg2ZTYzLCAweDAwNzkwMDAwLCAweDNiZGI3YmJiLCAweDAwMjAwMDAwCisubG9uZyAweDI2Y2QwOTc4LCAweDAwOWEwMDAwLCAweDU5NmVmNDE4LCAweDAwZGIwMDAwCisubG9uZyAweDlhZWMwMWI3LCAweDAwYzAwMDAwLCAweDRmODNhODlhLCAweDAwZmUwMDAwCisubG9uZyAweDk1ZTY2NTZlLCAweDAwNzgwMDAwLCAweGZmYWE3ZWU2LCAweDAwY2QwMDAwCisubG9uZyAweGJjMjEwOGNmLCAweDAwNWEwMDAwLCAweDE1ZWZlNmU4LCAweDAwZjQwMDAwCisubG9uZyAweGU3YmFkOTliLCAweDAwMWYwMDAwLCAweDZmNGFjZTM2LCAweDAwZGQwMDAwCisubG9uZyAweDlmZWFkNDA5LCAweDAwYTgwMDAwLCAweGIwMjlkNjdjLCAweDAwMzMwMDAwCisubG9uZyAweGE0MzFhZmIyLCAweDAwODgwMDAwLCAweDNmMmEzMTIzLCAweDAwMDcwMDAwCisubG9uZyAweGE1YzYzMDk0LCAweDAwYzcwMDAwLCAweGEyMzVjMDY2LCAweDAwMzEwMDAwCisubG9uZyAweDRlNzQzN2JjLCAweDAwYjEwMDAwLCAweDgyZmNhNmNhLCAweDAwMTIwMDAwCisubG9uZyAweDkwZTBiMGQwLCAweDAwMTAwMDAwLCAweGE3MzMxNWQ4LCAweDAwNTkwMDAwCisubG9uZyAweDA0ZjE0YTk4LCAweDAwMjcwMDAwLCAweGVjNDFmN2RhLCAweDAwODAwMDAwCisubG9uZyAweGNkN2YwZTUwLCAweDAwZWMwMDAwLCAweDkxMTcyZmY2LCAweDAwNWYwMDAwCisubG9uZyAweDRkNzY4ZGQ2LCAweDAwNjAwMDAwLCAweGVmNDM0ZGIwLCAweDAwNTEwMDAwCisubG9uZyAweGFhY2M1NDRkLCAweDAwN2YwMDAwLCAweDk2ZTRkZjA0LCAweDAwYTkwMDAwCisubG9uZyAweGQxOWVlM2I1LCAweDAwMTkwMDAwLCAweDZhNGMxYjg4LCAweDAwYjUwMDAwCisubG9uZyAweDJjYzFiODFmLCAweDAwNGEwMDAwLCAweDY1NDY3ZjUxLCAweDAwMGQwMDAwCisubG9uZyAweDVlOWQwNGVhLCAweDAwMmQwMDAwLCAweDhjMDE1ZDM1LCAweDAwZTUwMDAwCisubG9uZyAweDg3ZmE3Mzc0LCAweDAwN2EwMDAwLCAweDBiZmIyZTQxLCAweDAwOWYwMDAwCisubG9uZyAweDY3YjM1YTFkLCAweDAwOTMwMDAwLCAweGRiOTI1MmQyLCAweDAwYzkwMDAwCisubG9uZyAweDEwZTkzMzU2LCAweDAwOWMwMDAwLCAweGQ2NmQxMzQ3LCAweDAwZWYwMDAwCisubG9uZyAweGQ3OWE4YzYxLCAweDAwYTAwMDAwLCAweGExMzc3YTBjLCAweDAwZTAwMDAwCisubG9uZyAweGY4NTk4ZTE0LCAweDAwM2IwMDAwLCAweDEzZWI4OTNjLCAweDAwNGQwMDAwCisubG9uZyAweGE5Y2VlZTI3LCAweDAwYWUwMDAwLCAweDYxYjczNWM5LCAweDAwMmEwMDAwCisubG9uZyAweDFjZTFlZGU1LCAweDAwZjUwMDAwLCAweDQ3N2EzY2IxLCAweDAwYjAwMDAwCisubG9uZyAweGQyOWM1OWRmLCAweDAwYzgwMDAwLCAweGYyNTUzZjczLCAweDAwZWIwMDAwCisubG9uZyAweDE0MTg3OWNlLCAweDAwYmIwMDAwLCAweGM3NzNiZjM3LCAweDAwM2MwMDAwCisubG9uZyAweGY3NTNlYWNkLCAweDAwODMwMDAwLCAweGZkNWY1YmFhLCAweDAwNTMwMDAwCisubG9uZyAweDNkZGYxNDZmLCAweDAwOTkwMDAwLCAweDQ0Nzg4NmRiLCAweDAwNjEwMDAwCisubG9uZyAweGFmY2E4MWYzLCAweDAwMTcwMDAwLCAweDY4YjkzZWM0LCAweDAwMmIwMDAwCisubG9uZyAweDI0MzgyYzM0LCAweDAwMDQwMDAwLCAweGEzYzI1ZjQwLCAweDAwN2UwMDAwCisubG9uZyAweDFkMTY3MmMzLCAweDAwYmEwMDAwLCAweGUyYmMwYzI1LCAweDAwNzcwMDAwCisubG9uZyAweDNjMjg4YjQ5LCAweDAwZDYwMDAwLCAweDBkZmY0MTk1LCAweDAwMjYwMDAwCisubG9uZyAweGE4Mzk3MTAxLCAweDAwZTEwMDAwLCAweDBjMDhkZWIzLCAweDAwNjkwMDAwCisubG9uZyAweGI0ZDg5Y2U0LCAweDAwMTQwMDAwLCAweDU2NjQ5MGMxLCAweDAwNjMwMDAwCisubG9uZyAweGNiN2I2MTg0LCAweDAwNTUwMDAwLCAweDMyZDU3MGI2LCAweDAwMjEwMDAwCisubG9uZyAweDZjNDg3NDVjLCAweDAwMGMwMDAwLCAweGI4ZDA0MjU3LCAweDAwN2QwMDAwCisuTHRhYmxlRDM6CisubG9uZyAweDUxNTBhN2Y0CisuTHRhYmxlRHMzOgorLmxvbmcgICAgICAgICAgICAgMHg1MjAwMDAwMCwgMHg3ZTUzNjU0MSwgMHgwOTAwMDAwMAorLmxvbmcgMHgxYWMzYTQxNywgMHg2YTAwMDAwMCwgMHgzYTk2NWUyNywgMHhkNTAwMDAwMAorLmxvbmcgMHgzYmNiNmJhYiwgMHgzMDAwMDAwMCwgMHgxZmYxNDU5ZCwgMHgzNjAwMDAwMAorLmxvbmcgMHhhY2FiNThmYSwgMHhhNTAwMDAwMCwgMHg0YjkzMDNlMywgMHgzODAwMDAwMAorLmxvbmcgMHgyMDU1ZmEzMCwgMHhiZjAwMDAwMCwgMHhhZGY2NmQ3NiwgMHg0MDAwMDAwMAorLmxvbmcgMHg4ODkxNzZjYywgMHhhMzAwMDAwMCwgMHhmNTI1NGMwMiwgMHg5ZTAwMDAwMAorLmxvbmcgMHg0ZmZjZDdlNSwgMHg4MTAwMDAwMCwgMHhjNWQ3Y2IyYSwgMHhmMzAwMDAwMAorLmxvbmcgMHgyNjgwNDQzNSwgMHhkNzAwMDAwMCwgMHhiNThmYTM2MiwgMHhmYjAwMDAwMAorLmxvbmcgMHhkZTQ5NWFiMSwgMHg3YzAwMDAwMCwgMHgyNTY3MWJiYSwgMHhlMzAwMDAwMAorLmxvbmcgMHg0NTk4MGVlYSwgMHgzOTAwMDAwMCwgMHg1ZGUxYzBmZSwgMHg4MjAwMDAwMAorLmxvbmcgMHhjMzAyNzUyZiwgMHg5YjAwMDAwMCwgMHg4MTEyZjA0YywgMHgyZjAwMDAwMAorLmxvbmcgMHg4ZGEzOTc0NiwgMHhmZjAwMDAwMCwgMHg2YmM2ZjlkMywgMHg4NzAwMDAwMAorLmxvbmcgMHgwM2U3NWY4ZiwgMHgzNDAwMDAwMCwgMHgxNTk1OWM5MiwgMHg4ZTAwMDAwMAorLmxvbmcgMHhiZmViN2E2ZCwgMHg0MzAwMDAwMCwgMHg5NWRhNTk1MiwgMHg0NDAwMDAwMAorLmxvbmcgMHhkNDJkODNiZSwgMHhjNDAwMDAwMCwgMHg1OGQzMjE3NCwgMHhkZTAwMDAwMAorLmxvbmcgMHg0OTI5NjllMCwgMHhlOTAwMDAwMCwgMHg4ZTQ0YzhjOSwgMHhjYjAwMDAwMAorLmxvbmcgMHg3NTZhODljMiwgMHg1NDAwMDAwMCwgMHhmNDc4Nzk4ZSwgMHg3YjAwMDAwMAorLmxvbmcgMHg5OTZiM2U1OCwgMHg5NDAwMDAwMCwgMHgyN2RkNzFiOSwgMHgzMjAwMDAwMAorLmxvbmcgMHhiZWI2NGZlMSwgMHhhNjAwMDAwMCwgMHhmMDE3YWQ4OCwgMHhjMjAwMDAwMAorLmxvbmcgMHhjOTY2YWMyMCwgMHgyMzAwMDAwMCwgMHg3ZGI0M2FjZSwgMHgzZDAwMDAwMAorLmxvbmcgMHg2MzE4NGFkZiwgMHhlZTAwMDAwMCwgMHhlNTgyMzExYSwgMHg0YzAwMDAwMAorLmxvbmcgMHg5NzYwMzM1MSwgMHg5NTAwMDAwMCwgMHg2MjQ1N2Y1MywgMHgwYjAwMDAwMAorLmxvbmcgMHhiMWUwNzc2NCwgMHg0MjAwMDAwMCwgMHhiYjg0YWU2YiwgMHhmYTAwMDAwMAorLmxvbmcgMHhmZTFjYTA4MSwgMHhjMzAwMDAwMCwgMHhmOTk0MmIwOCwgMHg0ZTAwMDAwMAorLmxvbmcgMHg3MDU4Njg0OCwgMHgwODAwMDAwMCwgMHg4ZjE5ZmQ0NSwgMHgyZTAwMDAwMAorLmxvbmcgMHg5NDg3NmNkZSwgMHhhMTAwMDAwMCwgMHg1MmI3Zjg3YiwgMHg2NjAwMDAwMAorLmxvbmcgMHhhYjIzZDM3MywgMHgyODAwMDAwMCwgMHg3MmUyMDI0YiwgMHhkOTAwMDAwMAorLmxvbmcgMHhlMzU3OGYxZiwgMHgyNDAwMDAwMCwgMHg2NjJhYWI1NSwgMHhiMjAwMDAwMAorLmxvbmcgMHhiMjA3MjhlYiwgMHg3NjAwMDAwMCwgMHgyZjAzYzJiNSwgMHg1YjAwMDAwMAorLmxvbmcgMHg4NjlhN2JjNSwgMHhhMjAwMDAwMCwgMHhkM2E1MDgzNywgMHg0OTAwMDAwMAorLmxvbmcgMHgzMGYyODcyOCwgMHg2ZDAwMDAwMCwgMHgyM2IyYTViZiwgMHg4YjAwMDAwMAorLmxvbmcgMHgwMmJhNmEwMywgMHhkMTAwMDAwMCwgMHhlZDVjODIxNiwgMHgyNTAwMDAwMAorLmxvbmcgMHg4YTJiMWNjZiwgMHg3MjAwMDAwMCwgMHhhNzkyYjQ3OSwgMHhmODAwMDAwMAorLmxvbmcgMHhmM2YwZjIwNywgMHhmNjAwMDAwMCwgMHg0ZWExZTI2OSwgMHg2NDAwMDAwMAorLmxvbmcgMHg2NWNkZjRkYSwgMHg4NjAwMDAwMCwgMHgwNmQ1YmUwNSwgMHg2ODAwMDAwMAorLmxvbmcgMHhkMTFmNjIzNCwgMHg5ODAwMDAwMCwgMHhjNDhhZmVhNiwgMHgxNjAwMDAwMAorLmxvbmcgMHgzNDlkNTMyZSwgMHhkNDAwMDAwMCwgMHhhMmEwNTVmMywgMHhhNDAwMDAwMAorLmxvbmcgMHgwNTMyZTE4YSwgMHg1YzAwMDAwMCwgMHhhNDc1ZWJmNiwgMHhjYzAwMDAwMAorLmxvbmcgMHgwYjM5ZWM4MywgMHg1ZDAwMDAwMCwgMHg0MGFhZWY2MCwgMHg2NTAwMDAwMAorLmxvbmcgMHg1ZTA2OWY3MSwgMHhiNjAwMDAwMCwgMHhiZDUxMTA2ZSwgMHg5MjAwMDAwMAorLmxvbmcgMHgzZWY5OGEyMSwgMHg2YzAwMDAwMCwgMHg5NjNkMDZkZCwgMHg3MDAwMDAwMAorLmxvbmcgMHhkZGFlMDUzZSwgMHg0ODAwMDAwMCwgMHg0ZDQ2YmRlNiwgMHg1MDAwMDAwMAorLmxvbmcgMHg5MWI1OGQ1NCwgMHhmZDAwMDAwMCwgMHg3MTA1NWRjNCwgMHhlZDAwMDAwMAorLmxvbmcgMHgwNDZmZDQwNiwgMHhiOTAwMDAwMCwgMHg2MGZmMTU1MCwgMHhkYTAwMDAwMAorLmxvbmcgMHgxOTI0ZmI5OCwgMHg1ZTAwMDAwMCwgMHhkNjk3ZTliZCwgMHgxNTAwMDAwMAorLmxvbmcgMHg4OWNjNDM0MCwgMHg0NjAwMDAwMCwgMHg2Nzc3OWVkOSwgMHg1NzAwMDAwMAorLmxvbmcgMHhiMGJkNDJlOCwgMHhhNzAwMDAwMCwgMHgwNzg4OGI4OSwgMHg4ZDAwMDAwMAorLmxvbmcgMHhlNzM4NWIxOSwgMHg5ZDAwMDAwMCwgMHg3OWRiZWVjOCwgMHg4NDAwMDAwMAorLmxvbmcgMHhhMTQ3MGE3YywgMHg5MDAwMDAwMCwgMHg3Y2U5MGY0MiwgMHhkODAwMDAwMAorLmxvbmcgMHhmOGM5MWU4NCwgMHhhYjAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorLmxvbmcgMHgwOTgzODY4MCwgMHg4YzAwMDAwMCwgMHgzMjQ4ZWQyYiwgMHhiYzAwMDAwMAorLmxvbmcgMHgxZWFjNzAxMSwgMHhkMzAwMDAwMCwgMHg2YzRlNzI1YSwgMHgwYTAwMDAwMAorLmxvbmcgMHhmZGZiZmYwZSwgMHhmNzAwMDAwMCwgMHgwZjU2Mzg4NSwgMHhlNDAwMDAwMAorLmxvbmcgMHgzZDFlZDVhZSwgMHg1ODAwMDAwMCwgMHgzNjI3MzkyZCwgMHgwNTAwMDAwMAorLmxvbmcgMHgwYTY0ZDkwZiwgMHhiODAwMDAwMCwgMHg2ODIxYTY1YywgMHhiMzAwMDAwMAorLmxvbmcgMHg5YmQxNTQ1YiwgMHg0NTAwMDAwMCwgMHgyNDNhMmUzNiwgMHgwNjAwMDAwMAorLmxvbmcgMHgwY2IxNjcwYSwgMHhkMDAwMDAwMCwgMHg5MzBmZTc1NywgMHgyYzAwMDAwMAorLmxvbmcgMHhiNGQyOTZlZSwgMHgxZTAwMDAwMCwgMHgxYjllOTE5YiwgMHg4ZjAwMDAwMAorLmxvbmcgMHg4MDRmYzVjMCwgMHhjYTAwMDAwMCwgMHg2MWEyMjBkYywgMHgzZjAwMDAwMAorLmxvbmcgMHg1YTY5NGI3NywgMHgwZjAwMDAwMCwgMHgxYzE2MWExMiwgMHgwMjAwMDAwMAorLmxvbmcgMHhlMjBhYmE5MywgMHhjMTAwMDAwMCwgMHhjMGU1MmFhMCwgMHhhZjAwMDAwMAorLmxvbmcgMHgzYzQzZTAyMiwgMHhiZDAwMDAwMCwgMHgxMjFkMTcxYiwgMHgwMzAwMDAwMAorLmxvbmcgMHgwZTBiMGQwOSwgMHgwMTAwMDAwMCwgMHhmMmFkYzc4YiwgMHgxMzAwMDAwMAorLmxvbmcgMHgyZGI5YThiNiwgMHg4YTAwMDAwMCwgMHgxNGM4YTkxZSwgMHg2YjAwMDAwMAorLmxvbmcgMHg1Nzg1MTlmMSwgMHgzYTAwMDAwMCwgMHhhZjRjMDc3NSwgMHg5MTAwMDAwMAorLmxvbmcgMHhlZWJiZGQ5OSwgMHgxMTAwMDAwMCwgMHhhM2ZkNjA3ZiwgMHg0MTAwMDAwMAorLmxvbmcgMHhmNzlmMjYwMSwgMHg0ZjAwMDAwMCwgMHg1Y2JjZjU3MiwgMHg2NzAwMDAwMAorLmxvbmcgMHg0NGM1M2I2NiwgMHhkYzAwMDAwMCwgMHg1YjM0N2VmYiwgMHhlYTAwMDAwMAorLmxvbmcgMHg4Yjc2Mjk0MywgMHg5NzAwMDAwMCwgMHhjYmRjYzYyMywgMHhmMjAwMDAwMAorLmxvbmcgMHhiNjY4ZmNlZCwgMHhjZjAwMDAwMCwgMHhiODYzZjFlNCwgMHhjZTAwMDAwMAorLmxvbmcgMHhkN2NhZGMzMSwgMHhmMDAwMDAwMCwgMHg0MjEwODU2MywgMHhiNDAwMDAwMAorLmxvbmcgMHgxMzQwMjI5NywgMHhlNjAwMDAwMCwgMHg4NDIwMTFjNiwgMHg3MzAwMDAwMAorLmxvbmcgMHg4NTdkMjQ0YSwgMHg5NjAwMDAwMCwgMHhkMmY4M2RiYiwgMHhhYzAwMDAwMAorLmxvbmcgMHhhZTExMzJmOSwgMHg3NDAwMDAwMCwgMHhjNzZkYTEyOSwgMHgyMjAwMDAwMAorLmxvbmcgMHgxZDRiMmY5ZSwgMHhlNzAwMDAwMCwgMHhkY2YzMzBiMiwgMHhhZDAwMDAwMAorLmxvbmcgMHgwZGVjNTI4NiwgMHgzNTAwMDAwMCwgMHg3N2QwZTNjMSwgMHg4NTAwMDAwMAorLmxvbmcgMHgyYjZjMTZiMywgMHhlMjAwMDAwMCwgMHhhOTk5Yjk3MCwgMHhmOTAwMDAwMAorLmxvbmcgMHgxMWZhNDg5NCwgMHgzNzAwMDAwMCwgMHg0NzIyNjRlOSwgMHhlODAwMDAwMAorLmxvbmcgMHhhOGM0OGNmYywgMHgxYzAwMDAwMCwgMHhhMDFhM2ZmMCwgMHg3NTAwMDAwMAorLmxvbmcgMHg1NmQ4MmM3ZCwgMHhkZjAwMDAwMCwgMHgyMmVmOTAzMywgMHg2ZTAwMDAwMAorLmxvbmcgMHg4N2M3NGU0OSwgMHg0NzAwMDAwMCwgMHhkOWMxZDEzOCwgMHhmMTAwMDAwMAorLmxvbmcgMHg4Y2ZlYTJjYSwgMHgxYTAwMDAwMCwgMHg5ODM2MGJkNCwgMHg3MTAwMDAwMAorLmxvbmcgMHhhNmNmODFmNSwgMHgxZDAwMDAwMCwgMHhhNTI4ZGU3YSwgMHgyOTAwMDAwMAorLmxvbmcgMHhkYTI2OGViNywgMHhjNTAwMDAwMCwgMHgzZmE0YmZhZCwgMHg4OTAwMDAwMAorLmxvbmcgMHgyY2U0OWQzYSwgMHg2ZjAwMDAwMCwgMHg1MDBkOTI3OCwgMHhiNzAwMDAwMAorLmxvbmcgMHg2YTliY2M1ZiwgMHg2MjAwMDAwMCwgMHg1NDYyNDY3ZSwgMHgwZTAwMDAwMAorLmxvbmcgMHhmNmMyMTM4ZCwgMHhhYTAwMDAwMCwgMHg5MGU4YjhkOCwgMHgxODAwMDAwMAorLmxvbmcgMHgyZTVlZjczOSwgMHhiZTAwMDAwMCwgMHg4MmY1YWZjMywgMHgxYjAwMDAwMAorLmxvbmcgMHg5ZmJlODA1ZCwgMHhmYzAwMDAwMCwgMHg2OTdjOTNkMCwgMHg1NjAwMDAwMAorLmxvbmcgMHg2ZmE5MmRkNSwgMHgzZTAwMDAwMCwgMHhjZmIzMTIyNSwgMHg0YjAwMDAwMAorLmxvbmcgMHhjODNiOTlhYywgMHhjNjAwMDAwMCwgMHgxMGE3N2QxOCwgMHhkMjAwMDAwMAorLmxvbmcgMHhlODZlNjM5YywgMHg3OTAwMDAwMCwgMHhkYjdiYmIzYiwgMHgyMDAwMDAwMAorLmxvbmcgMHhjZDA5NzgyNiwgMHg5YTAwMDAwMCwgMHg2ZWY0MTg1OSwgMHhkYjAwMDAwMAorLmxvbmcgMHhlYzAxYjc5YSwgMHhjMDAwMDAwMCwgMHg4M2E4OWE0ZiwgMHhmZTAwMDAwMAorLmxvbmcgMHhlNjY1NmU5NSwgMHg3ODAwMDAwMCwgMHhhYTdlZTZmZiwgMHhjZDAwMDAwMAorLmxvbmcgMHgyMTA4Y2ZiYywgMHg1YTAwMDAwMCwgMHhlZmU2ZTgxNSwgMHhmNDAwMDAwMAorLmxvbmcgMHhiYWQ5OWJlNywgMHgxZjAwMDAwMCwgMHg0YWNlMzY2ZiwgMHhkZDAwMDAwMAorLmxvbmcgMHhlYWQ0MDk5ZiwgMHhhODAwMDAwMCwgMHgyOWQ2N2NiMCwgMHgzMzAwMDAwMAorLmxvbmcgMHgzMWFmYjJhNCwgMHg4ODAwMDAwMCwgMHgyYTMxMjMzZiwgMHgwNzAwMDAwMAorLmxvbmcgMHhjNjMwOTRhNSwgMHhjNzAwMDAwMCwgMHgzNWMwNjZhMiwgMHgzMTAwMDAwMAorLmxvbmcgMHg3NDM3YmM0ZSwgMHhiMTAwMDAwMCwgMHhmY2E2Y2E4MiwgMHgxMjAwMDAwMAorLmxvbmcgMHhlMGIwZDA5MCwgMHgxMDAwMDAwMCwgMHgzMzE1ZDhhNywgMHg1OTAwMDAwMAorLmxvbmcgMHhmMTRhOTgwNCwgMHgyNzAwMDAwMCwgMHg0MWY3ZGFlYywgMHg4MDAwMDAwMAorLmxvbmcgMHg3ZjBlNTBjZCwgMHhlYzAwMDAwMCwgMHgxNzJmZjY5MSwgMHg1ZjAwMDAwMAorLmxvbmcgMHg3NjhkZDY0ZCwgMHg2MDAwMDAwMCwgMHg0MzRkYjBlZiwgMHg1MTAwMDAwMAorLmxvbmcgMHhjYzU0NGRhYSwgMHg3ZjAwMDAwMCwgMHhlNGRmMDQ5NiwgMHhhOTAwMDAwMAorLmxvbmcgMHg5ZWUzYjVkMSwgMHgxOTAwMDAwMCwgMHg0YzFiODg2YSwgMHhiNTAwMDAwMAorLmxvbmcgMHhjMWI4MWYyYywgMHg0YTAwMDAwMCwgMHg0NjdmNTE2NSwgMHgwZDAwMDAwMAorLmxvbmcgMHg5ZDA0ZWE1ZSwgMHgyZDAwMDAwMCwgMHgwMTVkMzU4YywgMHhlNTAwMDAwMAorLmxvbmcgMHhmYTczNzQ4NywgMHg3YTAwMDAwMCwgMHhmYjJlNDEwYiwgMHg5ZjAwMDAwMAorLmxvbmcgMHhiMzVhMWQ2NywgMHg5MzAwMDAwMCwgMHg5MjUyZDJkYiwgMHhjOTAwMDAwMAorLmxvbmcgMHhlOTMzNTYxMCwgMHg5YzAwMDAwMCwgMHg2ZDEzNDdkNiwgMHhlZjAwMDAwMAorLmxvbmcgMHg5YThjNjFkNywgMHhhMDAwMDAwMCwgMHgzNzdhMGNhMSwgMHhlMDAwMDAwMAorLmxvbmcgMHg1OThlMTRmOCwgMHgzYjAwMDAwMCwgMHhlYjg5M2MxMywgMHg0ZDAwMDAwMAorLmxvbmcgMHhjZWVlMjdhOSwgMHhhZTAwMDAwMCwgMHhiNzM1Yzk2MSwgMHgyYTAwMDAwMAorLmxvbmcgMHhlMWVkZTUxYywgMHhmNTAwMDAwMCwgMHg3YTNjYjE0NywgMHhiMDAwMDAwMAorLmxvbmcgMHg5YzU5ZGZkMiwgMHhjODAwMDAwMCwgMHg1NTNmNzNmMiwgMHhlYjAwMDAwMAorLmxvbmcgMHgxODc5Y2UxNCwgMHhiYjAwMDAwMCwgMHg3M2JmMzdjNywgMHgzYzAwMDAwMAorLmxvbmcgMHg1M2VhY2RmNywgMHg4MzAwMDAwMCwgMHg1ZjViYWFmZCwgMHg1MzAwMDAwMAorLmxvbmcgMHhkZjE0NmYzZCwgMHg5OTAwMDAwMCwgMHg3ODg2ZGI0NCwgMHg2MTAwMDAwMAorLmxvbmcgMHhjYTgxZjNhZiwgMHgxNzAwMDAwMCwgMHhiOTNlYzQ2OCwgMHgyYjAwMDAwMAorLmxvbmcgMHgzODJjMzQyNCwgMHgwNDAwMDAwMCwgMHhjMjVmNDBhMywgMHg3ZTAwMDAwMAorLmxvbmcgMHgxNjcyYzMxZCwgMHhiYTAwMDAwMCwgMHhiYzBjMjVlMiwgMHg3NzAwMDAwMAorLmxvbmcgMHgyODhiNDkzYywgMHhkNjAwMDAwMCwgMHhmZjQxOTUwZCwgMHgyNjAwMDAwMAorLmxvbmcgMHgzOTcxMDFhOCwgMHhlMTAwMDAwMCwgMHgwOGRlYjMwYywgMHg2OTAwMDAwMAorLmxvbmcgMHhkODljZTRiNCwgMHgxNDAwMDAwMCwgMHg2NDkwYzE1NiwgMHg2MzAwMDAwMAorLmxvbmcgMHg3YjYxODRjYiwgMHg1NTAwMDAwMCwgMHhkNTcwYjYzMiwgMHgyMTAwMDAwMAorLmxvbmcgMHg0ODc0NWM2YywgMHgwYzAwMDAwMCwgMHhkMDQyNTdiOCwgMHg3ZDAwMDAwMAorCisjZW5kaWYgLypVU0VfQUVTKi8KKyNlbmRpZiAvKl9feDg2XzY0Ki8KZGlmZiAtLWdpdCBhL2NpcGhlci9yaWpuZGFlbC1hcm0uUyBiL2NpcGhlci9yaWpuZGFlbC1hcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmMzNTBjCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3Jpam5kYWVsLWFybS5TCkBAIC0wLDAgKzEsODUzIEBACisvKiByaWpuZGFlbC1hcm0uUyAgLSAgQVJNIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIEFFUyBjaXBoZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoX19BUk1FTF9fKQorI2lmZGVmIEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTCisKKy50ZXh0CisKKy5zeW50YXggdW5pZmllZAorLmFybQorCisvKiByZWdpc3RlciBtYWNyb3MgKi8KKyNkZWZpbmUgQ1RYCSVyMAorI2RlZmluZSBSVEFCCSVscgorI2RlZmluZSBSTUFTSwklaXAKKworI2RlZmluZSBSQQklcjQKKyNkZWZpbmUgUkIJJXI1CisjZGVmaW5lIFJDCSVyNgorI2RlZmluZSBSRAklcjcKKworI2RlZmluZSBSTkEJJXI4CisjZGVmaW5lIFJOQgklcjkKKyNkZWZpbmUgUk5DCSVyMTAKKyNkZWZpbmUgUk5ECSVyMTEKKworI2RlZmluZSBSVDAJJXIxCisjZGVmaW5lIFJUMQklcjIKKyNkZWZpbmUgUlQyCSVyMworCisvKiBoZWxwZXIgbWFjcm9zICovCisjZGVmaW5lIGxkcl91bmFsaWduZWRfbGUocm91dCwgcnNyYywgb2ZmcywgcnRtcCkgXAorCWxkcmIgcm91dCwgW3JzcmMsICMoKG9mZnMpICsgMCldOyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAxKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICM4OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAyKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMxNjsgXAorCWxkcmIgcnRtcCwgW3JzcmMsICMoKG9mZnMpICsgMyldOyBcCisJb3JyIHJvdXQsIHJvdXQsIHJ0bXAsIGxzbCAjMjQ7CisKKyNkZWZpbmUgc3RyX3VuYWxpZ25lZF9sZShyaW4sIHJkc3QsIG9mZnMsIHJ0bXAwLCBydG1wMSkgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzg7IFwKKwlzdHJiIHJpbiwgW3Jkc3QsICMoKG9mZnMpICsgMCldOyBcCisJbW92IHJ0bXAxLCByaW4sIGxzciAjMTY7IFwKKwlzdHJiIHJ0bXAwLCBbcmRzdCwgIygob2ZmcykgKyAxKV07IFwKKwltb3YgcnRtcDAsIHJpbiwgbHNyICMyNDsgXAorCXN0cmIgcnRtcDEsIFtyZHN0LCAjKChvZmZzKSArIDIpXTsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDMpXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUk0gYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFFUyBjaXBoZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgcHJlbG9hZF9maXJzdF9rZXkocm91bmQsIHJhKSBcCisJbGRyIHJhLCBbQ1RYLCAjKCgocm91bmQpICogMTYpICsgMCAqIDQpXTsKKworI2RlZmluZSBkdW1teShyb3VuZCwgcmEpIC8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBhZGRyb3VuZGtleShyYSwgcmIsIHJjLCByZCwgcm5hLCBybmIsIHJuYywgcm5kLCBwcmVsb2FkX2tleSkgXAorCWxkbSBDVFgsIHtybmEsIHJuYiwgcm5jLCBybmR9OyBcCisJZW9yIHJhLCBybmE7IFwKKwllb3IgcmIsIHJuYjsgXAorCWVvciByYywgcm5jOyBcCisJcHJlbG9hZF9rZXkoMSwgcm5hKTsgXAorCWVvciByZCwgcm5kOworCisjZGVmaW5lIGRvX2VuY3JvdW5kKG5leHRfciwgcmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCwgcHJlbG9hZF9rZXkpIFwKKwlsZHIgcm5iLCBbQ1RYLCAjKCgobmV4dF9yKSAqIDE2KSArIDEgKiA0KV07IFwKKwlcCisJYW5kIFJUMCwgUk1BU0ssIHJhLCBsc2wjMzsgXAorCWxkciBybmMsIFtDVFgsICMoKChuZXh0X3IpICogMTYpICsgMiAqIDQpXTsgXAorCWFuZCBSVDEsIFJNQVNLLCByYSwgbHNyIyg4IC0gMyk7IFwKKwlsZHIgcm5kLCBbQ1RYLCAjKCgobmV4dF9yKSAqIDE2KSArIDMgKiA0KV07IFwKKwlhbmQgUlQyLCBSTUFTSywgcmEsIGxzciMoMTYgLSAzKTsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIHJhLCAgUk1BU0ssIHJhLCBsc3IjKDI0IC0gMyk7IFwKKwlcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwllb3Igcm5hLCBybmEsIFJUMDsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJYW5kIFJUMCwgUk1BU0ssIHJkLCBsc2wjMzsgXAorCWxkciByYSwgIFtSVEFCLCByYV07IFwKKwlcCisJZW9yIHJuZCwgcm5kLCBSVDEsIHJvciAjMjQ7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmQsIGxzciMoOCAtIDMpOyBcCisJZW9yIHJuYywgcm5jLCBSVDIsIHJvciAjMTY7IFwKKwlhbmQgUlQyLCBSTUFTSywgcmQsIGxzciMoMTYgLSAzKTsgXAorCWVvciBybmIsIHJuYiwgcmEsIHJvciAjODsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIHJkLCAgUk1BU0ssIHJkLCBsc3IjKDI0IC0gMyk7IFwKKwlcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwllb3Igcm5kLCBybmQsIFJUMDsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJYW5kIFJUMCwgUk1BU0ssIHJjLCBsc2wjMzsgXAorCWxkciByZCwgIFtSVEFCLCByZF07IFwKKwlcCisJZW9yIHJuYywgcm5jLCBSVDEsIHJvciAjMjQ7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmMsIGxzciMoOCAtIDMpOyBcCisJZW9yIHJuYiwgcm5iLCBSVDIsIHJvciAjMTY7IFwKKwlhbmQgUlQyLCBSTUFTSywgcmMsIGxzciMoMTYgLSAzKTsgXAorCWVvciBybmEsIHJuYSwgcmQsIHJvciAjODsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIHJjLCAgUk1BU0ssIHJjLCBsc3IjKDI0IC0gMyk7IFwKKwlcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwllb3Igcm5jLCBybmMsIFJUMDsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJYW5kIFJUMCwgUk1BU0ssIHJiLCBsc2wjMzsgXAorCWxkciByYywgIFtSVEFCLCByY107IFwKKwlcCisJZW9yIHJuYiwgcm5iLCBSVDEsIHJvciAjMjQ7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmIsIGxzciMoOCAtIDMpOyBcCisJZW9yIHJuYSwgcm5hLCBSVDIsIHJvciAjMTY7IFwKKwlhbmQgUlQyLCBSTUFTSywgcmIsIGxzciMoMTYgLSAzKTsgXAorCWVvciBybmQsIHJuZCwgcmMsIHJvciAjODsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIHJiLCAgUk1BU0ssIHJiLCBsc3IjKDI0IC0gMyk7IFwKKwlcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwllb3Igcm5iLCBybmIsIFJUMDsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJZW9yIHJuYSwgcm5hLCBSVDEsIHJvciAjMjQ7IFwKKwlsZHIgcmIsICBbUlRBQiwgcmJdOyBcCisJXAorCWVvciBybmQsIHJuZCwgUlQyLCByb3IgIzE2OyBcCisJcHJlbG9hZF9rZXkoKG5leHRfcikgKyAxLCByYSk7IFwKKwllb3Igcm5jLCBybmMsIHJiLCByb3IgIzg7CisKKyNkZWZpbmUgZG9fbGFzdGVuY3JvdW5kKHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQpIFwKKwlhbmQgUlQwLCBSTUFTSywgcmEsIGxzbCMzOyBcCisJYW5kIFJUMSwgUk1BU0ssIHJhLCBsc3IjKDggLSAzKTsgXAorCWFuZCBSVDIsIFJNQVNLLCByYSwgbHNyIygxNiAtIDMpOyBcCisJbGRyIHJuYSwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmEsICBSTUFTSywgcmEsIGxzciMoMjQgLSAzKTsgXAorCWxkciBybmQsIFtSVEFCLCBSVDFdOyBcCisJYW5kIFJUMCwgUk1BU0ssIHJkLCBsc2wjMzsgXAorCWxkciBybmMsIFtSVEFCLCBSVDJdOyBcCisJbW92IHJuZCwgcm5kLCByb3IgIzI0OyBcCisJbGRyIHJuYiwgW1JUQUIsIHJhXTsgXAorCWFuZCBSVDEsIFJNQVNLLCByZCwgbHNyIyg4IC0gMyk7IFwKKwltb3Ygcm5jLCBybmMsIHJvciAjMTY7IFwKKwlhbmQgUlQyLCBSTUFTSywgcmQsIGxzciMoMTYgLSAzKTsgXAorCW1vdiBybmIsIHJuYiwgcm9yICM4OyBcCisJbGRyIFJUMCwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmQsICBSTUFTSywgcmQsIGxzciMoMjQgLSAzKTsgXAorCWxkciBSVDEsIFtSVEFCLCBSVDFdOyBcCisJXAorCW9yciBybmQsIHJuZCwgUlQwOyBcCisJbGRyIFJUMiwgW1JUQUIsIFJUMl07IFwKKwlhbmQgUlQwLCBSTUFTSywgcmMsIGxzbCMzOyBcCisJbGRyIHJkLCAgW1JUQUIsIHJkXTsgXAorCW9yciBybmMsIHJuYywgUlQxLCByb3IgIzI0OyBcCisJYW5kIFJUMSwgUk1BU0ssIHJjLCBsc3IjKDggLSAzKTsgXAorCW9yciBybmIsIHJuYiwgUlQyLCByb3IgIzE2OyBcCisJYW5kIFJUMiwgUk1BU0ssIHJjLCBsc3IjKDE2IC0gMyk7IFwKKwlvcnIgcm5hLCBybmEsIHJkLCByb3IgIzg7IFwKKwlsZHIgUlQwLCBbUlRBQiwgUlQwXTsgXAorCWFuZCByYywgIFJNQVNLLCByYywgbHNyIygyNCAtIDMpOyBcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwlcCisJb3JyIHJuYywgcm5jLCBSVDA7IFwKKwlsZHIgUlQyLCBbUlRBQiwgUlQyXTsgXAorCWFuZCBSVDAsIFJNQVNLLCByYiwgbHNsIzM7IFwKKwlsZHIgcmMsICBbUlRBQiwgcmNdOyBcCisJb3JyIHJuYiwgcm5iLCBSVDEsIHJvciAjMjQ7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmIsIGxzciMoOCAtIDMpOyBcCisJb3JyIHJuYSwgcm5hLCBSVDIsIHJvciAjMTY7IFwKKwlsZHIgUlQwLCBbUlRBQiwgUlQwXTsgXAorCWFuZCBSVDIsIFJNQVNLLCByYiwgbHNyIygxNiAtIDMpOyBcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwlvcnIgcm5kLCBybmQsIHJjLCByb3IgIzg7IFwKKwlsZHIgUlQyLCBbUlRBQiwgUlQyXTsgXAorCWFuZCByYiwgIFJNQVNLLCByYiwgbHNyIygyNCAtIDMpOyBcCisJbGRyIHJiLCAgW1JUQUIsIHJiXTsgXAorCVwKKwlvcnIgcm5iLCBybmIsIFJUMDsgXAorCW9yciBybmEsIHJuYSwgUlQxLCByb3IgIzI0OyBcCisJb3JyIHJuZCwgcm5kLCBSVDIsIHJvciAjMTY7IFwKKwlvcnIgcm5jLCBybmMsIHJiLCByb3IgIzg7CisKKyNkZWZpbmUgZmlyc3RlbmNyb3VuZChyb3VuZCwgcmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCkgXAorCWFkZHJvdW5ka2V5KHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQsIHByZWxvYWRfZmlyc3Rfa2V5KTsgXAorCWRvX2VuY3JvdW5kKChyb3VuZCkgKyAxLCByYSwgcmIsIHJjLCByZCwgcm5hLCBybmIsIHJuYywgcm5kLCBwcmVsb2FkX2ZpcnN0X2tleSk7CisKKyNkZWZpbmUgZW5jcm91bmQocm91bmQsIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQsIHByZWxvYWRfa2V5KSBcCisJZG9fZW5jcm91bmQoKHJvdW5kKSArIDEsIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQsIHByZWxvYWRfa2V5KTsKKworI2RlZmluZSBsYXN0ZW5jcm91bmQocm91bmQsIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQpIFwKKwlhZGQgQ1RYLCAjKCgocm91bmQpICsgMSkgKiAxNik7IFwKKwlhZGQgUlRBQiwgIzQ7IFwKKwlkb19sYXN0ZW5jcm91bmQocmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCk7IFwKKwlhZGRyb3VuZGtleShybmEsIHJuYiwgcm5jLCBybmQsIHJhLCByYiwgcmMsIHJkLCBkdW1teSk7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfYWVzX2FybV9lbmNyeXB0X2Jsb2NrCisudHlwZSAgIF9nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jaywlZnVuY3Rpb247CisKK19nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcjA6IGtleXNjaGVkLCBDVFgKKwkgKgklcjE6IGRzdAorCSAqCSVyMjogc3JjCisJICoJJXIzOiBudW1iZXIgb2Ygcm91bmRzLi4gMTAsIDEyIG9yIDE0CisJICovCisJcHVzaCB7JXI0LSVyMTEsICVpcCwgJWxyfTsKKworCS8qIHJlYWQgaW5wdXQgYmxvY2sgKi8KKyNpZm5kZWYgX19BUk1fRkVBVFVSRV9VTkFMSUdORUQKKwkvKiB0ZXN0IGlmIHNyYyBpcyB1bmFsaWduZWQgKi8KKwl0c3QJJXIyLCAjMzsKKwliZXEJMWY7CisKKwkvKiB1bmFsaWduZWQgbG9hZCAqLworCWxkcl91bmFsaWduZWRfbGUoUkEsICVyMiwgMCwgUk5BKTsKKwlsZHJfdW5hbGlnbmVkX2xlKFJCLCAlcjIsIDQsIFJOQik7CisJbGRyX3VuYWxpZ25lZF9sZShSQywgJXIyLCA4LCBSTkEpOworCWxkcl91bmFsaWduZWRfbGUoUkQsICVyMiwgMTIsIFJOQik7CisJYgkyZjsKKy5sdG9yZworMToKKyNlbmRpZgorCS8qIGFsaWduZWQgbG9hZCAqLworCWxkbQklcjIsIHtSQSwgUkIsIFJDLCBSRH07CisjaWZuZGVmIF9fQVJNRUxfXworCXJldglSQSwgUkE7CisJcmV2CVJCLCBSQjsKKwlyZXYJUkMsIFJDOworCXJldglSRCwgUkQ7CisjZW5kaWYKKzI6CisJc3ViCSVzcCwgIzE2OworCisJbGRyCVJUQUIsID0uTHRhYmxlRTA7CisKKwlzdHIJJXIxLCBbJXNwLCAjNF07CQkvKiBkc3QgKi8KKwltb3YJUk1BU0ssICMweGZmOworCXN0cgklcjMsIFslc3AsICM4XTsJCS8qIG5yb3VuZHMgKi8KKwltb3YJUk1BU0ssIFJNQVNLLCBsc2wjMzsJLyogYnl0ZSBtYXNrICovCisKKwlmaXJzdGVuY3JvdW5kKDAsIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQpOworCWVuY3JvdW5kKDEsIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwllbmNyb3VuZCgyLCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5ELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZW5jcm91bmQoMywgUk5BLCBSTkIsIFJOQywgUk5ELCBSQSwgUkIsIFJDLCBSRCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWVuY3JvdW5kKDQsIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwllbmNyb3VuZCg1LCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZW5jcm91bmQoNiwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWVuY3JvdW5kKDcsIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKworCWxkcglSVDAsIFslc3AsICM4XTsJCS8qIG5yb3VuZHMgKi8KKwljbXAJUlQwLCAjMTI7CisJYmdlCS5MZW5jX25vdF8xMjg7CisKKwllbmNyb3VuZCg4LCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5ELCBkdW1teSk7CisJbGFzdGVuY3JvdW5kKDksIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQpOworCisuTGVuY19kb25lOgorCWxkcglSVDAsIFslc3AsICM0XTsJCS8qIGRzdCAqLworCWFkZAklc3AsICMxNjsKKworCS8qIHN0b3JlIG91dHB1dCBibG9jayAqLworI2lmbmRlZiBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRAorCS8qIHRlc3QgaWYgZHN0IGlzIHVuYWxpZ25lZCAqLworCXRzdAlSVDAsICMzOworCWJlcQkxZjsKKworCS8qIHVuYWxpZ25lZCBzdG9yZSAqLworCXN0cl91bmFsaWduZWRfbGUoUkEsIFJUMCwgMCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkIsIFJUMCwgNCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkMsIFJUMCwgOCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkQsIFJUMCwgMTIsIFJOQSwgUk5CKTsKKwliCTJmOworLmx0b3JnCisxOgorI2VuZGlmCisJLyogYWxpZ25lZCBzdG9yZSAqLworI2lmbmRlZiBfX0FSTUVMX18KKwlyZXYJUkEsIFJBOworCXJldglSQiwgUkI7CisJcmV2CVJDLCBSQzsKKwlyZXYJUkQsIFJEOworI2VuZGlmCisJLyogd3JpdGUgb3V0cHV0IGJsb2NrICovCisJc3RtCVJUMCwge1JBLCBSQiwgUkMsIFJEfTsKKzI6CisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworCisubHRvcmcKKy5MZW5jX25vdF8xMjg6CisJYmVxIC5MZW5jXzE5MgorCisJZW5jcm91bmQoOCwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWVuY3JvdW5kKDksIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwllbmNyb3VuZCgxMCwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWVuY3JvdW5kKDExLCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZW5jcm91bmQoMTIsIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQsIGR1bW15KTsKKwlsYXN0ZW5jcm91bmQoMTMsIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQpOworCisJYiAuTGVuY19kb25lOworCisubHRvcmcKKy5MZW5jXzE5MjoKKwllbmNyb3VuZCg4LCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5ELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZW5jcm91bmQoOSwgUk5BLCBSTkIsIFJOQywgUk5ELCBSQSwgUkIsIFJDLCBSRCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWVuY3JvdW5kKDEwLCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5ELCBkdW1teSk7CisJbGFzdGVuY3JvdW5kKDExLCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJEKTsKKworCWIgLkxlbmNfZG9uZTsKKy5zaXplIF9nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jaywuLV9nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jazsKKworI2RlZmluZSBhZGRyb3VuZGtleV9kZWMocm91bmQsIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQpIFwKKwlsZHIgcm5hLCBbQ1RYLCAjKCgocm91bmQpICogMTYpICsgMCAqIDQpXTsgXAorCWxkciBybmIsIFtDVFgsICMoKChyb3VuZCkgKiAxNikgKyAxICogNCldOyBcCisJZW9yIHJhLCBybmE7IFwKKwlsZHIgcm5jLCBbQ1RYLCAjKCgocm91bmQpICogMTYpICsgMiAqIDQpXTsgXAorCWVvciByYiwgcm5iOyBcCisJbGRyIHJuZCwgW0NUWCwgIygoKHJvdW5kKSAqIDE2KSArIDMgKiA0KV07IFwKKwllb3IgcmMsIHJuYzsgXAorCXByZWxvYWRfZmlyc3Rfa2V5KChyb3VuZCkgLSAxLCBybmEpOyBcCisJZW9yIHJkLCBybmQ7CisKKyNkZWZpbmUgZG9fZGVjcm91bmQobmV4dF9yLCByYSwgcmIsIHJjLCByZCwgcm5hLCBybmIsIHJuYywgcm5kLCBwcmVsb2FkX2tleSkgXAorCWxkciBybmIsIFtDVFgsICMoKChuZXh0X3IpICogMTYpICsgMSAqIDQpXTsgXAorCVwKKwlhbmQgUlQwLCBSTUFTSywgcmEsIGxzbCMzOyBcCisJbGRyIHJuYywgW0NUWCwgIygoKG5leHRfcikgKiAxNikgKyAyICogNCldOyBcCisJYW5kIFJUMSwgUk1BU0ssIHJhLCBsc3IjKDggLSAzKTsgXAorCWxkciBybmQsIFtDVFgsICMoKChuZXh0X3IpICogMTYpICsgMyAqIDQpXTsgXAorCWFuZCBSVDIsIFJNQVNLLCByYSwgbHNyIygxNiAtIDMpOyBcCisJbGRyIFJUMCwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmEsICBSTUFTSywgcmEsIGxzciMoMjQgLSAzKTsgXAorCVwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCWVvciBybmEsIHJuYSwgUlQwOyBcCisJbGRyIFJUMiwgW1JUQUIsIFJUMl07IFwKKwlhbmQgUlQwLCBSTUFTSywgcmIsIGxzbCMzOyBcCisJbGRyIHJhLCAgW1JUQUIsIHJhXTsgXAorCVwKKwllb3Igcm5iLCBybmIsIFJUMSwgcm9yICMyNDsgXAorCWFuZCBSVDEsIFJNQVNLLCByYiwgbHNyIyg4IC0gMyk7IFwKKwllb3Igcm5jLCBybmMsIFJUMiwgcm9yICMxNjsgXAorCWFuZCBSVDIsIFJNQVNLLCByYiwgbHNyIygxNiAtIDMpOyBcCisJZW9yIHJuZCwgcm5kLCByYSwgcm9yICM4OyBcCisJbGRyIFJUMCwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmIsICBSTUFTSywgcmIsIGxzciMoMjQgLSAzKTsgXAorCVwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCWVvciBybmIsIHJuYiwgUlQwOyBcCisJbGRyIFJUMiwgW1JUQUIsIFJUMl07IFwKKwlhbmQgUlQwLCBSTUFTSywgcmMsIGxzbCMzOyBcCisJbGRyIHJiLCAgW1JUQUIsIHJiXTsgXAorCVwKKwllb3Igcm5jLCBybmMsIFJUMSwgcm9yICMyNDsgXAorCWFuZCBSVDEsIFJNQVNLLCByYywgbHNyIyg4IC0gMyk7IFwKKwllb3Igcm5kLCBybmQsIFJUMiwgcm9yICMxNjsgXAorCWFuZCBSVDIsIFJNQVNLLCByYywgbHNyIygxNiAtIDMpOyBcCisJZW9yIHJuYSwgcm5hLCByYiwgcm9yICM4OyBcCisJbGRyIFJUMCwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmMsICBSTUFTSywgcmMsIGxzciMoMjQgLSAzKTsgXAorCVwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCWVvciBybmMsIHJuYywgUlQwOyBcCisJbGRyIFJUMiwgW1JUQUIsIFJUMl07IFwKKwlhbmQgUlQwLCBSTUFTSywgcmQsIGxzbCMzOyBcCisJbGRyIHJjLCAgW1JUQUIsIHJjXTsgXAorCVwKKwllb3Igcm5kLCBybmQsIFJUMSwgcm9yICMyNDsgXAorCWFuZCBSVDEsIFJNQVNLLCByZCwgbHNyIyg4IC0gMyk7IFwKKwllb3Igcm5hLCBybmEsIFJUMiwgcm9yICMxNjsgXAorCWFuZCBSVDIsIFJNQVNLLCByZCwgbHNyIygxNiAtIDMpOyBcCisJZW9yIHJuYiwgcm5iLCByYywgcm9yICM4OyBcCisJbGRyIFJUMCwgW1JUQUIsIFJUMF07IFwKKwlhbmQgcmQsICBSTUFTSywgcmQsIGxzciMoMjQgLSAzKTsgXAorCVwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCWVvciBybmQsIHJuZCwgUlQwOyBcCisJbGRyIFJUMiwgW1JUQUIsIFJUMl07IFwKKwllb3Igcm5hLCBybmEsIFJUMSwgcm9yICMyNDsgXAorCWxkciByZCwgIFtSVEFCLCByZF07IFwKKwlcCisJZW9yIHJuYiwgcm5iLCBSVDIsIHJvciAjMTY7IFwKKwlwcmVsb2FkX2tleSgobmV4dF9yKSAtIDEsIHJhKTsgXAorCWVvciBybmMsIHJuYywgcmQsIHJvciAjODsKKworI2RlZmluZSBkb19sYXN0ZGVjcm91bmQocmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCkgXAorCWFuZCBSVDAsIFJNQVNLLCByYSwgbHNsIzM7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmEsIGxzciMoOCAtIDMpOyBcCisJYW5kIFJUMiwgUk1BU0ssIHJhLCBsc3IjKDE2IC0gMyk7IFwKKwlsZHIgcm5hLCBbUlRBQiwgUlQwXTsgXAorCWFuZCByYSwgIFJNQVNLLCByYSwgbHNyIygyNCAtIDMpOyBcCisJbGRyIHJuYiwgW1JUQUIsIFJUMV07IFwKKwlhbmQgUlQwLCBSTUFTSywgcmIsIGxzbCMzOyBcCisJbGRyIHJuYywgW1JUQUIsIFJUMl07IFwKKwltb3Ygcm5iLCBybmIsIHJvciAjMjQ7IFwKKwlsZHIgcm5kLCBbUlRBQiwgcmFdOyBcCisJYW5kIFJUMSwgUk1BU0ssIHJiLCBsc3IjKDggLSAzKTsgXAorCW1vdiBybmMsIHJuYywgcm9yICMxNjsgXAorCWFuZCBSVDIsIFJNQVNLLCByYiwgbHNyIygxNiAtIDMpOyBcCisJbW92IHJuZCwgcm5kLCByb3IgIzg7IFwKKwlsZHIgUlQwLCBbUlRBQiwgUlQwXTsgXAorCWFuZCByYiwgIFJNQVNLLCByYiwgbHNyIygyNCAtIDMpOyBcCisJbGRyIFJUMSwgW1JUQUIsIFJUMV07IFwKKwlcCisJb3JyIHJuYiwgcm5iLCBSVDA7IFwKKwlsZHIgUlQyLCBbUlRBQiwgUlQyXTsgXAorCWFuZCBSVDAsIFJNQVNLLCByYywgbHNsIzM7IFwKKwlsZHIgcmIsICBbUlRBQiwgcmJdOyBcCisJb3JyIHJuYywgcm5jLCBSVDEsIHJvciAjMjQ7IFwKKwlhbmQgUlQxLCBSTUFTSywgcmMsIGxzciMoOCAtIDMpOyBcCisJb3JyIHJuZCwgcm5kLCBSVDIsIHJvciAjMTY7IFwKKwlhbmQgUlQyLCBSTUFTSywgcmMsIGxzciMoMTYgLSAzKTsgXAorCW9yciBybmEsIHJuYSwgcmIsIHJvciAjODsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIHJjLCAgUk1BU0ssIHJjLCBsc3IjKDI0IC0gMyk7IFwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCVwKKwlvcnIgcm5jLCBybmMsIFJUMDsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJYW5kIFJUMCwgUk1BU0ssIHJkLCBsc2wjMzsgXAorCWxkciByYywgIFtSVEFCLCByY107IFwKKwlvcnIgcm5kLCBybmQsIFJUMSwgcm9yICMyNDsgXAorCWFuZCBSVDEsIFJNQVNLLCByZCwgbHNyIyg4IC0gMyk7IFwKKwlvcnIgcm5hLCBybmEsIFJUMiwgcm9yICMxNjsgXAorCWxkciBSVDAsIFtSVEFCLCBSVDBdOyBcCisJYW5kIFJUMiwgUk1BU0ssIHJkLCBsc3IjKDE2IC0gMyk7IFwKKwlsZHIgUlQxLCBbUlRBQiwgUlQxXTsgXAorCW9yciBybmIsIHJuYiwgcmMsIHJvciAjODsgXAorCWxkciBSVDIsIFtSVEFCLCBSVDJdOyBcCisJYW5kIHJkLCAgUk1BU0ssIHJkLCBsc3IjKDI0IC0gMyk7IFwKKwlsZHIgcmQsICBbUlRBQiwgcmRdOyBcCisJXAorCW9yciBybmQsIHJuZCwgUlQwOyBcCisJb3JyIHJuYSwgcm5hLCBSVDEsIHJvciAjMjQ7IFwKKwlvcnIgcm5iLCBybmIsIFJUMiwgcm9yICMxNjsgXAorCW9yciBybmMsIHJuYywgcmQsIHJvciAjODsKKworI2RlZmluZSBmaXJzdGRlY3JvdW5kKHJvdW5kLCByYSwgcmIsIHJjLCByZCwgcm5hLCBybmIsIHJuYywgcm5kKSBcCisJYWRkcm91bmRrZXlfZGVjKCgocm91bmQpICsgMSksIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQpOyBcCisJZG9fZGVjcm91bmQocm91bmQsIHJhLCByYiwgcmMsIHJkLCBybmEsIHJuYiwgcm5jLCBybmQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKworI2RlZmluZSBkZWNyb3VuZChyb3VuZCwgcmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCwgcHJlbG9hZF9rZXkpIFwKKwlkb19kZWNyb3VuZChyb3VuZCwgcmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCwgcHJlbG9hZF9rZXkpOworCisjZGVmaW5lIGxhc3RkZWNyb3VuZChyb3VuZCwgcmEsIHJiLCByYywgcmQsIHJuYSwgcm5iLCBybmMsIHJuZCkgXAorCWFkZCBSVEFCLCAjNDsgXAorCWRvX2xhc3RkZWNyb3VuZChyYSwgcmIsIHJjLCByZCwgcm5hLCBybmIsIHJuYywgcm5kKTsgXAorCWFkZHJvdW5ka2V5KHJuYSwgcm5iLCBybmMsIHJuZCwgcmEsIHJiLCByYywgcmQsIGR1bW15KTsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9hZXNfYXJtX2RlY3J5cHRfYmxvY2sKKy50eXBlICAgX2djcnlfYWVzX2FybV9kZWNyeXB0X2Jsb2NrLCVmdW5jdGlvbjsKKworX2djcnlfYWVzX2FybV9kZWNyeXB0X2Jsb2NrOgorCS8qIGlucHV0OgorCSAqCSVyMDoga2V5c2NoZWQsIENUWAorCSAqCSVyMTogZHN0CisJICoJJXIyOiBzcmMKKwkgKgklcjM6IG51bWJlciBvZiByb3VuZHMuLiAxMCwgMTIgb3IgMTQKKwkgKi8KKwlwdXNoIHslcjQtJXIxMSwgJWlwLCAlbHJ9OworCisJLyogcmVhZCBpbnB1dCBibG9jayAqLworI2lmbmRlZiBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRAorCS8qIHRlc3QgaWYgc3JjIGlzIHVuYWxpZ25lZCAqLworCXRzdAklcjIsICMzOworCWJlcQkxZjsKKworCS8qIHVuYWxpZ25lZCBsb2FkICovCisJbGRyX3VuYWxpZ25lZF9sZShSQSwgJXIyLCAwLCBSTkEpOworCWxkcl91bmFsaWduZWRfbGUoUkIsICVyMiwgNCwgUk5CKTsKKwlsZHJfdW5hbGlnbmVkX2xlKFJDLCAlcjIsIDgsIFJOQSk7CisJbGRyX3VuYWxpZ25lZF9sZShSRCwgJXIyLCAxMiwgUk5CKTsKKwliCTJmOworLmx0b3JnCisxOgorI2VuZGlmCisJLyogYWxpZ25lZCBsb2FkICovCisJbGRtCSVyMiwge1JBLCBSQiwgUkMsIFJEfTsKKyNpZm5kZWYgX19BUk1FTF9fCisJcmV2CVJBLCBSQTsKKwlyZXYJUkIsIFJCOworCXJldglSQywgUkM7CisJcmV2CVJELCBSRDsKKyNlbmRpZgorMjoKKwlzdWIJJXNwLCAjMTY7CisKKwlsZHIJUlRBQiwgPS5MdGFibGVEMDsKKworCW1vdglSTUFTSywgIzB4ZmY7CisJc3RyCSVyMSwgWyVzcCwgIzRdOwkJLyogZHN0ICovCisJbW92CVJNQVNLLCBSTUFTSywgbHNsIzM7CS8qIGJ5dGUgbWFzayAqLworCisJY21wCSVyMywgIzEyOworCWJnZQkuTGRlY18yNTY7CisKKwlmaXJzdGRlY3JvdW5kKDksIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQpOworLkxkZWNfdGFpbDoKKwlkZWNyb3VuZCg4LCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZGVjcm91bmQoNywgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWRlY3JvdW5kKDYsIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwlkZWNyb3VuZCg1LCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5ELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZGVjcm91bmQoNCwgUk5BLCBSTkIsIFJOQywgUk5ELCBSQSwgUkIsIFJDLCBSRCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWRlY3JvdW5kKDMsIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwlkZWNyb3VuZCgyLCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZGVjcm91bmQoMSwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgZHVtbXkpOworCWxhc3RkZWNyb3VuZCgwLCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJEKTsKKworCWxkcglSVDAsIFslc3AsICM0XTsJCS8qIGRzdCAqLworCWFkZAklc3AsICMxNjsKKworCS8qIHN0b3JlIG91dHB1dCBibG9jayAqLworI2lmbmRlZiBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRAorCS8qIHRlc3QgaWYgZHN0IGlzIHVuYWxpZ25lZCAqLworCXRzdAlSVDAsICMzOworCWJlcQkxZjsKKworCS8qIHVuYWxpZ25lZCBzdG9yZSAqLworCXN0cl91bmFsaWduZWRfbGUoUkEsIFJUMCwgMCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkIsIFJUMCwgNCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkMsIFJUMCwgOCwgUk5BLCBSTkIpOworCXN0cl91bmFsaWduZWRfbGUoUkQsIFJUMCwgMTIsIFJOQSwgUk5CKTsKKwliCTJmOworLmx0b3JnCisxOgorI2VuZGlmCisJLyogYWxpZ25lZCBzdG9yZSAqLworI2lmbmRlZiBfX0FSTUVMX18KKwlyZXYJUkEsIFJBOworCXJldglSQiwgUkI7CisJcmV2CVJDLCBSQzsKKwlyZXYJUkQsIFJEOworI2VuZGlmCisJLyogd3JpdGUgb3V0cHV0IGJsb2NrICovCisJc3RtCVJUMCwge1JBLCBSQiwgUkMsIFJEfTsKKzI6CisJcG9wIHslcjQtJXIxMSwgJWlwLCAlcGN9OworCisubHRvcmcKKy5MZGVjXzI1NjoKKwliZXEgLkxkZWNfMTkyOworCisJZmlyc3RkZWNyb3VuZCgxMywgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCk7CisJZGVjcm91bmQoMTIsIFJOQSwgUk5CLCBSTkMsIFJORCwgUkEsIFJCLCBSQywgUkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKwlkZWNyb3VuZCgxMSwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWRlY3JvdW5kKDEwLCBSTkEsIFJOQiwgUk5DLCBSTkQsIFJBLCBSQiwgUkMsIFJELCBwcmVsb2FkX2ZpcnN0X2tleSk7CisJZGVjcm91bmQoOSwgUkEsIFJCLCBSQywgUkQsIFJOQSwgUk5CLCBSTkMsIFJORCwgcHJlbG9hZF9maXJzdF9rZXkpOworCisJYiAuTGRlY190YWlsOworCisubHRvcmcKKy5MZGVjXzE5MjoKKwlmaXJzdGRlY3JvdW5kKDExLCBSQSwgUkIsIFJDLCBSRCwgUk5BLCBSTkIsIFJOQywgUk5EKTsKKwlkZWNyb3VuZCgxMCwgUk5BLCBSTkIsIFJOQywgUk5ELCBSQSwgUkIsIFJDLCBSRCwgcHJlbG9hZF9maXJzdF9rZXkpOworCWRlY3JvdW5kKDksIFJBLCBSQiwgUkMsIFJELCBSTkEsIFJOQiwgUk5DLCBSTkQsIHByZWxvYWRfZmlyc3Rfa2V5KTsKKworCWIgLkxkZWNfdGFpbDsKKy5zaXplIF9nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jaywuLV9nY3J5X2Flc19hcm1fZW5jcnlwdF9ibG9jazsKKworLmRhdGEKKworLyogRW5jcnlwdGlvbiB0YWJsZXMgKi8KKy5hbGlnbiA1CisudHlwZSAuTHRhYmxlRTAsICVvYmplY3QKKy50eXBlIC5MdGFibGVFczAsICVvYmplY3QKKy5MdGFibGVFMDoKKy5sb25nIDB4YTU2MzYzYzYKKy5MdGFibGVFczA6CisubG9uZyAgICAgICAgICAgICAweDAwMDAwMDYzLCAweDg0N2M3Y2Y4LCAweDAwMDAwMDdjCisubG9uZyAweDk5Nzc3N2VlLCAweDAwMDAwMDc3LCAweDhkN2I3YmY2LCAweDAwMDAwMDdiCisubG9uZyAweDBkZjJmMmZmLCAweDAwMDAwMGYyLCAweGJkNmI2YmQ2LCAweDAwMDAwMDZiCisubG9uZyAweGIxNmY2ZmRlLCAweDAwMDAwMDZmLCAweDU0YzVjNTkxLCAweDAwMDAwMGM1CisubG9uZyAweDUwMzAzMDYwLCAweDAwMDAwMDMwLCAweDAzMDEwMTAyLCAweDAwMDAwMDAxCisubG9uZyAweGE5Njc2N2NlLCAweDAwMDAwMDY3LCAweDdkMmIyYjU2LCAweDAwMDAwMDJiCisubG9uZyAweDE5ZmVmZWU3LCAweDAwMDAwMGZlLCAweDYyZDdkN2I1LCAweDAwMDAwMGQ3CisubG9uZyAweGU2YWJhYjRkLCAweDAwMDAwMGFiLCAweDlhNzY3NmVjLCAweDAwMDAwMDc2CisubG9uZyAweDQ1Y2FjYThmLCAweDAwMDAwMGNhLCAweDlkODI4MjFmLCAweDAwMDAwMDgyCisubG9uZyAweDQwYzljOTg5LCAweDAwMDAwMGM5LCAweDg3N2Q3ZGZhLCAweDAwMDAwMDdkCisubG9uZyAweDE1ZmFmYWVmLCAweDAwMDAwMGZhLCAweGViNTk1OWIyLCAweDAwMDAwMDU5CisubG9uZyAweGM5NDc0NzhlLCAweDAwMDAwMDQ3LCAweDBiZjBmMGZiLCAweDAwMDAwMGYwCisubG9uZyAweGVjYWRhZDQxLCAweDAwMDAwMGFkLCAweDY3ZDRkNGIzLCAweDAwMDAwMGQ0CisubG9uZyAweGZkYTJhMjVmLCAweDAwMDAwMGEyLCAweGVhYWZhZjQ1LCAweDAwMDAwMGFmCisubG9uZyAweGJmOWM5YzIzLCAweDAwMDAwMDljLCAweGY3YTRhNDUzLCAweDAwMDAwMGE0CisubG9uZyAweDk2NzI3MmU0LCAweDAwMDAwMDcyLCAweDViYzBjMDliLCAweDAwMDAwMGMwCisubG9uZyAweGMyYjdiNzc1LCAweDAwMDAwMGI3LCAweDFjZmRmZGUxLCAweDAwMDAwMGZkCisubG9uZyAweGFlOTM5MzNkLCAweDAwMDAwMDkzLCAweDZhMjYyNjRjLCAweDAwMDAwMDI2CisubG9uZyAweDVhMzYzNjZjLCAweDAwMDAwMDM2LCAweDQxM2YzZjdlLCAweDAwMDAwMDNmCisubG9uZyAweDAyZjdmN2Y1LCAweDAwMDAwMGY3LCAweDRmY2NjYzgzLCAweDAwMDAwMGNjCisubG9uZyAweDVjMzQzNDY4LCAweDAwMDAwMDM0LCAweGY0YTVhNTUxLCAweDAwMDAwMGE1CisubG9uZyAweDM0ZTVlNWQxLCAweDAwMDAwMGU1LCAweDA4ZjFmMWY5LCAweDAwMDAwMGYxCisubG9uZyAweDkzNzE3MWUyLCAweDAwMDAwMDcxLCAweDczZDhkOGFiLCAweDAwMDAwMGQ4CisubG9uZyAweDUzMzEzMTYyLCAweDAwMDAwMDMxLCAweDNmMTUxNTJhLCAweDAwMDAwMDE1CisubG9uZyAweDBjMDQwNDA4LCAweDAwMDAwMDA0LCAweDUyYzdjNzk1LCAweDAwMDAwMGM3CisubG9uZyAweDY1MjMyMzQ2LCAweDAwMDAwMDIzLCAweDVlYzNjMzlkLCAweDAwMDAwMGMzCisubG9uZyAweDI4MTgxODMwLCAweDAwMDAwMDE4LCAweGExOTY5NjM3LCAweDAwMDAwMDk2CisubG9uZyAweDBmMDUwNTBhLCAweDAwMDAwMDA1LCAweGI1OWE5YTJmLCAweDAwMDAwMDlhCisubG9uZyAweDA5MDcwNzBlLCAweDAwMDAwMDA3LCAweDM2MTIxMjI0LCAweDAwMDAwMDEyCisubG9uZyAweDliODA4MDFiLCAweDAwMDAwMDgwLCAweDNkZTJlMmRmLCAweDAwMDAwMGUyCisubG9uZyAweDI2ZWJlYmNkLCAweDAwMDAwMGViLCAweDY5MjcyNzRlLCAweDAwMDAwMDI3CisubG9uZyAweGNkYjJiMjdmLCAweDAwMDAwMGIyLCAweDlmNzU3NWVhLCAweDAwMDAwMDc1CisubG9uZyAweDFiMDkwOTEyLCAweDAwMDAwMDA5LCAweDllODM4MzFkLCAweDAwMDAwMDgzCisubG9uZyAweDc0MmMyYzU4LCAweDAwMDAwMDJjLCAweDJlMWExYTM0LCAweDAwMDAwMDFhCisubG9uZyAweDJkMWIxYjM2LCAweDAwMDAwMDFiLCAweGIyNmU2ZWRjLCAweDAwMDAwMDZlCisubG9uZyAweGVlNWE1YWI0LCAweDAwMDAwMDVhLCAweGZiYTBhMDViLCAweDAwMDAwMGEwCisubG9uZyAweGY2NTI1MmE0LCAweDAwMDAwMDUyLCAweDRkM2IzYjc2LCAweDAwMDAwMDNiCisubG9uZyAweDYxZDZkNmI3LCAweDAwMDAwMGQ2LCAweGNlYjNiMzdkLCAweDAwMDAwMGIzCisubG9uZyAweDdiMjkyOTUyLCAweDAwMDAwMDI5LCAweDNlZTNlM2RkLCAweDAwMDAwMGUzCisubG9uZyAweDcxMmYyZjVlLCAweDAwMDAwMDJmLCAweDk3ODQ4NDEzLCAweDAwMDAwMDg0CisubG9uZyAweGY1NTM1M2E2LCAweDAwMDAwMDUzLCAweDY4ZDFkMWI5LCAweDAwMDAwMGQxCisubG9uZyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDJjZWRlZGMxLCAweDAwMDAwMGVkCisubG9uZyAweDYwMjAyMDQwLCAweDAwMDAwMDIwLCAweDFmZmNmY2UzLCAweDAwMDAwMGZjCisubG9uZyAweGM4YjFiMTc5LCAweDAwMDAwMGIxLCAweGVkNWI1YmI2LCAweDAwMDAwMDViCisubG9uZyAweGJlNmE2YWQ0LCAweDAwMDAwMDZhLCAweDQ2Y2JjYjhkLCAweDAwMDAwMGNiCisubG9uZyAweGQ5YmViZTY3LCAweDAwMDAwMGJlLCAweDRiMzkzOTcyLCAweDAwMDAwMDM5CisubG9uZyAweGRlNGE0YTk0LCAweDAwMDAwMDRhLCAweGQ0NGM0Yzk4LCAweDAwMDAwMDRjCisubG9uZyAweGU4NTg1OGIwLCAweDAwMDAwMDU4LCAweDRhY2ZjZjg1LCAweDAwMDAwMGNmCisubG9uZyAweDZiZDBkMGJiLCAweDAwMDAwMGQwLCAweDJhZWZlZmM1LCAweDAwMDAwMGVmCisubG9uZyAweGU1YWFhYTRmLCAweDAwMDAwMGFhLCAweDE2ZmJmYmVkLCAweDAwMDAwMGZiCisubG9uZyAweGM1NDM0Mzg2LCAweDAwMDAwMDQzLCAweGQ3NGQ0ZDlhLCAweDAwMDAwMDRkCisubG9uZyAweDU1MzMzMzY2LCAweDAwMDAwMDMzLCAweDk0ODU4NTExLCAweDAwMDAwMDg1CisubG9uZyAweGNmNDU0NThhLCAweDAwMDAwMDQ1LCAweDEwZjlmOWU5LCAweDAwMDAwMGY5CisubG9uZyAweDA2MDIwMjA0LCAweDAwMDAwMDAyLCAweDgxN2Y3ZmZlLCAweDAwMDAwMDdmCisubG9uZyAweGYwNTA1MGEwLCAweDAwMDAwMDUwLCAweDQ0M2MzYzc4LCAweDAwMDAwMDNjCisubG9uZyAweGJhOWY5ZjI1LCAweDAwMDAwMDlmLCAweGUzYThhODRiLCAweDAwMDAwMGE4CisubG9uZyAweGYzNTE1MWEyLCAweDAwMDAwMDUxLCAweGZlYTNhMzVkLCAweDAwMDAwMGEzCisubG9uZyAweGMwNDA0MDgwLCAweDAwMDAwMDQwLCAweDhhOGY4ZjA1LCAweDAwMDAwMDhmCisubG9uZyAweGFkOTI5MjNmLCAweDAwMDAwMDkyLCAweGJjOWQ5ZDIxLCAweDAwMDAwMDlkCisubG9uZyAweDQ4MzgzODcwLCAweDAwMDAwMDM4LCAweDA0ZjVmNWYxLCAweDAwMDAwMGY1CisubG9uZyAweGRmYmNiYzYzLCAweDAwMDAwMGJjLCAweGMxYjZiNjc3LCAweDAwMDAwMGI2CisubG9uZyAweDc1ZGFkYWFmLCAweDAwMDAwMGRhLCAweDYzMjEyMTQyLCAweDAwMDAwMDIxCisubG9uZyAweDMwMTAxMDIwLCAweDAwMDAwMDEwLCAweDFhZmZmZmU1LCAweDAwMDAwMGZmCisubG9uZyAweDBlZjNmM2ZkLCAweDAwMDAwMGYzLCAweDZkZDJkMmJmLCAweDAwMDAwMGQyCisubG9uZyAweDRjY2RjZDgxLCAweDAwMDAwMGNkLCAweDE0MGMwYzE4LCAweDAwMDAwMDBjCisubG9uZyAweDM1MTMxMzI2LCAweDAwMDAwMDEzLCAweDJmZWNlY2MzLCAweDAwMDAwMGVjCisubG9uZyAweGUxNWY1ZmJlLCAweDAwMDAwMDVmLCAweGEyOTc5NzM1LCAweDAwMDAwMDk3CisubG9uZyAweGNjNDQ0NDg4LCAweDAwMDAwMDQ0LCAweDM5MTcxNzJlLCAweDAwMDAwMDE3CisubG9uZyAweDU3YzRjNDkzLCAweDAwMDAwMGM0LCAweGYyYTdhNzU1LCAweDAwMDAwMGE3CisubG9uZyAweDgyN2U3ZWZjLCAweDAwMDAwMDdlLCAweDQ3M2QzZDdhLCAweDAwMDAwMDNkCisubG9uZyAweGFjNjQ2NGM4LCAweDAwMDAwMDY0LCAweGU3NWQ1ZGJhLCAweDAwMDAwMDVkCisubG9uZyAweDJiMTkxOTMyLCAweDAwMDAwMDE5LCAweDk1NzM3M2U2LCAweDAwMDAwMDczCisubG9uZyAweGEwNjA2MGMwLCAweDAwMDAwMDYwLCAweDk4ODE4MTE5LCAweDAwMDAwMDgxCisubG9uZyAweGQxNGY0ZjllLCAweDAwMDAwMDRmLCAweDdmZGNkY2EzLCAweDAwMDAwMGRjCisubG9uZyAweDY2MjIyMjQ0LCAweDAwMDAwMDIyLCAweDdlMmEyYTU0LCAweDAwMDAwMDJhCisubG9uZyAweGFiOTA5MDNiLCAweDAwMDAwMDkwLCAweDgzODg4ODBiLCAweDAwMDAwMDg4CisubG9uZyAweGNhNDY0NjhjLCAweDAwMDAwMDQ2LCAweDI5ZWVlZWM3LCAweDAwMDAwMGVlCisubG9uZyAweGQzYjhiODZiLCAweDAwMDAwMGI4LCAweDNjMTQxNDI4LCAweDAwMDAwMDE0CisubG9uZyAweDc5ZGVkZWE3LCAweDAwMDAwMGRlLCAweGUyNWU1ZWJjLCAweDAwMDAwMDVlCisubG9uZyAweDFkMGIwYjE2LCAweDAwMDAwMDBiLCAweDc2ZGJkYmFkLCAweDAwMDAwMGRiCisubG9uZyAweDNiZTBlMGRiLCAweDAwMDAwMGUwLCAweDU2MzIzMjY0LCAweDAwMDAwMDMyCisubG9uZyAweDRlM2EzYTc0LCAweDAwMDAwMDNhLCAweDFlMGEwYTE0LCAweDAwMDAwMDBhCisubG9uZyAweGRiNDk0OTkyLCAweDAwMDAwMDQ5LCAweDBhMDYwNjBjLCAweDAwMDAwMDA2CisubG9uZyAweDZjMjQyNDQ4LCAweDAwMDAwMDI0LCAweGU0NWM1Y2I4LCAweDAwMDAwMDVjCisubG9uZyAweDVkYzJjMjlmLCAweDAwMDAwMGMyLCAweDZlZDNkM2JkLCAweDAwMDAwMGQzCisubG9uZyAweGVmYWNhYzQzLCAweDAwMDAwMGFjLCAweGE2NjI2MmM0LCAweDAwMDAwMDYyCisubG9uZyAweGE4OTE5MTM5LCAweDAwMDAwMDkxLCAweGE0OTU5NTMxLCAweDAwMDAwMDk1CisubG9uZyAweDM3ZTRlNGQzLCAweDAwMDAwMGU0LCAweDhiNzk3OWYyLCAweDAwMDAwMDc5CisubG9uZyAweDMyZTdlN2Q1LCAweDAwMDAwMGU3LCAweDQzYzhjODhiLCAweDAwMDAwMGM4CisubG9uZyAweDU5MzczNzZlLCAweDAwMDAwMDM3LCAweGI3NmQ2ZGRhLCAweDAwMDAwMDZkCisubG9uZyAweDhjOGQ4ZDAxLCAweDAwMDAwMDhkLCAweDY0ZDVkNWIxLCAweDAwMDAwMGQ1CisubG9uZyAweGQyNGU0ZTljLCAweDAwMDAwMDRlLCAweGUwYTlhOTQ5LCAweDAwMDAwMGE5CisubG9uZyAweGI0NmM2Y2Q4LCAweDAwMDAwMDZjLCAweGZhNTY1NmFjLCAweDAwMDAwMDU2CisubG9uZyAweDA3ZjRmNGYzLCAweDAwMDAwMGY0LCAweDI1ZWFlYWNmLCAweDAwMDAwMGVhCisubG9uZyAweGFmNjU2NWNhLCAweDAwMDAwMDY1LCAweDhlN2E3YWY0LCAweDAwMDAwMDdhCisubG9uZyAweGU5YWVhZTQ3LCAweDAwMDAwMGFlLCAweDE4MDgwODEwLCAweDAwMDAwMDA4CisubG9uZyAweGQ1YmFiYTZmLCAweDAwMDAwMGJhLCAweDg4Nzg3OGYwLCAweDAwMDAwMDc4CisubG9uZyAweDZmMjUyNTRhLCAweDAwMDAwMDI1LCAweDcyMmUyZTVjLCAweDAwMDAwMDJlCisubG9uZyAweDI0MWMxYzM4LCAweDAwMDAwMDFjLCAweGYxYTZhNjU3LCAweDAwMDAwMGE2CisubG9uZyAweGM3YjRiNDczLCAweDAwMDAwMGI0LCAweDUxYzZjNjk3LCAweDAwMDAwMGM2CisubG9uZyAweDIzZThlOGNiLCAweDAwMDAwMGU4LCAweDdjZGRkZGExLCAweDAwMDAwMGRkCisubG9uZyAweDljNzQ3NGU4LCAweDAwMDAwMDc0LCAweDIxMWYxZjNlLCAweDAwMDAwMDFmCisubG9uZyAweGRkNGI0Yjk2LCAweDAwMDAwMDRiLCAweGRjYmRiZDYxLCAweDAwMDAwMGJkCisubG9uZyAweDg2OGI4YjBkLCAweDAwMDAwMDhiLCAweDg1OGE4YTBmLCAweDAwMDAwMDhhCisubG9uZyAweDkwNzA3MGUwLCAweDAwMDAwMDcwLCAweDQyM2UzZTdjLCAweDAwMDAwMDNlCisubG9uZyAweGM0YjViNTcxLCAweDAwMDAwMGI1LCAweGFhNjY2NmNjLCAweDAwMDAwMDY2CisubG9uZyAweGQ4NDg0ODkwLCAweDAwMDAwMDQ4LCAweDA1MDMwMzA2LCAweDAwMDAwMDAzCisubG9uZyAweDAxZjZmNmY3LCAweDAwMDAwMGY2LCAweDEyMGUwZTFjLCAweDAwMDAwMDBlCisubG9uZyAweGEzNjE2MWMyLCAweDAwMDAwMDYxLCAweDVmMzUzNTZhLCAweDAwMDAwMDM1CisubG9uZyAweGY5NTc1N2FlLCAweDAwMDAwMDU3LCAweGQwYjliOTY5LCAweDAwMDAwMGI5CisubG9uZyAweDkxODY4NjE3LCAweDAwMDAwMDg2LCAweDU4YzFjMTk5LCAweDAwMDAwMGMxCisubG9uZyAweDI3MWQxZDNhLCAweDAwMDAwMDFkLCAweGI5OWU5ZTI3LCAweDAwMDAwMDllCisubG9uZyAweDM4ZTFlMWQ5LCAweDAwMDAwMGUxLCAweDEzZjhmOGViLCAweDAwMDAwMGY4CisubG9uZyAweGIzOTg5ODJiLCAweDAwMDAwMDk4LCAweDMzMTExMTIyLCAweDAwMDAwMDExCisubG9uZyAweGJiNjk2OWQyLCAweDAwMDAwMDY5LCAweDcwZDlkOWE5LCAweDAwMDAwMGQ5CisubG9uZyAweDg5OGU4ZTA3LCAweDAwMDAwMDhlLCAweGE3OTQ5NDMzLCAweDAwMDAwMDk0CisubG9uZyAweGI2OWI5YjJkLCAweDAwMDAwMDliLCAweDIyMWUxZTNjLCAweDAwMDAwMDFlCisubG9uZyAweDkyODc4NzE1LCAweDAwMDAwMDg3LCAweDIwZTllOWM5LCAweDAwMDAwMGU5CisubG9uZyAweDQ5Y2VjZTg3LCAweDAwMDAwMGNlLCAweGZmNTU1NWFhLCAweDAwMDAwMDU1CisubG9uZyAweDc4MjgyODUwLCAweDAwMDAwMDI4LCAweDdhZGZkZmE1LCAweDAwMDAwMGRmCisubG9uZyAweDhmOGM4YzAzLCAweDAwMDAwMDhjLCAweGY4YTFhMTU5LCAweDAwMDAwMGExCisubG9uZyAweDgwODk4OTA5LCAweDAwMDAwMDg5LCAweDE3MGQwZDFhLCAweDAwMDAwMDBkCisubG9uZyAweGRhYmZiZjY1LCAweDAwMDAwMGJmLCAweDMxZTZlNmQ3LCAweDAwMDAwMGU2CisubG9uZyAweGM2NDI0Mjg0LCAweDAwMDAwMDQyLCAweGI4Njg2OGQwLCAweDAwMDAwMDY4CisubG9uZyAweGMzNDE0MTgyLCAweDAwMDAwMDQxLCAweGIwOTk5OTI5LCAweDAwMDAwMDk5CisubG9uZyAweDc3MmQyZDVhLCAweDAwMDAwMDJkLCAweDExMGYwZjFlLCAweDAwMDAwMDBmCisubG9uZyAweGNiYjBiMDdiLCAweDAwMDAwMGIwLCAweGZjNTQ1NGE4LCAweDAwMDAwMDU0CisubG9uZyAweGQ2YmJiYjZkLCAweDAwMDAwMGJiLCAweDNhMTYxNjJjLCAweDAwMDAwMDE2CisKKy8qIERlY3J5cHRpb24gdGFibGVzICovCisuYWxpZ24gNQorLnR5cGUgLkx0YWJsZUQwLCAlb2JqZWN0CisudHlwZSAuTHRhYmxlRHMwLCAlb2JqZWN0CisuTHRhYmxlRDA6CisubG9uZyAweDUwYTdmNDUxCisuTHRhYmxlRHMwOgorLmxvbmcgICAgICAgICAgICAgMHgwMDAwMDA1MiwgMHg1MzY1NDE3ZSwgMHgwMDAwMDAwOQorLmxvbmcgMHhjM2E0MTcxYSwgMHgwMDAwMDA2YSwgMHg5NjVlMjczYSwgMHgwMDAwMDBkNQorLmxvbmcgMHhjYjZiYWIzYiwgMHgwMDAwMDAzMCwgMHhmMTQ1OWQxZiwgMHgwMDAwMDAzNgorLmxvbmcgMHhhYjU4ZmFhYywgMHgwMDAwMDBhNSwgMHg5MzAzZTM0YiwgMHgwMDAwMDAzOAorLmxvbmcgMHg1NWZhMzAyMCwgMHgwMDAwMDBiZiwgMHhmNjZkNzZhZCwgMHgwMDAwMDA0MAorLmxvbmcgMHg5MTc2Y2M4OCwgMHgwMDAwMDBhMywgMHgyNTRjMDJmNSwgMHgwMDAwMDA5ZQorLmxvbmcgMHhmY2Q3ZTU0ZiwgMHgwMDAwMDA4MSwgMHhkN2NiMmFjNSwgMHgwMDAwMDBmMworLmxvbmcgMHg4MDQ0MzUyNiwgMHgwMDAwMDBkNywgMHg4ZmEzNjJiNSwgMHgwMDAwMDBmYgorLmxvbmcgMHg0OTVhYjFkZSwgMHgwMDAwMDA3YywgMHg2NzFiYmEyNSwgMHgwMDAwMDBlMworLmxvbmcgMHg5ODBlZWE0NSwgMHgwMDAwMDAzOSwgMHhlMWMwZmU1ZCwgMHgwMDAwMDA4MgorLmxvbmcgMHgwMjc1MmZjMywgMHgwMDAwMDA5YiwgMHgxMmYwNGM4MSwgMHgwMDAwMDAyZgorLmxvbmcgMHhhMzk3NDY4ZCwgMHgwMDAwMDBmZiwgMHhjNmY5ZDM2YiwgMHgwMDAwMDA4NworLmxvbmcgMHhlNzVmOGYwMywgMHgwMDAwMDAzNCwgMHg5NTljOTIxNSwgMHgwMDAwMDA4ZQorLmxvbmcgMHhlYjdhNmRiZiwgMHgwMDAwMDA0MywgMHhkYTU5NTI5NSwgMHgwMDAwMDA0NAorLmxvbmcgMHgyZDgzYmVkNCwgMHgwMDAwMDBjNCwgMHhkMzIxNzQ1OCwgMHgwMDAwMDBkZQorLmxvbmcgMHgyOTY5ZTA0OSwgMHgwMDAwMDBlOSwgMHg0NGM4Yzk4ZSwgMHgwMDAwMDBjYgorLmxvbmcgMHg2YTg5YzI3NSwgMHgwMDAwMDA1NCwgMHg3ODc5OGVmNCwgMHgwMDAwMDA3YgorLmxvbmcgMHg2YjNlNTg5OSwgMHgwMDAwMDA5NCwgMHhkZDcxYjkyNywgMHgwMDAwMDAzMgorLmxvbmcgMHhiNjRmZTFiZSwgMHgwMDAwMDBhNiwgMHgxN2FkODhmMCwgMHgwMDAwMDBjMgorLmxvbmcgMHg2NmFjMjBjOSwgMHgwMDAwMDAyMywgMHhiNDNhY2U3ZCwgMHgwMDAwMDAzZAorLmxvbmcgMHgxODRhZGY2MywgMHgwMDAwMDBlZSwgMHg4MjMxMWFlNSwgMHgwMDAwMDA0YworLmxvbmcgMHg2MDMzNTE5NywgMHgwMDAwMDA5NSwgMHg0NTdmNTM2MiwgMHgwMDAwMDAwYgorLmxvbmcgMHhlMDc3NjRiMSwgMHgwMDAwMDA0MiwgMHg4NGFlNmJiYiwgMHgwMDAwMDBmYQorLmxvbmcgMHgxY2EwODFmZSwgMHgwMDAwMDBjMywgMHg5NDJiMDhmOSwgMHgwMDAwMDA0ZQorLmxvbmcgMHg1ODY4NDg3MCwgMHgwMDAwMDAwOCwgMHgxOWZkNDU4ZiwgMHgwMDAwMDAyZQorLmxvbmcgMHg4NzZjZGU5NCwgMHgwMDAwMDBhMSwgMHhiN2Y4N2I1MiwgMHgwMDAwMDA2NgorLmxvbmcgMHgyM2QzNzNhYiwgMHgwMDAwMDAyOCwgMHhlMjAyNGI3MiwgMHgwMDAwMDBkOQorLmxvbmcgMHg1NzhmMWZlMywgMHgwMDAwMDAyNCwgMHgyYWFiNTU2NiwgMHgwMDAwMDBiMgorLmxvbmcgMHgwNzI4ZWJiMiwgMHgwMDAwMDA3NiwgMHgwM2MyYjUyZiwgMHgwMDAwMDA1YgorLmxvbmcgMHg5YTdiYzU4NiwgMHgwMDAwMDBhMiwgMHhhNTA4MzdkMywgMHgwMDAwMDA0OQorLmxvbmcgMHhmMjg3MjgzMCwgMHgwMDAwMDA2ZCwgMHhiMmE1YmYyMywgMHgwMDAwMDA4YgorLmxvbmcgMHhiYTZhMDMwMiwgMHgwMDAwMDBkMSwgMHg1YzgyMTZlZCwgMHgwMDAwMDAyNQorLmxvbmcgMHgyYjFjY2Y4YSwgMHgwMDAwMDA3MiwgMHg5MmI0NzlhNywgMHgwMDAwMDBmOAorLmxvbmcgMHhmMGYyMDdmMywgMHgwMDAwMDBmNiwgMHhhMWUyNjk0ZSwgMHgwMDAwMDA2NAorLmxvbmcgMHhjZGY0ZGE2NSwgMHgwMDAwMDA4NiwgMHhkNWJlMDUwNiwgMHgwMDAwMDA2OAorLmxvbmcgMHgxZjYyMzRkMSwgMHgwMDAwMDA5OCwgMHg4YWZlYTZjNCwgMHgwMDAwMDAxNgorLmxvbmcgMHg5ZDUzMmUzNCwgMHgwMDAwMDBkNCwgMHhhMDU1ZjNhMiwgMHgwMDAwMDBhNAorLmxvbmcgMHgzMmUxOGEwNSwgMHgwMDAwMDA1YywgMHg3NWViZjZhNCwgMHgwMDAwMDBjYworLmxvbmcgMHgzOWVjODMwYiwgMHgwMDAwMDA1ZCwgMHhhYWVmNjA0MCwgMHgwMDAwMDA2NQorLmxvbmcgMHgwNjlmNzE1ZSwgMHgwMDAwMDBiNiwgMHg1MTEwNmViZCwgMHgwMDAwMDA5MgorLmxvbmcgMHhmOThhMjEzZSwgMHgwMDAwMDA2YywgMHgzZDA2ZGQ5NiwgMHgwMDAwMDA3MAorLmxvbmcgMHhhZTA1M2VkZCwgMHgwMDAwMDA0OCwgMHg0NmJkZTY0ZCwgMHgwMDAwMDA1MAorLmxvbmcgMHhiNThkNTQ5MSwgMHgwMDAwMDBmZCwgMHgwNTVkYzQ3MSwgMHgwMDAwMDBlZAorLmxvbmcgMHg2ZmQ0MDYwNCwgMHgwMDAwMDBiOSwgMHhmZjE1NTA2MCwgMHgwMDAwMDBkYQorLmxvbmcgMHgyNGZiOTgxOSwgMHgwMDAwMDA1ZSwgMHg5N2U5YmRkNiwgMHgwMDAwMDAxNQorLmxvbmcgMHhjYzQzNDA4OSwgMHgwMDAwMDA0NiwgMHg3NzllZDk2NywgMHgwMDAwMDA1NworLmxvbmcgMHhiZDQyZThiMCwgMHgwMDAwMDBhNywgMHg4ODhiODkwNywgMHgwMDAwMDA4ZAorLmxvbmcgMHgzODViMTllNywgMHgwMDAwMDA5ZCwgMHhkYmVlYzg3OSwgMHgwMDAwMDA4NAorLmxvbmcgMHg0NzBhN2NhMSwgMHgwMDAwMDA5MCwgMHhlOTBmNDI3YywgMHgwMDAwMDBkOAorLmxvbmcgMHhjOTFlODRmOCwgMHgwMDAwMDBhYiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorLmxvbmcgMHg4Mzg2ODAwOSwgMHgwMDAwMDA4YywgMHg0OGVkMmIzMiwgMHgwMDAwMDBiYworLmxvbmcgMHhhYzcwMTExZSwgMHgwMDAwMDBkMywgMHg0ZTcyNWE2YywgMHgwMDAwMDAwYQorLmxvbmcgMHhmYmZmMGVmZCwgMHgwMDAwMDBmNywgMHg1NjM4ODUwZiwgMHgwMDAwMDBlNAorLmxvbmcgMHgxZWQ1YWUzZCwgMHgwMDAwMDA1OCwgMHgyNzM5MmQzNiwgMHgwMDAwMDAwNQorLmxvbmcgMHg2NGQ5MGYwYSwgMHgwMDAwMDBiOCwgMHgyMWE2NWM2OCwgMHgwMDAwMDBiMworLmxvbmcgMHhkMTU0NWI5YiwgMHgwMDAwMDA0NSwgMHgzYTJlMzYyNCwgMHgwMDAwMDAwNgorLmxvbmcgMHhiMTY3MGEwYywgMHgwMDAwMDBkMCwgMHgwZmU3NTc5MywgMHgwMDAwMDAyYworLmxvbmcgMHhkMjk2ZWViNCwgMHgwMDAwMDAxZSwgMHg5ZTkxOWIxYiwgMHgwMDAwMDA4ZgorLmxvbmcgMHg0ZmM1YzA4MCwgMHgwMDAwMDBjYSwgMHhhMjIwZGM2MSwgMHgwMDAwMDAzZgorLmxvbmcgMHg2OTRiNzc1YSwgMHgwMDAwMDAwZiwgMHgxNjFhMTIxYywgMHgwMDAwMDAwMgorLmxvbmcgMHgwYWJhOTNlMiwgMHgwMDAwMDBjMSwgMHhlNTJhYTBjMCwgMHgwMDAwMDBhZgorLmxvbmcgMHg0M2UwMjIzYywgMHgwMDAwMDBiZCwgMHgxZDE3MWIxMiwgMHgwMDAwMDAwMworLmxvbmcgMHgwYjBkMDkwZSwgMHgwMDAwMDAwMSwgMHhhZGM3OGJmMiwgMHgwMDAwMDAxMworLmxvbmcgMHhiOWE4YjYyZCwgMHgwMDAwMDA4YSwgMHhjOGE5MWUxNCwgMHgwMDAwMDA2YgorLmxvbmcgMHg4NTE5ZjE1NywgMHgwMDAwMDAzYSwgMHg0YzA3NzVhZiwgMHgwMDAwMDA5MQorLmxvbmcgMHhiYmRkOTllZSwgMHgwMDAwMDAxMSwgMHhmZDYwN2ZhMywgMHgwMDAwMDA0MQorLmxvbmcgMHg5ZjI2MDFmNywgMHgwMDAwMDA0ZiwgMHhiY2Y1NzI1YywgMHgwMDAwMDA2NworLmxvbmcgMHhjNTNiNjY0NCwgMHgwMDAwMDBkYywgMHgzNDdlZmI1YiwgMHgwMDAwMDBlYQorLmxvbmcgMHg3NjI5NDM4YiwgMHgwMDAwMDA5NywgMHhkY2M2MjNjYiwgMHgwMDAwMDBmMgorLmxvbmcgMHg2OGZjZWRiNiwgMHgwMDAwMDBjZiwgMHg2M2YxZTRiOCwgMHgwMDAwMDBjZQorLmxvbmcgMHhjYWRjMzFkNywgMHgwMDAwMDBmMCwgMHgxMDg1NjM0MiwgMHgwMDAwMDBiNAorLmxvbmcgMHg0MDIyOTcxMywgMHgwMDAwMDBlNiwgMHgyMDExYzY4NCwgMHgwMDAwMDA3MworLmxvbmcgMHg3ZDI0NGE4NSwgMHgwMDAwMDA5NiwgMHhmODNkYmJkMiwgMHgwMDAwMDBhYworLmxvbmcgMHgxMTMyZjlhZSwgMHgwMDAwMDA3NCwgMHg2ZGExMjljNywgMHgwMDAwMDAyMgorLmxvbmcgMHg0YjJmOWUxZCwgMHgwMDAwMDBlNywgMHhmMzMwYjJkYywgMHgwMDAwMDBhZAorLmxvbmcgMHhlYzUyODYwZCwgMHgwMDAwMDAzNSwgMHhkMGUzYzE3NywgMHgwMDAwMDA4NQorLmxvbmcgMHg2YzE2YjMyYiwgMHgwMDAwMDBlMiwgMHg5OWI5NzBhOSwgMHgwMDAwMDBmOQorLmxvbmcgMHhmYTQ4OTQxMSwgMHgwMDAwMDAzNywgMHgyMjY0ZTk0NywgMHgwMDAwMDBlOAorLmxvbmcgMHhjNDhjZmNhOCwgMHgwMDAwMDAxYywgMHgxYTNmZjBhMCwgMHgwMDAwMDA3NQorLmxvbmcgMHhkODJjN2Q1NiwgMHgwMDAwMDBkZiwgMHhlZjkwMzMyMiwgMHgwMDAwMDA2ZQorLmxvbmcgMHhjNzRlNDk4NywgMHgwMDAwMDA0NywgMHhjMWQxMzhkOSwgMHgwMDAwMDBmMQorLmxvbmcgMHhmZWEyY2E4YywgMHgwMDAwMDAxYSwgMHgzNjBiZDQ5OCwgMHgwMDAwMDA3MQorLmxvbmcgMHhjZjgxZjVhNiwgMHgwMDAwMDAxZCwgMHgyOGRlN2FhNSwgMHgwMDAwMDAyOQorLmxvbmcgMHgyNjhlYjdkYSwgMHgwMDAwMDBjNSwgMHhhNGJmYWQzZiwgMHgwMDAwMDA4OQorLmxvbmcgMHhlNDlkM2EyYywgMHgwMDAwMDA2ZiwgMHgwZDkyNzg1MCwgMHgwMDAwMDBiNworLmxvbmcgMHg5YmNjNWY2YSwgMHgwMDAwMDA2MiwgMHg2MjQ2N2U1NCwgMHgwMDAwMDAwZQorLmxvbmcgMHhjMjEzOGRmNiwgMHgwMDAwMDBhYSwgMHhlOGI4ZDg5MCwgMHgwMDAwMDAxOAorLmxvbmcgMHg1ZWY3MzkyZSwgMHgwMDAwMDBiZSwgMHhmNWFmYzM4MiwgMHgwMDAwMDAxYgorLmxvbmcgMHhiZTgwNWQ5ZiwgMHgwMDAwMDBmYywgMHg3YzkzZDA2OSwgMHgwMDAwMDA1NgorLmxvbmcgMHhhOTJkZDU2ZiwgMHgwMDAwMDAzZSwgMHhiMzEyMjVjZiwgMHgwMDAwMDA0YgorLmxvbmcgMHgzYjk5YWNjOCwgMHgwMDAwMDBjNiwgMHhhNzdkMTgxMCwgMHgwMDAwMDBkMgorLmxvbmcgMHg2ZTYzOWNlOCwgMHgwMDAwMDA3OSwgMHg3YmJiM2JkYiwgMHgwMDAwMDAyMAorLmxvbmcgMHgwOTc4MjZjZCwgMHgwMDAwMDA5YSwgMHhmNDE4NTk2ZSwgMHgwMDAwMDBkYgorLmxvbmcgMHgwMWI3OWFlYywgMHgwMDAwMDBjMCwgMHhhODlhNGY4MywgMHgwMDAwMDBmZQorLmxvbmcgMHg2NTZlOTVlNiwgMHgwMDAwMDA3OCwgMHg3ZWU2ZmZhYSwgMHgwMDAwMDBjZAorLmxvbmcgMHgwOGNmYmMyMSwgMHgwMDAwMDA1YSwgMHhlNmU4MTVlZiwgMHgwMDAwMDBmNAorLmxvbmcgMHhkOTliZTdiYSwgMHgwMDAwMDAxZiwgMHhjZTM2NmY0YSwgMHgwMDAwMDBkZAorLmxvbmcgMHhkNDA5OWZlYSwgMHgwMDAwMDBhOCwgMHhkNjdjYjAyOSwgMHgwMDAwMDAzMworLmxvbmcgMHhhZmIyYTQzMSwgMHgwMDAwMDA4OCwgMHgzMTIzM2YyYSwgMHgwMDAwMDAwNworLmxvbmcgMHgzMDk0YTVjNiwgMHgwMDAwMDBjNywgMHhjMDY2YTIzNSwgMHgwMDAwMDAzMQorLmxvbmcgMHgzN2JjNGU3NCwgMHgwMDAwMDBiMSwgMHhhNmNhODJmYywgMHgwMDAwMDAxMgorLmxvbmcgMHhiMGQwOTBlMCwgMHgwMDAwMDAxMCwgMHgxNWQ4YTczMywgMHgwMDAwMDA1OQorLmxvbmcgMHg0YTk4MDRmMSwgMHgwMDAwMDAyNywgMHhmN2RhZWM0MSwgMHgwMDAwMDA4MAorLmxvbmcgMHgwZTUwY2Q3ZiwgMHgwMDAwMDBlYywgMHgyZmY2OTExNywgMHgwMDAwMDA1ZgorLmxvbmcgMHg4ZGQ2NGQ3NiwgMHgwMDAwMDA2MCwgMHg0ZGIwZWY0MywgMHgwMDAwMDA1MQorLmxvbmcgMHg1NDRkYWFjYywgMHgwMDAwMDA3ZiwgMHhkZjA0OTZlNCwgMHgwMDAwMDBhOQorLmxvbmcgMHhlM2I1ZDE5ZSwgMHgwMDAwMDAxOSwgMHgxYjg4NmE0YywgMHgwMDAwMDBiNQorLmxvbmcgMHhiODFmMmNjMSwgMHgwMDAwMDA0YSwgMHg3ZjUxNjU0NiwgMHgwMDAwMDAwZAorLmxvbmcgMHgwNGVhNWU5ZCwgMHgwMDAwMDAyZCwgMHg1ZDM1OGMwMSwgMHgwMDAwMDBlNQorLmxvbmcgMHg3Mzc0ODdmYSwgMHgwMDAwMDA3YSwgMHgyZTQxMGJmYiwgMHgwMDAwMDA5ZgorLmxvbmcgMHg1YTFkNjdiMywgMHgwMDAwMDA5MywgMHg1MmQyZGI5MiwgMHgwMDAwMDBjOQorLmxvbmcgMHgzMzU2MTBlOSwgMHgwMDAwMDA5YywgMHgxMzQ3ZDY2ZCwgMHgwMDAwMDBlZgorLmxvbmcgMHg4YzYxZDc5YSwgMHgwMDAwMDBhMCwgMHg3YTBjYTEzNywgMHgwMDAwMDBlMAorLmxvbmcgMHg4ZTE0Zjg1OSwgMHgwMDAwMDAzYiwgMHg4OTNjMTNlYiwgMHgwMDAwMDA0ZAorLmxvbmcgMHhlZTI3YTljZSwgMHgwMDAwMDBhZSwgMHgzNWM5NjFiNywgMHgwMDAwMDAyYQorLmxvbmcgMHhlZGU1MWNlMSwgMHgwMDAwMDBmNSwgMHgzY2IxNDc3YSwgMHgwMDAwMDBiMAorLmxvbmcgMHg1OWRmZDI5YywgMHgwMDAwMDBjOCwgMHgzZjczZjI1NSwgMHgwMDAwMDBlYgorLmxvbmcgMHg3OWNlMTQxOCwgMHgwMDAwMDBiYiwgMHhiZjM3Yzc3MywgMHgwMDAwMDAzYworLmxvbmcgMHhlYWNkZjc1MywgMHgwMDAwMDA4MywgMHg1YmFhZmQ1ZiwgMHgwMDAwMDA1MworLmxvbmcgMHgxNDZmM2RkZiwgMHgwMDAwMDA5OSwgMHg4NmRiNDQ3OCwgMHgwMDAwMDA2MQorLmxvbmcgMHg4MWYzYWZjYSwgMHgwMDAwMDAxNywgMHgzZWM0NjhiOSwgMHgwMDAwMDAyYgorLmxvbmcgMHgyYzM0MjQzOCwgMHgwMDAwMDAwNCwgMHg1ZjQwYTNjMiwgMHgwMDAwMDA3ZQorLmxvbmcgMHg3MmMzMWQxNiwgMHgwMDAwMDBiYSwgMHgwYzI1ZTJiYywgMHgwMDAwMDA3NworLmxvbmcgMHg4YjQ5M2MyOCwgMHgwMDAwMDBkNiwgMHg0MTk1MGRmZiwgMHgwMDAwMDAyNgorLmxvbmcgMHg3MTAxYTgzOSwgMHgwMDAwMDBlMSwgMHhkZWIzMGMwOCwgMHgwMDAwMDA2OQorLmxvbmcgMHg5Y2U0YjRkOCwgMHgwMDAwMDAxNCwgMHg5MGMxNTY2NCwgMHgwMDAwMDA2MworLmxvbmcgMHg2MTg0Y2I3YiwgMHgwMDAwMDA1NSwgMHg3MGI2MzJkNSwgMHgwMDAwMDAyMQorLmxvbmcgMHg3NDVjNmM0OCwgMHgwMDAwMDAwYywgMHg0MjU3YjhkMCwgMHgwMDAwMDA3ZAorCisjZW5kaWYgLypIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKi8KKyNlbmRpZiAvKl9fQVJNRUxfXyAqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3Jpam5kYWVsLXRhYmxlcy5oIGIvY2lwaGVyL3Jpam5kYWVsLXRhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTViMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvcmlqbmRhZWwtdGFibGVzLmgKQEAgLTAsMCArMSwxNjg2IEBACisvKiByaWpuZGFlbC10YWJsZXMuaCAtIFJpam5kYWVsIChBRVMpIGZvciBHbnVQRywKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNywKKyAqICAgICAgICAgICAgICAgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogVG8ga2VlcCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGF0IGEgcmVhZGFibGUgc2l6ZSB3ZSB1c2UgdGhpcworICAgaW5jbHVkZSBmaWxlIHRvIGRlZmluZSB0aGUgdGFibGVzLiAgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgU1syNTZdID0KKyAgeworICAgICA5OSwgMTI0LCAxMTksIDEyMywgMjQyLCAxMDcsIDExMSwgMTk3LAorICAgICA0OCwgICAxLCAxMDMsICA0MywgMjU0LCAyMTUsIDE3MSwgMTE4LAorICAgIDIwMiwgMTMwLCAyMDEsIDEyNSwgMjUwLCAgODksICA3MSwgMjQwLAorICAgIDE3MywgMjEyLCAxNjIsIDE3NSwgMTU2LCAxNjQsIDExNCwgMTkyLAorICAgIDE4MywgMjUzLCAxNDcsICAzOCwgIDU0LCAgNjMsIDI0NywgMjA0LAorICAgICA1MiwgMTY1LCAyMjksIDI0MSwgMTEzLCAyMTYsICA0OSwgIDIxLAorICAgICAgNCwgMTk5LCAgMzUsIDE5NSwgIDI0LCAxNTAsICAgNSwgMTU0LAorICAgICAgNywgIDE4LCAxMjgsIDIyNiwgMjM1LCAgMzksIDE3OCwgMTE3LAorICAgICAgOSwgMTMxLCAgNDQsICAyNiwgIDI3LCAxMTAsICA5MCwgMTYwLAorICAgICA4MiwgIDU5LCAyMTQsIDE3OSwgIDQxLCAyMjcsICA0NywgMTMyLAorICAgICA4MywgMjA5LCAgIDAsIDIzNywgIDMyLCAyNTIsIDE3NywgIDkxLAorICAgIDEwNiwgMjAzLCAxOTAsICA1NywgIDc0LCAgNzYsICA4OCwgMjA3LAorICAgIDIwOCwgMjM5LCAxNzAsIDI1MSwgIDY3LCAgNzcsICA1MSwgMTMzLAorICAgICA2OSwgMjQ5LCAgIDIsIDEyNywgIDgwLCAgNjAsIDE1OSwgMTY4LAorICAgICA4MSwgMTYzLCAgNjQsIDE0MywgMTQ2LCAxNTcsICA1NiwgMjQ1LAorICAgIDE4OCwgMTgyLCAyMTgsICAzMywgIDE2LCAyNTUsIDI0MywgMjEwLAorICAgIDIwNSwgIDEyLCAgMTksIDIzNiwgIDk1LCAxNTEsICA2OCwgIDIzLAorICAgIDE5NiwgMTY3LCAxMjYsICA2MSwgMTAwLCAgOTMsICAyNSwgMTE1LAorICAgICA5NiwgMTI5LCAgNzksIDIyMCwgIDM0LCAgNDIsIDE0NCwgMTM2LAorICAgICA3MCwgMjM4LCAxODQsICAyMCwgMjIyLCAgOTQsICAxMSwgMjE5LAorICAgIDIyNCwgIDUwLCAgNTgsICAxMCwgIDczLCAgIDYsICAzNiwgIDkyLAorICAgIDE5NCwgMjExLCAxNzIsICA5OCwgMTQ1LCAxNDksIDIyOCwgMTIxLAorICAgIDIzMSwgMjAwLCAgNTUsIDEwOSwgMTQxLCAyMTMsICA3OCwgMTY5LAorICAgIDEwOCwgIDg2LCAyNDQsIDIzNCwgMTAxLCAxMjIsIDE3NCwgICA4LAorICAgIDE4NiwgMTIwLCAgMzcsICA0NiwgIDI4LCAxNjYsIDE4MCwgMTk4LAorICAgIDIzMiwgMjIxLCAxMTYsICAzMSwgIDc1LCAxODksIDEzOSwgMTM4LAorICAgIDExMiwgIDYyLCAxODEsIDEwMiwgIDcyLCAgIDMsIDI0NiwgIDE0LAorICAgICA5NywgIDUzLCAgODcsIDE4NSwgMTM0LCAxOTMsICAyOSwgMTU4LAorICAgIDIyNSwgMjQ4LCAxNTIsICAxNywgMTA1LCAyMTcsIDE0MiwgMTQ4LAorICAgIDE1NSwgIDMwLCAxMzUsIDIzMywgMjA2LCAgODUsICA0MCwgMjIzLAorICAgIDE0MCwgMTYxLCAxMzcsICAxMywgMTkxLCAyMzAsICA2NiwgMTA0LAorICAgICA2NSwgMTUzLCAgNDUsICAxNSwgMTc2LCAgODQsIDE4NywgIDIyCisgIH07CisKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVDFbMjU2XVs0XSA9CisgIHsKKyAgICB7IDB4YzYsMHg2MywweDYzLDB4YTUgfSwgeyAweGY4LDB4N2MsMHg3YywweDg0IH0sCisgICAgeyAweGVlLDB4NzcsMHg3NywweDk5IH0sIHsgMHhmNiwweDdiLDB4N2IsMHg4ZCB9LAorICAgIHsgMHhmZiwweGYyLDB4ZjIsMHgwZCB9LCB7IDB4ZDYsMHg2YiwweDZiLDB4YmQgfSwKKyAgICB7IDB4ZGUsMHg2ZiwweDZmLDB4YjEgfSwgeyAweDkxLDB4YzUsMHhjNSwweDU0IH0sCisgICAgeyAweDYwLDB4MzAsMHgzMCwweDUwIH0sIHsgMHgwMiwweDAxLDB4MDEsMHgwMyB9LAorICAgIHsgMHhjZSwweDY3LDB4NjcsMHhhOSB9LCB7IDB4NTYsMHgyYiwweDJiLDB4N2QgfSwKKyAgICB7IDB4ZTcsMHhmZSwweGZlLDB4MTkgfSwgeyAweGI1LDB4ZDcsMHhkNywweDYyIH0sCisgICAgeyAweDRkLDB4YWIsMHhhYiwweGU2IH0sIHsgMHhlYywweDc2LDB4NzYsMHg5YSB9LAorICAgIHsgMHg4ZiwweGNhLDB4Y2EsMHg0NSB9LCB7IDB4MWYsMHg4MiwweDgyLDB4OWQgfSwKKyAgICB7IDB4ODksMHhjOSwweGM5LDB4NDAgfSwgeyAweGZhLDB4N2QsMHg3ZCwweDg3IH0sCisgICAgeyAweGVmLDB4ZmEsMHhmYSwweDE1IH0sIHsgMHhiMiwweDU5LDB4NTksMHhlYiB9LAorICAgIHsgMHg4ZSwweDQ3LDB4NDcsMHhjOSB9LCB7IDB4ZmIsMHhmMCwweGYwLDB4MGIgfSwKKyAgICB7IDB4NDEsMHhhZCwweGFkLDB4ZWMgfSwgeyAweGIzLDB4ZDQsMHhkNCwweDY3IH0sCisgICAgeyAweDVmLDB4YTIsMHhhMiwweGZkIH0sIHsgMHg0NSwweGFmLDB4YWYsMHhlYSB9LAorICAgIHsgMHgyMywweDljLDB4OWMsMHhiZiB9LCB7IDB4NTMsMHhhNCwweGE0LDB4ZjcgfSwKKyAgICB7IDB4ZTQsMHg3MiwweDcyLDB4OTYgfSwgeyAweDliLDB4YzAsMHhjMCwweDViIH0sCisgICAgeyAweDc1LDB4YjcsMHhiNywweGMyIH0sIHsgMHhlMSwweGZkLDB4ZmQsMHgxYyB9LAorICAgIHsgMHgzZCwweDkzLDB4OTMsMHhhZSB9LCB7IDB4NGMsMHgyNiwweDI2LDB4NmEgfSwKKyAgICB7IDB4NmMsMHgzNiwweDM2LDB4NWEgfSwgeyAweDdlLDB4M2YsMHgzZiwweDQxIH0sCisgICAgeyAweGY1LDB4ZjcsMHhmNywweDAyIH0sIHsgMHg4MywweGNjLDB4Y2MsMHg0ZiB9LAorICAgIHsgMHg2OCwweDM0LDB4MzQsMHg1YyB9LCB7IDB4NTEsMHhhNSwweGE1LDB4ZjQgfSwKKyAgICB7IDB4ZDEsMHhlNSwweGU1LDB4MzQgfSwgeyAweGY5LDB4ZjEsMHhmMSwweDA4IH0sCisgICAgeyAweGUyLDB4NzEsMHg3MSwweDkzIH0sIHsgMHhhYiwweGQ4LDB4ZDgsMHg3MyB9LAorICAgIHsgMHg2MiwweDMxLDB4MzEsMHg1MyB9LCB7IDB4MmEsMHgxNSwweDE1LDB4M2YgfSwKKyAgICB7IDB4MDgsMHgwNCwweDA0LDB4MGMgfSwgeyAweDk1LDB4YzcsMHhjNywweDUyIH0sCisgICAgeyAweDQ2LDB4MjMsMHgyMywweDY1IH0sIHsgMHg5ZCwweGMzLDB4YzMsMHg1ZSB9LAorICAgIHsgMHgzMCwweDE4LDB4MTgsMHgyOCB9LCB7IDB4MzcsMHg5NiwweDk2LDB4YTEgfSwKKyAgICB7IDB4MGEsMHgwNSwweDA1LDB4MGYgfSwgeyAweDJmLDB4OWEsMHg5YSwweGI1IH0sCisgICAgeyAweDBlLDB4MDcsMHgwNywweDA5IH0sIHsgMHgyNCwweDEyLDB4MTIsMHgzNiB9LAorICAgIHsgMHgxYiwweDgwLDB4ODAsMHg5YiB9LCB7IDB4ZGYsMHhlMiwweGUyLDB4M2QgfSwKKyAgICB7IDB4Y2QsMHhlYiwweGViLDB4MjYgfSwgeyAweDRlLDB4MjcsMHgyNywweDY5IH0sCisgICAgeyAweDdmLDB4YjIsMHhiMiwweGNkIH0sIHsgMHhlYSwweDc1LDB4NzUsMHg5ZiB9LAorICAgIHsgMHgxMiwweDA5LDB4MDksMHgxYiB9LCB7IDB4MWQsMHg4MywweDgzLDB4OWUgfSwKKyAgICB7IDB4NTgsMHgyYywweDJjLDB4NzQgfSwgeyAweDM0LDB4MWEsMHgxYSwweDJlIH0sCisgICAgeyAweDM2LDB4MWIsMHgxYiwweDJkIH0sIHsgMHhkYywweDZlLDB4NmUsMHhiMiB9LAorICAgIHsgMHhiNCwweDVhLDB4NWEsMHhlZSB9LCB7IDB4NWIsMHhhMCwweGEwLDB4ZmIgfSwKKyAgICB7IDB4YTQsMHg1MiwweDUyLDB4ZjYgfSwgeyAweDc2LDB4M2IsMHgzYiwweDRkIH0sCisgICAgeyAweGI3LDB4ZDYsMHhkNiwweDYxIH0sIHsgMHg3ZCwweGIzLDB4YjMsMHhjZSB9LAorICAgIHsgMHg1MiwweDI5LDB4MjksMHg3YiB9LCB7IDB4ZGQsMHhlMywweGUzLDB4M2UgfSwKKyAgICB7IDB4NWUsMHgyZiwweDJmLDB4NzEgfSwgeyAweDEzLDB4ODQsMHg4NCwweDk3IH0sCisgICAgeyAweGE2LDB4NTMsMHg1MywweGY1IH0sIHsgMHhiOSwweGQxLDB4ZDEsMHg2OCB9LAorICAgIHsgMHgwMCwweDAwLDB4MDAsMHgwMCB9LCB7IDB4YzEsMHhlZCwweGVkLDB4MmMgfSwKKyAgICB7IDB4NDAsMHgyMCwweDIwLDB4NjAgfSwgeyAweGUzLDB4ZmMsMHhmYywweDFmIH0sCisgICAgeyAweDc5LDB4YjEsMHhiMSwweGM4IH0sIHsgMHhiNiwweDViLDB4NWIsMHhlZCB9LAorICAgIHsgMHhkNCwweDZhLDB4NmEsMHhiZSB9LCB7IDB4OGQsMHhjYiwweGNiLDB4NDYgfSwKKyAgICB7IDB4NjcsMHhiZSwweGJlLDB4ZDkgfSwgeyAweDcyLDB4MzksMHgzOSwweDRiIH0sCisgICAgeyAweDk0LDB4NGEsMHg0YSwweGRlIH0sIHsgMHg5OCwweDRjLDB4NGMsMHhkNCB9LAorICAgIHsgMHhiMCwweDU4LDB4NTgsMHhlOCB9LCB7IDB4ODUsMHhjZiwweGNmLDB4NGEgfSwKKyAgICB7IDB4YmIsMHhkMCwweGQwLDB4NmIgfSwgeyAweGM1LDB4ZWYsMHhlZiwweDJhIH0sCisgICAgeyAweDRmLDB4YWEsMHhhYSwweGU1IH0sIHsgMHhlZCwweGZiLDB4ZmIsMHgxNiB9LAorICAgIHsgMHg4NiwweDQzLDB4NDMsMHhjNSB9LCB7IDB4OWEsMHg0ZCwweDRkLDB4ZDcgfSwKKyAgICB7IDB4NjYsMHgzMywweDMzLDB4NTUgfSwgeyAweDExLDB4ODUsMHg4NSwweDk0IH0sCisgICAgeyAweDhhLDB4NDUsMHg0NSwweGNmIH0sIHsgMHhlOSwweGY5LDB4ZjksMHgxMCB9LAorICAgIHsgMHgwNCwweDAyLDB4MDIsMHgwNiB9LCB7IDB4ZmUsMHg3ZiwweDdmLDB4ODEgfSwKKyAgICB7IDB4YTAsMHg1MCwweDUwLDB4ZjAgfSwgeyAweDc4LDB4M2MsMHgzYywweDQ0IH0sCisgICAgeyAweDI1LDB4OWYsMHg5ZiwweGJhIH0sIHsgMHg0YiwweGE4LDB4YTgsMHhlMyB9LAorICAgIHsgMHhhMiwweDUxLDB4NTEsMHhmMyB9LCB7IDB4NWQsMHhhMywweGEzLDB4ZmUgfSwKKyAgICB7IDB4ODAsMHg0MCwweDQwLDB4YzAgfSwgeyAweDA1LDB4OGYsMHg4ZiwweDhhIH0sCisgICAgeyAweDNmLDB4OTIsMHg5MiwweGFkIH0sIHsgMHgyMSwweDlkLDB4OWQsMHhiYyB9LAorICAgIHsgMHg3MCwweDM4LDB4MzgsMHg0OCB9LCB7IDB4ZjEsMHhmNSwweGY1LDB4MDQgfSwKKyAgICB7IDB4NjMsMHhiYywweGJjLDB4ZGYgfSwgeyAweDc3LDB4YjYsMHhiNiwweGMxIH0sCisgICAgeyAweGFmLDB4ZGEsMHhkYSwweDc1IH0sIHsgMHg0MiwweDIxLDB4MjEsMHg2MyB9LAorICAgIHsgMHgyMCwweDEwLDB4MTAsMHgzMCB9LCB7IDB4ZTUsMHhmZiwweGZmLDB4MWEgfSwKKyAgICB7IDB4ZmQsMHhmMywweGYzLDB4MGUgfSwgeyAweGJmLDB4ZDIsMHhkMiwweDZkIH0sCisgICAgeyAweDgxLDB4Y2QsMHhjZCwweDRjIH0sIHsgMHgxOCwweDBjLDB4MGMsMHgxNCB9LAorICAgIHsgMHgyNiwweDEzLDB4MTMsMHgzNSB9LCB7IDB4YzMsMHhlYywweGVjLDB4MmYgfSwKKyAgICB7IDB4YmUsMHg1ZiwweDVmLDB4ZTEgfSwgeyAweDM1LDB4OTcsMHg5NywweGEyIH0sCisgICAgeyAweDg4LDB4NDQsMHg0NCwweGNjIH0sIHsgMHgyZSwweDE3LDB4MTcsMHgzOSB9LAorICAgIHsgMHg5MywweGM0LDB4YzQsMHg1NyB9LCB7IDB4NTUsMHhhNywweGE3LDB4ZjIgfSwKKyAgICB7IDB4ZmMsMHg3ZSwweDdlLDB4ODIgfSwgeyAweDdhLDB4M2QsMHgzZCwweDQ3IH0sCisgICAgeyAweGM4LDB4NjQsMHg2NCwweGFjIH0sIHsgMHhiYSwweDVkLDB4NWQsMHhlNyB9LAorICAgIHsgMHgzMiwweDE5LDB4MTksMHgyYiB9LCB7IDB4ZTYsMHg3MywweDczLDB4OTUgfSwKKyAgICB7IDB4YzAsMHg2MCwweDYwLDB4YTAgfSwgeyAweDE5LDB4ODEsMHg4MSwweDk4IH0sCisgICAgeyAweDllLDB4NGYsMHg0ZiwweGQxIH0sIHsgMHhhMywweGRjLDB4ZGMsMHg3ZiB9LAorICAgIHsgMHg0NCwweDIyLDB4MjIsMHg2NiB9LCB7IDB4NTQsMHgyYSwweDJhLDB4N2UgfSwKKyAgICB7IDB4M2IsMHg5MCwweDkwLDB4YWIgfSwgeyAweDBiLDB4ODgsMHg4OCwweDgzIH0sCisgICAgeyAweDhjLDB4NDYsMHg0NiwweGNhIH0sIHsgMHhjNywweGVlLDB4ZWUsMHgyOSB9LAorICAgIHsgMHg2YiwweGI4LDB4YjgsMHhkMyB9LCB7IDB4MjgsMHgxNCwweDE0LDB4M2MgfSwKKyAgICB7IDB4YTcsMHhkZSwweGRlLDB4NzkgfSwgeyAweGJjLDB4NWUsMHg1ZSwweGUyIH0sCisgICAgeyAweDE2LDB4MGIsMHgwYiwweDFkIH0sIHsgMHhhZCwweGRiLDB4ZGIsMHg3NiB9LAorICAgIHsgMHhkYiwweGUwLDB4ZTAsMHgzYiB9LCB7IDB4NjQsMHgzMiwweDMyLDB4NTYgfSwKKyAgICB7IDB4NzQsMHgzYSwweDNhLDB4NGUgfSwgeyAweDE0LDB4MGEsMHgwYSwweDFlIH0sCisgICAgeyAweDkyLDB4NDksMHg0OSwweGRiIH0sIHsgMHgwYywweDA2LDB4MDYsMHgwYSB9LAorICAgIHsgMHg0OCwweDI0LDB4MjQsMHg2YyB9LCB7IDB4YjgsMHg1YywweDVjLDB4ZTQgfSwKKyAgICB7IDB4OWYsMHhjMiwweGMyLDB4NWQgfSwgeyAweGJkLDB4ZDMsMHhkMywweDZlIH0sCisgICAgeyAweDQzLDB4YWMsMHhhYywweGVmIH0sIHsgMHhjNCwweDYyLDB4NjIsMHhhNiB9LAorICAgIHsgMHgzOSwweDkxLDB4OTEsMHhhOCB9LCB7IDB4MzEsMHg5NSwweDk1LDB4YTQgfSwKKyAgICB7IDB4ZDMsMHhlNCwweGU0LDB4MzcgfSwgeyAweGYyLDB4NzksMHg3OSwweDhiIH0sCisgICAgeyAweGQ1LDB4ZTcsMHhlNywweDMyIH0sIHsgMHg4YiwweGM4LDB4YzgsMHg0MyB9LAorICAgIHsgMHg2ZSwweDM3LDB4MzcsMHg1OSB9LCB7IDB4ZGEsMHg2ZCwweDZkLDB4YjcgfSwKKyAgICB7IDB4MDEsMHg4ZCwweDhkLDB4OGMgfSwgeyAweGIxLDB4ZDUsMHhkNSwweDY0IH0sCisgICAgeyAweDljLDB4NGUsMHg0ZSwweGQyIH0sIHsgMHg0OSwweGE5LDB4YTksMHhlMCB9LAorICAgIHsgMHhkOCwweDZjLDB4NmMsMHhiNCB9LCB7IDB4YWMsMHg1NiwweDU2LDB4ZmEgfSwKKyAgICB7IDB4ZjMsMHhmNCwweGY0LDB4MDcgfSwgeyAweGNmLDB4ZWEsMHhlYSwweDI1IH0sCisgICAgeyAweGNhLDB4NjUsMHg2NSwweGFmIH0sIHsgMHhmNCwweDdhLDB4N2EsMHg4ZSB9LAorICAgIHsgMHg0NywweGFlLDB4YWUsMHhlOSB9LCB7IDB4MTAsMHgwOCwweDA4LDB4MTggfSwKKyAgICB7IDB4NmYsMHhiYSwweGJhLDB4ZDUgfSwgeyAweGYwLDB4NzgsMHg3OCwweDg4IH0sCisgICAgeyAweDRhLDB4MjUsMHgyNSwweDZmIH0sIHsgMHg1YywweDJlLDB4MmUsMHg3MiB9LAorICAgIHsgMHgzOCwweDFjLDB4MWMsMHgyNCB9LCB7IDB4NTcsMHhhNiwweGE2LDB4ZjEgfSwKKyAgICB7IDB4NzMsMHhiNCwweGI0LDB4YzcgfSwgeyAweDk3LDB4YzYsMHhjNiwweDUxIH0sCisgICAgeyAweGNiLDB4ZTgsMHhlOCwweDIzIH0sIHsgMHhhMSwweGRkLDB4ZGQsMHg3YyB9LAorICAgIHsgMHhlOCwweDc0LDB4NzQsMHg5YyB9LCB7IDB4M2UsMHgxZiwweDFmLDB4MjEgfSwKKyAgICB7IDB4OTYsMHg0YiwweDRiLDB4ZGQgfSwgeyAweDYxLDB4YmQsMHhiZCwweGRjIH0sCisgICAgeyAweDBkLDB4OGIsMHg4YiwweDg2IH0sIHsgMHgwZiwweDhhLDB4OGEsMHg4NSB9LAorICAgIHsgMHhlMCwweDcwLDB4NzAsMHg5MCB9LCB7IDB4N2MsMHgzZSwweDNlLDB4NDIgfSwKKyAgICB7IDB4NzEsMHhiNSwweGI1LDB4YzQgfSwgeyAweGNjLDB4NjYsMHg2NiwweGFhIH0sCisgICAgeyAweDkwLDB4NDgsMHg0OCwweGQ4IH0sIHsgMHgwNiwweDAzLDB4MDMsMHgwNSB9LAorICAgIHsgMHhmNywweGY2LDB4ZjYsMHgwMSB9LCB7IDB4MWMsMHgwZSwweDBlLDB4MTIgfSwKKyAgICB7IDB4YzIsMHg2MSwweDYxLDB4YTMgfSwgeyAweDZhLDB4MzUsMHgzNSwweDVmIH0sCisgICAgeyAweGFlLDB4NTcsMHg1NywweGY5IH0sIHsgMHg2OSwweGI5LDB4YjksMHhkMCB9LAorICAgIHsgMHgxNywweDg2LDB4ODYsMHg5MSB9LCB7IDB4OTksMHhjMSwweGMxLDB4NTggfSwKKyAgICB7IDB4M2EsMHgxZCwweDFkLDB4MjcgfSwgeyAweDI3LDB4OWUsMHg5ZSwweGI5IH0sCisgICAgeyAweGQ5LDB4ZTEsMHhlMSwweDM4IH0sIHsgMHhlYiwweGY4LDB4ZjgsMHgxMyB9LAorICAgIHsgMHgyYiwweDk4LDB4OTgsMHhiMyB9LCB7IDB4MjIsMHgxMSwweDExLDB4MzMgfSwKKyAgICB7IDB4ZDIsMHg2OSwweDY5LDB4YmIgfSwgeyAweGE5LDB4ZDksMHhkOSwweDcwIH0sCisgICAgeyAweDA3LDB4OGUsMHg4ZSwweDg5IH0sIHsgMHgzMywweDk0LDB4OTQsMHhhNyB9LAorICAgIHsgMHgyZCwweDliLDB4OWIsMHhiNiB9LCB7IDB4M2MsMHgxZSwweDFlLDB4MjIgfSwKKyAgICB7IDB4MTUsMHg4NywweDg3LDB4OTIgfSwgeyAweGM5LDB4ZTksMHhlOSwweDIwIH0sCisgICAgeyAweDg3LDB4Y2UsMHhjZSwweDQ5IH0sIHsgMHhhYSwweDU1LDB4NTUsMHhmZiB9LAorICAgIHsgMHg1MCwweDI4LDB4MjgsMHg3OCB9LCB7IDB4YTUsMHhkZiwweGRmLDB4N2EgfSwKKyAgICB7IDB4MDMsMHg4YywweDhjLDB4OGYgfSwgeyAweDU5LDB4YTEsMHhhMSwweGY4IH0sCisgICAgeyAweDA5LDB4ODksMHg4OSwweDgwIH0sIHsgMHgxYSwweDBkLDB4MGQsMHgxNyB9LAorICAgIHsgMHg2NSwweGJmLDB4YmYsMHhkYSB9LCB7IDB4ZDcsMHhlNiwweGU2LDB4MzEgfSwKKyAgICB7IDB4ODQsMHg0MiwweDQyLDB4YzYgfSwgeyAweGQwLDB4NjgsMHg2OCwweGI4IH0sCisgICAgeyAweDgyLDB4NDEsMHg0MSwweGMzIH0sIHsgMHgyOSwweDk5LDB4OTksMHhiMCB9LAorICAgIHsgMHg1YSwweDJkLDB4MmQsMHg3NyB9LCB7IDB4MWUsMHgwZiwweDBmLDB4MTEgfSwKKyAgICB7IDB4N2IsMHhiMCwweGIwLDB4Y2IgfSwgeyAweGE4LDB4NTQsMHg1NCwweGZjIH0sCisgICAgeyAweDZkLDB4YmIsMHhiYiwweGQ2IH0sIHsgMHgyYywweDE2LDB4MTYsMHgzYSB9CisgIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFQyWzI1Nl1bNF0gPQorICB7CisgICAgeyAweGE1LDB4YzYsMHg2MywweDYzIH0sIHsgMHg4NCwweGY4LDB4N2MsMHg3YyB9LAorICAgIHsgMHg5OSwweGVlLDB4NzcsMHg3NyB9LCB7IDB4OGQsMHhmNiwweDdiLDB4N2IgfSwKKyAgICB7IDB4MGQsMHhmZiwweGYyLDB4ZjIgfSwgeyAweGJkLDB4ZDYsMHg2YiwweDZiIH0sCisgICAgeyAweGIxLDB4ZGUsMHg2ZiwweDZmIH0sIHsgMHg1NCwweDkxLDB4YzUsMHhjNSB9LAorICAgIHsgMHg1MCwweDYwLDB4MzAsMHgzMCB9LCB7IDB4MDMsMHgwMiwweDAxLDB4MDEgfSwKKyAgICB7IDB4YTksMHhjZSwweDY3LDB4NjcgfSwgeyAweDdkLDB4NTYsMHgyYiwweDJiIH0sCisgICAgeyAweDE5LDB4ZTcsMHhmZSwweGZlIH0sIHsgMHg2MiwweGI1LDB4ZDcsMHhkNyB9LAorICAgIHsgMHhlNiwweDRkLDB4YWIsMHhhYiB9LCB7IDB4OWEsMHhlYywweDc2LDB4NzYgfSwKKyAgICB7IDB4NDUsMHg4ZiwweGNhLDB4Y2EgfSwgeyAweDlkLDB4MWYsMHg4MiwweDgyIH0sCisgICAgeyAweDQwLDB4ODksMHhjOSwweGM5IH0sIHsgMHg4NywweGZhLDB4N2QsMHg3ZCB9LAorICAgIHsgMHgxNSwweGVmLDB4ZmEsMHhmYSB9LCB7IDB4ZWIsMHhiMiwweDU5LDB4NTkgfSwKKyAgICB7IDB4YzksMHg4ZSwweDQ3LDB4NDcgfSwgeyAweDBiLDB4ZmIsMHhmMCwweGYwIH0sCisgICAgeyAweGVjLDB4NDEsMHhhZCwweGFkIH0sIHsgMHg2NywweGIzLDB4ZDQsMHhkNCB9LAorICAgIHsgMHhmZCwweDVmLDB4YTIsMHhhMiB9LCB7IDB4ZWEsMHg0NSwweGFmLDB4YWYgfSwKKyAgICB7IDB4YmYsMHgyMywweDljLDB4OWMgfSwgeyAweGY3LDB4NTMsMHhhNCwweGE0IH0sCisgICAgeyAweDk2LDB4ZTQsMHg3MiwweDcyIH0sIHsgMHg1YiwweDliLDB4YzAsMHhjMCB9LAorICAgIHsgMHhjMiwweDc1LDB4YjcsMHhiNyB9LCB7IDB4MWMsMHhlMSwweGZkLDB4ZmQgfSwKKyAgICB7IDB4YWUsMHgzZCwweDkzLDB4OTMgfSwgeyAweDZhLDB4NGMsMHgyNiwweDI2IH0sCisgICAgeyAweDVhLDB4NmMsMHgzNiwweDM2IH0sIHsgMHg0MSwweDdlLDB4M2YsMHgzZiB9LAorICAgIHsgMHgwMiwweGY1LDB4ZjcsMHhmNyB9LCB7IDB4NGYsMHg4MywweGNjLDB4Y2MgfSwKKyAgICB7IDB4NWMsMHg2OCwweDM0LDB4MzQgfSwgeyAweGY0LDB4NTEsMHhhNSwweGE1IH0sCisgICAgeyAweDM0LDB4ZDEsMHhlNSwweGU1IH0sIHsgMHgwOCwweGY5LDB4ZjEsMHhmMSB9LAorICAgIHsgMHg5MywweGUyLDB4NzEsMHg3MSB9LCB7IDB4NzMsMHhhYiwweGQ4LDB4ZDggfSwKKyAgICB7IDB4NTMsMHg2MiwweDMxLDB4MzEgfSwgeyAweDNmLDB4MmEsMHgxNSwweDE1IH0sCisgICAgeyAweDBjLDB4MDgsMHgwNCwweDA0IH0sIHsgMHg1MiwweDk1LDB4YzcsMHhjNyB9LAorICAgIHsgMHg2NSwweDQ2LDB4MjMsMHgyMyB9LCB7IDB4NWUsMHg5ZCwweGMzLDB4YzMgfSwKKyAgICB7IDB4MjgsMHgzMCwweDE4LDB4MTggfSwgeyAweGExLDB4MzcsMHg5NiwweDk2IH0sCisgICAgeyAweDBmLDB4MGEsMHgwNSwweDA1IH0sIHsgMHhiNSwweDJmLDB4OWEsMHg5YSB9LAorICAgIHsgMHgwOSwweDBlLDB4MDcsMHgwNyB9LCB7IDB4MzYsMHgyNCwweDEyLDB4MTIgfSwKKyAgICB7IDB4OWIsMHgxYiwweDgwLDB4ODAgfSwgeyAweDNkLDB4ZGYsMHhlMiwweGUyIH0sCisgICAgeyAweDI2LDB4Y2QsMHhlYiwweGViIH0sIHsgMHg2OSwweDRlLDB4MjcsMHgyNyB9LAorICAgIHsgMHhjZCwweDdmLDB4YjIsMHhiMiB9LCB7IDB4OWYsMHhlYSwweDc1LDB4NzUgfSwKKyAgICB7IDB4MWIsMHgxMiwweDA5LDB4MDkgfSwgeyAweDllLDB4MWQsMHg4MywweDgzIH0sCisgICAgeyAweDc0LDB4NTgsMHgyYywweDJjIH0sIHsgMHgyZSwweDM0LDB4MWEsMHgxYSB9LAorICAgIHsgMHgyZCwweDM2LDB4MWIsMHgxYiB9LCB7IDB4YjIsMHhkYywweDZlLDB4NmUgfSwKKyAgICB7IDB4ZWUsMHhiNCwweDVhLDB4NWEgfSwgeyAweGZiLDB4NWIsMHhhMCwweGEwIH0sCisgICAgeyAweGY2LDB4YTQsMHg1MiwweDUyIH0sIHsgMHg0ZCwweDc2LDB4M2IsMHgzYiB9LAorICAgIHsgMHg2MSwweGI3LDB4ZDYsMHhkNiB9LCB7IDB4Y2UsMHg3ZCwweGIzLDB4YjMgfSwKKyAgICB7IDB4N2IsMHg1MiwweDI5LDB4MjkgfSwgeyAweDNlLDB4ZGQsMHhlMywweGUzIH0sCisgICAgeyAweDcxLDB4NWUsMHgyZiwweDJmIH0sIHsgMHg5NywweDEzLDB4ODQsMHg4NCB9LAorICAgIHsgMHhmNSwweGE2LDB4NTMsMHg1MyB9LCB7IDB4NjgsMHhiOSwweGQxLDB4ZDEgfSwKKyAgICB7IDB4MDAsMHgwMCwweDAwLDB4MDAgfSwgeyAweDJjLDB4YzEsMHhlZCwweGVkIH0sCisgICAgeyAweDYwLDB4NDAsMHgyMCwweDIwIH0sIHsgMHgxZiwweGUzLDB4ZmMsMHhmYyB9LAorICAgIHsgMHhjOCwweDc5LDB4YjEsMHhiMSB9LCB7IDB4ZWQsMHhiNiwweDViLDB4NWIgfSwKKyAgICB7IDB4YmUsMHhkNCwweDZhLDB4NmEgfSwgeyAweDQ2LDB4OGQsMHhjYiwweGNiIH0sCisgICAgeyAweGQ5LDB4NjcsMHhiZSwweGJlIH0sIHsgMHg0YiwweDcyLDB4MzksMHgzOSB9LAorICAgIHsgMHhkZSwweDk0LDB4NGEsMHg0YSB9LCB7IDB4ZDQsMHg5OCwweDRjLDB4NGMgfSwKKyAgICB7IDB4ZTgsMHhiMCwweDU4LDB4NTggfSwgeyAweDRhLDB4ODUsMHhjZiwweGNmIH0sCisgICAgeyAweDZiLDB4YmIsMHhkMCwweGQwIH0sIHsgMHgyYSwweGM1LDB4ZWYsMHhlZiB9LAorICAgIHsgMHhlNSwweDRmLDB4YWEsMHhhYSB9LCB7IDB4MTYsMHhlZCwweGZiLDB4ZmIgfSwKKyAgICB7IDB4YzUsMHg4NiwweDQzLDB4NDMgfSwgeyAweGQ3LDB4OWEsMHg0ZCwweDRkIH0sCisgICAgeyAweDU1LDB4NjYsMHgzMywweDMzIH0sIHsgMHg5NCwweDExLDB4ODUsMHg4NSB9LAorICAgIHsgMHhjZiwweDhhLDB4NDUsMHg0NSB9LCB7IDB4MTAsMHhlOSwweGY5LDB4ZjkgfSwKKyAgICB7IDB4MDYsMHgwNCwweDAyLDB4MDIgfSwgeyAweDgxLDB4ZmUsMHg3ZiwweDdmIH0sCisgICAgeyAweGYwLDB4YTAsMHg1MCwweDUwIH0sIHsgMHg0NCwweDc4LDB4M2MsMHgzYyB9LAorICAgIHsgMHhiYSwweDI1LDB4OWYsMHg5ZiB9LCB7IDB4ZTMsMHg0YiwweGE4LDB4YTggfSwKKyAgICB7IDB4ZjMsMHhhMiwweDUxLDB4NTEgfSwgeyAweGZlLDB4NWQsMHhhMywweGEzIH0sCisgICAgeyAweGMwLDB4ODAsMHg0MCwweDQwIH0sIHsgMHg4YSwweDA1LDB4OGYsMHg4ZiB9LAorICAgIHsgMHhhZCwweDNmLDB4OTIsMHg5MiB9LCB7IDB4YmMsMHgyMSwweDlkLDB4OWQgfSwKKyAgICB7IDB4NDgsMHg3MCwweDM4LDB4MzggfSwgeyAweDA0LDB4ZjEsMHhmNSwweGY1IH0sCisgICAgeyAweGRmLDB4NjMsMHhiYywweGJjIH0sIHsgMHhjMSwweDc3LDB4YjYsMHhiNiB9LAorICAgIHsgMHg3NSwweGFmLDB4ZGEsMHhkYSB9LCB7IDB4NjMsMHg0MiwweDIxLDB4MjEgfSwKKyAgICB7IDB4MzAsMHgyMCwweDEwLDB4MTAgfSwgeyAweDFhLDB4ZTUsMHhmZiwweGZmIH0sCisgICAgeyAweDBlLDB4ZmQsMHhmMywweGYzIH0sIHsgMHg2ZCwweGJmLDB4ZDIsMHhkMiB9LAorICAgIHsgMHg0YywweDgxLDB4Y2QsMHhjZCB9LCB7IDB4MTQsMHgxOCwweDBjLDB4MGMgfSwKKyAgICB7IDB4MzUsMHgyNiwweDEzLDB4MTMgfSwgeyAweDJmLDB4YzMsMHhlYywweGVjIH0sCisgICAgeyAweGUxLDB4YmUsMHg1ZiwweDVmIH0sIHsgMHhhMiwweDM1LDB4OTcsMHg5NyB9LAorICAgIHsgMHhjYywweDg4LDB4NDQsMHg0NCB9LCB7IDB4MzksMHgyZSwweDE3LDB4MTcgfSwKKyAgICB7IDB4NTcsMHg5MywweGM0LDB4YzQgfSwgeyAweGYyLDB4NTUsMHhhNywweGE3IH0sCisgICAgeyAweDgyLDB4ZmMsMHg3ZSwweDdlIH0sIHsgMHg0NywweDdhLDB4M2QsMHgzZCB9LAorICAgIHsgMHhhYywweGM4LDB4NjQsMHg2NCB9LCB7IDB4ZTcsMHhiYSwweDVkLDB4NWQgfSwKKyAgICB7IDB4MmIsMHgzMiwweDE5LDB4MTkgfSwgeyAweDk1LDB4ZTYsMHg3MywweDczIH0sCisgICAgeyAweGEwLDB4YzAsMHg2MCwweDYwIH0sIHsgMHg5OCwweDE5LDB4ODEsMHg4MSB9LAorICAgIHsgMHhkMSwweDllLDB4NGYsMHg0ZiB9LCB7IDB4N2YsMHhhMywweGRjLDB4ZGMgfSwKKyAgICB7IDB4NjYsMHg0NCwweDIyLDB4MjIgfSwgeyAweDdlLDB4NTQsMHgyYSwweDJhIH0sCisgICAgeyAweGFiLDB4M2IsMHg5MCwweDkwIH0sIHsgMHg4MywweDBiLDB4ODgsMHg4OCB9LAorICAgIHsgMHhjYSwweDhjLDB4NDYsMHg0NiB9LCB7IDB4MjksMHhjNywweGVlLDB4ZWUgfSwKKyAgICB7IDB4ZDMsMHg2YiwweGI4LDB4YjggfSwgeyAweDNjLDB4MjgsMHgxNCwweDE0IH0sCisgICAgeyAweDc5LDB4YTcsMHhkZSwweGRlIH0sIHsgMHhlMiwweGJjLDB4NWUsMHg1ZSB9LAorICAgIHsgMHgxZCwweDE2LDB4MGIsMHgwYiB9LCB7IDB4NzYsMHhhZCwweGRiLDB4ZGIgfSwKKyAgICB7IDB4M2IsMHhkYiwweGUwLDB4ZTAgfSwgeyAweDU2LDB4NjQsMHgzMiwweDMyIH0sCisgICAgeyAweDRlLDB4NzQsMHgzYSwweDNhIH0sIHsgMHgxZSwweDE0LDB4MGEsMHgwYSB9LAorICAgIHsgMHhkYiwweDkyLDB4NDksMHg0OSB9LCB7IDB4MGEsMHgwYywweDA2LDB4MDYgfSwKKyAgICB7IDB4NmMsMHg0OCwweDI0LDB4MjQgfSwgeyAweGU0LDB4YjgsMHg1YywweDVjIH0sCisgICAgeyAweDVkLDB4OWYsMHhjMiwweGMyIH0sIHsgMHg2ZSwweGJkLDB4ZDMsMHhkMyB9LAorICAgIHsgMHhlZiwweDQzLDB4YWMsMHhhYyB9LCB7IDB4YTYsMHhjNCwweDYyLDB4NjIgfSwKKyAgICB7IDB4YTgsMHgzOSwweDkxLDB4OTEgfSwgeyAweGE0LDB4MzEsMHg5NSwweDk1IH0sCisgICAgeyAweDM3LDB4ZDMsMHhlNCwweGU0IH0sIHsgMHg4YiwweGYyLDB4NzksMHg3OSB9LAorICAgIHsgMHgzMiwweGQ1LDB4ZTcsMHhlNyB9LCB7IDB4NDMsMHg4YiwweGM4LDB4YzggfSwKKyAgICB7IDB4NTksMHg2ZSwweDM3LDB4MzcgfSwgeyAweGI3LDB4ZGEsMHg2ZCwweDZkIH0sCisgICAgeyAweDhjLDB4MDEsMHg4ZCwweDhkIH0sIHsgMHg2NCwweGIxLDB4ZDUsMHhkNSB9LAorICAgIHsgMHhkMiwweDljLDB4NGUsMHg0ZSB9LCB7IDB4ZTAsMHg0OSwweGE5LDB4YTkgfSwKKyAgICB7IDB4YjQsMHhkOCwweDZjLDB4NmMgfSwgeyAweGZhLDB4YWMsMHg1NiwweDU2IH0sCisgICAgeyAweDA3LDB4ZjMsMHhmNCwweGY0IH0sIHsgMHgyNSwweGNmLDB4ZWEsMHhlYSB9LAorICAgIHsgMHhhZiwweGNhLDB4NjUsMHg2NSB9LCB7IDB4OGUsMHhmNCwweDdhLDB4N2EgfSwKKyAgICB7IDB4ZTksMHg0NywweGFlLDB4YWUgfSwgeyAweDE4LDB4MTAsMHgwOCwweDA4IH0sCisgICAgeyAweGQ1LDB4NmYsMHhiYSwweGJhIH0sIHsgMHg4OCwweGYwLDB4NzgsMHg3OCB9LAorICAgIHsgMHg2ZiwweDRhLDB4MjUsMHgyNSB9LCB7IDB4NzIsMHg1YywweDJlLDB4MmUgfSwKKyAgICB7IDB4MjQsMHgzOCwweDFjLDB4MWMgfSwgeyAweGYxLDB4NTcsMHhhNiwweGE2IH0sCisgICAgeyAweGM3LDB4NzMsMHhiNCwweGI0IH0sIHsgMHg1MSwweDk3LDB4YzYsMHhjNiB9LAorICAgIHsgMHgyMywweGNiLDB4ZTgsMHhlOCB9LCB7IDB4N2MsMHhhMSwweGRkLDB4ZGQgfSwKKyAgICB7IDB4OWMsMHhlOCwweDc0LDB4NzQgfSwgeyAweDIxLDB4M2UsMHgxZiwweDFmIH0sCisgICAgeyAweGRkLDB4OTYsMHg0YiwweDRiIH0sIHsgMHhkYywweDYxLDB4YmQsMHhiZCB9LAorICAgIHsgMHg4NiwweDBkLDB4OGIsMHg4YiB9LCB7IDB4ODUsMHgwZiwweDhhLDB4OGEgfSwKKyAgICB7IDB4OTAsMHhlMCwweDcwLDB4NzAgfSwgeyAweDQyLDB4N2MsMHgzZSwweDNlIH0sCisgICAgeyAweGM0LDB4NzEsMHhiNSwweGI1IH0sIHsgMHhhYSwweGNjLDB4NjYsMHg2NiB9LAorICAgIHsgMHhkOCwweDkwLDB4NDgsMHg0OCB9LCB7IDB4MDUsMHgwNiwweDAzLDB4MDMgfSwKKyAgICB7IDB4MDEsMHhmNywweGY2LDB4ZjYgfSwgeyAweDEyLDB4MWMsMHgwZSwweDBlIH0sCisgICAgeyAweGEzLDB4YzIsMHg2MSwweDYxIH0sIHsgMHg1ZiwweDZhLDB4MzUsMHgzNSB9LAorICAgIHsgMHhmOSwweGFlLDB4NTcsMHg1NyB9LCB7IDB4ZDAsMHg2OSwweGI5LDB4YjkgfSwKKyAgICB7IDB4OTEsMHgxNywweDg2LDB4ODYgfSwgeyAweDU4LDB4OTksMHhjMSwweGMxIH0sCisgICAgeyAweDI3LDB4M2EsMHgxZCwweDFkIH0sIHsgMHhiOSwweDI3LDB4OWUsMHg5ZSB9LAorICAgIHsgMHgzOCwweGQ5LDB4ZTEsMHhlMSB9LCB7IDB4MTMsMHhlYiwweGY4LDB4ZjggfSwKKyAgICB7IDB4YjMsMHgyYiwweDk4LDB4OTggfSwgeyAweDMzLDB4MjIsMHgxMSwweDExIH0sCisgICAgeyAweGJiLDB4ZDIsMHg2OSwweDY5IH0sIHsgMHg3MCwweGE5LDB4ZDksMHhkOSB9LAorICAgIHsgMHg4OSwweDA3LDB4OGUsMHg4ZSB9LCB7IDB4YTcsMHgzMywweDk0LDB4OTQgfSwKKyAgICB7IDB4YjYsMHgyZCwweDliLDB4OWIgfSwgeyAweDIyLDB4M2MsMHgxZSwweDFlIH0sCisgICAgeyAweDkyLDB4MTUsMHg4NywweDg3IH0sIHsgMHgyMCwweGM5LDB4ZTksMHhlOSB9LAorICAgIHsgMHg0OSwweDg3LDB4Y2UsMHhjZSB9LCB7IDB4ZmYsMHhhYSwweDU1LDB4NTUgfSwKKyAgICB7IDB4NzgsMHg1MCwweDI4LDB4MjggfSwgeyAweDdhLDB4YTUsMHhkZiwweGRmIH0sCisgICAgeyAweDhmLDB4MDMsMHg4YywweDhjIH0sIHsgMHhmOCwweDU5LDB4YTEsMHhhMSB9LAorICAgIHsgMHg4MCwweDA5LDB4ODksMHg4OSB9LCB7IDB4MTcsMHgxYSwweDBkLDB4MGQgfSwKKyAgICB7IDB4ZGEsMHg2NSwweGJmLDB4YmYgfSwgeyAweDMxLDB4ZDcsMHhlNiwweGU2IH0sCisgICAgeyAweGM2LDB4ODQsMHg0MiwweDQyIH0sIHsgMHhiOCwweGQwLDB4NjgsMHg2OCB9LAorICAgIHsgMHhjMywweDgyLDB4NDEsMHg0MSB9LCB7IDB4YjAsMHgyOSwweDk5LDB4OTkgfSwKKyAgICB7IDB4NzcsMHg1YSwweDJkLDB4MmQgfSwgeyAweDExLDB4MWUsMHgwZiwweDBmIH0sCisgICAgeyAweGNiLDB4N2IsMHhiMCwweGIwIH0sIHsgMHhmYywweGE4LDB4NTQsMHg1NCB9LAorICAgIHsgMHhkNiwweDZkLDB4YmIsMHhiYiB9LCB7IDB4M2EsMHgyYywweDE2LDB4MTYgfQorICB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBUM1syNTZdWzRdID0KKyAgeworICAgIHsgMHg2MywweGE1LDB4YzYsMHg2MyB9LCB7IDB4N2MsMHg4NCwweGY4LDB4N2MgfSwKKyAgICB7IDB4NzcsMHg5OSwweGVlLDB4NzcgfSwgeyAweDdiLDB4OGQsMHhmNiwweDdiIH0sCisgICAgeyAweGYyLDB4MGQsMHhmZiwweGYyIH0sIHsgMHg2YiwweGJkLDB4ZDYsMHg2YiB9LAorICAgIHsgMHg2ZiwweGIxLDB4ZGUsMHg2ZiB9LCB7IDB4YzUsMHg1NCwweDkxLDB4YzUgfSwKKyAgICB7IDB4MzAsMHg1MCwweDYwLDB4MzAgfSwgeyAweDAxLDB4MDMsMHgwMiwweDAxIH0sCisgICAgeyAweDY3LDB4YTksMHhjZSwweDY3IH0sIHsgMHgyYiwweDdkLDB4NTYsMHgyYiB9LAorICAgIHsgMHhmZSwweDE5LDB4ZTcsMHhmZSB9LCB7IDB4ZDcsMHg2MiwweGI1LDB4ZDcgfSwKKyAgICB7IDB4YWIsMHhlNiwweDRkLDB4YWIgfSwgeyAweDc2LDB4OWEsMHhlYywweDc2IH0sCisgICAgeyAweGNhLDB4NDUsMHg4ZiwweGNhIH0sIHsgMHg4MiwweDlkLDB4MWYsMHg4MiB9LAorICAgIHsgMHhjOSwweDQwLDB4ODksMHhjOSB9LCB7IDB4N2QsMHg4NywweGZhLDB4N2QgfSwKKyAgICB7IDB4ZmEsMHgxNSwweGVmLDB4ZmEgfSwgeyAweDU5LDB4ZWIsMHhiMiwweDU5IH0sCisgICAgeyAweDQ3LDB4YzksMHg4ZSwweDQ3IH0sIHsgMHhmMCwweDBiLDB4ZmIsMHhmMCB9LAorICAgIHsgMHhhZCwweGVjLDB4NDEsMHhhZCB9LCB7IDB4ZDQsMHg2NywweGIzLDB4ZDQgfSwKKyAgICB7IDB4YTIsMHhmZCwweDVmLDB4YTIgfSwgeyAweGFmLDB4ZWEsMHg0NSwweGFmIH0sCisgICAgeyAweDljLDB4YmYsMHgyMywweDljIH0sIHsgMHhhNCwweGY3LDB4NTMsMHhhNCB9LAorICAgIHsgMHg3MiwweDk2LDB4ZTQsMHg3MiB9LCB7IDB4YzAsMHg1YiwweDliLDB4YzAgfSwKKyAgICB7IDB4YjcsMHhjMiwweDc1LDB4YjcgfSwgeyAweGZkLDB4MWMsMHhlMSwweGZkIH0sCisgICAgeyAweDkzLDB4YWUsMHgzZCwweDkzIH0sIHsgMHgyNiwweDZhLDB4NGMsMHgyNiB9LAorICAgIHsgMHgzNiwweDVhLDB4NmMsMHgzNiB9LCB7IDB4M2YsMHg0MSwweDdlLDB4M2YgfSwKKyAgICB7IDB4ZjcsMHgwMiwweGY1LDB4ZjcgfSwgeyAweGNjLDB4NGYsMHg4MywweGNjIH0sCisgICAgeyAweDM0LDB4NWMsMHg2OCwweDM0IH0sIHsgMHhhNSwweGY0LDB4NTEsMHhhNSB9LAorICAgIHsgMHhlNSwweDM0LDB4ZDEsMHhlNSB9LCB7IDB4ZjEsMHgwOCwweGY5LDB4ZjEgfSwKKyAgICB7IDB4NzEsMHg5MywweGUyLDB4NzEgfSwgeyAweGQ4LDB4NzMsMHhhYiwweGQ4IH0sCisgICAgeyAweDMxLDB4NTMsMHg2MiwweDMxIH0sIHsgMHgxNSwweDNmLDB4MmEsMHgxNSB9LAorICAgIHsgMHgwNCwweDBjLDB4MDgsMHgwNCB9LCB7IDB4YzcsMHg1MiwweDk1LDB4YzcgfSwKKyAgICB7IDB4MjMsMHg2NSwweDQ2LDB4MjMgfSwgeyAweGMzLDB4NWUsMHg5ZCwweGMzIH0sCisgICAgeyAweDE4LDB4MjgsMHgzMCwweDE4IH0sIHsgMHg5NiwweGExLDB4MzcsMHg5NiB9LAorICAgIHsgMHgwNSwweDBmLDB4MGEsMHgwNSB9LCB7IDB4OWEsMHhiNSwweDJmLDB4OWEgfSwKKyAgICB7IDB4MDcsMHgwOSwweDBlLDB4MDcgfSwgeyAweDEyLDB4MzYsMHgyNCwweDEyIH0sCisgICAgeyAweDgwLDB4OWIsMHgxYiwweDgwIH0sIHsgMHhlMiwweDNkLDB4ZGYsMHhlMiB9LAorICAgIHsgMHhlYiwweDI2LDB4Y2QsMHhlYiB9LCB7IDB4MjcsMHg2OSwweDRlLDB4MjcgfSwKKyAgICB7IDB4YjIsMHhjZCwweDdmLDB4YjIgfSwgeyAweDc1LDB4OWYsMHhlYSwweDc1IH0sCisgICAgeyAweDA5LDB4MWIsMHgxMiwweDA5IH0sIHsgMHg4MywweDllLDB4MWQsMHg4MyB9LAorICAgIHsgMHgyYywweDc0LDB4NTgsMHgyYyB9LCB7IDB4MWEsMHgyZSwweDM0LDB4MWEgfSwKKyAgICB7IDB4MWIsMHgyZCwweDM2LDB4MWIgfSwgeyAweDZlLDB4YjIsMHhkYywweDZlIH0sCisgICAgeyAweDVhLDB4ZWUsMHhiNCwweDVhIH0sIHsgMHhhMCwweGZiLDB4NWIsMHhhMCB9LAorICAgIHsgMHg1MiwweGY2LDB4YTQsMHg1MiB9LCB7IDB4M2IsMHg0ZCwweDc2LDB4M2IgfSwKKyAgICB7IDB4ZDYsMHg2MSwweGI3LDB4ZDYgfSwgeyAweGIzLDB4Y2UsMHg3ZCwweGIzIH0sCisgICAgeyAweDI5LDB4N2IsMHg1MiwweDI5IH0sIHsgMHhlMywweDNlLDB4ZGQsMHhlMyB9LAorICAgIHsgMHgyZiwweDcxLDB4NWUsMHgyZiB9LCB7IDB4ODQsMHg5NywweDEzLDB4ODQgfSwKKyAgICB7IDB4NTMsMHhmNSwweGE2LDB4NTMgfSwgeyAweGQxLDB4NjgsMHhiOSwweGQxIH0sCisgICAgeyAweDAwLDB4MDAsMHgwMCwweDAwIH0sIHsgMHhlZCwweDJjLDB4YzEsMHhlZCB9LAorICAgIHsgMHgyMCwweDYwLDB4NDAsMHgyMCB9LCB7IDB4ZmMsMHgxZiwweGUzLDB4ZmMgfSwKKyAgICB7IDB4YjEsMHhjOCwweDc5LDB4YjEgfSwgeyAweDViLDB4ZWQsMHhiNiwweDViIH0sCisgICAgeyAweDZhLDB4YmUsMHhkNCwweDZhIH0sIHsgMHhjYiwweDQ2LDB4OGQsMHhjYiB9LAorICAgIHsgMHhiZSwweGQ5LDB4NjcsMHhiZSB9LCB7IDB4MzksMHg0YiwweDcyLDB4MzkgfSwKKyAgICB7IDB4NGEsMHhkZSwweDk0LDB4NGEgfSwgeyAweDRjLDB4ZDQsMHg5OCwweDRjIH0sCisgICAgeyAweDU4LDB4ZTgsMHhiMCwweDU4IH0sIHsgMHhjZiwweDRhLDB4ODUsMHhjZiB9LAorICAgIHsgMHhkMCwweDZiLDB4YmIsMHhkMCB9LCB7IDB4ZWYsMHgyYSwweGM1LDB4ZWYgfSwKKyAgICB7IDB4YWEsMHhlNSwweDRmLDB4YWEgfSwgeyAweGZiLDB4MTYsMHhlZCwweGZiIH0sCisgICAgeyAweDQzLDB4YzUsMHg4NiwweDQzIH0sIHsgMHg0ZCwweGQ3LDB4OWEsMHg0ZCB9LAorICAgIHsgMHgzMywweDU1LDB4NjYsMHgzMyB9LCB7IDB4ODUsMHg5NCwweDExLDB4ODUgfSwKKyAgICB7IDB4NDUsMHhjZiwweDhhLDB4NDUgfSwgeyAweGY5LDB4MTAsMHhlOSwweGY5IH0sCisgICAgeyAweDAyLDB4MDYsMHgwNCwweDAyIH0sIHsgMHg3ZiwweDgxLDB4ZmUsMHg3ZiB9LAorICAgIHsgMHg1MCwweGYwLDB4YTAsMHg1MCB9LCB7IDB4M2MsMHg0NCwweDc4LDB4M2MgfSwKKyAgICB7IDB4OWYsMHhiYSwweDI1LDB4OWYgfSwgeyAweGE4LDB4ZTMsMHg0YiwweGE4IH0sCisgICAgeyAweDUxLDB4ZjMsMHhhMiwweDUxIH0sIHsgMHhhMywweGZlLDB4NWQsMHhhMyB9LAorICAgIHsgMHg0MCwweGMwLDB4ODAsMHg0MCB9LCB7IDB4OGYsMHg4YSwweDA1LDB4OGYgfSwKKyAgICB7IDB4OTIsMHhhZCwweDNmLDB4OTIgfSwgeyAweDlkLDB4YmMsMHgyMSwweDlkIH0sCisgICAgeyAweDM4LDB4NDgsMHg3MCwweDM4IH0sIHsgMHhmNSwweDA0LDB4ZjEsMHhmNSB9LAorICAgIHsgMHhiYywweGRmLDB4NjMsMHhiYyB9LCB7IDB4YjYsMHhjMSwweDc3LDB4YjYgfSwKKyAgICB7IDB4ZGEsMHg3NSwweGFmLDB4ZGEgfSwgeyAweDIxLDB4NjMsMHg0MiwweDIxIH0sCisgICAgeyAweDEwLDB4MzAsMHgyMCwweDEwIH0sIHsgMHhmZiwweDFhLDB4ZTUsMHhmZiB9LAorICAgIHsgMHhmMywweDBlLDB4ZmQsMHhmMyB9LCB7IDB4ZDIsMHg2ZCwweGJmLDB4ZDIgfSwKKyAgICB7IDB4Y2QsMHg0YywweDgxLDB4Y2QgfSwgeyAweDBjLDB4MTQsMHgxOCwweDBjIH0sCisgICAgeyAweDEzLDB4MzUsMHgyNiwweDEzIH0sIHsgMHhlYywweDJmLDB4YzMsMHhlYyB9LAorICAgIHsgMHg1ZiwweGUxLDB4YmUsMHg1ZiB9LCB7IDB4OTcsMHhhMiwweDM1LDB4OTcgfSwKKyAgICB7IDB4NDQsMHhjYywweDg4LDB4NDQgfSwgeyAweDE3LDB4MzksMHgyZSwweDE3IH0sCisgICAgeyAweGM0LDB4NTcsMHg5MywweGM0IH0sIHsgMHhhNywweGYyLDB4NTUsMHhhNyB9LAorICAgIHsgMHg3ZSwweDgyLDB4ZmMsMHg3ZSB9LCB7IDB4M2QsMHg0NywweDdhLDB4M2QgfSwKKyAgICB7IDB4NjQsMHhhYywweGM4LDB4NjQgfSwgeyAweDVkLDB4ZTcsMHhiYSwweDVkIH0sCisgICAgeyAweDE5LDB4MmIsMHgzMiwweDE5IH0sIHsgMHg3MywweDk1LDB4ZTYsMHg3MyB9LAorICAgIHsgMHg2MCwweGEwLDB4YzAsMHg2MCB9LCB7IDB4ODEsMHg5OCwweDE5LDB4ODEgfSwKKyAgICB7IDB4NGYsMHhkMSwweDllLDB4NGYgfSwgeyAweGRjLDB4N2YsMHhhMywweGRjIH0sCisgICAgeyAweDIyLDB4NjYsMHg0NCwweDIyIH0sIHsgMHgyYSwweDdlLDB4NTQsMHgyYSB9LAorICAgIHsgMHg5MCwweGFiLDB4M2IsMHg5MCB9LCB7IDB4ODgsMHg4MywweDBiLDB4ODggfSwKKyAgICB7IDB4NDYsMHhjYSwweDhjLDB4NDYgfSwgeyAweGVlLDB4MjksMHhjNywweGVlIH0sCisgICAgeyAweGI4LDB4ZDMsMHg2YiwweGI4IH0sIHsgMHgxNCwweDNjLDB4MjgsMHgxNCB9LAorICAgIHsgMHhkZSwweDc5LDB4YTcsMHhkZSB9LCB7IDB4NWUsMHhlMiwweGJjLDB4NWUgfSwKKyAgICB7IDB4MGIsMHgxZCwweDE2LDB4MGIgfSwgeyAweGRiLDB4NzYsMHhhZCwweGRiIH0sCisgICAgeyAweGUwLDB4M2IsMHhkYiwweGUwIH0sIHsgMHgzMiwweDU2LDB4NjQsMHgzMiB9LAorICAgIHsgMHgzYSwweDRlLDB4NzQsMHgzYSB9LCB7IDB4MGEsMHgxZSwweDE0LDB4MGEgfSwKKyAgICB7IDB4NDksMHhkYiwweDkyLDB4NDkgfSwgeyAweDA2LDB4MGEsMHgwYywweDA2IH0sCisgICAgeyAweDI0LDB4NmMsMHg0OCwweDI0IH0sIHsgMHg1YywweGU0LDB4YjgsMHg1YyB9LAorICAgIHsgMHhjMiwweDVkLDB4OWYsMHhjMiB9LCB7IDB4ZDMsMHg2ZSwweGJkLDB4ZDMgfSwKKyAgICB7IDB4YWMsMHhlZiwweDQzLDB4YWMgfSwgeyAweDYyLDB4YTYsMHhjNCwweDYyIH0sCisgICAgeyAweDkxLDB4YTgsMHgzOSwweDkxIH0sIHsgMHg5NSwweGE0LDB4MzEsMHg5NSB9LAorICAgIHsgMHhlNCwweDM3LDB4ZDMsMHhlNCB9LCB7IDB4NzksMHg4YiwweGYyLDB4NzkgfSwKKyAgICB7IDB4ZTcsMHgzMiwweGQ1LDB4ZTcgfSwgeyAweGM4LDB4NDMsMHg4YiwweGM4IH0sCisgICAgeyAweDM3LDB4NTksMHg2ZSwweDM3IH0sIHsgMHg2ZCwweGI3LDB4ZGEsMHg2ZCB9LAorICAgIHsgMHg4ZCwweDhjLDB4MDEsMHg4ZCB9LCB7IDB4ZDUsMHg2NCwweGIxLDB4ZDUgfSwKKyAgICB7IDB4NGUsMHhkMiwweDljLDB4NGUgfSwgeyAweGE5LDB4ZTAsMHg0OSwweGE5IH0sCisgICAgeyAweDZjLDB4YjQsMHhkOCwweDZjIH0sIHsgMHg1NiwweGZhLDB4YWMsMHg1NiB9LAorICAgIHsgMHhmNCwweDA3LDB4ZjMsMHhmNCB9LCB7IDB4ZWEsMHgyNSwweGNmLDB4ZWEgfSwKKyAgICB7IDB4NjUsMHhhZiwweGNhLDB4NjUgfSwgeyAweDdhLDB4OGUsMHhmNCwweDdhIH0sCisgICAgeyAweGFlLDB4ZTksMHg0NywweGFlIH0sIHsgMHgwOCwweDE4LDB4MTAsMHgwOCB9LAorICAgIHsgMHhiYSwweGQ1LDB4NmYsMHhiYSB9LCB7IDB4NzgsMHg4OCwweGYwLDB4NzggfSwKKyAgICB7IDB4MjUsMHg2ZiwweDRhLDB4MjUgfSwgeyAweDJlLDB4NzIsMHg1YywweDJlIH0sCisgICAgeyAweDFjLDB4MjQsMHgzOCwweDFjIH0sIHsgMHhhNiwweGYxLDB4NTcsMHhhNiB9LAorICAgIHsgMHhiNCwweGM3LDB4NzMsMHhiNCB9LCB7IDB4YzYsMHg1MSwweDk3LDB4YzYgfSwKKyAgICB7IDB4ZTgsMHgyMywweGNiLDB4ZTggfSwgeyAweGRkLDB4N2MsMHhhMSwweGRkIH0sCisgICAgeyAweDc0LDB4OWMsMHhlOCwweDc0IH0sIHsgMHgxZiwweDIxLDB4M2UsMHgxZiB9LAorICAgIHsgMHg0YiwweGRkLDB4OTYsMHg0YiB9LCB7IDB4YmQsMHhkYywweDYxLDB4YmQgfSwKKyAgICB7IDB4OGIsMHg4NiwweDBkLDB4OGIgfSwgeyAweDhhLDB4ODUsMHgwZiwweDhhIH0sCisgICAgeyAweDcwLDB4OTAsMHhlMCwweDcwIH0sIHsgMHgzZSwweDQyLDB4N2MsMHgzZSB9LAorICAgIHsgMHhiNSwweGM0LDB4NzEsMHhiNSB9LCB7IDB4NjYsMHhhYSwweGNjLDB4NjYgfSwKKyAgICB7IDB4NDgsMHhkOCwweDkwLDB4NDggfSwgeyAweDAzLDB4MDUsMHgwNiwweDAzIH0sCisgICAgeyAweGY2LDB4MDEsMHhmNywweGY2IH0sIHsgMHgwZSwweDEyLDB4MWMsMHgwZSB9LAorICAgIHsgMHg2MSwweGEzLDB4YzIsMHg2MSB9LCB7IDB4MzUsMHg1ZiwweDZhLDB4MzUgfSwKKyAgICB7IDB4NTcsMHhmOSwweGFlLDB4NTcgfSwgeyAweGI5LDB4ZDAsMHg2OSwweGI5IH0sCisgICAgeyAweDg2LDB4OTEsMHgxNywweDg2IH0sIHsgMHhjMSwweDU4LDB4OTksMHhjMSB9LAorICAgIHsgMHgxZCwweDI3LDB4M2EsMHgxZCB9LCB7IDB4OWUsMHhiOSwweDI3LDB4OWUgfSwKKyAgICB7IDB4ZTEsMHgzOCwweGQ5LDB4ZTEgfSwgeyAweGY4LDB4MTMsMHhlYiwweGY4IH0sCisgICAgeyAweDk4LDB4YjMsMHgyYiwweDk4IH0sIHsgMHgxMSwweDMzLDB4MjIsMHgxMSB9LAorICAgIHsgMHg2OSwweGJiLDB4ZDIsMHg2OSB9LCB7IDB4ZDksMHg3MCwweGE5LDB4ZDkgfSwKKyAgICB7IDB4OGUsMHg4OSwweDA3LDB4OGUgfSwgeyAweDk0LDB4YTcsMHgzMywweDk0IH0sCisgICAgeyAweDliLDB4YjYsMHgyZCwweDliIH0sIHsgMHgxZSwweDIyLDB4M2MsMHgxZSB9LAorICAgIHsgMHg4NywweDkyLDB4MTUsMHg4NyB9LCB7IDB4ZTksMHgyMCwweGM5LDB4ZTkgfSwKKyAgICB7IDB4Y2UsMHg0OSwweDg3LDB4Y2UgfSwgeyAweDU1LDB4ZmYsMHhhYSwweDU1IH0sCisgICAgeyAweDI4LDB4NzgsMHg1MCwweDI4IH0sIHsgMHhkZiwweDdhLDB4YTUsMHhkZiB9LAorICAgIHsgMHg4YywweDhmLDB4MDMsMHg4YyB9LCB7IDB4YTEsMHhmOCwweDU5LDB4YTEgfSwKKyAgICB7IDB4ODksMHg4MCwweDA5LDB4ODkgfSwgeyAweDBkLDB4MTcsMHgxYSwweDBkIH0sCisgICAgeyAweGJmLDB4ZGEsMHg2NSwweGJmIH0sIHsgMHhlNiwweDMxLDB4ZDcsMHhlNiB9LAorICAgIHsgMHg0MiwweGM2LDB4ODQsMHg0MiB9LCB7IDB4NjgsMHhiOCwweGQwLDB4NjggfSwKKyAgICB7IDB4NDEsMHhjMywweDgyLDB4NDEgfSwgeyAweDk5LDB4YjAsMHgyOSwweDk5IH0sCisgICAgeyAweDJkLDB4NzcsMHg1YSwweDJkIH0sIHsgMHgwZiwweDExLDB4MWUsMHgwZiB9LAorICAgIHsgMHhiMCwweGNiLDB4N2IsMHhiMCB9LCB7IDB4NTQsMHhmYywweGE4LDB4NTQgfSwKKyAgICB7IDB4YmIsMHhkNiwweDZkLDB4YmIgfSwgeyAweDE2LDB4M2EsMHgyYywweDE2IH0KKyAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVDRbMjU2XVs0XSA9CisgIHsKKyAgICB7IDB4NjMsMHg2MywweGE1LDB4YzYgfSwgeyAweDdjLDB4N2MsMHg4NCwweGY4IH0sCisgICAgeyAweDc3LDB4NzcsMHg5OSwweGVlIH0sIHsgMHg3YiwweDdiLDB4OGQsMHhmNiB9LAorICAgIHsgMHhmMiwweGYyLDB4MGQsMHhmZiB9LCB7IDB4NmIsMHg2YiwweGJkLDB4ZDYgfSwKKyAgICB7IDB4NmYsMHg2ZiwweGIxLDB4ZGUgfSwgeyAweGM1LDB4YzUsMHg1NCwweDkxIH0sCisgICAgeyAweDMwLDB4MzAsMHg1MCwweDYwIH0sIHsgMHgwMSwweDAxLDB4MDMsMHgwMiB9LAorICAgIHsgMHg2NywweDY3LDB4YTksMHhjZSB9LCB7IDB4MmIsMHgyYiwweDdkLDB4NTYgfSwKKyAgICB7IDB4ZmUsMHhmZSwweDE5LDB4ZTcgfSwgeyAweGQ3LDB4ZDcsMHg2MiwweGI1IH0sCisgICAgeyAweGFiLDB4YWIsMHhlNiwweDRkIH0sIHsgMHg3NiwweDc2LDB4OWEsMHhlYyB9LAorICAgIHsgMHhjYSwweGNhLDB4NDUsMHg4ZiB9LCB7IDB4ODIsMHg4MiwweDlkLDB4MWYgfSwKKyAgICB7IDB4YzksMHhjOSwweDQwLDB4ODkgfSwgeyAweDdkLDB4N2QsMHg4NywweGZhIH0sCisgICAgeyAweGZhLDB4ZmEsMHgxNSwweGVmIH0sIHsgMHg1OSwweDU5LDB4ZWIsMHhiMiB9LAorICAgIHsgMHg0NywweDQ3LDB4YzksMHg4ZSB9LCB7IDB4ZjAsMHhmMCwweDBiLDB4ZmIgfSwKKyAgICB7IDB4YWQsMHhhZCwweGVjLDB4NDEgfSwgeyAweGQ0LDB4ZDQsMHg2NywweGIzIH0sCisgICAgeyAweGEyLDB4YTIsMHhmZCwweDVmIH0sIHsgMHhhZiwweGFmLDB4ZWEsMHg0NSB9LAorICAgIHsgMHg5YywweDljLDB4YmYsMHgyMyB9LCB7IDB4YTQsMHhhNCwweGY3LDB4NTMgfSwKKyAgICB7IDB4NzIsMHg3MiwweDk2LDB4ZTQgfSwgeyAweGMwLDB4YzAsMHg1YiwweDliIH0sCisgICAgeyAweGI3LDB4YjcsMHhjMiwweDc1IH0sIHsgMHhmZCwweGZkLDB4MWMsMHhlMSB9LAorICAgIHsgMHg5MywweDkzLDB4YWUsMHgzZCB9LCB7IDB4MjYsMHgyNiwweDZhLDB4NGMgfSwKKyAgICB7IDB4MzYsMHgzNiwweDVhLDB4NmMgfSwgeyAweDNmLDB4M2YsMHg0MSwweDdlIH0sCisgICAgeyAweGY3LDB4ZjcsMHgwMiwweGY1IH0sIHsgMHhjYywweGNjLDB4NGYsMHg4MyB9LAorICAgIHsgMHgzNCwweDM0LDB4NWMsMHg2OCB9LCB7IDB4YTUsMHhhNSwweGY0LDB4NTEgfSwKKyAgICB7IDB4ZTUsMHhlNSwweDM0LDB4ZDEgfSwgeyAweGYxLDB4ZjEsMHgwOCwweGY5IH0sCisgICAgeyAweDcxLDB4NzEsMHg5MywweGUyIH0sIHsgMHhkOCwweGQ4LDB4NzMsMHhhYiB9LAorICAgIHsgMHgzMSwweDMxLDB4NTMsMHg2MiB9LCB7IDB4MTUsMHgxNSwweDNmLDB4MmEgfSwKKyAgICB7IDB4MDQsMHgwNCwweDBjLDB4MDggfSwgeyAweGM3LDB4YzcsMHg1MiwweDk1IH0sCisgICAgeyAweDIzLDB4MjMsMHg2NSwweDQ2IH0sIHsgMHhjMywweGMzLDB4NWUsMHg5ZCB9LAorICAgIHsgMHgxOCwweDE4LDB4MjgsMHgzMCB9LCB7IDB4OTYsMHg5NiwweGExLDB4MzcgfSwKKyAgICB7IDB4MDUsMHgwNSwweDBmLDB4MGEgfSwgeyAweDlhLDB4OWEsMHhiNSwweDJmIH0sCisgICAgeyAweDA3LDB4MDcsMHgwOSwweDBlIH0sIHsgMHgxMiwweDEyLDB4MzYsMHgyNCB9LAorICAgIHsgMHg4MCwweDgwLDB4OWIsMHgxYiB9LCB7IDB4ZTIsMHhlMiwweDNkLDB4ZGYgfSwKKyAgICB7IDB4ZWIsMHhlYiwweDI2LDB4Y2QgfSwgeyAweDI3LDB4MjcsMHg2OSwweDRlIH0sCisgICAgeyAweGIyLDB4YjIsMHhjZCwweDdmIH0sIHsgMHg3NSwweDc1LDB4OWYsMHhlYSB9LAorICAgIHsgMHgwOSwweDA5LDB4MWIsMHgxMiB9LCB7IDB4ODMsMHg4MywweDllLDB4MWQgfSwKKyAgICB7IDB4MmMsMHgyYywweDc0LDB4NTggfSwgeyAweDFhLDB4MWEsMHgyZSwweDM0IH0sCisgICAgeyAweDFiLDB4MWIsMHgyZCwweDM2IH0sIHsgMHg2ZSwweDZlLDB4YjIsMHhkYyB9LAorICAgIHsgMHg1YSwweDVhLDB4ZWUsMHhiNCB9LCB7IDB4YTAsMHhhMCwweGZiLDB4NWIgfSwKKyAgICB7IDB4NTIsMHg1MiwweGY2LDB4YTQgfSwgeyAweDNiLDB4M2IsMHg0ZCwweDc2IH0sCisgICAgeyAweGQ2LDB4ZDYsMHg2MSwweGI3IH0sIHsgMHhiMywweGIzLDB4Y2UsMHg3ZCB9LAorICAgIHsgMHgyOSwweDI5LDB4N2IsMHg1MiB9LCB7IDB4ZTMsMHhlMywweDNlLDB4ZGQgfSwKKyAgICB7IDB4MmYsMHgyZiwweDcxLDB4NWUgfSwgeyAweDg0LDB4ODQsMHg5NywweDEzIH0sCisgICAgeyAweDUzLDB4NTMsMHhmNSwweGE2IH0sIHsgMHhkMSwweGQxLDB4NjgsMHhiOSB9LAorICAgIHsgMHgwMCwweDAwLDB4MDAsMHgwMCB9LCB7IDB4ZWQsMHhlZCwweDJjLDB4YzEgfSwKKyAgICB7IDB4MjAsMHgyMCwweDYwLDB4NDAgfSwgeyAweGZjLDB4ZmMsMHgxZiwweGUzIH0sCisgICAgeyAweGIxLDB4YjEsMHhjOCwweDc5IH0sIHsgMHg1YiwweDViLDB4ZWQsMHhiNiB9LAorICAgIHsgMHg2YSwweDZhLDB4YmUsMHhkNCB9LCB7IDB4Y2IsMHhjYiwweDQ2LDB4OGQgfSwKKyAgICB7IDB4YmUsMHhiZSwweGQ5LDB4NjcgfSwgeyAweDM5LDB4MzksMHg0YiwweDcyIH0sCisgICAgeyAweDRhLDB4NGEsMHhkZSwweDk0IH0sIHsgMHg0YywweDRjLDB4ZDQsMHg5OCB9LAorICAgIHsgMHg1OCwweDU4LDB4ZTgsMHhiMCB9LCB7IDB4Y2YsMHhjZiwweDRhLDB4ODUgfSwKKyAgICB7IDB4ZDAsMHhkMCwweDZiLDB4YmIgfSwgeyAweGVmLDB4ZWYsMHgyYSwweGM1IH0sCisgICAgeyAweGFhLDB4YWEsMHhlNSwweDRmIH0sIHsgMHhmYiwweGZiLDB4MTYsMHhlZCB9LAorICAgIHsgMHg0MywweDQzLDB4YzUsMHg4NiB9LCB7IDB4NGQsMHg0ZCwweGQ3LDB4OWEgfSwKKyAgICB7IDB4MzMsMHgzMywweDU1LDB4NjYgfSwgeyAweDg1LDB4ODUsMHg5NCwweDExIH0sCisgICAgeyAweDQ1LDB4NDUsMHhjZiwweDhhIH0sIHsgMHhmOSwweGY5LDB4MTAsMHhlOSB9LAorICAgIHsgMHgwMiwweDAyLDB4MDYsMHgwNCB9LCB7IDB4N2YsMHg3ZiwweDgxLDB4ZmUgfSwKKyAgICB7IDB4NTAsMHg1MCwweGYwLDB4YTAgfSwgeyAweDNjLDB4M2MsMHg0NCwweDc4IH0sCisgICAgeyAweDlmLDB4OWYsMHhiYSwweDI1IH0sIHsgMHhhOCwweGE4LDB4ZTMsMHg0YiB9LAorICAgIHsgMHg1MSwweDUxLDB4ZjMsMHhhMiB9LCB7IDB4YTMsMHhhMywweGZlLDB4NWQgfSwKKyAgICB7IDB4NDAsMHg0MCwweGMwLDB4ODAgfSwgeyAweDhmLDB4OGYsMHg4YSwweDA1IH0sCisgICAgeyAweDkyLDB4OTIsMHhhZCwweDNmIH0sIHsgMHg5ZCwweDlkLDB4YmMsMHgyMSB9LAorICAgIHsgMHgzOCwweDM4LDB4NDgsMHg3MCB9LCB7IDB4ZjUsMHhmNSwweDA0LDB4ZjEgfSwKKyAgICB7IDB4YmMsMHhiYywweGRmLDB4NjMgfSwgeyAweGI2LDB4YjYsMHhjMSwweDc3IH0sCisgICAgeyAweGRhLDB4ZGEsMHg3NSwweGFmIH0sIHsgMHgyMSwweDIxLDB4NjMsMHg0MiB9LAorICAgIHsgMHgxMCwweDEwLDB4MzAsMHgyMCB9LCB7IDB4ZmYsMHhmZiwweDFhLDB4ZTUgfSwKKyAgICB7IDB4ZjMsMHhmMywweDBlLDB4ZmQgfSwgeyAweGQyLDB4ZDIsMHg2ZCwweGJmIH0sCisgICAgeyAweGNkLDB4Y2QsMHg0YywweDgxIH0sIHsgMHgwYywweDBjLDB4MTQsMHgxOCB9LAorICAgIHsgMHgxMywweDEzLDB4MzUsMHgyNiB9LCB7IDB4ZWMsMHhlYywweDJmLDB4YzMgfSwKKyAgICB7IDB4NWYsMHg1ZiwweGUxLDB4YmUgfSwgeyAweDk3LDB4OTcsMHhhMiwweDM1IH0sCisgICAgeyAweDQ0LDB4NDQsMHhjYywweDg4IH0sIHsgMHgxNywweDE3LDB4MzksMHgyZSB9LAorICAgIHsgMHhjNCwweGM0LDB4NTcsMHg5MyB9LCB7IDB4YTcsMHhhNywweGYyLDB4NTUgfSwKKyAgICB7IDB4N2UsMHg3ZSwweDgyLDB4ZmMgfSwgeyAweDNkLDB4M2QsMHg0NywweDdhIH0sCisgICAgeyAweDY0LDB4NjQsMHhhYywweGM4IH0sIHsgMHg1ZCwweDVkLDB4ZTcsMHhiYSB9LAorICAgIHsgMHgxOSwweDE5LDB4MmIsMHgzMiB9LCB7IDB4NzMsMHg3MywweDk1LDB4ZTYgfSwKKyAgICB7IDB4NjAsMHg2MCwweGEwLDB4YzAgfSwgeyAweDgxLDB4ODEsMHg5OCwweDE5IH0sCisgICAgeyAweDRmLDB4NGYsMHhkMSwweDllIH0sIHsgMHhkYywweGRjLDB4N2YsMHhhMyB9LAorICAgIHsgMHgyMiwweDIyLDB4NjYsMHg0NCB9LCB7IDB4MmEsMHgyYSwweDdlLDB4NTQgfSwKKyAgICB7IDB4OTAsMHg5MCwweGFiLDB4M2IgfSwgeyAweDg4LDB4ODgsMHg4MywweDBiIH0sCisgICAgeyAweDQ2LDB4NDYsMHhjYSwweDhjIH0sIHsgMHhlZSwweGVlLDB4MjksMHhjNyB9LAorICAgIHsgMHhiOCwweGI4LDB4ZDMsMHg2YiB9LCB7IDB4MTQsMHgxNCwweDNjLDB4MjggfSwKKyAgICB7IDB4ZGUsMHhkZSwweDc5LDB4YTcgfSwgeyAweDVlLDB4NWUsMHhlMiwweGJjIH0sCisgICAgeyAweDBiLDB4MGIsMHgxZCwweDE2IH0sIHsgMHhkYiwweGRiLDB4NzYsMHhhZCB9LAorICAgIHsgMHhlMCwweGUwLDB4M2IsMHhkYiB9LCB7IDB4MzIsMHgzMiwweDU2LDB4NjQgfSwKKyAgICB7IDB4M2EsMHgzYSwweDRlLDB4NzQgfSwgeyAweDBhLDB4MGEsMHgxZSwweDE0IH0sCisgICAgeyAweDQ5LDB4NDksMHhkYiwweDkyIH0sIHsgMHgwNiwweDA2LDB4MGEsMHgwYyB9LAorICAgIHsgMHgyNCwweDI0LDB4NmMsMHg0OCB9LCB7IDB4NWMsMHg1YywweGU0LDB4YjggfSwKKyAgICB7IDB4YzIsMHhjMiwweDVkLDB4OWYgfSwgeyAweGQzLDB4ZDMsMHg2ZSwweGJkIH0sCisgICAgeyAweGFjLDB4YWMsMHhlZiwweDQzIH0sIHsgMHg2MiwweDYyLDB4YTYsMHhjNCB9LAorICAgIHsgMHg5MSwweDkxLDB4YTgsMHgzOSB9LCB7IDB4OTUsMHg5NSwweGE0LDB4MzEgfSwKKyAgICB7IDB4ZTQsMHhlNCwweDM3LDB4ZDMgfSwgeyAweDc5LDB4NzksMHg4YiwweGYyIH0sCisgICAgeyAweGU3LDB4ZTcsMHgzMiwweGQ1IH0sIHsgMHhjOCwweGM4LDB4NDMsMHg4YiB9LAorICAgIHsgMHgzNywweDM3LDB4NTksMHg2ZSB9LCB7IDB4NmQsMHg2ZCwweGI3LDB4ZGEgfSwKKyAgICB7IDB4OGQsMHg4ZCwweDhjLDB4MDEgfSwgeyAweGQ1LDB4ZDUsMHg2NCwweGIxIH0sCisgICAgeyAweDRlLDB4NGUsMHhkMiwweDljIH0sIHsgMHhhOSwweGE5LDB4ZTAsMHg0OSB9LAorICAgIHsgMHg2YywweDZjLDB4YjQsMHhkOCB9LCB7IDB4NTYsMHg1NiwweGZhLDB4YWMgfSwKKyAgICB7IDB4ZjQsMHhmNCwweDA3LDB4ZjMgfSwgeyAweGVhLDB4ZWEsMHgyNSwweGNmIH0sCisgICAgeyAweDY1LDB4NjUsMHhhZiwweGNhIH0sIHsgMHg3YSwweDdhLDB4OGUsMHhmNCB9LAorICAgIHsgMHhhZSwweGFlLDB4ZTksMHg0NyB9LCB7IDB4MDgsMHgwOCwweDE4LDB4MTAgfSwKKyAgICB7IDB4YmEsMHhiYSwweGQ1LDB4NmYgfSwgeyAweDc4LDB4NzgsMHg4OCwweGYwIH0sCisgICAgeyAweDI1LDB4MjUsMHg2ZiwweDRhIH0sIHsgMHgyZSwweDJlLDB4NzIsMHg1YyB9LAorICAgIHsgMHgxYywweDFjLDB4MjQsMHgzOCB9LCB7IDB4YTYsMHhhNiwweGYxLDB4NTcgfSwKKyAgICB7IDB4YjQsMHhiNCwweGM3LDB4NzMgfSwgeyAweGM2LDB4YzYsMHg1MSwweDk3IH0sCisgICAgeyAweGU4LDB4ZTgsMHgyMywweGNiIH0sIHsgMHhkZCwweGRkLDB4N2MsMHhhMSB9LAorICAgIHsgMHg3NCwweDc0LDB4OWMsMHhlOCB9LCB7IDB4MWYsMHgxZiwweDIxLDB4M2UgfSwKKyAgICB7IDB4NGIsMHg0YiwweGRkLDB4OTYgfSwgeyAweGJkLDB4YmQsMHhkYywweDYxIH0sCisgICAgeyAweDhiLDB4OGIsMHg4NiwweDBkIH0sIHsgMHg4YSwweDhhLDB4ODUsMHgwZiB9LAorICAgIHsgMHg3MCwweDcwLDB4OTAsMHhlMCB9LCB7IDB4M2UsMHgzZSwweDQyLDB4N2MgfSwKKyAgICB7IDB4YjUsMHhiNSwweGM0LDB4NzEgfSwgeyAweDY2LDB4NjYsMHhhYSwweGNjIH0sCisgICAgeyAweDQ4LDB4NDgsMHhkOCwweDkwIH0sIHsgMHgwMywweDAzLDB4MDUsMHgwNiB9LAorICAgIHsgMHhmNiwweGY2LDB4MDEsMHhmNyB9LCB7IDB4MGUsMHgwZSwweDEyLDB4MWMgfSwKKyAgICB7IDB4NjEsMHg2MSwweGEzLDB4YzIgfSwgeyAweDM1LDB4MzUsMHg1ZiwweDZhIH0sCisgICAgeyAweDU3LDB4NTcsMHhmOSwweGFlIH0sIHsgMHhiOSwweGI5LDB4ZDAsMHg2OSB9LAorICAgIHsgMHg4NiwweDg2LDB4OTEsMHgxNyB9LCB7IDB4YzEsMHhjMSwweDU4LDB4OTkgfSwKKyAgICB7IDB4MWQsMHgxZCwweDI3LDB4M2EgfSwgeyAweDllLDB4OWUsMHhiOSwweDI3IH0sCisgICAgeyAweGUxLDB4ZTEsMHgzOCwweGQ5IH0sIHsgMHhmOCwweGY4LDB4MTMsMHhlYiB9LAorICAgIHsgMHg5OCwweDk4LDB4YjMsMHgyYiB9LCB7IDB4MTEsMHgxMSwweDMzLDB4MjIgfSwKKyAgICB7IDB4NjksMHg2OSwweGJiLDB4ZDIgfSwgeyAweGQ5LDB4ZDksMHg3MCwweGE5IH0sCisgICAgeyAweDhlLDB4OGUsMHg4OSwweDA3IH0sIHsgMHg5NCwweDk0LDB4YTcsMHgzMyB9LAorICAgIHsgMHg5YiwweDliLDB4YjYsMHgyZCB9LCB7IDB4MWUsMHgxZSwweDIyLDB4M2MgfSwKKyAgICB7IDB4ODcsMHg4NywweDkyLDB4MTUgfSwgeyAweGU5LDB4ZTksMHgyMCwweGM5IH0sCisgICAgeyAweGNlLDB4Y2UsMHg0OSwweDg3IH0sIHsgMHg1NSwweDU1LDB4ZmYsMHhhYSB9LAorICAgIHsgMHgyOCwweDI4LDB4NzgsMHg1MCB9LCB7IDB4ZGYsMHhkZiwweDdhLDB4YTUgfSwKKyAgICB7IDB4OGMsMHg4YywweDhmLDB4MDMgfSwgeyAweGExLDB4YTEsMHhmOCwweDU5IH0sCisgICAgeyAweDg5LDB4ODksMHg4MCwweDA5IH0sIHsgMHgwZCwweDBkLDB4MTcsMHgxYSB9LAorICAgIHsgMHhiZiwweGJmLDB4ZGEsMHg2NSB9LCB7IDB4ZTYsMHhlNiwweDMxLDB4ZDcgfSwKKyAgICB7IDB4NDIsMHg0MiwweGM2LDB4ODQgfSwgeyAweDY4LDB4NjgsMHhiOCwweGQwIH0sCisgICAgeyAweDQxLDB4NDEsMHhjMywweDgyIH0sIHsgMHg5OSwweDk5LDB4YjAsMHgyOSB9LAorICAgIHsgMHgyZCwweDJkLDB4NzcsMHg1YSB9LCB7IDB4MGYsMHgwZiwweDExLDB4MWUgfSwKKyAgICB7IDB4YjAsMHhiMCwweGNiLDB4N2IgfSwgeyAweDU0LDB4NTQsMHhmYywweGE4IH0sCisgICAgeyAweGJiLDB4YmIsMHhkNiwweDZkIH0sIHsgMHgxNiwweDE2LDB4M2EsMHgyYyB9CisgIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFQ1WzI1Nl1bNF0gPQorICB7CisgICAgeyAweDUxLDB4ZjQsMHhhNywweDUwIH0sIHsgMHg3ZSwweDQxLDB4NjUsMHg1MyB9LAorICAgIHsgMHgxYSwweDE3LDB4YTQsMHhjMyB9LCB7IDB4M2EsMHgyNywweDVlLDB4OTYgfSwKKyAgICB7IDB4M2IsMHhhYiwweDZiLDB4Y2IgfSwgeyAweDFmLDB4OWQsMHg0NSwweGYxIH0sCisgICAgeyAweGFjLDB4ZmEsMHg1OCwweGFiIH0sIHsgMHg0YiwweGUzLDB4MDMsMHg5MyB9LAorICAgIHsgMHgyMCwweDMwLDB4ZmEsMHg1NSB9LCB7IDB4YWQsMHg3NiwweDZkLDB4ZjYgfSwKKyAgICB7IDB4ODgsMHhjYywweDc2LDB4OTEgfSwgeyAweGY1LDB4MDIsMHg0YywweDI1IH0sCisgICAgeyAweDRmLDB4ZTUsMHhkNywweGZjIH0sIHsgMHhjNSwweDJhLDB4Y2IsMHhkNyB9LAorICAgIHsgMHgyNiwweDM1LDB4NDQsMHg4MCB9LCB7IDB4YjUsMHg2MiwweGEzLDB4OGYgfSwKKyAgICB7IDB4ZGUsMHhiMSwweDVhLDB4NDkgfSwgeyAweDI1LDB4YmEsMHgxYiwweDY3IH0sCisgICAgeyAweDQ1LDB4ZWEsMHgwZSwweDk4IH0sIHsgMHg1ZCwweGZlLDB4YzAsMHhlMSB9LAorICAgIHsgMHhjMywweDJmLDB4NzUsMHgwMiB9LCB7IDB4ODEsMHg0YywweGYwLDB4MTIgfSwKKyAgICB7IDB4OGQsMHg0NiwweDk3LDB4YTMgfSwgeyAweDZiLDB4ZDMsMHhmOSwweGM2IH0sCisgICAgeyAweDAzLDB4OGYsMHg1ZiwweGU3IH0sIHsgMHgxNSwweDkyLDB4OWMsMHg5NSB9LAorICAgIHsgMHhiZiwweDZkLDB4N2EsMHhlYiB9LCB7IDB4OTUsMHg1MiwweDU5LDB4ZGEgfSwKKyAgICB7IDB4ZDQsMHhiZSwweDgzLDB4MmQgfSwgeyAweDU4LDB4NzQsMHgyMSwweGQzIH0sCisgICAgeyAweDQ5LDB4ZTAsMHg2OSwweDI5IH0sIHsgMHg4ZSwweGM5LDB4YzgsMHg0NCB9LAorICAgIHsgMHg3NSwweGMyLDB4ODksMHg2YSB9LCB7IDB4ZjQsMHg4ZSwweDc5LDB4NzggfSwKKyAgICB7IDB4OTksMHg1OCwweDNlLDB4NmIgfSwgeyAweDI3LDB4YjksMHg3MSwweGRkIH0sCisgICAgeyAweGJlLDB4ZTEsMHg0ZiwweGI2IH0sIHsgMHhmMCwweDg4LDB4YWQsMHgxNyB9LAorICAgIHsgMHhjOSwweDIwLDB4YWMsMHg2NiB9LCB7IDB4N2QsMHhjZSwweDNhLDB4YjQgfSwKKyAgICB7IDB4NjMsMHhkZiwweDRhLDB4MTggfSwgeyAweGU1LDB4MWEsMHgzMSwweDgyIH0sCisgICAgeyAweDk3LDB4NTEsMHgzMywweDYwIH0sIHsgMHg2MiwweDUzLDB4N2YsMHg0NSB9LAorICAgIHsgMHhiMSwweDY0LDB4NzcsMHhlMCB9LCB7IDB4YmIsMHg2YiwweGFlLDB4ODQgfSwKKyAgICB7IDB4ZmUsMHg4MSwweGEwLDB4MWMgfSwgeyAweGY5LDB4MDgsMHgyYiwweDk0IH0sCisgICAgeyAweDcwLDB4NDgsMHg2OCwweDU4IH0sIHsgMHg4ZiwweDQ1LDB4ZmQsMHgxOSB9LAorICAgIHsgMHg5NCwweGRlLDB4NmMsMHg4NyB9LCB7IDB4NTIsMHg3YiwweGY4LDB4YjcgfSwKKyAgICB7IDB4YWIsMHg3MywweGQzLDB4MjMgfSwgeyAweDcyLDB4NGIsMHgwMiwweGUyIH0sCisgICAgeyAweGUzLDB4MWYsMHg4ZiwweDU3IH0sIHsgMHg2NiwweDU1LDB4YWIsMHgyYSB9LAorICAgIHsgMHhiMiwweGViLDB4MjgsMHgwNyB9LCB7IDB4MmYsMHhiNSwweGMyLDB4MDMgfSwKKyAgICB7IDB4ODYsMHhjNSwweDdiLDB4OWEgfSwgeyAweGQzLDB4MzcsMHgwOCwweGE1IH0sCisgICAgeyAweDMwLDB4MjgsMHg4NywweGYyIH0sIHsgMHgyMywweGJmLDB4YTUsMHhiMiB9LAorICAgIHsgMHgwMiwweDAzLDB4NmEsMHhiYSB9LCB7IDB4ZWQsMHgxNiwweDgyLDB4NWMgfSwKKyAgICB7IDB4OGEsMHhjZiwweDFjLDB4MmIgfSwgeyAweGE3LDB4NzksMHhiNCwweDkyIH0sCisgICAgeyAweGYzLDB4MDcsMHhmMiwweGYwIH0sIHsgMHg0ZSwweDY5LDB4ZTIsMHhhMSB9LAorICAgIHsgMHg2NSwweGRhLDB4ZjQsMHhjZCB9LCB7IDB4MDYsMHgwNSwweGJlLDB4ZDUgfSwKKyAgICB7IDB4ZDEsMHgzNCwweDYyLDB4MWYgfSwgeyAweGM0LDB4YTYsMHhmZSwweDhhIH0sCisgICAgeyAweDM0LDB4MmUsMHg1MywweDlkIH0sIHsgMHhhMiwweGYzLDB4NTUsMHhhMCB9LAorICAgIHsgMHgwNSwweDhhLDB4ZTEsMHgzMiB9LCB7IDB4YTQsMHhmNiwweGViLDB4NzUgfSwKKyAgICB7IDB4MGIsMHg4MywweGVjLDB4MzkgfSwgeyAweDQwLDB4NjAsMHhlZiwweGFhIH0sCisgICAgeyAweDVlLDB4NzEsMHg5ZiwweDA2IH0sIHsgMHhiZCwweDZlLDB4MTAsMHg1MSB9LAorICAgIHsgMHgzZSwweDIxLDB4OGEsMHhmOSB9LCB7IDB4OTYsMHhkZCwweDA2LDB4M2QgfSwKKyAgICB7IDB4ZGQsMHgzZSwweDA1LDB4YWUgfSwgeyAweDRkLDB4ZTYsMHhiZCwweDQ2IH0sCisgICAgeyAweDkxLDB4NTQsMHg4ZCwweGI1IH0sIHsgMHg3MSwweGM0LDB4NWQsMHgwNSB9LAorICAgIHsgMHgwNCwweDA2LDB4ZDQsMHg2ZiB9LCB7IDB4NjAsMHg1MCwweDE1LDB4ZmYgfSwKKyAgICB7IDB4MTksMHg5OCwweGZiLDB4MjQgfSwgeyAweGQ2LDB4YmQsMHhlOSwweDk3IH0sCisgICAgeyAweDg5LDB4NDAsMHg0MywweGNjIH0sIHsgMHg2NywweGQ5LDB4OWUsMHg3NyB9LAorICAgIHsgMHhiMCwweGU4LDB4NDIsMHhiZCB9LCB7IDB4MDcsMHg4OSwweDhiLDB4ODggfSwKKyAgICB7IDB4ZTcsMHgxOSwweDViLDB4MzggfSwgeyAweDc5LDB4YzgsMHhlZSwweGRiIH0sCisgICAgeyAweGExLDB4N2MsMHgwYSwweDQ3IH0sIHsgMHg3YywweDQyLDB4MGYsMHhlOSB9LAorICAgIHsgMHhmOCwweDg0LDB4MWUsMHhjOSB9LCB7IDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgICB7IDB4MDksMHg4MCwweDg2LDB4ODMgfSwgeyAweDMyLDB4MmIsMHhlZCwweDQ4IH0sCisgICAgeyAweDFlLDB4MTEsMHg3MCwweGFjIH0sIHsgMHg2YywweDVhLDB4NzIsMHg0ZSB9LAorICAgIHsgMHhmZCwweDBlLDB4ZmYsMHhmYiB9LCB7IDB4MGYsMHg4NSwweDM4LDB4NTYgfSwKKyAgICB7IDB4M2QsMHhhZSwweGQ1LDB4MWUgfSwgeyAweDM2LDB4MmQsMHgzOSwweDI3IH0sCisgICAgeyAweDBhLDB4MGYsMHhkOSwweDY0IH0sIHsgMHg2OCwweDVjLDB4YTYsMHgyMSB9LAorICAgIHsgMHg5YiwweDViLDB4NTQsMHhkMSB9LCB7IDB4MjQsMHgzNiwweDJlLDB4M2EgfSwKKyAgICB7IDB4MGMsMHgwYSwweDY3LDB4YjEgfSwgeyAweDkzLDB4NTcsMHhlNywweDBmIH0sCisgICAgeyAweGI0LDB4ZWUsMHg5NiwweGQyIH0sIHsgMHgxYiwweDliLDB4OTEsMHg5ZSB9LAorICAgIHsgMHg4MCwweGMwLDB4YzUsMHg0ZiB9LCB7IDB4NjEsMHhkYywweDIwLDB4YTIgfSwKKyAgICB7IDB4NWEsMHg3NywweDRiLDB4NjkgfSwgeyAweDFjLDB4MTIsMHgxYSwweDE2IH0sCisgICAgeyAweGUyLDB4OTMsMHhiYSwweDBhIH0sIHsgMHhjMCwweGEwLDB4MmEsMHhlNSB9LAorICAgIHsgMHgzYywweDIyLDB4ZTAsMHg0MyB9LCB7IDB4MTIsMHgxYiwweDE3LDB4MWQgfSwKKyAgICB7IDB4MGUsMHgwOSwweDBkLDB4MGIgfSwgeyAweGYyLDB4OGIsMHhjNywweGFkIH0sCisgICAgeyAweDJkLDB4YjYsMHhhOCwweGI5IH0sIHsgMHgxNCwweDFlLDB4YTksMHhjOCB9LAorICAgIHsgMHg1NywweGYxLDB4MTksMHg4NSB9LCB7IDB4YWYsMHg3NSwweDA3LDB4NGMgfSwKKyAgICB7IDB4ZWUsMHg5OSwweGRkLDB4YmIgfSwgeyAweGEzLDB4N2YsMHg2MCwweGZkIH0sCisgICAgeyAweGY3LDB4MDEsMHgyNiwweDlmIH0sIHsgMHg1YywweDcyLDB4ZjUsMHhiYyB9LAorICAgIHsgMHg0NCwweDY2LDB4M2IsMHhjNSB9LCB7IDB4NWIsMHhmYiwweDdlLDB4MzQgfSwKKyAgICB7IDB4OGIsMHg0MywweDI5LDB4NzYgfSwgeyAweGNiLDB4MjMsMHhjNiwweGRjIH0sCisgICAgeyAweGI2LDB4ZWQsMHhmYywweDY4IH0sIHsgMHhiOCwweGU0LDB4ZjEsMHg2MyB9LAorICAgIHsgMHhkNywweDMxLDB4ZGMsMHhjYSB9LCB7IDB4NDIsMHg2MywweDg1LDB4MTAgfSwKKyAgICB7IDB4MTMsMHg5NywweDIyLDB4NDAgfSwgeyAweDg0LDB4YzYsMHgxMSwweDIwIH0sCisgICAgeyAweDg1LDB4NGEsMHgyNCwweDdkIH0sIHsgMHhkMiwweGJiLDB4M2QsMHhmOCB9LAorICAgIHsgMHhhZSwweGY5LDB4MzIsMHgxMSB9LCB7IDB4YzcsMHgyOSwweGExLDB4NmQgfSwKKyAgICB7IDB4MWQsMHg5ZSwweDJmLDB4NGIgfSwgeyAweGRjLDB4YjIsMHgzMCwweGYzIH0sCisgICAgeyAweDBkLDB4ODYsMHg1MiwweGVjIH0sIHsgMHg3NywweGMxLDB4ZTMsMHhkMCB9LAorICAgIHsgMHgyYiwweGIzLDB4MTYsMHg2YyB9LCB7IDB4YTksMHg3MCwweGI5LDB4OTkgfSwKKyAgICB7IDB4MTEsMHg5NCwweDQ4LDB4ZmEgfSwgeyAweDQ3LDB4ZTksMHg2NCwweDIyIH0sCisgICAgeyAweGE4LDB4ZmMsMHg4YywweGM0IH0sIHsgMHhhMCwweGYwLDB4M2YsMHgxYSB9LAorICAgIHsgMHg1NiwweDdkLDB4MmMsMHhkOCB9LCB7IDB4MjIsMHgzMywweDkwLDB4ZWYgfSwKKyAgICB7IDB4ODcsMHg0OSwweDRlLDB4YzcgfSwgeyAweGQ5LDB4MzgsMHhkMSwweGMxIH0sCisgICAgeyAweDhjLDB4Y2EsMHhhMiwweGZlIH0sIHsgMHg5OCwweGQ0LDB4MGIsMHgzNiB9LAorICAgIHsgMHhhNiwweGY1LDB4ODEsMHhjZiB9LCB7IDB4YTUsMHg3YSwweGRlLDB4MjggfSwKKyAgICB7IDB4ZGEsMHhiNywweDhlLDB4MjYgfSwgeyAweDNmLDB4YWQsMHhiZiwweGE0IH0sCisgICAgeyAweDJjLDB4M2EsMHg5ZCwweGU0IH0sIHsgMHg1MCwweDc4LDB4OTIsMHgwZCB9LAorICAgIHsgMHg2YSwweDVmLDB4Y2MsMHg5YiB9LCB7IDB4NTQsMHg3ZSwweDQ2LDB4NjIgfSwKKyAgICB7IDB4ZjYsMHg4ZCwweDEzLDB4YzIgfSwgeyAweDkwLDB4ZDgsMHhiOCwweGU4IH0sCisgICAgeyAweDJlLDB4MzksMHhmNywweDVlIH0sIHsgMHg4MiwweGMzLDB4YWYsMHhmNSB9LAorICAgIHsgMHg5ZiwweDVkLDB4ODAsMHhiZSB9LCB7IDB4NjksMHhkMCwweDkzLDB4N2MgfSwKKyAgICB7IDB4NmYsMHhkNSwweDJkLDB4YTkgfSwgeyAweGNmLDB4MjUsMHgxMiwweGIzIH0sCisgICAgeyAweGM4LDB4YWMsMHg5OSwweDNiIH0sIHsgMHgxMCwweDE4LDB4N2QsMHhhNyB9LAorICAgIHsgMHhlOCwweDljLDB4NjMsMHg2ZSB9LCB7IDB4ZGIsMHgzYiwweGJiLDB4N2IgfSwKKyAgICB7IDB4Y2QsMHgyNiwweDc4LDB4MDkgfSwgeyAweDZlLDB4NTksMHgxOCwweGY0IH0sCisgICAgeyAweGVjLDB4OWEsMHhiNywweDAxIH0sIHsgMHg4MywweDRmLDB4OWEsMHhhOCB9LAorICAgIHsgMHhlNiwweDk1LDB4NmUsMHg2NSB9LCB7IDB4YWEsMHhmZiwweGU2LDB4N2UgfSwKKyAgICB7IDB4MjEsMHhiYywweGNmLDB4MDggfSwgeyAweGVmLDB4MTUsMHhlOCwweGU2IH0sCisgICAgeyAweGJhLDB4ZTcsMHg5YiwweGQ5IH0sIHsgMHg0YSwweDZmLDB4MzYsMHhjZSB9LAorICAgIHsgMHhlYSwweDlmLDB4MDksMHhkNCB9LCB7IDB4MjksMHhiMCwweDdjLDB4ZDYgfSwKKyAgICB7IDB4MzEsMHhhNCwweGIyLDB4YWYgfSwgeyAweDJhLDB4M2YsMHgyMywweDMxIH0sCisgICAgeyAweGM2LDB4YTUsMHg5NCwweDMwIH0sIHsgMHgzNSwweGEyLDB4NjYsMHhjMCB9LAorICAgIHsgMHg3NCwweDRlLDB4YmMsMHgzNyB9LCB7IDB4ZmMsMHg4MiwweGNhLDB4YTYgfSwKKyAgICB7IDB4ZTAsMHg5MCwweGQwLDB4YjAgfSwgeyAweDMzLDB4YTcsMHhkOCwweDE1IH0sCisgICAgeyAweGYxLDB4MDQsMHg5OCwweDRhIH0sIHsgMHg0MSwweGVjLDB4ZGEsMHhmNyB9LAorICAgIHsgMHg3ZiwweGNkLDB4NTAsMHgwZSB9LCB7IDB4MTcsMHg5MSwweGY2LDB4MmYgfSwKKyAgICB7IDB4NzYsMHg0ZCwweGQ2LDB4OGQgfSwgeyAweDQzLDB4ZWYsMHhiMCwweDRkIH0sCisgICAgeyAweGNjLDB4YWEsMHg0ZCwweDU0IH0sIHsgMHhlNCwweDk2LDB4MDQsMHhkZiB9LAorICAgIHsgMHg5ZSwweGQxLDB4YjUsMHhlMyB9LCB7IDB4NGMsMHg2YSwweDg4LDB4MWIgfSwKKyAgICB7IDB4YzEsMHgyYywweDFmLDB4YjggfSwgeyAweDQ2LDB4NjUsMHg1MSwweDdmIH0sCisgICAgeyAweDlkLDB4NWUsMHhlYSwweDA0IH0sIHsgMHgwMSwweDhjLDB4MzUsMHg1ZCB9LAorICAgIHsgMHhmYSwweDg3LDB4NzQsMHg3MyB9LCB7IDB4ZmIsMHgwYiwweDQxLDB4MmUgfSwKKyAgICB7IDB4YjMsMHg2NywweDFkLDB4NWEgfSwgeyAweDkyLDB4ZGIsMHhkMiwweDUyIH0sCisgICAgeyAweGU5LDB4MTAsMHg1NiwweDMzIH0sIHsgMHg2ZCwweGQ2LDB4NDcsMHgxMyB9LAorICAgIHsgMHg5YSwweGQ3LDB4NjEsMHg4YyB9LCB7IDB4MzcsMHhhMSwweDBjLDB4N2EgfSwKKyAgICB7IDB4NTksMHhmOCwweDE0LDB4OGUgfSwgeyAweGViLDB4MTMsMHgzYywweDg5IH0sCisgICAgeyAweGNlLDB4YTksMHgyNywweGVlIH0sIHsgMHhiNywweDYxLDB4YzksMHgzNSB9LAorICAgIHsgMHhlMSwweDFjLDB4ZTUsMHhlZCB9LCB7IDB4N2EsMHg0NywweGIxLDB4M2MgfSwKKyAgICB7IDB4OWMsMHhkMiwweGRmLDB4NTkgfSwgeyAweDU1LDB4ZjIsMHg3MywweDNmIH0sCisgICAgeyAweDE4LDB4MTQsMHhjZSwweDc5IH0sIHsgMHg3MywweGM3LDB4MzcsMHhiZiB9LAorICAgIHsgMHg1MywweGY3LDB4Y2QsMHhlYSB9LCB7IDB4NWYsMHhmZCwweGFhLDB4NWIgfSwKKyAgICB7IDB4ZGYsMHgzZCwweDZmLDB4MTQgfSwgeyAweDc4LDB4NDQsMHhkYiwweDg2IH0sCisgICAgeyAweGNhLDB4YWYsMHhmMywweDgxIH0sIHsgMHhiOSwweDY4LDB4YzQsMHgzZSB9LAorICAgIHsgMHgzOCwweDI0LDB4MzQsMHgyYyB9LCB7IDB4YzIsMHhhMywweDQwLDB4NWYgfSwKKyAgICB7IDB4MTYsMHgxZCwweGMzLDB4NzIgfSwgeyAweGJjLDB4ZTIsMHgyNSwweDBjIH0sCisgICAgeyAweDI4LDB4M2MsMHg0OSwweDhiIH0sIHsgMHhmZiwweDBkLDB4OTUsMHg0MSB9LAorICAgIHsgMHgzOSwweGE4LDB4MDEsMHg3MSB9LCB7IDB4MDgsMHgwYywweGIzLDB4ZGUgfSwKKyAgICB7IDB4ZDgsMHhiNCwweGU0LDB4OWMgfSwgeyAweDY0LDB4NTYsMHhjMSwweDkwIH0sCisgICAgeyAweDdiLDB4Y2IsMHg4NCwweDYxIH0sIHsgMHhkNSwweDMyLDB4YjYsMHg3MCB9LAorICAgIHsgMHg0OCwweDZjLDB4NWMsMHg3NCB9LCB7IDB4ZDAsMHhiOCwweDU3LDB4NDIgfQorICB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBUNlsyNTZdWzRdID0KKyAgeworICAgIHsgMHg1MCwweDUxLDB4ZjQsMHhhNyB9LCB7IDB4NTMsMHg3ZSwweDQxLDB4NjUgfSwKKyAgICB7IDB4YzMsMHgxYSwweDE3LDB4YTQgfSwgeyAweDk2LDB4M2EsMHgyNywweDVlIH0sCisgICAgeyAweGNiLDB4M2IsMHhhYiwweDZiIH0sIHsgMHhmMSwweDFmLDB4OWQsMHg0NSB9LAorICAgIHsgMHhhYiwweGFjLDB4ZmEsMHg1OCB9LCB7IDB4OTMsMHg0YiwweGUzLDB4MDMgfSwKKyAgICB7IDB4NTUsMHgyMCwweDMwLDB4ZmEgfSwgeyAweGY2LDB4YWQsMHg3NiwweDZkIH0sCisgICAgeyAweDkxLDB4ODgsMHhjYywweDc2IH0sIHsgMHgyNSwweGY1LDB4MDIsMHg0YyB9LAorICAgIHsgMHhmYywweDRmLDB4ZTUsMHhkNyB9LCB7IDB4ZDcsMHhjNSwweDJhLDB4Y2IgfSwKKyAgICB7IDB4ODAsMHgyNiwweDM1LDB4NDQgfSwgeyAweDhmLDB4YjUsMHg2MiwweGEzIH0sCisgICAgeyAweDQ5LDB4ZGUsMHhiMSwweDVhIH0sIHsgMHg2NywweDI1LDB4YmEsMHgxYiB9LAorICAgIHsgMHg5OCwweDQ1LDB4ZWEsMHgwZSB9LCB7IDB4ZTEsMHg1ZCwweGZlLDB4YzAgfSwKKyAgICB7IDB4MDIsMHhjMywweDJmLDB4NzUgfSwgeyAweDEyLDB4ODEsMHg0YywweGYwIH0sCisgICAgeyAweGEzLDB4OGQsMHg0NiwweDk3IH0sIHsgMHhjNiwweDZiLDB4ZDMsMHhmOSB9LAorICAgIHsgMHhlNywweDAzLDB4OGYsMHg1ZiB9LCB7IDB4OTUsMHgxNSwweDkyLDB4OWMgfSwKKyAgICB7IDB4ZWIsMHhiZiwweDZkLDB4N2EgfSwgeyAweGRhLDB4OTUsMHg1MiwweDU5IH0sCisgICAgeyAweDJkLDB4ZDQsMHhiZSwweDgzIH0sIHsgMHhkMywweDU4LDB4NzQsMHgyMSB9LAorICAgIHsgMHgyOSwweDQ5LDB4ZTAsMHg2OSB9LCB7IDB4NDQsMHg4ZSwweGM5LDB4YzggfSwKKyAgICB7IDB4NmEsMHg3NSwweGMyLDB4ODkgfSwgeyAweDc4LDB4ZjQsMHg4ZSwweDc5IH0sCisgICAgeyAweDZiLDB4OTksMHg1OCwweDNlIH0sIHsgMHhkZCwweDI3LDB4YjksMHg3MSB9LAorICAgIHsgMHhiNiwweGJlLDB4ZTEsMHg0ZiB9LCB7IDB4MTcsMHhmMCwweDg4LDB4YWQgfSwKKyAgICB7IDB4NjYsMHhjOSwweDIwLDB4YWMgfSwgeyAweGI0LDB4N2QsMHhjZSwweDNhIH0sCisgICAgeyAweDE4LDB4NjMsMHhkZiwweDRhIH0sIHsgMHg4MiwweGU1LDB4MWEsMHgzMSB9LAorICAgIHsgMHg2MCwweDk3LDB4NTEsMHgzMyB9LCB7IDB4NDUsMHg2MiwweDUzLDB4N2YgfSwKKyAgICB7IDB4ZTAsMHhiMSwweDY0LDB4NzcgfSwgeyAweDg0LDB4YmIsMHg2YiwweGFlIH0sCisgICAgeyAweDFjLDB4ZmUsMHg4MSwweGEwIH0sIHsgMHg5NCwweGY5LDB4MDgsMHgyYiB9LAorICAgIHsgMHg1OCwweDcwLDB4NDgsMHg2OCB9LCB7IDB4MTksMHg4ZiwweDQ1LDB4ZmQgfSwKKyAgICB7IDB4ODcsMHg5NCwweGRlLDB4NmMgfSwgeyAweGI3LDB4NTIsMHg3YiwweGY4IH0sCisgICAgeyAweDIzLDB4YWIsMHg3MywweGQzIH0sIHsgMHhlMiwweDcyLDB4NGIsMHgwMiB9LAorICAgIHsgMHg1NywweGUzLDB4MWYsMHg4ZiB9LCB7IDB4MmEsMHg2NiwweDU1LDB4YWIgfSwKKyAgICB7IDB4MDcsMHhiMiwweGViLDB4MjggfSwgeyAweDAzLDB4MmYsMHhiNSwweGMyIH0sCisgICAgeyAweDlhLDB4ODYsMHhjNSwweDdiIH0sIHsgMHhhNSwweGQzLDB4MzcsMHgwOCB9LAorICAgIHsgMHhmMiwweDMwLDB4MjgsMHg4NyB9LCB7IDB4YjIsMHgyMywweGJmLDB4YTUgfSwKKyAgICB7IDB4YmEsMHgwMiwweDAzLDB4NmEgfSwgeyAweDVjLDB4ZWQsMHgxNiwweDgyIH0sCisgICAgeyAweDJiLDB4OGEsMHhjZiwweDFjIH0sIHsgMHg5MiwweGE3LDB4NzksMHhiNCB9LAorICAgIHsgMHhmMCwweGYzLDB4MDcsMHhmMiB9LCB7IDB4YTEsMHg0ZSwweDY5LDB4ZTIgfSwKKyAgICB7IDB4Y2QsMHg2NSwweGRhLDB4ZjQgfSwgeyAweGQ1LDB4MDYsMHgwNSwweGJlIH0sCisgICAgeyAweDFmLDB4ZDEsMHgzNCwweDYyIH0sIHsgMHg4YSwweGM0LDB4YTYsMHhmZSB9LAorICAgIHsgMHg5ZCwweDM0LDB4MmUsMHg1MyB9LCB7IDB4YTAsMHhhMiwweGYzLDB4NTUgfSwKKyAgICB7IDB4MzIsMHgwNSwweDhhLDB4ZTEgfSwgeyAweDc1LDB4YTQsMHhmNiwweGViIH0sCisgICAgeyAweDM5LDB4MGIsMHg4MywweGVjIH0sIHsgMHhhYSwweDQwLDB4NjAsMHhlZiB9LAorICAgIHsgMHgwNiwweDVlLDB4NzEsMHg5ZiB9LCB7IDB4NTEsMHhiZCwweDZlLDB4MTAgfSwKKyAgICB7IDB4ZjksMHgzZSwweDIxLDB4OGEgfSwgeyAweDNkLDB4OTYsMHhkZCwweDA2IH0sCisgICAgeyAweGFlLDB4ZGQsMHgzZSwweDA1IH0sIHsgMHg0NiwweDRkLDB4ZTYsMHhiZCB9LAorICAgIHsgMHhiNSwweDkxLDB4NTQsMHg4ZCB9LCB7IDB4MDUsMHg3MSwweGM0LDB4NWQgfSwKKyAgICB7IDB4NmYsMHgwNCwweDA2LDB4ZDQgfSwgeyAweGZmLDB4NjAsMHg1MCwweDE1IH0sCisgICAgeyAweDI0LDB4MTksMHg5OCwweGZiIH0sIHsgMHg5NywweGQ2LDB4YmQsMHhlOSB9LAorICAgIHsgMHhjYywweDg5LDB4NDAsMHg0MyB9LCB7IDB4NzcsMHg2NywweGQ5LDB4OWUgfSwKKyAgICB7IDB4YmQsMHhiMCwweGU4LDB4NDIgfSwgeyAweDg4LDB4MDcsMHg4OSwweDhiIH0sCisgICAgeyAweDM4LDB4ZTcsMHgxOSwweDViIH0sIHsgMHhkYiwweDc5LDB4YzgsMHhlZSB9LAorICAgIHsgMHg0NywweGExLDB4N2MsMHgwYSB9LCB7IDB4ZTksMHg3YywweDQyLDB4MGYgfSwKKyAgICB7IDB4YzksMHhmOCwweDg0LDB4MWUgfSwgeyAweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgICAgeyAweDgzLDB4MDksMHg4MCwweDg2IH0sIHsgMHg0OCwweDMyLDB4MmIsMHhlZCB9LAorICAgIHsgMHhhYywweDFlLDB4MTEsMHg3MCB9LCB7IDB4NGUsMHg2YywweDVhLDB4NzIgfSwKKyAgICB7IDB4ZmIsMHhmZCwweDBlLDB4ZmYgfSwgeyAweDU2LDB4MGYsMHg4NSwweDM4IH0sCisgICAgeyAweDFlLDB4M2QsMHhhZSwweGQ1IH0sIHsgMHgyNywweDM2LDB4MmQsMHgzOSB9LAorICAgIHsgMHg2NCwweDBhLDB4MGYsMHhkOSB9LCB7IDB4MjEsMHg2OCwweDVjLDB4YTYgfSwKKyAgICB7IDB4ZDEsMHg5YiwweDViLDB4NTQgfSwgeyAweDNhLDB4MjQsMHgzNiwweDJlIH0sCisgICAgeyAweGIxLDB4MGMsMHgwYSwweDY3IH0sIHsgMHgwZiwweDkzLDB4NTcsMHhlNyB9LAorICAgIHsgMHhkMiwweGI0LDB4ZWUsMHg5NiB9LCB7IDB4OWUsMHgxYiwweDliLDB4OTEgfSwKKyAgICB7IDB4NGYsMHg4MCwweGMwLDB4YzUgfSwgeyAweGEyLDB4NjEsMHhkYywweDIwIH0sCisgICAgeyAweDY5LDB4NWEsMHg3NywweDRiIH0sIHsgMHgxNiwweDFjLDB4MTIsMHgxYSB9LAorICAgIHsgMHgwYSwweGUyLDB4OTMsMHhiYSB9LCB7IDB4ZTUsMHhjMCwweGEwLDB4MmEgfSwKKyAgICB7IDB4NDMsMHgzYywweDIyLDB4ZTAgfSwgeyAweDFkLDB4MTIsMHgxYiwweDE3IH0sCisgICAgeyAweDBiLDB4MGUsMHgwOSwweDBkIH0sIHsgMHhhZCwweGYyLDB4OGIsMHhjNyB9LAorICAgIHsgMHhiOSwweDJkLDB4YjYsMHhhOCB9LCB7IDB4YzgsMHgxNCwweDFlLDB4YTkgfSwKKyAgICB7IDB4ODUsMHg1NywweGYxLDB4MTkgfSwgeyAweDRjLDB4YWYsMHg3NSwweDA3IH0sCisgICAgeyAweGJiLDB4ZWUsMHg5OSwweGRkIH0sIHsgMHhmZCwweGEzLDB4N2YsMHg2MCB9LAorICAgIHsgMHg5ZiwweGY3LDB4MDEsMHgyNiB9LCB7IDB4YmMsMHg1YywweDcyLDB4ZjUgfSwKKyAgICB7IDB4YzUsMHg0NCwweDY2LDB4M2IgfSwgeyAweDM0LDB4NWIsMHhmYiwweDdlIH0sCisgICAgeyAweDc2LDB4OGIsMHg0MywweDI5IH0sIHsgMHhkYywweGNiLDB4MjMsMHhjNiB9LAorICAgIHsgMHg2OCwweGI2LDB4ZWQsMHhmYyB9LCB7IDB4NjMsMHhiOCwweGU0LDB4ZjEgfSwKKyAgICB7IDB4Y2EsMHhkNywweDMxLDB4ZGMgfSwgeyAweDEwLDB4NDIsMHg2MywweDg1IH0sCisgICAgeyAweDQwLDB4MTMsMHg5NywweDIyIH0sIHsgMHgyMCwweDg0LDB4YzYsMHgxMSB9LAorICAgIHsgMHg3ZCwweDg1LDB4NGEsMHgyNCB9LCB7IDB4ZjgsMHhkMiwweGJiLDB4M2QgfSwKKyAgICB7IDB4MTEsMHhhZSwweGY5LDB4MzIgfSwgeyAweDZkLDB4YzcsMHgyOSwweGExIH0sCisgICAgeyAweDRiLDB4MWQsMHg5ZSwweDJmIH0sIHsgMHhmMywweGRjLDB4YjIsMHgzMCB9LAorICAgIHsgMHhlYywweDBkLDB4ODYsMHg1MiB9LCB7IDB4ZDAsMHg3NywweGMxLDB4ZTMgfSwKKyAgICB7IDB4NmMsMHgyYiwweGIzLDB4MTYgfSwgeyAweDk5LDB4YTksMHg3MCwweGI5IH0sCisgICAgeyAweGZhLDB4MTEsMHg5NCwweDQ4IH0sIHsgMHgyMiwweDQ3LDB4ZTksMHg2NCB9LAorICAgIHsgMHhjNCwweGE4LDB4ZmMsMHg4YyB9LCB7IDB4MWEsMHhhMCwweGYwLDB4M2YgfSwKKyAgICB7IDB4ZDgsMHg1NiwweDdkLDB4MmMgfSwgeyAweGVmLDB4MjIsMHgzMywweDkwIH0sCisgICAgeyAweGM3LDB4ODcsMHg0OSwweDRlIH0sIHsgMHhjMSwweGQ5LDB4MzgsMHhkMSB9LAorICAgIHsgMHhmZSwweDhjLDB4Y2EsMHhhMiB9LCB7IDB4MzYsMHg5OCwweGQ0LDB4MGIgfSwKKyAgICB7IDB4Y2YsMHhhNiwweGY1LDB4ODEgfSwgeyAweDI4LDB4YTUsMHg3YSwweGRlIH0sCisgICAgeyAweDI2LDB4ZGEsMHhiNywweDhlIH0sIHsgMHhhNCwweDNmLDB4YWQsMHhiZiB9LAorICAgIHsgMHhlNCwweDJjLDB4M2EsMHg5ZCB9LCB7IDB4MGQsMHg1MCwweDc4LDB4OTIgfSwKKyAgICB7IDB4OWIsMHg2YSwweDVmLDB4Y2MgfSwgeyAweDYyLDB4NTQsMHg3ZSwweDQ2IH0sCisgICAgeyAweGMyLDB4ZjYsMHg4ZCwweDEzIH0sIHsgMHhlOCwweDkwLDB4ZDgsMHhiOCB9LAorICAgIHsgMHg1ZSwweDJlLDB4MzksMHhmNyB9LCB7IDB4ZjUsMHg4MiwweGMzLDB4YWYgfSwKKyAgICB7IDB4YmUsMHg5ZiwweDVkLDB4ODAgfSwgeyAweDdjLDB4NjksMHhkMCwweDkzIH0sCisgICAgeyAweGE5LDB4NmYsMHhkNSwweDJkIH0sIHsgMHhiMywweGNmLDB4MjUsMHgxMiB9LAorICAgIHsgMHgzYiwweGM4LDB4YWMsMHg5OSB9LCB7IDB4YTcsMHgxMCwweDE4LDB4N2QgfSwKKyAgICB7IDB4NmUsMHhlOCwweDljLDB4NjMgfSwgeyAweDdiLDB4ZGIsMHgzYiwweGJiIH0sCisgICAgeyAweDA5LDB4Y2QsMHgyNiwweDc4IH0sIHsgMHhmNCwweDZlLDB4NTksMHgxOCB9LAorICAgIHsgMHgwMSwweGVjLDB4OWEsMHhiNyB9LCB7IDB4YTgsMHg4MywweDRmLDB4OWEgfSwKKyAgICB7IDB4NjUsMHhlNiwweDk1LDB4NmUgfSwgeyAweDdlLDB4YWEsMHhmZiwweGU2IH0sCisgICAgeyAweDA4LDB4MjEsMHhiYywweGNmIH0sIHsgMHhlNiwweGVmLDB4MTUsMHhlOCB9LAorICAgIHsgMHhkOSwweGJhLDB4ZTcsMHg5YiB9LCB7IDB4Y2UsMHg0YSwweDZmLDB4MzYgfSwKKyAgICB7IDB4ZDQsMHhlYSwweDlmLDB4MDkgfSwgeyAweGQ2LDB4MjksMHhiMCwweDdjIH0sCisgICAgeyAweGFmLDB4MzEsMHhhNCwweGIyIH0sIHsgMHgzMSwweDJhLDB4M2YsMHgyMyB9LAorICAgIHsgMHgzMCwweGM2LDB4YTUsMHg5NCB9LCB7IDB4YzAsMHgzNSwweGEyLDB4NjYgfSwKKyAgICB7IDB4MzcsMHg3NCwweDRlLDB4YmMgfSwgeyAweGE2LDB4ZmMsMHg4MiwweGNhIH0sCisgICAgeyAweGIwLDB4ZTAsMHg5MCwweGQwIH0sIHsgMHgxNSwweDMzLDB4YTcsMHhkOCB9LAorICAgIHsgMHg0YSwweGYxLDB4MDQsMHg5OCB9LCB7IDB4ZjcsMHg0MSwweGVjLDB4ZGEgfSwKKyAgICB7IDB4MGUsMHg3ZiwweGNkLDB4NTAgfSwgeyAweDJmLDB4MTcsMHg5MSwweGY2IH0sCisgICAgeyAweDhkLDB4NzYsMHg0ZCwweGQ2IH0sIHsgMHg0ZCwweDQzLDB4ZWYsMHhiMCB9LAorICAgIHsgMHg1NCwweGNjLDB4YWEsMHg0ZCB9LCB7IDB4ZGYsMHhlNCwweDk2LDB4MDQgfSwKKyAgICB7IDB4ZTMsMHg5ZSwweGQxLDB4YjUgfSwgeyAweDFiLDB4NGMsMHg2YSwweDg4IH0sCisgICAgeyAweGI4LDB4YzEsMHgyYywweDFmIH0sIHsgMHg3ZiwweDQ2LDB4NjUsMHg1MSB9LAorICAgIHsgMHgwNCwweDlkLDB4NWUsMHhlYSB9LCB7IDB4NWQsMHgwMSwweDhjLDB4MzUgfSwKKyAgICB7IDB4NzMsMHhmYSwweDg3LDB4NzQgfSwgeyAweDJlLDB4ZmIsMHgwYiwweDQxIH0sCisgICAgeyAweDVhLDB4YjMsMHg2NywweDFkIH0sIHsgMHg1MiwweDkyLDB4ZGIsMHhkMiB9LAorICAgIHsgMHgzMywweGU5LDB4MTAsMHg1NiB9LCB7IDB4MTMsMHg2ZCwweGQ2LDB4NDcgfSwKKyAgICB7IDB4OGMsMHg5YSwweGQ3LDB4NjEgfSwgeyAweDdhLDB4MzcsMHhhMSwweDBjIH0sCisgICAgeyAweDhlLDB4NTksMHhmOCwweDE0IH0sIHsgMHg4OSwweGViLDB4MTMsMHgzYyB9LAorICAgIHsgMHhlZSwweGNlLDB4YTksMHgyNyB9LCB7IDB4MzUsMHhiNywweDYxLDB4YzkgfSwKKyAgICB7IDB4ZWQsMHhlMSwweDFjLDB4ZTUgfSwgeyAweDNjLDB4N2EsMHg0NywweGIxIH0sCisgICAgeyAweDU5LDB4OWMsMHhkMiwweGRmIH0sIHsgMHgzZiwweDU1LDB4ZjIsMHg3MyB9LAorICAgIHsgMHg3OSwweDE4LDB4MTQsMHhjZSB9LCB7IDB4YmYsMHg3MywweGM3LDB4MzcgfSwKKyAgICB7IDB4ZWEsMHg1MywweGY3LDB4Y2QgfSwgeyAweDViLDB4NWYsMHhmZCwweGFhIH0sCisgICAgeyAweDE0LDB4ZGYsMHgzZCwweDZmIH0sIHsgMHg4NiwweDc4LDB4NDQsMHhkYiB9LAorICAgIHsgMHg4MSwweGNhLDB4YWYsMHhmMyB9LCB7IDB4M2UsMHhiOSwweDY4LDB4YzQgfSwKKyAgICB7IDB4MmMsMHgzOCwweDI0LDB4MzQgfSwgeyAweDVmLDB4YzIsMHhhMywweDQwIH0sCisgICAgeyAweDcyLDB4MTYsMHgxZCwweGMzIH0sIHsgMHgwYywweGJjLDB4ZTIsMHgyNSB9LAorICAgIHsgMHg4YiwweDI4LDB4M2MsMHg0OSB9LCB7IDB4NDEsMHhmZiwweDBkLDB4OTUgfSwKKyAgICB7IDB4NzEsMHgzOSwweGE4LDB4MDEgfSwgeyAweGRlLDB4MDgsMHgwYywweGIzIH0sCisgICAgeyAweDljLDB4ZDgsMHhiNCwweGU0IH0sIHsgMHg5MCwweDY0LDB4NTYsMHhjMSB9LAorICAgIHsgMHg2MSwweDdiLDB4Y2IsMHg4NCB9LCB7IDB4NzAsMHhkNSwweDMyLDB4YjYgfSwKKyAgICB7IDB4NzQsMHg0OCwweDZjLDB4NWMgfSwgeyAweDQyLDB4ZDAsMHhiOCwweDU3IH0KKyAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVDdbMjU2XVs0XSA9CisgIHsKKyAgICB7IDB4YTcsMHg1MCwweDUxLDB4ZjQgfSwgeyAweDY1LDB4NTMsMHg3ZSwweDQxIH0sCisgICAgeyAweGE0LDB4YzMsMHgxYSwweDE3IH0sIHsgMHg1ZSwweDk2LDB4M2EsMHgyNyB9LAorICAgIHsgMHg2YiwweGNiLDB4M2IsMHhhYiB9LCB7IDB4NDUsMHhmMSwweDFmLDB4OWQgfSwKKyAgICB7IDB4NTgsMHhhYiwweGFjLDB4ZmEgfSwgeyAweDAzLDB4OTMsMHg0YiwweGUzIH0sCisgICAgeyAweGZhLDB4NTUsMHgyMCwweDMwIH0sIHsgMHg2ZCwweGY2LDB4YWQsMHg3NiB9LAorICAgIHsgMHg3NiwweDkxLDB4ODgsMHhjYyB9LCB7IDB4NGMsMHgyNSwweGY1LDB4MDIgfSwKKyAgICB7IDB4ZDcsMHhmYywweDRmLDB4ZTUgfSwgeyAweGNiLDB4ZDcsMHhjNSwweDJhIH0sCisgICAgeyAweDQ0LDB4ODAsMHgyNiwweDM1IH0sIHsgMHhhMywweDhmLDB4YjUsMHg2MiB9LAorICAgIHsgMHg1YSwweDQ5LDB4ZGUsMHhiMSB9LCB7IDB4MWIsMHg2NywweDI1LDB4YmEgfSwKKyAgICB7IDB4MGUsMHg5OCwweDQ1LDB4ZWEgfSwgeyAweGMwLDB4ZTEsMHg1ZCwweGZlIH0sCisgICAgeyAweDc1LDB4MDIsMHhjMywweDJmIH0sIHsgMHhmMCwweDEyLDB4ODEsMHg0YyB9LAorICAgIHsgMHg5NywweGEzLDB4OGQsMHg0NiB9LCB7IDB4ZjksMHhjNiwweDZiLDB4ZDMgfSwKKyAgICB7IDB4NWYsMHhlNywweDAzLDB4OGYgfSwgeyAweDljLDB4OTUsMHgxNSwweDkyIH0sCisgICAgeyAweDdhLDB4ZWIsMHhiZiwweDZkIH0sIHsgMHg1OSwweGRhLDB4OTUsMHg1MiB9LAorICAgIHsgMHg4MywweDJkLDB4ZDQsMHhiZSB9LCB7IDB4MjEsMHhkMywweDU4LDB4NzQgfSwKKyAgICB7IDB4NjksMHgyOSwweDQ5LDB4ZTAgfSwgeyAweGM4LDB4NDQsMHg4ZSwweGM5IH0sCisgICAgeyAweDg5LDB4NmEsMHg3NSwweGMyIH0sIHsgMHg3OSwweDc4LDB4ZjQsMHg4ZSB9LAorICAgIHsgMHgzZSwweDZiLDB4OTksMHg1OCB9LCB7IDB4NzEsMHhkZCwweDI3LDB4YjkgfSwKKyAgICB7IDB4NGYsMHhiNiwweGJlLDB4ZTEgfSwgeyAweGFkLDB4MTcsMHhmMCwweDg4IH0sCisgICAgeyAweGFjLDB4NjYsMHhjOSwweDIwIH0sIHsgMHgzYSwweGI0LDB4N2QsMHhjZSB9LAorICAgIHsgMHg0YSwweDE4LDB4NjMsMHhkZiB9LCB7IDB4MzEsMHg4MiwweGU1LDB4MWEgfSwKKyAgICB7IDB4MzMsMHg2MCwweDk3LDB4NTEgfSwgeyAweDdmLDB4NDUsMHg2MiwweDUzIH0sCisgICAgeyAweDc3LDB4ZTAsMHhiMSwweDY0IH0sIHsgMHhhZSwweDg0LDB4YmIsMHg2YiB9LAorICAgIHsgMHhhMCwweDFjLDB4ZmUsMHg4MSB9LCB7IDB4MmIsMHg5NCwweGY5LDB4MDggfSwKKyAgICB7IDB4NjgsMHg1OCwweDcwLDB4NDggfSwgeyAweGZkLDB4MTksMHg4ZiwweDQ1IH0sCisgICAgeyAweDZjLDB4ODcsMHg5NCwweGRlIH0sIHsgMHhmOCwweGI3LDB4NTIsMHg3YiB9LAorICAgIHsgMHhkMywweDIzLDB4YWIsMHg3MyB9LCB7IDB4MDIsMHhlMiwweDcyLDB4NGIgfSwKKyAgICB7IDB4OGYsMHg1NywweGUzLDB4MWYgfSwgeyAweGFiLDB4MmEsMHg2NiwweDU1IH0sCisgICAgeyAweDI4LDB4MDcsMHhiMiwweGViIH0sIHsgMHhjMiwweDAzLDB4MmYsMHhiNSB9LAorICAgIHsgMHg3YiwweDlhLDB4ODYsMHhjNSB9LCB7IDB4MDgsMHhhNSwweGQzLDB4MzcgfSwKKyAgICB7IDB4ODcsMHhmMiwweDMwLDB4MjggfSwgeyAweGE1LDB4YjIsMHgyMywweGJmIH0sCisgICAgeyAweDZhLDB4YmEsMHgwMiwweDAzIH0sIHsgMHg4MiwweDVjLDB4ZWQsMHgxNiB9LAorICAgIHsgMHgxYywweDJiLDB4OGEsMHhjZiB9LCB7IDB4YjQsMHg5MiwweGE3LDB4NzkgfSwKKyAgICB7IDB4ZjIsMHhmMCwweGYzLDB4MDcgfSwgeyAweGUyLDB4YTEsMHg0ZSwweDY5IH0sCisgICAgeyAweGY0LDB4Y2QsMHg2NSwweGRhIH0sIHsgMHhiZSwweGQ1LDB4MDYsMHgwNSB9LAorICAgIHsgMHg2MiwweDFmLDB4ZDEsMHgzNCB9LCB7IDB4ZmUsMHg4YSwweGM0LDB4YTYgfSwKKyAgICB7IDB4NTMsMHg5ZCwweDM0LDB4MmUgfSwgeyAweDU1LDB4YTAsMHhhMiwweGYzIH0sCisgICAgeyAweGUxLDB4MzIsMHgwNSwweDhhIH0sIHsgMHhlYiwweDc1LDB4YTQsMHhmNiB9LAorICAgIHsgMHhlYywweDM5LDB4MGIsMHg4MyB9LCB7IDB4ZWYsMHhhYSwweDQwLDB4NjAgfSwKKyAgICB7IDB4OWYsMHgwNiwweDVlLDB4NzEgfSwgeyAweDEwLDB4NTEsMHhiZCwweDZlIH0sCisgICAgeyAweDhhLDB4ZjksMHgzZSwweDIxIH0sIHsgMHgwNiwweDNkLDB4OTYsMHhkZCB9LAorICAgIHsgMHgwNSwweGFlLDB4ZGQsMHgzZSB9LCB7IDB4YmQsMHg0NiwweDRkLDB4ZTYgfSwKKyAgICB7IDB4OGQsMHhiNSwweDkxLDB4NTQgfSwgeyAweDVkLDB4MDUsMHg3MSwweGM0IH0sCisgICAgeyAweGQ0LDB4NmYsMHgwNCwweDA2IH0sIHsgMHgxNSwweGZmLDB4NjAsMHg1MCB9LAorICAgIHsgMHhmYiwweDI0LDB4MTksMHg5OCB9LCB7IDB4ZTksMHg5NywweGQ2LDB4YmQgfSwKKyAgICB7IDB4NDMsMHhjYywweDg5LDB4NDAgfSwgeyAweDllLDB4NzcsMHg2NywweGQ5IH0sCisgICAgeyAweDQyLDB4YmQsMHhiMCwweGU4IH0sIHsgMHg4YiwweDg4LDB4MDcsMHg4OSB9LAorICAgIHsgMHg1YiwweDM4LDB4ZTcsMHgxOSB9LCB7IDB4ZWUsMHhkYiwweDc5LDB4YzggfSwKKyAgICB7IDB4MGEsMHg0NywweGExLDB4N2MgfSwgeyAweDBmLDB4ZTksMHg3YywweDQyIH0sCisgICAgeyAweDFlLDB4YzksMHhmOCwweDg0IH0sIHsgMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAgIHsgMHg4NiwweDgzLDB4MDksMHg4MCB9LCB7IDB4ZWQsMHg0OCwweDMyLDB4MmIgfSwKKyAgICB7IDB4NzAsMHhhYywweDFlLDB4MTEgfSwgeyAweDcyLDB4NGUsMHg2YywweDVhIH0sCisgICAgeyAweGZmLDB4ZmIsMHhmZCwweDBlIH0sIHsgMHgzOCwweDU2LDB4MGYsMHg4NSB9LAorICAgIHsgMHhkNSwweDFlLDB4M2QsMHhhZSB9LCB7IDB4MzksMHgyNywweDM2LDB4MmQgfSwKKyAgICB7IDB4ZDksMHg2NCwweDBhLDB4MGYgfSwgeyAweGE2LDB4MjEsMHg2OCwweDVjIH0sCisgICAgeyAweDU0LDB4ZDEsMHg5YiwweDViIH0sIHsgMHgyZSwweDNhLDB4MjQsMHgzNiB9LAorICAgIHsgMHg2NywweGIxLDB4MGMsMHgwYSB9LCB7IDB4ZTcsMHgwZiwweDkzLDB4NTcgfSwKKyAgICB7IDB4OTYsMHhkMiwweGI0LDB4ZWUgfSwgeyAweDkxLDB4OWUsMHgxYiwweDliIH0sCisgICAgeyAweGM1LDB4NGYsMHg4MCwweGMwIH0sIHsgMHgyMCwweGEyLDB4NjEsMHhkYyB9LAorICAgIHsgMHg0YiwweDY5LDB4NWEsMHg3NyB9LCB7IDB4MWEsMHgxNiwweDFjLDB4MTIgfSwKKyAgICB7IDB4YmEsMHgwYSwweGUyLDB4OTMgfSwgeyAweDJhLDB4ZTUsMHhjMCwweGEwIH0sCisgICAgeyAweGUwLDB4NDMsMHgzYywweDIyIH0sIHsgMHgxNywweDFkLDB4MTIsMHgxYiB9LAorICAgIHsgMHgwZCwweDBiLDB4MGUsMHgwOSB9LCB7IDB4YzcsMHhhZCwweGYyLDB4OGIgfSwKKyAgICB7IDB4YTgsMHhiOSwweDJkLDB4YjYgfSwgeyAweGE5LDB4YzgsMHgxNCwweDFlIH0sCisgICAgeyAweDE5LDB4ODUsMHg1NywweGYxIH0sIHsgMHgwNywweDRjLDB4YWYsMHg3NSB9LAorICAgIHsgMHhkZCwweGJiLDB4ZWUsMHg5OSB9LCB7IDB4NjAsMHhmZCwweGEzLDB4N2YgfSwKKyAgICB7IDB4MjYsMHg5ZiwweGY3LDB4MDEgfSwgeyAweGY1LDB4YmMsMHg1YywweDcyIH0sCisgICAgeyAweDNiLDB4YzUsMHg0NCwweDY2IH0sIHsgMHg3ZSwweDM0LDB4NWIsMHhmYiB9LAorICAgIHsgMHgyOSwweDc2LDB4OGIsMHg0MyB9LCB7IDB4YzYsMHhkYywweGNiLDB4MjMgfSwKKyAgICB7IDB4ZmMsMHg2OCwweGI2LDB4ZWQgfSwgeyAweGYxLDB4NjMsMHhiOCwweGU0IH0sCisgICAgeyAweGRjLDB4Y2EsMHhkNywweDMxIH0sIHsgMHg4NSwweDEwLDB4NDIsMHg2MyB9LAorICAgIHsgMHgyMiwweDQwLDB4MTMsMHg5NyB9LCB7IDB4MTEsMHgyMCwweDg0LDB4YzYgfSwKKyAgICB7IDB4MjQsMHg3ZCwweDg1LDB4NGEgfSwgeyAweDNkLDB4ZjgsMHhkMiwweGJiIH0sCisgICAgeyAweDMyLDB4MTEsMHhhZSwweGY5IH0sIHsgMHhhMSwweDZkLDB4YzcsMHgyOSB9LAorICAgIHsgMHgyZiwweDRiLDB4MWQsMHg5ZSB9LCB7IDB4MzAsMHhmMywweGRjLDB4YjIgfSwKKyAgICB7IDB4NTIsMHhlYywweDBkLDB4ODYgfSwgeyAweGUzLDB4ZDAsMHg3NywweGMxIH0sCisgICAgeyAweDE2LDB4NmMsMHgyYiwweGIzIH0sIHsgMHhiOSwweDk5LDB4YTksMHg3MCB9LAorICAgIHsgMHg0OCwweGZhLDB4MTEsMHg5NCB9LCB7IDB4NjQsMHgyMiwweDQ3LDB4ZTkgfSwKKyAgICB7IDB4OGMsMHhjNCwweGE4LDB4ZmMgfSwgeyAweDNmLDB4MWEsMHhhMCwweGYwIH0sCisgICAgeyAweDJjLDB4ZDgsMHg1NiwweDdkIH0sIHsgMHg5MCwweGVmLDB4MjIsMHgzMyB9LAorICAgIHsgMHg0ZSwweGM3LDB4ODcsMHg0OSB9LCB7IDB4ZDEsMHhjMSwweGQ5LDB4MzggfSwKKyAgICB7IDB4YTIsMHhmZSwweDhjLDB4Y2EgfSwgeyAweDBiLDB4MzYsMHg5OCwweGQ0IH0sCisgICAgeyAweDgxLDB4Y2YsMHhhNiwweGY1IH0sIHsgMHhkZSwweDI4LDB4YTUsMHg3YSB9LAorICAgIHsgMHg4ZSwweDI2LDB4ZGEsMHhiNyB9LCB7IDB4YmYsMHhhNCwweDNmLDB4YWQgfSwKKyAgICB7IDB4OWQsMHhlNCwweDJjLDB4M2EgfSwgeyAweDkyLDB4MGQsMHg1MCwweDc4IH0sCisgICAgeyAweGNjLDB4OWIsMHg2YSwweDVmIH0sIHsgMHg0NiwweDYyLDB4NTQsMHg3ZSB9LAorICAgIHsgMHgxMywweGMyLDB4ZjYsMHg4ZCB9LCB7IDB4YjgsMHhlOCwweDkwLDB4ZDggfSwKKyAgICB7IDB4ZjcsMHg1ZSwweDJlLDB4MzkgfSwgeyAweGFmLDB4ZjUsMHg4MiwweGMzIH0sCisgICAgeyAweDgwLDB4YmUsMHg5ZiwweDVkIH0sIHsgMHg5MywweDdjLDB4NjksMHhkMCB9LAorICAgIHsgMHgyZCwweGE5LDB4NmYsMHhkNSB9LCB7IDB4MTIsMHhiMywweGNmLDB4MjUgfSwKKyAgICB7IDB4OTksMHgzYiwweGM4LDB4YWMgfSwgeyAweDdkLDB4YTcsMHgxMCwweDE4IH0sCisgICAgeyAweDYzLDB4NmUsMHhlOCwweDljIH0sIHsgMHhiYiwweDdiLDB4ZGIsMHgzYiB9LAorICAgIHsgMHg3OCwweDA5LDB4Y2QsMHgyNiB9LCB7IDB4MTgsMHhmNCwweDZlLDB4NTkgfSwKKyAgICB7IDB4YjcsMHgwMSwweGVjLDB4OWEgfSwgeyAweDlhLDB4YTgsMHg4MywweDRmIH0sCisgICAgeyAweDZlLDB4NjUsMHhlNiwweDk1IH0sIHsgMHhlNiwweDdlLDB4YWEsMHhmZiB9LAorICAgIHsgMHhjZiwweDA4LDB4MjEsMHhiYyB9LCB7IDB4ZTgsMHhlNiwweGVmLDB4MTUgfSwKKyAgICB7IDB4OWIsMHhkOSwweGJhLDB4ZTcgfSwgeyAweDM2LDB4Y2UsMHg0YSwweDZmIH0sCisgICAgeyAweDA5LDB4ZDQsMHhlYSwweDlmIH0sIHsgMHg3YywweGQ2LDB4MjksMHhiMCB9LAorICAgIHsgMHhiMiwweGFmLDB4MzEsMHhhNCB9LCB7IDB4MjMsMHgzMSwweDJhLDB4M2YgfSwKKyAgICB7IDB4OTQsMHgzMCwweGM2LDB4YTUgfSwgeyAweDY2LDB4YzAsMHgzNSwweGEyIH0sCisgICAgeyAweGJjLDB4MzcsMHg3NCwweDRlIH0sIHsgMHhjYSwweGE2LDB4ZmMsMHg4MiB9LAorICAgIHsgMHhkMCwweGIwLDB4ZTAsMHg5MCB9LCB7IDB4ZDgsMHgxNSwweDMzLDB4YTcgfSwKKyAgICB7IDB4OTgsMHg0YSwweGYxLDB4MDQgfSwgeyAweGRhLDB4ZjcsMHg0MSwweGVjIH0sCisgICAgeyAweDUwLDB4MGUsMHg3ZiwweGNkIH0sIHsgMHhmNiwweDJmLDB4MTcsMHg5MSB9LAorICAgIHsgMHhkNiwweDhkLDB4NzYsMHg0ZCB9LCB7IDB4YjAsMHg0ZCwweDQzLDB4ZWYgfSwKKyAgICB7IDB4NGQsMHg1NCwweGNjLDB4YWEgfSwgeyAweDA0LDB4ZGYsMHhlNCwweDk2IH0sCisgICAgeyAweGI1LDB4ZTMsMHg5ZSwweGQxIH0sIHsgMHg4OCwweDFiLDB4NGMsMHg2YSB9LAorICAgIHsgMHgxZiwweGI4LDB4YzEsMHgyYyB9LCB7IDB4NTEsMHg3ZiwweDQ2LDB4NjUgfSwKKyAgICB7IDB4ZWEsMHgwNCwweDlkLDB4NWUgfSwgeyAweDM1LDB4NWQsMHgwMSwweDhjIH0sCisgICAgeyAweDc0LDB4NzMsMHhmYSwweDg3IH0sIHsgMHg0MSwweDJlLDB4ZmIsMHgwYiB9LAorICAgIHsgMHgxZCwweDVhLDB4YjMsMHg2NyB9LCB7IDB4ZDIsMHg1MiwweDkyLDB4ZGIgfSwKKyAgICB7IDB4NTYsMHgzMywweGU5LDB4MTAgfSwgeyAweDQ3LDB4MTMsMHg2ZCwweGQ2IH0sCisgICAgeyAweDYxLDB4OGMsMHg5YSwweGQ3IH0sIHsgMHgwYywweDdhLDB4MzcsMHhhMSB9LAorICAgIHsgMHgxNCwweDhlLDB4NTksMHhmOCB9LCB7IDB4M2MsMHg4OSwweGViLDB4MTMgfSwKKyAgICB7IDB4MjcsMHhlZSwweGNlLDB4YTkgfSwgeyAweGM5LDB4MzUsMHhiNywweDYxIH0sCisgICAgeyAweGU1LDB4ZWQsMHhlMSwweDFjIH0sIHsgMHhiMSwweDNjLDB4N2EsMHg0NyB9LAorICAgIHsgMHhkZiwweDU5LDB4OWMsMHhkMiB9LCB7IDB4NzMsMHgzZiwweDU1LDB4ZjIgfSwKKyAgICB7IDB4Y2UsMHg3OSwweDE4LDB4MTQgfSwgeyAweDM3LDB4YmYsMHg3MywweGM3IH0sCisgICAgeyAweGNkLDB4ZWEsMHg1MywweGY3IH0sIHsgMHhhYSwweDViLDB4NWYsMHhmZCB9LAorICAgIHsgMHg2ZiwweDE0LDB4ZGYsMHgzZCB9LCB7IDB4ZGIsMHg4NiwweDc4LDB4NDQgfSwKKyAgICB7IDB4ZjMsMHg4MSwweGNhLDB4YWYgfSwgeyAweGM0LDB4M2UsMHhiOSwweDY4IH0sCisgICAgeyAweDM0LDB4MmMsMHgzOCwweDI0IH0sIHsgMHg0MCwweDVmLDB4YzIsMHhhMyB9LAorICAgIHsgMHhjMywweDcyLDB4MTYsMHgxZCB9LCB7IDB4MjUsMHgwYywweGJjLDB4ZTIgfSwKKyAgICB7IDB4NDksMHg4YiwweDI4LDB4M2MgfSwgeyAweDk1LDB4NDEsMHhmZiwweDBkIH0sCisgICAgeyAweDAxLDB4NzEsMHgzOSwweGE4IH0sIHsgMHhiMywweGRlLDB4MDgsMHgwYyB9LAorICAgIHsgMHhlNCwweDljLDB4ZDgsMHhiNCB9LCB7IDB4YzEsMHg5MCwweDY0LDB4NTYgfSwKKyAgICB7IDB4ODQsMHg2MSwweDdiLDB4Y2IgfSwgeyAweGI2LDB4NzAsMHhkNSwweDMyIH0sCisgICAgeyAweDVjLDB4NzQsMHg0OCwweDZjIH0sIHsgMHg1NywweDQyLDB4ZDAsMHhiOCB9CisgIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFQ4WzI1Nl1bNF0gPQorICB7CisgICAgeyAweGY0LDB4YTcsMHg1MCwweDUxIH0sIHsgMHg0MSwweDY1LDB4NTMsMHg3ZSB9LAorICAgIHsgMHgxNywweGE0LDB4YzMsMHgxYSB9LCB7IDB4MjcsMHg1ZSwweDk2LDB4M2EgfSwKKyAgICB7IDB4YWIsMHg2YiwweGNiLDB4M2IgfSwgeyAweDlkLDB4NDUsMHhmMSwweDFmIH0sCisgICAgeyAweGZhLDB4NTgsMHhhYiwweGFjIH0sIHsgMHhlMywweDAzLDB4OTMsMHg0YiB9LAorICAgIHsgMHgzMCwweGZhLDB4NTUsMHgyMCB9LCB7IDB4NzYsMHg2ZCwweGY2LDB4YWQgfSwKKyAgICB7IDB4Y2MsMHg3NiwweDkxLDB4ODggfSwgeyAweDAyLDB4NGMsMHgyNSwweGY1IH0sCisgICAgeyAweGU1LDB4ZDcsMHhmYywweDRmIH0sIHsgMHgyYSwweGNiLDB4ZDcsMHhjNSB9LAorICAgIHsgMHgzNSwweDQ0LDB4ODAsMHgyNiB9LCB7IDB4NjIsMHhhMywweDhmLDB4YjUgfSwKKyAgICB7IDB4YjEsMHg1YSwweDQ5LDB4ZGUgfSwgeyAweGJhLDB4MWIsMHg2NywweDI1IH0sCisgICAgeyAweGVhLDB4MGUsMHg5OCwweDQ1IH0sIHsgMHhmZSwweGMwLDB4ZTEsMHg1ZCB9LAorICAgIHsgMHgyZiwweDc1LDB4MDIsMHhjMyB9LCB7IDB4NGMsMHhmMCwweDEyLDB4ODEgfSwKKyAgICB7IDB4NDYsMHg5NywweGEzLDB4OGQgfSwgeyAweGQzLDB4ZjksMHhjNiwweDZiIH0sCisgICAgeyAweDhmLDB4NWYsMHhlNywweDAzIH0sIHsgMHg5MiwweDljLDB4OTUsMHgxNSB9LAorICAgIHsgMHg2ZCwweDdhLDB4ZWIsMHhiZiB9LCB7IDB4NTIsMHg1OSwweGRhLDB4OTUgfSwKKyAgICB7IDB4YmUsMHg4MywweDJkLDB4ZDQgfSwgeyAweDc0LDB4MjEsMHhkMywweDU4IH0sCisgICAgeyAweGUwLDB4NjksMHgyOSwweDQ5IH0sIHsgMHhjOSwweGM4LDB4NDQsMHg4ZSB9LAorICAgIHsgMHhjMiwweDg5LDB4NmEsMHg3NSB9LCB7IDB4OGUsMHg3OSwweDc4LDB4ZjQgfSwKKyAgICB7IDB4NTgsMHgzZSwweDZiLDB4OTkgfSwgeyAweGI5LDB4NzEsMHhkZCwweDI3IH0sCisgICAgeyAweGUxLDB4NGYsMHhiNiwweGJlIH0sIHsgMHg4OCwweGFkLDB4MTcsMHhmMCB9LAorICAgIHsgMHgyMCwweGFjLDB4NjYsMHhjOSB9LCB7IDB4Y2UsMHgzYSwweGI0LDB4N2QgfSwKKyAgICB7IDB4ZGYsMHg0YSwweDE4LDB4NjMgfSwgeyAweDFhLDB4MzEsMHg4MiwweGU1IH0sCisgICAgeyAweDUxLDB4MzMsMHg2MCwweDk3IH0sIHsgMHg1MywweDdmLDB4NDUsMHg2MiB9LAorICAgIHsgMHg2NCwweDc3LDB4ZTAsMHhiMSB9LCB7IDB4NmIsMHhhZSwweDg0LDB4YmIgfSwKKyAgICB7IDB4ODEsMHhhMCwweDFjLDB4ZmUgfSwgeyAweDA4LDB4MmIsMHg5NCwweGY5IH0sCisgICAgeyAweDQ4LDB4NjgsMHg1OCwweDcwIH0sIHsgMHg0NSwweGZkLDB4MTksMHg4ZiB9LAorICAgIHsgMHhkZSwweDZjLDB4ODcsMHg5NCB9LCB7IDB4N2IsMHhmOCwweGI3LDB4NTIgfSwKKyAgICB7IDB4NzMsMHhkMywweDIzLDB4YWIgfSwgeyAweDRiLDB4MDIsMHhlMiwweDcyIH0sCisgICAgeyAweDFmLDB4OGYsMHg1NywweGUzIH0sIHsgMHg1NSwweGFiLDB4MmEsMHg2NiB9LAorICAgIHsgMHhlYiwweDI4LDB4MDcsMHhiMiB9LCB7IDB4YjUsMHhjMiwweDAzLDB4MmYgfSwKKyAgICB7IDB4YzUsMHg3YiwweDlhLDB4ODYgfSwgeyAweDM3LDB4MDgsMHhhNSwweGQzIH0sCisgICAgeyAweDI4LDB4ODcsMHhmMiwweDMwIH0sIHsgMHhiZiwweGE1LDB4YjIsMHgyMyB9LAorICAgIHsgMHgwMywweDZhLDB4YmEsMHgwMiB9LCB7IDB4MTYsMHg4MiwweDVjLDB4ZWQgfSwKKyAgICB7IDB4Y2YsMHgxYywweDJiLDB4OGEgfSwgeyAweDc5LDB4YjQsMHg5MiwweGE3IH0sCisgICAgeyAweDA3LDB4ZjIsMHhmMCwweGYzIH0sIHsgMHg2OSwweGUyLDB4YTEsMHg0ZSB9LAorICAgIHsgMHhkYSwweGY0LDB4Y2QsMHg2NSB9LCB7IDB4MDUsMHhiZSwweGQ1LDB4MDYgfSwKKyAgICB7IDB4MzQsMHg2MiwweDFmLDB4ZDEgfSwgeyAweGE2LDB4ZmUsMHg4YSwweGM0IH0sCisgICAgeyAweDJlLDB4NTMsMHg5ZCwweDM0IH0sIHsgMHhmMywweDU1LDB4YTAsMHhhMiB9LAorICAgIHsgMHg4YSwweGUxLDB4MzIsMHgwNSB9LCB7IDB4ZjYsMHhlYiwweDc1LDB4YTQgfSwKKyAgICB7IDB4ODMsMHhlYywweDM5LDB4MGIgfSwgeyAweDYwLDB4ZWYsMHhhYSwweDQwIH0sCisgICAgeyAweDcxLDB4OWYsMHgwNiwweDVlIH0sIHsgMHg2ZSwweDEwLDB4NTEsMHhiZCB9LAorICAgIHsgMHgyMSwweDhhLDB4ZjksMHgzZSB9LCB7IDB4ZGQsMHgwNiwweDNkLDB4OTYgfSwKKyAgICB7IDB4M2UsMHgwNSwweGFlLDB4ZGQgfSwgeyAweGU2LDB4YmQsMHg0NiwweDRkIH0sCisgICAgeyAweDU0LDB4OGQsMHhiNSwweDkxIH0sIHsgMHhjNCwweDVkLDB4MDUsMHg3MSB9LAorICAgIHsgMHgwNiwweGQ0LDB4NmYsMHgwNCB9LCB7IDB4NTAsMHgxNSwweGZmLDB4NjAgfSwKKyAgICB7IDB4OTgsMHhmYiwweDI0LDB4MTkgfSwgeyAweGJkLDB4ZTksMHg5NywweGQ2IH0sCisgICAgeyAweDQwLDB4NDMsMHhjYywweDg5IH0sIHsgMHhkOSwweDllLDB4NzcsMHg2NyB9LAorICAgIHsgMHhlOCwweDQyLDB4YmQsMHhiMCB9LCB7IDB4ODksMHg4YiwweDg4LDB4MDcgfSwKKyAgICB7IDB4MTksMHg1YiwweDM4LDB4ZTcgfSwgeyAweGM4LDB4ZWUsMHhkYiwweDc5IH0sCisgICAgeyAweDdjLDB4MGEsMHg0NywweGExIH0sIHsgMHg0MiwweDBmLDB4ZTksMHg3YyB9LAorICAgIHsgMHg4NCwweDFlLDB4YzksMHhmOCB9LCB7IDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgICB7IDB4ODAsMHg4NiwweDgzLDB4MDkgfSwgeyAweDJiLDB4ZWQsMHg0OCwweDMyIH0sCisgICAgeyAweDExLDB4NzAsMHhhYywweDFlIH0sIHsgMHg1YSwweDcyLDB4NGUsMHg2YyB9LAorICAgIHsgMHgwZSwweGZmLDB4ZmIsMHhmZCB9LCB7IDB4ODUsMHgzOCwweDU2LDB4MGYgfSwKKyAgICB7IDB4YWUsMHhkNSwweDFlLDB4M2QgfSwgeyAweDJkLDB4MzksMHgyNywweDM2IH0sCisgICAgeyAweDBmLDB4ZDksMHg2NCwweDBhIH0sIHsgMHg1YywweGE2LDB4MjEsMHg2OCB9LAorICAgIHsgMHg1YiwweDU0LDB4ZDEsMHg5YiB9LCB7IDB4MzYsMHgyZSwweDNhLDB4MjQgfSwKKyAgICB7IDB4MGEsMHg2NywweGIxLDB4MGMgfSwgeyAweDU3LDB4ZTcsMHgwZiwweDkzIH0sCisgICAgeyAweGVlLDB4OTYsMHhkMiwweGI0IH0sIHsgMHg5YiwweDkxLDB4OWUsMHgxYiB9LAorICAgIHsgMHhjMCwweGM1LDB4NGYsMHg4MCB9LCB7IDB4ZGMsMHgyMCwweGEyLDB4NjEgfSwKKyAgICB7IDB4NzcsMHg0YiwweDY5LDB4NWEgfSwgeyAweDEyLDB4MWEsMHgxNiwweDFjIH0sCisgICAgeyAweDkzLDB4YmEsMHgwYSwweGUyIH0sIHsgMHhhMCwweDJhLDB4ZTUsMHhjMCB9LAorICAgIHsgMHgyMiwweGUwLDB4NDMsMHgzYyB9LCB7IDB4MWIsMHgxNywweDFkLDB4MTIgfSwKKyAgICB7IDB4MDksMHgwZCwweDBiLDB4MGUgfSwgeyAweDhiLDB4YzcsMHhhZCwweGYyIH0sCisgICAgeyAweGI2LDB4YTgsMHhiOSwweDJkIH0sIHsgMHgxZSwweGE5LDB4YzgsMHgxNCB9LAorICAgIHsgMHhmMSwweDE5LDB4ODUsMHg1NyB9LCB7IDB4NzUsMHgwNywweDRjLDB4YWYgfSwKKyAgICB7IDB4OTksMHhkZCwweGJiLDB4ZWUgfSwgeyAweDdmLDB4NjAsMHhmZCwweGEzIH0sCisgICAgeyAweDAxLDB4MjYsMHg5ZiwweGY3IH0sIHsgMHg3MiwweGY1LDB4YmMsMHg1YyB9LAorICAgIHsgMHg2NiwweDNiLDB4YzUsMHg0NCB9LCB7IDB4ZmIsMHg3ZSwweDM0LDB4NWIgfSwKKyAgICB7IDB4NDMsMHgyOSwweDc2LDB4OGIgfSwgeyAweDIzLDB4YzYsMHhkYywweGNiIH0sCisgICAgeyAweGVkLDB4ZmMsMHg2OCwweGI2IH0sIHsgMHhlNCwweGYxLDB4NjMsMHhiOCB9LAorICAgIHsgMHgzMSwweGRjLDB4Y2EsMHhkNyB9LCB7IDB4NjMsMHg4NSwweDEwLDB4NDIgfSwKKyAgICB7IDB4OTcsMHgyMiwweDQwLDB4MTMgfSwgeyAweGM2LDB4MTEsMHgyMCwweDg0IH0sCisgICAgeyAweDRhLDB4MjQsMHg3ZCwweDg1IH0sIHsgMHhiYiwweDNkLDB4ZjgsMHhkMiB9LAorICAgIHsgMHhmOSwweDMyLDB4MTEsMHhhZSB9LCB7IDB4MjksMHhhMSwweDZkLDB4YzcgfSwKKyAgICB7IDB4OWUsMHgyZiwweDRiLDB4MWQgfSwgeyAweGIyLDB4MzAsMHhmMywweGRjIH0sCisgICAgeyAweDg2LDB4NTIsMHhlYywweDBkIH0sIHsgMHhjMSwweGUzLDB4ZDAsMHg3NyB9LAorICAgIHsgMHhiMywweDE2LDB4NmMsMHgyYiB9LCB7IDB4NzAsMHhiOSwweDk5LDB4YTkgfSwKKyAgICB7IDB4OTQsMHg0OCwweGZhLDB4MTEgfSwgeyAweGU5LDB4NjQsMHgyMiwweDQ3IH0sCisgICAgeyAweGZjLDB4OGMsMHhjNCwweGE4IH0sIHsgMHhmMCwweDNmLDB4MWEsMHhhMCB9LAorICAgIHsgMHg3ZCwweDJjLDB4ZDgsMHg1NiB9LCB7IDB4MzMsMHg5MCwweGVmLDB4MjIgfSwKKyAgICB7IDB4NDksMHg0ZSwweGM3LDB4ODcgfSwgeyAweDM4LDB4ZDEsMHhjMSwweGQ5IH0sCisgICAgeyAweGNhLDB4YTIsMHhmZSwweDhjIH0sIHsgMHhkNCwweDBiLDB4MzYsMHg5OCB9LAorICAgIHsgMHhmNSwweDgxLDB4Y2YsMHhhNiB9LCB7IDB4N2EsMHhkZSwweDI4LDB4YTUgfSwKKyAgICB7IDB4YjcsMHg4ZSwweDI2LDB4ZGEgfSwgeyAweGFkLDB4YmYsMHhhNCwweDNmIH0sCisgICAgeyAweDNhLDB4OWQsMHhlNCwweDJjIH0sIHsgMHg3OCwweDkyLDB4MGQsMHg1MCB9LAorICAgIHsgMHg1ZiwweGNjLDB4OWIsMHg2YSB9LCB7IDB4N2UsMHg0NiwweDYyLDB4NTQgfSwKKyAgICB7IDB4OGQsMHgxMywweGMyLDB4ZjYgfSwgeyAweGQ4LDB4YjgsMHhlOCwweDkwIH0sCisgICAgeyAweDM5LDB4ZjcsMHg1ZSwweDJlIH0sIHsgMHhjMywweGFmLDB4ZjUsMHg4MiB9LAorICAgIHsgMHg1ZCwweDgwLDB4YmUsMHg5ZiB9LCB7IDB4ZDAsMHg5MywweDdjLDB4NjkgfSwKKyAgICB7IDB4ZDUsMHgyZCwweGE5LDB4NmYgfSwgeyAweDI1LDB4MTIsMHhiMywweGNmIH0sCisgICAgeyAweGFjLDB4OTksMHgzYiwweGM4IH0sIHsgMHgxOCwweDdkLDB4YTcsMHgxMCB9LAorICAgIHsgMHg5YywweDYzLDB4NmUsMHhlOCB9LCB7IDB4M2IsMHhiYiwweDdiLDB4ZGIgfSwKKyAgICB7IDB4MjYsMHg3OCwweDA5LDB4Y2QgfSwgeyAweDU5LDB4MTgsMHhmNCwweDZlIH0sCisgICAgeyAweDlhLDB4YjcsMHgwMSwweGVjIH0sIHsgMHg0ZiwweDlhLDB4YTgsMHg4MyB9LAorICAgIHsgMHg5NSwweDZlLDB4NjUsMHhlNiB9LCB7IDB4ZmYsMHhlNiwweDdlLDB4YWEgfSwKKyAgICB7IDB4YmMsMHhjZiwweDA4LDB4MjEgfSwgeyAweDE1LDB4ZTgsMHhlNiwweGVmIH0sCisgICAgeyAweGU3LDB4OWIsMHhkOSwweGJhIH0sIHsgMHg2ZiwweDM2LDB4Y2UsMHg0YSB9LAorICAgIHsgMHg5ZiwweDA5LDB4ZDQsMHhlYSB9LCB7IDB4YjAsMHg3YywweGQ2LDB4MjkgfSwKKyAgICB7IDB4YTQsMHhiMiwweGFmLDB4MzEgfSwgeyAweDNmLDB4MjMsMHgzMSwweDJhIH0sCisgICAgeyAweGE1LDB4OTQsMHgzMCwweGM2IH0sIHsgMHhhMiwweDY2LDB4YzAsMHgzNSB9LAorICAgIHsgMHg0ZSwweGJjLDB4MzcsMHg3NCB9LCB7IDB4ODIsMHhjYSwweGE2LDB4ZmMgfSwKKyAgICB7IDB4OTAsMHhkMCwweGIwLDB4ZTAgfSwgeyAweGE3LDB4ZDgsMHgxNSwweDMzIH0sCisgICAgeyAweDA0LDB4OTgsMHg0YSwweGYxIH0sIHsgMHhlYywweGRhLDB4ZjcsMHg0MSB9LAorICAgIHsgMHhjZCwweDUwLDB4MGUsMHg3ZiB9LCB7IDB4OTEsMHhmNiwweDJmLDB4MTcgfSwKKyAgICB7IDB4NGQsMHhkNiwweDhkLDB4NzYgfSwgeyAweGVmLDB4YjAsMHg0ZCwweDQzIH0sCisgICAgeyAweGFhLDB4NGQsMHg1NCwweGNjIH0sIHsgMHg5NiwweDA0LDB4ZGYsMHhlNCB9LAorICAgIHsgMHhkMSwweGI1LDB4ZTMsMHg5ZSB9LCB7IDB4NmEsMHg4OCwweDFiLDB4NGMgfSwKKyAgICB7IDB4MmMsMHgxZiwweGI4LDB4YzEgfSwgeyAweDY1LDB4NTEsMHg3ZiwweDQ2IH0sCisgICAgeyAweDVlLDB4ZWEsMHgwNCwweDlkIH0sIHsgMHg4YywweDM1LDB4NWQsMHgwMSB9LAorICAgIHsgMHg4NywweDc0LDB4NzMsMHhmYSB9LCB7IDB4MGIsMHg0MSwweDJlLDB4ZmIgfSwKKyAgICB7IDB4NjcsMHgxZCwweDVhLDB4YjMgfSwgeyAweGRiLDB4ZDIsMHg1MiwweDkyIH0sCisgICAgeyAweDEwLDB4NTYsMHgzMywweGU5IH0sIHsgMHhkNiwweDQ3LDB4MTMsMHg2ZCB9LAorICAgIHsgMHhkNywweDYxLDB4OGMsMHg5YSB9LCB7IDB4YTEsMHgwYywweDdhLDB4MzcgfSwKKyAgICB7IDB4ZjgsMHgxNCwweDhlLDB4NTkgfSwgeyAweDEzLDB4M2MsMHg4OSwweGViIH0sCisgICAgeyAweGE5LDB4MjcsMHhlZSwweGNlIH0sIHsgMHg2MSwweGM5LDB4MzUsMHhiNyB9LAorICAgIHsgMHgxYywweGU1LDB4ZWQsMHhlMSB9LCB7IDB4NDcsMHhiMSwweDNjLDB4N2EgfSwKKyAgICB7IDB4ZDIsMHhkZiwweDU5LDB4OWMgfSwgeyAweGYyLDB4NzMsMHgzZiwweDU1IH0sCisgICAgeyAweDE0LDB4Y2UsMHg3OSwweDE4IH0sIHsgMHhjNywweDM3LDB4YmYsMHg3MyB9LAorICAgIHsgMHhmNywweGNkLDB4ZWEsMHg1MyB9LCB7IDB4ZmQsMHhhYSwweDViLDB4NWYgfSwKKyAgICB7IDB4M2QsMHg2ZiwweDE0LDB4ZGYgfSwgeyAweDQ0LDB4ZGIsMHg4NiwweDc4IH0sCisgICAgeyAweGFmLDB4ZjMsMHg4MSwweGNhIH0sIHsgMHg2OCwweGM0LDB4M2UsMHhiOSB9LAorICAgIHsgMHgyNCwweDM0LDB4MmMsMHgzOCB9LCB7IDB4YTMsMHg0MCwweDVmLDB4YzIgfSwKKyAgICB7IDB4MWQsMHhjMywweDcyLDB4MTYgfSwgeyAweGUyLDB4MjUsMHgwYywweGJjIH0sCisgICAgeyAweDNjLDB4NDksMHg4YiwweDI4IH0sIHsgMHgwZCwweDk1LDB4NDEsMHhmZiB9LAorICAgIHsgMHhhOCwweDAxLDB4NzEsMHgzOSB9LCB7IDB4MGMsMHhiMywweGRlLDB4MDggfSwKKyAgICB7IDB4YjQsMHhlNCwweDljLDB4ZDggfSwgeyAweDU2LDB4YzEsMHg5MCwweDY0IH0sCisgICAgeyAweGNiLDB4ODQsMHg2MSwweDdiIH0sIHsgMHgzMiwweGI2LDB4NzAsMHhkNSB9LAorICAgIHsgMHg2YywweDVjLDB4NzQsMHg0OCB9LCB7IDB4YjgsMHg1NywweDQyLDB4ZDAgfQorICB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBTNVsyNTZdID0KKyAgeworICAgIDB4NTIsMHgwOSwweDZhLDB4ZDUsMHgzMCwweDM2LDB4YTUsMHgzOCwKKyAgICAweGJmLDB4NDAsMHhhMywweDllLDB4ODEsMHhmMywweGQ3LDB4ZmIsCisgICAgMHg3YywweGUzLDB4MzksMHg4MiwweDliLDB4MmYsMHhmZiwweDg3LAorICAgIDB4MzQsMHg4ZSwweDQzLDB4NDQsMHhjNCwweGRlLDB4ZTksMHhjYiwKKyAgICAweDU0LDB4N2IsMHg5NCwweDMyLDB4YTYsMHhjMiwweDIzLDB4M2QsCisgICAgMHhlZSwweDRjLDB4OTUsMHgwYiwweDQyLDB4ZmEsMHhjMywweDRlLAorICAgIDB4MDgsMHgyZSwweGExLDB4NjYsMHgyOCwweGQ5LDB4MjQsMHhiMiwKKyAgICAweDc2LDB4NWIsMHhhMiwweDQ5LDB4NmQsMHg4YiwweGQxLDB4MjUsCisgICAgMHg3MiwweGY4LDB4ZjYsMHg2NCwweDg2LDB4NjgsMHg5OCwweDE2LAorICAgIDB4ZDQsMHhhNCwweDVjLDB4Y2MsMHg1ZCwweDY1LDB4YjYsMHg5MiwKKyAgICAweDZjLDB4NzAsMHg0OCwweDUwLDB4ZmQsMHhlZCwweGI5LDB4ZGEsCisgICAgMHg1ZSwweDE1LDB4NDYsMHg1NywweGE3LDB4OGQsMHg5ZCwweDg0LAorICAgIDB4OTAsMHhkOCwweGFiLDB4MDAsMHg4YywweGJjLDB4ZDMsMHgwYSwKKyAgICAweGY3LDB4ZTQsMHg1OCwweDA1LDB4YjgsMHhiMywweDQ1LDB4MDYsCisgICAgMHhkMCwweDJjLDB4MWUsMHg4ZiwweGNhLDB4M2YsMHgwZiwweDAyLAorICAgIDB4YzEsMHhhZiwweGJkLDB4MDMsMHgwMSwweDEzLDB4OGEsMHg2YiwKKyAgICAweDNhLDB4OTEsMHgxMSwweDQxLDB4NGYsMHg2NywweGRjLDB4ZWEsCisgICAgMHg5NywweGYyLDB4Y2YsMHhjZSwweGYwLDB4YjQsMHhlNiwweDczLAorICAgIDB4OTYsMHhhYywweDc0LDB4MjIsMHhlNywweGFkLDB4MzUsMHg4NSwKKyAgICAweGUyLDB4ZjksMHgzNywweGU4LDB4MWMsMHg3NSwweGRmLDB4NmUsCisgICAgMHg0NywweGYxLDB4MWEsMHg3MSwweDFkLDB4MjksMHhjNSwweDg5LAorICAgIDB4NmYsMHhiNywweDYyLDB4MGUsMHhhYSwweDE4LDB4YmUsMHgxYiwKKyAgICAweGZjLDB4NTYsMHgzZSwweDRiLDB4YzYsMHhkMiwweDc5LDB4MjAsCisgICAgMHg5YSwweGRiLDB4YzAsMHhmZSwweDc4LDB4Y2QsMHg1YSwweGY0LAorICAgIDB4MWYsMHhkZCwweGE4LDB4MzMsMHg4OCwweDA3LDB4YzcsMHgzMSwKKyAgICAweGIxLDB4MTIsMHgxMCwweDU5LDB4MjcsMHg4MCwweGVjLDB4NWYsCisgICAgMHg2MCwweDUxLDB4N2YsMHhhOSwweDE5LDB4YjUsMHg0YSwweDBkLAorICAgIDB4MmQsMHhlNSwweDdhLDB4OWYsMHg5MywweGM5LDB4OWMsMHhlZiwKKyAgICAweGEwLDB4ZTAsMHgzYiwweDRkLDB4YWUsMHgyYSwweGY1LDB4YjAsCisgICAgMHhjOCwweGViLDB4YmIsMHgzYywweDgzLDB4NTMsMHg5OSwweDYxLAorICAgIDB4MTcsMHgyYiwweDA0LDB4N2UsMHhiYSwweDc3LDB4ZDYsMHgyNiwKKyAgICAweGUxLDB4NjksMHgxNCwweDYzLDB4NTUsMHgyMSwweDBjLDB4N2QKKyAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVTFbMjU2XVs0XSA9CisgIHsKKyAgICB7IDB4MDAsMHgwMCwweDAwLDB4MDAgfSwgeyAweDBlLDB4MDksMHgwZCwweDBiIH0sCisgICAgeyAweDFjLDB4MTIsMHgxYSwweDE2IH0sIHsgMHgxMiwweDFiLDB4MTcsMHgxZCB9LAorICAgIHsgMHgzOCwweDI0LDB4MzQsMHgyYyB9LCB7IDB4MzYsMHgyZCwweDM5LDB4MjcgfSwKKyAgICB7IDB4MjQsMHgzNiwweDJlLDB4M2EgfSwgeyAweDJhLDB4M2YsMHgyMywweDMxIH0sCisgICAgeyAweDcwLDB4NDgsMHg2OCwweDU4IH0sIHsgMHg3ZSwweDQxLDB4NjUsMHg1MyB9LAorICAgIHsgMHg2YywweDVhLDB4NzIsMHg0ZSB9LCB7IDB4NjIsMHg1MywweDdmLDB4NDUgfSwKKyAgICB7IDB4NDgsMHg2YywweDVjLDB4NzQgfSwgeyAweDQ2LDB4NjUsMHg1MSwweDdmIH0sCisgICAgeyAweDU0LDB4N2UsMHg0NiwweDYyIH0sIHsgMHg1YSwweDc3LDB4NGIsMHg2OSB9LAorICAgIHsgMHhlMCwweDkwLDB4ZDAsMHhiMCB9LCB7IDB4ZWUsMHg5OSwweGRkLDB4YmIgfSwKKyAgICB7IDB4ZmMsMHg4MiwweGNhLDB4YTYgfSwgeyAweGYyLDB4OGIsMHhjNywweGFkIH0sCisgICAgeyAweGQ4LDB4YjQsMHhlNCwweDljIH0sIHsgMHhkNiwweGJkLDB4ZTksMHg5NyB9LAorICAgIHsgMHhjNCwweGE2LDB4ZmUsMHg4YSB9LCB7IDB4Y2EsMHhhZiwweGYzLDB4ODEgfSwKKyAgICB7IDB4OTAsMHhkOCwweGI4LDB4ZTggfSwgeyAweDllLDB4ZDEsMHhiNSwweGUzIH0sCisgICAgeyAweDhjLDB4Y2EsMHhhMiwweGZlIH0sIHsgMHg4MiwweGMzLDB4YWYsMHhmNSB9LAorICAgIHsgMHhhOCwweGZjLDB4OGMsMHhjNCB9LCB7IDB4YTYsMHhmNSwweDgxLDB4Y2YgfSwKKyAgICB7IDB4YjQsMHhlZSwweDk2LDB4ZDIgfSwgeyAweGJhLDB4ZTcsMHg5YiwweGQ5IH0sCisgICAgeyAweGRiLDB4M2IsMHhiYiwweDdiIH0sIHsgMHhkNSwweDMyLDB4YjYsMHg3MCB9LAorICAgIHsgMHhjNywweDI5LDB4YTEsMHg2ZCB9LCB7IDB4YzksMHgyMCwweGFjLDB4NjYgfSwKKyAgICB7IDB4ZTMsMHgxZiwweDhmLDB4NTcgfSwgeyAweGVkLDB4MTYsMHg4MiwweDVjIH0sCisgICAgeyAweGZmLDB4MGQsMHg5NSwweDQxIH0sIHsgMHhmMSwweDA0LDB4OTgsMHg0YSB9LAorICAgIHsgMHhhYiwweDczLDB4ZDMsMHgyMyB9LCB7IDB4YTUsMHg3YSwweGRlLDB4MjggfSwKKyAgICB7IDB4YjcsMHg2MSwweGM5LDB4MzUgfSwgeyAweGI5LDB4NjgsMHhjNCwweDNlIH0sCisgICAgeyAweDkzLDB4NTcsMHhlNywweDBmIH0sIHsgMHg5ZCwweDVlLDB4ZWEsMHgwNCB9LAorICAgIHsgMHg4ZiwweDQ1LDB4ZmQsMHgxOSB9LCB7IDB4ODEsMHg0YywweGYwLDB4MTIgfSwKKyAgICB7IDB4M2IsMHhhYiwweDZiLDB4Y2IgfSwgeyAweDM1LDB4YTIsMHg2NiwweGMwIH0sCisgICAgeyAweDI3LDB4YjksMHg3MSwweGRkIH0sIHsgMHgyOSwweGIwLDB4N2MsMHhkNiB9LAorICAgIHsgMHgwMywweDhmLDB4NWYsMHhlNyB9LCB7IDB4MGQsMHg4NiwweDUyLDB4ZWMgfSwKKyAgICB7IDB4MWYsMHg5ZCwweDQ1LDB4ZjEgfSwgeyAweDExLDB4OTQsMHg0OCwweGZhIH0sCisgICAgeyAweDRiLDB4ZTMsMHgwMywweDkzIH0sIHsgMHg0NSwweGVhLDB4MGUsMHg5OCB9LAorICAgIHsgMHg1NywweGYxLDB4MTksMHg4NSB9LCB7IDB4NTksMHhmOCwweDE0LDB4OGUgfSwKKyAgICB7IDB4NzMsMHhjNywweDM3LDB4YmYgfSwgeyAweDdkLDB4Y2UsMHgzYSwweGI0IH0sCisgICAgeyAweDZmLDB4ZDUsMHgyZCwweGE5IH0sIHsgMHg2MSwweGRjLDB4MjAsMHhhMiB9LAorICAgIHsgMHhhZCwweDc2LDB4NmQsMHhmNiB9LCB7IDB4YTMsMHg3ZiwweDYwLDB4ZmQgfSwKKyAgICB7IDB4YjEsMHg2NCwweDc3LDB4ZTAgfSwgeyAweGJmLDB4NmQsMHg3YSwweGViIH0sCisgICAgeyAweDk1LDB4NTIsMHg1OSwweGRhIH0sIHsgMHg5YiwweDViLDB4NTQsMHhkMSB9LAorICAgIHsgMHg4OSwweDQwLDB4NDMsMHhjYyB9LCB7IDB4ODcsMHg0OSwweDRlLDB4YzcgfSwKKyAgICB7IDB4ZGQsMHgzZSwweDA1LDB4YWUgfSwgeyAweGQzLDB4MzcsMHgwOCwweGE1IH0sCisgICAgeyAweGMxLDB4MmMsMHgxZiwweGI4IH0sIHsgMHhjZiwweDI1LDB4MTIsMHhiMyB9LAorICAgIHsgMHhlNSwweDFhLDB4MzEsMHg4MiB9LCB7IDB4ZWIsMHgxMywweDNjLDB4ODkgfSwKKyAgICB7IDB4ZjksMHgwOCwweDJiLDB4OTQgfSwgeyAweGY3LDB4MDEsMHgyNiwweDlmIH0sCisgICAgeyAweDRkLDB4ZTYsMHhiZCwweDQ2IH0sIHsgMHg0MywweGVmLDB4YjAsMHg0ZCB9LAorICAgIHsgMHg1MSwweGY0LDB4YTcsMHg1MCB9LCB7IDB4NWYsMHhmZCwweGFhLDB4NWIgfSwKKyAgICB7IDB4NzUsMHhjMiwweDg5LDB4NmEgfSwgeyAweDdiLDB4Y2IsMHg4NCwweDYxIH0sCisgICAgeyAweDY5LDB4ZDAsMHg5MywweDdjIH0sIHsgMHg2NywweGQ5LDB4OWUsMHg3NyB9LAorICAgIHsgMHgzZCwweGFlLDB4ZDUsMHgxZSB9LCB7IDB4MzMsMHhhNywweGQ4LDB4MTUgfSwKKyAgICB7IDB4MjEsMHhiYywweGNmLDB4MDggfSwgeyAweDJmLDB4YjUsMHhjMiwweDAzIH0sCisgICAgeyAweDA1LDB4OGEsMHhlMSwweDMyIH0sIHsgMHgwYiwweDgzLDB4ZWMsMHgzOSB9LAorICAgIHsgMHgxOSwweDk4LDB4ZmIsMHgyNCB9LCB7IDB4MTcsMHg5MSwweGY2LDB4MmYgfSwKKyAgICB7IDB4NzYsMHg0ZCwweGQ2LDB4OGQgfSwgeyAweDc4LDB4NDQsMHhkYiwweDg2IH0sCisgICAgeyAweDZhLDB4NWYsMHhjYywweDliIH0sIHsgMHg2NCwweDU2LDB4YzEsMHg5MCB9LAorICAgIHsgMHg0ZSwweDY5LDB4ZTIsMHhhMSB9LCB7IDB4NDAsMHg2MCwweGVmLDB4YWEgfSwKKyAgICB7IDB4NTIsMHg3YiwweGY4LDB4YjcgfSwgeyAweDVjLDB4NzIsMHhmNSwweGJjIH0sCisgICAgeyAweDA2LDB4MDUsMHhiZSwweGQ1IH0sIHsgMHgwOCwweDBjLDB4YjMsMHhkZSB9LAorICAgIHsgMHgxYSwweDE3LDB4YTQsMHhjMyB9LCB7IDB4MTQsMHgxZSwweGE5LDB4YzggfSwKKyAgICB7IDB4M2UsMHgyMSwweDhhLDB4ZjkgfSwgeyAweDMwLDB4MjgsMHg4NywweGYyIH0sCisgICAgeyAweDIyLDB4MzMsMHg5MCwweGVmIH0sIHsgMHgyYywweDNhLDB4OWQsMHhlNCB9LAorICAgIHsgMHg5NiwweGRkLDB4MDYsMHgzZCB9LCB7IDB4OTgsMHhkNCwweDBiLDB4MzYgfSwKKyAgICB7IDB4OGEsMHhjZiwweDFjLDB4MmIgfSwgeyAweDg0LDB4YzYsMHgxMSwweDIwIH0sCisgICAgeyAweGFlLDB4ZjksMHgzMiwweDExIH0sIHsgMHhhMCwweGYwLDB4M2YsMHgxYSB9LAorICAgIHsgMHhiMiwweGViLDB4MjgsMHgwNyB9LCB7IDB4YmMsMHhlMiwweDI1LDB4MGMgfSwKKyAgICB7IDB4ZTYsMHg5NSwweDZlLDB4NjUgfSwgeyAweGU4LDB4OWMsMHg2MywweDZlIH0sCisgICAgeyAweGZhLDB4ODcsMHg3NCwweDczIH0sIHsgMHhmNCwweDhlLDB4NzksMHg3OCB9LAorICAgIHsgMHhkZSwweGIxLDB4NWEsMHg0OSB9LCB7IDB4ZDAsMHhiOCwweDU3LDB4NDIgfSwKKyAgICB7IDB4YzIsMHhhMywweDQwLDB4NWYgfSwgeyAweGNjLDB4YWEsMHg0ZCwweDU0IH0sCisgICAgeyAweDQxLDB4ZWMsMHhkYSwweGY3IH0sIHsgMHg0ZiwweGU1LDB4ZDcsMHhmYyB9LAorICAgIHsgMHg1ZCwweGZlLDB4YzAsMHhlMSB9LCB7IDB4NTMsMHhmNywweGNkLDB4ZWEgfSwKKyAgICB7IDB4NzksMHhjOCwweGVlLDB4ZGIgfSwgeyAweDc3LDB4YzEsMHhlMywweGQwIH0sCisgICAgeyAweDY1LDB4ZGEsMHhmNCwweGNkIH0sIHsgMHg2YiwweGQzLDB4ZjksMHhjNiB9LAorICAgIHsgMHgzMSwweGE0LDB4YjIsMHhhZiB9LCB7IDB4M2YsMHhhZCwweGJmLDB4YTQgfSwKKyAgICB7IDB4MmQsMHhiNiwweGE4LDB4YjkgfSwgeyAweDIzLDB4YmYsMHhhNSwweGIyIH0sCisgICAgeyAweDA5LDB4ODAsMHg4NiwweDgzIH0sIHsgMHgwNywweDg5LDB4OGIsMHg4OCB9LAorICAgIHsgMHgxNSwweDkyLDB4OWMsMHg5NSB9LCB7IDB4MWIsMHg5YiwweDkxLDB4OWUgfSwKKyAgICB7IDB4YTEsMHg3YywweDBhLDB4NDcgfSwgeyAweGFmLDB4NzUsMHgwNywweDRjIH0sCisgICAgeyAweGJkLDB4NmUsMHgxMCwweDUxIH0sIHsgMHhiMywweDY3LDB4MWQsMHg1YSB9LAorICAgIHsgMHg5OSwweDU4LDB4M2UsMHg2YiB9LCB7IDB4OTcsMHg1MSwweDMzLDB4NjAgfSwKKyAgICB7IDB4ODUsMHg0YSwweDI0LDB4N2QgfSwgeyAweDhiLDB4NDMsMHgyOSwweDc2IH0sCisgICAgeyAweGQxLDB4MzQsMHg2MiwweDFmIH0sIHsgMHhkZiwweDNkLDB4NmYsMHgxNCB9LAorICAgIHsgMHhjZCwweDI2LDB4NzgsMHgwOSB9LCB7IDB4YzMsMHgyZiwweDc1LDB4MDIgfSwKKyAgICB7IDB4ZTksMHgxMCwweDU2LDB4MzMgfSwgeyAweGU3LDB4MTksMHg1YiwweDM4IH0sCisgICAgeyAweGY1LDB4MDIsMHg0YywweDI1IH0sIHsgMHhmYiwweDBiLDB4NDEsMHgyZSB9LAorICAgIHsgMHg5YSwweGQ3LDB4NjEsMHg4YyB9LCB7IDB4OTQsMHhkZSwweDZjLDB4ODcgfSwKKyAgICB7IDB4ODYsMHhjNSwweDdiLDB4OWEgfSwgeyAweDg4LDB4Y2MsMHg3NiwweDkxIH0sCisgICAgeyAweGEyLDB4ZjMsMHg1NSwweGEwIH0sIHsgMHhhYywweGZhLDB4NTgsMHhhYiB9LAorICAgIHsgMHhiZSwweGUxLDB4NGYsMHhiNiB9LCB7IDB4YjAsMHhlOCwweDQyLDB4YmQgfSwKKyAgICB7IDB4ZWEsMHg5ZiwweDA5LDB4ZDQgfSwgeyAweGU0LDB4OTYsMHgwNCwweGRmIH0sCisgICAgeyAweGY2LDB4OGQsMHgxMywweGMyIH0sIHsgMHhmOCwweDg0LDB4MWUsMHhjOSB9LAorICAgIHsgMHhkMiwweGJiLDB4M2QsMHhmOCB9LCB7IDB4ZGMsMHhiMiwweDMwLDB4ZjMgfSwKKyAgICB7IDB4Y2UsMHhhOSwweDI3LDB4ZWUgfSwgeyAweGMwLDB4YTAsMHgyYSwweGU1IH0sCisgICAgeyAweDdhLDB4NDcsMHhiMSwweDNjIH0sIHsgMHg3NCwweDRlLDB4YmMsMHgzNyB9LAorICAgIHsgMHg2NiwweDU1LDB4YWIsMHgyYSB9LCB7IDB4NjgsMHg1YywweGE2LDB4MjEgfSwKKyAgICB7IDB4NDIsMHg2MywweDg1LDB4MTAgfSwgeyAweDRjLDB4NmEsMHg4OCwweDFiIH0sCisgICAgeyAweDVlLDB4NzEsMHg5ZiwweDA2IH0sIHsgMHg1MCwweDc4LDB4OTIsMHgwZCB9LAorICAgIHsgMHgwYSwweDBmLDB4ZDksMHg2NCB9LCB7IDB4MDQsMHgwNiwweGQ0LDB4NmYgfSwKKyAgICB7IDB4MTYsMHgxZCwweGMzLDB4NzIgfSwgeyAweDE4LDB4MTQsMHhjZSwweDc5IH0sCisgICAgeyAweDMyLDB4MmIsMHhlZCwweDQ4IH0sIHsgMHgzYywweDIyLDB4ZTAsMHg0MyB9LAorICAgIHsgMHgyZSwweDM5LDB4ZjcsMHg1ZSB9LCB7IDB4MjAsMHgzMCwweGZhLDB4NTUgfSwKKyAgICB7IDB4ZWMsMHg5YSwweGI3LDB4MDEgfSwgeyAweGUyLDB4OTMsMHhiYSwweDBhIH0sCisgICAgeyAweGYwLDB4ODgsMHhhZCwweDE3IH0sIHsgMHhmZSwweDgxLDB4YTAsMHgxYyB9LAorICAgIHsgMHhkNCwweGJlLDB4ODMsMHgyZCB9LCB7IDB4ZGEsMHhiNywweDhlLDB4MjYgfSwKKyAgICB7IDB4YzgsMHhhYywweDk5LDB4M2IgfSwgeyAweGM2LDB4YTUsMHg5NCwweDMwIH0sCisgICAgeyAweDljLDB4ZDIsMHhkZiwweDU5IH0sIHsgMHg5MiwweGRiLDB4ZDIsMHg1MiB9LAorICAgIHsgMHg4MCwweGMwLDB4YzUsMHg0ZiB9LCB7IDB4OGUsMHhjOSwweGM4LDB4NDQgfSwKKyAgICB7IDB4YTQsMHhmNiwweGViLDB4NzUgfSwgeyAweGFhLDB4ZmYsMHhlNiwweDdlIH0sCisgICAgeyAweGI4LDB4ZTQsMHhmMSwweDYzIH0sIHsgMHhiNiwweGVkLDB4ZmMsMHg2OCB9LAorICAgIHsgMHgwYywweDBhLDB4NjcsMHhiMSB9LCB7IDB4MDIsMHgwMywweDZhLDB4YmEgfSwKKyAgICB7IDB4MTAsMHgxOCwweDdkLDB4YTcgfSwgeyAweDFlLDB4MTEsMHg3MCwweGFjIH0sCisgICAgeyAweDM0LDB4MmUsMHg1MywweDlkIH0sIHsgMHgzYSwweDI3LDB4NWUsMHg5NiB9LAorICAgIHsgMHgyOCwweDNjLDB4NDksMHg4YiB9LCB7IDB4MjYsMHgzNSwweDQ0LDB4ODAgfSwKKyAgICB7IDB4N2MsMHg0MiwweDBmLDB4ZTkgfSwgeyAweDcyLDB4NGIsMHgwMiwweGUyIH0sCisgICAgeyAweDYwLDB4NTAsMHgxNSwweGZmIH0sIHsgMHg2ZSwweDU5LDB4MTgsMHhmNCB9LAorICAgIHsgMHg0NCwweDY2LDB4M2IsMHhjNSB9LCB7IDB4NGEsMHg2ZiwweDM2LDB4Y2UgfSwKKyAgICB7IDB4NTgsMHg3NCwweDIxLDB4ZDMgfSwgeyAweDU2LDB4N2QsMHgyYywweGQ4IH0sCisgICAgeyAweDM3LDB4YTEsMHgwYywweDdhIH0sIHsgMHgzOSwweGE4LDB4MDEsMHg3MSB9LAorICAgIHsgMHgyYiwweGIzLDB4MTYsMHg2YyB9LCB7IDB4MjUsMHhiYSwweDFiLDB4NjcgfSwKKyAgICB7IDB4MGYsMHg4NSwweDM4LDB4NTYgfSwgeyAweDAxLDB4OGMsMHgzNSwweDVkIH0sCisgICAgeyAweDEzLDB4OTcsMHgyMiwweDQwIH0sIHsgMHgxZCwweDllLDB4MmYsMHg0YiB9LAorICAgIHsgMHg0NywweGU5LDB4NjQsMHgyMiB9LCB7IDB4NDksMHhlMCwweDY5LDB4MjkgfSwKKyAgICB7IDB4NWIsMHhmYiwweDdlLDB4MzQgfSwgeyAweDU1LDB4ZjIsMHg3MywweDNmIH0sCisgICAgeyAweDdmLDB4Y2QsMHg1MCwweDBlIH0sIHsgMHg3MSwweGM0LDB4NWQsMHgwNSB9LAorICAgIHsgMHg2MywweGRmLDB4NGEsMHgxOCB9LCB7IDB4NmQsMHhkNiwweDQ3LDB4MTMgfSwKKyAgICB7IDB4ZDcsMHgzMSwweGRjLDB4Y2EgfSwgeyAweGQ5LDB4MzgsMHhkMSwweGMxIH0sCisgICAgeyAweGNiLDB4MjMsMHhjNiwweGRjIH0sIHsgMHhjNSwweDJhLDB4Y2IsMHhkNyB9LAorICAgIHsgMHhlZiwweDE1LDB4ZTgsMHhlNiB9LCB7IDB4ZTEsMHgxYywweGU1LDB4ZWQgfSwKKyAgICB7IDB4ZjMsMHgwNywweGYyLDB4ZjAgfSwgeyAweGZkLDB4MGUsMHhmZiwweGZiIH0sCisgICAgeyAweGE3LDB4NzksMHhiNCwweDkyIH0sIHsgMHhhOSwweDcwLDB4YjksMHg5OSB9LAorICAgIHsgMHhiYiwweDZiLDB4YWUsMHg4NCB9LCB7IDB4YjUsMHg2MiwweGEzLDB4OGYgfSwKKyAgICB7IDB4OWYsMHg1ZCwweDgwLDB4YmUgfSwgeyAweDkxLDB4NTQsMHg4ZCwweGI1IH0sCisgICAgeyAweDgzLDB4NGYsMHg5YSwweGE4IH0sIHsgMHg4ZCwweDQ2LDB4OTcsMHhhMyB9CisgIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFUyWzI1Nl1bNF0gPQorICB7CisgICAgeyAweDAwLDB4MDAsMHgwMCwweDAwIH0sIHsgMHgwYiwweDBlLDB4MDksMHgwZCB9LAorICAgIHsgMHgxNiwweDFjLDB4MTIsMHgxYSB9LCB7IDB4MWQsMHgxMiwweDFiLDB4MTcgfSwKKyAgICB7IDB4MmMsMHgzOCwweDI0LDB4MzQgfSwgeyAweDI3LDB4MzYsMHgyZCwweDM5IH0sCisgICAgeyAweDNhLDB4MjQsMHgzNiwweDJlIH0sIHsgMHgzMSwweDJhLDB4M2YsMHgyMyB9LAorICAgIHsgMHg1OCwweDcwLDB4NDgsMHg2OCB9LCB7IDB4NTMsMHg3ZSwweDQxLDB4NjUgfSwKKyAgICB7IDB4NGUsMHg2YywweDVhLDB4NzIgfSwgeyAweDQ1LDB4NjIsMHg1MywweDdmIH0sCisgICAgeyAweDc0LDB4NDgsMHg2YywweDVjIH0sIHsgMHg3ZiwweDQ2LDB4NjUsMHg1MSB9LAorICAgIHsgMHg2MiwweDU0LDB4N2UsMHg0NiB9LCB7IDB4NjksMHg1YSwweDc3LDB4NGIgfSwKKyAgICB7IDB4YjAsMHhlMCwweDkwLDB4ZDAgfSwgeyAweGJiLDB4ZWUsMHg5OSwweGRkIH0sCisgICAgeyAweGE2LDB4ZmMsMHg4MiwweGNhIH0sIHsgMHhhZCwweGYyLDB4OGIsMHhjNyB9LAorICAgIHsgMHg5YywweGQ4LDB4YjQsMHhlNCB9LCB7IDB4OTcsMHhkNiwweGJkLDB4ZTkgfSwKKyAgICB7IDB4OGEsMHhjNCwweGE2LDB4ZmUgfSwgeyAweDgxLDB4Y2EsMHhhZiwweGYzIH0sCisgICAgeyAweGU4LDB4OTAsMHhkOCwweGI4IH0sIHsgMHhlMywweDllLDB4ZDEsMHhiNSB9LAorICAgIHsgMHhmZSwweDhjLDB4Y2EsMHhhMiB9LCB7IDB4ZjUsMHg4MiwweGMzLDB4YWYgfSwKKyAgICB7IDB4YzQsMHhhOCwweGZjLDB4OGMgfSwgeyAweGNmLDB4YTYsMHhmNSwweDgxIH0sCisgICAgeyAweGQyLDB4YjQsMHhlZSwweDk2IH0sIHsgMHhkOSwweGJhLDB4ZTcsMHg5YiB9LAorICAgIHsgMHg3YiwweGRiLDB4M2IsMHhiYiB9LCB7IDB4NzAsMHhkNSwweDMyLDB4YjYgfSwKKyAgICB7IDB4NmQsMHhjNywweDI5LDB4YTEgfSwgeyAweDY2LDB4YzksMHgyMCwweGFjIH0sCisgICAgeyAweDU3LDB4ZTMsMHgxZiwweDhmIH0sIHsgMHg1YywweGVkLDB4MTYsMHg4MiB9LAorICAgIHsgMHg0MSwweGZmLDB4MGQsMHg5NSB9LCB7IDB4NGEsMHhmMSwweDA0LDB4OTggfSwKKyAgICB7IDB4MjMsMHhhYiwweDczLDB4ZDMgfSwgeyAweDI4LDB4YTUsMHg3YSwweGRlIH0sCisgICAgeyAweDM1LDB4YjcsMHg2MSwweGM5IH0sIHsgMHgzZSwweGI5LDB4NjgsMHhjNCB9LAorICAgIHsgMHgwZiwweDkzLDB4NTcsMHhlNyB9LCB7IDB4MDQsMHg5ZCwweDVlLDB4ZWEgfSwKKyAgICB7IDB4MTksMHg4ZiwweDQ1LDB4ZmQgfSwgeyAweDEyLDB4ODEsMHg0YywweGYwIH0sCisgICAgeyAweGNiLDB4M2IsMHhhYiwweDZiIH0sIHsgMHhjMCwweDM1LDB4YTIsMHg2NiB9LAorICAgIHsgMHhkZCwweDI3LDB4YjksMHg3MSB9LCB7IDB4ZDYsMHgyOSwweGIwLDB4N2MgfSwKKyAgICB7IDB4ZTcsMHgwMywweDhmLDB4NWYgfSwgeyAweGVjLDB4MGQsMHg4NiwweDUyIH0sCisgICAgeyAweGYxLDB4MWYsMHg5ZCwweDQ1IH0sIHsgMHhmYSwweDExLDB4OTQsMHg0OCB9LAorICAgIHsgMHg5MywweDRiLDB4ZTMsMHgwMyB9LCB7IDB4OTgsMHg0NSwweGVhLDB4MGUgfSwKKyAgICB7IDB4ODUsMHg1NywweGYxLDB4MTkgfSwgeyAweDhlLDB4NTksMHhmOCwweDE0IH0sCisgICAgeyAweGJmLDB4NzMsMHhjNywweDM3IH0sIHsgMHhiNCwweDdkLDB4Y2UsMHgzYSB9LAorICAgIHsgMHhhOSwweDZmLDB4ZDUsMHgyZCB9LCB7IDB4YTIsMHg2MSwweGRjLDB4MjAgfSwKKyAgICB7IDB4ZjYsMHhhZCwweDc2LDB4NmQgfSwgeyAweGZkLDB4YTMsMHg3ZiwweDYwIH0sCisgICAgeyAweGUwLDB4YjEsMHg2NCwweDc3IH0sIHsgMHhlYiwweGJmLDB4NmQsMHg3YSB9LAorICAgIHsgMHhkYSwweDk1LDB4NTIsMHg1OSB9LCB7IDB4ZDEsMHg5YiwweDViLDB4NTQgfSwKKyAgICB7IDB4Y2MsMHg4OSwweDQwLDB4NDMgfSwgeyAweGM3LDB4ODcsMHg0OSwweDRlIH0sCisgICAgeyAweGFlLDB4ZGQsMHgzZSwweDA1IH0sIHsgMHhhNSwweGQzLDB4MzcsMHgwOCB9LAorICAgIHsgMHhiOCwweGMxLDB4MmMsMHgxZiB9LCB7IDB4YjMsMHhjZiwweDI1LDB4MTIgfSwKKyAgICB7IDB4ODIsMHhlNSwweDFhLDB4MzEgfSwgeyAweDg5LDB4ZWIsMHgxMywweDNjIH0sCisgICAgeyAweDk0LDB4ZjksMHgwOCwweDJiIH0sIHsgMHg5ZiwweGY3LDB4MDEsMHgyNiB9LAorICAgIHsgMHg0NiwweDRkLDB4ZTYsMHhiZCB9LCB7IDB4NGQsMHg0MywweGVmLDB4YjAgfSwKKyAgICB7IDB4NTAsMHg1MSwweGY0LDB4YTcgfSwgeyAweDViLDB4NWYsMHhmZCwweGFhIH0sCisgICAgeyAweDZhLDB4NzUsMHhjMiwweDg5IH0sIHsgMHg2MSwweDdiLDB4Y2IsMHg4NCB9LAorICAgIHsgMHg3YywweDY5LDB4ZDAsMHg5MyB9LCB7IDB4NzcsMHg2NywweGQ5LDB4OWUgfSwKKyAgICB7IDB4MWUsMHgzZCwweGFlLDB4ZDUgfSwgeyAweDE1LDB4MzMsMHhhNywweGQ4IH0sCisgICAgeyAweDA4LDB4MjEsMHhiYywweGNmIH0sIHsgMHgwMywweDJmLDB4YjUsMHhjMiB9LAorICAgIHsgMHgzMiwweDA1LDB4OGEsMHhlMSB9LCB7IDB4MzksMHgwYiwweDgzLDB4ZWMgfSwKKyAgICB7IDB4MjQsMHgxOSwweDk4LDB4ZmIgfSwgeyAweDJmLDB4MTcsMHg5MSwweGY2IH0sCisgICAgeyAweDhkLDB4NzYsMHg0ZCwweGQ2IH0sIHsgMHg4NiwweDc4LDB4NDQsMHhkYiB9LAorICAgIHsgMHg5YiwweDZhLDB4NWYsMHhjYyB9LCB7IDB4OTAsMHg2NCwweDU2LDB4YzEgfSwKKyAgICB7IDB4YTEsMHg0ZSwweDY5LDB4ZTIgfSwgeyAweGFhLDB4NDAsMHg2MCwweGVmIH0sCisgICAgeyAweGI3LDB4NTIsMHg3YiwweGY4IH0sIHsgMHhiYywweDVjLDB4NzIsMHhmNSB9LAorICAgIHsgMHhkNSwweDA2LDB4MDUsMHhiZSB9LCB7IDB4ZGUsMHgwOCwweDBjLDB4YjMgfSwKKyAgICB7IDB4YzMsMHgxYSwweDE3LDB4YTQgfSwgeyAweGM4LDB4MTQsMHgxZSwweGE5IH0sCisgICAgeyAweGY5LDB4M2UsMHgyMSwweDhhIH0sIHsgMHhmMiwweDMwLDB4MjgsMHg4NyB9LAorICAgIHsgMHhlZiwweDIyLDB4MzMsMHg5MCB9LCB7IDB4ZTQsMHgyYywweDNhLDB4OWQgfSwKKyAgICB7IDB4M2QsMHg5NiwweGRkLDB4MDYgfSwgeyAweDM2LDB4OTgsMHhkNCwweDBiIH0sCisgICAgeyAweDJiLDB4OGEsMHhjZiwweDFjIH0sIHsgMHgyMCwweDg0LDB4YzYsMHgxMSB9LAorICAgIHsgMHgxMSwweGFlLDB4ZjksMHgzMiB9LCB7IDB4MWEsMHhhMCwweGYwLDB4M2YgfSwKKyAgICB7IDB4MDcsMHhiMiwweGViLDB4MjggfSwgeyAweDBjLDB4YmMsMHhlMiwweDI1IH0sCisgICAgeyAweDY1LDB4ZTYsMHg5NSwweDZlIH0sIHsgMHg2ZSwweGU4LDB4OWMsMHg2MyB9LAorICAgIHsgMHg3MywweGZhLDB4ODcsMHg3NCB9LCB7IDB4NzgsMHhmNCwweDhlLDB4NzkgfSwKKyAgICB7IDB4NDksMHhkZSwweGIxLDB4NWEgfSwgeyAweDQyLDB4ZDAsMHhiOCwweDU3IH0sCisgICAgeyAweDVmLDB4YzIsMHhhMywweDQwIH0sIHsgMHg1NCwweGNjLDB4YWEsMHg0ZCB9LAorICAgIHsgMHhmNywweDQxLDB4ZWMsMHhkYSB9LCB7IDB4ZmMsMHg0ZiwweGU1LDB4ZDcgfSwKKyAgICB7IDB4ZTEsMHg1ZCwweGZlLDB4YzAgfSwgeyAweGVhLDB4NTMsMHhmNywweGNkIH0sCisgICAgeyAweGRiLDB4NzksMHhjOCwweGVlIH0sIHsgMHhkMCwweDc3LDB4YzEsMHhlMyB9LAorICAgIHsgMHhjZCwweDY1LDB4ZGEsMHhmNCB9LCB7IDB4YzYsMHg2YiwweGQzLDB4ZjkgfSwKKyAgICB7IDB4YWYsMHgzMSwweGE0LDB4YjIgfSwgeyAweGE0LDB4M2YsMHhhZCwweGJmIH0sCisgICAgeyAweGI5LDB4MmQsMHhiNiwweGE4IH0sIHsgMHhiMiwweDIzLDB4YmYsMHhhNSB9LAorICAgIHsgMHg4MywweDA5LDB4ODAsMHg4NiB9LCB7IDB4ODgsMHgwNywweDg5LDB4OGIgfSwKKyAgICB7IDB4OTUsMHgxNSwweDkyLDB4OWMgfSwgeyAweDllLDB4MWIsMHg5YiwweDkxIH0sCisgICAgeyAweDQ3LDB4YTEsMHg3YywweDBhIH0sIHsgMHg0YywweGFmLDB4NzUsMHgwNyB9LAorICAgIHsgMHg1MSwweGJkLDB4NmUsMHgxMCB9LCB7IDB4NWEsMHhiMywweDY3LDB4MWQgfSwKKyAgICB7IDB4NmIsMHg5OSwweDU4LDB4M2UgfSwgeyAweDYwLDB4OTcsMHg1MSwweDMzIH0sCisgICAgeyAweDdkLDB4ODUsMHg0YSwweDI0IH0sIHsgMHg3NiwweDhiLDB4NDMsMHgyOSB9LAorICAgIHsgMHgxZiwweGQxLDB4MzQsMHg2MiB9LCB7IDB4MTQsMHhkZiwweDNkLDB4NmYgfSwKKyAgICB7IDB4MDksMHhjZCwweDI2LDB4NzggfSwgeyAweDAyLDB4YzMsMHgyZiwweDc1IH0sCisgICAgeyAweDMzLDB4ZTksMHgxMCwweDU2IH0sIHsgMHgzOCwweGU3LDB4MTksMHg1YiB9LAorICAgIHsgMHgyNSwweGY1LDB4MDIsMHg0YyB9LCB7IDB4MmUsMHhmYiwweDBiLDB4NDEgfSwKKyAgICB7IDB4OGMsMHg5YSwweGQ3LDB4NjEgfSwgeyAweDg3LDB4OTQsMHhkZSwweDZjIH0sCisgICAgeyAweDlhLDB4ODYsMHhjNSwweDdiIH0sIHsgMHg5MSwweDg4LDB4Y2MsMHg3NiB9LAorICAgIHsgMHhhMCwweGEyLDB4ZjMsMHg1NSB9LCB7IDB4YWIsMHhhYywweGZhLDB4NTggfSwKKyAgICB7IDB4YjYsMHhiZSwweGUxLDB4NGYgfSwgeyAweGJkLDB4YjAsMHhlOCwweDQyIH0sCisgICAgeyAweGQ0LDB4ZWEsMHg5ZiwweDA5IH0sIHsgMHhkZiwweGU0LDB4OTYsMHgwNCB9LAorICAgIHsgMHhjMiwweGY2LDB4OGQsMHgxMyB9LCB7IDB4YzksMHhmOCwweDg0LDB4MWUgfSwKKyAgICB7IDB4ZjgsMHhkMiwweGJiLDB4M2QgfSwgeyAweGYzLDB4ZGMsMHhiMiwweDMwIH0sCisgICAgeyAweGVlLDB4Y2UsMHhhOSwweDI3IH0sIHsgMHhlNSwweGMwLDB4YTAsMHgyYSB9LAorICAgIHsgMHgzYywweDdhLDB4NDcsMHhiMSB9LCB7IDB4MzcsMHg3NCwweDRlLDB4YmMgfSwKKyAgICB7IDB4MmEsMHg2NiwweDU1LDB4YWIgfSwgeyAweDIxLDB4NjgsMHg1YywweGE2IH0sCisgICAgeyAweDEwLDB4NDIsMHg2MywweDg1IH0sIHsgMHgxYiwweDRjLDB4NmEsMHg4OCB9LAorICAgIHsgMHgwNiwweDVlLDB4NzEsMHg5ZiB9LCB7IDB4MGQsMHg1MCwweDc4LDB4OTIgfSwKKyAgICB7IDB4NjQsMHgwYSwweDBmLDB4ZDkgfSwgeyAweDZmLDB4MDQsMHgwNiwweGQ0IH0sCisgICAgeyAweDcyLDB4MTYsMHgxZCwweGMzIH0sIHsgMHg3OSwweDE4LDB4MTQsMHhjZSB9LAorICAgIHsgMHg0OCwweDMyLDB4MmIsMHhlZCB9LCB7IDB4NDMsMHgzYywweDIyLDB4ZTAgfSwKKyAgICB7IDB4NWUsMHgyZSwweDM5LDB4ZjcgfSwgeyAweDU1LDB4MjAsMHgzMCwweGZhIH0sCisgICAgeyAweDAxLDB4ZWMsMHg5YSwweGI3IH0sIHsgMHgwYSwweGUyLDB4OTMsMHhiYSB9LAorICAgIHsgMHgxNywweGYwLDB4ODgsMHhhZCB9LCB7IDB4MWMsMHhmZSwweDgxLDB4YTAgfSwKKyAgICB7IDB4MmQsMHhkNCwweGJlLDB4ODMgfSwgeyAweDI2LDB4ZGEsMHhiNywweDhlIH0sCisgICAgeyAweDNiLDB4YzgsMHhhYywweDk5IH0sIHsgMHgzMCwweGM2LDB4YTUsMHg5NCB9LAorICAgIHsgMHg1OSwweDljLDB4ZDIsMHhkZiB9LCB7IDB4NTIsMHg5MiwweGRiLDB4ZDIgfSwKKyAgICB7IDB4NGYsMHg4MCwweGMwLDB4YzUgfSwgeyAweDQ0LDB4OGUsMHhjOSwweGM4IH0sCisgICAgeyAweDc1LDB4YTQsMHhmNiwweGViIH0sIHsgMHg3ZSwweGFhLDB4ZmYsMHhlNiB9LAorICAgIHsgMHg2MywweGI4LDB4ZTQsMHhmMSB9LCB7IDB4NjgsMHhiNiwweGVkLDB4ZmMgfSwKKyAgICB7IDB4YjEsMHgwYywweDBhLDB4NjcgfSwgeyAweGJhLDB4MDIsMHgwMywweDZhIH0sCisgICAgeyAweGE3LDB4MTAsMHgxOCwweDdkIH0sIHsgMHhhYywweDFlLDB4MTEsMHg3MCB9LAorICAgIHsgMHg5ZCwweDM0LDB4MmUsMHg1MyB9LCB7IDB4OTYsMHgzYSwweDI3LDB4NWUgfSwKKyAgICB7IDB4OGIsMHgyOCwweDNjLDB4NDkgfSwgeyAweDgwLDB4MjYsMHgzNSwweDQ0IH0sCisgICAgeyAweGU5LDB4N2MsMHg0MiwweDBmIH0sIHsgMHhlMiwweDcyLDB4NGIsMHgwMiB9LAorICAgIHsgMHhmZiwweDYwLDB4NTAsMHgxNSB9LCB7IDB4ZjQsMHg2ZSwweDU5LDB4MTggfSwKKyAgICB7IDB4YzUsMHg0NCwweDY2LDB4M2IgfSwgeyAweGNlLDB4NGEsMHg2ZiwweDM2IH0sCisgICAgeyAweGQzLDB4NTgsMHg3NCwweDIxIH0sIHsgMHhkOCwweDU2LDB4N2QsMHgyYyB9LAorICAgIHsgMHg3YSwweDM3LDB4YTEsMHgwYyB9LCB7IDB4NzEsMHgzOSwweGE4LDB4MDEgfSwKKyAgICB7IDB4NmMsMHgyYiwweGIzLDB4MTYgfSwgeyAweDY3LDB4MjUsMHhiYSwweDFiIH0sCisgICAgeyAweDU2LDB4MGYsMHg4NSwweDM4IH0sIHsgMHg1ZCwweDAxLDB4OGMsMHgzNSB9LAorICAgIHsgMHg0MCwweDEzLDB4OTcsMHgyMiB9LCB7IDB4NGIsMHgxZCwweDllLDB4MmYgfSwKKyAgICB7IDB4MjIsMHg0NywweGU5LDB4NjQgfSwgeyAweDI5LDB4NDksMHhlMCwweDY5IH0sCisgICAgeyAweDM0LDB4NWIsMHhmYiwweDdlIH0sIHsgMHgzZiwweDU1LDB4ZjIsMHg3MyB9LAorICAgIHsgMHgwZSwweDdmLDB4Y2QsMHg1MCB9LCB7IDB4MDUsMHg3MSwweGM0LDB4NWQgfSwKKyAgICB7IDB4MTgsMHg2MywweGRmLDB4NGEgfSwgeyAweDEzLDB4NmQsMHhkNiwweDQ3IH0sCisgICAgeyAweGNhLDB4ZDcsMHgzMSwweGRjIH0sIHsgMHhjMSwweGQ5LDB4MzgsMHhkMSB9LAorICAgIHsgMHhkYywweGNiLDB4MjMsMHhjNiB9LCB7IDB4ZDcsMHhjNSwweDJhLDB4Y2IgfSwKKyAgICB7IDB4ZTYsMHhlZiwweDE1LDB4ZTggfSwgeyAweGVkLDB4ZTEsMHgxYywweGU1IH0sCisgICAgeyAweGYwLDB4ZjMsMHgwNywweGYyIH0sIHsgMHhmYiwweGZkLDB4MGUsMHhmZiB9LAorICAgIHsgMHg5MiwweGE3LDB4NzksMHhiNCB9LCB7IDB4OTksMHhhOSwweDcwLDB4YjkgfSwKKyAgICB7IDB4ODQsMHhiYiwweDZiLDB4YWUgfSwgeyAweDhmLDB4YjUsMHg2MiwweGEzIH0sCisgICAgeyAweGJlLDB4OWYsMHg1ZCwweDgwIH0sIHsgMHhiNSwweDkxLDB4NTQsMHg4ZCB9LAorICAgIHsgMHhhOCwweDgzLDB4NGYsMHg5YSB9LCB7IDB4YTMsMHg4ZCwweDQ2LDB4OTcgfQorICB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBVM1syNTZdWzRdID0KKyAgeworICAgIHsgMHgwMCwweDAwLDB4MDAsMHgwMCB9LCB7IDB4MGQsMHgwYiwweDBlLDB4MDkgfSwKKyAgICB7IDB4MWEsMHgxNiwweDFjLDB4MTIgfSwgeyAweDE3LDB4MWQsMHgxMiwweDFiIH0sCisgICAgeyAweDM0LDB4MmMsMHgzOCwweDI0IH0sIHsgMHgzOSwweDI3LDB4MzYsMHgyZCB9LAorICAgIHsgMHgyZSwweDNhLDB4MjQsMHgzNiB9LCB7IDB4MjMsMHgzMSwweDJhLDB4M2YgfSwKKyAgICB7IDB4NjgsMHg1OCwweDcwLDB4NDggfSwgeyAweDY1LDB4NTMsMHg3ZSwweDQxIH0sCisgICAgeyAweDcyLDB4NGUsMHg2YywweDVhIH0sIHsgMHg3ZiwweDQ1LDB4NjIsMHg1MyB9LAorICAgIHsgMHg1YywweDc0LDB4NDgsMHg2YyB9LCB7IDB4NTEsMHg3ZiwweDQ2LDB4NjUgfSwKKyAgICB7IDB4NDYsMHg2MiwweDU0LDB4N2UgfSwgeyAweDRiLDB4NjksMHg1YSwweDc3IH0sCisgICAgeyAweGQwLDB4YjAsMHhlMCwweDkwIH0sIHsgMHhkZCwweGJiLDB4ZWUsMHg5OSB9LAorICAgIHsgMHhjYSwweGE2LDB4ZmMsMHg4MiB9LCB7IDB4YzcsMHhhZCwweGYyLDB4OGIgfSwKKyAgICB7IDB4ZTQsMHg5YywweGQ4LDB4YjQgfSwgeyAweGU5LDB4OTcsMHhkNiwweGJkIH0sCisgICAgeyAweGZlLDB4OGEsMHhjNCwweGE2IH0sIHsgMHhmMywweDgxLDB4Y2EsMHhhZiB9LAorICAgIHsgMHhiOCwweGU4LDB4OTAsMHhkOCB9LCB7IDB4YjUsMHhlMywweDllLDB4ZDEgfSwKKyAgICB7IDB4YTIsMHhmZSwweDhjLDB4Y2EgfSwgeyAweGFmLDB4ZjUsMHg4MiwweGMzIH0sCisgICAgeyAweDhjLDB4YzQsMHhhOCwweGZjIH0sIHsgMHg4MSwweGNmLDB4YTYsMHhmNSB9LAorICAgIHsgMHg5NiwweGQyLDB4YjQsMHhlZSB9LCB7IDB4OWIsMHhkOSwweGJhLDB4ZTcgfSwKKyAgICB7IDB4YmIsMHg3YiwweGRiLDB4M2IgfSwgeyAweGI2LDB4NzAsMHhkNSwweDMyIH0sCisgICAgeyAweGExLDB4NmQsMHhjNywweDI5IH0sIHsgMHhhYywweDY2LDB4YzksMHgyMCB9LAorICAgIHsgMHg4ZiwweDU3LDB4ZTMsMHgxZiB9LCB7IDB4ODIsMHg1YywweGVkLDB4MTYgfSwKKyAgICB7IDB4OTUsMHg0MSwweGZmLDB4MGQgfSwgeyAweDk4LDB4NGEsMHhmMSwweDA0IH0sCisgICAgeyAweGQzLDB4MjMsMHhhYiwweDczIH0sIHsgMHhkZSwweDI4LDB4YTUsMHg3YSB9LAorICAgIHsgMHhjOSwweDM1LDB4YjcsMHg2MSB9LCB7IDB4YzQsMHgzZSwweGI5LDB4NjggfSwKKyAgICB7IDB4ZTcsMHgwZiwweDkzLDB4NTcgfSwgeyAweGVhLDB4MDQsMHg5ZCwweDVlIH0sCisgICAgeyAweGZkLDB4MTksMHg4ZiwweDQ1IH0sIHsgMHhmMCwweDEyLDB4ODEsMHg0YyB9LAorICAgIHsgMHg2YiwweGNiLDB4M2IsMHhhYiB9LCB7IDB4NjYsMHhjMCwweDM1LDB4YTIgfSwKKyAgICB7IDB4NzEsMHhkZCwweDI3LDB4YjkgfSwgeyAweDdjLDB4ZDYsMHgyOSwweGIwIH0sCisgICAgeyAweDVmLDB4ZTcsMHgwMywweDhmIH0sIHsgMHg1MiwweGVjLDB4MGQsMHg4NiB9LAorICAgIHsgMHg0NSwweGYxLDB4MWYsMHg5ZCB9LCB7IDB4NDgsMHhmYSwweDExLDB4OTQgfSwKKyAgICB7IDB4MDMsMHg5MywweDRiLDB4ZTMgfSwgeyAweDBlLDB4OTgsMHg0NSwweGVhIH0sCisgICAgeyAweDE5LDB4ODUsMHg1NywweGYxIH0sIHsgMHgxNCwweDhlLDB4NTksMHhmOCB9LAorICAgIHsgMHgzNywweGJmLDB4NzMsMHhjNyB9LCB7IDB4M2EsMHhiNCwweDdkLDB4Y2UgfSwKKyAgICB7IDB4MmQsMHhhOSwweDZmLDB4ZDUgfSwgeyAweDIwLDB4YTIsMHg2MSwweGRjIH0sCisgICAgeyAweDZkLDB4ZjYsMHhhZCwweDc2IH0sIHsgMHg2MCwweGZkLDB4YTMsMHg3ZiB9LAorICAgIHsgMHg3NywweGUwLDB4YjEsMHg2NCB9LCB7IDB4N2EsMHhlYiwweGJmLDB4NmQgfSwKKyAgICB7IDB4NTksMHhkYSwweDk1LDB4NTIgfSwgeyAweDU0LDB4ZDEsMHg5YiwweDViIH0sCisgICAgeyAweDQzLDB4Y2MsMHg4OSwweDQwIH0sIHsgMHg0ZSwweGM3LDB4ODcsMHg0OSB9LAorICAgIHsgMHgwNSwweGFlLDB4ZGQsMHgzZSB9LCB7IDB4MDgsMHhhNSwweGQzLDB4MzcgfSwKKyAgICB7IDB4MWYsMHhiOCwweGMxLDB4MmMgfSwgeyAweDEyLDB4YjMsMHhjZiwweDI1IH0sCisgICAgeyAweDMxLDB4ODIsMHhlNSwweDFhIH0sIHsgMHgzYywweDg5LDB4ZWIsMHgxMyB9LAorICAgIHsgMHgyYiwweDk0LDB4ZjksMHgwOCB9LCB7IDB4MjYsMHg5ZiwweGY3LDB4MDEgfSwKKyAgICB7IDB4YmQsMHg0NiwweDRkLDB4ZTYgfSwgeyAweGIwLDB4NGQsMHg0MywweGVmIH0sCisgICAgeyAweGE3LDB4NTAsMHg1MSwweGY0IH0sIHsgMHhhYSwweDViLDB4NWYsMHhmZCB9LAorICAgIHsgMHg4OSwweDZhLDB4NzUsMHhjMiB9LCB7IDB4ODQsMHg2MSwweDdiLDB4Y2IgfSwKKyAgICB7IDB4OTMsMHg3YywweDY5LDB4ZDAgfSwgeyAweDllLDB4NzcsMHg2NywweGQ5IH0sCisgICAgeyAweGQ1LDB4MWUsMHgzZCwweGFlIH0sIHsgMHhkOCwweDE1LDB4MzMsMHhhNyB9LAorICAgIHsgMHhjZiwweDA4LDB4MjEsMHhiYyB9LCB7IDB4YzIsMHgwMywweDJmLDB4YjUgfSwKKyAgICB7IDB4ZTEsMHgzMiwweDA1LDB4OGEgfSwgeyAweGVjLDB4MzksMHgwYiwweDgzIH0sCisgICAgeyAweGZiLDB4MjQsMHgxOSwweDk4IH0sIHsgMHhmNiwweDJmLDB4MTcsMHg5MSB9LAorICAgIHsgMHhkNiwweDhkLDB4NzYsMHg0ZCB9LCB7IDB4ZGIsMHg4NiwweDc4LDB4NDQgfSwKKyAgICB7IDB4Y2MsMHg5YiwweDZhLDB4NWYgfSwgeyAweGMxLDB4OTAsMHg2NCwweDU2IH0sCisgICAgeyAweGUyLDB4YTEsMHg0ZSwweDY5IH0sIHsgMHhlZiwweGFhLDB4NDAsMHg2MCB9LAorICAgIHsgMHhmOCwweGI3LDB4NTIsMHg3YiB9LCB7IDB4ZjUsMHhiYywweDVjLDB4NzIgfSwKKyAgICB7IDB4YmUsMHhkNSwweDA2LDB4MDUgfSwgeyAweGIzLDB4ZGUsMHgwOCwweDBjIH0sCisgICAgeyAweGE0LDB4YzMsMHgxYSwweDE3IH0sIHsgMHhhOSwweGM4LDB4MTQsMHgxZSB9LAorICAgIHsgMHg4YSwweGY5LDB4M2UsMHgyMSB9LCB7IDB4ODcsMHhmMiwweDMwLDB4MjggfSwKKyAgICB7IDB4OTAsMHhlZiwweDIyLDB4MzMgfSwgeyAweDlkLDB4ZTQsMHgyYywweDNhIH0sCisgICAgeyAweDA2LDB4M2QsMHg5NiwweGRkIH0sIHsgMHgwYiwweDM2LDB4OTgsMHhkNCB9LAorICAgIHsgMHgxYywweDJiLDB4OGEsMHhjZiB9LCB7IDB4MTEsMHgyMCwweDg0LDB4YzYgfSwKKyAgICB7IDB4MzIsMHgxMSwweGFlLDB4ZjkgfSwgeyAweDNmLDB4MWEsMHhhMCwweGYwIH0sCisgICAgeyAweDI4LDB4MDcsMHhiMiwweGViIH0sIHsgMHgyNSwweDBjLDB4YmMsMHhlMiB9LAorICAgIHsgMHg2ZSwweDY1LDB4ZTYsMHg5NSB9LCB7IDB4NjMsMHg2ZSwweGU4LDB4OWMgfSwKKyAgICB7IDB4NzQsMHg3MywweGZhLDB4ODcgfSwgeyAweDc5LDB4NzgsMHhmNCwweDhlIH0sCisgICAgeyAweDVhLDB4NDksMHhkZSwweGIxIH0sIHsgMHg1NywweDQyLDB4ZDAsMHhiOCB9LAorICAgIHsgMHg0MCwweDVmLDB4YzIsMHhhMyB9LCB7IDB4NGQsMHg1NCwweGNjLDB4YWEgfSwKKyAgICB7IDB4ZGEsMHhmNywweDQxLDB4ZWMgfSwgeyAweGQ3LDB4ZmMsMHg0ZiwweGU1IH0sCisgICAgeyAweGMwLDB4ZTEsMHg1ZCwweGZlIH0sIHsgMHhjZCwweGVhLDB4NTMsMHhmNyB9LAorICAgIHsgMHhlZSwweGRiLDB4NzksMHhjOCB9LCB7IDB4ZTMsMHhkMCwweDc3LDB4YzEgfSwKKyAgICB7IDB4ZjQsMHhjZCwweDY1LDB4ZGEgfSwgeyAweGY5LDB4YzYsMHg2YiwweGQzIH0sCisgICAgeyAweGIyLDB4YWYsMHgzMSwweGE0IH0sIHsgMHhiZiwweGE0LDB4M2YsMHhhZCB9LAorICAgIHsgMHhhOCwweGI5LDB4MmQsMHhiNiB9LCB7IDB4YTUsMHhiMiwweDIzLDB4YmYgfSwKKyAgICB7IDB4ODYsMHg4MywweDA5LDB4ODAgfSwgeyAweDhiLDB4ODgsMHgwNywweDg5IH0sCisgICAgeyAweDljLDB4OTUsMHgxNSwweDkyIH0sIHsgMHg5MSwweDllLDB4MWIsMHg5YiB9LAorICAgIHsgMHgwYSwweDQ3LDB4YTEsMHg3YyB9LCB7IDB4MDcsMHg0YywweGFmLDB4NzUgfSwKKyAgICB7IDB4MTAsMHg1MSwweGJkLDB4NmUgfSwgeyAweDFkLDB4NWEsMHhiMywweDY3IH0sCisgICAgeyAweDNlLDB4NmIsMHg5OSwweDU4IH0sIHsgMHgzMywweDYwLDB4OTcsMHg1MSB9LAorICAgIHsgMHgyNCwweDdkLDB4ODUsMHg0YSB9LCB7IDB4MjksMHg3NiwweDhiLDB4NDMgfSwKKyAgICB7IDB4NjIsMHgxZiwweGQxLDB4MzQgfSwgeyAweDZmLDB4MTQsMHhkZiwweDNkIH0sCisgICAgeyAweDc4LDB4MDksMHhjZCwweDI2IH0sIHsgMHg3NSwweDAyLDB4YzMsMHgyZiB9LAorICAgIHsgMHg1NiwweDMzLDB4ZTksMHgxMCB9LCB7IDB4NWIsMHgzOCwweGU3LDB4MTkgfSwKKyAgICB7IDB4NGMsMHgyNSwweGY1LDB4MDIgfSwgeyAweDQxLDB4MmUsMHhmYiwweDBiIH0sCisgICAgeyAweDYxLDB4OGMsMHg5YSwweGQ3IH0sIHsgMHg2YywweDg3LDB4OTQsMHhkZSB9LAorICAgIHsgMHg3YiwweDlhLDB4ODYsMHhjNSB9LCB7IDB4NzYsMHg5MSwweDg4LDB4Y2MgfSwKKyAgICB7IDB4NTUsMHhhMCwweGEyLDB4ZjMgfSwgeyAweDU4LDB4YWIsMHhhYywweGZhIH0sCisgICAgeyAweDRmLDB4YjYsMHhiZSwweGUxIH0sIHsgMHg0MiwweGJkLDB4YjAsMHhlOCB9LAorICAgIHsgMHgwOSwweGQ0LDB4ZWEsMHg5ZiB9LCB7IDB4MDQsMHhkZiwweGU0LDB4OTYgfSwKKyAgICB7IDB4MTMsMHhjMiwweGY2LDB4OGQgfSwgeyAweDFlLDB4YzksMHhmOCwweDg0IH0sCisgICAgeyAweDNkLDB4ZjgsMHhkMiwweGJiIH0sIHsgMHgzMCwweGYzLDB4ZGMsMHhiMiB9LAorICAgIHsgMHgyNywweGVlLDB4Y2UsMHhhOSB9LCB7IDB4MmEsMHhlNSwweGMwLDB4YTAgfSwKKyAgICB7IDB4YjEsMHgzYywweDdhLDB4NDcgfSwgeyAweGJjLDB4MzcsMHg3NCwweDRlIH0sCisgICAgeyAweGFiLDB4MmEsMHg2NiwweDU1IH0sIHsgMHhhNiwweDIxLDB4NjgsMHg1YyB9LAorICAgIHsgMHg4NSwweDEwLDB4NDIsMHg2MyB9LCB7IDB4ODgsMHgxYiwweDRjLDB4NmEgfSwKKyAgICB7IDB4OWYsMHgwNiwweDVlLDB4NzEgfSwgeyAweDkyLDB4MGQsMHg1MCwweDc4IH0sCisgICAgeyAweGQ5LDB4NjQsMHgwYSwweDBmIH0sIHsgMHhkNCwweDZmLDB4MDQsMHgwNiB9LAorICAgIHsgMHhjMywweDcyLDB4MTYsMHgxZCB9LCB7IDB4Y2UsMHg3OSwweDE4LDB4MTQgfSwKKyAgICB7IDB4ZWQsMHg0OCwweDMyLDB4MmIgfSwgeyAweGUwLDB4NDMsMHgzYywweDIyIH0sCisgICAgeyAweGY3LDB4NWUsMHgyZSwweDM5IH0sIHsgMHhmYSwweDU1LDB4MjAsMHgzMCB9LAorICAgIHsgMHhiNywweDAxLDB4ZWMsMHg5YSB9LCB7IDB4YmEsMHgwYSwweGUyLDB4OTMgfSwKKyAgICB7IDB4YWQsMHgxNywweGYwLDB4ODggfSwgeyAweGEwLDB4MWMsMHhmZSwweDgxIH0sCisgICAgeyAweDgzLDB4MmQsMHhkNCwweGJlIH0sIHsgMHg4ZSwweDI2LDB4ZGEsMHhiNyB9LAorICAgIHsgMHg5OSwweDNiLDB4YzgsMHhhYyB9LCB7IDB4OTQsMHgzMCwweGM2LDB4YTUgfSwKKyAgICB7IDB4ZGYsMHg1OSwweDljLDB4ZDIgfSwgeyAweGQyLDB4NTIsMHg5MiwweGRiIH0sCisgICAgeyAweGM1LDB4NGYsMHg4MCwweGMwIH0sIHsgMHhjOCwweDQ0LDB4OGUsMHhjOSB9LAorICAgIHsgMHhlYiwweDc1LDB4YTQsMHhmNiB9LCB7IDB4ZTYsMHg3ZSwweGFhLDB4ZmYgfSwKKyAgICB7IDB4ZjEsMHg2MywweGI4LDB4ZTQgfSwgeyAweGZjLDB4NjgsMHhiNiwweGVkIH0sCisgICAgeyAweDY3LDB4YjEsMHgwYywweDBhIH0sIHsgMHg2YSwweGJhLDB4MDIsMHgwMyB9LAorICAgIHsgMHg3ZCwweGE3LDB4MTAsMHgxOCB9LCB7IDB4NzAsMHhhYywweDFlLDB4MTEgfSwKKyAgICB7IDB4NTMsMHg5ZCwweDM0LDB4MmUgfSwgeyAweDVlLDB4OTYsMHgzYSwweDI3IH0sCisgICAgeyAweDQ5LDB4OGIsMHgyOCwweDNjIH0sIHsgMHg0NCwweDgwLDB4MjYsMHgzNSB9LAorICAgIHsgMHgwZiwweGU5LDB4N2MsMHg0MiB9LCB7IDB4MDIsMHhlMiwweDcyLDB4NGIgfSwKKyAgICB7IDB4MTUsMHhmZiwweDYwLDB4NTAgfSwgeyAweDE4LDB4ZjQsMHg2ZSwweDU5IH0sCisgICAgeyAweDNiLDB4YzUsMHg0NCwweDY2IH0sIHsgMHgzNiwweGNlLDB4NGEsMHg2ZiB9LAorICAgIHsgMHgyMSwweGQzLDB4NTgsMHg3NCB9LCB7IDB4MmMsMHhkOCwweDU2LDB4N2QgfSwKKyAgICB7IDB4MGMsMHg3YSwweDM3LDB4YTEgfSwgeyAweDAxLDB4NzEsMHgzOSwweGE4IH0sCisgICAgeyAweDE2LDB4NmMsMHgyYiwweGIzIH0sIHsgMHgxYiwweDY3LDB4MjUsMHhiYSB9LAorICAgIHsgMHgzOCwweDU2LDB4MGYsMHg4NSB9LCB7IDB4MzUsMHg1ZCwweDAxLDB4OGMgfSwKKyAgICB7IDB4MjIsMHg0MCwweDEzLDB4OTcgfSwgeyAweDJmLDB4NGIsMHgxZCwweDllIH0sCisgICAgeyAweDY0LDB4MjIsMHg0NywweGU5IH0sIHsgMHg2OSwweDI5LDB4NDksMHhlMCB9LAorICAgIHsgMHg3ZSwweDM0LDB4NWIsMHhmYiB9LCB7IDB4NzMsMHgzZiwweDU1LDB4ZjIgfSwKKyAgICB7IDB4NTAsMHgwZSwweDdmLDB4Y2QgfSwgeyAweDVkLDB4MDUsMHg3MSwweGM0IH0sCisgICAgeyAweDRhLDB4MTgsMHg2MywweGRmIH0sIHsgMHg0NywweDEzLDB4NmQsMHhkNiB9LAorICAgIHsgMHhkYywweGNhLDB4ZDcsMHgzMSB9LCB7IDB4ZDEsMHhjMSwweGQ5LDB4MzggfSwKKyAgICB7IDB4YzYsMHhkYywweGNiLDB4MjMgfSwgeyAweGNiLDB4ZDcsMHhjNSwweDJhIH0sCisgICAgeyAweGU4LDB4ZTYsMHhlZiwweDE1IH0sIHsgMHhlNSwweGVkLDB4ZTEsMHgxYyB9LAorICAgIHsgMHhmMiwweGYwLDB4ZjMsMHgwNyB9LCB7IDB4ZmYsMHhmYiwweGZkLDB4MGUgfSwKKyAgICB7IDB4YjQsMHg5MiwweGE3LDB4NzkgfSwgeyAweGI5LDB4OTksMHhhOSwweDcwIH0sCisgICAgeyAweGFlLDB4ODQsMHhiYiwweDZiIH0sIHsgMHhhMywweDhmLDB4YjUsMHg2MiB9LAorICAgIHsgMHg4MCwweGJlLDB4OWYsMHg1ZCB9LCB7IDB4OGQsMHhiNSwweDkxLDB4NTQgfSwKKyAgICB7IDB4OWEsMHhhOCwweDgzLDB4NGYgfSwgeyAweDk3LDB4YTMsMHg4ZCwweDQ2IH0KKyAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVTRbMjU2XVs0XSA9CisgIHsKKyAgICB7IDB4MDAsMHgwMCwweDAwLDB4MDAgfSwgeyAweDA5LDB4MGQsMHgwYiwweDBlIH0sCisgICAgeyAweDEyLDB4MWEsMHgxNiwweDFjIH0sIHsgMHgxYiwweDE3LDB4MWQsMHgxMiB9LAorICAgIHsgMHgyNCwweDM0LDB4MmMsMHgzOCB9LCB7IDB4MmQsMHgzOSwweDI3LDB4MzYgfSwKKyAgICB7IDB4MzYsMHgyZSwweDNhLDB4MjQgfSwgeyAweDNmLDB4MjMsMHgzMSwweDJhIH0sCisgICAgeyAweDQ4LDB4NjgsMHg1OCwweDcwIH0sIHsgMHg0MSwweDY1LDB4NTMsMHg3ZSB9LAorICAgIHsgMHg1YSwweDcyLDB4NGUsMHg2YyB9LCB7IDB4NTMsMHg3ZiwweDQ1LDB4NjIgfSwKKyAgICB7IDB4NmMsMHg1YywweDc0LDB4NDggfSwgeyAweDY1LDB4NTEsMHg3ZiwweDQ2IH0sCisgICAgeyAweDdlLDB4NDYsMHg2MiwweDU0IH0sIHsgMHg3NywweDRiLDB4NjksMHg1YSB9LAorICAgIHsgMHg5MCwweGQwLDB4YjAsMHhlMCB9LCB7IDB4OTksMHhkZCwweGJiLDB4ZWUgfSwKKyAgICB7IDB4ODIsMHhjYSwweGE2LDB4ZmMgfSwgeyAweDhiLDB4YzcsMHhhZCwweGYyIH0sCisgICAgeyAweGI0LDB4ZTQsMHg5YywweGQ4IH0sIHsgMHhiZCwweGU5LDB4OTcsMHhkNiB9LAorICAgIHsgMHhhNiwweGZlLDB4OGEsMHhjNCB9LCB7IDB4YWYsMHhmMywweDgxLDB4Y2EgfSwKKyAgICB7IDB4ZDgsMHhiOCwweGU4LDB4OTAgfSwgeyAweGQxLDB4YjUsMHhlMywweDllIH0sCisgICAgeyAweGNhLDB4YTIsMHhmZSwweDhjIH0sIHsgMHhjMywweGFmLDB4ZjUsMHg4MiB9LAorICAgIHsgMHhmYywweDhjLDB4YzQsMHhhOCB9LCB7IDB4ZjUsMHg4MSwweGNmLDB4YTYgfSwKKyAgICB7IDB4ZWUsMHg5NiwweGQyLDB4YjQgfSwgeyAweGU3LDB4OWIsMHhkOSwweGJhIH0sCisgICAgeyAweDNiLDB4YmIsMHg3YiwweGRiIH0sIHsgMHgzMiwweGI2LDB4NzAsMHhkNSB9LAorICAgIHsgMHgyOSwweGExLDB4NmQsMHhjNyB9LCB7IDB4MjAsMHhhYywweDY2LDB4YzkgfSwKKyAgICB7IDB4MWYsMHg4ZiwweDU3LDB4ZTMgfSwgeyAweDE2LDB4ODIsMHg1YywweGVkIH0sCisgICAgeyAweDBkLDB4OTUsMHg0MSwweGZmIH0sIHsgMHgwNCwweDk4LDB4NGEsMHhmMSB9LAorICAgIHsgMHg3MywweGQzLDB4MjMsMHhhYiB9LCB7IDB4N2EsMHhkZSwweDI4LDB4YTUgfSwKKyAgICB7IDB4NjEsMHhjOSwweDM1LDB4YjcgfSwgeyAweDY4LDB4YzQsMHgzZSwweGI5IH0sCisgICAgeyAweDU3LDB4ZTcsMHgwZiwweDkzIH0sIHsgMHg1ZSwweGVhLDB4MDQsMHg5ZCB9LAorICAgIHsgMHg0NSwweGZkLDB4MTksMHg4ZiB9LCB7IDB4NGMsMHhmMCwweDEyLDB4ODEgfSwKKyAgICB7IDB4YWIsMHg2YiwweGNiLDB4M2IgfSwgeyAweGEyLDB4NjYsMHhjMCwweDM1IH0sCisgICAgeyAweGI5LDB4NzEsMHhkZCwweDI3IH0sIHsgMHhiMCwweDdjLDB4ZDYsMHgyOSB9LAorICAgIHsgMHg4ZiwweDVmLDB4ZTcsMHgwMyB9LCB7IDB4ODYsMHg1MiwweGVjLDB4MGQgfSwKKyAgICB7IDB4OWQsMHg0NSwweGYxLDB4MWYgfSwgeyAweDk0LDB4NDgsMHhmYSwweDExIH0sCisgICAgeyAweGUzLDB4MDMsMHg5MywweDRiIH0sIHsgMHhlYSwweDBlLDB4OTgsMHg0NSB9LAorICAgIHsgMHhmMSwweDE5LDB4ODUsMHg1NyB9LCB7IDB4ZjgsMHgxNCwweDhlLDB4NTkgfSwKKyAgICB7IDB4YzcsMHgzNywweGJmLDB4NzMgfSwgeyAweGNlLDB4M2EsMHhiNCwweDdkIH0sCisgICAgeyAweGQ1LDB4MmQsMHhhOSwweDZmIH0sIHsgMHhkYywweDIwLDB4YTIsMHg2MSB9LAorICAgIHsgMHg3NiwweDZkLDB4ZjYsMHhhZCB9LCB7IDB4N2YsMHg2MCwweGZkLDB4YTMgfSwKKyAgICB7IDB4NjQsMHg3NywweGUwLDB4YjEgfSwgeyAweDZkLDB4N2EsMHhlYiwweGJmIH0sCisgICAgeyAweDUyLDB4NTksMHhkYSwweDk1IH0sIHsgMHg1YiwweDU0LDB4ZDEsMHg5YiB9LAorICAgIHsgMHg0MCwweDQzLDB4Y2MsMHg4OSB9LCB7IDB4NDksMHg0ZSwweGM3LDB4ODcgfSwKKyAgICB7IDB4M2UsMHgwNSwweGFlLDB4ZGQgfSwgeyAweDM3LDB4MDgsMHhhNSwweGQzIH0sCisgICAgeyAweDJjLDB4MWYsMHhiOCwweGMxIH0sIHsgMHgyNSwweDEyLDB4YjMsMHhjZiB9LAorICAgIHsgMHgxYSwweDMxLDB4ODIsMHhlNSB9LCB7IDB4MTMsMHgzYywweDg5LDB4ZWIgfSwKKyAgICB7IDB4MDgsMHgyYiwweDk0LDB4ZjkgfSwgeyAweDAxLDB4MjYsMHg5ZiwweGY3IH0sCisgICAgeyAweGU2LDB4YmQsMHg0NiwweDRkIH0sIHsgMHhlZiwweGIwLDB4NGQsMHg0MyB9LAorICAgIHsgMHhmNCwweGE3LDB4NTAsMHg1MSB9LCB7IDB4ZmQsMHhhYSwweDViLDB4NWYgfSwKKyAgICB7IDB4YzIsMHg4OSwweDZhLDB4NzUgfSwgeyAweGNiLDB4ODQsMHg2MSwweDdiIH0sCisgICAgeyAweGQwLDB4OTMsMHg3YywweDY5IH0sIHsgMHhkOSwweDllLDB4NzcsMHg2NyB9LAorICAgIHsgMHhhZSwweGQ1LDB4MWUsMHgzZCB9LCB7IDB4YTcsMHhkOCwweDE1LDB4MzMgfSwKKyAgICB7IDB4YmMsMHhjZiwweDA4LDB4MjEgfSwgeyAweGI1LDB4YzIsMHgwMywweDJmIH0sCisgICAgeyAweDhhLDB4ZTEsMHgzMiwweDA1IH0sIHsgMHg4MywweGVjLDB4MzksMHgwYiB9LAorICAgIHsgMHg5OCwweGZiLDB4MjQsMHgxOSB9LCB7IDB4OTEsMHhmNiwweDJmLDB4MTcgfSwKKyAgICB7IDB4NGQsMHhkNiwweDhkLDB4NzYgfSwgeyAweDQ0LDB4ZGIsMHg4NiwweDc4IH0sCisgICAgeyAweDVmLDB4Y2MsMHg5YiwweDZhIH0sIHsgMHg1NiwweGMxLDB4OTAsMHg2NCB9LAorICAgIHsgMHg2OSwweGUyLDB4YTEsMHg0ZSB9LCB7IDB4NjAsMHhlZiwweGFhLDB4NDAgfSwKKyAgICB7IDB4N2IsMHhmOCwweGI3LDB4NTIgfSwgeyAweDcyLDB4ZjUsMHhiYywweDVjIH0sCisgICAgeyAweDA1LDB4YmUsMHhkNSwweDA2IH0sIHsgMHgwYywweGIzLDB4ZGUsMHgwOCB9LAorICAgIHsgMHgxNywweGE0LDB4YzMsMHgxYSB9LCB7IDB4MWUsMHhhOSwweGM4LDB4MTQgfSwKKyAgICB7IDB4MjEsMHg4YSwweGY5LDB4M2UgfSwgeyAweDI4LDB4ODcsMHhmMiwweDMwIH0sCisgICAgeyAweDMzLDB4OTAsMHhlZiwweDIyIH0sIHsgMHgzYSwweDlkLDB4ZTQsMHgyYyB9LAorICAgIHsgMHhkZCwweDA2LDB4M2QsMHg5NiB9LCB7IDB4ZDQsMHgwYiwweDM2LDB4OTggfSwKKyAgICB7IDB4Y2YsMHgxYywweDJiLDB4OGEgfSwgeyAweGM2LDB4MTEsMHgyMCwweDg0IH0sCisgICAgeyAweGY5LDB4MzIsMHgxMSwweGFlIH0sIHsgMHhmMCwweDNmLDB4MWEsMHhhMCB9LAorICAgIHsgMHhlYiwweDI4LDB4MDcsMHhiMiB9LCB7IDB4ZTIsMHgyNSwweDBjLDB4YmMgfSwKKyAgICB7IDB4OTUsMHg2ZSwweDY1LDB4ZTYgfSwgeyAweDljLDB4NjMsMHg2ZSwweGU4IH0sCisgICAgeyAweDg3LDB4NzQsMHg3MywweGZhIH0sIHsgMHg4ZSwweDc5LDB4NzgsMHhmNCB9LAorICAgIHsgMHhiMSwweDVhLDB4NDksMHhkZSB9LCB7IDB4YjgsMHg1NywweDQyLDB4ZDAgfSwKKyAgICB7IDB4YTMsMHg0MCwweDVmLDB4YzIgfSwgeyAweGFhLDB4NGQsMHg1NCwweGNjIH0sCisgICAgeyAweGVjLDB4ZGEsMHhmNywweDQxIH0sIHsgMHhlNSwweGQ3LDB4ZmMsMHg0ZiB9LAorICAgIHsgMHhmZSwweGMwLDB4ZTEsMHg1ZCB9LCB7IDB4ZjcsMHhjZCwweGVhLDB4NTMgfSwKKyAgICB7IDB4YzgsMHhlZSwweGRiLDB4NzkgfSwgeyAweGMxLDB4ZTMsMHhkMCwweDc3IH0sCisgICAgeyAweGRhLDB4ZjQsMHhjZCwweDY1IH0sIHsgMHhkMywweGY5LDB4YzYsMHg2YiB9LAorICAgIHsgMHhhNCwweGIyLDB4YWYsMHgzMSB9LCB7IDB4YWQsMHhiZiwweGE0LDB4M2YgfSwKKyAgICB7IDB4YjYsMHhhOCwweGI5LDB4MmQgfSwgeyAweGJmLDB4YTUsMHhiMiwweDIzIH0sCisgICAgeyAweDgwLDB4ODYsMHg4MywweDA5IH0sIHsgMHg4OSwweDhiLDB4ODgsMHgwNyB9LAorICAgIHsgMHg5MiwweDljLDB4OTUsMHgxNSB9LCB7IDB4OWIsMHg5MSwweDllLDB4MWIgfSwKKyAgICB7IDB4N2MsMHgwYSwweDQ3LDB4YTEgfSwgeyAweDc1LDB4MDcsMHg0YywweGFmIH0sCisgICAgeyAweDZlLDB4MTAsMHg1MSwweGJkIH0sIHsgMHg2NywweDFkLDB4NWEsMHhiMyB9LAorICAgIHsgMHg1OCwweDNlLDB4NmIsMHg5OSB9LCB7IDB4NTEsMHgzMywweDYwLDB4OTcgfSwKKyAgICB7IDB4NGEsMHgyNCwweDdkLDB4ODUgfSwgeyAweDQzLDB4MjksMHg3NiwweDhiIH0sCisgICAgeyAweDM0LDB4NjIsMHgxZiwweGQxIH0sIHsgMHgzZCwweDZmLDB4MTQsMHhkZiB9LAorICAgIHsgMHgyNiwweDc4LDB4MDksMHhjZCB9LCB7IDB4MmYsMHg3NSwweDAyLDB4YzMgfSwKKyAgICB7IDB4MTAsMHg1NiwweDMzLDB4ZTkgfSwgeyAweDE5LDB4NWIsMHgzOCwweGU3IH0sCisgICAgeyAweDAyLDB4NGMsMHgyNSwweGY1IH0sIHsgMHgwYiwweDQxLDB4MmUsMHhmYiB9LAorICAgIHsgMHhkNywweDYxLDB4OGMsMHg5YSB9LCB7IDB4ZGUsMHg2YywweDg3LDB4OTQgfSwKKyAgICB7IDB4YzUsMHg3YiwweDlhLDB4ODYgfSwgeyAweGNjLDB4NzYsMHg5MSwweDg4IH0sCisgICAgeyAweGYzLDB4NTUsMHhhMCwweGEyIH0sIHsgMHhmYSwweDU4LDB4YWIsMHhhYyB9LAorICAgIHsgMHhlMSwweDRmLDB4YjYsMHhiZSB9LCB7IDB4ZTgsMHg0MiwweGJkLDB4YjAgfSwKKyAgICB7IDB4OWYsMHgwOSwweGQ0LDB4ZWEgfSwgeyAweDk2LDB4MDQsMHhkZiwweGU0IH0sCisgICAgeyAweDhkLDB4MTMsMHhjMiwweGY2IH0sIHsgMHg4NCwweDFlLDB4YzksMHhmOCB9LAorICAgIHsgMHhiYiwweDNkLDB4ZjgsMHhkMiB9LCB7IDB4YjIsMHgzMCwweGYzLDB4ZGMgfSwKKyAgICB7IDB4YTksMHgyNywweGVlLDB4Y2UgfSwgeyAweGEwLDB4MmEsMHhlNSwweGMwIH0sCisgICAgeyAweDQ3LDB4YjEsMHgzYywweDdhIH0sIHsgMHg0ZSwweGJjLDB4MzcsMHg3NCB9LAorICAgIHsgMHg1NSwweGFiLDB4MmEsMHg2NiB9LCB7IDB4NWMsMHhhNiwweDIxLDB4NjggfSwKKyAgICB7IDB4NjMsMHg4NSwweDEwLDB4NDIgfSwgeyAweDZhLDB4ODgsMHgxYiwweDRjIH0sCisgICAgeyAweDcxLDB4OWYsMHgwNiwweDVlIH0sIHsgMHg3OCwweDkyLDB4MGQsMHg1MCB9LAorICAgIHsgMHgwZiwweGQ5LDB4NjQsMHgwYSB9LCB7IDB4MDYsMHhkNCwweDZmLDB4MDQgfSwKKyAgICB7IDB4MWQsMHhjMywweDcyLDB4MTYgfSwgeyAweDE0LDB4Y2UsMHg3OSwweDE4IH0sCisgICAgeyAweDJiLDB4ZWQsMHg0OCwweDMyIH0sIHsgMHgyMiwweGUwLDB4NDMsMHgzYyB9LAorICAgIHsgMHgzOSwweGY3LDB4NWUsMHgyZSB9LCB7IDB4MzAsMHhmYSwweDU1LDB4MjAgfSwKKyAgICB7IDB4OWEsMHhiNywweDAxLDB4ZWMgfSwgeyAweDkzLDB4YmEsMHgwYSwweGUyIH0sCisgICAgeyAweDg4LDB4YWQsMHgxNywweGYwIH0sIHsgMHg4MSwweGEwLDB4MWMsMHhmZSB9LAorICAgIHsgMHhiZSwweDgzLDB4MmQsMHhkNCB9LCB7IDB4YjcsMHg4ZSwweDI2LDB4ZGEgfSwKKyAgICB7IDB4YWMsMHg5OSwweDNiLDB4YzggfSwgeyAweGE1LDB4OTQsMHgzMCwweGM2IH0sCisgICAgeyAweGQyLDB4ZGYsMHg1OSwweDljIH0sIHsgMHhkYiwweGQyLDB4NTIsMHg5MiB9LAorICAgIHsgMHhjMCwweGM1LDB4NGYsMHg4MCB9LCB7IDB4YzksMHhjOCwweDQ0LDB4OGUgfSwKKyAgICB7IDB4ZjYsMHhlYiwweDc1LDB4YTQgfSwgeyAweGZmLDB4ZTYsMHg3ZSwweGFhIH0sCisgICAgeyAweGU0LDB4ZjEsMHg2MywweGI4IH0sIHsgMHhlZCwweGZjLDB4NjgsMHhiNiB9LAorICAgIHsgMHgwYSwweDY3LDB4YjEsMHgwYyB9LCB7IDB4MDMsMHg2YSwweGJhLDB4MDIgfSwKKyAgICB7IDB4MTgsMHg3ZCwweGE3LDB4MTAgfSwgeyAweDExLDB4NzAsMHhhYywweDFlIH0sCisgICAgeyAweDJlLDB4NTMsMHg5ZCwweDM0IH0sIHsgMHgyNywweDVlLDB4OTYsMHgzYSB9LAorICAgIHsgMHgzYywweDQ5LDB4OGIsMHgyOCB9LCB7IDB4MzUsMHg0NCwweDgwLDB4MjYgfSwKKyAgICB7IDB4NDIsMHgwZiwweGU5LDB4N2MgfSwgeyAweDRiLDB4MDIsMHhlMiwweDcyIH0sCisgICAgeyAweDUwLDB4MTUsMHhmZiwweDYwIH0sIHsgMHg1OSwweDE4LDB4ZjQsMHg2ZSB9LAorICAgIHsgMHg2NiwweDNiLDB4YzUsMHg0NCB9LCB7IDB4NmYsMHgzNiwweGNlLDB4NGEgfSwKKyAgICB7IDB4NzQsMHgyMSwweGQzLDB4NTggfSwgeyAweDdkLDB4MmMsMHhkOCwweDU2IH0sCisgICAgeyAweGExLDB4MGMsMHg3YSwweDM3IH0sIHsgMHhhOCwweDAxLDB4NzEsMHgzOSB9LAorICAgIHsgMHhiMywweDE2LDB4NmMsMHgyYiB9LCB7IDB4YmEsMHgxYiwweDY3LDB4MjUgfSwKKyAgICB7IDB4ODUsMHgzOCwweDU2LDB4MGYgfSwgeyAweDhjLDB4MzUsMHg1ZCwweDAxIH0sCisgICAgeyAweDk3LDB4MjIsMHg0MCwweDEzIH0sIHsgMHg5ZSwweDJmLDB4NGIsMHgxZCB9LAorICAgIHsgMHhlOSwweDY0LDB4MjIsMHg0NyB9LCB7IDB4ZTAsMHg2OSwweDI5LDB4NDkgfSwKKyAgICB7IDB4ZmIsMHg3ZSwweDM0LDB4NWIgfSwgeyAweGYyLDB4NzMsMHgzZiwweDU1IH0sCisgICAgeyAweGNkLDB4NTAsMHgwZSwweDdmIH0sIHsgMHhjNCwweDVkLDB4MDUsMHg3MSB9LAorICAgIHsgMHhkZiwweDRhLDB4MTgsMHg2MyB9LCB7IDB4ZDYsMHg0NywweDEzLDB4NmQgfSwKKyAgICB7IDB4MzEsMHhkYywweGNhLDB4ZDcgfSwgeyAweDM4LDB4ZDEsMHhjMSwweGQ5IH0sCisgICAgeyAweDIzLDB4YzYsMHhkYywweGNiIH0sIHsgMHgyYSwweGNiLDB4ZDcsMHhjNSB9LAorICAgIHsgMHgxNSwweGU4LDB4ZTYsMHhlZiB9LCB7IDB4MWMsMHhlNSwweGVkLDB4ZTEgfSwKKyAgICB7IDB4MDcsMHhmMiwweGYwLDB4ZjMgfSwgeyAweDBlLDB4ZmYsMHhmYiwweGZkIH0sCisgICAgeyAweDc5LDB4YjQsMHg5MiwweGE3IH0sIHsgMHg3MCwweGI5LDB4OTksMHhhOSB9LAorICAgIHsgMHg2YiwweGFlLDB4ODQsMHhiYiB9LCB7IDB4NjIsMHhhMywweDhmLDB4YjUgfSwKKyAgICB7IDB4NWQsMHg4MCwweGJlLDB4OWYgfSwgeyAweDU0LDB4OGQsMHhiNSwweDkxIH0sCisgICAgeyAweDRmLDB4OWEsMHhhOCwweDgzIH0sIHsgMHg0NiwweDk3LDB4YTMsMHg4ZCB9CisgIH07CisKK3N0YXRpYyBjb25zdCB1MzIgcmNvblszMF0gPQorICB7CisgICAgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywKKyAgICAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LAorICAgIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9yaWpuZGFlbC5jIGIvY2lwaGVyL3Jpam5kYWVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxOWYwYQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9yaWpuZGFlbC5jCkBAIC0wLDAgKzEsMjg2MSBAQAorLyogUmlqbmRhZWwgKEFFUykgZm9yIEdudVBHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDcsCisgKiAgICAgICAgICAgICAgIDIwMDgsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBjb2RlIGhlcmUgaXMgYmFzZWQgb24gdGhlIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tCisgKiBodHRwOi8vd3d3LmVzYXQua3VsZXV2ZW4uYWMuYmUvfnJpam1lbi9yaWpuZGFlbC8gb24gT2N0IDIsIDIwMDAsCisgKiB3aGljaCBjYXJyaWVzIHRoaXMgbm90aWNlOgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJpam5kYWVsLWFsZy1mc3QuYyAgIHYyLjMgICBBcHJpbCAnMjAwMAorICoKKyAqIE9wdGltaXNlZCBBTlNJIEMgY29kZQorICoKKyAqIGF1dGhvcnM6IHYxLjA6IEFudG9vbiBCb3NzZWxhZXJzCisgKiAgICAgICAgICB2Mi4wOiBWaW5jZW50IFJpam1lbgorICogICAgICAgICAgdjIuMzogUGF1bG8gQmFycmV0bworICoKKyAqIFRoaXMgY29kZSBpcyBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBTUDgwMC0zOGEgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIGF0OgorICogICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4YS9zcDgwMC0zOGEucGRmCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3IgbWVtY21wKCkgKi8KKworI2luY2x1ZGUgInR5cGVzLmgiICAvKiBmb3IgYnl0ZSBhbmQgdTMyIHR5cGVkZWZzICovCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci1zZWxmdGVzdC5oIgorCisjZGVmaW5lIE1BWEtDCQkJKDI1Ni8zMikKKyNkZWZpbmUgTUFYUk9VTkRTCQkxNAorI2RlZmluZSBCTE9DS1NJWkUgICAgICAgICAgICAgICAoMTI4LzgpCisKKworLyogSGVscGVyIG1hY3JvIHRvIGZvcmNlIGFsaWdubWVudCB0byAxNiBieXRlcy4gICovCisjaWZkZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKyMgZGVmaW5lIEFUVFJfQUxJR05FRF8xNiAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpCisjZWxzZQorIyBkZWZpbmUgQVRUUl9BTElHTkVEXzE2CisjZW5kaWYKKworCisvKiBVU0VfQU1ENjRfQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBTUQ2NCBhc3NlbWJseSBjb2RlLiAqLworI3VuZGVmIFVTRV9BTUQ2NF9BU00KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykKKyMgZGVmaW5lIFVTRV9BTUQ2NF9BU00gMQorI2VuZGlmCisKKy8qIFVTRV9BUk1fQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBUk0gYXNzZW1ibHkgY29kZS4gKi8KKyN1bmRlZiBVU0VfQVJNX0FTTQorI2lmIGRlZmluZWQoX19BUk1FTF9fKQorIyBpZmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUworIyAgZGVmaW5lIFVTRV9BUk1fQVNNIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBVU0VfUEFETE9DSyBpbmRpY2F0ZXMgd2hldGhlciB0byBjb21waWxlIHRoZSBwYWRsb2NrIHNwZWNpZmljCisgICBjb2RlLiAgKi8KKyN1bmRlZiBVU0VfUEFETE9DSworI2lmZGVmIEVOQUJMRV9QQURMT0NLX1NVUFBPUlQKKyMgaWZkZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKyMgIGlmIChkZWZpbmVkIChfX2kzODZfXykgJiYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gNCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgIGRlZmluZSBVU0VfUEFETE9DSyAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qRU5BQkxFX1BBRExPQ0tfU1VQUE9SVCovCisKKy8qIFVTRV9BRVNOSSBpbmlkaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEludGVsIEFFUy1OSSBjb2RlLiAgV2UKKyAgIG5lZWQgdGhlIHZlY3Rvci1zaXplIGF0dHJpYnV0ZSB3aGljaCBzZWVtcyB0byBiZSBhdmFpbGFibGUgc2luY2UKKyAgIGdjYyAzLiAgSG93ZXZlciwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSB3ZSByZXF1aXJlIGF0IGxlYXN0IGdjYyA0LiAgKi8KKyN1bmRlZiBVU0VfQUVTTkkKKyNpZmRlZiBFTkFCTEVfQUVTTklfU1VQUE9SVAorIyBpZiAoKGRlZmluZWQgKF9faTM4Nl9fKSAmJiBTSVpFT0ZfVU5TSUdORURfTE9ORyA9PSA0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorIyAgaWYgX19HTlVDX18gPj0gNAorIyAgIGRlZmluZSBVU0VfQUVTTkkgMQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBFTkFCTEVfQUVTTklfU1VQUE9SVCAqLworCisjaWZkZWYgVVNFX0FFU05JCisgIHR5cGVkZWYgc3RydWN0IHUxMjhfcyB7IHUzMiBhLCBiLCBjLCBkOyB9IHUxMjhfdDsKKyNlbmRpZiAvKlVTRV9BRVNOSSovCisKKy8qIERlZmluZSBhbiB1MzIgdmFyaWFudCBmb3IgdGhlIHNha2Ugb2YgZ2NjIDQuNCdzIHN0cmljdCBhbGlhc2luZy4gICovCisjaWYgX19HTlVDX18gPiA0IHx8ICggX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0ICkKK3R5cGVkZWYgdTMyICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYXlfYWxpYXNfXykpIHUzMl9hX3Q7CisjZWxzZQordHlwZWRlZiB1MzIgICAgICAgICAgIHUzMl9hX3Q7CisjZW5kaWYKKworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorLyogQU1ENjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIG9mIEFFUyAqLworZXh0ZXJuIHZvaWQgX2djcnlfYWVzX2FtZDY0X2VuY3J5cHRfYmxvY2soY29uc3Qgdm9pZCAqa2V5c2NoZWRfZW5jLAorCQkJCQkgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkJICBpbnQgcm91bmRzKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfYWVzX2FtZDY0X2RlY3J5cHRfYmxvY2soY29uc3Qgdm9pZCAqa2V5c2NoZWRfZGVjLAorCQkJCQkgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkJICBpbnQgcm91bmRzKTsKKyNlbmRpZiAvKlVTRV9BTUQ2NF9BU00qLworCisjaWZkZWYgVVNFX0FSTV9BU00KKy8qIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMgb2YgQUVTICovCitleHRlcm4gdm9pZCBfZ2NyeV9hZXNfYXJtX2VuY3J5cHRfYmxvY2soY29uc3Qgdm9pZCAqa2V5c2NoZWRfZW5jLAorCQkJCQkgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkJICBpbnQgcm91bmRzKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfYWVzX2FybV9kZWNyeXB0X2Jsb2NrKGNvbnN0IHZvaWQgKmtleXNjaGVkX2RlYywKKwkJCQkJICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkJCSAgaW50IHJvdW5kcyk7CisjZW5kaWYgLypVU0VfQVJNX0FTTSovCisKKworDAorLyogT3VyIGNvbnRleHQgb2JqZWN0LiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBmaXJzdCBmaWVsZHMgYXJlIHRoZSBrZXlzY2hlZHVsZSBhcnJheXMuICBUaGlzIGlzIHNvIHRoYXQKKyAgICAgdGhleSBhcmUgYWxpZ25lZCBvbiBhIDE2IGJ5dGUgYm91bmRhcnkgaWYgdXNpbmcgZ2NjLiAgVGhpcworICAgICBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIHRoZSBBRVMtTkkgY29kZSBhbmQgYSBnb29kIGlkZWEgaW4gYW55CisgICAgIGNhc2UuICBUaGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgZHVlIHRvIHRoZSB3YXkgY2lwaGVyLmMKKyAgICAgYWxsb2NhdGVzIHRoZSBzcGFjZSBmb3IgdGhlIGNvbnRleHQuICBUaGUgUFJPUEVSTFlfQUxJR05FRF9UWVBFCisgICAgIGhhY2sgaXMgdXNlZCB0byBmb3JjZSBhIG1pbmltYWwgYWxpZ25tZW50IGlmIG5vdCB1c2luZyBnY2Mgb2YgaWYKKyAgICAgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcyBoaWdoZXIgdGhhdCAxNiBieXRlcy4gICovCisgIHVuaW9uCisgIHsKKyAgICBQUk9QRVJMWV9BTElHTkVEX1RZUEUgZHVtbXk7CisgICAgYnl0ZSBrZXlzY2hlZHVsZVtNQVhST1VORFMrMV1bNF1bNF07CisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgICAvKiBUaGUga2V5IGFzIHBhc3NlZCB0byB0aGUgcGFkbG9jayBlbmdpbmUuICBJdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICB0aGUgcGFkbG9jayBlbmdpbmUgaXMgdXNlZCAoVVNFX1BBRExPQ0ssIGJlbG93KS4gICovCisgICAgdW5zaWduZWQgY2hhciBwYWRsb2NrX2tleVsxNl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworICB9IHUxOworICB1bmlvbgorICB7CisgICAgUFJPUEVSTFlfQUxJR05FRF9UWVBFIGR1bW15OworICAgIGJ5dGUga2V5c2NoZWR1bGVbTUFYUk9VTkRTKzFdWzRdWzRdOworICB9IHUyOworICBpbnQgcm91bmRzOyAgICAgICAgICAgICAgICAvKiBLZXktbGVuZ3RoLWRlcGVuZGVudCBudW1iZXIgb2Ygcm91bmRzLiAgKi8KKyAgdW5zaWduZWQgaW50IGRlY3J5cHRpb25fcHJlcGFyZWQ6MTsgLyogVGhlIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlIGlzIGF2YWlsYWJsZS4gICovCisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgdW5zaWduZWQgaW50IHVzZV9wYWRsb2NrOjE7ICAgICAgICAgLyogUGFkbG9jayBzaGFsbCBiZSB1c2VkLiAgKi8KKyNlbmRpZiAvKlVTRV9QQURMT0NLKi8KKyNpZmRlZiBVU0VfQUVTTkkKKyAgdW5zaWduZWQgaW50IHVzZV9hZXNuaToxOyAgICAgICAgICAgLyogQUVTLU5JIHNoYWxsIGJlIHVzZWQuICAqLworI2VuZGlmIC8qVVNFX0FFU05JKi8KK30gUklKTkRBRUxfY29udGV4dCBBVFRSX0FMSUdORURfMTY7CisKKy8qIE1hY3JvcyBkZWZpbmluZyBhbGlhcyBmb3IgdGhlIGtleXNjaGVkdWxlcy4gICovCisjZGVmaW5lIGtleXNjaGVuYyAgdTEua2V5c2NoZWR1bGUKKyNkZWZpbmUga2V5c2NoZGVjICB1Mi5rZXlzY2hlZHVsZQorI2RlZmluZSBwYWRsb2Nra2V5IHUxLnBhZGxvY2tfa2V5CisKKy8qIFR3byBtYWNyb3MgdG8gYmUgY2FsbGVkIHByaW9yIGFuZCBhZnRlciB0aGUgdXNlIG9mIEFFU05JCisgICBpbnN0cnVjdGlvbnMuICBUaGVyZSBzaG91bGQgYmUgbm8gZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbHMgYmV0d2VlbgorICAgdGhlIHVzZSBvZiB0aGVzZSBtYWNyb3MuICBUaGVyZSBwdXJwb3NlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgU1NFIHJlZ3NpdGVycyBhcmUgY2xlYXJlZCBhbmQgd29uJ3QgcmV2ZWFsIGFueSBpbmZvcm1hdGlvbiBhYm91dAorICAgdGhlIGtleSBvciB0aGUgZGF0YS4gICovCisjaWZkZWYgVVNFX0FFU05JCisjIGRlZmluZSBhZXNuaV9wcmVwYXJlKCkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgYWVzbmlfY2xlYW51cCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7IGFzbSB2b2xhdGlsZSAoInB4b3IgJSV4bW0wLCAlJXhtbTBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTFcbiIgOjogKTsgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorIyBkZWZpbmUgYWVzbmlfY2xlYW51cF8yXzYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7IGFzbSB2b2xhdGlsZSAoInB4b3IgJSV4bW0yLCAlJXhtbTJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0zLCAlJXhtbTNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW00LCAlJXhtbTRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgInB4b3IgJSV4bW02LCAlJXhtbTZcbiI6OiApOyAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIGFlc25pX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBhZXNuaV9jbGVhbnVwKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKworLyogQWxsIHRoZSBudW1iZXJzLiAgKi8KKyNpbmNsdWRlICJyaWpuZGFlbC10YWJsZXMuaCIKKworCisMCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAgKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKFVTRV9BRVNOSSkKKy8qIFdlIGRvbid0IHdhbnQgdG8gaW5saW5lIHRoZXNlIGZ1bmN0aW9ucyBvbiBpMzg2IHRvIGhlbHAgZ2NjIGFsbG9jYXRlIGVub3VnaAorICAgcmVnaXN0ZXJzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2Flc25pX2N0ciAoY29uc3QgUklKTkRBRUxfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyICpjdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEpCisgIF9fYXR0cmlidXRlX18gKChfX25vaW5saW5lX18pKTsKK3N0YXRpYyB2b2lkIGRvX2Flc25pX2N0cl80IChjb25zdCBSSUpOREFFTF9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpiLCBjb25zdCB1bnNpZ25lZCBjaGFyICphKQorICBfX2F0dHJpYnV0ZV9fICgoX19ub2lubGluZV9fKSk7CisjZW5kaWYgLypVU0VfQUVTTkkqLworCitzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3Qodm9pZCk7CisKKworDAorI2lmZGVmIFVTRV9BRVNOSQorc3RhdGljIHZvaWQKK2Flc25pX2RvX3NldGtleSAoUklKTkRBRUxfY29udGV4dCAqY3R4LCBjb25zdCBieXRlICprZXkpCit7CisgIGFlc25pX3ByZXBhcmUoKTsKKworICBpZiAoY3R4LT5yb3VuZHMgPCAxMikKKyAgICB7CisgICAgICAvKiAxMjgtYml0IGtleSAqLworI2RlZmluZSBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKGltbTgpIFwKKwkiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhkMSwgIiAjaW1tOCAiIFxuXHQiCisjZGVmaW5lIEFFU0tFWV9FWFBBTkQxMjggXAorCSJwc2h1ZmQgJDB4ZmYsICUleG1tMiwgJSV4bW0yXG5cdCIgXAorCSJtb3ZkcWEgJSV4bW0xLCAlJXhtbTNcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW0zXG5cdCIgXAorCSJweG9yICAgJSV4bW0zLCAlJXhtbTFcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW0zXG5cdCIgXAorCSJweG9yICAgJSV4bW0zLCAlJXhtbTFcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW0zXG5cdCIgXAorCSJweG9yICAgJSV4bW0zLCAlJXhtbTJcblx0IiBcCisJInB4b3IgICAlJXhtbTIsICUleG1tMVxuXHQiCisKKyAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdmRxdSAoJVtrZXldKSwgJSV4bW0xXG5cdCIgICAgIC8qIHhtbTEgOj0ga2V5ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICglW2tzY2hdKVxuXHQiICAgICAvKiBrc2NoWzBdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0xX3htbTIoMHgwMSkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDEyOAorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHgxMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMV0gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMigweDAyKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTI4CisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweDIwKCVba3NjaF0pXG5cdCIgLyoga3NjaFsyXSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MDQpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxMjgKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4MzAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzNdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0xX3htbTIoMHgwOCkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDEyOAorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHg0MCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbNF0gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMigweDEwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTI4CisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweDUwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs1XSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MjApCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxMjgKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4NjAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzZdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0xX3htbTIoMHg0MCkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDEyOAorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHg3MCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbN10gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMigweDgwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTI4CisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweDgwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs4XSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MWIpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxMjgKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4OTAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzldIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0xX3htbTIoMHgzNikKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDEyOAorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHhhMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMTBdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgOiBba2V5XSAiciIgKGtleSksIFtrc2NoXSAiciIgKGN0eC0+a2V5c2NoZW5jKQorICAgICAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiICk7CisjdW5kZWYgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMgorI3VuZGVmIEFFU0tFWV9FWFBBTkQxMjgKKyAgICB9CisgIGVsc2UgaWYgKGN0eC0+cm91bmRzID09IDEyKQorICAgIHsKKyAgICAgIC8qIDE5Mi1iaXQga2V5ICovCisjZGVmaW5lIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIoaW1tOCkgXAorCSIuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGQzLCAiICNpbW04ICIgXG5cdCIKKyNkZWZpbmUgQUVTS0VZX0VYUEFORDE5MiBcCisJInBzaHVmZCAkMHg1NSwgJSV4bW0yLCAlJXhtbTJcblx0IiBcCisJIm1vdmRxdSAlJXhtbTEsICUleG1tNFxuXHQiIFwKKwkicHNsbGRxICQ0LCAlJXhtbTRcblx0IiBcCisJInB4b3IgJSV4bW00LCAlJXhtbTFcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW00XG5cdCIgXAorCSJweG9yICUleG1tNCwgJSV4bW0xXG5cdCIgXAorCSJwc2xsZHEgJDQsICUleG1tNFxuXHQiIFwKKwkicHhvciAlJXhtbTQsICUleG1tMVxuXHQiIFwKKwkicHhvciAlJXhtbTIsICUleG1tMVxuXHQiIFwKKwkicHNodWZkICQweGZmLCAlJXhtbTEsICUleG1tMlxuXHQiIFwKKwkibW92ZHF1ICUleG1tMywgJSV4bW00XG5cdCIgXAorCSJwc2xsZHEgJDQsICUleG1tNFxuXHQiIFwKKwkicHhvciAlJXhtbTQsICUleG1tM1xuXHQiIFwKKwkicHhvciAlJXhtbTIsICUleG1tM1xuXHQiCisKKyAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdmRxdSAoJVtrZXldKSwgJSV4bW0xXG5cdCIgICAgIC8qIHhtbTEgOj0ga2V5WzAuLjE1XSAgICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZxIDE2KCVba2V5XSksICUleG1tM1xuXHQiICAgICAvKiB4bW0zIDo9IGtleVsxNi4uMjNdICAqLworICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgKCVba3NjaF0pXG5cdCIgICAgLyoga3NjaFswXSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW01XG5cdCIKKworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yKDB4MDEpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxOTIKKyAgICAgICAgICAgICAgICAgICAgInNodWZwZCAkMCwgJSV4bW0xLCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNSwgMHgxMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMV0gOj0geG1tNSAgKi8KKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgICAgICJzaHVmcGQgJDEsICUleG1tMywgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTYsIDB4MjAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzJdIDo9IHhtbTYgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIoMHgwMikKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDE5MgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHgzMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbM10gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNVxuXHQiCisKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDA0KQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTkyCisgICAgICAgICAgICAgICAgICAgICJzaHVmcGQgJDAsICUleG1tMSwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTUsIDB4NDAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzRdIDo9IHhtbTUgICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICAgICAic2h1ZnBkICQxLCAlJXhtbTMsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW02LCAweDUwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs1XSA6PSB4bW02ICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yKDB4MDgpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxOTIKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4NjAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzZdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTVcblx0IgorCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIoMHgxMCkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDE5MgorICAgICAgICAgICAgICAgICAgICAic2h1ZnBkICQwLCAlJXhtbTEsICUleG1tNVxuXHQiCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW01LCAweDcwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs3XSA6PSB4bW01ICAqLworICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW02XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgInNodWZwZCAkMSwgJSV4bW0zLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNiwgMHg4MCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbOF0gOj0geG1tNiAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDIwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTkyCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweDkwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs5XSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW01XG5cdCIKKworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yKDB4NDApCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQxOTIKKyAgICAgICAgICAgICAgICAgICAgInNodWZwZCAkMCwgJSV4bW0xLCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNSwgMHhhMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMTBdIDo9IHhtbTUgICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTZcblx0IgorICAgICAgICAgICAgICAgICAgICAic2h1ZnBkICQxLCAlJXhtbTMsICUleG1tNlxuXHQiCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW02LCAweGIwKCVba3NjaF0pXG5cdCIgLyoga3NjaFsxMV0gOj0geG1tNiAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDgwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMTkyCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweGMwKCVba3NjaF0pXG5cdCIgLyoga3NjaFsxMl0gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICA6IFtrZXldICJyIiAoa2V5KSwgW2tzY2hdICJyIiAoY3R4LT5rZXlzY2hlbmMpCisgICAgICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKKyN1bmRlZiBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yCisjdW5kZWYgQUVTS0VZX0VYUEFORDE5MgorICAgIH0KKyAgZWxzZSBpZiAoY3R4LT5yb3VuZHMgPiAxMikKKyAgICB7CisgICAgICAvKiAyNTYtYml0IGtleSAqLworI2RlZmluZSBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKGltbTgpIFwKKwkiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhkMSwgIiAjaW1tOCAiIFxuXHQiCisjZGVmaW5lIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIoaW1tOCkgXAorCSIuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGQzLCAiICNpbW04ICIgXG5cdCIKKyNkZWZpbmUgQUVTS0VZX0VYUEFORDI1Nl9BIFwKKwkicHNodWZkICQweGZmLCAlJXhtbTIsICUleG1tMlxuXHQiIFwKKwkibW92ZHFhICUleG1tMSwgJSV4bW00XG5cdCIgXAorCSJwc2xsZHEgJDQsICUleG1tNFxuXHQiIFwKKwkicHhvciAlJXhtbTQsICUleG1tMVxuXHQiIFwKKwkicHNsbGRxICQ0LCAlJXhtbTRcblx0IiBcCisJInB4b3IgJSV4bW00LCAlJXhtbTFcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW00XG5cdCIgXAorCSJweG9yICUleG1tNCwgJSV4bW0xXG5cdCIgXAorCSJweG9yICUleG1tMiwgJSV4bW0xXG5cdCIKKyNkZWZpbmUgQUVTS0VZX0VYUEFORDI1Nl9CIFwKKwkicHNodWZkICQweGFhLCAlJXhtbTIsICUleG1tMlxuXHQiIFwKKwkibW92ZHFhICUleG1tMywgJSV4bW00XG5cdCIgXAorCSJwc2xsZHEgJDQsICUleG1tNFxuXHQiIFwKKwkicHhvciAlJXhtbTQsICUleG1tM1xuXHQiIFwKKwkicHNsbGRxICQ0LCAlJXhtbTRcblx0IiBcCisJInB4b3IgJSV4bW00LCAlJXhtbTNcblx0IiBcCisJInBzbGxkcSAkNCwgJSV4bW00XG5cdCIgXAorCSJweG9yICUleG1tNCwgJSV4bW0zXG5cdCIgXAorCSJweG9yICUleG1tMiwgJSV4bW0zXG5cdCIKKworICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICglW2tleV0pLCAlJXhtbTFcblx0IiAgICAgLyogeG1tMSA6PSBrZXlbMC4uMTVdICAgKi8KKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxdSAxNiglW2tleV0pLCAlJXhtbTNcblx0IiAgIC8qIHhtbTMgOj0ga2V5WzE2Li4zMV0gICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAoJVtrc2NoXSlcblx0IiAgICAgLyoga3NjaFswXSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgMHgxMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMV0gOj0geG1tMyAgKi8KKworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yKDB4MDEpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQyNTZfQQorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHgyMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMl0gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMigweDAwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0IKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsIDB4MzAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzNdIDo9IHhtbTMgICovCisKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDAyKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0EKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4NDAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzRdIDo9IHhtbTEgICovCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0xX3htbTIoMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDI1Nl9CCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAweDUwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs1XSA6PSB4bW0zICAqLworCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIoMHgwNCkKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZX0VYUEFORDI1Nl9BCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAweDYwKCVba3NjaF0pXG5cdCIgLyoga3NjaFs2XSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MDApCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQyNTZfQgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgMHg3MCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbN10gOj0geG1tMyAgKi8KKworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tM194bW0yKDB4MDgpCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQyNTZfQQorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgMHg4MCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbOF0gOj0geG1tMSAgKi8KKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMigweDAwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0IKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTMsIDB4OTAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzldIDo9IHhtbTMgICovCisKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDEwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0EKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4YTAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzEwXSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MDApCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQyNTZfQgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgMHhiMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMTFdIDo9IHhtbTMgICovCisKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDIwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0EKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4YzAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzEyXSA6PSB4bW0xICAqLworICAgICAgICAgICAgICAgICAgICBBRVNLRVlHRU5BU1NJU1RfeG1tMV94bW0yKDB4MDApCisgICAgICAgICAgICAgICAgICAgIEFFU0tFWV9FWFBBTkQyNTZfQgorICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgMHhkMCglW2tzY2hdKVxuXHQiIC8qIGtzY2hbMTNdIDo9IHhtbTMgICovCisKKyAgICAgICAgICAgICAgICAgICAgQUVTS0VZR0VOQVNTSVNUX3htbTNfeG1tMigweDQwKQorICAgICAgICAgICAgICAgICAgICBBRVNLRVlfRVhQQU5EMjU2X0EKKyAgICAgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTEsIDB4ZTAoJVtrc2NoXSlcblx0IiAvKiBrc2NoWzE0XSA6PSB4bW0xICAqLworCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgOiBba2V5XSAiciIgKGtleSksIFtrc2NoXSAiciIgKGN0eC0+a2V5c2NoZW5jKQorICAgICAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiICk7CisjdW5kZWYgQUVTS0VZR0VOQVNTSVNUX3htbTFfeG1tMgorI3VuZGVmIEFFU0tFWUdFTkFTU0lTVF94bW0zX3htbTIKKyN1bmRlZiBBRVNLRVlfRVhQQU5EMjU2X0EKKyN1bmRlZiBBRVNLRVlfRVhQQU5EMjU2X0IKKyAgICB9CisKKyAgYWVzbmlfY2xlYW51cCgpOworICBhZXNuaV9jbGVhbnVwXzJfNigpOworfQorI2VuZGlmIC8qVVNFX0FFU05JKi8KKworCisMCisvKiBQZXJmb3JtIHRoZSBrZXkgc2V0dXAuICAqLworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZG9fc2V0a2V5IChSSUpOREFFTF9jb250ZXh0ICpjdHgsIGNvbnN0IGJ5dGUgKmtleSwgY29uc3QgdW5zaWduZWQga2V5bGVuKQoreworICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0X2ZhaWxlZD0wOworICBpbnQgcm91bmRzOworICBpbnQgaSxqLCByLCB0LCByY29ucG9pbnRlciA9IDA7CisgIGludCBLQzsKKyNpZiBkZWZpbmVkKFVTRV9BRVNOSSkgfHwgZGVmaW5lZChVU0VfUEFETE9DSykKKyAgdW5zaWduZWQgaW50IGh3ZmVhdHVyZXM7CisjZW5kaWYKKworICAvKiBUaGUgb24tdGhlLWZseSBzZWxmIHRlc3RzIGFyZSBvbmx5IHJ1biBpbiBub24tZmlwcyBtb2RlLiBJbiBmaXBzCisgICAgIG1vZGUgZXhwbGljaXQgc2VsZi10ZXN0cyBhcmUgcmVxdWlyZWQuICBBY3R1YWxseSB0aGUgb24tdGhlLWZseQorICAgICBzZWxmLXRlc3RzIGFyZSBub3QgZnVsbHkgdGhyZWFkLXNhZmUgYW5kIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IGEKKyAgICAgZmFpbGVkIHNlbGYtdGVzdCB3b24ndCBnZXQgbm90aWNlZCBpbiBhbm90aGVyIHRocmVhZC4KKworICAgICBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBoYXZlIGEgY2VudHJhbCByZWdpc3RyeSBvZiBzdWNjZWVkZWQKKyAgICAgc2VsZi10ZXN0cy4gKi8KKyAgaWYgKCFmaXBzX21vZGUgKCkgJiYgIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0ICgpOworICAgICAgaWYgKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICAgICAgbG9nX2Vycm9yICgiJXNcbiIsIHNlbGZ0ZXN0X2ZhaWxlZCApOworICAgIH0KKyAgaWYgKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7CisKKyNpZiBkZWZpbmVkKFVTRV9BRVNOSSkgfHwgZGVmaW5lZChVU0VfUEFETE9DSykKKyAgaHdmZWF0dXJlcyA9IF9nY3J5X2dldF9od19mZWF0dXJlcyAoKTsKKyNlbmRpZgorCisgIGN0eC0+ZGVjcnlwdGlvbl9wcmVwYXJlZCA9IDA7CisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgY3R4LT51c2VfcGFkbG9jayA9IDA7CisjZW5kaWYKKyNpZmRlZiBVU0VfQUVTTkkKKyAgY3R4LT51c2VfYWVzbmkgPSAwOworI2VuZGlmCisKKyAgaWYoIGtleWxlbiA9PSAxMjgvOCApCisgICAgeworICAgICAgcm91bmRzID0gMTA7CisgICAgICBLQyA9IDQ7CisKKyAgICAgIGlmICgwKQorICAgICAgICB7CisgICAgICAgICAgOworICAgICAgICB9CisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgICAgIGVsc2UgaWYgKGh3ZmVhdHVyZXMgJiBIV0ZfUEFETE9DS19BRVMpCisgICAgICAgIHsKKyAgICAgICAgICBjdHgtPnVzZV9wYWRsb2NrID0gMTsKKyAgICAgICAgICBtZW1jcHkgKGN0eC0+cGFkbG9ja2tleSwga2V5LCBrZXlsZW4pOworICAgICAgICB9CisjZW5kaWYKKyNpZmRlZiBVU0VfQUVTTkkKKyAgICAgIGVsc2UgaWYgKGh3ZmVhdHVyZXMgJiBIV0ZfSU5URUxfQUVTTkkpCisgICAgICAgIHsKKyAgICAgICAgICBjdHgtPnVzZV9hZXNuaSA9IDE7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgZWxzZSBpZiAoIGtleWxlbiA9PSAxOTIvOCApCisgICAgeworICAgICAgcm91bmRzID0gMTI7CisgICAgICBLQyA9IDY7CisKKyAgICAgIGlmICgwKQorICAgICAgICB7CisgICAgICAgICAgOworICAgICAgICB9CisjaWZkZWYgVVNFX0FFU05JCisgICAgICBlbHNlIGlmIChod2ZlYXR1cmVzICYgSFdGX0lOVEVMX0FFU05JKQorICAgICAgICB7CisgICAgICAgICAgY3R4LT51c2VfYWVzbmkgPSAxOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgIGVsc2UgaWYgKCBrZXlsZW4gPT0gMjU2LzggKQorICAgIHsKKyAgICAgIHJvdW5kcyA9IDE0OworICAgICAgS0MgPSA4OworCisgICAgICBpZiAoMCkKKyAgICAgICAgeworICAgICAgICAgIDsKKyAgICAgICAgfQorI2lmZGVmIFVTRV9BRVNOSQorICAgICAgZWxzZSBpZiAoaHdmZWF0dXJlcyAmIEhXRl9JTlRFTF9BRVNOSSkKKyAgICAgICAgeworICAgICAgICAgIGN0eC0+dXNlX2Flc25pID0gMTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICBjdHgtPnJvdW5kcyA9IHJvdW5kczsKKworICAvKiBOQjogV2UgZG9uJ3QgeWV0IHN1cHBvcnQgUGFkbG9jayBoYXJkd2FyZSBrZXkgZ2VuZXJhdGlvbi4gICovCisKKyAgaWYgKDApCisgICAgeworICAgICAgOworICAgIH0KKyNpZmRlZiBVU0VfQUVTTkkKKyAgZWxzZSBpZiAoY3R4LT51c2VfYWVzbmkpCisgICAgYWVzbmlfZG9fc2V0a2V5KGN0eCwga2V5KTsKKyNlbmRpZgorICBlbHNlCisgICAgeworICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAgIFBST1BFUkxZX0FMSUdORURfVFlQRSBkdW1teTsKKyAgICAgICAgICBieXRlIGRhdGFbTUFYS0NdWzRdOworICAgICAgICB9IGssIHRrOworI2RlZmluZSBrIGsuZGF0YQorI2RlZmluZSB0ayB0ay5kYXRhCisjZGVmaW5lIFcgKGN0eC0+a2V5c2NoZW5jKQorICAgICAgZm9yIChpID0gMDsgaSA8IGtleWxlbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAga1tpID4+IDJdW2kgJiAzXSA9IGtleVtpXTsKKyAgICAgICAgfQorCisgICAgICBmb3IgKGogPSBLQy0xOyBqID49IDA7IGotLSkKKyAgICAgICAgeworICAgICAgICAgICooKHUzMl9hX3QqKXRrW2pdKSA9ICooKHUzMl9hX3QqKWtbal0pOworICAgICAgICB9CisgICAgICByID0gMDsKKyAgICAgIHQgPSAwOworICAgICAgLyogQ29weSB2YWx1ZXMgaW50byByb3VuZCBrZXkgYXJyYXkuICAqLworICAgICAgZm9yIChqID0gMDsgKGogPCBLQykgJiYgKHIgPCByb3VuZHMgKyAxKTsgKQorICAgICAgICB7CisgICAgICAgICAgZm9yICg7IChqIDwgS0MpICYmICh0IDwgNCk7IGorKywgdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqKCh1MzJfYV90KilXW3JdW3RdKSA9ICooKHUzMl9hX3QqKXRrW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodCA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByKys7CisgICAgICAgICAgICAgIHQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHdoaWxlIChyIDwgcm91bmRzICsgMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFdoaWxlIG5vdCBlbm91Z2ggcm91bmQga2V5IG1hdGVyaWFsIGNhbGN1bGF0ZWQgY2FsY3VsYXRlCisgICAgICAgICAgICAgbmV3IHZhbHVlcy4gICovCisgICAgICAgICAgdGtbMF1bMF0gXj0gU1t0a1tLQy0xXVsxXV07CisgICAgICAgICAgdGtbMF1bMV0gXj0gU1t0a1tLQy0xXVsyXV07CisgICAgICAgICAgdGtbMF1bMl0gXj0gU1t0a1tLQy0xXVszXV07CisgICAgICAgICAgdGtbMF1bM10gXj0gU1t0a1tLQy0xXVswXV07CisgICAgICAgICAgdGtbMF1bMF0gXj0gcmNvbltyY29ucG9pbnRlcisrXTsKKworICAgICAgICAgIGlmIChLQyAhPSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgS0M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqKCh1MzJfYV90Kil0a1tqXSkgXj0gKigodTMyX2FfdCopdGtbai0xXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IEtDLzI7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqKCh1MzJfYV90Kil0a1tqXSkgXj0gKigodTMyX2FfdCopdGtbai0xXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB0a1tLQy8yXVswXSBePSBTW3RrW0tDLzIgLSAxXVswXV07CisgICAgICAgICAgICAgIHRrW0tDLzJdWzFdIF49IFNbdGtbS0MvMiAtIDFdWzFdXTsKKyAgICAgICAgICAgICAgdGtbS0MvMl1bMl0gXj0gU1t0a1tLQy8yIC0gMV1bMl1dOworICAgICAgICAgICAgICB0a1tLQy8yXVszXSBePSBTW3RrW0tDLzIgLSAxXVszXV07CisgICAgICAgICAgICAgIGZvciAoaiA9IEtDLzIgKyAxOyBqIDwgS0M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqKCh1MzJfYV90Kil0a1tqXSkgXj0gKigodTMyX2FfdCopdGtbai0xXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogQ29weSB2YWx1ZXMgaW50byByb3VuZCBrZXkgYXJyYXkuICAqLworICAgICAgICAgIGZvciAoaiA9IDA7IChqIDwgS0MpICYmIChyIDwgcm91bmRzICsgMSk7ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yICg7IChqIDwgS0MpICYmICh0IDwgNCk7IGorKywgdCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICooKHUzMl9hX3QqKVdbcl1bdF0pID0gKigodTMyX2FfdCopdGtbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHQgPT0gNCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICByKys7CisgICAgICAgICAgICAgICAgICB0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyN1bmRlZiBXCisjdW5kZWYgdGsKKyN1bmRlZiBrCisgICAgICB3aXBlbWVtb3J5KCZ0aywgc2l6ZW9mKHRrKSk7CisgICAgICB3aXBlbWVtb3J5KCZ0LCBzaXplb2YodCkpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CityaWpuZGFlbF9zZXRrZXkgKHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgY29uc3QgdW5zaWduZWQga2V5bGVuKQoreworICBSSUpOREFFTF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICByZXR1cm4gZG9fc2V0a2V5IChjdHgsIGtleSwga2V5bGVuKTsKK30KKworCisvKiBNYWtlIGEgZGVjcnlwdGlvbiBrZXkgZnJvbSBhbiBlbmNyeXB0aW9uIGtleS4gKi8KK3N0YXRpYyB2b2lkCitwcmVwYXJlX2RlY3J5cHRpb24oIFJJSk5EQUVMX2NvbnRleHQgKmN0eCApCit7CisgIGludCByOworCisjaWZkZWYgVVNFX0FFU05JCisgIGlmIChjdHgtPnVzZV9hZXNuaSkKKyAgICB7CisgICAgICAvKiBUaGUgQUVTLU5JIGRlY3J5cHQgaW5zdHJ1Y3Rpb25zIHVzZSB0aGUgRXF1aXZhbGVudCBJbnZlcnNlCisgICAgICAgICBDaXBoZXIsIHRodXMgd2UgY2FuJ3QgdXNlIHRoZSB0aGUgc3RhbmRhcmQgZGVjcnlwdCBrZXkKKyAgICAgICAgIHByZXBhcmF0aW9uLiAgKi8KKyAgICAgICAgdTEyOF90ICpla2V5ID0gKHUxMjhfdCAqKWN0eC0+a2V5c2NoZW5jOworICAgICAgICB1MTI4X3QgKmRrZXkgPSAodTEyOF90ICopY3R4LT5rZXlzY2hkZWM7CisgICAgICAgIGludCBycjsKKworCWFlc25pX3ByZXBhcmUoKTsKKworI2RlZmluZSBET19BRVNOSV9BRVNJTUMoKSBcCisJYXNtIHZvbGF0aWxlICgibW92ZHFhICVbZWtleV0sICUleG1tMVxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAvKiJhZXNpbWMgJSV4bW0xLCAlJXhtbTFcblx0IiovIFwKKyAgICAgICAgICAgICAgICAgICAgICAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYiwgMHhjOVxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgJVtka2V5XSIgXAorICAgICAgICAgICAgICAgICAgICAgIDogW2RrZXldICI9bSIgKGRrZXlbcl0pIFwKKyAgICAgICAgICAgICAgICAgICAgICA6IFtla2V5XSAibSIgKGVrZXlbcnJdKSBcCisgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IikKKworICAgICAgICBka2V5WzBdID0gZWtleVtjdHgtPnJvdW5kc107CisgICAgICAgIHI9MTsKKwlycj1jdHgtPnJvdW5kcy0xOworCURPX0FFU05JX0FFU0lNQygpOyByKys7IHJyLS07IC8qIHJvdW5kIDEgKi8KKwlET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCAyICovCisJRE9fQUVTTklfQUVTSU1DKCk7IHIrKzsgcnItLTsgLyogcm91bmQgMyAqLworCURPX0FFU05JX0FFU0lNQygpOyByKys7IHJyLS07IC8qIHJvdW5kIDQgKi8KKwlET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCA1ICovCisJRE9fQUVTTklfQUVTSU1DKCk7IHIrKzsgcnItLTsgLyogcm91bmQgNiAqLworCURPX0FFU05JX0FFU0lNQygpOyByKys7IHJyLS07IC8qIHJvdW5kIDcgKi8KKwlET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCA4ICovCisJRE9fQUVTTklfQUVTSU1DKCk7IHIrKzsgcnItLTsgLyogcm91bmQgOSAqLworCWlmIChjdHgtPnJvdW5kcyA+IDEwKQorCSAgeworCSAgICBET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCAxMCAqLworCSAgICBET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCAxMSAqLworCSAgICBpZiAoY3R4LT5yb3VuZHMgPiAxMikKKwkgICAgICB7CisJICAgICAgICBET19BRVNOSV9BRVNJTUMoKTsgcisrOyByci0tOyAvKiByb3VuZCAxMiAqLworCSAgICAgICAgRE9fQUVTTklfQUVTSU1DKCk7IHIrKzsgcnItLTsgLyogcm91bmQgMTMgKi8KKwkgICAgICB9CisJICB9CisKKyAgICAgICAgZGtleVtyXSA9IGVrZXlbMF07CisKKyN1bmRlZiBET19BRVNOSV9BRVNJTUMKKworCWFlc25pX2NsZWFudXAoKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKlVTRV9BRVNOSSovCisgICAgeworICAgICAgdW5pb24KKyAgICAgIHsKKyAgICAgICAgUFJPUEVSTFlfQUxJR05FRF9UWVBFIGR1bW15OworICAgICAgICBieXRlICp3OworICAgICAgfSB3OworI2RlZmluZSB3IHcudworCisgICAgICBmb3IgKHI9MDsgciA8IE1BWFJPVU5EUysxOyByKysgKQorICAgICAgICB7CisgICAgICAgICAgKigodTMyX2FfdCopY3R4LT5rZXlzY2hkZWNbcl1bMF0pID0gKigodTMyX2FfdCopY3R4LT5rZXlzY2hlbmNbcl1bMF0pOworICAgICAgICAgICooKHUzMl9hX3QqKWN0eC0+a2V5c2NoZGVjW3JdWzFdKSA9ICooKHUzMl9hX3QqKWN0eC0+a2V5c2NoZW5jW3JdWzFdKTsKKyAgICAgICAgICAqKCh1MzJfYV90KiljdHgtPmtleXNjaGRlY1tyXVsyXSkgPSAqKCh1MzJfYV90KiljdHgtPmtleXNjaGVuY1tyXVsyXSk7CisgICAgICAgICAgKigodTMyX2FfdCopY3R4LT5rZXlzY2hkZWNbcl1bM10pID0gKigodTMyX2FfdCopY3R4LT5rZXlzY2hlbmNbcl1bM10pOworICAgICAgICB9CisjZGVmaW5lIFcgKGN0eC0+a2V5c2NoZGVjKQorICAgICAgZm9yIChyID0gMTsgciA8IGN0eC0+cm91bmRzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICB3ID0gV1tyXVswXTsKKyAgICAgICAgICAqKCh1MzJfYV90Kil3KSA9ICooKHUzMl9hX3QqKVUxW3dbMF1dKSBeICooKHUzMl9hX3QqKVUyW3dbMV1dKQorICAgICAgICAgICAgXiAqKCh1MzJfYV90KilVM1t3WzJdXSkgXiAqKCh1MzJfYV90KilVNFt3WzNdXSk7CisKKyAgICAgICAgICB3ID0gV1tyXVsxXTsKKyAgICAgICAgICAqKCh1MzJfYV90Kil3KSA9ICooKHUzMl9hX3QqKVUxW3dbMF1dKSBeICooKHUzMl9hX3QqKVUyW3dbMV1dKQorICAgICAgICAgICAgXiAqKCh1MzJfYV90KilVM1t3WzJdXSkgXiAqKCh1MzJfYV90KilVNFt3WzNdXSk7CisKKyAgICAgICAgICB3ID0gV1tyXVsyXTsKKyAgICAgICAgICAqKCh1MzJfYV90Kil3KSA9ICooKHUzMl9hX3QqKVUxW3dbMF1dKSBeICooKHUzMl9hX3QqKVUyW3dbMV1dKQorICAgICAgICBeICooKHUzMl9hX3QqKVUzW3dbMl1dKSBeICooKHUzMl9hX3QqKVU0W3dbM11dKTsKKworICAgICAgICAgIHcgPSBXW3JdWzNdOworICAgICAgICAgICooKHUzMl9hX3QqKXcpID0gKigodTMyX2FfdCopVTFbd1swXV0pIF4gKigodTMyX2FfdCopVTJbd1sxXV0pCisgICAgICAgICAgICBeICooKHUzMl9hX3QqKVUzW3dbMl1dKSBeICooKHUzMl9hX3QqKVU0W3dbM11dKTsKKyAgICAgICAgfQorI3VuZGVmIFcKKyN1bmRlZiB3CisgICAgICB3aXBlbWVtb3J5KCZ3LCBzaXplb2YodykpOworICAgIH0KK30KKworDAorLyogRW5jcnlwdCBvbmUgYmxvY2suICBBIGFuZCBCIG5lZWQgdG8gYmUgYWxpZ25lZCBvbiBhIDQgYnl0ZQorICAgYm91bmRhcnkuICBBIGFuZCBCIG1heSBiZSB0aGUgc2FtZS4gKi8KK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0X2FsaWduZWQgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYiwgY29uc3QgdW5zaWduZWQgY2hhciAqYSkKK3sKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisgIF9nY3J5X2Flc19hbWQ2NF9lbmNyeXB0X2Jsb2NrKGN0eC0+a2V5c2NoZW5jLCBiLCBhLCBjdHgtPnJvdW5kcyk7CisjZWxpZiBkZWZpbmVkKFVTRV9BUk1fQVNNKQorICBfZ2NyeV9hZXNfYXJtX2VuY3J5cHRfYmxvY2soY3R4LT5rZXlzY2hlbmMsIGIsIGEsIGN0eC0+cm91bmRzKTsKKyNlbHNlCisjZGVmaW5lIHJrIChjdHgtPmtleXNjaGVuYykKKyAgaW50IHJvdW5kcyA9IGN0eC0+cm91bmRzOworICBpbnQgcjsKKyAgdW5pb24KKyAgeworICAgIHUzMiAgdGVtcHUzMls0XTsgIC8qIEZvcmNlIGNvcnJlY3QgYWxpZ25tZW50LiAqLworICAgIGJ5dGUgdGVtcFs0XVs0XTsKKyAgfSB1OworCisgICooKHUzMl9hX3QqKXUudGVtcFswXSkgPSAqKCh1MzJfYV90KikoYSAgICkpIF4gKigodTMyX2FfdCopcmtbMF1bMF0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbMV0pID0gKigodTMyX2FfdCopKGErIDQpKSBeICooKHUzMl9hX3QqKXJrWzBdWzFdKTsKKyAgKigodTMyX2FfdCopdS50ZW1wWzJdKSA9ICooKHUzMl9hX3QqKShhKyA4KSkgXiAqKCh1MzJfYV90Kilya1swXVsyXSk7CisgICooKHUzMl9hX3QqKXUudGVtcFszXSkgPSAqKCh1MzJfYV90KikoYSsxMikpIF4gKigodTMyX2FfdCopcmtbMF1bM10pOworICAqKCh1MzJfYV90KikoYiAgICApKSAgID0gKCooKHUzMl9hX3QqKVQxW3UudGVtcFswXVswXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQyW3UudGVtcFsxXVsxXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQzW3UudGVtcFsyXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ0W3UudGVtcFszXVszXV0pKTsKKyAgKigodTMyX2FfdCopKGIgKyA0KSkgICA9ICgqKCh1MzJfYV90KilUMVt1LnRlbXBbMV1bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUMlt1LnRlbXBbMl1bMV1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUM1t1LnRlbXBbM11bMl1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUNFt1LnRlbXBbMF1bM11dKSk7CisgICooKHUzMl9hX3QqKShiICsgOCkpICAgPSAoKigodTMyX2FfdCopVDFbdS50ZW1wWzJdWzBdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDJbdS50ZW1wWzNdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDNbdS50ZW1wWzBdWzJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDRbdS50ZW1wWzFdWzNdXSkpOworICAqKCh1MzJfYV90KikoYiArMTIpKSAgID0gKCooKHUzMl9hX3QqKVQxW3UudGVtcFszXVswXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQyW3UudGVtcFswXVsxXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQzW3UudGVtcFsxXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ0W3UudGVtcFsyXVszXV0pKTsKKworICBmb3IgKHIgPSAxOyByIDwgcm91bmRzLTE7IHIrKykKKyAgICB7CisgICAgICAqKCh1MzJfYV90Kil1LnRlbXBbMF0pID0gKigodTMyX2FfdCopKGIgICApKSBeICooKHUzMl9hX3QqKXJrW3JdWzBdKTsKKyAgICAgICooKHUzMl9hX3QqKXUudGVtcFsxXSkgPSAqKCh1MzJfYV90KikoYisgNCkpIF4gKigodTMyX2FfdCopcmtbcl1bMV0pOworICAgICAgKigodTMyX2FfdCopdS50ZW1wWzJdKSA9ICooKHUzMl9hX3QqKShiKyA4KSkgXiAqKCh1MzJfYV90Kilya1tyXVsyXSk7CisgICAgICAqKCh1MzJfYV90Kil1LnRlbXBbM10pID0gKigodTMyX2FfdCopKGIrMTIpKSBeICooKHUzMl9hX3QqKXJrW3JdWzNdKTsKKworICAgICAgKigodTMyX2FfdCopKGIgICAgKSkgICA9ICgqKCh1MzJfYV90KilUMVt1LnRlbXBbMF1bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDJbdS50ZW1wWzFdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQzW3UudGVtcFsyXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUNFt1LnRlbXBbM11bM11dKSk7CisgICAgICAqKCh1MzJfYV90KikoYiArIDQpKSAgID0gKCooKHUzMl9hX3QqKVQxW3UudGVtcFsxXVswXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUMlt1LnRlbXBbMl1bMV1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDNbdS50ZW1wWzNdWzJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ0W3UudGVtcFswXVszXV0pKTsKKyAgICAgICooKHUzMl9hX3QqKShiICsgOCkpICAgPSAoKigodTMyX2FfdCopVDFbdS50ZW1wWzJdWzBdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQyW3UudGVtcFszXVsxXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUM1t1LnRlbXBbMF1bMl1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDRbdS50ZW1wWzFdWzNdXSkpOworICAgICAgKigodTMyX2FfdCopKGIgKzEyKSkgICA9ICgqKCh1MzJfYV90KilUMVt1LnRlbXBbM11bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDJbdS50ZW1wWzBdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQzW3UudGVtcFsxXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUNFt1LnRlbXBbMl1bM11dKSk7CisgICAgfQorCisgIC8qIExhc3Qgcm91bmQgaXMgc3BlY2lhbC4gKi8KKyAgKigodTMyX2FfdCopdS50ZW1wWzBdKSA9ICooKHUzMl9hX3QqKShiICAgKSkgXiAqKCh1MzJfYV90Kilya1tyb3VuZHMtMV1bMF0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbMV0pID0gKigodTMyX2FfdCopKGIrIDQpKSBeICooKHUzMl9hX3QqKXJrW3JvdW5kcy0xXVsxXSk7CisgICooKHUzMl9hX3QqKXUudGVtcFsyXSkgPSAqKCh1MzJfYV90KikoYisgOCkpIF4gKigodTMyX2FfdCopcmtbcm91bmRzLTFdWzJdKTsKKyAgKigodTMyX2FfdCopdS50ZW1wWzNdKSA9ICooKHUzMl9hX3QqKShiKzEyKSkgXiAqKCh1MzJfYV90Kilya1tyb3VuZHMtMV1bM10pOworICBiWyAwXSA9IFQxW3UudGVtcFswXVswXV1bMV07CisgIGJbIDFdID0gVDFbdS50ZW1wWzFdWzFdXVsxXTsKKyAgYlsgMl0gPSBUMVt1LnRlbXBbMl1bMl1dWzFdOworICBiWyAzXSA9IFQxW3UudGVtcFszXVszXV1bMV07CisgIGJbIDRdID0gVDFbdS50ZW1wWzFdWzBdXVsxXTsKKyAgYlsgNV0gPSBUMVt1LnRlbXBbMl1bMV1dWzFdOworICBiWyA2XSA9IFQxW3UudGVtcFszXVsyXV1bMV07CisgIGJbIDddID0gVDFbdS50ZW1wWzBdWzNdXVsxXTsKKyAgYlsgOF0gPSBUMVt1LnRlbXBbMl1bMF1dWzFdOworICBiWyA5XSA9IFQxW3UudGVtcFszXVsxXV1bMV07CisgIGJbMTBdID0gVDFbdS50ZW1wWzBdWzJdXVsxXTsKKyAgYlsxMV0gPSBUMVt1LnRlbXBbMV1bM11dWzFdOworICBiWzEyXSA9IFQxW3UudGVtcFszXVswXV1bMV07CisgIGJbMTNdID0gVDFbdS50ZW1wWzBdWzFdXVsxXTsKKyAgYlsxNF0gPSBUMVt1LnRlbXBbMV1bMl1dWzFdOworICBiWzE1XSA9IFQxW3UudGVtcFsyXVszXV1bMV07CisgICooKHUzMl9hX3QqKShiICAgKSkgXj0gKigodTMyX2FfdCopcmtbcm91bmRzXVswXSk7CisgICooKHUzMl9hX3QqKShiKyA0KSkgXj0gKigodTMyX2FfdCopcmtbcm91bmRzXVsxXSk7CisgICooKHUzMl9hX3QqKShiKyA4KSkgXj0gKigodTMyX2FfdCopcmtbcm91bmRzXVsyXSk7CisgICooKHUzMl9hX3QqKShiKzEyKSkgXj0gKigodTMyX2FfdCopcmtbcm91bmRzXVszXSk7CisjdW5kZWYgcmsKKyNlbmRpZiAvKiFVU0VfQU1ENjRfQVNNICYmICFVU0VfQVJNX0FTTSovCit9CisKKworc3RhdGljIHZvaWQKK2RvX2VuY3J5cHQgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpheCkKK3sKKyNpZiAhZGVmaW5lZChVU0VfQU1ENjRfQVNNKSAmJiAhZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgLyogQlggYW5kIEFYIGFyZSBub3QgbmVjZXNzYXJ5IGNvcnJlY3RseSBhbGlnbmVkLiAgVGh1cyB3ZSBtaWdodAorICAgICBuZWVkIHRvIGNvcHkgdGhlbSBoZXJlLiAgV2UgdHJ5IHRvIGFsaWduIHRvIGEgMTYgYnl0ZXMuICAqLworICBpZiAoKChzaXplX3QpYXggJiAweDBmKSB8fCAoKHNpemVfdClieCAmIDB4MGYpKQorICAgIHsKKyAgICAgIHVuaW9uCisgICAgICB7CisgICAgICAgIHUzMiAgZHVtbXlbNF07CisgICAgICAgIGJ5dGUgYVsxNl0gQVRUUl9BTElHTkVEXzE2OworICAgICAgfSBhOworICAgICAgdW5pb24KKyAgICAgIHsKKyAgICAgICAgdTMyICBkdW1teVs0XTsKKyAgICAgICAgYnl0ZSBiWzE2XSBBVFRSX0FMSUdORURfMTY7CisgICAgICB9IGI7CisKKyAgICAgIGJ1Zl9jcHkgKGEuYSwgYXgsIDE2KTsKKyAgICAgIGRvX2VuY3J5cHRfYWxpZ25lZCAoY3R4LCBiLmIsIGEuYSk7CisgICAgICBidWZfY3B5IChieCwgYi5iLCAxNik7CisgICAgfQorICBlbHNlCisjZW5kaWYgLyohVVNFX0FNRDY0X0FTTSAmJiAhVVNFX0FSTV9BU00qLworICAgIHsKKyAgICAgIGRvX2VuY3J5cHRfYWxpZ25lZCAoY3R4LCBieCwgYXgpOworICAgIH0KK30KKworCisvKiBFbmNyeXB0IG9yIGRlY3J5cHQgb25lIGJsb2NrIHVzaW5nIHRoZSBwYWRsb2NrIGVuZ2luZS4gIEEgYW5kIEIgbWF5CisgICBiZSB0aGUgc2FtZS4gKi8KKyNpZmRlZiBVU0VfUEFETE9DSworc3RhdGljIHZvaWQKK2RvX3BhZGxvY2sgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwgaW50IGRlY3J5cHRfZmxhZywKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpheCkKK3sKKyAgLyogQlggYW5kIEFYIGFyZSBub3QgbmVjZXNzYXJ5IGNvcnJlY3RseSBhbGlnbmVkLiAgVGh1cyB3ZSBuZWVkIHRvCisgICAgIGNvcHkgdGhlbSBoZXJlLiAqLworICB1bnNpZ25lZCBjaGFyIGFbMTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKKyAgdW5zaWduZWQgY2hhciBiWzE2XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CisgIHVuc2lnbmVkIGludCBjd29yZFs0XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CisgIGludCBibG9ja3M7CisKKyAgLyogVGhlIGNvbnRyb2wgd29yZCBmaWVsZHMgYXJlOgorICAgICAgMTI3OjEyICAgMTE6MTAgOSAgICAgOCAgICAgNyAgICAgNiAgICAgNSAgICAgNCAgICAgMzowCisgICAgICBSRVNFUlZFRCBLU0laRSBDUllQVCBJTlRFUiBLRVlHTiBDSVBIUiBBTElHTiBER0VTVCBST1VORCAgKi8KKyAgY3dvcmRbMF0gPSAoY3R4LT5yb3VuZHMgJiAxNSk7ICAvKiAoVGhlIG1hc2sgaXMganVzdCBhIHNhZmVndWFyZC4pICAqLworICBjd29yZFsxXSA9IDA7CisgIGN3b3JkWzJdID0gMDsKKyAgY3dvcmRbM10gPSAwOworICBpZiAoZGVjcnlwdF9mbGFnKQorICAgIGN3b3JkWzBdIHw9IDB4MDAwMDAyMDA7CisKKyAgbWVtY3B5IChhLCBheCwgMTYpOworCisgIGJsb2NrcyA9IDE7IC8qIEluaXQgY291bnRlciBmb3IganVzdCBvbmUgYmxvY2suICAqLworI2lmZGVmIF9feDg2XzY0X18KKyAgYXNtIHZvbGF0aWxlCisgICAgKCJwdXNoZnFcblx0IiAgICAgICAgICAvKiBGb3JjZSBrZXkgcmVsb2FkLiAgKi8KKyAgICAgInBvcGZxXG5cdCIKKyAgICAgIi5ieXRlIDB4ZjMsIDB4MGYsIDB4YTcsIDB4Yzhcblx0IiAvKiBSRVAgWENSWVBUIEVDQi4gKi8KKyAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgOiAiUyIgKGEpLCAiRCIgKGIpLCAiZCIgKGN3b3JkKSwgImIiIChjdHgtPnBhZGxvY2trZXkpLCAiYyIgKGJsb2NrcykKKyAgICAgOiAiY2MiLCAibWVtb3J5IgorICAgICApOworI2Vsc2UKKyAgYXNtIHZvbGF0aWxlCisgICAgKCJwdXNoZmxcblx0IiAgICAgICAgICAvKiBGb3JjZSBrZXkgcmVsb2FkLiAgKi8KKyAgICAgInBvcGZsXG5cdCIKKyAgICAgInhjaGcgJTMsICUlZWJ4XG5cdCIgIC8qIExvYWQga2V5LiAgKi8KKyAgICAgIi5ieXRlIDB4ZjMsIDB4MGYsIDB4YTcsIDB4Yzhcblx0IiAvKiBSRVAgWENSWVBUIEVDQi4gKi8KKyAgICAgInhjaGcgJTMsICUlZWJ4XG4iICAgIC8qIFJlc3RvcmUgR09UIHJlZ2lzdGVyLiAgKi8KKyAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgOiAiUyIgKGEpLCAiRCIgKGIpLCAiZCIgKGN3b3JkKSwgInIiIChjdHgtPnBhZGxvY2trZXkpLCAiYyIgKGJsb2NrcykKKyAgICAgOiAiY2MiLCAibWVtb3J5IgorICAgICApOworI2VuZGlmCisKKyAgbWVtY3B5IChieCwgYiwgMTYpOworCit9CisjZW5kaWYgLypVU0VfUEFETE9DSyovCisKKworI2lmZGVmIFVTRV9BRVNOSQorLyogRW5jcnlwdCBvbmUgYmxvY2sgdXNpbmcgdGhlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMuICBBIGFuZCBCIG1heQorICAgYmUgdGhlIHNhbWUuCisKKyAgIE91ciBwcm9ibGVtIGhlcmUgaXMgdGhhdCBnY2MgZG9lcyBub3QgYWxsb3cgdGhlICJ4IiBjb25zdHJhaW50IGZvcgorICAgU1NFIHJlZ2lzdGVycyBpbiBhc20gdW5sZXNzIHlvdSBjb21waWxlIHdpdGggLW1zc2UuICBUaGUgY29tbW9uCisgICB3aXNkb20gaXMgdG8gdXNlIGEgc2VwYXJhdGUgZmlsZSBmb3IgU1NFIGluc3RydWN0aW9ucyBhbmQgYnVpbGQgaXQKKyAgIHNlcGFyYXRlbHkuICBUaGlzIHdvdWxkIHJlcXVpcmUgYSBsb3Qgb2YgZXh0cmEgYnVpbGQgc3lzdGVtIHN0dWZmLAorICAgc2ltaWxhciB0byB3aGF0IHdlIGRvIGluIG1waS8gZm9yIHRoZSBhc20gc3R1ZmYuICBXaGF0IHdlIGRvCisgICBpbnN0ZWFkIGlzIHRvIHVzZSBzdGFuZGFyZCByZWdpc3RlcnMgYW5kIGEgYml0IG1vcmUgb2YgcGxhaW4gYXNtCisgICB3aGljaCBjb3BpZXMgdGhlIGRhdGEgYW5kIGtleSBzdHVmZiB0byB0aGUgU1NFIHJlZ2lzdGVycyBhbmQgbGF0ZXIKKyAgIGJhY2suICBJZiB3ZSBkZWNpZGUgdG8gaW1wbGVtZW50IHNvbWUgYmxvY2sgbW9kZXMgd2l0aCBwYXJhbGxlbGl6ZWQKKyAgIEFFUyBpbnN0cnVjdGlvbnMsIGl0IG1pZ2h0IGluZGVlZCBiZSBiZXR0ZXIgdG8gdXNlIHBsYWluIGFzbSBhbGEKKyAgIG1waS8uICAqLworc3RhdGljIGlubGluZSB2b2lkCitkb19hZXNuaV9lbmMgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciAqYiwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYSkKK3sKKyNkZWZpbmUgYWVzZW5jX3htbTFfeG1tMCAgICAgICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMxXG5cdCIKKyNkZWZpbmUgYWVzZW5jbGFzdF94bW0xX3htbTAgICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGMxXG5cdCIKKyAgLyogTm90ZTogRm9yIG5vdyB3ZSByZWxheCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBBIGFuZCBCOiBJdAorICAgICBkb2VzIG5vdCBtYWtlIG11Y2ggZGlmZmVyZW5jZSBiZWNhdXNlIGluIG1hbnkgY2FzZSB3ZSB3b3VsZCBuZWVkCisgICAgIHRvIG1lbWNweSB0aGVtIHRvIGFuIGV4dHJhIGJ1ZmZlcjsgdXNpbmcgdGhlIG1vdmRxdSBpcyBtdWNoIGZhc3RlcgorICAgICB0aGF0IG1lbWNweSBhbmQgbW92ZHFhLiAgRm9yIENGQiB3ZSBrbm93IHRoYXQgdGhlIElWIGlzIHByb3Blcmx5CisgICAgIGFsaWduZWQgYnV0IHRoYXQgaXMgYSBzcGVjaWFsIGNhc2UuICBXZSBzaG91bGQgYmV0dGVyIGltcGxlbWVudAorICAgICBDRkIgZGlyZWN0IGluIGFzbS4gICovCisgIGFzbSB2b2xhdGlsZSAoIm1vdmRxdSAlW3NyY10sICUleG1tMFxuXHQiICAgICAvKiB4bW0wIDo9ICphICAgICAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgKCVba2V5XSksICUleG1tMVxuXHQiICAgIC8qIHhtbTEgOj0ga2V5WzBdICovCisgICAgICAgICAgICAgICAgInB4b3IgICAlJXhtbTEsICUleG1tMFxuXHQiICAgICAvKiB4bW0wIF49IGtleVswXSAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgxMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MjAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDMwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg0MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDYwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg3MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ODAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDkwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhhMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJjbXBsICQxMCwgJVtyb3VuZHNdXG5cdCIKKyAgICAgICAgICAgICAgICAianogLkxlbmNsYXN0JT1cblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YjAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGMwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgJDEyLCAlW3JvdW5kc11cblx0IgorICAgICAgICAgICAgICAgICJqeiAuTGVuY2xhc3QlPVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhkMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ZTAoJVtrZXldKSwgJSV4bW0xXG4iCisKKyAgICAgICAgICAgICAgICAiLkxlbmNsYXN0JT06XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNsYXN0X3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAlW2RzdF1cbiIKKyAgICAgICAgICAgICAgICA6IFtkc3RdICI9bSIgKCpiKQorICAgICAgICAgICAgICAgIDogW3NyY10gIm0iICgqYSksCisgICAgICAgICAgICAgICAgICBba2V5XSAiciIgKGN0eC0+a2V5c2NoZW5jKSwKKyAgICAgICAgICAgICAgICAgIFtyb3VuZHNdICJyIiAoY3R4LT5yb3VuZHMpCisgICAgICAgICAgICAgICAgOiAiY2MiLCAibWVtb3J5Iik7CisjdW5kZWYgYWVzZW5jX3htbTFfeG1tMAorI3VuZGVmIGFlc2VuY2xhc3RfeG1tMV94bW0wCit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitkb19hZXNuaV9kZWMgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciAqYiwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYSkKK3sKKyNkZWZpbmUgYWVzZGVjX3htbTFfeG1tMCAgICAgICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMxXG5cdCIKKyNkZWZpbmUgYWVzZGVjbGFzdF94bW0xX3htbTAgICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGMxXG5cdCIKKyAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICVbc3JjXSwgJSV4bW0wXG5cdCIgICAgIC8qIHhtbTAgOj0gKmEgICAgICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAicHhvciAgICUleG1tMSwgJSV4bW0wXG5cdCIgICAgIC8qIHhtbTAgXj0ga2V5WzBdICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgyMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDQwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg1MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NjAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDcwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg4MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4OTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgJDEwLCAlW3JvdW5kc11cblx0IgorICAgICAgICAgICAgICAgICJqeiAuTGRlY2xhc3QlPVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhiMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAiY21wbCAkMTIsICVbcm91bmRzXVxuXHQiCisgICAgICAgICAgICAgICAgImp6IC5MZGVjbGFzdCU9XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGQwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhlMCglW2tleV0pLCAlJXhtbTFcbiIKKworICAgICAgICAgICAgICAgICIuTGRlY2xhc3QlPTpcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY2xhc3RfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICVbZHN0XVxuIgorICAgICAgICAgICAgICAgIDogW2RzdF0gIj1tIiAoKmIpCisgICAgICAgICAgICAgICAgOiBbc3JjXSAibSIgKCphKSwKKyAgICAgICAgICAgICAgICAgIFtrZXldICJyIiAoY3R4LT5rZXlzY2hkZWMpLAorICAgICAgICAgICAgICAgICAgW3JvdW5kc10gInIiIChjdHgtPnJvdW5kcykKKyAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiKTsKKyN1bmRlZiBhZXNkZWNfeG1tMV94bW0wCisjdW5kZWYgYWVzZGVjbGFzdF94bW0xX3htbTAKK30KKworCisvKiBFbmNyeXB0IGZvdXIgYmxvY2tzIHVzaW5nIHRoZSBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLiAgQmxvY2tzIGFyZSBpbnB1dAorICogYW5kIG91dHB1dCB0aHJvdWdoIFNTRSByZWdpc3RlcnMgeG1tMSB0byB4bW00LiAgKi8KK3N0YXRpYyB2b2lkCitkb19hZXNuaV9lbmNfdmVjNCAoY29uc3QgUklKTkRBRUxfY29udGV4dCAqY3R4KQoreworI2RlZmluZSBhZXNlbmNfeG1tMF94bW0xICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4Yzhcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMF94bW0yICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZDBcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMF94bW0zICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZDhcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMF94bW00ICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTBcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTBfeG1tMSAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4Yzhcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTBfeG1tMiAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZDBcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTBfeG1tMyAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZDhcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTBfeG1tNCAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZTBcblx0IgorICBhc20gdm9sYXRpbGUgKCJtb3ZkcWEgKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgICAlJXhtbTAsICUleG1tMVxuXHQiICAgICAvKiB4bW0xIF49IGtleVswXSAqLworICAgICAgICAgICAgICAgICJweG9yICAgJSV4bW0wLCAlJXhtbTJcblx0IiAgICAgLyogeG1tMiBePSBrZXlbMF0gKi8KKyAgICAgICAgICAgICAgICAicHhvciAgICUleG1tMCwgJSV4bW0zXG5cdCIgICAgIC8qIHhtbTMgXj0ga2V5WzBdICovCisgICAgICAgICAgICAgICAgInB4b3IgICAlJXhtbTAsICUleG1tNFxuXHQiICAgICAvKiB4bW00IF49IGtleVswXSAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgxMCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MjAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDMwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg0MCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NTAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDYwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg3MCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ODAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDkwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhhMCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgICJjbXBsICQxMCwgJVtyb3VuZHNdXG5cdCIKKyAgICAgICAgICAgICAgICAianogLkxkZWNsYXN0JT1cblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YjAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGMwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgJDEyLCAlW3JvdW5kc11cblx0IgorICAgICAgICAgICAgICAgICJqeiAuTGRlY2xhc3QlPVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhkMCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ZTAoJVtrZXldKSwgJSV4bW0wXG4iCisKKyAgICAgICAgICAgICAgICAiLkxkZWNsYXN0JT06XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNsYXN0X3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2VuY2xhc3RfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jbGFzdF94bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNsYXN0X3htbTBfeG1tNAorICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0ICovCisgICAgICAgICAgICAgICAgOiBba2V5XSAiciIgKGN0eC0+a2V5c2NoZW5jKSwKKyAgICAgICAgICAgICAgICAgIFtyb3VuZHNdICJyIiAoY3R4LT5yb3VuZHMpCisgICAgICAgICAgICAgICAgOiAiY2MiLCAibWVtb3J5Iik7CisjdW5kZWYgYWVzZW5jX3htbTBfeG1tMQorI3VuZGVmIGFlc2VuY194bW0wX3htbTIKKyN1bmRlZiBhZXNlbmNfeG1tMF94bW0zCisjdW5kZWYgYWVzZW5jX3htbTBfeG1tNAorI3VuZGVmIGFlc2VuY2xhc3RfeG1tMF94bW0xCisjdW5kZWYgYWVzZW5jbGFzdF94bW0wX3htbTIKKyN1bmRlZiBhZXNlbmNsYXN0X3htbTBfeG1tMworI3VuZGVmIGFlc2VuY2xhc3RfeG1tMF94bW00Cit9CisKKworLyogRGVjcnlwdCBmb3VyIGJsb2NrcyB1c2luZyB0aGUgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4gIEJsb2NrcyBhcmUgaW5wdXQKKyAqIGFuZCBvdXRwdXQgdGhyb3VnaCBTU0UgcmVnaXN0ZXJzIHhtbTEgdG8geG1tNC4gICovCitzdGF0aWMgdm9pZAorZG9fYWVzbmlfZGVjX3ZlYzQgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCkKK3sKKyNkZWZpbmUgYWVzZGVjX3htbTBfeG1tMSAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjOFxuXHQiCisjZGVmaW5lIGFlc2RlY194bW0wX3htbTIgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZDBcblx0IgorI2RlZmluZSBhZXNkZWNfeG1tMF94bW0zICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGQ4XG5cdCIKKyNkZWZpbmUgYWVzZGVjX3htbTBfeG1tNCAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMFxuXHQiCisjZGVmaW5lIGFlc2RlY2xhc3RfeG1tMF94bW0xICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGM4XG5cdCIKKyNkZWZpbmUgYWVzZGVjbGFzdF94bW0wX3htbTIgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZDBcblx0IgorI2RlZmluZSBhZXNkZWNsYXN0X3htbTBfeG1tMyAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhkOFxuXHQiCisjZGVmaW5lIGFlc2RlY2xhc3RfeG1tMF94bW00ICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGUwXG5cdCIKKyAgYXNtIHZvbGF0aWxlICgibW92ZHFhICglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgICJweG9yICAgJSV4bW0wLCAlJXhtbTFcblx0IiAgICAgLyogeG1tMSBePSBrZXlbMF0gKi8KKyAgICAgICAgICAgICAgICAicHhvciAgICUleG1tMCwgJSV4bW0yXG5cdCIgICAgIC8qIHhtbTIgXj0ga2V5WzBdICovCisgICAgICAgICAgICAgICAgInB4b3IgICAlJXhtbTAsICUleG1tM1xuXHQiICAgICAvKiB4bW0zIF49IGtleVswXSAqLworICAgICAgICAgICAgICAgICJweG9yICAgJSV4bW0wLCAlJXhtbTRcblx0IiAgICAgLyogeG1tNCBePSBrZXlbMF0gKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MTAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDIwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgzMCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NDAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDUwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg2MCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NzAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDgwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg5MCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YTAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICAiY21wbCAkMTAsICVbcm91bmRzXVxuXHQiCisgICAgICAgICAgICAgICAgImp6IC5MZGVjbGFzdCU9XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGIwKCVba2V5XSksICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMQorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhjMCglW2tleV0pLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgICJjbXBsICQxMiwgJVtyb3VuZHNdXG5cdCIKKyAgICAgICAgICAgICAgICAianogLkxkZWNsYXN0JT1cblx0IgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0yCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMworICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ZDAoJVtrZXldKSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW0xCisgICAgICAgICAgICAgICAgYWVzZGVjX3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY194bW0wX3htbTMKKyAgICAgICAgICAgICAgICBhZXNkZWNfeG1tMF94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGUwKCVba2V5XSksICUleG1tMFxuIgorCisgICAgICAgICAgICAgICAgIi5MZGVjbGFzdCU9OlxuXHQiCisgICAgICAgICAgICAgICAgYWVzZGVjbGFzdF94bW0wX3htbTEKKyAgICAgICAgICAgICAgICBhZXNkZWNsYXN0X3htbTBfeG1tMgorICAgICAgICAgICAgICAgIGFlc2RlY2xhc3RfeG1tMF94bW0zCisgICAgICAgICAgICAgICAgYWVzZGVjbGFzdF94bW0wX3htbTQKKyAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLworICAgICAgICAgICAgICAgIDogW2tleV0gInIiIChjdHgtPmtleXNjaGRlYyksCisgICAgICAgICAgICAgICAgICBbcm91bmRzXSAiciIgKGN0eC0+cm91bmRzKQorICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIpOworI3VuZGVmIGFlc2RlY194bW0wX3htbTEKKyN1bmRlZiBhZXNkZWNfeG1tMF94bW0yCisjdW5kZWYgYWVzZGVjX3htbTBfeG1tMworI3VuZGVmIGFlc2RlY194bW0wX3htbTQKKyN1bmRlZiBhZXNkZWNsYXN0X3htbTBfeG1tMQorI3VuZGVmIGFlc2RlY2xhc3RfeG1tMF94bW0yCisjdW5kZWYgYWVzZGVjbGFzdF94bW0wX3htbTMKKyN1bmRlZiBhZXNkZWNsYXN0X3htbTBfeG1tNAorfQorCisKKy8qIFBlcmZvcm0gYSBDRkIgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHJvdW5kIHVzaW5nIHRoZQorICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yIElWIGFuZCB0aGUgaW5wdXQgYmxvY2sgQS4gIFdyaXRlIHRoZSByZXN1bHQKKyAgIHRvIHRoZSBvdXRwdXQgYmxvY2sgQiBhbmQgdXBkYXRlIElWLiAgSVYgbmVlZHMgdG8gYmUgMTYgYnl0ZQorICAgYWxpZ25lZC4gICovCitzdGF0aWMgdm9pZAorZG9fYWVzbmlfY2ZiIChjb25zdCBSSUpOREFFTF9jb250ZXh0ICpjdHgsIGludCBkZWNyeXB0X2ZsYWcsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCB1bnNpZ25lZCBjaGFyICpiLCBjb25zdCB1bnNpZ25lZCBjaGFyICphKQoreworI2RlZmluZSBhZXNlbmNfeG1tMV94bW0wICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzFcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tMCAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzFcblx0IgorICBhc20gdm9sYXRpbGUgKCJtb3ZkcWEgJVtpdl0sICUleG1tMFxuXHQiICAgICAgLyogeG1tMCA6PSBJViAgICAgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICglW2tleV0pLCAlJXhtbTFcblx0IiAgICAvKiB4bW0xIDo9IGtleVswXSAqLworICAgICAgICAgICAgICAgICJweG9yICAgJSV4bW0xLCAlJXhtbTBcblx0IiAgICAgLyogeG1tMCBePSBrZXlbMF0gKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDIwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgzMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NDAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDUwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg2MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDgwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg5MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAiY21wbCAkMTAsICVbcm91bmRzXVxuXHQiCisgICAgICAgICAgICAgICAgImp6IC5MZW5jbGFzdCU9XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGIwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhjMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJjbXBsICQxMiwgJVtyb3VuZHNdXG5cdCIKKyAgICAgICAgICAgICAgICAianogLkxlbmNsYXN0JT1cblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ZDAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGUwKCVba2V5XSksICUleG1tMVxuIgorCisgICAgICAgICAgICAgICAgIi5MZW5jbGFzdCU9OlxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jbGFzdF94bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHF1ICVbc3JjXSwgJSV4bW0xXG5cdCIgICAgICAvKiBTYXZlIGlucHV0LiAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMFxuXHQiICAgICAgICAvKiB4bW0wID0gaW5wdXQgXiBJViAgKi8KKworICAgICAgICAgICAgICAgICJjbXBsICQxLCAlW2RlY3J5cHRdXG5cdCIKKyAgICAgICAgICAgICAgICAianogLkxkZWNyeXB0XyU9XG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMCwgJVtpdl1cblx0IiAgICAgICAvKiBbZW5jcnlwdF0gU3RvcmUgSVYuICAqLworICAgICAgICAgICAgICAgICJqbXAgLkxsZWF2ZV8lPVxuIgorICAgICAgICAgICAgICAgICIuTGRlY3J5cHRfJT06XG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMSwgJVtpdl1cbiIgICAgICAgICAvKiBbZGVjcnlwdF0gU3RvcmUgSVYuICAqLworICAgICAgICAgICAgICAgICIuTGxlYXZlXyU9OlxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICVbZHN0XVxuIiAgICAgICAgLyogU3RvcmUgb3V0cHV0LiAgICovCisgICAgICAgICAgICAgICAgOiBbaXZdICIrbSIgKCppdiksIFtkc3RdICI9bSIgKCpiKQorICAgICAgICAgICAgICAgIDogW3NyY10gIm0iICgqYSksCisgICAgICAgICAgICAgICAgICBba2V5XSAiciIgKGN0eC0+a2V5c2NoZW5jKSwKKyAgICAgICAgICAgICAgICAgIFtyb3VuZHNdICJnIiAoY3R4LT5yb3VuZHMpLAorICAgICAgICAgICAgICAgICAgW2RlY3J5cHRdICJtIiAoZGVjcnlwdF9mbGFnKQorICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIpOworI3VuZGVmIGFlc2VuY194bW0xX3htbTAKKyN1bmRlZiBhZXNlbmNsYXN0X3htbTFfeG1tMAorfQorCisvKiBQZXJmb3JtIGEgQ1RSIGVuY3J5cHRpb24gcm91bmQgdXNpbmcgdGhlIGNvdW50ZXIgQ1RSIGFuZCB0aGUgaW5wdXQKKyAgIGJsb2NrIEEuICBXcml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXQgYmxvY2sgQiBhbmQgdXBkYXRlIENUUi4KKyAgIENUUiBuZWVkcyB0byBiZSBhIDE2IGJ5dGUgYWxpZ25lZCBsaXR0bGUtZW5kaWFuIHZhbHVlLiAgKi8KK3N0YXRpYyB2b2lkCitkb19hZXNuaV9jdHIgKGNvbnN0IFJJSk5EQUVMX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3RyLCB1bnNpZ25lZCBjaGFyICpiLCBjb25zdCB1bnNpZ25lZCBjaGFyICphKQoreworI2RlZmluZSBhZXNlbmNfeG1tMV94bW0wICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzFcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tMCAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzFcblx0IgorCisgIGFzbSB2b2xhdGlsZSAoIm1vdmRxYSAlJXhtbTUsICUleG1tMFxuXHQiICAgICAvKiB4bW0wIDo9IENUUiAoeG1tNSkgICovCisgICAgICAgICAgICAgICAgInBjbXBlcWQgJSV4bW0xLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZHEgJDgsICUleG1tMVxuXHQiICAgICAgICAgLyogeG1tMSA9IC0xICovCisKKyAgICAgICAgICAgICAgICAicHNodWZiICUleG1tNiwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAicHN1YnEgICUleG1tMSwgJSV4bW01XG5cdCIgICAgIC8qIHhtbTUrKyAoYmlnIGVuZGlhbikgKi8KKworICAgICAgICAgICAgICAgIC8qIGRldGVjdCBpZiA2NC1iaXQgY2FycnkgaGFuZGxpbmcgaXMgbmVlZGVkICovCisgICAgICAgICAgICAgICAgImNtcGwgICAkMHhmZmZmZmZmZiwgOCglW2N0cl0pXG5cdCIKKyAgICAgICAgICAgICAgICAiam5lICAgIC5Mbm9fY2FycnklPVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgICAkMHhmZmZmZmZmZiwgMTIoJVtjdHJdKVxuXHQiCisgICAgICAgICAgICAgICAgImpuZSAgICAuTG5vX2NhcnJ5JT1cblx0IgorCisgICAgICAgICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW0xXG5cdCIgICAgICAgICAvKiBtb3ZlIGxvd2VyIDY0LWJpdCB0byBoaWdoICovCisgICAgICAgICAgICAgICAgInBzdWJxICAgJSV4bW0xLCAlJXhtbTVcblx0IiAgICAvKiBhZGQgY2FycnkgdG8gdXBwZXIgNjRiaXRzICovCisKKyAgICAgICAgICAgICAgICAiLkxub19jYXJyeSU9OlxuXHQiCisKKyAgICAgICAgICAgICAgICAicHNodWZiICUleG1tNiwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNSwgKCVbY3RyXSlcblx0IiAgIC8qIFVwZGF0ZSBDVFIgKG1lbSkuICAgICAgICovCisKKyAgICAgICAgICAgICAgICAicHhvciAoJVtrZXldKSwgJSV4bW0wXG5cdCIgICAgIC8qIHhtbTEgXj0ga2V5WzBdICAgICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgyMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDQwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg1MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NjAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDcwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg4MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4OTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgJDEwLCAlW3JvdW5kc11cblx0IgorICAgICAgICAgICAgICAgICJqeiAuTGVuY2xhc3QlPVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhiMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4YzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAiY21wbCAkMTIsICVbcm91bmRzXVxuXHQiCisgICAgICAgICAgICAgICAgImp6IC5MZW5jbGFzdCU9XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGQwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhlMCglW2tleV0pLCAlJXhtbTFcbiIKKworICAgICAgICAgICAgICAgICIuTGVuY2xhc3QlPTpcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY2xhc3RfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgIm1vdmRxdSAlW3NyY10sICUleG1tMVxuXHQiICAgICAgLyogeG1tMSA6PSBpbnB1dCAgICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTBcblx0IiAgICAgICAgLyogRW5jQ1RSIF49IGlucHV0ICAqLworICAgICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAlW2RzdF0iICAgICAgICAgIC8qIFN0b3JlIEVuY0NUUi4gICAgKi8KKworICAgICAgICAgICAgICAgIDogW2RzdF0gIj1tIiAoKmIpCisgICAgICAgICAgICAgICAgOiBbc3JjXSAibSIgKCphKSwKKyAgICAgICAgICAgICAgICAgIFtjdHJdICJyIiAoY3RyKSwKKyAgICAgICAgICAgICAgICAgIFtrZXldICJyIiAoY3R4LT5rZXlzY2hlbmMpLAorICAgICAgICAgICAgICAgICAgW3JvdW5kc10gImciIChjdHgtPnJvdW5kcykKKyAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiKTsKKyN1bmRlZiBhZXNlbmNfeG1tMV94bW0wCisjdW5kZWYgYWVzZW5jbGFzdF94bW0xX3htbTAKK30KKworCisvKiBGb3VyIGJsb2NrcyBhdCBhIHRpbWUgdmFyaWFudCBvZiBkb19hZXNuaV9jdHIuICAqLworc3RhdGljIHZvaWQKK2RvX2Flc25pX2N0cl80IChjb25zdCBSSUpOREFFTF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3RyLCB1bnNpZ25lZCBjaGFyICpiLCBjb25zdCB1bnNpZ25lZCBjaGFyICphKQoreworI2RlZmluZSBhZXNlbmNfeG1tMV94bW0wICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzFcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMV94bW0yICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZDFcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMV94bW0zICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZDlcblx0IgorI2RlZmluZSBhZXNlbmNfeG1tMV94bW00ICAgICAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTFcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tMCAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzFcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tMiAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZDFcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tMyAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZDlcblx0IgorI2RlZmluZSBhZXNlbmNsYXN0X3htbTFfeG1tNCAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZTFcblx0IgorCisgIC8qIFJlZ2lzdGVyIHVzYWdlOgorICAgICAgZXNpICAga2V5c2NoZWR1bGUKKyAgICAgIHhtbTAgIENUUi0wCisgICAgICB4bW0xICB0ZW1wIC8gcm91bmQga2V5CisgICAgICB4bW0yICBDVFItMQorICAgICAgeG1tMyAgQ1RSLTIKKyAgICAgIHhtbTQgIENUUi0zCisgICAgICB4bW01ICBjb3B5IG9mICpjdHIKKyAgICAgIHhtbTYgIGVuZGlhbiBzd2FwcGluZyBtYXNrCisgICAqLworCisgIGFzbSB2b2xhdGlsZSAoIm1vdmRxYSAlJXhtbTUsICUleG1tMFxuXHQiICAgLyogeG1tMCwgeG1tMiA6PSBDVFIgKHhtbTUpICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAlJXhtbTAsICUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAgInBjbXBlcWQgJSV4bW0xLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJwc3JsZHEgJDgsICUleG1tMVxuXHQiICAgICAgICAgLyogeG1tMSA9IC0xICovCisKKyAgICAgICAgICAgICAgICAicHNodWZiICUleG1tNiwgJSV4bW0yXG5cdCIgICAgIC8qIHhtbTIgOj0gbGUoeG1tMikgKi8KKyAgICAgICAgICAgICAgICAicHN1YnEgICUleG1tMSwgJSV4bW0yXG5cdCIgICAgIC8qIHhtbTIrKyAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMiwgJSV4bW0zXG5cdCIgICAgIC8qIHhtbTMgOj0geG1tMiAgICAgKi8KKyAgICAgICAgICAgICAgICAicHN1YnEgICUleG1tMSwgJSV4bW0zXG5cdCIgICAgIC8qIHhtbTMrKyAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tMywgJSV4bW00XG5cdCIgICAgIC8qIHhtbTQgOj0geG1tMyAgICAgKi8KKyAgICAgICAgICAgICAgICAicHN1YnEgICUleG1tMSwgJSV4bW00XG5cdCIgICAgIC8qIHhtbTQrKyAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAibW92ZHFhICUleG1tNCwgJSV4bW01XG5cdCIgICAgIC8qIHhtbTUgOj0geG1tNCAgICAgKi8KKyAgICAgICAgICAgICAgICAicHN1YnEgICUleG1tMSwgJSV4bW01XG5cdCIgICAgIC8qIHhtbTUrKyAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIC8qIGRldGVjdCBpZiA2NC1iaXQgY2FycnkgaGFuZGxpbmcgaXMgbmVlZGVkICovCisgICAgICAgICAgICAgICAgImNtcGwgICAkMHhmZmZmZmZmZiwgOCglW2N0cl0pXG5cdCIKKyAgICAgICAgICAgICAgICAiam5lICAgIC5Mbm9fY2FycnklPVxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmwgICAxMiglW2N0cl0pLCAlJWVzaVxuXHQiCisgICAgICAgICAgICAgICAgImJzd2FwbCAlJWVzaVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgICAkMHhmZmZmZmZmYywgJSVlc2lcblx0IgorICAgICAgICAgICAgICAgICJqYiAgICAgLkxub19jYXJyeSU9XG5cdCIgICAgICAgLyogbm8gY2FycnkgKi8KKworICAgICAgICAgICAgICAgICJwc2xsZHEgJDgsICUleG1tMVxuXHQiICAgICAgICAgLyogbW92ZSBsb3dlciA2NC1iaXQgdG8gaGlnaCAqLworICAgICAgICAgICAgICAgICJqZSAgICAgLkxjYXJyeV94bW01JT1cblx0IiAgICAgLyogZXNpID09IDB4ZmZmZmZmZmMgKi8KKyAgICAgICAgICAgICAgICAiY21wbCAgICQweGZmZmZmZmZlLCAlJWVzaVxuXHQiCisgICAgICAgICAgICAgICAgImpiICAgICAuTGNhcnJ5X3htbTQlPVxuXHQiICAgICAvKiBlc2kgPT0gMHhmZmZmZmZmZCAqLworICAgICAgICAgICAgICAgICJqZSAgICAgLkxjYXJyeV94bW0zJT1cblx0IiAgICAgLyogZXNpID09IDB4ZmZmZmZmZmUgKi8KKyAgICAgICAgICAgICAgICAvKiBlc2kgPT0gMHhmZmZmZmZmZiAqLworCisgICAgICAgICAgICAgICAgInBzdWJxICAgJSV4bW0xLCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICIuTGNhcnJ5X3htbTMlPTpcblx0IgorICAgICAgICAgICAgICAgICJwc3VicSAgICUleG1tMSwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAiLkxjYXJyeV94bW00JT06XG5cdCIKKyAgICAgICAgICAgICAgICAicHN1YnEgICAlJXhtbTEsICUleG1tNFxuXHQiCisgICAgICAgICAgICAgICAgIi5MY2FycnlfeG1tNSU9OlxuXHQiCisgICAgICAgICAgICAgICAgInBzdWJxICAgJSV4bW0xLCAlJXhtbTVcblx0IgorCisgICAgICAgICAgICAgICAgIi5Mbm9fY2FycnklPTpcblx0IgorICAgICAgICAgICAgICAgICJtb3ZkcWEgKCVba2V5XSksICUleG1tMVxuXHQiICAgLyogeG1tMSA6PSBrZXlbMF0gICAgKi8KKyAgICAgICAgICAgICAgICAibW92bCAlW3JvdW5kc10sICUlZXNpXG5cdCIKKworICAgICAgICAgICAgICAgICJwc2h1ZmIgJSV4bW02LCAlJXhtbTJcblx0IiAgICAgLyogeG1tMiA6PSBiZSh4bW0yKSAqLworICAgICAgICAgICAgICAgICJwc2h1ZmIgJSV4bW02LCAlJXhtbTNcblx0IiAgICAgLyogeG1tMyA6PSBiZSh4bW0zKSAqLworICAgICAgICAgICAgICAgICJwc2h1ZmIgJSV4bW02LCAlJXhtbTRcblx0IiAgICAgLyogeG1tNCA6PSBiZSh4bW00KSAqLworICAgICAgICAgICAgICAgICJwc2h1ZmIgJSV4bW02LCAlJXhtbTVcblx0IiAgICAgLyogeG1tNSA6PSBiZSh4bW01KSAqLworICAgICAgICAgICAgICAgICJtb3ZkcWEgJSV4bW01LCAoJVtjdHJdKVxuXHQiICAgLyogVXBkYXRlIENUUiAobWVtKS4gICovCisKKyAgICAgICAgICAgICAgICAicHhvciAgICUleG1tMSwgJSV4bW0wXG5cdCIgICAgIC8qIHhtbTAgXj0ga2V5WzBdICAgICovCisgICAgICAgICAgICAgICAgInB4b3IgICAlJXhtbTEsICUleG1tMlxuXHQiICAgICAvKiB4bW0yIF49IGtleVswXSAgICAqLworICAgICAgICAgICAgICAgICJweG9yICAgJSV4bW0xLCAlJXhtbTNcblx0IiAgICAgLyogeG1tMyBePSBrZXlbMF0gICAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAgICUleG1tMSwgJSV4bW00XG5cdCIgICAgIC8qIHhtbTQgXj0ga2V5WzBdICAgICovCisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHgyMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4MzAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDQwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg1MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4NjAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweDcwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHg4MCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4OTAoJVtrZXldKSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGEwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgImNtcGwgJDEwLCAlJWVzaVxuXHQiCisgICAgICAgICAgICAgICAgImp6IC5MZW5jbGFzdCU9XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0wCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW00CisgICAgICAgICAgICAgICAgIm1vdmRxYSAweGIwKCVba2V5XSksICUleG1tMVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhjMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgICJjbXBsICQxMiwgJSVlc2lcblx0IgorICAgICAgICAgICAgICAgICJqeiAuTGVuY2xhc3QlPVxuXHQiCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTIKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0zCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tNAorICAgICAgICAgICAgICAgICJtb3ZkcWEgMHhkMCglW2tleV0pLCAlJXhtbTFcblx0IgorICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTAKKyAgICAgICAgICAgICAgICBhZXNlbmNfeG1tMV94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jX3htbTFfeG1tMworICAgICAgICAgICAgICAgIGFlc2VuY194bW0xX3htbTQKKyAgICAgICAgICAgICAgICAibW92ZHFhIDB4ZTAoJVtrZXldKSwgJSV4bW0xXG4iCisKKyAgICAgICAgICAgICAgICAiLkxlbmNsYXN0JT06XG5cdCIKKyAgICAgICAgICAgICAgICBhZXNlbmNsYXN0X3htbTFfeG1tMAorICAgICAgICAgICAgICAgIGFlc2VuY2xhc3RfeG1tMV94bW0yCisgICAgICAgICAgICAgICAgYWVzZW5jbGFzdF94bW0xX3htbTMKKyAgICAgICAgICAgICAgICBhZXNlbmNsYXN0X3htbTFfeG1tNAorCisgICAgICAgICAgICAgICAgIm1vdmRxdSAoJVtzcmNdKSwgJSV4bW0xXG5cdCIgICAgLyogR2V0IGJsb2NrIDEuICAgICAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMFxuXHQiICAgICAgICAvKiBFbmNDVFItMSBePSBpbnB1dCAqLworICAgICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJVtkc3RdKVxuXHQiICAgIC8qIFN0b3JlIGJsb2NrIDEgICAgICovCisKKyAgICAgICAgICAgICAgICAibW92ZHF1IDE2KCVbc3JjXSksICUleG1tMVxuXHQiICAvKiBHZXQgYmxvY2sgMi4gICAgICAqLworICAgICAgICAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW0yXG5cdCIgICAgICAgIC8qIEVuY0NUUi0yIF49IGlucHV0ICovCisgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTIsIDE2KCVbZHN0XSlcblx0IiAgLyogU3RvcmUgYmxvY2sgMi4gICAgKi8KKworICAgICAgICAgICAgICAgICJtb3ZkcXUgMzIoJVtzcmNdKSwgJSV4bW0xXG5cdCIgIC8qIEdldCBibG9jayAzLiAgICAgICovCisgICAgICAgICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTNcblx0IiAgICAgICAgLyogRW5jQ1RSLTMgXj0gaW5wdXQgKi8KKyAgICAgICAgICAgICAgICAibW92ZHF1ICUleG1tMywgMzIoJVtkc3RdKVxuXHQiICAvKiBTdG9yZSBibG9jayAzLiAgICAqLworCisgICAgICAgICAgICAgICAgIm1vdmRxdSA0OCglW3NyY10pLCAlJXhtbTFcblx0IiAgLyogR2V0IGJsb2NrIDQuICAgICAgKi8KKyAgICAgICAgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tNFxuXHQiICAgICAgICAvKiBFbmNDVFItNCBePSBpbnB1dCAqLworICAgICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW00LCA0OCglW2RzdF0pIiAgICAgIC8qIFN0b3JlIGJsb2NrIDQuICAgKi8KKworICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICA6IFtjdHJdICJyIiAoY3RyKSwKKyAgICAgICAgICAgICAgICAgIFtzcmNdICJyIiAoYSksCisgICAgICAgICAgICAgICAgICBbZHN0XSAiciIgKGIpLAorICAgICAgICAgICAgICAgICAgW2tleV0gInIiIChjdHgtPmtleXNjaGVuYyksCisgICAgICAgICAgICAgICAgICBbcm91bmRzXSAiZyIgKGN0eC0+cm91bmRzKQorICAgICAgICAgICAgICAgIDogIiVlc2kiLCAiY2MiLCAibWVtb3J5Iik7CisjdW5kZWYgYWVzZW5jX3htbTFfeG1tMAorI3VuZGVmIGFlc2VuY194bW0xX3htbTIKKyN1bmRlZiBhZXNlbmNfeG1tMV94bW0zCisjdW5kZWYgYWVzZW5jX3htbTFfeG1tNAorI3VuZGVmIGFlc2VuY2xhc3RfeG1tMV94bW0wCisjdW5kZWYgYWVzZW5jbGFzdF94bW0xX3htbTIKKyN1bmRlZiBhZXNlbmNsYXN0X3htbTFfeG1tMworI3VuZGVmIGFlc2VuY2xhc3RfeG1tMV94bW00Cit9CisKKyNlbmRpZiAvKlVTRV9BRVNOSSovCisKKworc3RhdGljIHVuc2lnbmVkIGludAorcmlqbmRhZWxfZW5jcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqYiwgY29uc3QgYnl0ZSAqYSkKK3sKKyAgUklKTkRBRUxfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgaW50IGJ1cm5fc3RhY2s7CisKKyAgaWYgKDApCisgICAgOworI2lmZGVmIFVTRV9QQURMT0NLCisgIGVsc2UgaWYgKGN0eC0+dXNlX3BhZGxvY2spCisgICAgeworICAgICAgZG9fcGFkbG9jayAoY3R4LCAwLCBiLCBhKTsKKyAgICAgIGJ1cm5fc3RhY2sgPSAoNDggKyAxNSAvKiBwb3NzaWJsZSBwYWRkaW5nIGZvciBhbGlnbm1lbnQgKi8pOworICAgIH0KKyNlbmRpZiAvKlVTRV9QQURMT0NLKi8KKyNpZmRlZiBVU0VfQUVTTkkKKyAgZWxzZSBpZiAoY3R4LT51c2VfYWVzbmkpCisgICAgeworICAgICAgYWVzbmlfcHJlcGFyZSAoKTsKKyAgICAgIGRvX2Flc25pX2VuYyAoY3R4LCBiLCBhKTsKKyAgICAgIGFlc25pX2NsZWFudXAgKCk7CisgICAgICBidXJuX3N0YWNrID0gMDsKKyAgICB9CisjZW5kaWYgLypVU0VfQUVTTkkqLworICBlbHNlCisgICAgeworICAgICAgZG9fZW5jcnlwdCAoY3R4LCBiLCBhKTsKKyAgICAgIGJ1cm5fc3RhY2sgPSAoNTYgKyAyKnNpemVvZihpbnQpKTsKKyAgICB9CisKKyAgcmV0dXJuIGJ1cm5fc3RhY2s7Cit9CisKKworLyogQnVsayBlbmNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDRkIgbW9kZS4gIENhbGxlciBuZWVkcyB0bworICAgbWFrZSBzdXJlIHRoYXQgSVYgaXMgYWxpZ25lZCBvbiBhbiB1bnNpZ25lZCBsb25nIGJvdW5kYXJ5LiAgVGhpcworICAgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mCisgICBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X2Flc19jZmJfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpCit7CisgIFJJSk5EQUVMX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBpbnQgYnVybl9kZXB0aCA9IDQ4ICsgMipzaXplb2YoaW50KTsKKworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgZWxzZSBpZiAoY3R4LT51c2VfcGFkbG9jaykKKyAgICB7CisgICAgICAvKiBGaXhtZTogTGV0IFBhZGxvY2sgZG8gdGhlIENGQmluZy4gICovCisgICAgICBmb3IgKCA7bmJsb2NrczsgbmJsb2Nrcy0tICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEVuY3J5cHQgdGhlIElWLiAqLworICAgICAgICAgIGRvX3BhZGxvY2sgKGN0eCwgMCwgaXYsIGl2KTsKKyAgICAgICAgICAvKiBYT1IgdGhlIGlucHV0IHdpdGggdGhlIElWIGFuZCBzdG9yZSBpbnB1dCBpbnRvIElWLiAgKi8KKyAgICAgICAgICBidWZfeG9yXzJkc3Qob3V0YnVmLCBpdiwgaW5idWYsIEJMT0NLU0laRSk7CisgICAgICAgICAgb3V0YnVmICs9IEJMT0NLU0laRTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworI2lmZGVmIFVTRV9BRVNOSQorICBlbHNlIGlmIChjdHgtPnVzZV9hZXNuaSkKKyAgICB7CisgICAgICBhZXNuaV9wcmVwYXJlICgpOworICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICBkb19hZXNuaV9jZmIgKGN0eCwgMCwgaXYsIG91dGJ1ZiwgaW5idWYpOworICAgICAgICAgIG91dGJ1ZiArPSBCTE9DS1NJWkU7CisgICAgICAgICAgaW5idWYgICs9IEJMT0NLU0laRTsKKyAgICAgICAgfQorICAgICAgYWVzbmlfY2xlYW51cCAoKTsKKworICAgICAgYnVybl9kZXB0aCA9IDA7IC8qIE5vIHN0YWNrIHVzYWdlLiAqLworICAgIH0KKyNlbmRpZiAvKlVTRV9BRVNOSSovCisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKCA7bmJsb2NrczsgbmJsb2Nrcy0tICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEVuY3J5cHQgdGhlIElWLiAqLworICAgICAgICAgIGRvX2VuY3J5cHRfYWxpZ25lZCAoY3R4LCBpdiwgaXYpOworICAgICAgICAgIC8qIFhPUiB0aGUgaW5wdXQgd2l0aCB0aGUgSVYgYW5kIHN0b3JlIGlucHV0IGludG8gSVYuICAqLworICAgICAgICAgIGJ1Zl94b3JfMmRzdChvdXRidWYsIGl2LCBpbmJ1ZiwgQkxPQ0tTSVpFKTsKKyAgICAgICAgICBvdXRidWYgKz0gQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSBCTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGJ1cm5fZGVwdGgpCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybl9kZXB0aCk7Cit9CisKKworLyogQnVsayBlbmNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDQkMgbW9kZS4gIENhbGxlciBuZWVkcyB0bworICAgbWFrZSBzdXJlIHRoYXQgSVYgaXMgYWxpZ25lZCBvbiBhbiB1bnNpZ25lZCBsb25nIGJvdW5kYXJ5LiAgVGhpcworICAgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mCisgICBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X2Flc19jYmNfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MsIGludCBjYmNfbWFjKQoreworICBSSUpOREFFTF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciAqbGFzdF9pdjsKKyAgdW5zaWduZWQgaW50IGJ1cm5fZGVwdGggPSA0OCArIDIqc2l6ZW9mKGludCk7CisjaWZkZWYgVVNFX0FFU05JCisgIGludCB1c2VfYWVzbmkgPSBjdHgtPnVzZV9hZXNuaTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FFU05JCisgIGlmICh1c2VfYWVzbmkpCisgICAgYWVzbmlfcHJlcGFyZSAoKTsKKyNlbmRpZiAvKlVTRV9BRVNOSSovCisKKyAgbGFzdF9pdiA9IGl2OworCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIGlmICgwKQorICAgICAgICA7CisjaWZkZWYgVVNFX0FFU05JCisgICAgICBlbHNlIGlmICh1c2VfYWVzbmkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiB+MzUlIHNwZWVkIHVwIG9uIFNhbmR5LUJyaWRnZSB3aGVuIGRvaW5nIHhvcmluZyBhbmQgY29weWluZyB3aXRoCisgICAgICAgICAgICAgU1NFIHJlZ2lzdGVycy4gICovCisgICAgICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICVbaXZdLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmRxdSAlW2luYnVmXSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0xLCAlW291dGJ1Zl1cblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDogW2l2XSAibSIgKCpsYXN0X2l2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2luYnVmXSAibSIgKCppbmJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRidWZdICJtIiAoKm91dGJ1ZikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIgKTsKKworICAgICAgICAgIGRvX2Flc25pX2VuYyAoY3R4LCBvdXRidWYsIG91dGJ1Zik7CisgICAgICAgIH0KKyNlbmRpZiAvKlVTRV9BRVNOSSovCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBidWZfeG9yKG91dGJ1ZiwgaW5idWYsIGxhc3RfaXYsIEJMT0NLU0laRSk7CisKKyAgICAgICAgICBpZiAoMCkKKyAgICAgICAgICAgIDsKKyNpZmRlZiBVU0VfUEFETE9DSworICAgICAgICAgIGVsc2UgaWYgKGN0eC0+dXNlX3BhZGxvY2spCisgICAgICAgICAgICBkb19wYWRsb2NrIChjdHgsIDAsIG91dGJ1Ziwgb3V0YnVmKTsKKyNlbmRpZiAvKlVTRV9QQURMT0NLKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkb19lbmNyeXB0IChjdHgsIG91dGJ1Ziwgb3V0YnVmICk7CisgICAgICAgIH0KKworICAgICAgbGFzdF9pdiA9IG91dGJ1ZjsKKyAgICAgIGluYnVmICs9IEJMT0NLU0laRTsKKyAgICAgIGlmICghY2JjX21hYykKKyAgICAgICAgb3V0YnVmICs9IEJMT0NLU0laRTsKKyAgICB9CisKKyAgaWYgKGxhc3RfaXYgIT0gaXYpCisgICAgeworICAgICAgaWYgKDApCisgICAgICAgIDsKKyNpZmRlZiBVU0VfQUVTTkkKKyAgICAgIGVsc2UgaWYgKHVzZV9hZXNuaSkKKyAgICAgICAgYXNtIHZvbGF0aWxlICgibW92ZHF1ICVbbGFzdF0sICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICVbaXZdXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICA6IC8qIE5vIG91dHB1dCAqLworICAgICAgICAgICAgICAgICAgICAgIDogW2xhc3RdICJtIiAoKmxhc3RfaXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgW2l2XSAibSIgKCppdikKKyAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiICk7CisjZW5kaWYgLypVU0VfQUVTTkkqLworICAgICAgZWxzZQorICAgICAgICBidWZfY3B5IChpdiwgbGFzdF9pdiwgQkxPQ0tTSVpFKTsKKyAgICB9CisKKyNpZmRlZiBVU0VfQUVTTkkKKyAgIGlmICh1c2VfYWVzbmkpCisgICAgIHsKKyAgICAgICBhZXNuaV9jbGVhbnVwICgpOworICAgICAgIGJ1cm5fZGVwdGggPSAwOyAvKiBObyBzdGFjayB1c2FnZS4gKi8KKyAgICAgfQorI2VuZGlmIC8qVVNFX0FFU05JKi8KKworICBpZiAoYnVybl9kZXB0aCkKKyAgICBfZ2NyeV9idXJuX3N0YWNrIChidXJuX2RlcHRoKTsKK30KKworCisvKiBCdWxrIGVuY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENUUiBtb2RlLiAgQ2FsbGVyIG5lZWRzIHRvCisgICBtYWtlIHN1cmUgdGhhdCBDVFIgaXMgYWxpZ25lZCBvbiBhIDE2IGJ5dGUgYm91bmRhcnkgaWYgQUVTTkk7IHRoZQorICAgbWluaW11bSBhbGlnbm1lbnQgaXMgZm9yIGFuIHUzMi4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZAorICAgZm9yIHRoZSBidWxrIGVuY3J5cHRpb24gZmVhdHVyZSBvZiBjaXBoZXIuYy4gIENUUiBpcyBleHBlY3RlZCB0byBiZQorICAgb2Ygc2l6ZSBCTE9DS1NJWkUuICovCit2b2lkCitfZ2NyeV9hZXNfY3RyX2VuYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqY3RyLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2NrcykKK3sKKyAgUklKTkRBRUxfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgY2hhciAqb3V0YnVmID0gb3V0YnVmX2FyZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIHVuc2lnbmVkIGludCBidXJuX2RlcHRoID0gNDggKyAyKnNpemVvZihpbnQpOworICBpbnQgaTsKKworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgVVNFX0FFU05JCisgIGVsc2UgaWYgKGN0eC0+dXNlX2Flc25pKQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJlX21hc2tbMTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKSA9CisgICAgICAgIHsgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCB9OworCisgICAgICBhZXNuaV9wcmVwYXJlICgpOworCisgICAgICBhc20gdm9sYXRpbGUgKCJtb3ZkcWEgJVttYXNrXSwgJSV4bW02XG5cdCIgLyogUHJlbG9hZCBtYXNrICovCisgICAgICAgICAgICAgICAgICAgICJtb3ZkcWEgJVtjdHJdLCAlJXhtbTVcblx0IiAgLyogUHJlbG9hZCBDVFIgKi8KKyAgICAgICAgICAgICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgOiBbbWFza10gIm0iICgqYmVfbWFzayksCisgICAgICAgICAgICAgICAgICAgICAgW2N0cl0gIm0iICgqY3RyKQorICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKKworICAgICAgZm9yICggO25ibG9ja3MgPiAzIDsgbmJsb2NrcyAtPSA0ICkKKyAgICAgICAgeworICAgICAgICAgIGRvX2Flc25pX2N0cl80IChjdHgsIGN0ciwgb3V0YnVmLCBpbmJ1Zik7CisgICAgICAgICAgb3V0YnVmICs9IDQqQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSA0KkJMT0NLU0laRTsKKyAgICAgICAgfQorICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICBkb19hZXNuaV9jdHIgKGN0eCwgY3RyLCBvdXRidWYsIGluYnVmKTsKKyAgICAgICAgICBvdXRidWYgKz0gQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSBCTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICAgIGFlc25pX2NsZWFudXAgKCk7CisgICAgICBhZXNuaV9jbGVhbnVwXzJfNiAoKTsKKworICAgICAgYnVybl9kZXB0aCA9IDA7IC8qIE5vIHN0YWNrIHVzYWdlLiAqLworICAgIH0KKyNlbmRpZiAvKlVTRV9BRVNOSSovCisgIGVsc2UKKyAgICB7CisgICAgICB1bmlvbiB7IHVuc2lnbmVkIGNoYXIgeDFbMTZdOyB1MzIgeDMyWzRdOyB9IHRtcDsKKworICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmNyeXB0IHRoZSBjb3VudGVyLiAqLworICAgICAgICAgIGRvX2VuY3J5cHRfYWxpZ25lZCAoY3R4LCB0bXAueDEsIGN0cik7CisgICAgICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBlbmNyeXB0ZWQgY291bnRlciBhbmQgc3RvcmUgaW4gb3V0cHV0LiAgKi8KKyAgICAgICAgICBidWZfeG9yKG91dGJ1ZiwgdG1wLngxLCBpbmJ1ZiwgQkxPQ0tTSVpFKTsKKyAgICAgICAgICBvdXRidWYgKz0gQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSBCTE9DS1NJWkU7CisgICAgICAgICAgLyogSW5jcmVtZW50IHRoZSBjb3VudGVyLiAgKi8KKyAgICAgICAgICBmb3IgKGkgPSBCTE9DS1NJWkU7IGkgPiAwOyBpLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGN0cltpLTFdKys7CisgICAgICAgICAgICAgIGlmIChjdHJbaS0xXSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBpZiAoYnVybl9kZXB0aCkKKyAgICBfZ2NyeV9idXJuX3N0YWNrIChidXJuX2RlcHRoKTsKK30KKworCisMCisvKiBEZWNyeXB0IG9uZSBibG9jay4gIEEgYW5kIEIgbmVlZCB0byBiZSBhbGlnbmVkIG9uIGEgNCBieXRlIGJvdW5kYXJ5CisgICBhbmQgdGhlIGRlY3J5cHRpb24gbXVzdCBoYXZlIGJlZW4gcHJlcGFyZWQuICBBIGFuZCBCIG1heSBiZSB0aGUKKyAgIHNhbWUuICovCitzdGF0aWMgdm9pZAorZG9fZGVjcnlwdF9hbGlnbmVkIChSSUpOREFFTF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEpCit7CisjaWZkZWYgVVNFX0FNRDY0X0FTTQorICBfZ2NyeV9hZXNfYW1kNjRfZGVjcnlwdF9ibG9jayhjdHgtPmtleXNjaGRlYywgYiwgYSwgY3R4LT5yb3VuZHMpOworI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKyAgX2djcnlfYWVzX2FybV9kZWNyeXB0X2Jsb2NrKGN0eC0+a2V5c2NoZGVjLCBiLCBhLCBjdHgtPnJvdW5kcyk7CisjZWxzZQorI2RlZmluZSByayAgKGN0eC0+a2V5c2NoZGVjKQorICBpbnQgcm91bmRzID0gY3R4LT5yb3VuZHM7CisgIGludCByOworICB1bmlvbgorICB7CisgICAgdTMyICB0ZW1wdTMyWzRdOyAgLyogRm9yY2UgY29ycmVjdCBhbGlnbm1lbnQuICovCisgICAgYnl0ZSB0ZW1wWzRdWzRdOworICB9IHU7CisKKworICAqKCh1MzJfYV90Kil1LnRlbXBbMF0pID0gKigodTMyX2FfdCopKGEgICApKSBeICooKHUzMl9hX3QqKXJrW3JvdW5kc11bMF0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbMV0pID0gKigodTMyX2FfdCopKGErIDQpKSBeICooKHUzMl9hX3QqKXJrW3JvdW5kc11bMV0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbMl0pID0gKigodTMyX2FfdCopKGErIDgpKSBeICooKHUzMl9hX3QqKXJrW3JvdW5kc11bMl0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbM10pID0gKigodTMyX2FfdCopKGErMTIpKSBeICooKHUzMl9hX3QqKXJrW3JvdW5kc11bM10pOworCisgICooKHUzMl9hX3QqKShiICAgKSkgICAgPSAoKigodTMyX2FfdCopVDVbdS50ZW1wWzBdWzBdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDZbdS50ZW1wWzNdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDdbdS50ZW1wWzJdWzJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDhbdS50ZW1wWzFdWzNdXSkpOworICAqKCh1MzJfYV90KikoYisgNCkpICAgID0gKCooKHUzMl9hX3QqKVQ1W3UudGVtcFsxXVswXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ2W3UudGVtcFswXVsxXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ3W3UudGVtcFszXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ4W3UudGVtcFsyXVszXV0pKTsKKyAgKigodTMyX2FfdCopKGIrIDgpKSAgICA9ICgqKCh1MzJfYV90KilUNVt1LnRlbXBbMl1bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUNlt1LnRlbXBbMV1bMV1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUN1t1LnRlbXBbMF1bMl1dKQorICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUOFt1LnRlbXBbM11bM11dKSk7CisgICooKHUzMl9hX3QqKShiKzEyKSkgICAgPSAoKigodTMyX2FfdCopVDVbdS50ZW1wWzNdWzBdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDZbdS50ZW1wWzJdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDdbdS50ZW1wWzFdWzJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDhbdS50ZW1wWzBdWzNdXSkpOworCisgIGZvciAociA9IHJvdW5kcy0xOyByID4gMTsgci0tKQorICAgIHsKKyAgICAgICooKHUzMl9hX3QqKXUudGVtcFswXSkgPSAqKCh1MzJfYV90KikoYiAgICkpIF4gKigodTMyX2FfdCopcmtbcl1bMF0pOworICAgICAgKigodTMyX2FfdCopdS50ZW1wWzFdKSA9ICooKHUzMl9hX3QqKShiKyA0KSkgXiAqKCh1MzJfYV90Kilya1tyXVsxXSk7CisgICAgICAqKCh1MzJfYV90Kil1LnRlbXBbMl0pID0gKigodTMyX2FfdCopKGIrIDgpKSBeICooKHUzMl9hX3QqKXJrW3JdWzJdKTsKKyAgICAgICooKHUzMl9hX3QqKXUudGVtcFszXSkgPSAqKCh1MzJfYV90KikoYisxMikpIF4gKigodTMyX2FfdCopcmtbcl1bM10pOworICAgICAgKigodTMyX2FfdCopKGIgICApKSAgICA9ICgqKCh1MzJfYV90KilUNVt1LnRlbXBbMF1bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDZbdS50ZW1wWzNdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ3W3UudGVtcFsyXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUOFt1LnRlbXBbMV1bM11dKSk7CisgICAgICAqKCh1MzJfYV90KikoYisgNCkpICAgID0gKCooKHUzMl9hX3QqKVQ1W3UudGVtcFsxXVswXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUNlt1LnRlbXBbMF1bMV1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDdbdS50ZW1wWzNdWzJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ4W3UudGVtcFsyXVszXV0pKTsKKyAgICAgICooKHUzMl9hX3QqKShiKyA4KSkgICAgPSAoKigodTMyX2FfdCopVDVbdS50ZW1wWzJdWzBdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ2W3UudGVtcFsxXVsxXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUN1t1LnRlbXBbMF1bMl1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDhbdS50ZW1wWzNdWzNdXSkpOworICAgICAgKigodTMyX2FfdCopKGIrMTIpKSAgICA9ICgqKCh1MzJfYV90KilUNVt1LnRlbXBbM11bMF1dKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKigodTMyX2FfdCopVDZbdS50ZW1wWzJdWzFdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICooKHUzMl9hX3QqKVQ3W3UudGVtcFsxXVsyXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAqKCh1MzJfYV90KilUOFt1LnRlbXBbMF1bM11dKSk7CisgICAgfQorCisgIC8qIExhc3Qgcm91bmQgaXMgc3BlY2lhbC4gKi8KKyAgKigodTMyX2FfdCopdS50ZW1wWzBdKSA9ICooKHUzMl9hX3QqKShiICAgKSkgXiAqKCh1MzJfYV90Kilya1sxXVswXSk7CisgICooKHUzMl9hX3QqKXUudGVtcFsxXSkgPSAqKCh1MzJfYV90KikoYisgNCkpIF4gKigodTMyX2FfdCopcmtbMV1bMV0pOworICAqKCh1MzJfYV90Kil1LnRlbXBbMl0pID0gKigodTMyX2FfdCopKGIrIDgpKSBeICooKHUzMl9hX3QqKXJrWzFdWzJdKTsKKyAgKigodTMyX2FfdCopdS50ZW1wWzNdKSA9ICooKHUzMl9hX3QqKShiKzEyKSkgXiAqKCh1MzJfYV90Kilya1sxXVszXSk7CisgIGJbIDBdID0gUzVbdS50ZW1wWzBdWzBdXTsKKyAgYlsgMV0gPSBTNVt1LnRlbXBbM11bMV1dOworICBiWyAyXSA9IFM1W3UudGVtcFsyXVsyXV07CisgIGJbIDNdID0gUzVbdS50ZW1wWzFdWzNdXTsKKyAgYlsgNF0gPSBTNVt1LnRlbXBbMV1bMF1dOworICBiWyA1XSA9IFM1W3UudGVtcFswXVsxXV07CisgIGJbIDZdID0gUzVbdS50ZW1wWzNdWzJdXTsKKyAgYlsgN10gPSBTNVt1LnRlbXBbMl1bM11dOworICBiWyA4XSA9IFM1W3UudGVtcFsyXVswXV07CisgIGJbIDldID0gUzVbdS50ZW1wWzFdWzFdXTsKKyAgYlsxMF0gPSBTNVt1LnRlbXBbMF1bMl1dOworICBiWzExXSA9IFM1W3UudGVtcFszXVszXV07CisgIGJbMTJdID0gUzVbdS50ZW1wWzNdWzBdXTsKKyAgYlsxM10gPSBTNVt1LnRlbXBbMl1bMV1dOworICBiWzE0XSA9IFM1W3UudGVtcFsxXVsyXV07CisgIGJbMTVdID0gUzVbdS50ZW1wWzBdWzNdXTsKKyAgKigodTMyX2FfdCopKGIgICApKSBePSAqKCh1MzJfYV90Kilya1swXVswXSk7CisgICooKHUzMl9hX3QqKShiKyA0KSkgXj0gKigodTMyX2FfdCopcmtbMF1bMV0pOworICAqKCh1MzJfYV90KikoYisgOCkpIF49ICooKHUzMl9hX3QqKXJrWzBdWzJdKTsKKyAgKigodTMyX2FfdCopKGIrMTIpKSBePSAqKCh1MzJfYV90Kilya1swXVszXSk7CisjdW5kZWYgcmsKKyNlbmRpZiAvKiFVU0VfQU1ENjRfQVNNICYmICFVU0VfQVJNX0FTTSovCit9CisKKworLyogRGVjcnlwdCBvbmUgYmxvY2suICBBWCBhbmQgQlggbWF5IGJlIHRoZSBzYW1lLiAqLworc3RhdGljIHZvaWQKK2RvX2RlY3J5cHQgKFJJSk5EQUVMX2NvbnRleHQgKmN0eCwgYnl0ZSAqYngsIGNvbnN0IGJ5dGUgKmF4KQoreworI2lmICFkZWZpbmVkKFVTRV9BTUQ2NF9BU00pICYmICFkZWZpbmVkKFVTRV9BUk1fQVNNKQorICAvKiBCWCBhbmQgQVggYXJlIG5vdCBuZWNlc3NhcnkgY29ycmVjdGx5IGFsaWduZWQuICBUaHVzIHdlIG1pZ2h0CisgICAgIG5lZWQgdG8gY29weSB0aGVtIGhlcmUuICBXZSB0cnkgdG8gYWxpZ24gdG8gYSAxNiBieXRlcy4gKi8KKyAgaWYgKCgoc2l6ZV90KWF4ICYgMHgwZikgfHwgKChzaXplX3QpYnggJiAweDBmKSkKKyAgICB7CisgICAgICB1bmlvbgorICAgICAgeworICAgICAgICB1MzIgIGR1bW15WzRdOworICAgICAgICBieXRlIGFbMTZdIEFUVFJfQUxJR05FRF8xNjsKKyAgICAgIH0gYTsKKyAgICAgIHVuaW9uCisgICAgICB7CisgICAgICAgIHUzMiAgZHVtbXlbNF07CisgICAgICAgIGJ5dGUgYlsxNl0gQVRUUl9BTElHTkVEXzE2OworICAgICAgfSBiOworCisgICAgICBidWZfY3B5IChhLmEsIGF4LCAxNik7CisgICAgICBkb19kZWNyeXB0X2FsaWduZWQgKGN0eCwgYi5iLCBhLmEpOworICAgICAgYnVmX2NweSAoYngsIGIuYiwgMTYpOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIVVTRV9BTUQ2NF9BU00gJiYgIVVTRV9BUk1fQVNNKi8KKyAgICB7CisgICAgICBkb19kZWNyeXB0X2FsaWduZWQgKGN0eCwgYngsIGF4KTsKKyAgICB9Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitjaGVja19kZWNyeXB0aW9uX3ByZXBhcmF0aW9uIChSSUpOREFFTF9jb250ZXh0ICpjdHgpCit7CisgIGlmICgwKQorICAgIDsKKyNpZmRlZiBVU0VfUEFETE9DSworICBlbHNlIGlmIChjdHgtPnVzZV9wYWRsb2NrKQorICAgIHsgLyogUGFkbG9jayBkb2VzIG5vdCBuZWVkIGRlY3J5cHRpb24gc3Via2V5cy4gKi8gfQorI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworICBlbHNlIGlmICggIWN0eC0+ZGVjcnlwdGlvbl9wcmVwYXJlZCApCisgICAgeworICAgICAgcHJlcGFyZV9kZWNyeXB0aW9uICggY3R4ICk7CisgICAgICBjdHgtPmRlY3J5cHRpb25fcHJlcGFyZWQgPSAxOworICAgIH0KK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50CityaWpuZGFlbF9kZWNyeXB0ICh2b2lkICpjb250ZXh0LCBieXRlICpiLCBjb25zdCBieXRlICphKQoreworICBSSUpOREFFTF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBpbnQgYnVybl9zdGFjazsKKworICBjaGVja19kZWNyeXB0aW9uX3ByZXBhcmF0aW9uIChjdHgpOworCisgIGlmICgwKQorICAgIDsKKyNpZmRlZiBVU0VfUEFETE9DSworICBlbHNlIGlmIChjdHgtPnVzZV9wYWRsb2NrKQorICAgIHsKKyAgICAgIGRvX3BhZGxvY2sgKGN0eCwgMSwgYiwgYSk7CisgICAgICBidXJuX3N0YWNrID0gKDQ4ICsgMipzaXplb2YoaW50KSAvKiBGSVhNRSAqLyk7CisgICAgfQorI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworI2lmZGVmIFVTRV9BRVNOSQorICBlbHNlIGlmIChjdHgtPnVzZV9hZXNuaSkKKyAgICB7CisgICAgICBhZXNuaV9wcmVwYXJlICgpOworICAgICAgZG9fYWVzbmlfZGVjIChjdHgsIGIsIGEpOworICAgICAgYWVzbmlfY2xlYW51cCAoKTsKKyAgICAgIGJ1cm5fc3RhY2sgPSAwOworICAgIH0KKyNlbmRpZiAvKlVTRV9BRVNOSSovCisgIGVsc2UKKyAgICB7CisgICAgICBkb19kZWNyeXB0IChjdHgsIGIsIGEpOworICAgICAgYnVybl9zdGFjayA9ICg1NisyKnNpemVvZihpbnQpKTsKKyAgICB9CisKKyAgcmV0dXJuIGJ1cm5fc3RhY2s7Cit9CisKKworLyogQnVsayBkZWNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDRkIgbW9kZS4gIENhbGxlciBuZWVkcyB0bworICAgbWFrZSBzdXJlIHRoYXQgSVYgaXMgYWxpZ25lZCBvbiBhbiB1bnNpZ25lZCBsb25nIGJvdW5kYXJ5LiAgVGhpcworICAgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mCisgICBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X2Flc19jZmJfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpCit7CisgIFJJSk5EQUVMX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBpbnQgYnVybl9kZXB0aCA9IDQ4ICsgMipzaXplb2YoaW50KTsKKworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgVVNFX1BBRExPQ0sKKyAgZWxzZSBpZiAoY3R4LT51c2VfcGFkbG9jaykKKyAgICB7CisgICAgICAvKiBGaXhtZTogIExldCBQYWRsb2NrIGRvIHRoZSBDRkJpbmcuICAqLworICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICBkb19wYWRsb2NrIChjdHgsIDAsIGl2LCBpdik7CisgICAgICAgICAgYnVmX3hvcl9uX2NvcHkob3V0YnVmLCBpdiwgaW5idWYsIEJMT0NLU0laRSk7CisgICAgICAgICAgb3V0YnVmICs9IEJMT0NLU0laRTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworI2lmZGVmIFVTRV9BRVNOSQorICBlbHNlIGlmIChjdHgtPnVzZV9hZXNuaSkKKyAgICB7CisgICAgICBhZXNuaV9wcmVwYXJlICgpOworCisgICAgICAvKiBDRkIgZGVjcnlwdGlvbiBjYW4gYmUgcGFyYWxsZWxpemVkICovCisgICAgICBmb3IgKCA7bmJsb2NrcyA+PSA0OyBuYmxvY2tzIC09IDQpCisgICAgICAgIHsKKyAgICAgICAgICBhc20gdm9sYXRpbGUKKyAgICAgICAgICAgICgibW92ZHF1ICglW2l2XSksICAgICAgICAlJXhtbTFcblx0IiAvKiBsb2FkIGlucHV0IGJsb2NrcyAqLworICAgICAgICAgICAgICJtb3ZkcXUgMCoxNiglW2luYnVmXSksICUleG1tMlxuXHQiCisgICAgICAgICAgICAgIm1vdmRxdSAxKjE2KCVbaW5idWZdKSwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAibW92ZHF1IDIqMTYoJVtpbmJ1Zl0pLCAlJXhtbTRcblx0IgorCisgICAgICAgICAgICAgIm1vdmRxdSAzKjE2KCVbaW5idWZdKSwgJSV4bW0wXG5cdCIgLyogdXBkYXRlIElWICovCisgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICAgICAgICAgKCVbaXZdKVxuXHQiCisgICAgICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgICAgICA6IFtpbmJ1Zl0gInIiIChpbmJ1ZiksIFtpdl0gInIiIChpdikKKyAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKKworICAgICAgICAgIGRvX2Flc25pX2VuY192ZWM0IChjdHgpOworCisgICAgICAgICAgYXNtIHZvbGF0aWxlCisgICAgICAgICAgICAoIm1vdmRxdSAwKjE2KCVbaW5idWZdKSwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tMVxuXHQiCisgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTEsIDAqMTYoJVtvdXRidWZdKVxuXHQiCisKKyAgICAgICAgICAgICAibW92ZHF1IDEqMTYoJVtpbmJ1Zl0pLCAlJXhtbTVcblx0IgorICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAibW92ZHF1ICUleG1tMiwgMSoxNiglW291dGJ1Zl0pXG5cdCIKKworICAgICAgICAgICAgICJtb3ZkcXUgMioxNiglW2luYnVmXSksICUleG1tNVxuXHQiCisgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTNcblx0IgorICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0zLCAyKjE2KCVbb3V0YnVmXSlcblx0IgorCisgICAgICAgICAgICAgIm1vdmRxdSAzKjE2KCVbaW5idWZdKSwgJSV4bW01XG5cdCIKKyAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tNFxuXHQiCisgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTQsIDMqMTYoJVtvdXRidWZdKVxuXHQiCisKKyAgICAgICAgICAgICA6IC8qIE5vIG91dHB1dCAqLworICAgICAgICAgICAgIDogW2luYnVmXSAiciIgKGluYnVmKSwKKyAgICAgICAgICAgICAgIFtvdXRidWZdICJyIiAob3V0YnVmKQorICAgICAgICAgICAgIDogIm1lbW9yeSIpOworCisgICAgICAgICAgb3V0YnVmICs9IDQqQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSA0KkJMT0NLU0laRTsKKyAgICAgICAgfQorCisgICAgICBmb3IgKCA7bmJsb2NrczsgbmJsb2Nrcy0tICkKKyAgICAgICAgeworICAgICAgICAgIGRvX2Flc25pX2NmYiAoY3R4LCAxLCBpdiwgb3V0YnVmLCBpbmJ1Zik7CisgICAgICAgICAgb3V0YnVmICs9IEJMT0NLU0laRTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgICBhZXNuaV9jbGVhbnVwICgpOworICAgICAgYWVzbmlfY2xlYW51cF8yXzYgKCk7CisKKyAgICAgIGJ1cm5fZGVwdGggPSAwOyAvKiBObyBzdGFjayB1c2FnZS4gKi8KKyAgICB9CisjZW5kaWYgLypVU0VfQUVTTkkqLworICBlbHNlCisgICAgeworICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICBkb19lbmNyeXB0X2FsaWduZWQgKGN0eCwgaXYsIGl2KTsKKyAgICAgICAgICBidWZfeG9yX25fY29weShvdXRidWYsIGl2LCBpbmJ1ZiwgQkxPQ0tTSVpFKTsKKyAgICAgICAgICBvdXRidWYgKz0gQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSBCTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGJ1cm5fZGVwdGgpCisgICAgX2djcnlfYnVybl9zdGFjayAoYnVybl9kZXB0aCk7Cit9CisKKworLyogQnVsayBkZWNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDQkMgbW9kZS4gIENhbGxlciBuZWVkcyB0bworICAgbWFrZSBzdXJlIHRoYXQgSVYgaXMgYWxpZ25lZCBvbiBhbiB1bnNpZ25lZCBsb25nIGJvdW5kYXJ5LiAgVGhpcworICAgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mCisgICBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X2Flc19jYmNfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpCit7CisgIFJJSk5EQUVMX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBpbnQgYnVybl9kZXB0aCA9IDQ4ICsgMipzaXplb2YoaW50KSArIDQqc2l6ZW9mIChjaGFyKik7CisKKyAgY2hlY2tfZGVjcnlwdGlvbl9wcmVwYXJhdGlvbiAoY3R4KTsKKworICBpZiAoMCkKKyAgICA7CisjaWZkZWYgVVNFX0FFU05JCisgIGVsc2UgaWYgKGN0eC0+dXNlX2Flc25pKQorICAgIHsKKyAgICAgIGFlc25pX3ByZXBhcmUgKCk7CisKKyAgICAgIGFzbSB2b2xhdGlsZQorICAgICAgICAoIm1vdmRxdSAlW2l2XSwgJSV4bW01XG5cdCIJLyogdXNlIHhtbTUgYXMgZmFzdCBJViBzdG9yYWdlICovCisgICAgICAgICA6IC8qIE5vIG91dHB1dCAqLworICAgICAgICAgOiBbaXZdICJtIiAoKml2KQorICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgIGZvciAoIDtuYmxvY2tzID4gMyA7IG5ibG9ja3MgLT0gNCApCisgICAgICAgIHsKKyAgICAgICAgICBhc20gdm9sYXRpbGUKKyAgICAgICAgICAgICgibW92ZHF1IDAqMTYoJVtpbmJ1Zl0pLCAlJXhtbTFcblx0IgkvKiBsb2FkIGlucHV0IGJsb2NrcyAqLworICAgICAgICAgICAgICJtb3ZkcXUgMSoxNiglW2luYnVmXSksICUleG1tMlxuXHQiCisgICAgICAgICAgICAgIm1vdmRxdSAyKjE2KCVbaW5idWZdKSwgJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAibW92ZHF1IDMqMTYoJVtpbmJ1Zl0pLCAlJXhtbTRcblx0IgorICAgICAgICAgICAgIDogLyogTm8gb3V0cHV0ICovCisgICAgICAgICAgICAgOiBbaW5idWZdICJyIiAoaW5idWYpCisgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgICAgICBkb19hZXNuaV9kZWNfdmVjNCAoY3R4KTsKKworICAgICAgICAgIGFzbSB2b2xhdGlsZQorICAgICAgICAgICAgKCJweG9yICUleG1tNSwgJSV4bW0xXG5cdCIJCQkvKiB4b3IgSVYgd2l0aCBvdXRwdXQgKi8KKyAgICAgICAgICAgICAibW92ZHF1IDAqMTYoJVtpbmJ1Zl0pLCAlJXhtbTVcblx0IgkvKiBsb2FkIG5ldyBJViAqLworICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0xLCAwKjE2KCVbb3V0YnVmXSlcblx0IgorCisgICAgICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTJcblx0IgkJCS8qIHhvciBJViB3aXRoIG91dHB1dCAqLworICAgICAgICAgICAgICJtb3ZkcXUgMSoxNiglW2luYnVmXSksICUleG1tNVxuXHQiCS8qIGxvYWQgbmV3IElWICovCisgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTIsIDEqMTYoJVtvdXRidWZdKVxuXHQiCisKKyAgICAgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tM1xuXHQiCQkJLyogeG9yIElWIHdpdGggb3V0cHV0ICovCisgICAgICAgICAgICAgIm1vdmRxdSAyKjE2KCVbaW5idWZdKSwgJSV4bW01XG5cdCIJLyogbG9hZCBuZXcgSVYgKi8KKyAgICAgICAgICAgICAibW92ZHF1ICUleG1tMywgMioxNiglW291dGJ1Zl0pXG5cdCIKKworICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW00XG5cdCIJCQkvKiB4b3IgSVYgd2l0aCBvdXRwdXQgKi8KKyAgICAgICAgICAgICAibW92ZHF1IDMqMTYoJVtpbmJ1Zl0pLCAlJXhtbTVcblx0IgkvKiBsb2FkIG5ldyBJViAqLworICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW00LCAzKjE2KCVbb3V0YnVmXSlcblx0IgorCisgICAgICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgICAgICA6IFtpbmJ1Zl0gInIiIChpbmJ1ZiksCisgICAgICAgICAgICAgICBbb3V0YnVmXSAiciIgKG91dGJ1ZikKKyAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKKworICAgICAgICAgIG91dGJ1ZiArPSA0KkJMT0NLU0laRTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gNCpCTE9DS1NJWkU7CisgICAgICAgIH0KKworICAgICAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgICAgIHsKKyAgICAgICAgICBhc20gdm9sYXRpbGUKKyAgICAgICAgICAgICgibW92ZHF1ICVbaW5idWZdLCAlJXhtbTJcblx0IgkvKiB1c2UgeG1tMiBhcyBzYXZlYnVmICovCisgICAgICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgICAgICA6IFtpbmJ1Zl0gIm0iICgqaW5idWYpCisgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgICAgICAvKiB1c2VzIG9ubHkgeG1tMCBhbmQgeG1tMSAqLworICAgICAgICAgIGRvX2Flc25pX2RlYyAoY3R4LCBvdXRidWYsIGluYnVmKTsKKworICAgICAgICAgIGFzbSB2b2xhdGlsZQorICAgICAgICAgICAgKCJtb3ZkcXUgJVtvdXRidWZdLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW0wXG5cdCIJCS8qIHhvciBJViB3aXRoIG91dHB1dCAqLworICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAlW291dGJ1Zl1cblx0IgorICAgICAgICAgICAgICJtb3ZkcXUgJSV4bW0yLCAlJXhtbTVcblx0IgkvKiBzdG9yZSBzYXZlYnVmIGFzIG5ldyBJViAqLworICAgICAgICAgICAgIDogLyogTm8gb3V0cHV0ICovCisgICAgICAgICAgICAgOiBbb3V0YnVmXSAibSIgKCpvdXRidWYpCisgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisKKyAgICAgICAgICBvdXRidWYgKz0gQkxPQ0tTSVpFOworICAgICAgICAgIGluYnVmICArPSBCTE9DS1NJWkU7CisgICAgICAgIH0KKworICAgICAgYXNtIHZvbGF0aWxlCisgICAgICAgICgibW92ZHF1ICUleG1tNSwgJVtpdl1cblx0IgkvKiBzdG9yZSBJViAqLworICAgICAgICAgOiAvKiBObyBvdXRwdXQgKi8KKyAgICAgICAgIDogW2l2XSAibSIgKCppdikKKyAgICAgICAgIDogIm1lbW9yeSIpOworCisgICAgICBhZXNuaV9jbGVhbnVwICgpOworICAgICAgYWVzbmlfY2xlYW51cF8yXzYgKCk7CisKKyAgICAgIGJ1cm5fZGVwdGggPSAwOyAvKiBObyBzdGFjayB1c2FnZS4gKi8KKyAgICB9CisjZW5kaWYgLypVU0VfQUVTTkkqLworICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBzYXZlYnVmW0JMT0NLU0laRV07CisKKyAgICAgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgICAgICB7CisgICAgICAgICAgLyogSU5CVUYgaXMgbmVlZGVkIGxhdGVyIGFuZCBpdCBtYXkgYmUgaWRlbnRpY2FsIHRvIE9VVEJVRiwgc28gc3RvcmUKKyAgICAgICAgICAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCB0byBTQVZFQlVGLiAgKi8KKworICAgICAgICAgIGlmICgwKQorICAgICAgICAgICAgOworI2lmZGVmIFVTRV9QQURMT0NLCisgICAgICAgICAgZWxzZSBpZiAoY3R4LT51c2VfcGFkbG9jaykKKyAgICAgICAgICAgIGRvX3BhZGxvY2sgKGN0eCwgMSwgc2F2ZWJ1ZiwgaW5idWYpOworI2VuZGlmIC8qVVNFX1BBRExPQ0sqLworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvX2RlY3J5cHQgKGN0eCwgc2F2ZWJ1ZiwgaW5idWYpOworCisgICAgICAgICAgYnVmX3hvcl9uX2NvcHlfMihvdXRidWYsIHNhdmVidWYsIGl2LCBpbmJ1ZiwgQkxPQ0tTSVpFKTsKKyAgICAgICAgICBpbmJ1ZiArPSBCTE9DS1NJWkU7CisgICAgICAgICAgb3V0YnVmICs9IEJMT0NLU0laRTsKKyAgICAgICAgfQorCisgICAgICB3aXBlbWVtb3J5KHNhdmVidWYsIHNpemVvZihzYXZlYnVmKSk7CisgICAgfQorCisgIGlmIChidXJuX2RlcHRoKQorICAgIF9nY3J5X2J1cm5fc3RhY2sgKGJ1cm5fZGVwdGgpOworfQorCisKKworDAorLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBBRVMgMTI4LiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2Jhc2ljXzEyOCAodm9pZCkKK3sKKyAgUklKTkRBRUxfY29udGV4dCBjdHg7CisgIHVuc2lnbmVkIGNoYXIgc2NyYXRjaFsxNl07CisKKyAgLyogVGhlIHRlc3QgdmVjdG9ycyBhcmUgZnJvbSB0aGUgQUVTIHN1cHBsaWVkIG9uZXM7IG1vcmUgb3IgbGVzcworICAgICByYW5kb21seSB0YWtlbiBmcm9tIGVjYl90YmwudHh0IChJPTQyLDgxLDE0KSAqLworI2lmIDEKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0XzEyOFsxNl0gPQorICAgIHsKKyAgICAgIDB4MDEsMHg0QiwweEFGLDB4MjIsMHg3OCwweEE2LDB4OUQsMHgzMywKKyAgICAgIDB4MUQsMHg1MSwweDgwLDB4MTAsMHgzNiwweDQzLDB4RTksMHg5QQorICAgIH07CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV8xMjhbMTZdID0KKyAgICB7CisgICAgICAweEU4LDB4RTksMHhFQSwweEVCLDB4RUQsMHhFRSwweEVGLDB4RjAsCisgICAgICAweEYyLDB4RjMsMHhGNCwweEY1LDB4RjcsMHhGOCwweEY5LDB4RkEKKyAgICB9OworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0XzEyOFsxNl0gPQorICAgIHsKKyAgICAgIDB4NjcsMHg0MywweEMzLDB4RDEsMHg1MSwweDlBLDB4QjQsMHhGMiwKKyAgICAgIDB4Q0QsMHg5QSwweDc4LDB4QUIsMHgwOSwweEE1LDB4MTEsMHhCRAorICAgIH07CisjZWxzZQorICAvKiBUZXN0IHZlY3RvcnMgZnJvbSBmaXBzLTE5NywgYXBwZW5kaXggQy4gKi8KKyMgd2FybmluZyBkZWJ1ZyB0ZXN0IHZlY3RvcnMgaW4gdXNlCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dF8xMjhbMTZdID0KKyAgICB7CisgICAgICAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisgICAgICAweDg4LDB4OTksMHhhYSwweGJiLDB4Y2MsMHhkZCwweGVlLDB4ZmYKKyAgICB9OworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfMTI4WzE2XSA9CisgICAgeworICAgICAgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAorICAgICAgMHgwOCwweDA5LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmCisgICAgICAvKiAweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAqLworICAgICAgLyogMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYyAqLworICAgIH07CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRfMTI4WzE2XSA9CisgICAgeworICAgICAgMHg2OSwweGM0LDB4ZTAsMHhkOCwweDZhLDB4N2IsMHgwNCwweDMwLAorICAgICAgMHhkOCwweGNkLDB4YjcsMHg4MCwweDcwLDB4YjQsMHhjNSwweDVhCisgICAgfTsKKyNlbmRpZgorCisgIHJpam5kYWVsX3NldGtleSAoJmN0eCwga2V5XzEyOCwgc2l6ZW9mIChrZXlfMTI4KSk7CisgIHJpam5kYWVsX2VuY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dF8xMjgpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBjaXBoZXJ0ZXh0XzEyOCwgc2l6ZW9mIChjaXBoZXJ0ZXh0XzEyOCkpKQorICAgICByZXR1cm4gIkFFUy0xMjggdGVzdCBlbmNyeXB0aW9uIGZhaWxlZC4iOworICByaWpuZGFlbF9kZWNyeXB0ICgmY3R4LCBzY3JhdGNoLCBzY3JhdGNoKTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgcGxhaW50ZXh0XzEyOCwgc2l6ZW9mIChwbGFpbnRleHRfMTI4KSkpCisgICAgcmV0dXJuICJBRVMtMTI4IHRlc3QgZGVjcnlwdGlvbiBmYWlsZWQuIjsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBBRVMgMTkyLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2Jhc2ljXzE5MiAodm9pZCkKK3sKKyAgUklKTkRBRUxfY29udGV4dCBjdHg7CisgIHVuc2lnbmVkIGNoYXIgc2NyYXRjaFsxNl07CisKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0XzE5MlsxNl0gPQorICAgIHsKKyAgICAgIDB4NzYsMHg3NywweDc0LDB4NzUsMHhGMSwweEYyLDB4RjMsMHhGNCwKKyAgICAgIDB4RjgsMHhGOSwweEU2LDB4RTcsMHg3NywweDcwLDB4NzEsMHg3MgorICAgIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGtleV8xOTJbMjRdID0KKyAgICB7CisgICAgICAweDA0LDB4MDUsMHgwNiwweDA3LDB4MDksMHgwQSwweDBCLDB4MEMsCisgICAgICAweDBFLDB4MEYsMHgxMCwweDExLDB4MTMsMHgxNCwweDE1LDB4MTYsCisgICAgICAweDE4LDB4MTksMHgxQSwweDFCLDB4MUQsMHgxRSwweDFGLDB4MjAKKyAgICB9OworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0XzE5MlsxNl0gPQorICAgIHsKKyAgICAgIDB4NUQsMHgxRSwweEYyLDB4MEQsMHhDRSwweEQ2LDB4QkMsMHhCQywKKyAgICAgIDB4MTIsMHgxMywweDFBLDB4QzcsMHhDNSwweDQ3LDB4ODgsMHhBQQorICAgIH07CisKKyAgcmlqbmRhZWxfc2V0a2V5ICgmY3R4LCBrZXlfMTkyLCBzaXplb2Yoa2V5XzE5MikpOworICByaWpuZGFlbF9lbmNyeXB0ICgmY3R4LCBzY3JhdGNoLCBwbGFpbnRleHRfMTkyKTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgY2lwaGVydGV4dF8xOTIsIHNpemVvZiAoY2lwaGVydGV4dF8xOTIpKSkKKyAgICByZXR1cm4gIkFFUy0xOTIgdGVzdCBlbmNyeXB0aW9uIGZhaWxlZC4iOworICByaWpuZGFlbF9kZWNyeXB0ICgmY3R4LCBzY3JhdGNoLCBzY3JhdGNoKTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgcGxhaW50ZXh0XzE5Miwgc2l6ZW9mIChwbGFpbnRleHRfMTkyKSkpCisgICAgcmV0dXJuICJBRVMtMTkyIHRlc3QgZGVjcnlwdGlvbiBmYWlsZWQuIjsKKworICByZXR1cm4gTlVMTDsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIEFFUyAyNTYuICBSZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyKgorc2VsZnRlc3RfYmFzaWNfMjU2ICh2b2lkKQoreworICBSSUpOREFFTF9jb250ZXh0IGN0eDsKKyAgdW5zaWduZWQgY2hhciBzY3JhdGNoWzE2XTsKKworICBzdGF0aWMgdW5zaWduZWQgY2hhciBwbGFpbnRleHRfMjU2WzE2XSA9CisgICAgeworICAgICAgMHgwNiwweDlBLDB4MDAsMHg3RiwweEM3LDB4NkEsMHg0NSwweDlGLAorICAgICAgMHg5OCwweEJBLDB4RjksMHgxNywweEZFLDB4REYsMHg5NSwweDIxCisgICAgfTsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5XzI1NlszMl0gPQorICAgIHsKKyAgICAgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwRCwweDBFLDB4MEYsMHgxMCwKKyAgICAgIDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNywweDE4LDB4MTksMHgxQSwKKyAgICAgIDB4MUMsMHgxRCwweDFFLDB4MUYsMHgyMSwweDIyLDB4MjMsMHgyNCwKKyAgICAgIDB4MjYsMHgyNywweDI4LDB4MjksMHgyQiwweDJDLDB4MkQsMHgyRQorICAgIH07CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRfMjU2WzE2XSA9CisgICAgeworICAgICAgMHgwOCwweDBFLDB4OTUsMHgxNywweEVCLDB4MTYsMHg3NywweDcxLAorICAgICAgMHg5QSwweENGLDB4NzIsMHg4MCwweDg2LDB4MDQsMHgwQSwweEUzCisgICAgfTsKKworICByaWpuZGFlbF9zZXRrZXkgKCZjdHgsIGtleV8yNTYsIHNpemVvZihrZXlfMjU2KSk7CisgIHJpam5kYWVsX2VuY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dF8yNTYpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBjaXBoZXJ0ZXh0XzI1Niwgc2l6ZW9mIChjaXBoZXJ0ZXh0XzI1NikpKQorICAgIHJldHVybiAiQUVTLTI1NiB0ZXN0IGVuY3J5cHRpb24gZmFpbGVkLiI7CisgIHJpam5kYWVsX2RlY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHNjcmF0Y2gpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBwbGFpbnRleHRfMjU2LCBzaXplb2YgKHBsYWludGV4dF8yNTYpKSkKKyAgICByZXR1cm4gIkFFUy0yNTYgdGVzdCBkZWNyeXB0aW9uIGZhaWxlZC4iOworCisgIHJldHVybiBOVUxMOworfQorCisKKy8qIFJ1biB0aGUgc2VsZi10ZXN0cyBmb3IgQUVTLUNUUi0xMjgsIHRlc3RzIElWIGluY3JlbWVudCBvZiBidWxrIENUUgorICAgZW5jcnlwdGlvbi4gIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdF9jdHJfMTI4ICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDgrMTsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IEJMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihSSUpOREFFTF9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2N0cigiQUVTIiwgJnJpam5kYWVsX3NldGtleSwKKyAgICAgICAgICAgJnJpam5kYWVsX2VuY3J5cHQsICZfZ2NyeV9hZXNfY3RyX2VuYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBBRVMtQ0JDLTEyOCwgdGVzdHMgYnVsayBDQkMgZGVjcnlwdGlvbi4KKyAgIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdF9jYmNfMTI4ICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDgrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IEJMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihSSUpOREFFTF9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2NiYygiQUVTIiwgJnJpam5kYWVsX3NldGtleSwKKyAgICAgICAgICAgJnJpam5kYWVsX2VuY3J5cHQsICZfZ2NyeV9hZXNfY2JjX2RlYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBBRVMtQ0ZCLTEyOCwgdGVzdHMgYnVsayBDRkIgZGVjcnlwdGlvbi4KKyAgIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdF9jZmJfMTI4ICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDgrMjsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IEJMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihSSUpOREFFTF9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2NmYigiQUVTIiwgJnJpam5kYWVsX3NldGtleSwKKyAgICAgICAgICAgJnJpam5kYWVsX2VuY3J5cHQsICZfZ2NyeV9hZXNfY2ZiX2RlYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIGFsbCB0aGUgc2VsZi10ZXN0cyBhbmQgcmV0dXJuIE5VTEwgb24gc3VjY2Vzcy4gIFRoaXMgZnVuY3Rpb24KKyAgIGlzIHVzZWQgZm9yIHRoZSBvbi10aGUtZmx5IHNlbGYtdGVzdHMuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdCAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqcjsKKworICBpZiAoIChyID0gc2VsZnRlc3RfYmFzaWNfMTI4ICgpKQorICAgICAgIHx8IChyID0gc2VsZnRlc3RfYmFzaWNfMTkyICgpKQorICAgICAgIHx8IChyID0gc2VsZnRlc3RfYmFzaWNfMjU2ICgpKSApCisgICAgcmV0dXJuIHI7CisKKyAgaWYgKCAociA9IHNlbGZ0ZXN0X2N0cl8xMjggKCkpICkKKyAgICByZXR1cm4gcjsKKworICBpZiAoIChyID0gc2VsZnRlc3RfY2JjXzEyOCAoKSkgKQorICAgIHJldHVybiByOworCisgIGlmICggKHIgPSBzZWxmdGVzdF9jZmJfMTI4ICgpKSApCisgICAgcmV0dXJuIHI7CisKKyAgcmV0dXJuIHI7Cit9CisKKworLyogU1A4MDAtMzhhLnBkZiBmb3IgQUVTLTEyOC4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9maXBzXzEyOF8zOGEgKGludCByZXF1ZXN0ZWRfbW9kZSkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dgorICB7CisgICAgaW50IG1vZGU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXZbMTZdOworICAgIHN0cnVjdAorICAgIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdOworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdOworICAgIH0gZGF0YVs0XTsKKyAgfSB0dlsyXSA9CisgICAgeworICAgICAgeworICAgICAgICBHQ1JZX0NJUEhFUl9NT0RFX0NGQiwgIC8qIEYuMy4xMywgQ0ZCMTI4LUFFUzEyOCAqLworICAgICAgICB7IDB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsCisgICAgICAgICAgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYyB9LAorICAgICAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgICAgICB7CisgICAgICAgICAgeyB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCisgICAgICAgICAgICAgIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsIDB4OTMsIDB4MTcsIDB4MmEgfSwKKyAgICAgICAgICAgIHsgMHgzYiwgMHgzZiwgMHhkOSwgMHgyZSwgMHhiNywgMHgyZCwgMHhhZCwgMHgyMCwKKyAgICAgICAgICAgICAgMHgzMywgMHgzNCwgMHg0OSwgMHhmOCwgMHhlOCwgMHgzYywgMHhmYiwgMHg0YSB9IH0sCisKKyAgICAgICAgICB7IHsgMHhhZSwgMHgyZCwgMHg4YSwgMHg1NywgMHgxZSwgMHgwMywgMHhhYywgMHg5YywKKyAgICAgICAgICAgICAgMHg5ZSwgMHhiNywgMHg2ZiwgMHhhYywgMHg0NSwgMHhhZiwgMHg4ZSwgMHg1MSB9LAorICAgICAgICAgICAgeyAweGM4LCAweGE2LCAweDQ1LCAweDM3LCAweGEwLCAweGIzLCAweGE5LCAweDNmLAorICAgICAgICAgICAgICAweGNkLCAweGUzLCAweGNkLCAweGFkLCAweDlmLCAweDFjLCAweGU1LCAweDhiIH0gfSwKKworICAgICAgICAgIHsgeyAweDMwLCAweGM4LCAweDFjLCAweDQ2LCAweGEzLCAweDVjLCAweGU0LCAweDExLAorICAgICAgICAgICAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAweDFhLCAweDBhLCAweDUyLCAweGVmIH0sCisgICAgICAgICAgICB7IDB4MjYsIDB4NzUsIDB4MWYsIDB4NjcsIDB4YTMsIDB4Y2IsIDB4YjEsIDB4NDAsCisgICAgICAgICAgICAgIDB4YjEsIDB4ODAsIDB4OGMsIDB4ZjEsIDB4ODcsIDB4YTQsIDB4ZjQsIDB4ZGYgfSB9LAorCisgICAgICAgICAgeyB7IDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsCisgICAgICAgICAgICAgIDB4YWQsIDB4MmIsIDB4NDEsIDB4N2IsIDB4ZTYsIDB4NmMsIDB4MzcsIDB4MTAgfSwKKyAgICAgICAgICAgIHsgMHhjMCwgMHg0YiwgMHgwNSwgMHgzNSwgMHg3YywgMHg1ZCwgMHgxYywgMHgwZSwKKyAgICAgICAgICAgICAgMHhlYSwgMHhjNCwgMHhjNiwgMHg2ZiwgMHg5ZiwgMHhmNywgMHhmMiwgMHhlNiB9IH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgR0NSWV9DSVBIRVJfTU9ERV9PRkIsCisgICAgICAgIHsgMHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwKKyAgICAgICAgICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjIH0sCisgICAgICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAgICAgIHsKKyAgICAgICAgICB7IHsgMHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwKKyAgICAgICAgICAgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSB9LAorICAgICAgICAgICAgeyAweDNiLCAweDNmLCAweGQ5LCAweDJlLCAweGI3LCAweDJkLCAweGFkLCAweDIwLAorICAgICAgICAgICAgICAweDMzLCAweDM0LCAweDQ5LCAweGY4LCAweGU4LCAweDNjLCAweGZiLCAweDRhIH0gfSwKKworICAgICAgICAgIHsgeyAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLAorICAgICAgICAgICAgICAweDllLCAweGI3LCAweDZmLCAweGFjLCAweDQ1LCAweGFmLCAweDhlLCAweDUxIH0sCisgICAgICAgICAgICB7IDB4NzcsIDB4ODksIDB4NTAsIDB4OGQsIDB4MTYsIDB4OTEsIDB4OGYsIDB4MDMsCisgICAgICAgICAgICAgIDB4ZjUsIDB4M2MsIDB4NTIsIDB4ZGEsIDB4YzUsIDB4NGUsIDB4ZDgsIDB4MjUgfSB9LAorCisgICAgICAgICAgeyB7IDB4MzAsIDB4YzgsIDB4MWMsIDB4NDYsIDB4YTMsIDB4NWMsIDB4ZTQsIDB4MTEsCisgICAgICAgICAgICAgIDB4ZTUsIDB4ZmIsIDB4YzEsIDB4MTksIDB4MWEsIDB4MGEsIDB4NTIsIDB4ZWYgfSwKKyAgICAgICAgICAgIHsgMHg5NywgMHg0MCwgMHgwNSwgMHgxZSwgMHg5YywgMHg1ZiwgMHhlYywgMHhmNiwKKyAgICAgICAgICAgICAgMHg0MywgMHg0NCwgMHhmNywgMHhhOCwgMHgyMiwgMHg2MCwgMHhlZCwgMHhjYyB9IH0sCisKKyAgICAgICAgICB7IHsgMHhmNiwgMHg5ZiwgMHgyNCwgMHg0NSwgMHhkZiwgMHg0ZiwgMHg5YiwgMHgxNywKKyAgICAgICAgICAgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorICAgICAgICAgICAgeyAweDMwLCAweDRjLCAweDY1LCAweDI4LCAweGY2LCAweDU5LCAweGM3LCAweDc4LAorICAgICAgICAgICAgICAweDY2LCAweGE1LCAweDEwLCAweGQ5LCAweGMxLCAweGQ2LCAweGFlLCAweDVlIH0gfSwKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIHVuc2lnbmVkIGNoYXIgc2NyYXRjaFsxNl07CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IHR2aSwgaWR4OworICBnY3J5X2NpcGhlcl9oZF90IGhkZW5jID0gTlVMTDsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZGRlYyA9IE5VTEw7CisKKyNkZWZpbmUgRmFpbChhKSBkbyB7ICAgICAgICAgICBcCisgICAgX2djcnlfY2lwaGVyX2Nsb3NlIChoZGVuYyk7ICBcCisgICAgX2djcnlfY2lwaGVyX2Nsb3NlIChoZGRlYyk7ICBcCisgICAgcmV0dXJuIGE7ICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyAgZ2NyeV9hc3NlcnQgKHNpemVvZiB0dlswXS5kYXRhWzBdLmlucHV0ID09IHNpemVvZiBzY3JhdGNoKTsKKyAgZ2NyeV9hc3NlcnQgKHNpemVvZiB0dlswXS5kYXRhWzBdLm91dHB1dCA9PSBzaXplb2Ygc2NyYXRjaCk7CisKKyAgZm9yICh0dmk9MDsgdHZpIDwgRElNICh0dik7IHR2aSsrKQorICAgIGlmICh0dlt0dmldLm1vZGUgPT0gcmVxdWVzdGVkX21vZGUpCisgICAgICBicmVhazsKKyAgaWYgKHR2aSA9PSBESU0gKHR2KSkKKyAgICBGYWlsICgibm8gdGVzdCBkYXRhIGZvciB0aGlzIG1vZGUiKTsKKworICBlcnIgPSBfZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZW5jLCBHQ1JZX0NJUEhFUl9BRVMsIHR2W3R2aV0ubW9kZSwgMCk7CisgIGlmIChlcnIpCisgICAgRmFpbCAoIm9wZW4iKTsKKyAgZXJyID0gX2djcnlfY2lwaGVyX29wZW4gKCZoZGRlYywgR0NSWV9DSVBIRVJfQUVTLCB0dlt0dmldLm1vZGUsIDApOworICBpZiAoZXJyKQorICAgIEZhaWwgKCJvcGVuIik7CisgIGVyciA9IF9nY3J5X2NpcGhlcl9zZXRrZXkgKGhkZW5jLCB0dlt0dmldLmtleSwgIHNpemVvZiB0dlt0dmldLmtleSk7CisgIGlmICghZXJyKQorICAgIGVyciA9IF9nY3J5X2NpcGhlcl9zZXRrZXkgKGhkZGVjLCB0dlt0dmldLmtleSwgc2l6ZW9mIHR2W3R2aV0ua2V5KTsKKyAgaWYgKGVycikKKyAgICBGYWlsICgic2V0IGtleSIpOworICBlcnIgPSBfZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZW5jLCB0dlt0dmldLml2LCBzaXplb2YgdHZbdHZpXS5pdik7CisgIGlmICghZXJyKQorICAgIGVyciA9IF9nY3J5X2NpcGhlcl9zZXRpdiAoaGRkZWMsIHR2W3R2aV0uaXYsIHNpemVvZiB0dlt0dmldLml2KTsKKyAgaWYgKGVycikKKyAgICBGYWlsICgic2V0IElWIik7CisgIGZvciAoaWR4PTA7IGlkeCA8IERJTSAodHZbdHZpXS5kYXRhKTsgaWR4KyspCisgICAgeworICAgICAgZXJyID0gX2djcnlfY2lwaGVyX2VuY3J5cHQgKGhkZW5jLCBzY3JhdGNoLCBzaXplb2Ygc2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmldLmRhdGFbaWR4XS5pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgdHZbdHZpXS5kYXRhW2lkeF0uaW5wdXQpOworICAgICAgaWYgKGVycikKKyAgICAgICAgRmFpbCAoImVuY3J5cHQgY29tbWFuZCIpOworICAgICAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgdHZbdHZpXS5kYXRhW2lkeF0ub3V0cHV0LCBzaXplb2Ygc2NyYXRjaCkpCisgICAgICAgIEZhaWwgKCJlbmNyeXB0IG1pc21hdGNoIik7CisgICAgICBlcnIgPSBfZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGRkZWMsIHNjcmF0Y2gsIHNpemVvZiBzY3JhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aV0uZGF0YVtpZHhdLm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgdHZbdHZpXS5kYXRhW2lkeF0ub3V0cHV0KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIEZhaWwgKCJkZWNyeXB0IGNvbW1hbmQiKTsKKyAgICAgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIHR2W3R2aV0uZGF0YVtpZHhdLmlucHV0LCBzaXplb2Ygc2NyYXRjaCkpCisgICAgICAgIEZhaWwgKCJkZWNyeXB0IG1pc21hdGNoIik7CisgICAgfQorCisjdW5kZWYgRmFpbAorICBfZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZW5jKTsKKyAgX2djcnlfY2lwaGVyX2Nsb3NlIChoZGRlYyk7CisgIHJldHVybiBOVUxMOworfQorCisKKy8qIENvbXBsZXRlIHNlbGZ0ZXN0IGZvciBBRVMtMTI4IHdpdGggYWxsIG1vZGVzIGFuZCBkcml2ZXIgY29kZS4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3NlbGZ0ZXN0X2ZpcHNfMTI4IChpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisKKyAgd2hhdCA9ICJsb3ctbGV2ZWwiOworICBlcnJ0eHQgPSBzZWxmdGVzdF9iYXNpY18xMjggKCk7CisgIGlmIChlcnJ0eHQpCisgICAgZ290byBmYWlsZWQ7CisKKyAgaWYgKGV4dGVuZGVkKQorICAgIHsKKyAgICAgIHdoYXQgPSAiY2ZiIjsKKyAgICAgIGVycnR4dCA9IHNlbGZ0ZXN0X2ZpcHNfMTI4XzM4YSAoR0NSWV9DSVBIRVJfTU9ERV9DRkIpOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICAgIHdoYXQgPSAib2ZiIjsKKyAgICAgIGVycnR4dCA9IHNlbGZ0ZXN0X2ZpcHNfMTI4XzM4YSAoR0NSWV9DSVBIRVJfTU9ERV9PRkIpOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiY2lwaGVyIiwgR0NSWV9DSVBIRVJfQUVTMTI4LCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKy8qIENvbXBsZXRlIHNlbGZ0ZXN0IGZvciBBRVMtMTkyLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RfZmlwc18xOTIgKGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIGNvbnN0IGNoYXIgKmVycnR4dDsKKworICAodm9pZClleHRlbmRlZDsgLyogTm8gZXh0ZW5kZWQgdGVzdHMgYXZhaWxhYmxlLiAgKi8KKworICB3aGF0ID0gImxvdy1sZXZlbCI7CisgIGVycnR4dCA9IHNlbGZ0ZXN0X2Jhc2ljXzE5MiAoKTsKKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiY2lwaGVyIiwgR0NSWV9DSVBIRVJfQUVTMTkyLCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworLyogQ29tcGxldGUgc2VsZnRlc3QgZm9yIEFFUy0yNTYuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitzZWxmdGVzdF9maXBzXzI1NiAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworCisgICh2b2lkKWV4dGVuZGVkOyAvKiBObyBleHRlbmRlZCB0ZXN0cyBhdmFpbGFibGUuICAqLworCisgIHdoYXQgPSAibG93LWxldmVsIjsKKyAgZXJydHh0ID0gc2VsZnRlc3RfYmFzaWNfMjU2ICgpOworICBpZiAoZXJydHh0KQorICAgIGdvdG8gZmFpbGVkOworCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiY2lwaGVyIiwgR0NSWV9DSVBIRVJfQUVTMjU2LCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworCisvKiBSdW4gYSBmdWxsIHNlbGYtdGVzdCBmb3IgQUxHTyBhbmQgcmV0dXJuIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3J1bl9zZWxmdGVzdHMgKGludCBhbGdvLCBpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgR0NSWV9DSVBIRVJfQUVTMTI4OgorICAgICAgZWMgPSBzZWxmdGVzdF9maXBzXzEyOCAoZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdDUllfQ0lQSEVSX0FFUzE5MjoKKyAgICAgIGVjID0gc2VsZnRlc3RfZmlwc18xOTIgKGV4dGVuZGVkLCByZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ1JZX0NJUEhFUl9BRVMyNTY6CisgICAgICBlYyA9IHNlbGZ0ZXN0X2ZpcHNfMjU2IChleHRlbmRlZCwgcmVwb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlYyA9IEdQR19FUlJfQ0lQSEVSX0FMR087CisgICAgICBicmVhazsKKworICAgIH0KKyAgcmV0dXJuIGVjOworfQorCisKKwwKKworc3RhdGljIGNvbnN0IGNoYXIgKnJpam5kYWVsX25hbWVzW10gPQorICB7CisgICAgIlJJSk5EQUVMIiwKKyAgICAiQUVTMTI4IiwKKyAgICAiQUVTLTEyOCIsCisgICAgTlVMTAorICB9OworCitzdGF0aWMgZ2NyeV9jaXBoZXJfb2lkX3NwZWNfdCByaWpuZGFlbF9vaWRzW10gPQorICB7CisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuMSIsIEdDUllfQ0lQSEVSX01PREVfRUNCIH0sCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuMiIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuMyIsIEdDUllfQ0lQSEVSX01PREVfT0ZCIH0sCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuNCIsIEdDUllfQ0lQSEVSX01PREVfQ0ZCIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2FlcyA9CisgIHsKKyAgICBHQ1JZX0NJUEhFUl9BRVMsIHswLCAxfSwKKyAgICAiQUVTIiwgcmlqbmRhZWxfbmFtZXMsIHJpam5kYWVsX29pZHMsIDE2LCAxMjgsCisgICAgc2l6ZW9mIChSSUpOREFFTF9jb250ZXh0KSwKKyAgICByaWpuZGFlbF9zZXRrZXksIHJpam5kYWVsX2VuY3J5cHQsIHJpam5kYWVsX2RlY3J5cHQsCisgICAgTlVMTCwgTlVMTCwKKyAgICBydW5fc2VsZnRlc3RzCisgIH07CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnJpam5kYWVsMTkyX25hbWVzW10gPQorICB7CisgICAgIlJJSk5EQUVMMTkyIiwKKyAgICAiQUVTLTE5MiIsCisgICAgTlVMTAorICB9OworCitzdGF0aWMgZ2NyeV9jaXBoZXJfb2lkX3NwZWNfdCByaWpuZGFlbDE5Ml9vaWRzW10gPQorICB7CisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiLCBHQ1JZX0NJUEhFUl9NT0RFX0VDQiB9LAorICAgIHsgIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyIiwgR0NSWV9DSVBIRVJfTU9ERV9DQkMgfSwKKyAgICB7ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyIsIEdDUllfQ0lQSEVSX01PREVfT0ZCIH0sCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuMjQiLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiB9LAorICAgIHsgTlVMTCB9CisgIH07CisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19hZXMxOTIgPQorICB7CisgICAgR0NSWV9DSVBIRVJfQUVTMTkyLCB7MCwgMX0sCisgICAgIkFFUzE5MiIsIHJpam5kYWVsMTkyX25hbWVzLCByaWpuZGFlbDE5Ml9vaWRzLCAxNiwgMTkyLAorICAgIHNpemVvZiAoUklKTkRBRUxfY29udGV4dCksCisgICAgcmlqbmRhZWxfc2V0a2V5LCByaWpuZGFlbF9lbmNyeXB0LCByaWpuZGFlbF9kZWNyeXB0LAorICAgIE5VTEwsIE5VTEwsCisgICAgcnVuX3NlbGZ0ZXN0cworICB9OworCisKK3N0YXRpYyBjb25zdCBjaGFyICpyaWpuZGFlbDI1Nl9uYW1lc1tdID0KKyAgeworICAgICJSSUpOREFFTDI1NiIsCisgICAgIkFFUy0yNTYiLAorICAgIE5VTEwKKyAgfTsKKworc3RhdGljIGdjcnlfY2lwaGVyX29pZF9zcGVjX3QgcmlqbmRhZWwyNTZfb2lkc1tdID0KKyAgeworICAgIHsgIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIiwgR0NSWV9DSVBIRVJfTU9ERV9FQ0IgfSwKKyAgICB7ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MiIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiLCBHQ1JZX0NJUEhFUl9NT0RFX09GQiB9LAorICAgIHsgIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0IiwgR0NSWV9DSVBIRVJfTU9ERV9DRkIgfSwKKyAgICB7IE5VTEwgfQorICB9OworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfYWVzMjU2ID0KKyAgeworICAgIEdDUllfQ0lQSEVSX0FFUzI1NiwgezAsIDF9LAorICAgICJBRVMyNTYiLCByaWpuZGFlbDI1Nl9uYW1lcywgcmlqbmRhZWwyNTZfb2lkcywgMTYsIDI1NiwKKyAgICBzaXplb2YgKFJJSk5EQUVMX2NvbnRleHQpLAorICAgIHJpam5kYWVsX3NldGtleSwgcmlqbmRhZWxfZW5jcnlwdCwgcmlqbmRhZWxfZGVjcnlwdCwKKyAgICBOVUxMLCBOVUxMLAorICAgIHJ1bl9zZWxmdGVzdHMKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9ybWQuaCBiL2NpcGhlci9ybWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTZlZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3JtZC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIHJtZC5oIC0gUklQRS1NRCBoYXNoIGZ1bmN0aW9ucworICoJQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworI2lmbmRlZiBHMTBfUk1EX0gKKyNkZWZpbmUgRzEwX1JNRF9ICisKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisvKiBXZSBuZWVkIHRoaXMgaGVyZSBiZWNhdXNlIHJhbmRvbS5jIG11c3QgaGF2ZSBkaXJlY3QgYWNjZXNzLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tZF9ibG9ja19jdHhfdCBiY3R4OworICB1MzIgIGgwLGgxLGgyLGgzLGg0OworfSBSTUQxNjBfQ09OVEVYVDsKKwordm9pZCBfZ2NyeV9ybWQxNjBfaW5pdCAoIHZvaWQgKmNvbnRleHQgKTsKK3ZvaWQgX2djcnlfcm1kMTYwX21peGJsb2NrICggUk1EMTYwX0NPTlRFWFQgKmhkLCB2b2lkICpibG9ja29mNjRieXRlICk7CisKKyNlbmRpZiAvKkcxMF9STURfSCovCmRpZmYgLS1naXQgYS9jaXBoZXIvcm1kMTYwLmMgYi9jaXBoZXIvcm1kMTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlOGNiMAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9ybWQxNjAuYwpAQCAtMCwwICsxLDUyNSBAQAorLyogcm1kMTYwLmMgIC0JUklQRS1NRDE2MAorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgInJtZC5oIgorI2luY2x1ZGUgImNpcGhlci5oIiAvKiBPbmx5IHVzZWQgZm9yIHRoZSBybWQxNjBfaGFzaF9idWZmZXIoKSBwcm90b3R5cGUuICovCisKKyNpbmNsdWRlICJiaXRoZWxwLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSSVBFTUQtMTYwIGlzIG5vdCBwYXRlbnRlZCwgc2VlIChhcyBvZiAyNS4xMC45NykKKyAqICAgaHR0cDovL3d3dy5lc2F0Lmt1bGV1dmVuLmFjLmJlL35ib3NzZWxhZS9yaXBlbWQxNjAuaHRtbAorICogTm90ZSB0aGF0IHRoZSBjb2RlIHVzZXMgTGl0dGxlIEVuZGlhbiBieXRlb3JkZXIsIHdoaWNoIGlzIGdvb2QgZm9yCisgKiAzODYgZXRjLCBidXQgd2UgbXVzdCBhZGQgc29tZSBjb252ZXJzaW9uIHdoZW4gdXNlZCBvbiBhIGJpZyBlbmRpYW4gYm94LgorICoKKyAqCisgKiBQc2V1ZG8tY29kZSBmb3IgUklQRU1ELTE2MAorICoKKyAqIFJJUEVNRC0xNjAgaXMgYW4gaXRlcmF0aXZlIGhhc2ggZnVuY3Rpb24gdGhhdCBvcGVyYXRlcyBvbiAzMi1iaXQgd29yZHMuCisgKiBUaGUgcm91bmQgZnVuY3Rpb24gdGFrZXMgYXMgaW5wdXQgYSA1LXdvcmQgY2hhaW5pbmcgdmFyaWFibGUgYW5kIGEgMTYtd29yZAorICogbWVzc2FnZSBibG9jayBhbmQgbWFwcyB0aGlzIHRvIGEgbmV3IGNoYWluaW5nIHZhcmlhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUKKyAqIGRlZmluZWQgb24gMzItYml0IHdvcmRzLiBQYWRkaW5nIGlzIGlkZW50aWNhbCB0byB0aGF0IG9mIE1ENC4KKyAqCisgKgorICogUklQRU1ELTE2MDogZGVmaW5pdGlvbnMKKyAqCisgKgorICogICBub25saW5lYXIgZnVuY3Rpb25zIGF0IGJpdCBsZXZlbDogZXhvciwgbXV4LCAtLCBtdXgsIC0KKyAqCisgKiAgIGYoaiwgeCwgeSwgeikgPSB4IFhPUiB5IFhPUiB6CQkgICgwIDw9IGogPD0gMTUpCisgKiAgIGYoaiwgeCwgeSwgeikgPSAoeCBBTkQgeSkgT1IgKE5PVCh4KSBBTkQgeikgICgxNiA8PSBqIDw9IDMxKQorICogICBmKGosIHgsIHksIHopID0gKHggT1IgTk9UKHkpKSBYT1IgegkgICgzMiA8PSBqIDw9IDQ3KQorICogICBmKGosIHgsIHksIHopID0gKHggQU5EIHopIE9SICh5IEFORCBOT1QoeikpICAoNDggPD0gaiA8PSA2MykKKyAqICAgZihqLCB4LCB5LCB6KSA9IHggWE9SICh5IE9SIE5PVCh6KSkJICAoNjQgPD0gaiA8PSA3OSkKKyAqCisgKgorICogICBhZGRlZCBjb25zdGFudHMgKGhleGFkZWNpbWFsKQorICoKKyAqICAgSyhqKSA9IDB4MDAwMDAwMDAJICAgICgwIDw9IGogPD0gMTUpCisgKiAgIEsoaikgPSAweDVBODI3OTk5CSAgICgxNiA8PSBqIDw9IDMxKQlpbnQoMioqMzAgeCBzcXJ0KDIpKQorICogICBLKGopID0gMHg2RUQ5RUJBMQkgICAoMzIgPD0gaiA8PSA0NykJaW50KDIqKjMwIHggc3FydCgzKSkKKyAqICAgSyhqKSA9IDB4OEYxQkJDREMJICAgKDQ4IDw9IGogPD0gNjMpCWludCgyKiozMCB4IHNxcnQoNSkpCisgKiAgIEsoaikgPSAweEE5NTNGRDRFCSAgICg2NCA8PSBqIDw9IDc5KQlpbnQoMioqMzAgeCBzcXJ0KDcpKQorICogICBLJyhqKSA9IDB4NTBBMjhCRTYgICAgICgwIDw9IGogPD0gMTUpICAgICAgaW50KDIqKjMwIHggY2JydCgyKSkKKyAqICAgSycoaikgPSAweDVDNEREMTI0ICAgICgxNiA8PSBqIDw9IDMxKSAgICAgIGludCgyKiozMCB4IGNicnQoMykpCisgKiAgIEsnKGopID0gMHg2RDcwM0VGMyAgICAoMzIgPD0gaiA8PSA0NykgICAgICBpbnQoMioqMzAgeCBjYnJ0KDUpKQorICogICBLJyhqKSA9IDB4N0E2RDc2RTkgICAgKDQ4IDw9IGogPD0gNjMpICAgICAgaW50KDIqKjMwIHggY2JydCg3KSkKKyAqICAgSycoaikgPSAweDAwMDAwMDAwICAgICg2NCA8PSBqIDw9IDc5KQorICoKKyAqCisgKiAgIHNlbGVjdGlvbiBvZiBtZXNzYWdlIHdvcmQKKyAqCisgKiAgIHIoaikgICAgICA9IGoJCSAgICAgICgwIDw9IGogPD0gMTUpCisgKiAgIHIoMTYuLjMxKSA9IDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDgKKyAqICAgcigzMi4uNDcpID0gMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMgorICogICByKDQ4Li42MykgPSAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyCisgKiAgIHIoNjQuLjc5KSA9IDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTMKKyAqICAgcjAoMC4uMTUpID0gNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMgorICogICByMCgxNi4uMzEpPSA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyCisgKiAgIHIwKDMyLi40Nyk9IDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMKKyAqICAgcjAoNDguLjYzKT0gOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNAorICogICByMCg2NC4uNzkpPSAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExCisgKgorICoKKyAqICAgYW1vdW50IGZvciByb3RhdGUgbGVmdCAocm9sKQorICoKKyAqICAgcygwLi4xNSkgID0gMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4CisgKiAgIHMoMTYuLjMxKSA9IDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMgorICogICBzKDMyLi40NykgPSAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUKKyAqICAgcyg0OC4uNjMpID0gMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyCisgKiAgIHMoNjQuLjc5KSA9IDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNgorICogICBzJygwLi4xNSkgPSA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYKKyAqICAgcycoMTYuLjMxKT0gOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExCisgKiAgIHMnKDMyLi40Nyk9IDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNQorICogICBzJyg0OC4uNjMpPSAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgKKyAqICAgcycoNjQuLjc5KT0gOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExCisgKgorICoKKyAqICAgaW5pdGlhbCB2YWx1ZSAoaGV4YWRlY2ltYWwpCisgKgorICogICBoMCA9IDB4Njc0NTIzMDE7IGgxID0gMHhFRkNEQUI4OTsgaDIgPSAweDk4QkFEQ0ZFOyBoMyA9IDB4MTAzMjU0NzY7CisgKgkJCQkJCQloNCA9IDB4QzNEMkUxRjA7CisgKgorICoKKyAqIFJJUEVNRC0xNjA6IHBzZXVkby1jb2RlCisgKgorICogICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG1lc3NhZ2UgYWZ0ZXIgcGFkZGluZyBjb25zaXN0cyBvZiB0IDE2LXdvcmQgYmxvY2tzCisgKiAgIHRoYXQgd2lsbCBiZSBkZW5vdGVkIHdpdGggWFtpXVtqXSwgd2l0aCAwIDw9IGkgPD0gdC0xIGFuZCAwIDw9IGogPD0gMTUuCisgKiAgIFRoZSBzeW1ib2wgWytdIGRlbm90ZXMgYWRkaXRpb24gbW9kdWxvIDIqKjMyIGFuZCByb2xfcyBkZW5vdGVzIGN5Y2xpYyBsZWZ0CisgKiAgIHNoaWZ0IChyb3RhdGUpIG92ZXIgcyBwb3NpdGlvbnMuCisgKgorICoKKyAqICAgZm9yIGkgOj0gMCB0byB0LTEgeworICoJIEEgOj0gaDA7IEIgOj0gaDE7IEMgOj0gaDI7IEQgPSBoMzsgRSA9IGg0OworICoJIEEnIDo9IGgwOyBCJyA6PSBoMTsgQycgOj0gaDI7IEQnID0gaDM7IEUnID0gaDQ7CisgKgkgZm9yIGogOj0gMCB0byA3OSB7CisgKgkgICAgIFQgOj0gcm9sX3MoaikoQSBbK10gZihqLCBCLCBDLCBEKSBbK10gWFtpXVtyKGopXSBbK10gSyhqKSkgWytdIEU7CisgKgkgICAgIEEgOj0gRTsgRSA6PSBEOyBEIDo9IHJvbF8xMChDKTsgQyA6PSBCOyBCIDo9IFQ7CisgKgkgICAgIFQgOj0gcm9sX3MnKGopKEEnIFsrXSBmKDc5LWosIEInLCBDJywgRCcpIFsrXSBYW2ldW3InKGopXQorCQkJCQkJICAgICAgIFsrXSBLJyhqKSkgWytdIEUnOworICoJICAgICBBJyA6PSBFJzsgRScgOj0gRCc7IEQnIDo9IHJvbF8xMChDJyk7IEMnIDo9IEInOyBCJyA6PSBUOworICoJIH0KKyAqCSBUIDo9IGgxIFsrXSBDIFsrXSBEJzsgaDEgOj0gaDIgWytdIEQgWytdIEUnOyBoMiA6PSBoMyBbK10gRSBbK10gQSc7CisgKgkgaDMgOj0gaDQgWytdIEEgWytdIEInOyBoNCA6PSBoMCBbK10gQiBbK10gQyc7IGgwIDo9IFQ7CisgKiAgIH0KKyAqLworCisvKiBTb21lIGV4YW1wbGVzOgorICogIiIgICAgICAgICAgICAgICAgICAgIDljMTE4NWE1YzVlOWZjNTQ2MTI4MDg5NzdlZThmNTQ4YjIyNThkMzEKKyAqICJhIiAgICAgICAgICAgICAgICAgICAwYmRjOWQyZDI1NmIzZWU5ZGFhZTM0N2JlNmY0ZGM4MzVhNDY3ZmZlCisgKiAiYWJjIiAgICAgICAgICAgICAgICAgOGViMjA4ZjdlMDVkOTg3YTliMDQ0YThlOThjNmIwODdmMTVhMGJmYworICogIm1lc3NhZ2UgZGlnZXN0IiAgICAgIDVkMDY4OWVmNDlkMmZhZTU3MmI4ODFiMTIzYTg1ZmZhMjE1OTVmMzYKKyAqICJhLi4ueiIgICAgICAgICAgICAgICBmNzFjMjcxMDljNjkyYzFiNTZiYmRjZWI1YjlkMjg2NWIzNzA4ZGJjCisgKiAiYWJjZGJjZGUuLi5ub3BxIiAgICAgMTJhMDUzMzg0YTljMGM4OGU0MDVhMDZjMjdkY2Y0OWFkYTYyZWIyYgorICogIkEuLi5aYS4uLnowLi4uOSIgICAgIGIwZTIwYjZlMzExNjY0MDI4NmVkM2E4N2E1NzEzMDc5YjIxZjUxODkKKyAqIDggdGltZXMgIjEyMzQ1Njc4OTAiICA5Yjc1MmU0NTU3M2Q0YjM5ZjRkYmQzMzIzY2FiODJiZjYzMzI2YmZiCisgKiAxIG1pbGxpb24gdGltZXMgImEiICAgNTI3ODMyNDNjMTY5N2JkYmUxNmQzN2Y5N2Y2OGYwODMyNWRjMTUyOAorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApOworCitzdGF0aWMgdm9pZAorcm1kMTYwX2luaXQgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgUk1EMTYwX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICAodm9pZClmbGFnczsKKworICBoZC0+aDAgPSAweDY3NDUyMzAxOworICBoZC0+aDEgPSAweEVGQ0RBQjg5OworICBoZC0+aDIgPSAweDk4QkFEQ0ZFOworICBoZC0+aDMgPSAweDEwMzI1NDc2OworICBoZC0+aDQgPSAweEMzRDJFMUYwOworCisgIGhkLT5iY3R4Lm5ibG9ja3MgPSAwOworICBoZC0+YmN0eC5uYmxvY2tzX2hpZ2ggPSAwOworICBoZC0+YmN0eC5jb3VudCA9IDA7CisgIGhkLT5iY3R4LmJsb2Nrc2l6ZSA9IDY0OworICBoZC0+YmN0eC5id3JpdGUgPSB0cmFuc2Zvcm07Cit9CisKKwordm9pZAorX2djcnlfcm1kMTYwX2luaXQgKHZvaWQgKmNvbnRleHQpCit7CisgIHJtZDE2MF9pbml0IChjb250ZXh0LCAwKTsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogVHJhbnNmb3JtIHRoZSBtZXNzYWdlIFggd2hpY2ggY29uc2lzdHMgb2YgMTYgMzItYml0LXdvcmRzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgIFJNRDE2MF9DT05URVhUICpoZCA9IGN0eDsKKyAgcmVnaXN0ZXIgdTMyIGEsYixjLGQsZTsKKyAgdTMyIGFhLGJiLGNjLGRkLGVlLHQ7CisgIHUzMiB4WzE2XTsKKyAgaW50IGk7CisKKyAgZm9yICggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICB4W2ldID0gYnVmX2dldF9sZTMyKGRhdGEgKyBpICogNCk7CisKKyNkZWZpbmUgSzAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSzEgIDB4NUE4Mjc5OTkKKyNkZWZpbmUgSzIgIDB4NkVEOUVCQTEKKyNkZWZpbmUgSzMgIDB4OEYxQkJDREMKKyNkZWZpbmUgSzQgIDB4QTk1M0ZENEUKKyNkZWZpbmUgS0swIDB4NTBBMjhCRTYKKyNkZWZpbmUgS0sxIDB4NUM0REQxMjQKKyNkZWZpbmUgS0syIDB4NkQ3MDNFRjMKKyNkZWZpbmUgS0szIDB4N0E2RDc2RTkKKyNkZWZpbmUgS0s0IDB4MDAwMDAwMDAKKyNkZWZpbmUgRjAoeCx5LHopICAgKCAoeCkgXiAoeSkgXiAoeikgKQorI2RlZmluZSBGMSh4LHkseikgICAoICgoeCkgJiAoeSkpIHwgKH4oeCkgJiAoeikpICkKKyNkZWZpbmUgRjIoeCx5LHopICAgKCAoKHgpIHwgfih5KSkgXiAoeikgKQorI2RlZmluZSBGMyh4LHkseikgICAoICgoeCkgJiAoeikpIHwgKCh5KSAmIH4oeikpICkKKyNkZWZpbmUgRjQoeCx5LHopICAgKCAoeCkgXiAoKHkpIHwgfih6KSkgKQorI2RlZmluZSBSKGEsYixjLGQsZSxmLGsscixzKSBkbyB7IHQgPSBhICsgZihiLGMsZCkgKyBrICsgeFtyXTsgXAorCQkJCSAgYSA9IHJvbCh0LHMpICsgZTsJICAgICAgIFwKKwkJCQkgIGMgPSByb2woYywxMCk7CSAgICAgICBcCisJCQkJfSB3aGlsZSgwKQorCisgIC8qIGxlZnQgbGFuZSAqLworICBhID0gaGQtPmgwOworICBiID0gaGQtPmgxOworICBjID0gaGQtPmgyOworICBkID0gaGQtPmgzOworICBlID0gaGQtPmg0OworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgSzAsICAwLCAxMSApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMCwgSzAsICAxLCAxNCApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMCwgSzAsICAyLCAxNSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMCwgSzAsICAzLCAxMiApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMCwgSzAsICA0LCAgNSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgSzAsICA1LCAgOCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMCwgSzAsICA2LCAgNyApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMCwgSzAsICA3LCAgOSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMCwgSzAsICA4LCAxMSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMCwgSzAsICA5LCAxMyApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgSzAsIDEwLCAxNCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMCwgSzAsIDExLCAxNSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMCwgSzAsIDEyLCAgNiApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMCwgSzAsIDEzLCAgNyApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMCwgSzAsIDE0LCAgOSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgSzAsIDE1LCAgOCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMSwgSzEsICA3LCAgNyApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgSzEsICA0LCAgNiApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgSzEsIDEzLCAgOCApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMSwgSzEsICAxLCAxMyApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMSwgSzEsIDEwLCAxMSApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMSwgSzEsICA2LCAgOSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgSzEsIDE1LCAgNyApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgSzEsICAzLCAxNSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMSwgSzEsIDEyLCAgNyApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMSwgSzEsICAwLCAxMiApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMSwgSzEsICA5LCAxNSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgSzEsICA1LCAgOSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgSzEsICAyLCAxMSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMSwgSzEsIDE0LCAgNyApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMSwgSzEsIDExLCAxMyApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMSwgSzEsICA4LCAxMiApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMiwgSzIsICAzLCAxMSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMiwgSzIsIDEwLCAxMyApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMiwgSzIsIDE0LCAgNiApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMiwgSzIsICA0LCAgNyApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMiwgSzIsICA5LCAxNCApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMiwgSzIsIDE1LCAgOSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMiwgSzIsICA4LCAxMyApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMiwgSzIsICAxLCAxNSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMiwgSzIsICAyLCAxNCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMiwgSzIsICA3LCAgOCApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMiwgSzIsICAwLCAxMyApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMiwgSzIsICA2LCAgNiApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMiwgSzIsIDEzLCAgNSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMiwgSzIsIDExLCAxMiApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMiwgSzIsICA1LCAgNyApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMiwgSzIsIDEyLCAgNSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMywgSzMsICAxLCAxMSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMywgSzMsICA5LCAxMiApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMywgSzMsIDExLCAxNCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMywgSzMsIDEwLCAxNSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMywgSzMsICAwLCAxNCApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMywgSzMsICA4LCAxNSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMywgSzMsIDEyLCAgOSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMywgSzMsICA0LCAgOCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMywgSzMsIDEzLCAgOSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMywgSzMsICAzLCAxNCApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMywgSzMsICA3LCAgNSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMywgSzMsIDE1LCAgNiApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMywgSzMsIDE0LCAgOCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMywgSzMsICA1LCAgNiApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMywgSzMsICA2LCAgNSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMywgSzMsICAyLCAxMiApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgSzQsICA0LCAgOSApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgSzQsICAwLCAxNSApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgSzQsICA1LCAgNSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGNCwgSzQsICA5LCAxMSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGNCwgSzQsICA3LCAgNiApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgSzQsIDEyLCAgOCApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgSzQsICAyLCAxMyApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgSzQsIDEwLCAxMiApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGNCwgSzQsIDE0LCAgNSApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGNCwgSzQsICAxLCAxMiApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgSzQsICAzLCAxMyApOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgSzQsICA4LCAxNCApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgSzQsIDExLCAxMSApOworICBSKCBkLCBlLCBhLCBiLCBjLCBGNCwgSzQsICA2LCAgOCApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGNCwgSzQsIDE1LCAgNSApOworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgSzQsIDEzLCAgNiApOworCisgIGFhID0gYTsgYmIgPSBiOyBjYyA9IGM7IGRkID0gZDsgZWUgPSBlOworCisgIC8qIHJpZ2h0IGxhbmUgKi8KKyAgYSA9IGhkLT5oMDsKKyAgYiA9IGhkLT5oMTsKKyAgYyA9IGhkLT5oMjsKKyAgZCA9IGhkLT5oMzsKKyAgZSA9IGhkLT5oNDsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjQsIEtLMCwJNSwgIDgpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgS0swLCAxNCwgIDkpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGNCwgS0swLAk3LCAgOSk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEY0LCBLSzAsCTAsIDExKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEtLMCwJOSwgMTMpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgS0swLAkyLCAxNSk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEY0LCBLSzAsIDExLCAxNSk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEY0LCBLSzAsCTQsICA1KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEtLMCwgMTMsICA3KTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEtLMCwJNiwgIDcpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgS0swLCAxNSwgIDgpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgS0swLAk4LCAxMSk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEY0LCBLSzAsCTEsIDE0KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEtLMCwgMTAsIDE0KTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEtLMCwJMywgMTIpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgS0swLCAxMiwgIDYpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMywgS0sxLAk2LCAgOSk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEYzLCBLSzEsIDExLCAxMyk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEYzLCBLSzEsCTMsIDE1KTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEtLMSwJNywgIDcpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMywgS0sxLAkwLCAxMik7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYzLCBLSzEsIDEzLCAgOCk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEYzLCBLSzEsCTUsICA5KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjMsIEtLMSwgMTAsIDExKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEtLMSwgMTQsICA3KTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEtLMSwgMTUsICA3KTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjMsIEtLMSwJOCwgMTIpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMywgS0sxLCAxMiwgIDcpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMywgS0sxLAk0LCAgNik7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYzLCBLSzEsCTksIDE1KTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEtLMSwJMSwgMTMpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMywgS0sxLAkyLCAxMSk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEYyLCBLSzIsIDE1LCAgOSk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEYyLCBLSzIsCTUsICA3KTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjIsIEtLMiwJMSwgMTUpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMiwgS0syLAkzLCAxMSk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYyLCBLSzIsCTcsICA4KTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEtLMiwgMTQsICA2KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEtLMiwJNiwgIDYpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMiwgS0syLAk5LCAxNCk7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYyLCBLSzIsIDExLCAxMik7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYyLCBLSzIsCTgsIDEzKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEtLMiwgMTIsICA1KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEtLMiwJMiwgMTQpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMiwgS0syLCAxMCwgMTMpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMiwgS0syLAkwLCAxMyk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYyLCBLSzIsCTQsICA3KTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEtLMiwgMTMsICA1KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjEsIEtLMywJOCwgMTUpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMSwgS0szLAk2LCAgNSk7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYxLCBLSzMsCTQsICA4KTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEtLMywJMSwgMTEpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgS0szLAkzLCAxNCk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEYxLCBLSzMsIDExLCAxNCk7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYxLCBLSzMsIDE1LCAgNik7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYxLCBLSzMsCTAsIDE0KTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEtLMywJNSwgIDYpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgS0szLCAxMiwgIDkpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgS0szLAkyLCAxMik7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYxLCBLSzMsIDEzLCAgOSk7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYxLCBLSzMsCTksIDEyKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEtLMywJNywgIDUpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgS0szLCAxMCwgMTUpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgS0szLCAxNCwgIDgpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMCwgS0s0LCAxMiwgIDgpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgS0s0LCAxNSwgIDUpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMCwgS0s0LCAxMCwgMTIpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMCwgS0s0LAk0LCAgOSk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEYwLCBLSzQsCTEsIDEyKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjAsIEtLNCwJNSwgIDUpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMCwgS0s0LAk4LCAxNCk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYwLCBLSzQsCTcsICA2KTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjAsIEtLNCwJNiwgIDgpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMCwgS0s0LAkyLCAxMyk7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYwLCBLSzQsIDEzLCAgNik7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYwLCBLSzQsIDE0LCAgNSk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYwLCBLSzQsCTAsIDE1KTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjAsIEtLNCwJMywgMTMpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMCwgS0s0LAk5LCAxMSk7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYwLCBLSzQsIDExLCAxMSk7CisKKworICB0CSAgID0gaGQtPmgxICsgZCArIGNjOworICBoZC0+aDEgPSBoZC0+aDIgKyBlICsgZGQ7CisgIGhkLT5oMiA9IGhkLT5oMyArIGEgKyBlZTsKKyAgaGQtPmgzID0gaGQtPmg0ICsgYiArIGFhOworICBoZC0+aDQgPSBoZC0+aDAgKyBjICsgYmI7CisgIGhkLT5oMCA9IHQ7CisKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovIDEwOCs1KnNpemVvZih2b2lkKik7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIEFwcGx5IHRoZSBybWQxNjAgdHJhbnNmb3JtIGZ1bmN0aW9uIG9uIHRoZSBidWZmZXIgd2hpY2ggbXVzdCBoYXZlCisgKiBhIGxlbmd0aCA2NCBieXRlcy4gRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIHRvZ2V0aGVyIHdpdGggdGhlCisgKiBvdGhlciBmdW5jdGlvbnMsIHVzZSBybWQxNjBfaW5pdCB0byBpbml0aWFsaXplIGludGVybmFsIHZhcmlhYmxlcy4KKyAqIFJldHVybnM6IDE2IGJ5dGVzIGluIGJ1ZmZlciB3aXRoIHRoZSBtaXhlZCBjb250ZW50ZXMgb2YgYnVmZmVyLgorICovCit2b2lkCitfZ2NyeV9ybWQxNjBfbWl4YmxvY2sgKCBSTUQxNjBfQ09OVEVYVCAqaGQsIHZvaWQgKmJsb2Nrb2Y2NGJ5dGUgKQoreworICBjaGFyICpwID0gYmxvY2tvZjY0Ynl0ZTsKKworICB0cmFuc2Zvcm0gKCBoZCwgYmxvY2tvZjY0Ynl0ZSApOworI2RlZmluZSBYKGEpIGRvIHsgKih1MzIqKXAgPSBoZC0+aCMjYSA7IHAgKz0gNDsgfSB3aGlsZSgwKQorICBYKDApOworICBYKDEpOworICBYKDIpOworICBYKDMpOworICBYKDQpOworI3VuZGVmIFgKK30KKworCisvKiBUaGUgcm91dGluZSB0ZXJtaW5hdGVzIHRoZSBjb21wdXRhdGlvbgorICovCisKK3N0YXRpYyB2b2lkCitybWQxNjBfZmluYWwoIHZvaWQgKmNvbnRleHQgKQoreworICBSTUQxNjBfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworICB1MzIgdCwgdGgsIG1zYiwgbHNiOworICBieXRlICpwOworICB1bnNpZ25lZCBpbnQgYnVybjsKKworICBfZ2NyeV9tZF9ibG9ja193cml0ZShoZCwgTlVMTCwgMCk7IC8qIGZsdXNoICovOworCisgIHQgPSBoZC0+YmN0eC5uYmxvY2tzOworICBpZiAoc2l6ZW9mIHQgPT0gc2l6ZW9mIGhkLT5iY3R4Lm5ibG9ja3MpCisgICAgdGggPSBoZC0+YmN0eC5uYmxvY2tzX2hpZ2g7CisgIGVsc2UKKyAgICB0aCA9IGhkLT5iY3R4Lm5ibG9ja3MgPj4gMzI7CisKKyAgLyogbXVsdGlwbHkgYnkgNjQgdG8gbWFrZSBhIGJ5dGUgY291bnQgKi8KKyAgbHNiID0gdCA8PCA2OworICBtc2IgPSAodGggPDwgNikgfCAodCA+PiAyNik7CisgIC8qIGFkZCB0aGUgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgaWYoIChsc2IgKz0gaGQtPmJjdHguY291bnQpIDwgdCApCisgICAgbXNiKys7CisgIC8qIG11bHRpcGx5IGJ5IDggdG8gbWFrZSBhIGJpdCBjb3VudCAqLworICB0ID0gbHNiOworICBsc2IgPDw9IDM7CisgIG1zYiA8PD0gMzsKKyAgbXNiIHw9IHQgPj4gMjk7CisKKyAgaWYoIGhkLT5iY3R4LmNvdW50IDwgNTYgKSAgLyogZW5vdWdoIHJvb20gKi8KKyAgICB7CisgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAweDgwOyAvKiBwYWQgKi8KKyAgICAgIHdoaWxlKCBoZC0+YmN0eC5jb3VudCA8IDU2ICkKKyAgICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMDsgIC8qIHBhZCAqLworICAgIH0KKyAgZWxzZSAgLyogbmVlZCBvbmUgZXh0cmEgYmxvY2sgKi8KKyAgICB7CisgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAweDgwOyAvKiBwYWQgY2hhcmFjdGVyICovCisgICAgICB3aGlsZSggaGQtPmJjdHguY291bnQgPCA2NCApCisgICAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDA7CisgICAgICBfZ2NyeV9tZF9ibG9ja193cml0ZShoZCwgTlVMTCwgMCk7ICAvKiBmbHVzaCAqLzsKKyAgICAgIG1lbXNldChoZC0+YmN0eC5idWYsIDAsIDU2ICk7IC8qIGZpbGwgbmV4dCBibG9jayB3aXRoIHplcm9lcyAqLworICAgIH0KKyAgLyogYXBwZW5kIHRoZSA2NCBiaXQgY291bnQgKi8KKyAgYnVmX3B1dF9sZTMyKGhkLT5iY3R4LmJ1ZiArIDU2LCBsc2IpOworICBidWZfcHV0X2xlMzIoaGQtPmJjdHguYnVmICsgNjAsIG1zYik7CisgIGJ1cm4gPSB0cmFuc2Zvcm0oIGhkLCBoZC0+YmN0eC5idWYgKTsKKyAgX2djcnlfYnVybl9zdGFjayAoYnVybik7CisKKyAgcCA9IGhkLT5iY3R4LmJ1ZjsKKyNkZWZpbmUgWChhKSBkbyB7ICoodTMyKilwID0gbGVfYnN3YXAzMihoZC0+aCMjYSkgOyBwICs9IDQ7IH0gd2hpbGUoMCkKKyAgWCgwKTsKKyAgWCgxKTsKKyAgWCgyKTsKKyAgWCgzKTsKKyAgWCg0KTsKKyN1bmRlZiBYCit9CisKK3N0YXRpYyBieXRlICoKK3JtZDE2MF9yZWFkKCB2b2lkICpjb250ZXh0ICkKK3sKKyAgUk1EMTYwX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICByZXR1cm4gaGQtPmJjdHguYnVmOworfQorCisKKworLyoqKioqKioqKioqKioqKioKKyAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB3aGljaCBwdXRzIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBzdXBwbGllZCBidWZmZXIKKyAqIGludG8gb3V0YnVmIHdoaWNoIG11c3QgaGF2ZSBhIHNpemUgb2YgMjAgYnl0ZXMuCisgKi8KK3ZvaWQKK19nY3J5X3JtZDE2MF9oYXNoX2J1ZmZlciAodm9pZCAqb3V0YnVmLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGggKQoreworICBSTUQxNjBfQ09OVEVYVCBoZDsKKworICBfZ2NyeV9ybWQxNjBfaW5pdCAoICZoZCApOworICBfZ2NyeV9tZF9ibG9ja193cml0ZSAoICZoZCwgYnVmZmVyLCBsZW5ndGggKTsKKyAgcm1kMTYwX2ZpbmFsICggJmhkICk7CisgIG1lbWNweSAoIG91dGJ1ZiwgaGQuYmN0eC5idWYsIDIwICk7Cit9CisKK3N0YXRpYyBieXRlIGFzblsxNV0gPSAvKiBPYmplY3QgSUQgaXMgMS4zLjM2LjMuMi4xICovCisgIHsgMHgzMCwgMHgyMSwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwNSwgMHgyYiwgMHgyNCwgMHgwMywKKyAgICAweDAyLCAweDAxLCAweDA1LCAweDAwLCAweDA0LCAweDE0IH07CisKK3N0YXRpYyBnY3J5X21kX29pZF9zcGVjX3Qgb2lkX3NwZWNfcm1kMTYwW10gPQorICB7CisgICAgLyogcnNhU2lnbmF0dXJlV2l0aHJpcGVtZDE2MCAqLworICAgIHsgIjEuMy4zNi4zLjMuMS4yIiB9LAorICAgIC8qIFRlbGVUcnVzdCBoYXNoIGFsZ29yaXRobS4gICovCisgICAgeyAiMS4zLjM2LjMuMi4xIiB9LAorICAgIHsgTlVMTCB9CisgIH07CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3JtZDE2MCA9CisgIHsKKyAgICBHQ1JZX01EX1JNRDE2MCwgezAsIDB9LAorICAgICJSSVBFTUQxNjAiLCBhc24sIERJTSAoYXNuKSwgb2lkX3NwZWNfcm1kMTYwLCAyMCwKKyAgICBybWQxNjBfaW5pdCwgX2djcnlfbWRfYmxvY2tfd3JpdGUsIHJtZDE2MF9maW5hbCwgcm1kMTYwX3JlYWQsCisgICAgc2l6ZW9mIChSTUQxNjBfQ09OVEVYVCkKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9yc2EtY29tbW9uLmMgYi9jaXBoZXIvcnNhLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWE2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvcnNhLWNvbW1vbi5jCkBAIC0wLDAgKzEsOTczIEBACisvKiByc2EtY29tbW9uLmMgLSBTdXBwb3J0aW5nIGZ1bmN0aW9ucyBmb3IgUlNBCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJwdWJrZXktaW50ZXJuYWwuaCIKKworCisvKiBUdXJuIFZBTFVFIGludG8gYW4gb2N0ZXQgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBhbiBhbGxvY2F0ZWQgYnVmZmVyCisgICBhdCBSX0ZSQU1FIG9yIC0gaWYgUl9SQU1FIGlzIE5VTEwgLSBjb3B5IGl0IGludG8gdGhlIGNhbGxlcgorICAgcHJvdmlkZWQgYnVmZmVyIFNQQUNFOyBlaXRoZXIgU1BBQ0Ugb3IgUl9GUkFNRSBtYXkgYmUgdXNlZC4gIElmCisgICBTUEFDRSBpZiBub3QgTlVMTCwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgYSBidWZmZXIgb2YgYXQgbGVhc3QKKyAgIE5CWVRFUy4gIElmIHRoZSByZXN1bHRpbmcgb2N0ZXQgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbiBOQllURVMgcGFkCisgICBpdCB0byB0aGUgbGVmdCB3aXRoIHplcm9lcy4gIElmIFZBTFVFIGRvZXMgbm90IGZpdCBpbnRvIE5CWVRFUworICAgcmV0dXJuIGFuIGVycm9yIGNvZGUuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitvY3RldF9zdHJpbmdfZnJvbV9tcGkgKHVuc2lnbmVkIGNoYXIgKipyX2ZyYW1lLCB2b2lkICpzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB2YWx1ZSwgc2l6ZV90IG5ieXRlcykKK3sKKyAgcmV0dXJuIF9nY3J5X21waV90b19vY3RldF9zdHJpbmcgKHJfZnJhbWUsIHNwYWNlLCB2YWx1ZSwgbmJ5dGVzKTsKK30KKworCisKKy8qIEVuY29kZSB7VkFMVUUsVkFMVUVMRU59IGZvciBhbiBOQklUUyBrZXlzIHVzaW5nIHRoZSBwa2NzIzEgYmxvY2sKKyAgIHR5cGUgMiBwYWRkaW5nLiAgT24gc3VjZXNzIHRoZSByZXN1bHQgaXMgc3RvcmVkIGFzIGEgbmV3IE1QSSBhdAorICAgUl9SRVNVTFQuICBPbiBlcnJvciB0aGUgdmFsdWUgYXQgUl9SRVNVTFQgaXMgdW5kZWZpbmVkLgorCisgICBJZiB7UkFORE9NX09WRVJSSURFLCBSQU5ET01fT1ZFUlJJREVfTEVOfSBpcyBnaXZlbiBpdCBpcyB1c2VkIGFzCisgICB0aGUgc2VlZCBpbnN0ZWFkIG9mIHVzaW5nIGEgcmFuZG9tIHN0cmluZyBmb3IgaXQuICBUaGlzIGZlYXR1cmUgaXMKKyAgIG9ubHkgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzLiAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgbWF5IG5vdAorICAgY29udGFpbiB6ZXJvIGJ5dGVzLgorCisgICBXZSBlbmNvZGUgdGhlIHZhbHVlIGluIHRoaXMgd2F5OgorCisgICAgIDAgIDIgIFJORChuIGJ5dGVzKSAgMCAgVkFMVUUKKworICAgMCAgIGlzIGEgbWFya2VyIHdlIHVuZm9ydHVuYXRlbHkgY2FuJ3QgZW5jb2RlIGJlY2F1c2Ugd2UgcmV0dXJuIGFuCisgICAgICAgTVBJIHdoaWNoIHN0cmlwcyBhbGwgbGVhZGluZyB6ZXJvZXMuCisgICAyICAgaXMgdGhlIGJsb2NrIHR5cGUuCisgICBSTkQgYXJlIG5vbi16ZXJvIHJhbmRvbSBieXRlcy4KKworICAgKE5vdGUgdGhhdCBPcGVuUEdQIGluY2x1ZGVzIHRoZSBjaXBoZXIgYWxnb3JpdGhtIGFuZCBhIGNoZWNrc3VtIGluCisgICBWQUxVRTsgdGhlIGNhbGxlciBuZWVkcyB0byBwcmVwYXJlIHRoZSB2YWx1ZSBhY2NvcmRpbmdseS4pCisgICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX3BrY3MxX2VuY29kZV9mb3JfZW5jIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb21fb3ZlcnJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByYW5kb21fb3ZlcnJpZGVfbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSAwOworICB1bnNpZ25lZCBjaGFyICpmcmFtZSA9IE5VTEw7CisgIHNpemVfdCBuZnJhbWUgPSAobmJpdHMrNykgLyA4OworICBpbnQgaTsKKyAgc2l6ZV90IG47CisgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgaWYgKHZhbHVlbGVuICsgNyA+IG5mcmFtZSB8fCAhbmZyYW1lKQorICAgIHsKKyAgICAgIC8qIENhbid0IGVuY29kZSBhIFZBTFVFTEVOIHZhbHVlIGluIGEgTkZSQU1FIGJ5dGVzIGZyYW1lLiAgKi8KKyAgICAgIHJldHVybiBHUEdfRVJSX1RPT19TSE9SVDsgLyogVGhlIGtleSBpcyB0b28gc2hvcnQuICAqLworICAgIH0KKworICBpZiAoICEoZnJhbWUgPSB4dHJ5bWFsbG9jX3NlY3VyZSAobmZyYW1lKSkpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworCisgIG4gPSAwOworICBmcmFtZVtuKytdID0gMDsKKyAgZnJhbWVbbisrXSA9IDI7IC8qIGJsb2NrIHR5cGUgKi8KKyAgaSA9IG5mcmFtZSAtIDMgLSB2YWx1ZWxlbjsKKyAgZ2NyeV9hc3NlcnQgKGkgPiAwKTsKKworICBpZiAocmFuZG9tX292ZXJyaWRlKQorICAgIHsKKyAgICAgIGludCBqOworCisgICAgICBpZiAocmFuZG9tX292ZXJyaWRlX2xlbiAhPSBpKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUgKGZyYW1lKTsKKyAgICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworICAgICAgICB9CisgICAgICAvKiBDaGVjayB0aGF0IHJhbmRvbSBkb2VzIG5vdCBpbmNsdWRlIGEgemVybyBieXRlLiAgKi8KKyAgICAgIGZvciAoaj0wOyBqIDwgcmFuZG9tX292ZXJyaWRlX2xlbjsgaisrKQorICAgICAgICBpZiAoIXJhbmRvbV9vdmVycmlkZVtqXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4ZnJlZSAoZnJhbWUpOworICAgICAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgICAgICAgICB9CisgICAgICBtZW1jcHkgKGZyYW1lICsgbiwgcmFuZG9tX292ZXJyaWRlLCByYW5kb21fb3ZlcnJpZGVfbGVuKTsKKyAgICAgIG4gKz0gcmFuZG9tX292ZXJyaWRlX2xlbjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwID0gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoaSwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgICAgIC8qIFJlcGxhY2UgemVybyBieXRlcyBieSBuZXcgdmFsdWVzLiAqLworICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIGludCBqLCBrOworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBwOworCisgICAgICAgICAgLyogQ291bnQgdGhlIHplcm8gYnl0ZXMuICovCisgICAgICAgICAgZm9yIChqPWs9MDsgaiA8IGk7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFwW2pdKQorICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWspCisgICAgICAgICAgICBicmVhazsgLyogT2theTogbm8gKG1vcmUpIHplcm8gYnl0ZXMuICovCisKKyAgICAgICAgICBrICs9IGsvMTI4ICsgMzsgLyogQmV0dGVyIGdldCBzb21lIG1vcmUuICovCisgICAgICAgICAgcHAgPSBfZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlIChrLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICAgICAgICAgIGZvciAoaj0wOyBqIDwgaSAmJiBrOyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghcFtqXSkKKyAgICAgICAgICAgICAgICBwW2pdID0gcHBbLS1rXTsKKyAgICAgICAgICAgICAgaWYgKHBbal0pCisgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgfQorICAgICAgICAgIHhmcmVlIChwcCk7CisgICAgICAgIH0KKyAgICAgIG1lbWNweSAoZnJhbWUrbiwgcCwgaSk7CisgICAgICBuICs9IGk7CisgICAgICB4ZnJlZSAocCk7CisgICAgfQorCisgIGZyYW1lW24rK10gPSAwOworICBtZW1jcHkgKGZyYW1lK24sIHZhbHVlLCB2YWx1ZWxlbik7CisgIG4gKz0gdmFsdWVsZW47CisgIGdjcnlfYXNzZXJ0IChuID09IG5mcmFtZSk7CisKKyAgcmMgPSBfZ2NyeV9tcGlfc2NhbiAocl9yZXN1bHQsIEdDUllNUElfRk1UX1VTRywgZnJhbWUsIG4sICZuZnJhbWUpOworICBpZiAoIXJjICYmREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoIlBLQ1MjMSBibG9jayB0eXBlIDIgZW5jb2RlZCBkYXRhIiwgKnJfcmVzdWx0KTsKKyAgeGZyZWUgKGZyYW1lKTsKKworICByZXR1cm4gcmM7Cit9CisKKworLyogRGVjb2RlIGEgcGxhaW50ZXh0IGluIFZBTFVFIGFzc3VtaW5nIHBrY3MjMSBibG9jayB0eXBlIDIgcGFkZGluZy4KKyAgIE5CSVRTIGlzIHRoZSBzaXplIG9mIHRoZSBzZWNyZXQga2V5LiAgT24gc3VjY2VzcyB0aGUgcmVzdWx0IGlzCisgICBzdG9yZWQgYXMgYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIGF0IFJfUkVTVUxUIGFuZCBpdHMgdmFsaWQgbGVuZ3RoIGF0CisgICBSX1JFU1VMVExFTi4gIE9uIGVycm9yIE5VTEwgaXMgc3RvcmVkIGF0IFJfUkVTVUxULiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9yc2FfcGtjczFfZGVjb2RlX2Zvcl9lbmMgKHVuc2lnbmVkIGNoYXIgKipyX3Jlc3VsdCwgc2l6ZV90ICpyX3Jlc3VsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzLCBnY3J5X21waV90IHZhbHVlKQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICB1bnNpZ25lZCBjaGFyICpmcmFtZSA9IE5VTEw7CisgIHNpemVfdCBuZnJhbWUgPSAobmJpdHMrNykgLyA4OworICBzaXplX3QgbjsKKworICAqcl9yZXN1bHQgPSBOVUxMOworCisgIGlmICggIShmcmFtZSA9IHh0cnltYWxsb2Nfc2VjdXJlIChuZnJhbWUpKSkKKyAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisKKyAgZXJyID0gX2djcnlfbXBpX3ByaW50IChHQ1JZTVBJX0ZNVF9VU0csIGZyYW1lLCBuZnJhbWUsICZuLCB2YWx1ZSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgeGZyZWUgKGZyYW1lKTsKKyAgICAgIHJldHVybiBnY3J5X2Vycl9jb2RlIChlcnIpOworICAgIH0KKworICBuZnJhbWUgPSBuOyAvKiBTZXQgTkZSQU1FIHRvIHRoZSBhY3R1YWwgbGVuZ3RoLiAgKi8KKworICAvKiBGUkFNRSA9IDB4MDAgfHwgMHgwMiB8fCBQUyB8fCAweDAwIHx8IE0KKworICAgICBwa2NzIzEgcmVxdWlyZXMgdGhhdCB0aGUgZmlyc3QgYnl0ZSBpcyB6ZXJvLiAgT3VyIE1QSXMgdXN1YWxseQorICAgICBzdHJpcCBsZWFkaW5nIHplcm8gYnl0ZXM7IHRodXMgd2UgYXJlIG5vdCBhYmxlIHRvIGRldGVjdCB0aGVtLgorICAgICBIb3dldmVyIGR1ZSB0byB0aGUgd2F5IGdjcnlfbXBpX3ByaW50IGlzIGltcGxlbWVudGVkIHdlIG1heSBzZWUKKyAgICAgbGVhZGluZyB6ZXJvIGJ5dGVzIG5ldmVydGhlbGVzcy4gIFdlIGhhbmRsZSB0aGlzIGJ5IG1ha2luZyB0aGUKKyAgICAgZmlyc3QgemVybyBieXRlIG9wdGlvbmFsLiAgKi8KKyAgaWYgKG5mcmFtZSA8IDQpCisgICAgeworICAgICAgeGZyZWUgKGZyYW1lKTsKKyAgICAgIHJldHVybiBHUEdfRVJSX0VOQ09ESU5HX1BST0JMRU07ICAvKiBUb28gc2hvcnQuICAqLworICAgIH0KKyAgbiA9IDA7CisgIGlmICghZnJhbWVbMF0pCisgICAgbisrOworICBpZiAoZnJhbWVbbisrXSAhPSAweDAyKQorICAgIHsKKyAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICByZXR1cm4gR1BHX0VSUl9FTkNPRElOR19QUk9CTEVNOyAgLyogV3JvbmcgYmxvY2sgdHlwZS4gICovCisgICAgfQorCisgIC8qIFNraXAgdGhlIG5vbi16ZXJvIHJhbmRvbSBieXRlcyBhbmQgdGhlIHRlcm1pbmF0aW5nIHplcm8gYnl0ZS4gICovCisgIGZvciAoOyBuIDwgbmZyYW1lICYmIGZyYW1lW25dICE9IDB4MDA7IG4rKykKKyAgICA7CisgIGlmIChuKzEgPj0gbmZyYW1lKQorICAgIHsKKyAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICByZXR1cm4gR1BHX0VSUl9FTkNPRElOR19QUk9CTEVNOyAvKiBObyB6ZXJvIGJ5dGUuICAqLworICAgIH0KKyAgbisrOyAvKiBTa2lwIHRoZSB6ZXJvIGJ5dGUuICAqLworCisgIC8qIFRvIGF2b2lkIGFuIGV4dHJhIGFsbG9jYXRpb24gd2UgcmV1c2UgdGhlIGZyYW1lIGJ1ZmZlci4gIFRoZSBvbmx5CisgICAgIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYW55d2F5IGZyZWUgdGhlIHJlc3VsdCBzb29uLiAgKi8KKyAgbWVtbW92ZSAoZnJhbWUsIGZyYW1lICsgbiwgbmZyYW1lIC0gbik7CisgICpyX3Jlc3VsdCA9IGZyYW1lOworICAqcl9yZXN1bHRsZW4gPSBuZnJhbWUgLSBuOworCisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludGhleCAoInZhbHVlIGV4dHJhY3RlZCBmcm9tIFBLQ1MjMSBibG9jayB0eXBlIDIgZW5jb2RlZCBkYXRhIiwKKyAgICAgICAgICAgICAgICAgICpyX3Jlc3VsdCwgKnJfcmVzdWx0bGVuKTsKKworICByZXR1cm4gMDsKK30KKworCisvKiBFbmNvZGUge1ZBTFVFLFZBTFVFTEVOfSBmb3IgYW4gTkJJVFMga2V5cyBhbmQgaGFzaCBhbGdvcml0aCBBTEdPCisgICB1c2luZyB0aGUgcGtjcyMxIGJsb2NrIHR5cGUgMSBwYWRkaW5nLiAgT24gc3VjY2VzcyB0aGUgcmVzdWx0IGlzCisgICBzdG9yZWQgYXMgYSBuZXcgTVBJIGF0IFJfUkVTVUxULiAgT24gZXJyb3IgdGhlIHZhbHVlIGF0IFJfUkVTVUxUIGlzCisgICB1bmRlZmluZWQuCisKKyAgIFdlIGVuY29kZSB0aGUgdmFsdWUgaW4gdGhpcyB3YXk6CisKKyAgICAgMCAgMSAgUEFEKG4gYnl0ZXMpICAwICBBU04oYXNubGVuIGJ5dGVzKSBWQUxVRSh2YWx1ZWxlbiBieXRlcykKKworICAgMCAgIGlzIGEgbWFya2VyIHdlIHVuZm9ydHVuYXRlbHkgY2FuJ3QgZW5jb2RlIGJlY2F1c2Ugd2UgcmV0dXJuIGFuCisgICAgICAgTVBJIHdoaWNoIHN0cmlwcyBhbGwgbGVhZGluZyB6ZXJvZXMuCisgICAxICAgaXMgdGhlIGJsb2NrIHR5cGUuCisgICBQQUQgY29uc2lzdHMgb2YgMHhmZiBieXRlcy4KKyAgIDAgICBtYXJrcyB0aGUgZW5kIG9mIHRoZSBwYWRkaW5nLgorICAgQVNOIGlzIHRoZSBERVIgZW5jb2Rpbmcgb2YgdGhlIGhhc2ggYWxnb3JpdGhtOyBhbG9uZyB3aXRoIHRoZSBWQUxVRQorICAgICAgIGl0IHlpZWxkcyBhIHZhbGlkIERFUiBlbmNvZGluZy4KKworICAgKE5vdGUgdGhhdCBQR1AgcHJpb3IgdG8gdmVyc2lvbiAyLjMgZW5jb2RlZCB0aGUgbWVzc2FnZSBkaWdlc3QgYXM6CisgICAgICAwICAgMSAgIE1EKDE2IGJ5dGVzKSAgIDAgICBQQUQobiBieXRlcykgICAxCisgICAgVGhlIE1EIGlzIGFsd2F5cyAxNiBieXRlcyBoZXJlIGJlY2F1c2UgaXQncyBhbHdheXMgTUQ1LiAgR251UEcKKyAgICBkb2VzIG5vdCBub3Qgc3VwcG9ydCBwcmUtdjIuMyBzaWduYXR1cmVzLCBidXQgSSdtIGluY2x1ZGluZyB0aGlzCisgICAgY29tbWVudCBzbyB0aGUgaW5mb3JtYXRpb24gaXMgZWFzaWx5IGZvdW5kIGlmIG5lZWRlZC4pCisqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3JzYV9wa2NzMV9lbmNvZGVfZm9yX3NpZyAoZ2NyeV9tcGlfdCAqcl9yZXN1bHQsIHVuc2lnbmVkIGludCBuYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZ28pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisgIGJ5dGUgYXNuWzEwMF07CisgIGJ5dGUgKmZyYW1lID0gTlVMTDsKKyAgc2l6ZV90IG5mcmFtZSA9IChuYml0cys3KSAvIDg7CisgIGludCBpOworICBzaXplX3QgbjsKKyAgc2l6ZV90IGFzbmxlbiwgZGxlbjsKKworICBhc25sZW4gPSBESU0oYXNuKTsKKyAgZGxlbiA9IF9nY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pOworCisgIGlmIChfZ2NyeV9tZF9hbGdvX2luZm8gKGFsZ28sIEdDUllDVExfR0VUX0FTTk9JRCwgYXNuLCAmYXNubGVuKSkKKyAgICB7CisgICAgICAvKiBXZSBkb24ndCBoYXZlIHlldCBhbGwgb2YgdGhlIGFib3ZlIGFsZ29yaXRobXMuICAqLworICAgICAgcmV0dXJuIEdQR19FUlJfTk9UX0lNUExFTUVOVEVEOworICAgIH0KKworICBpZiAoIHZhbHVlbGVuICE9IGRsZW4gKQorICAgIHsKKyAgICAgIC8qIEhhc2ggdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIGxlbmd0aCBvZiBkaWdlc3QgZm9yCisgICAgICAgICB0aGUgZ2l2ZW4gYWxnb3JpdGhtLiAgKi8KKyAgICAgIHJldHVybiBHUEdfRVJSX0NPTkZMSUNUOworICAgIH0KKworICBpZiAoICFkbGVuIHx8IGRsZW4gKyBhc25sZW4gKyA0ID4gbmZyYW1lKQorICAgIHsKKyAgICAgIC8qIENhbid0IGVuY29kZSBhbiBETEVOIGJ5dGUgZGlnZXN0IE1EIGludG8gYW4gTkZSQU1FIGJ5dGUKKyAgICAgICAgIGZyYW1lLiAgKi8KKyAgICAgIHJldHVybiBHUEdfRVJSX1RPT19TSE9SVDsKKyAgICB9CisKKyAgaWYgKCAhKGZyYW1lID0geHRyeW1hbGxvYyAobmZyYW1lKSkgKQorICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKworICAvKiBBc3NlbWJsZSB0aGUgcGtjcyMxIGJsb2NrIHR5cGUgMS4gKi8KKyAgbiA9IDA7CisgIGZyYW1lW24rK10gPSAwOworICBmcmFtZVtuKytdID0gMTsgLyogYmxvY2sgdHlwZSAqLworICBpID0gbmZyYW1lIC0gdmFsdWVsZW4gLSBhc25sZW4gLSAzIDsKKyAgZ2NyeV9hc3NlcnQgKGkgPiAxKTsKKyAgbWVtc2V0IChmcmFtZStuLCAweGZmLCBpICk7CisgIG4gKz0gaTsKKyAgZnJhbWVbbisrXSA9IDA7CisgIG1lbWNweSAoZnJhbWUrbiwgYXNuLCBhc25sZW4pOworICBuICs9IGFzbmxlbjsKKyAgbWVtY3B5IChmcmFtZStuLCB2YWx1ZSwgdmFsdWVsZW4gKTsKKyAgbiArPSB2YWx1ZWxlbjsKKyAgZ2NyeV9hc3NlcnQgKG4gPT0gbmZyYW1lKTsKKworICAvKiBDb252ZXJ0IGl0IGludG8gYW4gTVBJLiAqLworICByYyA9IF9nY3J5X21waV9zY2FuIChyX3Jlc3VsdCwgR0NSWU1QSV9GTVRfVVNHLCBmcmFtZSwgbiwgJm5mcmFtZSk7CisgIGlmICghcmMgJiYgREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoIlBLQ1MjMSBibG9jayB0eXBlIDEgZW5jb2RlZCBkYXRhIiwgKnJfcmVzdWx0KTsKKyAgeGZyZWUgKGZyYW1lKTsKKworICByZXR1cm4gcmM7Cit9CisKKworLyogTWFzayBnZW5lcmF0aW9uIGZ1bmN0aW9uIGZvciBPQUVQLiAgU2VlIFJGQy0zNDQ3IEIuMi4xLiAgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK21nZjEgKHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dGxlbiwgdW5zaWduZWQgY2hhciAqc2VlZCwgc2l6ZV90IHNlZWRsZW4sCisgICAgICBpbnQgYWxnbykKK3sKKyAgc2l6ZV90IGRsZW4sIG5ieXRlcywgbjsKKyAgaW50IGlkeDsKKyAgZ2NyeV9tZF9oZF90IGhkOworICBnY3J5X2Vycm9yX3QgZXJyOworCisgIGVyciA9IF9nY3J5X21kX29wZW4gKCZoZCwgYWxnbywgMCk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICBkbGVuID0gX2djcnlfbWRfZ2V0X2FsZ29fZGxlbiAoYWxnbyk7CisKKyAgLyogV2Ugc2tpcCBzdGVwIDEgd2hpY2ggd291bGQgYmUgYXNzZXJ0KE9VVExFTiA8PSAyXjMyKS4gIFRoZSBsb29wCisgICAgIGluIHN0ZXAgMyBpcyBtZXJnZWQgd2l0aCBzdGVwIDQgYnkgY29uY2F0ZW5hdGluZyBubyBtb3JlIG9jdGV0cworICAgICB0aGFuIHdoYXQgd291bGQgZml0IGludG8gT1VUUFVULiAgVGhlIGNlaWxpbmcgZm9yIHRoZSBjb3VudGVyIElEWAorICAgICBpcyBpbXBsZW1lbnRlZCBpbmRpcmVjdGx5LiAgKi8KKyAgbmJ5dGVzID0gMDsgIC8qIFN0ZXAgMi4gICovCisgIGlkeCA9IDA7CisgIHdoaWxlICggbmJ5dGVzIDwgb3V0bGVuICkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGNbNF0sICpkaWdlc3Q7CisKKyAgICAgIGlmIChpZHgpCisgICAgICAgIF9nY3J5X21kX3Jlc2V0IChoZCk7CisKKyAgICAgIGNbMF0gPSAoaWR4ID4+IDI0KSAmIDB4RkY7CisgICAgICBjWzFdID0gKGlkeCA+PiAxNikgJiAweEZGOworICAgICAgY1syXSA9IChpZHggPj4gOCkgJiAweEZGOworICAgICAgY1szXSA9IGlkeCAmIDB4RkY7CisgICAgICBpZHgrKzsKKworICAgICAgX2djcnlfbWRfd3JpdGUgKGhkLCBzZWVkLCBzZWVkbGVuKTsKKyAgICAgIF9nY3J5X21kX3dyaXRlIChoZCwgYywgNCk7CisgICAgICBkaWdlc3QgPSBfZ2NyeV9tZF9yZWFkIChoZCwgMCk7CisKKyAgICAgIG4gPSAob3V0bGVuIC0gbmJ5dGVzIDwgZGxlbik/IChvdXRsZW4gLSBuYnl0ZXMpIDogZGxlbjsKKyAgICAgIG1lbWNweSAob3V0cHV0K25ieXRlcywgZGlnZXN0LCBuKTsKKyAgICAgIG5ieXRlcyArPSBuOworICAgIH0KKworICBfZ2NyeV9tZF9jbG9zZSAoaGQpOworICByZXR1cm4gR1BHX0VSUl9OT19FUlJPUjsKK30KKworCisvKiBSRkMtMzQ0NyAocGtjcyMxIHYyLjEpIE9BRVAgZW5jb2RpbmcuICBOQklUUyBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorICAga2V5IG1lYXN1cmVkIGluIGJpdHMuICBBTEdPIGlzIHRoZSBoYXNoIGZ1bmN0aW9uOyBpdCBtdXN0IGJlIGEKKyAgIHZhbGlkIGFuZCB1c2FibGUgYWxnb3JpdGhtLiAge1ZBTFVFLFZBTFVFTEVOfSBpcyB0aGUgbWVzc2FnZSB0bworICAgZW5jcnlwdC4gIHtMQUJFTCxMQUJFTExFTn0gaXMgdGhlIG9wdGlvbmFsIGxhYmVsIHRvIGJlIGFzc29jaWF0ZWQKKyAgIHdpdGggdGhlIG1lc3NhZ2UsIGlmIExBQkVMIGlzIE5VTEwgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBlbXB0eQorICAgc3RyaW5nIGFzIGxhYmVsLiAgT24gc3VjY2VzcyB0aGUgZW5jb2RlZCBjaXBoZXJ0ZXh0IGlzIHJldHVybmVkIGF0CisgICBSX1JFU1VMVC4KKworICAgSWYge1JBTkRPTV9PVkVSUklERSwgUkFORE9NX09WRVJSSURFX0xFTn0gaXMgZ2l2ZW4gaXQgaXMgdXNlZCBhcworICAgdGhlIHNlZWQgaW5zdGVhZCBvZiB1c2luZyBhIHJhbmRvbSBzdHJpbmcgZm9yIGl0LiAgVGhpcyBmZWF0dXJlIGlzCisgICBvbmx5IHVzZWZ1bCBmb3IgcmVncmVzc2lvbiB0ZXN0cy4KKworICAgSGVyZSBpcyBmaWd1cmUgMSBmcm9tIHRoZSBSRkMgZGVwaWN0aW5nIHRoZSBwcm9jZXNzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgREIgPSB8ICBsSGFzaCAgIHwgICAgUFMgICB8ICAgTSAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgVgorICAgICAgICAgICAgICAgICAgfCAgIHNlZWQgICB8LS0+IE1HRiAtLS0+IHhvcgorICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICstLSsgICAgIFYgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfDAwfCAgICB4b3IgPC0tLS0tIE1HRiA8LS0tLS18CisgICAgICAgICAgICAgICArLS0rICAgICB8ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICBWICAgICAgViAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICArLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgRU0gPSAgfDAwfG1hc2tlZFNlZWR8ICAgICAgICAgIG1hc2tlZERCICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICstLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX29hZXBfZW5jb2RlIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmFuZG9tX292ZXJyaWRlLCBzaXplX3QgcmFuZG9tX292ZXJyaWRlX2xlbikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gMDsKKyAgdW5zaWduZWQgY2hhciAqZnJhbWUgPSBOVUxMOworICBzaXplX3QgbmZyYW1lID0gKG5iaXRzKzcpIC8gODsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgc2l6ZV90IGhsZW47CisgIHNpemVfdCBuOworCisgICpyX3Jlc3VsdCA9IE5VTEw7CisKKyAgLyogU2V0IGRlZmF1bHRzIGZvciBMQUJFTC4gICovCisgIGlmICghbGFiZWwgfHwgIWxhYmVsbGVuKQorICAgIHsKKyAgICAgIGxhYmVsID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSIiOworICAgICAgbGFiZWxsZW4gPSAwOworICAgIH0KKworICBobGVuID0gX2djcnlfbWRfZ2V0X2FsZ29fZGxlbiAoYWxnbyk7CisKKyAgLyogV2Ugc2tpcCBzdGVwIDFhIHdoaWNoIHdvdWxkIGJlIHRvIGNoZWNrIHRoYXQgTEFCRUxMRU4gaXMgbm90CisgICAgIGdyZWF0ZXIgdGhhbiAyXjYxLTEuICBTZWUgcmZjLTM0NDcgNy4xLjEuICovCisKKyAgLyogU3RlcCAxYi4gIE5vdGUgdGhhdCB0aGUgb2Jzb2xldGUgcmZjLTI0MzcgdXNlcyB0aGUgY2hlY2s6CisgICAgIHZhbHVlbGVuID4gbmZyYW1lIC0gMiAqIGhsZW4gLSAxIC4gICovCisgIGlmICh2YWx1ZWxlbiA+IG5mcmFtZSAtIDIgKiBobGVuIC0gMiB8fCAhbmZyYW1lKQorICAgIHsKKyAgICAgIC8qIENhbid0IGVuY29kZSBhIFZBTFVFTEVOIHZhbHVlIGluIGEgTkZSQU1FIGJ5dGVzIGZyYW1lLiAqLworICAgICAgcmV0dXJuIEdQR19FUlJfVE9PX1NIT1JUOyAvKiBUaGUga2V5IGlzIHRvbyBzaG9ydC4gICovCisgICAgfQorCisgIC8qIEFsbG9jYXRlIHRoZSBmcmFtZS4gICovCisgIGZyYW1lID0geHRyeWNhbGxvY19zZWN1cmUgKDEsIG5mcmFtZSk7CisgIGlmICghZnJhbWUpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworCisgIC8qIFN0ZXAgMmE6IENvbXB1dGUgdGhlIGhhc2ggb2YgdGhlIGxhYmVsLiAgV2Ugc3RvcmUgaXQgaW4gdGhlIGZyYW1lCisgICAgIHdoZXJlIGxhdGVyIHRoZSBtYXNrZWREQiB3aWxsIGNvbW1lbmNlLiAgKi8KKyAgX2djcnlfbWRfaGFzaF9idWZmZXIgKGFsZ28sIGZyYW1lICsgMSArIGhsZW4sIGxhYmVsLCBsYWJlbGxlbik7CisKKyAgLyogU3RlcCAyYjogU2V0IG9jdGV0IHN0cmluZyB0byB6ZXJvLiAgKi8KKyAgLyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgd2hpbGUgYWxsb2NhdGluZyBGUkFNRS4gICovCisKKyAgLyogU3RlcCAyYzogQ3JlYXRlIERCIGJ5IGNvbmNhdGVuYXRpbmcgbEhhc2gsIFBTLCAweDAxIGFuZCBNLiAgKi8KKyAgbiA9IG5mcmFtZSAtIHZhbHVlbGVuIC0gMTsKKyAgZnJhbWVbbl0gPSAweDAxOworICBtZW1jcHkgKGZyYW1lICsgbiArIDEsIHZhbHVlLCB2YWx1ZWxlbik7CisKKyAgLyogU3RlcCAzZDogR2VuZXJhdGUgc2VlZC4gIFdlIHN0b3JlIGl0IHdoZXJlIHRoZSBtYXNrZWRTZWVkIHdpbGwgZ28KKyAgICAgbGF0ZXIuICovCisgIGlmIChyYW5kb21fb3ZlcnJpZGUpCisgICAgeworICAgICAgaWYgKHJhbmRvbV9vdmVycmlkZV9sZW4gIT0gaGxlbikKKyAgICAgICAgeworICAgICAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKyAgICAgICAgfQorICAgICAgbWVtY3B5IChmcmFtZSArIDEsIHJhbmRvbV9vdmVycmlkZSwgaGxlbik7CisgICAgfQorICBlbHNlCisgICAgX2djcnlfcmFuZG9taXplIChmcmFtZSArIDEsIGhsZW4sIEdDUllfU1RST05HX1JBTkRPTSk7CisKKyAgLyogU3RlcCAyZSBhbmQgMmY6IENyZWF0ZSBtYXNrZWREQi4gICovCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkbWFzazsKKworICAgIGRtYXNrID0geHRyeW1hbGxvY19zZWN1cmUgKG5mcmFtZSAtIGhsZW4gLSAxKTsKKyAgICBpZiAoIWRtYXNrKQorICAgICAgeworICAgICAgICByYyA9IGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICB4ZnJlZSAoZnJhbWUpOworICAgICAgICByZXR1cm4gcmM7CisgICAgICB9CisgICAgcmMgPSBtZ2YxIChkbWFzaywgbmZyYW1lIC0gaGxlbiAtIDEsIGZyYW1lKzEsIGhsZW4sIGFsZ28pOworICAgIGlmIChyYykKKyAgICAgIHsKKyAgICAgICAgeGZyZWUgKGRtYXNrKTsKKyAgICAgICAgeGZyZWUgKGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgICAgfQorICAgIGZvciAobiA9IDEgKyBobGVuLCBwID0gZG1hc2s7IG4gPCBuZnJhbWU7IG4rKykKKyAgICAgIGZyYW1lW25dIF49ICpwKys7CisgICAgeGZyZWUgKGRtYXNrKTsKKyAgfQorCisgIC8qIFN0ZXAgMmcgYW5kIDJoOiBDcmVhdGUgbWFza2VkU2VlZC4gICovCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyICpzbWFzazsKKworICAgIHNtYXNrID0geHRyeW1hbGxvY19zZWN1cmUgKGhsZW4pOworICAgIGlmICghc21hc2spCisgICAgICB7CisgICAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICAgIH0KKyAgICByYyA9IG1nZjEgKHNtYXNrLCBobGVuLCBmcmFtZSArIDEgKyBobGVuLCBuZnJhbWUgLSBobGVuIC0gMSwgYWxnbyk7CisgICAgaWYgKHJjKQorICAgICAgeworICAgICAgICB4ZnJlZSAoc21hc2spOworICAgICAgICB4ZnJlZSAoZnJhbWUpOworICAgICAgICByZXR1cm4gcmM7CisgICAgICB9CisgICAgZm9yIChuID0gMSwgcCA9IHNtYXNrOyBuIDwgMSArIGhsZW47IG4rKykKKyAgICAgIGZyYW1lW25dIF49ICpwKys7CisgICAgeGZyZWUgKHNtYXNrKTsKKyAgfQorCisgIC8qIFN0ZXAgMmk6IENvbmNhdGVuYXRlIDB4MDAsIG1hc2tlZFNlZWQgYW5kIG1hc2tlZERCLiAgKi8KKyAgLyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgYnkgdXNpbmcgaW4tcGxhY2Ugb3BlcmF0aW9ucy4gICovCisKKyAgLyogQ29udmVydCB0aGUgc3R1ZmYgaW50byBhbiBNUEkgYXMgZXhwZWN0ZWQgYnkgdGhlIGNhbGxlci4gICovCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKHJfcmVzdWx0LCBHQ1JZTVBJX0ZNVF9VU0csIGZyYW1lLCBuZnJhbWUsIE5VTEwpOworICBpZiAoIXJjICYmIERCR19DSVBIRVIpCisgICAgbG9nX21waWR1bXAgKCJPQUVQIGVuY29kZWQgZGF0YSIsICpyX3Jlc3VsdCk7CisgIHhmcmVlIChmcmFtZSk7CisKKyAgcmV0dXJuIHJjOworfQorCisKKy8qIFJGQy0zNDQ3IChwa2NzIzEgdjIuMSkgT0FFUCBkZWNvZGluZy4gIE5CSVRTIGlzIHRoZSBsZW5ndGggb2YgdGhlCisgICBrZXkgbWVhc3VyZWQgaW4gYml0cy4gIEFMR08gaXMgdGhlIGhhc2ggZnVuY3Rpb247IGl0IG11c3QgYmUgYQorICAgdmFsaWQgYW5kIHVzYWJsZSBhbGdvcml0aG0uICBWQUxVRSBpcyB0aGUgcmF3IGRlY3J5cHRlZCBtZXNzYWdlCisgICB7TEFCRUwsTEFCRUxMRU59IGlzIHRoZSBvcHRpb25hbCBsYWJlbCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBtZXNzYWdlLCBpZiBMQUJFTCBpcyBOVUxMIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgZW1wdHkgc3RyaW5nIGFzCisgICBsYWJlbC4gIE9uIHN1Y2Nlc3MgdGhlIHBsYWludGV4dCBpcyByZXR1cm5lZCBhcyBhIG5ld2x5IGFsbG9jYXRlZAorICAgYnVmZmVyIGF0IFJfUkVTVUxUOyBpdHMgdmFsaWQgbGVuZ3RoIGlzIHN0b3JlZCBhdCBSX1JFU1VMVExFTi4gIE9uCisgICBlcnJvciBOVUxMIGlzIHN0b3JlZCBhdCBSX1JFU1VMVC4gICovCitncGdfZXJyX2NvZGVfdAorX2djcnlfcnNhX29hZXBfZGVjb2RlICh1bnNpZ25lZCBjaGFyICoqcl9yZXN1bHQsIHNpemVfdCAqcl9yZXN1bHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgaW50IGFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGFiZWxsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgdW5zaWduZWQgY2hhciAqZnJhbWUgPSBOVUxMOyAvKiBFbmNvZGVkIG1lc3NhZ2VzIChFTSkuICAqLworICB1bnNpZ25lZCBjaGFyICptYXNrZWRfc2VlZDsgIC8qIFBvaW50cyBpbnRvIEZSQU1FLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWFza2VkX2RiOyAgICAvKiBQb2ludHMgaW50byBGUkFNRS4gICovCisgIHVuc2lnbmVkIGNoYXIgKnNlZWQgPSBOVUxMOyAgLyogQWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgc2VlZCBhbmQgREIuICAqLworICB1bnNpZ25lZCBjaGFyICpkYjsgICAgICAgICAgIC8qIFBvaW50cyBpbnRvIFNFRUQuICAqLworICB1bnNpZ25lZCBjaGFyICpsaGFzaCA9IE5VTEw7IC8qIEhhc2ggb2YgdGhlIGxhYmVsLiAgKi8KKyAgc2l6ZV90IG5mcmFtZTsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKEVNKS4gICovCisgIHNpemVfdCBobGVuOyAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBoYXNoIGRpZ2VzdC4gICovCisgIHNpemVfdCBkYl9sZW47ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIERCIGFuZCBtYXNrZWRfZGIuICAqLworICBzaXplX3QgbmtleSA9IChuYml0cys3KS84OyAgIC8qIExlbmd0aCBvZiB0aGUga2V5IGluIGJ5dGVzLiAgKi8KKyAgaW50IGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAvKiBFcnJvciBpbmRpY2F0b3IuICAqLworICBzaXplX3QgbjsKKworICAqcl9yZXN1bHQgPSBOVUxMOworCisgIC8qIFRoaXMgY29kZSBpcyBpbXBsZW1lbnRlZCBhcyBkZXNjcmliZWQgYnkgcmZjLTM0NDcgNy4xLjIuICAqLworCisgIC8qIFNldCBkZWZhdWx0cyBmb3IgTEFCRUwuICAqLworICBpZiAoIWxhYmVsIHx8ICFsYWJlbGxlbikKKyAgICB7CisgICAgICBsYWJlbCA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikiIjsKKyAgICAgIGxhYmVsbGVuID0gMDsKKyAgICB9CisKKyAgLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdC4gICovCisgIGhsZW4gPSBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKworICAvKiBIYXNoIHRoZSBsYWJlbCByaWdodCBhd2F5LiAgKi8KKyAgbGhhc2ggPSB4dHJ5bWFsbG9jIChobGVuKTsKKyAgaWYgKCFsaGFzaCkKKyAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgIF9nY3J5X21kX2hhc2hfYnVmZmVyIChhbGdvLCBsaGFzaCwgbGFiZWwsIGxhYmVsbGVuKTsKKworICAvKiBUdXJuIHRoZSBNUEkgaW50byBhbiBvY3RldCBzdHJpbmcuICBJZiB0aGUgb2N0ZXQgc3RyaW5nIGlzCisgICAgIHNob3J0ZXIgdGhhbiB0aGUga2V5IHdlIHBhZCBpdCB0byB0aGUgbGVmdCB3aXRoIHplcm9lcy4gIFRoaXMgbWF5CisgICAgIGhhcHBlbiBkdWUgdG8gdGhlIGxlYWRpbmcgemVybyBpbiBPQUVQIGZyYW1lcyBhbmQgZHVlIHRvIHRoZQorICAgICBmb2xsb3dpbmcgcmFuZG9tIG9jdGV0cyAoc2VlZF5tYXNrKSB3aGljaCBtYXkgaGF2ZSBsZWFkaW5nIHplcm8KKyAgICAgYnl0ZXMuICBUaGlzIGFsbCBpcyBuZWVkZWQgdG8gY29wZSB3aXRoIG91ciBsZWFkaW5nIHplcm9lcworICAgICBzdXBwcmVzc2luZyBNUEkgaW1wbGVtZW50YXRpb24uICBUaGUgY29kZSBpbXBsaWN0bHkgaW1wbGVtZW50cworICAgICBTdGVwIDFiIChiYWlsIG91dCBpZiBORlJBTUUgIT0gTikuICAqLworICByYyA9IG9jdGV0X3N0cmluZ19mcm9tX21waSAoJmZyYW1lLCBOVUxMLCB2YWx1ZSwgbmtleSk7CisgIGlmIChyYykKKyAgICB7CisgICAgICB4ZnJlZSAobGhhc2gpOworICAgICAgcmV0dXJuIEdQR19FUlJfRU5DT0RJTkdfUFJPQkxFTTsKKyAgICB9CisgIG5mcmFtZSA9IG5rZXk7CisKKyAgLyogU3RlcCAxYzogQ2hlY2sgdGhhdCB0aGUga2V5IGlzIGxvbmcgZW5vdWdoLiAgKi8KKyAgaWYgKCBuZnJhbWUgPCAyICogaGxlbiArIDIgKQorICAgIHsKKyAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICB4ZnJlZSAobGhhc2gpOworICAgICAgcmV0dXJuIEdQR19FUlJfRU5DT0RJTkdfUFJPQkxFTTsKKyAgICB9CisKKyAgLyogU3RlcCAyIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBieSB0aGUgY2FsbGVyIGFuZCB0aGUKKyAgICAgZ2NyeV9tcGlfYXByaW50IGFib3ZlLiAgKi8KKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgU0VFRCBhbmQgREIuICAqLworICBzZWVkID0geHRyeW1hbGxvY19zZWN1cmUgKG5mcmFtZSAtIDEpOworICBpZiAoIXNlZWQpCisgICAgeworICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICB4ZnJlZSAobGhhc2gpOworICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgZGIgPSBzZWVkICsgaGxlbjsKKworICAvKiBUbyBhdm9pZCBjaG9vc2VuIGNpcGhlcnRleHQgYXR0YWNrcyBmcm9tIG5vdyBvbiB3ZSBtYWtlIHN1cmUgdG8KKyAgICAgcnVuIGFsbCBjb2RlIGV2ZW4gaW4gdGhlIGVycm9yIGNhc2U7IHRoaXMgYXZvaWRzIHBvc3NpYmxlIHRpbWluZworICAgICBhdHRhY2tzIGFzIGRlc2NyaWJlZCBieSBNYW5nZXIuICAqLworCisgIC8qIFN0ZXAgM2E6IEhhc2ggdGhlIGxhYmVsLiAgKi8KKyAgLyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuICAqLworCisgIC8qIFN0ZXAgM2I6IFNlcGFyYXRlIHRoZSBlbmNvZGVkIG1lc3NhZ2UuICAqLworICBtYXNrZWRfc2VlZCA9IGZyYW1lICsgMTsKKyAgbWFza2VkX2RiICAgPSBmcmFtZSArIDEgKyBobGVuOworICBkYl9sZW4gICAgICA9IG5mcmFtZSAtIDEgLSBobGVuOworCisgIC8qIFN0ZXAgM2MgYW5kIDNkOiBzZWVkID0gbWFza2VkU2VlZCBeIG1nZihtYXNrZWREQiwgaGxlbikuICAqLworICBpZiAobWdmMSAoc2VlZCwgaGxlbiwgbWFza2VkX2RiLCBkYl9sZW4sIGFsZ28pKQorICAgIGZhaWxlZCA9IDE7CisgIGZvciAobiA9IDA7IG4gPCBobGVuOyBuKyspCisgICAgc2VlZFtuXSBePSBtYXNrZWRfc2VlZFtuXTsKKworICAvKiBTdGVwIDNlIGFuZCAzZjogZGIgPSBtYXNrZWREQiBeIG1nZihzZWVkLCBkYl9sZW4pLiAgKi8KKyAgaWYgKG1nZjEgKGRiLCBkYl9sZW4sIHNlZWQsIGhsZW4sIGFsZ28pKQorICAgIGZhaWxlZCA9IDE7CisgIGZvciAobiA9IDA7IG4gPCBkYl9sZW47IG4rKykKKyAgICBkYltuXSBePSBtYXNrZWRfZGJbbl07CisKKyAgLyogU3RlcCAzZzogQ2hlY2sgbGhhc2gsIGFuIHBvc3NpYmxlIGVtcHR5IHBhZGRpbmcgc3RyaW5nIHRlcm1pbmF0ZWQKKyAgICAgYnkgMHgwMSBhbmQgdGhlIGZpcnN0IGJ5dGUgb2YgRU0gYmVpbmcgMC4gICovCisgIGlmIChtZW1jbXAgKGxoYXNoLCBkYiwgaGxlbikpCisgICAgZmFpbGVkID0gMTsKKyAgZm9yIChuID0gaGxlbjsgbiA8IGRiX2xlbjsgbisrKQorICAgIGlmIChkYltuXSA9PSAweDAxKQorICAgICAgYnJlYWs7CisgIGlmIChuID09IGRiX2xlbikKKyAgICBmYWlsZWQgPSAxOworICBpZiAoZnJhbWVbMF0pCisgICAgZmFpbGVkID0gMTsKKworICB4ZnJlZSAobGhhc2gpOworICB4ZnJlZSAoZnJhbWUpOworICBpZiAoZmFpbGVkKQorICAgIHsKKyAgICAgIHhmcmVlIChzZWVkKTsKKyAgICAgIHJldHVybiBHUEdfRVJSX0VOQ09ESU5HX1BST0JMRU07CisgICAgfQorCisgIC8qIFN0ZXAgNDogT3V0cHV0IE0uICAqLworICAvKiBUbyBhdm9pZCBhbiBleHRyYSBhbGxvY2F0aW9uIHdlIHJldXNlIHRoZSBzZWVkIGJ1ZmZlci4gIFRoZSBvbmx5CisgICAgIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYW55d2F5IGZyZWUgdGhlIHJlc3VsdCBzb29uLiAgKi8KKyAgbisrOworICBtZW1tb3ZlIChzZWVkLCBkYiArIG4sIGRiX2xlbiAtIG4pOworICAqcl9yZXN1bHQgPSBzZWVkOworICAqcl9yZXN1bHRsZW4gPSBkYl9sZW4gLSBuOworICBzZWVkID0gTlVMTDsKKworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRoZXggKCJ2YWx1ZSBleHRyYWN0ZWQgZnJvbSBPQUVQIGVuY29kZWQgZGF0YSIsCisgICAgICAgICAgICAgICAgICAqcl9yZXN1bHQsICpyX3Jlc3VsdGxlbik7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyogUkZDLTM0NDcgKHBrY3MjMSB2Mi4xKSBQU1MgZW5jb2RpbmcuICBFbmNvZGUge1ZBTFVFLFZBTFVFTEVOfSBmb3IKKyAgIGFuIE5CSVRTIGtleS4gIE5vdGUgdGhhdCBWQUxVRSBpcyBhbHJlYWR5IHRoZSBtSGFzaCBmcm9tIHRoZQorICAgcGljdHVyZSBiZWxvdy4gIEFMR08gaXMgYSB2YWxpZCBoYXNoIGFsZ29yaXRobSBhbmQgU0FMVExFTiBpcyB0aGUKKyAgIGxlbmd0aCBvZiBzYWx0IHRvIGJlIHVzZWQuICBPbiBzdWNjZXNzIHRoZSByZXN1bHQgaXMgc3RvcmVkIGFzIGEKKyAgIG5ldyBNUEkgYXQgUl9SRVNVTFQuICBPbiBlcnJvciB0aGUgdmFsdWUgYXQgUl9SRVNVTFQgaXMgdW5kZWZpbmVkLgorCisgICBJZiB7UkFORE9NX09WRVJSSURFLCBSQU5ET01fT1ZFUlJJREVfTEVOfSBpcyBnaXZlbiBpdCBpcyB1c2VkIGFzCisgICB0aGUgc2FsdCBpbnN0ZWFkIG9mIHVzaW5nIGEgcmFuZG9tIHN0cmluZyBmb3IgdGhlIHNhbHQuICBUaGlzCisgICBmZWF0dXJlIGlzIG9ubHkgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzLgorCisgICBIZXJlIGlzIGZpZ3VyZSAyIGZyb20gdGhlIFJGQyAoZXJyYXRhIDU5NSBhcHBsaWVkKSBkZXBpY3RpbmcgdGhlCisgICBwcm9jZXNzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIE0gICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICBNJyA9IHxQYWRkaW5nMXwgIG1IYXNoICAgfCAgIHNhbHQgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tKyAgICAgVgorICAgICAgICAgREIgPSAgfFBhZGRpbmcyfCBzYWx0ICAgICB8ICAgSGFzaAorICAgICAgICAgICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgfCAgICArLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhvciA8LS0tIE1HRiA8LS0tfCAgICB8MHhiY3wKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICArLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgViAgICAgIFYKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLSsKKyAgICAgICAgIEVNID0gIHwgICAgbWFza2VkREIgICAgICAgfCAgICAgSCAgICB8MHhiY3wKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLSsKKworICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3JzYV9wc3NfZW5jb2RlIChnY3J5X21waV90ICpyX3Jlc3VsdCwgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuLCBpbnQgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpyYW5kb21fb3ZlcnJpZGUsIHNpemVfdCByYW5kb21fb3ZlcnJpZGVfbGVuKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmMgPSAwOworICBzaXplX3QgaGxlbjsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgaGFzaCBkaWdlc3QuICAqLworICB1bnNpZ25lZCBjaGFyICplbSA9IE5VTEw7ICAgIC8qIEVuY29kZWQgbWVzc2FnZS4gICovCisgIHNpemVfdCBlbWxlbiA9IChuYml0cys3KS84OyAgLyogTGVuZ3RoIGluIGJ5dGVzIG9mIEVNLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqaDsgICAgICAgICAgICAvKiBQb2ludHMgaW50byBFTS4gICovCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7ICAgLyogSGVscCBidWZmZXIuICAqLworICBzaXplX3QgYnVmbGVuOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBCVUYuICAqLworICB1bnNpZ25lZCBjaGFyICptaGFzaDsgICAgICAgIC8qIFBvaW50cyBpbnRvIEJVRi4gICovCisgIHVuc2lnbmVkIGNoYXIgKnNhbHQ7ICAgICAgICAgLyogUG9pbnRzIGludG8gQlVGLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqZGJtYXNrOyAgICAgICAvKiBQb2ludHMgaW50byBCVUYuICAqLworICB1bnNpZ25lZCBjaGFyICpwOworICBzaXplX3QgbjsKKworICAvKiBUaGlzIGNvZGUgaXMgaW1wbGVtZW50ZWQgYXMgZGVzY3JpYmVkIGJ5IHJmYy0zNDQ3IDkuMS4xLiAgKi8KKworICAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0LiAgKi8KKyAgaGxlbiA9IF9nY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pOworICBnY3J5X2Fzc2VydCAoaGxlbik7ICAvKiBXZSBleHBlY3QgYSB2YWxpZCBBTEdPIGhlcmUuICAqLworCisgIC8qIEFsbG9jYXRlIGEgaGVscCBidWZmZXIgYW5kIHNldHVwIHNvbWUgcG9pbnRlcnMuICAqLworICBidWZsZW4gPSA4ICsgaGxlbiArIHNhbHRsZW4gKyAoZW1sZW4gLSBobGVuIC0gMSk7CisgIGJ1ZiA9IHh0cnltYWxsb2MgKGJ1Zmxlbik7CisgIGlmICghYnVmKQorICAgIHsKKyAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgbWhhc2ggPSBidWYgKyA4OworICBzYWx0ICA9IG1oYXNoICsgaGxlbjsKKyAgZGJtYXNrPSBzYWx0ICsgc2FsdGxlbjsKKworICAvKiBTdGVwIDI6IFRoYXQgd291bGQgYmU6IG1IYXNoID0gSGFzaChNKSBidXQgb3VyIGlucHV0IGlzIGFscmVhZHkKKyAgICAgbUhhc2ggdGh1cyB3ZSBkbyBvbmx5IGEgY29uc2lzdGVuY3kgY2hlY2sgYW5kIGNvcHkgdG8gTUhBU0guICAqLworICBpZiAodmFsdWVsZW4gIT0gaGxlbikKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0xFTkdUSDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBtZW1jcHkgKG1oYXNoLCB2YWx1ZSwgaGxlbik7CisKKyAgLyogU3RlcCAzOiBDaGVjayBsZW5ndGggY29uc3RyYWludHMuICAqLworICBpZiAoZW1sZW4gPCBobGVuICsgc2FsdGxlbiArIDIpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX1RPT19TSE9SVDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBFTS4gICovCisgIGVtID0geHRyeW1hbGxvYyAoZW1sZW4pOworICBpZiAoIWVtKQorICAgIHsKKyAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgaCA9IGVtICsgZW1sZW4gLSAxIC0gaGxlbjsKKworICAvKiBTdGVwIDQ6IENyZWF0ZSBhIHNhbHQuICAqLworICBpZiAoc2FsdGxlbikKKyAgICB7CisgICAgICBpZiAocmFuZG9tX292ZXJyaWRlKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHJhbmRvbV9vdmVycmlkZV9sZW4gIT0gc2FsdGxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9BUkc7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgbWVtY3B5IChzYWx0LCByYW5kb21fb3ZlcnJpZGUsIHNhbHRsZW4pOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIF9nY3J5X3JhbmRvbWl6ZSAoc2FsdCwgc2FsdGxlbiwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgICB9CisKKyAgLyogU3RlcCA1IGFuZCA2OiBNJyA9IEhhc2goUGFkZGluZzEgfHwgbUhhc2ggfHwgc2FsdCkuICAqLworICBtZW1zZXQgKGJ1ZiwgMCwgOCk7ICAvKiBQYWRkaW5nLiAgKi8KKyAgX2djcnlfbWRfaGFzaF9idWZmZXIgKGFsZ28sIGgsIGJ1ZiwgOCArIGhsZW4gKyBzYWx0bGVuKTsKKworICAvKiBTdGVwIDcgYW5kIDg6IERCID0gUFMgfHwgMHgwMSB8fCBzYWx0LiAgKi8KKyAgLyogTm90ZSB0aGF0IHdlIHVzZSBFTSB0byBzdG9yZSBEQiBhbmQgbGF0ZXIgWG9yIGluLXBsYWNlLiAgKi8KKyAgcCA9IGVtICsgZW1sZW4gLSAxIC0gaGxlbiAtIHNhbHRsZW4gLSAxOworICBtZW1zZXQgKGVtLCAwLCBwIC0gZW0pOworICAqcCsrID0gMHgwMTsKKyAgbWVtY3B5IChwLCBzYWx0LCBzYWx0bGVuKTsKKworICAvKiBTdGVwIDk6IGRibWFzayA9IE1HRihILCBlbWxlbiAtIGhsZW4gLSAxKS4gICovCisgIG1nZjEgKGRibWFzaywgZW1sZW4gLSBobGVuIC0gMSwgaCwgaGxlbiwgYWxnbyk7CisKKyAgLyogU3RlcCAxMDogbWFza2VkREIgPSBEQiBeIGRiTWFzayAqLworICBmb3IgKG4gPSAwLCBwID0gZGJtYXNrOyBuIDwgZW1sZW4gLSBobGVuIC0gMTsgbisrLCBwKyspCisgICAgZW1bbl0gXj0gKnA7CisKKyAgLyogU3RlcCAxMTogU2V0IHRoZSBsZWZ0bW9zdCBiaXRzIHRvIHplcm8uICAqLworICBlbVswXSAmPSAweEZGID4+ICg4ICogZW1sZW4gLSBuYml0cyk7CisKKyAgLyogU3RlcCAxMjogRU0gPSBtYXNrZWREQiB8fCBIIHx8IDB4YmMuICAqLworICBlbVtlbWxlbi0xXSA9IDB4YmM7CisKKyAgLyogQ29udmVydCBFTSBpbnRvIGFuIE1QSS4gICovCisgIHJjID0gX2djcnlfbXBpX3NjYW4gKHJfcmVzdWx0LCBHQ1JZTVBJX0ZNVF9VU0csIGVtLCBlbWxlbiwgTlVMTCk7CisgIGlmICghcmMgJiYgREJHX0NJUEhFUikKKyAgICBsb2dfbXBpZHVtcCAoIlBTUyBlbmNvZGVkIGRhdGEiLCAqcl9yZXN1bHQpOworCisgbGVhdmU6CisgIGlmIChlbSkKKyAgICB7CisgICAgICB3aXBlbWVtb3J5IChlbSwgZW1sZW4pOworICAgICAgeGZyZWUgKGVtKTsKKyAgICB9CisgIGlmIChidWYpCisgICAgeworICAgICAgd2lwZW1lbW9yeSAoYnVmLCBidWZsZW4pOworICAgICAgeGZyZWUgKGJ1Zik7CisgICAgfQorICByZXR1cm4gcmM7Cit9CisKKworLyogVmVyaWZ5IGEgc2lnbmF0dXJlIGFzc3VtaW5nIFBTUyBwYWRkaW5nLiAgVkFMVUUgaXMgdGhlIGhhc2ggb2YgdGhlCisgICBtZXNzYWdlIChtSGFzaCkgZW5jb2RlZCBhcyBhbiBNUEk7IGl0cyBsZW5ndGggbXVzdCBtYXRjaCB0aGUgZGlnZXN0CisgICBsZW5ndGggb2YgQUxHTy4gIEVOQ09ERUQgaXMgdGhlIG91dHB1dCBvZiB0aGUgUlNBIHB1YmxpYyBrZXkKKyAgIGZ1bmN0aW9uIChFTSkuICBOQklUUyBpcyB0aGUgc2l6ZSBvZiB0aGUgcHVibGljIGtleS4gIEFMR08gaXMgdGhlCisgICBoYXNoIGFsZ29yaXRobSBhbmQgU0FMVExFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSB1c2VkIHNhbHQuICBUaGUKKyAgIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uIGVycm9yIGNvZGUuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X3JzYV9wc3NfdmVyaWZ5IChnY3J5X21waV90IHZhbHVlLCBnY3J5X21waV90IGVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgYWxnbywgc2l6ZV90IHNhbHRsZW4pCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisgIHNpemVfdCBobGVuOyAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBoYXNoIGRpZ2VzdC4gICovCisgIHVuc2lnbmVkIGNoYXIgKmVtID0gTlVMTDsgICAgLyogRW5jb2RlZCBtZXNzYWdlLiAgKi8KKyAgc2l6ZV90IGVtbGVuID0gKG5iaXRzKzcpLzg7ICAvKiBMZW5ndGggaW4gYnl0ZXMgb2YgRU0uICAqLworICB1bnNpZ25lZCBjaGFyICpzYWx0OyAgICAgICAgIC8qIFBvaW50cyBpbnRvIEVNLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqaDsgICAgICAgICAgICAvKiBQb2ludHMgaW50byBFTS4gICovCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7ICAgLyogSGVscCBidWZmZXIuICAqLworICBzaXplX3QgYnVmbGVuOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBCVUYuICAqLworICB1bnNpZ25lZCBjaGFyICpkYm1hc2s7ICAgICAgIC8qIFBvaW50cyBpbnRvIEJVRi4gICovCisgIHVuc2lnbmVkIGNoYXIgKm1oYXNoOyAgICAgICAgLyogUG9pbnRzIGludG8gQlVGLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgc2l6ZV90IG47CisKKyAgLyogVGhpcyBjb2RlIGlzIGltcGxlbWVudGVkIGFzIGRlc2NyaWJlZCBieSByZmMtMzQ0NyA5LjEuMi4gICovCisKKyAgLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdC4gICovCisgIGhsZW4gPSBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKyAgZ2NyeV9hc3NlcnQgKGhsZW4pOyAgLyogV2UgZXhwZWN0IGEgdmFsaWQgQUxHTyBoZXJlLiAgKi8KKworICAvKiBBbGxvY2F0ZSBhIGhlbHAgYnVmZmVyIGFuZCBzZXR1cCBzb21lIHBvaW50ZXJzLgorICAgICBUaGlzIGJ1ZmZlciBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgMS4gfCBkYm1hc2sgICAgICAgICAgICAgICAgICAgICAgIHwgbUhhc2ggfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgIGVtbGVuIC0gaGxlbiAtIDEgICAgICAgICAgICAgIGhsZW4KKworICAgICAgICArLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLSstKy0tLS0tLS0rCisgICAgIDIuIHwgcGFkZGluZzEgfCBtSGFzaCB8IHNhbHQgICAgfCB8IG1IYXNoIHwKKyAgICAgICAgKy0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rLSstLS0tLS0tKworICAgICAgICAgICAgIDggICAgICAgaGxlbiAgICBzYWx0bGVuICAgICBobGVuCisgICovCisgIGJ1ZmxlbiA9IDggKyBobGVuICsgc2FsdGxlbjsKKyAgaWYgKGJ1ZmxlbiA8IGVtbGVuIC0gaGxlbiAtIDEpCisgICAgYnVmbGVuID0gZW1sZW4gLSBobGVuIC0gMTsKKyAgYnVmbGVuICs9IGhsZW47CisgIGJ1ZiA9IHh0cnltYWxsb2MgKGJ1Zmxlbik7CisgIGlmICghYnVmKQorICAgIHsKKyAgICAgIHJjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgZGJtYXNrID0gYnVmOworICBtaGFzaCA9IGJ1ZiArIGJ1ZmxlbiAtIGhsZW47CisKKyAgLyogU3RlcCAyOiBUaGF0IHdvdWxkIGJlOiBtSGFzaCA9IEhhc2goTSkgYnV0IG91ciBpbnB1dCBpcyBhbHJlYWR5CisgICAgIG1IYXNoIHRodXMgd2Ugb25seSBuZWVkIHRvIGNvbnZlcnQgVkFMVUUgaW50byBNSEFTSC4gICovCisgIHJjID0gb2N0ZXRfc3RyaW5nX2Zyb21fbXBpIChOVUxMLCBtaGFzaCwgdmFsdWUsIGhsZW4pOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBDb252ZXJ0IHRoZSBzaWduYXR1cmUgaW50byBhbiBvY3RldCBzdHJpbmcuICAqLworICByYyA9IG9jdGV0X3N0cmluZ19mcm9tX21waSAoJmVtLCBOVUxMLCBlbmNvZGVkLCBlbWxlbik7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworCisgIC8qIFN0ZXAgMzogQ2hlY2sgbGVuZ3RoIG9mIEVNLiAgQmVjYXVzZSB3ZSBpbnRlcm5hbGx5IHVzZSBNUEkKKyAgICAgZnVuY3Rpb25zIHdlIGNhbid0IGRvIHRoaXMgcHJvcGVybHk7IEVNTEVOIGlzIGFsd2F5cyB0aGUgbGVuZ3RoCisgICAgIG9mIHRoZSBrZXkgYmVjYXVzZSBvY3RldF9zdHJpbmdfZnJvbV9tcGkgbmVlZHMgdG8gbGVmdCBwYWQgdGhlCisgICAgIHJlc3VsdCB3aXRoIHplcm8gdG8gY29wZSB3aXRoIHRoZSBmYWN0IHRoYXQgb3VyIE1QSXMgc3VwcHJlc3MgYWxsCisgICAgIGxlYWRpbmcgemVyb2VzLiAgVGh1cyB3aGF0IHdlIHRlc3QgaGVyZSBhcmUgbWVyZWx5IHRoZSBkaWdlc3QgYW5kCisgICAgIHNhbHQgbGVuZ3RocyB0byB0aGUga2V5LiAgKi8KKyAgaWYgKGVtbGVuIDwgaGxlbiArIHNhbHRsZW4gKyAyKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9UT09fU0hPUlQ7IC8qIEZvciB0aGUgaGFzaCBhbmQgc2FsdGxlbi4gICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBTdGVwIDQ6IENoZWNrIGxhc3Qgb2N0ZXQuICAqLworICBpZiAoZW1bZW1sZW4gLSAxXSAhPSAweGJjKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogU3RlcCA1OiBTcGxpdCBFTS4gICovCisgIGggPSBlbSArIGVtbGVuIC0gMSAtIGhsZW47CisKKyAgLyogU3RlcCA2OiBDaGVjayB0aGUgbGVmdG1vc3QgYml0cy4gICovCisgIGlmICgoZW1bMF0gJiB+KDB4RkYgPj4gKDggKiBlbWxlbiAtIG5iaXRzKSkpKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogU3RlcCA3OiBkYm1hc2sgPSBNR0YoSCwgZW1sZW4gLSBobGVuIC0gMSkuICAqLworICBtZ2YxIChkYm1hc2ssIGVtbGVuIC0gaGxlbiAtIDEsIGgsIGhsZW4sIGFsZ28pOworCisgIC8qIFN0ZXAgODogbWFza2VkREIgPSBEQiBeIGRiTWFzay4gICovCisgIGZvciAobiA9IDAsIHAgPSBkYm1hc2s7IG4gPCBlbWxlbiAtIGhsZW4gLSAxOyBuKyssIHArKykKKyAgICBlbVtuXSBePSAqcDsKKworICAvKiBTdGVwIDk6IFNldCBsZWZ0bW9zdCBiaXRzIGluIERCIHRvIHplcm8uICAqLworICBlbVswXSAmPSAweEZGID4+ICg4ICogZW1sZW4gLSBuYml0cyk7CisKKyAgLyogU3RlcCAxMDogQ2hlY2sgdGhlIHBhZGRpbmcgb2YgREIuICAqLworICBmb3IgKG4gPSAwOyBuIDwgZW1sZW4gLSBobGVuIC0gc2FsdGxlbiAtIDIgJiYgIWVtW25dOyBuKyspCisgICAgOworICBpZiAobiAhPSBlbWxlbiAtIGhsZW4gLSBzYWx0bGVuIC0gMiB8fCBlbVtuKytdICE9IDEpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0JBRF9TSUdOQVRVUkU7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBTdGVwIDExOiBFeHRyYWN0IHNhbHQgZnJvbSBEQi4gICovCisgIHNhbHQgPSBlbSArIG47CisKKyAgLyogU3RlcCAxMjogIE0nID0gKDB4KTAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIHx8IG1IYXNoIHx8IHNhbHQgKi8KKyAgbWVtc2V0IChidWYsIDAsIDgpOworICBtZW1jcHkgKGJ1Zis4LCBtaGFzaCwgaGxlbik7CisgIG1lbWNweSAoYnVmKzgraGxlbiwgc2FsdCwgc2FsdGxlbik7CisKKyAgLyogU3RlcCAxMzogIEgnID0gSGFzaChNJykuICAqLworICBfZ2NyeV9tZF9oYXNoX2J1ZmZlciAoYWxnbywgYnVmLCBidWYsIDggKyBobGVuICsgc2FsdGxlbik7CisKKyAgLyogU3RlcCAxNDogIENoZWNrIEggPT0gSCcuICAgKi8KKyAgcmMgPSBtZW1jbXAgKGgsIGJ1ZiwgaGxlbikgPyBHUEdfRVJSX0JBRF9TSUdOQVRVUkUgOiBHUEdfRVJSX05PX0VSUk9SOworCisgbGVhdmU6CisgIGlmIChlbSkKKyAgICB7CisgICAgICB3aXBlbWVtb3J5IChlbSwgZW1sZW4pOworICAgICAgeGZyZWUgKGVtKTsKKyAgICB9CisgIGlmIChidWYpCisgICAgeworICAgICAgd2lwZW1lbW9yeSAoYnVmLCBidWZsZW4pOworICAgICAgeGZyZWUgKGJ1Zik7CisgICAgfQorICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jaXBoZXIvcnNhLmMgYi9jaXBoZXIvcnNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4ZDIzNQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9yc2EuYwpAQCAtMCwwICsxLDE2MDggQEAKKy8qIHJzYS5jIC0gUlNBIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTkgYnkgV2VybmVyIEtvY2ggKGRkOWpuKQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKiBUaGlzIGNvZGUgdXNlcyBhbiBhbGdvcml0aG0gcHJvdGVjdGVkIGJ5IFUuUy4gUGF0ZW50ICM0LDQwNSw4MjkKKyAgIHdoaWNoIGV4cGlyZWQgb24gU2VwdGVtYmVyIDIwLCAyMDAwLiAgVGhlIHBhdGVudCBob2xkZXIgcGxhY2VkIHRoYXQKKyAgIHBhdGVudCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluIG9uIFNlcCA2dGgsIDIwMDAuCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAibXBpLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAicHVia2V5LWludGVybmFsLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tcGlfdCBuOwkgICAgLyogbW9kdWx1cyAqLworICBnY3J5X21waV90IGU7CSAgICAvKiBleHBvbmVudCAqLworfSBSU0FfcHVibGljX2tleTsKKworCit0eXBlZGVmIHN0cnVjdAoreworICBnY3J5X21waV90IG47CSAgICAvKiBwdWJsaWMgbW9kdWx1cyAqLworICBnY3J5X21waV90IGU7CSAgICAvKiBwdWJsaWMgZXhwb25lbnQgKi8KKyAgZ2NyeV9tcGlfdCBkOwkgICAgLyogZXhwb25lbnQgKi8KKyAgZ2NyeV9tcGlfdCBwOwkgICAgLyogcHJpbWUgIHAuICovCisgIGdjcnlfbXBpX3QgcTsJICAgIC8qIHByaW1lICBxLiAqLworICBnY3J5X21waV90IHU7CSAgICAvKiBpbnZlcnNlIG9mIHAgbW9kIHEuICovCit9IFJTQV9zZWNyZXRfa2V5OworCisKK3N0YXRpYyBjb25zdCBjaGFyICpyc2FfbmFtZXNbXSA9CisgIHsKKyAgICAicnNhIiwKKyAgICAib3BlbnBncC1yc2EiLAorICAgICJvaWQuMS4yLjg0MC4xMTM1NDkuMS4xLjEiLAorICAgIE5VTEwsCisgIH07CisKKworLyogQSBzYW1wbGUgMTAyNCBiaXQgUlNBIGtleSB1c2VkIGZvciB0aGUgc2VsZnRlc3RzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9zZWNyZXRfa2V5W10gPQorIihwcml2YXRlLWtleSIKKyIgKHJzYSIKKyIgIChuICMwMGUwY2U5NmY5MGI2YzllMDJmMzkyMmJlYWRhOTNmZTUwYTg3NWVhYzZiY2MxOGJiOWE5Y2YyZTg0OTY1Y2FhIgorIiAgICAgIDJkMWZmOTVhN2Y1NDI0NjVjNmMwYzE5ZDI3NmU0NTI2Y2UwNDg4NjhhN2E5MTRmZDM0M2NjM2E4N2RkNzQyOTEiCisiICAgICAgZmZjNTY1NTA2ZDViYmIyNWNiYWM2YTBlMmRkMWY4YmNhYWIwZDRhMjljMmYzN2M5NTBmMzYzNDg0YmYyNjlmNyIKKyIgICAgICA4OTE0NDA0NjRiYWY3OTgyN2UwM2EzNmU3MGI4MTQ5MzhlZWJkYzYzZTk2NDI0N2JlNzVkYzU4YjAxNGI3ZWEyNTEjKSIKKyIgIChlICMwMTAwMDEjKSIKKyIgIChkICMwNDYxMjlmMjQ4OWQ3MTU3OWJlMGE3NWZlMDI5YmQ2Y2RiNTc0ZWJmNTdlYThhNWIwZmRhOTQyY2FiOTQzYjExIgorIiAgICAgIDdkN2JiOTVlNWQyODg3NWUwZjlmYzVmY2MwNmE3MmY2ZDUwMjQ2NGRhYmRlZDc4ZWY2YjcxNjE3N2I4M2Q1YmQiCisiICAgICAgYzU0M2RjNWQzZmVkOTMyZTU5ZjU4OTdlOTJlNmY1OGEwZjMzNDI0MTA2YTNiNmZhMmNiZjg3NzUxMGU0YWMyMSIKKyIgICAgICBjM2VlNDc4NTFlOTdkMTI5OTYyMjJhYzM1NjZkNGNjYjBiODNkMTY0MDc0YWJmN2RlNjU1ZmMyNDQ2ZGExNzgxIykiCisiICAocCAjMDBlODYxYjcwMGUxN2U4YWZlNjgzN2U3NTEyZTM1YjZjYTExZDBhZTQ3ZDhiODUxNjFjNjdiYWY2NDM3NzIxMyIKKyIgICAgICBmZTUyZDc3MmYyMDM1YjNjYTgzMGFmNDFkOGE0MTIwZTFjMWM3MGQxMmNjMjJmMDBkMjhkMzFkZDQ4YThkNDI0ZjEjKSIKKyIgIChxICMwMGY3YTdjYTUzNjdjNjYxZjhlNjJkZjM0ZjBkMDVjMTBjODhlNTQ5MjM0OGRkN2JkZGM5NDJjOWE4ZjM2OWY5IgorIiAgICAgIDM1YTA3Nzg1ZDJkYjgwNTIxNWVkNzg2ZTQyODVkZjE2NThlZWQzY2U4NGY0NjliODFiNTBkMzU4NDA3YjRhZDM2MSMpIgorIiAgKHUgIzMwNDU1OWE5ZWFkNTZkMjMwOWQyMDM4MTFhNjQxYmIxYTA5NjI2YmM4ZWIzNmZmZmEyM2M5NjhlYzViZDg5MWUiCisiICAgICAgZWJiYWZjNzNhZTY2NmUwMWJhN2M4OTkwYmFlMDZjYzJiYmUxMGI3NWU2OWZjYWNiMzUzYTY0NzMwNzlkOGU5YiMpKSkiOworLyogQSBzYW1wbGUgMTAyNCBiaXQgUlNBIGtleSB1c2VkIGZvciB0aGUgc2VsZnRlc3RzIChwdWJsaWMgb25seSkuICAqLworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX3B1YmxpY19rZXlbXSA9CisiKHB1YmxpYy1rZXkiCisiIChyc2EiCisiICAobiAjMDBlMGNlOTZmOTBiNmM5ZTAyZjM5MjJiZWFkYTkzZmU1MGE4NzVlYWM2YmNjMThiYjlhOWNmMmU4NDk2NWNhYSIKKyIgICAgICAyZDFmZjk1YTdmNTQyNDY1YzZjMGMxOWQyNzZlNDUyNmNlMDQ4ODY4YTdhOTE0ZmQzNDNjYzNhODdkZDc0MjkxIgorIiAgICAgIGZmYzU2NTUwNmQ1YmJiMjVjYmFjNmEwZTJkZDFmOGJjYWFiMGQ0YTI5YzJmMzdjOTUwZjM2MzQ4NGJmMjY5ZjciCisiICAgICAgODkxNDQwNDY0YmFmNzk4MjdlMDNhMzZlNzBiODE0OTM4ZWViZGM2M2U5NjQyNDdiZTc1ZGM1OGIwMTRiN2VhMjUxIykiCisiICAoZSAjMDEwMDAxIykpKSI7CisKKworCisMCitzdGF0aWMgaW50IHRlc3Rfa2V5cyAoUlNBX3NlY3JldF9rZXkgKnNrLCB1bnNpZ25lZCBuYml0cyk7CitzdGF0aWMgaW50ICBjaGVja19zZWNyZXRfa2V5IChSU0Ffc2VjcmV0X2tleSAqc2spOworc3RhdGljIHZvaWQgcHVibGljIChnY3J5X21waV90IG91dHB1dCwgZ2NyeV9tcGlfdCBpbnB1dCwgUlNBX3B1YmxpY19rZXkgKnNrZXkpOworc3RhdGljIHZvaWQgc2VjcmV0IChnY3J5X21waV90IG91dHB1dCwgZ2NyeV9tcGlfdCBpbnB1dCwgUlNBX3NlY3JldF9rZXkgKnNrZXkpOworc3RhdGljIHVuc2lnbmVkIGludCByc2FfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBwYXJtcyk7CisKKworLyogQ2hlY2sgdGhhdCBhIGZyZXNobHkgZ2VuZXJhdGVkIGtleSBhY3R1YWxseSB3b3Jrcy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGludAordGVzdF9rZXlzIChSU0Ffc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cykKK3sKKyAgaW50IHJlc3VsdCA9IC0xOyAvKiBEZWZhdWx0IHRvIGZhaWx1cmUuICAqLworICBSU0FfcHVibGljX2tleSBwazsKKyAgZ2NyeV9tcGlfdCBwbGFpbnRleHQgPSBtcGlfbmV3IChuYml0cyk7CisgIGdjcnlfbXBpX3QgY2lwaGVydGV4dCA9IG1waV9uZXcgKG5iaXRzKTsKKyAgZ2NyeV9tcGlfdCBkZWNyX3BsYWludGV4dCA9IG1waV9uZXcgKG5iaXRzKTsKKyAgZ2NyeV9tcGlfdCBzaWduYXR1cmUgPSBtcGlfbmV3IChuYml0cyk7CisKKyAgLyogUHV0IHRoZSByZWxldmFudCBwYXJhbWV0ZXJzIGludG8gYSBwdWJsaWMga2V5IHN0cnVjdHVyZS4gICovCisgIHBrLm4gPSBzay0+bjsKKyAgcGsuZSA9IHNrLT5lOworCisgIC8qIENyZWF0ZSBhIHJhbmRvbSBwbGFpbnRleHQuICAqLworICBfZ2NyeV9tcGlfcmFuZG9taXplIChwbGFpbnRleHQsIG5iaXRzLCBHQ1JZX1dFQUtfUkFORE9NKTsKKworICAvKiBFbmNyeXB0IHVzaW5nIHRoZSBwdWJsaWMga2V5LiAgKi8KKyAgcHVibGljIChjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsICZwayk7CisKKyAgLyogQ2hlY2sgdGhhdCB0aGUgY2lwaGVyIHRleHQgZG9lcyBub3QgbWF0Y2ggdGhlIHBsYWludGV4dC4gICovCisgIGlmICghbXBpX2NtcCAoY2lwaGVydGV4dCwgcGxhaW50ZXh0KSkKKyAgICBnb3RvIGxlYXZlOyAvKiBDaXBoZXJ0ZXh0IGlzIGlkZW50aWNhbCB0byB0aGUgcGxhaW50ZXh0LiAgKi8KKworICAvKiBEZWNyeXB0IHVzaW5nIHRoZSBzZWNyZXQga2V5LiAgKi8KKyAgc2VjcmV0IChkZWNyX3BsYWludGV4dCwgY2lwaGVydGV4dCwgc2spOworCisgIC8qIENoZWNrIHRoYXQgdGhlIGRlY3J5cHRlZCBwbGFpbnRleHQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0LiAgKi8KKyAgaWYgKG1waV9jbXAgKGRlY3JfcGxhaW50ZXh0LCBwbGFpbnRleHQpKQorICAgIGdvdG8gbGVhdmU7IC8qIFBsYWludGV4dCBkb2VzIG5vdCBtYXRjaC4gICovCisKKyAgLyogQ3JlYXRlIGFub3RoZXIgcmFuZG9tIHBsYWludGV4dCBhcyBkYXRhIGZvciBzaWduYXR1cmUgY2hlY2tpbmcuICAqLworICBfZ2NyeV9tcGlfcmFuZG9taXplIChwbGFpbnRleHQsIG5iaXRzLCBHQ1JZX1dFQUtfUkFORE9NKTsKKworICAvKiBVc2UgdGhlIFJTQSBzZWNyZXQgZnVuY3Rpb24gdG8gY3JlYXRlIGEgc2lnbmF0dXJlIG9mIHRoZSBwbGFpbnRleHQuICAqLworICBzZWNyZXQgKHNpZ25hdHVyZSwgcGxhaW50ZXh0LCBzayk7CisKKyAgLyogVXNlIHRoZSBSU0EgcHVibGljIGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGlzIHNpZ25hdHVyZS4gICovCisgIHB1YmxpYyAoZGVjcl9wbGFpbnRleHQsIHNpZ25hdHVyZSwgJnBrKTsKKyAgaWYgKG1waV9jbXAgKGRlY3JfcGxhaW50ZXh0LCBwbGFpbnRleHQpKQorICAgIGdvdG8gbGVhdmU7IC8qIFNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaC4gICovCisKKyAgLyogTW9kaWZ5IHRoZSBzaWduYXR1cmUgYW5kIGNoZWNrIHRoYXQgdGhlIHNpZ25pbmcgZmFpbHMuICAqLworICBtcGlfYWRkX3VpIChzaWduYXR1cmUsIHNpZ25hdHVyZSwgMSk7CisgIHB1YmxpYyAoZGVjcl9wbGFpbnRleHQsIHNpZ25hdHVyZSwgJnBrKTsKKyAgaWYgKCFtcGlfY21wIChkZWNyX3BsYWludGV4dCwgcGxhaW50ZXh0KSkKKyAgICBnb3RvIGxlYXZlOyAvKiBTaWduYXR1cmUgbWF0Y2hlcyBidXQgc2hvdWxkIG5vdC4gICovCisKKyAgcmVzdWx0ID0gMDsgLyogQWxsIHRlc3RzIHN1Y2NlZWRlZC4gICovCisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNpZ25hdHVyZSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChkZWNyX3BsYWludGV4dCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChjaXBoZXJ0ZXh0KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBsYWludGV4dCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogQ2FsbGJhY2sgdXNlZCBieSB0aGUgcHJpbWUgZ2VuZXJhdGlvbiB0byB0ZXN0IHdoZXRoZXIgdGhlIGV4cG9uZW50CisgICBpcyBzdWl0YWJsZS4gUmV0dXJucyAwIGlmIHRoZSB0ZXN0IGhhcyBiZWVuIHBhc3NlZC4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2V4cG9uZW50ICh2b2lkICphcmcsIGdjcnlfbXBpX3QgYSkKK3sKKyAgZ2NyeV9tcGlfdCBlID0gYXJnOworICBnY3J5X21waV90IHRtcDsKKyAgaW50IHJlc3VsdDsKKworICBtcGlfc3ViX3VpIChhLCBhLCAxKTsKKyAgdG1wID0gX2djcnlfbXBpX2FsbG9jX2xpa2UgKGEpOworICByZXN1bHQgPSAhbXBpX2djZCh0bXAsIGUsIGEpOyAvKiBHQ0QgaXMgbm90IDEuICovCisgIF9nY3J5X21waV9yZWxlYXNlICh0bXApOworICBtcGlfYWRkX3VpIChhLCBhLCAxKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIEdlbmVyYXRlIGEga2V5IHBhaXIgd2l0aCBhIGtleSBvZiBzaXplIE5CSVRTLgorICogVVNFX0UgPSAwIGxldCBMaWJjZ3J5cHQgZGVjaWRlIHdoYXQgZXhwb25lbnQgdG8gdXNlLgorICogICAgICAgPSAxIHJlcXVlc3QgdGhlIHVzZSBvZiBhICJzZWN1cmUiIGV4cG9uZW50OyB0aGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWUKKyAqICAgICAgICAgICBzcGVjaWZpY2F0aW9uIHRvIGJlIDY1NTM3LgorICogICAgICAgPiAyIFVzZSB0aGlzIHB1YmxpYyBleHBvbmVudC4gIElmIHRoZSBnaXZlbiBleHBvbmVudAorICogICAgICAgICAgIGlzIG5vdCBvZGQgb25lIGlzIGludGVybmFsbHkgYWRkZWQgdG8gaXQuCisgKiBUUkFOU0lFTlRfS0VZOiAgSWYgdHJ1ZSwgZ2VuZXJhdGUgdGhlIHByaW1lcyB1c2luZyB0aGUgc3RhbmRhcmQgUk5HLgorICogUmV0dXJuczogMiBzdHJ1Y3R1cmVzIGZpbGxlZCB3aXRoIGFsbCBuZWVkZWQgdmFsdWVzCisgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorZ2VuZXJhdGVfc3RkIChSU0Ffc2VjcmV0X2tleSAqc2ssIHVuc2lnbmVkIGludCBuYml0cywgdW5zaWduZWQgbG9uZyB1c2VfZSwKKyAgICAgICAgICAgICAgaW50IHRyYW5zaWVudF9rZXkpCit7CisgIGdjcnlfbXBpX3QgcCwgcTsgLyogdGhlIHR3byBwcmltZXMgKi8KKyAgZ2NyeV9tcGlfdCBkOyAgICAvKiB0aGUgcHJpdmF0ZSBrZXkgKi8KKyAgZ2NyeV9tcGlfdCB1OworICBnY3J5X21waV90IHQxLCB0MjsKKyAgZ2NyeV9tcGlfdCBuOyAgICAvKiB0aGUgcHVibGljIGtleSAqLworICBnY3J5X21waV90IGU7ICAgIC8qIHRoZSBleHBvbmVudCAqLworICBnY3J5X21waV90IHBoaTsgIC8qIGhlbHBlcjogKHAtMSkocS0xKSAqLworICBnY3J5X21waV90IGc7CisgIGdjcnlfbXBpX3QgZjsKKyAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWw7CisKKyAgaWYgKGZpcHNfbW9kZSAoKSkKKyAgICB7CisgICAgICBpZiAobmJpdHMgPCAxMDI0KQorICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisgICAgICBpZiAodHJhbnNpZW50X2tleSkKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworICAgIH0KKworICAvKiBUaGUgcmFuZG9tIHF1YWxpdHkgZGVwZW5kcyBvbiB0aGUgdHJhbnNpZW50X2tleSBmbGFnLiAgKi8KKyAgcmFuZG9tX2xldmVsID0gdHJhbnNpZW50X2tleSA/IEdDUllfU1RST05HX1JBTkRPTSA6IEdDUllfVkVSWV9TVFJPTkdfUkFORE9NOworCisgIC8qIE1ha2Ugc3VyZSB0aGF0IG5iaXRzIGlzIGV2ZW4gc28gdGhhdCB3ZSBnZW5lcmF0ZSBwLCBxIG9mIGVxdWFsIHNpemUuICovCisgIGlmICggKG5iaXRzJjEpICkKKyAgICBuYml0cysrOworCisgIGlmICh1c2VfZSA9PSAxKSAgIC8qIEFsaWFzIGZvciBhIHNlY3VyZSB2YWx1ZSAqLworICAgIHVzZV9lID0gNjU1Mzc7ICAvKiBhcyBkZW1hbmRlZCBieSBTcGhpbnguICovCisKKyAgLyogUHVibGljIGV4cG9uZW50OgorICAgICBJbiBnZW5lcmFsIHdlIHVzZSA0MSBhcyB0aGlzIGlzIHF1aXRlIGZhc3QgYW5kIG1vcmUgc2VjdXJlIHRoYW4gdGhlCisgICAgIGNvbW1vbmx5IHVzZWQgMTcuICBCZW5jaG1hcmtpbmcgdGhlIFJTQSB2ZXJpZnkgZnVuY3Rpb24KKyAgICAgd2l0aCBhIDEwMjQgYml0IGtleSB5aWVsZHMgKDIwMDEtMTEtMDgpOgorICAgICBlPTE3ICAgIDAuNTQgbXMKKyAgICAgZT00MSAgICAwLjc1IG1zCisgICAgIGU9MjU3ICAgMC45NSBtcworICAgICBlPTY1NTM3IDEuODAgbXMKKyAgKi8KKyAgZSA9IG1waV9hbGxvYyggKDMyK0JJVFNfUEVSX01QSV9MSU1CLTEpL0JJVFNfUEVSX01QSV9MSU1CICk7CisgIGlmICghdXNlX2UpCisgICAgbXBpX3NldF91aSAoZSwgNDEpOyAgICAgLyogVGhpcyBpcyBhIHJlYXNvbmFibGUgc2VjdXJlIGFuZCBmYXN0IHZhbHVlICovCisgIGVsc2UKKyAgICB7CisgICAgICB1c2VfZSB8PSAxOyAvKiBtYWtlIHN1cmUgdGhpcyBpcyBvZGQgKi8KKyAgICAgIG1waV9zZXRfdWkgKGUsIHVzZV9lKTsKKyAgICB9CisKKyAgbiA9IG1waV9uZXcgKG5iaXRzKTsKKworICBwID0gcSA9IE5VTEw7CisgIGRvCisgICAgeworICAgICAgLyogc2VsZWN0IHR3byAodmVyeSBzZWNyZXQpIHByaW1lcyAqLworICAgICAgaWYgKHApCisgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChwKTsKKyAgICAgIGlmIChxKQorICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAocSk7CisgICAgICBpZiAodXNlX2UpCisgICAgICAgIHsgLyogRG8gYW4gZXh0cmEgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGUgZ2l2ZW4gZXhwb25lbnQgaXMKKyAgICAgICAgICAgICBzdWl0YWJsZS4gKi8KKyAgICAgICAgICBwID0gX2djcnlfZ2VuZXJhdGVfc2VjcmV0X3ByaW1lIChuYml0cy8yLCByYW5kb21fbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZXhwb25lbnQsIGUpOworICAgICAgICAgIHEgPSBfZ2NyeV9nZW5lcmF0ZV9zZWNyZXRfcHJpbWUgKG5iaXRzLzIsIHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19leHBvbmVudCwgZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeyAvKiBXZSBjaGVjayB0aGUgZXhwb25lbnQgbGF0ZXIuICovCisgICAgICAgICAgcCA9IF9nY3J5X2dlbmVyYXRlX3NlY3JldF9wcmltZSAobmJpdHMvMiwgcmFuZG9tX2xldmVsLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICBxID0gX2djcnlfZ2VuZXJhdGVfc2VjcmV0X3ByaW1lIChuYml0cy8yLCByYW5kb21fbGV2ZWwsIE5VTEwsIE5VTEwpOworICAgICAgICB9CisgICAgICBpZiAobXBpX2NtcCAocCwgcSkgPiAwICkgLyogcCBzaGFsbCBiZSBzbWFsbGVyIHRoYW4gcSAoZm9yIGNhbGMgb2YgdSkqLworICAgICAgICBtcGlfc3dhcChwLHEpOworICAgICAgLyogY2FsY3VsYXRlIHRoZSBtb2R1bHVzICovCisgICAgICBtcGlfbXVsKCBuLCBwLCBxICk7CisgICAgfQorICB3aGlsZSAoIG1waV9nZXRfbmJpdHMobikgIT0gbmJpdHMgKTsKKworICAvKiBjYWxjdWxhdGUgRXVsZXIgdG90aWVudDogcGhpID0gKHAtMSkocS0xKSAqLworICB0MSA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHApICk7CisgIHQyID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMocCkgKTsKKyAgcGhpICAgPSBtcGlfc25ldyAoIG5iaXRzICk7CisgIGcJPSBtcGlfc25ldyAoIG5iaXRzICk7CisgIGYJPSBtcGlfc25ldyAoIG5iaXRzICk7CisgIG1waV9zdWJfdWkoIHQxLCBwLCAxICk7CisgIG1waV9zdWJfdWkoIHQyLCBxLCAxICk7CisgIG1waV9tdWwoIHBoaSwgdDEsIHQyICk7CisgIG1waV9nY2QgKGcsIHQxLCB0Mik7CisgIG1waV9mZGl2X3EoZiwgcGhpLCBnKTsKKworICB3aGlsZSAoIW1waV9nY2QodDEsIGUsIHBoaSkpIC8qICh3aGlsZSBnY2QgaXMgbm90IDEpICovCisgICAgeworICAgICAgaWYgKHVzZV9lKQorICAgICAgICBCVUcgKCk7IC8qIFRoZSBwcmltZSBnZW5lcmF0b3IgYWxyZWFkeSBtYWRlIHN1cmUgdGhhdCB3ZQorICAgICAgICAgICAgICAgICAgIG5ldmVyIGNhbiBnZXQgdG8gaGVyZS4gKi8KKyAgICAgIG1waV9hZGRfdWkgKGUsIGUsIDIpOworICAgIH0KKworICAvKiBjYWxjdWxhdGUgdGhlIHNlY3JldCBrZXkgZCA9IGVeMSBtb2QgcGhpICovCisgIGQgPSBtcGlfc25ldyAoIG5iaXRzICk7CisgIG1waV9pbnZtIChkLCBlLCBmICk7CisgIC8qIGNhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBwIGFuZCBxICh1c2VkIGZvciBjaGluZXNlIHJlbWFpbmRlciB0aGVvcmVtKSovCisgIHUgPSBtcGlfc25ldyAoIG5iaXRzICk7CisgIG1waV9pbnZtKHUsIHAsIHEgKTsKKworICBpZiggREJHX0NJUEhFUiApCisgICAgeworICAgICAgbG9nX21waWR1bXAoIiAgcD0gIiwgcCApOworICAgICAgbG9nX21waWR1bXAoIiAgcT0gIiwgcSApOworICAgICAgbG9nX21waWR1bXAoInBoaT0gIiwgcGhpICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBnPSAiLCBnICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBmPSAiLCBmICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBuPSAiLCBuICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBlPSAiLCBlICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBkPSAiLCBkICk7CisgICAgICBsb2dfbXBpZHVtcCgiICB1PSAiLCB1ICk7CisgICAgfQorCisgIF9nY3J5X21waV9yZWxlYXNlICh0MSk7CisgIF9nY3J5X21waV9yZWxlYXNlICh0Mik7CisgIF9nY3J5X21waV9yZWxlYXNlIChwaGkpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZik7CisgIF9nY3J5X21waV9yZWxlYXNlIChnKTsKKworICBzay0+biA9IG47CisgIHNrLT5lID0gZTsKKyAgc2stPnAgPSBwOworICBzay0+cSA9IHE7CisgIHNrLT5kID0gZDsKKyAgc2stPnUgPSB1OworCisgIC8qIE5vdyB3ZSBjYW4gdGVzdCBvdXIga2V5cy4gKi8KKyAgaWYgKHRlc3Rfa2V5cyAoc2ssIG5iaXRzIC0gNjQpKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+bik7IHNrLT5uID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+ZSk7IHNrLT5lID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+cCk7IHNrLT5wID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+cSk7IHNrLT5xID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+ZCk7IHNrLT5kID0gTlVMTDsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChzay0+dSk7IHNrLT51ID0gTlVMTDsKKyAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgic2VsZi10ZXN0IGFmdGVyIGtleSBnZW5lcmF0aW9uIGZhaWxlZCIpOworICAgICAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCisvKiBIZWxwZXIgZm9yIGdlbmVyYXRlX3g5MzEuICAqLworc3RhdGljIGdjcnlfbXBpX3QKK2dlbl94OTMxX3Bhcm1feHAgKHVuc2lnbmVkIGludCBuYml0cykKK3sKKyAgZ2NyeV9tcGlfdCB4cDsKKworICB4cCA9IG1waV9zbmV3IChuYml0cyk7CisgIF9nY3J5X21waV9yYW5kb21pemUgKHhwLCBuYml0cywgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworCisgIC8qIFRoZSByZXF1aXJlbWVudCBmb3IgWHAgaXM6CisKKyAgICAgICBzcXJ0ezJ9KjJee25iaXRzLTF9IDw9IHhwIDw9IDJee25iaXRzfSAtIDEKKworICAgICBXZSBzZXQgdGhlIHR3byBoaWdoIG9yZGVyIGJpdHMgdG8gMSB0byBzYXRpc2Z5IHRoZSBsb3dlciBib3VuZC4KKyAgICAgQnkgdXNpbmcgbXBpX3NldF9oaWdoYml0IHdlIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cHBlciBib3VuZCBpcworICAgICBzYXRpc2ZpZWQgYXMgd2VsbC4gICovCisgIG1waV9zZXRfaGlnaGJpdCAoeHAsIG5iaXRzLTEpOworICBtcGlfc2V0X2JpdCAoeHAsIG5iaXRzLTIpOworICBnY3J5X2Fzc2VydCAoIG1waV9nZXRfbmJpdHMgKHhwKSA9PSBuYml0cyApOworCisgIHJldHVybiB4cDsKK30KKworCisvKiBIZWxwZXIgZm9yIGdlbmVyYXRlX3g5MzEuICAqLworc3RhdGljIGdjcnlfbXBpX3QKK2dlbl94OTMxX3Bhcm1feGkgKHZvaWQpCit7CisgIGdjcnlfbXBpX3QgeGk7CisKKyAgeGkgPSBtcGlfc25ldyAoMTAxKTsKKyAgX2djcnlfbXBpX3JhbmRvbWl6ZSAoeGksIDEwMSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICBtcGlfc2V0X2hpZ2hiaXQgKHhpLCAxMDApOworICBnY3J5X2Fzc2VydCAoIG1waV9nZXRfbmJpdHMgKHhpKSA9PSAxMDEgKTsKKworICByZXR1cm4geGk7Cit9CisKKworCisvKiBWYXJpYW50IG9mIHRoZSBzdGFuZGFyZCBrZXkgZ2VuZXJhdGlvbiBjb2RlIHVzaW5nIHRoZSBhbGdvcml0aG0KKyAgIGZyb20gWDkuMzEuICBVc2luZyB0aGlzIGFsZ29yaXRobSBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHRoZQorICAgZ2VuZXJhdGlvbiBjYW4gYmUgbWFkZSBkZXRlcm1pbmlzdGljIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBDQVZTCisgICB0ZXN0aW5nLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorZ2VuZXJhdGVfeDkzMSAoUlNBX3NlY3JldF9rZXkgKnNrLCB1bnNpZ25lZCBpbnQgbmJpdHMsIHVuc2lnbmVkIGxvbmcgZV92YWx1ZSwKKyAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGRlcml2ZXBhcm1zLCBpbnQgKnN3YXBwZWQpCit7CisgIGdjcnlfbXBpX3QgcCwgcTsgLyogVGhlIHR3byBwcmltZXMuICAqLworICBnY3J5X21waV90IGU7ICAgIC8qIFRoZSBwdWJsaWMgZXhwb25lbnQuICAqLworICBnY3J5X21waV90IG47ICAgIC8qIFRoZSBwdWJsaWMga2V5LiAgKi8KKyAgZ2NyeV9tcGlfdCBkOyAgICAvKiBUaGUgcHJpdmF0ZSBrZXkgKi8KKyAgZ2NyeV9tcGlfdCB1OyAgICAvKiBUaGUgaW52ZXJzZSBvZiBwIGFuZCBxLiAgKi8KKyAgZ2NyeV9tcGlfdCBwbTE7ICAvKiBwIC0gMSAgKi8KKyAgZ2NyeV9tcGlfdCBxbTE7ICAvKiBxIC0gMSAgKi8KKyAgZ2NyeV9tcGlfdCBwaGk7ICAvKiBFdWxlciB0b3RpZW50LiAgKi8KKyAgZ2NyeV9tcGlfdCBmLCBnOyAvKiBIZWxwZXIuICAqLworCisgICpzd2FwcGVkID0gMDsKKworICBpZiAoZV92YWx1ZSA9PSAxKSAgIC8qIEFsaWFzIGZvciBhIHNlY3VyZSB2YWx1ZS4gKi8KKyAgICBlX3ZhbHVlID0gNjU1Mzc7CisKKyAgLyogUG9pbnQgMSBvZiBzZWN0aW9uIDQuMTogIGsgPSAxMDI0ICsgMjU2cyB3aXRoIFMgPj0gMCAgKi8KKyAgaWYgKG5iaXRzIDwgMTAyNCB8fCAobmJpdHMgJSAyNTYpKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9WQUxVRTsKKworICAvKiBQb2ludCAyOiAgMiA8PSBiaXRsZW5ndGgoZSkgPCAyXntrLTJ9CisgICAgIE5vdGUgdGhhdCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGUgdXBwZXIgYm91bmQgYmVjYXVzZSB3ZSB1c2UKKyAgICAgYW4gdW5zaWduZWQgbG9uZyBmb3IgRSBhbmQgdGh1cyB0aGVyZSBpcyBubyB3YXkgZm9yIEUgdG8gcmVhY2gKKyAgICAgdGhhdCBsaW1pdC4gICovCisgIGlmIChlX3ZhbHVlIDwgMykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisKKyAgLyogT3VyIGltcGxlbWVudGFpb24gcmVxdWlyZXMgRSB0byBiZSBvZGQuICAqLworICBpZiAoIShlX3ZhbHVlICYgMSkpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX1ZBTFVFOworCisgIC8qIFBvaW50IDM6ICBlID4gMCBvciBlIDAgaWYgaXQgaXMgdG8gYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLgorICAgICBXZSBzdXBwb3J0IG9ubHkgYSBmaXhlZCBFIGFuZCB0aHVzIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFuIGV4dHJhIHRlc3QuICAqLworCisKKyAgLyogQ29tcHV0ZSBvciBleHRyYWN0IHRoZSBkZXJpdmUgcGFyYW1ldGVycy4gICovCisgIHsKKyAgICBnY3J5X21waV90IHhwMSA9IE5VTEw7CisgICAgZ2NyeV9tcGlfdCB4cDIgPSBOVUxMOworICAgIGdjcnlfbXBpX3QgeHAgID0gTlVMTDsKKyAgICBnY3J5X21waV90IHhxMSA9IE5VTEw7CisgICAgZ2NyeV9tcGlfdCB4cTIgPSBOVUxMOworICAgIGdjcnlfbXBpX3QgeHEgID0gTlVMTDsKKyAgICBnY3J5X21waV90IHRtcHZhbDsKKworICAgIGlmICghZGVyaXZlcGFybXMpCisgICAgICB7CisgICAgICAgIC8qIE5vdCBnaXZlbjogR2VuZXJhdGUgdGhlbS4gICovCisgICAgICAgIHhwID0gZ2VuX3g5MzFfcGFybV94cCAobmJpdHMvMik7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHx4cCAtIHhxfCA+IDJee25iaXRzIC0gMTAwfSBob2xkcy4gICovCisgICAgICAgIHRtcHZhbCA9IG1waV9zbmV3IChuYml0cy8yKTsKKyAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoeHEpOworICAgICAgICAgICAgeHEgPSBnZW5feDkzMV9wYXJtX3hwIChuYml0cy8yKTsKKyAgICAgICAgICAgIG1waV9zdWIgKHRtcHZhbCwgeHAsIHhxKTsKKyAgICAgICAgICB9CisgICAgICAgIHdoaWxlIChtcGlfZ2V0X25iaXRzICh0bXB2YWwpIDw9IChuYml0cy8yIC0gMTAwKSk7CisgICAgICAgIF9nY3J5X21waV9yZWxlYXNlICh0bXB2YWwpOworCisgICAgICAgIHhwMSA9IGdlbl94OTMxX3Bhcm1feGkgKCk7CisgICAgICAgIHhwMiA9IGdlbl94OTMxX3Bhcm1feGkgKCk7CisgICAgICAgIHhxMSA9IGdlbl94OTMxX3Bhcm1feGkgKCk7CisgICAgICAgIHhxMiA9IGdlbl94OTMxX3Bhcm1feGkgKCk7CisKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFBhcmFtZXRlcnMgdG8gZGVyaXZlIHRoZSBrZXkgYXJlIGdpdmVuLiAgKi8KKyAgICAgICAgLyogTm90ZSB0aGF0IHdlIGV4cGxpY2l0bHkgbmVlZCB0byBzZXR1cCB0aGUgdmFsdWVzIG9mIHRibAorICAgICAgICAgICBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIChlLmcuIE9wZW5XYXRjb20sIElSSVgpIGRvbid0IGFsbG93CisgICAgICAgICAgIHRvIGluaXRpYWxpemUgYSBzdHJ1Y3R1cmUgd2l0aCBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8KKyAgICAgICAgc3RydWN0IHsgY29uc3QgY2hhciAqbmFtZTsgZ2NyeV9tcGlfdCAqdmFsdWU7IH0gdGJsW10gPSB7CisgICAgICAgICAgeyAiWHAxIiB9LAorICAgICAgICAgIHsgIlhwMiIgfSwKKyAgICAgICAgICB7ICJYcCIgIH0sCisgICAgICAgICAgeyAiWHExIiB9LAorICAgICAgICAgIHsgIlhxMiIgfSwKKyAgICAgICAgICB7ICJYcSIgIH0sCisgICAgICAgICAgeyBOVUxMIH0KKyAgICAgICAgfTsKKyAgICAgICAgaW50IGlkeDsKKyAgICAgICAgZ2NyeV9zZXhwX3Qgb25lcGFybTsKKworICAgICAgICB0YmxbMF0udmFsdWUgPSAmeHAxOworICAgICAgICB0YmxbMV0udmFsdWUgPSAmeHAyOworICAgICAgICB0YmxbMl0udmFsdWUgPSAmeHA7CisgICAgICAgIHRibFszXS52YWx1ZSA9ICZ4cTE7CisgICAgICAgIHRibFs0XS52YWx1ZSA9ICZ4cTI7CisgICAgICAgIHRibFs1XS52YWx1ZSA9ICZ4cTsKKworICAgICAgICBmb3IgKGlkeD0wOyB0YmxbaWR4XS5uYW1lOyBpZHgrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICBvbmVwYXJtID0gc2V4cF9maW5kX3Rva2VuIChkZXJpdmVwYXJtcywgdGJsW2lkeF0ubmFtZSwgMCk7CisgICAgICAgICAgICBpZiAob25lcGFybSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICp0YmxbaWR4XS52YWx1ZSA9IHNleHBfbnRoX21waSAob25lcGFybSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgICAgICAgICAgICBzZXhwX3JlbGVhc2UgKG9uZXBhcm0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBmb3IgKGlkeD0wOyB0YmxbaWR4XS5uYW1lOyBpZHgrKykKKyAgICAgICAgICBpZiAoISp0YmxbaWR4XS52YWx1ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodGJsW2lkeF0ubmFtZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIGlzIG1pc3NpbmcuICAqLworICAgICAgICAgICAgZm9yIChpZHg9MDsgdGJsW2lkeF0ubmFtZTsgaWR4KyspCisgICAgICAgICAgICAgIF9nY3J5X21waV9yZWxlYXNlICgqdGJsW2lkeF0udmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIEdQR19FUlJfTUlTU0lOR19WQUxVRTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICBlID0gbXBpX2FsbG9jX3NldF91aSAoZV92YWx1ZSk7CisKKyAgICAvKiBGaW5kIHR3byBwcmltZSBudW1iZXJzLiAgKi8KKyAgICBwID0gX2djcnlfZGVyaXZlX3g5MzFfcHJpbWUgKHhwLCB4cDEsIHhwMiwgZSwgTlVMTCwgTlVMTCk7CisgICAgcSA9IF9nY3J5X2Rlcml2ZV94OTMxX3ByaW1lICh4cSwgeHExLCB4cTIsIGUsIE5VTEwsIE5VTEwpOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cCk7ICB4cCAgPSBOVUxMOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cDEpOyB4cDEgPSBOVUxMOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cDIpOyB4cDIgPSBOVUxMOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cSk7ICB4cSAgPSBOVUxMOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cTEpOyB4cTEgPSBOVUxMOworICAgIF9nY3J5X21waV9yZWxlYXNlICh4cTIpOyB4cTIgPSBOVUxMOworICAgIGlmICghcCB8fCAhcSkKKyAgICAgIHsKKyAgICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKHApOworICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAocSk7CisgICAgICAgIF9nY3J5X21waV9yZWxlYXNlIChlKTsKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfTk9fUFJJTUU7CisgICAgICB9CisgIH0KKworCisgIC8qIENvbXB1dGUgdGhlIHB1YmxpYyBtb2R1bHVzLiAgV2UgbWFrZSBzdXJlIHRoYXQgcCBpcyBzbWFsbGVyIHRoYW4KKyAgICAgcSB0byBhbGxvdyB0aGUgdXNlIG9mIHRoZSBDUlQuICAqLworICBpZiAobXBpX2NtcCAocCwgcSkgPiAwICkKKyAgICB7CisgICAgICBtcGlfc3dhcCAocCwgcSk7CisgICAgICAqc3dhcHBlZCA9IDE7CisgICAgfQorICBuID0gbXBpX25ldyAobmJpdHMpOworICBtcGlfbXVsIChuLCBwLCBxKTsKKworICAvKiBDb21wdXRlIHRoZSBFdWxlciB0b3RpZW50OiAgcGhpID0gKHAtMSkocS0xKSAgKi8KKyAgcG0xID0gbXBpX3NuZXcgKG5iaXRzLzIpOworICBxbTEgPSBtcGlfc25ldyAobmJpdHMvMik7CisgIHBoaSA9IG1waV9zbmV3IChuYml0cyk7CisgIG1waV9zdWJfdWkgKHBtMSwgcCwgMSk7CisgIG1waV9zdWJfdWkgKHFtMSwgcSwgMSk7CisgIG1waV9tdWwgKHBoaSwgcG0xLCBxbTEpOworCisgIGcgPSBtcGlfc25ldyAobmJpdHMpOworICBnY3J5X2Fzc2VydCAobXBpX2djZCAoZywgZSwgcGhpKSk7CisKKyAgLyogQ29tcHV0ZTogZiA9IGxjbShwLTEscS0xKSA9IHBoaSAvIGdjZChwLTEscS0xKSAqLworICBtcGlfZ2NkIChnLCBwbTEsIHFtMSk7CisgIGYgPSBwbTE7IHBtMSA9IE5VTEw7CisgIF9nY3J5X21waV9yZWxlYXNlIChxbTEpOyBxbTEgPSBOVUxMOworICBtcGlfZmRpdl9xIChmLCBwaGksIGcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGhpKTsgcGhpID0gTlVMTDsKKyAgZCA9IGc7IGcgPSBOVUxMOworICAvKiBDb21wdXRlIHRoZSBzZWNyZXQga2V5OiAgZCA9IGVeey0xfSBtb2QgbGNtKHAtMSxxLTEpICovCisgIG1waV9pbnZtIChkLCBlLCBmKTsKKworICAvKiBDb21wdXRlIHRoZSBpbnZlcnNlIG9mIHAgYW5kIHEuICAqLworICB1ID0gZjsgZiA9IE5VTEw7CisgIG1waV9pbnZtICh1LCBwLCBxICk7CisKKyAgaWYoIERCR19DSVBIRVIgKQorICAgIHsKKyAgICAgIGlmICgqc3dhcHBlZCkKKyAgICAgICAgbG9nX2RlYnVnICgicCBhbmQgcSBhcmUgc3dhcHBlZFxuIik7CisgICAgICBsb2dfbXBpZHVtcCgiICBwIiwgcCApOworICAgICAgbG9nX21waWR1bXAoIiAgcSIsIHEgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCIgIG4iLCBuICk7CisgICAgICBsb2dfbXBpZHVtcCgiICBlIiwgZSApOworICAgICAgbG9nX21waWR1bXAoIiAgZCIsIGQgKTsKKyAgICAgIGxvZ19tcGlkdW1wKCIgIHUiLCB1ICk7CisgICAgfQorCisKKyAgc2stPm4gPSBuOworICBzay0+ZSA9IGU7CisgIHNrLT5wID0gcDsKKyAgc2stPnEgPSBxOworICBzay0+ZCA9IGQ7CisgIHNrLT51ID0gdTsKKworICAvKiBOb3cgd2UgY2FuIHRlc3Qgb3VyIGtleXMuICovCisgIGlmICh0ZXN0X2tleXMgKHNrLCBuYml0cyAtIDY0KSkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPm4pOyBzay0+biA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPmUpOyBzay0+ZSA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnApOyBzay0+cCA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnEpOyBzay0+cSA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPmQpOyBzay0+ZCA9IE5VTEw7CisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2stPnUpOyBzay0+dSA9IE5VTEw7CisgICAgICBmaXBzX3NpZ25hbF9lcnJvciAoInNlbGYtdGVzdCBhZnRlciBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQiKTsKKyAgICAgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgc2VjcmV0IGtleSBpcyB2YWxpZC4KKyAqIFJldHVybnM6IHRydWUgaWYgdGhpcyBpcyBhIHZhbGlkIGtleS4KKyAqLworc3RhdGljIGludAorY2hlY2tfc2VjcmV0X2tleSggUlNBX3NlY3JldF9rZXkgKnNrICkKK3sKKyAgaW50IHJjOworICBnY3J5X21waV90IHRlbXAgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHNrLT5wKSoyICk7CisKKyAgbXBpX211bCh0ZW1wLCBzay0+cCwgc2stPnEgKTsKKyAgcmMgPSBtcGlfY21wKCB0ZW1wLCBzay0+biApOworICBtcGlfZnJlZSh0ZW1wKTsKKyAgcmV0dXJuICFyYzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqCisgKiBQdWJsaWMga2V5IG9wZXJhdGlvbi4gRW5jcnlwdCBJTlBVVCB3aXRoIFBLRVkgYW5kIHB1dCByZXN1bHQgaW50byBPVVRQVVQuCisgKgorICoJYyA9IG1eZSBtb2QgbgorICoKKyAqIFdoZXJlIGMgaXMgT1VUUFVULCBtIGlzIElOUFVUIGFuZCBlLG4gYXJlIGVsZW1lbnRzIG9mIFBLRVkuCisgKi8KK3N0YXRpYyB2b2lkCitwdWJsaWMoZ2NyeV9tcGlfdCBvdXRwdXQsIGdjcnlfbXBpX3QgaW5wdXQsIFJTQV9wdWJsaWNfa2V5ICpwa2V5ICkKK3sKKyAgaWYoIG91dHB1dCA9PSBpbnB1dCApICAvKiBwb3dtIGRvZXNuJ3QgbGlrZSBvdXRwdXQgYW5kIGlucHV0IHRoZSBzYW1lICovCisgICAgeworICAgICAgZ2NyeV9tcGlfdCB4ID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhpbnB1dCkqMiApOworICAgICAgbXBpX3Bvd20oIHgsIGlucHV0LCBwa2V5LT5lLCBwa2V5LT5uICk7CisgICAgICBtcGlfc2V0KG91dHB1dCwgeCk7CisgICAgICBtcGlfZnJlZSh4KTsKKyAgICB9CisgIGVsc2UKKyAgICBtcGlfcG93bSggb3V0cHV0LCBpbnB1dCwgcGtleS0+ZSwgcGtleS0+biApOworfQorCisjaWYgMAorc3RhdGljIHZvaWQKK3N0cm9uZ2VyX2tleV9jaGVjayAoIFJTQV9zZWNyZXRfa2V5ICpza2V5ICkKK3sKKyAgZ2NyeV9tcGlfdCB0ID0gbXBpX2FsbG9jX3NlY3VyZSAoIDAgKTsKKyAgZ2NyeV9tcGlfdCB0MSA9IG1waV9hbGxvY19zZWN1cmUgKCAwICk7CisgIGdjcnlfbXBpX3QgdDIgPSBtcGlfYWxsb2Nfc2VjdXJlICggMCApOworICBnY3J5X21waV90IHBoaSA9IG1waV9hbGxvY19zZWN1cmUgKCAwICk7CisKKyAgLyogY2hlY2sgdGhhdCBuID09IHAgKiBxICovCisgIG1waV9tdWwoIHQsIHNrZXktPnAsIHNrZXktPnEpOworICBpZiAobXBpX2NtcCggdCwgc2tleS0+bikgKQorICAgIGxvZ19pbmZvICggIlJTQSBPb3BzOiBuICE9IHAgKiBxXG4iICk7CisKKyAgLyogY2hlY2sgdGhhdCBwIGlzIGxlc3MgdGhhbiBxICovCisgIGlmKCBtcGlfY21wKCBza2V5LT5wLCBza2V5LT5xICkgPiAwICkKKyAgICB7CisgICAgICBsb2dfaW5mbyAoIlJTQSBPb3BzOiBwID49IHEgLSBmaXhlZFxuIik7CisgICAgICBfZ2NyeV9tcGlfc3dhcCAoIHNrZXktPnAsIHNrZXktPnEpOworICAgIH0KKworICAgIC8qIGNoZWNrIHRoYXQgZSBkaXZpZGVzIG5laXRoZXIgcC0xIG5vciBxLTEgKi8KKyAgICBtcGlfc3ViX3VpKHQsIHNrZXktPnAsIDEgKTsKKyAgICBtcGlfZmRpdl9yKHQsIHQsIHNrZXktPmUgKTsKKyAgICBpZiAoICFtcGlfY21wX3VpKCB0LCAwKSApCisgICAgICAgIGxvZ19pbmZvICggIlJTQSBPb3BzOiBlIGRpdmlkZXMgcC0xXG4iICk7CisgICAgbXBpX3N1Yl91aSh0LCBza2V5LT5xLCAxICk7CisgICAgbXBpX2ZkaXZfcih0LCB0LCBza2V5LT5lICk7CisgICAgaWYgKCAhbXBpX2NtcF91aSggdCwgMCkgKQorICAgICAgICBsb2dfaW5mbyAoICJSU0EgT29wczogZSBkaXZpZGVzIHEtMVxuIiApOworCisgICAgLyogY2hlY2sgdGhhdCBkIGlzIGNvcnJlY3QgKi8KKyAgICBtcGlfc3ViX3VpKCB0MSwgc2tleS0+cCwgMSApOworICAgIG1waV9zdWJfdWkoIHQyLCBza2V5LT5xLCAxICk7CisgICAgbXBpX211bCggcGhpLCB0MSwgdDIgKTsKKyAgICBnY3J5X21waV9nY2QodCwgdDEsIHQyKTsKKyAgICBtcGlfZmRpdl9xKHQsIHBoaSwgdCk7CisgICAgbXBpX2ludm0odCwgc2tleS0+ZSwgdCApOworICAgIGlmICggbXBpX2NtcCh0LCBza2V5LT5kICkgKQorICAgICAgeworICAgICAgICBsb2dfaW5mbyAoICJSU0EgT29wczogZCBpcyB3cm9uZyAtIGZpeGVkXG4iKTsKKyAgICAgICAgbXBpX3NldCAoc2tleS0+ZCwgdCk7CisgICAgICAgIGxvZ19wcmludG1waSAoIiAgZml4ZWQgZCIsIHNrZXktPmQpOworICAgICAgfQorCisgICAgLyogY2hlY2sgZm9yIGNvcnJlY3RuZXNzIG9mIHUgKi8KKyAgICBtcGlfaW52bSh0LCBza2V5LT5wLCBza2V5LT5xICk7CisgICAgaWYgKCBtcGlfY21wKHQsIHNrZXktPnUgKSApCisgICAgICB7CisgICAgICAgIGxvZ19pbmZvICggIlJTQSBPb3BzOiB1IGlzIHdyb25nIC0gZml4ZWRcbiIpOworICAgICAgICBtcGlfc2V0IChza2V5LT51LCB0KTsKKyAgICAgICAgbG9nX3ByaW50bXBpICgiICBmaXhlZCB1Iiwgc2tleS0+dSk7CisgICAgICB9CisKKyAgICBsb2dfaW5mbyAoICJSU0Egc2VjcmV0IGtleSBjaGVjayBmaW5pc2hlZFxuIik7CisKKyAgICBtcGlfZnJlZSAodCk7CisgICAgbXBpX2ZyZWUgKHQxKTsKKyAgICBtcGlfZnJlZSAodDIpOworICAgIG1waV9mcmVlIChwaGkpOworfQorI2VuZGlmCisKKworCisvKioqKioqKioqKioqKioqKgorICogU2VjcmV0IGtleSBvcGVyYXRpb24uIEVuY3J5cHQgSU5QVVQgd2l0aCBTS0VZIGFuZCBwdXQgcmVzdWx0IGludG8gT1VUUFVULgorICoKKyAqCW0gPSBjXmQgbW9kIG4KKyAqCisgKiBPciBmYXN0ZXI6CisgKgorICogICAgICBtMSA9IGMgXiAoZCBtb2QgKHAtMSkpIG1vZCBwCisgKiAgICAgIG0yID0gYyBeIChkIG1vZCAocS0xKSkgbW9kIHEKKyAqICAgICAgaCA9IHUgKiAobTIgLSBtMSkgbW9kIHEKKyAqICAgICAgbSA9IG0xICsgaCAqIHAKKyAqCisgKiBXaGVyZSBtIGlzIE9VVFBVVCwgYyBpcyBJTlBVVCBhbmQgZCxuLHAscSx1IGFyZSBlbGVtZW50cyBvZiBTS0VZLgorICovCitzdGF0aWMgdm9pZAorc2VjcmV0IChnY3J5X21waV90IG91dHB1dCwgZ2NyeV9tcGlfdCBpbnB1dCwgUlNBX3NlY3JldF9rZXkgKnNrZXkgKQoreworICAvKiBSZW1vdmUgc3VwZXJmbHVvdXMgbGVhZGluZyB6ZXJvZXMgZnJvbSBJTlBVVC4gICovCisgIG1waV9ub3JtYWxpemUgKGlucHV0KTsKKworICBpZiAoIXNrZXktPnAgfHwgIXNrZXktPnEgfHwgIXNrZXktPnUpCisgICAgeworICAgICAgbXBpX3Bvd20gKG91dHB1dCwgaW5wdXQsIHNrZXktPmQsIHNrZXktPm4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjcnlfbXBpX3QgbTEgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CisgICAgICBnY3J5X21waV90IG0yID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworICAgICAgZ2NyeV9tcGlfdCBoICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKworICAgICAgLyogbTEgPSBjIF4gKGQgbW9kIChwLTEpKSBtb2QgcCAqLworICAgICAgbXBpX3N1Yl91aSggaCwgc2tleS0+cCwgMSAgKTsKKyAgICAgIG1waV9mZGl2X3IoIGgsIHNrZXktPmQsIGggKTsKKyAgICAgIG1waV9wb3dtKCBtMSwgaW5wdXQsIGgsIHNrZXktPnAgKTsKKyAgICAgIC8qIG0yID0gYyBeIChkIG1vZCAocS0xKSkgbW9kIHEgKi8KKyAgICAgIG1waV9zdWJfdWkoIGgsIHNrZXktPnEsIDEgICk7CisgICAgICBtcGlfZmRpdl9yKCBoLCBza2V5LT5kLCBoICk7CisgICAgICBtcGlfcG93bSggbTIsIGlucHV0LCBoLCBza2V5LT5xICk7CisgICAgICAvKiBoID0gdSAqICggbTIgLSBtMSApIG1vZCBxICovCisgICAgICBtcGlfc3ViKCBoLCBtMiwgbTEgKTsKKyAgICAgIGlmICggbXBpX2hhc19zaWduICggaCApICkKKyAgICAgICAgbXBpX2FkZCAoIGgsIGgsIHNrZXktPnEgKTsKKyAgICAgIG1waV9tdWxtKCBoLCBza2V5LT51LCBoLCBza2V5LT5xICk7CisgICAgICAvKiBtID0gbTIgKyBoICogcCAqLworICAgICAgbXBpX211bCAoIGgsIGgsIHNrZXktPnAgKTsKKyAgICAgIG1waV9hZGQgKCBvdXRwdXQsIG0xLCBoICk7CisKKyAgICAgIG1waV9mcmVlICggaCApOworICAgICAgbXBpX2ZyZWUgKCBtMSApOworICAgICAgbXBpX2ZyZWUgKCBtMiApOworICAgIH0KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgaW50ZXJmYWNlICAqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3JzYV9nZW5lcmF0ZSAoY29uc3QgZ2NyeV9zZXhwX3QgZ2VucGFybXMsIGdjcnlfc2V4cF90ICpyX3NrZXkpCit7CisgIGdwZ19lcnJfY29kZV90IGVjOworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisgIHVuc2lnbmVkIGxvbmcgZXZhbHVlOworICBSU0Ffc2VjcmV0X2tleSBzazsKKyAgZ2NyeV9zZXhwX3QgZGVyaXZlcGFybXM7CisgIGludCBmbGFncyA9IDA7CisgIGdjcnlfc2V4cF90IGwxOworICBnY3J5X3NleHBfdCBzd2FwX2luZm8gPSBOVUxMOworCisgIG1lbXNldCAoJnNrLCAwLCBzaXplb2Ygc2spOworCisgIGVjID0gX2djcnlfcGtfdXRpbF9nZXRfbmJpdHMgKGdlbnBhcm1zLCAmbmJpdHMpOworICBpZiAoZWMpCisgICAgcmV0dXJuIGVjOworCisgIGVjID0gX2djcnlfcGtfdXRpbF9nZXRfcnNhX3VzZV9lIChnZW5wYXJtcywgJmV2YWx1ZSk7CisgIGlmIChlYykKKyAgICByZXR1cm4gZWM7CisKKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsIGZsYWdzIGxpc3QuICAqLworICBsMSA9IHNleHBfZmluZF90b2tlbiAoZ2VucGFybXMsICJmbGFncyIsIDApOworICBpZiAobDEpCisgICAgeworICAgICAgZWMgPSBfZ2NyeV9wa191dGlsX3BhcnNlX2ZsYWdsaXN0IChsMSwgJmZsYWdzLCBOVUxMKTsKKyAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZWM7CisgICAgfQorCisgIGRlcml2ZXBhcm1zID0gKGdlbnBhcm1zPworICAgICAgICAgICAgICAgICBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAiZGVyaXZlLXBhcm1zIiwgMCkgOiBOVUxMKTsKKyAgaWYgKCFkZXJpdmVwYXJtcykKKyAgICB7CisgICAgICAvKiBQYXJzZSB0aGUgb3B0aW9uYWwgInVzZS14OTMxIiBmbGFnLiAqLworICAgICAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAidXNlLXg5MzEiLCAwKTsKKyAgICAgIGlmIChsMSkKKyAgICAgICAgeworICAgICAgICAgIGZsYWdzIHw9IFBVQktFWV9GTEFHX1VTRV9YOTMxOworICAgICAgICAgIHNleHBfcmVsZWFzZSAobDEpOworICAgICAgICB9CisgICAgfQorCisgIGlmIChkZXJpdmVwYXJtcyB8fCAoZmxhZ3MgJiBQVUJLRVlfRkxBR19VU0VfWDkzMSkgfHwgZmlwc19tb2RlICgpKQorICAgIHsKKyAgICAgIGludCBzd2FwcGVkOworICAgICAgZWMgPSBnZW5lcmF0ZV94OTMxICgmc2ssIG5iaXRzLCBldmFsdWUsIGRlcml2ZXBhcm1zLCAmc3dhcHBlZCk7CisgICAgICBzZXhwX3JlbGVhc2UgKGRlcml2ZXBhcm1zKTsKKyAgICAgIGlmICghZWMgJiYgc3dhcHBlZCkKKyAgICAgICAgZWMgPSBzZXhwX25ldyAoJnN3YXBfaW5mbywgIihtaXNjLWtleS1pbmZvKHAtcS1zd2FwcGVkKSkiLCAwLCAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBQYXJzZSB0aGUgb3B0aW9uYWwgInRyYW5zaWVudC1rZXkiIGZsYWcuICovCisgICAgICBpZiAoIShmbGFncyAmIFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVkpKQorICAgICAgICB7CisgICAgICAgICAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGdlbnBhcm1zLCAidHJhbnNpZW50LWtleSIsIDApOworICAgICAgICAgIGlmIChsMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gUFVCS0VZX0ZMQUdfVFJBTlNJRU5UX0tFWTsKKyAgICAgICAgICAgICAgc2V4cF9yZWxlYXNlIChsMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIEdlbmVyYXRlLiAgKi8KKyAgICAgIGVjID0gZ2VuZXJhdGVfc3RkICgmc2ssIG5iaXRzLCBldmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgISEoZmxhZ3MgJiBQVUJLRVlfRkxBR19UUkFOU0lFTlRfS0VZKSk7CisgICAgfQorCisgIGlmICghZWMpCisgICAgeworICAgICAgZWMgPSBzZXhwX2J1aWxkIChyX3NrZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICIoa2V5LWRhdGEiCisgICAgICAgICAgICAgICAgICAgICAgICIgKHB1YmxpYy1rZXkiCisgICAgICAgICAgICAgICAgICAgICAgICIgIChyc2EobiVtKShlJW0pKSkiCisgICAgICAgICAgICAgICAgICAgICAgICIgKHByaXZhdGUta2V5IgorICAgICAgICAgICAgICAgICAgICAgICAiICAocnNhKG4lbSkoZSVtKShkJW0pKHAlbSkocSVtKSh1JW0pKSkiCisgICAgICAgICAgICAgICAgICAgICAgICIgJVMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2subiwgc2suZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2subiwgc2suZSwgc2suZCwgc2sucCwgc2sucSwgc2sudSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3dhcF9pbmZvKTsKKyAgICB9CisKKyAgbXBpX2ZyZWUgKHNrLm4pOworICBtcGlfZnJlZSAoc2suZSk7CisgIG1waV9mcmVlIChzay5wKTsKKyAgbXBpX2ZyZWUgKHNrLnEpOworICBtcGlfZnJlZSAoc2suZCk7CisgIG1waV9mcmVlIChzay51KTsKKyAgc2V4cF9yZWxlYXNlIChzd2FwX2luZm8pOworCisgIHJldHVybiBlYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Cityc2FfY2hlY2tfc2VjcmV0X2tleSAoZ2NyeV9zZXhwX3Qga2V5cGFybXMpCit7CisgIGdjcnlfZXJyX2NvZGVfdCByYzsKKyAgUlNBX3NlY3JldF9rZXkgc2sgPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisKKyAgLyogVG8gY2hlY2sgdGhlIGtleSB3ZSBuZWVkIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzLiAqLworICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICJuZWRwcXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNrLm4sICZzay5lLCAmc2suZCwgJnNrLnAsICZzay5xLCAmc2sudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAoIWNoZWNrX3NlY3JldF9rZXkgKCZzaykpCisgICAgcmMgPSBHUEdfRVJSX0JBRF9TRUNLRVk7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLm4pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5kKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sucSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay51KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgicnNhX3Rlc3RrZXkgICAgPT4gJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3JzYV9lbmNyeXB0IChnY3J5X3NleHBfdCAqcl9jaXBoLCBnY3J5X3NleHBfdCBzX2RhdGEsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHN0cnVjdCBwa19lbmNvZGluZ19jdHggY3R4OworICBnY3J5X21waV90IGRhdGEgPSBOVUxMOworICBSU0FfcHVibGljX2tleSBwayA9IHtOVUxMLCBOVUxMfTsKKyAgZ2NyeV9tcGlfdCBjaXBoID0gTlVMTDsKKworICBfZ2NyeV9wa191dGlsX2luaXRfZW5jb2RpbmdfY3R4ICgmY3R4LCBQVUJLRVlfT1BfRU5DUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2dldF9uYml0cyAoa2V5cGFybXMpKTsKKworICAvKiBFeHRyYWN0IHRoZSBkYXRhLiAgKi8KKyAgcmMgPSBfZ2NyeV9wa191dGlsX2RhdGFfdG9fbXBpIChzX2RhdGEsICZkYXRhLCAmY3R4KTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19tcGlkdW1wICgicnNhX2VuY3J5cHQgZGF0YSIsIGRhdGEpOworICBpZiAobXBpX2lzX29wYXF1ZSAoZGF0YSkpCisgICAgeworICAgICAgcmMgPSBHUEdfRVJSX0lOVl9EQVRBOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUga2V5LiAgKi8KKyAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGtleXBhcm1zLCBOVUxMLCAibmUiLCAmcGsubiwgJnBrLmUsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgeworICAgICAgbG9nX21waWR1bXAgKCJyc2FfZW5jcnlwdCAgICBuIiwgcGsubik7CisgICAgICBsb2dfbXBpZHVtcCAoInJzYV9lbmNyeXB0ICAgIGUiLCBway5lKTsKKyAgICB9CisKKyAgLyogRG8gUlNBIGNvbXB1dGF0aW9uIGFuZCBidWlsZCByZXN1bHQuICAqLworICBjaXBoID0gbXBpX25ldyAoMCk7CisgIHB1YmxpYyAoY2lwaCwgZGF0YSwgJnBrKTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX21waWR1bXAgKCJyc2FfZW5jcnlwdCAgcmVzIiwgY2lwaCk7CisgIGlmICgoY3R4LmZsYWdzICYgUFVCS0VZX0ZMQUdfRklYRURMRU4pKQorICAgIHsKKyAgICAgIC8qIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJldHVybiB0aGUgY29ycmVjdCBsZW5ndGggdG8gYXZvaWQKKyAgICAgICAgIHByb2JsZW1zIHdpdGggbWlzc2luZyBsZWFkaW5nIHplcm9lcy4gICovCisgICAgICB1bnNpZ25lZCBjaGFyICplbTsKKyAgICAgIHNpemVfdCBlbWxlbiA9IChtcGlfZ2V0X25iaXRzIChway5uKSs3KS84OworCisgICAgICByYyA9IF9nY3J5X21waV90b19vY3RldF9zdHJpbmcgKCZlbSwgTlVMTCwgY2lwaCwgZW1sZW4pOworICAgICAgaWYgKCFyYykKKyAgICAgICAgeworICAgICAgICAgIHJjID0gc2V4cF9idWlsZCAocl9jaXBoLCBOVUxMLCAiKGVuYy12YWwocnNhKGElYikpKSIsIChpbnQpZW1sZW4sIGVtKTsKKyAgICAgICAgICB4ZnJlZSAoZW0pOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgcmMgPSBzZXhwX2J1aWxkIChyX2NpcGgsIE5VTEwsICIoZW5jLXZhbChyc2EoYSVtKSkpIiwgY2lwaCk7CisKKyBsZWF2ZToKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGNpcGgpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsubik7CisgIF9nY3J5X21waV9yZWxlYXNlIChway5lKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGEpOworICBfZ2NyeV9wa191dGlsX2ZyZWVfZW5jb2RpbmdfY3R4ICgmY3R4KTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX2RlYnVnICgicnNhX2VuY3J5cHQgICAgPT4gJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3JzYV9kZWNyeXB0IChnY3J5X3NleHBfdCAqcl9wbGFpbiwgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBrZXlwYXJtcykKKworeworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfc2V4cF90IGwxID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBkYXRhID0gTlVMTDsKKyAgUlNBX3NlY3JldF9rZXkgc2sgPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisgIGdjcnlfbXBpX3QgcGxhaW4gPSBOVUxMOworICBnY3J5X21waV90IHIgPSBOVUxMOwkgICAvKiBSYW5kb20gbnVtYmVyIG5lZWRlZCBmb3IgYmxpbmRpbmcuICAqLworICBnY3J5X21waV90IHJpID0gTlVMTDsJICAgLyogTW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHIuICAqLworICBnY3J5X21waV90IGJsZGF0YSA9IE5VTEw7LyogQmxpbmRlZCBkYXRhIHRvIGRlY3J5cHQuICAqLworICB1bnNpZ25lZCBjaGFyICp1bnBhZCA9IE5VTEw7CisgIHNpemVfdCB1bnBhZGxlbiA9IDA7CisKKyAgX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCAoJmN0eCwgUFVCS0VZX09QX0RFQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9nZXRfbmJpdHMgKGtleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9wcmVwYXJzZV9lbmN2YWwgKHNfZGF0YSwgcnNhX25hbWVzLCAmbDEsICZjdHgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGwxLCBOVUxMLCAiYSIsICZkYXRhLCBOVUxMKTsKKyAgaWYgKHJjKQorICAgIGdvdG8gbGVhdmU7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludG1waSAoInJzYV9kZWNyeXB0IGRhdGEiLCBkYXRhKTsKKyAgaWYgKG1waV9pc19vcGFxdWUgKGRhdGEpKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfREFUQTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEV4dHJhY3QgdGhlIGtleS4gICovCisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgIm5lZHA/cT91PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2subiwgJnNrLmUsICZzay5kLCAmc2sucCwgJnNrLnEsICZzay51LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfcHJpbnRtcGkgKCJyc2FfZGVjcnlwdCAgICBuIiwgc2subik7CisgICAgICBsb2dfcHJpbnRtcGkgKCJyc2FfZGVjcnlwdCAgICBlIiwgc2suZSk7CisgICAgICBpZiAoIWZpcHNfbW9kZSAoKSkKKyAgICAgICAgeworICAgICAgICAgIGxvZ19wcmludG1waSAoInJzYV9kZWNyeXB0ICAgIGQiLCBzay5kKTsKKyAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJyc2FfZGVjcnlwdCAgICBwIiwgc2sucCk7CisgICAgICAgICAgbG9nX3ByaW50bXBpICgicnNhX2RlY3J5cHQgICAgcSIsIHNrLnEpOworICAgICAgICAgIGxvZ19wcmludG1waSAoInJzYV9kZWNyeXB0ICAgIHUiLCBzay51KTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBCZXR0ZXIgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHN1cGVyZmx1b3VzIGxlYWRpbmcgemVyb2VzIGluCisgICAgIHRoZSBpbnB1dCBhbmQgaXQgaGFzIG5vdCBiZWVuICJwYWRkZWQiIHVzaW5nIG11bHRpcGxlcyBvZiBOLgorICAgICBUaGlzIG1pdGlnYXRlcyBzaWRlLWNoYW5uZWwgYXR0YWNrcyAoQ1ZFLTIwMTMtNDU3NikuICAqLworICBtcGlfbm9ybWFsaXplIChkYXRhKTsKKyAgbXBpX2ZkaXZfciAoZGF0YSwgZGF0YSwgc2subik7CisKKyAgLyogQWxsb2NhdGUgTVBJIGZvciB0aGUgcGxhaW50ZXh0LiAgKi8KKyAgcGxhaW4gPSBtcGlfc25ldyAoY3R4Lm5iaXRzKTsKKworICAvKiBXZSB1c2UgYmxpbmRpbmcgYnkgZGVmYXVsdCB0byBtaXRpZ2F0ZSB0aW1pbmcgYXR0YWNrcyB3aGljaCBjYW4KKyAgICAgYmUgcHJhY3RpY2FsbHkgbW91bnRlZCBvdmVyIHRoZSBuZXR3b3JrIGFzIHNob3duIGJ5IEJydW1sZXkgYW5kCisgICAgIEJvbmV5IGluIDIwMDMuICAqLworICBpZiAoIShjdHguZmxhZ3MgJiBQVUJLRVlfRkxBR19OT19CTElORElORykpCisgICAgeworICAgICAgLyogRmlyc3QsIHdlIG5lZWQgYSByYW5kb20gbnVtYmVyIHIgYmV0d2VlbiAwIGFuZCBuIC0gMSwgd2hpY2gKKwkgaXMgcmVsYXRpdmVseSBwcmltZSB0byBuIChpLmUuIGl0IGlzIG5laXRoZXIgcCBub3IgcSkuICBUaGUKKwkgcmFuZG9tIG51bWJlciBuZWVkcyB0byBiZSBvbmx5IHVucHJlZGljdGFibGUsIHRodXMgd2UgZW1wbG95CisJIHRoZSBnY3J5X2NyZWF0ZV9ub25jZSBmdW5jdGlvbiBieSB1c2luZyBHQ1JZX1dFQUtfUkFORE9NIHdpdGgKKwkgZ2NyeV9tcGlfcmFuZG9taXplLiAgKi8KKyAgICAgIHIgID0gbXBpX3NuZXcgKGN0eC5uYml0cyk7CisgICAgICByaSA9IG1waV9zbmV3IChjdHgubmJpdHMpOworICAgICAgYmxkYXRhID0gbXBpX3NuZXcgKGN0eC5uYml0cyk7CisKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9tcGlfcmFuZG9taXplIChyLCBjdHgubmJpdHMsIEdDUllfV0VBS19SQU5ET00pOworICAgICAgICAgIG1waV9tb2QgKHIsIHIsIHNrLm4pOworICAgICAgICB9CisgICAgICB3aGlsZSAoIW1waV9pbnZtIChyaSwgciwgc2subikpOworCisgICAgICAvKiBEbyBibGluZGluZy4gIFdlIGNhbGN1bGF0ZTogeSA9ICh4ICogcl5lKSBtb2Qgbiwgd2hlcmUgciBpcworICAgICAgICAgdGhlIHJhbmRvbSBudW1iZXIsIGUgaXMgdGhlIHB1YmxpYyBleHBvbmVudCwgeCBpcyB0aGUKKyAgICAgICAgIG5vbi1ibGluZGVkIGRhdGEgYW5kIG4gaXMgdGhlIFJTQSBtb2R1bHVzLiAgKi8KKyAgICAgIG1waV9wb3dtIChibGRhdGEsIHIsIHNrLmUsIHNrLm4pOworICAgICAgbXBpX211bG0gKGJsZGF0YSwgYmxkYXRhLCBkYXRhLCBzay5uKTsKKworICAgICAgLyogUGVyZm9ybSBkZWNyeXB0aW9uLiAgKi8KKyAgICAgIHNlY3JldCAocGxhaW4sIGJsZGF0YSwgJnNrKTsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlIChibGRhdGEpOyBibGRhdGEgPSBOVUxMOworCisgICAgICAvKiBVbmRvIGJsaW5kaW5nLiAgSGVyZSB3ZSBjYWxjdWxhdGU6IHkgPSAoeCAqIHJeLTEpIG1vZCBuLAorICAgICAgICAgd2hlcmUgeCBpcyB0aGUgYmxpbmRlZCBkZWNyeXB0ZWQgZGF0YSwgcmkgaXMgdGhlIG1vZHVsYXIKKyAgICAgICAgIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgciBhbmQgbiBpcyB0aGUgUlNBIG1vZHVsdXMuICAqLworICAgICAgbXBpX211bG0gKHBsYWluLCBwbGFpbiwgcmksIHNrLm4pOworCisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAocik7IHIgPSBOVUxMOworICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKHJpKTsgcmkgPSBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHNlY3JldCAocGxhaW4sIGRhdGEsICZzayk7CisKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50bXBpICgicnNhX2RlY3J5cHQgIHJlcyIsIHBsYWluKTsKKworICAvKiBSZXZlcnNlIHRoZSBlbmNvZGluZyBhbmQgYnVpbGQgdGhlIHMtZXhwcmVzc2lvbi4gICovCisgIHN3aXRjaCAoY3R4LmVuY29kaW5nKQorICAgIHsKKyAgICBjYXNlIFBVQktFWV9FTkNfUEtDUzE6CisgICAgICByYyA9IF9nY3J5X3JzYV9wa2NzMV9kZWNvZGVfZm9yX2VuYyAoJnVucGFkLCAmdW5wYWRsZW4sIGN0eC5uYml0cywgcGxhaW4pOworICAgICAgbXBpX2ZyZWUgKHBsYWluKTsKKyAgICAgIHBsYWluID0gTlVMTDsKKyAgICAgIGlmICghcmMpCisgICAgICAgIHJjID0gc2V4cF9idWlsZCAocl9wbGFpbiwgTlVMTCwgIih2YWx1ZSAlYikiLCAoaW50KXVucGFkbGVuLCB1bnBhZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFVCS0VZX0VOQ19PQUVQOgorICAgICAgcmMgPSBfZ2NyeV9yc2Ffb2FlcF9kZWNvZGUgKCZ1bnBhZCwgJnVucGFkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5uYml0cywgY3R4Lmhhc2hfYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiwgY3R4LmxhYmVsLCBjdHgubGFiZWxsZW4pOworICAgICAgbXBpX2ZyZWUgKHBsYWluKTsKKyAgICAgIHBsYWluID0gTlVMTDsKKyAgICAgIGlmICghcmMpCisgICAgICAgIHJjID0gc2V4cF9idWlsZCAocl9wbGFpbiwgTlVMTCwgIih2YWx1ZSAlYikiLCAoaW50KXVucGFkbGVuLCB1bnBhZCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBSYXcgZm9ybWF0LiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBhc3N1bWUgYQorICAgICAgICAgc2lnbmVkIG1waSBieSB1c2luZyB0aGUgc2V4cCBmb3JtYXQgc3RyaW5nICIlbSIuICAqLworICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3BsYWluLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAoY3R4LmZsYWdzICYgUFVCS0VZX0ZMQUdfTEVHQUNZUkVTVUxUKQorICAgICAgICAgICAgICAgICAgICAgICA/ICIlbSI6Iih2YWx1ZSAlbSkiLCBwbGFpbik7CisgICAgICBicmVhazsKKyAgICB9CisKKyBsZWF2ZToKKyAgeGZyZWUgKHVucGFkKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHBsYWluKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLm4pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2suZSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5kKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnApOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sucSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay51KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocik7CisgIF9nY3J5X21waV9yZWxlYXNlIChyaSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChibGRhdGEpOworICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgX2djcnlfcGtfdXRpbF9mcmVlX2VuY29kaW5nX2N0eCAoJmN0eCk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19kZWJ1ZyAoInJzYV9kZWNyeXB0ICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Cityc2Ffc2lnbiAoZ2NyeV9zZXhwX3QgKnJfc2lnLCBnY3J5X3NleHBfdCBzX2RhdGEsIGdjcnlfc2V4cF90IGtleXBhcm1zKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgc3RydWN0IHBrX2VuY29kaW5nX2N0eCBjdHg7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIFJTQV9zZWNyZXRfa2V5IHNrID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworICBnY3J5X21waV90IHNpZyA9IE5VTEw7CisKKyAgX2djcnlfcGtfdXRpbF9pbml0X2VuY29kaW5nX2N0eCAoJmN0eCwgUFVCS0VZX09QX1NJR04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9nZXRfbmJpdHMgKGtleXBhcm1zKSk7CisKKyAgLyogRXh0cmFjdCB0aGUgZGF0YS4gICovCisgIHJjID0gX2djcnlfcGtfdXRpbF9kYXRhX3RvX21waSAoc19kYXRhLCAmZGF0YSwgJmN0eCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgIGRhdGEiLCBkYXRhKTsKKyAgaWYgKG1waV9pc19vcGFxdWUgKGRhdGEpKQorICAgIHsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfREFUQTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEV4dHJhY3QgdGhlIGtleS4gICovCisgIHJjID0gc2V4cF9leHRyYWN0X3BhcmFtIChrZXlwYXJtcywgTlVMTCwgIm5lZHA/cT91PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2subiwgJnNrLmUsICZzay5kLCAmc2sucCwgJnNrLnEsICZzay51LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgICAgIG4iLCBzay5uKTsKKyAgICAgIGxvZ19wcmludG1waSAoInJzYV9zaWduICAgICAgZSIsIHNrLmUpOworICAgICAgaWYgKCFmaXBzX21vZGUgKCkpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgICAgIGQiLCBzay5kKTsKKyAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgICAgIHAiLCBzay5wKTsKKyAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgICAgIHEiLCBzay5xKTsKKyAgICAgICAgICBsb2dfcHJpbnRtcGkgKCJyc2Ffc2lnbiAgICAgIHUiLCBzay51KTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBEbyBSU0EgY29tcHV0YXRpb24gYW5kIGJ1aWxkIHRoZSByZXN1bHQuICAqLworICBzaWcgPSBtcGlfbmV3ICgwKTsKKyAgc2VjcmV0IChzaWcsIGRhdGEsICZzayk7CisgIGlmIChEQkdfQ0lQSEVSKQorICAgIGxvZ19wcmludG1waSAoInJzYV9zaWduICAgIHJlcyIsIHNpZyk7CisgIGlmICgoY3R4LmZsYWdzICYgUFVCS0VZX0ZMQUdfRklYRURMRU4pKQorICAgIHsKKyAgICAgIC8qIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJldHVybiB0aGUgY29ycmVjdCBsZW5ndGggdG8gYXZvaWQKKyAgICAgICAgIHByb2JsZW1zIHdpdGggbWlzc2luZyBsZWFkaW5nIHplcm9lcy4gICovCisgICAgICB1bnNpZ25lZCBjaGFyICplbTsKKyAgICAgIHNpemVfdCBlbWxlbiA9IChtcGlfZ2V0X25iaXRzIChzay5uKSs3KS84OworCisgICAgICByYyA9IF9nY3J5X21waV90b19vY3RldF9zdHJpbmcgKCZlbSwgTlVMTCwgc2lnLCBlbWxlbik7CisgICAgICBpZiAoIXJjKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBzZXhwX2J1aWxkIChyX3NpZywgTlVMTCwgIihzaWctdmFsKHJzYShzJWIpKSkiLCAoaW50KWVtbGVuLCBlbSk7CisgICAgICAgICAgeGZyZWUgKGVtKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHJjID0gc2V4cF9idWlsZCAocl9zaWcsIE5VTEwsICIoc2lnLXZhbChyc2EocyVNKSkpIiwgc2lnKTsKKworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChzaWcpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2subik7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5lKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLmQpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2sucCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChzay5xKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHNrLnUpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoZGF0YSk7CisgIF9nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKCZjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJyc2Ffc2lnbiAgICAgID0+ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Cityc2FfdmVyaWZ5IChnY3J5X3NleHBfdCBzX3NpZywgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBrZXlwYXJtcykKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICBzdHJ1Y3QgcGtfZW5jb2RpbmdfY3R4IGN0eDsKKyAgZ2NyeV9zZXhwX3QgbDEgPSBOVUxMOworICBnY3J5X21waV90IHNpZyA9IE5VTEw7CisgIGdjcnlfbXBpX3QgZGF0YSA9IE5VTEw7CisgIFJTQV9wdWJsaWNfa2V5IHBrID0geyBOVUxMLCBOVUxMIH07CisgIGdjcnlfbXBpX3QgcmVzdWx0ID0gTlVMTDsKKworICBfZ2NyeV9wa191dGlsX2luaXRfZW5jb2RpbmdfY3R4ICgmY3R4LCBQVUJLRVlfT1BfVkVSSUZZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2FfZ2V0X25iaXRzIChrZXlwYXJtcykpOworCisgIC8qIEV4dHJhY3QgdGhlIGRhdGEuICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfZGF0YV90b19tcGkgKHNfZGF0YSwgJmRhdGEsICZjdHgpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50bXBpICgicnNhX3ZlcmlmeSBkYXRhIiwgZGF0YSk7CisgIGlmIChtcGlfaXNfb3BhcXVlIChkYXRhKSkKKyAgICB7CisgICAgICByYyA9IEdQR19FUlJfSU5WX0RBVEE7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBFeHRyYWN0IHRoZSBzaWduYXR1cmUgdmFsdWUuICAqLworICByYyA9IF9nY3J5X3BrX3V0aWxfcHJlcGFyc2Vfc2lndmFsIChzX3NpZywgcnNhX25hbWVzLCAmbDEsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgcmMgPSBzZXhwX2V4dHJhY3RfcGFyYW0gKGwxLCBOVUxMLCAicyIsICZzaWcsIE5VTEwpOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50bXBpICgicnNhX3ZlcmlmeSAgc2lnIiwgc2lnKTsKKworICAvKiBFeHRyYWN0IHRoZSBrZXkuICAqLworICByYyA9IHNleHBfZXh0cmFjdF9wYXJhbSAoa2V5cGFybXMsIE5VTEwsICJuZSIsICZway5uLCAmcGsuZSwgTlVMTCk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworICBpZiAoREJHX0NJUEhFUikKKyAgICB7CisgICAgICBsb2dfcHJpbnRtcGkgKCJyc2FfdmVyaWZ5ICAgIG4iLCBway5uKTsKKyAgICAgIGxvZ19wcmludG1waSAoInJzYV92ZXJpZnkgICAgZSIsIHBrLmUpOworICAgIH0KKworICAvKiBEbyBSU0EgY29tcHV0YXRpb24gYW5kIGNvbXBhcmUuICAqLworICByZXN1bHQgPSBtcGlfbmV3ICgwKTsKKyAgcHVibGljIChyZXN1bHQsIHNpZywgJnBrKTsKKyAgaWYgKERCR19DSVBIRVIpCisgICAgbG9nX3ByaW50bXBpICgicnNhX3ZlcmlmeSAgY21wIiwgcmVzdWx0KTsKKyAgaWYgKGN0eC52ZXJpZnlfY21wKQorICAgIHJjID0gY3R4LnZlcmlmeV9jbXAgKCZjdHgsIHJlc3VsdCk7CisgIGVsc2UKKyAgICByYyA9IG1waV9jbXAgKHJlc3VsdCwgZGF0YSkgPyBHUEdfRVJSX0JBRF9TSUdOQVRVUkUgOiAwOworCisgbGVhdmU6CisgIF9nY3J5X21waV9yZWxlYXNlIChyZXN1bHQpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAocGsubik7CisgIF9nY3J5X21waV9yZWxlYXNlIChway5lKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGRhdGEpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoc2lnKTsKKyAgc2V4cF9yZWxlYXNlIChsMSk7CisgIF9nY3J5X3BrX3V0aWxfZnJlZV9lbmNvZGluZ19jdHggKCZjdHgpOworICBpZiAoREJHX0NJUEhFUikKKyAgICBsb2dfZGVidWcgKCJyc2FfdmVyaWZ5ICAgID0+ICVzXG4iLCByYz9ncGdfc3RyZXJyb3IgKHJjKToiR29vZCIpOworICByZXR1cm4gcmM7Cit9CisKKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUga2V5IGRlc2NyaWJlZCBieSBQQVJNUy4gIE9uIGVycm9yCisgKiAwIGlzIHJldHVybmVkLiAgVGhlIGZvcm1hdCBvZiBQQVJNUyBzdGFydHMgd2l0aCB0aGUgYWxnb3JpdGhtIG5hbWU7CisgKiBmb3IgZXhhbXBsZToKKyAqCisgKiAgIChyc2EKKyAqICAgICAobiA8bXBpPikKKyAqICAgICAoZSA8bXBpPikpCisgKgorICogTW9yZSBwYXJhbWV0ZXJzIG1heSBiZSBnaXZlbiBidXQgd2Ugb25seSBuZWVkIE4gaGVyZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludAorcnNhX2dldF9uYml0cyAoZ2NyeV9zZXhwX3QgcGFybXMpCit7CisgIGdjcnlfc2V4cF90IGwxOworICBnY3J5X21waV90IG47CisgIHVuc2lnbmVkIGludCBuYml0czsKKworICBsMSA9IHNleHBfZmluZF90b2tlbiAocGFybXMsICJuIiwgMSk7CisgIGlmICghbDEpCisgICAgcmV0dXJuIDA7IC8qIFBhcmFtZXRlciBOIG5vdCBmb3VuZC4gICovCisKKyAgbiA9IHNleHBfbnRoX21waSAobDEsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBuYml0cyA9IG4/IG1waV9nZXRfbmJpdHMgKG4pIDogMDsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKG4pOworICByZXR1cm4gbmJpdHM7Cit9CisKKworLyogQ29tcHV0ZSBhIGtleWdyaXAuICBNRCBpcyB0aGUgaGFzaCBjb250ZXh0IHdoaWNoIHdlIGFyZSBnb2luZyB0bworICAgdXBkYXRlLiAgS0VZUEFSQU0gaXMgYW4gUy1leHByZXNzaW9uIHdpdGggdGhlIGtleSBwYXJhbWV0ZXJzLCB0aGlzCisgICBpcyB1c3VhbGx5IGEgcHVibGljIGtleSBidXQgbWF5IGFsc28gYmUgYSBzZWNyZXQga2V5LiAgQW4gZXhhbXBsZQorICAgb2Ygc3VjaCBhbiBTLWV4cHJlc3Npb24gaXM6CisKKyAgICAgIChyc2EKKyAgICAgICAgKG4gIzAwQi4uLiMpCisgICAgICAgIChlICMwMTAwMDEjKSkKKworICAgUEtDUy0xNSBzYXlzIHRoYXQgZm9yIFJTQSBvbmx5IHRoZSBtb2R1bHVzIHNob3VsZCBiZSBoYXNoZWQgLQorICAgaG93ZXZlciwgaXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBpcyBtZWFudCB0byB1c2UgdGhlIHJhdyBieXRlcworICAgKGFzc3VtaW5nIHRoaXMgaXMgYW4gdW5zaWduZWQgaW50ZWdlcikgb3Igd2hldGhlciB0aGUgREVSIHJlcXVpcmVkCisgICAwIHNob3VsZCBiZSBwcmVmaXhlZC4gIFdlIGhhc2ggdGhlIHJhdyBieXRlcy4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK2NvbXB1dGVfa2V5Z3JpcCAoZ2NyeV9tZF9oZF90IG1kLCBnY3J5X3NleHBfdCBrZXlwYXJhbSkKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGNvbnN0IGNoYXIgKmRhdGE7CisgIHNpemVfdCBkYXRhbGVuOworCisgIGwxID0gc2V4cF9maW5kX3Rva2VuIChrZXlwYXJhbSwgIm4iLCAxKTsKKyAgaWYgKCFsMSkKKyAgICByZXR1cm4gR1BHX0VSUl9OT19PQko7CisKKyAgZGF0YSA9IHNleHBfbnRoX2RhdGEgKGwxLCAxLCAmZGF0YWxlbik7CisgIGlmICghZGF0YSkKKyAgICB7CisgICAgICBzZXhwX3JlbGVhc2UgKGwxKTsKKyAgICAgIHJldHVybiBHUEdfRVJSX05PX09CSjsKKyAgICB9CisKKyAgX2djcnlfbWRfd3JpdGUgKG1kLCBkYXRhLCBkYXRhbGVuKTsKKyAgc2V4cF9yZWxlYXNlIChsMSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworCisMCisvKgorICAgICBTZWxmLXRlc3Qgc2VjdGlvbi4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9zaWduXzEwMjQgKGdjcnlfc2V4cF90IHBrZXksIGdjcnlfc2V4cF90IHNrZXkpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9kYXRhW10gPQorICAgICIoZGF0YSAoZmxhZ3MgcGtjczEpIgorICAgICIgKGhhc2ggc2hhMSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBhYWJiY2NkZGVlZmYxMDIwMzA0MCMpKSI7CisgIHN0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9kYXRhX2JhZFtdID0KKyAgICAiKGRhdGEgKGZsYWdzIHBrY3MxKSIKKyAgICAiIChoYXNoIHNoYTEgIzExMjIzMzQ0NTU2Njc3ODg5OTAwYWFiYmNjZGRlZWZmODAyMDMwNDAjKSkiOworCisgIGNvbnN0IGNoYXIgKmVycnR4dCA9IE5VTEw7CisgIGdjcnlfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IGRhdGEgPSBOVUxMOworICBnY3J5X3NleHBfdCBkYXRhX2JhZCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHNpZyA9IE5VTEw7CisKKyAgZXJyID0gc2V4cF9zc2NhbiAoJmRhdGEsIE5VTEwsIHNhbXBsZV9kYXRhLCBzdHJsZW4gKHNhbXBsZV9kYXRhKSk7CisgIGlmICghZXJyKQorICAgIGVyciA9IHNleHBfc3NjYW4gKCZkYXRhX2JhZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZGF0YV9iYWQsIHN0cmxlbiAoc2FtcGxlX2RhdGFfYmFkKSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gImNvbnZlcnRpbmcgZGF0YSBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgZXJyID0gX2djcnlfcGtfc2lnbiAoJnNpZywgZGF0YSwgc2tleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gInNpZ25pbmcgZmFpbGVkIjsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBlcnIgPSBfZ2NyeV9wa192ZXJpZnkgKHNpZywgZGF0YSwgcGtleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gInZlcmlmeSBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGVyciA9IF9nY3J5X3BrX3ZlcmlmeSAoc2lnLCBkYXRhX2JhZCwgcGtleSk7CisgIGlmIChnY3J5X2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfQkFEX1NJR05BVFVSRSkKKyAgICB7CisgICAgICBlcnJ0eHQgPSAiYmFkIHNpZ25hdHVyZSBub3QgZGV0ZWN0ZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKworIGxlYXZlOgorICBzZXhwX3JlbGVhc2UgKHNpZyk7CisgIHNleHBfcmVsZWFzZSAoZGF0YV9iYWQpOworICBzZXhwX3JlbGVhc2UgKGRhdGEpOworICByZXR1cm4gZXJydHh0OworfQorCisKKworLyogR2l2ZW4gYW4gUy1leHByZXNzaW9uIEVOQ1JfREFUQSBvZiB0aGUgZm9ybToKKworICAgKGVuYy12YWwKKyAgICAocnNhCisgICAgIChhIGEtdmFsdWUpKSkKKworICAgYXMgcmV0dXJuZWQgYnkgZ2NyeV9wa19kZWNyeXB0LCByZXR1cm4gdGhlIHRoZSBBLVZBTFVFLiAgT24gZXJyb3IsCisgICByZXR1cm4gTlVMTC4gICovCitzdGF0aWMgZ2NyeV9tcGlfdAorZXh0cmFjdF9hX2Zyb21fc2V4cCAoZ2NyeV9zZXhwX3QgZW5jcl9kYXRhKQoreworICBnY3J5X3NleHBfdCBsMSwgbDIsIGwzOworICBnY3J5X21waV90IGFfdmFsdWU7CisKKyAgbDEgPSBzZXhwX2ZpbmRfdG9rZW4gKGVuY3JfZGF0YSwgImVuYy12YWwiLCAwKTsKKyAgaWYgKCFsMSkKKyAgICByZXR1cm4gTlVMTDsKKyAgbDIgPSBzZXhwX2ZpbmRfdG9rZW4gKGwxLCAicnNhIiwgMCk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICBpZiAoIWwyKQorICAgIHJldHVybiBOVUxMOworICBsMyA9IHNleHBfZmluZF90b2tlbiAobDIsICJhIiwgMCk7CisgIHNleHBfcmVsZWFzZSAobDIpOworICBpZiAoIWwzKQorICAgIHJldHVybiBOVUxMOworICBhX3ZhbHVlID0gc2V4cF9udGhfbXBpIChsMywgMSwgMCk7CisgIHNleHBfcmVsZWFzZSAobDMpOworCisgIHJldHVybiBhX3ZhbHVlOworfQorCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NlbGZ0ZXN0X2VuY3JfMTAyNCAoZ2NyeV9zZXhwX3QgcGtleSwgZ2NyeV9zZXhwX3Qgc2tleSkKK3sKKyAgY29uc3QgY2hhciAqZXJydHh0ID0gTlVMTDsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgY29uc3QgdW5zaWduZWQgaW50IG5iaXRzID0gMTAwMDsgLyogRW5jcnlwdCAxMDAwIHJhbmRvbSBiaXRzLiAgKi8KKyAgZ2NyeV9tcGlfdCBwbGFpbnRleHQgPSBOVUxMOworICBnY3J5X3NleHBfdCBwbGFpbiA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGVuY3IgID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCAgY2lwaGVydGV4dCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGRlY3IgID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCAgZGVjcl9wbGFpbnRleHQgPSBOVUxMOworICBnY3J5X3NleHBfdCB0bXBsaXN0ID0gTlVMTDsKKworICAvKiBDcmVhdGUgcGxhaW50ZXh0LiAgVGhlIHBsYWludGV4dCBpcyBhY3R1YWxseSBhIGJpZyBpbnRlZ2VyIG51bWJlci4gICovCisgIHBsYWludGV4dCA9IG1waV9uZXcgKG5iaXRzKTsKKyAgX2djcnlfbXBpX3JhbmRvbWl6ZSAocGxhaW50ZXh0LCBuYml0cywgR0NSWV9XRUFLX1JBTkRPTSk7CisKKyAgLyogUHV0IHRoZSBwbGFpbnRleHQgaW50byBhbiBTLWV4cHJlc3Npb24uICAqLworICBlcnIgPSBzZXhwX2J1aWxkICgmcGxhaW4sIE5VTEwsICIoZGF0YSAoZmxhZ3MgcmF3KSAodmFsdWUgJW0pKSIsIHBsYWludGV4dCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gImNvbnZlcnRpbmcgZGF0YSBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRW5jcnlwdC4gICovCisgIGVyciA9IF9nY3J5X3BrX2VuY3J5cHQgKCZlbmNyLCBwbGFpbiwgcGtleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJydHh0ID0gImVuY3J5cHQgZmFpbGVkIjsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIEV4dHJheHQgdGhlIGNpcGhlcnRleHQgZnJvbSB0aGUgcmV0dXJuZWQgUy1leHByZXNzaW9uLiAgKi8KKyAgLypzZXhwX2R1bXAgKGVuY3IpOyovCisgIGNpcGhlcnRleHQgPSBleHRyYWN0X2FfZnJvbV9zZXhwIChlbmNyKTsKKyAgaWYgKCFjaXBoZXJ0ZXh0KQorICAgIHsKKyAgICAgIGVycnR4dCA9ICJnY3J5X3BrX2RlY3J5cHQgcmV0dXJuZWQgZ2FyYmFnZSI7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBDaGVjayB0aGF0IHRoZSBjaXBoZXJ0ZXh0IGRvZXMgbm8gbWF0Y2ggdGhlIHBsYWludGV4dC4gICovCisgIC8qIF9nY3J5X2xvZ19wcmludG1waSAoInBsYWludGV4dCIsIHBsYWludGV4dCk7ICovCisgIC8qIF9nY3J5X2xvZ19wcmludG1waSAoImNpcGhlcnR4dCIsIGNpcGhlcnRleHQpOyAqLworICBpZiAoIW1waV9jbXAgKHBsYWludGV4dCwgY2lwaGVydGV4dCkpCisgICAgeworICAgICAgZXJydHh0ID0gImNpcGhlcnRleHQgbWF0Y2hlcyBwbGFpbnRleHQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRGVjcnlwdC4gICovCisgIGVyciA9IF9nY3J5X3BrX2RlY3J5cHQgKCZkZWNyLCBlbmNyLCBza2V5KTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBlcnJ0eHQgPSAiZGVjcnlwdCBmYWlsZWQiOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRXh0cmFjdCB0aGUgZGVjcnlwdGVkIGRhdGEgZnJvbSB0aGUgUy1leHByZXNzaW9uLiAgTm90ZSB0aGF0IHRoZQorICAgICBvdXRwdXQgb2YgZ2NyeV9wa19kZWNyeXB0IGRlcGVuZHMgb24gd2hldGhlciBhIGZsYWdzIGxpc3RzIG9jY3VycworICAgICBpbiBpdHMgaW5wdXQgZGF0YS4gIEJlY2F1c2Ugd2UgcGFzc2VkIHRoZSBvdXRwdXQgb2YKKyAgICAgZ2NyeV9wa19lbmNyeXB0IGRpcmVjdGx5IHRvIGdjcnlfcGtfZGVjcnlwdCwgc3VjaCBhIGZsYWcgdmFsdWUKKyAgICAgd29uJ3QgYmUgdGhlcmUgYXMgb2YgdG9kYXkuICBUbyBiZSBwcmVwYXJlZCBmb3IgZnV0dXJlIGNoYW5nZXMgd2UKKyAgICAgdGFrZSBjYXJlIG9mIGl0IGFueXdheS4gICovCisgIHRtcGxpc3QgPSBzZXhwX2ZpbmRfdG9rZW4gKGRlY3IsICJ2YWx1ZSIsIDApOworICBpZiAodG1wbGlzdCkKKyAgICBkZWNyX3BsYWludGV4dCA9IHNleHBfbnRoX21waSAodG1wbGlzdCwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgZWxzZQorICAgIGRlY3JfcGxhaW50ZXh0ID0gc2V4cF9udGhfbXBpIChkZWNyLCAwLCBHQ1JZTVBJX0ZNVF9VU0cpOworICBpZiAoIWRlY3JfcGxhaW50ZXh0KQorICAgIHsKKyAgICAgIGVycnR4dCA9ICJkZWNyeXB0IHJldHVybmVkIG5vIHBsYWludGV4dCI7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICAvKiBDaGVjayB0aGF0IHRoZSBkZWNyeXB0ZWQgcGxhaW50ZXh0IG1hdGNoZXMgdGhlIG9yaWdpbmFsICBwbGFpbnRleHQuICAqLworICBpZiAobXBpX2NtcCAocGxhaW50ZXh0LCBkZWNyX3BsYWludGV4dCkpCisgICAgeworICAgICAgZXJydHh0ID0gIm1pc21hdGNoIjsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgbGVhdmU6CisgIHNleHBfcmVsZWFzZSAodG1wbGlzdCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChkZWNyX3BsYWludGV4dCk7CisgIHNleHBfcmVsZWFzZSAoZGVjcik7CisgIF9nY3J5X21waV9yZWxlYXNlIChjaXBoZXJ0ZXh0KTsKKyAgc2V4cF9yZWxlYXNlIChlbmNyKTsKKyAgc2V4cF9yZWxlYXNlIChwbGFpbik7CisgIF9nY3J5X21waV9yZWxlYXNlIChwbGFpbnRleHQpOworICByZXR1cm4gZXJydHh0OworfQorCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3JzYSAoc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIGNvbnN0IGNoYXIgKmVycnR4dDsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qgc2tleSA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHBrZXkgPSBOVUxMOworCisgIC8qIENvbnZlcnQgdGhlIFMtZXhwcmVzc2lvbnMgaW50byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uICAqLworICB3aGF0ID0gImNvbnZlcnQiOworICBlcnIgPSBzZXhwX3NzY2FuICgmc2tleSwgTlVMTCwgc2FtcGxlX3NlY3JldF9rZXksIHN0cmxlbiAoc2FtcGxlX3NlY3JldF9rZXkpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gc2V4cF9zc2NhbiAoJnBrZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3B1YmxpY19rZXksIHN0cmxlbiAoc2FtcGxlX3B1YmxpY19rZXkpKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9zdHJlcnJvciAoZXJyKTsKKyAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICB3aGF0ID0gImtleSBjb25zaXN0ZW5jeSI7CisgIGVyciA9IF9nY3J5X3BrX3Rlc3RrZXkgKHNrZXkpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGVycnR4dCA9IF9nY3J5X3N0cmVycm9yIChlcnIpOworICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgIHdoYXQgPSAic2lnbiI7CisgIGVycnR4dCA9IHNlbGZ0ZXN0X3NpZ25fMTAyNCAocGtleSwgc2tleSk7CisgIGlmIChlcnJ0eHQpCisgICAgZ290byBmYWlsZWQ7CisKKyAgd2hhdCA9ICJlbmNyeXB0IjsKKyAgZXJydHh0ID0gc2VsZnRlc3RfZW5jcl8xMDI0IChwa2V5LCBza2V5KTsKKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworICBzZXhwX3JlbGVhc2UgKHBrZXkpOworICBzZXhwX3JlbGVhc2UgKHNrZXkpOworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBzZXhwX3JlbGVhc2UgKHBrZXkpOworICBzZXhwX3JlbGVhc2UgKHNrZXkpOworICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoInB1YmtleSIsIEdDUllfUEtfUlNBLCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworLyogUnVuIGEgZnVsbCBzZWxmLXRlc3QgZm9yIEFMR08gYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitydW5fc2VsZnRlc3RzIChpbnQgYWxnbywgaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZWM7CisKKyAgKHZvaWQpZXh0ZW5kZWQ7CisKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIEdDUllfUEtfUlNBOgorICAgICAgZWMgPSBzZWxmdGVzdHNfcnNhIChyZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVjID0gR1BHX0VSUl9QVUJLRVlfQUxHTzsKKyAgICAgIGJyZWFrOworCisgICAgfQorICByZXR1cm4gZWM7Cit9CisKKworCisMCitnY3J5X3BrX3NwZWNfdCBfZ2NyeV9wdWJrZXlfc3BlY19yc2EgPQorICB7CisgICAgR0NSWV9QS19SU0EsIHsgMCwgMSB9LAorICAgIChHQ1JZX1BLX1VTQUdFX1NJR04gfCBHQ1JZX1BLX1VTQUdFX0VOQ1IpLAorICAgICJSU0EiLCByc2FfbmFtZXMsCisgICAgIm5lIiwgIm5lZHBxdSIsICJhIiwgInMiLCAibiIsCisgICAgcnNhX2dlbmVyYXRlLAorICAgIHJzYV9jaGVja19zZWNyZXRfa2V5LAorICAgIHJzYV9lbmNyeXB0LAorICAgIHJzYV9kZWNyeXB0LAorICAgIHJzYV9zaWduLAorICAgIHJzYV92ZXJpZnksCisgICAgcnNhX2dldF9uYml0cywKKyAgICBydW5fc2VsZnRlc3RzLAorICAgIGNvbXB1dGVfa2V5Z3JpcAorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NhbHNhMjAtYW1kNjQuUyBiL2NpcGhlci9zYWxzYTIwLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zYWxzYTIwLWFtZDY0LlMKQEAgLTAsMCArMSw5MjQgQEAKKy8qIHNhbHNhMjAtYW1kNjQuUyAgLSAgQU1ENjQgaW1wbGVtZW50YXRpb24gb2YgU2Fsc2EyMAorICoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIEJhc2VkIG9uIHB1YmxpYyBkb21haW4gaW1wbGVtZW50YXRpb24gYnkgRC4gSi4gQmVybnN0ZWluIGF0CisgKiAgaHR0cDovL2NyLnlwLnRvL3NudWZmbGUuaHRtbAorICovCisKKyNpZmRlZiBfX3g4Nl82NAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2lmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgZGVmaW5lZChVU0VfU0FMU0EyMCkKKworLnRleHQKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9zYWxzYTIwX2FtZDY0X2tleXNldHVwCisudHlwZSAgX2djcnlfc2Fsc2EyMF9hbWQ2NF9rZXlzZXR1cCxAZnVuY3Rpb247CitfZ2NyeV9zYWxzYTIwX2FtZDY0X2tleXNldHVwOgorCW1vdmwgICAwKCVyc2kpLCVyOGQKKwltb3ZsICAgNCglcnNpKSwlcjlkCisJbW92bCAgIDgoJXJzaSksJWVheAorCW1vdmwgICAxMiglcnNpKSwlcjEwZAorCW1vdmwgICAlcjhkLDIwKCVyZGkpCisJbW92bCAgICVyOWQsNDAoJXJkaSkKKwltb3ZsICAgJWVheCw2MCglcmRpKQorCW1vdmwgICAlcjEwZCw0OCglcmRpKQorCWNtcCAgJDI1NiwlcmR4CisJamIgLkxfa2JpdHMxMjgKKy5MX2tiaXRzMjU2OgorCW1vdmwgICAxNiglcnNpKSwlZWR4CisJbW92bCAgIDIwKCVyc2kpLCVlY3gKKwltb3ZsICAgMjQoJXJzaSksJXI4ZAorCW1vdmwgICAyOCglcnNpKSwlZXNpCisJbW92bCAgICVlZHgsMjgoJXJkaSkKKwltb3ZsICAgJWVjeCwxNiglcmRpKQorCW1vdmwgICAlcjhkLDM2KCVyZGkpCisJbW92bCAgICVlc2ksNTYoJXJkaSkKKwltb3YgICQxNjM0NzYwODA1LCVyc2kKKwltb3YgICQ4NTc3NjA4NzgsJXJkeAorCW1vdiAgJDIwMzY0NzcyMzQsJXJjeAorCW1vdiAgJDE3OTcyODUyMzYsJXI4CisJbW92bCAgICVlc2ksMCglcmRpKQorCW1vdmwgICAlZWR4LDQoJXJkaSkKKwltb3ZsICAgJWVjeCw4KCVyZGkpCisJbW92bCAgICVyOGQsMTIoJXJkaSkKKwlqbXAgLkxfa2V5c2V0dXBkb25lCisuTF9rYml0czEyODoKKwltb3ZsICAgMCglcnNpKSwlZWR4CisJbW92bCAgIDQoJXJzaSksJWVjeAorCW1vdmwgICA4KCVyc2kpLCVyOGQKKwltb3ZsICAgMTIoJXJzaSksJWVzaQorCW1vdmwgICAlZWR4LDI4KCVyZGkpCisJbW92bCAgICVlY3gsMTYoJXJkaSkKKwltb3ZsICAgJXI4ZCwzNiglcmRpKQorCW1vdmwgICAlZXNpLDU2KCVyZGkpCisJbW92ICAkMTYzNDc2MDgwNSwlcnNpCisJbW92ICAkODI0MjA2NDQ2LCVyZHgKKwltb3YgICQyMDM2NDc3MjM4LCVyY3gKKwltb3YgICQxNzk3Mjg1MjM2LCVyOAorCW1vdmwgICAlZXNpLDAoJXJkaSkKKwltb3ZsICAgJWVkeCw0KCVyZGkpCisJbW92bCAgICVlY3gsOCglcmRpKQorCW1vdmwgICAlcjhkLDEyKCVyZGkpCisuTF9rZXlzZXR1cGRvbmU6CisJcmV0CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfc2Fsc2EyMF9hbWQ2NF9pdnNldHVwCisudHlwZSAgX2djcnlfc2Fsc2EyMF9hbWQ2NF9pdnNldHVwLEBmdW5jdGlvbjsKK19nY3J5X3NhbHNhMjBfYW1kNjRfaXZzZXR1cDoKKwltb3ZsICAgMCglcnNpKSwlcjhkCisJbW92bCAgIDQoJXJzaSksJWVzaQorCW1vdiAgJDAsJXI5CisJbW92ICAkMCwlcmF4CisJbW92bCAgICVyOGQsMjQoJXJkaSkKKwltb3ZsICAgJWVzaSw0NCglcmRpKQorCW1vdmwgICAlcjlkLDMyKCVyZGkpCisJbW92bCAgICVlYXgsNTIoJXJkaSkKKwlyZXQKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9zYWxzYTIwX2FtZDY0X2VuY3J5cHRfYmxvY2tzCisudHlwZSAgX2djcnlfc2Fsc2EyMF9hbWQ2NF9lbmNyeXB0X2Jsb2NrcyxAZnVuY3Rpb247CitfZ2NyeV9zYWxzYTIwX2FtZDY0X2VuY3J5cHRfYmxvY2tzOgorCS8qCisJICogTW9kaWZpY2F0aW9ucyB0byBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbjoKKwkgKiAgLSBOdW1iZXIgb2Ygcm91bmRzIHBhc3NpbmcgaW4gcmVnaXN0ZXIgJXI4IChmb3IgU2Fsc2EyMC8xMikuCisJICogIC0gTGVuZ3RoIGlzIGlucHV0IGFzIG51bWJlciBvZiBibG9ja3MsIHNvIGRvbid0IGhhbmRsZSB0YWlsIGJ5dGVzCisJICogICAgKHRoaXMgaXMgZG9uZSBpbiBzYWxzYTIwLmMpLgorCSAqLworCXB1c2ggJXJieAorCXNobHEgJDYsICVyY3ggLyogYmxvY2tzIHRvIGJ5dGVzICovCisJbW92ICVyOCwgJXJieAorCW1vdiAlcnNwLCVyMTEKKwlhbmQgJDMxLCVyMTEKKwlhZGQgJDM4NCwlcjExCisJc3ViICVyMTEsJXJzcAorCW1vdiAgJXJkaSwlcjgKKwltb3YgICVyc2ksJXJzaQorCW1vdiAgJXJkeCwlcmRpCisJbW92ICAlcmN4LCVyZHgKKwljbXAgICQwLCVyZHgKKwlqYmUgLkxfZG9uZQorLkxfc3RhcnQ6CisJY21wICAkMjU2LCVyZHgKKwlqYiAuTF9ieXRlc19hcmVfNjRfMTI4X29yXzE5MgorCW1vdmRxYSAwKCVyOCksJXhtbTAKKwlwc2h1ZmQgJDB4NTUsJXhtbTAsJXhtbTEKKwlwc2h1ZmQgJDB4YWEsJXhtbTAsJXhtbTIKKwlwc2h1ZmQgJDB4ZmYsJXhtbTAsJXhtbTMKKwlwc2h1ZmQgJDB4MDAsJXhtbTAsJXhtbTAKKwltb3ZkcWEgJXhtbTEsMCglcnNwKQorCW1vdmRxYSAleG1tMiwxNiglcnNwKQorCW1vdmRxYSAleG1tMywzMiglcnNwKQorCW1vdmRxYSAleG1tMCw0OCglcnNwKQorCW1vdmRxYSAxNiglcjgpLCV4bW0wCisJcHNodWZkICQweGFhLCV4bW0wLCV4bW0xCisJcHNodWZkICQweGZmLCV4bW0wLCV4bW0yCisJcHNodWZkICQweDAwLCV4bW0wLCV4bW0zCisJcHNodWZkICQweDU1LCV4bW0wLCV4bW0wCisJbW92ZHFhICV4bW0xLDY0KCVyc3ApCisJbW92ZHFhICV4bW0yLDgwKCVyc3ApCisJbW92ZHFhICV4bW0zLDk2KCVyc3ApCisJbW92ZHFhICV4bW0wLDExMiglcnNwKQorCW1vdmRxYSAzMiglcjgpLCV4bW0wCisJcHNodWZkICQweGZmLCV4bW0wLCV4bW0xCisJcHNodWZkICQweDU1LCV4bW0wLCV4bW0yCisJcHNodWZkICQweGFhLCV4bW0wLCV4bW0wCisJbW92ZHFhICV4bW0xLDEyOCglcnNwKQorCW1vdmRxYSAleG1tMiwxNDQoJXJzcCkKKwltb3ZkcWEgJXhtbTAsMTYwKCVyc3ApCisJbW92ZHFhIDQ4KCVyOCksJXhtbTAKKwlwc2h1ZmQgJDB4MDAsJXhtbTAsJXhtbTEKKwlwc2h1ZmQgJDB4YWEsJXhtbTAsJXhtbTIKKwlwc2h1ZmQgJDB4ZmYsJXhtbTAsJXhtbTAKKwltb3ZkcWEgJXhtbTEsMTc2KCVyc3ApCisJbW92ZHFhICV4bW0yLDE5MiglcnNwKQorCW1vdmRxYSAleG1tMCwyMDgoJXJzcCkKKy5MX2J5dGVzYXRsZWFzdDI1NjoKKwltb3ZsICAgMzIoJXI4KSwlZWN4CisJbW92bCAgIDUyKCVyOCksJXI5ZAorCW1vdmwgJWVjeCwyMjQoJXJzcCkKKwltb3ZsICVyOWQsMjQwKCVyc3ApCisJYWRkICAkMSwlZWN4CisJYWRjICAkMCwlcjlkCisJbW92bCAlZWN4LDQrMjI0KCVyc3ApCisJbW92bCAlcjlkLDQrMjQwKCVyc3ApCisJYWRkICAkMSwlZWN4CisJYWRjICAkMCwlcjlkCisJbW92bCAlZWN4LDgrMjI0KCVyc3ApCisJbW92bCAlcjlkLDgrMjQwKCVyc3ApCisJYWRkICAkMSwlZWN4CisJYWRjICAkMCwlcjlkCisJbW92bCAlZWN4LDEyKzIyNCglcnNwKQorCW1vdmwgJXI5ZCwxMisyNDAoJXJzcCkKKwlhZGQgICQxLCVlY3gKKwlhZGMgICQwLCVyOWQKKwltb3ZsICAgJWVjeCwzMiglcjgpCisJbW92bCAgICVyOWQsNTIoJXI4KQorCW1vdnEgJXJkeCwyODgoJXJzcCkKKwltb3YgICVyYngsJXJkeAorCW1vdmRxYSAwKCVyc3ApLCV4bW0wCisJbW92ZHFhIDE2KCVyc3ApLCV4bW0xCisJbW92ZHFhIDMyKCVyc3ApLCV4bW0yCisJbW92ZHFhIDE5MiglcnNwKSwleG1tMworCW1vdmRxYSAyMDgoJXJzcCksJXhtbTQKKwltb3ZkcWEgNjQoJXJzcCksJXhtbTUKKwltb3ZkcWEgODAoJXJzcCksJXhtbTYKKwltb3ZkcWEgMTEyKCVyc3ApLCV4bW03CisJbW92ZHFhIDEyOCglcnNwKSwleG1tOAorCW1vdmRxYSAxNDQoJXJzcCksJXhtbTkKKwltb3ZkcWEgMTYwKCVyc3ApLCV4bW0xMAorCW1vdmRxYSAyNDAoJXJzcCksJXhtbTExCisJbW92ZHFhIDQ4KCVyc3ApLCV4bW0xMgorCW1vdmRxYSA5NiglcnNwKSwleG1tMTMKKwltb3ZkcWEgMTc2KCVyc3ApLCV4bW0xNAorCW1vdmRxYSAyMjQoJXJzcCksJXhtbTE1CisuTF9tYWlubG9vcDE6CisJbW92ZHFhICV4bW0xLDI1NiglcnNwKQorCW1vdmRxYSAleG1tMiwyNzIoJXJzcCkKKwltb3ZkcWEgJXhtbTEzLCV4bW0xCisJcGFkZGQgJXhtbTEyLCV4bW0xCisJbW92ZHFhICV4bW0xLCV4bW0yCisJcHNsbGQgJDcsJXhtbTEKKwlweG9yICAleG1tMSwleG1tMTQKKwlwc3JsZCAkMjUsJXhtbTIKKwlweG9yICAleG1tMiwleG1tMTQKKwltb3ZkcWEgJXhtbTcsJXhtbTEKKwlwYWRkZCAleG1tMCwleG1tMQorCW1vdmRxYSAleG1tMSwleG1tMgorCXBzbGxkICQ3LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTExCisJcHNybGQgJDI1LCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTExCisJbW92ZHFhICV4bW0xMiwleG1tMQorCXBhZGRkICV4bW0xNCwleG1tMQorCW1vdmRxYSAleG1tMSwleG1tMgorCXBzbGxkICQ5LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTE1CisJcHNybGQgJDIzLCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTE1CisJbW92ZHFhICV4bW0wLCV4bW0xCisJcGFkZGQgJXhtbTExLCV4bW0xCisJbW92ZHFhICV4bW0xLCV4bW0yCisJcHNsbGQgJDksJXhtbTEKKwlweG9yICAleG1tMSwleG1tOQorCXBzcmxkICQyMywleG1tMgorCXB4b3IgICV4bW0yLCV4bW05CisJbW92ZHFhICV4bW0xNCwleG1tMQorCXBhZGRkICV4bW0xNSwleG1tMQorCW1vdmRxYSAleG1tMSwleG1tMgorCXBzbGxkICQxMywleG1tMQorCXB4b3IgICV4bW0xLCV4bW0xMworCXBzcmxkICQxOSwleG1tMgorCXB4b3IgICV4bW0yLCV4bW0xMworCW1vdmRxYSAleG1tMTEsJXhtbTEKKwlwYWRkZCAleG1tOSwleG1tMQorCW1vdmRxYSAleG1tMSwleG1tMgorCXBzbGxkICQxMywleG1tMQorCXB4b3IgICV4bW0xLCV4bW03CisJcHNybGQgJDE5LCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTcKKwltb3ZkcWEgJXhtbTE1LCV4bW0xCisJcGFkZGQgJXhtbTEzLCV4bW0xCisJbW92ZHFhICV4bW0xLCV4bW0yCisJcHNsbGQgJDE4LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTEyCisJcHNybGQgJDE0LCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTEyCisJbW92ZHFhIDI1NiglcnNwKSwleG1tMQorCW1vdmRxYSAleG1tMTIsMjU2KCVyc3ApCisJbW92ZHFhICV4bW05LCV4bW0yCisJcGFkZGQgJXhtbTcsJXhtbTIKKwltb3ZkcWEgJXhtbTIsJXhtbTEyCisJcHNsbGQgJDE4LCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTAKKwlwc3JsZCAkMTQsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW0wCisJbW92ZHFhICV4bW01LCV4bW0yCisJcGFkZGQgJXhtbTEsJXhtbTIKKwltb3ZkcWEgJXhtbTIsJXhtbTEyCisJcHNsbGQgJDcsJXhtbTIKKwlweG9yICAleG1tMiwleG1tMworCXBzcmxkICQyNSwleG1tMTIKKwlweG9yICAleG1tMTIsJXhtbTMKKwltb3ZkcWEgMjcyKCVyc3ApLCV4bW0yCisJbW92ZHFhICV4bW0wLDI3MiglcnNwKQorCW1vdmRxYSAleG1tNiwleG1tMAorCXBhZGRkICV4bW0yLCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQ3LCV4bW0wCisJcHhvciAgJXhtbTAsJXhtbTQKKwlwc3JsZCAkMjUsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW00CisJbW92ZHFhICV4bW0xLCV4bW0wCisJcGFkZGQgJXhtbTMsJXhtbTAKKwltb3ZkcWEgJXhtbTAsJXhtbTEyCisJcHNsbGQgJDksJXhtbTAKKwlweG9yICAleG1tMCwleG1tMTAKKwlwc3JsZCAkMjMsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW0xMAorCW1vdmRxYSAleG1tMiwleG1tMAorCXBhZGRkICV4bW00LCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQ5LCV4bW0wCisJcHhvciAgJXhtbTAsJXhtbTgKKwlwc3JsZCAkMjMsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW04CisJbW92ZHFhICV4bW0zLCV4bW0wCisJcGFkZGQgJXhtbTEwLCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQxMywleG1tMAorCXB4b3IgICV4bW0wLCV4bW01CisJcHNybGQgJDE5LCV4bW0xMgorCXB4b3IgICV4bW0xMiwleG1tNQorCW1vdmRxYSAleG1tNCwleG1tMAorCXBhZGRkICV4bW04LCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQxMywleG1tMAorCXB4b3IgICV4bW0wLCV4bW02CisJcHNybGQgJDE5LCV4bW0xMgorCXB4b3IgICV4bW0xMiwleG1tNgorCW1vdmRxYSAleG1tMTAsJXhtbTAKKwlwYWRkZCAleG1tNSwleG1tMAorCW1vdmRxYSAleG1tMCwleG1tMTIKKwlwc2xsZCAkMTgsJXhtbTAKKwlweG9yICAleG1tMCwleG1tMQorCXBzcmxkICQxNCwleG1tMTIKKwlweG9yICAleG1tMTIsJXhtbTEKKwltb3ZkcWEgMjU2KCVyc3ApLCV4bW0wCisJbW92ZHFhICV4bW0xLDI1NiglcnNwKQorCW1vdmRxYSAleG1tNCwleG1tMQorCXBhZGRkICV4bW0wLCV4bW0xCisJbW92ZHFhICV4bW0xLCV4bW0xMgorCXBzbGxkICQ3LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTcKKwlwc3JsZCAkMjUsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW03CisJbW92ZHFhICV4bW04LCV4bW0xCisJcGFkZGQgJXhtbTYsJXhtbTEKKwltb3ZkcWEgJXhtbTEsJXhtbTEyCisJcHNsbGQgJDE4LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTIKKwlwc3JsZCAkMTQsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW0yCisJbW92ZHFhIDI3MiglcnNwKSwleG1tMTIKKwltb3ZkcWEgJXhtbTIsMjcyKCVyc3ApCisJbW92ZHFhICV4bW0xNCwleG1tMQorCXBhZGRkICV4bW0xMiwleG1tMQorCW1vdmRxYSAleG1tMSwleG1tMgorCXBzbGxkICQ3LCV4bW0xCisJcHhvciAgJXhtbTEsJXhtbTUKKwlwc3JsZCAkMjUsJXhtbTIKKwlweG9yICAleG1tMiwleG1tNQorCW1vdmRxYSAleG1tMCwleG1tMQorCXBhZGRkICV4bW03LCV4bW0xCisJbW92ZHFhICV4bW0xLCV4bW0yCisJcHNsbGQgJDksJXhtbTEKKwlweG9yICAleG1tMSwleG1tMTAKKwlwc3JsZCAkMjMsJXhtbTIKKwlweG9yICAleG1tMiwleG1tMTAKKwltb3ZkcWEgJXhtbTEyLCV4bW0xCisJcGFkZGQgJXhtbTUsJXhtbTEKKwltb3ZkcWEgJXhtbTEsJXhtbTIKKwlwc2xsZCAkOSwleG1tMQorCXB4b3IgICV4bW0xLCV4bW04CisJcHNybGQgJDIzLCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTgKKwltb3ZkcWEgJXhtbTcsJXhtbTEKKwlwYWRkZCAleG1tMTAsJXhtbTEKKwltb3ZkcWEgJXhtbTEsJXhtbTIKKwlwc2xsZCAkMTMsJXhtbTEKKwlweG9yICAleG1tMSwleG1tNAorCXBzcmxkICQxOSwleG1tMgorCXB4b3IgICV4bW0yLCV4bW00CisJbW92ZHFhICV4bW01LCV4bW0xCisJcGFkZGQgJXhtbTgsJXhtbTEKKwltb3ZkcWEgJXhtbTEsJXhtbTIKKwlwc2xsZCAkMTMsJXhtbTEKKwlweG9yICAleG1tMSwleG1tMTQKKwlwc3JsZCAkMTksJXhtbTIKKwlweG9yICAleG1tMiwleG1tMTQKKwltb3ZkcWEgJXhtbTEwLCV4bW0xCisJcGFkZGQgJXhtbTQsJXhtbTEKKwltb3ZkcWEgJXhtbTEsJXhtbTIKKwlwc2xsZCAkMTgsJXhtbTEKKwlweG9yICAleG1tMSwleG1tMAorCXBzcmxkICQxNCwleG1tMgorCXB4b3IgICV4bW0yLCV4bW0wCisJbW92ZHFhIDI1NiglcnNwKSwleG1tMQorCW1vdmRxYSAleG1tMCwyNTYoJXJzcCkKKwltb3ZkcWEgJXhtbTgsJXhtbTAKKwlwYWRkZCAleG1tMTQsJXhtbTAKKwltb3ZkcWEgJXhtbTAsJXhtbTIKKwlwc2xsZCAkMTgsJXhtbTAKKwlweG9yICAleG1tMCwleG1tMTIKKwlwc3JsZCAkMTQsJXhtbTIKKwlweG9yICAleG1tMiwleG1tMTIKKwltb3ZkcWEgJXhtbTExLCV4bW0wCisJcGFkZGQgJXhtbTEsJXhtbTAKKwltb3ZkcWEgJXhtbTAsJXhtbTIKKwlwc2xsZCAkNywleG1tMAorCXB4b3IgICV4bW0wLCV4bW02CisJcHNybGQgJDI1LCV4bW0yCisJcHhvciAgJXhtbTIsJXhtbTYKKwltb3ZkcWEgMjcyKCVyc3ApLCV4bW0yCisJbW92ZHFhICV4bW0xMiwyNzIoJXJzcCkKKwltb3ZkcWEgJXhtbTMsJXhtbTAKKwlwYWRkZCAleG1tMiwleG1tMAorCW1vdmRxYSAleG1tMCwleG1tMTIKKwlwc2xsZCAkNywleG1tMAorCXB4b3IgICV4bW0wLCV4bW0xMworCXBzcmxkICQyNSwleG1tMTIKKwlweG9yICAleG1tMTIsJXhtbTEzCisJbW92ZHFhICV4bW0xLCV4bW0wCisJcGFkZGQgJXhtbTYsJXhtbTAKKwltb3ZkcWEgJXhtbTAsJXhtbTEyCisJcHNsbGQgJDksJXhtbTAKKwlweG9yICAleG1tMCwleG1tMTUKKwlwc3JsZCAkMjMsJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW0xNQorCW1vdmRxYSAleG1tMiwleG1tMAorCXBhZGRkICV4bW0xMywleG1tMAorCW1vdmRxYSAleG1tMCwleG1tMTIKKwlwc2xsZCAkOSwleG1tMAorCXB4b3IgICV4bW0wLCV4bW05CisJcHNybGQgJDIzLCV4bW0xMgorCXB4b3IgICV4bW0xMiwleG1tOQorCW1vdmRxYSAleG1tNiwleG1tMAorCXBhZGRkICV4bW0xNSwleG1tMAorCW1vdmRxYSAleG1tMCwleG1tMTIKKwlwc2xsZCAkMTMsJXhtbTAKKwlweG9yICAleG1tMCwleG1tMTEKKwlwc3JsZCAkMTksJXhtbTEyCisJcHhvciAgJXhtbTEyLCV4bW0xMQorCW1vdmRxYSAleG1tMTMsJXhtbTAKKwlwYWRkZCAleG1tOSwleG1tMAorCW1vdmRxYSAleG1tMCwleG1tMTIKKwlwc2xsZCAkMTMsJXhtbTAKKwlweG9yICAleG1tMCwleG1tMworCXBzcmxkICQxOSwleG1tMTIKKwlweG9yICAleG1tMTIsJXhtbTMKKwltb3ZkcWEgJXhtbTE1LCV4bW0wCisJcGFkZGQgJXhtbTExLCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQxOCwleG1tMAorCXB4b3IgICV4bW0wLCV4bW0xCisJcHNybGQgJDE0LCV4bW0xMgorCXB4b3IgICV4bW0xMiwleG1tMQorCW1vdmRxYSAleG1tOSwleG1tMAorCXBhZGRkICV4bW0zLCV4bW0wCisJbW92ZHFhICV4bW0wLCV4bW0xMgorCXBzbGxkICQxOCwleG1tMAorCXB4b3IgICV4bW0wLCV4bW0yCisJcHNybGQgJDE0LCV4bW0xMgorCXB4b3IgICV4bW0xMiwleG1tMgorCW1vdmRxYSAyNTYoJXJzcCksJXhtbTEyCisJbW92ZHFhIDI3MiglcnNwKSwleG1tMAorCXN1YiAgJDIsJXJkeAorCWphIC5MX21haW5sb29wMQorCXBhZGRkIDQ4KCVyc3ApLCV4bW0xMgorCXBhZGRkIDExMiglcnNwKSwleG1tNworCXBhZGRkIDE2MCglcnNwKSwleG1tMTAKKwlwYWRkZCAyMDgoJXJzcCksJXhtbTQKKwltb3ZkICAgJXhtbTEyLCVyZHgKKwltb3ZkICAgJXhtbTcsJXJjeAorCW1vdmQgICAleG1tMTAsJXI5CisJbW92ZCAgICV4bW00LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTEyLCV4bW0xMgorCXBzaHVmZCAkMHgzOSwleG1tNywleG1tNworCXBzaHVmZCAkMHgzOSwleG1tMTAsJXhtbTEwCisJcHNodWZkICQweDM5LCV4bW00LCV4bW00CisJeG9ybCAwKCVyc2kpLCVlZHgKKwl4b3JsIDQoJXJzaSksJWVjeAorCXhvcmwgOCglcnNpKSwlcjlkCisJeG9ybCAxMiglcnNpKSwlZWF4CisJbW92bCAgICVlZHgsMCglcmRpKQorCW1vdmwgICAlZWN4LDQoJXJkaSkKKwltb3ZsICAgJXI5ZCw4KCVyZGkpCisJbW92bCAgICVlYXgsMTIoJXJkaSkKKwltb3ZkICAgJXhtbTEyLCVyZHgKKwltb3ZkICAgJXhtbTcsJXJjeAorCW1vdmQgICAleG1tMTAsJXI5CisJbW92ZCAgICV4bW00LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTEyLCV4bW0xMgorCXBzaHVmZCAkMHgzOSwleG1tNywleG1tNworCXBzaHVmZCAkMHgzOSwleG1tMTAsJXhtbTEwCisJcHNodWZkICQweDM5LCV4bW00LCV4bW00CisJeG9ybCA2NCglcnNpKSwlZWR4CisJeG9ybCA2OCglcnNpKSwlZWN4CisJeG9ybCA3MiglcnNpKSwlcjlkCisJeG9ybCA3NiglcnNpKSwlZWF4CisJbW92bCAgICVlZHgsNjQoJXJkaSkKKwltb3ZsICAgJWVjeCw2OCglcmRpKQorCW1vdmwgICAlcjlkLDcyKCVyZGkpCisJbW92bCAgICVlYXgsNzYoJXJkaSkKKwltb3ZkICAgJXhtbTEyLCVyZHgKKwltb3ZkICAgJXhtbTcsJXJjeAorCW1vdmQgICAleG1tMTAsJXI5CisJbW92ZCAgICV4bW00LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTEyLCV4bW0xMgorCXBzaHVmZCAkMHgzOSwleG1tNywleG1tNworCXBzaHVmZCAkMHgzOSwleG1tMTAsJXhtbTEwCisJcHNodWZkICQweDM5LCV4bW00LCV4bW00CisJeG9ybCAxMjgoJXJzaSksJWVkeAorCXhvcmwgMTMyKCVyc2kpLCVlY3gKKwl4b3JsIDEzNiglcnNpKSwlcjlkCisJeG9ybCAxNDAoJXJzaSksJWVheAorCW1vdmwgICAlZWR4LDEyOCglcmRpKQorCW1vdmwgICAlZWN4LDEzMiglcmRpKQorCW1vdmwgICAlcjlkLDEzNiglcmRpKQorCW1vdmwgICAlZWF4LDE0MCglcmRpKQorCW1vdmQgICAleG1tMTIsJXJkeAorCW1vdmQgICAleG1tNywlcmN4CisJbW92ZCAgICV4bW0xMCwlcjkKKwltb3ZkICAgJXhtbTQsJXJheAorCXhvcmwgMTkyKCVyc2kpLCVlZHgKKwl4b3JsIDE5NiglcnNpKSwlZWN4CisJeG9ybCAyMDAoJXJzaSksJXI5ZAorCXhvcmwgMjA0KCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwxOTIoJXJkaSkKKwltb3ZsICAgJWVjeCwxOTYoJXJkaSkKKwltb3ZsICAgJXI5ZCwyMDAoJXJkaSkKKwltb3ZsICAgJWVheCwyMDQoJXJkaSkKKwlwYWRkZCAxNzYoJXJzcCksJXhtbTE0CisJcGFkZGQgMCglcnNwKSwleG1tMAorCXBhZGRkIDY0KCVyc3ApLCV4bW01CisJcGFkZGQgMTI4KCVyc3ApLCV4bW04CisJbW92ZCAgICV4bW0xNCwlcmR4CisJbW92ZCAgICV4bW0wLCVyY3gKKwltb3ZkICAgJXhtbTUsJXI5CisJbW92ZCAgICV4bW04LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE0LCV4bW0xNAorCXBzaHVmZCAkMHgzOSwleG1tMCwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tNSwleG1tNQorCXBzaHVmZCAkMHgzOSwleG1tOCwleG1tOAorCXhvcmwgMTYoJXJzaSksJWVkeAorCXhvcmwgMjAoJXJzaSksJWVjeAorCXhvcmwgMjQoJXJzaSksJXI5ZAorCXhvcmwgMjgoJXJzaSksJWVheAorCW1vdmwgICAlZWR4LDE2KCVyZGkpCisJbW92bCAgICVlY3gsMjAoJXJkaSkKKwltb3ZsICAgJXI5ZCwyNCglcmRpKQorCW1vdmwgICAlZWF4LDI4KCVyZGkpCisJbW92ZCAgICV4bW0xNCwlcmR4CisJbW92ZCAgICV4bW0wLCVyY3gKKwltb3ZkICAgJXhtbTUsJXI5CisJbW92ZCAgICV4bW04LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE0LCV4bW0xNAorCXBzaHVmZCAkMHgzOSwleG1tMCwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tNSwleG1tNQorCXBzaHVmZCAkMHgzOSwleG1tOCwleG1tOAorCXhvcmwgODAoJXJzaSksJWVkeAorCXhvcmwgODQoJXJzaSksJWVjeAorCXhvcmwgODgoJXJzaSksJXI5ZAorCXhvcmwgOTIoJXJzaSksJWVheAorCW1vdmwgICAlZWR4LDgwKCVyZGkpCisJbW92bCAgICVlY3gsODQoJXJkaSkKKwltb3ZsICAgJXI5ZCw4OCglcmRpKQorCW1vdmwgICAlZWF4LDkyKCVyZGkpCisJbW92ZCAgICV4bW0xNCwlcmR4CisJbW92ZCAgICV4bW0wLCVyY3gKKwltb3ZkICAgJXhtbTUsJXI5CisJbW92ZCAgICV4bW04LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE0LCV4bW0xNAorCXBzaHVmZCAkMHgzOSwleG1tMCwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tNSwleG1tNQorCXBzaHVmZCAkMHgzOSwleG1tOCwleG1tOAorCXhvcmwgMTQ0KCVyc2kpLCVlZHgKKwl4b3JsIDE0OCglcnNpKSwlZWN4CisJeG9ybCAxNTIoJXJzaSksJXI5ZAorCXhvcmwgMTU2KCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwxNDQoJXJkaSkKKwltb3ZsICAgJWVjeCwxNDgoJXJkaSkKKwltb3ZsICAgJXI5ZCwxNTIoJXJkaSkKKwltb3ZsICAgJWVheCwxNTYoJXJkaSkKKwltb3ZkICAgJXhtbTE0LCVyZHgKKwltb3ZkICAgJXhtbTAsJXJjeAorCW1vdmQgICAleG1tNSwlcjkKKwltb3ZkICAgJXhtbTgsJXJheAorCXhvcmwgMjA4KCVyc2kpLCVlZHgKKwl4b3JsIDIxMiglcnNpKSwlZWN4CisJeG9ybCAyMTYoJXJzaSksJXI5ZAorCXhvcmwgMjIwKCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwyMDgoJXJkaSkKKwltb3ZsICAgJWVjeCwyMTIoJXJkaSkKKwltb3ZsICAgJXI5ZCwyMTYoJXJkaSkKKwltb3ZsICAgJWVheCwyMjAoJXJkaSkKKwlwYWRkZCAyMjQoJXJzcCksJXhtbTE1CisJcGFkZGQgMjQwKCVyc3ApLCV4bW0xMQorCXBhZGRkIDE2KCVyc3ApLCV4bW0xCisJcGFkZGQgODAoJXJzcCksJXhtbTYKKwltb3ZkICAgJXhtbTE1LCVyZHgKKwltb3ZkICAgJXhtbTExLCVyY3gKKwltb3ZkICAgJXhtbTEsJXI5CisJbW92ZCAgICV4bW02LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE1LCV4bW0xNQorCXBzaHVmZCAkMHgzOSwleG1tMTEsJXhtbTExCisJcHNodWZkICQweDM5LCV4bW0xLCV4bW0xCisJcHNodWZkICQweDM5LCV4bW02LCV4bW02CisJeG9ybCAzMiglcnNpKSwlZWR4CisJeG9ybCAzNiglcnNpKSwlZWN4CisJeG9ybCA0MCglcnNpKSwlcjlkCisJeG9ybCA0NCglcnNpKSwlZWF4CisJbW92bCAgICVlZHgsMzIoJXJkaSkKKwltb3ZsICAgJWVjeCwzNiglcmRpKQorCW1vdmwgICAlcjlkLDQwKCVyZGkpCisJbW92bCAgICVlYXgsNDQoJXJkaSkKKwltb3ZkICAgJXhtbTE1LCVyZHgKKwltb3ZkICAgJXhtbTExLCVyY3gKKwltb3ZkICAgJXhtbTEsJXI5CisJbW92ZCAgICV4bW02LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE1LCV4bW0xNQorCXBzaHVmZCAkMHgzOSwleG1tMTEsJXhtbTExCisJcHNodWZkICQweDM5LCV4bW0xLCV4bW0xCisJcHNodWZkICQweDM5LCV4bW02LCV4bW02CisJeG9ybCA5NiglcnNpKSwlZWR4CisJeG9ybCAxMDAoJXJzaSksJWVjeAorCXhvcmwgMTA0KCVyc2kpLCVyOWQKKwl4b3JsIDEwOCglcnNpKSwlZWF4CisJbW92bCAgICVlZHgsOTYoJXJkaSkKKwltb3ZsICAgJWVjeCwxMDAoJXJkaSkKKwltb3ZsICAgJXI5ZCwxMDQoJXJkaSkKKwltb3ZsICAgJWVheCwxMDgoJXJkaSkKKwltb3ZkICAgJXhtbTE1LCVyZHgKKwltb3ZkICAgJXhtbTExLCVyY3gKKwltb3ZkICAgJXhtbTEsJXI5CisJbW92ZCAgICV4bW02LCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTE1LCV4bW0xNQorCXBzaHVmZCAkMHgzOSwleG1tMTEsJXhtbTExCisJcHNodWZkICQweDM5LCV4bW0xLCV4bW0xCisJcHNodWZkICQweDM5LCV4bW02LCV4bW02CisJeG9ybCAxNjAoJXJzaSksJWVkeAorCXhvcmwgMTY0KCVyc2kpLCVlY3gKKwl4b3JsIDE2OCglcnNpKSwlcjlkCisJeG9ybCAxNzIoJXJzaSksJWVheAorCW1vdmwgICAlZWR4LDE2MCglcmRpKQorCW1vdmwgICAlZWN4LDE2NCglcmRpKQorCW1vdmwgICAlcjlkLDE2OCglcmRpKQorCW1vdmwgICAlZWF4LDE3MiglcmRpKQorCW1vdmQgICAleG1tMTUsJXJkeAorCW1vdmQgICAleG1tMTEsJXJjeAorCW1vdmQgICAleG1tMSwlcjkKKwltb3ZkICAgJXhtbTYsJXJheAorCXhvcmwgMjI0KCVyc2kpLCVlZHgKKwl4b3JsIDIyOCglcnNpKSwlZWN4CisJeG9ybCAyMzIoJXJzaSksJXI5ZAorCXhvcmwgMjM2KCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwyMjQoJXJkaSkKKwltb3ZsICAgJWVjeCwyMjgoJXJkaSkKKwltb3ZsICAgJXI5ZCwyMzIoJXJkaSkKKwltb3ZsICAgJWVheCwyMzYoJXJkaSkKKwlwYWRkZCA5NiglcnNwKSwleG1tMTMKKwlwYWRkZCAxNDQoJXJzcCksJXhtbTkKKwlwYWRkZCAxOTIoJXJzcCksJXhtbTMKKwlwYWRkZCAzMiglcnNwKSwleG1tMgorCW1vdmQgICAleG1tMTMsJXJkeAorCW1vdmQgICAleG1tOSwlcmN4CisJbW92ZCAgICV4bW0zLCVyOQorCW1vdmQgICAleG1tMiwlcmF4CisJcHNodWZkICQweDM5LCV4bW0xMywleG1tMTMKKwlwc2h1ZmQgJDB4MzksJXhtbTksJXhtbTkKKwlwc2h1ZmQgJDB4MzksJXhtbTMsJXhtbTMKKwlwc2h1ZmQgJDB4MzksJXhtbTIsJXhtbTIKKwl4b3JsIDQ4KCVyc2kpLCVlZHgKKwl4b3JsIDUyKCVyc2kpLCVlY3gKKwl4b3JsIDU2KCVyc2kpLCVyOWQKKwl4b3JsIDYwKCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCw0OCglcmRpKQorCW1vdmwgICAlZWN4LDUyKCVyZGkpCisJbW92bCAgICVyOWQsNTYoJXJkaSkKKwltb3ZsICAgJWVheCw2MCglcmRpKQorCW1vdmQgICAleG1tMTMsJXJkeAorCW1vdmQgICAleG1tOSwlcmN4CisJbW92ZCAgICV4bW0zLCVyOQorCW1vdmQgICAleG1tMiwlcmF4CisJcHNodWZkICQweDM5LCV4bW0xMywleG1tMTMKKwlwc2h1ZmQgJDB4MzksJXhtbTksJXhtbTkKKwlwc2h1ZmQgJDB4MzksJXhtbTMsJXhtbTMKKwlwc2h1ZmQgJDB4MzksJXhtbTIsJXhtbTIKKwl4b3JsIDExMiglcnNpKSwlZWR4CisJeG9ybCAxMTYoJXJzaSksJWVjeAorCXhvcmwgMTIwKCVyc2kpLCVyOWQKKwl4b3JsIDEyNCglcnNpKSwlZWF4CisJbW92bCAgICVlZHgsMTEyKCVyZGkpCisJbW92bCAgICVlY3gsMTE2KCVyZGkpCisJbW92bCAgICVyOWQsMTIwKCVyZGkpCisJbW92bCAgICVlYXgsMTI0KCVyZGkpCisJbW92ZCAgICV4bW0xMywlcmR4CisJbW92ZCAgICV4bW05LCVyY3gKKwltb3ZkICAgJXhtbTMsJXI5CisJbW92ZCAgICV4bW0yLCVyYXgKKwlwc2h1ZmQgJDB4MzksJXhtbTEzLCV4bW0xMworCXBzaHVmZCAkMHgzOSwleG1tOSwleG1tOQorCXBzaHVmZCAkMHgzOSwleG1tMywleG1tMworCXBzaHVmZCAkMHgzOSwleG1tMiwleG1tMgorCXhvcmwgMTc2KCVyc2kpLCVlZHgKKwl4b3JsIDE4MCglcnNpKSwlZWN4CisJeG9ybCAxODQoJXJzaSksJXI5ZAorCXhvcmwgMTg4KCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwxNzYoJXJkaSkKKwltb3ZsICAgJWVjeCwxODAoJXJkaSkKKwltb3ZsICAgJXI5ZCwxODQoJXJkaSkKKwltb3ZsICAgJWVheCwxODgoJXJkaSkKKwltb3ZkICAgJXhtbTEzLCVyZHgKKwltb3ZkICAgJXhtbTksJXJjeAorCW1vdmQgICAleG1tMywlcjkKKwltb3ZkICAgJXhtbTIsJXJheAorCXhvcmwgMjQwKCVyc2kpLCVlZHgKKwl4b3JsIDI0NCglcnNpKSwlZWN4CisJeG9ybCAyNDgoJXJzaSksJXI5ZAorCXhvcmwgMjUyKCVyc2kpLCVlYXgKKwltb3ZsICAgJWVkeCwyNDAoJXJkaSkKKwltb3ZsICAgJWVjeCwyNDQoJXJkaSkKKwltb3ZsICAgJXI5ZCwyNDgoJXJkaSkKKwltb3ZsICAgJWVheCwyNTIoJXJkaSkKKwltb3ZxIDI4OCglcnNwKSwlcmR4CisJc3ViICAkMjU2LCVyZHgKKwlhZGQgICQyNTYsJXJzaQorCWFkZCAgJDI1NiwlcmRpCisJY21wICAkMjU2LCVyZHgKKwlqYWUgLkxfYnl0ZXNhdGxlYXN0MjU2CisJY21wICAkMCwlcmR4CisJamJlIC5MX2RvbmUKKy5MX2J5dGVzX2FyZV82NF8xMjhfb3JfMTkyOgorCW1vdnEgJXJkeCwyODgoJXJzcCkKKwltb3ZkcWEgMCglcjgpLCV4bW0wCisJbW92ZHFhIDE2KCVyOCksJXhtbTEKKwltb3ZkcWEgMzIoJXI4KSwleG1tMgorCW1vdmRxYSA0OCglcjgpLCV4bW0zCisJbW92ZHFhICV4bW0xLCV4bW00CisJbW92ICAlcmJ4LCVyZHgKKy5MX21haW5sb29wMjoKKwlwYWRkZCAleG1tMCwleG1tNAorCW1vdmRxYSAleG1tMCwleG1tNQorCW1vdmRxYSAleG1tNCwleG1tNgorCXBzbGxkICQ3LCV4bW00CisJcHNybGQgJDI1LCV4bW02CisJcHhvciAgJXhtbTQsJXhtbTMKKwlweG9yICAleG1tNiwleG1tMworCXBhZGRkICV4bW0zLCV4bW01CisJbW92ZHFhICV4bW0zLCV4bW00CisJbW92ZHFhICV4bW01LCV4bW02CisJcHNsbGQgJDksJXhtbTUKKwlwc3JsZCAkMjMsJXhtbTYKKwlweG9yICAleG1tNSwleG1tMgorCXBzaHVmZCAkMHg5MywleG1tMywleG1tMworCXB4b3IgICV4bW02LCV4bW0yCisJcGFkZGQgJXhtbTIsJXhtbTQKKwltb3ZkcWEgJXhtbTIsJXhtbTUKKwltb3ZkcWEgJXhtbTQsJXhtbTYKKwlwc2xsZCAkMTMsJXhtbTQKKwlwc3JsZCAkMTksJXhtbTYKKwlweG9yICAleG1tNCwleG1tMQorCXBzaHVmZCAkMHg0ZSwleG1tMiwleG1tMgorCXB4b3IgICV4bW02LCV4bW0xCisJcGFkZGQgJXhtbTEsJXhtbTUKKwltb3ZkcWEgJXhtbTMsJXhtbTQKKwltb3ZkcWEgJXhtbTUsJXhtbTYKKwlwc2xsZCAkMTgsJXhtbTUKKwlwc3JsZCAkMTQsJXhtbTYKKwlweG9yICAleG1tNSwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tMSwleG1tMQorCXB4b3IgICV4bW02LCV4bW0wCisJcGFkZGQgJXhtbTAsJXhtbTQKKwltb3ZkcWEgJXhtbTAsJXhtbTUKKwltb3ZkcWEgJXhtbTQsJXhtbTYKKwlwc2xsZCAkNywleG1tNAorCXBzcmxkICQyNSwleG1tNgorCXB4b3IgICV4bW00LCV4bW0xCisJcHhvciAgJXhtbTYsJXhtbTEKKwlwYWRkZCAleG1tMSwleG1tNQorCW1vdmRxYSAleG1tMSwleG1tNAorCW1vdmRxYSAleG1tNSwleG1tNgorCXBzbGxkICQ5LCV4bW01CisJcHNybGQgJDIzLCV4bW02CisJcHhvciAgJXhtbTUsJXhtbTIKKwlwc2h1ZmQgJDB4OTMsJXhtbTEsJXhtbTEKKwlweG9yICAleG1tNiwleG1tMgorCXBhZGRkICV4bW0yLCV4bW00CisJbW92ZHFhICV4bW0yLCV4bW01CisJbW92ZHFhICV4bW00LCV4bW02CisJcHNsbGQgJDEzLCV4bW00CisJcHNybGQgJDE5LCV4bW02CisJcHhvciAgJXhtbTQsJXhtbTMKKwlwc2h1ZmQgJDB4NGUsJXhtbTIsJXhtbTIKKwlweG9yICAleG1tNiwleG1tMworCXBhZGRkICV4bW0zLCV4bW01CisJbW92ZHFhICV4bW0xLCV4bW00CisJbW92ZHFhICV4bW01LCV4bW02CisJcHNsbGQgJDE4LCV4bW01CisJcHNybGQgJDE0LCV4bW02CisJcHhvciAgJXhtbTUsJXhtbTAKKwlwc2h1ZmQgJDB4MzksJXhtbTMsJXhtbTMKKwlweG9yICAleG1tNiwleG1tMAorCXBhZGRkICV4bW0wLCV4bW00CisJbW92ZHFhICV4bW0wLCV4bW01CisJbW92ZHFhICV4bW00LCV4bW02CisJcHNsbGQgJDcsJXhtbTQKKwlwc3JsZCAkMjUsJXhtbTYKKwlweG9yICAleG1tNCwleG1tMworCXB4b3IgICV4bW02LCV4bW0zCisJcGFkZGQgJXhtbTMsJXhtbTUKKwltb3ZkcWEgJXhtbTMsJXhtbTQKKwltb3ZkcWEgJXhtbTUsJXhtbTYKKwlwc2xsZCAkOSwleG1tNQorCXBzcmxkICQyMywleG1tNgorCXB4b3IgICV4bW01LCV4bW0yCisJcHNodWZkICQweDkzLCV4bW0zLCV4bW0zCisJcHhvciAgJXhtbTYsJXhtbTIKKwlwYWRkZCAleG1tMiwleG1tNAorCW1vdmRxYSAleG1tMiwleG1tNQorCW1vdmRxYSAleG1tNCwleG1tNgorCXBzbGxkICQxMywleG1tNAorCXBzcmxkICQxOSwleG1tNgorCXB4b3IgICV4bW00LCV4bW0xCisJcHNodWZkICQweDRlLCV4bW0yLCV4bW0yCisJcHhvciAgJXhtbTYsJXhtbTEKKwlwYWRkZCAleG1tMSwleG1tNQorCW1vdmRxYSAleG1tMywleG1tNAorCW1vdmRxYSAleG1tNSwleG1tNgorCXBzbGxkICQxOCwleG1tNQorCXBzcmxkICQxNCwleG1tNgorCXB4b3IgICV4bW01LCV4bW0wCisJcHNodWZkICQweDM5LCV4bW0xLCV4bW0xCisJcHhvciAgJXhtbTYsJXhtbTAKKwlwYWRkZCAleG1tMCwleG1tNAorCW1vdmRxYSAleG1tMCwleG1tNQorCW1vdmRxYSAleG1tNCwleG1tNgorCXBzbGxkICQ3LCV4bW00CisJcHNybGQgJDI1LCV4bW02CisJcHhvciAgJXhtbTQsJXhtbTEKKwlweG9yICAleG1tNiwleG1tMQorCXBhZGRkICV4bW0xLCV4bW01CisJbW92ZHFhICV4bW0xLCV4bW00CisJbW92ZHFhICV4bW01LCV4bW02CisJcHNsbGQgJDksJXhtbTUKKwlwc3JsZCAkMjMsJXhtbTYKKwlweG9yICAleG1tNSwleG1tMgorCXBzaHVmZCAkMHg5MywleG1tMSwleG1tMQorCXB4b3IgICV4bW02LCV4bW0yCisJcGFkZGQgJXhtbTIsJXhtbTQKKwltb3ZkcWEgJXhtbTIsJXhtbTUKKwltb3ZkcWEgJXhtbTQsJXhtbTYKKwlwc2xsZCAkMTMsJXhtbTQKKwlwc3JsZCAkMTksJXhtbTYKKwlweG9yICAleG1tNCwleG1tMworCXBzaHVmZCAkMHg0ZSwleG1tMiwleG1tMgorCXB4b3IgICV4bW02LCV4bW0zCisJc3ViICAkNCwlcmR4CisJcGFkZGQgJXhtbTMsJXhtbTUKKwltb3ZkcWEgJXhtbTEsJXhtbTQKKwltb3ZkcWEgJXhtbTUsJXhtbTYKKwlwc2xsZCAkMTgsJXhtbTUKKwlweG9yICAgJXhtbTcsJXhtbTcKKwlwc3JsZCAkMTQsJXhtbTYKKwlweG9yICAleG1tNSwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tMywleG1tMworCXB4b3IgICV4bW02LCV4bW0wCisJamEgLkxfbWFpbmxvb3AyCisJcGFkZGQgMCglcjgpLCV4bW0wCisJcGFkZGQgMTYoJXI4KSwleG1tMQorCXBhZGRkIDMyKCVyOCksJXhtbTIKKwlwYWRkZCA0OCglcjgpLCV4bW0zCisJbW92ZCAgICV4bW0wLCVyZHgKKwltb3ZkICAgJXhtbTEsJXJjeAorCW1vdmQgICAleG1tMiwlcmF4CisJbW92ZCAgICV4bW0zLCVyMTAKKwlwc2h1ZmQgJDB4MzksJXhtbTAsJXhtbTAKKwlwc2h1ZmQgJDB4MzksJXhtbTEsJXhtbTEKKwlwc2h1ZmQgJDB4MzksJXhtbTIsJXhtbTIKKwlwc2h1ZmQgJDB4MzksJXhtbTMsJXhtbTMKKwl4b3JsIDAoJXJzaSksJWVkeAorCXhvcmwgNDgoJXJzaSksJWVjeAorCXhvcmwgMzIoJXJzaSksJWVheAorCXhvcmwgMTYoJXJzaSksJXIxMGQKKwltb3ZsICAgJWVkeCwwKCVyZGkpCisJbW92bCAgICVlY3gsNDgoJXJkaSkKKwltb3ZsICAgJWVheCwzMiglcmRpKQorCW1vdmwgICAlcjEwZCwxNiglcmRpKQorCW1vdmQgICAleG1tMCwlcmR4CisJbW92ZCAgICV4bW0xLCVyY3gKKwltb3ZkICAgJXhtbTIsJXJheAorCW1vdmQgICAleG1tMywlcjEwCisJcHNodWZkICQweDM5LCV4bW0wLCV4bW0wCisJcHNodWZkICQweDM5LCV4bW0xLCV4bW0xCisJcHNodWZkICQweDM5LCV4bW0yLCV4bW0yCisJcHNodWZkICQweDM5LCV4bW0zLCV4bW0zCisJeG9ybCAyMCglcnNpKSwlZWR4CisJeG9ybCA0KCVyc2kpLCVlY3gKKwl4b3JsIDUyKCVyc2kpLCVlYXgKKwl4b3JsIDM2KCVyc2kpLCVyMTBkCisJbW92bCAgICVlZHgsMjAoJXJkaSkKKwltb3ZsICAgJWVjeCw0KCVyZGkpCisJbW92bCAgICVlYXgsNTIoJXJkaSkKKwltb3ZsICAgJXIxMGQsMzYoJXJkaSkKKwltb3ZkICAgJXhtbTAsJXJkeAorCW1vdmQgICAleG1tMSwlcmN4CisJbW92ZCAgICV4bW0yLCVyYXgKKwltb3ZkICAgJXhtbTMsJXIxMAorCXBzaHVmZCAkMHgzOSwleG1tMCwleG1tMAorCXBzaHVmZCAkMHgzOSwleG1tMSwleG1tMQorCXBzaHVmZCAkMHgzOSwleG1tMiwleG1tMgorCXBzaHVmZCAkMHgzOSwleG1tMywleG1tMworCXhvcmwgNDAoJXJzaSksJWVkeAorCXhvcmwgMjQoJXJzaSksJWVjeAorCXhvcmwgOCglcnNpKSwlZWF4CisJeG9ybCA1NiglcnNpKSwlcjEwZAorCW1vdmwgICAlZWR4LDQwKCVyZGkpCisJbW92bCAgICVlY3gsMjQoJXJkaSkKKwltb3ZsICAgJWVheCw4KCVyZGkpCisJbW92bCAgICVyMTBkLDU2KCVyZGkpCisJbW92ZCAgICV4bW0wLCVyZHgKKwltb3ZkICAgJXhtbTEsJXJjeAorCW1vdmQgICAleG1tMiwlcmF4CisJbW92ZCAgICV4bW0zLCVyMTAKKwl4b3JsIDYwKCVyc2kpLCVlZHgKKwl4b3JsIDQ0KCVyc2kpLCVlY3gKKwl4b3JsIDI4KCVyc2kpLCVlYXgKKwl4b3JsIDEyKCVyc2kpLCVyMTBkCisJbW92bCAgICVlZHgsNjAoJXJkaSkKKwltb3ZsICAgJWVjeCw0NCglcmRpKQorCW1vdmwgICAlZWF4LDI4KCVyZGkpCisJbW92bCAgICVyMTBkLDEyKCVyZGkpCisJbW92cSAyODgoJXJzcCksJXJkeAorCW1vdmwgICAzMiglcjgpLCVlY3gKKwltb3ZsICAgNTIoJXI4KSwlZWF4CisJYWRkICAkMSwlZWN4CisJYWRjICAkMCwlZWF4CisJbW92bCAgICVlY3gsMzIoJXI4KQorCW1vdmwgICAlZWF4LDUyKCVyOCkKKwljbXAgICQ2NCwlcmR4CisJamEgLkxfYnl0ZXNfYXJlXzEyOF9vcl8xOTIKKy5MX2RvbmU6CisJYWRkICVyMTEsJXJzcAorCW1vdiAlcjExLCVyYXgKKwlwb3AgJXJieAorCXJldAorLkxfYnl0ZXNfYXJlXzEyOF9vcl8xOTI6CisJc3ViICAkNjQsJXJkeAorCWFkZCAgJDY0LCVyZGkKKwlhZGQgICQ2NCwlcnNpCisJam1wIC5MX2J5dGVzX2FyZV82NF8xMjhfb3JfMTkyCisuc2l6ZSBfZ2NyeV9zYWxzYTIwX2FtZDY0X2VuY3J5cHRfYmxvY2tzLC4tX2djcnlfc2Fsc2EyMF9hbWQ2NF9lbmNyeXB0X2Jsb2NrczsKKworI2VuZGlmIC8qZGVmaW5lZChVU0VfU0FMU0EyMCkqLworI2VuZGlmIC8qX194ODZfNjQqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NhbHNhMjAtYXJtdjctbmVvbi5TIGIvY2lwaGVyL3NhbHNhMjAtYXJtdjctbmVvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWQ5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvc2Fsc2EyMC1hcm12Ny1uZW9uLlMKQEAgLTAsMCArMSw4OTkgQEAKKy8qIHNhbHNhLWFybXY3LW5lb24uUyAgLSAgQVJNIE5FT04gaW1wbGVtZW50YXRpb24gb2YgU2Fsc2EyMCBjaXBoZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoSEFWRV9BUk1fQVJDSF9WNikgJiYgZGVmaW5lZChfX0FSTUVMX18pICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX05FT04pICYmIGRlZmluZWQoVVNFX1NBTFNBMjApCisKKy8qCisgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIGltcGxlbWVudGF0aW9uIGZyb20gU1VQRVJDT1AgYmVuY2htYXJraW5nIGZyYW1ld29yaworICogYnkgUGV0ZXIgU2Nod2FiZSBhbmQgRC4gSi4gQmVybnN0ZWluLiBQYXBlciBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gYXQ6CisgKiAgIGh0dHA6Ly9jcnlwdG9qZWRpLm9yZy9wYXBlcnMvI25lb25jcnlwdG8KKyAqLworCisuc3ludGF4IHVuaWZpZWQKKy5hcm0KKy5mcHUgbmVvbgorLnRleHQKKworLmFsaWduIDIKKy5nbG9ibCBfZ2NyeV9hcm1fbmVvbl9zYWxzYTIwX2VuY3J5cHQKKy50eXBlICBfZ2NyeV9hcm1fbmVvbl9zYWxzYTIwX2VuY3J5cHQsJWZ1bmN0aW9uOworX2djcnlfYXJtX25lb25fc2Fsc2EyMF9lbmNyeXB0OgorCS8qIE1vZGlmaWNhdGlvbnM6CisJICogIC0gYXJndW1lbnRzIGNoYW5nZWQgdG8gKHZvaWQgKmMsIGNvbnN0IHZvaWQgKm0sIHVuc2lnbmVkIGludCBuYmxrcywKKyAgICAgICAgICogICAgdm9pZCAqY3R4LCB1bnNpZ25lZCBpbnQgcm91bmRzKSBmcm9tICh2b2lkICpjLCBjb25zdCB2b2lkICptLAorICAgICAgICAgKiAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWxlbiwgY29uc3Qgdm9pZCAqbiwgY29uc3Qgdm9pZCAqaykKKwkgKiAgLSBub25jZSBhbmQga2V5IHJlYWQgZnJvbSAnY3R4JyBhcyB3ZWxsIGFzIHNpZ21hIGFuZCBjb3VudGVyLgorCSAqICAtIHJlYWQgaW4gY291bnRlciBmcm9tICdjdHgnIGF0IHRoZSBzdGFydC4KKyAgICAgICAgICogIC0gdXBkYXRlIGNvdW50ZXIgaW4gJ2N0eCcgYXQgdGhlIGVuZC4KKwkgKiAgLSBsZW5ndGggaXMgaW5wdXQgYXMgbnVtYmVyIG9mIGJsb2Nrcywgc28gZG9uJ3QgaGFuZGxlIHRhaWwgYnl0ZXMKKwkgKiAgICAodGhpcyBpcyBkb25lIGluIHNhbHNhMjAuYykuCisJICovCisJbHNsIHIyLHIyLCM2CisJdnB1c2gge3E0LHE1LHE2LHE3fQorCW1vdiByMTIsc3AKKwlzdWIgc3Asc3AsIzM1MgorCWFuZCBzcCxzcCwjMHhmZmZmZmZlMAorCXN0cmQgcjQsW3NwLCMwXQorCXN0cmQgcjYsW3NwLCM4XQorCXN0cmQgcjgsW3NwLCMxNl0KKwlzdHJkIHIxMCxbc3AsIzI0XQorCXN0ciByMTQsW3NwLCMyMjRdCisJc3RyIHIxMixbc3AsIzIyOF0KKwlzdHIgcjAsW3NwLCMyMzJdCisJc3RyIHIxLFtzcCwjMjM2XQorCXN0ciByMixbc3AsIzI0MF0KKwlsZHIgcjQsW3IxMiwjNjRdCisJc3RyIHI0LFtzcCwjMjQ0XQorCW1vdiByMixyMworCWFkZCByMyxyMiwjNDgKKwl2bGQxLjgge3EzfSxbcjJdCisJYWRkIHIwLHIyLCMzMgorCWFkZCByMTQscjIsIzQwCisJdm1vdi5pNjQgcTMsIzB4ZmYKKwlzdHIgcjE0LFtzcCwjMTYwXQorCWxkcmQgcjgsW3IyLCM0XQorCXZsZDEuOCB7ZDB9LFtyMF0KKwlsZHJkIHI0LFtyMiwjMjBdCisJdmxkMS44IHtkOC1kOX0sW3IyXSEKKwlsZHJkIHI2LFtyMCwjMF0KKwl2bW92IGQ0LGQ5CisJbGRyIHIwLFtyMTRdCisJdnJldjY0LmkzMiBkMCxkMAorCWxkciByMSxbcjE0LCM0XQorCXZsZDEuOCB7ZDEwLWQxMX0sW3IyXQorCXN0cmQgcjYsW3NwLCMzMl0KKwlzdWIgcjIscjIsIzE2CisJc3RyZCByMCxbc3AsIzQwXQorCXZtb3YgZDUsZDExCisJc3RyZCByOCxbc3AsIzQ4XQorCXZleHQuMzIgZDEsZDAsZDEwLCMxCisJc3RyZCByNCxbc3AsIzU2XQorCWxkciByMSxbcjIsIzBdCisJdnNoci51MzIgcTMscTMsIzcKKwlsZHIgcjQsW3IyLCMxMl0KKwl2ZXh0LjMyIGQzLGQxMSxkOSwjMQorCWxkciByMTEsW3IyLCMxNl0KKwl2ZXh0LjMyIGQyLGQ4LGQwLCMxCisJbGRyIHI4LFtyMiwjMjhdCisJdmV4dC4zMiBkMCxkMTAsZDgsIzEKKwlsZHIgcjAsW3IzLCMwXQorCWFkZCByMixyMiwjNDQKKwl2bW92IHE0LHEzCisJdmxkMS44IHtkNi1kN30sW3IxNF0KKwl2YWRkLmk2NCBxMyxxMyxxNAorCWxkciByNSxbcjMsIzRdCisJYWRkIHIxMixzcCwjMjU2CisJdnN0MS44IHtkNC1kNX0sW3IxMiw6IDEyOF0KKwlsZHIgcjEwLFtyMywjOF0KKwlhZGQgcjE0LHNwLCMyNzIKKwl2c3QxLjgge2QyLWQzfSxbcjE0LDogMTI4XQorCWxkciByOSxbcjMsIzEyXQorCXZsZDEuOCB7ZDItZDN9LFtyM10KKwlzdHJkIHIwLFtzcCwjNjRdCisJbGRyIHIwLFtzcCwjMjQwXQorCXN0cmQgcjQsW3NwLCM3Ml0KKwlzdHJkIHIxMCxbc3AsIzgwXQorCXN0cmQgcjgsW3NwLCM4OF0KKwlub3AKKwljbXAgcjAsIzE5MgorCWJsbyAuTF9tbGVubG93YmVsb3cxOTIKKy5MX21sZW5hdGxlYXN0MTkyOgorCWxkcmQgcjIsW3NwLCM0OF0KKwl2ZXh0LjMyIGQ3LGQ2LGQ2LCMxCisJdm1vdiBxOCxxMQorCWxkcmQgcjYsW3NwLCMzMl0KKwl2bGQxLjgge2QxOC1kMTl9LFtyMTIsOiAxMjhdCisJdm1vdiBxMTAscTAKKwlzdHIgcjAsW3NwLCMyNDBdCisJdmV4dC4zMiBkNCxkNyxkMTksIzEKKwl2bW92IHExMSxxOAorCXZleHQuMzIgZDEwLGQxOCxkNywjMQorCXZhZGQuaTY0IHEzLHEzLHE0CisJbGRyZCByMCxbc3AsIzY0XQorCXZsZDEuOCB7ZDI0LWQyNX0sW3IxNCw6IDEyOF0KKwl2bW92IGQ1LGQyNAorCWFkZCByOCxzcCwjMjg4CisJbGRyZCByNCxbc3AsIzcyXQorCXZtb3YgZDExLGQyNQorCWFkZCByOSxzcCwjMzA0CisJbGRyZCByMTAsW3NwLCM4MF0KKwl2c3QxLjgge2Q0LWQ1fSxbcjgsOiAxMjhdCisJc3RyZCByMixbc3AsIzk2XQorCXZleHQuMzIgZDcsZDYsZDYsIzEKKwl2bW92IHExMyxxMTAKKwlzdHJkIHI2LFtzcCwjMTA0XQorCXZtb3YgZDEzLGQyNAorCXZzdDEuOCB7ZDEwLWQxMX0sW3I5LDogMTI4XQorCWFkZCByMixzcCwjMzIwCisJdmV4dC4zMiBkMTIsZDcsZDE5LCMxCisJdm1vdiBkMTUsZDI1CisJYWRkIHI2LHNwLCMzMzYKKwlsZHIgcjEyLFtzcCwjMjQ0XQorCXZleHQuMzIgZDE0LGQxOCxkNywjMQorCXZhZGQuaTY0IHEzLHEzLHE0CisJbGRyZCByOCxbc3AsIzg4XQorCXZzdDEuOCB7ZDEyLWQxM30sW3IyLDogMTI4XQorCWxkcmQgcjIsW3NwLCM1Nl0KKwl2c3QxLjgge2QxNC1kMTV9LFtyNiw6IDEyOF0KKwlsZHJkIHI2LFtzcCwjNDBdCisuTF9tYWlubG9vcDI6CisJc3RyIHIxMixbc3AsIzI0OF0KKwl2YWRkLmkzMiBxNCxxMTAscTgKKwl2YWRkLmkzMiBxOSxxMTMscTExCisJYWRkIHIxMixyMCxyMgorCWFkZCByMTQscjUscjEKKwl2c2hsLmkzMiBxMTIscTQsIzcKKwl2c2hsLmkzMiBxMTQscTksIzcKKwl2c2hyLnUzMiBxNCxxNCwjMjUKKwl2c2hyLnUzMiBxOSxxOSwjMjUKKwllb3IgcjQscjQscjEyLFJPUiAjMjUKKwllb3IgcjcscjcscjE0LFJPUiAjMjUKKwlhZGQgcjEyLHI0LHIwCisJYWRkIHIxNCxyNyxyNQorCXZlb3IgcTUscTUscTEyCisJdmVvciBxNyxxNyxxMTQKKwl2ZW9yIHE0LHE1LHE0CisJdmVvciBxNSxxNyxxOQorCWVvciByNixyNixyMTIsUk9SICMyMworCWVvciByMyxyMyxyMTQsUk9SICMyMworCWFkZCByMTIscjYscjQKKwlzdHIgcjcsW3NwLCMxMTZdCisJYWRkIHI3LHIzLHI3CisJbGRyIHIxNCxbc3AsIzEwOF0KKwl2YWRkLmkzMiBxNyxxOCxxNAorCXZhZGQuaTMyIHE5LHExMSxxNQorCXZzaGwuaTMyIHExMixxNywjOQorCXZzaGwuaTMyIHExNCxxOSwjOQorCXZzaHIudTMyIHE3LHE3LCMyMworCXZzaHIudTMyIHE5LHE5LCMyMworCXZlb3IgcTIscTIscTEyCisJdmVvciBxNixxNixxMTQKKwl2ZW9yIHEyLHEyLHE3CisJdmVvciBxNixxNixxOQorCWVvciByMixyMixyMTIsUk9SICMxOQorCXN0ciByMixbc3AsIzEyMF0KKwllb3IgcjEscjEscjcsUk9SICMxOQorCWxkciByNyxbc3AsIzk2XQorCWFkZCByMixyMixyNgorCXN0ciByNixbc3AsIzExMl0KKwlhZGQgcjYscjEscjMKKwlsZHIgcjEyLFtzcCwjMTA0XQorCXZhZGQuaTMyIHE3LHE0LHEyCisJdmV4dC4zMiBxNCxxNCxxNCwjMworCXZhZGQuaTMyIHE5LHE1LHE2CisJdnNobC5pMzIgcTEyLHE3LCMxMworCXZleHQuMzIgcTUscTUscTUsIzMKKwl2c2hsLmkzMiBxMTQscTksIzEzCisJZW9yIHIwLHIwLHIyLFJPUiAjMTQKKwllb3IgcjIscjUscjYsUk9SICMxNAorCXN0ciByMyxbc3AsIzEyNF0KKwlhZGQgcjMscjEwLHIxMgorCWxkciByNSxbc3AsIzEwMF0KKwlhZGQgcjYscjkscjExCisJdnNoci51MzIgcTcscTcsIzE5CisJdnNoci51MzIgcTkscTksIzE5CisJdmVvciBxMTAscTEwLHExMgorCXZlb3IgcTEyLHExMyxxMTQKKwllb3IgcjgscjgscjMsUk9SICMyNQorCWVvciByMyxyNSxyNixST1IgIzI1CisJYWRkIHI1LHI4LHIxMAorCWFkZCByNixyMyxyOQorCXZlb3IgcTcscTEwLHE3CisJdmVvciBxOSxxMTIscTkKKwllb3IgcjUscjcscjUsUk9SICMyMworCWVvciByNixyMTQscjYsUk9SICMyMworCWFkZCByNyxyNSxyOAorCWFkZCByMTQscjYscjMKKwl2YWRkLmkzMiBxMTAscTIscTcKKwl2c3dwIGQ0LGQ1CisJdmFkZC5pMzIgcTEyLHE2LHE5CisJdnNobC5pMzIgcTEzLHExMCwjMTgKKwl2c3dwIGQxMixkMTMKKwl2c2hsLmkzMiBxMTQscTEyLCMxOAorCWVvciByNyxyMTIscjcsUk9SICMxOQorCWVvciByMTEscjExLHIxNCxST1IgIzE5CisJYWRkIHIxMixyNyxyNQorCWFkZCByMTQscjExLHI2CisJdnNoci51MzIgcTEwLHExMCwjMTQKKwl2ZXh0LjMyIHE3LHE3LHE3LCMxCisJdnNoci51MzIgcTEyLHExMiwjMTQKKwl2ZW9yIHE4LHE4LHExMworCXZleHQuMzIgcTkscTkscTksIzEKKwl2ZW9yIHExMSxxMTEscTE0CisJZW9yIHIxMCxyMTAscjEyLFJPUiAjMTQKKwllb3IgcjkscjkscjE0LFJPUiAjMTQKKwlhZGQgcjEyLHIwLHIzCisJYWRkIHIxNCxyMixyNAorCXZlb3IgcTgscTgscTEwCisJdmVvciBxMTAscTExLHExMgorCWVvciByMSxyMSxyMTIsUk9SICMyNQorCWVvciByNyxyNyxyMTQsUk9SICMyNQorCWFkZCByMTIscjEscjAKKwlhZGQgcjE0LHI3LHIyCisJdmFkZC5pMzIgcTExLHE0LHE4CisJdmFkZC5pMzIgcTEyLHE1LHExMAorCXZzaGwuaTMyIHExMyxxMTEsIzcKKwl2c2hsLmkzMiBxMTQscTEyLCM3CisJZW9yIHI1LHI1LHIxMixST1IgIzIzCisJZW9yIHI2LHI2LHIxNCxST1IgIzIzCisJdnNoci51MzIgcTExLHExMSwjMjUKKwl2c2hyLnUzMiBxMTIscTEyLCMyNQorCWFkZCByMTIscjUscjEKKwlhZGQgcjE0LHI2LHI3CisJdmVvciBxNyxxNyxxMTMKKwl2ZW9yIHE5LHE5LHExNAorCXZlb3IgcTcscTcscTExCisJdmVvciBxOSxxOSxxMTIKKwl2YWRkLmkzMiBxMTEscTgscTcKKwl2YWRkLmkzMiBxMTIscTEwLHE5CisJdnNobC5pMzIgcTEzLHExMSwjOQorCXZzaGwuaTMyIHExNCxxMTIsIzkKKwllb3IgcjMscjMscjEyLFJPUiAjMTkKKwlzdHIgcjcsW3NwLCMxMDRdCisJZW9yIHI0LHI0LHIxNCxST1IgIzE5CisJbGRyIHI3LFtzcCwjMTEyXQorCWFkZCByMTIscjMscjUKKwlzdHIgcjYsW3NwLCMxMDhdCisJYWRkIHI2LHI0LHI2CisJbGRyIHIxNCxbc3AsIzExNl0KKwllb3IgcjAscjAscjEyLFJPUiAjMTQKKwlzdHIgcjUsW3NwLCM5Nl0KKwllb3IgcjUscjIscjYsUk9SICMxNAorCWxkciByMixbc3AsIzEyMF0KKwl2c2hyLnUzMiBxMTEscTExLCMyMworCXZzaHIudTMyIHExMixxMTIsIzIzCisJdmVvciBxMixxMixxMTMKKwl2ZW9yIHE2LHE2LHExNAorCXZlb3IgcTIscTIscTExCisJdmVvciBxNixxNixxMTIKKwlhZGQgcjYscjEwLHIxNAorCWFkZCByMTIscjkscjgKKwl2YWRkLmkzMiBxMTEscTcscTIKKwl2ZXh0LjMyIHE3LHE3LHE3LCMzCisJdmFkZC5pMzIgcTEyLHE5LHE2CisJdnNobC5pMzIgcTEzLHExMSwjMTMKKwl2ZXh0LjMyIHE5LHE5LHE5LCMzCisJdnNobC5pMzIgcTE0LHExMiwjMTMKKwl2c2hyLnUzMiBxMTEscTExLCMxOQorCXZzaHIudTMyIHExMixxMTIsIzE5CisJZW9yIHIxMSxyMTEscjYsUk9SICMyNQorCWVvciByMixyMixyMTIsUk9SICMyNQorCWFkZCByNixyMTEscjEwCisJc3RyIHIzLFtzcCwjMTAwXQorCWFkZCByMyxyMixyOQorCWxkciByMTIsW3NwLCMxMjRdCisJdmVvciBxNCxxNCxxMTMKKwl2ZW9yIHE1LHE1LHExNAorCXZlb3IgcTQscTQscTExCisJdmVvciBxNSxxNSxxMTIKKwllb3IgcjYscjcscjYsUk9SICMyMworCWVvciByMyxyMTIscjMsUk9SICMyMworCWFkZCByNyxyNixyMTEKKwlhZGQgcjEyLHIzLHIyCisJdmFkZC5pMzIgcTExLHEyLHE0CisJdnN3cCBkNCxkNQorCXZhZGQuaTMyIHExMixxNixxNQorCXZzaGwuaTMyIHExMyxxMTEsIzE4CisJdnN3cCBkMTIsZDEzCisJdnNobC5pMzIgcTE0LHExMiwjMTgKKwllb3IgcjcscjE0LHI3LFJPUiAjMTkKKwllb3IgcjgscjgscjEyLFJPUiAjMTkKKwlhZGQgcjEyLHI3LHI2CisJYWRkIHIxNCxyOCxyMworCXZzaHIudTMyIHExMSxxMTEsIzE0CisJdmV4dC4zMiBxNCxxNCxxNCwjMQorCXZzaHIudTMyIHExMixxMTIsIzE0CisJdmVvciBxOCxxOCxxMTMKKwl2ZXh0LjMyIHE1LHE1LHE1LCMxCisJdmVvciBxMTAscTEwLHExNAorCWVvciByMTAscjEwLHIxMixST1IgIzE0CisJdmVvciBxOCxxOCxxMTEKKwllb3IgcjkscjkscjE0LFJPUiAjMTQKKwl2ZW9yIHExMCxxMTAscTEyCisJdmFkZC5pMzIgcTExLHE3LHE4CisJdmFkZC5pMzIgcTEyLHE5LHExMAorCWFkZCByMTIscjAscjIKKwlhZGQgcjE0LHI1LHIxCisJdnNobC5pMzIgcTEzLHExMSwjNworCXZzaGwuaTMyIHExNCxxMTIsIzcKKwl2c2hyLnUzMiBxMTEscTExLCMyNQorCXZzaHIudTMyIHExMixxMTIsIzI1CisJZW9yIHI0LHI0LHIxMixST1IgIzI1CisJZW9yIHI3LHI3LHIxNCxST1IgIzI1CisJYWRkIHIxMixyNCxyMAorCWFkZCByMTQscjcscjUKKwl2ZW9yIHE0LHE0LHExMworCXZlb3IgcTUscTUscTE0CisJdmVvciBxNCxxNCxxMTEKKwl2ZW9yIHE1LHE1LHExMgorCWVvciByNixyNixyMTIsUk9SICMyMworCWVvciByMyxyMyxyMTQsUk9SICMyMworCWFkZCByMTIscjYscjQKKwlzdHIgcjcsW3NwLCMxMTZdCisJYWRkIHI3LHIzLHI3CisJbGRyIHIxNCxbc3AsIzEwOF0KKwl2YWRkLmkzMiBxMTEscTgscTQKKwl2YWRkLmkzMiBxMTIscTEwLHE1CisJdnNobC5pMzIgcTEzLHExMSwjOQorCXZzaGwuaTMyIHExNCxxMTIsIzkKKwl2c2hyLnUzMiBxMTEscTExLCMyMworCXZzaHIudTMyIHExMixxMTIsIzIzCisJdmVvciBxMixxMixxMTMKKwl2ZW9yIHE2LHE2LHExNAorCXZlb3IgcTIscTIscTExCisJdmVvciBxNixxNixxMTIKKwllb3IgcjIscjIscjEyLFJPUiAjMTkKKwlzdHIgcjIsW3NwLCMxMjBdCisJZW9yIHIxLHIxLHI3LFJPUiAjMTkKKwlsZHIgcjcsW3NwLCM5Nl0KKwlhZGQgcjIscjIscjYKKwlzdHIgcjYsW3NwLCMxMTJdCisJYWRkIHI2LHIxLHIzCisJbGRyIHIxMixbc3AsIzEwNF0KKwl2YWRkLmkzMiBxMTEscTQscTIKKwl2ZXh0LjMyIHE0LHE0LHE0LCMzCisJdmFkZC5pMzIgcTEyLHE1LHE2CisJdnNobC5pMzIgcTEzLHExMSwjMTMKKwl2ZXh0LjMyIHE1LHE1LHE1LCMzCisJdnNobC5pMzIgcTE0LHExMiwjMTMKKwllb3IgcjAscjAscjIsUk9SICMxNAorCWVvciByMixyNSxyNixST1IgIzE0CisJc3RyIHIzLFtzcCwjMTI0XQorCWFkZCByMyxyMTAscjEyCisJbGRyIHI1LFtzcCwjMTAwXQorCWFkZCByNixyOSxyMTEKKwl2c2hyLnUzMiBxMTEscTExLCMxOQorCXZzaHIudTMyIHExMixxMTIsIzE5CisJdmVvciBxNyxxNyxxMTMKKwl2ZW9yIHE5LHE5LHExNAorCWVvciByOCxyOCxyMyxST1IgIzI1CisJZW9yIHIzLHI1LHI2LFJPUiAjMjUKKwlhZGQgcjUscjgscjEwCisJYWRkIHI2LHIzLHI5CisJdmVvciBxNyxxNyxxMTEKKwl2ZW9yIHE5LHE5LHExMgorCWVvciByNSxyNyxyNSxST1IgIzIzCisJZW9yIHI2LHIxNCxyNixST1IgIzIzCisJYWRkIHI3LHI1LHI4CisJYWRkIHIxNCxyNixyMworCXZhZGQuaTMyIHExMSxxMixxNworCXZzd3AgZDQsZDUKKwl2YWRkLmkzMiBxMTIscTYscTkKKwl2c2hsLmkzMiBxMTMscTExLCMxOAorCXZzd3AgZDEyLGQxMworCXZzaGwuaTMyIHExNCxxMTIsIzE4CisJZW9yIHI3LHIxMixyNyxST1IgIzE5CisJZW9yIHIxMSxyMTEscjE0LFJPUiAjMTkKKwlhZGQgcjEyLHI3LHI1CisJYWRkIHIxNCxyMTEscjYKKwl2c2hyLnUzMiBxMTEscTExLCMxNAorCXZleHQuMzIgcTcscTcscTcsIzEKKwl2c2hyLnUzMiBxMTIscTEyLCMxNAorCXZlb3IgcTgscTgscTEzCisJdmV4dC4zMiBxOSxxOSxxOSwjMQorCXZlb3IgcTEwLHExMCxxMTQKKwllb3IgcjEwLHIxMCxyMTIsUk9SICMxNAorCWVvciByOSxyOSxyMTQsUk9SICMxNAorCWFkZCByMTIscjAscjMKKwlhZGQgcjE0LHIyLHI0CisJdmVvciBxOCxxOCxxMTEKKwl2ZW9yIHExMSxxMTAscTEyCisJZW9yIHIxLHIxLHIxMixST1IgIzI1CisJZW9yIHI3LHI3LHIxNCxST1IgIzI1CisJYWRkIHIxMixyMSxyMAorCWFkZCByMTQscjcscjIKKwl2YWRkLmkzMiBxMTAscTQscTgKKwl2YWRkLmkzMiBxMTIscTUscTExCisJdnNobC5pMzIgcTEzLHExMCwjNworCXZzaGwuaTMyIHExNCxxMTIsIzcKKwllb3IgcjUscjUscjEyLFJPUiAjMjMKKwllb3IgcjYscjYscjE0LFJPUiAjMjMKKwl2c2hyLnUzMiBxMTAscTEwLCMyNQorCXZzaHIudTMyIHExMixxMTIsIzI1CisJYWRkIHIxMixyNSxyMQorCWFkZCByMTQscjYscjcKKwl2ZW9yIHE3LHE3LHExMworCXZlb3IgcTkscTkscTE0CisJdmVvciBxNyxxNyxxMTAKKwl2ZW9yIHE5LHE5LHExMgorCXZhZGQuaTMyIHExMCxxOCxxNworCXZhZGQuaTMyIHExMixxMTEscTkKKwl2c2hsLmkzMiBxMTMscTEwLCM5CisJdnNobC5pMzIgcTE0LHExMiwjOQorCWVvciByMyxyMyxyMTIsUk9SICMxOQorCXN0ciByNyxbc3AsIzEwNF0KKwllb3IgcjQscjQscjE0LFJPUiAjMTkKKwlsZHIgcjcsW3NwLCMxMTJdCisJYWRkIHIxMixyMyxyNQorCXN0ciByNixbc3AsIzEwOF0KKwlhZGQgcjYscjQscjYKKwlsZHIgcjE0LFtzcCwjMTE2XQorCWVvciByMCxyMCxyMTIsUk9SICMxNAorCXN0ciByNSxbc3AsIzk2XQorCWVvciByNSxyMixyNixST1IgIzE0CisJbGRyIHIyLFtzcCwjMTIwXQorCXZzaHIudTMyIHExMCxxMTAsIzIzCisJdnNoci51MzIgcTEyLHExMiwjMjMKKwl2ZW9yIHEyLHEyLHExMworCXZlb3IgcTYscTYscTE0CisJdmVvciBxMixxMixxMTAKKwl2ZW9yIHE2LHE2LHExMgorCWFkZCByNixyMTAscjE0CisJYWRkIHIxMixyOSxyOAorCXZhZGQuaTMyIHExMixxNyxxMgorCXZleHQuMzIgcTEwLHE3LHE3LCMzCisJdmFkZC5pMzIgcTcscTkscTYKKwl2c2hsLmkzMiBxMTQscTEyLCMxMworCXZleHQuMzIgcTEzLHE5LHE5LCMzCisJdnNobC5pMzIgcTkscTcsIzEzCisJdnNoci51MzIgcTEyLHExMiwjMTkKKwl2c2hyLnUzMiBxNyxxNywjMTkKKwllb3IgcjExLHIxMSxyNixST1IgIzI1CisJZW9yIHIyLHIyLHIxMixST1IgIzI1CisJYWRkIHI2LHIxMSxyMTAKKwlzdHIgcjMsW3NwLCMxMDBdCisJYWRkIHIzLHIyLHI5CisJbGRyIHIxMixbc3AsIzEyNF0KKwl2ZW9yIHE0LHE0LHExNAorCXZlb3IgcTUscTUscTkKKwl2ZW9yIHE0LHE0LHExMgorCXZlb3IgcTcscTUscTcKKwllb3IgcjYscjcscjYsUk9SICMyMworCWVvciByMyxyMTIscjMsUk9SICMyMworCWFkZCByNyxyNixyMTEKKwlhZGQgcjEyLHIzLHIyCisJdmFkZC5pMzIgcTUscTIscTQKKwl2c3dwIGQ0LGQ1CisJdmFkZC5pMzIgcTkscTYscTcKKwl2c2hsLmkzMiBxMTIscTUsIzE4CisJdnN3cCBkMTIsZDEzCisJdnNobC5pMzIgcTE0LHE5LCMxOAorCWVvciByNyxyMTQscjcsUk9SICMxOQorCWVvciByOCxyOCxyMTIsUk9SICMxOQorCWFkZCByMTIscjcscjYKKwlhZGQgcjE0LHI4LHIzCisJdnNoci51MzIgcTE1LHE1LCMxNAorCXZleHQuMzIgcTUscTQscTQsIzEKKwl2c2hyLnUzMiBxNCxxOSwjMTQKKwl2ZW9yIHE4LHE4LHExMgorCXZleHQuMzIgcTcscTcscTcsIzEKKwl2ZW9yIHE5LHExMSxxMTQKKwllb3IgcjEwLHIxMCxyMTIsUk9SICMxNAorCWxkciByMTIsW3NwLCMyNDhdCisJdmVvciBxOCxxOCxxMTUKKwllb3IgcjkscjkscjE0LFJPUiAjMTQKKwl2ZW9yIHExMSxxOSxxNAorCXN1YnMgcjEyLHIxMiwjNAorCWJoaSAuTF9tYWlubG9vcDIKKwlzdHJkIHI4LFtzcCwjMTEyXQorCWxkcmQgcjgsW3NwLCM2NF0KKwlzdHJkIHIyLFtzcCwjMTIwXQorCWxkcmQgcjIsW3NwLCM5Nl0KKwlhZGQgcjAscjAscjgKKwlzdHJkIHIxMCxbc3AsIzk2XQorCWFkZCByMSxyMSxyOQorCWxkcmQgcjEwLFtzcCwjNDhdCisJbGRyZCByOCxbc3AsIzcyXQorCWFkZCByMixyMixyMTAKKwlzdHJkIHI2LFtzcCwjMTI4XQorCWFkZCByMyxyMyxyMTEKKwlsZHJkIHI2LFtzcCwjMTA0XQorCWxkcmQgcjEwLFtzcCwjMzJdCisJbGRyIHIxMixbc3AsIzIzNl0KKwlhZGQgcjQscjQscjgKKwlhZGQgcjUscjUscjkKKwlhZGQgcjYscjYscjEwCisJYWRkIHI3LHI3LHIxMQorCWNtcCByMTIsIzAKKwliZXEgLkxfbm9tZXNzYWdlMQorCWxkciByOCxbcjEyLCMwXQorCWxkciByOSxbcjEyLCM0XQorCWxkciByMTAsW3IxMiwjOF0KKwlsZHIgcjExLFtyMTIsIzEyXQorCWVvciByMCxyMCxyOAorCWxkciByOCxbcjEyLCMxNl0KKwllb3IgcjEscjEscjkKKwlsZHIgcjksW3IxMiwjMjBdCisJZW9yIHIyLHIyLHIxMAorCWxkciByMTAsW3IxMiwjMjRdCisJZW9yIHIzLHIzLHIxMQorCWxkciByMTEsW3IxMiwjMjhdCisJZW9yIHI0LHI0LHI4CisJZW9yIHI1LHI1LHI5CisJZW9yIHI2LHI2LHIxMAorCWVvciByNyxyNyxyMTEKKy5MX25vbWVzc2FnZTE6CisJbGRyIHIxNCxbc3AsIzIzMl0KKwl2YWRkLmkzMiBxNCxxOCxxMQorCXN0ciByMCxbcjE0LCMwXQorCWFkZCByMCxzcCwjMzA0CisJc3RyIHIxLFtyMTQsIzRdCisJdmxkMS44IHtkMTYtZDE3fSxbcjAsOiAxMjhdCisJc3RyIHIyLFtyMTQsIzhdCisJdmFkZC5pMzIgcTUscTgscTUKKwlzdHIgcjMsW3IxNCwjMTJdCisJYWRkIHIwLHNwLCMyODgKKwlzdHIgcjQsW3IxNCwjMTZdCisJdmxkMS44IHtkMTYtZDE3fSxbcjAsOiAxMjhdCisJc3RyIHI1LFtyMTQsIzIwXQorCXZhZGQuaTMyIHE5LHExMCxxMAorCXN0ciByNixbcjE0LCMyNF0KKwl2YWRkLmkzMiBxMixxOCxxMgorCXN0ciByNyxbcjE0LCMyOF0KKwl2bW92Lmk2NCBxOCwjMHhmZmZmZmZmZgorCWxkcmQgcjYsW3NwLCMxMjhdCisJdmV4dC4zMiBkMjAsZDgsZDEwLCMxCisJbGRyZCByMCxbc3AsIzQwXQorCXZleHQuMzIgZDI1LGQ5LGQxMSwjMQorCWxkcmQgcjIsW3NwLCMxMjBdCisJdmJpZiBxNCxxOSxxOAorCWxkcmQgcjQsW3NwLCM1Nl0KKwl2ZXh0LjMyIGQyMSxkNSxkMTksIzEKKwlhZGQgcjYscjYscjAKKwl2ZXh0LjMyIGQyNCxkNCxkMTgsIzEKKwlhZGQgcjcscjcscjEKKwl2YmlmIHEyLHE1LHE4CisJYWRkIHIyLHIyLHI0CisJdnJldjY0LmkzMiBxNSxxMTAKKwlhZGQgcjMscjMscjUKKwl2cmV2NjQuaTMyIHE5LHExMgorCWFkZHMgcjAscjAsIzMKKwl2c3dwIGQ1LGQ5CisJYWRjIHIxLHIxLCMwCisJc3RyZCByMCxbc3AsIzQwXQorCWxkcmQgcjgsW3NwLCMxMTJdCisJbGRyZCByMCxbc3AsIzg4XQorCWxkcmQgcjEwLFtzcCwjOTZdCisJbGRyZCByNCxbc3AsIzgwXQorCWFkZCByMCxyOCxyMAorCWFkZCByMSxyOSxyMQorCWFkZCByNCxyMTAscjQKKwlhZGQgcjUscjExLHI1CisJYWRkIHI4LHIxNCwjNjQKKwljbXAgcjEyLCMwCisJYmVxIC5MX25vbWVzc2FnZTIKKwlsZHIgcjksW3IxMiwjMzJdCisJbGRyIHIxMCxbcjEyLCMzNl0KKwlsZHIgcjExLFtyMTIsIzQwXQorCWxkciByMTQsW3IxMiwjNDRdCisJZW9yIHI2LHI2LHI5CisJbGRyIHI5LFtyMTIsIzQ4XQorCWVvciByNyxyNyxyMTAKKwlsZHIgcjEwLFtyMTIsIzUyXQorCWVvciByNCxyNCxyMTEKKwlsZHIgcjExLFtyMTIsIzU2XQorCWVvciByNSxyNSxyMTQKKwlsZHIgcjE0LFtyMTIsIzYwXQorCWFkZCByMTIscjEyLCM2NAorCWVvciByMixyMixyOQorCXZsZDEuOCB7ZDIwLWQyMX0sW3IxMl0hCisJdmVvciBxNCxxNCxxMTAKKwllb3IgcjMscjMscjEwCisJdmxkMS44IHtkMjAtZDIxfSxbcjEyXSEKKwl2ZW9yIHE1LHE1LHExMAorCWVvciByMCxyMCxyMTEKKwl2bGQxLjgge2QyMC1kMjF9LFtyMTJdIQorCXZlb3IgcTIscTIscTEwCisJZW9yIHIxLHIxLHIxNAorCXZsZDEuOCB7ZDIwLWQyMX0sW3IxMl0hCisJdmVvciBxOSxxOSxxMTAKKy5MX25vbWVzc2FnZTI6CisJdnN0MS44IHtkOC1kOX0sW3I4XSEKKwl2c3QxLjgge2QxMC1kMTF9LFtyOF0hCisJdm1vdi5pNjQgcTQsIzB4ZmYKKwl2c3QxLjgge2Q0LWQ1fSxbcjhdIQorCXZzdDEuOCB7ZDE4LWQxOX0sW3I4XSEKKwlzdHIgcjYsW3I4LCMtOTZdCisJYWRkIHI2LHNwLCMzMzYKKwlzdHIgcjcsW3I4LCMtOTJdCisJYWRkIHI3LHNwLCMzMjAKKwlzdHIgcjQsW3I4LCMtODhdCisJdmFkZC5pMzIgcTIscTExLHExCisJdmxkMS44IHtkMTAtZDExfSxbcjYsOiAxMjhdCisJdmFkZC5pMzIgcTUscTUscTcKKwl2bGQxLjgge2QxNC1kMTV9LFtyNyw6IDEyOF0KKwl2YWRkLmkzMiBxOSxxMTMscTAKKwl2YWRkLmkzMiBxNixxNyxxNgorCXN0ciByNSxbcjgsIy04NF0KKwl2ZXh0LjMyIGQxNCxkNCxkMTAsIzEKKwlzdHIgcjIsW3I4LCMtODBdCisJdmV4dC4zMiBkMjEsZDUsZDExLCMxCisJc3RyIHIzLFtyOCwjLTc2XQorCXZiaWYgcTIscTkscTgKKwlzdHIgcjAsW3I4LCMtNzJdCisJdmV4dC4zMiBkMTUsZDEzLGQxOSwjMQorCXZzaHIudTMyIHE0LHE0LCM3CisJc3RyIHIxLFtyOCwjLTY4XQorCXZleHQuMzIgZDIwLGQxMixkMTgsIzEKKwl2YmlmIHE2LHE1LHE4CisJbGRyIHIwLFtzcCwjMjQwXQorCXZyZXY2NC5pMzIgcTUscTcKKwl2cmV2NjQuaTMyIHE3LHExMAorCXZzd3AgZDEzLGQ1CisJdmFkZC5pNjQgcTMscTMscTQKKwlzdWIgcjAscjAsIzE5MgorCWNtcCByMTIsIzAKKwliZXEgLkxfbm9tZXNzYWdlMjEKKwl2bGQxLjgge2QxNi1kMTd9LFtyMTJdIQorCXZlb3IgcTIscTIscTgKKwl2bGQxLjgge2QxNi1kMTd9LFtyMTJdIQorCXZlb3IgcTUscTUscTgKKwl2bGQxLjgge2QxNi1kMTd9LFtyMTJdIQorCXZlb3IgcTYscTYscTgKKwl2bGQxLjgge2QxNi1kMTd9LFtyMTJdIQorCXZlb3IgcTcscTcscTgKKy5MX25vbWVzc2FnZTIxOgorCXZzdDEuOCB7ZDQtZDV9LFtyOF0hCisJdnN0MS44IHtkMTAtZDExfSxbcjhdIQorCXZzdDEuOCB7ZDEyLWQxM30sW3I4XSEKKwl2c3QxLjgge2QxNC1kMTV9LFtyOF0hCisJc3RyIHIxMixbc3AsIzIzNl0KKwlhZGQgcjE0LHNwLCMyNzIKKwlhZGQgcjEyLHNwLCMyNTYKKwlzdHIgcjgsW3NwLCMyMzJdCisJY21wIHIwLCMxOTIKKwliaHMgLkxfbWxlbmF0bGVhc3QxOTIKKy5MX21sZW5sb3diZWxvdzE5MjoKKwljbXAgcjAsIzAKKwliZXEgLkxfZG9uZQorCWIgLkxfbWxlbmF0bGVhc3QxCisuTF9uZXh0YmxvY2s6CisJc3ViIHIwLHIwLCM2NAorLkxfbWxlbmF0bGVhc3QxOgorLkxfaGFuZGxlYmxvY2s6CisJc3RyIHIwLFtzcCwjMjQ4XQorCWxkcmQgcjIsW3NwLCM0OF0KKwlsZHJkIHI2LFtzcCwjMzJdCisJbGRyZCByMCxbc3AsIzY0XQorCWxkcmQgcjQsW3NwLCM3Ml0KKwlsZHJkIHIxMCxbc3AsIzgwXQorCWxkcmQgcjgsW3NwLCM4OF0KKwlzdHJkIHIyLFtzcCwjOTZdCisJc3RyZCByNixbc3AsIzEwNF0KKwlsZHJkIHIyLFtzcCwjNTZdCisJbGRyZCByNixbc3AsIzQwXQorCWxkciByMTIsW3NwLCMyNDRdCisuTF9tYWlubG9vcDE6CisJc3RyIHIxMixbc3AsIzI1Ml0KKwlhZGQgcjEyLHIwLHIyCisJYWRkIHIxNCxyNSxyMQorCWVvciByNCxyNCxyMTIsUk9SICMyNQorCWVvciByNyxyNyxyMTQsUk9SICMyNQorCWFkZCByMTIscjQscjAKKwlhZGQgcjE0LHI3LHI1CisJZW9yIHI2LHI2LHIxMixST1IgIzIzCisJZW9yIHIzLHIzLHIxNCxST1IgIzIzCisJYWRkIHIxMixyNixyNAorCXN0ciByNyxbc3AsIzEzMl0KKwlhZGQgcjcscjMscjcKKwlsZHIgcjE0LFtzcCwjMTA0XQorCWVvciByMixyMixyMTIsUk9SICMxOQorCXN0ciByNixbc3AsIzEyOF0KKwllb3IgcjEscjEscjcsUk9SICMxOQorCWxkciByNyxbc3AsIzEwMF0KKwlhZGQgcjYscjIscjYKKwlzdHIgcjIsW3NwLCMxMjBdCisJYWRkIHIyLHIxLHIzCisJbGRyIHIxMixbc3AsIzk2XQorCWVvciByMCxyMCxyNixST1IgIzE0CisJc3RyIHIzLFtzcCwjMTI0XQorCWVvciByMixyNSxyMixST1IgIzE0CisJbGRyIHIzLFtzcCwjMTA4XQorCWFkZCByNSxyMTAscjE0CisJYWRkIHI2LHI5LHIxMQorCWVvciByOCxyOCxyNSxST1IgIzI1CisJZW9yIHI1LHI3LHI2LFJPUiAjMjUKKwlhZGQgcjYscjgscjEwCisJYWRkIHI3LHI1LHI5CisJZW9yIHI2LHIxMixyNixST1IgIzIzCisJZW9yIHIzLHIzLHI3LFJPUiAjMjMKKwlhZGQgcjcscjYscjgKKwlhZGQgcjEyLHIzLHI1CisJZW9yIHI3LHIxNCxyNyxST1IgIzE5CisJZW9yIHIxMSxyMTEscjEyLFJPUiAjMTkKKwlhZGQgcjEyLHI3LHI2CisJYWRkIHIxNCxyMTEscjMKKwllb3IgcjEwLHIxMCxyMTIsUk9SICMxNAorCWVvciByOSxyOSxyMTQsUk9SICMxNAorCWFkZCByMTIscjAscjUKKwlhZGQgcjE0LHIyLHI0CisJZW9yIHIxLHIxLHIxMixST1IgIzI1CisJZW9yIHI3LHI3LHIxNCxST1IgIzI1CisJYWRkIHIxMixyMSxyMAorCWFkZCByMTQscjcscjIKKwllb3IgcjYscjYscjEyLFJPUiAjMjMKKwllb3IgcjMscjMscjE0LFJPUiAjMjMKKwlhZGQgcjEyLHI2LHIxCisJc3RyIHI3LFtzcCwjMTA0XQorCWFkZCByNyxyMyxyNworCWxkciByMTQsW3NwLCMxMjhdCisJZW9yIHI1LHI1LHIxMixST1IgIzE5CisJc3RyIHIzLFtzcCwjMTA4XQorCWVvciByNCxyNCxyNyxST1IgIzE5CisJbGRyIHI3LFtzcCwjMTMyXQorCWFkZCByMTIscjUscjYKKwlzdHIgcjYsW3NwLCM5Nl0KKwlhZGQgcjMscjQscjMKKwlsZHIgcjYsW3NwLCMxMjBdCisJZW9yIHIwLHIwLHIxMixST1IgIzE0CisJc3RyIHI1LFtzcCwjMTAwXQorCWVvciByNSxyMixyMyxST1IgIzE0CisJbGRyIHIzLFtzcCwjMTI0XQorCWFkZCByMixyMTAscjcKKwlhZGQgcjEyLHI5LHI4CisJZW9yIHIxMSxyMTEscjIsUk9SICMyNQorCWVvciByMixyNixyMTIsUk9SICMyNQorCWFkZCByNixyMTEscjEwCisJYWRkIHIxMixyMixyOQorCWVvciByNixyMTQscjYsUk9SICMyMworCWVvciByMyxyMyxyMTIsUk9SICMyMworCWFkZCByMTIscjYscjExCisJYWRkIHIxNCxyMyxyMgorCWVvciByNyxyNyxyMTIsUk9SICMxOQorCWVvciByOCxyOCxyMTQsUk9SICMxOQorCWFkZCByMTIscjcscjYKKwlhZGQgcjE0LHI4LHIzCisJZW9yIHIxMCxyMTAscjEyLFJPUiAjMTQKKwllb3IgcjkscjkscjE0LFJPUiAjMTQKKwlsZHIgcjEyLFtzcCwjMjUyXQorCXN1YnMgcjEyLHIxMiwjMgorCWJoaSAuTF9tYWlubG9vcDEKKwlzdHJkIHI2LFtzcCwjMTI4XQorCXN0cmQgcjIsW3NwLCMxMjBdCisJc3RyZCByMTAsW3NwLCMxMTJdCisJc3RyZCByOCxbc3AsIzEzNl0KKwlsZHJkIHIyLFtzcCwjOTZdCisJbGRyZCByNixbc3AsIzEwNF0KKwlsZHJkIHI4LFtzcCwjNjRdCisJbGRyZCByMTAsW3NwLCM0OF0KKwlhZGQgcjAscjAscjgKKwlhZGQgcjEscjEscjkKKwlhZGQgcjIscjIscjEwCisJYWRkIHIzLHIzLHIxMQorCWxkcmQgcjgsW3NwLCM3Ml0KKwlsZHJkIHIxMCxbc3AsIzMyXQorCWFkZCByNCxyNCxyOAorCWFkZCByNSxyNSxyOQorCWFkZCByNixyNixyMTAKKwlhZGQgcjcscjcscjExCisJbGRyIHIxMixbc3AsIzIzNl0KKwljbXAgcjEyLCMwCisJYmVxIC5MX25vbWVzc2FnZTEwCisJbGRyIHI4LFtyMTIsIzBdCisJbGRyIHI5LFtyMTIsIzRdCisJbGRyIHIxMCxbcjEyLCM4XQorCWxkciByMTEsW3IxMiwjMTJdCisJZW9yIHIwLHIwLHI4CisJbGRyIHI4LFtyMTIsIzE2XQorCWVvciByMSxyMSxyOQorCWxkciByOSxbcjEyLCMyMF0KKwllb3IgcjIscjIscjEwCisJbGRyIHIxMCxbcjEyLCMyNF0KKwllb3IgcjMscjMscjExCisJbGRyIHIxMSxbcjEyLCMyOF0KKwllb3IgcjQscjQscjgKKwllb3IgcjUscjUscjkKKwllb3IgcjYscjYscjEwCisJZW9yIHI3LHI3LHIxMQorLkxfbm9tZXNzYWdlMTA6CisJbGRyIHIxNCxbc3AsIzIzMl0KKwlzdHIgcjAsW3IxNCwjMF0KKwlzdHIgcjEsW3IxNCwjNF0KKwlzdHIgcjIsW3IxNCwjOF0KKwlzdHIgcjMsW3IxNCwjMTJdCisJc3RyIHI0LFtyMTQsIzE2XQorCXN0ciByNSxbcjE0LCMyMF0KKwlzdHIgcjYsW3IxNCwjMjRdCisJc3RyIHI3LFtyMTQsIzI4XQorCWxkcmQgcjYsW3NwLCMxMjhdCisJbGRyZCByMTAsW3NwLCMxMTJdCisJbGRyZCByMCxbc3AsIzQwXQorCWxkcmQgcjQsW3NwLCM4MF0KKwlhZGQgcjYscjYscjAKKwlhZGQgcjcscjcscjEKKwlhZGQgcjEwLHIxMCxyNAorCWFkZCByMTEscjExLHI1CisJYWRkcyByMCxyMCwjMQorCWFkYyByMSxyMSwjMAorCXN0cmQgcjAsW3NwLCM0MF0KKwlsZHJkIHIyLFtzcCwjMTIwXQorCWxkcmQgcjgsW3NwLCMxMzZdCisJbGRyZCByNCxbc3AsIzU2XQorCWxkcmQgcjAsW3NwLCM4OF0KKwlhZGQgcjIscjIscjQKKwlhZGQgcjMscjMscjUKKwlhZGQgcjAscjgscjAKKwlhZGQgcjEscjkscjEKKwljbXAgcjEyLCMwCisJYmVxIC5MX25vbWVzc2FnZTExCisJbGRyIHI0LFtyMTIsIzMyXQorCWxkciByNSxbcjEyLCMzNl0KKwlsZHIgcjgsW3IxMiwjNDBdCisJbGRyIHI5LFtyMTIsIzQ0XQorCWVvciByNixyNixyNAorCWxkciByNCxbcjEyLCM0OF0KKwllb3IgcjcscjcscjUKKwlsZHIgcjUsW3IxMiwjNTJdCisJZW9yIHIxMCxyMTAscjgKKwlsZHIgcjgsW3IxMiwjNTZdCisJZW9yIHIxMSxyMTEscjkKKwlsZHIgcjksW3IxMiwjNjBdCisJZW9yIHIyLHIyLHI0CisJZW9yIHIzLHIzLHI1CisJZW9yIHIwLHIwLHI4CisJZW9yIHIxLHIxLHI5CisJYWRkIHI0LHIxMiwjNjQKKwlzdHIgcjQsW3NwLCMyMzZdCisuTF9ub21lc3NhZ2UxMToKKwlzdHIgcjYsW3IxNCwjMzJdCisJc3RyIHI3LFtyMTQsIzM2XQorCXN0ciByMTAsW3IxNCwjNDBdCisJc3RyIHIxMSxbcjE0LCM0NF0KKwlzdHIgcjIsW3IxNCwjNDhdCisJc3RyIHIzLFtyMTQsIzUyXQorCXN0ciByMCxbcjE0LCM1Nl0KKwlzdHIgcjEsW3IxNCwjNjBdCisJYWRkIHIwLHIxNCwjNjQKKwlzdHIgcjAsW3NwLCMyMzJdCisJbGRyIHIwLFtzcCwjMjQ4XQorCWNtcCByMCwjNjQKKwliaGkgLkxfbmV4dGJsb2NrCisuTF9kb25lOgorCWxkciByMixbc3AsIzE2MF0KKwlsZHJkIHI0LFtzcCwjMF0KKwlsZHJkIHI2LFtzcCwjOF0KKwlsZHJkIHI4LFtzcCwjMTZdCisJbGRyZCByMTAsW3NwLCMyNF0KKwlsZHIgcjEyLFtzcCwjMjI4XQorCWxkciByMTQsW3NwLCMyMjRdCisJbGRyZCByMCxbc3AsIzQwXQorCXN0cmQgcjAsW3IyXQorCXN1YiByMCxyMTIsc3AKKwltb3Ygc3AscjEyCisJdnBvcCB7cTQscTUscTYscTd9CisJYWRkIHIwLHIwLCM2NAorCWJ4IGxyCisuc2l6ZSBfZ2NyeV9hcm1fbmVvbl9zYWxzYTIwX2VuY3J5cHQsLi1fZ2NyeV9hcm1fbmVvbl9zYWxzYTIwX2VuY3J5cHQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NhbHNhMjAuYyBiL2NpcGhlci9zYWxzYTIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zYWxzYTIwLmMKQEAgLTAsMCArMSw1NzYgQEAKKy8qIHNhbHNhMjAuYyAgLSAgQmVybnN0ZWluJ3MgU2Fsc2EyMCBjaXBoZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTaW1vbiBKb3NlZnNzb24sIE5pZWxzIE3DtmxsZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0sIHNlZToKKyAqICAgaHR0cDovL2NyLnlwLnRvL3NudWZmbGUvc3BlYy5wZGYKKyAqICAgaHR0cDovL2NyLnlwLnRvL3NudWZmbGUvZGVzaWduLnBkZgorICovCisKKy8qIFRoZSBjb2RlIGlzIGJhc2VkIG9uIHRoZSBjb2RlIGluIE5ldHRsZQorICAgKGdpdCBjb21taXQgaWQgOWQyZDhkZGFlZTM1YjkxYTRlMWEzMmFlNzdjYmEwNGJlYTM0ODBlNykKKyAgIHdoaWNoIGluIHR1cm4gaXMgYmFzZWQgb24KKyAgIHNhbHNhMjAtcmVmLmMgdmVyc2lvbiAyMDA1MTExOAorICAgRC4gSi4gQmVybnN0ZWluCisgICBQdWJsaWMgZG9tYWluLgorKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKworCisvKiBVU0VfQU1ENjQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEFNRDY0IGNvZGUuICovCisjdW5kZWYgVVNFX0FNRDY0CisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpCisjIGRlZmluZSBVU0VfQU1ENjQgMQorI2VuZGlmCisKKy8qIFVTRV9BUk1fTkVPTl9BU00gaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIEFSTSBORU9OIGFzc2VtYmx5IGNvZGUuICovCisjdW5kZWYgVVNFX0FSTV9ORU9OX0FTTQorI2lmIGRlZmluZWQoSEFWRV9BUk1fQVJDSF9WNikgJiYgZGVmaW5lZChfX0FSTUVMX18pCisjIGlmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMpICYmIFwKKyAgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX05FT04pCisjICBkZWZpbmUgVVNFX0FSTV9ORU9OX0FTTSAxCisjIGVuZGlmCisjZW5kaWYKKworCisjZGVmaW5lIFNBTFNBMjBfTUlOX0tFWV9TSVpFIDE2ICAvKiBCeXRlcy4gICovCisjZGVmaW5lIFNBTFNBMjBfTUFYX0tFWV9TSVpFIDMyICAvKiBCeXRlcy4gICovCisjZGVmaW5lIFNBTFNBMjBfQkxPQ0tfU0laRSAgIDY0ICAvKiBCeXRlcy4gICovCisjZGVmaW5lIFNBTFNBMjBfSVZfU0laRSAgICAgICA4ICAvKiBCeXRlcy4gICovCisjZGVmaW5lIFNBTFNBMjBfSU5QVVRfTEVOR1RIIDE2ICAvKiBCeXRlcy4gICovCisKKy8qIE51bWJlciBvZiByb3VuZHMuICBUaGUgc3RhbmRhcmQgdXNlcyAyMCByb3VuZHMuICBJbiBhbnkgY2FzZSB0aGUKKyAgIG51bWJlciBvZiByb3VuZHMgbXVzdCBiZSBldmVuLiAgKi8KKyNkZWZpbmUgU0FMU0EyMF9ST1VORFMgICAgICAgMjAKKyNkZWZpbmUgU0FMU0EyMFIxMl9ST1VORFMgICAgMTIKKworCitzdHJ1Y3QgU0FMU0EyMF9jb250ZXh0X3M7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50ICgqc2Fsc2EyMF9jb3JlX3QpICh1MzIgKmRzdCwgc3RydWN0IFNBTFNBMjBfY29udGV4dF9zICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJvdW5kcyk7Cit0eXBlZGVmIHZvaWQgKCogc2Fsc2EyMF9rZXlzZXR1cF90KShzdHJ1Y3QgU0FMU0EyMF9jb250ZXh0X3MgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmtleSwgaW50IGtleWxlbik7Cit0eXBlZGVmIHZvaWQgKCogc2Fsc2EyMF9pdnNldHVwX3QpKHN0cnVjdCBTQUxTQTIwX2NvbnRleHRfcyAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlICppdik7CisKK3R5cGVkZWYgc3RydWN0IFNBTFNBMjBfY29udGV4dF9zCit7CisgIC8qIEluZGljZXMgMS00IGFuZCAxMS0xNCBob2xkcyB0aGUga2V5ICh0d28gaWRlbnRpY2FsIGNvcGllcyBmb3IgdGhlCisgICAgIHNob3J0ZXIga2V5IHNpemUpLCBpbmRpY2VzIDAsIDUsIDEwLCAxNSBhcmUgY29uc3RhbnQsIGluZGljZXMgNiwgNworICAgICBhcmUgdGhlIElWLCBhbmQgaW5kaWNlcyA4LCA5IGFyZSB0aGUgYmxvY2sgY291bnRlcjoKKworICAgICBDIEsgSyBLCisgICAgIEsgQyBJIEkKKyAgICAgQiBCIEMgSworICAgICBLIEsgSyBDCisgICovCisgIHUzMiBpbnB1dFtTQUxTQTIwX0lOUFVUX0xFTkdUSF07CisgIHUzMiBwYWRbU0FMU0EyMF9JTlBVVF9MRU5HVEhdOworICB1bnNpZ25lZCBpbnQgdW51c2VkOyAvKiBieXRlcyBpbiB0aGUgcGFkLiAgKi8KKyNpZmRlZiBVU0VfQVJNX05FT05fQVNNCisgIGludCB1c2VfbmVvbjsKKyNlbmRpZgorICBzYWxzYTIwX2tleXNldHVwX3Qga2V5c2V0dXA7CisgIHNhbHNhMjBfaXZzZXR1cF90IGl2c2V0dXA7CisgIHNhbHNhMjBfY29yZV90IGNvcmU7Cit9IFNBTFNBMjBfY29udGV4dF90OworCisKKy8qIFRoZSBtYXNraW5nIG9mIHRoZSByaWdodCBzaGlmdCBpcyBuZWVkZWQgdG8gYWxsb3cgbiA9PSAwICh1c2luZworICAganVzdCAzMiAtIG4gYW5kIDY0IC0gbiByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvdXIpLiBNb3N0IHVzZXMKKyAgIG9mIHRoZXNlIG1hY3JvcyB1c2UgYSBjb25zdGFudCBhbmQgbm9uLXplcm8gcm90YXRpb24gY291bnQuICovCisjZGVmaW5lIFJPVEwzMihuLHgpICgoKHgpPDwobikpIHwgKCh4KT4+KCgtKG4pJjMxKSkpKQorCisKKyNkZWZpbmUgTEVfU1dBUDMyKHYpIGxlX2Jzd2FwMzIodikKKworI2RlZmluZSBMRV9SRUFEX1VJTlQzMihwKSBidWZfZ2V0X2xlMzIocCkKKworCitzdGF0aWMgdm9pZCBzYWxzYTIwX3NldGl2ICh2b2lkICpjb250ZXh0LCBjb25zdCBieXRlICppdiwgc2l6ZV90IGl2bGVuKTsKK3N0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdCAodm9pZCk7CisKKworI2lmZGVmIFVTRV9BTUQ2NAorLyogQU1ENjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIG9mIFNhbHNhMjAuICovCit2b2lkIF9nY3J5X3NhbHNhMjBfYW1kNjRfa2V5c2V0dXAodTMyICpjdHhpbnB1dCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5Yml0cyk7Cit2b2lkIF9nY3J5X3NhbHNhMjBfYW1kNjRfaXZzZXR1cCh1MzIgKmN0eGlucHV0LCBjb25zdCB2b2lkICppdik7Cit1bnNpZ25lZCBpbnQKK19nY3J5X3NhbHNhMjBfYW1kNjRfZW5jcnlwdF9ibG9ja3ModTMyICpjdHhpbnB1dCwgY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGludCByb3VuZHMpOworCitzdGF0aWMgdm9pZAorc2Fsc2EyMF9rZXlzZXR1cChTQUxTQTIwX2NvbnRleHRfdCAqY3R4LCBjb25zdCBieXRlICprZXksIGludCBrZXlsZW4pCit7CisgIF9nY3J5X3NhbHNhMjBfYW1kNjRfa2V5c2V0dXAoY3R4LT5pbnB1dCwga2V5LCBrZXlsZW4gKiA4KTsKK30KKworc3RhdGljIHZvaWQKK3NhbHNhMjBfaXZzZXR1cChTQUxTQTIwX2NvbnRleHRfdCAqY3R4LCBjb25zdCBieXRlICppdikKK3sKKyAgX2djcnlfc2Fsc2EyMF9hbWQ2NF9pdnNldHVwKGN0eC0+aW5wdXQsIGl2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorc2Fsc2EyMF9jb3JlICh1MzIgKmRzdCwgU0FMU0EyMF9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgaW50IHJvdW5kcykKK3sKKyAgbWVtc2V0KGRzdCwgMCwgU0FMU0EyMF9CTE9DS19TSVpFKTsKKyAgcmV0dXJuIF9nY3J5X3NhbHNhMjBfYW1kNjRfZW5jcnlwdF9ibG9ja3MoY3R4LT5pbnB1dCwgZHN0LCBkc3QsIDEsIHJvdW5kcyk7Cit9CisKKyNlbHNlIC8qIFVTRV9BTUQ2NCAqLworCisMCisKKyNpZiAwCisjIGRlZmluZSBTQUxTQTIwX0NPUkVfREVCVUcoaSkgZG8gewkJXAorICAgIHVuc2lnbmVkIGRlYnVnX2o7CQkJCVwKKyAgICBmb3IgKGRlYnVnX2ogPSAwOyBkZWJ1Z19qIDwgMTY7IGRlYnVnX2orKykJXAorICAgICAgewkJCQkJCVwKKwlpZiAoZGVidWdfaiA9PSAwKQkJCVwKKwkgIGZwcmludGYoc3RkZXJyLCAiJTJkOiIsIChpKSk7CQlcCisJZWxzZSBpZiAoZGVidWdfaiAlIDQgPT0gMCkJCVwKKwkgIGZwcmludGYoc3RkZXJyLCAiXG4gICAiKTsJCVwKKwlmcHJpbnRmKHN0ZGVyciwgIiAlOHgiLCBwYWRbZGVidWdfal0pOwlcCisgICAgICB9CQkJCQkJXAorICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsJCQlcCisgIH0gd2hpbGUgKDApCisjZWxzZQorIyBkZWZpbmUgU0FMU0EyMF9DT1JFX0RFQlVHKGkpCisjZW5kaWYKKworI2RlZmluZSBRUk9VTkQoeDAsIHgxLCB4MiwgeDMpICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHgxIF49IFJPVEwzMiAoIDcsIHgwICsgeDMpOwkgICAgXAorICAgIHgyIF49IFJPVEwzMiAoIDksIHgxICsgeDApOwkgICAgXAorICAgIHgzIF49IFJPVEwzMiAoMTMsIHgyICsgeDEpOwkgICAgXAorICAgIHgwIF49IFJPVEwzMiAoMTgsIHgzICsgeDIpOwkgICAgXAorICB9IHdoaWxlKDApCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NhbHNhMjBfY29yZSAodTMyICpkc3QsIFNBTFNBMjBfY29udGV4dF90ICpjdHgsIHVuc2lnbmVkIHJvdW5kcykKK3sKKyAgdTMyIHBhZFtTQUxTQTIwX0lOUFVUX0xFTkdUSF0sICpzcmMgPSBjdHgtPmlucHV0OworICB1bnNpZ25lZCBpbnQgaTsKKworICBtZW1jcHkgKHBhZCwgc3JjLCBzaXplb2YocGFkKSk7CisgIGZvciAoaSA9IDA7IGkgPCByb3VuZHM7IGkgKz0gMikKKyAgICB7CisgICAgICBTQUxTQTIwX0NPUkVfREVCVUcgKGkpOworICAgICAgUVJPVU5EIChwYWRbMF0sICBwYWRbNF0sICBwYWRbOF0sICBwYWRbMTJdKTsKKyAgICAgIFFST1VORCAocGFkWzVdLCAgcGFkWzldLCAgcGFkWzEzXSwgcGFkWzFdICk7CisgICAgICBRUk9VTkQgKHBhZFsxMF0sIHBhZFsxNF0sIHBhZFsyXSwgIHBhZFs2XSApOworICAgICAgUVJPVU5EIChwYWRbMTVdLCBwYWRbM10sICBwYWRbN10sICBwYWRbMTFdKTsKKworICAgICAgU0FMU0EyMF9DT1JFX0RFQlVHIChpKzEpOworICAgICAgUVJPVU5EIChwYWRbMF0sICBwYWRbMV0sICBwYWRbMl0sICBwYWRbM10gKTsKKyAgICAgIFFST1VORCAocGFkWzVdLCAgcGFkWzZdLCAgcGFkWzddLCAgcGFkWzRdICk7CisgICAgICBRUk9VTkQgKHBhZFsxMF0sIHBhZFsxMV0sIHBhZFs4XSwgIHBhZFs5XSApOworICAgICAgUVJPVU5EIChwYWRbMTVdLCBwYWRbMTJdLCBwYWRbMTNdLCBwYWRbMTRdKTsKKyAgICB9CisgIFNBTFNBMjBfQ09SRV9ERUJVRyAoaSk7CisKKyAgZm9yIChpID0gMDsgaSA8IFNBTFNBMjBfSU5QVVRfTEVOR1RIOyBpKyspCisgICAgeworICAgICAgdTMyIHQgPSBwYWRbaV0gKyBzcmNbaV07CisgICAgICBkc3RbaV0gPSBMRV9TV0FQMzIgKHQpOworICAgIH0KKworICAvKiBVcGRhdGUgY291bnRlci4gKi8KKyAgaWYgKCErK3NyY1s4XSkKKyAgICBzcmNbOV0rKzsKKworICAvKiBidXJuX3N0YWNrICovCisgIHJldHVybiAoIDMqc2l6ZW9mICh2b2lkKikgXAorICAgICAgICAgKyAyKnNpemVvZiAodm9pZCopIFwKKyAgICAgICAgICsgNjQgXAorICAgICAgICAgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgXAorICAgICAgICAgKyBzaXplb2YgKHUzMikgKTsKK30KKyN1bmRlZiBRUk9VTkQKKyN1bmRlZiBTQUxTQTIwX0NPUkVfREVCVUcKKworc3RhdGljIHZvaWQKK3NhbHNhMjBfa2V5c2V0dXAoU0FMU0EyMF9jb250ZXh0X3QgKmN0eCwgY29uc3QgYnl0ZSAqa2V5LCBpbnQga2V5bGVuKQoreworICAvKiBUaGVzZSBjb25zdGFudHMgYXJlIHRoZSBsaXR0bGUgZW5kaWFuIGVuY29kaW5nIG9mIHRoZSBzdHJpbmcKKyAgICAgImV4cGFuZCAzMi1ieXRlIGsiLiAgRm9yIHRoZSAxMjggYml0IHZhcmlhbnQsIHRoZSAiMzIiIGluIHRoYXQKKyAgICAgc3RyaW5nIHdpbGwgYmUgZml4ZWQgdXAgdG8gIjE2Ii4gICovCisgIGN0eC0+aW5wdXRbMF0gID0gMHg2MTcwNzg2NTsgLyogImFweGUiICAqLworICBjdHgtPmlucHV0WzVdICA9IDB4MzMyMDY0NmU7IC8qICIzIGRuIiAgKi8KKyAgY3R4LT5pbnB1dFsxMF0gPSAweDc5NjIyZDMyOyAvKiAieWItMiIgICovCisgIGN0eC0+aW5wdXRbMTVdID0gMHg2YjIwNjU3NDsgLyogImsgZXQiICAqLworCisgIGN0eC0+aW5wdXRbMV0gPSBMRV9SRUFEX1VJTlQzMihrZXkgKyAwKTsKKyAgY3R4LT5pbnB1dFsyXSA9IExFX1JFQURfVUlOVDMyKGtleSArIDQpOworICBjdHgtPmlucHV0WzNdID0gTEVfUkVBRF9VSU5UMzIoa2V5ICsgOCk7CisgIGN0eC0+aW5wdXRbNF0gPSBMRV9SRUFEX1VJTlQzMihrZXkgKyAxMik7CisgIGlmIChrZXlsZW4gPT0gU0FMU0EyMF9NQVhfS0VZX1NJWkUpIC8qIDI1NiBiaXRzICovCisgICAgeworICAgICAgY3R4LT5pbnB1dFsxMV0gPSBMRV9SRUFEX1VJTlQzMihrZXkgKyAxNik7CisgICAgICBjdHgtPmlucHV0WzEyXSA9IExFX1JFQURfVUlOVDMyKGtleSArIDIwKTsKKyAgICAgIGN0eC0+aW5wdXRbMTNdID0gTEVfUkVBRF9VSU5UMzIoa2V5ICsgMjQpOworICAgICAgY3R4LT5pbnB1dFsxNF0gPSBMRV9SRUFEX1VJTlQzMihrZXkgKyAyOCk7CisgICAgfQorICBlbHNlICAvKiAxMjggYml0cyAqLworICAgIHsKKyAgICAgIGN0eC0+aW5wdXRbMTFdID0gY3R4LT5pbnB1dFsxXTsKKyAgICAgIGN0eC0+aW5wdXRbMTJdID0gY3R4LT5pbnB1dFsyXTsKKyAgICAgIGN0eC0+aW5wdXRbMTNdID0gY3R4LT5pbnB1dFszXTsKKyAgICAgIGN0eC0+aW5wdXRbMTRdID0gY3R4LT5pbnB1dFs0XTsKKworICAgICAgY3R4LT5pbnB1dFs1XSAgLT0gMHgwMjAwMDAwMDsgLyogQ2hhbmdlIHRvICIxIGRuIi4gICovCisgICAgICBjdHgtPmlucHV0WzEwXSArPSAweDAwMDAwMDA0OyAvKiBDaGFuZ2UgdG8gInliLTYiLiAgKi8KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNhbHNhMjBfaXZzZXR1cChTQUxTQTIwX2NvbnRleHRfdCAqY3R4LCBjb25zdCBieXRlICppdikKK3sKKyAgY3R4LT5pbnB1dFs2XSA9IExFX1JFQURfVUlOVDMyKGl2ICsgMCk7CisgIGN0eC0+aW5wdXRbN10gPSBMRV9SRUFEX1VJTlQzMihpdiArIDQpOworICAvKiBSZXNldCB0aGUgYmxvY2sgY291bnRlci4gICovCisgIGN0eC0+aW5wdXRbOF0gPSAwOworICBjdHgtPmlucHV0WzldID0gMDsKK30KKworI2VuZGlmIC8qIVVTRV9BTUQ2NCovCisKKyNpZmRlZiBVU0VfQVJNX05FT05fQVNNCisKKy8qIEFSTSBORU9OIGltcGxlbWVudGF0aW9uIG9mIFNhbHNhMjAuICovCit1bnNpZ25lZCBpbnQKK19nY3J5X2FybV9uZW9uX3NhbHNhMjBfZW5jcnlwdCh2b2lkICpjLCBjb25zdCB2b2lkICptLCB1bnNpZ25lZCBpbnQgbmJsa3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaywgdW5zaWduZWQgaW50IHJvdW5kcyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NhbHNhMjBfY29yZV9uZW9uICh1MzIgKmRzdCwgU0FMU0EyMF9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgaW50IHJvdW5kcykKK3sKKyAgcmV0dXJuIF9nY3J5X2FybV9uZW9uX3NhbHNhMjBfZW5jcnlwdChkc3QsIE5VTEwsIDEsIGN0eC0+aW5wdXQsIHJvdW5kcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNhbHNhMjBfaXZzZXR1cF9uZW9uKFNBTFNBMjBfY29udGV4dF90ICpjdHgsIGNvbnN0IGJ5dGUgKml2KQoreworICBtZW1jcHkoY3R4LT5pbnB1dCArIDgsIGl2LCA4KTsKKyAgLyogUmVzZXQgdGhlIGJsb2NrIGNvdW50ZXIuICAqLworICBtZW1zZXQoY3R4LT5pbnB1dCArIDEwLCAwLCA4KTsKK30KKworc3RhdGljIHZvaWQKK3NhbHNhMjBfa2V5c2V0dXBfbmVvbihTQUxTQTIwX2NvbnRleHRfdCAqY3R4LCBjb25zdCBieXRlICprZXksIGludCBrbGVuKQoreworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaWdtYTMyWzE2XSA9ICJleHBhbmQgMzItYnl0ZSBrIjsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2lnbWExNlsxNl0gPSAiZXhwYW5kIDE2LWJ5dGUgayI7CisKKyAgaWYgKGtsZW4gPT0gMTYpCisgICAgeworICAgICAgbWVtY3B5IChjdHgtPmlucHV0LCBrZXksIDE2KTsKKyAgICAgIG1lbWNweSAoY3R4LT5pbnB1dCArIDQsIGtleSwgMTYpOyAvKiBEdXBsaWNhdGUgMTI4LWJpdCBrZXkuICovCisgICAgICBtZW1jcHkgKGN0eC0+aW5wdXQgKyAxMiwgc2lnbWExNiwgMTYpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIDMyLWJ5dGUga2V5ICovCisgICAgICBtZW1jcHkgKGN0eC0+aW5wdXQsIGtleSwgMzIpOworICAgICAgbWVtY3B5IChjdHgtPmlucHV0ICsgMTIsIHNpZ21hMzIsIDE2KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKlVTRV9BUk1fTkVPTl9BU00qLworCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3NhbHNhMjBfZG9fc2V0a2V5IChTQUxTQTIwX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnNlbGZ0ZXN0X2ZhaWxlZDsKKworICBpZiAoIWluaXRpYWxpemVkICkKKyAgICB7CisgICAgICBpbml0aWFsaXplZCA9IDE7CisgICAgICBzZWxmdGVzdF9mYWlsZWQgPSBzZWxmdGVzdCAoKTsKKyAgICAgIGlmIChzZWxmdGVzdF9mYWlsZWQpCisgICAgICAgIGxvZ19lcnJvciAoIlNBTFNBMjAgc2VsZnRlc3QgZmFpbGVkICglcylcbiIsIHNlbGZ0ZXN0X2ZhaWxlZCApOworICAgIH0KKyAgaWYgKHNlbGZ0ZXN0X2ZhaWxlZCkKKyAgICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7CisKKyAgaWYgKGtleWxlbiAhPSBTQUxTQTIwX01JTl9LRVlfU0laRQorICAgICAgJiYga2V5bGVuICE9IFNBTFNBMjBfTUFYX0tFWV9TSVpFKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9LRVlMRU47CisKKyAgLyogRGVmYXVsdCBvcHMuICovCisgIGN0eC0+a2V5c2V0dXAgPSBzYWxzYTIwX2tleXNldHVwOworICBjdHgtPml2c2V0dXAgPSBzYWxzYTIwX2l2c2V0dXA7CisgIGN0eC0+Y29yZSA9IHNhbHNhMjBfY29yZTsKKworI2lmZGVmIFVTRV9BUk1fTkVPTl9BU00KKyAgY3R4LT51c2VfbmVvbiA9IChfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCkgJiBIV0ZfQVJNX05FT04pICE9IDA7CisgIGlmIChjdHgtPnVzZV9uZW9uKQorICAgIHsKKyAgICAgIC8qIFVzZSBBUk0gTkVPTiBvcHMgaW5zdGVhZC4gKi8KKyAgICAgIGN0eC0+a2V5c2V0dXAgPSBzYWxzYTIwX2tleXNldHVwX25lb247CisgICAgICBjdHgtPml2c2V0dXAgPSBzYWxzYTIwX2l2c2V0dXBfbmVvbjsKKyAgICAgIGN0eC0+Y29yZSA9IHNhbHNhMjBfY29yZV9uZW9uOworICAgIH0KKyNlbmRpZgorCisgIGN0eC0+a2V5c2V0dXAgKGN0eCwga2V5LCBrZXlsZW4pOworCisgIC8qIFdlIGRlZmF1bHQgdG8gYSB6ZXJvIG5vbmNlLiAgKi8KKyAgc2Fsc2EyMF9zZXRpdiAoY3R4LCBOVUxMLCAwKTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitzYWxzYTIwX3NldGtleSAodm9pZCAqY29udGV4dCwgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworICBTQUxTQTIwX2NvbnRleHRfdCAqY3R4ID0gKFNBTFNBMjBfY29udGV4dF90ICopY29udGV4dDsKKyAgZ2NyeV9lcnJfY29kZV90IHJjID0gc2Fsc2EyMF9kb19zZXRrZXkgKGN0eCwga2V5LCBrZXlsZW4pOworICBfZ2NyeV9idXJuX3N0YWNrICg0ICsgc2l6ZW9mICh2b2lkICopICsgNCAqIHNpemVvZiAodm9pZCAqKSk7CisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgdm9pZAorc2Fsc2EyMF9zZXRpdiAodm9pZCAqY29udGV4dCwgY29uc3QgYnl0ZSAqaXYsIHNpemVfdCBpdmxlbikKK3sKKyAgU0FMU0EyMF9jb250ZXh0X3QgKmN0eCA9IChTQUxTQTIwX2NvbnRleHRfdCAqKWNvbnRleHQ7CisgIGJ5dGUgdG1wW1NBTFNBMjBfSVZfU0laRV07CisKKyAgaWYgKGl2ICYmIGl2bGVuICE9IFNBTFNBMjBfSVZfU0laRSkKKyAgICBsb2dfaW5mbyAoIldBUk5JTkc6IHNhbHNhMjBfc2V0aXY6IGJhZCBpdmxlbj0ldVxuIiwgKHUzMilpdmxlbik7CisKKyAgaWYgKCFpdiB8fCBpdmxlbiAhPSBTQUxTQTIwX0lWX1NJWkUpCisgICAgbWVtc2V0ICh0bXAsIDAsIHNpemVvZih0bXApKTsKKyAgZWxzZQorICAgIG1lbWNweSAodG1wLCBpdiwgU0FMU0EyMF9JVl9TSVpFKTsKKworICBjdHgtPml2c2V0dXAgKGN0eCwgdG1wKTsKKworICAvKiBSZXNldCB0aGUgdW51c2VkIHBhZCBieXRlcyBjb3VudGVyLiAgKi8KKyAgY3R4LT51bnVzZWQgPSAwOworCisgIHdpcGVtZW1vcnkgKHRtcCwgc2l6ZW9mKHRtcCkpOworfQorCisKKwwKKy8qIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgTEVOR1RIID4gMC4gICovCitzdGF0aWMgdm9pZAorc2Fsc2EyMF9kb19lbmNyeXB0X3N0cmVhbSAoU0FMU0EyMF9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKm91dGJ1ZiwgY29uc3QgYnl0ZSAqaW5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCByb3VuZHMpCit7CisgIHVuc2lnbmVkIGludCBuYnVybiwgYnVybiA9IDA7CisKKyAgaWYgKGN0eC0+dW51c2VkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodm9pZCopY3R4LT5wYWQ7CisgICAgICBzaXplX3QgbjsKKworICAgICAgZ2NyeV9hc3NlcnQgKGN0eC0+dW51c2VkIDwgU0FMU0EyMF9CTE9DS19TSVpFKTsKKworICAgICAgbiA9IGN0eC0+dW51c2VkOworICAgICAgaWYgKG4gPiBsZW5ndGgpCisgICAgICAgIG4gPSBsZW5ndGg7CisgICAgICBidWZfeG9yIChvdXRidWYsIGluYnVmLCBwICsgU0FMU0EyMF9CTE9DS19TSVpFIC0gY3R4LT51bnVzZWQsIG4pOworICAgICAgbGVuZ3RoIC09IG47CisgICAgICBvdXRidWYgKz0gbjsKKyAgICAgIGluYnVmICArPSBuOworICAgICAgY3R4LT51bnVzZWQgLT0gbjsKKyAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgICBnY3J5X2Fzc2VydCAoIWN0eC0+dW51c2VkKTsKKyAgICB9CisKKyNpZmRlZiBVU0VfQU1ENjQKKyAgaWYgKGxlbmd0aCA+PSBTQUxTQTIwX0JMT0NLX1NJWkUpCisgICAgeworICAgICAgc2l6ZV90IG5ibG9ja3MgPSBsZW5ndGggLyBTQUxTQTIwX0JMT0NLX1NJWkU7CisgICAgICBidXJuID0gX2djcnlfc2Fsc2EyMF9hbWQ2NF9lbmNyeXB0X2Jsb2NrcyhjdHgtPmlucHV0LCBpbmJ1Ziwgb3V0YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJsb2Nrcywgcm91bmRzKTsKKyAgICAgIGxlbmd0aCAtPSBTQUxTQTIwX0JMT0NLX1NJWkUgKiBuYmxvY2tzOworICAgICAgb3V0YnVmICs9IFNBTFNBMjBfQkxPQ0tfU0laRSAqIG5ibG9ja3M7CisgICAgICBpbmJ1ZiAgKz0gU0FMU0EyMF9CTE9DS19TSVpFICogbmJsb2NrczsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9BUk1fTkVPTl9BU00KKyAgaWYgKGN0eC0+dXNlX25lb24gJiYgbGVuZ3RoID49IFNBTFNBMjBfQkxPQ0tfU0laRSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgbmJsb2NrcyA9IGxlbmd0aCAvIFNBTFNBMjBfQkxPQ0tfU0laRTsKKyAgICAgIF9nY3J5X2FybV9uZW9uX3NhbHNhMjBfZW5jcnlwdCAob3V0YnVmLCBpbmJ1ZiwgbmJsb2NrcywgY3R4LT5pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRzKTsKKyAgICAgIGxlbmd0aCAtPSBTQUxTQTIwX0JMT0NLX1NJWkUgKiBuYmxvY2tzOworICAgICAgb3V0YnVmICs9IFNBTFNBMjBfQkxPQ0tfU0laRSAqIG5ibG9ja3M7CisgICAgICBpbmJ1ZiAgKz0gU0FMU0EyMF9CTE9DS19TSVpFICogbmJsb2NrczsKKyAgICB9CisjZW5kaWYKKworICB3aGlsZSAobGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAvKiBDcmVhdGUgdGhlIG5leHQgcGFkIGFuZCBidW1wIHRoZSBibG9jayBjb3VudGVyLiAgTm90ZSB0aGF0IGl0CisgICAgICAgICBpcyB0aGUgdXNlcidzIGR1dHkgdG8gY2hhbmdlIHRvIGFub3RoZXIgbm9uY2Ugbm90IGxhdGVyIHRoYW4KKyAgICAgICAgIGFmdGVyIDJeNzAgcHJvY2Vzc2VkIGJ5dGVzLiAgKi8KKyAgICAgIG5idXJuID0gY3R4LT5jb3JlIChjdHgtPnBhZCwgY3R4LCByb3VuZHMpOworICAgICAgYnVybiA9IG5idXJuID4gYnVybiA/IG5idXJuIDogYnVybjsKKworICAgICAgaWYgKGxlbmd0aCA8PSBTQUxTQTIwX0JMT0NLX1NJWkUpCisJeworCSAgYnVmX3hvciAob3V0YnVmLCBpbmJ1ZiwgY3R4LT5wYWQsIGxlbmd0aCk7CisgICAgICAgICAgY3R4LT51bnVzZWQgPSBTQUxTQTIwX0JMT0NLX1NJWkUgLSBsZW5ndGg7CisJICBicmVhazsKKwl9CisgICAgICBidWZfeG9yIChvdXRidWYsIGluYnVmLCBjdHgtPnBhZCwgU0FMU0EyMF9CTE9DS19TSVpFKTsKKyAgICAgIGxlbmd0aCAtPSBTQUxTQTIwX0JMT0NLX1NJWkU7CisgICAgICBvdXRidWYgKz0gU0FMU0EyMF9CTE9DS19TSVpFOworICAgICAgaW5idWYgICs9IFNBTFNBMjBfQkxPQ0tfU0laRTsKKyAgICB9CisKKyAgX2djcnlfYnVybl9zdGFjayAoYnVybik7Cit9CisKKworc3RhdGljIHZvaWQKK3NhbHNhMjBfZW5jcnlwdF9zdHJlYW0gKHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgbGVuZ3RoKQoreworICBTQUxTQTIwX2NvbnRleHRfdCAqY3R4ID0gKFNBTFNBMjBfY29udGV4dF90ICopY29udGV4dDsKKworICBpZiAobGVuZ3RoKQorICAgIHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0gKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgbGVuZ3RoLCBTQUxTQTIwX1JPVU5EUyk7Cit9CisKKworc3RhdGljIHZvaWQKK3NhbHNhMjByMTJfZW5jcnlwdF9zdHJlYW0gKHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmLCBzaXplX3QgbGVuZ3RoKQoreworICBTQUxTQTIwX2NvbnRleHRfdCAqY3R4ID0gKFNBTFNBMjBfY29udGV4dF90ICopY29udGV4dDsKKworICBpZiAobGVuZ3RoKQorICAgIHNhbHNhMjBfZG9fZW5jcnlwdF9zdHJlYW0gKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgbGVuZ3RoLCBTQUxTQTIwUjEyX1JPVU5EUyk7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdCAodm9pZCkKK3sKKyAgU0FMU0EyMF9jb250ZXh0X3QgY3R4OworICBieXRlIHNjcmF0Y2hbOCsxXTsKKyAgYnl0ZSBidWZbMjU2KzY0KzRdOworICBpbnQgaTsKKworICBzdGF0aWMgYnl0ZSBrZXlfMVtdID0KKyAgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKyAgc3RhdGljIGNvbnN0IGJ5dGUgbm9uY2VfMVtdID0KKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKyAgc3RhdGljIGNvbnN0IGJ5dGUgcGxhaW50ZXh0XzFbXSA9CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcnRleHRfMVtdID0KKyAgICB7IDB4RTMsIDB4QkUsIDB4OEYsIDB4REQsIDB4OEIsIDB4RUMsIDB4QTIsIDB4RTN9OworCisgIHNhbHNhMjBfc2V0a2V5ICgmY3R4LCBrZXlfMSwgc2l6ZW9mIGtleV8xKTsKKyAgc2Fsc2EyMF9zZXRpdiAgKCZjdHgsIG5vbmNlXzEsIHNpemVvZiBub25jZV8xKTsKKyAgc2NyYXRjaFs4XSA9IDA7CisgIHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0gKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dF8xLCBzaXplb2YgcGxhaW50ZXh0XzEpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBjaXBoZXJ0ZXh0XzEsIHNpemVvZiBjaXBoZXJ0ZXh0XzEpKQorICAgIHJldHVybiAiU2Fsc2EyMCBlbmNyeXB0aW9uIHRlc3QgMSBmYWlsZWQuIjsKKyAgaWYgKHNjcmF0Y2hbOF0pCisgICAgcmV0dXJuICJTYWxzYTIwIHdyb3RlIHRvbyBtdWNoLiI7CisgIHNhbHNhMjBfc2V0a2V5KCAmY3R4LCBrZXlfMSwgc2l6ZW9mKGtleV8xKSk7CisgIHNhbHNhMjBfc2V0aXYgICgmY3R4LCBub25jZV8xLCBzaXplb2Ygbm9uY2VfMSk7CisgIHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0gKCZjdHgsIHNjcmF0Y2gsIHNjcmF0Y2gsIHNpemVvZiBwbGFpbnRleHRfMSk7CisgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIHBsYWludGV4dF8xLCBzaXplb2YgcGxhaW50ZXh0XzEpKQorICAgIHJldHVybiAiU2Fsc2EyMCBkZWNyeXB0aW9uIHRlc3QgMSBmYWlsZWQuIjsKKworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGJ1ZjsgaSsrKQorICAgIGJ1ZltpXSA9IGk7CisgIHNhbHNhMjBfc2V0a2V5ICgmY3R4LCBrZXlfMSwgc2l6ZW9mIGtleV8xKTsKKyAgc2Fsc2EyMF9zZXRpdiAoJmN0eCwgbm9uY2VfMSwgc2l6ZW9mIG5vbmNlXzEpOworICAvKmVuY3J5cHQqLworICBzYWxzYTIwX2VuY3J5cHRfc3RyZWFtICgmY3R4LCBidWYsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisgIC8qZGVjcnlwdCovCisgIHNhbHNhMjBfc2V0a2V5ICgmY3R4LCBrZXlfMSwgc2l6ZW9mIGtleV8xKTsKKyAgc2Fsc2EyMF9zZXRpdiAoJmN0eCwgbm9uY2VfMSwgc2l6ZW9mIG5vbmNlXzEpOworICBzYWxzYTIwX2VuY3J5cHRfc3RyZWFtICgmY3R4LCBidWYsIGJ1ZiwgMSk7CisgIHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0gKCZjdHgsIGJ1ZisxLCBidWYrMSwgKHNpemVvZiBidWYpLTEtMSk7CisgIHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0gKCZjdHgsIGJ1Zisoc2l6ZW9mIGJ1ZiktMSwgYnVmKyhzaXplb2YgYnVmKS0xLCAxKTsKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiBidWY7IGkrKykKKyAgICBpZiAoYnVmW2ldICE9IChieXRlKWkpCisgICAgICByZXR1cm4gIlNhbHNhMjAgZW5jcnlwdGlvbiB0ZXN0IDIgZmFpbGVkLiI7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX3NhbHNhMjAgPQorICB7CisgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCwKKyAgICB7MCwgMH0sICAgICAvKiBmbGFncyAqLworICAgICJTQUxTQTIwIiwgIC8qIG5hbWUgKi8KKyAgICBOVUxMLCAgICAgICAvKiBhbGlhc2VzICovCisgICAgTlVMTCwgICAgICAgLyogb2lkcyAqLworICAgIDEsICAgICAgICAgIC8qIGJsb2Nrc2l6ZSBpbiBieXRlcy4gKi8KKyAgICBTQUxTQTIwX01BWF9LRVlfU0laRSo4LCAgLyogc3RhbmRhcmQga2V5IGxlbmd0aCBpbiBiaXRzLiAqLworICAgIHNpemVvZiAoU0FMU0EyMF9jb250ZXh0X3QpLAorICAgIHNhbHNhMjBfc2V0a2V5LAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBzYWxzYTIwX2VuY3J5cHRfc3RyZWFtLAorICAgIHNhbHNhMjBfZW5jcnlwdF9zdHJlYW0sCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIHNhbHNhMjBfc2V0aXYKKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX3NhbHNhMjByMTIgPQorICB7CisgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwKKyAgICB7MCwgMH0sICAgICAvKiBmbGFncyAqLworICAgICJTQUxTQTIwUjEyIiwgIC8qIG5hbWUgKi8KKyAgICBOVUxMLCAgICAgICAvKiBhbGlhc2VzICovCisgICAgTlVMTCwgICAgICAgLyogb2lkcyAqLworICAgIDEsICAgICAgICAgIC8qIGJsb2Nrc2l6ZSBpbiBieXRlcy4gKi8KKyAgICBTQUxTQTIwX01BWF9LRVlfU0laRSo4LCAgLyogc3RhbmRhcmQga2V5IGxlbmd0aCBpbiBiaXRzLiAqLworICAgIHNpemVvZiAoU0FMU0EyMF9jb250ZXh0X3QpLAorICAgIHNhbHNhMjBfc2V0a2V5LAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBzYWxzYTIwcjEyX2VuY3J5cHRfc3RyZWFtLAorICAgIHNhbHNhMjByMTJfZW5jcnlwdF9zdHJlYW0sCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIHNhbHNhMjBfc2V0aXYKKyAgfTsKZGlmZiAtLWdpdCBhL2NpcGhlci9zY3J5cHQuYyBiL2NpcGhlci9zY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ5NDNkCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3NjcnlwdC5jCkBAIC0wLDAgKzEsMzI0IEBACisvKiBzY3J5cHQuYyAtIFNjcnlwdCBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTaW1vbiBKb3NlZnNzb24KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDaHJpc3RpYW4gR3JvdGhvZmYKKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIEFkYXB0ZWQgZnJvbSB0aGUgbmV0dGxlLCBsb3ctbGV2ZWwgY3J5cHRvZ3JhcGhpY3MgbGlicmFyeSBmb3IKKyAqIGxpYmdjcnlwdCBieSBDaHJpc3RpYW4gR3JvdGhvZmY7IG9yaWdpbmFsIGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNpbW9uIEpvc2Vmc3NvbgorICoKKyAqIFRoZSBuZXR0bGUgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIG5ldHRsZSBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoZSBuZXR0bGUgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImtkZi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKworLyogV2UgcmVhbGx5IG5lZWQgYSA2NCBiaXQgdHlwZSBmb3IgdGhpcyBjb2RlLiAgKi8KKyNpZmRlZiBIQVZFX1U2NF9UWVBFREVGCisKKyNkZWZpbmUgU0FMU0EyMF9JTlBVVF9MRU5HVEggMTYKKworI2RlZmluZSBST1RMMzIobix4KSAoKCh4KTw8KG4pKSB8ICgoeCk+PigzMi0obikpKSkKKworCisvKiBSZWFkcyBhIDY0LWJpdCBpbnRlZ2VyLCBpbiBuZXR3b3JrLCBiaWctZW5kaWFuLCBieXRlIG9yZGVyICovCisjZGVmaW5lIFJFQURfVUlOVDY0KHApIGJ1Zl9nZXRfYmU2NChwKQorCisKKy8qIEFuZCB0aGUgb3RoZXIsIGxpdHRsZS1lbmRpYW4sIGJ5dGVvcmRlciAqLworI2RlZmluZSBMRV9SRUFEX1VJTlQ2NChwKSBidWZfZ2V0X2xlNjQocCkKKworI2RlZmluZSBMRV9TV0FQMzIodikgbGVfYnN3YXAzMih2KQorCisKKyNkZWZpbmUgUVJPVU5EKHgwLCB4MSwgeDIsIHgzKSBkbyB7IFwKKyAgeDEgXj0gUk9UTDMyKDcsIHgwICsgeDMpOwkgICAgXAorICB4MiBePSBST1RMMzIoOSwgeDEgKyB4MCk7CSAgICBcCisgIHgzIF49IFJPVEwzMigxMywgeDIgKyB4MSk7CSAgICBcCisgIHgwIF49IFJPVEwzMigxOCwgeDMgKyB4Mik7CSAgICBcCisgIH0gd2hpbGUoMCkKKworCitzdGF0aWMgdm9pZAorX3NhbHNhMjBfY29yZSh1MzIgKmRzdCwgY29uc3QgdTMyICpzcmMsIHVuc2lnbmVkIHJvdW5kcykKK3sKKyAgdTMyIHhbU0FMU0EyMF9JTlBVVF9MRU5HVEhdOworICB1bnNpZ25lZCBpOworCisgIGFzc2VydCAoIChyb3VuZHMgJiAxKSA9PSAwKTsKKworICBmb3IgKGkgPSAwOyBpIDwgU0FMU0EyMF9JTlBVVF9MRU5HVEg7IGkrKykKKyAgICB4W2ldID0gTEVfU1dBUDMyKHNyY1tpXSk7CisKKyAgZm9yIChpID0gMDsgaSA8IHJvdW5kcztpICs9IDIpCisgICAgeworICAgICAgUVJPVU5EKHhbMF0sIHhbNF0sIHhbOF0sIHhbMTJdKTsKKyAgICAgIFFST1VORCh4WzVdLCB4WzldLCB4WzEzXSwgeFsxXSk7CisgICAgICBRUk9VTkQoeFsxMF0sIHhbMTRdLCB4WzJdLCB4WzZdKTsKKyAgICAgIFFST1VORCh4WzE1XSwgeFszXSwgeFs3XSwgeFsxMV0pOworCisgICAgICBRUk9VTkQoeFswXSwgeFsxXSwgeFsyXSwgeFszXSk7CisgICAgICBRUk9VTkQoeFs1XSwgeFs2XSwgeFs3XSwgeFs0XSk7CisgICAgICBRUk9VTkQoeFsxMF0sIHhbMTFdLCB4WzhdLCB4WzldKTsKKyAgICAgIFFST1VORCh4WzE1XSwgeFsxMl0sIHhbMTNdLCB4WzE0XSk7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBTQUxTQTIwX0lOUFVUX0xFTkdUSDsgaSsrKQorICAgIHsKKyAgICAgIHUzMiB0ID0geFtpXSArIExFX1NXQVAzMihzcmNbaV0pOworICAgICAgZHN0W2ldID0gTEVfU1dBUDMyKHQpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorX3NjcnlwdEJsb2NrTWl4ICh1MzIgciwgdW5zaWduZWQgY2hhciAqQiwgdW5zaWduZWQgY2hhciAqdG1wMikKK3sKKyAgdTY0IGk7CisgIHVuc2lnbmVkIGNoYXIgKlggPSB0bXAyOworICB1bnNpZ25lZCBjaGFyICpZID0gdG1wMiArIDY0OworCisjaWYgMAorICBpZiAociA9PSAxKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAyICogcjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGo7CisgICAgICAgICAgcHJpbnRmICgiQlslZF0gPSAiLCAoaW50KWkpOworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoaiAmJiAhKGogJSAxNikpCisgICAgICAgICAgICAgICAgcHJpbnRmICgiXG4gICAgICAgIik7CisgICAgICAgICAgICAgIHByaW50ZiAoIiAlMDJ4IiwgQltpICogNjQgKyBqXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAvKiBYID0gQlsyICogciAtIDFdICovCisgIG1lbWNweSAoWCwgJkJbKDIgKiByIC0gMSkgKiA2NF0sIDY0KTsKKworICAvKiBmb3IgaSA9IDAgdG8gMiAqIHIgLSAxIGRvICovCisgIGZvciAoaSA9IDA7IGkgPD0gMiAqIHIgLSAxOyBpKyspCisgICAgeworICAgICAgLyogVCA9IFggeG9yIEJbaV0gKi8KKyAgICAgIGJ1Zl94b3IoWCwgWCwgJkJbaSAqIDY0XSwgNjQpOworCisgICAgICAvKiBYID0gU2Fsc2EgKFQpICovCisgICAgICBfc2Fsc2EyMF9jb3JlICgodTMyKilYLCAodTMyKilYLCA4KTsKKworICAgICAgLyogWVtpXSA9IFggKi8KKyAgICAgIG1lbWNweSAoJllbaSAqIDY0XSwgWCwgNjQpOworICAgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgcjsgaSsrKQorICAgIHsKKyAgICAgIG1lbWNweSAoJkJbaSAqIDY0XSwgJllbMiAqIGkgKiA2NF0sIDY0KTsKKyAgICAgIG1lbWNweSAoJkJbKHIgKyBpKSAqIDY0XSwgJllbKDIgKiBpICsgMSkgKiA2NF0sIDY0KTsKKyAgICB9CisKKyNpZiAwCisgIGlmIChyPT0xKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAyICogcjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGo7CisgICAgICAgICAgcHJpbnRmICgiQidbJWRdID0iLCAoaW50KWkpOworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoaiAmJiAhKGogJSAxNikpCisgICAgICAgICAgICAgICAgcHJpbnRmICgiXG4gICAgICAgIik7CisgICAgICAgICAgICAgIHByaW50ZiAoIiAlMDJ4IiwgQltpICogNjQgKyBqXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK19zY3J5cHRST01peCAodTMyIHIsIHVuc2lnbmVkIGNoYXIgKkIsIHU2NCBOLAorCSAgICAgIHVuc2lnbmVkIGNoYXIgKnRtcDEsIHVuc2lnbmVkIGNoYXIgKnRtcDIpCit7CisgIHVuc2lnbmVkIGNoYXIgKlggPSBCLCAqVCA9IEI7CisgIHU2NCBpOworCisjaWYgMAorICBpZiAociA9PSAxKQorICAgIHsKKyAgICAgIHByaW50ZiAoIkIgPSAiKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjggKiByOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaSAmJiAhKGkgJSAxNikpCisgICAgICAgICAgICBwcmludGYgKCJcbiAgICAiKTsKKyAgICAgICAgICBwcmludGYgKCIgJTAyeCIsIEJbaV0pOworICAgICAgICB9CisgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICB9CisjZW5kaWYKKworICAvKiBmb3IgaSA9IDAgdG8gTiAtIDEgZG8gKi8KKyAgZm9yIChpID0gMDsgaSA8PSBOIC0gMTsgaSsrKQorICAgIHsKKyAgICAgIC8qIFZbaV0gPSBYICovCisgICAgICBtZW1jcHkgKCZ0bXAxW2kgKiAxMjggKiByXSwgWCwgMTI4ICogcik7CisKKyAgICAgIC8qIFggPSAgU2NyeXB0QmxvY2tNaXggKFgpICovCisgICAgICBfc2NyeXB0QmxvY2tNaXggKHIsIFgsIHRtcDIpOworICAgIH0KKworICAvKiBmb3IgaSA9IDAgdG8gTiAtIDEgZG8gKi8KKyAgZm9yIChpID0gMDsgaSA8PSBOIC0gMTsgaSsrKQorICAgIHsKKyAgICAgIHU2NCBqOworCisgICAgICAvKiBqID0gSW50ZWdlcmlmeSAoWCkgbW9kIE4gKi8KKyAgICAgIGogPSBMRV9SRUFEX1VJTlQ2NCAoJlhbMTI4ICogciAtIDY0XSkgJSBOOworCisgICAgICAvKiBUID0gWCB4b3IgVltqXSAqLworICAgICAgYnVmX3hvciAoVCwgVCwgJnRtcDFbaiAqIDEyOCAqIHJdLCAxMjggKiByKTsKKworICAgICAgLyogWCA9IHNjcnlwdEJsb2NrTWl4IChUKSAqLworICAgICAgX3NjcnlwdEJsb2NrTWl4IChyLCBULCB0bXAyKTsKKyAgICB9CisKKyNpZiAwCisgIGlmIChyID09IDEpCisgICAgeworICAgICAgcHJpbnRmICgiQicgPSIpOworICAgICAgZm9yIChpID0gMDsgaSA8IDEyOCAqIHI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChpICYmICEoaSAlIDE2KSkKKyAgICAgICAgICAgIHByaW50ZiAoIlxuICAgICIpOworICAgICAgICAgIHByaW50ZiAoIiAlMDJ4IiwgQltpXSk7CisgICAgICAgIH0KKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgIH0KKyNlbmRpZgorfQorCisvKioKKyAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9rZGZfc2NyeXB0IChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHNpemVfdCBwYXNzd2RsZW4sCisgICAgICAgICAgICAgICAgICBpbnQgYWxnbywgaW50IHN1YmFsZ28sCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBzaXplX3Qgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBka0xlbiwgdW5zaWduZWQgY2hhciAqREspCit7CisgIHU2NCBOID0gc3ViYWxnbzsgICAgLyogQ1BVL21lbW9yeSBjb3N0IHBhcmFtdGVyLiAgKi8KKyAgdTMyIHI7ICAgICAgICAgICAgICAvKiBCbG9jayBzaXplLiAgKi8KKyAgdTMyIHAgPSBpdGVyYXRpb25zOyAvKiBQYXJhbGxlbGl6YXRpb24gcGFyYW1ldGVyLiAgKi8KKworICBncGdfZXJyX2NvZGVfdCBlYzsKKyAgdTMyIGk7CisgIHVuc2lnbmVkIGNoYXIgKkIgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICp0bXAxID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqdG1wMiA9IE5VTEw7CisgIHNpemVfdCByMTI4OworICBzaXplX3QgbmJ5dGVzOworCisgIGlmIChzdWJhbGdvIDwgMSB8fCAhaXRlcmF0aW9ucykKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfVkFMVUU7CisKKyAgaWYgKGFsZ28gPT0gR0NSWV9LREZfU0NSWVBUKQorICAgIHIgPSA4OworICBlbHNlIGlmIChhbGdvID09IDQxKSAvKiBIYWNrIHRvIGFsbG93IHRoZSB1c2Ugb2YgYWxsIHRlc3QgdmVjdG9ycy4gICovCisgICAgciA9IDE7CisgIGVsc2UKKyAgICByZXR1cm4gR1BHX0VSUl9VTktOT1dOX0FMR09SSVRITTsKKworICByMTI4ID0gciAqIDEyODsKKyAgaWYgKHIxMjggLyAxMjggIT0gcikKKyAgICByZXR1cm4gR1BHX0VSUl9FTk9NRU07CisKKyAgbmJ5dGVzID0gcCAqIHIxMjg7CisgIGlmIChyMTI4ICYmIG5ieXRlcyAvIHIxMjggIT0gcCkKKyAgICByZXR1cm4gR1BHX0VSUl9FTk9NRU07CisKKyAgbmJ5dGVzID0gTiAqIHIxMjg7CisgIGlmIChyMTI4ICYmIG5ieXRlcyAvIHIxMjggIT0gTikKKyAgICByZXR1cm4gR1BHX0VSUl9FTk9NRU07CisKKyAgbmJ5dGVzID0gNjQgKyByMTI4OworICBpZiAobmJ5dGVzIDwgcjEyOCkKKyAgICByZXR1cm4gR1BHX0VSUl9FTk9NRU07CisKKyAgQiA9IHh0cnltYWxsb2MgKHAgKiByMTI4KTsKKyAgaWYgKCFCKQorICAgIHsKKyAgICAgIGVjID0gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICB0bXAxID0geHRyeW1hbGxvYyAoTiAqIHIxMjgpOworICBpZiAoIXRtcDEpCisgICAgeworICAgICAgZWMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIHRtcDIgPSB4dHJ5bWFsbG9jICg2NCArIHIxMjgpOworICBpZiAoIXRtcDIpCisgICAgeworICAgICAgZWMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIGVjID0gX2djcnlfa2RmX3BrZGYyIChwYXNzd2QsIHBhc3N3ZGxlbiwgR0NSWV9NRF9TSEEyNTYsIHNhbHQsIHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGl0ZXJhdGlvbnMgKi8sIHAgKiByMTI4LCBCKTsKKworICBmb3IgKGkgPSAwOyAhZWMgJiYgaSA8IHA7IGkrKykKKyAgICBfc2NyeXB0Uk9NaXggKHIsICZCW2kgKiByMTI4XSwgTiwgdG1wMSwgdG1wMik7CisKKyAgZm9yIChpID0gMDsgIWVjICYmIGkgPCBwOyBpKyspCisgICAgZWMgPSBfZ2NyeV9rZGZfcGtkZjIgKHBhc3N3ZCwgcGFzc3dkbGVuLCBHQ1JZX01EX1NIQTI1NiwgQiwgcCAqIHIxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogaXRlcmF0aW9ucyAqLywgZGtMZW4sIERLKTsKKworIGxlYXZlOgorICB4ZnJlZSAodG1wMik7CisgIHhmcmVlICh0bXAxKTsKKyAgeGZyZWUgKEIpOworCisgIHJldHVybiBlYzsKK30KKworCisjZW5kaWYgLyogSEFWRV9VNjRfVFlQRURFRiAqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NlZWQuYyBiL2NpcGhlci9zZWVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4N2MwNQotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zZWVkLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qIFNFRUQgZm9yIGxpYmdjcnlwdAorICoJQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiAtLQorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgcHJvdmlkZWQgZm9yIGxpYmdjcnlwdCBpbiBwdWJsaWMgZG9tYWluCisgKiBieSBIeWUtU2hpayBDaGFuZyA8cGVya3lARnJlZUJTRC5vcmc+LCBKdWx5IDIwMDYuCisgKi8KKwwKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAidHlwZXMuaCIgIC8qIGZvciBieXRlIGFuZCB1MzIgdHlwZWRlZnMgKi8KKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJidWZoZWxwLmgiCisKKyNkZWZpbmUgTlVNS0MJMTYKKworI2RlZmluZSBHRVRVMzIocHQpIGJ1Zl9nZXRfYmUzMihwdCkKKyNkZWZpbmUgUFVUVTMyKGN0LCBzdCkgYnVmX3B1dF9iZTMyKGN0LCBzdCkKKwordW5pb24gd29yZGJ1ZgoreworICB1MzIgdzsKKyAgYnl0ZSBiWzRdOworfTsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBiMCAgYlszXQorI2RlZmluZSBiMSAgYlsyXQorI2RlZmluZSBiMiAgYlsxXQorI2RlZmluZSBiMyAgYlswXQorI2Vsc2UKKyNkZWZpbmUgYjAgIGJbMF0KKyNkZWZpbmUgYjEgIGJbMV0KKyNkZWZpbmUgYjIgIGJbMl0KKyNkZWZpbmUgYjMgIGJbM10KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3Qodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHUzMiBrZXlzY2hlZHVsZVszMl07Cit9IFNFRURfY29udGV4dDsKKworc3RhdGljIGNvbnN0IHUzMiBTUzBbMjU2XSA9IHsKKyAgICAweDI5ODlhMWE4LCAweDA1ODU4MTg0LCAweDE2YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1MDU0LCAweDFkMGQxMTFjLAorICAgIDB4MmM4Y2EwYWMsIDB4MjUwNTIxMjQsIDB4MWQ0ZDUxNWMsIDB4MDM0MzQzNDAsIDB4MTgwODEwMTgsIDB4MWUwZTEyMWMsCisgICAgMHgxMTQxNTE1MCwgMHgzY2NjZjBmYywgMHgwYWNhYzJjOCwgMHgyMzQzNjM2MCwgMHgyODA4MjAyOCwgMHgwNDQ0NDA0NCwKKyAgICAweDIwMDAyMDIwLCAweDFkOGQ5MTljLCAweDIwYzBlMGUwLCAweDIyYzJlMmUwLCAweDA4YzhjMGM4LCAweDE3MDcxMzE0LAorICAgIDB4MjU4NWExYTQsIDB4MGY4ZjgzOGMsIDB4MDMwMzAzMDAsIDB4M2I0YjczNzgsIDB4M2I4YmIzYjgsIDB4MTMwMzEzMTAsCisgICAgMHgxMmMyZDJkMCwgMHgyZWNlZTJlYywgMHgzMDQwNzA3MCwgMHgwYzhjODA4YywgMHgzZjBmMzMzYywgMHgyODg4YTBhOCwKKyAgICAweDMyMDIzMjMwLCAweDFkY2RkMWRjLCAweDM2YzZmMmY0LCAweDM0NDQ3MDc0LCAweDJjY2NlMGVjLCAweDE1ODU5MTk0LAorICAgIDB4MGIwYjAzMDgsIDB4MTc0NzUzNTQsIDB4MWM0YzUwNWMsIDB4MWI0YjUzNTgsIDB4M2Q4ZGIxYmMsIDB4MDEwMTAxMDAsCisgICAgMHgyNDA0MjAyNCwgMHgxYzBjMTAxYywgMHgzMzQzNzM3MCwgMHgxODg4OTA5OCwgMHgxMDAwMTAxMCwgMHgwY2NjYzBjYywKKyAgICAweDMyYzJmMmYwLCAweDE5YzlkMWQ4LCAweDJjMGMyMDJjLCAweDI3YzdlM2U0LCAweDMyNDI3MjcwLCAweDAzODM4MzgwLAorICAgIDB4MWI4YjkzOTgsIDB4MTFjMWQxZDAsIDB4MDY4NjgyODQsIDB4MDljOWMxYzgsIDB4MjA0MDYwNjAsIDB4MTA0MDUwNTAsCisgICAgMHgyMzgzYTNhMCwgMHgyYmNiZTNlOCwgMHgwZDBkMDEwYywgMHgzNjg2YjJiNCwgMHgxZThlOTI5YywgMHgwZjRmNDM0YywKKyAgICAweDM3ODdiM2I0LCAweDFhNGE1MjU4LCAweDA2YzZjMmM0LCAweDM4NDg3MDc4LCAweDI2ODZhMmE0LCAweDEyMDIxMjEwLAorICAgIDB4MmY4ZmEzYWMsIDB4MTVjNWQxZDQsIDB4MjE0MTYxNjAsIDB4MDNjM2MzYzAsIDB4MzQ4NGIwYjQsIDB4MDE0MTQxNDAsCisgICAgMHgxMjQyNTI1MCwgMHgzZDRkNzE3YywgMHgwZDhkODE4YywgMHgwODA4MDAwOCwgMHgxZjBmMTMxYywgMHgxOTg5OTE5OCwKKyAgICAweDAwMDAwMDAwLCAweDE5MDkxMTE4LCAweDA0MDQwMDA0LCAweDEzNDM1MzUwLCAweDM3YzdmM2Y0LCAweDIxYzFlMWUwLAorICAgIDB4M2RjZGYxZmMsIDB4MzY0NjcyNzQsIDB4MmYwZjIzMmMsIDB4MjcwNzIzMjQsIDB4MzA4MGIwYjAsIDB4MGI4YjgzODgsCisgICAgMHgwZTBlMDIwYywgMHgyYjhiYTNhOCwgMHgyMjgyYTJhMCwgMHgyZTRlNjI2YywgMHgxMzgzOTM5MCwgMHgwZDRkNDE0YywKKyAgICAweDI5NDk2MTY4LCAweDNjNGM3MDdjLCAweDA5MDkwMTA4LCAweDBhMGEwMjA4LCAweDNmOGZiM2JjLCAweDJmY2ZlM2VjLAorICAgIDB4MzNjM2YzZjAsIDB4MDVjNWMxYzQsIDB4MDc4NzgzODQsIDB4MTQwNDEwMTQsIDB4M2VjZWYyZmMsIDB4MjQ0NDYwNjQsCisgICAgMHgxZWNlZDJkYywgMHgyZTBlMjIyYywgMHgwYjRiNDM0OCwgMHgxYTBhMTIxOCwgMHgwNjA2MDIwNCwgMHgyMTAxMjEyMCwKKyAgICAweDJiNGI2MzY4LCAweDI2NDY2MjY0LCAweDAyMDIwMjAwLCAweDM1YzVmMWY0LCAweDEyODI5MjkwLCAweDBhOGE4Mjg4LAorICAgIDB4MGMwYzAwMGMsIDB4MzM4M2IzYjAsIDB4M2U0ZTcyN2MsIDB4MTBjMGQwZDAsIDB4M2E0YTcyNzgsIDB4MDc0NzQzNDQsCisgICAgMHgxNjg2OTI5NCwgMHgyNWM1ZTFlNCwgMHgyNjA2MjIyNCwgMHgwMDgwODA4MCwgMHgyZDhkYTFhYywgMHgxZmNmZDNkYywKKyAgICAweDIxODFhMWEwLCAweDMwMDAzMDMwLCAweDM3MDczMzM0LCAweDJlOGVhMmFjLCAweDM2MDYzMjM0LCAweDE1MDUxMTE0LAorICAgIDB4MjIwMjIyMjAsIDB4MzgwODMwMzgsIDB4MzRjNGYwZjQsIDB4Mjc4N2EzYTQsIDB4MDU0NTQxNDQsIDB4MGM0YzQwNGMsCisgICAgMHgwMTgxODE4MCwgMHgyOWM5ZTFlOCwgMHgwNDg0ODA4NCwgMHgxNzg3OTM5NCwgMHgzNTA1MzEzNCwgMHgwYmNiYzNjOCwKKyAgICAweDBlY2VjMmNjLCAweDNjMGMzMDNjLCAweDMxNDE3MTcwLCAweDExMDExMTEwLCAweDA3YzdjM2M0LCAweDA5ODk4MTg4LAorICAgIDB4MzU0NTcxNzQsIDB4M2JjYmYzZjgsIDB4MWFjYWQyZDgsIDB4MzhjOGYwZjgsIDB4MTQ4NDkwOTQsIDB4MTk0OTUxNTgsCisgICAgMHgwMjgyODI4MCwgMHgwNGM0YzBjNCwgMHgzZmNmZjNmYywgMHgwOTQ5NDE0OCwgMHgzOTA5MzEzOCwgMHgyNzQ3NjM2NCwKKyAgICAweDAwYzBjMGMwLCAweDBmY2ZjM2NjLCAweDE3YzdkM2Q0LCAweDM4ODhiMGI4LCAweDBmMGYwMzBjLCAweDBlOGU4MjhjLAorICAgIDB4MDI0MjQyNDAsIDB4MjMwMzIzMjAsIDB4MTE4MTkxOTAsIDB4MmM0YzYwNmMsIDB4MWJjYmQzZDgsIDB4MjQ4NGEwYTQsCisgICAgMHgzNDA0MzAzNCwgMHgzMWMxZjFmMCwgMHgwODQ4NDA0OCwgMHgwMmMyYzJjMCwgMHgyZjRmNjM2YywgMHgzZDBkMzEzYywKKyAgICAweDJkMGQyMTJjLCAweDAwNDA0MDQwLCAweDNlOGViMmJjLCAweDNlMGUzMjNjLCAweDNjOGNiMGJjLCAweDAxYzFjMWMwLAorICAgIDB4MmE4YWEyYTgsIDB4M2E4YWIyYjgsIDB4MGU0ZTQyNGMsIDB4MTU0NTUxNTQsIDB4M2IwYjMzMzgsIDB4MWNjY2QwZGMsCisgICAgMHgyODQ4NjA2OCwgMHgzZjRmNzM3YywgMHgxYzhjOTA5YywgMHgxOGM4ZDBkOCwgMHgwYTRhNDI0OCwgMHgxNjQ2NTI1NCwKKyAgICAweDM3NDc3Mzc0LCAweDIwODBhMGEwLCAweDJkY2RlMWVjLCAweDA2NDY0MjQ0LCAweDM1ODViMWI0LCAweDJiMGIyMzI4LAorICAgIDB4MjU0NTYxNjQsIDB4M2FjYWYyZjgsIDB4MjNjM2UzZTAsIDB4Mzk4OWIxYjgsIDB4MzE4MWIxYjAsIDB4MWY4ZjkzOWMsCisgICAgMHgxZTRlNTI1YywgMHgzOWM5ZjFmOCwgMHgyNmM2ZTJlNCwgMHgzMjgyYjJiMCwgMHgzMTAxMzEzMCwgMHgyYWNhZTJlOCwKKyAgICAweDJkNGQ2MTZjLCAweDFmNGY1MzVjLCAweDI0YzRlMGU0LCAweDMwYzBmMGYwLCAweDBkY2RjMWNjLCAweDA4ODg4MDg4LAorICAgIDB4MTYwNjEyMTQsIDB4M2EwYTMyMzgsIDB4MTg0ODUwNTgsIDB4MTRjNGQwZDQsIDB4MjI0MjYyNjAsIDB4MjkwOTIxMjgsCisgICAgMHgwNzA3MDMwNCwgMHgzMzAzMzMzMCwgMHgyOGM4ZTBlOCwgMHgxYjBiMTMxOCwgMHgwNTA1MDEwNCwgMHgzOTQ5NzE3OCwKKyAgICAweDEwODA5MDkwLCAweDJhNGE2MjY4LCAweDJhMGEyMjI4LCAweDFhOGE5Mjk4LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBTUzFbMjU2XSA9IHsKKyAgICAweDM4MzgwODMwLCAweGU4MjhjOGUwLCAweDJjMmQwZDIxLCAweGE0MjY4NmEyLCAweGNjMGZjZmMzLCAweGRjMWVjZWQyLAorICAgIDB4YjAzMzgzYjMsIDB4YjgzODg4YjAsIDB4YWMyZjhmYTMsIDB4NjAyMDQwNjAsIDB4NTQxNTQ1NTEsIDB4YzQwN2M3YzMsCisgICAgMHg0NDA0NDQ0MCwgMHg2YzJmNGY2MywgMHg2ODJiNGI2MywgMHg1ODFiNGI1MywgMHhjMDAzYzNjMywgMHg2MDIyNDI2MiwKKyAgICAweDMwMzMwMzMzLCAweGI0MzU4NWIxLCAweDI4MjkwOTIxLCAweGEwMjA4MGEwLCAweGUwMjJjMmUyLCAweGE0Mjc4N2EzLAorICAgIDB4ZDAxM2MzZDMsIDB4OTAxMTgxOTEsIDB4MTAxMTAxMTEsIDB4MDQwNjA2MDIsIDB4MWMxYzBjMTAsIDB4YmMzYzhjYjAsCisgICAgMHgzNDM2MDYzMiwgMHg0ODBiNGI0MywgMHhlYzJmY2ZlMywgMHg4ODA4ODg4MCwgMHg2YzJjNGM2MCwgMHhhODI4ODhhMCwKKyAgICAweDE0MTcwNzEzLCAweGM0MDRjNGMwLCAweDE0MTYwNjEyLCAweGY0MzRjNGYwLCAweGMwMDJjMmMyLCAweDQ0MDU0NTQxLAorICAgIDB4ZTAyMWMxZTEsIDB4ZDQxNmM2ZDIsIDB4M2MzZjBmMzMsIDB4M2MzZDBkMzEsIDB4OGMwZThlODIsIDB4OTgxODg4OTAsCisgICAgMHgyODI4MDgyMCwgMHg0YzBlNGU0MiwgMHhmNDM2YzZmMiwgMHgzYzNlMGUzMiwgMHhhNDI1ODVhMSwgMHhmODM5YzlmMSwKKyAgICAweDBjMGQwZDAxLCAweGRjMWZjZmQzLCAweGQ4MThjOGQwLCAweDI4MmIwYjIzLCAweDY0MjY0NjYyLCAweDc4M2E0YTcyLAorICAgIDB4MjQyNzA3MjMsIDB4MmMyZjBmMjMsIDB4ZjAzMWMxZjEsIDB4NzAzMjQyNzIsIDB4NDAwMjQyNDIsIDB4ZDQxNGM0ZDAsCisgICAgMHg0MDAxNDE0MSwgMHhjMDAwYzBjMCwgMHg3MDMzNDM3MywgMHg2NDI3NDc2MywgMHhhYzJjOGNhMCwgMHg4ODBiOGI4MywKKyAgICAweGY0MzdjN2YzLCAweGFjMmQ4ZGExLCAweDgwMDA4MDgwLCAweDFjMWYwZjEzLCAweGM4MGFjYWMyLCAweDJjMmMwYzIwLAorICAgIDB4YTgyYThhYTIsIDB4MzQzNDA0MzAsIDB4ZDAxMmMyZDIsIDB4MDgwYjBiMDMsIDB4ZWMyZWNlZTIsIDB4ZTgyOWM5ZTEsCisgICAgMHg1YzFkNGQ1MSwgMHg5NDE0ODQ5MCwgMHgxODE4MDgxMCwgMHhmODM4YzhmMCwgMHg1NDE3NDc1MywgMHhhYzJlOGVhMiwKKyAgICAweDA4MDgwODAwLCAweGM0MDVjNWMxLCAweDEwMTMwMzEzLCAweGNjMGRjZGMxLCAweDg0MDY4NjgyLCAweGI4Mzk4OWIxLAorICAgIDB4ZmMzZmNmZjMsIDB4N2MzZDRkNzEsIDB4YzAwMWMxYzEsIDB4MzAzMTAxMzEsIDB4ZjQzNWM1ZjEsIDB4ODgwYThhODIsCisgICAgMHg2ODJhNGE2MiwgMHhiMDMxODFiMSwgMHhkMDExYzFkMSwgMHgyMDIwMDAyMCwgMHhkNDE3YzdkMywgMHgwMDAyMDIwMiwKKyAgICAweDIwMjIwMjIyLCAweDA0MDQwNDAwLCAweDY4Mjg0ODYwLCAweDcwMzE0MTcxLCAweDA0MDcwNzAzLCAweGQ4MWJjYmQzLAorICAgIDB4OWMxZDhkOTEsIDB4OTgxOTg5OTEsIDB4NjAyMTQxNjEsIDB4YmMzZThlYjIsIDB4ZTQyNmM2ZTIsIDB4NTgxOTQ5NTEsCisgICAgMHhkYzFkY2RkMSwgMHg1MDExNDE1MSwgMHg5MDEwODA5MCwgMHhkYzFjY2NkMCwgMHg5ODFhOGE5MiwgMHhhMDIzODNhMywKKyAgICAweGE4MmI4YmEzLCAweGQwMTBjMGQwLCAweDgwMDE4MTgxLCAweDBjMGYwZjAzLCAweDQ0MDc0NzQzLCAweDE4MWEwYTEyLAorICAgIDB4ZTAyM2MzZTMsIDB4ZWMyY2NjZTAsIDB4OGMwZDhkODEsIDB4YmMzZjhmYjMsIDB4OTQxNjg2OTIsIDB4NzgzYjRiNzMsCisgICAgMHg1YzFjNGM1MCwgMHhhMDIyODJhMiwgMHhhMDIxODFhMSwgMHg2MDIzNDM2MywgMHgyMDIzMDMyMywgMHg0YzBkNGQ0MSwKKyAgICAweGM4MDhjOGMwLCAweDljMWU4ZTkyLCAweDljMWM4YzkwLCAweDM4M2EwYTMyLCAweDBjMGMwYzAwLCAweDJjMmUwZTIyLAorICAgIDB4YjgzYThhYjIsIDB4NmMyZTRlNjIsIDB4OWMxZjhmOTMsIDB4NTgxYTRhNTIsIDB4ZjAzMmMyZjIsIDB4OTAxMjgyOTIsCisgICAgMHhmMDMzYzNmMywgMHg0ODA5NDk0MSwgMHg3ODM4NDg3MCwgMHhjYzBjY2NjMCwgMHgxNDE1MDUxMSwgMHhmODNiY2JmMywKKyAgICAweDcwMzA0MDcwLCAweDc0MzU0NTcxLCAweDdjM2Y0ZjczLCAweDM0MzUwNTMxLCAweDEwMTAwMDEwLCAweDAwMDMwMzAzLAorICAgIDB4NjQyNDQ0NjAsIDB4NmMyZDRkNjEsIDB4YzQwNmM2YzIsIDB4NzQzNDQ0NzAsIDB4ZDQxNWM1ZDEsIDB4YjQzNDg0YjAsCisgICAgMHhlODJhY2FlMiwgMHgwODA5MDkwMSwgMHg3NDM2NDY3MiwgMHgxODE5MDkxMSwgMHhmYzNlY2VmMiwgMHg0MDAwNDA0MCwKKyAgICAweDEwMTIwMjEyLCAweGUwMjBjMGUwLCAweGJjM2Q4ZGIxLCAweDA0MDUwNTAxLCAweGY4M2FjYWYyLCAweDAwMDEwMTAxLAorICAgIDB4ZjAzMGMwZjAsIDB4MjgyYTBhMjIsIDB4NWMxZTRlNTIsIDB4YTgyOTg5YTEsIDB4NTQxNjQ2NTIsIDB4NDAwMzQzNDMsCisgICAgMHg4NDA1ODU4MSwgMHgxNDE0MDQxMCwgMHg4ODA5ODk4MSwgMHg5ODFiOGI5MywgMHhiMDMwODBiMCwgMHhlNDI1YzVlMSwKKyAgICAweDQ4MDg0ODQwLCAweDc4Mzk0OTcxLCAweDk0MTc4NzkzLCAweGZjM2NjY2YwLCAweDFjMWUwZTEyLCAweDgwMDI4MjgyLAorICAgIDB4MjAyMTAxMjEsIDB4OGMwYzhjODAsIDB4MTgxYjBiMTMsIDB4NWMxZjRmNTMsIDB4NzQzNzQ3NzMsIDB4NTQxNDQ0NTAsCisgICAgMHhiMDMyODJiMiwgMHgxYzFkMGQxMSwgMHgyNDI1MDUyMSwgMHg0YzBmNGY0MywgMHgwMDAwMDAwMCwgMHg0NDA2NDY0MiwKKyAgICAweGVjMmRjZGUxLCAweDU4MTg0ODUwLCAweDUwMTI0MjUyLCAweGU4MmJjYmUzLCAweDdjM2U0ZTcyLCAweGQ4MWFjYWQyLAorICAgIDB4YzgwOWM5YzEsIDB4ZmMzZGNkZjEsIDB4MzAzMDAwMzAsIDB4OTQxNTg1OTEsIDB4NjQyNTQ1NjEsIDB4M2MzYzBjMzAsCisgICAgMHhiNDM2ODZiMiwgMHhlNDI0YzRlMCwgMHhiODNiOGJiMywgMHg3YzNjNGM3MCwgMHgwYzBlMGUwMiwgMHg1MDEwNDA1MCwKKyAgICAweDM4MzkwOTMxLCAweDI0MjYwNjIyLCAweDMwMzIwMjMyLCAweDg0MDQ4NDgwLCAweDY4Mjk0OTYxLCAweDkwMTM4MzkzLAorICAgIDB4MzQzNzA3MzMsIDB4ZTQyN2M3ZTMsIDB4MjQyNDA0MjAsIDB4YTQyNDg0YTAsIDB4YzgwYmNiYzMsIDB4NTAxMzQzNTMsCisgICAgMHgwODBhMGEwMiwgMHg4NDA3ODc4MywgMHhkODE5YzlkMSwgMHg0YzBjNGM0MCwgMHg4MDAzODM4MywgMHg4YzBmOGY4MywKKyAgICAweGNjMGVjZWMyLCAweDM4M2IwYjMzLCAweDQ4MGE0YTQyLCAweGI0Mzc4N2IzLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBTUzJbMjU2XSA9IHsKKyAgICAweGExYTgyOTg5LCAweDgxODQwNTg1LCAweGQyZDQxNmM2LCAweGQzZDAxM2MzLCAweDUwNTQxNDQ0LCAweDExMWMxZDBkLAorICAgIDB4YTBhYzJjOGMsIDB4MjEyNDI1MDUsIDB4NTE1YzFkNGQsIDB4NDM0MDAzNDMsIDB4MTAxODE4MDgsIDB4MTIxYzFlMGUsCisgICAgMHg1MTUwMTE0MSwgMHhmMGZjM2NjYywgMHhjMmM4MGFjYSwgMHg2MzYwMjM0MywgMHgyMDI4MjgwOCwgMHg0MDQ0MDQ0NCwKKyAgICAweDIwMjAyMDAwLCAweDkxOWMxZDhkLCAweGUwZTAyMGMwLCAweGUyZTAyMmMyLCAweGMwYzgwOGM4LCAweDEzMTQxNzA3LAorICAgIDB4YTFhNDI1ODUsIDB4ODM4YzBmOGYsIDB4MDMwMDAzMDMsIDB4NzM3ODNiNGIsIDB4YjNiODNiOGIsIDB4MTMxMDEzMDMsCisgICAgMHhkMmQwMTJjMiwgMHhlMmVjMmVjZSwgMHg3MDcwMzA0MCwgMHg4MDhjMGM4YywgMHgzMzNjM2YwZiwgMHhhMGE4Mjg4OCwKKyAgICAweDMyMzAzMjAyLCAweGQxZGMxZGNkLCAweGYyZjQzNmM2LCAweDcwNzQzNDQ0LCAweGUwZWMyY2NjLCAweDkxOTQxNTg1LAorICAgIDB4MDMwODBiMGIsIDB4NTM1NDE3NDcsIDB4NTA1YzFjNGMsIDB4NTM1ODFiNGIsIDB4YjFiYzNkOGQsIDB4MDEwMDAxMDEsCisgICAgMHgyMDI0MjQwNCwgMHgxMDFjMWMwYywgMHg3MzcwMzM0MywgMHg5MDk4MTg4OCwgMHgxMDEwMTAwMCwgMHhjMGNjMGNjYywKKyAgICAweGYyZjAzMmMyLCAweGQxZDgxOWM5LCAweDIwMmMyYzBjLCAweGUzZTQyN2M3LCAweDcyNzAzMjQyLCAweDgzODAwMzgzLAorICAgIDB4OTM5ODFiOGIsIDB4ZDFkMDExYzEsIDB4ODI4NDA2ODYsIDB4YzFjODA5YzksIDB4NjA2MDIwNDAsIDB4NTA1MDEwNDAsCisgICAgMHhhM2EwMjM4MywgMHhlM2U4MmJjYiwgMHgwMTBjMGQwZCwgMHhiMmI0MzY4NiwgMHg5MjljMWU4ZSwgMHg0MzRjMGY0ZiwKKyAgICAweGIzYjQzNzg3LCAweDUyNTgxYTRhLCAweGMyYzQwNmM2LCAweDcwNzgzODQ4LCAweGEyYTQyNjg2LCAweDEyMTAxMjAyLAorICAgIDB4YTNhYzJmOGYsIDB4ZDFkNDE1YzUsIDB4NjE2MDIxNDEsIDB4YzNjMDAzYzMsIDB4YjBiNDM0ODQsIDB4NDE0MDAxNDEsCisgICAgMHg1MjUwMTI0MiwgMHg3MTdjM2Q0ZCwgMHg4MThjMGQ4ZCwgMHgwMDA4MDgwOCwgMHgxMzFjMWYwZiwgMHg5MTk4MTk4OSwKKyAgICAweDAwMDAwMDAwLCAweDExMTgxOTA5LCAweDAwMDQwNDA0LCAweDUzNTAxMzQzLCAweGYzZjQzN2M3LCAweGUxZTAyMWMxLAorICAgIDB4ZjFmYzNkY2QsIDB4NzI3NDM2NDYsIDB4MjMyYzJmMGYsIDB4MjMyNDI3MDcsIDB4YjBiMDMwODAsIDB4ODM4ODBiOGIsCisgICAgMHgwMjBjMGUwZSwgMHhhM2E4MmI4YiwgMHhhMmEwMjI4MiwgMHg2MjZjMmU0ZSwgMHg5MzkwMTM4MywgMHg0MTRjMGQ0ZCwKKyAgICAweDYxNjgyOTQ5LCAweDcwN2MzYzRjLCAweDAxMDgwOTA5LCAweDAyMDgwYTBhLCAweGIzYmMzZjhmLCAweGUzZWMyZmNmLAorICAgIDB4ZjNmMDMzYzMsIDB4YzFjNDA1YzUsIDB4ODM4NDA3ODcsIDB4MTAxNDE0MDQsIDB4ZjJmYzNlY2UsIDB4NjA2NDI0NDQsCisgICAgMHhkMmRjMWVjZSwgMHgyMjJjMmUwZSwgMHg0MzQ4MGI0YiwgMHgxMjE4MWEwYSwgMHgwMjA0MDYwNiwgMHgyMTIwMjEwMSwKKyAgICAweDYzNjgyYjRiLCAweDYyNjQyNjQ2LCAweDAyMDAwMjAyLCAweGYxZjQzNWM1LCAweDkyOTAxMjgyLCAweDgyODgwYThhLAorICAgIDB4MDAwYzBjMGMsIDB4YjNiMDMzODMsIDB4NzI3YzNlNGUsIDB4ZDBkMDEwYzAsIDB4NzI3ODNhNGEsIDB4NDM0NDA3NDcsCisgICAgMHg5Mjk0MTY4NiwgMHhlMWU0MjVjNSwgMHgyMjI0MjYwNiwgMHg4MDgwMDA4MCwgMHhhMWFjMmQ4ZCwgMHhkM2RjMWZjZiwKKyAgICAweGExYTAyMTgxLCAweDMwMzAzMDAwLCAweDMzMzQzNzA3LCAweGEyYWMyZThlLCAweDMyMzQzNjA2LCAweDExMTQxNTA1LAorICAgIDB4MjIyMDIyMDIsIDB4MzAzODM4MDgsIDB4ZjBmNDM0YzQsIDB4YTNhNDI3ODcsIDB4NDE0NDA1NDUsIDB4NDA0YzBjNGMsCisgICAgMHg4MTgwMDE4MSwgMHhlMWU4MjljOSwgMHg4MDg0MDQ4NCwgMHg5Mzk0MTc4NywgMHgzMTM0MzUwNSwgMHhjM2M4MGJjYiwKKyAgICAweGMyY2MwZWNlLCAweDMwM2MzYzBjLCAweDcxNzAzMTQxLCAweDExMTAxMTAxLCAweGMzYzQwN2M3LCAweDgxODgwOTg5LAorICAgIDB4NzE3NDM1NDUsIDB4ZjNmODNiY2IsIDB4ZDJkODFhY2EsIDB4ZjBmODM4YzgsIDB4OTA5NDE0ODQsIDB4NTE1ODE5NDksCisgICAgMHg4MjgwMDI4MiwgMHhjMGM0MDRjNCwgMHhmM2ZjM2ZjZiwgMHg0MTQ4MDk0OSwgMHgzMTM4MzkwOSwgMHg2MzY0Mjc0NywKKyAgICAweGMwYzAwMGMwLCAweGMzY2MwZmNmLCAweGQzZDQxN2M3LCAweGIwYjgzODg4LCAweDAzMGMwZjBmLCAweDgyOGMwZThlLAorICAgIDB4NDI0MDAyNDIsIDB4MjMyMDIzMDMsIDB4OTE5MDExODEsIDB4NjA2YzJjNGMsIDB4ZDNkODFiY2IsIDB4YTBhNDI0ODQsCisgICAgMHgzMDM0MzQwNCwgMHhmMWYwMzFjMSwgMHg0MDQ4MDg0OCwgMHhjMmMwMDJjMiwgMHg2MzZjMmY0ZiwgMHgzMTNjM2QwZCwKKyAgICAweDIxMmMyZDBkLCAweDQwNDAwMDQwLCAweGIyYmMzZThlLCAweDMyM2MzZTBlLCAweGIwYmMzYzhjLCAweGMxYzAwMWMxLAorICAgIDB4YTJhODJhOGEsIDB4YjJiODNhOGEsIDB4NDI0YzBlNGUsIDB4NTE1NDE1NDUsIDB4MzMzODNiMGIsIDB4ZDBkYzFjY2MsCisgICAgMHg2MDY4Mjg0OCwgMHg3MzdjM2Y0ZiwgMHg5MDljMWM4YywgMHhkMGQ4MThjOCwgMHg0MjQ4MGE0YSwgMHg1MjU0MTY0NiwKKyAgICAweDczNzQzNzQ3LCAweGEwYTAyMDgwLCAweGUxZWMyZGNkLCAweDQyNDQwNjQ2LCAweGIxYjQzNTg1LCAweDIzMjgyYjBiLAorICAgIDB4NjE2NDI1NDUsIDB4ZjJmODNhY2EsIDB4ZTNlMDIzYzMsIDB4YjFiODM5ODksIDB4YjFiMDMxODEsIDB4OTM5YzFmOGYsCisgICAgMHg1MjVjMWU0ZSwgMHhmMWY4MzljOSwgMHhlMmU0MjZjNiwgMHhiMmIwMzI4MiwgMHgzMTMwMzEwMSwgMHhlMmU4MmFjYSwKKyAgICAweDYxNmMyZDRkLCAweDUzNWMxZjRmLCAweGUwZTQyNGM0LCAweGYwZjAzMGMwLCAweGMxY2MwZGNkLCAweDgwODgwODg4LAorICAgIDB4MTIxNDE2MDYsIDB4MzIzODNhMGEsIDB4NTA1ODE4NDgsIDB4ZDBkNDE0YzQsIDB4NjI2MDIyNDIsIDB4MjEyODI5MDksCisgICAgMHgwMzA0MDcwNywgMHgzMzMwMzMwMywgMHhlMGU4MjhjOCwgMHgxMzE4MWIwYiwgMHgwMTA0MDUwNSwgMHg3MTc4Mzk0OSwKKyAgICAweDkwOTAxMDgwLCAweDYyNjgyYTRhLCAweDIyMjgyYTBhLCAweDkyOTgxYThhLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBTUzNbMjU2XSA9IHsKKyAgICAweDA4MzAzODM4LCAweGM4ZTBlODI4LCAweDBkMjEyYzJkLCAweDg2YTJhNDI2LCAweGNmYzNjYzBmLCAweGNlZDJkYzFlLAorICAgIDB4ODNiM2IwMzMsIDB4ODhiMGI4MzgsIDB4OGZhM2FjMmYsIDB4NDA2MDYwMjAsIDB4NDU1MTU0MTUsIDB4YzdjM2M0MDcsCisgICAgMHg0NDQwNDQwNCwgMHg0ZjYzNmMyZiwgMHg0YjYzNjgyYiwgMHg0YjUzNTgxYiwgMHhjM2MzYzAwMywgMHg0MjYyNjAyMiwKKyAgICAweDAzMzMzMDMzLCAweDg1YjFiNDM1LCAweDA5MjEyODI5LCAweDgwYTBhMDIwLCAweGMyZTJlMDIyLCAweDg3YTNhNDI3LAorICAgIDB4YzNkM2QwMTMsIDB4ODE5MTkwMTEsIDB4MDExMTEwMTEsIDB4MDYwMjA0MDYsIDB4MGMxMDFjMWMsIDB4OGNiMGJjM2MsCisgICAgMHgwNjMyMzQzNiwgMHg0YjQzNDgwYiwgMHhjZmUzZWMyZiwgMHg4ODgwODgwOCwgMHg0YzYwNmMyYywgMHg4OGEwYTgyOCwKKyAgICAweDA3MTMxNDE3LCAweGM0YzBjNDA0LCAweDA2MTIxNDE2LCAweGM0ZjBmNDM0LCAweGMyYzJjMDAyLCAweDQ1NDE0NDA1LAorICAgIDB4YzFlMWUwMjEsIDB4YzZkMmQ0MTYsIDB4MGYzMzNjM2YsIDB4MGQzMTNjM2QsIDB4OGU4MjhjMGUsIDB4ODg5MDk4MTgsCisgICAgMHgwODIwMjgyOCwgMHg0ZTQyNGMwZSwgMHhjNmYyZjQzNiwgMHgwZTMyM2MzZSwgMHg4NWExYTQyNSwgMHhjOWYxZjgzOSwKKyAgICAweDBkMDEwYzBkLCAweGNmZDNkYzFmLCAweGM4ZDBkODE4LCAweDBiMjMyODJiLCAweDQ2NjI2NDI2LCAweDRhNzI3ODNhLAorICAgIDB4MDcyMzI0MjcsIDB4MGYyMzJjMmYsIDB4YzFmMWYwMzEsIDB4NDI3MjcwMzIsIDB4NDI0MjQwMDIsIDB4YzRkMGQ0MTQsCisgICAgMHg0MTQxNDAwMSwgMHhjMGMwYzAwMCwgMHg0MzczNzAzMywgMHg0NzYzNjQyNywgMHg4Y2EwYWMyYywgMHg4YjgzODgwYiwKKyAgICAweGM3ZjNmNDM3LCAweDhkYTFhYzJkLCAweDgwODA4MDAwLCAweDBmMTMxYzFmLCAweGNhYzJjODBhLCAweDBjMjAyYzJjLAorICAgIDB4OGFhMmE4MmEsIDB4MDQzMDM0MzQsIDB4YzJkMmQwMTIsIDB4MGIwMzA4MGIsIDB4Y2VlMmVjMmUsIDB4YzllMWU4MjksCisgICAgMHg0ZDUxNWMxZCwgMHg4NDkwOTQxNCwgMHgwODEwMTgxOCwgMHhjOGYwZjgzOCwgMHg0NzUzNTQxNywgMHg4ZWEyYWMyZSwKKyAgICAweDA4MDAwODA4LCAweGM1YzFjNDA1LCAweDAzMTMxMDEzLCAweGNkYzFjYzBkLCAweDg2ODI4NDA2LCAweDg5YjFiODM5LAorICAgIDB4Y2ZmM2ZjM2YsIDB4NGQ3MTdjM2QsIDB4YzFjMWMwMDEsIDB4MDEzMTMwMzEsIDB4YzVmMWY0MzUsIDB4OGE4Mjg4MGEsCisgICAgMHg0YTYyNjgyYSwgMHg4MWIxYjAzMSwgMHhjMWQxZDAxMSwgMHgwMDIwMjAyMCwgMHhjN2QzZDQxNywgMHgwMjAyMDAwMiwKKyAgICAweDAyMjIyMDIyLCAweDA0MDAwNDA0LCAweDQ4NjA2ODI4LCAweDQxNzE3MDMxLCAweDA3MDMwNDA3LCAweGNiZDNkODFiLAorICAgIDB4OGQ5MTljMWQsIDB4ODk5MTk4MTksIDB4NDE2MTYwMjEsIDB4OGViMmJjM2UsIDB4YzZlMmU0MjYsIDB4NDk1MTU4MTksCisgICAgMHhjZGQxZGMxZCwgMHg0MTUxNTAxMSwgMHg4MDkwOTAxMCwgMHhjY2QwZGMxYywgMHg4YTkyOTgxYSwgMHg4M2EzYTAyMywKKyAgICAweDhiYTNhODJiLCAweGMwZDBkMDEwLCAweDgxODE4MDAxLCAweDBmMDMwYzBmLCAweDQ3NDM0NDA3LCAweDBhMTIxODFhLAorICAgIDB4YzNlM2UwMjMsIDB4Y2NlMGVjMmMsIDB4OGQ4MThjMGQsIDB4OGZiM2JjM2YsIDB4ODY5Mjk0MTYsIDB4NGI3Mzc4M2IsCisgICAgMHg0YzUwNWMxYywgMHg4MmEyYTAyMiwgMHg4MWExYTAyMSwgMHg0MzYzNjAyMywgMHgwMzIzMjAyMywgMHg0ZDQxNGMwZCwKKyAgICAweGM4YzBjODA4LCAweDhlOTI5YzFlLCAweDhjOTA5YzFjLCAweDBhMzIzODNhLCAweDBjMDAwYzBjLCAweDBlMjIyYzJlLAorICAgIDB4OGFiMmI4M2EsIDB4NGU2MjZjMmUsIDB4OGY5MzljMWYsIDB4NGE1MjU4MWEsIDB4YzJmMmYwMzIsIDB4ODI5MjkwMTIsCisgICAgMHhjM2YzZjAzMywgMHg0OTQxNDgwOSwgMHg0ODcwNzgzOCwgMHhjY2MwY2MwYywgMHgwNTExMTQxNSwgMHhjYmYzZjgzYiwKKyAgICAweDQwNzA3MDMwLCAweDQ1NzE3NDM1LCAweDRmNzM3YzNmLCAweDA1MzEzNDM1LCAweDAwMTAxMDEwLCAweDAzMDMwMDAzLAorICAgIDB4NDQ2MDY0MjQsIDB4NGQ2MTZjMmQsIDB4YzZjMmM0MDYsIDB4NDQ3MDc0MzQsIDB4YzVkMWQ0MTUsIDB4ODRiMGI0MzQsCisgICAgMHhjYWUyZTgyYSwgMHgwOTAxMDgwOSwgMHg0NjcyNzQzNiwgMHgwOTExMTgxOSwgMHhjZWYyZmMzZSwgMHg0MDQwNDAwMCwKKyAgICAweDAyMTIxMDEyLCAweGMwZTBlMDIwLCAweDhkYjFiYzNkLCAweDA1MDEwNDA1LCAweGNhZjJmODNhLCAweDAxMDEwMDAxLAorICAgIDB4YzBmMGYwMzAsIDB4MGEyMjI4MmEsIDB4NGU1MjVjMWUsIDB4ODlhMWE4MjksIDB4NDY1MjU0MTYsIDB4NDM0MzQwMDMsCisgICAgMHg4NTgxODQwNSwgMHgwNDEwMTQxNCwgMHg4OTgxODgwOSwgMHg4YjkzOTgxYiwgMHg4MGIwYjAzMCwgMHhjNWUxZTQyNSwKKyAgICAweDQ4NDA0ODA4LCAweDQ5NzE3ODM5LCAweDg3OTM5NDE3LCAweGNjZjBmYzNjLCAweDBlMTIxYzFlLCAweDgyODI4MDAyLAorICAgIDB4MDEyMTIwMjEsIDB4OGM4MDhjMGMsIDB4MGIxMzE4MWIsIDB4NGY1MzVjMWYsIDB4NDc3Mzc0MzcsIDB4NDQ1MDU0MTQsCisgICAgMHg4MmIyYjAzMiwgMHgwZDExMWMxZCwgMHgwNTIxMjQyNSwgMHg0ZjQzNGMwZiwgMHgwMDAwMDAwMCwgMHg0NjQyNDQwNiwKKyAgICAweGNkZTFlYzJkLCAweDQ4NTA1ODE4LCAweDQyNTI1MDEyLCAweGNiZTNlODJiLCAweDRlNzI3YzNlLCAweGNhZDJkODFhLAorICAgIDB4YzljMWM4MDksIDB4Y2RmMWZjM2QsIDB4MDAzMDMwMzAsIDB4ODU5MTk0MTUsIDB4NDU2MTY0MjUsIDB4MGMzMDNjM2MsCisgICAgMHg4NmIyYjQzNiwgMHhjNGUwZTQyNCwgMHg4YmIzYjgzYiwgMHg0YzcwN2MzYywgMHgwZTAyMGMwZSwgMHg0MDUwNTAxMCwKKyAgICAweDA5MzEzODM5LCAweDA2MjIyNDI2LCAweDAyMzIzMDMyLCAweDg0ODA4NDA0LCAweDQ5NjE2ODI5LCAweDgzOTM5MDEzLAorICAgIDB4MDczMzM0MzcsIDB4YzdlM2U0MjcsIDB4MDQyMDI0MjQsIDB4ODRhMGE0MjQsIDB4Y2JjM2M4MGIsIDB4NDM1MzUwMTMsCisgICAgMHgwYTAyMDgwYSwgMHg4NzgzODQwNywgMHhjOWQxZDgxOSwgMHg0YzQwNGMwYywgMHg4MzgzODAwMywgMHg4ZjgzOGMwZiwKKyAgICAweGNlYzJjYzBlLCAweDBiMzMzODNiLCAweDRhNDI0ODBhLCAweDg3YjNiNDM3LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBLQ1tOVU1LQ10gPSB7CisgICAgMHg5ZTM3NzliOSwgMHgzYzZlZjM3MywgMHg3OGRkZTZlNiwgMHhmMWJiY2RjYywKKyAgICAweGUzNzc5Yjk5LCAweGM2ZWYzNzMzLCAweDhkZGU2ZTY3LCAweDFiYmNkY2NmLAorICAgIDB4Mzc3OWI5OWUsIDB4NmVmMzczM2MsIDB4ZGRlNmU2NzgsIDB4YmJjZGNjZjEsCisgICAgMHg3NzliOTllMywgMHhlZjM3MzNjNiwgMHhkZTZlNjc4ZCwgMHhiY2RjY2YxYiwKK307CisMCisKKworLyogUGVyZm9ybSB0aGUga2V5IHNldHVwLgorICovCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90Citkb19zZXRrZXkgKFNFRURfY29udGV4dCAqY3R4LCBjb25zdCBieXRlICprZXksIGNvbnN0IHVuc2lnbmVkIGtleWxlbikKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisgIHN0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdF9mYWlsZWQ9MDsKKyAgdTMyIHgxLCB4MiwgeDMsIHg0OworICB1bmlvbiB3b3JkYnVmIHQwLCB0MTsKKyAgdTMyICprZXlvdXQgPSBjdHgtPmtleXNjaGVkdWxlOworICBpbnQgaTsKKworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0ICgpOworICAgICAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisgICAgICAgIGxvZ19lcnJvciAoIiVzXG4iLCBzZWxmdGVzdF9mYWlsZWQgKTsKKyAgICB9CisgIGlmIChzZWxmdGVzdF9mYWlsZWQpCisgICAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworCisgIGlmIChrZXlsZW4gIT0gMTYpCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICB4MSA9IEdFVFUzMiAoa2V5KTsKKyAgeDIgPSBHRVRVMzIgKGtleSs0KTsKKyAgeDMgPSBHRVRVMzIgKGtleSs4KTsKKyAgeDQgPSBHRVRVMzIgKGtleSsxMik7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTUtDOyBpKyspCisgICAgeworICAgICAgdDAudyA9IHgxICsgeDMgLSBLQ1tpXTsKKyAgICAgIHQxLncgPSB4MiArIEtDW2ldIC0geDQ7CisgICAgICAqKGtleW91dCsrKSA9IFNTMFt0MC5iMF0gXiBTUzFbdDAuYjFdIF4gU1MyW3QwLmIyXSBeIFNTM1t0MC5iM107CisgICAgICAqKGtleW91dCsrKSA9IFNTMFt0MS5iMF0gXiBTUzFbdDEuYjFdIF4gU1MyW3QxLmIyXSBeIFNTM1t0MS5iM107CisKKyAgICAgIGlmIChpICUgMiA9PSAwKQorCXsKKwkgIHQwLncgPSB4MTsKKwkgIHgxID0gKHgxPj44KSBeICh4Mjw8MjQpOworCSAgeDIgPSAoeDI+PjgpIF4gKHQwLnc8PDI0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdDAudyA9IHgzOworCSAgeDMgPSAoeDM8PDgpIF4gKHg0Pj4yNCk7CisJICB4NCA9ICh4NDw8OCkgXiAodDAudz4+MjQpOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3NlZWRfc2V0a2V5ICh2b2lkICpjb250ZXh0LCBjb25zdCBieXRlICprZXksIGNvbnN0IHVuc2lnbmVkIGtleWxlbikKK3sKKyAgU0VFRF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisgIGludCByYyA9IGRvX3NldGtleSAoY3R4LCBrZXksIGtleWxlbik7CisgIF9nY3J5X2J1cm5fc3RhY2sgKDQqNiArIHNpemVvZih2b2lkKikqMiArIHNpemVvZihpbnQpKjIpOworICByZXR1cm4gcmM7Cit9CisKKworDAorI2RlZmluZSBPUChYMSwgWDIsIFgzLCBYNCwgcmJhc2UpCQkJCVwKKyAgICB0MC53ID0gWDMgXiBjdHgtPmtleXNjaGVkdWxlW3JiYXNlXTsJCQlcCisgICAgdDEudyA9IFg0IF4gY3R4LT5rZXlzY2hlZHVsZVtyYmFzZSsxXTsJCQlcCisgICAgdDEudyBePSB0MC53OwkJCQkJCVwKKyAgICB0MS53ID0gU1MwW3QxLmIwXSBeIFNTMVt0MS5iMV0gXiBTUzJbdDEuYjJdIF4gU1MzW3QxLmIzXTsJXAorICAgIHQwLncgKz0gdDEudzsJCQkJCQlcCisgICAgdDAudyA9IFNTMFt0MC5iMF0gXiBTUzFbdDAuYjFdIF4gU1MyW3QwLmIyXSBeIFNTM1t0MC5iM107CVwKKyAgICB0MS53ICs9IHQwLnc7CQkJCQkJXAorICAgIHQxLncgPSBTUzBbdDEuYjBdIF4gU1MxW3QxLmIxXSBeIFNTMlt0MS5iMl0gXiBTUzNbdDEuYjNdOwlcCisgICAgdDAudyArPSB0MS53OwkJCQkJCVwKKyAgICBYMSBePSB0MC53OwkJCQkJCQlcCisgICAgWDIgXj0gdDEudzsKKworLyogRW5jcnlwdCBvbmUgYmxvY2suICBpbmJ1ZiBhbmQgb3V0YnVmIG1heSBiZSB0aGUgc2FtZS4gKi8KK3N0YXRpYyB2b2lkCitkb19lbmNyeXB0IChjb25zdCBTRUVEX2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgdTMyIHgxLCB4MiwgeDMsIHg0OworICB1bmlvbiB3b3JkYnVmIHQwLCB0MTsKKworICB4MSA9IEdFVFUzMiAoaW5idWYpOworICB4MiA9IEdFVFUzMiAoaW5idWYrNCk7CisgIHgzID0gR0VUVTMyIChpbmJ1Zis4KTsKKyAgeDQgPSBHRVRVMzIgKGluYnVmKzEyKTsKKworICBPUCAoeDEsIHgyLCB4MywgeDQsIDApOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDIpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDQpOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDYpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDgpOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDEwKTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCAxMik7CisgIE9QICh4MywgeDQsIHgxLCB4MiwgMTQpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDE2KTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCAxOCk7CisgIE9QICh4MSwgeDIsIHgzLCB4NCwgMjApOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDIyKTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCAyNCk7CisgIE9QICh4MywgeDQsIHgxLCB4MiwgMjYpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDI4KTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCAzMCk7CisKKyAgUFVUVTMyIChvdXRidWYsIHgzKTsKKyAgUFVUVTMyIChvdXRidWYrNCwgeDQpOworICBQVVRVMzIgKG91dGJ1Zis4LCB4MSk7CisgIFBVVFUzMiAob3V0YnVmKzEyLCB4Mik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NlZWRfZW5jcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0YnVmLCBjb25zdCBieXRlICppbmJ1ZikKK3sKKyAgU0VFRF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisgIGRvX2VuY3J5cHQgKGN0eCwgb3V0YnVmLCBpbmJ1Zik7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoNCo2KTsKK30KKworCisMCisvKiBEZWNyeXB0IG9uZSBibG9jay4gIGluYnVmIGFuZCBvdXRidWYgbWF5IGJlIHRoZSBzYW1lLiAqLworc3RhdGljIHZvaWQKK2RvX2RlY3J5cHQgKFNFRURfY29udGV4dCAqY3R4LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICB1MzIgeDEsIHgyLCB4MywgeDQ7CisgIHVuaW9uIHdvcmRidWYgdDAsIHQxOworCisgIHgxID0gR0VUVTMyIChpbmJ1Zik7CisgIHgyID0gR0VUVTMyIChpbmJ1Zis0KTsKKyAgeDMgPSBHRVRVMzIgKGluYnVmKzgpOworICB4NCA9IEdFVFUzMiAoaW5idWYrMTIpOworCisgIE9QICh4MSwgeDIsIHgzLCB4NCwgMzApOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDI4KTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCAyNik7CisgIE9QICh4MywgeDQsIHgxLCB4MiwgMjQpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDIyKTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCAyMCk7CisgIE9QICh4MSwgeDIsIHgzLCB4NCwgMTgpOworICBPUCAoeDMsIHg0LCB4MSwgeDIsIDE2KTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCAxNCk7CisgIE9QICh4MywgeDQsIHgxLCB4MiwgMTIpOworICBPUCAoeDEsIHgyLCB4MywgeDQsIDEwKTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCA4KTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCA2KTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCA0KTsKKyAgT1AgKHgxLCB4MiwgeDMsIHg0LCAyKTsKKyAgT1AgKHgzLCB4NCwgeDEsIHgyLCAwKTsKKworICBQVVRVMzIgKG91dGJ1ZiwgeDMpOworICBQVVRVMzIgKG91dGJ1Zis0LCB4NCk7CisgIFBVVFUzMiAob3V0YnVmKzgsIHgxKTsKKyAgUFVUVTMyIChvdXRidWYrMTIsIHgyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorc2VlZF9kZWNyeXB0ICh2b2lkICpjb250ZXh0LCBieXRlICpvdXRidWYsIGNvbnN0IGJ5dGUgKmluYnVmKQoreworICBTRUVEX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisKKyAgZG9fZGVjcnlwdCAoY3R4LCBvdXRidWYsIGluYnVmKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0KjYpOworfQorCisMCisvKiBUZXN0IGEgc2luZ2xlIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gd2l0aCBlYWNoIGtleSBzaXplLiAqLworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdCAodm9pZCkKK3sKKyAgU0VFRF9jb250ZXh0IGN0eDsKKyAgYnl0ZSBzY3JhdGNoWzE2XTsKKworICAvKiBUaGUgdGVzdCB2ZWN0b3IgaXMgdGFrZW4gZnJvbSB0aGUgYXBwZW5kaXggc2VjdGlvbiBCLjMgb2YgUkZDNDI2OS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBieXRlIHBsYWludGV4dFsxNl0gPSB7CisgICAgMHg4MywgMHhBMiwgMHhGOCwgMHhBMiwgMHg4OCwgMHg2NCwgMHgxRiwgMHhCOSwKKyAgICAweEE0LCAweEU5LCAweEE1LCAweENDLCAweDJGLCAweDEzLCAweDFDLCAweDdECisgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGtleVsxNl0gPSB7CisgICAgMHg0NywgMHgwNiwgMHg0OCwgMHgwOCwgMHg1MSwgMHhFNiwgMHgxQiwgMHhFOCwKKyAgICAweDVELCAweDc0LCAweEJGLCAweEIzLCAweEZELCAweDk1LCAweDYxLCAweDg1CisgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcnRleHRbMTZdID0geworICAgIDB4RUUsIDB4NTQsIDB4RDEsIDB4M0UsIDB4QkMsIDB4QUUsIDB4NzAsIDB4NkQsCisgICAgMHgyMiwgMHg2QiwgMHhDMywgMHgxNCwgMHgyQywgMHhENCwgMHgwRCwgMHg0QSwKKyAgfTsKKworICBzZWVkX3NldGtleSAoJmN0eCwga2V5LCBzaXplb2Yoa2V5KSk7CisgIHNlZWRfZW5jcnlwdCAoJmN0eCwgc2NyYXRjaCwgcGxhaW50ZXh0KTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgY2lwaGVydGV4dCwgc2l6ZW9mIChjaXBoZXJ0ZXh0KSkpCisgICAgcmV0dXJuICJTRUVEIHRlc3QgZW5jcnlwdGlvbiBmYWlsZWQuIjsKKyAgc2VlZF9kZWNyeXB0ICgmY3R4LCBzY3JhdGNoLCBzY3JhdGNoKTsKKyAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgcGxhaW50ZXh0LCBzaXplb2YgKHBsYWludGV4dCkpKQorICAgIHJldHVybiAiU0VFRCB0ZXN0IGRlY3J5cHRpb24gZmFpbGVkLiI7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKwwKKworc3RhdGljIGdjcnlfY2lwaGVyX29pZF9zcGVjX3Qgc2VlZF9vaWRzW10gPQorICB7CisgICAgeyAiMS4yLjQxMC4yMDAwMDQuMS4zIiwgR0NSWV9DSVBIRVJfTU9ERV9FQ0IgfSwKKyAgICB7ICIxLjIuNDEwLjIwMDAwNC4xLjQiLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgIHsgIjEuMi40MTAuMjAwMDA0LjEuNSIsIEdDUllfQ0lQSEVSX01PREVfQ0ZCIH0sCisgICAgeyAiMS4yLjQxMC4yMDAwMDQuMS42IiwgR0NSWV9DSVBIRVJfTU9ERV9PRkIgfSwKKyAgICB7IE5VTEwgfQorICB9OworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfc2VlZCA9CisgIHsKKyAgICBHQ1JZX0NJUEhFUl9TRUVELCB7MCwgMH0sCisgICAgIlNFRUQiLCBOVUxMLCBzZWVkX29pZHMsIDE2LCAxMjgsIHNpemVvZiAoU0VFRF9jb250ZXh0KSwKKyAgICBzZWVkX3NldGtleSwgc2VlZF9lbmNyeXB0LCBzZWVkX2RlY3J5cHQsCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvc2VycGVudC1hcm12Ny1uZW9uLlMgYi9jaXBoZXIvc2VycGVudC1hcm12Ny1uZW9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlOTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zZXJwZW50LWFybXY3LW5lb24uUwpAQCAtMCwwICsxLDg2OSBAQAorLyogc2VycGVudC1hcm12Ny1uZW9uLlMgIC0gIEFSTS9ORU9OIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIFNlcnBlbnQgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfQVJNX0FSQ0hfVjYpICYmIGRlZmluZWQoX19BUk1FTF9fKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9ORU9OKQorCisudGV4dAorCisuc3ludGF4IHVuaWZpZWQKKy5mcHUgbmVvbgorLmFybQorCisvKiBBUk0gcmVnaXN0ZXJzICovCisjZGVmaW5lIFJST1VORCByMAorCisvKiBORU9OIHZlY3RvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkEwIHEwCisjZGVmaW5lIFJBMSBxMQorI2RlZmluZSBSQTIgcTIKKyNkZWZpbmUgUkEzIHEzCisjZGVmaW5lIFJBNCBxNAorI2RlZmluZSBSQjAgcTUKKyNkZWZpbmUgUkIxIHE2CisjZGVmaW5lIFJCMiBxNworI2RlZmluZSBSQjMgcTgKKyNkZWZpbmUgUkI0IHE5CisKKyNkZWZpbmUgUlQwIHExMAorI2RlZmluZSBSVDEgcTExCisjZGVmaW5lIFJUMiBxMTIKKyNkZWZpbmUgUlQzIHExMworCisjZGVmaW5lIFJBMGQwIGQwCisjZGVmaW5lIFJBMGQxIGQxCisjZGVmaW5lIFJBMWQwIGQyCisjZGVmaW5lIFJBMWQxIGQzCisjZGVmaW5lIFJBMmQwIGQ0CisjZGVmaW5lIFJBMmQxIGQ1CisjZGVmaW5lIFJBM2QwIGQ2CisjZGVmaW5lIFJBM2QxIGQ3CisjZGVmaW5lIFJBNGQwIGQ4CisjZGVmaW5lIFJBNGQxIGQ5CisjZGVmaW5lIFJCMGQwIGQxMAorI2RlZmluZSBSQjBkMSBkMTEKKyNkZWZpbmUgUkIxZDAgZDEyCisjZGVmaW5lIFJCMWQxIGQxMworI2RlZmluZSBSQjJkMCBkMTQKKyNkZWZpbmUgUkIyZDEgZDE1CisjZGVmaW5lIFJCM2QwIGQxNgorI2RlZmluZSBSQjNkMSBkMTcKKyNkZWZpbmUgUkI0ZDAgZDE4CisjZGVmaW5lIFJCNGQxIGQxOQorI2RlZmluZSBSVDBkMCBkMjAKKyNkZWZpbmUgUlQwZDEgZDIxCisjZGVmaW5lIFJUMWQwIGQyMgorI2RlZmluZSBSVDFkMSBkMjMKKyNkZWZpbmUgUlQyZDAgZDI0CisjZGVmaW5lIFJUMmQxIGQyNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBoZWxwZXIgbWFjcm9zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSB0cmFuc3Bvc2VfNHg0KF9xMCwgX3ExLCBfcTIsIF9xMykgXAorCXZ0cm4uMzIgX3EwLCBfcTE7CVwKKwl2dHJuLjMyIF9xMiwgX3EzOwlcCisJdnN3cCBfcTAjI2QxLCBfcTIjI2QwOwlcCisJdnN3cCBfcTEjI2QxLCBfcTMjI2QwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICA4LXdheSBzZXJwZW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgUy1Cb3hlcyBvZiBTZXJwZW50IGZyb20gZm9sbG93aW5nIHJlc2VhcmNoIHBhcGVyLgorICoKKyAqICBELiBBLiBPc3Zpaywg4oCcU3BlZWRpbmcgdXAgU2VycGVudCzigJ0gaW4gVGhpcmQgQUVTIENhbmRpZGF0ZSBDb25mZXJlbmNlLAorICogICAoTmV3IFlvcmssIE5ldyBZb3JrLCBVU0EpLCBwLiAzMTfigJMzMjksIE5hdGlvbmFsIEluc3RpdHV0ZSBvZiBTdGFuZGFyZHMgYW5kCisgKiAgIFRlY2hub2xvZ3ksIDIwMDAuCisgKgorICogUGFwZXIgaXMgYWxzbyBhdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cuaWkudWliLm5vL35vc3Zpay9wdWIvYWVzMy5wZGYKKyAqCisgKi8KKyNkZWZpbmUgU0JPWDAoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2ZW9yCWEzLCBhMywgYTA7CXZlb3IJYjMsIGIzLCBiMDsJdm1vdglhNCwgYTE7CQl2bW92CWI0LCBiMTsJCVwKKwl2YW5kCWExLCBhMSwgYTM7CXZhbmQJYjEsIGIxLCBiMzsJdmVvcglhNCwgYTQsIGEyOwl2ZW9yCWI0LCBiNCwgYjI7CVwKKwl2ZW9yCWExLCBhMSwgYTA7CXZlb3IJYjEsIGIxLCBiMDsJdm9ycglhMCwgYTAsIGEzOwl2b3JyCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWEwLCBhMCwgYTQ7CXZlb3IJYjAsIGIwLCBiNDsJdmVvcglhNCwgYTQsIGEzOwl2ZW9yCWI0LCBiNCwgYjM7CVwKKwl2ZW9yCWEzLCBhMywgYTI7CXZlb3IJYjMsIGIzLCBiMjsJdm9ycglhMiwgYTIsIGExOwl2b3JyCWIyLCBiMiwgYjE7CVwKKwl2ZW9yCWEyLCBhMiwgYTQ7CXZlb3IJYjIsIGIyLCBiNDsJdm12bglhNCwgYTQ7CQl2bXZuCWI0LCBiNDsJCVwKKwl2b3JyCWE0LCBhNCwgYTE7CXZvcnIJYjQsIGI0LCBiMTsJdmVvcglhMSwgYTEsIGEzOwl2ZW9yCWIxLCBiMSwgYjM7CVwKKwl2ZW9yCWExLCBhMSwgYTQ7CXZlb3IJYjEsIGIxLCBiNDsJdm9ycglhMywgYTMsIGEwOwl2b3JyCWIzLCBiMywgYjA7CVwKKwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJdmVvcglhNCwgYTM7CQl2ZW9yCWI0LCBiMzsKKworI2RlZmluZSBTQk9YMF9JTlZFUlNFKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KSBcCisJdm12bglhMiwgYTI7CQl2bXZuCWIyLCBiMjsJCXZtb3YJYTQsIGExOwkJdm1vdgliNCwgYjE7CQlcCisJdm9ycglhMSwgYTEsIGEwOwl2b3JyCWIxLCBiMSwgYjA7CXZtdm4JYTQsIGE0OwkJdm12bgliNCwgYjQ7CQlcCisJdmVvcglhMSwgYTEsIGEyOwl2ZW9yCWIxLCBiMSwgYjI7CXZvcnIJYTIsIGEyLCBhNDsJdm9ycgliMiwgYjIsIGI0OwlcCisJdmVvcglhMSwgYTEsIGEzOwl2ZW9yCWIxLCBiMSwgYjM7CXZlb3IJYTAsIGEwLCBhNDsJdmVvcgliMCwgYjAsIGI0OwlcCisJdmVvcglhMiwgYTIsIGEwOwl2ZW9yCWIyLCBiMiwgYjA7CXZhbmQJYTAsIGEwLCBhMzsJdmFuZAliMCwgYjAsIGIzOwlcCisJdmVvcglhNCwgYTQsIGEwOwl2ZW9yCWI0LCBiNCwgYjA7CXZvcnIJYTAsIGEwLCBhMTsJdm9ycgliMCwgYjAsIGIxOwlcCisJdmVvcglhMCwgYTAsIGEyOwl2ZW9yCWIwLCBiMCwgYjI7CXZlb3IJYTMsIGEzLCBhNDsJdmVvcgliMywgYjMsIGI0OwlcCisJdmVvcglhMiwgYTIsIGExOwl2ZW9yCWIyLCBiMiwgYjE7CXZlb3IJYTMsIGEzLCBhMDsJdmVvcgliMywgYjMsIGIwOwlcCisJdmVvcglhMywgYTMsIGExOwl2ZW9yCWIzLCBiMywgYjE7XAorCXZhbmQJYTIsIGEyLCBhMzsJdmFuZAliMiwgYjIsIGIzO1wKKwl2ZW9yCWE0LCBhMjsJdmVvcgliNCwgYjI7CisKKyNkZWZpbmUgU0JPWDEoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bXZuCWEwLCBhMDsJCXZtdm4JYjAsIGIwOwkJdm12bglhMiwgYTI7CQl2bXZuCWIyLCBiMjsJCVwKKwl2bW92CWE0LCBhMDsJCXZtb3YJYjQsIGIwOwkJdmFuZAlhMCwgYTAsIGExOwl2YW5kCWIwLCBiMCwgYjE7CVwKKwl2ZW9yCWEyLCBhMiwgYTA7CXZlb3IJYjIsIGIyLCBiMDsJdm9ycglhMCwgYTAsIGEzOwl2b3JyCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWEzLCBhMywgYTI7CXZlb3IJYjMsIGIzLCBiMjsJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7CVwKKwl2ZW9yCWEwLCBhMCwgYTQ7CXZlb3IJYjAsIGIwLCBiNDsJdm9ycglhNCwgYTQsIGExOwl2b3JyCWI0LCBiNCwgYjE7CVwKKwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJdm9ycglhMiwgYTIsIGEwOwl2b3JyCWIyLCBiMiwgYjA7CVwKKwl2YW5kCWEyLCBhMiwgYTQ7CXZhbmQJYjIsIGIyLCBiNDsJdmVvcglhMCwgYTAsIGExOwl2ZW9yCWIwLCBiMCwgYjE7CVwKKwl2YW5kCWExLCBhMSwgYTI7CXZhbmQJYjEsIGIxLCBiMjtcCisJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7CXZhbmQJYTAsIGEwLCBhMjsJdmFuZAliMCwgYjAsIGIyOwlcCisJdmVvcglhMCwgYTQ7CQl2ZW9yCWIwLCBiNDsKKworI2RlZmluZSBTQk9YMV9JTlZFUlNFKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KSBcCisJdm1vdglhNCwgYTE7CQl2bW92CWI0LCBiMTsJCXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwlcCisJdmFuZAlhMywgYTMsIGExOwl2YW5kCWIzLCBiMywgYjE7CXZlb3IJYTQsIGE0LCBhMjsJdmVvcgliNCwgYjQsIGIyOwlcCisJdmVvcglhMywgYTMsIGEwOwl2ZW9yCWIzLCBiMywgYjA7CXZvcnIJYTAsIGEwLCBhMTsJdm9ycgliMCwgYjAsIGIxOwlcCisJdmVvcglhMiwgYTIsIGEzOwl2ZW9yCWIyLCBiMiwgYjM7CXZlb3IJYTAsIGEwLCBhNDsJdmVvcgliMCwgYjAsIGI0OwlcCisJdm9ycglhMCwgYTAsIGEyOwl2b3JyCWIwLCBiMCwgYjI7CXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwlcCisJdmVvcglhMCwgYTAsIGExOwl2ZW9yCWIwLCBiMCwgYjE7CXZvcnIJYTEsIGExLCBhMzsJdm9ycgliMSwgYjEsIGIzOwlcCisJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7CXZtdm4JYTQsIGE0OwkJdm12bgliNCwgYjQ7CQlcCisJdmVvcglhNCwgYTQsIGExOwl2ZW9yCWI0LCBiNCwgYjE7CXZvcnIJYTEsIGExLCBhMDsJdm9ycgliMSwgYjEsIGIwOwlcCisJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7XAorCXZvcnIJYTEsIGExLCBhNDsJdm9ycgliMSwgYjEsIGI0O1wKKwl2ZW9yCWEzLCBhMTsJCXZlb3IJYjMsIGIxOworCisjZGVmaW5lIFNCT1gyKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KSBcCisJdm1vdglhNCwgYTA7CQl2bW92CWI0LCBiMDsJCXZhbmQJYTAsIGEwLCBhMjsJdmFuZAliMCwgYjAsIGIyOwlcCisJdmVvcglhMCwgYTAsIGEzOwl2ZW9yCWIwLCBiMCwgYjM7CXZlb3IJYTIsIGEyLCBhMTsJdmVvcgliMiwgYjIsIGIxOwlcCisJdmVvcglhMiwgYTIsIGEwOwl2ZW9yCWIyLCBiMiwgYjA7CXZvcnIJYTMsIGEzLCBhNDsJdm9ycgliMywgYjMsIGI0OwlcCisJdmVvcglhMywgYTMsIGExOwl2ZW9yCWIzLCBiMywgYjE7CXZlb3IJYTQsIGE0LCBhMjsJdmVvcgliNCwgYjQsIGIyOwlcCisJdm1vdglhMSwgYTM7CQl2bW92CWIxLCBiMzsJCXZvcnIJYTMsIGEzLCBhNDsJdm9ycgliMywgYjMsIGI0OwlcCisJdmVvcglhMywgYTMsIGEwOwl2ZW9yCWIzLCBiMywgYjA7CXZhbmQJYTAsIGEwLCBhMTsJdmFuZAliMCwgYjAsIGIxOwlcCisJdmVvcglhNCwgYTQsIGEwOwl2ZW9yCWI0LCBiNCwgYjA7CXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwlcCisJdmVvcglhMSwgYTEsIGE0Owl2ZW9yCWIxLCBiMSwgYjQ7CXZtdm4JYTQsIGE0OwkJdm12bgliNCwgYjQ7CisKKyNkZWZpbmUgU0JPWDJfSU5WRVJTRShhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZlb3IJYTIsIGEyLCBhMzsJdmVvcgliMiwgYjIsIGIzOwl2ZW9yCWEzLCBhMywgYTA7CXZlb3IJYjMsIGIzLCBiMDsJXAorCXZtb3YJYTQsIGEzOwkJdm1vdgliNCwgYjM7CQl2YW5kCWEzLCBhMywgYTI7CXZhbmQJYjMsIGIzLCBiMjsJXAorCXZlb3IJYTMsIGEzLCBhMTsJdmVvcgliMywgYjMsIGIxOwl2b3JyCWExLCBhMSwgYTI7CXZvcnIJYjEsIGIxLCBiMjsJXAorCXZlb3IJYTEsIGExLCBhNDsJdmVvcgliMSwgYjEsIGI0Owl2YW5kCWE0LCBhNCwgYTM7CXZhbmQJYjQsIGI0LCBiMzsJXAorCXZlb3IJYTIsIGEyLCBhMzsJdmVvcgliMiwgYjIsIGIzOwl2YW5kCWE0LCBhNCwgYTA7CXZhbmQJYjQsIGI0LCBiMDsJXAorCXZlb3IJYTQsIGE0LCBhMjsJdmVvcgliNCwgYjQsIGIyOwl2YW5kCWEyLCBhMiwgYTE7CXZhbmQJYjIsIGIyLCBiMTsJXAorCXZvcnIJYTIsIGEyLCBhMDsJdm9ycgliMiwgYjIsIGIwOwl2bXZuCWEzLCBhMzsJCXZtdm4JYjMsIGIzOwkJXAorCXZlb3IJYTIsIGEyLCBhMzsJdmVvcgliMiwgYjIsIGIzOwl2ZW9yCWEwLCBhMCwgYTM7CXZlb3IJYjAsIGIwLCBiMzsJXAorCXZhbmQJYTAsIGEwLCBhMTsJdmFuZAliMCwgYjAsIGIxOwl2ZW9yCWEzLCBhMywgYTQ7CXZlb3IJYjMsIGIzLCBiNDsJXAorCXZlb3IJYTMsIGEwOwkJdmVvcgliMywgYjA7CisKKyNkZWZpbmUgU0JPWDMoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bW92CWE0LCBhMDsJCXZtb3YJYjQsIGIwOwkJdm9ycglhMCwgYTAsIGEzOwl2b3JyCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWEzLCBhMywgYTE7CXZlb3IJYjMsIGIzLCBiMTsJdmFuZAlhMSwgYTEsIGE0Owl2YW5kCWIxLCBiMSwgYjQ7CVwKKwl2ZW9yCWE0LCBhNCwgYTI7CXZlb3IJYjQsIGI0LCBiMjsJdmVvcglhMiwgYTIsIGEzOwl2ZW9yCWIyLCBiMiwgYjM7CVwKKwl2YW5kCWEzLCBhMywgYTA7CXZhbmQJYjMsIGIzLCBiMDsJdm9ycglhNCwgYTQsIGExOwl2b3JyCWI0LCBiNCwgYjE7CVwKKwl2ZW9yCWEzLCBhMywgYTQ7CXZlb3IJYjMsIGIzLCBiNDsJdmVvcglhMCwgYTAsIGExOwl2ZW9yCWIwLCBiMCwgYjE7CVwKKwl2YW5kCWE0LCBhNCwgYTA7CXZhbmQJYjQsIGI0LCBiMDsJdmVvcglhMSwgYTEsIGEzOwl2ZW9yCWIxLCBiMSwgYjM7CVwKKwl2ZW9yCWE0LCBhNCwgYTI7CXZlb3IJYjQsIGI0LCBiMjsJdm9ycglhMSwgYTEsIGEwOwl2b3JyCWIxLCBiMSwgYjA7CVwKKwl2ZW9yCWExLCBhMSwgYTI7CXZlb3IJYjEsIGIxLCBiMjsJdmVvcglhMCwgYTAsIGEzOwl2ZW9yCWIwLCBiMCwgYjM7CVwKKwl2bW92CWEyLCBhMTsJCXZtb3YJYjIsIGIxOwkJdm9ycglhMSwgYTEsIGEzOwl2b3JyCWIxLCBiMSwgYjM7CVwKKwl2ZW9yCWExLCBhMDsJCXZlb3IJYjEsIGIwOworCisjZGVmaW5lIFNCT1gzX0lOVkVSU0UoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bW92CWE0LCBhMjsJCXZtb3YJYjQsIGIyOwkJdmVvcglhMiwgYTIsIGExOwl2ZW9yCWIyLCBiMiwgYjE7CVwKKwl2ZW9yCWEwLCBhMCwgYTI7CXZlb3IJYjAsIGIwLCBiMjsJdmFuZAlhNCwgYTQsIGEyOwl2YW5kCWI0LCBiNCwgYjI7CVwKKwl2ZW9yCWE0LCBhNCwgYTA7CXZlb3IJYjQsIGI0LCBiMDsJdmFuZAlhMCwgYTAsIGExOwl2YW5kCWIwLCBiMCwgYjE7CVwKKwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJdm9ycglhMywgYTMsIGE0Owl2b3JyCWIzLCBiMywgYjQ7CVwKKwl2ZW9yCWEyLCBhMiwgYTM7CXZlb3IJYjIsIGIyLCBiMzsJdmVvcglhMCwgYTAsIGEzOwl2ZW9yCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWExLCBhMSwgYTQ7CXZlb3IJYjEsIGIxLCBiNDsJdmFuZAlhMywgYTMsIGEyOwl2YW5kCWIzLCBiMywgYjI7CVwKKwl2ZW9yCWEzLCBhMywgYTE7CXZlb3IJYjMsIGIzLCBiMTsJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7CVwKKwl2b3JyCWExLCBhMSwgYTI7CXZvcnIJYjEsIGIxLCBiMjsJdmVvcglhMCwgYTAsIGEzOwl2ZW9yCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWExLCBhMSwgYTQ7CXZlb3IJYjEsIGIxLCBiNDtcCisJdmVvcglhMCwgYTE7CQl2ZW9yCWIwLCBiMTsKKworI2RlZmluZSBTQk9YNChhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwl2bXZuCWEzLCBhMzsJCXZtdm4JYjMsIGIzOwkJXAorCXZlb3IJYTIsIGEyLCBhMzsJdmVvcgliMiwgYjIsIGIzOwl2ZW9yCWEzLCBhMywgYTA7CXZlb3IJYjMsIGIzLCBiMDsJXAorCXZtb3YJYTQsIGExOwkJdm1vdgliNCwgYjE7CQl2YW5kCWExLCBhMSwgYTM7CXZhbmQJYjEsIGIxLCBiMzsJXAorCXZlb3IJYTEsIGExLCBhMjsJdmVvcgliMSwgYjEsIGIyOwl2ZW9yCWE0LCBhNCwgYTM7CXZlb3IJYjQsIGI0LCBiMzsJXAorCXZlb3IJYTAsIGEwLCBhNDsJdmVvcgliMCwgYjAsIGI0Owl2YW5kCWEyLCBhMiwgYTQ7CXZhbmQJYjIsIGIyLCBiNDsJXAorCXZlb3IJYTIsIGEyLCBhMDsJdmVvcgliMiwgYjIsIGIwOwl2YW5kCWEwLCBhMCwgYTE7CXZhbmQJYjAsIGIwLCBiMTsJXAorCXZlb3IJYTMsIGEzLCBhMDsJdmVvcgliMywgYjMsIGIwOwl2b3JyCWE0LCBhNCwgYTE7CXZvcnIJYjQsIGI0LCBiMTsJXAorCXZlb3IJYTQsIGE0LCBhMDsJdmVvcgliNCwgYjQsIGIwOwl2b3JyCWEwLCBhMCwgYTM7CXZvcnIJYjAsIGIwLCBiMzsJXAorCXZlb3IJYTAsIGEwLCBhMjsJdmVvcgliMCwgYjAsIGIyOwl2YW5kCWEyLCBhMiwgYTM7CXZhbmQJYjIsIGIyLCBiMzsJXAorCXZtdm4JYTAsIGEwOwkJdm12bgliMCwgYjA7CQl2ZW9yCWE0LCBhMjsJCXZlb3IJYjQsIGIyOworCisjZGVmaW5lIFNCT1g0X0lOVkVSU0UoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bW92CWE0LCBhMjsJCXZtb3YJYjQsIGIyOwkJdmFuZAlhMiwgYTIsIGEzOwl2YW5kCWIyLCBiMiwgYjM7CVwKKwl2ZW9yCWEyLCBhMiwgYTE7CXZlb3IJYjIsIGIyLCBiMTsJdm9ycglhMSwgYTEsIGEzOwl2b3JyCWIxLCBiMSwgYjM7CVwKKwl2YW5kCWExLCBhMSwgYTA7CXZhbmQJYjEsIGIxLCBiMDsJdmVvcglhNCwgYTQsIGEyOwl2ZW9yCWI0LCBiNCwgYjI7CVwKKwl2ZW9yCWE0LCBhNCwgYTE7CXZlb3IJYjQsIGI0LCBiMTsJdmFuZAlhMSwgYTEsIGEyOwl2YW5kCWIxLCBiMSwgYjI7CVwKKwl2bXZuCWEwLCBhMDsJCXZtdm4JYjAsIGIwOwkJdmVvcglhMywgYTMsIGE0Owl2ZW9yCWIzLCBiMywgYjQ7CVwKKwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJdmFuZAlhMywgYTMsIGEwOwl2YW5kCWIzLCBiMywgYjA7CVwKKwl2ZW9yCWEzLCBhMywgYTI7CXZlb3IJYjMsIGIzLCBiMjsJdmVvcglhMCwgYTAsIGExOwl2ZW9yCWIwLCBiMCwgYjE7CVwKKwl2YW5kCWEyLCBhMiwgYTA7CXZhbmQJYjIsIGIyLCBiMDsJdmVvcglhMywgYTMsIGEwOwl2ZW9yCWIzLCBiMywgYjA7CVwKKwl2ZW9yCWEyLCBhMiwgYTQ7CXZlb3IJYjIsIGIyLCBiNDtcCisJdm9ycglhMiwgYTIsIGEzOwl2b3JyCWIyLCBiMiwgYjM7CXZlb3IJYTMsIGEzLCBhMDsJdmVvcgliMywgYjMsIGIwOwlcCisJdmVvcglhMiwgYTE7CQl2ZW9yCWIyLCBiMTsKKworI2RlZmluZSBTQk9YNShhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZlb3IJYTAsIGEwLCBhMTsJdmVvcgliMCwgYjAsIGIxOwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJXAorCXZtdm4JYTMsIGEzOwkJdm12bgliMywgYjM7CQl2bW92CWE0LCBhMTsJCXZtb3YJYjQsIGIxOwkJXAorCXZhbmQJYTEsIGExLCBhMDsJdmFuZAliMSwgYjEsIGIwOwl2ZW9yCWEyLCBhMiwgYTM7CXZlb3IJYjIsIGIyLCBiMzsJXAorCXZlb3IJYTEsIGExLCBhMjsJdmVvcgliMSwgYjEsIGIyOwl2b3JyCWEyLCBhMiwgYTQ7CXZvcnIJYjIsIGIyLCBiNDsJXAorCXZlb3IJYTQsIGE0LCBhMzsJdmVvcgliNCwgYjQsIGIzOwl2YW5kCWEzLCBhMywgYTE7CXZhbmQJYjMsIGIzLCBiMTsJXAorCXZlb3IJYTMsIGEzLCBhMDsJdmVvcgliMywgYjMsIGIwOwl2ZW9yCWE0LCBhNCwgYTE7CXZlb3IJYjQsIGI0LCBiMTsJXAorCXZlb3IJYTQsIGE0LCBhMjsJdmVvcgliNCwgYjQsIGIyOwl2ZW9yCWEyLCBhMiwgYTA7CXZlb3IJYjIsIGIyLCBiMDsJXAorCXZhbmQJYTAsIGEwLCBhMzsJdmFuZAliMCwgYjAsIGIzOwl2bXZuCWEyLCBhMjsJCXZtdm4JYjIsIGIyOwkJXAorCXZlb3IJYTAsIGEwLCBhNDsJdmVvcgliMCwgYjAsIGI0Owl2b3JyCWE0LCBhNCwgYTM7CXZvcnIJYjQsIGI0LCBiMzsJXAorCXZlb3IJYTIsIGE0OwkJdmVvcgliMiwgYjQ7CisKKyNkZWZpbmUgU0JPWDVfSU5WRVJTRShhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZtdm4JYTEsIGExOwkJdm12bgliMSwgYjE7CQl2bW92CWE0LCBhMzsJCXZtb3YJYjQsIGIzOwkJXAorCXZlb3IJYTIsIGEyLCBhMTsJdmVvcgliMiwgYjIsIGIxOwl2b3JyCWEzLCBhMywgYTA7CXZvcnIJYjMsIGIzLCBiMDsJXAorCXZlb3IJYTMsIGEzLCBhMjsJdmVvcgliMywgYjMsIGIyOwl2b3JyCWEyLCBhMiwgYTE7CXZvcnIJYjIsIGIyLCBiMTsJXAorCXZhbmQJYTIsIGEyLCBhMDsJdmFuZAliMiwgYjIsIGIwOwl2ZW9yCWE0LCBhNCwgYTM7CXZlb3IJYjQsIGI0LCBiMzsJXAorCXZlb3IJYTIsIGEyLCBhNDsJdmVvcgliMiwgYjIsIGI0Owl2b3JyCWE0LCBhNCwgYTA7CXZvcnIJYjQsIGI0LCBiMDsJXAorCXZlb3IJYTQsIGE0LCBhMTsJdmVvcgliNCwgYjQsIGIxOwl2YW5kCWExLCBhMSwgYTI7CXZhbmQJYjEsIGIxLCBiMjsJXAorCXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwl2ZW9yCWE0LCBhNCwgYTI7CXZlb3IJYjQsIGI0LCBiMjsJXAorCXZhbmQJYTMsIGEzLCBhNDsJdmFuZAliMywgYjMsIGI0Owl2ZW9yCWE0LCBhNCwgYTE7CXZlb3IJYjQsIGI0LCBiMTsJXAorCXZlb3IJYTMsIGEzLCBhNDsJdmVvcgliMywgYjMsIGI0Owl2bXZuCWE0LCBhNDsJCXZtdm4JYjQsIGI0OwkJXAorCXZlb3IJYTMsIGEwOwkJdmVvcgliMywgYjA7CisKKyNkZWZpbmUgU0JPWDYoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bXZuCWEyLCBhMjsJCXZtdm4JYjIsIGIyOwkJdm1vdglhNCwgYTM7CQl2bW92CWI0LCBiMzsJCVwKKwl2YW5kCWEzLCBhMywgYTA7CXZhbmQJYjMsIGIzLCBiMDsJdmVvcglhMCwgYTAsIGE0Owl2ZW9yCWIwLCBiMCwgYjQ7CVwKKwl2ZW9yCWEzLCBhMywgYTI7CXZlb3IJYjMsIGIzLCBiMjsJdm9ycglhMiwgYTIsIGE0Owl2b3JyCWIyLCBiMiwgYjQ7CVwKKwl2ZW9yCWExLCBhMSwgYTM7CXZlb3IJYjEsIGIxLCBiMzsJdmVvcglhMiwgYTIsIGEwOwl2ZW9yCWIyLCBiMiwgYjA7CVwKKwl2b3JyCWEwLCBhMCwgYTE7CXZvcnIJYjAsIGIwLCBiMTsJdmVvcglhMiwgYTIsIGExOwl2ZW9yCWIyLCBiMiwgYjE7CVwKKwl2ZW9yCWE0LCBhNCwgYTA7CXZlb3IJYjQsIGI0LCBiMDsJdm9ycglhMCwgYTAsIGEzOwl2b3JyCWIwLCBiMCwgYjM7CVwKKwl2ZW9yCWEwLCBhMCwgYTI7CXZlb3IJYjAsIGIwLCBiMjsJdmVvcglhNCwgYTQsIGEzOwl2ZW9yCWI0LCBiNCwgYjM7CVwKKwl2ZW9yCWE0LCBhNCwgYTA7CXZlb3IJYjQsIGI0LCBiMDsJdm12bglhMywgYTM7CQl2bXZuCWIzLCBiMzsJCVwKKwl2YW5kCWEyLCBhMiwgYTQ7CXZhbmQJYjIsIGIyLCBiNDtcCisJdmVvcglhMiwgYTM7CQl2ZW9yCWIyLCBiMzsKKworI2RlZmluZSBTQk9YNl9JTlZFUlNFKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KSBcCisJdmVvcglhMCwgYTAsIGEyOwl2ZW9yCWIwLCBiMCwgYjI7CXZtb3YJYTQsIGEyOwkJdm1vdgliNCwgYjI7CQlcCisJdmFuZAlhMiwgYTIsIGEwOwl2YW5kCWIyLCBiMiwgYjA7CXZlb3IJYTQsIGE0LCBhMzsJdmVvcgliNCwgYjQsIGIzOwlcCisJdm12bglhMiwgYTI7CQl2bXZuCWIyLCBiMjsJCXZlb3IJYTMsIGEzLCBhMTsJdmVvcgliMywgYjMsIGIxOwlcCisJdmVvcglhMiwgYTIsIGEzOwl2ZW9yCWIyLCBiMiwgYjM7CXZvcnIJYTQsIGE0LCBhMDsJdm9ycgliNCwgYjQsIGIwOwlcCisJdmVvcglhMCwgYTAsIGEyOwl2ZW9yCWIwLCBiMCwgYjI7CXZlb3IJYTMsIGEzLCBhNDsJdmVvcgliMywgYjMsIGI0OwlcCisJdmVvcglhNCwgYTQsIGExOwl2ZW9yCWI0LCBiNCwgYjE7CXZhbmQJYTEsIGExLCBhMzsJdmFuZAliMSwgYjEsIGIzOwlcCisJdmVvcglhMSwgYTEsIGEwOwl2ZW9yCWIxLCBiMSwgYjA7CXZlb3IJYTAsIGEwLCBhMzsJdmVvcgliMCwgYjAsIGIzOwlcCisJdm9ycglhMCwgYTAsIGEyOwl2b3JyCWIwLCBiMCwgYjI7CXZlb3IJYTMsIGEzLCBhMTsJdmVvcgliMywgYjMsIGIxOwlcCisJdmVvcglhNCwgYTA7CQl2ZW9yCWI0LCBiMDsKKworI2RlZmluZSBTQk9YNyhhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZtb3YJYTQsIGExOwkJdm1vdgliNCwgYjE7CQl2b3JyCWExLCBhMSwgYTI7CXZvcnIJYjEsIGIxLCBiMjsJXAorCXZlb3IJYTEsIGExLCBhMzsJdmVvcgliMSwgYjEsIGIzOwl2ZW9yCWE0LCBhNCwgYTI7CXZlb3IJYjQsIGI0LCBiMjsJXAorCXZlb3IJYTIsIGEyLCBhMTsJdmVvcgliMiwgYjIsIGIxOwl2b3JyCWEzLCBhMywgYTQ7CXZvcnIJYjMsIGIzLCBiNDsJXAorCXZhbmQJYTMsIGEzLCBhMDsJdmFuZAliMywgYjMsIGIwOwl2ZW9yCWE0LCBhNCwgYTI7CXZlb3IJYjQsIGI0LCBiMjsJXAorCXZlb3IJYTMsIGEzLCBhMTsJdmVvcgliMywgYjMsIGIxOwl2b3JyCWExLCBhMSwgYTQ7CXZvcnIJYjEsIGIxLCBiNDsJXAorCXZlb3IJYTEsIGExLCBhMDsJdmVvcgliMSwgYjEsIGIwOwl2b3JyCWEwLCBhMCwgYTQ7CXZvcnIJYjAsIGIwLCBiNDsJXAorCXZlb3IJYTAsIGEwLCBhMjsJdmVvcgliMCwgYjAsIGIyOwl2ZW9yCWExLCBhMSwgYTQ7CXZlb3IJYjEsIGIxLCBiNDsJXAorCXZlb3IJYTIsIGEyLCBhMTsJdmVvcgliMiwgYjIsIGIxOwl2YW5kCWExLCBhMSwgYTA7CXZhbmQJYjEsIGIxLCBiMDsJXAorCXZlb3IJYTEsIGExLCBhNDsJdmVvcgliMSwgYjEsIGI0Owl2bXZuCWEyLCBhMjsJCXZtdm4JYjIsIGIyOwkJXAorCXZvcnIJYTIsIGEyLCBhMDsJdm9ycgliMiwgYjIsIGIwO1wKKwl2ZW9yCWE0LCBhMjsJCXZlb3IJYjQsIGIyOworCisjZGVmaW5lIFNCT1g3X0lOVkVSU0UoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2bW92CWE0LCBhMjsJCXZtb3YJYjQsIGIyOwkJdmVvcglhMiwgYTIsIGEwOwl2ZW9yCWIyLCBiMiwgYjA7CVwKKwl2YW5kCWEwLCBhMCwgYTM7CXZhbmQJYjAsIGIwLCBiMzsJdm9ycglhNCwgYTQsIGEzOwl2b3JyCWI0LCBiNCwgYjM7CVwKKwl2bXZuCWEyLCBhMjsJCXZtdm4JYjIsIGIyOwkJdmVvcglhMywgYTMsIGExOwl2ZW9yCWIzLCBiMywgYjE7CVwKKwl2b3JyCWExLCBhMSwgYTA7CXZvcnIJYjEsIGIxLCBiMDsJdmVvcglhMCwgYTAsIGEyOwl2ZW9yCWIwLCBiMCwgYjI7CVwKKwl2YW5kCWEyLCBhMiwgYTQ7CXZhbmQJYjIsIGIyLCBiNDsJdmFuZAlhMywgYTMsIGE0Owl2YW5kCWIzLCBiMywgYjQ7CVwKKwl2ZW9yCWExLCBhMSwgYTI7CXZlb3IJYjEsIGIxLCBiMjsJdmVvcglhMiwgYTIsIGEwOwl2ZW9yCWIyLCBiMiwgYjA7CVwKKwl2b3JyCWEwLCBhMCwgYTI7CXZvcnIJYjAsIGIwLCBiMjsJdmVvcglhNCwgYTQsIGExOwl2ZW9yCWI0LCBiNCwgYjE7CVwKKwl2ZW9yCWEwLCBhMCwgYTM7CXZlb3IJYjAsIGIwLCBiMzsJdmVvcglhMywgYTMsIGE0Owl2ZW9yCWIzLCBiMywgYjQ7CVwKKwl2b3JyCWE0LCBhNCwgYTA7CXZvcnIJYjQsIGI0LCBiMDsJdmVvcglhMywgYTMsIGEyOwl2ZW9yCWIzLCBiMywgYjI7CVwKKwl2ZW9yCWE0LCBhMjsJCXZlb3IJYjQsIGIyOworCisvKiBBcHBseSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2suICAqLworI2RlZmluZSBTQk9YKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCVNCT1gjI3doaWNoIChhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkKKworLyogQXBwbHkgaW52ZXJzZSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2suICAqLworI2RlZmluZSBTQk9YX0lOVkVSU0Uod2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KSBcCisJU0JPWCMjd2hpY2gjI19JTlZFUlNFIChhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkKKworLyogWE9SIHJvdW5kIGtleSBpbnRvIGJsb2NrIHN0YXRlIGluIGEwLGExLGEyLGEzLiBhNCB1c2VkIGFzIHRlbXBvcmFyeS4gICovCisjZGVmaW5lIEJMT0NLX1hPUl9LRVkoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2ZHVwLjMyIFJUMywgUlQwZDBbMF07IFwKKwl2ZHVwLjMyIFJUMSwgUlQwZDBbMV07IFwKKwl2ZHVwLjMyIFJUMiwgUlQwZDFbMF07IFwKKwl2ZHVwLjMyIFJUMCwgUlQwZDFbMV07IFwKKwl2ZW9yIGEwLCBhMCwgUlQzOwl2ZW9yIGIwLCBiMCwgUlQzOyBcCisJdmVvciBhMSwgYTEsIFJUMTsJdmVvciBiMSwgYjEsIFJUMTsgXAorCXZlb3IgYTIsIGEyLCBSVDI7CXZlb3IgYjIsIGIyLCBSVDI7IFwKKwl2ZW9yIGEzLCBhMywgUlQwOwl2ZW9yIGIzLCBiMywgUlQwOworCisjZGVmaW5lIEJMT0NLX0xPQURfS0VZX0VOQygpIFwKKwl2bGQxLjgge1JUMGQwLCBSVDBkMX0sIFtSUk9VTkRdITsKKworI2RlZmluZSBCTE9DS19MT0FEX0tFWV9ERUMoKSBcCisJdmxkMS44IHtSVDBkMCwgUlQwZDF9LCBbUlJPVU5EXTsgXAorCXN1YiBSUk9VTkQsIFJST1VORCwgIzE2CisKKy8qIEFwcGx5IHRoZSBsaW5lYXIgdHJhbnNmb3JtYXRpb24gdG8gQkxPQ0suICAqLworI2RlZmluZSBMSU5FQVJfVFJBTlNGT1JNQVRJT04oYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpIFwKKwl2c2hsLnUzMglhNCwgYTAsICMxMzsJCXZzaGwudTMyCWI0LCBiMCwgIzEzOwkJXAorCXZzaHIudTMyCWEwLCBhMCwgIygzMi0xMyk7CXZzaHIudTMyCWIwLCBiMCwgIygzMi0xMyk7CVwKKwl2ZW9yCQlhMCwgYTAsIGE0OwkJdmVvcgkJYjAsIGIwLCBiNDsJCVwKKwl2c2hsLnUzMglhNCwgYTIsICMzOwkJdnNobC51MzIJYjQsIGIyLCAjMzsJCVwKKwl2c2hyLnUzMglhMiwgYTIsICMoMzItMyk7CXZzaHIudTMyCWIyLCBiMiwgIygzMi0zKTsJXAorCXZlb3IJCWEyLCBhMiwgYTQ7CQl2ZW9yCQliMiwgYjIsIGI0OwkJXAorCXZlb3IJCWExLCBhMCwgYTE7CQl2ZW9yCQliMSwgYjAsIGIxOwkJXAorCXZlb3IJCWExLCBhMiwgYTE7CQl2ZW9yCQliMSwgYjIsIGIxOwkJXAorCXZzaGwudTMyCWE0LCBhMCwgIzM7CQl2c2hsLnUzMgliNCwgYjAsICMzOwkJXAorCXZlb3IJCWEzLCBhMiwgYTM7CQl2ZW9yCQliMywgYjIsIGIzOwkJXAorCXZlb3IJCWEzLCBhNCwgYTM7CQl2ZW9yCQliMywgYjQsIGIzOwkJXAorCXZzaGwudTMyCWE0LCBhMSwgIzE7CQl2c2hsLnUzMgliNCwgYjEsICMxOwkJXAorCXZzaHIudTMyCWExLCBhMSwgIygzMi0xKTsJdnNoci51MzIJYjEsIGIxLCAjKDMyLTEpOwlcCisJdmVvcgkJYTEsIGExLCBhNDsJCXZlb3IJCWIxLCBiMSwgYjQ7CQlcCisJdnNobC51MzIJYTQsIGEzLCAjNzsJCXZzaGwudTMyCWI0LCBiMywgIzc7CQlcCisJdnNoci51MzIJYTMsIGEzLCAjKDMyLTcpOwl2c2hyLnUzMgliMywgYjMsICMoMzItNyk7CVwKKwl2ZW9yCQlhMywgYTMsIGE0OwkJdmVvcgkJYjMsIGIzLCBiNDsJCVwKKwl2ZW9yCQlhMCwgYTEsIGEwOwkJdmVvcgkJYjAsIGIxLCBiMDsJCVwKKwl2ZW9yCQlhMCwgYTMsIGEwOwkJdmVvcgkJYjAsIGIzLCBiMDsJCVwKKwl2c2hsLnUzMglhNCwgYTEsICM3OwkJdnNobC51MzIJYjQsIGIxLCAjNzsJCVwKKwl2ZW9yCQlhMiwgYTMsIGEyOwkJdmVvcgkJYjIsIGIzLCBiMjsJCVwKKwl2ZW9yCQlhMiwgYTQsIGEyOwkJdmVvcgkJYjIsIGI0LCBiMjsJCVwKKwl2c2hsLnUzMglhNCwgYTAsICM1OwkJdnNobC51MzIJYjQsIGIwLCAjNTsJCVwKKwl2c2hyLnUzMglhMCwgYTAsICMoMzItNSk7CXZzaHIudTMyCWIwLCBiMCwgIygzMi01KTsJXAorCXZlb3IJCWEwLCBhMCwgYTQ7CQl2ZW9yCQliMCwgYjAsIGI0OwkJXAorCXZzaGwudTMyCWE0LCBhMiwgIzIyOwkJdnNobC51MzIJYjQsIGIyLCAjMjI7CQlcCisJdnNoci51MzIJYTIsIGEyLCAjKDMyLTIyKTsJdnNoci51MzIJYjIsIGIyLCAjKDMyLTIyKTsJXAorCXZlb3IJCWEyLCBhMiwgYTQ7CQl2ZW9yCQliMiwgYjIsIGI0OworCisvKiBBcHBseSB0aGUgaW52ZXJzZSBsaW5lYXIgdHJhbnNmb3JtYXRpb24gdG8gQkxPQ0suICAqLworI2RlZmluZSBMSU5FQVJfVFJBTlNGT1JNQVRJT05fSU5WRVJTRShhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCkgXAorCXZzaHIudTMyCWE0LCBhMiwgIzIyOwkJdnNoci51MzIJYjQsIGIyLCAjMjI7CQlcCisJdnNobC51MzIJYTIsIGEyLCAjKDMyLTIyKTsJdnNobC51MzIJYjIsIGIyLCAjKDMyLTIyKTsJXAorCXZlb3IJCWEyLCBhMiwgYTQ7CQl2ZW9yCQliMiwgYjIsIGI0OwkJXAorCXZzaHIudTMyCWE0LCBhMCwgIzU7CQl2c2hyLnUzMgliNCwgYjAsICM1OwkJXAorCXZzaGwudTMyCWEwLCBhMCwgIygzMi01KTsJdnNobC51MzIJYjAsIGIwLCAjKDMyLTUpOwlcCisJdmVvcgkJYTAsIGEwLCBhNDsJCXZlb3IJCWIwLCBiMCwgYjQ7CQlcCisJdnNobC51MzIJYTQsIGExLCAjNzsJCXZzaGwudTMyCWI0LCBiMSwgIzc7CQlcCisJdmVvcgkJYTIsIGEzLCBhMjsJCXZlb3IJCWIyLCBiMywgYjI7CQlcCisJdmVvcgkJYTIsIGE0LCBhMjsJCXZlb3IJCWIyLCBiNCwgYjI7CQlcCisJdmVvcgkJYTAsIGExLCBhMDsJCXZlb3IJCWIwLCBiMSwgYjA7CQlcCisJdmVvcgkJYTAsIGEzLCBhMDsJCXZlb3IJCWIwLCBiMywgYjA7CQlcCisJdnNoci51MzIJYTQsIGEzLCAjNzsJCXZzaHIudTMyCWI0LCBiMywgIzc7CQlcCisJdnNobC51MzIJYTMsIGEzLCAjKDMyLTcpOwl2c2hsLnUzMgliMywgYjMsICMoMzItNyk7CVwKKwl2ZW9yCQlhMywgYTMsIGE0OwkJdmVvcgkJYjMsIGIzLCBiNDsJCVwKKwl2c2hyLnUzMglhNCwgYTEsICMxOwkJdnNoci51MzIJYjQsIGIxLCAjMTsJCVwKKwl2c2hsLnUzMglhMSwgYTEsICMoMzItMSk7CXZzaGwudTMyCWIxLCBiMSwgIygzMi0xKTsJXAorCXZlb3IJCWExLCBhMSwgYTQ7CQl2ZW9yCQliMSwgYjEsIGI0OwkJXAorCXZzaGwudTMyCWE0LCBhMCwgIzM7CQl2c2hsLnUzMgliNCwgYjAsICMzOwkJXAorCXZlb3IJCWEzLCBhMiwgYTM7CQl2ZW9yCQliMywgYjIsIGIzOwkJXAorCXZlb3IJCWEzLCBhNCwgYTM7CQl2ZW9yCQliMywgYjQsIGIzOwkJXAorCXZlb3IJCWExLCBhMCwgYTE7CQl2ZW9yCQliMSwgYjAsIGIxOwkJXAorCXZlb3IJCWExLCBhMiwgYTE7CQl2ZW9yCQliMSwgYjIsIGIxOwkJXAorCXZzaHIudTMyCWE0LCBhMiwgIzM7CQl2c2hyLnUzMgliNCwgYjIsICMzOwkJXAorCXZzaGwudTMyCWEyLCBhMiwgIygzMi0zKTsJdnNobC51MzIJYjIsIGIyLCAjKDMyLTMpOwlcCisJdmVvcgkJYTIsIGEyLCBhNDsJCXZlb3IJCWIyLCBiMiwgYjQ7CQlcCisJdnNoci51MzIJYTQsIGEwLCAjMTM7CQl2c2hyLnUzMgliNCwgYjAsICMxMzsJCVwKKwl2c2hsLnUzMglhMCwgYTAsICMoMzItMTMpOwl2c2hsLnUzMgliMCwgYjAsICMoMzItMTMpOwlcCisJdmVvcgkJYTAsIGEwLCBhNDsJCXZlb3IJCWIwLCBiMCwgYjQ7CisKKy8qIEFwcGx5IGEgU2VycGVudCByb3VuZCB0byBlaWdodCBwYXJhbGxlbCBibG9ja3MuICBUaGlzIG1hY3JvIGluY3JlbWVudHMKKyAgIGByb3VuZCcuICAqLworI2RlZmluZSBST1VORChyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCSAgICBiMCwgYjEsIGIyLCBiMywgYjQsIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJQkxPQ0tfWE9SX0tFWSAoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpOwkJXAorCUJMT0NLX0xPQURfS0VZX0VOQyAoKTsJCQkJCQlcCisJU0JPWCAod2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJCVwKKwlMSU5FQVJfVFJBTlNGT1JNQVRJT04gKG5hMCwgbmExLCBuYTIsIG5hMywgbmE0LCBuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCk7CisKKy8qIEFwcGx5IHRoZSBsYXN0IFNlcnBlbnQgcm91bmQgdG8gZWlnaHQgcGFyYWxsZWwgYmxvY2tzLiAgVGhpcyBtYWNybyBpbmNyZW1lbnRzCisgICBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfTEFTVChyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCQkgYjAsIGIxLCBiMiwgYjMsIGI0LCBuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCkgXAorCUJMT0NLX1hPUl9LRVkgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJCVwKKwlCTE9DS19MT0FEX0tFWV9FTkMgKCk7CQkJCQkJXAorCVNCT1ggKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCk7CQlcCisJQkxPQ0tfWE9SX0tFWSAobmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KTsKKworLyogQXBwbHkgYW4gaW52ZXJzZSBTZXJwZW50IHJvdW5kIHRvIGVpZ2h0IHBhcmFsbGVsIGJsb2Nrcy4gIFRoaXMgbWFjcm8KKyAgIGluY3JlbWVudHMgYHJvdW5kJy4gICovCisjZGVmaW5lIFJPVU5EX0lOVkVSU0Uocm91bmQsIHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIFwKKwkJCQkgICAgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCQkgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBcCisJCQkJICAgIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJTElORUFSX1RSQU5TRk9STUFUSU9OX0lOVkVSU0UgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJXAorCVNCT1hfSU5WRVJTRSAod2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJCVwKKwlCTE9DS19YT1JfS0VZIChuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgbmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQpOwlcCisJQkxPQ0tfTE9BRF9LRVlfREVDICgpOworCisvKiBBcHBseSB0aGUgZmlyc3QgaW52ZXJzZSBTZXJwZW50IHJvdW5kIHRvIGVpZ2h0IHBhcmFsbGVsIGJsb2Nrcy4gIFRoaXMgbWFjcm8KKyAgIGluY3JlbWVudHMgYHJvdW5kJy4gICovCisjZGVmaW5lIFJPVU5EX0ZJUlNUX0lOVkVSU0Uocm91bmQsIHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIFwKKwkJCQkJICBuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgXAorCQkJCQkgIGIwLCBiMSwgYjIsIGIzLCBiNCwgXAorCQkJCQkgIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJQkxPQ0tfWE9SX0tFWSAoYTAsIGExLCBhMiwgYTMsIGE0LCBiMCwgYjEsIGIyLCBiMywgYjQpOwkJCVwKKwlCTE9DS19MT0FEX0tFWV9ERUMgKCk7CQkJCQkJCVwKKwlTQk9YX0lOVkVSU0UgKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIGIwLCBiMSwgYjIsIGIzLCBiNCk7IAkJXAorCUJMT0NLX1hPUl9LRVkgKG5hMCwgbmExLCBuYTIsIG5hMywgbmE0LCBuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCk7CVwKKwlCTE9DS19MT0FEX0tFWV9ERUMgKCk7CisKKy5hbGlnbiAzCisudHlwZSBfX3NlcnBlbnRfZW5jX2JsazgsJWZ1bmN0aW9uOworX19zZXJwZW50X2VuY19ibGs4OgorCS8qIGlucHV0OgorCSAqCXIwOiByb3VuZCBrZXkgcG9pbnRlcgorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbCBwbGFpbnRleHQKKwkgKgkJCQkJCWJsb2NrcworCSAqIG91dHB1dDoKKwkgKglSQTQsIFJBMSwgUkEyLCBSQTAsIFJCNCwgUkIxLCBSQjIsIFJCMDogZWlnaHQgcGFyYWxsZWwKKwkgKiAJCQkJCQljaXBoZXJ0ZXh0IGJsb2NrcworCSAqLworCisJdHJhbnNwb3NlXzR4NChSQTAsIFJBMSwgUkEyLCBSQTMpOworCUJMT0NLX0xPQURfS0VZX0VOQyAoKTsKKwl0cmFuc3Bvc2VfNHg0KFJCMCwgUkIxLCBSQjIsIFJCMyk7CisKKwlST1VORCAoMCwgMCwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkEzLAorCQkgICAgIFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMyk7CisJUk9VTkQgKDEsIDEsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywKKwkJICAgICBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMpOworCVJPVU5EICgyLCAyLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsCisJCSAgICAgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMsIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyKTsKKwlST1VORCAoMywgMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkEwLAorCQkgICAgIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDQsIDQsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkEwLCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywKKwkJICAgICBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjMpOworCVJPVU5EICg1LCA1LCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsCisJCSAgICAgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjMsIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzKTsKKwlST1VORCAoNiwgNiwgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LAorCQkgICAgIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkQgKDcsIDcsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywKKwkJICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMpOworCVJPVU5EICg4LCAwLCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTAsCisJCSAgICAgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMsIFJCMSwgUkIzLCBSQjIsIFJCNCwgUkIwKTsKKwlST1VORCAoOSwgMSwgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTAsIFJBMiwgUkExLCBSQTQsIFJBMywgUkEwLAorCQkgICAgIFJCMSwgUkIzLCBSQjIsIFJCNCwgUkIwLCBSQjIsIFJCMSwgUkI0LCBSQjMsIFJCMCk7CisJUk9VTkQgKDEwLCAyLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwgUkE0LCBSQTMsIFJBMSwgUkEwLCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjQsIFJCMywgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjAsIFJCMik7CisJUk9VTkQgKDExLCAzLCBSQTQsIFJBMywgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTEsIFJBMCwgUkEyLCBSQTQsCisJCSAgICAgIFJCNCwgUkIzLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCMSwgUkIwLCBSQjIsIFJCNCk7CisJUk9VTkQgKDEyLCA0LCBSQTMsIFJBMSwgUkEwLCBSQTIsIFJBNCwgUkExLCBSQTQsIFJBMywgUkEyLCBSQTAsCisJCSAgICAgIFJCMywgUkIxLCBSQjAsIFJCMiwgUkI0LCBSQjEsIFJCNCwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDEzLCA1LCBSQTEsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkE0LCBSQTIsIFJBMSwgUkEzLCBSQTAsCisJCSAgICAgIFJCMSwgUkI0LCBSQjMsIFJCMiwgUkIwLCBSQjQsIFJCMiwgUkIxLCBSQjMsIFJCMCk7CisJUk9VTkQgKDE0LCA2LCBSQTQsIFJBMiwgUkExLCBSQTMsIFJBMCwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTMsCisJCSAgICAgIFJCNCwgUkIyLCBSQjEsIFJCMywgUkIwLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMyk7CisJUk9VTkQgKDE1LCA3LCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBMywgUkEzLCBSQTEsIFJBMiwgUkE0LCBSQTAsCisJCSAgICAgIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIzLCBSQjMsIFJCMSwgUkIyLCBSQjQsIFJCMCk7CisJUk9VTkQgKDE2LCAwLCBSQTMsIFJBMSwgUkEyLCBSQTQsIFJBMCwgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgIFJCMywgUkIxLCBSQjIsIFJCNCwgUkIwLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCk7CisJUk9VTkQgKDE3LCAxLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEyLCBSQTEsIFJBMywgUkEwLCBSQTQsCisJCSAgICAgIFJCMSwgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjIsIFJCMSwgUkIzLCBSQjAsIFJCNCk7CisJUk9VTkQgKDE4LCAyLCBSQTIsIFJBMSwgUkEzLCBSQTAsIFJBNCwgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjMsIFJCMCwgUkI0LCBSQjMsIFJCMCwgUkIxLCBSQjQsIFJCMik7CisJUk9VTkQgKDE5LCAzLCBSQTMsIFJBMCwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBNCwgUkEyLCBSQTMsCisJCSAgICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkI0LCBSQjIsIFJCMyk7CisJUk9VTkQgKDIwLCA0LCBSQTAsIFJBMSwgUkE0LCBSQTIsIFJBMywgUkExLCBSQTMsIFJBMCwgUkEyLCBSQTQsCisJCSAgICAgIFJCMCwgUkIxLCBSQjQsIFJCMiwgUkIzLCBSQjEsIFJCMywgUkIwLCBSQjIsIFJCNCk7CisJUk9VTkQgKDIxLCA1LCBSQTEsIFJBMywgUkEwLCBSQTIsIFJBNCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTQsCisJCSAgICAgIFJCMSwgUkIzLCBSQjAsIFJCMiwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCk7CisJUk9VTkQgKDIyLCA2LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTAsCisJCSAgICAgIFJCMywgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkI0LCBSQjEsIFJCMCk7CisJUk9VTkQgKDIzLCA3LCBSQTMsIFJBMiwgUkE0LCBSQTEsIFJBMCwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIwLCBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCk7CisJUk9VTkQgKDI0LCAwLCBSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTMsCisJCSAgICAgIFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMyk7CisJUk9VTkQgKDI1LCAxLCBSQTEsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTMsCisJCSAgICAgIFJCMSwgUkI0LCBSQjIsIFJCMCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQsIFJCMyk7CisJUk9VTkQgKDI2LCAyLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIzLCBSQjAsIFJCNCwgUkIxLCBSQjMsIFJCMik7CisJUk9VTkQgKDI3LCAzLCBSQTAsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTEsIFJBMywgUkEyLCBSQTAsCisJCSAgICAgIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDI4LCA0LCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTMsCisJCSAgICAgIFJCNCwgUkIxLCBSQjMsIFJCMiwgUkIwLCBSQjEsIFJCMCwgUkI0LCBSQjIsIFJCMyk7CisJUk9VTkQgKDI5LCA1LCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsCisJCSAgICAgIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkIzLCBSQjAsIFJCMiwgUkIxLCBSQjQsIFJCMyk7CisJUk9VTkQgKDMwLCA2LCBSQTAsIFJBMiwgUkExLCBSQTQsIFJBMywgUkEwLCBSQTIsIFJBMywgUkExLCBSQTQsCisJCSAgICAgIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkRfTEFTVCAoMzEsIDcsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywKKwkJICAgICAgICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMpOworCisJdHJhbnNwb3NlXzR4NChSQTQsIFJBMSwgUkEyLCBSQTApOworCXRyYW5zcG9zZV80eDQoUkI0LCBSQjEsIFJCMiwgUkIwKTsKKworCWJ4IGxyOworLnNpemUgX19zZXJwZW50X2VuY19ibGs4LC4tX19zZXJwZW50X2VuY19ibGs4OworCisuYWxpZ24gMworLnR5cGUgICBfX3NlcnBlbnRfZGVjX2JsazgsJWZ1bmN0aW9uOworX19zZXJwZW50X2RlY19ibGs4OgorCS8qIGlucHV0OgorCSAqCXIwOiByb3VuZCBrZXkgcG9pbnRlcgorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbAorCSAqIAkJCQkJCWNpcGhlcnRleHQgYmxvY2tzCisJICogb3V0cHV0OgorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbCBwbGFpbnRleHQKKwkgKgkJCQkJCWJsb2NrcworCSAqLworCisJYWRkIFJST1VORCwgUlJPVU5ELCAjKDMyKjE2KTsKKworCXRyYW5zcG9zZV80eDQoUkEwLCBSQTEsIFJBMiwgUkEzKTsKKwlCTE9DS19MT0FEX0tFWV9ERUMgKCk7CisJdHJhbnNwb3NlXzR4NChSQjAsIFJCMSwgUkIyLCBSQjMpOworCisJUk9VTkRfRklSU1RfSU5WRVJTRSAoMzEsIDcsIFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LAorCQkJCSAgICBSQTMsIFJBMCwgUkExLCBSQTQsIFJBMiwKKwkJCQkgICAgUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQsCisJCQkJICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyKTsKKwlST1VORF9JTlZFUlNFICgzMCwgNiwgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLAorCQkgICAgICAgICAgICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoMjksIDUsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTEsIFJBMywgUkE0LCBSQTIsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIxLCBSQjMsIFJCNCwgUkIyLCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDI4LCA0LCBSQTEsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyNywgMywgUkExLCBSQTIsIFJBNCwgUkEwLCBSQTMsIFJBNCwgUkEyLCBSQTAsIFJBMSwgUkEzLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIyLCBSQjQsIFJCMCwgUkIzLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoMjYsIDIsIFJBNCwgUkEyLCBSQTAsIFJBMSwgUkEzLCBSQTIsIFJBMywgUkEwLCBSQTEsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMywgUkIyLCBSQjMsIFJCMCwgUkIxLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDI1LCAxLCBSQTIsIFJBMywgUkEwLCBSQTEsIFJBNCwgUkE0LCBSQTIsIFJBMSwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIyLCBSQjMsIFJCMCwgUkIxLCBSQjQsIFJCNCwgUkIyLCBSQjEsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyNCwgMCwgUkE0LCBSQTIsIFJBMSwgUkEwLCBSQTMsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkExLAorCQkgICAgICAgICAgICAgIFJCNCwgUkIyLCBSQjEsIFJCMCwgUkIzLCBSQjQsIFJCMywgUkIyLCBSQjAsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoMjMsIDcsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMiwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMywgUkIyLCBSQjAsIFJCMSwgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjIpOworCVJPVU5EX0lOVkVSU0UgKDIyLCA2LCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsCisJCSAgICAgICAgICAgICAgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwKTsKKwlST1VORF9JTlZFUlNFICgyMSwgNSwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBMywgUkEwLCBSQTEsIFJBMiwgUkE0LAorCQkgICAgICAgICAgICAgIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjMsIFJCMCwgUkIxLCBSQjIsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMjAsIDQsIFJBMywgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjMsIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkI0LCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDE5LCAzLCBSQTMsIFJBMiwgUkExLCBSQTQsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTAsCisJCSAgICAgICAgICAgICAgUkIzLCBSQjIsIFJCMSwgUkI0LCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIwKTsKKwlST1VORF9JTlZFUlNFICgxOCwgMiwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTAsIFJBMiwgUkEwLCBSQTQsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIwLCBSQjIsIFJCMCwgUkI0LCBSQjMsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoMTcsIDEsIFJBMiwgUkEwLCBSQTQsIFJBMywgUkExLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjIsIFJCMCwgUkI0LCBSQjMsIFJCMSwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDE2LCAwLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMCwgUkExLCBSQTAsIFJBMiwgUkE0LCBSQTMsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjAsIFJCMSwgUkIwLCBSQjIsIFJCNCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgxNSwgNywgUkExLCBSQTAsIFJBMiwgUkE0LCBSQTMsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEyLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIwLCBSQjIsIFJCNCwgUkIzLCBSQjQsIFJCMSwgUkIwLCBSQjMsIFJCMik7CisJUk9VTkRfSU5WRVJTRSAoMTQsIDYsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMSwgUkIwLCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDEzLCA1LCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEwLCBSQTQsIFJBMywgUkEyLCBSQTEsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQsIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkIxKTsKKwlST1VORF9JTlZFUlNFICgxMiwgNCwgUkEwLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LAorCQkgICAgICAgICAgICAgIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMTEsIDMsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDEwLCAyLCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTQsIFJBMSwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkI0LCBSQjEsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICg5LCAxLCBSQTIsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTQsCisJCSAgICAgICAgICAgICBSQjIsIFJCNCwgUkIxLCBSQjAsIFJCMywgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDgsIDAsIFJBMywgUkEyLCBSQTAsIFJBMSwgUkE0LCBSQTMsIFJBNCwgUkEyLCBSQTEsIFJBMCwKKwkJICAgICAgICAgICAgIFJCMywgUkIyLCBSQjAsIFJCMSwgUkI0LCBSQjMsIFJCNCwgUkIyLCBSQjEsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoNywgNywgUkEzLCBSQTQsIFJBMiwgUkExLCBSQTAsIFJBMSwgUkEzLCBSQTQsIFJBMCwgUkEyLAorCQkgICAgICAgICAgICAgUkIzLCBSQjQsIFJCMiwgUkIxLCBSQjAsIFJCMSwgUkIzLCBSQjQsIFJCMCwgUkIyKTsKKwlST1VORF9JTlZFUlNFICg2LCA2LCBSQTEsIFJBMywgUkE0LCBSQTAsIFJBMiwgUkEzLCBSQTQsIFJBMiwgUkEwLCBSQTEsCisJCSAgICAgICAgICAgICBSQjEsIFJCMywgUkI0LCBSQjAsIFJCMiwgUkIzLCBSQjQsIFJCMiwgUkIwLCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDUsIDUsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTQsIFJBMSwgUkEwLCBSQTIsIFJBMywKKwkJICAgICAgICAgICAgIFJCMywgUkI0LCBSQjIsIFJCMCwgUkIxLCBSQjQsIFJCMSwgUkIwLCBSQjIsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoNCwgNCwgUkE0LCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgUkI0LCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIxKTsKKwlST1VORF9JTlZFUlNFICgzLCAzLCBSQTQsIFJBMiwgUkEwLCBSQTMsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LCBSQTEsCisJCSAgICAgICAgICAgICBSQjQsIFJCMiwgUkIwLCBSQjMsIFJCMSwgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDIsIDIsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkExLCBSQTIsIFJBMSwgUkEzLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIxLCBSQjIsIFJCMSwgUkIzLCBSQjQsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoMSwgMSwgUkEyLCBSQTEsIFJBMywgUkE0LCBSQTAsIFJBMCwgUkEyLCBSQTQsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgUkIyLCBSQjEsIFJCMywgUkI0LCBSQjAsIFJCMCwgUkIyLCBSQjQsIFJCMywgUkIxKTsKKwlST1VORF9JTlZFUlNFICgwLCAwLCBSQTAsIFJBMiwgUkE0LCBSQTMsIFJBMSwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgICAgICAgICBSQjAsIFJCMiwgUkI0LCBSQjMsIFJCMSwgUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQpOworCisJdHJhbnNwb3NlXzR4NChSQTAsIFJBMSwgUkEyLCBSQTMpOworCXRyYW5zcG9zZV80eDQoUkIwLCBSQjEsIFJCMiwgUkIzKTsKKworCWJ4IGxyOworLnNpemUgX19zZXJwZW50X2RlY19ibGs4LC4tX19zZXJwZW50X2RlY19ibGs4OworCisuYWxpZ24gMworLmdsb2JsIF9nY3J5X3NlcnBlbnRfbmVvbl9jdHJfZW5jCisudHlwZSBfZ2NyeV9zZXJwZW50X25lb25fY3RyX2VuYywlZnVuY3Rpb247CitfZ2NyeV9zZXJwZW50X25lb25fY3RyX2VuYzoKKwkvKiBpbnB1dDoKKwkgKglyMDogY3R4LCBDVFgKKwkgKglyMTogZHN0ICg4IGJsb2NrcykKKwkgKglyMjogc3JjICg4IGJsb2NrcykKKwkgKglyMzogaXYKKwkgKi8KKworCXZtb3YudTggUlQxZDAsICMweGZmOyAvKiB1NjQ6IC0xICovCisJcHVzaCB7cjQsbHJ9OworCXZhZGQudTY0IFJUMmQwLCBSVDFkMCwgUlQxZDA7IC8qIHU2NDogLTIgKi8KKwl2cHVzaCB7UkE0LVJCMn07CisKKwkvKiBsb2FkIElWIGFuZCBieXRlc3dhcCAqLworCXZsZDEuOCB7UkEwfSwgW3IzXTsKKwl2cmV2NjQudTggUlQwLCBSQTA7IC8qIGJlID0+IGxlICovCisJbGRyIHI0LCBbcjMsICM4XTsKKworCS8qIGNvbnN0cnVjdCBJVnMgKi8KKwl2c3ViLnU2NCBSQTJkMSwgUlQwZDEsIFJUMmQwOyAvKiArMiAqLworCXZzdWIudTY0IFJBMWQxLCBSVDBkMSwgUlQxZDA7IC8qICsxICovCisJY21wIHI0LCAjLTE7CisKKwl2c3ViLnU2NCBSQjBkMSwgUkEyZDEsIFJUMmQwOyAvKiArNCAqLworCXZzdWIudTY0IFJBM2QxLCBSQTJkMSwgUlQxZDA7IC8qICszICovCisJbGRyIHI0LCBbcjMsICMxMl07CisKKwl2c3ViLnU2NCBSQjJkMSwgUkIwZDEsIFJUMmQwOyAvKiArNiAqLworCXZzdWIudTY0IFJCMWQxLCBSQjBkMSwgUlQxZDA7IC8qICs1ICovCisKKwl2c3ViLnU2NCBSVDJkMSwgUkIyZDEsIFJUMmQwOyAvKiArOCAqLworCXZzdWIudTY0IFJCM2QxLCBSQjJkMSwgUlQxZDA7IC8qICs3ICovCisKKwl2bW92IFJBMWQwLCBSVDBkMDsKKwl2bW92IFJBMmQwLCBSVDBkMDsKKwl2bW92IFJBM2QwLCBSVDBkMDsKKwl2bW92IFJCMGQwLCBSVDBkMDsKKwlyZXYgcjQsIHI0OworCXZtb3YgUkIxZDAsIFJUMGQwOworCXZtb3YgUkIyZDAsIFJUMGQwOworCXZtb3YgUkIzZDAsIFJUMGQwOworCXZtb3YgUlQyZDAsIFJUMGQwOworCisJLyogY2hlY2sgbmVlZCBmb3IgaGFuZGxpbmcgNjQtYml0IG92ZXJmbG93IGFuZCBjYXJyeSAqLworCWJlcSAuTGRvX2N0cl9jYXJyeTsKKworLkxjdHJfY2FycnlfZG9uZToKKwkvKiBsZSA9PiBiZSAqLworCXZyZXY2NC51OCBSQTEsIFJBMTsKKwl2cmV2NjQudTggUkEyLCBSQTI7CisJdnJldjY0LnU4IFJBMywgUkEzOworCXZyZXY2NC51OCBSQjAsIFJCMDsKKwl2cmV2NjQudTggUlQyLCBSVDI7CisJdnJldjY0LnU4IFJCMSwgUkIxOworCXZyZXY2NC51OCBSQjIsIFJCMjsKKwl2cmV2NjQudTggUkIzLCBSQjM7CisJLyogc3RvcmUgbmV3IElWICovCisJdnN0MS44IHtSVDJ9LCBbcjNdOworCisJYmwgX19zZXJwZW50X2VuY19ibGs4OworCisJdmxkMS44IHtSVDAsIFJUMX0sIFtyMl0hOworCXZsZDEuOCB7UlQyLCBSVDN9LCBbcjJdITsKKwl2ZW9yIFJBNCwgUkE0LCBSVDA7CisJdmVvciBSQTEsIFJBMSwgUlQxOworCXZsZDEuOCB7UlQwLCBSVDF9LCBbcjJdITsKKwl2ZW9yIFJBMiwgUkEyLCBSVDI7CisJdmVvciBSQTAsIFJBMCwgUlQzOworCXZsZDEuOCB7UlQyLCBSVDN9LCBbcjJdITsKKwl2ZW9yIFJCNCwgUkI0LCBSVDA7CisJdmVvciBSVDAsIFJUMDsKKwl2ZW9yIFJCMSwgUkIxLCBSVDE7CisJdmVvciBSVDEsIFJUMTsKKwl2ZW9yIFJCMiwgUkIyLCBSVDI7CisJdmVvciBSVDIsIFJUMjsKKwl2ZW9yIFJCMCwgUkIwLCBSVDM7CisJdmVvciBSVDMsIFJUMzsKKworCXZzdDEuOCB7UkE0fSwgW3IxXSE7CisJdnN0MS44IHtSQTF9LCBbcjFdITsKKwl2ZW9yIFJBMSwgUkExOworCXZzdDEuOCB7UkEyfSwgW3IxXSE7CisJdmVvciBSQTIsIFJBMjsKKwl2c3QxLjgge1JBMH0sIFtyMV0hOworCXZlb3IgUkEwLCBSQTA7CisJdnN0MS44IHtSQjR9LCBbcjFdITsKKwl2ZW9yIFJCNCwgUkI0OworCXZzdDEuOCB7UkIxfSwgW3IxXSE7CisJdnN0MS44IHtSQjJ9LCBbcjFdITsKKwl2c3QxLjgge1JCMH0sIFtyMV0hOworCisJdnBvcCB7UkE0LVJCMn07CisKKwkvKiBjbGVhciB0aGUgdXNlZCByZWdpc3RlcnMgKi8KKwl2ZW9yIFJBMywgUkEzOworCXZlb3IgUkIzLCBSQjM7CisKKwlwb3Age3I0LHBjfTsKKworLkxkb19jdHJfY2Fycnk6CisJY21wIHI0LCAjLTg7CisJYmxvIC5MY3RyX2NhcnJ5X2RvbmU7CisJYmVxIC5MY2FycnlfUlQyOworCisJY21wIHI0LCAjLTY7CisJYmxvIC5MY2FycnlfUkIzOworCWJlcSAuTGNhcnJ5X1JCMjsKKworCWNtcCByNCwgIy00OworCWJsbyAuTGNhcnJ5X1JCMTsKKwliZXEgLkxjYXJyeV9SQjA7CisKKwljbXAgcjQsICMtMjsKKwlibG8gLkxjYXJyeV9SQTM7CisJYmVxIC5MY2FycnlfUkEyOworCisJdnN1Yi51NjQgUkExZDAsIFJUMWQwOworLkxjYXJyeV9SQTI6CisJdnN1Yi51NjQgUkEyZDAsIFJUMWQwOworLkxjYXJyeV9SQTM6CisJdnN1Yi51NjQgUkEzZDAsIFJUMWQwOworLkxjYXJyeV9SQjA6CisJdnN1Yi51NjQgUkIwZDAsIFJUMWQwOworLkxjYXJyeV9SQjE6CisJdnN1Yi51NjQgUkIxZDAsIFJUMWQwOworLkxjYXJyeV9SQjI6CisJdnN1Yi51NjQgUkIyZDAsIFJUMWQwOworLkxjYXJyeV9SQjM6CisJdnN1Yi51NjQgUkIzZDAsIFJUMWQwOworLkxjYXJyeV9SVDI6CisJdnN1Yi51NjQgUlQyZDAsIFJUMWQwOworCisJYiAuTGN0cl9jYXJyeV9kb25lOworLnNpemUgX2djcnlfc2VycGVudF9uZW9uX2N0cl9lbmMsLi1fZ2NyeV9zZXJwZW50X25lb25fY3RyX2VuYzsKKworLmFsaWduIDMKKy5nbG9ibCBfZ2NyeV9zZXJwZW50X25lb25fY2ZiX2RlYworLnR5cGUgX2djcnlfc2VycGVudF9uZW9uX2NmYl9kZWMsJWZ1bmN0aW9uOworX2djcnlfc2VycGVudF9uZW9uX2NmYl9kZWM6CisJLyogaW5wdXQ6CisJICoJcjA6IGN0eCwgQ1RYCisJICoJcjE6IGRzdCAoOCBibG9ja3MpCisJICoJcjI6IHNyYyAoOCBibG9ja3MpCisJICoJcjM6IGl2CisJICovCisKKwlwdXNoIHtscn07CisJdnB1c2gge1JBNC1SQjJ9OworCisJLyogTG9hZCBpbnB1dCAqLworCXZsZDEuOCB7UkEwfSwgW3IzXTsKKwl2bGQxLjgge1JBMSwgUkEyfSwgW3IyXSE7CisJdmxkMS44IHtSQTN9LCBbcjJdITsKKwl2bGQxLjgge1JCMH0sIFtyMl0hOworCXZsZDEuOCB7UkIxLCBSQjJ9LCBbcjJdITsKKwl2bGQxLjgge1JCM30sIFtyMl0hOworCisJLyogVXBkYXRlIElWICovCisJdmxkMS44IHtSVDB9LCBbcjJdITsKKwl2c3QxLjgge1JUMH0sIFtyM107CisJbW92IHIzLCBscjsKKwlzdWIgcjIsIHIyLCAjKDgqMTYpOworCisJYmwgX19zZXJwZW50X2VuY19ibGs4OworCisJdmxkMS44IHtSVDAsIFJUMX0sIFtyMl0hOworCXZsZDEuOCB7UlQyLCBSVDN9LCBbcjJdITsKKwl2ZW9yIFJBNCwgUkE0LCBSVDA7CisJdmVvciBSQTEsIFJBMSwgUlQxOworCXZsZDEuOCB7UlQwLCBSVDF9LCBbcjJdITsKKwl2ZW9yIFJBMiwgUkEyLCBSVDI7CisJdmVvciBSQTAsIFJBMCwgUlQzOworCXZsZDEuOCB7UlQyLCBSVDN9LCBbcjJdITsKKwl2ZW9yIFJCNCwgUkI0LCBSVDA7CisJdmVvciBSVDAsIFJUMDsKKwl2ZW9yIFJCMSwgUkIxLCBSVDE7CisJdmVvciBSVDEsIFJUMTsKKwl2ZW9yIFJCMiwgUkIyLCBSVDI7CisJdmVvciBSVDIsIFJUMjsKKwl2ZW9yIFJCMCwgUkIwLCBSVDM7CisJdmVvciBSVDMsIFJUMzsKKworCXZzdDEuOCB7UkE0fSwgW3IxXSE7CisJdnN0MS44IHtSQTF9LCBbcjFdITsKKwl2ZW9yIFJBMSwgUkExOworCXZzdDEuOCB7UkEyfSwgW3IxXSE7CisJdmVvciBSQTIsIFJBMjsKKwl2c3QxLjgge1JBMH0sIFtyMV0hOworCXZlb3IgUkEwLCBSQTA7CisJdnN0MS44IHtSQjR9LCBbcjFdITsKKwl2ZW9yIFJCNCwgUkI0OworCXZzdDEuOCB7UkIxfSwgW3IxXSE7CisJdnN0MS44IHtSQjJ9LCBbcjFdITsKKwl2c3QxLjgge1JCMH0sIFtyMV0hOworCisJdnBvcCB7UkE0LVJCMn07CisKKwkvKiBjbGVhciB0aGUgdXNlZCByZWdpc3RlcnMgKi8KKwl2ZW9yIFJBMywgUkEzOworCXZlb3IgUkIzLCBSQjM7CisKKwlwb3Age3BjfTsKKy5zaXplIF9nY3J5X3NlcnBlbnRfbmVvbl9jZmJfZGVjLC4tX2djcnlfc2VycGVudF9uZW9uX2NmYl9kZWM7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfc2VycGVudF9uZW9uX2NiY19kZWMKKy50eXBlIF9nY3J5X3NlcnBlbnRfbmVvbl9jYmNfZGVjLCVmdW5jdGlvbjsKK19nY3J5X3NlcnBlbnRfbmVvbl9jYmNfZGVjOgorCS8qIGlucHV0OgorCSAqCXIwOiBjdHgsIENUWAorCSAqCXIxOiBkc3QgKDggYmxvY2tzKQorCSAqCXIyOiBzcmMgKDggYmxvY2tzKQorCSAqCXIzOiBpdgorCSAqLworCisJcHVzaCB7bHJ9OworCXZwdXNoIHtSQTQtUkIyfTsKKworCXZsZDEuOCB7UkEwLCBSQTF9LCBbcjJdITsKKwl2bGQxLjgge1JBMiwgUkEzfSwgW3IyXSE7CisJdmxkMS44IHtSQjAsIFJCMX0sIFtyMl0hOworCXZsZDEuOCB7UkIyLCBSQjN9LCBbcjJdITsKKwlzdWIgcjIsIHIyLCAjKDgqMTYpOworCisJYmwgX19zZXJwZW50X2RlY19ibGs4OworCisJdmxkMS44IHtSQjR9LCBbcjNdOworCXZsZDEuOCB7UlQwLCBSVDF9LCBbcjJdITsKKwl2bGQxLjgge1JUMiwgUlQzfSwgW3IyXSE7CisJdmVvciBSQTAsIFJBMCwgUkI0OworCXZlb3IgUkExLCBSQTEsIFJUMDsKKwl2ZW9yIFJBMiwgUkEyLCBSVDE7CisJdmxkMS44IHtSVDAsIFJUMX0sIFtyMl0hOworCXZlb3IgUkEzLCBSQTMsIFJUMjsKKwl2ZW9yIFJCMCwgUkIwLCBSVDM7CisJdmxkMS44IHtSVDIsIFJUM30sIFtyMl0hOworCXZlb3IgUkIxLCBSQjEsIFJUMDsKKwl2ZW9yIFJUMCwgUlQwOworCXZlb3IgUkIyLCBSQjIsIFJUMTsKKwl2ZW9yIFJUMSwgUlQxOworCXZlb3IgUkIzLCBSQjMsIFJUMjsKKwl2ZW9yIFJUMiwgUlQyOworCXZzdDEuOCB7UlQzfSwgW3IzXTsgLyogc3RvcmUgbmV3IElWICovCisJdmVvciBSVDMsIFJUMzsKKworCXZzdDEuOCB7UkEwLCBSQTF9LCBbcjFdITsKKwl2ZW9yIFJBMCwgUkEwOworCXZlb3IgUkExLCBSQTE7CisJdnN0MS44IHtSQTIsIFJBM30sIFtyMV0hOworCXZlb3IgUkEyLCBSQTI7CisJdnN0MS44IHtSQjAsIFJCMX0sIFtyMV0hOworCXZlb3IgUkEzLCBSQTM7CisJdnN0MS44IHtSQjIsIFJCM30sIFtyMV0hOworCXZlb3IgUkIzLCBSQjM7CisKKwl2cG9wIHtSQTQtUkIyfTsKKworCS8qIGNsZWFyIHRoZSB1c2VkIHJlZ2lzdGVycyAqLworCXZlb3IgUkI0LCBSQjQ7CisKKwlwb3Age3BjfTsKKy5zaXplIF9nY3J5X3NlcnBlbnRfbmVvbl9jYmNfZGVjLC4tX2djcnlfc2VycGVudF9uZW9uX2NiY19kZWM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NlcnBlbnQtYXZ4Mi1hbWQ2NC5TIGIvY2lwaGVyL3NlcnBlbnQtYXZ4Mi1hbWQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvc2VycGVudC1hdngyLWFtZDY0LlMKQEAgLTAsMCArMSw4MTIgQEAKKy8qIHNlcnBlbnQtYXZ4Mi1hbWQ2NC5TICAtICBBVlgyIGltcGxlbWVudGF0aW9uIG9mIFNlcnBlbnQgY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgX194ODZfNjQKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpZiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpICYmIGRlZmluZWQoVVNFX1NFUlBFTlQpICYmIFwKKyAgICBkZWZpbmVkKEVOQUJMRV9BVlgyX1NVUFBPUlQpCisKKyNpZmRlZiBfX1BJQ19fCisjICBkZWZpbmUgUklQICglcmlwKQorI2Vsc2UKKyMgIGRlZmluZSBSSVAKKyNlbmRpZgorCisvKiBzdHJ1Y3Qgc2VycGVudF9jb250ZXh0OiAqLworI2RlZmluZSBjdHhfa2V5cyAwCisKKy8qIHJlZ2lzdGVyIG1hY3JvcyAqLworI2RlZmluZSBDVFggJXJkaQorCisvKiB2ZWN0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJBMCAleW1tMAorI2RlZmluZSBSQTEgJXltbTEKKyNkZWZpbmUgUkEyICV5bW0yCisjZGVmaW5lIFJBMyAleW1tMworI2RlZmluZSBSQTQgJXltbTQKKworI2RlZmluZSBSQjAgJXltbTUKKyNkZWZpbmUgUkIxICV5bW02CisjZGVmaW5lIFJCMiAleW1tNworI2RlZmluZSBSQjMgJXltbTgKKyNkZWZpbmUgUkI0ICV5bW05CisKKyNkZWZpbmUgUk5PVCAleW1tMTAKKyNkZWZpbmUgUlRNUDAgJXltbTExCisjZGVmaW5lIFJUTVAxICV5bW0xMgorI2RlZmluZSBSVE1QMiAleW1tMTMKKyNkZWZpbmUgUlRNUDMgJXltbTE0CisjZGVmaW5lIFJUTVA0ICV5bW0xNQorCisjZGVmaW5lIFJOT1R4ICV4bW0xMAorI2RlZmluZSBSVE1QMHggJXhtbTExCisjZGVmaW5lIFJUTVAxeCAleG1tMTIKKyNkZWZpbmUgUlRNUDJ4ICV4bW0xMworI2RlZmluZSBSVE1QM3ggJXhtbTE0CisjZGVmaW5lIFJUTVA0eCAleG1tMTUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgaGVscGVyIG1hY3JvcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHZlY3RvciAzMi1iaXQgcm90YXRpb24gdG8gbGVmdCAqLworI2RlZmluZSB2ZWNfcm9sKHJlZywgbmxlZnQsIHRtcCkgXAorCXZwc2xsZCAkKG5sZWZ0KSwgcmVnLCB0bXA7CQlcCisJdnBzcmxkICQoMzIgLSAobmxlZnQpKSwgcmVnLCByZWc7CVwKKwl2cG9yIHRtcCwgcmVnLCByZWc7CisKKy8qIHZlY3RvciAzMi1iaXQgcm90YXRpb24gdG8gcmlnaHQgKi8KKyNkZWZpbmUgdmVjX3JvcihyZWcsIG5yaWdodCwgdG1wKSBcCisJdmVjX3JvbChyZWcsIDMyIC0gbnJpZ2h0LCB0bXApCisKKy8qIDR4NCAzMi1iaXQgaW50ZWdlciBtYXRyaXggdHJhbnNwb3NlICovCisjZGVmaW5lIHRyYW5zcG9zZV80eDQoeDAsIHgxLCB4MiwgeDMsIHQxLCB0MiwgdDMpIFwKKwl2cHVucGNraGRxIHgxLCB4MCwgdDI7IFwKKwl2cHVucGNrbGRxIHgxLCB4MCwgeDA7IFwKKwlcCisJdnB1bnBja2xkcSB4MywgeDIsIHQxOyBcCisJdnB1bnBja2hkcSB4MywgeDIsIHgyOyBcCisJXAorCXZwdW5wY2tocWRxIHQxLCB4MCwgeDE7IFwKKwl2cHVucGNrbHFkcSB0MSwgeDAsIHgwOyBcCisJXAorCXZwdW5wY2tocWRxIHgyLCB0MiwgeDM7IFwKKwl2cHVucGNrbHFkcSB4MiwgdDIsIHgyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAxNi13YXkgc2VycGVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIFMtQm94ZXMgb2YgU2VycGVudCBmcm9tIGZvbGxvd2luZyByZXNlYXJjaCBwYXBlci4KKyAqCisgKiAgRC4gQS4gT3N2aWssIOKAnFNwZWVkaW5nIHVwIFNlcnBlbnQs4oCdIGluIFRoaXJkIEFFUyBDYW5kaWRhdGUgQ29uZmVyZW5jZSwKKyAqICAgKE5ldyBZb3JrLCBOZXcgWW9yaywgVVNBKSwgcC4gMzE34oCTMzI5LCBOYXRpb25hbCBJbnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZAorICogICBUZWNobm9sb2d5LCAyMDAwLgorICoKKyAqIFBhcGVyIGlzIGFsc28gYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LmlpLnVpYi5uby9+b3N2aWsvcHViL2FlczMucGRmCisgKgorICovCisjZGVmaW5lIFNCT1gwKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZweG9yCXIwLCByMywgcjM7CQl2bW92ZHFhCXIxLCByNDsJCQlcCisJdnBhbmQJcjMsIHIxLCByMTsJCXZweG9yCXIyLCByNCwgcjQ7CQlcCisJdnB4b3IJcjAsIHIxLCByMTsJCXZwb3IJcjMsIHIwLCByMDsJCVwKKwl2cHhvcglyNCwgcjAsIHIwOwkJdnB4b3IJcjMsIHI0LCByNDsJCVwKKwl2cHhvcglyMiwgcjMsIHIzOwkJdnBvcglyMSwgcjIsIHIyOwkJXAorCXZweG9yCXI0LCByMiwgcjI7CQl2cHhvcglSTk9ULCByNCwgcjQ7CQlcCisJdnBvcglyMSwgcjQsIHI0OwkJdnB4b3IJcjMsIHIxLCByMTsJCVwKKwl2cHhvcglyNCwgcjEsIHIxOwkJdnBvcglyMCwgcjMsIHIzOwkJXAorCXZweG9yCXIzLCByMSwgcjE7CQl2cHhvcglyMywgcjQsIHI0OworCisjZGVmaW5lIFNCT1gwX0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdnB4b3IJUk5PVCwgcjIsIHIyOwkJdm1vdmRxYQlyMSwgcjQ7CQkJXAorCXZwb3IJcjAsIHIxLCByMTsJCXZweG9yCVJOT1QsIHI0LCByNDsJCVwKKwl2cHhvcglyMiwgcjEsIHIxOwkJdnBvcglyNCwgcjIsIHIyOwkJXAorCXZweG9yCXIzLCByMSwgcjE7CQl2cHhvcglyNCwgcjAsIHIwOwkJXAorCXZweG9yCXIwLCByMiwgcjI7CQl2cGFuZAlyMywgcjAsIHIwOwkJXAorCXZweG9yCXIwLCByNCwgcjQ7CQl2cG9yCXIxLCByMCwgcjA7CQlcCisJdnB4b3IJcjIsIHIwLCByMDsJCXZweG9yCXI0LCByMywgcjM7CQlcCisJdnB4b3IJcjEsIHIyLCByMjsJCXZweG9yCXIwLCByMywgcjM7CQlcCisJdnB4b3IJcjEsIHIzLCByMzsJXAorCXZwYW5kCXIzLCByMiwgcjI7CVwKKwl2cHhvcglyMiwgcjQsIHI0OworCisjZGVmaW5lIFNCT1gxKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZweG9yCVJOT1QsIHIwLCByMDsJCXZweG9yCVJOT1QsIHIyLCByMjsJCVwKKwl2bW92ZHFhCXIwLCByNDsJCQl2cGFuZAlyMSwgcjAsIHIwOwkJXAorCXZweG9yCXIwLCByMiwgcjI7CQl2cG9yCXIzLCByMCwgcjA7CQlcCisJdnB4b3IJcjIsIHIzLCByMzsJCXZweG9yCXIwLCByMSwgcjE7CQlcCisJdnB4b3IJcjQsIHIwLCByMDsJCXZwb3IJcjEsIHI0LCByNDsJCVwKKwl2cHhvcglyMywgcjEsIHIxOwkJdnBvcglyMCwgcjIsIHIyOwkJXAorCXZwYW5kCXI0LCByMiwgcjI7CQl2cHhvcglyMSwgcjAsIHIwOwkJXAorCXZwYW5kCXIyLCByMSwgcjE7CVwKKwl2cHhvcglyMCwgcjEsIHIxOwkJdnBhbmQJcjIsIHIwLCByMDsJCVwKKwl2cHhvcglyNCwgcjAsIHIwOworCisjZGVmaW5lIFNCT1gxX0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdm1vdmRxYQlyMSwgcjQ7CQkJdnB4b3IJcjMsIHIxLCByMTsJCVwKKwl2cGFuZAlyMSwgcjMsIHIzOwkJdnB4b3IJcjIsIHI0LCByNDsJCVwKKwl2cHhvcglyMCwgcjMsIHIzOwkJdnBvcglyMSwgcjAsIHIwOwkJXAorCXZweG9yCXIzLCByMiwgcjI7CQl2cHhvcglyNCwgcjAsIHIwOwkJXAorCXZwb3IJcjIsIHIwLCByMDsJCXZweG9yCXIzLCByMSwgcjE7CQlcCisJdnB4b3IJcjEsIHIwLCByMDsJCXZwb3IJcjMsIHIxLCByMTsJCVwKKwl2cHhvcglyMCwgcjEsIHIxOwkJdnB4b3IJUk5PVCwgcjQsIHI0OwkJXAorCXZweG9yCXIxLCByNCwgcjQ7CQl2cG9yCXIwLCByMSwgcjE7CQlcCisJdnB4b3IJcjAsIHIxLCByMTsJXAorCXZwb3IJcjQsIHIxLCByMTsJXAorCXZweG9yCXIxLCByMywgcjM7CisKKyNkZWZpbmUgU0JPWDIocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdm1vdmRxYQlyMCwgcjQ7CQkJdnBhbmQJcjIsIHIwLCByMDsJCVwKKwl2cHhvcglyMywgcjAsIHIwOwkJdnB4b3IJcjEsIHIyLCByMjsJCVwKKwl2cHhvcglyMCwgcjIsIHIyOwkJdnBvcglyNCwgcjMsIHIzOwkJXAorCXZweG9yCXIxLCByMywgcjM7CQl2cHhvcglyMiwgcjQsIHI0OwkJXAorCXZtb3ZkcWEJcjMsIHIxOwkJCXZwb3IJcjQsIHIzLCByMzsJCVwKKwl2cHhvcglyMCwgcjMsIHIzOwkJdnBhbmQJcjEsIHIwLCByMDsJCVwKKwl2cHhvcglyMCwgcjQsIHI0OwkJdnB4b3IJcjMsIHIxLCByMTsJCVwKKwl2cHhvcglyNCwgcjEsIHIxOwkJdnB4b3IJUk5PVCwgcjQsIHI0OworCisjZGVmaW5lIFNCT1gyX0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdnB4b3IJcjMsIHIyLCByMjsJCXZweG9yCXIwLCByMywgcjM7CQlcCisJdm1vdmRxYQlyMywgcjQ7CQkJdnBhbmQJcjIsIHIzLCByMzsJCVwKKwl2cHhvcglyMSwgcjMsIHIzOwkJdnBvcglyMiwgcjEsIHIxOwkJXAorCXZweG9yCXI0LCByMSwgcjE7CQl2cGFuZAlyMywgcjQsIHI0OwkJXAorCXZweG9yCXIzLCByMiwgcjI7CQl2cGFuZAlyMCwgcjQsIHI0OwkJXAorCXZweG9yCXIyLCByNCwgcjQ7CQl2cGFuZAlyMSwgcjIsIHIyOwkJXAorCXZwb3IJcjAsIHIyLCByMjsJCXZweG9yCVJOT1QsIHIzLCByMzsJCVwKKwl2cHhvcglyMywgcjIsIHIyOwkJdnB4b3IJcjMsIHIwLCByMDsJCVwKKwl2cGFuZAlyMSwgcjAsIHIwOwkJdnB4b3IJcjQsIHIzLCByMzsJCVwKKwl2cHhvcglyMCwgcjMsIHIzOworCisjZGVmaW5lIFNCT1gzKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZtb3ZkcWEJcjAsIHI0OwkJCXZwb3IJcjMsIHIwLCByMDsJCVwKKwl2cHhvcglyMSwgcjMsIHIzOwkJdnBhbmQJcjQsIHIxLCByMTsJCVwKKwl2cHhvcglyMiwgcjQsIHI0OwkJdnB4b3IJcjMsIHIyLCByMjsJCVwKKwl2cGFuZAlyMCwgcjMsIHIzOwkJdnBvcglyMSwgcjQsIHI0OwkJXAorCXZweG9yCXI0LCByMywgcjM7CQl2cHhvcglyMSwgcjAsIHIwOwkJXAorCXZwYW5kCXIwLCByNCwgcjQ7CQl2cHhvcglyMywgcjEsIHIxOwkJXAorCXZweG9yCXIyLCByNCwgcjQ7CQl2cG9yCXIwLCByMSwgcjE7CQlcCisJdnB4b3IJcjIsIHIxLCByMTsJCXZweG9yCXIzLCByMCwgcjA7CQlcCisJdm1vdmRxYQlyMSwgcjI7CQkJdnBvcglyMywgcjEsIHIxOwkJXAorCXZweG9yCXIwLCByMSwgcjE7CisKKyNkZWZpbmUgU0JPWDNfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2bW92ZHFhCXIyLCByNDsJCQl2cHhvcglyMSwgcjIsIHIyOwkJXAorCXZweG9yCXIyLCByMCwgcjA7CQl2cGFuZAlyMiwgcjQsIHI0OwkJXAorCXZweG9yCXIwLCByNCwgcjQ7CQl2cGFuZAlyMSwgcjAsIHIwOwkJXAorCXZweG9yCXIzLCByMSwgcjE7CQl2cG9yCXI0LCByMywgcjM7CQlcCisJdnB4b3IJcjMsIHIyLCByMjsJCXZweG9yCXIzLCByMCwgcjA7CQlcCisJdnB4b3IJcjQsIHIxLCByMTsJCXZwYW5kCXIyLCByMywgcjM7CQlcCisJdnB4b3IJcjEsIHIzLCByMzsJCXZweG9yCXIwLCByMSwgcjE7CQlcCisJdnBvcglyMiwgcjEsIHIxOwkJdnB4b3IJcjMsIHIwLCByMDsJCVwKKwl2cHhvcglyNCwgcjEsIHIxOwlcCisJdnB4b3IJcjEsIHIwLCByMDsKKworI2RlZmluZSBTQk9YNChyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2cHhvcglyMywgcjEsIHIxOwkJdnB4b3IJUk5PVCwgcjMsIHIzOwkJXAorCXZweG9yCXIzLCByMiwgcjI7CQl2cHhvcglyMCwgcjMsIHIzOwkJXAorCXZtb3ZkcWEJcjEsIHI0OwkJCXZwYW5kCXIzLCByMSwgcjE7CQlcCisJdnB4b3IJcjIsIHIxLCByMTsJCXZweG9yCXIzLCByNCwgcjQ7CQlcCisJdnB4b3IJcjQsIHIwLCByMDsJCXZwYW5kCXI0LCByMiwgcjI7CQlcCisJdnB4b3IJcjAsIHIyLCByMjsJCXZwYW5kCXIxLCByMCwgcjA7CQlcCisJdnB4b3IJcjAsIHIzLCByMzsJCXZwb3IJcjEsIHI0LCByNDsJCVwKKwl2cHhvcglyMCwgcjQsIHI0OwkJdnBvcglyMywgcjAsIHIwOwkJXAorCXZweG9yCXIyLCByMCwgcjA7CQl2cGFuZAlyMywgcjIsIHIyOwkJXAorCXZweG9yCVJOT1QsIHIwLCByMDsJCXZweG9yCXIyLCByNCwgcjQ7CisKKyNkZWZpbmUgU0JPWDRfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2bW92ZHFhCXIyLCByNDsJCQl2cGFuZAlyMywgcjIsIHIyOwkJXAorCXZweG9yCXIxLCByMiwgcjI7CQl2cG9yCXIzLCByMSwgcjE7CQlcCisJdnBhbmQJcjAsIHIxLCByMTsJCXZweG9yCXIyLCByNCwgcjQ7CQlcCisJdnB4b3IJcjEsIHI0LCByNDsJCXZwYW5kCXIyLCByMSwgcjE7CQlcCisJdnB4b3IJUk5PVCwgcjAsIHIwOwkJdnB4b3IJcjQsIHIzLCByMzsJCVwKKwl2cHhvcglyMywgcjEsIHIxOwkJdnBhbmQJcjAsIHIzLCByMzsJCVwKKwl2cHhvcglyMiwgcjMsIHIzOwkJdnB4b3IJcjEsIHIwLCByMDsJCVwKKwl2cGFuZAlyMCwgcjIsIHIyOwkJdnB4b3IJcjAsIHIzLCByMzsJCVwKKwl2cHhvcglyNCwgcjIsIHIyOwlcCisJdnBvcglyMywgcjIsIHIyOwkJdnB4b3IJcjAsIHIzLCByMzsJCVwKKwl2cHhvcglyMSwgcjIsIHIyOworCisjZGVmaW5lIFNCT1g1KHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZweG9yCXIxLCByMCwgcjA7CQl2cHhvcglyMywgcjEsIHIxOwkJXAorCXZweG9yCVJOT1QsIHIzLCByMzsJCXZtb3ZkcWEJcjEsIHI0OwkJCVwKKwl2cGFuZAlyMCwgcjEsIHIxOwkJdnB4b3IJcjMsIHIyLCByMjsJCVwKKwl2cHhvcglyMiwgcjEsIHIxOwkJdnBvcglyNCwgcjIsIHIyOwkJXAorCXZweG9yCXIzLCByNCwgcjQ7CQl2cGFuZAlyMSwgcjMsIHIzOwkJXAorCXZweG9yCXIwLCByMywgcjM7CQl2cHhvcglyMSwgcjQsIHI0OwkJXAorCXZweG9yCXIyLCByNCwgcjQ7CQl2cHhvcglyMCwgcjIsIHIyOwkJXAorCXZwYW5kCXIzLCByMCwgcjA7CQl2cHhvcglSTk9ULCByMiwgcjI7CQlcCisJdnB4b3IJcjQsIHIwLCByMDsJCXZwb3IJcjMsIHI0LCByNDsJCVwKKwl2cHhvcglyNCwgcjIsIHIyOworCisjZGVmaW5lIFNCT1g1X0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdnB4b3IJUk5PVCwgcjEsIHIxOwkJdm1vdmRxYQlyMywgcjQ7CQkJXAorCXZweG9yCXIxLCByMiwgcjI7CQl2cG9yCXIwLCByMywgcjM7CQlcCisJdnB4b3IJcjIsIHIzLCByMzsJCXZwb3IJcjEsIHIyLCByMjsJCVwKKwl2cGFuZAlyMCwgcjIsIHIyOwkJdnB4b3IJcjMsIHI0LCByNDsJCVwKKwl2cHhvcglyNCwgcjIsIHIyOwkJdnBvcglyMCwgcjQsIHI0OwkJXAorCXZweG9yCXIxLCByNCwgcjQ7CQl2cGFuZAlyMiwgcjEsIHIxOwkJXAorCXZweG9yCXIzLCByMSwgcjE7CQl2cHhvcglyMiwgcjQsIHI0OwkJXAorCXZwYW5kCXI0LCByMywgcjM7CQl2cHhvcglyMSwgcjQsIHI0OwkJXAorCXZweG9yCXI0LCByMywgcjM7CQl2cHhvcglSTk9ULCByNCwgcjQ7CQlcCisJdnB4b3IJcjAsIHIzLCByMzsKKworI2RlZmluZSBTQk9YNihyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2cHhvcglSTk9ULCByMiwgcjI7CQl2bW92ZHFhCXIzLCByNDsJCQlcCisJdnBhbmQJcjAsIHIzLCByMzsJCXZweG9yCXI0LCByMCwgcjA7CQlcCisJdnB4b3IJcjIsIHIzLCByMzsJCXZwb3IJcjQsIHIyLCByMjsJCVwKKwl2cHhvcglyMywgcjEsIHIxOwkJdnB4b3IJcjAsIHIyLCByMjsJCVwKKwl2cG9yCXIxLCByMCwgcjA7CQl2cHhvcglyMSwgcjIsIHIyOwkJXAorCXZweG9yCXIwLCByNCwgcjQ7CQl2cG9yCXIzLCByMCwgcjA7CQlcCisJdnB4b3IJcjIsIHIwLCByMDsJCXZweG9yCXIzLCByNCwgcjQ7CQlcCisJdnB4b3IJcjAsIHI0LCByNDsJCXZweG9yCVJOT1QsIHIzLCByMzsJCVwKKwl2cGFuZAlyNCwgcjIsIHIyOwlcCisJdnB4b3IJcjMsIHIyLCByMjsKKworI2RlZmluZSBTQk9YNl9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZweG9yCXIyLCByMCwgcjA7CQl2bW92ZHFhCXIyLCByNDsJCQlcCisJdnBhbmQJcjAsIHIyLCByMjsJCXZweG9yCXIzLCByNCwgcjQ7CQlcCisJdnB4b3IJUk5PVCwgcjIsIHIyOwkJdnB4b3IJcjEsIHIzLCByMzsJCVwKKwl2cHhvcglyMywgcjIsIHIyOwkJdnBvcglyMCwgcjQsIHI0OwkJXAorCXZweG9yCXIyLCByMCwgcjA7CQl2cHhvcglyNCwgcjMsIHIzOwkJXAorCXZweG9yCXIxLCByNCwgcjQ7CQl2cGFuZAlyMywgcjEsIHIxOwkJXAorCXZweG9yCXIwLCByMSwgcjE7CQl2cHhvcglyMywgcjAsIHIwOwkJXAorCXZwb3IJcjIsIHIwLCByMDsJCXZweG9yCXIxLCByMywgcjM7CQlcCisJdnB4b3IJcjAsIHI0LCByNDsKKworI2RlZmluZSBTQk9YNyhyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2bW92ZHFhCXIxLCByNDsJCQl2cG9yCXIyLCByMSwgcjE7CQlcCisJdnB4b3IJcjMsIHIxLCByMTsJCXZweG9yCXIyLCByNCwgcjQ7CQlcCisJdnB4b3IJcjEsIHIyLCByMjsJCXZwb3IJcjQsIHIzLCByMzsJCVwKKwl2cGFuZAlyMCwgcjMsIHIzOwkJdnB4b3IJcjIsIHI0LCByNDsJCVwKKwl2cHhvcglyMSwgcjMsIHIzOwkJdnBvcglyNCwgcjEsIHIxOwkJXAorCXZweG9yCXIwLCByMSwgcjE7CQl2cG9yCXI0LCByMCwgcjA7CQlcCisJdnB4b3IJcjIsIHIwLCByMDsJCXZweG9yCXI0LCByMSwgcjE7CQlcCisJdnB4b3IJcjEsIHIyLCByMjsJCXZwYW5kCXIwLCByMSwgcjE7CQlcCisJdnB4b3IJcjQsIHIxLCByMTsJCXZweG9yCVJOT1QsIHIyLCByMjsJCVwKKwl2cG9yCXIwLCByMiwgcjI7CVwKKwl2cHhvcglyMiwgcjQsIHI0OworCisjZGVmaW5lIFNCT1g3X0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdm1vdmRxYQlyMiwgcjQ7CQkJdnB4b3IJcjAsIHIyLCByMjsJCVwKKwl2cGFuZAlyMywgcjAsIHIwOwkJdnBvcglyMywgcjQsIHI0OwkJXAorCXZweG9yCVJOT1QsIHIyLCByMjsJCXZweG9yCXIxLCByMywgcjM7CQlcCisJdnBvcglyMCwgcjEsIHIxOwkJdnB4b3IJcjIsIHIwLCByMDsJCVwKKwl2cGFuZAlyNCwgcjIsIHIyOwkJdnBhbmQJcjQsIHIzLCByMzsJCVwKKwl2cHhvcglyMiwgcjEsIHIxOwkJdnB4b3IJcjAsIHIyLCByMjsJCVwKKwl2cG9yCXIyLCByMCwgcjA7CQl2cHhvcglyMSwgcjQsIHI0OwkJXAorCXZweG9yCXIzLCByMCwgcjA7CQl2cHhvcglyNCwgcjMsIHIzOwkJXAorCXZwb3IJcjAsIHI0LCByNDsJCXZweG9yCXIyLCByMywgcjM7CQlcCisJdnB4b3IJcjIsIHI0LCByNDsKKworLyogQXBwbHkgU0JPWCBudW1iZXIgV0hJQ0ggdG8gdG8gdGhlIGJsb2NrLiAgKi8KKyNkZWZpbmUgU0JPWCh3aGljaCwgcjAsIHIxLCByMiwgcjMsIHI0KSBcCisJU0JPWCMjd2hpY2ggKHIwLCByMSwgcjIsIHIzLCByNCkKKworLyogQXBwbHkgaW52ZXJzZSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2suICAqLworI2RlZmluZSBTQk9YX0lOVkVSU0Uod2hpY2gsIHIwLCByMSwgcjIsIHIzLCByNCkgXAorCVNCT1gjI3doaWNoIyNfSU5WRVJTRSAocjAsIHIxLCByMiwgcjMsIHI0KQorCisvKiBYT1Igcm91bmQga2V5IGludG8gYmxvY2sgc3RhdGUgaW4gcjAscjEscjIscjMuIHI0IHVzZWQgYXMgdGVtcG9yYXJ5LiAgKi8KKyNkZWZpbmUgQkxPQ0tfWE9SX0tFWShyMCwgcjEsIHIyLCByMywgcjQsIHJvdW5kKSBcCisJdnBicm9hZGNhc3RkIChjdHhfa2V5cyArIChyb3VuZCkgKiAxNiArIDAgKiA0KShDVFgpLCByNDsgXAorCXZweG9yIHI0LCByMCwgcjA7IFwKKwl2cGJyb2FkY2FzdGQgKGN0eF9rZXlzICsgKHJvdW5kKSAqIDE2ICsgMSAqIDQpKENUWCksIHI0OyBcCisJdnB4b3IgcjQsIHIxLCByMTsgXAorCXZwYnJvYWRjYXN0ZCAoY3R4X2tleXMgKyAocm91bmQpICogMTYgKyAyICogNCkoQ1RYKSwgcjQ7IFwKKwl2cHhvciByNCwgcjIsIHIyOyBcCisJdnBicm9hZGNhc3RkIChjdHhfa2V5cyArIChyb3VuZCkgKiAxNiArIDMgKiA0KShDVFgpLCByNDsgXAorCXZweG9yIHI0LCByMywgcjM7CisKKy8qIEFwcGx5IHRoZSBsaW5lYXIgdHJhbnNmb3JtYXRpb24gdG8gQkxPQ0suICAqLworI2RlZmluZSBMSU5FQVJfVFJBTlNGT1JNQVRJT04ocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJdmVjX3JvbChyMCwgMTMsIHI0KTsJXAorCXZlY19yb2wocjIsIDMsIHI0KTsJXAorCXZweG9yIHIwLCByMSwgcjE7CVwKKwl2cHhvciByMiwgcjEsIHIxOwlcCisJdnBzbGxkICQzLCByMCwgcjQ7CVwKKwl2cHhvciByMiwgcjMsIHIzOwlcCisJdnB4b3IgcjQsIHIzLCByMzsJXAorCXZlY19yb2wocjEsIDEsIHI0KTsJXAorCXZlY19yb2wocjMsIDcsIHI0KTsJXAorCXZweG9yIHIxLCByMCwgcjA7CVwKKwl2cHhvciByMywgcjAsIHIwOwlcCisJdnBzbGxkICQ3LCByMSwgcjQ7CVwKKwl2cHhvciByMywgcjIsIHIyOwlcCisJdnB4b3IgcjQsIHIyLCByMjsJXAorCXZlY19yb2wocjAsIDUsIHI0KTsJXAorCXZlY19yb2wocjIsIDIyLCByNCk7CisKKy8qIEFwcGx5IHRoZSBpbnZlcnNlIGxpbmVhciB0cmFuc2Zvcm1hdGlvbiB0byBCTE9DSy4gICovCisjZGVmaW5lIExJTkVBUl9UUkFOU0ZPUk1BVElPTl9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZlY19yb3IocjIsIDIyLCByNCk7CVwKKwl2ZWNfcm9yKHIwLCA1LCByNCk7CVwKKwl2cHNsbGQgJDcsIHIxLCByNDsJXAorCXZweG9yIHIzLCByMiwgcjI7CVwKKwl2cHhvciByNCwgcjIsIHIyOwlcCisJdnB4b3IgcjEsIHIwLCByMDsJXAorCXZweG9yIHIzLCByMCwgcjA7CVwKKwl2ZWNfcm9yKHIzLCA3LCByNCk7CVwKKwl2ZWNfcm9yKHIxLCAxLCByNCk7CVwKKwl2cHNsbGQgJDMsIHIwLCByNDsJXAorCXZweG9yIHIyLCByMywgcjM7CVwKKwl2cHhvciByNCwgcjMsIHIzOwlcCisJdnB4b3IgcjAsIHIxLCByMTsJXAorCXZweG9yIHIyLCByMSwgcjE7CVwKKwl2ZWNfcm9yKHIyLCAzLCByNCk7CVwKKwl2ZWNfcm9yKHIwLCAxMywgcjQpOworCisvKiBBcHBseSBhIFNlcnBlbnQgcm91bmQgdG8gc2l4dGVlbiBwYXJhbGxlbCBibG9ja3MuICBUaGlzIG1hY3JvIGluY3JlbWVudHMKKyAgIGByb3VuZCcuICAqLworI2RlZmluZSBST1VORChyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCSAgICBiMCwgYjEsIGIyLCBiMywgYjQsIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJQkxPQ0tfWE9SX0tFWSAoYTAsIGExLCBhMiwgYTMsIGE0LCByb3VuZCk7CQlcCisJU0JPWCAod2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCk7CQkJXAorCQlCTE9DS19YT1JfS0VZIChiMCwgYjEsIGIyLCBiMywgYjQsIHJvdW5kKTsJCVwKKwkJU0JPWCAod2hpY2gsIGIwLCBiMSwgYjIsIGIzLCBiNCk7CQkJXAorCUxJTkVBUl9UUkFOU0ZPUk1BVElPTiAobmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQpOwlcCisJCUxJTkVBUl9UUkFOU0ZPUk1BVElPTiAobmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQpOworCisvKiBBcHBseSB0aGUgbGFzdCBTZXJwZW50IHJvdW5kIHRvIHNpeHRlZW4gcGFyYWxsZWwgYmxvY2tzLiAgVGhpcyBtYWNybworICAgaW5jcmVtZW50cyBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfTEFTVChyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCQkgYjAsIGIxLCBiMiwgYjMsIGI0LCBuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCkgXAorCUJMT0NLX1hPUl9LRVkgKGEwLCBhMSwgYTIsIGEzLCBhNCwgcm91bmQpOwkJXAorCVNCT1ggKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQpOwkJCVwKKwkJQkxPQ0tfWE9SX0tFWSAoYjAsIGIxLCBiMiwgYjMsIGI0LCByb3VuZCk7CQlcCisJCVNCT1ggKHdoaWNoLCBiMCwgYjEsIGIyLCBiMywgYjQpOwkJCVwKKwlCTE9DS19YT1JfS0VZIChuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgKChyb3VuZCkgKyAxKSk7CQlcCisJCUJMT0NLX1hPUl9LRVkgKG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0LCAoKHJvdW5kKSArIDEpKTsKKworLyogQXBwbHkgYW4gaW52ZXJzZSBTZXJwZW50IHJvdW5kIHRvIHNpeHRlZW4gcGFyYWxsZWwgYmxvY2tzLiAgVGhpcyBtYWNybworICAgaW5jcmVtZW50cyBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfSU5WRVJTRShyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgXAorCQkJCSAgICBuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgXAorCQkJCSAgICBiMCwgYjEsIGIyLCBiMywgYjQsIFwKKwkJCQkgICAgbmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQpIFwKKwlMSU5FQVJfVFJBTlNGT1JNQVRJT05fSU5WRVJTRSAoYTAsIGExLCBhMiwgYTMsIGE0KTsJXAorCQlMSU5FQVJfVFJBTlNGT1JNQVRJT05fSU5WRVJTRSAoYjAsIGIxLCBiMiwgYjMsIGI0KTsJXAorCVNCT1hfSU5WRVJTRSAod2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCk7CQlcCisJQkxPQ0tfWE9SX0tFWSAobmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIHJvdW5kKTsJCVwKKwkJU0JPWF9JTlZFUlNFICh3aGljaCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJCVwKKwkJQkxPQ0tfWE9SX0tFWSAobmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQsIHJvdW5kKTsKKworLyogQXBwbHkgdGhlIGZpcnN0IGludmVyc2UgU2VycGVudCByb3VuZCB0byBzaXh0ZWVuIHBhcmFsbGVsIGJsb2Nrcy4gIFRoaXMgbWFjcm8KKyAgIGluY3JlbWVudHMgYHJvdW5kJy4gICovCisjZGVmaW5lIFJPVU5EX0ZJUlNUX0lOVkVSU0Uocm91bmQsIHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIFwKKwkJCQkJICBuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgXAorCQkJCQkgIGIwLCBiMSwgYjIsIGIzLCBiNCwgXAorCQkJCQkgIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJQkxPQ0tfWE9SX0tFWSAoYTAsIGExLCBhMiwgYTMsIGE0LCAoKHJvdW5kKSArIDEpKTsJXAorCQlCTE9DS19YT1JfS0VZIChiMCwgYjEsIGIyLCBiMywgYjQsICgocm91bmQpICsgMSkpOwlcCisJU0JPWF9JTlZFUlNFICh3aGljaCwgYTAsIGExLCBhMiwgYTMsIGE0KTsgCVwKKwlCTE9DS19YT1JfS0VZIChuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgcm91bmQpOwlcCisJCVNCT1hfSU5WRVJTRSAod2hpY2gsIGIwLCBiMSwgYjIsIGIzLCBiNCk7IAlcCisJCUJMT0NLX1hPUl9LRVkgKG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0LCByb3VuZCk7CisKKy50ZXh0CisKKy5hbGlnbiA4CisudHlwZSAgIF9fc2VycGVudF9lbmNfYmxrMTYsQGZ1bmN0aW9uOworX19zZXJwZW50X2VuY19ibGsxNjoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBzaXh0ZWVuIHBhcmFsbGVsCisJICoJCQkJCQlwbGFpbnRleHQgYmxvY2tzCisJICogb3V0cHV0OgorCSAqCVJBNCwgUkExLCBSQTIsIFJBMCwgUkI0LCBSQjEsIFJCMiwgUkIwOiBzaXh0ZWVuIHBhcmFsbGVsCisJICogCQkJCQkJY2lwaGVydGV4dCBibG9ja3MKKwkgKi8KKworCXZwY21wZXFkIFJOT1QsIFJOT1QsIFJOT1Q7CisKKwl0cmFuc3Bvc2VfNHg0KFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LCBSVE1QMCwgUlRNUDEpOworCXRyYW5zcG9zZV80eDQoUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQsIFJUTVAwLCBSVE1QMSk7CisKKwlST1VORCAoMCwgMCwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkEzLAorCQkgICAgIFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMyk7CisJUk9VTkQgKDEsIDEsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywKKwkJICAgICBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMpOworCVJPVU5EICgyLCAyLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsCisJCSAgICAgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMsIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyKTsKKwlST1VORCAoMywgMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkEwLAorCQkgICAgIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDQsIDQsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkEwLCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywKKwkJICAgICBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjMpOworCVJPVU5EICg1LCA1LCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsCisJCSAgICAgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjMsIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzKTsKKwlST1VORCAoNiwgNiwgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LAorCQkgICAgIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkQgKDcsIDcsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywKKwkJICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMpOworCVJPVU5EICg4LCAwLCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTAsCisJCSAgICAgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMsIFJCMSwgUkIzLCBSQjIsIFJCNCwgUkIwKTsKKwlST1VORCAoOSwgMSwgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTAsIFJBMiwgUkExLCBSQTQsIFJBMywgUkEwLAorCQkgICAgIFJCMSwgUkIzLCBSQjIsIFJCNCwgUkIwLCBSQjIsIFJCMSwgUkI0LCBSQjMsIFJCMCk7CisJUk9VTkQgKDEwLCAyLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwgUkE0LCBSQTMsIFJBMSwgUkEwLCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjQsIFJCMywgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjAsIFJCMik7CisJUk9VTkQgKDExLCAzLCBSQTQsIFJBMywgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTEsIFJBMCwgUkEyLCBSQTQsCisJCSAgICAgIFJCNCwgUkIzLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCMSwgUkIwLCBSQjIsIFJCNCk7CisJUk9VTkQgKDEyLCA0LCBSQTMsIFJBMSwgUkEwLCBSQTIsIFJBNCwgUkExLCBSQTQsIFJBMywgUkEyLCBSQTAsCisJCSAgICAgIFJCMywgUkIxLCBSQjAsIFJCMiwgUkI0LCBSQjEsIFJCNCwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDEzLCA1LCBSQTEsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkE0LCBSQTIsIFJBMSwgUkEzLCBSQTAsCisJCSAgICAgIFJCMSwgUkI0LCBSQjMsIFJCMiwgUkIwLCBSQjQsIFJCMiwgUkIxLCBSQjMsIFJCMCk7CisJUk9VTkQgKDE0LCA2LCBSQTQsIFJBMiwgUkExLCBSQTMsIFJBMCwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTMsCisJCSAgICAgIFJCNCwgUkIyLCBSQjEsIFJCMywgUkIwLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMyk7CisJUk9VTkQgKDE1LCA3LCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBMywgUkEzLCBSQTEsIFJBMiwgUkE0LCBSQTAsCisJCSAgICAgIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIzLCBSQjMsIFJCMSwgUkIyLCBSQjQsIFJCMCk7CisJUk9VTkQgKDE2LCAwLCBSQTMsIFJBMSwgUkEyLCBSQTQsIFJBMCwgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgIFJCMywgUkIxLCBSQjIsIFJCNCwgUkIwLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCk7CisJUk9VTkQgKDE3LCAxLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEyLCBSQTEsIFJBMywgUkEwLCBSQTQsCisJCSAgICAgIFJCMSwgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjIsIFJCMSwgUkIzLCBSQjAsIFJCNCk7CisJUk9VTkQgKDE4LCAyLCBSQTIsIFJBMSwgUkEzLCBSQTAsIFJBNCwgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjMsIFJCMCwgUkI0LCBSQjMsIFJCMCwgUkIxLCBSQjQsIFJCMik7CisJUk9VTkQgKDE5LCAzLCBSQTMsIFJBMCwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBNCwgUkEyLCBSQTMsCisJCSAgICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkI0LCBSQjIsIFJCMyk7CisJUk9VTkQgKDIwLCA0LCBSQTAsIFJBMSwgUkE0LCBSQTIsIFJBMywgUkExLCBSQTMsIFJBMCwgUkEyLCBSQTQsCisJCSAgICAgIFJCMCwgUkIxLCBSQjQsIFJCMiwgUkIzLCBSQjEsIFJCMywgUkIwLCBSQjIsIFJCNCk7CisJUk9VTkQgKDIxLCA1LCBSQTEsIFJBMywgUkEwLCBSQTIsIFJBNCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTQsCisJCSAgICAgIFJCMSwgUkIzLCBSQjAsIFJCMiwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCk7CisJUk9VTkQgKDIyLCA2LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTAsCisJCSAgICAgIFJCMywgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkI0LCBSQjEsIFJCMCk7CisJUk9VTkQgKDIzLCA3LCBSQTMsIFJBMiwgUkE0LCBSQTEsIFJBMCwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIwLCBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCk7CisJUk9VTkQgKDI0LCAwLCBSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTMsCisJCSAgICAgIFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMyk7CisJUk9VTkQgKDI1LCAxLCBSQTEsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTMsCisJCSAgICAgIFJCMSwgUkI0LCBSQjIsIFJCMCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQsIFJCMyk7CisJUk9VTkQgKDI2LCAyLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsCisJCSAgICAgIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIzLCBSQjAsIFJCNCwgUkIxLCBSQjMsIFJCMik7CisJUk9VTkQgKDI3LCAzLCBSQTAsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkE0LCBSQTEsIFJBMywgUkEyLCBSQTAsCisJCSAgICAgIFJCMCwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCk7CisJUk9VTkQgKDI4LCA0LCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTMsCisJCSAgICAgIFJCNCwgUkIxLCBSQjMsIFJCMiwgUkIwLCBSQjEsIFJCMCwgUkI0LCBSQjIsIFJCMyk7CisJUk9VTkQgKDI5LCA1LCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBMywgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsCisJCSAgICAgIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkIzLCBSQjAsIFJCMiwgUkIxLCBSQjQsIFJCMyk7CisJUk9VTkQgKDMwLCA2LCBSQTAsIFJBMiwgUkExLCBSQTQsIFJBMywgUkEwLCBSQTIsIFJBMywgUkExLCBSQTQsCisJCSAgICAgIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkRfTEFTVCAoMzEsIDcsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywKKwkJICAgICAgICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkI0LCBSQjEsIFJCMiwgUkIwLCBSQjMpOworCisJdHJhbnNwb3NlXzR4NChSQTQsIFJBMSwgUkEyLCBSQTAsIFJBMywgUlRNUDAsIFJUTVAxKTsKKwl0cmFuc3Bvc2VfNHg0KFJCNCwgUkIxLCBSQjIsIFJCMCwgUkIzLCBSVE1QMCwgUlRNUDEpOworCisJcmV0OworLnNpemUgX19zZXJwZW50X2VuY19ibGsxNiwuLV9fc2VycGVudF9lbmNfYmxrMTY7CisKKy5hbGlnbiA4CisudHlwZSAgIF9fc2VycGVudF9kZWNfYmxrMTYsQGZ1bmN0aW9uOworX19zZXJwZW50X2RlY19ibGsxNjoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBzaXh0ZWVuIHBhcmFsbGVsCisJICogCQkJCQkJY2lwaGVydGV4dCBibG9ja3MKKwkgKiBvdXRwdXQ6CisJICoJUkEwLCBSQTEsIFJBMiwgUkEzLCBSQjAsIFJCMSwgUkIyLCBSQjM6IHNpeHRlZW4gcGFyYWxsZWwKKwkgKgkJCQkJCXBsYWludGV4dCBibG9ja3MKKwkgKi8KKworCXZwY21wZXFkIFJOT1QsIFJOT1QsIFJOT1Q7CisKKwl0cmFuc3Bvc2VfNHg0KFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LCBSVE1QMCwgUlRNUDEpOworCXRyYW5zcG9zZV80eDQoUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQsIFJUTVAwLCBSVE1QMSk7CisKKwlST1VORF9GSVJTVF9JTlZFUlNFICgzMSwgNywgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsCisJCQkJICAgIFJBMywgUkEwLCBSQTEsIFJBNCwgUkEyLAorCQkJCSAgICBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCwKKwkJCQkgICAgUkIzLCBSQjAsIFJCMSwgUkI0LCBSQjIpOworCVJPVU5EX0lOVkVSU0UgKDMwLCA2LCBSQTMsIFJBMCwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTMsCisJCSAgICAgICAgICAgICAgUkIzLCBSQjAsIFJCMSwgUkI0LCBSQjIsIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyOSwgNSwgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMSwgUkEzLCBSQTQsIFJBMiwgUkEwLAorCQkgICAgICAgICAgICAgIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjEsIFJCMywgUkI0LCBSQjIsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoMjgsIDQsIFJBMSwgUkEzLCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTAsIFJBMywKKwkJICAgICAgICAgICAgICBSQjEsIFJCMywgUkI0LCBSQjIsIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIwLCBSQjMpOworCVJPVU5EX0lOVkVSU0UgKDI3LCAzLCBSQTEsIFJBMiwgUkE0LCBSQTAsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjIsIFJCNCwgUkIwLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyNiwgMiwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTMsIFJBMiwgUkEzLCBSQTAsIFJBMSwgUkE0LAorCQkgICAgICAgICAgICAgIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIzLCBSQjIsIFJCMywgUkIwLCBSQjEsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMjUsIDEsIFJBMiwgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTQsIFJBMiwgUkExLCBSQTAsIFJBMywKKwkJICAgICAgICAgICAgICBSQjIsIFJCMywgUkIwLCBSQjEsIFJCNCwgUkI0LCBSQjIsIFJCMSwgUkIwLCBSQjMpOworCVJPVU5EX0lOVkVSU0UgKDI0LCAwLCBSQTQsIFJBMiwgUkExLCBSQTAsIFJBMywgUkE0LCBSQTMsIFJBMiwgUkEwLCBSQTEsCisJCSAgICAgICAgICAgICAgUkI0LCBSQjIsIFJCMSwgUkIwLCBSQjMsIFJCNCwgUkIzLCBSQjIsIFJCMCwgUkIxKTsKKwlST1VORF9JTlZFUlNFICgyMywgNywgUkE0LCBSQTMsIFJBMiwgUkEwLCBSQTEsIFJBMCwgUkE0LCBSQTMsIFJBMSwgUkEyLAorCQkgICAgICAgICAgICAgIFJCNCwgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjAsIFJCNCwgUkIzLCBSQjEsIFJCMik7CisJUk9VTkRfSU5WRVJTRSAoMjIsIDYsIFJBMCwgUkE0LCBSQTMsIFJBMSwgUkEyLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjAsIFJCNCwgUkIzLCBSQjEsIFJCMiwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDIxLCA1LCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkEzLCBSQTAsIFJBMSwgUkEyLCBSQTQsCisJCSAgICAgICAgICAgICAgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCMywgUkIwLCBSQjEsIFJCMiwgUkI0KTsKKwlST1VORF9JTlZFUlNFICgyMCwgNCwgUkEzLCBSQTAsIFJBMSwgUkEyLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBNCwgUkEwLAorCQkgICAgICAgICAgICAgIFJCMywgUkIwLCBSQjEsIFJCMiwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjQsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoMTksIDMsIFJBMywgUkEyLCBSQTEsIFJBNCwgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjMsIFJCMiwgUkIxLCBSQjQsIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDE4LCAyLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMCwgUkEyLCBSQTAsIFJBNCwgUkEzLCBSQTEsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjAsIFJCMiwgUkIwLCBSQjQsIFJCMywgUkIxKTsKKwlST1VORF9JTlZFUlNFICgxNywgMSwgUkEyLCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUkEwLAorCQkgICAgICAgICAgICAgIFJCMiwgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjEsIFJCMiwgUkIzLCBSQjQsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoMTYsIDAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUkEwLCBSQTEsIFJBMCwgUkEyLCBSQTQsIFJBMywKKwkJICAgICAgICAgICAgICBSQjEsIFJCMiwgUkIzLCBSQjQsIFJCMCwgUkIxLCBSQjAsIFJCMiwgUkI0LCBSQjMpOworCVJPVU5EX0lOVkVSU0UgKDE1LCA3LCBSQTEsIFJBMCwgUkEyLCBSQTQsIFJBMywgUkE0LCBSQTEsIFJBMCwgUkEzLCBSQTIsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjAsIFJCMiwgUkI0LCBSQjMsIFJCNCwgUkIxLCBSQjAsIFJCMywgUkIyKTsKKwlST1VORF9JTlZFUlNFICgxNCwgNiwgUkE0LCBSQTEsIFJBMCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LAorCQkgICAgICAgICAgICAgIFJCNCwgUkIxLCBSQjAsIFJCMywgUkIyLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMTMsIDUsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LCBSQTAsIFJBNCwgUkEzLCBSQTIsIFJBMSwKKwkJICAgICAgICAgICAgICBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIwLCBSQjQsIFJCMywgUkIyLCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDEyLCA0LCBSQTAsIFJBNCwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkExLCBSQTQsCisJCSAgICAgICAgICAgICAgUkIwLCBSQjQsIFJCMywgUkIyLCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCMSwgUkI0KTsKKwlST1VORF9JTlZFUlNFICgxMSwgMywgUkEwLCBSQTIsIFJBMywgUkExLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LAorCQkgICAgICAgICAgICAgIFJCMCwgUkIyLCBSQjMsIFJCMSwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMTAsIDIsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTIsIFJBNCwgUkExLCBSQTAsIFJBMywKKwkJICAgICAgICAgICAgICBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjQsIFJCMSwgUkIwLCBSQjMpOworCVJPVU5EX0lOVkVSU0UgKDksIDEsIFJBMiwgUkE0LCBSQTEsIFJBMCwgUkEzLCBSQTMsIFJBMiwgUkEwLCBSQTEsIFJBNCwKKwkJICAgICAgICAgICAgIFJCMiwgUkI0LCBSQjEsIFJCMCwgUkIzLCBSQjMsIFJCMiwgUkIwLCBSQjEsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoOCwgMCwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTQsIFJBMywgUkE0LCBSQTIsIFJBMSwgUkEwLAorCQkgICAgICAgICAgICAgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjQsIFJCMywgUkI0LCBSQjIsIFJCMSwgUkIwKTsKKwlST1VORF9JTlZFUlNFICg3LCA3LCBSQTMsIFJBNCwgUkEyLCBSQTEsIFJBMCwgUkExLCBSQTMsIFJBNCwgUkEwLCBSQTIsCisJCSAgICAgICAgICAgICBSQjMsIFJCNCwgUkIyLCBSQjEsIFJCMCwgUkIxLCBSQjMsIFJCNCwgUkIwLCBSQjIpOworCVJPVU5EX0lOVkVSU0UgKDYsIDYsIFJBMSwgUkEzLCBSQTQsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEyLCBSQTAsIFJBMSwKKwkJICAgICAgICAgICAgIFJCMSwgUkIzLCBSQjQsIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoNSwgNSwgUkEzLCBSQTQsIFJBMiwgUkEwLCBSQTEsIFJBNCwgUkExLCBSQTAsIFJBMiwgUkEzLAorCQkgICAgICAgICAgICAgUkIzLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCNCwgUkIxLCBSQjAsIFJCMiwgUkIzKTsKKwlST1VORF9JTlZFUlNFICg0LCA0LCBSQTQsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkEzLCBSQTEsCisJCSAgICAgICAgICAgICBSQjQsIFJCMSwgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjIsIFJCMCwgUkIzLCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDMsIDMsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTQsIFJBMSwKKwkJICAgICAgICAgICAgIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoMiwgMiwgUkEwLCBSQTIsIFJBMywgUkE0LCBSQTEsIFJBMiwgUkExLCBSQTMsIFJBNCwgUkEwLAorCQkgICAgICAgICAgICAgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjEsIFJCMiwgUkIxLCBSQjMsIFJCNCwgUkIwKTsKKwlST1VORF9JTlZFUlNFICgxLCAxLCBSQTIsIFJBMSwgUkEzLCBSQTQsIFJBMCwgUkEwLCBSQTIsIFJBNCwgUkEzLCBSQTEsCisJCSAgICAgICAgICAgICBSQjIsIFJCMSwgUkIzLCBSQjQsIFJCMCwgUkIwLCBSQjIsIFJCNCwgUkIzLCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDAsIDAsIFJBMCwgUkEyLCBSQTQsIFJBMywgUkExLCBSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwKKwkJICAgICAgICAgICAgIFJCMCwgUkIyLCBSQjQsIFJCMywgUkIxLCBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCk7CisKKwl0cmFuc3Bvc2VfNHg0KFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LCBSVE1QMCwgUlRNUDEpOworCXRyYW5zcG9zZV80eDQoUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQsIFJUTVAwLCBSVE1QMSk7CisKKwlyZXQ7Cisuc2l6ZSBfX3NlcnBlbnRfZGVjX2JsazE2LC4tX19zZXJwZW50X2RlY19ibGsxNjsKKworI2RlZmluZSBpbmNfbGUxMjgoeCwgbWludXNfb25lLCB0bXApIFwKKwl2cGNtcGVxcSBtaW51c19vbmUsIHgsIHRtcDsgXAorCXZwc3VicSBtaW51c19vbmUsIHgsIHg7IFwKKwl2cHNsbGRxICQ4LCB0bXAsIHRtcDsgXAorCXZwc3VicSB0bXAsIHgsIHg7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfc2VycGVudF9hdngyX2N0cl9lbmMKKy50eXBlICAgX2djcnlfc2VycGVudF9hdngyX2N0cl9lbmMsQGZ1bmN0aW9uOworX2djcnlfc2VycGVudF9hdngyX2N0cl9lbmM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdiAoYmlnIGVuZGlhbiwgMTI4Yml0KQorCSAqLworCisJbW92cSA4KCVyY3gpLCAlcmF4OworCWJzd2FwcSAlcmF4OworCisJdnplcm91cHBlcjsKKworCXZicm9hZGNhc3RpMTI4IC5MYnN3YXAxMjhfbWFzayBSSVAsIFJUTVAzOworCXZwY21wZXFkIFJOT1QsIFJOT1QsIFJOT1Q7CisJdnBzcmxkcSAkOCwgUk5PVCwgUk5PVDsgICAvKiBhYjogLTE6MCA7IGNkOiAtMTowICovCisJdnBhZGRxIFJOT1QsIFJOT1QsIFJUTVAyOyAvKiBhYjogLTI6MCA7IGNkOiAtMjowICovCisKKwkvKiBsb2FkIElWIGFuZCBieXRlc3dhcCAqLworCXZtb3ZkcXUgKCVyY3gpLCBSVE1QNHg7CisJdnBzaHVmYiBSVE1QM3gsIFJUTVA0eCwgUlRNUDR4OworCXZtb3ZkcWEgUlRNUDR4LCBSVE1QMHg7CisJaW5jX2xlMTI4KFJUTVA0eCwgUk5PVHgsIFJUTVAxeCk7CisJdmluc2VydGkxMjggJDEsIFJUTVA0eCwgUlRNUDAsIFJUTVAwOworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQTA7IC8qICsxIDsgKzAgKi8KKworCS8qIGNoZWNrIG5lZWQgZm9yIGhhbmRsaW5nIDY0LWJpdCBvdmVyZmxvdyBhbmQgY2FycnkgKi8KKwljbXBxICQoMHhmZmZmZmZmZmZmZmZmZmZmIC0gMTYpLCAlcmF4OworCWphIC5MaGFuZGxlX2N0cl9jYXJyeTsKKworCS8qIGNvbnN0cnVjdCBJVnMgKi8KKwl2cHN1YnEgUlRNUDIsIFJUTVAwLCBSVE1QMDsgLyogKzMgOyArMiAqLworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQTE7CisJdnBzdWJxIFJUTVAyLCBSVE1QMCwgUlRNUDA7IC8qICs1IDsgKzQgKi8KKwl2cHNodWZiIFJUTVAzLCBSVE1QMCwgUkEyOworCXZwc3VicSBSVE1QMiwgUlRNUDAsIFJUTVAwOyAvKiArNyA7ICs2ICovCisJdnBzaHVmYiBSVE1QMywgUlRNUDAsIFJBMzsKKwl2cHN1YnEgUlRNUDIsIFJUTVAwLCBSVE1QMDsgLyogKzkgOyArOCAqLworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQjA7CisJdnBzdWJxIFJUTVAyLCBSVE1QMCwgUlRNUDA7IC8qICsxMSA7ICsxMCAqLworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQjE7CisJdnBzdWJxIFJUTVAyLCBSVE1QMCwgUlRNUDA7IC8qICsxMyA7ICsxMiAqLworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQjI7CisJdnBzdWJxIFJUTVAyLCBSVE1QMCwgUlRNUDA7IC8qICsxNSA7ICsxNCAqLworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQjM7CisJdnBzdWJxIFJUTVAyLCBSVE1QMCwgUlRNUDA7IC8qICsxNiAqLworCXZwc2h1ZmIgUlRNUDN4LCBSVE1QMHgsIFJUTVAweDsKKworCWptcCAuTGN0cl9jYXJyeV9kb25lOworCisuTGhhbmRsZV9jdHJfY2Fycnk6CisJLyogY29uc3RydWN0IElWcyAqLworCWluY19sZTEyOChSVE1QMCwgUk5PVCwgUlRNUDEpOworCWluY19sZTEyOChSVE1QMCwgUk5PVCwgUlRNUDEpOworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQTE7IC8qICszIDsgKzIgKi8KKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwl2cHNodWZiIFJUTVAzLCBSVE1QMCwgUkEyOyAvKiArNSA7ICs0ICovCisJaW5jX2xlMTI4KFJUTVAwLCBSTk9ULCBSVE1QMSk7CisJaW5jX2xlMTI4KFJUTVAwLCBSTk9ULCBSVE1QMSk7CisJdnBzaHVmYiBSVE1QMywgUlRNUDAsIFJBMzsgLyogKzcgOyArNiAqLworCWluY19sZTEyOChSVE1QMCwgUk5PVCwgUlRNUDEpOworCWluY19sZTEyOChSVE1QMCwgUk5PVCwgUlRNUDEpOworCXZwc2h1ZmIgUlRNUDMsIFJUTVAwLCBSQjA7IC8qICs5IDsgKzggKi8KKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwl2cHNodWZiIFJUTVAzLCBSVE1QMCwgUkIxOyAvKiArMTEgOyArMTAgKi8KKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwl2cHNodWZiIFJUTVAzLCBSVE1QMCwgUkIyOyAvKiArMTMgOyArMTIgKi8KKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwl2cHNodWZiIFJUTVAzLCBSVE1QMCwgUkIzOyAvKiArMTUgOyArMTQgKi8KKwlpbmNfbGUxMjgoUlRNUDAsIFJOT1QsIFJUTVAxKTsKKwl2ZXh0cmFjdGkxMjggJDEsIFJUTVAwLCBSVE1QMHg7CisJdnBzaHVmYiBSVE1QM3gsIFJUTVAweCwgUlRNUDB4OyAvKiArMTYgKi8KKworLmFsaWduIDQKKy5MY3RyX2NhcnJ5X2RvbmU6CisJLyogc3RvcmUgbmV3IElWICovCisJdm1vdmRxdSBSVE1QMHgsICglcmN4KTsKKworCWNhbGwgX19zZXJwZW50X2VuY19ibGsxNjsKKworCXZweG9yICgwICogMzIpKCVyZHgpLCBSQTQsIFJBNDsKKwl2cHhvciAoMSAqIDMyKSglcmR4KSwgUkExLCBSQTE7CisJdnB4b3IgKDIgKiAzMikoJXJkeCksIFJBMiwgUkEyOworCXZweG9yICgzICogMzIpKCVyZHgpLCBSQTAsIFJBMDsKKwl2cHhvciAoNCAqIDMyKSglcmR4KSwgUkI0LCBSQjQ7CisJdnB4b3IgKDUgKiAzMikoJXJkeCksIFJCMSwgUkIxOworCXZweG9yICg2ICogMzIpKCVyZHgpLCBSQjIsIFJCMjsKKwl2cHhvciAoNyAqIDMyKSglcmR4KSwgUkIwLCBSQjA7CisKKwl2bW92ZHF1IFJBNCwgKDAgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQTEsICgxICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkEyLCAoMiAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJBMCwgKDMgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQjQsICg0ICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkIxLCAoNSAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJCMiwgKDYgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQjAsICg3ICogMzIpKCVyc2kpOworCisJdnplcm9hbGw7CisKKwlyZXQKKy5zaXplIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jdHJfZW5jLC4tX2djcnlfc2VycGVudF9hdngyX2N0cl9lbmM7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfc2VycGVudF9hdngyX2NiY19kZWMKKy50eXBlICAgX2djcnlfc2VycGVudF9hdngyX2NiY19kZWMsQGZ1bmN0aW9uOworX2djcnlfc2VycGVudF9hdngyX2NiY19kZWM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJdnplcm91cHBlcjsKKworCXZtb3ZkcXUgKDAgKiAzMikoJXJkeCksIFJBMDsKKwl2bW92ZHF1ICgxICogMzIpKCVyZHgpLCBSQTE7CisJdm1vdmRxdSAoMiAqIDMyKSglcmR4KSwgUkEyOworCXZtb3ZkcXUgKDMgKiAzMikoJXJkeCksIFJBMzsKKwl2bW92ZHF1ICg0ICogMzIpKCVyZHgpLCBSQjA7CisJdm1vdmRxdSAoNSAqIDMyKSglcmR4KSwgUkIxOworCXZtb3ZkcXUgKDYgKiAzMikoJXJkeCksIFJCMjsKKwl2bW92ZHF1ICg3ICogMzIpKCVyZHgpLCBSQjM7CisKKwljYWxsIF9fc2VycGVudF9kZWNfYmxrMTY7CisKKwl2bW92ZHF1ICglcmN4KSwgUk5PVHg7CisJdmluc2VydGkxMjggJDEsICglcmR4KSwgUk5PVCwgUk5PVDsKKwl2cHhvciBSTk9ULCBSQTAsIFJBMDsKKwl2cHhvciAoMCAqIDMyICsgMTYpKCVyZHgpLCBSQTEsIFJBMTsKKwl2cHhvciAoMSAqIDMyICsgMTYpKCVyZHgpLCBSQTIsIFJBMjsKKwl2cHhvciAoMiAqIDMyICsgMTYpKCVyZHgpLCBSQTMsIFJBMzsKKwl2cHhvciAoMyAqIDMyICsgMTYpKCVyZHgpLCBSQjAsIFJCMDsKKwl2cHhvciAoNCAqIDMyICsgMTYpKCVyZHgpLCBSQjEsIFJCMTsKKwl2cHhvciAoNSAqIDMyICsgMTYpKCVyZHgpLCBSQjIsIFJCMjsKKwl2cHhvciAoNiAqIDMyICsgMTYpKCVyZHgpLCBSQjMsIFJCMzsKKwl2bW92ZHF1ICg3ICogMzIgKyAxNikoJXJkeCksIFJOT1R4OworCXZtb3ZkcXUgUk5PVHgsICglcmN4KTsgLyogc3RvcmUgbmV3IElWICovCisKKwl2bW92ZHF1IFJBMCwgKDAgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQTEsICgxICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkEyLCAoMiAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJBMywgKDMgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQjAsICg0ICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkIxLCAoNSAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJCMiwgKDYgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQjMsICg3ICogMzIpKCVyc2kpOworCisJdnplcm9hbGw7CisKKwlyZXQKKy5zaXplIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jYmNfZGVjLC4tX2djcnlfc2VycGVudF9hdngyX2NiY19kZWM7CisKKy5hbGlnbiA4CisuZ2xvYmwgX2djcnlfc2VycGVudF9hdngyX2NmYl9kZWMKKy50eXBlICAgX2djcnlfc2VycGVudF9hdngyX2NmYl9kZWMsQGZ1bmN0aW9uOworX2djcnlfc2VycGVudF9hdngyX2NmYl9kZWM6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY3R4LCBDVFgKKwkgKgklcnNpOiBkc3QgKDE2IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDE2IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJdnplcm91cHBlcjsKKworCS8qIExvYWQgaW5wdXQgKi8KKwl2bW92ZHF1ICglcmN4KSwgUk5PVHg7CisJdmluc2VydGkxMjggJDEsICglcmR4KSwgUk5PVCwgUkEwOworCXZtb3ZkcXUgKDAgKiAzMiArIDE2KSglcmR4KSwgUkExOworCXZtb3ZkcXUgKDEgKiAzMiArIDE2KSglcmR4KSwgUkEyOworCXZtb3ZkcXUgKDIgKiAzMiArIDE2KSglcmR4KSwgUkEzOworCXZtb3ZkcXUgKDMgKiAzMiArIDE2KSglcmR4KSwgUkIwOworCXZtb3ZkcXUgKDQgKiAzMiArIDE2KSglcmR4KSwgUkIxOworCXZtb3ZkcXUgKDUgKiAzMiArIDE2KSglcmR4KSwgUkIyOworCXZtb3ZkcXUgKDYgKiAzMiArIDE2KSglcmR4KSwgUkIzOworCisJLyogVXBkYXRlIElWICovCisJdm1vdmRxdSAoNyAqIDMyICsgMTYpKCVyZHgpLCBSTk9UeDsKKwl2bW92ZHF1IFJOT1R4LCAoJXJjeCk7CisKKwljYWxsIF9fc2VycGVudF9lbmNfYmxrMTY7CisKKwl2cHhvciAoMCAqIDMyKSglcmR4KSwgUkE0LCBSQTQ7CisJdnB4b3IgKDEgKiAzMikoJXJkeCksIFJBMSwgUkExOworCXZweG9yICgyICogMzIpKCVyZHgpLCBSQTIsIFJBMjsKKwl2cHhvciAoMyAqIDMyKSglcmR4KSwgUkEwLCBSQTA7CisJdnB4b3IgKDQgKiAzMikoJXJkeCksIFJCNCwgUkI0OworCXZweG9yICg1ICogMzIpKCVyZHgpLCBSQjEsIFJCMTsKKwl2cHhvciAoNiAqIDMyKSglcmR4KSwgUkIyLCBSQjI7CisJdnB4b3IgKDcgKiAzMikoJXJkeCksIFJCMCwgUkIwOworCisJdm1vdmRxdSBSQTQsICgwICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkExLCAoMSAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJBMiwgKDIgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQTAsICgzICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkI0LCAoNCAqIDMyKSglcnNpKTsKKwl2bW92ZHF1IFJCMSwgKDUgKiAzMikoJXJzaSk7CisJdm1vdmRxdSBSQjIsICg2ICogMzIpKCVyc2kpOworCXZtb3ZkcXUgUkIwLCAoNyAqIDMyKSglcnNpKTsKKworCXZ6ZXJvYWxsOworCisJcmV0Cisuc2l6ZSBfZ2NyeV9zZXJwZW50X2F2eDJfY2ZiX2RlYywuLV9nY3J5X3NlcnBlbnRfYXZ4Ml9jZmJfZGVjOworCisuZGF0YQorLmFsaWduIDE2CisKKy8qIEZvciBDVFItbW9kZSBJViBieXRlc3dhcCAqLworLkxic3dhcDEyOF9tYXNrOgorCS5ieXRlIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAKKworI2VuZGlmIC8qZGVmaW5lZChVU0VfU0VSUEVOVCkgJiYgZGVmaW5lZChFTkFCTEVfQVZYMl9TVVBQT1JUKSovCisjZW5kaWYgLypfX3g4Nl82NCovCmRpZmYgLS1naXQgYS9jaXBoZXIvc2VycGVudC1zc2UyLWFtZDY0LlMgYi9jaXBoZXIvc2VycGVudC1zc2UyLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZTIzNgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zZXJwZW50LXNzZTItYW1kNjQuUwpAQCAtMCwwICsxLDg2MyBAQAorLyogc2VycGVudC1zc2UyLWFtZDY0LlMgIC0gIFNTRTIgaW1wbGVtZW50YXRpb24gb2YgU2VycGVudCBjaXBoZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBfX3g4Nl82NAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2lmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgZGVmaW5lZChVU0VfU0VSUEVOVCkKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgKCVyaXApCisjZWxzZQorIyAgZGVmaW5lIFJJUAorI2VuZGlmCisKKy8qIHN0cnVjdCBzZXJwZW50X2NvbnRleHQ6ICovCisjZGVmaW5lIGN0eF9rZXlzIDAKKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIENUWCAlcmRpCisKKy8qIHZlY3RvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkEwICV4bW0wCisjZGVmaW5lIFJBMSAleG1tMQorI2RlZmluZSBSQTIgJXhtbTIKKyNkZWZpbmUgUkEzICV4bW0zCisjZGVmaW5lIFJBNCAleG1tNAorCisjZGVmaW5lIFJCMCAleG1tNQorI2RlZmluZSBSQjEgJXhtbTYKKyNkZWZpbmUgUkIyICV4bW03CisjZGVmaW5lIFJCMyAleG1tOAorI2RlZmluZSBSQjQgJXhtbTkKKworI2RlZmluZSBSTk9UICV4bW0xMAorI2RlZmluZSBSVE1QMCAleG1tMTEKKyNkZWZpbmUgUlRNUDEgJXhtbTEyCisjZGVmaW5lIFJUTVAyICV4bW0xMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBoZWxwZXIgbWFjcm9zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdmVjdG9yIDMyLWJpdCByb3RhdGlvbiB0byBsZWZ0ICovCisjZGVmaW5lIHZlY19yb2wocmVnLCBubGVmdCwgdG1wKSBcCisJbW92ZHFhIHJlZywgdG1wOyAJCVwKKwlwc2xsZCAkKG5sZWZ0KSwgdG1wOwkJXAorCXBzcmxkICQoMzIgLSAobmxlZnQpKSwgcmVnOwlcCisJcG9yIHRtcCwgcmVnOworCisvKiB2ZWN0b3IgMzItYml0IHJvdGF0aW9uIHRvIHJpZ2h0ICovCisjZGVmaW5lIHZlY19yb3IocmVnLCBucmlnaHQsIHRtcCkgXAorCXZlY19yb2wocmVnLCAzMiAtIG5yaWdodCwgdG1wKQorCisvKiA0eDQgMzItYml0IGludGVnZXIgbWF0cml4IHRyYW5zcG9zZSAqLworI2RlZmluZSB0cmFuc3Bvc2VfNHg0KHgwLCB4MSwgeDIsIHgzLCB0MSwgdDIsIHQzKSBcCisJbW92ZHFhICAgIHgwLCB0MjsgXAorCXB1bnBja2hkcSB4MSwgdDI7IFwKKwlwdW5wY2tsZHEgeDEsIHgwOyBcCisJXAorCW1vdmRxYSAgICB4MiwgdDE7IFwKKwlwdW5wY2tsZHEgeDMsIHQxOyBcCisJcHVucGNraGRxIHgzLCB4MjsgXAorCVwKKwltb3ZkcWEgICAgIHgwLCB4MTsgXAorCXB1bnBja2hxZHEgdDEsIHgxOyBcCisJcHVucGNrbHFkcSB0MSwgeDA7IFwKKwlcCisJbW92ZHFhICAgICB0MiwgeDM7IFwKKwlwdW5wY2tocWRxIHgyLCB4MzsgXAorCXB1bnBja2xxZHEgeDIsIHQyOyBcCisJbW92ZHFhICAgICB0MiwgeDI7CisKKy8qIGZpbGwgeG1tIHJlZ2lzdGVyIHdpdGggMzItYml0IHZhbHVlIGZyb20gbWVtb3J5ICovCisjZGVmaW5lIHBicm9hZGNhc3RkKG1lbTMyLCB4cmVnKSBcCisJbW92ZCBtZW0zMiwgeHJlZzsgXAorCXBzaHVmZCAkMCwgeHJlZywgeHJlZzsKKworLyogeG9yIHdpdGggdW5hbGlnbmVkIG1lbW9yeSBvcGVyYW5kICovCisjZGVmaW5lIHB4b3JfdSh1bWVtMTI4LCB4cmVnLCB0KSBcCisJbW92ZHF1IHVtZW0xMjgsIHQ7IFwKKwlweG9yIHQsIHhyZWc7CisKKy8qIDEyOC1iaXQgd2lkZSBieXRlIHN3YXAgKi8KKyNkZWZpbmUgcGJzd2FwKHhyZWcsIHQwKSBcCisJLyogcmVvcmRlciAzMi1iaXQgd29yZHMsIFthLGIsYyxkXSA9PiBbZCxjLGIsYV0gKi8gXAorCXBzaHVmZCAkMHgxYiwgeHJlZywgeHJlZzsgXAorCS8qIHJlb3JkZXIgaGlnaCZsb3cgMTYtYml0IHdvcmRzLCBbZDAsZDEsYzAsYzFdID0+IFtkMSxkMCxjMSxjMF0gKi8gXAorCXBzaHVmbHcgJDB4YjEsIHhyZWcsIHhyZWc7IFwKKwlwc2h1Zmh3ICQweGIxLCB4cmVnLCB4cmVnOyBcCisJLyogcmVvcmRlciBieXRlcyBpbiAxNi1iaXQgd29yZHMgKi8gXAorCW1vdmRxYSB4cmVnLCB0MDsgXAorCXBzcmx3ICQ4LCB0MDsgXAorCXBzbGx3ICQ4LCB4cmVnOyBcCisJcG9yIHQwLCB4cmVnOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICA4LXdheSBzZXJwZW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgUy1Cb3hlcyBvZiBTZXJwZW50IGZyb20gZm9sbG93aW5nIHJlc2VhcmNoIHBhcGVyLgorICoKKyAqICBELiBBLiBPc3Zpaywg4oCcU3BlZWRpbmcgdXAgU2VycGVudCzigJ0gaW4gVGhpcmQgQUVTIENhbmRpZGF0ZSBDb25mZXJlbmNlLAorICogICAoTmV3IFlvcmssIE5ldyBZb3JrLCBVU0EpLCBwLiAzMTfigJMzMjksIE5hdGlvbmFsIEluc3RpdHV0ZSBvZiBTdGFuZGFyZHMgYW5kCisgKiAgIFRlY2hub2xvZ3ksIDIwMDAuCisgKgorICogUGFwZXIgaXMgYWxzbyBhdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cuaWkudWliLm5vL35vc3Zpay9wdWIvYWVzMy5wZGYKKyAqCisgKi8KKyNkZWZpbmUgU0JPWDAocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJcHhvcglyMCwgcjM7CQltb3ZkcWEJcjEsIHI0OwkJXAorCXBhbmQJcjMsIHIxOwkJcHhvcglyMiwgcjQ7CQlcCisJcHhvcglyMCwgcjE7CQlwb3IJcjMsIHIwOwkJXAorCXB4b3IJcjQsIHIwOwkJcHhvcglyMywgcjQ7CQlcCisJcHhvcglyMiwgcjM7CQlwb3IJcjEsIHIyOwkJXAorCXB4b3IJcjQsIHIyOwkJcHhvcglSTk9ULCByNDsJXAorCXBvcglyMSwgcjQ7CQlweG9yCXIzLCByMTsJCVwKKwlweG9yCXI0LCByMTsJCXBvcglyMCwgcjM7CQlcCisJcHhvcglyMywgcjE7CQlweG9yCXIzLCByNDsKKworI2RlZmluZSBTQk9YMF9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXB4b3IJUk5PVCwgcjI7CW1vdmRxYQlyMSwgcjQ7CQlcCisJcG9yCXIwLCByMTsJCXB4b3IJUk5PVCwgcjQ7CVwKKwlweG9yCXIyLCByMTsJCXBvcglyNCwgcjI7CQlcCisJcHhvcglyMywgcjE7CQlweG9yCXI0LCByMDsJCVwKKwlweG9yCXIwLCByMjsJCXBhbmQJcjMsIHIwOwkJXAorCXB4b3IJcjAsIHI0OwkJcG9yCXIxLCByMDsJCVwKKwlweG9yCXIyLCByMDsJCXB4b3IJcjQsIHIzOwkJXAorCXB4b3IJcjEsIHIyOwkJcHhvcglyMCwgcjM7CQlcCisJcHhvcglyMSwgcjM7CVwKKwlwYW5kCXIzLCByMjsJXAorCXB4b3IJcjIsIHI0OworCisjZGVmaW5lIFNCT1gxKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXB4b3IJUk5PVCwgcjA7CXB4b3IJUk5PVCwgcjI7CVwKKwltb3ZkcWEJcjAsIHI0OwkJcGFuZAlyMSwgcjA7CQlcCisJcHhvcglyMCwgcjI7CQlwb3IJcjMsIHIwOwkJXAorCXB4b3IJcjIsIHIzOwkJcHhvcglyMCwgcjE7CQlcCisJcHhvcglyNCwgcjA7CQlwb3IJcjEsIHI0OwkJXAorCXB4b3IJcjMsIHIxOwkJcG9yCXIwLCByMjsJCVwKKwlwYW5kCXI0LCByMjsJCXB4b3IJcjEsIHIwOwkJXAorCXBhbmQJcjIsIHIxOwlcCisJcHhvcglyMCwgcjE7CQlwYW5kCXIyLCByMDsJCVwKKwlweG9yCXI0LCByMDsKKworI2RlZmluZSBTQk9YMV9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCW1vdmRxYQlyMSwgcjQ7CQlweG9yCXIzLCByMTsJCVwKKwlwYW5kCXIxLCByMzsJCXB4b3IJcjIsIHI0OwkJXAorCXB4b3IJcjAsIHIzOwkJcG9yCXIxLCByMDsJCVwKKwlweG9yCXIzLCByMjsJCXB4b3IJcjQsIHIwOwkJXAorCXBvcglyMiwgcjA7CQlweG9yCXIzLCByMTsJCVwKKwlweG9yCXIxLCByMDsJCXBvcglyMywgcjE7CQlcCisJcHhvcglyMCwgcjE7CQlweG9yCVJOT1QsIHI0OwlcCisJcHhvcglyMSwgcjQ7CQlwb3IJcjAsIHIxOwkJXAorCXB4b3IJcjAsIHIxOwlcCisJcG9yCXI0LCByMTsJXAorCXB4b3IJcjEsIHIzOworCisjZGVmaW5lIFNCT1gyKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCW1vdmRxYQlyMCwgcjQ7CQlwYW5kCXIyLCByMDsJCVwKKwlweG9yCXIzLCByMDsJCXB4b3IJcjEsIHIyOwkJXAorCXB4b3IJcjAsIHIyOwkJcG9yCXI0LCByMzsJCVwKKwlweG9yCXIxLCByMzsJCXB4b3IJcjIsIHI0OwkJXAorCW1vdmRxYQlyMywgcjE7CQlwb3IJcjQsIHIzOwkJXAorCXB4b3IJcjAsIHIzOwkJcGFuZAlyMSwgcjA7CQlcCisJcHhvcglyMCwgcjQ7CQlweG9yCXIzLCByMTsJCVwKKwlweG9yCXI0LCByMTsJCXB4b3IJUk5PVCwgcjQ7CisKKyNkZWZpbmUgU0JPWDJfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwlweG9yCXIzLCByMjsJCXB4b3IJcjAsIHIzOwkJXAorCW1vdmRxYQlyMywgcjQ7CQlwYW5kCXIyLCByMzsJCVwKKwlweG9yCXIxLCByMzsJCXBvcglyMiwgcjE7CQlcCisJcHhvcglyNCwgcjE7CQlwYW5kCXIzLCByNDsJCVwKKwlweG9yCXIzLCByMjsJCXBhbmQJcjAsIHI0OwkJXAorCXB4b3IJcjIsIHI0OwkJcGFuZAlyMSwgcjI7CQlcCisJcG9yCXIwLCByMjsJCXB4b3IJUk5PVCwgcjM7CVwKKwlweG9yCXIzLCByMjsJCXB4b3IJcjMsIHIwOwkJXAorCXBhbmQJcjEsIHIwOwkJcHhvcglyNCwgcjM7CQlcCisJcHhvcglyMCwgcjM7CisKKyNkZWZpbmUgU0JPWDMocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJbW92ZHFhCXIwLCByNDsJCXBvcglyMywgcjA7CQlcCisJcHhvcglyMSwgcjM7CQlwYW5kCXI0LCByMTsJCVwKKwlweG9yCXIyLCByNDsJCXB4b3IJcjMsIHIyOwkJXAorCXBhbmQJcjAsIHIzOwkJcG9yCXIxLCByNDsJCVwKKwlweG9yCXI0LCByMzsJCXB4b3IJcjEsIHIwOwkJXAorCXBhbmQJcjAsIHI0OwkJcHhvcglyMywgcjE7CQlcCisJcHhvcglyMiwgcjQ7CQlwb3IJcjAsIHIxOwkJXAorCXB4b3IJcjIsIHIxOwkJcHhvcglyMywgcjA7CQlcCisJbW92ZHFhCXIxLCByMjsJCXBvcglyMywgcjE7CQlcCisJcHhvcglyMCwgcjE7CisKKyNkZWZpbmUgU0JPWDNfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwltb3ZkcWEJcjIsIHI0OwkJcHhvcglyMSwgcjI7CQlcCisJcHhvcglyMiwgcjA7CQlwYW5kCXIyLCByNDsJCVwKKwlweG9yCXIwLCByNDsJCXBhbmQJcjEsIHIwOwkJXAorCXB4b3IJcjMsIHIxOwkJcG9yCXI0LCByMzsJCVwKKwlweG9yCXIzLCByMjsJCXB4b3IJcjMsIHIwOwkJXAorCXB4b3IJcjQsIHIxOwkJcGFuZAlyMiwgcjM7CQlcCisJcHhvcglyMSwgcjM7CQlweG9yCXIwLCByMTsJCVwKKwlwb3IJcjIsIHIxOwkJcHhvcglyMywgcjA7CQlcCisJcHhvcglyNCwgcjE7CVwKKwlweG9yCXIxLCByMDsKKworI2RlZmluZSBTQk9YNChyMCwgcjEsIHIyLCByMywgcjQpIFwKKwlweG9yCXIzLCByMTsJCXB4b3IJUk5PVCwgcjM7CVwKKwlweG9yCXIzLCByMjsJCXB4b3IJcjAsIHIzOwkJXAorCW1vdmRxYQlyMSwgcjQ7CQlwYW5kCXIzLCByMTsJCVwKKwlweG9yCXIyLCByMTsJCXB4b3IJcjMsIHI0OwkJXAorCXB4b3IJcjQsIHIwOwkJcGFuZAlyNCwgcjI7CQlcCisJcHhvcglyMCwgcjI7CQlwYW5kCXIxLCByMDsJCVwKKwlweG9yCXIwLCByMzsJCXBvcglyMSwgcjQ7CQlcCisJcHhvcglyMCwgcjQ7CQlwb3IJcjMsIHIwOwkJXAorCXB4b3IJcjIsIHIwOwkJcGFuZAlyMywgcjI7CQlcCisJcHhvcglSTk9ULCByMDsJcHhvcglyMiwgcjQ7CisKKyNkZWZpbmUgU0JPWDRfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwltb3ZkcWEJcjIsIHI0OwkJcGFuZAlyMywgcjI7CQlcCisJcHhvcglyMSwgcjI7CQlwb3IJcjMsIHIxOwkJXAorCXBhbmQJcjAsIHIxOwkJcHhvcglyMiwgcjQ7CQlcCisJcHhvcglyMSwgcjQ7CQlwYW5kCXIyLCByMTsJCVwKKwlweG9yCVJOT1QsIHIwOwlweG9yCXI0LCByMzsJCVwKKwlweG9yCXIzLCByMTsJCXBhbmQJcjAsIHIzOwkJXAorCXB4b3IJcjIsIHIzOwkJcHhvcglyMSwgcjA7CQlcCisJcGFuZAlyMCwgcjI7CQlweG9yCXIwLCByMzsJCVwKKwlweG9yCXI0LCByMjsJXAorCXBvcglyMywgcjI7CQlweG9yCXIwLCByMzsJCVwKKwlweG9yCXIxLCByMjsKKworI2RlZmluZSBTQk9YNShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwlweG9yCXIxLCByMDsJCXB4b3IJcjMsIHIxOwkJXAorCXB4b3IJUk5PVCwgcjM7CW1vdmRxYQlyMSwgcjQ7CQlcCisJcGFuZAlyMCwgcjE7CQlweG9yCXIzLCByMjsJCVwKKwlweG9yCXIyLCByMTsJCXBvcglyNCwgcjI7CQlcCisJcHhvcglyMywgcjQ7CQlwYW5kCXIxLCByMzsJCVwKKwlweG9yCXIwLCByMzsJCXB4b3IJcjEsIHI0OwkJXAorCXB4b3IJcjIsIHI0OwkJcHhvcglyMCwgcjI7CQlcCisJcGFuZAlyMywgcjA7CQlweG9yCVJOT1QsIHIyOwlcCisJcHhvcglyNCwgcjA7CQlwb3IJcjMsIHI0OwkJXAorCXB4b3IJcjQsIHIyOworCisjZGVmaW5lIFNCT1g1X0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJcHhvcglSTk9ULCByMTsJbW92ZHFhCXIzLCByNDsJCVwKKwlweG9yCXIxLCByMjsJCXBvcglyMCwgcjM7CQlcCisJcHhvcglyMiwgcjM7CQlwb3IJcjEsIHIyOwkJXAorCXBhbmQJcjAsIHIyOwkJcHhvcglyMywgcjQ7CQlcCisJcHhvcglyNCwgcjI7CQlwb3IJcjAsIHI0OwkJXAorCXB4b3IJcjEsIHI0OwkJcGFuZAlyMiwgcjE7CQlcCisJcHhvcglyMywgcjE7CQlweG9yCXIyLCByNDsJCVwKKwlwYW5kCXI0LCByMzsJCXB4b3IJcjEsIHI0OwkJXAorCXB4b3IJcjQsIHIzOwkJcHhvcglSTk9ULCByNDsJXAorCXB4b3IJcjAsIHIzOworCisjZGVmaW5lIFNCT1g2KHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXB4b3IJUk5PVCwgcjI7CW1vdmRxYQlyMywgcjQ7CQlcCisJcGFuZAlyMCwgcjM7CQlweG9yCXI0LCByMDsJCVwKKwlweG9yCXIyLCByMzsJCXBvcglyNCwgcjI7CQlcCisJcHhvcglyMywgcjE7CQlweG9yCXIwLCByMjsJCVwKKwlwb3IJcjEsIHIwOwkJcHhvcglyMSwgcjI7CQlcCisJcHhvcglyMCwgcjQ7CQlwb3IJcjMsIHIwOwkJXAorCXB4b3IJcjIsIHIwOwkJcHhvcglyMywgcjQ7CQlcCisJcHhvcglyMCwgcjQ7CQlweG9yCVJOT1QsIHIzOwlcCisJcGFuZAlyNCwgcjI7CVwKKwlweG9yCXIzLCByMjsKKworI2RlZmluZSBTQk9YNl9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXB4b3IJcjIsIHIwOwkJbW92ZHFhCXIyLCByNDsJCVwKKwlwYW5kCXIwLCByMjsJCXB4b3IJcjMsIHI0OwkJXAorCXB4b3IJUk5PVCwgcjI7CXB4b3IJcjEsIHIzOwkJXAorCXB4b3IJcjMsIHIyOwkJcG9yCXIwLCByNDsJCVwKKwlweG9yCXIyLCByMDsJCXB4b3IJcjQsIHIzOwkJXAorCXB4b3IJcjEsIHI0OwkJcGFuZAlyMywgcjE7CQlcCisJcHhvcglyMCwgcjE7CQlweG9yCXIzLCByMDsJCVwKKwlwb3IJcjIsIHIwOwkJcHhvcglyMSwgcjM7CQlcCisJcHhvcglyMCwgcjQ7CisKKyNkZWZpbmUgU0JPWDcocjAsIHIxLCByMiwgcjMsIHI0KSBcCisJbW92ZHFhCXIxLCByNDsJCXBvcglyMiwgcjE7CQlcCisJcHhvcglyMywgcjE7CQlweG9yCXIyLCByNDsJCVwKKwlweG9yCXIxLCByMjsJCXBvcglyNCwgcjM7CQlcCisJcGFuZAlyMCwgcjM7CQlweG9yCXIyLCByNDsJCVwKKwlweG9yCXIxLCByMzsJCXBvcglyNCwgcjE7CQlcCisJcHhvcglyMCwgcjE7CQlwb3IJcjQsIHIwOwkJXAorCXB4b3IJcjIsIHIwOwkJcHhvcglyNCwgcjE7CQlcCisJcHhvcglyMSwgcjI7CQlwYW5kCXIwLCByMTsJCVwKKwlweG9yCXI0LCByMTsJCXB4b3IJUk5PVCwgcjI7CVwKKwlwb3IJcjAsIHIyOwlcCisJcHhvcglyMiwgcjQ7CisKKyNkZWZpbmUgU0JPWDdfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwltb3ZkcWEJcjIsIHI0OwkJcHhvcglyMCwgcjI7CQlcCisJcGFuZAlyMywgcjA7CQlwb3IJcjMsIHI0OwkJXAorCXB4b3IJUk5PVCwgcjI7CXB4b3IJcjEsIHIzOwkJXAorCXBvcglyMCwgcjE7CQlweG9yCXIyLCByMDsJCVwKKwlwYW5kCXI0LCByMjsJCXBhbmQJcjQsIHIzOwkJXAorCXB4b3IJcjIsIHIxOwkJcHhvcglyMCwgcjI7CQlcCisJcG9yCXIyLCByMDsJCXB4b3IJcjEsIHI0OwkJXAorCXB4b3IJcjMsIHIwOwkJcHhvcglyNCwgcjM7CQlcCisJcG9yCXIwLCByNDsJCXB4b3IJcjIsIHIzOwkJXAorCXB4b3IJcjIsIHI0OworCisvKiBBcHBseSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2suICAqLworI2RlZmluZSBTQk9YKHdoaWNoLCByMCwgcjEsIHIyLCByMywgcjQpIFwKKwlTQk9YIyN3aGljaCAocjAsIHIxLCByMiwgcjMsIHI0KQorCisvKiBBcHBseSBpbnZlcnNlIFNCT1ggbnVtYmVyIFdISUNIIHRvIHRvIHRoZSBibG9jay4gICovCisjZGVmaW5lIFNCT1hfSU5WRVJTRSh3aGljaCwgcjAsIHIxLCByMiwgcjMsIHI0KSBcCisJU0JPWCMjd2hpY2gjI19JTlZFUlNFIChyMCwgcjEsIHIyLCByMywgcjQpCisKKy8qIFhPUiByb3VuZCBrZXkgaW50byBibG9jayBzdGF0ZSBpbiByMCxyMSxyMixyMy4gcjQgdXNlZCBhcyB0ZW1wb3JhcnkuICAqLworI2RlZmluZSBCTE9DS19YT1JfS0VZKHIwLCByMSwgcjIsIHIzLCByNCwgcm91bmQpIFwKKwlwYnJvYWRjYXN0ZCAoKGN0eF9rZXlzICsgKHJvdW5kKSAqIDE2ICsgMCAqIDQpKENUWCksIHI0KTsgXAorCXB4b3IgcjQsIHIwOyBcCisJcGJyb2FkY2FzdGQgKChjdHhfa2V5cyArIChyb3VuZCkgKiAxNiArIDEgKiA0KShDVFgpLCByNCk7IFwKKwlweG9yIHI0LCByMTsgXAorCXBicm9hZGNhc3RkICgoY3R4X2tleXMgKyAocm91bmQpICogMTYgKyAyICogNCkoQ1RYKSwgcjQpOyBcCisJcHhvciByNCwgcjI7IFwKKwlwYnJvYWRjYXN0ZCAoKGN0eF9rZXlzICsgKHJvdW5kKSAqIDE2ICsgMyAqIDQpKENUWCksIHI0KTsgXAorCXB4b3IgcjQsIHIzOworCisvKiBBcHBseSB0aGUgbGluZWFyIHRyYW5zZm9ybWF0aW9uIHRvIEJMT0NLLiAgKi8KKyNkZWZpbmUgTElORUFSX1RSQU5TRk9STUFUSU9OKHIwLCByMSwgcjIsIHIzLCByNCkgXAorCXZlY19yb2wocjAsIDEzLCByNCk7CVwKKwl2ZWNfcm9sKHIyLCAzLCByNCk7CVwKKwlweG9yIHIwLCByMTsJCVwKKwlweG9yIHIyLCByMTsJCVwKKwltb3ZkcWEgcjAsIHI0OwkJXAorCXBzbGxkICQzLCByNDsJCVwKKwlweG9yIHIyLCByMzsJCVwKKwlweG9yIHI0LCByMzsJCVwKKwl2ZWNfcm9sKHIxLCAxLCByNCk7CVwKKwl2ZWNfcm9sKHIzLCA3LCByNCk7CVwKKwlweG9yIHIxLCByMDsJCVwKKwlweG9yIHIzLCByMDsJCVwKKwltb3ZkcWEgcjEsIHI0OwkJXAorCXBzbGxkICQ3LCByNDsJCVwKKwlweG9yIHIzLCByMjsJCVwKKwlweG9yIHI0LCByMjsJCVwKKwl2ZWNfcm9sKHIwLCA1LCByNCk7CVwKKwl2ZWNfcm9sKHIyLCAyMiwgcjQpOworCisvKiBBcHBseSB0aGUgaW52ZXJzZSBsaW5lYXIgdHJhbnNmb3JtYXRpb24gdG8gQkxPQ0suICAqLworI2RlZmluZSBMSU5FQVJfVFJBTlNGT1JNQVRJT05fSU5WRVJTRShyMCwgcjEsIHIyLCByMywgcjQpIFwKKwl2ZWNfcm9yKHIyLCAyMiwgcjQpOwlcCisJdmVjX3JvcihyMCwgNSwgcjQpOwlcCisJbW92ZHFhIHIxLCByNDsJCVwKKwlwc2xsZCAkNywgcjQ7CQlcCisJcHhvciByMywgcjI7CQlcCisJcHhvciByNCwgcjI7CQlcCisJcHhvciByMSwgcjA7CQlcCisJcHhvciByMywgcjA7CQlcCisJdmVjX3JvcihyMywgNywgcjQpOwlcCisJdmVjX3JvcihyMSwgMSwgcjQpOwlcCisJbW92ZHFhIHIwLCByNDsJCVwKKwlwc2xsZCAkMywgcjQ7CQlcCisJcHhvciByMiwgcjM7CQlcCisJcHhvciByNCwgcjM7CQlcCisJcHhvciByMCwgcjE7CQlcCisJcHhvciByMiwgcjE7CQlcCisJdmVjX3JvcihyMiwgMywgcjQpOwlcCisJdmVjX3JvcihyMCwgMTMsIHI0KTsKKworLyogQXBwbHkgYSBTZXJwZW50IHJvdW5kIHRvIGVpZ2h0IHBhcmFsbGVsIGJsb2Nrcy4gIFRoaXMgbWFjcm8gaW5jcmVtZW50cworICAgYHJvdW5kJy4gICovCisjZGVmaW5lIFJPVU5EKHJvdW5kLCB3aGljaCwgYTAsIGExLCBhMiwgYTMsIGE0LCBuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgXAorCQkJICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgbmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQpIFwKKwlCTE9DS19YT1JfS0VZIChhMCwgYTEsIGEyLCBhMywgYTQsIHJvdW5kKTsJCVwKKwlTQk9YICh3aGljaCwgYTAsIGExLCBhMiwgYTMsIGE0KTsJCQlcCisJCUJMT0NLX1hPUl9LRVkgKGIwLCBiMSwgYjIsIGIzLCBiNCwgcm91bmQpOwkJXAorCQlTQk9YICh3aGljaCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsJCQlcCisJTElORUFSX1RSQU5TRk9STUFUSU9OIChuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCk7CVwKKwkJTElORUFSX1RSQU5TRk9STUFUSU9OIChuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCk7CisKKy8qIEFwcGx5IHRoZSBsYXN0IFNlcnBlbnQgcm91bmQgdG8gZWlnaHQgcGFyYWxsZWwgYmxvY2tzLiAgVGhpcyBtYWNybyBpbmNyZW1lbnRzCisgICBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfTEFTVChyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCQkgYjAsIGIxLCBiMiwgYjMsIGI0LCBuYjAsIG5iMSwgbmIyLCBuYjMsIG5iNCkgXAorCUJMT0NLX1hPUl9LRVkgKGEwLCBhMSwgYTIsIGEzLCBhNCwgcm91bmQpOwkJXAorCVNCT1ggKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQpOwkJCVwKKwkJQkxPQ0tfWE9SX0tFWSAoYjAsIGIxLCBiMiwgYjMsIGI0LCByb3VuZCk7CQlcCisJCVNCT1ggKHdoaWNoLCBiMCwgYjEsIGIyLCBiMywgYjQpOwkJCVwKKwlCTE9DS19YT1JfS0VZIChuYTAsIG5hMSwgbmEyLCBuYTMsIG5hNCwgKChyb3VuZCkgKyAxKSk7CQlcCisJCUJMT0NLX1hPUl9LRVkgKG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0LCAoKHJvdW5kKSArIDEpKTsKKworLyogQXBwbHkgYW4gaW52ZXJzZSBTZXJwZW50IHJvdW5kIHRvIGVpZ2h0IHBhcmFsbGVsIGJsb2Nrcy4gIFRoaXMgbWFjcm8KKyAgIGluY3JlbWVudHMgYHJvdW5kJy4gICovCisjZGVmaW5lIFJPVU5EX0lOVkVSU0Uocm91bmQsIHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQsIFwKKwkJCQkgICAgbmEwLCBuYTEsIG5hMiwgbmEzLCBuYTQsIFwKKwkJCQkgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBcCisJCQkJICAgIG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0KSBcCisJTElORUFSX1RSQU5TRk9STUFUSU9OX0lOVkVSU0UgKGEwLCBhMSwgYTIsIGEzLCBhNCk7CVwKKwkJTElORUFSX1RSQU5TRk9STUFUSU9OX0lOVkVSU0UgKGIwLCBiMSwgYjIsIGIzLCBiNCk7CVwKKwlTQk9YX0lOVkVSU0UgKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQpOwkJXAorCUJMT0NLX1hPUl9LRVkgKG5hMCwgbmExLCBuYTIsIG5hMywgbmE0LCByb3VuZCk7CQlcCisJCVNCT1hfSU5WRVJTRSAod2hpY2gsIGIwLCBiMSwgYjIsIGIzLCBiNCk7CQlcCisJCUJMT0NLX1hPUl9LRVkgKG5iMCwgbmIxLCBuYjIsIG5iMywgbmI0LCByb3VuZCk7CisKKy8qIEFwcGx5IHRoZSBmaXJzdCBpbnZlcnNlIFNlcnBlbnQgcm91bmQgdG8gZWlnaHQgcGFyYWxsZWwgYmxvY2tzLiAgVGhpcyBtYWNybworICAgaW5jcmVtZW50cyBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfRklSU1RfSU5WRVJTRShyb3VuZCwgd2hpY2gsIGEwLCBhMSwgYTIsIGEzLCBhNCwgXAorCQkJCQkgIG5hMCwgbmExLCBuYTIsIG5hMywgbmE0LCBcCisJCQkJCSAgYjAsIGIxLCBiMiwgYjMsIGI0LCBcCisJCQkJCSAgbmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQpIFwKKwlCTE9DS19YT1JfS0VZIChhMCwgYTEsIGEyLCBhMywgYTQsICgocm91bmQpICsgMSkpOwlcCisJCUJMT0NLX1hPUl9LRVkgKGIwLCBiMSwgYjIsIGIzLCBiNCwgKChyb3VuZCkgKyAxKSk7CVwKKwlTQk9YX0lOVkVSU0UgKHdoaWNoLCBhMCwgYTEsIGEyLCBhMywgYTQpOyAJXAorCUJMT0NLX1hPUl9LRVkgKG5hMCwgbmExLCBuYTIsIG5hMywgbmE0LCByb3VuZCk7CVwKKwkJU0JPWF9JTlZFUlNFICh3aGljaCwgYjAsIGIxLCBiMiwgYjMsIGI0KTsgCVwKKwkJQkxPQ0tfWE9SX0tFWSAobmIwLCBuYjEsIG5iMiwgbmIzLCBuYjQsIHJvdW5kKTsKKworLnRleHQKKworLmFsaWduIDgKKy50eXBlICAgX19zZXJwZW50X2VuY19ibGs4LEBmdW5jdGlvbjsKK19fc2VycGVudF9lbmNfYmxrODoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbCBwbGFpbnRleHQKKwkgKgkJCQkJCWJsb2NrcworCSAqIG91dHB1dDoKKwkgKglSQTQsIFJBMSwgUkEyLCBSQTAsIFJCNCwgUkIxLCBSQjIsIFJCMDogZWlnaHQgcGFyYWxsZWwKKwkgKiAJCQkJCQljaXBoZXJ0ZXh0IGJsb2NrcworCSAqLworCisJcGNtcGVxZCBSTk9ULCBSTk9UOworCisJdHJhbnNwb3NlXzR4NChSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUlRNUDAsIFJUTVAxKTsKKwl0cmFuc3Bvc2VfNHg0KFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSVE1QMCwgUlRNUDEpOworCisJUk9VTkQgKDAsIDAsIFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LCBSQTEsIFJBNCwgUkEyLCBSQTAsIFJBMywKKwkJICAgICBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCwgUkIxLCBSQjQsIFJCMiwgUkIwLCBSQjMpOworCVJPVU5EICgxLCAxLCBSQTEsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTMsCisJCSAgICAgUkIxLCBSQjQsIFJCMiwgUkIwLCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIzKTsKKwlST1VORCAoMiwgMiwgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTMsIFJBMCwgUkE0LCBSQTEsIFJBMywgUkEyLAorCQkgICAgIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIzLCBSQjAsIFJCNCwgUkIxLCBSQjMsIFJCMik7CisJUk9VTkQgKDMsIDMsIFJBMCwgUkE0LCBSQTEsIFJBMywgUkEyLCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBMCwKKwkJICAgICBSQjAsIFJCNCwgUkIxLCBSQjMsIFJCMiwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjApOworCVJPVU5EICg0LCA0LCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTMsCisJCSAgICAgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjAsIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkIzKTsKKwlST1VORCAoNSwgNSwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTMsIFJBMCwgUkEyLCBSQTEsIFJBNCwgUkEzLAorCQkgICAgIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkIzLCBSQjAsIFJCMiwgUkIxLCBSQjQsIFJCMyk7CisJUk9VTkQgKDYsIDYsIFJBMCwgUkEyLCBSQTEsIFJBNCwgUkEzLCBSQTAsIFJBMiwgUkEzLCBSQTEsIFJBNCwKKwkJICAgICBSQjAsIFJCMiwgUkIxLCBSQjQsIFJCMywgUkIwLCBSQjIsIFJCMywgUkIxLCBSQjQpOworCVJPVU5EICg3LCA3LCBSQTAsIFJBMiwgUkEzLCBSQTEsIFJBNCwgUkE0LCBSQTEsIFJBMiwgUkEwLCBSQTMsCisJCSAgICAgUkIwLCBSQjIsIFJCMywgUkIxLCBSQjQsIFJCNCwgUkIxLCBSQjIsIFJCMCwgUkIzKTsKKwlST1VORCAoOCwgMCwgUkE0LCBSQTEsIFJBMiwgUkEwLCBSQTMsIFJBMSwgUkEzLCBSQTIsIFJBNCwgUkEwLAorCQkgICAgIFJCNCwgUkIxLCBSQjIsIFJCMCwgUkIzLCBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMCk7CisJUk9VTkQgKDksIDEsIFJBMSwgUkEzLCBSQTIsIFJBNCwgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwKKwkJICAgICBSQjEsIFJCMywgUkIyLCBSQjQsIFJCMCwgUkIyLCBSQjEsIFJCNCwgUkIzLCBSQjApOworCVJPVU5EICgxMCwgMiwgUkEyLCBSQTEsIFJBNCwgUkEzLCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMCwgUkEyLAorCQkgICAgICBSQjIsIFJCMSwgUkI0LCBSQjMsIFJCMCwgUkI0LCBSQjMsIFJCMSwgUkIwLCBSQjIpOworCVJPVU5EICgxMSwgMywgUkE0LCBSQTMsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkExLCBSQTAsIFJBMiwgUkE0LAorCQkgICAgICBSQjQsIFJCMywgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCMCwgUkIyLCBSQjQpOworCVJPVU5EICgxMiwgNCwgUkEzLCBSQTEsIFJBMCwgUkEyLCBSQTQsIFJBMSwgUkE0LCBSQTMsIFJBMiwgUkEwLAorCQkgICAgICBSQjMsIFJCMSwgUkIwLCBSQjIsIFJCNCwgUkIxLCBSQjQsIFJCMywgUkIyLCBSQjApOworCVJPVU5EICgxMywgNSwgUkExLCBSQTQsIFJBMywgUkEyLCBSQTAsIFJBNCwgUkEyLCBSQTEsIFJBMywgUkEwLAorCQkgICAgICBSQjEsIFJCNCwgUkIzLCBSQjIsIFJCMCwgUkI0LCBSQjIsIFJCMSwgUkIzLCBSQjApOworCVJPVU5EICgxNCwgNiwgUkE0LCBSQTIsIFJBMSwgUkEzLCBSQTAsIFJBNCwgUkEyLCBSQTAsIFJBMSwgUkEzLAorCQkgICAgICBSQjQsIFJCMiwgUkIxLCBSQjMsIFJCMCwgUkI0LCBSQjIsIFJCMCwgUkIxLCBSQjMpOworCVJPVU5EICgxNSwgNywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTMsIFJBMywgUkExLCBSQTIsIFJBNCwgUkEwLAorCQkgICAgICBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMywgUkIzLCBSQjEsIFJCMiwgUkI0LCBSQjApOworCVJPVU5EICgxNiwgMCwgUkEzLCBSQTEsIFJBMiwgUkE0LCBSQTAsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LAorCQkgICAgICBSQjMsIFJCMSwgUkIyLCBSQjQsIFJCMCwgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQpOworCVJPVU5EICgxNywgMSwgUkExLCBSQTAsIFJBMiwgUkEzLCBSQTQsIFJBMiwgUkExLCBSQTMsIFJBMCwgUkE0LAorCQkgICAgICBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIyLCBSQjEsIFJCMywgUkIwLCBSQjQpOworCVJPVU5EICgxOCwgMiwgUkEyLCBSQTEsIFJBMywgUkEwLCBSQTQsIFJBMywgUkEwLCBSQTEsIFJBNCwgUkEyLAorCQkgICAgICBSQjIsIFJCMSwgUkIzLCBSQjAsIFJCNCwgUkIzLCBSQjAsIFJCMSwgUkI0LCBSQjIpOworCVJPVU5EICgxOSwgMywgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTQsIFJBMiwgUkEzLAorCQkgICAgICBSQjMsIFJCMCwgUkIxLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCNCwgUkIyLCBSQjMpOworCVJPVU5EICgyMCwgNCwgUkEwLCBSQTEsIFJBNCwgUkEyLCBSQTMsIFJBMSwgUkEzLCBSQTAsIFJBMiwgUkE0LAorCQkgICAgICBSQjAsIFJCMSwgUkI0LCBSQjIsIFJCMywgUkIxLCBSQjMsIFJCMCwgUkIyLCBSQjQpOworCVJPVU5EICgyMSwgNSwgUkExLCBSQTMsIFJBMCwgUkEyLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkE0LAorCQkgICAgICBSQjEsIFJCMywgUkIwLCBSQjIsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQpOworCVJPVU5EICgyMiwgNiwgUkEzLCBSQTIsIFJBMSwgUkEwLCBSQTQsIFJBMywgUkEyLCBSQTQsIFJBMSwgUkEwLAorCQkgICAgICBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCNCwgUkIzLCBSQjIsIFJCNCwgUkIxLCBSQjApOworCVJPVU5EICgyMywgNywgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTAsIFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LAorCQkgICAgICBSQjMsIFJCMiwgUkI0LCBSQjEsIFJCMCwgUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQpOworCVJPVU5EICgyNCwgMCwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkEzLAorCQkgICAgICBSQjAsIFJCMSwgUkIyLCBSQjMsIFJCNCwgUkIxLCBSQjQsIFJCMiwgUkIwLCBSQjMpOworCVJPVU5EICgyNSwgMSwgUkExLCBSQTQsIFJBMiwgUkEwLCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwgUkEzLAorCQkgICAgICBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIyLCBSQjEsIFJCMCwgUkI0LCBSQjMpOworCVJPVU5EICgyNiwgMiwgUkEyLCBSQTEsIFJBMCwgUkE0LCBSQTMsIFJBMCwgUkE0LCBSQTEsIFJBMywgUkEyLAorCQkgICAgICBSQjIsIFJCMSwgUkIwLCBSQjQsIFJCMywgUkIwLCBSQjQsIFJCMSwgUkIzLCBSQjIpOworCVJPVU5EICgyNywgMywgUkEwLCBSQTQsIFJBMSwgUkEzLCBSQTIsIFJBNCwgUkExLCBSQTMsIFJBMiwgUkEwLAorCQkgICAgICBSQjAsIFJCNCwgUkIxLCBSQjMsIFJCMiwgUkI0LCBSQjEsIFJCMywgUkIyLCBSQjApOworCVJPVU5EICgyOCwgNCwgUkE0LCBSQTEsIFJBMywgUkEyLCBSQTAsIFJBMSwgUkEwLCBSQTQsIFJBMiwgUkEzLAorCQkgICAgICBSQjQsIFJCMSwgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjAsIFJCNCwgUkIyLCBSQjMpOworCVJPVU5EICgyOSwgNSwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTMsIFJBMCwgUkEyLCBSQTEsIFJBNCwgUkEzLAorCQkgICAgICBSQjEsIFJCMCwgUkI0LCBSQjIsIFJCMywgUkIwLCBSQjIsIFJCMSwgUkI0LCBSQjMpOworCVJPVU5EICgzMCwgNiwgUkEwLCBSQTIsIFJBMSwgUkE0LCBSQTMsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LAorCQkgICAgICBSQjAsIFJCMiwgUkIxLCBSQjQsIFJCMywgUkIwLCBSQjIsIFJCMywgUkIxLCBSQjQpOworCVJPVU5EX0xBU1QgKDMxLCA3LCBSQTAsIFJBMiwgUkEzLCBSQTEsIFJBNCwgUkE0LCBSQTEsIFJBMiwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgUkIwLCBSQjIsIFJCMywgUkIxLCBSQjQsIFJCNCwgUkIxLCBSQjIsIFJCMCwgUkIzKTsKKworCXRyYW5zcG9zZV80eDQoUkE0LCBSQTEsIFJBMiwgUkEwLCBSQTMsIFJUTVAwLCBSVE1QMSk7CisJdHJhbnNwb3NlXzR4NChSQjQsIFJCMSwgUkIyLCBSQjAsIFJCMywgUlRNUDAsIFJUTVAxKTsKKworCXJldDsKKy5zaXplIF9fc2VycGVudF9lbmNfYmxrOCwuLV9fc2VycGVudF9lbmNfYmxrODsKKworLmFsaWduIDgKKy50eXBlICAgX19zZXJwZW50X2RlY19ibGs4LEBmdW5jdGlvbjsKK19fc2VycGVudF9kZWNfYmxrODoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbAorCSAqIAkJCQkJCWNpcGhlcnRleHQgYmxvY2tzCisJICogb3V0cHV0OgorCSAqCVJBMCwgUkExLCBSQTIsIFJBMywgUkIwLCBSQjEsIFJCMiwgUkIzOiBlaWdodCBwYXJhbGxlbCBwbGFpbnRleHQKKwkgKgkJCQkJCWJsb2NrcworCSAqLworCisJcGNtcGVxZCBSTk9ULCBSTk9UOworCisJdHJhbnNwb3NlXzR4NChSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUlRNUDAsIFJUTVAxKTsKKwl0cmFuc3Bvc2VfNHg0KFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSVE1QMCwgUlRNUDEpOworCisJUk9VTkRfRklSU1RfSU5WRVJTRSAoMzEsIDcsIFJBMCwgUkExLCBSQTIsIFJBMywgUkE0LAorCQkJCSAgICBSQTMsIFJBMCwgUkExLCBSQTQsIFJBMiwKKwkJCQkgICAgUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQsCisJCQkJICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyKTsKKwlST1VORF9JTlZFUlNFICgzMCwgNiwgUkEzLCBSQTAsIFJBMSwgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLAorCQkgICAgICAgICAgICAgIFJCMywgUkIwLCBSQjEsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoMjksIDUsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTEsIFJBMywgUkE0LCBSQTIsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIxLCBSQjMsIFJCNCwgUkIyLCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDI4LCA0LCBSQTEsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyNywgMywgUkExLCBSQTIsIFJBNCwgUkEwLCBSQTMsIFJBNCwgUkEyLCBSQTAsIFJBMSwgUkEzLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIyLCBSQjQsIFJCMCwgUkIzLCBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoMjYsIDIsIFJBNCwgUkEyLCBSQTAsIFJBMSwgUkEzLCBSQTIsIFJBMywgUkEwLCBSQTEsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMiwgUkIwLCBSQjEsIFJCMywgUkIyLCBSQjMsIFJCMCwgUkIxLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDI1LCAxLCBSQTIsIFJBMywgUkEwLCBSQTEsIFJBNCwgUkE0LCBSQTIsIFJBMSwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIyLCBSQjMsIFJCMCwgUkIxLCBSQjQsIFJCNCwgUkIyLCBSQjEsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgyNCwgMCwgUkE0LCBSQTIsIFJBMSwgUkEwLCBSQTMsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkExLAorCQkgICAgICAgICAgICAgIFJCNCwgUkIyLCBSQjEsIFJCMCwgUkIzLCBSQjQsIFJCMywgUkIyLCBSQjAsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoMjMsIDcsIFJBNCwgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMiwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMywgUkIyLCBSQjAsIFJCMSwgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjIpOworCVJPVU5EX0lOVkVSU0UgKDIyLCA2LCBSQTAsIFJBNCwgUkEzLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsCisJCSAgICAgICAgICAgICAgUkIwLCBSQjQsIFJCMywgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwKTsKKwlST1VORF9JTlZFUlNFICgyMSwgNSwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBMywgUkEwLCBSQTEsIFJBMiwgUkE0LAorCQkgICAgICAgICAgICAgIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjMsIFJCMCwgUkIxLCBSQjIsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMjAsIDQsIFJBMywgUkEwLCBSQTEsIFJBMiwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjMsIFJCMCwgUkIxLCBSQjIsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkI0LCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDE5LCAzLCBSQTMsIFJBMiwgUkExLCBSQTQsIFJBMCwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTAsCisJCSAgICAgICAgICAgICAgUkIzLCBSQjIsIFJCMSwgUkI0LCBSQjAsIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIwKTsKKwlST1VORF9JTlZFUlNFICgxOCwgMiwgUkExLCBSQTIsIFJBNCwgUkEzLCBSQTAsIFJBMiwgUkEwLCBSQTQsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIyLCBSQjQsIFJCMywgUkIwLCBSQjIsIFJCMCwgUkI0LCBSQjMsIFJCMSk7CisJUk9VTkRfSU5WRVJTRSAoMTcsIDEsIFJBMiwgUkEwLCBSQTQsIFJBMywgUkExLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgICBSQjIsIFJCMCwgUkI0LCBSQjMsIFJCMSwgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjApOworCVJPVU5EX0lOVkVSU0UgKDE2LCAwLCBSQTEsIFJBMiwgUkEzLCBSQTQsIFJBMCwgUkExLCBSQTAsIFJBMiwgUkE0LCBSQTMsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjIsIFJCMywgUkI0LCBSQjAsIFJCMSwgUkIwLCBSQjIsIFJCNCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICgxNSwgNywgUkExLCBSQTAsIFJBMiwgUkE0LCBSQTMsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEyLAorCQkgICAgICAgICAgICAgIFJCMSwgUkIwLCBSQjIsIFJCNCwgUkIzLCBSQjQsIFJCMSwgUkIwLCBSQjMsIFJCMik7CisJUk9VTkRfSU5WRVJTRSAoMTQsIDYsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjQsIFJCMSwgUkIwLCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDEzLCA1LCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEwLCBSQTQsIFJBMywgUkEyLCBSQTEsCisJCSAgICAgICAgICAgICAgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjQsIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkIxKTsKKwlST1VORF9JTlZFUlNFICgxMiwgNCwgUkEwLCBSQTQsIFJBMywgUkEyLCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LAorCQkgICAgICAgICAgICAgIFJCMCwgUkI0LCBSQjMsIFJCMiwgUkIxLCBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCk7CisJUk9VTkRfSU5WRVJTRSAoMTEsIDMsIFJBMCwgUkEyLCBSQTMsIFJBMSwgUkE0LCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwKKwkJICAgICAgICAgICAgICBSQjAsIFJCMiwgUkIzLCBSQjEsIFJCNCwgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDEwLCAyLCBSQTMsIFJBMiwgUkExLCBSQTAsIFJBNCwgUkEyLCBSQTQsIFJBMSwgUkEwLCBSQTMsCisJCSAgICAgICAgICAgICAgUkIzLCBSQjIsIFJCMSwgUkIwLCBSQjQsIFJCMiwgUkI0LCBSQjEsIFJCMCwgUkIzKTsKKwlST1VORF9JTlZFUlNFICg5LCAxLCBSQTIsIFJBNCwgUkExLCBSQTAsIFJBMywgUkEzLCBSQTIsIFJBMCwgUkExLCBSQTQsCisJCSAgICAgICAgICAgICBSQjIsIFJCNCwgUkIxLCBSQjAsIFJCMywgUkIzLCBSQjIsIFJCMCwgUkIxLCBSQjQpOworCVJPVU5EX0lOVkVSU0UgKDgsIDAsIFJBMywgUkEyLCBSQTAsIFJBMSwgUkE0LCBSQTMsIFJBNCwgUkEyLCBSQTEsIFJBMCwKKwkJICAgICAgICAgICAgIFJCMywgUkIyLCBSQjAsIFJCMSwgUkI0LCBSQjMsIFJCNCwgUkIyLCBSQjEsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoNywgNywgUkEzLCBSQTQsIFJBMiwgUkExLCBSQTAsIFJBMSwgUkEzLCBSQTQsIFJBMCwgUkEyLAorCQkgICAgICAgICAgICAgUkIzLCBSQjQsIFJCMiwgUkIxLCBSQjAsIFJCMSwgUkIzLCBSQjQsIFJCMCwgUkIyKTsKKwlST1VORF9JTlZFUlNFICg2LCA2LCBSQTEsIFJBMywgUkE0LCBSQTAsIFJBMiwgUkEzLCBSQTQsIFJBMiwgUkEwLCBSQTEsCisJCSAgICAgICAgICAgICBSQjEsIFJCMywgUkI0LCBSQjAsIFJCMiwgUkIzLCBSQjQsIFJCMiwgUkIwLCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDUsIDUsIFJBMywgUkE0LCBSQTIsIFJBMCwgUkExLCBSQTQsIFJBMSwgUkEwLCBSQTIsIFJBMywKKwkJICAgICAgICAgICAgIFJCMywgUkI0LCBSQjIsIFJCMCwgUkIxLCBSQjQsIFJCMSwgUkIwLCBSQjIsIFJCMyk7CisJUk9VTkRfSU5WRVJTRSAoNCwgNCwgUkE0LCBSQTEsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkEyLCBSQTAsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgUkI0LCBSQjEsIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIyLCBSQjAsIFJCMywgUkIxKTsKKwlST1VORF9JTlZFUlNFICgzLCAzLCBSQTQsIFJBMiwgUkEwLCBSQTMsIFJBMSwgUkEwLCBSQTIsIFJBMywgUkE0LCBSQTEsCisJCSAgICAgICAgICAgICBSQjQsIFJCMiwgUkIwLCBSQjMsIFJCMSwgUkIwLCBSQjIsIFJCMywgUkI0LCBSQjEpOworCVJPVU5EX0lOVkVSU0UgKDIsIDIsIFJBMCwgUkEyLCBSQTMsIFJBNCwgUkExLCBSQTIsIFJBMSwgUkEzLCBSQTQsIFJBMCwKKwkJICAgICAgICAgICAgIFJCMCwgUkIyLCBSQjMsIFJCNCwgUkIxLCBSQjIsIFJCMSwgUkIzLCBSQjQsIFJCMCk7CisJUk9VTkRfSU5WRVJTRSAoMSwgMSwgUkEyLCBSQTEsIFJBMywgUkE0LCBSQTAsIFJBMCwgUkEyLCBSQTQsIFJBMywgUkExLAorCQkgICAgICAgICAgICAgUkIyLCBSQjEsIFJCMywgUkI0LCBSQjAsIFJCMCwgUkIyLCBSQjQsIFJCMywgUkIxKTsKKwlST1VORF9JTlZFUlNFICgwLCAwLCBSQTAsIFJBMiwgUkE0LCBSQTMsIFJBMSwgUkEwLCBSQTEsIFJBMiwgUkEzLCBSQTQsCisJCSAgICAgICAgICAgICBSQjAsIFJCMiwgUkI0LCBSQjMsIFJCMSwgUkIwLCBSQjEsIFJCMiwgUkIzLCBSQjQpOworCisJdHJhbnNwb3NlXzR4NChSQTAsIFJBMSwgUkEyLCBSQTMsIFJBNCwgUlRNUDAsIFJUTVAxKTsKKwl0cmFuc3Bvc2VfNHg0KFJCMCwgUkIxLCBSQjIsIFJCMywgUkI0LCBSVE1QMCwgUlRNUDEpOworCisJcmV0OworLnNpemUgX19zZXJwZW50X2RlY19ibGs4LC4tX19zZXJwZW50X2RlY19ibGs4OworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X3NlcnBlbnRfc3NlMl9jdHJfZW5jCisudHlwZSAgIF9nY3J5X3NlcnBlbnRfc3NlMl9jdHJfZW5jLEBmdW5jdGlvbjsKK19nY3J5X3NlcnBlbnRfc3NlMl9jdHJfZW5jOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0ICg4IGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDggYmxvY2tzKQorCSAqCSVyY3g6IGl2IChiaWcgZW5kaWFuLCAxMjhiaXQpCisJICovCisKKwkvKiBsb2FkIElWIGFuZCBieXRlc3dhcCAqLworCW1vdmRxdSAoJXJjeCksIFJBMDsKKwltb3ZkcWEgUkEwLCBSVE1QMDsKKwlwYnN3YXAoUlRNUDAsIFJUTVAxKTsgLyogYmUgPT4gbGUgKi8KKworCXBjbXBlcWQgUk5PVCwgUk5PVDsKKwlwc3JsZHEgJDgsIFJOT1Q7IC8qIGxvdzogLTEsIGhpZ2g6IDAgKi8KKwltb3ZkcWEgUk5PVCwgUlRNUDI7CisJcGFkZHEgUlRNUDIsIFJUTVAyOyAvKiBsb3c6IC0yLCBoaWdoOiAwICovCisKKwkvKiBjb25zdHJ1Y3QgSVZzICovCisJbW92ZHFhIFJUTVAwLCBSVE1QMTsKKwlwc3VicSBSTk9ULCBSVE1QMDsgLyogKzEgKi8KKwltb3ZkcWEgUlRNUDAsIFJBMTsKKwlwc3VicSBSVE1QMiwgUlRNUDE7IC8qICsyICovCisJbW92ZHFhIFJUTVAxLCBSQTI7CisJcHN1YnEgUlRNUDIsIFJUTVAwOyAvKiArMyAqLworCW1vdmRxYSBSVE1QMCwgUkEzOworCXBzdWJxIFJUTVAyLCBSVE1QMTsgLyogKzQgKi8KKwltb3ZkcWEgUlRNUDEsIFJCMDsKKwlwc3VicSBSVE1QMiwgUlRNUDA7IC8qICs1ICovCisJbW92ZHFhIFJUTVAwLCBSQjE7CisJcHN1YnEgUlRNUDIsIFJUTVAxOyAvKiArNiAqLworCW1vdmRxYSBSVE1QMSwgUkIyOworCXBzdWJxIFJUTVAyLCBSVE1QMDsgLyogKzcgKi8KKwltb3ZkcWEgUlRNUDAsIFJCMzsKKwlwc3VicSBSVE1QMiwgUlRNUDE7IC8qICs4ICovCisKKwkvKiBjaGVjayBuZWVkIGZvciBoYW5kbGluZyA2NC1iaXQgb3ZlcmZsb3cgYW5kIGNhcnJ5ICovCisJY21wbCAkMHhmZmZmZmZmZiwgOCglcmN4KTsKKwlqbmUgLkxub19jdHJfY2Fycnk7CisKKwltb3ZsIDEyKCVyY3gpLCAlZWF4OworCWJzd2FwbCAlZWF4OworCWNtcGwgJC04LCAlZWF4OworCWpiIC5Mbm9fY3RyX2NhcnJ5OworCXBzbGxkcSAkOCwgUk5PVDsgLyogbG93OiAwLCBoaWdoOiAtMSAqLworCWplIC5MY2FycnlfUlRNUDA7CisKKwljbXBsICQtNiwgJWVheDsKKwlqYiAuTGNhcnJ5X1JCMzsKKwlqZSAuTGNhcnJ5X1JCMjsKKworCWNtcGwgJC00LCAlZWF4OworCWpiIC5MY2FycnlfUkIxOworCWplIC5MY2FycnlfUkIwOworCisJY21wbCAkLTIsICVlYXg7CisJamIgLkxjYXJyeV9SQTM7CisJamUgLkxjYXJyeV9SQTI7CisKKwlwc3VicSBSTk9ULCBSQTE7CisuTGNhcnJ5X1JBMjoKKwlwc3VicSBSTk9ULCBSQTI7CisuTGNhcnJ5X1JBMzoKKwlwc3VicSBSTk9ULCBSQTM7CisuTGNhcnJ5X1JCMDoKKwlwc3VicSBSTk9ULCBSQjA7CisuTGNhcnJ5X1JCMToKKwlwc3VicSBSTk9ULCBSQjE7CisuTGNhcnJ5X1JCMjoKKwlwc3VicSBSTk9ULCBSQjI7CisuTGNhcnJ5X1JCMzoKKwlwc3VicSBSTk9ULCBSQjM7CisuTGNhcnJ5X1JUTVAwOgorCXBzdWJxIFJOT1QsIFJUTVAxOworCisuTG5vX2N0cl9jYXJyeToKKwkvKiBsZSA9PiBiZSAqLworCXBic3dhcChSQTEsIFJUTVAwKTsKKwlwYnN3YXAoUkEyLCBSVE1QMCk7CisJcGJzd2FwKFJBMywgUlRNUDApOworCXBic3dhcChSQjAsIFJUTVAwKTsKKwlwYnN3YXAoUkIxLCBSVE1QMCk7CisJcGJzd2FwKFJCMiwgUlRNUDApOworCXBic3dhcChSQjMsIFJUTVAwKTsKKwlwYnN3YXAoUlRNUDEsIFJUTVAwKTsKKwkvKiBzdG9yZSBuZXcgSVYgKi8KKwltb3ZkcXUgUlRNUDEsICglcmN4KTsKKworCWNhbGwgX19zZXJwZW50X2VuY19ibGs4OworCisJcHhvcl91KCgwICogMTYpKCVyZHgpLCBSQTQsIFJUTVAwKTsKKwlweG9yX3UoKDEgKiAxNikoJXJkeCksIFJBMSwgUlRNUDApOworCXB4b3JfdSgoMiAqIDE2KSglcmR4KSwgUkEyLCBSVE1QMCk7CisJcHhvcl91KCgzICogMTYpKCVyZHgpLCBSQTAsIFJUTVAwKTsKKwlweG9yX3UoKDQgKiAxNikoJXJkeCksIFJCNCwgUlRNUDApOworCXB4b3JfdSgoNSAqIDE2KSglcmR4KSwgUkIxLCBSVE1QMCk7CisJcHhvcl91KCg2ICogMTYpKCVyZHgpLCBSQjIsIFJUTVAwKTsKKwlweG9yX3UoKDcgKiAxNikoJXJkeCksIFJCMCwgUlRNUDApOworCisJbW92ZHF1IFJBNCwgKDAgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMSwgKDEgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMiwgKDIgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMCwgKDMgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCNCwgKDQgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMSwgKDUgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMiwgKDYgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMCwgKDcgKiAxNikoJXJzaSk7CisKKwkvKiBjbGVhciB0aGUgdXNlZCByZWdpc3RlcnMgKi8KKwlweG9yIFJBMCwgUkEwOworCXB4b3IgUkExLCBSQTE7CisJcHhvciBSQTIsIFJBMjsKKwlweG9yIFJBMywgUkEzOworCXB4b3IgUkE0LCBSQTQ7CisJcHhvciBSQjAsIFJCMDsKKwlweG9yIFJCMSwgUkIxOworCXB4b3IgUkIyLCBSQjI7CisJcHhvciBSQjMsIFJCMzsKKwlweG9yIFJCNCwgUkI0OworCXB4b3IgUlRNUDAsIFJUTVAwOworCXB4b3IgUlRNUDEsIFJUTVAxOworCXB4b3IgUlRNUDIsIFJUTVAyOworCXB4b3IgUk5PVCwgUk5PVDsKKworCXJldAorLnNpemUgX2djcnlfc2VycGVudF9zc2UyX2N0cl9lbmMsLi1fZ2NyeV9zZXJwZW50X3NzZTJfY3RyX2VuYzsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9zZXJwZW50X3NzZTJfY2JjX2RlYworLnR5cGUgICBfZ2NyeV9zZXJwZW50X3NzZTJfY2JjX2RlYyxAZnVuY3Rpb247CitfZ2NyeV9zZXJwZW50X3NzZTJfY2JjX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoOCBibG9ja3MpCisJICoJJXJkeDogc3JjICg4IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJbW92ZHF1ICgwICogMTYpKCVyZHgpLCBSQTA7CisJbW92ZHF1ICgxICogMTYpKCVyZHgpLCBSQTE7CisJbW92ZHF1ICgyICogMTYpKCVyZHgpLCBSQTI7CisJbW92ZHF1ICgzICogMTYpKCVyZHgpLCBSQTM7CisJbW92ZHF1ICg0ICogMTYpKCVyZHgpLCBSQjA7CisJbW92ZHF1ICg1ICogMTYpKCVyZHgpLCBSQjE7CisJbW92ZHF1ICg2ICogMTYpKCVyZHgpLCBSQjI7CisJbW92ZHF1ICg3ICogMTYpKCVyZHgpLCBSQjM7CisKKwljYWxsIF9fc2VycGVudF9kZWNfYmxrODsKKworCW1vdmRxdSAoNyAqIDE2KSglcmR4KSwgUk5PVDsKKwlweG9yX3UoKCVyY3gpLCBSQTAsIFJUTVAwKTsKKwlweG9yX3UoKDAgKiAxNikoJXJkeCksIFJBMSwgUlRNUDApOworCXB4b3JfdSgoMSAqIDE2KSglcmR4KSwgUkEyLCBSVE1QMCk7CisJcHhvcl91KCgyICogMTYpKCVyZHgpLCBSQTMsIFJUTVAwKTsKKwlweG9yX3UoKDMgKiAxNikoJXJkeCksIFJCMCwgUlRNUDApOworCXB4b3JfdSgoNCAqIDE2KSglcmR4KSwgUkIxLCBSVE1QMCk7CisJcHhvcl91KCg1ICogMTYpKCVyZHgpLCBSQjIsIFJUTVAwKTsKKwlweG9yX3UoKDYgKiAxNikoJXJkeCksIFJCMywgUlRNUDApOworCW1vdmRxdSBSTk9ULCAoJXJjeCk7IC8qIHN0b3JlIG5ldyBJViAqLworCisJbW92ZHF1IFJBMCwgKDAgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMSwgKDEgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMiwgKDIgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJBMywgKDMgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMCwgKDQgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMSwgKDUgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMiwgKDYgKiAxNikoJXJzaSk7CisJbW92ZHF1IFJCMywgKDcgKiAxNikoJXJzaSk7CisKKwkvKiBjbGVhciB0aGUgdXNlZCByZWdpc3RlcnMgKi8KKwlweG9yIFJBMCwgUkEwOworCXB4b3IgUkExLCBSQTE7CisJcHhvciBSQTIsIFJBMjsKKwlweG9yIFJBMywgUkEzOworCXB4b3IgUkE0LCBSQTQ7CisJcHhvciBSQjAsIFJCMDsKKwlweG9yIFJCMSwgUkIxOworCXB4b3IgUkIyLCBSQjI7CisJcHhvciBSQjMsIFJCMzsKKwlweG9yIFJCNCwgUkI0OworCXB4b3IgUlRNUDAsIFJUTVAwOworCXB4b3IgUlRNUDEsIFJUTVAxOworCXB4b3IgUlRNUDIsIFJUTVAyOworCXB4b3IgUk5PVCwgUk5PVDsKKworCXJldAorLnNpemUgX2djcnlfc2VycGVudF9zc2UyX2NiY19kZWMsLi1fZ2NyeV9zZXJwZW50X3NzZTJfY2JjX2RlYzsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV9zZXJwZW50X3NzZTJfY2ZiX2RlYworLnR5cGUgICBfZ2NyeV9zZXJwZW50X3NzZTJfY2ZiX2RlYyxAZnVuY3Rpb247CitfZ2NyeV9zZXJwZW50X3NzZTJfY2ZiX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoOCBibG9ja3MpCisJICoJJXJkeDogc3JjICg4IGJsb2NrcykKKwkgKgklcmN4OiBpdgorCSAqLworCisJLyogTG9hZCBpbnB1dCAqLworCW1vdmRxdSAoJXJjeCksIFJBMDsKKwltb3ZkcXUgMCAqIDE2KCVyZHgpLCBSQTE7CisJbW92ZHF1IDEgKiAxNiglcmR4KSwgUkEyOworCW1vdmRxdSAyICogMTYoJXJkeCksIFJBMzsKKwltb3ZkcXUgMyAqIDE2KCVyZHgpLCBSQjA7CisJbW92ZHF1IDQgKiAxNiglcmR4KSwgUkIxOworCW1vdmRxdSA1ICogMTYoJXJkeCksIFJCMjsKKwltb3ZkcXUgNiAqIDE2KCVyZHgpLCBSQjM7CisKKwkvKiBVcGRhdGUgSVYgKi8KKwltb3ZkcXUgNyAqIDE2KCVyZHgpLCBSTk9UOworCW1vdmRxdSBSTk9ULCAoJXJjeCk7CisKKwljYWxsIF9fc2VycGVudF9lbmNfYmxrODsKKworCXB4b3JfdSgoMCAqIDE2KSglcmR4KSwgUkE0LCBSVE1QMCk7CisJcHhvcl91KCgxICogMTYpKCVyZHgpLCBSQTEsIFJUTVAwKTsKKwlweG9yX3UoKDIgKiAxNikoJXJkeCksIFJBMiwgUlRNUDApOworCXB4b3JfdSgoMyAqIDE2KSglcmR4KSwgUkEwLCBSVE1QMCk7CisJcHhvcl91KCg0ICogMTYpKCVyZHgpLCBSQjQsIFJUTVAwKTsKKwlweG9yX3UoKDUgKiAxNikoJXJkeCksIFJCMSwgUlRNUDApOworCXB4b3JfdSgoNiAqIDE2KSglcmR4KSwgUkIyLCBSVE1QMCk7CisJcHhvcl91KCg3ICogMTYpKCVyZHgpLCBSQjAsIFJUTVAwKTsKKworCW1vdmRxdSBSQTQsICgwICogMTYpKCVyc2kpOworCW1vdmRxdSBSQTEsICgxICogMTYpKCVyc2kpOworCW1vdmRxdSBSQTIsICgyICogMTYpKCVyc2kpOworCW1vdmRxdSBSQTAsICgzICogMTYpKCVyc2kpOworCW1vdmRxdSBSQjQsICg0ICogMTYpKCVyc2kpOworCW1vdmRxdSBSQjEsICg1ICogMTYpKCVyc2kpOworCW1vdmRxdSBSQjIsICg2ICogMTYpKCVyc2kpOworCW1vdmRxdSBSQjAsICg3ICogMTYpKCVyc2kpOworCisJLyogY2xlYXIgdGhlIHVzZWQgcmVnaXN0ZXJzICovCisJcHhvciBSQTAsIFJBMDsKKwlweG9yIFJBMSwgUkExOworCXB4b3IgUkEyLCBSQTI7CisJcHhvciBSQTMsIFJBMzsKKwlweG9yIFJBNCwgUkE0OworCXB4b3IgUkIwLCBSQjA7CisJcHhvciBSQjEsIFJCMTsKKwlweG9yIFJCMiwgUkIyOworCXB4b3IgUkIzLCBSQjM7CisJcHhvciBSQjQsIFJCNDsKKwlweG9yIFJUTVAwLCBSVE1QMDsKKwlweG9yIFJUTVAxLCBSVE1QMTsKKwlweG9yIFJUTVAyLCBSVE1QMjsKKwlweG9yIFJOT1QsIFJOT1Q7CisKKwlyZXQKKy5zaXplIF9nY3J5X3NlcnBlbnRfc3NlMl9jZmJfZGVjLC4tX2djcnlfc2VycGVudF9zc2UyX2NmYl9kZWM7CisKKyNlbmRpZiAvKmRlZmluZWQoVVNFX1NFUlBFTlQpKi8KKyNlbmRpZiAvKl9feDg2XzY0Ki8KZGlmZiAtLWdpdCBhL2NpcGhlci9zZXJwZW50LmMgYi9jaXBoZXIvc2VycGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjQ3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvc2VycGVudC5jCkBAIC0wLDAgKzEsMTMyNCBAQAorLyogc2VycGVudC5jIC0gSW1wbGVtZW50YXRpb24gb2YgdGhlIFNlcnBlbnQgZW5jcnlwdGlvbiBhbGdvcml0aG0uCisgKglDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJjaXBoZXItc2VsZnRlc3QuaCIKKworCisvKiBVU0VfU1NFMiBpbmRpY2F0ZXMgd2hldGhlciB0byBjb21waWxlIHdpdGggQU1ENjQgU1NFMiBjb2RlLiAqLworI3VuZGVmIFVTRV9TU0UyCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpCisjIGRlZmluZSBVU0VfU1NFMiAxCisjZW5kaWYKKworLyogVVNFX0FWWDIgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEFNRDY0IEFWWDIgY29kZS4gKi8KKyN1bmRlZiBVU0VfQVZYMgorI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKQorIyBpZiBkZWZpbmVkKEVOQUJMRV9BVlgyX1NVUFBPUlQpCisjICBkZWZpbmUgVVNFX0FWWDIgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFVTRV9ORU9OIGluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSBBUk0gTkVPTiBhc3NlbWJseSBjb2RlLiAqLworI3VuZGVmIFVTRV9ORU9OCisjaWYgZGVmaW5lZChIQVZFX0FSTV9BUkNIX1Y2KSAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKyMgaWYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUykgJiYgXAorICAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fTkVPTikKKyMgIGRlZmluZSBVU0VfTkVPTiAxCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBOdW1iZXIgb2Ygcm91bmRzIHBlciBTZXJwZW50IGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24uICAqLworI2RlZmluZSBST1VORFMgMzIKKworLyogTWFnaWMgbnVtYmVyLCB1c2VkIGR1cmluZyBnZW5lcmF0aW5nIG9mIHRoZSBzdWJrZXlzLiAgKi8KKyNkZWZpbmUgUEhJIDB4OUUzNzc5QjkKKworLyogU2VycGVudCB3b3JrcyBvbiAxMjggYml0IGJsb2Nrcy4gICovCit0eXBlZGVmIHUzMiBzZXJwZW50X2Jsb2NrX3RbNF07CisKKy8qIFNlcnBlbnQga2V5LCBwcm92aWRlZCBieSB0aGUgdXNlci4gIElmIHRoZSBvcmlnaW5hbCBrZXkgaXMgc2hvcnRlcgorICAgdGhhbiAyNTYgYml0cywgaXQgaXMgcGFkZGVkLiAgKi8KK3R5cGVkZWYgdTMyIHNlcnBlbnRfa2V5X3RbOF07CisKKy8qIFRoZSBrZXkgc2NoZWR1bGUgY29uc2lzdHMgb2YgMzMgMTI4IGJpdCBzdWJrZXlzLiAgKi8KK3R5cGVkZWYgdTMyIHNlcnBlbnRfc3Via2V5c190W1JPVU5EUyArIDFdWzRdOworCisvKiBBIFNlcnBlbnQgY29udGV4dC4gICovCit0eXBlZGVmIHN0cnVjdCBzZXJwZW50X2NvbnRleHQKK3sKKyAgc2VycGVudF9zdWJrZXlzX3Qga2V5czsJLyogR2VuZXJhdGVkIHN1YmtleXMuICAqLworCisjaWZkZWYgVVNFX0FWWDIKKyAgaW50IHVzZV9hdngyOworI2VuZGlmCisjaWZkZWYgVVNFX05FT04KKyAgaW50IHVzZV9uZW9uOworI2VuZGlmCit9IHNlcnBlbnRfY29udGV4dF90OworCisKKyNpZmRlZiBVU0VfU1NFMgorLyogQXNzZW1ibGVyIGltcGxlbWVudGF0aW9ucyBvZiBTZXJwZW50IHVzaW5nIFNTRTIuICBQcm9jZXNzIDggYmxvY2sgaW4KKyAgIHBhcmFsbGVsLgorICovCitleHRlcm4gdm9pZCBfZ2NyeV9zZXJwZW50X3NzZTJfY3RyX2VuYyhzZXJwZW50X2NvbnRleHRfdCAqY3R4LAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjdHIpOworCitleHRlcm4gdm9pZCBfZ2NyeV9zZXJwZW50X3NzZTJfY2JjX2RlYyhzZXJwZW50X2NvbnRleHRfdCAqY3R4LAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICppdik7CisKK2V4dGVybiB2b2lkIF9nY3J5X3NlcnBlbnRfc3NlMl9jZmJfZGVjKHNlcnBlbnRfY29udGV4dF90ICpjdHgsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKml2KTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FWWDIKKy8qIEFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMgb2YgU2VycGVudCB1c2luZyBTU0UyLiAgUHJvY2VzcyAxNiBibG9jayBpbgorICAgcGFyYWxsZWwuCisgKi8KK2V4dGVybiB2b2lkIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jdHJfZW5jKHNlcnBlbnRfY29udGV4dF90ICpjdHgsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0cik7CisKK2V4dGVybiB2b2lkIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jYmNfZGVjKHNlcnBlbnRfY29udGV4dF90ICpjdHgsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKml2KTsKKworZXh0ZXJuIHZvaWQgX2djcnlfc2VycGVudF9hdngyX2NmYl9kZWMoc2VycGVudF9jb250ZXh0X3QgKmN0eCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqaXYpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfTkVPTgorLyogQXNzZW1ibGVyIGltcGxlbWVudGF0aW9ucyBvZiBTZXJwZW50IHVzaW5nIEFSTSBORU9OLiAgUHJvY2VzcyA4IGJsb2NrIGluCisgICBwYXJhbGxlbC4KKyAqLworZXh0ZXJuIHZvaWQgX2djcnlfc2VycGVudF9uZW9uX2N0cl9lbmMoc2VycGVudF9jb250ZXh0X3QgKmN0eCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqY3RyKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfc2VycGVudF9uZW9uX2NiY19kZWMoc2VycGVudF9jb250ZXh0X3QgKmN0eCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqaXYpOworCitleHRlcm4gdm9pZCBfZ2NyeV9zZXJwZW50X25lb25fY2ZiX2RlYyhzZXJwZW50X2NvbnRleHRfdCAqY3R4LAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICppdik7CisjZW5kaWYKKworCisvKiBBIHByb3RvdHlwZS4gICovCitzdGF0aWMgY29uc3QgY2hhciAqc2VycGVudF90ZXN0ICh2b2lkKTsKKworCisvKgorICogVGhlc2UgYXJlIHRoZSBTLUJveGVzIG9mIFNlcnBlbnQgZnJvbSBmb2xsb3dpbmcgcmVzZWFyY2ggcGFwZXIuCisgKgorICogIEQuIEEuIE9zdmlrLCDigJxTcGVlZGluZyB1cCBTZXJwZW50LOKAnSBpbiBUaGlyZCBBRVMgQ2FuZGlkYXRlIENvbmZlcmVuY2UsCisgKiAgIChOZXcgWW9yaywgTmV3IFlvcmssIFVTQSksIHAuIDMxN+KAkzMyOSwgTmF0aW9uYWwgSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQKKyAqICAgVGVjaG5vbG9neSwgMjAwMC4KKyAqCisgKiBQYXBlciBpcyBhbHNvIGF2YWlsYWJsZSBhdDogaHR0cDovL3d3dy5paS51aWIubm8vfm9zdmlrL3B1Yi9hZXMzLnBkZgorICoKKyAqLworCisjZGVmaW5lIFNCT1gwKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByMyBePSByMDsgcjQgPSAgcjE7IFwKKyAgICByMSAmPSByMzsgcjQgXj0gcjI7IFwKKyAgICByMSBePSByMDsgcjAgfD0gcjM7IFwKKyAgICByMCBePSByNDsgcjQgXj0gcjM7IFwKKyAgICByMyBePSByMjsgcjIgfD0gcjE7IFwKKyAgICByMiBePSByNDsgcjQgPSB+cjQ7IFwKKyAgICByNCB8PSByMTsgcjEgXj0gcjM7IFwKKyAgICByMSBePSByNDsgcjMgfD0gcjA7IFwKKyAgICByMSBePSByMzsgcjQgXj0gcjM7IFwKKyAgICBcCisgICAgdyA9IHIxOyB4ID0gcjQ7IHkgPSByMjsgeiA9IHIwOyBcCisgIH0KKworI2RlZmluZSBTQk9YMF9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByMiA9IH5yMjsgcjQgPSAgcjE7IFwKKyAgICByMSB8PSByMDsgcjQgPSB+cjQ7IFwKKyAgICByMSBePSByMjsgcjIgfD0gcjQ7IFwKKyAgICByMSBePSByMzsgcjAgXj0gcjQ7IFwKKyAgICByMiBePSByMDsgcjAgJj0gcjM7IFwKKyAgICByNCBePSByMDsgcjAgfD0gcjE7IFwKKyAgICByMCBePSByMjsgcjMgXj0gcjQ7IFwKKyAgICByMiBePSByMTsgcjMgXj0gcjA7IFwKKyAgICByMyBePSByMTsgXAorICAgIHIyICY9IHIzOyBcCisgICAgcjQgXj0gcjI7IFwKKyAgICBcCisgICAgdyA9IHIwOyB4ID0gcjQ7IHkgPSByMTsgeiA9IHIzOyBcCisgIH0KKworI2RlZmluZSBTQk9YMShyMCwgcjEsIHIyLCByMywgdywgeCwgeSwgeikgXAorICB7IFwKKyAgICB1MzIgcjQ7IFwKKyAgICBcCisgICAgcjAgPSB+cjA7IHIyID0gfnIyOyBcCisgICAgcjQgPSAgcjA7IHIwICY9IHIxOyBcCisgICAgcjIgXj0gcjA7IHIwIHw9IHIzOyBcCisgICAgcjMgXj0gcjI7IHIxIF49IHIwOyBcCisgICAgcjAgXj0gcjQ7IHI0IHw9IHIxOyBcCisgICAgcjEgXj0gcjM7IHIyIHw9IHIwOyBcCisgICAgcjIgJj0gcjQ7IHIwIF49IHIxOyBcCisgICAgcjEgJj0gcjI7IFwKKyAgICByMSBePSByMDsgcjAgJj0gcjI7IFwKKyAgICByMCBePSByNDsgXAorICAgIFwKKyAgICB3ID0gcjI7IHggPSByMDsgeSA9IHIzOyB6ID0gcjE7IFwKKyAgfQorCisjZGVmaW5lIFNCT1gxX0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHcsIHgsIHksIHopIFwKKyAgeyBcCisgICAgdTMyIHI0OyBcCisgICAgXAorICAgIHI0ID0gIHIxOyByMSBePSByMzsgXAorICAgIHIzICY9IHIxOyByNCBePSByMjsgXAorICAgIHIzIF49IHIwOyByMCB8PSByMTsgXAorICAgIHIyIF49IHIzOyByMCBePSByNDsgXAorICAgIHIwIHw9IHIyOyByMSBePSByMzsgXAorICAgIHIwIF49IHIxOyByMSB8PSByMzsgXAorICAgIHIxIF49IHIwOyByNCA9IH5yNDsgXAorICAgIHI0IF49IHIxOyByMSB8PSByMDsgXAorICAgIHIxIF49IHIwOyBcCisgICAgcjEgfD0gcjQ7IFwKKyAgICByMyBePSByMTsgXAorICAgIFwKKyAgICB3ID0gcjQ7IHggPSByMDsgeSA9IHIzOyB6ID0gcjI7IFwKKyAgfQorCisjZGVmaW5lIFNCT1gyKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByNCA9ICByMDsgcjAgJj0gcjI7IFwKKyAgICByMCBePSByMzsgcjIgXj0gcjE7IFwKKyAgICByMiBePSByMDsgcjMgfD0gcjQ7IFwKKyAgICByMyBePSByMTsgcjQgXj0gcjI7IFwKKyAgICByMSA9ICByMzsgcjMgfD0gcjQ7IFwKKyAgICByMyBePSByMDsgcjAgJj0gcjE7IFwKKyAgICByNCBePSByMDsgcjEgXj0gcjM7IFwKKyAgICByMSBePSByNDsgcjQgPSB+cjQ7IFwKKyAgICBcCisgICAgdyA9IHIyOyB4ID0gcjM7IHkgPSByMTsgeiA9IHI0OyBcCisgIH0KKworI2RlZmluZSBTQk9YMl9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByMiBePSByMzsgcjMgXj0gcjA7IFwKKyAgICByNCA9ICByMzsgcjMgJj0gcjI7IFwKKyAgICByMyBePSByMTsgcjEgfD0gcjI7IFwKKyAgICByMSBePSByNDsgcjQgJj0gcjM7IFwKKyAgICByMiBePSByMzsgcjQgJj0gcjA7IFwKKyAgICByNCBePSByMjsgcjIgJj0gcjE7IFwKKyAgICByMiB8PSByMDsgcjMgPSB+cjM7IFwKKyAgICByMiBePSByMzsgcjAgXj0gcjM7IFwKKyAgICByMCAmPSByMTsgcjMgXj0gcjQ7IFwKKyAgICByMyBePSByMDsgXAorICAgIFwKKyAgICB3ID0gcjE7IHggPSByNDsgeSA9IHIyOyB6ID0gcjM7IFwKKyAgfQorCisjZGVmaW5lIFNCT1gzKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByNCA9ICByMDsgcjAgfD0gcjM7IFwKKyAgICByMyBePSByMTsgcjEgJj0gcjQ7IFwKKyAgICByNCBePSByMjsgcjIgXj0gcjM7IFwKKyAgICByMyAmPSByMDsgcjQgfD0gcjE7IFwKKyAgICByMyBePSByNDsgcjAgXj0gcjE7IFwKKyAgICByNCAmPSByMDsgcjEgXj0gcjM7IFwKKyAgICByNCBePSByMjsgcjEgfD0gcjA7IFwKKyAgICByMSBePSByMjsgcjAgXj0gcjM7IFwKKyAgICByMiA9ICByMTsgcjEgfD0gcjM7IFwKKyAgICByMSBePSByMDsgXAorICAgIFwKKyAgICB3ID0gcjE7IHggPSByMjsgeSA9IHIzOyB6ID0gcjQ7IFwKKyAgfQorCisjZGVmaW5lIFNCT1gzX0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHcsIHgsIHksIHopIFwKKyAgeyBcCisgICAgdTMyIHI0OyBcCisgICAgXAorICAgIHI0ID0gIHIyOyByMiBePSByMTsgXAorICAgIHIwIF49IHIyOyByNCAmPSByMjsgXAorICAgIHI0IF49IHIwOyByMCAmPSByMTsgXAorICAgIHIxIF49IHIzOyByMyB8PSByNDsgXAorICAgIHIyIF49IHIzOyByMCBePSByMzsgXAorICAgIHIxIF49IHI0OyByMyAmPSByMjsgXAorICAgIHIzIF49IHIxOyByMSBePSByMDsgXAorICAgIHIxIHw9IHIyOyByMCBePSByMzsgXAorICAgIHIxIF49IHI0OyBcCisgICAgcjAgXj0gcjE7IFwKKyAgICBcCisgICAgdyA9IHIyOyB4ID0gcjE7IHkgPSByMzsgeiA9IHIwOyBcCisgIH0KKworI2RlZmluZSBTQk9YNChyMCwgcjEsIHIyLCByMywgdywgeCwgeSwgeikgXAorICB7IFwKKyAgICB1MzIgcjQ7IFwKKyAgICBcCisgICAgcjEgXj0gcjM7IHIzID0gfnIzOyBcCisgICAgcjIgXj0gcjM7IHIzIF49IHIwOyBcCisgICAgcjQgPSAgcjE7IHIxICY9IHIzOyBcCisgICAgcjEgXj0gcjI7IHI0IF49IHIzOyBcCisgICAgcjAgXj0gcjQ7IHIyICY9IHI0OyBcCisgICAgcjIgXj0gcjA7IHIwICY9IHIxOyBcCisgICAgcjMgXj0gcjA7IHI0IHw9IHIxOyBcCisgICAgcjQgXj0gcjA7IHIwIHw9IHIzOyBcCisgICAgcjAgXj0gcjI7IHIyICY9IHIzOyBcCisgICAgcjAgPSB+cjA7IHI0IF49IHIyOyBcCisgICAgXAorICAgIHcgPSByMTsgeCA9IHI0OyB5ID0gcjA7IHogPSByMzsgXAorICB9CisKKyNkZWZpbmUgU0JPWDRfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgdywgeCwgeSwgeikgXAorICB7IFwKKyAgICB1MzIgcjQ7IFwKKyAgICBcCisgICAgcjQgPSAgcjI7IHIyICY9IHIzOyBcCisgICAgcjIgXj0gcjE7IHIxIHw9IHIzOyBcCisgICAgcjEgJj0gcjA7IHI0IF49IHIyOyBcCisgICAgcjQgXj0gcjE7IHIxICY9IHIyOyBcCisgICAgcjAgPSB+cjA7IHIzIF49IHI0OyBcCisgICAgcjEgXj0gcjM7IHIzICY9IHIwOyBcCisgICAgcjMgXj0gcjI7IHIwIF49IHIxOyBcCisgICAgcjIgJj0gcjA7IHIzIF49IHIwOyBcCisgICAgcjIgXj0gcjQ7IFwKKyAgICByMiB8PSByMzsgcjMgXj0gcjA7IFwKKyAgICByMiBePSByMTsgXAorICAgIFwKKyAgICB3ID0gcjA7IHggPSByMzsgeSA9IHIyOyB6ID0gcjQ7IFwKKyAgfQorCisjZGVmaW5lIFNCT1g1KHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByMCBePSByMTsgcjEgXj0gcjM7IFwKKyAgICByMyA9IH5yMzsgcjQgPSAgcjE7IFwKKyAgICByMSAmPSByMDsgcjIgXj0gcjM7IFwKKyAgICByMSBePSByMjsgcjIgfD0gcjQ7IFwKKyAgICByNCBePSByMzsgcjMgJj0gcjE7IFwKKyAgICByMyBePSByMDsgcjQgXj0gcjE7IFwKKyAgICByNCBePSByMjsgcjIgXj0gcjA7IFwKKyAgICByMCAmPSByMzsgcjIgPSB+cjI7IFwKKyAgICByMCBePSByNDsgcjQgfD0gcjM7IFwKKyAgICByMiBePSByNDsgXAorICAgIFwKKyAgICB3ID0gcjE7IHggPSByMzsgeSA9IHIwOyB6ID0gcjI7IFwKKyAgfQorCisjZGVmaW5lIFNCT1g1X0lOVkVSU0UocjAsIHIxLCByMiwgcjMsIHcsIHgsIHksIHopIFwKKyAgeyBcCisgICAgdTMyIHI0OyBcCisgICAgXAorICAgIHIxID0gfnIxOyByNCA9ICByMzsgXAorICAgIHIyIF49IHIxOyByMyB8PSByMDsgXAorICAgIHIzIF49IHIyOyByMiB8PSByMTsgXAorICAgIHIyICY9IHIwOyByNCBePSByMzsgXAorICAgIHIyIF49IHI0OyByNCB8PSByMDsgXAorICAgIHI0IF49IHIxOyByMSAmPSByMjsgXAorICAgIHIxIF49IHIzOyByNCBePSByMjsgXAorICAgIHIzICY9IHI0OyByNCBePSByMTsgXAorICAgIHIzIF49IHI0OyByNCA9IH5yNDsgXAorICAgIHIzIF49IHIwOyBcCisgICAgXAorICAgIHcgPSByMTsgeCA9IHI0OyB5ID0gcjM7IHogPSByMjsgXAorICB9CisKKyNkZWZpbmUgU0JPWDYocjAsIHIxLCByMiwgcjMsIHcsIHgsIHksIHopIFwKKyAgeyBcCisgICAgdTMyIHI0OyBcCisgICAgXAorICAgIHIyID0gfnIyOyByNCA9ICByMzsgXAorICAgIHIzICY9IHIwOyByMCBePSByNDsgXAorICAgIHIzIF49IHIyOyByMiB8PSByNDsgXAorICAgIHIxIF49IHIzOyByMiBePSByMDsgXAorICAgIHIwIHw9IHIxOyByMiBePSByMTsgXAorICAgIHI0IF49IHIwOyByMCB8PSByMzsgXAorICAgIHIwIF49IHIyOyByNCBePSByMzsgXAorICAgIHI0IF49IHIwOyByMyA9IH5yMzsgXAorICAgIHIyICY9IHI0OyBcCisgICAgcjIgXj0gcjM7IFwKKyAgICBcCisgICAgdyA9IHIwOyB4ID0gcjE7IHkgPSByNDsgeiA9IHIyOyBcCisgIH0KKworI2RlZmluZSBTQk9YNl9JTlZFUlNFKHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByMCBePSByMjsgcjQgPSAgcjI7IFwKKyAgICByMiAmPSByMDsgcjQgXj0gcjM7IFwKKyAgICByMiA9IH5yMjsgcjMgXj0gcjE7IFwKKyAgICByMiBePSByMzsgcjQgfD0gcjA7IFwKKyAgICByMCBePSByMjsgcjMgXj0gcjQ7IFwKKyAgICByNCBePSByMTsgcjEgJj0gcjM7IFwKKyAgICByMSBePSByMDsgcjAgXj0gcjM7IFwKKyAgICByMCB8PSByMjsgcjMgXj0gcjE7IFwKKyAgICByNCBePSByMDsgXAorICAgIFwKKyAgICB3ID0gcjE7IHggPSByMjsgeSA9IHI0OyB6ID0gcjM7IFwKKyAgfQorCisjZGVmaW5lIFNCT1g3KHIwLCByMSwgcjIsIHIzLCB3LCB4LCB5LCB6KSBcCisgIHsgXAorICAgIHUzMiByNDsgXAorICAgIFwKKyAgICByNCA9ICByMTsgcjEgfD0gcjI7IFwKKyAgICByMSBePSByMzsgcjQgXj0gcjI7IFwKKyAgICByMiBePSByMTsgcjMgfD0gcjQ7IFwKKyAgICByMyAmPSByMDsgcjQgXj0gcjI7IFwKKyAgICByMyBePSByMTsgcjEgfD0gcjQ7IFwKKyAgICByMSBePSByMDsgcjAgfD0gcjQ7IFwKKyAgICByMCBePSByMjsgcjEgXj0gcjQ7IFwKKyAgICByMiBePSByMTsgcjEgJj0gcjA7IFwKKyAgICByMSBePSByNDsgcjIgPSB+cjI7IFwKKyAgICByMiB8PSByMDsgXAorICAgIHI0IF49IHIyOyBcCisgICAgXAorICAgIHcgPSByNDsgeCA9IHIzOyB5ID0gcjE7IHogPSByMDsgXAorICB9CisKKyNkZWZpbmUgU0JPWDdfSU5WRVJTRShyMCwgcjEsIHIyLCByMywgdywgeCwgeSwgeikgXAorICB7IFwKKyAgICB1MzIgcjQ7IFwKKyAgICBcCisgICAgcjQgPSAgcjI7IHIyIF49IHIwOyBcCisgICAgcjAgJj0gcjM7IHI0IHw9IHIzOyBcCisgICAgcjIgPSB+cjI7IHIzIF49IHIxOyBcCisgICAgcjEgfD0gcjA7IHIwIF49IHIyOyBcCisgICAgcjIgJj0gcjQ7IHIzICY9IHI0OyBcCisgICAgcjEgXj0gcjI7IHIyIF49IHIwOyBcCisgICAgcjAgfD0gcjI7IHI0IF49IHIxOyBcCisgICAgcjAgXj0gcjM7IHIzIF49IHI0OyBcCisgICAgcjQgfD0gcjA7IHIzIF49IHIyOyBcCisgICAgcjQgXj0gcjI7IFwKKyAgICBcCisgICAgdyA9IHIzOyB4ID0gcjA7IHkgPSByMTsgeiA9IHI0OyBcCisgIH0KKworLyogWE9SIEJMT0NLMSBpbnRvIEJMT0NLMC4gICovCisjZGVmaW5lIEJMT0NLX1hPUihibG9jazAsIGJsb2NrMSkgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9jazBbMF0gXj0gYmxvY2sxWzBdOyAgICAgICBcCisgICAgYmxvY2swWzFdIF49IGJsb2NrMVsxXTsgICAgICAgXAorICAgIGJsb2NrMFsyXSBePSBibG9jazFbMl07ICAgICAgIFwKKyAgICBibG9jazBbM10gXj0gYmxvY2sxWzNdOyAgICAgICBcCisgIH0KKworLyogQ29weSBCTE9DS19TUkMgdG8gQkxPQ0tfRFNULiAgKi8KKyNkZWZpbmUgQkxPQ0tfQ09QWShibG9ja19kc3QsIGJsb2NrX3NyYykgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tfZHN0WzBdID0gYmxvY2tfc3JjWzBdOyAgICAgICAgIFwKKyAgICBibG9ja19kc3RbMV0gPSBibG9ja19zcmNbMV07ICAgICAgICAgXAorICAgIGJsb2NrX2RzdFsyXSA9IGJsb2NrX3NyY1syXTsgICAgICAgICBcCisgICAgYmxvY2tfZHN0WzNdID0gYmxvY2tfc3JjWzNdOyAgICAgICAgIFwKKyAgfQorCisvKiBBcHBseSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2sgZm91bmQgaW4gQVJSQVkwLCB3cml0aW5nCisgICB0aGUgb3V0cHV0IHRvIHRoZSBibG9jayBmb3VuZCBpbiBBUlJBWTEuICAqLworI2RlZmluZSBTQk9YKHdoaWNoLCBhcnJheTAsIGFycmF5MSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTQk9YIyN3aGljaCAoYXJyYXkwWzBdLCBhcnJheTBbMV0sIGFycmF5MFsyXSwgYXJyYXkwWzNdLCAgXAorICAgICAgICAgICAgICAgYXJyYXkxWzBdLCBhcnJheTFbMV0sIGFycmF5MVsyXSwgYXJyYXkxWzNdKTsKKworLyogQXBwbHkgaW52ZXJzZSBTQk9YIG51bWJlciBXSElDSCB0byB0byB0aGUgYmxvY2sgZm91bmQgaW4gQVJSQVkwLCB3cml0aW5nCisgICB0aGUgb3V0cHV0IHRvIHRoZSBibG9jayBmb3VuZCBpbiBBUlJBWTEuICAqLworI2RlZmluZSBTQk9YX0lOVkVSU0Uod2hpY2gsIGFycmF5MCwgYXJyYXkxKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0JPWCMjd2hpY2gjI19JTlZFUlNFIChhcnJheTBbMF0sIGFycmF5MFsxXSwgYXJyYXkwWzJdLCBhcnJheTBbM10sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkxWzBdLCBhcnJheTFbMV0sIGFycmF5MVsyXSwgYXJyYXkxWzNdKTsKKworLyogQXBwbHkgdGhlIGxpbmVhciB0cmFuc2Zvcm1hdGlvbiB0byBCTE9DSy4gICovCisjZGVmaW5lIExJTkVBUl9UUkFOU0ZPUk1BVElPTihibG9jaykgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbMF0gPSByb2wgKGJsb2NrWzBdLCAxMyk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbMl0gPSByb2wgKGJsb2NrWzJdLCAzKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbMV0gPSBibG9ja1sxXSBeIGJsb2NrWzBdIF4gYmxvY2tbMl07ICAgICAgICBcCisgICAgYmxvY2tbM10gPSBibG9ja1szXSBeIGJsb2NrWzJdIF4gKGJsb2NrWzBdIDw8IDMpOyBcCisgICAgYmxvY2tbMV0gPSByb2wgKGJsb2NrWzFdLCAxKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbM10gPSByb2wgKGJsb2NrWzNdLCA3KTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbMF0gPSBibG9ja1swXSBeIGJsb2NrWzFdIF4gYmxvY2tbM107ICAgICAgICBcCisgICAgYmxvY2tbMl0gPSBibG9ja1syXSBeIGJsb2NrWzNdIF4gKGJsb2NrWzFdIDw8IDcpOyBcCisgICAgYmxvY2tbMF0gPSByb2wgKGJsb2NrWzBdLCA1KTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxvY2tbMl0gPSByb2wgKGJsb2NrWzJdLCAyMik7ICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworLyogQXBwbHkgdGhlIGludmVyc2UgbGluZWFyIHRyYW5zZm9ybWF0aW9uIHRvIEJMT0NLLiAgKi8KKyNkZWZpbmUgTElORUFSX1RSQU5TRk9STUFUSU9OX0lOVkVSU0UoYmxvY2spICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1syXSA9IHJvciAoYmxvY2tbMl0sIDIyKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1swXSA9IHJvciAoYmxvY2tbMF0gLCA1KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1syXSA9IGJsb2NrWzJdIF4gYmxvY2tbM10gXiAoYmxvY2tbMV0gPDwgNyk7IFwKKyAgICBibG9ja1swXSA9IGJsb2NrWzBdIF4gYmxvY2tbMV0gXiBibG9ja1szXTsgICAgICAgIFwKKyAgICBibG9ja1szXSA9IHJvciAoYmxvY2tbM10sIDcpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1sxXSA9IHJvciAoYmxvY2tbMV0sIDEpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1szXSA9IGJsb2NrWzNdIF4gYmxvY2tbMl0gXiAoYmxvY2tbMF0gPDwgMyk7IFwKKyAgICBibG9ja1sxXSA9IGJsb2NrWzFdIF4gYmxvY2tbMF0gXiBibG9ja1syXTsgICAgICAgIFwKKyAgICBibG9ja1syXSA9IHJvciAoYmxvY2tbMl0sIDMpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibG9ja1swXSA9IHJvciAoYmxvY2tbMF0sIDEzKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisvKiBBcHBseSBhIFNlcnBlbnQgcm91bmQgdG8gQkxPQ0ssIHVzaW5nIHRoZSBTQk9YIG51bWJlciBXSElDSCBhbmQgdGhlCisgICBzdWJrZXlzIGNvbnRhaW5lZCBpbiBTVUJLRVlTLiAgVXNlIEJMT0NLX1RNUCBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KKyAgIFRoaXMgbWFjcm8gaW5jcmVtZW50cyBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkQod2hpY2gsIHN1YmtleXMsIGJsb2NrLCBibG9ja190bXApIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCTE9DS19YT1IgKGJsb2NrLCBzdWJrZXlzW3JvdW5kXSk7ICAgICAgICAgIFwKKyAgICByb3VuZCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBTQk9YICh3aGljaCwgYmxvY2ssIGJsb2NrX3RtcCk7ICAgICAgICAgICAgIFwKKyAgICBMSU5FQVJfVFJBTlNGT1JNQVRJT04gKGJsb2NrX3RtcCk7ICAgICAgICAgIFwKKyAgICBCTE9DS19DT1BZIChibG9jaywgYmxvY2tfdG1wKTsgICAgICAgICAgICAgIFwKKyAgfQorCisvKiBBcHBseSB0aGUgbGFzdCBTZXJwZW50IHJvdW5kIHRvIEJMT0NLLCB1c2luZyB0aGUgU0JPWCBudW1iZXIgV0hJQ0gKKyAgIGFuZCB0aGUgc3Via2V5cyBjb250YWluZWQgaW4gU1VCS0VZUy4gIFVzZSBCTE9DS19UTVAgYXMgdGVtcG9yYXJ5CisgICBzdG9yYWdlLiAgVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpbiBCTE9DS19UTVAuICBUaGlzIG1hY3JvCisgICBpbmNyZW1lbnRzIGByb3VuZCcuICAqLworI2RlZmluZSBST1VORF9MQVNUKHdoaWNoLCBzdWJrZXlzLCBibG9jaywgYmxvY2tfdG1wKSBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCTE9DS19YT1IgKGJsb2NrLCBzdWJrZXlzW3JvdW5kXSk7ICAgICAgICAgICAgICAgXAorICAgIHJvdW5kKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU0JPWCAod2hpY2gsIGJsb2NrLCBibG9ja190bXApOyAgICAgICAgICAgICAgICAgIFwKKyAgICBCTE9DS19YT1IgKGJsb2NrX3RtcCwgc3Via2V5c1tyb3VuZF0pOyAgICAgICAgICAgXAorICAgIHJvdW5kKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworLyogQXBwbHkgYW4gaW52ZXJzZSBTZXJwZW50IHJvdW5kIHRvIEJMT0NLLCB1c2luZyB0aGUgU0JPWCBudW1iZXIKKyAgIFdISUNIIGFuZCB0aGUgc3Via2V5cyBjb250YWluZWQgaW4gU1VCS0VZUy4gIFVzZSBCTE9DS19UTVAgYXMKKyAgIHRlbXBvcmFyeSBzdG9yYWdlLiAgVGhpcyBtYWNybyBpbmNyZW1lbnRzIGByb3VuZCcuICAqLworI2RlZmluZSBST1VORF9JTlZFUlNFKHdoaWNoLCBzdWJrZXksIGJsb2NrLCBibG9ja190bXApIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTElORUFSX1RSQU5TRk9STUFUSU9OX0lOVkVSU0UgKGJsb2NrKTsgICAgICAgICAgICAgXAorICAgIFNCT1hfSU5WRVJTRSAod2hpY2gsIGJsb2NrLCBibG9ja190bXApOyAgICAgICAgICAgIFwKKyAgICBCTE9DS19YT1IgKGJsb2NrX3RtcCwgc3Via2V5W3JvdW5kXSk7ICAgICAgICAgICAgICBcCisgICAgcm91bmQtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEJMT0NLX0NPUFkgKGJsb2NrLCBibG9ja190bXApOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisvKiBBcHBseSB0aGUgZmlyc3QgU2VycGVudCByb3VuZCB0byBCTE9DSywgdXNpbmcgdGhlIFNCT1ggbnVtYmVyIFdISUNICisgICBhbmQgdGhlIHN1YmtleXMgY29udGFpbmVkIGluIFNVQktFWVMuICBVc2UgQkxPQ0tfVE1QIGFzIHRlbXBvcmFyeQorICAgc3RvcmFnZS4gIFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gQkxPQ0tfVE1QLiAgVGhpcyBtYWNybworICAgaW5jcmVtZW50cyBgcm91bmQnLiAgKi8KKyNkZWZpbmUgUk9VTkRfRklSU1RfSU5WRVJTRSh3aGljaCwgc3Via2V5cywgYmxvY2ssIGJsb2NrX3RtcCkgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQkxPQ0tfWE9SIChibG9jaywgc3Via2V5c1tyb3VuZF0pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb3VuZC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFNCT1hfSU5WRVJTRSAod2hpY2gsIGJsb2NrLCBibG9ja190bXApOyAgICAgICAgICAgICAgICAgICBcCisgICAgQkxPQ0tfWE9SIChibG9ja190bXAsIHN1YmtleXNbcm91bmRdKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb3VuZC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKy8qIENvbnZlcnQgdGhlIHVzZXIgcHJvdmlkZWQga2V5IEtFWSBvZiBLRVlfTEVOR1RIIGJ5dGVzIGludG8gdGhlCisgICBpbnRlcm5hbGx5IHVzZWQgZm9ybWF0LiAgKi8KK3N0YXRpYyB2b2lkCitzZXJwZW50X2tleV9wcmVwYXJlIChjb25zdCBieXRlICprZXksIHVuc2lnbmVkIGludCBrZXlfbGVuZ3RoLAorCQkgICAgIHNlcnBlbnRfa2V5X3Qga2V5X3ByZXBhcmVkKQoreworICBpbnQgaTsKKworICAvKiBDb3B5IGtleS4gICovCisgIGtleV9sZW5ndGggLz0gNDsKKyAgZm9yIChpID0gMDsgaSA8IGtleV9sZW5ndGg7IGkrKykKKyAgICBrZXlfcHJlcGFyZWRbaV0gPSBidWZfZ2V0X2xlMzIgKGtleSArIGkgKiA0KTsKKworICBpZiAoaSA8IDgpCisgICAgeworICAgICAgLyogS2V5IG11c3QgYmUgcGFkZGVkIGFjY29yZGluZyB0byB0aGUgU2VycGVudAorCSBzcGVjaWZpY2F0aW9uLiAgKi8KKyAgICAgIGtleV9wcmVwYXJlZFtpXSA9IDB4MDAwMDAwMDE7CisKKyAgICAgIGZvciAoaSsrOyBpIDwgODsgaSsrKQorCWtleV9wcmVwYXJlZFtpXSA9IDA7CisgICAgfQorfQorCisvKiBEZXJpdmUgdGhlIDMzIHN1YmtleXMgZnJvbSBLRVkgYW5kIHN0b3JlIHRoZW0gaW4gU1VCS0VZUy4gICovCitzdGF0aWMgdm9pZAorc2VycGVudF9zdWJrZXlzX2dlbmVyYXRlIChzZXJwZW50X2tleV90IGtleSwgc2VycGVudF9zdWJrZXlzX3Qgc3Via2V5cykKK3sKKyAgdTMyIHdbOF07CQkvKiBUaGUgYHByZWtleScuICAqLworICB1MzIgd3NbNF07CisgIHUzMiB3dFs0XTsKKworICAvKiBJbml0aWFsaXplIHdpdGgga2V5IHZhbHVlcy4gICovCisgIHdbMF0gPSBrZXlbMF07CisgIHdbMV0gPSBrZXlbMV07CisgIHdbMl0gPSBrZXlbMl07CisgIHdbM10gPSBrZXlbM107CisgIHdbNF0gPSBrZXlbNF07CisgIHdbNV0gPSBrZXlbNV07CisgIHdbNl0gPSBrZXlbNl07CisgIHdbN10gPSBrZXlbN107CisKKyAgLyogRXhwYW5kIHRvIGludGVybWVkaWF0ZSBrZXkgdXNpbmcgdGhlIGFmZmluZSByZWN1cnJlbmNlLiAgKi8KKyNkZWZpbmUgRVhQQU5EX0tFWTQod28sIHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdvWzBdID0gd1sociswKSU4XSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvbCAod1sociswKSU4XSBeIHdbKHIrMyklOF0gXiB3WyhyKzUpJThdIF4gd1socis3KSU4XSBeIFBISSBeIChyKzApLCAxMSk7IFwKKyAgd29bMV0gPSB3WyhyKzEpJThdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcm9sICh3WyhyKzEpJThdIF4gd1socis0KSU4XSBeIHdbKHIrNiklOF0gXiB3WyhyKzApJThdIF4gUEhJIF4gKHIrMSksIDExKTsgXAorICB3b1syXSA9IHdbKHIrMiklOF0gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb2wgKHdbKHIrMiklOF0gXiB3WyhyKzUpJThdIF4gd1socis3KSU4XSBeIHdbKHIrMSklOF0gXiBQSEkgXiAocisyKSwgMTEpOyBcCisgIHdvWzNdID0gd1sociszKSU4XSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvbCAod1sociszKSU4XSBeIHdbKHIrNiklOF0gXiB3WyhyKzApJThdIF4gd1socisyKSU4XSBeIFBISSBeIChyKzMpLCAxMSk7CisKKyNkZWZpbmUgRVhQQU5EX0tFWShyKSAgICAgICBcCisgIEVYUEFORF9LRVk0KHdzLCAocikpOyAgICAgXAorICBFWFBBTkRfS0VZNCh3dCwgKHIgKyA0KSk7CisKKyAgLyogQ2FsY3VsYXRlIHN1YmtleXMgdmlhIFMtQm94ZXMsIGluIGJpdHNsaWNlIG1vZGUuICAqLworICBFWFBBTkRfS0VZICgwKTsgU0JPWCAoMywgd3MsIHN1YmtleXNbMF0pOyBTQk9YICgyLCB3dCwgc3Via2V5c1sxXSk7CisgIEVYUEFORF9LRVkgKDgpOyBTQk9YICgxLCB3cywgc3Via2V5c1syXSk7IFNCT1ggKDAsIHd0LCBzdWJrZXlzWzNdKTsKKyAgRVhQQU5EX0tFWSAoMTYpOyBTQk9YICg3LCB3cywgc3Via2V5c1s0XSk7IFNCT1ggKDYsIHd0LCBzdWJrZXlzWzVdKTsKKyAgRVhQQU5EX0tFWSAoMjQpOyBTQk9YICg1LCB3cywgc3Via2V5c1s2XSk7IFNCT1ggKDQsIHd0LCBzdWJrZXlzWzddKTsKKyAgRVhQQU5EX0tFWSAoMzIpOyBTQk9YICgzLCB3cywgc3Via2V5c1s4XSk7IFNCT1ggKDIsIHd0LCBzdWJrZXlzWzldKTsKKyAgRVhQQU5EX0tFWSAoNDApOyBTQk9YICgxLCB3cywgc3Via2V5c1sxMF0pOyBTQk9YICgwLCB3dCwgc3Via2V5c1sxMV0pOworICBFWFBBTkRfS0VZICg0OCk7IFNCT1ggKDcsIHdzLCBzdWJrZXlzWzEyXSk7IFNCT1ggKDYsIHd0LCBzdWJrZXlzWzEzXSk7CisgIEVYUEFORF9LRVkgKDU2KTsgU0JPWCAoNSwgd3MsIHN1YmtleXNbMTRdKTsgU0JPWCAoNCwgd3QsIHN1YmtleXNbMTVdKTsKKyAgRVhQQU5EX0tFWSAoNjQpOyBTQk9YICgzLCB3cywgc3Via2V5c1sxNl0pOyBTQk9YICgyLCB3dCwgc3Via2V5c1sxN10pOworICBFWFBBTkRfS0VZICg3Mik7IFNCT1ggKDEsIHdzLCBzdWJrZXlzWzE4XSk7IFNCT1ggKDAsIHd0LCBzdWJrZXlzWzE5XSk7CisgIEVYUEFORF9LRVkgKDgwKTsgU0JPWCAoNywgd3MsIHN1YmtleXNbMjBdKTsgU0JPWCAoNiwgd3QsIHN1YmtleXNbMjFdKTsKKyAgRVhQQU5EX0tFWSAoODgpOyBTQk9YICg1LCB3cywgc3Via2V5c1syMl0pOyBTQk9YICg0LCB3dCwgc3Via2V5c1syM10pOworICBFWFBBTkRfS0VZICg5Nik7IFNCT1ggKDMsIHdzLCBzdWJrZXlzWzI0XSk7IFNCT1ggKDIsIHd0LCBzdWJrZXlzWzI1XSk7CisgIEVYUEFORF9LRVkgKDEwNCk7IFNCT1ggKDEsIHdzLCBzdWJrZXlzWzI2XSk7IFNCT1ggKDAsIHd0LCBzdWJrZXlzWzI3XSk7CisgIEVYUEFORF9LRVkgKDExMik7IFNCT1ggKDcsIHdzLCBzdWJrZXlzWzI4XSk7IFNCT1ggKDYsIHd0LCBzdWJrZXlzWzI5XSk7CisgIEVYUEFORF9LRVkgKDEyMCk7IFNCT1ggKDUsIHdzLCBzdWJrZXlzWzMwXSk7IFNCT1ggKDQsIHd0LCBzdWJrZXlzWzMxXSk7CisgIEVYUEFORF9LRVk0ICh3cywgMTI4KTsgU0JPWCAoMywgd3MsIHN1YmtleXNbMzJdKTsKKworICB3aXBlbWVtb3J5ICh3cywgc2l6ZW9mICh3cykpOworICB3aXBlbWVtb3J5ICh3dCwgc2l6ZW9mICh3dCkpOworICB3aXBlbWVtb3J5ICh3LCBzaXplb2YgKHcpKTsKK30KKworLyogSW5pdGlhbGl6ZSBDT05URVhUIHdpdGggdGhlIGtleSBLRVkgb2YgS0VZX0xFTkdUSCBiaXRzLiAgKi8KK3N0YXRpYyB2b2lkCitzZXJwZW50X3NldGtleV9pbnRlcm5hbCAoc2VycGVudF9jb250ZXh0X3QgKmNvbnRleHQsCisJCQkgY29uc3QgYnl0ZSAqa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbmd0aCkKK3sKKyAgc2VycGVudF9rZXlfdCBrZXlfcHJlcGFyZWQ7CisKKyAgc2VycGVudF9rZXlfcHJlcGFyZSAoa2V5LCBrZXlfbGVuZ3RoLCBrZXlfcHJlcGFyZWQpOworICBzZXJwZW50X3N1YmtleXNfZ2VuZXJhdGUgKGtleV9wcmVwYXJlZCwgY29udGV4dC0+a2V5cyk7CisKKyNpZmRlZiBVU0VfQVZYMgorICBjb250ZXh0LT51c2VfYXZ4MiA9IDA7CisgIGlmICgoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX0lOVEVMX0FWWDIpKQorICAgIHsKKyAgICAgIGNvbnRleHQtPnVzZV9hdngyID0gMTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9ORU9OCisgIGNvbnRleHQtPnVzZV9uZW9uID0gMDsKKyAgaWYgKChfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCkgJiBIV0ZfQVJNX05FT04pKQorICAgIHsKKyAgICAgIGNvbnRleHQtPnVzZV9uZW9uID0gMTsKKyAgICB9CisjZW5kaWYKKworICB3aXBlbWVtb3J5IChrZXlfcHJlcGFyZWQsIHNpemVvZihrZXlfcHJlcGFyZWQpKTsKK30KKworLyogSW5pdGlhbGl6ZSBDVFggd2l0aCB0aGUga2V5IEtFWSBvZiBLRVlfTEVOR1RIIGJ5dGVzLiAgKi8KK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK3NlcnBlbnRfc2V0a2V5ICh2b2lkICpjdHgsCisJCWNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQgaW50IGtleV9sZW5ndGgpCit7CisgIHNlcnBlbnRfY29udGV4dF90ICpjb250ZXh0ID0gY3R4OworICBzdGF0aWMgY29uc3QgY2hhciAqc2VycGVudF90ZXN0X3JldDsKKyAgc3RhdGljIGludCBzZXJwZW50X2luaXRfZG9uZTsKKyAgZ2NyeV9lcnJfY29kZV90IHJldCA9IEdQR19FUlJfTk9fRVJST1I7CisKKyAgaWYgKCEgc2VycGVudF9pbml0X2RvbmUpCisgICAgeworICAgICAgLyogRXhlY3V0ZSBhIHNlbGYtdGVzdCB0aGUgZmlyc3QgdGltZSwgU2VycGVudCBpcyB1c2VkLiAgKi8KKyAgICAgIHNlcnBlbnRfaW5pdF9kb25lID0gMTsKKyAgICAgIHNlcnBlbnRfdGVzdF9yZXQgPSBzZXJwZW50X3Rlc3QgKCk7CisgICAgICBpZiAoc2VycGVudF90ZXN0X3JldCkKKwlsb2dfZXJyb3IgKCJTZXJwZW50IHRlc3QgZmFpbHVyZTogJXNcbiIsIHNlcnBlbnRfdGVzdF9yZXQpOworICAgIH0KKworICBpZiAoc2VycGVudF90ZXN0X3JldCkKKyAgICByZXQgPSBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKyAgZWxzZQorICAgIHNlcnBlbnRfc2V0a2V5X2ludGVybmFsIChjb250ZXh0LCBrZXksIGtleV9sZW5ndGgpOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJwZW50X2VuY3J5cHRfaW50ZXJuYWwgKHNlcnBlbnRfY29udGV4dF90ICpjb250ZXh0LAorCQkJICBjb25zdCBieXRlICppbnB1dCwgYnl0ZSAqb3V0cHV0KQoreworICBzZXJwZW50X2Jsb2NrX3QgYiwgYl9uZXh0OworICBpbnQgcm91bmQgPSAwOworCisgIGJbMF0gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgMCk7CisgIGJbMV0gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgNCk7CisgIGJbMl0gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgOCk7CisgIGJbM10gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgMTIpOworCisgIFJPVU5EICgwLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDIsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICgzLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDUsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICg2LCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoNywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDAsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICgxLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoMiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDMsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICg0LCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoNSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDYsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICg3LCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoMCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDEsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICgyLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoMywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDQsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICg1LCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoNiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDcsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICgwLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDIsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICgzLCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworICBST1VORCAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkQgKDUsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisgIFJPVU5EICg2LCBjb250ZXh0LT5rZXlzLCBiLCBiX25leHQpOworCisgIFJPVU5EX0xBU1QgKDcsIGNvbnRleHQtPmtleXMsIGIsIGJfbmV4dCk7CisKKyAgYnVmX3B1dF9sZTMyIChvdXRwdXQgKyAwLCBiX25leHRbMF0pOworICBidWZfcHV0X2xlMzIgKG91dHB1dCArIDQsIGJfbmV4dFsxXSk7CisgIGJ1Zl9wdXRfbGUzMiAob3V0cHV0ICsgOCwgYl9uZXh0WzJdKTsKKyAgYnVmX3B1dF9sZTMyIChvdXRwdXQgKyAxMiwgYl9uZXh0WzNdKTsKK30KKworc3RhdGljIHZvaWQKK3NlcnBlbnRfZGVjcnlwdF9pbnRlcm5hbCAoc2VycGVudF9jb250ZXh0X3QgKmNvbnRleHQsCisJCQkgIGNvbnN0IGJ5dGUgKmlucHV0LCBieXRlICpvdXRwdXQpCit7CisgIHNlcnBlbnRfYmxvY2tfdCBiLCBiX25leHQ7CisgIGludCByb3VuZCA9IFJPVU5EUzsKKworICBiX25leHRbMF0gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgMCk7CisgIGJfbmV4dFsxXSA9IGJ1Zl9nZXRfbGUzMiAoaW5wdXQgKyA0KTsKKyAgYl9uZXh0WzJdID0gYnVmX2dldF9sZTMyIChpbnB1dCArIDgpOworICBiX25leHRbM10gPSBidWZfZ2V0X2xlMzIgKGlucHV0ICsgMTIpOworCisgIFJPVU5EX0ZJUlNUX0lOVkVSU0UgKDcsIGNvbnRleHQtPmtleXMsIGJfbmV4dCwgYik7CisKKyAgUk9VTkRfSU5WRVJTRSAoNiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoNCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMywgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMiwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMSwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKyAgUk9VTkRfSU5WRVJTRSAoMCwgY29udGV4dC0+a2V5cywgYiwgYl9uZXh0KTsKKworICBidWZfcHV0X2xlMzIgKG91dHB1dCArIDAsIGJfbmV4dFswXSk7CisgIGJ1Zl9wdXRfbGUzMiAob3V0cHV0ICsgNCwgYl9uZXh0WzFdKTsKKyAgYnVmX3B1dF9sZTMyIChvdXRwdXQgKyA4LCBiX25leHRbMl0pOworICBidWZfcHV0X2xlMzIgKG91dHB1dCArIDEyLCBiX25leHRbM10pOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitzZXJwZW50X2VuY3J5cHQgKHZvaWQgKmN0eCwgYnl0ZSAqYnVmZmVyX291dCwgY29uc3QgYnl0ZSAqYnVmZmVyX2luKQoreworICBzZXJwZW50X2NvbnRleHRfdCAqY29udGV4dCA9IGN0eDsKKworICBzZXJwZW50X2VuY3J5cHRfaW50ZXJuYWwgKGNvbnRleHQsIGJ1ZmZlcl9pbiwgYnVmZmVyX291dCk7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMiAqIHNpemVvZiAoc2VycGVudF9ibG9ja190KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NlcnBlbnRfZGVjcnlwdCAodm9pZCAqY3R4LCBieXRlICpidWZmZXJfb3V0LCBjb25zdCBieXRlICpidWZmZXJfaW4pCit7CisgIHNlcnBlbnRfY29udGV4dF90ICpjb250ZXh0ID0gY3R4OworCisgIHNlcnBlbnRfZGVjcnlwdF9pbnRlcm5hbCAoY29udGV4dCwgYnVmZmVyX2luLCBidWZmZXJfb3V0KTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgyICogc2l6ZW9mIChzZXJwZW50X2Jsb2NrX3QpKTsKK30KKworDAorCisvKiBCdWxrIGVuY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENUUiBtb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mIGNpcGhlci5jLiAgQ1RSIGlzIGV4cGVjdGVkIHRvIGJlCisgICBvZiBzaXplIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpLiAqLwordm9pZAorX2djcnlfc2VycGVudF9jdHJfZW5jKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpCit7CisgIHNlcnBlbnRfY29udGV4dF90ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciB0bXBidWZbc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCldOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9IDIgKiBzaXplb2YgKHNlcnBlbnRfYmxvY2tfdCk7CisgIGludCBpOworCisjaWZkZWYgVVNFX0FWWDIKKyAgaWYgKGN0eC0+dXNlX2F2eDIpCisgICAgeworICAgICAgaW50IGRpZF91c2VfYXZ4MiA9IDA7CisKKyAgICAgIC8qIFByb2Nlc3MgZGF0YSBpbiAxNiBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSAxNikKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X3NlcnBlbnRfYXZ4Ml9jdHJfZW5jKGN0eCwgb3V0YnVmLCBpbmJ1ZiwgY3RyKTsKKworICAgICAgICAgIG5ibG9ja3MgLT0gMTY7CisgICAgICAgICAgb3V0YnVmICs9IDE2ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgaW5idWYgICs9IDE2ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgZGlkX3VzZV9hdngyID0gMTsKKyAgICAgICAgfQorCisgICAgICBpZiAoZGlkX3VzZV9hdngyKQorICAgICAgICB7CisgICAgICAgICAgLyogc2VycGVudC1hdngyIGFzc2VtYmx5IGNvZGUgZG9lcyBub3QgdXNlIHN0YWNrICovCisgICAgICAgICAgaWYgKG5ibG9ja3MgPT0gMCkKKyAgICAgICAgICAgIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljL3NzZTIgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgICAgIC8qIFRPRE86IHVzZSBjYWNoaW5nIGluc3RlYWQ/ICovCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfU1NFMgorICB7CisgICAgaW50IGRpZF91c2Vfc3NlMiA9IDA7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgaW4gOCBibG9jayBjaHVua3MuICovCisgICAgd2hpbGUgKG5ibG9ja3MgPj0gOCkKKyAgICAgIHsKKyAgICAgICAgX2djcnlfc2VycGVudF9zc2UyX2N0cl9lbmMoY3R4LCBvdXRidWYsIGluYnVmLCBjdHIpOworCisgICAgICAgIG5ibG9ja3MgLT0gODsKKyAgICAgICAgb3V0YnVmICs9IDggKiBzaXplb2Yoc2VycGVudF9ibG9ja190KTsKKyAgICAgICAgaW5idWYgICs9IDggKiBzaXplb2Yoc2VycGVudF9ibG9ja190KTsKKyAgICAgICAgZGlkX3VzZV9zc2UyID0gMTsKKyAgICAgIH0KKworICAgIGlmIChkaWRfdXNlX3NzZTIpCisgICAgICB7CisgICAgICAgIC8qIHNlcnBlbnQtc3NlMiBhc3NlbWJseSBjb2RlIGRvZXMgbm90IHVzZSBzdGFjayAqLworICAgICAgICBpZiAobmJsb2NrcyA9PSAwKQorICAgICAgICAgIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworICAgICAgfQorCisgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgICAvKiBUT0RPOiB1c2UgY2FjaGluZyBpbnN0ZWFkPyAqLworICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9ORU9OCisgIGlmIChjdHgtPnVzZV9uZW9uKQorICAgIHsKKyAgICAgIGludCBkaWRfdXNlX25lb24gPSAwOworCisgICAgICAvKiBQcm9jZXNzIGRhdGEgaW4gOCBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSA4KQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfc2VycGVudF9uZW9uX2N0cl9lbmMoY3R4LCBvdXRidWYsIGluYnVmLCBjdHIpOworCisgICAgICAgICAgbmJsb2NrcyAtPSA4OworICAgICAgICAgIG91dGJ1ZiArPSA4ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgaW5idWYgICs9IDggKiBzaXplb2Yoc2VycGVudF9ibG9ja190KTsKKyAgICAgICAgICBkaWRfdXNlX25lb24gPSAxOworICAgICAgICB9CisKKyAgICAgIGlmIChkaWRfdXNlX25lb24pCisgICAgICAgIHsKKyAgICAgICAgICAvKiBzZXJwZW50LW5lb24gYXNzZW1ibHkgY29kZSBkb2VzIG5vdCB1c2Ugc3RhY2sgKi8KKyAgICAgICAgICBpZiAobmJsb2NrcyA9PSAwKQorICAgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IDA7CisgICAgICAgIH0KKworICAgICAgLyogVXNlIGdlbmVyaWMgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgICAgIC8qIFRPRE86IHVzZSBjYWNoaW5nIGluc3RlYWQ/ICovCisgICAgfQorI2VuZGlmCisKKyAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgeworICAgICAgLyogRW5jcnlwdCB0aGUgY291bnRlci4gKi8KKyAgICAgIHNlcnBlbnRfZW5jcnlwdF9pbnRlcm5hbChjdHgsIGN0ciwgdG1wYnVmKTsKKyAgICAgIC8qIFhPUiB0aGUgaW5wdXQgd2l0aCB0aGUgZW5jcnlwdGVkIGNvdW50ZXIgYW5kIHN0b3JlIGluIG91dHB1dC4gICovCisgICAgICBidWZfeG9yKG91dGJ1ZiwgdG1wYnVmLCBpbmJ1Ziwgc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCkpOworICAgICAgb3V0YnVmICs9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgaW5idWYgICs9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgLyogSW5jcmVtZW50IHRoZSBjb3VudGVyLiAgKi8KKyAgICAgIGZvciAoaSA9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOyBpID4gMDsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgY3RyW2ktMV0rKzsKKyAgICAgICAgICBpZiAoY3RyW2ktMV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICB3aXBlbWVtb3J5KHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZikpOworICBfZ2NyeV9idXJuX3N0YWNrKGJ1cm5fc3RhY2tfZGVwdGgpOworfQorCisvKiBCdWxrIGRlY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENCQyBtb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mIGNpcGhlci5jLiAqLwordm9pZAorX2djcnlfc2VycGVudF9jYmNfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2NrcykKK3sKKyAgc2VycGVudF9jb250ZXh0X3QgKmN0eCA9IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZiA9IG91dGJ1Zl9hcmc7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmID0gaW5idWZfYXJnOworICB1bnNpZ25lZCBjaGFyIHNhdmVidWZbc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCldOworICBpbnQgYnVybl9zdGFja19kZXB0aCA9IDIgKiBzaXplb2YgKHNlcnBlbnRfYmxvY2tfdCk7CisKKyNpZmRlZiBVU0VfQVZYMgorICBpZiAoY3R4LT51c2VfYXZ4MikKKyAgICB7CisgICAgICBpbnQgZGlkX3VzZV9hdngyID0gMDsKKworICAgICAgLyogUHJvY2VzcyBkYXRhIGluIDE2IGJsb2NrIGNodW5rcy4gKi8KKyAgICAgIHdoaWxlIChuYmxvY2tzID49IDE2KQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfc2VycGVudF9hdngyX2NiY19kZWMoY3R4LCBvdXRidWYsIGluYnVmLCBpdik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDE2OworICAgICAgICAgIG91dGJ1ZiArPSAxNiAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICAgIGluYnVmICArPSAxNiAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICAgIGRpZF91c2VfYXZ4MiA9IDE7CisgICAgICAgIH0KKworICAgICAgaWYgKGRpZF91c2VfYXZ4MikKKyAgICAgICAgeworICAgICAgICAgIC8qIHNlcnBlbnQtYXZ4MiBhc3NlbWJseSBjb2RlIGRvZXMgbm90IHVzZSBzdGFjayAqLworICAgICAgICAgIGlmIChuYmxvY2tzID09IDApCisgICAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gMDsKKyAgICAgICAgfQorCisgICAgICAvKiBVc2UgZ2VuZXJpYy9zc2UyIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfU1NFMgorICB7CisgICAgaW50IGRpZF91c2Vfc3NlMiA9IDA7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgaW4gOCBibG9jayBjaHVua3MuICovCisgICAgd2hpbGUgKG5ibG9ja3MgPj0gOCkKKyAgICAgIHsKKyAgICAgICAgX2djcnlfc2VycGVudF9zc2UyX2NiY19kZWMoY3R4LCBvdXRidWYsIGluYnVmLCBpdik7CisKKyAgICAgICAgbmJsb2NrcyAtPSA4OworICAgICAgICBvdXRidWYgKz0gOCAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICBpbmJ1ZiAgKz0gOCAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICBkaWRfdXNlX3NzZTIgPSAxOworICAgICAgfQorCisgICAgaWYgKGRpZF91c2Vfc3NlMikKKyAgICAgIHsKKyAgICAgICAgLyogc2VycGVudC1zc2UyIGFzc2VtYmx5IGNvZGUgZG9lcyBub3QgdXNlIHN0YWNrICovCisgICAgICAgIGlmIChuYmxvY2tzID09IDApCisgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IDA7CisgICAgICB9CisKKyAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9ORU9OCisgIGlmIChjdHgtPnVzZV9uZW9uKQorICAgIHsKKyAgICAgIGludCBkaWRfdXNlX25lb24gPSAwOworCisgICAgICAvKiBQcm9jZXNzIGRhdGEgaW4gOCBibG9jayBjaHVua3MuICovCisgICAgICB3aGlsZSAobmJsb2NrcyA+PSA4KQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfc2VycGVudF9uZW9uX2NiY19kZWMoY3R4LCBvdXRidWYsIGluYnVmLCBpdik7CisKKyAgICAgICAgICBuYmxvY2tzIC09IDg7CisgICAgICAgICAgb3V0YnVmICs9IDggKiBzaXplb2Yoc2VycGVudF9ibG9ja190KTsKKyAgICAgICAgICBpbmJ1ZiAgKz0gOCAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICAgIGRpZF91c2VfbmVvbiA9IDE7CisgICAgICAgIH0KKworICAgICAgaWYgKGRpZF91c2VfbmVvbikKKyAgICAgICAgeworICAgICAgICAgIC8qIHNlcnBlbnQtbmVvbiBhc3NlbWJseSBjb2RlIGRvZXMgbm90IHVzZSBzdGFjayAqLworICAgICAgICAgIGlmIChuYmxvY2tzID09IDApCisgICAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gMDsKKyAgICAgICAgfQorCisgICAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIElOQlVGIGlzIG5lZWRlZCBsYXRlciBhbmQgaXQgbWF5IGJlIGlkZW50aWNhbCB0byBPVVRCVUYsIHNvIHN0b3JlCisgICAgICAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCB0byBTQVZFQlVGLiAgKi8KKyAgICAgIHNlcnBlbnRfZGVjcnlwdF9pbnRlcm5hbCAoY3R4LCBpbmJ1Ziwgc2F2ZWJ1Zik7CisKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5XzIob3V0YnVmLCBzYXZlYnVmLCBpdiwgaW5idWYsIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpKTsKKyAgICAgIGluYnVmICs9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgb3V0YnVmICs9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgIH0KKworICB3aXBlbWVtb3J5KHNhdmVidWYsIHNpemVvZihzYXZlYnVmKSk7CisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKy8qIEJ1bGsgZGVjcnlwdGlvbiBvZiBjb21wbGV0ZSBibG9ja3MgaW4gQ0ZCIG1vZGUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAgIGludGVuZGVkIGZvciB0aGUgYnVsayBlbmNyeXB0aW9uIGZlYXR1cmUgb2YgY2lwaGVyLmMuICovCit2b2lkCitfZ2NyeV9zZXJwZW50X2NmYl9kZWModm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKQoreworICBzZXJwZW50X2NvbnRleHRfdCAqY3R4ID0gY29udGV4dDsKKyAgdW5zaWduZWQgY2hhciAqb3V0YnVmID0gb3V0YnVmX2FyZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBpbmJ1Zl9hcmc7CisgIGludCBidXJuX3N0YWNrX2RlcHRoID0gMiAqIHNpemVvZiAoc2VycGVudF9ibG9ja190KTsKKworI2lmZGVmIFVTRV9BVlgyCisgIGlmIChjdHgtPnVzZV9hdngyKQorICAgIHsKKyAgICAgIGludCBkaWRfdXNlX2F2eDIgPSAwOworCisgICAgICAvKiBQcm9jZXNzIGRhdGEgaW4gMTYgYmxvY2sgY2h1bmtzLiAqLworICAgICAgd2hpbGUgKG5ibG9ja3MgPj0gMTYpCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9zZXJwZW50X2F2eDJfY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICAgIG5ibG9ja3MgLT0gMTY7CisgICAgICAgICAgb3V0YnVmICs9IDE2ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgaW5idWYgICs9IDE2ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgZGlkX3VzZV9hdngyID0gMTsKKyAgICAgICAgfQorCisgICAgICBpZiAoZGlkX3VzZV9hdngyKQorICAgICAgICB7CisgICAgICAgICAgLyogc2VycGVudC1hdngyIGFzc2VtYmx5IGNvZGUgZG9lcyBub3QgdXNlIHN0YWNrICovCisgICAgICAgICAgaWYgKG5ibG9ja3MgPT0gMCkKKyAgICAgICAgICAgIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljL3NzZTIgY29kZSB0byBoYW5kbGUgc21hbGxlciBjaHVua3MuLi4gKi8KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9TU0UyCisgIHsKKyAgICBpbnQgZGlkX3VzZV9zc2UyID0gMDsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA4IGJsb2NrIGNodW5rcy4gKi8KKyAgICB3aGlsZSAobmJsb2NrcyA+PSA4KQorICAgICAgeworICAgICAgICBfZ2NyeV9zZXJwZW50X3NzZTJfY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDg7CisgICAgICAgIG91dGJ1ZiArPSA4ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgIGluYnVmICArPSA4ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgIGRpZF91c2Vfc3NlMiA9IDE7CisgICAgICB9CisKKyAgICBpZiAoZGlkX3VzZV9zc2UyKQorICAgICAgeworICAgICAgICAvKiBzZXJwZW50LXNzZTIgYXNzZW1ibHkgY29kZSBkb2VzIG5vdCB1c2Ugc3RhY2sgKi8KKyAgICAgICAgaWYgKG5ibG9ja3MgPT0gMCkKKyAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gMDsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNFX05FT04KKyAgaWYgKGN0eC0+dXNlX25lb24pCisgICAgeworICAgICAgaW50IGRpZF91c2VfbmVvbiA9IDA7CisKKyAgICAgIC8qIFByb2Nlc3MgZGF0YSBpbiA4IGJsb2NrIGNodW5rcy4gKi8KKyAgICAgIHdoaWxlIChuYmxvY2tzID49IDgpCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9zZXJwZW50X25lb25fY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICAgIG5ibG9ja3MgLT0gODsKKyAgICAgICAgICBvdXRidWYgKz0gOCAqIHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICAgICAgICAgIGluYnVmICArPSA4ICogc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICAgICAgZGlkX3VzZV9uZW9uID0gMTsKKyAgICAgICAgfQorCisgICAgICBpZiAoZGlkX3VzZV9uZW9uKQorICAgICAgICB7CisgICAgICAgICAgLyogc2VycGVudC1uZW9uIGFzc2VtYmx5IGNvZGUgZG9lcyBub3QgdXNlIHN0YWNrICovCisgICAgICAgICAgaWYgKG5ibG9ja3MgPT0gMCkKKyAgICAgICAgICAgIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworICAgICAgICB9CisKKyAgICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgICAgfQorI2VuZGlmCisKKyAgZm9yICggO25ibG9ja3M7IG5ibG9ja3MtLSApCisgICAgeworICAgICAgc2VycGVudF9lbmNyeXB0X2ludGVybmFsKGN0eCwgaXYsIGl2KTsKKyAgICAgIGJ1Zl94b3Jfbl9jb3B5KG91dGJ1ZiwgaXYsIGluYnVmLCBzaXplb2Yoc2VycGVudF9ibG9ja190KSk7CisgICAgICBvdXRidWYgKz0gc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgICBpbmJ1ZiAgKz0gc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgICAgfQorCisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKwwKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBTRVJQRU5ULUNUUi0xMjgsIHRlc3RzIElWIGluY3JlbWVudCBvZiBidWxrIENUUgorICAgZW5jcnlwdGlvbi4gIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdF9jdHJfMTI4ICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDE2KzgrMTsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IHNpemVvZihzZXJwZW50X2Jsb2NrX3QpOworICBjb25zdCBpbnQgY29udGV4dF9zaXplID0gc2l6ZW9mKHNlcnBlbnRfY29udGV4dF90KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2N0cigiU0VSUEVOVCIsICZzZXJwZW50X3NldGtleSwKKyAgICAgICAgICAgJnNlcnBlbnRfZW5jcnlwdCwgJl9nY3J5X3NlcnBlbnRfY3RyX2VuYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzIGZvciBTRVJQRU5ULUNCQy0xMjgsIHRlc3RzIGJ1bGsgQ0JDIGRlY3J5cHRpb24uCisgICBSZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyKgorc2VsZnRlc3RfY2JjXzEyOCAodm9pZCkKK3sKKyAgY29uc3QgaW50IG5ibG9ja3MgPSAxNis4KzI7CisgIGNvbnN0IGludCBibG9ja3NpemUgPSBzaXplb2Yoc2VycGVudF9ibG9ja190KTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihzZXJwZW50X2NvbnRleHRfdCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jYmMoIlNFUlBFTlQiLCAmc2VycGVudF9zZXRrZXksCisgICAgICAgICAgICZzZXJwZW50X2VuY3J5cHQsICZfZ2NyeV9zZXJwZW50X2NiY19kZWMsIG5ibG9ja3MsIGJsb2Nrc2l6ZSwKKwkgICBjb250ZXh0X3NpemUpOworfQorCisKKy8qIFJ1biB0aGUgc2VsZi10ZXN0cyBmb3IgU0VSUEVOVC1DQkMtMTI4LCB0ZXN0cyBidWxrIENCQyBkZWNyeXB0aW9uLgorICAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhcioKK3NlbGZ0ZXN0X2NmYl8xMjggKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gMTYrOCsyOworICBjb25zdCBpbnQgYmxvY2tzaXplID0gc2l6ZW9mKHNlcnBlbnRfYmxvY2tfdCk7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2Yoc2VycGVudF9jb250ZXh0X3QpOworCisgIHJldHVybiBfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2ZiKCJTRVJQRU5UIiwgJnNlcnBlbnRfc2V0a2V5LAorICAgICAgICAgICAmc2VycGVudF9lbmNyeXB0LCAmX2djcnlfc2VycGVudF9jZmJfZGVjLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworCisvKiBTZXJwZW50IHRlc3QuICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitzZXJwZW50X3Rlc3QgKHZvaWQpCit7CisgIHNlcnBlbnRfY29udGV4dF90IGNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgc2NyYXRjaFsxNl07CisgIHVuc2lnbmVkIGludCBpOworICBjb25zdCBjaGFyICpyOworCisgIHN0YXRpYyBzdHJ1Y3QgdGVzdAorICB7CisgICAgaW50IGtleV9sZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgdGV4dF9wbGFpblsxNl07CisgICAgdW5zaWduZWQgY2hhciB0ZXh0X2NpcGhlclsxNl07CisgIH0gdGVzdF9kYXRhW10gPQorICAgIHsKKyAgICAgIHsKKwkxNiwKKwkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJIlx4RDJceDlEXHg1N1x4NkZceENFXHhBM1x4QTNceEE3XHhFRFx4OTBceDk5XHhGMlx4OTJceDczXHhEN1x4OEUiLAorCSJceEIyXHgyOFx4OEJceDk2XHg4QVx4RThceEIwXHg4Nlx4NDhceEQxXHhDRVx4OTZceDA2XHhGRFx4OTlceDJEIgorICAgICAgfSwKKyAgICAgIHsKKwkyNCwKKwkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCSJceEQyXHg5RFx4NTdceDZGXHhDRVx4QUJceEEzXHhBN1x4RURceDk4XHg5OVx4RjJceDkyXHg3Qlx4RDdceDhFIiwKKwkiXHgxM1x4MEVceDM1XHgzRVx4MTBceDM3XHhDMlx4MjRceDA1XHhFOFx4RkFceEVGXHhCMlx4QzNceEMzXHhFOSIKKyAgICAgIH0sCisgICAgICB7CisJMzIsCisJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCSJceEQwXHg5NVx4NTdceDZGXHhDRVx4QTNceEUzXHhBN1x4RURceDk4XHhEOVx4RjJceDkwXHg3M1x4RDdceDhFIiwKKwkiXHhCOVx4MEVceEU1XHg4Nlx4MkRceEU2XHg5MVx4NjhceEYyXHhCRFx4RDVceDEyXHg1Qlx4NDVceDQ3XHgyQiIKKyAgICAgIH0sCisgICAgICB7CisJMzIsCisJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCSJceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFx4MDBceDAzXHgwMFx4MDBceDAwIiwKKwkiXHgyMFx4NjFceEE0XHgyN1x4ODJceEJEXHg1Mlx4RUNceDY5XHgxRVx4QzNceDgzXHhCMFx4M0JceEE3XHg3QyIKKyAgICAgIH0sCisgICAgICB7CisJMAorICAgICAgfSwKKyAgICB9OworCisgIGZvciAoaSA9IDA7IHRlc3RfZGF0YVtpXS5rZXlfbGVuZ3RoOyBpKyspCisgICAgeworICAgICAgc2VycGVudF9zZXRrZXlfaW50ZXJuYWwgKCZjb250ZXh0LCB0ZXN0X2RhdGFbaV0ua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgIHNlcnBlbnRfZW5jcnlwdF9pbnRlcm5hbCAoJmNvbnRleHQsIHRlc3RfZGF0YVtpXS50ZXh0X3BsYWluLCBzY3JhdGNoKTsKKworICAgICAgaWYgKG1lbWNtcCAoc2NyYXRjaCwgdGVzdF9kYXRhW2ldLnRleHRfY2lwaGVyLCBzaXplb2YgKHNlcnBlbnRfYmxvY2tfdCkpKQorCXN3aXRjaCAodGVzdF9kYXRhW2ldLmtleV9sZW5ndGgpCisJICB7CisJICBjYXNlIDE2OgorCSAgICByZXR1cm4gIlNlcnBlbnQtMTI4IHRlc3QgZW5jcnlwdGlvbiBmYWlsZWQuIjsKKwkgIGNhc2UgIDI0OgorCSAgICByZXR1cm4gIlNlcnBlbnQtMTkyIHRlc3QgZW5jcnlwdGlvbiBmYWlsZWQuIjsKKwkgIGNhc2UgMzI6CisJICAgIHJldHVybiAiU2VycGVudC0yNTYgdGVzdCBlbmNyeXB0aW9uIGZhaWxlZC4iOworCSAgfQorCisgICAgc2VycGVudF9kZWNyeXB0X2ludGVybmFsICgmY29udGV4dCwgdGVzdF9kYXRhW2ldLnRleHRfY2lwaGVyLCBzY3JhdGNoKTsKKyAgICBpZiAobWVtY21wIChzY3JhdGNoLCB0ZXN0X2RhdGFbaV0udGV4dF9wbGFpbiwgc2l6ZW9mIChzZXJwZW50X2Jsb2NrX3QpKSkKKyAgICAgIHN3aXRjaCAodGVzdF9kYXRhW2ldLmtleV9sZW5ndGgpCisJeworCWNhc2UgMTY6CisJICByZXR1cm4gIlNlcnBlbnQtMTI4IHRlc3QgZGVjcnlwdGlvbiBmYWlsZWQuIjsKKwljYXNlICAyNDoKKwkgIHJldHVybiAiU2VycGVudC0xOTIgdGVzdCBkZWNyeXB0aW9uIGZhaWxlZC4iOworCWNhc2UgMzI6CisJICByZXR1cm4gIlNlcnBlbnQtMjU2IHRlc3QgZGVjcnlwdGlvbiBmYWlsZWQuIjsKKwl9CisgICAgfQorCisgIGlmICggKHIgPSBzZWxmdGVzdF9jdHJfMTI4ICgpKSApCisgICAgcmV0dXJuIHI7CisKKyAgaWYgKCAociA9IHNlbGZ0ZXN0X2NiY18xMjggKCkpICkKKyAgICByZXR1cm4gcjsKKworICBpZiAoIChyID0gc2VsZnRlc3RfY2ZiXzEyOCAoKSkgKQorICAgIHJldHVybiByOworCisgIHJldHVybiBOVUxMOworfQorCisMCisKKy8qICJTRVJQRU5UIiBpcyBhbiBhbGlhcyBmb3IgIlNFUlBFTlQxMjgiLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjaXBoZXJfc3BlY19zZXJwZW50MTI4X2FsaWFzZXNbXSA9CisgIHsKKyAgICAiU0VSUEVOVCIsCisgICAgTlVMTAorICB9OworCitnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfc2VycGVudDEyOCA9CisgIHsKKyAgICBHQ1JZX0NJUEhFUl9TRVJQRU5UMTI4LCB7MCwgMH0sCisgICAgIlNFUlBFTlQxMjgiLCBjaXBoZXJfc3BlY19zZXJwZW50MTI4X2FsaWFzZXMsIE5VTEwsIDE2LCAxMjgsCisgICAgc2l6ZW9mIChzZXJwZW50X2NvbnRleHRfdCksCisgICAgc2VycGVudF9zZXRrZXksIHNlcnBlbnRfZW5jcnlwdCwgc2VycGVudF9kZWNyeXB0CisgIH07CisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MTkyID0KKyAgeworICAgIEdDUllfQ0lQSEVSX1NFUlBFTlQxOTIsIHswLCAwfSwKKyAgICAiU0VSUEVOVDE5MiIsIE5VTEwsIE5VTEwsIDE2LCAxOTIsCisgICAgc2l6ZW9mIChzZXJwZW50X2NvbnRleHRfdCksCisgICAgc2VycGVudF9zZXRrZXksIHNlcnBlbnRfZW5jcnlwdCwgc2VycGVudF9kZWNyeXB0CisgIH07CisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MjU2ID0KKyAgeworICAgIEdDUllfQ0lQSEVSX1NFUlBFTlQyNTYsIHswLCAwfSwKKyAgICAiU0VSUEVOVDI1NiIsIE5VTEwsIE5VTEwsIDE2LCAyNTYsCisgICAgc2l6ZW9mIChzZXJwZW50X2NvbnRleHRfdCksCisgICAgc2VycGVudF9zZXRrZXksIHNlcnBlbnRfZW5jcnlwdCwgc2VycGVudF9kZWNyeXB0CisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvc2hhMS1zc3NlMy1hbWQ2NC5TIGIvY2lwaGVyL3NoYTEtc3NzZTMtYW1kNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU3MTZiCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3NoYTEtc3NzZTMtYW1kNjQuUwpAQCAtMCwwICsxLDM3NyBAQAorLyogc2hhMS1zc3NlMy1hbWQ2NC5TIC0gSW50ZWwgU1NTRTMgYWNjZWxlcmF0ZWQgU0hBLTEgdHJhbnNmb3JtIGZ1bmN0aW9uCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogQmFzZWQgb24gc2hhMS5jOgorICogIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIEludGVsIFNTU0UzIGFjY2VsZXJhdGVkIFNIQS0xIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHdoaXRlIHBhcGVyOgorICogICJJbXByb3ZpbmcgdGhlIFBlcmZvcm1hbmNlIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0gKFNIQS0xKSIKKyAqICBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2ltcHJvdmluZy10aGUtcGVyZm9ybWFuY2Utb2YtdGhlLXNlY3VyZS1oYXNoLWFsZ29yaXRobS0xCisgKi8KKworI2lmZGVmIF9feDg2XzY0X18KKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9TU1NFMykgJiYgZGVmaW5lZChVU0VfU0hBMSkKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgKCVyaXApCisjZWxzZQorIyAgZGVmaW5lIFJJUAorI2VuZGlmCisKKworLyogQ29udGV4dCBzdHJ1Y3R1cmUgKi8KKworI2RlZmluZSBzdGF0ZV9oMCAwCisjZGVmaW5lIHN0YXRlX2gxIDQKKyNkZWZpbmUgc3RhdGVfaDIgOAorI2RlZmluZSBzdGF0ZV9oMyAxMgorI2RlZmluZSBzdGF0ZV9oNCAxNgorCisKKy8qIENvbnN0YW50cyAqLworCisuZGF0YQorI2RlZmluZSBLMSAgMHg1QTgyNzk5OQorI2RlZmluZSBLMiAgMHg2RUQ5RUJBMQorI2RlZmluZSBLMyAgMHg4RjFCQkNEQworI2RlZmluZSBLNCAgMHhDQTYyQzFENgorLmFsaWduIDE2CisuTEtfWE1NOgorLkxLMToJLmxvbmcgSzEsIEsxLCBLMSwgSzEKKy5MSzI6CS5sb25nIEsyLCBLMiwgSzIsIEsyCisuTEszOgkubG9uZyBLMywgSzMsIEszLCBLMworLkxLNDoJLmxvbmcgSzQsIEs0LCBLNCwgSzQKKworLkxic3dhcF9zaHVmYl9jdGw6CisJLmxvbmcgMHgwMDAxMDIwMywgMHgwNDA1MDYwNywgMHgwODA5MGEwYiwgMHgwYzBkMGUwZgorCisKKy8qIFJlZ2lzdGVyIG1hY3JvcyAqLworCisjZGVmaW5lIFJTVEFURSAlcjgKKyNkZWZpbmUgUkRBVEEgJXI5CisjZGVmaW5lIFJPTERTVEFDSyAlcjEwCisKKyNkZWZpbmUgYSAlZWF4CisjZGVmaW5lIGIgJWVieAorI2RlZmluZSBjICVlY3gKKyNkZWZpbmUgZCAlZWR4CisjZGVmaW5lIGUgJWVkaQorCisjZGVmaW5lIFJUMCAlZXNpCisjZGVmaW5lIFJUMSAlZWJwCisKKyNkZWZpbmUgV3RtcDAgJXhtbTAKKyNkZWZpbmUgV3RtcDEgJXhtbTEKKworI2RlZmluZSBXMCAleG1tMgorI2RlZmluZSBXMSAleG1tMworI2RlZmluZSBXMiAleG1tNAorI2RlZmluZSBXMyAleG1tNQorI2RlZmluZSBXNCAleG1tNgorI2RlZmluZSBXNSAleG1tNworI2RlZmluZSBXNiAleG1tOAorI2RlZmluZSBXNyAleG1tOQorCisjZGVmaW5lIEJTV0FQX1JFRyAleG1tMTAKKworCisvKiBSb3VuZCBmdW5jdGlvbiBtYWNyb3MuICovCisKKyNkZWZpbmUgV0soaSkgKCgoaSkgJiAxNSkgKiA0KSglcnNwKQorCisjZGVmaW5lIFJfRjEoYSxiLGMsZCxlLGkpIFwKKwltb3ZsIGMsIFJUMDsgXAorCWFkZGwgV0soaSksIGU7IFwKKwl4b3JsIGQsIFJUMDsgXAorCW1vdmwgYSwgUlQxOyBcCisJYW5kbCBiLCBSVDA7IFwKKwlyb2xsICQzMCwgYjsgXAorCXhvcmwgZCwgUlQwOyBcCisJbGVhbCAoUlQwLGUpLCBlOyBcCisJcm9sbCAkNSwgUlQxOyBcCisJYWRkbCBSVDEsIGU7CisKKyNkZWZpbmUgUl9GMihhLGIsYyxkLGUsaSkgXAorCW1vdmwgYywgUlQwOyBcCisJYWRkbCBXSyhpKSwgZTsgXAorCXhvcmwgYiwgUlQwOyBcCisJcm9sbCAkMzAsIGI7IFwKKwl4b3JsIGQsIFJUMDsgXAorCW1vdmwgYSwgUlQxOyBcCisJbGVhbCAoUlQwLGUpLCBlOyBcCisJcm9sbCAkNSwgUlQxOyBcCisJYWRkbCBSVDEsIGU7CisKKyNkZWZpbmUgUl9GMyhhLGIsYyxkLGUsaSkgXAorCW1vdmwgYywgUlQwOyBcCisJbW92bCBiLCBSVDE7IFwKKwl4b3JsIGIsIFJUMDsgXAorCWFuZGwgYywgUlQxOyBcCisJYW5kbCBkLCBSVDA7IFwKKwlhZGRsIFJUMSwgZTsgXAorCWFkZGwgV0soaSksIGU7IFwKKwlyb2xsICQzMCwgYjsgXAorCW1vdmwgYSwgUlQxOyBcCisJbGVhbCAoUlQwLGUpLCBlOyBcCisJcm9sbCAkNSwgUlQxOyBcCisJYWRkbCBSVDEsIGU7CisKKyNkZWZpbmUgUl9GNChhLGIsYyxkLGUsaSkgUl9GMihhLGIsYyxkLGUsaSkKKworI2RlZmluZSBSKGEsYixjLGQsZSxmLGkpIFwKKwlSXyMjZihhLGIsYyxkLGUsaSkKKworCisvKiBJbnB1dCBleHBhbnNpb24gbWFjcm9zLiAqLworCisjZGVmaW5lIFdfUFJFQ0FMQ18wMF8xNV8wKGksIFcsIHRtcDApIFwKKwltb3ZkcXUgKDQqKGkpKShSREFUQSksIHRtcDA7CisKKyNkZWZpbmUgV19QUkVDQUxDXzAwXzE1XzEoaSwgVywgdG1wMCkgXAorCXBzaHVmYiBCU1dBUF9SRUcsIHRtcDA7IFwKKwltb3ZkcWEgdG1wMCwgVzsKKworI2RlZmluZSBXX1BSRUNBTENfMDBfMTVfMihpLCBXLCB0bXAwKSBcCisJcGFkZGQgKC5MS19YTU0gKyAoKGkpLzIwKSoxNikgUklQLCB0bXAwOworCisjZGVmaW5lIFdfUFJFQ0FMQ18wMF8xNV8zKGksIFcsIHRtcDApIFwKKwltb3ZkcWEgdG1wMCwgV0soaSZ+Myk7CisKKyNkZWZpbmUgV19QUkVDQUxDXzE2XzMxXzAoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIHRtcDAsIHRtcDEpIFwKKwltb3ZkcWEgV19tMTIsIFc7IFwKKwlwYWxpZ25yICQ4LCBXX20xNiwgVzsgXAorCW1vdmRxYSBXX20wNCwgdG1wMDsgXAorCXBzcmxkcSAkNCwgdG1wMDsgXAorCXB4b3IgV19tMDgsIFc7CisKKyNkZWZpbmUgV19QUkVDQUxDXzE2XzMxXzEoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIHRtcDAsIHRtcDEpIFwKKwlweG9yIFdfbTE2LCB0bXAwOyBcCisJcHhvciB0bXAwLCBXOyBcCisJbW92ZHFhIFcsIHRtcDE7IFwKKwltb3ZkcWEgVywgdG1wMDsgXAorCXBzbGxkcSAkMTIsIHRtcDE7CisKKyNkZWZpbmUgV19QUkVDQUxDXzE2XzMxXzIoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIHRtcDAsIHRtcDEpIFwKKwlwc3JsZCAkMzEsIFc7IFwKKwlwc2xsZCAkMSwgdG1wMDsgXAorCXBvciBXLCB0bXAwOyBcCisJbW92ZHFhIHRtcDEsIFc7IFwKKwlwc3JsZCAkMzAsIHRtcDE7IFwKKwlwc2xsZCAkMiwgVzsKKworI2RlZmluZSBXX1BSRUNBTENfMTZfMzFfMyhpLCBXLCBXX20wNCwgV19tMDgsIFdfbTEyLCBXX20xNiwgdG1wMCwgdG1wMSkgXAorCXB4b3IgVywgdG1wMDsgXAorCXB4b3IgdG1wMSwgdG1wMDsgXAorCW1vdmRxYSB0bXAwLCBXOyBcCisJcGFkZGQgKC5MS19YTU0gKyAoKGkpLzIwKSoxNikgUklQLCB0bXAwOyBcCisJbW92ZHFhIHRtcDAsIFdLKChpKSZ+Myk7CisKKyNkZWZpbmUgV19QUkVDQUxDXzMyXzc5XzAoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIFdfbTIwLCBXX20yNCwgV19tMjgsIHRtcDApIFwKKwltb3ZkcWEgV19tMDQsIHRtcDA7IFwKKwlweG9yIFdfbTI4LCBXOyBcCisJcGFsaWduciAkOCwgV19tMDgsIHRtcDA7CisKKyNkZWZpbmUgV19QUkVDQUxDXzMyXzc5XzEoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIFdfbTIwLCBXX20yNCwgV19tMjgsIHRtcDApIFwKKwlweG9yIFdfbTE2LCBXOyBcCisJcHhvciB0bXAwLCBXOyBcCisJbW92ZHFhIFcsIHRtcDA7CisKKyNkZWZpbmUgV19QUkVDQUxDXzMyXzc5XzIoaSwgVywgV19tMDQsIFdfbTA4LCBXX20xMiwgV19tMTYsIFdfbTIwLCBXX20yNCwgV19tMjgsIHRtcDApIFwKKwlwc3JsZCAkMzAsIFc7IFwKKwlwc2xsZCAkMiwgdG1wMDsgXAorCXBvciBXLCB0bXAwOworCisjZGVmaW5lIFdfUFJFQ0FMQ18zMl83OV8zKGksIFcsIFdfbTA0LCBXX20wOCwgV19tMTIsIFdfbTE2LCBXX20yMCwgV19tMjQsIFdfbTI4LCB0bXAwKSBcCisJbW92ZHFhIHRtcDAsIFc7IFwKKwlwYWRkZCAoLkxLX1hNTSArICgoaSkvMjApKjE2KSBSSVAsIHRtcDA7IFwKKwltb3ZkcWEgdG1wMCwgV0soKGkpJn4zKTsKKworI2RlZmluZSBDTEVBUl9SRUcocmVnKSBweG9yIHJlZywgcmVnOworCisKKy8qCisgKiBUcmFuc2Zvcm0gNjQgYnl0ZXMgKDE2IDMyLWJpdCB3b3JkcykgYXQgREFUQS4KKyAqCisgKiB1bnNpZ25lZCBpbnQKKyAqIF9nY3J5X3NoYTFfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzICh2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisgKi8KKy50ZXh0CisuZ2xvYmwgX2djcnlfc2hhMV90cmFuc2Zvcm1fYW1kNjRfc3NzZTMKKy50eXBlIF9nY3J5X3NoYTFfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzLEBmdW5jdGlvbgorLmFsaWduIDE2CitfZ2NyeV9zaGExX3RyYW5zZm9ybV9hbWQ2NF9zc3NlMzoKKyAgLyogaW5wdXQ6CisgICAqCSVyZGk6IGN0eCwgQ1RYCisgICAqCSVyc2k6IGRhdGEgKDY0IGJ5dGVzKQorICAgKgklcmR4OiAuLi4KKyAgICovCisKKyAgbW92cSAlcmRpLCBSU1RBVEU7CisgIG1vdnEgJXJzaSwgUkRBVEE7CisgIHB1c2hxICVyYng7CisgIHB1c2hxICVyYnA7CisKKyAgbW92cSAlcnNwLCBST0xEU1RBQ0s7CisKKyAgc3VicSAkKDE2KjQpLCAlcnNwOworICBhbmRxICQofjMxKSwgJXJzcDsKKworICAvKiBHZXQgdGhlIHZhbHVlcyBvZiB0aGUgY2hhaW5pbmcgdmFyaWFibGVzLiAqLworICBtb3ZsIHN0YXRlX2gwKFJTVEFURSksIGE7CisgIG1vdmwgc3RhdGVfaDEoUlNUQVRFKSwgYjsKKyAgbW92bCBzdGF0ZV9oMihSU1RBVEUpLCBjOworICBtb3ZsIHN0YXRlX2gzKFJTVEFURSksIGQ7CisgIG1vdmwgc3RhdGVfaDQoUlNUQVRFKSwgZTsKKworICBtb3ZkcWEgLkxic3dhcF9zaHVmYl9jdGwgUklQLCBCU1dBUF9SRUc7CisKKyAgLyogUHJlY2FsYyAwLTE1LiAqLworICBXX1BSRUNBTENfMDBfMTVfMCgwLCBXMCwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMSgxLCBXMCwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMigyLCBXMCwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMygzLCBXMCwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMCg0LCBXNywgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMSg1LCBXNywgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMig2LCBXNywgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMyg3LCBXNywgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMCg4LCBXNiwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMSg5LCBXNiwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMigxMCwgVzYsIFd0bXAwKTsKKyAgV19QUkVDQUxDXzAwXzE1XzMoMTEsIFc2LCBXdG1wMCk7CisgIFdfUFJFQ0FMQ18wMF8xNV8wKDEyLCBXNSwgV3RtcDApOworICBXX1BSRUNBTENfMDBfMTVfMSgxMywgVzUsIFd0bXAwKTsKKyAgV19QUkVDQUxDXzAwXzE1XzIoMTQsIFc1LCBXdG1wMCk7CisgIFdfUFJFQ0FMQ18wMF8xNV8zKDE1LCBXNSwgV3RtcDApOworCisgIC8qIFRyYW5zZm9ybSAwLTE1ICsgUHJlY2FsYyAxNi0zMS4gKi8KKyAgUiggYSwgYiwgYywgZCwgZSwgRjEsICAwICk7IFdfUFJFQ0FMQ18xNl8zMV8wKDE2LCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwLCBXdG1wMSk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEYxLCAgMSApOyBXX1BSRUNBTENfMTZfMzFfMSgxNywgVzQsIFc1LCBXNiwgVzcsIFcwLCBXdG1wMCwgV3RtcDEpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGMSwgIDIgKTsgV19QUkVDQUxDXzE2XzMxXzIoMTgsIFc0LCBXNSwgVzYsIFc3LCBXMCwgV3RtcDAsIFd0bXAxKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjEsICAzICk7IFdfUFJFQ0FMQ18xNl8zMV8zKDE5LCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwLCBXdG1wMSk7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEYxLCAgNCApOyBXX1BSRUNBTENfMTZfMzFfMCgyMCwgVzMsIFc0LCBXNSwgVzYsIFc3LCBXdG1wMCwgV3RtcDEpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGMSwgIDUgKTsgV19QUkVDQUxDXzE2XzMxXzEoMjEsIFczLCBXNCwgVzUsIFc2LCBXNywgV3RtcDAsIFd0bXAxKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjEsICA2ICk7IFdfUFJFQ0FMQ18xNl8zMV8yKDIyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwLCBXdG1wMSk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEYxLCAgNyApOyBXX1BSRUNBTENfMTZfMzFfMygyMywgVzMsIFc0LCBXNSwgVzYsIFc3LCBXdG1wMCwgV3RtcDEpOworICBSKCBjLCBkLCBlLCBhLCBiLCBGMSwgIDggKTsgV19QUkVDQUxDXzE2XzMxXzAoMjQsIFcyLCBXMywgVzQsIFc1LCBXNiwgV3RtcDAsIFd0bXAxKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjEsICA5ICk7IFdfUFJFQ0FMQ18xNl8zMV8xKDI1LCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwLCBXdG1wMSk7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEYxLCAxMCApOyBXX1BSRUNBTENfMTZfMzFfMigyNiwgVzIsIFczLCBXNCwgVzUsIFc2LCBXdG1wMCwgV3RtcDEpOworICBSKCBlLCBhLCBiLCBjLCBkLCBGMSwgMTEgKTsgV19QUkVDQUxDXzE2XzMxXzMoMjcsIFcyLCBXMywgVzQsIFc1LCBXNiwgV3RtcDAsIFd0bXAxKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjEsIDEyICk7IFdfUFJFQ0FMQ18xNl8zMV8wKDI4LCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwLCBXdG1wMSk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEYxLCAxMyApOyBXX1BSRUNBTENfMTZfMzFfMSgyOSwgVzEsIFcyLCBXMywgVzQsIFc1LCBXdG1wMCwgV3RtcDEpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGMSwgMTQgKTsgV19QUkVDQUxDXzE2XzMxXzIoMzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgV3RtcDAsIFd0bXAxKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjEsIDE1ICk7IFdfUFJFQ0FMQ18xNl8zMV8zKDMxLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwLCBXdG1wMSk7CisKKyAgLyogVHJhbnNmb3JtIDE2LTYzICsgUHJlY2FsYyAzMi03OS4gKi8KKyAgUiggZSwgYSwgYiwgYywgZCwgRjEsIDE2ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDMyLCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjEsIDE3ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDMzLCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjEsIDE4ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDM0LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjEsIDE5ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDM1LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjIsIDIwICk7IFdfUFJFQ0FMQ18zMl83OV8wKDM2LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjIsIDIxICk7IFdfUFJFQ0FMQ18zMl83OV8xKDM3LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIDIyICk7IFdfUFJFQ0FMQ18zMl83OV8yKDM4LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIDIzICk7IFdfUFJFQ0FMQ18zMl83OV8zKDM5LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjIsIDI0ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDQwLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjIsIDI1ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDQxLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjIsIDI2ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDQyLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIDI3ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDQzLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIDI4ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDQ0LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjIsIDI5ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDQ1LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjIsIDMwICk7IFdfUFJFQ0FMQ18zMl83OV8yKDQ2LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjIsIDMxICk7IFdfUFJFQ0FMQ18zMl83OV8zKDQ3LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIDMyICk7IFdfUFJFQ0FMQ18zMl83OV8wKDQ4LCBXNCwgVzUsIFc2LCBXNywgVzAsIFcxLCBXMiwgVzMsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIDMzICk7IFdfUFJFQ0FMQ18zMl83OV8xKDQ5LCBXNCwgVzUsIFc2LCBXNywgVzAsIFcxLCBXMiwgVzMsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjIsIDM0ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDUwLCBXNCwgVzUsIFc2LCBXNywgVzAsIFcxLCBXMiwgVzMsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjIsIDM1ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDUxLCBXNCwgVzUsIFc2LCBXNywgVzAsIFcxLCBXMiwgVzMsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjIsIDM2ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDUyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjIsIDM3ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDUzLCBXMywgVzQsIFc1LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjIsIDM4ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDU0LCBXMywgVzQsIFc1LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjIsIDM5ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDU1LCBXMywgVzQsIFc1LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIDQwICk7IFdfUFJFQ0FMQ18zMl83OV8wKDU2LCBXMiwgVzMsIFc0LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjMsIDQxICk7IFdfUFJFQ0FMQ18zMl83OV8xKDU3LCBXMiwgVzMsIFc0LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjMsIDQyICk7IFdfUFJFQ0FMQ18zMl83OV8yKDU4LCBXMiwgVzMsIFc0LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjMsIDQzICk7IFdfUFJFQ0FMQ18zMl83OV8zKDU5LCBXMiwgVzMsIFc0LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIDQ0ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDYwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIDQ1ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDYxLCBXMSwgVzIsIFczLCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjMsIDQ2ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDYyLCBXMSwgVzIsIFczLCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjMsIDQ3ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDYzLCBXMSwgVzIsIFczLCBXNCwgVzUsIFc2LCBXNywgVzAsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjMsIDQ4ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDY0LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIDQ5ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDY1LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIDUwICk7IFdfUFJFQ0FMQ18zMl83OV8yKDY2LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjMsIDUxICk7IFdfUFJFQ0FMQ18zMl83OV8zKDY3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFc1LCBXNiwgVzcsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjMsIDUyICk7IFdfUFJFQ0FMQ18zMl83OV8wKDY4LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjMsIDUzICk7IFdfUFJFQ0FMQ18zMl83OV8xKDY5LCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIDU0ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDcwLCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjMsIDU1ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDcxLCBXNywgVzAsIFcxLCBXMiwgVzMsIFc0LCBXNSwgVzYsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjMsIDU2ICk7IFdfUFJFQ0FMQ18zMl83OV8wKDcyLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjMsIDU3ICk7IFdfUFJFQ0FMQ18zMl83OV8xKDczLCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjMsIDU4ICk7IFdfUFJFQ0FMQ18zMl83OV8yKDc0LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjMsIDU5ICk7IFdfUFJFQ0FMQ18zMl83OV8zKDc1LCBXNiwgVzcsIFcwLCBXMSwgVzIsIFczLCBXNCwgVzUsIFd0bXAwKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjQsIDYwICk7IFdfUFJFQ0FMQ18zMl83OV8wKDc2LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjQsIDYxICk7IFdfUFJFQ0FMQ18zMl83OV8xKDc3LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjQsIDYyICk7IFdfUFJFQ0FMQ18zMl83OV8yKDc4LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjQsIDYzICk7IFdfUFJFQ0FMQ18zMl83OV8zKDc5LCBXNSwgVzYsIFc3LCBXMCwgVzEsIFcyLCBXMywgVzQsIFd0bXAwKTsKKworICAvKiBUcmFuc2Zvcm0gNjQtNzkgKyBDbGVhciBYTU0gcmVnaXN0ZXJzLiAqLworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgNjQgKTsgQ0xFQVJfUkVHKEJTV0FQX1JFRyk7CisgIFIoIGEsIGIsIGMsIGQsIGUsIEY0LCA2NSApOyBDTEVBUl9SRUcoV3RtcDApOworICBSKCBlLCBhLCBiLCBjLCBkLCBGNCwgNjYgKTsgQ0xFQVJfUkVHKFd0bXAxKTsKKyAgUiggZCwgZSwgYSwgYiwgYywgRjQsIDY3ICk7IENMRUFSX1JFRyhXMCk7CisgIFIoIGMsIGQsIGUsIGEsIGIsIEY0LCA2OCApOyBDTEVBUl9SRUcoVzEpOworICBSKCBiLCBjLCBkLCBlLCBhLCBGNCwgNjkgKTsgQ0xFQVJfUkVHKFcyKTsKKyAgUiggYSwgYiwgYywgZCwgZSwgRjQsIDcwICk7IENMRUFSX1JFRyhXMyk7CisgIFIoIGUsIGEsIGIsIGMsIGQsIEY0LCA3MSApOyBDTEVBUl9SRUcoVzQpOworICBSKCBkLCBlLCBhLCBiLCBjLCBGNCwgNzIgKTsgQ0xFQVJfUkVHKFc1KTsKKyAgUiggYywgZCwgZSwgYSwgYiwgRjQsIDczICk7IENMRUFSX1JFRyhXNik7CisgIFIoIGIsIGMsIGQsIGUsIGEsIEY0LCA3NCApOyBDTEVBUl9SRUcoVzcpOworICBSKCBhLCBiLCBjLCBkLCBlLCBGNCwgNzUgKTsKKyAgUiggZSwgYSwgYiwgYywgZCwgRjQsIDc2ICk7CisgIFIoIGQsIGUsIGEsIGIsIGMsIEY0LCA3NyApOworICBSKCBjLCBkLCBlLCBhLCBiLCBGNCwgNzggKTsKKyAgUiggYiwgYywgZCwgZSwgYSwgRjQsIDc5ICk7CisKKyAgLyogVXBkYXRlIHRoZSBjaGFpbmluZyB2YXJpYWJsZXMuICovCisgIGFkZGwgc3RhdGVfaDAoUlNUQVRFKSwgYTsKKyAgYWRkbCBzdGF0ZV9oMShSU1RBVEUpLCBiOworICBhZGRsIHN0YXRlX2gyKFJTVEFURSksIGM7CisgIGFkZGwgc3RhdGVfaDMoUlNUQVRFKSwgZDsKKyAgYWRkbCBzdGF0ZV9oNChSU1RBVEUpLCBlOworCisgIG1vdmwgYSwgc3RhdGVfaDAoUlNUQVRFKTsKKyAgbW92bCBiLCBzdGF0ZV9oMShSU1RBVEUpOworICBtb3ZsIGMsIHN0YXRlX2gyKFJTVEFURSk7CisgIG1vdmwgZCwgc3RhdGVfaDMoUlNUQVRFKTsKKyAgbW92bCBlLCBzdGF0ZV9oNChSU1RBVEUpOworCisgIG1vdnEgUk9MRFNUQUNLLCAlcnNwOworCisgIHBvcHEgJXJicDsKKyAgcG9wcSAlcmJ4OworCisgIC8qIGJ1cm5fc3RhY2sgKi8KKyAgbW92bCAkKDE2KjQgKyAyKjggKyAzMSksICVlYXg7CisKKyAgcmV0OworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NoYTEuYyBiL2NpcGhlci9zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwYjAzMAotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zaGExLmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qIHNoYTEuYyAtIFNIQTEgaGFzaCBmdW5jdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisKKy8qICBUZXN0IHZlY3RvcnM6CisgKgorICogICJhYmMiCisgKiAgQTk5OSAzRTM2IDQ3MDYgODE2QSBCQTNFICAyNTcxIDc4NTAgQzI2QyA5Q0QwIEQ4OUQKKyAqCisgKiAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgorICogIDg0OTggM0U0NCAxQzNCIEQyNkUgQkFBRSAgNEFBMSBGOTUxIDI5RTUgRTU0NiA3MEYxCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJiaXRoZWxwLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImhhc2gtY29tbW9uLmgiCisKKworLyogVVNFX1NTU0UzIGluZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBJbnRlbCBTU1NFMyBjb2RlLiAqLworI3VuZGVmIFVTRV9TU1NFMworI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzKQorIyBkZWZpbmUgVVNFX1NTU0UzIDEKKyNlbmRpZgorCisKKy8qIEEgbWFjcm8gdG8gdGVzdCB3aGV0aGVyIFAgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW4gdTMyIHR5cGUuCisgICBOb3RlIHRoYXQgY29uZmlnLmggcHJvdmlkZXMgYSBzdWl0YWJsZSByZXBsYWNlbWVudCBmb3IgdWludHB0cl90IGlmCisgICBpdCBkb2VzIG5vdCBleGlzdCBpbiBzdGRpbnQuaC4gICovCisvKiAjaWYgX19HTlVDX18gPj0gMiAqLworLyogIyBkZWZpbmUgVTMyX0FMSUdORURfUChwKSAoISgoKHVpbnRwdHJfdClwKSAlIF9fYWxpZ25vZl9fICh1MzIpKSkgKi8KKy8qICNlbHNlICovCisvKiAjIGRlZmluZSBVMzJfQUxJR05FRF9QKHApICghKCgodWludHB0cl90KXApICUgc2l6ZW9mICh1MzIpKSkgKi8KKy8qICNlbmRpZiAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBnY3J5X21kX2Jsb2NrX2N0eF90IGJjdHg7CisgIHUzMiAgICAgICAgICAgaDAsaDEsaDIsaDMsaDQ7CisjaWZkZWYgVVNFX1NTU0UzCisgIHVuc2lnbmVkIGludCB1c2Vfc3NzZTM6MTsKKyNlbmRpZgorfSBTSEExX0NPTlRFWFQ7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAodm9pZCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKKworc3RhdGljIHZvaWQKK3NoYTFfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBTSEExX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICAodm9pZClmbGFnczsKKworICBoZC0+aDAgPSAweDY3NDUyMzAxOworICBoZC0+aDEgPSAweGVmY2RhYjg5OworICBoZC0+aDIgPSAweDk4YmFkY2ZlOworICBoZC0+aDMgPSAweDEwMzI1NDc2OworICBoZC0+aDQgPSAweGMzZDJlMWYwOworCisgIGhkLT5iY3R4Lm5ibG9ja3MgPSAwOworICBoZC0+YmN0eC5uYmxvY2tzX2hpZ2ggPSAwOworICBoZC0+YmN0eC5jb3VudCA9IDA7CisgIGhkLT5iY3R4LmJsb2Nrc2l6ZSA9IDY0OworICBoZC0+YmN0eC5id3JpdGUgPSB0cmFuc2Zvcm07CisKKyNpZmRlZiBVU0VfU1NTRTMKKyAgaGQtPnVzZV9zc3NlMyA9IChfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCkgJiBIV0ZfSU5URUxfU1NTRTMpICE9IDA7CisjZW5kaWYKK30KKworCisvKiBSb3VuZCBmdW5jdGlvbiBtYWNyb3MuICovCisjZGVmaW5lIEsxICAweDVBODI3OTk5TAorI2RlZmluZSBLMiAgMHg2RUQ5RUJBMUwKKyNkZWZpbmUgSzMgIDB4OEYxQkJDRENMCisjZGVmaW5lIEs0ICAweENBNjJDMUQ2TAorI2RlZmluZSBGMSh4LHkseikgICAoIHogXiAoIHggJiAoIHkgXiB6ICkgKSApCisjZGVmaW5lIEYyKHgseSx6KSAgICggeCBeIHkgXiB6ICkKKyNkZWZpbmUgRjMoeCx5LHopICAgKCAoIHggJiB5ICkgfCAoIHogJiAoIHggfCB5ICkgKSApCisjZGVmaW5lIEY0KHgseSx6KSAgICggeCBeIHkgXiB6ICkKKyNkZWZpbmUgTShpKSAoIHRtID0gICAgeFsgaSAgICAmMHgwZl0gIFwKKyAgICAgICAgICAgICAgICAgICAgIF4geFsoaS0xNCkmMHgwZl0gIFwKKwkgCSAgICAgXiB4WyhpLTgpICYweDBmXSAgXAorICAgICAgICAgICAgICAgICAgICAgXiB4WyhpLTMpICYweDBmXSwgXAorICAgICAgICAgICAgICAgICAgICAgKHhbaSYweDBmXSA9IHJvbCh0bSwgMSkpKQorI2RlZmluZSBSKGEsYixjLGQsZSxmLGssbSkgIGRvIHsgZSArPSByb2woIGEsIDUgKSAgICAgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZiggYiwgYywgZCApICBcCisJCSAJCSAgICAgICsgawkgICAgICBcCisJCQkgCSAgICAgICsgbTsJICAgICAgXAorCQkJCSBiID0gcm9sKCBiLCAzMCApOyAgICBcCisJCQkgICAgICAgfSB3aGlsZSgwKQorCisKKy8qCisgKiBUcmFuc2Zvcm0gTkJMT0NLUyBvZiBlYWNoIDY0IGJ5dGVzICgxNiAzMi1iaXQgd29yZHMpIGF0IERBVEEuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK190cmFuc2Zvcm0gKHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgU0hBMV9DT05URVhUICpoZCA9IGN0eDsKKyAgY29uc3QgdTMyICppZGF0YSA9IChjb25zdCB2b2lkICopZGF0YTsKKyAgcmVnaXN0ZXIgdTMyIGEsIGIsIGMsIGQsIGU7IC8qIExvY2FsIGNvcGllcyBvZiB0aGUgY2hhaW5pbmcgdmFyaWFibGVzLiAgKi8KKyAgcmVnaXN0ZXIgdTMyIHRtOyAgICAgICAgICAgIC8qIEhlbHBlci4gICovCisgIHUzMiB4WzE2XTsgICAgICAgICAgICAgICAgICAvKiBUaGUgYXJyYXkgd2Ugd29yayBvbi4gKi8KKworI2RlZmluZSBJKGkpICh4W2ldID0gYnVmX2dldF9iZTMyKGlkYXRhICsgaSkpCisKKyAgICAgIC8qIEdldCB0aGUgdmFsdWVzIG9mIHRoZSBjaGFpbmluZyB2YXJpYWJsZXMuICovCisgICAgICBhID0gaGQtPmgwOworICAgICAgYiA9IGhkLT5oMTsKKyAgICAgIGMgPSBoZC0+aDI7CisgICAgICBkID0gaGQtPmgzOworICAgICAgZSA9IGhkLT5oNDsKKworICAgICAgLyogVHJhbnNmb3JtLiAqLworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjEsIEsxLCBJKCAwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEsxLCBJKCAxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjEsIEsxLCBJKCAyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjEsIEsxLCBJKCAzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjEsIEsxLCBJKCA0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjEsIEsxLCBJKCA1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEsxLCBJKCA2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjEsIEsxLCBJKCA3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjEsIEsxLCBJKCA4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjEsIEsxLCBJKCA5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjEsIEsxLCBJKDEwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEsxLCBJKDExKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjEsIEsxLCBJKDEyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjEsIEsxLCBJKDEzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjEsIEsxLCBJKDE0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjEsIEsxLCBJKDE1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjEsIEsxLCBNKDE2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjEsIEsxLCBNKDE3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjEsIEsxLCBNKDE4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjEsIEsxLCBNKDE5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjIsIEsyLCBNKDIwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjIsIEsyLCBNKDIxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEsyLCBNKDIyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEsyLCBNKDIzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjIsIEsyLCBNKDI0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjIsIEsyLCBNKDI1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjIsIEsyLCBNKDI2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEsyLCBNKDI3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEsyLCBNKDI4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjIsIEsyLCBNKDI5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjIsIEsyLCBNKDMwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjIsIEsyLCBNKDMxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEsyLCBNKDMyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEsyLCBNKDMzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjIsIEsyLCBNKDM0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjIsIEsyLCBNKDM1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjIsIEsyLCBNKDM2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjIsIEsyLCBNKDM3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjIsIEsyLCBNKDM4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjIsIEsyLCBNKDM5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEszLCBNKDQwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjMsIEszLCBNKDQxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjMsIEszLCBNKDQyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjMsIEszLCBNKDQzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEszLCBNKDQ0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEszLCBNKDQ1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjMsIEszLCBNKDQ2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjMsIEszLCBNKDQ3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjMsIEszLCBNKDQ4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEszLCBNKDQ5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEszLCBNKDUwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjMsIEszLCBNKDUxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjMsIEszLCBNKDUyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjMsIEszLCBNKDUzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEszLCBNKDU0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjMsIEszLCBNKDU1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjMsIEszLCBNKDU2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjMsIEszLCBNKDU3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjMsIEszLCBNKDU4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjMsIEszLCBNKDU5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjQsIEs0LCBNKDYwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjQsIEs0LCBNKDYxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjQsIEs0LCBNKDYyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEs0LCBNKDYzKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEs0LCBNKDY0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjQsIEs0LCBNKDY1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjQsIEs0LCBNKDY2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjQsIEs0LCBNKDY3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEs0LCBNKDY4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEs0LCBNKDY5KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjQsIEs0LCBNKDcwKSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjQsIEs0LCBNKDcxKSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjQsIEs0LCBNKDcyKSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEs0LCBNKDczKSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEs0LCBNKDc0KSApOworICAgICAgUiggYSwgYiwgYywgZCwgZSwgRjQsIEs0LCBNKDc1KSApOworICAgICAgUiggZSwgYSwgYiwgYywgZCwgRjQsIEs0LCBNKDc2KSApOworICAgICAgUiggZCwgZSwgYSwgYiwgYywgRjQsIEs0LCBNKDc3KSApOworICAgICAgUiggYywgZCwgZSwgYSwgYiwgRjQsIEs0LCBNKDc4KSApOworICAgICAgUiggYiwgYywgZCwgZSwgYSwgRjQsIEs0LCBNKDc5KSApOworCisgICAgICAvKiBVcGRhdGUgdGhlIGNoYWluaW5nIHZhcmlhYmxlcy4gKi8KKyAgICAgIGhkLT5oMCArPSBhOworICAgICAgaGQtPmgxICs9IGI7CisgICAgICBoZC0+aDIgKz0gYzsKKyAgICAgIGhkLT5oMyArPSBkOworICAgICAgaGQtPmg0ICs9IGU7CisKKyAgcmV0dXJuIC8qIGJ1cm5fc3RhY2sgKi8gODgrNCpzaXplb2Yodm9pZCopOworfQorCisKKyNpZmRlZiBVU0VfU1NTRTMKK3Vuc2lnbmVkIGludAorX2djcnlfc2hhMV90cmFuc2Zvcm1fYW1kNjRfc3NzZTMgKHZvaWQgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAodm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworICBTSEExX0NPTlRFWFQgKmhkID0gY3R4OworCisjaWZkZWYgVVNFX1NTU0UzCisgIGlmIChoZC0+dXNlX3Nzc2UzKQorICAgIHJldHVybiBfZ2NyeV9zaGExX3RyYW5zZm9ybV9hbWQ2NF9zc3NlMyAoJmhkLT5oMCwgZGF0YSkKKyAgICAgICAgICAgKyA0ICogc2l6ZW9mKHZvaWQqKTsKKyNlbmRpZgorCisgIHJldHVybiBfdHJhbnNmb3JtIChoZCwgZGF0YSk7Cit9CisKKworLyogVGhlIHJvdXRpbmUgZmluYWwgdGVybWluYXRlcyB0aGUgY29tcHV0YXRpb24gYW5kCisgKiByZXR1cm5zIHRoZSBkaWdlc3QuCisgKiBUaGUgaGFuZGxlIGlzIHByZXBhcmVkIGZvciBhIG5ldyBjeWNsZSwgYnV0IGFkZGluZyBieXRlcyB0byB0aGUKKyAqIGhhbmRsZSB3aWxsIHRoZSBkZXN0cm95IHRoZSByZXR1cm5lZCBidWZmZXIuCisgKiBSZXR1cm5zOiAyMCBieXRlcyByZXByZXNlbnRpbmcgdGhlIGRpZ2VzdC4KKyAqLworCitzdGF0aWMgdm9pZAorc2hhMV9maW5hbCh2b2lkICpjb250ZXh0KQoreworICBTSEExX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKyAgdTMyIHQsIHRoLCBtc2IsIGxzYjsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IGJ1cm47CisKKyAgX2djcnlfbWRfYmxvY2tfd3JpdGUgKGhkLCBOVUxMLCAwKTsgLyogZmx1c2ggKi87CisKKyAgdCA9IGhkLT5iY3R4Lm5ibG9ja3M7CisgIGlmIChzaXplb2YgdCA9PSBzaXplb2YgaGQtPmJjdHgubmJsb2NrcykKKyAgICB0aCA9IGhkLT5iY3R4Lm5ibG9ja3NfaGlnaDsKKyAgZWxzZQorICAgIHRoID0gaGQtPmJjdHgubmJsb2NrcyA+PiAzMjsKKworICAvKiBtdWx0aXBseSBieSA2NCB0byBtYWtlIGEgYnl0ZSBjb3VudCAqLworICBsc2IgPSB0IDw8IDY7CisgIG1zYiA9ICh0aCA8PCA2KSB8ICh0ID4+IDI2KTsKKyAgLyogYWRkIHRoZSBjb3VudCAqLworICB0ID0gbHNiOworICBpZiggKGxzYiArPSBoZC0+YmN0eC5jb3VudCkgPCB0ICkKKyAgICBtc2IrKzsKKyAgLyogbXVsdGlwbHkgYnkgOCB0byBtYWtlIGEgYml0IGNvdW50ICovCisgIHQgPSBsc2I7CisgIGxzYiA8PD0gMzsKKyAgbXNiIDw8PSAzOworICBtc2IgfD0gdCA+PiAyOTsKKworICBpZiggaGQtPmJjdHguY291bnQgPCA1NiApICAvKiBlbm91Z2ggcm9vbSAqLworICAgIHsKKyAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCAqLworICAgICAgd2hpbGUoIGhkLT5iY3R4LmNvdW50IDwgNTYgKQorICAgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAwOyAgLyogcGFkICovCisgICAgfQorICBlbHNlICAvKiBuZWVkIG9uZSBleHRyYSBibG9jayAqLworICAgIHsKKyAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCBjaGFyYWN0ZXIgKi8KKyAgICAgIHdoaWxlKCBoZC0+YmN0eC5jb3VudCA8IDY0ICkKKyAgICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMDsKKyAgICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlKGhkLCBOVUxMLCAwKTsgIC8qIGZsdXNoICovOworICAgICAgbWVtc2V0KGhkLT5iY3R4LmJ1ZiwgMCwgNTYgKTsgLyogZmlsbCBuZXh0IGJsb2NrIHdpdGggemVyb2VzICovCisgICAgfQorICAvKiBhcHBlbmQgdGhlIDY0IGJpdCBjb3VudCAqLworICBidWZfcHV0X2JlMzIoaGQtPmJjdHguYnVmICsgNTYsIG1zYik7CisgIGJ1Zl9wdXRfYmUzMihoZC0+YmN0eC5idWYgKyA2MCwgbHNiKTsKKyAgYnVybiA9IHRyYW5zZm9ybSggaGQsIGhkLT5iY3R4LmJ1ZiApOworICBfZ2NyeV9idXJuX3N0YWNrIChidXJuKTsKKworICBwID0gaGQtPmJjdHguYnVmOworI2RlZmluZSBYKGEpIGRvIHsgKih1MzIqKXAgPSBiZV9ic3dhcDMyKGhkLT5oIyNhKSA7IHAgKz0gNDsgfSB3aGlsZSgwKQorICBYKDApOworICBYKDEpOworICBYKDIpOworICBYKDMpOworICBYKDQpOworI3VuZGVmIFgKKworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqCitzaGExX3JlYWQoIHZvaWQgKmNvbnRleHQgKQoreworICBTSEExX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICByZXR1cm4gaGQtPmJjdHguYnVmOworfQorCisvKioqKioqKioqKioqKioqKgorICogU2hvcnRjdXQgZnVuY3Rpb25zIHdoaWNoIHB1dHMgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIHN1cHBsaWVkIGJ1ZmZlcgorICogaW50byBvdXRidWYgd2hpY2ggbXVzdCBoYXZlIGEgc2l6ZSBvZiAyMCBieXRlcy4KKyAqLwordm9pZAorX2djcnlfc2hhMV9oYXNoX2J1ZmZlciAodm9pZCAqb3V0YnVmLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIFNIQTFfQ09OVEVYVCBoZDsKKworICBzaGExX2luaXQgKCZoZCwgMCk7CisgIF9nY3J5X21kX2Jsb2NrX3dyaXRlICgmaGQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgc2hhMV9maW5hbCAoJmhkKTsKKyAgbWVtY3B5IChvdXRidWYsIGhkLmJjdHguYnVmLCAyMCk7Cit9CisKKworLyogVmFyaWFudCBvZiB0aGUgYWJvdmUgc2hvcnRjdXQgZnVuY3Rpb24gdXNpbmcgYSBtdWx0aXBsZSBidWZmZXJzLiAgKi8KK3ZvaWQKK19nY3J5X3NoYTFfaGFzaF9idWZmZXJzICh2b2lkICpvdXRidWYsIGNvbnN0IGdjcnlfYnVmZmVyX3QgKmlvdiwgaW50IGlvdmNudCkKK3sKKyAgU0hBMV9DT05URVhUIGhkOworCisgIHNoYTFfaW5pdCAoJmhkLCAwKTsKKyAgZm9yICg7aW92Y250ID4gMDsgaW92KyssIGlvdmNudC0tKQorICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlICgmaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilpb3ZbMF0uZGF0YSArIGlvdlswXS5vZmYsIGlvdlswXS5sZW4pOworICBzaGExX2ZpbmFsICgmaGQpOworICBtZW1jcHkgKG91dGJ1ZiwgaGQuYmN0eC5idWYsIDIwKTsKK30KKworCisMCisvKgorICAgICBTZWxmLXRlc3Qgc2VjdGlvbi4KKyAqLworCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTEgKGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIGNvbnN0IGNoYXIgKmVycnR4dDsKKworICB3aGF0ID0gInNob3J0IHN0cmluZyI7CisgIGVycnR4dCA9IF9nY3J5X2hhc2hfc2VsZnRlc3RfY2hlY2tfb25lCisgICAgKEdDUllfTURfU0hBMSwgMCwKKyAgICAgImFiYyIsIDMsCisgICAgICJceEE5XHg5OVx4M0VceDM2XHg0N1x4MDZceDgxXHg2QVx4QkFceDNFIgorICAgICAiXHgyNVx4NzFceDc4XHg1MFx4QzJceDZDXHg5Q1x4RDBceEQ4XHg5RCIsIDIwKTsKKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworICBpZiAoZXh0ZW5kZWQpCisgICAgeworICAgICAgd2hhdCA9ICJsb25nIHN0cmluZyI7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorICAgICAgICAoR0NSWV9NRF9TSEExLCAwLAorICAgICAgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwgNTYsCisgICAgICAgICAiXHg4NFx4OThceDNFXHg0NFx4MUNceDNCXHhEMlx4NkVceEJBXHhBRSIKKyAgICAgICAgICJceDRBXHhBMVx4RjlceDUxXHgyOVx4RTVceEU1XHg0Nlx4NzBceEYxIiwgMjApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICAgIHdoYXQgPSAib25lIG1pbGxpb24gXCJhXCIiOworICAgICAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAgICAgKEdDUllfTURfU0hBMSwgMSwKKyAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAiXHgzNFx4QUFceDk3XHgzQ1x4RDRceEM0XHhEQVx4QTRceEY2XHgxRSIKKyAgICAgICAgICJceEVCXHgyQlx4REJceEFEXHgyN1x4MzFceDY1XHgzNFx4MDFceDZGIiwgMjApOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiZGlnZXN0IiwgR0NSWV9NRF9TSEExLCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworLyogUnVuIGEgZnVsbCBzZWxmLXRlc3QgZm9yIEFMR08gYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitydW5fc2VsZnRlc3RzIChpbnQgYWxnbywgaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZWM7CisKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIEdDUllfTURfU0hBMToKKyAgICAgIGVjID0gc2VsZnRlc3RzX3NoYTEgKGV4dGVuZGVkLCByZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgIGJyZWFrOworCisgICAgfQorICByZXR1cm4gZWM7Cit9CisKKworCisMCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc25bMTVdID0gLyogT2JqZWN0IElEIGlzIDEuMy4xNC4zLjIuMjYgKi8KKyAgeyAweDMwLCAweDIxLCAweDMwLCAweDA5LCAweDA2LCAweDA1LCAweDJiLCAweDBlLCAweDAzLAorICAgIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MTQgfTsKKworc3RhdGljIGdjcnlfbWRfb2lkX3NwZWNfdCBvaWRfc3BlY19zaGExW10gPQorICB7CisgICAgLyogaXNvLm1lbWJlci1ib2R5LnVzLnJzYWRzaS5wa2NzLnBrY3MtMS41IChzaGExV2l0aFJTQUVuY3J5cHRpb24pICovCisgICAgeyAiMS4yLjg0MC4xMTM1NDkuMS4xLjUiIH0sCisgICAgLyogaXNvLm1lbWJlci1ib2R5LnVzLng5LTU3Lng5Y20uMyAoZHNhV2l0aFNoYTEpKi8KKyAgICB7ICIxLjIuODQwLjEwMDQwLjQuMyIgfSwKKyAgICAvKiBmcm9tIE5JU1QncyBPSVcgIChzaGExKSAqLworICAgIHsgIjEuMy4xNC4zLjIuMjYiIH0sCisgICAgLyogZnJvbSBOSVNUIE9JVyAoc2hhLTFXaXRoUlNBRW5jcnlwdGlvbikgKi8KKyAgICB7ICIxLjMuMTQuMy4yLjI5IiB9LAorICAgIC8qIGlzby5tZW1iZXItYm9keS51cy5hbnNpLXg5LTYyLnNpZ25hdHVyZXMuZWNkc2Etd2l0aC1zaGExICovCisgICAgeyAiMS4yLjg0MC4xMDA0NS40LjEiIH0sCisgICAgeyBOVUxMIH0sCisgIH07CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTEgPQorICB7CisgICAgR0NSWV9NRF9TSEExLCB7MCwgMX0sCisgICAgIlNIQTEiLCBhc24sIERJTSAoYXNuKSwgb2lkX3NwZWNfc2hhMSwgMjAsCisgICAgc2hhMV9pbml0LCBfZ2NyeV9tZF9ibG9ja193cml0ZSwgc2hhMV9maW5hbCwgc2hhMV9yZWFkLAorICAgIHNpemVvZiAoU0hBMV9DT05URVhUKSwKKyAgICBydW5fc2VsZnRlc3RzCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvc2hhMjU2LXNzc2UzLWFtZDY0LlMgYi9jaXBoZXIvc2hhMjU2LXNzc2UzLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyN2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zaGEyNTYtc3NzZTMtYW1kNjQuUwpAQCAtMCwwICsxLDU0MCBAQAorLyoKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCis7Cis7IEFsbCByaWdodHMgcmVzZXJ2ZWQuCis7Cis7IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCis7IG1ldDoKKzsKKzsgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorOyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzsKKzsgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorOyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKzsgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKzsgICBkaXN0cmlidXRpb24uCis7Cis7ICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKzsgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorOyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis7Cis7Cis7IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5URUwgQ09SUE9SQVRJT04gIkFTIElTIiBBTkQgQU5ZCis7IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCis7IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFTCBDT1JQT1JBVElPTiBPUgorOyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKzsgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKzsgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorOyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworOyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKzsgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzsKKzsgVGhpcyBjb2RlIGlzIGRlc2NyaWJlZCBpbiBhbiBJbnRlbCBXaGl0ZS1QYXBlcjoKKzsgIkZhc3QgU0hBLTI1NiBJbXBsZW1lbnRhdGlvbnMgb24gSW50ZWwgQXJjaGl0ZWN0dXJlIFByb2Nlc3NvcnMiCis7Cis7IFRvIGZpbmQgaXQsIHN1cmYgdG8gaHR0cDovL3d3dy5pbnRlbC5jb20vcC9lbl9VUy9lbWJlZGRlZAorOyBhbmQgc2VhcmNoIGZvciB0aGF0IHRpdGxlLgorOyBUaGUgcGFwZXIgaXMgZXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgcm91Z2hseSBhdCB0aGUgZW5kIG9mIEFwcmlsLCAyMDEyCis7Cis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzsgVGhpcyBjb2RlIHNjaGVkdWxlcyAxIGJsb2NrcyBhdCBhIHRpbWUsIHdpdGggNCBsYW5lcyBwZXIgYmxvY2sKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworKi8KKy8qCisgKiBDb252ZXJzaW9uIHRvIEdBUyBhc3NlbWJseSBhbmQgaW50ZWdyYXRpb24gdG8gbGliZ2NyeXB0CisgKiAgYnkgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIE5vdGU6IG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdhcyBuYW1lZCBhcyBTSEEyNTYtU1NFNC4gSG93ZXZlciwgb25seSBTU1NFMworICogICAgICAgaXMgcmVxdWlyZWQuCisgKi8KKworI2lmZGVmIF9feDg2XzY0CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0lOVEVMX1NZTlRBWF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9TU1NFMykgJiYgZGVmaW5lZChVU0VfU0hBMjU2KQorCisjaWZkZWYgX19QSUNfXworIyAgZGVmaW5lIEFERF9SSVAgK3JpcAorI2Vsc2UKKyMgIGRlZmluZSBBRERfUklQCisjZW5kaWYKKworLmludGVsX3N5bnRheCBub3ByZWZpeAorCisjZGVmaW5lCU1PVkRRIG1vdmRxdSAvKiBhc3N1bWUgYnVmZmVycyBub3QgYWxpZ25lZCAqLworCisvKjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IERlZmluZSBNYWNyb3MqLworCisvKiBhZGRtIFttZW1dLCByZWcKKyAqIEFkZCByZWcgdG8gbWVtIHVzaW5nIHJlZy1tZW0gYWRkIGFuZCBzdG9yZSAqLworLm1hY3JvIGFkZG0gcDEgcDIKKwlhZGQJXHAyLCBccDEKKwltb3YJXHAxLCBccDIKKy5lbmRtCisKKy8qOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsqLworCisvKiBDT1BZX1hNTV9BTkRfQlNXQVAgeG1tLCBbbWVtXSwgYnl0ZV9mbGlwX21hc2sKKyAqIExvYWQgeG1tIHdpdGggbWVtIGFuZCBieXRlIHN3YXAgZWFjaCBkd29yZCAqLworLm1hY3JvIENPUFlfWE1NX0FORF9CU1dBUCBwMSBwMiBwMworCU1PVkRRIFxwMSwgXHAyCisJcHNodWZiIFxwMSwgXHAzCisuZW5kbQorCisvKjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ki8KKworWDAgPSB4bW00CitYMSA9IHhtbTUKK1gyID0geG1tNgorWDMgPSB4bW03CisKK1hUTVAwID0geG1tMAorWFRNUDEgPSB4bW0xCitYVE1QMiA9IHhtbTIKK1hUTVAzID0geG1tMworWFRNUDQgPSB4bW04CitYRkVSICA9IHhtbTkKKworU0hVRl8wMEJBID0geG1tMTAgLyogc2h1ZmZsZSB4QnhBIC0+IDAwQkEgKi8KK1NIVUZfREMwMCA9IHhtbTExIC8qIHNodWZmbGUgeER4QyAtPiBEQzAwICovCitCWVRFX0ZMSVBfTUFTSyA9IHhtbTEyCisKK05VTV9CTEtTID0gcmR4CS8qIDNyZCBhcmcgKi8KK0NUWCA9IHJzaQkvKiAybmQgYXJnICovCitJTlAgPSByZGkJLyogMXN0IGFyZyAqLworCitTUk5EID0gcmRpCS8qIGNsb2JiZXJzIElOUCAqLworYyA9IGVjeAorZCA9IHI4ZAorZSA9IGVkeAorCitUQkwgPSByYnAKK2EgPSBlYXgKK2IgPSBlYngKKworZiA9IHI5ZAorZyA9IHIxMGQKK2ggPSByMTFkCisKK3kwID0gcjEzZAoreTEgPSByMTRkCit5MiA9IHIxNWQKKworCisKKyNkZWZpbmUgX0lOUF9FTkRfU0laRQk4CisjZGVmaW5lIF9JTlBfU0laRQk4CisjZGVmaW5lIF9YRkVSX1NJWkUJOAorI2RlZmluZSBfWE1NX1NBVkVfU0laRQkwCisvKiBTVEFDS19TSVpFIHBsdXMgcHVzaGVzIG11c3QgYmUgYW4gb2RkIG11bHRpcGxlIG9mIDggKi8KKyNkZWZpbmUgX0FMSUdOX1NJWkUJOAorCisjZGVmaW5lIF9JTlBfRU5ECTAKKyNkZWZpbmUgX0lOUAkJKF9JTlBfRU5EICArIF9JTlBfRU5EX1NJWkUpCisjZGVmaW5lIF9YRkVSCQkoX0lOUCAgICAgICsgX0lOUF9TSVpFKQorI2RlZmluZSBfWE1NX1NBVkUJKF9YRkVSICAgICArIF9YRkVSX1NJWkUgKyBfQUxJR05fU0laRSkKKyNkZWZpbmUgU1RBQ0tfU0laRQkoX1hNTV9TQVZFICsgX1hNTV9TQVZFX1NJWkUpCisKKy8qIHJvdGF0ZV9YcworICogUm90YXRlIHZhbHVlcyBvZiBzeW1ib2xzIFgwLi4uWDMgKi8KKy5tYWNybyByb3RhdGVfWHMKK1hfID0gWDAKK1gwID0gWDEKK1gxID0gWDIKK1gyID0gWDMKK1gzID0gWF8KKy5lbmRtCisKKy8qIFJPVEFURV9BUkdTCisgKiBSb3RhdGUgdmFsdWVzIG9mIHN5bWJvbHMgYS4uLmggKi8KKy5tYWNybyBST1RBVEVfQVJHUworVE1QXyA9IGgKK2ggPSBnCitnID0gZgorZiA9IGUKK2UgPSBkCitkID0gYworYyA9IGIKK2IgPSBhCithID0gVE1QXworLmVuZG0KKworLm1hY3JvIEZPVVJfUk9VTkRTX0FORF9TQ0hFRAorCQkvKiBjb21wdXRlIHMwIGZvdXIgYXQgYSB0aW1lIGFuZCBzMSB0d28gYXQgYSB0aW1lCisJCSAqIGNvbXB1dGUgV1stMTZdICsgV1stN10gNCBhdCBhIHRpbWUgKi8KKwkJbW92ZHFhCVhUTVAwLCBYMworCW1vdgl5MCwgZQkJLyogeTAgPSBlICovCisJcm9yCXkwLCAoMjUtMTEpCS8qIHkwID0gZSA+PiAoMjUtMTEpICovCisJbW92CXkxLCBhCQkvKiB5MSA9IGEgKi8KKwkJcGFsaWducglYVE1QMCwgWDIsIDQJLyogWFRNUDAgPSBXWy03XSAqLworCXJvcgl5MSwgKDIyLTEzKQkvKiB5MSA9IGEgPj4gKDIyLTEzKSAqLworCXhvcgl5MCwgZQkJLyogeTAgPSBlIF4gKGUgPj4gKDI1LTExKSkgKi8KKwltb3YJeTIsIGYJCS8qIHkyID0gZiAqLworCXJvcgl5MCwgKDExLTYpCS8qIHkwID0gKGUgPj4gKDExLTYpKSBeIChlID4+ICgyNS02KSkgKi8KKwkJbW92ZHFhCVhUTVAxLCBYMQorCXhvcgl5MSwgYQkJLyogeTEgPSBhIF4gKGEgPj4gKDIyLTEzKSAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBmXmcgKi8KKwkJcGFkZGQJWFRNUDAsIFgwCS8qIFhUTVAwID0gV1stN10gKyBXWy0xNl0gKi8KKwl4b3IJeTAsIGUJCS8qIHkwID0gZSBeIChlID4+ICgxMS02KSkgXiAoZSA+PiAoMjUtNikpICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgKi8KKwlyb3IJeTEsICgxMy0yKQkvKiB5MSA9IChhID4+ICgxMy0yKSkgXiAoYSA+PiAoMjItMikpICovCisJCS8qIGNvbXB1dGUgczAgKi8KKwkJcGFsaWducglYVE1QMSwgWDAsIDQJLyogWFRNUDEgPSBXWy0xNV0gKi8KKwl4b3IJeTEsIGEJCS8qIHkxID0gYSBeIChhID4+ICgxMy0yKSkgXiAoYSA+PiAoMjItMikpICovCisJcm9yCXkwLCA2CQkvKiB5MCA9IFMxID0gKGU+PjYpICYgKGU+PjExKSBeIChlPj4yNSkgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAqLworCQltb3ZkcWEJWFRNUDIsIFhUTVAxCS8qIFhUTVAyID0gV1stMTVdICovCisJcm9yCXkxLCAyCQkvKiB5MSA9IFMwID0gKGE+PjIpIF4gKGE+PjEzKSBeIChhPj4yMikgKi8KKwlhZGQJeTIsIHkwCQkvKiB5MiA9IFMxICsgQ0ggKi8KKwlhZGQJeTIsIFtyc3AgKyBfWEZFUiArIDAqNF0JLyogeTIgPSBrICsgdyArIFMxICsgQ0ggKi8KKwkJbW92ZHFhCVhUTVAzLCBYVE1QMQkvKiBYVE1QMyA9IFdbLTE1XSAqLworCW1vdgl5MCwgYQkJLyogeTAgPSBhICovCisJYWRkCWgsIHkyCQkvKiBoID0gaCArIFMxICsgQ0ggKyBrICsgdyAqLworCW1vdgl5MiwgYQkJLyogeTIgPSBhICovCisJCXBzbGxkCVhUTVAxLCAoMzItNykKKwlvcgl5MCwgYwkJLyogeTAgPSBhfGMgKi8KKwlhZGQJZCwgaAkJLyogZCA9IGQgKyBoICsgUzEgKyBDSCArIGsgKyB3ICovCisJYW5kCXkyLCBjCQkvKiB5MiA9IGEmYyAqLworCQlwc3JsZAlYVE1QMiwgNworCWFuZAl5MCwgYgkJLyogeTAgPSAoYXxjKSZiICovCisJYWRkCWgsIHkxCQkvKiBoID0gaCArIFMxICsgQ0ggKyBrICsgdyArIFMwICovCisJCXBvcglYVE1QMSwgWFRNUDIJLyogWFRNUDEgPSBXWy0xNV0gcm9yIDcgKi8KKwlvcgl5MCwgeTIJCS8qIHkwID0gTUFKID0gKGF8YykmYil8KGEmYykgKi8KKwlhZGQJaCwgeTAJCS8qIGggPSBoICsgUzEgKyBDSCArIGsgKyB3ICsgUzAgKyBNQUogKi8KKworUk9UQVRFX0FSR1MKKwkJbW92ZHFhCVhUTVAyLCBYVE1QMwkvKiBYVE1QMiA9IFdbLTE1XSAqLworCW1vdgl5MCwgZQkJLyogeTAgPSBlICovCisJbW92CXkxLCBhCQkvKiB5MSA9IGEgKi8KKwkJbW92ZHFhCVhUTVA0LCBYVE1QMwkvKiBYVE1QNCA9IFdbLTE1XSAqLworCXJvcgl5MCwgKDI1LTExKQkvKiB5MCA9IGUgPj4gKDI1LTExKSAqLworCXhvcgl5MCwgZQkJLyogeTAgPSBlIF4gKGUgPj4gKDI1LTExKSkgKi8KKwltb3YJeTIsIGYJCS8qIHkyID0gZiAqLworCXJvcgl5MSwgKDIyLTEzKQkvKiB5MSA9IGEgPj4gKDIyLTEzKSAqLworCQlwc2xsZAlYVE1QMywgKDMyLTE4KQorCXhvcgl5MSwgYQkJLyogeTEgPSBhIF4gKGEgPj4gKDIyLTEzKSAqLworCXJvcgl5MCwgKDExLTYpCS8qIHkwID0gKGUgPj4gKDExLTYpKSBeIChlID4+ICgyNS02KSkgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICovCisJCXBzcmxkCVhUTVAyLCAxOAorCXJvcgl5MSwgKDEzLTIpCS8qIHkxID0gKGEgPj4gKDEzLTIpKSBeIChhID4+ICgyMi0yKSkgKi8KKwl4b3IJeTAsIGUJCS8qIHkwID0gZSBeIChlID4+ICgxMS02KSkgXiAoZSA+PiAoMjUtNikpICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgKi8KKwlyb3IJeTAsIDYJCS8qIHkwID0gUzEgPSAoZT4+NikgJiAoZT4+MTEpIF4gKGU+PjI1KSAqLworCQlweG9yCVhUTVAxLCBYVE1QMworCXhvcgl5MSwgYQkJLyogeTEgPSBhIF4gKGEgPj4gKDEzLTIpKSBeIChhID4+ICgyMi0yKSkgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAqLworCQlwc3JsZAlYVE1QNCwgMwkvKiBYVE1QNCA9IFdbLTE1XSA+PiAzICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICovCisJYWRkCXkyLCBbcnNwICsgX1hGRVIgKyAxKjRdCS8qIHkyID0gayArIHcgKyBTMSArIENIICovCisJcm9yCXkxLCAyCQkvKiB5MSA9IFMwID0gKGE+PjIpIF4gKGE+PjEzKSBeIChhPj4yMikgKi8KKwkJcHhvcglYVE1QMSwgWFRNUDIJLyogWFRNUDEgPSBXWy0xNV0gcm9yIDcgXiBXWy0xNV0gcm9yIDE4ICovCisJbW92CXkwLCBhCQkvKiB5MCA9IGEgKi8KKwlhZGQJaCwgeTIJCS8qIGggPSBoICsgUzEgKyBDSCArIGsgKyB3ICovCisJbW92CXkyLCBhCQkvKiB5MiA9IGEgKi8KKwkJcHhvcglYVE1QMSwgWFRNUDQJLyogWFRNUDEgPSBzMCAqLworCW9yCXkwLCBjCQkvKiB5MCA9IGF8YyAqLworCWFkZAlkLCBoCQkvKiBkID0gZCArIGggKyBTMSArIENIICsgayArIHcgKi8KKwlhbmQJeTIsIGMJCS8qIHkyID0gYSZjICovCisJCS8qIGNvbXB1dGUgbG93IHMxICovCisJCXBzaHVmZAlYVE1QMiwgWDMsIDBiMTExMTEwMTAJLyogWFRNUDIgPSBXWy0yXSB7QkJBQX0gKi8KKwlhbmQJeTAsIGIJCS8qIHkwID0gKGF8YykmYiAqLworCWFkZAloLCB5MQkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKyBTMCAqLworCQlwYWRkZAlYVE1QMCwgWFRNUDEJLyogWFRNUDAgPSBXWy0xNl0gKyBXWy03XSArIHMwICovCisJb3IJeTAsIHkyCQkvKiB5MCA9IE1BSiA9IChhfGMpJmIpfChhJmMpICovCisJYWRkCWgsIHkwCQkvKiBoID0gaCArIFMxICsgQ0ggKyBrICsgdyArIFMwICsgTUFKICovCisKK1JPVEFURV9BUkdTCisJCW1vdmRxYQlYVE1QMywgWFRNUDIJLyogWFRNUDMgPSBXWy0yXSB7QkJBQX0gKi8KKwltb3YJeTAsIGUJCS8qIHkwID0gZSAqLworCW1vdgl5MSwgYQkJLyogeTEgPSBhICovCisJcm9yCXkwLCAoMjUtMTEpCS8qIHkwID0gZSA+PiAoMjUtMTEpICovCisJCW1vdmRxYQlYVE1QNCwgWFRNUDIJLyogWFRNUDQgPSBXWy0yXSB7QkJBQX0gKi8KKwl4b3IJeTAsIGUJCS8qIHkwID0gZSBeIChlID4+ICgyNS0xMSkpICovCisJcm9yCXkxLCAoMjItMTMpCS8qIHkxID0gYSA+PiAoMjItMTMpICovCisJbW92CXkyLCBmCQkvKiB5MiA9IGYgKi8KKwl4b3IJeTEsIGEJCS8qIHkxID0gYSBeIChhID4+ICgyMi0xMykgKi8KKwlyb3IJeTAsICgxMS02KQkvKiB5MCA9IChlID4+ICgxMS02KSkgXiAoZSA+PiAoMjUtNikpICovCisJCXBzcmxxCVhUTVAyLCAxNwkvKiBYVE1QMiA9IFdbLTJdIHJvciAxNyB7eEJ4QX0gKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICovCisJCXBzcmxxCVhUTVAzLCAxOQkvKiBYVE1QMyA9IFdbLTJdIHJvciAxOSB7eEJ4QX0gKi8KKwl4b3IJeTAsIGUJCS8qIHkwID0gZSBeIChlID4+ICgxMS02KSkgXiAoZSA+PiAoMjUtNikpICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgKi8KKwkJcHNybGQJWFRNUDQsIDEwCS8qIFhUTVA0ID0gV1stMl0gPj4gMTAge0JCQUF9ICovCisJcm9yCXkxLCAoMTMtMikJLyogeTEgPSAoYSA+PiAoMTMtMikpIF4gKGEgPj4gKDIyLTIpKSAqLworCXhvcgl5MSwgYQkJLyogeTEgPSBhIF4gKGEgPj4gKDEzLTIpKSBeIChhID4+ICgyMi0yKSkgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAqLworCXJvcgl5MCwgNgkJLyogeTAgPSBTMSA9IChlPj42KSAmIChlPj4xMSkgXiAoZT4+MjUpICovCisJCXB4b3IJWFRNUDIsIFhUTVAzCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICovCisJcm9yCXkxLCAyCQkvKiB5MSA9IFMwID0gKGE+PjIpIF4gKGE+PjEzKSBeIChhPj4yMikgKi8KKwlhZGQJeTIsIFtyc3AgKyBfWEZFUiArIDIqNF0JLyogeTIgPSBrICsgdyArIFMxICsgQ0ggKi8KKwkJcHhvcglYVE1QNCwgWFRNUDIJLyogWFRNUDQgPSBzMSB7eEJ4QX0gKi8KKwltb3YJeTAsIGEJCS8qIHkwID0gYSAqLworCWFkZAloLCB5MgkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKi8KKwltb3YJeTIsIGEJCS8qIHkyID0gYSAqLworCQlwc2h1ZmIJWFRNUDQsIFNIVUZfMDBCQQkvKiBYVE1QNCA9IHMxIHswMEJBfSAqLworCW9yCXkwLCBjCQkvKiB5MCA9IGF8YyAqLworCWFkZAlkLCBoCQkvKiBkID0gZCArIGggKyBTMSArIENIICsgayArIHcgKi8KKwlhbmQJeTIsIGMJCS8qIHkyID0gYSZjICovCisJCXBhZGRkCVhUTVAwLCBYVE1QNAkvKiBYVE1QMCA9IHsuLi4sIC4uLiwgV1sxXSwgV1swXX0gKi8KKwlhbmQJeTAsIGIJCS8qIHkwID0gKGF8YykmYiAqLworCWFkZAloLCB5MQkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKyBTMCAqLworCQkvKiBjb21wdXRlIGhpZ2ggczEgKi8KKwkJcHNodWZkCVhUTVAyLCBYVE1QMCwgMGIwMTAxMDAwMCAvKiBYVE1QMiA9IFdbLTJdIHtERENDfSAqLworCW9yCXkwLCB5MgkJLyogeTAgPSBNQUogPSAoYXxjKSZiKXwoYSZjKSAqLworCWFkZAloLCB5MAkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKyBTMCArIE1BSiAqLworCitST1RBVEVfQVJHUworCQltb3ZkcWEJWFRNUDMsIFhUTVAyCS8qIFhUTVAzID0gV1stMl0ge0REQ0N9ICovCisJbW92CXkwLCBlCQkvKiB5MCA9IGUgKi8KKwlyb3IJeTAsICgyNS0xMSkJLyogeTAgPSBlID4+ICgyNS0xMSkgKi8KKwltb3YJeTEsIGEJCS8qIHkxID0gYSAqLworCQltb3ZkcWEJWDAsICAgIFhUTVAyCS8qIFgwICAgID0gV1stMl0ge0REQ0N9ICovCisJcm9yCXkxLCAoMjItMTMpCS8qIHkxID0gYSA+PiAoMjItMTMpICovCisJeG9yCXkwLCBlCQkvKiB5MCA9IGUgXiAoZSA+PiAoMjUtMTEpKSAqLworCW1vdgl5MiwgZgkJLyogeTIgPSBmICovCisJcm9yCXkwLCAoMTEtNikJLyogeTAgPSAoZSA+PiAoMTEtNikpIF4gKGUgPj4gKDI1LTYpKSAqLworCQlwc3JscQlYVE1QMiwgMTcJLyogWFRNUDIgPSBXWy0yXSByb3IgMTcge3hEeEN9ICovCisJeG9yCXkxLCBhCQkvKiB5MSA9IGEgXiAoYSA+PiAoMjItMTMpICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IGZeZyAqLworCQlwc3JscQlYVE1QMywgMTkJLyogWFRNUDMgPSBXWy0yXSByb3IgMTkge3hEeEN9ICovCisJeG9yCXkwLCBlCQkvKiB5MCA9IGUgXiAoZSA+PiAoMTEtNikpIF4gKGUgPj4gKDI1LTYpKSAqLworCWFuZAl5MiwgZQkJLyogeTIgPSAoZl5nKSZlICovCisJcm9yCXkxLCAoMTMtMikJLyogeTEgPSAoYSA+PiAoMTMtMikpIF4gKGEgPj4gKDIyLTIpKSAqLworCQlwc3JsZAlYMCwgICAgMTAJLyogWDAgPSBXWy0yXSA+PiAxMCB7RERDQ30gKi8KKwl4b3IJeTEsIGEJCS8qIHkxID0gYSBeIChhID4+ICgxMy0yKSkgXiAoYSA+PiAoMjItMikpICovCisJcm9yCXkwLCA2CQkvKiB5MCA9IFMxID0gKGU+PjYpICYgKGU+PjExKSBeIChlPj4yNSkgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAqLworCQlweG9yCVhUTVAyLCBYVE1QMworCXJvcgl5MSwgMgkJLyogeTEgPSBTMCA9IChhPj4yKSBeIChhPj4xMykgXiAoYT4+MjIpICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICovCisJYWRkCXkyLCBbcnNwICsgX1hGRVIgKyAzKjRdCS8qIHkyID0gayArIHcgKyBTMSArIENIICovCisJCXB4b3IJWDAsIFhUTVAyCS8qIFgwID0gczEge3hEeEN9ICovCisJbW92CXkwLCBhCQkvKiB5MCA9IGEgKi8KKwlhZGQJaCwgeTIJCS8qIGggPSBoICsgUzEgKyBDSCArIGsgKyB3ICovCisJbW92CXkyLCBhCQkvKiB5MiA9IGEgKi8KKwkJcHNodWZiCVgwLCBTSFVGX0RDMDAJLyogWDAgPSBzMSB7REMwMH0gKi8KKwlvcgl5MCwgYwkJLyogeTAgPSBhfGMgKi8KKwlhZGQJZCwgaAkJLyogZCA9IGQgKyBoICsgUzEgKyBDSCArIGsgKyB3ICovCisJYW5kCXkyLCBjCQkvKiB5MiA9IGEmYyAqLworCQlwYWRkZAlYMCwgWFRNUDAJLyogWDAgPSB7V1szXSwgV1syXSwgV1sxXSwgV1swXX0gKi8KKwlhbmQJeTAsIGIJCS8qIHkwID0gKGF8YykmYiAqLworCWFkZAloLCB5MQkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKyBTMCAqLworCW9yCXkwLCB5MgkJLyogeTAgPSBNQUogPSAoYXxjKSZiKXwoYSZjKSAqLworCWFkZAloLCB5MAkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKyBTMCArIE1BSiAqLworCitST1RBVEVfQVJHUworcm90YXRlX1hzCisuZW5kbQorCisvKiBpbnB1dCBpcyBbcnNwICsgX1hGRVIgKyAlMSAqIDRdICovCisubWFjcm8gRE9fUk9VTkQgaTEKKwltb3YJeTAsIGUJCS8qIHkwID0gZSAqLworCXJvcgl5MCwgKDI1LTExKQkvKiB5MCA9IGUgPj4gKDI1LTExKSAqLworCW1vdgl5MSwgYQkJLyogeTEgPSBhICovCisJeG9yCXkwLCBlCQkvKiB5MCA9IGUgXiAoZSA+PiAoMjUtMTEpKSAqLworCXJvcgl5MSwgKDIyLTEzKQkvKiB5MSA9IGEgPj4gKDIyLTEzKSAqLworCW1vdgl5MiwgZgkJLyogeTIgPSBmICovCisJeG9yCXkxLCBhCQkvKiB5MSA9IGEgXiAoYSA+PiAoMjItMTMpICovCisJcm9yCXkwLCAoMTEtNikJLyogeTAgPSAoZSA+PiAoMTEtNikpIF4gKGUgPj4gKDI1LTYpKSAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBmXmcgKi8KKwl4b3IJeTAsIGUJCS8qIHkwID0gZSBeIChlID4+ICgxMS02KSkgXiAoZSA+PiAoMjUtNikpICovCisJcm9yCXkxLCAoMTMtMikJLyogeTEgPSAoYSA+PiAoMTMtMikpIF4gKGEgPj4gKDIyLTIpKSAqLworCWFuZAl5MiwgZQkJLyogeTIgPSAoZl5nKSZlICovCisJeG9yCXkxLCBhCQkvKiB5MSA9IGEgXiAoYSA+PiAoMTMtMikpIF4gKGEgPj4gKDIyLTIpKSAqLworCXJvcgl5MCwgNgkJLyogeTAgPSBTMSA9IChlPj42KSAmIChlPj4xMSkgXiAoZT4+MjUpICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IENIID0gKChmXmcpJmUpXmcgKi8KKwlhZGQJeTIsIHkwCQkvKiB5MiA9IFMxICsgQ0ggKi8KKwlyb3IJeTEsIDIJCS8qIHkxID0gUzAgPSAoYT4+MikgXiAoYT4+MTMpIF4gKGE+PjIyKSAqLworCWFkZAl5MiwgW3JzcCArIF9YRkVSICsgXGkxICogNF0JLyogeTIgPSBrICsgdyArIFMxICsgQ0ggKi8KKwltb3YJeTAsIGEJCS8qIHkwID0gYSAqLworCWFkZAloLCB5MgkJLyogaCA9IGggKyBTMSArIENIICsgayArIHcgKi8KKwltb3YJeTIsIGEJCS8qIHkyID0gYSAqLworCW9yCXkwLCBjCQkvKiB5MCA9IGF8YyAqLworCWFkZAlkLCBoCQkvKiBkID0gZCArIGggKyBTMSArIENIICsgayArIHcgKi8KKwlhbmQJeTIsIGMJCS8qIHkyID0gYSZjICovCisJYW5kCXkwLCBiCQkvKiB5MCA9IChhfGMpJmIgKi8KKwlhZGQJaCwgeTEJCS8qIGggPSBoICsgUzEgKyBDSCArIGsgKyB3ICsgUzAgKi8KKwlvcgl5MCwgeTIJCS8qIHkwID0gTUFKID0gKGF8YykmYil8KGEmYykgKi8KKwlhZGQJaCwgeTAJCS8qIGggPSBoICsgUzEgKyBDSCArIGsgKyB3ICsgUzAgKyBNQUogKi8KKwlST1RBVEVfQVJHUworLmVuZG0KKworLyoKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OyB2b2lkIHNoYTI1Nl9zc2U0KHZvaWQgKmlucHV0X2RhdGEsIFVJTlQzMiBkaWdlc3RbOF0sIFVJTlQ2NCBudW1fYmxrcykKKzs7IGFyZyAxIDogcG9pbnRlciB0byBpbnB1dCBkYXRhCis7OyBhcmcgMiA6IHBvaW50ZXIgdG8gZGlnZXN0Cis7OyBhcmcgMyA6IE51bSBibG9ja3MKKyovCisudGV4dAorLmdsb2JsIF9nY3J5X3NoYTI1Nl90cmFuc2Zvcm1fYW1kNjRfc3NzZTMKKy50eXBlICBfZ2NyeV9zaGEyNTZfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzLEBmdW5jdGlvbjsKKy5hbGlnbiAxNgorX2djcnlfc2hhMjU2X3RyYW5zZm9ybV9hbWQ2NF9zc3NlMzoKKwlwdXNoCXJieAorCXB1c2gJcmJwCisJcHVzaAlyMTMKKwlwdXNoCXIxNAorCXB1c2gJcjE1CisKKwlzdWIJcnNwLCBTVEFDS19TSVpFCisKKwlzaGwJTlVNX0JMS1MsIDYJLyogY29udmVydCB0byBieXRlcyAqLworCWp6CS5MZG9uZV9oYXNoCisJYWRkCU5VTV9CTEtTLCBJTlAJLyogcG9pbnRlciB0byBlbmQgb2YgZGF0YSAqLworCW1vdglbcnNwICsgX0lOUF9FTkRdLCBOVU1fQkxLUworCisJLyogbG9hZCBpbml0aWFsIGRpZ2VzdCAqLworCW1vdglhLFs0KjAgKyBDVFhdCisJbW92CWIsWzQqMSArIENUWF0KKwltb3YJYyxbNCoyICsgQ1RYXQorCW1vdglkLFs0KjMgKyBDVFhdCisJbW92CWUsWzQqNCArIENUWF0KKwltb3YJZixbNCo1ICsgQ1RYXQorCW1vdglnLFs0KjYgKyBDVFhdCisJbW92CWgsWzQqNyArIENUWF0KKworCW1vdmRxYQlCWVRFX0ZMSVBfTUFTSywgWy5MUFNIVUZGTEVfQllURV9GTElQX01BU0sgQUREX1JJUF0KKwltb3ZkcWEJU0hVRl8wMEJBLCBbLkxfU0hVRl8wMEJBIEFERF9SSVBdCisJbW92ZHFhCVNIVUZfREMwMCwgWy5MX1NIVUZfREMwMCBBRERfUklQXQorCisuTG9vcDA6CisJbGVhCVRCTCwgWy5MSzI1NiBBRERfUklQXQorCisJLyogYnl0ZSBzd2FwIGZpcnN0IDE2IGR3b3JkcyAqLworCUNPUFlfWE1NX0FORF9CU1dBUAlYMCwgW0lOUCArIDAqMTZdLCBCWVRFX0ZMSVBfTUFTSworCUNPUFlfWE1NX0FORF9CU1dBUAlYMSwgW0lOUCArIDEqMTZdLCBCWVRFX0ZMSVBfTUFTSworCUNPUFlfWE1NX0FORF9CU1dBUAlYMiwgW0lOUCArIDIqMTZdLCBCWVRFX0ZMSVBfTUFTSworCUNPUFlfWE1NX0FORF9CU1dBUAlYMywgW0lOUCArIDMqMTZdLCBCWVRFX0ZMSVBfTUFTSworCisJbW92CVtyc3AgKyBfSU5QXSwgSU5QCisKKwkvKiBzY2hlZHVsZSA0OCBpbnB1dCBkd29yZHMsIGJ5IGRvaW5nIDMgcm91bmRzIG9mIDE2IGVhY2ggKi8KKwltb3YJU1JORCwgMworLmFsaWduIDE2CisuTG9vcDE6CisJbW92ZHFhCVhGRVIsIFtUQkwgKyAwKjE2XQorCXBhZGRkCVhGRVIsIFgwCisJbW92ZHFhCVtyc3AgKyBfWEZFUl0sIFhGRVIKKwlGT1VSX1JPVU5EU19BTkRfU0NIRUQKKworCW1vdmRxYQlYRkVSLCBbVEJMICsgMSoxNl0KKwlwYWRkZAlYRkVSLCBYMAorCW1vdmRxYQlbcnNwICsgX1hGRVJdLCBYRkVSCisJRk9VUl9ST1VORFNfQU5EX1NDSEVECisKKwltb3ZkcWEJWEZFUiwgW1RCTCArIDIqMTZdCisJcGFkZGQJWEZFUiwgWDAKKwltb3ZkcWEJW3JzcCArIF9YRkVSXSwgWEZFUgorCUZPVVJfUk9VTkRTX0FORF9TQ0hFRAorCisJbW92ZHFhCVhGRVIsIFtUQkwgKyAzKjE2XQorCXBhZGRkCVhGRVIsIFgwCisJbW92ZHFhCVtyc3AgKyBfWEZFUl0sIFhGRVIKKwlhZGQJVEJMLCA0KjE2CisJRk9VUl9ST1VORFNfQU5EX1NDSEVECisKKwlzdWIJU1JORCwgMQorCWpuZQkuTG9vcDEKKworCW1vdglTUk5ELCAyCisuTG9vcDI6CisJcGFkZGQJWDAsIFtUQkwgKyAwKjE2XQorCW1vdmRxYQlbcnNwICsgX1hGRVJdLCBYMAorCURPX1JPVU5ECTAKKwlET19ST1VORAkxCisJRE9fUk9VTkQJMgorCURPX1JPVU5ECTMKKwlwYWRkZAlYMSwgW1RCTCArIDEqMTZdCisJbW92ZHFhCVtyc3AgKyBfWEZFUl0sIFgxCisJYWRkCVRCTCwgMioxNgorCURPX1JPVU5ECTAKKwlET19ST1VORAkxCisJRE9fUk9VTkQJMgorCURPX1JPVU5ECTMKKworCW1vdmRxYQlYMCwgWDIKKwltb3ZkcWEJWDEsIFgzCisKKwlzdWIJU1JORCwgMQorCWpuZQkuTG9vcDIKKworCWFkZG0JWzQqMCArIENUWF0sYQorCWFkZG0JWzQqMSArIENUWF0sYgorCWFkZG0JWzQqMiArIENUWF0sYworCWFkZG0JWzQqMyArIENUWF0sZAorCWFkZG0JWzQqNCArIENUWF0sZQorCWFkZG0JWzQqNSArIENUWF0sZgorCWFkZG0JWzQqNiArIENUWF0sZworCWFkZG0JWzQqNyArIENUWF0saAorCisJbW92CUlOUCwgW3JzcCArIF9JTlBdCisJYWRkCUlOUCwgNjQKKwljbXAJSU5QLCBbcnNwICsgX0lOUF9FTkRdCisJam5lCS5Mb29wMAorCisJcHhvcgl4bW0wLCB4bW0wCisJcHhvcgl4bW0xLCB4bW0xCisJcHhvcgl4bW0yLCB4bW0yCisJcHhvcgl4bW0zLCB4bW0zCisJcHhvcgl4bW00LCB4bW00CisJcHhvcgl4bW01LCB4bW01CisJcHhvcgl4bW02LCB4bW02CisJcHhvcgl4bW03LCB4bW03CisJcHhvcgl4bW04LCB4bW04CisJcHhvcgl4bW05LCB4bW05CisJcHhvcgl4bW0xMCwgeG1tMTAKKwlweG9yCXhtbTExLCB4bW0xMQorCXB4b3IJeG1tMTIsIHhtbTEyCisKKy5MZG9uZV9oYXNoOgorCWFkZAlyc3AsIFNUQUNLX1NJWkUKKworCXBvcAlyMTUKKwlwb3AJcjE0CisJcG9wCXIxMworCXBvcAlyYnAKKwlwb3AJcmJ4CisKKwltb3YgICAgIGVheCwgU1RBQ0tfU0laRSArIDUqOAorCXJldAorCisKKy5kYXRhCisuYWxpZ24gMTYKKy5MSzI1NjoKKwkubG9uZwkweDQyOGEyZjk4LDB4NzEzNzQ0OTEsMHhiNWMwZmJjZiwweGU5YjVkYmE1CisJLmxvbmcJMHgzOTU2YzI1YiwweDU5ZjExMWYxLDB4OTIzZjgyYTQsMHhhYjFjNWVkNQorCS5sb25nCTB4ZDgwN2FhOTgsMHgxMjgzNWIwMSwweDI0MzE4NWJlLDB4NTUwYzdkYzMKKwkubG9uZwkweDcyYmU1ZDc0LDB4ODBkZWIxZmUsMHg5YmRjMDZhNywweGMxOWJmMTc0CisJLmxvbmcJMHhlNDliNjljMSwweGVmYmU0Nzg2LDB4MGZjMTlkYzYsMHgyNDBjYTFjYworCS5sb25nCTB4MmRlOTJjNmYsMHg0YTc0ODRhYSwweDVjYjBhOWRjLDB4NzZmOTg4ZGEKKwkubG9uZwkweDk4M2U1MTUyLDB4YTgzMWM2NmQsMHhiMDAzMjdjOCwweGJmNTk3ZmM3CisJLmxvbmcJMHhjNmUwMGJmMywweGQ1YTc5MTQ3LDB4MDZjYTYzNTEsMHgxNDI5Mjk2NworCS5sb25nCTB4MjdiNzBhODUsMHgyZTFiMjEzOCwweDRkMmM2ZGZjLDB4NTMzODBkMTMKKwkubG9uZwkweDY1MGE3MzU0LDB4NzY2YTBhYmIsMHg4MWMyYzkyZSwweDkyNzIyYzg1CisJLmxvbmcJMHhhMmJmZThhMSwweGE4MWE2NjRiLDB4YzI0YjhiNzAsMHhjNzZjNTFhMworCS5sb25nCTB4ZDE5MmU4MTksMHhkNjk5MDYyNCwweGY0MGUzNTg1LDB4MTA2YWEwNzAKKwkubG9uZwkweDE5YTRjMTE2LDB4MWUzNzZjMDgsMHgyNzQ4Nzc0YywweDM0YjBiY2I1CisJLmxvbmcJMHgzOTFjMGNiMywweDRlZDhhYTRhLDB4NWI5Y2NhNGYsMHg2ODJlNmZmMworCS5sb25nCTB4NzQ4ZjgyZWUsMHg3OGE1NjM2ZiwweDg0Yzg3ODE0LDB4OGNjNzAyMDgKKwkubG9uZwkweDkwYmVmZmZhLDB4YTQ1MDZjZWIsMHhiZWY5YTNmNywweGM2NzE3OGYyCisKKy5MUFNIVUZGTEVfQllURV9GTElQX01BU0s6IC5vY3RhIDB4MGMwZDBlMGYwODA5MGEwYjA0MDUwNjA3MDAwMTAyMDMKKworLyogc2h1ZmZsZSB4QnhBIC0+IDAwQkEgKi8KKy5MX1NIVUZfMDBCQTogICAgICAgICAgICAgIC5vY3RhIDB4RkZGRkZGRkZGRkZGRkZGRjBiMGEwOTA4MDMwMjAxMDAKKworLyogc2h1ZmZsZSB4RHhDIC0+IERDMDAgKi8KKy5MX1NIVUZfREMwMDogICAgICAgICAgICAgIC5vY3RhIDB4MGIwYTA5MDgwMzAyMDEwMEZGRkZGRkZGRkZGRkZGRkYKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NpcGhlci9zaGEyNTYuYyBiL2NpcGhlci9zaGEyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTIzMDNjCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3NoYTI1Ni5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKiBzaGEyNTYuYyAtIFNIQTI1NiBoYXNoIGZ1bmN0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKworLyogIFRlc3QgdmVjdG9yczoKKworICAgICJhYmMiCisgICAgU0hBMjI0OiAyMzA5N2QyMiAzNDA1ZDgyMiA4NjQyYTQ3NyBiZGEyNTViMyAyYWFkYmNlNCBiZGEwYjNmNyBlMzZjOWRhNworICAgIFNIQTI1NjogYmE3ODE2YmYgOGYwMWNmZWEgNDE0MTQwZGUgNWRhZTIyMjMgYjAwMzYxYTMgOTYxNzdhOWMgYjQxMGZmNjEgZjIwMDE1YWQKKworICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKyAgICBTSEEyMjQ6IDc1Mzg4YjE2IDUxMjc3NmNjIDVkYmE1ZGExIGZkODkwMTUwIGIwYzY0NTVjIGI0ZjU4YjE5IDUyNTIyNTI1CisgICAgU0hBMjU2OiAyNDhkNmE2MSBkMjA2MzhiOCBlNWMwMjY5MyAwYzNlNjAzOSBhMzNjZTQ1OSA2NGZmMjE2NyBmNmVjZWRkNCAxOWRiMDZjMQorCisgICAgImEiIG9uZSBtaWxsaW9uIHRpbWVzCisgICAgU0hBMjI0OiAyMDc5NDY1NSA5ODBjOTFkOCBiYmI0YzFlYSA5NzYxOGE0YiBmMDNmNDI1OCAxOTQ4YjJlZSA0ZWU3YWQ2NworICAgIFNIQTI1NjogY2RjNzZlNWMgOTkxNGZiOTIgODFhMWM3ZTIgODRkNzNlNjcgZjE4MDlhNDggYTQ5NzIwMGUgMDQ2ZDM5Y2MgYzcxMTJjZDAKKworICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJiaXRoZWxwLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImhhc2gtY29tbW9uLmgiCisKKworLyogVVNFX1NTU0UzIGluZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBJbnRlbCBTU1NFMyBjb2RlLiAqLworI3VuZGVmIFVTRV9TU1NFMworI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0lOVEVMX1NZTlRBWF9QTEFURk9STV9BUykKKyMgZGVmaW5lIFVTRV9TU1NFMyAxCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIGdjcnlfbWRfYmxvY2tfY3R4X3QgYmN0eDsKKyAgdTMyICBoMCxoMSxoMixoMyxoNCxoNSxoNixoNzsKKyNpZmRlZiBVU0VfU1NTRTMKKyAgdW5zaWduZWQgaW50IHVzZV9zc3NlMzoxOworI2VuZGlmCit9IFNIQTI1Nl9DT05URVhUOworCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAodm9pZCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKKworc3RhdGljIHZvaWQKK3NoYTI1Nl9pbml0ICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIFNIQTI1Nl9DT05URVhUICpoZCA9IGNvbnRleHQ7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaGQtPmgwID0gMHg2YTA5ZTY2NzsKKyAgaGQtPmgxID0gMHhiYjY3YWU4NTsKKyAgaGQtPmgyID0gMHgzYzZlZjM3MjsKKyAgaGQtPmgzID0gMHhhNTRmZjUzYTsKKyAgaGQtPmg0ID0gMHg1MTBlNTI3ZjsKKyAgaGQtPmg1ID0gMHg5YjA1Njg4YzsKKyAgaGQtPmg2ID0gMHgxZjgzZDlhYjsKKyAgaGQtPmg3ID0gMHg1YmUwY2QxOTsKKworICBoZC0+YmN0eC5uYmxvY2tzID0gMDsKKyAgaGQtPmJjdHgubmJsb2Nrc19oaWdoID0gMDsKKyAgaGQtPmJjdHguY291bnQgPSAwOworICBoZC0+YmN0eC5ibG9ja3NpemUgPSA2NDsKKyAgaGQtPmJjdHguYndyaXRlID0gdHJhbnNmb3JtOworCisjaWZkZWYgVVNFX1NTU0UzCisgIGhkLT51c2Vfc3NzZTMgPSAoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX0lOVEVMX1NTU0UzKSAhPSAwOworI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQKK3NoYTIyNF9pbml0ICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIFNIQTI1Nl9DT05URVhUICpoZCA9IGNvbnRleHQ7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaGQtPmgwID0gMHhjMTA1OWVkODsKKyAgaGQtPmgxID0gMHgzNjdjZDUwNzsKKyAgaGQtPmgyID0gMHgzMDcwZGQxNzsKKyAgaGQtPmgzID0gMHhmNzBlNTkzOTsKKyAgaGQtPmg0ID0gMHhmZmMwMGIzMTsKKyAgaGQtPmg1ID0gMHg2ODU4MTUxMTsKKyAgaGQtPmg2ID0gMHg2NGY5OGZhNzsKKyAgaGQtPmg3ID0gMHhiZWZhNGZhNDsKKworICBoZC0+YmN0eC5uYmxvY2tzID0gMDsKKyAgaGQtPmJjdHgubmJsb2Nrc19oaWdoID0gMDsKKyAgaGQtPmJjdHguY291bnQgPSAwOworICBoZC0+YmN0eC5ibG9ja3NpemUgPSA2NDsKKyAgaGQtPmJjdHguYndyaXRlID0gdHJhbnNmb3JtOworCisjaWZkZWYgVVNFX1NTU0UzCisgIGhkLT51c2Vfc3NzZTMgPSAoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX0lOVEVMX1NTU0UzKSAhPSAwOworI2VuZGlmCit9CisKKworLyoKKyAgVHJhbnNmb3JtIHRoZSBtZXNzYWdlIFggd2hpY2ggY29uc2lzdHMgb2YgMTYgMzItYml0LXdvcmRzLiBTZWUgRklQUworICAxODAtMiBmb3IgZGV0YWlscy4gICovCisjZGVmaW5lIFMwKHgpIChyb3IgKCh4KSwgNykgXiByb3IgKCh4KSwgMTgpIF4gKCh4KSA+PiAzKSkgICAgICAgLyogKDQuNikgKi8KKyNkZWZpbmUgUzEoeCkgKHJvciAoKHgpLCAxNykgXiByb3IgKCh4KSwgMTkpIF4gKCh4KSA+PiAxMCkpICAgICAvKiAoNC43KSAqLworI2RlZmluZSBSKGEsYixjLGQsZSxmLGcsaCxrLHcpIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdDEgPSAoaCkgKyBTdW0xKChlKSkgKyBDaG8oKGUpLChmKSwoZykpICsgKGspICsgKHcpOyAgXAorICAgICAgICAgICAgdDIgPSBTdW0wKChhKSkgKyBNYWooKGEpLChiKSwoYykpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaCA9IGc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZyA9IGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZiA9IGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZSA9IGQgKyB0MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZCA9IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYyA9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYiA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYSA9IHQxICsgdDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gd2hpbGUgKDApCisKKy8qICg0LjIpIHNhbWUgYXMgU0hBLTEncyBGMS4gICovCitzdGF0aWMgaW5saW5lIHUzMgorQ2hvICh1MzIgeCwgdTMyIHksIHUzMiB6KQoreworICByZXR1cm4gKHogXiAoeCAmICh5IF4geikpKTsKK30KKworLyogKDQuMykgc2FtZSBhcyBTSEEtMSdzIEYzICovCitzdGF0aWMgaW5saW5lIHUzMgorTWFqICh1MzIgeCwgdTMyIHksIHUzMiB6KQoreworICByZXR1cm4gKCh4ICYgeSkgfCAoeiAmICh4fHkpKSk7Cit9CisKKy8qICg0LjQpICovCitzdGF0aWMgaW5saW5lIHUzMgorU3VtMCAodTMyIHgpCit7CisgIHJldHVybiAocm9yICh4LCAyKSBeIHJvciAoeCwgMTMpIF4gcm9yICh4LCAyMikpOworfQorCisvKiAoNC41KSAqLworc3RhdGljIGlubGluZSB1MzIKK1N1bTEgKHUzMiB4KQoreworICByZXR1cm4gKHJvciAoeCwgNikgXiByb3IgKHgsIDExKSBeIHJvciAoeCwgMjUpKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50CitfdHJhbnNmb3JtICh2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgIFNIQTI1Nl9DT05URVhUICpoZCA9IGN0eDsKKyAgc3RhdGljIGNvbnN0IHUzMiBLWzY0XSA9IHsKKyAgICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LAorICAgIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsCisgICAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywKKyAgICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LAorICAgIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsCisgICAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwKKyAgICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LAorICAgIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsCisgICAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywKKyAgICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LAorICAgIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsCisgICAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwKKyAgICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LAorICAgIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsCisgICAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwKKyAgICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyCisgIH07CisKKyAgdTMyIGEsYixjLGQsZSxmLGcsaCx0MSx0MjsKKyAgdTMyIHdbNjRdOworICBpbnQgaTsKKworICBhID0gaGQtPmgwOworICBiID0gaGQtPmgxOworICBjID0gaGQtPmgyOworICBkID0gaGQtPmgzOworICBlID0gaGQtPmg0OworICBmID0gaGQtPmg1OworICBnID0gaGQtPmg2OworICBoID0gaGQtPmg3OworCisgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICB3W2ldID0gYnVmX2dldF9iZTMyKGRhdGEgKyBpICogNCk7CisgIGZvciAoOyBpIDwgNjQ7IGkrKykKKyAgICB3W2ldID0gUzEod1tpLTJdKSArIHdbaS03XSArIFMwKHdbaS0xNV0pICsgd1tpLTE2XTsKKworICBmb3IgKGk9MDsgaSA8IDY0OykKKyAgICB7CisjaWYgMAorICAgICAgUihhLGIsYyxkLGUsZixnLGgsS1tpXSx3W2ldKTsKKyAgICAgIGkrKzsKKyNlbHNlCisgICAgICB0MSA9IGggKyBTdW0xIChlKSArIENobyAoZSwgZiwgZykgKyBLW2ldICsgd1tpXTsKKyAgICAgIHQyID0gU3VtMCAoYSkgKyBNYWogKGEsIGIsIGMpOworICAgICAgZCArPSB0MTsKKyAgICAgIGggID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBnICsgU3VtMSAoZCkgKyBDaG8gKGQsIGUsIGYpICsgS1tpKzFdICsgd1tpKzFdOworICAgICAgdDIgPSBTdW0wIChoKSArIE1haiAoaCwgYSwgYik7CisgICAgICBjICs9IHQxOworICAgICAgZyAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGYgKyBTdW0xIChjKSArIENobyAoYywgZCwgZSkgKyBLW2krMl0gKyB3W2krMl07CisgICAgICB0MiA9IFN1bTAgKGcpICsgTWFqIChnLCBoLCBhKTsKKyAgICAgIGIgKz0gdDE7CisgICAgICBmICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZSArIFN1bTEgKGIpICsgQ2hvIChiLCBjLCBkKSArIEtbaSszXSArIHdbaSszXTsKKyAgICAgIHQyID0gU3VtMCAoZikgKyBNYWogKGYsIGcsIGgpOworICAgICAgYSArPSB0MTsKKyAgICAgIGUgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBkICsgU3VtMSAoYSkgKyBDaG8gKGEsIGIsIGMpICsgS1tpKzRdICsgd1tpKzRdOworICAgICAgdDIgPSBTdW0wIChlKSArIE1haiAoZSwgZiwgZyk7CisgICAgICBoICs9IHQxOworICAgICAgZCAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGMgKyBTdW0xIChoKSArIENobyAoaCwgYSwgYikgKyBLW2krNV0gKyB3W2krNV07CisgICAgICB0MiA9IFN1bTAgKGQpICsgTWFqIChkLCBlLCBmKTsKKyAgICAgIGcgKz0gdDE7CisgICAgICBjICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYiArIFN1bTEgKGcpICsgQ2hvIChnLCBoLCBhKSArIEtbaSs2XSArIHdbaSs2XTsKKyAgICAgIHQyID0gU3VtMCAoYykgKyBNYWogKGMsIGQsIGUpOworICAgICAgZiArPSB0MTsKKyAgICAgIGIgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBhICsgU3VtMSAoZikgKyBDaG8gKGYsIGcsIGgpICsgS1tpKzddICsgd1tpKzddOworICAgICAgdDIgPSBTdW0wIChiKSArIE1haiAoYiwgYywgZCk7CisgICAgICBlICs9IHQxOworICAgICAgYSAgPSB0MSArIHQyOworCisgICAgICBpICs9IDg7CisjZW5kaWYKKyAgICB9CisKKyAgaGQtPmgwICs9IGE7CisgIGhkLT5oMSArPSBiOworICBoZC0+aDIgKz0gYzsKKyAgaGQtPmgzICs9IGQ7CisgIGhkLT5oNCArPSBlOworICBoZC0+aDUgKz0gZjsKKyAgaGQtPmg2ICs9IGc7CisgIGhkLT5oNyArPSBoOworCisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyA3NCo0KzMyOworfQorI3VuZGVmIFMwCisjdW5kZWYgUzEKKyN1bmRlZiBSCisKKworI2lmZGVmIFVTRV9TU1NFMwordW5zaWduZWQgaW50IF9nY3J5X3NoYTI1Nl90cmFuc2Zvcm1fYW1kNjRfc3NzZTMoY29uc3Qgdm9pZCAqaW5wdXRfZGF0YSwKKwkJCQkJICAgICAgICB1MzIgc3RhdGVbOF0sIHNpemVfdCBudW1fYmxrcyk7CisjZW5kaWYKKworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm0gKHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgU0hBMjU2X0NPTlRFWFQgKmhkID0gY3R4OworCisjaWZkZWYgVVNFX1NTU0UzCisgIGlmIChoZC0+dXNlX3Nzc2UzKQorICAgIHJldHVybiBfZ2NyeV9zaGEyNTZfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzIChkYXRhLCAmaGQtPmgwLCAxKQorICAgICAgICAgICArIDQgKiBzaXplb2Yodm9pZCopOworI2VuZGlmCisKKyAgcmV0dXJuIF90cmFuc2Zvcm0gKGhkLCBkYXRhKTsKK30KKworCisvKgorICAgVGhlIHJvdXRpbmUgZmluYWxseSB0ZXJtaW5hdGVzIHRoZSBjb21wdXRhdGlvbiBhbmQgcmV0dXJucyB0aGUKKyAgIGRpZ2VzdC4gIFRoZSBoYW5kbGUgaXMgcHJlcGFyZWQgZm9yIGEgbmV3IGN5Y2xlLCBidXQgYWRkaW5nIGJ5dGVzCisgICB0byB0aGUgaGFuZGxlIHdpbGwgdGhlIGRlc3Ryb3kgdGhlIHJldHVybmVkIGJ1ZmZlci4gIFJldHVybnM6IDMyCisgICBieXRlcyB3aXRoIHRoZSBtZXNzYWdlIHRoZSBkaWdlc3QuICAqLworc3RhdGljIHZvaWQKK3NoYTI1Nl9maW5hbCh2b2lkICpjb250ZXh0KQoreworICBTSEEyNTZfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworICB1MzIgdCwgdGgsIG1zYiwgbHNiOworICBieXRlICpwOworICB1bnNpZ25lZCBpbnQgYnVybjsKKworICBfZ2NyeV9tZF9ibG9ja193cml0ZSAoaGQsIE5VTEwsIDApOyAvKiBmbHVzaCAqLzsKKworICB0ID0gaGQtPmJjdHgubmJsb2NrczsKKyAgaWYgKHNpemVvZiB0ID09IHNpemVvZiBoZC0+YmN0eC5uYmxvY2tzKQorICAgIHRoID0gaGQtPmJjdHgubmJsb2Nrc19oaWdoOworICBlbHNlCisgICAgdGggPSBoZC0+YmN0eC5uYmxvY2tzID4+IDMyOworCisgIC8qIG11bHRpcGx5IGJ5IDY0IHRvIG1ha2UgYSBieXRlIGNvdW50ICovCisgIGxzYiA9IHQgPDwgNjsKKyAgbXNiID0gKHRoIDw8IDYpIHwgKHQgPj4gMjYpOworICAvKiBhZGQgdGhlIGNvdW50ICovCisgIHQgPSBsc2I7CisgIGlmICgobHNiICs9IGhkLT5iY3R4LmNvdW50KSA8IHQpCisgICAgbXNiKys7CisgIC8qIG11bHRpcGx5IGJ5IDggdG8gbWFrZSBhIGJpdCBjb3VudCAqLworICB0ID0gbHNiOworICBsc2IgPDw9IDM7CisgIG1zYiA8PD0gMzsKKyAgbXNiIHw9IHQgPj4gMjk7CisKKyAgaWYgKGhkLT5iY3R4LmNvdW50IDwgNTYpCisgICAgeyAvKiBlbm91Z2ggcm9vbSAqLworICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMHg4MDsgLyogcGFkICovCisgICAgICB3aGlsZSAoaGQtPmJjdHguY291bnQgPCA1NikKKyAgICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMDsgIC8qIHBhZCAqLworICAgIH0KKyAgZWxzZQorICAgIHsgLyogbmVlZCBvbmUgZXh0cmEgYmxvY2sgKi8KKyAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCBjaGFyYWN0ZXIgKi8KKyAgICAgIHdoaWxlIChoZC0+YmN0eC5jb3VudCA8IDY0KQorICAgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAwOworICAgICAgX2djcnlfbWRfYmxvY2tfd3JpdGUgKGhkLCBOVUxMLCAwKTsgIC8qIGZsdXNoICovOworICAgICAgbWVtc2V0IChoZC0+YmN0eC5idWYsIDAsIDU2ICk7IC8qIGZpbGwgbmV4dCBibG9jayB3aXRoIHplcm9lcyAqLworICAgIH0KKyAgLyogYXBwZW5kIHRoZSA2NCBiaXQgY291bnQgKi8KKyAgYnVmX3B1dF9iZTMyKGhkLT5iY3R4LmJ1ZiArIDU2LCBtc2IpOworICBidWZfcHV0X2JlMzIoaGQtPmJjdHguYnVmICsgNjAsIGxzYik7CisgIGJ1cm4gPSB0cmFuc2Zvcm0gKGhkLCBoZC0+YmN0eC5idWYpOworICBfZ2NyeV9idXJuX3N0YWNrIChidXJuKTsKKworICBwID0gaGQtPmJjdHguYnVmOworI2RlZmluZSBYKGEpIGRvIHsgKih1MzIqKXAgPSBiZV9ic3dhcDMyKGhkLT5oIyNhKTsgcCArPSA0OyB9IHdoaWxlKDApCisgIFgoMCk7CisgIFgoMSk7CisgIFgoMik7CisgIFgoMyk7CisgIFgoNCk7CisgIFgoNSk7CisgIFgoNik7CisgIFgoNyk7CisjdW5kZWYgWAorfQorCitzdGF0aWMgYnl0ZSAqCitzaGEyNTZfcmVhZCAodm9pZCAqY29udGV4dCkKK3sKKyAgU0hBMjU2X0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICByZXR1cm4gaGQtPmJjdHguYnVmOworfQorCisKKwwKKy8qCisgICAgIFNlbGYtdGVzdCBzZWN0aW9uLgorICovCisKKworc3RhdGljIGdwZ19lcnJfY29kZV90CitzZWxmdGVzdHNfc2hhMjI0IChpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBjb25zdCBjaGFyICp3aGF0OworICBjb25zdCBjaGFyICplcnJ0eHQ7CisKKyAgd2hhdCA9ICJzaG9ydCBzdHJpbmciOworICBlcnJ0eHQgPSBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorICAgIChHQ1JZX01EX1NIQTIyNCwgMCwKKyAgICAgImFiYyIsIDMsCisgICAgICJceDIzXHgwOVx4N2RceDIyXHgzNFx4MDVceGQ4XHgyMlx4ODZceDQyXHhhNFx4NzdceGJkXHhhMlx4NTVceGIzIgorICAgICAiXHgyYVx4YWRceGJjXHhlNFx4YmRceGEwXHhiM1x4ZjdceGUzXHg2Y1x4OWRceGE3IiwgMjgpOworICBpZiAoZXJydHh0KQorICAgIGdvdG8gZmFpbGVkOworCisgIGlmIChleHRlbmRlZCkKKyAgICB7CisgICAgICB3aGF0ID0gImxvbmcgc3RyaW5nIjsKKyAgICAgIGVycnR4dCA9IF9nY3J5X2hhc2hfc2VsZnRlc3RfY2hlY2tfb25lCisgICAgICAgIChHQ1JZX01EX1NIQTIyNCwgMCwKKyAgICAgICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsIDU2LAorICAgICAgICAgIlx4NzVceDM4XHg4Ylx4MTZceDUxXHgyN1x4NzZceGNjXHg1ZFx4YmFceDVkXHhhMVx4ZmRceDg5XHgwMVx4NTAiCisgICAgICAgICAiXHhiMFx4YzZceDQ1XHg1Y1x4YjRceGY1XHg4Ylx4MTlceDUyXHg1Mlx4MjVceDI1IiwgMjgpOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICAgIHdoYXQgPSAib25lIG1pbGxpb24gXCJhXCIiOworICAgICAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAgICAgKEdDUllfTURfU0hBMjI0LCAxLAorICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICJceDIwXHg3OVx4NDZceDU1XHg5OFx4MGNceDkxXHhkOFx4YmJceGI0XHhjMVx4ZWFceDk3XHg2MVx4OGFceDRiIgorICAgICAgICAgIlx4ZjBceDNmXHg0Mlx4NThceDE5XHg0OFx4YjJceGVlXHg0ZVx4ZTdceGFkXHg2NyIsIDI4KTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoImRpZ2VzdCIsIEdDUllfTURfU0hBMjI0LCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTI1NiAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworCisgIHdoYXQgPSAic2hvcnQgc3RyaW5nIjsKKyAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAoR0NSWV9NRF9TSEEyNTYsIDAsCisgICAgICJhYmMiLCAzLAorICAgICAiXHhiYVx4NzhceDE2XHhiZlx4OGZceDAxXHhjZlx4ZWFceDQxXHg0MVx4NDBceGRlXHg1ZFx4YWVceDIyXHgyMyIKKyAgICAgIlx4YjBceDAzXHg2MVx4YTNceDk2XHgxN1x4N2FceDljXHhiNFx4MTBceGZmXHg2MVx4ZjJceDAwXHgxNVx4YWQiLCAzMik7CisgIGlmIChlcnJ0eHQpCisgICAgZ290byBmYWlsZWQ7CisKKyAgaWYgKGV4dGVuZGVkKQorICAgIHsKKyAgICAgIHdoYXQgPSAibG9uZyBzdHJpbmciOworICAgICAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAgICAgKEdDUllfTURfU0hBMjU2LCAwLAorICAgICAgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwgNTYsCisgICAgICAgICAiXHgyNFx4OGRceDZhXHg2MVx4ZDJceDA2XHgzOFx4YjhceGU1XHhjMFx4MjZceDkzXHgwY1x4M2VceDYwXHgzOSIKKyAgICAgICAgICJceGEzXHgzY1x4ZTRceDU5XHg2NFx4ZmZceDIxXHg2N1x4ZjZceGVjXHhlZFx4ZDRceDE5XHhkYlx4MDZceGMxIiwKKyAgICAgICAgIDMyKTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworCisgICAgICB3aGF0ID0gIm9uZSBtaWxsaW9uIFwiYVwiIjsKKyAgICAgIGVycnR4dCA9IF9nY3J5X2hhc2hfc2VsZnRlc3RfY2hlY2tfb25lCisgICAgICAgIChHQ1JZX01EX1NIQTI1NiwgMSwKKyAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAiXHhjZFx4YzdceDZlXHg1Y1x4OTlceDE0XHhmYlx4OTJceDgxXHhhMVx4YzdceGUyXHg4NFx4ZDdceDNlXHg2NyIKKyAgICAgICAgICJceGYxXHg4MFx4OWFceDQ4XHhhNFx4OTdceDIwXHgwZVx4MDRceDZkXHgzOVx4Y2NceGM3XHgxMVx4MmNceGQwIiwKKyAgICAgICAgIDMyKTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoImRpZ2VzdCIsIEdDUllfTURfU0hBMjU2LCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKKworLyogUnVuIGEgZnVsbCBzZWxmLXRlc3QgZm9yIEFMR08gYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MuICAqLworc3RhdGljIGdwZ19lcnJfY29kZV90CitydW5fc2VsZnRlc3RzIChpbnQgYWxnbywgaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgZ3BnX2Vycl9jb2RlX3QgZWM7CisKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIEdDUllfTURfU0hBMjI0OgorICAgICAgZWMgPSBzZWxmdGVzdHNfc2hhMjI0IChleHRlbmRlZCwgcmVwb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR0NSWV9NRF9TSEEyNTY6CisgICAgICBlYyA9IHNlbGZ0ZXN0c19zaGEyNTYgKGV4dGVuZGVkLCByZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVjID0gR1BHX0VSUl9ESUdFU1RfQUxHTzsKKyAgICAgIGJyZWFrOworCisgICAgfQorICByZXR1cm4gZWM7Cit9CisKKworCisMCitzdGF0aWMgYnl0ZSBhc24yMjRbMTldID0gLyogT2JqZWN0IElEIGlzIDIuMTYuODQwLjEuMTAxLjMuNC4yLjQgKi8KKyAgeyAweDMwLCAweDJELCAweDMwLCAweDBkLCAweDA2LCAweDA5LCAweDYwLCAweDg2LCAweDQ4LAorICAgIDB4MDEsIDB4NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDUsIDB4MDAsIDB4MDQsCisgICAgMHgxQworICB9OworCitzdGF0aWMgZ2NyeV9tZF9vaWRfc3BlY190IG9pZF9zcGVjX3NoYTIyNFtdID0KKyAgeworICAgIC8qIEZyb20gUkZDMzg3NCwgU2VjdGlvbiA0ICovCisgICAgeyAiMi4xNi44NDAuMS4xMDEuMy40LjIuNCIgfSwKKyAgICB7IE5VTEwgfSwKKyAgfTsKKworc3RhdGljIGJ5dGUgYXNuMjU2WzE5XSA9IC8qIE9iamVjdCBJRCBpcyAgMi4xNi44NDAuMS4xMDEuMy40LjIuMSAqLworICB7IDB4MzAsIDB4MzEsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsCisgICAgMHg0OCwgMHgwMSwgMHg2NSwgMHgwMywgMHgwNCwgMHgwMiwgMHgwMSwgMHgwNSwKKyAgICAweDAwLCAweDA0LCAweDIwIH07CisKK3N0YXRpYyBnY3J5X21kX29pZF9zcGVjX3Qgb2lkX3NwZWNfc2hhMjU2W10gPQorICB7CisgICAgLyogQWNjb3JkaW5nIHRvIHRoZSBPcGVuUEdQIGRyYWZ0IHJmYzI0NDAtYmlzMDYgKi8KKyAgICB7ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMi4xIiB9LAorICAgIC8qIFBLQ1MjMSBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiAqLworICAgIHsgIjEuMi44NDAuMTEzNTQ5LjEuMS4xMSIgfSwKKworICAgIHsgTlVMTCB9LAorICB9OworCitnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEyMjQgPQorICB7CisgICAgR0NSWV9NRF9TSEEyMjQsIHswLCAxfSwKKyAgICAiU0hBMjI0IiwgYXNuMjI0LCBESU0gKGFzbjIyNCksIG9pZF9zcGVjX3NoYTIyNCwgMjgsCisgICAgc2hhMjI0X2luaXQsIF9nY3J5X21kX2Jsb2NrX3dyaXRlLCBzaGEyNTZfZmluYWwsIHNoYTI1Nl9yZWFkLAorICAgIHNpemVvZiAoU0hBMjU2X0NPTlRFWFQpLAorICAgIHJ1bl9zZWxmdGVzdHMKKyAgfTsKKworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfc2hhMjU2ID0KKyAgeworICAgIEdDUllfTURfU0hBMjU2LCB7MCwgMX0sCisgICAgIlNIQTI1NiIsIGFzbjI1NiwgRElNIChhc24yNTYpLCBvaWRfc3BlY19zaGEyNTYsIDMyLAorICAgIHNoYTI1Nl9pbml0LCBfZ2NyeV9tZF9ibG9ja193cml0ZSwgc2hhMjU2X2ZpbmFsLCBzaGEyNTZfcmVhZCwKKyAgICBzaXplb2YgKFNIQTI1Nl9DT05URVhUKSwKKyAgICBydW5fc2VsZnRlc3RzCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvc2hhNTEyLWFybXY3LW5lb24uUyBiL2NpcGhlci9zaGE1MTItYXJtdjctbmVvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmIxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvc2hhNTEyLWFybXY3LW5lb24uUwpAQCAtMCwwICsxLDMxNiBAQAorLyogc2hhNTEyLWFybXY3LW5lb24uUyAgLSAgQVJNL05FT04gYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgU0hBLTUxMiB0cmFuc2Zvcm0KKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoSEFWRV9BUk1fQVJDSF9WNikgJiYgZGVmaW5lZChfX0FSTUVMX18pICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX05FT04pCisKKy50ZXh0CisKKy5zeW50YXggdW5pZmllZAorLmZwdSBuZW9uCisuYXJtCisKKy8qIHN0cnVjdHVyZSBvZiBTSEE1MTJfQ09OVEVYVCAqLworI2RlZmluZSBoZF9hIDAKKyNkZWZpbmUgaGRfYiAoKGhkX2EpICsgOCkKKyNkZWZpbmUgaGRfYyAoKGhkX2IpICsgOCkKKyNkZWZpbmUgaGRfZCAoKGhkX2MpICsgOCkKKyNkZWZpbmUgaGRfZSAoKGhkX2QpICsgOCkKKyNkZWZpbmUgaGRfZiAoKGhkX2UpICsgOCkKKyNkZWZpbmUgaGRfZyAoKGhkX2YpICsgOCkKKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIFJLICVyMgorCisjZGVmaW5lIFJBIGQwCisjZGVmaW5lIFJCIGQxCisjZGVmaW5lIFJDIGQyCisjZGVmaW5lIFJEIGQzCisjZGVmaW5lIFJFIGQ0CisjZGVmaW5lIFJGIGQ1CisjZGVmaW5lIFJHIGQ2CisjZGVmaW5lIFJIIGQ3CisKKyNkZWZpbmUgUlQwIGQ4CisjZGVmaW5lIFJUMSBkOQorI2RlZmluZSBSVDIgZDEwCisjZGVmaW5lIFJUMyBkMTEKKyNkZWZpbmUgUlQ0IGQxMgorI2RlZmluZSBSVDUgZDEzCisjZGVmaW5lIFJUNiBkMTQKKyNkZWZpbmUgUlQ3IGQxNQorCisjZGVmaW5lIFJXMCBkMTYKKyNkZWZpbmUgUlcxIGQxNworI2RlZmluZSBSVzIgZDE4CisjZGVmaW5lIFJXMyBkMTkKKyNkZWZpbmUgUlc0IGQyMAorI2RlZmluZSBSVzUgZDIxCisjZGVmaW5lIFJXNiBkMjIKKyNkZWZpbmUgUlc3IGQyMworI2RlZmluZSBSVzggZDI0CisjZGVmaW5lIFJXOSBkMjUKKyNkZWZpbmUgUlcxMCBkMjYKKyNkZWZpbmUgUlcxMSBkMjcKKyNkZWZpbmUgUlcxMiBkMjgKKyNkZWZpbmUgUlcxMyBkMjkKKyNkZWZpbmUgUlcxNCBkMzAKKyNkZWZpbmUgUlcxNSBkMzEKKworI2RlZmluZSBSVzAxcSBxOAorI2RlZmluZSBSVzIzcSBxOQorI2RlZmluZSBSVzQ1cSBxMTAKKyNkZWZpbmUgUlc2N3EgcTExCisjZGVmaW5lIFJXODlxIHExMgorI2RlZmluZSBSVzEwMTFxIHExMworI2RlZmluZSBSVzEyMTNxIHExNAorI2RlZmluZSBSVzE0MTVxIHExNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiBzaGE1MTIgdHJhbnNmb3JtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIHJvdW5kXzBfNjMocmEsIHJiLCByYywgcmQsIHJlLCByZiwgcmcsIHJoLCBydzAsIHJ3MTQsIHJ3OSwgcncxKSBcCisJLyogdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3RdICsgd1t0XTsgKi8gXAorCXZzaHIudTY0IFJUMSwgcmUsICMxNDsgXAorCXZzaGwudTY0IFJUMywgcmUsICM2NCAtIDE0OyBcCisJdnNoci51NjQgUlQ0LCByZSwgIzE4OyBcCisJdnNobC51NjQgUlQ1LCByZSwgIzY0IC0gMTg7IFwKKwl2ZW9yLjY0IFJUMSwgUlQxLCBSVDM7IFwKKwl2bGQxLjY0IHtSVDB9LCBbUktdITsgXAorCXZlb3IuNjQgUlQxLCBSVDEsIFJUNDsgXAorCXZzaHIudTY0IFJUMywgcmUsICM0MTsgXAorCXZzaGwudTY0IFJUNCwgcmUsICM2NCAtIDQxOyBcCisJdmVvci42NCBSVDEsIFJUMSwgUlQ1OyBcCisJdmFkZC51NjQgUlQwLCBSVDAsIHJ3MDsgXAorCXZlb3IuNjQgUlQxLCBSVDEsIFJUMzsgXAorCXZhbmQuNjQgUlQyLCByZSwgcmY7IFwKKwl2ZW9yLjY0IFJUMSwgUlQxLCBSVDQ7IFwKKwl2YmljLjY0IFJUNiwgcmcsIHJlOyBcCisJXAorCXZhZGQudTY0IFJUMSwgUlQxLCByaDsgXAorCXZlb3IuNjQgUlQyLCBSVDIsIFJUNjsgXAorCXZzaHIudTY0IHJoLCByYSwgIzI4OyBcCisJdnNobC51NjQgUlQzLCByYSwgIzY0IC0gMjg7IFwKKwl2YWRkLnU2NCBSVDEsIFJUMSwgUlQwOyBcCisJdnNoci51NjQgUlQ0LCByYSwgIzM0OyBcCisJdmVvci42NCByaCwgcmgsIFJUMzsgXAorCXZzaGwudTY0IFJUNSwgcmEsICM2NCAtIDM0OyBcCisJdmFkZC51NjQgUlQxLCBSVDEsIFJUMjsgXAorCVwKKwkvKiBoID0gU3VtMCAoYSkgKyBNYWogKGEsIGIsIGMpOyAqLyBcCisJdmVvci42NCByaCwgcmgsIFJUNDsgXAorCXZzaHIudTY0IFJUMywgcmEsICMzOTsgXAorCXZzaGwudTY0IFJUNCwgcmEsICM2NCAtIDM5OyBcCisJdm9yci42NCBSVDYsIHJhLCByYjsgXAorCXZhbmQuNjQgUlQwLCByYSwgcmI7IFwKKwl2ZW9yLjY0IHJoLCByaCwgUlQ1OyBcCisJdmFuZC42NCBSVDYsIFJUNiwgcmM7IFwKKwl2ZW9yLjY0IHJoLCByaCwgUlQzOyBcCisJdm9yci42NCBSVDAsIFJUMCwgUlQ2OyBcCisJdmVvci42NCByaCwgcmgsIFJUNDsgXAorCXZzaHIudTY0IFJUNCwgcncxNCwgIzE5OyBcCisJdmFkZC51NjQgcmgsIHJoLCBSVDA7IFwKKwl2c2hsLnU2NCBSVDIsIHJ3MTQsICM2NCAtIDE5OyBcCisJXAorCS8qIHdbMF0gKz0gUzEgKHdbMTRdKSArIHdbOV0gKyBTMCAod1sxXSk7ICovIFwKKwl2c2hyLnU2NCBSVDMsIHJ3MTQsICM2MTsgXAorCXZzaGwudTY0IFJUNiwgcncxNCwgIzY0IC0gNjE7IFwKKwl2ZW9yLjY0IFJUMCwgUlQ0LCBSVDI7IFwKKwl2c2hyLnU2NCBSVDIsIHJ3MTQsIDY7IFwKKwl2ZW9yLjY0IFJUMCwgUlQwLCBSVDM7IFwKKwl2c2hyLnU2NCBSVDcsIHJ3MSwgIzE7IFwKKwl2ZW9yLjY0IFJUMCwgUlQwLCBSVDY7IFwKKwl2c2hsLnU2NCBSVDQsIHJ3MSwgIzY0IC0gMTsgXAorCXZlb3IuNjQgUlQwLCBSVDAsIFJUMjsgXAorCXZzaHIudTY0IFJUNSwgcncxLCAjODsgXAorCXZhZGQudTY0IHJ3MCwgcncwLCBSVDA7IFwKKwl2c2hsLnU2NCBSVDYsIHJ3MSwgIzY0IC0gODsgXAorCXZlb3IuNjQgUlQ3LCBSVDcsIFJUNDsgXAorCXZzaHIudTY0IFJUNCwgcncxLCA3OyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQ1OyBcCisJdmFkZC51NjQgcncwLCBydzAsIHJ3OTsgLyogd1swXSs9d1s5XTsgKi9cCisJdmVvci42NCBSVDcsIFJUNywgUlQ2OyBcCisJdmFkZC51NjQgcmQsIHJkLCBSVDE7IC8qIGQrPXQxOyAqLyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQ0OyBcCisJdmFkZC51NjQgcmgsIHJoLCBSVDE7IC8qIGgrPXQxOyAqLyBcCisJdmFkZC51NjQgcncwLCBydzAsIFJUNzsgXAorCisjZGVmaW5lIHJvdW5kXzY0Xzc5KHJhLCByYiwgcmMsIHJkLCByZSwgcmYsIHJnLCByaCwgcncwKSBcCisJLyogdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3RdICsgd1t0XTsgKi8gXAorCXZsZDEuNjQge1JUMH0sIFtSS10hOyBcCisJdnNoci51NjQgUlQxLCByZSwgIzE0OyBcCisJdnNobC51NjQgUlQzLCByZSwgIzY0IC0gMTQ7IFwKKwl2c2hyLnU2NCBSVDQsIHJlLCAjMTg7IFwKKwl2c2hsLnU2NCBSVDUsIHJlLCAjNjQgLSAxODsgXAorCXZlb3IuNjQgUlQxLCBSVDEsIFJUMzsgXAorCXZzaHIudTY0IFJUNywgcmEsICMyODsgXAorCXZlb3IuNjQgUlQxLCBSVDEsIFJUNDsgXAorCXZzaHIudTY0IFJUMywgcmUsICM0MTsgXAorCXZzaGwudTY0IFJUNCwgcmUsICM2NCAtIDQxOyBcCisJdmVvci42NCBSVDEsIFJUMSwgUlQ1OyBcCisJdmFkZC51NjQgUlQwLCBSVDAsIHJ3MDsgXAorCXZlb3IuNjQgUlQxLCBSVDEsIFJUMzsgXAorCXZhbmQuNjQgUlQyLCByZSwgcmY7IFwKKwl2ZW9yLjY0IFJUMSwgUlQxLCBSVDQ7IFwKKwl2YmljLjY0IFJUNiwgcmcsIHJlOyBcCisJXAorCXZhZGQudTY0IFJUMSwgUlQxLCByaDsgXAorCXZlb3IuNjQgUlQyLCBSVDIsIFJUNjsgXAorCXZhZGQudTY0IFJUMSwgUlQxLCBSVDA7IFwKKwl2c2hyLnU2NCBSVDQsIHJhLCAjMzQ7IFwKKwl2c2hsLnU2NCBSVDUsIHJhLCAjNjQgLSAzNDsgXAorCVwKKwkvKiB0NyA9IFN1bTAgKGEpICsgTWFqIChhLCBiLCBjKTsgKi8gXAorCXZzaGwudTY0IFJUNiwgcmEsICM2NCAtIDI4OyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQ0OyBcCisJdnNoci51NjQgUlQzLCByYSwgIzM5OyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQ2OyBcCisJdnNobC51NjQgUlQ0LCByYSwgIzY0IC0gMzk7IFwKKwl2b3JyLjY0IFJUNiwgcmEsIHJiOyBcCisJdmFuZC42NCBSVDAsIHJhLCByYjsgXAorCXZlb3IuNjQgUlQ3LCBSVDcsIFJUNTsgXAorCXZhbmQuNjQgUlQ2LCBSVDYsIHJjOyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQzOyBcCisJdm9yci42NCBSVDAsIFJUMCwgUlQ2OyBcCisJdmVvci42NCBSVDcsIFJUNywgUlQ0OyBcCisJdmFkZC51NjQgUlQxLCBSVDEsIFJUMjsgXAorCXZhZGQudTY0IFJUNywgUlQ3LCBSVDA7IFwKKwl2YWRkLnU2NCByZCwgcmQsIFJUMTsgLyogZCs9dDE7ICovIFwKKwl2YWRkLnU2NCByaCwgUlQ3LCBSVDE7IC8qIGg9dDcrdDE7ICovCisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uCisudHlwZSAgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uLCVmdW5jdGlvbjsKKworX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uOgorCS8qIElucHV0OgorCSAqCSVyMDogU0hBNTEyX0NPTlRFWFQKKwkgKgklcjE6IGRhdGEKKwkgKgklcjI6IHU2NCBrW10gY29uc3RhbnRzCisJICovCisJbW92ICVyMywgIzA7CisKKwkvKiBMb2FkIGNvbnRleHQgdG8gZDAtZDcgKi8KKwl2bGQxLjY0IHtSQS1SRH0sIFslcjBdITsKKwl2bGQxLjY0IHtSRS1SSH0sIFslcjBdOworCXN1YiAlcjAsICMoNCo4KTsKKworCS8qIExvYWQgaW5wdXQgdG8gd1sxNl0sIGQxNi1kMzEgKi8KKwkvKiBOT1RFOiBBc3N1bWVzIHRoYXQgb24gQVJNdjcgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBhbHdheXMgYWxsb3dlZC4gKi8KKwl2bGQxLjY0IHtSVzAtUlczfSwgWyVyMV0hOworCXZsZDEuNjQge1JXNC1SVzd9LCBbJXIxXSE7CisJdmxkMS42NCB7Ulc4LVJXMTF9LCBbJXIxXSE7CisJdmxkMS42NCB7UlcxMi1SVzE1fSwgWyVyMV07CisjaWZkZWYgX19BUk1FTF9fCisJLyogYnl0ZXN3YXAgKi8KKwl2cmV2NjQuOCBSVzAxcSwgUlcwMXE7CisJdnJldjY0LjggUlcyM3EsIFJXMjNxOworCXZyZXY2NC44IFJXNDVxLCBSVzQ1cTsKKwl2cmV2NjQuOCBSVzY3cSwgUlc2N3E7CisJdnJldjY0LjggUlc4OXEsIFJXODlxOworCXZyZXY2NC44IFJXMTAxMXEsIFJXMTAxMXE7CisJdnJldjY0LjggUlcxMjEzcSwgUlcxMjEzcTsKKwl2cmV2NjQuOCBSVzE0MTVxLCBSVzE0MTVxOworI2VuZGlmCisKKwkvKiBFQUJJIHNheXMgdGhhdCBkOC1kMTUgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgY2FsbGVlLiAqLworCXZwdXNoIHtSVDAtUlQ3fTsKKworLkxvb3A6CisJYWRkICVyMywgIzE2OworCXJvdW5kXzBfNjMoUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSVzAsIFJXMTQsIFJXOSwgUlcxKTsKKwljbXAgJXIzLCAjNjQ7CisJcm91bmRfMF82MyhSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUkcsIFJXMSwgUlcxNSwgUlcxMCwgUlcyKTsKKwlyb3VuZF8wXzYzKFJHLCBSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUlcyLCBSVzAsIFJXMTEsIFJXMyk7CisJcm91bmRfMF82MyhSRiwgUkcsIFJILCBSQSwgUkIsIFJDLCBSRCwgUkUsIFJXMywgUlcxLCBSVzEyLCBSVzQpOworCXJvdW5kXzBfNjMoUkUsIFJGLCBSRywgUkgsIFJBLCBSQiwgUkMsIFJELCBSVzQsIFJXMiwgUlcxMywgUlc1KTsKKwlyb3VuZF8wXzYzKFJELCBSRSwgUkYsIFJHLCBSSCwgUkEsIFJCLCBSQywgUlc1LCBSVzMsIFJXMTQsIFJXNik7CisJcm91bmRfMF82MyhSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJXNiwgUlc0LCBSVzE1LCBSVzcpOworCXJvdW5kXzBfNjMoUkIsIFJDLCBSRCwgUkUsIFJGLCBSRywgUkgsIFJBLCBSVzcsIFJXNSwgUlcwLCBSVzgpOworCXJvdW5kXzBfNjMoUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSVzgsIFJXNiwgUlcxLCBSVzkpOworCXJvdW5kXzBfNjMoUkgsIFJBLCBSQiwgUkMsIFJELCBSRSwgUkYsIFJHLCBSVzksIFJXNywgUlcyLCBSVzEwKTsKKwlyb3VuZF8wXzYzKFJHLCBSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUlcxMCwgUlc4LCBSVzMsIFJXMTEpOworCXJvdW5kXzBfNjMoUkYsIFJHLCBSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSVzExLCBSVzksIFJXNCwgUlcxMik7CisJcm91bmRfMF82MyhSRSwgUkYsIFJHLCBSSCwgUkEsIFJCLCBSQywgUkQsIFJXMTIsIFJXMTAsIFJXNSwgUlcxMyk7CisJcm91bmRfMF82MyhSRCwgUkUsIFJGLCBSRywgUkgsIFJBLCBSQiwgUkMsIFJXMTMsIFJXMTEsIFJXNiwgUlcxNCk7CisJcm91bmRfMF82MyhSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJXMTQsIFJXMTIsIFJXNywgUlcxNSk7CisJcm91bmRfMF82MyhSQiwgUkMsIFJELCBSRSwgUkYsIFJHLCBSSCwgUkEsIFJXMTUsIFJXMTMsIFJXOCwgUlcwKTsKKwlibmUgLkxvb3A7CisKKwlyb3VuZF82NF83OShSQSwgUkIsIFJDLCBSRCwgUkUsIFJGLCBSRywgUkgsIFJXMCk7CisJcm91bmRfNjRfNzkoUkgsIFJBLCBSQiwgUkMsIFJELCBSRSwgUkYsIFJHLCBSVzEpOworCXJvdW5kXzY0Xzc5KFJHLCBSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUlcyKTsKKwlyb3VuZF82NF83OShSRiwgUkcsIFJILCBSQSwgUkIsIFJDLCBSRCwgUkUsIFJXMyk7CisJcm91bmRfNjRfNzkoUkUsIFJGLCBSRywgUkgsIFJBLCBSQiwgUkMsIFJELCBSVzQpOworCXJvdW5kXzY0Xzc5KFJELCBSRSwgUkYsIFJHLCBSSCwgUkEsIFJCLCBSQywgUlc1KTsKKwlyb3VuZF82NF83OShSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJXNik7CisJcm91bmRfNjRfNzkoUkIsIFJDLCBSRCwgUkUsIFJGLCBSRywgUkgsIFJBLCBSVzcpOworCXJvdW5kXzY0Xzc5KFJBLCBSQiwgUkMsIFJELCBSRSwgUkYsIFJHLCBSSCwgUlc4KTsKKwlyb3VuZF82NF83OShSSCwgUkEsIFJCLCBSQywgUkQsIFJFLCBSRiwgUkcsIFJXOSk7CisJcm91bmRfNjRfNzkoUkcsIFJILCBSQSwgUkIsIFJDLCBSRCwgUkUsIFJGLCBSVzEwKTsKKwlyb3VuZF82NF83OShSRiwgUkcsIFJILCBSQSwgUkIsIFJDLCBSRCwgUkUsIFJXMTEpOworCXJvdW5kXzY0Xzc5KFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJDLCBSRCwgUlcxMik7CisJcm91bmRfNjRfNzkoUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJDLCBSVzEzKTsKKwlyb3VuZF82NF83OShSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUkIsIFJXMTQpOworCXJvdW5kXzY0Xzc5KFJCLCBSQywgUkQsIFJFLCBSRiwgUkcsIFJILCBSQSwgUlcxNSk7CisKKwkvKiBMb2FkIGNvbnRleHQgdG8gZDE2LWQyMyAqLworCXZsZDEuNjQge1JXMC1SVzN9LCBbJXIwXSE7CisJdmxkMS42NCB7Ulc0LVJXN30sIFslcjBdOworCXN1YiAlcjAsICMoNCo4KTsKKworCXZhZGQudTY0IFJBLCBSVzA7CisJdmFkZC51NjQgUkIsIFJXMTsKKwl2YWRkLnU2NCBSQywgUlcyOworCXZhZGQudTY0IFJELCBSVzM7CisJdmFkZC51NjQgUkUsIFJXNDsKKwl2YWRkLnU2NCBSRiwgUlc1OworCXZhZGQudTY0IFJHLCBSVzY7CisJdmFkZC51NjQgUkgsIFJXNzsKKworCS8qIFN0b3JlIHRoZSBmaXJzdCBoYWxmIG9mIGNvbnRleHQgKi8KKwl2c3QxLjY0IHtSQS1SRH0sIFslcjBdITsKKworCS8qIENsZWFyIHVzZWQgcmVnaXN0ZXJzICovCisJLyogZDE2LWQzMSAqLworCXZlb3IudTY0IFJXMDFxLCBSVzAxcTsKKwl2ZW9yLnU2NCBSVzIzcSwgUlcyM3E7CisJdmVvci51NjQgUlc0NXEsIFJXNDVxOworCXZlb3IudTY0IFJXNjdxLCBSVzY3cTsKKwl2c3QxLjY0IHtSRS1SSH0sIFslcjBdOyAvKiBTdG9yZSB0aGUgbGFzdCBoYWxmIG9mIGNvbnRleHQgKi8KKwl2ZW9yLnU2NCBSVzg5cSwgUlc4OXE7CisJdmVvci51NjQgUlcxMDExcSwgUlcxMDExcTsKKwl2ZW9yLnU2NCBSVzEyMTNxLCBSVzEyMTNxOworCXZlb3IudTY0IFJXMTQxNXEsIFJXMTQxNXE7CisJLyogZDgtZDE1ICovCisJdnBvcCB7UlQwLVJUN307CisJLyogZDAtZDcgKHEwLXEzKSAqLworCXZlb3IudTY0ICVxMCwgJXEwOworCXZlb3IudTY0ICVxMSwgJXExOworCXZlb3IudTY0ICVxMiwgJXEyOworCXZlb3IudTY0ICVxMywgJXEzOworCisJYnggJWxyOworLnNpemUgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uLC4tX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NpcGhlci9zaGE1MTItYXZ4LWFtZDY0LlMgYi9jaXBoZXIvc2hhNTEyLWF2eC1hbWQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDliODcKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvc2hhNTEyLWF2eC1hbWQ2NC5TCkBAIC0wLDAgKzEsNDE2IEBACisvKgorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7IENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KKzsKKzsgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzsKKzsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKzsgbWV0OgorOworOyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorOworOyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorOyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorOyAgIGRpc3RyaWJ1dGlvbi4KKzsKKzsgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworOyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCis7ICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzsKKzsKKzsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiAiQVMgSVMiIEFORCBBTlkKKzsgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKzsgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIENPUlBPUkFUSU9OIE9SCis7IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorOyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCis7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorOyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCis7IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCis7IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworOyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworKi8KKy8qCisgKiBDb252ZXJzaW9uIHRvIEdBUyBhc3NlbWJseSBhbmQgaW50ZWdyYXRpb24gdG8gbGliZ2NyeXB0CisgKiAgYnkgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICovCisKKyNpZmRlZiBfX3g4Nl82NAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2lmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9JTlRFTF9TWU5UQVhfUExBVEZPUk1fQVMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fQVZYKSAmJiBkZWZpbmVkKFVTRV9TSEE1MTIpCisKKyNpZmRlZiBfX1BJQ19fCisjICBkZWZpbmUgQUREX1JJUCArcmlwCisjZWxzZQorIyAgZGVmaW5lIEFERF9SSVAKKyNlbmRpZgorCisuaW50ZWxfc3ludGF4IG5vcHJlZml4CisKKy50ZXh0CisKKy8qIFZpcnR1YWwgUmVnaXN0ZXJzICovCittc2cgPSByZGkgLyogQVJHMSAqLworZGlnZXN0ID0gcnNpIC8qIEFSRzIgKi8KK21zZ2xlbiA9IHJkeCAvKiBBUkczICovCitUMSA9IHJjeAorVDIgPSByOAorYV82NCA9IHI5CitiXzY0ID0gcjEwCitjXzY0ID0gcjExCitkXzY0ID0gcjEyCitlXzY0ID0gcjEzCitmXzY0ID0gcjE0CitnXzY0ID0gcjE1CitoXzY0ID0gcmJ4Cit0bXAwID0gcmF4CisKKy8qCis7IExvY2FsIHZhcmlhYmxlcyAoc3RhY2sgZnJhbWUpCis7IE5vdGU6IGZyYW1lX3NpemUgbXVzdCBiZSBhbiBvZGQgbXVsdGlwbGUgb2YgOCBieXRlcyB0byBYTU0gYWxpZ24gUlNQCisqLworZnJhbWVfVyAgICAgID0gMCAvKiBNZXNzYWdlIFNjaGVkdWxlICovCitmcmFtZV9XX3NpemUgPSAoODAgKiA4KQorZnJhbWVfV0sgICAgICA9ICgoZnJhbWVfVykgKyAoZnJhbWVfV19zaXplKSkgLyogV1t0XSArIEtbdF0gfCBXW3QrMV0gKyBLW3QrMV0gKi8KK2ZyYW1lX1dLX3NpemUgPSAoMiAqIDgpCitmcmFtZV9HUFJTQVZFICAgICAgPSAoKGZyYW1lX1dLKSArIChmcmFtZV9XS19zaXplKSkKK2ZyYW1lX0dQUlNBVkVfc2l6ZSA9ICg1ICogOCkKK2ZyYW1lX3NpemUgPSAoKGZyYW1lX0dQUlNBVkUpICsgKGZyYW1lX0dQUlNBVkVfc2l6ZSkpCisKKworLyogVXNlZnVsIFFXT1JEICJhcnJheXMiIGZvciBzaW1wbGVyIG1lbW9yeSByZWZlcmVuY2VzICovCisjZGVmaW5lIE1TRyhpKSAgICBtc2cgICAgKyA4KihpKSAgICAgICAgICAgICAgIC8qIElucHV0IG1lc3NhZ2UgKGFyZzEpICovCisjZGVmaW5lIERJR0VTVChpKSBkaWdlc3QgKyA4KihpKSAgICAgICAgICAgICAgIC8qIE91dHB1dCBEaWdlc3QgKGFyZzIpICovCisjZGVmaW5lIEtfdChpKSAgICAuTEs1MTIgICArIDgqKGkpIEFERF9SSVAgICAgIC8qIFNIQSBDb25zdGFudHMgKHN0YXRpYyBtZW0pICovCisjZGVmaW5lIFdfdChpKSAgICByc3AgKyBmcmFtZV9XICArIDgqKGkpICAgICAgIC8qIE1lc3NhZ2UgU2NoZWR1bGUgKHN0YWNrIGZyYW1lKSAqLworI2RlZmluZSBXS18yKGkpICAgcnNwICsgZnJhbWVfV0sgKyA4KigoaSkgJSAyKSAvKiBXW3RdK0tbdF0gKHN0YWNrIGZyYW1lKSAqLworLyogTVNHLCBESUdFU1QsIEtfdCwgV190IGFyZSBhcnJheXMgKi8KKy8qIFdLXzIodCkgcG9pbnRzIHRvIDEgb2YgMiBxd29yZHMgYXQgZnJhbWUuV0sgZGVwZGVuZGluZyBvbiB0IGJlaW5nIG9kZC9ldmVuICovCisKKy5tYWNybyBSb3RhdGVTdGF0ZQorCS8qIFJvdGF0ZSBzeW1ibGVzIGEuLmggcmlnaHQgKi8KKwlfX1RNUCA9IGhfNjQKKwloXzY0ID0gIGdfNjQKKwlnXzY0ID0gIGZfNjQKKwlmXzY0ID0gIGVfNjQKKwllXzY0ID0gIGRfNjQKKwlkXzY0ID0gIGNfNjQKKwljXzY0ID0gIGJfNjQKKwliXzY0ID0gIGFfNjQKKwlhXzY0ID0gIF9fVE1QCisuZW5kbQorCisubWFjcm8gUk9SUSBwMSBwMgorCS8qIHNobGQgaXMgZmFzdGVyIHRoYW4gcm9yIG9uIEludGVsIFNhbmR5YnJpZGdlICovCisJc2hsZAlccDEsIFxwMSwgKDY0IC0gXHAyKQorLmVuZG0KKworLm1hY3JvIFNIQTUxMl9Sb3VuZCB0CisJLyogQ29tcHV0ZSBSb3VuZCAlJXQgKi8KKwltb3YJVDEsICAgZl82NCAgICAgICAgLyogVDEgPSBmICovCisJbW92CXRtcDAsIGVfNjQgICAgICAgIC8qIHRtcCA9IGUgKi8KKwl4b3IJVDEsICAgZ182NCAgICAgICAgLyogVDEgPSBmIF4gZyAqLworCVJPUlEJdG1wMCwgMjMgLyogNDEgICAgIDsgdG1wID0gZSByb3IgMjMgKi8KKwlhbmQJVDEsICAgZV82NCAgICAgICAgLyogVDEgPSAoZiBeIGcpICYgZSAqLworCXhvcgl0bXAwLCBlXzY0ICAgICAgICAvKiB0bXAgPSAoZSByb3IgMjMpIF4gZSAqLworCXhvcglUMSwgICBnXzY0ICAgICAgICAvKiBUMSA9ICgoZiBeIGcpICYgZSkgXiBnID0gQ0goZSxmLGcpICovCisJYWRkCVQxLCAgIFtXS18yKFx0KV0gLyogV1t0XSArIEtbdF0gZnJvbSBtZXNzYWdlIHNjaGVkdWxlciAqLworCVJPUlEJdG1wMCwgNCAvKiAxOCAgICAgIDsgdG1wID0gKChlIHJvciAyMykgXiBlKSByb3IgNCAqLworCXhvcgl0bXAwLCBlXzY0ICAgICAgICAvKiB0bXAgPSAoKChlIHJvciAyMykgXiBlKSByb3IgNCkgXiBlICovCisJbW92CVQyLCAgIGFfNjQgICAgICAgIC8qIFQyID0gYSAqLworCWFkZAlUMSwgICBoXzY0ICAgICAgICAvKiBUMSA9IENIKGUsZixnKSArIFdbdF0gKyBLW3RdICsgaCAqLworCVJPUlEJdG1wMCwgMTQgLyogMTQgICAgIDsgdG1wID0gKCgoKGUgcm9yMjMpXmUpcm9yNCleZSlyb3IxNCA9IFMxKGUpICovCisJYWRkCVQxLCAgIHRtcDAgICAgICAgIC8qIFQxID0gQ0goZSxmLGcpICsgV1t0XSArIEtbdF0gKyBTMShlKSAqLworCW1vdgl0bXAwLCBhXzY0ICAgICAgICAvKiB0bXAgPSBhICovCisJeG9yCVQyLCAgIGNfNjQgICAgICAgIC8qIFQyID0gYSBeIGMgKi8KKwlhbmQJdG1wMCwgY182NCAgICAgICAgLyogdG1wID0gYSAmIGMgKi8KKwlhbmQJVDIsICAgYl82NCAgICAgICAgLyogVDIgPSAoYSBeIGMpICYgYiAqLworCXhvcglUMiwgICB0bXAwICAgICAgICAvKiBUMiA9ICgoYSBeIGMpICYgYikgXiAoYSAmIGMpID0gTWFqKGEsYixjKSAqLworCW1vdgl0bXAwLCBhXzY0ICAgICAgICAvKiB0bXAgPSBhICovCisJUk9SUQl0bXAwLCA1IC8qIDM5ICAgICAgOyB0bXAgPSBhIHJvciA1ICovCisJeG9yCXRtcDAsIGFfNjQgICAgICAgIC8qIHRtcCA9IChhIHJvciA1KSBeIGEgKi8KKwlhZGQJZF82NCwgVDEgICAgICAgICAgLyogZShuZXh0X3N0YXRlKSA9IGQgKyBUMSAgKi8KKwlST1JRCXRtcDAsIDYgLyogMzQgICAgICA7IHRtcCA9ICgoYSByb3IgNSkgXiBhKSByb3IgNiAqLworCXhvcgl0bXAwLCBhXzY0ICAgICAgICAvKiB0bXAgPSAoKChhIHJvciA1KSBeIGEpIHJvciA2KSBeIGEgKi8KKwlsZWEJaF82NCwgW1QxICsgVDJdICAgLyogYShuZXh0X3N0YXRlKSA9IFQxICsgTWFqKGEsYixjKSAqLworCVJPUlEJdG1wMCwgMjggLyogMjggICAgIDsgdG1wID0gKCgoKGEgcm9yNSleYSlyb3I2KV5hKXJvcjI4ID0gUzAoYSkgKi8KKwlhZGQJaF82NCwgdG1wMCAgICAgICAgLyogYShuZXh0X3N0YXRlKSA9IFQxICsgTWFqKGEsYixjKSBTMChhKSAqLworCVJvdGF0ZVN0YXRlCisuZW5kbQorCisubWFjcm8gU0hBNTEyXzJTY2hlZF8yUm91bmRfYXZ4IHQKKy8qCTsgQ29tcHV0ZSByb3VuZHMgJSV0LTIgYW5kICUldC0xCisJOyBDb21wdXRlIG1lc3NhZ2Ugc2NoZWR1bGUgUVdPUkRTICUldCBhbmQgJSV0KzEKKworCTsgICBUd28gcm91bmRzIGFyZSBjb21wdXRlZCBiYXNlZCBvbiB0aGUgdmFsdWVzIGZvciBLW3QtMl0rV1t0LTJdIGFuZAorCTsgS1t0LTFdK1dbdC0xXSB3aGljaCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkIGF0IFdLXzIgYnkgdGhlIG1lc3NhZ2UKKwk7IHNjaGVkdWxlci4KKwk7ICAgVGhlIHR3byBuZXcgc2NoZWR1bGUgUVdPUkRTIGFyZSBzdG9yZWQgYXQgW1dfdCglJXQpXSBhbmQgW1dfdCglJXQrMSldLgorCTsgVGhleSBhcmUgdGhlbiBhZGRlZCB0byB0aGVpciByZXNwZWN0aXZlIFNIQTUxMiBjb25zdGFudHMgYXQKKwk7IFtLX3QoJSV0KV0gYW5kIFtLX3QoJSV0KzEpXSBhbmQgc3RvcmVkIGF0IGRxd29yZCBbV0tfMiglJXQpXQorCTsgICBGb3IgYnJpZXZpdHksIHRoZSBjb21tZW50cyBmb2xsb3dpbmcgdmVjdG9yZWQgaW5zdHJ1Y3Rpb25zIG9ubHkgcmVmZXIgdG8KKwk7IHRoZSBmaXJzdCBvZiBhIHBhaXIgb2YgUVdPUkRTLgorCTsgRWcuIFhNTTQ9V1t0LTJdIHJlYWxseSBtZWFucyBYTU00PXtXW3QtMl18V1t0LTFdfQorCTsgICBUaGUgY29tcHV0YXRpb24gb2YgdGhlIG1lc3NhZ2Ugc2NoZWR1bGUgYW5kIHRoZSByb3VuZHMgYXJlIHRpZ2h0bHkKKwk7IHN0aXRjaGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIGluc3RydWN0aW9uLWxldmVsIHBhcmFsbGVsaXNtLgorCTsgRm9yIGNsYXJpdHksIGludGVnZXIgaW5zdHJ1Y3Rpb25zIChmb3IgdGhlIHJvdW5kcyBjYWxjdWxhdGlvbikgYXJlIGluZGVudGVkCisJOyBieSBvbmUgdGFiLiBWZWN0b3JlZCBpbnN0cnVjdGlvbnMgKGZvciB0aGUgbWVzc2FnZSBzY2hlZHVsZXIpIGFyZSBpbmRlbnRlZAorCTsgYnkgdHdvIHRhYnMuICovCisKKwkJdm1vdmRxYQl4bW00LCBbV190KFx0LTIpXSAgIC8qIFhNTTQgPSBXW3QtMl0gKi8KKwkJdm1vdmRxdQl4bW01LCBbV190KFx0LTE1KV0gIC8qIFhNTTUgPSBXW3QtMTVdICovCisJbW92CVQxLCAgIGZfNjQKKwkJdnBzcmxxCXhtbTAsIHhtbTQsIDYxICAgICAgIC8qIFhNTTAgPSBXW3QtMl0+PjYxICovCisJbW92CXRtcDAsIGVfNjQKKwkJdnBzcmxxCXhtbTYsIHhtbTUsIDEgICAgICAgIC8qIFhNTTYgPSBXW3QtMTVdPj4xICovCisJeG9yCVQxLCAgIGdfNjQKKwlST1JRCXRtcDAsIDIzIC8qIDQxICovCisJCXZwc3JscQl4bW0xLCB4bW00LCAxOSAgICAgICAvKiBYTU0xID0gV1t0LTJdPj4xOSAqLworCWFuZAlUMSwgICBlXzY0CisJeG9yCXRtcDAsIGVfNjQKKwkJdnB4b3IJeG1tMCwgeG1tMCwgeG1tMSAgICAgICAgICAgLyogWE1NMCA9IFdbdC0yXT4+NjEgXiBXW3QtMl0+PjE5ICovCisJeG9yCVQxLCAgIGdfNjQKKwlhZGQJVDEsICAgW1dLXzIoXHQpXTsKKwkJdnBzcmxxCXhtbTcsIHhtbTUsIDggICAgICAgIC8qIFhNTTcgPSBXW3QtMTVdPj44ICovCisJUk9SUQl0bXAwLCA0IC8qIDE4ICovCisJCXZwc3JscQl4bW0yLCB4bW00LCA2ICAgICAgICAvKiBYTU0yID0gV1t0LTJdPj42ICovCisJeG9yCXRtcDAsIGVfNjQKKwltb3YJVDIsICAgYV82NAorCWFkZAlUMSwgICBoXzY0CisJCXZweG9yCXhtbTYsIHhtbTYsIHhtbTcgICAgICAgICAgIC8qIFhNTTYgPSBXW3QtMTVdPj4xIF4gV1t0LTE1XT4+OCAqLworCVJPUlEJdG1wMCwgMTQgLyogMTQgKi8KKwlhZGQJVDEsICAgdG1wMAorCQl2cHNybHEJeG1tOCwgeG1tNSwgNyAgICAgICAgLyogWE1NOCA9IFdbdC0xNV0+PjcgKi8KKwltb3YgCXRtcDAsIGFfNjQKKwl4b3IJVDIsICAgY182NAorCQl2cHNsbHEJeG1tMywgeG1tNCwgKDY0LTYxKSAgLyogWE1NMyA9IFdbdC0yXTw8MyAqLworCWFuZAl0bXAwLCBjXzY0CisJYW5kCVQyLCAgIGJfNjQKKwkJdnB4b3IJeG1tMiwgeG1tMiwgeG1tMyAgICAgICAgICAgLyogWE1NMiA9IFdbdC0yXT4+NiBeIFdbdC0yXTw8MyAqLworCXhvcglUMiwgICB0bXAwCisJbW92CXRtcDAsIGFfNjQKKwkJdnBzbGxxCXhtbTksIHhtbTUsICg2NC0xKSAgIC8qIFhNTTkgPSBXW3QtMTVdPDw2MyAqLworCVJPUlEJdG1wMCwgNSAvKiAzOSAqLworCQl2cHhvcgl4bW04LCB4bW04LCB4bW05ICAgICAgICAgICAvKiBYTU04ID0gV1t0LTE1XT4+NyBeIFdbdC0xNV08PDYzICovCisJeG9yCXRtcDAsIGFfNjQKKwlhZGQJZF82NCwgVDEKKwlST1JRCXRtcDAsIDYgLyogMzQgKi8KKwl4b3IJdG1wMCwgYV82NAorCQl2cHhvcgl4bW02LCB4bW02LCB4bW04ICAgICAgICAgICAvKiBYTU02ID0gV1t0LTE1XT4+MSBeIFdbdC0xNV0+PjggXiBXW3QtMTVdPj43IF4gV1t0LTE1XTw8NjMgKi8KKwlsZWEJaF82NCwgW1QxICsgVDJdCisJUk9SUSAJdG1wMCwgMjggLyogMjggKi8KKwkJdnBzbGxxCXhtbTQsIHhtbTQsICg2NC0xOSkgICAgICAgIC8qIFhNTTQgPSBXW3QtMl08PDI1ICovCisJYWRkCWhfNjQsIHRtcDAKKwlSb3RhdGVTdGF0ZQorCQl2cHhvcgl4bW0wLCB4bW0wLCB4bW00ICAgICAgICAgICAvKiBYTU0wID0gV1t0LTJdPj42MSBeIFdbdC0yXT4+MTkgXiBXW3QtMl08PDI1ICovCisJbW92CVQxLCBmXzY0CisJCXZweG9yCXhtbTAsIHhtbTAsIHhtbTIgICAgICAgICAgIC8qIFhNTTAgPSBzMShXW3QtMl0pICovCisJbW92CXRtcDAsIGVfNjQKKwl4b3IJVDEsICAgZ182NAorCQl2cGFkZHEJeG1tMCwgeG1tMCwgW1dfdChcdC0xNildICAvKiBYTU0wID0gczEoV1t0LTJdKSArIFdbdC0xNl0gKi8KKwkJdm1vdmRxdQl4bW0xLCBbV190KFx0LSA3KV0gIC8qIFhNTTEgPSBXW3QtN10gKi8KKwlST1JRCXRtcDAsIDIzIC8qIDQxICovCisJYW5kCVQxLCAgIGVfNjQKKwl4b3IJdG1wMCwgZV82NAorCXhvcglUMSwgICBnXzY0CisJCXZwc2xscQl4bW01LCB4bW01LCAoNjQtOCkgICAgICAgICAvKiBYTU01ID0gV1t0LTE1XTw8NTYgKi8KKwlhZGQJVDEsICAgW1dLXzIoXHQrMSldCisJCXZweG9yCXhtbTYsIHhtbTYsIHhtbTUgICAgICAgICAgIC8qIFhNTTYgPSBzMChXW3QtMTVdKSAqLworCVJPUlEJdG1wMCwgNCAvKiAxOCAqLworCQl2cGFkZHEJeG1tMCwgeG1tMCwgeG1tNiAgICAgICAgICAgLyogWE1NMCA9IHMxKFdbdC0yXSkgKyBXW3QtMTZdICsgczAoV1t0LTE1XSkgKi8KKwl4b3IJdG1wMCwgZV82NAorCQl2cGFkZHEJeG1tMCwgeG1tMCwgeG1tMSAgICAgICAgICAgLyogWE1NMCA9IFdbdF0gPSBzMShXW3QtMl0pICsgV1t0LTddICsgczAoV1t0LTE1XSkgKyBXW3QtMTZdICovCisJbW92CVQyLCAgIGFfNjQKKwlhZGQJVDEsICAgaF82NAorCVJPUlEJdG1wMCwgMTQgLyogMTQgKi8KKwlhZGQJVDEsICAgdG1wMAorCQl2bW92ZHFhCVtXX3QoXHQpXSwgeG1tMCAgICAgIC8qIFN0b3JlIFdbdF0gKi8KKwkJdnBhZGRxCXhtbTAsIHhtbTAsIFtLX3QodCldICAgICAgICAvKiBDb21wdXRlIFdbdF0rS1t0XSAqLworCQl2bW92ZHFhCVtXS18yKHQpXSwgeG1tMCAgICAgICAvKiBTdG9yZSBXW3RdK0tbdF0gZm9yIG5leHQgcm91bmRzICovCisJbW92CXRtcDAsIGFfNjQKKwl4b3IJVDIsICAgY182NAorCWFuZAl0bXAwLCBjXzY0CisJYW5kCVQyLCAgIGJfNjQKKwl4b3IJVDIsICAgdG1wMAorCW1vdgl0bXAwLCBhXzY0CisJUk9SUQl0bXAwLCA1IC8qIDM5ICovCisJeG9yCXRtcDAsIGFfNjQKKwlhZGQJZF82NCwgVDEKKwlST1JRCXRtcDAsIDYgLyogMzQgKi8KKwl4b3IJdG1wMCwgYV82NAorCWxlYQloXzY0LCBbVDEgKyBUMl0KKwlST1JRCXRtcDAsIDI4IC8qIDI4ICovCisJYWRkCWhfNjQsIHRtcDAKKwlSb3RhdGVTdGF0ZQorLmVuZG0KKworLyoKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOyB2b2lkIHNoYTUxMl9hdngoY29uc3Qgdm9pZCogTSwgdm9pZCogRCwgdWludDY0X3QgTCk7Cis7IFB1cnBvc2U6IFVwZGF0ZXMgdGhlIFNIQTUxMiBkaWdlc3Qgc3RvcmVkIGF0IEQgd2l0aCB0aGUgbWVzc2FnZSBzdG9yZWQgaW4gTS4KKzsgVGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgcG9pbnRlZCB0byBieSBNIG11c3QgYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiBTSEE1MTIKKzsgICBtZXNzYWdlIGJsb2Nrcy4KKzsgTCBpcyB0aGUgbWVzc2FnZSBsZW5ndGggaW4gU0hBNTEyIGJsb2NrcworKi8KKy5nbG9ibCBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eAorLnR5cGUgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9hdngsQGZ1bmN0aW9uOworLmFsaWduIDE2CitfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eDoKKwl4b3IgZWF4LCBlYXgKKworCWNtcAltc2dsZW4sIDAKKwlqZQkuTG5vd29yaworCisJdnplcm91cHBlcgorCisJLyogQWxsb2NhdGUgU3RhY2sgU3BhY2UgKi8KKwlzdWIJcnNwLCBmcmFtZV9zaXplCisKKwkvKiBTYXZlIEdQUnMgKi8KKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMF0sIHJieAorCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAxXSwgcjEyCisJbW92CVtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDJdLCByMTMKKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogM10sIHIxNAorCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiA0XSwgcjE1CisKKy5MdXBkYXRlYmxvY2s6CisKKwkvKiBMb2FkIHN0YXRlIHZhcmlhYmxlcyAqLworCW1vdglhXzY0LCBbRElHRVNUKDApXQorCW1vdgliXzY0LCBbRElHRVNUKDEpXQorCW1vdgljXzY0LCBbRElHRVNUKDIpXQorCW1vdglkXzY0LCBbRElHRVNUKDMpXQorCW1vdgllXzY0LCBbRElHRVNUKDQpXQorCW1vdglmXzY0LCBbRElHRVNUKDUpXQorCW1vdglnXzY0LCBbRElHRVNUKDYpXQorCW1vdgloXzY0LCBbRElHRVNUKDcpXQorCisJdCA9IDAKKwkucmVwdCA4MC8yICsgMQorCS8qICg4MCByb3VuZHMpIC8gKDIgcm91bmRzL2l0ZXJhdGlvbikgKyAoMSBpdGVyYXRpb24pICovCisJLyogKzEgaXRlcmF0aW9uIGJlY2F1c2UgdGhlIHNjaGVkdWxlciBsZWFkcyBoYXNoaW5nIGJ5IDEgaXRlcmF0aW9uICovCisJCS5pZiB0IDwgMgorCQkJLyogQlNXQVAgMiBRV09SRFMgKi8KKwkJCXZtb3ZkcWEJeG1tMSwgWy5MWE1NX1FXT1JEX0JTV0FQIEFERF9SSVBdCisJCQl2bW92ZHF1CXhtbTAsIFtNU0codCldCisJCQl2cHNodWZiCXhtbTAsIHhtbTAsIHhtbTEgICAgIC8qIEJTV0FQICovCisJCQl2bW92ZHFhCVtXX3QodCldLCB4bW0wICAgICAgIC8qIFN0b3JlIFNjaGVkdWxlZCBQYWlyICovCisJCQl2cGFkZHEJeG1tMCwgeG1tMCwgW0tfdCh0KV0gLyogQ29tcHV0ZSBXW3RdK0tbdF0gKi8KKwkJCXZtb3ZkcWEJW1dLXzIodCldLCB4bW0wICAgICAgLyogU3RvcmUgaW50byBXSyBmb3Igcm91bmRzICovCisJCS5lbHNlaWYgdCA8IDE2CisJCQkvKiBCU1dBUCAyIFFXT1JEUywgQ29tcHV0ZSAyIFJvdW5kcyAqLworCQkJdm1vdmRxdQl4bW0wLCBbTVNHKHQpXQorCQkJdnBzaHVmYgl4bW0wLCB4bW0wLCB4bW0xICAgICAvKiBCU1dBUCAqLworCQkJU0hBNTEyX1JvdW5kICh0IC0gMikgICAgICAgICAvKiBSb3VuZCB0LTIgKi8KKwkJCXZtb3ZkcWEJW1dfdCh0KV0sIHhtbTAgICAgICAgLyogU3RvcmUgU2NoZWR1bGVkIFBhaXIgKi8KKwkJCXZwYWRkcQl4bW0wLCB4bW0wLCBbS190KHQpXSAvKiBDb21wdXRlIFdbdF0rS1t0XSAqLworCQkJU0hBNTEyX1JvdW5kICh0IC0gMSkgICAgICAgICAvKiBSb3VuZCB0LTEgKi8KKwkJCXZtb3ZkcWEJW1dLXzIodCldLCB4bW0wICAgICAgLyogV1t0XStLW3RdIGludG8gV0sgKi8KKwkJLmVsc2VpZiB0IDwgNzkKKwkJCS8qIFNjaGVkdWxlIDIgUVdPUkRTOyBDb21wdXRlIDIgUm91bmRzICovCisJCQlTSEE1MTJfMlNjaGVkXzJSb3VuZF9hdnggdAorCQkuZWxzZQorCQkJLyogQ29tcHV0ZSAyIFJvdW5kcyAqLworCQkJU0hBNTEyX1JvdW5kICh0IC0gMikKKwkJCVNIQTUxMl9Sb3VuZCAodCAtIDEpCisJCS5lbmRpZgorCQl0ID0gKCh0KSsyKQorCS5lbmRyCisKKwkvKiBVcGRhdGUgZGlnZXN0ICovCisJYWRkCVtESUdFU1QoMCldLCBhXzY0CisJYWRkCVtESUdFU1QoMSldLCBiXzY0CisJYWRkCVtESUdFU1QoMildLCBjXzY0CisJYWRkCVtESUdFU1QoMyldLCBkXzY0CisJYWRkCVtESUdFU1QoNCldLCBlXzY0CisJYWRkCVtESUdFU1QoNSldLCBmXzY0CisJYWRkCVtESUdFU1QoNildLCBnXzY0CisJYWRkCVtESUdFU1QoNyldLCBoXzY0CisKKwkvKiBBZHZhbmNlIHRvIG5leHQgbWVzc2FnZSBibG9jayAqLworCWFkZAltc2csIDE2KjgKKwlkZWMJbXNnbGVuCisJam56CS5MdXBkYXRlYmxvY2sKKworCS8qIFJlc3RvcmUgR1BScyAqLworCW1vdglyYngsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDBdCisJbW92CXIxMiwgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMV0KKwltb3YJcjEzLCBbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAyXQorCW1vdglyMTQsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDNdCisJbW92CXIxNSwgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogNF0KKworCS8qIFJlc3RvcmUgU3RhY2sgUG9pbnRlciAqLworCWFkZAlyc3AsIGZyYW1lX3NpemUKKworCXZ6ZXJvYWxsCisKKwkvKiBSZXR1cm4gc3RhY2sgYnVybiBkZXB0aCAqLworCW1vdglyYXgsIGZyYW1lX3NpemUKKworLkxub3dvcms6CisJcmV0CisKKy8qCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzs7IEJpbmFyeSBEYXRhCisqLworCisuZGF0YQorCisuYWxpZ24gMTYKKworLyogTWFzayBmb3IgYnl0ZS1zd2FwcGluZyBhIGNvdXBsZSBvZiBxd29yZHMgaW4gYW4gWE1NIHJlZ2lzdGVyIHVzaW5nICh2KXBzaHVmYi4gKi8KKy5MWE1NX1FXT1JEX0JTV0FQOgorCS5vY3RhIDB4MDgwOTBhMGIwYzBkMGUwZjAwMDEwMjAzMDQwNTA2MDcKKworLyogS1t0XSB1c2VkIGluIFNIQTUxMiBoYXNoaW5nICovCisuTEs1MTI6CisJLnF1YWQgMHg0MjhhMmY5OGQ3MjhhZTIyLDB4NzEzNzQ0OTEyM2VmNjVjZAorCS5xdWFkIDB4YjVjMGZiY2ZlYzRkM2IyZiwweGU5YjVkYmE1ODE4OWRiYmMKKwkucXVhZCAweDM5NTZjMjViZjM0OGI1MzgsMHg1OWYxMTFmMWI2MDVkMDE5CisJLnF1YWQgMHg5MjNmODJhNGFmMTk0ZjliLDB4YWIxYzVlZDVkYTZkODExOAorCS5xdWFkIDB4ZDgwN2FhOThhMzAzMDI0MiwweDEyODM1YjAxNDU3MDZmYmUKKwkucXVhZCAweDI0MzE4NWJlNGVlNGIyOGMsMHg1NTBjN2RjM2Q1ZmZiNGUyCisJLnF1YWQgMHg3MmJlNWQ3NGYyN2I4OTZmLDB4ODBkZWIxZmUzYjE2OTZiMQorCS5xdWFkIDB4OWJkYzA2YTcyNWM3MTIzNSwweGMxOWJmMTc0Y2Y2OTI2OTQKKwkucXVhZCAweGU0OWI2OWMxOWVmMTRhZDIsMHhlZmJlNDc4NjM4NGYyNWUzCisJLnF1YWQgMHgwZmMxOWRjNjhiOGNkNWI1LDB4MjQwY2ExY2M3N2FjOWM2NQorCS5xdWFkIDB4MmRlOTJjNmY1OTJiMDI3NSwweDRhNzQ4NGFhNmVhNmU0ODMKKwkucXVhZCAweDVjYjBhOWRjYmQ0MWZiZDQsMHg3NmY5ODhkYTgzMTE1M2I1CisJLnF1YWQgMHg5ODNlNTE1MmVlNjZkZmFiLDB4YTgzMWM2NmQyZGI0MzIxMAorCS5xdWFkIDB4YjAwMzI3Yzg5OGZiMjEzZiwweGJmNTk3ZmM3YmVlZjBlZTQKKwkucXVhZCAweGM2ZTAwYmYzM2RhODhmYzIsMHhkNWE3OTE0NzkzMGFhNzI1CisJLnF1YWQgMHgwNmNhNjM1MWUwMDM4MjZmLDB4MTQyOTI5NjcwYTBlNmU3MAorCS5xdWFkIDB4MjdiNzBhODU0NmQyMmZmYywweDJlMWIyMTM4NWMyNmM5MjYKKwkucXVhZCAweDRkMmM2ZGZjNWFjNDJhZWQsMHg1MzM4MGQxMzlkOTViM2RmCisJLnF1YWQgMHg2NTBhNzM1NDhiYWY2M2RlLDB4NzY2YTBhYmIzYzc3YjJhOAorCS5xdWFkIDB4ODFjMmM5MmU0N2VkYWVlNiwweDkyNzIyYzg1MTQ4MjM1M2IKKwkucXVhZCAweGEyYmZlOGExNGNmMTAzNjQsMHhhODFhNjY0YmJjNDIzMDAxCisJLnF1YWQgMHhjMjRiOGI3MGQwZjg5NzkxLDB4Yzc2YzUxYTMwNjU0YmUzMAorCS5xdWFkIDB4ZDE5MmU4MTlkNmVmNTIxOCwweGQ2OTkwNjI0NTU2NWE5MTAKKwkucXVhZCAweGY0MGUzNTg1NTc3MTIwMmEsMHgxMDZhYTA3MDMyYmJkMWI4CisJLnF1YWQgMHgxOWE0YzExNmI4ZDJkMGM4LDB4MWUzNzZjMDg1MTQxYWI1MworCS5xdWFkIDB4Mjc0ODc3NGNkZjhlZWI5OSwweDM0YjBiY2I1ZTE5YjQ4YTgKKwkucXVhZCAweDM5MWMwY2IzYzVjOTVhNjMsMHg0ZWQ4YWE0YWUzNDE4YWNiCisJLnF1YWQgMHg1YjljY2E0Zjc3NjNlMzczLDB4NjgyZTZmZjNkNmIyYjhhMworCS5xdWFkIDB4NzQ4ZjgyZWU1ZGVmYjJmYywweDc4YTU2MzZmNDMxNzJmNjAKKwkucXVhZCAweDg0Yzg3ODE0YTFmMGFiNzIsMHg4Y2M3MDIwODFhNjQzOWVjCisJLnF1YWQgMHg5MGJlZmZmYTIzNjMxZTI4LDB4YTQ1MDZjZWJkZTgyYmRlOQorCS5xdWFkIDB4YmVmOWEzZjdiMmM2NzkxNSwweGM2NzE3OGYyZTM3MjUzMmIKKwkucXVhZCAweGNhMjczZWNlZWEyNjYxOWMsMHhkMTg2YjhjNzIxYzBjMjA3CisJLnF1YWQgMHhlYWRhN2RkNmNkZTBlYjFlLDB4ZjU3ZDRmN2ZlZTZlZDE3OAorCS5xdWFkIDB4MDZmMDY3YWE3MjE3NmZiYSwweDBhNjM3ZGM1YTJjODk4YTYKKwkucXVhZCAweDExM2Y5ODA0YmVmOTBkYWUsMHgxYjcxMGIzNTEzMWM0NzFiCisJLnF1YWQgMHgyOGRiNzdmNTIzMDQ3ZDg0LDB4MzJjYWFiN2I0MGM3MjQ5MworCS5xdWFkIDB4M2M5ZWJlMGExNWM5YmViYywweDQzMWQ2N2M0OWMxMDBkNGMKKwkucXVhZCAweDRjYzVkNGJlY2IzZTQyYjYsMHg1OTdmMjk5Y2ZjNjU3ZTJhCisJLnF1YWQgMHg1ZmNiNmZhYjNhZDZmYWVjLDB4NmM0NDE5OGM0YTQ3NTgxNworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2lwaGVyL3NoYTUxMi1hdngyLWJtaTItYW1kNjQuUyBiL2NpcGhlci9zaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzMDFmMwotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci9zaGE1MTItYXZ4Mi1ibWkyLWFtZDY0LlMKQEAgLTAsMCArMSw3ODcgQEAKKy8qCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzsgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorOworOyBBbGwgcmlnaHRzIHJlc2VydmVkLgorOworOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKzsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorOyBtZXQ6Cis7Cis7ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis7Cis7ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCis7ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCis7ICAgZGlzdHJpYnV0aW9uLgorOworOyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCis7ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKzsgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorOworOworOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElOVEVMIENPUlBPUkFUSU9OICJBUyBJUyIgQU5EIEFOWQorOyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorOyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKzsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URUwgQ09SUE9SQVRJT04gT1IKKzsgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCis7IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCis7IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKzsgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKzsgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCis7IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7IFRoaXMgY29kZSBzY2hlZHVsZXMgMSBibG9ja3MgYXQgYSB0aW1lLCB3aXRoIDQgbGFuZXMgcGVyIGJsb2NrCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKyovCisvKgorICogQ29udmVyc2lvbiB0byBHQVMgYXNzZW1ibHkgYW5kIGludGVncmF0aW9uIHRvIGxpYmdjcnlwdAorICogIGJ5IEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqLworCisjaWZkZWYgX194ODZfNjQKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpZiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfSU5URUxfU1lOVEFYX1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX0FWWDIpICYmIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9CTUkyKSAmJiBcCisgICAgZGVmaW5lZChVU0VfU0hBNTEyKQorCisjaWZkZWYgX19QSUNfXworIyAgZGVmaW5lIEFERF9SSVAgK3JpcAorI2Vsc2UKKyMgIGRlZmluZSBBRERfUklQCisjZW5kaWYKKworLmludGVsX3N5bnRheCBub3ByZWZpeAorCisudGV4dAorCisvKiBWaXJ0dWFsIFJlZ2lzdGVycyAqLworWV8wID0geW1tNAorWV8xID0geW1tNQorWV8yID0geW1tNgorWV8zID0geW1tNworCitZVE1QMCA9IHltbTAKK1lUTVAxID0geW1tMQorWVRNUDIgPSB5bW0yCitZVE1QMyA9IHltbTMKK1lUTVA0ID0geW1tOAorWEZFUiA9ICBZVE1QMAorCitCWVRFX0ZMSVBfTUFTSyA9ICB5bW05CisKK0lOUCA9ICAgICAgICAgcmRpIC8qIDFzdCBhcmcgKi8KK0NUWCA9ICAgICAgICAgcnNpIC8qIDJuZCBhcmcgKi8KK05VTV9CTEtTID0gICAgcmR4IC8qIDNyZCBhcmcgKi8KK2MgPSAgICAgICAgICAgcmN4CitkID0gICAgICAgICAgIHI4CitlID0gICAgICAgICAgIHJkeAoreTMgPSAgICAgICAgICByZGkKKworVEJMID0gICByYnAKKworYSA9ICAgICByYXgKK2IgPSAgICAgcmJ4CisKK2YgPSAgICAgcjkKK2cgPSAgICAgcjEwCitoID0gICAgIHIxMQorb2xkX2ggPSByMTEKKworVDEgPSAgICByMTIKK3kwID0gICAgcjEzCit5MSA9ICAgIHIxNAoreTIgPSAgICByMTUKKworeTQgPSAgICByMTIKKworLyogTG9jYWwgdmFyaWFibGVzIChzdGFjayBmcmFtZSkgKi8KKyNkZWZpbmUgZnJhbWVfWEZFUiAgICAgIDAKKyNkZWZpbmUgZnJhbWVfWEZFUl9zaXplICg0KjgpCisjZGVmaW5lIGZyYW1lX1NSTkQgICAgICAoZnJhbWVfWEZFUiArIGZyYW1lX1hGRVJfc2l6ZSkKKyNkZWZpbmUgZnJhbWVfU1JORF9zaXplICgxKjgpCisjZGVmaW5lIGZyYW1lX0lOUCAgICAgIChmcmFtZV9TUk5EICsgZnJhbWVfU1JORF9zaXplKQorI2RlZmluZSBmcmFtZV9JTlBfc2l6ZSAoMSo4KQorI2RlZmluZSBmcmFtZV9JTlBFTkQgICAgICAoZnJhbWVfSU5QICsgZnJhbWVfSU5QX3NpemUpCisjZGVmaW5lIGZyYW1lX0lOUEVORF9zaXplICgxKjgpCisjZGVmaW5lIGZyYW1lX1JTUFNBVkUgICAgICAoZnJhbWVfSU5QRU5EICsgZnJhbWVfSU5QRU5EX3NpemUpCisjZGVmaW5lIGZyYW1lX1JTUFNBVkVfc2l6ZSAoMSo4KQorI2RlZmluZSBmcmFtZV9HUFJTQVZFICAgICAgKGZyYW1lX1JTUFNBVkUgKyBmcmFtZV9SU1BTQVZFX3NpemUpCisjZGVmaW5lIGZyYW1lX0dQUlNBVkVfc2l6ZSAoNio4KQorI2RlZmluZSBmcmFtZV9zaXplIChmcmFtZV9HUFJTQVZFICsgZnJhbWVfR1BSU0FWRV9zaXplKQorCisjZGVmaW5lCVZNT1ZEUSB2bW92ZHF1IC8qOyBhc3N1bWUgYnVmZmVycyBub3QgYWxpZ25lZCAgKi8KKworLyogYWRkbSBbbWVtXSwgcmVnICovCisvKiBBZGQgcmVnIHRvIG1lbSB1c2luZyByZWctbWVtIGFkZCBhbmQgc3RvcmUgKi8KKy5tYWNybyBhZGRtIHAxIHAyCisJYWRkCVxwMiwgXHAxCisJbW92CVxwMSwgXHAyCisuZW5kbQorCisKKy8qIENPUFlfWU1NX0FORF9CU1dBUCB5bW0sIFttZW1dLCBieXRlX2ZsaXBfbWFzayAqLworLyogTG9hZCB5bW0gd2l0aCBtZW0gYW5kIGJ5dGUgc3dhcCBlYWNoIGR3b3JkICovCisubWFjcm8gQ09QWV9ZTU1fQU5EX0JTV0FQIHAxIHAyIHAzCisJVk1PVkRRIFxwMSwgXHAyCisJdnBzaHVmYiBccDEsIFxwMSwgXHAzCisuZW5kbQorLyogcm90YXRlX1lzICovCisvKiBSb3RhdGUgdmFsdWVzIG9mIHN5bWJvbHMgWTAuLi5ZMyAqLworLm1hY3JvIHJvdGF0ZV9ZcworCV9fWV8gPSBZXzAKKwlZXzAgPSBZXzEKKwlZXzEgPSBZXzIKKwlZXzIgPSBZXzMKKwlZXzMgPSBfX1lfCisuZW5kbQorCisvKiBSb3RhdGVTdGF0ZSAqLworLm1hY3JvIFJvdGF0ZVN0YXRlCisJLyogUm90YXRlIHN5bWJsZXMgYS4uaCByaWdodCAqLworCW9sZF9oID0gIGgKKwlfX1RNUF8gPSBoCisJaCA9ICAgICAgZworCWcgPSAgICAgIGYKKwlmID0gICAgICBlCisJZSA9ICAgICAgZAorCWQgPSAgICAgIGMKKwljID0gICAgICBiCisJYiA9ICAgICAgYQorCWEgPSAgICAgIF9fVE1QXworLmVuZG0KKworLyogJW1hY3JvIE1ZX1ZQQUxJR05SCVlEU1QsIFlTUkMxLCBZU1JDMiwgUlZBTCAqLworLyogWURTVCA9IHtZU1JDMSwgWVNSQzJ9ID4+IFJWQUwqOCAqLworLm1hY3JvIE1ZX1ZQQUxJR05SIFlEU1QsIFlTUkMxLCBZU1JDMiwgUlZBTAorCXZwZXJtMmYxMjggCVxZRFNULCBcWVNSQzEsIFxZU1JDMiwgMHgzCS8qIFlEU1QgPSB7WVMxX0xPLCBZUzJfSEl9ICovCisJdnBhbGlnbnIgCVxZRFNULCBcWURTVCwgXFlTUkMyLCBcUlZBTAkvKiBZRFNUID0ge1lEUzEsIFlTMn0gPj4gUlZBTCo4ICovCisuZW5kbQorCisubWFjcm8gRk9VUl9ST1VORFNfQU5EX1NDSEVECisvKjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgUk5EIE4gKyAwIDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ICovCisKKwkJLyogRXh0cmFjdCB3W3QtN10gKi8KKwkJTVlfVlBBTElHTlIJWVRNUDAsIFlfMywgWV8yLCA4CQkvKiBZVE1QMCA9IFdbLTddICovCisJCS8qIENhbGN1bGF0ZSB3W3QtMTZdICsgd1t0LTddICovCisJCXZwYWRkcQkJWVRNUDAsIFlUTVAwLCBZXzAJCS8qIFlUTVAwID0gV1stN10gKyBXWy0xNl0gKi8KKwkJLyogRXh0cmFjdCB3W3QtMTVdICovCisJCU1ZX1ZQQUxJR05SCVlUTVAxLCBZXzEsIFlfMCwgOAkJLyogWVRNUDEgPSBXWy0xNV0gKi8KKworCQkvKiBDYWxjdWxhdGUgc2lnbWEwICovCisKKwkJLyogQ2FsY3VsYXRlIHdbdC0xNV0gcm9yIDEgKi8KKwkJdnBzcmxxCQlZVE1QMiwgWVRNUDEsIDEKKwkJdnBzbGxxCQlZVE1QMywgWVRNUDEsICg2NC0xKQorCQl2cG9yCQlZVE1QMywgWVRNUDMsIFlUTVAyCQkvKiBZVE1QMyA9IFdbLTE1XSByb3IgMSAqLworCQkvKiBDYWxjdWxhdGUgd1t0LTE1XSBzaHIgNyAqLworCQl2cHNybHEJCVlUTVA0LCBZVE1QMSwgNwkJCS8qIFlUTVA0ID0gV1stMTVdID4+IDcgKi8KKworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCXJvcngJeTAsIGUsIDQxCS8qIHkwID0gZSA+PiA0MQkJCQkJOyBTMUEgKi8KKwlyb3J4CXkxLCBlLCAxOAkvKiB5MSA9IGUgPj4gMTgJCQkJCTsgUzFCICovCisKKwlhZGQJaCwgW3JzcCtmcmFtZV9YRkVSKzAqOF0JCS8qIGggPSBrICsgdyArIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisJb3IJeTMsIGMJCS8qIHkzID0gYXxjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKwltb3YJeTIsIGYJCS8qIHkyID0gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJcm9yeAlUMSwgYSwgMzQJLyogVDEgPSBhID4+IDM0CQkJCQk7IFMwQiAqLworCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KQkJCTsgUzEgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJcm9yeAl5MSwgZSwgMTQJLyogeTEgPSAoZSA+PiAxNCkJCQkJCTsgUzEgKi8KKworCWFuZAl5MiwgZQkJLyogeTIgPSAoZl5nKSZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwl4b3IJeTAsIHkxCQkvKiB5MCA9IChlPj40MSkgXiAoZT4+MTgpIF4gKGU+PjE0KQkJOyBTMSAqLworCXJvcngJeTEsIGEsIDM5CS8qIHkxID0gYSA+PiAzOQkJCQkJOyBTMEEgKi8KKwlhZGQJZCwgaAkJLyogZCA9IGsgKyB3ICsgaCArIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCWFuZAl5MywgYgkJLyogeTMgPSAoYXxjKSZiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkJCQk7IFMwICovCisJcm9yeAlUMSwgYSwgMjgJLyogVDEgPSAoYSA+PiAyOCkJCQkJCTsgUzAgKi8KKworCXhvcgl5MiwgZwkJLyogeTIgPSBDSCA9ICgoZl5nKSZlKV5nICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwl4b3IJeTEsIFQxCQkvKiB5MSA9IChhPj4zOSkgXiAoYT4+MzQpIF4gKGE+PjI4KQkJOyBTMCAqLworCW1vdglUMSwgYQkJLyogVDEgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpCCSAqLworCWFuZAlUMSwgYwkJLyogVDEgPSBhJmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpCCSAqLworCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKwlvcgl5MywgVDEJCS8qIHkzID0gTUFKID0gKGF8YykmYil8KGEmYykgICAgICAgICAgICAgICAgICAgIDsgTUFKCSAqLworCWFkZAloLCB5MQkJLyogaCA9IGsgKyB3ICsgaCArIFMwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCWFkZAlkLCB5MgkJLyogZCA9IGsgKyB3ICsgaCArIGQgKyBTMSArIENIID0gZCArIHQxICAgICAgICAgOyAtLQkgKi8KKworCWFkZAloLCB5MgkJLyogaCA9IGsgKyB3ICsgaCArIFMwICsgUzEgKyBDSCA9IHQxICsgUzAgICAgICAgOyAtLQkgKi8KKwlhZGQJaCwgeTMJCS8qIGggPSB0MSArIFMwICsgTUFKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKK1JvdGF0ZVN0YXRlCisKKy8qOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyBSTkQgTiArIDEgOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgKi8KKworLyo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ICovCisKKwkJLyogQ2FsY3VsYXRlIHdbdC0xNV0gcm9yIDggKi8KKwkJdnBzcmxxCQlZVE1QMiwgWVRNUDEsIDgKKwkJdnBzbGxxCQlZVE1QMSwgWVRNUDEsICg2NC04KQorCQl2cG9yCQlZVE1QMSwgWVRNUDEsIFlUTVAyCQkvKiBZVE1QMSA9IFdbLTE1XSByb3IgOCAqLworCQkvKiBYT1IgdGhlIHRocmVlIGNvbXBvbmVudHMgKi8KKwkJdnB4b3IJCVlUTVAzLCBZVE1QMywgWVRNUDQJCS8qIFlUTVAzID0gV1stMTVdIHJvciAxIF4gV1stMTVdID4+IDcgKi8KKwkJdnB4b3IJCVlUTVAxLCBZVE1QMywgWVRNUDEJCS8qIFlUTVAxID0gczAgKi8KKworCisJCS8qIEFkZCB0aHJlZSBjb21wb25lbnRzLCB3W3QtMTZdLCB3W3QtN10gYW5kIHNpZ21hMCAqLworCQl2cGFkZHEJCVlUTVAwLCBZVE1QMCwgWVRNUDEJCS8qIFlUTVAwID0gV1stMTZdICsgV1stN10gKyBzMCAqLworCQkvKiBNb3ZlIHRvIGFwcHJvcHJpYXRlIGxhbmVzIGZvciBjYWxjdWxhdGluZyB3WzE2XSBhbmQgd1sxN10gKi8KKwkJdnBlcm0yZjEyOAlZXzAsIFlUTVAwLCBZVE1QMCwgMHgwCQkvKiBZXzAgPSBXWy0xNl0gKyBXWy03XSArIHMwIHtCQUJBfSAqLworCQkvKiBNb3ZlIHRvIGFwcHJvcHJpYXRlIGxhbmVzIGZvciBjYWxjdWxhdGluZyB3WzE4XSBhbmQgd1sxOV0gKi8KKwkJdnBhbmQJCVlUTVAwLCBZVE1QMCwgWy5MTUFTS19ZTU1fTE8gQUREX1JJUF0JLyogWVRNUDAgPSBXWy0xNl0gKyBXWy03XSArIHMwIHtEQzAwfSAqLworCisJCS8qIENhbGN1bGF0ZSB3WzE2XSBhbmQgd1sxN10gaW4gYm90aCAxMjggYml0IGxhbmVzICovCisKKwkJLyogQ2FsY3VsYXRlIHNpZ21hMSBmb3Igd1sxNl0gYW5kIHdbMTddIG9uIGJvdGggMTI4IGJpdCBsYW5lcyAqLworCQl2cGVybTJmMTI4CVlUTVAyLCBZXzMsIFlfMywgMHgxMQkJLyogWVRNUDIgPSBXWy0yXSB7QkFCQX0gKi8KKwkJdnBzcmxxCQlZVE1QNCwgWVRNUDIsIDYJCQkvKiBZVE1QNCA9IFdbLTJdID4+IDYge0JBQkF9ICovCisKKworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCXJvcngJeTAsIGUsIDQxCS8qIHkwID0gZSA+PiA0MQkJCQkJOyBTMUEgKi8KKwlyb3J4CXkxLCBlLCAxOAkvKiB5MSA9IGUgPj4gMTgJCQkJCTsgUzFCICovCisJYWRkCWgsIFtyc3ArZnJhbWVfWEZFUisxKjhdCQkvKiBoID0gayArIHcgKyBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCW9yCXkzLCBjCQkvKiB5MyA9IGF8YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisKKworCW1vdgl5MiwgZgkJLyogeTIgPSBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlyb3J4CVQxLCBhLCAzNAkvKiBUMSA9IGEgPj4gMzQJCQkJCTsgUzBCICovCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KQkJCTsgUzEgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisKKworCXJvcngJeTEsIGUsIDE0CS8qIHkxID0gKGUgPj4gMTQpCQkJCQk7IFMxICovCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KSBeIChlPj4xNCkJCTsgUzEgKi8KKwlyb3J4CXkxLCBhLCAzOQkvKiB5MSA9IGEgPj4gMzkJCQkJCTsgUzBBICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCWFkZAlkLCBoCQkvKiBkID0gayArIHcgKyBoICsgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJYW5kCXkzLCBiCQkvKiB5MyA9IChhfGMpJmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisJeG9yCXkxLCBUMQkJLyogeTEgPSAoYT4+MzkpIF4gKGE+PjM0KQkJCTsgUzAgKi8KKworCXJvcngJVDEsIGEsIDI4CS8qIFQxID0gKGEgPj4gMjgpCQkJCQk7IFMwICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IENIID0gKChmXmcpJmUpXmcgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCisJeG9yCXkxLCBUMQkJLyogeTEgPSAoYT4+MzkpIF4gKGE+PjM0KSBeIChhPj4yOCkJCTsgUzAgKi8KKwltb3YJVDEsIGEJCS8qIFQxID0gYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQgkgKi8KKwlhbmQJVDEsIGMJCS8qIFQxID0gYSZjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQgkgKi8KKwlhZGQJeTIsIHkwCQkvKiB5MiA9IFMxICsgQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJb3IJeTMsIFQxCQkvKiB5MyA9IE1BSiA9IChhfGMpJmIpfChhJmMpICAgICAgICAgICAgICAgICAgICA7IE1BSgkgKi8KKwlhZGQJaCwgeTEJCS8qIGggPSBrICsgdyArIGggKyBTMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKwlhZGQJZCwgeTIJCS8qIGQgPSBrICsgdyArIGggKyBkICsgUzEgKyBDSCA9IGQgKyB0MSAgICAgICAgIDsgLS0JICovCisJYWRkCWgsIHkyCQkvKiBoID0gayArIHcgKyBoICsgUzAgKyBTMSArIENIID0gdDEgKyBTMCAgICAgICA7IC0tCSAqLworCWFkZAloLCB5MwkJLyogaCA9IHQxICsgUzAgKyBNQUogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworUm90YXRlU3RhdGUKKworCisKKworLyo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IFJORCBOICsgMiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyAqLworCisvKjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgKi8KKworCisJCXZwc3JscQkJWVRNUDMsIFlUTVAyLCAxOQkJLyogWVRNUDMgPSBXWy0yXSA+PiAxOSB7QkFCQX0gKi8KKwkJdnBzbGxxCQlZVE1QMSwgWVRNUDIsICg2NC0xOSkJCS8qIFlUTVAxID0gV1stMl0gPDwgMTkge0JBQkF9ICovCisJCXZwb3IJCVlUTVAzLCBZVE1QMywgWVRNUDEJCS8qIFlUTVAzID0gV1stMl0gcm9yIDE5IHtCQUJBfSAqLworCQl2cHhvcgkJWVRNUDQsIFlUTVA0LCBZVE1QMwkJLyogWVRNUDQgPSBXWy0yXSByb3IgMTkgXiBXWy0yXSA+PiA2IHtCQUJBfSAqLworCQl2cHNybHEJCVlUTVAzLCBZVE1QMiwgNjEJCS8qIFlUTVAzID0gV1stMl0gPj4gNjEge0JBQkF9ICovCisJCXZwc2xscQkJWVRNUDEsIFlUTVAyLCAoNjQtNjEpCQkvKiBZVE1QMSA9IFdbLTJdIDw8IDYxIHtCQUJBfSAqLworCQl2cG9yCQlZVE1QMywgWVRNUDMsIFlUTVAxCQkvKiBZVE1QMyA9IFdbLTJdIHJvciA2MSB7QkFCQX0gKi8KKwkJdnB4b3IJCVlUTVA0LCBZVE1QNCwgWVRNUDMJCS8qIFlUTVA0ID0gczEgPSAoV1stMl0gcm9yIDE5KSBeIChXWy0yXSByb3IgNjEpIF4gKFdbLTJdID4+IDYpIHtCQUJBfSAqLworCisJCS8qIEFkZCBzaWdtYTEgdG8gdGhlIG90aGVyIGNvbXB1bmVudHMgdG8gZ2V0IHdbMTZdIGFuZCB3WzE3XSAqLworCQl2cGFkZHEJCVlfMCwgWV8wLCBZVE1QNAkJCS8qIFlfMCA9IHtXWzFdLCBXWzBdLCBXWzFdLCBXWzBdfSAqLworCisJCS8qIENhbGN1bGF0ZSBzaWdtYTEgZm9yIHdbMThdIGFuZCB3WzE5XSBmb3IgdXBwZXIgMTI4IGJpdCBsYW5lICovCisJCXZwc3JscQkJWVRNUDQsIFlfMCwgNgkJCS8qIFlUTVA0ID0gV1stMl0gPj4gNiB7REMtLX0gKi8KKworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCXJvcngJeTAsIGUsIDQxCS8qIHkwID0gZSA+PiA0MQkJCQkJOyBTMUEgKi8KKwlhZGQJaCwgW3JzcCtmcmFtZV9YRkVSKzIqOF0JCS8qIGggPSBrICsgdyArIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKwlyb3J4CXkxLCBlLCAxOAkvKiB5MSA9IGUgPj4gMTgJCQkJCTsgUzFCICovCisJb3IJeTMsIGMJCS8qIHkzID0gYXxjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKwltb3YJeTIsIGYJCS8qIHkyID0gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IGZeZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCisJcm9yeAlUMSwgYSwgMzQJLyogVDEgPSBhID4+IDM0CQkJCQk7IFMwQiAqLworCXhvcgl5MCwgeTEJCS8qIHkwID0gKGU+PjQxKSBeIChlPj4xOCkJCQk7IFMxICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCisJcm9yeAl5MSwgZSwgMTQJLyogeTEgPSAoZSA+PiAxNCkJCQkJCTsgUzEgKi8KKwlhZGQJZCwgaAkJLyogZCA9IGsgKyB3ICsgaCArIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKwlhbmQJeTMsIGIJCS8qIHkzID0gKGF8YykmYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKworCXhvcgl5MCwgeTEJCS8qIHkwID0gKGU+PjQxKSBeIChlPj4xOCkgXiAoZT4+MTQpCQk7IFMxICovCisJcm9yeAl5MSwgYSwgMzkJLyogeTEgPSBhID4+IDM5CQkJCQk7IFMwQSAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBDSCA9ICgoZl5nKSZlKV5nICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkJCQk7IFMwICovCisJcm9yeAlUMSwgYSwgMjgJLyogVDEgPSAoYSA+PiAyOCkJCQkJCTsgUzAgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkgXiAoYT4+MjgpCQk7IFMwICovCisJbW92CVQxLCBhCQkvKiBUMSA9IGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYW5kCVQxLCBjCQkvKiBUMSA9IGEmYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCW9yCXkzLCBUMQkJLyogeTMgPSBNQUogPSAoYXxjKSZiKXwoYSZjKSAgICAgICAgICAgICAgICAgICAgOyBNQUoJICovCisJYWRkCWgsIHkxCQkvKiBoID0gayArIHcgKyBoICsgUzAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCWFkZAlkLCB5MgkJLyogZCA9IGsgKyB3ICsgaCArIGQgKyBTMSArIENIID0gZCArIHQxICAgICAgICAgOyAtLQkgKi8KKwlhZGQJaCwgeTIJCS8qIGggPSBrICsgdyArIGggKyBTMCArIFMxICsgQ0ggPSB0MSArIFMwICAgICAgIDsgLS0JICovCisKKwlhZGQJaCwgeTMJCS8qIGggPSB0MSArIFMwICsgTUFKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKK1JvdGF0ZVN0YXRlCisKKy8qOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyBSTkQgTiArIDMgOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgKi8KKworLyo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ICovCisKKwkJdnBzcmxxCQlZVE1QMywgWV8wLCAxOQkJCS8qIFlUTVAzID0gV1stMl0gPj4gMTkge0RDLS19ICovCisJCXZwc2xscQkJWVRNUDEsIFlfMCwgKDY0LTE5KQkJLyogWVRNUDEgPSBXWy0yXSA8PCAxOSB7REMtLX0gKi8KKwkJdnBvcgkJWVRNUDMsIFlUTVAzLCBZVE1QMQkJLyogWVRNUDMgPSBXWy0yXSByb3IgMTkge0RDLS19ICovCisJCXZweG9yCQlZVE1QNCwgWVRNUDQsIFlUTVAzCQkvKiBZVE1QNCA9IFdbLTJdIHJvciAxOSBeIFdbLTJdID4+IDYge0RDLS19ICovCisJCXZwc3JscQkJWVRNUDMsIFlfMCwgNjEJCQkvKiBZVE1QMyA9IFdbLTJdID4+IDYxIHtEQy0tfSAqLworCQl2cHNsbHEJCVlUTVAxLCBZXzAsICg2NC02MSkJCS8qIFlUTVAxID0gV1stMl0gPDwgNjEge0RDLS19ICovCisJCXZwb3IJCVlUTVAzLCBZVE1QMywgWVRNUDEJCS8qIFlUTVAzID0gV1stMl0gcm9yIDYxIHtEQy0tfSAqLworCQl2cHhvcgkJWVRNUDQsIFlUTVA0LCBZVE1QMwkJLyogWVRNUDQgPSBzMSA9IChXWy0yXSByb3IgMTkpIF4gKFdbLTJdIHJvciA2MSkgXiAoV1stMl0gPj4gNikge0RDLS19ICovCisKKwkJLyogQWRkIHRoZSBzaWdtYTAgKyB3W3QtN10gKyB3W3QtMTZdIGZvciB3WzE4XSBhbmQgd1sxOV0gdG8gbmV3bHkgY2FsY3VsYXRlZCBzaWdtYTEgdG8gZ2V0IHdbMThdIGFuZCB3WzE5XSAqLworCQl2cGFkZHEJCVlUTVAyLCBZVE1QMCwgWVRNUDQJCS8qIFlUTVAyID0ge1dbM10sIFdbMl0sIC0tLCAtLX0gKi8KKworCQkvKiBGb3JtIHdbMTksIHdbMThdLCB3MTddLCB3WzE2XSAqLworCQl2cGJsZW5kZAkJWV8wLCBZXzAsIFlUTVAyLCAweEYwCQkvKiBZXzAgPSB7V1szXSwgV1syXSwgV1sxXSwgV1swXX0gKi8KKy8qCQl2cGVybTJmMTI4CQlZXzAsIFlfMCwgWVRNUDIsIDB4MzAgKi8KKworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCXJvcngJeTAsIGUsIDQxCS8qIHkwID0gZSA+PiA0MQkJCQkJOyBTMUEgKi8KKwlyb3J4CXkxLCBlLCAxOAkvKiB5MSA9IGUgPj4gMTgJCQkJCTsgUzFCICovCisJYWRkCWgsIFtyc3ArZnJhbWVfWEZFUiszKjhdCQkvKiBoID0gayArIHcgKyBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCW9yCXkzLCBjCQkvKiB5MyA9IGF8YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisKKworCW1vdgl5MiwgZgkJLyogeTIgPSBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlyb3J4CVQxLCBhLCAzNAkvKiBUMSA9IGEgPj4gMzQJCQkJCTsgUzBCICovCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KQkJCTsgUzEgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisKKworCXJvcngJeTEsIGUsIDE0CS8qIHkxID0gKGUgPj4gMTQpCQkJCQk7IFMxICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCWFkZAlkLCBoCQkvKiBkID0gayArIHcgKyBoICsgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCWFuZAl5MywgYgkJLyogeTMgPSAoYXxjKSZiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KSBeIChlPj4xNCkJCTsgUzEgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisKKwlyb3J4CXkxLCBhLCAzOQkvKiB5MSA9IGEgPj4gMzkJCQkJCTsgUzBBICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkJCQk7IFMwICovCisJYWRkCWQsIHkyCQkvKiBkID0gayArIHcgKyBoICsgZCArIFMxICsgQ0ggPSBkICsgdDEgICAgICAgICA7IC0tCSAqLworCisJcm9yeAlUMSwgYSwgMjgJLyogVDEgPSAoYSA+PiAyOCkJCQkJCTsgUzAgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkgXiAoYT4+MjgpCQk7IFMwICovCisJbW92CVQxLCBhCQkvKiBUMSA9IGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYW5kCVQxLCBjCQkvKiBUMSA9IGEmYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJb3IJeTMsIFQxCQkvKiB5MyA9IE1BSiA9IChhfGMpJmIpfChhJmMpICAgICAgICAgICAgICAgICAgICA7IE1BSgkgKi8KKworCWFkZAloLCB5MQkJLyogaCA9IGsgKyB3ICsgaCArIFMwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKwlhZGQJaCwgeTIJCS8qIGggPSBrICsgdyArIGggKyBTMCArIFMxICsgQ0ggPSB0MSArIFMwICAgICAgIDsgLS0JICovCisJYWRkCWgsIHkzCQkvKiBoID0gdDEgKyBTMCArIE1BSiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCitSb3RhdGVTdGF0ZQorCityb3RhdGVfWXMKKy5lbmRtCisKKy5tYWNybyBET180Uk9VTkRTCisKKy8qOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyBSTkQgTiArIDAgOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgKi8KKworCW1vdgl5MiwgZgkJLyogeTIgPSBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlyb3J4CXkwLCBlLCA0MQkvKiB5MCA9IGUgPj4gNDEJCQkJCTsgUzFBICovCisJcm9yeAl5MSwgZSwgMTgJLyogeTEgPSBlID4+IDE4CQkJCQk7IFMxQiAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBmXmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKworCXhvcgl5MCwgeTEJCS8qIHkwID0gKGU+PjQxKSBeIChlPj4xOCkJCQk7IFMxICovCisJcm9yeAl5MSwgZSwgMTQJLyogeTEgPSAoZSA+PiAxNCkJCQkJCTsgUzEgKi8KKwlhbmQJeTIsIGUJCS8qIHkyID0gKGZeZykmZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisKKwl4b3IJeTAsIHkxCQkvKiB5MCA9IChlPj40MSkgXiAoZT4+MTgpIF4gKGU+PjE0KQkJOyBTMSAqLworCXJvcngJVDEsIGEsIDM0CS8qIFQxID0gYSA+PiAzNAkJCQkJOyBTMEIgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJcm9yeAl5MSwgYSwgMzkJLyogeTEgPSBhID4+IDM5CQkJCQk7IFMwQSAqLworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCisJeG9yCXkxLCBUMQkJLyogeTEgPSAoYT4+MzkpIF4gKGE+PjM0KQkJCTsgUzAgKi8KKwlyb3J4CVQxLCBhLCAyOAkvKiBUMSA9IChhID4+IDI4KQkJCQkJOyBTMCAqLworCWFkZAloLCBbcnNwICsgZnJhbWVfWEZFUiArIDgqMF0JCS8qIGggPSBrICsgdyArIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisJb3IJeTMsIGMJCS8qIHkzID0gYXxjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkgXiAoYT4+MjgpCQk7IFMwICovCisJbW92CVQxLCBhCQkvKiBUMSA9IGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYW5kCXkzLCBiCQkvKiB5MyA9IChhfGMpJmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisJYW5kCVQxLCBjCQkvKiBUMSA9IGEmYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCisJYWRkCWQsIGgJCS8qIGQgPSBrICsgdyArIGggKyBkICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisJb3IJeTMsIFQxCQkvKiB5MyA9IE1BSiA9IChhfGMpJmIpfChhJmMpICAgICAgICAgICAgICAgICAgICA7IE1BSgkgKi8KKwlhZGQJaCwgeTEJCS8qIGggPSBrICsgdyArIGggKyBTMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKwlhZGQJZCwgeTIJCS8qIGQgPSBrICsgdyArIGggKyBkICsgUzEgKyBDSCA9IGQgKyB0MSAgICAgICAgIDsgLS0JICovCisKKworCS8qYWRkCWgsIHkyCQk7IGggPSBrICsgdyArIGggKyBTMCArIFMxICsgQ0ggPSB0MSArIFMwICAgICAgIDsgLS0JICovCisKKwkvKmFkZAloLCB5MwkJOyBoID0gdDEgKyBTMCArIE1BSiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJUm90YXRlU3RhdGUKKworLyo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IFJORCBOICsgMSA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyAqLworCisJYWRkCW9sZF9oLCB5MgkvKiBoID0gayArIHcgKyBoICsgUzAgKyBTMSArIENIID0gdDEgKyBTMCAgICAgICA7IC0tCSAqLworCW1vdgl5MiwgZgkJLyogeTIgPSBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlyb3J4CXkwLCBlLCA0MQkvKiB5MCA9IGUgPj4gNDEJCQkJCTsgUzFBICovCisJcm9yeAl5MSwgZSwgMTgJLyogeTEgPSBlID4+IDE4CQkJCQk7IFMxQiAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBmXmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKworCXhvcgl5MCwgeTEJCS8qIHkwID0gKGU+PjQxKSBeIChlPj4xOCkJCQk7IFMxICovCisJcm9yeAl5MSwgZSwgMTQJLyogeTEgPSAoZSA+PiAxNCkJCQkJCTsgUzEgKi8KKwlhbmQJeTIsIGUJCS8qIHkyID0gKGZeZykmZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJYWRkCW9sZF9oLCB5MwkvKiBoID0gdDEgKyBTMCArIE1BSiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KSBeIChlPj4xNCkJCTsgUzEgKi8KKwlyb3J4CVQxLCBhLCAzNAkvKiBUMSA9IGEgPj4gMzQJCQkJCTsgUzBCICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IENIID0gKChmXmcpJmUpXmcgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCXJvcngJeTEsIGEsIDM5CS8qIHkxID0gYSA+PiAzOQkJCQkJOyBTMEEgKi8KKwltb3YJeTMsIGEJCS8qIHkzID0gYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkJCQk7IFMwICovCisJcm9yeAlUMSwgYSwgMjgJLyogVDEgPSAoYSA+PiAyOCkJCQkJCTsgUzAgKi8KKwlhZGQJaCwgW3JzcCArIGZyYW1lX1hGRVIgKyA4KjFdCQkvKiBoID0gayArIHcgKyBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCW9yCXkzLCBjCQkvKiB5MyA9IGF8YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisKKwl4b3IJeTEsIFQxCQkvKiB5MSA9IChhPj4zOSkgXiAoYT4+MzQpIF4gKGE+PjI4KQkJOyBTMCAqLworCW1vdglUMSwgYQkJLyogVDEgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpCCSAqLworCWFuZAl5MywgYgkJLyogeTMgPSAoYXxjKSZiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCWFuZAlUMSwgYwkJLyogVDEgPSBhJmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpCCSAqLworCWFkZAl5MiwgeTAJCS8qIHkyID0gUzEgKyBDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKworCWFkZAlkLCBoCQkvKiBkID0gayArIHcgKyBoICsgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCW9yCXkzLCBUMQkJLyogeTMgPSBNQUogPSAoYXxjKSZiKXwoYSZjKSAgICAgICAgICAgICAgICAgICAgOyBNQUoJICovCisJYWRkCWgsIHkxCQkvKiBoID0gayArIHcgKyBoICsgUzAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJYWRkCWQsIHkyCQkvKiBkID0gayArIHcgKyBoICsgZCArIFMxICsgQ0ggPSBkICsgdDEgICAgICAgICA7IC0tCSAqLworCisKKwkvKmFkZAloLCB5MgkJOyBoID0gayArIHcgKyBoICsgUzAgKyBTMSArIENIID0gdDEgKyBTMCAgICAgICA7IC0tCSAqLworCisJLyphZGQJaCwgeTMJCTsgaCA9IHQxICsgUzAgKyBNQUogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCVJvdGF0ZVN0YXRlCisKKy8qOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyBSTkQgTiArIDIgOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsgKi8KKworCWFkZAlvbGRfaCwgeTIJCS8qIGggPSBrICsgdyArIGggKyBTMCArIFMxICsgQ0ggPSB0MSArIFMwICAgICAgIDsgLS0JICovCisJbW92CXkyLCBmCQkvKiB5MiA9IGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCXJvcngJeTAsIGUsIDQxCS8qIHkwID0gZSA+PiA0MQkJCQkJOyBTMUEgKi8KKwlyb3J4CXkxLCBlLCAxOAkvKiB5MSA9IGUgPj4gMTgJCQkJCTsgUzFCICovCisJeG9yCXkyLCBnCQkvKiB5MiA9IGZeZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCisJeG9yCXkwLCB5MQkJLyogeTAgPSAoZT4+NDEpIF4gKGU+PjE4KQkJCTsgUzEgKi8KKwlyb3J4CXkxLCBlLCAxNAkvKiB5MSA9IChlID4+IDE0KQkJCQkJOyBTMSAqLworCWFuZAl5MiwgZQkJLyogeTIgPSAoZl5nKSZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlhZGQJb2xkX2gsIHkzCS8qIGggPSB0MSArIFMwICsgTUFKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKwl4b3IJeTAsIHkxCQkvKiB5MCA9IChlPj40MSkgXiAoZT4+MTgpIF4gKGU+PjE0KQkJOyBTMSAqLworCXJvcngJVDEsIGEsIDM0CS8qIFQxID0gYSA+PiAzNAkJCQkJOyBTMEIgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gQ0ggPSAoKGZeZykmZSleZyAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJcm9yeAl5MSwgYSwgMzkJLyogeTEgPSBhID4+IDM5CQkJCQk7IFMwQSAqLworCW1vdgl5MywgYQkJLyogeTMgPSBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCisJeG9yCXkxLCBUMQkJLyogeTEgPSAoYT4+MzkpIF4gKGE+PjM0KQkJCTsgUzAgKi8KKwlyb3J4CVQxLCBhLCAyOAkvKiBUMSA9IChhID4+IDI4KQkJCQkJOyBTMCAqLworCWFkZAloLCBbcnNwICsgZnJhbWVfWEZFUiArIDgqMl0JCS8qIGggPSBrICsgdyArIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisJb3IJeTMsIGMJCS8qIHkzID0gYXxjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKworCXhvcgl5MSwgVDEJCS8qIHkxID0gKGE+PjM5KSBeIChhPj4zNCkgXiAoYT4+MjgpCQk7IFMwICovCisJbW92CVQxLCBhCQkvKiBUMSA9IGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYW5kCXkzLCBiCQkvKiB5MyA9IChhfGMpJmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisJYW5kCVQxLCBjCQkvKiBUMSA9IGEmYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkIJICovCisJYWRkCXkyLCB5MAkJLyogeTIgPSBTMSArIENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCisJYWRkCWQsIGgJCS8qIGQgPSBrICsgdyArIGggKyBkICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisJb3IJeTMsIFQxCQkvKiB5MyA9IE1BSiA9IChhfGMpJmIpfChhJmMpICAgICAgICAgICAgICAgICAgICA7IE1BSgkgKi8KKwlhZGQJaCwgeTEJCS8qIGggPSBrICsgdyArIGggKyBTMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLS0JICovCisKKwlhZGQJZCwgeTIJCS8qIGQgPSBrICsgdyArIGggKyBkICsgUzEgKyBDSCA9IGQgKyB0MSAgICAgICAgIDsgLS0JICovCisKKworCS8qYWRkCWgsIHkyCQk7IGggPSBrICsgdyArIGggKyBTMCArIFMxICsgQ0ggPSB0MSArIFMwICAgICAgIDsgLS0JICovCisKKwkvKmFkZAloLCB5MwkJOyBoID0gdDEgKyBTMCArIE1BSiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJUm90YXRlU3RhdGUKKworLyo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IFJORCBOICsgMyA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyAqLworCisJYWRkCW9sZF9oLCB5MgkJLyogaCA9IGsgKyB3ICsgaCArIFMwICsgUzEgKyBDSCA9IHQxICsgUzAgICAgICAgOyAtLQkgKi8KKwltb3YJeTIsIGYJCS8qIHkyID0gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisJcm9yeAl5MCwgZSwgNDEJLyogeTAgPSBlID4+IDQxCQkJCQk7IFMxQSAqLworCXJvcngJeTEsIGUsIDE4CS8qIHkxID0gZSA+PiAxOAkJCQkJOyBTMUIgKi8KKwl4b3IJeTIsIGcJCS8qIHkyID0gZl5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0gJICovCisKKwl4b3IJeTAsIHkxCQkvKiB5MCA9IChlPj40MSkgXiAoZT4+MTgpCQkJOyBTMSAqLworCXJvcngJeTEsIGUsIDE0CS8qIHkxID0gKGUgPj4gMTQpCQkJCQk7IFMxICovCisJYW5kCXkyLCBlCQkvKiB5MiA9IChmXmcpJmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENICSAqLworCWFkZAlvbGRfaCwgeTMJLyogaCA9IHQxICsgUzAgKyBNQUogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCXhvcgl5MCwgeTEJCS8qIHkwID0gKGU+PjQxKSBeIChlPj4xOCkgXiAoZT4+MTQpCQk7IFMxICovCisJcm9yeAlUMSwgYSwgMzQJLyogVDEgPSBhID4+IDM0CQkJCQk7IFMwQiAqLworCXhvcgl5MiwgZwkJLyogeTIgPSBDSCA9ICgoZl5nKSZlKV5nICAgICAgICAgICAgICAgICAgICAgICAgOyBDSAkgKi8KKwlyb3J4CXkxLCBhLCAzOQkvKiB5MSA9IGEgPj4gMzkJCQkJCTsgUzBBICovCisJbW92CXkzLCBhCQkvKiB5MyA9IGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1BSkEJICovCisKKwl4b3IJeTEsIFQxCQkvKiB5MSA9IChhPj4zOSkgXiAoYT4+MzQpCQkJOyBTMCAqLworCXJvcngJVDEsIGEsIDI4CS8qIFQxID0gKGEgPj4gMjgpCQkJCQk7IFMwICovCisJYWRkCWgsIFtyc3AgKyBmcmFtZV9YRkVSICsgOCozXQkJLyogaCA9IGsgKyB3ICsgaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKwlvcgl5MywgYwkJLyogeTMgPSBhfGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNQUpBCSAqLworCisJeG9yCXkxLCBUMQkJLyogeTEgPSAoYT4+MzkpIF4gKGE+PjM0KSBeIChhPj4yOCkJCTsgUzAgKi8KKwltb3YJVDEsIGEJCS8qIFQxID0gYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQgkgKi8KKwlhbmQJeTMsIGIJCS8qIHkzID0gKGF8YykmYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQQkgKi8KKwlhbmQJVDEsIGMJCS8qIFQxID0gYSZjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTUFKQgkgKi8KKwlhZGQJeTIsIHkwCQkvKiB5MiA9IFMxICsgQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisKKwlhZGQJZCwgaAkJLyogZCA9IGsgKyB3ICsgaCArIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKwlvcgl5MywgVDEJCS8qIHkzID0gTUFKID0gKGF8YykmYil8KGEmYykgICAgICAgICAgICAgICAgICAgIDsgTUFKCSAqLworCWFkZAloLCB5MQkJLyogaCA9IGsgKyB3ICsgaCArIFMwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAtLQkgKi8KKworCWFkZAlkLCB5MgkJLyogZCA9IGsgKyB3ICsgaCArIGQgKyBTMSArIENIID0gZCArIHQxICAgICAgICAgOyAtLQkgKi8KKworCisJYWRkCWgsIHkyCQkvKiBoID0gayArIHcgKyBoICsgUzAgKyBTMSArIENIID0gdDEgKyBTMCAgICAgICA7IC0tCSAqLworCisJYWRkCWgsIHkzCQkvKiBoID0gdDEgKyBTMCArIE1BSiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC0tCSAqLworCisJUm90YXRlU3RhdGUKKworLmVuZG0KKworLyoKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7IHZvaWQgc2hhNTEyX3JvcngoY29uc3Qgdm9pZCogTSwgdm9pZCogRCwgdWludDY0X3QgTCk7Cis7IFB1cnBvc2U6IFVwZGF0ZXMgdGhlIFNIQTUxMiBkaWdlc3Qgc3RvcmVkIGF0IEQgd2l0aCB0aGUgbWVzc2FnZSBzdG9yZWQgaW4gTS4KKzsgVGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgcG9pbnRlZCB0byBieSBNIG11c3QgYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiBTSEE1MTIKKzsgICBtZXNzYWdlIGJsb2Nrcy4KKzsgTCBpcyB0aGUgbWVzc2FnZSBsZW5ndGggaW4gU0hBNTEyIGJsb2NrcworKi8KKy5nbG9ibCBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eDIKKy50eXBlIF9nY3J5X3NoYTUxMl90cmFuc2Zvcm1fYW1kNjRfYXZ4MixAZnVuY3Rpb247CisuYWxpZ24gMTYKK19nY3J5X3NoYTUxMl90cmFuc2Zvcm1fYW1kNjRfYXZ4MjoKKwl4b3IgZWF4LCBlYXgKKworCWNtcCByZHgsIDAKKwlqZSAuTG5vd29yaworCisJdnplcm91cHBlcgorCisJLyogQWxsb2NhdGUgU3RhY2sgU3BhY2UgKi8KKwltb3YJcmF4LCByc3AKKwlzdWIJcnNwLCBmcmFtZV9zaXplCisJYW5kCXJzcCwgfigweDIwIC0gMSkKKwltb3YJW3JzcCArIGZyYW1lX1JTUFNBVkVdLCByYXgKKworCS8qIFNhdmUgR1BScyAqLworCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAwXSwgcmJwCisJbW92CVtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDFdLCByYngKKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMl0sIHIxMgorCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAzXSwgcjEzCisJbW92CVtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDRdLCByMTQKKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogNV0sIHIxNQorCisJdnBibGVuZGQJeG1tMCwgeG1tMCwgeG1tMSwgMHhmMAorCXZwYmxlbmRkCXltbTAsIHltbTAsIHltbTEsIDB4ZjAKKworCXNobAlOVU1fQkxLUywgNwkvKiBjb252ZXJ0IHRvIGJ5dGVzICovCisJanoJLkxkb25lX2hhc2gKKwlhZGQJTlVNX0JMS1MsIElOUAkvKiBwb2ludGVyIHRvIGVuZCBvZiBkYXRhICovCisJbW92CVtyc3AgKyBmcmFtZV9JTlBFTkRdLCBOVU1fQkxLUworCisJLyo7IGxvYWQgaW5pdGlhbCBkaWdlc3QgKi8KKwltb3YJYSxbOCowICsgQ1RYXQorCW1vdgliLFs4KjEgKyBDVFhdCisJbW92CWMsWzgqMiArIENUWF0KKwltb3YJZCxbOCozICsgQ1RYXQorCW1vdgllLFs4KjQgKyBDVFhdCisJbW92CWYsWzgqNSArIENUWF0KKwltb3YJZyxbOCo2ICsgQ1RYXQorCW1vdgloLFs4KjcgKyBDVFhdCisKKwl2bW92ZHFhCUJZVEVfRkxJUF9NQVNLLCBbLkxQU0hVRkZMRV9CWVRFX0ZMSVBfTUFTSyBBRERfUklQXQorCisuTG9vcDA6CisJbGVhCVRCTCxbLkxLNTEyIEFERF9SSVBdCisKKwkvKjsgYnl0ZSBzd2FwIGZpcnN0IDE2IGR3b3JkcyAqLworCUNPUFlfWU1NX0FORF9CU1dBUAlZXzAsIFtJTlAgKyAwKjMyXSwgQllURV9GTElQX01BU0sKKwlDT1BZX1lNTV9BTkRfQlNXQVAJWV8xLCBbSU5QICsgMSozMl0sIEJZVEVfRkxJUF9NQVNLCisJQ09QWV9ZTU1fQU5EX0JTV0FQCVlfMiwgW0lOUCArIDIqMzJdLCBCWVRFX0ZMSVBfTUFTSworCUNPUFlfWU1NX0FORF9CU1dBUAlZXzMsIFtJTlAgKyAzKjMyXSwgQllURV9GTElQX01BU0sKKworCW1vdglbcnNwICsgZnJhbWVfSU5QXSwgSU5QCisKKwkvKjsgc2NoZWR1bGUgNjQgaW5wdXQgZHdvcmRzLCBieSBkb2luZyAxMiByb3VuZHMgb2YgNCBlYWNoICovCisJbW92cQlbcnNwICsgZnJhbWVfU1JORF0sNAorCisuYWxpZ24gMTYKKy5Mb29wMToKKwl2cGFkZHEJWEZFUiwgWV8wLCBbVEJMICsgMCozMl0KKwl2bW92ZHFhIFtyc3AgKyBmcmFtZV9YRkVSXSwgWEZFUgorCUZPVVJfUk9VTkRTX0FORF9TQ0hFRAorCisJdnBhZGRxCVhGRVIsIFlfMCwgW1RCTCArIDEqMzJdCisJdm1vdmRxYSBbcnNwICsgZnJhbWVfWEZFUl0sIFhGRVIKKwlGT1VSX1JPVU5EU19BTkRfU0NIRUQKKworCXZwYWRkcQlYRkVSLCBZXzAsIFtUQkwgKyAyKjMyXQorCXZtb3ZkcWEgW3JzcCArIGZyYW1lX1hGRVJdLCBYRkVSCisJRk9VUl9ST1VORFNfQU5EX1NDSEVECisKKwl2cGFkZHEJWEZFUiwgWV8wLCBbVEJMICsgMyozMl0KKwl2bW92ZHFhIFtyc3AgKyBmcmFtZV9YRkVSXSwgWEZFUgorCWFkZAlUQkwsIDQqMzIKKwlGT1VSX1JPVU5EU19BTkRfU0NIRUQKKworCXN1YnEJW3JzcCArIGZyYW1lX1NSTkRdLCAxCisJam5lCS5Mb29wMQorCisJbW92cQlbcnNwICsgZnJhbWVfU1JORF0sIDIKKy5Mb29wMjoKKwl2cGFkZHEJWEZFUiwgWV8wLCBbVEJMICsgMCozMl0KKwl2bW92ZHFhIFtyc3AgKyBmcmFtZV9YRkVSXSwgWEZFUgorCURPXzRST1VORFMKKwl2cGFkZHEJWEZFUiwgWV8xLCBbVEJMICsgMSozMl0KKwl2bW92ZHFhIFtyc3AgKyBmcmFtZV9YRkVSXSwgWEZFUgorCWFkZAlUQkwsIDIqMzIKKwlET180Uk9VTkRTCisKKwl2bW92ZHFhCVlfMCwgWV8yCisJdm1vdmRxYQlZXzEsIFlfMworCisJc3VicQlbcnNwICsgZnJhbWVfU1JORF0sIDEKKwlqbmUJLkxvb3AyCisKKwlhZGRtCVs4KjAgKyBDVFhdLGEKKwlhZGRtCVs4KjEgKyBDVFhdLGIKKwlhZGRtCVs4KjIgKyBDVFhdLGMKKwlhZGRtCVs4KjMgKyBDVFhdLGQKKwlhZGRtCVs4KjQgKyBDVFhdLGUKKwlhZGRtCVs4KjUgKyBDVFhdLGYKKwlhZGRtCVs4KjYgKyBDVFhdLGcKKwlhZGRtCVs4KjcgKyBDVFhdLGgKKworCW1vdglJTlAsIFtyc3AgKyBmcmFtZV9JTlBdCisJYWRkCUlOUCwgMTI4CisJY21wCUlOUCwgW3JzcCArIGZyYW1lX0lOUEVORF0KKwlqbmUJLkxvb3AwCisKKy5MZG9uZV9oYXNoOgorCisJLyogUmVzdG9yZSBHUFJzICovCisJbW92CXJicCwgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMF0KKwltb3YJcmJ4LCBbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAxXQorCW1vdglyMTIsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDJdCisJbW92CXIxMywgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogM10KKwltb3YJcjE0LCBbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiA0XQorCW1vdglyMTUsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDVdCisKKwkvKiBSZXN0b3JlIFN0YWNrIFBvaW50ZXIgKi8KKwltb3YJcnNwLCBbcnNwICsgZnJhbWVfUlNQU0FWRV0KKworCXZ6ZXJvYWxsCisKKwltb3YJZWF4LCBmcmFtZV9zaXplICsgMzEKKy5Mbm93b3JrOgorCXJldAorCisvKjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ICovCisvKjs7IEJpbmFyeSBEYXRhICovCisKKy5kYXRhCisKKy5hbGlnbiA2NAorLyogS1t0XSB1c2VkIGluIFNIQTUxMiBoYXNoaW5nICovCisuTEs1MTI6CisJLnF1YWQJMHg0MjhhMmY5OGQ3MjhhZTIyLDB4NzEzNzQ0OTEyM2VmNjVjZAorCS5xdWFkCTB4YjVjMGZiY2ZlYzRkM2IyZiwweGU5YjVkYmE1ODE4OWRiYmMKKwkucXVhZAkweDM5NTZjMjViZjM0OGI1MzgsMHg1OWYxMTFmMWI2MDVkMDE5CisJLnF1YWQJMHg5MjNmODJhNGFmMTk0ZjliLDB4YWIxYzVlZDVkYTZkODExOAorCS5xdWFkCTB4ZDgwN2FhOThhMzAzMDI0MiwweDEyODM1YjAxNDU3MDZmYmUKKwkucXVhZAkweDI0MzE4NWJlNGVlNGIyOGMsMHg1NTBjN2RjM2Q1ZmZiNGUyCisJLnF1YWQJMHg3MmJlNWQ3NGYyN2I4OTZmLDB4ODBkZWIxZmUzYjE2OTZiMQorCS5xdWFkCTB4OWJkYzA2YTcyNWM3MTIzNSwweGMxOWJmMTc0Y2Y2OTI2OTQKKwkucXVhZAkweGU0OWI2OWMxOWVmMTRhZDIsMHhlZmJlNDc4NjM4NGYyNWUzCisJLnF1YWQJMHgwZmMxOWRjNjhiOGNkNWI1LDB4MjQwY2ExY2M3N2FjOWM2NQorCS5xdWFkCTB4MmRlOTJjNmY1OTJiMDI3NSwweDRhNzQ4NGFhNmVhNmU0ODMKKwkucXVhZAkweDVjYjBhOWRjYmQ0MWZiZDQsMHg3NmY5ODhkYTgzMTE1M2I1CisJLnF1YWQJMHg5ODNlNTE1MmVlNjZkZmFiLDB4YTgzMWM2NmQyZGI0MzIxMAorCS5xdWFkCTB4YjAwMzI3Yzg5OGZiMjEzZiwweGJmNTk3ZmM3YmVlZjBlZTQKKwkucXVhZAkweGM2ZTAwYmYzM2RhODhmYzIsMHhkNWE3OTE0NzkzMGFhNzI1CisJLnF1YWQJMHgwNmNhNjM1MWUwMDM4MjZmLDB4MTQyOTI5NjcwYTBlNmU3MAorCS5xdWFkCTB4MjdiNzBhODU0NmQyMmZmYywweDJlMWIyMTM4NWMyNmM5MjYKKwkucXVhZAkweDRkMmM2ZGZjNWFjNDJhZWQsMHg1MzM4MGQxMzlkOTViM2RmCisJLnF1YWQJMHg2NTBhNzM1NDhiYWY2M2RlLDB4NzY2YTBhYmIzYzc3YjJhOAorCS5xdWFkCTB4ODFjMmM5MmU0N2VkYWVlNiwweDkyNzIyYzg1MTQ4MjM1M2IKKwkucXVhZAkweGEyYmZlOGExNGNmMTAzNjQsMHhhODFhNjY0YmJjNDIzMDAxCisJLnF1YWQJMHhjMjRiOGI3MGQwZjg5NzkxLDB4Yzc2YzUxYTMwNjU0YmUzMAorCS5xdWFkCTB4ZDE5MmU4MTlkNmVmNTIxOCwweGQ2OTkwNjI0NTU2NWE5MTAKKwkucXVhZAkweGY0MGUzNTg1NTc3MTIwMmEsMHgxMDZhYTA3MDMyYmJkMWI4CisJLnF1YWQJMHgxOWE0YzExNmI4ZDJkMGM4LDB4MWUzNzZjMDg1MTQxYWI1MworCS5xdWFkCTB4Mjc0ODc3NGNkZjhlZWI5OSwweDM0YjBiY2I1ZTE5YjQ4YTgKKwkucXVhZAkweDM5MWMwY2IzYzVjOTVhNjMsMHg0ZWQ4YWE0YWUzNDE4YWNiCisJLnF1YWQJMHg1YjljY2E0Zjc3NjNlMzczLDB4NjgyZTZmZjNkNmIyYjhhMworCS5xdWFkCTB4NzQ4ZjgyZWU1ZGVmYjJmYywweDc4YTU2MzZmNDMxNzJmNjAKKwkucXVhZAkweDg0Yzg3ODE0YTFmMGFiNzIsMHg4Y2M3MDIwODFhNjQzOWVjCisJLnF1YWQJMHg5MGJlZmZmYTIzNjMxZTI4LDB4YTQ1MDZjZWJkZTgyYmRlOQorCS5xdWFkCTB4YmVmOWEzZjdiMmM2NzkxNSwweGM2NzE3OGYyZTM3MjUzMmIKKwkucXVhZAkweGNhMjczZWNlZWEyNjYxOWMsMHhkMTg2YjhjNzIxYzBjMjA3CisJLnF1YWQJMHhlYWRhN2RkNmNkZTBlYjFlLDB4ZjU3ZDRmN2ZlZTZlZDE3OAorCS5xdWFkCTB4MDZmMDY3YWE3MjE3NmZiYSwweDBhNjM3ZGM1YTJjODk4YTYKKwkucXVhZAkweDExM2Y5ODA0YmVmOTBkYWUsMHgxYjcxMGIzNTEzMWM0NzFiCisJLnF1YWQJMHgyOGRiNzdmNTIzMDQ3ZDg0LDB4MzJjYWFiN2I0MGM3MjQ5MworCS5xdWFkCTB4M2M5ZWJlMGExNWM5YmViYywweDQzMWQ2N2M0OWMxMDBkNGMKKwkucXVhZAkweDRjYzVkNGJlY2IzZTQyYjYsMHg1OTdmMjk5Y2ZjNjU3ZTJhCisJLnF1YWQJMHg1ZmNiNmZhYjNhZDZmYWVjLDB4NmM0NDE5OGM0YTQ3NTgxNworCisuYWxpZ24gMzIKKworLyogTWFzayBmb3IgYnl0ZS1zd2FwcGluZyBhIGNvdXBsZSBvZiBxd29yZHMgaW4gYW4gWE1NIHJlZ2lzdGVyIHVzaW5nICh2KXBzaHVmYi4gKi8KKy5MUFNIVUZGTEVfQllURV9GTElQX01BU0s6IC5vY3RhIDB4MDgwOTBhMGIwYzBkMGUwZjAwMDEwMjAzMDQwNTA2MDcKKwkJCSAgIC5vY3RhIDB4MTgxOTFhMWIxYzFkMWUxZjEwMTExMjEzMTQxNTE2MTcKKworLkxNQVNLX1lNTV9MTzoJCSAgIC5vY3RhIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkJCSAgIC5vY3RhIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NpcGhlci9zaGE1MTItc3NzZTMtYW1kNjQuUyBiL2NpcGhlci9zaGE1MTItc3NzZTMtYW1kNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgwYmFhCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3NoYTUxMi1zc3NlMy1hbWQ2NC5TCkBAIC0wLDAgKzEsNDIxIEBACisvKgorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7IENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KKzsKKzsgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzsKKzsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKzsgbWV0OgorOworOyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorOworOyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorOyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorOyAgIGRpc3RyaWJ1dGlvbi4KKzsKKzsgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworOyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCis7ICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzsKKzsKKzsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiAiQVMgSVMiIEFORCBBTlkKKzsgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKzsgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIENPUlBPUkFUSU9OIE9SCis7IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorOyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCis7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorOyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCis7IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCis7IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworOyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworKi8KKy8qCisgKiBDb252ZXJzaW9uIHRvIEdBUyBhc3NlbWJseSBhbmQgaW50ZWdyYXRpb24gdG8gbGliZ2NyeXB0CisgKiAgYnkgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIE5vdGU6IG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdhcyBuYW1lZCBhcyBTSEE1MTItU1NFNC4gSG93ZXZlciwgb25seSBTU1NFMworICogICAgICAgaXMgcmVxdWlyZWQuCisgKi8KKworI2lmZGVmIF9feDg2XzY0CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWYgZGVmaW5lZChIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0lOVEVMX1NZTlRBWF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9TU1NFMykgJiYgZGVmaW5lZChVU0VfU0hBNTEyKQorCisjaWZkZWYgX19QSUNfXworIyAgZGVmaW5lIEFERF9SSVAgK3JpcAorI2Vsc2UKKyMgIGRlZmluZSBBRERfUklQCisjZW5kaWYKKworLmludGVsX3N5bnRheCBub3ByZWZpeAorCisudGV4dAorCisvKiBWaXJ0dWFsIFJlZ2lzdGVycyAqLworbXNnID0gcmRpIC8qIEFSRzEgKi8KK2RpZ2VzdCA9IHJzaSAvKiBBUkcyICovCittc2dsZW4gPSByZHggLyogQVJHMyAqLworVDEgPSByY3gKK1QyID0gcjgKK2FfNjQgPSByOQorYl82NCA9IHIxMAorY182NCA9IHIxMQorZF82NCA9IHIxMgorZV82NCA9IHIxMworZl82NCA9IHIxNAorZ182NCA9IHIxNQoraF82NCA9IHJieAordG1wMCA9IHJheAorCisvKgorOyBMb2NhbCB2YXJpYWJsZXMgKHN0YWNrIGZyYW1lKQorOyBOb3RlOiBmcmFtZV9zaXplIG11c3QgYmUgYW4gb2RkIG11bHRpcGxlIG9mIDggYnl0ZXMgdG8gWE1NIGFsaWduIFJTUAorKi8KK2ZyYW1lX1cgICAgICA9IDAgLyogTWVzc2FnZSBTY2hlZHVsZSAqLworZnJhbWVfV19zaXplID0gKDgwICogOCkKK2ZyYW1lX1dLICAgICAgPSAoKGZyYW1lX1cpICsgKGZyYW1lX1dfc2l6ZSkpIC8qIFdbdF0gKyBLW3RdIHwgV1t0KzFdICsgS1t0KzFdICovCitmcmFtZV9XS19zaXplID0gKDIgKiA4KQorZnJhbWVfR1BSU0FWRSAgICAgID0gKChmcmFtZV9XSykgKyAoZnJhbWVfV0tfc2l6ZSkpCitmcmFtZV9HUFJTQVZFX3NpemUgPSAoNSAqIDgpCitmcmFtZV9zaXplID0gKChmcmFtZV9HUFJTQVZFKSArIChmcmFtZV9HUFJTQVZFX3NpemUpKQorCisKKy8qIFVzZWZ1bCBRV09SRCAiYXJyYXlzIiBmb3Igc2ltcGxlciBtZW1vcnkgcmVmZXJlbmNlcyAqLworI2RlZmluZSBNU0coaSkgICAgbXNnICAgICsgOCooaSkgICAgICAgICAgICAgICAvKiBJbnB1dCBtZXNzYWdlIChhcmcxKSAqLworI2RlZmluZSBESUdFU1QoaSkgZGlnZXN0ICsgOCooaSkgICAgICAgICAgICAgICAvKiBPdXRwdXQgRGlnZXN0IChhcmcyKSAqLworI2RlZmluZSBLX3QoaSkgICAgLkxLNTEyICAgKyA4KihpKSBBRERfUklQICAgICAvKiBTSEEgQ29uc3RhbnRzIChzdGF0aWMgbWVtKSAqLworI2RlZmluZSBXX3QoaSkgICAgcnNwICsgZnJhbWVfVyAgKyA4KihpKSAgICAgICAvKiBNZXNzYWdlIFNjaGVkdWxlIChzdGFjayBmcmFtZSkgKi8KKyNkZWZpbmUgV0tfMihpKSAgIHJzcCArIGZyYW1lX1dLICsgOCooKGkpICUgMikgLyogV1t0XStLW3RdIChzdGFjayBmcmFtZSkgKi8KKy8qIE1TRywgRElHRVNULCBLX3QsIFdfdCBhcmUgYXJyYXlzICovCisvKiBXS18yKHQpIHBvaW50cyB0byAxIG9mIDIgcXdvcmRzIGF0IGZyYW1lLldLIGRlcGRlbmRpbmcgb24gdCBiZWluZyBvZGQvZXZlbiAqLworCisubWFjcm8gUm90YXRlU3RhdGUKKwkvKiBSb3RhdGUgc3ltYmxlcyBhLi5oIHJpZ2h0ICovCisJX19UTVAgPSBoXzY0CisJaF82NCA9ICBnXzY0CisJZ182NCA9ICBmXzY0CisJZl82NCA9ICBlXzY0CisJZV82NCA9ICBkXzY0CisJZF82NCA9ICBjXzY0CisJY182NCA9ICBiXzY0CisJYl82NCA9ICBhXzY0CisJYV82NCA9ICBfX1RNUAorLmVuZG0KKworLm1hY3JvIFNIQTUxMl9Sb3VuZCB0CisJLyogQ29tcHV0ZSBSb3VuZCAlJXQgKi8KKwltb3YJVDEsICAgZl82NCAgICAgICAgLyogVDEgPSBmICovCisJbW92CXRtcDAsIGVfNjQgICAgICAgIC8qIHRtcCA9IGUgKi8KKwl4b3IJVDEsICAgZ182NCAgICAgICAgLyogVDEgPSBmIF4gZyAqLworCXJvcgl0bXAwLCAyMyAvKiA0MSAgICAgOyB0bXAgPSBlIHJvciAyMyAqLworCWFuZAlUMSwgICBlXzY0ICAgICAgICAvKiBUMSA9IChmIF4gZykgJiBlICovCisJeG9yCXRtcDAsIGVfNjQgICAgICAgIC8qIHRtcCA9IChlIHJvciAyMykgXiBlICovCisJeG9yCVQxLCAgIGdfNjQgICAgICAgIC8qIFQxID0gKChmIF4gZykgJiBlKSBeIGcgPSBDSChlLGYsZykgKi8KKwlhZGQJVDEsICAgW1dLXzIoXHQpXSAvKiBXW3RdICsgS1t0XSBmcm9tIG1lc3NhZ2Ugc2NoZWR1bGVyICovCisJcm9yCXRtcDAsIDQgLyogMTggICAgICA7IHRtcCA9ICgoZSByb3IgMjMpIF4gZSkgcm9yIDQgKi8KKwl4b3IJdG1wMCwgZV82NCAgICAgICAgLyogdG1wID0gKCgoZSByb3IgMjMpIF4gZSkgcm9yIDQpIF4gZSAqLworCW1vdglUMiwgICBhXzY0ICAgICAgICAvKiBUMiA9IGEgKi8KKwlhZGQJVDEsICAgaF82NCAgICAgICAgLyogVDEgPSBDSChlLGYsZykgKyBXW3RdICsgS1t0XSArIGggKi8KKwlyb3IJdG1wMCwgMTQgLyogMTQgICAgIDsgdG1wID0gKCgoKGUgcm9yMjMpXmUpcm9yNCleZSlyb3IxNCA9IFMxKGUpICovCisJYWRkCVQxLCAgIHRtcDAgICAgICAgIC8qIFQxID0gQ0goZSxmLGcpICsgV1t0XSArIEtbdF0gKyBTMShlKSAqLworCW1vdgl0bXAwLCBhXzY0ICAgICAgICAvKiB0bXAgPSBhICovCisJeG9yCVQyLCAgIGNfNjQgICAgICAgIC8qIFQyID0gYSBeIGMgKi8KKwlhbmQJdG1wMCwgY182NCAgICAgICAgLyogdG1wID0gYSAmIGMgKi8KKwlhbmQJVDIsICAgYl82NCAgICAgICAgLyogVDIgPSAoYSBeIGMpICYgYiAqLworCXhvcglUMiwgICB0bXAwICAgICAgICAvKiBUMiA9ICgoYSBeIGMpICYgYikgXiAoYSAmIGMpID0gTWFqKGEsYixjKSAqLworCW1vdgl0bXAwLCBhXzY0ICAgICAgICAvKiB0bXAgPSBhICovCisJcm9yCXRtcDAsIDUgLyogMzkgICAgICA7IHRtcCA9IGEgcm9yIDUgKi8KKwl4b3IJdG1wMCwgYV82NCAgICAgICAgLyogdG1wID0gKGEgcm9yIDUpIF4gYSAqLworCWFkZAlkXzY0LCBUMSAgICAgICAgICAvKiBlKG5leHRfc3RhdGUpID0gZCArIFQxICAqLworCXJvcgl0bXAwLCA2IC8qIDM0ICAgICAgOyB0bXAgPSAoKGEgcm9yIDUpIF4gYSkgcm9yIDYgKi8KKwl4b3IJdG1wMCwgYV82NCAgICAgICAgLyogdG1wID0gKCgoYSByb3IgNSkgXiBhKSByb3IgNikgXiBhICovCisJbGVhCWhfNjQsIFtUMSArIFQyXSAgIC8qIGEobmV4dF9zdGF0ZSkgPSBUMSArIE1haihhLGIsYykgKi8KKwlyb3IJdG1wMCwgMjggLyogMjggICAgIDsgdG1wID0gKCgoKGEgcm9yNSleYSlyb3I2KV5hKXJvcjI4ID0gUzAoYSkgKi8KKwlhZGQJaF82NCwgdG1wMCAgICAgICAgLyogYShuZXh0X3N0YXRlKSA9IFQxICsgTWFqKGEsYixjKSBTMChhKSAqLworCVJvdGF0ZVN0YXRlCisuZW5kbQorCisubWFjcm8gU0hBNTEyXzJTY2hlZF8yUm91bmRfc3NlIHQKKy8qCTsgQ29tcHV0ZSByb3VuZHMgJSV0LTIgYW5kICUldC0xCisJOyBDb21wdXRlIG1lc3NhZ2Ugc2NoZWR1bGUgUVdPUkRTICUldCBhbmQgJSV0KzEKKworCTsgICBUd28gcm91bmRzIGFyZSBjb21wdXRlZCBiYXNlZCBvbiB0aGUgdmFsdWVzIGZvciBLW3QtMl0rV1t0LTJdIGFuZAorCTsgS1t0LTFdK1dbdC0xXSB3aGljaCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkIGF0IFdLXzIgYnkgdGhlIG1lc3NhZ2UKKwk7IHNjaGVkdWxlci4KKwk7ICAgVGhlIHR3byBuZXcgc2NoZWR1bGUgUVdPUkRTIGFyZSBzdG9yZWQgYXQgW1dfdCglJXQpXSBhbmQgW1dfdCglJXQrMSldLgorCTsgVGhleSBhcmUgdGhlbiBhZGRlZCB0byB0aGVpciByZXNwZWN0aXZlIFNIQTUxMiBjb25zdGFudHMgYXQKKwk7IFtLX3QoJSV0KV0gYW5kIFtLX3QoJSV0KzEpXSBhbmQgc3RvcmVkIGF0IGRxd29yZCBbV0tfMiglJXQpXQorCTsgICBGb3IgYnJpZXZpdHksIHRoZSBjb21tZW50cyBmb2xsb3dpbmcgdmVjdG9yZWQgaW5zdHJ1Y3Rpb25zIG9ubHkgcmVmZXIgdG8KKwk7IHRoZSBmaXJzdCBvZiBhIHBhaXIgb2YgUVdPUkRTLgorCTsgRWcuIFhNTTI9V1t0LTJdIHJlYWxseSBtZWFucyBYTU0yPXtXW3QtMl18V1t0LTFdfQorCTsgICBUaGUgY29tcHV0YXRpb24gb2YgdGhlIG1lc3NhZ2Ugc2NoZWR1bGUgYW5kIHRoZSByb3VuZHMgYXJlIHRpZ2h0bHkKKwk7IHN0aXRjaGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIGluc3RydWN0aW9uLWxldmVsIHBhcmFsbGVsaXNtLgorCTsgRm9yIGNsYXJpdHksIGludGVnZXIgaW5zdHJ1Y3Rpb25zIChmb3IgdGhlIHJvdW5kcyBjYWxjdWxhdGlvbikgYXJlIGluZGVudGVkCisJOyBieSBvbmUgdGFiLiBWZWN0b3JlZCBpbnN0cnVjdGlvbnMgKGZvciB0aGUgbWVzc2FnZSBzY2hlZHVsZXIpIGFyZSBpbmRlbnRlZAorCTsgYnkgdHdvIHRhYnMuICovCisKKwltb3YJVDEsIGZfNjQKKwkJbW92ZHFhCXhtbTIsIFtXX3QoXHQtMildICAvKiBYTU0yID0gV1t0LTJdICovCisJeG9yCVQxLCAgIGdfNjQKKwlhbmQJVDEsICAgZV82NAorCQltb3ZkcWEJeG1tMCwgeG1tMiAgICAgICAgICAvKiBYTU0wID0gV1t0LTJdICovCisJeG9yCVQxLCAgIGdfNjQKKwlhZGQJVDEsICAgW1dLXzIoXHQpXQorCQltb3ZkcXUJeG1tNSwgW1dfdChcdC0xNSldIC8qIFhNTTUgPSBXW3QtMTVdICovCisJbW92CXRtcDAsIGVfNjQKKwlyb3IJdG1wMCwgMjMgLyogNDEgKi8KKwkJbW92ZHFhCXhtbTMsIHhtbTUgICAgICAgICAgLyogWE1NMyA9IFdbdC0xNV0gKi8KKwl4b3IJdG1wMCwgZV82NAorCXJvcgl0bXAwLCA0IC8qIDE4ICovCisJCXBzcmxxCXhtbTAsIDYxIC0gMTkgICAgICAgLyogWE1NMCA9IFdbdC0yXSA+PiA0MiAqLworCXhvcgl0bXAwLCBlXzY0CisJcm9yCXRtcDAsIDE0IC8qIDE0ICovCisJCXBzcmxxCXhtbTMsICg4IC0gNykgICAgICAgLyogWE1NMyA9IFdbdC0xNV0gPj4gMSAqLworCWFkZAlUMSwgICB0bXAwCisJYWRkCVQxLCAgIGhfNjQKKwkJcHhvcgl4bW0wLCB4bW0yICAgICAgICAgIC8qIFhNTTAgPSAoV1t0LTJdID4+IDQyKSBeIFdbdC0yXSAqLworCW1vdglUMiwgICBhXzY0CisJeG9yCVQyLCAgIGNfNjQKKwkJcHhvcgl4bW0zLCB4bW01ICAgICAgICAgIC8qIFhNTTMgPSAoV1t0LTE1XSA+PiAxKSBeIFdbdC0xNV0gKi8KKwlhbmQJVDIsICAgYl82NAorCW1vdgl0bXAwLCBhXzY0CisJCXBzcmxxCXhtbTAsIDE5IC0gNiAgICAgICAgLyogWE1NMCA9ICgoV1t0LTJdPj40MileV1t0LTJdKT4+MTMgKi8KKwlhbmQJdG1wMCwgY182NAorCXhvcglUMiwgICB0bXAwCisJCXBzcmxxCXhtbTMsICg3IC0gMSkgICAgICAgLyogWE1NMyA9ICgoV1t0LTE1XT4+MSleV1t0LTE1XSk+PjYgKi8KKwltb3YJdG1wMCwgYV82NAorCXJvcgl0bXAwLCA1IC8qIDM5ICovCisJCXB4b3IJeG1tMCwgeG1tMiAgICAgICAgICAvKiBYTU0wID0gKCgoV1t0LTJdPj40MileV1t0LTJdKT4+MTMpXldbdC0yXSAqLworCXhvcgl0bXAwLCBhXzY0CisJcm9yCXRtcDAsIDYgLyogMzQgKi8KKwkJcHhvcgl4bW0zLCB4bW01ICAgICAgICAgIC8qIFhNTTMgPSAoKChXW3QtMTVdPj4xKV5XW3QtMTVdKT4+NileV1t0LTE1XSAqLworCXhvcgl0bXAwLCBhXzY0CisJcm9yCXRtcDAsIDI4IC8qIDI4ICovCisJCXBzcmxxCXhtbTAsIDYgICAgICAgICAgICAgLyogWE1NMCA9ICgoKChXW3QtMl0+PjQyKV5XW3QtMl0pPj4xMyleV1t0LTJdKT4+NiAqLworCWFkZAlUMiwgICB0bXAwCisJYWRkCWRfNjQsIFQxCisJCXBzcmxxCXhtbTMsIDEgICAgICAgICAgICAgLyogWE1NMyA9ICgoKFdbdC0xNV0+PjEpXldbdC0xNV0pPj42KV5XW3QtMTVdPj4xICovCisJbGVhCWhfNjQsIFtUMSArIFQyXQorCVJvdGF0ZVN0YXRlCisJCW1vdmRxYQl4bW0xLCB4bW0yICAgICAgICAgIC8qIFhNTTEgPSBXW3QtMl0gKi8KKwltb3YJVDEsIGZfNjQKKwl4b3IJVDEsICAgZ182NAorCQltb3ZkcWEJeG1tNCwgeG1tNSAgICAgICAgICAvKiBYTU00ID0gV1t0LTE1XSAqLworCWFuZAlUMSwgICBlXzY0CisJeG9yCVQxLCAgIGdfNjQKKwkJcHNsbHEJeG1tMSwgKDY0IC0gMTkpIC0gKDY0IC0gNjEpIC8qIFhNTTEgPSBXW3QtMl0gPDwgNDIgKi8KKwlhZGQJVDEsICAgW1dLXzIoXHQrMSldCisJbW92CXRtcDAsIGVfNjQKKwkJcHNsbHEJeG1tNCwgKDY0IC0gMSkgLSAoNjQgLSA4KSAvKiBYTU00ID0gV1t0LTE1XSA8PCA3ICovCisJcm9yCXRtcDAsIDIzIC8qIDQxICovCisJeG9yCXRtcDAsIGVfNjQKKwkJcHhvcgl4bW0xLCB4bW0yICAgICAgICAgIC8qIFhNTTEgPSAoV1t0LTJdIDw8IDQyKV5XW3QtMl0gKi8KKwlyb3IJdG1wMCwgNCAvKiAxOCAqLworCXhvcgl0bXAwLCBlXzY0CisJCXB4b3IJeG1tNCwgeG1tNSAgICAgICAgICAvKiBYTU00ID0gKFdbdC0xNV08PDcpXldbdC0xNV0gKi8KKwlyb3IJdG1wMCwgMTQgLyogMTQgKi8KKwlhZGQJVDEsICAgdG1wMAorCQlwc2xscQl4bW0xLCAoNjQgLSA2MSkgICAgIC8qIFhNTTEgPSAoKFdbdC0yXSA8PCA0MileV1t0LTJdKTw8MyAqLworCWFkZAlUMSwgICBoXzY0CisJbW92CVQyLCAgIGFfNjQKKwkJcHNsbHEJeG1tNCwgKDY0IC0gOCkgICAgICAvKiBYTU00ID0gKChXW3QtMTVdPDw3KV5XW3QtMTVdKTw8NTYgKi8KKwl4b3IJVDIsICAgY182NAorCWFuZAlUMiwgICBiXzY0CisJCXB4b3IJeG1tMCwgeG1tMSAgICAgICAgICAvKiBYTU0wID0gczEoV1t0LTJdKSAqLworCW1vdgl0bXAwLCBhXzY0CisJYW5kCXRtcDAsIGNfNjQKKwkJbW92ZHF1CXhtbTEsIFtXX3QoXHQtIDcpXSAvKiBYTU0xID0gV1t0LTddICovCisJeG9yCVQyLCAgIHRtcDAKKwkJcHhvcgl4bW0zLCB4bW00ICAgICAgICAgIC8qIFhNTTMgPSBzMChXW3QtMTVdKSAqLworCW1vdgl0bXAwLCBhXzY0CisJCXBhZGRxCXhtbTAsIHhtbTMgICAgICAgICAgLyogWE1NMCA9IHMxKFdbdC0yXSkgKyBzMChXW3QtMTVdKSAqLworCXJvcgl0bXAwLCA1IC8qIDM5ICovCisJCXBhZGRxCXhtbTAsIFtXX3QoXHQtMTYpXSAvKiBYTU0wID0gczEoV1t0LTJdKSArIHMwKFdbdC0xNV0pICsgV1t0LTE2XSAqLworCXhvcgl0bXAwLCBhXzY0CisJCXBhZGRxCXhtbTAsIHhtbTEgICAgICAgICAgLyogWE1NMCA9IHMxKFdbdC0yXSkgKyBXW3QtN10gKyBzMChXW3QtMTVdKSArIFdbdC0xNl0gKi8KKwlyb3IJdG1wMCwgNiAvKiAzNCAqLworCQltb3ZkcWEJW1dfdChcdCldLCB4bW0wICAgICAvKiBTdG9yZSBzY2hlZHVsZWQgcXdvcmRzICovCisJeG9yCXRtcDAsIGFfNjQKKwkJcGFkZHEJeG1tMCwgW0tfdCh0KV0gICAgICAvKiBDb21wdXRlIFdbdF0rS1t0XSAqLworCXJvcgl0bXAwLCAyOCAvKiAyOCAqLworCQltb3ZkcWEJW1dLXzIodCldLCB4bW0wICAgICAvKiBTdG9yZSBXW3RdK0tbdF0gZm9yIG5leHQgcm91bmRzICovCisJYWRkCVQyLCAgIHRtcDAKKwlhZGQJZF82NCwgVDEKKwlsZWEJaF82NCwgW1QxICsgVDJdCisJUm90YXRlU3RhdGUKKy5lbmRtCisKKy8qCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzsgdm9pZCBzaGE1MTJfc3NlNChjb25zdCB2b2lkKiBNLCB2b2lkKiBELCB1aW50NjRfdCBMKTsKKzsgUHVycG9zZTogVXBkYXRlcyB0aGUgU0hBNTEyIGRpZ2VzdCBzdG9yZWQgYXQgRCB3aXRoIHRoZSBtZXNzYWdlIHN0b3JlZCBpbiBNLgorOyBUaGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSBwb2ludGVkIHRvIGJ5IE0gbXVzdCBiZSBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIFNIQTUxMgorOyAgIG1lc3NhZ2UgYmxvY2tzLgorOyBMIGlzIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiBTSEE1MTIgYmxvY2tzLgorKi8KKy5nbG9ibCBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzCisudHlwZSBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X3Nzc2UzLEBmdW5jdGlvbjsKKy5hbGlnbiAxNgorX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9zc3NlMzoKKwl4b3IgZWF4LCBlYXgKKworCWNtcCBtc2dsZW4sIDAKKwlqZSAuTG5vd29yaworCisJLyogQWxsb2NhdGUgU3RhY2sgU3BhY2UgKi8KKwlzdWIJcnNwLCBmcmFtZV9zaXplCisKKwkvKiBTYXZlIEdQUnMgKi8KKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMF0sIHJieAorCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAxXSwgcjEyCisJbW92CVtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDJdLCByMTMKKwltb3YJW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogM10sIHIxNAorCW1vdglbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiA0XSwgcjE1CisKKy5MdXBkYXRlYmxvY2s6CisKKwkvKiBMb2FkIHN0YXRlIHZhcmlhYmxlcyAqLworCW1vdglhXzY0LCBbRElHRVNUKDApXQorCW1vdgliXzY0LCBbRElHRVNUKDEpXQorCW1vdgljXzY0LCBbRElHRVNUKDIpXQorCW1vdglkXzY0LCBbRElHRVNUKDMpXQorCW1vdgllXzY0LCBbRElHRVNUKDQpXQorCW1vdglmXzY0LCBbRElHRVNUKDUpXQorCW1vdglnXzY0LCBbRElHRVNUKDYpXQorCW1vdgloXzY0LCBbRElHRVNUKDcpXQorCisJdCA9IDAKKwkucmVwdCA4MC8yICsgMQorCS8qICg4MCByb3VuZHMpIC8gKDIgcm91bmRzL2l0ZXJhdGlvbikgKyAoMSBpdGVyYXRpb24pICovCisJLyogKzEgaXRlcmF0aW9uIGJlY2F1c2UgdGhlIHNjaGVkdWxlciBsZWFkcyBoYXNoaW5nIGJ5IDEgaXRlcmF0aW9uICovCisJCS5pZiB0IDwgMgorCQkJLyogQlNXQVAgMiBRV09SRFMgKi8KKwkJCW1vdmRxYQl4bW0xLCBbLkxYTU1fUVdPUkRfQlNXQVAgQUREX1JJUF0KKwkJCW1vdmRxdQl4bW0wLCBbTVNHKHQpXQorCQkJcHNodWZiCXhtbTAsIHhtbTEgICAgICAvKiBCU1dBUCAqLworCQkJbW92ZHFhCVtXX3QodCldLCB4bW0wICAvKiBTdG9yZSBTY2hlZHVsZWQgUGFpciAqLworCQkJcGFkZHEJeG1tMCwgW0tfdCh0KV0gIC8qIENvbXB1dGUgV1t0XStLW3RdICovCisJCQltb3ZkcWEJW1dLXzIodCldLCB4bW0wIC8qIFN0b3JlIGludG8gV0sgZm9yIHJvdW5kcyAqLworCQkuZWxzZWlmIHQgPCAxNgorCQkJLyogQlNXQVAgMiBRV09SRFM7IENvbXB1dGUgMiBSb3VuZHMgKi8KKwkJCW1vdmRxdQl4bW0wLCBbTVNHKHQpXQorCQkJcHNodWZiCXhtbTAsIHhtbTEgICAgICAvKiBCU1dBUCAqLworCQkJU0hBNTEyX1JvdW5kICh0IC0gMikgICAgLyogUm91bmQgdC0yICovCisJCQltb3ZkcWEJW1dfdCh0KV0sIHhtbTAgIC8qIFN0b3JlIFNjaGVkdWxlZCBQYWlyICovCisJCQlwYWRkcQl4bW0wLCBbS190KHQpXSAgLyogQ29tcHV0ZSBXW3RdK0tbdF0gKi8KKwkJCVNIQTUxMl9Sb3VuZCAodCAtIDEpICAgIC8qIFJvdW5kIHQtMSAqLworCQkJbW92ZHFhCVtXS18yKHQpXSwgeG1tMCAvKiBTdG9yZSBXW3RdK0tbdF0gaW50byBXSyAqLworCQkuZWxzZWlmIHQgPCA3OQorCQkJLyogU2NoZWR1bGUgMiBRV09SRFM7IENvbXB1dGUgMiBSb3VuZHMgKi8KKwkJCVNIQTUxMl8yU2NoZWRfMlJvdW5kX3NzZSB0CisJCS5lbHNlCisJCQkvKiBDb21wdXRlIDIgUm91bmRzICovCisJCQlTSEE1MTJfUm91bmQgKHQgLSAyKQorCQkJU0hBNTEyX1JvdW5kICh0IC0gMSkKKwkJLmVuZGlmCisJCXQgPSAodCkrMgorCS5lbmRyCisKKwkvKiBVcGRhdGUgZGlnZXN0ICovCisJYWRkCVtESUdFU1QoMCldLCBhXzY0CisJYWRkCVtESUdFU1QoMSldLCBiXzY0CisJYWRkCVtESUdFU1QoMildLCBjXzY0CisJYWRkCVtESUdFU1QoMyldLCBkXzY0CisJYWRkCVtESUdFU1QoNCldLCBlXzY0CisJYWRkCVtESUdFU1QoNSldLCBmXzY0CisJYWRkCVtESUdFU1QoNildLCBnXzY0CisJYWRkCVtESUdFU1QoNyldLCBoXzY0CisKKwkvKiBBZHZhbmNlIHRvIG5leHQgbWVzc2FnZSBibG9jayAqLworCWFkZAltc2csIDE2KjgKKwlkZWMJbXNnbGVuCisJam56CS5MdXBkYXRlYmxvY2sKKworCS8qIFJlc3RvcmUgR1BScyAqLworCW1vdglyYngsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDBdCisJbW92CXIxMiwgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogMV0KKwltb3YJcjEzLCBbcnNwICsgZnJhbWVfR1BSU0FWRSArIDggKiAyXQorCW1vdglyMTQsIFtyc3AgKyBmcmFtZV9HUFJTQVZFICsgOCAqIDNdCisJbW92CXIxNSwgW3JzcCArIGZyYW1lX0dQUlNBVkUgKyA4ICogNF0KKworCS8qIFJlc3RvcmUgU3RhY2sgUG9pbnRlciAqLworCWFkZAlyc3AsIGZyYW1lX3NpemUKKworCXB4b3IJeG1tMCwgeG1tMAorCXB4b3IJeG1tMSwgeG1tMQorCXB4b3IJeG1tMiwgeG1tMgorCXB4b3IJeG1tMywgeG1tMworCXB4b3IJeG1tNCwgeG1tNAorCXB4b3IJeG1tNSwgeG1tNQorCisJLyogUmV0dXJuIHN0YWNrIGJ1cm4gZGVwdGggKi8KKwltb3YJcmF4LCBmcmFtZV9zaXplCisKKy5Mbm93b3JrOgorCXJldAorCisvKgorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBCaW5hcnkgRGF0YQorKi8KKworLmRhdGEKKworLmFsaWduIDE2CisKKy8qIE1hc2sgZm9yIGJ5dGUtc3dhcHBpbmcgYSBjb3VwbGUgb2YgcXdvcmRzIGluIGFuIFhNTSByZWdpc3RlciB1c2luZyAodilwc2h1ZmIuICovCisuTFhNTV9RV09SRF9CU1dBUDoKKwkub2N0YSAweDA4MDkwYTBiMGMwZDBlMGYwMDAxMDIwMzA0MDUwNjA3CisKKy8qIEtbdF0gdXNlZCBpbiBTSEE1MTIgaGFzaGluZyAqLworLkxLNTEyOgorCS5xdWFkIDB4NDI4YTJmOThkNzI4YWUyMiwweDcxMzc0NDkxMjNlZjY1Y2QKKwkucXVhZCAweGI1YzBmYmNmZWM0ZDNiMmYsMHhlOWI1ZGJhNTgxODlkYmJjCisJLnF1YWQgMHgzOTU2YzI1YmYzNDhiNTM4LDB4NTlmMTExZjFiNjA1ZDAxOQorCS5xdWFkIDB4OTIzZjgyYTRhZjE5NGY5YiwweGFiMWM1ZWQ1ZGE2ZDgxMTgKKwkucXVhZCAweGQ4MDdhYTk4YTMwMzAyNDIsMHgxMjgzNWIwMTQ1NzA2ZmJlCisJLnF1YWQgMHgyNDMxODViZTRlZTRiMjhjLDB4NTUwYzdkYzNkNWZmYjRlMgorCS5xdWFkIDB4NzJiZTVkNzRmMjdiODk2ZiwweDgwZGViMWZlM2IxNjk2YjEKKwkucXVhZCAweDliZGMwNmE3MjVjNzEyMzUsMHhjMTliZjE3NGNmNjkyNjk0CisJLnF1YWQgMHhlNDliNjljMTllZjE0YWQyLDB4ZWZiZTQ3ODYzODRmMjVlMworCS5xdWFkIDB4MGZjMTlkYzY4YjhjZDViNSwweDI0MGNhMWNjNzdhYzljNjUKKwkucXVhZCAweDJkZTkyYzZmNTkyYjAyNzUsMHg0YTc0ODRhYTZlYTZlNDgzCisJLnF1YWQgMHg1Y2IwYTlkY2JkNDFmYmQ0LDB4NzZmOTg4ZGE4MzExNTNiNQorCS5xdWFkIDB4OTgzZTUxNTJlZTY2ZGZhYiwweGE4MzFjNjZkMmRiNDMyMTAKKwkucXVhZCAweGIwMDMyN2M4OThmYjIxM2YsMHhiZjU5N2ZjN2JlZWYwZWU0CisJLnF1YWQgMHhjNmUwMGJmMzNkYTg4ZmMyLDB4ZDVhNzkxNDc5MzBhYTcyNQorCS5xdWFkIDB4MDZjYTYzNTFlMDAzODI2ZiwweDE0MjkyOTY3MGEwZTZlNzAKKwkucXVhZCAweDI3YjcwYTg1NDZkMjJmZmMsMHgyZTFiMjEzODVjMjZjOTI2CisJLnF1YWQgMHg0ZDJjNmRmYzVhYzQyYWVkLDB4NTMzODBkMTM5ZDk1YjNkZgorCS5xdWFkIDB4NjUwYTczNTQ4YmFmNjNkZSwweDc2NmEwYWJiM2M3N2IyYTgKKwkucXVhZCAweDgxYzJjOTJlNDdlZGFlZTYsMHg5MjcyMmM4NTE0ODIzNTNiCisJLnF1YWQgMHhhMmJmZThhMTRjZjEwMzY0LDB4YTgxYTY2NGJiYzQyMzAwMQorCS5xdWFkIDB4YzI0YjhiNzBkMGY4OTc5MSwweGM3NmM1MWEzMDY1NGJlMzAKKwkucXVhZCAweGQxOTJlODE5ZDZlZjUyMTgsMHhkNjk5MDYyNDU1NjVhOTEwCisJLnF1YWQgMHhmNDBlMzU4NTU3NzEyMDJhLDB4MTA2YWEwNzAzMmJiZDFiOAorCS5xdWFkIDB4MTlhNGMxMTZiOGQyZDBjOCwweDFlMzc2YzA4NTE0MWFiNTMKKwkucXVhZCAweDI3NDg3NzRjZGY4ZWViOTksMHgzNGIwYmNiNWUxOWI0OGE4CisJLnF1YWQgMHgzOTFjMGNiM2M1Yzk1YTYzLDB4NGVkOGFhNGFlMzQxOGFjYgorCS5xdWFkIDB4NWI5Y2NhNGY3NzYzZTM3MywweDY4MmU2ZmYzZDZiMmI4YTMKKwkucXVhZCAweDc0OGY4MmVlNWRlZmIyZmMsMHg3OGE1NjM2ZjQzMTcyZjYwCisJLnF1YWQgMHg4NGM4NzgxNGExZjBhYjcyLDB4OGNjNzAyMDgxYTY0MzllYworCS5xdWFkIDB4OTBiZWZmZmEyMzYzMWUyOCwweGE0NTA2Y2ViZGU4MmJkZTkKKwkucXVhZCAweGJlZjlhM2Y3YjJjNjc5MTUsMHhjNjcxNzhmMmUzNzI1MzJiCisJLnF1YWQgMHhjYTI3M2VjZWVhMjY2MTljLDB4ZDE4NmI4YzcyMWMwYzIwNworCS5xdWFkIDB4ZWFkYTdkZDZjZGUwZWIxZSwweGY1N2Q0ZjdmZWU2ZWQxNzgKKwkucXVhZCAweDA2ZjA2N2FhNzIxNzZmYmEsMHgwYTYzN2RjNWEyYzg5OGE2CisJLnF1YWQgMHgxMTNmOTgwNGJlZjkwZGFlLDB4MWI3MTBiMzUxMzFjNDcxYgorCS5xdWFkIDB4MjhkYjc3ZjUyMzA0N2Q4NCwweDMyY2FhYjdiNDBjNzI0OTMKKwkucXVhZCAweDNjOWViZTBhMTVjOWJlYmMsMHg0MzFkNjdjNDljMTAwZDRjCisJLnF1YWQgMHg0Y2M1ZDRiZWNiM2U0MmI2LDB4NTk3ZjI5OWNmYzY1N2UyYQorCS5xdWFkIDB4NWZjYjZmYWIzYWQ2ZmFlYywweDZjNDQxOThjNGE0NzU4MTcKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NpcGhlci9zaGE1MTIuYyBiL2NpcGhlci9zaGE1MTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVkMDMxCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3NoYTUxMi5jCkBAIC0wLDAgKzEsODcwIEBACisvKiBzaGE1MTIuYyAtIFNIQTM4NCBhbmQgU0hBNTEyIGhhc2ggZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKworLyogIFRlc3QgdmVjdG9ycyBmcm9tIEZJUFMtMTgwLTI6CisgKgorICogICJhYmMiCisgKiAzODQ6CisgKiAgQ0IwMDc1M0YgNDVBMzVFOEIgQjVBMDNENjkgOUFDNjUwMDcgMjcyQzMyQUIgMEVERUQxNjMKKyAqICAxQThCNjA1QSA0M0ZGNUJFRCA4MDg2MDcyQiBBMUU3Q0MyMyA1OEJBRUNBMSAzNEM4MjVBNworICogNTEyOgorICogIEREQUYzNUExIDkzNjE3QUJBIENDNDE3MzQ5IEFFMjA0MTMxIDEyRTZGQTRFIDg5QTk3RUEyIDBBOUVFRUU2IDRCNTVEMzlBCisgKiAgMjE5Mjk5MkEgMjc0RkMxQTggMzZCQTNDMjMgQTNGRUVCQkQgNDU0RDQ0MjMgNjQzQ0U4MEUgMkE5QUM5NEYgQTU0Q0E0OUYKKyAqCisgKiAgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiCisgKiAzODQ6CisgKiAgMDkzMzBDMzMgRjcxMTQ3RTggM0QxOTJGQzcgODJDRDFCNDcgNTMxMTFCMTcgM0IzQjA1RDIKKyAqICAyRkEwODA4NiBFM0IwRjcxMiBGQ0M3QzcxQSA1NTdFMkRCOSA2NkMzRTlGQSA5MTc0NjAzOQorICogNTEyOgorICogIDhFOTU5Qjc1IERBRTMxM0RBIDhDRjRGNzI4IDE0RkMxNDNGIDhGNzc3OUM2IEVCOUY3RkExIDcyOTlBRUFEIEI2ODg5MDE4CisgKiAgNTAxRDI4OUUgNDkwMEY3RTQgMzMxQjk5REUgQzRCNTQzM0EgQzdEMzI5RUUgQjZERDI2NTQgNUU5NkU1NUIgODc0QkU5MDkKKyAqCisgKiAgImEiIHggMTAwMDAwMAorICogMzg0OgorICogIDlEMEUxODA5IDcxNjQ3NENCIDA4NkU4MzRFIDMxMEE0QTFDIEVEMTQ5RTlDIDAwRjI0ODUyCisgKiAgNzk3MkNFQzUgNzA0QzJBNUIgMDdCOEIzREMgMzhFQ0M0RUIgQUU5N0RERDggN0YzRDg5ODUKKyAqIDUxMjoKKyAqICBFNzE4NDgzRCAwQ0U3Njk2NCA0RTJFNDJDNyBCQzE1QjQ2MyA4RTFGOThCMSAzQjIwNDQyOCA1NjMyQTgwMyBBRkE5NzNFQgorICogIERFMEZGMjQ0IDg3N0VBNjBBIDRDQjA0MzJDIEU1NzdDMzFCIEVCMDA5QzVDIDJDNDlBQTJFIDRFQURCMjE3IEFEOENDMDlCCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJoYXNoLWNvbW1vbi5oIgorCisKKy8qIFVTRV9BUk1fTkVPTl9BU00gaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIEFSTSBORU9OIGFzc2VtYmx5IGNvZGUuICovCisjdW5kZWYgVVNFX0FSTV9ORU9OX0FTTQorI2lmIGRlZmluZWQoSEFWRV9BUk1fQVJDSF9WNikgJiYgZGVmaW5lZChfX0FSTUVMX18pCisjIGlmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMpICYmIFwKKyAgICAgZGVmaW5lZChIQVZFX0dDQ19JTkxJTkVfQVNNX05FT04pCisjICBkZWZpbmUgVVNFX0FSTV9ORU9OX0FTTSAxCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBVU0VfU1NTRTMgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEludGVsIFNTU0UzIGNvZGUuICovCisjdW5kZWYgVVNFX1NTU0UzCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fU1NTRTMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfSU5URUxfU1lOVEFYX1BMQVRGT1JNX0FTKQorIyBkZWZpbmUgVVNFX1NTU0UzIDEKKyNlbmRpZgorCisKKy8qIFVTRV9BVlggaW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIEludGVsIEFWWCBjb2RlLiAqLworI3VuZGVmIFVTRV9BVlgKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9BVlgpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfSU5URUxfU1lOVEFYX1BMQVRGT1JNX0FTKQorIyBkZWZpbmUgVVNFX0FWWCAxCisjZW5kaWYKKworCisvKiBVU0VfQVZYMiBpbmRpY2F0ZXMgd2hldGhlciB0byBjb21waWxlIHdpdGggSW50ZWwgQVZYMi9yb3J4IGNvZGUuICovCisjdW5kZWYgVVNFX0FWWDIKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9BVlgyKSAmJiBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fQk1JMikgJiYgXAorICAgIGRlZmluZWQoSEFWRV9JTlRFTF9TWU5UQVhfUExBVEZPUk1fQVMpCisjIGRlZmluZSBVU0VfQVZYMiAxCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdAoreworICB1NjQgaDAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGg3OworfSBTSEE1MTJfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdjcnlfbWRfYmxvY2tfY3R4X3QgYmN0eDsKKyAgU0hBNTEyX1NUQVRFIHN0YXRlOworI2lmZGVmIFVTRV9BUk1fTkVPTl9BU00KKyAgdW5zaWduZWQgaW50IHVzZV9uZW9uOjE7CisjZW5kaWYKKyNpZmRlZiBVU0VfU1NTRTMKKyAgdW5zaWduZWQgaW50IHVzZV9zc3NlMzoxOworI2VuZGlmCisjaWZkZWYgVVNFX0FWWAorICB1bnNpZ25lZCBpbnQgdXNlX2F2eDoxOworI2VuZGlmCisjaWZkZWYgVVNFX0FWWDIKKyAgdW5zaWduZWQgaW50IHVzZV9hdngyOjE7CisjZW5kaWYKK30gU0hBNTEyX0NPTlRFWFQ7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAodm9pZCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKK3N0YXRpYyB2b2lkCitzaGE1MTJfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBTSEE1MTJfQ09OVEVYVCAqY3R4ID0gY29udGV4dDsKKyAgU0hBNTEyX1NUQVRFICpoZCA9ICZjdHgtPnN0YXRlOworICB1bnNpZ25lZCBpbnQgZmVhdHVyZXMgPSBfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCk7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaGQtPmgwID0gVTY0X0MoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAgaGQtPmgxID0gVTY0X0MoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKKyAgaGQtPmgyID0gVTY0X0MoMHgzYzZlZjM3MmZlOTRmODJiKTsKKyAgaGQtPmgzID0gVTY0X0MoMHhhNTRmZjUzYTVmMWQzNmYxKTsKKyAgaGQtPmg0ID0gVTY0X0MoMHg1MTBlNTI3ZmFkZTY4MmQxKTsKKyAgaGQtPmg1ID0gVTY0X0MoMHg5YjA1Njg4YzJiM2U2YzFmKTsKKyAgaGQtPmg2ID0gVTY0X0MoMHgxZjgzZDlhYmZiNDFiZDZiKTsKKyAgaGQtPmg3ID0gVTY0X0MoMHg1YmUwY2QxOTEzN2UyMTc5KTsKKworICBjdHgtPmJjdHgubmJsb2NrcyA9IDA7CisgIGN0eC0+YmN0eC5uYmxvY2tzX2hpZ2ggPSAwOworICBjdHgtPmJjdHguY291bnQgPSAwOworICBjdHgtPmJjdHguYmxvY2tzaXplID0gMTI4OworICBjdHgtPmJjdHguYndyaXRlID0gdHJhbnNmb3JtOworCisjaWZkZWYgVVNFX0FSTV9ORU9OX0FTTQorICBjdHgtPnVzZV9uZW9uID0gKGZlYXR1cmVzICYgSFdGX0FSTV9ORU9OKSAhPSAwOworI2VuZGlmCisjaWZkZWYgVVNFX1NTU0UzCisgIGN0eC0+dXNlX3Nzc2UzID0gKGZlYXR1cmVzICYgSFdGX0lOVEVMX1NTU0UzKSAhPSAwOworI2VuZGlmCisjaWZkZWYgVVNFX0FWWAorICBjdHgtPnVzZV9hdnggPSAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQVZYKSAmJiAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQ1BVKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9BVlgyCisgIGN0eC0+dXNlX2F2eDIgPSAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQVZYMikgJiYgKGZlYXR1cmVzICYgSFdGX0lOVEVMX0JNSTIpOworI2VuZGlmCisKKyAgKHZvaWQpZmVhdHVyZXM7Cit9CisKK3N0YXRpYyB2b2lkCitzaGEzODRfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBTSEE1MTJfQ09OVEVYVCAqY3R4ID0gY29udGV4dDsKKyAgU0hBNTEyX1NUQVRFICpoZCA9ICZjdHgtPnN0YXRlOworICB1bnNpZ25lZCBpbnQgZmVhdHVyZXMgPSBfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCk7CisKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaGQtPmgwID0gVTY0X0MoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKKyAgaGQtPmgxID0gVTY0X0MoMHg2MjlhMjkyYTM2N2NkNTA3KTsKKyAgaGQtPmgyID0gVTY0X0MoMHg5MTU5MDE1YTMwNzBkZDE3KTsKKyAgaGQtPmgzID0gVTY0X0MoMHgxNTJmZWNkOGY3MGU1OTM5KTsKKyAgaGQtPmg0ID0gVTY0X0MoMHg2NzMzMjY2N2ZmYzAwYjMxKTsKKyAgaGQtPmg1ID0gVTY0X0MoMHg4ZWI0NGE4NzY4NTgxNTExKTsKKyAgaGQtPmg2ID0gVTY0X0MoMHhkYjBjMmUwZDY0Zjk4ZmE3KTsKKyAgaGQtPmg3ID0gVTY0X0MoMHg0N2I1NDgxZGJlZmE0ZmE0KTsKKworICBjdHgtPmJjdHgubmJsb2NrcyA9IDA7CisgIGN0eC0+YmN0eC5uYmxvY2tzX2hpZ2ggPSAwOworICBjdHgtPmJjdHguY291bnQgPSAwOworICBjdHgtPmJjdHguYmxvY2tzaXplID0gMTI4OworICBjdHgtPmJjdHguYndyaXRlID0gdHJhbnNmb3JtOworCisjaWZkZWYgVVNFX0FSTV9ORU9OX0FTTQorICBjdHgtPnVzZV9uZW9uID0gKGZlYXR1cmVzICYgSFdGX0FSTV9ORU9OKSAhPSAwOworI2VuZGlmCisjaWZkZWYgVVNFX1NTU0UzCisgIGN0eC0+dXNlX3Nzc2UzID0gKGZlYXR1cmVzICYgSFdGX0lOVEVMX1NTU0UzKSAhPSAwOworI2VuZGlmCisjaWZkZWYgVVNFX0FWWAorICBjdHgtPnVzZV9hdnggPSAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQVZYKSAmJiAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQ1BVKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9BVlgyCisgIGN0eC0+dXNlX2F2eDIgPSAoZmVhdHVyZXMgJiBIV0ZfSU5URUxfQVZYMikgJiYgKGZlYXR1cmVzICYgSFdGX0lOVEVMX0JNSTIpOworI2VuZGlmCisKKyAgKHZvaWQpZmVhdHVyZXM7Cit9CisKKworc3RhdGljIGlubGluZSB1NjQKK1JPVFIgKHU2NCB4LCB1NjQgbikKK3sKKyAgcmV0dXJuICgoeCA+PiBuKSB8ICh4IDw8ICg2NCAtIG4pKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0CitDaCAodTY0IHgsIHU2NCB5LCB1NjQgeikKK3sKKyAgcmV0dXJuICgoeCAmIHkpIF4gKCB+eCAmIHopKTsKK30KKworc3RhdGljIGlubGluZSB1NjQKK01haiAodTY0IHgsIHU2NCB5LCB1NjQgeikKK3sKKyAgcmV0dXJuICgoeCAmIHkpIF4gKHggJiB6KSBeICh5ICYgeikpOworfQorCitzdGF0aWMgaW5saW5lIHU2NAorU3VtMCAodTY0IHgpCit7CisgIHJldHVybiAoUk9UUiAoeCwgMjgpIF4gUk9UUiAoeCwgMzQpIF4gUk9UUiAoeCwgMzkpKTsKK30KKworc3RhdGljIGlubGluZSB1NjQKK1N1bTEgKHU2NCB4KQoreworICByZXR1cm4gKFJPVFIgKHgsIDE0KSBeIFJPVFIgKHgsIDE4KSBeIFJPVFIgKHgsIDQxKSk7Cit9CisKK3N0YXRpYyBjb25zdCB1NjQga1tdID0KKyAgeworICAgIFU2NF9DKDB4NDI4YTJmOThkNzI4YWUyMiksIFU2NF9DKDB4NzEzNzQ0OTEyM2VmNjVjZCksCisgICAgVTY0X0MoMHhiNWMwZmJjZmVjNGQzYjJmKSwgVTY0X0MoMHhlOWI1ZGJhNTgxODlkYmJjKSwKKyAgICBVNjRfQygweDM5NTZjMjViZjM0OGI1MzgpLCBVNjRfQygweDU5ZjExMWYxYjYwNWQwMTkpLAorICAgIFU2NF9DKDB4OTIzZjgyYTRhZjE5NGY5YiksIFU2NF9DKDB4YWIxYzVlZDVkYTZkODExOCksCisgICAgVTY0X0MoMHhkODA3YWE5OGEzMDMwMjQyKSwgVTY0X0MoMHgxMjgzNWIwMTQ1NzA2ZmJlKSwKKyAgICBVNjRfQygweDI0MzE4NWJlNGVlNGIyOGMpLCBVNjRfQygweDU1MGM3ZGMzZDVmZmI0ZTIpLAorICAgIFU2NF9DKDB4NzJiZTVkNzRmMjdiODk2ZiksIFU2NF9DKDB4ODBkZWIxZmUzYjE2OTZiMSksCisgICAgVTY0X0MoMHg5YmRjMDZhNzI1YzcxMjM1KSwgVTY0X0MoMHhjMTliZjE3NGNmNjkyNjk0KSwKKyAgICBVNjRfQygweGU0OWI2OWMxOWVmMTRhZDIpLCBVNjRfQygweGVmYmU0Nzg2Mzg0ZjI1ZTMpLAorICAgIFU2NF9DKDB4MGZjMTlkYzY4YjhjZDViNSksIFU2NF9DKDB4MjQwY2ExY2M3N2FjOWM2NSksCisgICAgVTY0X0MoMHgyZGU5MmM2ZjU5MmIwMjc1KSwgVTY0X0MoMHg0YTc0ODRhYTZlYTZlNDgzKSwKKyAgICBVNjRfQygweDVjYjBhOWRjYmQ0MWZiZDQpLCBVNjRfQygweDc2Zjk4OGRhODMxMTUzYjUpLAorICAgIFU2NF9DKDB4OTgzZTUxNTJlZTY2ZGZhYiksIFU2NF9DKDB4YTgzMWM2NmQyZGI0MzIxMCksCisgICAgVTY0X0MoMHhiMDAzMjdjODk4ZmIyMTNmKSwgVTY0X0MoMHhiZjU5N2ZjN2JlZWYwZWU0KSwKKyAgICBVNjRfQygweGM2ZTAwYmYzM2RhODhmYzIpLCBVNjRfQygweGQ1YTc5MTQ3OTMwYWE3MjUpLAorICAgIFU2NF9DKDB4MDZjYTYzNTFlMDAzODI2ZiksIFU2NF9DKDB4MTQyOTI5NjcwYTBlNmU3MCksCisgICAgVTY0X0MoMHgyN2I3MGE4NTQ2ZDIyZmZjKSwgVTY0X0MoMHgyZTFiMjEzODVjMjZjOTI2KSwKKyAgICBVNjRfQygweDRkMmM2ZGZjNWFjNDJhZWQpLCBVNjRfQygweDUzMzgwZDEzOWQ5NWIzZGYpLAorICAgIFU2NF9DKDB4NjUwYTczNTQ4YmFmNjNkZSksIFU2NF9DKDB4NzY2YTBhYmIzYzc3YjJhOCksCisgICAgVTY0X0MoMHg4MWMyYzkyZTQ3ZWRhZWU2KSwgVTY0X0MoMHg5MjcyMmM4NTE0ODIzNTNiKSwKKyAgICBVNjRfQygweGEyYmZlOGExNGNmMTAzNjQpLCBVNjRfQygweGE4MWE2NjRiYmM0MjMwMDEpLAorICAgIFU2NF9DKDB4YzI0YjhiNzBkMGY4OTc5MSksIFU2NF9DKDB4Yzc2YzUxYTMwNjU0YmUzMCksCisgICAgVTY0X0MoMHhkMTkyZTgxOWQ2ZWY1MjE4KSwgVTY0X0MoMHhkNjk5MDYyNDU1NjVhOTEwKSwKKyAgICBVNjRfQygweGY0MGUzNTg1NTc3MTIwMmEpLCBVNjRfQygweDEwNmFhMDcwMzJiYmQxYjgpLAorICAgIFU2NF9DKDB4MTlhNGMxMTZiOGQyZDBjOCksIFU2NF9DKDB4MWUzNzZjMDg1MTQxYWI1MyksCisgICAgVTY0X0MoMHgyNzQ4Nzc0Y2RmOGVlYjk5KSwgVTY0X0MoMHgzNGIwYmNiNWUxOWI0OGE4KSwKKyAgICBVNjRfQygweDM5MWMwY2IzYzVjOTVhNjMpLCBVNjRfQygweDRlZDhhYTRhZTM0MThhY2IpLAorICAgIFU2NF9DKDB4NWI5Y2NhNGY3NzYzZTM3MyksIFU2NF9DKDB4NjgyZTZmZjNkNmIyYjhhMyksCisgICAgVTY0X0MoMHg3NDhmODJlZTVkZWZiMmZjKSwgVTY0X0MoMHg3OGE1NjM2ZjQzMTcyZjYwKSwKKyAgICBVNjRfQygweDg0Yzg3ODE0YTFmMGFiNzIpLCBVNjRfQygweDhjYzcwMjA4MWE2NDM5ZWMpLAorICAgIFU2NF9DKDB4OTBiZWZmZmEyMzYzMWUyOCksIFU2NF9DKDB4YTQ1MDZjZWJkZTgyYmRlOSksCisgICAgVTY0X0MoMHhiZWY5YTNmN2IyYzY3OTE1KSwgVTY0X0MoMHhjNjcxNzhmMmUzNzI1MzJiKSwKKyAgICBVNjRfQygweGNhMjczZWNlZWEyNjYxOWMpLCBVNjRfQygweGQxODZiOGM3MjFjMGMyMDcpLAorICAgIFU2NF9DKDB4ZWFkYTdkZDZjZGUwZWIxZSksIFU2NF9DKDB4ZjU3ZDRmN2ZlZTZlZDE3OCksCisgICAgVTY0X0MoMHgwNmYwNjdhYTcyMTc2ZmJhKSwgVTY0X0MoMHgwYTYzN2RjNWEyYzg5OGE2KSwKKyAgICBVNjRfQygweDExM2Y5ODA0YmVmOTBkYWUpLCBVNjRfQygweDFiNzEwYjM1MTMxYzQ3MWIpLAorICAgIFU2NF9DKDB4MjhkYjc3ZjUyMzA0N2Q4NCksIFU2NF9DKDB4MzJjYWFiN2I0MGM3MjQ5MyksCisgICAgVTY0X0MoMHgzYzllYmUwYTE1YzliZWJjKSwgVTY0X0MoMHg0MzFkNjdjNDljMTAwZDRjKSwKKyAgICBVNjRfQygweDRjYzVkNGJlY2IzZTQyYjYpLCBVNjRfQygweDU5N2YyOTljZmM2NTdlMmEpLAorICAgIFU2NF9DKDB4NWZjYjZmYWIzYWQ2ZmFlYyksIFU2NF9DKDB4NmM0NDE5OGM0YTQ3NTgxNykKKyAgfTsKKworLyoqKioqKioqKioqKioqKioKKyAqIFRyYW5zZm9ybSB0aGUgbWVzc2FnZSBXIHdoaWNoIGNvbnNpc3RzIG9mIDE2IDY0LWJpdC13b3JkcworICovCitzdGF0aWMgdW5zaWduZWQgaW50CitfX3RyYW5zZm9ybSAoU0hBNTEyX1NUQVRFICpoZCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgdTY0IGEsIGIsIGMsIGQsIGUsIGYsIGcsIGg7CisgIHU2NCB3WzE2XTsKKyAgaW50IHQ7CisKKyAgLyogZ2V0IHZhbHVlcyBmcm9tIHRoZSBjaGFpbmluZyB2YXJzICovCisgIGEgPSBoZC0+aDA7CisgIGIgPSBoZC0+aDE7CisgIGMgPSBoZC0+aDI7CisgIGQgPSBoZC0+aDM7CisgIGUgPSBoZC0+aDQ7CisgIGYgPSBoZC0+aDU7CisgIGcgPSBoZC0+aDY7CisgIGggPSBoZC0+aDc7CisKKyAgZm9yICggdCA9IDA7IHQgPCAxNjsgdCsrICkKKyAgICB3W3RdID0gYnVmX2dldF9iZTY0KGRhdGEgKyB0ICogOCk7CisKKyNkZWZpbmUgUzAoeCkgKFJPVFIoKHgpLDEpIF4gUk9UUigoeCksOCkgXiAoKHgpPj43KSkKKyNkZWZpbmUgUzEoeCkgKFJPVFIoKHgpLDE5KSBeIFJPVFIoKHgpLDYxKSBeICgoeCk+PjYpKQorCisKKyAgZm9yICh0ID0gMDsgdCA8IDgwIC0gMTY7ICkKKyAgICB7CisgICAgICB1NjQgdDEsIHQyOworCisgICAgICAvKiBQZXJmb3JtYW5jZSBvbiBhIEFNRCBBdGhsb24odG0pIER1YWwgQ29yZSBQcm9jZXNzb3IgNDA1MGUKKyAgICAgICAgIHdpdGggZ2NjIDQuMy4zIHVzaW5nIGdjcnlfbWRfaGFzaF9idWZmZXIgb2YgZWFjaCAxMDAwMCBieXRlcworICAgICAgICAgaW5pdGlhbGl6ZWQgdG8gMCwxLDIsMy4uLjI1NSwwLC4uLiBhbmQgMTAwMCBpdGVyYXRpb25zOgorCisgICAgICAgICBOb3QgdW5yb2xsZWQgd2l0aCBtYWNyb3M6ICA0NDBtcworICAgICAgICAgVW5yb2xsZWQgd2l0aCBtYWNyb3M6ICAgICAgMzUwbXMKKyAgICAgICAgIFVucm9sbGVkIHdpdGggaW5saW5lOiAgICAgIDMzMG1zCisgICAgICAqLworI2lmIDAgLyogTm90IHVucm9sbGVkLiAgKi8KKyAgICAgIHQxID0gaCArIFN1bTEgKGUpICsgQ2ggKGUsIGYsIGcpICsga1t0XSArIHdbdCUxNl07CisgICAgICB3W3QlMTZdICs9IFMxICh3Wyh0IC0gMiklMTZdKSArIHdbKHQgLSA3KSUxNl0gKyBTMCAod1sodCAtIDE1KSUxNl0pOworICAgICAgdDIgPSBTdW0wIChhKSArIE1haiAoYSwgYiwgYyk7CisgICAgICBoID0gZzsKKyAgICAgIGcgPSBmOworICAgICAgZiA9IGU7CisgICAgICBlID0gZCArIHQxOworICAgICAgZCA9IGM7CisgICAgICBjID0gYjsKKyAgICAgIGIgPSBhOworICAgICAgYSA9IHQxICsgdDI7CisgICAgICB0Kys7CisjZWxzZSAvKiBVbnJvbGxlZCB0byBpbnRlcndlYXZlIHRoZSBjaGFpbiB2YXJpYWJsZXMuICAqLworICAgICAgdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3RdICsgd1swXTsKKyAgICAgIHdbMF0gKz0gUzEgKHdbMTRdKSArIHdbOV0gKyBTMCAod1sxXSk7CisgICAgICB0MiA9IFN1bTAgKGEpICsgTWFqIChhLCBiLCBjKTsKKyAgICAgIGQgKz0gdDE7CisgICAgICBoID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBnICsgU3VtMSAoZCkgKyBDaCAoZCwgZSwgZikgKyBrW3QrMV0gKyB3WzFdOworICAgICAgd1sxXSArPSBTMSAod1sxNV0pICsgd1sxMF0gKyBTMCAod1syXSk7CisgICAgICB0MiA9IFN1bTAgKGgpICsgTWFqIChoLCBhLCBiKTsKKyAgICAgIGMgKz0gdDE7CisgICAgICBnICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZiArIFN1bTEgKGMpICsgQ2ggKGMsIGQsIGUpICsga1t0KzJdICsgd1syXTsKKyAgICAgIHdbMl0gKz0gUzEgKHdbMF0pICsgd1sxMV0gKyBTMCAod1szXSk7CisgICAgICB0MiA9IFN1bTAgKGcpICsgTWFqIChnLCBoLCBhKTsKKyAgICAgIGIgKz0gdDE7CisgICAgICBmICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZSArIFN1bTEgKGIpICsgQ2ggKGIsIGMsIGQpICsga1t0KzNdICsgd1szXTsKKyAgICAgIHdbM10gKz0gUzEgKHdbMV0pICsgd1sxMl0gKyBTMCAod1s0XSk7CisgICAgICB0MiA9IFN1bTAgKGYpICsgTWFqIChmLCBnLCBoKTsKKyAgICAgIGEgKz0gdDE7CisgICAgICBlICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZCArIFN1bTEgKGEpICsgQ2ggKGEsIGIsIGMpICsga1t0KzRdICsgd1s0XTsKKyAgICAgIHdbNF0gKz0gUzEgKHdbMl0pICsgd1sxM10gKyBTMCAod1s1XSk7CisgICAgICB0MiA9IFN1bTAgKGUpICsgTWFqIChlLCBmLCBnKTsKKyAgICAgIGggKz0gdDE7CisgICAgICBkICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYyArIFN1bTEgKGgpICsgQ2ggKGgsIGEsIGIpICsga1t0KzVdICsgd1s1XTsKKyAgICAgIHdbNV0gKz0gUzEgKHdbM10pICsgd1sxNF0gKyBTMCAod1s2XSk7CisgICAgICB0MiA9IFN1bTAgKGQpICsgTWFqIChkLCBlLCBmKTsKKyAgICAgIGcgKz0gdDE7CisgICAgICBjICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYiArIFN1bTEgKGcpICsgQ2ggKGcsIGgsIGEpICsga1t0KzZdICsgd1s2XTsKKyAgICAgIHdbNl0gKz0gUzEgKHdbNF0pICsgd1sxNV0gKyBTMCAod1s3XSk7CisgICAgICB0MiA9IFN1bTAgKGMpICsgTWFqIChjLCBkLCBlKTsKKyAgICAgIGYgKz0gdDE7CisgICAgICBiICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYSArIFN1bTEgKGYpICsgQ2ggKGYsIGcsIGgpICsga1t0KzddICsgd1s3XTsKKyAgICAgIHdbN10gKz0gUzEgKHdbNV0pICsgd1swXSArIFMwICh3WzhdKTsKKyAgICAgIHQyID0gU3VtMCAoYikgKyBNYWogKGIsIGMsIGQpOworICAgICAgZSArPSB0MTsKKyAgICAgIGEgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3QrOF0gKyB3WzhdOworICAgICAgd1s4XSArPSBTMSAod1s2XSkgKyB3WzFdICsgUzAgKHdbOV0pOworICAgICAgdDIgPSBTdW0wIChhKSArIE1haiAoYSwgYiwgYyk7CisgICAgICBkICs9IHQxOworICAgICAgaCAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGcgKyBTdW0xIChkKSArIENoIChkLCBlLCBmKSArIGtbdCs5XSArIHdbOV07CisgICAgICB3WzldICs9IFMxICh3WzddKSArIHdbMl0gKyBTMCAod1sxMF0pOworICAgICAgdDIgPSBTdW0wIChoKSArIE1haiAoaCwgYSwgYik7CisgICAgICBjICs9IHQxOworICAgICAgZyAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGYgKyBTdW0xIChjKSArIENoIChjLCBkLCBlKSArIGtbdCsxMF0gKyB3WzEwXTsKKyAgICAgIHdbMTBdICs9IFMxICh3WzhdKSArIHdbM10gKyBTMCAod1sxMV0pOworICAgICAgdDIgPSBTdW0wIChnKSArIE1haiAoZywgaCwgYSk7CisgICAgICBiICs9IHQxOworICAgICAgZiAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGUgKyBTdW0xIChiKSArIENoIChiLCBjLCBkKSArIGtbdCsxMV0gKyB3WzExXTsKKyAgICAgIHdbMTFdICs9IFMxICh3WzldKSArIHdbNF0gKyBTMCAod1sxMl0pOworICAgICAgdDIgPSBTdW0wIChmKSArIE1haiAoZiwgZywgaCk7CisgICAgICBhICs9IHQxOworICAgICAgZSAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGQgKyBTdW0xIChhKSArIENoIChhLCBiLCBjKSArIGtbdCsxMl0gKyB3WzEyXTsKKyAgICAgIHdbMTJdICs9IFMxICh3WzEwXSkgKyB3WzVdICsgUzAgKHdbMTNdKTsKKyAgICAgIHQyID0gU3VtMCAoZSkgKyBNYWogKGUsIGYsIGcpOworICAgICAgaCArPSB0MTsKKyAgICAgIGQgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBjICsgU3VtMSAoaCkgKyBDaCAoaCwgYSwgYikgKyBrW3QrMTNdICsgd1sxM107CisgICAgICB3WzEzXSArPSBTMSAod1sxMV0pICsgd1s2XSArIFMwICh3WzE0XSk7CisgICAgICB0MiA9IFN1bTAgKGQpICsgTWFqIChkLCBlLCBmKTsKKyAgICAgIGcgKz0gdDE7CisgICAgICBjICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYiArIFN1bTEgKGcpICsgQ2ggKGcsIGgsIGEpICsga1t0KzE0XSArIHdbMTRdOworICAgICAgd1sxNF0gKz0gUzEgKHdbMTJdKSArIHdbN10gKyBTMCAod1sxNV0pOworICAgICAgdDIgPSBTdW0wIChjKSArIE1haiAoYywgZCwgZSk7CisgICAgICBmICs9IHQxOworICAgICAgYiAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGEgKyBTdW0xIChmKSArIENoIChmLCBnLCBoKSArIGtbdCsxNV0gKyB3WzE1XTsKKyAgICAgIHdbMTVdICs9IFMxICh3WzEzXSkgKyB3WzhdICsgUzAgKHdbMF0pOworICAgICAgdDIgPSBTdW0wIChiKSArIE1haiAoYiwgYywgZCk7CisgICAgICBlICs9IHQxOworICAgICAgYSAgPSB0MSArIHQyOworCisgICAgICB0ICs9IDE2OworI2VuZGlmCisgICAgfQorCisgIGZvciAoOyB0IDwgODA7ICkKKyAgICB7CisgICAgICB1NjQgdDEsIHQyOworCisjaWYgMCAvKiBOb3QgdW5yb2xsZWQuICAqLworICAgICAgdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3RdICsgd1t0JTE2XTsKKyAgICAgIHQyID0gU3VtMCAoYSkgKyBNYWogKGEsIGIsIGMpOworICAgICAgaCA9IGc7CisgICAgICBnID0gZjsKKyAgICAgIGYgPSBlOworICAgICAgZSA9IGQgKyB0MTsKKyAgICAgIGQgPSBjOworICAgICAgYyA9IGI7CisgICAgICBiID0gYTsKKyAgICAgIGEgPSB0MSArIHQyOworICAgICAgdCsrOworI2Vsc2UgLyogVW5yb2xsZWQgdG8gaW50ZXJ3ZWF2ZSB0aGUgY2hhaW4gdmFyaWFibGVzLiAgKi8KKyAgICAgIHQxID0gaCArIFN1bTEgKGUpICsgQ2ggKGUsIGYsIGcpICsga1t0XSArIHdbMF07CisgICAgICB0MiA9IFN1bTAgKGEpICsgTWFqIChhLCBiLCBjKTsKKyAgICAgIGQgKz0gdDE7CisgICAgICBoICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZyArIFN1bTEgKGQpICsgQ2ggKGQsIGUsIGYpICsga1t0KzFdICsgd1sxXTsKKyAgICAgIHQyID0gU3VtMCAoaCkgKyBNYWogKGgsIGEsIGIpOworICAgICAgYyArPSB0MTsKKyAgICAgIGcgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBmICsgU3VtMSAoYykgKyBDaCAoYywgZCwgZSkgKyBrW3QrMl0gKyB3WzJdOworICAgICAgdDIgPSBTdW0wIChnKSArIE1haiAoZywgaCwgYSk7CisgICAgICBiICs9IHQxOworICAgICAgZiAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGUgKyBTdW0xIChiKSArIENoIChiLCBjLCBkKSArIGtbdCszXSArIHdbM107CisgICAgICB0MiA9IFN1bTAgKGYpICsgTWFqIChmLCBnLCBoKTsKKyAgICAgIGEgKz0gdDE7CisgICAgICBlICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZCArIFN1bTEgKGEpICsgQ2ggKGEsIGIsIGMpICsga1t0KzRdICsgd1s0XTsKKyAgICAgIHQyID0gU3VtMCAoZSkgKyBNYWogKGUsIGYsIGcpOworICAgICAgaCArPSB0MTsKKyAgICAgIGQgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBjICsgU3VtMSAoaCkgKyBDaCAoaCwgYSwgYikgKyBrW3QrNV0gKyB3WzVdOworICAgICAgdDIgPSBTdW0wIChkKSArIE1haiAoZCwgZSwgZik7CisgICAgICBnICs9IHQxOworICAgICAgYyAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGIgKyBTdW0xIChnKSArIENoIChnLCBoLCBhKSArIGtbdCs2XSArIHdbNl07CisgICAgICB0MiA9IFN1bTAgKGMpICsgTWFqIChjLCBkLCBlKTsKKyAgICAgIGYgKz0gdDE7CisgICAgICBiICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYSArIFN1bTEgKGYpICsgQ2ggKGYsIGcsIGgpICsga1t0KzddICsgd1s3XTsKKyAgICAgIHQyID0gU3VtMCAoYikgKyBNYWogKGIsIGMsIGQpOworICAgICAgZSArPSB0MTsKKyAgICAgIGEgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBoICsgU3VtMSAoZSkgKyBDaCAoZSwgZiwgZykgKyBrW3QrOF0gKyB3WzhdOworICAgICAgdDIgPSBTdW0wIChhKSArIE1haiAoYSwgYiwgYyk7CisgICAgICBkICs9IHQxOworICAgICAgaCAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGcgKyBTdW0xIChkKSArIENoIChkLCBlLCBmKSArIGtbdCs5XSArIHdbOV07CisgICAgICB0MiA9IFN1bTAgKGgpICsgTWFqIChoLCBhLCBiKTsKKyAgICAgIGMgKz0gdDE7CisgICAgICBnICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gZiArIFN1bTEgKGMpICsgQ2ggKGMsIGQsIGUpICsga1t0KzEwXSArIHdbMTBdOworICAgICAgdDIgPSBTdW0wIChnKSArIE1haiAoZywgaCwgYSk7CisgICAgICBiICs9IHQxOworICAgICAgZiAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGUgKyBTdW0xIChiKSArIENoIChiLCBjLCBkKSArIGtbdCsxMV0gKyB3WzExXTsKKyAgICAgIHQyID0gU3VtMCAoZikgKyBNYWogKGYsIGcsIGgpOworICAgICAgYSArPSB0MTsKKyAgICAgIGUgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBkICsgU3VtMSAoYSkgKyBDaCAoYSwgYiwgYykgKyBrW3QrMTJdICsgd1sxMl07CisgICAgICB0MiA9IFN1bTAgKGUpICsgTWFqIChlLCBmLCBnKTsKKyAgICAgIGggKz0gdDE7CisgICAgICBkICA9IHQxICsgdDI7CisKKyAgICAgIHQxID0gYyArIFN1bTEgKGgpICsgQ2ggKGgsIGEsIGIpICsga1t0KzEzXSArIHdbMTNdOworICAgICAgdDIgPSBTdW0wIChkKSArIE1haiAoZCwgZSwgZik7CisgICAgICBnICs9IHQxOworICAgICAgYyAgPSB0MSArIHQyOworCisgICAgICB0MSA9IGIgKyBTdW0xIChnKSArIENoIChnLCBoLCBhKSArIGtbdCsxNF0gKyB3WzE0XTsKKyAgICAgIHQyID0gU3VtMCAoYykgKyBNYWogKGMsIGQsIGUpOworICAgICAgZiArPSB0MTsKKyAgICAgIGIgID0gdDEgKyB0MjsKKworICAgICAgdDEgPSBhICsgU3VtMSAoZikgKyBDaCAoZiwgZywgaCkgKyBrW3QrMTVdICsgd1sxNV07CisgICAgICB0MiA9IFN1bTAgKGIpICsgTWFqIChiLCBjLCBkKTsKKyAgICAgIGUgKz0gdDE7CisgICAgICBhICA9IHQxICsgdDI7CisKKyAgICAgIHQgKz0gMTY7CisjZW5kaWYKKyAgICB9CisKKyAgLyogVXBkYXRlIGNoYWluaW5nIHZhcnMuICAqLworICBoZC0+aDAgKz0gYTsKKyAgaGQtPmgxICs9IGI7CisgIGhkLT5oMiArPSBjOworICBoZC0+aDMgKz0gZDsKKyAgaGQtPmg0ICs9IGU7CisgIGhkLT5oNSArPSBmOworICBoZC0+aDYgKz0gZzsKKyAgaGQtPmg3ICs9IGg7CisKKyAgcmV0dXJuIC8qIGJ1cm5fc3RhY2sgKi8gKDggKyAxNikgKiBzaXplb2YodTY0KSArIHNpemVvZih1MzIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMyAqIHNpemVvZih2b2lkKik7Cit9CisKKworI2lmZGVmIFVTRV9BUk1fTkVPTl9BU00KK3ZvaWQgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hcm12N19uZW9uIChTSEE1MTJfU1RBVEUgKmhkLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQljb25zdCB1NjQga1tdKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1NTU0UzCit1bnNpZ25lZCBpbnQgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9zc3NlMyhjb25zdCB2b2lkICppbnB1dF9kYXRhLAorCQkJCQkgICAgICAgIHZvaWQgKnN0YXRlLCBzaXplX3QgbnVtX2Jsa3MpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQVZYCit1bnNpZ25lZCBpbnQgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9hdngoY29uc3Qgdm9pZCAqaW5wdXRfZGF0YSwKKwkJCQkJICAgICAgdm9pZCAqc3RhdGUsIHNpemVfdCBudW1fYmxrcyk7CisjZW5kaWYKKworI2lmZGVmIFVTRV9BVlgyCit1bnNpZ25lZCBpbnQgX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9hdngyKGNvbnN0IHZvaWQgKmlucHV0X2RhdGEsCisJCQkJCSAgICAgICB2b2lkICpzdGF0ZSwgc2l6ZV90IG51bV9ibGtzKTsKKyNlbmRpZgorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAodm9pZCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgU0hBNTEyX0NPTlRFWFQgKmN0eCA9IGNvbnRleHQ7CisKKyNpZmRlZiBVU0VfQVZYMgorICBpZiAoY3R4LT51c2VfYXZ4MikKKyAgICByZXR1cm4gX2djcnlfc2hhNTEyX3RyYW5zZm9ybV9hbWQ2NF9hdngyIChkYXRhLCAmY3R4LT5zdGF0ZSwgMSkKKyAgICAgICAgICAgKyA0ICogc2l6ZW9mKHZvaWQqKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FWWAorICBpZiAoY3R4LT51c2VfYXZ4KQorICAgIHJldHVybiBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FtZDY0X2F2eCAoZGF0YSwgJmN0eC0+c3RhdGUsIDEpCisgICAgICAgICAgICsgNCAqIHNpemVvZih2b2lkKik7CisjZW5kaWYKKworI2lmZGVmIFVTRV9TU1NFMworICBpZiAoY3R4LT51c2Vfc3NzZTMpCisgICAgcmV0dXJuIF9nY3J5X3NoYTUxMl90cmFuc2Zvcm1fYW1kNjRfc3NzZTMgKGRhdGEsICZjdHgtPnN0YXRlLCAxKQorICAgICAgICAgICArIDQgKiBzaXplb2Yodm9pZCopOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQVJNX05FT05fQVNNCisgIGlmIChjdHgtPnVzZV9uZW9uKQorICAgIHsKKyAgICAgIF9nY3J5X3NoYTUxMl90cmFuc2Zvcm1fYXJtdjdfbmVvbiAoJmN0eC0+c3RhdGUsIGRhdGEsIGspOworCisgICAgICAvKiBfZ2NyeV9zaGE1MTJfdHJhbnNmb3JtX2FybXY3X25lb24gZG9lcyBub3Qgc3RvcmUgc2Vuc2l0aXZlIGRhdGEKKyAgICAgICAqIHRvIHN0YWNrLiAgKi8KKyAgICAgIHJldHVybiAvKiBubyBidXJuX3N0YWNrICovIDA7CisgICAgfQorI2VuZGlmCisKKyAgcmV0dXJuIF9fdHJhbnNmb3JtICgmY3R4LT5zdGF0ZSwgZGF0YSkgKyAzICogc2l6ZW9mKHZvaWQqKTsKK30KKworCisvKiBUaGUgcm91dGluZSBmaW5hbCB0ZXJtaW5hdGVzIHRoZSBjb21wdXRhdGlvbiBhbmQKKyAqIHJldHVybnMgdGhlIGRpZ2VzdC4KKyAqIFRoZSBoYW5kbGUgaXMgcHJlcGFyZWQgZm9yIGEgbmV3IGN5Y2xlLCBidXQgYWRkaW5nIGJ5dGVzIHRvIHRoZQorICogaGFuZGxlIHdpbGwgdGhlIGRlc3Ryb3kgdGhlIHJldHVybmVkIGJ1ZmZlci4KKyAqIFJldHVybnM6IDY0IGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgZGlnZXN0LiAgV2hlbiB1c2VkIGZvciBzaGEzODQsCisgKiB3ZSB0YWtlIHRoZSBsZWZ0bW9zdCA0OCBvZiB0aG9zZSBieXRlcy4KKyAqLworCitzdGF0aWMgdm9pZAorc2hhNTEyX2ZpbmFsICh2b2lkICpjb250ZXh0KQoreworICBTSEE1MTJfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworICB1bnNpZ25lZCBpbnQgc3RhY2tfYnVybl9kZXB0aDsKKyAgdTY0IHQsIHRoLCBtc2IsIGxzYjsKKyAgYnl0ZSAqcDsKKworICBfZ2NyeV9tZF9ibG9ja193cml0ZSAoY29udGV4dCwgTlVMTCwgMCk7IC8qIGZsdXNoICovIDsKKworICB0ID0gaGQtPmJjdHgubmJsb2NrczsKKyAgLyogaWYgKHNpemVvZiB0ID09IHNpemVvZiBoZC0+YmN0eC5uYmxvY2tzKSAqLworICB0aCA9IGhkLT5iY3R4Lm5ibG9ja3NfaGlnaDsKKyAgLyogZWxzZSAqLworICAvKiAgIHRoID0gaGQtPmJjdHgubmJsb2NrcyA+PiA2NDsgSW4gY2FzZSB3ZSBldmVyIHVzZSB1MTI4ICAqLworCisgIC8qIG11bHRpcGx5IGJ5IDEyOCB0byBtYWtlIGEgYnl0ZSBjb3VudCAqLworICBsc2IgPSB0IDw8IDc7CisgIG1zYiA9ICh0aCA8PCA3KSB8ICh0ID4+IDU3KTsKKyAgLyogYWRkIHRoZSBjb3VudCAqLworICB0ID0gbHNiOworICBpZiAoKGxzYiArPSBoZC0+YmN0eC5jb3VudCkgPCB0KQorICAgIG1zYisrOworICAvKiBtdWx0aXBseSBieSA4IHRvIG1ha2UgYSBiaXQgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgbHNiIDw8PSAzOworICBtc2IgPDw9IDM7CisgIG1zYiB8PSB0ID4+IDYxOworCisgIGlmIChoZC0+YmN0eC5jb3VudCA8IDExMikKKyAgICB7CQkJCS8qIGVub3VnaCByb29tICovCisgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAweDgwOwkvKiBwYWQgKi8KKyAgICAgIHdoaWxlIChoZC0+YmN0eC5jb3VudCA8IDExMikKKyAgICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMDsJLyogcGFkICovCisgICAgfQorICBlbHNlCisgICAgewkJCQkvKiBuZWVkIG9uZSBleHRyYSBibG9jayAqLworICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gMHg4MDsJLyogcGFkIGNoYXJhY3RlciAqLworICAgICAgd2hpbGUgKGhkLT5iY3R4LmNvdW50IDwgMTI4KQorICAgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSAwOworICAgICAgX2djcnlfbWRfYmxvY2tfd3JpdGUgKGNvbnRleHQsIE5VTEwsIDApOyAvKiBmbHVzaCAqLyA7CisgICAgICBtZW1zZXQgKGhkLT5iY3R4LmJ1ZiwgMCwgMTEyKTsJLyogZmlsbCBuZXh0IGJsb2NrIHdpdGggemVyb2VzICovCisgICAgfQorICAvKiBhcHBlbmQgdGhlIDEyOCBiaXQgY291bnQgKi8KKyAgYnVmX3B1dF9iZTY0KGhkLT5iY3R4LmJ1ZiArIDExMiwgbXNiKTsKKyAgYnVmX3B1dF9iZTY0KGhkLT5iY3R4LmJ1ZiArIDEyMCwgbHNiKTsKKyAgc3RhY2tfYnVybl9kZXB0aCA9IHRyYW5zZm9ybSAoaGQsIGhkLT5iY3R4LmJ1Zik7CisgIF9nY3J5X2J1cm5fc3RhY2sgKHN0YWNrX2J1cm5fZGVwdGgpOworCisgIHAgPSBoZC0+YmN0eC5idWY7CisjZGVmaW5lIFgoYSkgZG8geyAqKHU2NCopcCA9IGJlX2Jzd2FwNjQoaGQtPnN0YXRlLmgjI2EpIDsgcCArPSA4OyB9IHdoaWxlICgwKQorICBYICgwKTsKKyAgWCAoMSk7CisgIFggKDIpOworICBYICgzKTsKKyAgWCAoNCk7CisgIFggKDUpOworICAvKiBOb3RlIHRoYXQgdGhlc2UgbGFzdCB0d28gY2h1bmtzIGFyZSBpbmNsdWRlZCBldmVuIGZvciBTSEEzODQuCisgICAgIFdlIGp1c3QgaWdub3JlIHRoZW0uICovCisgIFggKDYpOworICBYICg3KTsKKyN1bmRlZiBYCit9CisKK3N0YXRpYyBieXRlICoKK3NoYTUxMl9yZWFkICh2b2lkICpjb250ZXh0KQoreworICBTSEE1MTJfQ09OVEVYVCAqaGQgPSAoU0hBNTEyX0NPTlRFWFQgKikgY29udGV4dDsKKyAgcmV0dXJuIGhkLT5iY3R4LmJ1ZjsKK30KKworCisMCisvKgorICAgICBTZWxmLXRlc3Qgc2VjdGlvbi4KKyAqLworCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTM4NCAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworCisgIHdoYXQgPSAic2hvcnQgc3RyaW5nIjsKKyAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAoR0NSWV9NRF9TSEEzODQsIDAsCisgICAgICJhYmMiLCAzLAorICAgICAiXHhjYlx4MDBceDc1XHgzZlx4NDVceGEzXHg1ZVx4OGJceGI1XHhhMFx4M2RceDY5XHg5YVx4YzZceDUwXHgwNyIKKyAgICAgIlx4MjdceDJjXHgzMlx4YWJceDBlXHhkZVx4ZDFceDYzXHgxYVx4OGJceDYwXHg1YVx4NDNceGZmXHg1Ylx4ZWQiCisgICAgICJceDgwXHg4Nlx4MDdceDJiXHhhMVx4ZTdceGNjXHgyM1x4NThceGJhXHhlY1x4YTFceDM0XHhjOFx4MjVceGE3IiwgNDgpOworICBpZiAoZXJydHh0KQorICAgIGdvdG8gZmFpbGVkOworCisgIGlmIChleHRlbmRlZCkKKyAgICB7CisgICAgICB3aGF0ID0gImxvbmcgc3RyaW5nIjsKKyAgICAgIGVycnR4dCA9IF9nY3J5X2hhc2hfc2VsZnRlc3RfY2hlY2tfb25lCisgICAgICAgIChHQ1JZX01EX1NIQTM4NCwgMCwKKyAgICAgICAgICJhYmNkZWZnaGJjZGVmZ2hpY2RlZmdoaWpkZWZnaGlqa2VmZ2hpamtsZmdoaWprbG1naGlqa2xtbiIKKyAgICAgICAgICJoaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsIDExMiwKKyAgICAgICAgICJceDA5XHgzM1x4MENceDMzXHhGN1x4MTFceDQ3XHhFOFx4M0RceDE5XHgyRlx4QzdceDgyXHhDRFx4MUJceDQ3IgorICAgICAgICAgIlx4NTNceDExXHgxQlx4MTdceDNCXHgzQlx4MDVceEQyXHgyRlx4QTBceDgwXHg4Nlx4RTNceEIwXHhGN1x4MTIiCisgICAgICAgICAiXHhGQ1x4QzdceEM3XHgxQVx4NTVceDdFXHgyRFx4QjlceDY2XHhDM1x4RTlceEZBXHg5MVx4NzRceDYwXHgzOSIsCisgICAgICAgICA0OCk7CisgICAgICBpZiAoZXJydHh0KQorICAgICAgICBnb3RvIGZhaWxlZDsKKworICAgICAgd2hhdCA9ICJvbmUgbWlsbGlvbiBcImFcIiI7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorICAgICAgICAoR0NSWV9NRF9TSEEzODQsIDEsCisgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgIlx4OURceDBFXHgxOFx4MDlceDcxXHg2NFx4NzRceENCXHgwOFx4NkVceDgzXHg0RVx4MzFceDBBXHg0QVx4MUMiCisgICAgICAgICAiXHhFRFx4MTRceDlFXHg5Q1x4MDBceEYyXHg0OFx4NTJceDc5XHg3Mlx4Q0VceEM1XHg3MFx4NENceDJBXHg1QiIKKyAgICAgICAgICJceDA3XHhCOFx4QjNceERDXHgzOFx4RUNceEM0XHhFQlx4QUVceDk3XHhERFx4RDhceDdGXHgzRFx4ODlceDg1IiwKKyAgICAgICAgIDQ4KTsKKyAgICAgIGlmIChlcnJ0eHQpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICByZXR1cm4gMDsgLyogU3VjY2VlZGVkLiAqLworCisgZmFpbGVkOgorICBpZiAocmVwb3J0KQorICAgIHJlcG9ydCAoImRpZ2VzdCIsIEdDUllfTURfU0hBMzg0LCB3aGF0LCBlcnJ0eHQpOworICByZXR1cm4gR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQ7Cit9CisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorc2VsZnRlc3RzX3NoYTUxMiAoaW50IGV4dGVuZGVkLCBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCkKK3sKKyAgY29uc3QgY2hhciAqd2hhdDsKKyAgY29uc3QgY2hhciAqZXJydHh0OworCisgIHdoYXQgPSAic2hvcnQgc3RyaW5nIjsKKyAgZXJydHh0ID0gX2djcnlfaGFzaF9zZWxmdGVzdF9jaGVja19vbmUKKyAgICAoR0NSWV9NRF9TSEE1MTIsIDAsCisgICAgICJhYmMiLCAzLAorICAgICAiXHhERFx4QUZceDM1XHhBMVx4OTNceDYxXHg3QVx4QkFceENDXHg0MVx4NzNceDQ5XHhBRVx4MjBceDQxXHgzMSIKKyAgICAgIlx4MTJceEU2XHhGQVx4NEVceDg5XHhBOVx4N0VceEEyXHgwQVx4OUVceEVFXHhFNlx4NEJceDU1XHhEM1x4OUEiCisgICAgICJceDIxXHg5Mlx4OTlceDJBXHgyN1x4NEZceEMxXHhBOFx4MzZceEJBXHgzQ1x4MjNceEEzXHhGRVx4RUJceEJEIgorICAgICAiXHg0NVx4NERceDQ0XHgyM1x4NjRceDNDXHhFOFx4MEVceDJBXHg5QVx4QzlceDRGXHhBNVx4NENceEE0XHg5RiIsIDY0KTsKKyAgaWYgKGVycnR4dCkKKyAgICBnb3RvIGZhaWxlZDsKKworICBpZiAoZXh0ZW5kZWQpCisgICAgeworICAgICAgd2hhdCA9ICJsb25nIHN0cmluZyI7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorICAgICAgICAoR0NSWV9NRF9TSEE1MTIsIDAsCisgICAgICAgICAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW4iCisgICAgICAgICAiaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiLCAxMTIsCisgICAgICAgICAiXHg4RVx4OTVceDlCXHg3NVx4REFceEUzXHgxM1x4REFceDhDXHhGNFx4RjdceDI4XHgxNFx4RkNceDE0XHgzRiIKKyAgICAgICAgICJceDhGXHg3N1x4NzlceEM2XHhFQlx4OUZceDdGXHhBMVx4NzJceDk5XHhBRVx4QURceEI2XHg4OFx4OTBceDE4IgorICAgICAgICAgIlx4NTBceDFEXHgyOFx4OUVceDQ5XHgwMFx4RjdceEU0XHgzM1x4MUJceDk5XHhERVx4QzRceEI1XHg0M1x4M0EiCisgICAgICAgICAiXHhDN1x4RDNceDI5XHhFRVx4QjZceEREXHgyNlx4NTRceDVFXHg5Nlx4RTVceDVCXHg4N1x4NEJceEU5XHgwOSIsCisgICAgICAgICA2NCk7CisgICAgICBpZiAoZXJydHh0KQorICAgICAgICBnb3RvIGZhaWxlZDsKKworICAgICAgd2hhdCA9ICJvbmUgbWlsbGlvbiBcImFcIiI7CisgICAgICBlcnJ0eHQgPSBfZ2NyeV9oYXNoX3NlbGZ0ZXN0X2NoZWNrX29uZQorICAgICAgICAoR0NSWV9NRF9TSEE1MTIsIDEsCisgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgIlx4RTdceDE4XHg0OFx4M0RceDBDXHhFN1x4NjlceDY0XHg0RVx4MkVceDQyXHhDN1x4QkNceDE1XHhCNFx4NjMiCisgICAgICAgICAiXHg4RVx4MUZceDk4XHhCMVx4M0JceDIwXHg0NFx4MjhceDU2XHgzMlx4QThceDAzXHhBRlx4QTlceDczXHhFQiIKKyAgICAgICAgICJceERFXHgwRlx4RjJceDQ0XHg4N1x4N0VceEE2XHgwQVx4NENceEIwXHg0M1x4MkNceEU1XHg3N1x4QzNceDFCIgorICAgICAgICAgIlx4RUJceDAwXHg5Q1x4NUNceDJDXHg0OVx4QUFceDJFXHg0RVx4QURceEIyXHgxN1x4QURceDhDXHhDMFx4OUIiLAorICAgICAgICAgNjQpOworICAgICAgaWYgKGVycnR4dCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgIHJldHVybiAwOyAvKiBTdWNjZWVkZWQuICovCisKKyBmYWlsZWQ6CisgIGlmIChyZXBvcnQpCisgICAgcmVwb3J0ICgiZGlnZXN0IiwgR0NSWV9NRF9TSEE1MTIsIHdoYXQsIGVycnR4dCk7CisgIHJldHVybiBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKK30KKworCisvKiBSdW4gYSBmdWxsIHNlbGYtdGVzdCBmb3IgQUxHTyBhbmQgcmV0dXJuIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK3J1bl9zZWxmdGVzdHMgKGludCBhbGdvLCBpbnQgZXh0ZW5kZWQsIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBncGdfZXJyX2NvZGVfdCBlYzsKKworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgR0NSWV9NRF9TSEEzODQ6CisgICAgICBlYyA9IHNlbGZ0ZXN0c19zaGEzODQgKGV4dGVuZGVkLCByZXBvcnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ1JZX01EX1NIQTUxMjoKKyAgICAgIGVjID0gc2VsZnRlc3RzX3NoYTUxMiAoZXh0ZW5kZWQsIHJlcG9ydCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZWMgPSBHUEdfRVJSX0RJR0VTVF9BTEdPOworICAgICAgYnJlYWs7CisKKyAgICB9CisgIHJldHVybiBlYzsKK30KKworCisKKwwKK3N0YXRpYyBieXRlIHNoYTUxMl9hc25bXSA9CS8qIE9iamVjdCBJRCBpcyAyLjE2Ljg0MC4xLjEwMS4zLjQuMi4zICovCisgIHsKKyAgICAweDMwLCAweDUxLCAweDMwLCAweDBkLCAweDA2LCAweDA5LCAweDYwLCAweDg2LAorICAgIDB4NDgsIDB4MDEsIDB4NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDMsIDB4MDUsCisgICAgMHgwMCwgMHgwNCwgMHg0MAorICB9OworCitzdGF0aWMgZ2NyeV9tZF9vaWRfc3BlY190IG9pZF9zcGVjX3NoYTUxMltdID0KKyAgeworICAgIHsgIjIuMTYuODQwLjEuMTAxLjMuNC4yLjMiIH0sCisKKyAgICAvKiBQS0NTIzEgc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24gKi8KKyAgICB7ICIxLjIuODQwLjExMzU0OS4xLjEuMTMiIH0sCisKKyAgICB7IE5VTEwgfQorICB9OworCitnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGE1MTIgPQorICB7CisgICAgR0NSWV9NRF9TSEE1MTIsIHswLCAxfSwKKyAgICAiU0hBNTEyIiwgc2hhNTEyX2FzbiwgRElNIChzaGE1MTJfYXNuKSwgb2lkX3NwZWNfc2hhNTEyLCA2NCwKKyAgICBzaGE1MTJfaW5pdCwgX2djcnlfbWRfYmxvY2tfd3JpdGUsIHNoYTUxMl9maW5hbCwgc2hhNTEyX3JlYWQsCisgICAgc2l6ZW9mIChTSEE1MTJfQ09OVEVYVCksCisgICAgcnVuX3NlbGZ0ZXN0cworICB9OworCitzdGF0aWMgYnl0ZSBzaGEzODRfYXNuW10gPQkvKiBPYmplY3QgSUQgaXMgMi4xNi44NDAuMS4xMDEuMy40LjIuMiAqLworICB7CisgICAgMHgzMCwgMHg0MSwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwKKyAgICAweDQ4LCAweDAxLCAweDY1LCAweDAzLCAweDA0LCAweDAyLCAweDAyLCAweDA1LAorICAgIDB4MDAsIDB4MDQsIDB4MzAKKyAgfTsKKworc3RhdGljIGdjcnlfbWRfb2lkX3NwZWNfdCBvaWRfc3BlY19zaGEzODRbXSA9CisgIHsKKyAgICB7ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMi4yIiB9LAorCisgICAgLyogUEtDUyMxIHNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uICovCisgICAgeyAiMS4yLjg0MC4xMTM1NDkuMS4xLjEyIiB9LAorCisgICAgeyBOVUxMIH0sCisgIH07CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTM4NCA9CisgIHsKKyAgICBHQ1JZX01EX1NIQTM4NCwgezAsIDF9LAorICAgICJTSEEzODQiLCBzaGEzODRfYXNuLCBESU0gKHNoYTM4NF9hc24pLCBvaWRfc3BlY19zaGEzODQsIDQ4LAorICAgIHNoYTM4NF9pbml0LCBfZ2NyeV9tZF9ibG9ja193cml0ZSwgc2hhNTEyX2ZpbmFsLCBzaGE1MTJfcmVhZCwKKyAgICBzaXplb2YgKFNIQTUxMl9DT05URVhUKSwKKyAgICBydW5fc2VsZnRlc3RzCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvc3RyaWJvZy5jIGIvY2lwaGVyL3N0cmlib2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTdiNjRhCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3N0cmlib2cuYwpAQCAtMCwwICsxLDEzMjMgQEAKKy8qIHN0cmlib2cuYyAtIEdPU1QgUiAzNC4xMS0yMDEyIChTdHJpYm9nKSBoYXNoIGZ1bmN0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJiaXRoZWxwLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImhhc2gtY29tbW9uLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZ2NyeV9tZF9ibG9ja19jdHhfdCBiY3R4OworICB1bmlvbgorICB7CisgICAgdTY0IGhbOF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRbNjRdOworICB9OworICB1NjQgTls4XTsKKyAgdTY0IFNpZ21hWzhdOworfSBTVFJJQk9HX0NPTlRFWFQ7CisKKworLyogUHJlLWNvbXB1dGVkIHJlc3VsdHMgb2YgbXVsdGlwbGljYXRpb24gb2YgYnl0ZXMgb24gQSBhbmQgcmVvcmRlcmVkIHdpdGgKKyAgIFBpW10uICovCitzdGF0aWMgY29uc3QgdTY0IHN0cmlib2dfdGFibGVbOF1bMjU2XSA9Cit7CisgIC8qIDAgKi8KKyAgeyBVNjRfQygweGQwMWY3MTViNWM3ZWY4ZTYpLCBVNjRfQygweDE2ZmEyNDA5ODA3NzgzMjUpLAorICAgIFU2NF9DKDB4YThhNDJlODU3ZWUwNDljOCksIFU2NF9DKDB4NmFjMTA2OGZhMTg2NDY1YiksCisgICAgVTY0X0MoMHg2ZTQxN2JkN2EyZTkzMjBiKSwgVTY0X0MoMHg2NjVjODE2N2E0MzdkYWFiKSwKKyAgICBVNjRfQygweDc2NjY2ODFhYTg5NjE3ZjYpLCBVNjRfQygweDRiOTU5MTYzNzAwYmRjZjUpLAorICAgIFU2NF9DKDB4ZjE0YmU2Yjc4ZGYzNjI0OCksIFU2NF9DKDB4YzU4NWJkNjg5YTYyNWNmZiksCisgICAgVTY0X0MoMHg5NTU3ZDdmY2E2N2Q4MmNiKSwgVTY0X0MoMHg4OWYwYjk2OWFmNmRkMzY2KSwKKyAgICBVNjRfQygweGIwODMzZDQ4NzQ5ZjZjMzUpLCBVNjRfQygweGExOTk4YzIzYjFlY2JjN2MpLAorICAgIFU2NF9DKDB4OGQ3MGM0MzFhYzAyYTczNiksIFU2NF9DKDB4ZDZkZmJjMmZkMGE4YjY5ZSksCisgICAgVTY0X0MoMHgzN2FlYjNlNTUxZmExOThiKSwgVTY0X0MoMHgwYjdkMTI4YTQwYjVjZjljKSwKKyAgICBVNjRfQygweDVhOGYyMDA4YjU3ODBjYmMpLCBVNjRfQygweGVkZWM4ODIyODRlMzMzZTUpLAorICAgIFU2NF9DKDB4ZDI1ZmMxNzdkM2M3YzJjZSksIFU2NF9DKDB4NWUwZjVkNTBiNjE3NzhlYyksCisgICAgVTY0X0MoMHgxZDg3MzY4M2MwYzI0Y2I5KSwgVTY0X0MoMHhhZDA0MGJjYmI0NWQyMDhjKSwKKyAgICBVNjRfQygweDJmODlhMDI4NWI4NTNjNzYpLCBVNjRfQygweDU3MzJmZmY2NzkxYjhkNTgpLAorICAgIFU2NF9DKDB4M2U5MzExNDM5ZWY2ZWMzZiksIFU2NF9DKDB4YzkxODNhODA5ZmQzYzAwZiksCisgICAgVTY0X0MoMHg4M2FkZjNmNTI2MGEwMWVlKSwgVTY0X0MoMHhhNjc5MTk0MWY0ZThlZjEwKSwKKyAgICBVNjRfQygweDEwM2FlOTdkMGNhMWNkNWQpLCBVNjRfQygweDJjZTk0ODEyMWRlZTFiNGEpLAorICAgIFU2NF9DKDB4Mzk3Mzg0MjFkYmYyYmY1MyksIFU2NF9DKDB4MDkzZGEyYTZjZjBjZjViNCksCisgICAgVTY0X0MoMHhjZDk4NDdkODljYmNiNDVmKSwgVTY0X0MoMHhmOTU2MWMwNzhiMmQ4YWU4KSwKKyAgICBVNjRfQygweDljNmE3NTVhNjk3MTc3N2YpLCBVNjRfQygweGJjMWViYWEwNzEyZWYwYzUpLAorICAgIFU2NF9DKDB4NzJlNjE1NDJhYmY5NjNhNiksIFU2NF9DKDB4NzhiYjVmZGUyMjllYjEyZSksCisgICAgVTY0X0MoMHgxNGJhOTQyNTBmY2ViOTBkKSwgVTY0X0MoMHg4NDRkNjY5NzYzMGU1MjgyKSwKKyAgICBVNjRfQygweDk4ZWEwODAyNmExZTAzMmYpLCBVNjRfQygweGYwNmJiZWExNDQyMTdmNWMpLAorICAgIFU2NF9DKDB4ZGI2MjYzZDExY2NiMzc3YSksIFU2NF9DKDB4NjQxYzMxNGIyYjhlZTA4MyksCisgICAgVTY0X0MoMHgzMjBlOTZhYjliNDc3MGNmKSwgVTY0X0MoMHgxZWU3ZGViOTg2YTk2Yjg1KSwKKyAgICBVNjRfQygweGU5NmNmNTdhODc4YzQ3YjUpLCBVNjRfQygweGZkZDY2MTVmODg0MmZlYjgpLAorICAgIFU2NF9DKDB4YzgzODYyOTY1NjAxZGQxYiksIFU2NF9DKDB4MmVhOWY4M2U5MjU3MjE2MiksCisgICAgVTY0X0MoMHhmODc2NDQxMTQyZmY5N2ZjKSwgVTY0X0MoMHhlYjJjNDU1NjA4MzU3ZDlkKSwKKyAgICBVNjRfQygweDU2MTJhN2UwYjBjOTkwNGMpLCBVNjRfQygweDZjMDFjYmZiMmQ1MDA4MjMpLAorICAgIFU2NF9DKDB4NDU0OGE2YTdmYTAzN2EyZCksIFU2NF9DKDB4YWJjNGM2YmYzODhiNmVmNCksCisgICAgVTY0X0MoMHhiYWRlNzdkNGZkZjhiZWJkKSwgVTY0X0MoMHg3OTliMDdjOGViNGNhYzNhKSwKKyAgICBVNjRfQygweDBjOWQ4N2U4MDViMTljZjApLCBVNjRfQygweGNiNTg4YWFjMTA2YWZhMjcpLAorICAgIFU2NF9DKDB4ZWEwYzFkNDBjMWU3NjA4OSksIFU2NF9DKDB4Mjg2OTM1NGExZTgxNmYxYSksCisgICAgVTY0X0MoMHhmZjk2ZDE3MzA3ZmJjNDkwKSwgVTY0X0MoMHg5ZjBhOWQ2MDJmMWE1MDQzKSwKKyAgICBVNjRfQygweDk2MzczZmM2ZTAxNmE1ZjcpLCBVNjRfQygweDUyOTJkYWI4YjNhNmU0MWMpLAorICAgIFU2NF9DKDB4OWI4YWUwMzgyYzc1MjQxMyksIFU2NF9DKDB4NGYxNWVjM2I3MzY0YThhNSksCisgICAgVTY0X0MoMHgzZmIzNDk1NTU3MjRmMTJiKSwgVTY0X0MoMHhjN2M1MGQ0NDE1ZGI2NmQ3KSwKKyAgICBVNjRfQygweDkyYjc0MjllZTM3OWQxYTcpLCBVNjRfQygweGQzN2Y5OTYxMWExNWRmZGEpLAorICAgIFU2NF9DKDB4MjMxNDI3YzA1ZTM0YTA4NiksIFU2NF9DKDB4YTQzOWE5NmQ3YjUxZDUzOCksCisgICAgVTY0X0MoMHhiNDAzNDAxMDc3ZjAxODY1KSwgVTY0X0MoMHhkZGEyYWVhNTkwMWQ3OTAyKSwKKyAgICBVNjRfQygweDBhNWQ0YTljODk2N2QyODgpLCBVNjRfQygweGMyNjUyODBhZGY2NjBmOTMpLAorICAgIFU2NF9DKDB4OGJiMDA5NDUyMGQ0ZTk0ZSksIFU2NF9DKDB4MmEyOTg1NjY5MTM4NTUzMiksCisgICAgVTY0X0MoMHg0MmE4MzNjNWJmMDcyOTQxKSwgVTY0X0MoMHg3M2M2NGQ1NDYyMmI3ZWIyKSwKKyAgICBVNjRfQygweDA3ZTA5NTYyNDUwNDUzNmMpLCBVNjRfQygweDhhOTA1MTUzZTkwNmY0NWEpLAorICAgIFU2NF9DKDB4NmY2MTIzYzE2YjNiMmYxZiksIFU2NF9DKDB4YzZlNTU1NTJkYzA5N2JjMyksCisgICAgVTY0X0MoMHg0NDY4ZmViMTMzZDE2NzM5KSwgVTY0X0MoMHhlMjExZTdmMGM3Mzk4ODI5KSwKKyAgICBVNjRfQygweGEyZjk2NDE5Zjc4NzliNDApLCBVNjRfQygweDE5MDc0YmRiYzNhZDM4ZTkpLAorICAgIFU2NF9DKDB4ZjRlYmMzZjk0NzRlMGIwYyksIFU2NF9DKDB4NDM4ODZiZDM3NmQ1MzQ1NSksCisgICAgVTY0X0MoMHhkODAyOGJlYjVhYTAxMDQ2KSwgVTY0X0MoMHg1MWYyMzI4MmY1Y2RjMzIwKSwKKyAgICBVNjRfQygweGU3YjFjMmJlMGQ4NGUxNmQpLCBVNjRfQygweDA4MWRmYWIwMDZkZWU4YTApLAorICAgIFU2NF9DKDB4M2IzMzM0MGQ1NDRiODU3YiksIFU2NF9DKDB4N2Y1YmNhYmM2NzlhZTI0MiksCisgICAgVTY0X0MoMHgwZWRkMzdjNDhhMDhhNmQ4KSwgVTY0X0MoMHg4MWVkNDNkOWE5YjMzYmM2KSwKKyAgICBVNjRfQygweGIxYTM2NTVlYmQ0ZDcxMjEpLCBVNjRfQygweDY5YTFlZWI1ZTdlZDYxNjcpLAorICAgIFU2NF9DKDB4ZjZhYjczZDVjOGY3MzEyNCksIFU2NF9DKDB4MWE2N2EzZTE4NWM2MWZkNSksCisgICAgVTY0X0MoMHgyZGM5MTAwNGQ0M2MwNjVlKSwgVTY0X0MoMHgwMjQwYjAyYzhmYjkzYTI4KSwKKyAgICBVNjRfQygweDkwZjdmMmIyNmNjMGViOGYpLCBVNjRfQygweDNjZDNhMTZmMTE0ZmQ2MTcpLAorICAgIFU2NF9DKDB4YWFlNDllYTlmMTU5NzNlMCksIFU2NF9DKDB4MDZjMGNkNzQ4Y2Q2NGU3OCksCisgICAgVTY0X0MoMHhkYTQyM2JjN2Q1MTkyYTZlKSwgVTY0X0MoMHhjMzQ1NzAxYzE2YjQxMjg3KSwKKyAgICBVNjRfQygweDZkMjE5M2VkZTQ4MjE1MzcpLCBVNjRfQygweGZjZjYzOTQ5NDE5MGUzYWMpLAorICAgIFU2NF9DKDB4N2MzYjIyODYyMWYxYzU3ZSksIFU2NF9DKDB4ZmIxNmFjMmIwNDk0YjBjMCksCisgICAgVTY0X0MoMHhiZjdlNTI5YTM3NDVkN2Y5KSwgVTY0X0MoMHg2ODgxYjZhMzJlM2Y3YzczKSwKKyAgICBVNjRfQygweGNhNzhkMmJhZDliOGU3MzMpLCBVNjRfQygweGJiZmUyZmMyMzQyYWEzYTkpLAorICAgIFU2NF9DKDB4MGRiZGRmZmVjYzYzODFlNCksIFU2NF9DKDB4NzBhNmE1NmUyNDQwNTk4ZSksCisgICAgVTY0X0MoMHhlNGQxMmE4NDRiZWZjNjUxKSwgVTY0X0MoMHg4YzUwOWMyNzY1ZDBiYTIyKSwKKyAgICBVNjRfQygweGVlOGM2MDE4YzI4ODE0ZDkpLCBVNjRfQygweDE3ZGE3YzFmNDlhNTllMzEpLAorICAgIFU2NF9DKDB4NjA5YzRjMTMyOGUxOTRkMyksIFU2NF9DKDB4YjNlM2Q1NzIzMmY0NGIwOSksCisgICAgVTY0X0MoMHg5MWQ3YWFhNGE1MTJmNjliKSwgVTY0X0MoMHgwZmZkNmZkMjQzZGFiYmNjKSwKKyAgICBVNjRfQygweDUwZDI2YTk0M2MxZmRlMzQpLCBVNjRfQygweDZiZTE1ZTk5Njg1NDViNGYpLAorICAgIFU2NF9DKDB4OTQ3NzhmZWE2ZmFmOWZkZiksIFU2NF9DKDB4MmIwOWRkNzA1OGVhNDgyNiksCisgICAgVTY0X0MoMHg2NzdjZDk3MTZkZTVjN2JmKSwgVTY0X0MoMHg0OWQ1MjE0ZmZmYjJlNmRkKSwKKyAgICBVNjRfQygweDAzNjBlODNhNDY2YjI3M2MpLCBVNjRfQygweDFmYzc4NmFmNGY3Yjc2OTEpLAorICAgIFU2NF9DKDB4YTBiOWQ0MzU3ODNlYTE2OCksIFU2NF9DKDB4ZDQ5ZjBjMDM1ZjExOGNiNiksCisgICAgVTY0X0MoMHgwMTIwNTgxNmM5ZDIxZDE0KSwgVTY0X0MoMHhhYzI0NTNkZDdkOGYzZDk4KSwKKyAgICBVNjRfQygweDU0NTIxN2NjM2Y3MGFhNjQpLCBVNjRfQygweDI2YjQwMjhlOTQ4OWM5YzIpLAorICAgIFU2NF9DKDB4ZGVjMjQ2OWZkNjc2NWUzZSksIFU2NF9DKDB4MDQ4MDdkNTgwMzZmNzQ1MCksCisgICAgVTY0X0MoMHhlNWYxNzI5MjgyM2RkYjQ1KSwgVTY0X0MoMHhmMzBiNTY5YjAyNGE1ODYwKSwKKyAgICBVNjRfQygweDYyZGNmYzNmYTc1OGFlZmIpLCBVNjRfQygweGU4NGNhZDZjNGU1ZTVhYTEpLAorICAgIFU2NF9DKDB4Y2NiODFmY2U1NTZlYTk0YiksIFU2NF9DKDB4NTNiMjgyYWU3YTc0ZjkwOCksCisgICAgVTY0X0MoMHgxYjQ3ZmJmNzRjMTQwMmMxKSwgVTY0X0MoMHgzNjhlZWJmMzk4MjgwNDlmKSwKKyAgICBVNjRfQygweDdhZmJlZmYyYWQyNzhiMDYpLCBVNjRfQygweGJlNWUwYThjZmU5N2NhZWQpLAorICAgIFU2NF9DKDB4Y2ZkOGY3ZjQxMzA1OGU3NyksIFU2NF9DKDB4Zjc4YjJiYzMwMTI1MmMzMCksCisgICAgVTY0X0MoMHg0ZDU1NWMxN2ZjZGQ5MjhkKSwgVTY0X0MoMHg1ZjJmMDU0NjdmYzU2NWY4KSwKKyAgICBVNjRfQygweDI0ZjRiMmEyMWIzMGYzZWEpLCBVNjRfQygweDg2MGRkNmJiZWNiNzY4YWEpLAorICAgIFU2NF9DKDB4NGM3NTA0MDEzNTBmOGY5OSksIFU2NF9DKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MoMHhlY2NjZDAzNDRkMzEyZWYxKSwgVTY0X0MoMHhiNTIzMTgwNmJlMjIwNTcxKSwKKyAgICBVNjRfQygweGMxMDVjMDMwOTkwZDI4YWYpLCBVNjRfQygweDY1M2M2OTVkZTI1Y2ZkOTcpLAorICAgIFU2NF9DKDB4MTU5YWNjMzNjNjFjYTQxOSksIFU2NF9DKDB4Yjg5ZWM3Zjg3MjQxODQ5NSksCisgICAgVTY0X0MoMHhhOTg0NzY5M2I3MzI1NGRjKSwgVTY0X0MoMHg1OGNmOTAyNDNhYzEzNjk0KSwKKyAgICBVNjRfQygweDU5ZWZjODMyZjMxMzJiODApLCBVNjRfQygweDVjNGZlZDdjMzlhZTQyYzQpLAorICAgIFU2NF9DKDB4ODI4ZGFiZTNlZmQ4MWNmYSksIFU2NF9DKDB4ZDEzZjI5NGQ5NWFjZTVmMiksCisgICAgVTY0X0MoMHg3ZDFiN2E5MGU4MjNkODZhKSwgVTY0X0MoMHhiNjQzZjAzY2Y4NDkyMjRkKSwKKyAgICBVNjRfQygweDNkZjNmOTc5ZDg5ZGNiMDMpLCBVNjRfQygweDc0MjZkODM2MjcyZjJkZGUpLAorICAgIFU2NF9DKDB4ZGZlMjFlODkxZmE0NDMyYSksIFU2NF9DKDB4M2ExMzZjMWI5ZDk5OTg2ZiksCisgICAgVTY0X0MoMHhmYTM2ZjQzZGNkNDZhZGQ0KSwgVTY0X0MoMHhjMDI1OTgyNjUwZGYzNWJiKSwKKyAgICBVNjRfQygweDg1NmQzZTgxYWFkYzRmOTYpLCBVNjRfQygweGM0YTVlNTdlNTNiMDQxZWIpLAorICAgIFU2NF9DKDB4NDcwODE2OGI3NWJhNDAwNSksIFU2NF9DKDB4YWY0NGJiZTczYmU0MWFhNCksCisgICAgVTY0X0MoMHg5NzE3NjdkMDI5YzRiOGUzKSwgVTY0X0MoMHhiOWJlOWZlZWJiOTM5OTgxKSwKKyAgICBVNjRfQygweDIxNTQ5N2VjZDE4ZDlhYWUpLCBVNjRfQygweDMxNmU3ZTkxZGQyYzU3ZjMpLAorICAgIFU2NF9DKDB4Y2VmOGFmZTJkYWQ3OTM2MyksIFU2NF9DKDB4Mzg1M2RjMzcxMjIwYTI0NyksCisgICAgVTY0X0MoMHgzNWVlMDNjOWRlNDMyM2EzKSwgVTY0X0MoMHhlNjkxOWFhOGM0NTZmYzc5KSwKKyAgICBVNjRfQygweGUwNTE1N2RjNDg4MGIyMDEpLCBVNjRfQygweDdiZGJiN2U0NjRmNTk2MTIpLAorICAgIFU2NF9DKDB4MTI3YTU5NTE4MzE4Zjc3NSksIFU2NF9DKDB4MzMyZWNlYmQ1Mjk1NmRkYiksCisgICAgVTY0X0MoMHg4ZjMwNzQxZDIzYmI5ZDFlKSwgVTY0X0MoMHhkOTIyZDNmZDkzNzIwZDUyKSwKKyAgICBVNjRfQygweDc3NDYzMDBjNjE0NDBhZTIpLCBVNjRfQygweDI1ZDRlYWI0ZDJlMmVlZmUpLAorICAgIFU2NF9DKDB4NzUwNjgwMjBlZWZkMzBjYSksIFU2NF9DKDB4MTM1YTAxNDc0YWNhZWE2MSksCisgICAgVTY0X0MoMHgzMDRlMjY4NzE0ZmU0YWU3KSwgVTY0X0MoMHhhNTE5ZjE3YmIyODNjODJjKSwKKyAgICBVNjRfQygweGRjODJmNmIzNTljZjY0MTYpLCBVNjRfQygweDViYWY3ODFlN2NhYTExYTgpLAorICAgIFU2NF9DKDB4YjJjMzhkNjRmYjI2NTYxZCksIFU2NF9DKDB4MzRjZTViZGYxNzkxM2ViNyksCisgICAgVTY0X0MoMHg1ZDZmYjU2YWYwN2M1ZmQwKSwgVTY0X0MoMHgxODI3MTNjZDBhN2YyNWZkKSwKKyAgICBVNjRfQygweDllMmFjNTc2ZTZjODRkNTcpLCBVNjRfQygweDlhYWFiODJlZTVhNzM5MDcpLAorICAgIFU2NF9DKDB4YTNkOTNjMGYzZTU1ODY1NCksIFU2NF9DKDB4N2U3YjkyYWFhZTQ4ZmY1NiksCisgICAgVTY0X0MoMHg4NzJkOGVhZDI1NjU3NWJlKSwgVTY0X0MoMHg0MWM4ZGJmZmY5NmMwZTdkKSwKKyAgICBVNjRfQygweDk5Y2E1MDE0YTNjYzFlM2IpLCBVNjRfQygweDQwZTg4M2U5MzBiZTEzNjkpLAorICAgIFU2NF9DKDB4MWNhNzZlOTUwOTEwNTFhZCksIFU2NF9DKDB4NGUzNWI0MmRiYWI2YjViMSksCisgICAgVTY0X0MoMHgwNWEwMjU0ZWNhYmQ2OTQ0KSwgVTY0X0MoMHhlMTcxMGZjYTgxNTJhZjE1KSwKKyAgICBVNjRfQygweGYyMmIwZThkY2I5ODQ1NzQpLCBVNjRfQygweGI3NjNhODJhMzE5YjNmNTkpLAorICAgIFU2NF9DKDB4NjNmY2E0Mjk2ZThhYjNlZiksIFU2NF9DKDB4OWQ0YTJkNGNhMGEzNmE2YiksCisgICAgVTY0X0MoMHhlMzMxYmZlNjBlZWI5NTNkKSwgVTY0X0MoMHhkNWJmNTQxNTk2YzM5MWEyKSwKKyAgICBVNjRfQygweGY1Y2I5YmVmOGU5YzE2MTgpLCBVNjRfQygweDQ2Mjg0ZTlkYmM2ODVkMTEpLAorICAgIFU2NF9DKDB4MjA3NGNmZmExODVmODdiYSksIFU2NF9DKDB4YmQzZWUyYjZiOGZjZWRkMSksCisgICAgVTY0X0MoMHhhZTY0ZTNmMWYyMzYwN2IwKSwgVTY0X0MoMHhmZWI2ODk2NWNlMjlkOTg0KSwKKyAgICBVNjRfQygweDU1NzI0ZmRhZjZhMmI3NzApLCBVNjRfQygweDI5NDk2ZDVjZDc1MzcyMGUpLAorICAgIFU2NF9DKDB4YTc1OTQxNTczZDNhZjIwNCksIFU2NF9DKDB4OGUxMDJjMGJlYTY5ODAwYSksCisgICAgVTY0X0MoMHgxMTFhYjE2YmM1NzNkMDQ5KSwgVTY0X0MoMHhkN2ZmZTQzOTE5N2FhYjhhKSwKKyAgICBVNjRfQygweGVmYWMzODBlMGI1YTA5Y2QpLCBVNjRfQygweDQ4ZjU3OTU5MzY2MGZiYzkpLAorICAgIFU2NF9DKDB4MjIzNDdmZDY5N2U2YmQ5MiksIFU2NF9DKDB4NjFiYzE0MDVlMTMzODljNyksCisgICAgVTY0X0MoMHg0YWI1Yzk3NWI5ZDljMWUxKSwgVTY0X0MoMHg4MGNkMWJjZjYwNjEyNmQyKSwKKyAgICBVNjRfQygweDcxODZmZDc4ZWQ5MjQ0OWEpLCBVNjRfQygweDkzOTcxYTg4MmFhYmNjYjMpLAorICAgIFU2NF9DKDB4ODhkMGUxN2Y2NmJmY2U3MiksIFU2NF9DKDB4Mjc5NDVhOTg1ZDViZDRkNikgfSwKKyAgLyogMSAqLworICB7IFU2NF9DKDB4ZGU1NTNmOGMwNWE4MTFjOCksIFU2NF9DKDB4MTkwNmI1OTYzMWI0ZjU2NSksCisgICAgVTY0X0MoMHg0MzZlNzBkNmIxOTY0ZmY3KSwgVTY0X0MoMHgzNmQzNDNjYjhiMWU5ZDg1KSwKKyAgICBVNjRfQygweDg0M2RmYWNjODU4YWFiNWEpLCBVNjRfQygweGZkZmM5NWMyOTliZmM3ZjkpLAorICAgIFU2NF9DKDB4MGY2MzRiZGVhMWQ1MWZhMiksIFU2NF9DKDB4NmQ0NThiM2I3NmVmYjNjZCksCisgICAgVTY0X0MoMHg4NWMzZjc3Y2Y4NTkzZjgwKSwgVTY0X0MoMHgzYzkxMzE1ZmJlNzM3Y2IyKSwKKyAgICBVNjRfQygweDIxNDhiMDMzNjZhY2UzOTgpLCBVNjRfQygweDE4ZjhiODI2NGM2NzYxYmYpLAorICAgIFU2NF9DKDB4YzgzMGMxYzQ5NWM5ZmIwZiksIFU2NF9DKDB4OTgxYTc2MTAyMDg2YTBhYSksCisgICAgVTY0X0MoMHhhYTE2MDEyMTQyZjM1NzYwKSwgVTY0X0MoMHgzNWNjNTQwNjBjNzYzY2Y2KSwKKyAgICBVNjRfQygweDQyOTA3ZDY2Y2M0NWRiMmQpLCBVNjRfQygweDgyMDNkNDRiOTY1YWY0YmMpLAorICAgIFU2NF9DKDB4M2Q2ZjNjZWZjM2EwZTg2OCksIFU2NF9DKDB4YmM3M2ZmNjlkMjkyYmRhNyksCisgICAgVTY0X0MoMHg4NzIyZWQwMTAyZTIwYTI5KSwgVTY0X0MoMHg4ZjgxODVlOGNkMzRkZWI3KSwKKyAgICBVNjRfQygweDliMDU2MWRkYTdlZTAxZDkpLCBVNjRfQygweDUzMzVhMDE5MzIyN2ZhZDYpLAorICAgIFU2NF9DKDB4YzljZWNjNzRlODFhNmZkNSksIFU2NF9DKDB4NTRmNTgzMmU1YzI0MzFlYSksCisgICAgVTY0X0MoMHg5OWU0N2JhMDVkNTUzNDcwKSwgVTY0X0MoMHhmN2JlZTc1NmFjZDIyNmNlKSwKKyAgICBVNjRfQygweDM4NGUwNWE1NTcxODE2ZmQpLCBVNjRfQygweGQxMzY3NDUyYTQ3ZDBlNmEpLAorICAgIFU2NF9DKDB4ZjI5ZmRlMWMzODZhZDg1YiksIFU2NF9DKDB4MzIwYzc3MzE2Mjc1ZjdjYSksCisgICAgVTY0X0MoMHhkMGM4NzllMmQ5YWU5YWIwKSwgVTY0X0MoMHhkYjc0MDZjNjkxMTBlZjVkKSwKKyAgICBVNjRfQygweDQ1NTA1ZTUxYTI0NjEwMTEpLCBVNjRfQygweGZjMDI5ODcyZTQ2YzUzMjMpLAorICAgIFU2NF9DKDB4ZmEzY2I2ZjVmN2JjMGNjNSksIFU2NF9DKDB4MDMxZjE3Y2Q4NzY4YTE3MyksCisgICAgVTY0X0MoMHhiZDhkZjJkOWFmNDEyOTdkKSwgVTY0X0MoMHg5ZDNiNGY1YWI0M2U1ZTNmKSwKKyAgICBVNjRfQygweDQwNzE2NzFiMzZmZWVlODQpLCBVNjRfQygweDcxNjIwN2U3ZDNlM2I4M2QpLAorICAgIFU2NF9DKDB4NDhkMjBmZjJmOTI4M2ExYSksIFU2NF9DKDB4Mjc3NjllYjQ3NTdjYmM3ZSksCisgICAgVTY0X0MoMHg1YzU2ZWJjNzkzZjJlNTc0KSwgVTY0X0MoMHhhNDhiNDc0ZjllZjVkYzE4KSwKKyAgICBVNjRfQygweDUyY2JhZGE5NGZmNDZlMGMpLCBVNjRfQygweDYwYzdkYTk4MmQ4MTk5YzYpLAorICAgIFU2NF9DKDB4MGU5ZDQ2NmVkYzA2OGI3OCksIFU2NF9DKDB4NGVlYzIxNzVlYWY4NjVmYyksCisgICAgVTY0X0MoMHg1NTBiOGU5ZTIxZjdhNTMwKSwgVTY0X0MoMHg2YjdiYTViYzY1M2ZlYzJiKSwKKyAgICBVNjRfQygweDVlYjdmMWJhNjk0OWQwZGQpLCBVNjRfQygweDU3ZWE5NGUzZGI0YzkwOTkpLAorICAgIFU2NF9DKDB4ZjY0MGVhZTZkMTAxYjIxNCksIFU2NF9DKDB4ZGQ0YTI4NDE4MmMwYjBiYiksCisgICAgVTY0X0MoMHhmZjFkOGZiZjYzMDRmMjUwKSwgVTY0X0MoMHhiOGFjY2I5MzNiZjlkN2U4KSwKKyAgICBVNjRfQygweGU4ODY3YzQ3OGViNjhjNGQpLCBVNjRfQygweDNmOGUyNjkyMzkxYmRkYzEpLAorICAgIFU2NF9DKDB4Y2IyZmQ2MDkxMmExNWE3YyksIFU2NF9DKDB4YWVjOTM1ZGJhYjk4M2QyZiksCisgICAgVTY0X0MoMHhmNTVmZmQyYjU2NjkxMzY3KSwgVTY0X0MoMHg4MGUyY2UzNjZjZTFjMTE1KSwKKyAgICBVNjRfQygweDE3OWJmM2Y4ZWRiMjdlMWQpLCBVNjRfQygweDAxZmUwZGIwN2RkMzk0ZGEpLAorICAgIFU2NF9DKDB4ZGE4YTBiNzZlY2MzN2I4NyksIFU2NF9DKDB4NDRhZTUzZTFkZjk1ODRjYiksCisgICAgVTY0X0MoMHhiMzEwYjRiNzczNDdhMjA1KSwgVTY0X0MoMHhkZmFiMzIzYzc4N2I4NTEyKSwKKyAgICBVNjRfQygweDNiNTExMjY4ZDA3MGI3OGUpLCBVNjRfQygweDY1ZTZlM2QyYjkzOTY3NTMpLAorICAgIFU2NF9DKDB4Njg2NGIyNzFlMjU3NGQ1OCksIFU2NF9DKDB4MjU5Nzg0Yzk4ZmM3ODlkNyksCisgICAgVTY0X0MoMHgwMmUxMWE3ZGZhYmIzNWE5KSwgVTY0X0MoMHg4ODQxYTZkZmEzMzcxNThiKSwKKyAgICBVNjRfQygweDdhZGU3OGMzOWI1ZGNkZDApLCBVNjRfQygweGI3Y2Y4MDRkOWEyY2M4NGEpLAorICAgIFU2NF9DKDB4MjBiNmJkODMxYjdmNzc0MiksIFU2NF9DKDB4NzViZDMzMWQzYTg4ZDI3MiksCisgICAgVTY0X0MoMHg0MThmNmFhYjRiMmQ3YTVlKSwgVTY0X0MoMHhkOTk1MWNiYjZiYWJkYWY0KSwKKyAgICBVNjRfQygweGI2MzE4ZGZkZTdmZjVjOTApLCBVNjRfQygweDFmMzg5YjExMjI2NGFhODMpLAorICAgIFU2NF9DKDB4NDkyYzAyNDI4NGZiYWVjMCksIFU2NF9DKDB4ZTMzYTAzNjNjNjA4ZjlhMCksCisgICAgVTY0X0MoMHgyNjg4OTMwNDA4YWYyOGE0KSwgVTY0X0MoMHhjNzUzOGExYTM0MWNlNGFkKSwKKyAgICBVNjRfQygweDVkYThlNjc3ZWUyMTcxYWUpLCBVNjRfQygweDhjOWU5MjI1NGE1YzdmYzQpLAorICAgIFU2NF9DKDB4NjNkOGNkNTVhYWU5MzhiNSksIFU2NF9DKDB4MjllYmQ4ZGFhOTdhMzcwNiksCisgICAgVTY0X0MoMHg5NTk4MjdiMzdiZTg4YWExKSwgVTY0X0MoMHgxNDg0ZTQzNTZhZGFkZjZlKSwKKyAgICBVNjRfQygweGE3OTQ1MDgyMTk5ZDdkNmIpLCBVNjRfQygweGJmNmNlOGE0NTVmYTFjZDQpLAorICAgIFU2NF9DKDB4OWNjNTQyZWFjOWVkY2FlNSksIFU2NF9DKDB4NzljMTZmMGUxYzM1NmNhMyksCisgICAgVTY0X0MoMHg4OWJmYWI2ZmRlZTQ4MTUxKSwgVTY0X0MoMHhkNDE3NGQxODMwYzVmMGZmKSwKKyAgICBVNjRfQygweDkyNTgwNDg0MTVlYjQxOWQpLCBVNjRfQygweDYxMzlkNzI4NTA1MjBkMWMpLAorICAgIFU2NF9DKDB4NmE4NWE4MGMxOGVjNzhmMSksIFU2NF9DKDB4Y2QxMWY4OGUwMTcxMDU5YSksCisgICAgVTY0X0MoMHhjY2VmZjUzZTdjYTI5MTQwKSwgVTY0X0MoMHhkMjI5NjM5ZjIzMTVhZjE5KSwKKyAgICBVNjRfQygweDkwYjkxZWY5ZWY1MDc0MzQpLCBVNjRfQygweDU5NzdkMjhkMDc0YTFiZTEpLAorICAgIFU2NF9DKDB4MzExMzYwZmNlNTFkNTZiOSksIFU2NF9DKDB4YzA5M2E5MmQ1YTFmMmY5MSksCisgICAgVTY0X0MoMHgxYTE5YTI1YmI2ZGM1NDE2KSwgVTY0X0MoMHhlYjk5NmI4YTA5ZGUyZDNlKSwKKyAgICBVNjRfQygweGZlZTM4MjBmMWVkNzY2OGEpLCBVNjRfQygweGQ3MDg1YWQ1YjdhZDUxOGMpLAorICAgIFU2NF9DKDB4N2ZmZjQxODkwZmU1MzM0NSksIFU2NF9DKDB4ZWM1OTQ4YmQ2N2RkZTYwMiksCisgICAgVTY0X0MoMHgyZmQ1ZjY1ZGJhYWE2OGUwKSwgVTY0X0MoMHhhNTc1NGFmZmUzMjY0OGMyKSwKKyAgICBVNjRfQygweGY4ZGRhYzg4MGQwNzM5NmMpLCBVNjRfQygweDZmYTQ5MTQ2OGM1NDg2NjQpLAorICAgIFU2NF9DKDB4MGM3YzVjMTMyNmJkYmVkMSksIFU2NF9DKDB4NGEzMzE1OGYwMzkzMGZiMyksCisgICAgVTY0X0MoMHg2OTlhYmZjMTlmODRkOTgyKSwgVTY0X0MoMHhlNGZhMjA1NGE4MGIzMjljKSwKKyAgICBVNjRfQygweDY3MDdmOWFmNDM4MjUyZmEpLCBVNjRfQygweDA4YTM2OGU5Y2ZkNmQ0OWUpLAorICAgIFU2NF9DKDB4NDdiMTQ0MmM1OGZkMjViOCksIFU2NF9DKDB4YmJiM2RjNWViYzkxNzY5YiksCisgICAgVTY0X0MoMHgxNjY1ZmU0ODkwNjFlYWM3KSwgVTY0X0MoMHgzM2YyN2E4MTFmYTY2MzEwKSwKKyAgICBVNjRfQygweDkzYTYwOTM0NjgzOGQ1NDcpLCBVNjRfQygweDMwZWQ2ZDRjOThjZWMyNjMpLAorICAgIFU2NF9DKDB4MWRkOTgxNmNkOGRmOWYyYSksIFU2NF9DKDB4OTQ2NjJhMDMwNjNiMWU3YiksCisgICAgVTY0X0MoMHg4M2ZkZDlmYmViODk2MDY2KSwgVTY0X0MoMHg3YjIwNzU3M2U2OGU1OTBhKSwKKyAgICBVNjRfQygweDVmNDlmYzBhMTQ5YTQ0MDcpLCBVNjRfQygweDM0MzI1OWI2NzFhNWE4MmMpLAorICAgIFU2NF9DKDB4ZmJjMmJiNDU4YTZmOTgxZiksIFU2NF9DKDB4YzI3MmIzNTBhMGE0MWEzOCksCisgICAgVTY0X0MoMHgzYWFmMWZkOGFkYTMyMzU0KSwgVTY0X0MoMHg2Y2JiODY4YjBiM2MyNzE3KSwKKyAgICBVNjRfQygweGEyYjU2OWM4OGQyNTgzZmUpLCBVNjRfQygweGYxODBjOWQxYmYwMjc5MjgpLAorICAgIFU2NF9DKDB4YWYzNzM4NmJkNjRiYTlmNSksIFU2NF9DKDB4MTJiYWNhYjI3OTBhODA4OCksCisgICAgVTY0X0MoMHg0YzBkM2IwODEwNDM1MDU1KSwgVTY0X0MoMHhiMmVlYjkwNzBlOTQzNmRmKSwKKyAgICBVNjRfQygweGM1YjI5MDY3Y2VhN2QxMDQpLCBVNjRfQygweGRjYjQyNWYxZmYxMzI0NjEpLAorICAgIFU2NF9DKDB4NGYxMjJjYzU5NzJiZjEyNiksIFU2NF9DKDB4YWMyODJmYTY1MTIzMDg4NiksCisgICAgVTY0X0MoMHhlN2U1Mzc5OTJmNjM5M2VmKSwgVTY0X0MoMHhlNjFiM2EyOTUyYjAwNzM1KSwKKyAgICBVNjRfQygweDcwOWMwYTU3YWUzMDJjZTcpLCBVNjRfQygweGUwMjUxNGFlNDE2MDU4ZDMpLAorICAgIFU2NF9DKDB4YzQ0YzlkZDdiMzc0NDVkZSksIFU2NF9DKDB4NWE2OGM1NDA4MDIyYmE5MiksCisgICAgVTY0X0MoMHgxYzI3OGNkY2E1MGMwYmYwKSwgVTY0X0MoMHg2ZTVhOWNmNmYxODcxMmJlKSwKKyAgICBVNjRfQygweDg2ZGNlMGIxN2YzMTllZjMpLCBVNjRfQygweDJkMzRlYzIwNDAxMTVkNDkpLAorICAgIFU2NF9DKDB4NGJjZDE4M2Y3ZTQwOWI2OSksIFU2NF9DKDB4MjgxNWQ1NmFkNGE5YTNkYyksCisgICAgVTY0X0MoMHgyNDY5ODk3OWYyMTQxZDBkKSwgVTY0X0MoMHgwMDAwMDAwMDAwMDAwMDAwKSwKKyAgICBVNjRfQygweDFlYzY5NmExNWZiNzNlNTkpLCBVNjRfQygweGQ4NmIxMTBiMTY3ODRlMmUpLAorICAgIFU2NF9DKDB4OGU3Zjg4NThiMGU3NGE2ZCksIFU2NF9DKDB4MDYzZTJlODcxM2QwNWZlNiksCisgICAgVTY0X0MoMHhlMmM0MGVkM2JiZGI2ZDdhKSwgVTY0X0MoMHhiMWYxYWVjYTg5ZmM5N2FjKSwKKyAgICBVNjRfQygweGUxZGIxOTFlM2NiM2NjMDkpLCBVNjRfQygweDY0MThlZTYyYzRlYWYzODkpLAorICAgIFU2NF9DKDB4YzZhZDg3YWE0OWNmNzA3NyksIFU2NF9DKDB4ZDZmNjU3NjVjYTdlYzU1NiksCisgICAgVTY0X0MoMHg5YWZiNmM2ZGRhM2Q5NTAzKSwgVTY0X0MoMHg3Y2UwNTY0NDg4OGQ5MjM2KSwKKyAgICBVNjRfQygweDhkNjA5Zjk1Mzc4ZmViMWUpLCBVNjRfQygweDIzYTlhYTRlOWMxN2Q2MzEpLAorICAgIFU2NF9DKDB4NjIyNmMwZTVkNzNhYWM2ZiksIFU2NF9DKDB4NTYxNDk5NTNhNjlmMDQ0MyksCisgICAgVTY0X0MoMHhlZWI4NTJjMDlkNjZkM2FiKSwgVTY0X0MoMHgyYjBhYzJhNzUzYzEwMmFmKSwKKyAgICBVNjRfQygweDA3YzAyMzM3NmUwM2NiM2MpLCBVNjRfQygweDJjY2FlMTkwM2RjMmM5OTMpLAorICAgIFU2NF9DKDB4ZDNkNzZlMmY1ZWM2M2JjMyksIFU2NF9DKDB4OWUyNDU4OTczMzU2ZmY0YyksCisgICAgVTY0X0MoMHhhNjZhNWQzMjY0NGVlOWIxKSwgVTY0X0MoMHgwYTQyNzI5NDM1NmRlMTM3KSwKKyAgICBVNjRfQygweDc4M2Y2MmJlNjFlNmY4NzkpLCBVNjRfQygweDEzNDRjNzAyMDRkOTE0NTIpLAorICAgIFU2NF9DKDB4NWI5NmM4ZjBmZGYxMmU0OCksIFU2NF9DKDB4YTkwOTE2ZWNjNTliZjYxMyksCisgICAgVTY0X0MoMHhiZTkyZTUxNDI4Mjk4ODBlKSwgVTY0X0MoMHg3MjdkMTAyYTU0OGIxOTRlKSwKKyAgICBVNjRfQygweDFiZTdhZmViY2IwZmMwY2MpLCBVNjRfQygweDNlNzAyYjIyNDRjODQ5MWIpLAorICAgIFU2NF9DKDB4ZDVlOTQwYTg0ZDE2NjQyNSksIFU2NF9DKDB4NjZmOWY0MWYzZTUxYzYyMCksCisgICAgVTY0X0MoMHhhYmU4MGM5MTNmMjBjM2JhKSwgVTY0X0MoMHhmMDdlYzQ2MWMyZDFlZGYyKSwKKyAgICBVNjRfQygweGYzNjFkM2FjNDViOTRjODEpLCBVNjRfQygweDA1MjEzOTRhOTRiOGZlOTUpLAorICAgIFU2NF9DKDB4YWRkNjIyMTYyY2YwOWM1YyksIFU2NF9DKDB4ZTk3ODcxZjdmMzY1MTg5NyksCisgICAgVTY0X0MoMHhmNGExZjA5YjJiYmE4N2JkKSwgVTY0X0MoMHgwOTVkNjU1OWIyMDU0MDQ0KSwKKyAgICBVNjRfQygweDBiYmM3ZjI0NDhiZTc1ZWQpLCBVNjRfQygweDJhZjRjZjE3MmUxMjk2NzUpLAorICAgIFU2NF9DKDB4MTU3YWU5ODUxNzA5NGJiNCksIFU2NF9DKDB4OWZkYTU1Mjc0ZTg1NmI5NiksCisgICAgVTY0X0MoMHg5MTQ3MTM0OTkyODNlMGVlKSwgVTY0X0MoMHhiOTUyYzYyMzQ2MmE0MzMyKSwKKyAgICBVNjRfQygweDc0NDMzZWFkNDc1YjQ2YTgpLCBVNjRfQygweDhiNWViMTEyMjQ1ZmI0ZjgpLAorICAgIFU2NF9DKDB4YTM0YjY0NzhmMGY2MTcyNCksIFU2NF9DKDB4MTFhNWRkN2ZmZTYyMjFmYiksCisgICAgVTY0X0MoMHhjMTZkYTQ5ZDI3Y2NiYjRiKSwgVTY0X0MoMHg3NmEyMjRkMGJkZTA3MzAxKSwKKyAgICBVNjRfQygweDhhYTBiY2EyNTk4YzIwMjIpLCBVNjRfQygweDRkZjMzNmI4NmQ5MGM0OGYpLAorICAgIFU2NF9DKDB4ZWE2NzY2M2E3NDBkYjllNCksIFU2NF9DKDB4ZWY0NjVmNzBlMGI1NDc3MSksCisgICAgVTY0X0MoMHgzOWIwMDgxNTJhY2I4MjI3KSwgVTY0X0MoMHg3ZDFlNWJmNGY1NWUwNmVjKSwKKyAgICBVNjRfQygweDEwNWJkMGNmODNiMWI1MjEpLCBVNjRfQygweDc3NWMyOTYwYzAzM2U3ZGIpLAorICAgIFU2NF9DKDB4N2UwMTRjMzk3MjM2YTc5ZiksIFU2NF9DKDB4ODExY2MzODYxMTMyNTVjZiksCisgICAgVTY0X0MoMHhlZGE3NDUwZDFhMGU3MmQ4KSwgVTY0X0MoMHg1ODg5ZGYzZDdhOTk4ZjNiKSwKKyAgICBVNjRfQygweDJlMmJmYmVkYzc3OWZjM2EpLCBVNjRfQygweGNlMGVlZjQzODYxOWE0ZTkpLAorICAgIFU2NF9DKDB4MzcyZDRlN2JmNmNkMDk1ZiksIFU2NF9DKDB4MDRkZjM0ZmFlOTZiNmE0ZiksCisgICAgVTY0X0MoMHhmOTIzYTEzODcwZDRhZGI2KSwgVTY0X0MoMHhhMWFhN2UwNTBhNGQyMjhkKSwKKyAgICBVNjRfQygweGE4ZjcxYjVjYjg0ODYyYzkpLCBVNjRfQygweGI1MmU5YTMwNjA5N2ZkZTMpLAorICAgIFU2NF9DKDB4MGQ4MjUxYTM1YjZlMmEwYiksIFU2NF9DKDB4MjI1N2E3ZmVlMWM0NDJlYiksCisgICAgVTY0X0MoMHg3MzgzMWQ5YTI5NTg4ZDk0KSwgVTY0X0MoMHg1MWQ0YmE2NGM4OWNjZjdmKSwKKyAgICBVNjRfQygweDUwMmFiN2Q0YjU0ZjViYTUpLCBVNjRfQygweDk3NzkzZGNlODE1M2JmMDgpLAorICAgIFU2NF9DKDB4ZTUwNDJkZTRkNWQ4YTY0NiksIFU2NF9DKDB4OTY4NzMwN2VmYzgwMmJkMiksCisgICAgVTY0X0MoMHhhMDU0NzNiNTc3OWViNjU3KSwgVTY0X0MoMHhiNGQwOTc4MDFkNDQ2OTM5KSwKKyAgICBVNjRfQygweGNmZjBlMmYzZmJjYTMwMzMpLCBVNjRfQygweGMzOGNiZWUwZGQ3NzhlZTIpLAorICAgIFU2NF9DKDB4NDY0ZjQ5OWMyNTJlYjE2MiksIFU2NF9DKDB4Y2FkMWRiYjk2ZjcyY2VhNiksCisgICAgVTY0X0MoMHhiYTRkZDFlZWMxNDJlMjQxKSwgVTY0X0MoMHhiMDBmYTM3YWY0MmYwMzc2KSB9LAorICAvKiAyICovCisgIHsgVTY0X0MoMHhjY2U0Y2QzYWE5NjhiMjQ1KSwgVTY0X0MoMHgwODlkNTQ4NGU4MGI3ZmFmKSwKKyAgICBVNjRfQygweDYzODI0NmMxYjM1NDgzMDQpLCBVNjRfQygweGQyZmUwZWM4YzIzNTU0OTIpLAorICAgIFU2NF9DKDB4YTdmYmRmN2ZmMjM3NGVlZSksIFU2NF9DKDB4NGRmMTYwMGM5MjMzN2ExNiksCisgICAgVTY0X0MoMHg4NGU1MDNlYTUyM2IxMmZiKSwgVTY0X0MoMHgwNzkwYmJmZDUzYWIwYzRhKSwKKyAgICBVNjRfQygweDE5OGE3ODBmMzhmNmVhOWQpLCBVNjRfQygweDJhYjMwYzhmNTVlYzQ4Y2IpLAorICAgIFU2NF9DKDB4ZTBmN2ZlZDZiMmM0OWRiNSksIFU2NF9DKDB4YjZlY2YzZjQyMmNhZGJkYyksCisgICAgVTY0X0MoMHg0MDljOWE1NDEzNThkZjExKSwgVTY0X0MoMHhkM2NlOGE1NmRmZGUzZmUzKSwKKyAgICBVNjRfQygweGMzZTkyMjQzMTJjOGMxYTApLCBVNjRfQygweDBkNmRmYTU4ODE2YmE1MDcpLAorICAgIFU2NF9DKDB4ZGRmM2UxYjE3OTk1Mjc3NyksIFU2NF9DKDB4MDRjMDJhNDI3NDhiYjFkOSksCisgICAgVTY0X0MoMHg5NGMyYWJmZjlmMmRlY2I4KSwgVTY0X0MoMHg0ZjkxNzUyZGE4ZjhhY2Y0KSwKKyAgICBVNjRfQygweDc4NjgyYmVmYjE2OWJmN2IpLCBVNjRfQygweGUxYzc3YTQ4YWYyZmY2YzQpLAorICAgIFU2NF9DKDB4MGM1ZDdlYzY5YzgwY2U3NiksIFU2NF9DKDB4NGNjMWU0OTI4ZmQ4MTE2NyksCisgICAgVTY0X0MoMHhmZWVkM2QyNGQ5OTk3YjYyKSwgVTY0X0MoMHg1MThiYjZkZmMzYTU0YTIzKSwKKyAgICBVNjRfQygweDZkYmYyZDI2MTUxZjliOTApLCBVNjRfQygweGI1YmM2MjRiMDVlYTY2NGYpLAorICAgIFU2NF9DKDB4ZTg2YWFhNTI1YWNmZTIxYSksIFU2NF9DKDB4NDgwMWNlZDBmYjUzYTBiZSksCisgICAgVTY0X0MoMHhjOTE0NjNlNmMwMDg2OGVkKSwgVTY0X0MoMHgxMDI3YTgxNWNkMTZmZTQzKSwKKyAgICBVNjRfQygweGY2NzA2OWEwMzE5MjA0Y2QpLCBVNjRfQygweGIwNGNjYzk3NmM4YWJjZTcpLAorICAgIFU2NF9DKDB4YzBiOWIzZmMzNWU4N2MzMyksIFU2NF9DKDB4ZjM4MGM3N2M1OGYyZGU2NSksCisgICAgVTY0X0MoMHg1MGJiMzI0MWRlNGUyMTUyKSwgVTY0X0MoMHhkZjkzZjQ5MDQzNWVmMTk1KSwKKyAgICBVNjRfQygweGYxZTBkMjVkNjIzOTA4ODcpLCBVNjRfQygweGFmNjY4YmZiMWEzYzMxNDEpLAorICAgIFU2NF9DKDB4YmMxMWIyNTFmMDBhNzI5MSksIFU2NF9DKDB4NzNhNWVlZDQ3ZTQyN2Q0NyksCisgICAgVTY0X0MoMHgyNWJlZTNmNmVlNGMzYjJlKSwgVTY0X0MoMHg0M2NjMGJlYjM0Nzg2MjgyKSwKKyAgICBVNjRfQygweGM4MjRlNzc4ZGRlMzAzOWMpLCBVNjRfQygweGY5N2Q4NmQ5OGEzMjc3MjgpLAorICAgIFU2NF9DKDB4ZjJiMDQzZTI0NTE5YjUxNCksIFU2NF9DKDB4ZTI5N2ViZjc4ODBmNGI1NyksCisgICAgVTY0X0MoMHgzYTk0YTQ5YTk4ZmFiNjg4KSwgVTY0X0MoMHg4Njg1MTZjYjY4ZjBjNDE5KSwKKyAgICBVNjRfQygweGVmZmExMWFmMDk2NGVlNTApLCBVNjRfQygweGE0YWI0ZWMwZDUxN2YzN2QpLAorICAgIFU2NF9DKDB4YTljNmI0OTg1NDdjNTY3YSksIFU2NF9DKDB4OGUxODQyNGY4MGZiYmJiNiksCisgICAgVTY0X0MoMHgwYmNkYzUzYmNmMmJjMjNjKSwgVTY0X0MoMHgxMzc3MzlhYWVhMzY0M2QwKSwKKyAgICBVNjRfQygweDJjMTMzM2VjMWJhYzJmZjApLCBVNjRfQygweDhkNDhkM2YwYTdkYjA2MjUpLAorICAgIFU2NF9DKDB4MWUxYWMzZjI2YjVkZTZkNyksIFU2NF9DKDB4ZjUyMGY4MWYxNmIyYjk1ZSksCisgICAgVTY0X0MoMHg5ZjBmNmVjNDUwMDYyZTg0KSwgVTY0X0MoMHgwMTMwODQ5ZTFkZWI2YjcxKSwKKyAgICBVNjRfQygweGQ0NWUzMWFiOGM3NTMzYTkpLCBVNjRfQygweDY1MjI3OWEyZmQxNGU0M2YpLAorICAgIFU2NF9DKDB4MzIwOWYwMWU3MGYxYzkyNyksIFU2NF9DKDB4YmU3MWE3NzBjYWMxYTQ3MyksCisgICAgVTY0X0MoMHgwZTNkNmJlN2E2NGIxODk0KSwgVTY0X0MoMHg3ZWM4MTQ4Y2ZmMjlkODQwKSwKKyAgICBVNjRfQygweGNiNzQ3NmM3ZmFjM2JlMGYpLCBVNjRfQygweDcyOTU2YTRhNjNhOTE2MzYpLAorICAgIFU2NF9DKDB4MzdmOTVlYzIxOTkxMTM4ZiksIFU2NF9DKDB4OWUzZmVhNWE0ZGVkNDVmNSksCisgICAgVTY0X0MoMHg3YjM4YmE1MDk2NDkwMmU4KSwgVTY0X0MoMHgyMjJlNTgwYmJkZTczNzY0KSwKKyAgICBVNjRfQygweDYxZTI1M2UwODk5ZjU1ZTYpLCBVNjRfQygweGZjOGQyODA1ZTM1MmFkODApLAorICAgIFU2NF9DKDB4MzU5OTRiZTMyMzVhYzU2ZCksIFU2NF9DKDB4MDlhZGQwMWFmNWUwMTRkZSksCisgICAgVTY0X0MoMHg1ZTg2NTlhNjc4MDUzOWM2KSwgVTY0X0MoMHhiMTdjNDgwOTcxNjFkNzk2KSwKKyAgICBVNjRfQygweDAyNjAxNTIxM2FjYmQ2ZTIpLCBVNjRfQygweGQxYWU5Zjc3ZTUxNWU5MDEpLAorICAgIFU2NF9DKDB4YjdkYzc3NmEzZjIxYjBhZCksIFU2NF9DKDB4YWJhNmExYjk2ZWI3ODA5OCksCisgICAgVTY0X0MoMHg5YmNmNDQ4NjI0OGQ5ZjVkKSwgVTY0X0MoMHg1ODI2NjZjNTM2NDU1ZWZkKSwKKyAgICBVNjRfQygweGZkYmRhYzliZmViOWM2ZjEpLCBVNjRfQygweGM0Nzk5OWJlNDE2M2NkZWEpLAorICAgIFU2NF9DKDB4NzY1NTQwMDgxNzIyYTdlZiksIFU2NF9DKDB4M2U1NDhlZDhlYzcxMDc1MSksCisgICAgVTY0X0MoMHgzZDA0MWY2N2NiNTFiYWMyKSwgVTY0X0MoMHg3OTU4YWY3MWFjODJkNDBhKSwKKyAgICBVNjRfQygweDM2YzlkYTVjMDQ3YTc4ZmUpLCBVNjRfQygweGVkOWEwNDhlMzNhZjM4YjIpLAorICAgIFU2NF9DKDB4MjZlZTcyNDljOTZjODZiZCksIFU2NF9DKDB4OTAwMjgxYmRlYmE2NWQ2MSksCisgICAgVTY0X0MoMHgxMTE3MmM4YmQwZmQ5NTMyKSwgVTY0X0MoMHhlYTBhYmY3MzYwMDQzNGY4KSwKKyAgICBVNjRfQygweDQyZmM4Zjc1Mjk5MzA5ZjMpLCBVNjRfQygweDM0YTljZjdkM2ViMWFlMWMpLAorICAgIFU2NF9DKDB4MmI4Mzg4MTE0ODA3MjNiYSksIFU2NF9DKDB4NWNlNjRjODc0MmNlZWYyNCksCisgICAgVTY0X0MoMHgxYWRhZTliMDFmZDY1NzBlKSwgVTY0X0MoMHgzYzM0OWJmOWQ2YmFkMWIzKSwKKyAgICBVNjRfQygweDgyNDUzYzg5MWM3Yjc1YzApLCBVNjRfQygweDk3OTIzYTQwYjgwZDUxMmIpLAorICAgIFU2NF9DKDB4NGE2MWRiZjFjMTk4NzY1YyksIFU2NF9DKDB4YjQ4Y2U2ZDUxODAxMGQzZSksCisgICAgVTY0X0MoMHhjZmI0NWM4NThlNDgwZmQ2KSwgVTY0X0MoMHhkOTMzY2JmMzBkMWU5NmFlKSwKKyAgICBVNjRfQygweGQ3MGVhMDE0YWI1NThlM2EpLCBVNjRfQygweGMxODkzNzYyMjgwMzE3NDIpLAorICAgIFU2NF9DKDB4OTI2Mjk0OWNkMTZkOGI4MyksIFU2NF9DKDB4ZWIzYTNiZWQ3ZGVmNWY4OSksCisgICAgVTY0X0MoMHg0OTMxNGE0ZWU2YjhjYmNmKSwgVTY0X0MoMHhkY2MzNjUyZjY0N2U0YzA2KSwKKyAgICBVNjRfQygweGRhNjM1YTRjMmEzZTJiM2QpLCBVNjRfQygweDQ3MGMyMWE5NDBmM2QzNWIpLAorICAgIFU2NF9DKDB4MzE1OTYxYTE1N2QxNzRiNCksIFU2NF9DKDB4NjY3MmU4MWRkYTM0NTlhYyksCisgICAgVTY0X0MoMHg1Yjc2Zjc3YTExNjVlMzZlKSwgVTY0X0MoMHg0NDVjYjAxNjY3ZDM2ZWM4KSwKKyAgICBVNjRfQygweGM1NDkxZDIwNWM4OGE2OWIpLCBVNjRfQygweDQ1NmMzNDg4N2EzODA1YjkpLAorICAgIFU2NF9DKDB4ZmZkZGI5YmFjNDcyMTAxMyksIFU2NF9DKDB4OTlhZjUxYTcxZTQ2NDliZiksCisgICAgVTY0X0MoMHhhMTViZTAxY2JjNzcyOWQ1KSwgVTY0X0MoMHg1MmRiMjc2MGU0ODVmN2IwKSwKKyAgICBVNjRfQygweDhjNzg1NzZlYmEzMDZkNTQpLCBVNjRfQygweGFlNTYwZjY1MDdkNzVhMzApLAorICAgIFU2NF9DKDB4OTVmMjJmNjE4MmM2ODdjOSksIFU2NF9DKDB4NzFjNWZiZjU0NDg5YWJhNSksCisgICAgVTY0X0MoMHhjYTQ0ZjI1OWU3MjhkNTdlKSwgVTY0X0MoMHg4OGI4N2QyY2NlYmJkYzhkKSwKKyAgICBVNjRfQygweGJhYjE4ZDMyYmU0YTE1YWEpLCBVNjRfQygweDhiZThlYzkzZTk5YjYxMWUpLAorICAgIFU2NF9DKDB4MTdiNzEzZTg5ZWJkZjIwOSksIFU2NF9DKDB4YjMxYzVkMjg0YmFhMDE3NCksCisgICAgVTY0X0MoMHhlZWNhOTUzMTE0OGY4NTIxKSwgVTY0X0MoMHhiOGQxOTgxMzg0ODFjMzQ4KSwKKyAgICBVNjRfQygweDg5ODhmOWIyZDM1MGI3ZmMpLCBVNjRfQygweGI5ZTExYzhkOTk2YWE4MzkpLAorICAgIFU2NF9DKDB4NWE0NjczZTQwYzhlODgxZiksIFU2NF9DKDB4MTY4Nzk3NzY4MzU2OTk3OCksCisgICAgVTY0X0MoMHhiZjQxMjNlZWQ3MmFjZjAyKSwgVTY0X0MoMHg0ZWExZjFiM2I1MTNjNzg1KSwKKyAgICBVNjRfQygweGU3Njc0NTJiZTE2ZjkxZmYpLCBVNjRfQygweDc1MDVkMWI3MzAwMjFhN2MpLAorICAgIFU2NF9DKDB4YTU5YmNhNWVjOGZjOTgwYyksIFU2NF9DKDB4YWQwNjllZGEyMGY3ZTdhMyksCisgICAgVTY0X0MoMHgzOGY0YjFiYmEyMzE2MDZhKSwgVTY0X0MoMHg2MGQyZDc3ZTk0NzQzZTk3KSwKKyAgICBVNjRfQygweDlhZmZjMDE4Mzk2NmY0MmMpLCBVNjRfQygweDI0OGU2NzY4ZjNhNzUwNWYpLAorICAgIFU2NF9DKDB4Y2RkNDQ5YTRiNDgzZDkzNCksIFU2NF9DKDB4ODdiNTkyNTU3NTFiYWY2OCksCisgICAgVTY0X0MoMHgxYmVhNmQyZTAyM2QzYzdmKSwgVTY0X0MoMHg2YjFmMTI0NTViNWZmY2FiKSwKKyAgICBVNjRfQygweDc0MzU1NTI5MmRlOTcxMGQpLCBVNjRfQygweGQ4MDM0ZjZkMTBmNWZkZGYpLAorICAgIFU2NF9DKDB4YzYxOThjOWY3YmE4MWIwOCksIFU2NF9DKDB4YmI4MTA5YWNhM2ExN2VkYiksCisgICAgVTY0X0MoMHhmYTJkMTc2NmFkMTJjYWJiKSwgVTY0X0MoMHhjNzI5MDgwMTY2NDM3MDc5KSwKKyAgICBVNjRfQygweDljNWZmZjdiNzcyNjkzMTcpLCBVNjRfQygweDAwMDAwMDAwMDAwMDAwMDApLAorICAgIFU2NF9DKDB4MTVkNzA2YzlhNDc2MjRlYiksIFU2NF9DKDB4NmZkZjM4MDcyZmQ0NGQ3MiksCisgICAgVTY0X0MoMHg1ZmI2ZGQzODY1ZWU1MmI3KSwgVTY0X0MoMHhhMzNiZjUzZDg2YmNmZjM3KSwKKyAgICBVNjRfQygweGU2NTdjMWI1ZmM4NGZhOGUpLCBVNjRfQygweGFhOTYyNTI3NzM1Y2ViZTkpLAorICAgIFU2NF9DKDB4MzljNDM1MjViZmRhMGIxYiksIFU2NF9DKDB4MjA0ZTRkMmE4NzJjZTE4NiksCisgICAgVTY0X0MoMHg3YTA4M2VjZThiYTI2OTk5KSwgVTY0X0MoMHg1NTRiOWM5ZGI3MmVmYmZhKSwKKyAgICBVNjRfQygweGIyMmNkOWI2NTY0MTZhMDUpLCBVNjRfQygweDk2YTJiZWRlYTVlNjNhNWEpLAorICAgIFU2NF9DKDB4ODAyNTI5YTgyNmIwYTMyMiksIFU2NF9DKDB4ODExNWFkMzYzYjViYzg1MyksCisgICAgVTY0X0MoMHg4Mzc1YjgxNzAxOTAxZWIxKSwgVTY0X0MoMHgzMDY5ZTUzZjRhM2ExZmM1KSwKKyAgICBVNjRfQygweGJkMjEzNmNmZWRlMTE5ZTApLCBVNjRfQygweDE4YmFmYzkxMjUxZDgxZWMpLAorICAgIFU2NF9DKDB4MWQ0YTUyNGQ0YzdkNWI0NCksIFU2NF9DKDB4MDVmMGFlZGM2OTYwZGFhOCksCisgICAgVTY0X0MoMHgyOWUzOWQzMDcyY2NmNTU4KSwgVTY0X0MoMHg3MGY1N2Y2YjU5NjJjMGQ0KSwKKyAgICBVNjRfQygweDk4OWZkNTM5MDNhZDIyY2UpLCBVNjRfQygweGY4NGQwMjQ3OTdkOTFjNTkpLAorICAgIFU2NF9DKDB4NTQ3YjE4MDNhYWM1OTA4YiksIFU2NF9DKDB4ZjBkMDU2YzM3ZmQyNjNmNiksCisgICAgVTY0X0MoMHhkNTZlYjUzNTkxOWU1OGQ4KSwgVTY0X0MoMHgxYzdhZDZkMzUxOTYzMDM1KSwKKyAgICBVNjRfQygweDJlNzMyNmNkMjE2N2Y5MTIpLCBVNjRfQygweGFjMzYxYTQ0M2QxYzhjZDIpLAorICAgIFU2NF9DKDB4Njk3ZjA3NjQ2MTk0MmE0OSksIFU2NF9DKDB4NGI1MTVmNmZkYzczMWQyZCksCisgICAgVTY0X0MoMHg4YWQ4NjgwZGY0NzAwYTZmKSwgVTY0X0MoMHg0MWFjMWVjYTBlYjNiNDYwKSwKKyAgICBVNjRfQygweDdkOTg4NTMzZDgwOTY1ZDMpLCBVNjRfQygweGE4ZjYzMDA2NDk5NzNkMGIpLAorICAgIFU2NF9DKDB4Nzc2NWM0OTYwYWM5Y2M5ZSksIFU2NF9DKDB4N2NhODAxYWRjNWUyMGVhMiksCisgICAgVTY0X0MoMHhkZWEzNzAwZTVlYjU5YWU0KSwgVTY0X0MoMHhhMDZiNjQ4MmExOWM0MmE0KSwKKyAgICBVNjRfQygweDZhMmY5NmRiNDZiNDk3ZGEpLCBVNjRfQygweDI3ZGVmNmQ3ZDQ4N2VkY2MpLAorICAgIFU2NF9DKDB4NDYzY2E1Mzc1ZDE4YjgyYSksIFU2NF9DKDB4YTZjYjViZTFlZmRjMjU5ZiksCisgICAgVTY0X0MoMHg1M2ViYTNmZWY5NmU5Y2MxKSwgVTY0X0MoMHhjZTg0ZDgxYjkzYTM2NGE3KSwKKyAgICBVNjRfQygweGY0MTA3YzgxMGI1OWQyMmYpLCBVNjRfQygweDMzMzk3NDgwNmQxYWEyNTYpLAorICAgIFU2NF9DKDB4MGYwZGVmNzliYmEwNzNlNSksIFU2NF9DKDB4MjMxZWRjOTVhMDBjNWMxNSksCisgICAgVTY0X0MoMHhlNDM3ZDQ5NGM2NGYyYzZjKSwgVTY0X0MoMHg5MTMyMDUyM2Y2NGQzNjEwKSwKKyAgICBVNjRfQygweDY3NDI2YzgzYzdkZjMyZGQpLCBVNjRfQygweDZlZWZiYzk5MzIzZjI2MDMpLAorICAgIFU2NF9DKDB4OWQ2ZjdiZTU2YWNkZjg2NiksIFU2NF9DKDB4NTkxNmUyNWIyYmFlMzU4YyksCisgICAgVTY0X0MoMHg3ZmY4OTAxMmUyYzJiMzMxKSwgVTY0X0MoMHgwMzUwOTFiZjI3MjBiZDkzKSwKKyAgICBVNjRfQygweDU2MWIwZDIyOTAwZTQ2NjkpLCBVNjRfQygweDI4ZDMxOWFlNmYyNzllMjkpLAorICAgIFU2NF9DKDB4MmY0M2EyNTMzYzhjOTI2MyksIFU2NF9DKDB4ZDA5ZTFiZTlmOGZlODI3MCksCisgICAgVTY0X0MoMHhmNzQwZWQzZTJjNzk2ZmJjKSwgVTY0X0MoMHhkYjUzZGVkMjM3ZDU0MDRjKSwKKyAgICBVNjRfQygweDYyYjJjMjVmYWViZmU4NzUpLCBVNjRfQygweDBhZmQ0MWE1ZDJjMGE5NGQpLAorICAgIFU2NF9DKDB4NjQxMmZkM2NlMGZmOGY0ZSksIFU2NF9DKDB4ZTNhNzZmNjk5NWU0MjAyNiksCisgICAgVTY0X0MoMHg2YzhmYTliODA4ZjRmMGUxKSwgVTY0X0MoMHhjMmQ5YTZkZDBmMjNhYWQxKSwKKyAgICBVNjRfQygweDhmMjhjNmQxOWQxMGQwYzcpLCBVNjRfQygweDg1ZDU4Nzc0NGZkMDc5OGEpLAorICAgIFU2NF9DKDB4YTIwYjcxYTM5YjU3OTQ0NiksIFU2NF9DKDB4Njg0ZjgzZmE3YzdmNDEzOCksCisgICAgVTY0X0MoMHhlNTA3NTAwYWRiYTQ0NzFkKSwgVTY0X0MoMHgzZjY0MGE0NmYxOWE2YzIwKSwKKyAgICBVNjRfQygweDEyNDdiZDM0ZjdkZDI4YTEpLCBVNjRfQygweDJkMjNiNzcyMDY0NzQ0ODEpLAorICAgIFU2NF9DKDB4OTM1MjEwMDJjYzg2ZTBmMiksIFU2NF9DKDB4NTcyYjg5YmM4ZGU1MmQxOCksCisgICAgVTY0X0MoMHhmYjFkOTNmOGIwZjlhMWNhKSwgVTY0X0MoMHhlOTVhMmVjYzQ3MjQ4OTZiKSwKKyAgICBVNjRfQygweDNiYTQyMDA0ODUxMWRkZjkpLCBVNjRfQygweGQ2M2UyNDhhYjZiZWU1NGIpLAorICAgIFU2NF9DKDB4NWRkNmM4MTk1ZjI1ODQ1NSksIFU2NF9DKDB4MDZhMDNmNjM0ZTQwNjczYiksCisgICAgVTY0X0MoMHgxZjJhNDc2Yzc2YjY4ZGE2KSwgVTY0X0MoMHgyMTdlYzliNDlhYzc4YWY3KSwKKyAgICBVNjRfQygweGVjYWE4MDEwMmU0NDUzYzMpLCBVNjRfQygweDE0ZTc4MjU3Yjk5ZDRmOWEpIH0sCisgIC8qIDMgKi8KKyAgeyBVNjRfQygweDIwMzI5YjJjYzg3YmJhMDUpLCBVNjRfQygweDRmNWViNmY4NjU0NmE1MzEpLAorICAgIFU2NF9DKDB4ZDRmNDQ3NzVmNzUxYjZiMSksIFU2NF9DKDB4ODI2NmE0N2I4NTBkZmE4YiksCisgICAgVTY0X0MoMHhiYjk4NmFhMTVhNmNhOTg1KSwgVTY0X0MoMHhjOTc5ZWIwOGY5YWUwZjk5KSwKKyAgICBVNjRfQygweDJkYTZmNDQ3YTIzNzVlYTEpLCBVNjRfQygweDFlNzQyNzVkY2Q3ZDg1NzYpLAorICAgIFU2NF9DKDB4YmMyMDE4MGE4MDBiYzVmOCksIFU2NF9DKDB4YjRhMmY3MDFiMmRjNjViZSksCisgICAgVTY0X0MoMHhlNzI2OTQ2Zjk4MWI2ZDY2KSwgVTY0X0MoMHg0OGU2YzQ1M2JmMjFjOTRjKSwKKyAgICBVNjRfQygweDQyY2FkOTkzMGYwYTQxOTUpLCBVNjRfQygweGVmYTQ3YjY0YWFjY2NkMjApLAorICAgIFU2NF9DKDB4NzExODBhODk2MDQwOWE0MiksIFU2NF9DKDB4OGJiMzMyOWJmNmE0NGUwYyksCisgICAgVTY0X0MoMHhkMzRjMzVkZTJkMzZkYWNjKSwgVTY0X0MoMHhhOTJmNWI3Y2JjMjNkYzk2KSwKKyAgICBVNjRfQygweGIzMWE4NWFhNjhiYjA5YzMpLCBVNjRfQygweDEzZTA0ODM2YTczMTYxZDIpLAorICAgIFU2NF9DKDB4YjI0ZGZjNDEyOWM1MWQwMiksIFU2NF9DKDB4OGFlNDRiNzBiN2RhNWFjZCksCisgICAgVTY0X0MoMHhlNjcxZWQ4NGQ5NjU3OWE3KSwgVTY0X0MoMHhhNGJiMzQxN2Q2NmYzODMyKSwKKyAgICBVNjRfQygweDQ1NzJhYjM4ZDU2ZDJkZTgpLCBVNjRfQygweGIxYjQ3NzYxZWE0NzIxNWMpLAorICAgIFU2NF9DKDB4ZTgxYzA5Y2Y3MGFiYTE1ZCksIFU2NF9DKDB4ZmZiZGI4NzJjZTdmOTBhYyksCisgICAgVTY0X0MoMHhhODc4MjI5N2ZkNWRjODU3KSwgVTY0X0MoMHgwZDk0NmY2YjZhNGNlNGE0KSwKKyAgICBVNjRfQygweGU0ZGYxZjRmNWI5OTUxMzgpLCBVNjRfQygweDllYmM3MWVkY2E4YzU3NjIpLAorICAgIFU2NF9DKDB4MGEyYzFkYzBiMDJiODhkOSksIFU2NF9DKDB4M2I1MDNjMTE1ZDlkN2I5MSksCisgICAgVTY0X0MoMHhjNjQzNzZhODExMWVjM2EyKSwgVTY0X0MoMHhjZWMxOTlhMzIzYzk2M2U0KSwKKyAgICBVNjRfQygweGRjNzZhODdlYzU4NjE2ZjcpLCBVNjRfQygweDA5ZDU5NmUwNzNhOWI0ODcpLAorICAgIFU2NF9DKDB4MTQ1ODNhOWQ3ZDU2MGRhZiksIFU2NF9DKDB4ZjRjNmRjNTkzZjJhMGNiNCksCisgICAgVTY0X0MoMHhkZDIxZDE5NTg0ZjgwMjM2KSwgVTY0X0MoMHg0YTQ4MzY5ODNkZGRlMWQzKSwKKyAgICBVNjRfQygweGU1ODg2NmE0MWFlNzQ1ZjkpLCBVNjRfQygweGY1OTFhNWIyN2U1NDE4NzUpLAorICAgIFU2NF9DKDB4ODkxZGMwNTA3NDU4NjY5MyksIFU2NF9DKDB4NWIwNjhjNjUxODEwYTg5ZSksCisgICAgVTY0X0MoMHhhMzAzNDZiYzBjMDg1NDRmKSwgVTY0X0MoMHgzZGJmMzc1MWM2ODQwMzJkKSwKKyAgICBVNjRfQygweDJhMWU4NmVjNzg1MDMyZGMpLCBVNjRfQygweGY3M2Y1Nzc5ZmNhODMwZWEpLAorICAgIFU2NF9DKDB4YjYwYzA1Y2EzMDIwNGQyMSksIFU2NF9DKDB4MGNjMzE2ODAyYjMyZjA2NSksCisgICAgVTY0X0MoMHg4NzcwMjQxYmRkOTZiZTY5KSwgVTY0X0MoMHhiODYxZTE4MTk5ZWU5NWRiKSwKKyAgICBVNjRfQygweGY4MDVjYWQ5MTQxOGZjZDEpLCBVNjRfQygweDI5ZTcwZGNjYmJkMjBlODIpLAorICAgIFU2NF9DKDB4YzcxNDBmNDM1MDYwZDc2MyksIFU2NF9DKDB4MGYzYTlkYTBlOGIwY2MzYiksCisgICAgVTY0X0MoMHhhMjU0M2Y1NzRkNzY0MDhlKSwgVTY0X0MoMHhiZDc3NjFlMWMxNzVkMTM5KSwKKyAgICBVNjRfQygweDRiMWY0ZjczN2NhM2Y1MTIpLCBVNjRfQygweDZkYzJkZjFmMmZjMTM3YWIpLAorICAgIFU2NF9DKDB4ZjFkMDVjMzk2N2IxNDg1NiksIFU2NF9DKDB4YTc0MmJmMzcxNWVkMDQ2YyksCisgICAgVTY0X0MoMHg2NTQwMzAxNDFkMTY5N2VkKSwgVTY0X0MoMHgwN2I4NzJhYmRhNjc2YzdkKSwKKyAgICBVNjRfQygweDNjZTg0ZWJhODdmYTE3ZWMpLCBVNjRfQygweGMxZmIwNDAzY2I3OWFmZGYpLAorICAgIFU2NF9DKDB4M2U0NmJjNzEwNTA2M2Y3MyksIFU2NF9DKDB4Mjc4YWU5ODcxMjFjZDY3OCksCisgICAgVTY0X0MoMHhhMWFkYjQ3NzhlZjQ3Y2QwKSwgVTY0X0MoMHgyNmRkOTA2YzUzNjJjMmI5KSwKKyAgICBVNjRfQygweDA1MTY4MDYwNTg5YjQ0ZTIpLCBVNjRfQygweGZiZmM0MWY5ZDc5YWMwOGYpLAorICAgIFU2NF9DKDB4MGU2ZGU0NGJhOWNlZDhmYSksIFU2NF9DKDB4OWZlYjA4MDY4YmYyNDNhMyksCisgICAgVTY0X0MoMHg3YjM0MTc0OWQwNmIxMjliKSwgVTY0X0MoMHgyMjljNjllNzRhODc5MjlhKSwKKyAgICBVNjRfQygweGUwOWVlNmM0NDI3YzAxMWIpLCBVNjRfQygweDU2OTJlMzBlNzI1YzRjM2EpLAorICAgIFU2NF9DKDB4ZGE5OWEzM2U1ZTlmNmU0YiksIFU2NF9DKDB4MzUzZGQ4NWFmNDUzYTM2YiksCisgICAgVTY0X0MoMHgyNTI0MWI0YzkwZTBmZWU3KSwgVTY0X0MoMHg1ZGU5ODcyNTgzMDlkMDIyKSwKKyAgICBVNjRfQygweGUyMzAxNDBmYzA4MDI5ODQpLCBVNjRfQygweDkzMjgxZTg2YTBjMGIzYzYpLAorICAgIFU2NF9DKDB4ZjIyOWQ3MTlhNDMzNzQwOCksIFU2NF9DKDB4NmY2YzJkZDRhZDNkMWYzNCksCisgICAgVTY0X0MoMHg4ZWE1YjJmYmFlM2YwYWVlKSwgVTY0X0MoMHg4MzMxZGQ5MGM0NzNlZTRhKSwKKyAgICBVNjRfQygweDM0NmFhMWIxYjUyZGI3YWEpLCBVNjRfQygweGRmOGYyMzVlMDYwNDJhYTkpLAorICAgIFU2NF9DKDB4Y2M2ZjZiNjhhMTM1NGI3YiksIFU2NF9DKDB4NmM5NWE2ZjQ2ZWJmMjM2YSksCisgICAgVTY0X0MoMHg1MmQzMWE4NTZiYjkxYzE5KSwgVTY0X0MoMHgxYTM1ZGVkNmQ0OThkNTU1KSwKKyAgICBVNjRfQygweGYzN2VhZWYyZTU0ZDYwYzkpLCBVNjRfQygweDcyZTE4MWE5YTNjMmE2MWMpLAorICAgIFU2NF9DKDB4OTg1MzdhYWQ1MTk1MmZkZSksIFU2NF9DKDB4MTZmNmM4NTZmZmFhMjUzMCksCisgICAgVTY0X0MoMHhkOTYwMjgxZTlkMWQ1MjE1KSwgVTY0X0MoMHgzYTA3NDVmYTFjZTM2ZjUwKSwKKyAgICBVNjRfQygweDBiN2I2NDJiZjE1NTljMTgpLCBVNjRfQygweDU5YTg3ZWFlOWFlYzgwMDEpLAorICAgIFU2NF9DKDB4NWUxMDBjMDU0MDhiZWM3YyksIFU2NF9DKDB4MDQ0MWY5OGIxOWU1NTAyMyksCisgICAgVTY0X0MoMHhkNzBkY2M1NTM0ZDM4YWVmKSwgVTY0X0MoMHg5MjdmNjc2ZGUxYmVhNzA3KSwKKyAgICBVNjRfQygweDk3NjllNzBkYjkyNWUzZTUpLCBVNjRfQygweDdhNjM2ZWEyOTExNTA2NWEpLAorICAgIFU2NF9DKDB4NDY4YjIwMTgxNmVmMTFiNiksIFU2NF9DKDB4YWI4MWE5YjczZWRmZjQwOSksCisgICAgVTY0X0MoMHhjMGFjN2RlODhhMDdiYjFlKSwgVTY0X0MoMHgxZjIzNWViNjhjMDM5MWI3KSwKKyAgICBVNjRfQygweDYwNTZiMDc0NDU4ZGQzMGYpLCBVNjRfQygweGJlOGVlYWMxMDJmN2VkNjcpLAorICAgIFU2NF9DKDB4Y2QzODEyODNlMDRiNWZiYSksIFU2NF9DKDB4NWNiZWZlY2VjMjc3YzRlMyksCisgICAgVTY0X0MoMHhkMjFiNGMzNTZjNDhjZTBkKSwgVTY0X0MoMHgxMDE5YzMxNjY0YjM1ZDhjKSwKKyAgICBVNjRfQygweDI0NzM2MmE3ZDE5ZWVhMjYpLCBVNjRfQygweGViZTU4MmVmYjMyOTlkMDMpLAorICAgIFU2NF9DKDB4MDJhZWYyY2I4MmZjMjg5ZiksIFU2NF9DKDB4ODYyNzVkZjA5Y2U4YWFhOCksCisgICAgVTY0X0MoMHgyOGIwNzQyN2ZhYWMxYTQzKSwgVTY0X0MoMHgzOGE5YjczMTllMWY0N2NmKSwKKyAgICBVNjRfQygweGM4MmU5MmUzYjhkMDFiNTgpLCBVNjRfQygweDA2ZWYwYjQwOWIxOTc4YmMpLAorICAgIFU2NF9DKDB4NjJmODQyYmZjNzcxZmI5MCksIFU2NF9DKDB4OTkwNDAzNDYxMGViM2IxZiksCisgICAgVTY0X0MoMHhkZWQ4NWFiNTQ3N2EzZTY4KSwgVTY0X0MoMHg5MGQxOTVhNjYzNDI4Zjk4KSwKKyAgICBVNjRfQygweDUzODQ2MzZlMmFjNzA4ZDgpLCBVNjRfQygweGNiZDcxOWMzN2I1MjI3MDYpLAorICAgIFU2NF9DKDB4YWU5NzI5ZDc2NjQ0YjBlYiksIFU2NF9DKDB4N2M4YzY1ZTIwYTBjN2VlNiksCisgICAgVTY0X0MoMHg4MGM4NTZiMDA3ZjFkMjE0KSwgVTY0X0MoMHg4YzBiNDAzMDJjYzMyMjcxKSwKKyAgICBVNjRfQygweGRiY2VkYWQ1MWZlMTdhOGEpLCBVNjRfQygweDc0MGU4YWU5MzhkYmRlYTApLAorICAgIFU2NF9DKDB4YTYxNWM2ZGM1NDkzMTBhZCksIFU2NF9DKDB4MTljYzU1ZjYxNzFhZTkwYiksCisgICAgVTY0X0MoMHg0OWIxYmRiOGZlNWZkZDhkKSwgVTY0X0MoMHhlZDBhODlhZjI4MzBlNWJmKSwKKyAgICBVNjRfQygweDZhN2FhZGI0ZjVhNjViZDYpLCBVNjRfQygweDdlMjI5NzI5ODhmMDU2NzkpLAorICAgIFU2NF9DKDB4Zjk1MmIzMzI1NTY2ZTgxMCksIFU2NF9DKDB4MzlmZWNlZGFkZjYxNTMwZSksCisgICAgVTY0X0MoMHg2MTAxYzk5ZjA0ZjNjN2NlKSwgVTY0X0MoMHgyZTVmN2Y2NzYxYjU2MmZmKSwKKyAgICBVNjRfQygweGYwODcyNWQyMjZjZjVjOTcpLCBVNjRfQygweDYzYWYzYjU0ODYwZmVmNTEpLAorICAgIFU2NF9DKDB4OGZmMmNiMTBlZjQxMWUyZiksIFU2NF9DKDB4ODg0YWI5YmIzNTI2NzI1MiksCisgICAgVTY0X0MoMHg0ZGYwNDQzM2U3YmE4ZGFlKSwgVTY0X0MoMHg5YWZkODg2NmQzNjkwNzQxKSwKKyAgICBVNjRfQygweDY2YjliYjM0ZGU5NGFiYjMpLCBVNjRfQygweDliYWFmMThkOTIxNzEzODApLAorICAgIFU2NF9DKDB4NTQzYzExYzVmMGEwNjRhNSksIFU2NF9DKDB4MTdhMWIxYmRiZWQ0MzFmMSksCisgICAgVTY0X0MoMHhiNWY1OGVlYWYzYTI3MTdmKSwgVTY0X0MoMHhjMzU1ZjZjODQ5ODU4NzQwKSwKKyAgICBVNjRfQygweGVjNWRmMDQ0Njk0ZWYxN2UpLCBVNjRfQygweGQ4Mzc1MWY1ZGM2MzQ2ZDQpLAorICAgIFU2NF9DKDB4ZmM0NDMzNTIwZGZkYWNmMiksIFU2NF9DKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MoMHg1YTUxZjU4ZTU5NmViYzVmKSwgVTY0X0MoMHgzMjg1YWFmMTJlMzRjZjE2KSwKKyAgICBVNjRfQygweDhkNWMzOWRiNmRiZDM2YjApLCBVNjRfQygweDEyYjczMWRkZTY0Zjc1MTMpLAorICAgIFU2NF9DKDB4OTQ5MDZjMmQ3YWE3ZGZiYiksIFU2NF9DKDB4MzAyYjU4M2FhY2M4ZTc4OSksCisgICAgVTY0X0MoMHg5ZDQ1ZmFjZDA5MGU2YjNjKSwgVTY0X0MoMHgyMTY1ZTJjNzg5MDVhZWM0KSwKKyAgICBVNjRfQygweDY4ZDQ1ZjdmNzc1YTczNDkpLCBVNjRfQygweDE4OWIyYzFkNTY2NGZkY2EpLAorICAgIFU2NF9DKDB4ZTFjOTlmMmYwMzAyMTVkYSksIFU2NF9DKDB4Njk4MzI2OTQzNjI0Njc4OCksCisgICAgVTY0X0MoMHg4NDg5YWYzYjFlMTQ4MjM3KSwgVTY0X0MoMHhlOTRiNzAyNDMxZDViNTljKSwKKyAgICBVNjRfQygweDMzZDJkMzFhNmY0YWRiZDcpLCBVNjRfQygweGJmZDk5MzJhNDM4OWY5YTYpLAorICAgIFU2NF9DKDB4YjBlMzBlOGFhYjM5MzU5ZCksIFU2NF9DKDB4ZDFlMmM3MTVhZmNhZjI1MyksCisgICAgVTY0X0MoMHgxNTBmNDM3NjNjMjgxOTZlKSwgVTY0X0MoMHhjNGVkODQ2MzkzZTJlYjNkKSwKKyAgICBVNjRfQygweDAzZjk4YjIwYzM4MjNjNWUpLCBVNjRfQygweGZkMTM0YWI5NGM4M2I4MzMpLAorICAgIFU2NF9DKDB4NTU2YjY4MmViMWRlNzA2NCksIFU2NF9DKDB4MzZjNDUzN2EzN2QxOWYzNSksCisgICAgVTY0X0MoMHg3NTU5ZjMwMjc5YTVjYTYxKSwgVTY0X0MoMHg3OTlhZTU4MjUyOTczYTA0KSwKKyAgICBVNjRfQygweDljMTI4MzI2NDg3MDdmZmQpLCBVNjRfQygweDc4Y2Q5YzY5MTNlOTJlYzUpLAorICAgIFU2NF9DKDB4MWQ4ZGFjN2QwZWZmYjkyOCksIFU2NF9DKDB4NDM5ZGEwNzg0ZTc0NTU1NCksCisgICAgVTY0X0MoMHg0MTMzNTJiM2NjODg3ZGNiKSwgVTY0X0MoMHhiYWNmMTM0YTFiMTJiZDQ0KSwKKyAgICBVNjRfQygweDExNGViYWZkMjVjZDQ5NGQpLCBVNjRfQygweDJmMDgwNjhjMjBjYjc2M2UpLAorICAgIFU2NF9DKDB4NzZhMDc4MjJiYTI3ZjYzZiksIFU2NF9DKDB4ZWFiMmZiMDRmMjU3ODljMiksCisgICAgVTY0X0MoMHhlMzY3NmRlNDgxZmUzZDQ1KSwgVTY0X0MoMHgxYjYyYTczZDk1ZTZjMTk0KSwKKyAgICBVNjRfQygweDY0MTc0OWZmNWM2ODgzMmMpLCBVNjRfQygweGE1ZWM0ZGZjOTcxMTJjZjMpLAorICAgIFU2NF9DKDB4ZjY2ODJlOTJiZGQ2MjQyYiksIFU2NF9DKDB4M2YxMWM1OWE0NDc4MmJiMiksCisgICAgVTY0X0MoMHgzMTdjMjFkMWVkYjZmMzQ4KSwgVTY0X0MoMHhkNjVhYjViZTc1YWQ5ZTJlKSwKKyAgICBVNjRfQygweDZiMmRkNDVmYjRkODRmMTcpLCBVNjRfQygweGZhYWIzODEyOTZlNGQ0NGUpLAorICAgIFU2NF9DKDB4ZDBiNWJlZmVlZWI0ZTY5MiksIFU2NF9DKDB4MDg4MmVmMGIzMmQ3YTA0NiksCisgICAgVTY0X0MoMHg1MTJhOTFhNWE4M2IyMDQ3KSwgVTY0X0MoMHg5NjNlOWVlNmY4NWJmNzI0KSwKKyAgICBVNjRfQygweDRlMDljZjEzMjQzOGIxZjApLCBVNjRfQygweDc3ZjcwMWM5ZmI1OWUyZmUpLAorICAgIFU2NF9DKDB4N2RkYjFjMDk0YjcyNmEyNyksIFU2NF9DKDB4NWY0Nzc1ZWUwMWY1ZjhiZCksCisgICAgVTY0X0MoMHg5MTg2ZWM0ZDIyM2M5YjU5KSwgVTY0X0MoMHhmZWVhYzE5OThmMDE4NDZkKSwKKyAgICBVNjRfQygweGFjMzlkYjFjZTRiODk4NzQpLCBVNjRfQygweGI3NWI3YzIxNzE1ZTU5ZTApLAorICAgIFU2NF9DKDB4YWZjMDUwM2MyNzNhYTQyYSksIFU2NF9DKDB4NmUzYjU0M2ZlYzQzMGJmNSksCisgICAgVTY0X0MoMHg3MDRmNzM2MjIxM2U4ZTgzKSwgVTY0X0MoMHg1OGZmMDc0NWRiOTI5NGMwKSwKKyAgICBVNjRfQygweDY3ZWVjMmRmOWZlYWJmNzIpLCBVNjRfQygweGEwZmFjZDljY2Y4YTY4MTEpLAorICAgIFU2NF9DKDB4YjkzNjk4NmFkODkwODExYSksIFU2NF9DKDB4OTVjNzE1YzYzYmQ5Y2I3YSksCisgICAgVTY0X0MoMHhjYTgwNjAyODNhMmMzM2M3KSwgVTY0X0MoMHg1MDdkZTg0ZWU5NDUzNDg2KSwKKyAgICBVNjRfQygweDg1ZGVkNmQwNWY2YTk2ZjYpLCBVNjRfQygweDFjZGFkNTk2NGY4MWFkZTkpLAorICAgIFU2NF9DKDB4ZDVhMzNlOWViNjJmYTI3MCksIFU2NF9DKDB4NDA2NDJiNTg4ZGY2NjkwYSksCisgICAgVTY0X0MoMHg3Zjc1ZWVjMmM5OGU0MmI4KSwgVTY0X0MoMHgyY2YxOGRhY2UzNDk0YTYwKSwKKyAgICBVNjRfQygweDIzY2IxMDBjMGJmOTg2NWIpLCBVNjRfQygweGVlZjMwMjhmZWJiMmQ5ZTEpLAorICAgIFU2NF9DKDB4NDQyNWQyZDM5NDEzMzkyOSksIFU2NF9DKDB4YWFkNmQwNWM3ZmExZTBjOCksCisgICAgVTY0X0MoMHhhZDZlYTJmN2E1YzY4Y2I1KSwgVTY0X0MoMHhjMjAyOGYyMzA4ZmI5MzgxKSwKKyAgICBVNjRfQygweDgxOWYyZjViNDY4ZmM2ZDUpLCBVNjRfQygweGM1YmFmZDg4ZDI5Y2ZmZmMpLAorICAgIFU2NF9DKDB4NDdkYzU5ZjM1NzkxMDU3NyksIFU2NF9DKDB4MmI0OWZmMDczOTJlMjYxZCksCisgICAgVTY0X0MoMHg1N2M1OWFlNTMzMjI1OGZiKSwgVTY0X0MoMHg3M2I2Zjg0MmUyYmNiMmRkKSwKKyAgICBVNjRfQygweGNmOTZlMDQ4NjJiNzc3MjUpLCBVNjRfQygweDRjYTczZGQ4YTZjNDk5NmYpLAorICAgIFU2NF9DKDB4MDE1Nzc5ZWI0MTdlMTRjMSksIFU2NF9DKDB4Mzc5MzJhOTE3NmFmOGJmNCkgfSwKKyAgLyogNCAqLworICB7IFU2NF9DKDB4MTkwYTJjOWIyNDlkZjIzZSksIFU2NF9DKDB4MmY2MmY4YjYyMjYzZTFlOSksCisgICAgVTY0X0MoMHg3YTdmNzU0NzQwOTkzNjU1KSwgVTY0X0MoMHgzMzBiN2JhNGQ1NTY0ZDlmKSwKKyAgICBVNjRfQygweDRjMTdhMTZhNDY2NzI1ODIpLCBVNjRfQygweGIyMmYwOGViN2QwNWY1YjgpLAorICAgIFU2NF9DKDB4NTM1ZjQ3ZjQwYmMxNDhjYyksIFU2NF9DKDB4M2FlYzVkMjdkNDg4MzAzNyksCisgICAgVTY0X0MoMHgxMGVkMGExODI1NDM4Zjk2KSwgVTY0X0MoMHg1MTYxMDFmNzJjMjMzZDE3KSwKKyAgICBVNjRfQygweDEzY2M2Zjk0OWZkMDRlYWUpLCBVNjRfQygweDczOTg1M2M0NDE0NzRiZmQpLAorICAgIFU2NF9DKDB4NjUzNzkzZDkwZDNmNWIxYiksIFU2NF9DKDB4NTI0MDY0N2I5NmIwZmMyZiksCisgICAgVTY0X0MoMHgwYzg0ODkwYWQyNzYyM2UwKSwgVTY0X0MoMHhkNzE4OWIzMjcwM2FhZWEzKSwKKyAgICBVNjRfQygweDI2ODVkZTM1MjNiZDljNDEpLCBVNjRfQygweDk5MzE3YzViMTFiZmZlZmEpLAorICAgIFU2NF9DKDB4MGQ5YmFhODU0ZjA3OTcwMyksIFU2NF9DKDB4NzBiOTM2NDhmYmQ0OGFjNSksCisgICAgVTY0X0MoMHhhODA0NDFmY2UzMGJjNmJlKSwgVTY0X0MoMHg3Mjg3NzA0YmRjMzZmZjFlKSwKKyAgICBVNjRfQygweGI2NTM4NGVkMzNkYzFmMTMpLCBVNjRfQygweGQzNjQxNzM0M2VlMzQ0MDgpLAorICAgIFU2NF9DKDB4MzljZDM4YWI2ZTFiZjEwZiksIFU2NF9DKDB4NWFiODYxNzcwYTFmMzU2NCksCisgICAgVTY0X0MoMHgwZWJhY2YwOWY1OTQ1NjNiKSwgVTY0X0MoMHhkMDQ1NzJiODg0NzA4NTMwKSwKKyAgICBVNjRfQygweDNjYWU5NzIyYmRiM2FmNDcpLCBVNjRfQygweDRhNTU2YjZmMmY1Y2JhZjIpLAorICAgIFU2NF9DKDB4ZTE3MDRmMWY3NmM0YmQ3NCksIFU2NF9DKDB4NWVjNGVkNzE0NGM2ZGZjZiksCisgICAgVTY0X0MoMHgxNmFmYzAxZDRjNzgxMGU2KSwgVTY0X0MoMHgyODNmMTEzY2Q2MjljYTdhKSwKKyAgICBVNjRfQygweGFmNTlhODc2MTc0MWVkMmQpLCBVNjRfQygweGVlZDVhMzk5MWUyMTVmYWMpLAorICAgIFU2NF9DKDB4M2JmMzdlYTg0OWY5ODRkNCksIFU2NF9DKDB4ZTQxM2UwOTZhNTZjZTMzYyksCisgICAgVTY0X0MoMHgyYzQzOWQzYTk4ZjAyMGQxKSwgVTY0X0MoMHg2Mzc1NTlkYzY0MDRjNDZiKSwKKyAgICBVNjRfQygweDllNmM5NWQxZTVmNWQ1NjkpLCBVNjRfQygweDI0YmI5ODM2MDQ1ZmU5OWEpLAorICAgIFU2NF9DKDB4NDRlZmE0NjZkYWM4ZWNjOSksIFU2NF9DKDB4YzZlYWIyYTVjODA4OTVkNiksCisgICAgVTY0X0MoMHg4MDNiNTBjMDM1MjIwY2M0KSwgVTY0X0MoMHgwMzIxNjU4Y2JhOTNjMTM4KSwKKyAgICBVNjRfQygweDhmOWViYzQ2NWRjN2VlMWMpLCBVNjRfQygweGQxNWE1MTM3MTkwMTMxZDMpLAorICAgIFU2NF9DKDB4MGZhNWVjODY2OGU1ZTJkOCksIFU2NF9DKDB4OTFjOTc5NTc4ZDEwMzdiMSksCisgICAgVTY0X0MoMHgwNjQyY2EwNTY5M2I5ZjcwKSwgVTY0X0MoMHhlZmNhODAxNjgzNTBlYjRmKSwKKyAgICBVNjRfQygweDM4ZDIxYjI0ZjM2YTQ1ZWMpLCBVNjRfQygweGJlYWI4MWUxYWY3M2Q2NTgpLAorICAgIFU2NF9DKDB4OGNiZmQ5Y2FlNzU0MmYyNCksIFU2NF9DKDB4ZmQxOWNjMGQ4MWYxMTEwMiksCisgICAgVTY0X0MoMHgwYWM2NDMwZmJiNGRiYzkwKSwgVTY0X0MoMHgxZDc2YTA5ZDZhNDQxODk1KSwKKyAgICBVNjRfQygweDJhMDE1NzNmZjFjYmJmYTEpLCBVNjRfQygweGI1NzJlMTYxODk0ZmRlMmIpLAorICAgIFU2NF9DKDB4ODEyNDczNGZhODUzYjgyNyksIFU2NF9DKDB4NjE0YjFmZGY0M2U2YjFiMCksCisgICAgVTY0X0MoMHg2OGFjMzk1YzQyMzhjYzE4KSwgVTY0X0MoMHgyMWQ4MzdiZmQ3ZjdiN2QyKSwKKyAgICBVNjRfQygweDIwYzcxNDMwNGE4NjAzMzEpLCBVNjRfQygweDVjZmFhYjcyNjMyNGFhMTQpLAorICAgIFU2NF9DKDB4NzRjNWJhNGViNTBkNjA2ZSksIFU2NF9DKDB4ZjNhMzAzMDQ3NDY1NDczOSksCisgICAgVTY0X0MoMHgyM2U2NzFiY2YwMTVjMjA5KSwgVTY0X0MoMHg0NWYwODdlOTQ3Yjk1ODJhKSwKKyAgICBVNjRfQygweGQ4YmQ3N2I0MThkZjRjN2IpLCBVNjRfQygweGUwNmY2YzkwZWJiNTA5OTcpLAorICAgIFU2NF9DKDB4MGJkOTYwODAyNjNjMDg3MyksIFU2NF9DKDB4N2UwM2Y5NDEwZTQwZGNmZSksCisgICAgVTY0X0MoMHhiOGU5NGJlNGM2NDg0OTI4KSwgVTY0X0MoMHhmYjViMDYwOGU4Y2E4ZTcyKSwKKyAgICBVNjRfQygweDFhMmI0OTE3OWUwZTMzMDYpLCBVNjRfQygweDRlMjllNzY5NjE4NTUwNTkpLAorICAgIFU2NF9DKDB4NGYzNmM0ZTZmY2Y0ZTRiYSksIFU2NF9DKDB4NDk3NDBlZTM5NWNmN2JjYSksCisgICAgVTY0X0MoMHhjMjk2M2VhMzg2ZDE3ZjdkKSwgVTY0X0MoMHg5MGQ2NWFkODEwNjE4MzUyKSwKKyAgICBVNjRfQygweDEyZDM0YzFiMDJhMWZhNGQpLCBVNjRfQygweGZhNDQyNTg3NzViYjNhOTEpLAorICAgIFU2NF9DKDB4MTgxNTBmMTRiOWVjNDZkZCksIFU2NF9DKDB4MTQ5MTg2MWU2YjlhNjUzZCksCisgICAgVTY0X0MoMHg5YTEwMTlkN2FiMmMzZmMyKSwgVTY0X0MoMHgzNjY4ZDQyZDA2ZmUxM2Q3KSwKKyAgICBVNjRfQygweGRjYzFmYmIyNTYwNmE2ZDApLCBVNjRfQygweDk2OTQ5MGRkNzk1YTFjMjIpLAorICAgIFU2NF9DKDB4MzU0OWIxYTFiYzZkZDJlZiksIFU2NF9DKDB4Yzk0ZjVlMjNhMGVkNzcwZSksCisgICAgVTY0X0MoMHhiOWY2Njg2YjViMzlmZGNiKSwgVTY0X0MoMHhjNGQ0ZjRhNmVmZWFlMDBkKSwKKyAgICBVNjRfQygweGU3MzI4NTFhMWZmZjIyMDQpLCBVNjRfQygweDk0YWFkNmRlNWViODY5ZjkpLAorICAgIFU2NF9DKDB4M2Y4ZmYyYWUwNzIwNmU3ZiksIFU2NF9DKDB4ZmUzOGE5ODEzYjYyZDAzYSksCisgICAgVTY0X0MoMHhhN2ExYWQ3YThiZWUyNDY2KSwgVTY0X0MoMHg3YjYwNTZjOGRkZTg4MmI2KSwKKyAgICBVNjRfQygweDMwMmExZTI4NmZjNThjYTcpLCBVNjRfQygweDhkYTBmYTQ1N2EyNTliYzcpLAorICAgIFU2NF9DKDB4YjMzMDJiNjRlMDc0NDE1YiksIFU2NF9DKDB4NTQwMmFlN2VmZjhiNjM1ZiksCisgICAgVTY0X0MoMHgwOGY4MDUwYzljYWZjOTRiKSwgVTY0X0MoMHhhZTQ2OGJmOThhMzA1OWNlKSwKKyAgICBVNjRfQygweDg4YzM1NWNjYTk4ZGM1OGYpLCBVNjRfQygweGIxMGU2ZDY3Yzc5NjM0ODApLAorICAgIFU2NF9DKDB4YmFkNzBkZTdlMWFhM2NmMyksIFU2NF9DKDB4YmZiNGEyNmUzMjAyNjJiYiksCisgICAgVTY0X0MoMHhjYjcxMTgyMDg3MGYwMmQ1KSwgVTY0X0MoMHhjZTEyYjdhOTU0YTc1YzlkKSwKKyAgICBVNjRfQygweDU2M2NlODdkZDg2OTE2ODQpLCBVNjRfQygweDlmNzNiNjVlNzg4NDYxOGEpLAorICAgIFU2NF9DKDB4MmIxZTc0YjA2Y2JhMGI0MiksIFU2NF9DKDB4NDdjZWMxZWE2MDViMmRmMSksCisgICAgVTY0X0MoMHgxYzY5ODMxMmY3MzVhYzc2KSwgVTY0X0MoMHg1ZmRiY2VmZWQ5Yjc2YjJjKSwKKyAgICBVNjRfQygweDgzMWEzNTRjOGZiMWNkZmMpLCBVNjRfQygweDgyMDUxNmMzMTJjMDc5MWYpLAorICAgIFU2NF9DKDB4Yjc0Y2E3NjJhZWFkYWJmMCksIFU2NF9DKDB4ZmMwNmVmODIxYzgwYTVlMSksCisgICAgVTY0X0MoMHg1NzIzY2JmMjQ1MThhMjY3KSwgVTY0X0MoMHg5ZDRkZjA1ZDVmNjYxNDUxKSwKKyAgICBVNjRfQygweDU4ODYyNzc0MmRmZDQwYmYpLCBVNjRfQygweGRhODMzMWI3M2YzZDM5YTApLAorICAgIFU2NF9DKDB4MTdiMGUzOTJkMTA5YTQwNSksIFU2NF9DKDB4Zjk2NTQwMGJjZjI4ZmJhOSksCisgICAgVTY0X0MoMHg3YzNkYmY0MjI5YTJhOTI1KSwgVTY0X0MoMHgwMjNlNDYwMzI3ZTI3NWRiKSwKKyAgICBVNjRfQygweDZjZDBiNTVhMGNlMTI2YjMpLCBVNjRfQygweGU2MmRhNjk1ODI4ZTk2ZTcpLAorICAgIFU2NF9DKDB4NDJhZDZlNjNiM2YzNzNiOSksIFU2NF9DKDB4ZTUwY2MzMTkzODFkNTdkZiksCisgICAgVTY0X0MoMHhjNWNiZDcyOTcyOWI1NGVlKSwgVTY0X0MoMHg0NmQxZTI2NWZkMmE5OTEyKSwKKyAgICBVNjRfQygweDY0MjhiMDU2OTA0ZWVmZjgpLCBVNjRfQygweDhiZTIzMDQwMTMxZTA0YjcpLAorICAgIFU2NF9DKDB4NjcwOWQ1ZGEyYWRkMmVjMCksIFU2NF9DKDB4MDc1ZGU5OGFmNDRhMmI5MyksCisgICAgVTY0X0MoMHg4NDQ3ZGNjNjdiZmJlNjZmKSwgVTY0X0MoMHg2NjE2ZjY1NWI3YWM5YTIzKSwKKyAgICBVNjRfQygweGQ2MDdiOGJkZWQ0YjFhNDApLCBVNjRfQygweDA1NjNhZjg5ZDNhODVlNDgpLAorICAgIFU2NF9DKDB4M2RiMWI0YWQyMGMyMWJhNCksIFU2NF9DKDB4MTFmMjI5OTdiODMyM2I3NSksCisgICAgVTY0X0MoMHgyOTIwMzJiMzRiNTg3ZTk5KSwgVTY0X0MoMHg3ZjFjZGFjZTkzMzE2ODFkKSwKKyAgICBVNjRfQygweDhlODE5ZmM5YzBiNjVhZmYpLCBVNjRfQygweGExZTM2NzdmZTJkNWJiMTYpLAorICAgIFU2NF9DKDB4Y2QzM2QyMjVlZTM0OWRhNSksIFU2NF9DKDB4ZDlhMjU0M2I4NWFlZjg5OCksCisgICAgVTY0X0MoMHg3OTVlMTBjYmZhMGFmNzZkKSwgVTY0X0MoMHgyNWE0YmJiOTk5MmU1ZDc5KSwKKyAgICBVNjRfQygweDc4NDEzMzQ0Njc3YjQzOGUpLCBVNjRfQygweGYwODI2Njg4Y2VmNjg2MDEpLAorICAgIFU2NF9DKDB4ZDI3YjM0YmJhMzkyZjBlYiksIFU2NF9DKDB4NTUxZDhkZjE2MmZhZDdiYyksCisgICAgVTY0X0MoMHgxZTU3YzUxMWQwZDdkOWFkKSwgVTY0X0MoMHhkZWZmYmRiMTcxZTRkMzBiKSwKKyAgICBVNjRfQygweGY0ZmVlYThlODAyZjZjYWEpLCBVNjRfQygweGE0ODBjOGY2MzE3ZGU1NWUpLAorICAgIFU2NF9DKDB4YTBmYzQ0ZjA3ZmE0MGZmNSksIFU2NF9DKDB4OTViNWY1NTFjM2M5ZGQxYSksCisgICAgVTY0X0MoMHgyMmY5NTIzMzZkNjQ3NmVhKSwgVTY0X0MoMHgwMDAwMDAwMDAwMDAwMDAwKSwKKyAgICBVNjRfQygweGE2YmU4ZWY1MTY5ZjkwODUpLCBVNjRfQygweGNjMmNmMWFhNzM0NTI5NDYpLAorICAgIFU2NF9DKDB4MmU3ZGRiMzliZjEyNTUwYSksIFU2NF9DKDB4ZDUyNmRkMzE1N2Q4ZGI3OCksCisgICAgVTY0X0MoMHg0ODZiMmQ2YzA4YmVjZjI5KSwgVTY0X0MoMHg5YjBmM2E1ODM2NWQ4YjIxKSwKKyAgICBVNjRfQygweGFjNzhjZGZhYWRkMjJjMTUpLCBVNjRfQygweGJjOTVjN2UyODg5MWEzODMpLAorICAgIFU2NF9DKDB4NmE5MjdmNWY2NWRhYjljMyksIFU2NF9DKDB4YzM4OTFkMmMxYmEwY2I5ZSksCisgICAgVTY0X0MoMHhlYWE5MmY5ZjUwZjhiNTA3KSwgVTY0X0MoMHhjZjBkOTQyNmM5ZDZlODdlKSwKKyAgICBVNjRfQygweGNhNmUzYmFmMWE3ZWI2MzYpLCBVNjRfQygweGFiMjUyNDcwNTk5ODA3ODYpLAorICAgIFU2NF9DKDB4NjliMzFhZDNkZjQ5NzhmYiksIFU2NF9DKDB4ZTI1MTJhOTNjYzU3N2M0YyksCisgICAgVTY0X0MoMHhmZjI3OGEwZWE2MTM2NGQ5KSwgVTY0X0MoMHg3MWE2MTVjNzY2YTUzZTI2KSwKKyAgICBVNjRfQygweDg5ZGM3NjQzMzRmYzcxNmMpLCBVNjRfQygweGY4N2E2Mzg0NTI1OTRmNGEpLAorICAgIFU2NF9DKDB4ZjJiYzIwOGJlOTE0ZjNkYSksIFU2NF9DKDB4ODc2NmI5NGFjMTY4Mjc1NyksCisgICAgVTY0X0MoMHhiYmM4MmU2ODdjZGI4ODEwKSwgVTY0X0MoMHg2MjZhN2E1M2Y5NzU3MDg4KSwKKyAgICBVNjRfQygweGEyYzIwMmYzNTg0NjdhMmUpLCBVNjRfQygweDRkMDg4MmU1ZGIxNjkxNjEpLAorICAgIFU2NF9DKDB4MDllNzI2ODMwMWRlN2RhOCksIFU2NF9DKDB4ZTg5NzY5OWM3NzFhYzBkYyksCisgICAgVTY0X0MoMHhjODUwN2RhYzNkOWNjM2VkKSwgVTY0X0MoMHhjMGE4NzhhMGExMzMwYWE2KSwKKyAgICBVNjRfQygweDk3OGJiMzUyZTQyYmE4YzEpLCBVNjRfQygweGU5ODg0YTEzZWE2Yjc0M2YpLAorICAgIFU2NF9DKDB4Mjc5YWZkYmFiZWNjMjhhMiksIFU2NF9DKDB4MDQ3YzhjMDY0ZWQ5ZWFhYiksCisgICAgVTY0X0MoMHg1MDdlMjI3OGIxNTI4OWY0KSwgVTY0X0MoMHg1OTk5MDRmYmIwOGNmNDVjKSwKKyAgICBVNjRfQygweGJkOGFlNDZkMTVlMDE3NjApLCBVNjRfQygweDMxMzUzZGE3ZjJiNDM4NDQpLAorICAgIFU2NF9DKDB4ODU1OGZmNDllNjhhNTI4YyksIFU2NF9DKDB4NzZmYmZjNGQ5MmVmMTViNSksCisgICAgVTY0X0MoMHgzNDU2OTIyZTIxMWM2NjBjKSwgVTY0X0MoMHg4Njc5OWFjNTVjMTk5M2I0KSwKKyAgICBVNjRfQygweDNlOTBkMTIxOWE1MWRhOWMpLCBVNjRfQygweDJkNWNiZWI1MDU4MTk0MzIpLAorICAgIFU2NF9DKDB4OTgyZTVmZDQ4Y2NlNGExOSksIFU2NF9DKDB4ZGI5YzEyMzhhMjRjOGQ0MyksCisgICAgVTY0X0MoMHhkNDM5ZmViZWNhYTk2ZjliKSwgVTY0X0MoMHg0MThjMGJlZjA5NjBiMjgxKSwKKyAgICBVNjRfQygweDE1OGVhNTkxZjZlYmQxZGUpLCBVNjRfQygweDFmNDhlNjllNGRhNjZkNGUpLAorICAgIFU2NF9DKDB4OGFmZDEzY2Y4ZTZmYjA1NCksIFU2NF9DKDB4ZjVlMWM5MDExZDVlZDg0OSksCisgICAgVTY0X0MoMHhlMzRlMDkxYzUxMjZjOGFmKSwgVTY0X0MoMHhhZDY3ZWU3NTMwYTM5OGY2KSwKKyAgICBVNjRfQygweDQzYjI0ZGVjMmU4MmM3NWEpLCBVNjRfQygweDc1ZGE5OWMxMjg3Y2Q0OGQpLAorICAgIFU2NF9DKDB4OTJlODFjZGIzNzgzZjY4OSksIFU2NF9DKDB4YTNkZDIxN2NjNTM3Y2VjZCksCisgICAgVTY0X0MoMHg2MDU0M2M1MGRlOTcwNTUzKSwgVTY0X0MoMHg5M2Y3M2Y1NGFhZjI0MjZhKSwKKyAgICBVNjRfQygweGE5MWI2MjczN2U3YTcyNWQpLCBVNjRfQygweGYxOWQ0NTA3NTM4NzMyZTIpLAorICAgIFU2NF9DKDB4NzdlNGRmYzIwZjllYTE1NiksIFU2NF9DKDB4N2QyMjljY2RiNGQzMWRjNiksCisgICAgVTY0X0MoMHgxYjM0NmE5ODAzN2Y4N2U1KSwgVTY0X0MoMHhlZGY0YzYxNWE0YjI5ZTk0KSwKKyAgICBVNjRfQygweDQwOTMyODYwOTQxMTA2NjIpLCBVNjRfQygweGIwMTE0ZWU4NWFlNzgwNjMpLAorICAgIFU2NF9DKDB4NmZmMWQwZDZiNjcyZTc4YiksIFU2NF9DKDB4NmRjZjk2ZDU5MTkwOTI1MCksCisgICAgVTY0X0MoMHhkZmUwOWUzZWVjOTU2N2U4KSwgVTY0X0MoMHgzMjE0NTgyYjQ4MjdmOTdjKSwKKyAgICBVNjRfQygweGI0NmRjMmVlMTQzZTZhYzgpLCBVNjRfQygweGY2YzBhYzhkYTdjZDE5NzEpLAorICAgIFU2NF9DKDB4ZWJiNjBjMTBjZDg5MDFlNCksIFU2NF9DKDB4ZjdkZjhmMDIzYWJjYWQ5MiksCisgICAgVTY0X0MoMHg5YzUyZDNkMmMyMTdhMGIyKSwgVTY0X0MoMHg2YjhkNWNkMGY4YWIwZDIwKSwKKyAgICBVNjRfQygweDM3NzdmN2EyOWI4ZmE3MzQpLCBVNjRfQygweDAxMWYyMzhmOWQ3MWI0ZTMpLAorICAgIFU2NF9DKDB4YzFiNzViMmYzYzQyYmU0NSksIFU2NF9DKDB4NWRlNTg4ZmRmZTU1MWVmNyksCisgICAgVTY0X0MoMHg2ZWVlZjM1OTJiMDM1MzY4KSwgVTY0X0MoMHhhYTNhMDdmZmM0ZTliMzY1KSwKKyAgICBVNjRfQygweGVjZWJlNTlhMzljMzJhNzcpLCBVNjRfQygweDViYTc0MmY4OTc2ZTgxODcpLAorICAgIFU2NF9DKDB4NGI0YTQ4ZTBiMjJkMGUxMSksIFU2NF9DKDB4ZGRkZWQ4M2RjYjc3MTIzMyksCisgICAgVTY0X0MoMHhhNTlmZWI3OWFjMGM1MWJkKSwgVTY0X0MoMHhjN2Y1OTEyYTU1NzkyMTM1KSB9LAorICAvKiA1ICovCisgIHsgVTY0X0MoMHg2ZDZhZTA0NjY4YTliMDhhKSwgVTY0X0MoMHgzYWIzZjA0YjBiZThjNzQzKSwKKyAgICBVNjRfQygweGU1MWUxNjZiNTRiM2M5MDgpLCBVNjRfQygweGJlOTBhOWViMzVjMmYxMzkpLAorICAgIFU2NF9DKDB4YjJjNzA2NjYzN2YyYmVjMSksIFU2NF9DKDB4YWE2OTQ1NjEzMzkyMjAyYyksCisgICAgVTY0X0MoMHg5YTI4YzM2ZjNiNTIwMWViKSwgVTY0X0MoMHhkZGNlNWE5M2FiNTM2OTk0KSwKKyAgICBVNjRfQygweDBlMzQxMzNlZjYzODI4MjcpLCBVNjRfQygweDUyYTAyYmExZWM1NTA0OGIpLAorICAgIFU2NF9DKDB4YTJmODhmOTdjNGIyYTE3NyksIFU2NF9DKDB4ODY0MGU1MTNjYTIyNTFhNSksCisgICAgVTY0X0MoMHhjZGYxZDM2MjU4MTM3NjIyKSwgVTY0X0MoMHhmZTZjYjcwOGRlZGY4ZGRiKSwKKyAgICBVNjRfQygweDhhMTc0YTllYzgxMjFlNWQpLCBVNjRfQygweDY3OTg5NjAzNmI4MTU2MGUpLAorICAgIFU2NF9DKDB4NTllZDAzMzM5NTc5NWZlZSksIFU2NF9DKDB4MWRkNzc4YWI4Yjc0ZWRhZiksCisgICAgVTY0X0MoMHhlZTUzM2VmOTJkOWY5MjZkKSwgVTY0X0MoMHgyYThjNzliYWY4YThkOGY1KSwKKyAgICBVNjRfQygweDZiY2YzOThlNjliMTE5ZjYpLCBVNjRfQygweGUyMDQ5MTc0MmZhZmRkOTUpLAorICAgIFU2NF9DKDB4Mjc2NDg4ZTA4MDljMmFlYyksIFU2NF9DKDB4ZWE5NTViODJkODhmNWNjZSksCisgICAgVTY0X0MoMHg3MTAyYzYzYTk5ZDllMGM0KSwgVTY0X0MoMHhmOTc2MzAxN2E1YzM5OTQ2KSwKKyAgICBVNjRfQygweDQyOWZhMjUwMWYxNTFiM2QpLCBVNjRfQygweDQ2NTljNzJiZWEwNWQ1OWUpLAorICAgIFU2NF9DKDB4OTg0YjdmZGNjZjVhNjYzNCksIFU2NF9DKDB4Zjc0MjIzMjk1M2ZiYjE2MSksCisgICAgVTY0X0MoMHgzMDQxODYwZTA4YzAyMWM3KSwgVTY0X0MoMHg3NDdiZmQ5NjE2Y2Q5Mzg2KSwKKyAgICBVNjRfQygweDRiYjEzNjcxOTIzMTI3ODcpLCBVNjRfQygweDFiNzJhMTYzOGE2YzQ0ZDMpLAorICAgIFU2NF9DKDB4NGEwZTY4YTZlODM1OWE2NiksIFU2NF9DKDB4MTY5YTUwMzlmMjU4YjZjYSksCisgICAgVTY0X0MoMHhiOThhMmVmNDRlZGVlNWE0KSwgVTY0X0MoMHhkOTA4M2ZlODVlNDNhNzM3KSwKKyAgICBVNjRfQygweDk2N2Y2Y2UyMzk2MjRlMTMpLCBVNjRfQygweDg4NzRmNjJkM2MxYTc5ODIpLAorICAgIFU2NF9DKDB4M2MxNjI5ODMwYWYwNmUzZiksIFU2NF9DKDB4OTE2NWViZmQ0MjdlNWE4ZSksCisgICAgVTY0X0MoMHhiNWRkODE3OTRjZWVhYTVjKSwgVTY0X0MoMHgwZGU4ZjE1YTc4MzRmMjE5KSwKKyAgICBVNjRfQygweDcwYmQ5OGVkZTNkZDVkMjUpLCBVNjRfQygweGFjY2M5Y2E5MzI4YTg5NTApLAorICAgIFU2NF9DKDB4NTY2NjRlZGExOTQ1Y2EyOCksIFU2NF9DKDB4MjIxZGIzNGMwZjg4NTlhZSksCisgICAgVTY0X0MoMHgyNmRiZDYzN2ZhOTg5NzBkKSwgVTY0X0MoMHgxYWNkZmZiNGYwNjhmOTMyKSwKKyAgICBVNjRfQygweDQ1ODUyNTRmNjQwOTBmYTApLCBVNjRfQygweDcyZGUyNDVlMTdkNTNhZmEpLAorICAgIFU2NF9DKDB4MTU0NmIyNWQ3YzU0NmNmNCksIFU2NF9DKDB4MjA3ZTBmZmZmYjgwM2U3MSksCisgICAgVTY0X0MoMHhmYWFhZDI3MzJiY2Y0Mzc4KSwgVTY0X0MoMHhiNDYyZGZhZTM2ZWExN2JkKSwKKyAgICBVNjRfQygweGNmOTI2ZmQxYWMxYjExZmQpLCBVNjRfQygweGUwNjcyZGM3ZGJhN2JhNGEpLAorICAgIFU2NF9DKDB4ZDNmYTQ5YWQ1ZDZiNDFiMyksIFU2NF9DKDB4OGJhODE0NDliMjE2YTNiYyksCisgICAgVTY0X0MoMHgxNGY5ZWM4YTA2NTBkMTE1KSwgVTY0X0MoMHg0MGZjMWVlM2ViMWQ3Y2UyKSwKKyAgICBVNjRfQygweDIzYTJlZDliNzU4Y2U0NGYpLCBVNjRfQygweDc4MmM1MjFiMTRmZGRjN2UpLAorICAgIFU2NF9DKDB4MWM2ODI2N2NmMTcwNTA0ZSksIFU2NF9DKDB4YmNmMzE1NThjMWNhOTZlNiksCisgICAgVTY0X0MoMHhhNzgxYjQzYjRiYTZkMjM1KSwgVTY0X0MoMHhmNmZkN2RmZTI5ZmYwYzgwKSwKKyAgICBVNjRfQygweGIwYTRiYWQ1YzNmYWQ5MWUpLCBVNjRfQygweGQxOTlmNTFlYTk2MzI2NmMpLAorICAgIFU2NF9DKDB4NDE0MzQwMzQ5MTE5YzEwMyksIFU2NF9DKDB4NTQwNWYyNjllZDRkYWRmNyksCisgICAgVTY0X0MoMHhhYmQ2MWJiNjQ5OTY5ZGNkKSwgVTY0X0MoMHg2ODEzZGJlYWU3YmRjM2M4KSwKKyAgICBVNjRfQygweDY1ZmIyYWIwOWY4OTMxZDEpLCBVNjRfQygweGYxZTdmYWUxNTJlMzE4MWQpLAorICAgIFU2NF9DKDB4YzFhNjdjZWY1YTIzMzlkYSksIFU2NF9DKDB4N2E0ZmVlYThlMGY1YmJhMSksCisgICAgVTY0X0MoMHgxZTBiOWFjZjA1NzgzNzkxKSwgVTY0X0MoMHg1YjhlYmY4MDYxNzEzODMxKSwKKyAgICBVNjRfQygweDgwZTUzY2RiY2IzYWY4ZDkpLCBVNjRfQygweDdlODk4YmQzMTVlNTc1MDIpLAorICAgIFU2NF9DKDB4YzZiY2ZiZjAyMTNmMmQ0NyksIFU2NF9DKDB4OTVhMzhlODZiNzZlOTQyZCksCisgICAgVTY0X0MoMHgwOTJlOTQyMThkMjQzY2JhKSwgVTY0X0MoMHg4MzM5ZGViZjQ1MzYyMmU3KSwKKyAgICBVNjRfQygweGIxMWJlNDAyYjlmZTY0ZmYpLCBVNjRfQygweDU3ZDkxMDBkNjM0MTc3YzkpLAorICAgIFU2NF9DKDB4Y2M0ZThkYjUyMjE3Y2JjMyksIFU2NF9DKDB4M2IwY2FlOWM3MWVjN2FhMiksCisgICAgVTY0X0MoMHhmYjE1OGNhNDUxY2JmZTk5KSwgVTY0X0MoMHgyYjMzMjc2ZDgyYWM2NTE0KSwKKyAgICBVNjRfQygweDAxYmY1ZWQ3N2EwNGJkZTEpLCBVNjRfQygweGM1NjAxOTk0YWYzM2Y3NzkpLAorICAgIFU2NF9DKDB4NzVjNGEzNDE2Y2M5MmU2NyksIFU2NF9DKDB4ZjM4NDQ2NTJhNmViN2ZjMiksCisgICAgVTY0X0MoMHgzNDg3ZTM3NWZkZDBlZjY0KSwgVTY0X0MoMHgxOGFlNDMwNzA0NjA5ZWVkKSwKKyAgICBVNjRfQygweDRkMTRlZmI5OTMyOThlZmIpLCBVNjRfQygweDgxNWE2MjBjYjEzZTQ1MzgpLAorICAgIFU2NF9DKDB4MTI1YzM1NDIwNzQ4Nzg2OSksIFU2NF9DKDB4OWVlZWE2MTRjZTQyY2Y0OCksCisgICAgVTY0X0MoMHhjZTJkMzEwNmQ2MWZhYzFjKSwgVTY0X0MoMHhiYmU5OTI0N2JhZDY4MjdiKSwKKyAgICBVNjRfQygweDA3MWE4NzFmN2IxYzE0OWQpLCBVNjRfQygweDJlNGExY2MxMGRiODE2NTYpLAorICAgIFU2NF9DKDB4NzdhNzFmZjI5OGMxNDliOCksIFU2NF9DKDB4MDZhNWQ5YzgwMTE4YTk3YyksCisgICAgVTY0X0MoMHhhZDczYzI3ZTQ4OGUzNGIxKSwgVTY0X0MoMHg0NDNhN2I5ODFlMGRiMjQxKSwKKyAgICBVNjRfQygweGUzYmJjZmEzNTVhYjYwNzQpLCBVNjRfQygweDBhZjI3NjQ1MDMyOGU2ODQpLAorICAgIFU2NF9DKDB4NzM2MTdhODk2ZGQxODcxYiksIFU2NF9DKDB4NTg1MjVkZTRlZjdkZTIwZiksCisgICAgVTY0X0MoMHhiN2JlM2RjYWI4ZTZjZDgzKSwgVTY0X0MoMHgxOTExMWRkMDdlNjQyMzBjKSwKKyAgICBVNjRfQygweDg0MjM1OWEwM2UyYTM2N2EpLCBVNjRfQygweDEwM2Y4OWYxZjM0MDFmYjYpLAorICAgIFU2NF9DKDB4ZGM3MTA0NDRkMTU3ZDQ3NSksIFU2NF9DKDB4YjgzNTcwMjMzNGRhNTg0NSksCisgICAgVTY0X0MoMHg0MzIwZmM4NzY1MTFhNmRjKSwgVTY0X0MoMHhkMDI2YWJjOWQzNjc5YjhkKSwKKyAgICBVNjRfQygweDE3MjUwZWVlODg1YzBiMmIpLCBVNjRfQygweDkwZGFiNTJhMzg3YWU3NmYpLAorICAgIFU2NF9DKDB4MzFmZWQ4ZDk3MmM0OWMyNiksIFU2NF9DKDB4ODljYmE4ZmE0NjFlYzQ2MyksCisgICAgVTY0X0MoMHgyZmY1NDIxNjc3YmNhYmI3KSwgVTY0X0MoMHgzOTZmMTIyZjg1ZTQxZDdkKSwKKyAgICBVNjRfQygweGEwOWIzMzI0MzBiYWM2YTgpLCBVNjRfQygweGM4ODhlOGNlZDcwNzA1NjApLAorICAgIFU2NF9DKDB4YWVhZjIwMWFjNjgyZWU4ZiksIFU2NF9DKDB4MTE4MGQ3MjY4OTQ0YTI1NyksCisgICAgVTY0X0MoMHhmMDU4YTQzNjI4ZTdhNWZjKSwgVTY0X0MoMHhiZDRjNGI4ZmJiY2UyYjA3KSwKKyAgICBVNjRfQygweGExMjQ2ZGYzNGFiZTdiNDkpLCBVNjRfQygweDdkNTU2OWI3OWJlOWFmM2MpLAorICAgIFU2NF9DKDB4YTliNWE3MDViZDllZmExMiksIFU2NF9DKDB4ZGI2YjgzNWJhYTRiYzBlOCksCisgICAgVTY0X0MoMHgwNTc5M2JhYzhmMTQ3MzQyKSwgVTY0X0MoMHgyMWMxNTEyODgxODQ4MzkwKSwKKyAgICBVNjRfQygweGZkYjA1NTZjNTBkMzU3ZTUpLCBVNjRfQygweDYxM2Q0ZmNiNmE5OWZmNzIpLAorICAgIFU2NF9DKDB4MDNkY2UyNjQ4ZTBjZGEzZSksIFU2NF9DKDB4ZTk0OWI5ZTY1NjgzODZmMCksCisgICAgVTY0X0MoMHhmYzBmMGJiYjJhZDdlYTA0KSwgVTY0X0MoMHg2YTcwNjc1OTEzYjVhNDE3KSwKKyAgICBVNjRfQygweDdmMzZkNTA0NmZlMWM4ZTMpLCBVNjRfQygweDBjNTdhZjhkMDIzMDRmZjgpLAorICAgIFU2NF9DKDB4MzIyMjNhYmRmY2M4NDYxOCksIFU2NF9DKDB4MDg5MWNhZjZmNzIwODE1YiksCisgICAgVTY0X0MoMHhhNjNlZWFlYzMxYTI2ZmQ0KSwgVTY0X0MoMHgyNTA3MzQ1Mzc0OTQ0ZDMzKSwKKyAgICBVNjRfQygweDQ5ZDI4YWMyNjYzOTQwNTgpLCBVNjRfQygweGY1MjE5ZjlhYTdmM2Q2YmUpLAorICAgIFU2NF9DKDB4MmQ5NmZlYTU4M2I0Y2M2OCksIFU2NF9DKDB4NWEzMWUxNTcxYjc1ODVkMCksCisgICAgVTY0X0MoMHg4ZWQxMmZlNTNkMDJkMGZlKSwgVTY0X0MoMHhkZmFkZTYyMDVmNWIwZTRiKSwKKyAgICBVNjRfQygweDRjYWJiMTZlZTkyZDMzMWEpLCBVNjRfQygweDA0YzY2NTdiZjUxMGNlYTMpLAorICAgIFU2NF9DKDB4ZDczYzJjZDZhODdiOGYxMCksIFU2NF9DKDB4ZTFkODczMTBhMWEzMDdhYiksCisgICAgVTY0X0MoMHg2Y2Q1YmU5MTEyYWQwZDZiKSwgVTY0X0MoMHg5N2MwMzIzNTQzNjZmM2YyKSwKKyAgICBVNjRfQygweGQ0ZTBjZWIyMjY3NzU1MmUpLCBVNjRfQygweDAwMDAwMDAwMDAwMDAwMDApLAorICAgIFU2NF9DKDB4Mjk1MDliZGU3NmE0MDJjYiksIFU2NF9DKDB4YzI3YTllOGJkNDJmZTNlNCksCisgICAgVTY0X0MoMHg1ZWY3ODQyY2VlNjU0YjczKSwgVTY0X0MoMHhhZjEwN2VjZGJjODY1MzZlKSwKKyAgICBVNjRfQygweDNmY2FjYmU3ODRmY2I0MDEpLCBVNjRfQygweGQ1NWY5MDY1NWM3M2U4Y2YpLAorICAgIFU2NF9DKDB4ZTZjMmY0MGZkYWJmMTMzNiksIFU2NF9DKDB4ZThmNmU3MzEyYzg3M2IxMSksCisgICAgVTY0X0MoMHhlYjJhMDU1NWEyOGJlMTJmKSwgVTY0X0MoMHhlNGExNDhiYzJlYjc3NGU5KSwKKyAgICBVNjRfQygweDliOTc5ZGI4NDE1NmJjMGEpLCBVNjRfQygweDZlYjYwMjIyZTZhNTZhYjQpLAorICAgIFU2NF9DKDB4ODdmZmJiYzRiMDI2ZWM0NCksIFU2NF9DKDB4YzcwM2E1Mjc1YjNiOTBhNiksCisgICAgVTY0X0MoMHg0N2U2OTlmYzkwMDE2ODdmKSwgVTY0X0MoMHg5YzhkMWFhNzNhNGFhODk3KSwKKyAgICBVNjRfQygweDdjZWEzNzYwZTFlZDEyZGQpLCBVNjRfQygweDRlYzgwZGRkMWQyNTU0YzUpLAorICAgIFU2NF9DKDB4MTNlMzZiOTU3ZDRjYzU4OCksIFU2NF9DKDB4NWQyYjY2NDg2MDY5OTE0ZCksCisgICAgVTY0X0MoMHg5MmI5MDk5OWNjNzI4MGIwKSwgVTY0X0MoMHg1MTdjYzljNTYyNTlkZWI1KSwKKyAgICBVNjRfQygweGM5MzdiNjE5YWQwM2I4ODEpLCBVNjRfQygweGVjMzA4MjRhZDk5N2Y1YjIpLAorICAgIFU2NF9DKDB4YTQ1ZDU2NWZjNWFhMDgwYiksIFU2NF9DKDB4ZDY4MzcyMDFkMjdmMzJmMSksCisgICAgVTY0X0MoMHg2MzVlZjM3ODllOTE5OGFkKSwgVTY0X0MoMHg1MzFmNzU3Njk2NTFiOTZhKSwKKyAgICBVNjRfQygweDRmNzc1MzBhNjcyMWU5MjQpLCBVNjRfQygweDQ4NmRkNDE1MWMzZGZkYjkpLAorICAgIFU2NF9DKDB4NWY0OGRhZmI5NDYxZjY5MiksIFU2NF9DKDB4Mzc1YjAxMTE3M2RjMzU1YSksCisgICAgVTY0X0MoMHgzZGE5Nzc1NDcwZjRkM2RlKSwgVTY0X0MoMHg4ZDBkY2Q4MWIzMGUwYWMwKSwKKyAgICBVNjRfQygweDM2ZTQ1ZmM2MDlkODg4YmIpLCBVNjRfQygweDU1YmFhY2JlOTc0OTEwMTYpLAorICAgIFU2NF9DKDB4OGNiMjkzNTZjOTBhYjcyMSksIFU2NF9DKDB4NzYxODQxMjVlMmM1ZjQ1OSksCisgICAgVTY0X0MoMHg5OWY0MjEwYmI1NWVkYmQ1KSwgVTY0X0MoMHg2ZjA5NWNmNTljYTFkNzU1KSwKKyAgICBVNjRfQygweDlmNTFmOGMzYjQ0NjcyYTkpLCBVNjRfQygweDM1MzhiZGEyODdkNDUyODUpLAorICAgIFU2NF9DKDB4NTBjMzk3MTIxODVkNjM1NCksIFU2NF9DKDB4ZjIzYjE4ODVkY2VmYzIyMyksCisgICAgVTY0X0MoMHg3OTkzMGNjYzZlZjk2MTlmKSwgVTY0X0MoMHhlZDhmZGM5ZGEzOTM0ODUzKSwKKyAgICBVNjRfQygweGNiNTQwYWFhNTkwYmRmNWUpLCBVNjRfQygweDVjOTQzODlmMWE2ZDJjYWMpLAorICAgIFU2NF9DKDB4ZTc3ZGFhZDhhMGJiYWVkNyksIFU2NF9DKDB4MjhlZmM1MDkwY2EwYmYyYSksCisgICAgVTY0X0MoMHhiZjJmZjczYzRmYzY0Y2Q4KSwgVTY0X0MoMHhiMzc4NThiMTRkZjYwMzIwKSwKKyAgICBVNjRfQygweGY4Yzk2ZWMwZGZjNzI0YTcpLCBVNjRfQygweDgyODY4MDY4M2YzMjlmMDYpLAorICAgIFU2NF9DKDB4OTQxY2QwNTFjZDZhMjljYyksIFU2NF9DKDB4YzNjNWMwNWNhZTJiNWUwNSksCisgICAgVTY0X0MoMHhiNjAxNjMxZGMyZTI3MDYyKSwgVTY0X0MoMHhjMDE5MjIzODIwMjc4NDNiKSwKKyAgICBVNjRfQygweDI0Yjg2YTg0MGU5MGYwZDIpLCBVNjRfQygweGQyNDUxNzdhMjc2ZmZjNTIpLAorICAgIFU2NF9DKDB4MGY4YjRkZTk4YzNjOTVjNiksIFU2NF9DKDB4M2U3NTk1MzBmZWY4MDllMCksCisgICAgVTY0X0MoMHgwYjRkMjg5Mjc5MmM1YjY1KSwgVTY0X0MoMHhjNGRmNDc0M2Q1Mzc0YTk4KSwKKyAgICBVNjRfQygweGE1ZTIwODg4YmZhZWI1ZWEpLCBVNjRfQygweGJhNTZjYzkwYzBkMjNmOWEpLAorICAgIFU2NF9DKDB4MzhkMDRjZjhmZmUwYTA5YyksIFU2NF9DKDB4NjJlMWFkYWZlNDk1MjU0YyksCisgICAgVTY0X0MoMHgwMjYzYmNiM2Y0MDg2N2RmKSwgVTY0X0MoMHhjYWViNTQ3ZDIzMGY2MmJmKSwKKyAgICBVNjRfQygweDYwODIxMTFjMTA5ZDQyOTMpLCBVNjRfQygweGRhZDRkZDhjZDA0ZjdkMDkpLAorICAgIFU2NF9DKDB4ZWZlYzYwMmU1NzliMmY4YyksIFU2NF9DKDB4MWZiNGM0MTg3ZjdjOGE3MCksCisgICAgVTY0X0MoMHhmZmQzZTlkZmE0ZGIzMDNhKSwgVTY0X0MoMHg3YmYwYjA3ZjlhZjEwNjQwKSwKKyAgICBVNjRfQygweGY0OWVjMTRkZGRmNzZiNWYpLCBVNjRfQygweDhmNmU3MTMyNDcwNjZkMWYpLAorICAgIFU2NF9DKDB4MzM5ZDY0NmE4NmNjZmJmOSksIFU2NF9DKDB4NjQ0NDc0NjdlNThkOGMzMCksCisgICAgVTY0X0MoMHgyYzI5YTA3MmY5YjA3MTg5KSwgVTY0X0MoMHhkOGI3NjEzZjI0NDcxYWQ2KSwKKyAgICBVNjRfQygweDY2MjdjOGQ0MTE4NWViZWYpLCBVNjRfQygweGEzNDdkMTQwYmViNjFjOTYpLAorICAgIFU2NF9DKDB4ZGUxMmI4ZjcyNTVmYjNhYSksIFU2NF9DKDB4OWQzMjQ0NzA0MDRlMTU3NiksCisgICAgVTY0X0MoMHg5MzA2NTc0ZWI2NzYzZDUxKSwgVTY0X0MoMHhhODBhZjlkMmM3OWE0N2YzKSwKKyAgICBVNjRfQygweDg1OWMwNzc3NDQyZThiOWIpLCBVNjRfQygweDY5YWM4NTNkOWRiOTdlMjkpIH0sCisgIC8qIDYgKi8KKyAgeyBVNjRfQygweGMzNDA3ZGZjMmRlNjM3N2UpLCBVNjRfQygweDViOWU5M2VlYTQyNTZmNzcpLAorICAgIFU2NF9DKDB4YWRiNThmZGQ1MGM4NDVlMCksIFU2NF9DKDB4NTIxOWZmMTFhNzViZWQ4NiksCisgICAgVTY0X0MoMHgzNTZiNjFjZmQ5MGIxZGU5KSwgVTY0X0MoMHhmYjhmNDA2ZTI1YWJlMDM3KSwKKyAgICBVNjRfQygweDdhNWEwMjMxYzBmNjA3OTYpLCBVNjRfQygweDlkM2NkMjE2ZTFmNTAyMGIpLAorICAgIFU2NF9DKDB4MGM2NTUwZmI2YjQ4ZDhmMyksIFU2NF9DKDB4ZjU3NTA4YzQyN2ZmMWM2MiksCisgICAgVTY0X0MoMHg0YWQzNWZmYTcxY2I0MDdkKSwgVTY0X0MoMHg2MjkwYTJkYTE2NjZhYTZkKSwKKyAgICBVNjRfQygweGUyODRlYzIzNDkzNTVmOWYpLCBVNjRfQygweGIzYzMwN2M1M2Q3Yzg0ZWMpLAorICAgIFU2NF9DKDB4MDVlMjNjMDQ2ODM2NWEwMiksIFU2NF9DKDB4MTkwYmFjNGQ2YzllYmZhOCksCisgICAgVTY0X0MoMHg5NGJiYmVlOWUyOGI4MGZhKSwgVTY0X0MoMHhhMzRmYzc3NzUyOWNiOWI1KSwKKyAgICBVNjRfQygweGNjN2IzOWYwOTViY2Q5NzgpLCBVNjRfQygweDI0MjZhZGRiMGNlNTMyZTMpLAorICAgIFU2NF9DKDB4N2U3OTMyOTMxMmNlNGZjNyksIFU2NF9DKDB4YWIwOWE3MmVlYmVjMjkxNyksCisgICAgVTY0X0MoMHhmOGQxNTQ5OWY2YjlkNmMyKSwgVTY0X0MoMHgxYTU1YjhiYWJmOGM4OTVkKSwKKyAgICBVNjRfQygweGRiOGFkZDE3ZmI3NjlhODUpLCBVNjRfQygweGI1N2YyZjM2ODY1OGU4MWIpLAorICAgIFU2NF9DKDB4OGFjZDM2ZjE4ZjNmNDFmNiksIFU2NF9DKDB4NWNlM2I3YmJhNTBmMTFkMyksCisgICAgVTY0X0MoMHgxMTRkY2MxNGQ1ZWUyZjBhKSwgVTY0X0MoMHhiOTFhN2ZjZGVkMTAzMGU4KSwKKyAgICBVNjRfQygweDgxZDU0MjVmZTU1ZGU3YTEpLCBVNjRfQygweGI2MjEzYmMxNTU0YWRlZWUpLAorICAgIFU2NF9DKDB4ODAxNDRlZjk1ZjUzZjVmMiksIFU2NF9DKDB4MWU3Njg4MTg2ZGI0YzEwYyksCisgICAgVTY0X0MoMHgzYjkxMjk2NWRiNWZlMWJjKSwgVTY0X0MoMHhjMjgxNzE1YTk3ZTgyNTJkKSwKKyAgICBVNjRfQygweDU0YTVkN2UyMWM3ZjgxNzEpLCBVNjRfQygweDRiMTI1MzVjY2JjNTUyMmUpLAorICAgIFU2NF9DKDB4MWQyODljZWZiZWE2ZjdmOSksIFU2NF9DKDB4NmVmNWYyMjE3ZDJlNzI5ZSksCisgICAgVTY0X0MoMHhlNmE3ZGM4MTliMGQxN2NlKSwgVTY0X0MoMHgxYjk0YjQxYzA1ODI5YjBlKSwKKyAgICBVNjRfQygweDMzZDc0OTNjNjIyZjcxMWUpLCBVNjRfQygweGRjZjdmOTQyZmE1Y2U0MjEpLAorICAgIFU2NF9DKDB4NjAwZmJhOGI3ZjdhOGVjYiksIFU2NF9DKDB4NDZiNjBmMDExYTgzOTg4ZSksCisgICAgVTY0X0MoMHgyMzViODk4ZTBkY2Y0YzQ3KSwgVTY0X0MoMHg5NTdhYjI0ZjU4ODU5MmE5KSwKKyAgICBVNjRfQygweDQzNTQzMzA1NzJiNWMyOGMpLCBVNjRfQygweGE1ZjNlZjg0ZTliOGQ1NDIpLAorICAgIFU2NF9DKDB4OGM3MTFlMDIzNDFiMmQwMSksIFU2NF9DKDB4MGIxODc0YWU2YTYyYTY1NyksCisgICAgVTY0X0MoMHgxMjEzZDhlMzA2ZmMxOWZmKSwgVTY0X0MoMHhmZTZkN2M2YTRkOWRiYTM1KSwKKyAgICBVNjRfQygweDY1ZWQ4NjhmMTc0Y2Q0YzkpLCBVNjRfQygweDg4NTIyZWEwZTYyMzY1NTApLAorICAgIFU2NF9DKDB4ODk5MzIyMDY1YzJkNzcwMyksIFU2NF9DKDB4YzAxZTY5MGJmZWY0MDE4YiksCisgICAgVTY0X0MoMHg5MTU5ODJlZDhhYmRkYWY4KSwgVTY0X0MoMHhiZTY3NWI5OGVjM2E0ZTRjKSwKKyAgICBVNjRfQygweGE5OTZiZjdmODJmMDBkYjEpLCBVNjRfQygweGUxZGFmOGQ0OWEyNzY5NmEpLAorICAgIFU2NF9DKDB4MmVmZmQ1ZDNkYzg5ODZlNyksIFU2NF9DKDB4ZDE1M2E1MWYyYjFhMmU4MSksCisgICAgVTY0X0MoMHgxOGNhYTBlYmQ2OTBhZGZiKSwgVTY0X0MoMHgzOTBlMzEzNGIyNDNjNTFhKSwKKyAgICBVNjRfQygweDI3NzhiOTJjZGZmNzA0MTYpLCBVNjRfQygweDAyOWYxODUxNjkxYzI0YTYpLAorICAgIFU2NF9DKDB4NWU3Y2FmZWFjYzEzMzU3NSksIFU2NF9DKDB4ZmE0ZTRjYzg5ZmE1ZjI2NCksCisgICAgVTY0X0MoMHg1YTVmOWY0ODFlMmI3ZDI0KSwgVTY0X0MoMHg0ODRjNDdhYjE4ZDc2NGRiKSwKKyAgICBVNjRfQygweDQwMGEyN2YyYTFhN2Y0NzkpLCBVNjRfQygweGFlZWI5YjJhODNkYTczMTUpLAorICAgIFU2NF9DKDB4NzIxYzYyNjg3OTg2OTczNCksIFU2NF9DKDB4MDQyMzMwYTJkMjM4NDg1MSksCisgICAgVTY0X0MoMHg4NWY2NzJmZDM3NjVhZmYwKSwgVTY0X0MoMHhiYTQ0NmIzYTNlMDIwNjFkKSwKKyAgICBVNjRfQygweDczZGQ2ZWNlYzM4ODg1NjcpLCBVNjRfQygweGZmYWM3MGNjZjc5M2E4NjYpLAorICAgIFU2NF9DKDB4ZGZhOWVkYjUyOTRlZDJkNCksIFU2NF9DKDB4NmM2YWVhNzAxNDMyNTYzOCksCisgICAgVTY0X0MoMHg4MzRhNWEwZThjNDFjMzA3KSwgVTY0X0MoMHhjZGJhMzU1NjJmYjJjYjJiKSwKKyAgICBVNjRfQygweDBhZDk3ODA4ZDA2Y2I0MDQpLCBVNjRfQygweDBmM2I0NDBjYjg1YWVlMDYpLAorICAgIFU2NF9DKDB4ZTVmOWM4NzY0ODFmMjEzYiksIFU2NF9DKDB4OThkZWVlMTI4OWMzNTgwOSksCisgICAgVTY0X0MoMHg1OTAxOGJiZmNkMzk0YmQxKSwgVTY0X0MoMHhlMDFiZjQ3MjIwMjk3YjM5KSwKKyAgICBVNjRfQygweGRlNjhlMTEzOTM0MGMwODcpLCBVNjRfQygweDlmYTNjYTQ3ODhlOTI2YWQpLAorICAgIFU2NF9DKDB4YmI4NTY3OWM4NDBjMTQ0ZSksIFU2NF9DKDB4NTNkOGYzYjcxZDU1ZmZkNSksCisgICAgVTY0X0MoMHgwZGE0NWM1ZGQxNDZjYWEwKSwgVTY0X0MoMHg2ZjM0ZmU4N2M3MjA2MGNkKSwKKyAgICBVNjRfQygweDU3ZmJjMzE1Y2Y2ZGI3ODQpLCBVNjRfQygweGNlZTQyMWExZmNhMGZkZGUpLAorICAgIFU2NF9DKDB4M2QyZDAxOTY2MDdiOGQ0YiksIFU2NF9DKDB4NjQyYzhhMjlhZDQyYzY5YSksCisgICAgVTY0X0MoMHgxNGFmZjAxMGJkZDg3NTA4KSwgVTY0X0MoMHhhYzc0ODM3YmVhYzY1N2IzKSwKKyAgICBVNjRfQygweDMyMTY0NTlhZDgyMTYzNGQpLCBVNjRfQygweDNmYjIxOWM3MDk2N2E5ZWQpLAorICAgIFU2NF9DKDB4MDZiYzI4ZjNiYjI0NmNmNyksIFU2NF9DKDB4ZjIwODJjOTEyNmQ1NjJjNiksCisgICAgVTY0X0MoMHg2NmIzOTI3OGM0NWVlMjNjKSwgVTY0X0MoMHhiZDM5NGY2ZjNmMjg3OGI5KSwKKyAgICBVNjRfQygweGZkMzM2ODlkOWU4ZjhjYzApLCBVNjRfQygweDM3ZjQ3OTllYjAxNzM5NGYpLAorICAgIFU2NF9DKDB4MTA4Y2MwYjI2ZmUwM2Q1OSksIFU2NF9DKDB4ZGE0YmQxYjE0MTc4ODhkNiksCisgICAgVTY0X0MoMHhiMDlkMTMzMmVlNmViMjE5KSwgVTY0X0MoMHgyZjNlZDk3NTY2ODc5NGI0KSwKKyAgICBVNjRfQygweDU4YzA4NzE5NzczNzU5ODIpLCBVNjRfQygweDc1NjE0NjNkNzhhY2U5OTApLAorICAgIFU2NF9DKDB4MDk4NzZjZmYwMzdlODJmMSksIFU2NF9DKDB4N2ZiODNlMzVhOGMwNWQ5NCksCisgICAgVTY0X0MoMHgyNmI5YjU4YTY1ZjkxNjQ1KSwgVTY0X0MoMHhlZjIwYjA3ZTk4NzM5NTNmKSwKKyAgICBVNjRfQygweDMxNDg1MTZkMGIzMzU1YjgpLCBVNjRfQygweDQxY2IyYjU0MWJhOWU2MmEpLAorICAgIFU2NF9DKDB4NzkwNDE2YzYxM2U0MzE2MyksIFU2NF9DKDB4YTAxMWQzODA4MThlOGY0MCksCisgICAgVTY0X0MoMHgzYTUwMjVjMzYxNTFmM2VmKSwgVTY0X0MoMHhkNTcwOTViZGY5MjI2NmQwKSwKKyAgICBVNjRfQygweDQ5OGQ0YjBkYTJkOTc2ODgpLCBVNjRfQygweDhiMGMzYTU3MzUzMTUzYTUpLAorICAgIFU2NF9DKDB4MjFjNDkxZGY2NGQzNjhlMSksIFU2NF9DKDB4OGYyZjBhZjVlNzA5MWJmNCksCisgICAgVTY0X0MoMHgyZGExYzEyNDBmOWJiMDEyKSwgVTY0X0MoMHhjNDNkNTlhOTJjY2M0OWRhKSwKKyAgICBVNjRfQygweGJmYTY1NzNlNTYzNDVjMWYpLCBVNjRfQygweDgyOGI1NmE4MzY0ZmQxNTQpLAorICAgIFU2NF9DKDB4OWE0MWY2NDNlMGRmN2NhZiksIFU2NF9DKDB4YmNmODQzYzk4NTI2NmFlYSksCisgICAgVTY0X0MoMHgyYjFkZTlkN2I0YmZkY2U1KSwgVTY0X0MoMHgyMDA1OWQ3OWRlZGQ3YWIyKSwKKyAgICBVNjRfQygweDZkYWJlNmQ2YWUzYzQ0NmIpLCBVNjRfQygweDQ1ZTgxYmY2Yzk5MWFlN2IpLAorICAgIFU2NF9DKDB4NjM1MWFlN2NhYzY4YjgzZSksIFU2NF9DKDB4YTQzMmUzMjI1M2I2YzcxMSksCisgICAgVTY0X0MoMHhkMDkyYTliOTkxMTQzY2QyKSwgVTY0X0MoMHhjYWM3MTEwMzJlOThiNThmKSwKKyAgICBVNjRfQygweGQ4ZDRjOWUwMjg2NGFjNzApLCBVNjRfQygweGM1ZmM1NTBmOTZjMjViODkpLAorICAgIFU2NF9DKDB4ZDdlZjhkZWM5MDNlNDI3NiksIFU2NF9DKDB4Njc3MjllZGU3ZTUwZjA2ZiksCisgICAgVTY0X0MoMHhlYWMyOGM3YWYwNDVjZjNkKSwgVTY0X0MoMHhiMTVjMWY5NDU0NjBhMDRhKSwKKyAgICBVNjRfQygweDljZmRkZWIwNWJmYjEwNTgpLCBVNjRfQygweDkzYzY5YWJjZTNhMWZlNWUpLAorICAgIFU2NF9DKDB4ZWIwMzgwZGM0YTRiZGQ2ZSksIFU2NF9DKDB4ZDIwZGIxZThmODA4MTg3NCksCisgICAgVTY0X0MoMHgyMjlhODUyOGI3YzE1ZTE0KSwgVTY0X0MoMHg0NDI5MTc1MDczOWZiYzI4KSwKKyAgICBVNjRfQygweGQzY2NiZDRlNDIwNjBhMjcpLCBVNjRfQygweGY2MmIxYzMzZjRlZDJhOTcpLAorICAgIFU2NF9DKDB4ODZhODY2MGFlNDc3OTkwNSksIFU2NF9DKDB4ZDYyZTgxNGEyYTMwNTAyNSksCisgICAgVTY0X0MoMHg0Nzc3MDNhN2EwOGQ4YWRkKSwgVTY0X0MoMHg3YjliMGU5NzdhZjgxNWM1KSwKKyAgICBVNjRfQygweDc4YzUxYTYwYTllYTIzMzApLCBVNjRfQygweGE2YWRmYjczM2FhYWUzYjcpLAorICAgIFU2NF9DKDB4OTdlNWFhMWUzMTk5YjYwZiksIFU2NF9DKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MoMHhmNGI0MDQ2MjlkZjEwZTMxKSwgVTY0X0MoMHg1NTY0ZGI0NGE2NzE5MzIyKSwKKyAgICBVNjRfQygweDkyMDc5NjFhNTlhZmVjMGQpLCBVNjRfQygweDk2MjRhNmI4OGI5N2E0NWMpLAorICAgIFU2NF9DKDB4MzYzNTc1MzgwYTE5MmIxYyksIFU2NF9DKDB4MmM2MGNkODJiNTk1YTI0MSksCisgICAgVTY0X0MoMHg3ZDI3MjY2NGMxZGM3OTMyKSwgVTY0X0MoMHg3MTQyNzY5ZmFhOTRhMWMxKSwKKyAgICBVNjRfQygweGExZDBkZjI2M2I4MDlkMTMpLCBVNjRfQygweDE2MzBlODQxZDRjNDUxYWUpLAorICAgIFU2NF9DKDB4YzFkZjY1YWQ0NGZhMTNkOCksIFU2NF9DKDB4MTNkMmQ0NDViY2YyMGJhYyksCisgICAgVTY0X0MoMHhkOTE1YzU0NjkyNmFiZTIzKSwgVTY0X0MoMHgzOGNmM2Q5MjA4NGRkNzQ5KSwKKyAgICBVNjRfQygweGU3NjZkMDI3MjEwMzA1OWQpLCBVNjRfQygweGM3NjM0ZDVlZmZkZTdmMmYpLAorICAgIFU2NF9DKDB4MDc3ZDI0NTUwMTJhN2VhNCksIFU2NF9DKDB4ZWRiZmE4MmZmMTZmYjE5OSksCisgICAgVTY0X0MoMHhhZjJhOTc4YzM5ZDQ2MTQ2KSwgVTY0X0MoMHg0Mjk1M2ZhM2M4YmJkMGRmKSwKKyAgICBVNjRfQygweGNiMDYxZGE1OTQ5NmE3ZGMpLCBVNjRfQygweDI1ZTdhMTdkYjZlYjIwYjApLAorICAgIFU2NF9DKDB4MzRhYTZkNjk2MzA1MGZiYSksIFU2NF9DKDB4YTc2Y2Y3ZDU4MGE0ZjFlNCksCisgICAgVTY0X0MoMHhmN2VhMTA5NTRlZTMzOGM0KSwgVTY0X0MoMHhmY2YyNjQzYjI0ODE5ZTkzKSwKKyAgICBVNjRfQygweGNmMjUyZDA3NDZhZWVmOGQpLCBVNjRfQygweDRlZjA2ZjU4YTNmMzA4MmMpLAorICAgIFU2NF9DKDB4NTYzYWNmYjM3NTYzYTVkNyksIFU2NF9DKDB4NTA4NmU3NDBjZTQ3YzkyMCksCisgICAgVTY0X0MoMHgyOTgyZjE4NmRkYTNmODQzKSwgVTY0X0MoMHg4NzY5NmFhYzVlNzk4YjU2KSwKKyAgICBVNjRfQygweDVkMjJiYjFkMWYwMTAzODApLCBVNjRfQygweDAzNWUxNGY3ZDMxMjM2ZjUpLAorICAgIFU2NF9DKDB4M2NlYzBkMzBkYTc1OWYxOCksIFU2NF9DKDB4ZjNjOTIwMzc5Y2RiNzA5NSksCisgICAgVTY0X0MoMHhiOGRiNzM2YjU3MWUyMmJiKSwgVTY0X0MoMHhkZDM2ZjVlNDQwNTJmNjcyKSwKKyAgICBVNjRfQygweGFhYzhhYjg4NTFlMjNiNDQpLCBVNjRfQygweGE4NTdiM2Q5MzhmZTFmZTIpLAorICAgIFU2NF9DKDB4MTdmMWU0ZTc2ZWNhNDNmZCksIFU2NF9DKDB4ZWM3ZWE0ODk0YjYxYTNjYSksCisgICAgVTY0X0MoMHg5ZTYyYzZlMTMyZTczNGZlKSwgVTY0X0MoMHhkNGIxOTkxYjQzMmM3NDgzKSwKKyAgICBVNjRfQygweDZhZDZjMjgzYWYxNjNhY2YpLCBVNjRfQygweDFjZTk5MDQ5MDRhOGU1YWEpLAorICAgIFU2NF9DKDB4NWZiZGEzNGM3NjFkMjcyNiksIFU2NF9DKDB4ZjkxMDU4M2Y0Y2I3YzQ5MSksCisgICAgVTY0X0MoMHhjNmEyNDFmODQ1ZDA2ZDdjKSwgVTY0X0MoMHg0ZjMxNjNmZTE5ZmQxYTdmKSwKKyAgICBVNjRfQygweGU5OWM5ODhkMjM1N2Y5YzgpLCBVNjRfQygweDhlZWUwNjUzNWQwNzA5YTcpLAorICAgIFU2NF9DKDB4MGVmYTQ4YWEwMjU0ZmM1NSksIFU2NF9DKDB4YjRiZTIzOTAzYzU2ZmE0OCksCisgICAgVTY0X0MoMHg3NjNmNTJjYWFiYmVkZjY1KSwgVTY0X0MoMHhlZWUxYmNkODIyN2Q4NzZjKSwKKyAgICBVNjRfQygweGUzNDVlMDg1ZjMzYjRkY2MpLCBVNjRfQygweDNlNzMxNTYxYjM2OWJiYmUpLAorICAgIFU2NF9DKDB4Mjg0M2ZkMjA2N2FkZWExMCksIFU2NF9DKDB4MmFkY2U1NzEwZWIxY2ViNiksCisgICAgVTY0X0MoMHhiN2UwMzc2N2VmNDRjY2JkKSwgVTY0X0MoMHg4ZGIwMTJhNDhlMTUzZjUyKSwKKyAgICBVNjRfQygweDYxY2ViNjJkYzU3NDljOTgpLCBVNjRfQygweGU4NWQ5NDJiOTk1OWViOWIpLAorICAgIFU2NF9DKDB4NGM2Zjc3MDljYWVmMmM4YSksIFU2NF9DKDB4ODQzNzdlNWI4ZDZiYmRhMyksCisgICAgVTY0X0MoMHgzMDg5NWRjYmIxM2Q0N2ViKSwgVTY0X0MoMHg3NGEwNGE5YmMyYTJmYmMzKSwKKyAgICBVNjRfQygweDZiMTdjZTI1MTUxODI4OWMpLCBVNjRfQygweGU0MzhjNGQwZjIxMTMzNjgpLAorICAgIFU2NF9DKDB4MWZiNzg0YmVkN2JhZDM1ZiksIFU2NF9DKDB4OWI4MGZhZTU1YWQxNmVmYyksCisgICAgVTY0X0MoMHg3N2ZlNWU2YzExYjBjZDM2KSwgVTY0X0MoMHhjODU4MDk1MjQ3ODQ5MTI5KSwKKyAgICBVNjRfQygweDA4NDY2MDU5Yjk3MDkwYTIpLCBVNjRfQygweDAxYzEwY2E2YmEwZTEyNTMpLAorICAgIFU2NF9DKDB4Njk4OGQ2NzQ3YzA0MGMzYSksIFU2NF9DKDB4Njg0OWRhZDJjNjBhMWU2OSksCisgICAgVTY0X0MoMHg1MTQ3ZWJlNjc0NDlkYjczKSwgVTY0X0MoMHhjOTk5MDVmNGZkOGE4MzdhKSwKKyAgICBVNjRfQygweDk5MWZlMmI0MzNjZDRhNWEpLCBVNjRfQygweGYwOTczNGMwNGZjOTQ2NjApLAorICAgIFU2NF9DKDB4YTI4ZWNiZDFlODkyYWJlNiksIFU2NF9DKDB4ZjE1NjM4NjZmNWM3NTQzMyksCisgICAgVTY0X0MoMHg0ZGFlN2JhZjcwZTEzZWQ5KSwgVTY0X0MoMHg3Y2U2MmFjMjdiZDI2YjYxKSwKKyAgICBVNjRfQygweDcwODM3YTM5MTA5YWIzOTIpLCBVNjRfQygweDkwOTg4ZTRiMzBiM2M4YWIpLAorICAgIFU2NF9DKDB4YjIwMjBiNjM4NzcyOTZiZiksIFU2NF9DKDB4MTU2ZWZjYjYwN2Q2Njc1YikgfSwKKyAgLyogNyAqLworICB7IFU2NF9DKDB4ZTYzZjU1Y2U5N2MzMzFkMCksIFU2NF9DKDB4MjViNTA2YjAwMTViYmExNiksCisgICAgVTY0X0MoMHhjODcwNmUyOWU2YWQ5YmE4KSwgVTY0X0MoMHg1YjQzZDM3NzVkNTIxZjZhKSwKKyAgICBVNjRfQygweDBiZmEzZDU3NzAzNTEwNmUpLCBVNjRfQygweGFiOTVmYzE3MmFmYjBlNjYpLAorICAgIFU2NF9DKDB4ZjY0YjYzOTc5ZTdhMzI3NiksIFU2NF9DKDB4ZjU4YjQ1NjI2NDlkYWQ0YiksCisgICAgVTY0X0MoMHg0OGY3YzNkYmFlMGM4M2YxKSwgVTY0X0MoMHhmZjMxOTE2NjQyZjVjOGM1KSwKKyAgICBVNjRfQygweGNiYjA0OGRjMWM0YTA0OTUpLCBVNjRfQygweDY2YjhmODNjZGY2MjI5ODkpLAorICAgIFU2NF9DKDB4MzVjMTMwZTkwOGUyYjliMCksIFU2NF9DKDB4N2M3NjFhNjFmMGIzNGZhMSksCisgICAgVTY0X0MoMHgzNjAxMTYxY2YyMDUyNjhkKSwgVTY0X0MoMHg5ZTU0Y2NmZTIyMTliN2Q2KSwKKyAgICBVNjRfQygweDhiN2Q5MGE1Mzg5NDA4MzcpLCBVNjRfQygweDljZDQwMzU4OGVhMzVkMGIpLAorICAgIFU2NF9DKDB4YmMzYzZmZWE5Y2NjNWI1YSksIFU2NF9DKDB4ZTVmZjczM2I2ZDI0YWVlZCksCisgICAgVTY0X0MoMHhjZWVkMjJkZTBmN2ViOGQyKSwgVTY0X0MoMHhlYzg1ODFjYWIxYWI1NDVlKSwKKyAgICBVNjRfQygweGI5NjEwNWU4OGZmOGU3MWQpLCBVNjRfQygweDhjYTAzNTAxODcxYTVlYWQpLAorICAgIFU2NF9DKDB4NzZjY2NlNjVkNmRiMmEyZiksIFU2NF9DKDB4NTg4M2Y1ODJhN2I1ODA1NyksCisgICAgVTY0X0MoMHgzZjdiZTRlZDJlOGFkYzNlKSwgVTY0X0MoMHgwZmU3YmUwNjM1NWNkOWM5KSwKKyAgICBVNjRfQygweGVlMDU0ZTZjMWQxMWJlODMpLCBVNjRfQygweDEwNzQzNjU5MDliOTAzYTYpLAorICAgIFU2NF9DKDB4NWRkZTlmODBiNDgxM2MxMCksIFU2NF9DKDB4NGE3NzBjN2QwMmI2NjkyYyksCisgICAgVTY0X0MoMHg1Mzc5YzhkNWQ3ODA5MDM5KSwgVTY0X0MoMHhiNDA2NzQ0ODE2MWVkNDA5KSwKKyAgICBVNjRfQygweDVmNWU1MDI2MTgzYmQ2Y2QpLCBVNjRfQygweGU4OTgwMjliZjRjMjlkZjkpLAorICAgIFU2NF9DKDB4N2ZiNjNjOTQwYTU0ZDA5YyksIFU2NF9DKDB4YzUxNzFmODk3ZjRiYThiYyksCisgICAgVTY0X0MoMHhhNmYyOGRiN2IzMWQzZDcyKSwgVTY0X0MoMHgyZTRmM2JlNzcxNmVhYTc4KSwKKyAgICBVNjRfQygweDBkNjc3MWEwOTllNjMzMTQpLCBVNjRfQygweDgyMDc2MjU0ZTQxYmYyODQpLAorICAgIFU2NF9DKDB4MmYwZmQyYjQyNzMzZGY5OCksIFU2NF9DKDB4NWM5ZTc2ZDNlMmRjNDlmMCksCisgICAgVTY0X0MoMHg3YWViNTY5NjE5NjA2Y2RiKSwgVTY0X0MoMHg4MzQ3OGIwN2IyNDY4NzY0KSwKKyAgICBVNjRfQygweGNmYWRjYjhkNTkyM2NkMzIpLCBVNjRfQygweDg1ZGFjN2YwNWI5NWE0MWUpLAorICAgIFU2NF9DKDB4YjU0NjlkMWI0MDQzYTFlOSksIFU2NF9DKDB4YjgyMWVjYmJkOWE1OTJmZCksCisgICAgVTY0X0MoMHgxYjhlMGIwZTc5OGMxM2M4KSwgVTY0X0MoMHg2MmE1N2I2ZDlhMGJlMDJlKSwKKyAgICBVNjRfQygweGZjZjFiNzkzYjgxMjU3ZjgpLCBVNjRfQygweDlkOTRlYTBiZDhmZTI4ZWIpLAorICAgIFU2NF9DKDB4NGNlYTQwOGFlYjY1NGE1NiksIFU2NF9DKDB4MjMyODRhNDdlODg4OTk2YyksCisgICAgVTY0X0MoMHgyZDhmMWQxMjhiODkzNTQ1KSwgVTY0X0MoMHhmNGNiYWMzMTMyYzBkOGFiKSwKKyAgICBVNjRfQygweGJkN2M4NmI5Y2E5MTJlYmEpLCBVNjRfQygweDNhMjY4ZWVmM2RiZTYwNzkpLAorICAgIFU2NF9DKDB4ZjBkNjJmNjA3N2E5MTEwYyksIFU2NF9DKDB4MjczNWM5MTZhZGUxNTBjYiksCisgICAgVTY0X0MoMHg4OWZkNWYwMzk0MmVlMmVhKSwgVTY0X0MoMHgxYWNlZTI1ZDJmZDE2NjI4KSwKKyAgICBVNjRfQygweDkwZjM5YmFiNDExODFiZmYpLCBVNjRfQygweDQzMGRmZThjZGUzOTkzOWYpLAorICAgIFU2NF9DKDB4ZjcwYjhhYzRjODI3NDc5NiksIFU2NF9DKDB4MWM1M2FlYWFjNjAyNDU1MiksCisgICAgVTY0X0MoMHgxM2I0MTBhY2YzNWU5YzliKSwgVTY0X0MoMHhhNTMyYWI0MjQ5ZmFhMjRmKSwKKyAgICBVNjRfQygweDJiMTI1MWU1NjI1YTE2M2YpLCBVNjRfQygweGQ3ZTNlNjc2ZGE0ODQxYzcpLAorICAgIFU2NF9DKDB4YTdiMjY0ZTRlNTQwNDg5MiksIFU2NF9DKDB4ZGE4NDk3ZDY0M2FlNzJkMyksCisgICAgVTY0X0MoMHg4NjFhZTEwNWExNzIzYjIzKSwgVTY0X0MoMHgzOGE2NDE0OTkxMDQ4YWE0KSwKKyAgICBVNjRfQygweDY1NzhkZWM5MjU4NWI2YjQpLCBVNjRfQygweDAyODBjZmE2YWNiYWVhZGQpLAorICAgIFU2NF9DKDB4ODhiZGI2NTBjMjczOTcwYSksIFU2NF9DKDB4OTMzM2JkNWViYmZmODRjMiksCisgICAgVTY0X0MoMHg0ZTZhOGYyYzQ3ZGZhMDhiKSwgVTY0X0MoMHgzMjFjOTU0ZGI3NmNlZjJhKSwKKyAgICBVNjRfQygweDQxOGQzMTJhNzI4Mzc5NDIpLCBVNjRfQygweGIyOWIzOGJmZmZjZGY3NzMpLAorICAgIFU2NF9DKDB4NmMwMjJjMzhmOTBhNGMwNyksIFU2NF9DKDB4NWEwMzNhMjQwYjBmNmE4YSksCisgICAgVTY0X0MoMHgxZjkzODg1ZjNjZTVkYTZmKSwgVTY0X0MoMHhjMzhhNTM3ZTk2OTg4YmM2KSwKKyAgICBVNjRfQygweDM5ZTZhODFhYzc1OWZmNDQpLCBVNjRfQygweDI5OTI5ZTQzY2VlMGZjZTIpLAorICAgIFU2NF9DKDB4NDBjZGQ4NzkyNGRlMGNhMiksIFU2NF9DKDB4ZTlkOGViYzhhMjlmZTgxOSksCisgICAgVTY0X0MoMHgwYzI3OThmM2NmYmI0NmY0KSwgVTY0X0MoMHg1NWU0ODQyMjNlNTNiMzQzKSwKKyAgICBVNjRfQygweDQ2NTA5NDhlY2QwZDJmZDgpLCBVNjRfQygweDIwZTg2Y2IyMTI2ZjA2NTEpLAorICAgIFU2NF9DKDB4NmQ0MmM1NmJhZjU3MzllNyksIFU2NF9DKDB4YTA2ZmMxNDA1YWNlMWUwOCksCisgICAgVTY0X0MoMHg3YmFiYmZjNTRmM2QxOTNiKSwgVTY0X0MoMHg0MjRkMTdkZjg4NjRlNjdmKSwKKyAgICBVNjRfQygweGQ4MDQ1ODcwZWYxNDk4MGUpLCBVNjRfQygweGM2ZDczOTdjODVhYzM3ODEpLAorICAgIFU2NF9DKDB4MjFhODg1ZTE0NDMyNzNiMSksIFU2NF9DKDB4NjdmODExNmY4OTNmNWM2OSksCisgICAgVTY0X0MoMHgyNGY1ZWZlMzU3MDZjZmY2KSwgVTY0X0MoMHhkNTYzMjlkMDc2ZjJhYjFhKSwKKyAgICBVNjRfQygweDVlMWViOTc1NGU2NmEzMmQpLCBVNjRfQygweDI4ZDI3NzEwOThiZDg5MDIpLAorICAgIFU2NF9DKDB4OGY2MDEzZjQ3ZGZkYzE5MCksIFU2NF9DKDB4MTdhOTkzZmRiNjM3NTUzYyksCisgICAgVTY0X0MoMHhlMGEyMTkzOTdlMTAxMmFhKSwgVTY0X0MoMHg3ODZiOTkzMGI1ZGE4NjA2KSwKKyAgICBVNjRfQygweDZlODJlMzllNTViMGE2ZGEpLCBVNjRfQygweDg3NWEwODU2ZjcyZjRlYzMpLAorICAgIFU2NF9DKDB4Mzc0MWZmNGZhNDU4NTM2ZCksIFU2NF9DKDB4YWM0ODU5YjM5NTc1NThmYyksCisgICAgVTY0X0MoMHg3ZWY2ZDVjNzVjMDlhNTdjKSwgVTY0X0MoMHhjMDRhNzU4YjZjN2YxNGZiKSwKKyAgICBVNjRfQygweGY5YWNkZDkxYWIyNmViYmYpLCBVNjRfQygweDczOTFhNDY3YzVlZjk2NjgpLAorICAgIFU2NF9DKDB4MzM1YzdjMWVlMTMxOWFjYSksIFU2NF9DKDB4YTkxNTMzYjE4NjQxZTRiYiksCisgICAgVTY0X0MoMHhlNGJmOWE2ODNiNzlkYjBkKSwgVTY0X0MoMHg4ZTIwZmFhNzJiYTBiNDcwKSwKKyAgICBVNjRfQygweDUxZjkwNzczN2IzYTdhZTQpLCBVNjRfQygweDIyNjhhMzE0YmVkNWVjOGMpLAorICAgIFU2NF9DKDB4ZDk0NGIxMjNiOTQ5ZWRlZSksIFU2NF9DKDB4MzFkY2IzYjg0ZDhiNzAxNyksCisgICAgVTY0X0MoMHhkM2ZlNjUyNzlmMjE4ODYwKSwgVTY0X0MoMHgwOTdhZjJmMWRjOGZmYWIzKSwKKyAgICBVNjRfQygweDliMDlhNmZjMzEyZDBiOTEpLCBVNjRfQygweGNjNmRlZDc4YTNjNDUyMGYpLAorICAgIFU2NF9DKDB4MzQ4MWQ5YmE1ZWJmY2M1MCksIFU2NF9DKDB4NGYyYTY2N2YxMTgyZDU2YiksCisgICAgVTY0X0MoMHhkZmQ5ZmRkNDUwOWFjZTk0KSwgVTY0X0MoMHgyNjc1MjA0NWZiYmMyNTJiKSwKKyAgICBVNjRfQygweGJmZmM0OTFmNjYyYmM0NjcpLCBVNjRfQygweGRkNTkzMjcyZmMyMDI0NDkpLAorICAgIFU2NF9DKDB4M2NiYmMyMThkNDZkNDMwMyksIFU2NF9DKDB4OTFiMzcyZjgxNzQ1NmUxZiksCisgICAgVTY0X0MoMHg2ODFmYWY2OWJjNjM4NWEwKSwgVTY0X0MoMHhiNjg2YmJlZWJhYTQzZWQ0KSwKKyAgICBVNjRfQygweDE0NjliNTA4NGNkMGNhMDEpLCBVNjRfQygweDk4Yzk4MDA5Y2JjYTk0YWMpLAorICAgIFU2NF9DKDB4NjQzODM3OWE3M2Q4YzM1NCksIFU2NF9DKDB4YzJjYWJhMmRjMGM1ZmUyNiksCisgICAgVTY0X0MoMHgzZTNiMGRiZTc4ZDdhOWRlKSwgVTY0X0MoMHg1MGI5ZWUyMDJkNjcwZjA0KSwKKyAgICBVNjRfQygweDQ1OTBiMjdiMzdlYWIwZTUpLCBVNjRfQygweDYwMjViNGNiMzZiMTBhZjMpLAorICAgIFU2NF9DKDB4ZmIyYzEyMzcwNzljMDE2MiksIFU2NF9DKDB4YTEyZjI4MTMwYzkzNmJlOCksCisgICAgVTY0X0MoMHg0YjM3ZTUyZTU0ZWIxY2NjKSwgVTY0X0MoMHgwODNhMWJhMjhhZDI4ZjUzKSwKKyAgICBVNjRfQygweGMxMGE5Y2Q4M2EyMjYxMWIpLCBVNjRfQygweDlmMTQyNWFkNzQ0NGMyMzYpLAorICAgIFU2NF9DKDB4MDY5ZDRjZjdlOWQzMjM3YSksIFU2NF9DKDB4ZWRjNTY4OTllN2Y2MjFiZSksCisgICAgVTY0X0MoMHg3NzhjMjczNjgwODY1ZmNmKSwgVTY0X0MoMHgzMDljNWFlYjFiZDYwNWY3KSwKKyAgICBVNjRfQygweDhkZTBkYzUyZDE0NzJiNGQpLCBVNjRfQygweGY4ZWMzNGMyZmQ3YjllNWYpLAorICAgIFU2NF9DKDB4ZWExOGNkM2Q1ODc4NzcyNCksIFU2NF9DKDB4YWFkNTE1NDQ3Y2E2N2I4NiksCisgICAgVTY0X0MoMHg5OTg5Njk1YTlkOTdlMTRjKSwgVTY0X0MoMHgwMDAwMDAwMDAwMDAwMDAwKSwKKyAgICBVNjRfQygweGYxOTZjNjMzMjFmNDY0ZWMpLCBVNjRfQygweDcxMTE2YmMxNjk1NTdjYjUpLAorICAgIFU2NF9DKDB4YWY4ODdmNDY2ZjkyYzdjMSksIFU2NF9DKDB4OTcyZTNlMGZmZTk2NGQ2NSksCisgICAgVTY0X0MoMHgxOTBlYzRhOGQ1MzZmOTE1KSwgVTY0X0MoMHg5NWFlZjFhOTUyMmNhN2I4KSwKKyAgICBVNjRfQygweGRjMTlkYjIxYWE3ZDUxYTkpLCBVNjRfQygweDk0ZWUxOGZhMDQ3MWQyNTgpLAorICAgIFU2NF9DKDB4ODA4N2FkZjI0OGExMTg1OSksIFU2NF9DKDB4YzQ1N2Y2ZGEyOTE2ZGQ1YyksCisgICAgVTY0X0MoMHhmYTZjZmI2NDUxYzE3NDgyKSwgVTY0X0MoMHhmMjU2ZTBjNmRiMTNmYmQxKSwKKyAgICBVNjRfQygweDZhOWY2MGNmMTBkOTZmN2QpLCBVNjRfQygweDRkYWFhOWQ5YmQzODNmYjYpLAorICAgIFU2NF9DKDB4MDNjMDI2ZjVmYWU3OWYzZCksIFU2NF9DKDB4ZGU5OTE0ODcwNmM3YmI3NCksCisgICAgVTY0X0MoMHgyYTUyYjhiNjM0MDc2M2RmKSwgVTY0X0MoMHg2ZmMyMGFjZDAzZWRkMzNhKSwKKyAgICBVNjRfQygweGQ0MjNjMDgzMjBhZmRlZmEpLCBVNjRfQygweGJiZTFjYTRlMjM0MjBkYzApLAorICAgIFU2NF9DKDB4OTY2ZWQ3NWNhOGNiMzg4NSksIFU2NF9DKDB4ZWI1ODI0NmUwZTI1MDJjNCksCisgICAgVTY0X0MoMHgwNTVkNmEwMjEzMzRiYzQ3KSwgVTY0X0MoMHhhNDcyNDIxMTFmYTdkN2FmKSwKKyAgICBVNjRfQygweGUzNjIzZmNjODRmNzhkOTcpLCBVNjRfQygweDgxYzc0NGExMWVmYzZkYjkpLAorICAgIFU2NF9DKDB4YWVjODk2MTUzOWNmYjIyMSksIFU2NF9DKDB4ZjMxNjA5OTU4ZDRlOGUzMSksCisgICAgVTY0X0MoMHg2M2U1OTIzZWNjNTY5NWNlKSwgVTY0X0MoMHg0NzEwN2RkZDliNTA1YTM4KSwKKyAgICBVNjRfQygweGEzYWZlN2I1YTAyOTgxMzUpLCBVNjRfQygweDc5MmI3MDYzZTM4N2YzZTYpLAorICAgIFU2NF9DKDB4MDE0MGU5NTM1NjVkNzVlMCksIFU2NF9DKDB4MTJmNGY5ZmZhNTAzZTk3YiksCisgICAgVTY0X0MoMHg3NTBjZTg5MDJjM2NiNTEyKSwgVTY0X0MoMHhkYmM0N2U4NTE1ZjMwNzMzKSwKKyAgICBVNjRfQygweDFlZDM2MTBjNmFiOGFmOGYpLCBVNjRfQygweDUyMzkyMTg2ODFkZGU1ZDkpLAorICAgIFU2NF9DKDB4ZTIyMmQ2OWZkMmFhZjg3NyksIFU2NF9DKDB4ZmU3MTc4MzUxNGE4YmQyNSksCisgICAgVTY0X0MoMHhjYWYwYTE4ZjRhMTc3MTc1KSwgVTY0X0MoMHg2MTY1NWQ5ODYwZWM3ZjEzKSwKKyAgICBVNjRfQygweGU3N2ZiYzlkYzE5ZTQ0MzApLCBVNjRfQygweDJjY2ZmNDQxZGRkNDQwYTUpLAorICAgIFU2NF9DKDB4MTZlOTdhYWVlMDZhMjBkYyksIFU2NF9DKDB4YTg1NWRhZTJkMDFjOTE1YiksCisgICAgVTY0X0MoMHgxZDEzNDdmOTkwNWYzMGIyKSwgVTY0X0MoMHhiN2M2NTJiZGVjZjk0YjM0KSwKKyAgICBVNjRfQygweGQwM2U0M2QyNjVjNjE3NWQpLCBVNjRfQygweGZkYjE1ZWMwZWU0ZjIyMTgpLAorICAgIFU2NF9DKDB4NTc2NDRiODQ5MmU5NTk5ZSksIFU2NF9DKDB4MDdkZGE1YTRiZjhlNTY5YSksCisgICAgVTY0X0MoMHg1NGE0NmQ3MTY4MGVjNmEzKSwgVTY0X0MoMHg1NjI0YTJkN2M0YjQyYzdlKSwKKyAgICBVNjRfQygweGJlYmNhMDRjMzA3NmIxODcpLCBVNjRfQygweDdkMzZmMzMyYTZlZTNhNDEpLAorICAgIFU2NF9DKDB4M2I2NjY3YmM2YmUzMTU5OSksIFU2NF9DKDB4Njk1ZjQ2M2FlYTNlZjA0MCksCisgICAgVTY0X0MoMHhhZDA4YjBlMGMzMjgyZDFjKSwgVTY0X0MoMHhiMTViMWU0YTA1MmE2ODRlKSwKKyAgICBVNjRfQygweDQ0ZDA1YjI4NjFiN2M1MDUpLCBVNjRfQygweDE1Mjk1YzViMWE4ZGJmZTEpLAorICAgIFU2NF9DKDB4NzQ0YzAxYzM3YTYxYzBmMiksIFU2NF9DKDB4NTljMzFjZDFmMWU4ZjViNyksCisgICAgVTY0X0MoMHhlZjQ1YTczZjRiNGNjYjYzKSwgVTY0X0MoMHg2YmRmODk5YzQ2ODQxYTlkKSwKKyAgICBVNjRfQygweDNkZmIyYjRiODIzMDM2ZTMpLCBVNjRfQygweGEyZWYwZWU2ZjY3NGY0ZDUpLAorICAgIFU2NF9DKDB4MTg0ZTJkZmI4MzZiOGNmNSksIFU2NF9DKDB4MTEzNGRmMGE1ZmU0NzY0NiksCisgICAgVTY0X0MoMHhiYWExMjMxZDc1MWY3ODIwKSwgVTY0X0MoMHhkMTdlYWE4MTMzOWI2MmJkKSwKKyAgICBVNjRfQygweGIwMWJmNzE5NTM3NzFkYWUpLCBVNjRfQygweDg0OWEyZWEzMGRjOGQxZmUpLAorICAgIFU2NF9DKDB4NzA1MTgyOTIzZjA4MDk1NSksIFU2NF9DKDB4MGVhNzU3NTU2MzAxYWMyOSksCisgICAgVTY0X0MoMHgwNDFkODM1MTQ1NjljOWE3KSwgVTY0X0MoMHgwYWJhZDQwNDI2Njg2NThlKSwKKyAgICBVNjRfQygweDQ5YjcyYTg4Zjg1MWY2MTEpLCBVNjRfQygweDhhM2Q3OWY2NmVjOTdkZDcpLAorICAgIFU2NF9DKDB4Y2QyZDA0MmJmNTk5MjdlZiksIFU2NF9DKDB4YzkzMDg3N2FiMGYwZWU0OCksCisgICAgVTY0X0MoMHg5MjczNTQwZGVkYTJmMTIyKSwgVTY0X0MoMHhjNzk3ZDAyZmQzZjE0MjYxKSwKKyAgICBVNjRfQygweGUxZTJmMDZhMjg0ZDY3NGEpLCBVNjRfQygweGQyYmU4Yzc0Yzk3Y2ZkODApLAorICAgIFU2NF9DKDB4OWE0OTRmYWY2NzcwN2U3MSksIFU2NF9DKDB4YjNkYmQxZWNhOTkwODI5MyksCisgICAgVTY0X0MoMHg3MmQxNGQzNDkzYjJlMzg4KSwgVTY0X0MoMHhkNmEzMGYyNThjMTUzNDI3KSB9LAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBDMTZbMTNdWzE2XSA9Cit7CisgIHsgVTY0X0MoMHhkZDgwNjU1OWYyYTY0NTA3KSwgVTY0X0MoMHgwNTc2NzQzNmNjNzQ0ZDIzKSwKKyAgICBVNjRfQygweGEyNDIyYTA4YTQ2MGQzMTUpLCBVNjRfQygweDRiN2NlMDkxOTI2NzY5MDEpLAorICAgIFU2NF9DKDB4NzE0ZWI4OGQ3NTg1YzRmYyksIFU2NF9DKDB4MmY2YTc2NDMyZTQ1ZDAxNiksCisgICAgVTY0X0MoMHhlYmNiMmY4MWMwNjU3YzFmKSwgVTY0X0MoMHhiMTA4NWJkYTFlY2FkYWU5KSB9LAorICB7IFU2NF9DKDB4ZTY3OTA0NzAyMWIxOWJiNyksIFU2NF9DKDB4NTVkZGEyMWJkN2NiY2Q1NiksCisgICAgVTY0X0MoMHg1Y2I1NjFjMmRiMGFhN2NhKSwgVTY0X0MoMHg5YWI1MTc2YjEyZDY5OTU4KSwKKyAgICBVNjRfQygweDYxZDU1ZTBmMTZiNTAxMzEpLCBVNjRfQygweGYzZmVlYTcyMGEyMzJiOTgpLAorICAgIFU2NF9DKDB4NGZlMzlkNDYwZjcwYjVkNyksIFU2NF9DKDB4NmZhM2I1OGFhOTlkMmYxYSkgfSwKKyAgeyBVNjRfQygweDk5MWU5NmY1MGFiYTBhYjIpLCBVNjRfQygweGMyYjZmNDQzODY3YWRiMzEpLAorICAgIFU2NF9DKDB4YzFjOTNhMzc2MDYyZGIwOSksIFU2NF9DKDB4ZDNlMjBmZTQ5MDM1OWViMSksCisgICAgVTY0X0MoMHhmMmVhNzUxNGIxMjk3YjdiKSwgVTY0X0MoMHgwNmYxNWU1ZjUyOWMxZjhiKSwKKyAgICBVNjRfQygweDBhMzlmYzI4NmEzZDg0MzUpLCBVNjRfQygweGY1NzRkY2FjMmJjZTJmYzcpIH0sCisgIHsgVTY0X0MoMHgyMjBjYmViYzg0ZTNkMTJlKSwgVTY0X0MoMHgzNDUzZWFhMTkzZTgzN2YxKSwKKyAgICBVNjRfQygweGQ4YjcxMzMzOTM1MjAzYmUpLCBVNjRfQygweGE5ZDcyYzgyZWQwM2Q2NzUpLAorICAgIFU2NF9DKDB4OWQ3MjFjYWQ2ODVlMzUzZiksIFU2NF9DKDB4NDg4ZTg1N2UzMzVjM2M3ZCksCisgICAgVTY0X0MoMHhmOTQ4ZTFhMDVkNzFlNGRkKSwgVTY0X0MoMHhlZjFmZGZiM2U4MTU2NmQyKSB9LAorICB7IFU2NF9DKDB4NjAxNzU4ZmQ3YzZjZmU1NyksIFU2NF9DKDB4N2E1NmEyN2VhOWVhNjNmNSksCisgICAgVTY0X0MoMHhkZmZmMDBiNzIzMjcxYTE2KSwgVTY0X0MoMHhiZmNkMTc0NzI1M2FmNWEzKSwKKyAgICBVNjRfQygweDM1OWUzNWQ3ODAwZmZmYmQpLCBVNjRfQygweDdmMTUxYzFmMTY4NjEwNGEpLAorICAgIFU2NF9DKDB4OWEzZjQxMGM2Y2E5MjM2MyksIFU2NF9DKDB4NGJlYTZiYWNhZDQ3NDc5OSkgfSwKKyAgeyBVNjRfQygweGZhNjg0MDdhNDY2NDdkNmUpLCBVNjRfQygweGJmNzFjNTcyMzY5MDRmMzUpLAorICAgIFU2NF9DKDB4MGFmMjFmNjZjMmJlYzZiNiksIFU2NF9DKDB4Y2ZmYWE2YjcxYzlhYjdiNCksCisgICAgVTY0X0MoMHgxODdmOWFiNDlhZjA4ZWM2KSwgVTY0X0MoMHgyZDY2YzRmOTUxNDJhNDZjKSwKKyAgICBVNjRfQygweDZmYTRjMzNiN2EzMDM5YzApLCBVNjRfQygweGFlNGZhZWFlMWQzYWQzZDkpIH0sCisgIHsgVTY0X0MoMHg4ODg2NTY0ZDNhMTRkNDkzKSwgVTY0X0MoMHgzNTE3NDU0Y2EyM2M0YWYzKSwKKyAgICBVNjRfQygweDA2NDc2OTgzMjg0YTA1MDQpLCBVNjRfQygweDA5OTJhYmM1MmQ4MjJjMzcpLAorICAgIFU2NF9DKDB4ZDM0NzNlMzMxOTdhOTNjOSksIFU2NF9DKDB4Mzk5ZWM2YzdlNmJmODdjOSksCisgICAgVTY0X0MoMHg1MWFjODZmZWJmMjQwOTU0KSwgVTY0X0MoMHhmNGM3MGUxNmVlYWFjNWVjKSB9LAorICB7IFU2NF9DKDB4YTQ3ZjBkZDRiZjAyZTcxZSksIFU2NF9DKDB4MzZhY2MyMzU1OTUxYThkOSksCisgICAgVTY0X0MoMHg2OWQxOGQyYmQxYTVjNDJmKSwgVTY0X0MoMHhmNDg5MmJjYjkyOWIwNjkwKSwKKyAgICBVNjRfQygweDg5YjQ0NDNiNGRkYmM0OWEpLCBVNjRfQygweDRlYjdmODcxOWMzNmRlMWUpLAorICAgIFU2NF9DKDB4MDNlN2FhMDIwYzZlNDE0MSksIFU2NF9DKDB4OWIxZjViNDI0ZDkzYzlhNykgfSwKKyAgeyBVNjRfQygweDcyNjE0NDUxODMyMzVhZGIpLCBVNjRfQygweDBlMzhkYzkyY2IxZjJhNjApLAorICAgIFU2NF9DKDB4N2IyYjhhOWFhNjA3OWM1NCksIFU2NF9DKDB4ODAwYTQ0MGJkYmIyY2ViMSksCisgICAgVTY0X0MoMHgzY2Q5NTViN2UwMGQwOTg0KSwgVTY0X0MoMHgzYTdkM2ExYjI1ODk0MjI0KSwKKyAgICBVNjRfQygweDk0NGM5YWQ4ZWMxNjVmZGUpLCBVNjRfQygweDM3OGY1YTU0MTYzMTIyOWIpIH0sCisgIHsgVTY0X0MoMHg3NGI0YzdmYjk4NDU5Y2VkKSwgVTY0X0MoMHgzNjk4ZmFkMTE1M2JiNmMzKSwKKyAgICBVNjRfQygweDdhMWU2YzMwM2I3NjUyZjQpLCBVNjRfQygweDlmZTc2NzAyYWY2OTMzNGIpLAorICAgIFU2NF9DKDB4MWZmZmUxOGExYjMzNjEwMyksIFU2NF9DKDB4ODk0MWU3MWNmZjhhNzhkYiksCisgICAgVTY0X0MoMHgzODJhZTU0OGIyZTRmM2YzKSwgVTY0X0MoMHhhYmJlZGVhNjgwMDU2ZjUyKSB9LAorICB7IFU2NF9DKDB4NmJjYWE0Y2Q4MWYzMmQxYiksIFU2NF9DKDB4ZGVhMjU5NGFjMDZmZDg1ZCksCisgICAgVTY0X0MoMHhlZmJhY2QxZDdkNDc2ZTk4KSwgVTY0X0MoMHg4YTFkNzFlZmVhNDhiOWNhKSwKKyAgICBVNjRfQygweDIwMDE4MDIxMTQ4NDY2NzkpLCBVNjRfQygweGQ4ZmE2YmJiZWJhYjA3NjEpLAorICAgIFU2NF9DKDB4MzAwMmM2Y2Q2MzVhZmU5NCksIFU2NF9DKDB4N2JjZDllZDBlZmM4ODlmYikgfSwKKyAgeyBVNjRfQygweDQ4YmM5MjRhZjExYmQ3MjApLCBVNjRfQygweGZhZjQxN2Q1ZDliMjFiOTkpLAorICAgIFU2NF9DKDB4ZTcxZGE0YWE4OGUxMjg1MiksIFU2NF9DKDB4NWQ4MGVmOWQxODkxY2M4NiksCisgICAgVTY0X0MoMHhmODIwMTJkNDMwMjE5ZjliKSwgVTY0X0MoMHhjZGE0M2MzMmJjZGYxZDc3KSwKKyAgICBVNjRfQygweGQyMTM4MGIwMDQ0OWIxN2EpLCBVNjRfQygweDM3OGVlNzY3ZjExNjMxYmEpIH0sCit9OworCisKKyNkZWZpbmUgc3RyaWRvKG91dCwgdGVtcCwgaSkgZG8geyBcCisJdTY0IHQ7IFwKKwl0ICA9IHN0cmlib2dfdGFibGVbMF1bKHRlbXBbMF0gPj4gKGkgKiA4KSkgJiAweGZmXTsgXAorCXQgXj0gc3RyaWJvZ190YWJsZVsxXVsodGVtcFsxXSA+PiAoaSAqIDgpKSAmIDB4ZmZdOyBcCisJdCBePSBzdHJpYm9nX3RhYmxlWzJdWyh0ZW1wWzJdID4+IChpICogOCkpICYgMHhmZl07IFwKKwl0IF49IHN0cmlib2dfdGFibGVbM11bKHRlbXBbM10gPj4gKGkgKiA4KSkgJiAweGZmXTsgXAorCXQgXj0gc3RyaWJvZ190YWJsZVs0XVsodGVtcFs0XSA+PiAoaSAqIDgpKSAmIDB4ZmZdOyBcCisJdCBePSBzdHJpYm9nX3RhYmxlWzVdWyh0ZW1wWzVdID4+IChpICogOCkpICYgMHhmZl07IFwKKwl0IF49IHN0cmlib2dfdGFibGVbNl1bKHRlbXBbNl0gPj4gKGkgKiA4KSkgJiAweGZmXTsgXAorCXQgXj0gc3RyaWJvZ190YWJsZVs3XVsodGVtcFs3XSA+PiAoaSAqIDgpKSAmIDB4ZmZdOyBcCisJb3V0W2ldID0gdDsgfSB3aGlsZSgwKQorCitzdGF0aWMgdm9pZCBMUFNYICh1NjQgKm91dCwgY29uc3QgdTY0ICphLCBjb25zdCB1NjQgKmIpCit7CisgIHU2NCB0ZW1wWzhdOworICB0ZW1wWzBdID0gYVswXSBeIGJbMF07CisgIHRlbXBbMV0gPSBhWzFdIF4gYlsxXTsKKyAgdGVtcFsyXSA9IGFbMl0gXiBiWzJdOworICB0ZW1wWzNdID0gYVszXSBeIGJbM107CisgIHRlbXBbNF0gPSBhWzRdIF4gYls0XTsKKyAgdGVtcFs1XSA9IGFbNV0gXiBiWzVdOworICB0ZW1wWzZdID0gYVs2XSBeIGJbNl07CisgIHRlbXBbN10gPSBhWzddIF4gYls3XTsKKyAgc3RyaWRvIChvdXQsIHRlbXAsIDApOworICBzdHJpZG8gKG91dCwgdGVtcCwgMSk7CisgIHN0cmlkbyAob3V0LCB0ZW1wLCAyKTsKKyAgc3RyaWRvIChvdXQsIHRlbXAsIDMpOworICBzdHJpZG8gKG91dCwgdGVtcCwgNCk7CisgIHN0cmlkbyAob3V0LCB0ZW1wLCA1KTsKKyAgc3RyaWRvIChvdXQsIHRlbXAsIDYpOworICBzdHJpZG8gKG91dCwgdGVtcCwgNyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnICh1NjQgKmgsIHU2NCAqbSwgdTY0ICpOKQoreworICB1NjQgS1s4XTsKKyAgdTY0IFRbOF07CisgIGludCBpOworCisgIExQU1ggKEssIGgsIE4pOworCisgIExQU1ggKFQsIEssIG0pOworICBMUFNYIChLLCBLLCBDMTZbMF0pOworICBmb3IgKGkgPSAxOyBpIDwgMTI7IGkrKykKKyAgICB7CisgICAgICBMUFNYIChULCBLLCBUKTsKKyAgICAgIExQU1ggKEssIEssIEMxNltpXSk7CisgICAgfQorCisgIGhbMF0gXj0gVFswXSBeIEtbMF0gXiBtWzBdOworICBoWzFdIF49IFRbMV0gXiBLWzFdIF4gbVsxXTsKKyAgaFsyXSBePSBUWzJdIF4gS1syXSBeIG1bMl07CisgIGhbM10gXj0gVFszXSBeIEtbM10gXiBtWzNdOworICBoWzRdIF49IFRbNF0gXiBLWzRdIF4gbVs0XTsKKyAgaFs1XSBePSBUWzVdIF4gS1s1XSBeIG1bNV07CisgIGhbNl0gXj0gVFs2XSBeIEtbNl0gXiBtWzZdOworICBoWzddIF49IFRbN10gXiBLWzddIF4gbVs3XTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0cmFuc2Zvcm02NCAodm9pZCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWZfYXJnKTsKKworCitzdGF0aWMgdm9pZAorc3RyaWJvZ19pbml0XzUxMiAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICBTVFJJQk9HX0NPTlRFWFQgKmhkID0gY29udGV4dDsKKworICAodm9pZClmbGFnczsKKworICBtZW1zZXQgKGhkLCAwLCBzaXplb2YgKCpoZCkpOworCisgIGhkLT5iY3R4LmJsb2Nrc2l6ZSA9IDY0OworICBoZC0+YmN0eC5id3JpdGUgPSB0cmFuc2Zvcm02NDsKK30KKworc3RhdGljIHZvaWQKK3N0cmlib2dfaW5pdF8yNTYgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgU1RSSUJPR19DT05URVhUICpoZCA9IGNvbnRleHQ7CisKKyAgc3RyaWJvZ19pbml0XzUxMiAoY29udGV4dCwgZmxhZ3MpOworICBtZW1zZXQgKGhkLT5oLCAxLCA2NCk7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFuc2Zvcm0gKFNUUklCT0dfQ09OVEVYVCAqaGQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNvdW50KQoreworICB1NjQgTVs4XTsKKyAgdTY0IGw7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisgICAgTVtpXSA9IGJ1Zl9nZXRfbGU2NChkYXRhICsgaSAqIDgpOworCisgIGcgKGhkLT5oLCBNLCBoZC0+Tik7CisgIGwgPSBoZC0+TlswXTsKKyAgaGQtPk5bMF0gKz0gY291bnQ7CisgIGlmIChoZC0+TlswXSA8IGwpCisgICAgeyAvKiBvdmVyZmxvdyAqLworICAgICAgZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGhkLT5OW2ldKys7CisgICAgICAgICAgaWYgKGhkLT5OW2ldICE9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICBoZC0+U2lnbWFbMF0gKz0gTVswXTsKKyAgZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKyAgICBpZiAoaGQtPlNpZ21hW2ktMV0gPCBNW2ktMV0pCisgICAgICBoZC0+U2lnbWFbaV0gKz0gTVtpXSArIDE7CisgICAgZWxzZQorICAgICAgaGQtPlNpZ21hW2ldICs9IE1baV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybTY0ICh2b2lkICpjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1Zl9hcmcpCit7CisgIFNUUklCT0dfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworCisgIHRyYW5zZm9ybSAoaGQsIGluYnVmX2FyZywgNjQgKiA4KTsKKworICByZXR1cm4gLyogYnVybl9zdGFjayAqLyA3Njg7Cit9CisKKy8qCisgICBUaGUgcm91dGluZSBmaW5hbGx5IHRlcm1pbmF0ZXMgdGhlIGNvbXB1dGF0aW9uIGFuZCByZXR1cm5zIHRoZQorICAgZGlnZXN0LiAgVGhlIGhhbmRsZSBpcyBwcmVwYXJlZCBmb3IgYSBuZXcgY3ljbGUsIGJ1dCBhZGRpbmcgYnl0ZXMKKyAgIHRvIHRoZSBoYW5kbGUgd2lsbCB0aGUgZGVzdHJveSB0aGUgcmV0dXJuZWQgYnVmZmVyLiAgUmV0dXJuczogMzIKKyAgIGJ5dGVzIHdpdGggdGhlIG1lc3NhZ2UgdGhlIGRpZ2VzdC4gICovCitzdGF0aWMgdm9pZAorc3RyaWJvZ19maW5hbCAodm9pZCAqY29udGV4dCkKK3sKKyAgU1RSSUJPR19DT05URVhUICpoZCA9IGNvbnRleHQ7CisgIHU2NCBaWzhdID0ge307CisgIGludCBpOworCisgIF9nY3J5X21kX2Jsb2NrX3dyaXRlIChjb250ZXh0LCBOVUxMLCAwKTsgLyogZmx1c2ggKi8gOworICAvKiBQQUQuIEl0IGRvZXMgbm90IGNvdW50IHRvd2FyZHMgbWVzc2FnZSBsZW5ndGggKi8KKyAgaSA9IGhkLT5iY3R4LmNvdW50OworICAvKiBBZnRlciBmbHVzaCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBieXRlIGZyZWUpICovCisgIGhkLT5iY3R4LmJ1ZltpKytdID0gMTsKKyAgd2hpbGUgKGkgPCA2NCkKKyAgICBoZC0+YmN0eC5idWZbaSsrXSA9IDA7CisgIHRyYW5zZm9ybSAoaGQsIGhkLT5iY3R4LmJ1ZiwgaGQtPmJjdHguY291bnQgKiA4KTsKKworICBnIChoZC0+aCwgaGQtPk4sIFopOworICBnIChoZC0+aCwgaGQtPlNpZ21hLCBaKTsKKworICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorICAgIGhkLT5oW2ldID0gbGVfYnN3YXA2NChoZC0+aFtpXSk7CisKKyAgX2djcnlfYnVybl9zdGFjayAoNzY4KTsKK30KKworc3RhdGljIGJ5dGUgKgorc3RyaWJvZ19yZWFkXzUxMiAodm9pZCAqY29udGV4dCkKK3sKKyAgU1RSSUJPR19DT05URVhUICpoZCA9IGNvbnRleHQ7CisKKyAgcmV0dXJuIGhkLT5yZXN1bHQ7Cit9CisKK3N0YXRpYyBieXRlICoKK3N0cmlib2dfcmVhZF8yNTYgKHZvaWQgKmNvbnRleHQpCit7CisgIFNUUklCT0dfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworCisgIHJldHVybiBoZC0+cmVzdWx0ICsgMzI7Cit9CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3N0cmlib2dfMjU2ID0KKyAgeworICAgIEdDUllfTURfU1RSSUJPRzI1NiwgezAsIDB9LAorICAgICJTVFJJQk9HMjU2IiwgTlVMTCwgMCwgTlVMTCwgMzIsCisgICAgc3RyaWJvZ19pbml0XzI1NiwgX2djcnlfbWRfYmxvY2tfd3JpdGUsIHN0cmlib2dfZmluYWwsIHN0cmlib2dfcmVhZF8yNTYsCisgICAgc2l6ZW9mIChTVFJJQk9HX0NPTlRFWFQpCisgIH07CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3N0cmlib2dfNTEyID0KKyAgeworICAgIEdDUllfTURfU1RSSUJPRzUxMiwgezAsIDB9LAorICAgICJTVFJJQk9HNTEyIiwgTlVMTCwgMCwgTlVMTCwgNjQsCisgICAgc3RyaWJvZ19pbml0XzUxMiwgX2djcnlfbWRfYmxvY2tfd3JpdGUsIHN0cmlib2dfZmluYWwsIHN0cmlib2dfcmVhZF81MTIsCisgICAgc2l6ZW9mIChTVFJJQk9HX0NPTlRFWFQpCisgIH07CmRpZmYgLS1naXQgYS9jaXBoZXIvdGlnZXIuYyBiL2NpcGhlci90aWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGRjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvdGlnZXIuYwpAQCAtMCwwICsxLDg2NSBAQAorLyogdGlnZXIuYyAgLSAgVGhlIFRJR0VSIGhhc2ggZnVuY3Rpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMywgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworLyogU2VlIGh0dHA6Ly93d3cuY3MudGVjaG5pb24uYWMuaWwvfmJpaGFtL1JlcG9ydHMvVGlnZXIvICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImhhc2gtY29tbW9uLmgiCisjaW5jbHVkZSAiYml0aGVscC5oIgorI2luY2x1ZGUgImJ1ZmhlbHAuaCIKKworLyogV2UgcmVhbGx5IG5lZWQgYSA2NCBiaXQgdHlwZSBmb3IgdGhpcyBjb2RlLiAgKi8KKyNpZmRlZiBIQVZFX1U2NF9UWVBFREVGCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdjcnlfbWRfYmxvY2tfY3R4X3QgYmN0eDsKKyAgdTY0ICBhLCBiLCBjOworICBpbnQgIHZhcmlhbnQ7ICAvKiAwID0gb2xkIGNvZGUsIDEgPSBmaXhlZCBjb2RlLCAyIC0gVElHRVIyLiAgKi8KK30gVElHRVJfQ09OVEVYVDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPa2F5LCBva2F5LCB0aGlzIGlzIG5vdCB0aGUgZmFzdGVzdCBjb2RlIC0gaW1wcm92ZW1lbnRzIGFyZSB3ZWxjb21lLgorICoKKyAqLworCisvKiBTb21lIHRlc3QgdmVjdG9yczoKKyAqICIiICAgICAgICAgICAgICAgICAgIDI0RjAxMzBDNjNBQzkzMzIgMTYxNjZFNzZCMUJCOTI1RiBGMzczREUyRDQ5NTg0RTdBCisgKiAiYWJjIiAgICAgICAgICAgICAgICBGMjU4QzFFODg0MTRBQjJBIDUyN0FCNTQxRkZDNUI4QkYgOTM1RjdCOTUxQzEzMjk1MQorICogIlRpZ2VyIiAgICAgICAgICAgICAgOUYwMEY1OTkwNzIzMDBERCAyNzZBQkIzOEM4RUI2REVDIDM3NzkwQzExNkY5RDJCREYKKyAqICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstIgorICoJCQk4N0ZCMkE5MDgzODUxQ0Y3IDQ3MEQyQ0Y4MTBFNkRGOUUgQjU4NjQ0NTAzNEE1QTM4NgorICogIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KzAxMjM0NTY3ODkiCisgKgkJCTQ2N0RCODA4NjNFQkNFNDggOERGMUNEMTI2MTY1NURFOSA1Nzg5NjU2NTk3NUY5MTk3CisgKiAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sIGJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSIKKyAqCQkJMEM0MTBBMDQyOTY4ODY4QSAxNjcxREE1QTNGRDI5QTcyIDVFQzFFNDU3RDNDREIzMDMKKyAqICJUaWdlciAtIEEgRmFzdCBOZXcgSGFzaCBGdW5jdGlvbiwgYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtLCBwcm9jIgorICogImVlZGluZ3Mgb2YgRmFzdCBTb2Z0d2FyZSBFbmNyeXB0aW9uIDMsIENhbWJyaWRnZS4iCisgKgkJCUVCRjU5MUQ1QUZBNjU1Q0UgN0YyMjg5NEZGODdGNTRBQyA4OUM4MTFCNkIwREEzMTkzCisgKiAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sIGJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgcHJvYyIKKyAqICJlZWRpbmdzIG9mIEZhc3QgU29mdHdhcmUgRW5jcnlwdGlvbiAzLCBDYW1icmlkZ2UsIDE5OTYuIgorICoJCQkzRDlBRUIwM0QxQkQxQTYzIDU3QjI3NzRERkQ2RDVCMjQgREQ2ODE1MUQ1MDM5NzRGQworICogIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky1BQkNERUYiCisgKiAiR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLSIKKyAqCQkJMDBCODNFQjRFNTM0NDBDNSA3NkFDNkFBRUUwQTc0ODU4IDI1RkQxNUU3MEE1OUZGRTQKKyAqLworCitzdGF0aWMgdTY0IHNib3gxWzI1Nl0gPSB7CisgIFU2NF9DKDB4MDJhYWIxN2NmN2U5MGM1ZSkgLyogICAgMCAqLywgVTY0X0MoMHhhYzQyNGIwM2UyNDNhOGVjKSAvKiAgICAxICovLAorICBVNjRfQygweDcyY2Q1YmUzMGRkNWZjZDMpIC8qICAgIDIgKi8sIFU2NF9DKDB4NmQwMTliOTNmNmY5N2YzYSkgLyogICAgMyAqLywKKyAgVTY0X0MoMHhjZDk5NzhmZmQyMWY5MTkzKSAvKiAgICA0ICovLCBVNjRfQygweDc1NzNhMWM5NzA4MDI5ZTIpIC8qICAgIDUgKi8sCisgIFU2NF9DKDB4YjE2NDMyNmI5MjJhODNjMykgLyogICAgNiAqLywgVTY0X0MoMHg0Njg4M2VlZTA0OTE1ODcwKSAvKiAgICA3ICovLAorICBVNjRfQygweGVhYWNlMzA1NzEwM2VjZTYpIC8qICAgIDggKi8sIFU2NF9DKDB4YzU0MTY5YjgwOGEzNTM1YykgLyogICAgOSAqLywKKyAgVTY0X0MoMHg0Y2U3NTQ5MThkZGVjNDdjKSAvKiAgIDEwICovLCBVNjRfQygweDBhYTJmNGRmZGMwZGY0MGMpIC8qICAgMTEgKi8sCisgIFU2NF9DKDB4MTBiNzZmMThhNzRkYmVmYSkgLyogICAxMiAqLywgVTY0X0MoMHhjNmNjYjYyMzVhZDFhYjZhKSAvKiAgIDEzICovLAorICBVNjRfQygweDEzNzI2MTIxNTcyZmUyZmYpIC8qICAgMTQgKi8sIFU2NF9DKDB4MWE0ODhjNmYxOTlkOTIxZSkgLyogICAxNSAqLywKKyAgVTY0X0MoMHg0YmM5ZjlmNGRhMDAwN2NhKSAvKiAgIDE2ICovLCBVNjRfQygweDI2ZjVlNmY2ZTg1MjQxYzcpIC8qICAgMTcgKi8sCisgIFU2NF9DKDB4ODU5MDc5ZGJlYTU5NDdiNikgLyogICAxOCAqLywgVTY0X0MoMHg0ZjE4ODVjNWM5OWU4YzkyKSAvKiAgIDE5ICovLAorICBVNjRfQygweGQ3OGU3NjFlYTk2Zjg2NGIpIC8qICAgMjAgKi8sIFU2NF9DKDB4OGUzNjQyOGM1MmI1YzE3ZCkgLyogICAyMSAqLywKKyAgVTY0X0MoMHg2OWNmNjgyNzM3MzA2M2MxKSAvKiAgIDIyICovLCBVNjRfQygweGI2MDdjOTNkOWJiNGM1NmUpIC8qICAgMjMgKi8sCisgIFU2NF9DKDB4N2Q4MjBlNzYwZTc2YjVlYSkgLyogICAyNCAqLywgVTY0X0MoMHg2NDVjOWNjNmYwN2ZkYzQyKSAvKiAgIDI1ICovLAorICBVNjRfQygweGJmMzhhMDc4MjQzMzQyZTApIC8qICAgMjYgKi8sIFU2NF9DKDB4NWY2YjM0M2M5ZDJlN2QwNCkgLyogICAyNyAqLywKKyAgVTY0X0MoMHhmMmMyOGFlYjYwMGIwZWM2KSAvKiAgIDI4ICovLCBVNjRfQygweDZjMGVkODVmNzI1NGJjYWMpIC8qICAgMjkgKi8sCisgIFU2NF9DKDB4NzE1OTIyODFhNGRiNGZlNSkgLyogICAzMCAqLywgVTY0X0MoMHgxOTY3ZmE2OWNlMGZlZDlmKSAvKiAgIDMxICovLAorICBVNjRfQygweGZkNTI5M2Y4Yjk2NTQ1ZGIpIC8qICAgMzIgKi8sIFU2NF9DKDB4Yzg3OWU5ZDdmMmE3NjAwYikgLyogICAzMyAqLywKKyAgVTY0X0MoMHg4NjAyNDg5MjAxOTMxOTRlKSAvKiAgIDM0ICovLCBVNjRfQygweGE0Zjk1MzNiMmQ5Y2MwYjMpIC8qICAgMzUgKi8sCisgIFU2NF9DKDB4OTA1MzgzNmMxNTk1NzYxMykgLyogICAzNiAqLywgVTY0X0MoMHhkYjZkY2Y4YWZjMzU3YmYxKSAvKiAgIDM3ICovLAorICBVNjRfQygweDE4YmVlYTdhN2EzNzBmNTcpIC8qICAgMzggKi8sIFU2NF9DKDB4MDM3MTE3Y2E1MGI5OTA2NikgLyogICAzOSAqLywKKyAgVTY0X0MoMHg2YWIzMGE5Nzc0NDI0YTM1KSAvKiAgIDQwICovLCBVNjRfQygweGY0ZTkyZjAyZTMyNTI0OWIpIC8qICAgNDEgKi8sCisgIFU2NF9DKDB4NzczOWRiMDcwNjFjY2FlMSkgLyogICA0MiAqLywgVTY0X0MoMHhkOGYzYjQ5Y2VjYTQyYTA1KSAvKiAgIDQzICovLAorICBVNjRfQygweGJkNTZiZTNmNTEzODJmNzMpIC8qICAgNDQgKi8sIFU2NF9DKDB4NDVmYWVkNTg0M2IwYmIyOCkgLyogICA0NSAqLywKKyAgVTY0X0MoMHgxYzgxM2Q1YzExYmYxZjgzKSAvKiAgIDQ2ICovLCBVNjRfQygweDhhZjBlNGI2ZDc1ZmExNjkpIC8qICAgNDcgKi8sCisgIFU2NF9DKDB4MzNlZTE4YTQ4N2FkOTk5OSkgLyogICA0OCAqLywgVTY0X0MoMHgzYzI2ZThlYWIxYzk0NDEwKSAvKiAgIDQ5ICovLAorICBVNjRfQygweGI1MTAxMDJiYzBhODIyZjkpIC8qICAgNTAgKi8sIFU2NF9DKDB4MTQxZWVmMzEwY2U2MTIzYikgLyogICA1MSAqLywKKyAgVTY0X0MoMHhmYzY1YjkwMDU5ZGRiMTU0KSAvKiAgIDUyICovLCBVNjRfQygweGUwMTU4NjQwYzVlMGU2MDcpIC8qICAgNTMgKi8sCisgIFU2NF9DKDB4ODg0ZTA3OTgyNmMzYTNjZikgLyogICA1NCAqLywgVTY0X0MoMHg5MzBkMGQ5NTIzYzUzNWZkKSAvKiAgIDU1ICovLAorICBVNjRfQygweDM1NjM4ZDc1NGU5YTJiMDApIC8qICAgNTYgKi8sIFU2NF9DKDB4NDA4NWZjY2Y0MDQ2OWRkNSkgLyogICA1NyAqLywKKyAgVTY0X0MoMHhjNGIxN2FkMjhiZTIzYTRjKSAvKiAgIDU4ICovLCBVNjRfQygweGNhYjJmMGZjNmEzZTZhMmUpIC8qICAgNTkgKi8sCisgIFU2NF9DKDB4Mjg2MDk3MWE2Yjk0M2ZjZCkgLyogICA2MCAqLywgVTY0X0MoMHgzZGRlNmVlMjEyZTMwNDQ2KSAvKiAgIDYxICovLAorICBVNjRfQygweDYyMjJmMzJhZTAxNzY1YWUpIC8qICAgNjIgKi8sIFU2NF9DKDB4NWQ1NTBiYjU0NzgzMDhmZSkgLyogICA2MyAqLywKKyAgVTY0X0MoMHhhOWVmYTk4ZGEwZWRhMjJhKSAvKiAgIDY0ICovLCBVNjRfQygweGMzNTFhNzE2ODZjNDBkYTcpIC8qICAgNjUgKi8sCisgIFU2NF9DKDB4MTEwNTU4NmQ5Yzg2N2M4NCkgLyogICA2NiAqLywgVTY0X0MoMHhkY2ZmZWU4NWZkYTIyODUzKSAvKiAgIDY3ICovLAorICBVNjRfQygweGNjZmJkMDI2MmM1ZWVmNzYpIC8qICAgNjggKi8sIFU2NF9DKDB4YmFmMjk0Y2I4OTkwZDIwMSkgLyogICA2OSAqLywKKyAgVTY0X0MoMHhlNjk0NjRmNTJhZmFkOTc1KSAvKiAgIDcwICovLCBVNjRfQygweDk0YjAxM2FmZGYxMzNlMTQpIC8qICAgNzEgKi8sCisgIFU2NF9DKDB4MDZhN2QxYTMyODIzYzk1OCkgLyogICA3MiAqLywgVTY0X0MoMHg2Zjk1ZmU1MTMwZjYxMTE5KSAvKiAgIDczICovLAorICBVNjRfQygweGQ5MmFiMzRlNDYyYzA2YzApIC8qICAgNzQgKi8sIFU2NF9DKDB4ZWQ3YmRlMzM4ODdjNzFkMikgLyogICA3NSAqLywKKyAgVTY0X0MoMHg3OTc0NmQ2ZTY1MTgzOTNlKSAvKiAgIDc2ICovLCBVNjRfQygweDViYTQxOTM4NWQ3MTMzMjkpIC8qICAgNzcgKi8sCisgIFU2NF9DKDB4N2MxYmE2Yjk0OGE5NzU2NCkgLyogICA3OCAqLywgVTY0X0MoMHgzMTk4N2MxOTdiZmRhYzY3KSAvKiAgIDc5ICovLAorICBVNjRfQygweGRlNmMyM2M0NGIwNTNkMDIpIC8qICAgODAgKi8sIFU2NF9DKDB4NTgxYzQ5ZmVkMDAyZDY0ZCkgLyogICA4MSAqLywKKyAgVTY0X0MoMHhkZDQ3NGQ2MzM4MjYxNTcxKSAvKiAgIDgyICovLCBVNjRfQygweGFhNDU0NmMzZTQ3M2QwNjIpIC8qICAgODMgKi8sCisgIFU2NF9DKDB4OTI4ZmNlMzQ5NDU1Zjg2MCkgLyogICA4NCAqLywgVTY0X0MoMHg0ODE2MWJiYWNhYWI5NGQ5KSAvKiAgIDg1ICovLAorICBVNjRfQygweDYzOTEyNDMwNzcwZTZmNjgpIC8qICAgODYgKi8sIFU2NF9DKDB4NmVjOGE1ZTYwMmM2NjQxYykgLyogICA4NyAqLywKKyAgVTY0X0MoMHg4NzI4MjUxNTMzN2RkZDJiKSAvKiAgIDg4ICovLCBVNjRfQygweDJjZGE2YjQyMDM0YjcwMWIpIC8qICAgODkgKi8sCisgIFU2NF9DKDB4YjAzZDM3YzE4MWNiMDk2ZCkgLyogICA5MCAqLywgVTY0X0MoMHhlMTA4NDM4MjY2YzcxYzZmKSAvKiAgIDkxICovLAorICBVNjRfQygweDJiMzE4MGM3ZWI1MWIyNTUpIC8qICAgOTIgKi8sIFU2NF9DKDB4ZGY5MmI4MmY5NmMwOGJiYykgLyogICA5MyAqLywKKyAgVTY0X0MoMHg1YzY4YzhjMGE2MzJmM2JhKSAvKiAgIDk0ICovLCBVNjRfQygweDU1MDRjYzg2MWMzZDA1NTYpIC8qICAgOTUgKi8sCisgIFU2NF9DKDB4YWJiZmE0ZTU1ZmIyNmI4ZikgLyogICA5NiAqLywgVTY0X0MoMHg0MTg0OGIwYWIzYmFjZWI0KSAvKiAgIDk3ICovLAorICBVNjRfQygweGIzMzRhMjczYWE0NDVkMzIpIC8qICAgOTggKi8sIFU2NF9DKDB4YmNhNjk2ZjBhODVhZDg4MSkgLyogICA5OSAqLywKKyAgVTY0X0MoMHgyNGY2ZWM2NWI1MjhkNTZjKSAvKiAgMTAwICovLCBVNjRfQygweDBjZTE1MTJlOTBmNDUyNGEpIC8qICAxMDEgKi8sCisgIFU2NF9DKDB4NGU5ZGQ3OWQ1NTA2ZDM1YSkgLyogIDEwMiAqLywgVTY0X0MoMHgyNTg5MDVmYWM2Y2U5Nzc5KSAvKiAgMTAzICovLAorICBVNjRfQygweDIwMTkyOTViM2UxMDliMzMpIC8qICAxMDQgKi8sIFU2NF9DKDB4ZjhhOTQ3OGI3M2EwNTRjYykgLyogIDEwNSAqLywKKyAgVTY0X0MoMHgyOTI0ZjJmOTM0NDE3ZWIwKSAvKiAgMTA2ICovLCBVNjRfQygweDM5OTMzNTdkNTM2ZDFiYzQpIC8qICAxMDcgKi8sCisgIFU2NF9DKDB4MzhhODFhYzIxZGI2ZmY4YikgLyogIDEwOCAqLywgVTY0X0MoMHg0N2M0ZmJmMTdkNjAxNmJmKSAvKiAgMTA5ICovLAorICBVNjRfQygweDFlMGZhYWRkNzY2N2UzZjUpIC8qICAxMTAgKi8sIFU2NF9DKDB4N2FiY2ZmNjI5MzhiZWI5NikgLyogIDExMSAqLywKKyAgVTY0X0MoMHhhNzhkYWQ5NDhmYzE3OWM5KSAvKiAgMTEyICovLCBVNjRfQygweDhmMWY5OGI3MjkxMWU1MGQpIC8qICAxMTMgKi8sCisgIFU2NF9DKDB4NjFlNDhlYWUyNzEyMWE5MSkgLyogIDExNCAqLywgVTY0X0MoMHg0ZDYyZjdhZDMxODU5ODA4KSAvKiAgMTE1ICovLAorICBVNjRfQygweGVjZWJhMzQ1ZWY1Y2VhZWIpIC8qICAxMTYgKi8sIFU2NF9DKDB4ZjVjZWIyNWViYzk2ODRjZSkgLyogIDExNyAqLywKKyAgVTY0X0MoMHhmNjMzZTIwY2I3Zjc2MjIxKSAvKiAgMTE4ICovLCBVNjRfQygweGEzMmNkZjA2YWI4MjkzZTQpIC8qICAxMTkgKi8sCisgIFU2NF9DKDB4OTg1YTIwMmNhNWVlMmNhNCkgLyogIDEyMCAqLywgVTY0X0MoMHhjZjBiODQ0N2NjOGE4ZmIxKSAvKiAgMTIxICovLAorICBVNjRfQygweDlmNzY1MjQ0OTc5ODU5YTMpIC8qICAxMjIgKi8sIFU2NF9DKDB4YThkNTE2YjFhMTI0MDAxNykgLyogIDEyMyAqLywKKyAgVTY0X0MoMHgwYmQ3YmEzZWJiNWRjNzI2KSAvKiAgMTI0ICovLCBVNjRfQygweGU1NGJjYTU1Yjg2YWRiMzkpIC8qICAxMjUgKi8sCisgIFU2NF9DKDB4MWQ3YTNhZmQ2YzQ3ODA2MykgLyogIDEyNiAqLywgVTY0X0MoMHg1MTllYzYwOGU3NjY5ZWRkKSAvKiAgMTI3ICovLAorICBVNjRfQygweDBlNTcxNWEyZDE0OWFhMjMpIC8qICAxMjggKi8sIFU2NF9DKDB4MTc3ZDQ1NzE4NDhmZjE5NCkgLyogIDEyOSAqLywKKyAgVTY0X0MoMHhlZWI1NWYzMjQxMDE0YzIyKSAvKiAgMTMwICovLCBVNjRfQygweDBmNWU1Y2ExM2E2ZTJlYzIpIC8qICAxMzEgKi8sCisgIFU2NF9DKDB4ODAyOTkyN2I3NWY1YzM2MSkgLyogIDEzMiAqLywgVTY0X0MoMHhhZDEzOWZhYmMzZDZlNDM2KSAvKiAgMTMzICovLAorICBVNjRfQygweDBkNWRmMWE5NGNjZjQwMmYpIC8qICAxMzQgKi8sIFU2NF9DKDB4M2U4YmQ5NDhiZWE1ZGZjOCkgLyogIDEzNSAqLywKKyAgVTY0X0MoMHhhNWEwZDM1N2JkM2ZmNzdlKSAvKiAgMTM2ICovLCBVNjRfQygweGEyZDEyZTI1MWY3NGY2NDUpIC8qICAxMzcgKi8sCisgIFU2NF9DKDB4NjZmZDllNTI1ZTgxYTA4MikgLyogIDEzOCAqLywgVTY0X0MoMHgyZTBjOTBjZTdmNjg3YTQ5KSAvKiAgMTM5ICovLAorICBVNjRfQygweGMyZThiY2JlYmE5NzNiYzUpIC8qICAxNDAgKi8sIFU2NF9DKDB4MDAwMDAxYmNlNTA5NzQ1ZikgLyogIDE0MSAqLywKKyAgVTY0X0MoMHg0MjM3NzdiYmU2ZGFiM2Q2KSAvKiAgMTQyICovLCBVNjRfQygweGQxNjYxYzdlYWVmMDZlYjUpIC8qICAxNDMgKi8sCisgIFU2NF9DKDB4YTE3ODFmMzU0ZGFhY2ZkOCkgLyogIDE0NCAqLywgVTY0X0MoMHgyZDExMjg0YTJiMTZhZmZjKSAvKiAgMTQ1ICovLAorICBVNjRfQygweGYxZmM0ZjY3ZmE4OTFkMWYpIC8qICAxNDYgKi8sIFU2NF9DKDB4NzNlY2MyNWRjYjkyMGFkYSkgLyogIDE0NyAqLywKKyAgVTY0X0MoMHhhZTYxMGMyMmMyYTEyNjUxKSAvKiAgMTQ4ICovLCBVNjRfQygweDk2ZTBhODEwZDM1NmI3OGEpIC8qICAxNDkgKi8sCisgIFU2NF9DKDB4NWE5YTM4MWYyZmU3ODcwZikgLyogIDE1MCAqLywgVTY0X0MoMHhkNWFkNjJlZGU5NGU1NTMwKSAvKiAgMTUxICovLAorICBVNjRfQygweGQyMjVlNWU4MzY4ZDE0MjcpIC8qICAxNTIgKi8sIFU2NF9DKDB4NjU5NzdiNzBjN2FmNDYzMSkgLyogIDE1MyAqLywKKyAgVTY0X0MoMHg5OWY4ODliMmRlMzlkNzRmKSAvKiAgMTU0ICovLCBVNjRfQygweDIzM2YzMGJmNTRlMWQxNDMpIC8qICAxNTUgKi8sCisgIFU2NF9DKDB4OWE5Njc1ZDNkOWE2M2M5NykgLyogIDE1NiAqLywgVTY0X0MoMHg1NDcwNTU0ZmYzMzRmOWE4KSAvKiAgMTU3ICovLAorICBVNjRfQygweDE2NmFjYjc0NGE0ZjU2ODgpIC8qICAxNTggKi8sIFU2NF9DKDB4NzBjNzRjYWFiMmU0YWVhZCkgLyogIDE1OSAqLywKKyAgVTY0X0MoMHhmMGQwOTE2NDZmMjk0ZDEyKSAvKiAgMTYwICovLCBVNjRfQygweDU3YjgyYTg5Njg0MDMxZDEpIC8qICAxNjEgKi8sCisgIFU2NF9DKDB4ZWZkOTVhNWE2MWJlMGI2YikgLyogIDE2MiAqLywgVTY0X0MoMHgyZmJkMTJlOTY5ZjJmMjlhKSAvKiAgMTYzICovLAorICBVNjRfQygweDliZDM3MDEzZmVmZjlmZTgpIC8qICAxNjQgKi8sIFU2NF9DKDB4M2Y5YjA0MDRkNjA4NWEwNikgLyogIDE2NSAqLywKKyAgVTY0X0MoMHg0OTQwYzFmMzE2NmNmZTE1KSAvKiAgMTY2ICovLCBVNjRfQygweDA5NTQyYzRkY2RmM2RlZmIpIC8qICAxNjcgKi8sCisgIFU2NF9DKDB4YjRjNTIxODM4NWNkNWNlMykgLyogIDE2OCAqLywgVTY0X0MoMHhjOTM1YjdkYzQ0NjJhNjQxKSAvKiAgMTY5ICovLAorICBVNjRfQygweDM0MTdmOGE2OGVkM2I2M2YpIC8qICAxNzAgKi8sIFU2NF9DKDB4YjgwOTU5Mjk1YjIxNWI0MCkgLyogIDE3MSAqLywKKyAgVTY0X0MoMHhmOTljZGFlZjNiOGM4NTcyKSAvKiAgMTcyICovLCBVNjRfQygweDAxOGMwNjE0ZjhmY2I5NWQpIC8qICAxNzMgKi8sCisgIFU2NF9DKDB4MWIxNGFjY2QxYTNhY2RmMykgLyogIDE3NCAqLywgVTY0X0MoMHg4NGQ0NzFmMjAwYmI3MzJkKSAvKiAgMTc1ICovLAorICBVNjRfQygweGMxYTMxMTBlOTVlOGRhMTYpIC8qICAxNzYgKi8sIFU2NF9DKDB4NDMwYTcyMjBiZjFhODJiOCkgLyogIDE3NyAqLywKKyAgVTY0X0MoMHhiNzdlMDkwZDM5ZGYyMTBlKSAvKiAgMTc4ICovLCBVNjRfQygweDVlZjRiZDlmM2NkMDVlOWQpIC8qICAxNzkgKi8sCisgIFU2NF9DKDB4OWQ0ZmY2ZGE3ZTU3YTQ0NCkgLyogIDE4MCAqLywgVTY0X0MoMHhkYTFkNjBlMTgzZDRhNWY4KSAvKiAgMTgxICovLAorICBVNjRfQygweGIyODdjMzg0MTc5OThlNDcpIC8qICAxODIgKi8sIFU2NF9DKDB4ZmUzZWRjMTIxYmIzMTg4NikgLyogIDE4MyAqLywKKyAgVTY0X0MoMHhjN2ZlM2NjYzk4MGNjYmVmKSAvKiAgMTg0ICovLCBVNjRfQygweGU0NmZiNTkwMTg5YmZkMDMpIC8qICAxODUgKi8sCisgIFU2NF9DKDB4MzczMmZkNDY5YTRjNTdkYykgLyogIDE4NiAqLywgVTY0X0MoMHg3ZWY3MDBhMDdjZjFhZDY1KSAvKiAgMTg3ICovLAorICBVNjRfQygweDU5YzY0NDY4YTMxZDg4NTkpIC8qICAxODggKi8sIFU2NF9DKDB4NzYyZmIwYjRkNDViNjFmNikgLyogIDE4OSAqLywKKyAgVTY0X0MoMHgxNTViYWVkMDk5MDQ3NzE4KSAvKiAgMTkwICovLCBVNjRfQygweDY4NzU1ZTRjM2Q1MGJhYTYpIC8qICAxOTEgKi8sCisgIFU2NF9DKDB4ZTkyMTRlN2YyMmQ4YjRkZikgLyogIDE5MiAqLywgVTY0X0MoMHgyYWRkYmY1MzJlYWM5NWY0KSAvKiAgMTkzICovLAorICBVNjRfQygweDMyYWUzOTA5YjRiZDAxMDkpIC8qICAxOTQgKi8sIFU2NF9DKDB4ODM0ZGY1MzdiMDhlMzQ1MCkgLyogIDE5NSAqLywKKyAgVTY0X0MoMHhmYTIwOWRhODQyMjA3MjhkKSAvKiAgMTk2ICovLCBVNjRfQygweDllNjkxZDliOWVmZTIzZjcpIC8qICAxOTcgKi8sCisgIFU2NF9DKDB4MDQ0NmQyODhjNGFlOGQ3ZikgLyogIDE5OCAqLywgVTY0X0MoMHg3YjRjYzUyNGUxNjk3ODViKSAvKiAgMTk5ICovLAorICBVNjRfQygweDIxZDg3ZjAxMzVjYTEzODUpIC8qICAyMDAgKi8sIFU2NF9DKDB4Y2ViYjQwMGYxMzdiOGFhNSkgLyogIDIwMSAqLywKKyAgVTY0X0MoMHgyNzJlMmI2NjU4MDc5NmJlKSAvKiAgMjAyICovLCBVNjRfQygweDM2MTIyNjQxMjVjMmIwZGUpIC8qICAyMDMgKi8sCisgIFU2NF9DKDB4MDU3NzAyYmRhZDFlZmJiMikgLyogIDIwNCAqLywgVTY0X0MoMHhkNGJhYmI4ZWFjZjg0YmU5KSAvKiAgMjA1ICovLAorICBVNjRfQygweDkxNTgzMTM5NjQxYmM2N2IpIC8qICAyMDYgKi8sIFU2NF9DKDB4OGJkYzJkZTA4MDM2ZTAyNCkgLyogIDIwNyAqLywKKyAgVTY0X0MoMHg2MDNjODE1NmY0OWY2OGVkKSAvKiAgMjA4ICovLCBVNjRfQygweGY3ZDIzNmY3ZGJlZjUxMTEpIC8qICAyMDkgKi8sCisgIFU2NF9DKDB4OTcyN2M0NTk4YWQyMWU4MCkgLyogIDIxMCAqLywgVTY0X0MoMHhhMDhhMDg5NjY3MGE1ZmQ3KSAvKiAgMjExICovLAorICBVNjRfQygweGNiNGE4ZjQzMDllYmE5Y2IpIC8qICAyMTIgKi8sIFU2NF9DKDB4ODFhZjU2NGIwZjcwMzZhMSkgLyogIDIxMyAqLywKKyAgVTY0X0MoMHhjMGI5OWFhNzc4MTk5YWJkKSAvKiAgMjE0ICovLCBVNjRfQygweDk1OWYxZWM4M2ZjOGU5NTIpIC8qICAyMTUgKi8sCisgIFU2NF9DKDB4OGM1MDUwNzc3OTRhODFiOSkgLyogIDIxNiAqLywgVTY0X0MoMHgzYWNhYWY4ZjA1NjMzOGYwKSAvKiAgMjE3ICovLAorICBVNjRfQygweDA3YjQzZjUwNjI3YTY3NzgpIC8qICAyMTggKi8sIFU2NF9DKDB4NGE0NGFiNDlmNWVjY2M3NykgLyogIDIxOSAqLywKKyAgVTY0X0MoMHgzYmMzZDZlNGI2NzllZTk4KSAvKiAgMjIwICovLCBVNjRfQygweDljYzBkNGQxY2YxNDEwOGMpIC8qICAyMjEgKi8sCisgIFU2NF9DKDB4NDQwNmMwMGIyMDZiYzhhMCkgLyogIDIyMiAqLywgVTY0X0MoMHg4MmExODg1NGM4ZDcyZDg5KSAvKiAgMjIzICovLAorICBVNjRfQygweDY3ZTM2NmIzNWMzYzQzMmMpIC8qICAyMjQgKi8sIFU2NF9DKDB4YjkyM2RkNjExMDJiMzdmMikgLyogIDIyNSAqLywKKyAgVTY0X0MoMHg1NmFiMjc3OWQ4ODQyNzFkKSAvKiAgMjI2ICovLCBVNjRfQygweGJlODNlMWIwZmYxNTI1YWYpIC8qICAyMjcgKi8sCisgIFU2NF9DKDB4ZmI3YzY1ZDQyMTdlNDlhOSkgLyogIDIyOCAqLywgVTY0X0MoMHg2YmRiZTBlNzZkNDhlN2Q0KSAvKiAgMjI5ICovLAorICBVNjRfQygweDA4ZGY4Mjg3NDVkOTE3OWUpIC8qICAyMzAgKi8sIFU2NF9DKDB4MjJlYTZhOWFkZDUzYmQzNCkgLyogIDIzMSAqLywKKyAgVTY0X0MoMHhlMzZlMTQxYzU2MjIyMDBhKSAvKiAgMjMyICovLCBVNjRfQygweDdmODA1ZDFiOGNiNzUwZWUpIC8qICAyMzMgKi8sCisgIFU2NF9DKDB4YWZlNWM3YTU5ZjU4ZTgzNykgLyogIDIzNCAqLywgVTY0X0MoMHhlMjdmOTk2YTRmYjFjMjNjKSAvKiAgMjM1ICovLAorICBVNjRfQygweGQzODY3ZGZiMDc3NWYwZDApIC8qICAyMzYgKi8sIFU2NF9DKDB4ZDBlNjczZGU2ZTg4ODkxYSkgLyogIDIzNyAqLywKKyAgVTY0X0MoMHgxMjNhZWI5ZWFmYjg2YzI1KSAvKiAgMjM4ICovLCBVNjRfQygweDMwZjFkNWQ1YzE0NWI4OTUpIC8qICAyMzkgKi8sCisgIFU2NF9DKDB4YmI0MzRhMmRlZTcyNjllNykgLyogIDI0MCAqLywgVTY0X0MoMHg3OGNiNjdlY2Y5MzFmYTM4KSAvKiAgMjQxICovLAorICBVNjRfQygweGYzM2IwMzcyMzIzYmJmOWMpIC8qICAyNDIgKi8sIFU2NF9DKDB4NTJkNjYzMzZmYjI3OWM3NCkgLyogIDI0MyAqLywKKyAgVTY0X0MoMHg1MDVmMzNhYzBhZmI0ZWFhKSAvKiAgMjQ0ICovLCBVNjRfQygweGU4YTVjZDk5YTJjY2UxODcpIC8qICAyNDUgKi8sCisgIFU2NF9DKDB4NTM0OTc0ODAxZTJkMzBiYikgLyogIDI0NiAqLywgVTY0X0MoMHg4ZDJkNTcxMWQ1ODc2ZDkwKSAvKiAgMjQ3ICovLAorICBVNjRfQygweDFmMWE0MTI4OTFiYzAzOGUpIC8qICAyNDggKi8sIFU2NF9DKDB4ZDZlMmU3MWQ4MmU1NjY0OCkgLyogIDI0OSAqLywKKyAgVTY0X0MoMHg3NDAzNmMzYTQ5NzczMmI3KSAvKiAgMjUwICovLCBVNjRfQygweDg5YjY3ZWQ5NjM2MWY1YWIpIC8qICAyNTEgKi8sCisgIFU2NF9DKDB4ZmZlZDk1ZDhmMWVhMDJhMikgLyogIDI1MiAqLywgVTY0X0MoMHhlNzJiM2JkNjE0NjRkNDNkKSAvKiAgMjUzICovLAorICBVNjRfQygweGE2MzAwZjE3MGJkYzQ4MjApIC8qICAyNTQgKi8sIFU2NF9DKDB4ZWJjMTg3NjBlZDc4YTc3YSkgLyogIDI1NSAqLworfTsKK3N0YXRpYyB1NjQgc2JveDJbMjU2XSA9IHsKKyAgVTY0X0MoMHhlNmE2YmU1YTA1YTEyMTM4KSAvKiAgMjU2ICovLCBVNjRfQygweGI1YTEyMmE1YjRmODdjOTgpIC8qICAyNTcgKi8sCisgIFU2NF9DKDB4NTYzYzYwODkxNDBiNjk5MCkgLyogIDI1OCAqLywgVTY0X0MoMHg0YzQ2Y2IyZTM5MWY1ZGQ1KSAvKiAgMjU5ICovLAorICBVNjRfQygweGQ5MzJhZGRiYzliNzk0MzQpIC8qICAyNjAgKi8sIFU2NF9DKDB4MDhlYTcwZTQyMDE1YWZmNSkgLyogIDI2MSAqLywKKyAgVTY0X0MoMHhkNzY1YTY2NzNlNDc4Y2YxKSAvKiAgMjYyICovLCBVNjRfQygweGM0ZmI3NTdlYWIyNzhkOTkpIC8qICAyNjMgKi8sCisgIFU2NF9DKDB4ZGYxMWM2ODYyZDZlMDY5MikgLyogIDI2NCAqLywgVTY0X0MoMHhkZGViODRmMTBkN2YzYjE2KSAvKiAgMjY1ICovLAorICBVNjRfQygweDZmMmVmNjA0YTY2NWVhMDQpIC8qICAyNjYgKi8sIFU2NF9DKDB4NGE4ZTBmMGZmMGUwZGZiMykgLyogIDI2NyAqLywKKyAgVTY0X0MoMHhhNWVkZWVmODNkYmNiYTUxKSAvKiAgMjY4ICovLCBVNjRfQygweGZjNGYwYTJhMGVhNDM3MWUpIC8qICAyNjkgKi8sCisgIFU2NF9DKDB4ZTgzZTFkYTg1Y2IzODQyOSkgLyogIDI3MCAqLywgVTY0X0MoMHhkYzhmZjg4MmJhMWIxY2UyKSAvKiAgMjcxICovLAorICBVNjRfQygweGNkNDU1MDVlODM1M2U4MGQpIC8qICAyNzIgKi8sIFU2NF9DKDB4MThkMTlhMDBkNGRiMDcxNykgLyogIDI3MyAqLywKKyAgVTY0X0MoMHgzNGEwY2ZlZGE1ZjM4MTAxKSAvKiAgMjc0ICovLCBVNjRfQygweDBiZTc3ZTUxODg4N2NhZjIpIC8qICAyNzUgKi8sCisgIFU2NF9DKDB4MWUzNDE0MzhiM2M0NTEzNikgLyogIDI3NiAqLywgVTY0X0MoMHhlMDU3OTdmNDkwODljY2Y5KSAvKiAgMjc3ICovLAorICBVNjRfQygweGZmZDIzZjlkZjI1OTFkMTQpIC8qICAyNzggKi8sIFU2NF9DKDB4NTQzZGRhMjI4NTk1YzVjZCkgLyogIDI3OSAqLywKKyAgVTY0X0MoMHg2NjFmODFmZDk5MDUyYTMzKSAvKiAgMjgwICovLCBVNjRfQygweDg3MzZlNjQxZGIwZjdiNzYpIC8qICAyODEgKi8sCisgIFU2NF9DKDB4MTUyMjc3MjU0MThlNTMwNykgLyogIDI4MiAqLywgVTY0X0MoMHhlMjVmN2Y0NjE2MmViMmZhKSAvKiAgMjgzICovLAorICBVNjRfQygweDQ4YThiMjEyNmMxM2Q5ZmUpIC8qICAyODQgKi8sIFU2NF9DKDB4YWZkYzU0MTc5MmU3NmVlYSkgLyogIDI4NSAqLywKKyAgVTY0X0MoMHgwM2Q5MTJiZmM2ZDE4OThmKSAvKiAgMjg2ICovLCBVNjRfQygweDMxYjFhYWZhMWI4M2Y1MWIpIC8qICAyODcgKi8sCisgIFU2NF9DKDB4ZjFhYzI3OTZlNDJhYjdkOSkgLyogIDI4OCAqLywgVTY0X0MoMHg0MGEzYTdkN2ZjZDJlYmFjKSAvKiAgMjg5ICovLAorICBVNjRfQygweDEwNTYxMzZkMGFmYmJjYzUpIC8qICAyOTAgKi8sIFU2NF9DKDB4Nzg4OWUxZGQ5YTZkMGM4NSkgLyogIDI5MSAqLywKKyAgVTY0X0MoMHhkMzM1MjU3ODJhNzk3NGFhKSAvKiAgMjkyICovLCBVNjRfQygweGE3ZTI1ZDA5MDc4YWMwOWIpIC8qICAyOTMgKi8sCisgIFU2NF9DKDB4YmQ0MTM4YjNlYWM2ZWRkMCkgLyogIDI5NCAqLywgVTY0X0MoMHg5MjBhYmZiZTcxZWI5ZTcwKSAvKiAgMjk1ICovLAorICBVNjRfQygweGEyYTVkMGY1NGZjMjYyNWMpIC8qICAyOTYgKi8sIFU2NF9DKDB4YzA1NGUzNmIwYjEyOTBhMykgLyogIDI5NyAqLywKKyAgVTY0X0MoMHhmNmRkNTlmZjYyZmU5MzJiKSAvKiAgMjk4ICovLCBVNjRfQygweDM1MzczNTQ1MTFhOGFjN2QpIC8qICAyOTkgKi8sCisgIFU2NF9DKDB4Y2E4NDVlOTE3MmZhZGNkNCkgLyogIDMwMCAqLywgVTY0X0MoMHg4NGY4MmI2MDMyOWQyMGRjKSAvKiAgMzAxICovLAorICBVNjRfQygweDc5YzYyY2UxY2Q2NzJmMTgpIC8qICAzMDIgKi8sIFU2NF9DKDB4OGIwOWEyYWRkMTI0NjQyYykgLyogIDMwMyAqLywKKyAgVTY0X0MoMHhkMGMxZTk2YTE5ZDllNzI2KSAvKiAgMzA0ICovLCBVNjRfQygweDVhNzg2YTliNGJhOTUwMGMpIC8qICAzMDUgKi8sCisgIFU2NF9DKDB4MGUwMjAzMzY2MzRjNDNmMykgLyogIDMwNiAqLywgVTY0X0MoMHhjMTdiNDc0YWViNjZkODIyKSAvKiAgMzA3ICovLAorICBVNjRfQygweDZhNzMxYWUzZWM5YmFhYzIpIC8qICAzMDggKi8sIFU2NF9DKDB4ODIyNjY2N2FlMDg0MDI1OCkgLyogIDMwOSAqLywKKyAgVTY0X0MoMHg2N2Q0NTY3NjkxY2FlY2E1KSAvKiAgMzEwICovLCBVNjRfQygweDFkOTQxNTVjNDg3NWFkYjUpIC8qICAzMTEgKi8sCisgIFU2NF9DKDB4NmQwMGZkOTg1YjgxM2ZkZikgLyogIDMxMiAqLywgVTY0X0MoMHg1MTI4NmVmY2I3NzRjZDA2KSAvKiAgMzEzICovLAorICBVNjRfQygweDVlODgzNDQ3MWZhNzQ0YWYpIC8qICAzMTQgKi8sIFU2NF9DKDB4ZjcyY2EwYWVlNzYxYWUyZSkgLyogIDMxNSAqLywKKyAgVTY0X0MoMHhiZTQwZTRjZGFlZThlMDlhKSAvKiAgMzE2ICovLCBVNjRfQygweGU5OTcwYmJiNTExOGY2NjUpIC8qICAzMTcgKi8sCisgIFU2NF9DKDB4NzI2ZTRiZWIzM2RmMTk2NCkgLyogIDMxOCAqLywgVTY0X0MoMHg3MDNiMDAwNzI5MTk5NzYyKSAvKiAgMzE5ICovLAorICBVNjRfQygweDQ2MzFkODE2ZjVlZjMwYTcpIC8qICAzMjAgKi8sIFU2NF9DKDB4Yjg4MGI1YjUxNTA0YTZiZSkgLyogIDMyMSAqLywKKyAgVTY0X0MoMHg2NDE3OTNjMzdlZDg0YjZjKSAvKiAgMzIyICovLCBVNjRfQygweDdiMjFlZDc3ZjZlOTdkOTYpIC8qICAzMjMgKi8sCisgIFU2NF9DKDB4Nzc2MzA2MzEyZWY5NmI3MykgLyogIDMyNCAqLywgVTY0X0MoMHhhZTUyODk0OGU4NmZmM2Y0KSAvKiAgMzI1ICovLAorICBVNjRfQygweDUzZGJkN2YyODZhM2Y4ZjgpIC8qICAzMjYgKi8sIFU2NF9DKDB4MTZjYWRjZTc0Y2ZjMTA2MykgLyogIDMyNyAqLywKKyAgVTY0X0MoMHgwMDVjMTliZGZhNTJjNmRkKSAvKiAgMzI4ICovLCBVNjRfQygweDY4ODY4ZjVkNjRkNDZhZDMpIC8qICAzMjkgKi8sCisgIFU2NF9DKDB4M2E5ZDUxMmNjZjFlMTg2YSkgLyogIDMzMCAqLywgVTY0X0MoMHgzNjdlNjJjMjM4NTY2MGFlKSAvKiAgMzMxICovLAorICBVNjRfQygweGUzNTllN2VhNzdkY2IxZDcpIC8qICAzMzIgKi8sIFU2NF9DKDB4NTI2YzA3NzM3NDlhYmU2ZSkgLyogIDMzMyAqLywKKyAgVTY0X0MoMHg3MzVhZTVmOWQwOWY3MzRiKSAvKiAgMzM0ICovLCBVNjRfQygweDQ5M2ZjN2NjOGE1NThiYTgpIC8qICAzMzUgKi8sCisgIFU2NF9DKDB4YjBiOWMxNTMzMDQxYWI0NSkgLyogIDMzNiAqLywgVTY0X0MoMHgzMjE5NThiYTQ3MGE1OWJkKSAvKiAgMzM3ICovLAorICBVNjRfQygweDg1MmRiMDBiNWY0NmMzOTMpIC8qICAzMzggKi8sIFU2NF9DKDB4OTEyMDliMmJkMzM2YjBlNSkgLyogIDMzOSAqLywKKyAgVTY0X0MoMHg2ZTYwNGY3ZDY1OWVmMTlmKSAvKiAgMzQwICovLCBVNjRfQygweGI5OWE4YWUyNzgyY2NiMjQpIC8qICAzNDEgKi8sCisgIFU2NF9DKDB4Y2NmNTJhYjZjODE0YzRjNykgLyogIDM0MiAqLywgVTY0X0MoMHg0NzI3ZDlhZmJlMTE3MjdiKSAvKiAgMzQzICovLAorICBVNjRfQygweDdlOTUwZDBjMDEyMWIzNGQpIC8qICAzNDQgKi8sIFU2NF9DKDB4NzU2ZjQzNTY3MGFkNDcxZikgLyogIDM0NSAqLywKKyAgVTY0X0MoMHhmNWFkZDQ0MjYxNWE2ODQ5KSAvKiAgMzQ2ICovLCBVNjRfQygweDRlODdlMDk5ODBiOTk1N2EpIC8qICAzNDcgKi8sCisgIFU2NF9DKDB4MmFjZmExZGY1MGFlZTM1NSkgLyogIDM0OCAqLywgVTY0X0MoMHhkODk4MjYzYWZkMmZkNTU2KSAvKiAgMzQ5ICovLAorICBVNjRfQygweGM4ZjQ5MjRkZDgwYzhmZDYpIC8qICAzNTAgKi8sIFU2NF9DKDB4Y2Y5OWNhM2Q3NTRhMTczYSkgLyogIDM1MSAqLywKKyAgVTY0X0MoMHhmZTQ3N2JhY2FmOTFiZjNjKSAvKiAgMzUyICovLCBVNjRfQygweGVkNTM3MWY2ZDY5MGMxMmQpIC8qICAzNTMgKi8sCisgIFU2NF9DKDB4ODMxYTVjMjg1ZTY4NzA5NCkgLyogIDM1NCAqLywgVTY0X0MoMHhjNWQzYzkwYTM3MDhhMGE0KSAvKiAgMzU1ICovLAorICBVNjRfQygweDBmN2Y5MDM3MTdkMDY1ODApIC8qICAzNTYgKi8sIFU2NF9DKDB4MTlmOWJiMTNiOGZkZjI3ZikgLyogIDM1NyAqLywKKyAgVTY0X0MoMHhiMWJkNmYxYjRkNTAyODQzKSAvKiAgMzU4ICovLCBVNjRfQygweDFjNzYxYmEzOGZmZjQwMTIpIC8qICAzNTkgKi8sCisgIFU2NF9DKDB4MGQxNTMwYzRlMmUyMWYzYikgLyogIDM2MCAqLywgVTY0X0MoMHg4OTQzY2U2OWE3MzcyYzhhKSAvKiAgMzYxICovLAorICBVNjRfQygweGU1MTg0ZTExZmViNWNlNjYpIC8qICAzNjIgKi8sIFU2NF9DKDB4NjE4YmRiODBiZDczNjYyMSkgLyogIDM2MyAqLywKKyAgVTY0X0MoMHg3ZDI5YmFkNjhiNTc0ZDBiKSAvKiAgMzY0ICovLCBVNjRfQygweDgxYmI2MTNlMjVlNmZlNWIpIC8qICAzNjUgKi8sCisgIFU2NF9DKDB4MDcxYzljMTBiYzA3OTEzZikgLyogIDM2NiAqLywgVTY0X0MoMHhjN2JlZWI3OTA5YWMyZDk3KSAvKiAgMzY3ICovLAorICBVNjRfQygweGMzZTU4ZDM1M2JjNWQ3NTcpIC8qICAzNjggKi8sIFU2NF9DKDB4ZWIwMTc4OTJmMzhmNjFlOCkgLyogIDM2OSAqLywKKyAgVTY0X0MoMHhkNGVmZmI5YzliMWNjMjFhKSAvKiAgMzcwICovLCBVNjRfQygweDk5NzI3ZDI2ZjQ5NGY3YWIpIC8qICAzNzEgKi8sCisgIFU2NF9DKDB4YTNlMDYzYTI5NTZiM2UwMykgLyogIDM3MiAqLywgVTY0X0MoMHg5ZDRhOGI5YTRhYTA5YzMwKSAvKiAgMzczICovLAorICBVNjRfQygweDNmNmFiN2Q1MDAwOTBmYjQpIC8qICAzNzQgKi8sIFU2NF9DKDB4OWNjMGYyYTA1NzI2OGFjMCkgLyogIDM3NSAqLywKKyAgVTY0X0MoMHgzZGVlOWQyZGVkYmY0MmQxKSAvKiAgMzc2ICovLCBVNjRfQygweDMzMGY0OWM4Nzk2MGE5NzIpIC8qICAzNzcgKi8sCisgIFU2NF9DKDB4YzZiMjcyMDI4NzQyMWI0MSkgLyogIDM3OCAqLywgVTY0X0MoMHgwYWM1OWVjMDdjMDAzNjljKSAvKiAgMzc5ICovLAorICBVNjRfQygweGVmNGVhYzQ5Y2IzNTM0MjUpIC8qICAzODAgKi8sIFU2NF9DKDB4ZjQ1MDI0NGVlZjAxMjlkOCkgLyogIDM4MSAqLywKKyAgVTY0X0MoMHg4YWNjNDZlNWNhZjRkZWI2KSAvKiAgMzgyICovLCBVNjRfQygweDJmZmVhYjYzOTg5MjYzZjcpIC8qICAzODMgKi8sCisgIFU2NF9DKDB4OGY3Y2I5ZmU1ZDdhNDU3OCkgLyogIDM4NCAqLywgVTY0X0MoMHg1YmQ4Zjc2NDRlNjM0NjM1KSAvKiAgMzg1ICovLAorICBVNjRfQygweDQyN2E3MzE1YmYyZGM5MDApIC8qICAzODYgKi8sIFU2NF9DKDB4MTdkMGM0YWEyMTI1MjYxYykgLyogIDM4NyAqLywKKyAgVTY0X0MoMHgzOTkyNDg2YzkzNTE4ZTUwKSAvKiAgMzg4ICovLCBVNjRfQygweGI0Y2JmZWUwYTJkN2Q0YzMpIC8qICAzODkgKi8sCisgIFU2NF9DKDB4N2M3NWQ2MjAyYzVkZGQ4ZCkgLyogIDM5MCAqLywgVTY0X0MoMHhkYmMyOTVkOGUzNWI2YzYxKSAvKiAgMzkxICovLAorICBVNjRfQygweDYwYjM2OWQzMDIwMzJiMTkpIC8qICAzOTIgKi8sIFU2NF9DKDB4Y2U0MjY4NWZkY2U0NDEzMikgLyogIDM5MyAqLywKKyAgVTY0X0MoMHgwNmYzZGRiOWRkZjY1NjEwKSAvKiAgMzk0ICovLCBVNjRfQygweDhlYTRkMjFkYjVlMTQ4ZjApIC8qICAzOTUgKi8sCisgIFU2NF9DKDB4MjBiMGZjZTYyZmNkNDk2ZikgLyogIDM5NiAqLywgVTY0X0MoMHgyYzFiOTEyMzU4YjBlZTMxKSAvKiAgMzk3ICovLAorICBVNjRfQygweGIyODMxN2I4MThmNWEzMDgpIC8qICAzOTggKi8sIFU2NF9DKDB4YTg5YzFlMTg5Y2E2ZDJjZikgLyogIDM5OSAqLywKKyAgVTY0X0MoMHgwYzZiMTg1NzZhYWFkYmM4KSAvKiAgNDAwICovLCBVNjRfQygweGI2NWRlYWE5MTI5OWZhZTMpIC8qICA0MDEgKi8sCisgIFU2NF9DKDB4ZmIyYjc5NGI3ZjEwMjdlNykgLyogIDQwMiAqLywgVTY0X0MoMHgwNGU0MzE3ZjQ0M2I1YmViKSAvKiAgNDAzICovLAorICBVNjRfQygweDRiODUyZDMyNTkzOWQwYTYpIC8qICA0MDQgKi8sIFU2NF9DKDB4ZDVhZTZiZWVmYjIwN2ZmYykgLyogIDQwNSAqLywKKyAgVTY0X0MoMHgzMDk2ODJiMjgxYzdkMzc0KSAvKiAgNDA2ICovLCBVNjRfQygweGJhZTMwOWExOTRjM2I0NzUpIC8qICA0MDcgKi8sCisgIFU2NF9DKDB4OGNjM2Y5N2IxM2I0OWYwNSkgLyogIDQwOCAqLywgVTY0X0MoMHg5OGE5NDIyZmY4MjkzOTY3KSAvKiAgNDA5ICovLAorICBVNjRfQygweDI0NGIxNmIwMTA3NmZmN2MpIC8qICA0MTAgKi8sIFU2NF9DKDB4ZjhiZjU3MWM2NjNkNjdlZSkgLyogIDQxMSAqLywKKyAgVTY0X0MoMHgxZjBkNjc1OGVlZTMwZGExKSAvKiAgNDEyICovLCBVNjRfQygweGM5YjYxMWQ5N2FkZWI5YjcpIC8qICA0MTMgKi8sCisgIFU2NF9DKDB4YjdhZmQ1ODg3YjZjNTdhMikgLyogIDQxNCAqLywgVTY0X0MoMHg2MjkwYWU4NDZiOTg0ZmUxKSAvKiAgNDE1ICovLAorICBVNjRfQygweDk0ZGY0Y2RlYWNjMWE1ZmQpIC8qICA0MTYgKi8sIFU2NF9DKDB4MDU4YTViZDFjNTQ4M2FmZikgLyogIDQxNyAqLywKKyAgVTY0X0MoMHg2MzE2NmNjMTQyYmEzYzM3KSAvKiAgNDE4ICovLCBVNjRfQygweDhkYjg1MjZlYjJmNzZmNDApIC8qICA0MTkgKi8sCisgIFU2NF9DKDB4ZTEwODgwMDM2ZjBkNmQ0ZSkgLyogIDQyMCAqLywgVTY0X0MoMHg5ZTA1MjNjOTk3MWQzMTFkKSAvKiAgNDIxICovLAorICBVNjRfQygweDQ1ZWMyODI0Y2M3Y2Q2OTEpIC8qICA0MjIgKi8sIFU2NF9DKDB4NTc1YjgzNTllNjIzODJjOSkgLyogIDQyMyAqLywKKyAgVTY0X0MoMHhmYTllNDAwZGM0ODg5OTk1KSAvKiAgNDI0ICovLCBVNjRfQygweGQxODIzZWNiNDU3MjE1NjgpIC8qICA0MjUgKi8sCisgIFU2NF9DKDB4ZGFmZDk4M2I4MjA2MDgyZikgLyogIDQyNiAqLywgVTY0X0MoMHhhYTdkMjkwODIzODZhOGNiKSAvKiAgNDI3ICovLAorICBVNjRfQygweDI2OWZjZDQ0MDNiODc1ODgpIC8qICA0MjggKi8sIFU2NF9DKDB4MWI5MWY1ZjcyOGJkZDFlMCkgLyogIDQyOSAqLywKKyAgVTY0X0MoMHhlNDY2OWYzOTA0MDIwMWY2KSAvKiAgNDMwICovLCBVNjRfQygweDdhMWQ3YzIxOGNmMDRhZGUpIC8qICA0MzEgKi8sCisgIFU2NF9DKDB4NjU2MjNjMjlkNzljZTVjZSkgLyogIDQzMiAqLywgVTY0X0MoMHgyMzY4NDQ5MDk2YzAwYmIxKSAvKiAgNDMzICovLAorICBVNjRfQygweGFiOWJmMTg3OWRhNTAzYmEpIC8qICA0MzQgKi8sIFU2NF9DKDB4YmMyM2VjYjFhNDU4MDU4ZSkgLyogIDQzNSAqLywKKyAgVTY0X0MoMHg5YTU4ZGYwMWJiNDAxZWNjKSAvKiAgNDM2ICovLCBVNjRfQygweGEwNzBlODY4YTg1ZjE0M2QpIC8qICA0MzcgKi8sCisgIFU2NF9DKDB4NGZmMTg4MzA3ZGYyMjM5ZSkgLyogIDQzOCAqLywgVTY0X0MoMHgxNGQ1NjViNDFhNjQxMTgzKSAvKiAgNDM5ICovLAorICBVNjRfQygweGVlMTMzMzc0NTI3MDE2MDIpIC8qICA0NDAgKi8sIFU2NF9DKDB4OTUwZTNkY2YzZjI4NWUwOSkgLyogIDQ0MSAqLywKKyAgVTY0X0MoMHg1OTkzMDI1NGI5YzgwOTUzKSAvKiAgNDQyICovLCBVNjRfQygweDNiZjI5OTQwODkzMGRhNmQpIC8qICA0NDMgKi8sCisgIFU2NF9DKDB4YTk1NTk0M2Y1MzY5MTM4NykgLyogIDQ0NCAqLywgVTY0X0MoMHhhMTVlZGVjYWE5Y2I4Nzg0KSAvKiAgNDQ1ICovLAorICBVNjRfQygweDI5MTQyMTI3MzUyYmU5YTApIC8qICA0NDYgKi8sIFU2NF9DKDB4NzZmMDM3MWZmZjRlN2FmYikgLyogIDQ0NyAqLywKKyAgVTY0X0MoMHgwMjM5ZjQ1MDI3NGYyMjI4KSAvKiAgNDQ4ICovLCBVNjRfQygweGJiMDczYWYwMWQ1ZTg2OGIpIC8qICA0NDkgKi8sCisgIFU2NF9DKDB4YmZjODA1NzFjMTBlOTZjMSkgLyogIDQ1MCAqLywgVTY0X0MoMHhkMjY3MDg4NTY4MjIyZTIzKSAvKiAgNDUxICovLAorICBVNjRfQygweDk2NzFhM2Q0OGU4MGI1YjApIC8qICA0NTIgKi8sIFU2NF9DKDB4NTViNWQzOGFlMTkzYmI4MSkgLyogIDQ1MyAqLywKKyAgVTY0X0MoMHg2OTNhZTJkMGExOGIwNGI4KSAvKiAgNDU0ICovLCBVNjRfQygweDVjNDhiNGVjYWRkNTMzNWYpIC8qICA0NTUgKi8sCisgIFU2NF9DKDB4ZmQ3NDNiMTk0OTE2YTFjYSkgLyogIDQ1NiAqLywgVTY0X0MoMHgyNTc3MDE4MTM0YmU5OGM0KSAvKiAgNDU3ICovLAorICBVNjRfQygweGU3Nzk4N2U4M2M1NGE0YWQpIC8qICA0NTggKi8sIFU2NF9DKDB4MjhlMTEwMTRkYTMzZTFiOSkgLyogIDQ1OSAqLywKKyAgVTY0X0MoMHgyNzBjYzU5ZTIyNmFhMjEzKSAvKiAgNDYwICovLCBVNjRfQygweDcxNDk1Zjc1NmQxYTVmNjApIC8qICA0NjEgKi8sCisgIFU2NF9DKDB4OWJlODUzZmI2MGFmZWY3NykgLyogIDQ2MiAqLywgVTY0X0MoMHhhZGM3ODZhN2Y3NDQzZGJmKSAvKiAgNDYzICovLAorICBVNjRfQygweDA5MDQ0NTYxNzNiMjlhODIpIC8qICA0NjQgKi8sIFU2NF9DKDB4NThiYzdhNjZjMjMyYmQ1ZSkgLyogIDQ2NSAqLywKKyAgVTY0X0MoMHhmMzA2NTU4YzY3M2FjOGIyKSAvKiAgNDY2ICovLCBVNjRfQygweDQxZjYzOWM2YjZjOTc3MmEpIC8qICA0NjcgKi8sCisgIFU2NF9DKDB4MjE2ZGVmZTk5ZmRhMzVkYSkgLyogIDQ2OCAqLywgVTY0X0MoMHgxMTY0MGNjNzFjN2JlNjE1KSAvKiAgNDY5ICovLAorICBVNjRfQygweDkzYzQzNjk0NTY1YzU1MjcpIC8qICA0NzAgKi8sIFU2NF9DKDB4ZWEwMzhlNjI0Njc3NzgzOSkgLyogIDQ3MSAqLywKKyAgVTY0X0MoMHhmOWFiZjNjZTVhM2UyNDY5KSAvKiAgNDcyICovLCBVNjRfQygweDc0MWU3NjhkMGZkMzEyZDIpIC8qICA0NzMgKi8sCisgIFU2NF9DKDB4MDE0NGI4ODNjZWQ2NTJjNikgLyogIDQ3NCAqLywgVTY0X0MoMHhjMjBiNWE1YmEzM2Y4NTUyKSAvKiAgNDc1ICovLAorICBVNjRfQygweDFhZTY5NjMzYzM0MzVhOWQpIC8qICA0NzYgKi8sIFU2NF9DKDB4OTdhMjhjYTQwODhjZmRlYykgLyogIDQ3NyAqLywKKyAgVTY0X0MoMHg4ODI0YTQzYzFlOTZmNDIwKSAvKiAgNDc4ICovLCBVNjRfQygweDM3NjEyZmE2NmVlZWE3NDYpIC8qICA0NzkgKi8sCisgIFU2NF9DKDB4NmI0Y2IxNjVmOWNmMGU1YSkgLyogIDQ4MCAqLywgVTY0X0MoMHg0M2FhMWMwNmEwYWJmYjRhKSAvKiAgNDgxICovLAorICBVNjRfQygweDdmNGRjMjZmZjE2Mjc5NmIpIC8qICA0ODIgKi8sIFU2NF9DKDB4NmNiYWNjOGU1NGVkOWIwZikgLyogIDQ4MyAqLywKKyAgVTY0X0MoMHhhNmI3ZmZlZmQyYmIyNTNlKSAvKiAgNDg0ICovLCBVNjRfQygweDJlMjViYzk1YjBhMjlkNGYpIC8qICA0ODUgKi8sCisgIFU2NF9DKDB4ODZkNmE1OGJkZWYxMzg4YykgLyogIDQ4NiAqLywgVTY0X0MoMHhkZWQ3NGFjNTc2YjZmMDU0KSAvKiAgNDg3ICovLAorICBVNjRfQygweDgwMzBiZGJjMmI0NTgwNWQpIC8qICA0ODggKi8sIFU2NF9DKDB4M2M4MWFmNzBlOTRkOTI4OSkgLyogIDQ4OSAqLywKKyAgVTY0X0MoMHgzZWZmNmRkYTllMzEwMGRiKSAvKiAgNDkwICovLCBVNjRfQygweGIzOGRjMzlmZGZjYzg4NDcpIC8qICA0OTEgKi8sCisgIFU2NF9DKDB4MTIzODg1NTI4ZDE3Yjg3ZSkgLyogIDQ5MiAqLywgVTY0X0MoMHhmMmRhMGVkMjQwYjFiNjQyKSAvKiAgNDkzICovLAorICBVNjRfQygweDQ0Y2VmYWRjZDU0YmY5YTkpIC8qICA0OTQgKi8sIFU2NF9DKDB4MTMxMjIwMGU0MzNjN2VlNikgLyogIDQ5NSAqLywKKyAgVTY0X0MoMHg5ZmZjYzg0ZjNhNzhjNzQ4KSAvKiAgNDk2ICovLCBVNjRfQygweGYwY2QxZjcyMjQ4NTc2YmIpIC8qICA0OTcgKi8sCisgIFU2NF9DKDB4ZWM2OTc0MDUzNjM4Y2ZlNCkgLyogIDQ5OCAqLywgVTY0X0MoMHgyYmE3YjY3YzBjZWM0ZTRjKSAvKiAgNDk5ICovLAorICBVNjRfQygweGFjMmY0ZGYzZTVjZTMyZWQpIC8qICA1MDAgKi8sIFU2NF9DKDB4Y2IzM2QxNDMyNmVhNGMxMSkgLyogIDUwMSAqLywKKyAgVTY0X0MoMHhhNGU5MDQ0Y2M3N2U1OGJjKSAvKiAgNTAyICovLCBVNjRfQygweDVmNTEzMjkzZDkzNGZjZWYpIC8qICA1MDMgKi8sCisgIFU2NF9DKDB4NWRjOTY0NTUwNmU1NTQ0NCkgLyogIDUwNCAqLywgVTY0X0MoMHg1MGRlNDE4ZjMxN2RlNDBhKSAvKiAgNTA1ICovLAorICBVNjRfQygweDM4OGNiMzFhNjlkZGUyNTkpIC8qICA1MDYgKi8sIFU2NF9DKDB4MmRiNGE4MzQ1NTgyMGE4NikgLyogIDUwNyAqLywKKyAgVTY0X0MoMHg5MDEwYTkxZTg0NzExYWU5KSAvKiAgNTA4ICovLCBVNjRfQygweDRkZjdmMGI3YjE0OTgzNzEpIC8qICA1MDkgKi8sCisgIFU2NF9DKDB4ZDYyYTJlYWJjMDk3NzE3OSkgLyogIDUxMCAqLywgVTY0X0MoMHgyMmZhYzA5N2FhOGQ1YzBlKSAvKiAgNTExICovCit9Oworc3RhdGljIHU2NCBzYm94M1syNTZdID0geworICBVNjRfQygweGY0OWZjYzJmZjFkYWYzOWIpIC8qICA1MTIgKi8sIFU2NF9DKDB4NDg3ZmQ1YzY2ZmYyOTI4MSkgLyogIDUxMyAqLywKKyAgVTY0X0MoMHhlOGEzMDY2N2ZjZGNhODNmKSAvKiAgNTE0ICovLCBVNjRfQygweDJjOWI0YmUzZDJmY2NlNjMpIC8qICA1MTUgKi8sCisgIFU2NF9DKDB4ZGEzZmY3NGI5M2ZiYmJjMikgLyogIDUxNiAqLywgVTY0X0MoMHgyZmExNjVkMmZlNzBiYTY2KSAvKiAgNTE3ICovLAorICBVNjRfQygweGExMDNlMjc5OTcwZTkzZDQpIC8qICA1MTggKi8sIFU2NF9DKDB4YmVjZGVjNzdiMGU0NWU3MSkgLyogIDUxOSAqLywKKyAgVTY0X0MoMHhjZmI0MWU3MjM5ODVlNDk3KSAvKiAgNTIwICovLCBVNjRfQygweGI3MGFhYTAyNWVmNzUwMTcpIC8qICA1MjEgKi8sCisgIFU2NF9DKDB4ZDQyMzA5ZjAzODQwYjhlMCkgLyogIDUyMiAqLywgVTY0X0MoMHg4ZWZjMWFkMDM1ODk4NTc5KSAvKiAgNTIzICovLAorICBVNjRfQygweDk2YzY5MjBiZTJiMmFiYzUpIC8qICA1MjQgKi8sIFU2NF9DKDB4NjZhZjQxNjMzNzVhOTE3MikgLyogIDUyNSAqLywKKyAgVTY0X0MoMHgyMTc0YWJkY2NhNzEyN2ZiKSAvKiAgNTI2ICovLCBVNjRfQygweGIzM2NjZWE2NGE3MmZmNDEpIC8qICA1MjcgKi8sCisgIFU2NF9DKDB4ZjA0YTQ5MzMwODMwNjZhNSkgLyogIDUyOCAqLywgVTY0X0MoMHg4ZDk3MGFjZGQ3Mjg5YWY1KSAvKiAgNTI5ICovLAorICBVNjRfQygweDhmOTZlOGUwMzFjOGMyNWUpIC8qICA1MzAgKi8sIFU2NF9DKDB4ZjNmZWMwMjI3Njg3NWQ0NykgLyogIDUzMSAqLywKKyAgVTY0X0MoMHhlYzdiZjMxMDA1NjE5MGRkKSAvKiAgNTMyICovLCBVNjRfQygweGY1YWRiMGFlYmIwZjE0OTEpIC8qICA1MzMgKi8sCisgIFU2NF9DKDB4OWI1MGY4ODUwZmQ1ODg5MikgLyogIDUzNCAqLywgVTY0X0MoMHg0OTc1NDg4MzU4Yjc0ZGU4KSAvKiAgNTM1ICovLAorICBVNjRfQygweGEzMzU0ZmY2OTE1MzFjNjEpIC8qICA1MzYgKi8sIFU2NF9DKDB4MDcwMmJiZTQ4MWQyYzZlZSkgLyogIDUzNyAqLywKKyAgVTY0X0MoMHg4OWZiMjQwNTdkZWRlZDk4KSAvKiAgNTM4ICovLCBVNjRfQygweGFjMzA3NTEzODU5NmU5MDIpIC8qICA1MzkgKi8sCisgIFU2NF9DKDB4MWQyZDM1ODAxNzI3NzJlZCkgLyogIDU0MCAqLywgVTY0X0MoMHhlYjczOGZjMjhlNmJjMzBkKSAvKiAgNTQxICovLAorICBVNjRfQygweDU4NTRlZjhmNjMwNDQzMjYpIC8qICA1NDIgKi8sIFU2NF9DKDB4OWU1YzUyMzI1YWRkM2JiZSkgLyogIDU0MyAqLywKKyAgVTY0X0MoMHg5MGFhNTNjZjMyNWM0NjIzKSAvKiAgNTQ0ICovLCBVNjRfQygweGMxZDI0ZDUxMzQ5ZGQwNjcpIC8qICA1NDUgKi8sCisgIFU2NF9DKDB4MjA1MWNmZWVhNjllYTYyNCkgLyogIDU0NiAqLywgVTY0X0MoMHgxMzIyMGYwYTg2MmU3ZTRmKSAvKiAgNTQ3ICovLAorICBVNjRfQygweGNlMzkzOTk0MDRlMDQ4NjQpIC8qICA1NDggKi8sIFU2NF9DKDB4ZDljNDJjYTQ3MDg2ZmNiNykgLyogIDU0OSAqLywKKyAgVTY0X0MoMHg2ODVhZDIyMzhhMDNlN2NjKSAvKiAgNTUwICovLCBVNjRfQygweDA2NjQ4NGIyYWIyZmYxZGIpIC8qICA1NTEgKi8sCisgIFU2NF9DKDB4ZmU5ZDVkNzBlZmJmNzllYykgLyogIDU1MiAqLywgVTY0X0MoMHg1YjEzYjlkZDljNDgxODU0KSAvKiAgNTUzICovLAorICBVNjRfQygweDE1ZjBkNDc1ZWQxNTA5YWQpIC8qICA1NTQgKi8sIFU2NF9DKDB4MGJlYmNkMDYwZWM3OTg1MSkgLyogIDU1NSAqLywKKyAgVTY0X0MoMHhkNThjNjc5MTE4M2FiN2Y4KSAvKiAgNTU2ICovLCBVNjRfQygweGQxMTg3YzUwNTJmM2VlZTQpIC8qICA1NTcgKi8sCisgIFU2NF9DKDB4Yzk1ZDExOTJlNTRlODJmZikgLyogIDU1OCAqLywgVTY0X0MoMHg4NmVlYTE0Y2I5YWM2Y2EyKSAvKiAgNTU5ICovLAorICBVNjRfQygweDM0ODViZWIxNTM2NzdkNWQpIC8qICA1NjAgKi8sIFU2NF9DKDB4ZGQxOTFkNzgxZjhjNDkyYSkgLyogIDU2MSAqLywKKyAgVTY0X0MoMHhmNjA4NjZiYWE3ODRlYmY5KSAvKiAgNTYyICovLCBVNjRfQygweDUxOGY2NDNiYTJkMDhjNzQpIC8qICA1NjMgKi8sCisgIFU2NF9DKDB4ODg1MmU5NTZlMTA4N2MyMikgLyogIDU2NCAqLywgVTY0X0MoMHhhNzY4Y2I4ZGM0MTBhZThkKSAvKiAgNTY1ICovLAorICBVNjRfQygweDM4MDQ3NzI2YmZlYzhlMWEpIC8qICA1NjYgKi8sIFU2NF9DKDB4YTY3NzM4YjRjZDNiNDVhYSkgLyogIDU2NyAqLywKKyAgVTY0X0MoMHhhZDE2NjkxY2VjMGRkZTE5KSAvKiAgNTY4ICovLCBVNjRfQygweGM2ZDQzMTkzODA0NjJlMDcpIC8qICA1NjkgKi8sCisgIFU2NF9DKDB4YzVhNTg3NmQwYmE2MTkzOCkgLyogIDU3MCAqLywgVTY0X0MoMHgxNmI5ZmExZmE1OGZkODQwKSAvKiAgNTcxICovLAorICBVNjRfQygweDE4OGFiMTE3M2NhNzRmMTgpIC8qICA1NzIgKi8sIFU2NF9DKDB4YWJkYTJmOThjOTljMDIxZikgLyogIDU3MyAqLywKKyAgVTY0X0MoMHgzZTA1ODBhYjEzNGFlODE2KSAvKiAgNTc0ICovLCBVNjRfQygweDVmM2IwNWI3NzM2NDVhYmIpIC8qICA1NzUgKi8sCisgIFU2NF9DKDB4MjUwMWEyYmU1NTc1ZjJmNikgLyogIDU3NiAqLywgVTY0X0MoMHgxYjJmNzQwMDRlN2U4YmE5KSAvKiAgNTc3ICovLAorICBVNjRfQygweDFjZDc1ODAzNzFlOGQ5NTMpIC8qICA1NzggKi8sIFU2NF9DKDB4N2Y2ZWQ4OTU2Mjc2NGUzMCkgLyogIDU3OSAqLywKKyAgVTY0X0MoMHhiMTU5MjZmZjU5NmYwMDNkKSAvKiAgNTgwICovLCBVNjRfQygweDlmNjUyOTNkYThjNWQ2YjkpIC8qICA1ODEgKi8sCisgIFU2NF9DKDB4NmVjZWYwNGRkNjkwZjg0YykgLyogIDU4MiAqLywgVTY0X0MoMHg0NzgyMjc1ZmZmMzNhZjg4KSAvKiAgNTgzICovLAorICBVNjRfQygweGU0MTQzMzA4M2Y4MjA4MDEpIC8qICA1ODQgKi8sIFU2NF9DKDB4ZmQwZGZlNDA5YTFhZjliNSkgLyogIDU4NSAqLywKKyAgVTY0X0MoMHg0MzI1YTMzNDJjZGIzOTZiKSAvKiAgNTg2ICovLCBVNjRfQygweDhhZTc3ZTYyYjMwMWIyNTIpIC8qICA1ODcgKi8sCisgIFU2NF9DKDB4YzM2ZjllOWY2NjU1NjE1YSkgLyogIDU4OCAqLywgVTY0X0MoMHg4NTQ1NWEyZDkyZDMyYzA5KSAvKiAgNTg5ICovLAorICBVNjRfQygweGYyYzdkZWE5NDk0Nzc0ODUpIC8qICA1OTAgKi8sIFU2NF9DKDB4NjNjZmI0YzEzM2EzOWViYSkgLyogIDU5MSAqLywKKyAgVTY0X0MoMHg4M2IwNDBjYzZlYmM1NDYyKSAvKiAgNTkyICovLCBVNjRfQygweDNiOTQ1NGM4ZmRiMzI2YjApIC8qICA1OTMgKi8sCisgIFU2NF9DKDB4NTZmNTZhOWU4N2ZmZDc4YykgLyogIDU5NCAqLywgVTY0X0MoMHgyZGMyOTQwZDk5ZjQyYmM2KSAvKiAgNTk1ICovLAorICBVNjRfQygweDk4ZjdkZjA5NmIwOTZlMmQpIC8qICA1OTYgKi8sIFU2NF9DKDB4MTlhNmUwMWUzYWQ4NTJiZikgLyogIDU5NyAqLywKKyAgVTY0X0MoMHg0MmE5OWNjYmRiZDRiNDBiKSAvKiAgNTk4ICovLCBVNjRfQygweGE1OTk5OGFmNDVlOWM1NTkpIC8qICA1OTkgKi8sCisgIFU2NF9DKDB4MzY2Mjk1ZTgwN2Q5MzE4NikgLyogIDYwMCAqLywgVTY0X0MoMHg2YjQ4MTgxYmZhYTFmNzczKSAvKiAgNjAxICovLAorICBVNjRfQygweDFmZWM1N2UyMTU3YTBhMWQpIC8qICA2MDIgKi8sIFU2NF9DKDB4NDY2NzQ0NmFmNjIwMWFkNSkgLyogIDYwMyAqLywKKyAgVTY0X0MoMHhlNjE1ZWJjYWNmYjBmMDc1KSAvKiAgNjA0ICovLCBVNjRfQygweGI4ZjMxZjRmNjgyOTA3NzgpIC8qICA2MDUgKi8sCisgIFU2NF9DKDB4MjI3MTNlZDZjZTIyZDExZSkgLyogIDYwNiAqLywgVTY0X0MoMHgzMDU3YzFhNzJlYzNjOTNiKSAvKiAgNjA3ICovLAorICBVNjRfQygweGNiNDZhY2MzN2MzZjFmMmYpIC8qICA2MDggKi8sIFU2NF9DKDB4ZGJiODkzZmQwMmFhZjUwZSkgLyogIDYwOSAqLywKKyAgVTY0X0MoMHgzMzFmZDkyZTYwMGI5ZmNmKSAvKiAgNjEwICovLCBVNjRfQygweGE0OThmOTYxNDhlYTNhZDYpIC8qICA2MTEgKi8sCisgIFU2NF9DKDB4YThkODQyNmU4YjZhODNlYSkgLyogIDYxMiAqLywgVTY0X0MoMHhhMDg5YjI3NGI3NzM1Y2RjKSAvKiAgNjEzICovLAorICBVNjRfQygweDg3ZjZiMzczMWU1MjRhMTEpIC8qICA2MTQgKi8sIFU2NF9DKDB4MTE4ODA4ZTVjYmM5Njc0OSkgLyogIDYxNSAqLywKKyAgVTY0X0MoMHg5OTA2ZTRjN2IxOWJkMzk0KSAvKiAgNjE2ICovLCBVNjRfQygweGFmZWQ3ZjdlOWIyNGEyMGMpIC8qICA2MTcgKi8sCisgIFU2NF9DKDB4NjUwOWVhZGVlYjM2NDRhNykgLyogIDYxOCAqLywgVTY0X0MoMHg2YzFlZjFkM2U4ZWYwZWRlKSAvKiAgNjE5ICovLAorICBVNjRfQygweGI5Yzk3ZDQzZTk3OThmYjQpIC8qICA2MjAgKi8sIFU2NF9DKDB4YTJmMmQ3ODQ3NDBjMjhhMykgLyogIDYyMSAqLywKKyAgVTY0X0MoMHg3Yjg0OTY0NzYxOTc1NjZmKSAvKiAgNjIyICovLCBVNjRfQygweDdhNWJlM2U2YjY1ZjA2OWQpIC8qICA2MjMgKi8sCisgIFU2NF9DKDB4Zjk2MzMwZWQ3OGJlNmYxMCkgLyogIDYyNCAqLywgVTY0X0MoMHhlZWU2MGRlNzdhMDc2YTE1KSAvKiAgNjI1ICovLAorICBVNjRfQygweDJiNGJlZTRhYTA4YjliZDApIC8qICA2MjYgKi8sIFU2NF9DKDB4NmE1NmE2M2VjN2I4ODk0ZSkgLyogIDYyNyAqLywKKyAgVTY0X0MoMHgwMjEyMTM1OWJhMzRmZWY0KSAvKiAgNjI4ICovLCBVNjRfQygweDRjYmY5OWY4MjgzNzAzZmMpIC8qICA2MjkgKi8sCisgIFU2NF9DKDB4Mzk4MDcxMzUwY2FmMzBjOCkgLyogIDYzMCAqLywgVTY0X0MoMHhkMGE3N2E4OWYwMTc2ODdhKSAvKiAgNjMxICovLAorICBVNjRfQygweGYxYzFhOWViOWU0MjM1NjkpIC8qICA2MzIgKi8sIFU2NF9DKDB4OGM3OTc2MjgyZGVlODE5OSkgLyogIDYzMyAqLywKKyAgVTY0X0MoMHg1ZDE3MzdhNWRkMWY3YWJkKSAvKiAgNjM0ICovLCBVNjRfQygweDRmNTM0MzNjMDlhOWZhODApIC8qICA2MzUgKi8sCisgIFU2NF9DKDB4ZmE4YjBjNTNkZjdjYTFkOSkgLyogIDYzNiAqLywgVTY0X0MoMHgzZmQ5ZGNiYzg4NmNjYjc3KSAvKiAgNjM3ICovLAorICBVNjRfQygweGMwNDA5MTdjYTkxYjQ3MjApIC8qICA2MzggKi8sIFU2NF9DKDB4N2RkMDAxNDJmOWQxZGNkZikgLyogIDYzOSAqLywKKyAgVTY0X0MoMHg4NDc2ZmMxZDRmMzg3YjU4KSAvKiAgNjQwICovLCBVNjRfQygweDIzZjhlN2M1ZjMzMTY1MDMpIC8qICA2NDEgKi8sCisgIFU2NF9DKDB4MDMyYTIyNDRlN2UzNzMzOSkgLyogIDY0MiAqLywgVTY0X0MoMHg1Yzg3YTVkNzUwZjVhNzRiKSAvKiAgNjQzICovLAorICBVNjRfQygweDA4MmI0Y2M0MzY5ODk5MmUpIC8qICA2NDQgKi8sIFU2NF9DKDB4ZGY5MTdiZWNiODU4ZjYzYykgLyogIDY0NSAqLywKKyAgVTY0X0MoMHgzMjcwYjhmYzViZjg2ZGRhKSAvKiAgNjQ2ICovLCBVNjRfQygweDEwYWU3MmJiMjliNWRkNzYpIC8qICA2NDcgKi8sCisgIFU2NF9DKDB4NTc2YWM5NGU3NzAwMzYyYikgLyogIDY0OCAqLywgVTY0X0MoMHgxYWQxMTJkYWM2MWVmYjhmKSAvKiAgNjQ5ICovLAorICBVNjRfQygweDY5MWJjMzBlYzVmYWE0MjcpIC8qICA2NTAgKi8sIFU2NF9DKDB4ZmYyNDYzMTFjYzMyNzE0MykgLyogIDY1MSAqLywKKyAgVTY0X0MoMHgzMTQyMzY4ZTMwZTUzMjA2KSAvKiAgNjUyICovLCBVNjRfQygweDcxMzgwZTMxZTAyY2EzOTYpIC8qICA2NTMgKi8sCisgIFU2NF9DKDB4OTU4ZDVjOTYwYWFkNzZmMSkgLyogIDY1NCAqLywgVTY0X0MoMHhmOGQ2ZjQzMGMxNmRhNTM2KSAvKiAgNjU1ICovLAorICBVNjRfQygweGM4ZmZkMTNmMWJlN2UxZDIpIC8qICA2NTYgKi8sIFU2NF9DKDB4NzU3OGFlNjYwMDRkZGJlMSkgLyogIDY1NyAqLywKKyAgVTY0X0MoMHgwNTgzM2YwMTA2N2JlNjQ2KSAvKiAgNjU4ICovLCBVNjRfQygweGJiMzRiNWFkM2JmZTU4NmQpIC8qICA2NTkgKi8sCisgIFU2NF9DKDB4MDk1ZjM0YzlhMTJiOTdmMCkgLyogIDY2MCAqLywgVTY0X0MoMHgyNDdhYjY0NTI1ZDYwY2E4KSAvKiAgNjYxICovLAorICBVNjRfQygweGRjZGJjNmYzMDE3NDc3ZDEpIC8qICA2NjIgKi8sIFU2NF9DKDB4NGEyZTE0ZDRkZWNhZDI0ZCkgLyogIDY2MyAqLywKKyAgVTY0X0MoMHhiZGI1ZTZkOWJlMGExZWViKSAvKiAgNjY0ICovLCBVNjRfQygweDJhN2U3MGY3Nzk0MzAxYWIpIC8qICA2NjUgKi8sCisgIFU2NF9DKDB4ZGVmNDJkOGEyNzA1NDBmZCkgLyogIDY2NiAqLywgVTY0X0MoMHgwMTA3OGVjMGEzNGMyMmMxKSAvKiAgNjY3ICovLAorICBVNjRfQygweGU1ZGU1MTFhZjRjMTYzODcpIC8qICA2NjggKi8sIFU2NF9DKDB4N2ViYjNhNTJiZDlhMzMwYSkgLyogIDY2OSAqLywKKyAgVTY0X0MoMHg3NzY5Nzg1N2FhN2Q2NDM1KSAvKiAgNjcwICovLCBVNjRfQygweDAwNGU4MzE2MDNhZTRjMzIpIC8qICA2NzEgKi8sCisgIFU2NF9DKDB4ZTdhMjEwMjBhZDc4ZTMxMikgLyogIDY3MiAqLywgVTY0X0MoMHg5ZDQxYTcwYzZhYjQyMGYyKSAvKiAgNjczICovLAorICBVNjRfQygweDI4ZTA2YzE4ZWExMTQxZTYpIC8qICA2NzQgKi8sIFU2NF9DKDB4ZDJiMjhjYmQ5ODRmNmIyOCkgLyogIDY3NSAqLywKKyAgVTY0X0MoMHgyNmI3NWY2YzQ0NmU5ZDgzKSAvKiAgNjc2ICovLCBVNjRfQygweGJhNDc1NjhjNGQ0MThkN2YpIC8qICA2NzcgKi8sCisgIFU2NF9DKDB4ZDgwYmFkYmZlNjE4M2Q4ZSkgLyogIDY3OCAqLywgVTY0X0MoMHgwZTIwNmQ3ZjVmMTY2MDQ0KSAvKiAgNjc5ICovLAorICBVNjRfQygweGUyNThhNDM5MTFjYmNhM2UpIC8qICA2ODAgKi8sIFU2NF9DKDB4NzIzYTE3NDZiMjFkYzBiYykgLyogIDY4MSAqLywKKyAgVTY0X0MoMHhjN2NhYTg1NGY1ZDdjZGQzKSAvKiAgNjgyICovLCBVNjRfQygweDdjYWMzMjg4M2QyNjFkOWMpIC8qICA2ODMgKi8sCisgIFU2NF9DKDB4NzY5MGMyNjQyM2JhOTQyYykgLyogIDY4NCAqLywgVTY0X0MoMHgxN2U1NTUyNDQ3ODA0MmI4KSAvKiAgNjg1ICovLAorICBVNjRfQygweGUwYmU0Nzc2NTZhMjM4OWYpIC8qICA2ODYgKi8sIFU2NF9DKDB4NGQyODliNWU2N2FiMmRhMCkgLyogIDY4NyAqLywKKyAgVTY0X0MoMHg0NDg2MmI5YzhmYmJmZDMxKSAvKiAgNjg4ICovLCBVNjRfQygweGI0N2NjODA0OWQxNDEzNjUpIC8qICA2ODkgKi8sCisgIFU2NF9DKDB4ODIyYzFiMzYyYjkxYzc5MykgLyogIDY5MCAqLywgVTY0X0MoMHg0ZWIxNDY1NWZiMTNkZmQ4KSAvKiAgNjkxICovLAorICBVNjRfQygweDFlY2JiYTA3MTRlMmE5N2IpIC8qICA2OTIgKi8sIFU2NF9DKDB4NjE0MzQ1OWQ1Y2RlNWYxNCkgLyogIDY5MyAqLywKKyAgVTY0X0MoMHg1M2E4ZmJmMWQ1ZjBhYzg5KSAvKiAgNjk0ICovLCBVNjRfQygweDk3ZWEwNGQ4MWM1ZTViMDApIC8qICA2OTUgKi8sCisgIFU2NF9DKDB4NjIyMTgxYThkNGZkYjNmMykgLyogIDY5NiAqLywgVTY0X0MoMHhlOWJjZDM0MTU3MmExMjA4KSAvKiAgNjk3ICovLAorICBVNjRfQygweDE0MTEyNTg2NDNjY2U1OGEpIC8qICA2OTggKi8sIFU2NF9DKDB4OTE0NGM1ZmVhNGM2ZTBhNCkgLyogIDY5OSAqLywKKyAgVTY0X0MoMHgwZDMzZDA2NTY1Y2Y2MjBmKSAvKiAgNzAwICovLCBVNjRfQygweDU0YTQ4ZDQ4OWYyMTljYTEpIC8qICA3MDEgKi8sCisgIFU2NF9DKDB4YzQzZTVlYWM2ZDYzYzgyMSkgLyogIDcwMiAqLywgVTY0X0MoMHhhOTcyOGIzYTcyNzcwZGFmKSAvKiAgNzAzICovLAorICBVNjRfQygweGQ3OTM0ZTdiMjBkZjg3ZWYpIC8qICA3MDQgKi8sIFU2NF9DKDB4ZTM1NTAzYjYxYTNlODZlNSkgLyogIDcwNSAqLywKKyAgVTY0X0MoMHhjYWUzMjFmYmM4MTlkNTA0KSAvKiAgNzA2ICovLCBVNjRfQygweDEyOWE1MGIzYWM2MGJmYTYpIC8qICA3MDcgKi8sCisgIFU2NF9DKDB4Y2Q1ZTY4ZWE3ZTlmYjZjMykgLyogIDcwOCAqLywgVTY0X0MoMHhiMDFjOTAxOTk0ODNiMWM3KSAvKiAgNzA5ICovLAorICBVNjRfQygweDNkZTkzY2Q1YzI5NTM3NmMpIC8qICA3MTAgKi8sIFU2NF9DKDB4YWVkNTJlZGYyYWI5YWQxMykgLyogIDcxMSAqLywKKyAgVTY0X0MoMHgyZTYwZjUxMmMwYTA3ODg0KSAvKiAgNzEyICovLCBVNjRfQygweGJjM2Q4NmEzZTM2MjEwYzkpIC8qICA3MTMgKi8sCisgIFU2NF9DKDB4MzUyNjlkOWIxNjM5NTFjZSkgLyogIDcxNCAqLywgVTY0X0MoMHgwYzdkNmUyYWQwY2RiNWZhKSAvKiAgNzE1ICovLAorICBVNjRfQygweDU5ZTg2Mjk3ZDg3ZjU3MzMpIC8qICA3MTYgKi8sIFU2NF9DKDB4Mjk4ZWYyMjE4OThkYjBlNykgLyogIDcxNyAqLywKKyAgVTY0X0MoMHg1NTAwMDAyOWQxYTVhYTdlKSAvKiAgNzE4ICovLCBVNjRfQygweDhiYzA4YWUxYjUwNjFiNDUpIC8qICA3MTkgKi8sCisgIFU2NF9DKDB4YzJjMzFjMmI2YzkyNzAzYSkgLyogIDcyMCAqLywgVTY0X0MoMHg5NGNjNTk2YmFmMjVlZjQyKSAvKiAgNzIxICovLAorICBVNjRfQygweDBhMWQ3M2RiMjI1NDA0NTYpIC8qICA3MjIgKi8sIFU2NF9DKDB4MDRiNmEwZjlkOWM0MTc5YSkgLyogIDcyMyAqLywKKyAgVTY0X0MoMHhlZmZkYWZhMmFlM2QzYzYwKSAvKiAgNzI0ICovLCBVNjRfQygweGY3YzgwNzViYjQ5NDk2YzQpIC8qICA3MjUgKi8sCisgIFU2NF9DKDB4OWNjNWM3MTQxZDFjZDRlMykgLyogIDcyNiAqLywgVTY0X0MoMHg3OGJkMTYzODIxOGU1NTM0KSAvKiAgNzI3ICovLAorICBVNjRfQygweGIyZjExNTY4Zjg1MDI0NmEpIC8qICA3MjggKi8sIFU2NF9DKDB4ZWRmYWJjZmE5NTAyYmMyOSkgLyogIDcyOSAqLywKKyAgVTY0X0MoMHg3OTZjZTVmMmRhMjMwNTFiKSAvKiAgNzMwICovLCBVNjRfQygweGFhZTEyOGIwZGM5MzUzN2MpIC8qICA3MzEgKi8sCisgIFU2NF9DKDB4M2E0OTNkYTBlZTRiMjlhZSkgLyogIDczMiAqLywgVTY0X0MoMHhiNWRmNmIyYzQxNjg5NWQ3KSAvKiAgNzMzICovLAorICBVNjRfQygweGZjYWJiZDI1MTIyZDdmMzcpIC8qICA3MzQgKi8sIFU2NF9DKDB4NzA4MTBiNTgxMDVkYzRiMSkgLyogIDczNSAqLywKKyAgVTY0X0MoMHhlMTBmZGQzN2Y3ODgyYTkwKSAvKiAgNzM2ICovLCBVNjRfQygweDUyNGRjYWI1NTE4YTNmNWMpIC8qICA3MzcgKi8sCisgIFU2NF9DKDB4M2M5ZTg1ODc4NDUxMjU1YikgLyogIDczOCAqLywgVTY0X0MoMHg0MDI5ODI4MTE5YmQzNGUyKSAvKiAgNzM5ICovLAorICBVNjRfQygweDc0YTA1YjZmNWQzY2VjY2IpIC8qICA3NDAgKi8sIFU2NF9DKDB4YjYxMDAyMTU0MmUxM2VjYSkgLyogIDc0MSAqLywKKyAgVTY0X0MoMHgwZmY5NzlkMTJmNTllMmFjKSAvKiAgNzQyICovLCBVNjRfQygweDYwMzdkYTI3ZTRmOWNjNTApIC8qICA3NDMgKi8sCisgIFU2NF9DKDB4NWU5Mjk3NWEwZGYxODQ3ZCkgLyogIDc0NCAqLywgVTY0X0MoMHhkNjZkZTE5MGQzZTYyM2ZlKSAvKiAgNzQ1ICovLAorICBVNjRfQygweDUwMzJkNmI4N2I1NjgwNDgpIC8qICA3NDYgKi8sIFU2NF9DKDB4OWEzNmI3Y2U4MjM1MjE2ZSkgLyogIDc0NyAqLywKKyAgVTY0X0MoMHg4MDI3MmE3YTI0ZjY0YjRhKSAvKiAgNzQ4ICovLCBVNjRfQygweDkzZWZlZDhiOGM2OTE2ZjcpIC8qICA3NDkgKi8sCisgIFU2NF9DKDB4MzdkZGJmZjQ0Y2NlMTU1NSkgLyogIDc1MCAqLywgVTY0X0MoMHg0Yjk1ZGI1ZDRiOTliZDI1KSAvKiAgNzUxICovLAorICBVNjRfQygweDkyZDNmZGExNjk4MTJmYzApIC8qICA3NTIgKi8sIFU2NF9DKDB4ZmIxYTRhOWE5MDY2MGJiNikgLyogIDc1MyAqLywKKyAgVTY0X0MoMHg3MzBjMTk2OTQ2YTRiOWIyKSAvKiAgNzU0ICovLCBVNjRfQygweDgxZTI4OWFhN2Y0OWRhNjgpIC8qICA3NTUgKi8sCisgIFU2NF9DKDB4NjQ2NjlhMGY4M2IxYTA1ZikgLyogIDc1NiAqLywgVTY0X0MoMHgyN2IzZmY3ZDk2NDRmNDhiKSAvKiAgNzU3ICovLAorICBVNjRfQygweGNjNmI2MTVjOGRiNjc1YjMpIC8qICA3NTggKi8sIFU2NF9DKDB4Njc0ZjIwYjliY2ViYmU5NSkgLyogIDc1OSAqLywKKyAgVTY0X0MoMHg2ZjMxMjM4Mjc1NjU1OTgyKSAvKiAgNzYwICovLCBVNjRfQygweDVhZTQ4ODcxM2U0NWNmMDUpIC8qICA3NjEgKi8sCisgIFU2NF9DKDB4YmY2MTlmOTk1NGMyMTE1NykgLyogIDc2MiAqLywgVTY0X0MoMHhlYWJhYzQ2MDQwYThlYWU5KSAvKiAgNzYzICovLAorICBVNjRfQygweDQ1NGM2ZmU5ZjJjMGMxY2QpIC8qICA3NjQgKi8sIFU2NF9DKDB4NDE5Y2Y2NDk2NDEyNjkxYykgLyogIDc2NSAqLywKKyAgVTY0X0MoMHhkM2RjM2JlZjI2NWIwZjcwKSAvKiAgNzY2ICovLCBVNjRfQygweDZkMGU2MGY1YzM1NzhhOWUpIC8qICA3NjcgKi8KK307CitzdGF0aWMgdTY0IHNib3g0WzI1Nl0gPSB7CisgIFU2NF9DKDB4NWIwZTYwODUyNjMyM2M1NSkgLyogIDc2OCAqLywgVTY0X0MoMHgxYTQ2YzFhOWZhMWI1OWY1KSAvKiAgNzY5ICovLAorICBVNjRfQygweGE5ZTI0NWExN2M0YzhmZmEpIC8qICA3NzAgKi8sIFU2NF9DKDB4NjVjYTUxNTlkYjI5NTVkNykgLyogIDc3MSAqLywKKyAgVTY0X0MoMHgwNWRiMGE3NmNlMzVhZmMyKSAvKiAgNzcyICovLCBVNjRfQygweDgxZWFjNzdlYTkxMTNkNDUpIC8qICA3NzMgKi8sCisgIFU2NF9DKDB4NTI4ZWY4OGFiNmFjMGEwZCkgLyogIDc3NCAqLywgVTY0X0MoMHhhMDllYTI1MzU5N2JlM2ZmKSAvKiAgNzc1ICovLAorICBVNjRfQygweDQzMGRkZmIzYWM0OGNkNTYpIC8qICA3NzYgKi8sIFU2NF9DKDB4YzRiM2E2N2FmNDVjZTQ2ZikgLyogIDc3NyAqLywKKyAgVTY0X0MoMHg0ZWNlY2ZkOGZiZTJkMDVlKSAvKiAgNzc4ICovLCBVNjRfQygweDNlZjU2ZjEwYjM5OTM1ZjApIC8qICA3NzkgKi8sCisgIFU2NF9DKDB4MGIyMmQ2ODI5Y2Q2MTljNikgLyogIDc4MCAqLywgVTY0X0MoMHgxN2ZkNDYwYTc0ZGYyMDY5KSAvKiAgNzgxICovLAorICBVNjRfQygweDZjZjhjYzhlODUxMGVkNDApIC8qICA3ODIgKi8sIFU2NF9DKDB4ZDZjODI0YmYzYTZlY2FhNykgLyogIDc4MyAqLywKKyAgVTY0X0MoMHg2MTI0M2Q1ODFhODE3MDQ5KSAvKiAgNzg0ICovLCBVNjRfQygweDA0OGJhY2I2YmJjMTYzYTIpIC8qICA3ODUgKi8sCisgIFU2NF9DKDB4ZDlhMzhhYzI3ZDQ0Y2MzMikgLyogIDc4NiAqLywgVTY0X0MoMHg3ZmRkZmY1YmFhZjQxMGFiKSAvKiAgNzg3ICovLAorICBVNjRfQygweGFkNmQ0OTVhYTgwNDgyNGIpIC8qICA3ODggKi8sIFU2NF9DKDB4ZTFhNmE3NGYyZDhjOWY5NCkgLyogIDc4OSAqLywKKyAgVTY0X0MoMHhkNGY3ODUxMjM1ZGVlOGUzKSAvKiAgNzkwICovLCBVNjRfQygweGZkNGI3Zjg4NjU0MGQ4OTMpIC8qICA3OTEgKi8sCisgIFU2NF9DKDB4MjQ3YzIwMDQyYWE0YmZkYSkgLyogIDc5MiAqLywgVTY0X0MoMHgwOTZlYTFjNTE3ZDEzMjdjKSAvKiAgNzkzICovLAorICBVNjRfQygweGQ1Njk2NmI0MzYxYTY2ODUpIC8qICA3OTQgKi8sIFU2NF9DKDB4Mjc3ZGE1YzMxMjIxMDU3ZCkgLyogIDc5NSAqLywKKyAgVTY0X0MoMHg5NGQ1OTg5M2E0M2FjZmY3KSAvKiAgNzk2ICovLCBVNjRfQygweDY0ZjBjNTFjY2RjMDIyODEpIC8qICA3OTcgKi8sCisgIFU2NF9DKDB4M2QzM2JjYzRmZjYxODlkYikgLyogIDc5OCAqLywgVTY0X0MoMHhlMDA1Y2IxODRjZTY2YWYxKSAvKiAgNzk5ICovLAorICBVNjRfQygweGZmNWNjZDFkMWRiOTliZWEpIC8qICA4MDAgKi8sIFU2NF9DKDB4YjBiODU0YTdmZTQyOTgwZikgLyogIDgwMSAqLywKKyAgVTY0X0MoMHg3YmQ0NmE2YTcxOGQ0YjlmKSAvKiAgODAyICovLCBVNjRfQygweGQxMGZhOGNjMjJhNWZkOGMpIC8qICA4MDMgKi8sCisgIFU2NF9DKDB4ZDMxNDg0OTUyYmU0YmQzMSkgLyogIDgwNCAqLywgVTY0X0MoMHhjN2ZhOTc1ZmNiMjQzODQ3KSAvKiAgODA1ICovLAorICBVNjRfQygweDQ4ODZlZDFlNTg0NmM0MDcpIC8qICA4MDYgKi8sIFU2NF9DKDB4MjhjZGRiNzkxZWI3MGIwNCkgLyogIDgwNyAqLywKKyAgVTY0X0MoMHhjMmIwMGJlMmY1NzM0MTdmKSAvKiAgODA4ICovLCBVNjRfQygweDVjOTU5MDQ1MjE4MGY4NzcpIC8qICA4MDkgKi8sCisgIFU2NF9DKDB4N2E2YmRkZmZmMzcwZWIwMCkgLyogIDgxMCAqLywgVTY0X0MoMHhjZTUwOWUzOGQ2ZDlkNmE0KSAvKiAgODExICovLAorICBVNjRfQygweGViZWIwZjAwNjQ3ZmE3MDIpIC8qICA4MTIgKi8sIFU2NF9DKDB4MWRjYzA2Y2Y3NjYwNmYwNikgLyogIDgxMyAqLywKKyAgVTY0X0MoMHhlNGQ5ZjI4YmEyODZmZjBhKSAvKiAgODE0ICovLCBVNjRfQygweGQ4NWEzMDVkYzkxOGMyNjIpIC8qICA4MTUgKi8sCisgIFU2NF9DKDB4NDc1YjFkODczMjIyNWY1NCkgLyogIDgxNiAqLywgVTY0X0MoMHgyZDRmYjUxNjY4Y2NiNWZlKSAvKiAgODE3ICovLAorICBVNjRfQygweGE2NzliOWQ5ZDcyYmJhMjApIC8qICA4MTggKi8sIFU2NF9DKDB4NTM4NDFjMGQ5MTJkNDNhNSkgLyogIDgxOSAqLywKKyAgVTY0X0MoMHgzYjdlYWE0OGJmMTJhNGU4KSAvKiAgODIwICovLCBVNjRfQygweDc4MWUwZTQ3ZjIyZjFkZGYpIC8qICA4MjEgKi8sCisgIFU2NF9DKDB4ZWZmMjBjZTYwYWI1MDk3MykgLyogIDgyMiAqLywgVTY0X0MoMHgyMGQyNjFkMTlkZmZiNzQyKSAvKiAgODIzICovLAorICBVNjRfQygweDE2YTEyYjAzMDYyYTJlMzkpIC8qICA4MjQgKi8sIFU2NF9DKDB4MTk2MGViMjIzOTY1MDQ5NSkgLyogIDgyNSAqLywKKyAgVTY0X0MoMHgyNTFjMTZmZWQ1MGViOGI4KSAvKiAgODI2ICovLCBVNjRfQygweDlhYzBjMzMwZjgyNjAxNmUpIC8qICA4MjcgKi8sCisgIFU2NF9DKDB4ZWQxNTI2NjU5NTNlNzY3MSkgLyogIDgyOCAqLywgVTY0X0MoMHgwMmQ2MzE5NGE2MzY5NTcwKSAvKiAgODI5ICovLAorICBVNjRfQygweDUwNzRmMDgzOTRiMWM5ODcpIC8qICA4MzAgKi8sIFU2NF9DKDB4NzBiYTU5OGM5MGIyNWNlMSkgLyogIDgzMSAqLywKKyAgVTY0X0MoMHg3OTRhMTU4MTBiOTc0MmY2KSAvKiAgODMyICovLCBVNjRfQygweDBkNTkyNWU5ZmNhZjhjNmMpIC8qICA4MzMgKi8sCisgIFU2NF9DKDB4MzA2NzcxNmNkODY4NzQ0ZSkgLyogIDgzNCAqLywgVTY0X0MoMHg5MTBhYjA3N2U4ZDc3MzFiKSAvKiAgODM1ICovLAorICBVNjRfQygweDZhNjFiYmRiNWFjNDJmNjEpIC8qICA4MzYgKi8sIFU2NF9DKDB4OTM1MTNlZmJmMDg1MTU2NykgLyogIDgzNyAqLywKKyAgVTY0X0MoMHhmNDk0NzI0YjllODNlOWQ1KSAvKiAgODM4ICovLCBVNjRfQygweGU4ODdlMTk4NWMwOTY0OGQpIC8qICA4MzkgKi8sCisgIFU2NF9DKDB4MzRiMWQzYzY3NTM3MGNmZCkgLyogIDg0MCAqLywgVTY0X0MoMHhkYzM1ZTQzM2JjMGQyNTVkKSAvKiAgODQxICovLAorICBVNjRfQygweGQwYWFiODQyMzQxMzFiZTApIC8qICA4NDIgKi8sIFU2NF9DKDB4MDgwNDJhNTBiNDhiN2VhZikgLyogIDg0MyAqLywKKyAgVTY0X0MoMHg5OTk3YzRlZTQ0YTNhYjM1KSAvKiAgODQ0ICovLCBVNjRfQygweDgyOWE3YjQ5MjAxNzk5ZDApIC8qICA4NDUgKi8sCisgIFU2NF9DKDB4MjYzYjgzMDdiN2M1NDQ0MSkgLyogIDg0NiAqLywgVTY0X0MoMHg3NTJmOTVmNGZkNmE2Y2E2KSAvKiAgODQ3ICovLAorICBVNjRfQygweDkyNzIxNzQwMmMwOGM2ZTUpIC8qICA4NDggKi8sIFU2NF9DKDB4MmE4YWI3NTRhNzk1ZDllZSkgLyogIDg0OSAqLywKKyAgVTY0X0MoMHhhNDQyZjc1NTJmNzI5NDNkKSAvKiAgODUwICovLCBVNjRfQygweDJjMzEzMzRlMTk3ODEyMDgpIC8qICA4NTEgKi8sCisgIFU2NF9DKDB4NGZhOThkN2NlYWVlNjI5MSkgLyogIDg1MiAqLywgVTY0X0MoMHg1NWMzODYyZjY2NWRiMzA5KSAvKiAgODUzICovLAorICBVNjRfQygweGJkMDYxMDE3NWQ1M2IxZjMpIC8qICA4NTQgKi8sIFU2NF9DKDB4NDZmZTZjYjg0MDQxM2YyNykgLyogIDg1NSAqLywKKyAgVTY0X0MoMHgzZmUwMzc5MmRmMGNmYTU5KSAvKiAgODU2ICovLCBVNjRfQygweGNmZTcwMDM3MmViODVlOGYpIC8qICA4NTcgKi8sCisgIFU2NF9DKDB4YTdiZTI5ZTdhZGJjZTExOCkgLyogIDg1OCAqLywgVTY0X0MoMHhlNTQ0ZWU1Y2RlODQzMWRkKSAvKiAgODU5ICovLAorICBVNjRfQygweDhhNzgxYjFiNDFmMTg3M2UpIC8qICA4NjAgKi8sIFU2NF9DKDB4YTVjOTRjNzhhMGQyZjBlNykgLyogIDg2MSAqLywKKyAgVTY0X0MoMHgzOTQxMmUyODc3YjYwNzI4KSAvKiAgODYyICovLCBVNjRfQygweGExMjY1ZWYzYWZjOWE2MmMpIC8qICA4NjMgKi8sCisgIFU2NF9DKDB4YmNjMjc3MGM2YTI1MDZjNSkgLyogIDg2NCAqLywgVTY0X0MoMHgzYWI2NmRkNWRjZTFjZTEyKSAvKiAgODY1ICovLAorICBVNjRfQygweGU2NTQ5OWQwNGE2NzViMzcpIC8qICA4NjYgKi8sIFU2NF9DKDB4N2Q4ZjUyMzQ4MWJmZDIxNikgLyogIDg2NyAqLywKKyAgVTY0X0MoMHgwZjZmNjRmY2VjMTVmMzg5KSAvKiAgODY4ICovLCBVNjRfQygweDc0ZWZiZTYxOGI1YjEzYzgpIC8qICA4NjkgKi8sCisgIFU2NF9DKDB4YWNkYzgyYjcxNDI3M2UxZCkgLyogIDg3MCAqLywgVTY0X0MoMHhkZDQwYmZlMDAzMTk5ZDE3KSAvKiAgODcxICovLAorICBVNjRfQygweDM3ZTk5MjU3ZTdlMDYxZjgpIC8qICA4NzIgKi8sIFU2NF9DKDB4ZmE1MjYyNjkwNDc3NWFhYSkgLyogIDg3MyAqLywKKyAgVTY0X0MoMHg4YmJiZjYzYTQ2M2Q1NmY5KSAvKiAgODc0ICovLCBVNjRfQygweGYwMDEzZjE1NDNhMjZlNjQpIC8qICA4NzUgKi8sCisgIFU2NF9DKDB4YTgzMDdlOWY4NzllYzg5OCkgLyogIDg3NiAqLywgVTY0X0MoMHhjYzRjMjdhNDE1MDE3N2NjKSAvKiAgODc3ICovLAorICBVNjRfQygweDFiNDMyZjJjY2ExZDMzNDgpIC8qICA4NzggKi8sIFU2NF9DKDB4ZGUxZDFmOGY5ZjZmYTAxMykgLyogIDg3OSAqLywKKyAgVTY0X0MoMHg2MDY2MDJhMDQ3YTdkZGQ2KSAvKiAgODgwICovLCBVNjRfQygweGQyMzdhYjY0Y2MxY2IyYzcpIC8qICA4ODEgKi8sCisgIFU2NF9DKDB4OWI5MzhlNzIyNWZjZDFkMykgLyogIDg4MiAqLywgVTY0X0MoMHhlYzRlMDM3MDhlMGZmNDc2KSAvKiAgODgzICovLAorICBVNjRfQygweGZlYjJmYmRhM2QwM2MxMmQpIC8qICA4ODQgKi8sIFU2NF9DKDB4YWUwYmNlZDJlZTQzODg5YSkgLyogIDg4NSAqLywKKyAgVTY0X0MoMHgyMmNiODkyM2ViZmI0ZjQzKSAvKiAgODg2ICovLCBVNjRfQygweDY5MzYwZDAxM2NmNzM5NmQpIC8qICA4ODcgKi8sCisgIFU2NF9DKDB4ODU1ZTM2MDJkMmQ0ZTAyMikgLyogIDg4OCAqLywgVTY0X0MoMHgwNzM4MDViYWQwMWY3ODRjKSAvKiAgODg5ICovLAorICBVNjRfQygweDMzZTE3YTEzMzg1MmY1NDYpIC8qICA4OTAgKi8sIFU2NF9DKDB4ZGY0ODc0MDU4YWM3YjYzOCkgLyogIDg5MSAqLywKKyAgVTY0X0MoMHhiYTkyYjI5YzY3OGFhMTRhKSAvKiAgODkyICovLCBVNjRfQygweDBjZTg5ZmM3NmNmYWFkY2QpIC8qICA4OTMgKi8sCisgIFU2NF9DKDB4NWY5ZDRlMDkwODMzOWUzNCkgLyogIDg5NCAqLywgVTY0X0MoMHhmMWFmZTkyOTFmNTkyM2I5KSAvKiAgODk1ICovLAorICBVNjRfQygweDZlMzQ4MGY2MGY0YTI2NWYpIC8qICA4OTYgKi8sIFU2NF9DKDB4ZWViZjNhMmFiMjliODQxYykgLyogIDg5NyAqLywKKyAgVTY0X0MoMHhlMjE5MzhhODhmOTFiNGFkKSAvKiAgODk4ICovLCBVNjRfQygweDU3ZGZlZmY4NDVjNmQzYzMpIC8qICA4OTkgKi8sCisgIFU2NF9DKDB4MmYwMDZiMGJmNjJjYWFmMikgLyogIDkwMCAqLywgVTY0X0MoMHg2MmY0NzllZjZmNzVlZTc4KSAvKiAgOTAxICovLAorICBVNjRfQygweDExYTU1YWQ0MWM4OTE2YTkpIC8qICA5MDIgKi8sIFU2NF9DKDB4ZjIyOWQyOTA4NGZlZDQ1MykgLyogIDkwMyAqLywKKyAgVTY0X0MoMHg0MmYxYzI3YjE2YjAwMGU2KSAvKiAgOTA0ICovLCBVNjRfQygweDJiMWY3Njc0OTgyM2MwNzQpIC8qICA5MDUgKi8sCisgIFU2NF9DKDB4NGI3NmVjYTNjMjc0NTM2MCkgLyogIDkwNiAqLywgVTY0X0MoMHg4Yzk4ZjQ2M2I5MTY5MWJkKSAvKiAgOTA3ICovLAorICBVNjRfQygweDE0YmNjOTNjZjFhZGU2NmEpIC8qICA5MDggKi8sIFU2NF9DKDB4ODg4NTIxM2U2ZDQ1ODM5NykgLyogIDkwOSAqLywKKyAgVTY0X0MoMHg4ZTE3N2RmMDI3NGQ0NzExKSAvKiAgOTEwICovLCBVNjRfQygweGI0OWI3M2I1NTAzZjI5NTEpIC8qICA5MTEgKi8sCisgIFU2NF9DKDB4MTAxNjgxNjhjM2Y5NmI2YikgLyogIDkxMiAqLywgVTY0X0MoMHgwZTNkOTYzYjYzY2FiMGFlKSAvKiAgOTEzICovLAorICBVNjRfQygweDhkZmM0YjU2NTVhMWRiMTQpIC8qICA5MTQgKi8sIFU2NF9DKDB4Zjc4OWYxMzU2ZTE0ZGU1YykgLyogIDkxNSAqLywKKyAgVTY0X0MoMHg2ODNlNjhhZjRlNTFkYWMxKSAvKiAgOTE2ICovLCBVNjRfQygweGM5YTg0ZjlkOGQ0YjBmZDkpIC8qICA5MTcgKi8sCisgIFU2NF9DKDB4MzY5MWUwM2Y1MmEwZjlkMSkgLyogIDkxOCAqLywgVTY0X0MoMHg1ZWQ4NmU0NmUxODc4ZTgwKSAvKiAgOTE5ICovLAorICBVNjRfQygweDNjNzExYTBlOTlkMDcxNTApIC8qICA5MjAgKi8sIFU2NF9DKDB4NWEwODY1YjIwYzRlOTMxMCkgLyogIDkyMSAqLywKKyAgVTY0X0MoMHg1NmZiZmMxZmU0ZjA2ODJlKSAvKiAgOTIyICovLCBVNjRfQygweGVhOGQ1ZGUzMTA1ZWRmOWIpIC8qICA5MjMgKi8sCisgIFU2NF9DKDB4NzFhYmZkYjEyMzc5MTg3YSkgLyogIDkyNCAqLywgVTY0X0MoMHgyZWI5OWRlMWJlZTc3YjljKSAvKiAgOTI1ICovLAorICBVNjRfQygweDIxZWNjMGVhMzNjZjQ1MjMpIC8qICA5MjYgKi8sIFU2NF9DKDB4NTlhNGQ3NTIxODA1YzdhMSkgLyogIDkyNyAqLywKKyAgVTY0X0MoMHgzODk2ZjVlYjU2YWU3YzcyKSAvKiAgOTI4ICovLCBVNjRfQygweGFhNjM4ZjNkYjE4Zjc1ZGMpIC8qICA5MjkgKi8sCisgIFU2NF9DKDB4OWYzOTM1OGRhYmU5ODA4ZSkgLyogIDkzMCAqLywgVTY0X0MoMHhiN2RlZmE5MWMwMGI3MmFjKSAvKiAgOTMxICovLAorICBVNjRfQygweDZiNTU0MWZkNjI0OTJkOTIpIC8qICA5MzIgKi8sIFU2NF9DKDB4NmRjNmRlZThmOTJlNGQ1YikgLyogIDkzMyAqLywKKyAgVTY0X0MoMHgzNTNmNTdhYmM0YmVlYTdlKSAvKiAgOTM0ICovLCBVNjRfQygweDczNTc2OWQ2ZGE1NjkwY2UpIC8qICA5MzUgKi8sCisgIFU2NF9DKDB4MGEyMzRhYTY0MjM5MTQ4NCkgLyogIDkzNiAqLywgVTY0X0MoMHhmNmY5NTA4MDI4ZjgwZDlkKSAvKiAgOTM3ICovLAorICBVNjRfQygweGI4ZTMxOWEyN2FiM2YyMTUpIC8qICA5MzggKi8sIFU2NF9DKDB4MzFhZDljMTE1MTM0MWE0ZCkgLyogIDkzOSAqLywKKyAgVTY0X0MoMHg3NzNjMjJhNTdiZWY1ODA1KSAvKiAgOTQwICovLCBVNjRfQygweDQ1Yzc1NjFhMDc5Njg2MzMpIC8qICA5NDEgKi8sCisgIFU2NF9DKDB4ZjkxM2RhOWUyNDlkYmUzNikgLyogIDk0MiAqLywgVTY0X0MoMHhkYTY1MmQ5Yjc4YTY0YzY4KSAvKiAgOTQzICovLAorICBVNjRfQygweDRjMjdhOTdmM2JjMzM0ZWYpIC8qICA5NDQgKi8sIFU2NF9DKDB4NzY2MjEyMjBlNjZiMTdmNCkgLyogIDk0NSAqLywKKyAgVTY0X0MoMHg5Njc3NDM4OTlhY2Q3ZDBiKSAvKiAgOTQ2ICovLCBVNjRfQygweGYzZWU1YmNhZTBlZDY3ODIpIC8qICA5NDcgKi8sCisgIFU2NF9DKDB4NDA5Zjc1MzYwMGM4NzlmYykgLyogIDk0OCAqLywgVTY0X0MoMHgwNmQwOWEzOWI1OTI2ZGI2KSAvKiAgOTQ5ICovLAorICBVNjRfQygweDZmODNhZWIwMzE3YWM1ODgpIC8qICA5NTAgKi8sIFU2NF9DKDB4MDFlNmNhNGE4NjM4MWYyMSkgLyogIDk1MSAqLywKKyAgVTY0X0MoMHg2NmZmMzQ2MmQxOWYzMDI1KSAvKiAgOTUyICovLCBVNjRfQygweDcyMjA3YzI0ZGRmZDNiZmIpIC8qICA5NTMgKi8sCisgIFU2NF9DKDB4NGFmNmI2ZDNlMmVjZTJlYikgLyogIDk1NCAqLywgVTY0X0MoMHg5Yzk5NGRiZWM3ZWEwOGRlKSAvKiAgOTU1ICovLAorICBVNjRfQygweDQ5YWNlNTk3YjA5YThiYzQpIC8qICA5NTYgKi8sIFU2NF9DKDB4YjM4YzQ3NjZjZjA3OTdiYSkgLyogIDk1NyAqLywKKyAgVTY0X0MoMHgxMzFiOTM3M2M1N2MyYTc1KSAvKiAgOTU4ICovLCBVNjRfQygweGIxODIyY2NlNjE5MzFlNTgpIC8qICA5NTkgKi8sCisgIFU2NF9DKDB4OWQ3NTU1YjkwOWJhMWMwYykgLyogIDk2MCAqLywgVTY0X0MoMHgxMjdmYWZkZDkzN2QxMWQyKSAvKiAgOTYxICovLAorICBVNjRfQygweDI5ZGEzYmFkYzY2ZDkyZTQpIC8qICA5NjIgKi8sIFU2NF9DKDB4YTJjMWQ1NzE1NGMyZWNiYykgLyogIDk2MyAqLywKKyAgVTY0X0MoMHg1OGM1MTM0ZDgyZjZmZTI0KSAvKiAgOTY0ICovLCBVNjRfQygweDFjM2FlMzUxNWI2MjI3NGYpIC8qICA5NjUgKi8sCisgIFU2NF9DKDB4ZTkwN2M4MmUwMWNiODEyNikgLyogIDk2NiAqLywgVTY0X0MoMHhmOGVkMDkxOTEzZTM3ZmNiKSAvKiAgOTY3ICovLAorICBVNjRfQygweDMyNDlkOGY5YzgwMDQ2YzkpIC8qICA5NjggKi8sIFU2NF9DKDB4ODBjZjliZWRlMzg4ZmI2MykgLyogIDk2OSAqLywKKyAgVTY0X0MoMHgxODgxNTM5YTExNmNmMTllKSAvKiAgOTcwICovLCBVNjRfQygweDUxMDNmM2Y3NmJkNTI0NTcpIC8qICA5NzEgKi8sCisgIFU2NF9DKDB4MTViN2U2ZjVhZTQ3ZjdhOCkgLyogIDk3MiAqLywgVTY0X0MoMHhkYmQ3YzZkZWQ0N2U5Y2NmKSAvKiAgOTczICovLAorICBVNjRfQygweDQ0ZTU1YzQxMDIyOGJiMWEpIC8qICA5NzQgKi8sIFU2NF9DKDB4YjY0N2Q0MjU1ZWRiNGU5OSkgLyogIDk3NSAqLywKKyAgVTY0X0MoMHg1ZDExODgyYmI4YWFmYzMwKSAvKiAgOTc2ICovLCBVNjRfQygweGY1MDk4YmJiMjlkMzIxMmEpIC8qICA5NzcgKi8sCisgIFU2NF9DKDB4OGZiNWVhMTRlOTAyOTZiMykgLyogIDk3OCAqLywgVTY0X0MoMHg2NzdiOTQyMTU3ZGQwMjVhKSAvKiAgOTc5ICovLAorICBVNjRfQygweGZiNThlN2MwYTM5MGFjYjUpIC8qICA5ODAgKi8sIFU2NF9DKDB4ODlkMzY3NGM4M2JkNGEwMSkgLyogIDk4MSAqLywKKyAgVTY0X0MoMHg5ZTJkYTRkZjRiZjNiOTNiKSAvKiAgOTgyICovLCBVNjRfQygweGZjYzQxZTMyOGNhYjQ4MjkpIC8qICA5ODMgKi8sCisgIFU2NF9DKDB4MDNmMzhjOTZiYTU4MmM1MikgLyogIDk4NCAqLywgVTY0X0MoMHhjYWQxYmRiZDdmZDg1ZGIyKSAvKiAgOTg1ICovLAorICBVNjRfQygweGJiYjQ0MmMxNjA4MmFlODMpIC8qICA5ODYgKi8sIFU2NF9DKDB4Yjk1ZmU4NmJhNWRhOWFiMCkgLyogIDk4NyAqLywKKyAgVTY0X0MoMHhiMjJlMDQ2NzM3NzFhOTNmKSAvKiAgOTg4ICovLCBVNjRfQygweDg0NTM1OGM5NDkzMTUyZDgpIC8qICA5ODkgKi8sCisgIFU2NF9DKDB4YmUyYTQ4ODY5N2I0NTQxZSkgLyogIDk5MCAqLywgVTY0X0MoMHg5NWEyZGMyZGQzOGU2OTY2KSAvKiAgOTkxICovLAorICBVNjRfQygweGMwMmMxMWFjOTIzYzg1MmIpIC8qICA5OTIgKi8sIFU2NF9DKDB4MjM4OGIxOTkwZGYyYTg3YikgLyogIDk5MyAqLywKKyAgVTY0X0MoMHg3YzgwMDhmYTFiNGYzN2JlKSAvKiAgOTk0ICovLCBVNjRfQygweDFmNzBkMGM4NGQ1NGU1MDMpIC8qICA5OTUgKi8sCisgIFU2NF9DKDB4NTQ5MGFkZWM3ZWNlNTdkNCkgLyogIDk5NiAqLywgVTY0X0MoMHgwMDJiM2MyN2Q5MDYzYTNhKSAvKiAgOTk3ICovLAorICBVNjRfQygweDdlYWVhMzg0ODAzMGEyYmYpIC8qICA5OTggKi8sIFU2NF9DKDB4YzYwMjMyNmRlZDIwMDNjMCkgLyogIDk5OSAqLywKKyAgVTY0X0MoMHg4M2E3Mjg3ZDY5YTk0MDg2KSAvKiAxMDAwICovLCBVNjRfQygweGM1N2E1ZmNiMzBmNTdhOGEpIC8qIDEwMDEgKi8sCisgIFU2NF9DKDB4YjU2ODQ0ZTQ3OWViZTc3OSkgLyogMTAwMiAqLywgVTY0X0MoMHhhMzczYjQwZjA1ZGNiY2U5KSAvKiAxMDAzICovLAorICBVNjRfQygweGQ3MWE3ODZlODg1NzBlZTIpIC8qIDEwMDQgKi8sIFU2NF9DKDB4ODc5Y2JhY2RiZGU4ZjZhMCkgLyogMTAwNSAqLywKKyAgVTY0X0MoMHg5NzZhZDFiY2MxNjRhMzJmKSAvKiAxMDA2ICovLCBVNjRfQygweGFiMjFlMjVlOTY2NmQ3OGIpIC8qIDEwMDcgKi8sCisgIFU2NF9DKDB4OTAxMDYzYWFlNWU1YzMzYykgLyogMTAwOCAqLywgVTY0X0MoMHg5ODE4YjM0NDQ4Njk4ZDkwKSAvKiAxMDA5ICovLAorICBVNjRfQygweGUzNjQ4N2FlM2UxZThhYmIpIC8qIDEwMTAgKi8sIFU2NF9DKDB4YWZiZGY5MzE4OTNiZGNiNCkgLyogMTAxMSAqLywKKyAgVTY0X0MoMHg2MzQ1YTBkYzVmYmJkNTE5KSAvKiAxMDEyICovLCBVNjRfQygweDg2MjhmZTI2OWI5NDY1Y2EpIC8qIDEwMTMgKi8sCisgIFU2NF9DKDB4MWU1ZDAxNjAzZjljNTFlYykgLyogMTAxNCAqLywgVTY0X0MoMHg0ZGU0NDAwNmExNTA0OWI3KSAvKiAxMDE1ICovLAorICBVNjRfQygweGJmNmM3MGU1Zjc3NmNiYjEpIC8qIDEwMTYgKi8sIFU2NF9DKDB4NDExMjE4ZjJlZjU1MmJlZCkgLyogMTAxNyAqLywKKyAgVTY0X0MoMHhjYjBjMDcwODcwNWEzNmEzKSAvKiAxMDE4ICovLCBVNjRfQygweGU3NGQxNDc1NGY5ODYwNDQpIC8qIDEwMTkgKi8sCisgIFU2NF9DKDB4Y2Q1NmQ5NDMwZWE4MjgwZSkgLyogMTAyMCAqLywgVTY0X0MoMHhjMTI1OTFkNzUzNWY1MDY1KSAvKiAxMDIxICovLAorICBVNjRfQygweGM4MzIyM2YxNzIwYWVmOTYpIC8qIDEwMjIgKi8sIFU2NF9DKDB4YzNhMDM5NmY3MzYzYTUxZikgLyogMTAyMyAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGludAordHJhbnNmb3JtICggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICk7CisKK3N0YXRpYyB2b2lkCitkb19pbml0ICh2b2lkICpjb250ZXh0LCBpbnQgdmFyaWFudCkKK3sKKyAgVElHRVJfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworCisgIGhkLT5hID0gMHgwMTIzNDU2Nzg5YWJjZGVmTEw7CisgIGhkLT5iID0gMHhmZWRjYmE5ODc2NTQzMjEwTEw7CisgIGhkLT5jID0gMHhmMDk2YTViNGMzYjJlMTg3TEw7CisKKyAgaGQtPmJjdHgubmJsb2NrcyA9IDA7CisgIGhkLT5iY3R4Lm5ibG9ja3NfaGlnaCA9IDA7CisgIGhkLT5iY3R4LmNvdW50ID0gMDsKKyAgaGQtPmJjdHguYmxvY2tzaXplID0gNjQ7CisgIGhkLT5iY3R4LmJ3cml0ZSA9IHRyYW5zZm9ybTsKKyAgaGQtPnZhcmlhbnQgPSB2YXJpYW50OworfQorCitzdGF0aWMgdm9pZAordGlnZXJfaW5pdCAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICAodm9pZClmbGFnczsKKworICBkb19pbml0IChjb250ZXh0LCAwKTsKK30KKworc3RhdGljIHZvaWQKK3RpZ2VyMV9pbml0ICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgICh2b2lkKWZsYWdzOworCisgIGRvX2luaXQgKGNvbnRleHQsIDEpOworfQorCitzdGF0aWMgdm9pZAordGlnZXIyX2luaXQgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgKHZvaWQpZmxhZ3M7CisKKyAgZG9faW5pdCAoY29udGV4dCwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit0aWdlcl9yb3VuZCggdTY0ICpyYSwgdTY0ICpyYiwgdTY0ICpyYywgdTY0IHgsIGludCBtdWwgKQoreworICB1NjQgYSA9ICpyYTsKKyAgdTY0IGIgPSAqcmI7CisgIHU2NCBjID0gKnJjOworCisgIGMgXj0geDsKKyAgYSAtPSAoICBzYm94MVsgIGMgICAgICAgICYgMHhmZiBdIF4gc2JveDJbIChjID4+IDE2KSAmIDB4ZmYgXQorICAgICAgICBeIHNib3gzWyAoYyA+PiAzMikgJiAweGZmIF0gXiBzYm94NFsgKGMgPj4gNDgpICYgMHhmZiBdKTsKKyAgYiArPSAoICBzYm94NFsgKGMgPj4gIDgpICYgMHhmZiBdIF4gc2JveDNbIChjID4+IDI0KSAmIDB4ZmYgXQorICAgICAgICBeIHNib3gyWyAoYyA+PiA0MCkgJiAweGZmIF0gXiBzYm94MVsgKGMgPj4gNTYpICYgMHhmZiBdKTsKKyAgYiAqPSBtdWw7CisKKyAgKnJhID0gYTsKKyAgKnJiID0gYjsKKyAgKnJjID0gYzsKK30KKworCitzdGF0aWMgdm9pZAorcGFzcyggdTY0ICpyYSwgdTY0ICpyYiwgdTY0ICpyYywgdTY0ICp4LCBpbnQgbXVsICkKK3sKKyAgdTY0IGEgPSAqcmE7CisgIHU2NCBiID0gKnJiOworICB1NjQgYyA9ICpyYzsKKworICB0aWdlcl9yb3VuZCggJmEsICZiLCAmYywgeFswXSwgbXVsICk7CisgIHRpZ2VyX3JvdW5kKCAmYiwgJmMsICZhLCB4WzFdLCBtdWwgKTsKKyAgdGlnZXJfcm91bmQoICZjLCAmYSwgJmIsIHhbMl0sIG11bCApOworICB0aWdlcl9yb3VuZCggJmEsICZiLCAmYywgeFszXSwgbXVsICk7CisgIHRpZ2VyX3JvdW5kKCAmYiwgJmMsICZhLCB4WzRdLCBtdWwgKTsKKyAgdGlnZXJfcm91bmQoICZjLCAmYSwgJmIsIHhbNV0sIG11bCApOworICB0aWdlcl9yb3VuZCggJmEsICZiLCAmYywgeFs2XSwgbXVsICk7CisgIHRpZ2VyX3JvdW5kKCAmYiwgJmMsICZhLCB4WzddLCBtdWwgKTsKKworICAqcmEgPSBhOworICAqcmIgPSBiOworICAqcmMgPSBjOworfQorCisKK3N0YXRpYyB2b2lkCitrZXlfc2NoZWR1bGUoIHU2NCAqeCApCit7CisgIHhbMF0gLT0geFs3XSBeIDB4YTVhNWE1YTVhNWE1YTVhNUxMOworICB4WzFdIF49IHhbMF07CisgIHhbMl0gKz0geFsxXTsKKyAgeFszXSAtPSB4WzJdIF4gKCh+eFsxXSkgPDwgMTkgKTsKKyAgeFs0XSBePSB4WzNdOworICB4WzVdICs9IHhbNF07CisgIHhbNl0gLT0geFs1XSBeICgofnhbNF0pID4+IDIzICk7CisgIHhbN10gXj0geFs2XTsKKyAgeFswXSArPSB4WzddOworICB4WzFdIC09IHhbMF0gXiAoKH54WzddKSA8PCAxOSApOworICB4WzJdIF49IHhbMV07CisgIHhbM10gKz0geFsyXTsKKyAgeFs0XSAtPSB4WzNdIF4gKCh+eFsyXSkgPj4gMjMgKTsKKyAgeFs1XSBePSB4WzRdOworICB4WzZdICs9IHhbNV07CisgIHhbN10gLT0geFs2XSBeIDB4MDEyMzQ1Njc4OWFiY2RlZkxMOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBUcmFuc2Zvcm0gdGhlIG1lc3NhZ2UgREFUQSB3aGljaCBjb25zaXN0cyBvZiA1MTIgYnl0ZXMgKDggd29yZHMpCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3RyYW5zZm9ybSAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgIFRJR0VSX0NPTlRFWFQgKmhkID0gY3R4OworICB1NjQgYSxiLGMsYWEsYmIsY2M7CisgIHU2NCB4WzhdOworICBpbnQgaTsKKworICBmb3IgKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgeFtpXSA9IGJ1Zl9nZXRfbGU2NChkYXRhICsgaSAqIDgpOworCisgIC8qIHNhdmUgKi8KKyAgYSA9IGFhID0gaGQtPmE7CisgIGIgPSBiYiA9IGhkLT5iOworICBjID0gY2MgPSBoZC0+YzsKKworICBwYXNzKCAmYSwgJmIsICZjLCB4LCA1KTsKKyAga2V5X3NjaGVkdWxlKCB4ICk7CisgIHBhc3MoICZjLCAmYSwgJmIsIHgsIDcpOworICBrZXlfc2NoZWR1bGUoIHggKTsKKyAgcGFzcyggJmIsICZjLCAmYSwgeCwgOSk7CisKKyAgLyogZmVlZGZvcndhcmQgKi8KKyAgYSBePSBhYTsKKyAgYiAtPSBiYjsKKyAgYyArPSBjYzsKKyAgLyogc3RvcmUgKi8KKyAgaGQtPmEgPSBhOworICBoZC0+YiA9IGI7CisgIGhkLT5jID0gYzsKKworICByZXR1cm4gLypidXJuX3N0YWNrKi8gMjEqOCsxMSpzaXplb2Yodm9pZCopOworfQorCisKKworLyogVGhlIHJvdXRpbmUgdGVybWluYXRlcyB0aGUgY29tcHV0YXRpb24KKyAqLworc3RhdGljIHZvaWQKK3RpZ2VyX2ZpbmFsKCB2b2lkICpjb250ZXh0ICkKK3sKKyAgVElHRVJfQ09OVEVYVCAqaGQgPSBjb250ZXh0OworICB1MzIgdCwgdGgsIG1zYiwgbHNiOworICBieXRlICpwOworICB1bnNpZ25lZCBpbnQgYnVybjsKKyAgYnl0ZSBwYWQgPSBoZC0+dmFyaWFudCA9PSAyPyAweDgwIDogMHgwMTsKKworICBfZ2NyeV9tZF9ibG9ja193cml0ZShoZCwgTlVMTCwgMCk7IC8qIGZsdXNoICovOworCisgIHQgPSBoZC0+YmN0eC5uYmxvY2tzOworICBpZiAoc2l6ZW9mIHQgPT0gc2l6ZW9mIGhkLT5iY3R4Lm5ibG9ja3MpCisgICAgdGggPSBoZC0+YmN0eC5uYmxvY2tzX2hpZ2g7CisgIGVsc2UKKyAgICB0aCA9IGhkLT5iY3R4Lm5ibG9ja3MgPj4gMzI7CisKKyAgLyogbXVsdGlwbHkgYnkgNjQgdG8gbWFrZSBhIGJ5dGUgY291bnQgKi8KKyAgbHNiID0gdCA8PCA2OworICBtc2IgPSAodGggPDwgNikgfCAodCA+PiAyNik7CisgIC8qIGFkZCB0aGUgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgaWYoIChsc2IgKz0gaGQtPmJjdHguY291bnQpIDwgdCApCisgICAgbXNiKys7CisgIC8qIG11bHRpcGx5IGJ5IDggdG8gbWFrZSBhIGJpdCBjb3VudCAqLworICB0ID0gbHNiOworICBsc2IgPDw9IDM7CisgIG1zYiA8PD0gMzsKKyAgbXNiIHw9IHQgPj4gMjk7CisKKyAgaWYoIGhkLT5iY3R4LmNvdW50IDwgNTYgKSAgLyogZW5vdWdoIHJvb20gKi8KKyAgICB7CisgICAgICBoZC0+YmN0eC5idWZbaGQtPmJjdHguY291bnQrK10gPSBwYWQ7CisgICAgICB3aGlsZSggaGQtPmJjdHguY291bnQgPCA1NiApCisgICAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDA7ICAvKiBwYWQgKi8KKyAgICB9CisgIGVsc2UgIC8qIG5lZWQgb25lIGV4dHJhIGJsb2NrICovCisgICAgeworICAgICAgaGQtPmJjdHguYnVmW2hkLT5iY3R4LmNvdW50KytdID0gcGFkOyAvKiBwYWQgY2hhcmFjdGVyICovCisgICAgICB3aGlsZSggaGQtPmJjdHguY291bnQgPCA2NCApCisgICAgICAgIGhkLT5iY3R4LmJ1ZltoZC0+YmN0eC5jb3VudCsrXSA9IDA7CisgICAgICBfZ2NyeV9tZF9ibG9ja193cml0ZShoZCwgTlVMTCwgMCk7ICAvKiBmbHVzaCAqLzsKKyAgICAgIG1lbXNldChoZC0+YmN0eC5idWYsIDAsIDU2ICk7IC8qIGZpbGwgbmV4dCBibG9jayB3aXRoIHplcm9lcyAqLworICAgIH0KKyAgLyogYXBwZW5kIHRoZSA2NCBiaXQgY291bnQgKi8KKyAgYnVmX3B1dF9sZTMyKGhkLT5iY3R4LmJ1ZiArIDU2LCBsc2IpOworICBidWZfcHV0X2xlMzIoaGQtPmJjdHguYnVmICsgNjAsIG1zYik7CisgIGJ1cm4gPSB0cmFuc2Zvcm0oIGhkLCBoZC0+YmN0eC5idWYgKTsKKyAgX2djcnlfYnVybl9zdGFjayAoYnVybik7CisKKyAgcCA9IGhkLT5iY3R4LmJ1ZjsKKyNkZWZpbmUgWChhKSBkbyB7ICoodTY0KilwID0gYmVfYnN3YXA2NChoZC0+YSk7IHAgKz0gODsgfSB3aGlsZSgwKQorI2RlZmluZSBZKGEpIGRvIHsgKih1NjQqKXAgPSBsZV9ic3dhcDY0KGhkLT5hKTsgcCArPSA4OyB9IHdoaWxlKDApCisgIGlmIChoZC0+dmFyaWFudCA9PSAwKQorICAgIHsKKyAgICAgIFgoYSk7CisgICAgICBYKGIpOworICAgICAgWChjKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBZKGEpOworICAgICAgWShiKTsKKyAgICAgIFkoYyk7CisgICAgfQorI3VuZGVmIFgKKyN1bmRlZiBZCit9CisKK3N0YXRpYyBieXRlICoKK3RpZ2VyX3JlYWQoIHZvaWQgKmNvbnRleHQgKQoreworICBUSUdFUl9DT05URVhUICpoZCA9IGNvbnRleHQ7CisKKyAgcmV0dXJuIGhkLT5iY3R4LmJ1ZjsKK30KKworCisMCisvKiBUaGlzIGlzIHRoZSBvbGQgVElHRVIgdmFyaWFudCBiYXNlZCBvbiB0aGUgdW5maXhlZCByZWZlcmVuY2UKKyAgIGltcGxlbWVudGF0aW9uLiAgSVQgd2FzIHVzZWQgaW4gR251cEcgdXAgdG8gMS4zLjIuICBXZSBkb24ndCBwcm92aWRlCisgICBhbiBPSUQgYW55bW9yZSBiZWNhdXNlIHRoYXQgd291bGQgbm90IGJlIGNvcnJlY3QuICAqLworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfdGlnZXIgPQorICB7CisgICAgR0NSWV9NRF9USUdFUiwgezAsIDB9LAorICAgICJUSUdFUjE5MiIsIE5VTEwsIDAsIE5VTEwsIDI0LAorICAgIHRpZ2VyX2luaXQsIF9nY3J5X21kX2Jsb2NrX3dyaXRlLCB0aWdlcl9maW5hbCwgdGlnZXJfcmVhZCwKKyAgICBzaXplb2YgKFRJR0VSX0NPTlRFWFQpCisgIH07CisKKworDAorLyogVGhpcyBpcyB0aGUgZml4ZWQgVElHRVIgaW1wbGVtZW50YXRpb24uICAqLworc3RhdGljIGJ5dGUgYXNuMVsxOV0gPSAvKiBPYmplY3QgSUQgaXMgMS4zLjYuMS40LjEuMTE1OTEuMTIuMiAqLworICB7IDB4MzAsIDB4MjksIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4MmIsIDB4MDYsCisgICAgMHgwMSwgMHgwNCwgMHgwMSwgMHhkYSwgMHg0NywgMHgwYywgMHgwMiwKKyAgICAweDA1LCAweDAwLCAweDA0LCAweDE4IH07CisKK3N0YXRpYyBnY3J5X21kX29pZF9zcGVjX3Qgb2lkX3NwZWNfdGlnZXIxW10gPQorICB7CisgICAgLyogR05VLmRpZ2VzdEFsZ29yaXRobSBUSUdFUiAqLworICAgIHsgIjEuMy42LjEuNC4xLjExNTkxLjEyLjIiIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfdGlnZXIxID0KKyAgeworICAgIEdDUllfTURfVElHRVIxLCB7MCwgMH0sCisgICAgIlRJR0VSIiwgYXNuMSwgRElNIChhc24xKSwgb2lkX3NwZWNfdGlnZXIxLCAyNCwKKyAgICB0aWdlcjFfaW5pdCwgX2djcnlfbWRfYmxvY2tfd3JpdGUsIHRpZ2VyX2ZpbmFsLCB0aWdlcl9yZWFkLAorICAgIHNpemVvZiAoVElHRVJfQ09OVEVYVCkKKyAgfTsKKworCisMCisvKiBUaGlzIGlzIFRJR0VSMiB3aGljaCB1c3VlcyBhIGNoYW5nZWQgcGFkZGluZyBhbGdvcml0aG0uICAqLworZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfdGlnZXIyID0KKyAgeworICAgIEdDUllfTURfVElHRVIyLCB7MCwgMH0sCisgICAgIlRJR0VSMiIsIE5VTEwsIDAsIE5VTEwsIDI0LAorICAgIHRpZ2VyMl9pbml0LCBfZ2NyeV9tZF9ibG9ja193cml0ZSwgdGlnZXJfZmluYWwsIHRpZ2VyX3JlYWQsCisgICAgc2l6ZW9mIChUSUdFUl9DT05URVhUKQorICB9OworCisjZW5kaWYgLyogSEFWRV9VNjRfVFlQRURFRiAqLwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3R3b2Zpc2gtYW1kNjQuUyBiL2NpcGhlci90d29maXNoLWFtZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyM2QyMgotLS0gL2Rldi9udWxsCisrKyBiL2NpcGhlci90d29maXNoLWFtZDY0LlMKQEAgLTAsMCArMSw3MzEgQEAKKy8qIHR3b2Zpc2gtYW1kNjQuUyAgLSAgQU1ENjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgVHdvZmlzaCBjaXBoZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBfX3g4Nl82NAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2lmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykgJiYgZGVmaW5lZChVU0VfVFdPRklTSCkKKworI2lmZGVmIF9fUElDX18KKyMgIGRlZmluZSBSSVAgJXJpcAorI2Vsc2UKKyMgIGRlZmluZSBSSVAKKyNlbmRpZgorCisudGV4dAorCisvKiBzdHJ1Y3R1cmUgb2YgVFdPRklTSF9jb250ZXh0OiAqLworI2RlZmluZSBzMCAwCisjZGVmaW5lIHMxICgoczApICsgNCAqIDI1NikKKyNkZWZpbmUgczIgKChzMSkgKyA0ICogMjU2KQorI2RlZmluZSBzMyAoKHMyKSArIDQgKiAyNTYpCisjZGVmaW5lIHcgICgoczMpICsgNCAqIDI1NikKKyNkZWZpbmUgayAgKCh3KSArIDQgKiA4KQorCisvKiByZWdpc3RlciBtYWNyb3MgKi8KKyNkZWZpbmUgQ1RYCSVyZGkKKworI2RlZmluZSBSQQklcmF4CisjZGVmaW5lIFJCCSVyYngKKyNkZWZpbmUgUkMJJXJjeAorI2RlZmluZSBSRAklcmR4CisKKyNkZWZpbmUgUkFkCSVlYXgKKyNkZWZpbmUgUkJkCSVlYngKKyNkZWZpbmUgUkNkCSVlY3gKKyNkZWZpbmUgUkRkCSVlZHgKKworI2RlZmluZSBSQWJsCSVhbAorI2RlZmluZSBSQmJsCSVibAorI2RlZmluZSBSQ2JsCSVjbAorI2RlZmluZSBSRGJsCSVkbAorCisjZGVmaW5lIFJBYmgJJWFoCisjZGVmaW5lIFJCYmgJJWJoCisjZGVmaW5lIFJDYmgJJWNoCisjZGVmaW5lIFJEYmgJJWRoCisKKyNkZWZpbmUgUlgJJXI4CisjZGVmaW5lIFJZCSVyOQorCisjZGVmaW5lIFJYZAklcjhkCisjZGVmaW5lIFJZZAklcjlkCisKKyNkZWZpbmUgUlQwCSVyc2kKKyNkZWZpbmUgUlQxCSVyYnAKKyNkZWZpbmUgUlQyCSVyMTAKKyNkZWZpbmUgUlQzCSVyMTEKKworI2RlZmluZSBSVDBkCSVlc2kKKyNkZWZpbmUgUlQxZAklZWJwCisjZGVmaW5lIFJUMmQJJXIxMGQKKyNkZWZpbmUgUlQzZAklcjExZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBUd29maXNoIGNpcGhlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBlbmNfZzFfMihhLCBiLCB4LCB5KSBcCisJbW92emJsIGIgIyMgYmwsIFJUM2Q7IFwKKwltb3Z6YmwgYiAjIyBiaCwgUlQxZDsgXAorCW1vdnpibCBhICMjIGJsLCBSVDJkOyBcCisJbW92emJsIGEgIyMgYmgsIFJUMGQ7IFwKKwlyb3JsICQxNiwgYiAjIyBkOyBcCisJcm9ybCAkMTYsIGEgIyMgZDsgXAorCW1vdmwgczEoQ1RYLCBSVDMsIDQpLCBSWWQ7IFwKKwltb3Z6YmwgYiAjIyBibCwgUlQzZDsgXAorCW1vdmwgczAoQ1RYLCBSVDIsIDQpLCBSWGQ7IFwKKwltb3Z6YmwgYSAjIyBibCwgUlQyZDsgXAorCXhvcmwgczIoQ1RYLCBSVDEsIDQpLCBSWWQ7IFwKKwltb3Z6YmwgYiAjIyBiaCwgUlQxZDsgXAorCXhvcmwgczEoQ1RYLCBSVDAsIDQpLCBSWGQ7IFwKKwltb3Z6YmwgYSAjIyBiaCwgUlQwZDsgXAorCXJvcmwgJDE2LCBiICMjIGQ7IFwKKwlyb3JsICQxNiwgYSAjIyBkOyBcCisJeG9ybCBzMyhDVFgsIFJUMywgNCksIFJZZDsgXAorCXhvcmwgczIoQ1RYLCBSVDIsIDQpLCBSWGQ7IFwKKwl4b3JsIHMwKENUWCwgUlQxLCA0KSwgUllkOyBcCisJeG9ybCBzMyhDVFgsIFJUMCwgNCksIFJYZDsKKworI2RlZmluZSBkZWNfZzFfMihhLCBiLCB4LCB5KSBcCisJbW92emJsIGEgIyMgYmwsIFJUMmQ7IFwKKwltb3Z6YmwgYSAjIyBiaCwgUlQwZDsgXAorCW1vdnpibCBiICMjIGJsLCBSVDNkOyBcCisJbW92emJsIGIgIyMgYmgsIFJUMWQ7IFwKKwlyb3JsICQxNiwgYSAjIyBkOyBcCisJcm9ybCAkMTYsIGIgIyMgZDsgXAorCW1vdmwgczAoQ1RYLCBSVDIsIDQpLCBSWGQ7IFwKKwltb3Z6YmwgYSAjIyBibCwgUlQyZDsgXAorCW1vdmwgczEoQ1RYLCBSVDMsIDQpLCBSWWQ7IFwKKwltb3Z6YmwgYiAjIyBibCwgUlQzZDsgXAorCXhvcmwgczEoQ1RYLCBSVDAsIDQpLCBSWGQ7IFwKKwltb3Z6YmwgYSAjIyBiaCwgUlQwZDsgXAorCXhvcmwgczIoQ1RYLCBSVDEsIDQpLCBSWWQ7IFwKKwltb3Z6YmwgYiAjIyBiaCwgUlQxZDsgXAorCXJvcmwgJDE2LCBhICMjIGQ7IFwKKwlyb3JsICQxNiwgYiAjIyBkOyBcCisJeG9ybCBzMihDVFgsIFJUMiwgNCksIFJYZDsgXAorCXhvcmwgczMoQ1RYLCBSVDMsIDQpLCBSWWQ7IFwKKwl4b3JsIHMzKENUWCwgUlQwLCA0KSwgUlhkOyBcCisJeG9ybCBzMChDVFgsIFJUMSwgNCksIFJZZDsKKworI2RlZmluZSBlbmNyeXB0X3JvdW5kKHJhLCByYiwgcmMsIHJkLCBuKSBcCisJZW5jX2cxXzIoIyNyYSwgIyNyYiwgUlgsIFJZKTsgXAorCVwKKwlsZWFsIChSWGQsIFJZZCwgMiksIFJUMGQ7IFwKKwlhZGRsIFJZZCwgUlhkOyBcCisJYWRkbCAoayArIDggKiAobikgKyA0KShDVFgpLCBSVDBkOyBcCisJcm9sbCAkMSwgcmQgIyMgZDsgXAorCWFkZGwgKGsgKyA4ICogKG4pKShDVFgpLCBSWGQ7IFwKKwl4b3JsIFJUMGQsIHJkICMjIGQ7IFwKKwl4b3JsIFJYZCwgcmMgIyMgZDsgXAorCXJvcmwgJDEsIHJjICMjIGQ7CisKKyNkZWZpbmUgZGVjcnlwdF9yb3VuZChyYSwgcmIsIHJjLCByZCwgbikgXAorCWRlY19nMV8yKCMjcmEsICMjcmIsIFJYLCBSWSk7IFwKKwlcCisJbGVhbCAoUlhkLCBSWWQsIDIpLCBSVDBkOyBcCisJYWRkbCBSWWQsIFJYZDsgXAorCWFkZGwgKGsgKyA4ICogKG4pICsgNCkoQ1RYKSwgUlQwZDsgXAorCXJvbGwgJDEsIHJjICMjIGQ7IFwKKwlhZGRsIChrICsgOCAqIChuKSkoQ1RYKSwgUlhkOyBcCisJeG9ybCBSWGQsIHJjICMjIGQ7IFwKKwl4b3JsIFJUMGQsIHJkICMjIGQ7IFwKKwlyb3JsICQxLCByZCAjIyBkOworCisjZGVmaW5lIGVuY3J5cHRfY3ljbGUoYSwgYiwgYywgZCwgbmMpIFwKKwllbmNyeXB0X3JvdW5kKCMjYSwgIyNiLCAjI2MsICMjZCwgKG5jKSAqIDIpOyBcCisJZW5jcnlwdF9yb3VuZCgjI2MsICMjZCwgIyNhLCAjI2IsIChuYykgKiAyICsgMSk7CisKKyNkZWZpbmUgZGVjcnlwdF9jeWNsZShhLCBiLCBjLCBkLCBuYykgXAorCWRlY3J5cHRfcm91bmQoIyNjLCAjI2QsICMjYSwgIyNiLCAobmMpICogMiArIDEpOyBcCisJZGVjcnlwdF9yb3VuZCgjI2EsICMjYiwgIyNjLCAjI2QsIChuYykgKiAyKTsKKworI2RlZmluZSBpbnBhY2soaW4sIG4sIHgsIG0pIFwKKwltb3ZsICg0ICogKG4pKShpbiksIHg7IFwKKwl4b3JsICh3ICsgNCAqIChtKSkoQ1RYKSwgeDsKKworI2RlZmluZSBvdXR1bnBhY2sob3V0LCBuLCB4LCBtKSBcCisJeG9ybCAodyArIDQgKiAobSkpKENUWCksIHg7IFwKKwltb3ZsIHgsICg0ICogKG4pKShvdXQpOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X3R3b2Zpc2hfYW1kNjRfZW5jcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV90d29maXNoX2FtZDY0X2VuY3J5cHRfYmxvY2ssQGZ1bmN0aW9uOworCitfZ2NyeV90d29maXNoX2FtZDY0X2VuY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY29udGV4dCwgQ1RYCisJICoJJXJzaTogZHN0CisJICoJJXJkeDogc3JjCisJICovCisJc3VicSAkKDMgKiA4KSwgJXJzcDsKKwltb3ZxICVyc2ksICgwICogOCkoJXJzcCk7CisJbW92cSAlcmJwLCAoMSAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDIgKiA4KSglcnNwKTsKKworCW1vdnEgJXJkeCwgUlg7CisJaW5wYWNrKFJYLCAwLCBSQWQsIDApOworCWlucGFjayhSWCwgMSwgUkJkLCAxKTsKKwlpbnBhY2soUlgsIDIsIFJDZCwgMik7CisJaW5wYWNrKFJYLCAzLCBSRGQsIDMpOworCisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMCk7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMSk7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMik7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMyk7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNCk7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNSk7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNik7CisJZW5jcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNyk7CisKKwltb3ZxICgwICogOCkoJXJzcCksIFJYOyAvKmRzdCovCisJb3V0dW5wYWNrKFJYLCAwLCBSQ2QsIDQpOworCW91dHVucGFjayhSWCwgMSwgUkRkLCA1KTsKKwlvdXR1bnBhY2soUlgsIDIsIFJBZCwgNik7CisJb3V0dW5wYWNrKFJYLCAzLCBSQmQsIDcpOworCisJbW92cSAoMiAqIDgpKCVyc3ApLCAlcmJ4OworCW1vdnEgKDEgKiA4KSglcnNwKSwgJXJicDsKKwlhZGRxICQoMyAqIDgpLCAlcnNwOworCisJcmV0OworLnNpemUgX2djcnlfdHdvZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrLC4tX2djcnlfdHdvZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X3R3b2Zpc2hfYW1kNjRfZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV90d29maXNoX2FtZDY0X2RlY3J5cHRfYmxvY2ssQGZ1bmN0aW9uOworCitfZ2NyeV90d29maXNoX2FtZDY0X2RlY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXJkaTogY29udGV4dCwgQ1RYCisJICoJJXJzaTogZHN0CisJICoJJXJkeDogc3JjCisJICovCisJc3VicSAkKDMgKiA4KSwgJXJzcDsKKwltb3ZxICVyc2ksICgwICogOCkoJXJzcCk7CisJbW92cSAlcmJwLCAoMSAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDIgKiA4KSglcnNwKTsKKworCW1vdnEgJXJkeCwgUlg7CisJaW5wYWNrKFJYLCAwLCBSQ2QsIDQpOworCWlucGFjayhSWCwgMSwgUkRkLCA1KTsKKwlpbnBhY2soUlgsIDIsIFJBZCwgNik7CisJaW5wYWNrKFJYLCAzLCBSQmQsIDcpOworCisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNyk7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNik7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNSk7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgNCk7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMyk7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMik7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMSk7CisJZGVjcnlwdF9jeWNsZShSQSwgUkIsIFJDLCBSRCwgMCk7CisKKwltb3ZxICgwICogOCkoJXJzcCksIFJYOyAvKmRzdCovCisJb3V0dW5wYWNrKFJYLCAwLCBSQWQsIDApOworCW91dHVucGFjayhSWCwgMSwgUkJkLCAxKTsKKwlvdXR1bnBhY2soUlgsIDIsIFJDZCwgMik7CisJb3V0dW5wYWNrKFJYLCAzLCBSRGQsIDMpOworCisJbW92cSAoMiAqIDgpKCVyc3ApLCAlcmJ4OworCW1vdnEgKDEgKiA4KSglcnNwKSwgJXJicDsKKwlhZGRxICQoMyAqIDgpLCAlcnNwOworCisJcmV0OworLnNpemUgX2djcnlfdHdvZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrLC4tX2djcnlfdHdvZmlzaF9hbWQ2NF9lbmNyeXB0X2Jsb2NrOworCisjdW5kZWYgQ1RYCisKKyN1bmRlZiBSQQorI3VuZGVmIFJCCisjdW5kZWYgUkMKKyN1bmRlZiBSRAorCisjdW5kZWYgUkFkCisjdW5kZWYgUkJkCisjdW5kZWYgUkNkCisjdW5kZWYgUkRkCisKKyN1bmRlZiBSQWJsCisjdW5kZWYgUkJibAorI3VuZGVmIFJDYmwKKyN1bmRlZiBSRGJsCisKKyN1bmRlZiBSQWJoCisjdW5kZWYgUkJiaAorI3VuZGVmIFJDYmgKKyN1bmRlZiBSRGJoCisKKyN1bmRlZiBSWAorI3VuZGVmIFJZCisKKyN1bmRlZiBSWGQKKyN1bmRlZiBSWWQKKworI3VuZGVmIFJUMAorI3VuZGVmIFJUMQorI3VuZGVmIFJUMgorI3VuZGVmIFJUMworCisjdW5kZWYgUlQwZAorI3VuZGVmIFJUMWQKKyN1bmRlZiBSVDJkCisjdW5kZWYgUlQzZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFNRDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBUd29maXNoIGNpcGhlciwgMy13YXkgcGFyYWxsZWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ1RYICVyZGkKKyNkZWZpbmUgUklPICVyZHgKKworI2RlZmluZSBSQUIwICVyYXgKKyNkZWZpbmUgUkFCMSAlcmJ4CisjZGVmaW5lIFJBQjIgJXJjeAorCisjZGVmaW5lIFJBQjBkICVlYXgKKyNkZWZpbmUgUkFCMWQgJWVieAorI2RlZmluZSBSQUIyZCAlZWN4CisKKyNkZWZpbmUgUkFCMGJoICVhaAorI2RlZmluZSBSQUIxYmggJWJoCisjZGVmaW5lIFJBQjJiaCAlY2gKKworI2RlZmluZSBSQUIwYmwgJWFsCisjZGVmaW5lIFJBQjFibCAlYmwKKyNkZWZpbmUgUkFCMmJsICVjbAorCisjZGVmaW5lIFJDRDAgJXI4CisjZGVmaW5lIFJDRDEgJXI5CisjZGVmaW5lIFJDRDIgJXIxMAorCisjZGVmaW5lIFJDRDBkICVyOGQKKyNkZWZpbmUgUkNEMWQgJXI5ZAorI2RlZmluZSBSQ0QyZCAlcjEwZAorCisjZGVmaW5lIFJYMCAlcmJwCisjZGVmaW5lIFJYMSAlcjExCisjZGVmaW5lIFJYMiAlcjEyCisKKyNkZWZpbmUgUlgwZCAlZWJwCisjZGVmaW5lIFJYMWQgJXIxMWQKKyNkZWZpbmUgUlgyZCAlcjEyZAorCisjZGVmaW5lIFJZMCAlcjEzCisjZGVmaW5lIFJZMSAlcjE0CisjZGVmaW5lIFJZMiAlcjE1CisKKyNkZWZpbmUgUlkwZCAlcjEzZAorI2RlZmluZSBSWTFkICVyMTRkCisjZGVmaW5lIFJZMmQgJXIxNWQKKworI2RlZmluZSBSVDAgJXJkeAorI2RlZmluZSBSVDEgJXJzaQorCisjZGVmaW5lIFJUMGQgJWVkeAorI2RlZmluZSBSVDFkICVlc2kKKworI2RlZmluZSBkbzE2Yml0X3Jvcihyb3QsIG9wMSwgb3AyLCBUMCwgVDEsIHRtcDEsIHRtcDIsIGFiLCBkc3QpIFwKKwltb3Z6YmwgYWIgIyMgYmwsCQl0bXAyICMjIGQ7IFwKKwltb3Z6YmwgYWIgIyMgYmgsCQl0bXAxICMjIGQ7IFwKKwlyb3JxICQocm90KSwJCQlhYjsgXAorCW9wMSMjbCBUMChDVFgsIHRtcDIsIDQpLAlkc3QgIyMgZDsgXAorCW9wMiMjbCBUMShDVFgsIHRtcDEsIDQpLAlkc3QgIyMgZDsKKworLyoKKyAqIENvbWJpbmVkIEcxICYgRzIgZnVuY3Rpb24uIFJlb3JkZXJlZCB3aXRoIGhlbHAgb2Ygcm90YXRlcyB0byBoYXZlIG1vdmVzCisgKiBhdCBiZWdpbm5pbmcuCisgKi8KKyNkZWZpbmUgZzFnMl8zKGFiLCBjZCwgVHgwLCBUeDEsIFR4MiwgVHgzLCBUeTAsIFR5MSwgVHkyLCBUeTMsIHgsIHkpIFwKKwkvKiBHMSwxICYmIEcyLDEgKi8gXAorCWRvMTZiaXRfcm9yKDMyLCBtb3YsIHhvciwgVHgwLCBUeDEsIFJUMCwgeCAjIyAwLCBhYiAjIyAwLCB4ICMjIDApOyBcCisJZG8xNmJpdF9yb3IoNDgsIG1vdiwgeG9yLCBUeTEsIFR5MiwgUlQwLCB5ICMjIDAsIGFiICMjIDAsIHkgIyMgMCk7IFwKKwlcCisJZG8xNmJpdF9yb3IoMzIsIG1vdiwgeG9yLCBUeDAsIFR4MSwgUlQwLCB4ICMjIDEsIGFiICMjIDEsIHggIyMgMSk7IFwKKwlkbzE2Yml0X3Jvcig0OCwgbW92LCB4b3IsIFR5MSwgVHkyLCBSVDAsIHkgIyMgMSwgYWIgIyMgMSwgeSAjIyAxKTsgXAorCVwKKwlkbzE2Yml0X3JvcigzMiwgbW92LCB4b3IsIFR4MCwgVHgxLCBSVDAsIHggIyMgMiwgYWIgIyMgMiwgeCAjIyAyKTsgXAorCWRvMTZiaXRfcm9yKDQ4LCBtb3YsIHhvciwgVHkxLCBUeTIsIFJUMCwgeSAjIyAyLCBhYiAjIyAyLCB5ICMjIDIpOyBcCisJXAorCS8qIEcxLDIgJiYgRzIsMiAqLyBcCisJZG8xNmJpdF9yb3IoMzIsIHhvciwgeG9yLCBUeDIsIFR4MywgUlQwLCBSVDEsIGFiICMjIDAsIHggIyMgMCk7IFwKKwlkbzE2Yml0X3JvcigxNiwgeG9yLCB4b3IsIFR5MywgVHkwLCBSVDAsIFJUMSwgYWIgIyMgMCwgeSAjIyAwKTsgXAorCXhjaGdxIGNkICMjIDAsIGFiICMjIDA7IFwKKwlcCisJZG8xNmJpdF9yb3IoMzIsIHhvciwgeG9yLCBUeDIsIFR4MywgUlQwLCBSVDEsIGFiICMjIDEsIHggIyMgMSk7IFwKKwlkbzE2Yml0X3JvcigxNiwgeG9yLCB4b3IsIFR5MywgVHkwLCBSVDAsIFJUMSwgYWIgIyMgMSwgeSAjIyAxKTsgXAorCXhjaGdxIGNkICMjIDEsIGFiICMjIDE7IFwKKwlcCisJZG8xNmJpdF9yb3IoMzIsIHhvciwgeG9yLCBUeDIsIFR4MywgUlQwLCBSVDEsIGFiICMjIDIsIHggIyMgMik7IFwKKwlkbzE2Yml0X3JvcigxNiwgeG9yLCB4b3IsIFR5MywgVHkwLCBSVDAsIFJUMSwgYWIgIyMgMiwgeSAjIyAyKTsgXAorCXhjaGdxIGNkICMjIDIsIGFiICMjIDI7CisKKyNkZWZpbmUgZW5jX3JvdW5kX2VuZChhYiwgeCwgeSwgbikgXAorCWFkZGwgeSAjIyBkLAkJCXggIyMgZDsgXAorCWFkZGwgeCAjIyBkLAkJCXkgIyMgZDsgXAorCWFkZGwgays0KigyKihuKSkoQ1RYKSwJCXggIyMgZDsgXAorCXhvcmwgYWIgIyMgZCwJCQl4ICMjIGQ7IFwKKwlhZGRsIGsrNCooMioobikrMSkoQ1RYKSwJeSAjIyBkOyBcCisJc2hycSAkMzIsCQkJYWI7IFwKKwlyb2xsICQxLAkJCWFiICMjIGQ7IFwKKwl4b3JsIHkgIyMgZCwJCQlhYiAjIyBkOyBcCisJc2hscSAkMzIsCQkJYWI7IFwKKwlyb3JsICQxLAkJCXggIyMgZDsgXAorCW9ycSB4LAkJCQlhYjsKKworI2RlZmluZSBkZWNfcm91bmRfZW5kKGJhLCB4LCB5LCBuKSBcCisJYWRkbCB5ICMjIGQsCQkJeCAjIyBkOyBcCisJYWRkbCB4ICMjIGQsCQkJeSAjIyBkOyBcCisJYWRkbCBrKzQqKDIqKG4pKShDVFgpLAkJeCAjIyBkOyBcCisJYWRkbCBrKzQqKDIqKG4pKzEpKENUWCksCXkgIyMgZDsgXAorCXhvcmwgYmEgIyMgZCwJCQl5ICMjIGQ7IFwKKwlzaHJxICQzMiwJCQliYTsgXAorCXJvbGwgJDEsCQkJYmEgIyMgZDsgXAorCXhvcmwgeCAjIyBkLAkJCWJhICMjIGQ7IFwKKwlzaGxxICQzMiwJCQliYTsgXAorCXJvcmwgJDEsCQkJeSAjIyBkOyBcCisJb3JxIHksCQkJCWJhOworCisjZGVmaW5lIGVuY3J5cHRfcm91bmQzKGFiLCBjZCwgbikgXAorCWcxZzJfMyhhYiwgY2QsIHMwLCBzMSwgczIsIHMzLCBzMCwgczEsIHMyLCBzMywgUlgsIFJZKTsgXAorCVwKKwllbmNfcm91bmRfZW5kKGFiICMjIDAsIFJYMCwgUlkwLCBuKTsgXAorCWVuY19yb3VuZF9lbmQoYWIgIyMgMSwgUlgxLCBSWTEsIG4pOyBcCisJZW5jX3JvdW5kX2VuZChhYiAjIyAyLCBSWDIsIFJZMiwgbik7CisKKyNkZWZpbmUgZGVjcnlwdF9yb3VuZDMoYmEsIGRjLCBuKSBcCisJZzFnMl8zKGJhLCBkYywgczEsIHMyLCBzMywgczAsIHMzLCBzMCwgczEsIHMyLCBSWSwgUlgpOyBcCisJXAorCWRlY19yb3VuZF9lbmQoYmEgIyMgMCwgUlgwLCBSWTAsIG4pOyBcCisJZGVjX3JvdW5kX2VuZChiYSAjIyAxLCBSWDEsIFJZMSwgbik7IFwKKwlkZWNfcm91bmRfZW5kKGJhICMjIDIsIFJYMiwgUlkyLCBuKTsKKworI2RlZmluZSBlbmNyeXB0X2N5Y2xlMyhhYiwgY2QsIG4pIFwKKwllbmNyeXB0X3JvdW5kMyhhYiwgY2QsIG4qMik7IFwKKwllbmNyeXB0X3JvdW5kMyhhYiwgY2QsIChuKjIpKzEpOworCisjZGVmaW5lIGRlY3J5cHRfY3ljbGUzKGJhLCBkYywgbikgXAorCWRlY3J5cHRfcm91bmQzKGJhLCBkYywgKG4qMikrMSk7IFwKKwlkZWNyeXB0X3JvdW5kMyhiYSwgZGMsIChuKjIpKTsKKworI2RlZmluZSBpbnBhY2szKHh5LCBtKSBcCisJeG9ycSB3KzQqbShDVFgpLAkJeHkgIyMgMDsgXAorCXhvcnEgdys0Km0oQ1RYKSwJCXh5ICMjIDE7IFwKKwl4b3JxIHcrNCptKENUWCksCQl4eSAjIyAyOworCisjZGVmaW5lIG91dHVucGFjazMoeHksIG0pIFwKKwl4b3JxIHcrNCptKENUWCksCQl4eSAjIyAwOyBcCisJeG9ycSB3KzQqbShDVFgpLAkJeHkgIyMgMTsgXAorCXhvcnEgdys0Km0oQ1RYKSwJCXh5ICMjIDI7CisKKyNkZWZpbmUgaW5wYWNrX2VuYzMoKSBcCisJaW5wYWNrMyhSQUIsIDApOyBcCisJaW5wYWNrMyhSQ0QsIDIpOworCisjZGVmaW5lIG91dHVucGFja19lbmMzKCkgXAorCW91dHVucGFjazMoUkFCLCA2KTsgXAorCW91dHVucGFjazMoUkNELCA0KTsKKworI2RlZmluZSBpbnBhY2tfZGVjMygpIFwKKwlpbnBhY2szKFJBQiwgNCk7IFwKKwlyb3JxICQzMiwJCQlSQUIwOyBcCisJcm9ycSAkMzIsCQkJUkFCMTsgXAorCXJvcnEgJDMyLAkJCVJBQjI7IFwKKwlpbnBhY2szKFJDRCwgNik7IFwKKwlyb3JxICQzMiwJCQlSQ0QwOyBcCisJcm9ycSAkMzIsCQkJUkNEMTsgXAorCXJvcnEgJDMyLAkJCVJDRDI7CisKKyNkZWZpbmUgb3V0dW5wYWNrX2RlYzMoKSBcCisJcm9ycSAkMzIsCQkJUkNEMDsgXAorCXJvcnEgJDMyLAkJCVJDRDE7IFwKKwlyb3JxICQzMiwJCQlSQ0QyOyBcCisJb3V0dW5wYWNrMyhSQ0QsIDApOyBcCisJcm9ycSAkMzIsCQkJUkFCMDsgXAorCXJvcnEgJDMyLAkJCVJBQjE7IFwKKwlyb3JxICQzMiwJCQlSQUIyOyBcCisJb3V0dW5wYWNrMyhSQUIsIDIpOworCisuYWxpZ24gOAorLnR5cGUgX190d29maXNoX2VuY19ibGszLEBmdW5jdGlvbjsKKworX190d29maXNoX2VuY19ibGszOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJUkFCMCxSQ0QwLFJBQjEsUkNEMSxSQUIyLFJDRDI6IHRocmVlIHBsYWludGV4dCBibG9ja3MKKwkgKiBvdXRwdXQ6CisJICoJUkNEMCxSQUIwLFJDRDEsUkFCMSxSQ0QyLFJBQjI6IHRocmVlIGNpcGhlcnRleHQgYmxvY2tzCisJICovCisJaW5wYWNrX2VuYzMoKTsKKworCWVuY3J5cHRfY3ljbGUzKFJBQiwgUkNELCAwKTsKKwllbmNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgMSk7CisJZW5jcnlwdF9jeWNsZTMoUkFCLCBSQ0QsIDIpOworCWVuY3J5cHRfY3ljbGUzKFJBQiwgUkNELCAzKTsKKwllbmNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgNCk7CisJZW5jcnlwdF9jeWNsZTMoUkFCLCBSQ0QsIDUpOworCWVuY3J5cHRfY3ljbGUzKFJBQiwgUkNELCA2KTsKKwllbmNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgNyk7CisKKwlvdXR1bnBhY2tfZW5jMygpOworCisJcmV0OworLnNpemUgX190d29maXNoX2VuY19ibGszLC4tX190d29maXNoX2VuY19ibGszOworCisuYWxpZ24gOAorLnR5cGUgIF9fdHdvZmlzaF9kZWNfYmxrMyxAZnVuY3Rpb247CisKK19fdHdvZmlzaF9kZWNfYmxrMzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCVJBQjAsUkNEMCxSQUIxLFJDRDEsUkFCMixSQ0QyOiB0aHJlZSBjaXBoZXJ0ZXh0IGJsb2NrcworCSAqIG91dHB1dDoKKwkgKglSQ0QwLFJBQjAsUkNEMSxSQUIxLFJDRDIsUkFCMjogdGhyZWUgcGxhaW50ZXh0IGJsb2NrcworCSAqLworCWlucGFja19kZWMzKCk7CisKKwlkZWNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgNyk7CisJZGVjcnlwdF9jeWNsZTMoUkFCLCBSQ0QsIDYpOworCWRlY3J5cHRfY3ljbGUzKFJBQiwgUkNELCA1KTsKKwlkZWNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgNCk7CisJZGVjcnlwdF9jeWNsZTMoUkFCLCBSQ0QsIDMpOworCWRlY3J5cHRfY3ljbGUzKFJBQiwgUkNELCAyKTsKKwlkZWNyeXB0X2N5Y2xlMyhSQUIsIFJDRCwgMSk7CisJZGVjcnlwdF9jeWNsZTMoUkFCLCBSQ0QsIDApOworCisJb3V0dW5wYWNrX2RlYzMoKTsKKworCXJldDsKKy5zaXplIF9fdHdvZmlzaF9kZWNfYmxrMywuLV9fdHdvZmlzaF9kZWNfYmxrMzsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV90d29maXNoX2FtZDY0X2N0cl9lbmMKKy50eXBlICAgX2djcnlfdHdvZmlzaF9hbWQ2NF9jdHJfZW5jLEBmdW5jdGlvbjsKK19nY3J5X3R3b2Zpc2hfYW1kNjRfY3RyX2VuYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoMyBibG9ja3MpCisJICoJJXJkeDogc3JjICgzIGJsb2NrcykKKwkgKgklcmN4OiBpdiAoYmlnIGVuZGlhbiwgMTI4Yml0KQorCSAqLworCXN1YnEgJCg4ICogOCksICVyc3A7CisJbW92cSAlcmJwLCAoMCAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDEgKiA4KSglcnNwKTsKKwltb3ZxICVyMTIsICgyICogOCkoJXJzcCk7CisJbW92cSAlcjEzLCAoMyAqIDgpKCVyc3ApOworCW1vdnEgJXIxNCwgKDQgKiA4KSglcnNwKTsKKwltb3ZxICVyMTUsICg1ICogOCkoJXJzcCk7CisKKwltb3ZxICVyc2ksICg2ICogOCkoJXJzcCk7CisJbW92cSAlcmR4LCAoNyAqIDgpKCVyc3ApOworCW1vdnEgJXJjeCwgUlgwOworCisJLyogbG9hZCBJViBhbmQgYnl0ZXN3YXAgKi8KKwltb3ZxIDgoUlgwKSwgUlQwOworCW1vdnEgMChSWDApLCBSVDE7CisJbW92cSBSVDAsIFJDRDA7CisJbW92cSBSVDEsIFJBQjA7CisJYnN3YXBxIFJUMDsKKwlic3dhcHEgUlQxOworCisJLyogY29uc3RydWN0IElWcyAqLworCW1vdnEgUlQwLCBSQ0QxOworCW1vdnEgUlQxLCBSQUIxOworCW1vdnEgUlQwLCBSQ0QyOworCW1vdnEgUlQxLCBSQUIyOworCWFkZHEgJDEsIFJDRDE7CisJYWRjcSAkMCwgUkFCMTsKKwlic3dhcHEgUkNEMTsKKwlic3dhcHEgUkFCMTsKKwlhZGRxICQyLCBSQ0QyOworCWFkY3EgJDAsIFJBQjI7CisJYnN3YXBxIFJDRDI7CisJYnN3YXBxIFJBQjI7CisJYWRkcSAkMywgUlQwOworCWFkY3EgJDAsIFJUMTsKKwlic3dhcHEgUlQwOworCWJzd2FwcSBSVDE7CisKKwkvKiBzdG9yZSBuZXcgSVYgKi8KKwltb3ZxIFJUMCwgOChSWDApOworCW1vdnEgUlQxLCAwKFJYMCk7CisKKwljYWxsIF9fdHdvZmlzaF9lbmNfYmxrMzsKKworCW1vdnEgKDcgKiA4KSglcnNwKSwgUlgwOyAvKnNyYyovCisJbW92cSAoNiAqIDgpKCVyc3ApLCBSWDE7IC8qZHN0Ki8KKworCS8qIFhPUiBrZXktc3RyZWFtIHdpdGggcGxhaW50ZXh0ICovCisJeG9ycSAoMCAqIDgpKFJYMCksIFJDRDA7CisJeG9ycSAoMSAqIDgpKFJYMCksIFJBQjA7CisJeG9ycSAoMiAqIDgpKFJYMCksIFJDRDE7CisJeG9ycSAoMyAqIDgpKFJYMCksIFJBQjE7CisJeG9ycSAoNCAqIDgpKFJYMCksIFJDRDI7CisJeG9ycSAoNSAqIDgpKFJYMCksIFJBQjI7CisJbW92cSBSQ0QwLCAoMCAqIDgpKFJYMSk7CisJbW92cSBSQUIwLCAoMSAqIDgpKFJYMSk7CisJbW92cSBSQ0QxLCAoMiAqIDgpKFJYMSk7CisJbW92cSBSQUIxLCAoMyAqIDgpKFJYMSk7CisJbW92cSBSQ0QyLCAoNCAqIDgpKFJYMSk7CisJbW92cSBSQUIyLCAoNSAqIDgpKFJYMSk7CisKKwltb3ZxICgwICogOCkoJXJzcCksICVyYnA7CisJbW92cSAoMSAqIDgpKCVyc3ApLCAlcmJ4OworCW1vdnEgKDIgKiA4KSglcnNwKSwgJXIxMjsKKwltb3ZxICgzICogOCkoJXJzcCksICVyMTM7CisJbW92cSAoNCAqIDgpKCVyc3ApLCAlcjE0OworCW1vdnEgKDUgKiA4KSglcnNwKSwgJXIxNTsKKwlhZGRxICQoOCAqIDgpLCAlcnNwOworCisJcmV0OworLnNpemUgX2djcnlfdHdvZmlzaF9hbWQ2NF9jdHJfZW5jLC4tX2djcnlfdHdvZmlzaF9hbWQ2NF9jdHJfZW5jOworCisuYWxpZ24gOAorLmdsb2JsIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY2JjX2RlYworLnR5cGUgICBfZ2NyeV90d29maXNoX2FtZDY0X2NiY19kZWMsQGZ1bmN0aW9uOworX2djcnlfdHdvZmlzaF9hbWQ2NF9jYmNfZGVjOgorCS8qIGlucHV0OgorCSAqCSVyZGk6IGN0eCwgQ1RYCisJICoJJXJzaTogZHN0ICgzIGJsb2NrcykKKwkgKgklcmR4OiBzcmMgKDMgYmxvY2tzKQorCSAqCSVyY3g6IGl2ICgxMjhiaXQpCisJICovCisJc3VicSAkKDkgKiA4KSwgJXJzcDsKKwltb3ZxICVyYnAsICgwICogOCkoJXJzcCk7CisJbW92cSAlcmJ4LCAoMSAqIDgpKCVyc3ApOworCW1vdnEgJXIxMiwgKDIgKiA4KSglcnNwKTsKKwltb3ZxICVyMTMsICgzICogOCkoJXJzcCk7CisJbW92cSAlcjE0LCAoNCAqIDgpKCVyc3ApOworCW1vdnEgJXIxNSwgKDUgKiA4KSglcnNwKTsKKworCW1vdnEgJXJzaSwgKDYgKiA4KSglcnNwKTsKKwltb3ZxICVyZHgsICg3ICogOCkoJXJzcCk7CisJbW92cSAlcmN4LCAoOCAqIDgpKCVyc3ApOworCW1vdnEgJXJkeCwgUlgwOworCisJLyogbG9hZCBpbnB1dCAqLworCW1vdnEgKDAgKiA4KShSWDApLCBSQUIwOworCW1vdnEgKDEgKiA4KShSWDApLCBSQ0QwOworCW1vdnEgKDIgKiA4KShSWDApLCBSQUIxOworCW1vdnEgKDMgKiA4KShSWDApLCBSQ0QxOworCW1vdnEgKDQgKiA4KShSWDApLCBSQUIyOworCW1vdnEgKDUgKiA4KShSWDApLCBSQ0QyOworCisJY2FsbCBfX3R3b2Zpc2hfZGVjX2JsazM7CisKKwltb3ZxICg4ICogOCkoJXJzcCksIFJUMDsgLyppdiovCisJbW92cSAoNyAqIDgpKCVyc3ApLCBSWDA7IC8qc3JjKi8KKwltb3ZxICg2ICogOCkoJXJzcCksIFJYMTsgLypkc3QqLworCisJbW92cSAoNCAqIDgpKFJYMCksIFJZMDsKKwltb3ZxICg1ICogOCkoUlgwKSwgUlkxOworCXhvcnEgKDAgKiA4KShSVDApLCBSQ0QwOworCXhvcnEgKDEgKiA4KShSVDApLCBSQUIwOworCXhvcnEgKDAgKiA4KShSWDApLCBSQ0QxOworCXhvcnEgKDEgKiA4KShSWDApLCBSQUIxOworCXhvcnEgKDIgKiA4KShSWDApLCBSQ0QyOworCXhvcnEgKDMgKiA4KShSWDApLCBSQUIyOworCW1vdnEgUlkwLCAoMCAqIDgpKFJUMCk7CisJbW92cSBSWTEsICgxICogOCkoUlQwKTsKKworCW1vdnEgUkNEMCwgKDAgKiA4KShSWDEpOworCW1vdnEgUkFCMCwgKDEgKiA4KShSWDEpOworCW1vdnEgUkNEMSwgKDIgKiA4KShSWDEpOworCW1vdnEgUkFCMSwgKDMgKiA4KShSWDEpOworCW1vdnEgUkNEMiwgKDQgKiA4KShSWDEpOworCW1vdnEgUkFCMiwgKDUgKiA4KShSWDEpOworCisJbW92cSAoMCAqIDgpKCVyc3ApLCAlcmJwOworCW1vdnEgKDEgKiA4KSglcnNwKSwgJXJieDsKKwltb3ZxICgyICogOCkoJXJzcCksICVyMTI7CisJbW92cSAoMyAqIDgpKCVyc3ApLCAlcjEzOworCW1vdnEgKDQgKiA4KSglcnNwKSwgJXIxNDsKKwltb3ZxICg1ICogOCkoJXJzcCksICVyMTU7CisJYWRkcSAkKDkgKiA4KSwgJXJzcDsKKworCXJldDsKKy5zaXplIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY2JjX2RlYywuLV9nY3J5X3R3b2Zpc2hfYW1kNjRfY2JjX2RlYzsKKworLmFsaWduIDgKKy5nbG9ibCBfZ2NyeV90d29maXNoX2FtZDY0X2NmYl9kZWMKKy50eXBlICAgX2djcnlfdHdvZmlzaF9hbWQ2NF9jZmJfZGVjLEBmdW5jdGlvbjsKK19nY3J5X3R3b2Zpc2hfYW1kNjRfY2ZiX2RlYzoKKwkvKiBpbnB1dDoKKwkgKgklcmRpOiBjdHgsIENUWAorCSAqCSVyc2k6IGRzdCAoMyBibG9ja3MpCisJICoJJXJkeDogc3JjICgzIGJsb2NrcykKKwkgKgklcmN4OiBpdiAoMTI4Yml0KQorCSAqLworCXN1YnEgJCg4ICogOCksICVyc3A7CisJbW92cSAlcmJwLCAoMCAqIDgpKCVyc3ApOworCW1vdnEgJXJieCwgKDEgKiA4KSglcnNwKTsKKwltb3ZxICVyMTIsICgyICogOCkoJXJzcCk7CisJbW92cSAlcjEzLCAoMyAqIDgpKCVyc3ApOworCW1vdnEgJXIxNCwgKDQgKiA4KSglcnNwKTsKKwltb3ZxICVyMTUsICg1ICogOCkoJXJzcCk7CisKKwltb3ZxICVyc2ksICg2ICogOCkoJXJzcCk7CisJbW92cSAlcmR4LCAoNyAqIDgpKCVyc3ApOworCW1vdnEgJXJkeCwgUlgwOworCW1vdnEgJXJjeCwgUlgxOworCisJLyogbG9hZCBpbnB1dCAqLworCW1vdnEgKDAgKiA4KShSWDEpLCBSQUIwOworCW1vdnEgKDEgKiA4KShSWDEpLCBSQ0QwOworCW1vdnEgKDAgKiA4KShSWDApLCBSQUIxOworCW1vdnEgKDEgKiA4KShSWDApLCBSQ0QxOworCW1vdnEgKDIgKiA4KShSWDApLCBSQUIyOworCW1vdnEgKDMgKiA4KShSWDApLCBSQ0QyOworCisJLyogVXBkYXRlIElWICovCisJbW92cSAoNCAqIDgpKFJYMCksIFJZMDsKKwltb3ZxICg1ICogOCkoUlgwKSwgUlkxOworCW1vdnEgUlkwLCAoMCAqIDgpKFJYMSk7CisJbW92cSBSWTEsICgxICogOCkoUlgxKTsKKworCWNhbGwgX190d29maXNoX2VuY19ibGszOworCisJbW92cSAoNyAqIDgpKCVyc3ApLCBSWDA7IC8qc3JjKi8KKwltb3ZxICg2ICogOCkoJXJzcCksIFJYMTsgLypkc3QqLworCisJeG9ycSAoMCAqIDgpKFJYMCksIFJDRDA7CisJeG9ycSAoMSAqIDgpKFJYMCksIFJBQjA7CisJeG9ycSAoMiAqIDgpKFJYMCksIFJDRDE7CisJeG9ycSAoMyAqIDgpKFJYMCksIFJBQjE7CisJeG9ycSAoNCAqIDgpKFJYMCksIFJDRDI7CisJeG9ycSAoNSAqIDgpKFJYMCksIFJBQjI7CisJbW92cSBSQ0QwLCAoMCAqIDgpKFJYMSk7CisJbW92cSBSQUIwLCAoMSAqIDgpKFJYMSk7CisJbW92cSBSQ0QxLCAoMiAqIDgpKFJYMSk7CisJbW92cSBSQUIxLCAoMyAqIDgpKFJYMSk7CisJbW92cSBSQ0QyLCAoNCAqIDgpKFJYMSk7CisJbW92cSBSQUIyLCAoNSAqIDgpKFJYMSk7CisKKwltb3ZxICgwICogOCkoJXJzcCksICVyYnA7CisJbW92cSAoMSAqIDgpKCVyc3ApLCAlcmJ4OworCW1vdnEgKDIgKiA4KSglcnNwKSwgJXIxMjsKKwltb3ZxICgzICogOCkoJXJzcCksICVyMTM7CisJbW92cSAoNCAqIDgpKCVyc3ApLCAlcjE0OworCW1vdnEgKDUgKiA4KSglcnNwKSwgJXIxNTsKKwlhZGRxICQoOCAqIDgpLCAlcnNwOworCisJcmV0OworLnNpemUgX2djcnlfdHdvZmlzaF9hbWQ2NF9jZmJfZGVjLC4tX2djcnlfdHdvZmlzaF9hbWQ2NF9jZmJfZGVjOworCisjZW5kaWYgLypVU0VfVFdPRklTSCovCisjZW5kaWYgLypfX3g4Nl82NCovCmRpZmYgLS1naXQgYS9jaXBoZXIvdHdvZmlzaC1hcm0uUyBiL2NpcGhlci90d29maXNoLWFybS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDIyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvdHdvZmlzaC1hcm0uUwpAQCAtMCwwICsxLDM2MyBAQAorLyogdHdvZmlzaC1hcm0uUyAgLSAgQVJNIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIFR3b2Zpc2ggY2lwaGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSnVzc2kgS2l2aWxpbm5hIDxqdXNzaS5raXZpbGlubmFAaWtpLmZpPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyNpZmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FSTV9QTEFURk9STV9BUworCisudGV4dAorCisuc3ludGF4IHVuaWZpZWQKKy5hcm0KKworLyogc3RydWN0dXJlIG9mIFRXT0ZJU0hfY29udGV4dDogKi8KKyNkZWZpbmUgczAgMAorI2RlZmluZSBzMSAoKHMwKSArIDQgKiAyNTYpCisjZGVmaW5lIHMyICgoczEpICsgNCAqIDI1NikKKyNkZWZpbmUgczMgKChzMikgKyA0ICogMjU2KQorI2RlZmluZSB3ICAoKHMzKSArIDQgKiAyNTYpCisjZGVmaW5lIGsgICgodykgKyA0ICogOCkKKworLyogcmVnaXN0ZXIgbWFjcm9zICovCisjZGVmaW5lIENUWCAlcjAKKyNkZWZpbmUgQ1RYczAgJXIwCisjZGVmaW5lIENUWHMxICVyMQorI2RlZmluZSBDVFhzMyAlcjcKKworI2RlZmluZSBSQSAlcjMKKyNkZWZpbmUgUkIgJXI0CisjZGVmaW5lIFJDICVyNQorI2RlZmluZSBSRCAlcjYKKworI2RlZmluZSBSWCAlcjIKKyNkZWZpbmUgUlkgJWlwCisKKyNkZWZpbmUgUk1BU0sgJWxyCisKKyNkZWZpbmUgUlQwICVyOAorI2RlZmluZSBSVDEgJXI5CisjZGVmaW5lIFJUMiAlcjEwCisjZGVmaW5lIFJUMyAlcjExCisKKy8qIGhlbHBlciBtYWNyb3MgKi8KKyNkZWZpbmUgbGRyX3VuYWxpZ25lZF9sZShyb3V0LCByc3JjLCBvZmZzLCBydG1wKSBcCisJbGRyYiByb3V0LCBbcnNyYywgIygob2ZmcykgKyAwKV07IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDEpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzg7IFwKKwlsZHJiIHJ0bXAsIFtyc3JjLCAjKChvZmZzKSArIDIpXTsgXAorCW9yciByb3V0LCByb3V0LCBydG1wLCBsc2wgIzE2OyBcCisJbGRyYiBydG1wLCBbcnNyYywgIygob2ZmcykgKyAzKV07IFwKKwlvcnIgcm91dCwgcm91dCwgcnRtcCwgbHNsICMyNDsKKworI2RlZmluZSBzdHJfdW5hbGlnbmVkX2xlKHJpbiwgcmRzdCwgb2ZmcywgcnRtcDAsIHJ0bXAxKSBcCisJbW92IHJ0bXAwLCByaW4sIGxzciAjODsgXAorCXN0cmIgcmluLCBbcmRzdCwgIygob2ZmcykgKyAwKV07IFwKKwltb3YgcnRtcDEsIHJpbiwgbHNyICMxNjsgXAorCXN0cmIgcnRtcDAsIFtyZHN0LCAjKChvZmZzKSArIDEpXTsgXAorCW1vdiBydG1wMCwgcmluLCBsc3IgIzI0OyBcCisJc3RyYiBydG1wMSwgW3Jkc3QsICMoKG9mZnMpICsgMildOyBcCisJc3RyYiBydG1wMCwgW3Jkc3QsICMoKG9mZnMpICsgMyldOworCisjaWZuZGVmIF9fQVJNRUxfXworCS8qIGJzd2FwIG9uIGJpZy1lbmRpYW4gKi8KKwkjZGVmaW5lIGhvc3RfdG9fbGUocmVnKSBcCisJCXJldiByZWcsIHJlZzsKKwkjZGVmaW5lIGxlX3RvX2hvc3QocmVnKSBcCisJCXJldiByZWcsIHJlZzsKKyNlbHNlCisJLyogbm9wIG9uIGxpdHRsZS1lbmRpYW4gKi8KKwkjZGVmaW5lIGhvc3RfdG9fbGUocmVnKSAvKl8qLworCSNkZWZpbmUgbGVfdG9faG9zdChyZWcpIC8qXyovCisjZW5kaWYKKworI2RlZmluZSBsZHJfaW5wdXRfYWxpZ25lZF9sZShyaW4sIGEsIGIsIGMsIGQpIFwKKwlsZHIgYSwgW3JpbiwgIzBdOyBcCisJbGRyIGIsIFtyaW4sICM0XTsgXAorCWxlX3RvX2hvc3QoYSk7IFwKKwlsZHIgYywgW3JpbiwgIzhdOyBcCisJbGVfdG9faG9zdChiKTsgXAorCWxkciBkLCBbcmluLCAjMTJdOyBcCisJbGVfdG9faG9zdChjKTsgXAorCWxlX3RvX2hvc3QoZCk7CisKKyNkZWZpbmUgc3RyX291dHB1dF9hbGlnbmVkX2xlKHJvdXQsIGEsIGIsIGMsIGQpIFwKKwlsZV90b19ob3N0KGEpOyBcCisJbGVfdG9faG9zdChiKTsgXAorCXN0ciBhLCBbcm91dCwgIzBdOyBcCisJbGVfdG9faG9zdChjKTsgXAorCXN0ciBiLCBbcm91dCwgIzRdOyBcCisJbGVfdG9faG9zdChkKTsgXAorCXN0ciBjLCBbcm91dCwgIzhdOyBcCisJc3RyIGQsIFtyb3V0LCAjMTJdOworCisjaWZkZWYgX19BUk1fRkVBVFVSRV9VTkFMSUdORUQKKwkvKiB1bmFsaWduZWQgd29yZCByZWFkcy93cml0ZXMgYWxsb3dlZCAqLworCSNkZWZpbmUgbGRyX2lucHV0X2xlKHJpbiwgcmEsIHJiLCByYywgcmQsIHJ0bXApIFwKKwkJbGRyX2lucHV0X2FsaWduZWRfbGUocmluLCByYSwgcmIsIHJjLCByZCkKKworCSNkZWZpbmUgc3RyX291dHB1dF9sZShyb3V0LCByYSwgcmIsIHJjLCByZCwgcnRtcDAsIHJ0bXAxKSBcCisJCXN0cl9vdXRwdXRfYWxpZ25lZF9sZShyb3V0LCByYSwgcmIsIHJjLCByZCkKKyNlbHNlCisJLyogbmVlZCB0byBoYW5kbGUgdW5hbGlnbmVkIHJlYWRzL3dyaXRlcyBieSBieXRlIHJlYWRzICovCisJI2RlZmluZSBsZHJfaW5wdXRfbGUocmluLCByYSwgcmIsIHJjLCByZCwgcnRtcDApIFwKKwkJdHN0IHJpbiwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlsZHJfdW5hbGlnbmVkX2xlKHJhLCByaW4sIDAsIHJ0bXAwKTsgXAorCQkJbGRyX3VuYWxpZ25lZF9sZShyYiwgcmluLCA0LCBydG1wMCk7IFwKKwkJCWxkcl91bmFsaWduZWRfbGUocmMsIHJpbiwgOCwgcnRtcDApOyBcCisJCQlsZHJfdW5hbGlnbmVkX2xlKHJkLCByaW4sIDEyLCBydG1wMCk7IFwKKwkJCWIgMmY7IFwKKwkJMTo7XAorCQkJbGRyX2lucHV0X2FsaWduZWRfbGUocmluLCByYSwgcmIsIHJjLCByZCk7IFwKKwkJMjo7CisKKwkjZGVmaW5lIHN0cl9vdXRwdXRfbGUocm91dCwgcmEsIHJiLCByYywgcmQsIHJ0bXAwLCBydG1wMSkgXAorCQl0c3Qgcm91dCwgIzM7IFwKKwkJYmVxIDFmOyBcCisJCQlzdHJfdW5hbGlnbmVkX2xlKHJhLCByb3V0LCAwLCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2xlKHJiLCByb3V0LCA0LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2xlKHJjLCByb3V0LCA4LCBydG1wMCwgcnRtcDEpOyBcCisJCQlzdHJfdW5hbGlnbmVkX2xlKHJkLCByb3V0LCAxMiwgcnRtcDAsIHJ0bXAxKTsgXAorCQkJYiAyZjsgXAorCQkxOjtcCisJCQlzdHJfb3V0cHV0X2FsaWduZWRfbGUocm91dCwgcmEsIHJiLCByYywgcmQpOyBcCisJCTI6OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIDEtd2F5IHR3b2Zpc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBlbmNyeXB0X3JvdW5kKGEsIGIsIHJjLCByZCwgbiwgcm9yX2EsIGFkal9hKSBcCisJYW5kIFJUMCwgUk1BU0ssIGIsIGxzciMoOCAtIDIpOyBcCisJYW5kIFJZLCBSTUFTSywgYiwgbHNyIygxNiAtIDIpOyBcCisJYWRkIFJUMCwgUlQwLCAjKHMyIC0gczEpOyBcCisJYW5kIFJUMSwgUk1BU0ssIGIsIGxzciMoMjQgLSAyKTsgXAorCWxkciBSWSwgW0NUWHMzLCBSWV07IFwKKwlhbmQgUlQyLCBSTUFTSywgYiwgbHNsIygyKTsgXAorCWxkciBSVDAsIFtDVFhzMSwgUlQwXTsgXAorCWFuZCBSVDMsIFJNQVNLLCBhLCBsc3IjKDE2IC0gMiArIChhZGpfYSkpOyBcCisJbGRyIFJUMSwgW0NUWHMwLCBSVDFdOyBcCisJYW5kIFJYLCBSTUFTSywgYSwgbHNyIyg4IC0gMiArIChhZGpfYSkpOyBcCisJbGRyIFJUMiwgW0NUWHMxLCBSVDJdOyBcCisJYWRkIFJUMywgUlQzLCAjKHMyIC0gczEpOyBcCisJbGRyIFJYLCBbQ1RYczEsIFJYXTsgXAorCXJvcl9hKGEpOyBcCisJXAorCWVvciBSWSwgUlksIFJUMDsgXAorCWxkciBSVDMsIFtDVFhzMSwgUlQzXTsgXAorCWFuZCBSVDAsIFJNQVNLLCBhLCBsc2wjKDIpOyBcCisJZW9yIFJZLCBSWSwgUlQxOyBcCisJYW5kIFJUMSwgUk1BU0ssIGEsIGxzciMoMjQgLSAyKTsgXAorCWVvciBSWSwgUlksIFJUMjsgXAorCWxkciBSVDAsIFtDVFhzMCwgUlQwXTsgXAorCWVvciBSWCwgUlgsIFJUMzsgXAorCWxkciBSVDEsIFtDVFhzMywgUlQxXTsgXAorCWVvciBSWCwgUlgsIFJUMDsgXAorCVwKKwlsZHIgUlQzLCBbQ1RYczMsICMoayAtIHMzICsgOCAqIChuKSArIDQpXTsgXAorCWVvciBSWCwgUlgsIFJUMTsgXAorCWxkciBSVDIsIFtDVFhzMywgIyhrIC0gczMgKyA4ICogKG4pKV07IFwKKwlcCisJYWRkIFJUMCwgUlgsIFJZLCBsc2wgIzE7IFwKKwlhZGQgUlgsIFJYLCBSWTsgXAorCWFkZCBSVDAsIFJUMCwgUlQzOyBcCisJYWRkIFJYLCBSWCwgUlQyOyBcCisJZW9yIHJkLCBSVDAsIHJkLCByb3IgIzMxOyBcCisJZW9yIHJjLCByYywgUlg7CisKKyNkZWZpbmUgZHVtbXkoeCkgLypfKi8KKworI2RlZmluZSByb3IxKHIpIFwKKwlyb3IgciwgciwgIzE7CisKKyNkZWZpbmUgZGVjcnlwdF9yb3VuZChhLCBiLCByYywgcmQsIG4sIHJvcl9iLCBhZGpfYikgXAorCWFuZCBSVDMsIFJNQVNLLCBiLCBsc2wjKDIgLSAoYWRqX2IpKTsgXAorCWFuZCBSVDEsIFJNQVNLLCBiLCBsc3IjKDggLSAyICsgKGFkal9iKSk7IFwKKwlyb3JfYihiKTsgXAorCWFuZCBSVDIsIFJNQVNLLCBhLCBsc2wjKDIpOyBcCisJYW5kIFJUMCwgUk1BU0ssIGEsIGxzciMoOCAtIDIpOyBcCisJXAorCWxkciBSWSwgW0NUWHMxLCBSVDNdOyBcCisJYWRkIFJUMSwgUlQxLCAjKHMyIC0gczEpOyBcCisJbGRyIFJYLCBbQ1RYczAsIFJUMl07IFwKKwlhbmQgUlQzLCBSTUFTSywgYiwgbHNyIygxNiAtIDIpOyBcCisJbGRyIFJUMSwgW0NUWHMxLCBSVDFdOyBcCisJYW5kIFJUMiwgUk1BU0ssIGEsIGxzciMoMTYgLSAyKTsgXAorCWxkciBSVDAsIFtDVFhzMSwgUlQwXTsgXAorCVwKKwlhZGQgUlQyLCBSVDIsICMoczIgLSBzMSk7IFwKKwlsZHIgUlQzLCBbQ1RYczMsIFJUM107IFwKKwllb3IgUlksIFJZLCBSVDE7IFwKKwlcCisJYW5kIFJUMSwgUk1BU0ssIGIsIGxzciMoMjQgLSAyKTsgXAorCWVvciBSWCwgUlgsIFJUMDsgXAorCWxkciBSVDIsIFtDVFhzMSwgUlQyXTsgXAorCWFuZCBSVDAsIFJNQVNLLCBhLCBsc3IjKDI0IC0gMik7IFwKKwlcCisJbGRyIFJUMSwgW0NUWHMwLCBSVDFdOyBcCisJXAorCWVvciBSWSwgUlksIFJUMzsgXAorCWxkciBSVDAsIFtDVFhzMywgUlQwXTsgXAorCWVvciBSWCwgUlgsIFJUMjsgXAorCWVvciBSWSwgUlksIFJUMTsgXAorCVwKKwlsZHIgUlQxLCBbQ1RYczMsICMoayAtIHMzICsgOCAqIChuKSArIDQpXTsgXAorCWVvciBSWCwgUlgsIFJUMDsgXAorCWxkciBSVDIsIFtDVFhzMywgIyhrIC0gczMgKyA4ICogKG4pKV07IFwKKwlcCisJYWRkIFJUMCwgUlgsIFJZLCBsc2wgIzE7IFwKKwlhZGQgUlgsIFJYLCBSWTsgXAorCWFkZCBSVDAsIFJUMCwgUlQxOyBcCisJYWRkIFJYLCBSWCwgUlQyOyBcCisJZW9yIHJkLCByZCwgUlQwOyBcCisJZW9yIHJjLCBSWCwgcmMsIHJvciAjMzE7CisKKyNkZWZpbmUgZmlyc3RfZW5jcnlwdF9jeWNsZShuYykgXAorCWVuY3J5cHRfcm91bmQoUkEsIFJCLCBSQywgUkQsIChuYykgKiAyLCBkdW1teSwgMCk7IFwKKwllbmNyeXB0X3JvdW5kKFJDLCBSRCwgUkEsIFJCLCAobmMpICogMiArIDEsIHJvcjEsIDEpOworCisjZGVmaW5lIGVuY3J5cHRfY3ljbGUobmMpIFwKKwllbmNyeXB0X3JvdW5kKFJBLCBSQiwgUkMsIFJELCAobmMpICogMiwgcm9yMSwgMSk7IFwKKwllbmNyeXB0X3JvdW5kKFJDLCBSRCwgUkEsIFJCLCAobmMpICogMiArIDEsIHJvcjEsIDEpOworCisjZGVmaW5lIGxhc3RfZW5jcnlwdF9jeWNsZShuYykgXAorCWVuY3J5cHRfcm91bmQoUkEsIFJCLCBSQywgUkQsIChuYykgKiAyLCByb3IxLCAxKTsgXAorCWVuY3J5cHRfcm91bmQoUkMsIFJELCBSQSwgUkIsIChuYykgKiAyICsgMSwgcm9yMSwgMSk7IFwKKwlyb3IxKFJBKTsKKworI2RlZmluZSBmaXJzdF9kZWNyeXB0X2N5Y2xlKG5jKSBcCisJZGVjcnlwdF9yb3VuZChSQywgUkQsIFJBLCBSQiwgKG5jKSAqIDIgKyAxLCBkdW1teSwgMCk7IFwKKwlkZWNyeXB0X3JvdW5kKFJBLCBSQiwgUkMsIFJELCAobmMpICogMiwgcm9yMSwgMSk7CisKKyNkZWZpbmUgZGVjcnlwdF9jeWNsZShuYykgXAorCWRlY3J5cHRfcm91bmQoUkMsIFJELCBSQSwgUkIsIChuYykgKiAyICsgMSwgcm9yMSwgMSk7IFwKKwlkZWNyeXB0X3JvdW5kKFJBLCBSQiwgUkMsIFJELCAobmMpICogMiwgcm9yMSwgMSk7CisKKyNkZWZpbmUgbGFzdF9kZWNyeXB0X2N5Y2xlKG5jKSBcCisJZGVjcnlwdF9yb3VuZChSQywgUkQsIFJBLCBSQiwgKG5jKSAqIDIgKyAxLCByb3IxLCAxKTsgXAorCWRlY3J5cHRfcm91bmQoUkEsIFJCLCBSQywgUkQsIChuYykgKiAyLCByb3IxLCAxKTsgXAorCXJvcjEoUkQpOworCisuYWxpZ24gMworLmdsb2JsIF9nY3J5X3R3b2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2sKKy50eXBlICAgX2djcnlfdHdvZmlzaF9hcm1fZW5jcnlwdF9ibG9jaywlZnVuY3Rpb247CisKK19nY3J5X3R3b2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2s6CisJLyogaW5wdXQ6CisJICoJJXIwOiBjdHgKKwkgKgklcjE6IGRzdAorCSAqCSVyMjogc3JjCisJICovCisJcHVzaCB7JXIxLCAlcjQtJXIxMSwgJWlwLCAlbHJ9OworCisJYWRkIFJZLCBDVFhzMCwgI3c7CisKKwlsZHJfaW5wdXRfbGUoJXIyLCBSQSwgUkIsIFJDLCBSRCwgUlQwKTsKKworCS8qIElucHV0IHdoaXRlbmluZyAqLworCWxkbSBSWSwge1JUMCwgUlQxLCBSVDIsIFJUM307CisJYWRkIENUWHMzLCBDVFhzMCwgIyhzMyAtIHMwKTsKKwlhZGQgQ1RYczEsIENUWHMwLCAjKHMxIC0gczApOworCW1vdiBSTUFTSywgIygweGZmIDw8IDIpOworCWVvciBSQSwgUkEsIFJUMDsKKwllb3IgUkIsIFJCLCBSVDE7CisJZW9yIFJDLCBSQywgUlQyOworCWVvciBSRCwgUkQsIFJUMzsKKworCWZpcnN0X2VuY3J5cHRfY3ljbGUoMCk7CisJZW5jcnlwdF9jeWNsZSgxKTsKKwllbmNyeXB0X2N5Y2xlKDIpOworCWVuY3J5cHRfY3ljbGUoMyk7CisJZW5jcnlwdF9jeWNsZSg0KTsKKwllbmNyeXB0X2N5Y2xlKDUpOworCWVuY3J5cHRfY3ljbGUoNik7CisJbGFzdF9lbmNyeXB0X2N5Y2xlKDcpOworCisJYWRkIFJZLCBDVFhzMywgIyh3ICsgNCo0IC0gczMpOworCXBvcCB7JXIxfTsgLyogZHN0ICovCisKKwkvKiBPdXRwdXQgd2hpdGVuaW5nICovCisJbGRtIFJZLCB7UlQwLCBSVDEsIFJUMiwgUlQzfTsKKwllb3IgUkMsIFJDLCBSVDA7CisJZW9yIFJELCBSRCwgUlQxOworCWVvciBSQSwgUkEsIFJUMjsKKwllb3IgUkIsIFJCLCBSVDM7CisKKwlzdHJfb3V0cHV0X2xlKCVyMSwgUkMsIFJELCBSQSwgUkIsIFJUMCwgUlQxKTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5sdG9yZworLnNpemUgX2djcnlfdHdvZmlzaF9hcm1fZW5jcnlwdF9ibG9jaywuLV9nY3J5X3R3b2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2s7CisKKy5hbGlnbiAzCisuZ2xvYmwgX2djcnlfdHdvZmlzaF9hcm1fZGVjcnlwdF9ibG9jaworLnR5cGUgICBfZ2NyeV90d29maXNoX2FybV9kZWNyeXB0X2Jsb2NrLCVmdW5jdGlvbjsKKworX2djcnlfdHdvZmlzaF9hcm1fZGVjcnlwdF9ibG9jazoKKwkvKiBpbnB1dDoKKwkgKgklcjA6IGN0eAorCSAqCSVyMTogZHN0CisJICoJJXIyOiBzcmMKKwkgKi8KKwlwdXNoIHslcjEsICVyNC0lcjExLCAlaXAsICVscn07CisKKwlhZGQgQ1RYczMsIENUWHMwLCAjKHMzIC0gczApOworCisJbGRyX2lucHV0X2xlKCVyMiwgUkMsIFJELCBSQSwgUkIsIFJUMCk7CisKKwlhZGQgUlksIENUWHMzLCAjKHcgKyA0KjQgLSBzMyk7CisJYWRkIENUWHMzLCBDVFhzMCwgIyhzMyAtIHMwKTsKKworCS8qIElucHV0IHdoaXRlbmluZyAqLworCWxkbSBSWSwge1JUMCwgUlQxLCBSVDIsIFJUM307CisJYWRkIENUWHMxLCBDVFhzMCwgIyhzMSAtIHMwKTsKKwltb3YgUk1BU0ssICMoMHhmZiA8PCAyKTsKKwllb3IgUkMsIFJDLCBSVDA7CisJZW9yIFJELCBSRCwgUlQxOworCWVvciBSQSwgUkEsIFJUMjsKKwllb3IgUkIsIFJCLCBSVDM7CisKKwlmaXJzdF9kZWNyeXB0X2N5Y2xlKDcpOworCWRlY3J5cHRfY3ljbGUoNik7CisJZGVjcnlwdF9jeWNsZSg1KTsKKwlkZWNyeXB0X2N5Y2xlKDQpOworCWRlY3J5cHRfY3ljbGUoMyk7CisJZGVjcnlwdF9jeWNsZSgyKTsKKwlkZWNyeXB0X2N5Y2xlKDEpOworCWxhc3RfZGVjcnlwdF9jeWNsZSgwKTsKKworCWFkZCBSWSwgQ1RYczAsICN3OworCXBvcCB7JXIxfTsgLyogZHN0ICovCisKKwkvKiBPdXRwdXQgd2hpdGVuaW5nICovCisJbGRtIFJZLCB7UlQwLCBSVDEsIFJUMiwgUlQzfTsKKwllb3IgUkEsIFJBLCBSVDA7CisJZW9yIFJCLCBSQiwgUlQxOworCWVvciBSQywgUkMsIFJUMjsKKwllb3IgUkQsIFJELCBSVDM7CisKKwlzdHJfb3V0cHV0X2xlKCVyMSwgUkEsIFJCLCBSQywgUkQsIFJUMCwgUlQxKTsKKworCXBvcCB7JXI0LSVyMTEsICVpcCwgJXBjfTsKKy5zaXplIF9nY3J5X3R3b2Zpc2hfYXJtX2RlY3J5cHRfYmxvY2ssLi1fZ2NyeV90d29maXNoX2FybV9kZWNyeXB0X2Jsb2NrOworCisjZW5kaWYgLypIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTKi8KKyNlbmRpZiAvKl9fQVJNRUxfXyovCmRpZmYgLS1naXQgYS9jaXBoZXIvdHdvZmlzaC5jIGIvY2lwaGVyL3R3b2Zpc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Q3NmUzCi0tLSAvZGV2L251bGwKKysrIGIvY2lwaGVyL3R3b2Zpc2guYwpAQCAtMCwwICsxLDEzNTIgQEAKKy8qIFR3b2Zpc2ggZm9yIEdQRworICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogV3JpdHRlbiBieSBNYXR0aGV3IFNrYWxhIDxtc2thbGFAYW5zdXouc29va2UuYmMuY2E+LCBKdWx5IDI2LCAxOTk4CisgKiAyNTYtYml0IGtleSBsZW5ndGggYWRkZWQgTWFyY2ggMjAsIDE5OTkKKyAqIFNvbWUgbW9kaWZpY2F0aW9ucyB0byByZWR1Y2UgdGhlIHRleHQgc2l6ZSBieSBXZXJuZXIgS29jaCwgQXByaWwsIDE5OTgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGNvZGUgaXMgYSAiY2xlYW4gcm9vbSIgaW1wbGVtZW50YXRpb24sIHdyaXR0ZW4gZnJvbSB0aGUgcGFwZXIKKyAqIF9Ud29maXNoOiBBIDEyOC1CaXQgQmxvY2sgQ2lwaGVyXyBieSBCcnVjZSBTY2huZWllciwgSm9obiBLZWxzZXksCisgKiBEb3VnIFdoaXRpbmcsIERhdmlkIFdhZ25lciwgQ2hyaXMgSGFsbCwgYW5kIE5pZWxzIEZlcmd1c29uLCBhdmFpbGFibGUKKyAqIHRocm91Z2ggaHR0cDovL3d3dy5jb3VudGVycGFuZS5jb20vdHdvZmlzaC5odG1sCisgKgorICogRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gbXVsdGlwbGljYXRpb24gaW4gZmluaXRlIGZpZWxkcywgdXNlZCBmb3IKKyAqIHRoZSBtYXRyaXggb3BlcmF0aW9ucyBpbiB0aGUga2V5IHNjaGVkdWxlLCBzZWUgdGhlIGJvb2sgX0NvbnRlbXBvcmFyeQorICogQWJzdHJhY3QgQWxnZWJyYV8gYnkgSm9zZXBoIEEuIEdhbGxpYW4sIGVzcGVjaWFsbHkgY2hhcHRlciAyMiBpbiB0aGUKKyAqIFRoaXJkIEVkaXRpb24uCisgKgorICogT25seSB0aGUgMTI4LSBhbmQgMjU2LWJpdCBrZXkgc2l6ZXMgYXJlIHN1cHBvcnRlZC4gIFRoaXMgY29kZSBpcyBpbnRlbmRlZAorICogZm9yIEdOVSBDIG9uIGEgMzItYml0IHN5c3RlbSwgYnV0IGl0IHNob3VsZCB3b3JrIGFsbW9zdCBhbnl3aGVyZS4gIExvb3BzCisgKiBhcmUgdW5yb2xsZWQsIHByZWNvbXB1dGF0aW9uIHRhYmxlcyBhcmUgdXNlZCwgZXRjLiwgZm9yIG1heGltdW0gc3BlZWQgYXQKKyAqIHNvbWUgY29zdCBpbiBtZW1vcnkgY29uc3VtcHRpb24uICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3IgbWVtY21wKCkgKi8KKworI2luY2x1ZGUgInR5cGVzLmgiICAvKiBmb3IgYnl0ZSBhbmQgdTMyIHR5cGVkZWZzICovCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiYnVmaGVscC5oIgorI2luY2x1ZGUgImNpcGhlci1zZWxmdGVzdC5oIgorCisKKyNkZWZpbmUgVFdPRklTSF9CTE9DS1NJWkUgMTYKKworCisvKiBVU0VfQU1ENjRfQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBTUQ2NCBhc3NlbWJseSBjb2RlLiAqLworI3VuZGVmIFVTRV9BTUQ2NF9BU00KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoSEFWRV9DT01QQVRJQkxFX0dDQ19BTUQ2NF9QTEFURk9STV9BUykKKyMgZGVmaW5lIFVTRV9BTUQ2NF9BU00gMQorI2VuZGlmCisKKy8qIFVTRV9BUk1fQVNNIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBUk0gYXNzZW1ibHkgY29kZS4gKi8KKyN1bmRlZiBVU0VfQVJNX0FTTQorI2lmIGRlZmluZWQoX19BUk1FTF9fKQorIyBpZiBkZWZpbmVkKEhBVkVfQ09NUEFUSUJMRV9HQ0NfQVJNX1BMQVRGT1JNX0FTKQorIyAgZGVmaW5lIFVTRV9BUk1fQVNNIDEKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFByb3RvdHlwZSBmb3IgdGhlIHNlbGYtdGVzdCBmdW5jdGlvbi4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdCh2b2lkKTsKKworLyogU3RydWN0dXJlIGZvciBhbiBleHBhbmRlZCBUd29maXNoIGtleS4gIHMgY29udGFpbnMgdGhlIGtleS1kZXBlbmRlbnQKKyAqIFMtYm94ZXMgY29tcG9zZWQgd2l0aCB0aGUgTURTIG1hdHJpeDsgdyBjb250YWlucyB0aGUgZWlnaHQgIndoaXRlbmluZyIKKyAqIHN1YmtleXMsIEtbMF0gdGhyb3VnaCBLWzddLglrIGhvbGRzIHRoZSByZW1haW5pbmcsICJyb3VuZCIgc3Via2V5cy4gIE5vdGUKKyAqIHRoYXQga1tpXSBjb3JyZXNwb25kcyB0byB3aGF0IHRoZSBUd29maXNoIHBhcGVyIGNhbGxzIEtbaSs4XS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIHUzMiBzWzRdWzI1Nl0sIHdbOF0sIGtbMzJdOworfSBUV09GSVNIX2NvbnRleHQ7CisMCisvKiBUaGVzZSB0d28gdGFibGVzIGFyZSB0aGUgcTAgYW5kIHExIHBlcm11dGF0aW9ucywgZXhhY3RseSBhcyBkZXNjcmliZWQgaW4KKyAqIHRoZSBUd29maXNoIHBhcGVyLiAqLworCitzdGF0aWMgY29uc3QgYnl0ZSBxMFsyNTZdID0geworICAgMHhBOSwgMHg2NywgMHhCMywgMHhFOCwgMHgwNCwgMHhGRCwgMHhBMywgMHg3NiwgMHg5QSwgMHg5MiwgMHg4MCwgMHg3OCwKKyAgIDB4RTQsIDB4REQsIDB4RDEsIDB4MzgsIDB4MEQsIDB4QzYsIDB4MzUsIDB4OTgsIDB4MTgsIDB4RjcsIDB4RUMsIDB4NkMsCisgICAweDQzLCAweDc1LCAweDM3LCAweDI2LCAweEZBLCAweDEzLCAweDk0LCAweDQ4LCAweEYyLCAweEQwLCAweDhCLCAweDMwLAorICAgMHg4NCwgMHg1NCwgMHhERiwgMHgyMywgMHgxOSwgMHg1QiwgMHgzRCwgMHg1OSwgMHhGMywgMHhBRSwgMHhBMiwgMHg4MiwKKyAgIDB4NjMsIDB4MDEsIDB4ODMsIDB4MkUsIDB4RDksIDB4NTEsIDB4OUIsIDB4N0MsIDB4QTYsIDB4RUIsIDB4QTUsIDB4QkUsCisgICAweDE2LCAweDBDLCAweEUzLCAweDYxLCAweEMwLCAweDhDLCAweDNBLCAweEY1LCAweDczLCAweDJDLCAweDI1LCAweDBCLAorICAgMHhCQiwgMHg0RSwgMHg4OSwgMHg2QiwgMHg1MywgMHg2QSwgMHhCNCwgMHhGMSwgMHhFMSwgMHhFNiwgMHhCRCwgMHg0NSwKKyAgIDB4RTIsIDB4RjQsIDB4QjYsIDB4NjYsIDB4Q0MsIDB4OTUsIDB4MDMsIDB4NTYsIDB4RDQsIDB4MUMsIDB4MUUsIDB4RDcsCisgICAweEZCLCAweEMzLCAweDhFLCAweEI1LCAweEU5LCAweENGLCAweEJGLCAweEJBLCAweEVBLCAweDc3LCAweDM5LCAweEFGLAorICAgMHgzMywgMHhDOSwgMHg2MiwgMHg3MSwgMHg4MSwgMHg3OSwgMHgwOSwgMHhBRCwgMHgyNCwgMHhDRCwgMHhGOSwgMHhEOCwKKyAgIDB4RTUsIDB4QzUsIDB4QjksIDB4NEQsIDB4NDQsIDB4MDgsIDB4ODYsIDB4RTcsIDB4QTEsIDB4MUQsIDB4QUEsIDB4RUQsCisgICAweDA2LCAweDcwLCAweEIyLCAweEQyLCAweDQxLCAweDdCLCAweEEwLCAweDExLCAweDMxLCAweEMyLCAweDI3LCAweDkwLAorICAgMHgyMCwgMHhGNiwgMHg2MCwgMHhGRiwgMHg5NiwgMHg1QywgMHhCMSwgMHhBQiwgMHg5RSwgMHg5QywgMHg1MiwgMHgxQiwKKyAgIDB4NUYsIDB4OTMsIDB4MEEsIDB4RUYsIDB4OTEsIDB4ODUsIDB4NDksIDB4RUUsIDB4MkQsIDB4NEYsIDB4OEYsIDB4M0IsCisgICAweDQ3LCAweDg3LCAweDZELCAweDQ2LCAweEQ2LCAweDNFLCAweDY5LCAweDY0LCAweDJBLCAweENFLCAweENCLCAweDJGLAorICAgMHhGQywgMHg5NywgMHgwNSwgMHg3QSwgMHhBQywgMHg3RiwgMHhENSwgMHgxQSwgMHg0QiwgMHgwRSwgMHhBNywgMHg1QSwKKyAgIDB4MjgsIDB4MTQsIDB4M0YsIDB4MjksIDB4ODgsIDB4M0MsIDB4NEMsIDB4MDIsIDB4QjgsIDB4REEsIDB4QjAsIDB4MTcsCisgICAweDU1LCAweDFGLCAweDhBLCAweDdELCAweDU3LCAweEM3LCAweDhELCAweDc0LCAweEI3LCAweEM0LCAweDlGLCAweDcyLAorICAgMHg3RSwgMHgxNSwgMHgyMiwgMHgxMiwgMHg1OCwgMHgwNywgMHg5OSwgMHgzNCwgMHg2RSwgMHg1MCwgMHhERSwgMHg2OCwKKyAgIDB4NjUsIDB4QkMsIDB4REIsIDB4RjgsIDB4QzgsIDB4QTgsIDB4MkIsIDB4NDAsIDB4REMsIDB4RkUsIDB4MzIsIDB4QTQsCisgICAweENBLCAweDEwLCAweDIxLCAweEYwLCAweEQzLCAweDVELCAweDBGLCAweDAwLCAweDZGLCAweDlELCAweDM2LCAweDQyLAorICAgMHg0QSwgMHg1RSwgMHhDMSwgMHhFMAorfTsKKworc3RhdGljIGNvbnN0IGJ5dGUgcTFbMjU2XSA9IHsKKyAgIDB4NzUsIDB4RjMsIDB4QzYsIDB4RjQsIDB4REIsIDB4N0IsIDB4RkIsIDB4QzgsIDB4NEEsIDB4RDMsIDB4RTYsIDB4NkIsCisgICAweDQ1LCAweDdELCAweEU4LCAweDRCLCAweEQ2LCAweDMyLCAweEQ4LCAweEZELCAweDM3LCAweDcxLCAweEYxLCAweEUxLAorICAgMHgzMCwgMHgwRiwgMHhGOCwgMHgxQiwgMHg4NywgMHhGQSwgMHgwNiwgMHgzRiwgMHg1RSwgMHhCQSwgMHhBRSwgMHg1QiwKKyAgIDB4OEEsIDB4MDAsIDB4QkMsIDB4OUQsIDB4NkQsIDB4QzEsIDB4QjEsIDB4MEUsIDB4ODAsIDB4NUQsIDB4RDIsIDB4RDUsCisgICAweEEwLCAweDg0LCAweDA3LCAweDE0LCAweEI1LCAweDkwLCAweDJDLCAweEEzLCAweEIyLCAweDczLCAweDRDLCAweDU0LAorICAgMHg5MiwgMHg3NCwgMHgzNiwgMHg1MSwgMHgzOCwgMHhCMCwgMHhCRCwgMHg1QSwgMHhGQywgMHg2MCwgMHg2MiwgMHg5NiwKKyAgIDB4NkMsIDB4NDIsIDB4RjcsIDB4MTAsIDB4N0MsIDB4MjgsIDB4MjcsIDB4OEMsIDB4MTMsIDB4OTUsIDB4OUMsIDB4QzcsCisgICAweDI0LCAweDQ2LCAweDNCLCAweDcwLCAweENBLCAweEUzLCAweDg1LCAweENCLCAweDExLCAweEQwLCAweDkzLCAweEI4LAorICAgMHhBNiwgMHg4MywgMHgyMCwgMHhGRiwgMHg5RiwgMHg3NywgMHhDMywgMHhDQywgMHgwMywgMHg2RiwgMHgwOCwgMHhCRiwKKyAgIDB4NDAsIDB4RTcsIDB4MkIsIDB4RTIsIDB4NzksIDB4MEMsIDB4QUEsIDB4ODIsIDB4NDEsIDB4M0EsIDB4RUEsIDB4QjksCisgICAweEU0LCAweDlBLCAweEE0LCAweDk3LCAweDdFLCAweERBLCAweDdBLCAweDE3LCAweDY2LCAweDk0LCAweEExLCAweDFELAorICAgMHgzRCwgMHhGMCwgMHhERSwgMHhCMywgMHgwQiwgMHg3MiwgMHhBNywgMHgxQywgMHhFRiwgMHhEMSwgMHg1MywgMHgzRSwKKyAgIDB4OEYsIDB4MzMsIDB4MjYsIDB4NUYsIDB4RUMsIDB4NzYsIDB4MkEsIDB4NDksIDB4ODEsIDB4ODgsIDB4RUUsIDB4MjEsCisgICAweEM0LCAweDFBLCAweEVCLCAweEQ5LCAweEM1LCAweDM5LCAweDk5LCAweENELCAweEFELCAweDMxLCAweDhCLCAweDAxLAorICAgMHgxOCwgMHgyMywgMHhERCwgMHgxRiwgMHg0RSwgMHgyRCwgMHhGOSwgMHg0OCwgMHg0RiwgMHhGMiwgMHg2NSwgMHg4RSwKKyAgIDB4NzgsIDB4NUMsIDB4NTgsIDB4MTksIDB4OEQsIDB4RTUsIDB4OTgsIDB4NTcsIDB4NjcsIDB4N0YsIDB4MDUsIDB4NjQsCisgICAweEFGLCAweDYzLCAweEI2LCAweEZFLCAweEY1LCAweEI3LCAweDNDLCAweEE1LCAweENFLCAweEU5LCAweDY4LCAweDQ0LAorICAgMHhFMCwgMHg0RCwgMHg0MywgMHg2OSwgMHgyOSwgMHgyRSwgMHhBQywgMHgxNSwgMHg1OSwgMHhBOCwgMHgwQSwgMHg5RSwKKyAgIDB4NkUsIDB4NDcsIDB4REYsIDB4MzQsIDB4MzUsIDB4NkEsIDB4Q0YsIDB4REMsIDB4MjIsIDB4QzksIDB4QzAsIDB4OUIsCisgICAweDg5LCAweEQ0LCAweEVELCAweEFCLCAweDEyLCAweEEyLCAweDBELCAweDUyLCAweEJCLCAweDAyLCAweDJGLCAweEE5LAorICAgMHhENywgMHg2MSwgMHgxRSwgMHhCNCwgMHg1MCwgMHgwNCwgMHhGNiwgMHhDMiwgMHgxNiwgMHgyNSwgMHg4NiwgMHg1NiwKKyAgIDB4NTUsIDB4MDksIDB4QkUsIDB4OTEKK307CisMCisvKiBUaGVzZSBNRFMgdGFibGVzIGFyZSBhY3R1YWxseSB0YWJsZXMgb2YgTURTIGNvbXBvc2VkIHdpdGggcTAgYW5kIHExLAorICogYmVjYXVzZSBpdCBpcyBvbmx5IGV2ZXIgdXNlZCB0aGF0IHdheSBhbmQgd2UgY2FuIHNhdmUgc29tZSB0aW1lIGJ5CisgKiBwcmVjb21wdXRpbmcuICBPZiBjb3Vyc2UgdGhlIG1haW4gc2F2aW5nIGNvbWVzIGZyb20gcHJlY29tcHV0aW5nIHRoZQorICogR0YoMl44KSBtdWx0aXBsaWNhdGlvbiBpbnZvbHZlZCBpbiB0aGUgTURTIG1hdHJpeCBtdWx0aXBseTsgYnkgbG9va2luZworICogdGhpbmdzIHVwIGluIHRoZXNlIHRhYmxlcyB3ZSByZWR1Y2UgdGhlIG1hdHJpeCBtdWx0aXBseSB0byBmb3VyIGxvb2t1cHMKKyAqIGFuZCB0aHJlZSBYT1JzLiAgU2VtaS1mb3JtYWxseSwgdGhlIGRlZmluaXRpb24gb2YgdGhlc2UgdGFibGVzIGlzOgorICogbWRzWzBdW2ldID0gTURTIChxMVtpXSAwIDAgMCleVCAgbWRzWzFdW2ldID0gTURTICgwIHEwW2ldIDAgMCleVAorICogbWRzWzJdW2ldID0gTURTICgwIDAgcTFbaV0gMCleVCAgbWRzWzNdW2ldID0gTURTICgwIDAgMCBxMFtpXSleVAorICogd2hlcmUgXlQgbWVhbnMgInRyYW5zcG9zZSIsIHRoZSBtYXRyaXggbXVsdGlwbHkgaXMgcGVyZm9ybWVkIGluIEdGKDJeOCkKKyAqIHJlcHJlc2VudGVkIGFzIEdGKDIpW3hdL3YoeCkgd2hlcmUgdih4KT14XjgreF42K3heNSt4XjMrMSBhcyBkZXNjcmliZWQKKyAqIGJ5IFNjaG5laWVyIGV0IGFsLCBhbmQgSSdtIGNhc3VhbGx5IGdsb3NzaW5nIG92ZXIgdGhlIGJ5dGUvd29yZAorICogY29udmVyc2lvbiBpc3N1ZXMuICovCisKK3N0YXRpYyBjb25zdCB1MzIgbWRzWzRdWzI1Nl0gPSB7CisgICB7MHhCQ0JDMzI3NSwgMHhFQ0VDMjFGMywgMHgyMDIwNDNDNiwgMHhCM0IzQzlGNCwgMHhEQURBMDNEQiwgMHgwMjAyOEI3QiwKKyAgICAweEUyRTIyQkZCLCAweDlFOUVGQUM4LCAweEM5QzlFQzRBLCAweEQ0RDQwOUQzLCAweDE4MTg2QkU2LCAweDFFMUU5RjZCLAorICAgIDB4OTg5ODBFNDUsIDB4QjJCMjM4N0QsIDB4QTZBNkQyRTgsIDB4MjYyNkI3NEIsIDB4M0MzQzU3RDYsIDB4OTM5MzhBMzIsCisgICAgMHg4MjgyRUVEOCwgMHg1MjUyOThGRCwgMHg3QjdCRDQzNywgMHhCQkJCMzc3MSwgMHg1QjVCOTdGMSwgMHg0NzQ3ODNFMSwKKyAgICAweDI0MjQzQzMwLCAweDUxNTFFMjBGLCAweEJBQkFDNkY4LCAweDRBNEFGMzFCLCAweEJGQkY0ODg3LCAweDBEMEQ3MEZBLAorICAgIDB4QjBCMEIzMDYsIDB4NzU3NURFM0YsIDB4RDJEMkZENUUsIDB4N0Q3RDIwQkEsIDB4NjY2NjMxQUUsIDB4M0EzQUEzNUIsCisgICAgMHg1OTU5MUM4QSwgMHgwMDAwMDAwMCwgMHhDRENEOTNCQywgMHgxQTFBRTA5RCwgMHhBRUFFMkM2RCwgMHg3RjdGQUJDMSwKKyAgICAweDJCMkJDN0IxLCAweEJFQkVCOTBFLCAweEUwRTBBMDgwLCAweDhBOEExMDVELCAweDNCM0I1MkQyLCAweDY0NjRCQUQ1LAorICAgIDB4RDhEODg4QTAsIDB4RTdFN0E1ODQsIDB4NUY1RkU4MDcsIDB4MUIxQjExMTQsIDB4MkMyQ0MyQjUsIDB4RkNGQ0I0OTAsCisgICAgMHgzMTMxMjcyQywgMHg4MDgwNjVBMywgMHg3MzczMkFCMiwgMHgwQzBDODE3MywgMHg3OTc5NUY0QywgMHg2QjZCNDE1NCwKKyAgICAweDRCNEIwMjkyLCAweDUzNTM2OTc0LCAweDk0OTQ4RjM2LCAweDgzODMxRjUxLCAweDJBMkEzNjM4LCAweEM0QzQ5Q0IwLAorICAgIDB4MjIyMkM4QkQsIDB4RDVENUY4NUEsIDB4QkRCREMzRkMsIDB4NDg0ODc4NjAsIDB4RkZGRkNFNjIsIDB4NEM0QzA3OTYsCisgICAgMHg0MTQxNzc2QywgMHhDN0M3RTY0MiwgMHhFQkVCMjRGNywgMHgxQzFDMTQxMCwgMHg1RDVENjM3QywgMHgzNjM2MjIyOCwKKyAgICAweDY3NjdDMDI3LCAweEU5RTlBRjhDLCAweDQ0NDRGOTEzLCAweDE0MTRFQTk1LCAweEY1RjVCQjlDLCAweENGQ0YxOEM3LAorICAgIDB4M0YzRjJEMjQsIDB4QzBDMEUzNDYsIDB4NzI3MkRCM0IsIDB4NTQ1NDZDNzAsIDB4MjkyOTRDQ0EsIDB4RjBGMDM1RTMsCisgICAgMHgwODA4RkU4NSwgMHhDNkM2MTdDQiwgMHhGM0YzNEYxMSwgMHg4QzhDRTREMCwgMHhBNEE0NTk5MywgMHhDQUNBOTZCOCwKKyAgICAweDY4NjgzQkE2LCAweEI4Qjg0RDgzLCAweDM4MzgyODIwLCAweEU1RTUyRUZGLCAweEFEQUQ1NjlGLCAweDBCMEI4NDc3LAorICAgIDB4QzhDODFEQzMsIDB4OTk5OUZGQ0MsIDB4NTg1OEVEMDMsIDB4MTkxOTlBNkYsIDB4MEUwRTBBMDgsIDB4OTU5NTdFQkYsCisgICAgMHg3MDcwNTA0MCwgMHhGN0Y3MzBFNywgMHg2RTZFQ0YyQiwgMHgxRjFGNkVFMiwgMHhCNUI1M0Q3OSwgMHgwOTA5MEYwQywKKyAgICAweDYxNjEzNEFBLCAweDU3NTcxNjgyLCAweDlGOUYwQjQxLCAweDlEOUQ4MDNBLCAweDExMTE2NEVBLCAweDI1MjVDREI5LAorICAgIDB4QUZBRkRERTQsIDB4NDU0NTA4OUEsIDB4REZERjhEQTQsIDB4QTNBMzVDOTcsIDB4RUFFQUQ1N0UsIDB4MzUzNTU4REEsCisgICAgMHhFREVERDA3QSwgMHg0MzQzRkMxNywgMHhGOEY4Q0I2NiwgMHhGQkZCQjE5NCwgMHgzNzM3RDNBMSwgMHhGQUZBNDAxRCwKKyAgICAweEMyQzI2ODNELCAweEI0QjRDQ0YwLCAweDMyMzI1RERFLCAweDlDOUM3MUIzLCAweDU2NTZFNzBCLCAweEUzRTNEQTcyLAorICAgIDB4ODc4NzYwQTcsIDB4MTUxNTFCMUMsIDB4RjlGOTNBRUYsIDB4NjM2M0JGRDEsIDB4MzQzNEE5NTMsIDB4OUE5QTg1M0UsCisgICAgMHhCMUIxNDI4RiwgMHg3QzdDRDEzMywgMHg4ODg4OUIyNiwgMHgzRDNEQTY1RiwgMHhBMUExRDdFQywgMHhFNEU0REY3NiwKKyAgICAweDgxODE5NDJBLCAweDkxOTEwMTQ5LCAweDBGMEZGQjgxLCAweEVFRUVBQTg4LCAweDE2MTY2MUVFLCAweEQ3RDc3MzIxLAorICAgIDB4OTc5N0Y1QzQsIDB4QTVBNUE4MUEsIDB4RkVGRTNGRUIsIDB4NkQ2REI1RDksIDB4Nzg3OEFFQzUsIDB4QzVDNTZEMzksCisgICAgMHgxRDFERTU5OSwgMHg3Njc2QTRDRCwgMHgzRTNFRENBRCwgMHhDQkNCNjczMSwgMHhCNkI2NDc4QiwgMHhFRkVGNUIwMSwKKyAgICAweDEyMTIxRTE4LCAweDYwNjBDNTIzLCAweDZBNkFCMERELCAweDRENERGNjFGLCAweENFQ0VFOTRFLCAweERFREU3QzJELAorICAgIDB4NTU1NTlERjksIDB4N0U3RTVBNDgsIDB4MjEyMUIyNEYsIDB4MDMwMzdBRjIsIDB4QTBBMDI2NjUsIDB4NUU1RTE5OEUsCisgICAgMHg1QTVBNjY3OCwgMHg2NTY1NEI1QywgMHg2MjYyNEU1OCwgMHhGREZENDUxOSwgMHgwNjA2RjQ4RCwgMHg0MDQwODZFNSwKKyAgICAweEYyRjJCRTk4LCAweDMzMzNBQzU3LCAweDE3MTc5MDY3LCAweDA1MDU4RTdGLCAweEU4RTg1RTA1LCAweDRGNEY3RDY0LAorICAgIDB4ODk4OTZBQUYsIDB4MTAxMDk1NjMsIDB4NzQ3NDJGQjYsIDB4MEEwQTc1RkUsIDB4NUM1QzkyRjUsIDB4OUI5Qjc0QjcsCisgICAgMHgyRDJEMzMzQywgMHgzMDMwRDZBNSwgMHgyRTJFNDlDRSwgMHg0OTQ5ODlFOSwgMHg0NjQ2NzI2OCwgMHg3Nzc3NTU0NCwKKyAgICAweEE4QThEOEUwLCAweDk2OTYwNDRELCAweDI4MjhCRDQzLCAweEE5QTkyOTY5LCAweEQ5RDk3OTI5LCAweDg2ODY5MTJFLAorICAgIDB4RDFEMTg3QUMsIDB4RjRGNDRBMTUsIDB4OEQ4RDE1NTksIDB4RDZENjgyQTgsIDB4QjlCOUJDMEEsIDB4NDI0MjBEOUUsCisgICAgMHhGNkY2QzE2RSwgMHgyRjJGQjg0NywgMHhEREREMDZERiwgMHgyMzIzMzkzNCwgMHhDQ0NDNjIzNSwgMHhGMUYxQzQ2QSwKKyAgICAweEMxQzExMkNGLCAweDg1ODVFQkRDLCAweDhGOEY5RTIyLCAweDcxNzFBMUM5LCAweDkwOTBGMEMwLCAweEFBQUE1MzlCLAorICAgIDB4MDEwMUYxODksIDB4OEI4QkUxRDQsIDB4NEU0RThDRUQsIDB4OEU4RTZGQUIsIDB4QUJBQkEyMTIsIDB4NkY2RjNFQTIsCisgICAgMHhFNkU2NTQwRCwgMHhEQkRCRjI1MiwgMHg5MjkyN0JCQiwgMHhCN0I3QjYwMiwgMHg2OTY5Q0EyRiwgMHgzOTM5RDlBOSwKKyAgICAweEQzRDMwQ0Q3LCAweEE3QTcyMzYxLCAweEEyQTJBRDFFLCAweEMzQzM5OUI0LCAweDZDNkM0NDUwLCAweDA3MDcwNTA0LAorICAgIDB4MDQwNDdGRjYsIDB4MjcyNzQ2QzIsIDB4QUNBQ0E3MTYsIDB4RDBEMDc2MjUsIDB4NTA1MDEzODYsIDB4RENEQ0Y3NTYsCisgICAgMHg4NDg0MUE1NSwgMHhFMUUxNTEwOSwgMHg3QTdBMjVCRSwgMHgxMzEzRUY5MX0sCisKKyAgIHsweEE5RDkzOTM5LCAweDY3OTAxNzE3LCAweEIzNzE5QzlDLCAweEU4RDJBNkE2LCAweDA0MDUwNzA3LCAweEZEOTg1MjUyLAorICAgIDB4QTM2NTgwODAsIDB4NzZERkU0RTQsIDB4OUEwODQ1NDUsIDB4OTIwMjRCNEIsIDB4ODBBMEUwRTAsIDB4Nzg2NjVBNUEsCisgICAgMHhFNEREQUZBRiwgMHhEREIwNkE2QSwgMHhEMUJGNjM2MywgMHgzODM2MkEyQSwgMHgwRDU0RTZFNiwgMHhDNjQzMjAyMCwKKyAgICAweDM1NjJDQ0NDLCAweDk4QkVGMkYyLCAweDE4MUUxMjEyLCAweEY3MjRFQkVCLCAweEVDRDdBMUExLCAweDZDNzc0MTQxLAorICAgIDB4NDNCRDI4MjgsIDB4NzUzMkJDQkMsIDB4MzdENDdCN0IsIDB4MjY5Qjg4ODgsIDB4RkE3MDBEMEQsIDB4MTNGOTQ0NDQsCisgICAgMHg5NEIxRkJGQiwgMHg0ODVBN0U3RSwgMHhGMjdBMDMwMywgMHhEMEU0OEM4QywgMHg4QjQ3QjZCNiwgMHgzMDNDMjQyNCwKKyAgICAweDg0QTVFN0U3LCAweDU0NDE2QjZCLCAweERGMDZERERELCAweDIzQzU2MDYwLCAweDE5NDVGREZELCAweDVCQTMzQTNBLAorICAgIDB4M0Q2OEMyQzIsIDB4NTkxNThEOEQsIDB4RjMyMUVDRUMsIDB4QUUzMTY2NjYsIDB4QTIzRTZGNkYsIDB4ODIxNjU3NTcsCisgICAgMHg2Mzk1MTAxMCwgMHgwMTVCRUZFRiwgMHg4MzREQjhCOCwgMHgyRTkxODY4NiwgMHhEOUI1NkQ2RCwgMHg1MTFGODM4MywKKyAgICAweDlCNTNBQUFBLCAweDdDNjM1RDVELCAweEE2M0I2ODY4LCAweEVCM0ZGRUZFLCAweEE1RDYzMDMwLCAweEJFMjU3QTdBLAorICAgIDB4MTZBN0FDQUMsIDB4MEMwRjA5MDksIDB4RTMzNUYwRjAsIDB4NjEyM0E3QTcsIDB4QzBGMDkwOTAsIDB4OENBRkU5RTksCisgICAgMHgzQTgwOUQ5RCwgMHhGNTkyNUM1QywgMHg3MzgxMEMwQywgMHgyQzI3MzEzMSwgMHgyNTc2RDBEMCwgMHgwQkU3NTY1NiwKKyAgICAweEJCN0I5MjkyLCAweDRFRTlDRUNFLCAweDg5RjEwMTAxLCAweDZCOUYxRTFFLCAweDUzQTkzNDM0LCAweDZBQzRGMUYxLAorICAgIDB4QjQ5OUMzQzMsIDB4RjE5NzVCNUIsIDB4RTE4MzQ3NDcsIDB4RTY2QjE4MTgsIDB4QkRDODIyMjIsIDB4NDUwRTk4OTgsCisgICAgMHhFMjZFMUYxRiwgMHhGNEM5QjNCMywgMHhCNjJGNzQ3NCwgMHg2NkNCRjhGOCwgMHhDQ0ZGOTk5OSwgMHg5NUVBMTQxNCwKKyAgICAweDAzRUQ1ODU4LCAweDU2RjdEQ0RDLCAweEQ0RTE4QjhCLCAweDFDMUIxNTE1LCAweDFFQURBMkEyLCAweEQ3MENEM0QzLAorICAgIDB4RkIyQkUyRTIsIDB4QzMxREM4QzgsIDB4OEUxOTVFNUUsIDB4QjVDMjJDMkMsIDB4RTk4OTQ5NDksIDB4Q0YxMkMxQzEsCisgICAgMHhCRjdFOTU5NSwgMHhCQTIwN0Q3RCwgMHhFQTY0MTExMSwgMHg3Nzg0MEIwQiwgMHgzOTZEQzVDNSwgMHhBRjZBODk4OSwKKyAgICAweDMzRDE3QzdDLCAweEM5QTE3MTcxLCAweDYyQ0VGRkZGLCAweDcxMzdCQkJCLCAweDgxRkIwRjBGLCAweDc5M0RCNUI1LAorICAgIDB4MDk1MUUxRTEsIDB4QUREQzNFM0UsIDB4MjQyRDNGM0YsIDB4Q0RBNDc2NzYsIDB4Rjk5RDU1NTUsIDB4RDhFRTgyODIsCisgICAgMHhFNTg2NDA0MCwgMHhDNUFFNzg3OCwgMHhCOUNEMjUyNSwgMHg0RDA0OTY5NiwgMHg0NDU1Nzc3NywgMHgwODBBMEUwRSwKKyAgICAweDg2MTM1MDUwLCAweEU3MzBGN0Y3LCAweEExRDMzNzM3LCAweDFENDBGQUZBLCAweEFBMzQ2MTYxLCAweEVEOEM0RTRFLAorICAgIDB4MDZCM0IwQjAsIDB4NzA2QzU0NTQsIDB4QjIyQTczNzMsIDB4RDI1MjNCM0IsIDB4NDEwQjlGOUYsIDB4N0I4QjAyMDIsCisgICAgMHhBMDg4RDhEOCwgMHgxMTRGRjNGMywgMHgzMTY3Q0JDQiwgMHhDMjQ2MjcyNywgMHgyN0MwNjc2NywgMHg5MEI0RkNGQywKKyAgICAweDIwMjgzODM4LCAweEY2N0YwNDA0LCAweDYwNzg0ODQ4LCAweEZGMkVFNUU1LCAweDk2MDc0QzRDLCAweDVDNEI2NTY1LAorICAgIDB4QjFDNzJCMkIsIDB4QUI2RjhFOEUsIDB4OUUwRDQyNDIsIDB4OUNCQkY1RjUsIDB4NTJGMkRCREIsIDB4MUJGMzRBNEEsCisgICAgMHg1RkE2M0QzRCwgMHg5MzU5QTRBNCwgMHgwQUJDQjlCOSwgMHhFRjNBRjlGOSwgMHg5MUVGMTMxMywgMHg4NUZFMDgwOCwKKyAgICAweDQ5MDE5MTkxLCAweEVFNjExNjE2LCAweDJEN0NERURFLCAweDRGQjIyMTIxLCAweDhGNDJCMUIxLCAweDNCREI3MjcyLAorICAgIDB4NDdCODJGMkYsIDB4ODc0OEJGQkYsIDB4NkQyQ0FFQUUsIDB4NDZFM0MwQzAsIDB4RDY1NzNDM0MsIDB4M0U4NTlBOUEsCisgICAgMHg2OTI5QTlBOSwgMHg2NDdENEY0RiwgMHgyQTk0ODE4MSwgMHhDRTQ5MkUyRSwgMHhDQjE3QzZDNiwgMHgyRkNBNjk2OSwKKyAgICAweEZDQzNCREJELCAweDk3NUNBM0EzLCAweDA1NUVFOEU4LCAweDdBRDBFREVELCAweEFDODdEMUQxLCAweDdGOEUwNTA1LAorICAgIDB4RDVCQTY0NjQsIDB4MUFBOEE1QTUsIDB4NEJCNzI2MjYsIDB4MEVCOUJFQkUsIDB4QTc2MDg3ODcsIDB4NUFGOEQ1RDUsCisgICAgMHgyODIyMzYzNiwgMHgxNDExMUIxQiwgMHgzRkRFNzU3NSwgMHgyOTc5RDlEOSwgMHg4OEFBRUVFRSwgMHgzQzMzMkQyRCwKKyAgICAweDRDNUY3OTc5LCAweDAyQjZCN0I3LCAweEI4OTZDQUNBLCAweERBNTgzNTM1LCAweEIwOUNDNEM0LCAweDE3RkM0MzQzLAorICAgIDB4NTUxQTg0ODQsIDB4MUZGNjRENEQsIDB4OEExQzU5NTksIDB4N0QzOEIyQjIsIDB4NTdBQzMzMzMsIDB4QzcxOENGQ0YsCisgICAgMHg4REY0MDYwNiwgMHg3NDY5NTM1MywgMHhCNzc0OUI5QiwgMHhDNEY1OTc5NywgMHg5RjU2QURBRCwgMHg3MkRBRTNFMywKKyAgICAweDdFRDVFQUVBLCAweDE1NEFGNEY0LCAweDIyOUU4RjhGLCAweDEyQTJBQkFCLCAweDU4NEU2MjYyLCAweDA3RTg1RjVGLAorICAgIDB4OTlFNTFEMUQsIDB4MzQzOTIzMjMsIDB4NkVDMUY2RjYsIDB4NTA0NDZDNkMsIDB4REU1RDMyMzIsIDB4Njg3MjQ2NDYsCisgICAgMHg2NTI2QTBBMCwgMHhCQzkzQ0RDRCwgMHhEQjAzREFEQSwgMHhGOEM2QkFCQSwgMHhDOEZBOUU5RSwgMHhBODgyRDZENiwKKyAgICAweDJCQ0Y2RTZFLCAweDQwNTA3MDcwLCAweERDRUI4NTg1LCAweEZFNzUwQTBBLCAweDMyOEE5MzkzLCAweEE0OERERkRGLAorICAgIDB4Q0E0QzI5MjksIDB4MTAxNDFDMUMsIDB4MjE3M0Q3RDcsIDB4RjBDQ0I0QjQsIDB4RDMwOUQ0RDQsIDB4NUQxMDhBOEEsCisgICAgMHgwRkUyNTE1MSwgMHgwMDAwMDAwMCwgMHg2RjlBMTkxOSwgMHg5REUwMUExQSwgMHgzNjhGOTQ5NCwgMHg0MkU2QzdDNywKKyAgICAweDRBRUNDOUM5LCAweDVFRkREMkQyLCAweEMxQUI3RjdGLCAweEUwRDhBOEE4fSwKKworICAgezB4QkM3NUJDMzIsIDB4RUNGM0VDMjEsIDB4MjBDNjIwNDMsIDB4QjNGNEIzQzksIDB4REFEQkRBMDMsIDB4MDI3QjAyOEIsCisgICAgMHhFMkZCRTIyQiwgMHg5RUM4OUVGQSwgMHhDOTRBQzlFQywgMHhENEQzRDQwOSwgMHgxOEU2MTg2QiwgMHgxRTZCMUU5RiwKKyAgICAweDk4NDU5ODBFLCAweEIyN0RCMjM4LCAweEE2RThBNkQyLCAweDI2NEIyNkI3LCAweDNDRDYzQzU3LCAweDkzMzI5MzhBLAorICAgIDB4ODJEODgyRUUsIDB4NTJGRDUyOTgsIDB4N0IzNzdCRDQsIDB4QkI3MUJCMzcsIDB4NUJGMTVCOTcsIDB4NDdFMTQ3ODMsCisgICAgMHgyNDMwMjQzQywgMHg1MTBGNTFFMiwgMHhCQUY4QkFDNiwgMHg0QTFCNEFGMywgMHhCRjg3QkY0OCwgMHgwREZBMEQ3MCwKKyAgICAweEIwMDZCMEIzLCAweDc1M0Y3NURFLCAweEQyNUVEMkZELCAweDdEQkE3RDIwLCAweDY2QUU2NjMxLCAweDNBNUIzQUEzLAorICAgIDB4NTk4QTU5MUMsIDB4MDAwMDAwMDAsIDB4Q0RCQ0NEOTMsIDB4MUE5RDFBRTAsIDB4QUU2REFFMkMsIDB4N0ZDMTdGQUIsCisgICAgMHgyQkIxMkJDNywgMHhCRTBFQkVCOSwgMHhFMDgwRTBBMCwgMHg4QTVEOEExMCwgMHgzQkQyM0I1MiwgMHg2NEQ1NjRCQSwKKyAgICAweEQ4QTBEODg4LCAweEU3ODRFN0E1LCAweDVGMDc1RkU4LCAweDFCMTQxQjExLCAweDJDQjUyQ0MyLCAweEZDOTBGQ0I0LAorICAgIDB4MzEyQzMxMjcsIDB4ODBBMzgwNjUsIDB4NzNCMjczMkEsIDB4MEM3MzBDODEsIDB4Nzk0Qzc5NUYsIDB4NkI1NDZCNDEsCisgICAgMHg0QjkyNEIwMiwgMHg1Mzc0NTM2OSwgMHg5NDM2OTQ4RiwgMHg4MzUxODMxRiwgMHgyQTM4MkEzNiwgMHhDNEIwQzQ5QywKKyAgICAweDIyQkQyMkM4LCAweEQ1NUFENUY4LCAweEJERkNCREMzLCAweDQ4NjA0ODc4LCAweEZGNjJGRkNFLCAweDRDOTY0QzA3LAorICAgIDB4NDE2QzQxNzcsIDB4Qzc0MkM3RTYsIDB4RUJGN0VCMjQsIDB4MUMxMDFDMTQsIDB4NUQ3QzVENjMsIDB4MzYyODM2MjIsCisgICAgMHg2NzI3NjdDMCwgMHhFOThDRTlBRiwgMHg0NDEzNDRGOSwgMHgxNDk1MTRFQSwgMHhGNTlDRjVCQiwgMHhDRkM3Q0YxOCwKKyAgICAweDNGMjQzRjJELCAweEMwNDZDMEUzLCAweDcyM0I3MkRCLCAweDU0NzA1NDZDLCAweDI5Q0EyOTRDLCAweEYwRTNGMDM1LAorICAgIDB4MDg4NTA4RkUsIDB4QzZDQkM2MTcsIDB4RjMxMUYzNEYsIDB4OENEMDhDRTQsIDB4QTQ5M0E0NTksIDB4Q0FCOENBOTYsCisgICAgMHg2OEE2NjgzQiwgMHhCODgzQjg0RCwgMHgzODIwMzgyOCwgMHhFNUZGRTUyRSwgMHhBRDlGQUQ1NiwgMHgwQjc3MEI4NCwKKyAgICAweEM4QzNDODFELCAweDk5Q0M5OUZGLCAweDU4MDM1OEVELCAweDE5NkYxOTlBLCAweDBFMDgwRTBBLCAweDk1QkY5NTdFLAorICAgIDB4NzA0MDcwNTAsIDB4RjdFN0Y3MzAsIDB4NkUyQjZFQ0YsIDB4MUZFMjFGNkUsIDB4QjU3OUI1M0QsIDB4MDkwQzA5MEYsCisgICAgMHg2MUFBNjEzNCwgMHg1NzgyNTcxNiwgMHg5RjQxOUYwQiwgMHg5RDNBOUQ4MCwgMHgxMUVBMTE2NCwgMHgyNUI5MjVDRCwKKyAgICAweEFGRTRBRkRELCAweDQ1OUE0NTA4LCAweERGQTRERjhELCAweEEzOTdBMzVDLCAweEVBN0VFQUQ1LCAweDM1REEzNTU4LAorICAgIDB4RUQ3QUVERDAsIDB4NDMxNzQzRkMsIDB4Rjg2NkY4Q0IsIDB4RkI5NEZCQjEsIDB4MzdBMTM3RDMsIDB4RkExREZBNDAsCisgICAgMHhDMjNEQzI2OCwgMHhCNEYwQjRDQywgMHgzMkRFMzI1RCwgMHg5Q0IzOUM3MSwgMHg1NjBCNTZFNywgMHhFMzcyRTNEQSwKKyAgICAweDg3QTc4NzYwLCAweDE1MUMxNTFCLCAweEY5RUZGOTNBLCAweDYzRDE2M0JGLCAweDM0NTMzNEE5LCAweDlBM0U5QTg1LAorICAgIDB4QjE4RkIxNDIsIDB4N0MzMzdDRDEsIDB4ODgyNjg4OUIsIDB4M0Q1RjNEQTYsIDB4QTFFQ0ExRDcsIDB4RTQ3NkU0REYsCisgICAgMHg4MTJBODE5NCwgMHg5MTQ5OTEwMSwgMHgwRjgxMEZGQiwgMHhFRTg4RUVBQSwgMHgxNkVFMTY2MSwgMHhENzIxRDc3MywKKyAgICAweDk3QzQ5N0Y1LCAweEE1MUFBNUE4LCAweEZFRUJGRTNGLCAweDZERDk2REI1LCAweDc4QzU3OEFFLCAweEM1MzlDNTZELAorICAgIDB4MUQ5OTFERTUsIDB4NzZDRDc2QTQsIDB4M0VBRDNFREMsIDB4Q0IzMUNCNjcsIDB4QjY4QkI2NDcsIDB4RUYwMUVGNUIsCisgICAgMHgxMjE4MTIxRSwgMHg2MDIzNjBDNSwgMHg2QURENkFCMCwgMHg0RDFGNERGNiwgMHhDRTRFQ0VFOSwgMHhERTJEREU3QywKKyAgICAweDU1Rjk1NTlELCAweDdFNDg3RTVBLCAweDIxNEYyMUIyLCAweDAzRjIwMzdBLCAweEEwNjVBMDI2LCAweDVFOEU1RTE5LAorICAgIDB4NUE3ODVBNjYsIDB4NjU1QzY1NEIsIDB4NjI1ODYyNEUsIDB4RkQxOUZENDUsIDB4MDY4RDA2RjQsIDB4NDBFNTQwODYsCisgICAgMHhGMjk4RjJCRSwgMHgzMzU3MzNBQywgMHgxNzY3MTc5MCwgMHgwNTdGMDU4RSwgMHhFODA1RTg1RSwgMHg0RjY0NEY3RCwKKyAgICAweDg5QUY4OTZBLCAweDEwNjMxMDk1LCAweDc0QjY3NDJGLCAweDBBRkUwQTc1LCAweDVDRjU1QzkyLCAweDlCQjc5Qjc0LAorICAgIDB4MkQzQzJEMzMsIDB4MzBBNTMwRDYsIDB4MkVDRTJFNDksIDB4NDlFOTQ5ODksIDB4NDY2ODQ2NzIsIDB4Nzc0NDc3NTUsCisgICAgMHhBOEUwQThEOCwgMHg5NjREOTYwNCwgMHgyODQzMjhCRCwgMHhBOTY5QTkyOSwgMHhEOTI5RDk3OSwgMHg4NjJFODY5MSwKKyAgICAweEQxQUNEMTg3LCAweEY0MTVGNDRBLCAweDhENTk4RDE1LCAweEQ2QThENjgyLCAweEI5MEFCOUJDLCAweDQyOUU0MjBELAorICAgIDB4RjY2RUY2QzEsIDB4MkY0NzJGQjgsIDB4RERERkREMDYsIDB4MjMzNDIzMzksIDB4Q0MzNUNDNjIsIDB4RjE2QUYxQzQsCisgICAgMHhDMUNGQzExMiwgMHg4NURDODVFQiwgMHg4RjIyOEY5RSwgMHg3MUM5NzFBMSwgMHg5MEMwOTBGMCwgMHhBQTlCQUE1MywKKyAgICAweDAxODkwMUYxLCAweDhCRDQ4QkUxLCAweDRFRUQ0RThDLCAweDhFQUI4RTZGLCAweEFCMTJBQkEyLCAweDZGQTI2RjNFLAorICAgIDB4RTYwREU2NTQsIDB4REI1MkRCRjIsIDB4OTJCQjkyN0IsIDB4QjcwMkI3QjYsIDB4NjkyRjY5Q0EsIDB4MzlBOTM5RDksCisgICAgMHhEM0Q3RDMwQywgMHhBNzYxQTcyMywgMHhBMjFFQTJBRCwgMHhDM0I0QzM5OSwgMHg2QzUwNkM0NCwgMHgwNzA0MDcwNSwKKyAgICAweDA0RjYwNDdGLCAweDI3QzIyNzQ2LCAweEFDMTZBQ0E3LCAweEQwMjVEMDc2LCAweDUwODY1MDEzLCAweERDNTZEQ0Y3LAorICAgIDB4ODQ1NTg0MUEsIDB4RTEwOUUxNTEsIDB4N0FCRTdBMjUsIDB4MTM5MTEzRUZ9LAorCisgICB7MHhEOTM5QTlEOSwgMHg5MDE3Njc5MCwgMHg3MTlDQjM3MSwgMHhEMkE2RThEMiwgMHgwNTA3MDQwNSwgMHg5ODUyRkQ5OCwKKyAgICAweDY1ODBBMzY1LCAweERGRTQ3NkRGLCAweDA4NDU5QTA4LCAweDAyNEI5MjAyLCAweEEwRTA4MEEwLCAweDY2NUE3ODY2LAorICAgIDB4RERBRkU0REQsIDB4QjA2QUREQjAsIDB4QkY2M0QxQkYsIDB4MzYyQTM4MzYsIDB4NTRFNjBENTQsIDB4NDMyMEM2NDMsCisgICAgMHg2MkNDMzU2MiwgMHhCRUYyOThCRSwgMHgxRTEyMTgxRSwgMHgyNEVCRjcyNCwgMHhEN0ExRUNENywgMHg3NzQxNkM3NywKKyAgICAweEJEMjg0M0JELCAweDMyQkM3NTMyLCAweEQ0N0IzN0Q0LCAweDlCODgyNjlCLCAweDcwMERGQTcwLCAweEY5NDQxM0Y5LAorICAgIDB4QjFGQjk0QjEsIDB4NUE3RTQ4NUEsIDB4N0EwM0YyN0EsIDB4RTQ4Q0QwRTQsIDB4NDdCNjhCNDcsIDB4M0MyNDMwM0MsCisgICAgMHhBNUU3ODRBNSwgMHg0MTZCNTQ0MSwgMHgwNkREREYwNiwgMHhDNTYwMjNDNSwgMHg0NUZEMTk0NSwgMHhBMzNBNUJBMywKKyAgICAweDY4QzIzRDY4LCAweDE1OEQ1OTE1LCAweDIxRUNGMzIxLCAweDMxNjZBRTMxLCAweDNFNkZBMjNFLCAweDE2NTc4MjE2LAorICAgIDB4OTUxMDYzOTUsIDB4NUJFRjAxNUIsIDB4NERCODgzNEQsIDB4OTE4NjJFOTEsIDB4QjU2REQ5QjUsIDB4MUY4MzUxMUYsCisgICAgMHg1M0FBOUI1MywgMHg2MzVEN0M2MywgMHgzQjY4QTYzQiwgMHgzRkZFRUIzRiwgMHhENjMwQTVENiwgMHgyNTdBQkUyNSwKKyAgICAweEE3QUMxNkE3LCAweDBGMDkwQzBGLCAweDM1RjBFMzM1LCAweDIzQTc2MTIzLCAweEYwOTBDMEYwLCAweEFGRTk4Q0FGLAorICAgIDB4ODA5RDNBODAsIDB4OTI1Q0Y1OTIsIDB4ODEwQzczODEsIDB4MjczMTJDMjcsIDB4NzZEMDI1NzYsIDB4RTc1NjBCRTcsCisgICAgMHg3QjkyQkI3QiwgMHhFOUNFNEVFOSwgMHhGMTAxODlGMSwgMHg5RjFFNkI5RiwgMHhBOTM0NTNBOSwgMHhDNEYxNkFDNCwKKyAgICAweDk5QzNCNDk5LCAweDk3NUJGMTk3LCAweDgzNDdFMTgzLCAweDZCMThFNjZCLCAweEM4MjJCREM4LCAweDBFOTg0NTBFLAorICAgIDB4NkUxRkUyNkUsIDB4QzlCM0Y0QzksIDB4MkY3NEI2MkYsIDB4Q0JGODY2Q0IsIDB4RkY5OUNDRkYsIDB4RUExNDk1RUEsCisgICAgMHhFRDU4MDNFRCwgMHhGN0RDNTZGNywgMHhFMThCRDRFMSwgMHgxQjE1MUMxQiwgMHhBREEyMUVBRCwgMHgwQ0QzRDcwQywKKyAgICAweDJCRTJGQjJCLCAweDFEQzhDMzFELCAweDE5NUU4RTE5LCAweEMyMkNCNUMyLCAweDg5NDlFOTg5LCAweDEyQzFDRjEyLAorICAgIDB4N0U5NUJGN0UsIDB4MjA3REJBMjAsIDB4NjQxMUVBNjQsIDB4ODQwQjc3ODQsIDB4NkRDNTM5NkQsIDB4NkE4OUFGNkEsCisgICAgMHhEMTdDMzNEMSwgMHhBMTcxQzlBMSwgMHhDRUZGNjJDRSwgMHgzN0JCNzEzNywgMHhGQjBGODFGQiwgMHgzREI1NzkzRCwKKyAgICAweDUxRTEwOTUxLCAweERDM0VBRERDLCAweDJEM0YyNDJELCAweEE0NzZDREE0LCAweDlENTVGOTlELCAweEVFODJEOEVFLAorICAgIDB4ODY0MEU1ODYsIDB4QUU3OEM1QUUsIDB4Q0QyNUI5Q0QsIDB4MDQ5NjREMDQsIDB4NTU3NzQ0NTUsIDB4MEEwRTA4MEEsCisgICAgMHgxMzUwODYxMywgMHgzMEY3RTczMCwgMHhEMzM3QTFEMywgMHg0MEZBMUQ0MCwgMHgzNDYxQUEzNCwgMHg4QzRFRUQ4QywKKyAgICAweEIzQjAwNkIzLCAweDZDNTQ3MDZDLCAweDJBNzNCMjJBLCAweDUyM0JEMjUyLCAweDBCOUY0MTBCLCAweDhCMDI3QjhCLAorICAgIDB4ODhEOEEwODgsIDB4NEZGMzExNEYsIDB4NjdDQjMxNjcsIDB4NDYyN0MyNDYsIDB4QzA2NzI3QzAsIDB4QjRGQzkwQjQsCisgICAgMHgyODM4MjAyOCwgMHg3RjA0RjY3RiwgMHg3ODQ4NjA3OCwgMHgyRUU1RkYyRSwgMHgwNzRDOTYwNywgMHg0QjY1NUM0QiwKKyAgICAweEM3MkJCMUM3LCAweDZGOEVBQjZGLCAweDBENDI5RTBELCAweEJCRjU5Q0JCLCAweEYyREI1MkYyLCAweEYzNEExQkYzLAorICAgIDB4QTYzRDVGQTYsIDB4NTlBNDkzNTksIDB4QkNCOTBBQkMsIDB4M0FGOUVGM0EsIDB4RUYxMzkxRUYsIDB4RkUwODg1RkUsCisgICAgMHgwMTkxNDkwMSwgMHg2MTE2RUU2MSwgMHg3Q0RFMkQ3QywgMHhCMjIxNEZCMiwgMHg0MkIxOEY0MiwgMHhEQjcyM0JEQiwKKyAgICAweEI4MkY0N0I4LCAweDQ4QkY4NzQ4LCAweDJDQUU2RDJDLCAweEUzQzA0NkUzLCAweDU3M0NENjU3LCAweDg1OUEzRTg1LAorICAgIDB4MjlBOTY5MjksIDB4N0Q0RjY0N0QsIDB4OTQ4MTJBOTQsIDB4NDkyRUNFNDksIDB4MTdDNkNCMTcsIDB4Q0E2OTJGQ0EsCisgICAgMHhDM0JERkNDMywgMHg1Q0EzOTc1QywgMHg1RUU4MDU1RSwgMHhEMEVEN0FEMCwgMHg4N0QxQUM4NywgMHg4RTA1N0Y4RSwKKyAgICAweEJBNjRENUJBLCAweEE4QTUxQUE4LCAweEI3MjY0QkI3LCAweEI5QkUwRUI5LCAweDYwODdBNzYwLCAweEY4RDU1QUY4LAorICAgIDB4MjIzNjI4MjIsIDB4MTExQjE0MTEsIDB4REU3NTNGREUsIDB4NzlEOTI5NzksIDB4QUFFRTg4QUEsIDB4MzMyRDNDMzMsCisgICAgMHg1Rjc5NEM1RiwgMHhCNkI3MDJCNiwgMHg5NkNBQjg5NiwgMHg1ODM1REE1OCwgMHg5Q0M0QjA5QywgMHhGQzQzMTdGQywKKyAgICAweDFBODQ1NTFBLCAweEY2NEQxRkY2LCAweDFDNTk4QTFDLCAweDM4QjI3RDM4LCAweEFDMzM1N0FDLCAweDE4Q0ZDNzE4LAorICAgIDB4RjQwNjhERjQsIDB4Njk1Mzc0NjksIDB4NzQ5QkI3NzQsIDB4RjU5N0M0RjUsIDB4NTZBRDlGNTYsIDB4REFFMzcyREEsCisgICAgMHhENUVBN0VENSwgMHg0QUY0MTU0QSwgMHg5RThGMjI5RSwgMHhBMkFCMTJBMiwgMHg0RTYyNTg0RSwgMHhFODVGMDdFOCwKKyAgICAweEU1MUQ5OUU1LCAweDM5MjMzNDM5LCAweEMxRjY2RUMxLCAweDQ0NkM1MDQ0LCAweDVEMzJERTVELCAweDcyNDY2ODcyLAorICAgIDB4MjZBMDY1MjYsIDB4OTNDREJDOTMsIDB4MDNEQURCMDMsIDB4QzZCQUY4QzYsIDB4RkE5RUM4RkEsIDB4ODJENkE4ODIsCisgICAgMHhDRjZFMkJDRiwgMHg1MDcwNDA1MCwgMHhFQjg1RENFQiwgMHg3NTBBRkU3NSwgMHg4QTkzMzI4QSwgMHg4RERGQTQ4RCwKKyAgICAweDRDMjlDQTRDLCAweDE0MUMxMDE0LCAweDczRDcyMTczLCAweENDQjRGMENDLCAweDA5RDREMzA5LCAweDEwOEE1RDEwLAorICAgIDB4RTI1MTBGRTIsIDB4MDAwMDAwMDAsIDB4OUExOTZGOUEsIDB4RTAxQTlERTAsIDB4OEY5NDM2OEYsIDB4RTZDNzQyRTYsCisgICAgMHhFQ0M5NEFFQywgMHhGREQyNUVGRCwgMHhBQjdGQzFBQiwgMHhEOEE4RTBEOH0KK307CisMCisvKiBUaGUgZXhwX3RvX3BvbHkgYW5kIHBvbHlfdG9fZXhwIHRhYmxlcyBhcmUgdXNlZCB0byBwZXJmb3JtIGVmZmljaWVudAorICogb3BlcmF0aW9ucyBpbiBHRigyXjgpIHJlcHJlc2VudGVkIGFzIEdGKDIpW3hdL3coeCkgd2hlcmUKKyAqIHcoeCk9eF44K3heNit4XjMreF4yKzEuICBXZSBjYXJlIGFib3V0IGRvaW5nIHRoYXQgYmVjYXVzZSBpdCdzIHBhcnQgb2YgdGhlCisgKiBkZWZpbml0aW9uIG9mIHRoZSBSUyBtYXRyaXggaW4gdGhlIGtleSBzY2hlZHVsZS4gIEVsZW1lbnRzIG9mIHRoYXQgZmllbGQKKyAqIGFyZSBwb2x5bm9taWFscyBvZiBkZWdyZWUgbm90IGdyZWF0ZXIgdGhhbiA3IGFuZCBhbGwgY29lZmZpY2llbnRzIDAgb3IgMSwKKyAqIHdoaWNoIGNhbiBiZSByZXByZXNlbnRlZCBuYXR1cmFsbHkgYnkgYnl0ZXMgKGp1c3Qgc3Vic3RpdHV0ZSB4PTIpLiAgSW4gdGhhdAorICogZm9ybSwgR0YoMl44KSBhZGRpdGlvbiBpcyB0aGUgc2FtZSBhcyBiaXR3aXNlIFhPUiwgYnV0IEdGKDJeOCkKKyAqIG11bHRpcGxpY2F0aW9uIGlzIGluZWZmaWNpZW50IHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC4gIFRvIG11bHRpcGx5CisgKiBmYXN0ZXIsIEkgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgeCBpcyBhIGdlbmVyYXRvciBmb3IgdGhlIG5vbnplcm8gZWxlbWVudHMsCisgKiBzbyB0aGF0IGV2ZXJ5IGVsZW1lbnQgcCBvZiBHRigyKVt4XS93KHgpIGlzIGVpdGhlciAwIG9yIGVxdWFsIHRvICh4KV5uIGZvcgorICogc29tZSBuIGluIDAuLjI1NC4gIE5vdGUgdGhhdCB0aGF0IGNhcmV0IGlzIGV4cG9uZW50aWF0aW9uIGluIEdGKDJeOCksCisgKiAqbm90KiBwb2x5bm9taWFsIG5vdGF0aW9uLiAgU28gaWYgSSB3YW50IHRvIGNvbXB1dGUgcHEgd2hlcmUgcCBhbmQgcSBhcmUKKyAqIGluIEdGKDJeOCksIEkgY2FuIGp1c3Qgc2F5OgorICogICAgMS4gaWYgcD0wIG9yIHE9MCB0aGVuIHBxPTAKKyAqICAgIDIuIG90aGVyd2lzZSwgZmluZCBtIGFuZCBuIHN1Y2ggdGhhdCBwPXhebSBhbmQgcT14Xm4KKyAqICAgIDMuIHBxPSh4Xm0pKHhebik9eF4obStuKSwgc28gYWRkIG0gYW5kIG4gYW5kIGZpbmQgcHEKKyAqIFRoZSB0cmFuc2xhdGlvbnMgaW4gc3RlcHMgMiBhbmQgMyBhcmUgbG9va2VkIHVwIGluIHRoZSB0YWJsZXMKKyAqIHBvbHlfdG9fZXhwIChmb3Igc3RlcCAyKSBhbmQgZXhwX3RvX3BvbHkgKGZvciBzdGVwIDMpLiAgVG8gc2VlIHRoaXMKKyAqIGluIGFjdGlvbiwgbG9vayBhdCB0aGUgQ0FMQ19TIG1hY3JvLiAgQXMgYWRkaXRpb25hbCB3cmlua2xlcywgbm90ZSB0aGF0CisgKiBvbmUgb2YgbXkgb3BlcmFuZHMgaXMgYWx3YXlzIGEgY29uc3RhbnQsIHNvIHRoZSBwb2x5X3RvX2V4cCBsb29rdXAgb24gaXQKKyAqIGlzIGRvbmUgaW4gYWR2YW5jZTsgSSBpbmNsdWRlZCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIHRoZSBjb21tZW50cyBzbworICogcmVhZGVycyBjYW4gaGF2ZSBzb21lIGNoYW5jZSBvZiByZWNvZ25pemluZyB0aGF0IHRoaXMgKmlzKiB0aGUgUlMgbWF0cml4CisgKiBmcm9tIHRoZSBUd29maXNoIHBhcGVyLiAgSSd2ZSBvbmx5IGluY2x1ZGVkIHRoZSB0YWJsZSBlbnRyaWVzIEkgYWN0dWFsbHkKKyAqIG5lZWQ7IEkgbmV2ZXIgZG8gYSBsb29rdXAgb24gYSB2YXJpYWJsZSBpbnB1dCBvZiB6ZXJvIGFuZCB0aGUgYmlnZ2VzdAorICogZXhwb25lbnRzIEknbGwgZXZlciBzZWUgYXJlIDI1NCAodmFyaWFibGUpIGFuZCAyMzcgKGNvbnN0YW50KSwgc28gdGhleSdsbAorICogbmV2ZXIgc3VtIHRvIG1vcmUgdGhhbiA0OTEuCUknbSByZXBlYXRpbmcgcGFydCBvZiB0aGUgZXhwX3RvX3BvbHkgdGFibGUKKyAqIHNvIHRoYXQgSSBkb24ndCBoYXZlIHRvIGRvIG1vZC0yNTUgcmVkdWN0aW9uIGluIHRoZSBleHBvbmVudCBhcml0aG1ldGljLgorICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeQorICogYWJvdXQgemVybyB2YWx1ZXMgaW4gdGhlIHZhcmlhYmxlIG9wZXJhbmQsIGFuZCBJIGRvIGl0IHdpdGggYSBzaW1wbGUKKyAqIGNvbmRpdGlvbmFsIGJyYW5jaC4JSSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4ndAorICogc2VlIGEgbm9uLWhvcnJpYmxlIHdheSBvZiBhdm9pZGluZyB0aGVtLCBhbmQgSSBkaWQgbWFuYWdlIHRvIGdyb3VwIHRoZQorICogc3RhdGVtZW50cyBzbyB0aGF0IGVhY2ggaWYgY292ZXJzIGZvdXIgZ3JvdXAgbXVsdGlwbGljYXRpb25zLiAqLworCitzdGF0aWMgY29uc3QgYnl0ZSBwb2x5X3RvX2V4cFsyNTVdID0geworICAgMHgwMCwgMHgwMSwgMHgxNywgMHgwMiwgMHgyRSwgMHgxOCwgMHg1MywgMHgwMywgMHg2QSwgMHgyRiwgMHg5MywgMHgxOSwKKyAgIDB4MzQsIDB4NTQsIDB4NDUsIDB4MDQsIDB4NUMsIDB4NkIsIDB4QjYsIDB4MzAsIDB4QTYsIDB4OTQsIDB4NEIsIDB4MUEsCisgICAweDhDLCAweDM1LCAweDgxLCAweDU1LCAweEFBLCAweDQ2LCAweDBELCAweDA1LCAweDI0LCAweDVELCAweDg3LCAweDZDLAorICAgMHg5QiwgMHhCNywgMHhDMSwgMHgzMSwgMHgyQiwgMHhBNywgMHhBMywgMHg5NSwgMHg5OCwgMHg0QywgMHhDQSwgMHgxQiwKKyAgIDB4RTYsIDB4OEQsIDB4NzMsIDB4MzYsIDB4Q0QsIDB4ODIsIDB4MTIsIDB4NTYsIDB4NjIsIDB4QUIsIDB4RjAsIDB4NDcsCisgICAweDRGLCAweDBFLCAweEJELCAweDA2LCAweEQ0LCAweDI1LCAweEQyLCAweDVFLCAweDI3LCAweDg4LCAweDY2LCAweDZELAorICAgMHhENiwgMHg5QywgMHg3OSwgMHhCOCwgMHgwOCwgMHhDMiwgMHhERiwgMHgzMiwgMHg2OCwgMHgyQywgMHhGRCwgMHhBOCwKKyAgIDB4OEEsIDB4QTQsIDB4NUEsIDB4OTYsIDB4MjksIDB4OTksIDB4MjIsIDB4NEQsIDB4NjAsIDB4Q0IsIDB4RTQsIDB4MUMsCisgICAweDdCLCAweEU3LCAweDNCLCAweDhFLCAweDlFLCAweDc0LCAweEY0LCAweDM3LCAweEQ4LCAweENFLCAweEY5LCAweDgzLAorICAgMHg2RiwgMHgxMywgMHhCMiwgMHg1NywgMHhFMSwgMHg2MywgMHhEQywgMHhBQywgMHhDNCwgMHhGMSwgMHhBRiwgMHg0OCwKKyAgIDB4MEEsIDB4NTAsIDB4NDIsIDB4MEYsIDB4QkEsIDB4QkUsIDB4QzcsIDB4MDcsIDB4REUsIDB4RDUsIDB4NzgsIDB4MjYsCisgICAweDY1LCAweEQzLCAweEQxLCAweDVGLCAweEUzLCAweDI4LCAweDIxLCAweDg5LCAweDU5LCAweDY3LCAweEZDLCAweDZFLAorICAgMHhCMSwgMHhENywgMHhGOCwgMHg5RCwgMHhGMywgMHg3QSwgMHgzQSwgMHhCOSwgMHhDNiwgMHgwOSwgMHg0MSwgMHhDMywKKyAgIDB4QUUsIDB4RTAsIDB4REIsIDB4MzMsIDB4NDQsIDB4NjksIDB4OTIsIDB4MkQsIDB4NTIsIDB4RkUsIDB4MTYsIDB4QTksCisgICAweDBDLCAweDhCLCAweDgwLCAweEE1LCAweDRBLCAweDVCLCAweEI1LCAweDk3LCAweEM5LCAweDJBLCAweEEyLCAweDlBLAorICAgMHhDMCwgMHgyMywgMHg4NiwgMHg0RSwgMHhCQywgMHg2MSwgMHhFRiwgMHhDQywgMHgxMSwgMHhFNSwgMHg3MiwgMHgxRCwKKyAgIDB4M0QsIDB4N0MsIDB4RUIsIDB4RTgsIDB4RTksIDB4M0MsIDB4RUEsIDB4OEYsIDB4N0QsIDB4OUYsIDB4RUMsIDB4NzUsCisgICAweDFFLCAweEY1LCAweDNFLCAweDM4LCAweEY2LCAweEQ5LCAweDNGLCAweENGLCAweDc2LCAweEZBLCAweDFGLCAweDg0LAorICAgMHhBMCwgMHg3MCwgMHhFRCwgMHgxNCwgMHg5MCwgMHhCMywgMHg3RSwgMHg1OCwgMHhGQiwgMHhFMiwgMHgyMCwgMHg2NCwKKyAgIDB4RDAsIDB4REQsIDB4NzcsIDB4QUQsIDB4REEsIDB4QzUsIDB4NDAsIDB4RjIsIDB4MzksIDB4QjAsIDB4RjcsIDB4NDksCisgICAweEI0LCAweDBCLCAweDdGLCAweDUxLCAweDE1LCAweDQzLCAweDkxLCAweDEwLCAweDcxLCAweEJCLCAweEVFLCAweEJGLAorICAgMHg4NSwgMHhDOCwgMHhBMQorfTsKKworc3RhdGljIGNvbnN0IGJ5dGUgZXhwX3RvX3BvbHlbNDkyXSA9IHsKKyAgIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4NEQsIDB4OUEsIDB4NzksIDB4RjIsCisgICAweEE5LCAweDFGLCAweDNFLCAweDdDLCAweEY4LCAweEJELCAweDM3LCAweDZFLCAweERDLCAweEY1LCAweEE3LCAweDAzLAorICAgMHgwNiwgMHgwQywgMHgxOCwgMHgzMCwgMHg2MCwgMHhDMCwgMHhDRCwgMHhENywgMHhFMywgMHg4QiwgMHg1QiwgMHhCNiwKKyAgIDB4MjEsIDB4NDIsIDB4ODQsIDB4NDUsIDB4OEEsIDB4NTksIDB4QjIsIDB4MjksIDB4NTIsIDB4QTQsIDB4MDUsIDB4MEEsCisgICAweDE0LCAweDI4LCAweDUwLCAweEEwLCAweDBELCAweDFBLCAweDM0LCAweDY4LCAweEQwLCAweEVELCAweDk3LCAweDYzLAorICAgMHhDNiwgMHhDMSwgMHhDRiwgMHhEMywgMHhFQiwgMHg5QiwgMHg3QiwgMHhGNiwgMHhBMSwgMHgwRiwgMHgxRSwgMHgzQywKKyAgIDB4NzgsIDB4RjAsIDB4QUQsIDB4MTcsIDB4MkUsIDB4NUMsIDB4QjgsIDB4M0QsIDB4N0EsIDB4RjQsIDB4QTUsIDB4MDcsCisgICAweDBFLCAweDFDLCAweDM4LCAweDcwLCAweEUwLCAweDhELCAweDU3LCAweEFFLCAweDExLCAweDIyLCAweDQ0LCAweDg4LAorICAgMHg1RCwgMHhCQSwgMHgzOSwgMHg3MiwgMHhFNCwgMHg4NSwgMHg0NywgMHg4RSwgMHg1MSwgMHhBMiwgMHgwOSwgMHgxMiwKKyAgIDB4MjQsIDB4NDgsIDB4OTAsIDB4NkQsIDB4REEsIDB4RjksIDB4QkYsIDB4MzMsIDB4NjYsIDB4Q0MsIDB4RDUsIDB4RTcsCisgICAweDgzLCAweDRCLCAweDk2LCAweDYxLCAweEMyLCAweEM5LCAweERGLCAweEYzLCAweEFCLCAweDFCLCAweDM2LCAweDZDLAorICAgMHhEOCwgMHhGRCwgMHhCNywgMHgyMywgMHg0NiwgMHg4QywgMHg1NSwgMHhBQSwgMHgxOSwgMHgzMiwgMHg2NCwgMHhDOCwKKyAgIDB4REQsIDB4RjcsIDB4QTMsIDB4MEIsIDB4MTYsIDB4MkMsIDB4NTgsIDB4QjAsIDB4MkQsIDB4NUEsIDB4QjQsIDB4MjUsCisgICAweDRBLCAweDk0LCAweDY1LCAweENBLCAweEQ5LCAweEZGLCAweEIzLCAweDJCLCAweDU2LCAweEFDLCAweDE1LCAweDJBLAorICAgMHg1NCwgMHhBOCwgMHgxRCwgMHgzQSwgMHg3NCwgMHhFOCwgMHg5RCwgMHg3NywgMHhFRSwgMHg5MSwgMHg2RiwgMHhERSwKKyAgIDB4RjEsIDB4QUYsIDB4MTMsIDB4MjYsIDB4NEMsIDB4OTgsIDB4N0QsIDB4RkEsIDB4QjksIDB4M0YsIDB4N0UsIDB4RkMsCisgICAweEI1LCAweDI3LCAweDRFLCAweDlDLCAweDc1LCAweEVBLCAweDk5LCAweDdGLCAweEZFLCAweEIxLCAweDJGLCAweDVFLAorICAgMHhCQywgMHgzNSwgMHg2QSwgMHhENCwgMHhFNSwgMHg4NywgMHg0MywgMHg4NiwgMHg0MSwgMHg4MiwgMHg0OSwgMHg5MiwKKyAgIDB4NjksIDB4RDIsIDB4RTksIDB4OUYsIDB4NzMsIDB4RTYsIDB4ODEsIDB4NEYsIDB4OUUsIDB4NzEsIDB4RTIsIDB4ODksCisgICAweDVGLCAweEJFLCAweDMxLCAweDYyLCAweEM0LCAweEM1LCAweEM3LCAweEMzLCAweENCLCAweERCLCAweEZCLCAweEJCLAorICAgMHgzQiwgMHg3NiwgMHhFQywgMHg5NSwgMHg2NywgMHhDRSwgMHhEMSwgMHhFRiwgMHg5MywgMHg2QiwgMHhENiwgMHhFMSwKKyAgIDB4OEYsIDB4NTMsIDB4QTYsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4NEQsCisgICAweDlBLCAweDc5LCAweEYyLCAweEE5LCAweDFGLCAweDNFLCAweDdDLCAweEY4LCAweEJELCAweDM3LCAweDZFLCAweERDLAorICAgMHhGNSwgMHhBNywgMHgwMywgMHgwNiwgMHgwQywgMHgxOCwgMHgzMCwgMHg2MCwgMHhDMCwgMHhDRCwgMHhENywgMHhFMywKKyAgIDB4OEIsIDB4NUIsIDB4QjYsIDB4MjEsIDB4NDIsIDB4ODQsIDB4NDUsIDB4OEEsIDB4NTksIDB4QjIsIDB4MjksIDB4NTIsCisgICAweEE0LCAweDA1LCAweDBBLCAweDE0LCAweDI4LCAweDUwLCAweEEwLCAweDBELCAweDFBLCAweDM0LCAweDY4LCAweEQwLAorICAgMHhFRCwgMHg5NywgMHg2MywgMHhDNiwgMHhDMSwgMHhDRiwgMHhEMywgMHhFQiwgMHg5QiwgMHg3QiwgMHhGNiwgMHhBMSwKKyAgIDB4MEYsIDB4MUUsIDB4M0MsIDB4NzgsIDB4RjAsIDB4QUQsIDB4MTcsIDB4MkUsIDB4NUMsIDB4QjgsIDB4M0QsIDB4N0EsCisgICAweEY0LCAweEE1LCAweDA3LCAweDBFLCAweDFDLCAweDM4LCAweDcwLCAweEUwLCAweDhELCAweDU3LCAweEFFLCAweDExLAorICAgMHgyMiwgMHg0NCwgMHg4OCwgMHg1RCwgMHhCQSwgMHgzOSwgMHg3MiwgMHhFNCwgMHg4NSwgMHg0NywgMHg4RSwgMHg1MSwKKyAgIDB4QTIsIDB4MDksIDB4MTIsIDB4MjQsIDB4NDgsIDB4OTAsIDB4NkQsIDB4REEsIDB4RjksIDB4QkYsIDB4MzMsIDB4NjYsCisgICAweENDLCAweEQ1LCAweEU3LCAweDgzLCAweDRCLCAweDk2LCAweDYxLCAweEMyLCAweEM5LCAweERGLCAweEYzLCAweEFCLAorICAgMHgxQiwgMHgzNiwgMHg2QywgMHhEOCwgMHhGRCwgMHhCNywgMHgyMywgMHg0NiwgMHg4QywgMHg1NSwgMHhBQSwgMHgxOSwKKyAgIDB4MzIsIDB4NjQsIDB4QzgsIDB4REQsIDB4RjcsIDB4QTMsIDB4MEIsIDB4MTYsIDB4MkMsIDB4NTgsIDB4QjAsIDB4MkQsCisgICAweDVBLCAweEI0LCAweDI1LCAweDRBLCAweDk0LCAweDY1LCAweENBLCAweEQ5LCAweEZGLCAweEIzLCAweDJCLCAweDU2LAorICAgMHhBQywgMHgxNSwgMHgyQSwgMHg1NCwgMHhBOCwgMHgxRCwgMHgzQSwgMHg3NCwgMHhFOCwgMHg5RCwgMHg3NywgMHhFRSwKKyAgIDB4OTEsIDB4NkYsIDB4REUsIDB4RjEsIDB4QUYsIDB4MTMsIDB4MjYsIDB4NEMsIDB4OTgsIDB4N0QsIDB4RkEsIDB4QjksCisgICAweDNGLCAweDdFLCAweEZDLCAweEI1LCAweDI3LCAweDRFLCAweDlDLCAweDc1LCAweEVBLCAweDk5LCAweDdGLCAweEZFLAorICAgMHhCMSwgMHgyRiwgMHg1RSwgMHhCQywgMHgzNSwgMHg2QSwgMHhENCwgMHhFNSwgMHg4NywgMHg0MywgMHg4NiwgMHg0MSwKKyAgIDB4ODIsIDB4NDksIDB4OTIsIDB4NjksIDB4RDIsIDB4RTksIDB4OUYsIDB4NzMsIDB4RTYsIDB4ODEsIDB4NEYsIDB4OUUsCisgICAweDcxLCAweEUyLCAweDg5LCAweDVGLCAweEJFLCAweDMxLCAweDYyLCAweEM0LCAweEM1LCAweEM3LCAweEMzLCAweENCCit9OworDAorCisvKiBUaGUgdGFibGUgY29uc3RhbnRzIGFyZSBpbmRpY2VzIG9mCisgKiBTLWJveCBlbnRyaWVzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCitzdGF0aWMgYnl0ZSBjYWxjX3NiX3RibFs1MTJdID0geworICAgIDB4QTksIDB4NzUsIDB4NjcsIDB4RjMsIDB4QjMsIDB4QzYsIDB4RTgsIDB4RjQsCisgICAgMHgwNCwgMHhEQiwgMHhGRCwgMHg3QiwgMHhBMywgMHhGQiwgMHg3NiwgMHhDOCwKKyAgICAweDlBLCAweDRBLCAweDkyLCAweEQzLCAweDgwLCAweEU2LCAweDc4LCAweDZCLAorICAgIDB4RTQsIDB4NDUsIDB4REQsIDB4N0QsIDB4RDEsIDB4RTgsIDB4MzgsIDB4NEIsCisgICAgMHgwRCwgMHhENiwgMHhDNiwgMHgzMiwgMHgzNSwgMHhEOCwgMHg5OCwgMHhGRCwKKyAgICAweDE4LCAweDM3LCAweEY3LCAweDcxLCAweEVDLCAweEYxLCAweDZDLCAweEUxLAorICAgIDB4NDMsIDB4MzAsIDB4NzUsIDB4MEYsIDB4MzcsIDB4RjgsIDB4MjYsIDB4MUIsCisgICAgMHhGQSwgMHg4NywgMHgxMywgMHhGQSwgMHg5NCwgMHgwNiwgMHg0OCwgMHgzRiwKKyAgICAweEYyLCAweDVFLCAweEQwLCAweEJBLCAweDhCLCAweEFFLCAweDMwLCAweDVCLAorICAgIDB4ODQsIDB4OEEsIDB4NTQsIDB4MDAsIDB4REYsIDB4QkMsIDB4MjMsIDB4OUQsCisgICAgMHgxOSwgMHg2RCwgMHg1QiwgMHhDMSwgMHgzRCwgMHhCMSwgMHg1OSwgMHgwRSwKKyAgICAweEYzLCAweDgwLCAweEFFLCAweDVELCAweEEyLCAweEQyLCAweDgyLCAweEQ1LAorICAgIDB4NjMsIDB4QTAsIDB4MDEsIDB4ODQsIDB4ODMsIDB4MDcsIDB4MkUsIDB4MTQsCisgICAgMHhEOSwgMHhCNSwgMHg1MSwgMHg5MCwgMHg5QiwgMHgyQywgMHg3QywgMHhBMywKKyAgICAweEE2LCAweEIyLCAweEVCLCAweDczLCAweEE1LCAweDRDLCAweEJFLCAweDU0LAorICAgIDB4MTYsIDB4OTIsIDB4MEMsIDB4NzQsIDB4RTMsIDB4MzYsIDB4NjEsIDB4NTEsCisgICAgMHhDMCwgMHgzOCwgMHg4QywgMHhCMCwgMHgzQSwgMHhCRCwgMHhGNSwgMHg1QSwKKyAgICAweDczLCAweEZDLCAweDJDLCAweDYwLCAweDI1LCAweDYyLCAweDBCLCAweDk2LAorICAgIDB4QkIsIDB4NkMsIDB4NEUsIDB4NDIsIDB4ODksIDB4RjcsIDB4NkIsIDB4MTAsCisgICAgMHg1MywgMHg3QywgMHg2QSwgMHgyOCwgMHhCNCwgMHgyNywgMHhGMSwgMHg4QywKKyAgICAweEUxLCAweDEzLCAweEU2LCAweDk1LCAweEJELCAweDlDLCAweDQ1LCAweEM3LAorICAgIDB4RTIsIDB4MjQsIDB4RjQsIDB4NDYsIDB4QjYsIDB4M0IsIDB4NjYsIDB4NzAsCisgICAgMHhDQywgMHhDQSwgMHg5NSwgMHhFMywgMHgwMywgMHg4NSwgMHg1NiwgMHhDQiwKKyAgICAweEQ0LCAweDExLCAweDFDLCAweEQwLCAweDFFLCAweDkzLCAweEQ3LCAweEI4LAorICAgIDB4RkIsIDB4QTYsIDB4QzMsIDB4ODMsIDB4OEUsIDB4MjAsIDB4QjUsIDB4RkYsCisgICAgMHhFOSwgMHg5RiwgMHhDRiwgMHg3NywgMHhCRiwgMHhDMywgMHhCQSwgMHhDQywKKyAgICAweEVBLCAweDAzLCAweDc3LCAweDZGLCAweDM5LCAweDA4LCAweEFGLCAweEJGLAorICAgIDB4MzMsIDB4NDAsIDB4QzksIDB4RTcsIDB4NjIsIDB4MkIsIDB4NzEsIDB4RTIsCisgICAgMHg4MSwgMHg3OSwgMHg3OSwgMHgwQywgMHgwOSwgMHhBQSwgMHhBRCwgMHg4MiwKKyAgICAweDI0LCAweDQxLCAweENELCAweDNBLCAweEY5LCAweEVBLCAweEQ4LCAweEI5LAorICAgIDB4RTUsIDB4RTQsIDB4QzUsIDB4OUEsIDB4QjksIDB4QTQsIDB4NEQsIDB4OTcsCisgICAgMHg0NCwgMHg3RSwgMHgwOCwgMHhEQSwgMHg4NiwgMHg3QSwgMHhFNywgMHgxNywKKyAgICAweEExLCAweDY2LCAweDFELCAweDk0LCAweEFBLCAweEExLCAweEVELCAweDFELAorICAgIDB4MDYsIDB4M0QsIDB4NzAsIDB4RjAsIDB4QjIsIDB4REUsIDB4RDIsIDB4QjMsCisgICAgMHg0MSwgMHgwQiwgMHg3QiwgMHg3MiwgMHhBMCwgMHhBNywgMHgxMSwgMHgxQywKKyAgICAweDMxLCAweEVGLCAweEMyLCAweEQxLCAweDI3LCAweDUzLCAweDkwLCAweDNFLAorICAgIDB4MjAsIDB4OEYsIDB4RjYsIDB4MzMsIDB4NjAsIDB4MjYsIDB4RkYsIDB4NUYsCisgICAgMHg5NiwgMHhFQywgMHg1QywgMHg3NiwgMHhCMSwgMHgyQSwgMHhBQiwgMHg0OSwKKyAgICAweDlFLCAweDgxLCAweDlDLCAweDg4LCAweDUyLCAweEVFLCAweDFCLCAweDIxLAorICAgIDB4NUYsIDB4QzQsIDB4OTMsIDB4MUEsIDB4MEEsIDB4RUIsIDB4RUYsIDB4RDksCisgICAgMHg5MSwgMHhDNSwgMHg4NSwgMHgzOSwgMHg0OSwgMHg5OSwgMHhFRSwgMHhDRCwKKyAgICAweDJELCAweEFELCAweDRGLCAweDMxLCAweDhGLCAweDhCLCAweDNCLCAweDAxLAorICAgIDB4NDcsIDB4MTgsIDB4ODcsIDB4MjMsIDB4NkQsIDB4REQsIDB4NDYsIDB4MUYsCisgICAgMHhENiwgMHg0RSwgMHgzRSwgMHgyRCwgMHg2OSwgMHhGOSwgMHg2NCwgMHg0OCwKKyAgICAweDJBLCAweDRGLCAweENFLCAweEYyLCAweENCLCAweDY1LCAweDJGLCAweDhFLAorICAgIDB4RkMsIDB4NzgsIDB4OTcsIDB4NUMsIDB4MDUsIDB4NTgsIDB4N0EsIDB4MTksCisgICAgMHhBQywgMHg4RCwgMHg3RiwgMHhFNSwgMHhENSwgMHg5OCwgMHgxQSwgMHg1NywKKyAgICAweDRCLCAweDY3LCAweDBFLCAweDdGLCAweEE3LCAweDA1LCAweDVBLCAweDY0LAorICAgIDB4MjgsIDB4QUYsIDB4MTQsIDB4NjMsIDB4M0YsIDB4QjYsIDB4MjksIDB4RkUsCisgICAgMHg4OCwgMHhGNSwgMHgzQywgMHhCNywgMHg0QywgMHgzQywgMHgwMiwgMHhBNSwKKyAgICAweEI4LCAweENFLCAweERBLCAweEU5LCAweEIwLCAweDY4LCAweDE3LCAweDQ0LAorICAgIDB4NTUsIDB4RTAsIDB4MUYsIDB4NEQsIDB4OEEsIDB4NDMsIDB4N0QsIDB4NjksCisgICAgMHg1NywgMHgyOSwgMHhDNywgMHgyRSwgMHg4RCwgMHhBQywgMHg3NCwgMHgxNSwKKyAgICAweEI3LCAweDU5LCAweEM0LCAweEE4LCAweDlGLCAweDBBLCAweDcyLCAweDlFLAorICAgIDB4N0UsIDB4NkUsIDB4MTUsIDB4NDcsIDB4MjIsIDB4REYsIDB4MTIsIDB4MzQsCisgICAgMHg1OCwgMHgzNSwgMHgwNywgMHg2QSwgMHg5OSwgMHhDRiwgMHgzNCwgMHhEQywKKyAgICAweDZFLCAweDIyLCAweDUwLCAweEM5LCAweERFLCAweEMwLCAweDY4LCAweDlCLAorICAgIDB4NjUsIDB4ODksIDB4QkMsIDB4RDQsIDB4REIsIDB4RUQsIDB4RjgsIDB4QUIsCisgICAgMHhDOCwgMHgxMiwgMHhBOCwgMHhBMiwgMHgyQiwgMHgwRCwgMHg0MCwgMHg1MiwKKyAgICAweERDLCAweEJCLCAweEZFLCAweDAyLCAweDMyLCAweDJGLCAweEE0LCAweEE5LAorICAgIDB4Q0EsIDB4RDcsIDB4MTAsIDB4NjEsIDB4MjEsIDB4MUUsIDB4RjAsIDB4QjQsCisgICAgMHhEMywgMHg1MCwgMHg1RCwgMHgwNCwgMHgwRiwgMHhGNiwgMHgwMCwgMHhDMiwKKyAgICAweDZGLCAweDE2LCAweDlELCAweDI1LCAweDM2LCAweDg2LCAweDQyLCAweDU2LAorICAgIDB4NEEsIDB4NTUsIDB4NUUsIDB4MDksIDB4QzEsIDB4QkUsIDB4RTAsIDB4OTEKK307CisvKiBNYWNybyB0byBwZXJmb3JtIG9uZSBjb2x1bW4gb2YgdGhlIFJTIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4gIFRoZQorICogcGFyYW1ldGVycyBhLCBiLCBjLCBhbmQgZCBhcmUgdGhlIGZvdXIgYnl0ZXMgb2Ygb3V0cHV0OyBpIGlzIHRoZSBpbmRleAorICogb2YgdGhlIGtleSBieXRlcywgYW5kIHcsIHgsIHksIGFuZCB6LCBhcmUgdGhlIGNvbHVtbiBvZiBjb25zdGFudHMgZnJvbQorICogdGhlIFJTIG1hdHJpeCwgcHJlcHJvY2Vzc2VkIHRocm91Z2ggdGhlIHBvbHlfdG9fZXhwIHRhYmxlLiAqLworCisjZGVmaW5lIENBTENfUyhhLCBiLCBjLCBkLCBpLCB3LCB4LCB5LCB6KSBcCisgICBpZiAoa2V5W2ldKSB7IFwKKyAgICAgIHRtcCA9IHBvbHlfdG9fZXhwW2tleVtpXSAtIDFdOyBcCisgICAgICAoYSkgXj0gZXhwX3RvX3BvbHlbdG1wICsgKHcpXTsgXAorICAgICAgKGIpIF49IGV4cF90b19wb2x5W3RtcCArICh4KV07IFwKKyAgICAgIChjKSBePSBleHBfdG9fcG9seVt0bXAgKyAoeSldOyBcCisgICAgICAoZCkgXj0gZXhwX3RvX3BvbHlbdG1wICsgKHopXTsgXAorICAgfQorCisvKiBNYWNyb3MgdG8gY2FsY3VsYXRlIHRoZSBrZXktZGVwZW5kZW50IFMtYm94ZXMgZm9yIGEgMTI4LWJpdCBrZXkgdXNpbmcKKyAqIHRoZSBTIHZlY3RvciBmcm9tIENBTENfUy4gIENBTENfU0JfMiBjb21wdXRlcyBhIHNpbmdsZSBlbnRyeSBpbiBhbGwKKyAqIGZvdXIgUy1ib3hlcywgd2hlcmUgaSBpcyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHRvIGNvbXB1dGUsIGFuZCBhIGFuZCBiCisgKiBhcmUgdGhlIGluZGV4IG51bWJlcnMgcHJlcHJvY2Vzc2VkIHRocm91Z2ggdGhlIHEwIGFuZCBxMSB0YWJsZXMKKyAqIHJlc3BlY3RpdmVseS4gIENBTENfU0IgaXMgc2ltcGx5IGEgY29udmVuaWVuY2UgdG8gbWFrZSB0aGUgY29kZSBzaG9ydGVyOworICogaXQgY2FsbHMgQ0FMQ19TQl8yIGZvdXIgdGltZXMgd2l0aCBjb25zZWN1dGl2ZSBpbmRpY2VzIGZyb20gaSB0byBpKzMsCisgKiB1c2luZyB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgdHdvIGJ5IHR3by4gKi8KKworI2RlZmluZSBDQUxDX1NCXzIoaSwgYSwgYikgXAorICAgY3R4LT5zWzBdW2ldID0gbWRzWzBdW3EwWyhhKSBeIHNhXSBeIHNlXTsgXAorICAgY3R4LT5zWzFdW2ldID0gbWRzWzFdW3EwWyhiKSBeIHNiXSBeIHNmXTsgXAorICAgY3R4LT5zWzJdW2ldID0gbWRzWzJdW3ExWyhhKSBeIHNjXSBeIHNnXTsgXAorICAgY3R4LT5zWzNdW2ldID0gbWRzWzNdW3ExWyhiKSBeIHNkXSBeIHNoXQorCisjZGVmaW5lIENBTENfU0IoaSwgYSwgYiwgYywgZCwgZSwgZiwgZywgaCkgXAorICAgQ0FMQ19TQl8yIChpLCBhLCBiKTsgQ0FMQ19TQl8yICgoaSkrMSwgYywgZCk7IFwKKyAgIENBTENfU0JfMiAoKGkpKzIsIGUsIGYpOyBDQUxDX1NCXzIgKChpKSszLCBnLCBoKQorCisvKiBNYWNyb3MgZXhhY3RseSBsaWtlIENBTENfU0IgYW5kIENBTENfU0JfMiwgYnV0IGZvciAyNTYtYml0IGtleXMuICovCisKKyNkZWZpbmUgQ0FMQ19TQjI1Nl8yKGksIGEsIGIpIFwKKyAgIGN0eC0+c1swXVtpXSA9IG1kc1swXVtxMFtxMFtxMVsoYikgXiBzYV0gXiBzZV0gXiBzaV0gXiBzbV07IFwKKyAgIGN0eC0+c1sxXVtpXSA9IG1kc1sxXVtxMFtxMVtxMVsoYSkgXiBzYl0gXiBzZl0gXiBzal0gXiBzbl07IFwKKyAgIGN0eC0+c1syXVtpXSA9IG1kc1syXVtxMVtxMFtxMFsoYSkgXiBzY10gXiBzZ10gXiBza10gXiBzb107IFwKKyAgIGN0eC0+c1szXVtpXSA9IG1kc1szXVtxMVtxMVtxMFsoYikgXiBzZF0gXiBzaF0gXiBzbF0gXiBzcF07CisKKyNkZWZpbmUgQ0FMQ19TQjI1NihpLCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSBcCisgICBDQUxDX1NCMjU2XzIgKGksIGEsIGIpOyBDQUxDX1NCMjU2XzIgKChpKSsxLCBjLCBkKTsgXAorICAgQ0FMQ19TQjI1Nl8yICgoaSkrMiwgZSwgZik7IENBTENfU0IyNTZfMiAoKGkpKzMsIGcsIGgpCisKKy8qIE1hY3JvcyB0byBjYWxjdWxhdGUgdGhlIHdoaXRlbmluZyBhbmQgcm91bmQgc3Via2V5cy4gIENBTENfS18yIGNvbXB1dGVzIHRoZQorICogbGFzdCB0d28gc3RhZ2VzIG9mIHRoZSBoKCkgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gaW5kZXggKGVpdGhlciAyaSBvciAyaSsxKS4KKyAqIGEsIGIsIGMsIGFuZCBkIGFyZSB0aGUgZm91ciBieXRlcyBnb2luZyBpbnRvIHRoZSBsYXN0IHR3byBzdGFnZXMuICBGb3IKKyAqIDEyOC1iaXQga2V5cywgdGhpcyBpcyB0aGUgZW50aXJlIGgoKSBmdW5jdGlvbiBhbmQgYSBhbmQgYyBhcmUgdGhlIGluZGV4CisgKiBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEgcmVzcGVjdGl2ZWx5OyBmb3IgbG9uZ2VyIGtleXMgdGhleSBhcmUgdGhlCisgKiBvdXRwdXQgb2YgcHJldmlvdXMgc3RhZ2VzLiAgaiBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGtleSBieXRlIHRvIHVzZS4KKyAqIENBTENfSyBjb21wdXRlcyBhIHBhaXIgb2Ygc3Via2V5cyBmb3IgMTI4LWJpdCBUd29maXNoLCBieSBjYWxsaW5nIENBTENfS18yCisgKiB0d2ljZSwgZG9pbmcgdGhlIFBzZXVkby1IYWRhbWFyZCBUcmFuc2Zvcm0sIGFuZCBkb2luZyB0aGUgbmVjZXNzYXJ5CisgKiByb3RhdGlvbnMuICBJdHMgcGFyYW1ldGVycyBhcmU6IGEsIHRoZSBhcnJheSB0byB3cml0ZSB0aGUgcmVzdWx0cyBpbnRvLAorICogaiwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvdXRwdXQgZW50cnksIGsgYW5kIGwsIHRoZSBwcmVwcm9jZXNzZWQgaW5kaWNlcworICogZm9yIGluZGV4IDJpLCBhbmQgbSBhbmQgbiwgdGhlIHByZXByb2Nlc3NlZCBpbmRpY2VzIGZvciBpbmRleCAyaSsxLgorICogQ0FMQ19LMjU2XzIgZXhwYW5kcyBDQUxDX0tfMiB0byBoYW5kbGUgMjU2LWJpdCBrZXlzLCBieSBkb2luZyB0d28KKyAqIGFkZGl0aW9uYWwgbG9va3VwLWFuZC1YT1Igc3RhZ2VzLiAgVGhlIHBhcmFtZXRlcnMgYSBhbmQgYiBhcmUgdGhlIGluZGV4CisgKiBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEgcmVzcGVjdGl2ZWx5OyBqIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKyAqIGtleSBieXRlIHRvIHVzZS4gIENBTENfSzI1NiBpcyBpZGVudGljYWwgdG8gQ0FMQ19LIGJ1dCBmb3IgdXNpbmcgdGhlCisgKiBDQUxDX0syNTZfMiBtYWNybyBpbnN0ZWFkIG9mIENBTENfS18yLiAqLworCisjZGVmaW5lIENBTENfS18yKGEsIGIsIGMsIGQsIGopIFwKKyAgICAgbWRzWzBdW3EwW2EgXiBrZXlbKGopICsgOF1dIF4ga2V5W2pdXSBcCisgICBeIG1kc1sxXVtxMFtiIF4ga2V5WyhqKSArIDldXSBeIGtleVsoaikgKyAxXV0gXAorICAgXiBtZHNbMl1bcTFbYyBeIGtleVsoaikgKyAxMF1dIF4ga2V5WyhqKSArIDJdXSBcCisgICBeIG1kc1szXVtxMVtkIF4ga2V5WyhqKSArIDExXV0gXiBrZXlbKGopICsgM11dCisKKyNkZWZpbmUgQ0FMQ19LKGEsIGosIGssIGwsIG0sIG4pIFwKKyAgIHggPSBDQUxDX0tfMiAoaywgbCwgaywgbCwgMCk7IFwKKyAgIHkgPSBDQUxDX0tfMiAobSwgbiwgbSwgbiwgNCk7IFwKKyAgIHkgPSAoeSA8PCA4KSArICh5ID4+IDI0KTsgXAorICAgeCArPSB5OyB5ICs9IHg7IGN0eC0+YVtqXSA9IHg7IFwKKyAgIGN0eC0+YVsoaikgKyAxXSA9ICh5IDw8IDkpICsgKHkgPj4gMjMpCisKKyNkZWZpbmUgQ0FMQ19LMjU2XzIoYSwgYiwgaikgXAorICAgQ0FMQ19LXzIgKHEwW3ExW2IgXiBrZXlbKGopICsgMjRdXSBeIGtleVsoaikgKyAxNl1dLCBcCisJICAgICBxMVtxMVthIF4ga2V5WyhqKSArIDI1XV0gXiBrZXlbKGopICsgMTddXSwgXAorCSAgICAgcTBbcTBbYSBeIGtleVsoaikgKyAyNl1dIF4ga2V5WyhqKSArIDE4XV0sIFwKKwkgICAgIHExW3EwW2IgXiBrZXlbKGopICsgMjddXSBeIGtleVsoaikgKyAxOV1dLCBqKQorCisjZGVmaW5lIENBTENfSzI1NihhLCBqLCBrLCBsLCBtLCBuKSBcCisgICB4ID0gQ0FMQ19LMjU2XzIgKGssIGwsIDApOyBcCisgICB5ID0gQ0FMQ19LMjU2XzIgKG0sIG4sIDQpOyBcCisgICB5ID0gKHkgPDwgOCkgKyAoeSA+PiAyNCk7IFwKKyAgIHggKz0geTsgeSArPSB4OyBjdHgtPmFbal0gPSB4OyBcCisgICBjdHgtPmFbKGopICsgMV0gPSAoeSA8PCA5KSArICh5ID4+IDIzKQorDAorCisKKy8qIFBlcmZvcm0gdGhlIGtleSBzZXR1cC4gIE5vdGUgdGhhdCB0aGlzIHdvcmtzIG9ubHkgd2l0aCAxMjgtIGFuZCAyNTYtYml0CisgKiBrZXlzLCBkZXNwaXRlIHRoZSBBUEkgdGhhdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHN1cHBvcnQgb3RoZXIgc2l6ZXMuICovCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX3R3b2Zpc2hfc2V0a2V5IChUV09GSVNIX2NvbnRleHQgKmN0eCwgY29uc3QgYnl0ZSAqa2V5LCBjb25zdCB1bnNpZ25lZCBrZXlsZW4pCit7CisgIGludCBpLCBqLCBrOworCisgIC8qIFRlbXBvcmFyaWVzIGZvciBDQUxDX0suICovCisgIHUzMiB4LCB5OworCisgIC8qIFRoZSBTIHZlY3RvciB1c2VkIHRvIGtleSB0aGUgUy1ib3hlcywgc3BsaXQgdXAgaW50byBpbmRpdmlkdWFsIGJ5dGVzLgorICAgKiAxMjgtYml0IGtleXMgdXNlIG9ubHkgc2EgdGhyb3VnaCBzaDsgMjU2LWJpdCB1c2UgYWxsIG9mIHRoZW0uICovCisgIGJ5dGUgc2EgPSAwLCBzYiA9IDAsIHNjID0gMCwgc2QgPSAwLCBzZSA9IDAsIHNmID0gMCwgc2cgPSAwLCBzaCA9IDA7CisgIGJ5dGUgc2kgPSAwLCBzaiA9IDAsIHNrID0gMCwgc2wgPSAwLCBzbSA9IDAsIHNuID0gMCwgc28gPSAwLCBzcCA9IDA7CisKKyAgLyogVGVtcG9yYXJ5IGZvciBDQUxDX1MuICovCisgIGJ5dGUgdG1wOworCisgIC8qIEZsYWdzIGZvciBzZWxmLXRlc3QuICovCisgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworICBzdGF0aWMgY29uc3QgY2hhciAqc2VsZnRlc3RfZmFpbGVkPTA7CisKKyAgLyogQ2hlY2sga2V5IGxlbmd0aC4gKi8KKyAgaWYoICggKCBrZXlsZW4gLSAxNiApIHwgMTYgKSAhPSAxNiApCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0tFWUxFTjsKKworICAvKiBEbyBzZWxmLXRlc3QgaWYgbmVjZXNzYXJ5LiAqLworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIHNlbGZ0ZXN0X2ZhaWxlZCA9IHNlbGZ0ZXN0ICgpOworICAgICAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisgICAgICAgIGxvZ19lcnJvcigiJXNcbiIsIHNlbGZ0ZXN0X2ZhaWxlZCApOworICAgIH0KKyAgaWYoIHNlbGZ0ZXN0X2ZhaWxlZCApCisgICAgcmV0dXJuIEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworCisgIC8qIENvbXB1dGUgdGhlIGZpcnN0IHR3byB3b3JkcyBvZiB0aGUgUyB2ZWN0b3IuICBUaGUgbWFnaWMgbnVtYmVycyBhcmUKKyAgICogdGhlIGVudHJpZXMgb2YgdGhlIFJTIG1hdHJpeCwgcHJlcHJvY2Vzc2VkIHRocm91Z2ggcG9seV90b19leHAuCVRoZQorICAgKiBudW1iZXJzIGluIHRoZSBjb21tZW50cyBhcmUgdGhlIG9yaWdpbmFsIChwb2x5bm9taWFsIGZvcm0pIG1hdHJpeAorICAgKiBlbnRyaWVzLiAqLworICBDQUxDX1MgKHNhLCBzYiwgc2MsIHNkLCAwLCAweDAwLCAweDJELCAweDAxLCAweDJEKTsgLyogMDEgQTQgMDIgQTQgKi8KKyAgQ0FMQ19TIChzYSwgc2IsIHNjLCBzZCwgMSwgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCisgIENBTENfUyAoc2EsIHNiLCBzYywgc2QsIDIsIDB4OEEsIDB4RDUsIDB4QkYsIDB4RDEpOyAvKiA1NSA4MiBGQyA4NyAqLworICBDQUxDX1MgKHNhLCBzYiwgc2MsIHNkLCAzLCAweEQxLCAweDdGLCAweDNELCAweDk5KTsgLyogODcgRjMgQzEgNUEgKi8KKyAgQ0FMQ19TIChzYSwgc2IsIHNjLCBzZCwgNCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCisgIENBTENfUyAoc2EsIHNiLCBzYywgc2QsIDUsIDB4OTYsIDB4M0MsIDB4NUIsIDB4RUQpOyAvKiA1OCBDNiBBRSBEQiAqLworICBDQUxDX1MgKHNhLCBzYiwgc2MsIHNkLCA2LCAweEVELCAweDM3LCAweDRGLCAweEUwKTsgLyogREIgNjggM0QgOUUgKi8KKyAgQ0FMQ19TIChzYSwgc2IsIHNjLCBzZCwgNywgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCisgIENBTENfUyAoc2UsIHNmLCBzZywgc2gsIDgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLworICBDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCA5LCAweDJELCAweEE0LCAweDQ0LCAweDhBKTsgLyogQTQgNTYgQTEgNTUgKi8KKyAgQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTAsIDB4OEEsIDB4RDUsIDB4QkYsIDB4RDEpOyAvKiA1NSA4MiBGQyA4NyAqLworICBDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxMSwgMHhEMSwgMHg3RiwgMHgzRCwgMHg5OSk7IC8qIDg3IEYzIEMxIDVBICovCisgIENBTENfUyAoc2UsIHNmLCBzZywgc2gsIDEyLCAweDk5LCAweDQ2LCAweDY2LCAweDk2KTsgLyogNUEgMUUgNDcgNTggKi8KKyAgQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTMsIDB4OTYsIDB4M0MsIDB4NUIsIDB4RUQpOyAvKiA1OCBDNiBBRSBEQiAqLworICBDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxNCwgMHhFRCwgMHgzNywgMHg0RiwgMHhFMCk7IC8qIERCIDY4IDNEIDlFICovCisgIENBTENfUyAoc2UsIHNmLCBzZywgc2gsIDE1LCAweEUwLCAweEQwLCAweDhDLCAweDE3KTsgLyogOUUgRTUgMTkgMDMgKi8KKworICBpZiAoa2V5bGVuID09IDMyKSAgLyogMjU2LWJpdCBrZXkgKi8KKyAgICB7CisgICAgICAvKiBDYWxjdWxhdGUgdGhlIHJlbWFpbmluZyB0d28gd29yZHMgb2YgdGhlIFMgdmVjdG9yICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxNiwgMHgwMCwgMHgyRCwgMHgwMSwgMHgyRCk7IC8qIDAxIEE0IDAyIEE0ICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxNywgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxOCwgMHg4QSwgMHhENSwgMHhCRiwgMHhEMSk7IC8qIDU1IDgyIEZDIDg3ICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxOSwgMHhEMSwgMHg3RiwgMHgzRCwgMHg5OSk7IC8qIDg3IEYzIEMxIDVBICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMSwgMHg5NiwgMHgzQywgMHg1QiwgMHhFRCk7IC8qIDU4IEM2IEFFIERCICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMiwgMHhFRCwgMHgzNywgMHg0RiwgMHhFMCk7IC8qIERCIDY4IDNEIDlFICovCisgICAgICBDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMywgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNCwgMHgwMCwgMHgyRCwgMHgwMSwgMHgyRCk7IC8qIDAxIEE0IDAyIEE0ICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNSwgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNiwgMHg4QSwgMHhENSwgMHhCRiwgMHhEMSk7IC8qIDU1IDgyIEZDIDg3ICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNywgMHhEMSwgMHg3RiwgMHgzRCwgMHg5OSk7IC8qIDg3IEYzIEMxIDVBICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyOCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyOSwgMHg5NiwgMHgzQywgMHg1QiwgMHhFRCk7IC8qIDU4IEM2IEFFIERCICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAzMCwgMHhFRCwgMHgzNywgMHg0RiwgMHhFMCk7IC8qIERCIDY4IDNEIDlFICovCisgICAgICBDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAzMSwgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCisKKyAgICAgIC8qIENvbXB1dGUgdGhlIFMtYm94ZXMuICovCisgICAgICBmb3IoaT1qPTAsaz0xOyBpIDwgMjU2OyBpKyssIGogKz0gMiwgayArPSAyICkKKyAgICAgICAgeworICAgICAgICAgIENBTENfU0IyNTZfMiggaSwgY2FsY19zYl90Ymxbal0sIGNhbGNfc2JfdGJsW2tdICk7CisJfQorCisgICAgICAvKiBDYWxjdWxhdGUgd2hpdGVuaW5nIGFuZCByb3VuZCBzdWJrZXlzLiAgVGhlIGNvbnN0YW50cyBhcmUKKyAgICAgICAqIGluZGljZXMgb2Ygc3Via2V5cywgcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTAgYW5kIHExLiAqLworICAgICAgQ0FMQ19LMjU2ICh3LCAwLCAweEE5LCAweDc1LCAweDY3LCAweEYzKTsKKyAgICAgIENBTENfSzI1NiAodywgMiwgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCk7CisgICAgICBDQUxDX0syNTYgKHcsIDQsIDB4MDQsIDB4REIsIDB4RkQsIDB4N0IpOworICAgICAgQ0FMQ19LMjU2ICh3LCA2LCAweEEzLCAweEZCLCAweDc2LCAweEM4KTsKKyAgICAgIENBTENfSzI1NiAoaywgMCwgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMyk7CisgICAgICBDQUxDX0syNTYgKGssIDIsIDB4ODAsIDB4RTYsIDB4NzgsIDB4NkIpOworICAgICAgQ0FMQ19LMjU2IChrLCA0LCAweEU0LCAweDQ1LCAweERELCAweDdEKTsKKyAgICAgIENBTENfSzI1NiAoaywgNiwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0Qik7CisgICAgICBDQUxDX0syNTYgKGssIDgsIDB4MEQsIDB4RDYsIDB4QzYsIDB4MzIpOworICAgICAgQ0FMQ19LMjU2IChrLCAxMCwgMHgzNSwgMHhEOCwgMHg5OCwgMHhGRCk7CisgICAgICBDQUxDX0syNTYgKGssIDEyLCAweDE4LCAweDM3LCAweEY3LCAweDcxKTsKKyAgICAgIENBTENfSzI1NiAoaywgMTQsIDB4RUMsIDB4RjEsIDB4NkMsIDB4RTEpOworICAgICAgQ0FMQ19LMjU2IChrLCAxNiwgMHg0MywgMHgzMCwgMHg3NSwgMHgwRik7CisgICAgICBDQUxDX0syNTYgKGssIDE4LCAweDM3LCAweEY4LCAweDI2LCAweDFCKTsKKyAgICAgIENBTENfSzI1NiAoaywgMjAsIDB4RkEsIDB4ODcsIDB4MTMsIDB4RkEpOworICAgICAgQ0FMQ19LMjU2IChrLCAyMiwgMHg5NCwgMHgwNiwgMHg0OCwgMHgzRik7CisgICAgICBDQUxDX0syNTYgKGssIDI0LCAweEYyLCAweDVFLCAweEQwLCAweEJBKTsKKyAgICAgIENBTENfSzI1NiAoaywgMjYsIDB4OEIsIDB4QUUsIDB4MzAsIDB4NUIpOworICAgICAgQ0FMQ19LMjU2IChrLCAyOCwgMHg4NCwgMHg4QSwgMHg1NCwgMHgwMCk7CisgICAgICBDQUxDX0syNTYgKGssIDMwLCAweERGLCAweEJDLCAweDIzLCAweDlEKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBDb21wdXRlIHRoZSBTLWJveGVzLiAqLworICAgICAgZm9yKGk9aj0wLGs9MTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApCisgICAgICAgIHsKKyAgICAgICAgICBDQUxDX1NCXzIoIGksIGNhbGNfc2JfdGJsW2pdLCBjYWxjX3NiX3RibFtrXSApOworICAgICAgICB9CisKKyAgICAgIC8qIENhbGN1bGF0ZSB3aGl0ZW5pbmcgYW5kIHJvdW5kIHN1YmtleXMuICBUaGUgY29uc3RhbnRzIGFyZQorICAgICAgICogaW5kaWNlcyBvZiBzdWJrZXlzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCisgICAgICBDQUxDX0sgKHcsIDAsIDB4QTksIDB4NzUsIDB4NjcsIDB4RjMpOworICAgICAgQ0FMQ19LICh3LCAyLCAweEIzLCAweEM2LCAweEU4LCAweEY0KTsKKyAgICAgIENBTENfSyAodywgNCwgMHgwNCwgMHhEQiwgMHhGRCwgMHg3Qik7CisgICAgICBDQUxDX0sgKHcsIDYsIDB4QTMsIDB4RkIsIDB4NzYsIDB4QzgpOworICAgICAgQ0FMQ19LIChrLCAwLCAweDlBLCAweDRBLCAweDkyLCAweEQzKTsKKyAgICAgIENBTENfSyAoaywgMiwgMHg4MCwgMHhFNiwgMHg3OCwgMHg2Qik7CisgICAgICBDQUxDX0sgKGssIDQsIDB4RTQsIDB4NDUsIDB4REQsIDB4N0QpOworICAgICAgQ0FMQ19LIChrLCA2LCAweEQxLCAweEU4LCAweDM4LCAweDRCKTsKKyAgICAgIENBTENfSyAoaywgOCwgMHgwRCwgMHhENiwgMHhDNiwgMHgzMik7CisgICAgICBDQUxDX0sgKGssIDEwLCAweDM1LCAweEQ4LCAweDk4LCAweEZEKTsKKyAgICAgIENBTENfSyAoaywgMTIsIDB4MTgsIDB4MzcsIDB4RjcsIDB4NzEpOworICAgICAgQ0FMQ19LIChrLCAxNCwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSk7CisgICAgICBDQUxDX0sgKGssIDE2LCAweDQzLCAweDMwLCAweDc1LCAweDBGKTsKKyAgICAgIENBTENfSyAoaywgMTgsIDB4MzcsIDB4RjgsIDB4MjYsIDB4MUIpOworICAgICAgQ0FMQ19LIChrLCAyMCwgMHhGQSwgMHg4NywgMHgxMywgMHhGQSk7CisgICAgICBDQUxDX0sgKGssIDIyLCAweDk0LCAweDA2LCAweDQ4LCAweDNGKTsKKyAgICAgIENBTENfSyAoaywgMjQsIDB4RjIsIDB4NUUsIDB4RDAsIDB4QkEpOworICAgICAgQ0FMQ19LIChrLCAyNiwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1Qik7CisgICAgICBDQUxDX0sgKGssIDI4LCAweDg0LCAweDhBLCAweDU0LCAweDAwKTsKKyAgICAgIENBTENfSyAoaywgMzAsIDB4REYsIDB4QkMsIDB4MjMsIDB4OUQpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAordHdvZmlzaF9zZXRrZXkgKHZvaWQgKmNvbnRleHQsIGNvbnN0IGJ5dGUgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICBpbnQgcmMgPSBkb190d29maXNoX3NldGtleSAoY3R4LCBrZXksIGtleWxlbik7CisgIF9nY3J5X2J1cm5fc3RhY2sgKDIzKzYqc2l6ZW9mKHZvaWQqKSk7CisgIHJldHVybiByYzsKK30KKworCisMCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorCisvKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMgb2YgVHdvZmlzaC4gKi8KK2V4dGVybiB2b2lkIF9nY3J5X3R3b2Zpc2hfYW1kNjRfZW5jcnlwdF9ibG9jayhjb25zdCBUV09GSVNIX2NvbnRleHQgKmMsCisJCQkJCSAgICAgIGJ5dGUgKm91dCwgY29uc3QgYnl0ZSAqaW4pOworCitleHRlcm4gdm9pZCBfZ2NyeV90d29maXNoX2FtZDY0X2RlY3J5cHRfYmxvY2soY29uc3QgVFdPRklTSF9jb250ZXh0ICpjLAorCQkJCQkgICAgICBieXRlICpvdXQsIGNvbnN0IGJ5dGUgKmluKTsKKworLyogVGhlc2UgYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIHByb2Nlc3MgdGhyZWUgYmxvY2tzIGluIHBhcmFsbGVsLiAqLworZXh0ZXJuIHZvaWQgX2djcnlfdHdvZmlzaF9hbWQ2NF9jdHJfZW5jKGNvbnN0IFRXT0ZJU0hfY29udGV4dCAqYywgYnl0ZSAqb3V0LAorCQkJCQljb25zdCBieXRlICppbiwgYnl0ZSAqY3RyKTsKKworZXh0ZXJuIHZvaWQgX2djcnlfdHdvZmlzaF9hbWQ2NF9jYmNfZGVjKGNvbnN0IFRXT0ZJU0hfY29udGV4dCAqYywgYnl0ZSAqb3V0LAorCQkJCQljb25zdCBieXRlICppbiwgYnl0ZSAqaXYpOworCitleHRlcm4gdm9pZCBfZ2NyeV90d29maXNoX2FtZDY0X2NmYl9kZWMoY29uc3QgVFdPRklTSF9jb250ZXh0ICpjLCBieXRlICpvdXQsCisJCQkJCWNvbnN0IGJ5dGUgKmluLCBieXRlICppdik7CisKKyNlbGlmIGRlZmluZWQoVVNFX0FSTV9BU00pCisKKy8qIEFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBvZiBUd29maXNoLiAqLworZXh0ZXJuIHZvaWQgX2djcnlfdHdvZmlzaF9hcm1fZW5jcnlwdF9ibG9jayhjb25zdCBUV09GSVNIX2NvbnRleHQgKmMsCisJCQkJCSAgICAgIGJ5dGUgKm91dCwgY29uc3QgYnl0ZSAqaW4pOworCitleHRlcm4gdm9pZCBfZ2NyeV90d29maXNoX2FybV9kZWNyeXB0X2Jsb2NrKGNvbnN0IFRXT0ZJU0hfY29udGV4dCAqYywKKwkJCQkJICAgICAgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbik7CisKKyNlbHNlIC8qIVVTRV9BTUQ2NF9BU00gJiYgIVVTRV9BUk1fQVNNKi8KKworLyogTWFjcm9zIHRvIGNvbXB1dGUgdGhlIGcoKSBmdW5jdGlvbiBpbiB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbgorICogcm91bmRzLiAgRzEgaXMgdGhlIHN0cmFpZ2h0IGcoKSBmdW5jdGlvbjsgRzIgaW5jbHVkZXMgdGhlIDgtYml0CisgKiByb3RhdGlvbiBmb3IgdGhlIGhpZ2ggMzItYml0IHdvcmQuICovCisKKyNkZWZpbmUgRzEoYSkgXAorICAgICAoY3R4LT5zWzBdWyhhKSAmIDB4RkZdKSBeIChjdHgtPnNbMV1bKChhKSA+PiA4KSAmIDB4RkZdKSBcCisgICBeIChjdHgtPnNbMl1bKChhKSA+PiAxNikgJiAweEZGXSkgXiAoY3R4LT5zWzNdWyhhKSA+PiAyNF0pCisKKyNkZWZpbmUgRzIoYikgXAorICAgICAoY3R4LT5zWzFdWyhiKSAmIDB4RkZdKSBeIChjdHgtPnNbMl1bKChiKSA+PiA4KSAmIDB4RkZdKSBcCisgICBeIChjdHgtPnNbM11bKChiKSA+PiAxNikgJiAweEZGXSkgXiAoY3R4LT5zWzBdWyhiKSA+PiAyNF0pCisKKy8qIEVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gRmVpc3RlbCByb3VuZHMuICBFYWNoIG9uZSBjYWxscyB0aGUgdHdvIGcoKQorICogbWFjcm9zLCBkb2VzIHRoZSBQSFQsIGFuZCBwZXJmb3JtcyB0aGUgWE9SIGFuZCB0aGUgYXBwcm9wcmlhdGUgYml0CisgKiByb3RhdGlvbnMuICBUaGUgcGFyYW1ldGVycyBhcmUgdGhlIHJvdW5kIG51bWJlciAodXNlZCB0byBzZWxlY3Qgc3Via2V5cyksCisgKiBhbmQgdGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KKworI2RlZmluZSBFTkNST1VORChuLCBhLCBiLCBjLCBkKSBcCisgICB4ID0gRzEgKGEpOyB5ID0gRzIgKGIpOyBcCisgICB4ICs9IHk7IHkgKz0geCArIGN0eC0+a1syICogKG4pICsgMV07IFwKKyAgIChjKSBePSB4ICsgY3R4LT5rWzIgKiAobildOyBcCisgICAoYykgPSAoKGMpID4+IDEpICsgKChjKSA8PCAzMSk7IFwKKyAgIChkKSA9ICgoKGQpIDw8IDEpKygoZCkgPj4gMzEpKSBeIHkKKworI2RlZmluZSBERUNST1VORChuLCBhLCBiLCBjLCBkKSBcCisgICB4ID0gRzEgKGEpOyB5ID0gRzIgKGIpOyBcCisgICB4ICs9IHk7IHkgKz0geDsgXAorICAgKGQpIF49IHkgKyBjdHgtPmtbMiAqIChuKSArIDFdOyBcCisgICAoZCkgPSAoKGQpID4+IDEpICsgKChkKSA8PCAzMSk7IFwKKyAgIChjKSA9ICgoKGMpIDw8IDEpKygoYykgPj4gMzEpKTsgXAorICAgKGMpIF49ICh4ICsgY3R4LT5rWzIgKiAobildKQorCisvKiBFbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGN5Y2xlczsgZWFjaCBvbmUgaXMgc2ltcGx5IHR3byBGZWlzdGVsIHJvdW5kcworICogd2l0aCB0aGUgMzItYml0IGNodW5rcyByZS1vcmRlcmVkIHRvIHNpbXVsYXRlIHRoZSAic3dhcCIgKi8KKworI2RlZmluZSBFTkNDWUNMRShuKSBcCisgICBFTkNST1VORCAoMiAqIChuKSwgYSwgYiwgYywgZCk7IFwKKyAgIEVOQ1JPVU5EICgyICogKG4pICsgMSwgYywgZCwgYSwgYikKKworI2RlZmluZSBERUNDWUNMRShuKSBcCisgICBERUNST1VORCAoMiAqIChuKSArIDEsIGMsIGQsIGEsIGIpOyBcCisgICBERUNST1VORCAoMiAqIChuKSwgYSwgYiwgYywgZCkKKworLyogTWFjcm9zIHRvIGNvbnZlcnQgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnl0ZXMgaW50byAzMi1iaXQgd29yZHMsCisgKiBhbmQgc2ltdWx0YW5lb3VzbHkgcGVyZm9ybSB0aGUgd2hpdGVuaW5nIHN0ZXAuICBJTlBBQ0sgcGFja3Mgd29yZAorICogbnVtYmVyIG4gaW50byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmcgd2hpdGVuaW5nIHN1YmtleSBudW1iZXIgbS4KKyAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmcKKyAqIHdoaXRlbmluZyBzdWJrZXkgbnVtYmVyIG0uICovCisKKyNkZWZpbmUgSU5QQUNLKG4sIHgsIG0pIFwKKyAgIHggPSBidWZfZ2V0X2xlMzIoaW4gKyAobikgKiA0KTsgXAorICAgeCBePSBjdHgtPndbbV0KKworI2RlZmluZSBPVVRVTlBBQ0sobiwgeCwgbSkgXAorICAgeCBePSBjdHgtPndbbV07IFwKKyAgIGJ1Zl9wdXRfbGUzMihvdXQgKyAobikgKiA0LCB4KQorCisjZW5kaWYgLyohVVNFX0FNRDY0X0FTTSovCisKKwwKKy8qIEVuY3J5cHQgb25lIGJsb2NrLiAgaW4gYW5kIG91dCBtYXkgYmUgdGhlIHNhbWUuICovCisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R3b2Zpc2hfZW5jcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICBfZ2NyeV90d29maXNoX2FtZDY0X2VuY3J5cHRfYmxvY2soY3R4LCBvdXQsIGluKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0KnNpemVvZiAodm9pZCopKTsKK30KKworI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKworc3RhdGljIHVuc2lnbmVkIGludAordHdvZmlzaF9lbmNyeXB0ICh2b2lkICpjb250ZXh0LCBieXRlICpvdXQsIGNvbnN0IGJ5dGUgKmluKQoreworICBUV09GSVNIX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIF9nY3J5X3R3b2Zpc2hfYXJtX2VuY3J5cHRfYmxvY2soY3R4LCBvdXQsIGluKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0KnNpemVvZiAodm9pZCopKTsKK30KKworI2Vsc2UgLyohVVNFX0FNRDY0X0FTTSAmJiAhVVNFX0FSTV9BU00qLworCitzdGF0aWMgdm9pZAorZG9fdHdvZmlzaF9lbmNyeXB0IChjb25zdCBUV09GSVNIX2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgLyogVGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KKyAgdTMyIGEsIGIsIGMsIGQ7CisKKyAgLyogVGVtcG9yYXJpZXMgdXNlZCBieSB0aGUgcm91bmQgZnVuY3Rpb24uICovCisgIHUzMiB4LCB5OworCisgIC8qIElucHV0IHdoaXRlbmluZyBhbmQgcGFja2luZy4gKi8KKyAgSU5QQUNLICgwLCBhLCAwKTsKKyAgSU5QQUNLICgxLCBiLCAxKTsKKyAgSU5QQUNLICgyLCBjLCAyKTsKKyAgSU5QQUNLICgzLCBkLCAzKTsKKworICAvKiBFbmNyeXB0aW9uIEZlaXN0ZWwgY3ljbGVzLiAqLworICBFTkNDWUNMRSAoMCk7CisgIEVOQ0NZQ0xFICgxKTsKKyAgRU5DQ1lDTEUgKDIpOworICBFTkNDWUNMRSAoMyk7CisgIEVOQ0NZQ0xFICg0KTsKKyAgRU5DQ1lDTEUgKDUpOworICBFTkNDWUNMRSAoNik7CisgIEVOQ0NZQ0xFICg3KTsKKworICAvKiBPdXRwdXQgd2hpdGVuaW5nIGFuZCB1bnBhY2tpbmcuICovCisgIE9VVFVOUEFDSyAoMCwgYywgNCk7CisgIE9VVFVOUEFDSyAoMSwgZCwgNSk7CisgIE9VVFVOUEFDSyAoMiwgYSwgNik7CisgIE9VVFVOUEFDSyAoMywgYiwgNyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R3b2Zpc2hfZW5jcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICBkb190d29maXNoX2VuY3J5cHQgKGN0eCwgb3V0LCBpbik7CisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyAoMjQrMypzaXplb2YgKHZvaWQqKSk7Cit9CisKKyNlbmRpZiAvKiFVU0VfQU1ENjRfQVNNICYmICFVU0VfQVJNX0FTTSovCisKKwwKKy8qIERlY3J5cHQgb25lIGJsb2NrLiAgaW4gYW5kIG91dCBtYXkgYmUgdGhlIHNhbWUuICovCisKKyNpZmRlZiBVU0VfQU1ENjRfQVNNCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R3b2Zpc2hfZGVjcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICBfZ2NyeV90d29maXNoX2FtZDY0X2RlY3J5cHRfYmxvY2soY3R4LCBvdXQsIGluKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0KnNpemVvZiAodm9pZCopKTsKK30KKworI2VsaWYgZGVmaW5lZChVU0VfQVJNX0FTTSkKKworc3RhdGljIHVuc2lnbmVkIGludAordHdvZmlzaF9kZWNyeXB0ICh2b2lkICpjb250ZXh0LCBieXRlICpvdXQsIGNvbnN0IGJ5dGUgKmluKQoreworICBUV09GSVNIX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisgIF9nY3J5X3R3b2Zpc2hfYXJtX2RlY3J5cHRfYmxvY2soY3R4LCBvdXQsIGluKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICg0KnNpemVvZiAodm9pZCopKTsKK30KKworI2Vsc2UgLyohVVNFX0FNRDY0X0FTTSAmJiAhVVNFX0FSTV9BU00qLworCitzdGF0aWMgdm9pZAorZG9fdHdvZmlzaF9kZWNyeXB0IChjb25zdCBUV09GSVNIX2NvbnRleHQgKmN0eCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgLyogVGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KKyAgdTMyIGEsIGIsIGMsIGQ7CisKKyAgLyogVGVtcG9yYXJpZXMgdXNlZCBieSB0aGUgcm91bmQgZnVuY3Rpb24uICovCisgIHUzMiB4LCB5OworCisgIC8qIElucHV0IHdoaXRlbmluZyBhbmQgcGFja2luZy4gKi8KKyAgSU5QQUNLICgwLCBjLCA0KTsKKyAgSU5QQUNLICgxLCBkLCA1KTsKKyAgSU5QQUNLICgyLCBhLCA2KTsKKyAgSU5QQUNLICgzLCBiLCA3KTsKKworICAvKiBFbmNyeXB0aW9uIEZlaXN0ZWwgY3ljbGVzLiAqLworICBERUNDWUNMRSAoNyk7CisgIERFQ0NZQ0xFICg2KTsKKyAgREVDQ1lDTEUgKDUpOworICBERUNDWUNMRSAoNCk7CisgIERFQ0NZQ0xFICgzKTsKKyAgREVDQ1lDTEUgKDIpOworICBERUNDWUNMRSAoMSk7CisgIERFQ0NZQ0xFICgwKTsKKworICAvKiBPdXRwdXQgd2hpdGVuaW5nIGFuZCB1bnBhY2tpbmcuICovCisgIE9VVFVOUEFDSyAoMCwgYSwgMCk7CisgIE9VVFVOUEFDSyAoMSwgYiwgMSk7CisgIE9VVFVOUEFDSyAoMiwgYywgMik7CisgIE9VVFVOUEFDSyAoMywgZCwgMyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R3b2Zpc2hfZGVjcnlwdCAodm9pZCAqY29udGV4dCwgYnl0ZSAqb3V0LCBjb25zdCBieXRlICppbikKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisgIGRvX3R3b2Zpc2hfZGVjcnlwdCAoY3R4LCBvdXQsIGluKTsKKyAgcmV0dXJuIC8qYnVybl9zdGFjayovICgyNCszKnNpemVvZiAodm9pZCopKTsKK30KKworI2VuZGlmIC8qIVVTRV9BTUQ2NF9BU00gJiYgIVVTRV9BUk1fQVNNKi8KKworDAorCisvKiBCdWxrIGVuY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENUUiBtb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mIGNpcGhlci5jLiAgQ1RSIGlzIGV4cGVjdGVkIHRvIGJlCisgICBvZiBzaXplIFRXT0ZJU0hfQkxPQ0tTSVpFLiAqLwordm9pZAorX2djcnlfdHdvZmlzaF9jdHJfZW5jKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwgdm9pZCAqb3V0YnVmX2FyZywKKwkJICAgICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLCBzaXplX3QgbmJsb2NrcykKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciB0bXBidWZbVFdPRklTSF9CTE9DS1NJWkVdOworICB1bnNpZ25lZCBpbnQgYnVybiwgYnVybl9zdGFja19kZXB0aCA9IDA7CisgIGludCBpOworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorICB7CisgICAgLyogUHJvY2VzcyBkYXRhIGluIDMgYmxvY2sgY2h1bmtzLiAqLworICAgIHdoaWxlIChuYmxvY2tzID49IDMpCisgICAgICB7CisgICAgICAgIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY3RyX2VuYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGN0cik7CisKKyAgICAgICAgbmJsb2NrcyAtPSAzOworICAgICAgICBvdXRidWYgKz0gMyAqIFRXT0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICBpbmJ1ZiArPSAzICogVFdPRklTSF9CTE9DS1NJWkU7CisKKyAgICAgICAgYnVybiA9IDggKiBzaXplb2Yodm9pZCopOworICAgICAgICBpZiAoYnVybiA+IGJ1cm5fc3RhY2tfZGVwdGgpCisgICAgICAgICAgYnVybl9zdGFja19kZXB0aCA9IGJ1cm47CisgICAgICB9CisKKyAgICAvKiBVc2UgZ2VuZXJpYyBjb2RlIHRvIGhhbmRsZSBzbWFsbGVyIGNodW5rcy4uLiAqLworICAgIC8qIFRPRE86IHVzZSBjYWNoaW5nIGluc3RlYWQ/ICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIEVuY3J5cHQgdGhlIGNvdW50ZXIuICovCisgICAgICBidXJuID0gdHdvZmlzaF9lbmNyeXB0KGN0eCwgdG1wYnVmLCBjdHIpOworICAgICAgaWYgKGJ1cm4gPiBidXJuX3N0YWNrX2RlcHRoKQorICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYnVybjsKKworICAgICAgLyogWE9SIHRoZSBpbnB1dCB3aXRoIHRoZSBlbmNyeXB0ZWQgY291bnRlciBhbmQgc3RvcmUgaW4gb3V0cHV0LiAgKi8KKyAgICAgIGJ1Zl94b3Iob3V0YnVmLCB0bXBidWYsIGluYnVmLCBUV09GSVNIX0JMT0NLU0laRSk7CisgICAgICBvdXRidWYgKz0gVFdPRklTSF9CTE9DS1NJWkU7CisgICAgICBpbmJ1ZiAgKz0gVFdPRklTSF9CTE9DS1NJWkU7CisgICAgICAvKiBJbmNyZW1lbnQgdGhlIGNvdW50ZXIuICAqLworICAgICAgZm9yIChpID0gVFdPRklTSF9CTE9DS1NJWkU7IGkgPiAwOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICBjdHJbaS0xXSsrOworICAgICAgICAgIGlmIChjdHJbaS0xXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIHdpcGVtZW1vcnkodG1wYnVmLCBzaXplb2YodG1wYnVmKSk7CisgIF9nY3J5X2J1cm5fc3RhY2soYnVybl9zdGFja19kZXB0aCk7Cit9CisKKworLyogQnVsayBkZWNyeXB0aW9uIG9mIGNvbXBsZXRlIGJsb2NrcyBpbiBDQkMgbW9kZS4gIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgaW50ZW5kZWQgZm9yIHRoZSBidWxrIGVuY3J5cHRpb24gZmVhdHVyZSBvZiBjaXBoZXIuYy4gKi8KK3ZvaWQKK19nY3J5X3R3b2Zpc2hfY2JjX2RlYyh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwgdm9pZCAqb3V0YnVmX2FyZywKKwkJICAgICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLCBzaXplX3QgbmJsb2NrcykKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgY2hhciBzYXZlYnVmW1RXT0ZJU0hfQkxPQ0tTSVpFXTsKKyAgdW5zaWduZWQgaW50IGJ1cm4sIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorICB7CisgICAgLyogUHJvY2VzcyBkYXRhIGluIDMgYmxvY2sgY2h1bmtzLiAqLworICAgIHdoaWxlIChuYmxvY2tzID49IDMpCisgICAgICB7CisgICAgICAgIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY2JjX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDM7CisgICAgICAgIG91dGJ1ZiArPSAzICogVFdPRklTSF9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICs9IDMgKiBUV09GSVNIX0JMT0NLU0laRTsKKworICAgICAgICBidXJuID0gOSAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGlmIChidXJuID4gYnVybl9zdGFja19kZXB0aCkKKyAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYnVybjsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIC8qIElOQlVGIGlzIG5lZWRlZCBsYXRlciBhbmQgaXQgbWF5IGJlIGlkZW50aWNhbCB0byBPVVRCVUYsIHNvIHN0b3JlCisgICAgICAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCB0byBTQVZFQlVGLiAgKi8KKyAgICAgIGJ1cm4gPSB0d29maXNoX2RlY3J5cHQgKGN0eCwgc2F2ZWJ1ZiwgaW5idWYpOworICAgICAgaWYgKGJ1cm4gPiBidXJuX3N0YWNrX2RlcHRoKQorICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYnVybjsKKworICAgICAgYnVmX3hvcl9uX2NvcHlfMihvdXRidWYsIHNhdmVidWYsIGl2LCBpbmJ1ZiwgVFdPRklTSF9CTE9DS1NJWkUpOworICAgICAgaW5idWYgKz0gVFdPRklTSF9CTE9DS1NJWkU7CisgICAgICBvdXRidWYgKz0gVFdPRklTSF9CTE9DS1NJWkU7CisgICAgfQorCisgIHdpcGVtZW1vcnkoc2F2ZWJ1Ziwgc2l6ZW9mKHNhdmVidWYpKTsKKyAgX2djcnlfYnVybl9zdGFjayhidXJuX3N0YWNrX2RlcHRoKTsKK30KKworCisvKiBCdWxrIGRlY3J5cHRpb24gb2YgY29tcGxldGUgYmxvY2tzIGluIENGQiBtb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBpbnRlbmRlZCBmb3IgdGhlIGJ1bGsgZW5jcnlwdGlvbiBmZWF0dXJlIG9mIGNpcGhlci5jLiAqLwordm9pZAorX2djcnlfdHdvZmlzaF9jZmJfZGVjKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LCB2b2lkICpvdXRidWZfYXJnLAorCQkgICAgY29uc3Qgdm9pZCAqaW5idWZfYXJnLCBzaXplX3QgbmJsb2NrcykKK3sKKyAgVFdPRklTSF9jb250ZXh0ICpjdHggPSBjb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpvdXRidWYgPSBvdXRidWZfYXJnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IGluYnVmX2FyZzsKKyAgdW5zaWduZWQgaW50IGJ1cm4sIGJ1cm5fc3RhY2tfZGVwdGggPSAwOworCisjaWZkZWYgVVNFX0FNRDY0X0FTTQorICB7CisgICAgLyogUHJvY2VzcyBkYXRhIGluIDMgYmxvY2sgY2h1bmtzLiAqLworICAgIHdoaWxlIChuYmxvY2tzID49IDMpCisgICAgICB7CisgICAgICAgIF9nY3J5X3R3b2Zpc2hfYW1kNjRfY2ZiX2RlYyhjdHgsIG91dGJ1ZiwgaW5idWYsIGl2KTsKKworICAgICAgICBuYmxvY2tzIC09IDM7CisgICAgICAgIG91dGJ1ZiArPSAzICogVFdPRklTSF9CTE9DS1NJWkU7CisgICAgICAgIGluYnVmICs9IDMgKiBUV09GSVNIX0JMT0NLU0laRTsKKworICAgICAgICBidXJuID0gOCAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGlmIChidXJuID4gYnVybl9zdGFja19kZXB0aCkKKyAgICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYnVybjsKKyAgICAgIH0KKworICAgIC8qIFVzZSBnZW5lcmljIGNvZGUgdG8gaGFuZGxlIHNtYWxsZXIgY2h1bmtzLi4uICovCisgIH0KKyNlbmRpZgorCisgIGZvciAoIDtuYmxvY2tzOyBuYmxvY2tzLS0gKQorICAgIHsKKyAgICAgIGJ1cm4gPSB0d29maXNoX2VuY3J5cHQoY3R4LCBpdiwgaXYpOworICAgICAgaWYgKGJ1cm4gPiBidXJuX3N0YWNrX2RlcHRoKQorICAgICAgICBidXJuX3N0YWNrX2RlcHRoID0gYnVybjsKKworICAgICAgYnVmX3hvcl9uX2NvcHkob3V0YnVmLCBpdiwgaW5idWYsIFRXT0ZJU0hfQkxPQ0tTSVpFKTsKKyAgICAgIG91dGJ1ZiArPSBUV09GSVNIX0JMT0NLU0laRTsKKyAgICAgIGluYnVmICs9IFRXT0ZJU0hfQkxPQ0tTSVpFOworICAgIH0KKworICBfZ2NyeV9idXJuX3N0YWNrKGJ1cm5fc3RhY2tfZGVwdGgpOworfQorCisMCisKKy8qIFJ1biB0aGUgc2VsZi10ZXN0cyBmb3IgVFdPRklTSC1DVFIsIHRlc3RzIElWIGluY3JlbWVudCBvZiBidWxrIENUUgorICAgZW5jcnlwdGlvbi4gIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorc2VsZnRlc3RfY3RyICh2b2lkKQoreworICBjb25zdCBpbnQgbmJsb2NrcyA9IDMrMTsKKyAgY29uc3QgaW50IGJsb2Nrc2l6ZSA9IFRXT0ZJU0hfQkxPQ0tTSVpFOworICBjb25zdCBpbnQgY29udGV4dF9zaXplID0gc2l6ZW9mKFRXT0ZJU0hfY29udGV4dCk7CisKKyAgcmV0dXJuIF9nY3J5X3NlbGZ0ZXN0X2hlbHBlcl9jdHIoIlRXT0ZJU0giLCAmdHdvZmlzaF9zZXRrZXksCisgICAgICAgICAgICZ0d29maXNoX2VuY3J5cHQsICZfZ2NyeV90d29maXNoX2N0cl9lbmMsIG5ibG9ja3MsIGJsb2Nrc2l6ZSwKKwkgICBjb250ZXh0X3NpemUpOworfQorCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIFRXT0ZJU0gtQ0JDLCB0ZXN0cyBidWxrIENCQyBkZWNyeXB0aW9uLgorICAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzZWxmdGVzdF9jYmMgKHZvaWQpCit7CisgIGNvbnN0IGludCBuYmxvY2tzID0gMysyOworICBjb25zdCBpbnQgYmxvY2tzaXplID0gVFdPRklTSF9CTE9DS1NJWkU7CisgIGNvbnN0IGludCBjb250ZXh0X3NpemUgPSBzaXplb2YoVFdPRklTSF9jb250ZXh0KTsKKworICByZXR1cm4gX2djcnlfc2VsZnRlc3RfaGVscGVyX2NiYygiVFdPRklTSCIsICZ0d29maXNoX3NldGtleSwKKyAgICAgICAgICAgJnR3b2Zpc2hfZW5jcnlwdCwgJl9nY3J5X3R3b2Zpc2hfY2JjX2RlYywgbmJsb2NrcywgYmxvY2tzaXplLAorCSAgIGNvbnRleHRfc2l6ZSk7Cit9CisKKy8qIFJ1biB0aGUgc2VsZi10ZXN0cyBmb3IgVFdPRklTSC1DRkIsIHRlc3RzIGJ1bGsgQ0JDIGRlY3J5cHRpb24uCisgICBSZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3NlbGZ0ZXN0X2NmYiAodm9pZCkKK3sKKyAgY29uc3QgaW50IG5ibG9ja3MgPSAzKzI7CisgIGNvbnN0IGludCBibG9ja3NpemUgPSBUV09GSVNIX0JMT0NLU0laRTsKKyAgY29uc3QgaW50IGNvbnRleHRfc2l6ZSA9IHNpemVvZihUV09GSVNIX2NvbnRleHQpOworCisgIHJldHVybiBfZ2NyeV9zZWxmdGVzdF9oZWxwZXJfY2ZiKCJUV09GSVNIIiwgJnR3b2Zpc2hfc2V0a2V5LAorICAgICAgICAgICAmdHdvZmlzaF9lbmNyeXB0LCAmX2djcnlfdHdvZmlzaF9jZmJfZGVjLCBuYmxvY2tzLCBibG9ja3NpemUsCisJICAgY29udGV4dF9zaXplKTsKK30KKworDAorLyogVGVzdCBhIHNpbmdsZSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIHdpdGggZWFjaCBrZXkgc2l6ZS4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIqCitzZWxmdGVzdCAodm9pZCkKK3sKKyAgVFdPRklTSF9jb250ZXh0IGN0eDsgLyogRXhwYW5kZWQga2V5LiAqLworICBieXRlIHNjcmF0Y2hbMTZdOwkvKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gcmVzdWx0IGJ1ZmZlci4gKi8KKyAgY29uc3QgY2hhciAqcjsKKworICAvKiBUZXN0IHZlY3RvcnMgZm9yIHNpbmdsZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24uICBOb3RlIHRoYXQgSSBhbSB1c2luZworICAgKiB0aGUgdmVjdG9ycyBmcm9tIHRoZSBUd29maXNoIHBhcGVyJ3MgImtub3duIGFuc3dlciB0ZXN0IiwgST0zIGZvcgorICAgKiAxMjgtYml0IGFuZCBJPTQgZm9yIDI1Ni1iaXQsIGluc3RlYWQgb2YgdGhlIGFsbC0wIHZlY3RvcnMgZnJvbSB0aGUKKyAgICogImludGVybWVkaWF0ZSB2YWx1ZSB0ZXN0IiwgYmVjYXVzZSBhbiBhbGwtMCBrZXkgd291bGQgdHJpZ2dlciBhbGwgdGhlCisgICAqIHNwZWNpYWwgY2FzZXMgaW4gdGhlIFJTIG1hdHJpeCBtdWx0aXBseSwgbGVhdmluZyB0aGUgbWF0aCB1bnRlc3RlZC4gKi8KKyAgc3RhdGljICBieXRlIHBsYWludGV4dFsxNl0gPSB7CisgICAgMHhENCwgMHg5MSwgMHhEQiwgMHgxNiwgMHhFNywgMHhCMSwgMHhDMywgMHg5RSwKKyAgICAweDg2LCAweENCLCAweDA4LCAweDZCLCAweDc4LCAweDlGLCAweDU0LCAweDE5CisgIH07CisgIHN0YXRpYyBieXRlIGtleVsxNl0gPSB7CisgICAgMHg5RiwgMHg1OCwgMHg5RiwgMHg1QywgMHhGNiwgMHgxMiwgMHgyQywgMHgzMiwKKyAgICAweEI2LCAweEJGLCAweEVDLCAweDJGLCAweDJBLCAweEU4LCAweEMzLCAweDVBCisgIH07CisgIHN0YXRpYyBjb25zdCBieXRlIGNpcGhlcnRleHRbMTZdID0geworICAgIDB4MDEsIDB4OUYsIDB4OTgsIDB4MDksIDB4REUsIDB4MTcsIDB4MTEsIDB4ODUsCisgICAgMHg4RiwgMHhBQSwgMHhDMywgMHhBMywgMHhCQSwgMHgyMCwgMHhGQiwgMHhDMworICB9OworICBzdGF0aWMgYnl0ZSBwbGFpbnRleHRfMjU2WzE2XSA9IHsKKyAgICAweDkwLCAweEFGLCAweEU5LCAweDFCLCAweEIyLCAweDg4LCAweDU0LCAweDRGLAorICAgIDB4MkMsIDB4MzIsIDB4REMsIDB4MjMsIDB4OUIsIDB4MjYsIDB4MzUsIDB4RTYKKyAgfTsKKyAgc3RhdGljIGJ5dGUga2V5XzI1NlszMl0gPSB7CisgICAgMHhENCwgMHgzQiwgMHhCNywgMHg1NSwgMHg2RSwgMHhBMywgMHgyRSwgMHg0NiwKKyAgICAweEYyLCAweEEyLCAweDgyLCAweEI3LCAweEQ0LCAweDVCLCAweDRFLCAweDBELAorICAgIDB4NTcsIDB4RkYsIDB4NzMsIDB4OUQsIDB4NEQsIDB4QzksIDB4MkMsIDB4MUIsCisgICAgMHhENywgMHhGQywgMHgwMSwgMHg3MCwgMHgwQywgMHhDOCwgMHgyMSwgMHg2RgorICB9OworICBzdGF0aWMgY29uc3QgYnl0ZSBjaXBoZXJ0ZXh0XzI1NlsxNl0gPSB7CisgICAgMHg2QywgMHhCNCwgMHg1NiwgMHgxQywgMHg0MCwgMHhCRiwgMHgwQSwgMHg5NywKKyAgICAweDA1LCAweDkzLCAweDFDLCAweEI2LCAweEQ0LCAweDA4LCAweEU3LCAweEZBCisgIH07CisKKyAgdHdvZmlzaF9zZXRrZXkgKCZjdHgsIGtleSwgc2l6ZW9mKGtleSkpOworICB0d29maXNoX2VuY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHBsYWludGV4dCk7CisgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIGNpcGhlcnRleHQsIHNpemVvZiAoY2lwaGVydGV4dCkpKQorICAgIHJldHVybiAiVHdvZmlzaC0xMjggdGVzdCBlbmNyeXB0aW9uIGZhaWxlZC4iOworICB0d29maXNoX2RlY3J5cHQgKCZjdHgsIHNjcmF0Y2gsIHNjcmF0Y2gpOworICBpZiAobWVtY21wIChzY3JhdGNoLCBwbGFpbnRleHQsIHNpemVvZiAocGxhaW50ZXh0KSkpCisgICAgcmV0dXJuICJUd29maXNoLTEyOCB0ZXN0IGRlY3J5cHRpb24gZmFpbGVkLiI7CisKKyAgdHdvZmlzaF9zZXRrZXkgKCZjdHgsIGtleV8yNTYsIHNpemVvZihrZXlfMjU2KSk7CisgIHR3b2Zpc2hfZW5jcnlwdCAoJmN0eCwgc2NyYXRjaCwgcGxhaW50ZXh0XzI1Nik7CisgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIGNpcGhlcnRleHRfMjU2LCBzaXplb2YgKGNpcGhlcnRleHRfMjU2KSkpCisgICAgcmV0dXJuICJUd29maXNoLTI1NiB0ZXN0IGVuY3J5cHRpb24gZmFpbGVkLiI7CisgIHR3b2Zpc2hfZGVjcnlwdCAoJmN0eCwgc2NyYXRjaCwgc2NyYXRjaCk7CisgIGlmIChtZW1jbXAgKHNjcmF0Y2gsIHBsYWludGV4dF8yNTYsIHNpemVvZiAocGxhaW50ZXh0XzI1NikpKQorICAgIHJldHVybiAiVHdvZmlzaC0yNTYgdGVzdCBkZWNyeXB0aW9uIGZhaWxlZC4iOworCisgIGlmICgociA9IHNlbGZ0ZXN0X2N0cigpKSAhPSBOVUxMKQorICAgIHJldHVybiByOworICBpZiAoKHIgPSBzZWxmdGVzdF9jYmMoKSkgIT0gTlVMTCkKKyAgICByZXR1cm4gcjsKKyAgaWYgKChyID0gc2VsZnRlc3RfY2ZiKCkpICE9IE5VTEwpCisgICAgcmV0dXJuIHI7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisMCisvKiBNb3JlIGNvbXBsZXRlIHRlc3QgcHJvZ3JhbS4JVGhpcyBkb2VzIDEwMDAgZW5jcnlwdGlvbnMgYW5kIGRlY3J5cHRpb25zCisgKiB3aXRoIGVhY2ggb2YgMjUwIDEyOC1iaXQga2V5cyBhbmQgMjAwMCBlbmNyeXB0aW9ucyBhbmQgZGVjcnlwdGlvbnMgd2l0aAorICogZWFjaCBvZiAxMjUgMjU2LWJpdCBrZXlzLCB1c2luZyBhIGZlZWRiYWNrIHNjaGVtZSBzaW1pbGFyIHRvIGEgRmVpc3RlbAorICogY2lwaGVyLCBzbyBhcyB0byBiZSBzdXJlIG9mIHRlc3RpbmcgYWxsIHRoZSB0YWJsZSBlbnRyaWVzIHByZXR0eQorICogdGhvcm91Z2hseS4JV2Uga2VlcCBjaGFuZ2luZyB0aGUga2V5cyBzbyBhcyB0byBnZXQgYSBtb3JlIG1lYW5pbmdmdWwKKyAqIHBlcmZvcm1hbmNlIG51bWJlciwgc2luY2UgdGhlIGtleSBzZXR1cCBpcyBub24tdHJpdmlhbCBmb3IgVHdvZmlzaC4gKi8KKworI2lmZGVmIFRFU1QKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQKK21haW4oKQoreworICBUV09GSVNIX2NvbnRleHQgY3R4OyAgICAgLyogRXhwYW5kZWQga2V5LiAqLworICBpbnQgaSwgajsJCSAgICAvKiBMb29wIGNvdW50ZXJzLiAqLworCisgIGNvbnN0IGNoYXIgKmVuY3J5cHRfbXNnOyAvKiBNZXNzYWdlIHRvIHByaW50IHJlZ2FyZGluZyBlbmNyeXB0aW9uIHRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcHJpbnRmIGlzIGRvbmUgb3V0c2lkZSB0aGUgbG9vcCB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3R1ZmZpbmcgdXAgdGhlIHRpbWluZy4gKi8KKyAgY2xvY2tfdCB0aW1lcjsgLyogRm9yIGNvbXB1dGluZyBlbGFwc2VkIHRpbWUuICovCisKKyAgLyogVGVzdCBidWZmZXIuICovCisgIGJ5dGUgYnVmZmVyWzRdWzE2XSA9IHsKKyAgICB7MHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKyAgICAgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwgMHhFRSwgMHhGRn0sCisgICAgezB4MEYsIDB4MUUsIDB4MkQsIDB4M0MsIDB4NEIsIDB4NUEsIDB4NjksIDB4NzgsCisgICAgIDB4ODcsIDB4OTYsIDB4QTUsIDB4QjQsIDB4QzMsIDB4RDIgLDB4RTEsIDB4RjB9LAorICAgIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorICAgICAweEZFLCAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0ICwweDMyLCAweDEwfSwKKyAgICB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg3NiwgMHg1NCAsMHgzMiwgMHgxMCwKKyAgICAgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwgMHhGRSwgMHhEQywgMHhCQSwgMHg5OH0KKyAgfTsKKworICAvKiBFeHBlY3RlZCBvdXRwdXRzIGZvciB0aGUgbWlsbGlvbi1vcGVyYXRpb24gdGVzdCAqLworICBzdGF0aWMgY29uc3QgYnl0ZSB0ZXN0X2VuY3J5cHRbNF1bMTZdID0geworICAgIHsweEM4LCAweDIzLCAweEI4LCAweEI3LCAweDZCLCAweEZFLCAweDkxLCAweDEzLAorICAgICAweDJGLCAweEE3LCAweDVFLCAweEU2LCAweDk0LCAweDc3LCAweDZGLCAweDZCfSwKKyAgICB7MHg5MCwgMHgzNiwgMHhEOCwgMHgyOSwgMHhENSwgMHg5NiwgMHhDMiwgMHg4RSwKKyAgICAgMHhFNCwgMHhGRiwgMHg3NiwgMHhCQywgMHhFNSwgMHg3NywgMHg4OCwgMHgyN30sCisgICAgezB4QjgsIDB4NzgsIDB4NjksIDB4QUYsIDB4NDIsIDB4OEIsIDB4NDgsIDB4NjQsCisgICAgIDB4RjcsIDB4RTksIDB4RjMsIDB4OUMsIDB4NDIsIDB4MTgsIDB4N0IsIDB4NzN9LAorICAgIHsweDdBLCAweDg4LCAweEZCLCAweEVCLCAweDkwLCAweEE0LCAweEI0LCAweEE4LAorICAgICAweDQzLCAweEEzLCAweDFELCAweEYxLCAweDI2LCAweEM0LCAweDUzLCAweDU3fQorICB9OworICBzdGF0aWMgY29uc3QgYnl0ZSB0ZXN0X2RlY3J5cHRbNF1bMTZdID0geworICAgIHsweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAorICAgICAweDg4LCAweDk5LCAweEFBLCAweEJCLCAweENDLCAweERELCAweEVFLCAweEZGfSwKKyAgICB7MHgwRiwgMHgxRSwgMHgyRCwgMHgzQywgMHg0QiwgMHg1QSwgMHg2OSwgMHg3OCwKKyAgICAgMHg4NywgMHg5NiwgMHhBNSwgMHhCNCwgMHhDMywgMHhEMiAsMHhFMSwgMHhGMH0sCisgICAgezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCisgICAgIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQgLDB4MzIsIDB4MTB9LAorICAgIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDc2LCAweDU0ICwweDMyLCAweDEwLAorICAgICAweDg5LCAweEFCLCAweENELCAweEVGLCAweEZFLCAweERDLCAweEJBLCAweDk4fQorICB9OworCisgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aWNraW5nLiAqLworICB0aW1lciA9IGNsb2NrICgpOworCisgIC8qIEVuY3J5cHRpb24gdGVzdC4gKi8KKyAgZm9yIChpID0gMDsgaSA8IDEyNTsgaSsrKQorICAgIHsKKyAgICAgIHR3b2Zpc2hfc2V0a2V5ICgmY3R4LCBidWZmZXJbMF0sIHNpemVvZiAoYnVmZmVyWzBdKSk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKQorICAgICAgICB0d29maXNoX2VuY3J5cHQgKCZjdHgsIGJ1ZmZlclsyXSwgYnVmZmVyWzJdKTsKKyAgICAgIHR3b2Zpc2hfc2V0a2V5ICgmY3R4LCBidWZmZXJbMV0sIHNpemVvZiAoYnVmZmVyWzFdKSk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKQorICAgICAgICB0d29maXNoX2VuY3J5cHQgKCZjdHgsIGJ1ZmZlclszXSwgYnVmZmVyWzNdKTsKKyAgICAgIHR3b2Zpc2hfc2V0a2V5ICgmY3R4LCBidWZmZXJbMl0sIHNpemVvZiAoYnVmZmVyWzJdKSoyKTsKKyAgICAgIGZvciAoaiA9IDA7IGogPCAxMDAwOyBqKyspIHsKKyAgICAgICAgdHdvZmlzaF9lbmNyeXB0ICgmY3R4LCBidWZmZXJbMF0sIGJ1ZmZlclswXSk7CisgICAgICAgIHR3b2Zpc2hfZW5jcnlwdCAoJmN0eCwgYnVmZmVyWzFdLCBidWZmZXJbMV0pOworICAgICAgfQorICAgIH0KKyAgZW5jcnlwdF9tc2cgPSBtZW1jbXAgKGJ1ZmZlciwgdGVzdF9lbmNyeXB0LCBzaXplb2YgKHRlc3RfZW5jcnlwdCkpID8KKyAgICAiZW5jcnlwdGlvbiBmYWlsdXJlIVxuIiA6ICJlbmNyeXB0aW9uIE9LIVxuIjsKKworICAvKiBEZWNyeXB0aW9uIHRlc3QuICovCisgIGZvciAoaSA9IDA7IGkgPCAxMjU7IGkrKykKKyAgICB7CisgICAgICB0d29maXNoX3NldGtleSAoJmN0eCwgYnVmZmVyWzJdLCBzaXplb2YgKGJ1ZmZlclsyXSkqMik7CisgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKSB7CisgICAgICAgIHR3b2Zpc2hfZGVjcnlwdCAoJmN0eCwgYnVmZmVyWzBdLCBidWZmZXJbMF0pOworICAgICAgICB0d29maXNoX2RlY3J5cHQgKCZjdHgsIGJ1ZmZlclsxXSwgYnVmZmVyWzFdKTsKKyAgICAgIH0KKyAgICAgIHR3b2Zpc2hfc2V0a2V5ICgmY3R4LCBidWZmZXJbMV0sIHNpemVvZiAoYnVmZmVyWzFdKSk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKQorICAgICAgICB0d29maXNoX2RlY3J5cHQgKCZjdHgsIGJ1ZmZlclszXSwgYnVmZmVyWzNdKTsKKyAgICAgIHR3b2Zpc2hfc2V0a2V5ICgmY3R4LCBidWZmZXJbMF0sIHNpemVvZiAoYnVmZmVyWzBdKSk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKQorICAgICAgICB0d29maXNoX2RlY3J5cHQgKCZjdHgsIGJ1ZmZlclsyXSwgYnVmZmVyWzJdKTsKKyAgICB9CisKKyAgLyogU3RvcCB0aGUgdGltZXIsIGFuZCBwcmludCByZXN1bHRzLiAqLworICB0aW1lciA9IGNsb2NrICgpIC0gdGltZXI7CisgIHByaW50ZiAoZW5jcnlwdF9tc2cpOworICBwcmludGYgKG1lbWNtcCAoYnVmZmVyLCB0ZXN0X2RlY3J5cHQsIHNpemVvZiAodGVzdF9kZWNyeXB0KSkgPworICAgICAgICAgICJkZWNyeXB0aW9uIGZhaWx1cmUhXG4iIDogImRlY3J5cHRpb24gT0shXG4iKTsKKyAgcHJpbnRmICgiZWxhcHNlZCB0aW1lOiAlLjFmIHMuXG4iLCAoZmxvYXQpIHRpbWVyIC8gQ0xPQ0tTX1BFUl9TRUMpOworCisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogVEVTVCAqLworCisMCisKK2djcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY190d29maXNoID0KKyAgeworICAgIEdDUllfQ0lQSEVSX1RXT0ZJU0gsIHswLCAwfSwKKyAgICAiVFdPRklTSCIsIE5VTEwsIE5VTEwsIDE2LCAyNTYsIHNpemVvZiAoVFdPRklTSF9jb250ZXh0KSwKKyAgICB0d29maXNoX3NldGtleSwgdHdvZmlzaF9lbmNyeXB0LCB0d29maXNoX2RlY3J5cHQKKyAgfTsKKworZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX3R3b2Zpc2gxMjggPQorICB7CisgICAgR0NSWV9DSVBIRVJfVFdPRklTSDEyOCwgezAsIDB9LAorICAgICJUV09GSVNIMTI4IiwgTlVMTCwgTlVMTCwgMTYsIDEyOCwgc2l6ZW9mIChUV09GSVNIX2NvbnRleHQpLAorICAgIHR3b2Zpc2hfc2V0a2V5LCB0d29maXNoX2VuY3J5cHQsIHR3b2Zpc2hfZGVjcnlwdAorICB9OwpkaWZmIC0tZ2l0IGEvY2lwaGVyL3doaXJscG9vbC5jIGIvY2lwaGVyL3doaXJscG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGQ0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jaXBoZXIvd2hpcmxwb29sLmMKQEAgLTAsMCArMSwxNDgxIEBACisvKiB3aGlybHBvb2wuYyAtIFdoaXJscG9vbCBoYXNoaW5nIGFsZ29yaXRobQorICogQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXaGlybHBvb2wgaGFzaGluZyBhbGdvcml0aG0sIHdoaWNoCisgICBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgVmluY2VudCBSaWptZW4gYW5kIFBhdWxvIFMuIEwuIE0uIEJhcnJldG87CisgICBpdCdzIGhvbWVwYWdlIGlzIGxvY2F0ZWQgYXQ6CisgICBodHRwOi8vd3d3LmxhcmMudXNwLmJyL35wYmFycmV0by9XaGlybHBvb2xQYWdlLmh0bWwKKworICAgVGhlIFMtQm94ZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1haW4gdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24sCisgICB3aGljaCBpbXBsZW1lbnRzIGFuIG9wdGltaXplZCB2ZXJzaW9uIG9mIHRoZSBhbGdvcml0aG0sIGlzIHRha2VuCisgICBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIGZyb20KKyAgIGh0dHA6Ly93d3cubGFyYy51c3AuYnIvfnBiYXJyZXRvL3doaXJscG9vbC56aXAKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKKyNpbmNsdWRlICJidWZoZWxwLmgiCisjaW5jbHVkZSAiaGFzaC1jb21tb24uaCIKKworLyogU2l6ZSBvZiBhIHdoaXJscG9vbCBibG9jayAoaW4gYnl0ZXMpLiAgKi8KKyNkZWZpbmUgQkxPQ0tfU0laRSA2NAorCisvKiBOdW1iZXIgb2Ygcm91bmRzLiAgKi8KKyNkZWZpbmUgUiAxMAorCisKKworLyogVHlwZXMuICAqLwordHlwZWRlZiB1NjQgd2hpcmxwb29sX2Jsb2NrX3RbQkxPQ0tfU0laRSAvIDhdOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGdjcnlfbWRfYmxvY2tfY3R4X3QgYmN0eDsKKyAgd2hpcmxwb29sX2Jsb2NrX3QgaGFzaF9zdGF0ZTsKKyAgaW50IHVzZV9idWdlbXU7CisgIHN0cnVjdCB7CisgICAgc2l6ZV90IGNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoWzMyXTsKKyAgfSBidWdlbXU7Cit9IHdoaXJscG9vbF9jb250ZXh0X3Q7CisKKwwKKworLyogTWFjcm9zLiAqLworCisvKiBDb252ZXJ0IHRoZSB0aGUgYnVmZmVyIEJVRkZFUiBpbnRvIGEgYmxvY2sgQkxPQ0ssIHVzaW5nIEkgYXMKKyAgIGNvdW50ZXIuICAqLworI2RlZmluZSBidWZmZXJfdG9fYmxvY2soYnVmZmVyLCBibG9jaywgaSkgXAorICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSBcCisgICAgKGJsb2NrKVtpXSA9IGJ1Zl9nZXRfYmU2NCgoYnVmZmVyKSArIGkgKiA4KTsKKworLyogQ29udmVydCB0aGUgYmxvY2sgQkxPQ0sgaW50byBhIGJ1ZmZlciBCVUZGRVIsIHVzaW5nIEkgYXMKKyAgIGNvdW50ZXIuICAqLworI2RlZmluZSBibG9ja190b19idWZmZXIoYnVmZmVyLCBibG9jaywgaSkgXAorICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSBcCisgICAgYnVmX3B1dF9iZTY0KChidWZmZXIpICsgaSAqIDgsIChibG9jaylbaV0pOworCisvKiBDb3B5IHRoZSBibG9jayBCTE9DS19TUkMgdG8gQkxPQ0tfRFNULCB1c2luZyBJIGFzIGNvdW50ZXIuICAqLworI2RlZmluZSBibG9ja19jb3B5KGJsb2NrX2RzdCwgYmxvY2tfc3JjLCBpKSBcCisgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIFwKKyAgICBibG9ja19kc3RbaV0gPSBibG9ja19zcmNbaV07CisKKy8qIFhPUiB0aGUgYmxvY2sgQkxPQ0tfU1JDIGludG8gQkxPQ0tfRFNULCB1c2luZyBJIGFzIGNvdW50ZXIuICAqLworI2RlZmluZSBibG9ja194b3IoYmxvY2tfZHN0LCBibG9ja19zcmMsIGkpIFwKKyAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgXAorICAgIGJsb2NrX2RzdFtpXSBePSBibG9ja19zcmNbaV07CisKKwwKKworLyogUm91bmQgY29uc3RhbnRzLiAgKi8KK3N0YXRpYyBjb25zdCB1NjQgcmNbUl0gPQorICB7CisgICAgVTY0X0MgKDB4MTgyM2M2ZTg4N2I4MDE0ZiksCisgICAgVTY0X0MgKDB4MzZhNmQyZjU3OTZmOTE1MiksCisgICAgVTY0X0MgKDB4NjBiYzliOGVhMzBjN2IzNSksCisgICAgVTY0X0MgKDB4MWRlMGQ3YzIyZTRiZmU1NyksCisgICAgVTY0X0MgKDB4MTU3NzM3ZTU5ZmYwNGFkYSksCisgICAgVTY0X0MgKDB4NThjOTI5MGFiMWEwNmI4NSksCisgICAgVTY0X0MgKDB4YmQ1ZDEwZjRjYjNlMDU2NyksCisgICAgVTY0X0MgKDB4ZTQyNzQxOGJhNzdkOTVkOCksCisgICAgVTY0X0MgKDB4ZmJlZTdjNjZkZDE3NDc5ZSksCisgICAgVTY0X0MgKDB4Y2EyZGJmMDdhZDVhODMzMyksCisgIH07CisKKwwKKworLyogTWFpbiBsb29rdXAgYm94ZXMuICAqLworc3RhdGljIGNvbnN0IHU2NCBDMFsyNTZdID0KKyAgeworICAgIFU2NF9DICgweDE4MTg2MDE4YzA3ODMwZDgpLCBVNjRfQyAoMHgyMzIzOGMyMzA1YWY0NjI2KSwKKyAgICBVNjRfQyAoMHhjNmM2M2ZjNjdlZjk5MWI4KSwgVTY0X0MgKDB4ZThlODg3ZTgxMzZmY2RmYiksCisgICAgVTY0X0MgKDB4ODc4NzI2ODc0Y2ExMTNjYiksIFU2NF9DICgweGI4YjhkYWI4YTk2MjZkMTEpLAorICAgIFU2NF9DICgweDAxMDEwNDAxMDgwNTAyMDkpLCBVNjRfQyAoMHg0ZjRmMjE0ZjQyNmU5ZTBkKSwKKyAgICBVNjRfQyAoMHgzNjM2ZDgzNmFkZWU2YzliKSwgVTY0X0MgKDB4YTZhNmEyYTY1OTA0NTFmZiksCisgICAgVTY0X0MgKDB4ZDJkMjZmZDJkZWJkYjkwYyksIFU2NF9DICgweGY1ZjVmM2Y1ZmIwNmY3MGUpLAorICAgIFU2NF9DICgweDc5NzlmOTc5ZWY4MGYyOTYpLCBVNjRfQyAoMHg2ZjZmYTE2ZjVmY2VkZTMwKSwKKyAgICBVNjRfQyAoMHg5MTkxN2U5MWZjZWYzZjZkKSwgVTY0X0MgKDB4NTI1MjU1NTJhYTA3YTRmOCksCisgICAgVTY0X0MgKDB4NjA2MDlkNjAyN2ZkYzA0NyksIFU2NF9DICgweGJjYmNjYWJjODk3NjY1MzUpLAorICAgIFU2NF9DICgweDliOWI1NjliYWNjZDJiMzcpLCBVNjRfQyAoMHg4ZThlMDI4ZTA0OGMwMThhKSwKKyAgICBVNjRfQyAoMHhhM2EzYjZhMzcxMTU1YmQyKSwgVTY0X0MgKDB4MGMwYzMwMGM2MDNjMTg2YyksCisgICAgVTY0X0MgKDB4N2I3YmYxN2JmZjhhZjY4NCksIFU2NF9DICgweDM1MzVkNDM1YjVlMTZhODApLAorICAgIFU2NF9DICgweDFkMWQ3NDFkZTg2OTNhZjUpLCBVNjRfQyAoMHhlMGUwYTdlMDUzNDdkZGIzKSwKKyAgICBVNjRfQyAoMHhkN2Q3N2JkN2Y2YWNiMzIxKSwgVTY0X0MgKDB4YzJjMjJmYzI1ZWVkOTk5YyksCisgICAgVTY0X0MgKDB4MmUyZWI4MmU2ZDk2NWM0MyksIFU2NF9DICgweDRiNGIzMTRiNjI3YTk2MjkpLAorICAgIFU2NF9DICgweGZlZmVkZmZlYTMyMWUxNWQpLCBVNjRfQyAoMHg1NzU3NDE1NzgyMTZhZWQ1KSwKKyAgICBVNjRfQyAoMHgxNTE1NTQxNWE4NDEyYWJkKSwgVTY0X0MgKDB4Nzc3N2MxNzc5ZmI2ZWVlOCksCisgICAgVTY0X0MgKDB4MzczN2RjMzdhNWViNmU5MiksIFU2NF9DICgweGU1ZTViM2U1N2I1NmQ3OWUpLAorICAgIFU2NF9DICgweDlmOWY0NjlmOGNkOTIzMTMpLCBVNjRfQyAoMHhmMGYwZTdmMGQzMTdmZDIzKSwKKyAgICBVNjRfQyAoMHg0YTRhMzU0YTZhN2Y5NDIwKSwgVTY0X0MgKDB4ZGFkYTRmZGE5ZTk1YTk0NCksCisgICAgVTY0X0MgKDB4NTg1ODdkNThmYTI1YjBhMiksIFU2NF9DICgweGM5YzkwM2M5MDZjYThmY2YpLAorICAgIFU2NF9DICgweDI5MjlhNDI5NTU4ZDUyN2MpLCBVNjRfQyAoMHgwYTBhMjgwYTUwMjIxNDVhKSwKKyAgICBVNjRfQyAoMHhiMWIxZmViMWUxNGY3ZjUwKSwgVTY0X0MgKDB4YTBhMGJhYTA2OTFhNWRjOSksCisgICAgVTY0X0MgKDB4NmI2YmIxNmI3ZmRhZDYxNCksIFU2NF9DICgweDg1ODUyZTg1NWNhYjE3ZDkpLAorICAgIFU2NF9DICgweGJkYmRjZWJkODE3MzY3M2MpLCBVNjRfQyAoMHg1ZDVkNjk1ZGQyMzRiYThmKSwKKyAgICBVNjRfQyAoMHgxMDEwNDAxMDgwNTAyMDkwKSwgVTY0X0MgKDB4ZjRmNGY3ZjRmMzAzZjUwNyksCisgICAgVTY0X0MgKDB4Y2JjYjBiY2IxNmMwOGJkZCksIFU2NF9DICgweDNlM2VmODNlZWRjNjdjZDMpLAorICAgIFU2NF9DICgweDA1MDUxNDA1MjgxMTBhMmQpLCBVNjRfQyAoMHg2NzY3ODE2NzFmZTZjZTc4KSwKKyAgICBVNjRfQyAoMHhlNGU0YjdlNDczNTNkNTk3KSwgVTY0X0MgKDB4MjcyNzljMjcyNWJiNGUwMiksCisgICAgVTY0X0MgKDB4NDE0MTE5NDEzMjU4ODI3MyksIFU2NF9DICgweDhiOGIxNjhiMmM5ZDBiYTcpLAorICAgIFU2NF9DICgweGE3YTdhNmE3NTEwMTUzZjYpLCBVNjRfQyAoMHg3ZDdkZTk3ZGNmOTRmYWIyKSwKKyAgICBVNjRfQyAoMHg5NTk1NmU5NWRjZmIzNzQ5KSwgVTY0X0MgKDB4ZDhkODQ3ZDg4ZTlmYWQ1NiksCisgICAgVTY0X0MgKDB4ZmJmYmNiZmI4YjMwZWI3MCksIFU2NF9DICgweGVlZWU5ZmVlMjM3MWMxY2QpLAorICAgIFU2NF9DICgweDdjN2NlZDdjYzc5MWY4YmIpLCBVNjRfQyAoMHg2NjY2ODU2NjE3ZTNjYzcxKSwKKyAgICBVNjRfQyAoMHhkZGRkNTNkZGE2OGVhNzdiKSwgVTY0X0MgKDB4MTcxNzVjMTdiODRiMmVhZiksCisgICAgVTY0X0MgKDB4NDc0NzAxNDcwMjQ2OGU0NSksIFU2NF9DICgweDllOWU0MjllODRkYzIxMWEpLAorICAgIFU2NF9DICgweGNhY2EwZmNhMWVjNTg5ZDQpLCBVNjRfQyAoMHgyZDJkYjQyZDc1OTk1YTU4KSwKKyAgICBVNjRfQyAoMHhiZmJmYzZiZjkxNzk2MzJlKSwgVTY0X0MgKDB4MDcwNzFjMDczODFiMGUzZiksCisgICAgVTY0X0MgKDB4YWRhZDhlYWQwMTIzNDdhYyksIFU2NF9DICgweDVhNWE3NTVhZWEyZmI0YjApLAorICAgIFU2NF9DICgweDgzODMzNjgzNmNiNTFiZWYpLCBVNjRfQyAoMHgzMzMzY2MzMzg1ZmY2NmI2KSwKKyAgICBVNjRfQyAoMHg2MzYzOTE2MzNmZjJjNjVjKSwgVTY0X0MgKDB4MDIwMjA4MDIxMDBhMDQxMiksCisgICAgVTY0X0MgKDB4YWFhYTkyYWEzOTM4NDk5MyksIFU2NF9DICgweDcxNzFkOTcxYWZhOGUyZGUpLAorICAgIFU2NF9DICgweGM4YzgwN2M4MGVjZjhkYzYpLCBVNjRfQyAoMHgxOTE5NjQxOWM4N2QzMmQxKSwKKyAgICBVNjRfQyAoMHg0OTQ5Mzk0OTcyNzA5MjNiKSwgVTY0X0MgKDB4ZDlkOTQzZDk4NjlhYWY1ZiksCisgICAgVTY0X0MgKDB4ZjJmMmVmZjJjMzFkZjkzMSksIFU2NF9DICgweGUzZTNhYmUzNGI0OGRiYTgpLAorICAgIFU2NF9DICgweDViNWI3MTViZTIyYWI2YjkpLCBVNjRfQyAoMHg4ODg4MWE4ODM0OTIwZGJjKSwKKyAgICBVNjRfQyAoMHg5YTlhNTI5YWE0YzgyOTNlKSwgVTY0X0MgKDB4MjYyNjk4MjYyZGJlNGMwYiksCisgICAgVTY0X0MgKDB4MzIzMmM4MzI4ZGZhNjRiZiksIFU2NF9DICgweGIwYjBmYWIwZTk0YTdkNTkpLAorICAgIFU2NF9DICgweGU5ZTk4M2U5MWI2YWNmZjIpLCBVNjRfQyAoMHgwZjBmM2MwZjc4MzMxZTc3KSwKKyAgICBVNjRfQyAoMHhkNWQ1NzNkNWU2YTZiNzMzKSwgVTY0X0MgKDB4ODA4MDNhODA3NGJhMWRmNCksCisgICAgVTY0X0MgKDB4YmViZWMyYmU5OTdjNjEyNyksIFU2NF9DICgweGNkY2QxM2NkMjZkZTg3ZWIpLAorICAgIFU2NF9DICgweDM0MzRkMDM0YmRlNDY4ODkpLCBVNjRfQyAoMHg0ODQ4M2Q0ODdhNzU5MDMyKSwKKyAgICBVNjRfQyAoMHhmZmZmZGJmZmFiMjRlMzU0KSwgVTY0X0MgKDB4N2E3YWY1N2FmNzhmZjQ4ZCksCisgICAgVTY0X0MgKDB4OTA5MDdhOTBmNGVhM2Q2NCksIFU2NF9DICgweDVmNWY2MTVmYzIzZWJlOWQpLAorICAgIFU2NF9DICgweDIwMjA4MDIwMWRhMDQwM2QpLCBVNjRfQyAoMHg2ODY4YmQ2ODY3ZDVkMDBmKSwKKyAgICBVNjRfQyAoMHgxYTFhNjgxYWQwNzIzNGNhKSwgVTY0X0MgKDB4YWVhZTgyYWUxOTJjNDFiNyksCisgICAgVTY0X0MgKDB4YjRiNGVhYjRjOTVlNzU3ZCksIFU2NF9DICgweDU0NTQ0ZDU0OWExOWE4Y2UpLAorICAgIFU2NF9DICgweDkzOTM3NjkzZWNlNTNiN2YpLCBVNjRfQyAoMHgyMjIyODgyMjBkYWE0NDJmKSwKKyAgICBVNjRfQyAoMHg2NDY0OGQ2NDA3ZTljODYzKSwgVTY0X0MgKDB4ZjFmMWUzZjFkYjEyZmYyYSksCisgICAgVTY0X0MgKDB4NzM3M2QxNzNiZmEyZTZjYyksIFU2NF9DICgweDEyMTI0ODEyOTA1YTI0ODIpLAorICAgIFU2NF9DICgweDQwNDAxZDQwM2E1ZDgwN2EpLCBVNjRfQyAoMHgwODA4MjAwODQwMjgxMDQ4KSwKKyAgICBVNjRfQyAoMHhjM2MzMmJjMzU2ZTg5Yjk1KSwgVTY0X0MgKDB4ZWNlYzk3ZWMzMzdiYzVkZiksCisgICAgVTY0X0MgKDB4ZGJkYjRiZGI5NjkwYWI0ZCksIFU2NF9DICgweGExYTFiZWExNjExZjVmYzApLAorICAgIFU2NF9DICgweDhkOGQwZThkMWM4MzA3OTEpLCBVNjRfQyAoMHgzZDNkZjQzZGY1Yzk3YWM4KSwKKyAgICBVNjRfQyAoMHg5Nzk3NjY5N2NjZjEzMzViKSwgVTY0X0MgKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MgKDB4Y2ZjZjFiY2YzNmQ0ODNmOSksIFU2NF9DICgweDJiMmJhYzJiNDU4NzU2NmUpLAorICAgIFU2NF9DICgweDc2NzZjNTc2OTdiM2VjZTEpLCBVNjRfQyAoMHg4MjgyMzI4MjY0YjAxOWU2KSwKKyAgICBVNjRfQyAoMHhkNmQ2N2ZkNmZlYTliMTI4KSwgVTY0X0MgKDB4MWIxYjZjMWJkODc3MzZjMyksCisgICAgVTY0X0MgKDB4YjViNWVlYjVjMTViNzc3NCksIFU2NF9DICgweGFmYWY4NmFmMTEyOTQzYmUpLAorICAgIFU2NF9DICgweDZhNmFiNTZhNzdkZmQ0MWQpLCBVNjRfQyAoMHg1MDUwNWQ1MGJhMGRhMGVhKSwKKyAgICBVNjRfQyAoMHg0NTQ1MDk0NTEyNGM4YTU3KSwgVTY0X0MgKDB4ZjNmM2ViZjNjYjE4ZmIzOCksCisgICAgVTY0X0MgKDB4MzAzMGMwMzA5ZGYwNjBhZCksIFU2NF9DICgweGVmZWY5YmVmMmI3NGMzYzQpLAorICAgIFU2NF9DICgweDNmM2ZmYzNmZTVjMzdlZGEpLCBVNjRfQyAoMHg1NTU1NDk1NTkyMWNhYWM3KSwKKyAgICBVNjRfQyAoMHhhMmEyYjJhMjc5MTA1OWRiKSwgVTY0X0MgKDB4ZWFlYThmZWEwMzY1YzllOSksCisgICAgVTY0X0MgKDB4NjU2NTg5NjUwZmVjY2E2YSksIFU2NF9DICgweGJhYmFkMmJhYjk2ODY5MDMpLAorICAgIFU2NF9DICgweDJmMmZiYzJmNjU5MzVlNGEpLCBVNjRfQyAoMHhjMGMwMjdjMDRlZTc5ZDhlKSwKKyAgICBVNjRfQyAoMHhkZWRlNWZkZWJlODFhMTYwKSwgVTY0X0MgKDB4MWMxYzcwMWNlMDZjMzhmYyksCisgICAgVTY0X0MgKDB4ZmRmZGQzZmRiYjJlZTc0NiksIFU2NF9DICgweDRkNGQyOTRkNTI2NDlhMWYpLAorICAgIFU2NF9DICgweDkyOTI3MjkyZTRlMDM5NzYpLCBVNjRfQyAoMHg3NTc1Yzk3NThmYmNlYWZhKSwKKyAgICBVNjRfQyAoMHgwNjA2MTgwNjMwMWUwYzM2KSwgVTY0X0MgKDB4OGE4YTEyOGEyNDk4MDlhZSksCisgICAgVTY0X0MgKDB4YjJiMmYyYjJmOTQwNzk0YiksIFU2NF9DICgweGU2ZTZiZmU2NjM1OWQxODUpLAorICAgIFU2NF9DICgweDBlMGUzODBlNzAzNjFjN2UpLCBVNjRfQyAoMHgxZjFmN2MxZmY4NjMzZWU3KSwKKyAgICBVNjRfQyAoMHg2MjYyOTU2MjM3ZjdjNDU1KSwgVTY0X0MgKDB4ZDRkNDc3ZDRlZWEzYjUzYSksCisgICAgVTY0X0MgKDB4YThhODlhYTgyOTMyNGQ4MSksIFU2NF9DICgweDk2OTY2Mjk2YzRmNDMxNTIpLAorICAgIFU2NF9DICgweGY5ZjljM2Y5OWIzYWVmNjIpLCBVNjRfQyAoMHhjNWM1MzNjNTY2ZjY5N2EzKSwKKyAgICBVNjRfQyAoMHgyNTI1OTQyNTM1YjE0YTEwKSwgVTY0X0MgKDB4NTk1OTc5NTlmMjIwYjJhYiksCisgICAgVTY0X0MgKDB4ODQ4NDJhODQ1NGFlMTVkMCksIFU2NF9DICgweDcyNzJkNTcyYjdhN2U0YzUpLAorICAgIFU2NF9DICgweDM5MzllNDM5ZDVkZDcyZWMpLCBVNjRfQyAoMHg0YzRjMmQ0YzVhNjE5ODE2KSwKKyAgICBVNjRfQyAoMHg1ZTVlNjU1ZWNhM2JiYzk0KSwgVTY0X0MgKDB4Nzg3OGZkNzhlNzg1ZjA5ZiksCisgICAgVTY0X0MgKDB4MzgzOGUwMzhkZGQ4NzBlNSksIFU2NF9DICgweDhjOGMwYThjMTQ4NjA1OTgpLAorICAgIFU2NF9DICgweGQxZDE2M2QxYzZiMmJmMTcpLCBVNjRfQyAoMHhhNWE1YWVhNTQxMGI1N2U0KSwKKyAgICBVNjRfQyAoMHhlMmUyYWZlMjQzNGRkOWExKSwgVTY0X0MgKDB4NjE2MTk5NjEyZmY4YzI0ZSksCisgICAgVTY0X0MgKDB4YjNiM2Y2YjNmMTQ1N2I0MiksIFU2NF9DICgweDIxMjE4NDIxMTVhNTQyMzQpLAorICAgIFU2NF9DICgweDljOWM0YTljOTRkNjI1MDgpLCBVNjRfQyAoMHgxZTFlNzgxZWYwNjYzY2VlKSwKKyAgICBVNjRfQyAoMHg0MzQzMTE0MzIyNTI4NjYxKSwgVTY0X0MgKDB4YzdjNzNiYzc3NmZjOTNiMSksCisgICAgVTY0X0MgKDB4ZmNmY2Q3ZmNiMzJiZTU0ZiksIFU2NF9DICgweDA0MDQxMDA0MjAxNDA4MjQpLAorICAgIFU2NF9DICgweDUxNTE1OTUxYjIwOGEyZTMpLCBVNjRfQyAoMHg5OTk5NWU5OWJjYzcyZjI1KSwKKyAgICBVNjRfQyAoMHg2ZDZkYTk2ZDRmYzRkYTIyKSwgVTY0X0MgKDB4MGQwZDM0MGQ2ODM5MWE2NSksCisgICAgVTY0X0MgKDB4ZmFmYWNmZmE4MzM1ZTk3OSksIFU2NF9DICgweGRmZGY1YmRmYjY4NGEzNjkpLAorICAgIFU2NF9DICgweDdlN2VlNTdlZDc5YmZjYTkpLCBVNjRfQyAoMHgyNDI0OTAyNDNkYjQ0ODE5KSwKKyAgICBVNjRfQyAoMHgzYjNiZWMzYmM1ZDc3NmZlKSwgVTY0X0MgKDB4YWJhYjk2YWIzMTNkNGI5YSksCisgICAgVTY0X0MgKDB4Y2VjZTFmY2UzZWQxODFmMCksIFU2NF9DICgweDExMTE0NDExODg1NTIyOTkpLAorICAgIFU2NF9DICgweDhmOGYwNjhmMGM4OTAzODMpLCBVNjRfQyAoMHg0ZTRlMjU0ZTRhNmI5YzA0KSwKKyAgICBVNjRfQyAoMHhiN2I3ZTZiN2QxNTE3MzY2KSwgVTY0X0MgKDB4ZWJlYjhiZWIwYjYwY2JlMCksCisgICAgVTY0X0MgKDB4M2MzY2YwM2NmZGNjNzhjMSksIFU2NF9DICgweDgxODEzZTgxN2NiZjFmZmQpLAorICAgIFU2NF9DICgweDk0OTQ2YTk0ZDRmZTM1NDApLCBVNjRfQyAoMHhmN2Y3ZmJmN2ViMGNmMzFjKSwKKyAgICBVNjRfQyAoMHhiOWI5ZGViOWExNjc2ZjE4KSwgVTY0X0MgKDB4MTMxMzRjMTM5ODVmMjY4YiksCisgICAgVTY0X0MgKDB4MmMyY2IwMmM3ZDljNTg1MSksIFU2NF9DICgweGQzZDM2YmQzZDZiOGJiMDUpLAorICAgIFU2NF9DICgweGU3ZTdiYmU3NmI1Y2QzOGMpLCBVNjRfQyAoMHg2ZTZlYTU2ZTU3Y2JkYzM5KSwKKyAgICBVNjRfQyAoMHhjNGM0MzdjNDZlZjM5NWFhKSwgVTY0X0MgKDB4MDMwMzBjMDMxODBmMDYxYiksCisgICAgVTY0X0MgKDB4NTY1NjQ1NTY4YTEzYWNkYyksIFU2NF9DICgweDQ0NDQwZDQ0MWE0OTg4NWUpLAorICAgIFU2NF9DICgweDdmN2ZlMTdmZGY5ZWZlYTApLCBVNjRfQyAoMHhhOWE5OWVhOTIxMzc0Zjg4KSwKKyAgICBVNjRfQyAoMHgyYTJhYTgyYTRkODI1NDY3KSwgVTY0X0MgKDB4YmJiYmQ2YmJiMTZkNmIwYSksCisgICAgVTY0X0MgKDB4YzFjMTIzYzE0NmUyOWY4NyksIFU2NF9DICgweDUzNTM1MTUzYTIwMmE2ZjEpLAorICAgIFU2NF9DICgweGRjZGM1N2RjYWU4YmE1NzIpLCBVNjRfQyAoMHgwYjBiMmMwYjU4MjcxNjUzKSwKKyAgICBVNjRfQyAoMHg5ZDlkNGU5ZDljZDMyNzAxKSwgVTY0X0MgKDB4NmM2Y2FkNmM0N2MxZDgyYiksCisgICAgVTY0X0MgKDB4MzEzMWM0MzE5NWY1NjJhNCksIFU2NF9DICgweDc0NzRjZDc0ODdiOWU4ZjMpLAorICAgIFU2NF9DICgweGY2ZjZmZmY2ZTMwOWYxMTUpLCBVNjRfQyAoMHg0NjQ2MDU0NjBhNDM4YzRjKSwKKyAgICBVNjRfQyAoMHhhY2FjOGFhYzA5MjY0NWE1KSwgVTY0X0MgKDB4ODk4OTFlODkzYzk3MGZiNSksCisgICAgVTY0X0MgKDB4MTQxNDUwMTRhMDQ0MjhiNCksIFU2NF9DICgweGUxZTFhM2UxNWI0MmRmYmEpLAorICAgIFU2NF9DICgweDE2MTY1ODE2YjA0ZTJjYTYpLCBVNjRfQyAoMHgzYTNhZTgzYWNkZDI3NGY3KSwKKyAgICBVNjRfQyAoMHg2OTY5Yjk2OTZmZDBkMjA2KSwgVTY0X0MgKDB4MDkwOTI0MDk0ODJkMTI0MSksCisgICAgVTY0X0MgKDB4NzA3MGRkNzBhN2FkZTBkNyksIFU2NF9DICgweGI2YjZlMmI2ZDk1NDcxNmYpLAorICAgIFU2NF9DICgweGQwZDA2N2QwY2ViN2JkMWUpLCBVNjRfQyAoMHhlZGVkOTNlZDNiN2VjN2Q2KSwKKyAgICBVNjRfQyAoMHhjY2NjMTdjYzJlZGI4NWUyKSwgVTY0X0MgKDB4NDI0MjE1NDIyYTU3ODQ2OCksCisgICAgVTY0X0MgKDB4OTg5ODVhOThiNGMyMmQyYyksIFU2NF9DICgweGE0YTRhYWE0NDkwZTU1ZWQpLAorICAgIFU2NF9DICgweDI4MjhhMDI4NWQ4ODUwNzUpLCBVNjRfQyAoMHg1YzVjNmQ1Y2RhMzFiODg2KSwKKyAgICBVNjRfQyAoMHhmOGY4YzdmODkzM2ZlZDZiKSwgVTY0X0MgKDB4ODY4NjIyODY0NGE0MTFjMiksCisgIH07CisKK3N0YXRpYyBjb25zdCB1NjQgQzFbMjU2XSA9CisgIHsKKyAgICBVNjRfQyAoMHhkODE4MTg2MDE4YzA3ODMwKSwgVTY0X0MgKDB4MjYyMzIzOGMyMzA1YWY0NiksCisgICAgVTY0X0MgKDB4YjhjNmM2M2ZjNjdlZjk5MSksIFU2NF9DICgweGZiZThlODg3ZTgxMzZmY2QpLAorICAgIFU2NF9DICgweGNiODc4NzI2ODc0Y2ExMTMpLCBVNjRfQyAoMHgxMWI4YjhkYWI4YTk2MjZkKSwKKyAgICBVNjRfQyAoMHgwOTAxMDEwNDAxMDgwNTAyKSwgVTY0X0MgKDB4MGQ0ZjRmMjE0ZjQyNmU5ZSksCisgICAgVTY0X0MgKDB4OWIzNjM2ZDgzNmFkZWU2YyksIFU2NF9DICgweGZmYTZhNmEyYTY1OTA0NTEpLAorICAgIFU2NF9DICgweDBjZDJkMjZmZDJkZWJkYjkpLCBVNjRfQyAoMHgwZWY1ZjVmM2Y1ZmIwNmY3KSwKKyAgICBVNjRfQyAoMHg5Njc5NzlmOTc5ZWY4MGYyKSwgVTY0X0MgKDB4MzA2ZjZmYTE2ZjVmY2VkZSksCisgICAgVTY0X0MgKDB4NmQ5MTkxN2U5MWZjZWYzZiksIFU2NF9DICgweGY4NTI1MjU1NTJhYTA3YTQpLAorICAgIFU2NF9DICgweDQ3NjA2MDlkNjAyN2ZkYzApLCBVNjRfQyAoMHgzNWJjYmNjYWJjODk3NjY1KSwKKyAgICBVNjRfQyAoMHgzNzliOWI1NjliYWNjZDJiKSwgVTY0X0MgKDB4OGE4ZThlMDI4ZTA0OGMwMSksCisgICAgVTY0X0MgKDB4ZDJhM2EzYjZhMzcxMTU1YiksIFU2NF9DICgweDZjMGMwYzMwMGM2MDNjMTgpLAorICAgIFU2NF9DICgweDg0N2I3YmYxN2JmZjhhZjYpLCBVNjRfQyAoMHg4MDM1MzVkNDM1YjVlMTZhKSwKKyAgICBVNjRfQyAoMHhmNTFkMWQ3NDFkZTg2OTNhKSwgVTY0X0MgKDB4YjNlMGUwYTdlMDUzNDdkZCksCisgICAgVTY0X0MgKDB4MjFkN2Q3N2JkN2Y2YWNiMyksIFU2NF9DICgweDljYzJjMjJmYzI1ZWVkOTkpLAorICAgIFU2NF9DICgweDQzMmUyZWI4MmU2ZDk2NWMpLCBVNjRfQyAoMHgyOTRiNGIzMTRiNjI3YTk2KSwKKyAgICBVNjRfQyAoMHg1ZGZlZmVkZmZlYTMyMWUxKSwgVTY0X0MgKDB4ZDU1NzU3NDE1NzgyMTZhZSksCisgICAgVTY0X0MgKDB4YmQxNTE1NTQxNWE4NDEyYSksIFU2NF9DICgweGU4Nzc3N2MxNzc5ZmI2ZWUpLAorICAgIFU2NF9DICgweDkyMzczN2RjMzdhNWViNmUpLCBVNjRfQyAoMHg5ZWU1ZTViM2U1N2I1NmQ3KSwKKyAgICBVNjRfQyAoMHgxMzlmOWY0NjlmOGNkOTIzKSwgVTY0X0MgKDB4MjNmMGYwZTdmMGQzMTdmZCksCisgICAgVTY0X0MgKDB4MjA0YTRhMzU0YTZhN2Y5NCksIFU2NF9DICgweDQ0ZGFkYTRmZGE5ZTk1YTkpLAorICAgIFU2NF9DICgweGEyNTg1ODdkNThmYTI1YjApLCBVNjRfQyAoMHhjZmM5YzkwM2M5MDZjYThmKSwKKyAgICBVNjRfQyAoMHg3YzI5MjlhNDI5NTU4ZDUyKSwgVTY0X0MgKDB4NWEwYTBhMjgwYTUwMjIxNCksCisgICAgVTY0X0MgKDB4NTBiMWIxZmViMWUxNGY3ZiksIFU2NF9DICgweGM5YTBhMGJhYTA2OTFhNWQpLAorICAgIFU2NF9DICgweDE0NmI2YmIxNmI3ZmRhZDYpLCBVNjRfQyAoMHhkOTg1ODUyZTg1NWNhYjE3KSwKKyAgICBVNjRfQyAoMHgzY2JkYmRjZWJkODE3MzY3KSwgVTY0X0MgKDB4OGY1ZDVkNjk1ZGQyMzRiYSksCisgICAgVTY0X0MgKDB4OTAxMDEwNDAxMDgwNTAyMCksIFU2NF9DICgweDA3ZjRmNGY3ZjRmMzAzZjUpLAorICAgIFU2NF9DICgweGRkY2JjYjBiY2IxNmMwOGIpLCBVNjRfQyAoMHhkMzNlM2VmODNlZWRjNjdjKSwKKyAgICBVNjRfQyAoMHgyZDA1MDUxNDA1MjgxMTBhKSwgVTY0X0MgKDB4Nzg2NzY3ODE2NzFmZTZjZSksCisgICAgVTY0X0MgKDB4OTdlNGU0YjdlNDczNTNkNSksIFU2NF9DICgweDAyMjcyNzljMjcyNWJiNGUpLAorICAgIFU2NF9DICgweDczNDE0MTE5NDEzMjU4ODIpLCBVNjRfQyAoMHhhNzhiOGIxNjhiMmM5ZDBiKSwKKyAgICBVNjRfQyAoMHhmNmE3YTdhNmE3NTEwMTUzKSwgVTY0X0MgKDB4YjI3ZDdkZTk3ZGNmOTRmYSksCisgICAgVTY0X0MgKDB4NDk5NTk1NmU5NWRjZmIzNyksIFU2NF9DICgweDU2ZDhkODQ3ZDg4ZTlmYWQpLAorICAgIFU2NF9DICgweDcwZmJmYmNiZmI4YjMwZWIpLCBVNjRfQyAoMHhjZGVlZWU5ZmVlMjM3MWMxKSwKKyAgICBVNjRfQyAoMHhiYjdjN2NlZDdjYzc5MWY4KSwgVTY0X0MgKDB4NzE2NjY2ODU2NjE3ZTNjYyksCisgICAgVTY0X0MgKDB4N2JkZGRkNTNkZGE2OGVhNyksIFU2NF9DICgweGFmMTcxNzVjMTdiODRiMmUpLAorICAgIFU2NF9DICgweDQ1NDc0NzAxNDcwMjQ2OGUpLCBVNjRfQyAoMHgxYTllOWU0MjllODRkYzIxKSwKKyAgICBVNjRfQyAoMHhkNGNhY2EwZmNhMWVjNTg5KSwgVTY0X0MgKDB4NTgyZDJkYjQyZDc1OTk1YSksCisgICAgVTY0X0MgKDB4MmViZmJmYzZiZjkxNzk2MyksIFU2NF9DICgweDNmMDcwNzFjMDczODFiMGUpLAorICAgIFU2NF9DICgweGFjYWRhZDhlYWQwMTIzNDcpLCBVNjRfQyAoMHhiMDVhNWE3NTVhZWEyZmI0KSwKKyAgICBVNjRfQyAoMHhlZjgzODMzNjgzNmNiNTFiKSwgVTY0X0MgKDB4YjYzMzMzY2MzMzg1ZmY2NiksCisgICAgVTY0X0MgKDB4NWM2MzYzOTE2MzNmZjJjNiksIFU2NF9DICgweDEyMDIwMjA4MDIxMDBhMDQpLAorICAgIFU2NF9DICgweDkzYWFhYTkyYWEzOTM4NDkpLCBVNjRfQyAoMHhkZTcxNzFkOTcxYWZhOGUyKSwKKyAgICBVNjRfQyAoMHhjNmM4YzgwN2M4MGVjZjhkKSwgVTY0X0MgKDB4ZDExOTE5NjQxOWM4N2QzMiksCisgICAgVTY0X0MgKDB4M2I0OTQ5Mzk0OTcyNzA5MiksIFU2NF9DICgweDVmZDlkOTQzZDk4NjlhYWYpLAorICAgIFU2NF9DICgweDMxZjJmMmVmZjJjMzFkZjkpLCBVNjRfQyAoMHhhOGUzZTNhYmUzNGI0OGRiKSwKKyAgICBVNjRfQyAoMHhiOTViNWI3MTViZTIyYWI2KSwgVTY0X0MgKDB4YmM4ODg4MWE4ODM0OTIwZCksCisgICAgVTY0X0MgKDB4M2U5YTlhNTI5YWE0YzgyOSksIFU2NF9DICgweDBiMjYyNjk4MjYyZGJlNGMpLAorICAgIFU2NF9DICgweGJmMzIzMmM4MzI4ZGZhNjQpLCBVNjRfQyAoMHg1OWIwYjBmYWIwZTk0YTdkKSwKKyAgICBVNjRfQyAoMHhmMmU5ZTk4M2U5MWI2YWNmKSwgVTY0X0MgKDB4NzcwZjBmM2MwZjc4MzMxZSksCisgICAgVTY0X0MgKDB4MzNkNWQ1NzNkNWU2YTZiNyksIFU2NF9DICgweGY0ODA4MDNhODA3NGJhMWQpLAorICAgIFU2NF9DICgweDI3YmViZWMyYmU5OTdjNjEpLCBVNjRfQyAoMHhlYmNkY2QxM2NkMjZkZTg3KSwKKyAgICBVNjRfQyAoMHg4OTM0MzRkMDM0YmRlNDY4KSwgVTY0X0MgKDB4MzI0ODQ4M2Q0ODdhNzU5MCksCisgICAgVTY0X0MgKDB4NTRmZmZmZGJmZmFiMjRlMyksIFU2NF9DICgweDhkN2E3YWY1N2FmNzhmZjQpLAorICAgIFU2NF9DICgweDY0OTA5MDdhOTBmNGVhM2QpLCBVNjRfQyAoMHg5ZDVmNWY2MTVmYzIzZWJlKSwKKyAgICBVNjRfQyAoMHgzZDIwMjA4MDIwMWRhMDQwKSwgVTY0X0MgKDB4MGY2ODY4YmQ2ODY3ZDVkMCksCisgICAgVTY0X0MgKDB4Y2ExYTFhNjgxYWQwNzIzNCksIFU2NF9DICgweGI3YWVhZTgyYWUxOTJjNDEpLAorICAgIFU2NF9DICgweDdkYjRiNGVhYjRjOTVlNzUpLCBVNjRfQyAoMHhjZTU0NTQ0ZDU0OWExOWE4KSwKKyAgICBVNjRfQyAoMHg3ZjkzOTM3NjkzZWNlNTNiKSwgVTY0X0MgKDB4MmYyMjIyODgyMjBkYWE0NCksCisgICAgVTY0X0MgKDB4NjM2NDY0OGQ2NDA3ZTljOCksIFU2NF9DICgweDJhZjFmMWUzZjFkYjEyZmYpLAorICAgIFU2NF9DICgweGNjNzM3M2QxNzNiZmEyZTYpLCBVNjRfQyAoMHg4MjEyMTI0ODEyOTA1YTI0KSwKKyAgICBVNjRfQyAoMHg3YTQwNDAxZDQwM2E1ZDgwKSwgVTY0X0MgKDB4NDgwODA4MjAwODQwMjgxMCksCisgICAgVTY0X0MgKDB4OTVjM2MzMmJjMzU2ZTg5YiksIFU2NF9DICgweGRmZWNlYzk3ZWMzMzdiYzUpLAorICAgIFU2NF9DICgweDRkZGJkYjRiZGI5NjkwYWIpLCBVNjRfQyAoMHhjMGExYTFiZWExNjExZjVmKSwKKyAgICBVNjRfQyAoMHg5MThkOGQwZThkMWM4MzA3KSwgVTY0X0MgKDB4YzgzZDNkZjQzZGY1Yzk3YSksCisgICAgVTY0X0MgKDB4NWI5Nzk3NjY5N2NjZjEzMyksIFU2NF9DICgweDAwMDAwMDAwMDAwMDAwMDApLAorICAgIFU2NF9DICgweGY5Y2ZjZjFiY2YzNmQ0ODMpLCBVNjRfQyAoMHg2ZTJiMmJhYzJiNDU4NzU2KSwKKyAgICBVNjRfQyAoMHhlMTc2NzZjNTc2OTdiM2VjKSwgVTY0X0MgKDB4ZTY4MjgyMzI4MjY0YjAxOSksCisgICAgVTY0X0MgKDB4MjhkNmQ2N2ZkNmZlYTliMSksIFU2NF9DICgweGMzMWIxYjZjMWJkODc3MzYpLAorICAgIFU2NF9DICgweDc0YjViNWVlYjVjMTViNzcpLCBVNjRfQyAoMHhiZWFmYWY4NmFmMTEyOTQzKSwKKyAgICBVNjRfQyAoMHgxZDZhNmFiNTZhNzdkZmQ0KSwgVTY0X0MgKDB4ZWE1MDUwNWQ1MGJhMGRhMCksCisgICAgVTY0X0MgKDB4NTc0NTQ1MDk0NTEyNGM4YSksIFU2NF9DICgweDM4ZjNmM2ViZjNjYjE4ZmIpLAorICAgIFU2NF9DICgweGFkMzAzMGMwMzA5ZGYwNjApLCBVNjRfQyAoMHhjNGVmZWY5YmVmMmI3NGMzKSwKKyAgICBVNjRfQyAoMHhkYTNmM2ZmYzNmZTVjMzdlKSwgVTY0X0MgKDB4Yzc1NTU1NDk1NTkyMWNhYSksCisgICAgVTY0X0MgKDB4ZGJhMmEyYjJhMjc5MTA1OSksIFU2NF9DICgweGU5ZWFlYThmZWEwMzY1YzkpLAorICAgIFU2NF9DICgweDZhNjU2NTg5NjUwZmVjY2EpLCBVNjRfQyAoMHgwM2JhYmFkMmJhYjk2ODY5KSwKKyAgICBVNjRfQyAoMHg0YTJmMmZiYzJmNjU5MzVlKSwgVTY0X0MgKDB4OGVjMGMwMjdjMDRlZTc5ZCksCisgICAgVTY0X0MgKDB4NjBkZWRlNWZkZWJlODFhMSksIFU2NF9DICgweGZjMWMxYzcwMWNlMDZjMzgpLAorICAgIFU2NF9DICgweDQ2ZmRmZGQzZmRiYjJlZTcpLCBVNjRfQyAoMHgxZjRkNGQyOTRkNTI2NDlhKSwKKyAgICBVNjRfQyAoMHg3NjkyOTI3MjkyZTRlMDM5KSwgVTY0X0MgKDB4ZmE3NTc1Yzk3NThmYmNlYSksCisgICAgVTY0X0MgKDB4MzYwNjA2MTgwNjMwMWUwYyksIFU2NF9DICgweGFlOGE4YTEyOGEyNDk4MDkpLAorICAgIFU2NF9DICgweDRiYjJiMmYyYjJmOTQwNzkpLCBVNjRfQyAoMHg4NWU2ZTZiZmU2NjM1OWQxKSwKKyAgICBVNjRfQyAoMHg3ZTBlMGUzODBlNzAzNjFjKSwgVTY0X0MgKDB4ZTcxZjFmN2MxZmY4NjMzZSksCisgICAgVTY0X0MgKDB4NTU2MjYyOTU2MjM3ZjdjNCksIFU2NF9DICgweDNhZDRkNDc3ZDRlZWEzYjUpLAorICAgIFU2NF9DICgweDgxYThhODlhYTgyOTMyNGQpLCBVNjRfQyAoMHg1Mjk2OTY2Mjk2YzRmNDMxKSwKKyAgICBVNjRfQyAoMHg2MmY5ZjljM2Y5OWIzYWVmKSwgVTY0X0MgKDB4YTNjNWM1MzNjNTY2ZjY5NyksCisgICAgVTY0X0MgKDB4MTAyNTI1OTQyNTM1YjE0YSksIFU2NF9DICgweGFiNTk1OTc5NTlmMjIwYjIpLAorICAgIFU2NF9DICgweGQwODQ4NDJhODQ1NGFlMTUpLCBVNjRfQyAoMHhjNTcyNzJkNTcyYjdhN2U0KSwKKyAgICBVNjRfQyAoMHhlYzM5MzllNDM5ZDVkZDcyKSwgVTY0X0MgKDB4MTY0YzRjMmQ0YzVhNjE5OCksCisgICAgVTY0X0MgKDB4OTQ1ZTVlNjU1ZWNhM2JiYyksIFU2NF9DICgweDlmNzg3OGZkNzhlNzg1ZjApLAorICAgIFU2NF9DICgweGU1MzgzOGUwMzhkZGQ4NzApLCBVNjRfQyAoMHg5ODhjOGMwYThjMTQ4NjA1KSwKKyAgICBVNjRfQyAoMHgxN2QxZDE2M2QxYzZiMmJmKSwgVTY0X0MgKDB4ZTRhNWE1YWVhNTQxMGI1NyksCisgICAgVTY0X0MgKDB4YTFlMmUyYWZlMjQzNGRkOSksIFU2NF9DICgweDRlNjE2MTk5NjEyZmY4YzIpLAorICAgIFU2NF9DICgweDQyYjNiM2Y2YjNmMTQ1N2IpLCBVNjRfQyAoMHgzNDIxMjE4NDIxMTVhNTQyKSwKKyAgICBVNjRfQyAoMHgwODljOWM0YTljOTRkNjI1KSwgVTY0X0MgKDB4ZWUxZTFlNzgxZWYwNjYzYyksCisgICAgVTY0X0MgKDB4NjE0MzQzMTE0MzIyNTI4NiksIFU2NF9DICgweGIxYzdjNzNiYzc3NmZjOTMpLAorICAgIFU2NF9DICgweDRmZmNmY2Q3ZmNiMzJiZTUpLCBVNjRfQyAoMHgyNDA0MDQxMDA0MjAxNDA4KSwKKyAgICBVNjRfQyAoMHhlMzUxNTE1OTUxYjIwOGEyKSwgVTY0X0MgKDB4MjU5OTk5NWU5OWJjYzcyZiksCisgICAgVTY0X0MgKDB4MjI2ZDZkYTk2ZDRmYzRkYSksIFU2NF9DICgweDY1MGQwZDM0MGQ2ODM5MWEpLAorICAgIFU2NF9DICgweDc5ZmFmYWNmZmE4MzM1ZTkpLCBVNjRfQyAoMHg2OWRmZGY1YmRmYjY4NGEzKSwKKyAgICBVNjRfQyAoMHhhOTdlN2VlNTdlZDc5YmZjKSwgVTY0X0MgKDB4MTkyNDI0OTAyNDNkYjQ0OCksCisgICAgVTY0X0MgKDB4ZmUzYjNiZWMzYmM1ZDc3NiksIFU2NF9DICgweDlhYWJhYjk2YWIzMTNkNGIpLAorICAgIFU2NF9DICgweGYwY2VjZTFmY2UzZWQxODEpLCBVNjRfQyAoMHg5OTExMTE0NDExODg1NTIyKSwKKyAgICBVNjRfQyAoMHg4MzhmOGYwNjhmMGM4OTAzKSwgVTY0X0MgKDB4MDQ0ZTRlMjU0ZTRhNmI5YyksCisgICAgVTY0X0MgKDB4NjZiN2I3ZTZiN2QxNTE3MyksIFU2NF9DICgweGUwZWJlYjhiZWIwYjYwY2IpLAorICAgIFU2NF9DICgweGMxM2MzY2YwM2NmZGNjNzgpLCBVNjRfQyAoMHhmZDgxODEzZTgxN2NiZjFmKSwKKyAgICBVNjRfQyAoMHg0MDk0OTQ2YTk0ZDRmZTM1KSwgVTY0X0MgKDB4MWNmN2Y3ZmJmN2ViMGNmMyksCisgICAgVTY0X0MgKDB4MThiOWI5ZGViOWExNjc2ZiksIFU2NF9DICgweDhiMTMxMzRjMTM5ODVmMjYpLAorICAgIFU2NF9DICgweDUxMmMyY2IwMmM3ZDljNTgpLCBVNjRfQyAoMHgwNWQzZDM2YmQzZDZiOGJiKSwKKyAgICBVNjRfQyAoMHg4Y2U3ZTdiYmU3NmI1Y2QzKSwgVTY0X0MgKDB4Mzk2ZTZlYTU2ZTU3Y2JkYyksCisgICAgVTY0X0MgKDB4YWFjNGM0MzdjNDZlZjM5NSksIFU2NF9DICgweDFiMDMwMzBjMDMxODBmMDYpLAorICAgIFU2NF9DICgweGRjNTY1NjQ1NTY4YTEzYWMpLCBVNjRfQyAoMHg1ZTQ0NDQwZDQ0MWE0OTg4KSwKKyAgICBVNjRfQyAoMHhhMDdmN2ZlMTdmZGY5ZWZlKSwgVTY0X0MgKDB4ODhhOWE5OWVhOTIxMzc0ZiksCisgICAgVTY0X0MgKDB4NjcyYTJhYTgyYTRkODI1NCksIFU2NF9DICgweDBhYmJiYmQ2YmJiMTZkNmIpLAorICAgIFU2NF9DICgweDg3YzFjMTIzYzE0NmUyOWYpLCBVNjRfQyAoMHhmMTUzNTM1MTUzYTIwMmE2KSwKKyAgICBVNjRfQyAoMHg3MmRjZGM1N2RjYWU4YmE1KSwgVTY0X0MgKDB4NTMwYjBiMmMwYjU4MjcxNiksCisgICAgVTY0X0MgKDB4MDE5ZDlkNGU5ZDljZDMyNyksIFU2NF9DICgweDJiNmM2Y2FkNmM0N2MxZDgpLAorICAgIFU2NF9DICgweGE0MzEzMWM0MzE5NWY1NjIpLCBVNjRfQyAoMHhmMzc0NzRjZDc0ODdiOWU4KSwKKyAgICBVNjRfQyAoMHgxNWY2ZjZmZmY2ZTMwOWYxKSwgVTY0X0MgKDB4NGM0NjQ2MDU0NjBhNDM4YyksCisgICAgVTY0X0MgKDB4YTVhY2FjOGFhYzA5MjY0NSksIFU2NF9DICgweGI1ODk4OTFlODkzYzk3MGYpLAorICAgIFU2NF9DICgweGI0MTQxNDUwMTRhMDQ0MjgpLCBVNjRfQyAoMHhiYWUxZTFhM2UxNWI0MmRmKSwKKyAgICBVNjRfQyAoMHhhNjE2MTY1ODE2YjA0ZTJjKSwgVTY0X0MgKDB4ZjczYTNhZTgzYWNkZDI3NCksCisgICAgVTY0X0MgKDB4MDY2OTY5Yjk2OTZmZDBkMiksIFU2NF9DICgweDQxMDkwOTI0MDk0ODJkMTIpLAorICAgIFU2NF9DICgweGQ3NzA3MGRkNzBhN2FkZTApLCBVNjRfQyAoMHg2ZmI2YjZlMmI2ZDk1NDcxKSwKKyAgICBVNjRfQyAoMHgxZWQwZDA2N2QwY2ViN2JkKSwgVTY0X0MgKDB4ZDZlZGVkOTNlZDNiN2VjNyksCisgICAgVTY0X0MgKDB4ZTJjY2NjMTdjYzJlZGI4NSksIFU2NF9DICgweDY4NDI0MjE1NDIyYTU3ODQpLAorICAgIFU2NF9DICgweDJjOTg5ODVhOThiNGMyMmQpLCBVNjRfQyAoMHhlZGE0YTRhYWE0NDkwZTU1KSwKKyAgICBVNjRfQyAoMHg3NTI4MjhhMDI4NWQ4ODUwKSwgVTY0X0MgKDB4ODY1YzVjNmQ1Y2RhMzFiOCksCisgICAgVTY0X0MgKDB4NmJmOGY4YzdmODkzM2ZlZCksIFU2NF9DICgweGMyODY4NjIyODY0NGE0MTEpLAorICB9OworCitzdGF0aWMgY29uc3QgdTY0IEMyWzI1Nl0gPQorICB7CisgICAgVTY0X0MgKDB4MzBkODE4MTg2MDE4YzA3OCksIFU2NF9DICgweDQ2MjYyMzIzOGMyMzA1YWYpLAorICAgIFU2NF9DICgweDkxYjhjNmM2M2ZjNjdlZjkpLCBVNjRfQyAoMHhjZGZiZThlODg3ZTgxMzZmKSwKKyAgICBVNjRfQyAoMHgxM2NiODc4NzI2ODc0Y2ExKSwgVTY0X0MgKDB4NmQxMWI4YjhkYWI4YTk2MiksCisgICAgVTY0X0MgKDB4MDIwOTAxMDEwNDAxMDgwNSksIFU2NF9DICgweDllMGQ0ZjRmMjE0ZjQyNmUpLAorICAgIFU2NF9DICgweDZjOWIzNjM2ZDgzNmFkZWUpLCBVNjRfQyAoMHg1MWZmYTZhNmEyYTY1OTA0KSwKKyAgICBVNjRfQyAoMHhiOTBjZDJkMjZmZDJkZWJkKSwgVTY0X0MgKDB4ZjcwZWY1ZjVmM2Y1ZmIwNiksCisgICAgVTY0X0MgKDB4ZjI5Njc5NzlmOTc5ZWY4MCksIFU2NF9DICgweGRlMzA2ZjZmYTE2ZjVmY2UpLAorICAgIFU2NF9DICgweDNmNmQ5MTkxN2U5MWZjZWYpLCBVNjRfQyAoMHhhNGY4NTI1MjU1NTJhYTA3KSwKKyAgICBVNjRfQyAoMHhjMDQ3NjA2MDlkNjAyN2ZkKSwgVTY0X0MgKDB4NjUzNWJjYmNjYWJjODk3NiksCisgICAgVTY0X0MgKDB4MmIzNzliOWI1NjliYWNjZCksIFU2NF9DICgweDAxOGE4ZThlMDI4ZTA0OGMpLAorICAgIFU2NF9DICgweDViZDJhM2EzYjZhMzcxMTUpLCBVNjRfQyAoMHgxODZjMGMwYzMwMGM2MDNjKSwKKyAgICBVNjRfQyAoMHhmNjg0N2I3YmYxN2JmZjhhKSwgVTY0X0MgKDB4NmE4MDM1MzVkNDM1YjVlMSksCisgICAgVTY0X0MgKDB4M2FmNTFkMWQ3NDFkZTg2OSksIFU2NF9DICgweGRkYjNlMGUwYTdlMDUzNDcpLAorICAgIFU2NF9DICgweGIzMjFkN2Q3N2JkN2Y2YWMpLCBVNjRfQyAoMHg5OTljYzJjMjJmYzI1ZWVkKSwKKyAgICBVNjRfQyAoMHg1YzQzMmUyZWI4MmU2ZDk2KSwgVTY0X0MgKDB4OTYyOTRiNGIzMTRiNjI3YSksCisgICAgVTY0X0MgKDB4ZTE1ZGZlZmVkZmZlYTMyMSksIFU2NF9DICgweGFlZDU1NzU3NDE1NzgyMTYpLAorICAgIFU2NF9DICgweDJhYmQxNTE1NTQxNWE4NDEpLCBVNjRfQyAoMHhlZWU4Nzc3N2MxNzc5ZmI2KSwKKyAgICBVNjRfQyAoMHg2ZTkyMzczN2RjMzdhNWViKSwgVTY0X0MgKDB4ZDc5ZWU1ZTViM2U1N2I1NiksCisgICAgVTY0X0MgKDB4MjMxMzlmOWY0NjlmOGNkOSksIFU2NF9DICgweGZkMjNmMGYwZTdmMGQzMTcpLAorICAgIFU2NF9DICgweDk0MjA0YTRhMzU0YTZhN2YpLCBVNjRfQyAoMHhhOTQ0ZGFkYTRmZGE5ZTk1KSwKKyAgICBVNjRfQyAoMHhiMGEyNTg1ODdkNThmYTI1KSwgVTY0X0MgKDB4OGZjZmM5YzkwM2M5MDZjYSksCisgICAgVTY0X0MgKDB4NTI3YzI5MjlhNDI5NTU4ZCksIFU2NF9DICgweDE0NWEwYTBhMjgwYTUwMjIpLAorICAgIFU2NF9DICgweDdmNTBiMWIxZmViMWUxNGYpLCBVNjRfQyAoMHg1ZGM5YTBhMGJhYTA2OTFhKSwKKyAgICBVNjRfQyAoMHhkNjE0NmI2YmIxNmI3ZmRhKSwgVTY0X0MgKDB4MTdkOTg1ODUyZTg1NWNhYiksCisgICAgVTY0X0MgKDB4NjczY2JkYmRjZWJkODE3MyksIFU2NF9DICgweGJhOGY1ZDVkNjk1ZGQyMzQpLAorICAgIFU2NF9DICgweDIwOTAxMDEwNDAxMDgwNTApLCBVNjRfQyAoMHhmNTA3ZjRmNGY3ZjRmMzAzKSwKKyAgICBVNjRfQyAoMHg4YmRkY2JjYjBiY2IxNmMwKSwgVTY0X0MgKDB4N2NkMzNlM2VmODNlZWRjNiksCisgICAgVTY0X0MgKDB4MGEyZDA1MDUxNDA1MjgxMSksIFU2NF9DICgweGNlNzg2NzY3ODE2NzFmZTYpLAorICAgIFU2NF9DICgweGQ1OTdlNGU0YjdlNDczNTMpLCBVNjRfQyAoMHg0ZTAyMjcyNzljMjcyNWJiKSwKKyAgICBVNjRfQyAoMHg4MjczNDE0MTE5NDEzMjU4KSwgVTY0X0MgKDB4MGJhNzhiOGIxNjhiMmM5ZCksCisgICAgVTY0X0MgKDB4NTNmNmE3YTdhNmE3NTEwMSksIFU2NF9DICgweGZhYjI3ZDdkZTk3ZGNmOTQpLAorICAgIFU2NF9DICgweDM3NDk5NTk1NmU5NWRjZmIpLCBVNjRfQyAoMHhhZDU2ZDhkODQ3ZDg4ZTlmKSwKKyAgICBVNjRfQyAoMHhlYjcwZmJmYmNiZmI4YjMwKSwgVTY0X0MgKDB4YzFjZGVlZWU5ZmVlMjM3MSksCisgICAgVTY0X0MgKDB4ZjhiYjdjN2NlZDdjYzc5MSksIFU2NF9DICgweGNjNzE2NjY2ODU2NjE3ZTMpLAorICAgIFU2NF9DICgweGE3N2JkZGRkNTNkZGE2OGUpLCBVNjRfQyAoMHgyZWFmMTcxNzVjMTdiODRiKSwKKyAgICBVNjRfQyAoMHg4ZTQ1NDc0NzAxNDcwMjQ2KSwgVTY0X0MgKDB4MjExYTllOWU0MjllODRkYyksCisgICAgVTY0X0MgKDB4ODlkNGNhY2EwZmNhMWVjNSksIFU2NF9DICgweDVhNTgyZDJkYjQyZDc1OTkpLAorICAgIFU2NF9DICgweDYzMmViZmJmYzZiZjkxNzkpLCBVNjRfQyAoMHgwZTNmMDcwNzFjMDczODFiKSwKKyAgICBVNjRfQyAoMHg0N2FjYWRhZDhlYWQwMTIzKSwgVTY0X0MgKDB4YjRiMDVhNWE3NTVhZWEyZiksCisgICAgVTY0X0MgKDB4MWJlZjgzODMzNjgzNmNiNSksIFU2NF9DICgweDY2YjYzMzMzY2MzMzg1ZmYpLAorICAgIFU2NF9DICgweGM2NWM2MzYzOTE2MzNmZjIpLCBVNjRfQyAoMHgwNDEyMDIwMjA4MDIxMDBhKSwKKyAgICBVNjRfQyAoMHg0OTkzYWFhYTkyYWEzOTM4KSwgVTY0X0MgKDB4ZTJkZTcxNzFkOTcxYWZhOCksCisgICAgVTY0X0MgKDB4OGRjNmM4YzgwN2M4MGVjZiksIFU2NF9DICgweDMyZDExOTE5NjQxOWM4N2QpLAorICAgIFU2NF9DICgweDkyM2I0OTQ5Mzk0OTcyNzApLCBVNjRfQyAoMHhhZjVmZDlkOTQzZDk4NjlhKSwKKyAgICBVNjRfQyAoMHhmOTMxZjJmMmVmZjJjMzFkKSwgVTY0X0MgKDB4ZGJhOGUzZTNhYmUzNGI0OCksCisgICAgVTY0X0MgKDB4YjZiOTViNWI3MTViZTIyYSksIFU2NF9DICgweDBkYmM4ODg4MWE4ODM0OTIpLAorICAgIFU2NF9DICgweDI5M2U5YTlhNTI5YWE0YzgpLCBVNjRfQyAoMHg0YzBiMjYyNjk4MjYyZGJlKSwKKyAgICBVNjRfQyAoMHg2NGJmMzIzMmM4MzI4ZGZhKSwgVTY0X0MgKDB4N2Q1OWIwYjBmYWIwZTk0YSksCisgICAgVTY0X0MgKDB4Y2ZmMmU5ZTk4M2U5MWI2YSksIFU2NF9DICgweDFlNzcwZjBmM2MwZjc4MzMpLAorICAgIFU2NF9DICgweGI3MzNkNWQ1NzNkNWU2YTYpLCBVNjRfQyAoMHgxZGY0ODA4MDNhODA3NGJhKSwKKyAgICBVNjRfQyAoMHg2MTI3YmViZWMyYmU5OTdjKSwgVTY0X0MgKDB4ODdlYmNkY2QxM2NkMjZkZSksCisgICAgVTY0X0MgKDB4Njg4OTM0MzRkMDM0YmRlNCksIFU2NF9DICgweDkwMzI0ODQ4M2Q0ODdhNzUpLAorICAgIFU2NF9DICgweGUzNTRmZmZmZGJmZmFiMjQpLCBVNjRfQyAoMHhmNDhkN2E3YWY1N2FmNzhmKSwKKyAgICBVNjRfQyAoMHgzZDY0OTA5MDdhOTBmNGVhKSwgVTY0X0MgKDB4YmU5ZDVmNWY2MTVmYzIzZSksCisgICAgVTY0X0MgKDB4NDAzZDIwMjA4MDIwMWRhMCksIFU2NF9DICgweGQwMGY2ODY4YmQ2ODY3ZDUpLAorICAgIFU2NF9DICgweDM0Y2ExYTFhNjgxYWQwNzIpLCBVNjRfQyAoMHg0MWI3YWVhZTgyYWUxOTJjKSwKKyAgICBVNjRfQyAoMHg3NTdkYjRiNGVhYjRjOTVlKSwgVTY0X0MgKDB4YThjZTU0NTQ0ZDU0OWExOSksCisgICAgVTY0X0MgKDB4M2I3ZjkzOTM3NjkzZWNlNSksIFU2NF9DICgweDQ0MmYyMjIyODgyMjBkYWEpLAorICAgIFU2NF9DICgweGM4NjM2NDY0OGQ2NDA3ZTkpLCBVNjRfQyAoMHhmZjJhZjFmMWUzZjFkYjEyKSwKKyAgICBVNjRfQyAoMHhlNmNjNzM3M2QxNzNiZmEyKSwgVTY0X0MgKDB4MjQ4MjEyMTI0ODEyOTA1YSksCisgICAgVTY0X0MgKDB4ODA3YTQwNDAxZDQwM2E1ZCksIFU2NF9DICgweDEwNDgwODA4MjAwODQwMjgpLAorICAgIFU2NF9DICgweDliOTVjM2MzMmJjMzU2ZTgpLCBVNjRfQyAoMHhjNWRmZWNlYzk3ZWMzMzdiKSwKKyAgICBVNjRfQyAoMHhhYjRkZGJkYjRiZGI5NjkwKSwgVTY0X0MgKDB4NWZjMGExYTFiZWExNjExZiksCisgICAgVTY0X0MgKDB4MDc5MThkOGQwZThkMWM4MyksIFU2NF9DICgweDdhYzgzZDNkZjQzZGY1YzkpLAorICAgIFU2NF9DICgweDMzNWI5Nzk3NjY5N2NjZjEpLCBVNjRfQyAoMHgwMDAwMDAwMDAwMDAwMDAwKSwKKyAgICBVNjRfQyAoMHg4M2Y5Y2ZjZjFiY2YzNmQ0KSwgVTY0X0MgKDB4NTY2ZTJiMmJhYzJiNDU4NyksCisgICAgVTY0X0MgKDB4ZWNlMTc2NzZjNTc2OTdiMyksIFU2NF9DICgweDE5ZTY4MjgyMzI4MjY0YjApLAorICAgIFU2NF9DICgweGIxMjhkNmQ2N2ZkNmZlYTkpLCBVNjRfQyAoMHgzNmMzMWIxYjZjMWJkODc3KSwKKyAgICBVNjRfQyAoMHg3Nzc0YjViNWVlYjVjMTViKSwgVTY0X0MgKDB4NDNiZWFmYWY4NmFmMTEyOSksCisgICAgVTY0X0MgKDB4ZDQxZDZhNmFiNTZhNzdkZiksIFU2NF9DICgweGEwZWE1MDUwNWQ1MGJhMGQpLAorICAgIFU2NF9DICgweDhhNTc0NTQ1MDk0NTEyNGMpLCBVNjRfQyAoMHhmYjM4ZjNmM2ViZjNjYjE4KSwKKyAgICBVNjRfQyAoMHg2MGFkMzAzMGMwMzA5ZGYwKSwgVTY0X0MgKDB4YzNjNGVmZWY5YmVmMmI3NCksCisgICAgVTY0X0MgKDB4N2VkYTNmM2ZmYzNmZTVjMyksIFU2NF9DICgweGFhYzc1NTU1NDk1NTkyMWMpLAorICAgIFU2NF9DICgweDU5ZGJhMmEyYjJhMjc5MTApLCBVNjRfQyAoMHhjOWU5ZWFlYThmZWEwMzY1KSwKKyAgICBVNjRfQyAoMHhjYTZhNjU2NTg5NjUwZmVjKSwgVTY0X0MgKDB4NjkwM2JhYmFkMmJhYjk2OCksCisgICAgVTY0X0MgKDB4NWU0YTJmMmZiYzJmNjU5MyksIFU2NF9DICgweDlkOGVjMGMwMjdjMDRlZTcpLAorICAgIFU2NF9DICgweGExNjBkZWRlNWZkZWJlODEpLCBVNjRfQyAoMHgzOGZjMWMxYzcwMWNlMDZjKSwKKyAgICBVNjRfQyAoMHhlNzQ2ZmRmZGQzZmRiYjJlKSwgVTY0X0MgKDB4OWExZjRkNGQyOTRkNTI2NCksCisgICAgVTY0X0MgKDB4Mzk3NjkyOTI3MjkyZTRlMCksIFU2NF9DICgweGVhZmE3NTc1Yzk3NThmYmMpLAorICAgIFU2NF9DICgweDBjMzYwNjA2MTgwNjMwMWUpLCBVNjRfQyAoMHgwOWFlOGE4YTEyOGEyNDk4KSwKKyAgICBVNjRfQyAoMHg3OTRiYjJiMmYyYjJmOTQwKSwgVTY0X0MgKDB4ZDE4NWU2ZTZiZmU2NjM1OSksCisgICAgVTY0X0MgKDB4MWM3ZTBlMGUzODBlNzAzNiksIFU2NF9DICgweDNlZTcxZjFmN2MxZmY4NjMpLAorICAgIFU2NF9DICgweGM0NTU2MjYyOTU2MjM3ZjcpLCBVNjRfQyAoMHhiNTNhZDRkNDc3ZDRlZWEzKSwKKyAgICBVNjRfQyAoMHg0ZDgxYThhODlhYTgyOTMyKSwgVTY0X0MgKDB4MzE1Mjk2OTY2Mjk2YzRmNCksCisgICAgVTY0X0MgKDB4ZWY2MmY5ZjljM2Y5OWIzYSksIFU2NF9DICgweDk3YTNjNWM1MzNjNTY2ZjYpLAorICAgIFU2NF9DICgweDRhMTAyNTI1OTQyNTM1YjEpLCBVNjRfQyAoMHhiMmFiNTk1OTc5NTlmMjIwKSwKKyAgICBVNjRfQyAoMHgxNWQwODQ4NDJhODQ1NGFlKSwgVTY0X0MgKDB4ZTRjNTcyNzJkNTcyYjdhNyksCisgICAgVTY0X0MgKDB4NzJlYzM5MzllNDM5ZDVkZCksIFU2NF9DICgweDk4MTY0YzRjMmQ0YzVhNjEpLAorICAgIFU2NF9DICgweGJjOTQ1ZTVlNjU1ZWNhM2IpLCBVNjRfQyAoMHhmMDlmNzg3OGZkNzhlNzg1KSwKKyAgICBVNjRfQyAoMHg3MGU1MzgzOGUwMzhkZGQ4KSwgVTY0X0MgKDB4MDU5ODhjOGMwYThjMTQ4NiksCisgICAgVTY0X0MgKDB4YmYxN2QxZDE2M2QxYzZiMiksIFU2NF9DICgweDU3ZTRhNWE1YWVhNTQxMGIpLAorICAgIFU2NF9DICgweGQ5YTFlMmUyYWZlMjQzNGQpLCBVNjRfQyAoMHhjMjRlNjE2MTk5NjEyZmY4KSwKKyAgICBVNjRfQyAoMHg3YjQyYjNiM2Y2YjNmMTQ1KSwgVTY0X0MgKDB4NDIzNDIxMjE4NDIxMTVhNSksCisgICAgVTY0X0MgKDB4MjUwODljOWM0YTljOTRkNiksIFU2NF9DICgweDNjZWUxZTFlNzgxZWYwNjYpLAorICAgIFU2NF9DICgweDg2NjE0MzQzMTE0MzIyNTIpLCBVNjRfQyAoMHg5M2IxYzdjNzNiYzc3NmZjKSwKKyAgICBVNjRfQyAoMHhlNTRmZmNmY2Q3ZmNiMzJiKSwgVTY0X0MgKDB4MDgyNDA0MDQxMDA0MjAxNCksCisgICAgVTY0X0MgKDB4YTJlMzUxNTE1OTUxYjIwOCksIFU2NF9DICgweDJmMjU5OTk5NWU5OWJjYzcpLAorICAgIFU2NF9DICgweGRhMjI2ZDZkYTk2ZDRmYzQpLCBVNjRfQyAoMHgxYTY1MGQwZDM0MGQ2ODM5KSwKKyAgICBVNjRfQyAoMHhlOTc5ZmFmYWNmZmE4MzM1KSwgVTY0X0MgKDB4YTM2OWRmZGY1YmRmYjY4NCksCisgICAgVTY0X0MgKDB4ZmNhOTdlN2VlNTdlZDc5YiksIFU2NF9DICgweDQ4MTkyNDI0OTAyNDNkYjQpLAorICAgIFU2NF9DICgweDc2ZmUzYjNiZWMzYmM1ZDcpLCBVNjRfQyAoMHg0YjlhYWJhYjk2YWIzMTNkKSwKKyAgICBVNjRfQyAoMHg4MWYwY2VjZTFmY2UzZWQxKSwgVTY0X0MgKDB4MjI5OTExMTE0NDExODg1NSksCisgICAgVTY0X0MgKDB4MDM4MzhmOGYwNjhmMGM4OSksIFU2NF9DICgweDljMDQ0ZTRlMjU0ZTRhNmIpLAorICAgIFU2NF9DICgweDczNjZiN2I3ZTZiN2QxNTEpLCBVNjRfQyAoMHhjYmUwZWJlYjhiZWIwYjYwKSwKKyAgICBVNjRfQyAoMHg3OGMxM2MzY2YwM2NmZGNjKSwgVTY0X0MgKDB4MWZmZDgxODEzZTgxN2NiZiksCisgICAgVTY0X0MgKDB4MzU0MDk0OTQ2YTk0ZDRmZSksIFU2NF9DICgweGYzMWNmN2Y3ZmJmN2ViMGMpLAorICAgIFU2NF9DICgweDZmMThiOWI5ZGViOWExNjcpLCBVNjRfQyAoMHgyNjhiMTMxMzRjMTM5ODVmKSwKKyAgICBVNjRfQyAoMHg1ODUxMmMyY2IwMmM3ZDljKSwgVTY0X0MgKDB4YmIwNWQzZDM2YmQzZDZiOCksCisgICAgVTY0X0MgKDB4ZDM4Y2U3ZTdiYmU3NmI1YyksIFU2NF9DICgweGRjMzk2ZTZlYTU2ZTU3Y2IpLAorICAgIFU2NF9DICgweDk1YWFjNGM0MzdjNDZlZjMpLCBVNjRfQyAoMHgwNjFiMDMwMzBjMDMxODBmKSwKKyAgICBVNjRfQyAoMHhhY2RjNTY1NjQ1NTY4YTEzKSwgVTY0X0MgKDB4ODg1ZTQ0NDQwZDQ0MWE0OSksCisgICAgVTY0X0MgKDB4ZmVhMDdmN2ZlMTdmZGY5ZSksIFU2NF9DICgweDRmODhhOWE5OWVhOTIxMzcpLAorICAgIFU2NF9DICgweDU0NjcyYTJhYTgyYTRkODIpLCBVNjRfQyAoMHg2YjBhYmJiYmQ2YmJiMTZkKSwKKyAgICBVNjRfQyAoMHg5Zjg3YzFjMTIzYzE0NmUyKSwgVTY0X0MgKDB4YTZmMTUzNTM1MTUzYTIwMiksCisgICAgVTY0X0MgKDB4YTU3MmRjZGM1N2RjYWU4YiksIFU2NF9DICgweDE2NTMwYjBiMmMwYjU4MjcpLAorICAgIFU2NF9DICgweDI3MDE5ZDlkNGU5ZDljZDMpLCBVNjRfQyAoMHhkODJiNmM2Y2FkNmM0N2MxKSwKKyAgICBVNjRfQyAoMHg2MmE0MzEzMWM0MzE5NWY1KSwgVTY0X0MgKDB4ZThmMzc0NzRjZDc0ODdiOSksCisgICAgVTY0X0MgKDB4ZjExNWY2ZjZmZmY2ZTMwOSksIFU2NF9DICgweDhjNGM0NjQ2MDU0NjBhNDMpLAorICAgIFU2NF9DICgweDQ1YTVhY2FjOGFhYzA5MjYpLCBVNjRfQyAoMHgwZmI1ODk4OTFlODkzYzk3KSwKKyAgICBVNjRfQyAoMHgyOGI0MTQxNDUwMTRhMDQ0KSwgVTY0X0MgKDB4ZGZiYWUxZTFhM2UxNWI0MiksCisgICAgVTY0X0MgKDB4MmNhNjE2MTY1ODE2YjA0ZSksIFU2NF9DICgweDc0ZjczYTNhZTgzYWNkZDIpLAorICAgIFU2NF9DICgweGQyMDY2OTY5Yjk2OTZmZDApLCBVNjRfQyAoMHgxMjQxMDkwOTI0MDk0ODJkKSwKKyAgICBVNjRfQyAoMHhlMGQ3NzA3MGRkNzBhN2FkKSwgVTY0X0MgKDB4NzE2ZmI2YjZlMmI2ZDk1NCksCisgICAgVTY0X0MgKDB4YmQxZWQwZDA2N2QwY2ViNyksIFU2NF9DICgweGM3ZDZlZGVkOTNlZDNiN2UpLAorICAgIFU2NF9DICgweDg1ZTJjY2NjMTdjYzJlZGIpLCBVNjRfQyAoMHg4NDY4NDI0MjE1NDIyYTU3KSwKKyAgICBVNjRfQyAoMHgyZDJjOTg5ODVhOThiNGMyKSwgVTY0X0MgKDB4NTVlZGE0YTRhYWE0NDkwZSksCisgICAgVTY0X0MgKDB4NTA3NTI4MjhhMDI4NWQ4OCksIFU2NF9DICgweGI4ODY1YzVjNmQ1Y2RhMzEpLAorICAgIFU2NF9DICgweGVkNmJmOGY4YzdmODkzM2YpLCBVNjRfQyAoMHgxMWMyODY4NjIyODY0NGE0KSwKKyAgfTsKKworc3RhdGljIGNvbnN0IHU2NCBDM1syNTZdID0KKyAgeworICAgIFU2NF9DICgweDc4MzBkODE4MTg2MDE4YzApLCBVNjRfQyAoMHhhZjQ2MjYyMzIzOGMyMzA1KSwKKyAgICBVNjRfQyAoMHhmOTkxYjhjNmM2M2ZjNjdlKSwgVTY0X0MgKDB4NmZjZGZiZThlODg3ZTgxMyksCisgICAgVTY0X0MgKDB4YTExM2NiODc4NzI2ODc0YyksIFU2NF9DICgweDYyNmQxMWI4YjhkYWI4YTkpLAorICAgIFU2NF9DICgweDA1MDIwOTAxMDEwNDAxMDgpLCBVNjRfQyAoMHg2ZTllMGQ0ZjRmMjE0ZjQyKSwKKyAgICBVNjRfQyAoMHhlZTZjOWIzNjM2ZDgzNmFkKSwgVTY0X0MgKDB4MDQ1MWZmYTZhNmEyYTY1OSksCisgICAgVTY0X0MgKDB4YmRiOTBjZDJkMjZmZDJkZSksIFU2NF9DICgweDA2ZjcwZWY1ZjVmM2Y1ZmIpLAorICAgIFU2NF9DICgweDgwZjI5Njc5NzlmOTc5ZWYpLCBVNjRfQyAoMHhjZWRlMzA2ZjZmYTE2ZjVmKSwKKyAgICBVNjRfQyAoMHhlZjNmNmQ5MTkxN2U5MWZjKSwgVTY0X0MgKDB4MDdhNGY4NTI1MjU1NTJhYSksCisgICAgVTY0X0MgKDB4ZmRjMDQ3NjA2MDlkNjAyNyksIFU2NF9DICgweDc2NjUzNWJjYmNjYWJjODkpLAorICAgIFU2NF9DICgweGNkMmIzNzliOWI1NjliYWMpLCBVNjRfQyAoMHg4YzAxOGE4ZThlMDI4ZTA0KSwKKyAgICBVNjRfQyAoMHgxNTViZDJhM2EzYjZhMzcxKSwgVTY0X0MgKDB4M2MxODZjMGMwYzMwMGM2MCksCisgICAgVTY0X0MgKDB4OGFmNjg0N2I3YmYxN2JmZiksIFU2NF9DICgweGUxNmE4MDM1MzVkNDM1YjUpLAorICAgIFU2NF9DICgweDY5M2FmNTFkMWQ3NDFkZTgpLCBVNjRfQyAoMHg0N2RkYjNlMGUwYTdlMDUzKSwKKyAgICBVNjRfQyAoMHhhY2IzMjFkN2Q3N2JkN2Y2KSwgVTY0X0MgKDB4ZWQ5OTljYzJjMjJmYzI1ZSksCisgICAgVTY0X0MgKDB4OTY1YzQzMmUyZWI4MmU2ZCksIFU2NF9DICgweDdhOTYyOTRiNGIzMTRiNjIpLAorICAgIFU2NF9DICgweDIxZTE1ZGZlZmVkZmZlYTMpLCBVNjRfQyAoMHgxNmFlZDU1NzU3NDE1NzgyKSwKKyAgICBVNjRfQyAoMHg0MTJhYmQxNTE1NTQxNWE4KSwgVTY0X0MgKDB4YjZlZWU4Nzc3N2MxNzc5ZiksCisgICAgVTY0X0MgKDB4ZWI2ZTkyMzczN2RjMzdhNSksIFU2NF9DICgweDU2ZDc5ZWU1ZTViM2U1N2IpLAorICAgIFU2NF9DICgweGQ5MjMxMzlmOWY0NjlmOGMpLCBVNjRfQyAoMHgxN2ZkMjNmMGYwZTdmMGQzKSwKKyAgICBVNjRfQyAoMHg3Zjk0MjA0YTRhMzU0YTZhKSwgVTY0X0MgKDB4OTVhOTQ0ZGFkYTRmZGE5ZSksCisgICAgVTY0X0MgKDB4MjViMGEyNTg1ODdkNThmYSksIFU2NF9DICgweGNhOGZjZmM5YzkwM2M5MDYpLAorICAgIFU2NF9DICgweDhkNTI3YzI5MjlhNDI5NTUpLCBVNjRfQyAoMHgyMjE0NWEwYTBhMjgwYTUwKSwKKyAgICBVNjRfQyAoMHg0ZjdmNTBiMWIxZmViMWUxKSwgVTY0X0MgKDB4MWE1ZGM5YTBhMGJhYTA2OSksCisgICAgVTY0X0MgKDB4ZGFkNjE0NmI2YmIxNmI3ZiksIFU2NF9DICgweGFiMTdkOTg1ODUyZTg1NWMpLAorICAgIFU2NF9DICgweDczNjczY2JkYmRjZWJkODEpLCBVNjRfQyAoMHgzNGJhOGY1ZDVkNjk1ZGQyKSwKKyAgICBVNjRfQyAoMHg1MDIwOTAxMDEwNDAxMDgwKSwgVTY0X0MgKDB4MDNmNTA3ZjRmNGY3ZjRmMyksCisgICAgVTY0X0MgKDB4YzA4YmRkY2JjYjBiY2IxNiksIFU2NF9DICgweGM2N2NkMzNlM2VmODNlZWQpLAorICAgIFU2NF9DICgweDExMGEyZDA1MDUxNDA1MjgpLCBVNjRfQyAoMHhlNmNlNzg2NzY3ODE2NzFmKSwKKyAgICBVNjRfQyAoMHg1M2Q1OTdlNGU0YjdlNDczKSwgVTY0X0MgKDB4YmI0ZTAyMjcyNzljMjcyNSksCisgICAgVTY0X0MgKDB4NTg4MjczNDE0MTE5NDEzMiksIFU2NF9DICgweDlkMGJhNzhiOGIxNjhiMmMpLAorICAgIFU2NF9DICgweDAxNTNmNmE3YTdhNmE3NTEpLCBVNjRfQyAoMHg5NGZhYjI3ZDdkZTk3ZGNmKSwKKyAgICBVNjRfQyAoMHhmYjM3NDk5NTk1NmU5NWRjKSwgVTY0X0MgKDB4OWZhZDU2ZDhkODQ3ZDg4ZSksCisgICAgVTY0X0MgKDB4MzBlYjcwZmJmYmNiZmI4YiksIFU2NF9DICgweDcxYzFjZGVlZWU5ZmVlMjMpLAorICAgIFU2NF9DICgweDkxZjhiYjdjN2NlZDdjYzcpLCBVNjRfQyAoMHhlM2NjNzE2NjY2ODU2NjE3KSwKKyAgICBVNjRfQyAoMHg4ZWE3N2JkZGRkNTNkZGE2KSwgVTY0X0MgKDB4NGIyZWFmMTcxNzVjMTdiOCksCisgICAgVTY0X0MgKDB4NDY4ZTQ1NDc0NzAxNDcwMiksIFU2NF9DICgweGRjMjExYTllOWU0MjllODQpLAorICAgIFU2NF9DICgweGM1ODlkNGNhY2EwZmNhMWUpLCBVNjRfQyAoMHg5OTVhNTgyZDJkYjQyZDc1KSwKKyAgICBVNjRfQyAoMHg3OTYzMmViZmJmYzZiZjkxKSwgVTY0X0MgKDB4MWIwZTNmMDcwNzFjMDczOCksCisgICAgVTY0X0MgKDB4MjM0N2FjYWRhZDhlYWQwMSksIFU2NF9DICgweDJmYjRiMDVhNWE3NTVhZWEpLAorICAgIFU2NF9DICgweGI1MWJlZjgzODMzNjgzNmMpLCBVNjRfQyAoMHhmZjY2YjYzMzMzY2MzMzg1KSwKKyAgICBVNjRfQyAoMHhmMmM2NWM2MzYzOTE2MzNmKSwgVTY0X0MgKDB4MGEwNDEyMDIwMjA4MDIxMCksCisgICAgVTY0X0MgKDB4Mzg0OTkzYWFhYTkyYWEzOSksIFU2NF9DICgweGE4ZTJkZTcxNzFkOTcxYWYpLAorICAgIFU2NF9DICgweGNmOGRjNmM4YzgwN2M4MGUpLCBVNjRfQyAoMHg3ZDMyZDExOTE5NjQxOWM4KSwKKyAgICBVNjRfQyAoMHg3MDkyM2I0OTQ5Mzk0OTcyKSwgVTY0X0MgKDB4OWFhZjVmZDlkOTQzZDk4NiksCisgICAgVTY0X0MgKDB4MWRmOTMxZjJmMmVmZjJjMyksIFU2NF9DICgweDQ4ZGJhOGUzZTNhYmUzNGIpLAorICAgIFU2NF9DICgweDJhYjZiOTViNWI3MTViZTIpLCBVNjRfQyAoMHg5MjBkYmM4ODg4MWE4ODM0KSwKKyAgICBVNjRfQyAoMHhjODI5M2U5YTlhNTI5YWE0KSwgVTY0X0MgKDB4YmU0YzBiMjYyNjk4MjYyZCksCisgICAgVTY0X0MgKDB4ZmE2NGJmMzIzMmM4MzI4ZCksIFU2NF9DICgweDRhN2Q1OWIwYjBmYWIwZTkpLAorICAgIFU2NF9DICgweDZhY2ZmMmU5ZTk4M2U5MWIpLCBVNjRfQyAoMHgzMzFlNzcwZjBmM2MwZjc4KSwKKyAgICBVNjRfQyAoMHhhNmI3MzNkNWQ1NzNkNWU2KSwgVTY0X0MgKDB4YmExZGY0ODA4MDNhODA3NCksCisgICAgVTY0X0MgKDB4N2M2MTI3YmViZWMyYmU5OSksIFU2NF9DICgweGRlODdlYmNkY2QxM2NkMjYpLAorICAgIFU2NF9DICgweGU0Njg4OTM0MzRkMDM0YmQpLCBVNjRfQyAoMHg3NTkwMzI0ODQ4M2Q0ODdhKSwKKyAgICBVNjRfQyAoMHgyNGUzNTRmZmZmZGJmZmFiKSwgVTY0X0MgKDB4OGZmNDhkN2E3YWY1N2FmNyksCisgICAgVTY0X0MgKDB4ZWEzZDY0OTA5MDdhOTBmNCksIFU2NF9DICgweDNlYmU5ZDVmNWY2MTVmYzIpLAorICAgIFU2NF9DICgweGEwNDAzZDIwMjA4MDIwMWQpLCBVNjRfQyAoMHhkNWQwMGY2ODY4YmQ2ODY3KSwKKyAgICBVNjRfQyAoMHg3MjM0Y2ExYTFhNjgxYWQwKSwgVTY0X0MgKDB4MmM0MWI3YWVhZTgyYWUxOSksCisgICAgVTY0X0MgKDB4NWU3NTdkYjRiNGVhYjRjOSksIFU2NF9DICgweDE5YThjZTU0NTQ0ZDU0OWEpLAorICAgIFU2NF9DICgweGU1M2I3ZjkzOTM3NjkzZWMpLCBVNjRfQyAoMHhhYTQ0MmYyMjIyODgyMjBkKSwKKyAgICBVNjRfQyAoMHhlOWM4NjM2NDY0OGQ2NDA3KSwgVTY0X0MgKDB4MTJmZjJhZjFmMWUzZjFkYiksCisgICAgVTY0X0MgKDB4YTJlNmNjNzM3M2QxNzNiZiksIFU2NF9DICgweDVhMjQ4MjEyMTI0ODEyOTApLAorICAgIFU2NF9DICgweDVkODA3YTQwNDAxZDQwM2EpLCBVNjRfQyAoMHgyODEwNDgwODA4MjAwODQwKSwKKyAgICBVNjRfQyAoMHhlODliOTVjM2MzMmJjMzU2KSwgVTY0X0MgKDB4N2JjNWRmZWNlYzk3ZWMzMyksCisgICAgVTY0X0MgKDB4OTBhYjRkZGJkYjRiZGI5NiksIFU2NF9DICgweDFmNWZjMGExYTFiZWExNjEpLAorICAgIFU2NF9DICgweDgzMDc5MThkOGQwZThkMWMpLCBVNjRfQyAoMHhjOTdhYzgzZDNkZjQzZGY1KSwKKyAgICBVNjRfQyAoMHhmMTMzNWI5Nzk3NjY5N2NjKSwgVTY0X0MgKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MgKDB4ZDQ4M2Y5Y2ZjZjFiY2YzNiksIFU2NF9DICgweDg3NTY2ZTJiMmJhYzJiNDUpLAorICAgIFU2NF9DICgweGIzZWNlMTc2NzZjNTc2OTcpLCBVNjRfQyAoMHhiMDE5ZTY4MjgyMzI4MjY0KSwKKyAgICBVNjRfQyAoMHhhOWIxMjhkNmQ2N2ZkNmZlKSwgVTY0X0MgKDB4NzczNmMzMWIxYjZjMWJkOCksCisgICAgVTY0X0MgKDB4NWI3Nzc0YjViNWVlYjVjMSksIFU2NF9DICgweDI5NDNiZWFmYWY4NmFmMTEpLAorICAgIFU2NF9DICgweGRmZDQxZDZhNmFiNTZhNzcpLCBVNjRfQyAoMHgwZGEwZWE1MDUwNWQ1MGJhKSwKKyAgICBVNjRfQyAoMHg0YzhhNTc0NTQ1MDk0NTEyKSwgVTY0X0MgKDB4MThmYjM4ZjNmM2ViZjNjYiksCisgICAgVTY0X0MgKDB4ZjA2MGFkMzAzMGMwMzA5ZCksIFU2NF9DICgweDc0YzNjNGVmZWY5YmVmMmIpLAorICAgIFU2NF9DICgweGMzN2VkYTNmM2ZmYzNmZTUpLCBVNjRfQyAoMHgxY2FhYzc1NTU1NDk1NTkyKSwKKyAgICBVNjRfQyAoMHgxMDU5ZGJhMmEyYjJhMjc5KSwgVTY0X0MgKDB4NjVjOWU5ZWFlYThmZWEwMyksCisgICAgVTY0X0MgKDB4ZWNjYTZhNjU2NTg5NjUwZiksIFU2NF9DICgweDY4NjkwM2JhYmFkMmJhYjkpLAorICAgIFU2NF9DICgweDkzNWU0YTJmMmZiYzJmNjUpLCBVNjRfQyAoMHhlNzlkOGVjMGMwMjdjMDRlKSwKKyAgICBVNjRfQyAoMHg4MWExNjBkZWRlNWZkZWJlKSwgVTY0X0MgKDB4NmMzOGZjMWMxYzcwMWNlMCksCisgICAgVTY0X0MgKDB4MmVlNzQ2ZmRmZGQzZmRiYiksIFU2NF9DICgweDY0OWExZjRkNGQyOTRkNTIpLAorICAgIFU2NF9DICgweGUwMzk3NjkyOTI3MjkyZTQpLCBVNjRfQyAoMHhiY2VhZmE3NTc1Yzk3NThmKSwKKyAgICBVNjRfQyAoMHgxZTBjMzYwNjA2MTgwNjMwKSwgVTY0X0MgKDB4OTgwOWFlOGE4YTEyOGEyNCksCisgICAgVTY0X0MgKDB4NDA3OTRiYjJiMmYyYjJmOSksIFU2NF9DICgweDU5ZDE4NWU2ZTZiZmU2NjMpLAorICAgIFU2NF9DICgweDM2MWM3ZTBlMGUzODBlNzApLCBVNjRfQyAoMHg2MzNlZTcxZjFmN2MxZmY4KSwKKyAgICBVNjRfQyAoMHhmN2M0NTU2MjYyOTU2MjM3KSwgVTY0X0MgKDB4YTNiNTNhZDRkNDc3ZDRlZSksCisgICAgVTY0X0MgKDB4MzI0ZDgxYThhODlhYTgyOSksIFU2NF9DICgweGY0MzE1Mjk2OTY2Mjk2YzQpLAorICAgIFU2NF9DICgweDNhZWY2MmY5ZjljM2Y5OWIpLCBVNjRfQyAoMHhmNjk3YTNjNWM1MzNjNTY2KSwKKyAgICBVNjRfQyAoMHhiMTRhMTAyNTI1OTQyNTM1KSwgVTY0X0MgKDB4MjBiMmFiNTk1OTc5NTlmMiksCisgICAgVTY0X0MgKDB4YWUxNWQwODQ4NDJhODQ1NCksIFU2NF9DICgweGE3ZTRjNTcyNzJkNTcyYjcpLAorICAgIFU2NF9DICgweGRkNzJlYzM5MzllNDM5ZDUpLCBVNjRfQyAoMHg2MTk4MTY0YzRjMmQ0YzVhKSwKKyAgICBVNjRfQyAoMHgzYmJjOTQ1ZTVlNjU1ZWNhKSwgVTY0X0MgKDB4ODVmMDlmNzg3OGZkNzhlNyksCisgICAgVTY0X0MgKDB4ZDg3MGU1MzgzOGUwMzhkZCksIFU2NF9DICgweDg2MDU5ODhjOGMwYThjMTQpLAorICAgIFU2NF9DICgweGIyYmYxN2QxZDE2M2QxYzYpLCBVNjRfQyAoMHgwYjU3ZTRhNWE1YWVhNTQxKSwKKyAgICBVNjRfQyAoMHg0ZGQ5YTFlMmUyYWZlMjQzKSwgVTY0X0MgKDB4ZjhjMjRlNjE2MTk5NjEyZiksCisgICAgVTY0X0MgKDB4NDU3YjQyYjNiM2Y2YjNmMSksIFU2NF9DICgweGE1NDIzNDIxMjE4NDIxMTUpLAorICAgIFU2NF9DICgweGQ2MjUwODljOWM0YTljOTQpLCBVNjRfQyAoMHg2NjNjZWUxZTFlNzgxZWYwKSwKKyAgICBVNjRfQyAoMHg1Mjg2NjE0MzQzMTE0MzIyKSwgVTY0X0MgKDB4ZmM5M2IxYzdjNzNiYzc3NiksCisgICAgVTY0X0MgKDB4MmJlNTRmZmNmY2Q3ZmNiMyksIFU2NF9DICgweDE0MDgyNDA0MDQxMDA0MjApLAorICAgIFU2NF9DICgweDA4YTJlMzUxNTE1OTUxYjIpLCBVNjRfQyAoMHhjNzJmMjU5OTk5NWU5OWJjKSwKKyAgICBVNjRfQyAoMHhjNGRhMjI2ZDZkYTk2ZDRmKSwgVTY0X0MgKDB4MzkxYTY1MGQwZDM0MGQ2OCksCisgICAgVTY0X0MgKDB4MzVlOTc5ZmFmYWNmZmE4MyksIFU2NF9DICgweDg0YTM2OWRmZGY1YmRmYjYpLAorICAgIFU2NF9DICgweDliZmNhOTdlN2VlNTdlZDcpLCBVNjRfQyAoMHhiNDQ4MTkyNDI0OTAyNDNkKSwKKyAgICBVNjRfQyAoMHhkNzc2ZmUzYjNiZWMzYmM1KSwgVTY0X0MgKDB4M2Q0YjlhYWJhYjk2YWIzMSksCisgICAgVTY0X0MgKDB4ZDE4MWYwY2VjZTFmY2UzZSksIFU2NF9DICgweDU1MjI5OTExMTE0NDExODgpLAorICAgIFU2NF9DICgweDg5MDM4MzhmOGYwNjhmMGMpLCBVNjRfQyAoMHg2YjljMDQ0ZTRlMjU0ZTRhKSwKKyAgICBVNjRfQyAoMHg1MTczNjZiN2I3ZTZiN2QxKSwgVTY0X0MgKDB4NjBjYmUwZWJlYjhiZWIwYiksCisgICAgVTY0X0MgKDB4Y2M3OGMxM2MzY2YwM2NmZCksIFU2NF9DICgweGJmMWZmZDgxODEzZTgxN2MpLAorICAgIFU2NF9DICgweGZlMzU0MDk0OTQ2YTk0ZDQpLCBVNjRfQyAoMHgwY2YzMWNmN2Y3ZmJmN2ViKSwKKyAgICBVNjRfQyAoMHg2NzZmMThiOWI5ZGViOWExKSwgVTY0X0MgKDB4NWYyNjhiMTMxMzRjMTM5OCksCisgICAgVTY0X0MgKDB4OWM1ODUxMmMyY2IwMmM3ZCksIFU2NF9DICgweGI4YmIwNWQzZDM2YmQzZDYpLAorICAgIFU2NF9DICgweDVjZDM4Y2U3ZTdiYmU3NmIpLCBVNjRfQyAoMHhjYmRjMzk2ZTZlYTU2ZTU3KSwKKyAgICBVNjRfQyAoMHhmMzk1YWFjNGM0MzdjNDZlKSwgVTY0X0MgKDB4MGYwNjFiMDMwMzBjMDMxOCksCisgICAgVTY0X0MgKDB4MTNhY2RjNTY1NjQ1NTY4YSksIFU2NF9DICgweDQ5ODg1ZTQ0NDQwZDQ0MWEpLAorICAgIFU2NF9DICgweDllZmVhMDdmN2ZlMTdmZGYpLCBVNjRfQyAoMHgzNzRmODhhOWE5OWVhOTIxKSwKKyAgICBVNjRfQyAoMHg4MjU0NjcyYTJhYTgyYTRkKSwgVTY0X0MgKDB4NmQ2YjBhYmJiYmQ2YmJiMSksCisgICAgVTY0X0MgKDB4ZTI5Zjg3YzFjMTIzYzE0NiksIFU2NF9DICgweDAyYTZmMTUzNTM1MTUzYTIpLAorICAgIFU2NF9DICgweDhiYTU3MmRjZGM1N2RjYWUpLCBVNjRfQyAoMHgyNzE2NTMwYjBiMmMwYjU4KSwKKyAgICBVNjRfQyAoMHhkMzI3MDE5ZDlkNGU5ZDljKSwgVTY0X0MgKDB4YzFkODJiNmM2Y2FkNmM0NyksCisgICAgVTY0X0MgKDB4ZjU2MmE0MzEzMWM0MzE5NSksIFU2NF9DICgweGI5ZThmMzc0NzRjZDc0ODcpLAorICAgIFU2NF9DICgweDA5ZjExNWY2ZjZmZmY2ZTMpLCBVNjRfQyAoMHg0MzhjNGM0NjQ2MDU0NjBhKSwKKyAgICBVNjRfQyAoMHgyNjQ1YTVhY2FjOGFhYzA5KSwgVTY0X0MgKDB4OTcwZmI1ODk4OTFlODkzYyksCisgICAgVTY0X0MgKDB4NDQyOGI0MTQxNDUwMTRhMCksIFU2NF9DICgweDQyZGZiYWUxZTFhM2UxNWIpLAorICAgIFU2NF9DICgweDRlMmNhNjE2MTY1ODE2YjApLCBVNjRfQyAoMHhkMjc0ZjczYTNhZTgzYWNkKSwKKyAgICBVNjRfQyAoMHhkMGQyMDY2OTY5Yjk2OTZmKSwgVTY0X0MgKDB4MmQxMjQxMDkwOTI0MDk0OCksCisgICAgVTY0X0MgKDB4YWRlMGQ3NzA3MGRkNzBhNyksIFU2NF9DICgweDU0NzE2ZmI2YjZlMmI2ZDkpLAorICAgIFU2NF9DICgweGI3YmQxZWQwZDA2N2QwY2UpLCBVNjRfQyAoMHg3ZWM3ZDZlZGVkOTNlZDNiKSwKKyAgICBVNjRfQyAoMHhkYjg1ZTJjY2NjMTdjYzJlKSwgVTY0X0MgKDB4NTc4NDY4NDI0MjE1NDIyYSksCisgICAgVTY0X0MgKDB4YzIyZDJjOTg5ODVhOThiNCksIFU2NF9DICgweDBlNTVlZGE0YTRhYWE0NDkpLAorICAgIFU2NF9DICgweDg4NTA3NTI4MjhhMDI4NWQpLCBVNjRfQyAoMHgzMWI4ODY1YzVjNmQ1Y2RhKSwKKyAgICBVNjRfQyAoMHgzZmVkNmJmOGY4YzdmODkzKSwgVTY0X0MgKDB4YTQxMWMyODY4NjIyODY0NCksCisgIH07CisKK3N0YXRpYyBjb25zdCB1NjQgQzRbMjU2XSA9CisgIHsKKyAgICBVNjRfQyAoMHhjMDc4MzBkODE4MTg2MDE4KSwgVTY0X0MgKDB4MDVhZjQ2MjYyMzIzOGMyMyksCisgICAgVTY0X0MgKDB4N2VmOTkxYjhjNmM2M2ZjNiksIFU2NF9DICgweDEzNmZjZGZiZThlODg3ZTgpLAorICAgIFU2NF9DICgweDRjYTExM2NiODc4NzI2ODcpLCBVNjRfQyAoMHhhOTYyNmQxMWI4YjhkYWI4KSwKKyAgICBVNjRfQyAoMHgwODA1MDIwOTAxMDEwNDAxKSwgVTY0X0MgKDB4NDI2ZTllMGQ0ZjRmMjE0ZiksCisgICAgVTY0X0MgKDB4YWRlZTZjOWIzNjM2ZDgzNiksIFU2NF9DICgweDU5MDQ1MWZmYTZhNmEyYTYpLAorICAgIFU2NF9DICgweGRlYmRiOTBjZDJkMjZmZDIpLCBVNjRfQyAoMHhmYjA2ZjcwZWY1ZjVmM2Y1KSwKKyAgICBVNjRfQyAoMHhlZjgwZjI5Njc5NzlmOTc5KSwgVTY0X0MgKDB4NWZjZWRlMzA2ZjZmYTE2ZiksCisgICAgVTY0X0MgKDB4ZmNlZjNmNmQ5MTkxN2U5MSksIFU2NF9DICgweGFhMDdhNGY4NTI1MjU1NTIpLAorICAgIFU2NF9DICgweDI3ZmRjMDQ3NjA2MDlkNjApLCBVNjRfQyAoMHg4OTc2NjUzNWJjYmNjYWJjKSwKKyAgICBVNjRfQyAoMHhhY2NkMmIzNzliOWI1NjliKSwgVTY0X0MgKDB4MDQ4YzAxOGE4ZThlMDI4ZSksCisgICAgVTY0X0MgKDB4NzExNTViZDJhM2EzYjZhMyksIFU2NF9DICgweDYwM2MxODZjMGMwYzMwMGMpLAorICAgIFU2NF9DICgweGZmOGFmNjg0N2I3YmYxN2IpLCBVNjRfQyAoMHhiNWUxNmE4MDM1MzVkNDM1KSwKKyAgICBVNjRfQyAoMHhlODY5M2FmNTFkMWQ3NDFkKSwgVTY0X0MgKDB4NTM0N2RkYjNlMGUwYTdlMCksCisgICAgVTY0X0MgKDB4ZjZhY2IzMjFkN2Q3N2JkNyksIFU2NF9DICgweDVlZWQ5OTljYzJjMjJmYzIpLAorICAgIFU2NF9DICgweDZkOTY1YzQzMmUyZWI4MmUpLCBVNjRfQyAoMHg2MjdhOTYyOTRiNGIzMTRiKSwKKyAgICBVNjRfQyAoMHhhMzIxZTE1ZGZlZmVkZmZlKSwgVTY0X0MgKDB4ODIxNmFlZDU1NzU3NDE1NyksCisgICAgVTY0X0MgKDB4YTg0MTJhYmQxNTE1NTQxNSksIFU2NF9DICgweDlmYjZlZWU4Nzc3N2MxNzcpLAorICAgIFU2NF9DICgweGE1ZWI2ZTkyMzczN2RjMzcpLCBVNjRfQyAoMHg3YjU2ZDc5ZWU1ZTViM2U1KSwKKyAgICBVNjRfQyAoMHg4Y2Q5MjMxMzlmOWY0NjlmKSwgVTY0X0MgKDB4ZDMxN2ZkMjNmMGYwZTdmMCksCisgICAgVTY0X0MgKDB4NmE3Zjk0MjA0YTRhMzU0YSksIFU2NF9DICgweDllOTVhOTQ0ZGFkYTRmZGEpLAorICAgIFU2NF9DICgweGZhMjViMGEyNTg1ODdkNTgpLCBVNjRfQyAoMHgwNmNhOGZjZmM5YzkwM2M5KSwKKyAgICBVNjRfQyAoMHg1NThkNTI3YzI5MjlhNDI5KSwgVTY0X0MgKDB4NTAyMjE0NWEwYTBhMjgwYSksCisgICAgVTY0X0MgKDB4ZTE0ZjdmNTBiMWIxZmViMSksIFU2NF9DICgweDY5MWE1ZGM5YTBhMGJhYTApLAorICAgIFU2NF9DICgweDdmZGFkNjE0NmI2YmIxNmIpLCBVNjRfQyAoMHg1Y2FiMTdkOTg1ODUyZTg1KSwKKyAgICBVNjRfQyAoMHg4MTczNjczY2JkYmRjZWJkKSwgVTY0X0MgKDB4ZDIzNGJhOGY1ZDVkNjk1ZCksCisgICAgVTY0X0MgKDB4ODA1MDIwOTAxMDEwNDAxMCksIFU2NF9DICgweGYzMDNmNTA3ZjRmNGY3ZjQpLAorICAgIFU2NF9DICgweDE2YzA4YmRkY2JjYjBiY2IpLCBVNjRfQyAoMHhlZGM2N2NkMzNlM2VmODNlKSwKKyAgICBVNjRfQyAoMHgyODExMGEyZDA1MDUxNDA1KSwgVTY0X0MgKDB4MWZlNmNlNzg2NzY3ODE2NyksCisgICAgVTY0X0MgKDB4NzM1M2Q1OTdlNGU0YjdlNCksIFU2NF9DICgweDI1YmI0ZTAyMjcyNzljMjcpLAorICAgIFU2NF9DICgweDMyNTg4MjczNDE0MTE5NDEpLCBVNjRfQyAoMHgyYzlkMGJhNzhiOGIxNjhiKSwKKyAgICBVNjRfQyAoMHg1MTAxNTNmNmE3YTdhNmE3KSwgVTY0X0MgKDB4Y2Y5NGZhYjI3ZDdkZTk3ZCksCisgICAgVTY0X0MgKDB4ZGNmYjM3NDk5NTk1NmU5NSksIFU2NF9DICgweDhlOWZhZDU2ZDhkODQ3ZDgpLAorICAgIFU2NF9DICgweDhiMzBlYjcwZmJmYmNiZmIpLCBVNjRfQyAoMHgyMzcxYzFjZGVlZWU5ZmVlKSwKKyAgICBVNjRfQyAoMHhjNzkxZjhiYjdjN2NlZDdjKSwgVTY0X0MgKDB4MTdlM2NjNzE2NjY2ODU2NiksCisgICAgVTY0X0MgKDB4YTY4ZWE3N2JkZGRkNTNkZCksIFU2NF9DICgweGI4NGIyZWFmMTcxNzVjMTcpLAorICAgIFU2NF9DICgweDAyNDY4ZTQ1NDc0NzAxNDcpLCBVNjRfQyAoMHg4NGRjMjExYTllOWU0MjllKSwKKyAgICBVNjRfQyAoMHgxZWM1ODlkNGNhY2EwZmNhKSwgVTY0X0MgKDB4NzU5OTVhNTgyZDJkYjQyZCksCisgICAgVTY0X0MgKDB4OTE3OTYzMmViZmJmYzZiZiksIFU2NF9DICgweDM4MWIwZTNmMDcwNzFjMDcpLAorICAgIFU2NF9DICgweDAxMjM0N2FjYWRhZDhlYWQpLCBVNjRfQyAoMHhlYTJmYjRiMDVhNWE3NTVhKSwKKyAgICBVNjRfQyAoMHg2Y2I1MWJlZjgzODMzNjgzKSwgVTY0X0MgKDB4ODVmZjY2YjYzMzMzY2MzMyksCisgICAgVTY0X0MgKDB4M2ZmMmM2NWM2MzYzOTE2MyksIFU2NF9DICgweDEwMGEwNDEyMDIwMjA4MDIpLAorICAgIFU2NF9DICgweDM5Mzg0OTkzYWFhYTkyYWEpLCBVNjRfQyAoMHhhZmE4ZTJkZTcxNzFkOTcxKSwKKyAgICBVNjRfQyAoMHgwZWNmOGRjNmM4YzgwN2M4KSwgVTY0X0MgKDB4Yzg3ZDMyZDExOTE5NjQxOSksCisgICAgVTY0X0MgKDB4NzI3MDkyM2I0OTQ5Mzk0OSksIFU2NF9DICgweDg2OWFhZjVmZDlkOTQzZDkpLAorICAgIFU2NF9DICgweGMzMWRmOTMxZjJmMmVmZjIpLCBVNjRfQyAoMHg0YjQ4ZGJhOGUzZTNhYmUzKSwKKyAgICBVNjRfQyAoMHhlMjJhYjZiOTViNWI3MTViKSwgVTY0X0MgKDB4MzQ5MjBkYmM4ODg4MWE4OCksCisgICAgVTY0X0MgKDB4YTRjODI5M2U5YTlhNTI5YSksIFU2NF9DICgweDJkYmU0YzBiMjYyNjk4MjYpLAorICAgIFU2NF9DICgweDhkZmE2NGJmMzIzMmM4MzIpLCBVNjRfQyAoMHhlOTRhN2Q1OWIwYjBmYWIwKSwKKyAgICBVNjRfQyAoMHgxYjZhY2ZmMmU5ZTk4M2U5KSwgVTY0X0MgKDB4NzgzMzFlNzcwZjBmM2MwZiksCisgICAgVTY0X0MgKDB4ZTZhNmI3MzNkNWQ1NzNkNSksIFU2NF9DICgweDc0YmExZGY0ODA4MDNhODApLAorICAgIFU2NF9DICgweDk5N2M2MTI3YmViZWMyYmUpLCBVNjRfQyAoMHgyNmRlODdlYmNkY2QxM2NkKSwKKyAgICBVNjRfQyAoMHhiZGU0Njg4OTM0MzRkMDM0KSwgVTY0X0MgKDB4N2E3NTkwMzI0ODQ4M2Q0OCksCisgICAgVTY0X0MgKDB4YWIyNGUzNTRmZmZmZGJmZiksIFU2NF9DICgweGY3OGZmNDhkN2E3YWY1N2EpLAorICAgIFU2NF9DICgweGY0ZWEzZDY0OTA5MDdhOTApLCBVNjRfQyAoMHhjMjNlYmU5ZDVmNWY2MTVmKSwKKyAgICBVNjRfQyAoMHgxZGEwNDAzZDIwMjA4MDIwKSwgVTY0X0MgKDB4NjdkNWQwMGY2ODY4YmQ2OCksCisgICAgVTY0X0MgKDB4ZDA3MjM0Y2ExYTFhNjgxYSksIFU2NF9DICgweDE5MmM0MWI3YWVhZTgyYWUpLAorICAgIFU2NF9DICgweGM5NWU3NTdkYjRiNGVhYjQpLCBVNjRfQyAoMHg5YTE5YThjZTU0NTQ0ZDU0KSwKKyAgICBVNjRfQyAoMHhlY2U1M2I3ZjkzOTM3NjkzKSwgVTY0X0MgKDB4MGRhYTQ0MmYyMjIyODgyMiksCisgICAgVTY0X0MgKDB4MDdlOWM4NjM2NDY0OGQ2NCksIFU2NF9DICgweGRiMTJmZjJhZjFmMWUzZjEpLAorICAgIFU2NF9DICgweGJmYTJlNmNjNzM3M2QxNzMpLCBVNjRfQyAoMHg5MDVhMjQ4MjEyMTI0ODEyKSwKKyAgICBVNjRfQyAoMHgzYTVkODA3YTQwNDAxZDQwKSwgVTY0X0MgKDB4NDAyODEwNDgwODA4MjAwOCksCisgICAgVTY0X0MgKDB4NTZlODliOTVjM2MzMmJjMyksIFU2NF9DICgweDMzN2JjNWRmZWNlYzk3ZWMpLAorICAgIFU2NF9DICgweDk2OTBhYjRkZGJkYjRiZGIpLCBVNjRfQyAoMHg2MTFmNWZjMGExYTFiZWExKSwKKyAgICBVNjRfQyAoMHgxYzgzMDc5MThkOGQwZThkKSwgVTY0X0MgKDB4ZjVjOTdhYzgzZDNkZjQzZCksCisgICAgVTY0X0MgKDB4Y2NmMTMzNWI5Nzk3NjY5NyksIFU2NF9DICgweDAwMDAwMDAwMDAwMDAwMDApLAorICAgIFU2NF9DICgweDM2ZDQ4M2Y5Y2ZjZjFiY2YpLCBVNjRfQyAoMHg0NTg3NTY2ZTJiMmJhYzJiKSwKKyAgICBVNjRfQyAoMHg5N2IzZWNlMTc2NzZjNTc2KSwgVTY0X0MgKDB4NjRiMDE5ZTY4MjgyMzI4MiksCisgICAgVTY0X0MgKDB4ZmVhOWIxMjhkNmQ2N2ZkNiksIFU2NF9DICgweGQ4NzczNmMzMWIxYjZjMWIpLAorICAgIFU2NF9DICgweGMxNWI3Nzc0YjViNWVlYjUpLCBVNjRfQyAoMHgxMTI5NDNiZWFmYWY4NmFmKSwKKyAgICBVNjRfQyAoMHg3N2RmZDQxZDZhNmFiNTZhKSwgVTY0X0MgKDB4YmEwZGEwZWE1MDUwNWQ1MCksCisgICAgVTY0X0MgKDB4MTI0YzhhNTc0NTQ1MDk0NSksIFU2NF9DICgweGNiMThmYjM4ZjNmM2ViZjMpLAorICAgIFU2NF9DICgweDlkZjA2MGFkMzAzMGMwMzApLCBVNjRfQyAoMHgyYjc0YzNjNGVmZWY5YmVmKSwKKyAgICBVNjRfQyAoMHhlNWMzN2VkYTNmM2ZmYzNmKSwgVTY0X0MgKDB4OTIxY2FhYzc1NTU1NDk1NSksCisgICAgVTY0X0MgKDB4NzkxMDU5ZGJhMmEyYjJhMiksIFU2NF9DICgweDAzNjVjOWU5ZWFlYThmZWEpLAorICAgIFU2NF9DICgweDBmZWNjYTZhNjU2NTg5NjUpLCBVNjRfQyAoMHhiOTY4NjkwM2JhYmFkMmJhKSwKKyAgICBVNjRfQyAoMHg2NTkzNWU0YTJmMmZiYzJmKSwgVTY0X0MgKDB4NGVlNzlkOGVjMGMwMjdjMCksCisgICAgVTY0X0MgKDB4YmU4MWExNjBkZWRlNWZkZSksIFU2NF9DICgweGUwNmMzOGZjMWMxYzcwMWMpLAorICAgIFU2NF9DICgweGJiMmVlNzQ2ZmRmZGQzZmQpLCBVNjRfQyAoMHg1MjY0OWExZjRkNGQyOTRkKSwKKyAgICBVNjRfQyAoMHhlNGUwMzk3NjkyOTI3MjkyKSwgVTY0X0MgKDB4OGZiY2VhZmE3NTc1Yzk3NSksCisgICAgVTY0X0MgKDB4MzAxZTBjMzYwNjA2MTgwNiksIFU2NF9DICgweDI0OTgwOWFlOGE4YTEyOGEpLAorICAgIFU2NF9DICgweGY5NDA3OTRiYjJiMmYyYjIpLCBVNjRfQyAoMHg2MzU5ZDE4NWU2ZTZiZmU2KSwKKyAgICBVNjRfQyAoMHg3MDM2MWM3ZTBlMGUzODBlKSwgVTY0X0MgKDB4Zjg2MzNlZTcxZjFmN2MxZiksCisgICAgVTY0X0MgKDB4MzdmN2M0NTU2MjYyOTU2MiksIFU2NF9DICgweGVlYTNiNTNhZDRkNDc3ZDQpLAorICAgIFU2NF9DICgweDI5MzI0ZDgxYThhODlhYTgpLCBVNjRfQyAoMHhjNGY0MzE1Mjk2OTY2Mjk2KSwKKyAgICBVNjRfQyAoMHg5YjNhZWY2MmY5ZjljM2Y5KSwgVTY0X0MgKDB4NjZmNjk3YTNjNWM1MzNjNSksCisgICAgVTY0X0MgKDB4MzViMTRhMTAyNTI1OTQyNSksIFU2NF9DICgweGYyMjBiMmFiNTk1OTc5NTkpLAorICAgIFU2NF9DICgweDU0YWUxNWQwODQ4NDJhODQpLCBVNjRfQyAoMHhiN2E3ZTRjNTcyNzJkNTcyKSwKKyAgICBVNjRfQyAoMHhkNWRkNzJlYzM5MzllNDM5KSwgVTY0X0MgKDB4NWE2MTk4MTY0YzRjMmQ0YyksCisgICAgVTY0X0MgKDB4Y2EzYmJjOTQ1ZTVlNjU1ZSksIFU2NF9DICgweGU3ODVmMDlmNzg3OGZkNzgpLAorICAgIFU2NF9DICgweGRkZDg3MGU1MzgzOGUwMzgpLCBVNjRfQyAoMHgxNDg2MDU5ODhjOGMwYThjKSwKKyAgICBVNjRfQyAoMHhjNmIyYmYxN2QxZDE2M2QxKSwgVTY0X0MgKDB4NDEwYjU3ZTRhNWE1YWVhNSksCisgICAgVTY0X0MgKDB4NDM0ZGQ5YTFlMmUyYWZlMiksIFU2NF9DICgweDJmZjhjMjRlNjE2MTk5NjEpLAorICAgIFU2NF9DICgweGYxNDU3YjQyYjNiM2Y2YjMpLCBVNjRfQyAoMHgxNWE1NDIzNDIxMjE4NDIxKSwKKyAgICBVNjRfQyAoMHg5NGQ2MjUwODljOWM0YTljKSwgVTY0X0MgKDB4ZjA2NjNjZWUxZTFlNzgxZSksCisgICAgVTY0X0MgKDB4MjI1Mjg2NjE0MzQzMTE0MyksIFU2NF9DICgweDc2ZmM5M2IxYzdjNzNiYzcpLAorICAgIFU2NF9DICgweGIzMmJlNTRmZmNmY2Q3ZmMpLCBVNjRfQyAoMHgyMDE0MDgyNDA0MDQxMDA0KSwKKyAgICBVNjRfQyAoMHhiMjA4YTJlMzUxNTE1OTUxKSwgVTY0X0MgKDB4YmNjNzJmMjU5OTk5NWU5OSksCisgICAgVTY0X0MgKDB4NGZjNGRhMjI2ZDZkYTk2ZCksIFU2NF9DICgweDY4MzkxYTY1MGQwZDM0MGQpLAorICAgIFU2NF9DICgweDgzMzVlOTc5ZmFmYWNmZmEpLCBVNjRfQyAoMHhiNjg0YTM2OWRmZGY1YmRmKSwKKyAgICBVNjRfQyAoMHhkNzliZmNhOTdlN2VlNTdlKSwgVTY0X0MgKDB4M2RiNDQ4MTkyNDI0OTAyNCksCisgICAgVTY0X0MgKDB4YzVkNzc2ZmUzYjNiZWMzYiksIFU2NF9DICgweDMxM2Q0YjlhYWJhYjk2YWIpLAorICAgIFU2NF9DICgweDNlZDE4MWYwY2VjZTFmY2UpLCBVNjRfQyAoMHg4ODU1MjI5OTExMTE0NDExKSwKKyAgICBVNjRfQyAoMHgwYzg5MDM4MzhmOGYwNjhmKSwgVTY0X0MgKDB4NGE2YjljMDQ0ZTRlMjU0ZSksCisgICAgVTY0X0MgKDB4ZDE1MTczNjZiN2I3ZTZiNyksIFU2NF9DICgweDBiNjBjYmUwZWJlYjhiZWIpLAorICAgIFU2NF9DICgweGZkY2M3OGMxM2MzY2YwM2MpLCBVNjRfQyAoMHg3Y2JmMWZmZDgxODEzZTgxKSwKKyAgICBVNjRfQyAoMHhkNGZlMzU0MDk0OTQ2YTk0KSwgVTY0X0MgKDB4ZWIwY2YzMWNmN2Y3ZmJmNyksCisgICAgVTY0X0MgKDB4YTE2NzZmMThiOWI5ZGViOSksIFU2NF9DICgweDk4NWYyNjhiMTMxMzRjMTMpLAorICAgIFU2NF9DICgweDdkOWM1ODUxMmMyY2IwMmMpLCBVNjRfQyAoMHhkNmI4YmIwNWQzZDM2YmQzKSwKKyAgICBVNjRfQyAoMHg2YjVjZDM4Y2U3ZTdiYmU3KSwgVTY0X0MgKDB4NTdjYmRjMzk2ZTZlYTU2ZSksCisgICAgVTY0X0MgKDB4NmVmMzk1YWFjNGM0MzdjNCksIFU2NF9DICgweDE4MGYwNjFiMDMwMzBjMDMpLAorICAgIFU2NF9DICgweDhhMTNhY2RjNTY1NjQ1NTYpLCBVNjRfQyAoMHgxYTQ5ODg1ZTQ0NDQwZDQ0KSwKKyAgICBVNjRfQyAoMHhkZjllZmVhMDdmN2ZlMTdmKSwgVTY0X0MgKDB4MjEzNzRmODhhOWE5OWVhOSksCisgICAgVTY0X0MgKDB4NGQ4MjU0NjcyYTJhYTgyYSksIFU2NF9DICgweGIxNmQ2YjBhYmJiYmQ2YmIpLAorICAgIFU2NF9DICgweDQ2ZTI5Zjg3YzFjMTIzYzEpLCBVNjRfQyAoMHhhMjAyYTZmMTUzNTM1MTUzKSwKKyAgICBVNjRfQyAoMHhhZThiYTU3MmRjZGM1N2RjKSwgVTY0X0MgKDB4NTgyNzE2NTMwYjBiMmMwYiksCisgICAgVTY0X0MgKDB4OWNkMzI3MDE5ZDlkNGU5ZCksIFU2NF9DICgweDQ3YzFkODJiNmM2Y2FkNmMpLAorICAgIFU2NF9DICgweDk1ZjU2MmE0MzEzMWM0MzEpLCBVNjRfQyAoMHg4N2I5ZThmMzc0NzRjZDc0KSwKKyAgICBVNjRfQyAoMHhlMzA5ZjExNWY2ZjZmZmY2KSwgVTY0X0MgKDB4MGE0MzhjNGM0NjQ2MDU0NiksCisgICAgVTY0X0MgKDB4MDkyNjQ1YTVhY2FjOGFhYyksIFU2NF9DICgweDNjOTcwZmI1ODk4OTFlODkpLAorICAgIFU2NF9DICgweGEwNDQyOGI0MTQxNDUwMTQpLCBVNjRfQyAoMHg1YjQyZGZiYWUxZTFhM2UxKSwKKyAgICBVNjRfQyAoMHhiMDRlMmNhNjE2MTY1ODE2KSwgVTY0X0MgKDB4Y2RkMjc0ZjczYTNhZTgzYSksCisgICAgVTY0X0MgKDB4NmZkMGQyMDY2OTY5Yjk2OSksIFU2NF9DICgweDQ4MmQxMjQxMDkwOTI0MDkpLAorICAgIFU2NF9DICgweGE3YWRlMGQ3NzA3MGRkNzApLCBVNjRfQyAoMHhkOTU0NzE2ZmI2YjZlMmI2KSwKKyAgICBVNjRfQyAoMHhjZWI3YmQxZWQwZDA2N2QwKSwgVTY0X0MgKDB4M2I3ZWM3ZDZlZGVkOTNlZCksCisgICAgVTY0X0MgKDB4MmVkYjg1ZTJjY2NjMTdjYyksIFU2NF9DICgweDJhNTc4NDY4NDI0MjE1NDIpLAorICAgIFU2NF9DICgweGI0YzIyZDJjOTg5ODVhOTgpLCBVNjRfQyAoMHg0OTBlNTVlZGE0YTRhYWE0KSwKKyAgICBVNjRfQyAoMHg1ZDg4NTA3NTI4MjhhMDI4KSwgVTY0X0MgKDB4ZGEzMWI4ODY1YzVjNmQ1YyksCisgICAgVTY0X0MgKDB4OTMzZmVkNmJmOGY4YzdmOCksIFU2NF9DICgweDQ0YTQxMWMyODY4NjIyODYpLAorICB9OworCitzdGF0aWMgY29uc3QgdTY0IEM1WzI1Nl0gPQorICB7CisgICAgVTY0X0MgKDB4MThjMDc4MzBkODE4MTg2MCksIFU2NF9DICgweDIzMDVhZjQ2MjYyMzIzOGMpLAorICAgIFU2NF9DICgweGM2N2VmOTkxYjhjNmM2M2YpLCBVNjRfQyAoMHhlODEzNmZjZGZiZThlODg3KSwKKyAgICBVNjRfQyAoMHg4NzRjYTExM2NiODc4NzI2KSwgVTY0X0MgKDB4YjhhOTYyNmQxMWI4YjhkYSksCisgICAgVTY0X0MgKDB4MDEwODA1MDIwOTAxMDEwNCksIFU2NF9DICgweDRmNDI2ZTllMGQ0ZjRmMjEpLAorICAgIFU2NF9DICgweDM2YWRlZTZjOWIzNjM2ZDgpLCBVNjRfQyAoMHhhNjU5MDQ1MWZmYTZhNmEyKSwKKyAgICBVNjRfQyAoMHhkMmRlYmRiOTBjZDJkMjZmKSwgVTY0X0MgKDB4ZjVmYjA2ZjcwZWY1ZjVmMyksCisgICAgVTY0X0MgKDB4NzllZjgwZjI5Njc5NzlmOSksIFU2NF9DICgweDZmNWZjZWRlMzA2ZjZmYTEpLAorICAgIFU2NF9DICgweDkxZmNlZjNmNmQ5MTkxN2UpLCBVNjRfQyAoMHg1MmFhMDdhNGY4NTI1MjU1KSwKKyAgICBVNjRfQyAoMHg2MDI3ZmRjMDQ3NjA2MDlkKSwgVTY0X0MgKDB4YmM4OTc2NjUzNWJjYmNjYSksCisgICAgVTY0X0MgKDB4OWJhY2NkMmIzNzliOWI1NiksIFU2NF9DICgweDhlMDQ4YzAxOGE4ZThlMDIpLAorICAgIFU2NF9DICgweGEzNzExNTViZDJhM2EzYjYpLCBVNjRfQyAoMHgwYzYwM2MxODZjMGMwYzMwKSwKKyAgICBVNjRfQyAoMHg3YmZmOGFmNjg0N2I3YmYxKSwgVTY0X0MgKDB4MzViNWUxNmE4MDM1MzVkNCksCisgICAgVTY0X0MgKDB4MWRlODY5M2FmNTFkMWQ3NCksIFU2NF9DICgweGUwNTM0N2RkYjNlMGUwYTcpLAorICAgIFU2NF9DICgweGQ3ZjZhY2IzMjFkN2Q3N2IpLCBVNjRfQyAoMHhjMjVlZWQ5OTljYzJjMjJmKSwKKyAgICBVNjRfQyAoMHgyZTZkOTY1YzQzMmUyZWI4KSwgVTY0X0MgKDB4NGI2MjdhOTYyOTRiNGIzMSksCisgICAgVTY0X0MgKDB4ZmVhMzIxZTE1ZGZlZmVkZiksIFU2NF9DICgweDU3ODIxNmFlZDU1NzU3NDEpLAorICAgIFU2NF9DICgweDE1YTg0MTJhYmQxNTE1NTQpLCBVNjRfQyAoMHg3NzlmYjZlZWU4Nzc3N2MxKSwKKyAgICBVNjRfQyAoMHgzN2E1ZWI2ZTkyMzczN2RjKSwgVTY0X0MgKDB4ZTU3YjU2ZDc5ZWU1ZTViMyksCisgICAgVTY0X0MgKDB4OWY4Y2Q5MjMxMzlmOWY0NiksIFU2NF9DICgweGYwZDMxN2ZkMjNmMGYwZTcpLAorICAgIFU2NF9DICgweDRhNmE3Zjk0MjA0YTRhMzUpLCBVNjRfQyAoMHhkYTllOTVhOTQ0ZGFkYTRmKSwKKyAgICBVNjRfQyAoMHg1OGZhMjViMGEyNTg1ODdkKSwgVTY0X0MgKDB4YzkwNmNhOGZjZmM5YzkwMyksCisgICAgVTY0X0MgKDB4Mjk1NThkNTI3YzI5MjlhNCksIFU2NF9DICgweDBhNTAyMjE0NWEwYTBhMjgpLAorICAgIFU2NF9DICgweGIxZTE0ZjdmNTBiMWIxZmUpLCBVNjRfQyAoMHhhMDY5MWE1ZGM5YTBhMGJhKSwKKyAgICBVNjRfQyAoMHg2YjdmZGFkNjE0NmI2YmIxKSwgVTY0X0MgKDB4ODU1Y2FiMTdkOTg1ODUyZSksCisgICAgVTY0X0MgKDB4YmQ4MTczNjczY2JkYmRjZSksIFU2NF9DICgweDVkZDIzNGJhOGY1ZDVkNjkpLAorICAgIFU2NF9DICgweDEwODA1MDIwOTAxMDEwNDApLCBVNjRfQyAoMHhmNGYzMDNmNTA3ZjRmNGY3KSwKKyAgICBVNjRfQyAoMHhjYjE2YzA4YmRkY2JjYjBiKSwgVTY0X0MgKDB4M2VlZGM2N2NkMzNlM2VmOCksCisgICAgVTY0X0MgKDB4MDUyODExMGEyZDA1MDUxNCksIFU2NF9DICgweDY3MWZlNmNlNzg2NzY3ODEpLAorICAgIFU2NF9DICgweGU0NzM1M2Q1OTdlNGU0YjcpLCBVNjRfQyAoMHgyNzI1YmI0ZTAyMjcyNzljKSwKKyAgICBVNjRfQyAoMHg0MTMyNTg4MjczNDE0MTE5KSwgVTY0X0MgKDB4OGIyYzlkMGJhNzhiOGIxNiksCisgICAgVTY0X0MgKDB4YTc1MTAxNTNmNmE3YTdhNiksIFU2NF9DICgweDdkY2Y5NGZhYjI3ZDdkZTkpLAorICAgIFU2NF9DICgweDk1ZGNmYjM3NDk5NTk1NmUpLCBVNjRfQyAoMHhkODhlOWZhZDU2ZDhkODQ3KSwKKyAgICBVNjRfQyAoMHhmYjhiMzBlYjcwZmJmYmNiKSwgVTY0X0MgKDB4ZWUyMzcxYzFjZGVlZWU5ZiksCisgICAgVTY0X0MgKDB4N2NjNzkxZjhiYjdjN2NlZCksIFU2NF9DICgweDY2MTdlM2NjNzE2NjY2ODUpLAorICAgIFU2NF9DICgweGRkYTY4ZWE3N2JkZGRkNTMpLCBVNjRfQyAoMHgxN2I4NGIyZWFmMTcxNzVjKSwKKyAgICBVNjRfQyAoMHg0NzAyNDY4ZTQ1NDc0NzAxKSwgVTY0X0MgKDB4OWU4NGRjMjExYTllOWU0MiksCisgICAgVTY0X0MgKDB4Y2ExZWM1ODlkNGNhY2EwZiksIFU2NF9DICgweDJkNzU5OTVhNTgyZDJkYjQpLAorICAgIFU2NF9DICgweGJmOTE3OTYzMmViZmJmYzYpLCBVNjRfQyAoMHgwNzM4MWIwZTNmMDcwNzFjKSwKKyAgICBVNjRfQyAoMHhhZDAxMjM0N2FjYWRhZDhlKSwgVTY0X0MgKDB4NWFlYTJmYjRiMDVhNWE3NSksCisgICAgVTY0X0MgKDB4ODM2Y2I1MWJlZjgzODMzNiksIFU2NF9DICgweDMzODVmZjY2YjYzMzMzY2MpLAorICAgIFU2NF9DICgweDYzM2ZmMmM2NWM2MzYzOTEpLCBVNjRfQyAoMHgwMjEwMGEwNDEyMDIwMjA4KSwKKyAgICBVNjRfQyAoMHhhYTM5Mzg0OTkzYWFhYTkyKSwgVTY0X0MgKDB4NzFhZmE4ZTJkZTcxNzFkOSksCisgICAgVTY0X0MgKDB4YzgwZWNmOGRjNmM4YzgwNyksIFU2NF9DICgweDE5Yzg3ZDMyZDExOTE5NjQpLAorICAgIFU2NF9DICgweDQ5NzI3MDkyM2I0OTQ5MzkpLCBVNjRfQyAoMHhkOTg2OWFhZjVmZDlkOTQzKSwKKyAgICBVNjRfQyAoMHhmMmMzMWRmOTMxZjJmMmVmKSwgVTY0X0MgKDB4ZTM0YjQ4ZGJhOGUzZTNhYiksCisgICAgVTY0X0MgKDB4NWJlMjJhYjZiOTViNWI3MSksIFU2NF9DICgweDg4MzQ5MjBkYmM4ODg4MWEpLAorICAgIFU2NF9DICgweDlhYTRjODI5M2U5YTlhNTIpLCBVNjRfQyAoMHgyNjJkYmU0YzBiMjYyNjk4KSwKKyAgICBVNjRfQyAoMHgzMjhkZmE2NGJmMzIzMmM4KSwgVTY0X0MgKDB4YjBlOTRhN2Q1OWIwYjBmYSksCisgICAgVTY0X0MgKDB4ZTkxYjZhY2ZmMmU5ZTk4MyksIFU2NF9DICgweDBmNzgzMzFlNzcwZjBmM2MpLAorICAgIFU2NF9DICgweGQ1ZTZhNmI3MzNkNWQ1NzMpLCBVNjRfQyAoMHg4MDc0YmExZGY0ODA4MDNhKSwKKyAgICBVNjRfQyAoMHhiZTk5N2M2MTI3YmViZWMyKSwgVTY0X0MgKDB4Y2QyNmRlODdlYmNkY2QxMyksCisgICAgVTY0X0MgKDB4MzRiZGU0Njg4OTM0MzRkMCksIFU2NF9DICgweDQ4N2E3NTkwMzI0ODQ4M2QpLAorICAgIFU2NF9DICgweGZmYWIyNGUzNTRmZmZmZGIpLCBVNjRfQyAoMHg3YWY3OGZmNDhkN2E3YWY1KSwKKyAgICBVNjRfQyAoMHg5MGY0ZWEzZDY0OTA5MDdhKSwgVTY0X0MgKDB4NWZjMjNlYmU5ZDVmNWY2MSksCisgICAgVTY0X0MgKDB4MjAxZGEwNDAzZDIwMjA4MCksIFU2NF9DICgweDY4NjdkNWQwMGY2ODY4YmQpLAorICAgIFU2NF9DICgweDFhZDA3MjM0Y2ExYTFhNjgpLCBVNjRfQyAoMHhhZTE5MmM0MWI3YWVhZTgyKSwKKyAgICBVNjRfQyAoMHhiNGM5NWU3NTdkYjRiNGVhKSwgVTY0X0MgKDB4NTQ5YTE5YThjZTU0NTQ0ZCksCisgICAgVTY0X0MgKDB4OTNlY2U1M2I3ZjkzOTM3NiksIFU2NF9DICgweDIyMGRhYTQ0MmYyMjIyODgpLAorICAgIFU2NF9DICgweDY0MDdlOWM4NjM2NDY0OGQpLCBVNjRfQyAoMHhmMWRiMTJmZjJhZjFmMWUzKSwKKyAgICBVNjRfQyAoMHg3M2JmYTJlNmNjNzM3M2QxKSwgVTY0X0MgKDB4MTI5MDVhMjQ4MjEyMTI0OCksCisgICAgVTY0X0MgKDB4NDAzYTVkODA3YTQwNDAxZCksIFU2NF9DICgweDA4NDAyODEwNDgwODA4MjApLAorICAgIFU2NF9DICgweGMzNTZlODliOTVjM2MzMmIpLCBVNjRfQyAoMHhlYzMzN2JjNWRmZWNlYzk3KSwKKyAgICBVNjRfQyAoMHhkYjk2OTBhYjRkZGJkYjRiKSwgVTY0X0MgKDB4YTE2MTFmNWZjMGExYTFiZSksCisgICAgVTY0X0MgKDB4OGQxYzgzMDc5MThkOGQwZSksIFU2NF9DICgweDNkZjVjOTdhYzgzZDNkZjQpLAorICAgIFU2NF9DICgweDk3Y2NmMTMzNWI5Nzk3NjYpLCBVNjRfQyAoMHgwMDAwMDAwMDAwMDAwMDAwKSwKKyAgICBVNjRfQyAoMHhjZjM2ZDQ4M2Y5Y2ZjZjFiKSwgVTY0X0MgKDB4MmI0NTg3NTY2ZTJiMmJhYyksCisgICAgVTY0X0MgKDB4NzY5N2IzZWNlMTc2NzZjNSksIFU2NF9DICgweDgyNjRiMDE5ZTY4MjgyMzIpLAorICAgIFU2NF9DICgweGQ2ZmVhOWIxMjhkNmQ2N2YpLCBVNjRfQyAoMHgxYmQ4NzczNmMzMWIxYjZjKSwKKyAgICBVNjRfQyAoMHhiNWMxNWI3Nzc0YjViNWVlKSwgVTY0X0MgKDB4YWYxMTI5NDNiZWFmYWY4NiksCisgICAgVTY0X0MgKDB4NmE3N2RmZDQxZDZhNmFiNSksIFU2NF9DICgweDUwYmEwZGEwZWE1MDUwNWQpLAorICAgIFU2NF9DICgweDQ1MTI0YzhhNTc0NTQ1MDkpLCBVNjRfQyAoMHhmM2NiMThmYjM4ZjNmM2ViKSwKKyAgICBVNjRfQyAoMHgzMDlkZjA2MGFkMzAzMGMwKSwgVTY0X0MgKDB4ZWYyYjc0YzNjNGVmZWY5YiksCisgICAgVTY0X0MgKDB4M2ZlNWMzN2VkYTNmM2ZmYyksIFU2NF9DICgweDU1OTIxY2FhYzc1NTU1NDkpLAorICAgIFU2NF9DICgweGEyNzkxMDU5ZGJhMmEyYjIpLCBVNjRfQyAoMHhlYTAzNjVjOWU5ZWFlYThmKSwKKyAgICBVNjRfQyAoMHg2NTBmZWNjYTZhNjU2NTg5KSwgVTY0X0MgKDB4YmFiOTY4NjkwM2JhYmFkMiksCisgICAgVTY0X0MgKDB4MmY2NTkzNWU0YTJmMmZiYyksIFU2NF9DICgweGMwNGVlNzlkOGVjMGMwMjcpLAorICAgIFU2NF9DICgweGRlYmU4MWExNjBkZWRlNWYpLCBVNjRfQyAoMHgxY2UwNmMzOGZjMWMxYzcwKSwKKyAgICBVNjRfQyAoMHhmZGJiMmVlNzQ2ZmRmZGQzKSwgVTY0X0MgKDB4NGQ1MjY0OWExZjRkNGQyOSksCisgICAgVTY0X0MgKDB4OTJlNGUwMzk3NjkyOTI3MiksIFU2NF9DICgweDc1OGZiY2VhZmE3NTc1YzkpLAorICAgIFU2NF9DICgweDA2MzAxZTBjMzYwNjA2MTgpLCBVNjRfQyAoMHg4YTI0OTgwOWFlOGE4YTEyKSwKKyAgICBVNjRfQyAoMHhiMmY5NDA3OTRiYjJiMmYyKSwgVTY0X0MgKDB4ZTY2MzU5ZDE4NWU2ZTZiZiksCisgICAgVTY0X0MgKDB4MGU3MDM2MWM3ZTBlMGUzOCksIFU2NF9DICgweDFmZjg2MzNlZTcxZjFmN2MpLAorICAgIFU2NF9DICgweDYyMzdmN2M0NTU2MjYyOTUpLCBVNjRfQyAoMHhkNGVlYTNiNTNhZDRkNDc3KSwKKyAgICBVNjRfQyAoMHhhODI5MzI0ZDgxYThhODlhKSwgVTY0X0MgKDB4OTZjNGY0MzE1Mjk2OTY2MiksCisgICAgVTY0X0MgKDB4Zjk5YjNhZWY2MmY5ZjljMyksIFU2NF9DICgweGM1NjZmNjk3YTNjNWM1MzMpLAorICAgIFU2NF9DICgweDI1MzViMTRhMTAyNTI1OTQpLCBVNjRfQyAoMHg1OWYyMjBiMmFiNTk1OTc5KSwKKyAgICBVNjRfQyAoMHg4NDU0YWUxNWQwODQ4NDJhKSwgVTY0X0MgKDB4NzJiN2E3ZTRjNTcyNzJkNSksCisgICAgVTY0X0MgKDB4MzlkNWRkNzJlYzM5MzllNCksIFU2NF9DICgweDRjNWE2MTk4MTY0YzRjMmQpLAorICAgIFU2NF9DICgweDVlY2EzYmJjOTQ1ZTVlNjUpLCBVNjRfQyAoMHg3OGU3ODVmMDlmNzg3OGZkKSwKKyAgICBVNjRfQyAoMHgzOGRkZDg3MGU1MzgzOGUwKSwgVTY0X0MgKDB4OGMxNDg2MDU5ODhjOGMwYSksCisgICAgVTY0X0MgKDB4ZDFjNmIyYmYxN2QxZDE2MyksIFU2NF9DICgweGE1NDEwYjU3ZTRhNWE1YWUpLAorICAgIFU2NF9DICgweGUyNDM0ZGQ5YTFlMmUyYWYpLCBVNjRfQyAoMHg2MTJmZjhjMjRlNjE2MTk5KSwKKyAgICBVNjRfQyAoMHhiM2YxNDU3YjQyYjNiM2Y2KSwgVTY0X0MgKDB4MjExNWE1NDIzNDIxMjE4NCksCisgICAgVTY0X0MgKDB4OWM5NGQ2MjUwODljOWM0YSksIFU2NF9DICgweDFlZjA2NjNjZWUxZTFlNzgpLAorICAgIFU2NF9DICgweDQzMjI1Mjg2NjE0MzQzMTEpLCBVNjRfQyAoMHhjNzc2ZmM5M2IxYzdjNzNiKSwKKyAgICBVNjRfQyAoMHhmY2IzMmJlNTRmZmNmY2Q3KSwgVTY0X0MgKDB4MDQyMDE0MDgyNDA0MDQxMCksCisgICAgVTY0X0MgKDB4NTFiMjA4YTJlMzUxNTE1OSksIFU2NF9DICgweDk5YmNjNzJmMjU5OTk5NWUpLAorICAgIFU2NF9DICgweDZkNGZjNGRhMjI2ZDZkYTkpLCBVNjRfQyAoMHgwZDY4MzkxYTY1MGQwZDM0KSwKKyAgICBVNjRfQyAoMHhmYTgzMzVlOTc5ZmFmYWNmKSwgVTY0X0MgKDB4ZGZiNjg0YTM2OWRmZGY1YiksCisgICAgVTY0X0MgKDB4N2VkNzliZmNhOTdlN2VlNSksIFU2NF9DICgweDI0M2RiNDQ4MTkyNDI0OTApLAorICAgIFU2NF9DICgweDNiYzVkNzc2ZmUzYjNiZWMpLCBVNjRfQyAoMHhhYjMxM2Q0YjlhYWJhYjk2KSwKKyAgICBVNjRfQyAoMHhjZTNlZDE4MWYwY2VjZTFmKSwgVTY0X0MgKDB4MTE4ODU1MjI5OTExMTE0NCksCisgICAgVTY0X0MgKDB4OGYwYzg5MDM4MzhmOGYwNiksIFU2NF9DICgweDRlNGE2YjljMDQ0ZTRlMjUpLAorICAgIFU2NF9DICgweGI3ZDE1MTczNjZiN2I3ZTYpLCBVNjRfQyAoMHhlYjBiNjBjYmUwZWJlYjhiKSwKKyAgICBVNjRfQyAoMHgzY2ZkY2M3OGMxM2MzY2YwKSwgVTY0X0MgKDB4ODE3Y2JmMWZmZDgxODEzZSksCisgICAgVTY0X0MgKDB4OTRkNGZlMzU0MDk0OTQ2YSksIFU2NF9DICgweGY3ZWIwY2YzMWNmN2Y3ZmIpLAorICAgIFU2NF9DICgweGI5YTE2NzZmMThiOWI5ZGUpLCBVNjRfQyAoMHgxMzk4NWYyNjhiMTMxMzRjKSwKKyAgICBVNjRfQyAoMHgyYzdkOWM1ODUxMmMyY2IwKSwgVTY0X0MgKDB4ZDNkNmI4YmIwNWQzZDM2YiksCisgICAgVTY0X0MgKDB4ZTc2YjVjZDM4Y2U3ZTdiYiksIFU2NF9DICgweDZlNTdjYmRjMzk2ZTZlYTUpLAorICAgIFU2NF9DICgweGM0NmVmMzk1YWFjNGM0MzcpLCBVNjRfQyAoMHgwMzE4MGYwNjFiMDMwMzBjKSwKKyAgICBVNjRfQyAoMHg1NjhhMTNhY2RjNTY1NjQ1KSwgVTY0X0MgKDB4NDQxYTQ5ODg1ZTQ0NDQwZCksCisgICAgVTY0X0MgKDB4N2ZkZjllZmVhMDdmN2ZlMSksIFU2NF9DICgweGE5MjEzNzRmODhhOWE5OWUpLAorICAgIFU2NF9DICgweDJhNGQ4MjU0NjcyYTJhYTgpLCBVNjRfQyAoMHhiYmIxNmQ2YjBhYmJiYmQ2KSwKKyAgICBVNjRfQyAoMHhjMTQ2ZTI5Zjg3YzFjMTIzKSwgVTY0X0MgKDB4NTNhMjAyYTZmMTUzNTM1MSksCisgICAgVTY0X0MgKDB4ZGNhZThiYTU3MmRjZGM1NyksIFU2NF9DICgweDBiNTgyNzE2NTMwYjBiMmMpLAorICAgIFU2NF9DICgweDlkOWNkMzI3MDE5ZDlkNGUpLCBVNjRfQyAoMHg2YzQ3YzFkODJiNmM2Y2FkKSwKKyAgICBVNjRfQyAoMHgzMTk1ZjU2MmE0MzEzMWM0KSwgVTY0X0MgKDB4NzQ4N2I5ZThmMzc0NzRjZCksCisgICAgVTY0X0MgKDB4ZjZlMzA5ZjExNWY2ZjZmZiksIFU2NF9DICgweDQ2MGE0MzhjNGM0NjQ2MDUpLAorICAgIFU2NF9DICgweGFjMDkyNjQ1YTVhY2FjOGEpLCBVNjRfQyAoMHg4OTNjOTcwZmI1ODk4OTFlKSwKKyAgICBVNjRfQyAoMHgxNGEwNDQyOGI0MTQxNDUwKSwgVTY0X0MgKDB4ZTE1YjQyZGZiYWUxZTFhMyksCisgICAgVTY0X0MgKDB4MTZiMDRlMmNhNjE2MTY1OCksIFU2NF9DICgweDNhY2RkMjc0ZjczYTNhZTgpLAorICAgIFU2NF9DICgweDY5NmZkMGQyMDY2OTY5YjkpLCBVNjRfQyAoMHgwOTQ4MmQxMjQxMDkwOTI0KSwKKyAgICBVNjRfQyAoMHg3MGE3YWRlMGQ3NzA3MGRkKSwgVTY0X0MgKDB4YjZkOTU0NzE2ZmI2YjZlMiksCisgICAgVTY0X0MgKDB4ZDBjZWI3YmQxZWQwZDA2NyksIFU2NF9DICgweGVkM2I3ZWM3ZDZlZGVkOTMpLAorICAgIFU2NF9DICgweGNjMmVkYjg1ZTJjY2NjMTcpLCBVNjRfQyAoMHg0MjJhNTc4NDY4NDI0MjE1KSwKKyAgICBVNjRfQyAoMHg5OGI0YzIyZDJjOTg5ODVhKSwgVTY0X0MgKDB4YTQ0OTBlNTVlZGE0YTRhYSksCisgICAgVTY0X0MgKDB4Mjg1ZDg4NTA3NTI4MjhhMCksIFU2NF9DICgweDVjZGEzMWI4ODY1YzVjNmQpLAorICAgIFU2NF9DICgweGY4OTMzZmVkNmJmOGY4YzcpLCBVNjRfQyAoMHg4NjQ0YTQxMWMyODY4NjIyKSwKKyAgfTsKKworc3RhdGljIGNvbnN0IHU2NCBDNlsyNTZdID0KKyAgeworICAgIFU2NF9DICgweDYwMThjMDc4MzBkODE4MTgpLCBVNjRfQyAoMHg4YzIzMDVhZjQ2MjYyMzIzKSwKKyAgICBVNjRfQyAoMHgzZmM2N2VmOTkxYjhjNmM2KSwgVTY0X0MgKDB4ODdlODEzNmZjZGZiZThlOCksCisgICAgVTY0X0MgKDB4MjY4NzRjYTExM2NiODc4NyksIFU2NF9DICgweGRhYjhhOTYyNmQxMWI4YjgpLAorICAgIFU2NF9DICgweDA0MDEwODA1MDIwOTAxMDEpLCBVNjRfQyAoMHgyMTRmNDI2ZTllMGQ0ZjRmKSwKKyAgICBVNjRfQyAoMHhkODM2YWRlZTZjOWIzNjM2KSwgVTY0X0MgKDB4YTJhNjU5MDQ1MWZmYTZhNiksCisgICAgVTY0X0MgKDB4NmZkMmRlYmRiOTBjZDJkMiksIFU2NF9DICgweGYzZjVmYjA2ZjcwZWY1ZjUpLAorICAgIFU2NF9DICgweGY5NzllZjgwZjI5Njc5NzkpLCBVNjRfQyAoMHhhMTZmNWZjZWRlMzA2ZjZmKSwKKyAgICBVNjRfQyAoMHg3ZTkxZmNlZjNmNmQ5MTkxKSwgVTY0X0MgKDB4NTU1MmFhMDdhNGY4NTI1MiksCisgICAgVTY0X0MgKDB4OWQ2MDI3ZmRjMDQ3NjA2MCksIFU2NF9DICgweGNhYmM4OTc2NjUzNWJjYmMpLAorICAgIFU2NF9DICgweDU2OWJhY2NkMmIzNzliOWIpLCBVNjRfQyAoMHgwMjhlMDQ4YzAxOGE4ZThlKSwKKyAgICBVNjRfQyAoMHhiNmEzNzExNTViZDJhM2EzKSwgVTY0X0MgKDB4MzAwYzYwM2MxODZjMGMwYyksCisgICAgVTY0X0MgKDB4ZjE3YmZmOGFmNjg0N2I3YiksIFU2NF9DICgweGQ0MzViNWUxNmE4MDM1MzUpLAorICAgIFU2NF9DICgweDc0MWRlODY5M2FmNTFkMWQpLCBVNjRfQyAoMHhhN2UwNTM0N2RkYjNlMGUwKSwKKyAgICBVNjRfQyAoMHg3YmQ3ZjZhY2IzMjFkN2Q3KSwgVTY0X0MgKDB4MmZjMjVlZWQ5OTljYzJjMiksCisgICAgVTY0X0MgKDB4YjgyZTZkOTY1YzQzMmUyZSksIFU2NF9DICgweDMxNGI2MjdhOTYyOTRiNGIpLAorICAgIFU2NF9DICgweGRmZmVhMzIxZTE1ZGZlZmUpLCBVNjRfQyAoMHg0MTU3ODIxNmFlZDU1NzU3KSwKKyAgICBVNjRfQyAoMHg1NDE1YTg0MTJhYmQxNTE1KSwgVTY0X0MgKDB4YzE3NzlmYjZlZWU4Nzc3NyksCisgICAgVTY0X0MgKDB4ZGMzN2E1ZWI2ZTkyMzczNyksIFU2NF9DICgweGIzZTU3YjU2ZDc5ZWU1ZTUpLAorICAgIFU2NF9DICgweDQ2OWY4Y2Q5MjMxMzlmOWYpLCBVNjRfQyAoMHhlN2YwZDMxN2ZkMjNmMGYwKSwKKyAgICBVNjRfQyAoMHgzNTRhNmE3Zjk0MjA0YTRhKSwgVTY0X0MgKDB4NGZkYTllOTVhOTQ0ZGFkYSksCisgICAgVTY0X0MgKDB4N2Q1OGZhMjViMGEyNTg1OCksIFU2NF9DICgweDAzYzkwNmNhOGZjZmM5YzkpLAorICAgIFU2NF9DICgweGE0Mjk1NThkNTI3YzI5MjkpLCBVNjRfQyAoMHgyODBhNTAyMjE0NWEwYTBhKSwKKyAgICBVNjRfQyAoMHhmZWIxZTE0ZjdmNTBiMWIxKSwgVTY0X0MgKDB4YmFhMDY5MWE1ZGM5YTBhMCksCisgICAgVTY0X0MgKDB4YjE2YjdmZGFkNjE0NmI2YiksIFU2NF9DICgweDJlODU1Y2FiMTdkOTg1ODUpLAorICAgIFU2NF9DICgweGNlYmQ4MTczNjczY2JkYmQpLCBVNjRfQyAoMHg2OTVkZDIzNGJhOGY1ZDVkKSwKKyAgICBVNjRfQyAoMHg0MDEwODA1MDIwOTAxMDEwKSwgVTY0X0MgKDB4ZjdmNGYzMDNmNTA3ZjRmNCksCisgICAgVTY0X0MgKDB4MGJjYjE2YzA4YmRkY2JjYiksIFU2NF9DICgweGY4M2VlZGM2N2NkMzNlM2UpLAorICAgIFU2NF9DICgweDE0MDUyODExMGEyZDA1MDUpLCBVNjRfQyAoMHg4MTY3MWZlNmNlNzg2NzY3KSwKKyAgICBVNjRfQyAoMHhiN2U0NzM1M2Q1OTdlNGU0KSwgVTY0X0MgKDB4OWMyNzI1YmI0ZTAyMjcyNyksCisgICAgVTY0X0MgKDB4MTk0MTMyNTg4MjczNDE0MSksIFU2NF9DICgweDE2OGIyYzlkMGJhNzhiOGIpLAorICAgIFU2NF9DICgweGE2YTc1MTAxNTNmNmE3YTcpLCBVNjRfQyAoMHhlOTdkY2Y5NGZhYjI3ZDdkKSwKKyAgICBVNjRfQyAoMHg2ZTk1ZGNmYjM3NDk5NTk1KSwgVTY0X0MgKDB4NDdkODhlOWZhZDU2ZDhkOCksCisgICAgVTY0X0MgKDB4Y2JmYjhiMzBlYjcwZmJmYiksIFU2NF9DICgweDlmZWUyMzcxYzFjZGVlZWUpLAorICAgIFU2NF9DICgweGVkN2NjNzkxZjhiYjdjN2MpLCBVNjRfQyAoMHg4NTY2MTdlM2NjNzE2NjY2KSwKKyAgICBVNjRfQyAoMHg1M2RkYTY4ZWE3N2JkZGRkKSwgVTY0X0MgKDB4NWMxN2I4NGIyZWFmMTcxNyksCisgICAgVTY0X0MgKDB4MDE0NzAyNDY4ZTQ1NDc0NyksIFU2NF9DICgweDQyOWU4NGRjMjExYTllOWUpLAorICAgIFU2NF9DICgweDBmY2ExZWM1ODlkNGNhY2EpLCBVNjRfQyAoMHhiNDJkNzU5OTVhNTgyZDJkKSwKKyAgICBVNjRfQyAoMHhjNmJmOTE3OTYzMmViZmJmKSwgVTY0X0MgKDB4MWMwNzM4MWIwZTNmMDcwNyksCisgICAgVTY0X0MgKDB4OGVhZDAxMjM0N2FjYWRhZCksIFU2NF9DICgweDc1NWFlYTJmYjRiMDVhNWEpLAorICAgIFU2NF9DICgweDM2ODM2Y2I1MWJlZjgzODMpLCBVNjRfQyAoMHhjYzMzODVmZjY2YjYzMzMzKSwKKyAgICBVNjRfQyAoMHg5MTYzM2ZmMmM2NWM2MzYzKSwgVTY0X0MgKDB4MDgwMjEwMGEwNDEyMDIwMiksCisgICAgVTY0X0MgKDB4OTJhYTM5Mzg0OTkzYWFhYSksIFU2NF9DICgweGQ5NzFhZmE4ZTJkZTcxNzEpLAorICAgIFU2NF9DICgweDA3YzgwZWNmOGRjNmM4YzgpLCBVNjRfQyAoMHg2NDE5Yzg3ZDMyZDExOTE5KSwKKyAgICBVNjRfQyAoMHgzOTQ5NzI3MDkyM2I0OTQ5KSwgVTY0X0MgKDB4NDNkOTg2OWFhZjVmZDlkOSksCisgICAgVTY0X0MgKDB4ZWZmMmMzMWRmOTMxZjJmMiksIFU2NF9DICgweGFiZTM0YjQ4ZGJhOGUzZTMpLAorICAgIFU2NF9DICgweDcxNWJlMjJhYjZiOTViNWIpLCBVNjRfQyAoMHgxYTg4MzQ5MjBkYmM4ODg4KSwKKyAgICBVNjRfQyAoMHg1MjlhYTRjODI5M2U5YTlhKSwgVTY0X0MgKDB4OTgyNjJkYmU0YzBiMjYyNiksCisgICAgVTY0X0MgKDB4YzgzMjhkZmE2NGJmMzIzMiksIFU2NF9DICgweGZhYjBlOTRhN2Q1OWIwYjApLAorICAgIFU2NF9DICgweDgzZTkxYjZhY2ZmMmU5ZTkpLCBVNjRfQyAoMHgzYzBmNzgzMzFlNzcwZjBmKSwKKyAgICBVNjRfQyAoMHg3M2Q1ZTZhNmI3MzNkNWQ1KSwgVTY0X0MgKDB4M2E4MDc0YmExZGY0ODA4MCksCisgICAgVTY0X0MgKDB4YzJiZTk5N2M2MTI3YmViZSksIFU2NF9DICgweDEzY2QyNmRlODdlYmNkY2QpLAorICAgIFU2NF9DICgweGQwMzRiZGU0Njg4OTM0MzQpLCBVNjRfQyAoMHgzZDQ4N2E3NTkwMzI0ODQ4KSwKKyAgICBVNjRfQyAoMHhkYmZmYWIyNGUzNTRmZmZmKSwgVTY0X0MgKDB4ZjU3YWY3OGZmNDhkN2E3YSksCisgICAgVTY0X0MgKDB4N2E5MGY0ZWEzZDY0OTA5MCksIFU2NF9DICgweDYxNWZjMjNlYmU5ZDVmNWYpLAorICAgIFU2NF9DICgweDgwMjAxZGEwNDAzZDIwMjApLCBVNjRfQyAoMHhiZDY4NjdkNWQwMGY2ODY4KSwKKyAgICBVNjRfQyAoMHg2ODFhZDA3MjM0Y2ExYTFhKSwgVTY0X0MgKDB4ODJhZTE5MmM0MWI3YWVhZSksCisgICAgVTY0X0MgKDB4ZWFiNGM5NWU3NTdkYjRiNCksIFU2NF9DICgweDRkNTQ5YTE5YThjZTU0NTQpLAorICAgIFU2NF9DICgweDc2OTNlY2U1M2I3ZjkzOTMpLCBVNjRfQyAoMHg4ODIyMGRhYTQ0MmYyMjIyKSwKKyAgICBVNjRfQyAoMHg4ZDY0MDdlOWM4NjM2NDY0KSwgVTY0X0MgKDB4ZTNmMWRiMTJmZjJhZjFmMSksCisgICAgVTY0X0MgKDB4ZDE3M2JmYTJlNmNjNzM3MyksIFU2NF9DICgweDQ4MTI5MDVhMjQ4MjEyMTIpLAorICAgIFU2NF9DICgweDFkNDAzYTVkODA3YTQwNDApLCBVNjRfQyAoMHgyMDA4NDAyODEwNDgwODA4KSwKKyAgICBVNjRfQyAoMHgyYmMzNTZlODliOTVjM2MzKSwgVTY0X0MgKDB4OTdlYzMzN2JjNWRmZWNlYyksCisgICAgVTY0X0MgKDB4NGJkYjk2OTBhYjRkZGJkYiksIFU2NF9DICgweGJlYTE2MTFmNWZjMGExYTEpLAorICAgIFU2NF9DICgweDBlOGQxYzgzMDc5MThkOGQpLCBVNjRfQyAoMHhmNDNkZjVjOTdhYzgzZDNkKSwKKyAgICBVNjRfQyAoMHg2Njk3Y2NmMTMzNWI5Nzk3KSwgVTY0X0MgKDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0X0MgKDB4MWJjZjM2ZDQ4M2Y5Y2ZjZiksIFU2NF9DICgweGFjMmI0NTg3NTY2ZTJiMmIpLAorICAgIFU2NF9DICgweGM1NzY5N2IzZWNlMTc2NzYpLCBVNjRfQyAoMHgzMjgyNjRiMDE5ZTY4MjgyKSwKKyAgICBVNjRfQyAoMHg3ZmQ2ZmVhOWIxMjhkNmQ2KSwgVTY0X0MgKDB4NmMxYmQ4NzczNmMzMWIxYiksCisgICAgVTY0X0MgKDB4ZWViNWMxNWI3Nzc0YjViNSksIFU2NF9DICgweDg2YWYxMTI5NDNiZWFmYWYpLAorICAgIFU2NF9DICgweGI1NmE3N2RmZDQxZDZhNmEpLCBVNjRfQyAoMHg1ZDUwYmEwZGEwZWE1MDUwKSwKKyAgICBVNjRfQyAoMHgwOTQ1MTI0YzhhNTc0NTQ1KSwgVTY0X0MgKDB4ZWJmM2NiMThmYjM4ZjNmMyksCisgICAgVTY0X0MgKDB4YzAzMDlkZjA2MGFkMzAzMCksIFU2NF9DICgweDliZWYyYjc0YzNjNGVmZWYpLAorICAgIFU2NF9DICgweGZjM2ZlNWMzN2VkYTNmM2YpLCBVNjRfQyAoMHg0OTU1OTIxY2FhYzc1NTU1KSwKKyAgICBVNjRfQyAoMHhiMmEyNzkxMDU5ZGJhMmEyKSwgVTY0X0MgKDB4OGZlYTAzNjVjOWU5ZWFlYSksCisgICAgVTY0X0MgKDB4ODk2NTBmZWNjYTZhNjU2NSksIFU2NF9DICgweGQyYmFiOTY4NjkwM2JhYmEpLAorICAgIFU2NF9DICgweGJjMmY2NTkzNWU0YTJmMmYpLCBVNjRfQyAoMHgyN2MwNGVlNzlkOGVjMGMwKSwKKyAgICBVNjRfQyAoMHg1ZmRlYmU4MWExNjBkZWRlKSwgVTY0X0MgKDB4NzAxY2UwNmMzOGZjMWMxYyksCisgICAgVTY0X0MgKDB4ZDNmZGJiMmVlNzQ2ZmRmZCksIFU2NF9DICgweDI5NGQ1MjY0OWExZjRkNGQpLAorICAgIFU2NF9DICgweDcyOTJlNGUwMzk3NjkyOTIpLCBVNjRfQyAoMHhjOTc1OGZiY2VhZmE3NTc1KSwKKyAgICBVNjRfQyAoMHgxODA2MzAxZTBjMzYwNjA2KSwgVTY0X0MgKDB4MTI4YTI0OTgwOWFlOGE4YSksCisgICAgVTY0X0MgKDB4ZjJiMmY5NDA3OTRiYjJiMiksIFU2NF9DICgweGJmZTY2MzU5ZDE4NWU2ZTYpLAorICAgIFU2NF9DICgweDM4MGU3MDM2MWM3ZTBlMGUpLCBVNjRfQyAoMHg3YzFmZjg2MzNlZTcxZjFmKSwKKyAgICBVNjRfQyAoMHg5NTYyMzdmN2M0NTU2MjYyKSwgVTY0X0MgKDB4NzdkNGVlYTNiNTNhZDRkNCksCisgICAgVTY0X0MgKDB4OWFhODI5MzI0ZDgxYThhOCksIFU2NF9DICgweDYyOTZjNGY0MzE1Mjk2OTYpLAorICAgIFU2NF9DICgweGMzZjk5YjNhZWY2MmY5ZjkpLCBVNjRfQyAoMHgzM2M1NjZmNjk3YTNjNWM1KSwKKyAgICBVNjRfQyAoMHg5NDI1MzViMTRhMTAyNTI1KSwgVTY0X0MgKDB4Nzk1OWYyMjBiMmFiNTk1OSksCisgICAgVTY0X0MgKDB4MmE4NDU0YWUxNWQwODQ4NCksIFU2NF9DICgweGQ1NzJiN2E3ZTRjNTcyNzIpLAorICAgIFU2NF9DICgweGU0MzlkNWRkNzJlYzM5MzkpLCBVNjRfQyAoMHgyZDRjNWE2MTk4MTY0YzRjKSwKKyAgICBVNjRfQyAoMHg2NTVlY2EzYmJjOTQ1ZTVlKSwgVTY0X0MgKDB4ZmQ3OGU3ODVmMDlmNzg3OCksCisgICAgVTY0X0MgKDB4ZTAzOGRkZDg3MGU1MzgzOCksIFU2NF9DICgweDBhOGMxNDg2MDU5ODhjOGMpLAorICAgIFU2NF9DICgweDYzZDFjNmIyYmYxN2QxZDEpLCBVNjRfQyAoMHhhZWE1NDEwYjU3ZTRhNWE1KSwKKyAgICBVNjRfQyAoMHhhZmUyNDM0ZGQ5YTFlMmUyKSwgVTY0X0MgKDB4OTk2MTJmZjhjMjRlNjE2MSksCisgICAgVTY0X0MgKDB4ZjZiM2YxNDU3YjQyYjNiMyksIFU2NF9DICgweDg0MjExNWE1NDIzNDIxMjEpLAorICAgIFU2NF9DICgweDRhOWM5NGQ2MjUwODljOWMpLCBVNjRfQyAoMHg3ODFlZjA2NjNjZWUxZTFlKSwKKyAgICBVNjRfQyAoMHgxMTQzMjI1Mjg2NjE0MzQzKSwgVTY0X0MgKDB4M2JjNzc2ZmM5M2IxYzdjNyksCisgICAgVTY0X0MgKDB4ZDdmY2IzMmJlNTRmZmNmYyksIFU2NF9DICgweDEwMDQyMDE0MDgyNDA0MDQpLAorICAgIFU2NF9DICgweDU5NTFiMjA4YTJlMzUxNTEpLCBVNjRfQyAoMHg1ZTk5YmNjNzJmMjU5OTk5KSwKKyAgICBVNjRfQyAoMHhhOTZkNGZjNGRhMjI2ZDZkKSwgVTY0X0MgKDB4MzQwZDY4MzkxYTY1MGQwZCksCisgICAgVTY0X0MgKDB4Y2ZmYTgzMzVlOTc5ZmFmYSksIFU2NF9DICgweDViZGZiNjg0YTM2OWRmZGYpLAorICAgIFU2NF9DICgweGU1N2VkNzliZmNhOTdlN2UpLCBVNjRfQyAoMHg5MDI0M2RiNDQ4MTkyNDI0KSwKKyAgICBVNjRfQyAoMHhlYzNiYzVkNzc2ZmUzYjNiKSwgVTY0X0MgKDB4OTZhYjMxM2Q0YjlhYWJhYiksCisgICAgVTY0X0MgKDB4MWZjZTNlZDE4MWYwY2VjZSksIFU2NF9DICgweDQ0MTE4ODU1MjI5OTExMTEpLAorICAgIFU2NF9DICgweDA2OGYwYzg5MDM4MzhmOGYpLCBVNjRfQyAoMHgyNTRlNGE2YjljMDQ0ZTRlKSwKKyAgICBVNjRfQyAoMHhlNmI3ZDE1MTczNjZiN2I3KSwgVTY0X0MgKDB4OGJlYjBiNjBjYmUwZWJlYiksCisgICAgVTY0X0MgKDB4ZjAzY2ZkY2M3OGMxM2MzYyksIFU2NF9DICgweDNlODE3Y2JmMWZmZDgxODEpLAorICAgIFU2NF9DICgweDZhOTRkNGZlMzU0MDk0OTQpLCBVNjRfQyAoMHhmYmY3ZWIwY2YzMWNmN2Y3KSwKKyAgICBVNjRfQyAoMHhkZWI5YTE2NzZmMThiOWI5KSwgVTY0X0MgKDB4NGMxMzk4NWYyNjhiMTMxMyksCisgICAgVTY0X0MgKDB4YjAyYzdkOWM1ODUxMmMyYyksIFU2NF9DICgweDZiZDNkNmI4YmIwNWQzZDMpLAorICAgIFU2NF9DICgweGJiZTc2YjVjZDM4Y2U3ZTcpLCBVNjRfQyAoMHhhNTZlNTdjYmRjMzk2ZTZlKSwKKyAgICBVNjRfQyAoMHgzN2M0NmVmMzk1YWFjNGM0KSwgVTY0X0MgKDB4MGMwMzE4MGYwNjFiMDMwMyksCisgICAgVTY0X0MgKDB4NDU1NjhhMTNhY2RjNTY1NiksIFU2NF9DICgweDBkNDQxYTQ5ODg1ZTQ0NDQpLAorICAgIFU2NF9DICgweGUxN2ZkZjllZmVhMDdmN2YpLCBVNjRfQyAoMHg5ZWE5MjEzNzRmODhhOWE5KSwKKyAgICBVNjRfQyAoMHhhODJhNGQ4MjU0NjcyYTJhKSwgVTY0X0MgKDB4ZDZiYmIxNmQ2YjBhYmJiYiksCisgICAgVTY0X0MgKDB4MjNjMTQ2ZTI5Zjg3YzFjMSksIFU2NF9DICgweDUxNTNhMjAyYTZmMTUzNTMpLAorICAgIFU2NF9DICgweDU3ZGNhZThiYTU3MmRjZGMpLCBVNjRfQyAoMHgyYzBiNTgyNzE2NTMwYjBiKSwKKyAgICBVNjRfQyAoMHg0ZTlkOWNkMzI3MDE5ZDlkKSwgVTY0X0MgKDB4YWQ2YzQ3YzFkODJiNmM2YyksCisgICAgVTY0X0MgKDB4YzQzMTk1ZjU2MmE0MzEzMSksIFU2NF9DICgweGNkNzQ4N2I5ZThmMzc0NzQpLAorICAgIFU2NF9DICgweGZmZjZlMzA5ZjExNWY2ZjYpLCBVNjRfQyAoMHgwNTQ2MGE0MzhjNGM0NjQ2KSwKKyAgICBVNjRfQyAoMHg4YWFjMDkyNjQ1YTVhY2FjKSwgVTY0X0MgKDB4MWU4OTNjOTcwZmI1ODk4OSksCisgICAgVTY0X0MgKDB4NTAxNGEwNDQyOGI0MTQxNCksIFU2NF9DICgweGEzZTE1YjQyZGZiYWUxZTEpLAorICAgIFU2NF9DICgweDU4MTZiMDRlMmNhNjE2MTYpLCBVNjRfQyAoMHhlODNhY2RkMjc0ZjczYTNhKSwKKyAgICBVNjRfQyAoMHhiOTY5NmZkMGQyMDY2OTY5KSwgVTY0X0MgKDB4MjQwOTQ4MmQxMjQxMDkwOSksCisgICAgVTY0X0MgKDB4ZGQ3MGE3YWRlMGQ3NzA3MCksIFU2NF9DICgweGUyYjZkOTU0NzE2ZmI2YjYpLAorICAgIFU2NF9DICgweDY3ZDBjZWI3YmQxZWQwZDApLCBVNjRfQyAoMHg5M2VkM2I3ZWM3ZDZlZGVkKSwKKyAgICBVNjRfQyAoMHgxN2NjMmVkYjg1ZTJjY2NjKSwgVTY0X0MgKDB4MTU0MjJhNTc4NDY4NDI0MiksCisgICAgVTY0X0MgKDB4NWE5OGI0YzIyZDJjOTg5OCksIFU2NF9DICgweGFhYTQ0OTBlNTVlZGE0YTQpLAorICAgIFU2NF9DICgweGEwMjg1ZDg4NTA3NTI4MjgpLCBVNjRfQyAoMHg2ZDVjZGEzMWI4ODY1YzVjKSwKKyAgICBVNjRfQyAoMHhjN2Y4OTMzZmVkNmJmOGY4KSwgVTY0X0MgKDB4MjI4NjQ0YTQxMWMyODY4NiksCisgIH07CisKK3N0YXRpYyBjb25zdCB1NjQgQzdbMjU2XSA9CisgIHsKKyAgICBVNjRfQyAoMHgxODYwMThjMDc4MzBkODE4KSwgVTY0X0MgKDB4MjM4YzIzMDVhZjQ2MjYyMyksCisgICAgVTY0X0MgKDB4YzYzZmM2N2VmOTkxYjhjNiksIFU2NF9DICgweGU4ODdlODEzNmZjZGZiZTgpLAorICAgIFU2NF9DICgweDg3MjY4NzRjYTExM2NiODcpLCBVNjRfQyAoMHhiOGRhYjhhOTYyNmQxMWI4KSwKKyAgICBVNjRfQyAoMHgwMTA0MDEwODA1MDIwOTAxKSwgVTY0X0MgKDB4NGYyMTRmNDI2ZTllMGQ0ZiksCisgICAgVTY0X0MgKDB4MzZkODM2YWRlZTZjOWIzNiksIFU2NF9DICgweGE2YTJhNjU5MDQ1MWZmYTYpLAorICAgIFU2NF9DICgweGQyNmZkMmRlYmRiOTBjZDIpLCBVNjRfQyAoMHhmNWYzZjVmYjA2ZjcwZWY1KSwKKyAgICBVNjRfQyAoMHg3OWY5NzllZjgwZjI5Njc5KSwgVTY0X0MgKDB4NmZhMTZmNWZjZWRlMzA2ZiksCisgICAgVTY0X0MgKDB4OTE3ZTkxZmNlZjNmNmQ5MSksIFU2NF9DICgweDUyNTU1MmFhMDdhNGY4NTIpLAorICAgIFU2NF9DICgweDYwOWQ2MDI3ZmRjMDQ3NjApLCBVNjRfQyAoMHhiY2NhYmM4OTc2NjUzNWJjKSwKKyAgICBVNjRfQyAoMHg5YjU2OWJhY2NkMmIzNzliKSwgVTY0X0MgKDB4OGUwMjhlMDQ4YzAxOGE4ZSksCisgICAgVTY0X0MgKDB4YTNiNmEzNzExNTViZDJhMyksIFU2NF9DICgweDBjMzAwYzYwM2MxODZjMGMpLAorICAgIFU2NF9DICgweDdiZjE3YmZmOGFmNjg0N2IpLCBVNjRfQyAoMHgzNWQ0MzViNWUxNmE4MDM1KSwKKyAgICBVNjRfQyAoMHgxZDc0MWRlODY5M2FmNTFkKSwgVTY0X0MgKDB4ZTBhN2UwNTM0N2RkYjNlMCksCisgICAgVTY0X0MgKDB4ZDc3YmQ3ZjZhY2IzMjFkNyksIFU2NF9DICgweGMyMmZjMjVlZWQ5OTljYzIpLAorICAgIFU2NF9DICgweDJlYjgyZTZkOTY1YzQzMmUpLCBVNjRfQyAoMHg0YjMxNGI2MjdhOTYyOTRiKSwKKyAgICBVNjRfQyAoMHhmZWRmZmVhMzIxZTE1ZGZlKSwgVTY0X0MgKDB4NTc0MTU3ODIxNmFlZDU1NyksCisgICAgVTY0X0MgKDB4MTU1NDE1YTg0MTJhYmQxNSksIFU2NF9DICgweDc3YzE3NzlmYjZlZWU4NzcpLAorICAgIFU2NF9DICgweDM3ZGMzN2E1ZWI2ZTkyMzcpLCBVNjRfQyAoMHhlNWIzZTU3YjU2ZDc5ZWU1KSwKKyAgICBVNjRfQyAoMHg5ZjQ2OWY4Y2Q5MjMxMzlmKSwgVTY0X0MgKDB4ZjBlN2YwZDMxN2ZkMjNmMCksCisgICAgVTY0X0MgKDB4NGEzNTRhNmE3Zjk0MjA0YSksIFU2NF9DICgweGRhNGZkYTllOTVhOTQ0ZGEpLAorICAgIFU2NF9DICgweDU4N2Q1OGZhMjViMGEyNTgpLCBVNjRfQyAoMHhjOTAzYzkwNmNhOGZjZmM5KSwKKyAgICBVNjRfQyAoMHgyOWE0Mjk1NThkNTI3YzI5KSwgVTY0X0MgKDB4MGEyODBhNTAyMjE0NWEwYSksCisgICAgVTY0X0MgKDB4YjFmZWIxZTE0ZjdmNTBiMSksIFU2NF9DICgweGEwYmFhMDY5MWE1ZGM5YTApLAorICAgIFU2NF9DICgweDZiYjE2YjdmZGFkNjE0NmIpLCBVNjRfQyAoMHg4NTJlODU1Y2FiMTdkOTg1KSwKKyAgICBVNjRfQyAoMHhiZGNlYmQ4MTczNjczY2JkKSwgVTY0X0MgKDB4NWQ2OTVkZDIzNGJhOGY1ZCksCisgICAgVTY0X0MgKDB4MTA0MDEwODA1MDIwOTAxMCksIFU2NF9DICgweGY0ZjdmNGYzMDNmNTA3ZjQpLAorICAgIFU2NF9DICgweGNiMGJjYjE2YzA4YmRkY2IpLCBVNjRfQyAoMHgzZWY4M2VlZGM2N2NkMzNlKSwKKyAgICBVNjRfQyAoMHgwNTE0MDUyODExMGEyZDA1KSwgVTY0X0MgKDB4Njc4MTY3MWZlNmNlNzg2NyksCisgICAgVTY0X0MgKDB4ZTRiN2U0NzM1M2Q1OTdlNCksIFU2NF9DICgweDI3OWMyNzI1YmI0ZTAyMjcpLAorICAgIFU2NF9DICgweDQxMTk0MTMyNTg4MjczNDEpLCBVNjRfQyAoMHg4YjE2OGIyYzlkMGJhNzhiKSwKKyAgICBVNjRfQyAoMHhhN2E2YTc1MTAxNTNmNmE3KSwgVTY0X0MgKDB4N2RlOTdkY2Y5NGZhYjI3ZCksCisgICAgVTY0X0MgKDB4OTU2ZTk1ZGNmYjM3NDk5NSksIFU2NF9DICgweGQ4NDdkODhlOWZhZDU2ZDgpLAorICAgIFU2NF9DICgweGZiY2JmYjhiMzBlYjcwZmIpLCBVNjRfQyAoMHhlZTlmZWUyMzcxYzFjZGVlKSwKKyAgICBVNjRfQyAoMHg3Y2VkN2NjNzkxZjhiYjdjKSwgVTY0X0MgKDB4NjY4NTY2MTdlM2NjNzE2NiksCisgICAgVTY0X0MgKDB4ZGQ1M2RkYTY4ZWE3N2JkZCksIFU2NF9DICgweDE3NWMxN2I4NGIyZWFmMTcpLAorICAgIFU2NF9DICgweDQ3MDE0NzAyNDY4ZTQ1NDcpLCBVNjRfQyAoMHg5ZTQyOWU4NGRjMjExYTllKSwKKyAgICBVNjRfQyAoMHhjYTBmY2ExZWM1ODlkNGNhKSwgVTY0X0MgKDB4MmRiNDJkNzU5OTVhNTgyZCksCisgICAgVTY0X0MgKDB4YmZjNmJmOTE3OTYzMmViZiksIFU2NF9DICgweDA3MWMwNzM4MWIwZTNmMDcpLAorICAgIFU2NF9DICgweGFkOGVhZDAxMjM0N2FjYWQpLCBVNjRfQyAoMHg1YTc1NWFlYTJmYjRiMDVhKSwKKyAgICBVNjRfQyAoMHg4MzM2ODM2Y2I1MWJlZjgzKSwgVTY0X0MgKDB4MzNjYzMzODVmZjY2YjYzMyksCisgICAgVTY0X0MgKDB4NjM5MTYzM2ZmMmM2NWM2MyksIFU2NF9DICgweDAyMDgwMjEwMGEwNDEyMDIpLAorICAgIFU2NF9DICgweGFhOTJhYTM5Mzg0OTkzYWEpLCBVNjRfQyAoMHg3MWQ5NzFhZmE4ZTJkZTcxKSwKKyAgICBVNjRfQyAoMHhjODA3YzgwZWNmOGRjNmM4KSwgVTY0X0MgKDB4MTk2NDE5Yzg3ZDMyZDExOSksCisgICAgVTY0X0MgKDB4NDkzOTQ5NzI3MDkyM2I0OSksIFU2NF9DICgweGQ5NDNkOTg2OWFhZjVmZDkpLAorICAgIFU2NF9DICgweGYyZWZmMmMzMWRmOTMxZjIpLCBVNjRfQyAoMHhlM2FiZTM0YjQ4ZGJhOGUzKSwKKyAgICBVNjRfQyAoMHg1YjcxNWJlMjJhYjZiOTViKSwgVTY0X0MgKDB4ODgxYTg4MzQ5MjBkYmM4OCksCisgICAgVTY0X0MgKDB4OWE1MjlhYTRjODI5M2U5YSksIFU2NF9DICgweDI2OTgyNjJkYmU0YzBiMjYpLAorICAgIFU2NF9DICgweDMyYzgzMjhkZmE2NGJmMzIpLCBVNjRfQyAoMHhiMGZhYjBlOTRhN2Q1OWIwKSwKKyAgICBVNjRfQyAoMHhlOTgzZTkxYjZhY2ZmMmU5KSwgVTY0X0MgKDB4MGYzYzBmNzgzMzFlNzcwZiksCisgICAgVTY0X0MgKDB4ZDU3M2Q1ZTZhNmI3MzNkNSksIFU2NF9DICgweDgwM2E4MDc0YmExZGY0ODApLAorICAgIFU2NF9DICgweGJlYzJiZTk5N2M2MTI3YmUpLCBVNjRfQyAoMHhjZDEzY2QyNmRlODdlYmNkKSwKKyAgICBVNjRfQyAoMHgzNGQwMzRiZGU0Njg4OTM0KSwgVTY0X0MgKDB4NDgzZDQ4N2E3NTkwMzI0OCksCisgICAgVTY0X0MgKDB4ZmZkYmZmYWIyNGUzNTRmZiksIFU2NF9DICgweDdhZjU3YWY3OGZmNDhkN2EpLAorICAgIFU2NF9DICgweDkwN2E5MGY0ZWEzZDY0OTApLCBVNjRfQyAoMHg1ZjYxNWZjMjNlYmU5ZDVmKSwKKyAgICBVNjRfQyAoMHgyMDgwMjAxZGEwNDAzZDIwKSwgVTY0X0MgKDB4NjhiZDY4NjdkNWQwMGY2OCksCisgICAgVTY0X0MgKDB4MWE2ODFhZDA3MjM0Y2ExYSksIFU2NF9DICgweGFlODJhZTE5MmM0MWI3YWUpLAorICAgIFU2NF9DICgweGI0ZWFiNGM5NWU3NTdkYjQpLCBVNjRfQyAoMHg1NDRkNTQ5YTE5YThjZTU0KSwKKyAgICBVNjRfQyAoMHg5Mzc2OTNlY2U1M2I3ZjkzKSwgVTY0X0MgKDB4MjI4ODIyMGRhYTQ0MmYyMiksCisgICAgVTY0X0MgKDB4NjQ4ZDY0MDdlOWM4NjM2NCksIFU2NF9DICgweGYxZTNmMWRiMTJmZjJhZjEpLAorICAgIFU2NF9DICgweDczZDE3M2JmYTJlNmNjNzMpLCBVNjRfQyAoMHgxMjQ4MTI5MDVhMjQ4MjEyKSwKKyAgICBVNjRfQyAoMHg0MDFkNDAzYTVkODA3YTQwKSwgVTY0X0MgKDB4MDgyMDA4NDAyODEwNDgwOCksCisgICAgVTY0X0MgKDB4YzMyYmMzNTZlODliOTVjMyksIFU2NF9DICgweGVjOTdlYzMzN2JjNWRmZWMpLAorICAgIFU2NF9DICgweGRiNGJkYjk2OTBhYjRkZGIpLCBVNjRfQyAoMHhhMWJlYTE2MTFmNWZjMGExKSwKKyAgICBVNjRfQyAoMHg4ZDBlOGQxYzgzMDc5MThkKSwgVTY0X0MgKDB4M2RmNDNkZjVjOTdhYzgzZCksCisgICAgVTY0X0MgKDB4OTc2Njk3Y2NmMTMzNWI5NyksIFU2NF9DICgweDAwMDAwMDAwMDAwMDAwMDApLAorICAgIFU2NF9DICgweGNmMWJjZjM2ZDQ4M2Y5Y2YpLCBVNjRfQyAoMHgyYmFjMmI0NTg3NTY2ZTJiKSwKKyAgICBVNjRfQyAoMHg3NmM1NzY5N2IzZWNlMTc2KSwgVTY0X0MgKDB4ODIzMjgyNjRiMDE5ZTY4MiksCisgICAgVTY0X0MgKDB4ZDY3ZmQ2ZmVhOWIxMjhkNiksIFU2NF9DICgweDFiNmMxYmQ4NzczNmMzMWIpLAorICAgIFU2NF9DICgweGI1ZWViNWMxNWI3Nzc0YjUpLCBVNjRfQyAoMHhhZjg2YWYxMTI5NDNiZWFmKSwKKyAgICBVNjRfQyAoMHg2YWI1NmE3N2RmZDQxZDZhKSwgVTY0X0MgKDB4NTA1ZDUwYmEwZGEwZWE1MCksCisgICAgVTY0X0MgKDB4NDUwOTQ1MTI0YzhhNTc0NSksIFU2NF9DICgweGYzZWJmM2NiMThmYjM4ZjMpLAorICAgIFU2NF9DICgweDMwYzAzMDlkZjA2MGFkMzApLCBVNjRfQyAoMHhlZjliZWYyYjc0YzNjNGVmKSwKKyAgICBVNjRfQyAoMHgzZmZjM2ZlNWMzN2VkYTNmKSwgVTY0X0MgKDB4NTU0OTU1OTIxY2FhYzc1NSksCisgICAgVTY0X0MgKDB4YTJiMmEyNzkxMDU5ZGJhMiksIFU2NF9DICgweGVhOGZlYTAzNjVjOWU5ZWEpLAorICAgIFU2NF9DICgweDY1ODk2NTBmZWNjYTZhNjUpLCBVNjRfQyAoMHhiYWQyYmFiOTY4NjkwM2JhKSwKKyAgICBVNjRfQyAoMHgyZmJjMmY2NTkzNWU0YTJmKSwgVTY0X0MgKDB4YzAyN2MwNGVlNzlkOGVjMCksCisgICAgVTY0X0MgKDB4ZGU1ZmRlYmU4MWExNjBkZSksIFU2NF9DICgweDFjNzAxY2UwNmMzOGZjMWMpLAorICAgIFU2NF9DICgweGZkZDNmZGJiMmVlNzQ2ZmQpLCBVNjRfQyAoMHg0ZDI5NGQ1MjY0OWExZjRkKSwKKyAgICBVNjRfQyAoMHg5MjcyOTJlNGUwMzk3NjkyKSwgVTY0X0MgKDB4NzVjOTc1OGZiY2VhZmE3NSksCisgICAgVTY0X0MgKDB4MDYxODA2MzAxZTBjMzYwNiksIFU2NF9DICgweDhhMTI4YTI0OTgwOWFlOGEpLAorICAgIFU2NF9DICgweGIyZjJiMmY5NDA3OTRiYjIpLCBVNjRfQyAoMHhlNmJmZTY2MzU5ZDE4NWU2KSwKKyAgICBVNjRfQyAoMHgwZTM4MGU3MDM2MWM3ZTBlKSwgVTY0X0MgKDB4MWY3YzFmZjg2MzNlZTcxZiksCisgICAgVTY0X0MgKDB4NjI5NTYyMzdmN2M0NTU2MiksIFU2NF9DICgweGQ0NzdkNGVlYTNiNTNhZDQpLAorICAgIFU2NF9DICgweGE4OWFhODI5MzI0ZDgxYTgpLCBVNjRfQyAoMHg5NjYyOTZjNGY0MzE1Mjk2KSwKKyAgICBVNjRfQyAoMHhmOWMzZjk5YjNhZWY2MmY5KSwgVTY0X0MgKDB4YzUzM2M1NjZmNjk3YTNjNSksCisgICAgVTY0X0MgKDB4MjU5NDI1MzViMTRhMTAyNSksIFU2NF9DICgweDU5Nzk1OWYyMjBiMmFiNTkpLAorICAgIFU2NF9DICgweDg0MmE4NDU0YWUxNWQwODQpLCBVNjRfQyAoMHg3MmQ1NzJiN2E3ZTRjNTcyKSwKKyAgICBVNjRfQyAoMHgzOWU0MzlkNWRkNzJlYzM5KSwgVTY0X0MgKDB4NGMyZDRjNWE2MTk4MTY0YyksCisgICAgVTY0X0MgKDB4NWU2NTVlY2EzYmJjOTQ1ZSksIFU2NF9DICgweDc4ZmQ3OGU3ODVmMDlmNzgpLAorICAgIFU2NF9DICgweDM4ZTAzOGRkZDg3MGU1MzgpLCBVNjRfQyAoMHg4YzBhOGMxNDg2MDU5ODhjKSwKKyAgICBVNjRfQyAoMHhkMTYzZDFjNmIyYmYxN2QxKSwgVTY0X0MgKDB4YTVhZWE1NDEwYjU3ZTRhNSksCisgICAgVTY0X0MgKDB4ZTJhZmUyNDM0ZGQ5YTFlMiksIFU2NF9DICgweDYxOTk2MTJmZjhjMjRlNjEpLAorICAgIFU2NF9DICgweGIzZjZiM2YxNDU3YjQyYjMpLCBVNjRfQyAoMHgyMTg0MjExNWE1NDIzNDIxKSwKKyAgICBVNjRfQyAoMHg5YzRhOWM5NGQ2MjUwODljKSwgVTY0X0MgKDB4MWU3ODFlZjA2NjNjZWUxZSksCisgICAgVTY0X0MgKDB4NDMxMTQzMjI1Mjg2NjE0MyksIFU2NF9DICgweGM3M2JjNzc2ZmM5M2IxYzcpLAorICAgIFU2NF9DICgweGZjZDdmY2IzMmJlNTRmZmMpLCBVNjRfQyAoMHgwNDEwMDQyMDE0MDgyNDA0KSwKKyAgICBVNjRfQyAoMHg1MTU5NTFiMjA4YTJlMzUxKSwgVTY0X0MgKDB4OTk1ZTk5YmNjNzJmMjU5OSksCisgICAgVTY0X0MgKDB4NmRhOTZkNGZjNGRhMjI2ZCksIFU2NF9DICgweDBkMzQwZDY4MzkxYTY1MGQpLAorICAgIFU2NF9DICgweGZhY2ZmYTgzMzVlOTc5ZmEpLCBVNjRfQyAoMHhkZjViZGZiNjg0YTM2OWRmKSwKKyAgICBVNjRfQyAoMHg3ZWU1N2VkNzliZmNhOTdlKSwgVTY0X0MgKDB4MjQ5MDI0M2RiNDQ4MTkyNCksCisgICAgVTY0X0MgKDB4M2JlYzNiYzVkNzc2ZmUzYiksIFU2NF9DICgweGFiOTZhYjMxM2Q0YjlhYWIpLAorICAgIFU2NF9DICgweGNlMWZjZTNlZDE4MWYwY2UpLCBVNjRfQyAoMHgxMTQ0MTE4ODU1MjI5OTExKSwKKyAgICBVNjRfQyAoMHg4ZjA2OGYwYzg5MDM4MzhmKSwgVTY0X0MgKDB4NGUyNTRlNGE2YjljMDQ0ZSksCisgICAgVTY0X0MgKDB4YjdlNmI3ZDE1MTczNjZiNyksIFU2NF9DICgweGViOGJlYjBiNjBjYmUwZWIpLAorICAgIFU2NF9DICgweDNjZjAzY2ZkY2M3OGMxM2MpLCBVNjRfQyAoMHg4MTNlODE3Y2JmMWZmZDgxKSwKKyAgICBVNjRfQyAoMHg5NDZhOTRkNGZlMzU0MDk0KSwgVTY0X0MgKDB4ZjdmYmY3ZWIwY2YzMWNmNyksCisgICAgVTY0X0MgKDB4YjlkZWI5YTE2NzZmMThiOSksIFU2NF9DICgweDEzNGMxMzk4NWYyNjhiMTMpLAorICAgIFU2NF9DICgweDJjYjAyYzdkOWM1ODUxMmMpLCBVNjRfQyAoMHhkMzZiZDNkNmI4YmIwNWQzKSwKKyAgICBVNjRfQyAoMHhlN2JiZTc2YjVjZDM4Y2U3KSwgVTY0X0MgKDB4NmVhNTZlNTdjYmRjMzk2ZSksCisgICAgVTY0X0MgKDB4YzQzN2M0NmVmMzk1YWFjNCksIFU2NF9DICgweDAzMGMwMzE4MGYwNjFiMDMpLAorICAgIFU2NF9DICgweDU2NDU1NjhhMTNhY2RjNTYpLCBVNjRfQyAoMHg0NDBkNDQxYTQ5ODg1ZTQ0KSwKKyAgICBVNjRfQyAoMHg3ZmUxN2ZkZjllZmVhMDdmKSwgVTY0X0MgKDB4YTk5ZWE5MjEzNzRmODhhOSksCisgICAgVTY0X0MgKDB4MmFhODJhNGQ4MjU0NjcyYSksIFU2NF9DICgweGJiZDZiYmIxNmQ2YjBhYmIpLAorICAgIFU2NF9DICgweGMxMjNjMTQ2ZTI5Zjg3YzEpLCBVNjRfQyAoMHg1MzUxNTNhMjAyYTZmMTUzKSwKKyAgICBVNjRfQyAoMHhkYzU3ZGNhZThiYTU3MmRjKSwgVTY0X0MgKDB4MGIyYzBiNTgyNzE2NTMwYiksCisgICAgVTY0X0MgKDB4OWQ0ZTlkOWNkMzI3MDE5ZCksIFU2NF9DICgweDZjYWQ2YzQ3YzFkODJiNmMpLAorICAgIFU2NF9DICgweDMxYzQzMTk1ZjU2MmE0MzEpLCBVNjRfQyAoMHg3NGNkNzQ4N2I5ZThmMzc0KSwKKyAgICBVNjRfQyAoMHhmNmZmZjZlMzA5ZjExNWY2KSwgVTY0X0MgKDB4NDYwNTQ2MGE0MzhjNGM0NiksCisgICAgVTY0X0MgKDB4YWM4YWFjMDkyNjQ1YTVhYyksIFU2NF9DICgweDg5MWU4OTNjOTcwZmI1ODkpLAorICAgIFU2NF9DICgweDE0NTAxNGEwNDQyOGI0MTQpLCBVNjRfQyAoMHhlMWEzZTE1YjQyZGZiYWUxKSwKKyAgICBVNjRfQyAoMHgxNjU4MTZiMDRlMmNhNjE2KSwgVTY0X0MgKDB4M2FlODNhY2RkMjc0ZjczYSksCisgICAgVTY0X0MgKDB4NjliOTY5NmZkMGQyMDY2OSksIFU2NF9DICgweDA5MjQwOTQ4MmQxMjQxMDkpLAorICAgIFU2NF9DICgweDcwZGQ3MGE3YWRlMGQ3NzApLCBVNjRfQyAoMHhiNmUyYjZkOTU0NzE2ZmI2KSwKKyAgICBVNjRfQyAoMHhkMDY3ZDBjZWI3YmQxZWQwKSwgVTY0X0MgKDB4ZWQ5M2VkM2I3ZWM3ZDZlZCksCisgICAgVTY0X0MgKDB4Y2MxN2NjMmVkYjg1ZTJjYyksIFU2NF9DICgweDQyMTU0MjJhNTc4NDY4NDIpLAorICAgIFU2NF9DICgweDk4NWE5OGI0YzIyZDJjOTgpLCBVNjRfQyAoMHhhNGFhYTQ0OTBlNTVlZGE0KSwKKyAgICBVNjRfQyAoMHgyOGEwMjg1ZDg4NTA3NTI4KSwgVTY0X0MgKDB4NWM2ZDVjZGEzMWI4ODY1YyksCisgICAgVTY0X0MgKDB4ZjhjN2Y4OTMzZmVkNmJmOCksIFU2NF9DICgweDg2MjI4NjQ0YTQxMWMyODYpLAorICB9OworCisKKwwKKy8qCisgKiBUcmFuc2Zvcm0gYmxvY2suCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3doaXJscG9vbF90cmFuc2Zvcm0gKHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgd2hpcmxwb29sX2NvbnRleHRfdCAqY29udGV4dCA9IGN0eDsKKyAgd2hpcmxwb29sX2Jsb2NrX3QgZGF0YV9ibG9jazsKKyAgd2hpcmxwb29sX2Jsb2NrX3Qga2V5OworICB3aGlybHBvb2xfYmxvY2tfdCBzdGF0ZTsKKyAgd2hpcmxwb29sX2Jsb2NrX3QgYmxvY2s7CisgIHVuc2lnbmVkIGludCByOworICB1bnNpZ25lZCBpbnQgaTsKKworICBidWZmZXJfdG9fYmxvY2sgKGRhdGEsIGRhdGFfYmxvY2ssIGkpOworICBibG9ja19jb3B5IChrZXksIGNvbnRleHQtPmhhc2hfc3RhdGUsIGkpOworICBibG9ja19jb3B5IChzdGF0ZSwgY29udGV4dC0+aGFzaF9zdGF0ZSwgaSk7CisgIGJsb2NrX3hvciAoc3RhdGUsIGRhdGFfYmxvY2ssIGkpOworCisgIGZvciAociA9IDA7IHIgPCBSOyByKyspCisgICAgeworICAgICAgLyogQ29tcHV0ZSByb3VuZCBrZXkgS15yLiAgKi8KKworICAgICAgYmxvY2tbMF0gPSAoQzBbKGtleVswXSA+PiA1NikgJiAweEZGXSBeIEMxWyhrZXlbN10gPj4gNDgpICYgMHhGRl0gXgorCQkgIEMyWyhrZXlbNl0gPj4gNDApICYgMHhGRl0gXiBDM1soa2V5WzVdID4+IDMyKSAmIDB4RkZdIF4KKwkJICBDNFsoa2V5WzRdID4+IDI0KSAmIDB4RkZdIF4gQzVbKGtleVszXSA+PiAxNikgJiAweEZGXSBeCisJCSAgQzZbKGtleVsyXSA+PiAgOCkgJiAweEZGXSBeIEM3WyhrZXlbMV0gPj4gIDApICYgMHhGRl0gXiByY1tyXSk7CisgICAgICBibG9ja1sxXSA9IChDMFsoa2V5WzFdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVswXSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVs3XSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbNl0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbNV0gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzRdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzNdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVsyXSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1syXSA9IChDMFsoa2V5WzJdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVsxXSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVswXSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbN10gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbNl0gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzVdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzRdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVszXSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1szXSA9IChDMFsoa2V5WzNdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVsyXSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVsxXSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbMF0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbN10gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzZdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzVdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVs0XSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1s0XSA9IChDMFsoa2V5WzRdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVszXSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVsyXSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbMV0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbMF0gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzddID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzZdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVs1XSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1s1XSA9IChDMFsoa2V5WzVdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVs0XSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVszXSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbMl0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbMV0gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzBdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzddID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVs2XSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1s2XSA9IChDMFsoa2V5WzZdID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVs1XSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVs0XSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbM10gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbMl0gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzFdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzBdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVs3XSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja1s3XSA9IChDMFsoa2V5WzddID4+IDU2KSAmIDB4RkZdIF4gQzFbKGtleVs2XSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKGtleVs1XSA+PiA0MCkgJiAweEZGXSBeIEMzWyhrZXlbNF0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhrZXlbM10gPj4gMjQpICYgMHhGRl0gXiBDNVsoa2V5WzJdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoa2V5WzFdID4+ICA4KSAmIDB4RkZdIF4gQzdbKGtleVswXSA+PiAgMCkgJiAweEZGXSk7CisgICAgICBibG9ja19jb3B5IChrZXksIGJsb2NrLCBpKTsKKworICAgICAgLyogQXBwbHkgci10aCByb3VuZCB0cmFuc2Zvcm1hdGlvbi4gICovCisKKyAgICAgIGJsb2NrWzBdID0gKEMwWyhzdGF0ZVswXSA+PiA1NikgJiAweEZGXSBeIEMxWyhzdGF0ZVs3XSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKHN0YXRlWzZdID4+IDQwKSAmIDB4RkZdIF4gQzNbKHN0YXRlWzVdID4+IDMyKSAmIDB4RkZdIF4KKwkJICBDNFsoc3RhdGVbNF0gPj4gMjQpICYgMHhGRl0gXiBDNVsoc3RhdGVbM10gPj4gMTYpICYgMHhGRl0gXgorCQkgIEM2WyhzdGF0ZVsyXSA+PiAgOCkgJiAweEZGXSBeIEM3WyhzdGF0ZVsxXSA+PiAgMCkgJiAweEZGXSBeIGtleVswXSk7CisgICAgICBibG9ja1sxXSA9IChDMFsoc3RhdGVbMV0gPj4gNTYpICYgMHhGRl0gXiBDMVsoc3RhdGVbMF0gPj4gNDgpICYgMHhGRl0gXgorCQkgIEMyWyhzdGF0ZVs3XSA+PiA0MCkgJiAweEZGXSBeIEMzWyhzdGF0ZVs2XSA+PiAzMikgJiAweEZGXSBeCisJCSAgQzRbKHN0YXRlWzVdID4+IDI0KSAmIDB4RkZdIF4gQzVbKHN0YXRlWzRdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoc3RhdGVbM10gPj4gIDgpICYgMHhGRl0gXiBDN1soc3RhdGVbMl0gPj4gIDApICYgMHhGRl0gXiBrZXlbMV0pOworICAgICAgYmxvY2tbMl0gPSAoQzBbKHN0YXRlWzJdID4+IDU2KSAmIDB4RkZdIF4gQzFbKHN0YXRlWzFdID4+IDQ4KSAmIDB4RkZdIF4KKwkJICBDMlsoc3RhdGVbMF0gPj4gNDApICYgMHhGRl0gXiBDM1soc3RhdGVbN10gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhzdGF0ZVs2XSA+PiAyNCkgJiAweEZGXSBeIEM1WyhzdGF0ZVs1XSA+PiAxNikgJiAweEZGXSBeCisJCSAgQzZbKHN0YXRlWzRdID4+ICA4KSAmIDB4RkZdIF4gQzdbKHN0YXRlWzNdID4+ICAwKSAmIDB4RkZdIF4ga2V5WzJdKTsKKyAgICAgIGJsb2NrWzNdID0gKEMwWyhzdGF0ZVszXSA+PiA1NikgJiAweEZGXSBeIEMxWyhzdGF0ZVsyXSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKHN0YXRlWzFdID4+IDQwKSAmIDB4RkZdIF4gQzNbKHN0YXRlWzBdID4+IDMyKSAmIDB4RkZdIF4KKwkJICBDNFsoc3RhdGVbN10gPj4gMjQpICYgMHhGRl0gXiBDNVsoc3RhdGVbNl0gPj4gMTYpICYgMHhGRl0gXgorCQkgIEM2WyhzdGF0ZVs1XSA+PiAgOCkgJiAweEZGXSBeIEM3WyhzdGF0ZVs0XSA+PiAgMCkgJiAweEZGXSBeIGtleVszXSk7CisgICAgICBibG9ja1s0XSA9IChDMFsoc3RhdGVbNF0gPj4gNTYpICYgMHhGRl0gXiBDMVsoc3RhdGVbM10gPj4gNDgpICYgMHhGRl0gXgorCQkgIEMyWyhzdGF0ZVsyXSA+PiA0MCkgJiAweEZGXSBeIEMzWyhzdGF0ZVsxXSA+PiAzMikgJiAweEZGXSBeCisJCSAgQzRbKHN0YXRlWzBdID4+IDI0KSAmIDB4RkZdIF4gQzVbKHN0YXRlWzddID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoc3RhdGVbNl0gPj4gIDgpICYgMHhGRl0gXiBDN1soc3RhdGVbNV0gPj4gIDApICYgMHhGRl0gXiBrZXlbNF0pOworICAgICAgYmxvY2tbNV0gPSAoQzBbKHN0YXRlWzVdID4+IDU2KSAmIDB4RkZdIF4gQzFbKHN0YXRlWzRdID4+IDQ4KSAmIDB4RkZdIF4KKwkJICBDMlsoc3RhdGVbM10gPj4gNDApICYgMHhGRl0gXiBDM1soc3RhdGVbMl0gPj4gMzIpICYgMHhGRl0gXgorCQkgIEM0WyhzdGF0ZVsxXSA+PiAyNCkgJiAweEZGXSBeIEM1WyhzdGF0ZVswXSA+PiAxNikgJiAweEZGXSBeCisJCSAgQzZbKHN0YXRlWzddID4+ICA4KSAmIDB4RkZdIF4gQzdbKHN0YXRlWzZdID4+ICAwKSAmIDB4RkZdIF4ga2V5WzVdKTsKKyAgICAgIGJsb2NrWzZdID0gKEMwWyhzdGF0ZVs2XSA+PiA1NikgJiAweEZGXSBeIEMxWyhzdGF0ZVs1XSA+PiA0OCkgJiAweEZGXSBeCisJCSAgQzJbKHN0YXRlWzRdID4+IDQwKSAmIDB4RkZdIF4gQzNbKHN0YXRlWzNdID4+IDMyKSAmIDB4RkZdIF4KKwkJICBDNFsoc3RhdGVbMl0gPj4gMjQpICYgMHhGRl0gXiBDNVsoc3RhdGVbMV0gPj4gMTYpICYgMHhGRl0gXgorCQkgIEM2WyhzdGF0ZVswXSA+PiAgOCkgJiAweEZGXSBeIEM3WyhzdGF0ZVs3XSA+PiAgMCkgJiAweEZGXSBeIGtleVs2XSk7CisgICAgICBibG9ja1s3XSA9IChDMFsoc3RhdGVbN10gPj4gNTYpICYgMHhGRl0gXiBDMVsoc3RhdGVbNl0gPj4gNDgpICYgMHhGRl0gXgorCQkgIEMyWyhzdGF0ZVs1XSA+PiA0MCkgJiAweEZGXSBeIEMzWyhzdGF0ZVs0XSA+PiAzMikgJiAweEZGXSBeCisJCSAgQzRbKHN0YXRlWzNdID4+IDI0KSAmIDB4RkZdIF4gQzVbKHN0YXRlWzJdID4+IDE2KSAmIDB4RkZdIF4KKwkJICBDNlsoc3RhdGVbMV0gPj4gIDgpICYgMHhGRl0gXiBDN1soc3RhdGVbMF0gPj4gIDApICYgMHhGRl0gXiBrZXlbN10pOworICAgICAgYmxvY2tfY29weSAoc3RhdGUsIGJsb2NrLCBpKTsKKyAgICB9CisKKyAgLyogQ29tcHJlc3Npb24uICAqLworCisgIGJsb2NrX3hvciAoY29udGV4dC0+aGFzaF9zdGF0ZSwgZGF0YV9ibG9jaywgaSk7CisgIGJsb2NrX3hvciAoY29udGV4dC0+aGFzaF9zdGF0ZSwgc3RhdGUsIGkpOworCisgIHJldHVybiAvKmJ1cm5fc3RhY2sqLyA0ICogc2l6ZW9mKHdoaXJscG9vbF9ibG9ja190KSArIDIgKiBzaXplb2YoaW50KSArCisgICAgICAgICAgICAgICAgICAgICAgICA0ICogc2l6ZW9mKHZvaWQqKTsKK30KKworCitzdGF0aWMgdm9pZAord2hpcmxwb29sX2luaXQgKHZvaWQgKmN0eCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICB3aGlybHBvb2xfY29udGV4dF90ICpjb250ZXh0ID0gY3R4OworCisgIG1lbXNldCAoY29udGV4dCwgMCwgc2l6ZW9mICgqY29udGV4dCkpOworCisgIGNvbnRleHQtPmJjdHguYmxvY2tzaXplID0gQkxPQ0tfU0laRTsKKyAgY29udGV4dC0+YmN0eC5id3JpdGUgPSB3aGlybHBvb2xfdHJhbnNmb3JtOworICBpZiAoKGZsYWdzICYgR0NSWV9NRF9GTEFHX0JVR0VNVTEpKQorICAgIHsKKyAgICAgIG1lbXNldCAoJmNvbnRleHQtPmJ1Z2VtdSwgMCwgc2l6ZW9mIGNvbnRleHQtPmJ1Z2VtdSk7CisgICAgICBjb250ZXh0LT51c2VfYnVnZW11ID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBjb250ZXh0LT51c2VfYnVnZW11ID0gMDsKK30KKworCisvKiBCdWcgY29tcGF0aWJpbGl0eSBXaGlybHBvb2wgdmVyc2lvbi4gICovCitzdGF0aWMgdm9pZAord2hpcmxwb29sX2FkZF9idWdlbXUgKHdoaXJscG9vbF9jb250ZXh0X3QgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyX2FyZywgc2l6ZV90IGJ1ZmZlcl9uKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBidWZmZXJfYXJnOworICB1NjQgYnVmZmVyX3NpemU7CisgIHVuc2lnbmVkIGludCBjYXJyeTsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgYnVmZmVyX3NpemUgPSBidWZmZXJfbjsKKworICBpZiAoY29udGV4dC0+YnVnZW11LmNvdW50ID09IEJMT0NLX1NJWkUpCisgICAgeworICAgICAgLyogRmx1c2ggdGhlIGJ1ZmZlci4gICovCisgICAgICB3aGlybHBvb2xfdHJhbnNmb3JtIChjb250ZXh0LCBjb250ZXh0LT5iY3R4LmJ1Zik7CisgICAgICBjb250ZXh0LT5idWdlbXUuY291bnQgPSAwOworICAgIH0KKyAgaWYgKCEgYnVmZmVyKQorICAgIHJldHVybjsgLyogTm90aGluZyB0byBhZGQuICAqLworCisgIGlmIChjb250ZXh0LT5idWdlbXUuY291bnQpCisgICAgeworICAgICAgd2hpbGUgKGJ1ZmZlcl9uICYmIChjb250ZXh0LT5idWdlbXUuY291bnQgPCBCTE9DS19TSVpFKSkKKwl7CisJICBjb250ZXh0LT5iY3R4LmJ1Zltjb250ZXh0LT5idWdlbXUuY291bnQrK10gPSAqYnVmZmVyKys7CisJICBidWZmZXJfbi0tOworCX0KKyAgICAgIHdoaXJscG9vbF9hZGRfYnVnZW11IChjb250ZXh0LCBOVUxMLCAwKTsKKyAgICAgIGlmICghYnVmZmVyX24pCisgICAgICAgIHJldHVybjsgLyogRG9uZS4gIFRoaXMgaXMgdGhlIGJ1ZyB3ZSBlbXVsYXRlLiAgKi8KKyAgICB9CisKKyAgd2hpbGUgKGJ1ZmZlcl9uID49IEJMT0NLX1NJWkUpCisgICAgeworICAgICAgd2hpcmxwb29sX3RyYW5zZm9ybSAoY29udGV4dCwgYnVmZmVyKTsKKyAgICAgIGNvbnRleHQtPmJ1Z2VtdS5jb3VudCA9IDA7CisgICAgICBidWZmZXJfbiAtPSBCTE9DS19TSVpFOworICAgICAgYnVmZmVyICs9IEJMT0NLX1NJWkU7CisgICAgfQorICB3aGlsZSAoYnVmZmVyX24gJiYgKGNvbnRleHQtPmJ1Z2VtdS5jb3VudCA8IEJMT0NLX1NJWkUpKQorICAgIHsKKyAgICAgIGNvbnRleHQtPmJjdHguYnVmW2NvbnRleHQtPmJ1Z2VtdS5jb3VudCsrXSA9ICpidWZmZXIrKzsKKyAgICAgIGJ1ZmZlcl9uLS07CisgICAgfQorCisgIC8qIFVwZGF0ZSBiaXQgY291bnRlci4gICovCisgIGNhcnJ5ID0gMDsKKyAgYnVmZmVyX3NpemUgPDw9IDM7CisgIGZvciAoaSA9IDE7IGkgPD0gMzI7IGkrKykKKyAgICB7CisgICAgICBpZiAoISAoYnVmZmVyX3NpemUgfHwgY2FycnkpKQorCWJyZWFrOworCisgICAgICBjYXJyeSArPSBjb250ZXh0LT5idWdlbXUubGVuZ3RoWzMyIC0gaV0gKyAoYnVmZmVyX3NpemUgJiAweEZGKTsKKyAgICAgIGNvbnRleHQtPmJ1Z2VtdS5sZW5ndGhbMzIgLSBpXSA9IGNhcnJ5OworICAgICAgYnVmZmVyX3NpemUgPj49IDg7CisgICAgICBjYXJyeSA+Pj0gODsKKyAgICB9CisgIGdjcnlfYXNzZXJ0ICghIChidWZmZXJfc2l6ZSB8fCBjYXJyeSkpOworfQorCisKKy8qIEJ1ZyBjb21wYXRpYmlsaXR5IFdoaXJscG9vbCB2ZXJzaW9uLiAgKi8KK3N0YXRpYyB2b2lkCit3aGlybHBvb2xfZmluYWxfYnVnZW11ICh2b2lkICpjdHgpCit7CisgIHdoaXJscG9vbF9jb250ZXh0X3QgKmNvbnRleHQgPSBjdHg7CisgIHVuc2lnbmVkIGludCBpOworCisgIC8qIEZsdXNoLiAgKi8KKyAgd2hpcmxwb29sX2FkZF9idWdlbXUgKGNvbnRleHQsIE5VTEwsIDApOworCisgIC8qIFBhZC4gICovCisgIGNvbnRleHQtPmJjdHguYnVmW2NvbnRleHQtPmJ1Z2VtdS5jb3VudCsrXSA9IDB4ODA7CisKKyAgaWYgKGNvbnRleHQtPmJ1Z2VtdS5jb3VudCA+IDMyKQorICAgIHsKKyAgICAgIC8qIEFuIGV4dHJhIGJsb2NrIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB3aGlsZSAoY29udGV4dC0+YnVnZW11LmNvdW50IDwgNjQpCisJY29udGV4dC0+YmN0eC5idWZbY29udGV4dC0+YnVnZW11LmNvdW50KytdID0gMDsKKyAgICAgIHdoaXJscG9vbF9hZGRfYnVnZW11IChjb250ZXh0LCBOVUxMLCAwKTsKKyAgICB9CisgIHdoaWxlIChjb250ZXh0LT5idWdlbXUuY291bnQgPCAzMikKKyAgICBjb250ZXh0LT5iY3R4LmJ1Zltjb250ZXh0LT5idWdlbXUuY291bnQrK10gPSAwOworCisgIC8qIEFkZCBsZW5ndGggb2YgbWVzc2FnZS4gICovCisgIG1lbWNweSAoY29udGV4dC0+YmN0eC5idWYgKyBjb250ZXh0LT5idWdlbXUuY291bnQsCisgICAgICAgICAgY29udGV4dC0+YnVnZW11Lmxlbmd0aCwgMzIpOworICBjb250ZXh0LT5idWdlbXUuY291bnQgKz0gMzI7CisgIHdoaXJscG9vbF9hZGRfYnVnZW11IChjb250ZXh0LCBOVUxMLCAwKTsKKworICBibG9ja190b19idWZmZXIgKGNvbnRleHQtPmJjdHguYnVmLCBjb250ZXh0LT5oYXNoX3N0YXRlLCBpKTsKK30KKworCitzdGF0aWMgdm9pZAord2hpcmxwb29sX3dyaXRlICh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9uKQoreworICB3aGlybHBvb2xfY29udGV4dF90ICpjb250ZXh0ID0gY3R4OworCisgIGlmIChjb250ZXh0LT51c2VfYnVnZW11KQorICAgIHsKKyAgICAgIHdoaXJscG9vbF9hZGRfYnVnZW11IChjb250ZXh0LCBidWZmZXIsIGJ1ZmZlcl9uKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1NjQgb2xkX25ibG9ja3MgPSBjb250ZXh0LT5iY3R4Lm5ibG9ja3M7CisKKyAgICAgIF9nY3J5X21kX2Jsb2NrX3dyaXRlIChjb250ZXh0LCBidWZmZXIsIGJ1ZmZlcl9uKTsKKworICAgICAgZ2NyeV9hc3NlcnQgKG9sZF9uYmxvY2tzIDw9IGNvbnRleHQtPmJjdHgubmJsb2Nrcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAord2hpcmxwb29sX2ZpbmFsICh2b2lkICpjdHgpCit7CisgIHdoaXJscG9vbF9jb250ZXh0X3QgKmNvbnRleHQgPSBjdHg7CisgIHVuc2lnbmVkIGludCBpOworICB1NjQgdCwgdGgsIGxzYiwgbXNiOworICB1bnNpZ25lZCBjaGFyICpsZW5ndGg7CisKKyAgaWYgKGNvbnRleHQtPnVzZV9idWdlbXUpCisgICAgeworICAgICAgd2hpcmxwb29sX2ZpbmFsX2J1Z2VtdSAoY3R4KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgdCA9IGNvbnRleHQtPmJjdHgubmJsb2NrczsKKyAgLyogaWYgKHNpemVvZiB0ID09IHNpemVvZiBjb250ZXh0LT5iY3R4Lm5ibG9ja3MpICovCisgIHRoID0gY29udGV4dC0+YmN0eC5uYmxvY2tzX2hpZ2g7CisgIC8qIGVsc2UgKi8KKyAgLyogICB0aCA9IGNvbnRleHQtPmJjdHgubmJsb2NrcyA+PiA2NDsgSW4gY2FzZSB3ZSBldmVyIHVzZSB1MTI4ICovCisKKyAgLyogbXVsdGlwbHkgYnkgNjQgdG8gbWFrZSBhIGJ5dGUgY291bnQgKi8KKyAgbHNiID0gdCA8PCA2OworICBtc2IgPSAodGggPDwgNikgfCAodCA+PiA1OCk7CisgIC8qIGFkZCB0aGUgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgaWYgKChsc2IgKz0gY29udGV4dC0+YmN0eC5jb3VudCkgPCB0KQorICAgIG1zYisrOworICAvKiBtdWx0aXBseSBieSA4IHRvIG1ha2UgYSBiaXQgY291bnQgKi8KKyAgdCA9IGxzYjsKKyAgbHNiIDw8PSAzOworICBtc2IgPDw9IDM7CisgIG1zYiB8PSB0ID4+IDYxOworCisgIC8qIEZsdXNoLiAgKi8KKyAgd2hpcmxwb29sX3dyaXRlIChjb250ZXh0LCBOVUxMLCAwKTsKKworICAvKiBQYWQuICAqLworICBjb250ZXh0LT5iY3R4LmJ1Zltjb250ZXh0LT5iY3R4LmNvdW50KytdID0gMHg4MDsKKworICBpZiAoY29udGV4dC0+YmN0eC5jb3VudCA+IDMyKQorICAgIHsKKyAgICAgIC8qIEFuIGV4dHJhIGJsb2NrIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB3aGlsZSAoY29udGV4dC0+YmN0eC5jb3VudCA8IDY0KQorCWNvbnRleHQtPmJjdHguYnVmW2NvbnRleHQtPmJjdHguY291bnQrK10gPSAwOworICAgICAgd2hpcmxwb29sX3dyaXRlIChjb250ZXh0LCBOVUxMLCAwKTsKKyAgICB9CisgIHdoaWxlIChjb250ZXh0LT5iY3R4LmNvdW50IDwgMzIpCisgICAgY29udGV4dC0+YmN0eC5idWZbY29udGV4dC0+YmN0eC5jb3VudCsrXSA9IDA7CisKKyAgLyogQWRkIGxlbmd0aCBvZiBtZXNzYWdlLiAgKi8KKyAgbGVuZ3RoID0gY29udGV4dC0+YmN0eC5idWYgKyBjb250ZXh0LT5iY3R4LmNvdW50OworICBidWZfcHV0X2JlNjQoJmxlbmd0aFswICogOF0sIDApOworICBidWZfcHV0X2JlNjQoJmxlbmd0aFsxICogOF0sIDApOworICBidWZfcHV0X2JlNjQoJmxlbmd0aFsyICogOF0sIG1zYik7CisgIGJ1Zl9wdXRfYmU2NCgmbGVuZ3RoWzMgKiA4XSwgbHNiKTsKKyAgY29udGV4dC0+YmN0eC5jb3VudCArPSAzMjsKKyAgd2hpcmxwb29sX3dyaXRlIChjb250ZXh0LCBOVUxMLCAwKTsKKworICBibG9ja190b19idWZmZXIgKGNvbnRleHQtPmJjdHguYnVmLCBjb250ZXh0LT5oYXNoX3N0YXRlLCBpKTsKK30KKworc3RhdGljIGJ5dGUgKgord2hpcmxwb29sX3JlYWQgKHZvaWQgKmN0eCkKK3sKKyAgd2hpcmxwb29sX2NvbnRleHRfdCAqY29udGV4dCA9IGN0eDsKKworICByZXR1cm4gY29udGV4dC0+YmN0eC5idWY7Cit9CisKK2djcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3doaXJscG9vbCA9CisgIHsKKyAgICBHQ1JZX01EX1dISVJMUE9PTCwgezAsIDB9LAorICAgICJXSElSTFBPT0wiLCBOVUxMLCAwLCBOVUxMLCA2NCwKKyAgICB3aGlybHBvb2xfaW5pdCwgd2hpcmxwb29sX3dyaXRlLCB3aGlybHBvb2xfZmluYWwsIHdoaXJscG9vbF9yZWFkLAorICAgIHNpemVvZiAod2hpcmxwb29sX2NvbnRleHRfdCkKKyAgfTsKZGlmZiAtLWdpdCBhL2NvbXBhdC9NYWtlZmlsZS5hbSBiL2NvbXBhdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRkZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDggQEAKKyMgTWFrZWZpbGUgZm9yIGNvbXBhdCBkaXJlY3RvcnkKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworIyBXZSB1c2UgdGhpcyBsaWJjb21wYXQgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBMSUJPQkogc3R1ZmYuCisjIEZvciBleGFtcGxlLCB3ZSBuZWVkIHNvbWUgb2YgdGhlIGNvbXBhdCBmaWxlcyBhbHNvIGluIHRlc3RzLyBidXQgdGhlCisjIHN1Z2dlc3RlZCB3YXkgdG8gZG8gdGhpcyAodXNpbmcgdGhlIGF1dG9tYWtlIG9wdGlvbiBzdWJkaXItb2JqZWN0cykKKyMgbGVhZHMgdG8gcHJvYmxlbXMgd2l0aCAibWFrZSBkaXN0Y2xlYW4iOiBUaGUgZGlzdGNsZWFuIHRhcmdldCBpbgorIyB0ZXN0cyBpcyBydW4gYmVmb3JlIHRoZSBvbmUgc3JjIGFuZCBpdCByZW1vdmVzIHRoZSBkZXBzIGZpbGVzIG9mIHRoZQorIyBsaWJvYmogZmlsZXMgd2hpY2ggYXJlIGluIHNyYy4gIE5vdyB3aGVuIGl0IGNvbWVzIHRvIHJ1biBtYWtlIGluIHNyYworIyB0aGUgaWNubHVkZWQgZmlsZXMgYXJlIGdvbmUgLSBidW1tZXIuICBJbnN0ZWFkIG9mIHRyeSB0byBmaXggdGhpcworIyBpc3N1ZSBpdCBzZWVtcyBiZXR0ZXIgbm90IHRvIHVzZSBzdWJkaXItb2JqZWN0cyBidXQgYnVpbGQgdGhlbSBhbGwKKyMgaW50byBhIGNvbXBhdCBsaWJyYXJ5IGFuZCBhbHdheXMgbGluayBhZ2FpbnN0IHRoYXQgbGlicmFyeS4gIFRoaXMKKyMgYWxzbyBhdm9pZHMgdGhlIHByb2JsZW0gdGhhdCBhIGRlcGVuZGVuY3kgb24gTFRMSUJPQkogaXMgbm90IHNldHVwCisjIGlmIC0tIGRpc2FibGUtc3RhdGljIHdhcyB1c2VkLgorCisjIE5lZWQgdG8gaW5jbHVkZSAuLi9zcmMgaW4gYWRkaXRpb24gdG8gdG9wX3NyY2RpciBiZWNhdXNlIGdjcnlwdC5oIGlzCisjIGEgYnVpbHQgaGVhZGVyLgorQU1fQ1BQRkxBR1MgPSAtSS4uL3NyYyAtSSQodG9wX3NyY2Rpcikvc3JjICQoR1BHX0VSUk9SX0NGTEFHUykKKworbm9pbnN0X0xUTElCUkFSSUVTID0gbGliY29tcGF0LmxhCisKKyMgV2Ugb25seSBuZWVkIG9uZSBmaWxlIHNvIHRoYXQgdGhlIGxpYnJhcnkgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGF0CisjIGxlYXN0IG9uZSBtZW1iZXIuCitsaWJjb21wYXRfbGFfU09VUkNFUyA9IGNvbXBhdC5jIGxpYmNvbXBhdC5oCitsaWJjb21wYXRfbGFfREVQRU5ERU5DSUVTID0gQExUTElCT0JKU0AKK2xpYmNvbXBhdF9sYV9MSUJBREQgPSAgICAgICBATFRMSUJPQkpTQAorCisjIEFDX0xJQk9CSiBmaWxlcyBhcmU6CisjICAgIGdldHBpZC5jCisjICAgIGNsb2NrLmMKKyMKZGlmZiAtLWdpdCBhL2NvbXBhdC9NYWtlZmlsZS5pbiBiL2NvbXBhdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJkMjZiCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjEyIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgTWFrZWZpbGUgZm9yIGNvbXBhdCBkaXJlY3RvcnkKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworIyBXZSB1c2UgdGhpcyBsaWJjb21wYXQgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBMSUJPQkogc3R1ZmYuCisjIEZvciBleGFtcGxlLCB3ZSBuZWVkIHNvbWUgb2YgdGhlIGNvbXBhdCBmaWxlcyBhbHNvIGluIHRlc3RzLyBidXQgdGhlCisjIHN1Z2dlc3RlZCB3YXkgdG8gZG8gdGhpcyAodXNpbmcgdGhlIGF1dG9tYWtlIG9wdGlvbiBzdWJkaXItb2JqZWN0cykKKyMgbGVhZHMgdG8gcHJvYmxlbXMgd2l0aCAibWFrZSBkaXN0Y2xlYW4iOiBUaGUgZGlzdGNsZWFuIHRhcmdldCBpbgorIyB0ZXN0cyBpcyBydW4gYmVmb3JlIHRoZSBvbmUgc3JjIGFuZCBpdCByZW1vdmVzIHRoZSBkZXBzIGZpbGVzIG9mIHRoZQorIyBsaWJvYmogZmlsZXMgd2hpY2ggYXJlIGluIHNyYy4gIE5vdyB3aGVuIGl0IGNvbWVzIHRvIHJ1biBtYWtlIGluIHNyYworIyB0aGUgaWNubHVkZWQgZmlsZXMgYXJlIGdvbmUgLSBidW1tZXIuICBJbnN0ZWFkIG9mIHRyeSB0byBmaXggdGhpcworIyBpc3N1ZSBpdCBzZWVtcyBiZXR0ZXIgbm90IHRvIHVzZSBzdWJkaXItb2JqZWN0cyBidXQgYnVpbGQgdGhlbSBhbGwKKyMgaW50byBhIGNvbXBhdCBsaWJyYXJ5IGFuZCBhbHdheXMgbGluayBhZ2FpbnN0IHRoYXQgbGlicmFyeS4gIFRoaXMKKyMgYWxzbyBhdm9pZHMgdGhlIHByb2JsZW0gdGhhdCBhIGRlcGVuZGVuY3kgb24gTFRMSUJPQkogaXMgbm90IHNldHVwCisjIGlmIC0tIGRpc2FibGUtc3RhdGljIHdhcyB1c2VkLgorCitWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gY29tcGF0CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gY2xvY2suYyBcCisJZ2V0cGlkLmMKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2dwZy1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9jay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25vZXhlY3N0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc29ja2xlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N5c19zb2NrZXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9saWJjb21wYXRfbGFfT0JKRUNUUyA9IGNvbXBhdC5sbworbGliY29tcGF0X2xhX09CSkVDVFMgPSAkKGFtX2xpYmNvbXBhdF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliY29tcGF0X2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmNvbXBhdF9sYV9TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfRklMRVZFUlNJT04gPSBAQlVJTERfRklMRVZFUlNJT05ACitCVUlMRF9SRVZJU0lPTiA9IEBCVUlMRF9SRVZJU0lPTkAKK0JVSUxEX1RJTUVTVEFNUCA9IEBCVUlMRF9USU1FU1RBTVBACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDQ19GT1JfQlVJTEQgPSBAQ0NfRk9SX0JVSUxEQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRExfTElCUyA9IEBETF9MSUJTQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGQUxMQkFDS19TT0NLTEVOX1QgPSBARkFMTEJBQ0tfU09DS0xFTl9UQAorRkdSRVAgPSBARkdSRVBACitHQ1JZUFRfQ0lQSEVSUyA9IEBHQ1JZUFRfQ0lQSEVSU0AKK0dDUllQVF9ESUdFU1RTID0gQEdDUllQVF9ESUdFU1RTQAorR0NSWVBUX0hXRl9NT0RVTEVTID0gQEdDUllQVF9IV0ZfTU9EVUxFU0AKK0dDUllQVF9LREZTID0gQEdDUllQVF9LREZTQAorR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQEdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0dDUllQVF9SQU5ET00gPSBAR0NSWVBUX1JBTkRPTUAKK0dQR19FUlJPUl9DRkxBR1MgPSBAR1BHX0VSUk9SX0NGTEFHU0AKK0dQR19FUlJPUl9DT05GSUcgPSBAR1BHX0VSUk9SX0NPTkZJR0AKK0dQR19FUlJPUl9MSUJTID0gQEdQR19FUlJPUl9MSUJTQAorR1JFUCA9IEBHUkVQQAorSU5TRVJUX1NZU19TRUxFQ1RfSCA9IEBJTlNFUlRfU1lTX1NFTEVDVF9IQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkdDUllQVF9DSVBIRVJTID0gQExJQkdDUllQVF9DSVBIRVJTQAorTElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTiA9IEBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAorTElCR0NSWVBUX0NPTkZJR19DRkxBR1MgPSBATElCR0NSWVBUX0NPTkZJR19DRkxBR1NACitMSUJHQ1JZUFRfQ09ORklHX0hPU1QgPSBATElCR0NSWVBUX0NPTkZJR19IT1NUQAorTElCR0NSWVBUX0NPTkZJR19MSUJTID0gQExJQkdDUllQVF9DT05GSUdfTElCU0AKK0xJQkdDUllQVF9ESUdFU1RTID0gQExJQkdDUllQVF9ESUdFU1RTQAorTElCR0NSWVBUX0xUX0FHRSA9IEBMSUJHQ1JZUFRfTFRfQUdFQAorTElCR0NSWVBUX0xUX0NVUlJFTlQgPSBATElCR0NSWVBUX0xUX0NVUlJFTlRACitMSUJHQ1JZUFRfTFRfUkVWSVNJT04gPSBATElCR0NSWVBUX0xUX1JFVklTSU9OQAorTElCR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0xJQkdDUllQVF9USFJFQURfTU9EVUxFUyA9IEBMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVNACitMSUJNVUxUSVRIUkVBRCA9IEBMSUJNVUxUSVRIUkVBREAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVBJX1NGTEFHUyA9IEBNUElfU0ZMQUdTQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9FWEVDU1RBQ0tfRkxBR1MgPSBATk9FWEVDU1RBQ0tfRkxBR1NACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BUSF9DRkxBR1MgPSBAUFRIX0NGTEFHU0AKK1BUSF9DT05GSUcgPSBAUFRIX0NPTkZJR0AKK1BUSF9MSUJTID0gQFBUSF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1JDID0gQFJDQAorUlVOX0xBUkdFX0RBVEFfVEVTVFMgPSBAUlVOX0xBUkdFX0RBVEFfVEVTVFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorU1lTX1NPQ0tFVF9IID0gQFNZU19TT0NLRVRfSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05fTlVNQkVSID0gQFZFUlNJT05fTlVNQkVSQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZW1hY3NfbG9jYWxfdmFyc19iZWdpbiA9IEBlbWFjc19sb2NhbF92YXJzX2JlZ2luQAorZW1hY3NfbG9jYWxfdmFyc19lbmQgPSBAZW1hY3NfbG9jYWxfdmFyc19lbmRACitlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seSA9IEBlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seUAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBOZWVkIHRvIGluY2x1ZGUgLi4vc3JjIGluIGFkZGl0aW9uIHRvIHRvcF9zcmNkaXIgYmVjYXVzZSBnY3J5cHQuaCBpcworIyBhIGJ1aWx0IGhlYWRlci4KK0FNX0NQUEZMQUdTID0gLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYyAkKEdQR19FUlJPUl9DRkxBR1MpCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJjb21wYXQubGEKKworIyBXZSBvbmx5IG5lZWQgb25lIGZpbGUgc28gdGhhdCB0aGUgbGlicmFyeSBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYXQKKyMgbGVhc3Qgb25lIG1lbWJlci4KK2xpYmNvbXBhdF9sYV9TT1VSQ0VTID0gY29tcGF0LmMgbGliY29tcGF0LmgKK2xpYmNvbXBhdF9sYV9ERVBFTkRFTkNJRVMgPSBATFRMSUJPQkpTQAorbGliY29tcGF0X2xhX0xJQkFERCA9IEBMVExJQk9CSlNACithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBjb21wYXQvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgY29tcGF0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJjb21wYXQubGE6ICQobGliY29tcGF0X2xhX09CSkVDVFMpICQobGliY29tcGF0X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJjb21wYXRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICAkKGxpYmNvbXBhdF9sYV9PQkpFQ1RTKSAkKGxpYmNvbXBhdF9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9jbG9jay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9nZXRwaWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb21wYXQuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmICQoREVQRElSKSAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAkKERFUERJUikgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIEFDX0xJQk9CSiBmaWxlcyBhcmU6CisjICAgIGdldHBpZC5jCisjICAgIGNsb2NrLmMKKyMKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY29tcGF0L2Nsb2NrLmMgYi9jb21wYXQvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI1MGYzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2Nsb2NrLmMKQEAgLTAsMCArMSwzNiBAQAorLyogY2xvY2suYyAtIFJlcGxhY2VtZW50IGZvciBXaW5kb3dzQ0UKKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuCisgICB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICBQVVJQT1NFLiAgKi8KKworI2lmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9XMzJDRV9TWVNURU0KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCitjbG9ja190CitfZ2NyeV9jbG9jayAodm9pZCkKK3sKKyAgYXNzZXJ0IChDTE9DS1NfUEVSX1NFQyA9PSAxMDAwKTsKKyN3YXJuaW5nIFJlcGxhY2UgYnkgYSBjb3JyZWN0IGltcGxlbWVudGFpb24uCisgIC8qIEl0IHNlZW1zIHRoYXQgR2V0UHJvY2Vzc1RpbWVzIGlzIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsIGJ1dAorICAgICB3aXRob3V0IGEgZGVjbGFyYXRpb24uICBJZiB0aGF0IGZhaWxzIHdlIHdvdWxkIG5lZWQgdG8gd2FsayBvdmVyCisgICAgIGFsbCB0aHJlYWRzIGFuZCB0YWxseSB1cCB0aGUgR2V0VGhyZWFkVGltZXMuICAqLworCisgIHJldHVybiBHZXRUaWNrQ291bnQgKCk7Cit9CisKKyNlbHNlCisjIGVycm9yIE5vIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGZvciBjbG9jayBrbm93bgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvY29tcGF0LmMgYi9jb21wYXQvY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5YTQxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9jb21wYXQuYwpAQCAtMCwwICsxLDQxIEBACisvKiBjb21wYXQuYyAtIER1bW15IGZpbGUgdG8gYXZvaWQgYW4gZW1wdHkgbGlicmFyeS4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nMTBsaWIuaCIKKworCitjb25zdCBjaGFyICoKK19nY3J5X2NvbXBhdF9pZGVudGlmaWNhdGlvbiAodm9pZCkKK3sKKyAgLyogRm9yIGNvbXBsZXRlIGxpc3Qgb2YgY29weXJpZ2h0IGhvbGRlcnMgc2VlIHRoZSBmaWxlIEFVVEhPUlMgaW4KKyAgICAgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICAqLworICBzdGF0aWMgY29uc3QgY2hhciBibHVyYltdID0KKyAgICAiXG5cbiIKKyAgICAiVGhpcyBpcyBMaWJnY3J5cHQgIiBQQUNLQUdFX1ZFUlNJT04gIiAtIFRoZSBHTlUgQ3J5cHRvIExpYnJhcnlcbiIKKyAgICAiQ29weXJpZ2h0IChDKSAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisgICAgIkNvcHlyaWdodCAoQykgMjAxMi0yMDE0IGcxMCBDb2RlIEdtYkhcbiIKKyAgICAiQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgSnVzc2kgS2l2aWxpbm5hXG4iCisgICAgIihTZWUgdGhlIHNvdXJjZSBjb2RlIGZvciBhIGNvbXBsZXRlIGxpc3QpXG4iCisgICAgIlxuIgorICAgICIoIiBCVUlMRF9SRVZJU0lPTiAiICIgQlVJTERfVElNRVNUQU1QICIpXG4iCisgICAgIlxuXG4iOworICByZXR1cm4gYmx1cmI7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvZ2V0cGlkLmMgYi9jb21wYXQvZ2V0cGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyMzg3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9nZXRwaWQuYwpAQCAtMCwwICsxLDI5IEBACisvKiBnZXRwaWQuYyAtIFJlcGxhY2VtZW50IGZvciBXaW5kb3dzQ0UKKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuCisgICB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICBQVVJQT1NFLiAgKi8KKworI2lmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9XMzJDRV9TWVNURU0KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3BpZF90CitfZ2NyeV9nZXRwaWQgKHZvaWQpCit7CisgIHJldHVybiBHZXRDdXJyZW50UHJvY2Vzc0lkICgpOworfQorCisjZWxzZQorIyBlcnJvciBObyByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgZ2V0cGlkIGtub3duCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9saWJjb21wYXQuaCBiL2NvbXBhdC9saWJjb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE3NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2xpYmNvbXBhdC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGxpYmNvbWFwdC5oIC0gUHJvdG90eXBlcyBmb3IgQUNfUkVQTEFDRV9GVU5DdGlvbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgR0NSWV9MSUJDT01QQVRfSAorI2RlZmluZSBHQ1JZX0xJQkNPTVBBVF9ICisKK2NvbnN0IGNoYXIgKl9nY3J5X2NvbXBhdF9pZGVudGlmaWNhdGlvbiAodm9pZCk7CisKKworI2lmbmRlZiBIQVZFX0dFVFBJRAorcGlkX3QgX2djcnlfZ2V0cGlkICh2b2lkKTsKKyNkZWZpbmUgZ2V0cGlkKCkgX2djcnlfZ2V0cGlkICgpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0NMT0NLCitjbG9ja190IF9nY3J5X2Nsb2NrICh2b2lkKTsKKyNkZWZpbmUgY2xvY2soKSBfZ2NyeV9jbG9jayAoKQorI2VuZGlmCisKKworI2VuZGlmIC8qR0NSWV9MSUJDT01QQVRfSCovCmRpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjAyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcuaC5pbgpAQCAtMCwwICsxLDYyMSBAQAorLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKworI2lmbmRlZiBfR0NSWVBUX0NPTkZJR19IX0lOQ0xVREVECisjZGVmaW5lIF9HQ1JZUFRfQ09ORklHX0hfSU5DTFVERUQKKworLyogRW5hYmxlIGdwZy1lcnJvcidzIHN0cmVycm9yIG1hY3JvIGZvciBXMzJDRS4gICovCisjZGVmaW5lIEdQR19FUlJfRU5BQkxFX0VSUk5PX01BQ1JPUyAxCisKKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCisvKiBHSVQgY29tbWl0IGlkIHJldmlzaW9uIHVzZWQgdG8gYnVpbGQgdGhpcyBwYWNrYWdlICovCisjdW5kZWYgQlVJTERfUkVWSVNJT04KKworLyogVGhlIHRpbWUgdGhpcyBwYWNrYWdlIHdhcyBjb25maWd1cmVkIGZvciBhIGJ1aWxkICovCisjdW5kZWYgQlVJTERfVElNRVNUQU1QCisKKy8qIGNvbmZpZ3VyZSBkaWQgbm90IHRlc3QgZm9yIGVuZGlhbmVzcyAqLworI3VuZGVmIERJU0FCTEVEX0VORElBTl9DSEVDSworCisvKiBEZWZpbmUgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgRUdEIHNvY2tldCBuYW1lLiBGb3IgZGV0YWlscyBzZWUKKyAgIGNpcGhlci9ybmRlZ2QuYyAqLworI3VuZGVmIEVHRF9TT0NLRVRfTkFNRQorCisvKiBFbmFibGUgc3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4gKi8KKyN1bmRlZiBFTkFCTEVfQUVTTklfU1VQUE9SVAorCisvKiBFbmFibGUgc3VwcG9ydCBmb3IgSW50ZWwgQVZYMiBpbnN0cnVjdGlvbnMuICovCisjdW5kZWYgRU5BQkxFX0FWWDJfU1VQUE9SVAorCisvKiBFbmFibGUgc3VwcG9ydCBmb3IgSW50ZWwgQVZYIGluc3RydWN0aW9ucy4gKi8KKyN1bmRlZiBFTkFCTEVfQVZYX1NVUFBPUlQKKworLyogRW5hYmxlIHN1cHBvcnQgZm9yIEludGVsIERSTkcgKFJEUkFORCBpbnN0cnVjdGlvbikuICovCisjdW5kZWYgRU5BQkxFX0RSTkdfU1VQUE9SVAorCisvKiBEZWZpbmUgdG8gc3VwcG9ydCBhbiBITUFDIGJhc2VkIGludGVncml0eSBjaGVjayAqLworI3VuZGVmIEVOQUJMRV9ITUFDX0JJTkFSWV9DSEVDSworCisvKiBFbmFibGUgc3VwcG9ydCBmb3IgQVJNIE5FT04gaW5zdHJ1Y3Rpb25zLiAqLworI3VuZGVmIEVOQUJMRV9ORU9OX1NVUFBPUlQKKworLyogRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBQYWRMb2NrIGVuZ2luZS4gKi8KKyN1bmRlZiBFTkFCTEVfUEFETE9DS19TVVBQT1JUCisKKy8qIEVuYWJsZSBzdXBwb3J0IGZvciBJbnRlbCBQQ0xNVUwgaW5zdHJ1Y3Rpb25zLiAqLworI3VuZGVmIEVOQUJMRV9QQ0xNVUxfU1VQUE9SVAorCisvKiBEZWZpbmUgdG8gdXNlIHRoZSBHTlUgQyB2aXNpYmlsaXR5IGF0dHJpYnV0ZS4gKi8KKyN1bmRlZiBHQ1JZX1VTRV9WSVNJQklMSVRZCisKKy8qIFRoZSBkZWZhdWx0IGVycm9yIHNvdXJjZSBmb3IgbGliZ2NyeXB0LiAqLworI3VuZGVmIEdQR19FUlJfU09VUkNFX0RFRkFVTFQKKworLyogRGVmaW5lZCBpZiBBUk0gYXJjaGl0ZWN0dXJlIGlzIHY2IG9yIG5ld2VyICovCisjdW5kZWYgSEFWRV9BUk1fQVJDSF9WNgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0ZXhpdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BVEVYSVQKKworLyogRGVmaW5lZCBpZiB0aGUgbWxvY2soKSBjYWxsIGRvZXMgbm90IHdvcmsgKi8KKyN1bmRlZiBIQVZFX0JST0tFTl9NTE9DSworCisvKiBEZWZpbmVkIGlmIGNvbXBpbGVyIGhhcyAnX19idWlsdGluX2Jzd2FwMzInIGludHJpbnNpYyAqLworI3VuZGVmIEhBVkVfQlVJTFRJTl9CU1dBUDMyCisKKy8qIERlZmluZWQgaWYgY29tcGlsZXIgaGFzICdfX2J1aWx0aW5fYnN3YXA2NCcgaW50cmluc2ljICovCisjdW5kZWYgSEFWRV9CVUlMVElOX0JTV0FQNjQKKworLyogRGVmaW5lZCBpZiBhIGBieXRlJyBpcyB0eXBlZGVmJ2QgKi8KKyN1bmRlZiBIQVZFX0JZVEVfVFlQRURFRgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT0NLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCisKKy8qIERlZmluZWQgaWYgdW5kZXJseWluZyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIGFtZDY0IGFzc2VtYmx5CisgICBpbXBsZW1lbnRhdGlvbnMgKi8KKyN1bmRlZiBIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTCisKKy8qIERlZmluZWQgaWYgdW5kZXJseWluZyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIEFSTSBhc3NlbWJseQorICAgaW1wbGVtZW50YXRpb25zICovCisjdW5kZWYgSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMKKworLyogRGVmaW5lZCBmb3IgQWxwaGEgcGxhdGZvcm1zICovCisjdW5kZWYgSEFWRV9DUFVfQVJDSF9BTFBIQQorCisvKiBEZWZpbmVkIGZvciBBUk0gcGxhdGZvcm1zICovCisjdW5kZWYgSEFWRV9DUFVfQVJDSF9BUk0KKworLyogRGVmaW5lZCBmb3IgTTY4ayBwbGF0Zm9ybXMgKi8KKyN1bmRlZiBIQVZFX0NQVV9BUkNIX002OEsKKworLyogRGVmaW5lZCBmb3IgTUlQUyBwbGF0Zm9ybXMgKi8KKyN1bmRlZiBIQVZFX0NQVV9BUkNIX01JUFMKKworLyogRGVmaW5lZCBmb3IgUFBDIHBsYXRmb3JtcyAqLworI3VuZGVmIEhBVkVfQ1BVX0FSQ0hfUFBDCisKKy8qIERlZmluZWQgZm9yIFNQQVJDIHBsYXRmb3JtcyAqLworI3VuZGVmIEhBVkVfQ1BVX0FSQ0hfU1BBUkMKKworLyogRGVmaW5lZCBmb3IgdGhlIHg4NiBwbGF0Zm9ybXMgKi8KKyN1bmRlZiBIQVZFX0NQVV9BUkNIX1g4NgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN5c19zaWdsaXN0JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1lTX1NJR0xJU1QKKworLyogZGVmaW5lZCBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGEgcmFuZG9tIGRldmljZSAqLworI3VuZGVmIEhBVkVfREVWX1JBTkRPTQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgZG9uJ3QgaGF2ZSBgdnByaW50ZicgYnV0IGRvIGhhdmUgYF9kb3BybnQuJyAqLworI3VuZGVmIEhBVkVfRE9QUk5UCisKKy8qIGRlZmluZWQgaWYgd2UgcnVuIG9uIHNvbWUgb2YgdGhlIFBDRE9TIGxpa2Ugc3lzdGVtcyAoRE9TLCBXaW5kb3plLiBPUy8yKQorICAgd2l0aCBzcGVjaWFsIHByb3BlcnRpZXMgbGlrZSBubyBmaWxlIG1vZGVzICovCisjdW5kZWYgSEFWRV9ET1NJU0hfU1lTVEVNCisKKy8qIGRlZmluZWQgaWYgd2UgbXVzdCBydW4gb24gYSBzdHVwaWQgZmlsZSBzeXN0ZW0gKi8KKyN1bmRlZiBIQVZFX0RSSVZFX0xFVFRFUlMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY250bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GQ05UTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb2NrZmlsZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GTE9DS0ZJTEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlRSVU5DQVRFCisKKy8qIERlZmluZSBpZiBpbmxpbmUgYXNtIG1lbW9yeSBiYXJyaWVyIGlzIHN1cHBvcnRlZCAqLworI3VuZGVmIEhBVkVfR0NDX0FTTV9WT0xBVElMRV9NRU1PUlkKKworLyogRGVmaW5lZCBpZiBhIEdDQyBzdHlsZSAiX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKG4pKSIgaXMgc3VwcG9ydGVkICovCisjdW5kZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKworLyogRGVmaW5lZCBpZiBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEFWWCBpbnN0cnVjdGlvbnMgKi8KKyN1bmRlZiBIQVZFX0dDQ19JTkxJTkVfQVNNX0FWWAorCisvKiBEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQVZYMiBpbnN0cnVjdGlvbnMgKi8KKyN1bmRlZiBIQVZFX0dDQ19JTkxJTkVfQVNNX0FWWDIKKworLyogRGVmaW5lZCBpZiBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEJNSTIgaW5zdHJ1Y3Rpb25zICovCisjdW5kZWYgSEFWRV9HQ0NfSU5MSU5FX0FTTV9CTUkyCisKKy8qIERlZmluZWQgaWYgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBORU9OIGluc3RydWN0aW9ucyAqLworI3VuZGVmIEhBVkVfR0NDX0lOTElORV9BU01fTkVPTgorCisvKiBEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgUENMTVVMIGluc3RydWN0aW9ucyAqLworI3VuZGVmIEhBVkVfR0NDX0lOTElORV9BU01fUENMTVVMCisKKy8qIERlZmluZWQgaWYgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBTU1NFMyBpbnN0cnVjdGlvbnMgKi8KKyN1bmRlZiBIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aHJ0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhSVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJ1c2FnZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRSVVNBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZWQgaWYgdW5kZXJseWluZyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIEludGVsIHN5bnRheCBhc3NlbWJseQorICAgaW1wbGVtZW50YXRpb25zICovCisjdW5kZWYgSEFWRV9JTlRFTF9TWU5UQVhfUExBVEZPUk1fQVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBydCcgbGlicmFyeSAoLWxydCkuICovCisjdW5kZWYgSEFWRV9MSUJSVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNTU9WRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZWQgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBhbiBtbG9jaygpIGNhbGwgKi8KKyN1bmRlZiBIQVZFX01MT0NLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NTUFQCisKKy8qIERlZmluZWQgaWYgdGhlIEdOVSBQdGggaXMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9QVEgKKworLyogRGVmaW5lIGlmIHRoZSA8cHRocmVhZC5oPiBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLiAqLworI3VuZGVmIEhBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKKworLyogRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGhhcyByZWFkL3dyaXRlIGxvY2tzLiAqLworI3VuZGVmIEhBVkVfUFRIUkVBRF9SV0xPQ0sKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYWlzZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQUlTRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJhbmQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHBjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RQQ1BZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRVJST1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJpY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPVUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeXNjb25mJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NZU0NPTkYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeXNsb2cnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1lTTE9HCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2NhcGFiaWxpdHkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfQ0FQQUJJTElUWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21tYW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfTU1BTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21zZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19NU0dfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lZCBpZiBhIGB1MTYnIGlzIHR5cGVkZWYnZCAqLworI3VuZGVmIEhBVkVfVTE2X1RZUEVERUYKKworLyogRGVmaW5lZCBpZiBhIGB1MzInIGlzIHR5cGVkZWYnZCAqLworI3VuZGVmIEhBVkVfVTMyX1RZUEVERUYKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRwdHJfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UUFRSX1QKKworLyogRGVmaW5lZCBpZiBhIGB1bG9uZycgaXMgdHlwZWRlZidkICovCisjdW5kZWYgSEFWRV9VTE9OR19UWVBFREVGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVU5JU1REX0gKKworLyogRGVmaW5lZCBpZiBhIGB1c2hvcnQnIGlzIHR5cGVkZWYnZCAqLworI3VuZGVmIEhBVkVfVVNIT1JUX1RZUEVERUYKKworLyogRGVmaW5lZCBpZiB2YXJpYWJsZSBsZW5ndGggYXJyYXlzIGFyZSBzdXBwb3J0ZWQgKi8KKyN1bmRlZiBIQVZFX1ZMQQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZwcmludGYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVlBSSU5URgorCisvKiBEZWZpbmVkIGlmIHdlIHJ1biBvbiBXaW5kb3dzQ0UgKi8KKyN1bmRlZiBIQVZFX1czMkNFX1NZU1RFTQorCisvKiBEZWZpbmVkIGlmIHdlIHJ1biBvbiBhIFczMiBBUEkgYmFzZWQgc3lzdGVtICovCisjdW5kZWYgSEFWRV9XMzJfU1lTVEVNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdDQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0FJVDQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0cGlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dBSVRQSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlNPQ0syX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dTMlRDUElQX0gKKworLyogRGVmaW5lZCBpZiB0aGlzIGlzIG5vdCBhIHJlZ3VsYXIgcmVsZWFzZSAqLworI3VuZGVmIElTX0RFVkVMT1BNRU5UX1ZFUlNJT04KKworLyogTGlzdCBvZiBhdmFpbGFibGUgY2lwaGVyIGFsZ29yaXRobXMgKi8KKyN1bmRlZiBMSUJHQ1JZUFRfQ0lQSEVSUworCisvKiBMaXN0IG9mIGF2YWlsYWJsZSBkaWdlc3QgYWxnb3JpdGhtcyAqLworI3VuZGVmIExJQkdDUllQVF9ESUdFU1RTCisKKy8qIExpc3Qgb2YgYXZhaWxhYmxlIEtERiBhbGdvcml0aG1zICovCisjdW5kZWYgTElCR0NSWVBUX0tERlMKKworLyogTGlzdCBvZiBhdmFpbGFibGUgcHVibGljIGtleSBjaXBoZXIgYWxnb3JpdGhtcyAqLworI3VuZGVmIExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUworCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogRGVmaW5lIHRvIHVzZSB0aGUgKG9ic29sZXRlKSBtYWxsb2MgZ3VhcmRpbmcgZmVhdHVyZSAqLworI3VuZGVmIE1fR1VBUkQKKworLyogZGVmaW5lZCB0byB0aGUgbmFtZSBvZiB0aGUgc3Ryb25nIHJhbmRvbSBkZXZpY2UgKi8KKyN1bmRlZiBOQU1FX09GX0RFVl9SQU5ET00KKworLyogZGVmaW5lZCB0byB0aGUgbmFtZSBvZiB0aGUgd2Vha2VyIHJhbmRvbSBkZXZpY2UgKi8KKyN1bmRlZiBOQU1FX09GX0RFVl9VUkFORE9NCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICovCisjdW5kZWYgTk9fTUlOVVNfQ19NSU5VU19PCisKKy8qIE5hbWUgb2YgdGhpcyBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogQSBodW1hbiByZWFkYWJsZSB0ZXh0IHdpdGggdGhlIG5hbWUgb2YgdGhlIE9TICovCisjdW5kZWYgUFJJTlRBQkxFX09TX05BTUUKKworLyogRGVmaW5lIGlmIHRoZSBwdGhyZWFkX2luX3VzZSgpIGRldGVjdGlvbiBpcyBoYXJkLiAqLworI3VuZGVmIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI3VuZGVmIFJFVFNJR1RZUEUKKworLyogVGhlIHNpemUgb2YgYHVuc2lnbmVkIGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfVU5TSUdORURfSU5UCisKKy8qIFRoZSBzaXplIG9mIGB1bnNpZ25lZCBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9VTlNJR05FRF9MT05HCisKKy8qIFRoZSBzaXplIG9mIGB1bnNpZ25lZCBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1VOU0lHTkVEX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgdW5zaWduZWQgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1VOU0lHTkVEX1NIT1JUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9BRVMKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfQVJDRk9VUgorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9CTE9XRklTSAorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9DQU1FTExJQQorCisvKiBkZWZpbmUgaWYgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSB1c2VkICovCisjdW5kZWYgVVNFX0NBUEFCSUxJVElFUworCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9DQVNUNQorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9DUkMKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfREVTCisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX0RTQQorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9FQ0MKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfRUxHQU1BTAorCisvKiBEZWZpbmVkIGlmIHRoZSBHTlUgUG9ydGFibGUgVGhyZWFkIExpYnJhcnkgc2hvdWxkIGJlIHVzZWQgKi8KKyN1bmRlZiBVU0VfR05VX1BUSAorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9HT1NUMjgxNDcKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfR09TVF9SXzM0MTFfMTIKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfR09TVF9SXzM0MTFfOTQKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfSURFQQorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9NRDQKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfTUQ1CisKKy8qIHNldCB0aGlzIHRvIGxpbWl0IGZpbGVuYW1lcyB0byB0aGUgOC4zIGZvcm1hdCAqLworI3VuZGVmIFVTRV9PTkxZXzhET1QzCisKKy8qIERlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC4gKi8KKyN1bmRlZiBVU0VfUE9TSVhfVEhSRUFEUworCisvKiBEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZQorICAgd2Vhay4gKi8KKyN1bmRlZiBVU0VfUE9TSVhfVEhSRUFEU19XRUFLCisKKy8qIERlZmluZSB0byBzdXBwb3J0IHRoZSBleHBlcmltZW50YWwgcmFuZG9tIGRhZW1vbiAqLworI3VuZGVmIFVTRV9SQU5ET01fREFFTU9OCisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX1JGQzIyNjgKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfUk1EMTYwCisKKy8qIERlZmluZWQgaWYgdGhlIEVHRCBiYXNlZCBSTkcgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1JOREVHRAorCisvKiBEZWZpbmVkIGlmIHRoZSAvZGV2L3JhbmRvbSBSTkcgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1JORExJTlVYCisKKy8qIERlZmluZWQgaWYgdGhlIGRlZmF1bHQgVW5peCBSTkcgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1JORFVOSVgKKworLyogRGVmaW5lZCBpZiB0aGUgV2luZG93cyBzcGVjaWZpYyBSTkcgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1JORFczMgorCisvKiBEZWZpbmVkIGlmIHRoZSBXaW5kb3dzQ0Ugc3BlY2lmaWMgUk5HIHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIFVTRV9STkRXMzJDRQorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9SU0EKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfU0FMU0EyMAorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9TQ1JZUFQKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfU0VFRAorCisvKiBEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZCAqLworI3VuZGVmIFVTRV9TRVJQRU5UCisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX1NIQTEKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfU0hBMjU2CisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX1NIQTUxMgorCisvKiBEZWZpbmUgaWYgdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1NPTEFSSVNfVEhSRUFEUworCisvKiBEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUKKyAgIG1hZGUgd2Vhay4gKi8KKyN1bmRlZiBVU0VfU09MQVJJU19USFJFQURTX1dFQUsKKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX1RJR0VSCisKKy8qIERlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkICovCisjdW5kZWYgVVNFX1RXT0ZJU0gKKworLyogRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKyN1bmRlZiBVU0VfV0hJUkxQT09MCisKKy8qIERlZmluZSBpZiB0aGUgbmF0aXZlIFdpbmRvd3MgbXVsdGl0aHJlYWRpbmcgQVBJIGNhbiBiZSB1c2VkLiAqLworI3VuZGVmIFVTRV9XSU5ET1dTX1RIUkVBRFMKKworLyogVmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZWQgaWYgY29tcGlsZWQgc3ltYm9scyBoYXZlIGEgbGVhZGluZyB1bmRlcnNjb3JlICovCisjdW5kZWYgV0lUSF9TWU1CT0xfVU5ERVJTQ09SRQorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgb24gTUlOSVguICovCisjdW5kZWYgX01JTklYCisKKy8qIERlZmluZSB0byAyIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBQT1NJWC4xIGZlYXR1cmVzIGV4Y2VwdCB3aXRoCisgICB0aGlzIGRlZmluZWQuICovCisjdW5kZWYgX1BPU0lYXzFfU09VUkNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKworLyogVG8gYWxsb3cgdGhlIHVzZSBvZiBMaWJnY3J5cHQgaW4gbXVsdGl0aHJlYWRlZCBwcm9ncmFtcyB3ZSBoYXZlIHRvIHVzZQorICAgIHNwZWNpYWwgZmVhdHVyZXMgZnJvbSB0aGUgbGlicmFyeS4gKi8KKyNpZm5kZWYgX1JFRU5UUkFOVAorIyBkZWZpbmUgX1JFRU5UUkFOVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gc3VwcG9ydGVkIGFzc2VtYmxlciBibG9jayBrZXl3b3JkLCBpZiBwbGFpbiAnYXNtJyB3YXMgbm90CisgICBzdXBwb3J0ZWQgKi8KKyN1bmRlZiBhc20KKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCisgICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyN1bmRlZiBpbmxpbmUKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgcGlkX3QKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWQgKi8KKyN1bmRlZiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aWRlIGVub3VnaCB0byBob2xkIGEKKyAgIHBvaW50ZXIsIGlmIHN1Y2ggYSB0eXBlIGV4aXN0cywgYW5kIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnRwdHJfdAorCisKKyNkZWZpbmUgX0dDUllQVF9JTl9MSUJHQ1JZUFQgMQorCisvKiBJZiB0aGUgY29uZmlndXJlIGNoZWNrIGZvciBlbmRpYW5uZXNzIGhhcyBiZWVuIGRpc2FibGVkLCBnZXQgaXQgZnJvbQorICAgT1MgbWFjcm9zLiAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgbWFraW5nIGZhdCBiaW5hcnkgYnVpbGRzIG9uIE9TIFguICAqLworI2lmZGVmIERJU0FCTEVEX0VORElBTl9DSEVDSworIyBpZiBkZWZpbmVkKF9fQklHX0VORElBTl9fKQorIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbHNlCisjICBlcnJvciAiTm8gZW5kaWFubmVzcyBmb3VuZCIKKyMgZW5kaWYKKyNlbmRpZiAvKkRJU0FCTEVEX0VORElBTl9DSEVDSyovCisKKy8qIFdlIGJhc2ljYWxseSB1c2UgdGhlIG9yaWdpbmFsIENhbWVsbGlhIHNvdXJjZS4gIE1ha2Ugc3VyZSB0aGUgc3ltYm9scworICAgcHJvcGVybHkgcHJlZml4ZWQuICAqLworI2RlZmluZSBDQU1FTExJQV9FWFRfU1lNX1BSRUZJWCBfZ2NyeV8KKworI2VuZGlmIC8qX0dDUllQVF9DT05GSUdfSF9JTkNMVURFRCovCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMmIwODMzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlCkBAIC0wLDAgKzEsMjExOTAgQEAKKyMhIC9iaW4vc2gKKyMgRnJvbSBjb25maWd1cmUuYWMgUmV2aXNpb24uCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgbGliZ2NyeXB0IDEuNi4xLgorIworIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MuZ251cGcub3JnPi4KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCisgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKyAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOworICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorYXNfZm5fZXhpdCAyNTUKKyAgZmkKKyAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQoraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxCisKKyAgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cJHtCQVNIX1ZFUlNJT04rc2V0fVwiIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgXCJYXGBwcmludGYgJXMgXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiIFxcCisgICAgICB8fCB0ZXN0IFwiWFxgcHJpbnQgLXIgLS0gXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiICkgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyQwOiBodHRwOi8vYnVncy5nbnVwZy5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyBhbnkKKyQwOiBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gVGhlbiBpbnN0YWxsCiskMDogYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorJDA6IHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCisgIGZpCisgIGV4aXQgMQorZmkKK2ZpCitmaQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KK2V4cG9ydCBTSEVMTAorIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCitDTElDT0xPUl9GT1JDRT0gR1JFUF9PUFRJT05TPQordW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCisKKyMgYXNfZm5fZXhlY3V0YWJsZV9wIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorYXNfZm5fZXhlY3V0YWJsZV9wICgpCit7CisgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKK30gIyBhc19mbl9leGVjdXRhYmxlX3AKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKworICBhc19saW5lbm9fMT0kTElORU5PIGFzX2xpbmVub18xYT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8gYXNfbGluZW5vXzJhPSRMSU5FTk8KKyAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEnJGFzX3J1bicgKyAxYCIgPSAieCRhc19saW5lbm9fMickYXNfcnVuJyInIHx8IHsKKyAgIyBCbGFtZSBMZWUgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCisgICAgICBOCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjsgYXNfZm5fZXhpdCAxOyB9CisKKyAgIyBJZiB3ZSBoYWQgdG8gcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwsIHdlJ3JlIGVuc3VyZWQgdG8gaGF2ZQorICAjIGFscmVhZHkgZG9uZSB0aGF0LCBzbyBlbnN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGRvIHNvIGFnYWluIGFuZCBmYWxsCisgICMgaW4gYW4gaW5maW5pdGUgbG9vcC4gIFRoaXMgaGFzIGFscmVhZHkgaGFwcGVuZWQgaW4gcHJhY3RpY2UuCisgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWMKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcFInCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXBSJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcFInCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworYXNfdGVzdF94PSd0ZXN0IC14JworYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKKwordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIG9sZCBHTlUvTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CithY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQorY3Jvc3NfY29tcGlsaW5nPW5vCitzdWJkaXJzPQorTUZMQUdTPQorTUFLRUZMQUdTPQorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0nbGliZ2NyeXB0JworUEFDS0FHRV9UQVJOQU1FPSdsaWJnY3J5cHQnCitQQUNLQUdFX1ZFUlNJT049JzEuNi4xJworUEFDS0FHRV9TVFJJTkc9J2xpYmdjcnlwdCAxLjYuMScKK1BBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5nbnVwZy5vcmcnCitQQUNLQUdFX1VSTD0nJworCithY191bmlxdWVfZmlsZT0ic3JjL2xpYmdjcnlwdC52ZXJzIgorYWNfY29uZmlnX2xpYm9ial9kaXI9Y29tcGF0CisjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCithY19pbmNsdWRlc19kZWZhdWx0PSJcCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKyMgIGluY2x1ZGUgPG1lbW9yeS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYiCisKK2dsX3VzZV90aHJlYWRzX2RlZmF1bHQ9CithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUworQlVJTERfVElNRVNUQU1QCitCVUlMRF9GSUxFVkVSU0lPTgorQlVJTERfUkVWSVNJT04KK0dDUllQVF9IV0ZfTU9EVUxFUworTElCR0NSWVBUX0RJR0VTVFMKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUworTElCR0NSWVBUX0NJUEhFUlMKK0dDUllQVF9SQU5ET00KK0dDUllQVF9LREZTCitHQ1JZUFRfRElHRVNUUworR0NSWVBUX1BVQktFWV9DSVBIRVJTCitHQ1JZUFRfQ0lQSEVSUworTElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTCitMSUJHQ1JZUFRfQ09ORklHX0hPU1QKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTCitMSUJHQ1JZUFRfQ09ORklHX0xJQlMKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04KK05PRVhFQ1NUQUNLX0ZMQUdTCitDUk9TU19DT01QSUxJTkdfRkFMU0UKK0NST1NTX0NPTVBJTElOR19UUlVFCitETF9MSUJTCitMSUJPQkpTCitNUElfTU9EX0NfVURJVl9RUk5ORF9GQUxTRQorTVBJX01PRF9DX1VESVZfUVJOTkRfVFJVRQorTVBJX01PRF9DX1VESVZfRkFMU0UKK01QSV9NT0RfQ19VRElWX1RSVUUKK01QSV9NT0RfQ19NUElIX1JTSElGVF9GQUxTRQorTVBJX01PRF9DX01QSUhfUlNISUZUX1RSVUUKK01QSV9NT0RfQ19NUElIX0xTSElGVF9GQUxTRQorTVBJX01PRF9DX01QSUhfTFNISUZUX1RSVUUKK01QSV9NT0RfQ19NUElIX01VTDNfRkFMU0UKK01QSV9NT0RfQ19NUElIX01VTDNfVFJVRQorTVBJX01PRF9DX01QSUhfTVVMMl9GQUxTRQorTVBJX01PRF9DX01QSUhfTVVMMl9UUlVFCitNUElfTU9EX0NfTVBJSF9NVUwxX0ZBTFNFCitNUElfTU9EX0NfTVBJSF9NVUwxX1RSVUUKK01QSV9NT0RfQ19NUElIX1NVQjFfRkFMU0UKK01QSV9NT0RfQ19NUElIX1NVQjFfVFJVRQorTVBJX01PRF9DX01QSUhfQUREMV9GQUxTRQorTVBJX01PRF9DX01QSUhfQUREMV9UUlVFCitNUElfTU9EX0FTTV9VRElWX1FSTk5EX0ZBTFNFCitNUElfTU9EX0FTTV9VRElWX1FSTk5EX1RSVUUKK01QSV9NT0RfQVNNX1VESVZfRkFMU0UKK01QSV9NT0RfQVNNX1VESVZfVFJVRQorTVBJX01PRF9BU01fTVBJSF9SU0hJRlRfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfUlNISUZUX1RSVUUKK01QSV9NT0RfQVNNX01QSUhfTFNISUZUX0ZBTFNFCitNUElfTU9EX0FTTV9NUElIX0xTSElGVF9UUlVFCitNUElfTU9EX0FTTV9NUElIX01VTDNfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfTVVMM19UUlVFCitNUElfTU9EX0FTTV9NUElIX01VTDJfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfTVVMMl9UUlVFCitNUElfTU9EX0FTTV9NUElIX01VTDFfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfTVVMMV9UUlVFCitNUElfTU9EX0FTTV9NUElIX1NVQjFfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfU1VCMV9UUlVFCitNUElfTU9EX0FTTV9NUElIX0FERDFfRkFMU0UKK01QSV9NT0RfQVNNX01QSUhfQUREMV9UUlVFCitNUElfU0ZMQUdTCitGQUxMQkFDS19TT0NLTEVOX1QKK1NZU19TT0NLRVRfSAorSU5TRVJUX1NZU19TRUxFQ1RfSAorTFRMSUJNVUxUSVRIUkVBRAorTElCTVVMVElUSFJFQUQKK0xUTElCVEhSRUFECitMSUJUSFJFQUQKK1BUSF9MSUJTCitQVEhfQ0ZMQUdTCitQVEhfQ09ORklHCitHUEdfRVJST1JfTElCUworR1BHX0VSUk9SX0NGTEFHUworR1BHX0VSUk9SX0NPTkZJRworSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRQorSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9UUlVFCitFTkFCTEVfT19GTEFHX01VTkdJTkdfRkFMU0UKK0VOQUJMRV9PX0ZMQUdfTVVOR0lOR19UUlVFCitSVU5fTEFSR0VfREFUQV9URVNUUworVVNFX1JBTkRPTV9EQUVNT05fRkFMU0UKK1VTRV9SQU5ET01fREFFTU9OX1RSVUUKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kCitlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seQorZW1hY3NfbG9jYWxfdmFyc19iZWdpbgorSEFWRV9XMzJDRV9TWVNURU1fRkFMU0UKK0hBVkVfVzMyQ0VfU1lTVEVNX1RSVUUKK0hBVkVfVzMyX1NZU1RFTV9GQUxTRQorSEFWRV9XMzJfU1lTVEVNX1RSVUUKK1JDCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorUkFOTElCCithY19jdF9BUgorQVIKK0xOX1MKK05NCithY19jdF9EVU1QQklOCitEVU1QQklOCitMRAorRkdSRVAKK1NFRAorTElCVE9PTAorT0JKRFVNUAorRExMVE9PTAorQVMKK0NDX0ZPUl9CVUlMRAorRUdSRVAKK0dSRVAKK2FtX19mYXN0ZGVwQ0NBU19GQUxTRQorYW1fX2Zhc3RkZXBDQ0FTX1RSVUUKK0NDQVNERVBNT0RFCitDQ0FTRkxBR1MKK0NDQVMKK0NQUAorYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK2FtX19ub2RlcAorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK1ZFUlNJT05fTlVNQkVSCitMSUJHQ1JZUFRfTFRfUkVWSVNJT04KK0xJQkdDUllQVF9MVF9BR0UKK0xJQkdDUllQVF9MVF9DVVJSRU5UCitBTV9CQUNLU0xBU0gKK0FNX0RFRkFVTFRfVkVSQk9TSVRZCitBTV9ERUZBVUxUX1YKK0FNX1YKK01BSU5UCitNQUlOVEFJTkVSX01PREVfRkFMU0UKK01BSU5UQUlORVJfTU9ERV9UUlVFCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX21haW50YWluZXJfbW9kZQorZW5hYmxlX3NpbGVudF9ydWxlcworZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKK2VuYWJsZV9zdGF0aWMKK2VuYWJsZV9zaGFyZWQKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCit3aXRoX2dudV9sZAord2l0aF9zeXNyb290CitlbmFibGVfbGlidG9vbF9sb2NrCitlbmFibGVfZW5kaWFuX2NoZWNrCitlbmFibGVfY2lwaGVycworZW5hYmxlX3B1YmtleV9jaXBoZXJzCitlbmFibGVfZGlnZXN0cworZW5hYmxlX2tkZnMKK2VuYWJsZV9yYW5kb20KK2VuYWJsZV9kZXZfcmFuZG9tCit3aXRoX2VnZF9zb2NrZXQKK2VuYWJsZV9yYW5kb21fZGFlbW9uCitlbmFibGVfYXNtCitlbmFibGVfbV9ndWFyZAorZW5hYmxlX2xhcmdlX2RhdGFfdGVzdHMKK3dpdGhfY2FwYWJpbGl0aWVzCitlbmFibGVfaG1hY19iaW5hcnlfY2hlY2sKK2VuYWJsZV9wYWRsb2NrX3N1cHBvcnQKK2VuYWJsZV9hZXNuaV9zdXBwb3J0CitlbmFibGVfcGNsbXVsX3N1cHBvcnQKK2VuYWJsZV9kcm5nX3N1cHBvcnQKK2VuYWJsZV9hdnhfc3VwcG9ydAorZW5hYmxlX2F2eDJfc3VwcG9ydAorZW5hYmxlX25lb25fc3VwcG9ydAorZW5hYmxlX09fZmxhZ19tdW5naW5nCitlbmFibGVfYW1kNjRfYXNfZmVhdHVyZV9kZXRlY3Rpb24KK2VuYWJsZV9sZF92ZXJzaW9uX3NjcmlwdAord2l0aF9saWJncGdfZXJyb3JfcHJlZml4Cit3aXRoX2dwZ19lcnJvcl9wcmVmaXgKK3dpdGhfcHRoX3ByZWZpeAorZW5hYmxlX3RocmVhZHMKK2VuYWJsZV9tcGlfcGF0aAorZW5hYmxlX29wdGltaXphdGlvbgorZW5hYmxlX25vZXhlY3N0YWNrCisnCisgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworaG9zdF9hbGlhcwordGFyZ2V0X2FsaWFzCitDQworQ0ZMQUdTCitMREZMQUdTCitMSUJTCitDUFBGTEFHUworQ1BQCitDQ0FTCitDQ0FTRkxBR1MKK0NDX0ZPUl9CVUlMRCcKKworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgIDogIiR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259IgorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgorZmkKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmdjcnlwdCAxLjYuMSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgorCitUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCitWQVI9VkFMVUUuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLgorCitEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKworQ29uZmlndXJhdGlvbjoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQorICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKworQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCitcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisKK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorCitGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYmdjcnlwdF0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJnY3J5cHQgMS42LjE6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXIKKyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgICAgICAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MScpCisgIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0wJykKKyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PW5vXQorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZGlzYWJsZS1lbmRpYW4tY2hlY2sgIGRpc2FibGUgdGhlIGVuZGlhbiBjaGVjayBhbmQgdHJ1c3QgdGhlIE9TIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JvcworICAtLWVuYWJsZS1jaXBoZXJzPWNpcGhlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IHRoZSBzeW1tZXRyaWMgY2lwaGVycyB0byBpbmNsdWRlCisgIC0tZW5hYmxlLXB1YmtleS1jaXBoZXJzPWNpcGhlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IHRoZSBwdWJsaWMta2V5IGNpcGhlcnMgdG8gaW5jbHVkZQorICAtLWVuYWJsZS1kaWdlc3RzPWRpZ2VzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IHRoZSBtZXNzYWdlIGRpZ2VzdHMgdG8gaW5jbHVkZQorICAtLWVuYWJsZS1rZmRzPWtkZnMgICAgICBzZWxlY3QgdGhlIEtERnMgdG8gaW5jbHVkZQorICAtLWVuYWJsZS1yYW5kb209bmFtZSAgICBzZWxlY3Qgd2hpY2ggcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdG8gdXNlCisgIC0tZGlzYWJsZS1kZXYtcmFuZG9tICAgIGRpc2FibGUgdGhlIHVzZSBvZiBkZXYgcmFuZG9tCisgIC0tZW5hYmxlLXJhbmRvbS1kYWVtb24gIEJ1aWxkIGFuZCBzdXBwb3J0IHRoZSBleHBlcmltZW50YWwgZ2NyeXB0cm5kCisgIC0tZGlzYWJsZS1hc20gICAgICAgICAgIERpc2FibGUgTVBJIGFzc2VtYmxlciBtb2R1bGVzCisgIC0tZW5hYmxlLW0tZ3VhcmQgICAgICAgIEVuYWJsZSBtZW1vcnkgZ3VhcmQgZmFjaWxpdHkKKyAgLS1lbmFibGUtbGFyZ2UtZGF0YS10ZXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIHJlYWwgbG9uZyBydWlubmluZyBsYXJnZSBkYXRhIHRlc3RzCisgIC0tZW5hYmxlLWhtYWMtYmluYXJ5LWNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBsaWJyYXJ5IGludGVncml0eSBjaGVjaworICAtLWRpc2FibGUtcGFkbG9jay1zdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIFBhZExvY2sgRW5naW5lIG9mIFZJQQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzCisgIC0tZGlzYWJsZS1hZXNuaS1zdXBwb3J0IERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMKKyAgLS1kaXNhYmxlLXBjbG11bC1zdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEludGVsIFBDTE1VTCBpbnN0cnVjdGlvbnMKKyAgLS1kaXNhYmxlLWRybmctc3VwcG9ydCAgRGlzYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgRFJORyAoUkRSQU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uKQorICAtLWRpc2FibGUtYXZ4LXN1cHBvcnQgICBEaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBBVlggaW5zdHJ1Y3Rpb25zCisgIC0tZGlzYWJsZS1hdngyLXN1cHBvcnQgIERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEludGVsIEFWWDIgaW5zdHJ1Y3Rpb25zCisgIC0tZGlzYWJsZS1uZW9uLXN1cHBvcnQgIERpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEFSTSBORU9OIGluc3RydWN0aW9ucworICAtLWRpc2FibGUtTy1mbGFnLW11bmdpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBtb2RpZmljYXRpb24gb2YgdGhlIGNjIC1PIGZsYWcKKyAgLS1kaXNhYmxlLWFtZDY0LWFzLWZlYXR1cmUtZGV0ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIGF1dG8tZGV0ZWN0aW9uIG9mIEFNRDY0IGFzKDEpIGZlYXR1cmVzCisgIC0tZW5hYmxlLWxkLXZlcnNpb24tc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBsaW5rZXIgdmVyc2lvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IGlzIHN5c3RlbSBkZXBlbmRlbnQpCisgIC0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8d2luZG93c30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBtdWx0aXRocmVhZGluZyBBUEkKKyAgLS1kaXNhYmxlLXRocmVhZHMgICAgICAgYnVpbGQgd2l0aG91dCBtdWx0aXRocmVhZCBzYWZldHkKKyAgLS1lbmFibGUtbXBpLXBhdGg9RVhUUkFfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIEVYVFJBX1BBVEggdG8gbGlzdCBvZiBDUFUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9ucworICAtLWRpc2FibGUtb3B0aW1pemF0aW9uICBkaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbgorICAtLWRpc2FibGUtbm9leGVjc3RhY2sgICBkaXNhYmxlIG5vbiBleGVjdXRhYmxlIHN0YWNrIHN1cHBvcnQKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgIC0td2l0aC1lZ2Qtc29ja2V0PU5BTUUgIFVzZSBOQU1FIGZvciB0aGUgRUdEIHNvY2tldCkKKyAgLS13aXRoLWNhcGFiaWxpdGllcyAgICAgVXNlIGxpbnV4IGNhcGFiaWxpdGllcyBbZGVmYXVsdD1ub10KKyAgLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCB3aGVyZSBHUEcgRXJyb3IgaXMgaW5zdGFsbGVkIChvcHRpb25hbCkKKworICAtLXdpdGgtcHRoLXByZWZpeD1QRlggICBwcmVmaXggd2hlcmUgR05VIFB0aCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCisgIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQorICBDQ19GT1JfQlVJTEQKKyAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIEMgY29tcGlsZXIKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLmdudXBnLm9yZz4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitsaWJnY3J5cHQgY29uZmlndXJlIDEuNi4xCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BQ0VPRgorICBleGl0CitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisoICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9idWdzLmdudXBnLm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyA+PmNvbmZ0ZXN0LnZhbDsgcmVhZCAkMyA8Y29uZnRlc3QudmFsOyBhY19yZXR2YWw9MAorZWxzZQorICBhY19yZXR2YWw9MQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorCisgIGZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKKworIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja190eXBlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorCisjIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19kZWNsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKyAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiAkYXNfZGVjbF9uYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKyNlbHNlCisgICh2b2lkKSAkYXNfZGVjbF9uYW1lOworI2VuZGlmCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19kZWNsCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBsaWJnY3J5cHQgJGFzX21lIDEuNi4xLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KKyAgICAgIGZpOzsKKyAgZXNhYworICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorICAgIGNhc2UgJGFjX25ld192YWwgaW4KKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisgICAgZXNhYworICBmaQorZG9uZQoraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKK2ZpCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKyMgTFQgVmVyc2lvbiBudW1iZXJzLCByZW1lbWJlciB0byBjaGFuZ2UgdGhlbSBqdXN0ICpiZWZvcmUqIGEgcmVsZWFzZS4KKyMgICAoSW50ZXJmYWNlcyByZW1vdmVkOiAgICBDVVJSRU5UKyssIEFHRT0wLCBSRVZJU0lPTj0wKQorIyAgIChJbnRlcmZhY2VzIGFkZGVkOiAgICAgIENVUlJFTlQrKywgQUdFKyssIFJFVklTSU9OPTApCisjICAgKE5vIGludGVyZmFjZXMgY2hhbmdlZDogICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKykKK0xJQkdDUllQVF9MVF9DVVJSRU5UPTIwCitMSUJHQ1JZUFRfTFRfQUdFPTAKK0xJQkdDUllQVF9MVF9SRVZJU0lPTj0xCisKKworIyBJZiB0aGUgQVBJIGlzIGNoYW5nZWQgaW4gYW4gaW5jb21wYXRpYmxlIHdheTogaW5jcmVtZW50IHRoZSBuZXh0IGNvdW50ZXIuCisjCisjIDEuNjogQUJJIGFuZCBBUEkgY2hhbmdlIGJ1dCB0aGUgY2hhbmdlIGlzIHRvIG1vc3QgdXNlcnMgaXJyZWxldmFudAorIyAgICAgIGFuZCB0aHVzIHRoZSBBUEkgdmVyc2lvbiBudW1iZXIgaGFzIG5vdCBiZWVuIGluY3JlbWVudGVkLgorTElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTj0xCisKKyMgSWYgeW91IGNoYW5nZSB0aGUgcmVxdWlyZWQgZ3BnLWVycm9yIHZlcnNpb24sIHBsZWFzZSByZW1vdmUKKyMgdW5uZWNlc3NhcnkgZXJyb3IgY29kZSBkZWZpbmVzIGluIHNyYy9nY3J5cHQtaW50LmguCitORUVEX0dQR19FUlJPUl9WRVJTSU9OPTEuMTEKKworUEFDS0FHRT0kUEFDS0FHRV9OQU1FCitWRVJTSU9OPSRQQUNLQUdFX1ZFUlNJT04KKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gYnVpbGQtYXV4ICIkc3JjZGlyIi9idWlsZC1hdXg7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gYnVpbGQtYXV4IFwiJHNyY2RpclwiL2J1aWxkLWF1eCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCisKK2FtX19hcGlfdmVyc2lvbj0nMS4xMScKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiBcYCRzcmNkaXInIiAiJExJTkVOTyIgNTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKyAgICAgICYmIHRlc3QgIiQqIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBhc19mbl9lcnJvciAkPyAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgIiRMSU5FTk8iIDUKKyAgIGZpCisKKyAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQordGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXiYkcHJvZ3JhbV9wcmVmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCit0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZcJCYkcHJvZ3JhbV9zdWZmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBEb3VibGUgYW55IFwgb3IgJC4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCithY19zY3JpcHQ9J3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8nCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWAkYXNfZWNobyAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiIHwgc2VkICIkYWNfc2NyaXB0ImAKKworIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CitmaQorCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgorICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbworCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCisJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAorCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKKwkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0CisJICAgICAgIGJyZWFrIDM7OworCSAgIGVzYWMKKwkgZG9uZQorICAgICAgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCisgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1CiskYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQorCitta2Rpcl9wPSIkTUtESVJfUCIKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Citlc2FjCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FXSys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgZXZhbCBcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbDoKKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworX0FDRU9GCisjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCisKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJworICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1CisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KKyBQQUNLQUdFPSdsaWJnY3J5cHQnCisgVkVSU0lPTj0nMS42LjEnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KKyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCisjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KK0FNVEFSPSckJHtUQVItdGFyfScKKworYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLScKKworCisKKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGNvbmZpZy5oIgorCisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21haW50YWluZXJfbW9kZTsgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsCitlbHNlCisgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8KK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKKyRhc19lY2hvICIkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2OyB9CisgICBpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQorICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCitlbHNlCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPScjJworICBNQUlOVEFJTkVSX01PREVfRkFMU0U9CitmaQorCisgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKworCisKKworCisKKworCisKKworCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKK1ZFUlNJT05fTlVNQkVSPTB4MDEwNjAxCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyAgQmFzaWMgY2hlY2tzLiAgIyMjICh3ZSBuZWVkIHNvbWUgcmVzdWx0cyBsYXRlciBvbiAoZS5nLiAkR0NDKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCittaXNzaW5nX2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsIn0KKworCitBVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufWF1dG9jb25mIn0KKworCitBVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufWF1dG9tYWtlIn0KKworCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKworIyBBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvLCAkbWlzc2luZ19kaXIpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorCitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitzdHJ1Y3Qgc3RhdDsKKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK0RFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKworYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gIiA+JjY7IH0KK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorJGFzX2VjaG8gIiRfYW1fcmVzdWx0IiA+JjY7IH0KK3JtIC1mIGNvbmZpbmMgY29uZm1mCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nOworZmkKKworaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworICBhbV9fbm9kZXA9J19ubycKK2ZpCisgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIEFNREVQX1RSVUU9CisgIEFNREVQX0ZBTFNFPScjJworZWxzZQorICBBTURFUF9UUlVFPScjJworICBBTURFUF9GQUxTRT0KK2ZpCisKKworCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPQorICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9CitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2lmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQorZmkKK3NldCBkdW1teSAkQ0M7IGFjX2NjPWAkYXNfZWNobyAiJDIiIHwKKwkJICAgICAgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorIyBXZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4KKyMgZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKK3JtIC1mIGNvbmZ0ZXN0Mi4qCitpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKyAgIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OwordGhlbgorICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPXllcworICBpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KKyAgICAjIFRlc3QgZmlyc3QgdGhhdCBjYyBleGlzdHMgYXQgYWxsLgorICAgIGlmIHsgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgICBhY190cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1JworICAgICAgcm0gLWYgY29uZnRlc3QyLioKKyAgICAgIGlmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJgorCSB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKKyAgICAgIHRoZW4KKwkjIGNjIHdvcmtzIHRvby4KKwk6CisgICAgICBlbHNlCisJIyBjYyBleGlzdHMgYnV0IGRvZXNuJ3QgbGlrZSAtby4KKwlldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCisgICAgICBmaQorICAgIGZpCisgIGZpCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0KgorCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX28gPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBGSVhNRTogd2UgcmVseSBvbiB0aGUgY2FjaGUgdmFyaWFibGUgbmFtZSBiZWNhdXNlCisjIHRoZXJlIGlzIG5vIG90aGVyIHdheS4KK3NldCBkdW1teSAkQ0MKK2FtX2NjPWBlY2hvICQyIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKK2V2YWwgYW1fdD1cJGFjX2N2X3Byb2dfY2NfJHthbV9jY31fY19vCitpZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCisKKworIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KKwordGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCit0ZXN0ICIke0NDQVNGTEFHUytzZXR9IiA9IHNldCB8fCBDQ0FTRkxBR1M9JENGTEFHUworCisKKworZGVwY2M9IiRDQ0FTIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NBU0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDQVNfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENDQVNfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFPQorZmkKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzdHJlcnJvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9yLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9zdHJlcnJvcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmVycm9yICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc3RyZXJyb3IgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgY3Bvc2l4OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfc3RyZXJyb3IrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX3N0cmVycm9yKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9zdHJlcnJvcgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FXSys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29uZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBNSU5JWD15ZXMKK2Vsc2UKKyAgTUlOSVg9CitmaQorCisKKyAgaWYgdGVzdCAiJE1JTklYIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBfTUlOSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjICAgICAgICAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyAgICAgICAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXMKK2Vsc2UKKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNjsgfQorICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorICAgICRhc19lY2hvICIjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9HTlVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCisKKworIyBXZSBuZWVkIHRvIGNvbXBpbGUgYW5kIHJ1biBhIHByb2dyYW0gb24gdGhlIGJ1aWxkIG1hY2hpbmUuICBBCisjIGNvbW1lbnQgaW4gbGliZ3BnLWVycm9yIHNheXMgdGhhdCB0aGUgQUNfUFJPR19DQ19GT1JfQlVJTEQgbWFjcm8gaW4KKyMgdGhlIEFDIGFyY2hpdmUgaXMgYnJva2VuIGZvciBhdXRvY29uZiAyLjU3LiAgR2l2ZW4gdGhhdCB0aGVyZSBpcyBubworIyBuZXdlciB2ZXJzaW9uIG9mIHRoYXQgbWFjcm8sIHdlIGFzc3VtZSB0aGF0IGl0IGlzIGFsc28gYnJva2VuIGZvcgorIyBhdXRvY29uZiAyLjYxIGFuZCB0aHVzIHdlIHVzZSBhIHNpbXBsZSBidXQgdXN1YWxseSBzdWZmaWNpZW50CisjIGFwcHJvYWNoLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2MgZm9yIGJ1aWxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjYyBmb3IgYnVpbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gInllcyI7IHRoZW4KKyAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1jY30iCitlbHNlCisgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtJENDfSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDX0ZPUl9CVUlMRCIgPiY1CiskYXNfZWNobyAiJENDX0ZPUl9CVUlMRCIgPiY2OyB9CisKKworCisKK2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKK2VzYWMKKworCisKK21hY3JvX3ZlcnNpb249JzIuNC4yJworbWFjcm9fcmV2aXNpb249JzEuMzMzNycKKworCisKKworCisKKworCisKKworCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiIgorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiskYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorJGFzX2VjaG8gInByaW50IC1yIiA+JjY7IH0gOzsKKyAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhdCIgPiY1CiskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfU0VEIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRkdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICBmaQorZmkKKworICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfbm1faW50ZXJmYWNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JjUKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KK0xOX1M9JGFzX2xuX3MKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CiskYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KK2ZpCisKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCisKK2ZpCisKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsgfQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQorJGFzX2VjaG8gIiR4c2lfc2hlbGwiID4mNjsgfQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1CiskYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9CisKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorCisKKworCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworCitmaQorCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b190b29sX2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKKworZmkKKwordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz1mYWxzZQorICAgIGZpCisgICAgOzsKKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4WzQtOV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVs0NV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KKyAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9CitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBhcgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgZm9yIGFjX3Byb2cgaW4gYXIKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitmaQorCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJfYXRfZmlsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKK2Vsc2UKKyAgd2l0aF9zeXNyb290PW5vCitmaQorCisKK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX3N5c3Jvb3R9IiA+JjUKKyRhc19lY2hvICIke3dpdGhfc3lzcm9vdH0iID4mNjsgfQorICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisgICA7OworZXNhYworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisgICAgICAgICBwb3dlcnBjNjRsZS0qKQorICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisgICAgICAgICAgIDs7CisgICAgICAgICBwb3dlcnBjNjQtKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKyAgICAgICAgIHBvd2VycGNsZS0qKQorICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorICAgICAgICAgICA7OworICAgICAgICAgcG93ZXJwYy0qKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfY2NfbmVlZHNfYmVsZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKK2Vsc2UKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7OworKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKyAgICBNQU5JRkVTVF9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKyAgZmkKK2Vsc2UKKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCisKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcworZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZm9yY2VfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworCisKKyMgU2V0IG9wdGlvbnMKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVM9JGFjX2N2X3Byb2dfQVMKK2lmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1CiskYXNfZWNobyAiJEFTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgYWNfY3RfQVM9JEFTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCitpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKyAgICBBUz0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVM9JGFjX2N0X0FTCisgIGZpCitlbHNlCisgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworCisKKworCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPW5vCitmaQorCisKKworCisKKworCisKKworCisgICAgICAgIGVuYWJsZV9kbG9wZW49bm8KKworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgorCSAgcGljX21vZGU9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCisKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQUdJQ19DTUQgaW4KK1tcXC8qXSB8ICA/OltcXC9dKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CisKK2x0X3NhdmVfQ0M9IiRDQyIKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iLVhjb21waWxlciAkbHRfcHJvZ19jb21waWxlcl9waWMiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgWzEtN10uKiB8ICpTdW4qRm9ydHJhbipcIDguWzAtM10qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbQ0ZdKkNvbXBpbGVyKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KK2ZpCisKK2ZpCisKKworCisKKworCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CitmaQorCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCisgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorICBtb2R1bGVfY21kcz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXM9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIGxpbmtfYWxsX2RlcGxpYnM9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCBcIiRzZWRfdW5jb21tZW50X2RlZmZpbGVcIiAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIDFxYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwkjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwKKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKwlsaW5rX2FsbF9kZXBsaWJzPW5vCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgXCIkc2VkX3VuY29tbWVudF9kZWZmaWxlXCIgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAxcWAiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGVsc2UKKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGZpfgorCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwlleGNsdWRlX2V4cHN5bXM9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICouZXhlfCouRVhFKSA7OworCSAgICAqKQorCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCSAgICAgIDs7CisJICBlc2FjfgorCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisKKyAgZWxzZQorICBsZF9zaGxpYnM9bm8KKyAgZmkKKworICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyLiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPSB4eWVzOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2Vsc2UKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCitmaQorCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwkgIDs7CisJKikKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCitlbHNlCisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHM9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KK3Rlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW0EtWmEtel06XCksXDEsZyIgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KKyAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbQS1aYS16XTpcKSxcMSxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZGVsZiotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKworZmkKKworICAgIDs7CisKKyAgKikKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX3NobF9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNobF9sb2FkICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2hsX2xvYWQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKK2Vsc2UKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9kbGRfbGluays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbGRfbGluayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsZF9saW5rICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcworZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICAgIDs7CisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgOzsKKyAgZXNhYworZmkKKworCisKKworCisKKworCisKKworCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFs0LTldKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc2hhcmVkIiA+JjY7IH0KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KKworCisKKworZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworQ0M9IiRsdF9zYXZlX0NDIgorCisKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKworCisKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXdpbmRyZXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9d2luZHJlczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkMiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkM9IiRSQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1JDPSIke2FjX3Rvb2xfcHJlZml4fXdpbmRyZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkM9JGFjX2N2X3Byb2dfUkMKK2lmIHRlc3QgLW4gIiRSQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQyIgPiY1CiskYXNfZWNobyAiJFJDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQyI7IHRoZW4KKyAgYWNfY3RfUkM9JFJDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAid2luZHJlcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgd2luZHJlczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkMiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkM9IiRhY19jdF9SQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JDPSJ3aW5kcmVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JDPSRhY19jdl9wcm9nX2FjX2N0X1JDCitpZiB0ZXN0IC1uICIkYWNfY3RfUkMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JDIiA9IHg7IHRoZW4KKyAgICBSQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJDPSRhY19jdF9SQworICBmaQorZWxzZQorICBSQz0iJGFjX2N2X3Byb2dfUkMiCitmaQorCisKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0X1JDPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworY29tcGlsZXJfUkM9JENDCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQz15ZXMKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICA6CisKKworCitmaQorCitHQ0M9JGx0X3NhdmVfR0NDCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgR2VuZXJhbCBkZWZpbml0aW9ucy4gIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVXNlZCBieSBsaWJnY3J5cHQtY29uZmlnCitMSUJHQ1JZUFRfQ09ORklHX0xJQlM9Ii1sZ2NyeXB0IgorTElCR0NSWVBUX0NPTkZJR19DRkxBR1M9IiIKK0xJQkdDUllQVF9DT05GSUdfSE9TVD0iJGhvc3QiCisKKyMgRGVmaW5pdGlvbnMgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorYXZhaWxhYmxlX2NpcGhlcnM9ImFyY2ZvdXIgYmxvd2Zpc2ggY2FzdDUgZGVzIGFlcyB0d29maXNoIHNlcnBlbnQgcmZjMjI2OCBzZWVkIgorYXZhaWxhYmxlX2NpcGhlcnM9IiRhdmFpbGFibGVfY2lwaGVycyBjYW1lbGxpYSBpZGVhIHNhbHNhMjAgZ29zdDI4MTQ3IgorZW5hYmxlZF9jaXBoZXJzPSIiCisKKyMgRGVmaW5pdGlvbnMgZm9yIHB1YmxpYy1rZXkgY2lwaGVycy4KK2F2YWlsYWJsZV9wdWJrZXlfY2lwaGVycz0iZHNhIGVsZ2FtYWwgcnNhIGVjYyIKK2VuYWJsZWRfcHVia2V5X2NpcGhlcnM9IiIKKworIyBEZWZpbml0aW9ucyBmb3IgbWVzc2FnZSBkaWdlc3RzLgorYXZhaWxhYmxlX2RpZ2VzdHM9ImNyYyBnb3N0cjM0MTEtOTQgbWQ0IG1kNSBybWQxNjAgc2hhMSBzaGEyNTYiCithdmFpbGFibGVfZGlnZXN0c182ND0ic2hhNTEyIHRpZ2VyIHdoaXJscG9vbCBzdHJpYm9nIgorZW5hYmxlZF9kaWdlc3RzPSIiCisKKyMgRGVmaW5pdGlvbnMgZm9yIGtkZnMgKG9wdGlvbmFsIG9uZXMpCithdmFpbGFibGVfa2Rmcz0iczJrIHBrZGYyIgorYXZhaWxhYmxlX2tkZnNfNjQ9InNjcnlwdCIKK2VuYWJsZWRfa2Rmcz0iIgorCisjIERlZmluaXRpb25zIGZvciByYW5kb20gbW9kdWxlcy4KK2F2YWlsYWJsZV9yYW5kb21fbW9kdWxlcz0ibGludXggZWdkIHVuaXgiCithdXRvX3JhbmRvbV9tb2R1bGVzPSIkYXZhaWxhYmxlX3JhbmRvbV9tb2R1bGVzIgorCisjIFN1cHBvcnRlZCB0aHJlYWQgYmFja2VuZHMuCitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVM9IiIKKworIyBPdGhlciBkZWZpbml0aW9ucy4KK3ByaW50X2VnZF9ub3RpY2U9bm8KK2hhdmVfdzMyX3N5c3RlbT1ubworaGF2ZV93MzJjZV9zeXN0ZW09bm8KK2hhdmVfcHRocmVhZD1ubworCisKKyMgU2V0dXAgc29tZSBzdHVmZiBkZXBlbmRpbmcgb24gaG9zdC4KK2Nhc2UgIiR7aG9zdH0iIGluCisgICAgKi0qLW1pbmd3MzIqKQorICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgICBoYXZlX3czMl9zeXN0ZW09eWVzCisgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgICAqLW1pbmd3MzJjZSopCisgICAgICAgICAgICBoYXZlX3czMmNlX3N5c3RlbT15ZXMKKyAgICAgICAgICAgIGF2YWlsYWJsZV9yYW5kb21fbW9kdWxlcz0idzMyY2UiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgYXZhaWxhYmxlX3JhbmRvbV9tb2R1bGVzPSJ3MzIiCisgICAgICAgICAgICA7OworICAgICAgZXNhYworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfT05MWV84RE9UMyAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RSSVZFX0xFVFRFUlMgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ET1NJU0hfU1lTVEVNIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworCisgICAgaT84Ni1lbXgtb3MyIHwgaT84Ni0qLW9zMiplbXgpCisgICAgICAgICMgT1MvMiB3aXRoIHRoZSBFTVggZW52aXJvbm1lbnQKKyAgICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFJJVkVfTEVUVEVSUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0RPU0lTSF9TWVNURU0gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKworICAgIGk/ODYtKi1tc2Rvc2RqZ3BwKikKKyAgICAgICAgIyBET1Mgd2l0aCB0aGUgREpHUFAgZW52aXJvbm1lbnQKKyAgICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFJJVkVfTEVUVEVSUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0RPU0lTSF9TWVNURU0gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKworICAgICotKi1ocHV4KikKKyAgICAgICAgaWYgdGVzdCAteiAiJEdDQyIgOyB0aGVuCisgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUFlIC1EX0hQVVhfU09VUkNFIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICotZGVjLW9zZjQqKQorICAgICAgICBpZiB0ZXN0IC16ICIkR0NDIiA7IHRoZW4KKyAgICAgICAgICAgICMgU3VwcHJlc3MgYWxsIHdhcm5pbmdzCisgICAgICAgICAgICAjIHRvIGdldCByaWQgb2YgdGhlIHVuc2lnbmVkL3NpZ25lZCBjaGFyIG1pc21hdGNoIHdhcm5pbmdzLgorICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC13IgorICAgICAgICBmaQorICAgICAgICA7OworICAgIG02OGstYXRhcmktbWludCkKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgOzsKK2VzYWMKKworaWYgdGVzdCAiJGhhdmVfdzMyX3N5c3RlbSIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XMzJfU1lTVEVNIDEiID4+Y29uZmRlZnMuaAorCisgICBpZiB0ZXN0ICIkaGF2ZV93MzJjZV9zeXN0ZW0iID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVzMyQ0VfU1lTVEVNIDEiID4+Y29uZmRlZnMuaAorCisgICBmaQorZmkKKyBpZiB0ZXN0ICIkaGF2ZV93MzJfc3lzdGVtIiA9IHllczsgdGhlbgorICBIQVZFX1czMl9TWVNURU1fVFJVRT0KKyAgSEFWRV9XMzJfU1lTVEVNX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1czMl9TWVNURU1fVFJVRT0nIycKKyAgSEFWRV9XMzJfU1lTVEVNX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRoYXZlX3czMmNlX3N5c3RlbSIgPSB5ZXM7IHRoZW4KKyAgSEFWRV9XMzJDRV9TWVNURU1fVFJVRT0KKyAgSEFWRV9XMzJDRV9TWVNURU1fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfVzMyQ0VfU1lTVEVNX1RSVUU9JyMnCisgIEhBVkVfVzMyQ0VfU1lTVEVNX0ZBTFNFPQorZmkKKworCisKKworIyBBIHByaW50YWJsZSBPUyBOYW1lIGlzIHNvbWV0aW1lcyB1c2VmdWwuCitjYXNlICIke2hvc3R9IiBpbgorICAgICotKi1taW5ndzMyY2UqKQorICAgICAgICBQUklOVEFCTEVfT1NfTkFNRT0iVzMyQ0UiCisgICAgICAgIDs7CisKKyAgICAqLSotbWluZ3czMiopCisgICAgICAgIFBSSU5UQUJMRV9PU19OQU1FPSJXMzIiCisgICAgICAgIDs7CisKKyAgICBpPzg2LWVteC1vczIgfCBpPzg2LSotb3MyKmVteCApCisgICAgICAgIFBSSU5UQUJMRV9PU19OQU1FPSJPUy8yIgorICAgICAgICA7OworCisgICAgaT84Ni0qLW1zZG9zZGpncHAqKQorICAgICAgICBQUklOVEFCTEVfT1NfTkFNRT0iTVNET1MvREpHUFAiCisgICAgICAgIDs7CisKKyAgICAqLWxpbnV4KikKKyAgICAgICAgUFJJTlRBQkxFX09TX05BTUU9IkdOVS9MaW51eCIKKyAgICAgICAgOzsKKworICAgICopCisgICAgICAgIFBSSU5UQUJMRV9PU19OQU1FPWB1bmFtZSAtcyB8fCBlY2hvICJVbmtub3duImAKKyAgICAgICAgOzsKK2VzYWMKKworIworIyBGaWd1cmUgb3V0IHRoZSBuYW1lIG9mIHRoZSByYW5kb20gZGV2aWNlCisjCitjYXNlICIke2hvc3R9IiBpbgorICAgICotb3BlbmJzZCopCisgICAgICAgIE5BTUVfT0ZfREVWX1JBTkRPTT0iL2Rldi9zcmFuZG9tIgorICAgICAgICBOQU1FX09GX0RFVl9VUkFORE9NPSIvZGV2L3VyYW5kb20iCisgICAgICAgIDs7CisKKyAgICAqKQorICAgICAgICBOQU1FX09GX0RFVl9SQU5ET009Ii9kZXYvcmFuZG9tIgorICAgICAgICBOQU1FX09GX0RFVl9VUkFORE9NPSIvZGV2L3VyYW5kb20iCisgICAgICAgIDs7Citlc2FjCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVuZGlhbi1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbmRpYW5fY2hlY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbmRpYW5fY2hlY2s7IGVuZGlhbmNoZWNrPSRlbmFibGV2YWwKK2Vsc2UKKyAgZW5kaWFuY2hlY2s9eWVzCitmaQorCitpZiB0ZXN0IHgiJGVuZGlhbmNoZWNrIiA9IHh5ZXMgOyB0aGVuCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJCSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworaW50CittYWluICgpCit7CisjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiA8bGltaXRzLmg+IGRlZmluZXMgX0xJVFRMRV9FTkRJQU4gb3IgX0JJR19FTkRJQU4gKGUuZy4sIFNvbGFyaXMpLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBUcnkgdG8gZ3Vlc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworCSAgICBmaQorCSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKwkgICAgICBlbHNlCisJCSMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisJICAgICAgZmkKKwkgICAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisJICAgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCisJICAgICB1bmlvbgorCSAgICAgeworCSAgICAgICBsb25nIGludCBsOworCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworCSAgICAgfSB1OworCSAgICAgdS5sID0gMTsKKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluICMoCisgICB5ZXMpCisgICAgICRhc19lY2hvICIjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxIiA+PmNvbmZkZWZzLmgKKzs7ICMoCisgICBubykKKyAgICAgIDs7ICMoCisgICB1bml2ZXJzYWwpCisKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OyAjKAorICAgKikKKyAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gZW5kaWFubmVzcworIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiAiJExJTkVOTyIgNSA7OworIGVzYWMKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBESVNBQkxFRF9FTkRJQU5fQ0hFQ0sgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgc2hvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB1bnNpZ25lZCBzaG9ydC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCkpIiAiYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdW5zaWduZWRfc2hvcnQiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodW5zaWduZWQgc2hvcnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9VTlNJR05FRF9TSE9SVCAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0CitfQUNFT0YKKworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHVuc2lnbmVkIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHVuc2lnbmVkIGludC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSkiICJhY19jdl9zaXplb2ZfdW5zaWduZWRfaW50IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdW5zaWduZWRfaW50IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVuc2lnbmVkIGludCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfaW50IiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1VOU0lHTkVEX0lOVCAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludAorX0FDRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB1bnNpZ25lZCBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpKSIgImFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh1bnNpZ25lZCBsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmciID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9ORyAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmcKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZyBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZyBsb25nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpKSIgImFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmciID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HICRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nCitfQUNFT0YKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50cHRyX3QiICJhY19jdl90eXBlX3VpbnRwdHJfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgZm9yIGFjX3R5cGUgaW4gJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisJJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKHNpemVvZiAodm9pZCAqKSA8PSBzaXplb2YgKCRhY190eXBlKSldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSB1aW50cHRyX3QgJGFjX3R5cGUKK19BQ0VPRgorCisJICBhY190eXBlPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIHRlc3QgLXogIiRhY190eXBlIiAmJiBicmVhaworICAgICBkb25lCitmaQorCisKKworaWYgdGVzdCAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydCIgPSAiMCIgXAorICAgfHwgdGVzdCAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQiID0gIjAiIFwKKyAgIHx8IHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZyIgPSAiMCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEhtbW0sIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBzaXplcyAtIHVzaW5nIGRlZmF1bHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEhtbW0sIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBzaXplcyAtIHVzaW5nIGRlZmF1bHRzIiA+JjI7fTsKK2ZpCisKKyMgRG8gd2UgaGF2ZSBhbnkgNjQtYml0IGRhdGEgdHlwZXM/CitpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludCIgIT0gIjgiIFwKKyAgICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZyIgIT0gIjgiIFwKKyAgICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nIiAhPSAiOCIgXAorICAgJiYgdGVzdCAiJGFjX2N2X3NpemVvZl91aW50NjRfdCIgIT0gIjgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBObyA2NC1iaXQgdHlwZXMuICBEaXNhYmxpbmcgVElHRVIvMTkyLCBTQ1JZUFQsIFNIQS0zODQsIFwKKyBTSEEtNTEyIGFuZCBHT1NUIFIgMzQuMTEtMTIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogTm8gNjQtYml0IHR5cGVzLiAgRGlzYWJsaW5nIFRJR0VSLzE5MiwgU0NSWVBULCBTSEEtMzg0LCBcCisgU0hBLTUxMiBhbmQgR09TVCBSIDM0LjExLTEyIiA+JjI7fQorZWxzZQorICBhdmFpbGFibGVfZGlnZXN0cz0iJGF2YWlsYWJsZV9kaWdlc3RzICRhdmFpbGFibGVfZGlnZXN0c182NCIKKyAgYXZhaWxhYmxlX2tkZnM9IiRhdmFpbGFibGVfa2RmcyAkYXZhaWxhYmxlX2tkZnNfNjQiCitmaQorCisjIElmIG5vdCBzcGVjaWZpZWQgb3RoZXJ3aXNlLCBhbGwgYXZhaWxhYmxlIGFsZ29yaXRobXMgd2lsbCBiZQorIyBpbmNsdWRlZC4KK2RlZmF1bHRfY2lwaGVycz0iJGF2YWlsYWJsZV9jaXBoZXJzIgorZGVmYXVsdF9wdWJrZXlfY2lwaGVycz0iJGF2YWlsYWJsZV9wdWJrZXlfY2lwaGVycyIKK2RlZmF1bHRfZGlnZXN0cz0iJGF2YWlsYWJsZV9kaWdlc3RzIgorZGVmYXVsdF9rZGZzPSIkYXZhaWxhYmxlX2tkZnMiCisKKyMgU3Vic3RpdHV0aW9ucyB0byBzZXQgZ2VuZXJhdGVkIGZpbGVzIGluIGEgRW1hY3MgYnVmZmVyIHRvIHJlYWQtb25seS4KK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW49J0xvY2FsIFZhcmlhYmxlczonCisKK2VtYWNzX2xvY2FsX3ZhcnNfcmVhZF9vbmx5PSdidWZmZXItcmVhZC1vbmx5OiB0JworCitlbWFjc19sb2NhbF92YXJzX2VuZD0nRW5kOicKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBDb21tYW5kIGxpbmUgc3dpdGNoZXMuICMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZW5hYmxlLWNpcGhlcnMgc3dpdGNoLgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNpcGhlcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY2lwaGVycytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NpcGhlcnM7IGVuYWJsZWRfY2lwaGVycz1gZWNobyAkZW5hYmxldmFsIHwgdHIgJyw6JyAnICAnIHwgdHIgJ0EtWicgJ2EteidgCitlbHNlCisgIGVuYWJsZWRfY2lwaGVycz0iIgorZmkKKworaWYgdGVzdCAieCRlbmFibGVkX2NpcGhlcnMiID0gIngiIFwKKyAgIC1vICIkZW5hYmxlZF9jaXBoZXJzIiA9ICJ5ZXMiICBcCisgICAtbyAiJGVuYWJsZWRfY2lwaGVycyIgPSAibm8iOyB0aGVuCisgICBlbmFibGVkX2NpcGhlcnM9JGRlZmF1bHRfY2lwaGVycworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggc3ltbWV0cmljIGNpcGhlcnMgdG8gaW5jbHVkZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCBzeW1tZXRyaWMgY2lwaGVycyB0byBpbmNsdWRlLi4uICIgPiY2OyB9Citmb3IgY2lwaGVyIGluICRlbmFibGVkX2NpcGhlcnM7IGRvCisKK25hbWU9JGNpcGhlcgorbGlzdD0kYXZhaWxhYmxlX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworICAgIGlmIHRlc3QgIiRmb3VuZCIgPSAiMCI7IHRoZW4KKyAgICAgICBhc19mbl9lcnJvciAkPyAidW5zdXBwb3J0ZWQgY2lwaGVyIFwiJGNpcGhlclwiIHNwZWNpZmllZCIgIiRMSU5FTk8iIDUKKyAgICBmaQorZG9uZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVkX2NpcGhlcnMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVkX2NpcGhlcnMiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1wdWJrZXktY2lwaGVycyBzd2l0Y2guCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHVia2V5LWNpcGhlcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHVia2V5X2NpcGhlcnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wdWJrZXlfY2lwaGVyczsgZW5hYmxlZF9wdWJrZXlfY2lwaGVycz1gZWNobyAkZW5hYmxldmFsIHwgdHIgJyw6JyAnICAnIHwgdHIgJ0EtWicgJ2EteidgCitlbHNlCisgIGVuYWJsZWRfcHVia2V5X2NpcGhlcnM9IiIKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlZF9wdWJrZXlfY2lwaGVycyIgPSAieCIgXAorICAgLW8gIiRlbmFibGVkX3B1YmtleV9jaXBoZXJzIiA9ICJ5ZXMiICBcCisgICAtbyAiJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMiID0gIm5vIjsgdGhlbgorICAgZW5hYmxlZF9wdWJrZXlfY2lwaGVycz0kZGVmYXVsdF9wdWJrZXlfY2lwaGVycworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggcHVibGljLWtleSBjaXBoZXJzIHRvIGluY2x1ZGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggcHVibGljLWtleSBjaXBoZXJzIHRvIGluY2x1ZGUuLi4gIiA+JjY7IH0KK2ZvciBjaXBoZXIgaW4gJGVuYWJsZWRfcHVia2V5X2NpcGhlcnM7IGRvCisKK25hbWU9JGNpcGhlcgorbGlzdD0kYXZhaWxhYmxlX3B1YmtleV9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKKyAgICBpZiB0ZXN0ICIkZm91bmQiID0gIjAiOyB0aGVuCisgICAgICAgYXNfZm5fZXJyb3IgJD8gInVuc3VwcG9ydGVkIHB1YmxpYy1rZXkgY2lwaGVyIHNwZWNpZmllZCIgIiRMSU5FTk8iIDUKKyAgICBmaQorZG9uZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVkX3B1YmtleV9jaXBoZXJzIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlZF9wdWJrZXlfY2lwaGVycyIgPiY2OyB9CisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZW5hYmxlLWRpZ2VzdHMgc3dpdGNoLgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRpZ2VzdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGlnZXN0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RpZ2VzdHM7IGVuYWJsZWRfZGlnZXN0cz1gZWNobyAkZW5hYmxldmFsIHwgdHIgJyw6JyAnICAnIHwgdHIgJ0EtWicgJ2EteidgCitlbHNlCisgIGVuYWJsZWRfZGlnZXN0cz0iIgorZmkKKworaWYgdGVzdCAieCRlbmFibGVkX2RpZ2VzdHMiID0gIngiIFwKKyAgIC1vICIkZW5hYmxlZF9kaWdlc3RzIiA9ICJ5ZXMiICBcCisgICAtbyAiJGVuYWJsZWRfZGlnZXN0cyIgPSAibm8iOyB0aGVuCisgICBlbmFibGVkX2RpZ2VzdHM9JGRlZmF1bHRfZGlnZXN0cworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggbWVzc2FnZSBkaWdlc3RzIHRvIGluY2x1ZGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggbWVzc2FnZSBkaWdlc3RzIHRvIGluY2x1ZGUuLi4gIiA+JjY7IH0KK2ZvciBkaWdlc3QgaW4gJGVuYWJsZWRfZGlnZXN0czsgZG8KKworbmFtZT0kZGlnZXN0CitsaXN0PSRhdmFpbGFibGVfZGlnZXN0cworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCisgICAgaWYgdGVzdCAiJGZvdW5kIiA9ICIwIjsgdGhlbgorICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnN1cHBvcnRlZCBtZXNzYWdlIGRpZ2VzdCBzcGVjaWZpZWQiICIkTElORU5PIiA1CisgICAgZmkKK2RvbmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlZF9kaWdlc3RzIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlZF9kaWdlc3RzIiA+JjY7IH0KKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1lbmFibGUta2RmcyBzd2l0Y2guCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUta2RmcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9rZGZzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfa2RmczsgZW5hYmxlZF9rZGZzPWBlY2hvICRlbmFibGV2YWwgfCB0ciAnLDonICcgICcgfCB0ciAnQS1aJyAnYS16J2AKK2Vsc2UKKyAgZW5hYmxlZF9rZGZzPSIiCitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZWRfa2RmcyIgPSAieCIgXAorICAgLW8gIiRlbmFibGVkX2tkZnMiID0gInllcyIgIFwKKyAgIC1vICIkZW5hYmxlZF9rZGZzIiA9ICJubyI7IHRoZW4KKyAgIGVuYWJsZWRfa2Rmcz0kZGVmYXVsdF9rZGZzCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgdG8gaW5jbHVkZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgdG8gaW5jbHVkZS4uLiAiID4mNjsgfQorZm9yIGtkZiBpbiAkZW5hYmxlZF9rZGZzOyBkbworCituYW1lPSRrZGYKK2xpc3Q9JGF2YWlsYWJsZV9rZGZzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKKyAgICBpZiB0ZXN0ICIkZm91bmQiID0gIjAiOyB0aGVuCisgICAgICAgYXNfZm5fZXJyb3IgJD8gInVuc3VwcG9ydGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIHNwZWNpZmllZCIgIiRMSU5FTk8iIDUKKyAgICBmaQorZG9uZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVkX2tkZnMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVkX2tkZnMiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1yYW5kb20gc3dpdGNoLgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJhbmRvbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yYW5kb20rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yYW5kb207IHJhbmRvbT1gZWNobyAkZW5hYmxldmFsIHwgdHIgJ0EtWicgJ2EteidgCitmaQorCitpZiB0ZXN0ICJ4JHJhbmRvbSIgPSAieCIgLW8gIiRyYW5kb20iID0gInllcyIgLW8gIiRyYW5kb20iID0gIm5vIjsgdGhlbgorICAgIHJhbmRvbT1kZWZhdWx0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCByYW5kb20gbW9kdWxlIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCByYW5kb20gbW9kdWxlIHRvIHVzZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHJhbmRvbSIgIT0gImRlZmF1bHQiIC1hICIkcmFuZG9tIiAhPSAiYXV0byI7IHRoZW4KKworbmFtZT0kcmFuZG9tCitsaXN0PSRhdmFpbGFibGVfcmFuZG9tX21vZHVsZXMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworICAgIGlmIHRlc3QgIiRmb3VuZCIgPSAiMCI7IHRoZW4KKyAgICAgICBhc19mbl9lcnJvciAkPyAidW5zdXBwb3J0ZWQgcmFuZG9tIG1vZHVsZSBzcGVjaWZpZWQiICIkTElORU5PIiA1CisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHJhbmRvbSIgPiY1CiskYXNfZWNobyAiJHJhbmRvbSIgPiY2OyB9CisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1kZXYtcmFuZG9tIHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1c2Ugb2YgL2Rldi9yYW5kb20gaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIC9kZXYvcmFuZG9tIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRldi1yYW5kb20gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGV2X3JhbmRvbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Rldl9yYW5kb207IHRyeV9kZXZfcmFuZG9tPSRlbmFibGV2YWwKK2Vsc2UKKyAgdHJ5X2Rldl9yYW5kb209eWVzCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRyeV9kZXZfcmFuZG9tIiA+JjUKKyRhc19lY2hvICIkdHJ5X2Rldl9yYW5kb20iID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLXdpdGgtZWdkLXNvY2tldCBzd2l0Y2guCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWdkLXNvY2tldCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZWdkX3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZWdkX3NvY2tldDsgZWdkX3NvY2tldF9uYW1lPSIkd2l0aHZhbCIKK2Vsc2UKKyAgZWdkX3NvY2tldF9uYW1lPSIiCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRUdEX1NPQ0tFVF9OQU1FICIkZWdkX3NvY2tldF9uYW1lIgorX0FDRU9GCisKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1lbmFibGUtcmFuZG9tLWRhZW1vbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBleHBlcmltZW50YWwgcmFuZG9tIGRhZW1vbiBpcyByZXF1ZXN0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgZXhwZXJpbWVudGFsIHJhbmRvbSBkYWVtb24gaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmFuZG9tLWRhZW1vbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yYW5kb21fZGFlbW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmFuZG9tX2RhZW1vbjsgdXNlX3JhbmRvbV9kYWVtb249JGVuYWJsZXZhbAorZWxzZQorICB1c2VfcmFuZG9tX2RhZW1vbj1ubworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR1c2VfcmFuZG9tX2RhZW1vbiIgPiY1CiskYXNfZWNobyAiJHVzZV9yYW5kb21fZGFlbW9uIiA+JjY7IH0KK2lmIHRlc3QgeCR1c2VfcmFuZG9tX2RhZW1vbiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9SQU5ET01fREFFTU9OIDEiID4+Y29uZmRlZnMuaAorCitmaQorIGlmIHRlc3QgeCR1c2VfcmFuZG9tX2RhZW1vbiA9IHh5ZXM7IHRoZW4KKyAgVVNFX1JBTkRPTV9EQUVNT05fVFJVRT0KKyAgVVNFX1JBTkRPTV9EQUVNT05fRkFMU0U9JyMnCitlbHNlCisgIFVTRV9SQU5ET01fREFFTU9OX1RSVUU9JyMnCisgIFVTRV9SQU5ET01fREFFTU9OX0ZBTFNFPQorZmkKKworCisKKyMgSW1wbGVtZW50YXRpb24gb2YgLS1kaXNhYmxlLWFzbS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBNUEkgYXNzZW1ibGVyIG1vZHVsZXMgYXJlIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE1QSSBhc3NlbWJsZXIgbW9kdWxlcyBhcmUgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXNtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FzbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FzbTsgdHJ5X2FzbV9tb2R1bGVzPSRlbmFibGV2YWwKK2Vsc2UKKyAgdHJ5X2FzbV9tb2R1bGVzPXllcworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR0cnlfYXNtX21vZHVsZXMiID4mNQorJGFzX2VjaG8gIiR0cnlfYXNtX21vZHVsZXMiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1tLWd1YXJkIHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtZW1vcnkgZ3VhcmQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWVtb3J5IGd1YXJkIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW0tZ3VhcmQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbV9ndWFyZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21fZ3VhcmQ7IHVzZV9tX2d1YXJkPSRlbmFibGV2YWwKK2Vsc2UKKyAgdXNlX21fZ3VhcmQ9bm8KK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdXNlX21fZ3VhcmQiID4mNQorJGFzX2VjaG8gIiR1c2VfbV9ndWFyZCIgPiY2OyB9CitpZiB0ZXN0ICIkdXNlX21fZ3VhcmQiID0geWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBNX0dVQVJEIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1sYXJnZS1kYXRhLXRlc3RzIHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBydW4gbGFyZ2UgZGF0YSB0ZXN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHJ1biBsYXJnZSBkYXRhIHRlc3RzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2UtZGF0YS10ZXN0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sYXJnZV9kYXRhX3Rlc3RzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGFyZ2VfZGF0YV90ZXN0czsgbGFyZ2VfZGF0YV90ZXN0cz0kZW5hYmxldmFsCitlbHNlCisgIGxhcmdlX2RhdGFfdGVzdHM9bm8KK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGFyZ2VfZGF0YV90ZXN0cyIgPiY1CiskYXNfZWNobyAiJGxhcmdlX2RhdGFfdGVzdHMiID4mNjsgfQorUlVOX0xBUkdFX0RBVEFfVEVTVFM9JGxhcmdlX2RhdGFfdGVzdHMKKworCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0td2l0aC1jYXBhYmlsaXRpZXMgc3dpdGNoLgorIyBDaGVjayB3aGV0aGVyIHdlIHdhbnQgdG8gdXNlIExpbnV4IGNhcGFiaWxpdGllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHVzZSBvZiBjYXBhYmlsaXRpZXMgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIGNhcGFiaWxpdGllcyBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYXBhYmlsaXRpZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NhcGFiaWxpdGllcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2FwYWJpbGl0aWVzOyB1c2VfY2FwYWJpbGl0aWVzPSIkd2l0aHZhbCIKK2Vsc2UKKyAgdXNlX2NhcGFiaWxpdGllcz1ubworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR1c2VfY2FwYWJpbGl0aWVzIiA+JjUKKyRhc19lY2hvICIkdXNlX2NhcGFiaWxpdGllcyIgPiY2OyB9CisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZW5hYmxlLWhtYWMtYmluYXJ5LWNoZWNrLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgSE1BQyBiaW5hcnkgY2hlY2sgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBITUFDIGJpbmFyeSBjaGVjayBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1obWFjLWJpbmFyeS1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9obWFjX2JpbmFyeV9jaGVjaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2htYWNfYmluYXJ5X2NoZWNrOyB1c2VfaG1hY19iaW5hcnlfY2hlY2s9JGVuYWJsZXZhbAorZWxzZQorICB1c2VfaG1hY19iaW5hcnlfY2hlY2s9bm8KK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdXNlX2htYWNfYmluYXJ5X2NoZWNrIiA+JjUKKyRhc19lY2hvICIkdXNlX2htYWNfYmluYXJ5X2NoZWNrIiA+JjY7IH0KK2lmIHRlc3QgIiR1c2VfaG1hY19iaW5hcnlfY2hlY2siID0geWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfSE1BQ19CSU5BUllfQ0hFQ0sgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLXBhZGxvY2stc3VwcG9ydCBzd2l0Y2guCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcGFkbG9jayBzdXBwb3J0IGlzIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHBhZGxvY2sgc3VwcG9ydCBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wYWRsb2NrLXN1cHBvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGFkbG9ja19zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGFkbG9ja19zdXBwb3J0OyBwYWRsb2Nrc3VwcG9ydD0kZW5hYmxldmFsCitlbHNlCisgIHBhZGxvY2tzdXBwb3J0PXllcworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwYWRsb2Nrc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiJHBhZGxvY2tzdXBwb3J0IiA+JjY7IH0KKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLWFlc25pLXN1cHBvcnQgc3dpdGNoLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEFFU05JIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQUVTTkkgc3VwcG9ydCBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZXNuaS1zdXBwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Flc25pX3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hZXNuaV9zdXBwb3J0OyBhZXNuaXN1cHBvcnQ9JGVuYWJsZXZhbAorZWxzZQorICBhZXNuaXN1cHBvcnQ9eWVzCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFlc25pc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiJGFlc25pc3VwcG9ydCIgPiY2OyB9CisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1wY2xtdWwtc3VwcG9ydCBzd2l0Y2guCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgUENMTVVMIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgUENMTVVMIHN1cHBvcnQgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGNsbXVsLXN1cHBvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGNsbXVsX3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wY2xtdWxfc3VwcG9ydDsgcGNsbXVsc3VwcG9ydD0kZW5hYmxldmFsCitlbHNlCisgIHBjbG11bHN1cHBvcnQ9eWVzCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHBjbG11bHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIiRwY2xtdWxzdXBwb3J0IiA+JjY7IH0KKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLWRybmctc3VwcG9ydCBzd2l0Y2guCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgRFJORyBzdXBwb3J0IGlzIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIERSTkcgc3VwcG9ydCBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kcm5nLXN1cHBvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZHJuZ19zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZHJuZ19zdXBwb3J0OyBkcm5nc3VwcG9ydD0kZW5hYmxldmFsCitlbHNlCisgIGRybmdzdXBwb3J0PXllcworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkcm5nc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiJGRybmdzdXBwb3J0IiA+JjY7IH0KKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLWF2eC1zdXBwb3J0IHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBBVlggc3VwcG9ydCBpcyByZXF1ZXN0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBBVlggc3VwcG9ydCBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hdngtc3VwcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hdnhfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2F2eF9zdXBwb3J0OyBhdnhzdXBwb3J0PSRlbmFibGV2YWwKK2Vsc2UKKyAgYXZ4c3VwcG9ydD15ZXMKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXZ4c3VwcG9ydCIgPiY1CiskYXNfZWNobyAiJGF2eHN1cHBvcnQiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWRpc2FibGUtYXZ4Mi1zdXBwb3J0IHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBBVlgyIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQVZYMiBzdXBwb3J0IGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWF2eDItc3VwcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hdngyX3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hdngyX3N1cHBvcnQ7IGF2eDJzdXBwb3J0PSRlbmFibGV2YWwKK2Vsc2UKKyAgYXZ4MnN1cHBvcnQ9eWVzCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF2eDJzdXBwb3J0IiA+JjUKKyRhc19lY2hvICIkYXZ4MnN1cHBvcnQiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWRpc2FibGUtbmVvbi1zdXBwb3J0IHN3aXRjaC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBORU9OIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkVPTiBzdXBwb3J0IGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5lb24tc3VwcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9uZW9uX3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9uZW9uX3N1cHBvcnQ7IG5lb25zdXBwb3J0PSRlbmFibGV2YWwKK2Vsc2UKKyAgbmVvbnN1cHBvcnQ9eWVzCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5lb25zdXBwb3J0IiA+JjUKKyRhc19lY2hvICIkbmVvbnN1cHBvcnQiID4mNjsgfQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWRpc2FibGUtTy1mbGFnLW11bmdpbmcgc3dpdGNoLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgLU8gZmxhZyBtdW5naW5nIGlzIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgLU8gZmxhZyBtdW5naW5nIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLU8tZmxhZy1tdW5naW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX09fZmxhZ19tdW5naW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfT19mbGFnX211bmdpbmc7IGVuYWJsZV9vX2ZsYWdfbXVuZ2luZz0kZW5hYmxldmFsCitlbHNlCisgIGVuYWJsZV9vX2ZsYWdfbXVuZ2luZz15ZXMKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX29fZmxhZ19tdW5naW5nIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX29fZmxhZ19tdW5naW5nIiA+JjY7IH0KKyBpZiB0ZXN0ICIkZW5hYmxlX29fZmxhZ19tdW5naW5nIiA9ICJ5ZXMiOyB0aGVuCisgIEVOQUJMRV9PX0ZMQUdfTVVOR0lOR19UUlVFPQorICBFTkFCTEVfT19GTEFHX01VTkdJTkdfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9PX0ZMQUdfTVVOR0lOR19UUlVFPScjJworICBFTkFCTEVfT19GTEFHX01VTkdJTkdfRkFMU0U9CitmaQorCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1hbWQ2NC1hcy1mZWF0dXJlLWRldGVjdGlvbiBzd2l0Y2guCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIEFNRDY0IGFzKDEpIGZlYXR1cmUgZGV0ZWN0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIEFNRDY0IGFzKDEpIGZlYXR1cmUgZGV0ZWN0aW9uLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYW1kNjQtYXMtZmVhdHVyZS1kZXRlY3Rpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYW1kNjRfYXNfZmVhdHVyZV9kZXRlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hbWQ2NF9hc19mZWF0dXJlX2RldGVjdGlvbjsgYW1kNjRfYXNfZmVhdHVyZV9kZXRlY3Rpb249JGVuYWJsZXZhbAorZWxzZQorICBhbWQ2NF9hc19mZWF0dXJlX2RldGVjdGlvbj15ZXMKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1kNjRfYXNfZmVhdHVyZV9kZXRlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRhbWQ2NF9hc19mZWF0dXJlX2RldGVjdGlvbiIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBSSU5UQUJMRV9PU19OQU1FICIkUFJJTlRBQkxFX09TX05BTUUiCitfQUNFT0YKKworCisjIEZvciBzb21lIHN5c3RlbXMgd2Uga25vdyB0aGF0IHdlIGhhdmUgbGRfdmVyc2lvbiBzY3JpcHRzLgorIyBVc2UgaXQgdGhlbiBhcyBkZWZhdWx0LgoraGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD1ubworY2FzZSAiJHtob3N0fSIgaW4KKyAgICAqLSotbGludXgqKQorCWhhdmVfbGRfdmVyc2lvbl9zY3JpcHQ9eWVzCisgICAgICAgIDs7CisgICAgKi0qLWdudSopCisJaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXMKKyAgICAgICAgOzsKK2VzYWMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sZC12ZXJzaW9uLXNjcmlwdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sZF92ZXJzaW9uX3NjcmlwdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xkX3ZlcnNpb25fc2NyaXB0OyBoYXZlX2xkX3ZlcnNpb25fc2NyaXB0PSRlbmFibGV2YWwKK2Vsc2UKKyAgIDoKK2ZpCisKKyBpZiB0ZXN0ICIkaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdCIgPSAieWVzIjsgdGhlbgorICBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUU9CisgIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFRfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFRfVFJVRT0nIycKKyAgSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRT0KK2ZpCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5BTUVfT0ZfREVWX1JBTkRPTSAiJE5BTUVfT0ZfREVWX1JBTkRPTSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkFNRV9PRl9ERVZfVVJBTkRPTSAiJE5BTUVfT0ZfREVWX1VSQU5ET00iCitfQUNFT0YKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBncGctZXJyb3IgaXMgcmVxdWlyZWQuCisjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJncGdfZXJyb3JfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJncGdfZXJyb3JfcHJlZml4OyBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiCitlbHNlCisgIGdwZ19lcnJvcl9jb25maWdfcHJlZml4PSIiCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ncGctZXJyb3ItcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ncGdfZXJyb3JfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ncGdfZXJyb3JfcHJlZml4OyBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiCitlbHNlCisgIGdwZ19lcnJvcl9jb25maWdfcHJlZml4PSIiCitmaQorCisKKyAgaWYgdGVzdCB4JGdwZ19lcnJvcl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisgICAgIGlmIHRlc3QgeCR7R1BHX0VSUk9SX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisgICAgICAgIEdQR19FUlJPUl9DT05GSUc9JGdwZ19lcnJvcl9jb25maWdfcHJlZml4L2Jpbi9ncGctZXJyb3ItY29uZmlnCisgICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z3BnLWVycm9yLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ncGctZXJyb3ItY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUEdfRVJST1JfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR1BHX0VSUk9SX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HUEdfRVJST1JfQ09ORklHPSIkR1BHX0VSUk9SX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfR1BHX0VSUk9SX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0dQR19FUlJPUl9DT05GSUc9JGFjX2N2X3BhdGhfR1BHX0VSUk9SX0NPTkZJRworaWYgdGVzdCAtbiAiJEdQR19FUlJPUl9DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR1BHX0VSUk9SX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJEdQR19FUlJPUl9DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dQR19FUlJPUl9DT05GSUciOyB0aGVuCisgIGFjX3B0X0dQR19FUlJPUl9DT05GSUc9JEdQR19FUlJPUl9DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJncGctZXJyb3ItY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBncGctZXJyb3ItY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9HUEdfRVJST1JfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfR1BHX0VSUk9SX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9HUEdfRVJST1JfQ09ORklHPSIkYWNfcHRfR1BHX0VSUk9SX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfR1BHX0VSUk9SX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0dQR19FUlJPUl9DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfR1BHX0VSUk9SX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X0dQR19FUlJPUl9DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfR1BHX0VSUk9SX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0dQR19FUlJPUl9DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9HUEdfRVJST1JfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBHUEdfRVJST1JfQ09ORklHPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBHUEdfRVJST1JfQ09ORklHPSRhY19wdF9HUEdfRVJST1JfQ09ORklHCisgIGZpCitlbHNlCisgIEdQR19FUlJPUl9DT05GSUc9IiRhY19jdl9wYXRoX0dQR19FUlJPUl9DT05GSUciCitmaQorCisgIG1pbl9ncGdfZXJyb3JfdmVyc2lvbj0iJE5FRURfR1BHX0VSUk9SX1ZFUlNJT04iCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdQRyBFcnJvciAtIHZlcnNpb24gPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR1BHIEVycm9yIC0gdmVyc2lvbiA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uLi4uICIgPiY2OyB9CisgIG9rPW5vCisgIGlmIHRlc3QgIiRHUEdfRVJST1JfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkvXDEvJ2AKKyAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpL1wyLydgCisgICAgZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKyAgICBtYWpvcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkuKi9cMS8nYAorICAgIG1pbm9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wyLydgCisgICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCisgICAgICAgIG9rPXllcworICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1nZSAiJHJlcV9taW5vciI7IHRoZW4KKyAgICAgICAgICAgICAgIG9rPXllcworICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgIEdQR19FUlJPUl9DRkxBR1M9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisgICAgR1BHX0VSUk9SX0xJQlM9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1saWJzYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pIiA+JjUKKyRhc19lY2hvICJ5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pIiA+JjY7IH0KKyAgICA6CisgICAgaWYgdGVzdCB4IiRob3N0IiAhPSB4IDsgdGhlbgorICAgICAgZ3BnX2Vycm9yX2NvbmZpZ19ob3N0PWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorKioqCisqKiogVGhlIGNvbmZpZyBzY3JpcHQgJEdQR19FUlJPUl9DT05GSUcgd2FzCisqKiogYnVpbHQgZm9yICRncGdfZXJyb3JfY29uZmlnX2hvc3QgYW5kIHRodXMgbWF5IG5vdCBtYXRjaCB0aGUKKyoqKiB1c2VkIGhvc3QgJGhvc3QuCisqKiogWW91IG1heSB3YW50IHRvIHVzZSB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtZ3BnLWVycm9yLXByZWZpeAorKioqIHRvIHNwZWNpZnkgYSBtYXRjaGluZyBjb25maWcgc2NyaXB0LgorKioqIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CisqKioKKyoqKiBUaGUgY29uZmlnIHNjcmlwdCAkR1BHX0VSUk9SX0NPTkZJRyB3YXMKKyoqKiBidWlsdCBmb3IgJGdwZ19lcnJvcl9jb25maWdfaG9zdCBhbmQgdGh1cyBtYXkgbm90IG1hdGNoIHRoZQorKioqIHVzZWQgaG9zdCAkaG9zdC4KKyoqKiBZb3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1ncGctZXJyb3ItcHJlZml4CisqKiogdG8gc3BlY2lmeSBhIG1hdGNoaW5nIGNvbmZpZyBzY3JpcHQuCisqKioiID4mMjt9CisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICBHUEdfRVJST1JfQ0ZMQUdTPSIiCisgICAgR1BHX0VSUk9SX0xJQlM9IiIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA6CisgIGZpCisKKworCitpZiB0ZXN0ICJ4JEdQR19FUlJPUl9MSUJTIiA9ICJ4IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAibGliZ3BnLWVycm9yIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBTZWUgZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ3BnLWVycm9yLyAuIiAiJExJTkVOTyIgNQorZmkKKworCiskYXNfZWNobyAiI2RlZmluZSBHUEdfRVJSX1NPVVJDRV9ERUZBVUxUIEdQR19FUlJfU09VUkNFX0dDUllQVCIgPj5jb25mZGVmcy5oCisKKworIworIyBDaGVjayB3aGV0aGVyIHRoZSBHTlUgUHRoIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiAgV2UgcmVxdWlyZSB0aGlzCisjIHRvIGJ1aWxkIHRoZSBvcHRpb25hbCBnY3J5cHRybmQgcHJvZ3JhbS4KKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wdGgtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wdGhfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wdGhfcHJlZml4OyBwdGhfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiCitlbHNlCisgIHB0aF9jb25maWdfcHJlZml4PSIiCitmaQorCitpZiB0ZXN0IHgkcHRoX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKyAgIFBUSF9DT05GSUc9IiRwdGhfY29uZmlnX3ByZWZpeC9iaW4vcHRoLWNvbmZpZyIKK2ZpCitpZiB0ZXN0ICIkdXNlX3JhbmRvbV9kYWVtb24iID0gInllcyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGgtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwdGgtY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QVEhfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFRIX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QVEhfQ09ORklHPSIkUFRIX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFRIX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QVEhfQ09ORklHIiAmJiBhY19jdl9wYXRoX1BUSF9DT05GSUc9Im5vIgorICA7OworZXNhYworZmkKK1BUSF9DT05GSUc9JGFjX2N2X3BhdGhfUFRIX0NPTkZJRworaWYgdGVzdCAtbiAiJFBUSF9DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFRIX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBUSF9DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBpZiB0ZXN0ICIkUFRIX0NPTkZJRyIgPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorKioqCisqKiogVG8gYnVpbGQgdGhlIExpYmdjcnlwdCdzIHJhbmRvbSBudW1iZXIgZGFlbW9uCisqKiogd2UgbmVlZCB0aGUgc3VwcG9ydCBvZiB0aGUgR05VIFBvcnRhYmxlIFRocmVhZHMgTGlicmFyeS4KKyoqKiBEb3dubG9hZCBpdCBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL2dudS9wdGgvCisqKiogT24gYSBEZWJpYW4gR05VL0xpbnV4IHN5c3RlbSB5b3UgbWlnaHQgd2FudCB0byB0cnkKKyoqKiAgIGFwdC1nZXQgaW5zdGFsbCBsaWJwdGgtZGV2CisqKioiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzoKKyoqKgorKioqIFRvIGJ1aWxkIHRoZSBMaWJnY3J5cHQncyByYW5kb20gbnVtYmVyIGRhZW1vbgorKioqIHdlIG5lZWQgdGhlIHN1cHBvcnQgb2YgdGhlIEdOVSBQb3J0YWJsZSBUaHJlYWRzIExpYnJhcnkuCisqKiogRG93bmxvYWQgaXQgZnJvbSBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvcHRoLworKioqIE9uIGEgRGViaWFuIEdOVS9MaW51eCBzeXN0ZW0geW91IG1pZ2h0IHdhbnQgdG8gdHJ5CisqKiogICBhcHQtZ2V0IGluc3RhbGwgbGlicHRoLWRldgorKioqIiA+JjI7fQorICBlbHNlCisKKyAgICBfcHRoX3ZlcnNpb249YCRQVEhfQ09ORklHIC0tdmVyc2lvbiB8IGF3ayAnTlI9PTEge3ByaW50ICQzfSdgCisgICAgX3JlcV92ZXJzaW9uPSIxLjMuNyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBUSCAtIHZlcnNpb24gPj0gJF9yZXFfdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUFRIIC0gdmVyc2lvbiA+PSAkX3JlcV92ZXJzaW9uLi4uICIgPiY2OyB9CisgICAgZm9yIF92YXIgaW4gX3B0aF92ZXJzaW9uIF9yZXFfdmVyc2lvbjsgZG8KKyAgICAgICAgZXZhbCAiX3ZhbD1cIlwkJHtfdmFyfVwiIgorICAgICAgICBfbWFqb3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwoW2FiLl1cKVwoWzAtOV0qXCkvXDEvJ2AKKyAgICAgICAgX21pbm9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXClcKFthYi5dXClcKFswLTldKlwpL1wyLydgCisgICAgICAgIF9ydHlwZT1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpXChbYWIuXVwpXChbMC05XSpcKS9cMy8nYAorICAgICAgICBfbWljcm89YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwoW2FiLl1cKVwoWzAtOV0qXCkvXDQvJ2AKKyAgICAgICAgY2FzZSAkX3J0eXBlIGluCisgICAgICAgICAgICAiYSIgKSBfcnR5cGU9MCA7OworICAgICAgICAgICAgImIiICkgX3J0eXBlPTEgOzsKKyAgICAgICAgICAgICIuIiApIF9ydHlwZT0yIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgX2hleD1gZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVkJTAyZCUxZCUwMmQiLCBtYWpvciwgbWlub3IsIHJ0eXBlLCBtaWNybyk7IH0nIFwKKyAgICAgICAgICAgICAgIm1ham9yPSRfbWFqb3IiICJtaW5vcj0kX21pbm9yIiAicnR5cGU9JF9ydHlwZSIgIm1pY3JvPSRfbWljcm8iYAorICAgICAgICBldmFsICIke192YXJ9X2hleD1cIlwkX2hleFwiIgorICAgIGRvbmUKKyAgICBoYXZlX3B0aD1ubworICAgIGlmIHRlc3QgIi4kX3B0aF92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIuJF9yZXFfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgJF9wdGhfdmVyc2lvbl9oZXggLWdlICRfcmVxX3ZlcnNpb25faGV4OyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZV9wdGg9eWVzCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmUuLi4gIiA+JjY7IH0KKyAgICAgICBpZiAke2dudXBnX2N2X3B0aF9pc19zYW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2NmbGFncz0kQ0ZMQUdTCisgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGRmbGFncz0kTERGTEFHUworICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xpYnM9JExJQlMKKyAgICAgICAgIENGTEFHUz0iJENGTEFHUyBgJFBUSF9DT05GSUcgLS1jZmxhZ3NgIgorICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgYCRQVEhfQ09ORklHIC0tbGRmbGFnc2AiCisgICAgICAgICBMSUJTPSIkTElCUyBgJFBUSF9DT05GSUcgLS1saWJzYCIKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGguaD4KKworaW50CittYWluICgpCit7CisgcHRoX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ251cGdfY3ZfcHRoX2lzX3NhbmU9eWVzCitlbHNlCisgIGdudXBnX2N2X3B0aF9pc19zYW5lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIENGTEFHUz0kX2dudXBnX3B0aF9zYXZlX2NmbGFncworICAgICAgICAgTERGTEFHUz0kX2dudXBnX3B0aF9zYXZlX2xkZmxhZ3MKKyAgICAgICAgIExJQlM9JF9nbnVwZ19wdGhfc2F2ZV9saWJzCisKK2ZpCisKKyAgICAgICBpZiB0ZXN0ICRnbnVwZ19jdl9wdGhfaXNfc2FuZSAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICBoYXZlX3B0aD1ubworICAgICAgIGZpCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbnVwZ19jdl9wdGhfaXNfc2FuZSIgPiY1CiskYXNfZWNobyAiJGdudXBnX2N2X3B0aF9pc19zYW5lIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKworICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCisgICAgICAgUFRIX0NGTEFHUz1gJFBUSF9DT05GSUcgLS1jZmxhZ3NgCisgICAgICAgUFRIX0xJQlM9YCRQVEhfQ09ORklHIC0tbGRmbGFnc2AKKyAgICAgICBQVEhfTElCUz0iJFBUSF9MSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfR05VX1BUSCAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisgIGZpCitmaQorCisKKworCisjCisjIFNlZSB3aGljaCB0aHJlYWQgc3lzdGVtIHdlIGhhdmUKKyMKKyMgV2luZG93cyBoYXMgYWx3YXlzIHRocmVhZCBzdXBwb3J0OyB0aHVzIHdlIGRvbid0IGJvdGhlciB0byB0ZXN0IGZvcgorIyBpdCBhcyBpdCBtYXkgbGVhZCB0byBmYWxzZSByZXN1bHRzIHdoZW4gY3Jvc3MgYnVpbGRpbmcuCitpZiB0ZXN0ICIkaGF2ZV93MzJfc3lzdGVtIiA9IHllczsgdGhlbgorICAkYXNfZWNobyAiI2RlZmluZSBVU0VfV0lORE9XU19USFJFQURTIDEiID4+Y29uZmRlZnMuaAorCisgIExJQlRIUkVBRD0KKyAgTFRMSUJUSFJFQUQ9CisgIExJQk1VTFRJVEhSRUFEPQorICBMVExJQk1VTFRJVEhSRUFEPQorICBUSFJFQURMSUJfQ1BQRkxBR1M9IiIKKworCisKKworZWxzZQorCisKKworCisgICAgVEhSRUFETElCX0NQUEZMQUdTPSIiCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRocmVhZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGhyZWFkcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3RocmVhZHM7IGdsX3VzZV90aHJlYWRzPSRlbmFibGV2YWwKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGdsX3VzZV90aHJlYWRzX2RlZmF1bHQiOyB0aGVuCisgICAgICAgZ2xfdXNlX3RocmVhZHM9IiRnbF91c2VfdGhyZWFkc19kZWZhdWx0IgorICAgICBlbHNlCisgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc2YqKSBnbF91c2VfdGhyZWFkcz1ubyA7OworICAgICAgICAgY3lnd2luKikKKyAgICAgICAgICAgICAgIGNhc2UgYHVuYW1lIC1yYCBpbgorICAgICAgICAgICAgICAgICAxLlswLTVdLiopIGdsX3VzZV90aHJlYWRzPW5vIDs7CisgICAgICAgICAgICAgICAgICopICAgICAgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICA7OworICAgICAgICAgKikgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgZXNhYworICAgICBmaQorCitmaQorCisgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgIyBGb3IgdXNpbmcgPHB0aHJlYWQuaD46CisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBvc2YqKQorICAgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLURfUkVFTlRSQU5UIHNvIHRoYXQgaXQKKyAgICAgICAgIyBncm9rcyA8cHRocmVhZC5oPi4gY2MgYWxzbyB1bmRlcnN0YW5kcyB0aGUgZmxhZyAtcHRocmVhZCwgYnV0CisgICAgICAgICMgd2UgZG9uJ3QgdXNlIGl0IGJlY2F1c2UgMS4gZ2NjLTIuOTUgZG9lc24ndCB1bmRlcnN0YW5kIC1wdGhyZWFkLAorICAgICAgICAjIDIuIHB1dHRpbmcgYSBmbGFnIGludG8gQ1BQRkxBR1MgdGhhdCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBsaW5rZXIKKyAgICAgICAgIyBjYXVzZXMgdGhlIEFDX0xJTktfSUZFTFNFIHRlc3QgYmVsb3cgdG8gc3VjY2VlZCB1bmV4cGVjdGVkbHksCisgICAgICAgICMgbGVhZGluZyB0byB3cm9uZyB2YWx1ZXMgb2YgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRC4KKyAgICAgICAgVEhSRUFETElCX0NQUEZMQUdTPSIkVEhSRUFETElCX0NQUEZMQUdTIC1EX1JFRU5UUkFOVCIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBTb21lIHN5c3RlbXMgb3B0aW1pemUgZm9yIHNpbmdsZS10aHJlYWRlZCBwcm9ncmFtcyBieSBkZWZhdWx0LCBhbmQKKyAgICAjIG5lZWQgc3BlY2lhbCBmbGFncyB0byBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAjIGRlZmluaXRpb24gb2YgJ2Vycm5vJyBpbiA8ZXJybm8uaD4uCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBhaXgqIHwgZnJlZWJzZCopCisgICAgICAgICAgIFRIUkVBRExJQl9DUFBGTEFHUz0iJFRIUkVBRExJQl9DUFBGTEFHUyAtRF9USFJFQURfU0FGRSIKKyAgICAgICAgICAgOzsKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICAgICBUSFJFQURMSUJfQ1BQRkxBR1M9IiRUSFJFQURMSUJfQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorICAgICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCB4IiRUSFJFQURMSUJfQ1BQRkxBR1MiICE9IHggOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRUSFJFQURMSUJfQ1BQRkxBR1MiCisgIGZpCisKKworCisKKworCisgIGdsX3RocmVhZHNfYXBpPW5vbmUKKyAgTElCVEhSRUFEPQorICBMVExJQlRIUkVBRD0KKyAgTElCTVVMVElUSFJFQUQ9CisgIExUTElCTVVMVElUSFJFQUQ9CisgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgIT0gbm87IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGltcG9ydGVkIHN5bWJvbHMgY2FuIGJlIGRlY2xhcmVkIHdlYWsiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpbXBvcnRlZCBzeW1ib2xzIGNhbiBiZSBkZWNsYXJlZCB3ZWFrLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2hhdmVfd2Vhays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdsX2N2X2hhdmVfd2Vhaz1ubworICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitleHRlcm4gdm9pZCB4eXp6eSAoKTsKKyNwcmFnbWEgd2VhayB4eXp6eQoraW50CittYWluICgpCit7Cit4eXp6eSgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hhdmVfd2Vhaz1tYXliZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV93ZWFrID0gbWF5YmU7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fRUxGX18KKyAgICAgICAgICAgICAgIEV4dGVuc2libGUgTGlua2luZyBGb3JtYXQKKyAgICAgICAgICAgICAgICNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJFeHRlbnNpYmxlIExpbmtpbmcgRm9ybWF0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIHllcyIKK2Vsc2UKKyAgZ2xfY3ZfaGF2ZV93ZWFrPSJndWVzc2luZyBubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjcHJhZ21hIHdlYWsgZnB1dHMKK2ludCBtYWluICgpCit7CisgIHJldHVybiAoZnB1dHMgPT0gTlVMTCk7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9oYXZlX3dlYWs9eWVzCitlbHNlCisgIGdsX2N2X2hhdmVfd2Vhaz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oYXZlX3dlYWsiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9oYXZlX3dlYWsiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLXB0aHJlYWQgb3IgLURfUkVFTlRSQU5UIHNvIHRoYXQKKyAgICAgICMgaXQgZ3Jva3MgPHB0aHJlYWQuaD4uIEl0J3MgYWRkZWQgYWJvdmUsIGluIGdsX1RIUkVBRExJQl9FQVJMWV9CT0RZLgorICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInB0aHJlYWQuaCIgImFjX2N2X2hlYWRlcl9wdGhyZWFkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPSB4eWVzOyB0aGVuIDoKKyAgZ2xfaGF2ZV9wdGhyZWFkX2g9eWVzCitlbHNlCisgIGdsX2hhdmVfcHRocmVhZF9oPW5vCitmaQorCisKKyAgICAgIGlmIHRlc3QgIiRnbF9oYXZlX3B0aHJlYWRfaCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB0ZXN0czoKKyAgICAgICAgIyAgIC1scHRocmVhZHMgKEZTVSB0aHJlYWRzLCBQQ3RocmVhZHMpCisgICAgICAgICMgICAtbGd0aHJlYWRzCisgICAgICAgIGdsX2hhdmVfcHRocmVhZD0KKyAgICAgICAgIyBUZXN0IHdoZXRoZXIgYm90aCBwdGhyZWFkX211dGV4X2xvY2sgYW5kIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgZXhpc3QKKyAgICAgICAgIyBpbiBsaWJjLiBJUklYIDYuNSBoYXMgdGhlIGZpcnN0IG9uZSBpbiBib3RoIGxpYmMgYW5kIGxpYnB0aHJlYWQsIGJ1dAorICAgICAgICAjIHRoZSBzZWNvbmQgb25lIG9ubHkgaW4gbGlicHRocmVhZCwgYW5kIGxvY2suYyBuZWVkcyBpdC4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworcHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKTApOworICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgocHRocmVhZF9tdXRleGF0dHJfdCopMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfaGF2ZV9wdGhyZWFkPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICMgVGVzdCBmb3IgbGlicHRocmVhZCBieSBsb29raW5nIGZvciBwdGhyZWFkX2tpbGwuIChOb3QgcHRocmVhZF9zZWxmLAorICAgICAgICAjIHNpbmNlIGl0IGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBPU0YvMS4pCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgIyBUaGUgcHJvZ3JhbSBsaW5rcyBmaW5lIHdpdGhvdXQgbGlicHRocmVhZC4gQnV0IGl0IG1heSBhY3R1YWxseQorICAgICAgICAgICMgbmVlZCB0byBsaW5rIHdpdGggbGlicHRocmVhZCBpbiBvcmRlciB0byBjcmVhdGUgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxwdGhyZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scHRocmVhZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcHRocmVhZF9raWxsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcHRocmVhZF9raWxsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPSB4eWVzOyB0aGVuIDoKKyAgTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkIExUTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkCisgICAgICAgICAgICAgIyBPbiBTb2xhcmlzIGFuZCBIUC1VWCwgbW9zdCBwdGhyZWFkIGZ1bmN0aW9ucyBleGlzdCBhbHNvIGluIGxpYmMuCisgICAgICAgICAgICAgIyBUaGVyZWZvcmUgcHRocmVhZF9pbl91c2UoKSBuZWVkcyB0byBhY3R1YWxseSB0cnkgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAjIHRocmVhZDogcHRocmVhZF9jcmVhdGUgZnJvbSBsaWJjIHdpbGwgZmFpbCwgd2hlcmVhcworICAgICAgICAgICAgICMgcHRocmVhZF9jcmVhdGUgd2lsbCBhY3R1YWxseSBjcmVhdGUgYSB0aHJlYWQuCisgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICBzb2xhcmlzKiB8IGhwdXgqKQorCiskYXNfZWNobyAiI2RlZmluZSBQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgIGVzYWMKKworZmkKKworICAgICAgICBlbHNlCisgICAgICAgICAgIyBTb21lIGxpYnJhcnkgaXMgbmVlZGVkLiBUcnkgbGlicHRocmVhZCBhbmQgbGliY19yLgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2tpbGwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2tpbGwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsPXllcworZWxzZQorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGw9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA9IHh5ZXM7IHRoZW4gOgorICBnbF9oYXZlX3B0aHJlYWQ9eWVzCisgICAgICAgICAgICAgTElCVEhSRUFEPS1scHRocmVhZCBMVExJQlRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQKK2ZpCisKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgICAgIyBGb3IgRnJlZUJTRCA0LgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9raWxsIGluIC1sY19yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxjX3IuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNfciAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcHRocmVhZF9raWxsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcHRocmVhZF9raWxsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsPXllcworZWxzZQorICBhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGwiID0geHllczsgdGhlbiA6CisgIGdsX2hhdmVfcHRocmVhZD15ZXMKKyAgICAgICAgICAgICAgIExJQlRIUkVBRD0tbGNfciBMVExJQlRIUkVBRD0tbGNfcgorICAgICAgICAgICAgICAgTElCTVVMVElUSFJFQUQ9LWxjX3IgTFRMSUJNVUxUSVRIUkVBRD0tbGNfcgorZmkKKworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9cG9zaXgKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1BPU0lYX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkTElCTVVMVElUSFJFQUQiIHx8IHRlc3QgLW4gIiRMVExJQk1VTFRJVEhSRUFEIjsgdGhlbgorICAgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUE9TSVhfVEhSRUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHNvbGFyaXM7IHRoZW4KKyAgICAgICAgZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPQorICAgICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkTElCUyAtbHRocmVhZCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjaW5jbHVkZSA8c3luY2guaD4KKworaW50CittYWluICgpCit7Cit0aHJfc2VsZigpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2hhdmVfc29sYXJpc3RocmVhZD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXNvbGFyaXMKKyAgICAgICAgICBMSUJUSFJFQUQ9LWx0aHJlYWQKKyAgICAgICAgICBMVExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExJQk1VTFRJVEhSRUFEPSIkTElCVEhSRUFEIgorICAgICAgICAgIExUTElCTVVMVElUSFJFQUQ9IiRMVExJQlRIUkVBRCIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NPTEFSSVNfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIGlmIGNhc2UgIiRnbF9jdl9oYXZlX3dlYWsiIGluICp5ZXMpIHRydWU7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICBMSUJUSFJFQUQ9CisgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBjYXNlICIkZ2xfdXNlX3RocmVhZHMiIGluCisgICAgICAgIHllcyB8IHdpbmRvd3MgfCB3aW4zMikgIyBUaGUgJ3dpbjMyJyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICBpZiB7IGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopIHRydWU7OworICAgICAgICAgICAgICAgICAqKSBmYWxzZTs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9d2luZG93cworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfV0lORE9XU19USFJFQURTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2UuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF90aHJlYWRzX2FwaSIgPiY1CiskYXNfZWNobyAiJGdsX3RocmVhZHNfYXBpIiA+JjY7IH0KKworCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgIiRnbF90aHJlYWRzX2FwaSIgPSBwb3NpeDsgdGhlbgorICAgICMgT1NGLzEgNC4wIGFuZCBNYWMgT1MgWCAxMC4xIGxhY2sgdGhlIHB0aHJlYWRfcndsb2NrX3QgdHlwZSBhbmQgdGhlCisgICAgIyBwdGhyZWFkX3J3bG9ja18qIGZ1bmN0aW9ucy4KKyAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdGhyZWFkX3J3bG9ja190IiAiYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiAiI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQURfUldMT0NLIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisgICAgIyBnbGliYyBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIGFzIGVudW0sIG5vdCBhcyBhIG1hY3JvLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworCisjaWYgX19GcmVlQlNEX18gPT0gNAorZXJyb3IgIk5vLCBpbiBGcmVlQlNEIDQuMCByZWN1cnNpdmUgbXV0ZXhlcyBhY3R1YWxseSBkb24ndCB3b3JrLiIKKyNlbGlmIChkZWZpbmVkIF9fRU5WSVJPTk1FTlRfTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRURfXyBcCisgICAgICAgJiYgX19FTlZJUk9OTUVOVF9NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRF9fIDwgMTA3MCkKK2Vycm9yICJObywgaW4gTWFjIE9TIFggPCAxMC43IHJlY3Vyc2l2ZSBtdXRleGVzIGFjdHVhbGx5IGRvbid0IHdvcmsuIgorI2Vsc2UKK2ludCB4ID0gKGludClQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRTsKK3JldHVybiAheDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICA6CisKK2ZpCisKKworIyBTb2xhcmlzIG5lZWRzIC1sc29ja2V0IGFuZCAtbG5zbC4gVW5pc3lzIHN5c3RlbSBpbmNsdWRlcworIyBnZXRob3N0YnluYW1lIGluIGxpYnNvY2tldCBidXQgbmVlZHMgbGlibnNsIGZvciBzb2NrZXQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2V0c29ja29wdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNldHNvY2tvcHQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZXRzb2Nrb3B0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2V0c29ja29wdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQ7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfc2V0c29ja29wdD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfc2V0c29ja29wdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2V0c29ja29wdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNldHNvY2tvcHQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZXRzb2Nrb3B0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2V0c29ja29wdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQ7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAtbG5zbCAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0PSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfc2V0c29ja29wdCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfc2V0c29ja29wdCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQ9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfc2V0c29ja29wdAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2V0c29ja29wdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNldHNvY2tvcHQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZXRzb2Nrb3B0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2V0c29ja29wdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBuc2w7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfc2V0c29ja29wdD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfc2V0c29ja29wdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9zZXRzb2Nrb3B0IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX3NldHNvY2tvcHQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLiAjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitmb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oIHN5cy9zZWxlY3QuaCBzeXMvbXNnLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworSU5TRVJUX1NZU19TRUxFQ1RfSD0KK2lmIHRlc3QgeCIkYWNfY3ZfaGVhZGVyX3N5c19zZWxlY3RfaCIgPSB4eWVzOyB0aGVuCisgIElOU0VSVF9TWVNfU0VMRUNUX0g9IiBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IgorZmkKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCAjIyMjCisjIyMjICBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLiAgICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzID0geyAwLCAwIH07CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICAgIGNoYXIgdHg7CisgICAgY2hhciAqdCA9ICZ0eDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZywgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH0gYng7CisgICAgc3RydWN0IHMgKmIgPSAmYng7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGFjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBjb25zdCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19pbmxpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9jX2lubGluZT1ubworZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCit0eXBlZGVmIGludCBmb29fdDsKK3N0YXRpYyAkYWNfa3cgZm9vX3Qgc3RhdGljX2ZvbyAoKSB7cmV0dXJuIDA7IH0KKyRhY19rdyBmb29fdCBmb28gKCkge3JldHVybiAwOyB9CisjZW5kaWYKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfaW5saW5lPSRhY19rdworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICB0ZXN0ICIkYWNfY3ZfY19pbmxpbmUiICE9IG5vICYmIGJyZWFrCitkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorCitjYXNlICRhY19jdl9jX2lubGluZSBpbgorICBpbmxpbmUgfCB5ZXMpIDs7CisgICopCisgICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgICAgIG5vKSBhY192YWw9OzsKKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworICAgIGVzYWMKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGlubGluZSAkYWNfdmFsCisjZW5kaWYKK19BQ0VPRgorICAgIDs7Citlc2FjCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkIGludAorX0FDRU9GCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3NpZ25hbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworaW50CittYWluICgpCit7CityZXR1cm4gKihzaWduYWwgKDAsIDApKSAoMCkgPT0gMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX3NpZ25hbD1pbnQKK2Vsc2UKKyAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX3NpZ25hbCIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVUU0lHVFlQRSAkYWNfY3ZfdHlwZV9zaWduYWwKK19BQ0VPRgorCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN5c19zaWdsaXN0IiAiYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0IiAiI2luY2x1ZGUgPHNpZ25hbC5oPgorLyogTmV0QlNEIGRlY2xhcmVzIHN5c19zaWdsaXN0IGluIHVuaXN0ZC5oLiAgKi8KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0IiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1lTX1NJR0xJU1QgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19jdl90eXBlX3BpZF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcGlkX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBwaWRfdCBpbnQKK19BQ0VPRgorCitmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBieXRlIHR5cGVkZWYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJ5dGUgdHlwZWRlZi4uLiAiID4mNjsgfQorICAgIGlmICR7Z251cGdfY3ZfdHlwZWRlZl9ieXRlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfR05VX1NPVVJDRSAxCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisgICAgI3VuZGVmIGJ5dGUKKyAgICBpbnQgYSA9IHNpemVvZihieXRlKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdudXBnX2N2X3R5cGVkZWZfYnl0ZT15ZXMKK2Vsc2UKKyAgZ251cGdfY3ZfdHlwZWRlZl9ieXRlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbnVwZ19jdl90eXBlZGVmX2J5dGUiID4mNQorJGFzX2VjaG8gIiRnbnVwZ19jdl90eXBlZGVmX2J5dGUiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbnVwZ19jdl90eXBlZGVmX2J5dGUiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQllURV9UWVBFREVGIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVzaG9ydCB0eXBlZGVmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1c2hvcnQgdHlwZWRlZi4uLiAiID4mNjsgfQorICAgIGlmICR7Z251cGdfY3ZfdHlwZWRlZl91c2hvcnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyAgICAjdW5kZWYgdXNob3J0CisgICAgaW50IGEgPSBzaXplb2YodXNob3J0KTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdudXBnX2N2X3R5cGVkZWZfdXNob3J0PXllcworZWxzZQorICBnbnVwZ19jdl90eXBlZGVmX3VzaG9ydD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ251cGdfY3ZfdHlwZWRlZl91c2hvcnQiID4mNQorJGFzX2VjaG8gIiRnbnVwZ19jdl90eXBlZGVmX3VzaG9ydCIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGdudXBnX2N2X3R5cGVkZWZfdXNob3J0IiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VTSE9SVF9UWVBFREVGIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVsb25nIHR5cGVkZWYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVsb25nIHR5cGVkZWYuLi4gIiA+JjY7IH0KKyAgICBpZiAke2dudXBnX2N2X3R5cGVkZWZfdWxvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyAgICAjdW5kZWYgdWxvbmcKKyAgICBpbnQgYSA9IHNpemVvZih1bG9uZyk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbnVwZ19jdl90eXBlZGVmX3Vsb25nPXllcworZWxzZQorICBnbnVwZ19jdl90eXBlZGVmX3Vsb25nPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbnVwZ19jdl90eXBlZGVmX3Vsb25nIiA+JjUKKyRhc19lY2hvICIkZ251cGdfY3ZfdHlwZWRlZl91bG9uZyIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGdudXBnX2N2X3R5cGVkZWZfdWxvbmciID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVUxPTkdfVFlQRURFRiAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1MTYgdHlwZWRlZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdTE2IHR5cGVkZWYuLi4gIiA+JjY7IH0KKyAgICBpZiAke2dudXBnX2N2X3R5cGVkZWZfdTE2Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfR05VX1NPVVJDRSAxCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisgICAgI3VuZGVmIHUxNgorICAgIGludCBhID0gc2l6ZW9mKHUxNik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbnVwZ19jdl90eXBlZGVmX3UxNj15ZXMKK2Vsc2UKKyAgZ251cGdfY3ZfdHlwZWRlZl91MTY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdudXBnX2N2X3R5cGVkZWZfdTE2IiA+JjUKKyRhc19lY2hvICIkZ251cGdfY3ZfdHlwZWRlZl91MTYiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbnVwZ19jdl90eXBlZGVmX3UxNiIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VMTZfVFlQRURFRiAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1MzIgdHlwZWRlZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdTMyIHR5cGVkZWYuLi4gIiA+JjY7IH0KKyAgICBpZiAke2dudXBnX2N2X3R5cGVkZWZfdTMyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfR05VX1NPVVJDRSAxCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisgICAgI3VuZGVmIHUzMgorICAgIGludCBhID0gc2l6ZW9mKHUzMik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbnVwZ19jdl90eXBlZGVmX3UzMj15ZXMKK2Vsc2UKKyAgZ251cGdfY3ZfdHlwZWRlZl91MzI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdudXBnX2N2X3R5cGVkZWZfdTMyIiA+JjUKKyRhc19lY2hvICIkZ251cGdfY3ZfdHlwZWRlZl91MzIiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbnVwZ19jdl90eXBlZGVmX3UzMiIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VMzJfVFlQRURFRiAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisKKworCisgICAgICBmb3IgYWNfaGVhZGVyIGluIHN5cy9zb2NrZXQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3NvY2tldC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisKKyAgOgorCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCA9IHllczsgdGhlbgorICAgIFNZU19TT0NLRVRfSD0nJworICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gd2luc29jazIuaCB3czJ0Y3BpcC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKyAgZmkKKworCisgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzb2NrbGVuX3QiICJhY19jdl90eXBlX3NvY2tsZW5fdCIgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICNpZiBIQVZFX1NZU19TT0NLRVRfSAorICAgICAgIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgICAjZWxpZiBIQVZFX1dTMlRDUElQX0gKKyAgICAgICMgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyAgICAgICNlbmRpZgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NvY2tsZW5fdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrbGVuX3QgZXF1aXZhbGVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc29ja2xlbl90IGVxdWl2YWxlbnQuLi4gIiA+JjY7IH0KKyAgICAgIGlmICR7Z2xfY3ZfZ2xfY3Zfc29ja2xlbl90X2VxdWl2Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKwkgIyAidm9pZCAqIiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGdldHBlZXJuYW1lCisJIGdsX2N2X3NvY2tsZW5fdF9lcXVpdj0KKwkgZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKwkgICBmb3IgdCBpbiBpbnQgc2l6ZV90ICJ1bnNpZ25lZCBpbnQiICJsb25nIGludCIgInVuc2lnbmVkIGxvbmcgaW50IjsgZG8KKwkgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworCQlpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CitpbnQKK21haW4gKCkKK3sKKyR0IGxlbjsKKwkJZ2V0cGVlcm5hbWUgKDAsIDAsICZsZW4pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJICAgICB0ZXN0ICIkZ2xfY3Zfc29ja2xlbl90X2VxdWl2IiAhPSAiIiAmJiBicmVhaworCSAgIGRvbmUKKwkgICB0ZXN0ICIkZ2xfY3Zfc29ja2xlbl90X2VxdWl2IiAhPSAiIiAmJiBicmVhaworCSBkb25lCisKK2ZpCisKKyAgICAgIGlmIHRlc3QgIiRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID0gIiI7IHRoZW4KKwlhc19mbl9lcnJvciAkPyAiQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QiICIkTElORU5PIiA1CisgICAgICBmaQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNvY2tsZW5fdCAkZ2xfY3Zfc29ja2xlbl90X2VxdWl2CitfQUNFT0YKKworZmkKKworY2FzZSAiJHtob3N0fSIgaW4KKyAgKi0qLW1pbmd3MzIqKQorICAgICMgc29ja2xlbl90IG1heSBvciBtYXkgbm90IGJlIGRlZmluZWQgZGVwZW5kaW5nIG9uIHdoYXQgaGVhZGVycworICAgICMgYXJlIGluY2x1ZGVkLiAgVG8gYmUgc2FmZSB3ZSB1c2UgaW50IGFzIHRoaXMgaXMgdGhlIGFjdHVhbCB0eXBlLgorICAgIEZBTExCQUNLX1NPQ0tMRU5fVD0idHlwZWRlZiBpbnQgZ2NyeV9zb2NrbGVuX3Q7IgorICAgIDs7CisgICopCisgICAgaWYgdGVzdCAiLiRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID0gIi4iOyB0aGVuCisgICAgICBGQUxMQkFDS19TT0NLTEVOX1Q9InR5cGVkZWYgc29ja2xlbl90IGdjcnlfc29ja2xlbl90OyIKKyAgICBlbHNlCisgICAgICBGQUxMQkFDS19TT0NLTEVOX1Q9InR5cGVkZWYgJHtnbF9jdl9zb2NrbGVuX3RfZXF1aXZ9IGdjcnlfc29ja2xlbl90OyIKKyAgICBmaQorZXNhYworCisKKworIworIyBDaGVjayBmb3IgX19idWlsdGluX2Jzd2FwMzIgaW50cmluc2ljLgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX19idWlsdGluX2Jzd2FwMzIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fYnVpbHRpbl9ic3dhcDMyLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwMzIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyPW5vCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CitpbnQgeCA9IDA7IGludCB5ID0gX19idWlsdGluX2Jzd2FwMzIoeCk7IHJldHVybiB5OworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwMzI9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwMzIiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyIiA+JjY7IH0KK2lmIHRlc3QgIiRnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyIiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JVSUxUSU5fQlNXQVAzMiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjCisjIENoZWNrIGZvciBfX2J1aWx0aW5fYnN3YXA2NCBpbnRyaW5zaWMuCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfX2J1aWx0aW5fYnN3YXA2NCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX19idWlsdGluX2Jzd2FwNjQuLi4gIiA+JjY7IH0KK2lmICR7Z2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdjcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwNjQ9bm8KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyB4ID0gMDsgbG9uZyBsb25nIHkgPSBfX2J1aWx0aW5fYnN3YXA2NCh4KTsgcmV0dXJuIHk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2ND15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2NCIgPiY1CiskYXNfZWNobyAiJGdjcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwNjQiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwNjQiID0gInllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlVJTFRJTl9CU1dBUDY0IDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIFZMQSBzdXBwb3J0ICh2YXJpYWJsZSBsZW5ndGggYXJyYXlzKS4KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgdmFyaWFibGUgbGVuZ3RoIGFycmF5cyBhcmUgc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMgYXJlIHN1cHBvcnRlZC4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2hhdmVfdmxhKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2NyeV9jdl9oYXZlX3ZsYT1ubworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCit2b2lkIGYxKGNoYXIgKiwgaW50KTsKKyAgICAgICAgICAgIGNoYXIgZm9vKGludCBpKSB7CisgICAgICAgICAgICAgIGNoYXIgYlsoaSA8IDAgPyAwIDogaSkgKyAxXTsKKyAgICAgICAgICAgICAgZjEoYiwgc2l6ZW9mIGIpOyByZXR1cm4gYlswXTt9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2NyeV9jdl9oYXZlX3ZsYT15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfaGF2ZV92bGEiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2hhdmVfdmxhIiA+JjY7IH0KK2lmIHRlc3QgIiRnY3J5X2N2X2hhdmVfdmxhIiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1ZMQSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjCisjIENoZWNrIGZvciBFTEYgdmlzaWJpbGl0eSBzdXBwb3J0LgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfdmlzaWJpbGl0eV9hdHRyaWJ1dGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlPW5vCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpID0gMTsKKyAgICAgICAgICAgIGludCBiYXIgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJwcm90ZWN0ZWQiKSkpID0gMTsKKworX0FDRU9GCisKKyAgICAgICAgaWYgJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgXAorICAgICAgICAgICAgICAgICAgMT4mNSAyPiY1IDsgdGhlbgorICAgICAgICAgICAgaWYgZ3JlcCAnXC5oaWRkZW4uKmZvbycgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgZ3JlcCAnXC5wcm90ZWN0ZWQuKmJhcicgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdl92aXNpYmlsaXR5X2F0dHJpYnV0ZT15ZXMKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPiY1CiskYXNfZWNobyAiJGdjcnlfY3ZfdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBicm9rZW4gdmlzaWJpbGl0eSBhdHRyaWJ1dGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJyb2tlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZS4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2Jyb2tlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdjcnlfY3ZfYnJva2VuX3Zpc2liaWxpdHlfYXR0cmlidXRlPXllcworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vIChpbnQgeCk7CisgICAgICAgICAgICBpbnQgYmFyIChpbnQgeCkgX19hc21fXyAoImZvbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOworICAgICAgICAgICAgaW50IGJhciAoaW50IHgpIHsgcmV0dXJuIHg7IH0KKworX0FDRU9GCisKKyAgICAgICAgaWYgJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgXAorICAgICAgICAgICAgICAgICAgMT4mNSAyPiY1IDsgdGhlbgorICAgICAgICAgICBpZiBncmVwICdcLmhpZGRlblsgCV9dZm9vJyBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgIGdjcnlfY3ZfYnJva2VuX3Zpc2liaWxpdHlfYXR0cmlidXRlPW5vCisgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfYnJva2VuX3Zpc2liaWxpdHlfYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9icm9rZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNjsgfQorZmkKK2lmIHRlc3QgIiRnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIGFsaWFzIGF0dHJpYnV0ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIGFsaWFzIGF0dHJpYnV0ZS4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2Jyb2tlbl9hbGlhc19hdHRyaWJ1dGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBnY3J5X2N2X2Jyb2tlbl9hbGlhc19hdHRyaWJ1dGU9eWVzCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2V4dGVybiBpbnQgZm9vIChpbnQgeCkgX19hc20gKCJ4eXp6eSIpOworICAgICAgICAgICAgaW50IGJhciAoaW50IHgpIHsgcmV0dXJuIHg7IH0KKyAgICAgICAgICAgIGV4dGVybiBfX3R5cGVvZiAoYmFyKSBmb28gX19hdHRyaWJ1dGUgKCh3ZWFrLCBhbGlhcyAoImJhciIpKSk7CisgICAgICAgICAgICBleHRlcm4gaW50IGRmb287CisgICAgICAgICAgICBleHRlcm4gX190eXBlb2YgKGRmb28pIGRmb28gX19hc20gKCJhYmNjYiIpOworICAgICAgICAgICAgaW50IGRmb28gPSAxOworCitfQUNFT0YKKworICAgICAgICBpZiAke0NDLWNjfSAtV2Vycm9yIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyBcCisgICAgICAgICAgICAgICAgICAxPiY1IDI+JjUgOyB0aGVuCisgICAgICAgICAgIGlmIGdyZXAgJ3h5enp5JyBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMSAmJiBcCisgICAgICAgICAgICAgIGdyZXAgJ2FiY2NiJyBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgICBnY3J5X2N2X2Jyb2tlbl9hbGlhc19hdHRyaWJ1dGU9bm8KKyAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9icm9rZW5fYWxpYXNfYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9icm9rZW5fYWxpYXNfYXR0cmlidXRlIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIkZ2NyeV9jdl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2NjIHN1cHBvcnRzIC1mdmlzaWJpbGl0eT1oaWRkZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2NjIHN1cHBvcnRzIC1mdmlzaWJpbGl0eT1oaWRkZW4uLi4gIiA+JjY7IH0KK2lmICR7Z2NyeV9jdl9nY2NfaGFzX2ZfdmlzaWJpbGl0eSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdjcnlfY3ZfZ2NjX2hhc19mX3Zpc2liaWxpdHk9bm8KKyAgICAgICAgX2djY19jZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisgICAgICAgIENGTEFHUz0iLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfZ2NjX2hhc19mX3Zpc2liaWxpdHk9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIENGTEFHUz0kX2djY19jZmxhZ3Nfc2F2ZTsKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9nY2NfaGFzX2ZfdmlzaWJpbGl0eSIgPiY1CiskYXNfZWNobyAiJGdjcnlfY3ZfZ2NjX2hhc19mX3Zpc2liaWxpdHkiID4mNjsgfQorZmkKK2lmIHRlc3QgIiRnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlIiA9ICJ5ZXMiIFwKKyAgICYmIHRlc3QgIiRnY3J5X2N2X2Jyb2tlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgIT0gInllcyIgXAorICAgJiYgdGVzdCAiJGdjcnlfY3ZfYnJva2VuX2FsaWFzX2F0dHJpYnV0ZSIgIT0gInllcyIgXAorICAgJiYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2hhc19mX3Zpc2liaWxpdHkiID0gInllcyIKKyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEdDUllfVVNFX1ZJU0lCSUxJVFkgMSIgPj5jb25mZGVmcy5oCisKKyAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBHQ0Mgc3R5bGUgYWxpZ25lZCBhdHRyaWJ1dGUKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgR0NDIHN0eWxlIGFsaWduZWQgYXR0cmlidXRlIGlzIHN1cHBvcnRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBHQ0Mgc3R5bGUgYWxpZ25lZCBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfZ2NjX2F0dHJpYnV0ZV9hbGlnbmVkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2NyeV9jdl9nY2NfYXR0cmlidXRlX2FsaWduZWQ9bm8KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworc3RydWN0IHsgaW50IGE7IH0gZm9vIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19hdHRyaWJ1dGVfYWxpZ25lZD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfZ2NjX2F0dHJpYnV0ZV9hbGlnbmVkIiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9nY2NfYXR0cmlidXRlX2FsaWduZWQiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2F0dHJpYnV0ZV9hbGlnbmVkIiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19BVFRSSUJVVEVfQUxJR05FRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzICdhc20nIG9yICdfX2FzbV9fJyBrZXl3b3JkIGZvcgorIyBhc3NlbWJsZXIgYmxvY2tzLgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICdhc20nIGFzc2VtYmxlciBrZXl3b3JkIGlzIHN1cHBvcnRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICdhc20nIGFzc2VtYmxlciBrZXl3b3JkIGlzIHN1cHBvcnRlZC4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2hhdmVfYXNtKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2NyeV9jdl9oYXZlX2FzbT1ubworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCit2b2lkIGEodm9pZCkgeyBhc20oIiI6OjoibWVtb3J5Iik7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2hhdmVfYXNtPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9oYXZlX2FzbSIgPiY1CiskYXNfZWNobyAiJGdjcnlfY3ZfaGF2ZV9hc20iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICdfX2FzbV9fJyBhc3NlbWJsZXIga2V5d29yZCBpcyBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAnX19hc21fXycgYXNzZW1ibGVyIGtleXdvcmQgaXMgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfaGF2ZV9fX2FzbV9fKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2NyeV9jdl9oYXZlX19fYXNtX189bm8KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwordm9pZCBhKHZvaWQpIHsgX19hc21fXygiIjo6OiJtZW1vcnkiKTsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfaGF2ZV9fX2FzbV9fPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9oYXZlX19fYXNtX18iID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2hhdmVfX19hc21fXyIgPiY2OyB9CitpZiB0ZXN0ICIkZ2NyeV9jdl9oYXZlX2FzbSIgPSAibm8iIDsgdGhlbgorICAgaWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9fX2FzbV9fIiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBhc20gX19hc21fXyIgPj5jb25mZGVmcy5oCisKKyAgIGZpCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaW5saW5lIGFzc2VtYmx5IG1lbW9yeSBiYXJyaWVyLgorIworaWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9hc20iID0gIm5vIiA7IHRoZW4KKyAgIGlmIHRlc3QgIiRnY3J5X2N2X2hhdmVfX19hc21fXyIgPSAieWVzIiA7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpbmxpbmUgYXNzZW1ibHkgbWVtb3J5IGJhcnJpZXIgaXMgc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaW5saW5lIGFzc2VtYmx5IG1lbW9yeSBiYXJyaWVyIGlzIHN1cHBvcnRlZC4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5PW5vCisgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3ZvaWQgYSh2b2lkKSB7IF9fYXNtX18gdm9sYXRpbGUoIiI6OjoibWVtb3J5Iik7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeT15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5IiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9oYXZlX2FzbV92b2xhdGlsZV9tZW1vcnkiID4mNjsgfQorICAgZmkKK2Vsc2UKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpbmxpbmUgYXNzZW1ibHkgbWVtb3J5IGJhcnJpZXIgaXMgc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaW5saW5lIGFzc2VtYmx5IG1lbW9yeSBiYXJyaWVyIGlzIHN1cHBvcnRlZC4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5PW5vCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3ZvaWQgYSh2b2lkKSB7IGFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKTsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5PXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9oYXZlX2FzbV92b2xhdGlsZV9tZW1vcnkiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeSIgPiY2OyB9CitmaQoraWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5IiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19BU01fVk9MQVRJTEVfTUVNT1JZIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgYXNzZW1ibGVyIHN1cHBvcnRzIGZlYXR1cmVzIG5lZWRlZCBmb3Igb3VyIEFSTQorIyBpbXBsZW1lbnRhdGlvbnMuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgdXAgdGhlCisjIGFzc2VtYmxlciBzdHVmZi4KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBHQ0MgYXNzZW1ibGVyIGlzIGNvbXBhdGlibGUgZm9yIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBHQ0MgYXNzZW1ibGVyIGlzIGNvbXBhdGlibGUgZm9yIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7Z2NyeV9jdl9nY2NfYXJtX3BsYXRmb3JtX2FzX29rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ2NyeV9jdl9nY2NfYXJtX3BsYXRmb3JtX2FzX29rPW5vCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK19fYXNtX18oCisgICAgICAgICAgICAgICAgLyogVGVzdCBpZiBhc3NlbWJsZXIgc3VwcG9ydHMgVUFMIHN5bnRheC4gICovCisgICAgICAgICAgICAgICAgIi5zeW50YXggdW5pZmllZFxuXHQiCisgICAgICAgICAgICAgICAgIi5hcm1cblx0IiAvKiBvdXIgYXNzZW1ibHkgY29kZSBpcyBpbiBBUk0gbW9kZSAgKi8KKyAgICAgICAgICAgICAgICAvKiBGb2xsb3dpbmcgY2F1c2VzIGVycm9yIGlmIGFzc2VtYmxlciBpZ25vcmVkICcuc3ludGF4IHVuaWZpZWQnLiAgKi8KKyAgICAgICAgICAgICAgICAiYXNtZnVuYzpcblx0IgorICAgICAgICAgICAgICAgICJhZGQgJXIwLCAlcjAsICVyNCwgcm9yICMxMjtcblx0IgorCisgICAgICAgICAgICAgICAgLyogVGVzdCBpZiAnLnR5cGUnIGFuZCAnLnNpemUnIGFyZSBzdXBwb3J0ZWQuICAqLworICAgICAgICAgICAgICAgICIuc2l6ZSBhc21mdW5jLC4tYXNtZnVuYztcblx0IgorICAgICAgICAgICAgICAgICIudHlwZSBhc21mdW5jLCVmdW5jdGlvbjtcblx0IgorICAgICAgICAgICAgKTsKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19hcm1fcGxhdGZvcm1fYXNfb2s9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY3J5X2N2X2djY19hcm1fcGxhdGZvcm1fYXNfb2siID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2djY19hcm1fcGxhdGZvcm1fYXNfb2siID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2FybV9wbGF0Zm9ybV9hc19vayIgPSAieWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIHVuZGVyc2NvcmVzIGluIHN5bWJvbHMgYXJlIHJlcXVpcmVkLiAgVGhpcyBuZWVkcyB0byBiZQorIyBkb25lIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBhc3NlbWJsZXIgc3R1ZmYuCisjCisKK3RtcF9kb19jaGVjaz0ibm8iCitjYXNlICIke2hvc3R9IiBpbgorICAgICotbWluZ3czMm1zdmMqKQorICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9eWVzCisgICAgICAgIDs7CisgICAgaTM4Ni1lbXgtb3MyIHwgaTM0NTY4Ni1wYy1vczIqZW14IHwgaTM4Ni1wYy1tc2Rvc2RqZ3BwKQorICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9eWVzCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHggOyB0aGVuCisgICAgICAgICAgIGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT15ZXMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgIHRtcF9kb19jaGVjaz0ieWVzIgorICAgICAgZmkKKyAgICAgICA7OworZXNhYworaWYgdGVzdCAiJHRtcF9kb19jaGVjayIgPSAieWVzIjsgdGhlbgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHMuLi4gIiA+JjY7IH0KKyAgaWYgJHthY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9bm8KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAgICAgIHZvaWQgbm1fdGVzdF9mdW5jKCl7fQorICAgICAgaW50IG1haW4oKXtubV90ZXN0X2Z1bmM7cmV0dXJuIDA7fQorRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBhY19ubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFx8IGN1dCAtZCBcJyBcJyAtZiAyIFw+ICRhY19ubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXHwgY3V0IC1kIFwnIFwnIC1mIDIgXD4gJGFjX25saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkYWNfbmxpc3QiOyB0aGVuCisgICAgICAjIFNlZSB3aGV0aGVyIHRoZSBzeW1ib2xzIGhhdmUgYSBsZWFkaW5nIHVuZGVyc2NvcmUuCisgICAgICBpZiBlZ3JlcCAnXl9ubV90ZXN0X2Z1bmMnICIkYWNfbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlPXllcworICAgICAgZWxzZQorICAgICAgICBpZiBlZ3JlcCAnXm5tX3Rlc3RfZnVuYyAnICIkYWNfbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICA6CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlY2hvICJjb25maWd1cmU6IGNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkYWNfbmxpc3QiID4mNQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjb25maWd1cmU6IGNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC5jID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisKK2ZpCisKKyAgZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzLi4uICIgPiY2OyB9CisgIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSIgPiY2OyB9CitpZiB0ZXN0IHgkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBXSVRIX1NZTUJPTF9VTkRFUlNDT1JFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyMjIyMgU2V0dXAgYXNzZW1ibGVyIHN0dWZmLiAgIyMjIworIyMjIyBEZWZpbmUgbXBpX2NwdV9hcmNoLiAgICAjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1waS1wYXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21waV9wYXRoK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbXBpX3BhdGg7IG1waV9leHRyYV9wYXRoPSIkZW5hYmxldmFsIgorZWxzZQorICBtcGlfZXh0cmFfcGF0aD0iIgorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhcmNoaXRlY3R1cmUgYW5kIG1waSBhc3NlbWJsZXIgZnVuY3Rpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFyY2hpdGVjdHVyZSBhbmQgbXBpIGFzc2VtYmxlciBmdW5jdGlvbnMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLWYgJHNyY2Rpci9tcGkvY29uZmlnLmxpbmtzIDsgdGhlbgorICAgIC4gJHNyY2Rpci9tcGkvY29uZmlnLmxpbmtzCisgICAgYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzICIkbXBpX2xuX2xpc3QiIgorCisgICAgYWNfY3ZfbXBpX3NmbGFncz0iJG1waV9zZmxhZ3MiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRtcGlfY3B1X2FyY2giID4mNQorJGFzX2VjaG8gIiRtcGlfY3B1X2FyY2giID4mNjsgfQorZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIm1waS9jb25maWcubGlua3MgbWlzc2luZyEiICIkTElORU5PIiA1CitmaQorTVBJX1NGTEFHUz0iJGFjX2N2X21waV9zZmxhZ3MiCisKKworIGlmIHRlc3QgIiRtcGlfbW9kX2FzbV9tcGloX2FkZDEiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQVNNX01QSUhfQUREMV9UUlVFPQorICBNUElfTU9EX0FTTV9NUElIX0FERDFfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQVNNX01QSUhfQUREMV9UUlVFPScjJworICBNUElfTU9EX0FTTV9NUElIX0FERDFfRkFMU0U9CitmaQorCisgaWYgdGVzdCAiJG1waV9tb2RfYXNtX21waWhfc3ViMSIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9BU01fTVBJSF9TVUIxX1RSVUU9CisgIE1QSV9NT0RfQVNNX01QSUhfU1VCMV9GQUxTRT0nIycKK2Vsc2UKKyAgTVBJX01PRF9BU01fTVBJSF9TVUIxX1RSVUU9JyMnCisgIE1QSV9NT0RfQVNNX01QSUhfU1VCMV9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9tdWwxIiA9IHllczsgdGhlbgorICBNUElfTU9EX0FTTV9NUElIX01VTDFfVFJVRT0KKyAgTVBJX01PRF9BU01fTVBJSF9NVUwxX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0FTTV9NUElIX01VTDFfVFJVRT0nIycKKyAgTVBJX01PRF9BU01fTVBJSF9NVUwxX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRtcGlfbW9kX2FzbV9tcGloX211bDIiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQVNNX01QSUhfTVVMMl9UUlVFPQorICBNUElfTU9EX0FTTV9NUElIX01VTDJfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQVNNX01QSUhfTVVMMl9UUlVFPScjJworICBNUElfTU9EX0FTTV9NUElIX01VTDJfRkFMU0U9CitmaQorCisgaWYgdGVzdCAiJG1waV9tb2RfYXNtX21waWhfbXVsMyIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9BU01fTVBJSF9NVUwzX1RSVUU9CisgIE1QSV9NT0RfQVNNX01QSUhfTVVMM19GQUxTRT0nIycKK2Vsc2UKKyAgTVBJX01PRF9BU01fTVBJSF9NVUwzX1RSVUU9JyMnCisgIE1QSV9NT0RfQVNNX01QSUhfTVVMM19GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9sc2hpZnQiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQVNNX01QSUhfTFNISUZUX1RSVUU9CisgIE1QSV9NT0RfQVNNX01QSUhfTFNISUZUX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0FTTV9NUElIX0xTSElGVF9UUlVFPScjJworICBNUElfTU9EX0FTTV9NUElIX0xTSElGVF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9yc2hpZnQiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQVNNX01QSUhfUlNISUZUX1RSVUU9CisgIE1QSV9NT0RfQVNNX01QSUhfUlNISUZUX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0FTTV9NUElIX1JTSElGVF9UUlVFPScjJworICBNUElfTU9EX0FTTV9NUElIX1JTSElGVF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9hc21fdWRpdiIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9BU01fVURJVl9UUlVFPQorICBNUElfTU9EX0FTTV9VRElWX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0FTTV9VRElWX1RSVUU9JyMnCisgIE1QSV9NT0RfQVNNX1VESVZfRkFMU0U9CitmaQorCisgaWYgdGVzdCAiJG1waV9tb2RfYXNtX3VkaXZfcXJubmQiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQVNNX1VESVZfUVJOTkRfVFJVRT0KKyAgTVBJX01PRF9BU01fVURJVl9RUk5ORF9GQUxTRT0nIycKK2Vsc2UKKyAgTVBJX01PRF9BU01fVURJVl9RUk5ORF9UUlVFPScjJworICBNUElfTU9EX0FTTV9VRElWX1FSTk5EX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRtcGlfbW9kX2NfbXBpaF9hZGQxIiA9IHllczsgdGhlbgorICBNUElfTU9EX0NfTVBJSF9BREQxX1RSVUU9CisgIE1QSV9NT0RfQ19NUElIX0FERDFfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQ19NUElIX0FERDFfVFJVRT0nIycKKyAgTVBJX01PRF9DX01QSUhfQUREMV9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9jX21waWhfc3ViMSIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9DX01QSUhfU1VCMV9UUlVFPQorICBNUElfTU9EX0NfTVBJSF9TVUIxX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0NfTVBJSF9TVUIxX1RSVUU9JyMnCisgIE1QSV9NT0RfQ19NUElIX1NVQjFfRkFMU0U9CitmaQorCisgaWYgdGVzdCAiJG1waV9tb2RfY19tcGloX211bDEiID0geWVzOyB0aGVuCisgIE1QSV9NT0RfQ19NUElIX01VTDFfVFJVRT0KKyAgTVBJX01PRF9DX01QSUhfTVVMMV9GQUxTRT0nIycKK2Vsc2UKKyAgTVBJX01PRF9DX01QSUhfTVVMMV9UUlVFPScjJworICBNUElfTU9EX0NfTVBJSF9NVUwxX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRtcGlfbW9kX2NfbXBpaF9tdWwyIiA9IHllczsgdGhlbgorICBNUElfTU9EX0NfTVBJSF9NVUwyX1RSVUU9CisgIE1QSV9NT0RfQ19NUElIX01VTDJfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQ19NUElIX01VTDJfVFJVRT0nIycKKyAgTVBJX01PRF9DX01QSUhfTVVMMl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9jX21waWhfbXVsMyIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9DX01QSUhfTVVMM19UUlVFPQorICBNUElfTU9EX0NfTVBJSF9NVUwzX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0NfTVBJSF9NVUwzX1RSVUU9JyMnCisgIE1QSV9NT0RfQ19NUElIX01VTDNfRkFMU0U9CitmaQorCisgaWYgdGVzdCAiJG1waV9tb2RfY19tcGloX2xzaGlmdCIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9DX01QSUhfTFNISUZUX1RSVUU9CisgIE1QSV9NT0RfQ19NUElIX0xTSElGVF9GQUxTRT0nIycKK2Vsc2UKKyAgTVBJX01PRF9DX01QSUhfTFNISUZUX1RSVUU9JyMnCisgIE1QSV9NT0RfQ19NUElIX0xTSElGVF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICIkbXBpX21vZF9jX21waWhfcnNoaWZ0IiA9IHllczsgdGhlbgorICBNUElfTU9EX0NfTVBJSF9SU0hJRlRfVFJVRT0KKyAgTVBJX01PRF9DX01QSUhfUlNISUZUX0ZBTFNFPScjJworZWxzZQorICBNUElfTU9EX0NfTVBJSF9SU0hJRlRfVFJVRT0nIycKKyAgTVBJX01PRF9DX01QSUhfUlNISUZUX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRtcGlfbW9kX2NfdWRpdiIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9DX1VESVZfVFJVRT0KKyAgTVBJX01PRF9DX1VESVZfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQ19VRElWX1RSVUU9JyMnCisgIE1QSV9NT0RfQ19VRElWX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIiRtcGlfbW9kX2NfdWRpdl9xcm5uZCIgPSB5ZXM7IHRoZW4KKyAgTVBJX01PRF9DX1VESVZfUVJOTkRfVFJVRT0KKyAgTVBJX01PRF9DX1VESVZfUVJOTkRfRkFMU0U9JyMnCitlbHNlCisgIE1QSV9NT0RfQ19VRElWX1FSTk5EX1RSVUU9JyMnCisgIE1QSV9NT0RfQ19VRElWX1FSTk5EX0ZBTFNFPQorZmkKKworCisjIFJlc2V0IG5vbiBhcHBsaWNhYmxlIGZlYXR1cmUgZmxhZ3MuCitpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgIGFlc25pc3VwcG9ydD0ibi9hIgorICAgcGNsbXVsc3VwcG9ydD0ibi9hIgorICAgYXZ4c3VwcG9ydD0ibi9hIgorICAgYXZ4MnN1cHBvcnQ9Im4vYSIKKyAgIHBhZGxvY2tzdXBwb3J0PSJuL2EiCisgICBkcm5nc3VwcG9ydD0ibi9hIgorZmkKKworaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gImFybSIgOyB0aGVuCisgICBuZW9uc3VwcG9ydD0ibi9hIgorZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIworIyMjIyBQbGF0Zm9ybSBzcGVjaWZpYyBjb21waWxlciBjaGVja3MuICAjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgU1NTRTMgaW5zdHJ1Y3Rpb25zCisjIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBBRVMtTkkgaW5zdHJ1Y3Rpb25zLgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIFNTU0UzIGluc3RydWN0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIFNTU0UzIGluc3RydWN0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2djY19pbmxpbmVfYXNtX3Nzc2UzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gIng4NiIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz1ubworICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJlX21hc2tbMTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKSA9CisgICAgICAgICAgICAgIHsgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCB9OworICAgICAgICAgICAgdm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygicHNodWZiICVbbWFza10sICUleG1tMlxuXHQiOjpbbWFza10ibSIoKmJlX21hc2spOik7CisgICAgICAgICAgICB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fc3NzZTMiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX3Nzc2UzIiA+JjY7IH0KK2lmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX3Nzc2UzIiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBQQ0xNVUwgaW5zdHJ1Y3Rpb25zLgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIFBDTE1VTCBpbnN0cnVjdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBQQ0xNVUwgaW5zdHJ1Y3Rpb25zLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfZ2NjX2lubGluZV9hc21fcGNsbXVsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gIng4NiIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWw9Im4vYSIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fcGNsbXVsPW5vCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwordm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygicGNsbXVscWRxIFwkMCwgJSV4bW0xLCAlJXhtbTNcblx0Ijo6OiJjYyIpOworICAgICAgICAgICAgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fcGNsbXVsPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWwiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX3BjbG11bCIgPiY2OyB9CitpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWwiID0gInllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX0lOTElORV9BU01fUENMTVVMIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlggaW5zdHJ1Y3Rpb25zCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQVZYIGluc3RydWN0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEFWWCBpbnN0cnVjdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7Z2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eD0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdng9bm8KKyAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCit2b2lkIGEodm9pZCkgeworICAgICAgICAgICAgICBfX2FzbV9fKCJ4Z2V0YnY7IHZhZXNkZWNsYXN0ICglW21lbV0pLCUleG1tMCwlJXhtbTdcblx0Ijo6W21lbV0iciIoMCk6KTsKKyAgICAgICAgICAgIH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4IiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4IiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19JTkxJTkVfQVNNX0FWWCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQVZYMiBpbnN0cnVjdGlvbnMKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlgyIGluc3RydWN0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEFWWDIgaW5zdHJ1Y3Rpb25zLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4Mis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRtcGlfY3B1X2FyY2giICE9ICJ4ODYiIDsgdGhlbgorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4Mj0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyPW5vCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwordm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygieGdldGJ2OyB2cGJyb2FkY2FzdGIgJSV4bW03LCUleW1tMVxuXHQiOjo6ImNjIik7CisgICAgICAgICAgICB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyIiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyIiA+JjY7IH0KK2lmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eDIiID0gInllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX0lOTElORV9BU01fQVZYMiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQk1JMiBpbnN0cnVjdGlvbnMKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBCTUkyIGluc3RydWN0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEJNSTIgaW5zdHJ1Y3Rpb25zLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfZ2NjX2lubGluZV9hc21fYm1pMis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRtcGlfY3B1X2FyY2giICE9ICJ4ODYiIDsgdGhlbgorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYm1pMj0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9ibWkyPW5vCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwordm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygicm9yeGwgXCQyMywgJSVlYXgsICUlZWR4XFxuXFx0Ijo6OiJtZW1vcnkiKTsKKyAgICAgICAgICAgIH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX2JtaTI9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY3J5X2N2X2djY19pbmxpbmVfYXNtX2JtaTIiID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX2JtaTIiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYm1pMiIgPSAieWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HQ0NfSU5MSU5FX0FTTV9CTUkyIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgYXNzZW1ibGVyIHN1cHBvcnRzIGZlYXR1cmVzIG5lZWRlZCBmb3Igb3VyIGFtZDY0CisjIGltcGxlbWVudGF0aW9ucworIworaWYgdGVzdCAkYW1kNjRfYXNfZmVhdHVyZV9kZXRlY3Rpb24gPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgR0NDIGFzc2VtYmxlciBpcyBjb21wYXRpYmxlIGZvciBhbWQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBHQ0MgYXNzZW1ibGVyIGlzIGNvbXBhdGlibGUgZm9yIGFtZDY0IGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2djY19hbWQ2NF9wbGF0Zm9ybV9hc19vays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRtcGlfY3B1X2FyY2giICE9ICJ4ODYiIDsgdGhlbgorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2FtZDY0X3BsYXRmb3JtX2FzX29rPSJuL2EiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnY3J5X2N2X2djY19hbWQ2NF9wbGF0Zm9ybV9hc19vaz1ubworICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK19fYXNtX18oCisgICAgICAgICAgICAgICAgLyogVGVzdCBpZiAnLnR5cGUnIGFuZCAnLnNpemUnIGFyZSBzdXBwb3J0ZWQuICAqLworICAgICAgICAgICAgICAgIC8qIFRoZXNlIHdvcmsgb25seSBvbiBFTEYgdGFyZ2V0cy4gKi8KKwkJLyogVE9ETzogYWRkIENPRkYgKG1pbmd3NjQsIGN5Z3dpbjY0KSBzdXBwb3J0IHRvIGFzc2VtYmx5CisgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb25zLiAgTWluZ3c2NC9jeWd3aW42NCBhbHNvIHJlcXVpcmUgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAqIHdvcmsgYmVjYXVzZSB0aGV5IHVzZSBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9uLiAqLworCQkiYXNtZnVuYzpcblx0IgorICAgICAgICAgICAgICAgICIuc2l6ZSBhc21mdW5jLC4tYXNtZnVuYztcblx0IgorICAgICAgICAgICAgICAgICIudHlwZSBhc21mdW5jLEBmdW5jdGlvbjtcblx0IgorICAgICAgICAgICAgKTsKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19hbWQ2NF9wbGF0Zm9ybV9hc19vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjcnlfY3ZfZ2NjX2FtZDY0X3BsYXRmb3JtX2FzX29rIiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2siID4mNjsgfQorICBpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2siID0gInllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09NUEFUSUJMRV9HQ0NfQU1ENjRfUExBVEZPUk1fQVMgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIEdDQyBhc3NlbWJsZXIgc3VwcG9ydHMgZmVhdHVyZXMgbmVlZGVkIGZvciBhc3NlbWJseQorIyBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgSW50ZWwgc3ludGF4CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgR0NDIGFzc2VtYmxlciBpcyBjb21wYXRpYmxlIGZvciBJbnRlbCBzeW50YXggYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgR0NDIGFzc2VtYmxlciBpcyBjb21wYXRpYmxlIGZvciBJbnRlbCBzeW50YXggYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zLi4uICIgPiY2OyB9CitpZiAke2djcnlfY3ZfZ2NjX3BsYXRmb3JtX2FzX29rX2Zvcl9pbnRlbF9zeW50YXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19wbGF0Zm9ybV9hc19va19mb3JfaW50ZWxfc3ludGF4PSJuL2EiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnY3J5X2N2X2djY19wbGF0Zm9ybV9hc19va19mb3JfaW50ZWxfc3ludGF4PW5vCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworX19hc21fXygKKyAgICAgICAgICAgICAgICAiLmludGVsX3N5bnRheCBub3ByZWZpeFxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgeG1tMSwgeG1tNztcblx0IgorICAgICAgICAgICAgICAgIC8qIEludGVsIHN5bnRheCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVzZSBHQVMgbWFjcm9zLCBzbyBjaGVjaworICAgICAgICAgICAgICAgICAqIGZvciB0aGVtIGhlcmUuICovCisgICAgICAgICAgICAgICAgIlZBTF9BID0geG1tNFxuXHQiCisgICAgICAgICAgICAgICAgIlZBTF9CID0geG1tMlxuXHQiCisgICAgICAgICAgICAgICAgIi5tYWNybyBTRVRfVkFMX0EgcDFcblx0IgorICAgICAgICAgICAgICAgICIgIFZBTF9BID0gXFxcXHAxIFxuXHQiCisgICAgICAgICAgICAgICAgIi5lbmRtXG5cdCIKKyAgICAgICAgICAgICAgICAiLm1hY3JvIFNFVF9WQUxfQiBwMVxuXHQiCisgICAgICAgICAgICAgICAgIiAgVkFMX0IgPSBcXFxccDEgXG5cdCIKKyAgICAgICAgICAgICAgICAiLmVuZG1cblx0IgorICAgICAgICAgICAgICAgICJ2bW92ZHFhIFZBTF9BLCBWQUxfQjtcblx0IgorICAgICAgICAgICAgICAgICJTRVRfVkFMX0EgZWF4XG5cdCIKKyAgICAgICAgICAgICAgICAiU0VUX1ZBTF9CIGVicFxuXHQiCisgICAgICAgICAgICAgICAgImFkZCBWQUxfQSwgVkFMX0I7XG5cdCIKKyAgICAgICAgICAgICAgICAiYWRkIFZBTF9CLCAwYjEwMTAxO1xuXHQiCisgICAgICAgICAgICApOworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdjcnlfY3ZfZ2NjX3BsYXRmb3JtX2FzX29rX2Zvcl9pbnRlbF9zeW50YXg9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY3J5X2N2X2djY19wbGF0Zm9ybV9hc19va19mb3JfaW50ZWxfc3ludGF4IiA+JjUKKyRhc19lY2hvICIkZ2NyeV9jdl9nY2NfcGxhdGZvcm1fYXNfb2tfZm9yX2ludGVsX3N5bnRheCIgPiY2OyB9CitpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfcGxhdGZvcm1fYXNfb2tfZm9yX2ludGVsX3N5bnRheCIgPSAieWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTlRFTF9TWU5UQVhfUExBVEZPUk1fQVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIEFSTXY2IG9yIG5ld2VyIGFyY2hpdGVjdHVyZQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIEFSTXY2IG9yIG5ld2VyIGFyY2hpdGVjdHVyZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIEFSTXY2IG9yIG5ld2VyIGFyY2hpdGVjdHVyZS4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2NjX2FybV9hcmNoX2lzX3Y2Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gImFybSIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9jY19hcm1fYXJjaF9pc192Nj0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmIGRlZmluZWQoX19hcm1fXykgJiYgXAorICAgICAgICAgICAgICgoZGVmaW5lZChfX0FSTV9BUkNIKSAmJiBfX0FSTV9BUkNIID49IDYpIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNl9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNkpfXykgXAorICAgICAgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82Wl9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpLX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNktfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZUMl9fKSBcCisgICAgICAgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1JfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0VNX18pKQorICAgICAgICAgICAgeWVzCisgICAgICAgICAgICNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGdjcnlfY3ZfY2NfYXJtX2FyY2hfaXNfdjY9eWVzCitlbHNlCisgIGdjcnlfY3ZfY2NfYXJtX2FyY2hfaXNfdjY9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NyeV9jdl9jY19hcm1fYXJjaF9pc192NiIgPiY1CiskYXNfZWNobyAiJGdjcnlfY3ZfY2NfYXJtX2FyY2hfaXNfdjYiID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfY2NfYXJtX2FyY2hfaXNfdjYiID0gInllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVJNX0FSQ0hfVjYgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIE5FT04gaW5zdHJ1Y3Rpb25zCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgTkVPTiBpbnN0cnVjdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBORU9OIGluc3RydWN0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAiYXJtIiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb249Im4vYSIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fbmVvbj1ubworICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK19fYXNtX18oCisgICAgICAgICAgICAgICAgIi5zeW50YXggdW5pZmllZFxuXHQiCisgICAgICAgICAgICAgICAgIi50aHVtYlxuXHQiCisgICAgICAgICAgICAgICAgIi5mcHUgbmVvblxuXHQiCisgICAgICAgICAgICAgICAgInZsZDEuNjQgeyVxMC0lcTF9LCBbJXIwXSE7XG5cdCIKKyAgICAgICAgICAgICAgICAidnJldjY0LjggJXEwLCAlcTM7XG5cdCIKKyAgICAgICAgICAgICAgICAidmFkZC51NjQgJXEwLCAlcTE7XG5cdCIKKyAgICAgICAgICAgICAgICAidmFkZC5zNjQgJWQzLCAlZDIsICVkMztcblx0IgorICAgICAgICAgICAgICAgICk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb249eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb24iID4mNQorJGFzX2VjaG8gIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb24iID4mNjsgfQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fbmVvbiIgPSAieWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HQ0NfSU5MSU5FX0FTTV9ORU9OIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLiAjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZm9yIGFjX2Z1bmMgaW4gdnByaW50ZgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ2cHJpbnRmIiAiYWNfY3ZfZnVuY192cHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3ZwcmludGYiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9WUFJJTlRGIDEKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJfZG9wcm50IiAiYWNfY3ZfZnVuY19fZG9wcm50IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX19kb3BybnQiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRE9QUk5UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitmaQorZG9uZQorCisKKyMgV2UgaGF2ZSByZXBsYWNlbWVudHMgZm9yIHRoZXNlIGluIHNyYy9taXNzaW5nLXN0cmluZy5jCitmb3IgYWNfZnVuYyBpbiBzdHBjcHkgc3RyY2FzZWNtcAorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyMgV2UgaGF2ZSByZXBsYWNlbWVudHMgZm9yIHRoZXNlIGluIHNyYy9nMTBsaWIuaAorZm9yIGFjX2Z1bmMgaW4gc3RydG91bCBtZW1tb3ZlIHN0cmljbXAgYXRleGl0IHJhaXNlCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworIyBPdGhlciBjaGVja3MKK2ZvciBhY19mdW5jIGluIHN0cmVycm9yIHJhbmQgbW1hcCBnZXRwYWdlc2l6ZSBzeXNjb25mIHdhaXRwaWQgd2FpdDQKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBnZXR0aW1lb2ZkYXkgZ2V0cnVzYWdlIGdldGhydGltZSBjbG9ja19nZXR0aW1lIHN5c2xvZworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK2ZvciBhY19mdW5jIGluIGZjbnRsIGZ0cnVuY2F0ZSBmbG9ja2ZpbGUKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyBmb3IgYWNfZnVuYyBpbiBtbG9jaworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbG9jayIgImFjX2N2X2Z1bmNfbWxvY2siCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbWxvY2siID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NTE9DSyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX21sb2NrIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvbW1hbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvbW1hbi5oIiAiYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICAgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAjIEFkZCBsaWJydCB0byBMSUJTOgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbWVtbGsgaW4gLWxydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbWVtbGsgaW4gLWxydC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcnRfbWVtbGsrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJ0ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBtZW1sayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1lbWxrICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ydF9tZW1saz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3J0X21lbWxrPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9tZW1sayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ydF9tZW1sayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydF9tZW1sayIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlJUIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scnQgJExJQlMiCisKK2ZpCisKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtbG9jayBpcyBpbiBzeXMvbW1hbi5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWxvY2sgaXMgaW4gc3lzL21tYW4uaC4uLiAiID4mNjsgfQoraWYgJHtnbnVwZ19jdl9tbG9ja19pc19pbl9zeXNfbW1hbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKyAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworaW50IGk7CisKKy8qIGdsaWJjIGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAqIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5CisgKiBuYW1lZCBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lCisgKiBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX21sb2NrKSB8fCBkZWZpbmVkIChfX3N0dWJfX19tbG9jaykKK2Nob2tlIG1lCisjZWxzZQorbWxvY2soJmksIDQpOworI2VuZGlmCis7IHJldHVybiAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ251cGdfY3ZfbWxvY2tfaXNfaW5fc3lzX21tYW49eWVzCitlbHNlCisgIGdudXBnX2N2X21sb2NrX2lzX2luX3N5c19tbWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdudXBnX2N2X21sb2NrX2lzX2luX3N5c19tbWFuIiA+JjUKKyRhc19lY2hvICIkZ251cGdfY3ZfbWxvY2tfaXNfaW5fc3lzX21tYW4iID4mNjsgfQorICAgICAgICAgICAgaWYgdGVzdCAiJGdudXBnX2N2X21sb2NrX2lzX2luX3N5c19tbWFuIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTUxPQ0sgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19tbG9jayIgPSAieWVzIjsgdGhlbgorICAgICAgICBmb3IgYWNfZnVuYyBpbiBzeXNjb25mIGdldHBhZ2VzaXplCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWxvY2sgaXMgYnJva2VuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWxvY2sgaXMgYnJva2VuLi4uICIgPiY2OyB9CisgICAgICAgICAgaWYgJHtnbnVwZ19jdl9oYXZlX2Jyb2tlbl9tbG9jays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ251cGdfY3ZfaGF2ZV9icm9rZW5fbWxvY2s9ImFzc3VtZS1ubyIKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworaW50IG1haW4oKQoreworICAgIGNoYXIgKnBvb2w7CisgICAgaW50IGVycjsKKyAgICBsb25nIGludCBwZ3NpemU7CisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfUEFHRVNJWkUpCisgICAgcGdzaXplID0gc3lzY29uZiAoX1NDX1BBR0VTSVpFKTsKKyNlbGlmIGRlZmluZWQgKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKKyNlbHNlCisgICAgcGdzaXplID0gLTE7CisjZW5kaWYKKworICAgIGlmIChwZ3NpemUgPT0gLTEpCisgICAgICBwZ3NpemUgPSA0MDk2OworCisgICAgcG9vbCA9IG1hbGxvYyggNDA5NiArIHBnc2l6ZSApOworICAgIGlmKCAhcG9vbCApCisgICAgICAgIHJldHVybiAyOworICAgIHBvb2wgKz0gKHBnc2l6ZSAtICgobG9uZyBpbnQpcG9vbCAlIHBnc2l6ZSkpOworCisgICAgZXJyID0gbWxvY2soIHBvb2wsIDQwOTYgKTsKKyAgICBpZiggIWVyciB8fCBlcnJubyA9PSBFUEVSTSApCisgICAgICAgIHJldHVybiAwOyAvKiBva2F5ICovCisKKyAgICByZXR1cm4gMTsgIC8qIGhtbW0gKi8KK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbnVwZ19jdl9oYXZlX2Jyb2tlbl9tbG9jaz0ibm8iCitlbHNlCisgIGdudXBnX2N2X2hhdmVfYnJva2VuX21sb2NrPSJ5ZXMiCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQorCisgICAgICAgICBpZiB0ZXN0ICIkZ251cGdfY3ZfaGF2ZV9icm9rZW5fbWxvY2siID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CUk9LRU5fTUxPQ0sgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgdGVzdCAiJGdudXBnX2N2X2hhdmVfYnJva2VuX21sb2NrIiA9ICJubyI7IHRoZW4KKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYXNzdW1pbmcgbm8iID4mNQorJGFzX2VjaG8gImFzc3VtaW5nIG5vIiA+JjY7IH0KKyAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgIGZpCisKKworIworIyBSZXBsYWNlbWVudCBmdW5jdGlvbnMuCisjCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwaWQiICJhY19jdl9mdW5jX2dldHBpZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwaWQiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUUElEIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGdldHBpZC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0cGlkLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiY2xvY2siICJhY19jdl9mdW5jX2Nsb2NrIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Nsb2NrIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NMT0NLIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGNsb2NrLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBjbG9jay4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKKworCisKKyMKKyMgQ2hlY2sgd2V0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byBsaW5rIGFnYWluc3QgbGliZGwuCisjCitETF9MSUJTPSIiCitpZiB0ZXN0ICIkdXNlX2htYWNfYmluYXJ5X2NoZWNrIiA9IHllcyA7IHRoZW4KKyAgX2djcnlfc2F2ZV9saWJzPSIkTElCUyIKKyAgTElCUz0iIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGxvcGVuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGxvcGVuLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgYyBkbDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9kbG9wZW49JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2Rsb3Blbj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9kbG9wZW4iID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZGxvcGVuCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKKyAgRExfTElCUz0kTElCUworICBMSUJTPSIkX2djcnlfc2F2ZV9saWJzIgorICBMSUJHQ1JZUFRfQ09ORklHX0xJQlM9IiR7TElCR0NSWVBUX0NPTkZJR19MSUJTfSAke0RMX0xJQlN9IgorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBsaW5rIHdpdGggYSBwdGhyZWFkcyBsaWJyYXJ5LgorIworaWYgdGVzdCAieCRMSUJUSFJFQUQiICE9IHg7IHRoZW4KKyAgTElCR0NSWVBUX0NPTkZJR19MSUJTPSIke0xJQkdDUllQVF9DT05GSUdfTElCU30gJHtMSUJUSFJFQUR9IgorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSBMaW51eCBjYXBhYmlsaXRpZXMgYXMgcmVxdWVzdGVkLgorIworaWYgdGVzdCAiJHVzZV9jYXBhYmlsaXRpZXMiID0gInllcyIgOyB0aGVuCit1c2VfY2FwYWJpbGl0aWVzPW5vCitmb3IgYWNfaGVhZGVyIGluIHN5cy9jYXBhYmlsaXR5LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9jYXBhYmlsaXR5LmgiICJhY19jdl9oZWFkZXJfc3lzX2NhcGFiaWxpdHlfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2NhcGFiaWxpdHlfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19DQVBBQklMSVRZX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfY2FwYWJpbGl0eV9oIiA9ICJ5ZXMiIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjYXBfaW5pdCBpbiAtbGNhcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY2FwX2luaXQgaW4gLWxjYXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2NhcF9jYXBfaW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY2FwICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjYXBfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNhcF9pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9jYXBfY2FwX2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9jYXBfY2FwX2luaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2NhcF9jYXBfaW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jYXBfY2FwX2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfY2FwX2NhcF9pbml0IiA9IHh5ZXM7IHRoZW4gOgorICBhY19uZWVkX2xpYmNhcD0xCitmaQorCisgIGlmIHRlc3QgIiRhY19jdl9saWJfY2FwX2NhcF9pbml0IiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9DQVBBQklMSVRJRVMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgTElCUz0iJExJQlMgLWxjYXAiCisgICAgIHVzZV9jYXBhYmlsaXRpZXM9eWVzCisgIGZpCitmaQoraWYgdGVzdCAiJHVzZV9jYXBhYmlsaXRpZXMiID0gIm5vIiA7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisqKioKKyoqKiBUaGUgdXNlIG9mIGNhcGFiaWxpdGllcyBvbiB0aGlzIHN5c3RlbSBpcyBub3QgcG9zc2libGUuCisqKiogWW91IG5lZWQgYSByZWNlbnQgTGludXgga2VybmVsIGFuZCBzb21lIHBhdGNoZXM6CisqKiogICBmY2Fwcy0yLjIuOS05OTA2MTAucGF0Y2ggICAgICAoa2VybmVsIHBhdGNoIGZvciAyLjIuOSkKKyoqKiAgIGZjYXAtbW9kdWxlLTk5MDYxMy50YXIuZ3ogICAgIChrZXJuZWwgbW9kdWxlKQorKioqICAgbGliY2FwLTEuOTIudGFyLmd6ICAgICAgICAgICAgKHVzZXIgbW9kZSBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMpCisqKiogQW5kIHlvdSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggQ09ORklHX1ZGU19DQVBfUExVR0lOCisqKiogc2V0IChmaWxlc3lzdGVtcyBtZW51KS4gQmUgd2FybmVkOiBUaGlzIGNvZGUgaXMgKnJlYWxseSogQUxQSEEuCisqKioiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzoKKyoqKgorKioqIFRoZSB1c2Ugb2YgY2FwYWJpbGl0aWVzIG9uIHRoaXMgc3lzdGVtIGlzIG5vdCBwb3NzaWJsZS4KKyoqKiBZb3UgbmVlZCBhIHJlY2VudCBMaW51eCBrZXJuZWwgYW5kIHNvbWUgcGF0Y2hlczoKKyoqKiAgIGZjYXBzLTIuMi45LTk5MDYxMC5wYXRjaCAgICAgIChrZXJuZWwgcGF0Y2ggZm9yIDIuMi45KQorKioqICAgZmNhcC1tb2R1bGUtOTkwNjEzLnRhci5neiAgICAgKGtlcm5lbCBtb2R1bGUpCisqKiogICBsaWJjYXAtMS45Mi50YXIuZ3ogICAgICAgICAgICAodXNlciBtb2RlIGxpYnJhcnkgYW5kIHV0aWxpdGllcykKKyoqKiBBbmQgeW91IGhhdmUgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwgd2l0aCBDT05GSUdfVkZTX0NBUF9QTFVHSU4KKyoqKiBzZXQgKGZpbGVzeXN0ZW1zIG1lbnUpLiBCZSB3YXJuZWQ6IFRoaXMgY29kZSBpcyAqcmVhbGx5KiBBTFBIQS4KKyoqKiIgPiYyO30KK2ZpCitmaQorCisjIENoZWNrIHdoZXRoZXIgYSByYW5kb20gZGV2aWNlIGlzIGF2YWlsYWJsZS4KK2lmIHRlc3QgIiR0cnlfZGV2X3JhbmRvbSIgPSB5ZXMgOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmFuZG9tIGRldmljZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcmFuZG9tIGRldmljZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX2Rldl9yYW5kb20rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1yICIkTkFNRV9PRl9ERVZfUkFORE9NIiAmJiB0ZXN0IC1yICIkTkFNRV9PRl9ERVZfVVJBTkRPTSIgOyB0aGVuCisgICAgICBhY19jdl9oYXZlX2Rldl9yYW5kb209eWVzOyBlbHNlIGFjX2N2X2hhdmVfZGV2X3JhbmRvbT1ubzsgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfZGV2X3JhbmRvbSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfZGV2X3JhbmRvbSIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X3JhbmRvbSIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ERVZfUkFORE9NIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKK2Vsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByYW5kb20gZGV2aWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciByYW5kb20gZGV2aWNlLi4uICIgPiY2OyB9CisgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGhhcyBiZWVuIGRpc2FibGVkIiA+JjUKKyRhc19lY2hvICJoYXMgYmVlbiBkaXNhYmxlZCIgPiY2OyB9CitmaQorCisjIEZpZ3VyZSBvdXQgdGhlIHJhbmRvbSBtb2R1bGVzIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCitpZiB0ZXN0ICIkcmFuZG9tIiA9ICJkZWZhdWx0IjsgdGhlbgorCisgICAgIyBTZWxlY3QgZGVmYXVsdCB2YWx1ZS4KKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tIiA9IHllczsgdGhlbgorICAgICAgICAjIFRyeSBMaW51eGlzaCByYW5kb20gZGV2aWNlLgorICAgICAgICByYW5kb21fbW9kdWxlcz0ibGludXgiCisgICAgZWxzZQorICAgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgICAqLSotbWluZ3czMmNlKikKKyAgICAgICAgICAjIFdpbmRvd3NDRSByYW5kb20gZGV2aWNlLgorICAgICAgICAgIHJhbmRvbV9tb2R1bGVzPSJ3MzJjZSIKKyAgICAgICAgICA7OworICAgICAgICAqLSotbWluZ3czMip8Ki0qLWN5Z3dpbiopCisgICAgICAgICAgIyBXaW5kb3dzIHJhbmRvbSBkZXZpY2UuCisgICAgICAgICAgcmFuZG9tX21vZHVsZXM9InczMiIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgQnVpbGQgZXZlcnl0aGluZywgYWxsb3cgdG8gc2VsZWN0IGF0IHJ1bnRpbWUuCisgICAgICAgICAgcmFuZG9tX21vZHVsZXM9IiRhdXRvX3JhbmRvbV9tb2R1bGVzIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorZWxzZQorICAgIGlmIHRlc3QgIiRyYW5kb20iID0gImF1dG8iOyB0aGVuCisgICAgICAgICMgQnVpbGQgZXZlcnl0aGluZywgYWxsb3cgdG8gc2VsZWN0IGF0IHJ1bnRpbWUuCisgICAgICAgIHJhbmRvbV9tb2R1bGVzPSIkYXV0b19yYW5kb21fbW9kdWxlcyIKKyAgICBlbHNlCisgICAgICAgIHJhbmRvbV9tb2R1bGVzPSIkcmFuZG9tIgorICAgIGZpCitmaQorCisKKyMKKyMgT3RoZXIgZGVmaW5lcworIworaWYgdGVzdCBubyA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIElTX0RFVkVMT1BNRU5UX1ZFUlNJT04gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIGlmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgPSB4eWVzOyB0aGVuCisgIENST1NTX0NPTVBJTElOR19UUlVFPQorICBDUk9TU19DT01QSUxJTkdfRkFMU0U9JyMnCitlbHNlCisgIENST1NTX0NPTVBJTElOR19UUlVFPScjJworICBDUk9TU19DT01QSUxJTkdfRkFMU0U9CitmaQorCisKKworIyBUaGlzIGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgc28gdGhlIGNvbXBpbGVyIGRvZXNuJ3QgcmVhcnJhbmdlCisjIHRoaW5ncyBhbmQgZWxpbWluYXRlIHZhcmlhYmxlcy4KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vcHRpbWl6YXRpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3B0aW1pemF0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3B0aW1pemF0aW9uOyBpZiB0ZXN0ICRlbmFibGV2YWwgPSBubyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9YGVjaG8gJENGTEFHUyB8IHNlZCAncy8tT1swLTldLy8nYAorICAgICAgICAgICAgICAgICAgICAgICBmaQorZmkKKworCisjIENGTEFHUyBtYW5nbGluZyB3aGVuIHVzaW5nIGdjYy4KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XYWxsIgorICAgIGlmIHRlc3QgIiRVU0VfTUFJTlRBSU5FUl9NT0RFIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV2Nhc3QtYWxpZ24gLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZm9ybWF0IC1Xbm8tZm9ybWF0LXkyayAtV2Zvcm1hdC1zZWN1cml0eSIKKworICAgICAgICAjIElmIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgaXMgc3VwcG9ydGVkIHdlIGNhbiBlbmFibGUgYQorICAgICAgICAjIGEgYnVuY2ggb2YgcmVhbGx5IHVzZWZ1bCB3YXJuaW5ncy4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnY2Mgc3VwcG9ydHMgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnY2Mgc3VwcG9ydHMgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycy4uLiAiID4mNjsgfQorICAgICAgICBfZ2NjX2NmbGFnc19zYXZlPSRDRkxBR1MKKyAgICAgICAgQ0ZMQUdTPSItV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgX2djY193b3B0PXllcworZWxzZQorICBfZ2NjX3dvcHQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfZ2NjX3dvcHQiID4mNQorJGFzX2VjaG8gIiRfZ2NjX3dvcHQiID4mNjsgfQorICAgICAgICBDRkxBR1M9JF9nY2NfY2ZsYWdzX3NhdmU7CisgICAgICAgIGlmIHRlc3QgeCIkX2djY193b3B0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XIC1XZXh0cmEgLVdiYWQtZnVuY3Rpb24tY2FzdCIKKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVd3cml0ZS1zdHJpbmdzIgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIKKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1zaWduLWNvbXBhcmUiCisgICAgICAgIGZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnY2Mgc3VwcG9ydHMgLVdwb2ludGVyLWFyaXRoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdjYyBzdXBwb3J0cyAtV3BvaW50ZXItYXJpdGguLi4gIiA+JjY7IH0KKyAgICAgICAgX2djY19jZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisgICAgICAgIENGTEFHUz0iLVdwb2ludGVyLWFyaXRoIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgX2djY193b3B0PXllcworZWxzZQorICBfZ2NjX3dvcHQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfZ2NjX3dvcHQiID4mNQorJGFzX2VjaG8gIiRfZ2NjX3dvcHQiID4mNjsgfQorICAgICAgICBDRkxBR1M9JF9nY2NfY2ZsYWdzX3NhdmU7CisgICAgICAgIGlmIHRlc3QgeCIkX2djY193b3B0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCIKKyAgICAgICAgZmkKKyAgICBmaQorCitmaQorCisjIENoZWNrIHdoZXRoZXIgYXMoMSkgc3VwcG9ydHMgYSBub2VleGVjc3RhY2sgZmVhdHVyZS4gIFRoaXMgdGVzdAorIyBpbmNsdWRlcyBhbiBvdmVycmlkZSBvcHRpb24uCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBub24gZXhjdXRhYmxlIHN0YWNrIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbm9uIGV4Y3V0YWJsZSBzdGFjayBzdXBwb3J0IGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5vZXhlY3N0YWNrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vZXhlY3N0YWNrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbm9leGVjc3RhY2s7IG5vZXhlY3N0YWNrX3N1cHBvcnQ9JGVuYWJsZXZhbAorZWxzZQorICBub2V4ZWNzdGFja19zdXBwb3J0PXllcworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRub2V4ZWNzdGFja19zdXBwb3J0IiA+JjUKKyRhc19lY2hvICIkbm9leGVjc3RhY2tfc3VwcG9ydCIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhc3NlbWJsZXIgc3VwcG9ydHMgLS1ub2V4ZWNzdGFjayBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhc3NlbWJsZXIgc3VwcG9ydHMgLS1ub2V4ZWNzdGFjayBvcHRpb24uLi4gIiA+JjY7IH0KK2lmICR7Y2xfY3ZfYXNfbm9leGVjc3RhY2srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKK3ZvaWQgZm9vKCkge30KK0VPRgorICBpZiB7IGFjX3RyeT0nJHtDQ30gJENGTEFHUyAkQ1BQRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgIC1TIC1vIGNvbmZ0ZXN0LnMgY29uZnRlc3QuYyA+L2Rldi9udWxsJworICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfSBcCisgICAgICYmIGdyZXAgLm5vdGUuR05VLXN0YWNrIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCBcCisgICAgICYmIHsgYWNfdHJ5PScke0NDQVN9ICRDQ0FTRkxBR1MgJENQUEZMQUdTIC1XYSwtLW5vZXhlY3N0YWNrCisgICAgICAgICAgICAgICAgICAgICAgIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QucyA+L2Rldi9udWxsJworICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfQorICB0aGVuCisgICAgY2xfY3ZfYXNfbm9leGVjc3RhY2s9eWVzCisgIGVsc2UKKyAgICBjbF9jdl9hc19ub2V4ZWNzdGFjaz1ubworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNsX2N2X2FzX25vZXhlY3N0YWNrIiA+JjUKKyRhc19lY2hvICIkY2xfY3ZfYXNfbm9leGVjc3RhY2siID4mNjsgfQorICBpZiB0ZXN0ICIkbm9leGVjc3RhY2tfc3VwcG9ydCIgPSB5ZXMgLWEgIiRjbF9jdl9hc19ub2V4ZWNzdGFjayIgPSB5ZXM7IHRoZW4KKwlOT0VYRUNTVEFDS19GTEFHUz0iLVdhLC0tbm9leGVjc3RhY2siCisgIGVsc2UKKyAgICAgICAgTk9FWEVDU1RBQ0tfRkxBR1M9CisgIGZpCisKKworCisKKworCisKKworCisKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBnY3J5cHQtY29uZiIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgQ29uY2x1c2lvbi4gIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQ2hlY2sgdGhhdCByZXF1ZXN0ZWQgZmVhdHVyZSBjYW4gYWN0dWFsbHkgYmUgdXNlZCBhbmQgZGVmaW5lCisjIEVOQUJMRV9mb29fU1VQUE9SVCBtYWNyb3MuCisKK2lmIHRlc3QgeCIkYWVzbmlzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgIGlmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX3Nzc2UzIiAhPSAieWVzIiA7IHRoZW4KKyAgICBhZXNuaXN1cHBvcnQ9Im5vICh1bnN1cHBvcnRlZCBieSBjb21waWxlcikiCisgIGZpCitmaQoraWYgdGVzdCB4IiRwY2xtdWxzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgIGlmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX3BjbG11bCIgIT0gInllcyIgOyB0aGVuCisgICAgcGNsbXVsc3VwcG9ydD0ibm8gKHVuc3VwcG9ydGVkIGJ5IGNvbXBpbGVyKSIKKyAgZmkKK2ZpCitpZiB0ZXN0IHgiJGF2eHN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgaWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4IiAhPSAieWVzIiA7IHRoZW4KKyAgICBhdnhzdXBwb3J0PSJubyAodW5zdXBwb3J0ZWQgYnkgY29tcGlsZXIpIgorICBmaQorZmkKK2lmIHRlc3QgeCIkYXZ4MnN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgaWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4MiIgIT0gInllcyIgOyB0aGVuCisgICAgYXZ4MnN1cHBvcnQ9Im5vICh1bnN1cHBvcnRlZCBieSBjb21waWxlcikiCisgIGZpCitmaQoraWYgdGVzdCB4IiRuZW9uc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9uZW9uIiAhPSAieWVzIiA7IHRoZW4KKyAgICBuZW9uc3VwcG9ydD0ibm8gKHVuc3VwcG9ydGVkIGJ5IGNvbXBpbGVyKSIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCIkYWVzbmlzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9BRVNOSV9TVVBQT1JUIDEiID4+Y29uZmRlZnMuaAorCitmaQoraWYgdGVzdCB4IiRwY2xtdWxzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QQ0xNVUxfU1VQUE9SVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK2lmIHRlc3QgeCIkYXZ4c3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfQVZYX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitpZiB0ZXN0IHgiJGF2eDJzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9BVlgyX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitpZiB0ZXN0IHgiJG5lb25zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9ORU9OX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitpZiB0ZXN0IHgiJHBhZGxvY2tzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QQURMT0NLX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitpZiB0ZXN0IHgiJGRybmdzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9EUk5HX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBEZWZpbmUgY29uZGl0aW9uYWwgc291cmNlcyBhbmQgY29uZmlnLmggc3ltYm9scyBkZXBlbmRpbmcgb24gdGhlCisjIHNlbGVjdGVkIGNpcGhlcnMsIHB1YmtleS1jaXBoZXJzLCBkaWdlc3RzLCBrZGZzLCBhbmQgcmFuZG9tIG1vZHVsZXMuCisKKworbmFtZT1hcmNmb3VyCitsaXN0PSRlbmFibGVkX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIjsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBhcmNmb3VyLmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfQVJDRk9VUiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPWJsb3dmaXNoCitsaXN0PSRlbmFibGVkX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgYmxvd2Zpc2gubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9CTE9XRklTSCAxIiA+PmNvbmZkZWZzLmgKKworCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgYmxvd2Zpc2gtYW1kNjQubG8iCisgICAgICA7OworICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGJsb3dmaXNoLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCitmaQorCisKK25hbWU9Y2FzdDUKK2xpc3Q9JGVuYWJsZWRfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYXN0NS5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0NBU1Q1IDEiID4+Y29uZmRlZnMuaAorCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYXN0NS1hbWQ2NC5sbyIKKyAgICAgIDs7CisgICAgICBhcm0qLSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgY2FzdDUtYXJtLmxvIgorICAgICAgOzsKKyAgIGVzYWMKK2ZpCisKKworbmFtZT1kZXMKK2xpc3Q9JGVuYWJsZWRfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBkZXMubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9ERVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworbmFtZT1hZXMKK2xpc3Q9JGVuYWJsZWRfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyByaWpuZGFlbC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0FFUyAxIiA+PmNvbmZkZWZzLmgKKworCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgcmlqbmRhZWwtYW1kNjQubG8iCisgICAgICA7OworICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHJpam5kYWVsLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCitmaQorCisKK25hbWU9dHdvZmlzaAorbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHR3b2Zpc2gubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9UV09GSVNIIDEiID4+Y29uZmRlZnMuaAorCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyB0d29maXNoLWFtZDY0LmxvIgorICAgICAgOzsKKyAgICAgIGFybSotKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyB0d29maXNoLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCitmaQorCisKK25hbWU9c2VycGVudAorbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNlcnBlbnQubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9TRVJQRU5UIDEiID4+Y29uZmRlZnMuaAorCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBTU0UyIGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNlcnBlbnQtc3NlMi1hbWQ2NC5sbyIKKyAgICAgIDs7CisgICBlc2FjCisKKyAgIGlmIHRlc3QgeCIkYXZ4MnN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgICAgICMgQnVpbGQgd2l0aCB0aGUgQVZYMiBpbXBsZW1lbnRhdGlvbgorICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzZXJwZW50LWF2eDItYW1kNjQubG8iCisgICBmaQorCisgICBpZiB0ZXN0IHgiJG5lb25zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAjIEJ1aWxkIHdpdGggdGhlIE5FT04gaW1wbGVtZW50YXRpb24KKyAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgc2VycGVudC1hcm12Ny1uZW9uLmxvIgorICAgZmkKK2ZpCisKKworbmFtZT1yZmMyMjY4CitsaXN0PSRlbmFibGVkX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgcmZjMjI2OC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1JGQzIyNjggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworbmFtZT1zZWVkCitsaXN0PSRlbmFibGVkX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgc2VlZC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NFRUQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworbmFtZT1jYW1lbGxpYQorbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGNhbWVsbGlhLmxvIGNhbWVsbGlhLWdsdWUubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9DQU1FTExJQSAxIiA+PmNvbmZkZWZzLmgKKworCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGNhbWVsbGlhLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCisKKyAgIGlmIHRlc3QgeCIkYXZ4c3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICAgICAgaWYgdGVzdCB4IiRhZXNuaXN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBBRVMtTkkvQVZYIGltcGxlbWVudGF0aW9uCisgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgY2FtZWxsaWEtYWVzbmktYXZ4LWFtZDY0LmxvIgorICAgICAgZmkKKyAgIGZpCisKKyAgIGlmIHRlc3QgeCIkYXZ4MnN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgICAgIGlmIHRlc3QgeCIkYWVzbmlzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgQUVTLU5JL0FWWDIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYW1lbGxpYS1hZXNuaS1hdngyLWFtZDY0LmxvIgorICAgICAgZmkKKyAgIGZpCitmaQorCisKK25hbWU9aWRlYQorbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGlkZWEubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9JREVBIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK25hbWU9c2Fsc2EyMAorbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNhbHNhMjAubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9TQUxTQTIwIDEiID4+Y29uZmRlZnMuaAorCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzYWxzYTIwLWFtZDY0LmxvIgorICAgICAgOzsKKyAgIGVzYWMKKworICAgaWYgdGVzdCB4IiRuZW9uc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICAgICAjIEJ1aWxkIHdpdGggdGhlIE5FT04gaW1wbGVtZW50YXRpb24KKyAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzYWxzYTIwLWFybXY3LW5lb24ubG8iCisgICBmaQorZmkKKworCituYW1lPWdvc3QyODE0NworbGlzdD0kZW5hYmxlZF9jaXBoZXJzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGdvc3QyODE0Ny5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0dPU1QyODE0NyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPWRzYQorbGlzdD0kZW5hYmxlZF9wdWJrZXlfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1BVQktFWV9DSVBIRVJTPSIkR0NSWVBUX1BVQktFWV9DSVBIRVJTIGRzYS5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0RTQSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPXJzYQorbGlzdD0kZW5hYmxlZF9wdWJrZXlfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1BVQktFWV9DSVBIRVJTPSIkR0NSWVBUX1BVQktFWV9DSVBIRVJTIHJzYS5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1JTQSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPWVsZ2FtYWwKK2xpc3Q9JGVuYWJsZWRfcHVia2V5X2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9QVUJLRVlfQ0lQSEVSUz0iJEdDUllQVF9QVUJLRVlfQ0lQSEVSUyBlbGdhbWFsLmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfRUxHQU1BTCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPWVjYworbGlzdD0kZW5hYmxlZF9wdWJrZXlfY2lwaGVycworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1BVQktFWV9DSVBIRVJTPSIkR0NSWVBUX1BVQktFWV9DSVBIRVJTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjLmxvIGVjYy1jdXJ2ZXMubG8gZWNjLW1pc2MubG8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICBlY2MtZWNkc2EubG8gZWNjLWVkZHNhLmxvIGVjYy1nb3N0LmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfRUNDIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK25hbWU9Y3JjCitsaXN0PSRlbmFibGVkX2RpZ2VzdHMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgY3JjLmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfQ1JDIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK25hbWU9Z29zdHIzNDExLTk0CitsaXN0PSRlbmFibGVkX2RpZ2VzdHMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgICMgR09TVCBSIDM0LjExLTk0IGludGVybmFsbHkgdXNlcyBHT1NUIDI4MTQ3LTg5CisKK25hbWU9Z29zdDI4MTQ3CitsaXN0PSRlbmFibGVkX2NpcGhlcnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworICAgaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgZ29zdHIzNDExLTk0LmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfR09TVF9SXzM0MTFfOTQgMSIgPj5jb25mZGVmcy5oCisKKyAgIGZpCitmaQorCisKK25hbWU9c3RyaWJvZworbGlzdD0kZW5hYmxlZF9kaWdlc3RzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHN0cmlib2cubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9HT1NUX1JfMzQxMV8xMiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPW1kNAorbGlzdD0kZW5hYmxlZF9kaWdlc3RzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIG1kNC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX01ENCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPW1kNQorbGlzdD0kZW5hYmxlZF9kaWdlc3RzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIG1kNS5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX01ENSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPXNoYTI1NgorbGlzdD0kZW5hYmxlZF9kaWdlc3RzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHNoYTI1Ni5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NIQTI1NiAxIiA+PmNvbmZkZWZzLmgKKworCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhMjU2LXNzc2UzLWFtZDY0LmxvIgorICAgICAgOzsKKyAgIGVzYWMKK2ZpCisKKworbmFtZT1zaGE1MTIKK2xpc3Q9JGVuYWJsZWRfZGlnZXN0cworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBzaGE1MTIubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9TSEE1MTIgMSIgPj5jb25mZGVmcy5oCisKKworICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgIHg4Nl82NC0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHNoYTUxMi1zc3NlMy1hbWQ2NC5sbyIKKyAgICAgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhNTEyLWF2eC1hbWQ2NC5sbyIKKyAgICAgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhNTEyLWF2eDItYm1pMi1hbWQ2NC5sbyIKKyAgICAgIDs7CisgICBlc2FjCisKKyAgIGlmIHRlc3QgeCIkbmVvbnN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgICAgIyBCdWlsZCB3aXRoIHRoZSBORU9OIGltcGxlbWVudGF0aW9uCisgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhNTEyLWFybXY3LW5lb24ubG8iCisgICBmaQorZmkKKworCituYW1lPXRpZ2VyCitsaXN0PSRlbmFibGVkX2RpZ2VzdHMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgdGlnZXIubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9USUdFUiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPXdoaXJscG9vbAorbGlzdD0kZW5hYmxlZF9kaWdlc3RzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHdoaXJscG9vbC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1dISVJMUE9PTCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBybWQxNjAgYW5kIHNoYTEgc2hvdWxkIGJlIGluY2x1ZGVkIGFsd2F5cy4KK0dDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgcm1kMTYwLmxvIHNoYTEubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9STUQxNjAgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NIQTEgMSIgPj5jb25mZGVmcy5oCisKKworY2FzZSAiJHtob3N0fSIgaW4KKyAgeDg2XzY0LSotKikKKyAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBzaGExLXNzc2UzLWFtZDY0LmxvIgorICA7OworZXNhYworCisKK25hbWU9c2NyeXB0CitsaXN0PSRlbmFibGVkX2tkZnMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9LREZTPSIkR0NSWVBUX0tERlMgc2NyeXB0LmxvIgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfU0NSWVBUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK25hbWU9bGludXgKK2xpc3Q9JHJhbmRvbV9tb2R1bGVzCitmb3VuZD0wCisKK2ZvciBuIGluICRsaXN0OyBkbworICBpZiB0ZXN0ICJ4JG5hbWUiID0gIngkbiI7IHRoZW4KKyAgICBmb3VuZD0xCisgIGZpCitkb25lCisKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfUkFORE9NPSIkR0NSWVBUX1JBTkRPTSBybmRsaW51eC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1JORExJTlVYIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK25hbWU9dW5peAorbGlzdD0kcmFuZG9tX21vZHVsZXMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9SQU5ET009IiRHQ1JZUFRfUkFORE9NIHJuZHVuaXgubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9STkRVTklYIDEiID4+Y29uZmRlZnMuaAorCisgICBwcmludF9lZ2Rfbm90aWNlPXllcworZmkKKworCituYW1lPWVnZAorbGlzdD0kcmFuZG9tX21vZHVsZXMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9SQU5ET009IiRHQ1JZUFRfUkFORE9NIHJuZGVnZC5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1JOREVHRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPXczMgorbGlzdD0kcmFuZG9tX21vZHVsZXMKK2ZvdW5kPTAKKworZm9yIG4gaW4gJGxpc3Q7IGRvCisgIGlmIHRlc3QgIngkbmFtZSIgPSAieCRuIjsgdGhlbgorICAgIGZvdW5kPTEKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9SQU5ET009IiRHQ1JZUFRfUkFORE9NIHJuZHczMi5sbyIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1JORFczMiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCituYW1lPXczMmNlCitsaXN0PSRyYW5kb21fbW9kdWxlcworZm91bmQ9MAorCitmb3IgbiBpbiAkbGlzdDsgZG8KKyAgaWYgdGVzdCAieCRuYW1lIiA9ICJ4JG4iOyB0aGVuCisgICAgZm91bmQ9MQorICBmaQorZG9uZQorCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1JBTkRPTT0iJEdDUllQVF9SQU5ET00gcm5kdzMyY2UubG8iCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9STkRXMzJDRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKworCisKKworTElCR0NSWVBUX0NJUEhFUlM9JGVuYWJsZWRfY2lwaGVycworCitMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlM9JGVuYWJsZWRfcHVia2V5X2NpcGhlcnMKKworTElCR0NSWVBUX0RJR0VTVFM9JGVuYWJsZWRfZGlnZXN0cworCisKKyMgRm9yIHByaW50aW5nIHRoZSBjb25maWd1cmF0aW9uIHdlIG5lZWQgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZgorIyBhbGdvcml0aG0gbmFtZXMuCit0bXA9YGVjaG8gIiRlbmFibGVkX2NpcGhlcnMiIHwgdHIgJyAnIDogYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExJQkdDUllQVF9DSVBIRVJTICIkdG1wIgorX0FDRU9GCisKK3RtcD1gZWNobyAiJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMiIHwgdHIgJyAnIDogYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyAiJHRtcCIKK19BQ0VPRgorCit0bXA9YGVjaG8gIiRlbmFibGVkX2RpZ2VzdHMiIHwgdHIgJyAnIDogYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExJQkdDUllQVF9ESUdFU1RTICIkdG1wIgorX0FDRU9GCisKK3RtcD1gZWNobyAiJGVuYWJsZWRfa2RmcyIgfCB0ciAnICcgOiBgCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTElCR0NSWVBUX0tERlMgIiR0bXAiCitfQUNFT0YKKworCisKKyMKKyMgRGVmaW5lIGNvbmRpdGlvbmFsIHNvdXJjZXMgZGVwZW5kaW5nIG9uIHRoZSB1c2VkIGhhcmR3YXJlIHBsYXRmb3JtLgorIyBOb3RlIHRoYXQgYWxsIHBvc3NpYmxlIG1vZHVsZXMgbXVzdCBhbHNvIGJlIGxpc3RlZCBpbgorIyBzcmMvTWFrZWZpbGUuYW0gKEVYVFJBX2xpYmdjcnlwdF9sYV9TT1VSQ0VTKS4KKyMKK0dDUllQVF9IV0ZfTU9EVUxFUz0KK2Nhc2UgIiRtcGlfY3B1X2FyY2giIGluCisgICAgIHg4NikKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDSF9YODYgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgR0NSWVBUX0hXRl9NT0RVTEVTPSJod2YteDg2LmxvIgorICAgICAgICA7OworICAgICBhbHBoYSkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDSF9BTFBIQSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgICBzcGFyYykKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDSF9TUEFSQyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgICBtaXBzKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9BUkNIX01JUFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICAgbTY4aykKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDSF9NNjhLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgIHBwYykKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDSF9QUEMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICAgYXJtKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9BUkNIX0FSTSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICBHQ1JZUFRfSFdGX01PRFVMRVM9Imh3Zi1hcm0ubG8iCisgICAgICAgIDs7Citlc2FjCisKKworCisjCisjIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkLgorIworQlVJTERfUkVWSVNJT049Ijg4MDRiOWEiCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAiJEJVSUxEX1JFVklTSU9OIgorX0FDRU9GCisKKworQlVJTERfRklMRVZFUlNJT049YGVjaG8gIiRWRVJTSU9OIiB8IHNlZCAncy9cKFswLTkuXSpcKS4qL1wxLi87cy9cLi8sL2cnYAorQlVJTERfRklMRVZFUlNJT049IiR7QlVJTERfRklMRVZFUlNJT059MzQ4MjAiCisKKworQlVJTERfVElNRVNUQU1QPWBkYXRlIC11ICslWS0lbS0lZFQlSDolTSswMDAwIDI+L2Rldi9udWxsIHx8IGRhdGVgCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBCVUlMRF9USU1FU1RBTVAgIiRCVUlMRF9USU1FU1RBTVAiCitfQUNFT0YKKworCisKKyMgQW5kIGNyZWF0ZSB0aGUgZmlsZXMuCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgbTQvTWFrZWZpbGUgY29tcGF0L01ha2VmaWxlIG1waS9NYWtlZmlsZSBjaXBoZXIvTWFrZWZpbGUgcmFuZG9tL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBzcmMvTWFrZWZpbGUgc3JjL2djcnlwdC5oIHNyYy9saWJnY3J5cHQtY29uZmlnIHNyYy92ZXJzaW9uaW5mby5yYyB0ZXN0cy9NYWtlZmlsZSIKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHRlc3RzL2hhc2h0ZXN0LTI1NmciCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKKyBpZiB0ZXN0IC1uICIkRVhFRVhUIjsgdGhlbgorICBhbV9fRVhFRVhUX1RSVUU9CisgIGFtX19FWEVFWFRfRkFMU0U9JyMnCitlbHNlCisgIGFtX19FWEVFWFRfVFJVRT0nIycKKyAgYW1fX0VYRUVYVF9GQUxTRT0KK2ZpCisKK2lmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1BSU5UQUlORVJfTU9ERVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NBU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9XMzJfU1lTVEVNX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfVzMyX1NZU1RFTV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfVzMyX1NZU1RFTVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9XMzJDRV9TWVNURU1fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9XMzJDRV9TWVNURU1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1czMkNFX1NZU1RFTVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAteiAiJHtVU0VfUkFORE9NX0RBRU1PTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUkFORE9NX0RBRU1PTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9SQU5ET01fREFFTU9OXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfT19GTEFHX01VTkdJTkdfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX09fRkxBR19NVU5HSU5HX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX09fRkxBR19NVU5HSU5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTERfVkVSU0lPTl9TQ1JJUFRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0xEX1ZFUlNJT05fU0NSSVBUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX0FERDFfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9BU01fTVBJSF9BREQxX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9BU01fTVBJSF9BREQxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX1NVQjFfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9BU01fTVBJSF9TVUIxX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9BU01fTVBJSF9TVUIxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX01VTDFfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9BU01fTVBJSF9NVUwxX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9BU01fTVBJSF9NVUwxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX01VTDJfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9BU01fTVBJSF9NVUwyX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9BU01fTVBJSF9NVUwyXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX01VTDNfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9BU01fTVBJSF9NVUwzX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9BU01fTVBJSF9NVUwzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX0xTSElGVF9UUlVFfSIgJiYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX0xTSElGVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1QSV9NT0RfQVNNX01QSUhfTFNISUZUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX1JTSElGVF9UUlVFfSIgJiYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9NUElIX1JTSElGVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1QSV9NT0RfQVNNX01QSUhfUlNISUZUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9VRElWX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQVNNX1VESVZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0FTTV9VRElWXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0FTTV9VRElWX1FSTk5EX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQVNNX1VESVZfUVJOTkRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0FTTV9VRElWX1FSTk5EXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9BREQxX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQ19NUElIX0FERDFfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0NfTVBJSF9BREQxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9TVUIxX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQ19NUElIX1NVQjFfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0NfTVBJSF9TVUIxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9NVUwxX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQ19NUElIX01VTDFfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0NfTVBJSF9NVUwxXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9NVUwyX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQ19NUElIX01VTDJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0NfTVBJSF9NVUwyXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9NVUwzX1RSVUV9IiAmJiB0ZXN0IC16ICIke01QSV9NT0RfQ19NUElIX01VTDNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNUElfTU9EX0NfTVBJSF9NVUwzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9MU0hJRlRfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9DX01QSUhfTFNISUZUX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9DX01QSUhfTFNISUZUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfTVBJSF9SU0hJRlRfVFJVRX0iICYmIHRlc3QgLXogIiR7TVBJX01PRF9DX01QSUhfUlNISUZUX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTVBJX01PRF9DX01QSUhfUlNISUZUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfVURJVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtNUElfTU9EX0NfVURJVl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1QSV9NT0RfQ19VRElWXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtNUElfTU9EX0NfVURJVl9RUk5ORF9UUlVFfSIgJiYgdGVzdCAteiAiJHtNUElfTU9EX0NfVURJVl9RUk5ORF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1QSV9NT0RfQ19VRElWX1FSTk5EXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtDUk9TU19DT01QSUxJTkdfVFJVRX0iICYmIHRlc3QgLXogIiR7Q1JPU1NfQ09NUElMSU5HX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQ1JPU1NfQ09NUElMSU5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQorCis6ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKK2FjX3dyaXRlX2ZhaWw9MAorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK2FjX2NzX3JlY2hlY2s9ZmFsc2UKK2FjX2NzX3NpbGVudD1mYWxzZQorCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcFInCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXBSJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcFInCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAoraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorYXNfdGVzdF94PSd0ZXN0IC14JworYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmdjcnlwdCAkYXNfbWUgMS42LjEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gbGlua3M6CiskY29uZmlnX2xpbmtzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVncy5nbnVwZy5vcmc+LiIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCithY19jc192ZXJzaW9uPSJcXAorbGliZ2NyeXB0IGNvbmZpZy5zdGF0dXMgMS42LjEKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitNS0RJUl9QPSckTUtESVJfUCcKK0FXSz0nJEFXSycKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKKworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VDSE89J2AkRUNITyAiJEVDSE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUEFUSF9TRVBBUkFUT1I9J2AkRUNITyAiJFBBVEhfU0VQQVJBVE9SIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiJGhvc3RfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdD0nYCRFQ0hPICIkaG9zdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIiRob3N0X29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIiRidWlsZF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZD0nYCRFQ0hPICIkYnVpbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiJGJ1aWxkX29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICIkU0VEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1hzZWQ9J2AkRUNITyAiJFhzZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICIkR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICIkRUdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRkdSRVA9J2AkRUNITyAiJEZHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIiRMRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICIkTk0iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTE5fUz0nYCRFQ0hPICIkTE5fUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICIkbWF4X2NtZF9sZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIiRhY19vYmpleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249J2AkRUNITyAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICIkQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiJGNvbXBpbGVyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICIkT1RPT0w2NCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiJGxpYmV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICIkd2l0aF9nbnVfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiJG5lZWRfdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2ZXJzaW9uX3R5cGU9J2AkRUNITyAiJHZlcnNpb25fdHlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICIkcnVucGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9J2AkRUNITyAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiJGxpYm5hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzb25hbWVfc3BlYz0nYCRFQ0hPICIkc29uYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5zdGFsbF9vdmVycmlkZV9tb2RlPSdgJEVDSE8gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfY21kcz0nYCRFQ0hPICIkZmluaXNoX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiJGZpbmlzaF9ldmFsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICIkaGFyZGNvZGVfaW50b19saWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiJHN0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEX1JDPSdgJEVDSE8gIiRMRF9SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZ19SQz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWdfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHNfUkM9J2AkRUNITyAiJHJlbG9hZF9jbWRzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHNfUkM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfUkM9J2AkRUNITyAiJGNvbXBpbGVyX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQ19SQz0nYCRFQ0hPICIkR0NDX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpY19SQz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bF9SQz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkM9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjX1JDPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3RfUkM9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdF9SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfUkM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzX1JDPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzX1JDPSdgJEVDSE8gIiRtb2R1bGVfY21kc19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHNfUkM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kc19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZF9SQz0nYCRFQ0hPICIkd2l0aF9nbnVfbGRfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkM9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnX1JDPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZ19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X1JDPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX1JDPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTF9SQz0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX1JDPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpY19SQz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGhfUkM9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlic19SQz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHNfUkM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19SQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzX1JDPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltc19SQz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltc19SQz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kc19SQz0nYCRFQ0hPICIkcHJlbGlua19jbWRzX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHNfUkM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfUkMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWNfUkM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbl9SQz0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX1JDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIEFTIFwKK0RMTFRPT0wgXAorT0JKRFVNUCBcCitTSEVMTCBcCitFQ0hPIFwKK1BBVEhfU0VQQVJBVE9SIFwKK1NFRCBcCitHUkVQIFwKK0VHUkVQIFwKK0ZHUkVQIFwKK0xEIFwKK05NIFwKK0xOX1MgXAorbHRfU1AyTkwgXAorbHRfTkwyU1AgXAorcmVsb2FkX2ZsYWcgXAorZGVwbGlic19jaGVja19tZXRob2QgXAorZmlsZV9tYWdpY19jbWQgXAorZmlsZV9tYWdpY19nbG9iIFwKK3dhbnRfbm9jYXNlZ2xvYiBcCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCitBUiBcCitBUl9GTEFHUyBcCithcmNoaXZlcl9saXN0X3NwZWMgXAorU1RSSVAgXAorUkFOTElCIFwKK0NDIFwKK0NGTEFHUyBcCitjb21waWxlciBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorbm1fZmlsZV9saXN0X3NwZWMgXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorbHRfcHJvZ19jb21waWxlcl9waWMgXAorbHRfcHJvZ19jb21waWxlcl93bCBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCituZWVkX2xvY2tzIFwKK01BTklGRVNUX1RPT0wgXAorRFNZTVVUSUwgXAorTk1FRElUIFwKK0xJUE8gXAorT1RPT0wgXAorT1RPT0w2NCBcCitzaHJleHRfY21kcyBcCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWMgXAord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgXAorY29tcGlsZXJfbmVlZHNfb2JqZWN0IFwKK3dpdGhfZ251X2xkIFwKK2FsbG93X3VuZGVmaW5lZF9mbGFnIFwKK25vX3VuZGVmaW5lZF9mbGFnIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAoraW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKK2ZpbmlzaF9ldmFsIFwKK29sZF9zdHJpcGxpYiBcCitzdHJpcGxpYiBcCitMRF9SQyBcCityZWxvYWRfZmxhZ19SQyBcCitjb21waWxlcl9SQyBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpY19SQyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX1JDIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQyBcCitjb21waWxlcl9uZWVkc19vYmplY3RfUkMgXAord2l0aF9nbnVfbGRfUkMgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMgXAorbm9fdW5kZWZpbmVkX2ZsYWdfUkMgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQyBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDIFwKK2V4Y2x1ZGVfZXhwc3ltc19SQyBcCitpbmNsdWRlX2V4cHN5bXNfUkMgXAorZmlsZV9saXN0X3NwZWNfUkM7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0bGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCityZWxvYWRfY21kc19SQyBcCitvbGRfYXJjaGl2ZV9jbWRzX1JDIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgXAorYXJjaGl2ZV9jbWRzX1JDIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHNfUkMgXAorbW9kdWxlX2NtZHNfUkMgXAorbW9kdWxlX2V4cHN5bV9jbWRzX1JDIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHNfUkMgXAorcHJlbGlua19jbWRzX1JDIFwKK3Bvc3RsaW5rX2NtZHNfUkM7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKK3hzaV9zaGVsbD0nJHhzaV9zaGVsbCcKK2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCcKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKKworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCisKKworCitwcmVmaXg9JHByZWZpeAorZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4CitsaWJkaXI9JGxpYmRpcgorZGF0YWRpcj0kZGF0YWRpcgorREFUQURJUk5BTUU9JERBVEFESVJOQU1FCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICIiJG1waV9sbl9saXN0IiIpIENPTkZJR19MSU5LUz0iJENPTkZJR19MSU5LUyAiJG1waV9sbl9saXN0IiIgOzsKKyAgICAiZ2NyeXB0LWNvbmYiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZ2NyeXB0LWNvbmYiIDs7CisgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAgICJtNC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtNC9NYWtlZmlsZSIgOzsKKyAgICAiY29tcGF0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNvbXBhdC9NYWtlZmlsZSIgOzsKKyAgICAibXBpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1waS9NYWtlZmlsZSIgOzsKKyAgICAiY2lwaGVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNpcGhlci9NYWtlZmlsZSIgOzsKKyAgICAicmFuZG9tL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHJhbmRvbS9NYWtlZmlsZSIgOzsKKyAgICAiZG9jL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9NYWtlZmlsZSIgOzsKKyAgICAic3JjL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9NYWtlZmlsZSIgOzsKKyAgICAic3JjL2djcnlwdC5oIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9nY3J5cHQuaCIgOzsKKyAgICAic3JjL2xpYmdjcnlwdC1jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3JjL2xpYmdjcnlwdC1jb25maWciIDs7CisgICAgInNyYy92ZXJzaW9uaW5mby5yYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzcmMvdmVyc2lvbmluZm8ucmMiIDs7CisgICAgInRlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9oYXNodGVzdC0yNTZnIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2hhc2h0ZXN0LTI1NmciIDs7CisKKyAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CisgIGVzYWMKK2RvbmUKKworCisjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisjIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCitpZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgorICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworICB0ZXN0ICIke0NPTkZJR19MSU5LUytzZXR9IiA9IHNldCB8fCBDT05GSUdfTElOS1M9JGNvbmZpZ19saW5rcworICB0ZXN0ICIke0NPTkZJR19DT01NQU5EUytzZXR9IiA9IHNldCB8fCBDT05GSUdfQ09NTUFORFM9JGNvbmZpZ19jb21tYW5kcworZmkKKworIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKyRkZWJ1ZyB8fAoreworICB0bXA9IGFjX3RtcD0KKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgOiAiJHthY190bXA6PSR0bXB9IgorICB7IHRlc3QgISAtZCAiJGFjX3RtcCIgfHwgcm0gLWZyICIkYWNfdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworJyAwCisgIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1Cit9CisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKworeworICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtZCAiJHRtcCIKK30gIHx8Cit7CisgIHRtcD0uL2NvbmYkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKK2FjX3RtcD0kdG1wCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisKKworYWNfY3I9YGVjaG8gWCB8IHRyIFggJ1wwMTUnYAorIyBPbiBjeWd3aW4sIGJhc2ggY2FuIGVhdCBcciBpbnNpZGUgYGAgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIGlnbmNyLgorIyBCdXQgd2Uga25vdyBvZiBubyBvdGhlciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCisjIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGEgYmFzaGlzbSBhcyBhIGZhbGxiYWNrLgoraWYgdGVzdCAieCRhY19jciIgPSB4OyB0aGVuCisgIGV2YWwgYWNfY3I9XCRcJ1xcclwnCitmaQorYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAoraWYgdGVzdCAiJGFjX2NzX2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KKyAgYWNfY3NfYXdrX2NyPSdcXHInCitlbHNlCisgIGFjX2NzX2F3a19jcj0kYWNfY3IKK2ZpCisKK2VjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5hd2siICYmCitfQUNFT0YKKworCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICAuIC4vY29uZiQkc3Vicy5zaCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKworICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKK3JtIC1mIGNvbmYkJHN1YnMuc2gKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorCit9Cit7CisgIGxpbmUgPSAkIDAKKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisgIHN1YnN0ZWQgPSAwCisgIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworICAgIGtleSA9IGZpZWxkW2ldCisgICAga2V5bGVuID0gbGVuZ3RoKGtleSkKKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworICAgICAgdmFsdWUgPSBTW2tleV0KKyAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisgICAgICBzdWJzdGVkID0gMQorICAgIH0gZWxzZQorICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKyAgfQorCisgIHByaW50IGxpbmUKK30KKworX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK19BQ0VPRgorCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLworcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190dD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190dCI7IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorCisjIEZvciB0aGUgYXdrIHNjcmlwdCwgRCBpcyBhbiBhcnJheSBvZiBtYWNybyB2YWx1ZXMga2V5ZWQgYnkgbmFtZSwKKyMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAorIyBuZXdsaW5lIHNlcXVlbmNlcy4KKworYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKK3NlZCAtbiAnCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgcnNldAorOnJzZXQKK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLyAvCit0IGRlZgorZAorOmRlZgorcy9cXCQvLwordCBic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcMyIvcAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDIiL3AKK2QKKzpic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAordCBjb250CitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAordCBjb250CitkCis6Y29udAorbgorcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IGNsZWFyCis6Y2xlYXIKK3MvXFwkLy8KK3QgYnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAorZAorOmJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKK2IgY29udAorJyA8Y29uZmRlZnMuaCB8IHNlZCAnCitzLyciJGFjX2RlbGltIicvIlxcXAorIi9nJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgZm9yIChrZXkgaW4gRCkgRF9pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKK30KKy9eW1x0IF0qI1tcdCBdKihkZWZpbmV8dW5kZWYpW1x0IF0rJGFjX3dvcmRfcmUoW1x0IChdfFwkKS8geworICBsaW5lID0gXCQgMAorICBzcGxpdChsaW5lLCBhcmcsICIgIikKKyAgaWYgKGFyZ1sxXSA9PSAiIyIpIHsKKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorICAgIG1hYzEgPSBhcmdbM10KKyAgfSBlbHNlIHsKKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisgICAgbWFjMSA9IGFyZ1syXQorICB9CisgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKyAgbWFjcm8gPSBtYWMyWzFdCisgIHByZWZpeCA9IHN1YnN0cihsaW5lLCAxLCBpbmRleChsaW5lLCBkZWZ1bmRlZikgLSAxKQorICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisgICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KKyAgICBwcmludCBwcmVmaXggImRlZmluZSIsIG1hY3JvIFBbbWFjcm9dIERbbWFjcm9dCisgICAgbmV4dAorICB9IGVsc2UgeworICAgICMgUmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwKKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgICAgaWYgKGRlZnVuZGVmID09ICJ1bmRlZiIpIHsKKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKyAgICAgIG5leHQKKyAgICB9CisgIH0KK30KK3sgcHJpbnQgfQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKworCitldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgOkwgJENPTkZJR19MSU5LUyAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisKKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKworICBjYXNlICRhY19tb2RlIGluCisgIDpGKQorICAjCisgICMgQ09ORklHX0ZJTEUKKyAgIworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKKyAgZXNhYworICBhY19NS0RJUl9QPSRNS0RJUl9QCisgIGNhc2UgJE1LRElSX1AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKyAgKi8qKSBhY19NS0RJUl9QPSRhY190b3BfYnVpbGRfcHJlZml4JE1LRElSX1AgOzsKKyAgZXNhYworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKyMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgorYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CisgIHAKKyAgcQorfQorL0BkYXRhZGlyQC9wCisvQGRvY2RpckAvcAorL0BpbmZvZGlyQC9wCisvQGxvY2FsZWRpckAvcAorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCisqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCisgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKyAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKyAgcyZAaW5mb2RpckAmJGluZm9kaXImZworICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworICBzJkBtYW5kaXJAJiRtYW5kaXImZworICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworZXNhYworX0FDRU9GCisKKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgorJGV4dHJhc3ViCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CitzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CitzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CitzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CitzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKK3MmQE1LRElSX1BAJiRhY19NS0RJUl9QJjt0IHQKKyRhY19kYXRhcm9vdGRpcl9oYWNrCisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKwordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAorICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9CisKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0iJGFjX2ZpbGUiCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmAkYXNfZGlybmFtZSAtLSAiJF9hbV9hcmciIHx8CiskYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJF9hbV9hcmciIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAorIDs7CisgIDpMKQorICAjCisgICMgQ09ORklHX0xJTksKKyAgIworCisgIGlmIHRlc3QgIiRhY19zb3VyY2UiID0gIiRhY19maWxlIiAmJiB0ZXN0ICIkc3JjZGlyIiA9ICcuJzsgdGhlbgorICAgIDoKKyAgZWxzZQorICAgICMgUHJlZmVyIHRoZSBmaWxlIGZyb20gdGhlIHNvdXJjZSB0cmVlIGlmIG5hbWVzIGFyZSBpZGVudGljYWwuCisgICAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiIHx8IHRlc3QgISAtciAiJGFjX3NvdXJjZSI7IHRoZW4KKyAgICAgIGFjX3NvdXJjZT0kc3JjZGlyLyRhY19zb3VyY2UKKyAgICBmaQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbGlua2luZyAkYWNfc291cmNlIHRvICRhY19maWxlIiA+JjY7fQorCisgICAgaWYgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gIiRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgcm0gLWYgIiRhY19maWxlIgorCisgICAgIyBUcnkgYSByZWxhdGl2ZSBzeW1saW5rLCB0aGVuIGEgaGFyZCBsaW5rLCB0aGVuIGEgY29weS4KKyAgICBjYXNlICRhY19zb3VyY2UgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRhY19zb3VyY2UgOzsKKwkqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JGFjX3NvdXJjZSA7OworICAgIGVzYWMKKyAgICBsbiAtcyAiJGFjX3JlbF9zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGxuICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8CisgICAgICBjcCAtcCAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiB8fAorICAgICAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBsaW5rIG9yIGNvcHkgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgZmkKKyA7OworICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyA7OworICBlc2FjCisKKworICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KKyAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkbWYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8CiskYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRmaWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyOyBhc19mbl9ta2Rpcl9wCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CisgOzsKKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisKKyMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorYXZhaWxhYmxlX3RhZ3M9IlJDICIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBBc3NlbWJsZXIgcHJvZ3JhbS4KK0FTPSRsdF9BUworCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXMuCitFQ0hPPSRsdF9FQ0hPCisKKyMgVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtLgorUEFUSF9TRVBBUkFUT1I9JGx0X1BBVEhfU0VQQVJBVE9SCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0kbHRfR1JFUAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorRkdSRVA9JGx0X0ZHUkVQCisKKyMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCitOTT0kbHRfTk0KKworIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRtYXhfY21kX2xlbgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0kYWNfb2JqZXh0CisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSRleGVleHQKKworIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgorbHRfdW5zZXQ9JGx0X3Vuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSRsdF9sdF9TUDJOTAorCisjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCitOTDJTUD0kbHRfbHRfTkwyU1AKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKworIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCit3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorCisjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKKworIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgorbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCitwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorZnVuY19kaXJuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCitmdW5jX2Jhc2VuYW1lICgpXAore1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCitcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCitmdW5jX3N0cmlwbmFtZSAoKVwKK3tcCitcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCitcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCit7XAorXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorZnVuY19sbzJvICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKK2Z1bmNfeGZvcm0gKClcCit7XAorICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorZnVuY19hcml0aCAoKVwKK3tcCisgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorZnVuY19sZW4gKClcCit7XAorICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCitmaQorCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorZnVuY19hcHBlbmQgKClcCit7XAorICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCitmdW5jX2FwcGVuZF9xdW90ZWQgKClcCit7XAorXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2Vsc2UKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitmaQorCitpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KK2ZpCisKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBSQworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTERfUkMKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnX1JDCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHNfUkMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19SQworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfUkMKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0NfUkMKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19SQworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9SQworCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19SQworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0X1JDCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19SQworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19SQworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19SQworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfUkMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfUkMKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19SQworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19SQworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfUkMKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfUkMKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9SQworCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX1JDCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19SQworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9SQworCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfUkMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX1JDCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfUkMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX1JDCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfUkMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfUkMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX1JDCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IFJDCitfTFRfRU9GCisKKyA7OworICAgICJnY3J5cHQtY29uZiI6QykKK2NobW9kICt4IHNyYy9saWJnY3J5cHQtY29uZmlnCisgOzsKKyAgICAidGVzdHMvaGFzaHRlc3QtMjU2ZyI6RikgY2htb2QgK3ggdGVzdHMvaGFzaHRlc3QtMjU2ZyA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KK2ZpCisKKworCitkZXRlY3Rpb25fbW9kdWxlPSIke0dDUllQVF9IV0ZfTU9EVUxFUyUubG99IgordGVzdCAtbiAiJGRldGVjdGlvbl9tb2R1bGUiIHx8IGRldGVjdGlvbl9tb2R1bGU9Im5vbmUiCisKKyMgR2l2ZSBzb21lIGZlZWRiYWNrCisKKyAgICAgZWNobyAiICAgICAgICAgIiAxPiY2CisKKworICAgICBlY2hvICIgICAgICAgIExpYmdjcnlwdCB2JHtWRVJTSU9OfSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGZvbGxvd3M6IiAxPiY2CisKKworICAgICBlY2hvICIgICAgICAgICAiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgUGxhdGZvcm06ICAgICAgICAgICAgICAgICAgJFBSSU5UQUJMRV9PU19OQU1FICgkaG9zdCkiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgSGFyZHdhcmUgZGV0ZWN0aW9uIG1vZHVsZTogJGRldGVjdGlvbl9tb2R1bGUiIDE+JjYKKworCisgICAgdG1wPSIgICAgICAgIEVuYWJsZWQgY2lwaGVyIGFsZ29yaXRobXM6IgorICAgIHRtcGk9ImFiYyIKKyAgICBpZiB0ZXN0ICIkeyN0bXBpfSIgLW5lIDMgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJHRtcCAkZW5hYmxlZF9jaXBoZXJzIiAxPiY2CisgICAgZWxzZQorICAgICAgdG1waT1gZWNobyAiJHRtcCJ8IHNlZCAncy8uLyAvZydgCisgICAgICBlY2hvICRlbmFibGVkX2NpcGhlcnMgRU9GIHwgdHIgJyAnICdcbicgfCBcCisgICAgICAgIHdoaWxlIHJlYWQgd29yZDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIkeyN0bXB9IiAtZ3QgNzAgOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkdG1wIiAxPiY2CisgICAgICAgICAgICB0bXA9IiR0bXBpIgorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiJHdvcmQiID0gIkVPRiIgOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkdG1wIiAxPiY2CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdG1wPSIkdG1wICR3b3JkIgorICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorCisKKyAgICB0bXA9IiAgICAgICAgRW5hYmxlZCBkaWdlc3QgYWxnb3JpdGhtczoiCisgICAgdG1waT0iYWJjIgorICAgIGlmIHRlc3QgIiR7I3RtcGl9IiAtbmUgMyA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkdG1wICRlbmFibGVkX2RpZ2VzdHMiIDE+JjYKKyAgICBlbHNlCisgICAgICB0bXBpPWBlY2hvICIkdG1wInwgc2VkICdzLy4vIC9nJ2AKKyAgICAgIGVjaG8gJGVuYWJsZWRfZGlnZXN0cyBFT0YgfCB0ciAnICcgJ1xuJyB8IFwKKyAgICAgICAgd2hpbGUgcmVhZCB3b3JkOyBkbworICAgICAgICAgIGlmIHRlc3QgIiR7I3RtcH0iIC1ndCA3MCA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAiIDE+JjYKKyAgICAgICAgICAgIHRtcD0iJHRtcGkiCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICIkd29yZCIgPSAiRU9GIiA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAiIDE+JjYKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB0bXA9IiR0bXAgJHdvcmQiCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGZpCisKKworICAgIHRtcD0iICAgICAgICBFbmFibGVkIGtkZiBhbGdvcml0aG1zOiAgICIKKyAgICB0bXBpPSJhYmMiCisgICAgaWYgdGVzdCAiJHsjdG1waX0iIC1uZSAzID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAgJGVuYWJsZWRfa2RmcyIgMT4mNgorICAgIGVsc2UKKyAgICAgIHRtcGk9YGVjaG8gIiR0bXAifCBzZWQgJ3MvLi8gL2cnYAorICAgICAgZWNobyAkZW5hYmxlZF9rZGZzIEVPRiB8IHRyICcgJyAnXG4nIHwgXAorICAgICAgICB3aGlsZSByZWFkIHdvcmQ7IGRvCisgICAgICAgICAgaWYgdGVzdCAiJHsjdG1wfSIgLWd0IDcwIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJHRtcCIgMT4mNgorICAgICAgICAgICAgdG1wPSIkdG1waSIKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIiR3b3JkIiA9ICJFT0YiIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJHRtcCIgMT4mNgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRtcD0iJHRtcCAkd29yZCIKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZmkKKworCisgICAgdG1wPSIgICAgICAgIEVuYWJsZWQgcHVia2V5IGFsZ29yaXRobXM6IgorICAgIHRtcGk9ImFiYyIKKyAgICBpZiB0ZXN0ICIkeyN0bXBpfSIgLW5lIDMgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJHRtcCAkZW5hYmxlZF9wdWJrZXlfY2lwaGVycyIgMT4mNgorICAgIGVsc2UKKyAgICAgIHRtcGk9YGVjaG8gIiR0bXAifCBzZWQgJ3MvLi8gL2cnYAorICAgICAgZWNobyAkZW5hYmxlZF9wdWJrZXlfY2lwaGVycyBFT0YgfCB0ciAnICcgJ1xuJyB8IFwKKyAgICAgICAgd2hpbGUgcmVhZCB3b3JkOyBkbworICAgICAgICAgIGlmIHRlc3QgIiR7I3RtcH0iIC1ndCA3MCA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAiIDE+JjYKKyAgICAgICAgICAgIHRtcD0iJHRtcGkiCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICIkd29yZCIgPSAiRU9GIiA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR0bXAiIDE+JjYKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB0bXA9IiR0bXAgJHdvcmQiCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGZpCisKKworICAgICBlY2hvICIgICAgICAgIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAgICRyYW5kb20iIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgVXNpbmcgbGludXggY2FwYWJpbGl0aWVzOiAgJHVzZV9jYXBhYmlsaXRpZXMiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgVHJ5IHVzaW5nIFBhZGxvY2sgY3J5cHRvOiAgJHBhZGxvY2tzdXBwb3J0IiAxPiY2CisKKworICAgICBlY2hvICIgICAgICAgIFRyeSB1c2luZyBBRVMtTkkgY3J5cHRvOiAgICRhZXNuaXN1cHBvcnQiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgVHJ5IHVzaW5nIEludGVsIFBDTE1VTDogICAgJHBjbG11bHN1cHBvcnQiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgVHJ5IHVzaW5nIERSTkcgKFJEUkFORCk6ICAgJGRybmdzdXBwb3J0IiAxPiY2CisKKworICAgICBlY2hvICIgICAgICAgIFRyeSB1c2luZyBJbnRlbCBBVlg6ICAgICAgICRhdnhzdXBwb3J0IiAxPiY2CisKKworICAgICBlY2hvICIgICAgICAgIFRyeSB1c2luZyBJbnRlbCBBVlgyOiAgICAgICRhdngyc3VwcG9ydCIgMT4mNgorCisKKyAgICAgZWNobyAiICAgICAgICBUcnkgdXNpbmcgQVJNIE5FT046ICAgICAgICAkbmVvbnN1cHBvcnQiIDE+JjYKKworCisgICAgIGVjaG8gIiAgICAgICAgICIgMT4mNgorCisKK2lmIHRlc3QgIiRwcmludF9lZ2Rfbm90aWNlIiA9ICJ5ZXMiOyB0aGVuCitjYXQgPDxHMTBFT0YKKworICAgVGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBVbml4IHJhbmRvbSBnYXRoZXJlciBtb2R1bGUgKHJuZHVuaXgpIGlzIG5vdAorICAgdmVyeSBnb29kIGFuZCBpdCBkb2VzIG5vdCBrZWVwIHRoZSBlbnRyb3B5IHBvb2wgb3ZlciBtdWx0aXBsZQorICAgaW52b2NhdGlvbnMgb2YgTGliZ2NyeXB0IGJhc2UgYXBwbGljYXRpb25zLiAgVGhlIHN1Z2dlc3RlZCB3YXkgdG8KKyAgIG92ZXJjb21lIHRoaXMgcHJvYmxlbSBpcyB0byB1c2UgdGhlCisKKyAgICAgICAgICAgICAgICAgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIChFR0QpCisKKyAgIHdoaWNoIHByb3ZpZGVzIGEgZW50cm9weSBzb3VyY2UgZm9yIHRoZSB3aG9sZSBzeXN0ZW0uICBJdCBpcyB3cml0dGVuCisgICBpbiBQZXJsIGFuZCBhdmFpbGFibGUgYXQgdGhlIEdudVBHIEZUUCBzZXJ2ZXJzLiAgVG8gZW5hYmxlIEVHRCB5b3UKKyAgIHNob3VsZCByZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgb3B0aW9uICItLWVuYWJsZS1zdGF0aWMtcm5kPWVnZCIuCisgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjb25zdWx0IHRoZSBHbnVQRyB3ZWJwYWdlczoKKworICAgICAgICAgICAgIGh0dHA6Ly93d3cuZ251cGcub3JnL2Rvd25sb2FkLmh0bWwjZWdkCisKK0cxMEVPRgorZmkKKworaWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2F0dHJpYnV0ZV9hbGlnbmVkIiAhPSAieWVzIiA7IHRoZW4KK2NhdCA8PEcxMEVPRgorCisgICBQbGVhc2Ugbm90IHRoYXQgeW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBHQ0Mgc3R5bGUKKyAgIGFsaWduZWQgYXR0cmlidXRlLiBVc2luZyB0aGlzIHNvZnR3YXJlIG1heSBldm9rZSBidXMgZXJyb3JzLgorCitHMTBFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRncGwiOyB0aGVuCisgIGVjaG8gIlBsZWFzZSBub3RlIHRoYXQgeW91IGFyZSBidWlsZGluZyBhIHZlcnNpb24gb2YgTGliZ2NyeXB0IHdpdGgiCisgIGVjaG8gIiAgJGdwbCIKKyAgZWNobyAiaW5jbHVkZWQuICBUaGVzZSBwYXJ0cyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCBhbmQgdGh1cyB0aGUiCisgIGVjaG8gInVzZSBvZiB0aGlzIGxpYnJhcnkgaGFzIHRvIGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIG9mIHRoZSBHUEwuIgorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJjY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMjA3MyBAQAorIyBDb25maWd1cmUuYWMgc2NyaXB0IGZvciBMaWJnY3J5cHQKKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LAorIyAgICAgICAgICAgICAgIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyAgZzEwIENvZGUgR21iSAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyAoUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4pCitBQ19SRVZJU0lPTigkUmV2aXNpb24kKQorQUNfUFJFUkVRKDIuNjApCittaW5fYXV0b21ha2VfdmVyc2lvbj0iMS4xMCIKKworIyBUbyBidWlsZCBhIHJlbGVhc2UgeW91IG5lZWQgdG8gY3JlYXRlIGEgdGFnIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyCisjIChnaXQgdGFnIC1zIGxpYmdjcnlwdC1uLm0uaykgYW5kIHJ1biAiLi9hdXRvZ2VuLnNoIC0tZm9yY2UiLiAgUGxlYXNlCisjIGJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZWxlYXNlIGFuZCBkbyBhbm90aGVyCisjIGNvbW1pdCBhbmQgcHVzaCBzbyB0aGF0IHRoZSBnaXQgbWFnaWMgaXMgYWJsZSB0byB3b3JrLiAgU2VlIGJlbG93CisjIGZvciB0aGUgTFQgdmVyc2lvbnMuCittNF9kZWZpbmUobXltNF92ZXJzaW9uX21ham9yLCBbMV0pCittNF9kZWZpbmUobXltNF92ZXJzaW9uX21pbm9yLCBbNl0pCittNF9kZWZpbmUobXltNF92ZXJzaW9uX21pY3JvLCBbMV0pCisKKyMgQmVsb3cgaXMgbTQgbWFnaWMgdG8gZXh0cmFjdCBhbmQgY29tcHV0ZSB0aGUgcmV2aXNpb24gbnVtYmVyLCB0aGUKKyMgZGVjaW1hbGl6ZWQgc2hvcnQgcmV2aXNpb24gbnVtYmVyLCBhIGJldGEgdmVyc2lvbiBzdHJpbmcsIGFuZCBhIGZsYWcKKyMgaW5kaWNhdGluZyBhIGRldmVsb3BtZW50IHZlcnNpb24gKG15bTRfaXNnaXQpLiBOb3RlIHRoYXQgdGhlIG00CisjIHByb2Nlc3NpbmcgaXMgZG9uZSBieSBhdXRvY29uZiBhbmQgbm90IGR1cmluZyB0aGUgY29uZmlndXJlIHJ1bi4KK200X2RlZmluZShteW00X3ZlcnNpb24sCisgICAgICAgICAgW215bTRfdmVyc2lvbl9tYWpvci5teW00X3ZlcnNpb25fbWlub3IubXltNF92ZXJzaW9uX21pY3JvXSkKK200X2RlZmluZShbbXltNF9yZXZpc2lvbl0sCisgICAgICAgICAgbTRfZXN5c2NtZChbZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQgfCB0ciAtZCAnXG5cciddKSkKK200X2RlZmluZShbbXltNF9yZXZpc2lvbl9kZWNdLAorICAgICAgICAgIG00X2VzeXNjbWRfcyhbZWNobyAkKCgweCQoZWNobyBdbXltNF9yZXZpc2lvblt8aGVhZCAtYyA0KSkpXSkpCittNF9kZWZpbmUoW215bTRfYmV0YXN0cmluZ10sCisgICAgICAgICAgbTRfZXN5c2NtZF9zKFtnaXQgZGVzY3JpYmUgLS1tYXRjaCAnbGliZ2NyeXB0LVswLTldLipbMC05XScgLS1sb25nfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAtRi0gJyQzIT0we3ByaW50Ii1iZXRhIiQzfSddKSkKK200X2RlZmluZShbbXltNF9pc2dpdF0sbTRfaWYobXltNF9iZXRhc3RyaW5nLFtdLFtub10sW3llc10pKQorbTRfZGVmaW5lKFtteW00X2Z1bGxfdmVyc2lvbl0sW215bTRfdmVyc2lvbltdbXltNF9iZXRhc3RyaW5nXSkKKworQUNfSU5JVChbbGliZ2NyeXB0XSxbbXltNF9mdWxsX3ZlcnNpb25dLFtodHRwOi8vYnVncy5nbnVwZy5vcmddKQorCisjIExUIFZlcnNpb24gbnVtYmVycywgcmVtZW1iZXIgdG8gY2hhbmdlIHRoZW0ganVzdCAqYmVmb3JlKiBhIHJlbGVhc2UuCisjICAgKEludGVyZmFjZXMgcmVtb3ZlZDogICAgQ1VSUkVOVCsrLCBBR0U9MCwgUkVWSVNJT049MCkKKyMgICAoSW50ZXJmYWNlcyBhZGRlZDogICAgICBDVVJSRU5UKyssIEFHRSsrLCBSRVZJU0lPTj0wKQorIyAgIChObyBpbnRlcmZhY2VzIGNoYW5nZWQ6ICAgICAgICAgICAgICAgICAgIFJFVklTSU9OKyspCitMSUJHQ1JZUFRfTFRfQ1VSUkVOVD0yMAorTElCR0NSWVBUX0xUX0FHRT0wCitMSUJHQ1JZUFRfTFRfUkVWSVNJT049MQorCisKKyMgSWYgdGhlIEFQSSBpcyBjaGFuZ2VkIGluIGFuIGluY29tcGF0aWJsZSB3YXk6IGluY3JlbWVudCB0aGUgbmV4dCBjb3VudGVyLgorIworIyAxLjY6IEFCSSBhbmQgQVBJIGNoYW5nZSBidXQgdGhlIGNoYW5nZSBpcyB0byBtb3N0IHVzZXJzIGlycmVsZXZhbnQKKyMgICAgICBhbmQgdGh1cyB0aGUgQVBJIHZlcnNpb24gbnVtYmVyIGhhcyBub3QgYmVlbiBpbmNyZW1lbnRlZC4KK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT049MQorCisjIElmIHlvdSBjaGFuZ2UgdGhlIHJlcXVpcmVkIGdwZy1lcnJvciB2ZXJzaW9uLCBwbGVhc2UgcmVtb3ZlCisjIHVubmVjZXNzYXJ5IGVycm9yIGNvZGUgZGVmaW5lcyBpbiBzcmMvZ2NyeXB0LWludC5oLgorTkVFRF9HUEdfRVJST1JfVkVSU0lPTj0xLjExCisKK1BBQ0tBR0U9JFBBQ0tBR0VfTkFNRQorVkVSU0lPTj0kUEFDS0FHRV9WRVJTSU9OCisKK0FDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorQUNfQ09ORklHX1NSQ0RJUihbc3JjL2xpYmdjcnlwdC52ZXJzXSkKK0FNX0lOSVRfQVVUT01BS0UKK0FDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCitBQ19DT05GSUdfTElCT0JKX0RJUihbY29tcGF0XSkKK0FDX0NBTk9OSUNBTF9IT1NUCitBTV9NQUlOVEFJTkVSX01PREUKK0FNX1NJTEVOVF9SVUxFUworCitBSF9UT1AoWworI2lmbmRlZiBfR0NSWVBUX0NPTkZJR19IX0lOQ0xVREVECisjZGVmaW5lIF9HQ1JZUFRfQ09ORklHX0hfSU5DTFVERUQKKworLyogRW5hYmxlIGdwZy1lcnJvcidzIHN0cmVycm9yIG1hY3JvIGZvciBXMzJDRS4gICovCisjZGVmaW5lIEdQR19FUlJfRU5BQkxFX0VSUk5PX01BQ1JPUyAxCitdKQorCitBSF9CT1RUT00oWworI2RlZmluZSBfR0NSWVBUX0lOX0xJQkdDUllQVCAxCisKKy8qIElmIHRoZSBjb25maWd1cmUgY2hlY2sgZm9yIGVuZGlhbm5lc3MgaGFzIGJlZW4gZGlzYWJsZWQsIGdldCBpdCBmcm9tCisgICBPUyBtYWNyb3MuICBUaGlzIGlzIGludGVuZGVkIGZvciBtYWtpbmcgZmF0IGJpbmFyeSBidWlsZHMgb24gT1MgWC4gICovCisjaWZkZWYgRElTQUJMRURfRU5ESUFOX0NIRUNLCisjIGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVsc2UKKyMgIGVycm9yICJObyBlbmRpYW5uZXNzIGZvdW5kIgorIyBlbmRpZgorI2VuZGlmIC8qRElTQUJMRURfRU5ESUFOX0NIRUNLKi8KKworLyogV2UgYmFzaWNhbGx5IHVzZSB0aGUgb3JpZ2luYWwgQ2FtZWxsaWEgc291cmNlLiAgTWFrZSBzdXJlIHRoZSBzeW1ib2xzCisgICBwcm9wZXJseSBwcmVmaXhlZC4gICovCisjZGVmaW5lIENBTUVMTElBX0VYVF9TWU1fUFJFRklYIF9nY3J5XworCisjZW5kaWYgLypfR0NSWVBUX0NPTkZJR19IX0lOQ0xVREVEKi8KK10pCisKK0FIX1ZFUkJBVElNKFtfUkVFTlRSQU5UXSwKK1svKiBUbyBhbGxvdyB0aGUgdXNlIG9mIExpYmdjcnlwdCBpbiBtdWx0aXRocmVhZGVkIHByb2dyYW1zIHdlIGhhdmUgdG8gdXNlCisgICAgc3BlY2lhbCBmZWF0dXJlcyBmcm9tIHRoZSBsaWJyYXJ5LiAqLworI2lmbmRlZiBfUkVFTlRSQU5UCisjIGRlZmluZSBfUkVFTlRSQU5UIDEKKyNlbmRpZgorXSkKKworCitBQ19TVUJTVChMSUJHQ1JZUFRfTFRfQ1VSUkVOVCkKK0FDX1NVQlNUKExJQkdDUllQVF9MVF9BR0UpCitBQ19TVUJTVChMSUJHQ1JZUFRfTFRfUkVWSVNJT04pCitBQ19TVUJTVChQQUNLQUdFKQorQUNfU1VCU1QoVkVSU0lPTikKK0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiB0aGlzIHBhY2thZ2VdKQorQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG9mIHRoaXMgcGFja2FnZV0pCitWRVJTSU9OX05VTUJFUj1tNF9lc3lzY21kKHByaW50ZiAiMHglMDJ4JTAyeCUwMngiIG15bTRfdmVyc2lvbl9tYWpvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIG15bTRfdmVyc2lvbl9taW5vciBteW00X3ZlcnNpb25fbWljcm8pCitBQ19TVUJTVChWRVJTSU9OX05VTUJFUikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyAgQmFzaWMgY2hlY2tzLiAgIyMjICh3ZSBuZWVkIHNvbWUgcmVzdWx0cyBsYXRlciBvbiAoZS5nLiAkR0NDKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19QUk9HX01BS0VfU0VUCittaXNzaW5nX2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwsICRtaXNzaW5nX2RpcikKK0FNX01JU1NJTkdfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYsICRtaXNzaW5nX2RpcikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UsICRtaXNzaW5nX2RpcikKK0FNX01JU1NJTkdfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyLCAkbWlzc2luZ19kaXIpCisjIEFNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8sICRtaXNzaW5nX2RpcikKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ1BQCitBTV9QUk9HX0NDX0NfTworQU1fUFJPR19BUworQUNfSVNDX1BPU0lYCitBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfQVdLCisKK0FDX0dOVV9TT1VSQ0UKKworIyBXZSBuZWVkIHRvIGNvbXBpbGUgYW5kIHJ1biBhIHByb2dyYW0gb24gdGhlIGJ1aWxkIG1hY2hpbmUuICBBCisjIGNvbW1lbnQgaW4gbGliZ3BnLWVycm9yIHNheXMgdGhhdCB0aGUgQUNfUFJPR19DQ19GT1JfQlVJTEQgbWFjcm8gaW4KKyMgdGhlIEFDIGFyY2hpdmUgaXMgYnJva2VuIGZvciBhdXRvY29uZiAyLjU3LiAgR2l2ZW4gdGhhdCB0aGVyZSBpcyBubworIyBuZXdlciB2ZXJzaW9uIG9mIHRoYXQgbWFjcm8sIHdlIGFzc3VtZSB0aGF0IGl0IGlzIGFsc28gYnJva2VuIGZvcgorIyBhdXRvY29uZiAyLjYxIGFuZCB0aHVzIHdlIHVzZSBhIHNpbXBsZSBidXQgdXN1YWxseSBzdWZmaWNpZW50CisjIGFwcHJvYWNoLgorQUNfTVNHX0NIRUNLSU5HKGZvciBjYyBmb3IgYnVpbGQpCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9ICJ5ZXMiOyB0aGVuCisgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtY2N9IgorZWxzZQorICBDQ19GT1JfQlVJTEQ9IiR7Q0NfRk9SX0JVSUxELSRDQ30iCitmaQorQUNfTVNHX1JFU1VMVCgkQ0NfRk9SX0JVSUxEKQorQUNfQVJHX1ZBUihDQ19GT1JfQlVJTEQsW2J1aWxkIHN5c3RlbSBDIGNvbXBpbGVyXSkKKworCitMVF9QUkVSRVEoWzIuMi42XSkKK0xUX0lOSVQoW3dpbjMyLWRsbCBkaXNhYmxlLXN0YXRpY10pCitMVF9MQU5HKFtXaW5kb3dzIFJlc291cmNlXSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgR2VuZXJhbCBkZWZpbml0aW9ucy4gIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVXNlZCBieSBsaWJnY3J5cHQtY29uZmlnCitMSUJHQ1JZUFRfQ09ORklHX0xJQlM9Ii1sZ2NyeXB0IgorTElCR0NSWVBUX0NPTkZJR19DRkxBR1M9IiIKK0xJQkdDUllQVF9DT05GSUdfSE9TVD0iJGhvc3QiCisKKyMgRGVmaW5pdGlvbnMgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorYXZhaWxhYmxlX2NpcGhlcnM9ImFyY2ZvdXIgYmxvd2Zpc2ggY2FzdDUgZGVzIGFlcyB0d29maXNoIHNlcnBlbnQgcmZjMjI2OCBzZWVkIgorYXZhaWxhYmxlX2NpcGhlcnM9IiRhdmFpbGFibGVfY2lwaGVycyBjYW1lbGxpYSBpZGVhIHNhbHNhMjAgZ29zdDI4MTQ3IgorZW5hYmxlZF9jaXBoZXJzPSIiCisKKyMgRGVmaW5pdGlvbnMgZm9yIHB1YmxpYy1rZXkgY2lwaGVycy4KK2F2YWlsYWJsZV9wdWJrZXlfY2lwaGVycz0iZHNhIGVsZ2FtYWwgcnNhIGVjYyIKK2VuYWJsZWRfcHVia2V5X2NpcGhlcnM9IiIKKworIyBEZWZpbml0aW9ucyBmb3IgbWVzc2FnZSBkaWdlc3RzLgorYXZhaWxhYmxlX2RpZ2VzdHM9ImNyYyBnb3N0cjM0MTEtOTQgbWQ0IG1kNSBybWQxNjAgc2hhMSBzaGEyNTYiCithdmFpbGFibGVfZGlnZXN0c182ND0ic2hhNTEyIHRpZ2VyIHdoaXJscG9vbCBzdHJpYm9nIgorZW5hYmxlZF9kaWdlc3RzPSIiCisKKyMgRGVmaW5pdGlvbnMgZm9yIGtkZnMgKG9wdGlvbmFsIG9uZXMpCithdmFpbGFibGVfa2Rmcz0iczJrIHBrZGYyIgorYXZhaWxhYmxlX2tkZnNfNjQ9InNjcnlwdCIKK2VuYWJsZWRfa2Rmcz0iIgorCisjIERlZmluaXRpb25zIGZvciByYW5kb20gbW9kdWxlcy4KK2F2YWlsYWJsZV9yYW5kb21fbW9kdWxlcz0ibGludXggZWdkIHVuaXgiCithdXRvX3JhbmRvbV9tb2R1bGVzPSIkYXZhaWxhYmxlX3JhbmRvbV9tb2R1bGVzIgorCisjIFN1cHBvcnRlZCB0aHJlYWQgYmFja2VuZHMuCitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVM9IiIKKworIyBPdGhlciBkZWZpbml0aW9ucy4KK3ByaW50X2VnZF9ub3RpY2U9bm8KK2hhdmVfdzMyX3N5c3RlbT1ubworaGF2ZV93MzJjZV9zeXN0ZW09bm8KK2hhdmVfcHRocmVhZD1ubworCisKKyMgU2V0dXAgc29tZSBzdHVmZiBkZXBlbmRpbmcgb24gaG9zdC4KK2Nhc2UgIiR7aG9zdH0iIGluCisgICAgKi0qLW1pbmd3MzIqKQorICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgICBoYXZlX3czMl9zeXN0ZW09eWVzCisgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgICAqLW1pbmd3MzJjZSopCisgICAgICAgICAgICBoYXZlX3czMmNlX3N5c3RlbT15ZXMKKyAgICAgICAgICAgIGF2YWlsYWJsZV9yYW5kb21fbW9kdWxlcz0idzMyY2UiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgYXZhaWxhYmxlX3JhbmRvbV9tb2R1bGVzPSJ3MzIiCisgICAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgQUNfREVGSU5FKFVTRV9PTkxZXzhET1QzLDEsCisgICAgICAgICAgICAgICAgW3NldCB0aGlzIHRvIGxpbWl0IGZpbGVuYW1lcyB0byB0aGUgOC4zIGZvcm1hdF0pCisgICAgICBBQ19ERUZJTkUoSEFWRV9EUklWRV9MRVRURVJTLDEsCisgICAgICAgICAgICAgICAgW2RlZmluZWQgaWYgd2UgbXVzdCBydW4gb24gYSBzdHVwaWQgZmlsZSBzeXN0ZW1dKQorICAgICAgQUNfREVGSU5FKEhBVkVfRE9TSVNIX1NZU1RFTSwxLAorICAgICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHdlIHJ1biBvbiBzb21lIG9mIHRoZSBQQ0RPUyBsaWtlIHN5c3RlbXMKKyAgICAgICAgICAgICAgICAgKERPUywgV2luZG96ZS4gT1MvMikgd2l0aCBzcGVjaWFsIHByb3BlcnRpZXMgbGlrZQorICAgICAgICAgICAgICAgICAgbm8gZmlsZSBtb2Rlc10pCisgICAgICA7OworCisgICAgaT84Ni1lbXgtb3MyIHwgaT84Ni0qLW9zMiplbXgpCisgICAgICAgICMgT1MvMiB3aXRoIHRoZSBFTVggZW52aXJvbm1lbnQKKyAgICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgICAgIEFDX0RFRklORShIQVZFX0RSSVZFX0xFVFRFUlMpCisgICAgICAgIEFDX0RFRklORShIQVZFX0RPU0lTSF9TWVNURU0pCisgICAgICAgIDs7CisKKyAgICBpPzg2LSotbXNkb3NkamdwcCopCisgICAgICAgICMgRE9TIHdpdGggdGhlIERKR1BQIGVudmlyb25tZW50CisgICAgICAgIGFjX2N2X2hhdmVfZGV2X3JhbmRvbT1ubworICAgICAgICBBQ19ERUZJTkUoSEFWRV9EUklWRV9MRVRURVJTKQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9ET1NJU0hfU1lTVEVNKQorICAgICAgICA7OworCisgICAgKi0qLWhwdXgqKQorICAgICAgICBpZiB0ZXN0IC16ICIkR0NDIiA7IHRoZW4KKyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtQWUgLURfSFBVWF9TT1VSQ0UiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgKi1kZWMtb3NmNCopCisgICAgICAgIGlmIHRlc3QgLXogIiRHQ0MiIDsgdGhlbgorICAgICAgICAgICAgIyBTdXBwcmVzcyBhbGwgd2FybmluZ3MKKyAgICAgICAgICAgICMgdG8gZ2V0IHJpZCBvZiB0aGUgdW5zaWduZWQvc2lnbmVkIGNoYXIgbWlzbWF0Y2ggd2FybmluZ3MuCisgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXciCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgbTY4ay1hdGFyaS1taW50KQorICAgICAgICA7OworICAgICopCisgICAgICA7OworZXNhYworCitpZiB0ZXN0ICIkaGF2ZV93MzJfc3lzdGVtIiA9IHllczsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfVzMyX1NZU1RFTSwxLCBbRGVmaW5lZCBpZiB3ZSBydW4gb24gYSBXMzIgQVBJIGJhc2VkIHN5c3RlbV0pCisgICBpZiB0ZXN0ICIkaGF2ZV93MzJjZV9zeXN0ZW0iID0geWVzOyB0aGVuCisgICAgIEFDX0RFRklORShIQVZFX1czMkNFX1NZU1RFTSwxLFtEZWZpbmVkIGlmIHdlIHJ1biBvbiBXaW5kb3dzQ0VdKQorICAgZmkKK2ZpCitBTV9DT05ESVRJT05BTChIQVZFX1czMl9TWVNURU0sIHRlc3QgIiRoYXZlX3czMl9zeXN0ZW0iID0geWVzKQorQU1fQ09ORElUSU9OQUwoSEFWRV9XMzJDRV9TWVNURU0sIHRlc3QgIiRoYXZlX3czMmNlX3N5c3RlbSIgPSB5ZXMpCisKKworCisjIEEgcHJpbnRhYmxlIE9TIE5hbWUgaXMgc29tZXRpbWVzIHVzZWZ1bC4KK2Nhc2UgIiR7aG9zdH0iIGluCisgICAgKi0qLW1pbmd3MzJjZSopCisgICAgICAgIFBSSU5UQUJMRV9PU19OQU1FPSJXMzJDRSIKKyAgICAgICAgOzsKKworICAgICotKi1taW5ndzMyKikKKyAgICAgICAgUFJJTlRBQkxFX09TX05BTUU9IlczMiIKKyAgICAgICAgOzsKKworICAgIGk/ODYtZW14LW9zMiB8IGk/ODYtKi1vczIqZW14ICkKKyAgICAgICAgUFJJTlRBQkxFX09TX05BTUU9Ik9TLzIiCisgICAgICAgIDs7CisKKyAgICBpPzg2LSotbXNkb3NkamdwcCopCisgICAgICAgIFBSSU5UQUJMRV9PU19OQU1FPSJNU0RPUy9ESkdQUCIKKyAgICAgICAgOzsKKworICAgICotbGludXgqKQorICAgICAgICBQUklOVEFCTEVfT1NfTkFNRT0iR05VL0xpbnV4IgorICAgICAgICA7OworCisgICAgKikKKyAgICAgICAgUFJJTlRBQkxFX09TX05BTUU9YHVuYW1lIC1zIHx8IGVjaG8gIlVua25vd24iYAorICAgICAgICA7OworZXNhYworCisjCisjIEZpZ3VyZSBvdXQgdGhlIG5hbWUgb2YgdGhlIHJhbmRvbSBkZXZpY2UKKyMKK2Nhc2UgIiR7aG9zdH0iIGluCisgICAgKi1vcGVuYnNkKikKKyAgICAgICAgTkFNRV9PRl9ERVZfUkFORE9NPSIvZGV2L3NyYW5kb20iCisgICAgICAgIE5BTUVfT0ZfREVWX1VSQU5ET009Ii9kZXYvdXJhbmRvbSIKKyAgICAgICAgOzsKKworICAgICopCisgICAgICAgIE5BTUVfT0ZfREVWX1JBTkRPTT0iL2Rldi9yYW5kb20iCisgICAgICAgIE5BTUVfT0ZfREVWX1VSQU5ET009Ii9kZXYvdXJhbmRvbSIKKyAgICAgICAgOzsKK2VzYWMKKworCitBQ19BUkdfRU5BQkxFKGVuZGlhbi1jaGVjaywKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1lbmRpYW4tY2hlY2tdLAorCSAgICAgIFtkaXNhYmxlIHRoZSBlbmRpYW4gY2hlY2sgYW5kIHRydXN0IHRoZSBPUyBwcm92aWRlZCBtYWNyb3NdKSwKKwkgICAgICBlbmRpYW5jaGVjaz0kZW5hYmxldmFsLGVuZGlhbmNoZWNrPXllcykKK2lmIHRlc3QgeCIkZW5kaWFuY2hlY2siID0geHllcyA7IHRoZW4KKyAgQUNfQ19CSUdFTkRJQU4KK2Vsc2UKKyAgQUNfREVGSU5FKERJU0FCTEVEX0VORElBTl9DSEVDSywxLFtjb25maWd1cmUgZGlkIG5vdCB0ZXN0IGZvciBlbmRpYW5lc3NdKQorZmkKKworQUNfQ0hFQ0tfU0laRU9GKHVuc2lnbmVkIHNob3J0LCAyKQorQUNfQ0hFQ0tfU0laRU9GKHVuc2lnbmVkIGludCwgNCkKK0FDX0NIRUNLX1NJWkVPRih1bnNpZ25lZCBsb25nLCA0KQorQUNfQ0hFQ0tfU0laRU9GKHVuc2lnbmVkIGxvbmcgbG9uZywgMCkKKworQUNfVFlQRV9VSU5UUFRSX1QKKworaWYgdGVzdCAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydCIgPSAiMCIgXAorICAgfHwgdGVzdCAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQiID0gIjAiIFwKKyAgIHx8IHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZyIgPSAiMCI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbSG1tbSwgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHNpemVzIC0gdXNpbmcgZGVmYXVsdHNdKTsKK2ZpCisKKyMgRG8gd2UgaGF2ZSBhbnkgNjQtYml0IGRhdGEgdHlwZXM/CitpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludCIgIT0gIjgiIFwKKyAgICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZyIgIT0gIjgiIFwKKyAgICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nIiAhPSAiOCIgXAorICAgJiYgdGVzdCAiJGFjX2N2X3NpemVvZl91aW50NjRfdCIgIT0gIjgiOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW05vIDY0LWJpdCB0eXBlcy4gIERpc2FibGluZyBUSUdFUi8xOTIsIFNDUllQVCwgU0hBLTM4NCwgXAorIFNIQS01MTIgYW5kIEdPU1QgUiAzNC4xMS0xMl0pCitlbHNlCisgIGF2YWlsYWJsZV9kaWdlc3RzPSIkYXZhaWxhYmxlX2RpZ2VzdHMgJGF2YWlsYWJsZV9kaWdlc3RzXzY0IgorICBhdmFpbGFibGVfa2Rmcz0iJGF2YWlsYWJsZV9rZGZzICRhdmFpbGFibGVfa2Rmc182NCIKK2ZpCisKKyMgSWYgbm90IHNwZWNpZmllZCBvdGhlcndpc2UsIGFsbCBhdmFpbGFibGUgYWxnb3JpdGhtcyB3aWxsIGJlCisjIGluY2x1ZGVkLgorZGVmYXVsdF9jaXBoZXJzPSIkYXZhaWxhYmxlX2NpcGhlcnMiCitkZWZhdWx0X3B1YmtleV9jaXBoZXJzPSIkYXZhaWxhYmxlX3B1YmtleV9jaXBoZXJzIgorZGVmYXVsdF9kaWdlc3RzPSIkYXZhaWxhYmxlX2RpZ2VzdHMiCitkZWZhdWx0X2tkZnM9IiRhdmFpbGFibGVfa2RmcyIKKworIyBTdWJzdGl0dXRpb25zIHRvIHNldCBnZW5lcmF0ZWQgZmlsZXMgaW4gYSBFbWFjcyBidWZmZXIgdG8gcmVhZC1vbmx5LgorQUNfU1VCU1QoZW1hY3NfbG9jYWxfdmFyc19iZWdpbiwgWydMb2NhbCBWYXJpYWJsZXM6J10pCitBQ19TVUJTVChlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seSwgWydidWZmZXItcmVhZC1vbmx5OiB0J10pCitBQ19TVUJTVChlbWFjc19sb2NhbF92YXJzX2VuZCwgWydFbmQ6J10pCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIENvbW1hbmQgbGluZSBzd2l0Y2hlcy4gIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1lbmFibGUtY2lwaGVycyBzd2l0Y2guCitBQ19BUkdfRU5BQkxFKGNpcGhlcnMsCisJICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNpcGhlcnM9Y2lwaGVyc10sCisJCQkgICAgIFtzZWxlY3QgdGhlIHN5bW1ldHJpYyBjaXBoZXJzIHRvIGluY2x1ZGVdKSwKKwkgICAgICBbZW5hYmxlZF9jaXBoZXJzPWBlY2hvICRlbmFibGV2YWwgfCB0ciAnLDonICcgICcgfCB0ciAnW0EtWl0nICdbYS16XSdgXSwKKwkgICAgICBbZW5hYmxlZF9jaXBoZXJzPSIiXSkKK2lmIHRlc3QgIngkZW5hYmxlZF9jaXBoZXJzIiA9ICJ4IiBcCisgICAtbyAiJGVuYWJsZWRfY2lwaGVycyIgPSAieWVzIiAgXAorICAgLW8gIiRlbmFibGVkX2NpcGhlcnMiID0gIm5vIjsgdGhlbgorICAgZW5hYmxlZF9jaXBoZXJzPSRkZWZhdWx0X2NpcGhlcnMKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHN5bW1ldHJpYyBjaXBoZXJzIHRvIGluY2x1ZGVdKQorZm9yIGNpcGhlciBpbiAkZW5hYmxlZF9jaXBoZXJzOyBkbworICAgIExJU1RfTUVNQkVSKCRjaXBoZXIsICRhdmFpbGFibGVfY2lwaGVycykKKyAgICBpZiB0ZXN0ICIkZm91bmQiID0gIjAiOyB0aGVuCisgICAgICAgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBjaXBoZXIgIiRjaXBoZXIiIHNwZWNpZmllZF0pCisgICAgZmkKK2RvbmUKK0FDX01TR19SRVNVTFQoWyRlbmFibGVkX2NpcGhlcnNdKQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1wdWJrZXktY2lwaGVycyBzd2l0Y2guCitBQ19BUkdfRU5BQkxFKHB1YmtleS1jaXBoZXJzLAorCSAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdWJrZXktY2lwaGVycz1jaXBoZXJzXSwKKwkJCSAgICAgW3NlbGVjdCB0aGUgcHVibGljLWtleSBjaXBoZXJzIHRvIGluY2x1ZGVdKSwKKwkgICAgICBbZW5hYmxlZF9wdWJrZXlfY2lwaGVycz1gZWNobyAkZW5hYmxldmFsIHwgdHIgJyw6JyAnICAnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYF0sCisJICAgICAgW2VuYWJsZWRfcHVia2V5X2NpcGhlcnM9IiJdKQoraWYgdGVzdCAieCRlbmFibGVkX3B1YmtleV9jaXBoZXJzIiA9ICJ4IiBcCisgICAtbyAiJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMiID0gInllcyIgIFwKKyAgIC1vICIkZW5hYmxlZF9wdWJrZXlfY2lwaGVycyIgPSAibm8iOyB0aGVuCisgICBlbmFibGVkX3B1YmtleV9jaXBoZXJzPSRkZWZhdWx0X3B1YmtleV9jaXBoZXJzCitmaQorQUNfTVNHX0NIRUNLSU5HKFt3aGljaCBwdWJsaWMta2V5IGNpcGhlcnMgdG8gaW5jbHVkZV0pCitmb3IgY2lwaGVyIGluICRlbmFibGVkX3B1YmtleV9jaXBoZXJzOyBkbworICAgIExJU1RfTUVNQkVSKCRjaXBoZXIsICRhdmFpbGFibGVfcHVia2V5X2NpcGhlcnMpCisgICAgaWYgdGVzdCAiJGZvdW5kIiA9ICIwIjsgdGhlbgorICAgICAgIEFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgcHVibGljLWtleSBjaXBoZXIgc3BlY2lmaWVkXSkKKyAgICBmaQorZG9uZQorQUNfTVNHX1JFU1VMVChbJGVuYWJsZWRfcHVia2V5X2NpcGhlcnNdKQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1kaWdlc3RzIHN3aXRjaC4KK0FDX0FSR19FTkFCTEUoZGlnZXN0cywKKwkgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlnZXN0cz1kaWdlc3RzXSwKKwkJCSAgICAgW3NlbGVjdCB0aGUgbWVzc2FnZSBkaWdlc3RzIHRvIGluY2x1ZGVdKSwKKwkgICAgICBbZW5hYmxlZF9kaWdlc3RzPWBlY2hvICRlbmFibGV2YWwgfCB0ciAnLDonICcgICcgfCB0ciAnW0EtWl0nICdbYS16XSdgXSwKKwkgICAgICBbZW5hYmxlZF9kaWdlc3RzPSIiXSkKK2lmIHRlc3QgIngkZW5hYmxlZF9kaWdlc3RzIiA9ICJ4IiBcCisgICAtbyAiJGVuYWJsZWRfZGlnZXN0cyIgPSAieWVzIiAgXAorICAgLW8gIiRlbmFibGVkX2RpZ2VzdHMiID0gIm5vIjsgdGhlbgorICAgZW5hYmxlZF9kaWdlc3RzPSRkZWZhdWx0X2RpZ2VzdHMKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIG1lc3NhZ2UgZGlnZXN0cyB0byBpbmNsdWRlXSkKK2ZvciBkaWdlc3QgaW4gJGVuYWJsZWRfZGlnZXN0czsgZG8KKyAgICBMSVNUX01FTUJFUigkZGlnZXN0LCAkYXZhaWxhYmxlX2RpZ2VzdHMpCisgICAgaWYgdGVzdCAiJGZvdW5kIiA9ICIwIjsgdGhlbgorICAgICAgIEFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgbWVzc2FnZSBkaWdlc3Qgc3BlY2lmaWVkXSkKKyAgICBmaQorZG9uZQorQUNfTVNHX1JFU1VMVChbJGVuYWJsZWRfZGlnZXN0c10pCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZW5hYmxlLWtkZnMgc3dpdGNoLgorQUNfQVJHX0VOQUJMRShrZGZzLAorICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWtmZHM9a2Rmc10sCisJCSAgICAgW3NlbGVjdCB0aGUgS0RGcyB0byBpbmNsdWRlXSksCisgICAgICBbZW5hYmxlZF9rZGZzPWBlY2hvICRlbmFibGV2YWwgfCB0ciAnLDonICcgICcgfCB0ciAnW0EtWl0nICdbYS16XSdgXSwKKyAgICAgIFtlbmFibGVkX2tkZnM9IiJdKQoraWYgdGVzdCAieCRlbmFibGVkX2tkZnMiID0gIngiIFwKKyAgIC1vICIkZW5hYmxlZF9rZGZzIiA9ICJ5ZXMiICBcCisgICAtbyAiJGVuYWJsZWRfa2RmcyIgPSAibm8iOyB0aGVuCisgICBlbmFibGVkX2tkZnM9JGRlZmF1bHRfa2RmcworZmkKK0FDX01TR19DSEVDS0lORyhbd2hpY2gga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zIHRvIGluY2x1ZGVdKQorZm9yIGtkZiBpbiAkZW5hYmxlZF9rZGZzOyBkbworICAgIExJU1RfTUVNQkVSKCRrZGYsICRhdmFpbGFibGVfa2RmcykKKyAgICBpZiB0ZXN0ICIkZm91bmQiID0gIjAiOyB0aGVuCisgICAgICAgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBzcGVjaWZpZWRdKQorICAgIGZpCitkb25lCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlZF9rZGZzXSkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1lbmFibGUtcmFuZG9tIHN3aXRjaC4KK0FDX0FSR19FTkFCTEUocmFuZG9tLAorCSAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yYW5kb209bmFtZV0sCisJICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCB3aGljaCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byB1c2VdKSwKKwkgICAgICBbcmFuZG9tPWBlY2hvICRlbmFibGV2YWwgfCB0ciAnW0EtWl0nICdbYS16XSdgXSwKKwkgICAgICBbXSkKK2lmIHRlc3QgIngkcmFuZG9tIiA9ICJ4IiAtbyAiJHJhbmRvbSIgPSAieWVzIiAtbyAiJHJhbmRvbSIgPSAibm8iOyB0aGVuCisgICAgcmFuZG9tPWRlZmF1bHQKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHJhbmRvbSBtb2R1bGUgdG8gdXNlXSkKK2lmIHRlc3QgIiRyYW5kb20iICE9ICJkZWZhdWx0IiAtYSAiJHJhbmRvbSIgIT0gImF1dG8iOyB0aGVuCisgICAgTElTVF9NRU1CRVIoJHJhbmRvbSwgJGF2YWlsYWJsZV9yYW5kb21fbW9kdWxlcykKKyAgICBpZiB0ZXN0ICIkZm91bmQiID0gIjAiOyB0aGVuCisgICAgICAgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCByYW5kb20gbW9kdWxlIHNwZWNpZmllZF0pCisgICAgZmkKK2ZpCitBQ19NU0dfUkVTVUxUKCRyYW5kb20pCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1kZXYtcmFuZG9tIHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB1c2Ugb2YgL2Rldi9yYW5kb20gaXMgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUoZGV2LXJhbmRvbSwKK1sgIC0tZGlzYWJsZS1kZXYtcmFuZG9tICAgIGRpc2FibGUgdGhlIHVzZSBvZiBkZXYgcmFuZG9tXSwKKyAgICB0cnlfZGV2X3JhbmRvbT0kZW5hYmxldmFsLCB0cnlfZGV2X3JhbmRvbT15ZXMpCitBQ19NU0dfUkVTVUxUKCR0cnlfZGV2X3JhbmRvbSkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS13aXRoLWVnZC1zb2NrZXQgc3dpdGNoLgorQUNfQVJHX1dJVEgoZWdkLXNvY2tldCwKKyAgICBbICAtLXdpdGgtZWdkLXNvY2tldD1OQU1FICBVc2UgTkFNRSBmb3IgdGhlIEVHRCBzb2NrZXQpXSwKKyAgICAgICAgICAgIGVnZF9zb2NrZXRfbmFtZT0iJHdpdGh2YWwiLCBlZ2Rfc29ja2V0X25hbWU9IiIgKQorQUNfREVGSU5FX1VOUVVPVEVEKEVHRF9TT0NLRVRfTkFNRSwgIiRlZ2Rfc29ja2V0X25hbWUiLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgRUdEIHNvY2tldCBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscyBzZWUgY2lwaGVyL3JuZGVnZC5jXSkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1lbmFibGUtcmFuZG9tLWRhZW1vbgorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBleHBlcmltZW50YWwgcmFuZG9tIGRhZW1vbiBpcyByZXF1ZXN0ZWRdKQorQUNfQVJHX0VOQUJMRShbcmFuZG9tLWRhZW1vbl0sCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yYW5kb20tZGFlbW9uXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0J1aWxkIGFuZCBzdXBwb3J0IHRoZSBleHBlcmltZW50YWwgZ2NyeXB0cm5kXSksCisgICAgICAgICAgICAgIFt1c2VfcmFuZG9tX2RhZW1vbj0kZW5hYmxldmFsXSwKKyAgICAgICAgICAgICAgW3VzZV9yYW5kb21fZGFlbW9uPW5vXSkKK0FDX01TR19SRVNVTFQoJHVzZV9yYW5kb21fZGFlbW9uKQoraWYgdGVzdCB4JHVzZV9yYW5kb21fZGFlbW9uID0geHllcyA7IHRoZW4KKyAgICBBQ19ERUZJTkUoVVNFX1JBTkRPTV9EQUVNT04sMSwKKyAgICAgICAgICAgICAgW0RlZmluZSB0byBzdXBwb3J0IHRoZSBleHBlcmltZW50YWwgcmFuZG9tIGRhZW1vbl0pCitmaQorQU1fQ09ORElUSU9OQUwoVVNFX1JBTkRPTV9EQUVNT04sIHRlc3QgeCR1c2VfcmFuZG9tX2RhZW1vbiA9IHh5ZXMpCisKKworIyBJbXBsZW1lbnRhdGlvbiBvZiAtLWRpc2FibGUtYXNtLgorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE1QSSBhc3NlbWJsZXIgbW9kdWxlcyBhcmUgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUoW2FzbV0sCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYXNtXSwKKwkgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBNUEkgYXNzZW1ibGVyIG1vZHVsZXNdKSwKKyAgICAgICAgICAgICAgW3RyeV9hc21fbW9kdWxlcz0kZW5hYmxldmFsXSwKKyAgICAgICAgICAgICAgW3RyeV9hc21fbW9kdWxlcz15ZXNdKQorQUNfTVNHX1JFU1VMVCgkdHJ5X2FzbV9tb2R1bGVzKQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1tLWd1YXJkIHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBtZW1vcnkgZ3VhcmQgaXMgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUobS1ndWFyZCwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW0tZ3VhcmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRW5hYmxlIG1lbW9yeSBndWFyZCBmYWNpbGl0eV0pLAorICAgICAgICAgICAgICBbdXNlX21fZ3VhcmQ9JGVuYWJsZXZhbF0sIFt1c2VfbV9ndWFyZD1ub10pCitBQ19NU0dfUkVTVUxUKCR1c2VfbV9ndWFyZCkKK2lmIHRlc3QgIiR1c2VfbV9ndWFyZCIgPSB5ZXMgOyB0aGVuCisgICAgQUNfREVGSU5FKE1fR1VBUkQsMSxbRGVmaW5lIHRvIHVzZSB0aGUgKG9ic29sZXRlKSBtYWxsb2MgZ3VhcmRpbmcgZmVhdHVyZV0pCitmaQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1sYXJnZS1kYXRhLXRlc3RzIHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBydW4gbGFyZ2UgZGF0YSB0ZXN0c10pCitBQ19BUkdfRU5BQkxFKGxhcmdlLWRhdGEtdGVzdHMsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sYXJnZS1kYXRhLXRlc3RzXSwKKyAgICAgICAgICAgICAgICAgW0VuYWJsZSB0aGUgcmVhbCBsb25nIHJ1aW5uaW5nIGxhcmdlIGRhdGEgdGVzdHNdKSwKKwkgICAgICBsYXJnZV9kYXRhX3Rlc3RzPSRlbmFibGV2YWwsbGFyZ2VfZGF0YV90ZXN0cz1ubykKK0FDX01TR19SRVNVTFQoJGxhcmdlX2RhdGFfdGVzdHMpCitBQ19TVUJTVChSVU5fTEFSR0VfREFUQV9URVNUUywgJGxhcmdlX2RhdGFfdGVzdHMpCisKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS13aXRoLWNhcGFiaWxpdGllcyBzd2l0Y2guCisjIENoZWNrIHdoZXRoZXIgd2Ugd2FudCB0byB1c2UgTGludXggY2FwYWJpbGl0aWVzCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdXNlIG9mIGNhcGFiaWxpdGllcyBpcyByZXF1ZXN0ZWRdKQorQUNfQVJHX1dJVEgoY2FwYWJpbGl0aWVzLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1jYXBhYmlsaXRpZXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZSBsaW51eCBjYXBhYmlsaXRpZXMgW2RlZmF1bHQ9bm9dXSksCisgICAgICAgICAgICBbdXNlX2NhcGFiaWxpdGllcz0iJHdpdGh2YWwiXSxbdXNlX2NhcGFiaWxpdGllcz1ub10pCitBQ19NU0dfUkVTVUxUKCR1c2VfY2FwYWJpbGl0aWVzKQorCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWVuYWJsZS1obWFjLWJpbmFyeS1jaGVjay4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBhIEhNQUMgYmluYXJ5IGNoZWNrIGlzIHJlcXVlc3RlZF0pCitBQ19BUkdfRU5BQkxFKGhtYWMtYmluYXJ5LWNoZWNrLAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaG1hYy1iaW5hcnktY2hlY2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRW5hYmxlIGxpYnJhcnkgaW50ZWdyaXR5IGNoZWNrXSksCisgICAgICAgICAgICAgIFt1c2VfaG1hY19iaW5hcnlfY2hlY2s9JGVuYWJsZXZhbF0sCisgICAgICAgICAgICAgIFt1c2VfaG1hY19iaW5hcnlfY2hlY2s9bm9dKQorQUNfTVNHX1JFU1VMVCgkdXNlX2htYWNfYmluYXJ5X2NoZWNrKQoraWYgdGVzdCAiJHVzZV9obWFjX2JpbmFyeV9jaGVjayIgPSB5ZXMgOyB0aGVuCisgICAgQUNfREVGSU5FKEVOQUJMRV9ITUFDX0JJTkFSWV9DSEVDSywxLAorICAgICAgICAgICAgICBbRGVmaW5lIHRvIHN1cHBvcnQgYW4gSE1BQyBiYXNlZCBpbnRlZ3JpdHkgY2hlY2tdKQorZmkKKworCisjIEltcGxlbWVudGF0aW9uIG9mIHRoZSAtLWRpc2FibGUtcGFkbG9jay1zdXBwb3J0IHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBwYWRsb2NrIHN1cHBvcnQgaXMgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUocGFkbG9jay1zdXBwb3J0LAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXBhZGxvY2stc3VwcG9ydF0sCisgICAgICAgCSAgICAgICAgIFtEaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBQYWRMb2NrIEVuZ2luZSBvZiBWSUEgcHJvY2Vzc29yc10pLAorCSAgICAgIHBhZGxvY2tzdXBwb3J0PSRlbmFibGV2YWwscGFkbG9ja3N1cHBvcnQ9eWVzKQorQUNfTVNHX1JFU1VMVCgkcGFkbG9ja3N1cHBvcnQpCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1hZXNuaS1zdXBwb3J0IHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBBRVNOSSBzdXBwb3J0IGlzIHJlcXVlc3RlZF0pCitBQ19BUkdfRU5BQkxFKGFlc25pLXN1cHBvcnQsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYWVzbmktc3VwcG9ydF0sCisgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zXSksCisJICAgICAgYWVzbmlzdXBwb3J0PSRlbmFibGV2YWwsYWVzbmlzdXBwb3J0PXllcykKK0FDX01TR19SRVNVTFQoJGFlc25pc3VwcG9ydCkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLXBjbG11bC1zdXBwb3J0IHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBQQ0xNVUwgc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQorQUNfQVJHX0VOQUJMRShwY2xtdWwtc3VwcG9ydCwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1wY2xtdWwtc3VwcG9ydF0sCisgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBQQ0xNVUwgaW5zdHJ1Y3Rpb25zXSksCisJICAgICAgcGNsbXVsc3VwcG9ydD0kZW5hYmxldmFsLHBjbG11bHN1cHBvcnQ9eWVzKQorQUNfTVNHX1JFU1VMVCgkcGNsbXVsc3VwcG9ydCkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLWRybmctc3VwcG9ydCBzd2l0Y2guCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgRFJORyBzdXBwb3J0IGlzIHJlcXVlc3RlZF0pCitBQ19BUkdfRU5BQkxFKGRybmctc3VwcG9ydCwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kcm5nLXN1cHBvcnRdLAorICAgICAgICAgICAgICAgICBbRGlzYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgRFJORyAoUkRSQU5EIGluc3RydWN0aW9uKV0pLAorCSAgICAgIGRybmdzdXBwb3J0PSRlbmFibGV2YWwsZHJuZ3N1cHBvcnQ9eWVzKQorQUNfTVNHX1JFU1VMVCgkZHJuZ3N1cHBvcnQpCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1hdngtc3VwcG9ydCBzd2l0Y2guCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgQVZYIHN1cHBvcnQgaXMgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUoYXZ4LXN1cHBvcnQsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYXZ4LXN1cHBvcnRdLAorICAgICAgICAgICAgICAgICBbRGlzYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgQVZYIGluc3RydWN0aW9uc10pLAorCSAgICAgIGF2eHN1cHBvcnQ9JGVuYWJsZXZhbCxhdnhzdXBwb3J0PXllcykKK0FDX01TR19SRVNVTFQoJGF2eHN1cHBvcnQpCisKKyMgSW1wbGVtZW50YXRpb24gb2YgdGhlIC0tZGlzYWJsZS1hdngyLXN1cHBvcnQgc3dpdGNoLgorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEFWWDIgc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQorQUNfQVJHX0VOQUJMRShhdngyLXN1cHBvcnQsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYXZ4Mi1zdXBwb3J0XSwKKyAgICAgICAgICAgICAgICAgW0Rpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEludGVsIEFWWDIgaW5zdHJ1Y3Rpb25zXSksCisJICAgICAgYXZ4MnN1cHBvcnQ9JGVuYWJsZXZhbCxhdngyc3VwcG9ydD15ZXMpCitBQ19NU0dfUkVTVUxUKCRhdngyc3VwcG9ydCkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLW5lb24tc3VwcG9ydCBzd2l0Y2guCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTkVPTiBzdXBwb3J0IGlzIHJlcXVlc3RlZF0pCitBQ19BUkdfRU5BQkxFKG5lb24tc3VwcG9ydCwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1uZW9uLXN1cHBvcnRdLAorICAgICAgICAgICAgICAgICBbRGlzYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNIE5FT04gaW5zdHJ1Y3Rpb25zXSksCisJICAgICAgbmVvbnN1cHBvcnQ9JGVuYWJsZXZhbCxuZW9uc3VwcG9ydD15ZXMpCitBQ19NU0dfUkVTVUxUKCRuZW9uc3VwcG9ydCkKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLU8tZmxhZy1tdW5naW5nIHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBhIC1PIGZsYWcgbXVuZ2luZyBpcyByZXF1ZXN0ZWRdKQorQUNfQVJHX0VOQUJMRShbTy1mbGFnLW11bmdpbmddLAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLU8tZmxhZy1tdW5naW5nXSwKKyAgICAgICAgICAgICAgICAgW0Rpc2FibGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBjYyAtTyBmbGFnXSksCisgICAgICAgICAgICAgIFtlbmFibGVfb19mbGFnX211bmdpbmc9JGVuYWJsZXZhbF0sCisgICAgICAgICAgICAgIFtlbmFibGVfb19mbGFnX211bmdpbmc9eWVzXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9vX2ZsYWdfbXVuZ2luZykKK0FNX0NPTkRJVElPTkFMKEVOQUJMRV9PX0ZMQUdfTVVOR0lORywgdGVzdCAiJGVuYWJsZV9vX2ZsYWdfbXVuZ2luZyIgPSAieWVzIikKKworIyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgLS1kaXNhYmxlLWFtZDY0LWFzLWZlYXR1cmUtZGV0ZWN0aW9uIHN3aXRjaC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgQU1ENjQgYXMoMSkgZmVhdHVyZSBkZXRlY3Rpb25dKQorQUNfQVJHX0VOQUJMRShhbWQ2NC1hcy1mZWF0dXJlLWRldGVjdGlvbiwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hbWQ2NC1hcy1mZWF0dXJlLWRldGVjdGlvbl0sCisgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHRoZSBhdXRvLWRldGVjdGlvbiBvZiBBTUQ2NCBhcygxKSBmZWF0dXJlc10pLAorCSAgICAgIGFtZDY0X2FzX2ZlYXR1cmVfZGV0ZWN0aW9uPSRlbmFibGV2YWwsCisgICAgICAgICAgICAgIGFtZDY0X2FzX2ZlYXR1cmVfZGV0ZWN0aW9uPXllcykKK0FDX01TR19SRVNVTFQoJGFtZDY0X2FzX2ZlYXR1cmVfZGV0ZWN0aW9uKQorCisKK0FDX0RFRklORV9VTlFVT1RFRChQUklOVEFCTEVfT1NfTkFNRSwgIiRQUklOVEFCTEVfT1NfTkFNRSIsCisgICAgICAgICAgICAgICAgICAgW0EgaHVtYW4gcmVhZGFibGUgdGV4dCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBPU10pCisKKyMgRm9yIHNvbWUgc3lzdGVtcyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBsZF92ZXJzaW9uIHNjcmlwdHMuCisjIFVzZSBpdCB0aGVuIGFzIGRlZmF1bHQuCitoYXZlX2xkX3ZlcnNpb25fc2NyaXB0PW5vCitjYXNlICIke2hvc3R9IiBpbgorICAgICotKi1saW51eCopCisJaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXMKKyAgICAgICAgOzsKKyAgICAqLSotZ251KikKKwloYXZlX2xkX3ZlcnNpb25fc2NyaXB0PXllcworICAgICAgICA7OworZXNhYworQUNfQVJHX0VOQUJMRShbbGQtdmVyc2lvbi1zY3JpcHRdLAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbGQtdmVyc2lvbi1zY3JpcHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlL2Rpc2FibGUgdXNlIG9mIGxpbmtlciB2ZXJzaW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IGlzIHN5c3RlbSBkZXBlbmRlbnQpXSksCisgICAgICAgICAgICAgIFtoYXZlX2xkX3ZlcnNpb25fc2NyaXB0PSRlbmFibGV2YWxdLAorICAgICAgICAgICAgICBbIDogXSApCitBTV9DT05ESVRJT05BTChIQVZFX0xEX1ZFUlNJT05fU0NSSVBULCB0ZXN0ICIkaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdCIgPSAieWVzIikKKworQUNfREVGSU5FX1VOUVVPVEVEKE5BTUVfT0ZfREVWX1JBTkRPTSwgIiROQU1FX09GX0RFVl9SQU5ET00iLAorICAgICAgICAgICAgICAgICAgIFtkZWZpbmVkIHRvIHRoZSBuYW1lIG9mIHRoZSBzdHJvbmcgcmFuZG9tIGRldmljZV0pCitBQ19ERUZJTkVfVU5RVU9URUQoTkFNRV9PRl9ERVZfVVJBTkRPTSwgIiROQU1FX09GX0RFVl9VUkFORE9NIiwKKyAgICAgICAgICAgICAgICAgICBbZGVmaW5lZCB0byB0aGUgbmFtZSBvZiB0aGUgd2Vha2VyIHJhbmRvbSBkZXZpY2VdKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBncGctZXJyb3IgaXMgcmVxdWlyZWQuCisjCitBTV9QQVRIX0dQR19FUlJPUigiJE5FRURfR1BHX0VSUk9SX1ZFUlNJT04iKQoraWYgdGVzdCAieCRHUEdfRVJST1JfTElCUyIgPSAieCI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtsaWJncGctZXJyb3IgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIFNlZSBmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvIC5dKQorZmkKKworQUNfREVGSU5FKEdQR19FUlJfU09VUkNFX0RFRkFVTFQsIEdQR19FUlJfU09VUkNFX0dDUllQVCwKKyAgICAgICAgICBbVGhlIGRlZmF1bHQgZXJyb3Igc291cmNlIGZvciBsaWJnY3J5cHQuXSkKKworIworIyBDaGVjayB3aGV0aGVyIHRoZSBHTlUgUHRoIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiAgV2UgcmVxdWlyZSB0aGlzCisjIHRvIGJ1aWxkIHRoZSBvcHRpb25hbCBnY3J5cHRybmQgcHJvZ3JhbS4KKyMKK0FDX0FSR19XSVRIKHB0aC1wcmVmaXgsCisgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXB0aC1wcmVmaXg9UEZYXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR05VIFB0aCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorICAgICBwdGhfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBwdGhfY29uZmlnX3ByZWZpeD0iIikKK2lmIHRlc3QgeCRwdGhfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorICAgUFRIX0NPTkZJRz0iJHB0aF9jb25maWdfcHJlZml4L2Jpbi9wdGgtY29uZmlnIgorZmkKK2lmIHRlc3QgIiR1c2VfcmFuZG9tX2RhZW1vbiIgPSAieWVzIjsgdGhlbgorICBBQ19QQVRIX1BST0coUFRIX0NPTkZJRywgcHRoLWNvbmZpZywgbm8pCisgIGlmIHRlc3QgIiRQVEhfQ09ORklHIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbWworKioqCisqKiogVG8gYnVpbGQgdGhlIExpYmdjcnlwdCdzIHJhbmRvbSBudW1iZXIgZGFlbW9uCisqKiogd2UgbmVlZCB0aGUgc3VwcG9ydCBvZiB0aGUgR05VIFBvcnRhYmxlIFRocmVhZHMgTGlicmFyeS4KKyoqKiBEb3dubG9hZCBpdCBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL2dudS9wdGgvCisqKiogT24gYSBEZWJpYW4gR05VL0xpbnV4IHN5c3RlbSB5b3UgbWlnaHQgd2FudCB0byB0cnkKKyoqKiAgIGFwdC1nZXQgaW5zdGFsbCBsaWJwdGgtZGV2CisqKipdXSkKKyAgZWxzZQorICAgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKFsxLjMuN10pCisgICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKyAgICAgICBQVEhfQ0ZMQUdTPWAkUFRIX0NPTkZJRyAtLWNmbGFnc2AKKyAgICAgICBQVEhfTElCUz1gJFBUSF9DT05GSUcgLS1sZGZsYWdzYAorICAgICAgIFBUSF9MSUJTPSIkUFRIX0xJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCisgICAgICAgQUNfREVGSU5FKFVTRV9HTlVfUFRILCAxLAorICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBHTlUgUG9ydGFibGUgVGhyZWFkIExpYnJhcnkgc2hvdWxkIGJlIHVzZWRdKQorICAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lZCBpZiB0aGUgR05VIFB0aCBpcyBhdmFpbGFibGVdKQorICAgIGZpCisgIGZpCitmaQorQUNfU1VCU1QoUFRIX0NGTEFHUykKK0FDX1NVQlNUKFBUSF9MSUJTKQorCisKKyMKKyMgU2VlIHdoaWNoIHRocmVhZCBzeXN0ZW0gd2UgaGF2ZQorIworIyBXaW5kb3dzIGhhcyBhbHdheXMgdGhyZWFkIHN1cHBvcnQ7IHRodXMgd2UgZG9uJ3QgYm90aGVyIHRvIHRlc3QgZm9yCisjIGl0IGFzIGl0IG1heSBsZWFkIHRvIGZhbHNlIHJlc3VsdHMgd2hlbiBjcm9zcyBidWlsZGluZy4KK2lmIHRlc3QgIiRoYXZlX3czMl9zeXN0ZW0iID0geWVzOyB0aGVuCisgIEFDX0RFRklORShbVVNFX1dJTkRPV1NfVEhSRUFEU10sIFsxXSkKKyAgTElCVEhSRUFEPQorICBMVExJQlRIUkVBRD0KKyAgTElCTVVMVElUSFJFQUQ9CisgIExUTElCTVVMVElUSFJFQUQ9CisgIFRIUkVBRExJQl9DUFBGTEFHUz0iIgorICBBQ19TVUJTVChbTElCVEhSRUFEXSkKKyAgQUNfU1VCU1QoW0xUTElCVEhSRUFEXSkKKyAgQUNfU1VCU1QoW0xJQk1VTFRJVEhSRUFEXSkKKyAgQUNfU1VCU1QoW0xUTElCTVVMVElUSFJFQURdKQorZWxzZQorICBnbF9MT0NLCitmaQorCisKKyMgU29sYXJpcyBuZWVkcyAtbHNvY2tldCBhbmQgLWxuc2wuIFVuaXN5cyBzeXN0ZW0gaW5jbHVkZXMKKyMgZ2V0aG9zdGJ5bmFtZSBpbiBsaWJzb2NrZXQgYnV0IG5lZWRzIGxpYm5zbCBmb3Igc29ja2V0LgorQUNfU0VBUkNIX0xJQlMoc2V0c29ja29wdCwgW3NvY2tldF0sICwKKwlbQUNfU0VBUkNIX0xJQlMoc2V0c29ja29wdCwgW3NvY2tldF0sICwgLCBbLWxuc2xdKV0pCitBQ19TRUFSQ0hfTElCUyhzZXRzb2Nrb3B0LCBbbnNsXSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4gIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19IRUFERVJfU1REQworQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzeXMvc2VsZWN0Lmggc3lzL21zZy5oKQorSU5TRVJUX1NZU19TRUxFQ1RfSD0KK2lmIHRlc3QgeCIkYWNfY3ZfaGVhZGVyX3N5c19zZWxlY3RfaCIgPSB4eWVzOyB0aGVuCisgIElOU0VSVF9TWVNfU0VMRUNUX0g9IiBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IgorZmkKK0FDX1NVQlNUKElOU0VSVF9TWVNfU0VMRUNUX0gpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsICMjIyMKKyMjIyMgIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuICAgIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FDX0NfQ09OU1QKK0FDX0NfSU5MSU5FCitBQ19UWVBFX1NJWkVfVAorQUNfVFlQRV9TSUdOQUwKK0FDX0RFQ0xfU1lTX1NJR0xJU1QKK0FDX1RZUEVfUElEX1QKKworR05VUEdfQ0hFQ0tfVFlQRURFRihieXRlLCBIQVZFX0JZVEVfVFlQRURFRikKK0dOVVBHX0NIRUNLX1RZUEVERUYodXNob3J0LCBIQVZFX1VTSE9SVF9UWVBFREVGKQorR05VUEdfQ0hFQ0tfVFlQRURFRih1bG9uZywgSEFWRV9VTE9OR19UWVBFREVGKQorR05VUEdfQ0hFQ0tfVFlQRURFRih1MTYsIEhBVkVfVTE2X1RZUEVERUYpCitHTlVQR19DSEVDS19UWVBFREVGKHUzMiwgSEFWRV9VMzJfVFlQRURFRikKKworZ2xfVFlQRV9TT0NLTEVOX1QKK2Nhc2UgIiR7aG9zdH0iIGluCisgICotKi1taW5ndzMyKikKKyAgICAjIHNvY2tsZW5fdCBtYXkgb3IgbWF5IG5vdCBiZSBkZWZpbmVkIGRlcGVuZGluZyBvbiB3aGF0IGhlYWRlcnMKKyAgICAjIGFyZSBpbmNsdWRlZC4gIFRvIGJlIHNhZmUgd2UgdXNlIGludCBhcyB0aGlzIGlzIHRoZSBhY3R1YWwgdHlwZS4KKyAgICBGQUxMQkFDS19TT0NLTEVOX1Q9InR5cGVkZWYgaW50IGdjcnlfc29ja2xlbl90OyIKKyAgICA7OworICAqKQorICAgIGlmIHRlc3QgIi4kZ2xfY3Zfc29ja2xlbl90X2VxdWl2IiA9ICIuIjsgdGhlbgorICAgICAgRkFMTEJBQ0tfU09DS0xFTl9UPSJ0eXBlZGVmIHNvY2tsZW5fdCBnY3J5X3NvY2tsZW5fdDsiCisgICAgZWxzZQorICAgICAgRkFMTEJBQ0tfU09DS0xFTl9UPSJ0eXBlZGVmICR7Z2xfY3Zfc29ja2xlbl90X2VxdWl2fSBnY3J5X3NvY2tsZW5fdDsiCisgICAgZmkKK2VzYWMKK0FDX1NVQlNUKEZBTExCQUNLX1NPQ0tMRU5fVCkKKworCisjCisjIENoZWNrIGZvciBfX2J1aWx0aW5fYnN3YXAzMiBpbnRyaW5zaWMuCisjCitBQ19DQUNIRV9DSEVDSyhmb3IgX19idWlsdGluX2Jzd2FwMzIsCisgICAgICAgW2djcnlfY3ZfaGF2ZV9idWlsdGluX2Jzd2FwMzJdLAorICAgICAgIFtnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyPW5vCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sCisgICAgICAgICAgW2ludCB4ID0gMDsgaW50IHkgPSBfX2J1aWx0aW5fYnN3YXAzMih4KTsgcmV0dXJuIHk7XSldLAorICAgICAgICAgIFtnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyPXllc10pXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDMyIiA9ICJ5ZXMiIDsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfQlVJTFRJTl9CU1dBUDMyLDEsCisgICAgICAgICAgICAgW0RlZmluZWQgaWYgY29tcGlsZXIgaGFzICdfX2J1aWx0aW5fYnN3YXAzMicgaW50cmluc2ljXSkKK2ZpCisKKworIworIyBDaGVjayBmb3IgX19idWlsdGluX2Jzd2FwNjQgaW50cmluc2ljLgorIworQUNfQ0FDSEVfQ0hFQ0soZm9yIF9fYnVpbHRpbl9ic3dhcDY0LAorICAgICAgIFtnY3J5X2N2X2hhdmVfYnVpbHRpbl9ic3dhcDY0XSwKKyAgICAgICBbZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2ND1ubworICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLAorICAgICAgICAgIFtsb25nIGxvbmcgeCA9IDA7IGxvbmcgbG9uZyB5ID0gX19idWlsdGluX2Jzd2FwNjQoeCk7IHJldHVybiB5O10pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2ND15ZXNdKV0pCitpZiB0ZXN0ICIkZ2NyeV9jdl9oYXZlX2J1aWx0aW5fYnN3YXA2NCIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX0JVSUxUSU5fQlNXQVA2NCwxLAorICAgICAgICAgICAgIFtEZWZpbmVkIGlmIGNvbXBpbGVyIGhhcyAnX19idWlsdGluX2Jzd2FwNjQnIGludHJpbnNpY10pCitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIFZMQSBzdXBwb3J0ICh2YXJpYWJsZSBsZW5ndGggYXJyYXlzKS4KKyMKK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgdGhlIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMgYXJlIHN1cHBvcnRlZCwKKyAgICAgICBbZ2NyeV9jdl9oYXZlX3ZsYV0sCisgICAgICAgW2djcnlfY3ZfaGF2ZV92bGE9bm8KKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbdm9pZCBmMShjaGFyICosIGludCk7CisgICAgICAgICAgICBjaGFyIGZvbyhpbnQgaSkgeworICAgICAgICAgICAgICBjaGFyIGJbKGkgPCAwID8gMCA6IGkpICsgMV07CisgICAgICAgICAgICAgIGYxKGIsIHNpemVvZiBiKTsgcmV0dXJuIGJbMF07fV1dKV0sCisgICAgICAgICAgW2djcnlfY3ZfaGF2ZV92bGE9eWVzXSldKQoraWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV92bGEiID0gInllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9WTEEsMSwgW0RlZmluZWQgaWYgdmFyaWFibGUgbGVuZ3RoIGFycmF5cyBhcmUgc3VwcG9ydGVkXSkKK2ZpCisKKworIworIyBDaGVjayBmb3IgRUxGIHZpc2liaWxpdHkgc3VwcG9ydC4KKyMKK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgdGhlIHZpc2liaWxpdHkgYXR0cmlidXRlIGlzIHN1cHBvcnRlZCwKKyAgICAgICBnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlLAorICAgICAgIFtnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlPW5vCisgICAgICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbaW50IGZvbyBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkgPSAxOworICAgICAgICAgICAgaW50IGJhciBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoInByb3RlY3RlZCIpKSkgPSAxOworICAgICAgICAgIF1dKV0pCisKKyAgICAgICAgaWYgJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgXAorICAgICAgICAgICAgICAgICAgMT4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQgOyB0aGVuCisgICAgICAgICAgICBpZiBncmVwICdcLmhpZGRlbi4qZm9vJyBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBncmVwICdcLnByb3RlY3RlZC4qYmFyJyBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlPXllcworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgIF0pCitpZiB0ZXN0ICIkZ2NyeV9jdl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPSAieWVzIjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKGZvciBicm9rZW4gdmlzaWJpbGl0eSBhdHRyaWJ1dGUsCisgICAgICAgZ2NyeV9jdl9icm9rZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUsCisgICAgICAgW2djcnlfY3ZfYnJva2VuX3Zpc2liaWxpdHlfYXR0cmlidXRlPXllcworICAgICAgICBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1NPVVJDRSgKKyAgICAgICAgICBbW2ludCBmb28gKGludCB4KTsKKyAgICAgICAgICAgIGludCBiYXIgKGludCB4KSBfX2FzbV9fICgiZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CisgICAgICAgICAgICBpbnQgYmFyIChpbnQgeCkgeyByZXR1cm4geDsgfQorICAgICAgICAgIF1dKV0pCisKKyAgICAgICAgaWYgJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgXAorICAgICAgICAgICAgICAgICAgMT4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQgOyB0aGVuCisgICAgICAgICAgIGlmIGdyZXAgJ1wuaGlkZGVuQDw6QCAJX0A6PkBmb28nIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOworICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgZ2NyeV9jdl9icm9rZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGU9bm8KKyAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICBdKQorZmkKK2lmIHRlc3QgIiRnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soZm9yIGJyb2tlbiBhbGlhcyBhdHRyaWJ1dGUsCisgICAgICAgZ2NyeV9jdl9icm9rZW5fYWxpYXNfYXR0cmlidXRlLAorICAgICAgIFtnY3J5X2N2X2Jyb2tlbl9hbGlhc19hdHRyaWJ1dGU9eWVzCisgICAgICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbZXh0ZXJuIGludCBmb28gKGludCB4KSBfX2FzbSAoInh5enp5Iik7CisgICAgICAgICAgICBpbnQgYmFyIChpbnQgeCkgeyByZXR1cm4geDsgfQorICAgICAgICAgICAgZXh0ZXJuIF9fdHlwZW9mIChiYXIpIGZvbyBfX2F0dHJpYnV0ZSAoKHdlYWssIGFsaWFzICgiYmFyIikpKTsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgZGZvbzsKKyAgICAgICAgICAgIGV4dGVybiBfX3R5cGVvZiAoZGZvbykgZGZvbyBfX2FzbSAoImFiY2NiIik7CisgICAgICAgICAgICBpbnQgZGZvbyA9IDE7CisgICAgICAgICAgXV0pXSkKKworICAgICAgICBpZiAke0NDLWNjfSAtV2Vycm9yIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyBcCisgICAgICAgICAgICAgICAgICAxPiZBU19NRVNTQUdFX0xPR19GRCAyPiZBU19NRVNTQUdFX0xPR19GRCA7IHRoZW4KKyAgICAgICAgICAgaWYgZ3JlcCAneHl6enknIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxICYmIFwKKyAgICAgICAgICAgICAgZ3JlcCAnYWJjY2InIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICAgIGdjcnlfY3ZfYnJva2VuX2FsaWFzX2F0dHJpYnV0ZT1ubworICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBdKQorZmkKK2lmIHRlc3QgIiRnY3J5X2N2X3Zpc2liaWxpdHlfYXR0cmlidXRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soaWYgZ2NjIHN1cHBvcnRzIC1mdmlzaWJpbGl0eT1oaWRkZW4sCisgICAgICAgZ2NyeV9jdl9nY2NfaGFzX2ZfdmlzaWJpbGl0eSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfaGFzX2ZfdmlzaWJpbGl0eT1ubworICAgICAgICBfZ2NjX2NmbGFnc19zYXZlPSRDRkxBR1MKKyAgICAgICAgQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3ZfZ2NjX2hhc19mX3Zpc2liaWxpdHk9eWVzKQorICAgICAgICBDRkxBR1M9JF9nY2NfY2ZsYWdzX3NhdmU7CisgICAgICAgXSkKK2ZpCitpZiB0ZXN0ICIkZ2NyeV9jdl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPSAieWVzIiBcCisgICAmJiB0ZXN0ICIkZ2NyeV9jdl9icm9rZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiICE9ICJ5ZXMiIFwKKyAgICYmIHRlc3QgIiRnY3J5X2N2X2Jyb2tlbl9hbGlhc19hdHRyaWJ1dGUiICE9ICJ5ZXMiIFwKKyAgICYmIHRlc3QgIiRnY3J5X2N2X2djY19oYXNfZl92aXNpYmlsaXR5IiA9ICJ5ZXMiCisgdGhlbgorICAgQUNfREVGSU5FKEdDUllfVVNFX1ZJU0lCSUxJVFksIDEsCisgICAgICAgICAgICAgICBbRGVmaW5lIHRvIHVzZSB0aGUgR05VIEMgdmlzaWJpbGl0eSBhdHRyaWJ1dGUuXSkKKyAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBHQ0Mgc3R5bGUgYWxpZ25lZCBhdHRyaWJ1dGUKKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBHQ0Mgc3R5bGUgYWxpZ25lZCBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfYXR0cmlidXRlX2FsaWduZWRdLAorICAgICAgIFtnY3J5X2N2X2djY19hdHRyaWJ1dGVfYWxpZ25lZD1ubworICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1tzdHJ1Y3QgeyBpbnQgYTsgfSBmb28gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpO11dKV0sCisgICAgICAgICAgW2djcnlfY3ZfZ2NjX2F0dHJpYnV0ZV9hbGlnbmVkPXllc10pXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2djY19hdHRyaWJ1dGVfYWxpZ25lZCIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX0dDQ19BVFRSSUJVVEVfQUxJR05FRCwxLAorICAgICBbRGVmaW5lZCBpZiBhIEdDQyBzdHlsZSAiX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKG4pKSIgaXMgc3VwcG9ydGVkXSkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAnYXNtJyBvciAnX19hc21fXycga2V5d29yZCBmb3IKKyMgYXNzZW1ibGVyIGJsb2Nrcy4KKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICdhc20nIGFzc2VtYmxlciBrZXl3b3JkIGlzIHN1cHBvcnRlZF0sCisgICAgICAgW2djcnlfY3ZfaGF2ZV9hc21dLAorICAgICAgIFtnY3J5X2N2X2hhdmVfYXNtPW5vCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRSgKKyAgICAgICAgICBbW3ZvaWQgYSh2b2lkKSB7IGFzbSgiIjo6OiJtZW1vcnkiKTsgfV1dKV0sCisgICAgICAgICAgW2djcnlfY3ZfaGF2ZV9hc209eWVzXSldKQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJ19fYXNtX18nIGFzc2VtYmxlciBrZXl3b3JkIGlzIHN1cHBvcnRlZF0sCisgICAgICAgW2djcnlfY3ZfaGF2ZV9fX2FzbV9fXSwKKyAgICAgICBbZ2NyeV9jdl9oYXZlX19fYXNtX189bm8KKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbdm9pZCBhKHZvaWQpIHsgX19hc21fXygiIjo6OiJtZW1vcnkiKTsgfV1dKV0sCisgICAgICAgICAgW2djcnlfY3ZfaGF2ZV9fX2FzbV9fPXllc10pXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2hhdmVfYXNtIiA9ICJubyIgOyB0aGVuCisgICBpZiB0ZXN0ICIkZ2NyeV9jdl9oYXZlX19fYXNtX18iID0gInllcyIgOyB0aGVuCisgICAgICBBQ19ERUZJTkUoYXNtLF9fYXNtX18sCisgICAgICAgIFtEZWZpbmUgdG8gc3VwcG9ydGVkIGFzc2VtYmxlciBibG9jayBrZXl3b3JkLCBpZiBwbGFpbiAnYXNtJyB3YXMgbm90CisgICAgICAgICBzdXBwb3J0ZWRdKQorICAgZmkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBpbmxpbmUgYXNzZW1ibHkgbWVtb3J5IGJhcnJpZXIuCisjCitpZiB0ZXN0ICIkZ2NyeV9jdl9oYXZlX2FzbSIgPSAibm8iIDsgdGhlbgorICAgaWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9fX2FzbV9fIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW5saW5lIGFzc2VtYmx5IG1lbW9yeSBiYXJyaWVyIGlzIHN1cHBvcnRlZF0sCisgICAgICAgICAgW2djcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5XSwKKyAgICAgICAgICBbZ2NyeV9jdl9oYXZlX2FzbV92b2xhdGlsZV9tZW1vcnk9bm8KKyAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgICAgIFtbdm9pZCBhKHZvaWQpIHsgX19hc21fXyB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKTsgfV1dKV0sCisgICAgICAgICAgICAgW2djcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5PXllc10pXSkKKyAgIGZpCitlbHNlCisgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbmxpbmUgYXNzZW1ibHkgbWVtb3J5IGJhcnJpZXIgaXMgc3VwcG9ydGVkXSwKKyAgICAgICBbZ2NyeV9jdl9oYXZlX2FzbV92b2xhdGlsZV9tZW1vcnldLAorICAgICAgIFtnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeT1ubworICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1t2b2lkIGEodm9pZCkgeyBhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5Iik7IH1dXSldLAorICAgICAgICAgIFtnY3J5X2N2X2hhdmVfYXNtX3ZvbGF0aWxlX21lbW9yeT15ZXNdKV0pCitmaQoraWYgdGVzdCAiJGdjcnlfY3ZfaGF2ZV9hc21fdm9sYXRpbGVfbWVtb3J5IiA9ICJ5ZXMiIDsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfR0NDX0FTTV9WT0xBVElMRV9NRU1PUlksMSwKKyAgICAgW0RlZmluZSBpZiBpbmxpbmUgYXNtIG1lbW9yeSBiYXJyaWVyIGlzIHN1cHBvcnRlZF0pCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgYXNzZW1ibGVyIHN1cHBvcnRzIGZlYXR1cmVzIG5lZWRlZCBmb3Igb3VyIEFSTQorIyBpbXBsZW1lbnRhdGlvbnMuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgdXAgdGhlCisjIGFzc2VtYmxlciBzdHVmZi4KKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIEdDQyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSBmb3IgQVJNIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uc10sCisgICAgICAgW2djcnlfY3ZfZ2NjX2FybV9wbGF0Zm9ybV9hc19va10sCisgICAgICAgW2djcnlfY3ZfZ2NjX2FybV9wbGF0Zm9ybV9hc19vaz1ubworICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1tfX2FzbV9fKAorICAgICAgICAgICAgICAgIC8qIFRlc3QgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIFVBTCBzeW50YXguICAqLworICAgICAgICAgICAgICAgICIuc3ludGF4IHVuaWZpZWRcblx0IgorICAgICAgICAgICAgICAgICIuYXJtXG5cdCIgLyogb3VyIGFzc2VtYmx5IGNvZGUgaXMgaW4gQVJNIG1vZGUgICovCisgICAgICAgICAgICAgICAgLyogRm9sbG93aW5nIGNhdXNlcyBlcnJvciBpZiBhc3NlbWJsZXIgaWdub3JlZCAnLnN5bnRheCB1bmlmaWVkJy4gICovCisgICAgICAgICAgICAgICAgImFzbWZ1bmM6XG5cdCIKKyAgICAgICAgICAgICAgICAiYWRkICVyMCwgJXIwLCAlcjQsIHJvciAjMTI7XG5cdCIKKworICAgICAgICAgICAgICAgIC8qIFRlc3QgaWYgJy50eXBlJyBhbmQgJy5zaXplJyBhcmUgc3VwcG9ydGVkLiAgKi8KKyAgICAgICAgICAgICAgICAiLnNpemUgYXNtZnVuYywuLWFzbWZ1bmM7XG5cdCIKKyAgICAgICAgICAgICAgICAiLnR5cGUgYXNtZnVuYywlZnVuY3Rpb247XG5cdCIKKyAgICAgICAgICAgICk7XV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfYXJtX3BsYXRmb3JtX2FzX29rPXllc10pXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2djY19hcm1fcGxhdGZvcm1fYXNfb2siID0gInllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9DT01QQVRJQkxFX0dDQ19BUk1fUExBVEZPUk1fQVMsMSwKKyAgICAgW0RlZmluZWQgaWYgdW5kZXJseWluZyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIEFSTSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnNdKQorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgdW5kZXJzY29yZXMgaW4gc3ltYm9scyBhcmUgcmVxdWlyZWQuICBUaGlzIG5lZWRzIHRvIGJlCisjIGRvbmUgYmVmb3JlIHNldHRpbmcgdXAgdGhlIGFzc2VtYmxlciBzdHVmZi4KKyMKK0dOVVBHX1NZU19TWU1CT0xfVU5ERVJTQ09SRSgpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyMjIyMgU2V0dXAgYXNzZW1ibGVyIHN0dWZmLiAgIyMjIworIyMjIyBEZWZpbmUgbXBpX2NwdV9hcmNoLiAgICAjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQUNfQVJHX0VOQUJMRShtcGktcGF0aCwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW1waS1wYXRoPUVYVFJBX1BBVEhdLAorCSAgICAgIFtwcmVwZW5kIEVYVFJBX1BBVEggdG8gbGlzdCBvZiBDUFUgc3BlY2lmaWMgb3B0aW1pemF0aW9uc10pLAorCSAgICAgIG1waV9leHRyYV9wYXRoPSIkZW5hYmxldmFsIixtcGlfZXh0cmFfcGF0aD0iIikKK0FDX01TR19DSEVDS0lORyhhcmNoaXRlY3R1cmUgYW5kIG1waSBhc3NlbWJsZXIgZnVuY3Rpb25zKQoraWYgdGVzdCAtZiAkc3JjZGlyL21waS9jb25maWcubGlua3MgOyB0aGVuCisgICAgLiAkc3JjZGlyL21waS9jb25maWcubGlua3MKKyAgICBBQ19DT05GSUdfTElOS1MoIiRtcGlfbG5fbGlzdCIpCisgICAgYWNfY3ZfbXBpX3NmbGFncz0iJG1waV9zZmxhZ3MiCisgICAgQUNfTVNHX1JFU1VMVCgkbXBpX2NwdV9hcmNoKQorZWxzZQorICAgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorICAgIEFDX01TR19FUlJPUihbbXBpL2NvbmZpZy5saW5rcyBtaXNzaW5nIV0pCitmaQorTVBJX1NGTEFHUz0iJGFjX2N2X21waV9zZmxhZ3MiCitBQ19TVUJTVChNUElfU0ZMQUdTKQorCitBTV9DT05ESVRJT05BTChNUElfTU9EX0FTTV9NUElIX0FERDEsIHRlc3QgIiRtcGlfbW9kX2FzbV9tcGloX2FkZDEiID0geWVzKQorQU1fQ09ORElUSU9OQUwoTVBJX01PRF9BU01fTVBJSF9TVUIxLCB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9zdWIxIiA9IHllcykKK0FNX0NPTkRJVElPTkFMKE1QSV9NT0RfQVNNX01QSUhfTVVMMSwgdGVzdCAiJG1waV9tb2RfYXNtX21waWhfbXVsMSIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0FTTV9NUElIX01VTDIsIHRlc3QgIiRtcGlfbW9kX2FzbV9tcGloX211bDIiID0geWVzKQorQU1fQ09ORElUSU9OQUwoTVBJX01PRF9BU01fTVBJSF9NVUwzLCB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9tdWwzIiA9IHllcykKK0FNX0NPTkRJVElPTkFMKE1QSV9NT0RfQVNNX01QSUhfTFNISUZULCB0ZXN0ICIkbXBpX21vZF9hc21fbXBpaF9sc2hpZnQiID0geWVzKQorQU1fQ09ORElUSU9OQUwoTVBJX01PRF9BU01fTVBJSF9SU0hJRlQsIHRlc3QgIiRtcGlfbW9kX2FzbV9tcGloX3JzaGlmdCIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0FTTV9VRElWLCB0ZXN0ICIkbXBpX21vZF9hc21fdWRpdiIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0FTTV9VRElWX1FSTk5ELCB0ZXN0ICIkbXBpX21vZF9hc21fdWRpdl9xcm5uZCIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9BREQxLCB0ZXN0ICIkbXBpX21vZF9jX21waWhfYWRkMSIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9TVUIxLCB0ZXN0ICIkbXBpX21vZF9jX21waWhfc3ViMSIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9NVUwxLCB0ZXN0ICIkbXBpX21vZF9jX21waWhfbXVsMSIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9NVUwyLCB0ZXN0ICIkbXBpX21vZF9jX21waWhfbXVsMiIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9NVUwzLCB0ZXN0ICIkbXBpX21vZF9jX21waWhfbXVsMyIgPSB5ZXMpCitBTV9DT05ESVRJT05BTChNUElfTU9EX0NfTVBJSF9MU0hJRlQsIHRlc3QgIiRtcGlfbW9kX2NfbXBpaF9sc2hpZnQiID0geWVzKQorQU1fQ09ORElUSU9OQUwoTVBJX01PRF9DX01QSUhfUlNISUZULCB0ZXN0ICIkbXBpX21vZF9jX21waWhfcnNoaWZ0IiA9IHllcykKK0FNX0NPTkRJVElPTkFMKE1QSV9NT0RfQ19VRElWLCB0ZXN0ICIkbXBpX21vZF9jX3VkaXYiID0geWVzKQorQU1fQ09ORElUSU9OQUwoTVBJX01PRF9DX1VESVZfUVJOTkQsIHRlc3QgIiRtcGlfbW9kX2NfdWRpdl9xcm5uZCIgPSB5ZXMpCisKKyMgUmVzZXQgbm9uIGFwcGxpY2FibGUgZmVhdHVyZSBmbGFncy4KK2lmIHRlc3QgIiRtcGlfY3B1X2FyY2giICE9ICJ4ODYiIDsgdGhlbgorICAgYWVzbmlzdXBwb3J0PSJuL2EiCisgICBwY2xtdWxzdXBwb3J0PSJuL2EiCisgICBhdnhzdXBwb3J0PSJuL2EiCisgICBhdngyc3VwcG9ydD0ibi9hIgorICAgcGFkbG9ja3N1cHBvcnQ9Im4vYSIKKyAgIGRybmdzdXBwb3J0PSJuL2EiCitmaQorCitpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAiYXJtIiA7IHRoZW4KKyAgIG5lb25zdXBwb3J0PSJuL2EiCitmaQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjCisjIyMjIFBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyIGNoZWNrcy4gICMjIyMKKyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBTU1NFMyBpbnN0cnVjdGlvbnMKKyMgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIEFFUy1OSSBpbnN0cnVjdGlvbnMuCisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBTU1NFMyBpbnN0cnVjdGlvbnNdLAorICAgICAgIFtnY3J5X2N2X2djY19pbmxpbmVfYXNtX3Nzc2UzXSwKKyAgICAgICBbaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gIng4NiIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz1ubworICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRSgKKyAgICAgICAgICBbW3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJlX21hc2tbMTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKSA9CisgICAgICAgICAgICAgIHsgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCB9OworICAgICAgICAgICAgdm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygicHNodWZiICVbbWFza10sICUleG1tMlxuXHQiOjpbbWFza10ibSIoKmJlX21hc2spOik7CisgICAgICAgICAgICB9XV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMz15ZXNdKQorICAgICAgICBmaV0pCitpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9zc3NlMyIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX0dDQ19JTkxJTkVfQVNNX1NTU0UzLDEsCisgICAgIFtEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgU1NTRTMgaW5zdHJ1Y3Rpb25zXSkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIFBDTE1VTCBpbnN0cnVjdGlvbnMuCisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBQQ0xNVUwgaW5zdHJ1Y3Rpb25zXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWxdLAorICAgICAgIFtpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX3BjbG11bD0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWw9bm8KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1t2b2lkIGEodm9pZCkgeworICAgICAgICAgICAgICBfX2FzbV9fKCJwY2xtdWxxZHEgXCQwLCAlJXhtbTEsICUleG1tM1xuXHQiOjo6ImNjIik7CisgICAgICAgICAgICB9XV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9wY2xtdWw9eWVzXSkKKyAgICAgICAgZmldKQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fcGNsbXVsIiA9ICJ5ZXMiIDsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfR0NDX0lOTElORV9BU01fUENMTVVMLDEsCisgICAgIFtEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgUENMTVVMIGluc3RydWN0aW9uc10pCitmaQorCisKKyMKKyMgQ2hlY2sgd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlggaW5zdHJ1Y3Rpb25zCisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlggaW5zdHJ1Y3Rpb25zXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdnhdLAorICAgICAgIFtpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eD0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdng9bm8KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1t2b2lkIGEodm9pZCkgeworICAgICAgICAgICAgICBfX2FzbV9fKCJ4Z2V0YnY7IHZhZXNkZWNsYXN0ICglW21lbV0pLCUleG1tMCwlJXhtbTdcblx0Ijo6W21lbV0iciIoMCk6KTsKKyAgICAgICAgICAgIH1dXSldLAorICAgICAgICAgIFtnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eD15ZXNdKQorICAgICAgICBmaV0pCitpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngiID0gInllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9HQ0NfSU5MSU5FX0FTTV9BVlgsMSwKKyAgICAgW0RlZmluZWQgaWYgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlggaW5zdHJ1Y3Rpb25zXSkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEFWWDIgaW5zdHJ1Y3Rpb25zCisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBHQ0MgaW5saW5lIGFzc2VtYmxlciBzdXBwb3J0cyBBVlgyIGluc3RydWN0aW9uc10sCisgICAgICAgW2djcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4Ml0sCisgICAgICAgW2lmIHRlc3QgIiRtcGlfY3B1X2FyY2giICE9ICJ4ODYiIDsgdGhlbgorICAgICAgICAgIGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fYXZ4Mj0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyPW5vCisgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbdm9pZCBhKHZvaWQpIHsKKyAgICAgICAgICAgICAgX19hc21fXygieGdldGJ2OyB2cGJyb2FkY2FzdGIgJSV4bW03LCUleW1tMVxuXHQiOjo6ImNjIik7CisgICAgICAgICAgICB9XV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyPXllc10pCisgICAgICAgIGZpXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX2F2eDIiID0gInllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9HQ0NfSU5MSU5FX0FTTV9BVlgyLDEsCisgICAgIFtEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQVZYMiBpbnN0cnVjdGlvbnNdKQorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQk1JMiBpbnN0cnVjdGlvbnMKKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEJNSTIgaW5zdHJ1Y3Rpb25zXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9ibWkyXSwKKyAgICAgICBbaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gIng4NiIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9ibWkyPSJuL2EiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX2JtaTI9bm8KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1t2b2lkIGEodm9pZCkgeworICAgICAgICAgICAgICBfX2FzbV9fKCJyb3J4bCBcJDIzLCAlJWVheCwgJSVlZHhcXG5cXHQiOjo6Im1lbW9yeSIpOworICAgICAgICAgICAgfV1dKV0sCisgICAgICAgICAgW2djcnlfY3ZfZ2NjX2lubGluZV9hc21fYm1pMj15ZXNdKQorICAgICAgICBmaV0pCitpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9ibWkyIiA9ICJ5ZXMiIDsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfR0NDX0lOTElORV9BU01fQk1JMiwxLAorICAgICBbRGVmaW5lZCBpZiBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIEJNSTIgaW5zdHJ1Y3Rpb25zXSkKK2ZpCisKKworIworIyBDaGVjayB3aGV0aGVyIEdDQyBhc3NlbWJsZXIgc3VwcG9ydHMgZmVhdHVyZXMgbmVlZGVkIGZvciBvdXIgYW1kNjQKKyMgaW1wbGVtZW50YXRpb25zCisjCitpZiB0ZXN0ICRhbWQ2NF9hc19mZWF0dXJlX2RldGVjdGlvbiA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIEdDQyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSBmb3IgYW1kNjQgYXNzZW1ibHkgaW1wbGVtZW50YXRpb25zXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2tdLAorICAgICAgIFtpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19hbWQ2NF9wbGF0Zm9ybV9hc19vaz0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2s9bm8KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1tfX2FzbV9fKAorICAgICAgICAgICAgICAgIC8qIFRlc3QgaWYgJy50eXBlJyBhbmQgJy5zaXplJyBhcmUgc3VwcG9ydGVkLiAgKi8KKyAgICAgICAgICAgICAgICAvKiBUaGVzZSB3b3JrIG9ubHkgb24gRUxGIHRhcmdldHMuICovCisJCS8qIFRPRE86IGFkZCBDT0ZGIChtaW5ndzY0LCBjeWd3aW42NCkgc3VwcG9ydCB0byBhc3NlbWJseQorICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9ucy4gIE1pbmd3NjQvY3lnd2luNjQgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgKiB3b3JrIGJlY2F1c2UgdGhleSB1c2UgZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbi4gKi8KKwkJImFzbWZ1bmM6XG5cdCIKKyAgICAgICAgICAgICAgICAiLnNpemUgYXNtZnVuYywuLWFzbWZ1bmM7XG5cdCIKKyAgICAgICAgICAgICAgICAiLnR5cGUgYXNtZnVuYyxAZnVuY3Rpb247XG5cdCIKKyAgICAgICAgICAgICk7XV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2s9eWVzXSkKKyAgICAgICAgZmldKQorICBpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfYW1kNjRfcGxhdGZvcm1fYXNfb2siID0gInllcyIgOyB0aGVuCisgICAgIEFDX0RFRklORShIQVZFX0NPTVBBVElCTEVfR0NDX0FNRDY0X1BMQVRGT1JNX0FTLDEsCisgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHVuZGVybHlpbmcgYXNzZW1ibGVyIGlzIGNvbXBhdGlibGUgd2l0aCBhbWQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnNdKQorICBmaQorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGFzc2VtYmxlciBzdXBwb3J0cyBmZWF0dXJlcyBuZWVkZWQgZm9yIGFzc2VtYmx5CisjIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBJbnRlbCBzeW50YXgKKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIEdDQyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSBmb3IgSW50ZWwgc3ludGF4IGFzc2VtYmx5IGltcGxlbWVudGF0aW9uc10sCisgICAgICAgW2djcnlfY3ZfZ2NjX3BsYXRmb3JtX2FzX29rX2Zvcl9pbnRlbF9zeW50YXhdLAorICAgICAgIFtpZiB0ZXN0ICIkbXBpX2NwdV9hcmNoIiAhPSAieDg2IiA7IHRoZW4KKyAgICAgICAgICBnY3J5X2N2X2djY19wbGF0Zm9ybV9hc19va19mb3JfaW50ZWxfc3ludGF4PSJuL2EiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnY3J5X2N2X2djY19wbGF0Zm9ybV9hc19va19mb3JfaW50ZWxfc3ludGF4PW5vCisgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgIFtbX19hc21fXygKKyAgICAgICAgICAgICAgICAiLmludGVsX3N5bnRheCBub3ByZWZpeFxuXHQiCisgICAgICAgICAgICAgICAgInB4b3IgeG1tMSwgeG1tNztcblx0IgorICAgICAgICAgICAgICAgIC8qIEludGVsIHN5bnRheCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVzZSBHQVMgbWFjcm9zLCBzbyBjaGVjaworICAgICAgICAgICAgICAgICAqIGZvciB0aGVtIGhlcmUuICovCisgICAgICAgICAgICAgICAgIlZBTF9BID0geG1tNFxuXHQiCisgICAgICAgICAgICAgICAgIlZBTF9CID0geG1tMlxuXHQiCisgICAgICAgICAgICAgICAgIi5tYWNybyBTRVRfVkFMX0EgcDFcblx0IgorICAgICAgICAgICAgICAgICIgIFZBTF9BID0gXFxcXHAxIFxuXHQiCisgICAgICAgICAgICAgICAgIi5lbmRtXG5cdCIKKyAgICAgICAgICAgICAgICAiLm1hY3JvIFNFVF9WQUxfQiBwMVxuXHQiCisgICAgICAgICAgICAgICAgIiAgVkFMX0IgPSBcXFxccDEgXG5cdCIKKyAgICAgICAgICAgICAgICAiLmVuZG1cblx0IgorICAgICAgICAgICAgICAgICJ2bW92ZHFhIFZBTF9BLCBWQUxfQjtcblx0IgorICAgICAgICAgICAgICAgICJTRVRfVkFMX0EgZWF4XG5cdCIKKyAgICAgICAgICAgICAgICAiU0VUX1ZBTF9CIGVicFxuXHQiCisgICAgICAgICAgICAgICAgImFkZCBWQUxfQSwgVkFMX0I7XG5cdCIKKyAgICAgICAgICAgICAgICAiYWRkIFZBTF9CLCAwYjEwMTAxO1xuXHQiCisgICAgICAgICAgICApO11dKV0sCisgICAgICAgICAgW2djcnlfY3ZfZ2NjX3BsYXRmb3JtX2FzX29rX2Zvcl9pbnRlbF9zeW50YXg9eWVzXSkKKyAgICAgICAgZmldKQoraWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX3BsYXRmb3JtX2FzX29rX2Zvcl9pbnRlbF9zeW50YXgiID0gInllcyIgOyB0aGVuCisgIEFDX0RFRklORShIQVZFX0lOVEVMX1NZTlRBWF9QTEFURk9STV9BUywxLAorICAgICAgICAgICAgW0RlZmluZWQgaWYgdW5kZXJseWluZyBhc3NlbWJsZXIgaXMgY29tcGF0aWJsZSB3aXRoIEludGVsIHN5bnRheCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbnNdKQorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgQVJNdjYgb3IgbmV3ZXIgYXJjaGl0ZWN0dXJlCisjCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciBBUk12NiBvciBuZXdlciBhcmNoaXRlY3R1cmVdLAorICAgICAgIFtnY3J5X2N2X2NjX2FybV9hcmNoX2lzX3Y2XSwKKyAgICAgICBbaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gImFybSIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9jY19hcm1fYXJjaF9pc192Nj0ibi9hIgorICAgICAgICBlbHNlCisgICAgICAgICAgQUNfRUdSRVBfQ1BQKHllcywKKyAgICAgICAgICBbI2lmIGRlZmluZWQoX19hcm1fXykgJiYgXAorICAgICAgICAgICAgICgoZGVmaW5lZChfX0FSTV9BUkNIKSAmJiBfX0FSTV9BUkNIID49IDYpIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNl9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNkpfXykgXAorICAgICAgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82Wl9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpLX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNktfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZUMl9fKSBcCisgICAgICAgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1JfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pIFwKKyAgICAgICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0VNX18pKQorICAgICAgICAgICAgeWVzCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgIF0sIGdjcnlfY3ZfY2NfYXJtX2FyY2hfaXNfdjY9eWVzLCBnY3J5X2N2X2NjX2FybV9hcmNoX2lzX3Y2PW5vKQorICAgICAgICBmaV0pCitpZiB0ZXN0ICIkZ2NyeV9jdl9jY19hcm1fYXJjaF9pc192NiIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX0FSTV9BUkNIX1Y2LDEsCisgICAgIFtEZWZpbmVkIGlmIEFSTSBhcmNoaXRlY3R1cmUgaXMgdjYgb3IgbmV3ZXJdKQorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgTkVPTiBpbnN0cnVjdGlvbnMKKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIEdDQyBpbmxpbmUgYXNzZW1ibGVyIHN1cHBvcnRzIE5FT04gaW5zdHJ1Y3Rpb25zXSwKKyAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9uZW9uXSwKKyAgICAgICBbaWYgdGVzdCAiJG1waV9jcHVfYXJjaCIgIT0gImFybSIgOyB0aGVuCisgICAgICAgICAgZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9uZW9uPSJuL2EiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb249bm8KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgW1tfX2FzbV9fKAorICAgICAgICAgICAgICAgICIuc3ludGF4IHVuaWZpZWRcblx0IgorICAgICAgICAgICAgICAgICIudGh1bWJcblx0IgorICAgICAgICAgICAgICAgICIuZnB1IG5lb25cblx0IgorICAgICAgICAgICAgICAgICJ2bGQxLjY0IHslcTAtJXExfSwgWyVyMF0hO1xuXHQiCisgICAgICAgICAgICAgICAgInZyZXY2NC44ICVxMCwgJXEzO1xuXHQiCisgICAgICAgICAgICAgICAgInZhZGQudTY0ICVxMCwgJXExO1xuXHQiCisgICAgICAgICAgICAgICAgInZhZGQuczY0ICVkMywgJWQyLCAlZDM7XG5cdCIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICBbZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9uZW9uPXllc10pCisgICAgICAgIGZpXSkKK2lmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb24iID0gInllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9HQ0NfSU5MSU5FX0FTTV9ORU9OLDEsCisgICAgIFtEZWZpbmVkIGlmIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgTkVPTiBpbnN0cnVjdGlvbnNdKQorZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4gIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FDX0ZVTkNfVlBSSU5URgorIyBXZSBoYXZlIHJlcGxhY2VtZW50cyBmb3IgdGhlc2UgaW4gc3JjL21pc3Npbmctc3RyaW5nLmMKK0FDX0NIRUNLX0ZVTkNTKHN0cGNweSBzdHJjYXNlY21wKQorIyBXZSBoYXZlIHJlcGxhY2VtZW50cyBmb3IgdGhlc2UgaW4gc3JjL2cxMGxpYi5oCitBQ19DSEVDS19GVU5DUyhzdHJ0b3VsIG1lbW1vdmUgc3RyaWNtcCBhdGV4aXQgcmFpc2UpCisjIE90aGVyIGNoZWNrcworQUNfQ0hFQ0tfRlVOQ1Moc3RyZXJyb3IgcmFuZCBtbWFwIGdldHBhZ2VzaXplIHN5c2NvbmYgd2FpdHBpZCB3YWl0NCkKK0FDX0NIRUNLX0ZVTkNTKGdldHRpbWVvZmRheSBnZXRydXNhZ2UgZ2V0aHJ0aW1lIGNsb2NrX2dldHRpbWUgc3lzbG9nKQorQUNfQ0hFQ0tfRlVOQ1MoZmNudGwgZnRydW5jYXRlIGZsb2NrZmlsZSkKKworR05VUEdfQ0hFQ0tfTUxPQ0sKKworIworIyBSZXBsYWNlbWVudCBmdW5jdGlvbnMuCisjCitBQ19SRVBMQUNFX0ZVTkNTKFtnZXRwaWQgY2xvY2tdKQorCisKKyMKKyMgQ2hlY2sgd2V0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byBsaW5rIGFnYWluc3QgbGliZGwuCisjCitETF9MSUJTPSIiCitpZiB0ZXN0ICIkdXNlX2htYWNfYmluYXJ5X2NoZWNrIiA9IHllcyA7IHRoZW4KKyAgX2djcnlfc2F2ZV9saWJzPSIkTElCUyIKKyAgTElCUz0iIgorICBBQ19TRUFSQ0hfTElCUyhkbG9wZW4sIGMgZGwsLCwpCisgIERMX0xJQlM9JExJQlMKKyAgTElCUz0iJF9nY3J5X3NhdmVfbGlicyIKKyAgTElCR0NSWVBUX0NPTkZJR19MSUJTPSIke0xJQkdDUllQVF9DT05GSUdfTElCU30gJHtETF9MSUJTfSIKK2ZpCitBQ19TVUJTVChETF9MSUJTKQorCisjCisjIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBsaW5rIHdpdGggYSBwdGhyZWFkcyBsaWJyYXJ5LgorIworaWYgdGVzdCAieCRMSUJUSFJFQUQiICE9IHg7IHRoZW4KKyAgTElCR0NSWVBUX0NPTkZJR19MSUJTPSIke0xJQkdDUllQVF9DT05GSUdfTElCU30gJHtMSUJUSFJFQUR9IgorZmkKKworCisjCisjIENoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSBMaW51eCBjYXBhYmlsaXRpZXMgYXMgcmVxdWVzdGVkLgorIworaWYgdGVzdCAiJHVzZV9jYXBhYmlsaXRpZXMiID0gInllcyIgOyB0aGVuCit1c2VfY2FwYWJpbGl0aWVzPW5vCitBQ19DSEVDS19IRUFERVJTKHN5cy9jYXBhYmlsaXR5LmgpCitpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c19jYXBhYmlsaXR5X2giID0gInllcyIgOyB0aGVuCisgIEFDX0NIRUNLX0xJQihjYXAsIGNhcF9pbml0LCBhY19uZWVkX2xpYmNhcD0xKQorICBpZiB0ZXN0ICIkYWNfY3ZfbGliX2NhcF9jYXBfaW5pdCIgPSAieWVzIjsgdGhlbgorICAgICBBQ19ERUZJTkUoVVNFX0NBUEFCSUxJVElFUywxLAorICAgICAgICAgICAgICAgW2RlZmluZSBpZiBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHVzZWRdKQorICAgICBMSUJTPSIkTElCUyAtbGNhcCIKKyAgICAgdXNlX2NhcGFiaWxpdGllcz15ZXMKKyAgZmkKK2ZpCitpZiB0ZXN0ICIkdXNlX2NhcGFiaWxpdGllcyIgPSAibm8iIDsgdGhlbgorICAgIEFDX01TR19XQVJOKFtbCisqKioKKyoqKiBUaGUgdXNlIG9mIGNhcGFiaWxpdGllcyBvbiB0aGlzIHN5c3RlbSBpcyBub3QgcG9zc2libGUuCisqKiogWW91IG5lZWQgYSByZWNlbnQgTGludXgga2VybmVsIGFuZCBzb21lIHBhdGNoZXM6CisqKiogICBmY2Fwcy0yLjIuOS05OTA2MTAucGF0Y2ggICAgICAoa2VybmVsIHBhdGNoIGZvciAyLjIuOSkKKyoqKiAgIGZjYXAtbW9kdWxlLTk5MDYxMy50YXIuZ3ogICAgIChrZXJuZWwgbW9kdWxlKQorKioqICAgbGliY2FwLTEuOTIudGFyLmd6ICAgICAgICAgICAgKHVzZXIgbW9kZSBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMpCisqKiogQW5kIHlvdSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggQ09ORklHX1ZGU19DQVBfUExVR0lOCisqKiogc2V0IChmaWxlc3lzdGVtcyBtZW51KS4gQmUgd2FybmVkOiBUaGlzIGNvZGUgaXMgKnJlYWxseSogQUxQSEEuCisqKipdXSkKK2ZpCitmaQorCisjIENoZWNrIHdoZXRoZXIgYSByYW5kb20gZGV2aWNlIGlzIGF2YWlsYWJsZS4KK2lmIHRlc3QgIiR0cnlfZGV2X3JhbmRvbSIgPSB5ZXMgOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soZm9yIHJhbmRvbSBkZXZpY2UsIGFjX2N2X2hhdmVfZGV2X3JhbmRvbSwKKyAgICBbaWYgdGVzdCAtciAiJE5BTUVfT0ZfREVWX1JBTkRPTSIgJiYgdGVzdCAtciAiJE5BTUVfT0ZfREVWX1VSQU5ET00iIDsgdGhlbgorICAgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPXllczsgZWxzZSBhY19jdl9oYXZlX2Rldl9yYW5kb209bm87IGZpXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tIiA9IHllczsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSEFWRV9ERVZfUkFORE9NLDEsCisgICAgICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgYSByYW5kb20gZGV2aWNlXSApCisgICAgZmkKK2Vsc2UKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHJhbmRvbSBkZXZpY2UpCisgICAgYWNfY3ZfaGF2ZV9kZXZfcmFuZG9tPW5vCisgICAgQUNfTVNHX1JFU1VMVChoYXMgYmVlbiBkaXNhYmxlZCkKK2ZpCisKKyMgRmlndXJlIG91dCB0aGUgcmFuZG9tIG1vZHVsZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KK2lmIHRlc3QgIiRyYW5kb20iID0gImRlZmF1bHQiOyB0aGVuCisKKyAgICAjIFNlbGVjdCBkZWZhdWx0IHZhbHVlLgorICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2Rldl9yYW5kb20iID0geWVzOyB0aGVuCisgICAgICAgICMgVHJ5IExpbnV4aXNoIHJhbmRvbSBkZXZpY2UuCisgICAgICAgIHJhbmRvbV9tb2R1bGVzPSJsaW51eCIKKyAgICBlbHNlCisgICAgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgICotKi1taW5ndzMyY2UqKQorICAgICAgICAgICMgV2luZG93c0NFIHJhbmRvbSBkZXZpY2UuCisgICAgICAgICAgcmFuZG9tX21vZHVsZXM9InczMmNlIgorICAgICAgICAgIDs7CisgICAgICAgICotKi1taW5ndzMyKnwqLSotY3lnd2luKikKKyAgICAgICAgICAjIFdpbmRvd3MgcmFuZG9tIGRldmljZS4KKyAgICAgICAgICByYW5kb21fbW9kdWxlcz0idzMyIgorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBCdWlsZCBldmVyeXRoaW5nLCBhbGxvdyB0byBzZWxlY3QgYXQgcnVudGltZS4KKyAgICAgICAgICByYW5kb21fbW9kdWxlcz0iJGF1dG9fcmFuZG9tX21vZHVsZXMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGZpCitlbHNlCisgICAgaWYgdGVzdCAiJHJhbmRvbSIgPSAiYXV0byI7IHRoZW4KKyAgICAgICAgIyBCdWlsZCBldmVyeXRoaW5nLCBhbGxvdyB0byBzZWxlY3QgYXQgcnVudGltZS4KKyAgICAgICAgcmFuZG9tX21vZHVsZXM9IiRhdXRvX3JhbmRvbV9tb2R1bGVzIgorICAgIGVsc2UKKyAgICAgICAgcmFuZG9tX21vZHVsZXM9IiRyYW5kb20iCisgICAgZmkKK2ZpCisKKworIworIyBPdGhlciBkZWZpbmVzCisjCitpZiB0ZXN0IG15bTRfaXNnaXQgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORShJU19ERVZFTE9QTUVOVF9WRVJTSU9OLDEsCisgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoaXMgaXMgbm90IGEgcmVndWxhciByZWxlYXNlXSkKK2ZpCisKKworQU1fQ09ORElUSU9OQUwoQ1JPU1NfQ09NUElMSU5HLCB0ZXN0IHgkY3Jvc3NfY29tcGlsaW5nID0geHllcykKKworCisjIFRoaXMgaXMgaGFuZHkgZm9yIGRlYnVnZ2luZyBzbyB0aGUgY29tcGlsZXIgZG9lc24ndCByZWFycmFuZ2UKKyMgdGhpbmdzIGFuZCBlbGltaW5hdGUgdmFyaWFibGVzLgorQUNfQVJHX0VOQUJMRShvcHRpbWl6YXRpb24sCisgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1vcHRpbWl6YXRpb25dLAorCQkgICAgICBbZGlzYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25dKSwKKyAgICAgICAgICAgICAgICAgICAgICBbaWYgdGVzdCAkZW5hYmxldmFsID0gbm8gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPWBlY2hvICRDRkxBR1MgfCBzZWQgJ3MvLU9bWzAtOV1dLy8nYAorICAgICAgICAgICAgICAgICAgICAgICBmaV0pCisKKyMgQ0ZMQUdTIG1hbmdsaW5nIHdoZW4gdXNpbmcgZ2NjLgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLVdhbGwiCisgICAgaWYgdGVzdCAiJFVTRV9NQUlOVEFJTkVSX01PREUiID0gInllcyI7IHRoZW4KKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XY2FzdC1hbGlnbiAtV3NoYWRvdyAtV3N0cmljdC1wcm90b3R5cGVzIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVdmb3JtYXQgLVduby1mb3JtYXQteTJrIC1XZm9ybWF0LXNlY3VyaXR5IgorCisgICAgICAgICMgSWYgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyBpcyBzdXBwb3J0ZWQgd2UgY2FuIGVuYWJsZSBhCisgICAgICAgICMgYSBidW5jaCBvZiByZWFsbHkgdXNlZnVsIHdhcm5pbmdzLgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdjYyBzdXBwb3J0cyAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzXSkKKyAgICAgICAgX2djY19jZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisgICAgICAgIENGTEFHUz0iLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLF9nY2Nfd29wdD15ZXMsX2djY193b3B0PW5vKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRfZ2NjX3dvcHQpCisgICAgICAgIENGTEFHUz0kX2djY19jZmxhZ3Nfc2F2ZTsKKyAgICAgICAgaWYgdGVzdCB4IiRfZ2NjX3dvcHQiID0geHllcyA7IHRoZW4KKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVcgLVdleHRyYSAtV2JhZC1mdW5jdGlvbi1jYXN0IgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLXNpZ24tY29tcGFyZSIKKyAgICAgICAgZmkKKworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdjYyBzdXBwb3J0cyAtV3BvaW50ZXItYXJpdGhdKQorICAgICAgICBfZ2NjX2NmbGFnc19zYXZlPSRDRkxBR1MKKyAgICAgICAgQ0ZMQUdTPSItV3BvaW50ZXItYXJpdGgiCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSxfZ2NjX3dvcHQ9eWVzLF9nY2Nfd29wdD1ubykKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkX2djY193b3B0KQorICAgICAgICBDRkxBR1M9JF9nY2NfY2ZsYWdzX3NhdmU7CisgICAgICAgIGlmIHRlc3QgeCIkX2djY193b3B0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCIKKyAgICAgICAgZmkKKyAgICBmaQorCitmaQorCisjIENoZWNrIHdoZXRoZXIgYXMoMSkgc3VwcG9ydHMgYSBub2VleGVjc3RhY2sgZmVhdHVyZS4gIFRoaXMgdGVzdAorIyBpbmNsdWRlcyBhbiBvdmVycmlkZSBvcHRpb24uCitDTF9BU19OT0VYRUNTVEFDSworCisKK0FDX1NVQlNUKExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04pCitBQ19TVUJTVChMSUJHQ1JZUFRfQ09ORklHX0xJQlMpCitBQ19TVUJTVChMSUJHQ1JZUFRfQ09ORklHX0NGTEFHUykKK0FDX1NVQlNUKExJQkdDUllQVF9DT05GSUdfSE9TVCkKK0FDX1NVQlNUKExJQkdDUllQVF9USFJFQURfTU9EVUxFUykKKworQUNfQ09ORklHX0NPTU1BTkRTKFtnY3J5cHQtY29uZl0sW1sKK2NobW9kICt4IHNyYy9saWJnY3J5cHQtY29uZmlnCitdXSxbWworcHJlZml4PSRwcmVmaXgKK2V4ZWNfcHJlZml4PSRleGVjX3ByZWZpeAorbGliZGlyPSRsaWJkaXIKK2RhdGFkaXI9JGRhdGFkaXIKK0RBVEFESVJOQU1FPSREQVRBRElSTkFNRQorXV0pCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyBDb25jbHVzaW9uLiAjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBDaGVjayB0aGF0IHJlcXVlc3RlZCBmZWF0dXJlIGNhbiBhY3R1YWxseSBiZSB1c2VkIGFuZCBkZWZpbmUKKyMgRU5BQkxFX2Zvb19TVVBQT1JUIG1hY3Jvcy4KKworaWYgdGVzdCB4IiRhZXNuaXN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgaWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fc3NzZTMiICE9ICJ5ZXMiIDsgdGhlbgorICAgIGFlc25pc3VwcG9ydD0ibm8gKHVuc3VwcG9ydGVkIGJ5IGNvbXBpbGVyKSIKKyAgZmkKK2ZpCitpZiB0ZXN0IHgiJHBjbG11bHN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgaWYgdGVzdCAiJGdjcnlfY3ZfZ2NjX2lubGluZV9hc21fcGNsbXVsIiAhPSAieWVzIiA7IHRoZW4KKyAgICBwY2xtdWxzdXBwb3J0PSJubyAodW5zdXBwb3J0ZWQgYnkgY29tcGlsZXIpIgorICBmaQorZmkKK2lmIHRlc3QgeCIkYXZ4c3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngiICE9ICJ5ZXMiIDsgdGhlbgorICAgIGF2eHN1cHBvcnQ9Im5vICh1bnN1cHBvcnRlZCBieSBjb21waWxlcikiCisgIGZpCitmaQoraWYgdGVzdCB4IiRhdngyc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfaW5saW5lX2FzbV9hdngyIiAhPSAieWVzIiA7IHRoZW4KKyAgICBhdngyc3VwcG9ydD0ibm8gKHVuc3VwcG9ydGVkIGJ5IGNvbXBpbGVyKSIKKyAgZmkKK2ZpCitpZiB0ZXN0IHgiJG5lb25zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgIGlmIHRlc3QgIiRnY3J5X2N2X2djY19pbmxpbmVfYXNtX25lb24iICE9ICJ5ZXMiIDsgdGhlbgorICAgIG5lb25zdXBwb3J0PSJubyAodW5zdXBwb3J0ZWQgYnkgY29tcGlsZXIpIgorICBmaQorZmkKKworaWYgdGVzdCB4IiRhZXNuaXN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgQUNfREVGSU5FKEVOQUJMRV9BRVNOSV9TVVBQT1JULCAxLAorICAgICAgICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLl0pCitmaQoraWYgdGVzdCB4IiRwY2xtdWxzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgIEFDX0RFRklORShFTkFCTEVfUENMTVVMX1NVUFBPUlQsIDEsCisgICAgICAgICAgICBbRW5hYmxlIHN1cHBvcnQgZm9yIEludGVsIFBDTE1VTCBpbnN0cnVjdGlvbnMuXSkKK2ZpCitpZiB0ZXN0IHgiJGF2eHN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgQUNfREVGSU5FKEVOQUJMRV9BVlhfU1VQUE9SVCwxLAorICAgICAgICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciBJbnRlbCBBVlggaW5zdHJ1Y3Rpb25zLl0pCitmaQoraWYgdGVzdCB4IiRhdngyc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBBQ19ERUZJTkUoRU5BQkxFX0FWWDJfU1VQUE9SVCwxLAorICAgICAgICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciBJbnRlbCBBVlgyIGluc3RydWN0aW9ucy5dKQorZmkKK2lmIHRlc3QgeCIkbmVvbnN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgQUNfREVGSU5FKEVOQUJMRV9ORU9OX1NVUFBPUlQsMSwKKyAgICAgICAgICAgIFtFbmFibGUgc3VwcG9ydCBmb3IgQVJNIE5FT04gaW5zdHJ1Y3Rpb25zLl0pCitmaQoraWYgdGVzdCB4IiRwYWRsb2Nrc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBBQ19ERUZJTkUoRU5BQkxFX1BBRExPQ0tfU1VQUE9SVCwgMSwKKyAgICAgICAgICAgIFtFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFBhZExvY2sgZW5naW5lLl0pCitmaQoraWYgdGVzdCB4IiRkcm5nc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICBBQ19ERUZJTkUoRU5BQkxFX0RSTkdfU1VQUE9SVCwgMSwKKyAgICAgICAgICAgIFtFbmFibGUgc3VwcG9ydCBmb3IgSW50ZWwgRFJORyAoUkRSQU5EIGluc3RydWN0aW9uKS5dKQorZmkKKworCisjIERlZmluZSBjb25kaXRpb25hbCBzb3VyY2VzIGFuZCBjb25maWcuaCBzeW1ib2xzIGRlcGVuZGluZyBvbiB0aGUKKyMgc2VsZWN0ZWQgY2lwaGVycywgcHVia2V5LWNpcGhlcnMsIGRpZ2VzdHMsIGtkZnMsIGFuZCByYW5kb20gbW9kdWxlcy4KKworTElTVF9NRU1CRVIoYXJjZm91ciwgJGVuYWJsZWRfY2lwaGVycykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSI7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgYXJjZm91ci5sbyIKKyAgIEFDX0RFRklORShVU0VfQVJDRk9VUiwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKGJsb3dmaXNoLCAkZW5hYmxlZF9jaXBoZXJzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgYmxvd2Zpc2gubG8iCisgICBBQ19ERUZJTkUoVVNFX0JMT1dGSVNILCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgYmxvd2Zpc2gtYW1kNjQubG8iCisgICAgICA7OworICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGJsb3dmaXNoLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCitmaQorCitMSVNUX01FTUJFUihjYXN0NSwgJGVuYWJsZWRfY2lwaGVycykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGNhc3Q1LmxvIgorICAgQUNfREVGSU5FKFVTRV9DQVNUNSwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKKworICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgIHg4Nl82NC0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGNhc3Q1LWFtZDY0LmxvIgorICAgICAgOzsKKyAgICAgIGFybSotKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYXN0NS1hcm0ubG8iCisgICAgICA7OworICAgZXNhYworZmkKKworTElTVF9NRU1CRVIoZGVzLCAkZW5hYmxlZF9jaXBoZXJzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgZGVzLmxvIgorICAgQUNfREVGSU5FKFVTRV9ERVMsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihhZXMsICRlbmFibGVkX2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyByaWpuZGFlbC5sbyIKKyAgIEFDX0RFRklORShVU0VfQUVTLCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgcmlqbmRhZWwtYW1kNjQubG8iCisgICAgICA7OworICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHJpam5kYWVsLWFybS5sbyIKKyAgICAgIDs7CisgICBlc2FjCitmaQorCitMSVNUX01FTUJFUih0d29maXNoLCAkZW5hYmxlZF9jaXBoZXJzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgdHdvZmlzaC5sbyIKKyAgIEFDX0RFRklORShVU0VfVFdPRklTSCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKKworICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgIHg4Nl82NC0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHR3b2Zpc2gtYW1kNjQubG8iCisgICAgICA7OworICAgICAgYXJtKi0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHR3b2Zpc2gtYXJtLmxvIgorICAgICAgOzsKKyAgIGVzYWMKK2ZpCisKK0xJU1RfTUVNQkVSKHNlcnBlbnQsICRlbmFibGVkX2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzZXJwZW50LmxvIgorICAgQUNfREVGSU5FKFVTRV9TRVJQRU5ULCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorCisgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgeDg2XzY0LSotKikKKyAgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgU1NFMiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzZXJwZW50LXNzZTItYW1kNjQubG8iCisgICAgICA7OworICAgZXNhYworCisgICBpZiB0ZXN0IHgiJGF2eDJzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAjIEJ1aWxkIHdpdGggdGhlIEFWWDIgaW1wbGVtZW50YXRpb24KKyAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgc2VycGVudC1hdngyLWFtZDY0LmxvIgorICAgZmkKKworICAgaWYgdGVzdCB4IiRuZW9uc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICAgICAgIyBCdWlsZCB3aXRoIHRoZSBORU9OIGltcGxlbWVudGF0aW9uCisgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNlcnBlbnQtYXJtdjctbmVvbi5sbyIKKyAgIGZpCitmaQorCitMSVNUX01FTUJFUihyZmMyMjY4LCAkZW5hYmxlZF9jaXBoZXJzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgcmZjMjI2OC5sbyIKKyAgIEFDX0RFRklORShVU0VfUkZDMjI2OCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKHNlZWQsICRlbmFibGVkX2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBzZWVkLmxvIgorICAgQUNfREVGSU5FKFVTRV9TRUVELCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorZmkKKworTElTVF9NRU1CRVIoY2FtZWxsaWEsICRlbmFibGVkX2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYW1lbGxpYS5sbyBjYW1lbGxpYS1nbHVlLmxvIgorICAgQUNfREVGSU5FKFVTRV9DQU1FTExJQSwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKKworICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgIGFybSotKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBjYW1lbGxpYS1hcm0ubG8iCisgICAgICA7OworICAgZXNhYworCisgICBpZiB0ZXN0IHgiJGF2eHN1cHBvcnQiID0geHllcyA7IHRoZW4KKyAgICAgIGlmIHRlc3QgeCIkYWVzbmlzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICMgQnVpbGQgd2l0aCB0aGUgQUVTLU5JL0FWWCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGNhbWVsbGlhLWFlc25pLWF2eC1hbWQ2NC5sbyIKKyAgICAgIGZpCisgICBmaQorCisgICBpZiB0ZXN0IHgiJGF2eDJzdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICBpZiB0ZXN0IHgiJGFlc25pc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgorICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIEFFUy1OSS9BVlgyIGltcGxlbWVudGF0aW9uCisgICAgICAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgY2FtZWxsaWEtYWVzbmktYXZ4Mi1hbWQ2NC5sbyIKKyAgICAgIGZpCisgICBmaQorZmkKKworTElTVF9NRU1CRVIoaWRlYSwgJGVuYWJsZWRfY2lwaGVycykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIGlkZWEubG8iCisgICBBQ19ERUZJTkUoVVNFX0lERUEsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihzYWxzYTIwLCAkZW5hYmxlZF9jaXBoZXJzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9DSVBIRVJTPSIkR0NSWVBUX0NJUEhFUlMgc2Fsc2EyMC5sbyIKKyAgIEFDX0RFRklORShVU0VfU0FMU0EyMCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKKworICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgIHg4Nl82NC0qLSopCisgICAgICAgICAjIEJ1aWxkIHdpdGggdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uCisgICAgICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNhbHNhMjAtYW1kNjQubG8iCisgICAgICA7OworICAgZXNhYworCisgICBpZiB0ZXN0IHgiJG5lb25zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICMgQnVpbGQgd2l0aCB0aGUgTkVPTiBpbXBsZW1lbnRhdGlvbgorICAgICBHQ1JZUFRfQ0lQSEVSUz0iJEdDUllQVF9DSVBIRVJTIHNhbHNhMjAtYXJtdjctbmVvbi5sbyIKKyAgIGZpCitmaQorCitMSVNUX01FTUJFUihnb3N0MjgxNDcsICRlbmFibGVkX2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0NJUEhFUlM9IiRHQ1JZUFRfQ0lQSEVSUyBnb3N0MjgxNDcubG8iCisgICBBQ19ERUZJTkUoVVNFX0dPU1QyODE0NywgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKGRzYSwgJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1BVQktFWV9DSVBIRVJTPSIkR0NSWVBUX1BVQktFWV9DSVBIRVJTIGRzYS5sbyIKKyAgIEFDX0RFRklORShVU0VfRFNBLCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorZmkKKworTElTVF9NRU1CRVIocnNhLCAkZW5hYmxlZF9wdWJrZXlfY2lwaGVycykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfUFVCS0VZX0NJUEhFUlM9IiRHQ1JZUFRfUFVCS0VZX0NJUEhFUlMgcnNhLmxvIgorICAgQUNfREVGSU5FKFVTRV9SU0EsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihlbGdhbWFsLCAkZW5hYmxlZF9wdWJrZXlfY2lwaGVycykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfUFVCS0VZX0NJUEhFUlM9IiRHQ1JZUFRfUFVCS0VZX0NJUEhFUlMgZWxnYW1hbC5sbyIKKyAgIEFDX0RFRklORShVU0VfRUxHQU1BTCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKGVjYywgJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1BVQktFWV9DSVBIRVJTPSIkR0NSWVBUX1BVQktFWV9DSVBIRVJTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjLmxvIGVjYy1jdXJ2ZXMubG8gZWNjLW1pc2MubG8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICBlY2MtZWNkc2EubG8gZWNjLWVkZHNhLmxvIGVjYy1nb3N0LmxvIgorICAgQUNfREVGSU5FKFVTRV9FQ0MsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihjcmMsICRlbmFibGVkX2RpZ2VzdHMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBjcmMubG8iCisgICBBQ19ERUZJTkUoVVNFX0NSQywgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKGdvc3RyMzQxMS05NCwgJGVuYWJsZWRfZGlnZXN0cykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICAjIEdPU1QgUiAzNC4xMS05NCBpbnRlcm5hbGx5IHVzZXMgR09TVCAyODE0Ny04OQorICAgTElTVF9NRU1CRVIoZ29zdDI4MTQ3LCAkZW5hYmxlZF9jaXBoZXJzKQorICAgaWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgZ29zdHIzNDExLTk0LmxvIgorICAgICAgQUNfREVGSU5FKFVTRV9HT1NUX1JfMzQxMV85NCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKKyAgIGZpCitmaQorCitMSVNUX01FTUJFUihzdHJpYm9nLCAkZW5hYmxlZF9kaWdlc3RzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc3RyaWJvZy5sbyIKKyAgIEFDX0RFRklORShVU0VfR09TVF9SXzM0MTFfMTIsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihtZDQsICRlbmFibGVkX2RpZ2VzdHMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBtZDQubG8iCisgICBBQ19ERUZJTkUoVVNFX01ENCwgMSwgW0RlZmluZWQgaWYgdGhpcyBtb2R1bGUgc2hvdWxkIGJlIGluY2x1ZGVkXSkKK2ZpCisKK0xJU1RfTUVNQkVSKG1kNSwgJGVuYWJsZWRfZGlnZXN0cykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIG1kNS5sbyIKKyAgIEFDX0RFRklORShVU0VfTUQ1LCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorZmkKKworTElTVF9NRU1CRVIoc2hhMjU2LCAkZW5hYmxlZF9kaWdlc3RzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhMjU2LmxvIgorICAgQUNfREVGSU5FKFVTRV9TSEEyNTYsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBzaGEyNTYtc3NzZTMtYW1kNjQubG8iCisgICAgICA7OworICAgZXNhYworZmkKKworTElTVF9NRU1CRVIoc2hhNTEyLCAkZW5hYmxlZF9kaWdlc3RzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhNTEyLmxvIgorICAgQUNfREVGSU5FKFVTRV9TSEE1MTIsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCisKKyAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICB4ODZfNjQtKi0qKQorICAgICAgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBzaGE1MTItc3NzZTMtYW1kNjQubG8iCisgICAgICAgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHNoYTUxMi1hdngtYW1kNjQubG8iCisgICAgICAgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHNoYTUxMi1hdngyLWJtaTItYW1kNjQubG8iCisgICAgICA7OworICAgZXNhYworCisgICBpZiB0ZXN0IHgiJG5lb25zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCisgICAgICMgQnVpbGQgd2l0aCB0aGUgTkVPTiBpbXBsZW1lbnRhdGlvbgorICAgICBHQ1JZUFRfRElHRVNUUz0iJEdDUllQVF9ESUdFU1RTIHNoYTUxMi1hcm12Ny1uZW9uLmxvIgorICAgZmkKK2ZpCisKK0xJU1RfTUVNQkVSKHRpZ2VyLCAkZW5hYmxlZF9kaWdlc3RzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgdGlnZXIubG8iCisgICBBQ19ERUZJTkUoVVNFX1RJR0VSLCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorZmkKKworTElTVF9NRU1CRVIod2hpcmxwb29sLCAkZW5hYmxlZF9kaWdlc3RzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgd2hpcmxwb29sLmxvIgorICAgQUNfREVGSU5FKFVTRV9XSElSTFBPT0wsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCisjIHJtZDE2MCBhbmQgc2hhMSBzaG91bGQgYmUgaW5jbHVkZWQgYWx3YXlzLgorR0NSWVBUX0RJR0VTVFM9IiRHQ1JZUFRfRElHRVNUUyBybWQxNjAubG8gc2hhMS5sbyIKK0FDX0RFRklORShVU0VfUk1EMTYwLCAxLCBbRGVmaW5lZCBpZiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgaW5jbHVkZWRdKQorQUNfREVGSU5FKFVTRV9TSEExLCAxLCAgIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCisKK2Nhc2UgIiR7aG9zdH0iIGluCisgIHg4Nl82NC0qLSopCisgICAgIyBCdWlsZCB3aXRoIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbgorICAgIEdDUllQVF9ESUdFU1RTPSIkR0NSWVBUX0RJR0VTVFMgc2hhMS1zc3NlMy1hbWQ2NC5sbyIKKyAgOzsKK2VzYWMKKworTElTVF9NRU1CRVIoc2NyeXB0LCAkZW5hYmxlZF9rZGZzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9LREZTPSIkR0NSWVBUX0tERlMgc2NyeXB0LmxvIgorICAgQUNfREVGSU5FKFVTRV9TQ1JZUFQsIDEsIFtEZWZpbmVkIGlmIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBpbmNsdWRlZF0pCitmaQorCitMSVNUX01FTUJFUihsaW51eCwgJHJhbmRvbV9tb2R1bGVzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9SQU5ET009IiRHQ1JZUFRfUkFORE9NIHJuZGxpbnV4LmxvIgorICAgQUNfREVGSU5FKFVTRV9STkRMSU5VWCwgMSwgW0RlZmluZWQgaWYgdGhlIC9kZXYvcmFuZG9tIFJORyBzaG91bGQgYmUgdXNlZC5dKQorZmkKKworTElTVF9NRU1CRVIodW5peCwgJHJhbmRvbV9tb2R1bGVzKQoraWYgdGVzdCAiJGZvdW5kIiA9ICIxIiA7IHRoZW4KKyAgIEdDUllQVF9SQU5ET009IiRHQ1JZUFRfUkFORE9NIHJuZHVuaXgubG8iCisgICBBQ19ERUZJTkUoVVNFX1JORFVOSVgsIDEsIFtEZWZpbmVkIGlmIHRoZSBkZWZhdWx0IFVuaXggUk5HIHNob3VsZCBiZSB1c2VkLl0pCisgICBwcmludF9lZ2Rfbm90aWNlPXllcworZmkKKworTElTVF9NRU1CRVIoZWdkLCAkcmFuZG9tX21vZHVsZXMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1JBTkRPTT0iJEdDUllQVF9SQU5ET00gcm5kZWdkLmxvIgorICAgQUNfREVGSU5FKFVTRV9STkRFR0QsIDEsIFtEZWZpbmVkIGlmIHRoZSBFR0QgYmFzZWQgUk5HIHNob3VsZCBiZSB1c2VkLl0pCitmaQorCitMSVNUX01FTUJFUih3MzIsICRyYW5kb21fbW9kdWxlcykKK2lmIHRlc3QgIiRmb3VuZCIgPSAiMSIgOyB0aGVuCisgICBHQ1JZUFRfUkFORE9NPSIkR0NSWVBUX1JBTkRPTSBybmR3MzIubG8iCisgICBBQ19ERUZJTkUoVVNFX1JORFczMiwgMSwKKyAgICAgICAgICAgICBbRGVmaW5lZCBpZiB0aGUgV2luZG93cyBzcGVjaWZpYyBSTkcgc2hvdWxkIGJlIHVzZWQuXSkKK2ZpCisKK0xJU1RfTUVNQkVSKHczMmNlLCAkcmFuZG9tX21vZHVsZXMpCitpZiB0ZXN0ICIkZm91bmQiID0gIjEiIDsgdGhlbgorICAgR0NSWVBUX1JBTkRPTT0iJEdDUllQVF9SQU5ET00gcm5kdzMyY2UubG8iCisgICBBQ19ERUZJTkUoVVNFX1JORFczMkNFLCAxLAorICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBXaW5kb3dzQ0Ugc3BlY2lmaWMgUk5HIHNob3VsZCBiZSB1c2VkLl0pCitmaQorCitBQ19TVUJTVChbR0NSWVBUX0NJUEhFUlNdKQorQUNfU1VCU1QoW0dDUllQVF9QVUJLRVlfQ0lQSEVSU10pCitBQ19TVUJTVChbR0NSWVBUX0RJR0VTVFNdKQorQUNfU1VCU1QoW0dDUllQVF9LREZTXSkKK0FDX1NVQlNUKFtHQ1JZUFRfUkFORE9NXSkKKworQUNfU1VCU1QoTElCR0NSWVBUX0NJUEhFUlMsICRlbmFibGVkX2NpcGhlcnMpCitBQ19TVUJTVChMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlMsICRlbmFibGVkX3B1YmtleV9jaXBoZXJzKQorQUNfU1VCU1QoTElCR0NSWVBUX0RJR0VTVFMsICRlbmFibGVkX2RpZ2VzdHMpCisKKyMgRm9yIHByaW50aW5nIHRoZSBjb25maWd1cmF0aW9uIHdlIG5lZWQgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZgorIyBhbGdvcml0aG0gbmFtZXMuCit0bXA9YGVjaG8gIiRlbmFibGVkX2NpcGhlcnMiIHwgdHIgJyAnIDogYAorQUNfREVGSU5FX1VOUVVPVEVEKExJQkdDUllQVF9DSVBIRVJTLCAiJHRtcCIsCisgICAgICAgICAgICAgICAgICAgW0xpc3Qgb2YgYXZhaWxhYmxlIGNpcGhlciBhbGdvcml0aG1zXSkKK3RtcD1gZWNobyAiJGVuYWJsZWRfcHVia2V5X2NpcGhlcnMiIHwgdHIgJyAnIDogYAorQUNfREVGSU5FX1VOUVVPVEVEKExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUywgIiR0bXAiLAorICAgICAgICAgICAgICAgICAgIFtMaXN0IG9mIGF2YWlsYWJsZSBwdWJsaWMga2V5IGNpcGhlciBhbGdvcml0aG1zXSkKK3RtcD1gZWNobyAiJGVuYWJsZWRfZGlnZXN0cyIgfCB0ciAnICcgOiBgCitBQ19ERUZJTkVfVU5RVU9URUQoTElCR0NSWVBUX0RJR0VTVFMsICIkdG1wIiwKKyAgICAgICAgICAgICAgICAgICBbTGlzdCBvZiBhdmFpbGFibGUgZGlnZXN0IGFsZ29yaXRobXNdKQordG1wPWBlY2hvICIkZW5hYmxlZF9rZGZzIiB8IHRyICcgJyA6IGAKK0FDX0RFRklORV9VTlFVT1RFRChMSUJHQ1JZUFRfS0RGUywgIiR0bXAiLAorICAgICAgICAgICAgICAgICAgIFtMaXN0IG9mIGF2YWlsYWJsZSBLREYgYWxnb3JpdGhtc10pCisKKworIworIyBEZWZpbmUgY29uZGl0aW9uYWwgc291cmNlcyBkZXBlbmRpbmcgb24gdGhlIHVzZWQgaGFyZHdhcmUgcGxhdGZvcm0uCisjIE5vdGUgdGhhdCBhbGwgcG9zc2libGUgbW9kdWxlcyBtdXN0IGFsc28gYmUgbGlzdGVkIGluCisjIHNyYy9NYWtlZmlsZS5hbSAoRVhUUkFfbGliZ2NyeXB0X2xhX1NPVVJDRVMpLgorIworR0NSWVBUX0hXRl9NT0RVTEVTPQorY2FzZSAiJG1waV9jcHVfYXJjaCIgaW4KKyAgICAgeDg2KQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQVJDSF9YODYsIDEsICAgW0RlZmluZWQgZm9yIHRoZSB4ODYgcGxhdGZvcm1zXSkKKyAgICAgICAgR0NSWVBUX0hXRl9NT0RVTEVTPSJod2YteDg2LmxvIgorICAgICAgICA7OworICAgICBhbHBoYSkKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FSQ0hfQUxQSEEsIDEsIFtEZWZpbmVkIGZvciBBbHBoYSBwbGF0Zm9ybXNdKQorICAgICAgICA7OworICAgICBzcGFyYykKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FSQ0hfU1BBUkMsIDEsIFtEZWZpbmVkIGZvciBTUEFSQyBwbGF0Zm9ybXNdKQorICAgICAgICA7OworICAgICBtaXBzKQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQVJDSF9NSVBTLCAxLCAgW0RlZmluZWQgZm9yIE1JUFMgcGxhdGZvcm1zXSkKKyAgICAgICAgOzsKKyAgICAgbTY4aykKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FSQ0hfTTY4SywgMSwgIFtEZWZpbmVkIGZvciBNNjhrIHBsYXRmb3Jtc10pCisgICAgICAgIDs7CisgICAgIHBwYykKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FSQ0hfUFBDLCAxLCAgIFtEZWZpbmVkIGZvciBQUEMgcGxhdGZvcm1zXSkKKyAgICAgICAgOzsKKyAgICAgYXJtKQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQVJDSF9BUk0sIDEsICAgW0RlZmluZWQgZm9yIEFSTSBwbGF0Zm9ybXNdKQorICAgICAgICBHQ1JZUFRfSFdGX01PRFVMRVM9Imh3Zi1hcm0ubG8iCisgICAgICAgIDs7Citlc2FjCitBQ19TVUJTVChbR0NSWVBUX0hXRl9NT0RVTEVTXSkKKworCisjCisjIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkLgorIworQlVJTERfUkVWSVNJT049Im15bTRfcmV2aXNpb24iCitBQ19TVUJTVChCVUlMRF9SRVZJU0lPTikKK0FDX0RFRklORV9VTlFVT1RFRChCVUlMRF9SRVZJU0lPTiwgIiRCVUlMRF9SRVZJU0lPTiIsCisgICAgICAgICAgICAgICAgICAgW0dJVCBjb21taXQgaWQgcmV2aXNpb24gdXNlZCB0byBidWlsZCB0aGlzIHBhY2thZ2VdKQorCitjaGFuZ2VxdW90ZSgsKWRubAorQlVJTERfRklMRVZFUlNJT049YGVjaG8gIiRWRVJTSU9OIiB8IHNlZCAncy9cKFswLTkuXSpcKS4qL1wxLi87cy9cLi8sL2cnYAorY2hhbmdlcXVvdGUoWyxdKWRubAorQlVJTERfRklMRVZFUlNJT049IiR7QlVJTERfRklMRVZFUlNJT059bXltNF9yZXZpc2lvbl9kZWMiCitBQ19TVUJTVChCVUlMRF9GSUxFVkVSU0lPTikKKworQlVJTERfVElNRVNUQU1QPWBkYXRlIC11ICslWS0lbS0lZFQlSDolTSswMDAwIDI+L2Rldi9udWxsIHx8IGRhdGVgCitBQ19TVUJTVChCVUlMRF9USU1FU1RBTVApCitBQ19ERUZJTkVfVU5RVU9URUQoQlVJTERfVElNRVNUQU1QLCAiJEJVSUxEX1RJTUVTVEFNUCIsCisgICAgICAgICAgICAgICAgICAgW1RoZSB0aW1lIHRoaXMgcGFja2FnZSB3YXMgY29uZmlndXJlZCBmb3IgYSBidWlsZF0pCisKKworIyBBbmQgY3JlYXRlIHRoZSBmaWxlcy4KK0FDX0NPTkZJR19GSUxFUyhbCitNYWtlZmlsZQorbTQvTWFrZWZpbGUKK2NvbXBhdC9NYWtlZmlsZQorbXBpL01ha2VmaWxlCitjaXBoZXIvTWFrZWZpbGUKK3JhbmRvbS9NYWtlZmlsZQorZG9jL01ha2VmaWxlCitzcmMvTWFrZWZpbGUKK3NyYy9nY3J5cHQuaAorc3JjL2xpYmdjcnlwdC1jb25maWcKK3NyYy92ZXJzaW9uaW5mby5yYwordGVzdHMvTWFrZWZpbGUKK10pCitBQ19DT05GSUdfRklMRVMoW3Rlc3RzL2hhc2h0ZXN0LTI1NmddLCBbY2htb2QgK3ggdGVzdHMvaGFzaHRlc3QtMjU2Z10pCitBQ19PVVRQVVQKKworCitkZXRlY3Rpb25fbW9kdWxlPSIke0dDUllQVF9IV0ZfTU9EVUxFUyUubG99IgordGVzdCAtbiAiJGRldGVjdGlvbl9tb2R1bGUiIHx8IGRldGVjdGlvbl9tb2R1bGU9Im5vbmUiCisKKyMgR2l2ZSBzb21lIGZlZWRiYWNrCitHQ1JZX01TR19TSE9XKFtdLFtdKQorR0NSWV9NU0dfU0hPVyhbTGliZ2NyeXB0XSxbdiR7VkVSU0lPTn0gaGFzIGJlZW4gY29uZmlndXJlZCBhcyBmb2xsb3dzOl0pCitHQ1JZX01TR19TSE9XKFtdLFtdKQorR0NSWV9NU0dfU0hPVyhbUGxhdGZvcm06ICAgICAgICAgICAgICAgICBdLFskUFJJTlRBQkxFX09TX05BTUUgKCRob3N0KV0pCitHQ1JZX01TR19TSE9XKFtIYXJkd2FyZSBkZXRlY3Rpb24gbW9kdWxlOl0sWyRkZXRlY3Rpb25fbW9kdWxlXSkKK0dDUllfTVNHX1dSQVAoW0VuYWJsZWQgY2lwaGVyIGFsZ29yaXRobXM6XSxbJGVuYWJsZWRfY2lwaGVyc10pCitHQ1JZX01TR19XUkFQKFtFbmFibGVkIGRpZ2VzdCBhbGdvcml0aG1zOl0sWyRlbmFibGVkX2RpZ2VzdHNdKQorR0NSWV9NU0dfV1JBUChbRW5hYmxlZCBrZGYgYWxnb3JpdGhtczogICBdLFskZW5hYmxlZF9rZGZzXSkKK0dDUllfTVNHX1dSQVAoW0VuYWJsZWQgcHVia2V5IGFsZ29yaXRobXM6XSxbJGVuYWJsZWRfcHVia2V5X2NpcGhlcnNdKQorR0NSWV9NU0dfU0hPVyhbUmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICBdLFskcmFuZG9tXSkKK0dDUllfTVNHX1NIT1coW1VzaW5nIGxpbnV4IGNhcGFiaWxpdGllczogXSxbJHVzZV9jYXBhYmlsaXRpZXNdKQorR0NSWV9NU0dfU0hPVyhbVHJ5IHVzaW5nIFBhZGxvY2sgY3J5cHRvOiBdLFskcGFkbG9ja3N1cHBvcnRdKQorR0NSWV9NU0dfU0hPVyhbVHJ5IHVzaW5nIEFFUy1OSSBjcnlwdG86ICBdLFskYWVzbmlzdXBwb3J0XSkKK0dDUllfTVNHX1NIT1coW1RyeSB1c2luZyBJbnRlbCBQQ0xNVUw6ICAgXSxbJHBjbG11bHN1cHBvcnRdKQorR0NSWV9NU0dfU0hPVyhbVHJ5IHVzaW5nIERSTkcgKFJEUkFORCk6ICBdLFskZHJuZ3N1cHBvcnRdKQorR0NSWV9NU0dfU0hPVyhbVHJ5IHVzaW5nIEludGVsIEFWWDogICAgICBdLFskYXZ4c3VwcG9ydF0pCitHQ1JZX01TR19TSE9XKFtUcnkgdXNpbmcgSW50ZWwgQVZYMjogICAgIF0sWyRhdngyc3VwcG9ydF0pCitHQ1JZX01TR19TSE9XKFtUcnkgdXNpbmcgQVJNIE5FT046ICAgICAgIF0sWyRuZW9uc3VwcG9ydF0pCitHQ1JZX01TR19TSE9XKFtdLFtdKQorCitpZiB0ZXN0ICIkcHJpbnRfZWdkX25vdGljZSIgPSAieWVzIjsgdGhlbgorY2F0IDw8RzEwRU9GCisKKyAgIFRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgVW5peCByYW5kb20gZ2F0aGVyZXIgbW9kdWxlIChybmR1bml4KSBpcyBub3QKKyAgIHZlcnkgZ29vZCBhbmQgaXQgZG9lcyBub3Qga2VlcCB0aGUgZW50cm9weSBwb29sIG92ZXIgbXVsdGlwbGUKKyAgIGludm9jYXRpb25zIG9mIExpYmdjcnlwdCBiYXNlIGFwcGxpY2F0aW9ucy4gIFRoZSBzdWdnZXN0ZWQgd2F5IHRvCisgICBvdmVyY29tZSB0aGlzIHByb2JsZW0gaXMgdG8gdXNlIHRoZQorCisgICAgICAgICAgICAgICAgIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiAoRUdEKQorCisgICB3aGljaCBwcm92aWRlcyBhIGVudHJvcHkgc291cmNlIGZvciB0aGUgd2hvbGUgc3lzdGVtLiAgSXQgaXMgd3JpdHRlbgorICAgaW4gUGVybCBhbmQgYXZhaWxhYmxlIGF0IHRoZSBHbnVQRyBGVFAgc2VydmVycy4gIFRvIGVuYWJsZSBFR0QgeW91CisgICBzaG91bGQgcmVydW4gY29uZmlndXJlIHdpdGggdGhlIG9wdGlvbiAiLS1lbmFibGUtc3RhdGljLXJuZD1lZ2QiLgorICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gY29uc3VsdCB0aGUgR251UEcgd2VicGFnZXM6CisKKyAgICAgICAgICAgICBodHRwOi8vd3d3LmdudXBnLm9yZy9kb3dubG9hZC5odG1sI2VnZAorCitHMTBFT0YKK2ZpCisKK2lmIHRlc3QgIiRnY3J5X2N2X2djY19hdHRyaWJ1dGVfYWxpZ25lZCIgIT0gInllcyIgOyB0aGVuCitjYXQgPDxHMTBFT0YKKworICAgUGxlYXNlIG5vdCB0aGF0IHlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgR0NDIHN0eWxlCisgICBhbGlnbmVkIGF0dHJpYnV0ZS4gVXNpbmcgdGhpcyBzb2Z0d2FyZSBtYXkgZXZva2UgYnVzIGVycm9ycy4KKworRzEwRU9GCitmaQorCitpZiB0ZXN0IC1uICIkZ3BsIjsgdGhlbgorICBlY2hvICJQbGVhc2Ugbm90ZSB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgYSB2ZXJzaW9uIG9mIExpYmdjcnlwdCB3aXRoIgorICBlY2hvICIgICRncGwiCisgIGVjaG8gImluY2x1ZGVkLiAgVGhlc2UgcGFydHMgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgYW5kIHRodXMgdGhlIgorICBlY2hvICJ1c2Ugb2YgdGhpcyBsaWJyYXJ5IGhhcyB0byBjb21wbHkgd2l0aCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgR1BMLiIKK2ZpCmRpZmYgLS1naXQgYS9kb2MvQ2hhbmdlTG9nLTIwMTEgYi9kb2MvQ2hhbmdlTG9nLTIwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4MzdhMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9DaGFuZ2VMb2ctMjAxMQpAQCAtMCwwICsxLDQ4OCBAQAorMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCU5COiBDaGFuZ2VMb2cgZmlsZXMgYXJlIG5vIGxvbmdlciBtYW51YWxseSBtYWludGFpbmVkLiAgU3RhcnRpbmcKKwlvbiBEZWNlbWJlciAxc3QsIDIwMTEgd2UgcHV0IGNoYW5nZSBpbmZvcm1hdGlvbiBvbmx5IGluIHRoZSBHSVQKKwljb21taXQgbG9nLCBhbmQgZ2VuZXJhdGUgYSB0b3AtbGV2ZWwgQ2hhbmdlTG9nIGZpbGUgZnJvbSBsb2dzIGF0CisJIm1ha2UgZGlzdCIuICBTZWUgZG9jL0hBQ0tJTkcgZm9yIGRldGFpbHMuCisKKzIwMTEtMDktMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBSZW1vdmUgdGhlIGdjcnlfYWMgaW50ZXJmYWNlCisKKzIwMDktMTAtMjggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgY29kZSB0byBidWlsZCBhIG1hbiBwYWdlIGZvciBobWFjMjU2LgorCSogeWF0Mm0uYzogTmV3LiAgVGFrZW4gZnJvbSBHbnVQRy4KKwkqIGdjcnlwdC50ZXh0IChobWFjMjU2KTogTmV3IHNlY3Rpb24uCisKKzIwMDktMTAtMjggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChNdWx0aS1UaHJlYWRpbmcpOiBBZGQgZXhhbXBsZXMuCisKKzIwMDktMDctMDIgIERhaWtpIFVlbm8gIDx1ZW5vQHVuaXh1c2VyLm9yZz4KKworCSogZ2NyeXB0LnRleGkgKFdvcmtpbmcgd2l0aCBTLWV4cHJlc3Npb25zKTogRGVzY3JpYmUgZm9ybWF0CisJY2hhcmFjdGVyICclUycuICBUeXBvIGZpeGVzLiAgRml4ZXMgYnVnIzEwNzkuCisKKzIwMDktMDUtMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChXb3JraW5nIHdpdGggY2lwaGVyIGhhbmRsZXMpOiBDbGFyaWZpZWQgdGhhdAorCWtleWxlbmd0aHMgYXJlIGluIGJ5dGVzLgorCisyMDA5LTA0LTAyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoU2VsZi1UZXN0cyk6IEZpeCByZWdpc3RlciBmdWNudGlvbiBuYW1lcy4KKworMjAwOS0wMi0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKE1lbW9yeSBhbGxvY2F0aW9uKTogRml4IGRlc2NyaWJpb24gb2YgZ2NyeS1jYWxsb2MuCisJUmVwb3J0ZWQgYnkgU2VyZ2kgQmxhbmNoIGkgVG9ybsOpLgorCisyMDA4LTEyLTEwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoQ3J5cHRvZ3JhcGhpYyBGdW5jdGlvbnMpOiBFeHBsYWluIHRoZSBkb21haW4KKwlwYXJhbWV0ZXIgZm9yIGtleSBnZW5lcmF0aW9uLgorCisyMDA4LTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogVXBkYXRlcyBmb3IgcHVia2V5IGdlbmVyYXRpb24uCisKKzIwMDgtMTAtMjAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChFcnJvciBoYW5kbGVyKTogRml4IGRlc2NyaXB0aW9uIG9mCisJZ2NyeV9oYW5kbGVyX25vX21lbV90LiAgUmVwb3J0ZWQgYnkgUGF0cmljayBTdHJhdGVtYW4uICBkZXNyaWJlCisJd2hhdCB3aGF0IHRoZSBlcnJvciBoYW5kbGVyIGlzIGV4cGVjdGVkIHRvIGRvLiAgRml4ZXMgYnVnICM5NjEuCisKKzIwMDgtMDktMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChGSVBTIE1vZGUpOiBBZGQgc3RhdGUgdHJhbnNpdGlvbiBFcnJvciB0byBFcnJvci4KKwkqIGZpcHMtZnNtLmZpZzogRGl0dG8uCisKKzIwMDgtMDktMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBBZGQgYSBjb3VwbGUgb2YgaW5kZXggaXRlbXMuCisJKEZJUFMgTW9kZSk6IFJlZmxlY3QgcmVjZW50IGNoYW5nZXMuCisJKENvbnRyb2xsaW5nIHRoZSBsaWJyYXJ5KTogRGVzY3JpYmUgZ2NyeV9maXBzX21vZGVfYWN0aXZlLgorCisyMDA4LTA5LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoRklQUyBNb2RlKTogRGVzY3JpYmUgbmV3IHRyYW5zaXRpb25zIDE4IGFuZCAxOS4KKwkqIGZpcHMtZnNtLmZpZzogQWRkIG5ldyB0cmFuc2l0aW9ucy4KKworMjAwOC0wOS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGk6IEZvbGQgdGhlIHR3byBGSVBTIGFwcGVuZGljZXMgaW50byBvbmUuCisKKzIwMDgtMDktMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChQdWJsaWMtS2V5IFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUpOiBFeHBsYWluIFJTQQorCWJsaW5kaW5nLgorCisyMDA4LTA5LTA4ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogU29tZSB0eXBvcyBmaXhlZC4KKworMjAwOC0wOS0wOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGk6IEZvcm1hdHRpbmcgY2xlYW51cHMuCisJKiBsZ3BsLnRleGkgKExpYnJhcnkgQ29weWluZyk6IFJlcGxhY2UgQGFwcGVuZGl4IGJ5IEB1bm51bWJlcmVkLgorCSogZ3BsLnRleGkgKENvcHlpbmcpOiBEaXR0by4KKworMjAwOC0wOC0yNyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKG9ubGluZSk6IFRha2UgY2FyZSBvZiBkZXZlbG9wbWVudCB2ZXJzaW9ucy4KKworMjAwOC0wOC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFRvcCk6IFJlbW92ZSB0aGUgZGV0YWlsbWVudS4KKwkoUHVibGljIEtleSBDcnlwdG9ncmFwaGkgKElJKSk6IE1vdmUgaW50byBhIHNlY3Rpb24gb2YgdGhlIFBLCisJaW50ZXJmYWNlIGRlc2NyaXB0aW9uLgorCShIYXNoaW5nKTogTW92ZSBhZnRlciB0aGUgZW5jcnlwdGlvbiBjaGFwdGVycy4KKworMjAwOC0wOC0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKENvbnRyb2xsaW5nIHRoZSBsaWJyYXJ5KTogUmVtb3ZlCisJR0NSWUNUTF9EVU1QX0NPTkZJRyBiZWNhdXNlIGl0IGlzIG5vdCBpbXBsZW1lbnRlZC4KKwkoSW5pdGlhbGl6aW5nIHRoZSBsaWJyYXJ5KTogRGVzY3JpYmUgaW5pdGlhbGl6YXRpb24gc3RlcHMgd2l0aAorCXJlZ2FyZCB0byBzZWN1cmUgbWVtb3J5LgorCisJKiBnY3J5cHQudGV4aSAoV29ya2luZyB3aXRoIGNpcGhlciBoYW5kbGVzKTogQWRqdXN0IGZvcgorCWltcGxlbWVudGF0aW9uIGNoYW5nZXMgb2YgZ2NyeV9jaXBoZXJfc2V0a2V5LCBnY3J5X2NpcGhlcl9zZXRpdiBhbmQKKwlnY3J5X2NpcGhlcl9zZXRjdHIuCisKKzIwMDgtMDEtMDQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChDb250cm9sbGluZyB0aGUgbGlicmFyeSk6IEFkZCByZW1hcmsgdGhhdCB0aGUKKwl0aGVvcml0aWNhbCBhdHRhY2sgb24gYSBzZWVkIGZpbGUgaXMgbm90IGZlYXNpYmxlIHVuZGVyIExpbnV4LgorCisyMDA3LTEyLTExICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogVmFyaW91cyBtaW5vciBjb3JyZWN0aW9ucyBhcyByZXBvcnRlZCBieSBFbGllIERlCisJQnJhdWVyIG1vcmUgdGhhbiBhIHllYXIgYWdvLgorCisyMDA3LTA2LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoQ29udHJvbGxpbmcgdGhlIGxpYnJhcnkpOiBDbGFyaWZpZWQgdGhlIHVzZSBvZgorCUdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTS4KKworMjAwNy0wNC0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogSEFDS0lORzogTmV3LiAgVHdvIGl0ZW1zIGJ5IE1hcmN1cy4KKwkqIFJFQURNRS5hcGljaGFuZ2VzOiBNb3ZlIGZyb20gLi4gdG8gaGVyZS4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBmaWxlcy4KKworMjAwNy0wNC0wOSAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBnY3J5cHQudGV4aTogRml4IHNvbWUgdHlwb3MuCisKKzIwMDYtMTEtMDUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoR2VuZXJhbCBwdWJsaWMta2V5IHJlbGF0ZWQgRnVuY3Rpb25zKTogVHlwby4KKworMjAwNi0wOS0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKG9ubGluZSk6IE5ldyB0YXJnZXQuCisKKzIwMDYtMDgtMjkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChBdmFpbGFibGUgY2lwaGVycyk6IEFkZCBtaXNzaW5nIGNpcGhlcnMuCisKKzIwMDYtMDMtMTAgIEJyYWQgSGFyZHMgIDxicmFkaEBmcm9nbW91dGgubmV0PiAod2ssIHBhdGNoIDIwMDUtMDQtMjUpCisKKwkqIGdjcnlwdC50ZXhpOiBEb2N1bWVudCBTSEEtMjI0IGFuZCB0eXBvIGZpeGVzLgorCisyMDA2LTAxLTE4ICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gKHdrIDIwMDYtMDMtMDcpCisKKwkqIGdjcnlwdC50ZXhpIChBdmFpbGFibGUgY2lwaGVyIG1vZGVzKTogVHlwbyBmaXgsIGFkZCBhIGxpdHRsZQorCW1vcmUgZGV0YWlsIG9uIGNpcGhlciBtb2RlcyB2cyBjaXBoZXIgYWxnb3JpdGhtcy4KKworMjAwNi0wMS0wOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGdjcnlfY29udHJvbCBjb21tYW5kcy4KKworCSogZ2NyeXB0LnRleGk6IEZpeGVkIHNldmVyYWwgdHlwb3M7IHRoYW5rcyB0byBUb21taSBWYWluaWthaW5lbi4KKworMjAwNS0xMi0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChNUEkgZm9ybWF0cyk6IEZpeCByZXR1cm4gdHlwZXMgb2YgZnVuY3Rpb25zOgorCWdjcnlfbXBpX3NjYW4sIGdjcnlfbXBpX3ByaW50LCBnY3J5X21waV9hcHJpbnQuCisKKzIwMDUtMTEtMjYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogTmV3IGNoYXB0ZXI6IFByaW1lIG51bWJlcnMuCisKKzIwMDUtMTEtMTIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoTVBJIGZvcm1hdHMpOiBEb2N1bWVudCB0aGF0IGZvciBnY3J5X21waV9zY2FuIGFuZAorCWluIHRoZSBjYXNlIG9mIEdDUllNUElfRk1UX0hFWCwgQlVGTEVOIG11c3QgYmUgemVyby4KKworMjAwNS0xMC0zMSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBBZGRlZCBtb3JlIGdjcnlfY29udHJvbCByZWxhdGVkIGRlc2NyaXB0aW9ucy4KKworMjAwNS0xMC0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChDb250cm9sbGluZyB0aGUgbGlicmFyeSk6IFN0YXJ0IGRvY3VtZW50aW5nIHRoZQorCWV4aXN0aW5nIGNvbnRyb2wgY29tbWFuZHMuCisKKzIwMDUtMDQtMTEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoQXZhaWxhYmxlIGhhc2ggYWxnb3JpdGhtcyk6IEFkZCBlbnRyeSBmb3IgV2hpcmxwb29sLgorCisyMDA1LTAzLTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFdvcmtpbmcgd2l0aCBJTyBvYmplY3RzKTogRG9jdW1lbnQgYWMgaW8gb2JqZWN0czsKKwlhZGp1c3QgYWMgc2NoZW1lIGZ1bmN0aW9ucywgd2hpY2ggZG8gbm93IHVzZSBpbyBvYmplY3RzLgorCisyMDA1LTAzLTE5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFdvcmtpbmcgd2l0aCBjaXBoZXIgaGFuZGxlcyk6IENsYXJpZnkgQ1RTIG1vZGUuCisKKzIwMDUtMDItMDggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBGaXhlZCBkaXJlbnRyeS4KKworMjAwNS0wMi0xMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChVc2luZyBjcnlwdG9ncmFwaGljIGZ1bmN0aW9ucyk6IERvY3VtZW50IG5ldworCWVuY29kaW5nIGFuZCBzY2hlbWUgY3J5cHRvIGZ1bmN0aW9uYWxpdHkuCisKKzIwMDUtMDItMDMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogRml4ZWQgc2V2ZXJhbCB0eXBvczsgdGhhbmtzIHRvIE1pY2hlbGUgQmFsZGVzc2FyaS4KKworMjAwNS0wMS0wNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGk6IFVwZGF0ZWQgdG8gdXNlIEBjb3B5aW5nLiAgRml4ZWQgbGlzdCBvZiBjb3B5cmlnaHQKKwl5ZWFyczsgd2UgaGFkIHJlYWwgY2hhbmdlcyBpbiAyMDA0LiAgRml4ZWQgc29tZSBmb3JtYXR0aW5nIGlzc3Vlcy4KKworMjAwNC0wOC0yNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChNaXNjZWxsYW5lb3VzKTogRG9jdW1lbnQgZ2NyeV9tcGlfcmFuZG9taXplLgorCisyMDA0LTA4LTE4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKE11bHRpIFRocmVhZGluZyk6IERvY3VtZW50CisJR0NSWV9USFJFQURfT1BUSU9OX1BUSF9JTVBMLCBHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRF9JTVBMLgorCisyMDA0LTA1LTA3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmRlPgorCisJKiBnY3J5cHQudGV4aTogTWVyZ2VkIHNldmVyYWwgZml4ZXMgcmVwb3J0ZWQgYnkgVW1iZXJ0byBTYWxzaS4KKworMjAwNC0wNC0wOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5kZT4KKworCSogZ2NyeXB0LnRleGkgKE11bHRpIFRocmVhZGluZyk6IFR5cG8gZml4LgorCisyMDA0LTAzLTExICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGdjcnlwdC50ZXhpIChNdWx0aSBUaHJlYWRpbmcpOiBQYXJ0aWFsbHkgZG9jdW1lbnQgbmV3IHRocmVhZAorCXN1cHBvcnQuCisKKzIwMDQtMDItMjQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQudGV4aSAoQ2FsY3VsYXRpb25zKTogVHlwbyBmaXguCisKKzIwMDQtMDEtMjUgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChHZW5lcmFsIGNpcGhlciBmdW5jdGlvbnMpOiBGaXhlZCBkZXNjcmlwdGlvbnMgb2YKKwl0aGUgYXJndW1lbnRzIGZvciBHQ1JZQ1RMX0dFVF9LRVlMRU4sIEdDUllDVExfR0VUX0JMS0xFTjsgcmVwb3J0ZWQKKwlieSBSYW5keS4KKworMjAwNC0wMS0xNCAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFB1YmxpYyBLZXkgY3J5cHRvZ3JhcGh5IElJKTogQWRqdXN0ZWQgdG8gbmV3CisJZ2NyeV9hY18qIEFQSTsgZG9jdW1lbnQgZmxhZ3MuCisKKzIwMDMtMTItMDQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoZ2NyeXB0X1RFWElORk9TKTogUmVtb3ZlZCBmZGwudGV4aS4KKworMjAwMy0xMi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC50ZXhpOiBDaGFuZ2VkIGxpY2Vuc2UgZnJvbSBGREwgdG8gR1BMIGJlY2F1c2UgdGhpcyBpcyBhCisJcmVmZXJlbmNlIG1hbnVhbCBvbmx5IHVzZWZ1bCBhbG9uZyB3aXRoIGFjdHVhbCBjb2RlLgorCSogZmRsLnRleGk6IFJlbW92ZWQuCisKKwkqIGdjcnlwdC50ZXhpOiBNaW5vciBjbGVhbnVwcworCShXb3JraW5nIHdpdGgga2V5cyk6IENsYXJpZmllZCBnZW5lcmF0aW9uIG9mIFJTQSdzIEUgcGFyYW1ldGVyLgorCShNdWx0aSBUaHJlYWRpbmcpOiBDbGFyaWZpZWQuCisKKzIwMDMtMTEtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQudGV4aSAoV29ya2luZyB3aXRoIFMtZXhwcmVzc2lvbnMpOiBBZGRlZCAiJWIiLgorCisyMDAzLTExLTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LnRleGkgKFJldHJpZXZpbmcgcmFuZG9tIG51bWJlcnMpOiBBZGQgZ2NyeV9jcmVhdGVfbm9uY2UuCisKKzIwMDMtMDgtMzAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQudGV4aSAoV29ya2luZyB3aXRoIGhhc2ggYWxnb3JpdGhtcyk6IENsYXJpZmllZCB0aGF0IEhNQUMKKwlkb2VzIG5vdCB3b3JrIHdpdGggYWxsIGFsZ29yaXRobXMuCisKKzIwMDMtMDctMzAgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoQXZhaWxhYmxlIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyk6IE1lbnRpb24KKwlHQ1JZX0FDX0VMR19FLgorCisyMDAzLTA3LTI4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFdvcmtpbmcgd2l0aCBrZXlzKTogTWVudGlvbiB0aGF0IGdjcnlfcGtfdGVzdGtleQorCWFuZCBnY3J5X2FjX2tleV90ZXN0IG9ubHkgdmVyaWZ5IHByaXZhdGUga2V5cy4KKwkoV29ya2luZyB3aXRoIGtleXMpOiBGaXggdHlwby4KKwkoR2VuZXJhbCBwdWJsaWMta2V5IHJlbGF0ZWQgRnVuY3Rpb25zKTogRml4ZWQgc29tZSBzZW50ZW5jZXMsCisJdGhhbmtzIHRvIE5laWwgU3ByaW5nLgorCisyMDAzLTA3LTI3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LnRleGk6IEFkanVzdGVkIGRlc2NyaXB0aW9uIG9mIGdjcnlfbXBpX3NjYW4gYW5kCisJZ2NyeV9tcGlfZHVtcC4gQWRkIGdjcnlfbXBpX2R1bXAuCisKKzIwMDMtMDctMjIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogQWRkZWQgbW9yZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcmVnaXN0ZXIKKwltZWNoYW5pc20uCisKKzIwMDMtMDctMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQudGV4aSAoTWlzYyk6IEFkZCBhIHdhcm5pbmcgb24gdGhlIHVzZSBvZiBvcGFxdWUgdmFsdWVzLgorCisyMDAzLTA3LTE0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKE92ZXJ2aWV3KTogTWVudGlvbiB0aGUgbm9uLXRocmVhZC1zYWZlLW5hdHVyZSBvZgorCWZ1bmN0aW9ucyBtb2RpZnlpbmcgY29udGV4dCBzdG9yZWQgaW4gaGFuZGxlcy4KKworMjAwMy0wNy0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChBdmFpbGFibGUgY2lwaGVycyk6IEFkZGVkOiBUV09GSVNIMTI4LgorCShFcnJvciBIYW5kbGluZyk6IE1lcmdlZCBhIGxvdCBvZiBkb2N1bWVudGF0aW9uIHRha2VuIGZyb20gR1BHTUUuCisKKzIwMDMtMDctMDggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoV29ya2luZyB3aXRoIHNldHMgb2YgZGF0YSk6IERvY3VtZW50ZWQ6CisJZ2NyeV9hY19kYXRhX2NvcHkuCisKKzIwMDMtMDctMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogRG9jdW1lbnRlZCBtb2R1bGUgc3lzdGVtLgorCisyMDAzLTA3LTA1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFdvcmtpbmcgd2l0aCBjaXBoZXIgaGFuZGxlcyk6IFNtYWxsIGZpeCBieSBTaW1vbgorCUpvc2Vmc3NvbiA8amFzQGV4dHVuZG8uY29tPi4KKworMjAwMy0wNy0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBEb2N1bWVudGVkIGFjIGludGVyZmFjZS4KKworMjAwMy0wNi0xOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpOiBTbWFsbCBmaXhlcy4KKworMjAwMy0wNi0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci1yZWYuc2dtbDogUmVtb3ZlZCBmaWxlLgorCSogZGlnZXN0LXJlZi5zZ21sOiBMaWtld2lzZS4KKwkqIG1pc2MtcmVmLnNnbWw6IExpa2V3aXNlLgorCSogcHVia2V5LXJlZi5zZ21sOiBMaWtld2lzZS4KKwkqIHJlZmVyZW5jZS5zZ21sOiBMaWtld2lzZS4KKwkqIHZlcnNpb24uc2dtbC5pbjogTGlrZXdpc2UuCisKKzIwMDMtMDYtMTUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogRG9jdW1lbnRlZCBzZXZlcmFsIHBhcnRzIG9mIHRoZSBsaWJyYXJ5LCBtZXJnZWQKKwlzb21lIGRvY3VtZW50YXRpb24gZnJvbSBHUEdNRSdzIG1hbnVhbCwgcmUtc3RydWN0dXJlZCB0aGUgd2hvbGUKKwltYW51YWwsIGFkZGVkIG1vcmUgbWVudXMuCisKKzIwMDMtMDYtMTQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoSGFzaCBGdW5jdGlvbnMpOiBBZGp1c3RlZGVkIGRlc2NyaXB0aW9uIG9mCisJZ2NyeV9tZF9jb3B5LgorCisyMDAzLTA2LTEyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFB1YmxpYyBLZXkgRnVuY3Rpb25zKTogRml4IGV4YW1wbGUgUy1FeHAsIGkuZS46CisJYWRkZWQgdGhlIG51bWJlciBvZiBmb2xsb3dpbmcgZGlnaXRzIGFzIHByZWZpeCB0byB0aGUgbnVtYmVyIG9mCisJYml0cy4KKwkoUHVibGljIEtleSBGdW5jdGlvbnMpOiBEb2N1bWVudCB0aGUgZ2VuZXJhbCB1c2FnZSBvZiBgZmxhZ3MnLAorCWluY2x1ZGluZyB0aGUgbm8tYmxpbmRpbmcgZmxhZy4KKworMjAwMy0wNi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC50ZXhpIChIYXNoIEZ1bmN0aW9ucyk6IERvY3VtZW50IHBvc3NpYmxlIHZhbHVlcyBvZiBIRC4KKworMjAwMy0wNi0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC50ZXhpIChWZXJzaW9uIENoZWNrKTogQ2hhbmdlZCBkZXNjcmlwdGlvbiBvZgorCWdjcnlfY2hlY2tfdmVyc2lvbjsgdGhlIHVzZXIgbm93ICptdXN0KiBjYWxsIHRoZSBmdW5jdGlvbiB0bworCWluaXRpYWxpemUgdGhlIGxpYnJhcnkuCisKKzIwMDMtMDYtMDggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aTogQ2hhbmdlIGZvciBsaWJncGctZXJyb3IuCisKKzIwMDMtMDUtMjIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoUHVibGljIEtleSBGdW5jdGlvbnMpOiBGaXhlZCB0eXBvLgorCisyMDAzLTA1LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LnRleGkgKFB1YmxpYyBLZXkgRnVuY3Rpb25zKTogTWVudGlvbiB0aGF0IG9ubHkgdGhlCisJY2hlY2tpbmcgb2Ygc2VjcmV0IGtleXMgaXMgc3VwcG9ydGVkIGN1cnJlbnRseS4KKworMjAwMy0wMy0zMCAgU2ltb24gSm9zZWZzc29uICA8amFzQGV4dHVuZG8uY29tPgorCisJKiBnY3J5cHQudGV4aTogQWRkIENUUi4KKworMjAwMy0wMy0yMiAgU2ltb24gSm9zZWZzc29uICA8amFzQGV4dHVuZG8uY29tPgorCisJKiBnY3J5cHQudGV4aTogQWRkIENCQy1NQUMuCisKKzIwMDMtMDMtMDQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQudGV4aSAoQ2lwaGVyIEZ1bmN0aW9ucyk6IEFkZGVkIGdjcnlfY2lwaGVyX3Jlc2V0LgorCisyMDAzLTAxLTIzICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LnRleGkgKGdjcnlfcGtfZGVjcnlwdCk6IERlc2NyaWJlZCB1c2Ugb2YgRkxBR1MKKworMjAwMy0wMS0yMCAgU2ltb24gSm9zZWZzc29uICA8amFzQGV4dHVuZG8uY29tPgorCisJKiBnY3J5cHQudGV4aSAoSGFzaCBGdW5jdGlvbnMpOiBBZGQgQ1JDLgorCisyMDAzLTAxLTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LnRleGk6IE1vc3QgZnVuY3Rpb25zIGFyZSBub3cgZG9jdW1lbnRlZC4gIFN0aWxsIG5lZWQgdG8KKwlmaW5lIHR1bmUgdGhlIG1lbnUgc3RydWN0dXJlLCBkb2N1bWVudCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zLAorCW1hcmsgdXAgaW5kaWNlcyBhbmQgcmVmZXJlbmNlcyBhbmQgYWRkIGV4YW1wbGVzLgorCisyMDAyLTA4LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LnRleGk6IFR5cG8gZml4ZXMuCisKKzIwMDItMDUtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsZ3BsLnRleGk6IE5ldy4KKwkqIGdjcnlwdC50ZXhpOiBJbmNsdWRlZCBsZ3BsIGFuZCBjb21tZW50ZWQgbm90IHlldCBjb252ZXJ0ZWQgdGV4dC4KKworMjAwMi0wNC0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHZlcnNpb24uc2dtbC5pbiwgY2lwaGVyLXJlZi5zZ21sLCBkaWdlc3QtcmVmLnNnbWwsIG1pc2MtcmVmLnNnbWwKKwkqIHB1YmtleS1yZWYuc2dtbCwgcmVmZXJlbmNlLnNnbWw6IFJlbW92ZWQuCisJKiBnY3J5cHQudGV4aTogTmV3LiBCYXNlZCBvbiB0aGUgb2xkIHNnbWwgdmVyc2lvbi4KKwkqIGdwbC50ZXhpLCBmZGwudGV4aTogTmV3LgorCSogTWFrZWZpbGUuYW06IEFkanVzdGVkIGZvciB1c2Ugd2l0aCB0ZXhpbmZvLgorCisyMDAwLTEyLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCVJlbmFtZWQgdGhlIGdjcnlwdHJlZi5zZ21sIGZpbGVzIGFuZCByZW1vdmVkIHRoZSBHbnVQRyBzdHVmZi4KKworVHVlIE9jdCAyNiAxNDoxMDoyMSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogUmVtb3ZlZCBncGggZnJvbSB0aGlzIGRldmVsb3BtZW50IHNlcmllcworCitNb24gU2VwICA2IDE5OjU5OjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBOZXcgc3ViZGlyIGdwaCBmb3IgdGhlIG1hbnVhbC4KKworVGh1IEp1bCAyMiAyMDowMzowMyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGdwZy5zZ21sICgtLWFsd2F5cy10cnVzdCk6IEFkZGVkLgorCitXZWQgSnVsIDE0IDE5OjQyOjA4IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogTWFrZWZpbGUuYW06IENyZWF0ZSBhIGR1bW15IG1hbiBwYWdlIGlmIGRvY2Jvb2stdG8tbWFuIGlzIG1pc3NpbmcuCisKK1dlZCBKdW4gMTYgMjA6MTY6MjEgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBncGcxLnBvZDogUmVtb3ZlZC4KKwkqIGdwZy5zZ21sOiBOZXcuIFJlcGxhY2VzIHRoZSBwb2QgZmlsZQorCSogTWFrZWZpbGUuYW06IEFkZCBydWxlIHRvIG1ha2UgYSBtYW4gZmlsZSBmcm9tIHNnbWwKKworVHVlIEp1biAxNSAxMjoyMTowOCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE1ha2VmaWxlLmluLmluOiBVc2UgREVTVERJUi4KKworTW9uIE1heSAzMSAxOTo0MToxMCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIGdwZy4xcG9kOiBFbmhhbmNlZCB0aGUgQnVncyBzZWN0aW9uIChNaWNoYWVsKS4KKworV2VkIEZlYiAxMCAxNzoxNTozOSBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogZ3BnLjFwb2Q6IFNwZWxsaW5nIGFuZCBncmFtbWFyIGNvcnJlY3Rpb25zIChKb2huIEEuIE1hcnRpbikKKwkqIEZBUTogRGl0dG8uCisJKiBERVRBSUxTOiBEaXR0by4KKworIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworTG9jYWwgVmFyaWFibGVzOgorYnVmZmVyLXJlYWQtb25seTogdAorRW5kOgpkaWZmIC0tZ2l0IGEvZG9jL0RDTyBiL2RvYy9EQ08KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NjBmNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9EQ08KQEAgLTAsMCArMSwyOSBAQAorTGliZ2NyeXB0IERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbi4gIFZlcnNpb24gMS4wCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQnkgbWFraW5nIGEgY29udHJpYnV0aW9uIHRvIHRoZSBMaWJnY3J5cHQgcHJvamVjdCwgSSBjZXJ0aWZ5IHRoYXQ6CisKKyhhKSBUaGUgY29udHJpYnV0aW9uIHdhcyBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQgYnkgbWUgYW5kIEkKKyAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIGZyZWUgc29mdHdhcmUgbGljZW5zZQorICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworKGIpIFRoZSBjb250cmlidXRpb24gaXMgYmFzZWQgdXBvbiBwcmV2aW91cyB3b3JrIHRoYXQsIHRvIHRoZQorICAgIGJlc3Qgb2YgbXkga25vd2xlZGdlLCBpcyBjb3ZlcmVkIHVuZGVyIGFuIGFwcHJvcHJpYXRlIGZyZWUKKyAgICBzb2Z0d2FyZSBsaWNlbnNlIGFuZCBJIGhhdmUgdGhlIHJpZ2h0IHVuZGVyIHRoYXQgbGljZW5zZSB0bworICAgIHN1Ym1pdCB0aGF0IHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUKKyAgICBvciBpbiBwYXJ0IGJ5IG1lLCB1bmRlciB0aGUgc2FtZSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UKKyAgICAodW5sZXNzIEkgYW0gcGVybWl0dGVkIHRvIHN1Ym1pdCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlKSwKKyAgICBhcyBpbmRpY2F0ZWQgaW4gdGhlIGZpbGU7IG9yCisKKyhjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgcGVyc29uIHdobyBjZXJ0aWZpZWQgKGEpLCAoYikgb3IgKGMpIGFuZCBJIGhhdmUgbm90IG1vZGlmaWVkCisgICAgaXQuCisKKyhkKSBJIHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdGhpcyBwcm9qZWN0IGFuZCB0aGUgY29udHJpYnV0aW9uCisgICAgYXJlIHB1YmxpYyBhbmQgdGhhdCBhIHJlY29yZCBvZiB0aGUgY29udHJpYnV0aW9uIChpbmNsdWRpbmcKKyAgICBhbGwgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15CisgICAgc2lnbi1vZmYpIGlzIG1haW50YWluZWQgaW5kZWZpbml0ZWx5IGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZAorICAgIGNvbnNpc3RlbnQgd2l0aCB0aGlzIHByb2plY3Qgb3IgdGhlIGZyZWUgc29mdHdhcmUgbGljZW5zZShzKQorICAgIGludm9sdmVkLgorCitTaWduZWQtb2ZmLWJ5OiBbWW91ciBuYW1lIGFuZCBtYWlsIGFkZHJlc3NdCmRpZmYgLS1naXQgYS9kb2MvSEFDS0lORyBiL2RvYy9IQUNLSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYjhkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvSEFDS0lORwpAQCAtMCwwICsxLDE0MyBAQAorIyBIQUNLSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvcmcgLSotCisjK1RJVExFOiBIYWNraW5nIG5vdGVzIGZvciBMaWJnY3J5cHQKKyMrU1RBUlRVUDogc2hvd2FsbAorCisqIEhvdyB0byBjb250cmlidXRlCisKKyAgVGhlIGZvbGxvd2luZyBzdHVmZiBleHBsYWlucyBzb21lIGJhc2ljIHByb2NlZHVyZXMgeW91IG5lZWQgdG8KKyAgZm9sbG93IGlmIHlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgY29kZSBvciBkb2N1bWVudGF0aW9uLgorCisqKiBObyBtb3JlIENoYW5nZUxvZyBmaWxlcworCisgIERvIG5vdCBtb2RpZnkgYW55IG9mIHRoZSBDaGFuZ2VMb2cgZmlsZXMgaW4gTGliZ2NyeXB0LiAgU3RhcnRpbmcgb24KKyAgRGVjZW1iZXIgMXN0LCAyMDExIHdlIHB1dCBjaGFuZ2UgaW5mb3JtYXRpb24gb25seSBpbiB0aGUgR0lUIGNvbW1pdAorICBsb2csIGFuZCBnZW5lcmF0ZSBhIHRvcC1sZXZlbCBDaGFuZ2VMb2cgZmlsZSBmcm9tIGxvZ3MgYXQgIm1ha2UKKyAgZGlzdCIgdGltZS4gIEFzIHN1Y2gsIHRoZXJlIGFyZSBzdHJpY3QgcmVxdWlyZW1lbnRzIG9uIHRoZSBmb3JtIG9mCisgIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzLiAgVGhlIG9sZCBDaGFuZ2VMb2cgZmlsZXMgaGF2ZSBhbGwgYmUKKyAgcmVuYW1lZCB0byBDaGFuZ2VMb2ctMjAxMQorCisqKiBDb21taXQgbG9nIHJlcXVpcmVtZW50cworCisgIFlvdXIgY29tbWl0IGxvZyBzaG91bGQgYWx3YXlzIHN0YXJ0IHdpdGggYSBvbmUtbGluZSBzdW1tYXJ5LCB0aGUKKyAgc2Vjb25kIGxpbmUgc2hvdWxkIGJlIGJsYW5rLCBhbmQgdGhlIHJlbWFpbmluZyBsaW5lcyBhcmUgdXN1YWxseQorICBDaGFuZ2VMb2ctc3R5bGUgZW50cmllcyBmb3IgYWxsIGFmZmVjdGVkIGZpbGVzLiAgSG93ZXZlciwgaXQncyBmaW5lCisgIC0tIGV2ZW4gcmVjb21tZW5kZWQgLS0gdG8gd3JpdGUgYSBmZXcgbGluZXMgb2YgcHJvc2UgZGVzY3JpYmluZyB0aGUKKyAgY2hhbmdlLCB3aGVuIHRoZSBzdW1tYXJ5IGFuZCBDaGFuZ2VMb2cgZW50cmllcyBkb24ndCBnaXZlIGVub3VnaCBvZgorICB0aGUgYmlnIHBpY3R1cmUuICBPbWl0IHRoZSBsZWFkaW5nIFRBQnMgdGhhdCB5b3UncmUgdXNlZCB0byBzZWVpbmcKKyAgaW4gYSAicmVhbCIgQ2hhbmdlTG9nIGZpbGUsIGJ1dCBrZWVwIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIGF0IDcyCisgIG9yIHNtYWxsZXIsIHNvIHRoYXQgdGhlIGdlbmVyYXRlZCBDaGFuZ2VMb2cgbGluZXMsIGVhY2ggd2l0aCBpdHMKKyAgbGVhZGluZyBUQUIsIHdpbGwgbm90IGV4Y2VlZCA4MCBjb2x1bW5zLgorCisqKiBMaWNlbnNlIHBvbGljeQorCisgIExpYmdjcnlwdCBpcyBjdXJyZW50bHkgbGljZW5zZWQgdW5kZXIgdGhlIExHUEx2Misgd2l0aCB0b29scyBhbmQgdGhlCisgIG1hbnVhbCBiZWluZyB1bmRlciB0aGUgR1BMdjIrLiAgV2UgbWF5IGV2ZW50dWFsbHkgdXBkYXRlIHRvIGEgbmV3ZXIKKyAgdmVyc2lvbiBvZiB0aGUgbGljZW5zZXMgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtLiAgSXQgaXMgdGh1cworICBpbXBvcnRhbnQsIHRoYXQgYWxsIGNvbnRyaWJ1dGVkIGNvZGUgYWxsb3dzIGZvciBhbiB1cGRhdGUgb2YgdGhlCisgIGxpY2Vuc2U7IGZvciBleGFtcGxlIHdlIGNhbid0IGFjY2VwdCBjb2RlIHVuZGVyIHRoZSBMR1BMdjIob25seSkuCisKKyAgTGliZ2NyeXB0IHVzZWQgdG8gaGF2ZSBhIHN0cmljdCBwb2xpY3kgb2YgcmVxdWlyaW5nIGNvcHlyaWdodAorICBhc3NpZ25tZW50cyB0byB0aGUgRlNGLiAgVG8gYXZvaWQgdGhpcyBtYWpvciBvcmdhbml6YXRpb25hbCBvdmVyaGVhZAorICBhbmQgdG8gYWxsb3cgaW5jbHVzaW9uIG9mIGNvZGUsIG5vdCBjb3B5cmlnaHRlZCBieSB0aGUgRlNGLCB0aGlzCisgIHBvbGljeSBoYXMgYmVlbiByZWxheGVkLiAgSXQgaXMgbm93IGFsc28gcG9zc2libGUgdG8gY29udHJpYnV0ZSBjb2RlCisgIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBjb250cmlidXRpb24gaXMgaW4gYWNjb3JkYW5jZSB0byB0aGUKKyAgIkxpYmdjcnlwdCBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4iIGFzIGZvdW5kIGluIHRoZSBmaWxlCisgICJEQ08iLiAgKEV4Y2VwdCBmb3IgYSBzbGlnaHQgd29yZGluZyBjaGFuZ2UsIHRoaXMgRENPIGlzIGlkZW50aWNhbAorICB0byB0aGUgb25lIHVzZWQgYnkgdGhlIExpbnV4IGtlcm5lbC4pCisKKyAgSWYgeW91ciB3YW50IHRvIGNvbnRyaWJ1dGUgY29kZSBvciBkb2N1bWVudGF0aW9uIHRvIExpYmdjcnlwdCBhbmQKKyAgeW91IGRpZG4ndCBzaWduZWQgYSBjb3B5cmlnaHQgYXNzaWdubWVudCB3aXRoIHRoZSBGU0YgaW4gdGhlIHBhc3QsCisgIHlvdSBuZWVkIHRvIHRha2UgdGhlc2Ugc2ltcGxlIHN0ZXBzOgorCisgIC0gRGVjaWRlIHdoaWNoIG1haWwgYWRkcmVzcyB5b3Ugd2FudCB0byB1c2UuICBQbGVhc2UgaGF2ZSB5b3VyIHJlYWwKKyAgICBuYW1lIGluIHRoZSBhZGRyZXNzIGFuZCBub3QgYSBwc2V1ZG9ueW0uICBBbm9ueW1vdXMgY29udHJpYnV0aW9ucworICAgIGNhbiBvbmx5IGJlIGRvbmUgaWYgeW91IGZpbmQgYSBwcm94eSB3aG8gY2VydGlmaWVzIGZvciB5b3UuCisKKyAgLSBJZiB5b3VyIGVtcGxveWVyIG9yIHNjaG9vbCBtaWdodCBjbGFpbSBvd25lcnNoaXAgb2YgY29kZSB3cml0dGVuCisgICAgYnkgeW91OyB5b3UgbmVlZCB0byB0YWxrIHRvIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlCisgICAgcmlnaHQgdG8gY29udHJpYnV0ZSB1bmRlciB0aGUgRENPLgorCisgIC0gU2VuZCBhbiBPcGVuUEdQIHNpZ25lZCBtYWlsIHRvIHRoZSBnY3J5cHQtZGV2ZWxAZ251cGcub3JnIG1haWxpbmcKKyAgICBsaXN0IGZyb20geW91ciBtYWlsIGFkZHJlc3MuICBJbmNsdWRlIGEgY29weSBvZiB0aGUgRENPIGFzIGZvdW5kCisgICAgaW4gdGhlIG9mZmljaWFsIG1hc3RlciBicmFuY2guICBJbnNlcnQgeW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzCisgICAgaW50byB0aGUgRENPIGluIHRoZSBzYW1lIHdheSB5b3Ugd2FudCB0byB1c2UgaXQgbGF0ZXIuICBFeGFtcGxlOgorCisgICAgICBTaWduZWQtb2ZmLWJ5OiBKb2UgUi4gSGFja2VyIDxqb2VAZXhhbXBsZS5vcmc+CisKKyAgICAoSWYgeW91IHJlYWxseSBuZWVkIGl0LCB5b3UgbWF5IHBlcmZvcm0gc2ltcGxlIHRyYW5zZm9ybWF0aW9ucyBvZgorICAgIHRoZSBtYWlsIGFkZHJlc3M6IFJlcGxhY2luZyAiQCIgYnkgIiBhdCAiIG9yICIuIiBieSAiIGRvdCAiLikKKworICAtIFRoYXQncyBpdC4gIEZyb20gbm93IG9uIHlvdSBvbmx5IG5lZWQgdG8gYWRkIGEgIlNpZ25lZC1vZmYtYnk6IgorICAgIGxpbmUgd2l0aCB5b3VyIG5hbWUgYW5kIG1haWwgYWRkcmVzcyB0byB0aGUgY29tbWl0IG1lc3NhZ2UuICBJdCBpcworICAgIHJlY29tbWVuZGVkIHRvIHNlbmQgdGhlIHBhdGNoZXMgdXNpbmcgYSBQR1AvTUlNRSBzaWduZWQgbWFpbC4KKworKiogQ29kaW5nIHN0YW5kYXJkcworCisgIFBsZWFzZSBmb2xsb3cgdGhlIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLiAgSWYgeW91IGFyZSBpbiBkb3VidCBjb25zdWx0CisgIHRoZSBleGlzdGluZyBjb2RlIGFzIGFuIGV4YW1wbGUuICBEbyBubyByZS1pbmRlbnQgY29kZSB3aXRob3V0IGEKKyAgbmVlZC4gIElmIHlvdSByZWFsbHkgbmVlZCB0byBkbyBpdCwgdXNlIGEgc2VwYXJhdGUgY29tbWl0IGZvciBzdWNoIGEKKyAgY2hhbmdlLgorCisKKyogUG9ydGluZyBoaW50cworKiogVGFraW5nIG9wdGltaXplZCBNUEkgY29kZSBvdXQgb2YgR01QOgorCisgIEkgZ2VuZXJhdGVkIHRoZSBwZW50aXVtNC8qIGZpbGVzIGJ5IGdsdWVpbmcgdGhlIGV4aXN0aW5nIGFzc2VtYmxlcgorICBwcm9sb2d1ZXMgdG8gdGhlIEdNUCA0LjIuMSBhc3NlbWJsZXIgZmlsZXMgZ2VuZXJhdGVkIHdpdGggdGhlIG00CisgIHRvb2wgaW4gR01QJ3MgYnVpbGQgcHJvY2VzcywgZm9yIGV4YW1wbGU6CisKKyAgICAkIG00IC1ESEFWRV9DT05GSUdfSCAtRF9fR01QX1dJVEhJTl9HTVAgLURPUEVSQVRJT05fcnNoaWZ0IC1EUElDIFwKKyAgICAgIHJzaGlmdC5hc20gPnRtcC1yc2hpZnQucworCisgIFRoZW4gdG1wLXJzaGlmdCB3aWxsIGNvbnRhaW4gdGhlIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgZm9yIHRoZQorICBjb25maWd1cmVkIHBsYXRmb3JtLiAgVW5mb3J0dW5hdGVseSwgdGhpcyB3YXkgdGhlIGNvbW1lbnRzIGFyZSBsb3N0LgorICBGb3IgbW9zdCBmaWxlcyBJIHJlLWluc2VydGVkIHNvbWUgb2YgdGhlIGNvbW1lbnRzLCBidXQgdGhpcyBpcworICB0ZWRpb3VzIHdvcmsuCisKKworKiBEZWJ1ZyBoaW50cworCisqKiBEZWJ1Z2dpbmcgbWF0aCBzdHVmZjoKKworICBXaGlsZSBkZWJ1Z2dpbmcgdGhlIEVDQyBjb2RlIGluIGxpYmdjcnlwdCwgSSB3YXMgaW4gbmVlZCBmb3Igc29tZQorICBjb21wdXRlciBhbGdlYnJhIHN5c3RlbSB3aGljaCB3b3VsZCBhbGxvdyBtZSB0byB2ZXJpZnkgdGhlIG51bWJlcnMKKyAgaW4gdGhlIGRlYnVnZ2luZyBlYXNpbHkuICBJIGZvdW5kIHRoYXQgUEFSSSAocGFyaS1ncCBwYWNrYWdlIGluCisgIERlYmlhbikgaGFzIHN1cHBvcnQgZm9yIGVsbGlwdGljIGN1cnZlcy4gIFRoZSBiZWxvdyBjb21tYW5kcyBzaG93cworICBob3cgdGhleSBhcmUgc2V0IHVwIGFuZCB1c2VkIHdpdGggYW4gZXhhbXBsZS4KKworICA9PT04PD09PT09PT09CisgIGhleHRvZGVjKHMpPWxvY2FsKHY9VmVjKHMpLGE9MTAsYj0xMSxjPTEyLGQ9MTMsZT0xNCxmPTE1LEE9MTAsQj0xMSxDPTEyLEQ9MTMsRT0xNCxGPTE1LGgpO2lmKCNzZXR1bmlvbihTZXQodiksVmVjKCIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmIikpPjIyLGVycm9yKTtmb3IoaT0xLCN2LGg9c2hpZnQoaCw0KStldmFsKHZbaV0pKTtoCisKKyAgcCA9IGhleHRvZGVjKCIwMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiKQorICBhID0gaGV4dG9kZWMoIjAxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIpCisgIGIgPSBoZXh0b2RlYygiNTE5NTNFQjk2MThFMUM5QTFGOTI5QTIxQTBCNjg1NDBFRUEyREE3MjVCOTlCMzE1RjNCOEI0ODk5MThFRjEwOUUxNTYxOTM5NTFFQzdFOTM3QjE2NTJDMEJEM0JCMUJGMDczNTczREY4ODNEMkMzNEYxRUY0NTFGRDQ2QjUwM0YwMCIpCisKKyAgLyogU2V0IHVwIHleMiA9IHheMyArIGF4ICsgYiBtb2QgKHApLiAgKi8KKyAgZSA9IGVsbGluaXQoTW9kKDEscCkqWzAsMCwwLGEsYl0pOworCisgIGd4ID0gaGV4dG9kZWMgKCIwMEM2ODU4RTA2QjcwNDA0RTlDRDlFM0VDQjY2MjM5NUI0NDI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQUExNEI1RTc3RUZFNzU5MjhGRTFEQzEyN0EyRkZBOERFMzM0OEIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJENjYiKQorICBneSA9IGhleHRvZGVjICgiMDExODM5Mjk2QTc4OUEzQkMwMDQ1QzhBNUZCNDJDN0QxQkQ5OThGNTQ0NDk1NzlCNDQ2ODE3QUZCRDE3MjczRTY2MkM5N0VFNzI5OTVFRjQyNjQwQzU1MEI5MDEzRkFEMDc2MTM1M0M3MDg2QTI3MkMyNDA4OEJFOTQ3NjlGRDE2NjUwIikKKyAgZyA9IE1vZCgxLHApKltneCxneV0KKworICBuID0gaGV4dG9kZWMgKCIwMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNUM5Qjg4OTlDNDdBRUJCNkZCNzFFOTEzODY0MDkiKQorCisgIC8qIFZlcmlmeSB0aGF0IEcgaXMgb24gdGhlIGN1cnZlLCBhbmQgdGhhdCBuIGlzIHRoZSBvcmRlci4gICovCisgIGVsbGlzb25jdXJ2ZSAoZSxnKQorICBpc3ByaW1lIChuKQorICBlbGxwb3cgKGUsZyxuKQorCisgIGQgPSBoZXh0b2RlYyAoIjAxOEY5NTczRjI1MDU5NTcxQkRGNjE0NTI5OTUzREUyNTQwNDk3Q0VEQUJEMDRGM0FGNzg4MTNCRUQ3QkIxNjNBMkZEOTE5RUVDRjgyMjg0OEZDQTM5RUY1NUU1MDBGOENFODYxQzdENTNEMzcxODU3Rjc3NzRCNzk0MjhFODg3RjgxQiIpCisKKyAgcXggPSBoZXh0b2RlYyAoIjAwMzE2QUFBRDNFOTA1ODc1OTM4RjU4OEJEOUU4QTQ3ODVFRjlCREI3NkQ2MkE4M0E1MzQwRjgyQ0I4RTgwMEIyNTYxOUY1QzNFQTAyQjdBNEZBNDNENzQ5N0M3NzAyRjdERkJFQUM4RThGOTJDM0NBQUJEOUY4NDE4MkZEQTM5MUIzQiIpCisgIC8qIE5vdGU6IFdST05HISAoSXQgaXMgYXBwYXJlbnQgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIFggc2hpZnRlZCBieQorICAgICA4IGJpdCkuICAqLworICBxeSA9IGhleHRvZGVjICgiMDAwMDMxNkFBQUQzRTkwNTg3NTkzOEY1ODhCRDlFOEE0Nzg1RUY5QkRCNzZENjJBODNBNTM0MEY4MkNCOEU4MDBCMjU2MTlGNUMzRUEwMkI3QTRGQTQzRDc0OTdDNzcwMkY3REZCRUFDOEU4RjkyQzNDQUFCRDlGODQxODJGREEzOTFCIikKKyAgcSA9IE1vZCgxLHApKltxeCxxeV0KKworICAvKiBDYWxjdWxhdGUgd2hhdCBRIHNob3VsZCBiZSBnaXZlbiBkLiAgKi8KKyAgZWxscG93IChlLGcsZCkKKworICAvKiBUaGlzIGlzIG5vdCAwIGFuZCB0aHVzIHNob3dzIHRoYXQgbGliZ2NyeXB0IGdhdmUgUSBhbmQgZCB0aGF0IGRvCisgIG5vdCBtYXRjaC4gICovCisgIGVsbHBvdyAoZSxnLGQpIC0gcQorICA9PT09ODw9PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDMzMGJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTA1IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIGNyZWF0ZSBNYWtlZmlsZS5pbgorIyBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK0VYVFJBX0RJU1QgPSBSRUFETUUuYXBpY2hhbmdlcyBIQUNLSU5HIERDTyBcCisJICAgICBsaWJnY3J5cHQtbW9kdWxlcy5lcHMgZmlwcy1mc20uZXBzIFwKKwkgICAgIGxpYmdjcnlwdC1tb2R1bGVzLnBuZyBmaXBzLWZzbS5wbmcgXAorICAgICAgICAgICAgIGxpYmdjcnlwdC1tb2R1bGVzLnBkZiBmaXBzLWZzbS5wZGYgXAorCSAgICAgeWF0Mm0uYworCitESVNUQ0xFQU5GSUxFUyA9IGdjcnlwdC5jcHMgeWF0Mm0tc3RhbXAudG1wIHlhdDJtLXN0YW1wICQobXltYW5fcGFnZXMpCitDTEVBTkZJTEVTID0geWF0Mm0KKworQlVJTFRfU09VUkNFUyA9IGxpYmdjcnlwdC1tb2R1bGVzLmVwcyBmaXBzLWZzbS5lcHMgXAorICAgICAgICAgICAgICAgIGxpYmdjcnlwdC1tb2R1bGVzLnBuZyBmaXBzLWZzbS5wbmcgXAorICAgICAgICAgICAgICAgIGxpYmdjcnlwdC1tb2R1bGVzLnBkZiBmaXBzLWZzbS5wZGYKKworaW5mb19URVhJTkZPUyA9IGdjcnlwdC50ZXhpCitnY3J5cHRfVEVYSU5GT1MgPSBsZ3BsLnRleGkgZ3BsLnRleGkgbGliZ2NyeXB0LW1vZHVsZXMuZmlnIGZpcHMtZnNtLmZpZworCitZQVQyTV9PUFRJT05TID0gLUkgJChzcmNkaXIpIFwKKwktLXJlbGVhc2UgIkxpYmdjcnlwdCBAUEFDS0FHRV9WRVJTSU9OQCIgLS1zb3VyY2UgIkxpYmdjcnlwdCIKKworbXltYW5fc291cmNlcyA9IGdjcnlwdC50ZXhpCitteW1hbl9wYWdlcyAgID0gaG1hYzI1Ni4xCisKK21hbl9NQU5TID0gJChteW1hbl9wYWdlcykKKworeWF0Mm06IHlhdDJtLmMKKwkkKENDX0ZPUl9CVUlMRCkgLW8gJEAgJChzcmNkaXIpL3lhdDJtLmMKKworLmZpZy5wbmc6CisJZmlnMmRldiAtTCBwbmcgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPCAkQAorCisuZmlnLmpwZzoKKwlmaWcyZGV2IC1MIGpwZyBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8ICRACisKKy5maWcuZXBzOgorCWZpZzJkZXYgLUwgZXBzIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwgJEAKKworLmZpZy5wZGY6CisJZmlnMmRldiAtTCBwZGYgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPCAkQAorCit5YXQybS1zdGFtcDogJChteW1hbl9zb3VyY2VzKQorCUBybSAtZiB5YXQybS1zdGFtcC50bXAKKwlAdG91Y2ggeWF0Mm0tc3RhbXAudG1wCisJZm9yIGZpbGUgaW4gJChteW1hbl9zb3VyY2VzKSA7IGRvIFwKKyAgICAgICAgICAgICAgLi95YXQybSAkKFlBVDJNX09QVElPTlMpIC0tc3RvcmUgXAorCSAgICAgICAgICBgdGVzdCAtZiAnJCRmaWxlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkJGZpbGUgOyBkb25lCisJQG12IC1mIHlhdDJtLXN0YW1wLnRtcCAkQAorCit5YXQybS1zdGFtcDogeWF0Mm0KKworJChteW1hbl9wYWdlcykgOiB5YXQybS1zdGFtcAorCUBpZiB0ZXN0IC1mICRAOyB0aGVuIDo7IGVsc2UgXAorICAgICAgICAgICAgdHJhcCAncm0gLXJmIHlhdDJtLXN0YW1wIHlhdDJtLWxvY2snIDEgMiAxMyAxNTsgXAorICAgICAgICAgICAgICAgaWYgbWtkaXIgeWF0Mm0tbG9jayAyPi9kZXYvbnVsbDsgdGhlbiBcCisgICAgICAgICAgICAgICAgIHJtIC1mIHlhdDJtLXN0YW1wOyBcCisgICAgICAgICAgICAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHlhdDJtLXN0YW1wOyBcCisgICAgICAgICAgICAgICAgIHJtZGlyIHlhdDJtLWxvY2s7IFwKKyAgICAgICAgICAgICAgIGVsc2UgXAorICAgICAgICAgICAgICAgICB3aGlsZSB0ZXN0IC1kIHlhdDJtLWxvY2s7IGRvIHNsZWVwIDE7IGRvbmU7IFwKKyAgICAgICAgICAgICAgICAgdGVzdCAtZiB5YXQybS1zdGFtcDsgZXhpdCAkJD87IFwKKyAgICAgICAgICAgICAgIGZpOyBcCisgICAgICAgICAgICAgZmkKKworCisjIE1ha2Ugc3VyZSB0aGF0IGdjcnlwdC50ZXhpIGlzIHRvdWNoZWQgaWYgYW55IG90aGVyIHNvdXJjZSBmaWxlIGhhcworIyBiZWVuIG1vZGlmaWVkLiAgVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSB2ZXJzaW9uLnRleGkgbWFnaWMKKyMgdXBkYXRlcyB0aGUgcmVsZWFzZSBkYXRlLgorZ251cGcudGV4aSA6ICQoZ2NyeXB0X1RFWElORk9TKQorCXRvdWNoICQoc3JjZGlyKS9nY3J5cHQudGV4aQorCitvbmxpbmU6IGdjcnlwdC5odG1sIGdjcnlwdC5wZGYgZ2NyeXB0LmluZm8KKwlzZXQgLWU7IFwKKwllY2hvICJVcGxvYWRpbmcgY3VycmVudCBtYW51YWxzIHRvIHd3dy5nbnVwZy5vcmcgLi4uIjsgXAorCWNwIGxpYmdjcnlwdC1tb2R1bGVzLnBuZyBnY3J5cHQuaHRtbC87IFwKKwljcCBmaXBzLWZzbS5wbmcgZ2NyeXB0Lmh0bWwvOyBcCisgICAgICAgIHVzZXI9d2VybmVyIDsgZGFzaGRldmVsPSIiIDsgXAorICAgICAgICBpZiBlY2hvICJAUEFDS0FHRV9WRVJTSU9OQCIgfCBncmVwIC0tICItc3ZuIiA+L2Rldi9udWxsOyB0aGVuIFwKKwkgIGRhc2hkZXZlbD0iLWRldmVsIiA7IFwKKwkgIGNwIGdjcnlwdC5wZGYgZ2NyeXB0Lmh0bWwvOyBcCisJICBjcCBnY3J5cHQuaW5mbyBnY3J5cHQuaHRtbC87IFwKKwllbHNlIFwKKyAgICAgICAgICByc3luYyAtdiBnY3J5cHQucGRmIGdjcnlwdC5pbmZvIFwKKyAgICAgICAgICAgICAgICQke3VzZXJ9QHRyaXRoZW1pdXMuZ251cGcub3JnOndlYnNwYWNlL21hbnVhbHMvIDsgXAorICAgICAgICBmaSA7IFwKKwljZCBnY3J5cHQuaHRtbCA7IFwKKyAgICAgICAgcnN5bmMgLXZyIC0tZXhjbHVkZT0nLnN2bicgLiAgXAorCSAgJCR7dXNlcn1AdHJpdGhlbWl1cy5nbnVwZy5vcmc6d2Vic3BhY2UvbWFudWFscy9nY3J5cHQkJHtkYXNoZGV2ZWx9LwpkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmluIGIvZG9jL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZWYzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5MTcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCitWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZG9jCitESVNUX0NPTU1PTiA9ICQoZ2NyeXB0X1RFWElORk9TKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2Rpcikvc3RhbXAtdnRpIFwKKwkkKHNyY2RpcikvdmVyc2lvbi50ZXhpCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9ncGctZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ub2V4ZWNzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NvY2tsZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorSU5GT19ERVBTID0gJChzcmNkaXIpL2djcnlwdC5pbmZvCitURVhJTkZPX1RFWCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3RleGluZm8udGV4CithbV9fVEVYSU5GT19URVhfRElSID0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgKK0RWSVMgPSBnY3J5cHQuZHZpCitQREZTID0gZ2NyeXB0LnBkZgorUFNTID0gZ2NyeXB0LnBzCitIVE1MUyA9IGdjcnlwdC5odG1sCitURVhJTkZPUyA9IGdjcnlwdC50ZXhpCitURVhJMkRWSSA9IHRleGkyZHZpCitURVhJMlBERiA9ICQoVEVYSTJEVkkpIC0tcGRmIC0tYmF0Y2gKK01BS0VJTkZPSFRNTCA9ICQoTUFLRUlORk8pIC0taHRtbAorQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpCitEVklQUyA9IGR2aXBzCithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluZm9kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK21hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorTlJPRkYgPSBucm9mZgorTUFOUyA9ICQobWFuX01BTlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0ZJTEVWRVJTSU9OID0gQEJVSUxEX0ZJTEVWRVJTSU9OQAorQlVJTERfUkVWSVNJT04gPSBAQlVJTERfUkVWSVNJT05ACitCVUlMRF9USU1FU1RBTVAgPSBAQlVJTERfVElNRVNUQU1QQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkFMTEJBQ0tfU09DS0xFTl9UID0gQEZBTExCQUNLX1NPQ0tMRU5fVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NSWVBUX0NJUEhFUlMgPSBAR0NSWVBUX0NJUEhFUlNACitHQ1JZUFRfRElHRVNUUyA9IEBHQ1JZUFRfRElHRVNUU0AKK0dDUllQVF9IV0ZfTU9EVUxFUyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACitHQ1JZUFRfS0RGUyA9IEBHQ1JZUFRfS0RGU0AKK0dDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitHQ1JZUFRfUkFORE9NID0gQEdDUllQVF9SQU5ET01ACitHUEdfRVJST1JfQ0ZMQUdTID0gQEdQR19FUlJPUl9DRkxBR1NACitHUEdfRVJST1JfQ09ORklHID0gQEdQR19FUlJPUl9DT05GSUdACitHUEdfRVJST1JfTElCUyA9IEBHUEdfRVJST1JfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0lOU0VSVF9TWVNfU0VMRUNUX0ggPSBASU5TRVJUX1NZU19TRUxFQ1RfSEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJHQ1JZUFRfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfQ0lQSEVSU0AKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04gPSBATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTID0gQExJQkdDUllQVF9DT05GSUdfQ0ZMQUdTQAorTElCR0NSWVBUX0NPTkZJR19IT1NUID0gQExJQkdDUllQVF9DT05GSUdfSE9TVEAKK0xJQkdDUllQVF9DT05GSUdfTElCUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0xJQlNACitMSUJHQ1JZUFRfRElHRVNUUyA9IEBMSUJHQ1JZUFRfRElHRVNUU0AKK0xJQkdDUllQVF9MVF9BR0UgPSBATElCR0NSWVBUX0xUX0FHRUAKK0xJQkdDUllQVF9MVF9DVVJSRU5UID0gQExJQkdDUllQVF9MVF9DVVJSRU5UQAorTElCR0NSWVBUX0xUX1JFVklTSU9OID0gQExJQkdDUllQVF9MVF9SRVZJU0lPTkAKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMgPSBATElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK01QSV9TRkxBR1MgPSBATVBJX1NGTEFHU0AKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PRVhFQ1NUQUNLX0ZMQUdTID0gQE5PRVhFQ1NUQUNLX0ZMQUdTQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQVEhfQ0ZMQUdTID0gQFBUSF9DRkxBR1NACitQVEhfQ09ORklHID0gQFBUSF9DT05GSUdACitQVEhfTElCUyA9IEBQVEhfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitSQyA9IEBSQ0AKK1JVTl9MQVJHRV9EQVRBX1RFU1RTID0gQFJVTl9MQVJHRV9EQVRBX1RFU1RTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1NZU19TT0NLRVRfSCA9IEBTWVNfU09DS0VUX0hACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OX05VTUJFUiA9IEBWRVJTSU9OX05VTUJFUkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW4gPSBAZW1hY3NfbG9jYWxfdmFyc19iZWdpbkAKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kID0gQGVtYWNzX2xvY2FsX3ZhcnNfZW5kQAorZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHkgPSBAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitFWFRSQV9ESVNUID0gUkVBRE1FLmFwaWNoYW5nZXMgSEFDS0lORyBEQ08gXAorCSAgICAgbGliZ2NyeXB0LW1vZHVsZXMuZXBzIGZpcHMtZnNtLmVwcyBcCisJICAgICBsaWJnY3J5cHQtbW9kdWxlcy5wbmcgZmlwcy1mc20ucG5nIFwKKyAgICAgICAgICAgICBsaWJnY3J5cHQtbW9kdWxlcy5wZGYgZmlwcy1mc20ucGRmIFwKKwkgICAgIHlhdDJtLmMKKworRElTVENMRUFORklMRVMgPSBnY3J5cHQuY3BzIHlhdDJtLXN0YW1wLnRtcCB5YXQybS1zdGFtcCAkKG15bWFuX3BhZ2VzKQorQ0xFQU5GSUxFUyA9IHlhdDJtCitCVUlMVF9TT1VSQ0VTID0gbGliZ2NyeXB0LW1vZHVsZXMuZXBzIGZpcHMtZnNtLmVwcyBcCisgICAgICAgICAgICAgICAgbGliZ2NyeXB0LW1vZHVsZXMucG5nIGZpcHMtZnNtLnBuZyBcCisgICAgICAgICAgICAgICAgbGliZ2NyeXB0LW1vZHVsZXMucGRmIGZpcHMtZnNtLnBkZgorCitpbmZvX1RFWElORk9TID0gZ2NyeXB0LnRleGkKK2djcnlwdF9URVhJTkZPUyA9IGxncGwudGV4aSBncGwudGV4aSBsaWJnY3J5cHQtbW9kdWxlcy5maWcgZmlwcy1mc20uZmlnCitZQVQyTV9PUFRJT05TID0gLUkgJChzcmNkaXIpIFwKKwktLXJlbGVhc2UgIkxpYmdjcnlwdCBAUEFDS0FHRV9WRVJTSU9OQCIgLS1zb3VyY2UgIkxpYmdjcnlwdCIKKworbXltYW5fc291cmNlcyA9IGdjcnlwdC50ZXhpCitteW1hbl9wYWdlcyA9IGhtYWMyNTYuMQorbWFuX01BTlMgPSAkKG15bWFuX3BhZ2VzKQorYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmR2aSAuZXBzIC5maWcgLmh0bWwgLmluZm8gLmpwZyAucGRmIC5wbmcgLnBzIC50ZXhpCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2MvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgZG9jL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCisudGV4aS5pbmZvOgorCXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAorCWFtX19jd2Q9YHB3ZGAgJiYgJChhbV9fY2QpICQoc3JjZGlyKSAmJiBcCisJcm0gLXJmICQkYmFja3VwZGlyICYmIG1rZGlyICQkYmFja3VwZGlyICYmIFwKKwlpZiAoJChNQUtFSU5GTykgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgZm9yIGYgaW4gJEAgJEAtWzAtOV0gJEAtWzAtOV1bMC05XSAkKEA6LmluZm89KS5pWzAtOV0gJChAOi5pbmZvPSkuaVswLTldWzAtOV07IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJGY7IHRoZW4gbXYgJCRmICQkYmFja3VwZGlyOyByZXN0b3JlPW12OyBlbHNlIDo7IGZpOyBcCisJICBkb25lOyBcCisJZWxzZSA6OyBmaSAmJiBcCisJY2QgIiQkYW1fX2N3ZCI7IFwKKwlpZiAkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgJChzcmNkaXIpIFwKKwkgLW8gJEAgJDw7IFwKKwl0aGVuIFwKKwkgIHJjPTA7IFwKKwkgICQoYW1fX2NkKSAkKHNyY2Rpcik7IFwKKwllbHNlIFwKKwkgIHJjPSQkPzsgXAorCSAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiBcCisJICAkJHJlc3RvcmUgJCRiYWNrdXBkaXIvKiBgZWNobyAiLi8kQCIgfCBzZWQgJ3N8W14vXSokJHx8J2A7IFwKKwlmaTsgXAorCXJtIC1yZiAkJGJhY2t1cGRpcjsgZXhpdCAkJHJjCisKKy50ZXhpLmR2aToKKwlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpciknIFwKKwkkKFRFWEkyRFZJKSAkPAorCisudGV4aS5wZGY6CisJVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgJChzcmNkaXIpJyBcCisJJChURVhJMlBERikgJDwKKworLnRleGkuaHRtbDoKKwlybSAtcmYgJChAOi5odG1sPS5odHApCisJaWYgJChNQUtFSU5GT0hUTUwpICQoQU1fTUFLRUlORk9IVE1MRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgJChzcmNkaXIpIFwKKwkgLW8gJChAOi5odG1sPS5odHApICQ8OyBcCisJdGhlbiBcCisJICBybSAtcmYgJEA7IFwKKwkgIGlmIHRlc3QgISAtZCAkKEA6Lmh0bWw9Lmh0cCkgJiYgdGVzdCAtZCAkKEA6Lmh0bWw9KTsgdGhlbiBcCisJICAgIG12ICQoQDouaHRtbD0pICRAOyBlbHNlIG12ICQoQDouaHRtbD0uaHRwKSAkQDsgZmk7IFwKKwllbHNlIFwKKwkgIGlmIHRlc3QgISAtZCAkKEA6Lmh0bWw9Lmh0cCkgJiYgdGVzdCAtZCAkKEA6Lmh0bWw9KTsgdGhlbiBcCisJICAgIHJtIC1yZiAkKEA6Lmh0bWw9KTsgZWxzZSBybSAtUmYgJChAOi5odG1sPS5odHApICRAOyBmaTsgXAorCSAgZXhpdCAxOyBcCisJZmkKKyQoc3JjZGlyKS9nY3J5cHQuaW5mbzogZ2NyeXB0LnRleGkgJChzcmNkaXIpL3ZlcnNpb24udGV4aSAkKGdjcnlwdF9URVhJTkZPUykKK2djcnlwdC5kdmk6IGdjcnlwdC50ZXhpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChnY3J5cHRfVEVYSU5GT1MpCitnY3J5cHQucGRmOiBnY3J5cHQudGV4aSAkKHNyY2RpcikvdmVyc2lvbi50ZXhpICQoZ2NyeXB0X1RFWElORk9TKQorZ2NyeXB0Lmh0bWw6IGdjcnlwdC50ZXhpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkgJChnY3J5cHRfVEVYSU5GT1MpCiskKHNyY2RpcikvdmVyc2lvbi50ZXhpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9zdGFtcC12dGkKKyQoc3JjZGlyKS9zdGFtcC12dGk6IGdjcnlwdC50ZXhpICQodG9wX3NyY2RpcikvY29uZmlndXJlCisJQChkaXI9LjsgdGVzdCAtZiAuL2djcnlwdC50ZXhpIHx8IGRpcj0kKHNyY2Rpcik7IFwKKwlzZXQgYCQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21kYXRlLXNoICQkZGlyL2djcnlwdC50ZXhpYDsgXAorCWVjaG8gIkBzZXQgVVBEQVRFRCAkJDEgJCQyICQkMyI7IFwKKwllY2hvICJAc2V0IFVQREFURUQtTU9OVEggJCQyICQkMyI7IFwKKwllY2hvICJAc2V0IEVESVRJT04gJChWRVJTSU9OKSI7IFwKKwllY2hvICJAc2V0IFZFUlNJT04gJChWRVJTSU9OKSIpID4gdnRpLnRtcAorCUBjbXAgLXMgdnRpLnRtcCAkKHNyY2RpcikvdmVyc2lvbi50ZXhpIFwKKwkgIHx8IChlY2hvICJVcGRhdGluZyAkKHNyY2RpcikvdmVyc2lvbi50ZXhpIjsgXAorCSAgICAgIGNwIHZ0aS50bXAgJChzcmNkaXIpL3ZlcnNpb24udGV4aSkKKwktQHJtIC1mIHZ0aS50bXAKKwlAY3AgJChzcmNkaXIpL3ZlcnNpb24udGV4aSAkQAorCittb3N0bHljbGVhbi12dGk6CisJLXJtIC1mIHZ0aS50bXAKKworbWFpbnRhaW5lci1jbGVhbi12dGk6CitATUFJTlRBSU5FUl9NT0RFX1RSVUVACS1ybSAtZiAkKHNyY2Rpcikvc3RhbXAtdnRpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkKKy5kdmkucHM6CisJVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoRFZJUFMpIC1vICRAICQ8CisKK3VuaW5zdGFsbC1kdmktYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChkdmlkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoZHZpZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtaHRtbC1hbToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKEhUTUxTKSc7IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtcmYgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCisJICBybSAtcmYgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1pbmZvLWFtOgorCUAkKFBSRV9VTklOU1RBTEwpCisJQGlmIHRlc3QgLWQgJyQoREVTVERJUikkKGluZm9kaXIpJyAmJiAkKGFtX19jYW5fcnVuX2luc3RhbGxpbmZvKTsgdGhlbiBcCisJICBsaXN0PSckKElORk9fREVQUyknOyBcCisJICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAtLXJlbW92ZSAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7IFwKKwkgICAgaWYgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9IiQoREVTVERJUikkKGluZm9kaXIpIiAtLXJlbW92ZSAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICB0aGVuIDo7IGVsc2UgdGVzdCAhIC1mICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IGV4aXQgMTsgZmk7IFwKKwkgIGRvbmU7IFwKKwllbHNlIDo7IGZpCisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCWZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAorCSAgcmVsZmlsZV9pPWBlY2hvICIkJHJlbGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgKGlmIHRlc3QgLWQgIiQoREVTVERJUikkKGluZm9kaXIpIiAmJiBjZCAiJChERVNURElSKSQoaW5mb2RpcikiOyB0aGVuIFwKKwkgICAgIGVjaG8gIiBjZCAnJChERVNURElSKSQoaW5mb2RpciknICYmIHJtIC1mICQkcmVsZmlsZSAkJHJlbGZpbGUtWzAtOV0gJCRyZWxmaWxlLVswLTldWzAtOV0gJCRyZWxmaWxlX2lbMC05XSAkJHJlbGZpbGVfaVswLTldWzAtOV0iOyBcCisJICAgICBybSAtZiAkJHJlbGZpbGUgJCRyZWxmaWxlLVswLTldICQkcmVsZmlsZS1bMC05XVswLTldICQkcmVsZmlsZV9pWzAtOV0gJCRyZWxmaWxlX2lbMC05XVswLTldOyBcCisJICAgZWxzZSA6OyBmaSk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wZGYtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChQREZTKSc7IHRlc3QgLW4gIiQocGRmZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwZGZkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQocGRmZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtcHMtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocHNkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQocHNkaXIpLyQkZiI7IFwKKwlkb25lCisKK2Rpc3QtaW5mbzogJChJTkZPX0RFUFMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGJhc2UgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkYmFzZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBiYXNlPWBlY2hvICIkJGJhc2UiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkYmFzZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBiYXNlX2k9YGVjaG8gIiQkYmFzZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCisJICBmb3IgZmlsZSBpbiAkJGQvJCRiYXNlICQkZC8kJGJhc2UtWzAtOV0gJCRkLyQkYmFzZS1bMC05XVswLTldICQkZC8kJGJhc2VfaVswLTldICQkZC8kJGJhc2VfaVswLTldWzAtOV07IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgIHJlbGZpbGU9YGV4cHIgIiQkZmlsZSIgOiAiJCRkL1woLipcKSJgOyBcCisJICAgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJHJlbGZpbGUiIHx8IFwKKwkJY3AgLXAgJCRmaWxlICIkKGRpc3RkaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgZWxzZSA6OyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworbW9zdGx5Y2xlYW4tYW1pbmZvOgorCS1ybSAtcmYgZ2NyeXB0LmF1eCBnY3J5cHQuY3AgZ2NyeXB0LmNwcyBnY3J5cHQuZm4gZ2NyeXB0LmZucyBnY3J5cHQua3kgXAorCSAgZ2NyeXB0Lmt5cyBnY3J5cHQubG9nIGdjcnlwdC5wZyBnY3J5cHQudG1wIGdjcnlwdC50b2MgXAorCSAgZ2NyeXB0LnRwIGdjcnlwdC52ciBnY3J5cHQudnJzCisKK2NsZWFuLWFtaW5mbzoKKwktdGVzdCAteiAiZ2NyeXB0LmR2aSBnY3J5cHQucGRmIGdjcnlwdC5wcyBnY3J5cHQuaHRtbCIgXAorCXx8IHJtIC1yZiBnY3J5cHQuZHZpIGdjcnlwdC5wZGYgZ2NyeXB0LnBzIGdjcnlwdC5odG1sCisKK21haW50YWluZXItY2xlYW4tYW1pbmZvOgorCUBsaXN0PSckKElORk9fREVQUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlfaT1gZWNobyAiJCRpIiB8IHNlZCAnc3xcLmluZm8kJHx8O3N8JCR8Lml8J2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJGkgJCRpLVswLTldICQkaS1bMC05XVswLTldICQkaV9pWzAtOV0gJCRpX2lbMC05XVswLTldIjsgXAorCSAgcm0gLWYgJCRpICQkaS1bMC05XSAkJGktWzAtOV1bMC05XSAkJGlfaVswLTldICQkaV9pWzAtOV1bMC05XTsgXAorCWRvbmUKK2luc3RhbGwtbWFuMTogJChtYW5fTUFOUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdDE9Jyc7IFwKKwlsaXN0Mj0nJChtYW5fTUFOUyknOyBcCisJdGVzdCAtbiAiJChtYW4xZGlyKSIgXAorCSAgJiYgdGVzdCAtbiAiYGVjaG8gJCRsaXN0MSQkbGlzdDJgIiBcCisJICB8fCBleGl0IDA7IFwKKwllY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobWFuMWRpciknIjsgXAorCSQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjFkaXIpIiB8fCBleGl0IDE7IFwKKwl7IGZvciBpIGluICQkbGlzdDE7IGRvIGVjaG8gIiQkaSI7IGRvbmU7ICBcCisJaWYgdGVzdCAtbiAiJCRsaXN0MiI7IHRoZW4gXAorCSAgZm9yIGkgaW4gJCRsaXN0MjsgZG8gZWNobyAiJCRpIjsgZG9uZSBcCisJICAgIHwgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwlmaTsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteMV1bMC05YS16XSokJCwxLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuMWRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuMWRpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCit1bmluc3RhbGwtbWFuMToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjFkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtYW4xZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAorCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCisJICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAorCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIFxgbWlzc2luZyBoZWxwMm1hbicgcmVwbGFjZW1lbnQgdGV4dDoiID4mMjsgXAorCSAgICBncmVwIC1sICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCB8IHNlZCAncy9eLyAgICAgICAgIC8nID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdG8gZml4IHRoZW0sIGluc3RhbGwgaGVscDJtYW4sIHJlbW92ZSBhbmQgcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzOyIgPiYyOyBcCisJICAgIGVjaG8gIiAgICAgICB0eXBpY2FsbHkgXGBtYWtlIG1haW50YWluZXItY2xlYW4nIHdpbGwgcmVtb3ZlIHRoZW0iID4mMjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwllbHNlIDo7IGZpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWluZm8KK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChJTkZPX0RFUFMpICQoTUFOUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGluZm9kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tYW1pbmZvIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06ICQoRFZJUykKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOiAkKEhUTUxTKQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06ICQoSU5GT19ERVBTKQorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06ICQoRFZJUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChkdmlkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGR2aWRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZHZpZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZHZpZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbTogJChIVE1MUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChIVE1MUyknOyBsaXN0Mj07IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaHRtbGRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiIHx8IHRlc3QgLWQgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGQyPSQkZCQkcDsgXAorCSAgaWYgdGVzdCAtZCAiJCRkMiI7IHRoZW4gXAorCSAgICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIiB8fCBleGl0IDE7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkMicvKiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQyIi8qICIkKERFU1RESVIpJChodG1sZGlyKS8kJGYiIHx8IGV4aXQgJCQ/OyBcCisJICBlbHNlIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRkMiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgZWNobyAiJCRsaXN0MiIgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGh0bWxkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmU7IH0KK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKElORk9fREVQUyknOyB0ZXN0IC1uICIkKGluZm9kaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGluZm9kaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluZm9kaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZmlsZV9pPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgZm9yIGlmaWxlIGluICQkZC8kJGZpbGUgJCRkLyQkZmlsZS1bMC05XSAkJGQvJCRmaWxlLVswLTldWzAtOV0gXAorCSAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRpZmlsZTsgdGhlbiBcCisJICAgICAgZWNobyAiJCRpZmlsZSI7IFwKKwkgICAgZWxzZSA6IDsgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGluZm9kaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmZvZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKKwlAJChQT1NUX0lOU1RBTEwpCisJQGlmICQoYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8pOyB0aGVuIFwKKwkgIGxpc3Q9JyQoSU5GT19ERVBTKSc7IHRlc3QgLW4gIiQoaW5mb2RpcikiIHx8IGxpc3Q9OyBcCisJICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7XAorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IDo7XAorCSAgZG9uZTsgXAorCWVsc2UgOiA7IGZpCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbTogJChQREZTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBkZmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGRmZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwZGZkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwZGZkaXIpIiB8fCBleGl0ICQkPzsgZG9uZQoraW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOiAkKFBTUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocHNkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBzZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwc2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBzZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOiAkKFBERlMpCisKK3BzOiBwcy1hbQorCitwcy1hbTogJChQU1MpCisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWR2aS1hbSB1bmluc3RhbGwtaHRtbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCisJdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wcy1hbQorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMQorCisuTUFLRTogYWxsIGNoZWNrIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1hbWluZm8gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBkaXN0LWluZm8gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW4xIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWFtaW5mbyBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1kdmktYW0gdW5pbnN0YWxsLWh0bWwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorCXVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjEgdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcHMtYW0KKworCit5YXQybTogeWF0Mm0uYworCSQoQ0NfRk9SX0JVSUxEKSAtbyAkQCAkKHNyY2RpcikveWF0Mm0uYworCisuZmlnLnBuZzoKKwlmaWcyZGV2IC1MIHBuZyBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8ICRACisKKy5maWcuanBnOgorCWZpZzJkZXYgLUwganBnIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwgJEAKKworLmZpZy5lcHM6CisJZmlnMmRldiAtTCBlcHMgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPCAkQAorCisuZmlnLnBkZjoKKwlmaWcyZGV2IC1MIHBkZiBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8ICRACisKK3lhdDJtLXN0YW1wOiAkKG15bWFuX3NvdXJjZXMpCisJQHJtIC1mIHlhdDJtLXN0YW1wLnRtcAorCUB0b3VjaCB5YXQybS1zdGFtcC50bXAKKwlmb3IgZmlsZSBpbiAkKG15bWFuX3NvdXJjZXMpIDsgZG8gXAorICAgICAgICAgICAgICAuL3lhdDJtICQoWUFUMk1fT1BUSU9OUykgLS1zdG9yZSBcCisJICAgICAgICAgIGB0ZXN0IC1mICckJGZpbGUnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQkZmlsZSA7IGRvbmUKKwlAbXYgLWYgeWF0Mm0tc3RhbXAudG1wICRACisKK3lhdDJtLXN0YW1wOiB5YXQybQorCiskKG15bWFuX3BhZ2VzKSA6IHlhdDJtLXN0YW1wCisJQGlmIHRlc3QgLWYgJEA7IHRoZW4gOjsgZWxzZSBcCisgICAgICAgICAgICB0cmFwICdybSAtcmYgeWF0Mm0tc3RhbXAgeWF0Mm0tbG9jaycgMSAyIDEzIDE1OyBcCisgICAgICAgICAgICAgICBpZiBta2RpciB5YXQybS1sb2NrIDI+L2Rldi9udWxsOyB0aGVuIFwKKyAgICAgICAgICAgICAgICAgcm0gLWYgeWF0Mm0tc3RhbXA7IFwKKyAgICAgICAgICAgICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgeWF0Mm0tc3RhbXA7IFwKKyAgICAgICAgICAgICAgICAgcm1kaXIgeWF0Mm0tbG9jazsgXAorICAgICAgICAgICAgICAgZWxzZSBcCisgICAgICAgICAgICAgICAgIHdoaWxlIHRlc3QgLWQgeWF0Mm0tbG9jazsgZG8gc2xlZXAgMTsgZG9uZTsgXAorICAgICAgICAgICAgICAgICB0ZXN0IC1mIHlhdDJtLXN0YW1wOyBleGl0ICQkPzsgXAorICAgICAgICAgICAgICAgZmk7IFwKKyAgICAgICAgICAgICBmaQorCisjIE1ha2Ugc3VyZSB0aGF0IGdjcnlwdC50ZXhpIGlzIHRvdWNoZWQgaWYgYW55IG90aGVyIHNvdXJjZSBmaWxlIGhhcworIyBiZWVuIG1vZGlmaWVkLiAgVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSB2ZXJzaW9uLnRleGkgbWFnaWMKKyMgdXBkYXRlcyB0aGUgcmVsZWFzZSBkYXRlLgorZ251cGcudGV4aSA6ICQoZ2NyeXB0X1RFWElORk9TKQorCXRvdWNoICQoc3JjZGlyKS9nY3J5cHQudGV4aQorCitvbmxpbmU6IGdjcnlwdC5odG1sIGdjcnlwdC5wZGYgZ2NyeXB0LmluZm8KKwlzZXQgLWU7IFwKKwllY2hvICJVcGxvYWRpbmcgY3VycmVudCBtYW51YWxzIHRvIHd3dy5nbnVwZy5vcmcgLi4uIjsgXAorCWNwIGxpYmdjcnlwdC1tb2R1bGVzLnBuZyBnY3J5cHQuaHRtbC87IFwKKwljcCBmaXBzLWZzbS5wbmcgZ2NyeXB0Lmh0bWwvOyBcCisgICAgICAgIHVzZXI9d2VybmVyIDsgZGFzaGRldmVsPSIiIDsgXAorICAgICAgICBpZiBlY2hvICJAUEFDS0FHRV9WRVJTSU9OQCIgfCBncmVwIC0tICItc3ZuIiA+L2Rldi9udWxsOyB0aGVuIFwKKwkgIGRhc2hkZXZlbD0iLWRldmVsIiA7IFwKKwkgIGNwIGdjcnlwdC5wZGYgZ2NyeXB0Lmh0bWwvOyBcCisJICBjcCBnY3J5cHQuaW5mbyBnY3J5cHQuaHRtbC87IFwKKwllbHNlIFwKKyAgICAgICAgICByc3luYyAtdiBnY3J5cHQucGRmIGdjcnlwdC5pbmZvIFwKKyAgICAgICAgICAgICAgICQke3VzZXJ9QHRyaXRoZW1pdXMuZ251cGcub3JnOndlYnNwYWNlL21hbnVhbHMvIDsgXAorICAgICAgICBmaSA7IFwKKwljZCBnY3J5cHQuaHRtbCA7IFwKKyAgICAgICAgcnN5bmMgLXZyIC0tZXhjbHVkZT0nLnN2bicgLiAgXAorCSAgJCR7dXNlcn1AdHJpdGhlbWl1cy5nbnVwZy5vcmc6d2Vic3BhY2UvbWFudWFscy9nY3J5cHQkJHtkYXNoZGV2ZWx9LworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmFwaWNoYW5nZXMgYi9kb2MvUkVBRE1FLmFwaWNoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiNjRkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuYXBpY2hhbmdlcwpAQCAtMCwwICsxLDExNSBAQAorUkVBRE1FLmFwaWNoYW5nZXMgMjAwMy0wNy0yOAorCisgIE5PVEU6IFRIRVNFIEFSRSBBUEkgQ0hBTkdFUyBET05FIEJFRk9SRSBUSEUgRklSU1QgU1RBQkxFIFJFTEVBU0UgU08KKyAgVEhFWSBBUkUgTk9UIFJFTEVWQU5UIEFOWU1PUkUgW3N0YWJsZSBpcyAxLjIuNCByaWdodCBub3ddCisKK1dlIGRlY2lkZWQgdG8gY2hhbmdlIGEgY291cGxlIG9mIGFubm95aW5nIHRoaW5ncyBpbiBMaWJnY3J5cHQgYW5kIHRvCitjbGVhbnVwIHRoZSBBUEkuICBUaGUgbmV3IEFQSSBiZXR0ZXIgZml0cyBpbnRvIGEgbXVsdGktdGhyZWFkZWQKK2Vudmlyb25tZW50IGFuZCBpcyBtb3JlIGNvbnNpc3RlbnQuICBPbmUgaW1wb3J0IGNoYW5nZSBpcyB0aGF0IGFsbAorZnVuY3Rpb25zIHJldHVybiBlcnJvciBjb2RlcyBmcm9tIGEgc2V0IG9mIGVycm9yIGNvZGVzIHNoYXJlZCBiZXR3ZWVuCitHbnVQRywgR1BHTUUgYW5kIExpYmdjcnlwdC4KKworVGhpcyBmaWxlIGNvbnRhaW5zIHNvbWUgaGludHMgb24gaG93IHRvIHBvcnQgeW91ciBhcHBsaWNhdGlvbiBmcm9tCitsaWJnY3J5cHQgPD0gMS4xLjEyIHRvIHRoZSBjdXJyZW50IEFQSSBhcyBvZiAxLjEuNDIuICBXZSBob3BlIHRoYXQKK3RoZXJlIHdvbid0IGJlIGFub3RoZXIgbmVlZCBmb3Igc3VjaCBhIG1ham9yIGNoYW5nZS4KKworCisqIFR5cGVzCisKKyAgQWxsIHR5cGVzIGRlZmluaXRpb25zIGNoYW5nZWQgdG8gYSBmb29fdCBzY2hlbWU7IGZvciBzb21lIHRpbWUgd2UKKyAgd2lsbCBzdXBwb3J0IHRoZSBvbGQgbmFtZXMgYnV0IHlvdSBiZXR0ZXIgc3RhcnQgdG8gcmVuYW1lIHRoZW06CisKKyAgcy9HQ1JZX01QSS9nY3J5X21waV90LworICBzL0djcnlNUEkvZ2NyeV9tcGlfdC8KKyAgcy9HQ1JZX1NFWFAvZ2NyeV9zZXhwX3QvCisgIHMvR2NyeVNleHAvZ2NyeV9zZXhwX3QvCisgIHMvR0NSWV9DSVBIRVJfSEQvZ2NyeV9jaXBoZXJfaGRfdC8KKyAgcy9HY3J5Q2lwaGVySGQvZ2NyeV9jaXBoZXJfaGRfdC8KKyAgcy9HQ1JZX01EX0hEL2djcnlfbWRfaGRfdC8KKyAgcy9HY3J5TURIZC9nY3J5X21kX2hkX3QvCisKKyogSW5pdGlhbGl6YXRpb24KKworICBGb3IgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBjYWxsCisgIGdjcnlfY2hlY2tfdmVyc2lvbigpIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciBmdW5jdGlvbiBleGNlcHQgZm9yCisgIHRoZXNlIGdjcnlfY29udHJvbCBvcGVyYXRpb25zOgorICAgICBHQ1JZQ1RMX1NVU1BFTkRfU0VDTUVNX1dBUk4KKyAgICAgR0NSWUNUTF9ESVNBQkxFX0lOVEVSTkFMX0xPQ0tJTkcKKyAgICAgR0NSWUNUTF9BTllfSU5JVElBTElaQVRJT05fUAorICAgICBHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVEX1AKKworCisqIEhhbmRsZXMKKworICBnY3J5X2NpcGhlcl9vcGVuIGFuZCBnY3J5X21kX29wZW4gZG8gbm93IHJldHVybiBhbiBlcnJvciBjb2RlCisgIGluc3RlYWQgb2YgYSBOVUxMIGhhbmRsZTsgdGhlIGhhbmRsZSBpcyBub3cgcmV0dXJuZWQgYnkKKyAgYXNpZ25pbmcgaXQgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LiAgRXhhbXBsZSBvbiBob3cgdG8gY2hhbmdlIHlvdXIKKyAgY29kZToKKworICBPbGQ6CisKKyAgICBoZCA9IGdjcnlfbWRfb3BlbiAoYWxnbywgZmxhZ3MpOworICAgIGlmICghaGQpCisgICAgICB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtZF9vcGVuIGZhaWxlZDogJXNcbiIsIGdjcnlfZXJybm8gKC0xKSk7CisgICAgICAgICAuLi4uCisKKyAgTmV3OgorCisgICAgcmMgPSBnY3J5X21kX29wZW4gKCZoZCwgYWxnbywgZmxhZ3MpOworICAgIGlmIChyYykKKyAgICAgIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1kX29wZW4gZmFpbGVkOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAocmMpKTsKKyAgICAgICAgIC4uLi4KKworICBJZiB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBlcnJvciBjb2RlLCB5b3UgY2FuIGRvIGl0IGluIGEKKyAgc2ltcGxpZmllZCB3YXk6CisgCisgICAgZ2NyeV9tZF9vcGVuICgmaGQsIGFsZ28sIGZsYWdzKTsKKyAgICBpZiAoIWhkKQorICAgICAgICBhYm9ydCAoKTsKKworICBpLmUuIHRoZSBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgSEQgcG9pbnRzIHRvIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAgVGhlIHJlcXVpcmVkIGNoYW5nZSBmb3IgZ2NyeV9jaXBoZXJfb3BlbiBpcyBzaW1pbGFyLgorCisqIE1lc3NhZ2UgRGlnZXN0cworCisgIFRoZSBvcmRlciBvZiB0aGUgYXJndW1lbnRzIHRvIGdjcnlfbWRfY29weSBoYXMgYmVlbiBjaGFuZ2VkIGluIG9yZGVyCisgIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIG90aGVyIGZ1bmN0aW9ucyBvZiB0aGlzIHR5cGUuICBUaGlzIG1lYW5zCisgIHRoYXQgdGhlIG5ldyBtZXNzYWdlIGRpZ2VzdCBoYW5kbGUgd2lsbCBiZSBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UKKyAgaGFuZGxlIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IGFuZCBzdG9yZWQgYXQgdGhlIGFkZHJlc3MKKyAgcG9pbnRlZCB0byBieSB0aGUgZmlyc3QgYXJndW1lbnQuCisKKyogRXJyb3IgY29kZXMKKworICBnY3J5X2Vycm5vICgpIGhhcyBiZWVuIHJlbW92ZWQgYmVjYXVzZSBpdCBpcyBoYXJkIHRvIHVzZSBpbgorICBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gIFlvdSBuZWVkIHRvIHNhdmUgdGhlIGVycm9yIGNvZGUKKyAgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9ucyBhbmQgdXNlIGl0IGVpdGhlciBudW1lcmljYWwgb3IgcGFzc2luZyBpdAorICB0byBnY3J5X3N0cmVycm9yIChzaW5jZSBnY3J5X3N0cmVycm9yIGlzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IKKyAgZ3BnX3N0cmVycm9yLCB0aGUgbGF0dGVyIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQpLgorCisgIEluc3RlYWQgb2YgdXNpbmcgdGhlIGVycm9yIGNvZGVzIEdDUllFUlJfKiwgeW91IGhhdmUgdG8gdXNlIHRoZQorICBHUEdfRVJSXyogbmFtZXMuIAorCisqIFMtZXhwcmVzc2lvbnMKKworICBnY3J5X3NleHBfY2Fub25fbGVuIHVzZWQgdG8gcmV0dXJuIGEgYGhpc3RvcmljYWwnIGVycm9yIGNvZGUgaW4KKyAgYGVycmNvZGUnLCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBhbnltb3JlOyB0aGUgdmFsdWUgcmV0dXJuZWQgaW4KKyAgYGVycmNvZGUnIGlzIG5vdyBhIHN0YW5kYXJkIExpYmdjcnlwdCAoaS5lLiBncGctZXJyb3IpIGVycm9yIGNvZGUuCisKKyogTVBJCisKKyAgZ2NyeV9tcGlfc2NhbiBhbmQgZ2NyeV9tcGlfcHJpbnQgbmVlZCB0aGUgc2l6ZSBvZiBhIHByb3ZpZGVkIGJ1ZmZlcgorICBhcyBpbnB1dCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgc2Nhbm5lZC9wcmludGVkIHRvCisgIHRoZSB1c2VyLiAgVGhlIG9sZCBBUEkgdXNlZCBhIHNpbmdsZSBzaXplX3QgUG9pbnRlciBmb3IgYm90aCB0YXNrcywKKyAgdGhlIG5ldyBBUEkgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIHRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dCB2YWx1ZXMuCisKKyogUHVibGljIEtleSBjcnlwdG9ncmFwaHkKKworICBnY3J5X3BrX2RlY3J5cHQgdXNlZCB0byByZXR1cm4gYSBgc2ltcGxlIFMtZXhwcmVzc2lvbiBwYXJ0JyB0aGF0CisgIGNvbnRhaW5zIGEgc2luZ2xlIE1QSSB2YWx1ZS4gIEluIGNhc2UgdGhlIGBkYXRhJyBTLWV4cHJlc3Npb24KKyAgY29udGFpbnMgYSBgZmxhZ3MnIGVsZW1lbnQsIHRoZSByZXN1bHQgUy1leHByZXNzaW9uIGlzIGZpbGxlZCB3aXRoIGEKKyAgY29tcGxldGUgUy1leHByZXNzaW9uIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgICAgKHZhbHVlIFBMQUlOVEVYVCkKKwpkaWZmIC0tZ2l0IGEvZG9jL2ZpcHMtZnNtLmVwcyBiL2RvYy9maXBzLWZzbS5lcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maXBzLWZzbS5lcHMKQEAgLTAsMCArMSw1OTEgQEAKKyUhUFMtQWRvYmUtMy4wIEVQU0YtMy4wCislJVRpdGxlOiAvaG9tZS93ay9zL2xpYmdjcnlwdC9kb2MvZmlwcy1mc20uZmlnCislJUNyZWF0b3I6IGZpZzJkZXYgVmVyc2lvbiAzLjIgUGF0Y2hsZXZlbCA1ZAorJSVDcmVhdGlvbkRhdGU6IFdlZCBKYW4gMjkgMTE6NDI6MjAgMjAxNAorJSVCb3VuZGluZ0JveDogMCAwIDQ5NyA1NzkKKyVNYWduaWZpY2F0aW9uOiAxLjAwMDAKKyUlRW5kQ29tbWVudHMKKyUlQmVnaW5Qcm9sb2cKKy8kRjJwc0RpY3QgMjAwIGRpY3QgZGVmCiskRjJwc0RpY3QgYmVnaW4KKyRGMnBzRGljdCAvbXRyeCBtYXRyaXggcHV0CisvY29sLTEgezAgc2V0Z3JheX0gYmluZCBkZWYKKy9jb2wwIHswLjAwMCAwLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDEgezAuMDAwIDAuMDAwIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMiB7MC4wMDAgMS4wMDAgMC4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2wzIHswLjAwMCAxLjAwMCAxLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDQgezEuMDAwIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNSB7MS4wMDAgMC4wMDAgMS4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2w2IHsxLjAwMCAxLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDcgezEuMDAwIDEuMDAwIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sOCB7MC4wMDAgMC4wMDAgMC41NjAgc3JnYn0gYmluZCBkZWYKKy9jb2w5IHswLjAwMCAwLjAwMCAwLjY5MCBzcmdifSBiaW5kIGRlZgorL2NvbDEwIHswLjAwMCAwLjAwMCAwLjgyMCBzcmdifSBiaW5kIGRlZgorL2NvbDExIHswLjUzMCAwLjgxMCAxLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDEyIHswLjAwMCAwLjU2MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDEzIHswLjAwMCAwLjY5MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDE0IHswLjAwMCAwLjgyMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDE1IHswLjAwMCAwLjU2MCAwLjU2MCBzcmdifSBiaW5kIGRlZgorL2NvbDE2IHswLjAwMCAwLjY5MCAwLjY5MCBzcmdifSBiaW5kIGRlZgorL2NvbDE3IHswLjAwMCAwLjgyMCAwLjgyMCBzcmdifSBiaW5kIGRlZgorL2NvbDE4IHswLjU2MCAwLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDE5IHswLjY5MCAwLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDIwIHswLjgyMCAwLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDIxIHswLjU2MCAwLjAwMCAwLjU2MCBzcmdifSBiaW5kIGRlZgorL2NvbDIyIHswLjY5MCAwLjAwMCAwLjY5MCBzcmdifSBiaW5kIGRlZgorL2NvbDIzIHswLjgyMCAwLjAwMCAwLjgyMCBzcmdifSBiaW5kIGRlZgorL2NvbDI0IHswLjUwMCAwLjE5MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDI1IHswLjYzMCAwLjI1MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDI2IHswLjc1MCAwLjM4MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDI3IHsxLjAwMCAwLjUwMCAwLjUwMCBzcmdifSBiaW5kIGRlZgorL2NvbDI4IHsxLjAwMCAwLjYzMCAwLjYzMCBzcmdifSBiaW5kIGRlZgorL2NvbDI5IHsxLjAwMCAwLjc1MCAwLjc1MCBzcmdifSBiaW5kIGRlZgorL2NvbDMwIHsxLjAwMCAwLjg4MCAwLjg4MCBzcmdifSBiaW5kIGRlZgorL2NvbDMxIHsxLjAwMCAwLjg0MCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDMyIHswLjYxMiAwLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDMzIHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDM0IHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDM1IHswLjI1OSAwLjI1OSAwLjI1OSBzcmdifSBiaW5kIGRlZgorL2NvbDM2IHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDM3IHswLjI1OSAwLjI1OSAwLjI1OSBzcmdifSBiaW5kIGRlZgorL2NvbDM4IHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDM5IHswLjI1OSAwLjI1OSAwLjI1OSBzcmdifSBiaW5kIGRlZgorL2NvbDQwIHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDQxIHswLjI1OSAwLjI1OSAwLjI1OSBzcmdifSBiaW5kIGRlZgorL2NvbDQyIHswLjU0OSAwLjU0OSAwLjU0OSBzcmdifSBiaW5kIGRlZgorL2NvbDQzIHswLjI1OSAwLjI1OSAwLjI1OSBzcmdifSBiaW5kIGRlZgorCitlbmQKKworL2NwIHtjbG9zZXBhdGh9IGJpbmQgZGVmCisvZWYge2VvZmlsbH0gYmluZCBkZWYKKy9nciB7Z3Jlc3RvcmV9IGJpbmQgZGVmCisvZ3Mge2dzYXZlfSBiaW5kIGRlZgorL3NhIHtzYXZlfSBiaW5kIGRlZgorL3JzIHtyZXN0b3JlfSBiaW5kIGRlZgorL2wge2xpbmV0b30gYmluZCBkZWYKKy9tIHttb3ZldG99IGJpbmQgZGVmCisvcm0ge3Jtb3ZldG99IGJpbmQgZGVmCisvbiB7bmV3cGF0aH0gYmluZCBkZWYKKy9zIHtzdHJva2V9IGJpbmQgZGVmCisvc2gge3Nob3d9IGJpbmQgZGVmCisvc2xjIHtzZXRsaW5lY2FwfSBiaW5kIGRlZgorL3NsaiB7c2V0bGluZWpvaW59IGJpbmQgZGVmCisvc2x3IHtzZXRsaW5ld2lkdGh9IGJpbmQgZGVmCisvc3JnYiB7c2V0cmdiY29sb3J9IGJpbmQgZGVmCisvcm90IHtyb3RhdGV9IGJpbmQgZGVmCisvc2Mge3NjYWxlfSBiaW5kIGRlZgorL3NkIHtzZXRkYXNofSBiaW5kIGRlZgorL2ZmIHtmaW5kZm9udH0gYmluZCBkZWYKKy9zZiB7c2V0Zm9udH0gYmluZCBkZWYKKy9zY2Yge3NjYWxlZm9udH0gYmluZCBkZWYKKy9zdyB7c3RyaW5nd2lkdGh9IGJpbmQgZGVmCisvdHIge3RyYW5zbGF0ZX0gYmluZCBkZWYKKy90bnQge2R1cCBkdXAgY3VycmVudHJnYmNvbG9yCisgIDQgLTIgcm9sbCBkdXAgMSBleGNoIHN1YiAzIC0xIHJvbGwgbXVsIGFkZAorICA0IC0yIHJvbGwgZHVwIDEgZXhjaCBzdWIgMyAtMSByb2xsIG11bCBhZGQKKyAgNCAtMiByb2xsIGR1cCAxIGV4Y2ggc3ViIDMgLTEgcm9sbCBtdWwgYWRkIHNyZ2J9CisgIGJpbmQgZGVmCisvc2hkIHtkdXAgZHVwIGN1cnJlbnRyZ2Jjb2xvciA0IC0yIHJvbGwgbXVsIDQgLTIgcm9sbCBtdWwKKyAgNCAtMiByb2xsIG11bCBzcmdifSBiaW5kIGRlZgorL3JlZW5jZGljdCAxMiBkaWN0IGRlZiAvUmVFbmNvZGUgeyByZWVuY2RpY3QgYmVnaW4KKy9uZXdjb2Rlc2FuZG5hbWVzIGV4Y2ggZGVmIC9uZXdmb250bmFtZSBleGNoIGRlZiAvYmFzZWZvbnRuYW1lIGV4Y2ggZGVmCisvYmFzZWZvbnRkaWN0IGJhc2Vmb250bmFtZSBmaW5kZm9udCBkZWYgL25ld2ZvbnQgYmFzZWZvbnRkaWN0IG1heGxlbmd0aCBkaWN0IGRlZgorYmFzZWZvbnRkaWN0IHsgZXhjaCBkdXAgL0ZJRCBuZSB7IGR1cCAvRW5jb2RpbmcgZXEKK3sgZXhjaCBkdXAgbGVuZ3RoIGFycmF5IGNvcHkgbmV3Zm9udCAzIDEgcm9sbCBwdXQgfQoreyBleGNoIG5ld2ZvbnQgMyAxIHJvbGwgcHV0IH0gaWZlbHNlIH0geyBwb3AgcG9wIH0gaWZlbHNlIH0gZm9yYWxsCituZXdmb250IC9Gb250TmFtZSBuZXdmb250bmFtZSBwdXQgbmV3Y29kZXNhbmRuYW1lcyBhbG9hZCBwb3AKKzEyOCAxIDI1NSB7IG5ld2ZvbnQgL0VuY29kaW5nIGdldCBleGNoIC8ubm90ZGVmIHB1dCB9IGZvcgorbmV3Y29kZXNhbmRuYW1lcyBsZW5ndGggMiBpZGl2IHsgbmV3Zm9udCAvRW5jb2RpbmcgZ2V0IDMgMSByb2xsIHB1dCB9IHJlcGVhdAorbmV3Zm9udG5hbWUgbmV3Zm9udCBkZWZpbmVmb250IHBvcCBlbmQgfSBkZWYKKy9pc292ZWMgWworOCMwNTUgL21pbnVzIDgjMjAwIC9ncmF2ZSA4IzIwMSAvYWN1dGUgOCMyMDIgL2NpcmN1bWZsZXggOCMyMDMgL3RpbGRlCis4IzIwNCAvbWFjcm9uIDgjMjA1IC9icmV2ZSA4IzIwNiAvZG90YWNjZW50IDgjMjA3IC9kaWVyZXNpcworOCMyMTAgL3JpbmcgOCMyMTEgL2NlZGlsbGEgOCMyMTIgL2h1bmdhcnVtbGF1dCA4IzIxMyAvb2dvbmVrIDgjMjE0IC9jYXJvbgorOCMyMjAgL2RvdGxlc3NpIDgjMjMwIC9vZSA4IzIzMSAvT0UKKzgjMjQwIC9zcGFjZSA4IzI0MSAvZXhjbGFtZG93biA4IzI0MiAvY2VudCA4IzI0MyAvc3RlcmxpbmcKKzgjMjQ0IC9jdXJyZW5jeSA4IzI0NSAveWVuIDgjMjQ2IC9icm9rZW5iYXIgOCMyNDcgL3NlY3Rpb24gOCMyNTAgL2RpZXJlc2lzCis4IzI1MSAvY29weXJpZ2h0IDgjMjUyIC9vcmRmZW1pbmluZSA4IzI1MyAvZ3VpbGxlbW90bGVmdCA4IzI1NCAvbG9naWNhbG5vdAorOCMyNTUgL2h5cGhlbiA4IzI1NiAvcmVnaXN0ZXJlZCA4IzI1NyAvbWFjcm9uIDgjMjYwIC9kZWdyZWUgOCMyNjEgL3BsdXNtaW51cworOCMyNjIgL3R3b3N1cGVyaW9yIDgjMjYzIC90aHJlZXN1cGVyaW9yIDgjMjY0IC9hY3V0ZSA4IzI2NSAvbXUgOCMyNjYgL3BhcmFncmFwaAorOCMyNjcgL3BlcmlvZGNlbnRlcmVkIDgjMjcwIC9jZWRpbGxhIDgjMjcxIC9vbmVzdXBlcmlvciA4IzI3MiAvb3JkbWFzY3VsaW5lCis4IzI3MyAvZ3VpbGxlbW90cmlnaHQgOCMyNzQgL29uZXF1YXJ0ZXIgOCMyNzUgL29uZWhhbGYKKzgjMjc2IC90aHJlZXF1YXJ0ZXJzIDgjMjc3IC9xdWVzdGlvbmRvd24gOCMzMDAgL0FncmF2ZSA4IzMwMSAvQWFjdXRlCis4IzMwMiAvQWNpcmN1bWZsZXggOCMzMDMgL0F0aWxkZSA4IzMwNCAvQWRpZXJlc2lzIDgjMzA1IC9BcmluZworOCMzMDYgL0FFIDgjMzA3IC9DY2VkaWxsYSA4IzMxMCAvRWdyYXZlIDgjMzExIC9FYWN1dGUKKzgjMzEyIC9FY2lyY3VtZmxleCA4IzMxMyAvRWRpZXJlc2lzIDgjMzE0IC9JZ3JhdmUgOCMzMTUgL0lhY3V0ZQorOCMzMTYgL0ljaXJjdW1mbGV4IDgjMzE3IC9JZGllcmVzaXMgOCMzMjAgL0V0aCA4IzMyMSAvTnRpbGRlIDgjMzIyIC9PZ3JhdmUKKzgjMzIzIC9PYWN1dGUgOCMzMjQgL09jaXJjdW1mbGV4IDgjMzI1IC9PdGlsZGUgOCMzMjYgL09kaWVyZXNpcyA4IzMyNyAvbXVsdGlwbHkKKzgjMzMwIC9Pc2xhc2ggOCMzMzEgL1VncmF2ZSA4IzMzMiAvVWFjdXRlIDgjMzMzIC9VY2lyY3VtZmxleAorOCMzMzQgL1VkaWVyZXNpcyA4IzMzNSAvWWFjdXRlIDgjMzM2IC9UaG9ybiA4IzMzNyAvZ2VybWFuZGJscyA4IzM0MCAvYWdyYXZlCis4IzM0MSAvYWFjdXRlIDgjMzQyIC9hY2lyY3VtZmxleCA4IzM0MyAvYXRpbGRlIDgjMzQ0IC9hZGllcmVzaXMgOCMzNDUgL2FyaW5nCis4IzM0NiAvYWUgOCMzNDcgL2NjZWRpbGxhIDgjMzUwIC9lZ3JhdmUgOCMzNTEgL2VhY3V0ZQorOCMzNTIgL2VjaXJjdW1mbGV4IDgjMzUzIC9lZGllcmVzaXMgOCMzNTQgL2lncmF2ZSA4IzM1NSAvaWFjdXRlCis4IzM1NiAvaWNpcmN1bWZsZXggOCMzNTcgL2lkaWVyZXNpcyA4IzM2MCAvZXRoIDgjMzYxIC9udGlsZGUgOCMzNjIgL29ncmF2ZQorOCMzNjMgL29hY3V0ZSA4IzM2NCAvb2NpcmN1bWZsZXggOCMzNjUgL290aWxkZSA4IzM2NiAvb2RpZXJlc2lzIDgjMzY3IC9kaXZpZGUKKzgjMzcwIC9vc2xhc2ggOCMzNzEgL3VncmF2ZSA4IzM3MiAvdWFjdXRlIDgjMzczIC91Y2lyY3VtZmxleAorOCMzNzQgL3VkaWVyZXNpcyA4IzM3NSAveWFjdXRlIDgjMzc2IC90aG9ybiA4IzM3NyAveWRpZXJlc2lzXSBkZWYKKy9Db3VyaWVyLU9ibGlxdWUgL0NvdXJpZXItT2JsaXF1ZS1pc28gaXNvdmVjIFJlRW5jb2RlCisvVGltZXMtUm9tYW4gL1RpbWVzLVJvbWFuLWlzbyBpc292ZWMgUmVFbmNvZGUKKyAvRHJhd0VsbGlwc2UgeworCS9lbmRhbmdsZSBleGNoIGRlZgorCS9zdGFydGFuZ2xlIGV4Y2ggZGVmCisJL3lyYWQgZXhjaCBkZWYKKwkveHJhZCBleGNoIGRlZgorCS95IGV4Y2ggZGVmCisJL3ggZXhjaCBkZWYKKwkvc2F2ZW1hdHJpeCBtdHJ4IGN1cnJlbnRtYXRyaXggZGVmCisJeCB5IHRyIHhyYWQgeXJhZCBzYyAwIDAgMSBzdGFydGFuZ2xlIGVuZGFuZ2xlIGFyYworCWNsb3NlcGF0aAorCXNhdmVtYXRyaXggc2V0bWF0cml4CisJfSBkZWYKKworLyRGMnBzQmVnaW4geyRGMnBzRGljdCBiZWdpbiAvJEYycHNFbnRlcmVkU3RhdGUgc2F2ZSBkZWZ9IGRlZgorLyRGMnBzRW5kIHskRjJwc0VudGVyZWRTdGF0ZSByZXN0b3JlIGVuZH0gZGVmCisKKy9wYWdlaGVhZGVyIHsKK3NhdmUKK25ld3BhdGggMCA1NzkgbW92ZXRvIDAgMCBsaW5ldG8gNDk3IDAgbGluZXRvIDQ5NyA1NzkgbGluZXRvIGNsb3NlcGF0aCBjbGlwIG5ld3BhdGgKKy01Ni45IDU5Ni4wIHRyYW5zbGF0ZQorMSAtMSBzY2FsZQorJEYycHNCZWdpbgorMTAgc2V0bWl0ZXJsaW1pdAorMCBzbGogMCBzbGMKKyAwLjA2Mjk5IDAuMDYyOTkgc2MKK30gYmluZCBkZWYKKy9wYWdlZm9vdGVyIHsKKyRGMnBzRW5kCityZXN0b3JlCit9IGJpbmQgZGVmCislJUVuZFByb2xvZworcGFnZWhlYWRlcgorJQorJSBGaWcgb2JqZWN0cyBmb2xsb3cKKyUKKyUgCislIGhlcmUgc3RhcnRzIGZpZ3VyZSB3aXRoIGRlcHRoIDUwCislIEVsbGlwc2UKKzcuNTAwIHNsdworbiAzMjM4IDE3MzUgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDI0MDggMzc0OSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gMTcwOCA1ODA5IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiA1ODQ4IDE2ODUgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDYxMjggNzg5OSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gNzU2OCA0ODg5IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiA2MDA4IDM4NzkgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDU0MTggMjY1OSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gNDI2OCAzNzE1IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiAzMjA4IDU4NjUgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDQxNzggNjc2NSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gNDU1OCA3MzU1IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiA1MjA4IDczNjUgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDM3MDggNzcxNSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gMzAzOCA3OTI1IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiA2NTY4IDU4OTUgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBQb2x5bGluZQorMCBzbGoKKzAgc2xjCituIDM5MDAgODM3MCBtIDM2MDAgODM3MCAzNjAwIDkxNTAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDM2MDAgOTQ1MCA1NjcwIDk0NTAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDU5NzAgOTQ1MCA1OTcwIDg2NzAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDU5NzAgODM3MCAzOTAwIDgzNzAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgY3AgZ3MgY29sMCBzIGdyIAorJSBQb2x5bGluZQorbiAxMjE1IDQzMzUgbSA5MTUgNDMzNSA5MTUgNTE0NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgOTE1IDU0NDUgMjY0MCA1NDQ1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICAyOTQwIDU0NDUgMjk0MCA0NjM1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICAyOTQwIDQzMzUgMTIxNSA0MzM1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gMTIzMCA2MzQ1IG0gOTMwIDYzNDUgOTMwIDcxNTUgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDkzMCA3NDU1IDI2NTUgNzQ1NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjk1NSA3NDU1IDI5NTUgNjY0NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjk1NSA2MzQ1IDEyMzAgNjM0NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIFBvbHlsaW5lCituIDcwNTAgNjM2MCBtIDY3NTAgNjM2MCA2NzUwIDcxNzAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDY3NTAgNzQ3MCA4NDc1IDc0NzAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDg3NzUgNzQ3MCA4Nzc1IDY2NjAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDg3NzUgNjM2MCA3MDUwIDYzNjAgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgY3AgZ3MgY29sMCBzIGdyIAorJSBQb2x5bGluZQorbiA0MTI1IDQzMzUgbSAzODI1IDQzMzUgMzgyNSA1MTQ1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICAzODI1IDU0NDUgNTU1MCA1NDQ1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1ODUwIDU0NDUgNTg1MCA0NjM1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1ODUwIDQzMzUgNDEyNSA0MzM1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gNzA1MCAyMzEwIG0gNjc1MCAyMzEwIDY3NTAgMzEyMCAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNjc1MCAzNDIwIDg0NzUgMzQyMCAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgODc3NSAzNDIwIDg3NzUgMjYxMCAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgODc3NSAyMzEwIDcwNTAgMjMxMCAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIFBvbHlsaW5lCituIDI3NzUgMjI5NSBtIDI0NzUgMjI5NSAyNDc1IDMxMDUgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDI0NzUgMzQwNSA0MjAwIDM0MDUgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDQ1MDAgMzQwNSA0NTAwIDI1OTUgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDQ1MDAgMjI5NSAyNzc1IDIyOTUgMzAwIGFyY3RvIDQge3BvcH0gcmVwZWF0CisgY3AgZ3MgY29sMCBzIGdyIAorJSBQb2x5bGluZQorbiAyNzc1IDI4NSBtIDI0NzUgMjg1IDI0NzUgMTA5NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjQ3NSAxMzk1IDQyMDAgMTM5NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNDUwMCAxMzk1IDQ1MDAgNTg1IDMwMCBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA0NTAwIDI4NSAyNzc1IDI4NSAzMDAgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIEVsbGlwc2UKK24gNDE5MiA2MzM4IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgRWxsaXBzZQorbiAzMjAyIDQ1MDcgMTQyIDE0MiAwIDM2MCBEcmF3RWxsaXBzZSBncyBjb2wwIHMgZ3IKKworJSBFbGxpcHNlCituIDMxODEgNTE2MSAxNDIgMTQyIDAgMzYwIERyYXdFbGxpcHNlIGdzIGNvbDAgcyBncgorCislIEVsbGlwc2UKK24gNzcwOSA3OTk2IDE0MiAxNDIgMCAzNjAgRHJhd0VsbGlwc2UgZ3MgY29sMCBzIGdyCisKKyUgQXJjCisxNS4wMDAgc2x3CisxIHNsYworZ3MgIGNsaXBwYXRoCiszMTgyIDY1OTggbSAyODk5IDY2NDggbCAyOTIwIDY3NjYgbCAzMjAzIDY3MTYgbCAzMjAzIDY3MTYgbCAyOTU3IDY2OTkgbCAzMTgyIDY1OTggbCBjcAorZW9jbGlwCituIDQ4MzcuNSAxNjc0MC4wIDEwMjE1LjYgLTc5LjIwOTggLTEwMC43OTAyIGFyY24KK2dzIGNvbDAgcyBncgorIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiAzMTgyIDY1OTggbSAyOTU3IDY2OTkgbCAzMjAzIDY3MTYgbCAzMTgyIDY1OTggbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgQXJjCisxIHNsYworZ3MgIGNsaXBwYXRoCiszMTk4IDcxOTMgbSAyOTExIDcxODQgbCAyOTA4IDczMDQgbCAzMTk1IDczMTMgbCAzMTk1IDczMTMgbCAyOTU3IDcyNDYgbCAzMTk4IDcxOTMgbCBjcAorZW9jbGlwCituIDMwMjYuMSA4Mzk5LjggMTE1OS4yIC0xLjQ3NDMgLTk1LjAwNTEgYXJjbgorZ3MgY29sMCBzIGdyCisgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDMxOTggNzE5MyBtIDI5NTcgNzI0NiBsIDMxOTUgNzMxMyBsIDMxOTggNzE5MyBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBBcmMKKzEgc2xjCitncyAgY2xpcHBhdGgKKzY0NzIgNjU5NiBtIDY3NTcgNjYzMSBsIDY3NzIgNjUxMiBsIDY0ODcgNjQ3NyBsIDY0ODcgNjQ3NyBsIDY3MTggNjU2NiBsIDY0NzIgNjU5NiBsIGNwCitlb2NsaXAKK24gNzY2My4xIC0yMDI4LjggODY0Ny4xIDEyMy41ODMyIDk2LjA2MTcgYXJjbgorZ3MgY29sMCBzIGdyCisgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDY0NzIgNjU5NiBtIDY3MTggNjU2NiBsIDY0ODcgNjQ3NyBsIDY0NzIgNjU5NiBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBBcmMKKzEgc2xjCitncyAgY2xpcHBhdGgKKzgxNjIgNzcyMyBtIDgzMzYgNzQ5NCBsIDgyNDEgNzQyMSBsIDgwNjYgNzY1MCBsIDgwNjYgNzY1MCBsIDgyNjAgNzQ5NiBsIDgxNjIgNzcyMyBsIGNwCitlb2NsaXAKK24gNzcxNy41IDcyMTEuMiA2MTkuMiAxNTUuMjk3NiAyNC43MDI0IGFyY24KK2dzIGNvbDAgcyBncgorIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiA4MTYyIDc3MjMgbSA4MjYwIDc0OTYgbCA4MDY2IDc2NTAgbCA4MTYyIDc3MjMgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzMzNjAgMjAyMyBtIDMzNjAgMjMxMCBsIDM0ODAgMjMxMCBsIDM0ODAgMjAyMyBsIDM0ODAgMjAyMyBsIDM0MjAgMjI2MyBsIDMzNjAgMjAyMyBsIGNwCitlb2NsaXAKK24gMzQyMCAxMzk1IG0KKyAzNDIwIDIyOTUgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDMzNjAgMjAyMyBtIDM0MjAgMjI2MyBsIDM0ODAgMjAyMyBsIDMzNjAgMjAyMyBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBQb2x5bGluZQorMSBzbGMKK2dzICBjbGlwcGF0aAorNDU1NSA0MjE4IG0gNDc5NCA0Mzc4IGwgNDg2MCA0Mjc4IGwgNDYyMSA0MTE4IGwgNDYyMSA0MTE4IGwgNDc4OCA0MzAyIGwgNDU1NSA0MjE4IGwgY3AKK2VvY2xpcAorbiAzNDY1IDM0MjAgbQorIDQ4MTUgNDMyMCBsIGdzIGNvbDAgcyBnciBncgorCislIGFycm93aGVhZAorMCBzbGMKK24gNDU1NSA0MjE4IG0gNDc4OCA0MzAyIGwgNDYyMSA0MTE4IGwgNDU1NSA0MjE4IGwgIGNwIGdzIDAuMDAgc2V0Z3JheSBlZiBnciAgY29sMCBzCislIFBvbHlsaW5lCisxIHNsYworZ3MgIGNsaXBwYXRoCisxODMwIDYwNzMgbSAxODMwIDYzNjAgbCAxOTUwIDYzNjAgbCAxOTUwIDYwNzMgbCAxOTUwIDYwNzMgbCAxODkwIDYzMTMgbCAxODMwIDYwNzMgbCBjcAorZW9jbGlwCituIDE4OTAgNTQ0NSBtCisgMTg5MCA2MzQ1IGwgZ3MgY29sMCBzIGdyIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiAxODMwIDYwNzMgbSAxODkwIDYzMTMgbCAxOTUwIDYwNzMgbCAxODMwIDYwNzMgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzM1MTEgODI0OSBtIDM2OTkgODQ2NSBsIDM3OTAgODM4NiBsIDM2MDEgODE3MCBsIDM2MDEgODE3MCBsIDM3MTQgODM5MSBsIDM1MTEgODI0OSBsIGNwCitlb2NsaXAKK24gMjgzNSA3MzgwIG0KKyAzNzM1IDg0MTUgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDM1MTEgODI0OSBtIDM3MTQgODM5MSBsIDM2MDEgODE3MCBsIDM1MTEgODI0OSBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBQb2x5bGluZQorMSBzbGMKK2dzICBjbGlwcGF0aAorNDc4NSA1NzYyIG0gNDc4NSA1NDc1IGwgNDY2NSA1NDc1IGwgNDY2NSA1NzYyIGwgNDY2NSA1NzYyIGwgNDcyNSA1NTIyIGwgNDc4NSA1NzYyIGwgY3AKK2VvY2xpcAorbiA0NzI1IDgzNzAgbQorIDQ3MjUgNTQ5MCBsIGdzIGNvbDAgcyBnciBncgorCislIGFycm93aGVhZAorMCBzbGMKK24gNDc4NSA1NzYyIG0gNDcyNSA1NTIyIGwgNDY2NSA1NzYyIGwgNDc4NSA1NzYyIGwgIGNwIGdzIDAuMDAgc2V0Z3JheSBlZiBnciAgY29sMCBzCislIFBvbHlsaW5lCisxIHNsYworZ3MgIGNsaXBwYXRoCis3MjcwIDM2OTEgbSA3Mzk1IDM0MzIgbCA3Mjg3IDMzODAgbCA3MTYyIDM2MzkgbCA3MTYyIDM2MzkgbCA3MzIxIDM0NDkgbCA3MjcwIDM2OTEgbCBjcAorZW9jbGlwCituIDQ5NTAgODM3MCBtCisgNzMzNSAzNDIwIGwgZ3MgY29sMCBzIGdyIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiA3MjcwIDM2OTEgbSA3MzIxIDM0NDkgbCA3MTYyIDM2MzkgbCA3MjcwIDM2OTEgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzY0NzggNjk5MCBtIDY3NjUgNjk5MCBsIDY3NjUgNjg3MCBsIDY0NzggNjg3MCBsIDY0NzggNjg3MCBsIDY3MTggNjkzMCBsIDY0NzggNjk5MCBsIGNwCitlb2NsaXAKK24gMjkyNSA2OTMwIG0KKyA2NzUwIDY5MzAgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDY0NzggNjk5MCBtIDY3MTggNjkzMCBsIDY0NzggNjg3MCBsIDY0NzggNjk5MCBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBQb2x5bGluZQorMSBzbGMKK2dzICBjbGlwcGF0aAorMzc3NCA1NTk2IG0gMzk2OSA1Mzg0IGwgMzg4MCA1MzAzIGwgMzY4NiA1NTE1IGwgMzY4NiA1NTE1IGwgMzg5MyA1Mzc5IGwgMzc3NCA1NTk2IGwgY3AKK2VvY2xpcAorbiAyODgwIDY0ODAgbQorIDM5MTUgNTM1NSBsIGdzIGNvbDAgcyBnciBncgorCislIGFycm93aGVhZAorMCBzbGMKK24gMzc3NCA1NTk2IG0gMzg5MyA1Mzc5IGwgMzY4NiA1NTE1IGwgMzc3NCA1NTk2IGwgIGNwIGdzIDAuMDAgc2V0Z3JheSBlZiBnciAgY29sMCBzCislIFBvbHlsaW5lCisxIHNsYworZ3MgIGNsaXBwYXRoCis2NDc4IDI4OTUgbSA2NzY1IDI4OTUgbCA2NzY1IDI3NzUgbCA2NDc4IDI3NzUgbCA2NDc4IDI3NzUgbCA2NzE4IDI4MzUgbCA2NDc4IDI4OTUgbCBjcAorZW9jbGlwCituIDQ1MDAgMjgzNSBtCisgNjc1MCAyODM1IGwgZ3MgY29sMCBzIGdyIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiA2NDc4IDI4OTUgbSA2NzE4IDI4MzUgbCA2NDc4IDI3NzUgbCA2NDc4IDI4OTUgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzc4MDAgMzY5MiBtIDc4MDAgMzQwNSBsIDc2ODAgMzQwNSBsIDc2ODAgMzY5MiBsIDc2ODAgMzY5MiBsIDc3NDAgMzQ1MiBsIDc4MDAgMzY5MiBsIGNwCitlb2NsaXAKK24gNzc0MCA2MzQ1IG0KKyA3NzQwIDM0MjAgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDc4MDAgMzY5MiBtIDc3NDAgMzQ1MiBsIDc2ODAgMzY5MiBsIDc4MDAgMzY5MiBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBQb2x5bGluZQorMSBzbGMKK2dzICBjbGlwcGF0aAorMjA5MiA0MTI3IG0gMTg0NiA0Mjc2IGwgMTkwOCA0Mzc5IGwgMjE1NCA0MjI5IGwgMjE1NCA0MjI5IGwgMTkxOCA0MzAzIGwgMjA5MiA0MTI3IGwgY3AKK2VvY2xpcAorbiAzMzc1IDM0MjAgbQorIDE4OTAgNDMyMCBsIGdzIGNvbDAgcyBnciBncgorCislIGFycm93aGVhZAorMCBzbGMKK24gMjA5MiA0MTI3IG0gMTkxOCA0MzAzIGwgMjE1NCA0MjI5IGwgMjA5MiA0MTI3IGwgIGNwIGdzIDAuMDAgc2V0Z3JheSBlZiBnciAgY29sMCBzCislIFBvbHlsaW5lCisxIHNsYworZ3MgIGNsaXBwYXRoCis2Njg5IDM1NjUgbSA2ODkzIDMzNjEgbCA2ODA4IDMyNzYgbCA2NjA0IDM0ODAgbCA2NjA0IDM0ODAgbCA2ODE3IDMzNTMgbCA2Njg5IDM1NjUgbCBjcAorZW9jbGlwCituIDU3NjAgNDQxMCBtCisgNjg0MCAzMzMwIGwgZ3MgY29sMCBzIGdyIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiA2Njg5IDM1NjUgbSA2ODE3IDMzNTMgbCA2NjA0IDM0ODAgbCA2Njg5IDM1NjUgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzQ3NzMgOTEwIG0gNDUxMCA3OTQgbCA0NDYxIDkwMyBsIDQ3MjQgMTAyMCBsIDQ3MjQgMTAyMCBsIDQ1MzAgODY4IGwgNDc3MyA5MTAgbCBjcAorZW9jbGlwCituIDc3NDAgMjI5NSBtCisgNDUwMCA4NTUgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDQ3NzMgOTEwIG0gNDUzMCA4NjggbCA0NzI0IDEwMjAgbCA0NzczIDkxMCBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworJSBQb2x5bGluZQorMSBzbGMKK2dzICBjbGlwcGF0aAorNTk5NSA1NTA1IG0gNTc5MSA1MzAxIGwgNTcwNiA1Mzg2IGwgNTkxMCA1NTkwIGwgNTkxMCA1NTkwIGwgNTc4MyA1Mzc4IGwgNTk5NSA1NTA1IGwgY3AKK2VvY2xpcAorbiA2ODQwIDY0MzUgbQorIDU3NjAgNTM1NSBsIGdzIGNvbDAgcyBnciBncgorCislIGFycm93aGVhZAorMCBzbGMKK24gNTk5NSA1NTA1IG0gNTc4MyA1Mzc4IGwgNTkxMCA1NTkwIGwgNTk5NSA1NTA1IGwgIGNwIGdzIDAuMDAgc2V0Z3JheSBlZiBnciAgY29sMCBzCislIFBvbHlsaW5lCisxIHNsYworZ3MgIGNsaXBwYXRoCis2NzA2IDc2MjQgbSA2ODk1IDc0MDggbCA2ODA0IDczMjkgbCA2NjE1IDc1NDUgbCA2NjE1IDc1NDUgbCA2ODE5IDc0MDQgbCA2NzA2IDc2MjQgbCBjcAorZW9jbGlwCituIDU4OTUgODQ2MCBtCisgNjg0MCA3MzgwIGwgZ3MgY29sMCBzIGdyIGdyCisKKyUgYXJyb3doZWFkCiswIHNsYworbiA2NzA2IDc2MjQgbSA2ODE5IDc0MDQgbCA2NjE1IDc1NDUgbCA2NzA2IDc2MjQgbCAgY3AgZ3MgMC4wMCBzZXRncmF5IGVmIGdyICBjb2wwIHMKKyUgUG9seWxpbmUKKzEgc2xjCitncyAgY2xpcHBhdGgKKzM1NTMgNDc0MCBtIDM4NDAgNDc0MCBsIDM4NDAgNDYyMCBsIDM1NTMgNDYyMCBsIDM1NTMgNDYyMCBsIDM3OTMgNDY4MCBsIDM1NTMgNDc0MCBsIGNwCitlb2NsaXAKK24gMjkyNSA0NjgwIG0KKyAzODI1IDQ2ODAgbCBncyBjb2wwIHMgZ3IgZ3IKKworJSBhcnJvd2hlYWQKKzAgc2xjCituIDM1NTMgNDc0MCBtIDM3OTMgNDY4MCBsIDM1NTMgNDYyMCBsIDM1NTMgNDc0MCBsICBjcCBncyAwLjAwIHNldGdyYXkgZWYgZ3IgIGNvbDAgcworL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorMzE1NyAxODA1IG0KK2dzIDEgLTEgc2MgKDEpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzIzMjcgMzgxOSBtCitncyAxIC0xIHNjICgyKSBjb2wwIHNoIGdyCisvQ291cmllci1PYmxpcXVlLWlzbyBmZiAxODAuMDAgc2NmIHNmCisxNjI3IDU4NzkgbQorZ3MgMSAtMSBzYyAoMykgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorNTc2NyAxNzU1IG0KK2dzIDEgLTEgc2MgKDYpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzYwNDcgNzk2OSBtCitncyAxIC0xIHNjICg3KSBjb2wwIHNoIGdyCisvQ291cmllci1PYmxpcXVlLWlzbyBmZiAxODAuMDAgc2NmIHNmCis3NDg3IDQ5NTkgbQorZ3MgMSAtMSBzYyAoOCkgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorNTg4MiAzOTQwIG0KK2dzIDEgLTEgc2MgKDEwKSBjb2wwIHNoIGdyCisvQ291cmllci1PYmxpcXVlLWlzbyBmZiAxODAuMDAgc2NmIHNmCis1MjkyIDI3MjAgbQorZ3MgMSAtMSBzYyAoMTEpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzQxNDIgMzc3NiBtCitncyAxIC0xIHNjICgxMikgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorMzA4MiA1OTI2IG0KK2dzIDEgLTEgc2MgKDEzKSBjb2wwIHNoIGdyCisvQ291cmllci1PYmxpcXVlLWlzbyBmZiAxODAuMDAgc2NmIHNmCis0MDUyIDY4MjYgbQorZ3MgMSAtMSBzYyAoMTQpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzQ0MzIgNzQxNiBtCitncyAxIC0xIHNjICgxNSkgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorNTEyNyA3NDM1IG0KK2dzIDEgLTEgc2MgKDUpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzM1ODIgNzc3NiBtCitncyAxIC0xIHNjICgxNikgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorMjk1NyA3OTk1IG0KK2dzIDEgLTEgc2MgKDQpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzY0ODcgNTk2NSBtCitncyAxIC0xIHNjICg5KSBjb2wwIHNoIGdyCisvVGltZXMtUm9tYW4taXNvIGZmIDM2MC4wMCBzY2Ygc2YKKzM4NzAgOTAwMCBtCitncyAxIC0xIHNjIChPcGVyYXRpb25hbCkgY29sMCBzaCBncgorL1RpbWVzLVJvbWFuLWlzbyBmZiAzNjAuMDAgc2NmIHNmCisxNjIwIDQ5OTUgbQorZ3MgMSAtMSBzYyAoSW5pdCkgY29sMCBzaCBncgorL1RpbWVzLVJvbWFuLWlzbyBmZiAzNjAuMDAgc2NmIHNmCisxMjE1IDcwMjAgbQorZ3MgMSAtMSBzYyAoU2VsZi1UZXN0KSBjb2wwIHNoIGdyCisvVGltZXMtUm9tYW4taXNvIGZmIDM2MC4wMCBzY2Ygc2YKKzczMzUgNzAyMCBtCitncyAxIC0xIHNjIChFcnJvcikgY29sMCBzaCBncgorL1RpbWVzLVJvbWFuLWlzbyBmZiAzNjAuMDAgc2NmIHNmCiszOTE1IDQ5OTUgbQorZ3MgMSAtMSBzYyAoRmF0YWwtRXJyb3IpIGNvbDAgc2ggZ3IKKy9UaW1lcy1Sb21hbi1pc28gZmYgMzYwLjAwIHNjZiBzZgorNjkzMCAyOTcwIG0KK2dzIDEgLTEgc2MgKFNodXRkb3duKSBjb2wwIHNoIGdyCisvVGltZXMtUm9tYW4taXNvIGZmIDM2MC4wMCBzY2Ygc2YKKzI2NTUgMjk3MCBtCitncyAxIC0xIHNjIChQb3dlci1PbikgY29sMCBzaCBncgorL1RpbWVzLVJvbWFuLWlzbyBmZiAzNjAuMDAgc2NmIHNmCisyNTY1IDk0NSBtCitncyAxIC0xIHNjIChQb3dlci1PZmYpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzQwNjYgNjM5OSBtCitncyAxIC0xIHNjICgxNykgY29sMCBzaCBncgorL0NvdXJpZXItT2JsaXF1ZS1pc28gZmYgMTgwLjAwIHNjZiBzZgorMzA3NiA0NTY4IG0KK2dzIDEgLTEgc2MgKDE5KSBjb2wwIHNoIGdyCisvQ291cmllci1PYmxpcXVlLWlzbyBmZiAxODAuMDAgc2NmIHNmCiszMDU1IDUyMjIgbQorZ3MgMSAtMSBzYyAoMTgpIGNvbDAgc2ggZ3IKKy9Db3VyaWVyLU9ibGlxdWUtaXNvIGZmIDE4MC4wMCBzY2Ygc2YKKzc2MTIgODA0NyBtCitncyAxIC0xIHNjICgyMCkgY29sMCBzaCBncgorJSBoZXJlIGVuZHMgZmlndXJlOworcGFnZWZvb3Rlcgorc2hvd3BhZ2UKKyUlVHJhaWxlcgorJUVPRgpkaWZmIC0tZ2l0IGEvZG9jL2ZpcHMtZnNtLmZpZyBiL2RvYy9maXBzLWZzbS5maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmMGFlYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9maXBzLWZzbS5maWcKQEAgLTAsMCArMSwxOTkgQEAKKyNGSUcgMy4yCitQb3J0cmFpdAorQ2VudGVyCitNZXRyaWMKK0E0ICAgICAgCisxMDAuMDAKK1NpbmdsZQorLTIKKzEyMDAgMgorMCAzMiAjOWMwMDAwCiswIDMzICM4YzhjOGMKKzAgMzQgIzhjOGM4YworMCAzNSAjNDI0MjQyCiswIDM2ICM4YzhjOGMKKzAgMzcgIzQyNDI0MgorMCAzOCAjOGM4YzhjCiswIDM5ICM0MjQyNDIKKzAgNDAgIzhjOGM4YworMCA0MSAjNDI0MjQyCiswIDQyICM4YzhjOGMKKzAgNDMgIzQyNDI0MgorNiA5MDAgMjcwIDg3NzUgOTQ1MAorNSAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMSAxIDEgMCA0ODM3LjUwMCAxNjc0MC4wMDAgNjc1MCA2NzA1IDQ3MjUgNjUyNSAyOTI1IDY3MDUKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCis1IDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDEgMSAwIDMwMjYuMTM4IDgzOTkuODI1IDQxODUgODM3MCAzODcwIDc2MDUgMjkyNSA3MjQ1CisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorNSAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMSAxIDEgMCA3NjYzLjEyNSAtMjAyOC43NTAgMjg4MCA1MTc1IDQ3NzAgNjEyMCA2NzUwIDY1NzAKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCis1IDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDEgMSAwIDc3MTcuNTAwIDcyMTEuMjUwIDcxNTUgNzQ3MCA3NzQwIDc4MzAgODI4MCA3NDcwCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorNiAzMDk2IDE1OTMgMzM4MCAxODc3CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCAzMjM4IDE3MzUgMTQyIDE0MiAzMjM4IDE3MzUgMzEwMyAxNjkwCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMTA1IDMxNTcgMTgwNSAxXDAwMQorLTYKKzYgMjI2NiAzNjA3IDI1NTAgMzg5MQorMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgMjQwOCAzNzQ5IDE0MiAxNDIgMjQwOCAzNzQ5IDIyNzMgMzcwNAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDEwNSAyMzI3IDM4MTkgMlwwMDEKKy02Cis2IDE1NjYgNTY2NyAxODUwIDU5NTEKKzEgMyAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDEgMC4wMDAwIDE3MDggNTgwOSAxNDIgMTQyIDE3MDggNTgwOSAxNTczIDU3NjQKKzQgMCAwIDUwIC0xIDEzIDEyIDAuMDAwMCA0IDEwNSAxMDUgMTYyNyA1ODc5IDNcMDAxCistNgorNiA1NzA2IDE1NDMgNTk5MCAxODI3CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCA1ODQ4IDE2ODUgMTQyIDE0MiA1ODQ4IDE2ODUgNTcxMyAxNjQwCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMTA1IDU3NjcgMTc1NSA2XDAwMQorLTYKKzYgNTk4NiA3NzU3IDYyNzAgODA0MQorMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgNjEyOCA3ODk5IDE0MiAxNDIgNjEyOCA3ODk5IDU5OTMgNzg1NAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDEwNSA2MDQ3IDc5NjkgN1wwMDEKKy02Cis2IDc0MjYgNDc0NyA3NzEwIDUwMzEKKzEgMyAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDEgMC4wMDAwIDc1NjggNDg4OSAxNDIgMTQyIDc1NjggNDg4OSA3NDMzIDQ4NDQKKzQgMCAwIDUwIC0xIDEzIDEyIDAuMDAwMCA0IDEwNSAxMDUgNzQ4NyA0OTU5IDhcMDAxCistNgorNiA1ODY2IDM3MzcgNjE1MCA0MDIxCisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCA2MDA4IDM4NzkgMTQyIDE0MiA2MDA4IDM4NzkgNTg3MyAzODM0Cis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMjEwIDU4ODIgMzk0MCAxMFwwMDEKKy02Cis2IDUyNzYgMjUxNyA1NTYwIDI4MDEKKzEgMyAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDEgMC4wMDAwIDU0MTggMjY1OSAxNDIgMTQyIDU0MTggMjY1OSA1MjgzIDI2MTQKKzQgMCAwIDUwIC0xIDEzIDEyIDAuMDAwMCA0IDEwNSAyMTAgNTI5MiAyNzIwIDExXDAwMQorLTYKKzYgNDEyNiAzNTczIDQ0MTAgMzg1NworMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgNDI2OCAzNzE1IDE0MiAxNDIgNDI2OCAzNzE1IDQxMzMgMzY3MAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDIxMCA0MTQyIDM3NzYgMTJcMDAxCistNgorNiAzMDY2IDU3MjMgMzM1MCA2MDA3CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCAzMjA4IDU4NjUgMTQyIDE0MiAzMjA4IDU4NjUgMzA3MyA1ODIwCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMjEwIDMwODIgNTkyNiAxM1wwMDEKKy02Cis2IDQwMzYgNjYyMyA0MzIwIDY5MDcKKzEgMyAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDEgMC4wMDAwIDQxNzggNjc2NSAxNDIgMTQyIDQxNzggNjc2NSA0MDQzIDY3MjAKKzQgMCAwIDUwIC0xIDEzIDEyIDAuMDAwMCA0IDEwNSAyMTAgNDA1MiA2ODI2IDE0XDAwMQorLTYKKzYgNDQxNiA3MjEzIDQ3MDAgNzQ5NworMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgNDU1OCA3MzU1IDE0MiAxNDIgNDU1OCA3MzU1IDQ0MjMgNzMxMAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDIxMCA0NDMyIDc0MTYgMTVcMDAxCistNgorNiA1MDY2IDcyMjMgNTM1MCA3NTA3CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCA1MjA4IDczNjUgMTQyIDE0MiA1MjA4IDczNjUgNTA3MyA3MzIwCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMTA1IDUxMjcgNzQzNSA1XDAwMQorLTYKKzYgMzU2NiA3NTczIDM4NTAgNzg1NworMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgMzcwOCA3NzE1IDE0MiAxNDIgMzcwOCA3NzE1IDM1NzMgNzY3MAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDIxMCAzNTgyIDc3NzYgMTZcMDAxCistNgorNiAyODk2IDc3ODMgMzE4MCA4MDY3CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCAzMDM4IDc5MjUgMTQyIDE0MiAzMDM4IDc5MjUgMjkwMyA3ODgwCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMTA1IDI5NTcgNzk5NSA0XDAwMQorLTYKKzYgNjQyNiA1NzUzIDY3MTAgNjAzNworMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgNjU2OCA1ODk1IDE0MiAxNDIgNjU2OCA1ODk1IDY0MzMgNTg1MAorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDEwNSA2NDg3IDU5NjUgOVwwMDEKKy02Cis2IDM2MDAgODM3MCA1OTg1IDk0NTAKKzIgNCAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMCAyMCAwIDAgNQorCSA1OTcwIDk0NTAgMzYwMCA5NDUwIDM2MDAgODM3MCA1OTcwIDgzNzAgNTk3MCA5NDUwCis0IDAgMCA1MCAtMSAwIDI0IDAuMDAwMCA0IDMzMCAxNzI1IDM4NzAgOTAwMCBPcGVyYXRpb25hbFwwMDEKKy02Cis2IDkwMCA0MzIwIDI5NzAgNTQ0NQorMiA0IDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDIwIDAgMCA1CisJIDI5NDAgNTQ0NSA5MTUgNTQ0NSA5MTUgNDMzNSAyOTQwIDQzMzUgMjk0MCA1NDQ1Cis0IDAgMCA1MCAtMSAwIDI0IDAuMDAwMCA0IDI0MCA1MTAgMTYyMCA0OTk1IEluaXRcMDAxCistNgorNiA5MDAgNjM0NSAyOTcwIDc0NzAKKzIgNCAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMCAyMCAwIDAgNQorCSAyOTU1IDc0NTUgOTMwIDc0NTUgOTMwIDYzNDUgMjk1NSA2MzQ1IDI5NTUgNzQ1NQorNCAwIDAgNTAgLTEgMCAyNCAwLjAwMDAgNCAyNTUgMTMzNSAxMjE1IDcwMjAgU2VsZi1UZXN0XDAwMQorLTYKKzYgNjc1MCA2MzQ1IDg3NzUgNzQ3MAorMiA0IDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDIwIDAgMCA1CisJIDg3NzUgNzQ3MCA2NzUwIDc0NzAgNjc1MCA2MzYwIDg3NzUgNjM2MCA4Nzc1IDc0NzAKKzQgMCAwIDUwIC0xIDAgMjQgMC4wMDAwIDQgMjQwIDc2NSA3MzM1IDcwMjAgRXJyb3JcMDAxCistNgorNiAzODI1IDQzMjAgNTg1MCA1NDQ1CisyIDQgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgMjAgMCAwIDUKKwkgNTg1MCA1NDQ1IDM4MjUgNTQ0NSAzODI1IDQzMzUgNTg1MCA0MzM1IDU4NTAgNTQ0NQorNCAwIDAgNTAgLTEgMCAyNCAwLjAwMDAgNCAyNTUgMTYyMCAzOTE1IDQ5OTUgRmF0YWwtRXJyb3JcMDAxCistNgorNiA2NzUwIDIyOTUgODc3NSAzNDIwCisyIDQgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgMjAgMCAwIDUKKwkgODc3NSAzNDIwIDY3NTAgMzQyMCA2NzUwIDIzMTAgODc3NSAyMzEwIDg3NzUgMzQyMAorNCAwIDAgNTAgLTEgMCAyNCAwLjAwMDAgNCAyNDAgMTQ1NSA2OTMwIDI5NzAgU2h1dGRvd25cMDAxCistNgorNiAyNDc1IDIyOTUgNDUwMCAzNDIwCisyIDQgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgMjAgMCAwIDUKKwkgNDUwMCAzNDA1IDI0NzUgMzQwNSAyNDc1IDIyOTUgNDUwMCAyMjk1IDQ1MDAgMzQwNQorNCAwIDAgNTAgLTEgMCAyNCAwLjAwMDAgNCAyNDAgMTQ3MCAyNjU1IDI5NzAgUG93ZXItT25cMDAxCistNgorNiAyNDc1IDI3MCA0NTAwIDEzOTUKKzIgNCAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMCAyMCAwIDAgNQorCSA0NTAwIDEzOTUgMjQ3NSAxMzk1IDI0NzUgMjg1IDQ1MDAgMjg1IDQ1MDAgMTM5NQorNCAwIDAgNTAgLTEgMCAyNCAwLjAwMDAgNCAyNDAgMTUzMCAyNTY1IDk0NSBQb3dlci1PZmZcMDAxCistNgorNiA0MDUwIDYxOTYgNDMzNCA2NDgwCisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCA0MTkyIDYzMzggMTQyIDE0MiA0MTkyIDYzMzggNDA1NyA2MjkzCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMjEwIDQwNjYgNjM5OSAxN1wwMDEKKy02Cis2IDMwNTMgNDM1OCAzMzUxIDQ2NTYKKzEgMyAwIDEgMCA3IDUwIC0xIC0xIDAuMDAwIDEgMC4wMDAwIDMyMDIgNDUwNyAxNDIgMTQyIDMyMDIgNDUwNyAzMDY3IDQ0NjIKKzQgMCAwIDUwIC0xIDEzIDEyIDAuMDAwMCA0IDEwNSAyMTAgMzA3NiA0NTY4IDE5XDAwMQorLTYKKzYgMzAzMiA1MDEyIDMzMzAgNTMxMAorMSAzIDAgMSAwIDcgNTAgLTEgLTEgMC4wMDAgMSAwLjAwMDAgMzE4MSA1MTYxIDE0MiAxNDIgMzE4MSA1MTYxIDMwNDYgNTExNgorNCAwIDAgNTAgLTEgMTMgMTIgMC4wMDAwIDQgMTA1IDIxMCAzMDU1IDUyMjIgMThcMDAxCistNgorNiA3NTYwIDc4NDcgNzg1OCA4MTQ1CisxIDMgMCAxIDAgNyA1MCAtMSAtMSAwLjAwMCAxIDAuMDAwMCA3NzA5IDc5OTYgMTQyIDE0MiA3NzA5IDc5OTYgNzU3NCA3OTUxCis0IDAgMCA1MCAtMSAxMyAxMiAwLjAwMDAgNCAxMDUgMjEwIDc2MTIgODA0NyAyMFwwMDEKKy02CisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDM0MjAgMTM5NSAzNDIwIDIyOTUKKzIgMSAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMSAtMSAxIDAgMgorCTEgMSAyLjAwIDEyMC4wMCAyNDAuMDAKKwkgMzQ2NSAzNDIwIDQ4MTUgNDMyMAorMiAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAxIC0xIDEgMCAyCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorCSAxODkwIDU0NDUgMTg5MCA2MzQ1CisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDI4MzUgNzM4MCAzNzM1IDg0MTUKKzIgMSAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMSAtMSAxIDAgMgorCTEgMSAyLjAwIDEyMC4wMCAyNDAuMDAKKwkgNDcyNSA4MzcwIDQ3MjUgNTQ5MAorMiAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAxIC0xIDEgMCAyCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorCSA0OTUwIDgzNzAgNzMzNSAzNDIwCisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDI5MjUgNjkzMCA2NzUwIDY5MzAKKzIgMSAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMSAtMSAxIDAgMgorCTEgMSAyLjAwIDEyMC4wMCAyNDAuMDAKKwkgMjg4MCA2NDgwIDM5MTUgNTM1NQorMiAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAxIC0xIDEgMCAyCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorCSA0NTAwIDI4MzUgNjc1MCAyODM1CisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDc3NDAgNjM0NSA3NzQwIDM0MjAKKzIgMSAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMSAtMSAxIDAgMgorCTEgMSAyLjAwIDEyMC4wMCAyNDAuMDAKKwkgMzM3NSAzNDIwIDE4OTAgNDMyMAorMiAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAxIC0xIDEgMCAyCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorCSA1NzYwIDQ0MTAgNjg0MCAzMzMwCisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDc3NDAgMjI5NSA0NTAwIDg1NQorMiAxIDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAxIC0xIDEgMCAyCisJMSAxIDIuMDAgMTIwLjAwIDI0MC4wMAorCSA2ODQwIDY0MzUgNTc2MCA1MzU1CisyIDEgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDEgLTEgMSAwIDIKKwkxIDEgMi4wMCAxMjAuMDAgMjQwLjAwCisJIDU4OTUgODQ2MCA2ODQwIDczODAKKzIgMSAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMSAtMSAxIDAgMgorCTEgMSAyLjAwIDEyMC4wMCAyNDAuMDAKKwkgMjkyNSA0NjgwIDM4MjUgNDY4MAorLTYKZGlmZiAtLWdpdCBhL2RvYy9maXBzLWZzbS5wZGYgYi9kb2MvZmlwcy1mc20ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjRlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZmlwcy1mc20ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9maXBzLWZzbS5wbmcgYi9kb2MvZmlwcy1mc20ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTA3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZmlwcy1mc20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9nY3J5cHQuaW5mbyBiL2RvYy9nY3J5cHQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWY4YjZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2djcnlwdC5pbmZvCkBAIC0wLDAgKzEsMTMxIEBACitUaGlzIGlzIC9ob21lL3drL3MvbGliZ2NyeXB0L2RvYy9nY3J5cHQuaW5mbywgcHJvZHVjZWQgYnkgbWFrZWluZm8KK3ZlcnNpb24gNC4xMyBmcm9tIC9ob21lL3drL3MvbGliZ2NyeXB0L2RvYy9nY3J5cHQudGV4aS4KKworVGhpcyBtYW51YWwgaXMgZm9yIExpYmdjcnlwdCAodmVyc2lvbiAxLjYuMSwgMjkgSmFudWFyeSAyMDE0KSwgd2hpY2ggaXMKK0dOVSdzIGxpYnJhcnkgb2YgY3J5cHRvZ3JhcGhpYyBidWlsZGluZyBibG9ja3MuCisKK0NvcHlyaWdodCAoQykgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwKKzIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgZzEwIENvZGUgR21iSAorCisgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcworICAgICBkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBUaGUgdGV4dCBvZiB0aGUKKyAgICAgbGljZW5zZSBjYW4gYmUgZm91bmQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIi4KKworSU5GTy1ESVItU0VDVElPTiBHTlUgTGlicmFyaWVzCitTVEFSVC1JTkZPLURJUi1FTlRSWQorKiBsaWJnY3J5cHQ6IChnY3J5cHQpLiAgQ3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiBsaWJyYXJ5LgorRU5ELUlORk8tRElSLUVOVFJZCisKKx8KK0luZGlyZWN0OgorZ2NyeXB0LmluZm8tMTogODc3CitnY3J5cHQuaW5mby0yOiAyODMyNjAKKx8KK1RhZyBUYWJsZToKKyhJbmRpcmVjdCkKK05vZGU6IFRvcH84NzcKK05vZGU6IEludHJvZHVjdGlvbn8zMzEyCitOb2RlOiBHZXR0aW5nIFN0YXJ0ZWR/MzY4NAorTm9kZTogRmVhdHVyZXN/NDU2NQorTm9kZTogT3ZlcnZpZXd/NTM0OQorTm9kZTogUHJlcGFyYXRpb25/NTk4MAorTm9kZTogSGVhZGVyfzY5MDMKK05vZGU6IEJ1aWxkaW5nIHNvdXJjZXN/Nzk3NAorTm9kZTogQnVpbGRpbmcgc291cmNlcyB1c2luZyBBdXRvbWFrZX85ODg4CitOb2RlOiBJbml0aWFsaXppbmcgdGhlIGxpYnJhcnl/MTEwNzAKK1JlZjogc2FtcGxlLXVzZS1zdXNwZW5kLXNlY21lbX8xNDI0NgorUmVmOiBzYW1wbGUtdXNlLXJlc3VtZS1zZWNtZW1/MTQ4NjcKK05vZGU6IE11bHRpLVRocmVhZGluZ38xNTc2MworUmVmOiBNdWx0aS1UaHJlYWRpbmctRm9vdG5vdGUtMX8yMDM5MQorTm9kZTogRW5hYmxpbmcgRklQUyBtb2RlfzIwNzk5CitOb2RlOiBIYXJkd2FyZSBmZWF0dXJlc38yMjc5MQorUmVmOiBIYXJkd2FyZSBmZWF0dXJlcy1Gb290bm90ZS0xfzI0MDE5CitOb2RlOiBHZW5lcmFsaXRpZXN/MjQxODAKK05vZGU6IENvbnRyb2xsaW5nIHRoZSBsaWJyYXJ5fzI0NDM5CitOb2RlOiBFcnJvciBIYW5kbGluZ380MTE1NworTm9kZTogRXJyb3IgVmFsdWVzfzQzNjk2CitOb2RlOiBFcnJvciBTb3VyY2VzfzQ4NjM2CitOb2RlOiBFcnJvciBDb2Rlc381MDkwNworTm9kZTogRXJyb3IgU3RyaW5nc381NDM5MgorTm9kZTogSGFuZGxlciBGdW5jdGlvbnN/NTU1NzYKK05vZGU6IFByb2dyZXNzIGhhbmRsZXJ/NTYxMzUKK05vZGU6IEFsbG9jYXRpb24gaGFuZGxlcn81ODI4MAorTm9kZTogRXJyb3IgaGFuZGxlcn81OTgzMQorTm9kZTogTG9nZ2luZyBoYW5kbGVyfzYxMzk4CitOb2RlOiBTeW1tZXRyaWMgY3J5cHRvZ3JhcGh5fzYxOTkwCitOb2RlOiBBdmFpbGFibGUgY2lwaGVyc382MjczMAorTm9kZTogQXZhaWxhYmxlIGNpcGhlciBtb2Rlc382NTM0NworTm9kZTogV29ya2luZyB3aXRoIGNpcGhlciBoYW5kbGVzfzY3NDQwCitOb2RlOiBHZW5lcmFsIGNpcGhlciBmdW5jdGlvbnN/Nzc0MTgKK05vZGU6IFB1YmxpYyBLZXkgY3J5cHRvZ3JhcGh5fzgwOTM2CitOb2RlOiBBdmFpbGFibGUgYWxnb3JpdGhtc384MTcwMgorTm9kZTogVXNlZCBTLWV4cHJlc3Npb25zfzgyMDUxCitOb2RlOiBSU0Ega2V5IHBhcmFtZXRlcnN/ODMxNjgKK05vZGU6IERTQSBrZXkgcGFyYW1ldGVyc384NDQ0MworTm9kZTogRUNDIGtleSBwYXJhbWV0ZXJzfzg1MTAxCitSZWY6IGVjY19rZXlwYXJhbX84NTI1MgorTm9kZTogQ3J5cHRvZ3JhcGhpYyBGdW5jdGlvbnN/ODY5OTcKK05vZGU6IEdlbmVyYWwgcHVibGljLWtleSByZWxhdGVkIEZ1bmN0aW9uc385ODQxNgorTm9kZTogSGFzaGluZ38xMTE5MjcKK05vZGU6IEF2YWlsYWJsZSBoYXNoIGFsZ29yaXRobXN/MTEyNjYwCitOb2RlOiBXb3JraW5nIHdpdGggaGFzaCBhbGdvcml0aG1zfzExNjU1MgorTm9kZTogTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2Rlc38xMjkxNjYKK05vZGU6IEF2YWlsYWJsZSBNQUMgYWxnb3JpdGhtc38xMjk4MzQKK05vZGU6IFdvcmtpbmcgd2l0aCBNQUMgYWxnb3JpdGhtc38xMzM3NTcKK05vZGU6IEtleSBEZXJpdmF0aW9ufzEzOTExOQorTm9kZTogUmFuZG9tIE51bWJlcnN/MTQxNTEzCitOb2RlOiBRdWFsaXR5IG9mIHJhbmRvbSBudW1iZXJzfzE0MTc5NgorTm9kZTogUmV0cmlldmluZyByYW5kb20gbnVtYmVyc38xNDI0ODIKK05vZGU6IFMtZXhwcmVzc2lvbnN/MTQzOTY4CitOb2RlOiBEYXRhIHR5cGVzIGZvciBTLWV4cHJlc3Npb25zfzE0NDYxMgorTm9kZTogV29ya2luZyB3aXRoIFMtZXhwcmVzc2lvbnN/MTQ0OTM4CitOb2RlOiBNUEkgbGlicmFyeX8xNTgzMzgKK05vZGU6IERhdGEgdHlwZXN/MTU5MzYyCitOb2RlOiBCYXNpYyBmdW5jdGlvbnN/MTU5NjcxCitOb2RlOiBNUEkgZm9ybWF0c38xNjIxMjUKK05vZGU6IENhbGN1bGF0aW9uc38xNjU1MTAKK05vZGU6IENvbXBhcmlzb25zfzE2Nzc2NAorTm9kZTogQml0IG1hbmlwdWxhdGlvbnN/MTY4NzYzCitOb2RlOiBFQyBmdW5jdGlvbnN/MTcwMDc3CitSZWY6IGdjcnlfbXBpX2VjX25ld38xNzI3NzUKK05vZGU6IE1pc2NlbGxhbmVvdXN/MTc3NTM2CitOb2RlOiBQcmltZSBudW1iZXJzfzE4MTY3OQorTm9kZTogR2VuZXJhdGlvbn8xODE5NDkKK05vZGU6IENoZWNraW5nfzE4MzIzMworTm9kZTogVXRpbGl0aWVzfzE4MzY0NworTm9kZTogTWVtb3J5IGFsbG9jYXRpb25/MTgzOTU5CitOb2RlOiBDb250ZXh0IG1hbmFnZW1lbnR/MTg1MzEzCitSZWY6IGdjcnlfY3R4X3JlbGVhc2V/MTg1NzUwCitOb2RlOiBCdWZmZXIgZGVzY3JpcHRpb25/MTg1OTExCitOb2RlOiBUb29sc38xODY2NzMKK05vZGU6IGhtYWMyNTZ/MTg2ODM5CitOb2RlOiBBcmNoaXRlY3R1cmV/MTg3ODQ2CitSZWY6IGZpZzpzdWJzeXN0ZW1zfzE4OTM2MgorUmVmOiBBcmNoaXRlY3R1cmUtRm9vdG5vdGUtMX8xOTA0NDcKK1JlZjogQXJjaGl0ZWN0dXJlLUZvb3Rub3RlLTJ/MTkwNTA5CitOb2RlOiBQdWJsaWMtS2V5IFN1YnN5c3RlbSBBcmNoaXRlY3R1cmV/MTkwNTkzCitOb2RlOiBTeW1tZXRyaWMgRW5jcnlwdGlvbiBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlfzE5Mjg2OAorTm9kZTogSGFzaGluZyBhbmQgTUFDaW5nIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmV/MTk0MzE1CitOb2RlOiBNdWx0aS1QcmVjaXNpb24tSW50ZWdlciBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlfzE5NjIzOQorTm9kZTogUHJpbWUtTnVtYmVyLUdlbmVyYXRvciBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlfzE5NzY4MAorUmVmOiBQcmltZS1OdW1iZXItR2VuZXJhdG9yIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUtRm9vdG5vdGUtMX8xOTk2MTEKK05vZGU6IFJhbmRvbS1OdW1iZXIgU3Vic3lzdGVtIEFyY2hpdGVjdHVyZX8xOTk4OTkKK05vZGU6IENTUFJORyBEZXNjcmlwdGlvbn8yMDIzODgKK1JlZjogQ1NQUk5HIERlc2NyaXB0aW9uLUZvb3Rub3RlLTF/MjAzOTUwCitOb2RlOiBGSVBTIFBSTkcgRGVzY3JpcHRpb25/MjA0MDczCitOb2RlOiBTZWxmLVRlc3RzfzIwNjIwNgorTm9kZTogRklQUyBNb2RlfzIxNzcxNgorUmVmOiBmaWc6Zmlwcy1mc21/MjIxNTIzCitSZWY6IHRibDpmaXBzLXN0YXRlc38yMjE2MjUKK1JlZjogdGJsOmZpcHMtc3RhdGUtdHJhbnNpdGlvbnN/MjIyODc4CitOb2RlOiBMaWJyYXJ5IENvcHlpbmd/MjI2NTAxCitOb2RlOiBDb3B5aW5nfzI1NDYyMAorTm9kZTogRmlndXJlcyBhbmQgVGFibGVzfzI3Mzc5NQorTm9kZTogQ29uY2VwdCBJbmRleH8yNzQyMDUKK05vZGU6IEZ1bmN0aW9uIGFuZCBEYXRhIEluZGV4fzI4MzI2MAorHworRW5kIFRhZyBUYWJsZQpkaWZmIC0tZ2l0IGEvZG9jL2djcnlwdC5pbmZvLTEgYi9kb2MvZ2NyeXB0LmluZm8tMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA5NWVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2djcnlwdC5pbmZvLTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2djcnlwdC5pbmZvLTIgYi9kb2MvZ2NyeXB0LmluZm8tMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE5ZjZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2djcnlwdC5pbmZvLTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2djcnlwdC50ZXhpIGIvZG9jL2djcnlwdC50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDkxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZ2NyeXB0LnRleGkKQEAgLTAsMCArMSw2MzIyIEBACitcaW5wdXQgdGV4aW5mbyAgICAgICAgICAgICAgICAgIEBjIC0qLSBUZXhpbmZvIC0qLQorQGMgJSoqc3RhcnQgb2YgaGVhZGVyCitAc2V0ZmlsZW5hbWUgZ2NyeXB0LmluZm8KK0BpbmNsdWRlIHZlcnNpb24udGV4aQorQHNldHRpdGxlIFRoZSBMaWJnY3J5cHQgUmVmZXJlbmNlIE1hbnVhbAorQGMgVW5pZnkgc29tZSBvZiB0aGUgaW5kaWNlcy4KK0BzeW5jb2RlaW5kZXggdHAgZm4KK0BzeW5jb2RlaW5kZXggcGcgZm4KK0BjICUqKmVuZCBvZiBoZWFkZXIKK0Bjb3B5aW5nCitUaGlzIG1hbnVhbCBpcyBmb3IgTGliZ2NyeXB0CisodmVyc2lvbiBAdmFsdWV7VkVSU0lPTn0sIEB2YWx1ZXtVUERBVEVEfSksCit3aGljaCBpcyBHTlUncyBsaWJyYXJ5IG9mIGNyeXB0b2dyYXBoaWMgYnVpbGRpbmcgYmxvY2tzLgorCitAbm9pbmRlbnQKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gQCoKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAxMiwgMjAxMyBnMTAgQ29kZSBHbWJICisKK0BxdW90YXRpb24KK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBUaGUgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UnJy4KK0BlbmQgcXVvdGF0aW9uCitAZW5kIGNvcHlpbmcKKworQGRpcmNhdGVnb3J5IEdOVSBMaWJyYXJpZXMKK0BkaXJlbnRyeQorKiBsaWJnY3J5cHQ6IChnY3J5cHQpLiAgQ3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiBsaWJyYXJ5LgorQGVuZCBkaXJlbnRyeQorCitAYyBBIGNvdXBsZSBvZiBtYWNyb3Mgd2l0aCBubyBlZmZlY3Qgb24gdGV4aW5mbworQGMgYnV0IHVzZWQgYnkgdGhlIHlhdDJtIHByb2Nlc3Nvci4KK0BtYWNybyBtYW5wYWdlIHthfQorQGVuZCBtYWNybworQG1hY3JvIG1hbnNlY3Qge2F9CitAZW5kIG1hY3JvCitAbWFjcm8gbWFucGF1c2UKK0BlbmQgbWFjcm8KK0BtYWNybyBtYW5jb250CitAZW5kIG1hY3JvCisKK0BjCitAYyBQcmludGluZyBzdHVmZiB0YWtlbiBmcm9tIGdjYy4KK0BjCitAbWFjcm8gZ251cGd0YWJvcHR7Ym9keX0KK0Bjb2Rle1xib2R5XH0KK0BlbmQgbWFjcm8KKworCitAYworQGMgVGl0bGVwYWdlCitAYworQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAorQHRpdGxlcGFnZQorQHRpdGxlIFRoZSBMaWJnY3J5cHQgUmVmZXJlbmNlIE1hbnVhbAorQHN1YnRpdGxlIFZlcnNpb24gQHZhbHVle1ZFUlNJT059CitAc3VidGl0bGUgQHZhbHVle1VQREFURUR9CitAYXV0aG9yIFdlcm5lciBLb2NoIChAZW1haWx7d2tAQGdudXBnLm9yZ30pCitAYXV0aG9yIE1vcml0eiBTY2h1bHRlIChAZW1haWx7bW9AQGcxMGNvZGUuY29tfSkKKworQHBhZ2UKK0B2c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAZW5kIHRpdGxlcGFnZQorCitAaWZub3RodG1sCitAc3VtbWFyeWNvbnRlbnRzCitAY29udGVudHMKK0BwYWdlCitAZW5kIGlmbm90aHRtbAorCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIFRoZSBMaWJnY3J5cHQgTGlicmFyeQorQGluc2VydGNvcHlpbmcKK0BlbmQgaWZub3R0ZXgKKworCitAbWVudQorKiBJbnRyb2R1Y3Rpb246OiAgICAgICAgICAgICAgICAgV2hhdCBpcyBMaWJnY3J5cHQuCisqIFByZXBhcmF0aW9uOjogICAgICAgICAgICAgICAgICBXaGF0IHlvdSBzaG91bGQgZG8gYmVmb3JlIHVzaW5nIHRoZSBsaWJyYXJ5LgorKiBHZW5lcmFsaXRpZXM6OiAgICAgICAgICAgICAgICAgR2VuZXJhbCBsaWJyYXJ5IGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcy4KKyogSGFuZGxlciBGdW5jdGlvbnM6OiAgICAgICAgICAgIFdvcmtpbmcgd2l0aCBoYW5kbGVyIGZ1bmN0aW9ucy4KKyogU3ltbWV0cmljIGNyeXB0b2dyYXBoeTo6ICAgICAgIEhvdyB0byB1c2Ugc3ltbWV0cmljIGNyeXB0b2dyYXBoeS4KKyogUHVibGljIEtleSBjcnlwdG9ncmFwaHk6OiAgICAgIEhvdyB0byB1c2UgcHVibGljIGtleSBjcnlwdG9ncmFwaHkuCisqIEhhc2hpbmc6OiAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIGhhc2ggYWxnb3JpdGhtcy4KKyogTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2Rlczo6IEhvdyB0byB1c2UgTUFDIGFsZ29yaXRobXMuCisqIEtleSBEZXJpdmF0aW9uOjogICAgICAgICAgICAgICBIb3cgdG8gZGVyaXZlIGtleXMgZnJvbSBzdHJpbmdzCisqIFJhbmRvbSBOdW1iZXJzOjogICAgICAgICAgICAgICBIb3cgdG8gd29yayB3aXRoIHJhbmRvbSBudW1iZXJzLgorKiBTLWV4cHJlc3Npb25zOjogICAgICAgICAgICAgICAgSG93IHRvIG1hbmFnZSBTLWV4cHJlc3Npb25zLgorKiBNUEkgbGlicmFyeTo6ICAgICAgICAgICAgICAgICAgSG93IHRvIHdvcmsgd2l0aCBtdWx0aS1wcmVjaXNpb24taW50ZWdlcnMuCisqIFByaW1lIG51bWJlcnM6OiAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoZSBQcmltZSBudW1iZXIgcmVsYXRlZCBmdW5jdGlvbnMuCisqIFV0aWxpdGllczo6ICAgICAgICAgICAgICAgICAgICBVdGlsaXR5IGZ1bmN0aW9ucy4KKyogVG9vbHM6OiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkgdG9vbHMKKyogQXJjaGl0ZWN0dXJlOjogICAgICAgICAgICAgICAgIEhvdyBMaWJnY3J5cHQgd29ya3MgaW50ZXJuYWxseS4KKworQXBwZW5kaWNlcworCisqIFNlbGYtVGVzdHM6OiAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHRoZSBzZWxmLXRlc3RzLgorKiBGSVBTIE1vZGU6OiAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB0aGUgRklQUyBtb2RlLgorKiBMaWJyYXJ5IENvcHlpbmc6OiAgICAgICAgICAgICBUaGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNheXMgaG93IHlvdSBjYW4gY29weSBhbmQgc2hhcmUgTGliZ2NyeXB0LgorKiBDb3B5aW5nOjogICAgICAgICAgICAgICAgICAgICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2F5cyBob3cgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBjb3B5IGFuZCBzaGFyZSBzb21lIHBhcnRzIG9mIExpYmdjcnlwdC4KKworSW5kaWNlcworCisqIEZpZ3VyZXMgYW5kIFRhYmxlczo6ICAgICAgICAgIEluZGV4IG9mIGZpZ3VyZXMgYW5kIHRhYmxlcy4KKyogQ29uY2VwdCBJbmRleDo6ICAgICAgICAgICAgICAgSW5kZXggb2YgY29uY2VwdHMgYW5kIHByb2dyYW1zLgorKiBGdW5jdGlvbiBhbmQgRGF0YSBJbmRleDo6ICAgICBJbmRleCBvZiBmdW5jdGlvbnMsIHZhcmlhYmxlcyBhbmQgZGF0YSB0eXBlcy4KKworQGVuZCBtZW51CisKK0BpZmh0bWwKK0BwYWdlCitAc3VtbWFyeWNvbnRlbnRzCitAY29udGVudHMKK0BlbmQgaWZodG1sCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgSW50cm9kdWN0aW9uICAqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgSW50cm9kdWN0aW9uCitAY2hhcHRlciBJbnRyb2R1Y3Rpb24KKworTGliZ2NyeXB0IGlzIGEgbGlicmFyeSBwcm92aWRpbmcgY3J5cHRvZ3JhcGhpYyBidWlsZGluZyBibG9ja3MuCisKK0BtZW51CisqIEdldHRpbmcgU3RhcnRlZDo6ICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBtYW51YWwuCisqIEZlYXR1cmVzOjogICAgICAgICAgICAgICAgICAgIEEgZ2xhbmNlIGF0IExpYmdjcnlwdCdzIGZlYXR1cmVzLgorKiBPdmVydmlldzo6ICAgICAgICAgICAgICAgICAgICBPdmVydmlldyBhYm91dCB0aGUgbGlicmFyeS4KK0BlbmQgbWVudQorCitAbm9kZSBHZXR0aW5nIFN0YXJ0ZWQKK0BzZWN0aW9uIEdldHRpbmcgU3RhcnRlZAorCitUaGlzIG1hbnVhbCBkb2N1bWVudHMgdGhlIExpYmdjcnlwdCBsaWJyYXJ5IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKEFQSSkuICBBbGwgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5CithcmUgZXhwbGFpbmVkLgorCitAbm9pbmRlbnQKK1RoZSByZWFkZXIgaXMgYXNzdW1lZCB0byBwb3NzZXNzIGJhc2ljIGtub3dsZWRnZSBhYm91dCBhcHBsaWVkCitjcnlwdG9ncmFwaHkuCisKK1RoaXMgbWFudWFsIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cy4gIElmIHJlYWQgZnJvbSB0aGUgYmVnaW5uaW5nCit0byB0aGUgZW5kLCBpdCBnaXZlcyBhIGdvb2QgaW50cm9kdWN0aW9uIGludG8gdGhlIGxpYnJhcnkgYW5kIGhvdyBpdAorY2FuIGJlIHVzZWQgaW4gYW4gYXBwbGljYXRpb24uICBGb3J3YXJkIHJlZmVyZW5jZXMgYXJlIGluY2x1ZGVkIHdoZXJlCituZWNlc3NhcnkuICBMYXRlciBvbiwgdGhlIG1hbnVhbCBjYW4gYmUgdXNlZCBhcyBhIHJlZmVyZW5jZSBtYW51YWwgdG8KK2dldCBqdXN0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYWJvdXQgYW55IHBhcnRpY3VsYXIgaW50ZXJmYWNlIG9mIHRoZQorbGlicmFyeS4gIEV4cGVyaWVuY2VkIHByb2dyYW1tZXJzIG1pZ2h0IHdhbnQgdG8gc3RhcnQgbG9va2luZyBhdCB0aGUKK2V4YW1wbGVzIGF0IHRoZSBlbmQgb2YgdGhlIG1hbnVhbCwgYW5kIHRoZW4gb25seSByZWFkIHVwIHRob3NlIHBhcnRzCitvZiB0aGUgaW50ZXJmYWNlIHdoaWNoIGFyZSB1bmNsZWFyLgorCisKK0Bub2RlIEZlYXR1cmVzCitAc2VjdGlvbiBGZWF0dXJlcworCitMaWJnY3J5cHQgbWlnaHQgaGF2ZSBhIGNvdXBsZSBvZiBhZHZhbnRhZ2VzIG92ZXIgb3RoZXIgbGlicmFyaWVzIGRvaW5nCithIHNpbWlsYXIgam9iLgorCitAdGFibGUgQGFzaXMKK0BpdGVtIEl0J3MgRnJlZSBTb2Z0d2FyZQorQW55Ym9keSBjYW4gdXNlLCBtb2RpZnksIGFuZCByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChAcHhyZWZ7TGlicmFyeSBDb3B5aW5nfSkuICBOb3RlLCB0aGF0Citzb21lIHBhcnRzICh3aGljaCBhcmUgaW4gZ2VuZXJhbCBub3QgbmVlZGVkIGJ5IGFwcGxpY2F0aW9ucykgYXJlIHN1YmplY3QKK3RvIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEBweHJlZntDb3B5aW5nfSk7IHBsZWFzZQorc2VlIHRoZSBSRUFETUUgZmlsZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGZvciBvZiBsaXN0IG9mIHRoZXNlIHBhcnRzLgorCitAaXRlbSBJdCBlbmNhcHN1bGF0ZXMgdGhlIGxvdyBsZXZlbCBjcnlwdG9ncmFwaHkKK0xpYmdjcnlwdCBwcm92aWRlcyBhIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHRvIGNyeXB0b2dyYXBoaWMKK2J1aWxkaW5nIGJsb2NrcyB1c2luZyBhbiBleHRlbnNpYmxlIGFuZCBmbGV4aWJsZSBBUEkuCisKK0BlbmQgdGFibGUKKworQG5vZGUgT3ZlcnZpZXcKK0BzZWN0aW9uIE92ZXJ2aWV3CisKK0Bub2luZGVudAorVGhlIExpYmdjcnlwdCBsaWJyYXJ5IGlzIGZ1bGx5IHRocmVhZC1zYWZlLCB3aGVyZSBpdCBtYWtlcworc2Vuc2UgdG8gYmUgdGhyZWFkLXNhZmUuICBOb3QgdGhyZWFkLXNhZmUgYXJlIHNvbWUgY3J5cHRvZ3JhcGhpYworZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IGEgY2VydGFpbiBjb250ZXh0IHN0b3JlZCBpbiBoYW5kbGVzLiAgSWYgdGhlCit1c2VyIHJlYWxseSBpbnRlbnRzIHRvIHVzZSBzdWNoIGZ1bmN0aW9ucyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIG9uCit0aGUgc2FtZSBoYW5kbGUsIGhlIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhlIHNlcmlhbGl6YXRpb24gb2Ygc3VjaAorZnVuY3Rpb25zIGhpbXNlbGYuICBJZiBub3QgZGVzY3JpYmVkIG90aGVyd2lzZSwgZXZlcnkgZnVuY3Rpb24gaXMKK3RocmVhZC1zYWZlLgorCitMaWJnY3J5cHQgZGVwZW5kcyBvbiB0aGUgbGlicmFyeSBgbGliZ3BnLWVycm9yJywgd2hpY2gKK2NvbnRhaW5zIGNvbW1vbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIGNvZGUgZm9yIEdudVBHIGNvbXBvbmVudHMuCisKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKiogIFByZXBhcmF0aW9uICAqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Bub2RlIFByZXBhcmF0aW9uCitAY2hhcHRlciBQcmVwYXJhdGlvbgorCitUbyB1c2UgTGliZ2NyeXB0LCB5b3UgaGF2ZSB0byBwZXJmb3JtIHNvbWUgY2hhbmdlcyB0byB5b3VyCitzb3VyY2VzIGFuZCB0aGUgYnVpbGQgc3lzdGVtLiAgVGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIGFyZSBzbWFsbCBhbmQKK2V4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLiAgQXQgdGhlIGVuZCBvZiB0aGlzIGNoYXB0ZXIsIGl0CitpcyBkZXNjcmliZWQgaG93IHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLCBhbmQgaG93IHRoZSByZXF1aXJlbWVudHMKK29mIHRoZSBsaWJyYXJ5IGFyZSB2ZXJpZmllZC4KKworQG1lbnUKKyogSGVhZGVyOjogICAgICAgICAgICAgICAgICAgICAgV2hhdCBoZWFkZXIgZmlsZSB5b3UgbmVlZCB0byBpbmNsdWRlLgorKiBCdWlsZGluZyBzb3VyY2VzOjogICAgICAgICAgICBIb3cgdG8gYnVpbGQgc291cmNlcyB1c2luZyB0aGUgbGlicmFyeS4KKyogQnVpbGRpbmcgc291cmNlcyB1c2luZyBBdXRvbWFrZTo6ICBIb3cgdG8gYnVpbGQgc291cmNlcyB3aXRoIHRoZSBoZWxwIG9mIEF1dG9tYWtlLgorKiBJbml0aWFsaXppbmcgdGhlIGxpYnJhcnk6OiAgICBIb3cgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4KKyogTXVsdGktVGhyZWFkaW5nOjogICAgICAgICAgICAgSG93IExpYmdjcnlwdCBjYW4gYmUgdXNlZCBpbiBhIE1UIGVudmlyb25tZW50LgorKiBFbmFibGluZyBGSVBTIG1vZGU6OiAgICAgICAgICBIb3cgdG8gZW5hYmxlIHRoZSBGSVBTIG1vZGUuCisqIEhhcmR3YXJlIGZlYXR1cmVzOjogICAgICAgICAgIEhvdyB0byBkaXNhYmxlIGhhcmR3YXJlIGZlYXR1cmVzLgorQGVuZCBtZW51CisKKworQG5vZGUgSGVhZGVyCitAc2VjdGlvbiBIZWFkZXIKKworQWxsIGludGVyZmFjZXMgKGRhdGEgdHlwZXMgYW5kIGZ1bmN0aW9ucykgb2YgdGhlIGxpYnJhcnkgYXJlIGRlZmluZWQKK2luIHRoZSBoZWFkZXIgZmlsZSBAZmlsZXtnY3J5cHQuaH0uICBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgaW4gYWxsIHNvdXJjZQorZmlsZXMgdXNpbmcgdGhlIGxpYnJhcnksIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIHNvbWUgb3RoZXIgaGVhZGVyCitmaWxlLCBsaWtlIHRoaXM6CisKK0BleGFtcGxlCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CitAZW5kIGV4YW1wbGUKKworVGhlIG5hbWUgc3BhY2Ugb2YgTGliZ2NyeXB0IGlzIEBjb2Rle2djcnlfKn0gZm9yIGZ1bmN0aW9uCithbmQgdHlwZSBuYW1lcyBhbmQgQGNvZGV7R0NSWSp9IGZvciBvdGhlciBzeW1ib2xzLiAgSW4gYWRkaXRpb24gdGhlCitzYW1lIG5hbWUgcHJlZml4ZXMgd2l0aCBvbmUgcHJlcGVuZGVkIHVuZGVyc2NvcmUgYXJlIHJlc2VydmVkIGZvcgoraW50ZXJuYWwgdXNlIGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSBhbiBhcHBsaWNhdGlvbi4gIE5vdGUgdGhhdAorTGliZ2NyeXB0IHVzZXMgbGliZ3BnLWVycm9yLCB3aGljaCB1c2VzIEBjb2Rle2dwZ18qfSBhcworbmFtZSBzcGFjZSBmb3IgZnVuY3Rpb24gYW5kIHR5cGUgbmFtZXMgYW5kIEBjb2Rle0dQR18qfSBmb3Igb3RoZXIKK3N5bWJvbHMsIGluY2x1ZGluZyBhbGwgdGhlIGVycm9yIGNvZGVzLgorCitAbm9pbmRlbnQKK0NlcnRhaW4gcGFydHMgb2YgZ2NyeXB0LmggbWF5IGJlIGV4Y2x1ZGVkIGJ5IGRlZmluaW5nIHRoZXNlIG1hY3JvczoKKworQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZUFRfTk9fTVBJX01BQ1JPUworRG8gbm90IGRlZmluZSB0aGUgc2hvcnRoYW5kIG1hY3JvcyBAY29kZXttcGlfKn0gZm9yIEBjb2Rle2djcnlfbXBpXyp9LgorCitAaXRlbSBHQ1JZUFRfTk9fREVQUkVDQVRFRAorRG8gbm90IGluY2x1ZGUgZGVmaW5pdGlvbnMgZm9yIGRlcHJlY2F0ZWQgZmVhdHVyZXMuICBUaGlzIGlzIHVzZWZ1bCB0bworbWFrZSBzdXJlIHRoYXQgbm8gZGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgdXNlZC4KK0BlbmQgdGFibGUKKworQG5vZGUgQnVpbGRpbmcgc291cmNlcworQHNlY3Rpb24gQnVpbGRpbmcgc291cmNlcworCitJZiB5b3Ugd2FudCB0byBjb21waWxlIGEgc291cmNlIGZpbGUgaW5jbHVkaW5nIHRoZSBgZ2NyeXB0LmgnIGhlYWRlcgorZmlsZSwgeW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGNhbiBmaW5kIGl0IGluIHRoZQorZGlyZWN0b3J5IGhpZXJhcmNoeS4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGFkZGluZyB0aGUgcGF0aCB0byB0aGUKK2RpcmVjdG9yeSBpbiB3aGljaCB0aGUgaGVhZGVyIGZpbGUgaXMgbG9jYXRlZCB0byB0aGUgY29tcGlsZXJzIGluY2x1ZGUKK2ZpbGUgc2VhcmNoIHBhdGggKHZpYSB0aGUgQG9wdGlvbnstSX0gb3B0aW9uKS4KKworSG93ZXZlciwgdGhlIHBhdGggdG8gdGhlIGluY2x1ZGUgZmlsZSBpcyBkZXRlcm1pbmVkIGF0IHRoZSB0aW1lIHRoZQorc291cmNlIGlzIGNvbmZpZ3VyZWQuICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIExpYmdjcnlwdCBzaGlwcyB3aXRoIGEgc21hbGwKK2hlbHBlciBwcm9ncmFtIEBjb21tYW5ke2xpYmdjcnlwdC1jb25maWd9IHRoYXQga25vd3MgdGhlIHBhdGggdG8gdGhlCitpbmNsdWRlIGZpbGUgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIFRoZSBvcHRpb25zIHRoYXQgbmVlZAordG8gYmUgYWRkZWQgdG8gdGhlIGNvbXBpbGVyIGludm9jYXRpb24gYXQgY29tcGlsZSB0aW1lIGFyZSBvdXRwdXQgYnkKK3RoZSBAb3B0aW9uey0tY2ZsYWdzfSBvcHRpb24gdG8gQGNvbW1hbmR7bGliZ2NyeXB0LWNvbmZpZ30uICBUaGUgZm9sbG93aW5nCitleGFtcGxlIHNob3dzIGhvdyBpdCBjYW4gYmUgdXNlZCBhdCB0aGUgY29tbWFuZCBsaW5lOgorCitAZXhhbXBsZQorZ2NjIC1jIGZvby5jIGBsaWJnY3J5cHQtY29uZmlnIC0tY2ZsYWdzYAorQGVuZCBleGFtcGxlCisKK0FkZGluZyB0aGUgb3V0cHV0IG9mIEBzYW1we2xpYmdjcnlwdC1jb25maWcgLS1jZmxhZ3N9IHRvIHRoZSBjb21waWxlcnMKK2NvbW1hbmQgbGluZSB3aWxsIGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciBjYW4gZmluZCB0aGUgTGliZ2NyeXB0IGhlYWRlcgorZmlsZS4KKworQSBzaW1pbGFyIHByb2JsZW0gb2NjdXJzIHdoZW4gbGlua2luZyB0aGUgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LgorQWdhaW4sIHRoZSBjb21waWxlciBoYXMgdG8gZmluZCB0aGUgbGlicmFyeSBmaWxlcy4gIEZvciB0aGlzIHRvIHdvcmssCit0aGUgcGF0aCB0byB0aGUgbGlicmFyeSBmaWxlcyBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGgKKyh2aWEgdGhlIEBvcHRpb257LUx9IG9wdGlvbikuICBGb3IgdGhpcywgdGhlIG9wdGlvbiBAb3B0aW9uey0tbGlic30gdG8KK0Bjb21tYW5ke2xpYmdjcnlwdC1jb25maWd9IGNhbiBiZSB1c2VkLiAgRm9yIGNvbnZlbmllbmNlLCB0aGlzIG9wdGlvbgorYWxzbyBvdXRwdXRzIGFsbCBvdGhlciBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGxpbmsgdGhlIHByb2dyYW0KK3dpdGggdGhlIExpYmdjcnlwdCBsaWJyYXJpZXMgKGluIHBhcnRpY3VsYXIsIHRoZSBAc2FtcHstbGdjcnlwdH0KK29wdGlvbikuICBUaGUgZXhhbXBsZSBzaG93cyBob3cgdG8gbGluayBAZmlsZXtmb28ub30gd2l0aCB0aGUgTGliZ2NyeXB0CitsaWJyYXJ5IHRvIGEgcHJvZ3JhbSBAY29tbWFuZHtmb299LgorCitAZXhhbXBsZQorZ2NjIC1vIGZvbyBmb28ubyBgbGliZ2NyeXB0LWNvbmZpZyAtLWxpYnNgCitAZW5kIGV4YW1wbGUKKworT2YgY291cnNlIHlvdSBjYW4gYWxzbyBjb21iaW5lIGJvdGggZXhhbXBsZXMgdG8gYSBzaW5nbGUgY29tbWFuZCBieQorc3BlY2lmeWluZyBib3RoIG9wdGlvbnMgdG8gQGNvbW1hbmR7bGliZ2NyeXB0LWNvbmZpZ306CisKK0BleGFtcGxlCitnY2MgLW8gZm9vIGZvby5jIGBsaWJnY3J5cHQtY29uZmlnIC0tY2ZsYWdzIC0tbGlic2AKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBCdWlsZGluZyBzb3VyY2VzIHVzaW5nIEF1dG9tYWtlCitAc2VjdGlvbiBCdWlsZGluZyBzb3VyY2VzIHVzaW5nIEF1dG9tYWtlCisKK0l0IGlzIG11Y2ggZWFzaWVyIGlmIHlvdSB1c2UgR05VIEF1dG9tYWtlIGluc3RlYWQgb2Ygd3JpdGluZyB5b3VyIG93bgorTWFrZWZpbGVzLiAgSWYgeW91IGRvIHRoYXQsIHlvdSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmaW5kaW5nIGFuZAoraW52b2tpbmcgdGhlIEBjb21tYW5ke2xpYmdjcnlwdC1jb25maWd9IHNjcmlwdCBhdCBhbGwuCitMaWJnY3J5cHQgcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIHRvIEF1dG9tYWtlIHRoYXQgZG9lcyBhbGwKK3RoZSB3b3JrIGZvciB5b3UuCisKK0BjIEEgc2ltcGxlIG1hY3JvIGZvciBvcHRpb25hbCB2YXJpYWJsZXMuCitAbWFjcm8gb3Zhcnt2YXJuYW1lfQorQHJ7W31AdmFye1x2YXJuYW1lXH1AcntdfQorQGVuZCBtYWNybworQGRlZm1hYyBBTV9QQVRIX0xJQkdDUllQVCAoQG92YXJ7bWluaW11bS12ZXJzaW9ufSwgQG92YXJ7YWN0aW9uLWlmLWZvdW5kfSwgQG92YXJ7YWN0aW9uLWlmLW5vdC1mb3VuZH0pCitDaGVjayB3aGV0aGVyIExpYmdjcnlwdCAoYXQgbGVhc3QgdmVyc2lvbgorQHZhcnttaW5pbXVtLXZlcnNpb259LCBpZiBnaXZlbikgZXhpc3RzIG9uIHRoZSBob3N0IHN5c3RlbS4gIElmIGl0IGlzCitmb3VuZCwgZXhlY3V0ZSBAdmFye2FjdGlvbi1pZi1mb3VuZH0sIG90aGVyd2lzZSBkbworQHZhcnthY3Rpb24taWYtbm90LWZvdW5kfSwgaWYgZ2l2ZW4uCisKK0FkZGl0aW9uYWxseSwgdGhlIGZ1bmN0aW9uIGRlZmluZXMgQGNvZGV7TElCR0NSWVBUX0NGTEFHU30gdG8gdGhlCitmbGFncyBuZWVkZWQgZm9yIGNvbXBpbGF0aW9uIG9mIHRoZSBwcm9ncmFtIHRvIGZpbmQgdGhlCitAZmlsZXtnY3J5cHQuaH0gaGVhZGVyIGZpbGUsIGFuZCBAY29kZXtMSUJHQ1JZUFRfTElCU30gdG8gdGhlIGxpbmtlcgorZmxhZ3MgbmVlZGVkIHRvIGxpbmsgdGhlIHByb2dyYW0gdG8gdGhlIExpYmdjcnlwdCBsaWJyYXJ5LgorQGVuZCBkZWZtYWMKKworWW91IGNhbiB1c2UgdGhlIGRlZmluZWQgQXV0b2NvbmYgdmFyaWFibGVzIGxpa2UgdGhpcyBpbiB5b3VyCitAZmlsZXtNYWtlZmlsZS5hbX06CisKK0BleGFtcGxlCitBTV9DUFBGTEFHUyA9ICQoTElCR0NSWVBUX0NGTEFHUykKK0xEQUREID0gJChMSUJHQ1JZUFRfTElCUykKK0BlbmQgZXhhbXBsZQorCitAbm9kZSBJbml0aWFsaXppbmcgdGhlIGxpYnJhcnkKK0BzZWN0aW9uIEluaXRpYWxpemluZyB0aGUgbGlicmFyeQorCitCZWZvcmUgdGhlIGxpYnJhcnkgY2FuIGJlIHVzZWQsIGl0IG11c3QgaW5pdGlhbGl6ZSBpdHNlbGYuICBUaGlzIGlzCithY2hpZXZlZCBieSBpbnZva2luZyB0aGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSBkZXNjcmliZWQKK2JlbG93LgorCitBbHNvLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBvZgorTGliZ2NyeXB0IHVzZWQgaXMgaW5kZWVkIG9uZSB3aGljaCBmaXRzIGFsbCByZXF1aXJlbWVudHMuCitFdmVuIHdpdGggYmluYXJ5IGNvbXBhdGliaWxpdHksIG5ldyBmZWF0dXJlcyBtYXkgaGF2ZSBiZWVuIGludHJvZHVjZWQsCitidXQgZHVlIHRvIHByb2JsZW0gd2l0aCB0aGUgZHluYW1pYyBsaW5rZXIgYW4gb2xkIHZlcnNpb24gbWF5IGFjdHVhbGx5CitiZSB1c2VkLiAgU28geW91IG1heSB3YW50IHRvIGNoZWNrIHRoYXQgdGhlIHZlcnNpb24gaXMgb2theSByaWdodAorYWZ0ZXIgcHJvZ3JhbSBzdGFydHVwLgorCitAZGVmdHlwZWZ1biB7Y29uc3QgY2hhciAqfSBnY3J5X2NoZWNrX3ZlcnNpb24gKGNvbnN0IGNoYXIgKkB2YXJ7cmVxX3ZlcnNpb259KQorCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSBpbml0aWFsaXplcyBzb21lIHN1YnN5c3RlbXMgdXNlZAorYnkgTGliZ2NyeXB0IGFuZCBtdXN0IGJlIGludm9rZWQgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbiBpbiB0aGUKK2xpYnJhcnksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgQGNvZGV7R0NSWUNUTF9TRVRfVEhSRUFEX0NCU30gY29tbWFuZAorKGNhbGxlZCB2aWEgdGhlIEBjb2Rle2djcnlfY29udHJvbH0gZnVuY3Rpb24pLgorQHhyZWZ7TXVsdGktVGhyZWFkaW5nfS4KKworRnVydGhlcm1vcmUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkuCitJdCBjYW4gYWxzbyB2ZXJpZnkgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgaGlnaGVyIHRoYW4gYSBjZXJ0YWluCityZXF1aXJlZCB2ZXJzaW9uIG51bWJlciBAdmFye3JlcV92ZXJzaW9ufSwgaWYgdGhpcyB2YWx1ZSBpcyBub3QgYSBudWxsCitwb2ludGVyLgorQGVuZCBkZWZ0eXBlZnVuCisKK0xpYmdjcnlwdCB1c2VzIGEgY29uY2VwdCBrbm93biBhcyBzZWN1cmUgbWVtb3J5LCB3aGljaCBpcyBhIHJlZ2lvbiBvZgorbWVtb3J5IHNldCBhc2lkZSBmb3Igc3RvcmluZyBzZW5zaXRpdmUgZGF0YS4gIEJlY2F1c2Ugc3VjaCBtZW1vcnkgaXMgYQorc2NhcmNlIHJlc291cmNlLCBpdCBuZWVkcyB0byBiZSBzZXR1cCBpbiBhZHZhbmNlZCB0byBhIGZpeGVkIHNpemUuCitGdXJ0aGVyLCBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgb24gaG93IHRoYXQKK3NlY3VyZSBtZW1vcnkgY2FuIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gaW5zdGFsbAorYW4gYXBwbGljYXRpb24gYXMgYGBzZXR1aWQocm9vdCknJyB0byBhbGxvdyBhbGxvY2F0aW5nIHN1Y2ggbWVtb3J5LgorTGliZ2NyeXB0IHJlcXVpcmVzIGEgc2VxdWVuY2Ugb2YgaW5pdGlhbGl6YXRpb24gc3RlcHMgdG8gbWFrZSBzdXJlIHRoYXQKK3RoaXMgd29ya3MgY29ycmVjdGx5LiAgVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IHRoZSBuZWNlc3Nhcnkgc3RlcHMuCisKK0lmIHlvdSBkb24ndCBoYXZlIGEgbmVlZCBmb3Igc2VjdXJlIG1lbW9yeSwgZm9yIGV4YW1wbGUgaWYgeW91cgorYXBwbGljYXRpb24gZG9lcyBub3QgdXNlIHNlY3JldCBrZXlzIG9yIG90aGVyIGNvbmZpZGVudGlhbCBkYXRhIG9yIGl0CitydW5zIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCB3aGVyZSBrZXkgbWF0ZXJpYWwgZmxvYXRpbmcgYXJvdW5kIGluCittZW1vcnkgaXMgbm90IGEgcHJvYmxlbSwgeW91IHNob3VsZCBpbml0aWFsaXplIExpYmdjcnlwdCB0aGlzIHdheToKKworQGV4YW1wbGUKKyAgLyogVmVyc2lvbiBjaGVjayBzaG91bGQgYmUgdGhlIHZlcnkgZmlyc3QgY2FsbCBiZWNhdXNlIGl0CisgICAgIG1ha2VzIHN1cmUgdGhhdCBpbXBvcnRhbnQgc3Vic3lzdGVtcyBhcmUgaW50aWFsaXplZC4gKi8KKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICBAeworICAgICAgZnB1dHMgKCJsaWJnY3J5cHQgdmVyc2lvbiBtaXNtYXRjaFxuIiwgc3RkZXJyKTsKKyAgICAgIGV4aXQgKDIpOworICAgIEB9CisKKyAgLyogRGlzYWJsZSBzZWN1cmUgbWVtb3J5LiAgKi8KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKworICAvKiAuLi4gSWYgcmVxdWlyZWQsIG90aGVyIGluaXRpYWxpemF0aW9uIGdvZXMgaGVyZS4gICovCisKKyAgLyogVGVsbCBMaWJnY3J5cHQgdGhhdCBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLiAqLworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworQGVuZCBleGFtcGxlCisKKworSWYgeW91IGhhdmUgdG8gcHJvdGVjdCB5b3VyIGtleXMgb3Igb3RoZXIgaW5mb3JtYXRpb24gaW4gbWVtb3J5IGFnYWluc3QKK2JlaW5nIHN3YXBwZWQgb3V0IHRvIGRpc2sgYW5kIHRvIGVuYWJsZSBhbiBhdXRvbWF0aWMgb3ZlcndyaXRlIG9mIHVzZWQKK2FuZCBmcmVlZCBtZW1vcnksIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgTGliZ2NyeXB0IHRoaXMgd2F5OgorCitAZXhhbXBsZQorICAvKiBWZXJzaW9uIGNoZWNrIHNob3VsZCBiZSB0aGUgdmVyeSBmaXJzdCBjYWxsIGJlY2F1c2UgaXQKKyAgICAgbWFrZXMgc3VyZSB0aGF0IGltcG9ydGFudCBzdWJzeXN0ZW1zIGFyZSBpbml0aWFsaXplZC4gKi8KKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICBAeworICAgICAgZnB1dHMgKCJsaWJnY3J5cHQgdmVyc2lvbiBtaXNtYXRjaFxuIiwgc3RkZXJyKTsKKyAgICAgIGV4aXQgKDIpOworICAgIEB9CisKK0BhbmNob3J7c2FtcGxlLXVzZS1zdXNwZW5kLXNlY21lbX0KKyAgLyogV2UgZG9uJ3Qgd2FudCB0byBzZWUgYW55IHdhcm5pbmdzLCBlLmcuIGJlY2F1c2Ugd2UgaGF2ZSBub3QgeWV0CisgICAgIHBhcnNlZCBwcm9ncmFtIG9wdGlvbnMgd2hpY2ggbWlnaHQgYmUgdXNlZCB0byBzdXBwcmVzcyBzdWNoCisgICAgIHdhcm5pbmdzLiAqLworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU1VTUEVORF9TRUNNRU1fV0FSTik7CisKKyAgLyogLi4uIElmIHJlcXVpcmVkLCBvdGhlciBpbml0aWFsaXphdGlvbiBnb2VzIGhlcmUuICBOb3RlIHRoYXQgdGhlCisgICAgIHByb2Nlc3MgbWlnaHQgc3RpbGwgYmUgcnVubmluZyB3aXRoIGluY3JlYXNlZCBwcml2aWxlZ2VzIGFuZCB0aGF0CisgICAgIHRoZSBzZWN1cmUgbWVtb3J5IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4gICovCisKKyAgLyogQWxsb2NhdGUgYSBwb29sIG9mIDE2ayBzZWN1cmUgbWVtb3J5LiAgVGhpcyBtYWtlIHRoZSBzZWN1cmUgbWVtb3J5CisgICAgIGF2YWlsYWJsZSBhbmQgYWxzbyBkcm9wcyBwcml2aWxlZ2VzIHdoZXJlIG5lZWRlZC4gICovCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUX1NFQ01FTSwgMTYzODQsIDApOworCitAYW5jaG9ye3NhbXBsZS11c2UtcmVzdW1lLXNlY21lbX0KKyAgLyogSXQgaXMgbm93IG9rYXkgdG8gbGV0IExpYmdjcnlwdCBjb21wbGFpbiB3aGVuIHRoZXJlIHdhcy9pcworICAgICBhIHByb2JsZW0gd2l0aCB0aGUgc2VjdXJlIG1lbW9yeS4gKi8KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1JFU1VNRV9TRUNNRU1fV0FSTik7CisKKyAgLyogLi4uIElmIHJlcXVpcmVkLCBvdGhlciBpbml0aWFsaXphdGlvbiBnb2VzIGhlcmUuICAqLworCisgIC8qIFRlbGwgTGliZ2NyeXB0IHRoYXQgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZC4gKi8KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKK0BlbmQgZXhhbXBsZQorCitJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgbm90IGRvbmUgYnkgYQorbGlicmFyeSBidXQgYnkgdGhlIGFjdHVhbCBhcHBsaWNhdGlvbi4gIEEgbGlicmFyeSB1c2luZyBMaWJnY3J5cHQgbWlnaHQKK3dhbnQgdG8gY2hlY2sgZm9yIGZpbmlzaGVkIGluaXRpYWxpemF0aW9uIHVzaW5nOgorCitAZXhhbXBsZQorICBpZiAoIWdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRF9QKSkKKyAgICBAeworICAgICAgZnB1dHMgKCJsaWJnY3J5cHQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXG4iLCBzdGRlcnIpOworICAgICAgYWJvcnQgKCk7CisgICAgQH0KK0BlbmQgZXhhbXBsZQorCitJbnN0ZWFkIG9mIHRlcm1pbmF0aW5nIHRoZSBwcm9jZXNzLCB0aGUgbGlicmFyeSBtYXkgaW5zdGVhZCBwcmludCBhCit3YXJuaW5nIGFuZCB0cnkgdG8gaW5pdGlhbGl6ZSBMaWJnY3J5cHQgaXRzZWxmLiAgU2VlIGFsc28gdGhlIHNlY3Rpb24gb24KK211bHRpLXRocmVhZGluZyBiZWxvdyBmb3IgbW9yZSBwaXRmYWxscy4KKworCisKK0Bub2RlIE11bHRpLVRocmVhZGluZworQHNlY3Rpb24gTXVsdGktVGhyZWFkaW5nCisKK0FzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgTGliZ2NyeXB0IGxpYnJhcnkgaXMKK3RocmVhZC1zYWZlIGlmIHlvdSBhZGhlcmUgdG8gdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitJZiB5b3VyIGFwcGxpY2F0aW9uIGlzIG11bHRpLXRocmVhZGVkLCB5b3UgbXVzdCBzZXQgdGhlIHRocmVhZCBzdXBwb3J0CitjYWxsYmFja3Mgd2l0aCB0aGUgQGNvZGV7R0NSWUNUTF9TRVRfVEhSRUFEX0NCU30gY29tbWFuZAorQHN0cm9uZ3tiZWZvcmV9IGFueSBvdGhlciBmdW5jdGlvbiBpbiB0aGUgbGlicmFyeS4KKworVGhpcyBpcyBlYXN5IGVub3VnaCBpZiB5b3UgYXJlIGluZGVlZCB3cml0aW5nIGFuIGFwcGxpY2F0aW9uIHVzaW5nCitMaWJnY3J5cHQuICBJdCBpcyByYXRoZXIgcHJvYmxlbWF0aWMgaWYgeW91IGFyZSB3cml0aW5nIGEgbGlicmFyeQoraW5zdGVhZC4gIEhlcmUgYXJlIHNvbWUgdGlwcyB3aGF0IHRvIGRvIGlmIHlvdSBhcmUgd3JpdGluZyBhIGxpYnJhcnk6CisKK0lmIHlvdXIgbGlicmFyeSByZXF1aXJlcyBhIGNlcnRhaW4gdGhyZWFkIHBhY2thZ2UsIGp1c3QgaW5pdGlhbGl6ZQorTGliZ2NyeXB0IHRvIHVzZSB0aGlzIHRocmVhZCBwYWNrYWdlLiAgSWYgeW91ciBsaWJyYXJ5IHN1cHBvcnRzIG11bHRpcGxlCit0aHJlYWQgcGFja2FnZXMsIGJ1dCBuZWVkcyB0byBiZSBjb25maWd1cmVkLCB5b3Ugd2lsbCBoYXZlIHRvCitpbXBsZW1lbnQgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIHRocmVhZCBwYWNrYWdlIHRoZSBhcHBsaWNhdGlvbgord2FudHMgdG8gdXNlIHdpdGggeW91ciBsaWJyYXJ5IGFueXdheS4gIFRoZW4gY29uZmlndXJlIExpYmdjcnlwdCB0byB1c2UKK3RoaXMgdGhyZWFkIHBhY2thZ2UuCisKK0lmIHlvdXIgbGlicmFyeSBpcyBmdWxseSByZWVudHJhbnQgd2l0aG91dCBhbnkgc3BlY2lhbCBzdXBwb3J0IGJ5IGEKK3RocmVhZCBwYWNrYWdlLCB0aGVuIHlvdSBhcmUgbHVja3kgaW5kZWVkLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzCitub3QgcmVsaWV2ZSB5b3UgZnJvbSBkb2luZyBlaXRoZXIgb2YgdGhlIHR3byBhYm92ZSwgb3IgdXNlIGEgdGhpcmQKK29wdGlvbi4gIFRoZSB0aGlyZCBvcHRpb24gaXMgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBpbml0aWFsaXplIExpYmdjcnlwdAorZm9yIHlvdS4gIFRoZW4geW91IGFyZSBub3QgdXNpbmcgTGliZ2NyeXB0IHRyYW5zcGFyZW50bHksIHRob3VnaC4KKworQXMgaWYgdGhpcyB3YXMgbm90IGRpZmZpY3VsdCBlbm91Z2gsIGEgY29uZmxpY3QgbWF5IGFyaXNlIGlmIHR3bworbGlicmFyaWVzIHRyeSB0byBpbml0aWFsaXplIExpYmdjcnlwdCBpbmRlcGVuZGVudGx5IG9mIGVhY2ggb3RoZXJzLCBhbmQKK2JvdGggc3VjaCBsaWJyYXJpZXMgYXJlIHRoZW4gbGlua2VkIGludG8gdGhlIHNhbWUgYXBwbGljYXRpb24uICBUbworbWFrZSBpdCBhIGJpdCBzaW1wbGVyIGZvciB5b3UsIHRoaXMgd2lsbCBwcm9iYWJseSB3b3JrLCBidXQgb25seSBpZgorYm90aCBsaWJyYXJpZXMgaGF2ZSB0aGUgc2FtZSByZXF1aXJlbWVudCBmb3IgdGhlIHRocmVhZCBwYWNrYWdlLiAgVGhpcworaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgbm9uLXRocmVhZGVkIGNhc2UsIEdOVSBQdGggYW5kCitwdGhyZWFkLgorCitJZiB5b3UgdXNlIHB0aHJlYWQgYW5kIHlvdXIgYXBwbGljYXRpb25zIGZvcmtzIGFuZCBkb2VzIG5vdCBkaXJlY3RseQorY2FsbCBleGVjIChldmVuIGNhbGxpbmcgc3RkaW8gZnVuY3Rpb25zKSwgYWxsIGtpbmQgb2YgcHJvYmxlbXMgbWF5CitvY2N1ci4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBMaWJnY3J5cHQgd2lsbCB0cnkgdG8gY2xlYW51cCB1c2luZworcHRocmVhZF9hdGZvcmsgYnV0IGV2ZW4gdGhhdCBtYXkgbGVhZCB0byBwcm9ibGVtcy4gIFRoaXMgaXMgYSBjb21tb24KK3Byb2JsZW0gd2l0aCBhbG1vc3QgYWxsIGFwcGxpY2F0aW9ucyB1c2luZyBwdGhyZWFkIGFuZCBmb3JrLgorCitOb3RlIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIExpYmdjcnlwdCB3aWxsIGRyb3AgdGhpcyBmbGV4aWJsZSB0aHJlYWQKK3N1cHBvcnQgYW5kIGluc3RlYWQgb25seSBzdXBwb3J0IHRoZSBwbGF0Zm9ybXMgc3RhbmRhcmQgdGhyZWFkCitpbXBsZW1lbnRhdGlvbi4KKworCitAaXRlbQorVGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlcgorZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnksIGV4Y2VwdCB0aGUgQGNvZGV7R0NSWUNUTF9TRVRfVEhSRUFEX0NCU30KK2NvbW1hbmQgKGNhbGxlZCB2aWEgdGhlIEBjb2Rle2djcnlfY29udHJvbH0gZnVuY3Rpb24pLCBiZWNhdXNlIGl0Citpbml0aWFsaXplcyB0aGUgdGhyZWFkIHN1cHBvcnQgc3Vic3lzdGVtIGluIExpYmdjcnlwdC4gIFRvCithY2hpZXZlIHRoaXMgaW4gbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMsIHlvdSBtdXN0IHN5bmNocm9uaXplIHRoZQorbWVtb3J5IHdpdGggcmVzcGVjdCB0byBvdGhlciB0aHJlYWRzIHRoYXQgYWxzbyB3YW50IHRvIHVzZQorTGliZ2NyeXB0LiAgRm9yIHRoaXMsIGl0IGlzIHN1ZmZpY2llbnQgdG8gY2FsbAorQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSBiZWZvcmUgY3JlYXRpbmcgdGhlIG90aGVyIHRocmVhZHMgdXNpbmcKK0xpYmdjcnlwdEBmb290bm90ZXtBdCBsZWFzdCB0aGlzIGlzIHRydWUgZm9yIFBPU0lYIHRocmVhZHMsCithcyBAY29kZXtwdGhyZWFkX2NyZWF0ZX0gaXMgYSBmdW5jdGlvbiB0aGF0IHN5bmNocm9uaXplcyBtZW1vcnkgd2l0aAorcmVzcGVjdHMgdG8gb3RoZXIgdGhyZWFkcy4gIFRoZXJlIGFyZSBtYW55IGZ1bmN0aW9ucyB3aGljaCBoYXZlIHRoaXMKK3Byb3BlcnR5LCBhIGNvbXBsZXRlIGxpc3QgY2FuIGJlIGZvdW5kIGluIFBPU0lYLCBJRUVFIFN0ZCAxMDAzLjEtMjAwMywKK0Jhc2UgRGVmaW5pdGlvbnMsIElzc3VlIDYsIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSB0ZXJtIGBgTWVtb3J5CitTeW5jaHJvbml6YXRpb24nJy4gIEZvciBvdGhlciB0aHJlYWQgcGFja2FnZXMsIG1vcmUgcmVsYXhlZCBvciBtb3JlCitzdHJpY3QgcnVsZXMgbWF5IGFwcGx5Ln0uCisKK0BpdGVtCitKdXN0IGxpa2UgdGhlIGZ1bmN0aW9uIEBjb2Rle2dwZ19zdHJlcnJvcn0sIHRoZSBmdW5jdGlvbgorQGNvZGV7Z2NyeV9zdHJlcnJvcn0gaXMgbm90IHRocmVhZCBzYWZlLiAgWW91IGhhdmUgdG8gdXNlCitAY29kZXtncGdfc3RyZXJyb3Jfcn0gaW5zdGVhZC4KKworQGVuZCBpdGVtaXplCisKKworTGliZ2NyeXB0IGNvbnRhaW5zIGNvbnZlbmllbnQgbWFjcm9zLCB3aGljaCBkZWZpbmUgdGhlCituZWNlc3NhcnkgdGhyZWFkIGNhbGxiYWNrcyBmb3IgUFRocmVhZCBhbmQgZm9yIEdOVSBQdGg6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gR0NSWV9USFJFQURfT1BUSU9OX1BUSF9JTVBMCisKK1RoaXMgbWFjcm8gZGVmaW5lcyB0aGUgZm9sbG93aW5nIChzdGF0aWMpIHN5bWJvbHM6CitAY29kZXtnY3J5X3B0aF9pbml0fSwgQGNvZGV7Z2NyeV9wdGhfbXV0ZXhfaW5pdH0sCitAY29kZXtnY3J5X3B0aF9tdXRleF9kZXN0cm95fSwgQGNvZGV7Z2NyeV9wdGhfbXV0ZXhfbG9ja30sCitAY29kZXtnY3J5X3B0aF9tdXRleF91bmxvY2t9LCBAY29kZXtnY3J5X3B0aF9yZWFkfSwKK0Bjb2Rle2djcnlfcHRoX3dyaXRlfSwgQGNvZGV7Z2NyeV9wdGhfc2VsZWN0fSwKK0Bjb2Rle2djcnlfcHRoX3dhaXRwaWR9LCBAY29kZXtnY3J5X3B0aF9hY2NlcHR9LAorQGNvZGV7Z2NyeV9wdGhfY29ubmVjdH0sIEBjb2Rle2djcnlfdGhyZWFkc19wdGh9LgorCitBZnRlciBpbmNsdWRpbmcgdGhpcyBtYWNybywgQGNvZGV7Z2NyeV9jb250cm9sKCl9IHNoYWxsIGJlIHVzZWQgd2l0aCBhCitjb21tYW5kIG9mIEBjb2Rle0dDUllDVExfU0VUX1RIUkVBRF9DQlN9IGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZQordGhyZWFkIGNhbGxiYWNrIHN0cnVjdHVyZSBuYW1lZCBgYGdjcnlfdGhyZWFkc19wdGgnJy4gIEV4YW1wbGU6CisKK0BzbWFsbGV4YW1wbGUKKyAgcmV0ID0gZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9USFJFQURfQ0JTLCAmZ2NyeV90aHJlYWRzX3B0aCk7CitAZW5kIHNtYWxsZXhhbXBsZQorCisKK0BpdGVtIEdDUllfVEhSRUFEX09QVElPTl9QVEhSRUFEX0lNUEwKKworVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgKHN0YXRpYykgc3ltYm9sczoKK0Bjb2Rle2djcnlfcHRocmVhZF9tdXRleF9pbml0fSwgQGNvZGV7Z2NyeV9wdGhyZWFkX211dGV4X2Rlc3Ryb3l9LAorQGNvZGV7Z2NyeV9wdGhyZWFkX211dGV4X2xvY2t9LCBAY29kZXtnY3J5X3B0aHJlYWRfbXV0ZXhfdW5sb2NrfSwKK0Bjb2Rle2djcnlfdGhyZWFkc19wdGhyZWFkfS4KKworQWZ0ZXIgaW5jbHVkaW5nIHRoaXMgbWFjcm8sIEBjb2Rle2djcnlfY29udHJvbCgpfSBzaGFsbCBiZSB1c2VkIHdpdGggYQorY29tbWFuZCBvZiBAY29kZXtHQ1JZQ1RMX1NFVF9USFJFQURfQ0JTfSBpbiBvcmRlciB0byByZWdpc3RlciB0aGUKK3RocmVhZCBjYWxsYmFjayBzdHJ1Y3R1cmUgbmFtZWQgYGBnY3J5X3RocmVhZHNfcHRocmVhZCcnLiAgRXhhbXBsZToKKworQHNtYWxsZXhhbXBsZQorICByZXQgPSBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1RIUkVBRF9DQlMsICZnY3J5X3RocmVhZHNfcHRocmVhZCk7CitAZW5kIHNtYWxsZXhhbXBsZQorCisKK0BlbmQgdGFibGUKKworTm90ZSB0aGF0IHRoZXNlIG1hY3JvcyBuZWVkIHRvIGJlIHRlcm1pbmF0ZWQgd2l0aCBhIHNlbWljb2xvbi4gIEtlZXAKK2luIG1pbmQgdGhhdCB0aGVzZSBhcmUgY29udmVuaWVudCBtYWNyb3MgZm9yIEMgcHJvZ3JhbW1lcnM7IEMrKworcHJvZ3JhbW1lcnMgbWlnaHQgaGF2ZSB0byB3cmFwIHRoZXNlIG1hY3JvcyBpbiBhbiBgYGV4dGVybiBDJycgYm9keS4KKworCitAbm9kZSBFbmFibGluZyBGSVBTIG1vZGUKK0BzZWN0aW9uIEhvdyB0byBlbmFibGUgdGhlIEZJUFMgbW9kZQorQGNpbmRleCBGSVBTIG1vZGUKK0BjaW5kZXggRklQUyAxNDAKKworTGliZ2NyeXB0IG1heSBiZSB1c2VkIGluIGEgRklQUyAxNDAtMiBtb2RlLiAgTm90ZSwgdGhhdCB0aGlzIGRvZXMgbm90CituZWNlc3NhcnkgbWVhbiB0aGF0IExpYmNncnlwdCBpcyBhbiBhcHBvdmVkIEZJUFMgMTQwLTIgbW9kdWxlLiAgQ2hlY2sgdGhlCitOSVNUIGRhdGFiYXNlIGF0IEB1cmx7aHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUTS9jbXZwL30gdG8gc2VlIHdoYXQKK3ZlcnNpb25zIG9mIExpYmdjcnlwdCBhcmUgYXBwcm92ZWQuCisKK0JlY2F1c2UgRklQUyAxNDAgaGFzIGNlcnRhaW4gcmVzdHJpY3Rpb25zIG9uIHRoZSB1c2Ugb2YgY3J5cHRvZ3JhcGh5Cit3aGljaCBhcmUgbm90IGFsd2F5cyB3YW50ZWQsIExpYmdjcnlwdCBuZWVkcyB0byBiZSBwdXQgaW50byBGSVBTIG1vZGUKK2V4cGxpY2l0bHkuICBUaHJlZSBhbHRlcm5hdGl2ZSBtZWNoYW5pc21zIGFyZSBwcm92aWRlZCB0byBzd2l0Y2gKK0xpYmdjcnlwdCBpbnRvIHRoaXMgbW9kZToKKworQGl0ZW1pemUKK0BpdGVtCitJZiB0aGUgZmlsZSBAZmlsZXsvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZH0gZXhpc3RzIGFuZCBjb250YWlucyBhCitudW1lcmljIHZhbHVlIG90aGVyIHRoYW4gQGNvZGV7MH0sIExpYmdjcnlwdCBpcyBwdXQgaW50byBGSVBTIG1vZGUgYXQKK2luaXRpYWxpemF0aW9uIHRpbWUuICBPYnZpb3VzbHkgdGhpcyB3b3JrcyBvbmx5IG9uIHN5c3RlbXMgd2l0aCBhCitAY29kZXtwcm9jfSBmaWxlIHN5c3RlbSAoaS5lLiBHTlUvTGludXgpLgorCitAaXRlbQorSWYgdGhlIGZpbGUgQGZpbGV7L2V0Yy9nY3J5cHQvZmlwc19lbmFibGVkfSBleGlzdHMsIExpYmdjcnlwdCBpcyBwdXQKK2ludG8gRklQUyBtb2RlIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuICBOb3RlIHRoYXQgdGhpcyBmaWxlbmFtZSBpcworaGFyZHdpcmVkIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKworQGl0ZW0KK0lmIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0cyBGSVBTIG1vZGUgdXNpbmcgdGhlIGNvbnRyb2wgY29tbWFuZAorQGNvZGV7R0NSWUNUTF9GT1JDRV9GSVBTX01PREV9LiAgVGhpcyBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gYW55Citpbml0aWFsaXphdGlvbiAoaS5lLiBiZWZvcmUgQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSkuCisKK0BlbmQgaXRlbWl6ZQorCitAY2luZGV4IEVuZm9yY2VkIEZJUFMgbW9kZQorCitJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgRklQUyBtb2RlLCBMaWJnY3J5cHQgbWF5IGFsc28gYmUgcHV0IGludG8KK2FuIEVuZm9yY2VkIEZJUFMgbW9kZSBieSB3cml0aW5nIGEgbm9uLXplcm8gdmFsdWUgaW50byB0aGUgZmlsZQorQGZpbGV7L2V0Yy9nY3J5cHQvZmlwc19lbmFibGVkfSBvciBieSB1c2luZyB0aGUgY29udHJvbCBjb21tYW5kCitAY29kZXtHQ1JZQ1RMX1NFVF9FTkZPUkNFRF9GSVBTX0ZMQUd9IGJlZm9yZSBhbnkgb3RoZXIgY2FsbHMgdG8KK2xpYmdjcnlwdC4gIFRoZSBFbmZvcmNlZCBGSVBTIG1vZGUgaGVscHMgdG8gZGV0ZWN0IGFwcGxpY2F0aW9ucword2hpY2ggZG9uJ3QgZnVsZmlsbCBhbGwgcmVxdWlyZW1lbnRzIGZvciB1c2luZworTGliZ2NyeXB0IGluIEZJUFMgbW9kZSAoQHB4cmVme0ZJUFMgTW9kZX0pLgorCitPbmNlIExpYmdjcnlwdCBoYXMgYmVlbiBwdXQgaW50byBGSVBTIG1vZGUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bworc3dpdGNoIGJhY2sgdG8gc3RhbmRhcmQgbW9kZSB3aXRob3V0IHRlcm1pbmF0aW5nIHRoZSBwcm9jZXNzIGZpcnN0LgorSWYgdGhlIGxvZ2dpbmcgdmVyYm9zaXR5IGxldmVsIG9mIExpYmdjcnlwdCBoYXMgYmVlbiBzZXQgdG8gYXQgbGVhc3QKKzIsIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgdGhlIHNlbGYtdGVzdHMgYXJlIGxvZ2dlZC4KKworQG5vZGUgSGFyZHdhcmUgZmVhdHVyZXMKK0BzZWN0aW9uIEhvdyB0byBkaXNhYmxlIGhhcmR3YXJlIGZlYXR1cmVzCitAY2luZGV4IGhhcmR3YXJlIGZlYXR1cmVzCisKK0xpYmdjcnlwdCBtYWtlcyB1c2Ugb2YgY2VydGFpbiBoYXJkd2FyZSBmZWF0dXJlcy4gIElmIHRoZSB1c2Ugb2YgYQorZmVhdHVyZSBpcyBub3QgZGVzaXJlZCBpdCBtYXkgYmUgZWl0aGVyIGJlIGRpc2FibGVkIGJ5IGEgcHJvZ3JhbSBvcgorZ2xvYmFsbHkgdXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBmZWF0dXJlcworYXJlCisKK0B0YWJsZSBAY29kZQorQGl0ZW0gcGFkbG9jay1ybmcKK0BpdGVtIHBhZGxvY2stYWVzCitAaXRlbSBwYWRsb2NrLXNoYQorQGl0ZW0gcGFkbG9jay1tbXVsCitAaXRlbSBpbnRlbC1jcHUKK0BpdGVtIGludGVsLWJtaTIKK0BpdGVtIGludGVsLXNzc2UzCitAaXRlbSBpbnRlbC1wY2xtdWwKK0BpdGVtIGludGVsLWFlc25pCitAaXRlbSBpbnRlbC1yZHJhbmQKK0BpdGVtIGludGVsLWF2eAorQGl0ZW0gaW50ZWwtYXZ4MgorQGl0ZW0gYXJtLW5lb24KK0BlbmQgdGFibGUKKworVG8gZGlzYWJsZSBhIGZlYXR1cmUgZm9yIGFsbCBwcm9jZXNzZXMgdXNpbmcgTGliZ2NyeXB0IDEuNiBvciBuZXdlciwKK2NyZWF0ZSB0aGUgZmlsZSBAZmlsZXsvZXRjL2djcnlwdC9od2YuZGVueX0gYW5kIHB1dCBlYWNoIGZlYXR1cmUgbm90Cit0byBiZSB1c2VkIG9uIGEgc2luZ2xlIGxpbmUuICBFbXB0eSBsaW5lcywgd2hpdGUgc3BhY2UsIGFuZCBsaW5lcworcHJlZml4ZWQgd2l0aCBhIGhhc2ggbWFyayBhcmUgaWdub3JlZC4gIFRoZSBmaWxlIHNob3VsZCBiZSB3b3JsZAorcmVhZGFibGUuCisKK1RvIGRpc2FibGUgYSBmZWF0dXJlIHNwZWNpZmljYWxseSBmb3IgYSBwcm9ncmFtIHRoYXQgcHJvZ3JhbSBtdXN0IHRlbGwKK2l0IExpYmdjcnlwdCBiZWZvcmUgYmVmb3JlIGNhbGxpbmcgQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4KK0V4YW1wbGU6QGZvb3Rub3Rle05CLiBMaWJnY3J5cHQgdXNlcyB0aGUgUkRSQU5EIGZlYXR1cmUgb25seSBhcyBvbmUKK3NvdXJjZSBvZiBlbnRyb3B5LiAgQSBDUFUgd2l0aCBhIGJyb2tlbiBSRFJBTkQgd2lsbCB0aHVzIG5vdAorY29tcHJvbWlzZSBvZiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3J9CisKK0BleGFtcGxlCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX0hXRiwgImludGVsLXJkcmFuZCIsIE5VTEwpOworQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVG8gcHJpbnQgdGhlIGxpc3Qgb2YgYWN0aXZlIGZlYXR1cmVzIHlvdSBtYXkgdXNlIHRoaXMgY29tbWFuZDoKKworQGV4YW1wbGUKKyAgbXBpY2FsYyAtLXByaW50LWNvbmZpZyB8IGdyZXAgXmh3Zmxpc3Q6IHwgdHIgOiAnXG4nIHwgdGFpbCAtbiArMgorQGVuZCBleGFtcGxlCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgR2VuZXJhbCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgR2VuZXJhbGl0aWVzCitAY2hhcHRlciBHZW5lcmFsaXRpZXMKKworQG1lbnUKKyogQ29udHJvbGxpbmcgdGhlIGxpYnJhcnk6OiAgICAgQ29udHJvbGxpbmcgTGliZ2NyeXB0J3MgYmVoYXZpb3IuCisqIEVycm9yIEhhbmRsaW5nOjogICAgICAgICAgICAgIEVycm9yIGNvZGVzIGFuZCBzdWNoLgorQGVuZCBtZW51CisKK0Bub2RlIENvbnRyb2xsaW5nIHRoZSBsaWJyYXJ5CitAc2VjdGlvbiBDb250cm9sbGluZyB0aGUgbGlicmFyeQorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9jb250cm9sIChlbnVtIGdjcnlfY3RsX2NtZHMgQHZhcntjbWR9LCAuLi4pCisKK1RoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW5mbHVlbmNlIHRoZSBnZW5lcmFsIGJlaGF2aW9yIG9mCitMaWJnY3J5cHQgaW4gc2V2ZXJhbCB3YXlzLiAgRGVwZW5kaW5nIG9uIEB2YXJ7Y21kfSwgbW9yZQorYXJndW1lbnRzIGNhbiBvciBoYXZlIHRvIGJlIHByb3ZpZGVkLgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllDVExfRU5BQkxFX01fR1VBUkQ7IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIGVuYWJsZXMgdGhlIGJ1aWx0LWluIG1lbW9yeSBndWFyZC4gIEl0IG11c3Qgbm90IGJlIHVzZWQKK3RvIGFjdGl2YXRlIHRoZSBtZW1vcnkgZ3VhcmQgYWZ0ZXIgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGhhcyBhbHJlYWR5CitiZWVuIHVzZWQ7IHRoZXJlZm9yZSBpdCBjYW4gT05MWSBiZSB1c2VkIGJlZm9yZQorQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4gIE5vdGUgdGhhdCB0aGUgbWVtb3J5IGd1YXJkIGlzIE5PVCB1c2VkCit3aGVuIHRoZSB1c2VyIG9mIHRoZSBsaWJyYXJ5IGhhcyBzZXQgaGlzIG93biBtZW1vcnkgbWFuYWdlbWVudAorY2FsbGJhY2tzLgorCitAaXRlbSBHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET007IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIGluaGliaXRzIHRoZSB1c2UgdGhlIHZlcnkgc2VjdXJlIHJhbmRvbSBxdWFsaXR5IGxldmVsCisoQGNvZGV7R0NSWV9WRVJZX1NUUk9OR19SQU5ET019KSBhbmQgZGVncmFkZXMgYWxsIHJlcXVlc3QgZG93biB0bworQGNvZGV7R0NSWV9TVFJPTkdfUkFORE9NfS4gIEluIGdlbmVyYWwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQuICBIb3dldmVyLAorZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoZSBleHRyYSBxdWFsaXR5IHJhbmRvbSBMaWJnY3J5cHQgdHJpZXMgdG8gY3JlYXRlCitpcyBub3QganVzdGlmaWVkIGFuZCB0aGlzIG9wdGlvbiBtYXkgaGVscCB0byBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlLgorUGxlYXNlIGNoZWNrIHdpdGggYSBjcnlwdG8gZXhwZXJ0IHdoZXRoZXIgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgZm9yCit5b3VyIGFwcGxpY2F0aW9uLgorCitUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCisKKworQGl0ZW0gR0NSWUNUTF9EVU1QX1JBTkRPTV9TVEFUUzsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgZHVtcHMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgcmVsYXRlZCBzdGF0aXN0aWNzIHRvIHRoZQorbGlicmFyeSdzIGxvZ2dpbmcgc3RyZWFtLgorCitAaXRlbSBHQ1JZQ1RMX0RVTVBfTUVNT1JZX1NUQVRTOyBBcmd1bWVudHM6IG5vbmUKK1RoaXMgY29tbWFuZCBkdW1wcyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHN0YXRpc3RpY3MgdG8gdGhlIGxpYnJhcnkncworbG9nZ2luZyBzdHJlYW0uCisKK0BpdGVtIEdDUllDVExfRFVNUF9TRUNNRU1fU1RBVFM7IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIGR1bXBzIHNlY3VyZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHN0YXRpc3RpY3MgdG8gdGhlCitsaWJyYXJ5J3MgbG9nZ2luZyBzdHJlYW0uCisKK0BpdGVtIEdDUllDVExfRFJPUF9QUklWUzsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgZGlzYWJsZXMgdGhlIHVzZSBvZiBzZWN1cmUgbWVtb3J5IGFuZCBkcm9wcyB0aGUgcHJpdmlsZWdlcworb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIFRoaXMgY29tbWFuZCBoYXMgbm90IG11Y2ggdXNlOyB0aGUgc3VnZ2VzdGVkIHdheQordG8gZGlzYWJsZSBzZWN1cmUgbWVtb3J5IGlzIHRvIHVzZSBAY29kZXtHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNfSByaWdodAorYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisKK0BpdGVtIEdDUllDVExfRElTQUJMRV9TRUNNRU07IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIGRpc2FibGVzIHRoZSB1c2Ugb2Ygc2VjdXJlIG1lbW9yeS4gIElmIHRoaXMgY29tbWFuZCBpcwordXNlZCBpbiBGSVBTIG1vZGUsIEZJUFMgbW9kZSB3aWxsIGJlIGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24KK0Bjb2Rle2djcnlfZmlwc19tb2RlX2FjdGl2ZX0gcmV0dXJucyBmYWxzZS4gIEhvd2V2ZXIsIGluIEVuZm9yY2VkIEZJUFMKK21vZGUgdGhpcyBjb21tYW5kIGhhcyBubyBlZmZlY3QgYXQgYWxsLgorCitNYW55IGFwcGxpY2F0aW9ucyBkbyBub3QgcmVxdWlyZSBzZWN1cmUgbWVtb3J5LCBzbyB0aGV5IHNob3VsZCBkaXNhYmxlCitpdCByaWdodCBhd2F5LiAgVGhpcyBjb21tYW5kIHNob3VsZCBiZSBleGVjdXRlZCByaWdodCBhZnRlcgorQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4KKworQGl0ZW0gR0NSWUNUTF9ESVNBQkxFX0xPQ0tFRF9TRUNNRU07IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIGRpc2FibGVzIHRoZSB1c2Ugb2YgdGhlIG1sb2NrIGNhbGwgZm9yIHNlY3VyZSBtZW1vcnkuCitEaXNhYmxpbmcgdGhlIHVzZSBvZiBtbG9jayBtYXkgZm9yIGV4YW1wbGUgYmUgZG9uZSBpZiBhbiBlbmNyeXB0ZWQKK3N3YXAgc3BhY2UgaXMgaW4gdXNlLiAgVGhpcyBjb21tYW5kIHNob3VsZCBiZSBleGVjdXRlZCByaWdodCBhZnRlcgorQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4KKworQGl0ZW0gR0NSWUNUTF9ESVNBQkxFX1BSSVZfRFJPUDsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgc2V0cyBhIGdsb2JhbCBmbGFnIHRvIHRlbGwgdGhlIHNlY3VyZSBtZW1vcnkgc3Vic3lzdGVtCit0aGF0IGl0IHNoYWxsIG5vdCBkcm9wIHByaXZpbGVnZXMgYWZ0ZXIgc2VjdXJlIG1lbW9yeSBoYXMgYmVlbgorYWxsb2NhdGVkLiAgVGhpcyBjb21tYW5kIGlzIGNvbW1vbmx5IHVzZWQgcmlnaHQgYWZ0ZXIKK0Bjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0gYnV0IG1heSBhbHNvIGJlIHVzZWQgcmlnaHQgYXdheSBhdCBwcm9ncmFtCitzdGFydHVwLiAgSXQgd29uJ3QgaGF2ZSBhbiBlZmZlY3QgYWZ0ZXIgdGhlIHNlY3VyZSBtZW1vcnkgcG9vbCBoYXMKK2JlZW4gaW5pdGlhbGl6ZWQuICBXQVJOSU5HOiBBIHByb2Nlc3MgcnVubmluZyBzZXR1aWQocm9vdCkgaXMgYSBzZXZlcmUKK3NlY3VyaXR5IHJpc2suICBQcm9jZXNzZXMgbWFraW5nIHVzZSBvZiBMaWJnY3J5cHQgb3Igb3RoZXIgY29tcGxleAorY29kZSBzaG91bGQgZHJvcCB0aGVzZSBleHRyYSBwcml2aWxlZ2VzIGFzIHNvb24gYXMgcG9zc2libGUuICBJZiB0aGlzCitjb21tYW5kIGhhcyBiZWVuIHVzZWQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZHJvcHBpbmcgdGhlCitwcml2aWxlZ2VzLgorCitAaXRlbSBHQ1JZQ1RMX0lOSVRfU0VDTUVNOyBBcmd1bWVudHM6IGludCBuYnl0ZXMKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGFsbG9jYXRlIGEgcG9vbCBvZiBzZWN1cmUgbWVtb3J5IGFuZCB0aHVzCitlbmFibGluZyB0aGUgdXNlIG9mIHNlY3VyZSBtZW1vcnkuICBJdCBhbHNvIGRyb3BzIGFsbCBleHRyYSBwcml2aWxlZ2VzCit0aGUgcHJvY2VzcyBoYXMgKGkuZS4gaWYgaXQgaXMgcnVuIGFzIHNldHVpZCAocm9vdCkpLiAgSWYgdGhlIGFyZ3VtZW50CitAdmFye25ieXRlc30gaXMgMCwgc2VjdXJlIG1lbW9yeSB3aWxsIGJlIGRpc2FibGVkLiAgVGhlIG1pbmltdW0gYW1vdW50CitvZiBzZWN1cmUgbWVtb3J5IGFsbG9jYXRlZCBpcyBjdXJyZW50bHkgMTYzODQgYnl0ZXM7IHlvdSBtYXkgdGh1cyB1c2UgYQordmFsdWUgb2YgMSB0byByZXF1ZXN0IHRoYXQgZGVmYXVsdCBzaXplLgorCitAaXRlbSBHQ1JZQ1RMX1RFUk1fU0VDTUVNOyBBcmd1bWVudHM6IG5vbmUKK1RoaXMgY29tbWFuZCB6ZXJvaXNlcyB0aGUgc2VjdXJlIG1lbW9yeSBhbmQgZGVzdHJveXMgdGhlIGhhbmRsZXIuICBUaGUKK3NlY3VyZSBtZW1vcnkgcG9vbCBtYXkgbm90IGJlIHVzZWQgYW55bW9yZSBhZnRlciBydW5uaW5nIHRoaXMgY29tbWFuZC4KK0lmIHRoZSBzZWN1cmUgbWVtb3J5IHBvb2wgYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCwgdGhpcyBjb21tYW5kIGhhcworbm8gZWZmZWN0LiAgQXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZWlyCitleGl0IGhhbmRsZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlY3VyZSBtZW1vcnkgZ2V0cyBwcm9wZXJseQorZGVzdHJveWVkLiAgVGhpcyBjb21tYW5kIGlzIG5vdCBuZWNlc3NhcmlseSB0aHJlYWQtc2FmZSBidXQgdGhhdAorc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW4gY2xlYW51cCBjb2RlLiAgSXQgbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsCitoYW5kbGVyLgorCitAaXRlbSBHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNX1dBUk47IEFyZ3VtZW50czogbm9uZQorRGlzYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIGFib3V0IHByb2JsZW1zIHdpdGggdGhlIHNlY3VyZSBtZW1vcnkKK3N1YnN5c3RlbS4gVGhpcyBjb21tYW5kIHNob3VsZCBiZSBydW4gcmlnaHQgYWZ0ZXIKK0Bjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0uCisKK0BpdGVtIEdDUllDVExfU1VTUEVORF9TRUNNRU1fV0FSTjsgQXJndW1lbnRzOiBub25lCitQb3N0cG9uZSB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gdGhlIHNlY3VyZSBtZW1vcnkgc3Vic3lzdGVtLgorQHhyZWZ7c2FtcGxlLXVzZS1zdXNwZW5kLXNlY21lbSwsdGhlIGluaXRpYWxpemF0aW9uIGV4YW1wbGV9LCBvbiBob3cgdG8KK3VzZSBpdC4KKworQGl0ZW0gR0NSWUNUTF9SRVNVTUVfU0VDTUVNX1dBUk47IEFyZ3VtZW50czogbm9uZQorUmVzdW1lIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgc2VjdXJlIG1lbW9yeSBzdWJzeXN0ZW0uCitAeHJlZntzYW1wbGUtdXNlLXJlc3VtZS1zZWNtZW0sLHRoZSBpbml0aWFsaXphdGlvbiBleGFtcGxlfSwgb24gaG93IHRvCit1c2UgaXQuCisKK0BpdGVtIEdDUllDVExfVVNFX1NFQ1VSRV9STkRQT09MOyBBcmd1bWVudHM6IG5vbmUKK1RoaXMgY29tbWFuZCB0ZWxscyB0aGUgUFJORyB0byBzdG9yZSByYW5kb20gbnVtYmVycyBpbiBzZWN1cmUgbWVtb3J5LgorVGhpcyBjb21tYW5kIHNob3VsZCBiZSBydW4gcmlnaHQgYWZ0ZXIgQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSBhbmQgbm90CitsYXRlciB0aGFuIHRoZSBjb21tYW5kIEdDUllDVExfSU5JVF9TRUNNRU0uICBOb3RlIHRoYXQgaW4gRklQUyBtb2RlIHRoZQorc2VjdXJlIG1lbW9yeSBpcyBhbHdheXMgdXNlZC4KKworQGl0ZW0gR0NSWUNUTF9TRVRfUkFORE9NX1NFRURfRklMRTsgQXJndW1lbnRzOiBjb25zdCBjaGFyICpmaWxlbmFtZQorVGhpcyBjb21tYW5kIHNwZWNpZmllcyB0aGUgZmlsZSwgd2hpY2ggaXMgdG8gYmUgdXNlZCBhcyBzZWVkIGZpbGUgZm9yCit0aGUgUFJORy4gIElmIHRoZSBzZWVkIGZpbGUgaXMgcmVnaXN0ZXJlZCBwcmlvciB0byBpbml0aWFsaXphdGlvbiBvZiB0aGUKK1BSTkcsIHRoZSBzZWVkIGZpbGUncyBjb250ZW50IChpZiBpdCBleGlzdHMgYW5kIHNlZW1zIHRvIGJlIHZhbGlkKSBpcworZmVkIGludG8gdGhlIFBSTkcgcG9vbC4gIEFmdGVyIHRoZSBzZWVkIGZpbGUgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgdGhlCitQUk5HIGNhbiBiZSBzaWduYWxsZWQgdG8gd3JpdGUgb3V0IHRoZSBQUk5HIHBvb2wncyBjb250ZW50IGludG8gdGhlIHNlZWQKK2ZpbGUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQuCisKKworQGl0ZW0gR0NSWUNUTF9VUERBVEVfUkFORE9NX1NFRURfRklMRTsgQXJndW1lbnRzOiBub25lCitXcml0ZSBvdXQgdGhlIFBSTkcgcG9vbCdzIGNvbnRlbnQgaW50byB0aGUgcmVnaXN0ZXJlZCBzZWVkIGZpbGUuCisKK011bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgYXBwbGljYXRpb25zIHNoYXJpbmcgdGhlIHNhbWUgcmFuZG9tIHNlZWQgZmlsZQorY2FuIGJlIHN0YXJ0ZWQgaW4gcGFyYWxsZWwsIGluIHdoaWNoIGNhc2UgdGhleSB3aWxsIHJlYWQgb3V0IHRoZSBzYW1lCitwb29sIGFuZCB0aGVuIHJhY2UgZm9yIHVwZGF0aW5nIGl0ICh0aGUgbGFzdCB1cGRhdGUgb3ZlcndyaXRlcyBlYXJsaWVyCit1cGRhdGVzKS4gIFRoZXkgd2lsbCBkaWZmZXJlbnRpYXRlIG9ubHkgYnkgdGhlIHdlYWsgZW50cm9weSB0aGF0IGlzCithZGRlZCBpbiByZWFkX3NlZWRfZmlsZSBiYXNlZCBvbiB0aGUgUElEIGFuZCBjbG9jaywgYW5kIHVwIHRvIDE2IGJ5dGVzCitvZiB3ZWFrIHJhbmRvbSBub24tYmxvY2tpbmdseS4gIFRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IHRoZSBvdXRwdXQgb2YKK3RoZXNlIGRpZmZlcmVudCBpbnN0YW5jZXMgaXMgY29ycmVsYXRlZCB0byBzb21lIGV4dGVudC4gIEluIGEgcGVyZmVjdAorYXR0YWNrIHNjZW5hcmlvLCB0aGUgYXR0YWNrZXIgY2FuIGNvbnRyb2wgKG9yIGF0IGxlYXN0IGd1ZXNzKSB0aGUgUElECithbmQgY2xvY2sgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgZHJhaW4gdGhlIHN5c3RlbSdzIGVudHJvcHkgcG9vbCB0bworcmVkdWNlIHRoZSAidXAgdG8gMTYgYnl0ZXMiIGFib3ZlIHRvIDAuICBUaGVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlCitpbml0aWFsIHN0YXRlcyBvZiB0aGUgcG9vbHMgYXJlIGNvbXBsZXRlbHkga25vd24uICBOb3RlIHRoYXQgdGhpcyBpcyBub3QKK2FuIGlzc3VlIGlmIHJhbmRvbSBvZiBAY29kZXtHQ1JZX1ZFUllfU1RST05HX1JBTkRPTX0gcXVhbGl0eSBpcworcmVxdWVzdGVkIGFzIGluIHRoaXMgY2FzZSBlbm91Z2ggZXh0cmEgZW50cm9weSBnZXRzIG1peGVkLiAgSXQgaXMgYWxzbworbm90IGFuIGlzc3VlIHdoZW4gdXNpbmcgTGludXggKHJuZGxpbnV4IGRyaXZlciksIGJlY2F1c2UgdGhpcyBvbmUKK2d1YXJhbnRlZXMgdG8gcmVhZCBmdWxsIDE2IGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIGFuZCB0aHVzIHRoZXJlIGlzIG5vCit3YXkgZm9yIGFuIGF0dGFja2VyIHdpdGhvdXQga2VybmVsIGFjY2VzcyB0byBjb250cm9sIHRoZXNlIDE2IGJ5dGVzLgorCitAaXRlbSBHQ1JZQ1RMX0NMT1NFX1JBTkRPTV9ERVZJQ0U7IEFyZ3VtZW50czogbm9uZQorVHJ5IHRvIGNsb3NlIHRoZSByYW5kb20gZGV2aWNlLiAgSWYgb24gVW5peCBzeXN0ZW0geW91IGNhbGwgZm9yaygpLAordGhlIGNoaWxkIHByb2Nlc3MgZG9lcyBubyBjYWxsIGV4ZWMoKSwgYW5kIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZQorTGliZ2NyeXB0IGluIHRoZSBjaGlsZCwgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHVzZSB0aGlzIGNvbnRyb2wgY29kZSB0bworY2xvc2UgdGhlIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIHRoZSByYW5kb20gZGV2aWNlLiAgSWYKK0xpYmdjcnlwdCBpcyBsYXRlciB1c2VkIGFnYWluIGJ5IHRoZSBjaGlsZCwgdGhlIGRldmljZSB3aWxsIGJlCityZS1vcGVuZWQuICBPbiBub24tVW5peCBzeXN0ZW1zIHRoaXMgY29udHJvbCBjb2RlIGlzIGlnbm9yZWQuCisKK0BpdGVtIEdDUllDVExfU0VUX1ZFUkJPU0lUWTsgQXJndW1lbnRzOiBpbnQgbGV2ZWwKK1RoaXMgY29tbWFuZCBzZXRzIHRoZSB2ZXJib3NpdHkgb2YgdGhlIGxvZ2dpbmcuICBBIGxldmVsIG9mIDAgZGlzYWJsZXMKK2FsbCBleHRyYSBsb2dnaW5nIHdoZXJlYXMgcG9zaXRpdmUgbnVtYmVycyBlbmFibGUgbW9yZSB2ZXJib3NlIGxvZ2dpbmcuCitUaGUgbGV2ZWwgbWF5IGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgYnV0IGJlIGF3YXJlIHRoYXQgbm8gbWVtb3J5CitzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzbyB0aGUgZWZmZWN0IG9mIHRoaXMgY29tbWFuZCBtaWdodCBub3QKK2ltbWVkaWF0ZWx5IHNob3cgdXAgaW4gb3RoZXIgdGhyZWFkcy4gIFRoaXMgY29tbWFuZCBtYXkgZXZlbiBiZSB1c2VkCitwcmlvciB0byBAY29kZXtnY3J5X2NoZWNrX3ZlcnNpb259LgorCitAaXRlbSBHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUzsgQXJndW1lbnRzOiB1bnNpZ25lZCBpbnQgZmxhZ3MKK1NldCB0aGUgZGVidWcgZmxhZyBiaXRzIGFzIGdpdmVuIGJ5IHRoZSBhcmd1bWVudC4gIEJlIGF3YXJlIHRoYXQgdGhhdCBubworbWVtb3J5IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIHNvIHRoZSBlZmZlY3Qgb2YgdGhpcyBjb21tYW5kIG1pZ2h0IG5vdAoraW1tZWRpYXRlbHkgc2hvdyB1cCBpbiBvdGhlciB0aHJlYWRzLiAgVGhlIGRlYnVnIGZsYWdzIGFyZSBub3QKK2NvbnNpZGVyZWQgcGFydCBvZiB0aGUgQVBJIGFuZCB0aHVzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuICBBcyBvZgorbm93IGJpdCAwIGVuYWJsZXMgZGVidWdnaW5nIG9mIGNpcGhlciBmdW5jdGlvbnMgYW5kIGJpdCAxIGRlYnVnZ2luZyBvZgorbXVsdGktcHJlY2lzaW9uLWludGVnZXJzLiAgVGhpcyBjb21tYW5kIG1heSBldmVuIGJlIHVzZWQgcHJpb3IgdG8KK0Bjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0uCisKK0BpdGVtIEdDUllDVExfQ0xFQVJfREVCVUdfRkxBR1M7IEFyZ3VtZW50czogdW5zaWduZWQgaW50IGZsYWdzCitTZXQgdGhlIGRlYnVnIGZsYWcgYml0cyBhcyBnaXZlbiBieSB0aGUgYXJndW1lbnQuICBCZSBhd2FyZSB0aGF0IHRoYXQgbm8KK21lbW9yeSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzbyB0aGUgZWZmZWN0IG9mIHRoaXMgY29tbWFuZCBtaWdodCBub3QKK2ltbWVkaWF0ZWx5IHNob3cgdXAgaW4gb3RoZXIgdGhyZWFkcy4gIFRoaXMgY29tbWFuZCBtYXkgZXZlbiBiZSB1c2VkCitwcmlvciB0byBAY29kZXtnY3J5X2NoZWNrX3ZlcnNpb259LgorCitAaXRlbSBHQ1JZQ1RMX0RJU0FCTEVfSU5URVJOQUxfTE9DS0lORzsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgZG9lcyBub3RoaW5nLiAgSXQgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK0BpdGVtIEdDUllDVExfQU5ZX0lOSVRJQUxJWkFUSU9OX1A7IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBiYXNpY2FsbHkgaW5pdGlhbGl6ZWQuCitTdWNoIGEgYmFzaWMgaW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbXBsaWNpdGx5IHdpdGggbWFueSBjb21tYW5kcyB0byBnZXQKK2NlcnRhaW4gaW50ZXJuYWwgc3Vic3lzdGVtcyBydW5uaW5nLiAgVGhlIGNvbW1vbiBhbmQgc3VnZ2VzdGVkIHdheSB0bworZG8gdGhpcyBiYXNpYyBpbml0aWFsaXphdGlvbiBpcyBieSBjYWxsaW5nIGdjcnlfY2hlY2tfdmVyc2lvbi4KKworQGl0ZW0gR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRDsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgdGVsbHMgdGhlIGxpYnJhcnkgdGhhdCB0aGUgYXBwbGljYXRpb24gaGFzIGZpbmlzaGVkIHRoZQoraW5pdGlhbGl6YXRpb24uCisKK0BpdGVtIEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRURfUDsgQXJndW1lbnRzOiBub25lCitUaGlzIGNvbW1hbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBjb21tYW5kQCoKK0dDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQgaGFzIGFscmVhZHkgYmVlbiBydW4uCisKK0BpdGVtIEdDUllDVExfU0VUX1RIUkVBRF9DQlM7IEFyZ3VtZW50czogc3RydWN0IGF0aF9vcHMgKmF0aF9vcHMKK1RoaXMgY29tbWFuZCByZWdpc3RlcnMgYSB0aHJlYWQtY2FsbGJhY2sgc3RydWN0dXJlLgorQHhyZWZ7TXVsdGktVGhyZWFkaW5nfS4KKworQGl0ZW0gR0NSWUNUTF9GQVNUX1BPTEw7IEFyZ3VtZW50czogbm9uZQorUnVuIGEgZmFzdCByYW5kb20gcG9sbC4KKworQGl0ZW0gR0NSWUNUTF9TRVRfUk5ERUdEX1NPQ0tFVDsgQXJndW1lbnRzOiBjb25zdCBjaGFyICpmaWxlbmFtZQorVGhpcyBjb21tYW5kIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWUgb2YgdGhlIEVHRCBzb2NrZXQKK3RvIGNvbm5lY3QgdG8uICBJdCBtYXkgYmUgdXNlZCBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBhcyBpdCBpcyBub3QKK3RocmVhZCBzYWZlLiAgQ2hhbmdpbmcgdGhlIHNvY2tldCBuYW1lIGFnYWluIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUKK2Z1bmN0aW9uIG1heSByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGdpdmVuIGZpbGVuYW1lIGlzIHRvbyBsb25nIGZvciBhCitsb2NhbCBzb2NrZXQgbmFtZS4KKworRUdEIGlzIGFuIGFsdGVybmF0aXZlIHJhbmRvbSBnYXRoZXJlciwgdXNlZCBvbmx5IG9uIHN5c3RlbXMgbGFja2luZyBhCitwcm9wZXIgcmFuZG9tIGRldmljZS4KKworQGl0ZW0gR0NSWUNUTF9QUklOVF9DT05GSUc7IEFyZ3VtZW50czogRklMRSAqc3RyZWFtCitUaGlzIGNvbW1hbmQgZHVtcHMgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUKK2xpYnJhcnkgdG8gdGhlIGdpdmVuIHN0cmVhbS4gIElmIE5VTEwgaXMgZ2l2ZW4gZm9yIEB2YXJ7c3RyZWFtfSwgdGhlIGxvZworc3lzdGVtIGlzIHVzZWQuICBUaGlzIGNvbW1hbmQgbWF5IGJlIHVzZWQgYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBoYXMKK2JlZW4gZmluaXNoZWQgYnV0IG5vdCBiZWZvcmUgYSBAY29kZXtnY3J5X2NoZWNrX3ZlcnNpb259LgorCitAaXRlbSBHQ1JZQ1RMX09QRVJBVElPTkFMX1A7IEFyZ3VtZW50czogbm9uZQorVGhpcyBjb21tYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgbGlicmFyeSBpcyBpbiBhbiBvcGVyYXRpb25hbCBzdGF0ZS4KK1RoaXMgaW5mb3JtYXRpb24gbWFrZXMgb25seSBzZW5zZSBpbiBGSVBTIG1vZGUuICBJbiBjb250cmFzdCB0byBvdGhlcgorZnVuY3Rpb25zLCB0aGlzIGlzIGEgcHVyZSB0ZXN0IGZ1bmN0aW9uIGFuZCB3b24ndCBwdXQgdGhlIGxpYnJhcnkgaW50bworRklQUyBtb2RlIG9yIGNoYW5nZSB0aGUgaW50ZXJuYWwgc3RhdGUuICBUaGlzIGNvbW1hbmQgbWF5IGJlIHVzZWQgYmVmb3JlCit0aGUgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZmluaXNoZWQgYnV0IG5vdCBiZWZvcmUgYSBAY29kZXtnY3J5X2NoZWNrX3ZlcnNpb259LgorCitAaXRlbSBHQ1JZQ1RMX0ZJUFNfTU9ERV9QOyBBcmd1bWVudHM6IG5vbmUKK1RoaXMgY29tbWFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGxpYnJhcnkgaXMgaW4gRklQUyBtb2RlLiAgTm90ZSwgdGhhdAordGhpcyBpcyBubyBpbmRpY2F0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsaWJyYXJ5LiAgVGhpcworY29tbWFuZCBtYXkgYmUgdXNlZCBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGZpbmlzaGVkIGJ1dCBub3QKK2JlZm9yZSBhIEBjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0uICBBbiBhcHBsaWNhdGlvbiBtYXkgdXNlIHRoaXMgY29tbWFuZCBvcgordGhlIGNvbnZlbmllbmNlIG1hY3JvIGJlbG93IHRvIGNoZWNrIHdoZXRoZXIgRklQUyBtb2RlIGlzIGFjdHVhbGx5CithY3RpdmUuCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X2ZpcHNfbW9kZV9hY3RpdmUgKHZvaWQpCisKK1JldHVybnMgdHJ1ZSBpZiB0aGUgRklQUyBtb2RlIGlzIGFjdGl2ZS4gIE5vdGUgdGhhdCB0aGlzIGlzCitpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLgorQGVuZCBkZWZ0eXBlZnVuCisKKworCitAaXRlbSBHQ1JZQ1RMX0ZPUkNFX0ZJUFNfTU9ERTsgQXJndW1lbnRzOiBub25lCitSdW5uaW5nIHRoaXMgY29tbWFuZCBwdXRzIHRoZSBsaWJyYXJ5IGludG8gRklQUyBtb2RlLiAgSWYgdGhlIGxpYnJhcnkgaXMKK2FscmVhZHkgaW4gRklQUyBtb2RlLCBhIHNlbGYtdGVzdCBpcyB0cmlnZ2VyZWQgYW5kIHRodXMgdGhlIGxpYnJhcnkgd2lsbAorYmUgcHV0IGludG8gb3BlcmF0aW9uYWwgc3RhdGUuICBUaGlzIGNvbW1hbmQgbWF5IGJlIHVzZWQgYmVmb3JlIGEgY2FsbAordG8gQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufSBhbmQgdGhhdCBpcyBhY3R1YWxseSB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGxldCBhbgorYXBwbGljYXRpb24gc3dpdGNoIHRoZSBsaWJyYXJ5IGludG8gRklQUyBtb2RlLiAgTm90ZSB0aGF0IExpYmdjcnlwdCB3aWxsCityZWplY3QgYW4gYXR0ZW1wdCB0byBzd2l0Y2ggdG8gZmlwcyBtb2RlIGR1cmluZyBvciBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24uCisKK0BpdGVtIEdDUllDVExfU0VUX0VORk9SQ0VEX0ZJUFNfRkxBRzsgQXJndW1lbnRzOiBub25lCitSdW5uaW5nIHRoaXMgY29tbWFuZCBzZXRzIHRoZSBpbnRlcm5hbCBmbGFnIHRoYXQgcHV0cyB0aGUgbGlicmFyeSBpbnRvCit0aGUgZW5mb3JjZWQgRklQUyBtb2RlIGR1cmluZyB0aGUgRklQUyBtb2RlIGluaXRpYWxpemF0aW9uLiAgVGhpcyBjb21tYW5kCitkb2VzIG5vdCBhZmZlY3QgdGhlIGxpYnJhcnkgaWYgdGhlIGxpYnJhcnkgaXMgbm90IHB1dCBpbnRvIHRoZSBGSVBTIG1vZGUgYW5kCitpdCBtdXN0IGJlIHVzZWQgYmVmb3JlIGFueSBvdGhlciBsaWJnY3J5cHQgbGlicmFyeSBjYWxscyB0aGF0IGluaXRpYWxpemUKK3RoZSBsaWJyYXJ5IHN1Y2ggYXMgQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4gTm90ZSB0aGF0IExpYmdjcnlwdCB3aWxsCityZWplY3QgYW4gYXR0ZW1wdCB0byBzd2l0Y2ggdG8gdGhlIGVuZm9yY2VkIGZpcHMgbW9kZSBkdXJpbmcgb3IgYWZ0ZXIKK3RoZSBpbml0aWFsaXphdGlvbi4KKworQGl0ZW0gR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFOyBBcmd1bWVudHM6IGludAorVGhlc2UgYXJlIGFkdmlzb3J5IGNvbW1hbmRzIHRvIHNlbGVjdCBhIGNlcnRhaW4gcmFuZG9tIG51bWJlcgorZ2VuZXJhdG9yLiAgVGhleSBhcmUgb25seSBhZHZpc29yeSBiZWNhdXNlIGxpYnJhcmllcyBtYXkgbm90IGtub3cgd2hhdAorYW4gYXBwbGljYXRpb24gYWN0dWFsbHkgd2FudHMgb3IgdmljZSB2ZXJzYS4gIFRodXMgTGliZ2NyeXB0IGVtcGxveXMgYQorcHJpb3JpdHkgY2hlY2sgdG8gc2VsZWN0IHRoZSBhY3R1YWxseSB1c2VkIFJORy4gIElmIGFuIGFwcGxpY2F0aW9ucworc2VsZWN0cyBhIGxvd2VyIHByaW9yaXR5IFJORyBidXQgYSBsaWJyYXJ5IHJlcXVlc3RzIGEgaGlnaGVyIHByaW9yaXR5CitSTkcgTGliZ2NyeXB0IHdpbGwgc3dpdGNoIHRvIHRoZSBoaWdoZXIgcHJpb3JpdHkgUk5HLiAgQXBwbGljYXRpb25zCithbmQgbGlicmFyaWVzIHNob3VsZCB1c2UgdGhlc2UgY29udHJvbCBjb2RlcyBiZWZvcmUKK0Bjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0uICBUaGUgYXZhaWxhYmxlIGdlbmVyYXRvcnMgYXJlOgorQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZX1JOR19UWVBFX1NUQU5EQVJECitBIGNvbnNlcnZhdGl2ZSBzdGFuZGFyZCBnZW5lcmF0b3IgYmFzZWQgb24gdGhlIGBgQ29udGludW91c2x5IFNlZWRlZAorUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yJycgZGVzaWduZWQgYnkgUGV0ZXIgR3V0bWFubi4KK0BpdGVtIEdDUllfUk5HX1RZUEVfRklQUworQSBkZXRlcm1pbmlzdGljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGNvbmZvcm1pbmcgdG8gaGUgZG9jdW1lbnQKK2BgTklTVC1SZWNvbW1lbmRlZCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBCYXNlZCBvbiBBTlNJIFg5LjMxCitBcHBlbmRpeCBBLjIuNCBVc2luZyB0aGUgMy1LZXkgVHJpcGxlIERFUyBhbmQgQUVTIEFsZ29yaXRobXMnJworKDIwMDUtMDEtMzEpLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBBRVMgdmFyaWFudC4KK0BpdGVtIEdDUllfUk5HX1RZUEVfU1lTVEVNCitBIHdyYXBwZXIgYXJvdW5kIHRoZSBzeXN0ZW0ncyBuYXRpdmUgUk5HLiAgT24gVW5peCBzeXN0ZW0gdGhlc2UgYXJlCit1c3VhbGx5IHRoZSAvZGV2L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tIGRldmljZXMuCitAZW5kIHRhYmxlCitUaGUgZGVmYXVsdCBpcyBAY29kZXtHQ1JZX1JOR19UWVBFX1NUQU5EQVJEfSB1bmxlc3MgRklQUyBtb2RlIGFzIGJlZW4KK2VuYWJsZWQ7IGluIHdoaWNoIGNhc2UgQGNvZGV7R0NSWV9STkdfVFlQRV9GSVBTfSBpcyB1c2VkIGFuZCBsb2NrZWQKK2FnYWluc3QgZnVydGhlciBjaGFuZ2VzLgorCitAaXRlbSBHQ1JZQ1RMX0dFVFRfQ1VSUkVOVF9STkdfVFlQRTsgQXJndW1lbnRzOiBpbnQgKgorVGhpcyBjb21tYW5kIHN0b3JlcyB0aGUgdHlwZSBvZiB0aGUgY3VycmVudGx5IHVzZWQgUk5HIGFzIGFuIGludGVnZXIKK3ZhbHVlIGF0IHRoZSBwcm92aWRlZCBhZGRyZXNzLgorCisKK0BpdGVtIEdDUllDVExfU0VMRlRFU1Q7IEFyZ3VtZW50czogbm9uZQorVGhpcyBtYXkgYmUgdXNlZCBhdCBhbnl0aW1lIHRvIGhhdmUgdGhlIGxpYnJhcnkgcnVuIGFsbCBpbXBsZW1lbnRlZAorc2VsZi10ZXN0cy4gIEl0IHdvcmtzIGluIHN0YW5kYXJkIGFuZCBpbiBGSVBTIG1vZGUuICBSZXR1cm5zIDAgb24KK3N1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorCitAaXRlbSBHQ1JZQ1RMX0RJU0FCTEVfSFdGOyBBcmd1bWVudHM6IGNvbnN0IGNoYXIgKm5hbWUKKworTGliZ2NyeXB0IGRldGVjdHMgY2VydGFpbiBmZWF0dXJlcyBvZiB0aGUgQ1BVIGF0IHN0YXJ0dXAgdGltZS4gIEZvcgorcGVyZm9ybWFuY2UgdGVzdHMgaXQgaXMgc29tZXRpbWVzIHJlcXVpcmVkIG5vdCB0byB1c2Ugc3VjaCBhIGZlYXR1cmUuCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB0byBkaXNhYmxlIGEgY2VydGFpbiBmZWF0dXJlOyBpLmUuIExpYmdjcnlwdAorYmVoYXZlcyBhcyBpZiB0aGlzIGZlYXR1cmUgaGFzIG5vdCBiZWVuIGRldGVjdGVkLiAgTm90ZSB0aGF0IHRoZQorZGV0ZWN0aW9uIGNvZGUgbWlnaHQgYmUgcnVuIGlmIHRoZSBmZWF0dXJlIGhhcyBiZWVuIGRpc2FibGVkLiAgVGhpcworY29tbWFuZCBtdXN0IGJlIHVzZWQgYXQgaW5pdGlhbGl6YXRpb24gdGltZTsgaS5lLiBiZWZvcmUgY2FsbGluZworQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4KKworQGVuZCB0YWJsZQorCitAZW5kIGRlZnR5cGVmdW4KKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgRXJyb3JzICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAbm9kZSBFcnJvciBIYW5kbGluZworQHNlY3Rpb24gRXJyb3IgSGFuZGxpbmcKKworTWFueSBmdW5jdGlvbnMgaW4gTGliZ2NyeXB0IGNhbiByZXR1cm4gYW4gZXJyb3IgaWYgdGhleQorZmFpbC4gIEZvciB0aGlzIHJlYXNvbiwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhbHdheXMgY2F0Y2ggdGhlIGVycm9yCitjb25kaXRpb24gYW5kIHRha2UgYXBwcm9wcmlhdGUgbWVhc3VyZXMsIGZvciBleGFtcGxlIGJ5IHJlbGVhc2luZyB0aGUKK3Jlc291cmNlcyBhbmQgcGFzc2luZyB0aGUgZXJyb3IgdXAgdG8gdGhlIGNhbGxlciwgb3IgYnkgZGlzcGxheWluZyBhCitkZXNjcmlwdGl2ZSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBjYW5jZWxsaW5nIHRoZSBvcGVyYXRpb24uCisKK1NvbWUgZXJyb3IgdmFsdWVzIGRvIG5vdCBpbmRpY2F0ZSBhIHN5c3RlbSBlcnJvciBvciBhbiBlcnJvciBpbiB0aGUKK29wZXJhdGlvbiwgYnV0IHRoZSByZXN1bHQgb2YgYW4gb3BlcmF0aW9uIHRoYXQgZmFpbGVkIHByb3Blcmx5LiAgRm9yCitleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIGRlY3J5cHQgYSB0ZW1wZXJlZCBtZXNzYWdlLCB0aGUgZGVjcnlwdGlvbiB3aWxsCitmYWlsLiAgQW5vdGhlciBlcnJvciB2YWx1ZSBhY3R1YWxseSBtZWFucyB0aGF0IHRoZSBlbmQgb2YgYSBkYXRhCitidWZmZXIgb3IgbGlzdCBoYXMgYmVlbiByZWFjaGVkLiAgVGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbnMgZXhwbGFpbgorZm9yIG1hbnkgZXJyb3IgY29kZXMgd2hhdCB0aGV5IG1lYW4gdXN1YWxseS4gIFNvbWUgZXJyb3IgdmFsdWVzIGhhdmUKK3NwZWNpZmljIG1lYW5pbmdzIGlmIHJldHVybmVkIGJ5IGEgY2VydGFpbiBmdW5jdGlvbnMuICBTdWNoIGNhc2VzIGFyZQorZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucy4KKworTGliZ2NyeXB0IHVzZXMgdGhlIEBjb2Rle2xpYmdwZy1lcnJvcn0gbGlicmFyeS4gIFRoaXMgYWxsb3dzIHRvIHNoYXJlCit0aGUgZXJyb3IgY29kZXMgd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBHbnVQRyBzeXN0ZW0sIGFuZCB0byBwYXNzCitlcnJvciB2YWx1ZXMgdHJhbnNwYXJlbnRseSBmcm9tIHRoZSBjcnlwdG8gZW5naW5lLCBvciBzb21lIGhlbHBlcgorYXBwbGljYXRpb24gb2YgdGhlIGNyeXB0byBlbmdpbmUsIHRvIHRoZSB1c2VyLiAgVGhpcyB3YXkgbm8KK2luZm9ybWF0aW9uIGlzIGxvc3QuICBBcyBhIGNvbnNlcXVlbmNlLCBMaWJnY3J5cHQgZG9lcyBub3QgdXNlIGl0cyBvd24KK2lkZW50aWZpZXJzIGZvciBlcnJvciBjb2RlcywgYnV0IHVzZXMgdGhvc2UgcHJvdmlkZWQgYnkKK0Bjb2Rle2xpYmdwZy1lcnJvcn0uICBUaGV5IHVzdWFsbHkgc3RhcnQgd2l0aCBAY29kZXtHUEdfRVJSX30uCisKK0hvd2V2ZXIsIExpYmdjcnlwdCBkb2VzIHByb3ZpZGUgYWxpYXNlcyBmb3IgdGhlIGZ1bmN0aW9ucworZGVmaW5lZCBpbiBsaWJncGctZXJyb3IsIHdoaWNoIG1pZ2h0IGJlIHByZWZlcnJlZCBmb3IgbmFtZSBzcGFjZQorY29uc2lzdGVuY3kuCisKKworTW9zdCBmdW5jdGlvbnMgaW4gTGliZ2NyeXB0IHJldHVybiBhbiBlcnJvciBjb2RlIGluIHRoZSBjYXNlCitvZiBmYWlsdXJlLiAgRm9yIHRoaXMgcmVhc29uLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFsd2F5cyBjYXRjaCB0aGUKK2Vycm9yIGNvbmRpdGlvbiBhbmQgdGFrZSBhcHByb3ByaWF0ZSBtZWFzdXJlcywgZm9yIGV4YW1wbGUgYnkKK3JlbGVhc2luZyB0aGUgcmVzb3VyY2VzIGFuZCBwYXNzaW5nIHRoZSBlcnJvciB1cCB0byB0aGUgY2FsbGVyLCBvciBieQorZGlzcGxheWluZyBhIGRlc2NyaXB0aXZlIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIGNhbmNlbGluZyB0aGUKK29wZXJhdGlvbi4KKworU29tZSBlcnJvciB2YWx1ZXMgZG8gbm90IGluZGljYXRlIGEgc3lzdGVtIGVycm9yIG9yIGFuIGVycm9yIGluIHRoZQorb3BlcmF0aW9uLCBidXQgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24gdGhhdCBmYWlsZWQgcHJvcGVybHkuCisKK0dudVBHIGNvbXBvbmVudHMsIGluY2x1ZGluZyBMaWJnY3J5cHQsIHVzZSBhbiBleHRyYSBsaWJyYXJ5IG5hbWVkCitsaWJncGctZXJyb3IgdG8gcHJvdmlkZSBhIGNvbW1vbiBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBGb3IgbW9yZQoraW5mb3JtYXRpb24gb24gbGliZ3BnLWVycm9yLCBzZWUgdGhlIGFjY29yZGluZyBtYW51YWwuCisKK0BtZW51CisqIEVycm9yIFZhbHVlczo6ICAgICAgICAgICAgICAgIFRoZSBlcnJvciB2YWx1ZSBhbmQgd2hhdCBpdCBtZWFucy4KKyogRXJyb3IgU291cmNlczo6ICAgICAgICAgICAgICAgQSBsaXN0IG9mIGltcG9ydGFudCBlcnJvciBzb3VyY2VzLgorKiBFcnJvciBDb2Rlczo6ICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW1wb3J0YW50IGVycm9yIGNvZGVzLgorKiBFcnJvciBTdHJpbmdzOjogICAgICAgICAgICAgICBIb3cgdG8gZ2V0IGEgZGVzY3JpcHRpdmUgc3RyaW5nIGZyb20gYSB2YWx1ZS4KK0BlbmQgbWVudQorCisKK0Bub2RlIEVycm9yIFZhbHVlcworQHN1YnNlY3Rpb24gRXJyb3IgVmFsdWVzCitAY2luZGV4IGVycm9yIHZhbHVlcworQGNpbmRleCBlcnJvciBjb2RlcworQGNpbmRleCBlcnJvciBzb3VyY2VzCisKK0BkZWZ0cCB7RGF0YSB0eXBlfSB7Z2NyeV9lcnJfY29kZV90fQorVGhlIEBjb2Rle2djcnlfZXJyX2NvZGVfdH0gdHlwZSBpcyBhbiBhbGlhcyBmb3IgdGhlCitAY29kZXtsaWJncGctZXJyb3J9IHR5cGUgQGNvZGV7Z3BnX2Vycl9jb2RlX3R9LiAgVGhlIGVycm9yIGNvZGUKK2luZGljYXRlcyB0aGUgdHlwZSBvZiBhbiBlcnJvciwgb3IgdGhlIHJlYXNvbiB3aHkgYW4gb3BlcmF0aW9uIGZhaWxlZC4KKworQSBsaXN0IG9mIGltcG9ydGFudCBlcnJvciBjb2RlcyBjYW4gYmUgZm91bmQgaW4gdGhlIG5leHQgc2VjdGlvbi4KK0BlbmQgZGVmdHAKKworQGRlZnRwIHtEYXRhIHR5cGV9IHtnY3J5X2Vycl9zb3VyY2VfdH0KK1RoZSBAY29kZXtnY3J5X2Vycl9zb3VyY2VfdH0gdHlwZSBpcyBhbiBhbGlhcyBmb3IgdGhlCitAY29kZXtsaWJncGctZXJyb3J9IHR5cGUgQGNvZGV7Z3BnX2Vycl9zb3VyY2VfdH0uICBUaGUgZXJyb3Igc291cmNlCitoYXMgbm90IGEgcHJlY2lzZWx5IGRlZmluZWQgbWVhbmluZy4gIFNvbWV0aW1lcyBpdCBpcyB0aGUgcGxhY2Ugd2hlcmUKK3RoZSBlcnJvciBoYXBwZW5lZCwgc29tZXRpbWVzIGl0IGlzIHRoZSBwbGFjZSB3aGVyZSBhbiBlcnJvciB3YXMKK2VuY29kZWQgaW50byBhbiBlcnJvciB2YWx1ZS4gIFVzdWFsbHkgdGhlIGVycm9yIHNvdXJjZSB3aWxsIGdpdmUgYW4KK2luZGljYXRpb24gdG8gd2hlcmUgdG8gbG9vayBmb3IgdGhlIHByb2JsZW0uICBUaGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwKK2J1dCBpdCBpcyBhdHRlbXB0ZWQgdG8gYWNoaWV2ZSB0aGlzIGdvYWwuCisKK0EgbGlzdCBvZiBpbXBvcnRhbnQgZXJyb3Igc291cmNlcyBjYW4gYmUgZm91bmQgaW4gdGhlIG5leHQgc2VjdGlvbi4KK0BlbmQgZGVmdHAKKworQGRlZnRwIHtEYXRhIHR5cGV9IHtnY3J5X2Vycm9yX3R9CitUaGUgQGNvZGV7Z2NyeV9lcnJvcl90fSB0eXBlIGlzIGFuIGFsaWFzIGZvciB0aGUgQGNvZGV7bGliZ3BnLWVycm9yfQordHlwZSBAY29kZXtncGdfZXJyb3JfdH0uICBBbiBlcnJvciB2YWx1ZSBsaWtlIHRoaXMgaGFzIGFsd2F5cyB0d28KK2NvbXBvbmVudHMsIGFuIGVycm9yIGNvZGUgYW5kIGFuIGVycm9yIHNvdXJjZS4gIEJvdGggdG9nZXRoZXIgZm9ybSB0aGUKK2Vycm9yIHZhbHVlLgorCitUaHVzLCB0aGUgZXJyb3IgdmFsdWUgY2FuIG5vdCBiZSBkaXJlY3RseSBjb21wYXJlZCBhZ2FpbnN0IGFuIGVycm9yCitjb2RlLCBidXQgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cgbXVzdCBiZSB1c2VkLgorSG93ZXZlciwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG9ubHkgMCBpcyB1c2VkIHRvIGluZGljYXRlIHN1Y2Nlc3MKKyhAY29kZXtHUEdfRVJSX05PX0VSUk9SfSksIGFuZCB0aGF0IGluIHRoaXMgY2FzZSBhbGwgb3RoZXIgcGFydHMgb2YKK3RoZSBlcnJvciB2YWx1ZSBhcmUgc2V0IHRvIDAsIHRvby4KKworTm90ZSB0aGF0IGluIExpYmdjcnlwdCwgdGhlIGVycm9yIHNvdXJjZSBpcyB1c2VkIHB1cmVseSBmb3IKK2RpYWdub3N0aWMgcHVycG9zZXMuICBPbmx5IHRoZSBlcnJvciBjb2RlIHNob3VsZCBiZSBjaGVja2VkIHRvIHRlc3QKK2ZvciBhIGNlcnRhaW4gb3V0Y29tZSBvZiBhIGZ1bmN0aW9uLiAgVGhlIG1hbnVhbCBvbmx5IGRvY3VtZW50cyB0aGUKK2Vycm9yIGNvZGUgcGFydCBvZiBhbiBlcnJvciB2YWx1ZS4gIFRoZSBlcnJvciBzb3VyY2UgaXMgbGVmdAordW5zcGVjaWZpZWQgYW5kIG1pZ2h0IGJlIGFueXRoaW5nLgorQGVuZCBkZWZ0cAorCitAZGVmdHlwZWZ1biB7Z2NyeV9lcnJfY29kZV90fSBnY3J5X2Vycl9jb2RlIChAd3tnY3J5X2Vycm9yX3QgQHZhcntlcnJ9fSkKK1RoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIEBjb2Rle2djcnlfZXJyX2NvZGV9IHJldHVybnMgdGhlCitAY29kZXtnY3J5X2Vycl9jb2RlX3R9IGNvbXBvbmVudCBvZiB0aGUgZXJyb3IgdmFsdWUgQHZhcntlcnJ9LiAgVGhpcworZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGV4dHJhY3QgdGhlIGVycm9yIGNvZGUgZnJvbSBhbiBlcnJvciB2YWx1ZSBpbgorb3JkZXIgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBAY29kZXtHUEdfRVJSXyp9IGVycm9yIGNvZGUgbWFjcm9zLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHtnY3J5X2Vycl9zb3VyY2VfdH0gZ2NyeV9lcnJfc291cmNlIChAd3tnY3J5X2Vycm9yX3QgQHZhcntlcnJ9fSkKK1RoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIEBjb2Rle2djcnlfZXJyX3NvdXJjZX0gcmV0dXJucyB0aGUKK0Bjb2Rle2djcnlfZXJyX3NvdXJjZV90fSBjb21wb25lbnQgb2YgdGhlIGVycm9yIHZhbHVlIEB2YXJ7ZXJyfS4gIFRoaXMKK2Z1bmN0aW9uIG11c3QgYmUgdXNlZCB0byBleHRyYWN0IHRoZSBlcnJvciBzb3VyY2UgZnJvbSBhbiBlcnJvciB2YWx1ZSBpbgorb3JkZXIgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBAY29kZXtHUEdfRVJSX1NPVVJDRV8qfSBlcnJvciBzb3VyY2UgbWFjcm9zLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHtnY3J5X2Vycm9yX3R9IGdjcnlfZXJyX21ha2UgKEB3e2djcnlfZXJyX3NvdXJjZV90IEB2YXJ7c291cmNlfX0sIEB3e2djcnlfZXJyX2NvZGVfdCBAdmFye2NvZGV9fSkKK1RoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIEBjb2Rle2djcnlfZXJyX21ha2V9IHJldHVybnMgdGhlIGVycm9yCit2YWx1ZSBjb25zaXN0aW5nIG9mIHRoZSBlcnJvciBzb3VyY2UgQHZhcntzb3VyY2V9IGFuZCB0aGUgZXJyb3IgY29kZQorQHZhcntjb2RlfS4KKworVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBjYWxsYmFjayBmdW5jdGlvbnMgdG8gY29uc3RydWN0IGFuIGVycm9yCit2YWx1ZSB0byByZXR1cm4gaXQgdG8gdGhlIGxpYnJhcnkuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4ge2djcnlfZXJyb3JfdH0gZ2NyeV9lcnJvciAoQHd7Z2NyeV9lcnJfY29kZV90IEB2YXJ7Y29kZX19KQorVGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9lcnJvcn0gcmV0dXJucyB0aGUgZXJyb3IgdmFsdWUKK2NvbnNpc3Rpbmcgb2YgdGhlIGRlZmF1bHQgZXJyb3Igc291cmNlIGFuZCB0aGUgZXJyb3IgY29kZSBAdmFye2NvZGV9LgorCitGb3IgQGFjcm9ueW17R0NSWX0gYXBwbGljYXRpb25zLCB0aGUgZGVmYXVsdCBlcnJvciBzb3VyY2UgaXMKK0Bjb2Rle0dQR19FUlJfU09VUkNFX1VTRVJfMX0uICBZb3UgY2FuIGRlZmluZQorQGNvZGV7R0NSWV9FUlJfU09VUkNFX0RFRkFVTFR9IGJlZm9yZSBpbmNsdWRpbmcgQGZpbGV7Z2NyeXB0Lmh9IHRvCitjaGFuZ2UgdGhpcyBkZWZhdWx0LgorCitUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBjb25zdHJ1Y3QgYW4gZXJyb3IKK3ZhbHVlIHRvIHJldHVybiBpdCB0byB0aGUgbGlicmFyeS4KK0BlbmQgZGVmdHlwZWZ1bgorCitUaGUgQGNvZGV7bGliZ3BnLWVycm9yfSBsaWJyYXJ5IHByb3ZpZGVzIGVycm9yIGNvZGVzIGZvciBhbGwgc3lzdGVtCitlcnJvciBudW1iZXJzIGl0IGtub3dzIGFib3V0LiAgSWYgQHZhcntlcnJ9IGlzIGFuIHVua25vd24gZXJyb3IKK251bWJlciwgdGhlIGVycm9yIGNvZGUgQGNvZGV7R1BHX0VSUl9VTktOT1dOX0VSUk5PfSBpcyB1c2VkLiAgVGhlCitmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBlcnJvciB2YWx1ZXMgZnJvbSBzeXN0ZW0KK2Vycm5vIG51bWJlcnMuCisKK0BkZWZ0eXBlZnVuIHtnY3J5X2Vycm9yX3R9IGdjcnlfZXJyX21ha2VfZnJvbV9lcnJubyAoQHd7Z2NyeV9lcnJfc291cmNlX3QgQHZhcntzb3VyY2V9fSwgQHd7aW50IEB2YXJ7ZXJyfX0pCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9lcnJfbWFrZV9mcm9tX2Vycm5vfSBpcyBsaWtlCitAY29kZXtnY3J5X2Vycl9tYWtlfSwgYnV0IGl0IHRha2VzIGEgc3lzdGVtIGVycm9yIGxpa2UgQGNvZGV7ZXJybm99CitpbnN0ZWFkIG9mIGEgQGNvZGV7Z2NyeV9lcnJfY29kZV90fSBlcnJvciBjb2RlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHtnY3J5X2Vycm9yX3R9IGdjcnlfZXJyb3JfZnJvbV9lcnJubyAoQHd7aW50IEB2YXJ7ZXJyfX0pCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9lcnJvcl9mcm9tX2Vycm5vfSBpcyBsaWtlIEBjb2Rle2djcnlfZXJyb3J9LAorYnV0IGl0IHRha2VzIGEgc3lzdGVtIGVycm9yIGxpa2UgQGNvZGV7ZXJybm99IGluc3RlYWQgb2YgYQorQGNvZGV7Z2NyeV9lcnJfY29kZV90fSBlcnJvciBjb2RlLgorQGVuZCBkZWZ0eXBlZnVuCisKK1NvbWV0aW1lcyB5b3UgbWlnaHQgd2FudCB0byBtYXAgc3lzdGVtIGVycm9yIG51bWJlcnMgdG8gZXJyb3IgY29kZXMKK2RpcmVjdGx5LCBvciBtYXAgYW4gZXJyb3IgY29kZSByZXByZXNlbnRpbmcgYSBzeXN0ZW0gZXJyb3IgYmFjayB0byB0aGUKK3N5c3RlbSBlcnJvciBudW1iZXIuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0byBkbyB0aGF0LgorCitAZGVmdHlwZWZ1biB7Z2NyeV9lcnJfY29kZV90fSBnY3J5X2Vycl9jb2RlX2Zyb21fZXJybm8gKEB3e2ludCBAdmFye2Vycn19KQorVGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfZXJyX2NvZGVfZnJvbV9lcnJub30gcmV0dXJucyB0aGUgZXJyb3IgY29kZQorZm9yIHRoZSBzeXN0ZW0gZXJyb3IgQHZhcntlcnJ9LiAgSWYgQHZhcntlcnJ9IGlzIG5vdCBhIGtub3duIHN5c3RlbQorZXJyb3IsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEBjb2Rle0dQR19FUlJfVU5LTk9XTl9FUlJOT30uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4ge2ludH0gZ2NyeV9lcnJfY29kZV90b19lcnJubyAoQHd7Z2NyeV9lcnJfY29kZV90IEB2YXJ7ZXJyfX0pCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9lcnJfY29kZV90b19lcnJub30gcmV0dXJucyB0aGUgc3lzdGVtIGVycm9yCitmb3IgdGhlIGVycm9yIGNvZGUgQHZhcntlcnJ9LiAgSWYgQHZhcntlcnJ9IGlzIG5vdCBhbiBlcnJvciBjb2RlCityZXByZXNlbnRpbmcgYSBzeXN0ZW0gZXJyb3IsIG9yIGlmIHRoaXMgc3lzdGVtIGVycm9yIGlzIG5vdCBkZWZpbmVkIG9uCit0aGlzIHN5c3RlbSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgQGNvZGV7MH0uCitAZW5kIGRlZnR5cGVmdW4KKworCitAbm9kZSBFcnJvciBTb3VyY2VzCitAc3Vic2VjdGlvbiBFcnJvciBTb3VyY2VzCitAY2luZGV4IGVycm9yIGNvZGVzLCBsaXN0IG9mCisKK1RoZSBsaWJyYXJ5IEBjb2Rle2xpYmdwZy1lcnJvcn0gZGVmaW5lcyBhbiBlcnJvciBzb3VyY2UgZm9yIGV2ZXJ5Citjb21wb25lbnQgb2YgdGhlIEdudVBHIHN5c3RlbS4gIFRoZSBlcnJvciBzb3VyY2UgcGFydCBvZiBhbiBlcnJvcgordmFsdWUgaXMgbm90IHdlbGwgZGVmaW5lZC4gIEFzIHN1Y2ggaXQgaXMgbWFpbmx5IHVzZWZ1bCB0byBpbXByb3ZlIHRoZQorZGlhZ25vc3RpYyBlcnJvciBtZXNzYWdlIGZvciB0aGUgdXNlci4KKworSWYgdGhlIGVycm9yIGNvZGUgcGFydCBvZiBhbiBlcnJvciB2YWx1ZSBpcyBAY29kZXswfSwgdGhlIHdob2xlIGVycm9yCit2YWx1ZSB3aWxsIGJlIEBjb2RlezB9LiAgSW4gdGhpcyBjYXNlIHRoZSBlcnJvciBzb3VyY2UgcGFydCBpcyBvZgorY291cnNlIEBjb2Rle0dQR19FUlJfU09VUkNFX1VOS05PV059LgorCitUaGUgbGlzdCBvZiBlcnJvciBzb3VyY2VzIHRoYXQgbWlnaHQgb2NjdXIgaW4gYXBwbGljYXRpb25zIHVzaW5nCitAYWNyb255bXtMaWJnY3J5cHR9IGlzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdQR19FUlJfU09VUkNFX1VOS05PV04KK1RoZSBlcnJvciBzb3VyY2UgaXMgbm90IGtub3duLiAgVGhlIHZhbHVlIG9mIHRoaXMgZXJyb3Igc291cmNlIGlzCitAY29kZXswfS4KKworQGl0ZW0gR1BHX0VSUl9TT1VSQ0VfR1BHTUUKK1RoZSBlcnJvciBzb3VyY2UgaXMgQGFjcm9ueW17R1BHTUV9IGl0c2VsZi4KKworQGl0ZW0gR1BHX0VSUl9TT1VSQ0VfR1BHCitUaGUgZXJyb3Igc291cmNlIGlzIEdudVBHLCB3aGljaCBpcyB0aGUgY3J5cHRvIGVuZ2luZSB1c2VkIGZvciB0aGUKK09wZW5QR1AgcHJvdG9jb2wuCisKK0BpdGVtIEdQR19FUlJfU09VUkNFX0dQR1NNCitUaGUgZXJyb3Igc291cmNlIGlzIEdQR1NNLCB3aGljaCBpcyB0aGUgY3J5cHRvIGVuZ2luZSB1c2VkIGZvciB0aGUKK09wZW5QR1AgcHJvdG9jb2wuCisKK0BpdGVtIEdQR19FUlJfU09VUkNFX0dDUllQVAorVGhlIGVycm9yIHNvdXJjZSBpcyBAY29kZXtsaWJnY3J5cHR9LCB3aGljaCBpcyB1c2VkIGJ5IGNyeXB0byBlbmdpbmVzCit0byBwZXJmb3JtIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy4KKworQGl0ZW0gR1BHX0VSUl9TT1VSQ0VfR1BHQUdFTlQKK1RoZSBlcnJvciBzb3VyY2UgaXMgQGNvbW1hbmR7Z3BnLWFnZW50fSwgd2hpY2ggaXMgdXNlZCBieSBjcnlwdG8KK2VuZ2luZXMgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHdpdGggdGhlIHNlY3JldCBrZXkuCisKK0BpdGVtIEdQR19FUlJfU09VUkNFX1BJTkVOVFJZCitUaGUgZXJyb3Igc291cmNlIGlzIEBjb21tYW5ke3BpbmVudHJ5fSwgd2hpY2ggaXMgdXNlZCBieQorQGNvbW1hbmR7Z3BnLWFnZW50fSB0byBxdWVyeSB0aGUgcGFzc3BocmFzZSB0byB1bmxvY2sgYSBzZWNyZXQga2V5LgorCitAaXRlbSBHUEdfRVJSX1NPVVJDRV9TQ0QKK1RoZSBlcnJvciBzb3VyY2UgaXMgdGhlIFNtYXJ0Q2FyZCBEYWVtb24sIHdoaWNoIGlzIHVzZWQgYnkKK0Bjb21tYW5ke2dwZy1hZ2VudH0gdG8gZGVsZWdhdGUgb3BlcmF0aW9ucyB3aXRoIHRoZSBzZWNyZXQga2V5IHRvIGEKK1NtYXJ0Q2FyZC4KKworQGl0ZW0gR1BHX0VSUl9TT1VSQ0VfS0VZQk9YCitUaGUgZXJyb3Igc291cmNlIGlzIEBjb2Rle2xpYmtieH0sIGEgbGlicmFyeSB1c2VkIGJ5IHRoZSBjcnlwdG8KK2VuZ2luZXMgdG8gbWFuYWdlIGxvY2FsIGtleXJpbmdzLgorCitAaXRlbSBHUEdfRVJSX1NPVVJDRV9VU0VSXzEKK0BpdGVtIEdQR19FUlJfU09VUkNFX1VTRVJfMgorQGl0ZW0gR1BHX0VSUl9TT1VSQ0VfVVNFUl8zCitAaXRlbSBHUEdfRVJSX1NPVVJDRV9VU0VSXzQKK1RoZXNlIGVycm9yIHNvdXJjZXMgYXJlIG5vdCB1c2VkIGJ5IGFueSBHbnVQRyBjb21wb25lbnQgYW5kIGNhbiBiZQordXNlZCBieSBvdGhlciBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBhcHBsaWNhdGlvbnMgdXNpbmcKK0xpYmdjcnlwdCBjYW4gdXNlIHRoZW0gdG8gbWFyayBlcnJvciB2YWx1ZXMgY29taW5nIGZyb20gY2FsbGJhY2sKK2hhbmRsZXJzLiAgVGh1cyBAY29kZXtHUEdfRVJSX1NPVVJDRV9VU0VSXzF9IGlzIHRoZSBkZWZhdWx0IGZvciBlcnJvcnMKK2NyZWF0ZWQgd2l0aCBAY29kZXtnY3J5X2Vycm9yfSBhbmQgQGNvZGV7Z2NyeV9lcnJvcl9mcm9tX2Vycm5vfSwKK3VubGVzcyB5b3UgZGVmaW5lIEBjb2Rle0dDUllfRVJSX1NPVVJDRV9ERUZBVUxUfSBiZWZvcmUgaW5jbHVkaW5nCitAZmlsZXtnY3J5cHQuaH0uCitAZW5kIHRhYmxlCisKKworQG5vZGUgRXJyb3IgQ29kZXMKK0BzdWJzZWN0aW9uIEVycm9yIENvZGVzCitAY2luZGV4IGVycm9yIGNvZGVzLCBsaXN0IG9mCisKK1RoZSBsaWJyYXJ5IEBjb2Rle2xpYmdwZy1lcnJvcn0gZGVmaW5lcyBtYW55IGVycm9yIHZhbHVlcy4gIFRoZQorZm9sbG93aW5nIGxpc3QgaW5jbHVkZXMgdGhlIG1vc3QgaW1wb3J0YW50IGVycm9yIGNvZGVzLgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdQR19FUlJfRU9GCitUaGlzIHZhbHVlIGluZGljYXRlcyB0aGUgZW5kIG9mIGEgbGlzdCwgYnVmZmVyIG9yIGZpbGUuCisKK0BpdGVtIEdQR19FUlJfTk9fRVJST1IKK1RoaXMgdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MuICBUaGUgdmFsdWUgb2YgdGhpcyBlcnJvciBjb2RlIGlzCitAY29kZXswfS4gIEFsc28sIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhbiBlcnJvciB2YWx1ZSBtYWRlIGZyb20gdGhlCitlcnJvciBjb2RlIEBjb2RlezB9IHdpbGwgYmUgQGNvZGV7MH0gaXRzZWxmIChhcyBhIHdob2xlKS4gIFRoaXMgbWVhbnMKK3RoYXQgdGhlIGVycm9yIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyBsb3N0IGZvciB0aGlzIGVycm9yIGNvZGUsCitob3dldmVyLCBhcyB0aGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgbm8gZXJyb3Igb2NjdXJyZWQsIHRoaXMgaXMKK2dlbmVyYWxseSBub3QgYSBwcm9ibGVtLgorCitAaXRlbSBHUEdfRVJSX0dFTkVSQUwKK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZywgYnV0IGVpdGhlciB0aGVyZSBpcyBub3QKK2Vub3VnaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvYmxlbSB0byByZXR1cm4gYSBtb3JlIHVzZWZ1bCBlcnJvcgordmFsdWUsIG9yIHRoZXJlIGlzIG5vIHNlcGFyYXRlIGVycm9yIHZhbHVlIGZvciB0aGlzIHR5cGUgb2YgcHJvYmxlbS4KKworQGl0ZW0gR1BHX0VSUl9FTk9NRU0KK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiBvY2N1cnJlZC4KKworQGl0ZW0gR1BHX0VSUl9FLi4uCitTeXN0ZW0gZXJyb3JzIGFyZSBtYXBwZWQgdG8gR1BHX0VSUl9FRk9PIHdoZXJlIEZPTyBpcyB0aGUgc3ltYm9sIGZvcgordGhlIHN5c3RlbSBlcnJvci4KKworQGl0ZW0gR1BHX0VSUl9JTlZfVkFMVUUKK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCBzb21lIHVzZXIgcHJvdmlkZWQgZGF0YSB3YXMgb3V0IG9mIHJhbmdlLgorCitAaXRlbSBHUEdfRVJSX1VOVVNBQkxFX1BVQktFWQorVGhpcyB2YWx1ZSBtZWFucyB0aGF0IHNvbWUgcmVjaXBpZW50cyBmb3IgYSBtZXNzYWdlIHdlcmUgaW52YWxpZC4KKworQGl0ZW0gR1BHX0VSUl9VTlVTQUJMRV9TRUNLRVkKK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCBzb21lIHNpZ25lcnMgd2VyZSBpbnZhbGlkLgorCitAaXRlbSBHUEdfRVJSX05PX0RBVEEKK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCBkYXRhIHdhcyBleHBlY3RlZCB3aGVyZSBubyBkYXRhIHdhcyBmb3VuZC4KKworQGl0ZW0gR1BHX0VSUl9DT05GTElDVAorVGhpcyB2YWx1ZSBtZWFucyB0aGF0IGEgY29uZmxpY3Qgb2Ygc29tZSBzb3J0IG9jY3VycmVkLgorCitAaXRlbSBHUEdfRVJSX05PVF9JTVBMRU1FTlRFRAorVGhpcyB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gKG9yIG9wZXJhdGlvbikgaXMgbm90CitpbXBsZW1lbnRlZC4gIFRoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0IGNhbiBvbmx5IG9jY3VyIGlmCit5b3UgdXNlIGNlcnRhaW4gdmFsdWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaCBkbyBub3Qgd29yaywKK2J1dCBmb3Igd2hpY2ggd2UgdGhpbmsgdGhhdCB0aGV5IHNob3VsZCB3b3JrIGF0IHNvbWUgbGF0ZXIgdGltZS4KKworQGl0ZW0gR1BHX0VSUl9ERUNSWVBUX0ZBSUxFRAorVGhpcyB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBhIGRlY3J5cHRpb24gb3BlcmF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwuCisKK0BpdGVtIEdQR19FUlJfV1JPTkdfS0VZX1VTQUdFCitUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IGEga2V5IGlzIG5vdCB1c2VkIGFwcHJvcHJpYXRlbHkuCisKK0BpdGVtIEdQR19FUlJfTk9fU0VDS0VZCitUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IG5vIHNlY3JldCBrZXkgZm9yIHRoZSB1c2VyIElEIGlzIGF2YWlsYWJsZS4KKworQGl0ZW0gR1BHX0VSUl9VTlNVUFBPUlRFRF9BTEdPUklUSE0KK1RoaXMgdmFsdWUgbWVhbnMgYSB2ZXJpZmljYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIGNyeXB0b2dyYXBoaWMKK2FsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjcnlwdG8gYmFja2VuZC4KKworQGl0ZW0gR1BHX0VSUl9CQURfU0lHTkFUVVJFCitUaGlzIHZhbHVlIG1lYW5zIGEgdmVyaWZpY2F0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBzaWduYXR1cmUgaXMgYmFkLgorCitAaXRlbSBHUEdfRVJSX05PX1BVQktFWQorVGhpcyB2YWx1ZSBtZWFucyBhIHZlcmlmaWNhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcHVibGljIGtleSBpcyBub3QKK2F2YWlsYWJsZS4KKworQGl0ZW0gR1BHX0VSUl9OT1RfT1BFUkFUSU9OQUwKK1RoaXMgdmFsdWUgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSBpcyBub3QgeWV0IGluIHN0YXRlIHdoaWNoIGFsbG93cyB0bwordXNlIHRoaXMgZnVuY3Rpb24uICBUaGlzIGVycm9yIGNvZGUgaXMgaW4gcGFydGljdWxhciByZXR1cm5lZCBpZgorTGliZ2NyeXB0IGlzIG9wZXJhdGVkIGluIEZJUFMgbW9kZSBhbmQgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZQorbGlicmFyeSBkb2VzIG5vdCB5ZXQgb3Igbm90IGFueW1vcmUgYWxsb3cgdGhlIHVzZSBvZiBhIHNlcnZpY2UuCisKK1RoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIG5ld2VyIGxpYmdwZy1lcnJvciB2ZXJzaW9ucywgdGh1cworeW91IG1pZ2h0IHNlZSBgYGludmFsaWQgZXJyb3IgY29kZScnIHdoZW4gcGFzc2luZyB0aGlzIHRvCitAY29kZXtncGdfc3RyZXJyb3J9LiAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhpcyBlcnJvciBjb2RlIGlzIDE3Ni4KKworQGl0ZW0gR1BHX0VSUl9VU0VSXzEKK0BpdGVtIEdQR19FUlJfVVNFUl8yCitAaXRlbSAuLi4KK0BpdGVtIEdQR19FUlJfVVNFUl8xNgorVGhlc2UgZXJyb3IgY29kZXMgYXJlIG5vdCB1c2VkIGJ5IGFueSBHbnVQRyBjb21wb25lbnQgYW5kIGNhbiBiZQorZnJlZWx5IHVzZWQgYnkgb3RoZXIgc29mdHdhcmUuICBBcHBsaWNhdGlvbnMgdXNpbmcgTGliZ2NyeXB0CittaWdodCB1c2UgdGhlbSB0byBtYXJrIHNwZWNpZmljIGVycm9ycyByZXR1cm5lZCBieSBjYWxsYmFjayBoYW5kbGVycworaWYgbm8gc3VpdGFibGUgZXJyb3IgY29kZXMgKGluY2x1ZGluZyB0aGUgc3lzdGVtIGVycm9ycykgZm9yIHRoZXNlCitlcnJvcnMgZXhpc3QgYWxyZWFkeS4KK0BlbmQgdGFibGUKKworCitAbm9kZSBFcnJvciBTdHJpbmdzCitAc3Vic2VjdGlvbiBFcnJvciBTdHJpbmdzCitAY2luZGV4IGVycm9yIHZhbHVlcywgcHJpbnRpbmcgb2YKK0BjaW5kZXggZXJyb3IgY29kZXMsIHByaW50aW5nIG9mCitAY2luZGV4IGVycm9yIHNvdXJjZXMsIHByaW50aW5nIG9mCitAY2luZGV4IGVycm9yIHN0cmluZ3MKKworQGRlZnR5cGVmdW4ge2NvbnN0IGNoYXIgKn0gZ2NyeV9zdHJlcnJvciAoQHd7Z2NyeV9lcnJvcl90IEB2YXJ7ZXJyfX0pCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9zdHJlcnJvcn0gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdGF0aWNhbGx5CithbGxvY2F0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IgY29kZSBjb250YWluZWQKK2luIHRoZSBlcnJvciB2YWx1ZSBAdmFye2Vycn0uICBUaGlzIHN0cmluZyBjYW4gYmUgdXNlZCB0byBvdXRwdXQgYQorZGlhZ25vc3RpYyBtZXNzYWdlIHRvIHRoZSB1c2VyLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4ge2NvbnN0IGNoYXIgKn0gZ2NyeV9zdHJzb3VyY2UgKEB3e2djcnlfZXJyb3JfdCBAdmFye2Vycn19KQorVGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfc3Ryc291cmNlfSByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0YXRpY2FsbHkKK2FsbG9jYXRlZCBzdHJpbmcgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciBzb3VyY2UKK2NvbnRhaW5lZCBpbiB0aGUgZXJyb3IgdmFsdWUgQHZhcntlcnJ9LiAgVGhpcyBzdHJpbmcgY2FuIGJlIHVzZWQgdG8KK291dHB1dCBhIGRpYWdub3N0aWMgbWVzc2FnZSB0byB0aGUgdXNlci4KK0BlbmQgZGVmdHlwZWZ1bgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZAorYWJvdmU6CisKK0BleGFtcGxlCitAeworICBnY3J5X2NpcGhlcl9oZF90IGhhbmRsZTsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1JZX0NJUEhFUl9NT0RFX0NCQywgMCk7CisgIGlmIChlcnIpCisgICAgQHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWx1cmU6ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgZ2NyeV9zdHJzb3VyY2UgKGVyciksCisgICAgICAgICAgICAgICBnY3J5X3N0cmVycm9yIChlcnIpKTsKKyAgICBAfQorQH0KK0BlbmQgZXhhbXBsZQorCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqICBHZW5lcmFsICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAbm9kZSBIYW5kbGVyIEZ1bmN0aW9ucworQGNoYXB0ZXIgSGFuZGxlciBGdW5jdGlvbnMKKworTGliZ2NyeXB0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGluc3RhbGwgc28gY2FsbGVkIGBoYW5kbGVyIGZ1bmN0aW9ucycsCit3aGljaCBnZXQgY2FsbGVkIGJ5IExpYmdjcnlwdCBpbiBjYXNlIG9mIGNlcnRhaW4gZXZlbnRzLgorCitAbWVudQorKiBQcm9ncmVzcyBoYW5kbGVyOjogICAgICAgICAgICBVc2luZyBhIHByb2dyZXNzIGhhbmRsZXIgZnVuY3Rpb24uCisqIEFsbG9jYXRpb24gaGFuZGxlcjo6ICAgICAgICAgIFVzaW5nIHNwZWNpYWwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorKiBFcnJvciBoYW5kbGVyOjogICAgICAgICAgICAgICBVc2luZyBlcnJvciBoYW5kbGVyIGZ1bmN0aW9ucy4KKyogTG9nZ2luZyBoYW5kbGVyOjogICAgICAgICAgICAgVXNpbmcgYSBzcGVjaWFsIGxvZ2dpbmcgZnVuY3Rpb24uCitAZW5kIG1lbnUKKworQG5vZGUgUHJvZ3Jlc3MgaGFuZGxlcgorQHNlY3Rpb24gUHJvZ3Jlc3MgaGFuZGxlcgorCitJdCBpcyBvZnRlbiB1c2VmdWwgdG8gcmV0cmlldmUgc29tZSBmZWVkYmFjayB3aGlsZSBsb25nIHJ1bm5pbmcKK29wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZC4KKworQGRlZnRwIHtEYXRhIHR5cGV9IGdjcnlfaGFuZGxlcl9wcm9ncmVzc190CitQcm9ncmVzcyBoYW5kbGVyIGZ1bmN0aW9ucyBoYXZlIHRvIGJlIG9mIHRoZSB0eXBlCitAY29kZXtnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdH0sIHdoaWNoIGlzIGRlZmluZWQgYXM6CisKK0Bjb2Rle3ZvaWQgKCpnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdCkgKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50KX0KK0BlbmQgZGVmdHAKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBtYXkgYmUgdXNlZCB0byByZWdpc3RlciBhIGhhbmRsZXIgZnVuY3Rpb24gZm9yCit0aGlzIHB1cnBvc2UuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX3Byb2dyZXNzX3QgQHZhcntjYn0sIHZvaWQgKkB2YXJ7Y2JfZGF0YX0pCisKK1RoaXMgZnVuY3Rpb24gaW5zdGFsbHMgQHZhcntjYn0gYXMgdGhlIGBQcm9ncmVzcyBoYW5kbGVyJyBmdW5jdGlvbi4KK0l0IG1heSBiZSB1c2VkIG9ubHkgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAgQHZhcntjYn0gbXVzdCBiZSBkZWZpbmVkCithcyBmb2xsb3dzOgorCitAZXhhbXBsZQordm9pZAorbXlfcHJvZ3Jlc3NfaGFuZGxlciAodm9pZCAqQHZhcntjYl9kYXRhfSwgY29uc3QgY2hhciAqQHZhcnt3aGF0fSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBAdmFye3ByaW50Y2hhcn0sIGludCBAdmFye2N1cnJlbnR9LCBpbnQgQHZhcnt0b3RhbH0pCitAeworICAvKiBEbyBzb21ldGhpbmcuICAqLworQH0KK0BlbmQgZXhhbXBsZQorCitBIGRlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudHMgb2YgdGhlIHByb2dyZXNzIGhhbmRsZXIgZnVuY3Rpb24gZm9sbG93cy4KKworQHRhYmxlIEB2YXIKK0BpdGVtIGNiX2RhdGEKK1RoZSBhcmd1bWVudCBwcm92aWRlZCBpbiB0aGUgY2FsbCB0byBAY29kZXtnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyfS4KK0BpdGVtIHdoYXQKK0Egc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZSBwcm9ncmVzcyBvdXRwdXQuICBUaGUgZm9sbG93aW5nCit2YWx1ZXMgZm9yIEB2YXJ7d2hhdH0gYXJlIGRlZmluZWQ6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gbmVlZF9lbnRyb3B5CitOb3QgZW5vdWdoIGVudHJvcHkgaXMgYXZhaWxhYmxlLiAgQHZhcnt0b3RhbH0gaG9sZHMgdGhlIG51bWJlciBvZgorcmVxdWlyZWQgYnl0ZXMuCisKK0BpdGVtIHdhaXRfZGV2X3JhbmRvbQorV2FpdGluZyB0byByZS1vcGVuIGEgcmFuZG9tIGRldmljZS4gIEB2YXJ7dG90YWx9IGdpdmVzIHRoZSBudW1iZXIgb2YKK3NlY29uZHMgdW50aWwgdGhlIG5leHQgdHJ5LgorCitAaXRlbSBwcmltZWdlbgorVmFsdWVzIGZvciBAdmFye3ByaW50Y2hhcn06CitAdGFibGUgQGNvZGUKK0BpdGVtIFxuCitQcmltZSBnZW5lcmF0ZWQuCitAaXRlbSAhCitOZWVkIHRvIHJlZnJlc2ggdGhlIHBvb2wgb2YgcHJpbWUgbnVtYmVycy4KK0BpdGVtIDwsID4KK051bWJlciBvZiBiaXRzIGFkanVzdGVkLgorQGl0ZW0gXgorU2VhcmNoaW5nIGZvciBhIGdlbmVyYXRvci4KK0BpdGVtIC4KK0Zlcm1hdCB0ZXN0IG9uIDEwIGNhbmRpZGF0ZXMgZmFpbGVkLgorQGl0ZW0gOgorUmVzdGFydCB3aXRoIGEgbmV3IHJhbmRvbSB2YWx1ZS4KK0BpdGVtICsKK1JhYmluIE1pbGxlciB0ZXN0IHBhc3NlZC4KK0BlbmQgdGFibGUKKworQGVuZCB0YWJsZQorCitAZW5kIHRhYmxlCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgQWxsb2NhdGlvbiBoYW5kbGVyCitAc2VjdGlvbiBBbGxvY2F0aW9uIGhhbmRsZXIKKworSXQgaXMgcG9zc2libGUgdG8gbWFrZSBMaWJnY3J5cHQgdXNlIHNwZWNpYWwgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBvbmVzLgorCitNZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6CitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9oYW5kbGVyX2FsbG9jX3QKK1RoaXMgdHlwZSBpcyBkZWZpbmVkIGFzOiBAY29kZXt2b2lkICooKmdjcnlfaGFuZGxlcl9hbGxvY190KSAoc2l6ZV90IG4pfS4KK0BlbmQgZGVmdHAKK0BkZWZ0cCB7RGF0YSB0eXBlfSBnY3J5X2hhbmRsZXJfc2VjdXJlX2NoZWNrX3QKK1RoaXMgdHlwZSBpcyBkZWZpbmVkIGFzOiBAY29kZXtpbnQgKigqZ2NyeV9oYW5kbGVyX3NlY3VyZV9jaGVja190KSAoY29uc3Qgdm9pZCAqKX0uCitAZW5kIGRlZnRwCitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdAorVGhpcyB0eXBlIGlzIGRlZmluZWQgYXM6IEBjb2Rle3ZvaWQgKigqZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCkgKHZvaWQgKnAsIHNpemVfdCBuKX0uCitAZW5kIGRlZnRwCitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9oYW5kbGVyX2ZyZWVfdAorVGhpcyB0eXBlIGlzIGRlZmluZWQgYXM6IEBjb2Rle3ZvaWQgKigqZ2NyeV9oYW5kbGVyX2ZyZWVfdCkgKHZvaWQgKil9LgorQGVuZCBkZWZ0cAorCitTcGVjaWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBjYW4gYmUgaW5zdGFsbGVkIHdpdGggdGhlCitmb2xsb3dpbmcgZnVuY3Rpb246CisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9zZXRfYWxsb2NhdGlvbl9oYW5kbGVyIChnY3J5X2hhbmRsZXJfYWxsb2NfdCBAdmFye2Z1bmNfYWxsb2N9LCBnY3J5X2hhbmRsZXJfYWxsb2NfdCBAdmFye2Z1bmNfYWxsb2Nfc2VjdXJlfSwgZ2NyeV9oYW5kbGVyX3NlY3VyZV9jaGVja190IEB2YXJ7ZnVuY19zZWN1cmVfY2hlY2t9LCBnY3J5X2hhbmRsZXJfcmVhbGxvY190IEB2YXJ7ZnVuY19yZWFsbG9jfSwgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBAdmFye2Z1bmNfZnJlZX0pCitJbnN0YWxsIHRoZSBwcm92aWRlZCBmdW5jdGlvbnMgYW5kIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluCitmdW5jdGlvbnMgZm9yIGRvaW5nIG1lbW9yeSBhbGxvY2F0aW9uLiAgVXNpbmcgdGhpcyBmdW5jdGlvbiBpcyBpbgorZ2VuZXJhbCBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSB0aGUgc3RhbmRhcmQgTGliZ2NyeXB0IGFsbG9jYXRpb24KK2Z1bmN0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byB6ZXJvaXplIG1lbW9yeSBpZiBuZWVkZWQuCisKK1RoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWQgb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIG1heSBub3QgYmUKK3VzZWQgaW4gZmlwcyBtb2RlLgorCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9kZSBFcnJvciBoYW5kbGVyCitAc2VjdGlvbiBFcnJvciBoYW5kbGVyCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG1heSBiZSB1c2VkIHRvIHJlZ2lzdGVyIGhhbmRsZXIgZnVuY3Rpb25zIHRoYXQKK2FyZSBjYWxsZWQgYnkgTGliZ2NyeXB0IGluIGNhc2UgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIG9jY3VyLiAgVGhleQorbWF5IGFuZCBzaG91bGQgYmUgcmVnaXN0ZXJlZCBwcmlvciB0byBjYWxsaW5nIEBjb2Rle2djcnlfY2hlY2tfdmVyc2lvbn0uCisKK0BkZWZ0cCB7RGF0YSB0eXBlfSBnY3J5X2hhbmRsZXJfbm9fbWVtX3QKK1RoaXMgdHlwZSBpcyBkZWZpbmVkIGFzOiBAY29kZXtpbnQgKCpnY3J5X2hhbmRsZXJfbm9fbWVtX3QpICh2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50KX0KK0BlbmQgZGVmdHAKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9zZXRfb3V0b2Zjb3JlX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9ub19tZW1fdCBAdmFye2Z1bmNfbm9fbWVtfSwgdm9pZCAqQHZhcntjYl9kYXRhfSkKK1RoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIEB2YXJ7ZnVuY19ub19tZW19IGFzIGBvdXQtb2YtY29yZSBoYW5kbGVyJywKK3doaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGNhc2Ugb2Ygbm90IGhhdmluZyBlbm91Z2gKK21lbW9yeSBhdmFpbGFibGUuICBUaGUgaGFuZGxlciBpcyBjYWxsZWQgd2l0aCAzIGFyZ3VtZW50czogVGhlIGZpcnN0CitvbmUgaXMgdGhlIHBvaW50ZXIgQHZhcntjYl9kYXRhfSBhcyBzZXQgd2l0aCB0aGlzIGZ1bmN0aW9uLCB0aGUgc2Vjb25kCitpcyB0aGUgcmVxdWVzdGVkIG1lbW9yeSBzaXplIGFuZCB0aGUgbGFzdCBiZWluZyBhIGZsYWcuICBJZiBiaXQgMCBvZgordGhlIGZsYWcgaXMgc2V0LCBzZWN1cmUgbWVtb3J5IGhhcyBiZWVuIHJlcXVlc3RlZC4gIFRoZSBoYW5kbGVyIHNob3VsZAorZWl0aGVyIHJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgTGliZ2NyeXB0IHNob3VsZCB0cnkgYWdhaW4KK2FsbG9jYXRpbmcgbWVtb3J5IG9yIHJldHVybiBmYWxzZSB0byBsZXQgTGliZ2NyeXB0IHVzZSBpdHMgZGVmYXVsdAorZmF0YWwgZXJyb3IgaGFuZGxlci4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9oYW5kbGVyX2Vycm9yX3QKK1RoaXMgdHlwZSBpcyBkZWZpbmVkIGFzOiBAY29kZXt2b2lkICgqZ2NyeV9oYW5kbGVyX2Vycm9yX3QpICh2b2lkICosIGludCwgY29uc3QgY2hhciAqKX0KK0BlbmQgZGVmdHAKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X3NldF9mYXRhbGVycm9yX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9lcnJvcl90IEB2YXJ7ZnVuY19lcnJvcn0sIHZvaWQgKkB2YXJ7Y2JfZGF0YX0pCitUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBAdmFye2Z1bmNfZXJyb3J9IGFzIGBlcnJvciBoYW5kbGVyJywKK3doaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBjYWxsZWQgaW4gZXJyb3IgY29uZGl0aW9ucy4KK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9kZSBMb2dnaW5nIGhhbmRsZXIKK0BzZWN0aW9uIExvZ2dpbmcgaGFuZGxlcgorCitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9oYW5kbGVyX2xvZ190CitUaGlzIHR5cGUgaXMgZGVmaW5lZCBhczogQGNvZGV7dm9pZCAoKmdjcnlfaGFuZGxlcl9sb2dfdCkgKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpfQorQGVuZCBkZWZ0cAorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfc2V0X2xvZ19oYW5kbGVyIChnY3J5X2hhbmRsZXJfbG9nX3QgQHZhcntmdW5jX2xvZ30sIHZvaWQgKkB2YXJ7Y2JfZGF0YX0pCitUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBAdmFye2Z1bmNfbG9nfSBhcyBgbG9nZ2luZyBoYW5kbGVyJywgd2hpY2ggbWVhbnMKK3RoYXQgaXQgd2lsbCBiZSBjYWxsZWQgaW4gY2FzZSBMaWJnY3J5cHQgd2FudHMgdG8gbG9nIGEgbWVzc2FnZS4gIFRoaXMKK2Z1bmN0aW9uIG1heSBhbmQgc2hvdWxkIGJlIHVzZWQgcHJpb3IgdG8gY2FsbGluZworQGNvZGV7Z2NyeV9jaGVja192ZXJzaW9ufS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqICBDaXBoZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyBAaW5jbHVkZSBjaXBoZXItcmVmLnRleGkKK0Bub2RlIFN5bW1ldHJpYyBjcnlwdG9ncmFwaHkKK0BjaGFwdGVyIFN5bW1ldHJpYyBjcnlwdG9ncmFwaHkKKworVGhlIGNpcGhlciBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHN5bW1ldHJpY2FsIGNyeXB0b2dyYXBoeSwKK2kuZS4gY3J5cHRvZ3JhcGh5IHVzaW5nIGEgc2hhcmVkIGtleS4gIFRoZSBwcm9ncmFtbWluZyBtb2RlbCBmb2xsb3dzCithbiBvcGVuL3Byb2Nlc3MvY2xvc2UgcGFyYWRpZ20gYW5kIGlzIGluIHRoYXQgc2ltaWxhciB0byBvdGhlcgorYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IExpYmdjcnlwdC4KKworQG1lbnUKKyogQXZhaWxhYmxlIGNpcGhlcnM6OiAgICAgICAgICAgTGlzdCBvZiBjaXBoZXJzIHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeS4KKyogQXZhaWxhYmxlIGNpcGhlciBtb2Rlczo6ICAgICAgTGlzdCBvZiBjaXBoZXIgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5LgorKiBXb3JraW5nIHdpdGggY2lwaGVyIGhhbmRsZXM6OiAgSG93IHRvIHBlcmZvcm0gb3BlcmF0aW9ucyByZWxhdGVkIHRvIGNpcGhlciBoYW5kbGVzLgorKiBHZW5lcmFsIGNpcGhlciBmdW5jdGlvbnM6OiAgICBHZW5lcmFsIGNpcGhlciBmdW5jdGlvbnMgaW5kZXBlbmRlbnQgb2YgY2lwaGVyIGhhbmRsZXMuCitAZW5kIG1lbnUKKworQG5vZGUgQXZhaWxhYmxlIGNpcGhlcnMKK0BzZWN0aW9uIEF2YWlsYWJsZSBjaXBoZXJzCisKK0B0YWJsZSBAY29kZQorQGl0ZW0gR0NSWV9DSVBIRVJfTk9ORQorVGhpcyBpcyBub3QgYSByZWFsIGFsZ29yaXRobSBidXQgdXNlZCBieSBzb21lIGZ1bmN0aW9ucyBhcyBlcnJvciByZXR1cm4uCitUaGUgdmFsdWUgYWx3YXlzIGV2YWx1YXRlcyB0byBmYWxzZS4KKworQGl0ZW0gR0NSWV9DSVBIRVJfSURFQQorQGNpbmRleCBJREVBCitUaGlzIGlzIHRoZSBJREVBIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9DSVBIRVJfM0RFUworQGNpbmRleCAzREVTCitAY2luZGV4IFRyaXBsZS1ERVMKK0BjaW5kZXggREVTLUVERQorQGNpbmRleCBEaWdpdGFsIEVuY3J5cHRpb24gU3RhbmRhcmQKK1RyaXBsZS1ERVMgd2l0aCAzIEtleXMgYXMgRURFLiAgVGhlIGtleSBzaXplIG9mIHRoaXMgYWxnb3JpdGhtIGlzIDE2OCBidXQKK3lvdSBoYXZlIHRvIHBhc3MgMTkyIGJpdHMgYmVjYXVzZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGVhY2ggYnl0ZQorYXJlIGlnbm9yZWQuCisKK0BpdGVtIEdDUllfQ0lQSEVSX0NBU1Q1CitAY2luZGV4IENBU1Q1CitDQVNUMTI4LTUgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4gIFRoZSBrZXkgc2l6ZSBpcyAxMjggYml0cy4KKworQGl0ZW0gR0NSWV9DSVBIRVJfQkxPV0ZJU0gKK0BjaW5kZXggQmxvd2Zpc2gKK1RoZSBibG93ZmlzaCBhbGdvcml0aG0uIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFsbG93cyBvbmx5IGZvciBhIGtleQorc2l6ZSBvZiAxMjggYml0cy4KKworQGl0ZW0gR0NSWV9DSVBIRVJfU0FGRVJfU0sxMjgKK1Jlc2VydmVkIGFuZCBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorCitAaXRlbSBHQ1JZX0NJUEhFUl9ERVNfU0sKK1Jlc2VydmVkIGFuZCBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorCitAaXRlbSAgR0NSWV9DSVBIRVJfQUVTCitAaXRlbXggR0NSWV9DSVBIRVJfQUVTMTI4CitAaXRlbXggR0NSWV9DSVBIRVJfUklKTkRBRUwKK0BpdGVteCBHQ1JZX0NJUEhFUl9SSUpOREFFTDEyOAorQGNpbmRleCBSaWpuZGFlbAorQGNpbmRleCBBRVMKK0BjaW5kZXggQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZAorQUVTIChSaWpuZGFlbCkgd2l0aCBhIDEyOCBiaXQga2V5LgorCitAaXRlbSAgR0NSWV9DSVBIRVJfQUVTMTkyCitAaXRlbXggR0NSWV9DSVBIRVJfUklKTkRBRUwxOTIKK0FFUyAoUmlqbmRhZWwpIHdpdGggYSAxOTIgYml0IGtleS4KKworQGl0ZW0gIEdDUllfQ0lQSEVSX0FFUzI1NgorQGl0ZW14IEdDUllfQ0lQSEVSX1JJSk5EQUVMMjU2CitBRVMgKFJpam5kYWVsKSB3aXRoIGEgMjU2IGJpdCBrZXkuCisKK0BpdGVtICBHQ1JZX0NJUEhFUl9UV09GSVNICitAY2luZGV4IFR3b2Zpc2gKK1RoZSBUd29maXNoIGFsZ29yaXRobSB3aXRoIGEgMjU2IGJpdCBrZXkuCisKK0BpdGVtICBHQ1JZX0NJUEhFUl9UV09GSVNIMTI4CitUaGUgVHdvZmlzaCBhbGdvcml0aG0gd2l0aCBhIDEyOCBiaXQga2V5LgorCitAaXRlbSAgR0NSWV9DSVBIRVJfQVJDRk9VUgorQGNpbmRleCBBcmNmb3VyCitAY2luZGV4IFJDNAorQW4gYWxnb3JpdGhtIHdoaWNoIGlzIDEwMCUgY29tcGF0aWJsZSB3aXRoIFJTQSBJbmMuJ3MgUkM0IGFsZ29yaXRobS4KK05vdGUgdGhhdCB0aGlzIGlzIGEgc3RyZWFtIGNpcGhlciBhbmQgbXVzdCBiZSB1c2VkIHZlcnkgY2FyZWZ1bGx5IHRvCithdm9pZCBhIGNvdXBsZSBvZiB3ZWFrbmVzc2VzLgorCitAaXRlbSAgR0NSWV9DSVBIRVJfREVTCitAY2luZGV4IERFUworU3RhbmRhcmQgREVTIHdpdGggYSA1NiBiaXQga2V5LiBZb3UgbmVlZCB0byBwYXNzIDY0IGJpdCBidXQgdGhlIGhpZ2gKK2JpdHMgb2YgZWFjaCBieXRlIGFyZSBpZ25vcmVkLiAgTm90ZSwgdGhhdCB0aGlzIGlzIGEgd2VhayBhbGdvcml0aG0KK3doaWNoIGNhbiBiZSBicm9rZW4gaW4gcmVhc29uYWJsZSB0aW1lIHVzaW5nIGEgYnJ1dGUgZm9yY2UgYXBwcm9hY2guCisKK0BpdGVtICBHQ1JZX0NJUEhFUl9TRVJQRU5UMTI4CitAaXRlbXggR0NSWV9DSVBIRVJfU0VSUEVOVDE5MgorQGl0ZW14IEdDUllfQ0lQSEVSX1NFUlBFTlQyNTYKK0BjaW5kZXggU2VycGVudAorVGhlIFNlcnBlbnQgY2lwaGVyIGZyb20gdGhlIEFFUyBjb250ZXN0LgorCitAaXRlbSAgR0NSWV9DSVBIRVJfUkZDMjI2OF80MAorQGl0ZW14IEdDUllfQ0lQSEVSX1JGQzIyNjhfMTI4CitAY2luZGV4IHJmYy0yMjY4CitAY2luZGV4IFJDMgorUm9uJ3MgQ2lwaGVyIDIgaW4gdGhlIDQwIGFuZCAxMjggYml0IHZhcmlhbnRzLgorCitAaXRlbSBHQ1JZX0NJUEhFUl9TRUVECitAY2luZGV4IFNlZWQgKGNpcGhlcikKK0EgMTI4IGJpdCBjaXBoZXIgYXMgZGVzY3JpYmVkIGJ5IFJGQzQyNjkuCisKK0BpdGVtICBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOAorQGl0ZW14IEdDUllfQ0lQSEVSX0NBTUVMTElBMTkyCitAaXRlbXggR0NSWV9DSVBIRVJfQ0FNRUxMSUEyNTYKK0BjaW5kZXggQ2FtZWxsaWEKK1RoZSBDYW1lbGxpYSBjaXBoZXIgYnkgTlRULiAgU2VlCitAdXJlZntodHRwOi8vaW5mby5pc2wubnR0LmNvLmpwL0AvY3J5cHQvQC9lbmcvQC9jYW1lbGxpYS9AL3NwZWNpZmljYXRpb25zLmh0bWx9LgorCitAaXRlbSBHQ1JZX0NJUEhFUl9TQUxTQTIwCitAY2luZGV4IFNhbHNhMjAKK1RoaXMgaXMgdGhlIFNhbHNhMjAgc3RyZWFtIGNpcGhlci4KKworQGl0ZW0gR0NSWV9DSVBIRVJfU0FMU0EyMFIxMgorQGNpbmRleCBTYWxzYTIwLzEyCitUaGlzIGlzIHRoZSBTYWxzYTIwLzEyIC0gcmVkdWNlZCByb3VuZCB2ZXJzaW9uIG9mIFNhbHNhMjAgc3RyZWFtIGNpcGhlci4KKworQGl0ZW0gR0NSWV9DSVBIRVJfR09TVDI4MTQ3CitAY2luZGV4IEdPU1QgMjgxNDctODkKK1RoZSBHT1NUIDI4MTQ3LTg5IGNpcGhlciwgZGVmaW5lZCBpbiB0aGUgcmVzcGVjdGl2ZSBHT1NUIHN0YW5kYXJkLgorVHJhbnNsYXRpb24gb2YgdGhpcyBHT1NUIGludG8gRW5nbGlzaCBpcyBwcm92aWRlZCBpbiB0aGUgUkZDLTU4MzAuCisKK0BlbmQgdGFibGUKKworQG5vZGUgQXZhaWxhYmxlIGNpcGhlciBtb2RlcworQHNlY3Rpb24gQXZhaWxhYmxlIGNpcGhlciBtb2RlcworCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllfQ0lQSEVSX01PREVfTk9ORQorTm8gbW9kZSBzcGVjaWZpZWQuICBUaGlzIHNob3VsZCBub3QgYmUgdXNlZC4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0CitpZiBMaWJnY3J5cHQgaXMgbm90IHVzZWQgaW4gRklQUyBtb2RlIGFuZCBpZiBhbnkgZGVidWcgZmxhZyBoYXMgYmVlbgorc2V0LCB0aGlzIG1vZGUgbWF5IGJlIHVzZWQgdG8gYnlwYXNzIHRoZSBhY3R1YWwgZW5jcnlwdGlvbi4KKworQGl0ZW0gR0NSWV9DSVBIRVJfTU9ERV9FQ0IKK0BjaW5kZXggRUNCLCBFbGVjdHJvbmljIENvZGVib29rIG1vZGUKK0VsZWN0cm9uaWMgQ29kZWJvb2sgbW9kZS4KKworQGl0ZW0gR0NSWV9DSVBIRVJfTU9ERV9DRkIKK0BjaW5kZXggQ0ZCLCBDaXBoZXIgRmVlZGJhY2sgbW9kZQorQ2lwaGVyIEZlZWRiYWNrIG1vZGUuICBUaGUgc2hpZnQgc2l6ZSBlcXVhbHMgdGhlIGJsb2NrIHNpemUgb2YgdGhlCitjaXBoZXIgKGUuZy4gZm9yIEFFUyBpdCBpcyBDRkItMTI4KS4KKworQGl0ZW0gIEdDUllfQ0lQSEVSX01PREVfQ0JDCitAY2luZGV4IENCQywgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUKK0NpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLgorCitAaXRlbSBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTQorU3RyZWFtIG1vZGUsIG9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtcy4KKworQGl0ZW0gR0NSWV9DSVBIRVJfTU9ERV9PRkIKK0BjaW5kZXggT0ZCLCBPdXRwdXQgRmVlZGJhY2sgbW9kZQorT3V0cHV0IEZlZWRiYWNrIG1vZGUuCisKK0BpdGVtICBHQ1JZX0NJUEhFUl9NT0RFX0NUUgorQGNpbmRleCBDVFIsIENvdW50ZXIgbW9kZQorQ291bnRlciBtb2RlLgorCitAaXRlbSAgR0NSWV9DSVBIRVJfTU9ERV9BRVNXUkFQCitAY2luZGV4IEFFUy1XcmFwIG1vZGUKK1RoaXMgbW9kZSBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgQUVTLVdyYXAgYWxnb3JpdGhtIGFjY29yZGluZyB0bworUkZDLTMzOTQuICBJdCBtYXkgYmUgdXNlZCB3aXRoIGFueSAxMjggYml0IGJsb2NrIGxlbmd0aCBhbGdvcml0aG0sCitob3dldmVyIHRoZSBzcGVjcyByZXF1aXJlIG9uZSBvZiB0aGUgMyBBRVMgYWxnb3JpdGhtcy4gIFRoZXNlIHNwZWNpYWwKK2NvbmRpdGlvbnMgYXBwbHk6IElmIEBjb2Rle2djcnlfY2lwaGVyX3NldGl2fSBoYXMgbm90IGJlZW4gdXNlZCB0aGUKK3N0YW5kYXJkIElWIGlzIHVzZWQ7IGlmIGl0IGhhcyBiZWVuIHVzZWQgdGhlIGxvd2VyIDY0IGJpdCBvZiB0aGUgSVYKK2FyZSB1c2VkIGFzIHRoZSBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVlLiAgT24gZW5jcnlwdGlvbiB0aGUgcHJvdmlkZWQKK291dHB1dCBidWZmZXIgbXVzdCBiZSA2NCBiaXQgKDggYnl0ZSkgbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGJ1ZmZlcjsKK2luLXBsYWNlIGVuY3J5cHRpb24gaXMgc3RpbGwgYWxsb3dlZC4gIE9uIGRlY3J5cHRpb24gdGhlIG91dHB1dCBidWZmZXIKK21heSBiZSBzcGVjaWZpZWQgNjQgYml0ICg4IGJ5dGUpIHNob3J0ZXIgdGhhbiB0aGVuIGlucHV0IGJ1ZmZlci4gIEFzCitwZXIgc3BlY3MgdGhlIGlucHV0IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDEyOCBiaXRzIGFuZCB0aGUgbGVuZ3RoCittdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQgYml0cy4KKworQGl0ZW0gIEdDUllfQ0lQSEVSX01PREVfQ0NNCitAY2luZGV4IENDTSwgQ291bnRlciB3aXRoIENCQy1NQUMgbW9kZQorQ291bnRlciB3aXRoIENCQy1NQUMgbW9kZSBpcyBhbiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aAorQXNzb2NpYXRlZCBEYXRhIChBRUFEKSBibG9jayBjaXBoZXIgbW9kZSwgd2hpY2ggaXMgc3BlY2lmaWVkIGluCisnTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEMnIGFuZCBSRkMgMzYxMC4KKworQGl0ZW0gIEdDUllfQ0lQSEVSX01PREVfR0NNCitAY2luZGV4IEdDTSwgR2Fsb2lzL0NvdW50ZXIgTW9kZQorR2Fsb2lzL0NvdW50ZXIgTW9kZSAoR0NNKSBpcyBhbiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aAorQXNzb2NpYXRlZCBEYXRhIChBRUFEKSBibG9jayBjaXBoZXIgbW9kZSwgd2hpY2ggaXMgc3BlY2lmaWVkIGluCisnTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEQnLgorCitAZW5kIHRhYmxlCisKK0Bub2RlIFdvcmtpbmcgd2l0aCBjaXBoZXIgaGFuZGxlcworQHNlY3Rpb24gV29ya2luZyB3aXRoIGNpcGhlciBoYW5kbGVzCisKK1RvIHVzZSBhIGNpcGhlciBhbGdvcml0aG0sIHlvdSBtdXN0IGZpcnN0IGFsbG9jYXRlIGFuIGFjY29yZGluZworaGFuZGxlLiAgVGhpcyBpcyB0byBiZSBkb25lIHVzaW5nIHRoZSBvcGVuIGZ1bmN0aW9uOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfb3BlbiAoZ2NyeV9jaXBoZXJfaGRfdCAqQHZhcntoZH0sIGludCBAdmFye2FsZ299LCBpbnQgQHZhcnttb2RlfSwgdW5zaWduZWQgaW50IEB2YXJ7ZmxhZ3N9KQorCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGNvbnRleHQgaGFuZGxlIHJlcXVpcmVkIGZvciBtb3N0IG9mIHRoZQorb3RoZXIgY2lwaGVyIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBpdCBpbiBgaGQnLiAgSW4gY2FzZSBvZgorYW4gZXJyb3IsIGFuIGFjY29yZGluZyBlcnJvciBjb2RlIGlzIHJldHVybmVkLgorCitUaGUgSUQgb2YgYWxnb3JpdGhtIHRvIHVzZSBtdXN0IGJlIHNwZWNpZmllZCB2aWEgQHZhcnthbGdvfS4gIFNlZQorQHhyZWZ7QXZhaWxhYmxlIGNpcGhlcnN9LCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjaXBoZXJzIGFuZCB0aGUKK2FjY29yZGluZyBjb25zdGFudHMuCisKK0Jlc2lkZXMgdXNpbmcgdGhlIGNvbnN0YW50cyBkaXJlY3RseSwgdGhlIGZ1bmN0aW9uCitAY29kZXtnY3J5X2NpcGhlcl9tYXBfbmFtZX0gbWF5IGJlIHVzZWQgdG8gY29udmVydCB0aGUgdGV4dHVhbCBuYW1lIG9mCithbiBhbGdvcml0aG0gaW50byB0aGUgYWNjb3JkaW5nIG51bWVyaWMgSUQuCisKK1RoZSBjaXBoZXIgbW9kZSB0byB1c2UgbXVzdCBiZSBzcGVjaWZpZWQgdmlhIEB2YXJ7bW9kZX0uICBTZWUKK0B4cmVme0F2YWlsYWJsZSBjaXBoZXIgbW9kZXN9LCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjaXBoZXIgbW9kZXMKK2FuZCB0aGUgYWNjb3JkaW5nIGNvbnN0YW50cy4gIE5vdGUgdGhhdCBzb21lIG1vZGVzIGFyZSBpbmNvbXBhdGlibGUKK3dpdGggc29tZSBhbGdvcml0aG1zIC0gaW4gcGFydGljdWxhciwgc3RyZWFtIG1vZGUKKyhAY29kZXtHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTX0pIG9ubHkgd29ya3Mgd2l0aCBzdHJlYW0gY2lwaGVycy4gVGhlCitibG9jayBjaXBoZXIgbW9kZXMgKEBjb2Rle0dDUllfQ0lQSEVSX01PREVfRUNCfSwKK0Bjb2Rle0dDUllfQ0lQSEVSX01PREVfQ0JDfSwgQGNvZGV7R0NSWV9DSVBIRVJfTU9ERV9DRkJ9LAorQGNvZGV7R0NSWV9DSVBIRVJfTU9ERV9PRkJ9IGFuZCBAY29kZXtHQ1JZX0NJUEhFUl9NT0RFX0NUUn0pIHdpbGwgd29yaword2l0aCBhbnkgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4gQGNvZGV7R0NSWV9DSVBIRVJfTU9ERV9DQ019IGFuZAorQGNvZGV7R0NSWV9DSVBIRVJfTU9ERV9HQ019IG1vZGVzIHdpbGwgb25seSB3b3JrIHdpdGggYmxvY2sgY2lwaGVyIGFsZ29yaXRobXMKK3doaWNoIGhhdmUgdGhlIGJsb2NrIHNpemUgb2YgMTYgYnl0ZXMuCisKK1RoZSB0aGlyZCBhcmd1bWVudCBAdmFye2ZsYWdzfSBjYW4gZWl0aGVyIGJlIHBhc3NlZCBhcyBAY29kZXswfSBvciBhcwordGhlIGJpdC13aXNlIE9SIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzLgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllfQ0lQSEVSX1NFQ1VSRQorTWFrZSBzdXJlIHRoYXQgYWxsIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCBpbiBzZWN1cmUgbWVtb3J5LiAgVGhpcyBpcwordXNlZnVsIHdoZW4gdGhlIGtleSBtYXRlcmlhbCBpcyBoaWdobHkgY29uZmlkZW50aWFsLgorQGl0ZW0gR0NSWV9DSVBIRVJfRU5BQkxFX1NZTkMKK0BjaW5kZXggc3luYyBtb2RlIChPcGVuUEdQKQorVGhpcyBmbGFnIGVuYWJsZXMgdGhlIENGQiBzeW5jIG1vZGUsIHdoaWNoIGlzIGEgc3BlY2lhbCBmZWF0dXJlIG9mCitMaWJnY3J5cHQncyBDRkIgbW9kZSBpbXBsZW1lbnRhdGlvbiB0byBhbGxvdyBmb3IgT3BlblBHUCdzIENGQiB2YXJpYW50LgorU2VlIEBjb2Rle2djcnlfY2lwaGVyX3N5bmN9LgorQGl0ZW0gR0NSWV9DSVBIRVJfQ0JDX0NUUworQGNpbmRleCBjaXBoZXIgdGV4dCBzdGVhbGluZworRW5hYmxlIGNpcGhlciB0ZXh0IHN0ZWFsaW5nIChDVFMpIGZvciB0aGUgQ0JDIG1vZGUuICBDYW5ub3QgYmUgdXNlZAorc2ltdWx0YW5lb3VzIGFzIEdDUllfQ0lQSEVSX0NCQ19NQUMuICBDVFMgbW9kZSBtYWtlcyBpdCBwb3NzaWJsZSB0bwordHJhbnNmb3JtIGRhdGEgb2YgYWxtb3N0IGFyYml0cmFyeSBzaXplIChvbmx5IGxpbWl0YXRpb24gaXMgdGhhdCBpdAorbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGFsZ29yaXRobSdzIGJsb2NrIHNpemUpLgorQGl0ZW0gR0NSWV9DSVBIRVJfQ0JDX01BQworQGNpbmRleCBDQkMtTUFDCitDb21wdXRlIENCQy1NQUMga2V5ZWQgY2hlY2tzdW1zLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBDQkMgbW9kZSwgYnV0Citvbmx5IG91dHB1dCB0aGUgbGFzdCBibG9jay4gIENhbm5vdCBiZSB1c2VkIHNpbXVsdGFuZW91cyBhcworR0NSWV9DSVBIRVJfQ0JDX0NUUy4KK0BlbmQgdGFibGUKK0BlbmQgZGVmdHlwZWZ1bgorCitVc2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byByZWxlYXNlIGFuIGV4aXN0aW5nIGhhbmRsZToKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X2NpcGhlcl9jbG9zZSAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9KQorCitUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBjb250ZXh0IGNyZWF0ZWQgYnkgQGNvZGV7Z2NyeV9jaXBoZXJfb3Blbn0uCitJdCBhbHNvIHplcm9pc2VzIGFsbCBzZW5zaXRpdmUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2lwaGVyCitoYW5kbGUuCitAZW5kIGRlZnR5cGVmdW4KKworSW4gb3JkZXIgdG8gdXNlIGEgaGFuZGxlIGZvciBwZXJmb3JtaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucywgYQorYGtleScgaGFzIHRvIGJlIHNldCBmaXJzdDoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX3NldGtleSAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9LCBjb25zdCB2b2lkICpAdmFye2t9LCBzaXplX3QgQHZhcntsfSkKKworU2V0IHRoZSBrZXkgQHZhcntrfSB1c2VkIGZvciBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gaW4gdGhlIGNvbnRleHQKK2Rlbm90ZWQgYnkgdGhlIGhhbmRsZSBAdmFye2h9LiAgVGhlIGxlbmd0aCBAdmFye2x9IChpbiBieXRlcykgb2YgdGhlCitrZXkgQHZhcntrfSBtdXN0IG1hdGNoIHRoZSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIGFsZ29yaXRobSBzZXQgZm9yCit0aGlzIGNvbnRleHQgb3IgYmUgaW4gdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIGFsZ29yaXRobXMgd2l0aCB2YXJpYWJsZQora2V5IHNpemUuICBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoaXMgYW5kIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYQorcHJvYmxlbS4gIEEgY2FsbGVyIHNob3VsZCBhbHdheXMgY2hlY2sgZm9yIGFuIGVycm9yLgorCitAZW5kIGRlZnR5cGVmdW4KKworTW9zdCBjcnlwdG8gbW9kZXMgcmVxdWlyZXMgYW4gaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJViksIHdoaWNoCit1c3VhbGx5IGlzIGEgbm9uLXNlY3JldCByYW5kb20gc3RyaW5nIGFjdGluZyBhcyBhIGtpbmQgb2Ygc2FsdCB2YWx1ZS4KK1RoZSBDVFIgbW9kZSByZXF1aXJlcyBhIGNvdW50ZXIsIHdoaWNoIGlzIGFsc28gc2ltaWxhciB0byBhIHNhbHQKK3ZhbHVlLiAgVG8gc2V0IHRoZSBJViBvciBDVFIsIHVzZSB0aGVzZSBmdW5jdGlvbnM6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9zZXRpdiAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9LCBjb25zdCB2b2lkICpAdmFye2t9LCBzaXplX3QgQHZhcntsfSkKKworU2V0IHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgdXNlZCBmb3IgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiBUaGUKK3ZlY3RvciBpcyBwYXNzZWQgYXMgdGhlIGJ1ZmZlciBAdmFye0t9IG9mIGxlbmd0aCBAdmFye2x9IGJ5dGVzIGFuZAorY29waWVkIHRvIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4gIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhhdCB0aGUgSVYKK21hdGNoZXMgdGhlIHJlcXVpcmVtZW50IG9mIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gYW5kIG1vZGUuCisKK1RoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHdpdGggdGhlIFNhbHNhMjAgc3RyZWFtIGNpcGhlciB0byBzZXQgb3IKK3VwZGF0ZSB0aGUgcmVxdWlyZWQgbm9uY2UuICBJbiB0aGlzIGNhc2UgaXQgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyCitzZXR0aW5nIHRoZSBrZXkuCisKK1RoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHdpdGggdGhlIEFFQUQgY2lwaGVyIG1vZGVzIHRvIHNldCBvcgordXBkYXRlIHRoZSByZXF1aXJlZCBub25jZS4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9zZXRjdHIgKGdjcnlfY2lwaGVyX2hkX3QgQHZhcntofSwgY29uc3Qgdm9pZCAqQHZhcntjfSwgc2l6ZV90IEB2YXJ7bH0pCisKK1NldCB0aGUgY291bnRlciB2ZWN0b3IgdXNlZCBmb3IgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiBUaGUgY291bnRlcgoraXMgcGFzc2VkIGFzIHRoZSBidWZmZXIgQHZhcntjfSBvZiBsZW5ndGggQHZhcntsfSBieXRlcyBhbmQgY29waWVkIHRvCitpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuICBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhlIGNvdW50ZXIKK21hdGNoZXMgdGhlIHJlcXVpcmVtZW50IG9mIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gKGkuZS4sIGl0IG11c3QgYmUKK3RoZSBzYW1lIHNpemUgYXMgdGhlIGJsb2NrIHNpemUpLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9yZXNldCAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9KQorCitTZXQgdGhlIGdpdmVuIGhhbmRsZSdzIGNvbnRleHQgYmFjayB0byB0aGUgc3RhdGUgaXQgaGFkIGFmdGVyIHRoZSBsYXN0CitjYWxsIHRvIGdjcnlfY2lwaGVyX3NldGtleSBhbmQgY2xlYXIgdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKworTm90ZSB0aGF0IGdjcnlfY2lwaGVyX3Jlc2V0IGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uCitAZW5kIGRlZnR5cGVmdW4KKworQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhIChBRUFEKSBibG9jayBjaXBoZXIKK21vZGVzIHJlcXVpcmUgdGhlIGhhbmRsaW5nIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgYW5kIHRoZSBhZGRpdGlvbmFsCithdXRoZW50aWNhdGVkIGRhdGEsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcKK2Z1bmN0aW9uczoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9LCBjb25zdCB2b2lkICpAdmFye2FidWZ9LCBzaXplX3QgQHZhcnthYnVmbGVufSkKKworUHJvY2VzcyB0aGUgYnVmZmVyIEB2YXJ7YWJ1Zn0gb2YgbGVuZ3RoIEB2YXJ7YWJ1Zmxlbn0gYXMgdGhlIGFkZGl0aW9uYWwKK2F1dGhlbnRpY2F0ZWQgZGF0YSAoQUFEKSBmb3IgQUVBRCBjaXBoZXIgbW9kZXMuCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfZ2V0dGFnIChnY3J5X2NpcGhlcl9oZF90IEB2YXJ7aH0sIHZvaWQgKkB2YXJ7dGFnfSwgc2l6ZV90IEB2YXJ7dGFnbGVufSkKKworVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBhZnRlciBlbmNyeXB0aW9uLgorVGhlIGZ1bmN0aW9uIGZpbmFsaXplcyBhbmQgb3V0cHV0cyB0aGUgYXV0aGVudGljYXRpb24gdGFnIHRvIHRoZSBidWZmZXIKK0B2YXJ7dGFnfSBvZiBsZW5ndGggQHZhcnt0YWdsZW59IGJ5dGVzLgorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2NoZWNrdGFnIChnY3J5X2NpcGhlcl9oZF90IEB2YXJ7aH0sIGNvbnN0IHZvaWQgKkB2YXJ7dGFnfSwgc2l6ZV90IEB2YXJ7dGFnbGVufSkKKworQ2hlY2sgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBhZnRlciBkZWNyeXB0aW9uLiBUaGUgYXV0aGVudGljYXRpb24KK3RhZyBpcyBwYXNzZWQgYXMgdGhlIGJ1ZmZlciBAdmFye3RhZ30gb2YgbGVuZ3RoIEB2YXJ7dGFnbGVufSBieXRlcworYW5kIGNvbXBhcmVkIHRvIGludGVybmFsIGF1dGhlbnRpY2F0aW9uIHRhZyBjb21wdXRlZCBkdXJpbmcKK2RlY3J5cHRpb24uICBFcnJvciBjb2RlIEBjb2Rle0dQR19FUlJfQ0hFQ0tTVU19IGlzIHJldHVybmVkIGlmCit0aGUgYXV0aGVudGljYXRpb24gdGFnIGluIHRoZSBidWZmZXIgQHZhcnt0YWd9IGRvZXMgbm90IG1hdGNoCit0aGUgYXV0aGVudGljYXRpb24gdGFnIGNhbGN1bGF0ZWQgZHVyaW5nIGRlY3J5cHRpb24uCisKK0BlbmQgZGVmdHlwZWZ1bgorCitUaGUgYWN0dWFsIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gaXMgZG9uZSBieSB1c2luZyBvbmUgb2YgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb25zLiAgVGhleSBtYXkgYmUgdXNlZCBhcyBvZnRlbiBhcyByZXF1aXJlZCB0byBwcm9jZXNzCithbGwgdGhlIGRhdGEuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9lbmNyeXB0IChnY3J5X2NpcGhlcl9oZF90IEB2YXJ7aH0sIHVuc2lnbmVkIGNoYXIgKntvdXR9LCBzaXplX3QgQHZhcntvdXRzaXplfSwgY29uc3QgdW5zaWduZWQgY2hhciAqQHZhcntpbn0sIHNpemVfdCBAdmFye2lubGVufSkKKworQGNvZGV7Z2NyeV9jaXBoZXJfZW5jcnlwdH0gaXMgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLiAgVGhpcyBmdW5jdGlvbgorY2FuIGVpdGhlciB3b3JrIGluIHBsYWNlIG9yIHdpdGggdHdvIGJ1ZmZlcnMuICBJdCB1c2VzIHRoZSBjaXBoZXIKK2NvbnRleHQgYWxyZWFkeSBzZXR1cCBhbmQgZGVzY3JpYmVkIGJ5IHRoZSBoYW5kbGUgQHZhcntofS4gIFRoZXJlIGFyZSAyCit3YXlzIHRvIHVzZSB0aGUgZnVuY3Rpb246IElmIEB2YXJ7aW59IGlzIHBhc3NlZCBhcyBAY29kZXtOVUxMfSBhbmQKK0B2YXJ7aW5sZW59IGlzIEBjb2RlezB9LCBpbi1wbGFjZSBlbmNyeXB0aW9uIG9mIHRoZSBkYXRhIGluIEB2YXJ7b3V0fSBvcgorbGVuZ3RoIEB2YXJ7b3V0c2l6ZX0gdGFrZXMgcGxhY2UuICBXaXRoIEB2YXJ7aW59IGJlaW5nIG5vdCBAY29kZXtOVUxMfSwKK0B2YXJ7aW5sZW59IGJ5dGVzIGFyZSBlbmNyeXB0ZWQgdG8gdGhlIGJ1ZmZlciBAdmFye291dH0gd2hpY2ggbXVzdCBoYXZlCithdCBsZWFzdCBhIHNpemUgb2YgQHZhcntpbmxlbn0uICBAdmFye291dHNpemV9IG11c3QgYmUgc2V0IHRvIHRoZQorYWxsb2NhdGVkIHNpemUgb2YgQHZhcntvdXR9LCBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gY2hlY2sgdGhhdCB0aGVyZQoraXMgc3VmZmljaWVudCBzcGFjZS4gTm90ZSB0aGF0IG92ZXJsYXBwaW5nIGJ1ZmZlcnMgYXJlIG5vdCBhbGxvd2VkLgorCitEZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVkIGFsZ29yaXRobXMgYW5kIGVuY3J5cHRpb24gbW9kZSwgdGhlIGxlbmd0aCBvZgordGhlIGJ1ZmZlcnMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyBAY29kZXswfSBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCitAZW5kIGRlZnR5cGVmdW4KKworCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBAdmFye2h9LCB1bnNpZ25lZCBjaGFyICp7b3V0fSwgc2l6ZV90IEB2YXJ7b3V0c2l6ZX0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKkB2YXJ7aW59LCBzaXplX3QgQHZhcntpbmxlbn0pCisKK0Bjb2Rle2djcnlfY2lwaGVyX2RlY3J5cHR9IGlzIHVzZWQgdG8gZGVjcnlwdCB0aGUgZGF0YS4gIFRoaXMgZnVuY3Rpb24KK2NhbiBlaXRoZXIgd29yayBpbiBwbGFjZSBvciB3aXRoIHR3byBidWZmZXJzLiAgSXQgdXNlcyB0aGUgY2lwaGVyCitjb250ZXh0IGFscmVhZHkgc2V0dXAgYW5kIGRlc2NyaWJlZCBieSB0aGUgaGFuZGxlIEB2YXJ7aH0uICBUaGVyZSBhcmUgMgord2F5cyB0byB1c2UgdGhlIGZ1bmN0aW9uOiBJZiBAdmFye2lufSBpcyBwYXNzZWQgYXMgQGNvZGV7TlVMTH0gYW5kCitAdmFye2lubGVufSBpcyBAY29kZXswfSwgaW4tcGxhY2UgZGVjcnlwdGlvbiBvZiB0aGUgZGF0YSBpbiBAdmFye291dH0gb3IKK2xlbmd0aCBAdmFye291dHNpemV9IHRha2VzIHBsYWNlLiAgV2l0aCBAdmFye2lufSBiZWluZyBub3QgQGNvZGV7TlVMTH0sCitAdmFye2lubGVufSBieXRlcyBhcmUgZGVjcnlwdGVkIHRvIHRoZSBidWZmZXIgQHZhcntvdXR9IHdoaWNoIG11c3QgaGF2ZQorYXQgbGVhc3QgYSBzaXplIG9mIEB2YXJ7aW5sZW59LiAgQHZhcntvdXRzaXplfSBtdXN0IGJlIHNldCB0byB0aGUKK2FsbG9jYXRlZCBzaXplIG9mIEB2YXJ7b3V0fSwgc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGNoZWNrIHRoYXQgdGhlcmUKK2lzIHN1ZmZpY2llbnQgc3BhY2UuICBOb3RlIHRoYXQgb3ZlcmxhcHBpbmcgYnVmZmVycyBhcmUgbm90IGFsbG93ZWQuCisKK0RlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtcyBhbmQgZW5jcnlwdGlvbiBtb2RlLCB0aGUgbGVuZ3RoIG9mCit0aGUgYnVmZmVycyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuCisKK1RoZSBmdW5jdGlvbiByZXR1cm5zIEBjb2RlezB9IG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK09wZW5QR1AgKGFzIGRlZmluZWQgaW4gUkZDLTI0NDApIHJlcXVpcmVzIGEgc3BlY2lhbCBzeW5jIG9wZXJhdGlvbiBpbgorc29tZSBwbGFjZXMuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoaXM6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9zeW5jIChnY3J5X2NpcGhlcl9oZF90IEB2YXJ7aH0pCisKK1BlcmZvcm0gdGhlIE9wZW5QR1Agc3luYyBvcGVyYXRpb24gb24gY29udGV4dCBAdmFye2h9LiAgTm90ZSB0aGF0IHRoaXMKK2lzIGEgbm8tb3AgdW5sZXNzIHRoZSBjb250ZXh0IHdhcyBjcmVhdGVkIHdpdGggdGhlIGZsYWcKK0Bjb2Rle0dDUllfQ0lQSEVSX0VOQUJMRV9TWU5DfQorQGVuZCBkZWZ0eXBlZnVuCisKK1NvbWUgb2YgdGhlIGRlc2NyaWJlZCBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGFzIG1hY3JvcyB1dGlsaXppbmcgYQorY2F0Y2gtYWxsIGNvbnRyb2wgZnVuY3Rpb24uICBUaGlzIGNvbnRyb2wgZnVuY3Rpb24gaXMgcmFyZWx5IHVzZWQKK2RpcmVjdGx5IGJ1dCB0aGVyZSBpcyBub3RoaW5nIHdoaWNoIHdvdWxkIGluaGliaXQgaXQ6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9jdGwgKGdjcnlfY2lwaGVyX2hkX3QgQHZhcntofSwgaW50IEB2YXJ7Y21kfSwgdm9pZCAqQHZhcntidWZmZXJ9LCBzaXplX3QgQHZhcntidWZsZW59KQorCitAY29kZXtnY3J5X2NpcGhlcl9jdGx9IGNvbnRyb2xzIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgY2lwaGVyIG1vZHVsZSBhbmQKK3NwZWNpZmljIGNpcGhlciBjb250ZXh0cy4gIFVzdWFsbHkgc29tZSBtb3JlIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyBvcgorbWFjcm9zIGFyZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuICBUaGUgc2VtYW50aWNzIG9mIHRoZSBmdW5jdGlvbiBhbmQgaXRzCitwYXJhbWV0ZXJzIGRlcGVuZHMgb24gdGhlIHRoZSBjb21tYW5kIEB2YXJ7Y21kfSBhbmQgdGhlIHBhc3NlZCBjb250ZXh0CitoYW5kbGUgQHZhcntofS4gIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UgY29kZQorKEBjb2Rle3NyYy9nbG9iYWwuY30pIGZvciBkZXRhaWxzLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9pbmZvIChnY3J5X2NpcGhlcl9oZF90IEB2YXJ7aH0sIGludCBAdmFye3doYXR9LCB2b2lkICpAdmFye2J1ZmZlcn0sIHNpemVfdCAqQHZhcntuYnl0ZXN9KQorCitAY29kZXtnY3J5X2NpcGhlcl9pbmZvfSBpcyB1c2VkIHRvIHJldHJpZXZlIHZhcmlvdXMKK2luZm9ybWF0aW9uIGFib3V0IGEgY2lwaGVyIGNvbnRleHQgb3IgdGhlIGNpcGhlciBtb2R1bGUgaW4gZ2VuZXJhbC4KKworQ3VycmVudGx5IG5vIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9kZSBHZW5lcmFsIGNpcGhlciBmdW5jdGlvbnMKK0BzZWN0aW9uIEdlbmVyYWwgY2lwaGVyIGZ1bmN0aW9ucworCitUbyB3b3JrIHdpdGggdGhlIGFsZ29yaXRobXMsIHNldmVyYWwgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gbWFwCithbGdvcml0aG0gbmFtZXMgdG8gdGhlIGludGVybmFsIGlkZW50aWZpZXJzLCBhcyB3ZWxsIGFzIHdheXMgdG8KK3JldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGFuIGFsZ29yaXRobSBvciB0aGUgY3VycmVudCBjaXBoZXIgY29udGV4dC4KKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2FsZ29faW5mbyAoaW50IEB2YXJ7YWxnb30sIGludCBAdmFye3doYXR9LCB2b2lkICpAdmFye2J1ZmZlcn0sIHNpemVfdCAqQHZhcntuYnl0ZXN9KQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBhbGdvcml0aG0uCitZb3UgcGFzcyB0aGUgY2lwaGVyIGFsZ29yaXRobSBJRCBhcyBAdmFye2FsZ299IGFuZCB0aGUgdHlwZSBvZgoraW5mb3JtYXRpb24gcmVxdWVzdGVkIGFzIEB2YXJ7d2hhdH0uIFRoZSByZXN1bHQgaXMgZWl0aGVyIHJldHVybmVkIGFzCit0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIGZ1bmN0aW9uIG9yIGNvcGllZCB0byB0aGUgcHJvdmlkZWQgQHZhcntidWZmZXJ9Cit3aG9zZSBhbGxvY2F0ZWQgbGVuZ3RoIG11c3QgYmUgYXZhaWxhYmxlIGluIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCB0aGUKK2FkZHJlc3MgcGFzc2VkIGluIEB2YXJ7bmJ5dGVzfS4gIFRoaXMgdmFyaWFibGUgd2lsbCBhbHNvIHJlY2VpdmUgdGhlCithY3R1YWwgdXNlZCBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KKworSGVyZSBpcyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvZGVzIGZvciBAdmFye3doYXR9OgorCitAYyBiZWdpbiBjb25zdGFudHMgZm9yIGdjcnlfY2lwaGVyX2FsZ29faW5mbworQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZQ1RMX0dFVF9LRVlMRU46CitSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUga2V5LiBJZiB0aGUgYWxnb3JpdGhtIHN1cHBvcnRzIG11bHRpcGxlIGtleQorbGVuZ3RocywgdGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIHJldHVybmVkLiAgVGhlIGxlbmd0aCBpcworcmV0dXJuZWQgYXMgbnVtYmVyIG9mIG9jdGV0cyAoYnl0ZXMpIGFuZCBub3QgYXMgbnVtYmVyIG9mIGJpdHMgaW4KK0B2YXJ7bmJ5dGVzfTsgQHZhcntidWZmZXJ9IG11c3QgYmUgemVyby4gIE5vdGUgdGhhdCBpdCBpcyB1c3VhbGx5CitiZXR0ZXIgdG8gdXNlIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbgorQGNvZGV7Z2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVufS4KKworQGl0ZW0gR0NSWUNUTF9HRVRfQkxLTEVOOgorUmV0dXJuIHRoZSBibG9jayBsZW5ndGggb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZW5ndGggaXMgcmV0dXJuZWQgYXMgYQorbnVtYmVyIG9mIG9jdGV0cyBpbiBAdmFye25ieXRlc307IEB2YXJ7YnVmZmVyfSBtdXN0IGJlIHplcm8uICBOb3RlCit0aGF0IGl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHVzZSB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb24KK0Bjb2Rle2djcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbn0uCisKK0BpdGVtIEdDUllDVExfVEVTVF9BTEdPOgorUmV0dXJucyBAY29kZXswfSB3aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorQHZhcntidWZmZXJ9IGFuZCBAdmFye25ieXRlc30gbXVzdCBiZSB6ZXJvLgorCitAZW5kIHRhYmxlCitAYyBlbmQgY29uc3RhbnRzIGZvciBnY3J5X2NpcGhlcl9hbGdvX2luZm8KKworQGVuZCBkZWZ0eXBlZnVuCitAYyBlbmQgZ2NyeV9jaXBoZXJfYWxnb19pbmZvCisKK0BkZWZ0eXBlZnVuIHNpemVfdCBnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4gKEB2YXJ7YWxnb30pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBsZW5ndGggb2YgdGhlIGtleSBmb3IgYWxnb3JpdGhtIEB2YXJ7YWxnb30uICBJZgordGhlIGFsZ29yaXRobSBzdXBwb3J0cyBtdWx0aXBsZSBrZXkgbGVuZ3RocywgdGhlIG1heGltdW0gc3VwcG9ydGVkIGtleQorbGVuZ3RoIGlzIHJldHVybmVkLiAgT24gZXJyb3IgQGNvZGV7MH0gaXMgcmV0dXJuZWQuICBUaGUga2V5IGxlbmd0aCBpcworcmV0dXJuZWQgYXMgbnVtYmVyIG9mIG9jdGV0cy4KKworVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIKK0Bjb2Rle2djcnlfY2lwaGVyX2FsZ29faW5mb30gYmVjYXVzZSBpdCBhbGxvd3MgZm9yIHByb3BlciB0eXBlCitjaGVja2luZy4KK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbgorCitAZGVmdHlwZWZ1biBzaXplX3QgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIChpbnQgQHZhcnthbGdvfSkKKworVGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgYmxvY2stbGVuZ3RoIG9mIHRoZSBhbGdvcml0aG0gQHZhcnthbGdvfQorY291bnRlZCBpbiBvY3RldHMuICBPbiBlcnJvciBAY29kZXswfSBpcyByZXR1cm5lZC4KKworVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIKK0Bjb2Rle2djcnlfY2lwaGVyX2FsZ29faW5mb30gYmVjYXVzZSBpdCBhbGxvd3MgZm9yIHByb3BlciB0eXBlCitjaGVja2luZy4KK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbgorCisKK0BkZWZ0eXBlZnVuIHtjb25zdCBjaGFyICp9IGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAoaW50IEB2YXJ7YWxnb30pCisKK0Bjb2Rle2djcnlfY2lwaGVyX2FsZ29fbmFtZX0gcmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZQorY2lwaGVyIGFsZ29yaXRobSBAdmFye2FsZ299LiAgSWYgdGhlIGFsZ29yaXRobSBpcyBub3Qga25vd24gb3IgYW5vdGhlcgorZXJyb3Igb2NjdXJyZWQsIHRoZSBzdHJpbmcgQGNvZGV7Ij8ifSBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkCitub3QgYmUgdXNlZCB0byB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIGFsZ29yaXRobS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9jaXBoZXJfbWFwX25hbWUgKGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0pCisKK0Bjb2Rle2djcnlfY2lwaGVyX21hcF9uYW1lfSByZXR1cm5zIHRoZSBhbGdvcml0aG0gaWRlbnRpZmllciBmb3IgdGhlCitjaXBoZXIgYWxnb3JpdGhtIGRlc2NyaWJlZCBieSB0aGUgc3RyaW5nIEB2YXJ7bmFtZX0uICBJZiB0aGlzIGFsZ29yaXRobQoraXMgbm90IGF2YWlsYWJsZSBAY29kZXswfSBpcyByZXR1cm5lZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCAoY29uc3QgY2hhciAqQHZhcntzdHJpbmd9KQorCitSZXR1cm4gdGhlIGNpcGhlciBtb2RlIGFzc29jaWF0ZWQgd2l0aCBhbiBAYWNyb255bXtBU04uMX0gb2JqZWN0CitpZGVudGlmaWVyLiAgVGhlIG9iamVjdCBpZGVudGlmaWVyIGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZQorQGFjcm9ueW17SUVURn0tc3R5bGUgZG90dGVkIGRlY2ltYWwgbm90YXRpb24uICBUaGUgZnVuY3Rpb24gcmV0dXJucworQGNvZGV7MH0gZm9yIGFuIHVua25vd24gb2JqZWN0IGlkZW50aWZpZXIgb3Igd2hlbiBubyBtb2RlIGlzIGFzc29jaWF0ZWQKK3dpdGggaXQuCitAZW5kIGRlZnR5cGVmdW4KKworCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqICBQdWJsaWMgS2V5ICAqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAbm9kZSBQdWJsaWMgS2V5IGNyeXB0b2dyYXBoeQorQGNoYXB0ZXIgUHVibGljIEtleSBjcnlwdG9ncmFwaHkKKworUHVibGljIGtleSBjcnlwdG9ncmFwaHksIGFsc28ga25vd24gYXMgYXN5bW1ldHJpYyBjcnlwdG9ncmFwaHksIGlzIGFuCitlYXN5IHdheSBmb3Iga2V5IG1hbmFnZW1lbnQgYW5kIHRvIHByb3ZpZGUgZGlnaXRhbCBzaWduYXR1cmVzLgorTGliZ2NyeXB0IHByb3ZpZGVzIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCBpbnRlcmZhY2VzIHRvCitwdWJsaWMga2V5IGNyeXB0b2dyYXBoeSwgdGhpcyBjaGFwdGVyIGV4cGxhaW5zIHRoZSBvbmUgYmFzZWQgb24KK1MtZXhwcmVzc2lvbnMuCisKK0BtZW51CisqIEF2YWlsYWJsZSBhbGdvcml0aG1zOjogICAgICAgIEFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5LgorKiBVc2VkIFMtZXhwcmVzc2lvbnM6OiAgICAgICAgICBJbnRyb2R1Y3Rpb24gaW50byB0aGUgdXNlZCBTLWV4cHJlc3Npb24uCisqIENyeXB0b2dyYXBoaWMgRnVuY3Rpb25zOjogICAgIEZ1bmN0aW9ucyBmb3IgcGVyZm9ybWluZyB0aGUgY3J5cHRvZ3JhcGhpYyBhY3Rpb25zLgorKiBHZW5lcmFsIHB1YmxpYy1rZXkgcmVsYXRlZCBGdW5jdGlvbnM6OiAgR2VuZXJhbCBmdW5jdGlvbnMsIG5vdCBpbXBsZW1lbnRpbmcgYW55IGNyeXB0b2dyYXBoeS4KK0BlbmQgbWVudQorCitAbm9kZSBBdmFpbGFibGUgYWxnb3JpdGhtcworQHNlY3Rpb24gQXZhaWxhYmxlIGFsZ29yaXRobXMKKworTGliZ2NyeXB0IHN1cHBvcnRzIHRoZSBSU0EgKFJpdmVzdC1TaGFtaXItQWRsZW1hbikgYWxnb3JpdGhtcyBhcyB3ZWxsCithcyBEU0EgKERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSkgYW5kIEVsZ2FtYWwuICBUaGUgdmVyc2F0aWxlCitpbnRlcmZhY2UgYWxsb3dzIHRvIGFkZCBtb3JlIGFsZ29yaXRobXMgaW4gdGhlIGZ1dHVyZS4KKworQG5vZGUgVXNlZCBTLWV4cHJlc3Npb25zCitAc2VjdGlvbiBVc2VkIFMtZXhwcmVzc2lvbnMKKworTGliZ2NyeXB0J3MgQVBJIGZvciBhc3ltbWV0cmljIGNyeXB0b2dyYXBoeSBpcyBiYXNlZCBvbiBkYXRhIHN0cnVjdHVyZXMKK2NhbGxlZCBTLWV4cHJlc3Npb25zIChzZWUKK0B1cmVme2h0dHA6Ly9wZW9wbGUuY3NhaWwubWl0LmVkdS9AL3JpdmVzdC9AL3NleHAuaHRtbH0pIGFuZCBkb2VzIG5vdCB3b3JrCit3aXRoIGNvbnRleHRzIGFzIG1vc3Qgb2YgdGhlIG90aGVyIGJ1aWxkaW5nIGJsb2NrcyBvZiBMaWJnY3J5cHQgZG8uCisKK0Bub2luZGVudAorVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcmUgc3RvcmVkIGluIFMtZXhwcmVzc2lvbnM6CisKK0BpdGVtaXplCitAaXRlbSBrZXlzCisKK0BpdGVtIHBsYWluIHRleHQgZGF0YQorCitAaXRlbSBlbmNyeXB0ZWQgZGF0YQorCitAaXRlbSBzaWduYXR1cmVzCisKK0BlbmQgaXRlbWl6ZQorCitAbm9pbmRlbnQKK1RvIGRlc2NyaWJlIGhvdyBMaWJnY3J5cHQgZXhwZWN0IGtleXMsIHdlIHVzZSBleGFtcGxlcy4gTm90ZSB0aGF0Cit3b3JkcyBpbgorQGlmbm90dGV4Cit1cHBlcmNhc2UKK0BlbmQgaWZub3R0ZXgKK0BpZnRleAoraXRhbGljcworQGVuZCBpZnRleAoraW5kaWNhdGUgcGFyYW1ldGVycyB3aGVyZWFzIGxvd2VyY2FzZSB3b3JkcyBhcmUgbGl0ZXJhbHMuCisKK05vdGUgdGhhdCBhbGwgTVBJIChtdWx0aS1wcmVjaXNpb24taW50ZWdlcnMpIHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4KK0Bjb2Rle0dDUllNUElfRk1UX1VTR30gZm9ybWF0LiAgQW4gZWFzeSB3YXkgdG8gY3JlYXRlIFMtZXhwcmVzc2lvbnMgaXMKK2J5IHVzaW5nIEBjb2Rle2djcnlfc2V4cF9idWlsZH0gd2hpY2ggYWxsb3dzIHRvIHBhc3MgYSBzdHJpbmcgd2l0aAorcHJpbnRmLWxpa2UgZXNjYXBlcyB0byBpbnNlcnQgTVBJIHZhbHVlcy4KKworQG1lbnUKKyogUlNBIGtleSBwYXJhbWV0ZXJzOjogIFBhcmFtZXRlcnMgdXNlZCB3aXRoIGFuIFJTQSBrZXkuCisqIERTQSBrZXkgcGFyYW1ldGVyczo6ICBQYXJhbWV0ZXJzIHVzZWQgd2l0aCBhIERTQSBrZXkuCisqIEVDQyBrZXkgcGFyYW1ldGVyczo6ICBQYXJhbWV0ZXJzIHVzZWQgd2l0aCBFQ0Mga2V5cy4KK0BlbmQgbWVudQorCitAbm9kZSBSU0Ega2V5IHBhcmFtZXRlcnMKK0BzdWJzZWN0aW9uIFJTQSBrZXkgcGFyYW1ldGVycworCitAbm9pbmRlbnQKK0FuIFJTQSBwcml2YXRlIGtleSBpcyBkZXNjcmliZWQgYnkgdGhpcyBTLWV4cHJlc3Npb246CisKK0BleGFtcGxlCisocHJpdmF0ZS1rZXkKKyAgKHJzYQorICAgIChuIEB2YXJ7bi1tcGl9KQorICAgIChlIEB2YXJ7ZS1tcGl9KQorICAgIChkIEB2YXJ7ZC1tcGl9KQorICAgIChwIEB2YXJ7cC1tcGl9KQorICAgIChxIEB2YXJ7cS1tcGl9KQorICAgICh1IEB2YXJ7dS1tcGl9KSkpCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitBbiBSU0EgcHVibGljIGtleSBpcyBkZXNjcmliZWQgYnkgdGhpcyBTLWV4cHJlc3Npb246CisKK0BleGFtcGxlCisocHVibGljLWtleQorICAocnNhCisgICAgKG4gQHZhcntuLW1waX0pCisgICAgKGUgQHZhcntlLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCisKK0B0YWJsZSBAdmFyCitAaXRlbSBuLW1waQorUlNBIHB1YmxpYyBtb2R1bHVzIEBtYXRoe259LgorQGl0ZW0gZS1tcGkKK1JTQSBwdWJsaWMgZXhwb25lbnQgQG1hdGh7ZX0uCitAaXRlbSBkLW1waQorUlNBIHNlY3JldCBleHBvbmVudCBAbWF0aHtkID0gZV57LTF9IFxibW9kIChwLTEpKHEtMSl9LgorQGl0ZW0gcC1tcGkKK1JTQSBzZWNyZXQgcHJpbWUgQG1hdGh7cH0uCitAaXRlbSBxLW1waQorUlNBIHNlY3JldCBwcmltZSBAbWF0aHtxfSB3aXRoIEBtYXRoe3AgPCBxfS4KK0BpdGVtIHUtbXBpCitNdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIEBtYXRoe3UgPSBwXnstMX0gXGJtb2QgcX0uCitAZW5kIHRhYmxlCisKK0ZvciBzaWduaW5nIGFuZCBkZWNyeXB0aW9uIHRoZSBwYXJhbWV0ZXJzIEBtYXRoeyhwLCBxLCB1KX0gYXJlIG9wdGlvbmFsCitidXQgZ3JlYXRseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZS4gIEVpdGhlciBhbGwgb2YgdGhlc2Ugb3B0aW9uYWwKK3BhcmFtZXRlcnMgbXVzdCBiZSBnaXZlbiBvciBub25lIG9mIHRoZW0uICBUaGV5IGFyZSBtYW5kYXRvcnkgZm9yCitnY3J5X3BrX3Rlc3RrZXkuCisKK05vdGUgdGhhdCBPcGVuU1NMIHVzZXMgc2xpZ2hseSBkaWZmZXJlbnQgcGFyYW1ldGVyczogQG1hdGh7cSA8IHB9IGFuZAorIEBtYXRoe3UgPSBxXnstMX0gXGJtb2QgcH0uICBUbyB1c2UgdGhlc2UgcGFyYW1ldGVycyB5b3Ugd2lsbCBuZWVkIHRvCitzd2FwIHRoZSB2YWx1ZXMgYW5kIHJlY29tcHV0ZSBAbWF0aHt1fS4gIEhlcmUgaXMgZXhhbXBsZSBjb2RlIHRvIGRvIHRoaXM6CisKK0BleGFtcGxlCisgIGlmIChnY3J5X21waV9jbXAgKHAsIHEpID4gMCkKKyAgICBAeworICAgICAgZ2NyeV9tcGlfc3dhcCAocCwgcSk7CisgICAgICBnY3J5X21waV9pbnZtICh1LCBwLCBxKTsKKyAgICBAfQorQGVuZCBleGFtcGxlCisKKworCisKK0Bub2RlIERTQSBrZXkgcGFyYW1ldGVycworQHN1YnNlY3Rpb24gRFNBIGtleSBwYXJhbWV0ZXJzCisKK0Bub2luZGVudAorQSBEU0EgcHJpdmF0ZSBrZXkgaXMgZGVzY3JpYmVkIGJ5IHRoaXMgUy1leHByZXNzaW9uOgorCitAZXhhbXBsZQorKHByaXZhdGUta2V5CisgIChkc2EKKyAgICAocCBAdmFye3AtbXBpfSkKKyAgICAocSBAdmFye3EtbXBpfSkKKyAgICAoZyBAdmFye2ctbXBpfSkKKyAgICAoeSBAdmFye3ktbXBpfSkKKyAgICAoeCBAdmFye3gtbXBpfSkpKQorQGVuZCBleGFtcGxlCisKK0B0YWJsZSBAdmFyCitAaXRlbSBwLW1waQorRFNBIHByaW1lIEBtYXRoe3B9LgorQGl0ZW0gcS1tcGkKK0RTQSBncm91cCBvcmRlciBAbWF0aHtxfSAod2hpY2ggaXMgYSBwcmltZSBkaXZpc29yIG9mIEBtYXRoe3AtMX0pLgorQGl0ZW0gZy1tcGkKK0RTQSBncm91cCBnZW5lcmF0b3IgQG1hdGh7Z30uCitAaXRlbSB5LW1waQorRFNBIHB1YmxpYyBrZXkgdmFsdWUgQG1hdGh7eSA9IGdeeCBcYm1vZCBwfS4KK0BpdGVtIHgtbXBpCitEU0Egc2VjcmV0IGV4cG9uZW50IHguCitAZW5kIHRhYmxlCisKK1RoZSBwdWJsaWMga2V5IGlzIHNpbWlsYXIgd2l0aCAicHJpdmF0ZS1rZXkiIHJlcGxhY2VkIGJ5ICJwdWJsaWMta2V5IgorYW5kIG5vIEB2YXJ7eC1tcGl9LgorCisKK0Bub2RlIEVDQyBrZXkgcGFyYW1ldGVycworQHN1YnNlY3Rpb24gRUNDIGtleSBwYXJhbWV0ZXJzCisKK0BhbmNob3J7ZWNjX2tleXBhcmFtfQorQG5vaW5kZW50CitBbiBFQ0MgcHJpdmF0ZSBrZXkgaXMgZGVzY3JpYmVkIGJ5IHRoaXMgUy1leHByZXNzaW9uOgorCitAZXhhbXBsZQorKHByaXZhdGUta2V5CisgIChlY2MKKyAgICAocCBAdmFye3AtbXBpfSkKKyAgICAoYSBAdmFye2EtbXBpfSkKKyAgICAoYiBAdmFye2ItbXBpfSkKKyAgICAoZyBAdmFye2ctcG9pbnR9KQorICAgIChuIEB2YXJ7bi1tcGl9KQorICAgIChxIEB2YXJ7cS1wb2ludH0pCisgICAgKGQgQHZhcntkLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCitAdGFibGUgQHZhcgorQGl0ZW0gcC1tcGkKK1ByaW1lIHNwZWNpZnlpbmcgdGhlIGZpZWxkIEBtYXRoe0dGKHApfS4KK0BpdGVtIGEtbXBpCitAaXRlbXggYi1tcGkKK1RoZSB0d28gY29lZmZpY2llbnRzIG9mIHRoZSBXZWllcnN0cmFzcyBlcXVhdGlvbiBAbWF0aHt5XjIgPSB4XjMgKyBheCArIGJ9CitAaXRlbSBnLXBvaW50CitCYXNlIHBvaW50IEBtYXRoe2d9LgorQGl0ZW0gbi1tcGkKK09yZGVyIG9mIEBtYXRoe2d9CitAaXRlbSBxLXBvaW50CitUaGUgcG9pbnQgcmVwcmVzZW50aW5nIHRoZSBwdWJsaWMga2V5IEBtYXRoe1EgPSBkR30uCitAaXRlbSBkLW1waQorVGhlIHByaXZhdGUga2V5IEBtYXRoe2R9CitAZW5kIHRhYmxlCisKK0FsbCBwb2ludCB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gc3RhbmRhcmQgZm9ybWF0OyBMaWJnY3J5cHQgZG9lcyBpbgorZ2VuZXJhbCBvbmx5IHN1cHBvcnQgdW5jb21wcmVzc2VkIHBvaW50cywgdGh1cyB0aGUgZmlyc3QgYnl0ZSBuZWVkcyB0bworYmUgQGNvZGV7MHgwNH0uICBIb3dldmVyIGBgRWREU0EnJyBkZXNjcmliZXMgaXRzIG93biBjb21wcmVzc2lvbgorc2NoZW1lIHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdC4KKworVGhlIHB1YmxpYyBrZXkgaXMgc2ltaWxhciB3aXRoICJwcml2YXRlLWtleSIgcmVwbGFjZWQgYnkgInB1YmxpYy1rZXkiCithbmQgbm8gQHZhcntkLW1waX0uCisKK0lmIHRoZSBkb21haW4gcGFyYW1ldGVycyBhcmUgd2VsbC1rbm93biwgdGhlIG5hbWUgb2YgdGhpcyBjdXJ2ZSBtYXkgYmUKK3VzZWQuICBGb3IgZXhhbXBsZQorCitAZXhhbXBsZQorKHByaXZhdGUta2V5CisgIChlY2MKKyAgICAoY3VydmUgIk5JU1QgUC0xOTIiKQorICAgIChxIEB2YXJ7cS1wb2ludH0pCisgICAgKGQgQHZhcntkLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCitOb3RlIHRoYXQgQHZhcntxLXBvaW50fSBpcyBvcHRpb25hbCBmb3IgYSBwcml2YXRlIGtleS4gIFRoZQorQGNvZGV7Y3VydmV9IHBhcmFtZXRlciBtYXkgYmUgZ2l2ZW4gaW4gYW55IGNhc2UgYW5kIGlzIHVzZWQgdG8gcmVwbGFjZQorbWlzc2luZyBwYXJhbWV0ZXJzLgorCitAbm9pbmRlbnQKK0N1cnJlbnRseSBpbXBsZW1lbnRlZCBjdXJ2ZXMgYXJlOgorQHRhYmxlIEBjb2RlCitAaXRlbSBOSVNUIFAtMTkyCitAaXRlbXggMS4yLjg0MC4xMDA0NS4zLjEuMQorQGl0ZW14IHByaW1lMTkydjEKK0BpdGVteCBzZWNwMTkycjEKK1RoZSBOSVNUIDE5MiBiaXQgY3VydmUsIGl0cyBPSUQsIFg5LjYyIGFuZCBTRUNQIGFsaWFzZXMuCisKK0BpdGVtIE5JU1QgUC0yMjQKK0BpdGVteCBzZWNwMjI0cjEKK1RoZSBOSVNUIDIyNCBiaXQgY3VydmUgYW5kIGl0cyBTRUNQIGFsaWFzLgorCitAaXRlbSBOSVNUIFAtMjU2CitAaXRlbXggMS4yLjg0MC4xMDA0NS4zLjEuNworQGl0ZW14IHByaW1lMjU2djEKK0BpdGVteCBzZWNwMjU2cjEKK1RoZSBOSVNUIDI1NiBiaXQgY3VydmUsIGl0cyBPSUQsIFg5LjYyIGFuZCBTRUNQIGFsaWFzZXMuCisKK0BpdGVtIE5JU1QgUC0zODQKK0BpdGVteCBzZWNwMzg0cjEKK1RoZSBOSVNUIDM4NCBiaXQgY3VydmUgYW5kIGl0cyBTRUNQIGFsaWFzLgorCitAaXRlbSBOSVNUIFAtNTIxCitAaXRlbXggc2VjcDUyMXIxCitUaGUgTklTVCA1MjEgYml0IGN1cnZlIGFuZCBpdHMgU0VDUCBhbGlhcy4KKworQGVuZCB0YWJsZQorQXMgdXN1YWwgdGhlIE9JRHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nIEBjb2Rle09JRC59CitvciBAY29kZXtvaWQufS4KKworCitAbm9kZSBDcnlwdG9ncmFwaGljIEZ1bmN0aW9ucworQHNlY3Rpb24gQ3J5cHRvZ3JhcGhpYyBGdW5jdGlvbnMKKworQG5vaW5kZW50CitTb21lIGZ1bmN0aW9ucyBvcGVyYXRpbmcgb24gUy1leHByZXNzaW9ucyBzdXBwb3J0IGBmbGFncycgdG8gaW5mbHVlbmNlCit0aGUgb3BlcmF0aW9uLiAgVGhlc2UgZmxhZ3MgaGF2ZSB0byBiZSBsaXN0ZWQgaW4gYSBzdWItUy1leHByZXNzaW9uCituYW1lZCBgZmxhZ3MnLiAgRmxhZyBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuICBUaGUgZm9sbG93aW5nIGZsYWdzCithcmUga25vd246CisKK0B0YWJsZSBAY29kZQorCitAaXRlbSBjb21wCitAaXRlbXggbm9jb21wCitAY2luZGV4IGNvbXAKK0BjaW5kZXggbm9jb21wCitJZiBzdXBwb3J0ZWQgYnkgdGhlIGFsZ29yaXRobSBhbmQgY3VydmUgdGhlIEBjb2Rle2NvbXB9IGZsYWcgcmVxdWVzdHMKK3RoYXQgcG9pbnRzIGFyZSByZXR1cm5lZCBpbiBjb21wYWN0IChjb21wcmVzc2VkKSByZXByZXNlbnRhdGlvbi4gIFRoZQorQGNvZGV7bm9jb21wfSBmbGFnIHJlcXVlc3RzIHRoYXQgcG9pbnRzIGFyZSByZXR1cm5lZCB3aXRoIGZ1bGwKK2Nvb3JkaW5hdGVzLiAgVGhlIGRlZmF1bHQgZGVwZW5kcyBvbiB0aGUgdGhlIGFsZ29yaXRobSBhbmQgY3VydmUuCitUaGUgY29tcGFjdCByZXByZXNlbnRhdGlvbiByZXF1aXJlcyBhIHNtYWxsIG92ZXJoZWFkIGJlZm9yZSBhIHBvaW50CitjYW4gYmUgdXNlZCBidXQgaGFsdmVzIHRoZSBzaXplIG9mIGEgdG8gYmUgY29udmV5ZWQgcHVibGljIGtleS4KKworQGl0ZW0gcGtjczEKK0BjaW5kZXggUEtDUzEKK1VzZSBQS0NTIzEgYmxvY2sgdHlwZSAyIHBhZGRpbmcgZm9yIGVuY3J5cHRpb24sIGJsb2NrIHR5cGUgMSBwYWRkaW5nCitmb3Igc2lnbmluZy4KKworQGl0ZW0gb2FlcAorQGNpbmRleCBPQUVQCitVc2UgUlNBLU9BRVAgcGFkZGluZyBmb3IgZW5jcnlwdGlvbi4KKworQGl0ZW0gcHNzCitAY2luZGV4IFBTUworVXNlIFJTQS1QU1MgcGFkZGluZyBmb3Igc2lnbmluZy4KKworQGl0ZW0gZWRkc2EKK0BjaW5kZXggRWREU0EKK1VzZSB0aGUgRWREU0Egc2NoZW1lIHNpZ25pbmcgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBFQ0RTQSBhbGdvcml0aG0uCitOb3RlIHRoYXQgdGhlIEVkRFNBIHVzZXMgYSBzcGVjaWFsIGZvcm0gb2YgdGhlIHB1YmxpYyBrZXkuCisKK0BpdGVtIHJmYzY5NzkKK0BjaW5kZXggUkZDNjk3OQorRm9yIERTQSBhbmQgRUNEU0EgdXNlIGEgZGV0ZXJtaW5pc3RpYyBzY2hlbWUgZm9yIHRoZSBrIHBhcmFtZXRlci4KKworQGl0ZW0gbm8tYmxpbmRpbmcKK0BjaW5kZXggbm8tYmxpbmRpbmcKK0RvIG5vdCB1c2UgYSB0ZWNobmlxdWUgY2FsbGVkIGBibGluZGluZycsIHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdCBpbgorb3JkZXIgdG8gcHJldmVudCBsZWFraW5nIG9mIHNlY3JldCBpbmZvcm1hdGlvbi4gIEJsaW5kaW5nIGlzIG9ubHkKK2ltcGxlbWVudGVkIGJ5IFJTQSwgYnV0IGl0IG1pZ2h0IGJlIGltcGxlbWVudGVkIGJ5IG90aGVyIGFsZ29yaXRobXMgaW4KK3RoZSBmdXR1cmUgYXMgd2VsbCwgd2hlbiBuZWNlc3NhcnkuCisKK0BpdGVtIHBhcmFtCitAY2luZGV4IHBhcmFtCitGb3IgRUNDIGtleSBnZW5lcmF0aW9uIGFsc28gcmV0dXJuIHRoZSBkb21haW4gcGFyYW1ldGVycy4gIEZvciBFQ0MKK3NpZ25pbmcgYW5kIHZlcmlmaWNhdGlvbiBvdmVycmlkZSBkZWZhdWx0IHBhcmFtZXRlcnMgYnkgcHJvdmlkZWQKK2RvbWFpbiBwYXJhbWV0ZXJzIG9mIHRoZSBwdWJsaWMgb3IgcHJpdmF0ZSBrZXkuCisKK0BpdGVtIHRyYW5zaWVudC1rZXkKK0BjaW5kZXggdHJhbnNpZW50LWtleQorVGhpcyBmbGFnIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgUlNBLCBEU0EsIGFuZCBFQ0Mga2V5IGdlbmVyYXRpb24uICBJZgorZ2l2ZW4gdGhlIGtleSBpcyBjcmVhdGVkIHVzaW5nIGEgZmFzdGVyIGFuZCBhIHNvbWV3aGF0IGxlc3Mgc2VjdXJlCityYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gIFRoaXMgZmxhZyBtYXkgYmUgdXNlZCBmb3Iga2V5cyB3aGljaCBhcmUKK29ubHkgdXNlZCBmb3IgYSBzaG9ydCB0aW1lIG9yIHBlci1tZXNzYWdlIGFuZCBkbyBub3QgcmVxdWlyZSBmdWxsCitjcnlwdG9ncmFwaGljIHN0cmVuZ3RoLgorCitAaXRlbSB1c2UteDkzMQorQGNpbmRleCBYOS4zMQorRm9yY2UgdGhlIHVzZSBvZiB0aGUgQU5TSSBYOS4zMSBrZXkgZ2VuZXJhdGlvbiBhbGdvcml0aG0gaW5zdGVhZCBvZgordGhlIGRlZmF1bHQgYWxnb3JpdGhtLiBUaGlzIGZsYWcgaXMgb25seSBtZWFuaW5nZnVsIGZvciBSU0Ega2V5CitnZW5lcmF0aW9uIGFuZCB1c3VhbGx5IG5vdCByZXF1aXJlZC4gIE5vdGUgdGhhdCB0aGlzIGFsZ29yaXRobSBpcworaW1wbGljaXRseSB1c2VkIGlmIGVpdGhlciBAY29kZXtkZXJpdmUtcGFybXN9IGlzIGdpdmVuIG9yIExpYmdjcnlwdCBpcworaW4gRklQUyBtb2RlLgorCitAaXRlbSB1c2UtZmlwczE4NgorQGNpbmRleCBGSVBTIDE4NgorRm9yY2UgdGhlIHVzZSBvZiB0aGUgRklQUyAxODYga2V5IGdlbmVyYXRpb24gYWxnb3JpdGhtIGluc3RlYWQgb2YgdGhlCitkZWZhdWx0IGFsZ29yaXRobS4gIFRoaXMgZmxhZyBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIERTQSBhbmQgdXN1YWxseQorbm90IHJlcXVpcmVkLiAgTm90ZSB0aGF0IHRoaXMgYWxnb3JpdGhtIGlzIGltcGxpY2l0bHkgdXNlZCBpZiBlaXRoZXIKK0Bjb2Rle2Rlcml2ZS1wYXJtc30gaXMgZ2l2ZW4gb3IgTGliZ2NyeXB0IGlzIGluIEZJUFMgbW9kZS4gIEFzIG9mIG5vdworRklQUyAxODYtMiBpcyBpbXBsZW1lbnRlZDsgYWZ0ZXIgdGhlIGFwcHJvdmFsIG9mIEZJUFMgMTg2LTMgdGhlIGNvZGUKK3dpbGwgYmUgY2hhbmdlZCB0byBpbXBsZW1lbnQgMTg2LTMuCisKK0BpdGVtIHVzZS1maXBzMTg2LTIKK0BjaW5kZXggRklQUyAxODYtMgorRm9yY2UgdGhlIHVzZSBvZiB0aGUgRklQUyAxODYtMiBrZXkgZ2VuZXJhdGlvbiBhbGdvcml0aG0gaW5zdGVhZCBvZgordGhlIGRlZmF1bHQgYWxnb3JpdGhtLiAgVGhpcyBhbGdvcml0aG0gaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20KK0ZJUFMgMTg2LTMgYW5kIGFsbG93cyBvbmx5IDEwMjQgYml0IGtleXMuICBUaGlzIGZsYWcgaXMgb25seSBtZWFuaW5nZnVsCitmb3IgRFNBIGFuZCBvbmx5IHJlcXVpcmVkIGZvciBGSVBTIHRlc3RpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworQGVuZCB0YWJsZQorCitAbm9pbmRlbnQKK05vdyB0aGF0IHdlIGtub3cgdGhlIGtleSBiYXNpY3MsIHdlIGNhbiBjYXJyeSBvbiBhbmQgZXhwbGFpbiBob3cgdG8KK2VuY3J5cHQgYW5kIGRlY3J5cHQgZGF0YS4gIEluIGFsbW9zdCBhbGwgY2FzZXMgdGhlIGRhdGEgaXMgYSByYW5kb20KK3Nlc3Npb24ga2V5IHdoaWNoIGlzIGluIHR1cm4gdXNlZCBmb3IgdGhlIGFjdHVhbCBlbmNyeXB0aW9uIG9mIHRoZSByZWFsCitkYXRhLiAgVGhlcmUgYXJlIDIgZnVuY3Rpb25zIHRvIGRvIHRoaXM6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3BrX2VuY3J5cHQgKEB3e2djcnlfc2V4cF90ICpAdmFye3JfY2lwaH0sfSBAd3tnY3J5X3NleHBfdCBAdmFye2RhdGF9LH0gQHd7Z2NyeV9zZXhwX3QgQHZhcntwa2V5fX0pCisKK09idmlvdXNseSBhIHB1YmxpYyBrZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgZW5jcnlwdGlvbi4gIEl0IGlzCitleHBlY3RlZCBhcyBhbiBhcHByb3ByaWF0ZSBTLWV4cHJlc3Npb24gKHNlZSBhYm92ZSkgaW4gQHZhcntwa2V5fS4KK1RoZSBkYXRhIHRvIGJlIGVuY3J5cHRlZCBjYW4gZWl0aGVyIGJlIGluIHRoZSBzaW1wbGUgb2xkIGZvcm1hdCwgd2hpY2gKK2lzIGEgdmVyeSBzaW1wbGUgUy1leHByZXNzaW9uIGNvbnNpc3Rpbmcgb25seSBvZiBvbmUgTVBJLCBvciBpdCBtYXkgYmUKK2EgbW9yZSBjb21wbGV4IFMtZXhwcmVzc2lvbiB3aGljaCBhbHNvIGFsbG93cyB0byBzcGVjaWZ5IGZsYWdzIGZvcgorb3BlcmF0aW9uLCBsaWtlIGUuZy4gcGFkZGluZyBydWxlcy4KKworQG5vaW5kZW50CitJZiB5b3UgZG9uJ3Qgd2FudCB0byBsZXQgTGliZ2NyeXB0IGhhbmRsZSB0aGUgcGFkZGluZywgeW91IG11c3QgcGFzcyBhbgorYXBwcm9wcmlhdGUgTVBJIHVzaW5nIHRoaXMgZXhwcmVzc2lvbiBmb3IgQHZhcntkYXRhfToKKworQGV4YW1wbGUKKyhkYXRhCisgIChmbGFncyByYXcpCisgICh2YWx1ZSBAdmFye21waX0pKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVGhpcyBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBvbGQgc3R5bGUgTVBJIG9ubHkgd2F5LiAgQHZhcntNUEl9CitpcyB0aGUgYWN0dWFsIGRhdGEsIGFscmVhZHkgcGFkZGVkIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb3RvY29sLgorTW9zdCBSU0EgYmFzZWQgc3lzdGVtcyBob3dldmVyIHVzZSBQS0NTIzEgcGFkZGluZyBhbmQgc28geW91IGNhbiB1c2UKK3RoaXMgUy1leHByZXNzaW9uIGZvciBAdmFye2RhdGF9OgorCitAZXhhbXBsZQorKGRhdGEKKyAgKGZsYWdzIHBrY3MxKQorICAodmFsdWUgQHZhcntibG9ja30pKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSGVyZSwgdGhlICJmbGFncyIgbGlzdCBoYXMgdGhlICJwa2NzMSIgZmxhZyB3aGljaCBsZXQgdGhlIGZ1bmN0aW9uIGtub3cKK3RoYXQgaXQgc2hvdWxkIHByb3ZpZGUgUEtDUyMxIGJsb2NrIHR5cGUgMiBwYWRkaW5nLiAgVGhlIGFjdHVhbCBkYXRhIHRvCitiZSBlbmNyeXB0ZWQgaXMgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIG9jdGV0cyBpbiBAdmFye2Jsb2NrfS4gIFRoZQorZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhpcyBkYXRhIGFjdHVhbGx5IGNhbiBiZSB1c2VkIHdpdGggdGhlIGdpdmVuIGtleSwKK2RvZXMgdGhlIHBhZGRpbmcgYW5kIGVuY3J5cHRzIGl0LgorCitJZiB0aGUgZnVuY3Rpb24gY291bGQgc3VjY2Vzc2Z1bGx5IHBlcmZvcm0gdGhlIGVuY3J5cHRpb24sIHRoZSByZXR1cm4KK3ZhbHVlIHdpbGwgYmUgMCBhbmQgYSBuZXcgUy1leHByZXNzaW9uIHdpdGggdGhlIGVuY3J5cHRlZCByZXN1bHQgaXMKK2FsbG9jYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlIGF0IHRoZSBhZGRyZXNzIG9mIEB2YXJ7cl9jaXBofS4KK1RoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gcmVsZWFzZSB0aGlzIHZhbHVlIHVzaW5nCitAY29kZXtnY3J5X3NleHBfcmVsZWFzZX0uICBJbiBjYXNlIG9mIGFuIGVycm9yLCBhbiBlcnJvciBjb2RlIGlzCityZXR1cm5lZCBhbmQgQHZhcntyX2NpcGh9IHdpbGwgYmUgc2V0IHRvIEBjb2Rle05VTEx9LgorCitAbm9pbmRlbnQKK1RoZSByZXR1cm5lZCBTLWV4cHJlc3Npb24gaGFzIHRoaXMgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIFJTQToKKworQGV4YW1wbGUKKyhlbmMtdmFsCisgIChyc2EKKyAgICAoYSBAdmFye2EtbXBpfSkpKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorV2hlcmUgQHZhcnthLW1waX0gaXMgYW4gTVBJIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgUlNBIG9wZXJhdGlvbi4gIFdoZW4KK3VzaW5nIHRoZSBFbGdhbWFsIGFsZ29yaXRobSwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGhhdmUgdGhpcyBmb3JtYXQ6CisKK0BleGFtcGxlCisoZW5jLXZhbAorICAoZWxnCisgICAgKGEgQHZhcnthLW1waX0pCisgICAgKGIgQHZhcntiLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1doZXJlIEB2YXJ7YS1tcGl9IGFuZCBAdmFye2ItbXBpfSBhcmUgTVBJcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCitFbGdhbWFsIGVuY3J5cHRpb24gb3BlcmF0aW9uLgorQGVuZCBkZWZ0eXBlZnVuCitAYyBlbmQgZ2NyeV9wa19lbmNyeXB0CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3BrX2RlY3J5cHQgKEB3e2djcnlfc2V4cF90ICpAdmFye3JfcGxhaW59LH0gQHd7Z2NyeV9zZXhwX3QgQHZhcntkYXRhfSx9IEB3e2djcnlfc2V4cF90IEB2YXJ7c2tleX19KQorCitPYnZpb3VzbHkgYSBwcml2YXRlIGtleSBtdXN0IGJlIHByb3ZpZGVkIGZvciBkZWNyeXB0aW9uLiAgSXQgaXMgZXhwZWN0ZWQKK2FzIGFuIGFwcHJvcHJpYXRlIFMtZXhwcmVzc2lvbiAoc2VlIGFib3ZlKSBpbiBAdmFye3NrZXl9LiAgVGhlIGRhdGEgdG8KK2JlIGRlY3J5cHRlZCBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgb2YgdGhlIHJlc3VsdCBhcyByZXR1cm5lZCBieQorQGNvZGV7Z2NyeV9wa19lbmNyeXB0fSwgYnV0IHNob3VsZCBiZSBlbmxhcmdlZCB3aXRoIGEgQGNvZGV7ZmxhZ3N9CitlbGVtZW50OgorCitAZXhhbXBsZQorKGVuYy12YWwKKyAgKGZsYWdzKQorICAoZWxnCisgICAgKGEgQHZhcnthLW1waX0pCisgICAgKGIgQHZhcntiLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVtb3ZlIHBhZGRpbmcgZnJvbSB0aGUgZGF0YSBieSBkZWZhdWx0LiAgVG8KK2xldCBMaWJnY3J5cHQgcmVtb3ZlIHBhZGRpbmcsIGdpdmUgYSBoaW50IGluIGBmbGFncycgdGVsbGluZyB3aGljaAorcGFkZGluZyBtZXRob2Qgd2FzIHVzZWQgd2hlbiBlbmNyeXB0aW5nOgorCitAZXhhbXBsZQorKGZsYWdzIEB2YXJ7cGFkZGluZy1tZXRob2R9KQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorQ3VycmVudGx5IEB2YXJ7cGFkZGluZy1tZXRob2R9IGlzIGVpdGhlciBAY29kZXtwa2NzMX0gZm9yIFBLQ1MjMSBibG9jawordHlwZSAyIHBhZGRpbmcsIG9yIEBjb2Rle29hZXB9IGZvciBSU0EtT0FFUCBwYWRkaW5nLgorCitAbm9pbmRlbnQKK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiAgVGhlIHZhcmlhYmxlIGF0IHRoZQorYWRkcmVzcyBvZiBAdmFye3JfcGxhaW59IHdpbGwgYmUgc2V0IHRvIE5VTEwgb24gZXJyb3Igb3IgcmVjZWl2ZSB0aGUKK2RlY3J5cHRlZCB2YWx1ZSBvbiBzdWNjZXNzLiAgVGhlIGZvcm1hdCBvZiBAdmFye3JfcGxhaW59IGlzIGEKK3NpbXBsZSBTLWV4cHJlc3Npb24gcGFydCAoaS5lLiBub3QgYSB2YWxpZCBvbmUpIHdpdGgganVzdCBvbmUgTVBJIGlmCit0aGVyZSB3YXMgbm8gQGNvZGV7ZmxhZ3N9IGVsZW1lbnQgaW4gQHZhcntkYXRhfTsgaWYgYXQgbGVhc3QgYW4gZW1wdHkKK0Bjb2Rle2ZsYWdzfSBpcyBwYXNzZWQgaW4gQHZhcntkYXRhfSwgdGhlIGZvcm1hdCBpczoKKworQGV4YW1wbGUKKyh2YWx1ZSBAdmFye3BsYWludGV4dH0pCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGdjcnlfcGtfZGVjcnlwdAorCisKK0Fub3RoZXIgb3BlcmF0aW9uIGNvbW1vbmx5IHBlcmZvcm1lZCB1c2luZyBwdWJsaWMga2V5IGNyeXB0b2dyYXBoeSBpcworc2lnbmluZyBkYXRhLiAgSW4gc29tZSBzZW5zZSB0aGlzIGlzIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdGhhbgorZW5jcnlwdGlvbiBiZWNhdXNlIGRpZ2l0YWwgc2lnbmF0dXJlcyBhcmUgYW4gaW1wb3J0YW50IGluc3RydW1lbnQgZm9yCitrZXkgbWFuYWdlbWVudC4gIExpYmdjcnlwdCBzdXBwb3J0cyBkaWdpdGFsIHNpZ25hdHVyZXMgdXNpbmcKKzIgZnVuY3Rpb25zLCBzaW1pbGFyIHRvIHRoZSBlbmNyeXB0aW9uIGZ1bmN0aW9uczoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcGtfc2lnbiAoQHd7Z2NyeV9zZXhwX3QgKkB2YXJ7cl9zaWd9LH0gQHd7Z2NyeV9zZXhwX3QgQHZhcntkYXRhfSx9IEB3e2djcnlfc2V4cF90IEB2YXJ7c2tleX19KQorCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBkaWdpdGFsIHNpZ25hdHVyZSBmb3IgQHZhcntkYXRhfSB1c2luZyB0aGUKK3ByaXZhdGUga2V5IEB2YXJ7c2tleX0gYW5kIHBsYWNlIGl0IGludG8gdGhlIHZhcmlhYmxlIGF0IHRoZSBhZGRyZXNzIG9mCitAdmFye3Jfc2lnfS4gIEB2YXJ7ZGF0YX0gbWF5IGVpdGhlciBiZSB0aGUgc2ltcGxlIG9sZCBzdHlsZSBTLWV4cHJlc3Npb24KK3dpdGgganVzdCBvbmUgTVBJIG9yIGEgbW9kZXJuIGFuZCBtb3JlIHZlcnNhdGlsZSBTLWV4cHJlc3Npb24gd2hpY2gKK2FsbG93cyB0byBsZXQgTGliZ2NyeXB0IGhhbmRsZSBwYWRkaW5nOgorCitAZXhhbXBsZQorIChkYXRhCisgIChmbGFncyBwa2NzMSkKKyAgKGhhc2ggQHZhcntoYXNoLWFsZ299IEB2YXJ7YmxvY2t9KSkKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoaXMgZXhhbXBsZSByZXF1ZXN0cyB0byBzaWduIHRoZSBkYXRhIGluIEB2YXJ7YmxvY2t9IGFmdGVyIGFwcGx5aW5nCitQS0NTIzEgYmxvY2sgdHlwZSAxIHN0eWxlIHBhZGRpbmcuICBAdmFye2hhc2gtYWxnb30gaXMgYSBzdHJpbmcgd2l0aCB0aGUKK2hhc2ggYWxnb3JpdGhtIHRvIGJlIGVuY29kZWQgaW50byB0aGUgc2lnbmF0dXJlLCB0aGlzIG1heSBiZSBhbnkgaGFzaAorYWxnb3JpdGhtIG5hbWUgYXMgc3VwcG9ydGVkIGJ5IExpYmdjcnlwdC4gIE1vc3QgbGlrZWx5LCB0aGlzIHdpbGwgYmUKKyJzaGEyNTYiIG9yICJzaGExIi4gIEl0IGlzIG9idmlvdXMgdGhhdCB0aGUgbGVuZ3RoIG9mIEB2YXJ7YmxvY2t9IG11c3QKK21hdGNoIHRoZSBzaXplIG9mIHRoYXQgbWVzc2FnZSBkaWdlc3RzOyB0aGUgZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhpcworYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSB2YWxpZC4KKworQG5vaW5kZW50CitJZiBQS0NTIzEgcGFkZGluZyBpcyBub3QgcmVxdWlyZWQgKGJlY2F1c2UgdGhlIGNhbGxlciBkb2VzIGFscmVhZHkKK3Byb3ZpZGUgYSBwYWRkZWQgdmFsdWUpLCBlaXRoZXIgdGhlIG9sZCBmb3JtYXQgb3IgYmV0dGVyIHRoZSBmb2xsb3dpbmcKK2Zvcm1hdCBzaG91bGQgYmUgdXNlZDoKKworQGV4YW1wbGUKKyhkYXRhCisgIChmbGFncyByYXcpCisgICh2YWx1ZSBAdmFye21waX0pKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSGVyZSwgdGhlIGRhdGEgdG8gYmUgc2lnbmVkIGlzIGRpcmVjdGx5IGdpdmVuIGFzIGFuIEB2YXJ7TVBJfS4KKworQG5vaW5kZW50CitGb3IgRFNBIHRoZSBpbnB1dCBkYXRhIGlzIGV4cGVjdGVkIGluIHRoaXMgZm9ybWF0OgorCitAZXhhbXBsZQorKGRhdGEKKyAgKGZsYWdzIHJhdykKKyAgKHZhbHVlIEB2YXJ7bXBpfSkpCitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50CitIZXJlLCB0aGUgZGF0YSB0byBiZSBzaWduZWQgaXMgZGlyZWN0bHkgZ2l2ZW4gYXMgYW4gQHZhcntNUEl9LiAgSXQgaXMKK2V4cGVjdCB0aGF0IHRoaXMgTVBJIGlzIHRoZSB0aGUgaGFzaCB2YWx1ZS4gIEZvciB0aGUgc3RhbmRhcmQgRFNBCit1c2luZyBhIE1QSSBpcyBub3QgYSBwcm9ibGVtIGluIHJlZ2FyZCB0byBsZWFkaW5nIHplcm9lcyBiZWNhdXNlIHRoZQoraGFzaCB2YWx1ZSBpcyBkaXJlY3RseSB1c2VkIGFzIGFuIE1QSS4gIEZvciBiZXR0ZXIgc3RhbmRhcmQKK2NvbmZvcm1hbmNlIGl0IHdvdWxkIGJlIGJldHRlciB0byBleHBsaWNpdCB1c2UgYSBtZW1vcnkgc3RyaW5nIChsaWtlCit3aXRoIHBrY3MxKSBidXQgdGhhdCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gIEhvd2V2ZXIsIGZvcgorZGV0ZXJtaW5pc3RpYyBEU0EgYXMgc3BlY2lmaWVkIGluIFJGQzY5NzkgdGhpcyBjYW4ndCBiZSB1c2VkLiAgSW5zdGVhZAordGhlIGZvbGxvd2luZyBpbnB1dCBpcyBleHBlY3RlZC4KKworQGV4YW1wbGUKKyhkYXRhCisgIChmbGFncyByZmM2OTc5KQorICAoaGFzaCBAdmFye2hhc2gtYWxnb30gQHZhcntibG9ja30pKQorQGVuZCBleGFtcGxlCisKK05vdGUgdGhhdCB0aGUgcHJvdmlkZWQgaGFzaC1hbGdvIGlzIHVzZWQgZm9yIHRoZSBpbnRlcm5hbCBITUFDOyBpdAorc2hvdWxkIG1hdGNoIHRoZSBoYXNoLWFsZ28gdXNlZCB0byBjcmVhdGUgQHZhcntibG9ja30uCisKKworQG5vaW5kZW50CitUaGUgc2lnbmF0dXJlIGlzIHJldHVybmVkIGFzIGEgbmV3bHkgYWxsb2NhdGVkIFMtZXhwcmVzc2lvbiBpbgorQHZhcntyX3NpZ30gdXNpbmcgdGhpcyBmb3JtYXQgZm9yIFJTQToKKworQGV4YW1wbGUKKyhzaWctdmFsCisgIChyc2EKKyAgICAocyBAdmFye3MtbXBpfSkpKQorQGVuZCBleGFtcGxlCisKK1doZXJlIEB2YXJ7cy1tcGl9IGlzIHRoZSByZXN1bHQgb2YgdGhlIFJTQSBzaWduIG9wZXJhdGlvbi4gIEZvciBEU0EgdGhlCitTLWV4cHJlc3Npb24gcmV0dXJuZWQgaXM6CisKK0BleGFtcGxlCisoc2lnLXZhbAorICAoZHNhCisgICAgKHIgQHZhcntyLW1waX0pCisgICAgKHMgQHZhcntzLW1waX0pKSkKK0BlbmQgZXhhbXBsZQorCitXaGVyZSBAdmFye3ItbXBpfSBhbmQgQHZhcntzLW1waX0gYXJlIHRoZSByZXN1bHQgb2YgdGhlIERTQSBzaWduCitvcGVyYXRpb24uCisKK0ZvciBFbGdhbWFsIHNpZ25pbmcgKHdoaWNoIGlzIHNsb3csIHlpZWxkcyBsYXJnZSBudW1iZXJzIGFuZCBwcm9iYWJseQoraXMgbm90IGFzIHNlY3VyZSBhcyB0aGUgb3RoZXIgYWxnb3JpdGhtcyksIHRoZSBzYW1lIGZvcm1hdCBpcyB1c2VkCit3aXRoICJlbGciIHJlcGxhY2luZyAiZHNhIjsgZm9yIEVDRFNBIHNpZ25pbmcsIHRoZSBzYW1lIGZvcm1hdCBpcyB1c2VkCit3aXRoICJlY2RzYSIgcmVwbGFjaW5nICJkc2EiLgorCitGb3IgdGhlIEVkRFNBIGFsZ29yaXRobSAoY2YuIEVkMjU1MTUpIHRoZSByZXF1aXJlZCBpbnB1dCBwYXJhbWV0ZXJzIGFyZToKKworQGV4YW1wbGUKKyhkYXRhCisgIChmbGFncyBlZGRzYSkKKyAgKGhhc2gtYWxnbyBzaGE1MTIpCisgICh2YWx1ZSBAdmFye21lc3NhZ2V9KSkKK0BlbmQgZXhhbXBsZQorCitOb3RlIHRoYXQgdGhlIEB2YXJ7bWVzc2FnZX0gbWF5IGJlIG9mIGFueSBsZW5ndGg7IGhhc2hpbmcgaXMgcGFydCBvZgordGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgbGFyZ2UgZGF0YSBibG9jayBmb3IgQHZhcnttZXNzYWdlfSBpcyBub3QKK3N1Z2dlc3RlZDsgaW4gdGhhdCBjYXNlIHRoZSB1c2VkIHByb3RvY29sIHNob3VsZCBiZXR0ZXIgcmVxdWlyZSB0aGF0IGEKK2hhc2ggb2YgdGhlIG1lc3NhZ2UgaXMgdXNlZCBhcyBpbnB1dCB0byB0aGUgRWREU0EgYWxnb3JpdGhtLgorCisKK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGdjcnlfcGtfc2lnbgorCitAbm9pbmRlbnQKK1RoZSBvcGVyYXRpb24gbW9zdCBjb21tb25seSB1c2VkIGlzIGRlZmluaXRlbHkgdGhlIHZlcmlmaWNhdGlvbiBvZiBhCitzaWduYXR1cmUuICBMaWJnY3J5cHQgcHJvdmlkZXMgdGhpcyBmdW5jdGlvbjoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcGtfdmVyaWZ5IChAd3tnY3J5X3NleHBfdCBAdmFye3NpZ319LCBAd3tnY3J5X3NleHBfdCBAdmFye2RhdGF9fSwgQHd7Z2NyeV9zZXhwX3QgQHZhcntwa2V5fX0pCisKK1RoaXMgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBzaWduYXR1cmUgQHZhcntzaWd9IG1hdGNoZXMgdGhlCitAdmFye2RhdGF9LiAgVGhlIHB1YmxpYyBrZXkgQHZhcntwa2V5fSBtdXN0IGJlIHByb3ZpZGVkIHRvIHBlcmZvcm0gdGhpcwordmVyaWZpY2F0aW9uLiAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGluIGl0cyBwYXJhbWV0ZXJzIHRvCitAY29kZXtnY3J5X3BrX3NpZ259IHdpdGggdGhlIGV4Y2VwdGlvbnMgdGhhdCB0aGUgcHVibGljIGtleSBpcyB1c2VkCitpbnN0ZWFkIG9mIHRoZSBwcml2YXRlIGtleSBhbmQgdGhhdCBubyBzaWduYXR1cmUgaXMgY3JlYXRlZCBidXQgYQorc2lnbmF0dXJlLCBpbiBhIGZvcm1hdCBhcyBjcmVhdGVkIGJ5IEBjb2Rle2djcnlfcGtfc2lnbn0sIGlzIHBhc3NlZCB0bwordGhlIGZ1bmN0aW9uIGluIEB2YXJ7c2lnfS4KKworQG5vaW5kZW50CitUaGUgcmVzdWx0IGlzIDAgZm9yIHN1Y2Nlc3MgKGkuZS4gdGhlIGRhdGEgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlKSwgb3IgYW4KK2Vycm9yIGNvZGUgd2hlcmUgdGhlIG1vc3QgcmVsZXZhbnQgY29kZSBpcyBAY29kZXtHQ1JZX0VSUl9CQURfU0lHTkFUVVJFfQordG8gaW5kaWNhdGUgdGhhdCB0aGUgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBwcm92aWRlZCBkYXRhLgorCitAZW5kIGRlZnR5cGVmdW4KK0BjIGVuZCBnY3J5X3BrX3ZlcmlmeQorCitAbm9kZSBHZW5lcmFsIHB1YmxpYy1rZXkgcmVsYXRlZCBGdW5jdGlvbnMKK0BzZWN0aW9uIEdlbmVyYWwgcHVibGljLWtleSByZWxhdGVkIEZ1bmN0aW9ucworCitAbm9pbmRlbnQKK0EgY291cGxlIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gcmV0cmlldmUgdGhlIGxlbmd0aCBvZgordGhlIGtleSwgbWFwIGFsZ29yaXRobSBpZGVudGlmaWVycyBhbmQgcGVyZm9ybSBzYW5pdHkgY2hlY2tzOgorCitAZGVmdHlwZWZ1biB7Y29uc3QgY2hhciAqfSBnY3J5X3BrX2FsZ29fbmFtZSAoaW50IEB2YXJ7YWxnb30pCisKK01hcCB0aGUgcHVibGljIGtleSBhbGdvcml0aG0gaWQgQHZhcnthbGdvfSB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZgordGhlIGFsZ29yaXRobSBuYW1lLiAgRm9yIHVua25vd24gYWxnb3JpdGhtcyB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zIHRoZQorc3RyaW5nIEBjb2RleyI/In0uICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB0byB0ZXN0IGZvciB0aGUKK2F2YWlsYWJpbGl0eSBvZiBhbiBhbGdvcml0aG0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGdjcnlfcGtfbWFwX25hbWUgKGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0pCisKK01hcCB0aGUgYWxnb3JpdGhtIEB2YXJ7bmFtZX0gdG8gYSBwdWJsaWMga2V5IGFsZ29yaXRobSBJZC4gIFJldHVybnMgMCBpZgordGhlIGFsZ29yaXRobSBuYW1lIGlzIG5vdCBrbm93bi4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9wa190ZXN0X2FsZ28gKGludCBAdmFye2FsZ299KQorCitSZXR1cm4gMCBpZiB0aGUgcHVibGljIGtleSBhbGdvcml0aG0gQHZhcnthbGdvfSBpcyBhdmFpbGFibGUgZm9yIHVzZS4KK05vdGUgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uCitAZW5kIGRlZnR5cGVmdW4KKworCitAZGVmdHlwZWZ1biB7dW5zaWduZWQgaW50fSBnY3J5X3BrX2dldF9uYml0cyAoZ2NyeV9zZXhwX3QgQHZhcntrZXl9KQorCitSZXR1cm4gd2hhdCBpcyBjb21tb25seSByZWZlcnJlZCBhcyB0aGUga2V5IGxlbmd0aCBmb3IgdGhlIGdpdmVuCitwdWJsaWMgb3IgcHJpdmF0ZSBpbiBAdmFye2tleX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4ge3Vuc2lnbmVkIGNoYXIgKn0gZ2NyeV9wa19nZXRfa2V5Z3JpcCAoQHd7Z2NyeV9zZXhwX3QgQHZhcntrZXl9fSwgQHd7dW5zaWduZWQgY2hhciAqQHZhcnthcnJheX19KQorCitSZXR1cm4gdGhlIHNvIGNhbGxlZCAia2V5Z3JpcCIgd2hpY2ggaXMgdGhlIFNIQS0xIGhhc2ggb2YgdGhlIHB1YmxpYyBrZXkKK3BhcmFtZXRlcnMgZXhwcmVzc2VkIGluIGEgd2F5IGRlcGVuZGVkIG9uIHRoZSBhbGdvcml0aG0uICBAdmFye2FycmF5fQorbXVzdCBlaXRoZXIgcHJvdmlkZSBzcGFjZSBmb3IgMjAgYnl0ZXMgb3IgYmUgQGNvZGV7TlVMTH0uIEluIHRoZSBsYXR0ZXIKK2Nhc2UgYSBuZXdseSBhbGxvY2F0ZWQgYXJyYXkgb2YgdGhhdCBzaXplIGlzIHJldHVybmVkLiAgT24gc3VjY2VzcyBhCitwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3BhY2Ugb3IgdG8gQHZhcnthcnJheX0gaXMgcmV0dXJuZWQuCitAY29kZXtOVUxMfSBpcyByZXR1cm5lZCB0byBpbmRpY2F0ZSBhbiBlcnJvciB3aGljaCBpcyBtb3N0IGxpa2VseSBhbgordW5rbm93biBhbGdvcml0aG0gb3Igb25lIHdoZXJlIGEgImtleWdyaXAiIGhhcyBub3QgeWV0IGJlZW4gZGVmaW5lZC4KK1RoZSBmdW5jdGlvbiBhY2NlcHRzIHB1YmxpYyBvciBzZWNyZXQga2V5cyBpbiBAdmFye2tleX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcGtfdGVzdGtleSAoZ2NyeV9zZXhwX3QgQHZhcntrZXl9KQorCitSZXR1cm4gemVybyBpZiB0aGUgcHJpdmF0ZSBrZXkgQHZhcntrZXl9IGlzIGBzYW5lJywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuCitOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBgc2FuZW5lc3MnIG9mIGEgcHVibGljIGtleS4KKworQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcGtfYWxnb19pbmZvIChAd3tpbnQgQHZhcnthbGdvfX0sIEB3e2ludCBAdmFye3doYXR9fSwgQHd7dm9pZCAqQHZhcntidWZmZXJ9fSwgQHd7c2l6ZV90ICpAdmFye25ieXRlc319KQorCitEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIEB2YXJ7d2hhdH0gcmV0dXJuIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB3aXRoIHRoZSBpZCBAdmFye2FsZ299LiAgTm90ZSB0aGF0IHRoZQorZnVuY3Rpb24gcmV0dXJucyBAY29kZXstMX0gb24gZXJyb3IgYW5kIHRoZSBhY3R1YWwgZXJyb3IgY29kZSBtdXN0IGJlCityZXRyaWV2ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfZXJybm99LiAgVGhlIGN1cnJlbnRseSBkZWZpbmVkCit2YWx1ZXMgZm9yIEB2YXJ7d2hhdH0gYXJlOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllDVExfVEVTVF9BTEdPOgorUmV0dXJuIDAgaWYgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0gaXMgYXZhaWxhYmxlIGZvciB1c2UuCitAdmFye2J1ZmZlcn0gbXVzdCBiZSBAY29kZXtOVUxMfSwgQHZhcntuYnl0ZXN9IG1heSBiZSBwYXNzZWQgYXMKK0Bjb2Rle05VTEx9IG9yIHBvaW50IHRvIGEgdmFyaWFibGUgd2l0aCB0aGUgcmVxdWlyZWQgdXNhZ2Ugb2YgdGhlCithbGdvcml0aG0uIFRoaXMgbWF5IGJlIDAgZm9yICJkb24ndCBjYXJlIiBvciB0aGUgYml0LXdpc2UgT1Igb2YgdGhlc2UKK2ZsYWdzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllfUEtfVVNBR0VfU0lHTgorQWxnb3JpdGhtIGlzIHVzYWJsZSBmb3Igc2lnbmluZy4KK0BpdGVtIEdDUllfUEtfVVNBR0VfRU5DUgorQWxnb3JpdGhtIGlzIHVzYWJsZSBmb3IgZW5jcnlwdGlvbi4KK0BlbmQgdGFibGUKKworVW5sZXNzIHlvdSBuZWVkIHRvIHRlc3QgZm9yIHRoZSBhbGxvd2VkIHVzYWdlLCBpdCBpcyBpbiBnZW5lcmFsIGJldHRlcgordG8gdXNlIHRoZSBtYWNybyBnY3J5X3BrX3Rlc3RfYWxnbyBpbnN0ZWFkLgorCitAaXRlbSBHQ1JZQ1RMX0dFVF9BTEdPX1VTQUdFOgorUmV0dXJuIHRoZSB1c2FnZSBmbGFncyBmb3IgdGhlIGdpdmVuIGFsZ29yaXRobS4gIEFuIGludmFsaWQgYWxnb3JpdGhtCityZXR1cm4gMC4gIERpc2FibGVkIGFsZ29yaXRobXMgYXJlIGlnbm9yZWQgaGVyZSBiZWNhdXNlIHdlCit3YW50IHRvIGtub3cgd2hldGhlciB0aGUgYWxnb3JpdGhtIGlzIGF0IGFsbCBjYXBhYmxlIG9mIGEgY2VydGFpbiB1c2FnZS4KKworQGl0ZW0gR0NSWUNUTF9HRVRfQUxHT19OUEtFWQorUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIHB1YmxpYyBrZXkgZm9yIGFsZ29yaXRobSBAdmFye2FsZ299Citjb25zaXN0IG9mLiAgUmV0dXJuIDAgZm9yIGFuIHVua25vd24gYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZQ1RMX0dFVF9BTEdPX05TS0VZCitSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGUgcHJpdmF0ZSBrZXkgZm9yIGFsZ29yaXRobSBAdmFye2FsZ299Citjb25zaXN0IG9mLiAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoYXQgb2YgdGhlCitwdWJsaWMga2V5LiAgUmV0dXJuIDAgZm9yIGFuIHVua25vd24gYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZQ1RMX0dFVF9BTEdPX05TSUdOCitSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBhIHNpZ25hdHVyZSBjcmVhdGVkIHdpdGggdGhlIGFsZ29yaXRobQorQHZhcnthbGdvfSBjb25zaXN0cyBvZi4gIFJldHVybiAwIGZvciBhbiB1bmtub3duIGFsZ29yaXRobSBvciBmb3IgYW4KK2FsZ29yaXRobSBub3QgY2FwYWJsZSBvZiBjcmVhdGluZyBzaWduYXR1cmVzLgorCitAaXRlbSBHQ1JZQ1RMX0dFVF9BTEdPX05FTkMKK1JldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGEgZW5jcnlwdGVkIG1lc3NhZ2UgY3JlYXRlZCB3aXRoIHRoZSBhbGdvcml0aG0KK0B2YXJ7YWxnb30gY29uc2lzdHMgb2YuICBSZXR1cm4gMCBmb3IgYW4gdW5rbm93biBhbGdvcml0aG0gb3IgZm9yIGFuCithbGdvcml0aG0gbm90IGNhcGFibGUgb2YgZW5jcnlwdGlvbi4KK0BlbmQgdGFibGUKKworQG5vaW5kZW50CitQbGVhc2Ugbm90ZSB0aGF0IHBhcmFtZXRlcnMgbm90IHJlcXVpcmVkIHNob3VsZCBiZSBwYXNzZWQgYXMgQGNvZGV7TlVMTH0uCitAZW5kIGRlZnR5cGVmdW4KK0BjIGVuZCBnY3J5X3BrX2FsZ29faW5mbworCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3BrX2N0bCAoQHd7aW50IEB2YXJ7Y21kfX0sIEB3e3ZvaWQgKkB2YXJ7YnVmZmVyfX0sIEB3e3NpemVfdCBAdmFye2J1Zmxlbn19KQorCitUaGlzIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gY2VydGFpbiBjb250cm9sCitvcGVyYXRpb25zLiAgQHZhcntjbWR9IGNvbnRyb2xzIHdoYXQgaXMgdG8gYmUgZG9uZS4gVGhlIHJldHVybiB2YWx1ZSBpcworMCBmb3Igc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiAgQ3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgZm9yCitAdmFye2NtZH0gYXJlOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllDVExfRElTQUJMRV9BTEdPCitEaXNhYmxlIHRoZSBhbGdvcml0aG0gZ2l2ZW4gYXMgYW4gYWxnb3JpdGhtIGlkIGluIEB2YXJ7YnVmZmVyfS4KK0B2YXJ7YnVmZmVyfSBtdXN0IHBvaW50IHRvIGFuIEBjb2Rle2ludH0gdmFyaWFibGUgd2l0aCB0aGUgYWxnb3JpdGhtCitpZCBhbmQgQHZhcntidWZsZW59IG11c3QgaGF2ZSB0aGUgdmFsdWUgQGNvZGV7c2l6ZW9mIChpbnQpfS4gIFRoaXMKK2Z1Y250aW9uIGlzIG5vdCB0aHJlYWQgc2FmZSBhbmQgc2hvdWxkIHRodXMgYmUgdXNlZCBiZWZvcmUgYW55IG90aGVyCit0aHJlYWRzIGFyZSBzdGFydGVkLgorCitAZW5kIHRhYmxlCitAZW5kIGRlZnR5cGVmdW4KK0BjIGVuZCBnY3J5X3BrX2N0bAorCitAbm9pbmRlbnQKK0xpYmdjcnlwdCBhbHNvIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgcHVibGljIGtleQorcGFpcnM6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3BrX2dlbmtleSAoQHd7Z2NyeV9zZXhwX3QgKkB2YXJ7cl9rZXl9fSwgQHd7Z2NyeV9zZXhwX3QgQHZhcntwYXJtc319KQorCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIG5ldyBwdWJsaWMga2V5IHBhaXIgdXNpbmcgaW5mb3JtYXRpb24gZ2l2ZW4gaW4KK3RoZSBTLWV4cHJlc3Npb24gQHZhcntwYXJtc30gYW5kIHN0b3JlcyB0aGUgcHJpdmF0ZSBhbmQgdGhlIHB1YmxpYyBrZXkKK2luIG9uZSBuZXcgUy1leHByZXNzaW9uIGF0IHRoZSBhZGRyZXNzIGdpdmVuIGJ5IEB2YXJ7cl9rZXl9LiAgSW4gY2FzZSBvZgorYW4gZXJyb3IsIEB2YXJ7cl9rZXl9IGlzIHNldCB0byBAY29kZXtOVUxMfS4gIFRoZSByZXR1cm4gY29kZSBpcyAwIGZvcgorc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4KKworQG5vaW5kZW50CitIZXJlIGlzIGFuIGV4YW1wbGUgZm9yIEB2YXJ7cGFybXN9IHRvIGNyZWF0ZSBhbiAyMDQ4IGJpdCBSU0Ega2V5OgorCitAZXhhbXBsZQorKGdlbmtleQorICAocnNhCisgICAgKG5iaXRzIDQ6MjA0OCkpKQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorVG8gY3JlYXRlIGFuIEVsZ2FtYWwga2V5LCBzdWJzdGl0dXRlICJlbGciIGZvciAicnNhIiBhbmQgdG8gY3JlYXRlIGEgRFNBCitrZXkgdXNlICJkc2EiLiAgVmFsaWQgcmFuZ2VzIGZvciB0aGUga2V5IGxlbmd0aCBkZXBlbmQgb24gdGhlCithbGdvcml0aG1zOyBhbGwgY29tbW9ubHkgdXNlZCBrZXkgbGVuZ3RocyBhcmUgc3VwcG9ydGVkLiAgQ3VycmVudGx5CitzdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmU6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gbmJpdHMKK1RoaXMgaXMgYWx3YXlzIHJlcXVpcmVkIHRvIHNwZWNpZnkgdGhlIGxlbmd0aCBvZiB0aGUga2V5LiAgVGhlCithcmd1bWVudCBpcyBhIHN0cmluZyB3aXRoIGEgbnVtYmVyIGluIEMtbm90YXRpb24uICBUaGUgdmFsdWUgc2hvdWxkIGJlCithIG11bHRpcGxlIG9mIDguICBOb3RlIHRoYXQgdGhlIFMtZXhwcmVzc2lvbiBzeW50YXggcmVxdWlyZXMgdGhhdCBhCitudW1iZXIgaXMgcHJlZml4ZWQgd2l0aCBpdHMgc3RyaW5nIGxlbmd0aDsgdGh1cyB0aGUgQGNvZGV7NDp9IGluIHRoZQorYWJvdmUgZXhhbXBsZS4KKworQGl0ZW0gY3VydmUgQHZhcntuYW1lfQorRm9yIEVDQyBhIG5hbWVkIGN1cnZlIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgZ2l2aW5nIHRoZSBudW1iZXIgb2YKK3JlcXVlc3RlZCBiaXRzLiAgVGhpcyBhbGxvd3MgdG8gcmVxdWVzdCBhIHNwZWNpZmljIGN1cnZlIHRvIG92ZXJyaWRlIGEKK2RlZmF1bHQgc2VsZWN0aW9uIExpYmdjcnlwdCB3b3VsZCBoYXZlIHRha2VuIGlmIEBjb2Rle25iaXRzfSBoYXMgYmVlbgorZ2l2ZW4uICBUaGUgYXZhaWxhYmxlIG5hbWVzIGFyZSBsaXN0ZWQgd2l0aCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEVDQworcHVibGljIGtleSBwYXJhbWV0ZXJzLgorCitAaXRlbSByc2EtdXNlLWUgQHZhcnt2YWx1ZX0KK1RoaXMgaXMgb25seSB1c2VkIHdpdGggUlNBIHRvIGdpdmUgYSBoaW50IGZvciB0aGUgcHVibGljIGV4cG9uZW50LiBUaGUKK0B2YXJ7dmFsdWV9IHdpbGwgYmUgdXNlZCBhcyBhIGJhc2UgdG8gdGVzdCBmb3IgYSB1c2FibGUgZXhwb25lbnQuIFNvbWUKK3ZhbHVlcyBhcmUgc3BlY2lhbDoKKworQHRhYmxlIEBzYW1wCitAaXRlbSAwCitVc2UgYSBzZWN1cmUgYW5kIGZhc3QgdmFsdWUuICBUaGlzIGlzIGN1cnJlbnRseSB0aGUgbnVtYmVyIDQxLgorQGl0ZW0gMQorVXNlIGEgdmFsdWUgYXMgcmVxdWlyZWQgYnkgc29tZSBjcnlwdG8gcG9saWNpZXMuICBUaGlzIGlzIGN1cnJlbnRseQordGhlIG51bWJlciA2NTUzNy4KK0BpdGVtIDIKK1Jlc2VydmVkCitAaXRlbSA+IDIKK1VzZSB0aGUgZ2l2ZW4gdmFsdWUuCitAZW5kIHRhYmxlCisKK0Bub2luZGVudAorSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIExpYmdjcnlwdCB1c2VzIGZvciBoaXN0b3JpYyByZWFzb25zCis2NTUzNy4KKworQGl0ZW0gcWJpdHMgQHZhcntufQorVGhpcyBpcyBvbmx5IG1lYW5pZ2Z1bCBmb3IgRFNBIGtleXMuICBJZiBpdCBpcyBnaXZlbiB0aGUgRFNBIGtleSBpcworZ2VuZXJhdGVkIHdpdGggYSBRIHBhcmFtZXllciBvZiBzaXplIEB2YXJ7bn0gYml0cy4gIElmIGl0IGlzIG5vdCBnaXZlbgorb3IgemVybyBRIGlzIGRlZHVjZWQgZnJvbSBOQklUUyBpbiB0aGlzIHdheToKK0B0YWJsZSBAc2FtcAorQGl0ZW0gNTEyIDw9IE4gPD0gMTAyNAorUSA9IDE2MAorQGl0ZW0gTiA9IDIwNDgKK1EgPSAyMjQKK0BpdGVtIE4gPSAzMDcyCitRID0gMjU2CitAaXRlbSBOID0gNzY4MAorUSA9IDM4NAorQGl0ZW0gTiA9IDE1MzYwCitRID0gNTEyCitAZW5kIHRhYmxlCitOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIG9ubHkgdGhlIHZhbHVlcyBmb3IgTiwgYXMgZ2l2ZW4gaW4gdGhlIHRhYmxlLAorYXJlIGFsbG93ZWQuICBXaGVuIHNwZWNpZnlpbmcgUSBhbGwgdmFsdWVzIG9mIE4gaW4gdGhlIHJhbmdlIDUxMiB0bworMTU2ODAgYXJlIHZhbGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgbXVsdGlwbGVzIG9mIDguCisKK0BpdGVtIGRvbWFpbiBAdmFye2xpc3R9CitUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgRExQIGFsZ29yaXRobXMuICBJZiBzcGVjaWZpZWQga2V5cyBhcmUKK2dlbmVyYXRlZCB3aXRoIGRvbWFpbiBwYXJhbWV0ZXJzIHRha2VuIGZyb20gdGhpcyBsaXN0LiAgVGhlIGV4YWN0Citmb3JtYXQgb2YgdGhpcyBwYXJhbWV0ZXIgZGVwZW5kcyBvbiB0aGUgYWN0dWFsIGFsZ29yaXRobS4gIEl0IGlzCitjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgRFNBIHVzaW5nIHRoaXMgZm9ybWF0OgorCitAZXhhbXBsZQorKGdlbmtleQorICAoZHNhCisgICAgKGRvbWFpbgorICAgICAgKHAgQHZhcntwLW1waX0pCisgICAgICAocSBAdmFye3EtbXBpfSkKKyAgICAgIChnIEB2YXJ7cS1tcGl9KSkpKQorQGVuZCBleGFtcGxlCisKK0Bjb2Rle25iaXRzfSBhbmQgQGNvZGV7cWJpdHN9IG1heSBub3QgYmUgc3BlY2lmaWVkIGJlY2F1c2UgdGhleSBhcmUKK2Rlcml2ZWQgZnJvbSB0aGUgZG9tYWluIHBhcmFtZXRlcnMuCisKK0BpdGVtIGRlcml2ZS1wYXJtcyBAdmFye2xpc3R9CitUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBSU0EgYW5kIERTQSBrZXlzLiAgSXQgaXMgbm90CithbGxvd2VkIHRvIHVzZSB0aGlzIHRvZ2V0aGVyIHdpdGggYSBAY29kZXtkb21haW59IHNwZWNpZmljYXRpb24uICBJZgorZ2l2ZW4sIGl0IGlzIHVzZWQgdG8gZGVyaXZlIHRoZSBrZXlzIHVzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorCitJZiBnaXZlbiBmb3IgYW4gUlNBIGtleSB0aGUgWDkuMzEga2V5IGdlbmVyYXRpb24gYWxnb3JpdGhtIGlzIHVzZWQKK2V2ZW4gaWYgbGliZ2NyeXB0IGlzIG5vdCBpbiBGSVBTIG1vZGUuICBJZiBnaXZlbiBmb3IgYSBEU0Ega2V5LCB0aGUKK0ZJUFMgMTg2IGFsZ29yaXRobSBpcyB1c2VkIGV2ZW4gaWYgbGliZ2NyeXB0IGlzIG5vdCBpbiBGSVBTIG1vZGUuCisKK0BleGFtcGxlCisoZ2Vua2V5CisgIChyc2EKKyAgICAobmJpdHMgNDoxMDI0KQorICAgIChyc2EtdXNlLWUgMTozKQorICAgIChkZXJpdmUtcGFybXMKKyAgICAgIChYcDEgIzFBMTkxNkREQjI5QjRFQjdFQjY3MzJFMTI4IykKKyAgICAgIChYcDIgIzE5MkU4QUFDNDFDNTc2QzgyMkQ5M0VBNDMzIykKKyAgICAgIChYcCAgI0Q4Q0Q4MUYwMzVFQzU3RUZFODIyOTU1MTQ5RDNCRkY3MEM1MzUyMEQKKyAgICAgICAgICAgIDc2OUQ2RDc2NjQ2QzdBNzkyRTE2RUJEODlGRTZGQzVCNjA1QTY0OTMKKyAgICAgICAgICAgIDM5REZDOTI1QTg2QTRDNkQxNTBCNzFCOUVFQTAyRDY4ODg1RjUwMDkKKyAgICAgICAgICAgIEI5OEJEOTg0IykKKyAgICAgIChYcTEgIzFBNUNGNzJFRTc3MERFNTBDQjA5QUNDRUE5IykKKyAgICAgIChYcTIgIzEzNEU0Q0FBMTZEMjM1MEEyMUQ3NzVDNDA0IykKKyAgICAgIChYcSAgI0NDMTA5MjQ5NUQ4NjdFNjQwNjVERUUzRTc5NTVGMkVCQzdENDdBMkQKKyAgICAgICAgICAgIDdDOTk1MzM4OEY5N0REREMzRTFDQTE5QzM1Q0E2NTlFREMyRkMzMjUKKyAgICAgICAgICAgIDZEMjlDMjYyNzQ3OUMwODZBNjk5QTQ5QzRDOUNFRTdFRjdCRDFCMzQKKyAgICAgICAgICAgIDMyMURFMzRBIykpKSkKK0BlbmQgZXhhbXBsZQorCitAZXhhbXBsZQorKGdlbmtleQorICAoZHNhCisgICAgKG5iaXRzIDQ6MTAyNCkKKyAgICAoZGVyaXZlLXBhcm1zCisgICAgICAoc2VlZCBAdmFye3NlZWQtbXBpfSkpKSkKK0BlbmQgZXhhbXBsZQorCisKK0BpdGVtIGZsYWdzIEB2YXJ7ZmxhZ2xpc3R9CitUaGlzIGlzIHByZWZlcnJlZCB3YXkgdG8gZGVmaW5lIGZsYWdzLiAgQHZhcntmbGFnbGlzdH0gbWF5IGNvbnRhaW4gYW55CitudW1iZXIgb2YgZmxhZ3MuICBTZWUgYWJvdmUgZm9yIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGVzZSBmbGFncy4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9uIGhvdyB0byBjcmVhdGUgYSBrZXkgdXNpbmcgY3VydmUgRWQyNTUxOSB3aXRoIHRoZQorRUNEU0Egc2lnbmF0dXJlIGFsZ29yaXRobS4gIE5vdGUgdGhhdCB0aGUgdXNlIG9mIEVDRFNBIHdpdGggdGhhdCBjdXJ2ZQoraXMgaW4gZ2VuZXJhbCBub3QgcmVjb21tZW5kZWQuCitAZXhhbXBsZQorKGdlbmtleQorICAoZWNjCisgICAgKGZsYWdzIHRyYW5zaWVudC1rZXkpKSkKK0BlbmQgZXhhbXBsZQorCitAaXRlbSB0cmFuc2llbnQta2V5CitAaXRlbXggdXNlLXg5MzEKK0BpdGVteCB1c2UtZmlwczE4NgorQGl0ZW14IHVzZS1maXBzMTg2LTIKK1RoZXNlIGFyZSBkZXByZWNhdGVkIHdheXMgdG8gc2V0IGEgZmxhZyB3aXRoIHRoYXQgbmFtZTsgc2VlIGFib3ZlIGZvcgorYSBkZXNjcmlwdGlvbiBvZiBlYWNoIGZsYWcuCisKKworQGVuZCB0YWJsZQorQGMgZW5kIHRhYmxlIG9mIHBhcmFtZXRlcnMKKworQG5vaW5kZW50CitUaGUga2V5IHBhaXIgaXMgcmV0dXJuZWQgaW4gYSBmb3JtYXQgZGVwZW5kaW5nIG9uIHRoZSBhbGdvcml0aG0uICBCb3RoCitwcml2YXRlIGFuZCBwdWJsaWMga2V5cyBhcmUgcmV0dXJuZWQgaW4gb25lIGNvbnRhaW5lciBhbmQgbWF5IGJlCithY2NvbXBhbmllZCBieSBzb21lIG1pc2NlbGxhbmVvdXMgaW5mb3JtYXRpb24uCisKK0Bub2luZGVudAorSGVyZSBhcmUgdHdvIGV4YW1wbGVzOyB0aGUgZmlyc3QgZm9yIEVsZ2FtYWwgYW5kIHRoZSBzZWNvbmQgZm9yCitlbGxpcHRpYyBjdXJ2ZSBrZXkgZ2VuZXJhdGlvbjoKKworQGV4YW1wbGUKKyhrZXktZGF0YQorICAocHVibGljLWtleQorICAgIChlbGcKKyAgICAgIChwIEB2YXJ7cC1tcGl9KQorICAgICAgKGcgQHZhcntnLW1waX0pCisgICAgICAoeSBAdmFye3ktbXBpfSkpKQorICAocHJpdmF0ZS1rZXkKKyAgICAoZWxnCisgICAgICAocCBAdmFye3AtbXBpfSkKKyAgICAgIChnIEB2YXJ7Zy1tcGl9KQorICAgICAgKHkgQHZhcnt5LW1waX0pCisgICAgICAoeCBAdmFye3gtbXBpfSkpKQorICAobWlzYy1rZXktaW5mbworICAgIChwbTEtZmFjdG9ycyBAdmFye24xIG4yIC4uLiBubn0pKQorQGVuZCBleGFtcGxlCisKK0BleGFtcGxlCisoa2V5LWRhdGEKKyAgKHB1YmxpYy1rZXkKKyAgICAoZWNjCisgICAgICAoY3VydmUgRWQyNTUxOSkKKyAgICAgIChmbGFncyBlZGRzYSkKKyAgICAgIChxIEB2YXJ7cS12YWx1ZX0pKSkKKyAgKHByaXZhdGUta2V5CisgICAgKGVjYworICAgICAgKGN1cnZlIEVkMjU1MTkpCisgICAgICAoZmxhZ3MgZWRkc2EpCisgICAgICAocSBAdmFye3EtdmFsdWV9KQorICAgICAgKGQgQHZhcntkLXZhbHVlfSkpKSkKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK0FzIHlvdSBjYW4gc2VlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBpcyBkdXBsaWNhdGVkLCBidXQgdGhpcworcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZXh0cmFjdCBlaXRoZXIgdGhlIHB1YmxpYyBvciB0aGUgcHJpdmF0ZSBrZXkuCitOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpcyBub3QgZGVmaW5lZCwgZS5nLiB0aGUgcHJpdmF0ZQora2V5IG1heSBiZSBzdG9yZWQgYmVmb3JlIHRoZSBwdWJsaWMga2V5LiBAdmFye24xIG4yIC4uLiBubn0gaXMgYSBsaXN0CitvZiBwcmltZSBudW1iZXJzIHVzZWQgdG8gY29tcG9zaXRlIEB2YXJ7cC1tcGl9OyB0aGlzIGlzIGluIGdlbmVyYWwgbm90CithIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIGFuZCBvbmx5IGF2YWlsYWJsZSBpZiB0aGUga2V5IGdlbmVyYXRpb24KK2FsZ29yaXRobSBwcm92aWRlcyB0aGVtLgorQGVuZCBkZWZ0eXBlZnVuCitAYyBlbmQgZ2NyeV9wa19nZW5rZXkKKworCitAbm9pbmRlbnQKK0Z1dHVyZSB2ZXJzaW9ucyBvZiBMaWJnY3J5cHQgd2lsbCBoYXZlIGV4dGVuZGVkIHZlcnNpb25zIG9mIHRoZSBwdWJsaWMKK2tleSBpbnRlcmZhY2VkIHdoaWNoIHdpbGwgdGFrZSBhbiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYWxsb3cgZm9yCitwcmUtY29tcHV0YXRpb25zLCBzcGVjaWFsIG9wZXJhdGlvbnMsIGFuZCBvdGhlciBvcHRpbWl6YXRpb24uICBBcyBhCitmaXJzdCBzdGVwIGEgbmV3IGZ1bmN0aW9uIGlzIGludHJvZHVjZWQgdG8gaGVscCB1c2luZyB0aGUgRUNDCithbGdvcml0aG1zIGluIG5ldyB3YXlzOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKEB3e2djcnlfc2V4cF90ICpAdmFye3Jfc2V4cH19LCBACisgQHd7aW50IEB2YXJ7bW9kZX19LCBAd3tnY3J5X2N0eF90IEB2YXJ7Y3R4fX0pCisKK1JldHVybiBhbiBTLWV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb250ZXh0IEB2YXJ7Y3R4fS4gIERlcGVuZGluZworb24gdGhlIHN0YXRlIG9mIHRoYXQgY29udGV4dCwgdGhlIFMtZXhwcmVzc2lvbiBtYXkgZWl0aGVyIGJlIGEgcHVibGljCitrZXksIGEgcHJpdmF0ZSBrZXkgb3IgYW55IG90aGVyIG9iamVjdCB1c2VkIHdpdGggcHVibGljIGtleQorb3BlcmF0aW9ucy4gIE9uIHN1Y2Nlc3MgMCBpcyByZXR1cm5lZCBhbmQgYSBuZXcgUy1leHByZXNzaW9uIGlzIHN0b3JlZAorYXQgQHZhcntyX3NleHB9OyBvbiBlcnJvciBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGFuZCBOVUxMIGlzIHN0b3JlZAorYXQgQHZhcntyX3NleHB9LiAgQHZhcnttb2RlfSBtdXN0IGJlIG9uZSBvZjoKKworQHRhYmxlIEBjb2RlCitAaXRlbSAwCitEZWNpZGUgd2hhdCB0byByZXR1cm4gZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiAgRm9yIGV4YW1wbGUgaWYgdGhlCitwcml2YXRlIGtleSBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGEgcHJpdmF0ZSBrZXkgaXMgcmV0dXJuZWQsIGlmIG5vdCBhCitwdWJsaWMga2V5IGlzIHJldHVybmVkLgorCitAaXRlbSBHQ1JZX1BLX0dFVF9QVUJLRVkKK1JldHVybiB0aGUgcHVibGljIGtleSBldmVuIGlmIHRoZSBjb250ZXh0IGhhcyB0aGUgcHJpdmF0ZSBrZXkKK3BhcmFtZXRlci4KKworQGl0ZW0gR0NSWV9QS19HRVRfU0VDS0VZCitSZXR1cm4gdGhlIHByaXZhdGUga2V5IG9yIHRoZSBlcnJvciBAY29kZXtHUEdfRVJSX05PX1NFQ0tFWX0gaWYgaXQgaXMKK25vdCBwb3NzaWJsZS4KK0BlbmQgdGFibGUKKworQXMgb2Ygbm93IHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgb25seSBjZXJ0YWluIEVDQyBvcGVyYXRpb25zIGJlY2F1c2UgYQorY29udGV4dCBvYmplY3QgaXMgcmlnaHQgbm93IG9ubHkgZGVmaW5lZCBmb3IgRUNDLiAgT3ZlciB0aW1lIHRoaXMKK2Z1bmN0aW9uIHdpbGwgYmUgZXh0ZW5kZWQgdG8gY292ZXIgbW9yZSBhbGdvcml0aG1zLgorCitAZW5kIGRlZnR5cGVmdW4KK0BjIGVuZCBnY3J5X3B1YmtleV9nZXRfc2V4cAorCisKKworCisKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKiogIEhhc2ggRnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Bub2RlIEhhc2hpbmcKK0BjaGFwdGVyIEhhc2hpbmcKKworTGliZ2NyeXB0IHByb3ZpZGVzIGFuIGVhc3kgYW5kIGNvbnNpc3RlbnQgdG8gdXNlIGludGVyZmFjZSBmb3IgaGFzaGluZy4KK0hhc2hpbmcgaXMgYnVmZmVyZWQgYW5kIHNldmVyYWwgaGFzaCBhbGdvcml0aG1zIGNhbiBiZSB1cGRhdGVkIGF0IG9uY2UuCitJdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIGEgSE1BQyB1c2luZyB0aGUgc2FtZSByb3V0aW5lcy4gIFRoZQorcHJvZ3JhbW1pbmcgbW9kZWwgZm9sbG93cyBhbiBvcGVuL3Byb2Nlc3MvY2xvc2UgcGFyYWRpZ20gYW5kIGlzIGluIHRoYXQKK3NpbWlsYXIgdG8gb3RoZXIgYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IExpYmdjcnlwdC4KKworRm9yIGNvbnZlbmllbmNlIHJlYXNvbnMsIGEgZmV3IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIHZhbHVlIG9wZXJhdGlvbnMKK2FyZSBhbHNvIHN1cHBvcnRlZC4KKworQG1lbnUKKyogQXZhaWxhYmxlIGhhc2ggYWxnb3JpdGhtczo6ICAgTGlzdCBvZiBoYXNoIGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5LgorKiBXb3JraW5nIHdpdGggaGFzaCBhbGdvcml0aG1zOjogIExpc3Qgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaGFzaGluZy4KK0BlbmQgbWVudQorCitAbm9kZSBBdmFpbGFibGUgaGFzaCBhbGdvcml0aG1zCitAc2VjdGlvbiBBdmFpbGFibGUgaGFzaCBhbGdvcml0aG1zCisKK0BjIGJlZ2luIHRhYmxlIG9mIGhhc2ggYWxnb3JpdGhtcworQGNpbmRleCBTSEEtMQorQGNpbmRleCBTSEEtMjI0LCBTSEEtMjU2LCBTSEEtMzg0LCBTSEEtNTEyCitAY2luZGV4IFJJUEUtTUQtMTYwCitAY2luZGV4IE1EMiwgTUQ0LCBNRDUKK0BjaW5kZXggVElHRVIsIFRJR0VSMSwgVElHRVIyCitAY2luZGV4IEhBVkFMCitAY2luZGV4IFdoaXJscG9vbAorQGNpbmRleCBDUkMzMgorQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZX01EX05PTkUKK1RoaXMgaXMgbm90IGEgcmVhbCBhbGdvcml0aG0gYnV0IHVzZWQgYnkgc29tZSBmdW5jdGlvbnMgYXMgYW4gZXJyb3IKK3JldHVybiB2YWx1ZS4gIFRoaXMgY29uc3RhbnQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSB2YWx1ZSBAY29kZXswfS4KKworQGl0ZW0gR0NSWV9NRF9TSEExCitUaGlzIGlzIHRoZSBTSEEtMSBhbGdvcml0aG0gd2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMjAgYnl0ZXMuCitOb3RlIHRoYXQgU0hBLTEgYmVnaW5zIHRvIHNob3cgc29tZSB3ZWFrbmVzc2VzIGFuZCBpdCBpcyBzdWdnZXN0ZWQgdG8KK2ZhZGUgb3V0IGl0cyB1c2UgaWYgc3Ryb25nIGNyeXB0b2dyYXBoaWMgcHJvcGVydGllcyBhcmUgcmVxdWlyZWQuCisKK0BpdGVtIEdDUllfTURfUk1EMTYwCitUaGlzIGlzIHRoZSAxNjAgYml0IHZlcnNpb24gb2YgdGhlIFJJUEUgbWVzc2FnZSBkaWdlc3QgKFJJUEUtTUQtMTYwKS4KK0xpa2UgU0hBLTEgaXQgYWxzbyB5aWVsZHMgYSBkaWdlc3Qgb2YgMjAgYnl0ZXMuICBUaGlzIGFsZ29yaXRobSBzaGFyZSBhCitsb3Qgb2YgZGVzaWduIHByb3BlcnRpZXMgd2l0aCBTSEEtMSBhbmQgdGh1cyBpdCBpcyBhZHZpc2FibGUgbm90IHRvIHVzZQoraXQgZm9yIG5ldyBwcm90b2NvbHMuCisKK0BpdGVtIEdDUllfTURfTUQ1CitUaGlzIGlzIHRoZSB3ZWxsIGtub3duIE1ENSBhbGdvcml0aG0sIHdoaWNoIHlpZWxkcyBhIG1lc3NhZ2UgZGlnZXN0IG9mCisxNiBieXRlcy4gIE5vdGUgdGhhdCB0aGUgTUQ1IGFsZ29yaXRobSBoYXMgc2V2ZXJlIHdlYWtuZXNzZXMsIGZvcgorZXhhbXBsZSBpdCBpcyBlYXN5IHRvIGNvbXB1dGUgdHdvIG1lc3NhZ2VzIHlpZWxkaW5nIHRoZSBzYW1lIGhhc2gKKyhjb2xsaXNpb24gYXR0YWNrKS4gIFRoZSB1c2Ugb2YgdGhpcyBhbGdvcml0aG0gaXMgb25seSBqdXN0aWZpZWQgZm9yCitub24tY3J5cHRvZ3JhcGhpYyBhcHBsaWNhdGlvbi4KKworCitAaXRlbSBHQ1JZX01EX01ENAorVGhpcyBpcyB0aGUgTUQ0IGFsZ29yaXRobSwgd2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMTYgYnl0ZXMuCitUaGlzIGFsZ29yaXRobSBoYXMgc2V2ZXJlIHdlYWtuZXNzZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4KKworQGl0ZW0gR0NSWV9NRF9NRDIKK1RoaXMgaXMgYW4gcmVzZXJ2ZWQgaWRlbnRpZmllciBmb3IgTUQtMjsgdGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24geWV0LgorVGhpcyBhbGdvcml0aG0gaGFzIHNldmVyZSB3ZWFrbmVzc2VzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCisKK0BpdGVtIEdDUllfTURfVElHRVIKK1RoaXMgaXMgdGhlIFRJR0VSLzE5MiBhbGdvcml0aG0gd2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMjQKK2J5dGVzLiAgQWN0dWFsbHkgdGhpcyBpcyBhIHZhcmlhbnQgb2YgVElHRVIgd2l0aCBhIGRpZmZlcmVudCBvdXRwdXQKK3ByaW50IG9yZGVyIGFzIHVzZWQgYnkgR251UEcgdXAgdG8gdmVyc2lvbiAxLjMuMi4KKworQGl0ZW0gR0NSWV9NRF9USUdFUjEKK1RoaXMgaXMgdGhlIFRJR0VSIHZhcmlhbnQgYXMgdXNlZCBieSB0aGUgTkVTU0lFIHByb2plY3QuICBJdCB1c2VzIHRoZQorbW9zdCBjb21tb25seSB1c2VkIG91dHB1dCBwcmludCBvcmRlci4KKworQGl0ZW0gR0NSWV9NRF9USUdFUjIKK1RoaXMgaXMgYW5vdGhlciB2YXJpYW50IG9mIFRJR0VSIHdpdGggYSBkaWZmZXJlbnQgcGFkZGluZyBzY2hlbWUuCisKKworQGl0ZW0gR0NSWV9NRF9IQVZBTAorVGhpcyBpcyBhbiByZXNlcnZlZCB2YWx1ZSBmb3IgdGhlIEhBVkFMIGFsZ29yaXRobSB3aXRoIDUgcGFzc2VzIGFuZCAxNjAKK2JpdC4gSXQgeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMjAgYnl0ZXMuICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KK2ltcGxlbWVudGF0aW9uIHlldCBhdmFpbGFibGUuCisKK0BpdGVtIEdDUllfTURfU0hBMjI0CitUaGlzIGlzIHRoZSBTSEEtMjI0IGFsZ29yaXRobSB3aGljaCB5aWVsZHMgYSBtZXNzYWdlIGRpZ2VzdCBvZiAyOCBieXRlcy4KK1NlZSBDaGFuZ2UgTm90aWNlIDEgZm9yIEZJUFMgMTgwLTIgZm9yIHRoZSBzcGVjaWZpY2F0aW9uLgorCitAaXRlbSBHQ1JZX01EX1NIQTI1NgorVGhpcyBpcyB0aGUgU0hBLTI1NiBhbGdvcml0aG0gd2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMzIgYnl0ZXMuCitTZWUgRklQUyAxODAtMiBmb3IgdGhlIHNwZWNpZmljYXRpb24uCisKK0BpdGVtIEdDUllfTURfU0hBMzg0CitUaGlzIGlzIHRoZSBTSEEtMzg0IGFsZ29yaXRobSB3aGljaCB5aWVsZHMgYSBtZXNzYWdlIGRpZ2VzdCBvZiA0OCBieXRlcy4KK1NlZSBGSVBTIDE4MC0yIGZvciB0aGUgc3BlY2lmaWNhdGlvbi4KKworQGl0ZW0gR0NSWV9NRF9TSEE1MTIKK1RoaXMgaXMgdGhlIFNIQS0zODQgYWxnb3JpdGhtIHdoaWNoIHlpZWxkcyBhIG1lc3NhZ2UgZGlnZXN0IG9mIDY0IGJ5dGVzLgorU2VlIEZJUFMgMTgwLTIgZm9yIHRoZSBzcGVjaWZpY2F0aW9uLgorCitAaXRlbSBHQ1JZX01EX0NSQzMyCitUaGlzIGlzIHRoZSBJU08gMzMwOSBhbmQgSVRVLVQgVi40MiBjeWNsaWMgcmVkdW5kYW5jeSBjaGVjay4gIEl0IHlpZWxkcworYW4gb3V0cHV0IG9mIDQgYnl0ZXMuICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBoYXNoIGFsZ29yaXRobSBpbiB0aGUKK2NyeXB0b2dyYXBoaWMgc2Vuc2UuCisKK0BpdGVtIEdDUllfTURfQ1JDMzJfUkZDMTUxMAorVGhpcyBpcyB0aGUgYWJvdmUgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2sgZnVuY3Rpb24sIGFzIG1vZGlmaWVkIGJ5IFJGQworMTUxMC4gIEl0IHlpZWxkcyBhbiBvdXRwdXQgb2YgNCBieXRlcy4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIGhhc2gKK2FsZ29yaXRobSBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBzZW5zZS4KKworQGl0ZW0gR0NSWV9NRF9DUkMyNF9SRkMyNDQwCitUaGlzIGlzIHRoZSBPcGVuUEdQIGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIGZ1bmN0aW9uLiAgSXQgeWllbGRzIGFuCitvdXRwdXQgb2YgMyBieXRlcy4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIGhhc2ggYWxnb3JpdGhtIGluIHRoZQorY3J5cHRvZ3JhcGhpYyBzZW5zZS4KKworQGl0ZW0gR0NSWV9NRF9XSElSTFBPT0wKK1RoaXMgaXMgdGhlIFdoaXJscG9vbCBhbGdvcml0aG0gd2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgNjQKK2J5dGVzLgorCitAaXRlbSBHQ1JZX01EX0dPU1RSMzQxMV85NAorVGhpcyBpcyB0aGUgaGFzaCBhbGdvcml0aG0gZGVzY3JpYmVkIGluIEdPU1QgUiAzNC4xMS05NCB3aGljaCB5aWVsZHMgYQorbWVzc2FnZSBkaWdlc3Qgb2YgMzIgYnl0ZXMuCisKK0BpdGVtIEdDUllfTURfU1RSSUJPRzI1NgorVGhpcyBpcyB0aGUgMjU2LWJpdCB2ZXJzaW9uIG9mIGhhc2ggYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiBHT1NUIFIgMzQuMTEtMjAxMgord2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgMzIgYnl0ZXMuCisKK0BpdGVtIEdDUllfTURfU1RSSUJPRzUxMgorVGhpcyBpcyB0aGUgNTEyLWJpdCB2ZXJzaW9uIG9mIGhhc2ggYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiBHT1NUIFIgMzQuMTEtMjAxMgord2hpY2ggeWllbGRzIGEgbWVzc2FnZSBkaWdlc3Qgb2YgNjQgYnl0ZXMuCisKK0BlbmQgdGFibGUKK0BjIGVuZCB0YWJsZSBvZiBoYXNoIGFsZ29yaXRobXMKKworQG5vZGUgV29ya2luZyB3aXRoIGhhc2ggYWxnb3JpdGhtcworQHNlY3Rpb24gV29ya2luZyB3aXRoIGhhc2ggYWxnb3JpdGhtcworCitUbyB1c2UgbW9zdCBvZiB0aGVzZSBmdW5jdGlvbiBpdCBpcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgY29udGV4dDsKK3RoaXMgaXMgZG9uZSB1c2luZzoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbWRfb3BlbiAoZ2NyeV9tZF9oZF90ICpAdmFye2hkfSwgaW50IEB2YXJ7YWxnb30sIHVuc2lnbmVkIGludCBAdmFye2ZsYWdzfSkKKworQ3JlYXRlIGEgbWVzc2FnZSBkaWdlc3Qgb2JqZWN0IGZvciBhbGdvcml0aG0gQHZhcnthbGdvfS4gIEB2YXJ7ZmxhZ3N9CittYXkgYmUgZ2l2ZW4gYXMgYW4gYml0d2lzZSBPUiBvZiBjb25zdGFudHMgZGVzY3JpYmVkIGJlbG93LiAgQHZhcnthbGdvfQorbWF5IGJlIGdpdmVuIGFzIEBjb2RlezB9IGlmIHRoZSBhbGdvcml0aG1zIHRvIHVzZSBhcmUgbGF0ZXIgc2V0IHVzaW5nCitAY29kZXtnY3J5X21kX2VuYWJsZX0uIEB2YXJ7aGR9IGlzIGd1YXJhbnRlZWQgdG8gZWl0aGVyIHJlY2VpdmUgYSB2YWxpZAoraGFuZGxlIG9yIE5VTEwuCisKK0ZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMsIHNlZSBAeHJlZntBdmFpbGFibGUgaGFzaAorYWxnb3JpdGhtc30uCisKK1RoZSBmbGFncyBhbGxvd2VkIGZvciBAdmFye21vZGV9IGFyZToKKworQGMgYmVnaW4gdGFibGUgb2YgaGFzaCBmbGFncworQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZX01EX0ZMQUdfU0VDVVJFCitBbGxvY2F0ZSBhbGwgYnVmZmVycyBhbmQgdGhlIHJlc3VsdGluZyBkaWdlc3QgaW4gInNlY3VyZSBtZW1vcnkiLiAgVXNlCit0aGlzIGlzIHRoZSBoYXNoZWQgZGF0YSBpcyBoaWdobHkgY29uZmlkZW50aWFsLgorCitAaXRlbSBHQ1JZX01EX0ZMQUdfSE1BQworQGNpbmRleCBITUFDCitUdXJuIHRoZSBhbGdvcml0aG0gaW50byBhIEhNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0uICBUaGlzCitvbmx5IHdvcmtzIGlmIGp1c3Qgb25lIGFsZ29yaXRobSBpcyBlbmFibGVkIGZvciB0aGUgaGFuZGxlLiAgTm90ZSB0aGF0Cit0aGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9tZF9zZXRrZXl9IG11c3QgYmUgdXNlZCB0byBzZXQgdGhlIE1BQyBrZXkuCitUaGUgc2l6ZSBvZiB0aGUgTUFDIGlzIGVxdWFsIHRvIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiB0aGUgdW5kZXJseWluZworaGFzaCBhbGdvcml0aG0uICBJZiB5b3Ugd2FudCBDQkMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlcyBiYXNlZCBvbgorYSBjaXBoZXIsIHNlZSBAeHJlZntXb3JraW5nIHdpdGggY2lwaGVyIGhhbmRsZXN9LgorCitAaXRlbSBHQ1JZX01EX0ZMQUdfQlVHRU1VMQorQGNpbmRleCBidWcgZW11bGF0aW9uCitWZXJzaW9ucyBvZiBMaWJnY3J5cHQgYmVmb3JlIDEuNi4wIGhhZCBhIGJ1ZyBpbiB0aGUgV2hpcmxwb29sIGNvZGUKK3doaWNoIGxlZCB0byBhIHdyb25nIHJlc3VsdCBmb3IgY2VydGFpbiBpbnB1dCBzaXplcyBhbmQgd3JpdGUKK3BhdHRlcm5zLiAgVXNpbmcgdGhpcyBmbGFnIGVtdWxhdGVzIHRoYXQgYnVnLiAgVGhpcyBtYXkgZm9yIGV4YW1wbGUgYmUKK3VzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHVzZSBXaGlybHBvb2wgYXMgcGFydCBvZiB0aGVpciBrZXkKK2dlbmVyYXRpb24uICBJdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgdG8gdXNlIHRoaXMgZmxhZyBvbmx5IGlmIHJlYWxseQorbmVlZGVkIGFuZCBpZiBwb3NzaWJsZSB0byB0aGUgZGF0YSBzaG91bGQgYmUgcmUtcHJvY2Vzc2VkIHVzaW5nIHRoZQorcmVndWxhciBXaGlybHBvb2wgYWxnb3JpdGhtLgorCitOb3RlIHRoYXQgdGhpcyBmbGFnIHdvcmtzIGZvciB0aGUgZW50aXJlIGhhc2ggY29udGV4dC4gIElmIG5lZWRlZAorYXJpc2VzIGl0IG1heSBiZSB1c2VkIHRvIGVuYWJsZSBidWcgZW11bGF0aW9uIGZvciBvdGhlciBoYXNoCithbGdvcml0aG1zLiAgVGh1cyB5b3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmbGFnIGZvciBhIG11bHRpLWFsZ29yaXRobQoraGFzaCBjb250ZXh0LgorCisKK0BlbmQgdGFibGUKK0BjIGJlZ2luIHRhYmxlIG9mIGhhc2ggZmxhZ3MKKworWW91IG1heSB1c2UgdGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfbWRfaXNfZW5hYmxlZH0gdG8gbGF0ZXIgY2hlY2sKK3doZXRoZXIgYW4gYWxnb3JpdGhtIGhhcyBiZWVuIGVuYWJsZWQuCisKK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGZ1bmN0aW9uIGdjcnlfbWRfb3BlbgorCitJZiB5b3Ugd2FudCB0byBjYWxjdWxhdGUgc2V2ZXJhbCBoYXNoIGFsZ29yaXRobXMgYXQgdGhlIHNhbWUgdGltZSwgeW91CitoYXZlIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHJpZ2h0IGFmdGVyIHRoZSBAY29kZXtnY3J5X21kX29wZW59OgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tZF9lbmFibGUgKGdjcnlfbWRfaGRfdCBAdmFye2h9LCBpbnQgQHZhcnthbGdvfSkKKworQWRkIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gQHZhcnthbGdvfSB0byB0aGUgZGlnZXN0IG9iamVjdAorZGVzY3JpYmVkIGJ5IGhhbmRsZSBAdmFye2h9LiAgRHVwbGljYXRlZCBlbmFibGluZyBvZiBhbGdvcml0aG1zIGlzCitkZXRlY3RlZCBhbmQgaWdub3JlZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitJZiB0aGUgZmxhZyBAY29kZXtHQ1JZX01EX0ZMQUdfSE1BQ30gd2FzIHVzZWQsIHRoZSBrZXkgZm9yIHRoZSBNQUMgbXVzdAorYmUgc2V0IHVzaW5nIHRoZSBmdW5jdGlvbjoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbWRfc2V0a2V5IChnY3J5X21kX2hkX3QgQHZhcntofSwgY29uc3Qgdm9pZCAqQHZhcntrZXl9LCBzaXplX3QgQHZhcntrZXlsZW59KQorCitGb3IgdXNlIHdpdGggdGhlIEhNQUMgZmVhdHVyZSwgc2V0IHRoZSBNQUMga2V5IHRvIHRoZSB2YWx1ZSBvZgorQHZhcntrZXl9IG9mIGxlbmd0aCBAdmFye2tleWxlbn0gYnl0ZXMuICBUaGVyZSBpcyBubyByZXN0cmljdGlvbiBvbgordGhlIGxlbmd0aCBvZiB0aGUga2V5LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQWZ0ZXIgeW91IGFyZSBkb25lIHdpdGggdGhlIGhhc2ggY2FsY3VsYXRpb24sIHlvdSBzaG91bGQgcmVsZWFzZSB0aGUKK3Jlc291cmNlcyBieSB1c2luZzoKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21kX2Nsb3NlIChnY3J5X21kX2hkX3QgQHZhcntofSkKKworUmVsZWFzZSBhbGwgcmVzb3VyY2VzIG9mIGhhc2ggY29udGV4dCBAdmFye2h9LiAgQHZhcntofSBzaG91bGQgbm90IGJlCit1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgQSBAY29kZXtOVUxMfSBwYXNzZWQgYXMgQHZhcntofSBpcworaWdub3JlZC4gIFRoZSBmdW5jdGlvbiBhbHNvIHplcm9pc2VzIGFsbCBzZW5zaXRpdmUgaW5mb3JtYXRpb24KK2Fzc29jaWF0ZWQgd2l0aCB0aGlzIGhhbmRsZS4KKworCitAZW5kIGRlZnR5cGVmdW4KKworT2Z0ZW4geW91IGhhdmUgdG8gZG8gc2V2ZXJhbCBoYXNoIG9wZXJhdGlvbnMgdXNpbmcgdGhlIHNhbWUgYWxnb3JpdGhtLgorVG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgY29udGV4dCwgYSByZXNldCBmdW5jdGlvbgoraXMgcHJvdmlkZWQ6CisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tZF9yZXNldCAoZ2NyeV9tZF9oZF90IEB2YXJ7aH0pCisKK1Jlc2V0IHRoZSBjdXJyZW50IGNvbnRleHQgdG8gaXRzIGluaXRpYWwgc3RhdGUuICBUaGlzIGlzIGVmZmVjdGl2ZWx5CitpZGVudGljYWwgdG8gYSBjbG9zZSBmb2xsb3dlZCBieSBhbiBvcGVuIGFuZCBlbmFibGluZyBhbGwgY3VycmVudGx5CithY3RpdmUgYWxnb3JpdGhtcy4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK09mdGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBzdGFydCBoYXNoaW5nIHNvbWUgZGF0YSBhbmQgdGhlbiBjb250aW51ZSB0bworaGFzaCBkaWZmZXJlbnQgZGF0YS4gIFRvIGF2b2lkIGhhc2hpbmcgdGhlIHNhbWUgZGF0YSBzZXZlcmFsIHRpbWVzICh3aGljaAorbWlnaHQgbm90IGV2ZW4gYmUgcG9zc2libGUgaWYgdGhlIGRhdGEgaXMgcmVjZWl2ZWQgZnJvbSBhIHBpcGUpLCBhCitzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBoYXNoIGNvbnRleHQgY2FuIGJlIHRha2VuIGFuZCB0dXJuZWQgaW50byBhIG5ldworY29udGV4dDoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbWRfY29weSAoZ2NyeV9tZF9oZF90ICpAdmFye2hhbmRsZV9kc3R9LCBnY3J5X21kX2hkX3QgQHZhcntoYW5kbGVfc3JjfSkKKworQ3JlYXRlIGEgbmV3IGRpZ2VzdCBvYmplY3QgYXMgYW4gZXhhY3QgY29weSBvZiB0aGUgb2JqZWN0IGRlc2NyaWJlZCBieQoraGFuZGxlIEB2YXJ7aGFuZGxlX3NyY30gYW5kIHN0b3JlIGl0IGluIEB2YXJ7aGFuZGxlX2RzdH0uICBUaGUgY29udGV4dAoraXMgbm90IHJlc2V0IGFuZCB5b3UgY2FuIGNvbnRpbnVlIHRvIGhhc2ggZGF0YSB1c2luZyB0aGlzIGNvbnRleHQgYW5kCitpbmRlcGVuZGVudGx5IHVzaW5nIHRoZSBvcmlnaW5hbCBjb250ZXh0LgorQGVuZCBkZWZ0eXBlZnVuCisKKworTm93IHRoYXQgd2UgaGF2ZSBwcmVwYXJlZCBldmVyeXRoaW5nIHRvIGNhbGN1bGF0ZSBoYXNoZXMsIGl0IGlzIHRpbWUgdG8KK3NlZSBob3cgaXQgaXMgYWN0dWFsbHkgZG9uZS4gIFRoZXJlIGFyZSB0d28gd2F5cyBmb3IgdGhpcywgb25lIHRvCit1cGRhdGUgdGhlIGhhc2ggd2l0aCBhIGJsb2NrIG9mIG1lbW9yeSBhbmQgb25lIG1hY3JvIHRvIHVwZGF0ZSB0aGUgaGFzaAorYnkganVzdCBvbmUgY2hhcmFjdGVyLiAgQm90aCBtZXRob2RzIGNhbiBiZSB1c2VkIG9uIHRoZSBzYW1lIGhhc2ggY29udGV4dC4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21kX3dyaXRlIChnY3J5X21kX2hkX3QgQHZhcntofSwgY29uc3Qgdm9pZCAqQHZhcntidWZmZXJ9LCBzaXplX3QgQHZhcntsZW5ndGh9KQorCitQYXNzIEB2YXJ7bGVuZ3RofSBieXRlcyBvZiB0aGUgZGF0YSBpbiBAdmFye2J1ZmZlcn0gdG8gdGhlIGRpZ2VzdCBvYmplY3QKK3dpdGggaGFuZGxlIEB2YXJ7aH0gdG8gdXBkYXRlIHRoZSBkaWdlc3QgdmFsdWVzLiBUaGlzCitmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgbGFyZ2UgYmxvY2tzIG9mIGRhdGEuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21kX3B1dGMgKGdjcnlfbWRfaGRfdCBAdmFye2h9LCBpbnQgQHZhcntjfSkKKworUGFzcyB0aGUgYnl0ZSBpbiBAdmFye2N9IHRvIHRoZSBkaWdlc3Qgb2JqZWN0IHdpdGggaGFuZGxlIEB2YXJ7aH0gdG8KK3VwZGF0ZSB0aGUgZGlnZXN0IHZhbHVlLiAgVGhpcyBpcyBhbiBlZmZpY2llbnQgZnVuY3Rpb24sIGltcGxlbWVudGVkIGFzCithIG1hY3JvIHRvIGJ1ZmZlciB0aGUgZGF0YSBiZWZvcmUgYW4gYWN0dWFsIHVwZGF0ZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitUaGUgc2VtYW50aWNzIG9mIHRoZSBoYXNoIGZ1bmN0aW9ucyBkbyBub3QgcHJvdmlkZSBmb3IgcmVhZGluZyBvdXQgaW50ZXJtZWRpYXRlCittZXNzYWdlIGRpZ2VzdHMgYmVjYXVzZSB0aGUgY2FsY3VsYXRpb24gbXVzdCBiZSBmaW5hbGl6ZWQgZmlyc3QuICBUaGlzCitmaW5hbGl6YXRpb24gbWF5IGZvciBleGFtcGxlIGluY2x1ZGUgdGhlIG51bWJlciBvZiBieXRlcyBoYXNoZWQgaW4gdGhlCittZXNzYWdlIGRpZ2VzdCBvciBzb21lIHBhZGRpbmcuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tZF9maW5hbCAoZ2NyeV9tZF9oZF90IEB2YXJ7aH0pCisKK0ZpbmFsaXplIHRoZSBtZXNzYWdlIGRpZ2VzdCBjYWxjdWxhdGlvbi4gIFRoaXMgaXMgbm90IHJlYWxseSBuZWVkZWQKK2JlY2F1c2UgQGNvZGV7Z2NyeV9tZF9yZWFkfSBkb2VzIHRoaXMgaW1wbGljaXRseS4gIEFmdGVyIHRoaXMgaGFzIGJlZW4KK2RvbmUgbm8gZnVydGhlciB1cGRhdGVzIChieSBtZWFucyBvZiBAY29kZXtnY3J5X21kX3dyaXRlfSBvcgorQGNvZGV7Z2NyeV9tZF9wdXRjfSBhcmUgYWxsb3dlZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbgoraGFzIGFuIGVmZmVjdC4gSXQgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNyby4KK0BlbmQgZGVmdHlwZWZ1bgorCitUaGUgd2F5IHRvIHJlYWQgb3V0IHRoZSBjYWxjdWxhdGVkIG1lc3NhZ2UgZGlnZXN0IGlzIGJ5IHVzaW5nIHRoZQorZnVuY3Rpb246CisKK0BkZWZ0eXBlZnVuIHt1bnNpZ25lZCBjaGFyICp9IGdjcnlfbWRfcmVhZCAoZ2NyeV9tZF9oZF90IEB2YXJ7aH0sIGludCBAdmFye2FsZ299KQorCitAY29kZXtnY3J5X21kX3JlYWR9IHJldHVybnMgdGhlIG1lc3NhZ2UgZGlnZXN0IGFmdGVyIGZpbmFsaXppbmcgdGhlCitjYWxjdWxhdGlvbi4gIFRoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWQgYXMgb2Z0ZW4gYXMgcmVxdWlyZWQgYnV0IGl0IHdpbGwKK2Fsd2F5cyByZXR1cm4gdGhlIHNhbWUgdmFsdWUgZm9yIG9uZSBoYW5kbGUuICBUaGUgcmV0dXJuZWQgbWVzc2FnZSBkaWdlc3QKK2lzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIG1lc3NhZ2UgY29udGV4dCBhbmQgdGhlcmVmb3JlIHZhbGlkIHVudGlsIHRoZQoraGFuZGxlIGlzIHJlbGVhc2VkIG9yIHJlc2V0ZWQgKHVzaW5nIEBjb2Rle2djcnlfbWRfY2xvc2V9IG9yCitAY29kZXtnY3J5X21kX3Jlc2V0fS4gIEB2YXJ7YWxnb30gbWF5IGJlIGdpdmVuIGFzIDAgdG8gcmV0dXJuIHRoZSBvbmx5CitlbmFibGVkIG1lc3NhZ2UgZGlnZXN0IG9yIGl0IG1heSBzcGVjaWZ5IG9uZSBvZiB0aGUgZW5hYmxlZCBhbGdvcml0aG1zLgorVGhlIGZ1bmN0aW9uIGRvZXMgcmV0dXJuIEBjb2Rle05VTEx9IGlmIHRoZSByZXF1ZXN0ZWQgYWxnb3JpdGhtIGhhcyBub3QKK2JlZW4gZW5hYmxlZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitCZWNhdXNlIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBnZXQgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGJsb2NrcyBvZgorbWVtb3J5LCB0d28gZmFzdCBjb252ZW5pZW5jZSBmdW5jdGlvbiBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIHRhc2s6CisKK0BkZWZ0eXBlZnVuIGdwZ19lcnJfY29kZV90IGdjcnlfbWRfaGFzaF9idWZmZXJzICggQAorICBAd3tpbnQgQHZhcnthbGdvfX0sIEB3e3Vuc2lnbmVkIGludCBAdmFye2ZsYWdzfX0sIEAKKyAgQHd7dm9pZCAqQHZhcntkaWdlc3R9fSwgQAorICBAd3tjb25zdCBnY3J5X2J1ZmZlcl90ICpAdmFye2lvdn19LCBAd3tpbnQgQHZhcntpb3ZjbnR9fSApCisKK0Bjb2Rle2djcnlfbWRfaGFzaF9idWZmZXJzfSBpcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhCittZXNzYWdlIGRpZ2VzdCBmcm9tIHNldmVyYWwgYnVmZmVycy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWlyZSBhCitjb250ZXh0IGFuZCBpbW1lZGlhdGVseSByZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiBvZiB0aGUgZGF0YQorZGVzY3JpYmVkIGJ5IEB2YXJ7aW92fSBhbmQgQHZhcntpb3ZjbnR9LiAgQHZhcntkaWdlc3R9IG11c3QgYmUKK2FsbG9jYXRlZCBieSB0aGUgY2FsbGVyLCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgbWVzc2FnZSBkaWdlc3QKK3lpZWxkZWQgYnkgdGhlIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtIEB2YXJ7YWxnb30uICBUaGlzIHJlcXVpcmVkIHNpemUKK21heSBiZSBvYnRhaW5lZCBieSB1c2luZyB0aGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9tZF9nZXRfYWxnb19kbGVufS4KKworQHZhcntpb3Z9IGlzIGFuIGFycmF5IG9mIGJ1ZmZlciBkZXNjcmlwdGlvbnMgd2l0aCBAdmFye2lvdmNudH0gaXRlbXMuCitUaGUgY2FsbGVyIHNob3VsZCB6ZXJvIG91dCB0aGUgc3RydWN0dXJlcyBpbiB0aGlzIGFycmF5IGFuZCBmb3IgZWFjaAorYXJyYXkgaXRlbSBzZXQgdGhlIGZpZWxkcyBAY29kZXsuZGF0YX0gdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgdG8KK2JlIGhhc2hlZCwgQGNvZGV7Lmxlbn0gdG8gbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGhhc2hlZC4gIElmIEB2YXJ7Lm9mZn0KK2lzIGFsc28gc2V0LCB0aGUgZGF0YSBpcyB0YWtlbiBzdGFydGluZyBhdCBAdmFyey5vZmZ9IGJ5dGVzIGZyb20gdGhlCitiZWdpbiBvZiB0aGUgYnVmZmVyLiAgVGhlIGZpZWxkIEBjb2Rley5zaXplfSBpcyBub3QgdXNlZC4KKworVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgdmFsdWUgZm9yIEB2YXJ7ZmxhZ3N9IGlzCitAdmFye0dDUllfTURfRkxBR19ITUFDfSB3aGljaCB0dXJucyB0aGlzIGZ1bmN0aW9uIGludG8gYSBITUFDCitmdW5jdGlvbjsgdGhlIGZpcnN0IGl0ZW0gaW4gQHZhcntpb3Z9IGlzIHRoZW4gdXNlZCBhcyB0aGUga2V5LgorCitPbiBzdWNjZXNzIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgYW5kIHN0b3JlcyB0aGUgcmVzdWx0aW5nIGhhc2ggb3IgTUFDCithdCBAdmFye2RpZ2VzdH0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21kX2hhc2hfYnVmZmVyIChpbnQgQHZhcnthbGdvfSwgdm9pZCAqQHZhcntkaWdlc3R9LCBjb25zdCB2b2lkICpAdmFye2J1ZmZlcn0sIHNpemVfdCBAdmFye2xlbmd0aH0pOworCitAY29kZXtnY3J5X21kX2hhc2hfYnVmZmVyfSBpcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIG1lc3NhZ2UKK2RpZ2VzdCBvZiBhIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWlyZSBhIGNvbnRleHQgYW5kCitpbW1lZGlhdGVseSByZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiB0aGUgQHZhcntsZW5ndGh9IGJ5dGVzIGF0CitAdmFye2J1ZmZlcn0uICBAdmFye2RpZ2VzdH0gbXVzdCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlciwgbGFyZ2UKK2Vub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlIGRpZ2VzdCB5aWVsZGVkIGJ5IHRoZSB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobQorQHZhcnthbGdvfS4gIFRoaXMgcmVxdWlyZWQgc2l6ZSBtYXkgYmUgb2J0YWluZWQgYnkgdXNpbmcgdGhlIGZ1bmN0aW9uCitAY29kZXtnY3J5X21kX2dldF9hbGdvX2RsZW59LgorCitOb3RlIHRoYXQgaW4gY29udHJhc3QgdG8gQGNvZGV7Z2NyeV9tZF9oYXNoX2J1ZmZlcnN9IHRoaXMgZnVuY3Rpb24KK3dpbGwgYWJvcnQgdGhlIHByb2Nlc3MgaWYgYW4gdW5hdmFpbGFibGUgYWxnb3JpdGhtIGlzIHVzZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqIE1EIGluZm8gZnVuY3Rpb25zICoqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitIYXNoIGFsZ29yaXRobXMgYXJlIGlkZW50aWZpZWQgYnkgaW50ZXJuYWwgYWxnb3JpdGhtIG51bWJlcnMgKHNlZQorQGNvZGV7Z2NyeV9tZF9vcGVufSBmb3IgYSBsaXN0KS4gIEhvd2V2ZXIsIGluIG1vc3QgYXBwbGljYXRpb25zIHRoZXkgYXJlCit1c2VkIGJ5IG5hbWVzLCBzbyB0d28gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gbWFwIGJldHdlZW4gc3RyaW5nCityZXByZXNlbnRhdGlvbnMgYW5kIGhhc2ggYWxnb3JpdGhtIGlkZW50aWZpZXJzLgorCitAZGVmdHlwZWZ1biB7Y29uc3QgY2hhciAqfSBnY3J5X21kX2FsZ29fbmFtZSAoaW50IEB2YXJ7YWxnb30pCisKK01hcCB0aGUgZGlnZXN0IGFsZ29yaXRobSBpZCBAdmFye2FsZ299IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorYWxnb3JpdGhtIG5hbWUuICBGb3IgdW5rbm93biBhbGdvcml0aG1zIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKK3N0cmluZyBAY29kZXsiPyJ9LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8gdGVzdCBmb3IgdGhlCithdmFpbGFiaWxpdHkgb2YgYW4gYWxnb3JpdGhtLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21kX21hcF9uYW1lIChjb25zdCBjaGFyICpAdmFye25hbWV9KQorCitNYXAgdGhlIGFsZ29yaXRobSB3aXRoIEB2YXJ7bmFtZX0gdG8gYSBkaWdlc3QgYWxnb3JpdGhtIGlkZW50aWZpZXIuCitSZXR1cm5zIDAgaWYgdGhlIGFsZ29yaXRobSBuYW1lIGlzIG5vdCBrbm93bi4gIE5hbWVzIHJlcHJlc2VudGluZworQGFjcm9ueW17QVNOLjF9IG9iamVjdCBpZGVudGlmaWVycyBhcmUgcmVjb2duaXplZCBpZiB0aGUgQGFjcm9ueW17SUVURn0KK2RvdHRlZCBmb3JtYXQgaXMgdXNlZCBhbmQgdGhlIE9JRCBpcyBwcmVmaXhlZCB3aXRoIGVpdGhlciAiQGNvZGV7b2lkLn0iCitvciAiQGNvZGV7T0lELn0iLiAgRm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgT0lEcywgc2VlIHRoZSBzb3VyY2UgY29kZSBhdAorQGZpbGV7Y2lwaGVyL21kLmN9LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB0byB0ZXN0IGZvciB0aGUKK2F2YWlsYWJpbGl0eSBvZiBhbiBhbGdvcml0aG0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbWRfZ2V0X2Fzbm9pZCAoaW50IEB2YXJ7YWxnb30sIHZvaWQgKkB2YXJ7YnVmZmVyfSwgc2l6ZV90ICpAdmFye2xlbmd0aH0pCisKK1JldHVybiBhbiBERVIgZW5jb2RlZCBBU04uMSBPSUQgZm9yIHRoZSBhbGdvcml0aG0gQHZhcnthbGdvfSBpbiB0aGUKK3VzZXIgYWxsb2NhdGVkIEB2YXJ7YnVmZmVyfS4gQHZhcntsZW5ndGh9IG11c3QgcG9pbnQgdG8gdmFyaWFibGUgd2l0aAordGhlIGF2YWlsYWJsZSBzaXplIG9mIEB2YXJ7YnVmZmVyfSBhbmQgcmVjZWl2ZXMgYWZ0ZXIgcmV0dXJuIHRoZQorYWN0dWFsIHNpemUgb2YgdGhlIHJldHVybmVkIE9JRC4gIFRoZSByZXR1cm5lZCBlcnJvciBjb2RlIG1heSBiZQorQGNvZGV7R1BHX0VSUl9UT09fU0hPUlR9IGlmIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgdG8gc2hvcnQgdG8gcmVjZWl2ZQordGhlIE9JRDsgaXQgaXMgcG9zc2libGUgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBAY29kZXtOVUxMfSBmb3IKK0B2YXJ7YnVmZmVyfSB0byBoYXZlIGl0IG9ubHkgcmV0dXJuIHRoZSByZXF1aXJlZCBzaXplLiAgVGhlIGZ1bmN0aW9uCityZXR1cm5zIDAgb24gc3VjY2Vzcy4KKworQGVuZCBkZWZ0eXBlZnVuCisKKworVG8gdGVzdCB3aGV0aGVyIGFuIGFsZ29yaXRobSBpcyBhY3R1YWxseSBhdmFpbGFibGUgZm9yIHVzZSwgdGhlCitmb2xsb3dpbmcgbWFjcm8gc2hvdWxkIGJlIHVzZWQ6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X21kX3Rlc3RfYWxnbyAoaW50IEB2YXJ7YWxnb30pCisKK1RoZSBtYWNybyByZXR1cm5zIDAgaWYgdGhlIGFsZ29yaXRobSBAdmFye2FsZ299IGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0lmIHRoZSBsZW5ndGggb2YgYSBtZXNzYWdlIGRpZ2VzdCBpcyBub3Qga25vd24sIGl0IGNhbiBiZSByZXRyaWV2ZWQKK3VzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK0BkZWZ0eXBlZnVuIHt1bnNpZ25lZCBpbnR9IGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiAoaW50IEB2YXJ7YWxnb30pCisKK1JldHJpZXZlIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRpZ2VzdCB5aWVsZGVkIGJ5IGFsZ29yaXRobQorQHZhcnthbGdvfS4gIFRoaXMgaXMgb2Z0ZW4gdXNlZCBwcmlvciB0byBAY29kZXtnY3J5X21kX3JlYWR9IHRvIGFsbG9jYXRlCitzdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGRpZ2VzdC4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0luIHNvbWUgc2l0dWF0aW9ucyBpdCBtaWdodCBiZSBoYXJkIHRvIHJlbWVtYmVyIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IKK3RoZSBvbmdvaW5nIGhhc2hpbmcuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbWlnaHQgYmUgdXNlZCB0byBnZXQgdGhhdAoraW5mb3JtYXRpb246CisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21kX2dldF9hbGdvIChnY3J5X21kX2hkX3QgQHZhcntofSkKKworUmV0cmlldmUgdGhlIGFsZ29yaXRobSB1c2VkIHdpdGggdGhlIGhhbmRsZSBAdmFye2h9LiAgTm90ZSB0aGF0IHRoaXMKK2RvZXMgbm90IHdvcmsgcmVsaWFibGUgaWYgbW9yZSB0aGFuIG9uZSBhbGdvcml0aG0gaXMgZW5hYmxlZCBpbiBAdmFye2h9LgorQGVuZCBkZWZ0eXBlZnVuCisKK1RoZSBmb2xsb3dpbmcgbWFjcm8gbWlnaHQgYWxzbyBiZSB1c2VmdWw6CisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21kX2lzX3NlY3VyZSAoZ2NyeV9tZF9oZF90IEB2YXJ7aH0pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gdGhlIGRpZ2VzdCBvYmplY3QgQHZhcntofSBpcyBhbGxvY2F0ZWQKK2luICJzZWN1cmUgbWVtb3J5IjsgaS5lLiBAdmFye2h9IHdhcyBjcmVhdGVkIHdpdGggdGhlCitAY29kZXtHQ1JZX01EX0ZMQUdfU0VDVVJFfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tZF9pc19lbmFibGVkIChnY3J5X21kX2hkX3QgQHZhcntofSwgaW50IEB2YXJ7YWxnb30pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gdGhlIGFsZ29yaXRobSBAdmFye2FsZ299IGhhcyBiZWVuCitlbmFibGVkIGZvciB0aGUgZGlnZXN0IG9iamVjdCBAdmFye2h9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworCitUcmFja2luZyBidWdzIHJlbGF0ZWQgdG8gaGFzaGluZyBpcyBvZnRlbiBhIGN1bWJlcnNvbWUgdGFzayB3aGljaAorcmVxdWlyZXMgdG8gYWRkIGEgbG90IG9mIHByaW50ZiBzdGF0ZW1lbnRzIGludG8gdGhlIGNvZGUuCitMaWJnY3J5cHQgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gYXZvaWQgdGhpcy4gIFRoZSBhY3R1YWwgZGF0YQoraGFzaGVkIGNhbiBiZSB3cml0dGVuIHRvIGZpbGVzIG9uIHJlcXVlc3QuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tZF9kZWJ1ZyAoZ2NyeV9tZF9oZF90IEB2YXJ7aH0sIGNvbnN0IGNoYXIgKkB2YXJ7c3VmZml4fSkKKworRW5hYmxlIGRlYnVnZ2luZyBmb3IgdGhlIGRpZ2VzdCBvYmplY3Qgd2l0aCBoYW5kbGUgQHZhcntofS4gIFRoaXMKK2NyZWF0ZXMgY3JlYXRlIGZpbGVzIG5hbWVkIEBmaWxle2RiZ21kLTxuPi48c3RyaW5nPn0gd2hpbGUgZG9pbmcgdGhlCithY3R1YWwgaGFzaGluZy4gIEB2YXJ7c3VmZml4fSBpcyB0aGUgc3RyaW5nIHBhcnQgaW4gdGhlIGZpbGVuYW1lLiAgVGhlCitudW1iZXIgaXMgYSBjb3VudGVyIGluY3JlbWVudGVkIGZvciBlYWNoIG5ldyBoYXNoaW5nLiAgVGhlIGRhdGEgaW4gdGhlCitmaWxlIGlzIHRoZSByYXcgZGF0YSBhcyBwYXNzZWQgdG8gQGNvZGV7Z2NyeV9tZF93cml0ZX0gb3IKK0Bjb2Rle2djcnlfbWRfcHV0Y30uICBJZiBAY29kZXtOVUxMfSBpcyB1c2VkIGZvciBAdmFye3N1ZmZpeH0sIHRoZQorZGVidWdnaW5nIGlzIHN0b3BwZWQgYW5kIHRoZSBmaWxlIGNsb3NlZC4gIFRoaXMgaXMgb25seSByYXJlbHkgcmVxdWlyZWQKK2JlY2F1c2UgQGNvZGV7Z2NyeV9tZF9jbG9zZX0gaW1wbGljaXRseSBzdG9wcyBkZWJ1Z2dpbmcuCitAZW5kIGRlZnR5cGVmdW4KKworCisKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKiogIE1BQyBGdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Bub2RlIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMKK0BjaGFwdGVyIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMKKworTGliZ2NyeXB0IHByb3ZpZGVzIGFuIGVhc3kgYW5kIGNvbnNpc3RlbnQgdG8gdXNlIGludGVyZmFjZSBmb3IgZ2VuZXJhdGluZworTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDKS4gTUFDIGdlbmVyYXRpb24gaXMgYnVmZmVyZWQgYW5kIGludGVyZmFjZQorc2ltaWxhciB0byB0aGUgb25lIHVzZWQgd2l0aCBoYXNoIGFsZ29yaXRobXMuIFRoZSBwcm9ncmFtbWluZyBtb2RlbCBmb2xsb3dzCithbiBvcGVuL3Byb2Nlc3MvY2xvc2UgcGFyYWRpZ20gYW5kIGlzIGluIHRoYXQgc2ltaWxhciB0byBvdGhlciBidWlsZGluZyBibG9ja3MKK3Byb3ZpZGVkIGJ5IExpYmdjcnlwdC4KKworQG1lbnUKKyogQXZhaWxhYmxlIE1BQyBhbGdvcml0aG1zOjogICBMaXN0IG9mIE1BQyBhbGdvcml0aG1zIHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeS4KKyogV29ya2luZyB3aXRoIE1BQyBhbGdvcml0aG1zOjogIExpc3Qgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTUFDIGFsZ29yaXRobXMuCitAZW5kIG1lbnUKKworQG5vZGUgQXZhaWxhYmxlIE1BQyBhbGdvcml0aG1zCitAc2VjdGlvbiBBdmFpbGFibGUgTUFDIGFsZ29yaXRobXMKKworQGMgYmVnaW4gdGFibGUgb2YgTUFDIGFsZ29yaXRobXMKK0BjaW5kZXggSE1BQy1TSEEtMQorQGNpbmRleCBITUFDLVNIQS0yMjQsIEhNQUMtU0hBLTI1NiwgSE1BQy1TSEEtMzg0LCBITUFDLVNIQS01MTIKK0BjaW5kZXggSE1BQy1SSVBFLU1ELTE2MAorQGNpbmRleCBITUFDLU1EMiwgSE1BQy1NRDQsIEhNQUMtTUQ1CitAY2luZGV4IEhNQUMtVElHRVIxCitAY2luZGV4IEhNQUMtV2hpcmxwb29sCitAY2luZGV4IEhNQUMtU3RyaWJvZy0yNTYsIEhNQUMtU3RyaWJvZy01MTIKK0BjaW5kZXggSE1BQy1HT1NUUi0zNDExLTk0CitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllfTUFDX05PTkUKK1RoaXMgaXMgbm90IGEgcmVhbCBhbGdvcml0aG0gYnV0IHVzZWQgYnkgc29tZSBmdW5jdGlvbnMgYXMgYW4gZXJyb3IKK3JldHVybiB2YWx1ZS4gIFRoaXMgY29uc3RhbnQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSB2YWx1ZSBAY29kZXswfS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19TSEEyNTYKK1RoaXMgaXMga2V5ZWQtaGFzaCBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgKEhNQUMpIG1lc3NhZ2UgYXV0aGVudGljYXRpb24KK2FsZ29yaXRobSBiYXNlZCBvbiB0aGUgU0hBLTI1NiBoYXNoIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19TSEEyMjQKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgU0hBLTIyNCBoYXNoCithbGdvcml0aG0uCisKK0BpdGVtIEdDUllfTUFDX0hNQUNfU0hBNTEyCitUaGlzIGlzIEhNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIFNIQS01MTIgaGFzaAorYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19ITUFDX1NIQTM4NAorVGhpcyBpcyBITUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBTSEEtMzg0IGhhc2gKK2FsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19TSEExCitUaGlzIGlzIEhNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIFNIQS0xIGhhc2gKK2FsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19NRDUKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgTUQ1IGhhc2gKK2FsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19NRDQKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgTUQ0IGhhc2gKK2FsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfSE1BQ19STUQxNjAKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgUklQRS1NRC0xNjAgaGFzaAorYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19ITUFDX1dISVJMUE9PTAorVGhpcyBpcyBITUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBXSElSTFBPT0wgaGFzaAorYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19ITUFDX0dPU1RSMzQxMV85NAorVGhpcyBpcyBITUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBHT1NUIFIgMzQuMTEtOTQgaGFzaAorYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19ITUFDX1NUUklCT0cyNTYKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgMjU2LWJpdCBoYXNoCithbGdvcml0aG0gZGVzY3JpYmVkIGluIEdPU1QgUiAzNC4xMS0yMDEyLgorCitAaXRlbSBHQ1JZX01BQ19ITUFDX1NUUklCT0c1MTIKK1RoaXMgaXMgSE1BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgNTEyLWJpdCBoYXNoCithbGdvcml0aG0gZGVzY3JpYmVkIGluIEdPU1QgUiAzNC4xMS0yMDEyLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDX0FFUworVGhpcyBpcyBDTUFDIChDaXBoZXItYmFzZWQgTUFDKSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbgordGhlIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDXzNERVMKK1RoaXMgaXMgQ01BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgdGhyZWUta2V5IEVERQorVHJpcGxlLURFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDX0NBTUVMTElBCitUaGlzIGlzIENNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIENhbWVsbGlhIGJsb2NrIGNpcGhlcgorYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDX0NBU1Q1CitUaGlzIGlzIENNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIENBU1QxMjgtNQorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfQ01BQ19CTE9XRklTSAorVGhpcyBpcyBDTUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBCbG93ZmlzaAorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfQ01BQ19UV09GSVNICitUaGlzIGlzIENNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIFR3b2Zpc2gKK2Jsb2NrIGNpcGhlciBhbGdvcml0aG0uCisKK0BpdGVtIEdDUllfTUFDX0NNQUNfU0VSUEVOVAorVGhpcyBpcyBDTUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBTZXJwZW50CitibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDX1NFRUQKK1RoaXMgaXMgQ01BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgU0VFRAorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfQ01BQ19SRkMyMjY4CitUaGlzIGlzIENNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIFJvbidzIENpcGhlciAyCitibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19DTUFDX0lERUEKK1RoaXMgaXMgQ01BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgSURFQQorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfQ01BQ19HT1NUMjgxNDcKK1RoaXMgaXMgQ01BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgR09TVCAyODE0Ny04OQorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfR01BQ19BRVMKK1RoaXMgaXMgR01BQyAoR0NNIG1vZGUgYmFzZWQgTUFDKSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbgordGhlIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19HTUFDX0NBTUVMTElBCitUaGlzIGlzIEdNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIENhbWVsbGlhCitibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAaXRlbSBHQ1JZX01BQ19HTUFDX1RXT0ZJU0gKK1RoaXMgaXMgR01BQyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgVHdvZmlzaAorYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4KKworQGl0ZW0gR0NSWV9NQUNfR01BQ19TRVJQRU5UCitUaGlzIGlzIEdNQUMgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIFNlcnBlbnQKK2Jsb2NrIGNpcGhlciBhbGdvcml0aG0uCisKK0BpdGVtIEdDUllfTUFDX0dNQUNfU0VFRAorVGhpcyBpcyBHTUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBTRUVECitibG9jayBjaXBoZXIgYWxnb3JpdGhtLgorCitAZW5kIHRhYmxlCitAYyBlbmQgdGFibGUgb2YgTUFDIGFsZ29yaXRobXMKKworQG5vZGUgV29ya2luZyB3aXRoIE1BQyBhbGdvcml0aG1zCitAc2VjdGlvbiBXb3JraW5nIHdpdGggTUFDIGFsZ29yaXRobXMKKworVG8gdXNlIG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb24gaXQgaXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvbnRleHQ7Cit0aGlzIGlzIGRvbmUgdXNpbmc6CisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X21hY19vcGVuIChnY3J5X21hY19oZF90ICpAdmFye2hkfSwgaW50IEB2YXJ7YWxnb30sIHVuc2lnbmVkIGludCBAdmFye2ZsYWdzfSwgZ2NyeV9jdHhfdCBAdmFye2N0eH0pCisKK0NyZWF0ZSBhIE1BQyBvYmplY3QgZm9yIGFsZ29yaXRobSBAdmFye2FsZ299LiBAdmFye2ZsYWdzfSBtYXkgYmUgZ2l2ZW4gYXMgYW4KK2JpdHdpc2UgT1Igb2YgY29uc3RhbnRzIGRlc2NyaWJlZCBiZWxvdy4gQHZhcntoZH0gaXMgZ3VhcmFudGVlZCB0byBlaXRoZXIKK3JlY2VpdmUgYSB2YWxpZCBoYW5kbGUgb3IgTlVMTC4gQHZhcntjdHh9IGlzIGNvbnRleHQgb2JqZWN0IHRvIGFzc29jaWF0ZSBNQUMKK29iamVjdCB3aXRoLiBAdmFye2N0eH0gbWF5YmUgc2V0IHRvIE5VTEwuCisKK0ZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMsIHNlZSBAeHJlZntBdmFpbGFibGUgTUFDIGFsZ29yaXRobXN9LgorCitUaGUgZmxhZ3MgYWxsb3dlZCBmb3IgQHZhcnttb2RlfSBhcmU6CisKK0BjIGJlZ2luIHRhYmxlIG9mIE1BQyBmbGFncworQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZX01BQ19GTEFHX1NFQ1VSRQorQWxsb2NhdGUgYWxsIGJ1ZmZlcnMgYW5kIHRoZSByZXN1bHRpbmcgTUFDIGluICJzZWN1cmUgbWVtb3J5Ii4gIFVzZSB0aGlzIGlmIHRoZQorTUFDIGRhdGEgaXMgaGlnaGx5IGNvbmZpZGVudGlhbC4KKworQGVuZCB0YWJsZQorQGMgYmVnaW4gdGFibGUgb2YgTUFDIGZsYWdzCisKK0BlbmQgZGVmdHlwZWZ1bgorQGMgZW5kIGZ1bmN0aW9uIGdjcnlfbWFjX29wZW4KKworCitJbiBvcmRlciB0byB1c2UgYSBoYW5kbGUgZm9yIHBlcmZvcm1pbmcgTUFDIGFsZ29yaXRobSBvcGVyYXRpb25zLCBhCitga2V5JyBoYXMgdG8gYmUgc2V0IGZpcnN0OgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfc2V0a2V5IChnY3J5X21hY19oZF90IEB2YXJ7aH0sIGNvbnN0IHZvaWQgKkB2YXJ7a2V5fSwgc2l6ZV90IEB2YXJ7a2V5bGVufSkKKworU2V0IHRoZSBNQUMga2V5IHRvIHRoZSB2YWx1ZSBvZiBAdmFye2tleX0gb2YgbGVuZ3RoIEB2YXJ7a2V5bGVufSBieXRlcy4gV2l0aAorSE1BQyBhbGdvcml0aG1zLCB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkuIFdpdGggQ01BQworYWxnb3JpdGhtcywgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGlzIHJlc3RyaWN0ZWQgdG8gdGhvc2Ugc3VwcG9ydGVkIGJ5IHRoZQordW5kZXJseWluZyBibG9jayBjaXBoZXIuCitAZW5kIGRlZnR5cGVmdW4KKworCitHTUFDIGFsZ29yaXRobXMgbmVlZCBpbml0aWFsaXphdGlvbiB2ZWN0b3IgdG8gYmUgc2V0LCB3aGljaCBjYW4gYmUKK3BlcmZvcm1lZCB3aXRoIGZ1bmN0aW9uOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfc2V0aXYgKGdjcnlfbWFjX2hkX3QgQHZhcntofSwgY29uc3Qgdm9pZCAqQHZhcntpdn0sIHNpemVfdCBAdmFye2l2bGVufSkKKworU2V0IHRoZSBJViB0byB0aGUgdmFsdWUgb2YgQHZhcntpdn0gb2YgbGVuZ3RoIEB2YXJ7aXZsZW59IGJ5dGVzLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQWZ0ZXIgeW91IGFyZSBkb25lIHdpdGggdGhlIE1BQyBjYWxjdWxhdGlvbiwgeW91IHNob3VsZCByZWxlYXNlIHRoZSByZXNvdXJjZXMKK2J5IHVzaW5nOgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbWFjX2Nsb3NlIChnY3J5X21hY19oZF90IEB2YXJ7aH0pCisKK1JlbGVhc2UgYWxsIHJlc291cmNlcyBvZiBNQUMgY29udGV4dCBAdmFye2h9LiAgQHZhcntofSBzaG91bGQgbm90IGJlCit1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgQSBAY29kZXtOVUxMfSBwYXNzZWQgYXMgQHZhcntofSBpcworaWdub3JlZC4gIFRoZSBmdW5jdGlvbiBhbHNvIGNsZWFycyBhbGwgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQKK3dpdGggdGhpcyBoYW5kbGUuCitAZW5kIGRlZnR5cGVmdW4KKworCitPZnRlbiB5b3UgaGF2ZSB0byBkbyBzZXZlcmFsIE1BQyBvcGVyYXRpb25zIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobS4KK1RvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIGNvbnRleHQsIGEgcmVzZXQgZnVuY3Rpb24KK2lzIHByb3ZpZGVkOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfcmVzZXQgKGdjcnlfbWFjX2hkX3QgQHZhcntofSkKKworUmVzZXQgdGhlIGN1cnJlbnQgY29udGV4dCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gVGhpcyBpcyBlZmZlY3RpdmVseSBpZGVudGljYWwKK3RvIGEgY2xvc2UgZm9sbG93ZWQgYnkgYW4gb3BlbiBhbmQgc2V0dGluZyBzYW1lIGtleS4KKworTm90ZSB0aGF0IGdjcnlfbWFjX3Jlc2V0IGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uCitAZW5kIGRlZnR5cGVmdW4KKworCitOb3cgdGhhdCB3ZSBoYXZlIHByZXBhcmVkIGV2ZXJ5dGhpbmcgdG8gY2FsY3VsYXRlIE1BQywgaXQgaXMgdGltZSB0bworc2VlIGhvdyBpdCBpcyBhY3R1YWxseSBkb25lLgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgQHZhcntofSwgY29uc3Qgdm9pZCAqQHZhcntidWZmZXJ9LCBzaXplX3QgQHZhcntsZW5ndGh9KQorCitQYXNzIEB2YXJ7bGVuZ3RofSBieXRlcyBvZiB0aGUgZGF0YSBpbiBAdmFye2J1ZmZlcn0gdG8gdGhlIE1BQyBvYmplY3QKK3dpdGggaGFuZGxlIEB2YXJ7aH0gdG8gdXBkYXRlIHRoZSBNQUMgdmFsdWVzLgorQGVuZCBkZWZ0eXBlZnVuCisKKworVGhlIHdheSB0byByZWFkIG91dCB0aGUgY2FsY3VsYXRlZCBNQUMgaXMgYnkgdXNpbmcgdGhlIGZ1bmN0aW9uOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfcmVhZCAoZ2NyeV9tYWNfaGRfdCBAdmFye2h9LCB2b2lkICpAdmFye2J1ZmZlcn0sIHNpemVfdCAqQHZhcntsZW5ndGh9KQorCitAY29kZXtnY3J5X21hY19yZWFkfSByZXR1cm5zIHRoZSBNQUMgYWZ0ZXIgZmluYWxpemluZyB0aGUgY2FsY3VsYXRpb24uCitGdW5jdGlvbiBjb3BpZXMgdGhlIHJlc3VsdGluZyBNQUMgdmFsdWUgdG8gQHZhcntidWZmZXJ9IG9mIHRoZSBsZW5ndGgKK0B2YXJ7bGVuZ3RofS4gSWYgQHZhcntsZW5ndGh9IGlzIGxhcmdlciB0aGFuIGxlbmd0aCBvZiByZXN1bHRpbmcgTUFDIHZhbHVlLAordGhlbiBsZW5ndGggb2YgTUFDIGlzIHJldHVybmVkIHRocm91Z2ggQHZhcntsZW5ndGh9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworVG8gY29tcGFyZSBleGlzdGluZyBNQUMgdmFsdWUgd2l0aCByZWNhbGN1bGF0ZWQgTUFDLCBvbmUgaXMgdG8gdXNlIHRoZSBmdW5jdGlvbjoKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbWFjX3ZlcmlmeSAoZ2NyeV9tYWNfaGRfdCBAdmFye2h9LCB2b2lkICpAdmFye2J1ZmZlcn0sIHNpemVfdCBAdmFye2xlbmd0aH0pCisKK0Bjb2Rle2djcnlfbWFjX3ZlcmlmeX0gZmluYWxpemVzIE1BQyBjYWxjdWxhdGlvbiBhbmQgY29tcGFyZXMgcmVzdWx0IHdpdGgKK0B2YXJ7bGVuZ3RofSBieXRlcyBvZiBkYXRhIGluIEB2YXJ7YnVmZmVyfS4gRXJyb3IgY29kZSBAY29kZXtHUEdfRVJSX0NIRUNLU1VNfQoraXMgcmV0dXJuZWQgaWYgdGhlIE1BQyB2YWx1ZSBpbiB0aGUgYnVmZmVyIEB2YXJ7YnVmZmVyfSBkb2VzIG5vdCBtYXRjaAordGhlIE1BQyBjYWxjdWxhdGVkIGluIG9iamVjdCBAdmFye2h9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqIE1BQyBpbmZvIGZ1bmN0aW9ucyAqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitNQUMgYWxnb3JpdGhtcyBhcmUgaWRlbnRpZmllZCBieSBpbnRlcm5hbCBhbGdvcml0aG0gbnVtYmVycyAoc2VlCitAY29kZXtnY3J5X21hY19vcGVufSBmb3IgYSBsaXN0KS4gIEhvd2V2ZXIsIGluIG1vc3QgYXBwbGljYXRpb25zIHRoZXkgYXJlCit1c2VkIGJ5IG5hbWVzLCBzbyB0d28gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gbWFwIGJldHdlZW4gc3RyaW5nCityZXByZXNlbnRhdGlvbnMgYW5kIE1BQyBhbGdvcml0aG0gaWRlbnRpZmllcnMuCisKK0BkZWZ0eXBlZnVuIHtjb25zdCBjaGFyICp9IGdjcnlfbWFjX2FsZ29fbmFtZSAoaW50IEB2YXJ7YWxnb30pCisKK01hcCB0aGUgTUFDIGFsZ29yaXRobSBpZCBAdmFye2FsZ299IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorYWxnb3JpdGhtIG5hbWUuICBGb3IgdW5rbm93biBhbGdvcml0aG1zIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKK3N0cmluZyBAY29kZXsiPyJ9LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8gdGVzdCBmb3IgdGhlCithdmFpbGFiaWxpdHkgb2YgYW4gYWxnb3JpdGhtLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21hY19tYXBfbmFtZSAoY29uc3QgY2hhciAqQHZhcntuYW1lfSkKKworTWFwIHRoZSBhbGdvcml0aG0gd2l0aCBAdmFye25hbWV9IHRvIGEgTUFDIGFsZ29yaXRobSBpZGVudGlmaWVyLgorUmV0dXJucyAwIGlmIHRoZSBhbGdvcml0aG0gbmFtZSBpcyBub3Qga25vd24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdAorYmUgdXNlZCB0byB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIGFsZ29yaXRobS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK1RvIHRlc3Qgd2hldGhlciBhbiBhbGdvcml0aG0gaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGZvciB1c2UsIHRoZQorZm9sbG93aW5nIG1hY3JvIHNob3VsZCBiZSB1c2VkOgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfdGVzdF9hbGdvIChpbnQgQHZhcnthbGdvfSkKKworVGhlIG1hY3JvIHJldHVybnMgMCBpZiB0aGUgTUFDIGFsZ29yaXRobSBAdmFye2FsZ299IGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorQGVuZCBkZWZ0eXBlZnVuCisKKworSWYgdGhlIGxlbmd0aCBvZiBhIG1lc3NhZ2UgZGlnZXN0IGlzIG5vdCBrbm93biwgaXQgY2FuIGJlIHJldHJpZXZlZAordXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworQGRlZnR5cGVmdW4ge3Vuc2lnbmVkIGludH0gZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuIChpbnQgQHZhcnthbGdvfSkKKworUmV0cmlldmUgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgTUFDIHlpZWxkZWQgYnkgYWxnb3JpdGhtIEB2YXJ7YWxnb30uCitUaGlzIGlzIG9mdGVuIHVzZWQgcHJpb3IgdG8gQGNvZGV7Z2NyeV9tYWNfcmVhZH0gdG8gYWxsb2NhdGUgc3VmZmljaWVudCBtZW1vcnkKK2ZvciB0aGUgTUFDIHZhbHVlLiBPbiBlcnJvciBAY29kZXswfSBpcyByZXR1cm5lZC4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BkZWZ0eXBlZnVuIHt1bnNpZ25lZCBpbnR9IGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbiAoQHZhcnthbGdvfSkKKworVGhpcyBmdW5jdGlvbiByZXR1cm5zIGxlbmd0aCBvZiB0aGUga2V5IGZvciBNQUMgYWxnb3JpdGhtIEB2YXJ7YWxnb30uICBJZgordGhlIGFsZ29yaXRobSBzdXBwb3J0cyBtdWx0aXBsZSBrZXkgbGVuZ3RocywgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGtleQorbGVuZ3RoIGlzIHJldHVybmVkLiAgT24gZXJyb3IgQGNvZGV7MH0gaXMgcmV0dXJuZWQuICBUaGUga2V5IGxlbmd0aCBpcworcmV0dXJuZWQgYXMgbnVtYmVyIG9mIG9jdGV0cy4KK0BlbmQgZGVmdHlwZWZ1bgorCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgS0RGICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgS2V5IERlcml2YXRpb24KK0BjaGFwdGVyIEtleSBEZXJpdmF0aW9uCisKK0BhY3Jvbnlte0xpYmdjeXB0fSBwcm92aWRlcyBhIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbiB0byBkZXJpdmUga2V5cworZnJvbSBzdHJpbmdzLgorCitAZGVmdHlwZWZ1biBncGdfZXJyb3JfdCBnY3J5X2tkZl9kZXJpdmUgKCBACisgICAgICAgICAgICBAd3tjb25zdCB2b2lkICpAdmFye3Bhc3NwaHJhc2V9fSwgQHd7c2l6ZV90IEB2YXJ7cGFzc3BocmFzZWxlbn19LCBACisgICAgICAgICAgICBAd3tpbnQgQHZhcnthbGdvfX0sIEB3e2ludCBAdmFye3N1YmFsZ299fSwgQAorICAgICAgICAgICAgQHd7Y29uc3Qgdm9pZCAqQHZhcntzYWx0fX0sIEB3e3NpemVfdCBAdmFye3NhbHRsZW59fSwgQAorICAgICAgICAgICAgQHd7dW5zaWduZWQgbG9uZyBAdmFye2l0ZXJhdGlvbnN9fSwgQAorICAgICAgICAgICAgQHd7c2l6ZV90IEB2YXJ7a2V5c2l6ZX19LCBAd3t2b2lkICpAdmFye2tleWJ1ZmZlcn19ICkKKworCitEZXJpdmUgYSBrZXkgZnJvbSBhIHBhc3NwaHJhc2UuICBAdmFye2tleXNpemV9IGdpdmVzIHRoZSByZXF1ZXN0ZWQKK3NpemUgb2YgdGhlIGtleXMgaW4gb2N0ZXRzLiAgQHZhcntrZXlidWZmZXJ9IGlzIGEgY2FsbGVyIHByb3ZpZGVkCitidWZmZXIgZmlsbGVkIG9uIHN1Y2Nlc3Mgd2l0aCB0aGUgZGVyaXZlZCBrZXkuICBUaGUgaW5wdXQgcGFzc3BocmFzZQoraXMgdGFrZW4gZnJvbSBAdmFye3Bhc3NwaHJhc2V9IHdoaWNoIGlzIGFuIGFyYml0cmFyeSBtZW1vcnkgYnVmZmVyIG9mCitAdmFye3Bhc3NwaHJhc2VsZW59IG9jdGV0cy4gIEB2YXJ7YWxnb30gc3BlY2lmaWVzIHRoZSBLREYgYWxnb3JpdGhtIHRvCit1c2U7IHNlZSBiZWxvdy4gIEB2YXJ7c3ViYWxnb30gc3BlY2lmaWVzIGFuIGFsZ29yaXRobSB1c2VkIGludGVybmFsbHkKK2J5IHRoZSBLREYgYWxnb3JpdGhtczsgdGhpcyBpcyB1c3VhbGx5IGEgaGFzaCBhbGdvcml0aG0gYnV0IGNlcnRhaW4KK0tERiBhbGdvcml0aG1zIG1heSB1c2UgaXQgZGlmZmVyZW50bHkuICBAdmFye3NhbHR9IGlzIGEgc2FsdCBvZiBsZW5ndGgKK0B2YXJ7c2FsdGxlbn0gb2N0ZXRzLCBhcyBuZWVkZWQgYnkgbW9zdCBLREYgYWxnb3JpdGhtcy4KK0B2YXJ7aXRlcmF0aW9uc30gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIHBhcmFtZXRlciB0byBtb3N0IEtERnMuCisKK0Bub2luZGVudAorT24gc3VjY2VzcyAwIGlzIHJldHVybmVkOyBvbiBmYWlsdXJlIGFuIGVycm9yIGNvZGUuCisKK0Bub2luZGVudAorQ3VycmVudGx5IHN1cHBvcnRlZCBLREZzIChwYXJhbWV0ZXIgQHZhcnthbGdvfSk6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gR0NSWV9LREZfU0lNUExFX1MySworVGhlIE9wZW5QR1Agc2ltcGxlIFMySyBhbGdvcml0aG0gKGNmLiBSRkM0ODgwKS4gIEl0cyB1c2UgaXMgc3Ryb25nbHkKK2RlcHJlY2F0ZWQuICBAdmFye3NhbHR9IGFuZCBAdmFye2l0ZXJhdGlvbnN9IGFyZSBub3QgbmVlZGVkIGFuZCBtYXkgYmUKK3Bhc3NlZCBhcyBAY29kZXtOVUxMfS9AY29kZXswfS4KKworQGl0ZW0gR0NSWV9LREZfU0FMVEVEX1MySworVGhlIE9wZW5QR1Agc2FsdGVkIFMySyBhbGdvcml0aG0gKGNmLiBSRkM0ODgwKS4gIFVzdWFsbHkgbm90IHVzZWQuCitAdmFye2l0ZXJhdGlvbnN9IGlzIG5vdCBuZWVkZWQgYW5kIG1heSBiZSBwYXNzZWQgYXMgQGNvZGV7MH0uICBAdmFye3NhbHRsZW59CittdXN0IGJlIGdpdmVuIGFzIDguCisKK0BpdGVtIEdDUllfS0RGX0lURVJTQUxURURfUzJLCitUaGUgT3BlblBHUCBpdGVyYXRlZCtzYWx0ZWQgUzJLIGFsZ29yaXRobSAoY2YuIFJGQzQ4ODApLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQgZm9yIG1vc3QgT3BlblBHUCBhcHBsaWNhdGlvbnMuICBAdmFye3NhbHRsZW59IG11c3QgYmUgZ2l2ZW4gYXMKKzguICBOb3RlIHRoYXQgT3BlblBHUCBkZWZpbmVzIGEgc3BlY2lhbCBlbmNvZGluZyBvZiB0aGUKK0B2YXJ7aXRlcmF0aW9uc307IGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgcGxhaW4gZGVjb2RlZAoraXRlcmF0aW9uIGNvdW50LgorCitAaXRlbSBHQ1JZX0tERl9QQktERjIKK1RoZSBQS0NTIzUgUGFzc3BocmFzZSBCYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiBudW1iZXIgMi4KKworQGl0ZW0gR0NSWV9LREZfU0NSWVBUCitUaGUgU0NSWVBUIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uLiAgVGhlIHN1YmFsZ29yaXRobSBpcyB1c2VkIHRvIHNwZWNpZnkKK3RoZSBDUFUvbWVtb3J5IGNvc3QgcGFyYW1ldGVyIE4sIGFuZCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2lzIHVzZWQgZm9yIHRoZSBwYXJhbGxlbGl6YXRpb24gcGFyYW1ldGVyIHAuICBUaGUgYmxvY2sgc2l6ZSBpcyBmaXhlZAorYXQgOCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKworQGVuZCB0YWJsZQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgUmFuZG9tICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgUmFuZG9tIE51bWJlcnMKK0BjaGFwdGVyIFJhbmRvbSBOdW1iZXJzCisKK0BtZW51CisqIFF1YWxpdHkgb2YgcmFuZG9tIG51bWJlcnM6OiAgIExpYmdjcnlwdCB1c2VzIGRpZmZlcmVudCBxdWFsaXR5IGxldmVscy4KKyogUmV0cmlldmluZyByYW5kb20gbnVtYmVyczo6ICAgSG93IHRvIHJldHJpZXZlIHJhbmRvbSBudW1iZXJzLgorQGVuZCBtZW51CisKK0Bub2RlIFF1YWxpdHkgb2YgcmFuZG9tIG51bWJlcnMKK0BzZWN0aW9uIFF1YWxpdHkgb2YgcmFuZG9tIG51bWJlcnMKKworQGFjcm9ueW17TGliZ2N5cHR9IG9mZmVycyByYW5kb20gbnVtYmVycyBvZiBkaWZmZXJlbnQgcXVhbGl0eSBsZXZlbHM6CisKK0BkZWZ0cCB7RGF0YSB0eXBlfSBnY3J5X3JhbmRvbV9sZXZlbF90CitUaGUgY29uc3RhbnRzIGZvciB0aGUgcmFuZG9tIHF1YWxpdHkgbGV2ZWxzIGFyZSBvZiB0aGlzIGVudW0gdHlwZS4KK0BlbmQgZGVmdHAKKworQHRhYmxlIEBjb2RlCitAaXRlbSBHQ1JZX1dFQUtfUkFORE9NCitGb3IgYWxsIGZ1bmN0aW9ucywgZXhjZXB0IGZvciBAY29kZXtnY3J5X21waV9yYW5kb21pemV9LCB0aGlzIGxldmVsIG1hcHMKK3RvIEdDUllfU1RST05HX1JBTkRPTS4gIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzLCBjb25zaWRlciB1c2luZworQGNvZGV7Z2NyeV9jcmVhdGVfbm9uY2V9LgorQGl0ZW0gR0NSWV9TVFJPTkdfUkFORE9NCitVc2UgdGhpcyBsZXZlbCBmb3Igc2Vzc2lvbiBrZXlzIGFuZCBzaW1pbGFyIHB1cnBvc2VzLgorQGl0ZW0gR0NSWV9WRVJZX1NUUk9OR19SQU5ET00KK1VzZSB0aGlzIGxldmVsIGZvciBsb25nIHRlcm0ga2V5IG1hdGVyaWFsLgorQGVuZCB0YWJsZQorCitAbm9kZSBSZXRyaWV2aW5nIHJhbmRvbSBudW1iZXJzCitAc2VjdGlvbiBSZXRyaWV2aW5nIHJhbmRvbSBudW1iZXJzCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9yYW5kb21pemUgKHVuc2lnbmVkIGNoYXIgKkB2YXJ7YnVmZmVyfSwgc2l6ZV90IEB2YXJ7bGVuZ3RofSwgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBAdmFye2xldmVsfSkKKworRmlsbCBAdmFye2J1ZmZlcn0gd2l0aCBAdmFye2xlbmd0aH0gcmFuZG9tIGJ5dGVzIHVzaW5nIGEgcmFuZG9tIHF1YWxpdHkKK2FzIGRlZmluZWQgYnkgQHZhcntsZXZlbH0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4ge3ZvaWQgKn0gZ2NyeV9yYW5kb21fYnl0ZXMgKHNpemVfdCBAdmFye25ieXRlc30sIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgQHZhcntsZXZlbH0pCisKK0NvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGNvbnNpc3Rpbmcgb2YKK0B2YXJ7bmJ5dGVzfSBmcmVzaCByYW5kb20gYnl0ZXMgdXNpbmcgYSByYW5kb20gcXVhbGl0eSBhcyBkZWZpbmVkIGJ5CitAdmFye2xldmVsfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7dm9pZCAqfSBnY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUgKHNpemVfdCBAdmFye25ieXRlc30sIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgQHZhcntsZXZlbH0pCisKK0NvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGNvbnNpc3Rpbmcgb2YKK0B2YXJ7bmJ5dGVzfSBmcmVzaCByYW5kb20gYnl0ZXMgdXNpbmcgYSByYW5kb20gcXVhbGl0eSBhcyBkZWZpbmVkIGJ5CitAdmFye2xldmVsfS4gIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIEBjb2Rle2djcnlfcmFuZG9tX2J5dGVzfSBpbgordGhhdCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIGFsbG9jYXRlZCBpbiBhIGBgc2VjdXJlJycgYXJlYSBvZiB0aGUKK21lbW9yeS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfY3JlYXRlX25vbmNlICh1bnNpZ25lZCBjaGFyICpAdmFye2J1ZmZlcn0sIHNpemVfdCBAdmFye2xlbmd0aH0pCisKK0ZpbGwgQHZhcntidWZmZXJ9IHdpdGggQHZhcntsZW5ndGh9IHVucHJlZGljdGFibGUgYnl0ZXMuICBUaGlzIGlzCitjb21tb25seSBjYWxsZWQgYSBub25jZSBhbmQgbWF5IGFsc28gYmUgdXNlZCBmb3IgaW5pdGlhbGl6YXRpb24KK3ZlY3RvcnMgYW5kIHBhZGRpbmcuICBUaGlzIGlzIGFuIGV4dHJhIGZ1bmN0aW9uIG5lYXJseSBpbmRlcGVuZGVudCBvZgordGhlIG90aGVyIHJhbmRvbSBmdW5jdGlvbiBmb3IgMyByZWFzb25zOiBJdCBiZXR0ZXIgcHJvdGVjdHMgdGhlCityZWd1bGFyIHJhbmRvbSBnZW5lcmF0b3IncyBpbnRlcm5hbCBzdGF0ZSwgcHJvdmlkZXMgYmV0dGVyIHBlcmZvcm1hbmNlCithbmQgZG9lcyBub3QgZHJhaW4gdGhlIHByZWNpb3VzIGVudHJvcHkgcG9vbC4KKworQGVuZCBkZWZ0eXBlZnVuCisKKworCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqICBTLUV4cHJlc3Npb25zICoqKioqKioqKioqKioqKioqKioqKioqCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAbm9kZSBTLWV4cHJlc3Npb25zCitAY2hhcHRlciBTLWV4cHJlc3Npb25zCisKK1MtZXhwcmVzc2lvbnMgYXJlIHVzZWQgYnkgdGhlIHB1YmxpYyBrZXkgZnVuY3Rpb25zIHRvIHBhc3MgY29tcGxleCBkYXRhCitzdHJ1Y3R1cmVzIGFyb3VuZC4gIFRoZXNlIExJU1AgbGlrZSBvYmplY3RzIGFyZSB1c2VkIGJ5IHNvbWUKK2NyeXB0b2dyYXBoaWMgcHJvdG9jb2xzIChjZi4gUkZDLTI2OTIpIGFuZCBMaWJnY3J5cHQgcHJvdmlkZXMgZnVuY3Rpb25zCit0byBwYXJzZSBhbmQgY29uc3RydWN0IHRoZW0uICBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24sIHNlZQorQGNpdGV7Um9uIFJpdmVzdCwgY29kZSBhbmQgZGVzY3JpcHRpb24gb2YgUy1leHByZXNzaW9ucywKK0B1cmVme2h0dHA6Ly90aGVvcnkubGNzLm1pdC5lZHUvfnJpdmVzdC9zZXhwLmh0bWx9fS4KKworQG1lbnUKKyogRGF0YSB0eXBlcyBmb3IgUy1leHByZXNzaW9uczo6ICBEYXRhIHR5cGVzIHJlbGF0ZWQgd2l0aCBTLWV4cHJlc3Npb25zLgorKiBXb3JraW5nIHdpdGggUy1leHByZXNzaW9uczo6ICBIb3cgdG8gd29yayB3aXRoIFMtZXhwcmVzc2lvbnMuCitAZW5kIG1lbnUKKworQG5vZGUgRGF0YSB0eXBlcyBmb3IgUy1leHByZXNzaW9ucworQHNlY3Rpb24gRGF0YSB0eXBlcyBmb3IgUy1leHByZXNzaW9ucworCitAZGVmdHAge0RhdGEgdHlwZX0gZ2NyeV9zZXhwX3QKK1RoZSBAY29kZXtnY3J5X3NleHBfdH0gdHlwZSBkZXNjcmliZXMgYW4gb2JqZWN0IHdpdGggdGhlIExpYmdjcnlwdCBpbnRlcm5hbAorcmVwcmVzZW50YXRpb24gb2YgYW4gUy1leHByZXNzaW9uLgorQGVuZCBkZWZ0cAorCitAbm9kZSBXb3JraW5nIHdpdGggUy1leHByZXNzaW9ucworQHNlY3Rpb24gV29ya2luZyB3aXRoIFMtZXhwcmVzc2lvbnMKKworQG5vaW5kZW50CitUaGVyZSBhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuIExpYmdjcnlwdCBTLWV4cHJlc3Npb24gb2JqZWN0Citmcm9tIGl0cyBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBvciBmcm9tIGEgc3RyaW5nIHRlbXBsYXRlLiAgVGhlcmUgaXMKK2Fsc28gYSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBiYWNrIGludG8gb25lIG9mCit0aGUgZXh0ZXJuYWwgZm9ybWF0czoKKworCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9zZXhwX25ldyAoQHd7Z2NyeV9zZXhwX3QgKkB2YXJ7cl9zZXhwfX0sIEB3e2NvbnN0IHZvaWQgKkB2YXJ7YnVmZmVyfX0sIEB3e3NpemVfdCBAdmFye2xlbmd0aH19LCBAd3tpbnQgQHZhcnthdXRvZGV0ZWN0fX0pCisKK1RoaXMgaXMgdGhlIGdlbmVyaWMgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIG5ldyBTLWV4cHJlc3Npb24gb2JqZWN0IGZyb20KK2l0cyBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBpbiBAdmFye2J1ZmZlcn0gb2YgQHZhcntsZW5ndGh9IGJ5dGVzLiAgT24KK3N1Y2Nlc3MgdGhlIHJlc3VsdCBpcyBzdG9yZWQgYXQgdGhlIGFkZHJlc3MgZ2l2ZW4gYnkgQHZhcntyX3NleHB9LgorV2l0aCBAdmFye2F1dG9kZXRlY3R9IHNldCB0byAwLCB0aGUgZGF0YSBpbiBAdmFye2J1ZmZlcn0gaXMgZXhwZWN0ZWQgdG8KK2JlIGluIGNhbm9uaXplZCBmb3JtYXQsIHdpdGggQHZhcnthdXRvZGV0ZWN0fSBzZXQgdG8gMSB0aGUgcGFyc2VzIGFueSBvZgordGhlIGRlZmluZWQgZXh0ZXJuYWwgZm9ybWF0cy4gIElmIEB2YXJ7YnVmZmVyfSBkb2VzIG5vdCBob2xkIGEgdmFsaWQKK1MtZXhwcmVzc2lvbiBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGFuZCBAdmFye3Jfc2V4cH0gc2V0IHRvCitAY29kZXtOVUxMfS4KK05vdGUgdGhhdCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIG5ld2x5IGFsbG9jYXRlZAorUy1leHByZXNzaW9uIHVzaW5nIEBjb2Rle2djcnlfc2V4cF9yZWxlYXNlfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9zZXhwX2NyZWF0ZSAoQHd7Z2NyeV9zZXhwX3QgKkB2YXJ7cl9zZXhwfX0sIEB3e3ZvaWQgKkB2YXJ7YnVmZmVyfX0sIEB3e3NpemVfdCBAdmFye2xlbmd0aH19LCBAd3tpbnQgQHZhcnthdXRvZGV0ZWN0fX0sIEB3e3ZvaWQgKCpAdmFye2ZyZWVmbmN9KSh2b2lkKil9KQorCitUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBAY29kZXtnY3J5X3NleHBfbmV3fSBidXQgaGFzIGFuIGV4dHJhCithcmd1bWVudCBAdmFye2ZyZWVmbmN9LCB3aGljaCwgd2hlbiBub3Qgc2V0IHRvIEBjb2Rle05VTEx9LCBpcyBleHBlY3RlZAordG8gYmUgYSBmdW5jdGlvbiB0byByZWxlYXNlIHRoZSBAdmFye2J1ZmZlcn07IG1vc3QgbGlrZWx5IHRoZSBzdGFuZGFyZAorQGNvZGV7ZnJlZX0gZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhpcyBhcmd1bWVudC4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKK3RyYW5zZmVycmluZyB0aGUgb3duZXJzaGlwIG9mIEB2YXJ7YnVmZmVyfSB0byB0aGUgY3JlYXRlZCBvYmplY3QgaW4KK0B2YXJ7cl9zZXhwfS4gIFRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgdGhpcyBmdW5jdGlvbiBpcyB0aGF0IExpYmdjcnlwdAorbWlnaHQgZGVjaWRlIHRvIGRpcmVjdGx5IHVzZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGFuZCB0aHVzIGF2b2lkIGV4dHJhCitjb3B5aW5nLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3NleHBfc3NjYW4gKEB3e2djcnlfc2V4cF90ICpAdmFye3Jfc2V4cH19LCBAd3tzaXplX3QgKkB2YXJ7ZXJyb2ZmfX0sIEB3e2NvbnN0IGNoYXIgKkB2YXJ7YnVmZmVyfX0sIEB3e3NpemVfdCBAdmFye2xlbmd0aH19KQorCitUaGlzIGlzIGFub3RoZXIgdmFyaWFudCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zLiAgSXQgYmVoYXZlcyBuZWFybHkKK2lkZW50aWNhbCBidXQgcHJvdmlkZXMgYW4gQHZhcntlcnJvZmZ9IGFyZ3VtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUKK29mZnNldCBpbnRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIHBhcnNpbmcgc3RvcHBlZCBvbiBlcnJvci4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X2Vycm9yX3QgZ2NyeV9zZXhwX2J1aWxkIChAd3tnY3J5X3NleHBfdCAqQHZhcntyX3NleHB9fSwgQHd7c2l6ZV90ICpAdmFye2Vycm9mZn19LCBAd3tjb25zdCBjaGFyICpAdmFye2Zvcm1hdH0sIC4uLn0pCisKK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBpbnRlcm5hbCBTLWV4cHJlc3Npb24gZnJvbSB0aGUgc3RyaW5nIHRlbXBsYXRlCitAdmFye2Zvcm1hdH0gYW5kIHN0b3JlcyBpdCBhdCB0aGUgYWRkcmVzcyBvZiBAdmFye3Jfc2V4cH0uIElmIHRoZXJlIGlzIGEKK3BhcnNpbmcgZXJyb3IsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgYW5kIHN0b3JlcwordGhlIG9mZnNldCBpbnRvIEB2YXJ7Zm9ybWF0fSB3aGVyZSB0aGUgcGFyc2luZyBzdG9wcGVkIGluIEB2YXJ7ZXJyb2ZmfS4KK1RoZSBmdW5jdGlvbiBzdXBwb3J0cyBhIGNvdXBsZSBvZiBwcmludGYtbGlrZSBmb3JtYXR0aW5nIGNoYXJhY3RlcnMgYW5kCitleHBlY3RzIGFyZ3VtZW50cyBmb3Igc29tZSBvZiB0aGVzZSBlc2NhcGUgc2VxdWVuY2VzIHJpZ2h0IGFmdGVyCitAdmFye2Zvcm1hdH0uICBUaGUgZm9sbG93aW5nIGZvcm1hdCBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkOgorCitAdGFibGUgQHNhbXAKK0BpdGVtICVtCitUaGUgbmV4dCBhcmd1bWVudCBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlIEBjb2Rle2djcnlfbXBpX3R9IGFuZCBhIGNvcHkgb2YKK2l0cyB2YWx1ZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSByZXN1bHRpbmcgUy1leHByZXNzaW9uLiAgVGhlIE1QSSBpcworc3RvcmVkIGFzIGEgc2lnbmVkIGludGVnZXIuCitAaXRlbSAlTQorVGhlIG5leHQgYXJndW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBAY29kZXtnY3J5X21waV90fSBhbmQgYSBjb3B5IG9mCitpdHMgdmFsdWUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcmVzdWx0aW5nIFMtZXhwcmVzc2lvbi4gIFRoZSBNUEkgaXMKK3N0b3JlZCBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLgorQGl0ZW0gJXMKK1RoZSBuZXh0IGFyZ3VtZW50IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgQGNvZGV7Y2hhciAqfSBhbmQgdGhhdAorc3RyaW5nIGlzIGluc2VydGVkIGludG8gdGhlIHJlc3VsdGluZyBTLWV4cHJlc3Npb24uCitAaXRlbSAlZAorVGhlIG5leHQgYXJndW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBAY29kZXtpbnR9IGFuZCBpdHMgdmFsdWUgaXMKK2luc2VydGVkIGludG8gdGhlIHJlc3VsdGluZyBTLWV4cHJlc3Npb24uCitAaXRlbSAldQorVGhlIG5leHQgYXJndW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBAY29kZXt1bnNpZ25lZCBpbnR9IGFuZAoraXRzIHZhbHVlIGlzIGluc2VydGVkIGludG8gdGhlIHJlc3VsdGluZyBTLWV4cHJlc3Npb24uCitAaXRlbSAlYgorVGhlIG5leHQgYXJndW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBAY29kZXtpbnR9IGRpcmVjdGx5Citmb2xsb3dlZCBieSBhbiBhcmd1bWVudCBvZiB0eXBlIEBjb2Rle2NoYXIgKn0uICBUaGlzIHJlcHJlc2VudHMgYQorYnVmZmVyIG9mIGdpdmVuIGxlbmd0aCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSByZXN1bHRpbmcgUy1leHByZXNzaW9uLgorQGl0ZW0gJVMKK1RoZSBuZXh0IGFyZ3VtZW50IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgQGNvZGV7Z2NyeV9zZXhwX3R9IGFuZCBhCitjb3B5IG9mIHRoYXQgUy1leHByZXNzaW9uIGlzIGVtYmVkZGVkIGluIHRoZSByZXN1bHRpbmcgUy1leHByZXNzaW9uLgorVGhlIGFyZ3VtZW50IG5lZWRzIHRvIGJlIGEgcmVndWxhciBTLWV4cHJlc3Npb24sIHN0YXJ0aW5nIHdpdGggYQorcGFyZW50aGVzaXMuCisKK0BlbmQgdGFibGUKKworQG5vaW5kZW50CitObyBvdGhlciBmb3JtYXQgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBhbmQgd291bGQgcmV0dXJuIGFuIGVycm9yLiAgTm90ZQordGhhdCB0aGUgZm9ybWF0IGNoYXJhY3RlciBAc2FtcHslJX0gZG9lcyBub3QgZXhpc3RzLCBiZWNhdXNlIGEgcGVyY2VudAorc2lnbiBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIgaW4gYW4gUy1leHByZXNzaW9uLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9zZXhwX3JlbGVhc2UgKEB3e2djcnlfc2V4cF90IEB2YXJ7c2V4cH19KQorCitSZWxlYXNlIHRoZSBTLWV4cHJlc3Npb24gb2JqZWN0IEB2YXJ7c2V4cH0uICBJZiB0aGUgUy1leHByZXNzaW9uIGlzCitzdG9yZWQgaW4gc2VjdXJlIG1lbW9yeSBpdCBleHBsaWNpdGx5IHplcm9pc2VzIHRoYXQgbWVtb3J5OyBub3RlIHRoYXQKK3RoaXMgaXMgZG9uZSBpbiBhZGRpdGlvbiB0byB0aGUgemVyb2lzYXRpb24gYWx3YXlzIGRvbmUgd2hlbiBmcmVlaW5nCitzZWN1cmUgbWVtb3J5LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQG5vaW5kZW50CitUaGUgbmV4dCAyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgorYmFjayBpbnRvIGEgcmVndWxhciBleHRlcm5hbCBTLWV4cHJlc3Npb24gZm9ybWF0IGFuZCB0byBzaG93IHRoZQorc3RydWN0dXJlIGZvciBkZWJ1Z2dpbmcuCisKK0BkZWZ0eXBlZnVuIHNpemVfdCBnY3J5X3NleHBfc3ByaW50IChAd3tnY3J5X3NleHBfdCBAdmFye3NleHB9fSwgQHd7aW50IEB2YXJ7bW9kZX19LCBAd3tjaGFyICpAdmFye2J1ZmZlcn19LCBAd3tzaXplX3QgQHZhcnttYXhsZW5ndGh9fSkKKworQ29waWVzIHRoZSBTLWV4cHJlc3Npb24gb2JqZWN0IEB2YXJ7c2V4cH0gaW50byBAdmFye2J1ZmZlcn0gdXNpbmcgdGhlCitmb3JtYXQgc3BlY2lmaWVkIGluIEB2YXJ7bW9kZX0uICBAdmFye21heGxlbmd0aH0gbXVzdCBiZSBzZXQgdG8gdGhlCithbGxvY2F0ZWQgbGVuZ3RoIG9mIEB2YXJ7YnVmZmVyfS4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhY3R1YWwKK2xlbmd0aCBvZiB2YWxpZCBieXRlcyBwdXQgaW50byBAdmFye2J1ZmZlcn0gb3IgMCBpZiB0aGUgcHJvdmlkZWQgYnVmZmVyCitpcyB0b28gc2hvcnQuICBQYXNzaW5nIEBjb2Rle05VTEx9IGZvciBAdmFye2J1ZmZlcn0gcmV0dXJucyB0aGUgcmVxdWlyZWQKK2xlbmd0aCBmb3IgQHZhcntidWZmZXJ9LiAgRm9yIGNvbnZlbmllbmNlIHJlYXNvbnMgYW4gZXh0cmEgYnl0ZSB3aXRoCit2YWx1ZSAwIGlzIGFwcGVuZGVkIHRvIHRoZSBidWZmZXIuCisKK0Bub2luZGVudAorVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gR0NSWVNFWFBfRk1UX0RFRkFVTFQKK1JldHVybnMgYSBjb252ZW5pZW50IGV4dGVybmFsIFMtZXhwcmVzc2lvbiByZXByZXNlbnRhdGlvbi4KKworQGl0ZW0gR0NSWVNFWFBfRk1UX0NBTk9OCitSZXR1cm4gdGhlIFMtZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybWF0LgorCitAaXRlbSBHQ1JZU0VYUF9GTVRfQkFTRTY0CitOb3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKworQGl0ZW0gR0NSWVNFWFBfRk1UX0FEVkFOQ0VECitSZXR1cm5zIHRoZSBTLWV4cHJlc3Npb24gaW4gYWR2YW5jZWQgZm9ybWF0LgorQGVuZCB0YWJsZQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9zZXhwX2R1bXAgKEB3e2djcnlfc2V4cF90IEB2YXJ7c2V4cH19KQorCitEdW1wcyBAdmFye3NleHB9IGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBkZWJ1Z2dpbmcgdG8gTGliZ2NyeXB0J3MKK2xvZ2dpbmcgc3RyZWFtLgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2luZGVudAorT2Z0ZW4gY2Fub25pY2FsIGVuY29kaW5nIGlzIHVzZWQgaW4gdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uLiAgVGhlCitmb2xsb3dpbmcgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHZhbGlkIGVuY29kaW5nIGFuZCB0byBsZWFybgordGhlIGxlbmd0aCBvZiB0aGUgUy1leHByZXNzaW9uIgorCitAZGVmdHlwZWZ1biBzaXplX3QgZ2NyeV9zZXhwX2Nhbm9uX2xlbiAoQHd7Y29uc3QgdW5zaWduZWQgY2hhciAqQHZhcntidWZmZXJ9fSwgQHd7c2l6ZV90IEB2YXJ7bGVuZ3RofX0sIEB3e3NpemVfdCAqQHZhcntlcnJvZmZ9fSwgQHd7aW50ICpAdmFye2VycmNvZGV9fSkKKworU2NhbiB0aGUgY2Fub25pY2FsIGVuY29kZWQgQHZhcntidWZmZXJ9IHdpdGggaW1wbGljaXQgbGVuZ3RoIHZhbHVlcyBhbmQKK3JldHVybiB0aGUgYWN0dWFsIGxlbmd0aCB0aGlzIFMtZXhwcmVzc2lvbiB1c2VzLiAgRm9yIGEgdmFsaWQgUy1leHByZXNzaW9uCitpdCBzaG91bGQgbmV2ZXIgcmV0dXJuIDAuICBJZiBAdmFye2xlbmd0aH0gaXMgbm90IDAsIHRoZSBtYXhpbXVtCitsZW5ndGggdG8gc2NhbiBpcyBnaXZlbjsgdGhpcyBjYW4gYmUgdXNlZCBmb3Igc3ludGF4IGNoZWNrcyBvZgorZGF0YSBwYXNzZWQgZnJvbSBvdXRzaWRlLiAgQHZhcntlcnJjb2RlfSBhbmQgQHZhcntlcnJvZmZ9IG1heSBib3RoIGJlCitwYXNzZWQgYXMgQGNvZGV7TlVMTH0uCisKK0BlbmQgZGVmdHlwZWZ1bgorCisKK0Bub2luZGVudAorVGhlcmUgYXJlIGZ1bmN0aW9ucyB0byBwYXJzZSBTLWV4cHJlc3Npb25zIGFuZCByZXRyaWV2ZSBlbGVtZW50czoKKworQGRlZnR5cGVmdW4gZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKEB3e2NvbnN0IGdjcnlfc2V4cF90IEB2YXJ7bGlzdH19LCBAd3tjb25zdCBjaGFyICpAdmFye3Rva2VufX0sIEB3e3NpemVfdCBAdmFye3Rva2xlbn19KQorCitTY2FuIHRoZSBTLWV4cHJlc3Npb24gZm9yIGEgc3VibGlzdCB3aXRoIGEgdHlwZSAodGhlIGNhciBvZiB0aGUgbGlzdCkKK21hdGNoaW5nIHRoZSBzdHJpbmcgQHZhcnt0b2tlbn0uICBJZiBAdmFye3Rva2xlbn0gaXMgbm90IDAsIHRoZSB0b2tlbiBpcworYXNzdW1lZCB0byBiZSByYXcgbWVtb3J5IG9mIHRoaXMgbGVuZ3RoLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXdseQorYWxsb2NhdGVkIFMtZXhwcmVzc2lvbiBjb25zaXN0aW5nIG9mIHRoZSBmb3VuZCBzdWJsaXN0IG9yIEBjb2Rle05VTEx9Cit3aGVuIG5vdCBmb3VuZC4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X3NleHBfbGVuZ3RoIChAd3tjb25zdCBnY3J5X3NleHBfdCBAdmFye2xpc3R9fSkKKworUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIEB2YXJ7bGlzdH0uICBGb3IgYSB2YWxpZCBTLWV4cHJlc3Npb24gdGhpcworc2hvdWxkIGJlIGF0IGxlYXN0IDEuCitAZW5kIGRlZnR5cGVmdW4KKworCitAZGVmdHlwZWZ1biBnY3J5X3NleHBfdCBnY3J5X3NleHBfbnRoIChAd3tjb25zdCBnY3J5X3NleHBfdCBAdmFye2xpc3R9fSwgQHd7aW50IEB2YXJ7bnVtYmVyfX0pCisKK0NyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFMtZXhwcmVzc2lvbiBmcm9tIHRoZSBlbGVtZW50IHdpdGggaW5kZXggQHZhcntudW1iZXJ9IGluCitAdmFye2xpc3R9LiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGhhcyB0aGUgaW5kZXggMC4gIElmIHRoZXJlIGlzCitubyBzdWNoIGVsZW1lbnQsIEBjb2Rle05VTEx9IGlzIHJldHVybmVkLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfc2V4cF90IGdjcnlfc2V4cF9jYXIgKEB3e2NvbnN0IGdjcnlfc2V4cF90IEB2YXJ7bGlzdH19KQorCitDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBTLWV4cHJlc3Npb24gZnJvbSB0aGUgZmlyc3QgZWxlbWVudCBpbgorQHZhcntsaXN0fTsgdGhpcyBpcyBjYWxsZWQgdGhlICJ0eXBlIiBhbmQgc2hvdWxkIGFsd2F5cyBleGlzdCBwZXIKK1MtZXhwcmVzc2lvbiBzcGVjaWZpY2F0aW9uIGFuZCBpbiBnZW5lcmFsIGJlIGEgc3RyaW5nLiAgQGNvZGV7TlVMTH0gaXMKK3JldHVybmVkIGluIGNhc2Ugb2YgYSBwcm9ibGVtLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfc2V4cF90IGdjcnlfc2V4cF9jZHIgKEB3e2NvbnN0IGdjcnlfc2V4cF90IEB2YXJ7bGlzdH19KQorCitDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBsaXN0IGZvcm0gYWxsIGVsZW1lbnRzIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IG9uZS4KK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYW4gaW52YWxpZCBTLWV4cHJlc3Npb24gYmVjYXVzZSBpdAoraXMgbm90IGd1YXJhbnRlZWQsIHRoYXQgdGhlIHR5cGUgZXhpc3RzIGFuZCBpcyBhIHN0cmluZy4gIEhvd2V2ZXIsIGZvcgorcGFyc2luZyBhIGNvbXBsZXggUy1leHByZXNzaW9uIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgaW50ZXJtZWRpYXRlCitsaXN0cy4gIFJldHVybnMgQGNvZGV7TlVMTH0gb24gZXJyb3IuCitAZW5kIGRlZnR5cGVmdW4KKworCitAZGVmdHlwZWZ1biB7Y29uc3QgY2hhciAqfSBnY3J5X3NleHBfbnRoX2RhdGEgKEB3e2NvbnN0IGdjcnlfc2V4cF90IEB2YXJ7bGlzdH19LCBAd3tpbnQgQHZhcntudW1iZXJ9fSwgQHd7c2l6ZV90ICpAdmFye2RhdGFsZW59fSkKKworVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBkYXRhIGZyb20gYSBAdmFye2xpc3R9LiAgQSBwb2ludGVyIHRvIHRoZQorYWN0dWFsIGRhdGEgd2l0aCBpbmRleCBAdmFye251bWJlcn0gaXMgcmV0dXJuZWQgYW5kIHRoZSBsZW5ndGggb2YgdGhpcworZGF0YSB3aWxsIGJlIHN0b3JlZCB0byBAdmFye2RhdGFsZW59LiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBhdCB0aGUgZ2l2ZW4KK2luZGV4IG9yIHRoZSBpbmRleCByZXByZXNlbnRzIGFub3RoZXIgbGlzdCwgQGNvZGV7TlVMTH0gaXMgcmV0dXJuZWQuCitAc3Ryb25ne0NhdXRpb246fSBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyB2YWxpZCBhcyBsb25nIGFzIEB2YXJ7bGlzdH0gaXMKK25vdCBtb2RpZmllZCBvciByZWxlYXNlZC4KKworQG5vaW5kZW50CitIZXJlIGlzIGFuIGV4YW1wbGUgb24gaG93IHRvIGV4dHJhY3QgYW5kIHByaW50IHRoZSBzdXJuYW1lIChNZWllcikgZnJvbQordGhlIFMtZXhwcmVzc2lvbiBAc2FtcHsoTmFtZSBPdHRvIE1laWVyIChhZGRyZXNzIEJ1cmdwbGF0eiAzKSl9OgorCitAZXhhbXBsZQorc2l6ZV90IGxlbjsKK2NvbnN0IGNoYXIgKm5hbWU7CisKK25hbWUgPSBnY3J5X3NleHBfbnRoX2RhdGEgKGxpc3QsIDIsICZsZW4pOworcHJpbnRmICgibXkgbmFtZSBpcyAlLipzXG4iLCAoaW50KWxlbiwgbmFtZSk7CitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7dm9pZCAqfSBnY3J5X3NleHBfbnRoX2J1ZmZlciAoQHd7Y29uc3QgZ2NyeV9zZXhwX3QgQHZhcntsaXN0fX0sIEB3e2ludCBAdmFye251bWJlcn19LCBAd3tzaXplX3QgKkB2YXJ7cmxlbmd0aH19KQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSBhIEB2YXJ7bGlzdH0uICBBIG1hbGxvY2VkCitidWZmZXIgd2l0aCB0aGUgYWN0dWFsIGRhdGEgYXQgbGlzdCBpbmRleCBAdmFye251bWJlcn0gaXMgcmV0dXJuZWQgYW5kCit0aGUgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyIHdpbGwgYmUgc3RvcmVkIHRvIEB2YXJ7cmxlbmd0aH0uICBJZiB0aGVyZQoraXMgbm8gZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kZXggb3IgdGhlIGluZGV4IHJlcHJlc2VudHMgYW5vdGhlciBsaXN0LAorQGNvZGV7TlVMTH0gaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyIG11c3QgcmVsZWFzZSB0aGUgcmVzdWx0IHVzaW5nCitAY29kZXtnY3J5X2ZyZWV9LgorCitAbm9pbmRlbnQKK0hlcmUgaXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gZXh0cmFjdCBhbmQgcHJpbnQgdGhlIENSQyB2YWx1ZSBmcm9tIHRoZQorUy1leHByZXNzaW9uIEBzYW1weyhoYXNoIGNyYzMyICMyM2VkMDBkNyl9OgorCitAZXhhbXBsZQorc2l6ZV90IGxlbjsKK2NoYXIgKnZhbHVlOworCit2YWx1ZSA9IGdjcnlfc2V4cF9udGhfYnVmZmVyIChsaXN0LCAyLCAmbGVuKTsKK2lmICh2YWx1ZSkKKyAgZndyaXRlICh2YWx1ZSwgbGVuLCAxLCBzdGRvdXQpOworZ2NyeV9mcmVlICh2YWx1ZSk7CitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7Y2hhciAqfSBnY3J5X3NleHBfbnRoX3N0cmluZyAoQHd7Z2NyeV9zZXhwX3QgQHZhcntsaXN0fX0sIEB3e2ludCBAdmFye251bWJlcn19KQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZCBjb252ZXJ0IGRhdGEgZnJvbSBhIEB2YXJ7bGlzdH0uIFRoZQorZGF0YSBpcyBhc3N1bWVkIHRvIGJlIGEgTnVsIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlIGNhbGxlciBtdXN0CityZWxlYXNlIHRoaXMgcmV0dXJuZWQgdmFsdWUgdXNpbmcgQGNvZGV7Z2NyeV9mcmVlfS4gIElmIHRoZXJlIGlzCitubyBkYXRhIGF0IHRoZSBnaXZlbiBpbmRleCwgdGhlIGluZGV4IHJlcHJlc2VudHMgYSBsaXN0IG9yIHRoZSB2YWx1ZQorY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nLCBAY29kZXtOVUxMfSBpcyByZXR1cm5lZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X21waV90IGdjcnlfc2V4cF9udGhfbXBpIChAd3tnY3J5X3NleHBfdCBAdmFye2xpc3R9fSwgQHd7aW50IEB2YXJ7bnVtYmVyfX0sIEB3e2ludCBAdmFye21waWZtdH19KQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZCBjb252ZXJ0IGRhdGEgZnJvbSBhIEB2YXJ7bGlzdH0uIFRoaXMKK2RhdGEgaXMgYXNzdW1lZCB0byBiZSBhbiBNUEkgc3RvcmVkIGluIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGJ5CitAdmFye21waWZtdH0gYW5kIHJldHVybmVkIGFzIGEgc3RhbmRhcmQgTGliZ2NyeXB0IE1QSS4gIFRoZSBjYWxsZXIgbXVzdAorcmVsZWFzZSB0aGlzIHJldHVybmVkIHZhbHVlIHVzaW5nIEBjb2Rle2djcnlfbXBpX3JlbGVhc2V9LiAgSWYgdGhlcmUgaXMKK25vIGRhdGEgYXQgdGhlIGdpdmVuIGluZGV4LCB0aGUgaW5kZXggcmVwcmVzZW50cyBhIGxpc3Qgb3IgdGhlIHZhbHVlCitjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYW4gTVBJLCBAY29kZXtOVUxMfSBpcyByZXR1cm5lZC4gIElmIHlvdSB1c2UKK3RoaXMgZnVuY3Rpb24gdG8gcGFyc2UgcmVzdWx0cyBvZiBhIHB1YmxpYyBrZXkgZnVuY3Rpb24sIHlvdSBtb3N0CitsaWtlbHkgd2FudCB0byB1c2UgQGNvZGV7R0NSWU1QSV9GTVRfVVNHfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBncGdfZXJyb3JfdCBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoIEAKKyAgQHd7Z2NyeV9zZXhwX3QgQHZhcntzZXhwfX0sIEAKKyAgQHd7Y29uc3QgY2hhciAqQHZhcntwYXRofX0sIEAKKyAgQHd7Y29uc3QgY2hhciAqQHZhcntsaXN0fX0sIC4uLikKKworRXh0cmFjdCBwYXJhbWV0ZXJzIGZyb20gYW4gUy1leHByZXNzaW9uIHVzaW5nIGEgbGlzdCBvZiBwYXJhbWV0ZXIKK25hbWVzLiAgVGhlIG5hbWVzIG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiBMSVNULiAgV2hpdGUKK3NwYWNlIGJldHdlZW4gdGhlIHBhcmFtZXRlciBuYW1lcyBhcmUgaWdub3JlZC4gU29tZSBzcGVjaWFsIGNoYXJhY3RlcnMKK21heSBiZSBnaXZlbiB0byBjb250cm9sIHRoZSBjb252ZXJzaW9uOgorCitAdGFibGUgQHNhbXAKK0BpdGVtICsKK1N3aXRjaCB0byB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCAoR0NSWU1QSV9GTVRfVVNHKS4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IG1vZGUuCitAaXRlbSAtCitTd2l0Y2ggdG8gc3RhbmRhcmQgc2lnbmVkIGZvcm1hdCAoR0NSWU1QSV9GTVRfU1REKS4KK0BpdGVtIC8KK1N3aXRjaCB0byBvcGFxdWUgTVBJIGZvcm1hdC4gIFRoZSByZXN1bHRpbmcgTVBJcyBtYXkgbm90IGJlIHVzZWQgZm9yCitjb21wdXRhdGlvbnM7IHNlZSBAY29kZXtnY3J5X21waV9nZXRfb3BhcXVlfSBmb3IgZGV0YWlscy4KK0BpdGVtICYKK1N3aXRjaCB0byBidWZmZXIgZGVzY3JpcHRvciBtb2RlLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorQGl0ZW0gPworSWYgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgcGFyYW1ldGVyIGxldHRlciAobm8gd2hpdGUgc3BhY2UgYWxsb3dlZCksCit0aGF0IHBhcmFtZXRlciBpcyBjb25zaWRlcmVkIG9wdGlvbmFsLgorQGVuZCB0YWJsZQorCitJbiBnZW5lcmFsIHBhcmFtZXRlciBuYW1lcyBhcmUgc2luZ2xlIGxldHRlcnMuICBUbyB1c2UgYSBzdHJpbmcgZm9yIGEKK3BhcmFtZXRlciBuYW1lLCBlbmNsb3NlIHRoZSBuYW1lIGluIHNpbmdsZSBxdW90ZXMuCisKK1VubGVzcyBpbiBidWZmZXIgZGVzY3JpcHRvciBtb2RlIGZvciBlYWNoIHBhcmFtZXRlciBuYW1lIGEgcG9pbnRlciB0bworYW4gQGNvZGV7Z2NyeV9tcGlfdH0gdmFyaWFibGUgaXMgZXhwZWN0ZWQgZmluYWxseSBmb2xsb3dlZCBieSBhIEBjb2Rle05VTEx9LgorRm9yIGV4YW1wbGUKK0BleGFtcGxlCisgIF9nY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoa2V5LCBOVUxMLCAibi94K2UgZC0nZm9vJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1waV9uLCAmbXBpX3gsICZtcGlfZSwgJm1waV9mb28sIE5VTEwpCitAZW5kIGV4YW1wbGUKKworc3RvcmVzIHRoZSBwYXJhbWV0ZXIgJ24nIGZyb20gQHZhcntrZXl9IGFzIGFuIHVuc2lnbmVkIE1QSSBpbnRvCitAdmFye21waV9ufSwgdGhlIHBhcmFtZXRlciAneCcgYXMgYW4gb3BhcXVlIE1QSSBpbnRvIEB2YXJ7bXBpX3h9LCB0aGUKK3BhcmFtZXRlciAnZScgYWdhaW4gYXMgYW4gdW5zaWduZWQgTVBJIGludG8gQHZhcnttcGlfZX0sIGFuZCB0aGUKK3BhcmFtZXRlciAnZm9vJyBhcyBhIHNpZ25lZCBNUEkuCisKK0B2YXJ7cGF0aH0gaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHVzZWQgdG8gbG9jYXRlIGEgdG9rZW4uICBUaGUKK2V4Y2xhbWF0aW9uIG1hcmsgc2VwYXJhdGVkIHRva2VucyBhcmUgdXNlZCB2aWEKK0Bjb2Rle2djcnlfc2V4cF9maW5kX3Rva2VufSB0byBmaW5kIGEgc3RhcnQgcG9pbnQgaW5zaWRlIHRoZQorUy1leHByZXNzaW9uLgorCitJbiBidWZmZXIgZGVzY3JpcHRvciBtb2RlIGEgcG9pbnRlciB0byBhIEBjb2Rle2djcnlfYnVmZmVyX3R9CitkZXNjcmlwdG9yIGlzIGV4cGVjdGVkIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGFuIE1QSS4gIFRoZSBjYWxsZXIgbWF5Cit1c2UgdHdvIGRpZmZlcmVudCBvcGVyYXRpb24gbW9kZXMgaGVyZTogSWYgdGhlIEB2YXJ7ZGF0YX0gZmllbGQgb2YgdGhlCitwcm92aWRlZCBkZXNjcmlwdG9yIGlzIEBjb2Rle05VTEx9LCB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIGEgbmV3CitidWZmZXIgYW5kIHN0b3JlcyBpdCBhdCBAdmFye2RhdGF9OyB0aGUgb3RoZXIgZmllbGRzIGFyZSBzZXQKK2FjY29yZGluZ2x5IHdpdGggQHZhcntvZmZ9IHNldCB0byAwLiAgSWYgQHZhcntkYXRhfSBpcyBub3QKK0Bjb2Rle05VTEx9LCB0aGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBAdmFye2RhdGF9LCBAdmFye3NpemV9LCBhbmQKK0B2YXJ7b2ZmfSBmaWVsZHMgc3BlY2lmeSBhIGJ1ZmZlciB3aGVyZSB0byBidXQgdGhlIHZhbHVlIG9mIHRoZQorcmVzcGVjdGl2ZSBwYXJhbWV0ZXI7IG9uIHJldHVybiB0aGUgQHZhcntsZW59IGZpZWxkIHJlY2VpdmVzIHRoZQorbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB0aGF0IGJ1ZmZlcjsgaW4gY2FzZSB0aGUgYnVmZmVyIGlzIHRvbworc21hbGwsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIHdpdGggYW4gZXJyb3IgY29kZSAoYW5kCitAdmFye2xlbn0gaXMgc2V0IHRvIDApLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICBPbiBlcnJvciBhbiBlcnJvciBjb2RlIGlzCityZXR1cm5lZCBhbmQgdGhlIHBhc3NlZCBNUElzIGFyZSBlaXRoZXIgdW5jaGFuZ2VkIG9yIHNldCB0byBOVUxMLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiAgTVBJcyAqKioqKioqKiAqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgTVBJIGxpYnJhcnkKK0BjaGFwdGVyIE1QSSBsaWJyYXJ5CisKK0BtZW51CisqIERhdGEgdHlwZXM6OiAgICAgICAgICAgICAgICAgIE1QSSByZWxhdGVkIGRhdGEgdHlwZXMuCisqIEJhc2ljIGZ1bmN0aW9uczo6ICAgICAgICAgICAgIEZpcnN0IHN0ZXBzIHdpdGggTVBJIG51bWJlcnMuCisqIE1QSSBmb3JtYXRzOjogICAgICAgICAgICAgICAgIEV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIE1QSXMuCisqIENhbGN1bGF0aW9uczo6ICAgICAgICAgICAgICAgIFBlcmZvcm1pbmcgTVBJIGNhbGN1bGF0aW9ucy4KKyogQ29tcGFyaXNvbnM6OiAgICAgICAgICAgICAgICAgSG93IHRvIGNvbXBhcmUgTVBJIHZhbHVlcy4KKyogQml0IG1hbmlwdWxhdGlvbnM6OiAgICAgICAgICAgSG93IHRvIGFjY2VzcyBzaW5nbGUgYml0cyBvZiBNUEkgdmFsdWVzLgorKiBFQyBmdW5jdGlvbnM6OiAgICAgICAgICAgICAgICBFbGxpcHRpYyBjdXJ2ZSByZWxhdGVkIGZ1bmN0aW9ucy4KKyogTWlzY2VsbGFuZW91czo6ICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBNUEkgZnVuY3Rpb25zLgorQGVuZCBtZW51CisKK1B1YmxpYyBrZXkgY3J5cHRvZ3JhcGh5IGlzIGJhc2VkIG9uIG1hdGhlbWF0aWNzIHdpdGggbGFyZ2UgbnVtYmVycy4gIFRvCitpbXBsZW1lbnQgdGhlIHB1YmxpYyBrZXkgZnVuY3Rpb25zLCBhIGxpYnJhcnkgZm9yIGhhbmRsaW5nIHRoZXNlIGxhcmdlCitudW1iZXJzIGlzIHJlcXVpcmVkLiAgQmVjYXVzZSBvZiB0aGUgZ2VuZXJhbCB1c2VmdWxuZXNzIG9mIHN1Y2ggYQorbGlicmFyeSwgaXRzIGludGVyZmFjZSBpcyBleHBvc2VkIGJ5IExpYmdjcnlwdC4KK0luIHRoZSBjb250ZXh0IG9mIExpYmdjcnlwdCBhbmQgaW4gbW9zdCBvdGhlciBhcHBsaWNhdGlvbnMsIHRoZXNlIGxhcmdlCitudW1iZXJzIGFyZSBjYWxsZWQgTVBJcyAobXVsdGktcHJlY2lzaW9uLWludGVnZXJzKS4KKworQG5vZGUgRGF0YSB0eXBlcworQHNlY3Rpb24gRGF0YSB0eXBlcworCitAZGVmdHAge0RhdGEgdHlwZX0ge2djcnlfbXBpX3R9CitUaGlzIHR5cGUgcmVwcmVzZW50cyBhbiBvYmplY3QgdG8gaG9sZCBhbiBNUEkuCitAZW5kIGRlZnRwCisKK0BkZWZ0cCB7RGF0YSB0eXBlfSB7Z2NyeV9tcGlfcG9pbnRfdH0KK1RoaXMgdHlwZSByZXByZXNlbnRzIGFuIG9iamVjdCB0byBob2xkIGEgcG9pbnQgZm9yIGVsbGlwdGljIGN1cnZlIG1hdGguCitAZW5kIGRlZnRwCisKK0Bub2RlIEJhc2ljIGZ1bmN0aW9ucworQHNlY3Rpb24gQmFzaWMgZnVuY3Rpb25zCisKK0Bub2luZGVudAorVG8gd29yayB3aXRoIE1QSXMsIHN0b3JhZ2UgbXVzdCBiZSBhbGxvY2F0ZWQgYW5kIHJlbGVhc2VkIGZvciB0aGUKK251bWJlcnMuICBUaGlzIGNhbiBiZSBkb25lIHdpdGggb25lIG9mIHRoZXNlIGZ1bmN0aW9uczoKKworQGRlZnR5cGVmdW4gZ2NyeV9tcGlfdCBnY3J5X21waV9uZXcgKEB3e3Vuc2lnbmVkIGludCBAdmFye25iaXRzfX0pCisKK0FsbG9jYXRlIGEgbmV3IE1QSSBvYmplY3QsIGluaXRpYWxpemUgaXQgdG8gMCBhbmQgaW5pdGlhbGx5IGFsbG9jYXRlCitlbm91Z2ggbWVtb3J5IGZvciBhIG51bWJlciBvZiBhdCBsZWFzdCBAdmFye25iaXRzfS4gIFRoaXMgcHJlLWFsbG9jYXRpb24gaXMKK29ubHkgYSBzbWFsbCBwZXJmb3JtYW5jZSBpc3N1ZSBhbmQgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlCitMaWJnY3J5cHQgYXV0b21hdGljYWxseSByZS1hbGxvY2F0ZXMgdGhlIHJlcXVpcmVkIG1lbW9yeS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X21waV90IGdjcnlfbXBpX3NuZXcgKEB3e3Vuc2lnbmVkIGludCBAdmFye25iaXRzfX0pCisKK1RoaXMgaXMgaWRlbnRpY2FsIHRvIEBjb2Rle2djcnlfbXBpX25ld30gYnV0IGFsbG9jYXRlcyB0aGUgTVBJIGluIHRoZSBzbworY2FsbGVkICJzZWN1cmUgbWVtb3J5IiB3aGljaCBpbiB0dXJuIHdpbGwgdGFrZSBjYXJlIHRoYXQgYWxsIGRlcml2ZWQKK3ZhbHVlcyB3aWxsIGFsc28gYmUgc3RvcmVkIGluIHRoaXMgInNlY3VyZSBtZW1vcnkiLiAgVXNlIHRoaXMgZm9yIGhpZ2hseQorY29uZmlkZW50aWFsIGRhdGEgbGlrZSBwcml2YXRlIGtleSBwYXJhbWV0ZXJzLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfbXBpX3QgZ2NyeV9tcGlfY29weSAoQHd7Y29uc3QgZ2NyeV9tcGlfdCBAdmFye2F9fSkKKworQ3JlYXRlIGEgbmV3IE1QSSBhcyB0aGUgZXhhY3QgY29weSBvZiBAdmFye2F9IGJ1dCB3aXRoIHRoZSBjb25zdGFudAorYW5kIGltbXV0YWJsZSBmbGFncyBjbGVhcmVkLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9yZWxlYXNlIChAd3tnY3J5X21waV90IEB2YXJ7YX19KQorCitSZWxlYXNlIHRoZSBNUEkgQHZhcnthfSBhbmQgZnJlZSBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMuICBQYXNzaW5nCitAY29kZXtOVUxMfSBpcyBhbGxvd2VkIGFuZCBpZ25vcmVkLiAgV2hlbiBhIE1QSSBzdG9yZWQgaW4gdGhlICJzZWN1cmUKK21lbW9yeSIgaXMgcmVsZWFzZWQsIHRoYXQgbWVtb3J5IGdldHMgd2lwZWQgb3V0IGltbWVkaWF0ZWx5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2luZGVudAorVGhlIHNpbXBsZXN0IG9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gYXNzaWduIGEgbmV3IHZhbHVlIHRvIGFuIE1QSToKKworQGRlZnR5cGVmdW4gZ2NyeV9tcGlfdCBnY3J5X21waV9zZXQgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2NvbnN0IGdjcnlfbXBpX3QgQHZhcnt1fX0pCisKK0Fzc2lnbiB0aGUgdmFsdWUgb2YgQHZhcnt1fSB0byBAdmFye3d9IGFuZCByZXR1cm4gQHZhcnt3fS4gIElmCitAY29kZXtOVUxMfSBpcyBwYXNzZWQgZm9yIEB2YXJ7d30sIGEgbmV3IE1QSSBpcyBhbGxvY2F0ZWQsIHNldCB0byB0aGUKK3ZhbHVlIG9mIEB2YXJ7dX0gYW5kIHJldHVybmVkLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfbXBpX3QgZ2NyeV9tcGlfc2V0X3VpIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3t1bnNpZ25lZCBsb25nIEB2YXJ7dX19KQorCitBc3NpZ24gdGhlIHZhbHVlIG9mIEB2YXJ7dX0gdG8gQHZhcnt3fSBhbmQgcmV0dXJuIEB2YXJ7d30uICBJZgorQGNvZGV7TlVMTH0gaXMgcGFzc2VkIGZvciBAdmFye3d9LCBhIG5ldyBNUEkgaXMgYWxsb2NhdGVkLCBzZXQgdG8gdGhlCit2YWx1ZSBvZiBAdmFye3V9IGFuZCByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gQGNvZGV7dW5zaWduZWQKK2ludH0gYXMgdHlwZSBmb3IgQHZhcnt1fSBhbmQgdGh1cyBpdCBpcyBvbmx5IHBvc3NpYmxlIHRvIHNldCBAdmFye3d9IHRvCitzbWFsbCB2YWx1ZXMgKHVzdWFsbHkgdXAgdG8gdGhlIHdvcmQgc2l6ZSBvZiB0aGUgQ1BVKS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX3N3YXAgKEB3e2djcnlfbXBpX3QgQHZhcnthfX0sIEB3e2djcnlfbXBpX3QgQHZhcntifX0pCisKK1N3YXAgdGhlIHZhbHVlcyBvZiBAdmFye2F9IGFuZCBAdmFye2J9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfc25hdGNoIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHd7Y29uc3QgZ2NyeV9tcGlfdCBAdmFye3V9fSkKKworU2V0IEB2YXJ7dX0gaW50byBAdmFye3d9IGFuZCByZWxlYXNlIEB2YXJ7dX0uICBJZiBAdmFye3d9IGlzCitAY29kZXtOVUxMfSBvbmx5IEB2YXJ7dX0gd2lsbCBiZSByZWxlYXNlZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX25lZyAoQHd7Z2NyeV9tcGlfdCBAdmFye3d9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye3V9fSkKKworU2V0IHRoZSBzaWduIG9mIEB2YXJ7d30gdG8gdGhlIG5lZ2F0aXZlIG9mIEB2YXJ7dX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9hYnMgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0pCisKK0NsZWFyIHRoZSBzaWduIG9mIEB2YXJ7d30uCitAZW5kIGRlZnR5cGVmdW4KKworCitAbm9kZSBNUEkgZm9ybWF0cworQHNlY3Rpb24gTVBJIGZvcm1hdHMKKworQG5vaW5kZW50CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gYW4gZXh0ZXJuYWwKK3JlcHJlc2VudGF0aW9uIG9mIGFuIE1QSSBhbmQgdGhlIGludGVybmFsIG9uZSBvZiBMaWJnY3J5cHQuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X21waV9zY2FuIChAd3tnY3J5X21waV90ICpAdmFye3JfbXBpfX0sIEB3e2VudW0gZ2NyeV9tcGlfZm9ybWF0IEB2YXJ7Zm9ybWF0fX0sIEB3e2NvbnN0IHVuc2lnbmVkIGNoYXIgKkB2YXJ7YnVmZmVyfX0sIEB3e3NpemVfdCBAdmFye2J1Zmxlbn19LCBAd3tzaXplX3QgKkB2YXJ7bnNjYW5uZWR9fSkKKworQ29udmVydCB0aGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBzdG9yZWQgaW4gQHZhcntidWZmZXJ9Cit3aXRoIGEgbGVuZ3RoIG9mIEB2YXJ7YnVmbGVufSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBNUEkgcmV0dXJuZWQgd2hpY2gKK3dpbGwgYmUgc3RvcmVkIGF0IHRoZSBhZGRyZXNzIG9mIEB2YXJ7cl9tcGl9LiAgRm9yIGNlcnRhaW4gZm9ybWF0cyB0aGUKK2xlbmd0aCBhcmd1bWVudCBpcyBub3QgcmVxdWlyZWQgYW5kIHNob3VsZCBiZSBwYXNzZWQgYXMgQGNvZGV7MH0uICBBZnRlciBhCitzdWNjZXNzZnVsIG9wZXJhdGlvbiB0aGUgdmFyaWFibGUgQHZhcntuc2Nhbm5lZH0gcmVjZWl2ZXMgdGhlIG51bWJlciBvZgorYnl0ZXMgYWN0dWFsbHkgc2Nhbm5lZCB1bmxlc3MgQHZhcntuc2Nhbm5lZH0gd2FzIGdpdmVuIGFzCitAY29kZXtOVUxMfS4gQHZhcntmb3JtYXR9IGRlc2NyaWJlcyB0aGUgZm9ybWF0IG9mIHRoZSBNUEkgYXMgc3RvcmVkIGluCitAdmFye2J1ZmZlcn06CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gR0NSWU1QSV9GTVRfU1RECisyLWNvbXBsZW1lbnQgc3RvcmVkIHdpdGhvdXQgYSBsZW5ndGggaGVhZGVyLiAgTm90ZSB0aGF0CitAY29kZXtnY3J5X21waV9wcmludH0gc3RvcmVzIGEgQGNvZGV7MH0gYXMgYSBzdHJpbmcgb2YgemVybyBsZW5ndGguCisKK0BpdGVtIEdDUllNUElfRk1UX1BHUAorQXMgdXNlZCBieSBPcGVuUEdQIChvbmx5IGRlZmluZWQgYXMgdW5zaWduZWQpLiBUaGlzIGlzIGJhc2ljYWxseQorQGNvZGV7R0NSWU1QSV9GTVRfU1REfSB3aXRoIGEgMiBieXRlIGJpZyBlbmRpYW4gbGVuZ3RoIGhlYWRlci4KKworQGl0ZW0gR0NSWU1QSV9GTVRfU1NICitBcyB1c2VkIGluIHRoZSBTZWN1cmUgU2hlbGwgcHJvdG9jb2wuICBUaGlzIGlzIEBjb2Rle0dDUllNUElfRk1UX1NURH0KK3dpdGggYSA0IGJ5dGUgYmlnIGVuZGlhbiBoZWFkZXIuCisKK0BpdGVtIEdDUllNUElfRk1UX0hFWAorU3RvcmVkIGFzIGEgc3RyaW5nIHdpdGggZWFjaCBieXRlIG9mIHRoZSBNUEkgZW5jb2RlZCBhcyAyIGhleCBkaWdpdHMuCitOZWdhdGl2ZSBudW1iZXJzIGFyZSBwcmVmaXggd2l0aCBhIG1pbnVzIHNpZ24gYW5kIGluIGFkZGl0aW9uIHRoZQoraGlnaCBiaXQgaXMgYWx3YXlzIHplcm8gdG8gbWFrZSBjbGVhciB0aGF0IGFuIGV4cGxpY2l0IHNpZ24gaXN0IHVzZWQuCitXaGVuIHVzaW5nIHRoaXMgZm9ybWF0LCBAdmFye2J1Zmxlbn0gbXVzdCBiZSB6ZXJvLgorCitAaXRlbSBHQ1JZTVBJX0ZNVF9VU0cKK1NpbXBsZSB1bnNpZ25lZCBpbnRlZ2VyLgorQGVuZCB0YWJsZQorCitAbm9pbmRlbnQKK05vdGUgdGhhdCBhbGwgb2YgdGhlIGFib3ZlIGZvcm1hdHMgc3RvcmUgdGhlIGludGVnZXIgaW4gYmlnLWVuZGlhbgorZm9ybWF0IChNU0IgZmlyc3QpLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfbXBpX3ByaW50IChAd3tlbnVtIGdjcnlfbXBpX2Zvcm1hdCBAdmFye2Zvcm1hdH19LCBAd3t1bnNpZ25lZCBjaGFyICpAdmFye2J1ZmZlcn19LCBAd3tzaXplX3QgQHZhcntidWZsZW59fSwgQHd7c2l6ZV90ICpAdmFye253cml0dGVufX0sIEB3e2NvbnN0IGdjcnlfbXBpX3QgQHZhcnthfX0pCisKK0NvbnZlcnQgdGhlIE1QSSBAdmFye2F9IGludG8gYW4gZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gZGVzY3JpYmVkIGJ5CitAdmFye2Zvcm1hdH0gKHNlZSBhYm92ZSkgYW5kIHN0b3JlIGl0IGluIHRoZSBwcm92aWRlZCBAdmFye2J1ZmZlcn0KK3doaWNoIGhhcyBhIHVzYWJsZSBsZW5ndGggb2YgYXQgbGVhc3QgdGhlIEB2YXJ7YnVmbGVufSBieXRlcy4gSWYKK0B2YXJ7bndyaXR0ZW59IGlzIG5vdCBOVUxMLCBpdCB3aWxsIHJlY2VpdmUgdGhlIG51bWJlciBvZiBieXRlcworYWN0dWFsbHkgc3RvcmVkIGluIEB2YXJ7YnVmZmVyfSBhZnRlciBhIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X21waV9hcHJpbnQgKEB3e2VudW0gZ2NyeV9tcGlfZm9ybWF0IEB2YXJ7Zm9ybWF0fX0sIEB3e3Vuc2lnbmVkIGNoYXIgKipAdmFye2J1ZmZlcn19LCBAd3tzaXplX3QgKkB2YXJ7bmJ5dGVzfX0sIEB3e2NvbnN0IGdjcnlfbXBpX3QgQHZhcnthfX0pCisKK0NvbnZlcnQgdGhlIE1QSSBAdmFye2F9IGludG8gYW4gZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gZGVzY3JpYmVkIGJ5CitAdmFye2Zvcm1hdH0gKHNlZSBhYm92ZSkgYW5kIHN0b3JlIGl0IGluIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB3aGljaAorYWRkcmVzcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgQHZhcntidWZmZXJ9IHBvaW50cyB0by4gIFRoZQorbnVtYmVyIG9mIGJ5dGVzIHN0b3JlZCBpbiB0aGlzIGJ1ZmZlciB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUKK0B2YXJ7bmJ5dGVzfSBwb2ludHMgdG8sIHVubGVzcyBAdmFye25ieXRlc30gaXMgQGNvZGV7TlVMTH0uCisKK0V2ZW4gaWYgQHZhcntuYnl0ZXN9IGlzIHplcm8sIHRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgYXQgbGVhc3Qgb25lIGJ5dGUKK2FuZCBzdG9yZSBhIHplcm8gdGhlcmUuICBUaHVzIHdpdGggZm9ybWF0cyBAY29kZXtHQ1JZTVBJX0ZNVF9TVER9IGFuZAorQGNvZGV7R0NSWU1QSV9GTVRfVVNHfSB0aGUgY2FsbGVyIG1heSBzYWZlbHkgc2V0IGEgcmV0dXJuZWQgbGVuZ3RoIG9mCiswIHRvIDEgdG8gcmVwcmVzZW50IGEgemVybyBhcyBhIDEgYnl0ZSBzdHJpbmcuCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX2R1bXAgKEB3e2NvbnN0IGdjcnlfbXBpX3QgQHZhcnthfX0pCisKK0R1bXAgdGhlIHZhbHVlIG9mIEB2YXJ7YX0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGRlYnVnZ2luZyB0bworTGliZ2NyeXB0J3MgbG9nZ2luZyBzdHJlYW0uICBOb3RlIHRoYXQgb25lIGxlYWRpbmcgc3BhY2UgYnV0IG5vIHRyYWlsaW5nCitzcGFjZSBvciBsaW5lZmVlZCB3aWxsIGJlIHByaW50ZWQuICBJdCBpcyBva2F5IHRvIHBhc3MgQGNvZGV7TlVMTH0gZm9yCitAdmFye2F9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQG5vZGUgQ2FsY3VsYXRpb25zCitAc2VjdGlvbiBDYWxjdWxhdGlvbnMKKworQG5vaW5kZW50CitCYXNpYyBhcml0aG1ldGljIG9wZXJhdGlvbnM6CisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfYWRkIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3tnY3J5X21waV90IEB2YXJ7dX19LCBAd3tnY3J5X21waV90IEB2YXJ7dn19KQorCitAbWF0aHtAdmFye3d9ID0gQHZhcnt1fSArIEB2YXJ7dn19LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9hZGRfdWkgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt1fX0sIEB3e3Vuc2lnbmVkIGxvbmcgQHZhcnt2fX0pCisKK0BtYXRoe0B2YXJ7d30gPSBAdmFye3V9ICsgQHZhcnt2fX0uICBOb3RlIHRoYXQgQHZhcnt2fSBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9hZGRtIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3tnY3J5X21waV90IEB2YXJ7dX19LCBAd3tnY3J5X21waV90IEB2YXJ7dn19LCBAd3tnY3J5X21waV90IEB2YXJ7bX19KQorCitAbWF0aHtAdmFye3d9ID0gQHZhcnt1fSArIEB2YXJ7dn0gXGJtb2QgQHZhcnttfX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9zdWIgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt1fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt2fX0pCisKK0BtYXRoe0B2YXJ7d30gPSBAdmFye3V9IC0gQHZhcnt2fX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9zdWJfdWkgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt1fX0sIEB3e3Vuc2lnbmVkIGxvbmcgQHZhcnt2fX0pCisKK0BtYXRoe0B2YXJ7d30gPSBAdmFye3V9IC0gQHZhcnt2fX0uICBAdmFye3Z9IGlzIGFuIHVuc2lnbmVkIGludGVnZXIuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9zdWJtIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3tnY3J5X21waV90IEB2YXJ7dX19LCBAd3tnY3J5X21waV90IEB2YXJ7dn19LCBAd3tnY3J5X21waV90IEB2YXJ7bX19KQorCitAbWF0aHtAdmFye3d9ID0gQHZhcnt1fSAtIEB2YXJ7dn0gXGJtb2QgQHZhcnttfX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9tdWwgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt1fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt2fX0pCisKK0BtYXRoe0B2YXJ7d30gPSBAdmFye3V9ICogQHZhcnt2fX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9tdWxfdWkgKEB3e2djcnlfbXBpX3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt1fX0sIEB3e3Vuc2lnbmVkIGxvbmcgQHZhcnt2fX0pCisKK0BtYXRoe0B2YXJ7d30gPSBAdmFye3V9ICogQHZhcnt2fX0uICBAdmFye3Z9IGlzIGFuIHVuc2lnbmVkIGludGVnZXIuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9tdWxtIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3tnY3J5X21waV90IEB2YXJ7dX19LCBAd3tnY3J5X21waV90IEB2YXJ7dn19LCBAd3tnY3J5X21waV90IEB2YXJ7bX19KQorCitAbWF0aHtAdmFye3d9ID0gQHZhcnt1fSAqIEB2YXJ7dn0gXGJtb2QgQHZhcnttfX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9tdWxfMmV4cCAoQHd7Z2NyeV9tcGlfdCBAdmFye3d9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye3V9fSwgQHd7dW5zaWduZWQgbG9uZyBAdmFye2V9fSkKKworQGMgRklYTUU6IEkgYW0gaW4gbmVlZCBmb3IgYSByZWFsIFRlWHtpbmZvfSBndXJ1OgorQGMgSSBkb24ndCBrbm93IHdoeSBUZVggY2FuIGdyb2sgQHZhcntlfSBoZXJlLgorQG1hdGh7QHZhcnt3fSA9IEB2YXJ7dX0gKiAyXmV9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfZGl2IChAd3tnY3J5X21waV90IEB2YXJ7cX19LCBAd3tnY3J5X21waV90IEB2YXJ7cn19LCBAd3tnY3J5X21waV90IEB2YXJ7ZGl2aWRlbmR9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye2Rpdmlzb3J9fSwgQHd7aW50IEB2YXJ7cm91bmR9fSkKKworQG1hdGh7QHZhcntxfSA9IEB2YXJ7ZGl2aWRlbmR9IC8gQHZhcntkaXZpc29yfX0sIEBtYXRoe0B2YXJ7cn0gPQorQHZhcntkaXZpZGVuZH0gXGJtb2QgQHZhcntkaXZpc29yfX0uICBAdmFye3F9IGFuZCBAdmFye3J9IG1heSBiZSBwYXNzZWQKK2FzIEBjb2Rle05VTEx9LiAgQHZhcntyb3VuZH0gc2hvdWxkIGJlIG5lZ2F0aXZlIG9yIDAuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9tb2QgKEB3e2djcnlfbXBpX3QgQHZhcntyfX0sIEB3e2djcnlfbXBpX3QgQHZhcntkaXZpZGVuZH19LCBAd3tnY3J5X21waV90IEB2YXJ7ZGl2aXNvcn19KQorCitAbWF0aHtAdmFye3J9ID0gQHZhcntkaXZpZGVuZH0gXGJtb2QgQHZhcntkaXZpc29yfX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9wb3dtIChAd3tnY3J5X21waV90IEB2YXJ7d319LCBAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7Yn19LCBAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7ZX19LCBAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7bX19KQorCitAYyBJIGRvbid0IGtub3cgd2h5IFRlWCBjYW4gZ3JvayBAdmFye2V9IGhlcmUuCitAbWF0aHtAdmFye3d9ID0gQHZhcntifV5lIFxibW9kIEB2YXJ7bX19LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21waV9nY2QgKEB3e2djcnlfbXBpX3QgQHZhcntnfX0sIEB3e2djcnlfbXBpX3QgQHZhcnthfX0sIEB3e2djcnlfbXBpX3QgQHZhcntifX0pCisKK1NldCBAdmFye2d9IHRvIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBAdmFye2F9IGFuZCBAdmFye2J9LgorUmV0dXJuIHRydWUgaWYgdGhlIEB2YXJ7Z30gaXMgMS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tcGlfaW52bSAoQHd7Z2NyeV9tcGlfdCBAdmFye3h9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye219fSkKKworU2V0IEB2YXJ7eH0gdG8gdGhlIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgQG1hdGh7QHZhcnthfSBcYm1vZCBAdmFye219fS4KK1JldHVybiB0cnVlIGlmIHRoZSBpbnZlcnNlIGV4aXN0cy4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0Bub2RlIENvbXBhcmlzb25zCitAc2VjdGlvbiBDb21wYXJpc29ucworCitAbm9pbmRlbnQKK1RoZSBuZXh0IDIgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNvbXBhcmUgTVBJczoKKworCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tcGlfY21wIChAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7dX19LCBAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7dn19KQorCitDb21wYXJlIHRoZSBtdWx0aS1wcmVjaXNpb24taW50ZWdlcnMgbnVtYmVyIEB2YXJ7dX0gYW5kIEB2YXJ7dn0KK3JldHVybmluZyAwIGZvciBlcXVhbGl0eSwgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgQHZhcnt1fSA+IEB2YXJ7dn0gYW5kIGEKK25lZ2F0aXZlIGZvciBAdmFye3V9IDwgQHZhcnt2fS4gIElmIGJvdGggbnVtYmVycyBhcmUgb3BhcXVlIHZhbHVlcworKGNmLCBnY3J5X21waV9zZXRfb3BhcXVlKSB0aGUgY29tcGFyaXNvbiBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBiaXQKK3NpemVzIHVzaW5nIG1lbWNtcC4gIElmIG9ubHkgb25lIG51bWJlciBpcyBhbiBvcGFxdWUgdmFsdWUsIHRoZSBvcGFxdWUKK3ZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgb3RoZXIgbnVtYmVyLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBnY3J5X21waV9jbXBfdWkgKEB3e2NvbnN0IGdjcnlfbXBpX3QgQHZhcnt1fX0sIEB3e3Vuc2lnbmVkIGxvbmcgQHZhcnt2fX0pCisKK0NvbXBhcmUgdGhlIG11bHRpLXByZWNpc2lvbi1pbnRlZ2VycyBudW1iZXIgQHZhcnt1fSB3aXRoIHRoZSB1bnNpZ25lZAoraW50ZWdlciBAdmFye3Z9IHJldHVybmluZyAwIGZvciBlcXVhbGl0eSwgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgQHZhcnt1fSA+CitAdmFye3Z9IGFuZCBhIG5lZ2F0aXZlIGZvciBAdmFye3V9IDwgQHZhcnt2fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tcGlfaXNfbmVnIChAd3tjb25zdCBnY3J5X21waV90IEB2YXJ7YX19KQorCitSZXR1cm4gMSBpZiBAdmFye2F9IGlzIGxlc3MgdGhhbiB6ZXJvOyByZXR1cm4gMCBpZiB6ZXJvIG9yIHBvc2l0aXZlLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQG5vZGUgQml0IG1hbmlwdWxhdGlvbnMKK0BzZWN0aW9uIEJpdCBtYW5pcHVsYXRpb25zCisKK0Bub2luZGVudAorVGhlcmUgYXJlIGEgY291cGxlIG9mIGZ1bmN0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gb24gYXJiaXRyYXJ5IGJpdHMKK2luIGFuIE1QSSBhbmQgdG8gc2V0IG9yIGNsZWFyIHRoZW06CisKK0BkZWZ0eXBlZnVuIHt1bnNpZ25lZCBpbnR9IGdjcnlfbXBpX2dldF9uYml0cyAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSkKKworUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byByZXByZXNlbnQgQHZhcnthfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tcGlfdGVzdF9iaXQgKEB3e2djcnlfbXBpX3QgQHZhcnthfX0sIEB3e3Vuc2lnbmVkIGludCBAdmFye259fSkKKworUmV0dXJuIHRydWUgaWYgYml0IG51bWJlciBAdmFye259IChjb3VudGluZyBmcm9tIDApIGlzIHNldCBpbiBAdmFye2F9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfc2V0X2JpdCAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bn19KQorCitTZXQgYml0IG51bWJlciBAdmFye259IGluIEB2YXJ7YX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9jbGVhcl9iaXQgKEB3e2djcnlfbXBpX3QgQHZhcnthfX0sIEB3e3Vuc2lnbmVkIGludCBAdmFye259fSkKKworQ2xlYXIgYml0IG51bWJlciBAdmFye259IGluIEB2YXJ7YX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9zZXRfaGlnaGJpdCAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bn19KQorCitTZXQgYml0IG51bWJlciBAdmFye259IGluIEB2YXJ7YX0gYW5kIGNsZWFyIGFsbCBiaXRzIGdyZWF0ZXIgdGhhbiBAdmFye259LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bn19KQorCitDbGVhciBiaXQgbnVtYmVyIEB2YXJ7bn0gaW4gQHZhcnthfSBhbmQgYWxsIGJpdHMgZ3JlYXRlciB0aGFuIEB2YXJ7bn0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9yc2hpZnQgKEB3e2djcnlfbXBpX3QgQHZhcnt4fX0sIEB3e2djcnlfbXBpX3QgQHZhcnthfX0sIEB3e3Vuc2lnbmVkIGludCBAdmFye259fSkKKworU2hpZnQgdGhlIHZhbHVlIG9mIEB2YXJ7YX0gYnkgQHZhcntufSBiaXRzIHRvIHRoZSByaWdodCBhbmQgc3RvcmUgdGhlCityZXN1bHQgaW4gQHZhcnt4fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX2xzaGlmdCAoQHd7Z2NyeV9tcGlfdCBAdmFye3h9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bn19KQorCitTaGlmdCB0aGUgdmFsdWUgb2YgQHZhcnthfSBieSBAdmFye259IGJpdHMgdG8gdGhlIGxlZnQgYW5kIHN0b3JlIHRoZQorcmVzdWx0IGluIEB2YXJ7eH0uCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgRUMgZnVuY3Rpb25zCitAc2VjdGlvbiBFQyBmdW5jdGlvbnMKKworQG5vaW5kZW50CitMaWJnY3J5cHQgcHJvdmlkZXMgYW4gQVBJIHRvIGFjY2VzcyBsb3cgbGV2ZWwgZnVuY3Rpb25zIHVzZWQgYnkgaXRzCitlbGxpcHRpYyBjdXJ2ZSBpbXBsZW1lbnRhdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyB0byBpbXBsZW1lbnQKK2VsbGlwdGljIGN1cnZlIG1ldGhvZHMgZm9yIHdoaWNoIG5vIGV4cGxpY2l0IHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorCitAZGVmdHlwZWZ1biBnY3J5X21waV9wb2ludF90IGdjcnlfbXBpX3BvaW50X25ldyAoQHd7dW5zaWduZWQgaW50IEB2YXJ7bmJpdHN9fSkKKworQWxsb2NhdGUgYSBuZXcgcG9pbnQgb2JqZWN0LCBpbml0aWFsaXplIGl0IHRvIDAsIGFuZCBhbGxvY2F0ZSBlbm91Z2gKK21lbW9yeSBmb3IgYSBwb2ludHMgb2YgYXQgbGVhc3QgQHZhcntuYml0c30uICBUaGlzIHByZS1hbGxvY2F0aW9uCit5aWVsZHMgb25seSBhIHNtYWxsIHBlcmZvcm1hbmNlIHdpbiBhbmQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkKK2JlY2F1c2UgTGliZ2NyeXB0IGF1dG9tYXRpY2FsbHkgcmUtYWxsb2NhdGVzIHRoZSByZXF1aXJlZCBtZW1vcnkuCitVc2luZyAwIGZvciBAdmFye25iaXRzfSBpcyB1c3VhbGx5IHRoZSByaWdodCB0aGluZyB0byBkby4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX3BvaW50X3JlbGVhc2UgKEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcntwb2ludH19KQorCitSZWxlYXNlIEB2YXJ7cG9pbnR9IGFuZCBmcmVlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4gIFBhc3NpbmcKK0Bjb2Rle05VTEx9IGlzIGFsbG93ZWQgYW5kIGlnbm9yZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9wb2ludF9nZXQgKEB3e2djcnlfbXBpX3QgQHZhcnt4fX0sIEAKKyBAd3tnY3J5X21waV90IEB2YXJ7eX19LCBAd3tnY3J5X21waV90IEB2YXJ7en19LCBACisgQHd7Z2NyeV9tcGlfcG9pbnRfdCBAdmFye3BvaW50fX0pCisKK1N0b3JlIHRoZSBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIGZyb20gQHZhcntwb2ludH0gaW50byB0aGUgTVBJcworQHZhcnt4fSwgQHZhcnt5fSwgYW5kIEB2YXJ7en0uICBJZiBhIGNvb3JkaW5hdGUgaXMgbm90IHJlcXVpcmVkLAorQGNvZGV7TlVMTH0gbWF5IGJlIHVzZWQgZm9yIEB2YXJ7eH0sIEB2YXJ7eX0sIG9yIEB2YXJ7en0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9wb2ludF9zbmF0Y2hfZ2V0IChAd3tnY3J5X21waV90IEB2YXJ7eH19LCBACisgQHd7Z2NyeV9tcGlfdCBAdmFye3l9fSwgQHd7Z2NyeV9tcGlfdCBAdmFye3p9fSwgQAorIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcntwb2ludH19KQorCitTdG9yZSB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIEB2YXJ7cG9pbnR9IGludG8gdGhlIE1QSXMKK0B2YXJ7eH0sIEB2YXJ7eX0sIGFuZCBAdmFye3p9LiAgSWYgYSBjb29yZGluYXRlIGlzIG5vdCByZXF1aXJlZCwKK0Bjb2Rle05VTEx9IG1heSBiZSB1c2VkIGZvciBAdmFye3h9LCBAdmFye3l9LCBvciBAdmFye3p9LiAgVGhlIG9iamVjdAorQHZhcntwb2ludH0gaXMgdGhlbiByZWxlYXNlZC4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZgorQGNvZGV7Z2NyeV9tcGlfcG9pbnRfZ2V0fSBhbmQgQGNvZGV7Z2NyeV9tcGlfcG9pbnRfcmVsZWFzZX0gaGFzIHRoZQorYWR2YW50YWdlIG9mIGF2b2lkaW5nIHNvbWUgZXh0cmEgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBjb3BpZXMuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ2NyeV9tcGlfcG9pbnRfdCBnY3J5X21waV9wb2ludF9zZXQgKCBACisgQHd7Z2NyeV9tcGlfcG9pbnRfdCBAdmFye3BvaW50fX0sIEAKKyBAd3tnY3J5X21waV90IEB2YXJ7eH19LCBAd3tnY3J5X21waV90IEB2YXJ7eX19LCBAd3tnY3J5X21waV90IEB2YXJ7en19KQorCitTdG9yZSB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIEB2YXJ7eH0sIEB2YXJ7eX0sIGFuZCBAdmFye3p9CitpbnRvIEB2YXJ7cG9pbnR9LiAgSWYgYSBjb29yZGluYXRlIGlzIGdpdmVuIGFzIEBjb2Rle05VTEx9LCB0aGUgdmFsdWUKKzAgaXMgdXNlZC4gIElmIEBjb2Rle05VTEx9IGlzIHVzZWQgZm9yIEB2YXJ7cG9pbnR9IGEgbmV3IHBvaW50IG9iamVjdAoraXMgYWxsb2NhdGVkIGFuZCByZXR1cm5lZC4gIFJldHVybnMgQHZhcntwb2ludH0gb3IgdGhlIG5ld2x5IGFsbG9jYXRlZAorcG9pbnQgb2JqZWN0LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGdjcnlfbXBpX3BvaW50X3QgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAoIEAKKyBAd3tnY3J5X21waV9wb2ludF90IEB2YXJ7cG9pbnR9fSwgQAorIEB3e2djcnlfbXBpX3QgQHZhcnt4fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt5fX0sIEB3e2djcnlfbXBpX3QgQHZhcnt6fX0pCisKK1N0b3JlIHRoZSBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIGZyb20gQHZhcnt4fSwgQHZhcnt5fSwgYW5kIEB2YXJ7en0KK2ludG8gQHZhcntwb2ludH0uICBJZiBhIGNvb3JkaW5hdGUgaXMgZ2l2ZW4gYXMgQGNvZGV7TlVMTH0sIHRoZSB2YWx1ZQorMCBpcyB1c2VkLiAgSWYgQGNvZGV7TlVMTH0gaXMgdXNlZCBmb3IgQHZhcntwb2ludH0gYSBuZXcgcG9pbnQgb2JqZWN0CitpcyBhbGxvY2F0ZWQgYW5kIHJldHVybmVkLiAgVGhlIE1QSXMgQHZhcnt4fSwgQHZhcnt5fSwgYW5kIEB2YXJ7en0gYXJlCityZWxlYXNlZC4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBAY29kZXtnY3J5X21waV9wb2ludF9zZXR9CithbmQgMyBjYWxscyB0byBAY29kZXtnY3J5X21waV9yZWxlYXNlfSBoYXMgdGhlIGFkdmFudGFnZSBvZiBhdm9pZGluZworc29tZSBleHRyYSBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGNvcGllcy4gIFJldHVybnMgQHZhcntwb2ludH0gb3IgdGhlCituZXdseSBhbGxvY2F0ZWQgcG9pbnQgb2JqZWN0LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BhbmNob3J7Z2NyeV9tcGlfZWNfbmV3fQorQGRlZnR5cGVmdW4gZ3BnX2Vycm9yX3QgZ2NyeV9tcGlfZWNfcF9uZXcgKEB3e2dwZ19jdHhfdCAqQHZhcntyX2N0eH19LCBACisgQHd7Z2NyeV9zZXhwX3QgQHZhcntrZXlwYXJhbX19LCBAd3tjb25zdCBjaGFyICpAdmFye2N1cnZlbmFtZX19KQorCitBbGxvY2F0ZSBhIG5ldyBjb250ZXh0IGZvciBlbGxpcHRpYyBjdXJ2ZSBvcGVyYXRpb25zLiAgSWYKK0B2YXJ7a2V5cGFyYW19IGlzIGdpdmVuIGl0IHNwZWNpZmllcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgY3VydmUKKyhAcHhyZWZ7ZWNjX2tleXBhcmFtfSkuICBJZiBAdmFye2N1cnZlbmFtZX0gaXMgZ2l2ZW4gaW4gYWRkaXRpb24gdG8KK0B2YXJ7a2V5cGFyYW19IGFuZCB0aGUga2V5IHBhcmFtZXRlcnMgZG8gbm90IGluY2x1ZGUgYSBuYW1lZCBjdXJ2ZQorcmVmZXJlbmNlLCB0aGUgc3RyaW5nIEB2YXJ7Y3VydmVuYW1lfSBpcyB1c2VkIHRvIGZpbGwgaW4gbWlzc2luZworcGFyYW1ldGVycy4gIElmIG9ubHkgQHZhcntjdXJ2ZW5hbWV9IGlzIGdpdmVuLCB0aGUgY29udGV4dCBpcworaW5pdGlhbGl6ZWQgZm9yIHRoaXMgbmFtZWQgY3VydmUuCisKK0lmIGEgcGFyYW1ldGVyIHNwZWNpZnlpbmcgYSBwb2ludCAoZS5nLiBAY29kZXtnfSBvciBAY29kZXtxfSkgaXMgbm90Citmb3VuZCwgdGhlIHBhcnNlciBsb29rcyBmb3IgYSBub24tZW5jb2RlZCBwb2ludCBieSBhcHBlbmRpbmcKK0Bjb2Rley54fSwgQGNvZGV7Lnl9LCBhbmQgQGNvZGV7Lnp9IHRvIHRoZSBwYXJhbWV0ZXIgbmFtZSBhbmQgbG9va2luZwordGhlbSBhbGwgdXAgdG8gY3JlYXRlIGEgcG9pbnQuICBBIHBhcmFtZXRlciB3aXRoIHRoZSBzdWZmaXggQGNvZGV7Lnp9CitpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gMS4KKworT24gc3VjY2VzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGFuZCBzdG9yZXMgdGhlIG5ldyBjb250ZXh0IG9iamVjdCBhdAorQHZhcntyX2N0eH07IHRoaXMgb2JqZWN0IGV2ZW50dWFsbHkgbmVlZHMgdG8gYmUgcmVsZWFzZWQKKyhAcHhyZWZ7Z2NyeV9jdHhfcmVsZWFzZX0pLiAgT24gZXJyb3IgdGhlIGZ1bmN0aW9uIHN0b3JlcyBAY29kZXtOVUxMfSBhdAorQHZhcntyX2N0eH0gYW5kIHJldHVybnMgYW4gZXJyb3IgY29kZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X21waV90IGdjcnlfbXBpX2VjX2dldF9tcGkgKCBACisgQHd7Y29uc3QgY2hhciAqQHZhcntuYW1lfX0sIEB3e2djcnlfY3R4X3QgQHZhcntjdHh9fSwgQHd7aW50IEB2YXJ7Y29weX19KQorCitSZXR1cm4gdGhlIE1QSSB3aXRoIEB2YXJ7bmFtZX0gZnJvbSB0aGUgY29udGV4dCBAdmFye2N0eH0uICBJZiBub3QKK2ZvdW5kIEBjb2Rle05VTEx9IGlzIHJldHVybmVkLiAgSWYgdGhlIHJldHVybmVkIE1QSSBtYXkgbGF0ZXIgYmUKK21vZGlmaWVkLCBpdCBpcyBzdWdnZXN0ZWQgdG8gcGFzcyBAY29kZXsxfSB0byBAdmFye2NvcHl9LCBzbyB0aGF0IHRoZQorZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGEgbW9kaWZpYWJsZSBjb3B5IG9mIHRoZSBNUEkgaXMgcmV0dXJuZWQuICBJZgorQGNvZGV7MH0gaXMgdXNlZCBmb3IgQHZhcntjb3B5fSwgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGEgY29uc3RhbnQKK2ZsYWdnZWQgTVBJLiAgSW4gYW55IGNhc2UgQGNvZGV7Z2NyeV9tcGlfcmVsZWFzZX0gbmVlZHMgdG8gYmUgY2FsbGVkCit0byByZWxlYXNlIHRoZSByZXN1bHQuICBGb3IgdmFsaWQgbmFtZXMgQHJlZntlY2Nfa2V5cGFyYW19LiAgSWYgdGhlCitwdWJsaWMga2V5IEBjb2Rle3F9IGlzIHJlcXVlc3RlZCBidXQgb25seSB0aGUgcHJpdmF0ZSBrZXkgQGNvZGV7ZH0gaXMKK2F2YWlsYWJsZSwgQGNvZGV7cX0gd2lsbCBiZSByZWNvbXB1dGVkIG9uIHRoZSBmbHkuICBJZiBhIHBvaW50CitwYXJhbWV0ZXIgaXMgcmVxdWVzdGVkIGl0IGlzIHJldHVybmVkIGFzIGFuIHVuY29tcHJlc3NlZAorZW5jb2RlZCBwb2ludCB1bmxlc3MgdGhlc2Ugc3BlY2lhbCBuYW1lcyBhcmUgdXNlZDoKK0B0YWJsZSBAdmFyCitAaXRlbSBxQEBlZGRzYQorUmV0dXJuIGFuIEVkRFNBIHN0eWxlIGNvbXByZXNzZWQgcG9pbnQuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvcgorVHdpc3RlZCBFZHdhcmRzIGN1cnZlcy4KK0BlbmQgdGFibGUKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X21waV9wb2ludF90IGdjcnlfbXBpX2VjX2dldF9wb2ludCAoIEAKKyBAd3tjb25zdCBjaGFyICpAdmFye25hbWV9fSwgQHd7Z2NyeV9jdHhfdCBAdmFye2N0eH19LCBAd3tpbnQgQHZhcntjb3B5fX0pCisKK1JldHVybiB0aGUgcG9pbnQgd2l0aCBAdmFye25hbWV9IGZyb20gdGhlIGNvbnRleHQgQHZhcntjdHh9LiAgSWYgbm90Citmb3VuZCBAY29kZXtOVUxMfSBpcyByZXR1cm5lZC4gIElmIHRoZSByZXR1cm5lZCBNUEkgbWF5IGxhdGVyIGJlCittb2RpZmllZCwgaXQgaXMgc3VnZ2VzdGVkIHRvIHBhc3MgQGNvZGV7MX0gdG8gQHZhcntjb3B5fSwgc28gdGhhdCB0aGUKK2Z1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUgTVBJIGlzIHJldHVybmVkLiAgSWYKK0Bjb2RlezB9IGlzIHVzZWQgZm9yIEB2YXJ7Y29weX0sIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIGNvbnN0YW50CitmbGFnZ2VkIHBvaW50LiAgSW4gYW55IGNhc2UgQGNvZGV7Z2NyeV9tcGlfcG9pbnRfcmVsZWFzZX0gbmVlZHMgdG8gYmUKK2NhbGxlZCB0byByZWxlYXNlIHRoZSByZXN1bHQuICBJZiB0aGUgcHVibGljIGtleSBAY29kZXtxfSBpcyByZXF1ZXN0ZWQKK2J1dCBvbmx5IHRoZSBwcml2YXRlIGtleSBAY29kZXtkfSBpcyBhdmFpbGFibGUsIEBjb2Rle3F9IHdpbGwgYmUKK3JlY29tcHV0ZWQgb24gdGhlIGZseS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBncGdfZXJyb3JfdCBnY3J5X21waV9lY19zZXRfbXBpICggQAorIEB3e2NvbnN0IGNoYXIgKkB2YXJ7bmFtZX19LCBAd3tnY3J5X21waV90IEB2YXJ7bmV3dmFsdWV9fSwgQAorIEB3e2djcnlfY3R4X3QgQHZhcntjdHh9fSkKKworU3RvcmUgdGhlIE1QSSBAdmFye25ld3ZhbHVlfSBhdCBAdmFye25hbWV9IGludG8gdGhlIGNvbnRleHQgQHZhcntjdHh9LgorT24gc3VjY2VzcyBAY29kZXswfSBpcyByZXR1cm5lZDsgb24gZXJyb3IgYW4gZXJyb3IgY29kZS4gIFZhbGlkIG5hbWVzCithcmUgdGhlIE1QSSBwYXJhbWV0ZXJzIG9mIGFuIGVsbGlwdGljIGN1cnZlIChAcHhyZWZ7ZWNjX2tleXBhcmFtfSkuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ3BnX2Vycm9yX3QgZ2NyeV9tcGlfZWNfc2V0X3BvaW50ICggQAorIEB3e2NvbnN0IGNoYXIgKkB2YXJ7bmFtZX19LCBAd3tnY3J5X21waV9wb2ludF90IEB2YXJ7bmV3dmFsdWV9fSwgQAorIEB3e2djcnlfY3R4X3QgQHZhcntjdHh9fSkKKworU3RvcmUgdGhlIHBvaW50IEB2YXJ7bmV3dmFsdWV9IGF0IEB2YXJ7bmFtZX0gaW50byB0aGUgY29udGV4dAorQHZhcntjdHh9LiAgT24gc3VjY2VzcyBAY29kZXswfSBpcyByZXR1cm5lZDsgb24gZXJyb3IgYW4gZXJyb3IgY29kZS4KK1ZhbGlkIG5hbWVzIGFyZSB0aGUgcG9pbnQgcGFyYW1ldGVycyBvZiBhbiBlbGxpcHRpYyBjdXJ2ZQorKEBweHJlZntlY2Nfa2V5cGFyYW19KS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoIEAKKyBAd3tnY3J5X21waV90IEB2YXJ7eH19LCBAd3tnY3J5X21waV90IEB2YXJ7eX19LCBACisgQHd7Z2NyeV9tcGlfcG9pbnRfdCBAdmFye3BvaW50fX0sIEB3e2djcnlfY3R4X3QgQHZhcntjdHh9fSkKKworQ29tcHV0ZSB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIGZyb20gdGhlIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgaW4KK0B2YXJ7cG9pbnR9IGFuZCBzdG9yZSB0aGVtIGludG8gQHZhcnt4fSBhbmQgQHZhcnt5fS4gIElmIG9uZQorY29vcmRpbmF0ZSBpcyBub3QgcmVxdWlyZWQsIEBjb2Rle05VTEx9IG1heSBiZSBwYXNzZWQgdG8gQHZhcnt4fSBvcgorQHZhcnt5fS4gIEB2YXJ7Y3R4fSBpcyB0aGUgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIGJlZW4gY3JlYXRlZCB1c2luZworQGNvZGV7Z2NyeV9tcGlfZWNfbmV3fS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igbm90IDAgaWYgQHZhcntwb2ludH0KK2lzIGF0IGluZmluaXR5LgorCitOb3RlIHRoYXQgeW91IGNhbiB1c2UgQGNvZGV7Z2NyeV9tcGlfZWNfc2V0X3BvaW50fSB3aXRoIHRoZSB2YWx1ZQorQGNvZGV7R0NSWU1QSV9DT05TVF9PTkV9IGZvciBAdmFye3p9IHRvIGNvbnZlcnQgYWZmaW5lIGNvb3JkaW5hdGVzCitiYWNrIGludG8gcHJvamVjdGl2ZSBjb29yZGluYXRlcy4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfZWNfZHVwICggQAorIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcnt1fX0sIEAKKyBAd3tnY3J5X2N0eF90IEB2YXJ7Y3R4fX0pCisKK0RvdWJsZSB0aGUgcG9pbnQgQHZhcnt1fSBvZiB0aGUgZWxsaXB0aWMgY3VydmUgZGVzY3JpYmVkIGJ5IEB2YXJ7Y3R4fQorYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byBAdmFye3d9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9tcGlfZWNfYWRkICggQAorIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcnt3fX0sIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcnt1fX0sIEAKKyBAd3tnY3J5X21waV9wb2ludF90IEB2YXJ7dn19LCBAd3tnY3J5X2N0eF90IEB2YXJ7Y3R4fX0pCisKK0FkZCB0aGUgcG9pbnRzIEB2YXJ7dX0gYW5kIEB2YXJ7dn0gb2YgdGhlIGVsbGlwdGljIGN1cnZlIGRlc2NyaWJlZCBieQorQHZhcntjdHh9IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gQHZhcnt3fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX2VjX211bCAoIEAKKyBAd3tnY3J5X21waV9wb2ludF90IEB2YXJ7d319LCBAd3tnY3J5X21waV90IEB2YXJ7bn19LCBACisgQHd7Z2NyeV9tcGlfcG9pbnRfdCBAdmFye3V9fSwgQHd7Z2NyeV9jdHhfdCBAdmFye2N0eH19KQorCitNdWx0aXBseSB0aGUgcG9pbnQgQHZhcnt1fSBvZiB0aGUgZWxsaXB0aWMgY3VydmUgZGVzY3JpYmVkIGJ5CitAdmFye2N0eH0gYnkgQHZhcntufSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIEB2YXJ7d30uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGdjcnlfbXBpX2VjX2N1cnZlX3BvaW50ICggQAorIEB3e2djcnlfbXBpX3BvaW50X3QgQHZhcntwb2ludH19LCBAd3tnY3J5X2N0eF90IEB2YXJ7Y3R4fX0pCisKK1JldHVybiB0cnVlIGlmIEB2YXJ7cG9pbnR9IGlzIG9uIHRoZSBlbGxpcHRpYyBjdXJ2ZSBkZXNjcmliZWQgYnkKK0B2YXJ7Y3R4fS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0Bub2RlIE1pc2NlbGxhbmVvdXMKK0BzZWN0aW9uIE1pc2NlbGxhbmVvdXMKKworQW4gTVBJIGRhdGEgdHlwZSBpcyBhbGxvd2VkIHRvIGJlIGBgbWlzdXNlZCcnIHRvIHN0b3JlIGFuIGFyYml0cmFyeQordmFsdWUuICBUd28gZnVuY3Rpb25zIGltcGxlbWVudCB0aGlzIGtsdWRnZToKKworQGRlZnR5cGVmdW4gZ2NyeV9tcGlfdCBnY3J5X21waV9zZXRfb3BhcXVlIChAd3tnY3J5X21waV90IEB2YXJ7YX19LCBAd3t2b2lkICpAdmFye3B9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bmJpdHN9fSkKKworU3RvcmUgQHZhcntuYml0c30gb2YgdGhlIHZhbHVlIEB2YXJ7cH0gcG9pbnRzIHRvIGluIEB2YXJ7YX0gYW5kIG1hcmsKK0B2YXJ7YX0gYXMgYW4gb3BhcXVlIHZhbHVlIChpLmUuIGFuIHZhbHVlIHRoYXQgY2FuJ3QgYmUgdXNlZCBmb3IgYW55CittYXRoIGNhbGN1bGF0aW9uIGFuZCBpcyBvbmx5IHVzZWQgdG8gc3RvcmUgYW4gYXJiaXRyYXJ5IGJpdCBwYXR0ZXJuIGluCitAdmFye2F9KS4gIE93bmVyc2hpcCBvZiBAdmFye3B9IGlzIHRha2VuIGJ5IHRoaXMgZnVuY3Rpb24gYW5kIHRodXMgdGhlCit1c2VyIG1heSBub3QgdXNlIGRlcmVmZXJlbmNlIHRoZSBwYXNzZWQgdmFsdWUgYW55bW9yZS4gIEl0IGlzIHJlcXVpcmVkCit0aGF0IHRoZW0gbWVtb3J5IHJlZmVyZW5jZWQgYnkgQHZhcntwfSBoYXMgYmVlbiBhbGxvY2F0ZWQgaW4gYSB3YXkKK3RoYXQgQGNvZGV7Z2NyeV9mcmVlfSBpcyBhYmxlIHRvIHJlbGVhc2UgaXQuCisKK1dBUk5JTkc6IE5ldmVyIHVzZSBhbiBvcGFxdWUgTVBJIGZvciBhY3R1YWwgbWF0aCBvcGVyYXRpb25zLiAgVGhlIG9ubHkKK3ZhbGlkIGZ1bmN0aW9ucyBhcmUgZ2NyeV9tcGlfZ2V0X29wYXF1ZSBhbmQgZ2NyeV9tcGlfcmVsZWFzZS4gIFVzZQorZ2NyeV9tcGlfc2NhbiB0byBjb252ZXJ0IGEgc3RyaW5nIG9mIGFyYml0cmFyeSBieXRlcyBpbnRvIGFuIE1QSS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBnY3J5X21waV90IGdjcnlfbXBpX3NldF9vcGFxdWVfY29weSAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7Y29uc3Qgdm9pZCAqQHZhcntwfX0sIEB3e3Vuc2lnbmVkIGludCBAdmFye25iaXRzfX0pCisKK1NhbWUgYXMgQGNvZGV7Z2NyeV9tcGlfc2V0X29wYXF1ZX0gYnV0IG93bmVyc2hpcCBvZiBAdmFye3B9IGlzIG5vdAordGFrZW4gaW5zdGVhZCBhIGNvcHkgb2YgQHZhcntwfSBpcyB1c2VkLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4ge3ZvaWQgKn0gZ2NyeV9tcGlfZ2V0X29wYXF1ZSAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQHd7dW5zaWduZWQgaW50ICpAdmFye25iaXRzfX0pCisKK1JldHVybiBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIHZhbHVlIHN0b3JlZCBpbiBAdmFye2F9IGFuZCByZXR1cm4gaXRzCitzaXplIGluIEB2YXJ7bmJpdHN9LiAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHN0aWxsIG93bmVkIGJ5CitAdmFye2F9IGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgdXNlZCBmb3IgYW4gbm9uLW9wYXF1ZQorTVBJLgorQGVuZCBkZWZ0eXBlZnVuCisKK0VhY2ggTVBJIGhhcyBhbiBhc3NvY2lhdGVkIHNldCBvZiBmbGFncyBmb3Igc3BlY2lhbCBwdXJwb3Nlcy4gIFRoZQorY3VycmVudGx5IGRlZmluZWQgZmxhZ3MgYXJlOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEdDUllNUElfRkxBR19TRUNVUkUKK1NldHRpbmcgdGhpcyBmbGFnIGNvbnZlcnRzIEB2YXJ7YX0gaW50byBhbiBNUEkgc3RvcmVkIGluICJzZWN1cmUKK21lbW9yeSIuICBDbGVhcmluZyB0aGlzIGZsYWcgaXMgbm90IGFsbG93ZWQuCitAaXRlbSBHQ1JZTVBJX0ZMQUdfT1BBUVVFCitUaGlzIGlzIGFuIGludGVyYW5sIGZsYWcsIGluZGljYXRpbmcgdGhlIGFuIG9wYXF1ZSB2YWx1dWUgYW5kIG5vdCBhbgoraW50ZWdlciBpcyBzdG9yZWQuICBUaGlzIGlzIGFuIHJlYWQtb25seSBmbGFnOyBpdCBtYXkgbm90IGJlIHNldCBvcgorY2xlYXJlZC4KK0BpdGVtIEdDUllNUElfRkxBR19JTU1VVEFCTEUKK0lmIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBNUEkgaXMgbWFya2VkIGFzIGltbXV0YWJsZS4gIFNldHRpbmcgb3IKK2NoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGF0IE1QSSBpcyBpZ25vcmVkIGFuZCBhbiBlcnJvciBtZXNzYWdlIGlzCitsb2dnZWQuICBUaGUgZmxhZyBpcyBzb21ldGltZXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCitAaXRlbSBHQ1JZTVBJX0ZMQUdfQ09OU1QKK0lmIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBNUEkgaXMgbWFya2VkIGFzIGEgY29uc3RhbnQgYW5kIGFzIGltbXV0YWJsZQorU2V0dGluZyBvciBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhhdCBNUEkgaXMgaWdub3JlZCBhbmQgYW4gZXJyb3IKK21lc3NhZ2UgaXMgbG9nZ2VkLiAgU3VjaCBhbiBNUEkgd2lsbCBuZXZlciBiZSBkZWFsbG9jYXRlZCBhbmQgbWF5IHRodXMKK2JlIHVzZWQgd2l0aG91dCBjb3B5aW5nLiAgTm90ZSB0aGF0IHVzaW5nIGdjcnlfbXBpX2NvcHkgd2lsbCByZXR1cm4gYQorY29weSBvZiB0aGF0IGNvbnN0YW50IHdpdGggdGhpcyBhbmQgdGhlIGltbXV0YWJsZSBmbGFnIGNsZWFyZWQuICBBIGZldworY29tbW9ubHkgdXNlZCBjb25zdGFudHMgYXJlIHByZS1kZWZpbmVkIGFuZCBhY2Nlc3NpYmxlIHVzaW5nIHRoZQorbWFjcm9zIEBjb2Rle0dDUllNUElfQ09OU1RfT05FfSwgQGNvZGV7R0NSWU1QSV9DT05TVF9UV099LAorQGNvZGV7R0NSWU1QSV9DT05TVF9USFJFRX0sIEBjb2Rle0dDUllNUElfQ09OU1RfRk9VUn0sIGFuZAorQGNvZGV7R0NSWU1QSV9DT05TVF9FSUdIVH0uCitAaXRlbSBHQ1JZTVBJX0ZMQUdfVVNFUjEKK0BpdGVteCBHQ1JZTVBJX0ZMQUdfVVNFUjIKK0BpdGVteCBHQ1JZTVBJX0ZMQUdfVVNFUjMKK0BpdGVteCBHQ1JZTVBJX0ZMQUdfVVNFUjQKK1RoZXNlIGZsYWdzIGFyZSByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSBhcHBsaWNhdGlvbi4KK0BlbmQgdGFibGUKKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9zZXRfZmxhZyAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQAorIEB3e2VudW0gZ2NyeV9tcGlfZmxhZyBAdmFye2ZsYWd9fSkKKworU2V0IHRoZSBAdmFye2ZsYWd9IGZvciB0aGUgTVBJIEB2YXJ7YX0uICBUaGUgb25seSBhbGxvd2VkIGZsYWdzIGFyZQorQGNvZGV7R0NSWU1QSV9GTEFHX1NFQ1VSRX0sIEBjb2Rle0dDUllNUElfRkxBR19JTU1VVEFCTEV9LCBhbmQKK0Bjb2Rle0dDUllNUElfRkxBR19DT05TVH0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X21waV9jbGVhcl9mbGFnIChAd3tnY3J5X21waV90IEB2YXJ7YX19LCBACisgQHd7ZW51bSBnY3J5X21waV9mbGFnIEB2YXJ7ZmxhZ319KQorCitDbGVhciBAdmFye2ZsYWd9IGZvciB0aGUgbXVsdGktcHJlY2lzaW9uLWludGVnZXJzIEB2YXJ7YX0uICBUaGUgb25seQorYWxsb3dlZCBmbGFnIGlzIEBjb2Rle0dDUllNUElfRkxBR19JTU1VVEFCTEV9IGJ1dCBvbmx5IGlmCitAY29kZXtHQ1JZTVBJX0ZMQUdfQ09OU1R9IGlzIG5vdCBzZXQuICBJZiBAY29kZXtHQ1JZTVBJX0ZMQUdfQ09OU1R9IGlzCitzZXQsIGNsZWFyaW5nIEBjb2Rle0dDUllNUElfRkxBR19JTU1VVEFCTEV9IHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuCitAZW5kIGRlZnR5cGVmdW4KK28KK0BkZWZ0eXBlZnVuIGludCBnY3J5X21waV9nZXRfZmxhZyAoQHd7Z2NyeV9tcGlfdCBAdmFye2F9fSwgQAorIEB3e2VudW0gZ2NyeV9tcGlfZmxhZyBAdmFye2ZsYWd9fSkKKworUmV0dXJuIHRydWUgaWYgQHZhcntmbGFnfSBpcyBzZXQgZm9yIEB2YXJ7YX0uCitAZW5kIGRlZnR5cGVmdW4KKworCitUbyBwdXQgYSByYW5kb20gdmFsdWUgaW50byBhbiBNUEksIHRoZSBmb2xsb3dpbmcgY29udmVuaWVuY2UgZnVuY3Rpb24KK21heSBiZSB1c2VkOgorCitAZGVmdHlwZWZ1biB2b2lkIGdjcnlfbXBpX3JhbmRvbWl6ZSAoQHd7Z2NyeV9tcGlfdCBAdmFye3d9fSwgQHd7dW5zaWduZWQgaW50IEB2YXJ7bmJpdHN9fSwgQHd7ZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBAdmFye2xldmVsfX0pCisKK1NldCB0aGUgbXVsdGktcHJlY2lzaW9uLWludGVnZXJzIEB2YXJ7d30gdG8gYSByYW5kb20gbm9uLW5lZ2F0aXZlIG51bWJlciBvZgorQHZhcntuYml0c30sIHVzaW5nIHJhbmRvbSBkYXRhIHF1YWxpdHkgb2YgbGV2ZWwgQHZhcntsZXZlbH0uICBJbiBjYXNlCitAdmFye25iaXRzfSBpcyBub3QgYSBtdWx0aXBsZSBvZiBhIGJ5dGUsIEB2YXJ7bmJpdHN9IGlzIHJvdW5kZWQgdXAgdG8KK3RoZSBuZXh0IGJ5dGUgYm91bmRhcnkuICBXaGVuIHVzaW5nIGEgQHZhcntsZXZlbH0gb2YKK0Bjb2Rle0dDUllfV0VBS19SQU5ET019IHRoaXMgZnVuY3Rpb24gbWFrZXMgdXNlIG9mCitAY29kZXtnY3J5X2NyZWF0ZV9ub25jZX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiogUHJpbWUgbnVtYmVycyAqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgUHJpbWUgbnVtYmVycworQGNoYXB0ZXIgUHJpbWUgbnVtYmVycworCitAbWVudQorKiBHZW5lcmF0aW9uOjogICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uIG9mIG5ldyBwcmltZSBudW1iZXJzLgorKiBDaGVja2luZzo6ICAgICAgICAgICAgICAgICAgICBDaGVja2luZyBpZiBhIGdpdmVuIG51bWJlciBpcyBwcmltZS4KK0BlbmQgbWVudQorCitAbm9kZSBHZW5lcmF0aW9uCitAc2VjdGlvbiBHZW5lcmF0aW9uCisKK0BkZWZ0eXBlZnVuIGdjcnlfZXJyb3JfdCBnY3J5X3ByaW1lX2dlbmVyYXRlIChnY3J5X21waV90ICpAdmFye3ByaW1lfSx1bnNpZ25lZCBpbnQgQHZhcntwcmltZV9iaXRzfSwgdW5zaWduZWQgaW50IEB2YXJ7ZmFjdG9yX2JpdHN9LCBnY3J5X21waV90ICoqQHZhcntmYWN0b3JzfSwgZ2NyeV9wcmltZV9jaGVja19mdW5jX3QgQHZhcntjYl9mdW5jfSwgdm9pZCAqQHZhcntjYl9hcmd9LCBnY3J5X3JhbmRvbV9sZXZlbF90IEB2YXJ7cmFuZG9tX2xldmVsfSwgdW5zaWduZWQgaW50IEB2YXJ7ZmxhZ3N9KQorCitHZW5lcmF0ZSBhIG5ldyBwcmltZSBudW1iZXIgb2YgQHZhcntwcmltZV9iaXRzfSBiaXRzIGFuZCBzdG9yZSBpdCBpbgorQHZhcntwcmltZX0uICBJZiBAdmFye2ZhY3Rvcl9iaXRzfSBpcyBub24temVybywgb25lIG9mIHRoZSBwcmltZSBmYWN0b3JzCitvZiAoQHZhcntwcmltZX0gLSAxKSAvIDIgbXVzdCBiZSBAdmFye2ZhY3Rvcl9iaXRzfSBiaXRzIGxvbmcuICBJZgorQHZhcntmYWN0b3JzfSBpcyBub24temVybywgYWxsb2NhdGUgYSBuZXcsIEBjb2Rle05VTEx9LXRlcm1pbmF0ZWQgYXJyYXkKK2hvbGRpbmcgdGhlIHByaW1lIGZhY3RvcnMgYW5kIHN0b3JlIGl0IGluIEB2YXJ7ZmFjdG9yc30uICBAdmFye2ZsYWdzfQorbWlnaHQgYmUgdXNlZCB0byBpbmZsdWVuY2UgdGhlIHByaW1lIG51bWJlciBnZW5lcmF0aW9uIHByb2Nlc3MuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yIChnY3J5X21waV90ICpAdmFye3JfZ30sIGdjcnlfbXBpX3QgQHZhcntwcmltZX0sIGdjcnlfbXBpX3QgKkB2YXJ7ZmFjdG9yc30sIGdjcnlfbXBpX3QgQHZhcntzdGFydF9nfSkKKworRmluZCBhIGdlbmVyYXRvciBmb3IgQHZhcntwcmltZX0gd2hlcmUgdGhlIGZhY3Rvcml6YXRpb24gb2YKKyhAdmFye3ByaW1lfS0xKSBpcyBpbiB0aGUgQGNvZGV7TlVMTH0gdGVybWluYXRlZCBhcnJheSBAdmFye2ZhY3RvcnN9LgorUmV0dXJuIHRoZSBnZW5lcmF0b3IgYXMgYSBuZXdseSBhbGxvY2F0ZWQgTVBJIGluIEB2YXJ7cl9nfS4gIElmCitAdmFye3N0YXJ0X2d9IGlzIG5vdCBOVUxMLCB1c2UgdGhpcyBhcyB0aGUgc3RhcnQgZm9yIHRoZSBzZWFyY2guCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBnY3J5X3ByaW1lX3JlbGVhc2VfZmFjdG9ycyAoZ2NyeV9tcGlfdCAqQHZhcntmYWN0b3JzfSkKKworQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgQHZhcntmYWN0b3JzfSBhcnJheS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9kZSBDaGVja2luZworQHNlY3Rpb24gQ2hlY2tpbmcKKworQGRlZnR5cGVmdW4gZ2NyeV9lcnJvcl90IGdjcnlfcHJpbWVfY2hlY2sgKGdjcnlfbXBpX3QgQHZhcntwfSwgdW5zaWduZWQgaW50IEB2YXJ7ZmxhZ3N9KQorCitDaGVjayB3aGV0aGVyIHRoZSBudW1iZXIgQHZhcntwfSBpcyBwcmltZS4gIFJldHVybnMgemVybyBpbiBjYXNlIEB2YXJ7cH0KK2lzIGluZGVlZCBhIHByaW1lLCByZXR1cm5zIEBjb2Rle0dQR19FUlJfTk9fUFJJTUV9IGluIGNhc2UgQHZhcntwfSBpcworbm90IGEgcHJpbWUgYW5kIGEgZGlmZmVyZW50IGVycm9yIGNvZGUgaW4gY2FzZSBzb21ldGhpbmcgd2VudCBob3JyaWJseQord3JvbmcuCitAZW5kIGRlZnR5cGVmdW4KKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKiogVXRpbGl0aWVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgVXRpbGl0aWVzCitAY2hhcHRlciBVdGlsaXRpZXMKKworQG1lbnUKKyogTWVtb3J5IGFsbG9jYXRpb246OiAgIEZ1bmN0aW9ucyByZWxhdGVkIHdpdGggbWVtb3J5IGFsbG9jYXRpb24uCisqIENvbnRleHQgbWFuYWdlbWVudDo6ICBGdW5jdGlvbnMgcmVsYXRlZCB3aXRoIGNvbnRleHQgbWFuYWdlbWVudC4KKyogQnVmZmVyIGRlc2NyaXB0aW9uOjogIEEgZGF0YSB0eXBlIHRvIGRlc2NyaWJlIGJ1ZmZlcnMuCitAZW5kIG1lbnUKKworCitAbm9kZSBNZW1vcnkgYWxsb2NhdGlvbgorQHNlY3Rpb24gTWVtb3J5IGFsbG9jYXRpb24KKworQGRlZnR5cGVmdW4ge3ZvaWQgKn0gZ2NyeV9tYWxsb2MgKHNpemVfdCBAdmFye259KQorCitUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGFsbG9jYXRlIEB2YXJ7bn0gYnl0ZXMgb2YgbWVtb3J5LiAgT24gc3VjY2VzcworaXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBhcmVhLCBpbiBhbiBvdXQtb2YtY29yZSBjb25kaXRpb24sCitpdCByZXR1cm5zIE5VTEwuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4ge3ZvaWQgKn0gZ2NyeV9tYWxsb2Nfc2VjdXJlIChzaXplX3QgQHZhcntufSkKK0xpa2UgQGNvZGV7Z2NyeV9tYWxsb2N9LCBidXQgdXNlcyBzZWN1cmUgbWVtb3J5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHt2b2lkICp9IGdjcnlfY2FsbG9jIChzaXplX3QgQHZhcntufSwgc2l6ZV90IEB2YXJ7bX0pCisKK1RoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgY2xlYXJlZCBibG9jayBvZiBtZW1vcnkgKGkuZS4gaW5pdGlhbGl6ZWQgd2l0aAoremVybyBieXRlcykgbG9uZyBlbm91Z2ggdG8gY29udGFpbiBhIHZlY3RvciBvZiBAdmFye259IGVsZW1lbnRzLCBlYWNoIG9mCitzaXplIEB2YXJ7bX0gYnl0ZXMuICBPbiBzdWNjZXNzIGl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkKK2Jsb2NrOyBpbiBhbiBvdXQtb2YtY29yZSBjb25kaXRpb24sIGl0IHJldHVybnMgTlVMTC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7dm9pZCAqfSBnY3J5X2NhbGxvY19zZWN1cmUgKHNpemVfdCBAdmFye259LCBzaXplX3QgQHZhcnttfSkKK0xpa2UgQGNvZGV7Z2NyeV9jYWxsb2N9LCBidXQgdXNlcyBzZWN1cmUgbWVtb3J5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHt2b2lkICp9IGdjcnlfcmVhbGxvYyAodm9pZCAqQHZhcntwfSwgc2l6ZV90IEB2YXJ7bn0pCisKK1RoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcmVzaXplIHRoZSBtZW1vcnkgYXJlYSBwb2ludGVkIHRvIGJ5IEB2YXJ7cH0gdG8KK0B2YXJ7bn0gYnl0ZXMuICBPbiBzdWNjZXNzIGl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgbWVtb3J5CithcmVhLCBpbiBhbiBvdXQtb2YtY29yZSBjb25kaXRpb24sIGl0IHJldHVybnMgTlVMTC4gIERlcGVuZGluZyBvbgord2hldGhlciB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgQHZhcntwfSBpcyBzZWN1cmUgbWVtb3J5IG9yIG5vdCwKK2djcnlfcmVhbGxvYyB0cmllcyB0byB1c2Ugc2VjdXJlIG1lbW9yeSBhcyB3ZWxsLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ2NyeV9mcmVlICh2b2lkICpAdmFye3B9KQorUmVsZWFzZSB0aGUgbWVtb3J5IGFyZWEgcG9pbnRlZCB0byBieSBAdmFye3B9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQG5vZGUgQ29udGV4dCBtYW5hZ2VtZW50CitAc2VjdGlvbiBDb250ZXh0IG1hbmFnZW1lbnQKKworU29tZSBmdW5jdGlvbiBtYWtlIHVzZSBvZiBhIGNvbnRleHQgb2JqZWN0LiAgQXMgb2Ygbm93IHRoZXJlIGFyZSBvbmx5CithIGZldyBtYXRoIGZ1bmN0aW9ucy4gSG93ZXZlciwgZnV0dXJlIHZlcnNpb25zIG9mIExpYmdjcnlwdCBtYXkgbWFrZQorbW9yZSB1c2Ugb2YgdGhpcyBjb250ZXh0IG9iamVjdC4KKworQGRlZnRwIHtEYXRhIHR5cGV9IHtnY3J5X2N0eF90fQorVGhpcyB0eXBlIGlzIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGdlbmVyYWwgcHVycG9zZSBjb250ZXh0IG9iamVjdC4KK0BlbmQgZGVmdHAKKworQGFuY2hvcntnY3J5X2N0eF9yZWxlYXNlfQorQGRlZnR5cGVmdW4gdm9pZCBnY3J5X2N0eF9yZWxlYXNlIChnY3J5X2N0eF90IEB2YXJ7Y3R4fSkKK1JlbGVhc2UgdGhlIGNvbnRleHQgb2JqZWN0IEB2YXJ7Y3R4fSBhbmQgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgQQorQGNvZGV7TlVMTH0gcGFzc2VkIGFzIEB2YXJ7Y3R4fSBpcyBpZ25vcmVkLgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2RlIEJ1ZmZlciBkZXNjcmlwdGlvbgorQHNlY3Rpb24gQnVmZmVyIGRlc2NyaXB0aW9uCisKK1RvIGhlbHAgaGFzaGluZyBub24tY29udGlndW91cyBhcmVhcyBvZiBtZW1vcnkgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YQordHlwZSBpcyBkZWZpbmVkOgorCitAZGVmdHAge0RhdGEgdHlwZX0ge2djcnlfYnVmZmVyX3R9CitUaGlzIHR5cGUgaXMgYSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBidWZmZXIuICBUaGUgdXNlciBzaG91bGQgbWFrZQorc3VyZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHRvIHplcm8uICBUaGUgYXZhaWxhYmxlIGZpZWxkcworb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlOgorCitAdGFibGUgQGNvZGUKKyAgQGl0ZW0gLnNpemUKKyAgVGhpcyBpcyBlaXRoZXIgMCBmb3Igbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9yIGluZGljYXRlcyB0aGUKKyAgYWxsb2NhdGVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLgorICBAaXRlbSAub2ZmCisgIFRoaXMgaXMgdGhlIG9mZnNldCBpbnRvIHRoZSBidWZmZXIuCisgIEBpdGVtIC5sZW4KKyAgVGhpcyBpcyB0aGUgdmFsaWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIgc3RhcnRpbmcgYXQgQGNvZGV7Lm9mZn0uCisgIEBpdGVtIC5kYXRhCisgIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlci4KKyAgQGVuZCB0YWJsZQorQGVuZCBkZWZ0cAorCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqICBUb29scyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgVG9vbHMKK0BjaGFwdGVyIFRvb2xzCisKK0BtZW51CisqIGhtYWMyNTY6OiBBIHN0YW5kYWxvbmUgSE1BQy1TSEEtMjU2IGltcGxlbWVudGF0aW9uCitAZW5kIG1lbnUKKworQG1hbnBhZ2UgaG1hYzI1Ni4xCitAbm9kZSBobWFjMjU2CitAc2VjdGlvbiBBIEhNQUMtU0hBLTI1NiB0b29sCitAaWZzZXQgbWFudmVyYgorLkIgaG1hYzI1NgorXC0gQ29tcHV0ZSBhbiBITUFDLVNIQS0yNTYgTUFDCitAZW5kIGlmc2V0CisKK0BtYW5zZWN0IHN5bm9wc2lzCitAaWZzZXQgbWFudmVyYgorLkIgIGhtYWMyNTYKKy5SQiBbIFwtXC1iaW5hcnkgXQorLkkga2V5CisuSSBbRklMRU5BTUVdCitAZW5kIGlmc2V0CisKK0BtYW5zZWN0IGRlc2NyaXB0aW9uCitUaGlzIGlzIGEgc3RhbmRhbG9uZSBITUFDLVNIQS0yNTYgaW1wbGVtZW50YXRpb24gdXNlZCB0byBjb21wdXRlIGFuCitITUFDLVNIQS0yNTYgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlLiAgVGhlIHRvb2wgaGFzIG9yaWdpbmFsbHkKK2JlZW4gZGV2ZWxvcGVkIGFzIGEgc2Vjb25kIGltcGxlbWVudGF0aW9uIGZvciBMaWJnY3J5cHQgdG8gYWxsb3cKK2NvbXBhcmluZyBhZ2FpbnN0IHRoZSBwcmltYXJ5IGltcGxlbWVudGF0aW9uIGFuZCB0byBiZSB1c2VkIGZvcgoraW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2tzLiAgSXQgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzZW5zaXRpdmUgZGF0YQorYmVjYXVzZSBubyBtZWNoYW5pc21zIHRvIGNsZWFyIHRoZSBzdGFjayBldGMgYXJlIHVzZWQuCisKK1RoZSBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gaW4gYSBoaWdobHkgcG9ydGFibGUgbWFubmVyIGFuZCByZXF1aXJlcworb25seSBhIGZldyBzdGFuZGFyZCBkZWZpbml0aW9ucyB0byBiZSBwcm92aWRlZCBpbiBhIGNvbmZpZy5oIGZpbGUuCisKK0Bub2luZGVudAorQGNvbW1hbmR7aG1hYzI1Nn0gaXMgY29tbW9ubHkgaW52b2tlZCBhcworCitAZXhhbXBsZQoraG1hYzI1NiAiVGhpcyBpcyBteSBrZXkiIGZvby50eHQKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQKK1RoaXMgY29tcHV0ZSB0aGUgTUFDIG9uIHRoZSBmaWxlIEBmaWxle2Zvby50eHR9IHVzaW5nIHRoZSBrZXkgZ2l2ZW4gb24KK3RoZSBjb21tYW5kIGxpbmUuCisKK0BtYW5zZWN0IG9wdGlvbnMKK0Bub2luZGVudAorQGNvbW1hbmR7aG1hYzI1Nn0gdW5kZXJzdGFuZHMgdGhlc2Ugb3B0aW9uczoKKworQHRhYmxlIEBnbnVwZ3RhYm9wdAorCitAaXRlbSAtLWJpbmFyeQorUHJpbnQgdGhlIE1BQyBhcyBhIGJpbmFyeSBzdHJpbmcuICBUaGUgZGVmYXVsdCBpcyB0byBwcmludCB0aGUgTUFDCitlbmNvZGVkIGhhcyBsb3dlciBjYXNlIGhleCBkaWdpdHMuCisKK0BpdGVtIC0tdmVyc2lvbgorUHJpbnQgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBhbmQgZXhpdC4KKworQGVuZCB0YWJsZQorCitAbWFuc2VjdCBzZWUgYWxzbworQGlmc2V0IGlzbWFuCitAY29tbWFuZHtzaGEyNTZzdW19KDEpCitAZW5kIGlmc2V0CitAbWFucGF1c2UKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKiogIEFyY2hpdGVjdXJlIE92ZXJ2aWV3ICAqKioqKioqKioqKioqKioqKgorQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQG5vZGUgQXJjaGl0ZWN0dXJlCitAY2hhcHRlciBBcmNoaXRlY3R1cmUKKworVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIG9mIExpYmdjcnlwdC4KKworTGliZ2NyeXB0IGlzIGEgZnVuY3Rpb24gbGlicmFyeSB3cml0dGVuIGluIElTTyBDLTkwLiAgQW55IGNvbXBsaWFudAorY29tcGlsZXIgc2hvdWxkIGJlIGFibGUgdG8gYnVpbGQgTGliZ2NyeXB0IGFzIGxvbmcgYXMgdGhlIHRhcmdldCBpcworZWl0aGVyIGEgUE9TSVggcGxhdGZvcm0gb3IgY29tcGF0aWJsZSB0byB0aGUgQVBJIHVzZWQgYnkgV2luZG93cyBOVC4KK1Byb3Zpc2lvbnMgaGF2ZSBiZWVuIHRha2Ugc28gdGhhdCB0aGUgbGlicmFyeSBjYW4gYmUgZGlyZWN0bHkgdXNlZCBmcm9tCitDKysgYXBwbGljYXRpb25zOyBob3dldmVyIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIgaXMgbm90IHN1cHBvcnRlZC4KKworQnVpbGRpbmcgTGliZ2NyeXB0IGlzIGRvbmUgYnkgdXNpbmcgdGhlIGNvbW1vbiBAY29kZXsuL2NvbmZpZ3VyZSAmJiBtYWtlfQorYXBwcm9hY2guICBUaGUgY29uZmlndXJlIGNvbW1hbmQgaXMgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24KK2FuZCBhcyBhIHBvcnRhYmxlIHNoZWxsIHNjcmlwdCBpdCB3b3JrcyBvbiBhbnkgVW5peC1hbGlrZSBzeXN0ZW0uICBUaGUKK3Jlc3VsdCBvZiBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0IGFyZSBhIEMgaGVhZGVyIGZpbGUKKyhAZmlsZXtjb25maWcuaH0pLCBjdXN0b21pemVkIE1ha2VmaWxlcywgdGhlIHNldHVwIG9mIHN5bWJvbGljIGxpbmtzIGFuZAorYSBmZXcgb3RoZXIgdGhpbmdzLiAgQWZ0ZXIgdGhhdCB0aGUgbWFrZSB0b29sIGJ1aWxkcyBhbmQgb3B0aW9uYWxseQoraW5zdGFsbHMgdGhlIGxpYnJhcnkgYW5kIHRoZSBkb2N1bWVudGF0aW9uLiAgU2VlIHRoZSBmaWxlcworQGZpbGV7SU5TVEFMTH0gYW5kIEBmaWxle1JFQURNRX0gaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gb24gaG93IHRvIGRvCit0aGlzLgorCitMaWJnY3J5cHQgaXMgZGV2ZWxvcGVkIHVzaW5nIGEgU3VidmVyc2lvbkBmb290bm90ZXtBIHZlcnNpb24gY29udHJvbAorc3lzdGVtIGF2YWlsYWJsZSBmb3IgbWFueSBwbGF0Zm9ybXN9IHJlcG9zaXRvcnkuICBBbHRob3VnaCBhbGwgcmVsZWFzZWQKK3ZlcnNpb25zIGFyZSB0YWdnZWQgaW4gdGhpcyByZXBvc2l0b3J5LCB0aGV5IHNob3VsZCBub3QgYmUgdXNlZCB0byBidWlsZAorcHJvZHVjdGlvbiB2ZXJzaW9ucyBvZiBMaWJnY3J5cHQuICBJbnN0ZWFkIHJlbGVhc2VkIHRhcmJhbGxzIHNob3VsZCBiZQordXNlZC4gIFRoZXNlIHRhcmJhbGxzIGFyZSBhdmFpbGFibGUgZnJvbSBzZXZlcmFsIHBsYWNlcyB3aXRoIHRoZSBtYXN0ZXIKK2NvcHkgYXQgQGluZGljYXRldXJse2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdjcnlwdC99LgorQW5ub3VuY2VtZW50cyBvZiBuZXcgcmVsZWFzZXMgYXJlIHBvc3RlZCB0byB0aGUKK0BpbmRpY2F0ZXVybHtnbnVwZy1hbm5vdW5jZUBAZ251cGcub3JnfSBtYWlsaW5nIGxpc3RAZm9vdG5vdGV7U2VlCitAdXJse2h0dHA6Ly93d3cuZ251cGcub3JnL2RvY3VtZW50YXRpb24vbWFpbGluZy1saXN0cy5lbi5odG1sfSBmb3IKK2RldGFpbHMufS4KKworCitAZmxvYXQgRmlndXJlLGZpZzpzdWJzeXN0ZW1zCitAY2FwdGlvbntMaWJnY3J5cHQgc3Vic3lzdGVtc30KK0BjZW50ZXIgQGltYWdle2xpYmdjcnlwdC1tb2R1bGVzLCAxNTBtbSwsTGliZ2NyeXB0IHN1YnN5c3RlbXN9CitAZW5kIGZsb2F0CisKK0xpYmdjcnlwdCBjb25zaXN0cyBvZiBzZXZlcmFsIHN1YnN5c3RlbXMgKEBweHJlZntmaWc6c3Vic3lzdGVtc30pIGFuZAorYWxsIHRoZXNlIHN1YnN5c3RlbXMgcHJvdmlkZSBhIHB1YmxpYyBBUEk7IHRoaXMgaW5jbHVkZXMgdGhlIGhlbHBlcgorc3Vic3lzdGVtcyBsaWtlIHRoZSBvbmUgZm9yIFMtZXhwcmVzc2lvbnMuICBUaGUgQVBJIHN0eWxlIGRlcGVuZHMgb24gdGhlCitzdWJzeXN0ZW07IGluIGdlbmVyYWwgYW4gb3Blbi11c2UtY2xvc2UgYXBwcm9hY2ggaXMgaW1wbGVtZW50ZWQuICBUaGUKK29wZW4gcmV0dXJucyBhIGhhbmRsZSB0byBhIGNvbnRleHQgdXNlZCBmb3IgYWxsIGZ1cnRoZXIgb3BlcmF0aW9ucyBvbgordGhpcyBoYW5kbGUsIHNldmVyYWwgZnVuY3Rpb25zIG1heSB0aGVuIGJlIHVzZWQgb24gdGhpcyBoYW5kbGUgYW5kIGEKK2ZpbmFsIGNsb3NlIGZ1bmN0aW9uIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYW5kbGUuCisKK0BtZW51CisqIFB1YmxpYy1LZXkgU3Vic3lzdGVtIEFyY2hpdGVjdHVyZTo6ICAgICAgICAgICAgICBBYm91dCBwdWJsaWMga2V5cy4KKyogU3ltbWV0cmljIEVuY3J5cHRpb24gU3Vic3lzdGVtIEFyY2hpdGVjdHVyZTo6ICAgIEFib3V0IHN0YW5kYXJkIGNpcGhlcnMuCisqIEhhc2hpbmcgYW5kIE1BQ2luZyBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlOjogICAgICBBYm91dCBoYXNoaW5nLgorKiBNdWx0aS1QcmVjaXNpb24tSW50ZWdlciBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlOjogQWJvdXQgYmlnIGludGVnZXJzLgorKiBQcmltZS1OdW1iZXItR2VuZXJhdG9yIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmU6OiAgQWJvdXQgcHJpbWUgbnVtYmVycy4KKyogUmFuZG9tLU51bWJlciBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlOjogICAgICAgICAgIEFib3V0IHJhbmRvbSBzdHVmZi4KK0BjICogSGVscGVyIFN1YnN5c3RlbXMgQXJjaGl0ZWN0dXJlOjogICAgICAgICAgICAgICAgIEFib3V0IG90aGVyIHN0dWZmLgorQGVuZCBtZW51CisKKworCitAbm9kZSBQdWJsaWMtS2V5IFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BzZWN0aW9uIFB1YmxpYy1LZXkgQXJjaGl0ZWN0dXJlCisKK0JlY2F1c2UgcHVibGljIGtleSBjcnlwdG9ncmFwaHkgaXMgYWxtb3N0IGFsd2F5cyB1c2VkIHRvIHByb2Nlc3Mgc21hbGwKK2Ftb3VudHMgb2YgZGF0YSAoaGFzaCB2YWx1ZXMgb3Igc2Vzc2lvbiBrZXlzKSwgdGhlIGludGVyZmFjZSBpcyBub3QKK2ltcGxlbWVudGVkIHVzaW5nIHRoZSBvcGVuLXVzZS1jbG9zZSBwYXJhZGlnbSwgYnV0IHdpdGggc2luZ2xlCitzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbnMuICBEdWUgdG8gdGhlIHdpZGUgdmFyaWV0eSBvZiBwYXJhbWV0ZXJzCityZXF1aXJlZCBieSBkaWZmZXJlbnQgYWxnb3JpdGhtcyBTLWV4cHJlc3Npb25zLCBhcyBmbGV4aWJsZSB3YXkgdG8KK2NvbnZleSB0aGVzZSBwYXJhbWV0ZXJzLCBhcmUgdXNlZC4gIFRoZXJlIGlzIGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMKK3RvIHdvcmsgd2l0aCB0aGVzZSBTLWV4cHJlc3Npb25zLgorQGMgc2VlIEB4cmVme1MtZXhwcmVzc2lvbiBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlfS4KKworQXNpZGUgb2YgZnVuY3Rpb25zIHRvIHJlZ2lzdGVyIG5ldyBhbGdvcml0aG1zLCBtYXAgYWxnb3JpdGhtcyBuYW1lcyB0bworYWxnb3JpdGhtcyBpZGVudGlmaWVycyBhbmQgdG8gbG9va3VwIHByb3BlcnRpZXMgb2YgYSBrZXksIHRoZQorZm9sbG93aW5nIG1haW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGU6CisKK0B0YWJsZSBAY29kZQorCitAaXRlbSBnY3J5X3BrX2VuY3J5cHQKK0VuY3J5cHQgZGF0YSB1c2luZyBhIHB1YmxpYyBrZXkuCisKK0BpdGVtIGdjcnlfcGtfZGVjcnlwdAorRGVjcnlwdCBkYXRhIHVzaW5nIGEgcHJpdmF0ZSBrZXkuCisKK0BpdGVtIGdjcnlfcGtfc2lnbgorU2lnbiBkYXRhIHVzaW5nIGEgcHJpdmF0ZSBrZXkuCisKK0BpdGVtIGdjcnlfcGtfdmVyaWZ5CitWZXJpZnkgdGhhdCBhIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSBkYXRhLgorCitAaXRlbSBnY3J5X3BrX3Rlc3RrZXkKK1BlcmZvcm0gYSBjb25zaXN0ZW5jeSBvdmVyIGEgcHVibGljIG9yIHByaXZhdGUga2V5LgorCitAaXRlbSBnY3J5X3BrX2dlbmtleQorQ3JlYXRlIGEgbmV3IHB1YmxpYy9wcml2YXRlIGtleSBwYWlyLgorCitAZW5kIHRhYmxlCisKK0FsbCB0aGVzZSBmdW5jdGlvbnMKK2xvb2t1cCB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgYWxnb3JpdGhtIGFuZCBwYXNzIHRoZSBhY3R1YWwgd29yawordG8gdGhhdCBtb2R1bGUuICBUaGUgcGFyc2luZyBvZiB0aGUgUy1leHByZXNzaW9uIGlucHV0IGFuZCB0aGUKK2NvbnN0cnVjdGlvbiBvZiBTLWV4cHJlc3Npb24gZm9yIHRoZSByZXR1cm4gdmFsdWVzIGlzIGRvbmUgYnkgdGhlIGhpZ2gKK2xldmVsIGNvZGUgKEBmaWxle2NpcGhlci9wdWJrZXkuY30pLiAgVGh1cyB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlCitiZXR3ZWVuIHRoZSBhbGdvcml0aG0gbW9kdWxlcyBhbmQgdGhlIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHBhc3NlcyBkYXRhCitpbiBhIGN1c3RvbSBmb3JtYXQuCisKK0J5IGRlZmF1bHQgTGliZ2NyeXB0IHVzZXMgYSBibGluZGluZyB0ZWNobmlxdWUgZm9yIFJTQSBkZWNyeXB0aW9uIHRvCittaXRpZ2F0ZSByZWFsIHdvcmxkIHRpbWluZyBhdHRhY2tzIG92ZXIgYSBuZXR3b3JrOiBJbnN0ZWFkIG9mIHVzaW5nCit0aGUgUlNBIGRlY3J5cHRpb24gZGlyZWN0bHksIGEgYmxpbmRlZCB2YWx1ZSBAbWF0aHt5ID0geCByXntlfSBcYm1vZCBufQoraXMgZGVjcnlwdGVkIGFuZCB0aGUgdW5ibGluZGVkIHZhbHVlIEBtYXRoe3gnID0geScgcl57LTF9IFxibW9kIG59CityZXR1cm5lZC4gIFRoZSBibGluZGluZyB2YWx1ZSBAbWF0aHtyfSBpcyBhIHJhbmRvbSB2YWx1ZSB3aXRoIHRoZSBzaXplCitvZiB0aGUgbW9kdWx1cyBAbWF0aHtufSBhbmQgZ2VuZXJhdGVkIHdpdGggQGNvZGV7R0NSWV9XRUFLX1JBTkRPTX0KK3JhbmRvbSBsZXZlbC4KKworQGNpbmRleCBYOS4zMQorQGNpbmRleCBGSVBTIDE4NgorVGhlIGFsZ29yaXRobSB1c2VkIGZvciBSU0EgYW5kIERTQSBrZXkgZ2VuZXJhdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIKK0xpYmdjcnlwdCBpcyBvcGVyYXRlZCBpbiBzdGFuZGFyZCBvciBpbiBGSVBTIG1vZGUuICBJbiBzdGFuZGFyZCBtb2RlCithbiBhbGdvcml0aG0gYmFzZWQgb24gdGhlIExpbS1MZWUgcHJpbWUgbnVtYmVyIGdlbmVyYXRvciBpcyB1c2VkLiAgSW4KK0ZJUFMgbW9kZSBSU0Ega2V5cyBhcmUgZ2VuZXJhdGVkIGFzIHNwZWNpZmllZCBpbiBBTlNJIFg5LjMxICgxOTk4KSBhbmQKK0RTQSBrZXlzIGFzIHNwZWNpZmllZCBpbiBGSVBTIDE4Ni0yLgorCisKKworQG5vZGUgU3ltbWV0cmljIEVuY3J5cHRpb24gU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorQHNlY3Rpb24gU3ltbWV0cmljIEVuY3J5cHRpb24gU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorCitUaGUgaW50ZXJmYWNlIHRvIHdvcmsgd2l0aCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGlzIG1hZGUgdXAKK29mIGZ1bmN0aW9ucyBmcm9tIHRoZSBAY29kZXtnY3J5X2NpcGhlcl99IG5hbWUgc3BhY2UuICBUaGUKK2ltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIG9wZW4tdXNlLWNsb3NlIHBhcmFkaWdtIGFuZCB1c2VzIHJlZ2lzdGVyZWQKK2FsZ29yaXRobSBtb2R1bGVzIGZvciB0aGUgYWN0dWFsIHdvcmsuICBVbmxlc3MgYSBtb2R1bGUgaW1wbGVtZW50cworb3B0aW1pemVkIGNpcGhlciBtb2RlIGltcGxlbWVudGF0aW9ucywgdGhlIGhpZ2ggbGV2ZWwgY29kZQorKEBmaWxle2NpcGhlci9jaXBoZXIuY30pIGltcGxlbWVudHMgdGhlIG1vZGVzIGFuZCBjYWxscyB0aGUgY29yZQorYWxnb3JpdGhtIGZ1bmN0aW9ucyB0byBwcm9jZXNzIGVhY2ggYmxvY2suCisKK1RoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbnMgYXJlOgorCitAdGFibGUgQGNvZGUKKworQGl0ZW0gZ2NyeV9jaXBoZXJfb3BlbgorQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHRvIGVuY3J5cHQgb3IgZGVjcnlwdCB1c2luZyBhIHNwZWNpZmllZAorYWxnb3JpdGhtIGFuZCBtb2RlLgorCitAaXRlbSBnY3J5X2NpcGhlcl9jbG9zZQorUmVsZWFzZSBhbiBpbnN0YW5jZS4KKworQGl0ZW0gZ2NyeV9jaXBoZXJfc2V0a2V5CitTZXQgYSBrZXkgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLgorCitAaXRlbSBnY3J5X2NpcGhlcl9zZXRpdgorU2V0IGFuIGluaXRpYWxpemF0aW9uIHZlY3RvciB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uCisKK0BpdGVtIGdjcnlfY2lwaGVyX2VuY3J5cHQKK0BpdGVteCBnY3J5X2NpcGhlcl9kZWNyeXB0CitFbmNyeXB0IG9yIGRlY3J5cHQgZGF0YS4gIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkIHdpdGggYXJiaXRyYXJ5CithbW91bnRzIG9mIGRhdGEgYW5kIGFzIG9mdGVuIGFzIG5lZWRlZCB0byBlbmNyeXB0IG9yIGRlY3J5cHQgYWxsIGRhdGEuCisKK0BlbmQgdGFibGUKKworVGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIHRvIHF1ZXJ5IHByb3BlcnRpZXMgb2YgYWxnb3JpdGhtcyBvciBjb250ZXh0LAorbGlrZSBibG9jayBsZW5ndGgsIGtleSBsZW5ndGgsIG1hcCBuYW1lcyBvciB0byBlbmFibGUgZmVhdHVyZXMgbGlrZQorcGFkZGluZyBtZXRob2RzLgorCisKKworQG5vZGUgSGFzaGluZyBhbmQgTUFDaW5nIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BzZWN0aW9uIEhhc2hpbmcgYW5kIE1BQ2luZyBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlCisKK1RoZSBpbnRlcmZhY2UgdG8gd29yayB3aXRoIG1lc3NhZ2UgZGlnZXN0cyBhbmQgQ1JDIGFsZ29yaXRobXMgaXMgbWFkZQordXAgb2YgZnVuY3Rpb25zIGZyb20gdGhlIEBjb2Rle2djcnlfbWRffSBuYW1lIHNwYWNlLiAgVGhlCitpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIHRoZSBvcGVuLXVzZS1jbG9zZSBwYXJhZGlnbSBhbmQgdXNlcyByZWdpc3RlcmVkCithbGdvcml0aG0gbW9kdWxlcyBmb3IgdGhlIGFjdHVhbCB3b3JrLiAgQWx0aG91Z2ggQ1JDIGFsZ29yaXRobXMgYXJlCitub3QgY29uc2lkZXJlZCBjcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtcywgdGhleSBzaGFyZSBlbm91Z2gKK3Byb3BlcnRpZXMgc28gdGhhdCBpdCBtYWtlcyBzZW5zZSB0byBoYW5kbGUgdGhlbSBpbiB0aGUgc2FtZSB3YXkuCitJdCBpcyBwb3NzaWJsZSB0byB1c2Ugc2V2ZXJhbCBhbGdvcml0aG1zIGF0IG9uY2Ugd2l0aCBvbmUgY29udGV4dCBhbmQKK3RodXMgY29tcHV0ZSB0aGVtIGFsbCBvbiB0aGUgc2FtZSBkYXRhLgorCitUaGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIGFyZToKKworQHRhYmxlIEBjb2RlCitAaXRlbSBnY3J5X21kX29wZW4KK0NyZWF0ZSBhIG5ldyBtZXNzYWdlIGRpZ2VzdCBpbnN0YW5jZSBhbmQgb3B0aW9uYWxseSBlbmFibGUgb25lCithbGdvcml0aG0uICBBIGZsYWcgbWF5IGJlIHVzZWQgdG8gdHVybiB0aGUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCitpbnRvIGEgSE1BQyBhbGdvcml0aG0uCisKK0BpdGVtIGdjcnlfbWRfZW5hYmxlCitFbmFibGUgYW4gYWRkaXRpb25hbCBhbGdvcml0aG0gZm9yIHRoZSBpbnN0YW5jZS4KKworQGl0ZW0gZ2NyeV9tZF9zZXRrZXkKK1NldCB0aGUga2V5IGZvciB0aGUgTUFDLgorCitAaXRlbSBnY3J5X21kX3dyaXRlCitQYXNzIG1vcmUgZGF0YSBmb3IgY29tcHV0aW5nIHRoZSBtZXNzYWdlIGRpZ2VzdCB0byBhbiBpbnN0YW5jZS4KKworQGl0ZW0gZ2NyeV9tZF9wdXRjCitCdWZmZXJlZCB2ZXJzaW9uIG9mIEBjb2Rle2djcnlfbWRfd3JpdGV9IGltcGxlbWVudGVkIGFzIGEgbWFjcm8uCisKK0BpdGVtIGdjcnlfbWRfcmVhZAorRmluYWxpemUgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCBvciBITUFDIGFuZCByZXR1cm4gdGhlCityZXN1bHQuCisKK0BpdGVtIGdjcnlfbWRfY2xvc2UKK1JlbGVhc2UgYW4gaW5zdGFuY2UKKworQGl0ZW0gZ2NyeV9tZF9oYXNoX2J1ZmZlcgorQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZGlyZWN0bHkgY29tcHV0ZSBhIG1lc3NhZ2UgZGlnZXN0IG92ZXIgYQorbWVtb3J5IGJ1ZmZlciB3aXRob3V0IHRoZSBuZWVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBmaXJzdC4KKworQGVuZCB0YWJsZQorCitUaGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMgdG8gcXVlcnkgcHJvcGVydGllcyBvZiBhbGdvcml0aG1zIG9yIHRoZQoraW5zdGFuY2UsIGxpa2UgZW5hYmxlZCBhbGdvcml0aG1zLCBkaWdlc3QgbGVuZ3RoLCBtYXAgYWxnb3JpdGhtIG5hbWVzLgoraXQgaXMgYWxzbyBwb3NzaWJsZSB0byByZXNldCBhbiBpbnN0YW5jZSBvciB0byBjb3B5IHRoZSBjdXJyZW50IHN0YXRlCitvZiBhbiBpbnN0YW5jZSBhdCBhbnkgdGltZS4gIERlYnVnIGZ1bmN0aW9ucyB0byB3cml0ZSB0aGUgaGFzaGVkIGRhdGEKK3RvIGZpbGVzIGFyZSBhdmFpbGFibGUgYXMgd2VsbC4KKworCisKK0Bub2RlIE11bHRpLVByZWNpc2lvbi1JbnRlZ2VyIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BzZWN0aW9uIE11bHRpLVByZWNpc2lvbi1JbnRlZ2VyIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKKworVGhlIGltcGxlbWVudGF0aW9uIG9mIExpYmdjcnlwdCdzIGJpZyBpbnRlZ2VyIGNvbXB1dGF0aW9uIGNvZGUgaXMKK2Jhc2VkIG9uIGFuIG9sZCByZWxlYXNlIG9mIEdOVSBNdWx0aS1QcmVjaXNpb24gTGlicmFyeSAoR01QKS4gIFRoZQorZGVjaXNpb24gbm90IHRvIHVzZSB0aGUgR01QIGxpYnJhcnkgZGlyZWN0bHkgd2FzIGR1ZSB0byBzdGFsbGVkCitkZXZlbG9wbWVudCBhdCB0aGF0IHRpbWUgYW5kIGR1ZSB0byBzZWN1cml0eSByZXF1aXJlbWVudHMgd2hpY2ggY291bGQKK25vdCBiZSBwcm92aWRlZCBieSB0aGUgY29kZSBpbiBHTVAuICBBcyBHTVAgZG9lcywgTGliZ2NyeXB0IHByb3ZpZGVzCitoaWdoIHBlcmZvcm1hbmNlIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMgb2YgbG93IGxldmVsIGNvZGUgZm9yCitzZXZlcmFsIENQVVMgdG8gZ2FpbiBtdWNoIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIHdpdGggYSBnZW5lcmljIEMKK2ltcGxlbWVudGF0aW9uLgorCitAbm9pbmRlbnQKK01ham9yIGZlYXR1cmVzIG9mIExpYmdjcnlwdCdzIG11bHRpLXByZWNpc2lvbi1pbnRlZ2VyIGNvZGUgY29tcGFyZWQgdG8KK0dNUCBhcmU6CisKK0BpdGVtaXplCitAaXRlbQorQXZvaWRhbmNlIG9mIHN0YWNrIGJhc2VkIGFsbG9jYXRpb25zIHRvIGFsbG93IHByb3RlY3Rpb24gYWdhaW5zdAorc3dhcHBpbmcgb3V0IG9mIHNlbnNpdGl2ZSBkYXRhIGFuZCBmb3IgZWFzeSB6ZXJvaW5nIG9mIHNlbnNpdGl2ZQoraW50ZXJtZWRpYXRlIHJlc3VsdHMuCisKK0BpdGVtCitPcHRpb25hbCB1c2Ugb2Ygc2VjdXJlIG1lbW9yeSBhbmQgdHJhY2tpbmcgb2YgaXRzIHVzZSBzbyB0aGF0IHJlc3VsdHMKK2FyZSBhbHNvIHB1dCBpbnRvIHNlY3VyZSBtZW1vcnkuCisKK0BpdGVtCitNUElzIGFyZSBpZGVudGlmaWVkIGJ5IGEgaGFuZGxlIChpbXBsZW1lbnRlZCBhcyBhIHBvaW50ZXIpIHRvIGdpdmUKK2JldHRlciBjb250cm9sIG92ZXIgYWxsb2NhdGlvbnMgYW5kIHRvIGF1Z21lbnQgdGhlbSB3aXRoIGV4dHJhCitwcm9wZXJ0aWVzIGxpa2Ugb3BhcXVlIGRhdGEuCisKK0BpdGVtCitSZW1vdmFsIG9mIHVubmVjZXNzYXJ5IGNvZGUgdG8gcmVkdWNlIGNvbXBsZXhpdHkuCisKK0BpdGVtCitGdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHB1YmxpYyBrZXkgY3J5cHRvZ3JhcGh5LgorCitAZW5kIGl0ZW1pemUKKworCisKK0Bub2RlIFByaW1lLU51bWJlci1HZW5lcmF0b3IgU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorQHNlY3Rpb24gUHJpbWUtTnVtYmVyLUdlbmVyYXRvciBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlCisKK0xpYmdjcnlwdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gaXRzIHByaW1lIG51bWJlciBnZW5lcmF0b3IuICBUaGVzZQorZnVuY3Rpb25zIG1ha2UgdXNlIG9mIHRoZSBpbnRlcm5hbCBwcmltZSBudW1iZXIgZ2VuZXJhdG9yIHdoaWNoIGlzCityZXF1aXJlZCBmb3IgdGhlIGdlbmVyYXRpb24gZm9yIHB1YmxpYyBrZXkga2V5IHBhaXJzLiAgVGhlIHBsYWluIHByaW1lCitjaGVja2luZyBmdW5jdGlvbiBpcyBleHBvcnRlZCBhcyB3ZWxsLgorCitUaGUgZ2VuZXJhdGlvbiBvZiByYW5kb20gcHJpbWUgbnVtYmVycyBpcyBiYXNlZCBvbiB0aGUgTGltIGFuZCBMZWUKK2FsZ29yaXRobSB0byBjcmVhdGUgcHJhY3RpY2FsbHkgc2F2ZSBwcmltZXMuQGZvb3Rub3Rle0NoYWUgSG9vbiBMaW0KK2FuZCBQaWwgSm9vbmcgTGVlLiBBIGtleSByZWNvdmVyeSBhdHRhY2sgb24gZGlzY3JldGUgbG9nLWJhc2VkIHNjaGVtZXMKK3VzaW5nIGEgcHJpbWUgb3JkZXIgc3ViZ3JvdXAuIEluIEJ1cnRvbiBTLiBLYWxpc2tpIEpyLiwgZWRpdG9yLAorQWR2YW5jZXMgaW4gQ3J5cHRvbG9neTogQ3J5cHRvICc5NywgcGFnZXMgMjQ5wq0tMjYzLCBCZXJsaW4gLworSGVpZGVsYmVyZyAvIE5ldyBZb3JrLCAxOTk3LiBTcHJpbmdlci1WZXJsYWcuICBEZXNjcmliZWQgb24gcGFnZSAyNjAufQorVGhpcyBhbGdvcml0aG0gY3JlYXRlcyBhIHBvb2wgb2Ygc21hbGxlciBwcmltZXMsIHNlbGVjdCBhIGZldyBvZiB0aGVtCit0byBjcmVhdGUgY2FuZGlkYXRlIHByaW1lcyBvZiB0aGUgZm9ybSBAbWF0aHsyICogcF8wICogcF8xICogLi4uICogcF9uCisrIDF9LCB0ZXN0cyB0aGUgY2FuZGlkYXRlIGZvciBwcmltYWxpdHkgYW5kIHBlcm11dGF0ZXMgdGhlIHBvb2wgdW50aWwKK2EgcHJpbWUgaGFzIGJlZW4gZm91bmQuICBJdCBpcyBwb3NzaWJsZSB0byBjbGFtcCBvbmUgb2YgdGhlIHNtYWxsCitwcmltZXMgdG8gYSBjZXJ0YWluIHNpemUgdG8gaGVscCBEU0Egc3R5bGUgYWxnb3JpdGhtcy4gIEJlY2F1c2UgbW9zdAorb2YgdGhlIHNtYWxsIHByaW1lcyBpbiB0aGUgcG9vbCBhcmUgbm90IHVzZWQgZm9yIHRoZSByZXN1bHRpbmcgcHJpbWUKK251bWJlciwgdGhleSBhcmUgc2F2ZWQgZm9yIGxhdGVyIHVzZSAoc2VlIEBjb2Rle3NhdmVfcG9vbF9wcmltZX0gYW5kCitAY29kZXtnZXRfcG9vbF9wcmltZX0gaW4gQGZpbGV7Y2lwaGVyL3ByaW1lZ2VuLmN9KS4gIFRoZSBwcmltZQorZ2VuZXJhdG9yIG9wdGlvbmFsbHkgc3VwcG9ydHMgdGhlIGZpbmRpbmcgb2YgYW4gYXBwcm9wcmlhdGUgZ2VuZXJhdG9yLgorCitAbm9pbmRlbnQKK1RoZSBwcmltYWxpdHkgdGVzdCB3b3JrcyBpbiB0aHJlZSBzdGVwczoKKworQGVudW1lcmF0ZQorQGl0ZW0KK1RoZSBzdGFuZGFyZCBzaWV2ZSBhbGdvcml0aG0gdXNpbmcgdGhlIHByaW1lcyB1cCB0byA0OTk5IGlzIHVzZWQgYXMgYQorcXVpY2sgZmlyc3QgY2hlY2suCisKK0BpdGVtCitBIEZlcm1hdCB0ZXN0IGZpbHRlcnMgb3V0IGFsbW9zdCBhbGwgbm9uLXByaW1lcy4KKworQGl0ZW0KK0EgNSByb3VuZCBSYWJpbi1NaWxsZXIgdGVzdCBpcyBmaW5hbGx5IHVzZWQuICBUaGUgZmlyc3Qgcm91bmQgdXNlcyBhCit3aXRuZXNzIG9mIDIsIHdoZXJlYXMgdGhlIG5leHQgcm91bmRzIHVzZSBhIHJhbmRvbSB3aXRuZXNzLgorCitAZW5kIGVudW1lcmF0ZQorCitUbyBzdXBwb3J0IHRoZSBnZW5lcmF0aW9uIG9mIFJTQSBhbmQgRFNBIGtleXMgaW4gRklQUyBtb2RlIGFjY29yZGluZwordG8gWDkuMzEgYW5kIEZJUFMgMTg2LTIsIExpYmdjcnlwdCBpbXBsZW1lbnRzIHR3byBhZGRpdGlvbmFsIHByaW1lCitnZW5lcmF0aW9uIGZ1bmN0aW9uczogQGNvZGV7X2djcnlfZGVyaXZlX3g5MzFfcHJpbWV9IGFuZAorQGNvZGV7X2djcnlfZ2VuZXJhdGVfZmlwczE4Nl8yX3ByaW1lfS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwKK2FuZCBub3QgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHB1YmxpYyBBUEkuCisKKworCitAbm9kZSBSYW5kb20tTnVtYmVyIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BzZWN0aW9uIFJhbmRvbS1OdW1iZXIgU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorCitMaWJnY3J5cHQgcHJvdmlkZXMgMyBsZXZlbHMgb3IgcmFuZG9tIHF1YWxpdHk6IFRoZSBsZXZlbAorQGNvZGV7R0NSWV9WRVJZX1NUUk9OR19SQU5ET019IHVzdWFsbHkgdXNlZCBmb3Iga2V5IGdlbmVyYXRpb24sIHRoZQorbGV2ZWwgQGNvZGV7R0NSWV9TVFJPTkdfUkFORE9NfSBmb3IgYWxsIG90aGVyIHN0cm9uZyByYW5kb20KK3JlcXVpcmVtZW50cyBhbmQgdGhlIGZ1bmN0aW9uIEBjb2Rle2djcnlfY3JlYXRlX25vbmNlfSB3aGljaCBpcyB1c2VkCitmb3Igd2Vha2VyIHVzYWdlcyBsaWtlIG5vbmNlcy4gIFRoZXJlIGlzIGFsc28gYSBsZXZlbAorQGNvZGV7R0NSWV9XRUFLX1JBTkRPTX0gd2hpY2ggaW4gZ2VuZXJhbCBtYXBzIHRvCitAY29kZXtHQ1JZX1NUUk9OR19SQU5ET019IGV4Y2VwdCB3aGVuIHVzZWQgd2l0aCB0aGUgZnVuY3Rpb24KK0Bjb2Rle2djcnlfbXBpX3JhbmRvbWl6ZX0sIHdoZXJlIGl0IHJhbmRvbWl6ZXMgYW4KK211bHRpLXByZWNpc2lvbi1pbnRlZ2VyIHVzaW5nIHRoZSBAY29kZXtnY3J5X2NyZWF0ZV9ub25jZX0gZnVuY3Rpb24uCisKK0Bub2luZGVudAorVGhlcmUgYXJlIHR3byBkaXN0aW5jdCByYW5kb20gZ2VuZXJhdG9ycyBhdmFpbGFibGU6CisKK0BpdGVtaXplCitAaXRlbQorVGhlIENvbnRpbnVvdXNseSBTZWVkZWQgUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChDU1BSTkcpLCB3aGljaAoraXMgYmFzZWQgb24gdGhlIGNsYXNzaWMgR251UEcgZGVyaXZlZCBiaWcgcG9vbCBpbXBsZW1lbnRhdGlvbi4KK0ltcGxlbWVudGVkIGluIEBjb2Rle3JhbmRvbS9yYW5kb20tY3Nwcm5nLmN9IGFuZCB1c2VkIGJ5IGRlZmF1bHQuCitAaXRlbQorQSBGSVBTIGFwcHJvdmVkIEFOU0kgWDkuMzEgUFJORyB1c2luZyBBRVMgd2l0aCBhIDEyOCBiaXQga2V5LiBJbXBsZW1lbnRlZCBpbgorQGNvZGV7cmFuZG9tL3JhbmRvbS1maXBzLmN9IGFuZCB1c2VkIGlmIExpYmdjcnlwdCBpcyBpbiBGSVBTIG1vZGUuCitAZW5kIGl0ZW1pemUKKworQG5vaW5kZW50CitCb3RoIGdlbmVyYXRvcnMgbWFrZSB1c2Ugb2Ygc28tY2FsbGVkIGVudHJvcHkgZ2F0aGVyaW5nIG1vZHVsZXM6CisKK0B0YWJsZSBAYXNpcworQGl0ZW0gcm5kbGludXgKK1VzZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcHJvdmlkZWQKK0BmaWxley9kZXYvcmFuZG9tfSBhbmQgQGZpbGV7L2Rldi91cmFuZG9tfSBkZXZpY2VzLgorCitAaXRlbSBybmR1bml4CitSdW5zIHNldmVyYWwgb3BlcmF0aW5nIHN5c3RlbSBjb21tYW5kcyB0byBjb2xsZWN0IGVudHJvcHkgZnJvbSBzb3VyY2VzCitsaWtlIHZpcnR1YWwgbWFjaGluZSBhbmQgcHJvY2VzcyBzdGF0aXN0aWNzLiAgSXQgaXMgYSBraW5kIG9mCitwb29yLW1hbidzIEBjb2Rley9kZXYvcmFuZG9tfSBpbXBsZW1lbnRhdGlvbi4gSXQgaXMgbm90IGF2YWlsYWJsZSBpbgorRklQUyBtb2RlLgorCitAaXRlbSBybmRlZ2QKK1VzZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcHJvdmlkZWQgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIChFR0QpLgorVGhlIEVHRCBiYXNpY2FsbHkgdXNlcyB0aGUgc2FtZSBhbGdvcml0aG1zIGFzIHJuZHVuaXggZG9lcy4gIEhvd2V2ZXIKK2FzIGEgc3lzdGVtIGRhZW1vbiBpdCBrZWVwcyBvbiBydW5uaW5nIGFuZCB0aHVzIGNhbiBzZXJ2ZSBzZXZlcmFsCitwcm9jZXNzZXMgcmVxdWlyaW5nIGVudHJvcHkgaW5wdXQgYW5kIGRvZXMgbm90IHdhc3RlIGNvbGxlY3RlZCBlbnRyb3B5CitpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgbmVlZCBhbGwgdGhlIGNvbGxlY3RlZCBlbnRyb3B5LiBJdCBpcyBub3QKK2F2YWlsYWJsZSBpbiBGSVBTIG1vZGUuCisKK0BpdGVtIHJuZHczMgorVGFyZ2V0ZWQgZm9yIHRoZSBNaWNyb3NvZnQgV2luZG93cyBPUy4gIEl0IHVzZXMgY2VydGFpbiBwcm9wZXJ0aWVzIG9mCit0aGF0IHN5c3RlbSBhbmQgaXMgdGhlIG9ubHkgZ2F0aGVyaW5nIG1vZHVsZSBhdmFpbGFibGUgZm9yIHRoYXQgT1MuCisKK0BpdGVtIHJuZGh3CitFeHRyYSBtb2R1bGUgdG8gY29sbGVjdCBhZGRpdGlvbmFsIGVudHJvcHkgYnkgdXRpbGl6aW5nIGEgaGFyZHdhcmUKK3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgQXMgb2Ygbm93IHRoZSBvbmx5IHN1cHBvcnRlZCBoYXJkd2FyZSBSTkcgaXMKK3RoZSBQYWRsb2NrIGVuZ2luZSBvZiBWSUEgKENlbnRhdXIpIENQVXMuICBJdCBpcyBub3QgYXZhaWxhYmxlIGluIEZJUFMKK21vZGUuCisKK0BlbmQgdGFibGUKKworCitAbWVudQorKiBDU1BSTkcgRGVzY3JpcHRpb246OiAgICAgIERlc2NyaXB0aW9uIG9mIHRoZSBDU1BSTkcuCisqIEZJUFMgUFJORyBEZXNjcmlwdGlvbjo6ICAgRGVzY3JpcHRpb24gb2YgdGhlIEZJUFMgWDkuMzEgUFJORy4KK0BlbmQgbWVudQorCisKK0Bub2RlIENTUFJORyBEZXNjcmlwdGlvbgorQHN1YnNlY3Rpb24gRGVzY3JpcHRpb24gb2YgdGhlIENTUFJORworCitUaGlzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIGxvb3NlbHkgbW9kZWxsZWQgYWZ0ZXIgdGhlIG9uZQorZGVzY3JpYmVkIGluIFBldGVyIEd1dG1hbm4ncyBwYXBlcjogIlNvZnR3YXJlIEdlbmVyYXRpb24gb2YKK1ByYWN0aWNhbGx5IFN0cm9uZyBSYW5kb20gTnVtYmVycyIuQGZvb3Rub3Rle0Fsc28gZGVzY3JpYmVkIGluIGNoYXB0ZXIKKzYgb2YgaGlzIGJvb2sgIkNyeXB0b2dyYXBoaWMgU2VjdXJpdHkgQXJjaGl0ZWN0dXJlIiwgTmV3IFlvcmssIDIwMDQsCitJU0JOIDAtMzg3LTk1Mzg3LTYufQorCitBIHBvb2wgb2YgNjAwIGJ5dGVzIGlzIHVzZWQgYW5kIG1peGVkIHVzaW5nIHRoZSBjb3JlIFJJUEUtTUQxNjAgaGFzaAordHJhbnNmb3JtIGZ1bmN0aW9uLiAgU2V2ZXJhbCBleHRyYSBmZWF0dXJlcyBhcmUgdXNlZCB0byBtYWtlIHRoZQorcm9idXN0IGFnYWluc3QgYSB3aWRlIHZhcmlldHkgb2YgYXR0YWNrcyBhbmQgdG8gcHJvdGVjdCBhZ2FpbnN0CitmYWlsdXJlcyBvZiBzdWJzeXN0ZW1zLiAgVGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgbWF5IGJlIHNhdmVkIHRvIGEKK2ZpbGUgYW5kIGluaXRpYWxseSBzZWVkIGZvcm0gYSBmaWxlLgorCitEZXBlbmRpbmcgb24gaG93IExpYmdjcnlwdCB3YXMgYnVpbGQgdGhlIGdlbmVyYXRvciBpcyBhYmxlIHRvIHNlbGVjdAordGhlIGJlc3Qgd29ya2luZyBlbnRyb3B5IGdhdGhlcmluZyBtb2R1bGUuICBJdCBtYWtlcyB1c2Ugb2YgdGhlIHNsb3cKK2FuZCBmYXN0IGNvbGxlY3Rpb24gbWV0aG9kcyBhbmQgcmVxdWlyZXMgdGhlIHBvb2wgdG8gaW5pdGlhbGx5IHNlZWRlZAorZm9ybSB0aGUgc2xvdyBnYXRoZXJlciBvciBhIHNlZWQgZmlsZS4gIEFuIGVudHJvcHkgZXN0aW1hdGlvbiBpcyB1c2VkCit0byBtaXggaW4gZW5vdWdoIGRhdGEgZnJvbSB0aGUgZ2F0aGVyIG1vZHVsZXMgYmVmb3JlIHJldHVybmluZyB0aGUKK2FjdHVhbCByYW5kb20gb3V0cHV0LiAgUHJvY2VzcyBmb3JrIGRldGVjdGlvbiBhbmQgcHJvdGVjdGlvbiBpcworaW1wbGVtZW50ZWQuCisKK0BjIEZJWE1FOiAgVGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YWlvbiBuZWVkcyBhIG1vcmUgdmVyYm9zZSBkZXNjcmlwdGlvbi4KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBub25jZSBnZW5lcmF0b3IgKGZvcgorQGNvZGV7Z2NyeV9jcmVhdGVfbm9uY2V9KSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZXBlYXRlZCBoYXNoIGRlc2lnbjogQQorMjggYnl0ZSBidWZmZXIgaXMgaW5pdGlhbGx5IHNlZWRlZCB3aXRoIHRoZSBQSUQgYW5kIHRoZSB0aW1lIGluCitzZWNvbmRzIGluIHRoZSBmaXJzdCAyMCBieXRlcyBhbmQgd2l0aCA4IGJ5dGVzIG9mIHJhbmRvbSB0YWtlbiBmcm9tCit0aGUgQGNvZGV7R0NSWV9TVFJPTkdfUkFORE9NfSBnZW5lcmF0b3IuICBSYW5kb20gbnVtYmVycyBhcmUgdGhlbgorY3JlYXRlZCBieSBoYXNoaW5nIGFsbCB0aGUgMjggYnl0ZXMgd2l0aCBTSEEtMSBhbmQgc2F2aW5nIHRoYXQgYWdhaW4KK2luIHRoZSBmaXJzdCAyMCBieXRlcy4gIFRoZSBoYXNoIGlzIGFsc28gcmV0dXJuZWQgYXMgcmVzdWx0LgorCisKK0Bub2RlIEZJUFMgUFJORyBEZXNjcmlwdGlvbgorQHN1YnNlY3Rpb24gRGVzY3JpcHRpb24gb2YgdGhlIEZJUFMgWDkuMzEgUFJORworCitUaGUgY29yZSBvZiB0aGlzIGRldGVybWluaXN0aWMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaXMgaW1wbGVtZW50ZWQKK2FjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgYGBOSVNULVJlY29tbWVuZGVkIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCitCYXNlZCBvbiBBTlNJIFg5LjMxIEFwcGVuZGl4IEEuMi40IFVzaW5nIHRoZSAzLUtleSBUcmlwbGUgREVTIGFuZCBBRVMKK0FsZ29yaXRobXMnJywgZGF0ZWQgMjAwNS0wMS0zMS4gIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgQUVTCit2YXJpYW50LgorCitUaGUgZ2VuZXJhdG9yIGlzIGJhc2VkIG9uIGNvbnRleHRzIHRvIHV0aWxpemUgdGhlIHNhbWUgY29yZSBmdW5jdGlvbnMKK2ZvciBhbGwgcmFuZG9tIGxldmVscyBhcyByZXF1aXJlZCBieSB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UuICBBbGwKK3JhbmRvbSBnZW5lcmF0b3JzIHJldHVybiB0aGVpciBkYXRhIGluIDEyOCBiaXQgYmxvY2tzLiAgSWYgdGhlIGNhbGxlcgorcmVxdWVzdHMgbGVzcyBiaXRzLCB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQuICBUaGUga2V5IGZvciBlYWNoCitnZW5lcmF0b3IgaXMgb25seSBzZXQgb25jZSBhdCB0aGUgZmlyc3QgdGltZSBhIGdlbmVyYXRvciBjb250ZXh0IGlzCit1c2VkLiAgVGhlIHNlZWQgdmFsdWUgaXMgc2V0IGFsb25nIHdpdGggdGhlIGtleSBhbmQgYWdhaW4gYWZ0ZXIgMTAwMAorb3V0cHV0IGJsb2Nrcy4KKworT24gVW5peCBsaWtlIHN5c3RlbXMgdGhlIEBjb2Rle0dDUllfVkVSWV9TVFJPTkdfUkFORE9NfSBhbmQKK0Bjb2Rle0dDUllfU1RST05HX1JBTkRPTX0gZ2VuZXJhdG9ycyBhcmUga2V5ZWQgYW5kIHNlZWRlZCB1c2luZyB0aGUKK3JuZGxpbnV4IG1vZHVsZSB3aXRoIHRoZSBAZmlsZXsvZGV2L3JhbmRvbX0gZGV2aWNlLiBUaHVzIHRoZXNlCitnZW5lcmF0b3JzIG1heSBibG9jayB1bnRpbCB0aGUgT1Mga2VybmVsIGhhcyBjb2xsZWN0ZWQgZW5vdWdoIGVudHJvcHkuCitXaGVuIHVzZWQgd2l0aCBNaWNyb3NvZnQgV2luZG93cyB0aGUgcm5kdzMyIG1vZHVsZSBpcyB1c2VkIGluc3RlYWQuCisKK1RoZSBnZW5lcmF0b3IgdXNlZCBmb3IgQGNvZGV7Z2NyeV9jcmVhdGVfbm9uY2V9IGlzIGtleWVkIGFuZCBzZWVkZWQKK2Zyb20gdGhlIEBjb2Rle0dDUllfU1RST05HX1JBTkRPTX0gZ2VuZXJhdG9yLiAgVGh1cyBpcyBtYXkgYWxzbyBibG9jaworaWYgdGhlIEBjb2Rle0dDUllfU1RST05HX1JBTkRPTX0gZ2VuZXJhdG9yIGhhcyBub3QgeWV0IGJlZW4gdXNlZAorYmVmb3JlIGFuZCB0aHVzIGdldHMgaW5pdGlhbGl6ZWQgb24gdGhlIGZpcnN0IHVzZSBieQorQGNvZGV7Z2NyeV9jcmVhdGVfbm9uY2V9LiAgVGhpcyBzcGVjaWFsIHRyZWF0bWVudCBpcyBqdXN0aWZpZWQgYnkgdGhlCit3ZWFrZXIgcmVxdWlyZW1lbnRzIGZvciBhIG5vbmNlIGdlbmVyYXRvciBhbmQgdG8gc2F2ZSBwcmVjaW91cyBrZXJuZWwKK2VudHJvcHkgZm9yIHVzZSBieSB0aGUgYGByZWFsJycgcmFuZG9tIGdlbmVyYXRvcnMuCisKK0Egc2VsZi10ZXN0IGZhY2lsaXR5IHVzZXMgYSBzZXBhcmF0ZSBjb250ZXh0IHRvIGNoZWNrIHRoZQorZnVuY3Rpb25hbGl0eSBvZiB0aGUgY29yZSBYOS4zMSBmdW5jdGlvbnMgdXNpbmcgYSBrbm93biBhbnN3ZXJzIHRlc3QuCitEdXJpbmcgcnVudGltZSBlYWNoIG91dHB1dCBibG9jayBpcyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgb25lIHRvCitkZXRlY3QgYSBzdHVjayBnZW5lcmF0b3IuCisKK1RoZSBEVCB2YWx1ZSBmb3IgdGhlIGdlbmVyYXRvciBpcyBtYWRlIHVwIG9mIHRoZSBjdXJyZW50IHRpbWUgZG93biB0bworbWljcm9zZWNvbmRzIChpZiBhdmFpbGFibGUpIGFuZCBhIGZyZWUgcnVubmluZyA2NCBiaXQgY291bnRlci4gIFdoZW4KK3VzZWQgd2l0aCB0aGUgdGVzdCBjb250ZXh0IHRoZSBEVCB2YWx1ZSBpcyB0YWtlbiBmcm9tIHRoZSBjb250ZXh0IGFuZAoraW5jcmVtZW50ZWQgb24gZWFjaCB1c2UuCisKK0BjIEBub2RlIEhlbHBlciBTdWJzeXN0ZW1zIEFyY2hpdGVjdHVyZQorQGMgQHNlY3Rpb24gSGVscGVyIFN1YnN5c3RlbXMgQXJjaGl0ZWN0dXJlCitAYworQGMgVGhlcmUgYXJlIGEgZmV3IHNtYWxsZXIgc3Vic3lzdGVtcyB3aGljaCBhcmUgbWFpbmx5IHVzZWQgaW50ZXJuYWxseSBieQorQGMgTGliZ2NyeXB0IGJ1dCBhbHNvIGF2YWlsYWJsZSB0byBhcHBsaWNhdGlvbnMuCitAYworQGMgQG1lbnUKK0BjICogUy1leHByZXNzaW9uIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmU6OiAgIERldGFpbHMgYWJvdXQgdGhlIFMtZXhwcmVzc2lvbiBhcmNoaXRlY3R1cmUuCitAYyAqIE1lbW9yeSBTdWJzeXN0ZW0gQXJjaGl0ZWN0dXJlOjogICAgICAgICBEZXRhaWxzIGFib3V0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhcmNoaXRlY3R1cmUuCitAYyAqIE1pc2NlbGxhbmVvdXMgU3Vic3lzdGVtcyBBcmNoaXRlY3R1cmU6OiBEZXRhaWxzIGFib3V0IG90aGVyIHN1YnN5c3RlbXMuCitAYyBAZW5kIG1lbnUKK0BjCitAYyBAbm9kZSBTLWV4cHJlc3Npb24gU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorQGMgQHN1YnNlY3Rpb24gUy1leHByZXNzaW9uIFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BjCitAYyBMaWJnY3J5cHQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIFMtZXhwcmVzc2lvbiB0byBjcmVhdGUgYW5kIHBhcnNlCitAYyB0aGVtLiAgVG8gdXNlIGFuIFMtZXhwcmVzc2lvbiB3aXRoIExpYmdjcnlwdCBpdCBuZWVkcyBmaXJzdCBiZQorQGMgY29udmVydGVkIGludG8gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHVzZWQgYnkgTGliZ2NyeXB0ICh0aGUgdHlwZQorQGMgQGNvZGV7Z2NyeV9zZXhwX3R9KS4gIFRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzdXBwb3J0IGEgbGFyZ2Ugc3Vic2V0CitAYyBvZiB0aGUgUy1leHByZXNzaW9uIHNwZWNpZmljYXRpb24gYW5kIGZ1cnRoZXIgZmVhdHVyZSBhIHByaW50ZiBsaWtlCitAYyBmdW5jdGlvbiB0byBjb252ZXJ0IGEgbGlzdCBvZiBiaWcgaW50ZWdlcnMgb3Igb3RoZXIgYmluYXJ5IGRhdGEgaW50bworQGMgYW4gUy1leHByZXNzaW9uLgorQGMKK0BjIExpYmdjcnlwdCBjdXJyZW50bHkgaW1wbGVtZW50cyBTLWV4cHJlc3Npb25zIHVzaW5nIGEgdGFnZ2VkIGxpbmtlZAorQGMgbGlzdC4gIEhvd2V2ZXIgdGhpcyBpcyBub3QgZXhwb3NlZCB0byBhbiBhcHBsaWNhdGlvbiBhbmQgbWF5IGJlCitAYyBjaGFuZ2VkIGluIGZ1dHVyZSByZWxlYXNlcyB0byByZWR1Y2Ugb3ZlcmhlYWQgd2hlbiBhbHJlYWR5IHdvcmtpbmcKK0BjIHdpdGggY2Fub25pY2FsbHkgZW5jb2RlZCBTLWV4cHJlc3Npb25zLiAgU2VjdXJlIG1lbW9yeSBpcyBzdXBwb3J0ZWQgYnkKK0BjIHRoaXMgUy1leHByZXNzaW9ucyBpbXBsZW1lbnRhdGlvbi4KK0BjCitAYyBAbm9kZSBNZW1vcnkgU3Vic3lzdGVtIEFyY2hpdGVjdHVyZQorQGMgQHN1YnNlY3Rpb24gTWVtb3J5IFN1YnN5c3RlbSBBcmNoaXRlY3R1cmUKK0BjCitAYyBUQkQuCitAYworQGMKK0BjIEBub2RlIE1pc2NlbGxhbmVvdXMgU3Vic3lzdGVtcyBBcmNoaXRlY3R1cmUKK0BjIEBzdWJzZWN0aW9uIE1pc2NlbGxhbmVvdXMgU3Vic3lzdGVtcyBBcmNoaXRlY3R1cmUKK0BjCitAYyBUQkQuCitAYworQGMKKworCisKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKiogIEFwcGVuZGljZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Bub2RlIFNlbGYtVGVzdHMKK0BhcHBlbmRpeCBEZXNjcmlwdGlvbiBvZiB0aGUgU2VsZi1UZXN0cworCitJbiBhZGRpdGlvbiB0byB0aGUgYnVpbGQgdGltZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUsIExpYmdjcnlwdAoraW1wbGVtZW50cyBzZWxmLXRlc3RzIHRvIGJlIHBlcmZvcm1lZCBhdCBydW50aW1lLiAgV2hpY2ggc2VsZi10ZXN0cworYXJlIGFjdHVhbGx5IHVzZWQgZGVwZW5kcyBvbiB0aGUgbW9kZSBMaWJnY3J5cHQgaXMgdXNlZCBpbi4gIEluCitzdGFuZGFyZCBtb2RlIGEgbGltaXRlZCBzZXQgb2Ygc2VsZi10ZXN0cyBpcyBydW4gYXQgdGhlIHRpbWUgYW4KK2FsZ29yaXRobSBpcyBmaXJzdCB1c2VkLiAgTm90ZSB0aGF0IG5vdCBhbGwgYWxnb3JpdGhtcyBmZWF0dXJlIGEKK3NlbGYtdGVzdCBpbiBzdGFuZGFyZCBtb2RlLiAgVGhlIEBjb2Rle0dDUllDVExfU0VMRlRFU1R9IGNvbnRyb2wKK2NvbW1hbmQgbWF5IGJlIHVzZWQgdG8gcnVuIGFsbCBpbXBsZW1lbnRlZCBzZWxmLXRlc3RzIGF0IGFueSB0aW1lOwordGhpcyB3aWxsIGV2ZW4gcnVuIG1vcmUgdGVzdHMgdGhhbiB0aG9zZSBydW4gaW4gRklQUyBtb2RlLgorCitJZiBhbnkgb2YgdGhlIHNlbGYtdGVzdHMgZmFpbHMsIHRoZSBsaWJyYXJ5IGltbWVkaWF0ZWx5IHJldHVybnMgYW4KK2Vycm9yIGNvZGUgdG8gdGhlIGNhbGxlci4gIElmIExpYmdjcnlwdCBpcyBpbiBGSVBTIG1vZGUgdGhlIHNlbGYtdGVzdHMKK3dpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiB0aGUgYGBTZWxmLVRlc3QnJyBzdGF0ZSBhbmQgYW55IGZhaWx1cmUgcHV0cwordGhlIGxpYnJhcnkgaW50byB0aGUgYGBFcnJvcicnIHN0YXRlLgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQHNlY3Rpb24gUG93ZXItVXAgVGVzdHMKKworUG93ZXItdXAgdGVzdHMgYXJlIG9ubHkgcGVyZm9ybWVkIGlmIExpYmdjcnlwdCBpcyBpbiBGSVBTIG1vZGUuCisKK0BzdWJzZWN0aW9uIFN5bW1ldHJpYyBDaXBoZXIgQWxnb3JpdGhtIFBvd2VyLVVwIFRlc3RzCisKK1RoZSBmb2xsb3dpbmcgc3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtIHRlc3RzIGFyZSBydW4gZHVyaW5nCitwb3dlci11cDoKKworQHRhYmxlIEBhc2lzCitAaXRlbSAzREVTCitUbyB0ZXN0IHRoZSAzREVTIDMta2V5IEVERSBlbmNyeXB0aW9uIGluIEVDQiBtb2RlIHRoZXNlIHRlc3RzIGFyZQorcnVuOgorQGVudW1lcmF0ZQorQGl0ZW0KK0Ega25vd24gYW5zd2VyIHRlc3QgaXMgcnVuIG9uIGEgNjQgYml0IHRlc3QgdmVjdG9yIHByb2Nlc3NlZCBieSA2NAorcm91bmRzIG9mIFNpbmdsZS1ERVMgYmxvY2sgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiB1c2luZyBhIGtleQorY2hhbmdlZCB3aXRoIGVhY2ggcm91bmQuCitAaXRlbQorQSBrbm93biBhbnN3ZXIgdGVzdCBpcyBydW4gb24gYSA2NCBiaXQgdGVzdCB2ZWN0b3IgcHJvY2Vzc2VkIGJ5IDE2Cityb3VuZHMgb2YgMi1rZXkgYW5kIDMta2V5IFRyaXBsZS1ERVMgYmxvY2sgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbnMKK3VzaW5nIGEga2V5IGNoYW5nZWQgd2l0aCBlYWNoIHJvdW5kLgorQGl0ZW0KKzEwIGtub3duIGFuc3dlciB0ZXN0cyB1c2luZyAzLWtleSBUcmlwbGUtREVTIEVERSBlbmNyeXB0aW9uLCBjb21wYXJpbmcKK3RoZSBjaXBoZXJ0ZXh0IHRvIHRoZSBrbm93biB2YWx1ZSwgdGhlbiBydW5uaW5nIGEgZGVjcnlwdGlvbiBhbmQKK2NvbXBhcmluZyBpdCB0byB0aGUgaW5pdGlhbCBwbGFpbnRleHQuCitAZW5kIGVudW1lcmF0ZQorKEBjb2Rle2NpcGhlci9kZXMuYzpzZWxmdGVzdH0pCisKK0BpdGVtIEFFUy0xMjgKK0Ega25vd24gYW5zd2VyIHRlc3RzIGlzIHJ1biB1c2luZyBvbmUgdGVzdCB2ZWN0b3IgYW5kIG9uZSB0ZXN0CitrZXkgd2l0aCBBRVMgaW4gRUNCIG1vZGUuIChAY29kZXtjaXBoZXIvcmlqbmRhZWwuYzpzZWxmdGVzdF9iYXNpY18xMjh9KQorCitAaXRlbSBBRVMtMTkyCitBIGtub3duIGFuc3dlciB0ZXN0cyBpcyBydW4gdXNpbmcgb25lIHRlc3QgdmVjdG9yIGFuZCBvbmUgdGVzdAora2V5IHdpdGggQUVTIGluIEVDQiBtb2RlLiAoQGNvZGV7Y2lwaGVyL3Jpam5kYWVsLmM6c2VsZnRlc3RfYmFzaWNfMTkyfSkKKworQGl0ZW0gQUVTLTI1NgorQSBrbm93biBhbnN3ZXIgdGVzdHMgaXMgcnVuIHVzaW5nIG9uZSB0ZXN0IHZlY3RvciBhbmQgb25lIHRlc3Qga2V5Cit3aXRoIEFFUyBpbiBFQ0IgbW9kZS4gKEBjb2Rle2NpcGhlci9yaWpuZGFlbC5jOnNlbGZ0ZXN0X2Jhc2ljXzI1Nn0pCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIEhhc2ggQWxnb3JpdGhtIFBvd2VyLVVwIFRlc3RzCisKK1RoZSBmb2xsb3dpbmcgaGFzaCBhbGdvcml0aG0gdGVzdHMgYXJlIHJ1biBkdXJpbmcgcG93ZXItdXA6CisKK0B0YWJsZSBAYXNpcworQGl0ZW0gU0hBLTEKK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgdGhlIHN0cmluZyBAY29kZXsiYWJjIn0gaXMgcnVuLgorKEBjb2Rle2NpcGhlci9AL3NoYTEuYzpAL3NlbGZ0ZXN0c19zaGExfSkKK0BpdGVtIFNIQS0yMjQKK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgdGhlIHN0cmluZyBAY29kZXsiYWJjIn0gaXMgcnVuLgorKEBjb2Rle2NpcGhlci9AL3NoYTI1Ni5jOkAvc2VsZnRlc3RzX3NoYTIyNH0pCitAaXRlbSBTSEEtMjU2CitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIHRoZSBzdHJpbmcgQGNvZGV7ImFiYyJ9IGlzIHJ1bi4KKyhAY29kZXtjaXBoZXIvQC9zaGEyNTYuYzpAL3NlbGZ0ZXN0c19zaGEyNTZ9KQorQGl0ZW0gU0hBLTM4NAorQSBrbm93biBhbnN3ZXIgdGVzdCB1c2luZyB0aGUgc3RyaW5nIEBjb2RleyJhYmMifSBpcyBydW4uCisoQGNvZGV7Y2lwaGVyL0Avc2hhNTEyLmM6QC9zZWxmdGVzdHNfc2hhMzg0fSkKK0BpdGVtIFNIQS01MTIKK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgdGhlIHN0cmluZyBAY29kZXsiYWJjIn0gaXMgcnVuLgorKEBjb2Rle2NpcGhlci9AL3NoYTUxMi5jOkAvc2VsZnRlc3RzX3NoYTUxMn0pCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIE1BQyBBbGdvcml0aG0gUG93ZXItVXAgVGVzdHMKKworVGhlIGZvbGxvd2luZyBNQUMgYWxnb3JpdGhtIHRlc3RzIGFyZSBydW4gZHVyaW5nIHBvd2VyLXVwOgorCitAdGFibGUgQGFzaXMKK0BpdGVtIEhNQUMgU0hBLTEKK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgOSBieXRlIG9mIGRhdGEgYW5kIGEgNjQgYnl0ZSBrZXkgaXMgcnVuLgorKEBjb2Rle2NpcGhlci9obWFjLXRlc3RzLmM6c2VsZnRlc3RzX3NoYTF9KQorQGl0ZW0gSE1BQyBTSEEtMjI0CitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDI4IGJ5dGUgb2YgZGF0YSBhbmQgYSA0IGJ5dGUga2V5IGlzIHJ1bi4KKyhAY29kZXtjaXBoZXIvaG1hYy10ZXN0cy5jOnNlbGZ0ZXN0c19zaGEyMjR9KQorQGl0ZW0gSE1BQyBTSEEtMjU2CitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDI4IGJ5dGUgb2YgZGF0YSBhbmQgYSA0IGJ5dGUga2V5IGlzIHJ1bi4KKyhAY29kZXtjaXBoZXIvaG1hYy10ZXN0cy5jOnNlbGZ0ZXN0c19zaGEyNTZ9KQorQGl0ZW0gSE1BQyBTSEEtMzg0CitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDI4IGJ5dGUgb2YgZGF0YSBhbmQgYSA0IGJ5dGUga2V5IGlzIHJ1bi4KKyhAY29kZXtjaXBoZXIvaG1hYy10ZXN0cy5jOnNlbGZ0ZXN0c19zaGEzODR9KQorQGl0ZW0gSE1BQyBTSEEtNTEyCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDI4IGJ5dGUgb2YgZGF0YSBhbmQgYSA0IGJ5dGUga2V5IGlzIHJ1bi4KKyhAY29kZXtjaXBoZXIvaG1hYy10ZXN0cy5jOnNlbGZ0ZXN0c19zaGE1MTJ9KQorQGVuZCB0YWJsZQorCitAc3Vic2VjdGlvbiBSYW5kb20gTnVtYmVyIFBvd2VyLVVwIFRlc3QKKworVGhlIERSTkcgaXMgdGVzdGVkIGR1cmluZyBwb3dlci11cCB0aGlzIHdheToKKworQGVudW1lcmF0ZQorQGl0ZW0KK1JlcXVlc3Rpbmcgb25lIGJsb2NrIG9mIHJhbmRvbSB1c2luZyB0aGUgcHVibGljIGludGVyZmFjZSB0byBjaGVjaworZ2VuZXJhbCB3b3JraW5nIGFuZCB0aGUgZHVwbGljYXRlZCBibG9jayBkZXRlY3Rpb24uCitAaXRlbQorMyBrbm93IGFuc3dlciB0ZXN0cyB1c2luZyBwcmUtZGVmaW5lZCBrZXlzLCBzZWVkIGFuZCBpbml0aWFsIERUCit2YWx1ZXMuICBGb3IgZWFjaCB0ZXN0IDMgYmxvY2tzIG9mIDE2IGJ5dGVzIGFyZSByZXF1ZXN0ZWQgYW5kIGNvbXBhcmVkCit0byB0aGUgZXhwZWN0ZWQgcmVzdWx0LiAgVGhlIERUIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIGJsb2NrLgorQGVuZCBlbnVtZXJhdGUKKworQHN1YnNlY3Rpb24gUHVibGljIEtleSBBbGdvcml0aG0gUG93ZXItVXAgVGVzdHMKKworVGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtcyBhcmUgdGVzdGVkIGR1cmluZyBwb3dlci11cDoKKworQHRhYmxlIEBhc2lzCitAaXRlbSBSU0EKK0EgcHJlLWRlZmluZWQgMTAyNCBiaXQgUlNBIGtleSBpcyB1c2VkIGFuZCB0aGVzZSB0ZXN0cyBhcmUgcnVuCitpbiB0dXJuOgorQGVudW1lcmF0ZQorQGl0ZW0KK0NvbnZlcnNpb24gb2YgUy1leHByZXNzaW9uIHRvIGludGVybmFsIGZvcm1hdC4KKyhAY29kZXtjaXBoZXIvQC9yc2EuYzpAL3NlbGZ0ZXN0c19yc2F9KQorQGl0ZW0KK1ByaXZhdGUga2V5IGNvbnNpc3RlbmN5IGNoZWNrLgorKEBjb2Rle2NpcGhlci9AL3JzYS5jOkAvc2VsZnRlc3RzX3JzYX0pCitAaXRlbQorQSBwcmUtZGVmaW5lZCAyMCBieXRlIHZhbHVlIGlzIHNpZ25lZCB3aXRoIFBLQ1MjMSBwYWRkaW5nIGZvciBTSEEtMS4KK1RoZSByZXN1bHQgaXMgdmVyaWZpZWQgdXNpbmcgdGhlIHB1YmxpYyBrZXkgYWdhaW5zdCB0aGUgb3JpZ2luYWwgZGF0YQorYW5kIGFnYWluc3QgbW9kaWZpZWQgZGF0YS4gIChAY29kZXtjaXBoZXIvQC9yc2EuYzpAL3NlbGZ0ZXN0X3NpZ25fMTAyNH0pCitAaXRlbQorQSAxMDAwIGJpdCByYW5kb20gdmFsdWUgaXMgZW5jcnlwdGVkIGFuZCBjaGVja2VkIHRoYXQgaXQgZG9lcyBub3QKK21hdGNoIHRoZSBvcmlnaW5hbCByYW5kb20gdmFsdWUuICBUaGUgZW5jcnlwdGVkIHJlc3VsdCBpcyB0aGVuCitkZWNyeXB0ZWQgYW5kIGNoZWNrZWQgdGhhdCBpdCBtYXRjaGVzIHRoZSBvcmlnaW5hbCByYW5kb20gdmFsdWUuCisoQGNvZGV7Y2lwaGVyL0AvcnNhLmM6QC9zZWxmdGVzdF9lbmNyXzEwMjR9KQorQGVuZCBlbnVtZXJhdGUKKworQGl0ZW0gRFNBCitBIHByZS1kZWZpbmVkIDEwMjQgYml0IERTQSBrZXkgaXMgdXNlZCBhbmQgdGhlc2UgdGVzdHMgYXJlIHJ1biBpbiB0dXJuOgorQGVudW1lcmF0ZQorQGl0ZW0KK0NvbnZlcnNpb24gb2YgUy1leHByZXNzaW9uIHRvIGludGVybmFsIGZvcm1hdC4KKyhAY29kZXtjaXBoZXIvQC9kc2EuYzpAL3NlbGZ0ZXN0c19kc2F9KQorQGl0ZW0KK1ByaXZhdGUga2V5IGNvbnNpc3RlbmN5IGNoZWNrLgorKEBjb2Rle2NpcGhlci9AL2RzYS5jOkAvc2VsZnRlc3RzX2RzYX0pCitAaXRlbQorQSBwcmUtZGVmaW5lZCAyMCBieXRlIHZhbHVlIGlzIHNpZ25lZCB3aXRoIFBLQ1MjMSBwYWRkaW5nIGZvcgorU0hBLTEuICBUaGUgcmVzdWx0IGlzIHZlcmlmaWVkIHVzaW5nIHRoZSBwdWJsaWMga2V5IGFnYWluc3QgdGhlCitvcmlnaW5hbCBkYXRhIGFuZCBhZ2FpbnN0IG1vZGlmaWVkIGRhdGEuCisoQGNvZGV7Y2lwaGVyL0AvZHNhLmM6QC9zZWxmdGVzdF9zaWduXzEwMjR9KQorQGVuZCBlbnVtZXJhdGUKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gSW50ZWdyaXR5IFBvd2VyLVVwIFRlc3RzCisKK1RoZSBpbnRlZ3JpdHkgb2YgdGhlIExpYmdjcnlwdCBpcyB0ZXN0ZWQgZHVyaW5nIHBvd2VyLXVwIGJ1dCBvbmx5IGlmCitjaGVja2luZyBoYXMgYmVlbiBlbmFibGVkIGF0IGJ1aWxkIHRpbWUuICBUaGUgY2hlY2sgd29ya3MgYnkgY29tcHV0aW5nCithIEhNQUMgU0hBLTI1NiBjaGVja3N1bSBvdmVyIHRoZSBmaWxlIHVzZWQgdG8gbG9hZCBMaWJnY3J5cHQgaW50bworbWVtb3J5LiAgVGhhdCBjaGVja3N1bSBpcyBjb21wYXJlZCBhZ2FpbnN0IGEgY2hlY2tzdW0gc3RvcmVkIGluIGEgZmlsZQorb2YgdGhlIHNhbWUgbmFtZSBidXQgd2l0aCBhIHNpbmdsZSBkb3QgYXMgYSBwcmVmaXggYW5kIGEgc3VmZml4IG9mCitAZmlsZXsuaG1hY30uCisKKworQHN1YnNlY3Rpb24gQ3JpdGljYWwgRnVuY3Rpb25zIFBvd2VyLVVwIFRlc3RzCisKK1RoZSAzREVTIHdlYWsga2V5IGRldGVjdGlvbiBpcyB0ZXN0ZWQgZHVyaW5nIHBvd2VyLXVwIGJ5IGNhbGxpbmcgdGhlCitkZXRlY3Rpb24gZnVuY3Rpb24gd2l0aCBrZXlzIHRha2VuIGZyb20gYSB0YWJsZSBsaXN0ZW5pbmcgYWxsIHdlYWsKK2tleXMuICBUaGUgdGFibGUgaXRzZWxmIGlzIHByb3RlY3RlZCB1c2luZyBhIFNIQS0xIGhhc2guCisoQGNvZGV7Y2lwaGVyL0AvZGVzLmM6QC9zZWxmdGVzdH0pCisKKworCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQHNlY3Rpb24gQ29uZGl0aW9uYWwgVGVzdHMKKworVGhlIGNvbmRpdGlvbmFsIHRlc3RzIGFyZSBwZXJmb3JtZWQgaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBpcyBtZXQuCitUaGlzIG1heSBvY2N1ciBhdCBhbnkgdGltZTsgdGhlIGxpYnJhcnkgZG9lcyBub3QgbmVjZXNzYXJ5IGVudGVyIHRoZQorYGBTZWxmLVRlc3QnJyBzdGF0ZSB0byBydW4gdGhlc2UgdGVzdHMgYnV0IHdpbGwgdHJhbnNpdCB0byB0aGUKK2BgRXJyb3InJyBzdGF0ZSBpZiBhIHRlc3QgZmFpbGVkLgorCitAc3Vic2VjdGlvbiBLZXktUGFpciBHZW5lcmF0aW9uIFRlc3RzCisKK0FmdGVyIGFuIGFzeW1tZXRyaWMga2V5LXBhaXIgaGFzIGJlZW4gZ2VuZXJhdGVkLCBMaWJnY3J5cHQgcnVucyBhCitwYWlyLXdpc2UgY29uc2lzdGVuY3kgdGVzdHMgb24gdGhlIGdlbmVyYXRlZCBrZXkuICBPbiBmYWlsdXJlIHRoZQorZ2VuZXJhdGVkIGtleSBpcyBub3QgdXNlZCwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBhbmQsIGlmIGluIEZJUFMKK21vZGUsIHRoZSBsaWJyYXJ5IGlzIHB1dCBpbnRvIHRoZSBgYEVycm9yJycgc3RhdGUuCisKK0B0YWJsZSBAYXNpcworQGl0ZW0gUlNBCitUaGUgdGVzdCB1c2VzIGEgcmFuZG9tIG51bWJlciA2NCBiaXRzIGxlc3MgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgYXMKK3BsYWludGV4dCBhbmQgcnVucyBhbiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGlvbiBpbiB0dXJuLiAgVGhlCitlbmNyeXB0ZWQgdmFsdWUgaXMgY2hlY2tlZCB0byBub3QgbWF0Y2ggdGhlIHBsYWludGV4dCBhbmQgdGhlIHJlc3VsdAorb2YgdGhlIGRlY3J5cHRpb24gaXMgY2hlY2tlZCB0byBtYXRjaCB0aGUgcGxhaW50ZXh0LgorCitBIG5ldyByYW5kb20gbnVtYmVyIG9mIHRoZSBzYW1lIHNpemUgaXMgZ2VuZXJhdGVkLCBzaWduZWQgYW5kIHZlcmlmaWVkCit0byB0ZXN0IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgc2lnbmluZyBvcGVyYXRpb24uICBBcyBhIHNlY29uZCBzaWduaW5nCit0ZXN0LCB0aGUgc2lnbmF0dXJlIGlzIG1vZGlmaWVkIGJ5IGluY3JlbWVudGluZyBpdHMgdmFsdWUgYW5kIHRoZW4KK3ZlcmlmaWVkIHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdCB0aGF0IHRoZSB2ZXJpZmljYXRpb24gZmFpbHMuCisoQGNvZGV7Y2lwaGVyL0AvcnNhLmM6QC90ZXN0X2tleXN9KQorQGl0ZW0gRFNBCitUaGUgdGVzdCB1c2VzIGEgcmFuZG9tIG51bWJlciBvZiB0aGUgc2l6ZSBvZiB0aGUgUSBwYXJhbWV0ZXIgdG8gY3JlYXRlCithIHNpZ25hdHVyZSBhbmQgdGhlbiBjaGVja3MgdGhhdCB0aGUgc2lnbmF0dXJlIHZlcmlmaWVzLiAgQXMgYSBzZWNvbmQKK3NpZ25pbmcgdGVzdCwgdGhlIGRhdGEgaXMgbW9kaWZpZWQgYnkgaW5jcmVtZW50aW5nIGl0cyB2YWx1ZSBhbmQgdGhlbgordmVyaWZpZWQgYWdhaW5zdCB0aGUgc2lnbmF0dXJlIHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdCB0aGF0IHRoZQordmVyaWZpY2F0aW9uIGZhaWxzLiAgKEBjb2Rle2NpcGhlci9AL2RzYS5jOkAvdGVzdF9rZXlzfSkKK0BlbmQgdGFibGUKKworCitAc3Vic2VjdGlvbiBTb2Z0d2FyZSBMb2FkIFRlc3RzCisKK05vIGNvZGUgaXMgbG9hZGVkIGF0IHJ1bnRpbWUuCisKK0BzdWJzZWN0aW9uIE1hbnVhbCBLZXkgRW50cnkgVGVzdHMKKworQSBtYW51YWwga2V5IGVudHJ5IGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIGluIExpYmdjcnlwdC4KKworCitAc3Vic2VjdGlvbiBDb250aW51b3VzIFJORyBUZXN0cworCitUaGUgY29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgaXMgb25seSB1c2VkIGluIEZJUFMgbW9kZS4gIFRoZSBSTkcKK2dlbmVyYXRlcyBibG9ja3Mgb2YgMTI4IGJpdCBzaXplOyB0aGUgZmlyc3QgYmxvY2sgZ2VuZXJhdGVkIHBlcgorY29udGV4dCBpcyBzYXZlZCBpbiB0aGUgY29udGV4dCBhbmQgYW5vdGhlciBibG9jayBpcyBnZW5lcmF0ZWQgdG8gYmUKK3JldHVybmVkIHRvIHRoZSBjYWxsZXIuICBFYWNoIGJsb2NrIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIHNhdmVkCitibG9jayBhbmQgdGhlbiBzdG9yZWQgaW4gdGhlIGNvbnRleHQuICBJZiBhIGR1cGxpY2F0ZWQgYmxvY2sgaXMKK2RldGVjdGVkIGFuIGVycm9yIGlzIHNpZ25hbGVkIGFuZCB0aGUgbGlicmFyeSBpcyBwdXQgaW50byB0aGUKK2BgRmF0YWwtRXJyb3InJyBzdGF0ZS4KKyhAY29kZXtyYW5kb20vQC9yYW5kb20tZmlwcy5jOkAveDkzMV9hZXNfZHJpdmVyfSkKKworCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitAc2VjdGlvbiBBcHBsaWNhdGlvbiBSZXF1ZXN0ZWQgVGVzdHMKKworVGhlIGFwcGxpY2F0aW9uIG1heSByZXF1ZXN0cyB0ZXN0cyBhdCBhbnkgdGltZSBieSBtZWFucyBvZiB0aGUKK0Bjb2Rle0dDUllDVExfU0VMRlRFU1R9IGNvbnRyb2wgY29tbWFuZC4gIE5vdGUgdGhhdCB1c2luZyB0aGVzZSB0ZXN0cworaXMgbm90IEZJUFMgY29uZm9ybTogQWx0aG91Z2ggTGliZ2NyeXB0IHJlamVjdHMgYWxsIGFwcGxpY2F0aW9uCityZXF1ZXN0cyBmb3Igc2VydmljZXMgd2hpbGUgcnVubmluZyBzZWxmLXRlc3RzLCBpdCBkb2VzIG5vdCBlbnN1cmUKK3RoYXQgbm8gb3RoZXIgb3BlcmF0aW9ucyBvZiBMaWJnY3J5cHQgYXJlIHN0aWxsIGJlaW5nIGV4ZWN1dGVkLiAgVGh1cywKK2luIEZJUFMgbW9kZSBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0aW5nIHNlbGYtdGVzdHMgbmVlZHMgdG8gcG93ZXItY3ljbGUKK0xpYmdjcnlwdCBpbnN0ZWFkLgorCitXaGVuIHNlbGYtdGVzdHMgYXJlIHJlcXVlc3RlZCwgTGliZ2NyeXB0IHJ1bnMgYWxsIHRoZSB0ZXN0cyBpdCBkb2VzCitkdXJpbmcgcG93ZXItdXAgYXMgd2VsbCBhcyBhIGZldyBleHRyYSBjaGVja3MgYXMgZGVzY3JpYmVkIGJlbG93LgorCitAc3Vic2VjdGlvbiBTeW1tZXRyaWMgQ2lwaGVyIEFsZ29yaXRobSBUZXN0cworCitUaGUgZm9sbG93aW5nIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobSB0ZXN0cyBhcmUgcnVuIGluIGFkZGl0aW9uCit0byB0aGUgcG93ZXItdXAgdGVzdHM6CisKK0B0YWJsZSBAYXNpcworQGl0ZW0gQUVTLTEyOAorQSBrbm93biBhbnN3ZXIgdGVzdHMgd2l0aCB0ZXN0IHZlY3RvcnMgdGFrZW4gZnJvbSBOSVNUIFNQODAwLTM4YSBhbmQKK3VzaW5nIHRoZSBoaWdoIGxldmVsIGZ1bmN0aW9ucyBpcyBydW4gZm9yIGJsb2NrIG1vZGVzIENGQiBhbmQgT0ZCLgorCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIEhhc2ggQWxnb3JpdGhtIFRlc3RzCisKK1RoZSBmb2xsb3dpbmcgaGFzaCBhbGdvcml0aG0gdGVzdHMgYXJlIHJ1biBpbiBhZGRpdGlvbiB0byB0aGUKK3Bvd2VyLXVwIHRlc3RzOgorCitAdGFibGUgQGFzaXMKK0BpdGVtIFNIQS0xCitAaXRlbXggU0hBLTIyNAorQGl0ZW14IFNIQS0yNTYKK0BlbnVtZXJhdGUKK0BpdGVtCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIGEgNTYgYnl0ZSBzdHJpbmcgaXMgcnVuLgorQGl0ZW0KK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgYSBzdHJpbmcgb2Ygb25lIG1pbGxpb24gbGV0dGVycyAiYSIgaXMgcnVuLgorQGVuZCBlbnVtZXJhdGUKKyhAY29kZXtjaXBoZXIvQC9zaGExLmM6QC9zZWxmdGVzdHNfc2hhMX0sCitAY29kZXtjaXBoZXIvQC9zaGEyNTYuYzpAL3NlbGZ0ZXN0c19zaGEyMjR9LAorQGNvZGV7Y2lwaGVyL0Avc2hhMjU2LmM6QC9zZWxmdGVzdHNfc2hhMjU2fSkKK0BpdGVtIFNIQS0zODQKK0BpdGVtIFNIQS01MTIKK0BlbnVtZXJhdGUKK0BpdGVtCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIGEgMTEyIGJ5dGUgc3RyaW5nIGlzIHJ1bi4KK0BpdGVtCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIGEgc3RyaW5nIG9mIG9uZSBtaWxsaW9uIGxldHRlcnMgImEiIGlzIHJ1bi4KK0BlbmQgZW51bWVyYXRlCisoQGNvZGV7Y2lwaGVyL0Avc2hhNTEyLmM6QC9zZWxmdGVzdHNfc2hhMzg0fSwKK0Bjb2Rle2NpcGhlci9AL3NoYTUxMi5jOkAvc2VsZnRlc3RzX3NoYTUxMn0pCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIE1BQyBBbGdvcml0aG0gVGVzdHMKKworVGhlIGZvbGxvd2luZyBNQUMgYWxnb3JpdGhtIHRlc3RzIGFyZSBydW4gaW4gYWRkaXRpb24gdG8gdGhlIHBvd2VyLXVwCit0ZXN0czoKKworQHRhYmxlIEBhc2lzCitAaXRlbSBITUFDIFNIQS0xCitAZW51bWVyYXRlCitAaXRlbQorQSBrbm93biBhbnN3ZXIgdGVzdCB1c2luZyA5IGJ5dGUgb2YgZGF0YSBhbmQgYSAyMCBieXRlIGtleSBpcyBydW4uCitAaXRlbQorQSBrbm93biBhbnN3ZXIgdGVzdCB1c2luZyA5IGJ5dGUgb2YgZGF0YSBhbmQgYSAxMDAgYnl0ZSBrZXkgaXMgcnVuLgorQGl0ZW0KK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgOSBieXRlIG9mIGRhdGEgYW5kIGEgNDkgYnl0ZSBrZXkgaXMgcnVuLgorQGVuZCBlbnVtZXJhdGUKKyhAY29kZXtjaXBoZXIvaG1hYy10ZXN0cy5jOnNlbGZ0ZXN0c19zaGExfSkKK0BpdGVtIEhNQUMgU0hBLTIyNAorQGl0ZW14IEhNQUMgU0hBLTI1NgorQGl0ZW14IEhNQUMgU0hBLTM4NAorQGl0ZW14IEhNQUMgU0hBLTUxMgorQGVudW1lcmF0ZQorQGl0ZW0KK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgOSBieXRlIG9mIGRhdGEgYW5kIGEgMjAgYnl0ZSBrZXkgaXMgcnVuLgorQGl0ZW0KK0Ega25vd24gYW5zd2VyIHRlc3QgdXNpbmcgNTAgYnl0ZSBvZiBkYXRhIGFuZCBhIDIwIGJ5dGUga2V5IGlzIHJ1bi4KK0BpdGVtCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDUwIGJ5dGUgb2YgZGF0YSBhbmQgYSAyNiBieXRlIGtleSBpcyBydW4uCitAaXRlbQorQSBrbm93biBhbnN3ZXIgdGVzdCB1c2luZyA1NCBieXRlIG9mIGRhdGEgYW5kIGEgMTMxIGJ5dGUga2V5IGlzIHJ1bi4KK0BpdGVtCitBIGtub3duIGFuc3dlciB0ZXN0IHVzaW5nIDE1MiBieXRlIG9mIGRhdGEgYW5kIGEgMTMxIGJ5dGUga2V5IGlzIHJ1bi4KK0BlbmQgZW51bWVyYXRlCisoQGNvZGV7Y2lwaGVyL0AvaG1hYy10ZXN0cy5jOkAvc2VsZnRlc3RzX3NoYTIyNH0sCitAY29kZXtjaXBoZXIvQC9obWFjLXRlc3RzLmM6QC9zZWxmdGVzdHNfc2hhMjU2fSwKK0Bjb2Rle2NpcGhlci9AL2htYWMtdGVzdHMuYzpAL3NlbGZ0ZXN0c19zaGEzODR9LAorQGNvZGV7Y2lwaGVyL0AvaG1hYy10ZXN0cy5jOkAvc2VsZnRlc3RzX3NoYTUxMn0pCitAZW5kIHRhYmxlCisKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Bub2RlIEZJUFMgTW9kZQorQGFwcGVuZGl4IERlc2NyaXB0aW9uIG9mIHRoZSBGSVBTIE1vZGUKKworVGhpcyBhcHBlbmRpeCBnaXZlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHRoZSBGSVBTIG1vZGUuCitJbiBwYXJ0aWN1bGFyLCB0aGUgY2hhbmdlcyB0byB0aGUgc3RhbmRhcmQgbW9kZSBhbmQgdGhlIGZpbml0ZSBzdGF0ZQorbWFjaGluZSBhcmUgZGVzY3JpYmVkLiAgVGhlIHNlbGYtdGVzdHMgcmVxdWlyZWQgaW4gdGhpcyBtb2RlIGFyZQorZGVzY3JpYmVkIGluIHRoZSBhcHBlbmRpeCBvbiBzZWxmLXRlc3RzLgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitAc2VjdGlvbiBSZXN0cmljdGlvbnMgaW4gRklQUyBNb2RlCisKK0Bub2luZGVudAorSWYgTGliZ2NyeXB0IGlzIHVzZWQgaW4gRklQUyBtb2RlIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgZWZmZWN0aXZlOgorCitAaXRlbWl6ZQorQGl0ZW0KK1RoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhpcyBsaXN0OgorCitAdGFibGUgQGFzaXMKK0BpdGVtIEdDUllfQ0lQSEVSXzNERVMKKzMga2V5IEVERSBUcmlwbGUtREVTIHN5bW1ldHJpYyBlbmNyeXB0aW9uLgorQGl0ZW0gR0NSWV9DSVBIRVJfQUVTMTI4CitBRVMgMTI4IGJpdCBzeW1tZXRyaWMgZW5jcnlwdGlvbi4KK0BpdGVtIEdDUllfQ0lQSEVSX0FFUzE5MgorQUVTIDE5MiBiaXQgc3ltbWV0cmljIGVuY3J5cHRpb24uCitAaXRlbSBHQ1JZX0NJUEhFUl9BRVMyNTYKK0FFUyAyNTYgYml0IHN5bW1ldHJpYyBlbmNyeXB0aW9uLgorQGl0ZW0gR0NSWV9NRF9TSEExCitTSEEtMSBtZXNzYWdlIGRpZ2VzdC4KK0BpdGVtIEdDUllfTURfU0hBMjI0CitTSEEtMjI0IG1lc3NhZ2UgZGlnZXN0LgorQGl0ZW0gR0NSWV9NRF9TSEEyNTYKK1NIQS0yNTYgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX01EX1NIQTM4NAorU0hBLTM4NCBtZXNzYWdlIGRpZ2VzdC4KK0BpdGVtIEdDUllfTURfU0hBNTEyCitTSEEtNTEyIG1lc3NhZ2UgZGlnZXN0LgorQGl0ZW0gR0NSWV9NRF9TSEExLEdDUllfTURfRkxBR19ITUFDCitITUFDIHVzaW5nIGEgU0hBLTEgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX01EX1NIQTIyNCxHQ1JZX01EX0ZMQUdfSE1BQworSE1BQyB1c2luZyBhIFNIQS0yMjQgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX01EX1NIQTI1NixHQ1JZX01EX0ZMQUdfSE1BQworSE1BQyB1c2luZyBhIFNIQS0yNTYgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX01EX1NIQTM4NCxHQ1JZX01EX0ZMQUdfSE1BQworSE1BQyB1c2luZyBhIFNIQS0zODQgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX01EX1NIQTUxMixHQ1JZX01EX0ZMQUdfSE1BQworSE1BQyB1c2luZyBhIFNIQS01MTIgbWVzc2FnZSBkaWdlc3QuCitAaXRlbSBHQ1JZX1BLX1JTQQorUlNBIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcuCitAaXRlbSBHQ1JZX1BLX0RTQQorRFNBIHNpZ25pbmcuCitAZW5kIHRhYmxlCisKK05vdGUgdGhhdCB0aGUgQ1JDIGFsZ29yaXRobXMgYXJlIG5vdCBjb25zaWRlcmVkIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcworYW5kIHRodXMgYXJlIGluIGFkZGl0aW9uIGF2YWlsYWJsZS4KKworQGl0ZW0KK1JTQSBrZXkgZ2VuZXJhdGlvbiByZWZ1c2VzIHRvIGNyZWF0ZSBhIGtleSB3aXRoIGEga2V5c2l6ZSBvZgorbGVzcyB0aGFuIDEwMjQgYml0cy4KKworQGl0ZW0KK0RTQSBrZXkgZ2VuZXJhdGlvbiByZWZ1c2VzIHRvIGNyZWF0ZSBhIGtleSB3aXRoIGEga2V5c2l6ZSBvdGhlcgordGhhbiAxMDI0IGJpdHMuCisKK0BpdGVtCitUaGUgQGNvZGV7dHJhbnNpZW50LWtleX0gZmxhZyBmb3IgUlNBIGFuZCBEU0Ega2V5IGdlbmVyYXRpb24gaXMgaWdub3JlZC4KKworQGl0ZW0KK1N1cHBvcnQgZm9yIHRoZSBWSUEgUGFkbG9jayBlbmdpbmUgaXMgZGlzYWJsZWQuCisKK0BpdGVtCitGSVBTIG1vZGUgbWF5IG9ubHkgYmUgdXNlZCBvbiBzeXN0ZW1zIHdpdGggYSAvZGV2L3JhbmRvbSBkZXZpY2UuCitTd2l0Y2hpbmcgaW50byBGSVBTIG1vZGUgb24gb3RoZXIgc3lzdGVtcyB3aWxsIGZhaWwgYXQgcnVudGltZS4KKworQGl0ZW0KK1NhdmluZyBhbmQgbG9hZGluZyBhIHJhbmRvbSBzZWVkIGZpbGUgaXMgaWdub3JlZC4KKworQGl0ZW0KK0FuIFg5LjMxIHN0eWxlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIHVzZWQgaW4gcGxhY2Ugb2YgdGhlCitsYXJnZS1wb29sLUNTUFJORyBnZW5lcmF0b3IuCisKK0BpdGVtCitUaGUgY29tbWFuZCBAY29kZXtHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET019IGlzIGlnbm9yZWQuCisKK0BpdGVtCitNZXNzYWdlIGRpZ2VzdCBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCisKK0BpdGVtCitBbGwgZGVidWcgb3V0cHV0IHJlbGF0ZWQgdG8gY3J5cHRvZ3JhcGhpYyBkYXRhIGlzIHN1cHByZXNzZWQuCisKK0BpdGVtCitPbi10aGUtZmx5IHNlbGYtdGVzdHMgYXJlIG5vdCBwZXJmb3JtZWQsIGluc3RlYWQgc2VsZi10ZXN0cyBhcmUgcnVuCitiZWZvcmUgZW50ZXJpbmcgb3BlcmF0aW9uYWwgc3RhdGUuCisKK0BpdGVtCitUaGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9zZXRfYWxsb2NhdGlvbl9oYW5kbGVyfSBtYXkgbm90IGJlIHVzZWQuICBJZgoraXQgaXMgdXNlZCBMaWJnY3J5cHQgZGlzYWJsZXMgRklQUyBtb2RlIHVubGVzcyBFbmZvcmNlZCBGSVBTIG1vZGUgaXMKK2VuYWJsZWQsIGluIHdoaWNoIGNhc2UgTGliZ2NyeXB0IHdpbGwgZW50ZXIgdGhlIGVycm9yIHN0YXRlLgorCitAaXRlbQorVGhlIGRpZ2VzdCBhbGdvcml0aG0gTUQ1IG1heSBub3QgYmUgdXNlZC4gIElmIGl0IGlzIHVzZWQgTGliZ2NyeXB0CitkaXNhYmxlcyBGSVBTIG1vZGUgdW5sZXNzIEVuZm9yY2VkIEZJUFMgbW9kZSBpcyBlbmFibGVkLCBpbiB3aGljaCBjYXNlCitMaWJnY3J5cHQgd2lsbCBlbnRlciB0aGUgZXJyb3Igc3RhdGUuCisKK0BpdGVtCitJbiBFbmZvcmNlZCBGSVBTIG1vZGUgdGhlIGNvbW1hbmQgQGNvZGV7R0NSWUNUTF9ESVNBQkxFX1NFQ01FTX0gaXMKK2lnbm9yZWQuICBJbiBzdGFuZGFyZCBGSVBTIG1vZGUgaXQgZGlzYWJsZXMgRklQUyBtb2RlLgorCitAaXRlbQorQSBoYW5kbGVyIHNldCBieSBAY29kZXtnY3J5X3NldF9vdXRvZmNvcmVfaGFuZGxlcn0gaXMgaWdub3JlZC4KK0BpdGVtCitBIGhhbmRsZXIgc2V0IGJ5IEBjb2Rle2djcnlfc2V0X2ZhdGFsZXJyb3JfaGFuZGxlcn0gaXMgaWdub3JlZC4KKworQGVuZCBpdGVtaXplCisKK05vdGUgdGhhdCB3aGVuIHdlIHNwZWFrIGFib3V0IGRpc2FibGluZyBGSVBTIG1vZGUsIGl0IG1lcmVseSBtZWFucwordGhhdCB0aGUgZnVuY3Rpb24gQGNvZGV7Z2NyeV9maXBzX21vZGVfYWN0aXZlfSByZXR1cm5zIGZhbHNlOyBpdCBkb2VzCitub3QgbWVhbiB0aGF0IGFueSBub24gRklQUyBhbGdvcml0aG1zIGFyZSBhbGxvd2VkLgorCitAYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQHNlY3Rpb24gRklQUyBGaW5pdGUgU3RhdGUgTWFjaGluZQorCitUaGUgRklQUyBtb2RlIG9mIGxpYmdjcnlwdCBpbXBsZW1lbnRzIGEgZmluaXRlIHN0YXRlIG1hY2hpbmUgKEZTTSkgdXNpbmcKKzggc3RhdGVzIChAcHhyZWZ7dGJsOmZpcHMtc3RhdGVzfSkgYW5kIGNoZWNrcyBhdCBydW50aW1lIHRoYXQgb25seSB2YWxpZAordHJhbnNpdGlvbnMgKEBweHJlZnt0Ymw6Zmlwcy1zdGF0ZS10cmFuc2l0aW9uc30pIG1heSBoYXBwZW4uCisKK0BmbG9hdCBGaWd1cmUsZmlnOmZpcHMtZnNtCitAY2FwdGlvbntGSVBTIG1vZGUgc3RhdGUgZGlhZ3JhbX0KK0BjZW50ZXIgQGltYWdle2ZpcHMtZnNtLDE1MG1tLCxGSVBTIEZTTSBEaWFncmFtfQorQGVuZCBmbG9hdAorCitAZmxvYXQgVGFibGUsdGJsOmZpcHMtc3RhdGVzCitAY2FwdGlvbntGSVBTIG1vZGUgc3RhdGVzfQorQG5vaW5kZW50CitTdGF0ZXMgdXNlZCBieSB0aGUgRklQUyBGU006CitAdGFibGUgQGFzaXMKKworQGl0ZW0gUG93ZXItT2ZmCitMaWJnY3J5cHQgaXMgbm90IHJ1bnRpbWUgbGlua2VkIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICBUaGlzIHVzdWFsbHkKK21lYW5zIHRoYXQgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZCBpbnRvIG1haW4gbWVtb3J5LiAgVGhpcyBzdGF0ZSBpcworZG9jdW1lbnRhdGlvbiBvbmx5LgorCitAaXRlbSBQb3dlci1PbgorTGliZ2NyeXB0IGlzIGxvYWRlZCBpbnRvIG1lbW9yeSBhbmQgQVBJIGNhbGxzIG1heSBiZSBtYWRlLiAgQ29tcGlsZXIKK2ludHJvZHVjZWQgY29uc3RydWN0b3IgZnVuY3Rpb25zIG1heSBiZSBydW4uICBOb3RlIHRoYXQgTGliZ2NyeXB0IGRvZXMKK25vdCBpbXBsZW1lbnQgYW55IGFyYml0cmFyeSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJ5IHRoZQorb3BlcmF0aW5nIHN5c3RlbQorCitAaXRlbSBJbml0CitUaGUgTGliZ2NyeXB0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBhcmUgcGVyZm9ybWVkIGFuZCB0aGUgbGlicmFyeSBoYXMKK25vdCB5ZXQgcnVuIGFueSBzZWxmLXRlc3QuCisKK0BpdGVtIFNlbGYtVGVzdAorTGliZ2NyeXB0IGlzIHBlcmZvcm1pbmcgc2VsZi10ZXN0cy4KKworQGl0ZW0gT3BlcmF0aW9uYWwKK0xpYmdjcnlwdCBpcyBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGUgYW5kIGFsbCBpbnRlcmZhY2VzIG1heSBiZSB1c2VkLgorCitAaXRlbSBFcnJvcgorTGliZ3J5cHQgaXMgaW4gdGhlIGVycm9yIHN0YXRlLiAgV2hlbiBjYWxsaW5nIGFueSBGSVBTIHJlbGV2YW50CitpbnRlcmZhY2VzIHRoZXkgZWl0aGVyIHJldHVybiBhbiBlcnJvciAoQGNvZGV7R1BHX0VSUl9OT1RfT1BFUkFUSU9OQUx9KQorb3IgcHV0IExpYmdjcnlwdCBpbnRvIHRoZSBGYXRhbC1FcnJvciBzdGF0ZSBhbmQgd29uJ3QgcmV0dXJuLgorCitAaXRlbSBGYXRhbC1FcnJvcgorTGliZ2NyeXB0IGlzIGluIGEgbm9uLXJlY292ZXJhYmxlIGVycm9yIHN0YXRlIGFuZAord2lsbCBhdXRvbWF0aWNhbGx5IHRyYW5zaXQgaW50byB0aGUgIFNodXRkb3duIHN0YXRlLgorCitAaXRlbSBTaHV0ZG93bgorTGliZ2NyeXB0IGlzIGFib3V0IHRvIGJlIHRlcm1pbmF0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgbWVtb3J5LiBUaGUKK2FwcGxpY2F0aW9uIG1heSBhdCB0aGlzIHBvaW50IHN0aWxsIHJ1bm5pbmcgY2xlYW51cCBoYW5kbGVycy4KKworQGVuZCB0YWJsZQorQGVuZCBmbG9hdAorCisKK0BmbG9hdCBUYWJsZSx0Ymw6Zmlwcy1zdGF0ZS10cmFuc2l0aW9ucworQGNhcHRpb257RklQUyBtb2RlIHN0YXRlIHRyYW5zaXRpb25zfQorQG5vaW5kZW50CitUaGUgdmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMgKEBweHJlZntmaWc6Zmlwcy1mc219KSBhcmU6CitAdGFibGUgQGNvZGUKK0BpdGVtIDEKK1Bvd2VyLU9mZiB0byBQb3dlci1PbiBpcyBpbXBsaWNpdGx5IGRvbmUgYnkgdGhlIE9TIGxvYWRpbmcgTGliZ2NyeXB0IGFzCithIHNoYXJlZCBsaWJyYXJ5IGFuZCBoYXZpbmcgaXQgbGlua2VkIHRvIGFuIGFwcGxpY2F0aW9uLgorCitAaXRlbSAyCitQb3dlci1PbiB0byBJbml0IGlzIHRyaWdnZXJlZCBieSB0aGUgYXBwbGljYXRpb24gY2FsbGluZyB0aGUKK0xpYmdjcnlwdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBAY29kZXtnY3J5X2NoZWNrX3ZlcnNpb259LgorCitAaXRlbSAzCitJbml0IHRvIFNlbGYtVGVzdCBpcyBlaXRoZXIgdHJpZ2dlcmVkIGJ5IGEgZGVkaWNhdGVkIEFQSSBjYWxsIG9yIGltcGxpY2l0CitieSBpbnZva2luZyBhIGxpYmdyeXB0IHNlcnZpY2UgY29udHJvbGxlZCBieSB0aGUgRlNNLgorCitAaXRlbSA0CitTZWxmLVRlc3QgdG8gT3BlcmF0aW9uYWwgaXMgdHJpZ2dlcmVkIGFmdGVyIGFsbCBzZWxmLXRlc3RzIHBhc3NlZAorc3VjY2Vzc2Z1bGx5LgorCitAaXRlbSA1CitPcGVyYXRpb25hbCB0byBTaHV0ZG93biBpcyBhbiBhcnRpZmljaWFsIHN0YXRlIHdpdGhvdXQgYW55IGRpcmVjdCBhY3Rpb24KK2luIExpYmdjcnlwdC4gIFdoZW4gcmVhY2hpbmcgdGhlIFNodXRkb3duIHN0YXRlIHRoZSBsaWJyYXJ5IGlzCitkZWluaXRpYWxpemVkIGFuZCBjYW4ndCByZXR1cm4gdG8gYW55IG90aGVyIHN0YXRlIGFnYWluLgorCitAaXRlbSA2CitTaHV0ZG93biB0byBQb3dlci1vZmYgaXMgdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgTGliZ2NyeXB0IGZyb20gdGhlCitjb21wdXRlcidzIG1lbW9yeS4gIEZvciBvYnZpb3VzIHJlYXNvbnMgdGhlIFBvd2VyLU9mZiBzdGF0ZSBjYW4ndCBiZQorcmVwcmVzZW50ZWQgd2l0aGluIExpYmdjcnlwdCBhbmQgdGh1cyB0aGlzIHRyYW5zaXRpb24gaXMgZm9yCitkb2N1bWVudGF0aW9uIG9ubHkuCisKK0BpdGVtIDcKK09wZXJhdGlvbmFsIHRvIEVycm9yIGlzIHRyaWdnZXJlZCBpZiBMaWJnY3J5cHQgZGV0ZWN0ZWQgYW4gYXBwbGljYXRpb24KK2Vycm9yIHdoaWNoIGNhbid0IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgYnV0IHN0aWxsIGFsbG93cyBMaWJnY3J5cHQKK3RvIHByb3Blcmx5IHJ1bi4gIEluIHRoZSBFcnJvciBzdGF0ZSBhbGwgRklQUyByZWxldmFudCBpbnRlcmZhY2VzIHJldHVybgorYW4gZXJyb3IgY29kZS4KKworQGl0ZW0gOAorRXJyb3IgdG8gU2h1dGRvd24gaXMgc2ltaWxhciB0byB0aGUgT3BlcmF0aW9uYWwgdG8gU2h1dGRvd24gdHJhbnNpdGlvbgorKDUpLgorCitAaXRlbSA5CitFcnJvciB0byBGYXRhbC1FcnJvciBpcyB0cmlnZ2VyZWQgaWYgTGliZ3J5cHQgZGV0ZWN0cyBhbiBmYXRhbCBlcnJvcgord2hpbGUgYWxyZWFkeSBiZWluZyBpbiBFcnJvciBzdGF0ZS4KKworQGl0ZW0gMTAKK0ZhdGFsLUVycm9yIHRvIFNodXRkb3duIGlzIGF1dG9tYXRpY2FsbHkgZW50ZXJlZCBieSBMaWJnY3J5cHQKK2FmdGVyIGhhdmluZyByZXBvcnRlZCB0aGUgZXJyb3IuCisKK0BpdGVtIDExCitQb3dlci1PbiB0byBTaHV0ZG93biBpcyBhbiBhcnRpZmljaWFsIHN0YXRlIHRvIGRvY3VtZW50IHRoYXQgTGliZ2NyeXB0CitoYXMgbm90IHllIGJlZW4gaW5pdGlhbGl6ZWQgYnV0IHRoZSBwcm9jZXNzIGlzIGFib3V0IHRvIHRlcm1pbmF0ZS4KKworQGl0ZW0gMTIKK1Bvd2VyLU9uIHRvIEZhdGFsLUVycm9yIHdpbGwgYmUgdHJpZ2dlcmVkIGlmIGNlcnRhaW4gTGliZ2NyeXB0IGZ1bmN0aW9ucworYXJlIHVzZWQgd2l0aG91dCBoYXZpbmcgcmVhY2hlZCB0aGUgSW5pdCBzdGF0ZS4KKworQGl0ZW0gMTMKK1NlbGYtVGVzdCB0byBGYXRhbC1FcnJvciBpcyB0cmlnZ2VyZWQgYnkgc2V2ZXJlIGVycm9ycyBpbiBMaWJnY3J5cHQgd2hpbGUKK3J1bm5pbmcgc2VsZi10ZXN0cy4KKworQGl0ZW0gMTQKK1NlbGYtVGVzdCB0byBFcnJvciBpcyB0cmlnZ2VyZWQgYnkgYSBmYWlsZWQgc2VsZi10ZXN0LgorCitAaXRlbSAxNQorT3BlcmF0aW9uYWwgdG8gRmF0YWwtRXJyb3IgaXMgdHJpZ2dlcmVkIGlmIExpYmNyeXB0IGVuY291bnRlcmVkIGEKK25vbi1yZWNvdmVyYWJsZSBlcnJvci4KKworQGl0ZW0gMTYKK09wZXJhdGlvbmFsIHRvIFNlbGYtVGVzdCBpcyB0cmlnZ2VyZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCB0byBydW4KK3RoZSBzZWxmLXRlc3RzIGFnYWluLgorCitAaXRlbSAxNworRXJyb3IgdG8gU2VsZi1UZXN0IGlzIHRyaWdnZXJlZCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIHJlcXVlc3RlZCB0byBydW4KK3NlbGYtdGVzdHMgdG8gZ2V0IHRvIGdldCBiYWNrIGludG8gb3BlcmF0aW9uYWwgc3RhdGUgYWZ0ZXIgYW4gZXJyb3IuCisKK0BpdGVtIDE4CitJbml0IHRvIEVycm9yIGlzIHRyaWdnZXJlZCBieSBlcnJvcnMgaW4gdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCisKK0BpdGVtIDE5CitJbml0IHRvIEZhdGFsLUVycm9yIGlzIHRyaWdnZXJlZCBieSBub24tcmVjb3ZlcmFibGUgZXJyb3JzIGluIHRoZQoraW5pdGlhbGl6YXRpb24gY29kZS4KKworQGl0ZW0gMjAKK0Vycm9yIHRvIEVycm9yIGlzIHRyaWdnZXJlZCBieSBlcnJvcnMgd2hpbGUgYWxyZWFkeSBpbiB0aGUgRXJyb3IKK3N0YXRlLgorCisKK0BlbmQgdGFibGUKK0BlbmQgZmxvYXQKKworQGMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BzZWN0aW9uIEZJUFMgTWlzY2VsbGFuZW91cyBJbmZvcm1hdGlvbgorCitMaWJnY3J5cHQgZG9lcyBub3QgZG8gYW55IGtleSBtYW5hZ2VtZW50IG9uIGl0c2VsZjsgdGhlIGFwcGxpY2F0aW9uCituZWVkcyB0byBjYXJlIGFib3V0IGl0LiAgS2V5cyB3aGljaCBhcmUgcGFzc2VkIHRvIExpYmdjcnlwdCBzaG91bGQgYmUKK2FsbG9jYXRlZCBpbiBzZWN1cmUgbWVtb3J5IGFzIGF2YWlsYWJsZSB3aXRoIHRoZSBmdW5jdGlvbnMKK0Bjb2Rle2djcnlfbWFsbG9jX3NlY3VyZX0gYW5kIEBjb2Rle2djcnlfY2FsbG9jX3NlY3VyZX0uICBCeSBjYWxsaW5nCitAY29kZXtnY3J5X2ZyZWV9IG9uIHRoaXMgbWVtb3J5LCB0aGUgbWVtb3J5IGFuZCB0aHVzIHRoZSBrZXlzIGFyZQorb3ZlcndyaXR0ZW4gd2l0aCB6ZXJvIGJ5dGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1lbW9yeS4KKworRm9yIHVzZSB3aXRoIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgTGliZ2NyeXB0IGdlbmVyYXRlcyAzCitpbnRlcm5hbCBrZXlzIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGVuY3J5cHRpb24gY29udGV4dHMgdXNlZCBieSB0aGUKK1JORy4gIFRoZXNlIGtleXMgYXJlIHN0b3JlZCBpbiBzZWN1cmUgbWVtb3J5IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlCitwcm9jZXNzLiAgQXBwbGljYXRpb24gYXJlIHJlcXVpcmVkIHRvIHVzZSBAY29kZXtHQ1JZQ1RMX1RFUk1fU0VDTUVNfQorYmVmb3JlIHByb2Nlc3MgdGVybWluYXRpb24uICBUaGlzIHdpbGwgemVybyBvdXQgdGhlIGVudGlyZSBzZWN1cmUKK21lbW9yeSBhbmQgdGh1cyBhbHNvIHRoZSBlbmNyeXB0aW9uIGNvbnRleHRzIHdpdGggdGhlc2Uga2V5cy4KKworCisKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKiogIEFwcGVuZGljZXMgKGxpY2Vuc2UgZXRjLikgICoqKioqKioqKioqKioqKioKK0BjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BpbmNsdWRlIGxncGwudGV4aQorCitAaW5jbHVkZSBncGwudGV4aQorCitAbm9kZSBGaWd1cmVzIGFuZCBUYWJsZXMKK0B1bm51bWJlcmVkIExpc3Qgb2YgRmlndXJlcyBhbmQgVGFibGVzCisKK0BsaXN0b2ZmbG9hdHMgRmlndXJlCisKK0BsaXN0b2ZmbG9hdHMgVGFibGUKKworQG5vZGUgQ29uY2VwdCBJbmRleAorQHVubnVtYmVyZWQgQ29uY2VwdCBJbmRleAorCitAcHJpbnRpbmRleCBjcAorCitAbm9kZSBGdW5jdGlvbiBhbmQgRGF0YSBJbmRleAorQHVubnVtYmVyZWQgRnVuY3Rpb24gYW5kIERhdGEgSW5kZXgKKworQHByaW50aW5kZXggZm4KKworCisKK0BieWUKKworR0NSWUNUTF9TRVRfUkFORE9NX0RBRU1PTl9TT0NLRVQKK0dDUllDVExfVVNFX1JBTkRPTV9EQUVNT04KK1RoZSByYW5kb20gZGFlbW9uIGlzIHN0aWxsIGEgYml0IGV4cGVyaW1lbnRhbCwgdGh1cyB3ZSBkbyBub3QgZG9jdW1lbnQKK3RoZW0uICBOb3RlIHRoYXQgdGhleSBzaG91bGQgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHRoYXQKK3RoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlYWxseSB0aHJlYWQgc2FmZS4KKworCisKKworQGMgIExvY2FsV29yZHM6ICBpbnQgSEQKZGlmZiAtLWdpdCBhL2RvYy9ncGwudGV4aSBiL2RvYy9ncGwudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWIzMDFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2dwbC50ZXhpCkBAIC0wLDAgKzEsMzkyIEBACitAbm9kZSBDb3B5aW5nCitAdW5udW1iZXJlZCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCitAY2luZGV4IEdQTCwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK0BjZW50ZXIgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQGRpc3BsYXkKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzU5IFRlbXBsZSBQbGFjZSAtLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitAZW5kIGRpc3BsYXkKKworQGhlYWRpbmcgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKK0BpZnRleAorQGhlYWRpbmcgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCitAZW5kIGlmdGV4CitAaWZpbmZvCitAY2VudGVyIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorQGVuZCBpZmluZm8KKworQGVudW1lcmF0ZQorQGl0ZW0KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlIGBgUHJvZ3JhbScnLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhIGBgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbScnCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSBgYG1vZGlmaWNhdGlvbicnLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIGBgeW91JycuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCitAaXRlbQorWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworQGl0ZW0KK1lvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworQGVudW1lcmF0ZSBhCitAaXRlbQorWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCitzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitAaXRlbQorWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCit3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKK3BhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCitwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5Cit3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCitpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCithbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKK25vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgordGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Citkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCit0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK0BlbmQgZW51bWVyYXRlCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCitAZW51bWVyYXRlIGEKK0BpdGVtCitBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCitzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKzEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCitAaXRlbQorQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKK3llYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCitjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCitAaXRlbQorQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKK3RvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCithbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCitAZW5kIGVudW1lcmF0ZQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCitAaXRlbQorWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCitAaXRlbQorWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworQGl0ZW0KK0VhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworQGl0ZW0KK0lmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK0lmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBgYGFueQorbGF0ZXIgdmVyc2lvbicnLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCitAaXRlbQorSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitAY2VudGVyIE5PIFdBUlJBTlRZCisKK0BpdGVtCitCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNIGBgQVMgSVMnJyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworQGl0ZW0KK0lOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCitAZW5kIGVudW1lcmF0ZQorCitAaWZ0ZXgKK0BoZWFkaW5nIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworQGVuZCBpZnRleAorQGlmaW5mbworQGNlbnRlciBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKK0BlbmQgaWZpbmZvCisKK0BwYWdlCitAaGVhZGluZyBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSBgYGNvcHlyaWdodCcnIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK0BzbWFsbGV4YW1wbGUKK0B2YXJ7b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLn0KK0NvcHlyaWdodCAoQykgMTlAdmFye3l5fSAgQHZhcntuYW1lIG9mIGF1dGhvcn0KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2FzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCitvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKK3dpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCitAZW5kIHNtYWxsZXhhbXBsZQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworQHNtYWxsZXhhbXBsZQorR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOUB2YXJ7eXl9IEB2YXJ7bmFtZSBvZiBhdXRob3J9CitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHcnLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnCitmb3IgZGV0YWlscy4KK0BlbmQgc21hbGxleGFtcGxlCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgQHNhbXB7c2hvdyB3fSBhbmQgQHNhbXB7c2hvdyBjfSBzaG91bGQgc2hvdwordGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUKK2NvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBAc2FtcHtzaG93IHd9IGFuZAorQHNhbXB7c2hvdyBjfTsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS0td2hhdGV2ZXIKK3N1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgYGBjb3B5cmlnaHQgZGlzY2xhaW1lcicnIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworQHNtYWxsZXhhbXBsZQorQGdyb3VwCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0CitpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb24nCisod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbgorYnkgSmFtZXMgSGFja2VyLgorCitAdmFye3NpZ25hdHVyZSBvZiBUeSBDb29ufSwgMSBBcHJpbCAxOTg5CitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorQGVuZCBncm91cAorQGVuZCBzbWFsbGV4YW1wbGUKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZG9jL2xncGwudGV4aSBiL2RvYy9sZ3BsLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkMThhMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9sZ3BsLnRleGkKQEAgLTAsMCArMSw1NjAgQEAKK0Bub2RlIExpYnJhcnkgQ29weWluZworQHVubnVtYmVyZWQgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisKK0BjaW5kZXggTEdQTCwgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitAY2VudGVyIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKK0BkaXNwbGF5CitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis1OSBUZW1wbGUgUGxhY2UgLS0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCithcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZSB0aGUKK3ZlcnNpb24gbnVtYmVyIDIuMS5dCitAZW5kIGRpc3BsYXkKKworQGhlYWRpbmcgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZS0tLXR5cGljYWxseSBsaWJyYXJpZXMtLS1vZiB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlCitpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlciB0aGlzCitsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIgc3RyYXRlZ3kgdG8KK3VzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvIHRoZXNlCit0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlIEBkZm57TGVzc2VyfSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgQGVtcGh7TGVzc30gdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCitvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCithcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKK2xpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KK3NwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bworZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKK2EgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKK2FsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUKK2xpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcworY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCitzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQorcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mCitmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCitub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKK29wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCitzeXN0ZW0uCisKKyAgQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUKK3VzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCitsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KK3RoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorYGB3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5JycgYW5kIGEgYGB3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeScnLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKworQGlmdGV4CitAaGVhZGluZyBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KK0BlbmQgaWZ0ZXgKK0BpZmluZm8KK0BjZW50ZXIgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCitAY2VudGVyIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorQGVuZCBpZmluZm8KKworQGVudW1lcmF0ZSAwCitAaXRlbQorVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyIHByb2dyYW0KK3doaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlcgorYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgYGB0aGlzIExpY2Vuc2UnJykuICBFYWNoCitsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgYGB5b3UnJy4KKworICBBIGBgbGlicmFyeScnIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgYGBMaWJyYXJ5JycsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgYGB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeScnIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtIGBgbW9kaWZpY2F0aW9uJycuKQorCisgIGBgU291cmNlIGNvZGUnJyBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCitAaXRlbQorWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKworQGl0ZW0KK1lvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworQGVudW1lcmF0ZSBhCitAaXRlbQorVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCitAaXRlbQorWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCitzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitAaXRlbQorWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCitjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK0lmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQordGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcwordGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQoraXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCitpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKK3RhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCitpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyhGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCithIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCithcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKK2JlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCityb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorQGVuZCBlbnVtZXJhdGUKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKworICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworQGl0ZW0KK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworQGl0ZW0KK0EgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgYGB3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeScnLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSBgYHdvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Jycgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgYGB3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnknJy4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSBgYHdvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5JycgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisKK0BpdGVtCitBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhIGBgd29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnknJyB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK0FjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCittYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKK2NoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAord2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBgYHdvcmsgdGhhdAordXNlcyB0aGUgTGlicmFyeScnLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCit1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKK3RoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KK3RvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCitAaXRlbQorVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuICBBCitzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYSBjb3B5IG9mIHRoZQorbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sIHJhdGhlciB0aGFuCitjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlCitwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYgdGhlIHVzZXIgaW5zdGFsbHMKK29uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZQordmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCisKK0BpdGVtCitBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCitzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCit0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKK0BpdGVtCitJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCitzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKK0BpdGVtCitWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKK21hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorQGVuZCBlbnVtZXJhdGUKKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlIGBgd29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5JycgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKK25vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUKK2V4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisKK0BpdGVtCitZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKK0BlbnVtZXJhdGUgYQorQGl0ZW0KK0FjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCitiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK1NlY3Rpb25zIGFib3ZlLgorCitAaXRlbQorR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKK3RoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCit3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCitAZW5kIGVudW1lcmF0ZQorCitAaXRlbQorWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCitAaXRlbQorWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworQGl0ZW0KK0VhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisKK0BpdGVtCitJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK0lmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorYGBhbnkgbGF0ZXIgdmVyc2lvbicnLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworQGl0ZW0KK0lmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworQGNlbnRlciBOTyBXQVJSQU5UWQorCitAaXRlbQorQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZIGBgQVMgSVMnJyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworQGl0ZW0KK0lOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorQGVuZCBlbnVtZXJhdGUKKworQGlmdGV4CitAaGVhZGluZyBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKK0BlbmQgaWZ0ZXgKK0BpZmluZm8KK0BjZW50ZXIgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCitAZW5kIGlmaW5mbworCitAcGFnZQorQGhlYWRpbmcgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKK2BgY29weXJpZ2h0JycgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworQHNtYWxsZXhhbXBsZQorQHZhcntvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMufQorQ29weXJpZ2h0IChDKSBAdmFye3llYXJ9ICBAdmFye25hbWUgb2YgYXV0aG9yfQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAoreW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKK1VTQS4KK0BlbmQgc21hbGxleGFtcGxlCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSBgYGNvcHlyaWdodCBkaXNjbGFpbWVyJycgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitAc21hbGxleGFtcGxlCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBsaWJyYXJ5CitgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworQHZhcntzaWduYXR1cmUgb2YgVHkgQ29vbn0sIDEgQXByaWwgMTk5MAorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK0BlbmQgc21hbGxleGFtcGxlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCmRpZmYgLS1naXQgYS9kb2MvbGliZ2NyeXB0LW1vZHVsZXMuZXBzIGIvZG9jL2xpYmdjcnlwdC1tb2R1bGVzLmVwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU4YTcyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xpYmdjcnlwdC1tb2R1bGVzLmVwcwpAQCAtMCwwICsxLDM2MCBAQAorJSFQUy1BZG9iZS0zLjAgRVBTRi0zLjAKKyUlVGl0bGU6IC9ob21lL3drL3MvbGliZ2NyeXB0L2RvYy9saWJnY3J5cHQtbW9kdWxlcy5maWcKKyUlQ3JlYXRvcjogZmlnMmRldiBWZXJzaW9uIDMuMiBQYXRjaGxldmVsIDVkCislJUNyZWF0aW9uRGF0ZTogV2VkIEphbiAyOSAxMTo0MjoyMCAyMDE0CislJUJvdW5kaW5nQm94OiAwIDAgNDg4IDMwMAorJU1hZ25pZmljYXRpb246IDEuMDAwMAorJSVFbmRDb21tZW50cworJSVCZWdpblByb2xvZworLyRGMnBzRGljdCAyMDAgZGljdCBkZWYKKyRGMnBzRGljdCBiZWdpbgorJEYycHNEaWN0IC9tdHJ4IG1hdHJpeCBwdXQKKy9jb2wtMSB7MCBzZXRncmF5fSBiaW5kIGRlZgorL2NvbDAgezAuMDAwIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMSB7MC4wMDAgMC4wMDAgMS4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2wyIHswLjAwMCAxLjAwMCAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDMgezAuMDAwIDEuMDAwIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNCB7MS4wMDAgMC4wMDAgMC4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2w1IHsxLjAwMCAwLjAwMCAxLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDYgezEuMDAwIDEuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNyB7MS4wMDAgMS4wMDAgMS4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2w4IHswLjAwMCAwLjAwMCAwLjU2MCBzcmdifSBiaW5kIGRlZgorL2NvbDkgezAuMDAwIDAuMDAwIDAuNjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTAgezAuMDAwIDAuMDAwIDAuODIwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTEgezAuNTMwIDAuODEwIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTIgezAuMDAwIDAuNTYwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTMgezAuMDAwIDAuNjkwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTQgezAuMDAwIDAuODIwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTUgezAuMDAwIDAuNTYwIDAuNTYwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTYgezAuMDAwIDAuNjkwIDAuNjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTcgezAuMDAwIDAuODIwIDAuODIwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTggezAuNTYwIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTkgezAuNjkwIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjAgezAuODIwIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjEgezAuNTYwIDAuMDAwIDAuNTYwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjIgezAuNjkwIDAuMDAwIDAuNjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjMgezAuODIwIDAuMDAwIDAuODIwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjQgezAuNTAwIDAuMTkwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjUgezAuNjMwIDAuMjUwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjYgezAuNzUwIDAuMzgwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjcgezEuMDAwIDAuNTAwIDAuNTAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjggezEuMDAwIDAuNjMwIDAuNjMwIHNyZ2J9IGJpbmQgZGVmCisvY29sMjkgezEuMDAwIDAuNzUwIDAuNzUwIHNyZ2J9IGJpbmQgZGVmCisvY29sMzAgezEuMDAwIDAuODgwIDAuODgwIHNyZ2J9IGJpbmQgZGVmCisvY29sMzEgezEuMDAwIDAuODQwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMzIgezAuNTU3IDAuNTU3IDAuNTU3IHNyZ2J9IGJpbmQgZGVmCisvY29sMzMgezAuMjU1IDAuMjcxIDAuMjU1IHNyZ2J9IGJpbmQgZGVmCisvY29sMzQgezAuNzUzIDAuNzUzIDAuNzUzIHNyZ2J9IGJpbmQgZGVmCisvY29sMzUgezAuNTAyIDAuNTAyIDAuNTAyIHNyZ2J9IGJpbmQgZGVmCisvY29sMzYgezAuMzg4IDAuMzg4IDAuMzg4IHNyZ2J9IGJpbmQgZGVmCisvY29sMzcgezAuODA0IDAuODA0IDAuODA0IHNyZ2J9IGJpbmQgZGVmCisvY29sMzggezAuNDI0IDAuNDI0IDAuNDI0IHNyZ2J9IGJpbmQgZGVmCisvY29sMzkgezAuNzc2IDAuNzE4IDAuNTkyIHNyZ2J9IGJpbmQgZGVmCisvY29sNDAgezAuOTM3IDAuOTczIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNDEgezAuODYzIDAuNzk2IDAuNjUxIHNyZ2J9IGJpbmQgZGVmCisvY29sNDIgezAuMjUxIDAuMjUxIDAuMjUxIHNyZ2J9IGJpbmQgZGVmCisvY29sNDMgezAuODc4IDAuODc4IDAuODc4IHNyZ2J9IGJpbmQgZGVmCisvY29sNDQgezAuNTU3IDAuNTYxIDAuNTU3IHNyZ2J9IGJpbmQgZGVmCisvY29sNDUgezAuNjY3IDAuNjY3IDAuNjY3IHNyZ2J9IGJpbmQgZGVmCisvY29sNDYgezAuMzMzIDAuMzMzIDAuMzMzIHNyZ2J9IGJpbmQgZGVmCisvY29sNDcgezAuODQzIDAuODQzIDAuODQzIHNyZ2J9IGJpbmQgZGVmCisvY29sNDggezAuNjgyIDAuNjgyIDAuNjgyIHNyZ2J9IGJpbmQgZGVmCisvY29sNDkgezAuNzQ1IDAuNzQ1IDAuNzQ1IHNyZ2J9IGJpbmQgZGVmCisvY29sNTAgezAuMzE4IDAuMzE4IDAuMzE4IHNyZ2J9IGJpbmQgZGVmCisvY29sNTEgezAuOTA2IDAuODkwIDAuOTA2IHNyZ2J9IGJpbmQgZGVmCisvY29sNTIgezAuMDAwIDAuMDAwIDAuMjg2IHNyZ2J9IGJpbmQgZGVmCisvY29sNTMgezAuNDc1IDAuNDc1IDAuNDc1IHNyZ2J9IGJpbmQgZGVmCisvY29sNTQgezAuMTg4IDAuMjA0IDAuMTg4IHNyZ2J9IGJpbmQgZGVmCisvY29sNTUgezAuMjU1IDAuMjU1IDAuMjU1IHNyZ2J9IGJpbmQgZGVmCisvY29sNTYgezAuNzgwIDAuNzE0IDAuNTg4IHNyZ2J9IGJpbmQgZGVmCisvY29sNTcgezAuODY3IDAuNjE2IDAuNTc2IHNyZ2J9IGJpbmQgZGVmCisvY29sNTggezAuOTQ1IDAuOTI1IDAuODc4IHNyZ2J9IGJpbmQgZGVmCisvY29sNTkgezAuNzY1IDAuNzY1IDAuNzY1IHNyZ2J9IGJpbmQgZGVmCisvY29sNjAgezAuODg2IDAuNzg0IDAuNjU5IHNyZ2J9IGJpbmQgZGVmCisvY29sNjEgezAuODgyIDAuODgyIDAuODgyIHNyZ2J9IGJpbmQgZGVmCisvY29sNjIgezAuODI0IDAuODI0IDAuODI0IHNyZ2J9IGJpbmQgZGVmCisvY29sNjMgezAuOTI5IDAuOTI5IDAuOTI5IHNyZ2J9IGJpbmQgZGVmCisvY29sNjQgezAuODU1IDAuNDc4IDAuMTAyIHNyZ2J9IGJpbmQgZGVmCisvY29sNjUgezAuOTQ1IDAuODk0IDAuMTAyIHNyZ2J9IGJpbmQgZGVmCisvY29sNjYgezAuNTMzIDAuNDkwIDAuNzYxIHNyZ2J9IGJpbmQgZGVmCisvY29sNjcgezAuODM5IDAuODM5IDAuODM5IHNyZ2J9IGJpbmQgZGVmCisvY29sNjggezAuNTQ5IDAuNTQ5IDAuNjQ3IHNyZ2J9IGJpbmQgZGVmCisvY29sNjkgezAuMjkwIDAuMjkwIDAuMjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzAgezAuNTQ5IDAuNDIwIDAuNDIwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzEgezAuMzUzIDAuMzUzIDAuMzUzIHNyZ2J9IGJpbmQgZGVmCisvY29sNzIgezAuNzE4IDAuNjA4IDAuNDUxIHNyZ2J9IGJpbmQgZGVmCisvY29sNzMgezAuMjU1IDAuNTc2IDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzQgezAuNzQ5IDAuNDM5IDAuMjMxIHNyZ2J9IGJpbmQgZGVmCisvY29sNzUgezAuODU5IDAuNDY3IDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzYgezAuODU1IDAuNzIyIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzcgezAuMDAwIDAuMzkyIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sNzggezAuMzUzIDAuNDIwIDAuMjMxIHNyZ2J9IGJpbmQgZGVmCisvY29sNzkgezAuODI3IDAuODI3IDAuODI3IHNyZ2J9IGJpbmQgZGVmCisvY29sODAgezAuNTU3IDAuNTU3IDAuNjQzIHNyZ2J9IGJpbmQgZGVmCisvY29sODEgezAuOTUzIDAuNzI1IDAuMzY1IHNyZ2J9IGJpbmQgZGVmCisvY29sODIgezAuNTM3IDAuNjAwIDAuNDIwIHNyZ2J9IGJpbmQgZGVmCisvY29sODMgezAuMzkyIDAuMzkyIDAuMzkyIHNyZ2J9IGJpbmQgZGVmCisvY29sODQgezAuNzE4IDAuOTAyIDEuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sODUgezAuNTI1IDAuNzUzIDAuOTI1IHNyZ2J9IGJpbmQgZGVmCisvY29sODYgezAuNzQxIDAuNzQxIDAuNzQxIHNyZ2J9IGJpbmQgZGVmCisvY29sODcgezAuODI3IDAuNTg0IDAuMzIyIHNyZ2J9IGJpbmQgZGVmCisvY29sODggezAuNTk2IDAuODI0IDAuOTk2IHNyZ2J9IGJpbmQgZGVmCisvY29sODkgezAuNTQ5IDAuNjEyIDAuNDIwIHNyZ2J9IGJpbmQgZGVmCisvY29sOTAgezAuOTY5IDAuNDIwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sOTEgezAuMzUzIDAuNDIwIDAuMjI0IHNyZ2J9IGJpbmQgZGVmCisvY29sOTIgezAuNTQ5IDAuNjEyIDAuNDIwIHNyZ2J9IGJpbmQgZGVmCisvY29sOTMgezAuNTQ5IDAuNjEyIDAuNDgyIHNyZ2J9IGJpbmQgZGVmCisvY29sOTQgezAuMDk0IDAuMjkwIDAuMDk0IHNyZ2J9IGJpbmQgZGVmCisvY29sOTUgezAuNjc4IDAuNjc4IDAuNjc4IHNyZ2J9IGJpbmQgZGVmCisvY29sOTYgezAuOTY5IDAuNzQxIDAuMzUzIHNyZ2J9IGJpbmQgZGVmCisvY29sOTcgezAuMzg4IDAuNDIwIDAuNjEyIHNyZ2J9IGJpbmQgZGVmCisvY29sOTggezAuOTY5IDAuOTY5IDAuOTY5IHNyZ2J9IGJpbmQgZGVmCisvY29sOTkgezAuODcxIDAuMDAwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTAwIHswLjY3OCAwLjY3OCAwLjY3OCBzcmdifSBiaW5kIGRlZgorL2NvbDEwMSB7MC45NjkgMC43NDEgMC4zNTMgc3JnYn0gYmluZCBkZWYKKy9jb2wxMDIgezAuNjc4IDAuNjc4IDAuNjc4IHNyZ2J9IGJpbmQgZGVmCisvY29sMTAzIHswLjk2OSAwLjc0MSAwLjM1MyBzcmdifSBiaW5kIGRlZgorL2NvbDEwNCB7MC4zODggMC40MjAgMC42MTIgc3JnYn0gYmluZCBkZWYKKy9jb2wxMDUgezAuMzIyIDAuNDIwIDAuMTYxIHNyZ2J9IGJpbmQgZGVmCisvY29sMTA2IHswLjU4MCAwLjU4MCAwLjU4MCBzcmdifSBiaW5kIGRlZgorL2NvbDEwNyB7MC4wMDAgMC4zODggMC4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2wxMDggezAuMDAwIDAuMzg4IDAuMjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTA5IHswLjQ4MiAwLjUxOCAwLjI5MCBzcmdifSBiaW5kIGRlZgorL2NvbDExMCB7MC45MDYgMC43NDEgMC40ODIgc3JnYn0gYmluZCBkZWYKKy9jb2wxMTEgezAuNjQ3IDAuNzEwIDAuNzc2IHNyZ2J9IGJpbmQgZGVmCisvY29sMTEyIHswLjQyMCAwLjQyMCAwLjU4MCBzcmdifSBiaW5kIGRlZgorL2NvbDExMyB7MC41MTggMC40MjAgMC40MjAgc3JnYn0gYmluZCBkZWYKKy9jb2wxMTQgezAuMzIyIDAuNjEyIDAuMjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTE1IHswLjgzOSAwLjkwNiAwLjkwNiBzcmdifSBiaW5kIGRlZgorL2NvbDExNiB7MC4zMjIgMC4zODggMC4zODggc3JnYn0gYmluZCBkZWYKKy9jb2wxMTcgezAuMDk0IDAuNDIwIDAuMjkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTE4IHswLjYxMiAwLjY0NyAwLjcxMCBzcmdifSBiaW5kIGRlZgorL2NvbDExOSB7MS4wMDAgMC41ODAgMC4wMDAgc3JnYn0gYmluZCBkZWYKKy9jb2wxMjAgezEuMDAwIDAuNTgwIDAuMDAwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTIxIHswLjAwMCAwLjM4OCAwLjI5MCBzcmdifSBiaW5kIGRlZgorL2NvbDEyMiB7MC40ODIgMC41MTggMC4yOTAgc3JnYn0gYmluZCBkZWYKKy9jb2wxMjMgezAuMzg4IDAuNDUxIDAuNDgyIHNyZ2J9IGJpbmQgZGVmCisvY29sMTI0IHswLjkwNiAwLjc0MSAwLjQ4MiBzcmdifSBiaW5kIGRlZgorL2NvbDEyNSB7MC44NzEgMC44NzEgMC44NzEgc3JnYn0gYmluZCBkZWYKKy9jb2wxMjYgezAuOTUzIDAuOTMzIDAuODI3IHNyZ2J9IGJpbmQgZGVmCisvY29sMTI3IHswLjk2MSAwLjY4MiAwLjM2NSBzcmdifSBiaW5kIGRlZgorL2NvbDEyOCB7MC41ODQgMC44MDggMC42MDAgc3JnYn0gYmluZCBkZWYKKy9jb2wxMjkgezAuNzEwIDAuMDgyIDAuNDkwIHNyZ2J9IGJpbmQgZGVmCisvY29sMTMwIHswLjkzMyAwLjkzMyAwLjkzMyBzcmdifSBiaW5kIGRlZgorL2NvbDEzMSB7MC41MTggMC41MTggMC41MTggc3JnYn0gYmluZCBkZWYKKy9jb2wxMzIgezAuNDgyIDAuNDgyIDAuNDgyIHNyZ2J9IGJpbmQgZGVmCisvY29sMTMzIHswLjAwMCAwLjM1MyAwLjAwMCBzcmdifSBiaW5kIGRlZgorL2NvbDEzNCB7MC45MDYgMC40NTEgMC40NTEgc3JnYn0gYmluZCBkZWYKKy9jb2wxMzUgezEuMDAwIDAuNzk2IDAuMTkyIHNyZ2J9IGJpbmQgZGVmCisvY29sMTM2IHswLjE2MSAwLjQ3NSAwLjI5MCBzcmdifSBiaW5kIGRlZgorL2NvbDEzNyB7MC44NzEgMC4xNTcgMC4xMjkgc3JnYn0gYmluZCBkZWYKKy9jb2wxMzggezAuMTI5IDAuMzQ5IDAuNzc2IHNyZ2J9IGJpbmQgZGVmCisvY29sMTM5IHswLjk3MyAwLjk3MyAwLjk3MyBzcmdifSBiaW5kIGRlZgorL2NvbDE0MCB7MC45MDIgMC45MDIgMC45MDIgc3JnYn0gYmluZCBkZWYKKy9jb2wxNDEgezAuMTI5IDAuNTE4IDAuMzUzIHNyZ2J9IGJpbmQgZGVmCisvY29sMTQyIHswLjc4OCAwLjc4OCAwLjc4OCBzcmdifSBiaW5kIGRlZgorL2NvbDE0MyB7MC44NzUgMC44NDcgMC44NzUgc3JnYn0gYmluZCBkZWYKKy9jb2wxNDQgezAuOTY5IDAuOTUzIDAuOTY5IHNyZ2J9IGJpbmQgZGVmCisKK2VuZAorCisvY3Age2Nsb3NlcGF0aH0gYmluZCBkZWYKKy9lZiB7ZW9maWxsfSBiaW5kIGRlZgorL2dyIHtncmVzdG9yZX0gYmluZCBkZWYKKy9ncyB7Z3NhdmV9IGJpbmQgZGVmCisvc2Ege3NhdmV9IGJpbmQgZGVmCisvcnMge3Jlc3RvcmV9IGJpbmQgZGVmCisvbCB7bGluZXRvfSBiaW5kIGRlZgorL20ge21vdmV0b30gYmluZCBkZWYKKy9ybSB7cm1vdmV0b30gYmluZCBkZWYKKy9uIHtuZXdwYXRofSBiaW5kIGRlZgorL3Mge3N0cm9rZX0gYmluZCBkZWYKKy9zaCB7c2hvd30gYmluZCBkZWYKKy9zbGMge3NldGxpbmVjYXB9IGJpbmQgZGVmCisvc2xqIHtzZXRsaW5lam9pbn0gYmluZCBkZWYKKy9zbHcge3NldGxpbmV3aWR0aH0gYmluZCBkZWYKKy9zcmdiIHtzZXRyZ2Jjb2xvcn0gYmluZCBkZWYKKy9yb3Qge3JvdGF0ZX0gYmluZCBkZWYKKy9zYyB7c2NhbGV9IGJpbmQgZGVmCisvc2Qge3NldGRhc2h9IGJpbmQgZGVmCisvZmYge2ZpbmRmb250fSBiaW5kIGRlZgorL3NmIHtzZXRmb250fSBiaW5kIGRlZgorL3NjZiB7c2NhbGVmb250fSBiaW5kIGRlZgorL3N3IHtzdHJpbmd3aWR0aH0gYmluZCBkZWYKKy90ciB7dHJhbnNsYXRlfSBiaW5kIGRlZgorL3RudCB7ZHVwIGR1cCBjdXJyZW50cmdiY29sb3IKKyAgNCAtMiByb2xsIGR1cCAxIGV4Y2ggc3ViIDMgLTEgcm9sbCBtdWwgYWRkCisgIDQgLTIgcm9sbCBkdXAgMSBleGNoIHN1YiAzIC0xIHJvbGwgbXVsIGFkZAorICA0IC0yIHJvbGwgZHVwIDEgZXhjaCBzdWIgMyAtMSByb2xsIG11bCBhZGQgc3JnYn0KKyAgYmluZCBkZWYKKy9zaGQge2R1cCBkdXAgY3VycmVudHJnYmNvbG9yIDQgLTIgcm9sbCBtdWwgNCAtMiByb2xsIG11bAorICA0IC0yIHJvbGwgbXVsIHNyZ2J9IGJpbmQgZGVmCisvcmVlbmNkaWN0IDEyIGRpY3QgZGVmIC9SZUVuY29kZSB7IHJlZW5jZGljdCBiZWdpbgorL25ld2NvZGVzYW5kbmFtZXMgZXhjaCBkZWYgL25ld2ZvbnRuYW1lIGV4Y2ggZGVmIC9iYXNlZm9udG5hbWUgZXhjaCBkZWYKKy9iYXNlZm9udGRpY3QgYmFzZWZvbnRuYW1lIGZpbmRmb250IGRlZiAvbmV3Zm9udCBiYXNlZm9udGRpY3QgbWF4bGVuZ3RoIGRpY3QgZGVmCitiYXNlZm9udGRpY3QgeyBleGNoIGR1cCAvRklEIG5lIHsgZHVwIC9FbmNvZGluZyBlcQoreyBleGNoIGR1cCBsZW5ndGggYXJyYXkgY29weSBuZXdmb250IDMgMSByb2xsIHB1dCB9Cit7IGV4Y2ggbmV3Zm9udCAzIDEgcm9sbCBwdXQgfSBpZmVsc2UgfSB7IHBvcCBwb3AgfSBpZmVsc2UgfSBmb3JhbGwKK25ld2ZvbnQgL0ZvbnROYW1lIG5ld2ZvbnRuYW1lIHB1dCBuZXdjb2Rlc2FuZG5hbWVzIGFsb2FkIHBvcAorMTI4IDEgMjU1IHsgbmV3Zm9udCAvRW5jb2RpbmcgZ2V0IGV4Y2ggLy5ub3RkZWYgcHV0IH0gZm9yCituZXdjb2Rlc2FuZG5hbWVzIGxlbmd0aCAyIGlkaXYgeyBuZXdmb250IC9FbmNvZGluZyBnZXQgMyAxIHJvbGwgcHV0IH0gcmVwZWF0CituZXdmb250bmFtZSBuZXdmb250IGRlZmluZWZvbnQgcG9wIGVuZCB9IGRlZgorL2lzb3ZlYyBbCis4IzA1NSAvbWludXMgOCMyMDAgL2dyYXZlIDgjMjAxIC9hY3V0ZSA4IzIwMiAvY2lyY3VtZmxleCA4IzIwMyAvdGlsZGUKKzgjMjA0IC9tYWNyb24gOCMyMDUgL2JyZXZlIDgjMjA2IC9kb3RhY2NlbnQgOCMyMDcgL2RpZXJlc2lzCis4IzIxMCAvcmluZyA4IzIxMSAvY2VkaWxsYSA4IzIxMiAvaHVuZ2FydW1sYXV0IDgjMjEzIC9vZ29uZWsgOCMyMTQgL2Nhcm9uCis4IzIyMCAvZG90bGVzc2kgOCMyMzAgL29lIDgjMjMxIC9PRQorOCMyNDAgL3NwYWNlIDgjMjQxIC9leGNsYW1kb3duIDgjMjQyIC9jZW50IDgjMjQzIC9zdGVybGluZworOCMyNDQgL2N1cnJlbmN5IDgjMjQ1IC95ZW4gOCMyNDYgL2Jyb2tlbmJhciA4IzI0NyAvc2VjdGlvbiA4IzI1MCAvZGllcmVzaXMKKzgjMjUxIC9jb3B5cmlnaHQgOCMyNTIgL29yZGZlbWluaW5lIDgjMjUzIC9ndWlsbGVtb3RsZWZ0IDgjMjU0IC9sb2dpY2Fsbm90Cis4IzI1NSAvaHlwaGVuIDgjMjU2IC9yZWdpc3RlcmVkIDgjMjU3IC9tYWNyb24gOCMyNjAgL2RlZ3JlZSA4IzI2MSAvcGx1c21pbnVzCis4IzI2MiAvdHdvc3VwZXJpb3IgOCMyNjMgL3RocmVlc3VwZXJpb3IgOCMyNjQgL2FjdXRlIDgjMjY1IC9tdSA4IzI2NiAvcGFyYWdyYXBoCis4IzI2NyAvcGVyaW9kY2VudGVyZWQgOCMyNzAgL2NlZGlsbGEgOCMyNzEgL29uZXN1cGVyaW9yIDgjMjcyIC9vcmRtYXNjdWxpbmUKKzgjMjczIC9ndWlsbGVtb3RyaWdodCA4IzI3NCAvb25lcXVhcnRlciA4IzI3NSAvb25laGFsZgorOCMyNzYgL3RocmVlcXVhcnRlcnMgOCMyNzcgL3F1ZXN0aW9uZG93biA4IzMwMCAvQWdyYXZlIDgjMzAxIC9BYWN1dGUKKzgjMzAyIC9BY2lyY3VtZmxleCA4IzMwMyAvQXRpbGRlIDgjMzA0IC9BZGllcmVzaXMgOCMzMDUgL0FyaW5nCis4IzMwNiAvQUUgOCMzMDcgL0NjZWRpbGxhIDgjMzEwIC9FZ3JhdmUgOCMzMTEgL0VhY3V0ZQorOCMzMTIgL0VjaXJjdW1mbGV4IDgjMzEzIC9FZGllcmVzaXMgOCMzMTQgL0lncmF2ZSA4IzMxNSAvSWFjdXRlCis4IzMxNiAvSWNpcmN1bWZsZXggOCMzMTcgL0lkaWVyZXNpcyA4IzMyMCAvRXRoIDgjMzIxIC9OdGlsZGUgOCMzMjIgL09ncmF2ZQorOCMzMjMgL09hY3V0ZSA4IzMyNCAvT2NpcmN1bWZsZXggOCMzMjUgL090aWxkZSA4IzMyNiAvT2RpZXJlc2lzIDgjMzI3IC9tdWx0aXBseQorOCMzMzAgL09zbGFzaCA4IzMzMSAvVWdyYXZlIDgjMzMyIC9VYWN1dGUgOCMzMzMgL1VjaXJjdW1mbGV4Cis4IzMzNCAvVWRpZXJlc2lzIDgjMzM1IC9ZYWN1dGUgOCMzMzYgL1Rob3JuIDgjMzM3IC9nZXJtYW5kYmxzIDgjMzQwIC9hZ3JhdmUKKzgjMzQxIC9hYWN1dGUgOCMzNDIgL2FjaXJjdW1mbGV4IDgjMzQzIC9hdGlsZGUgOCMzNDQgL2FkaWVyZXNpcyA4IzM0NSAvYXJpbmcKKzgjMzQ2IC9hZSA4IzM0NyAvY2NlZGlsbGEgOCMzNTAgL2VncmF2ZSA4IzM1MSAvZWFjdXRlCis4IzM1MiAvZWNpcmN1bWZsZXggOCMzNTMgL2VkaWVyZXNpcyA4IzM1NCAvaWdyYXZlIDgjMzU1IC9pYWN1dGUKKzgjMzU2IC9pY2lyY3VtZmxleCA4IzM1NyAvaWRpZXJlc2lzIDgjMzYwIC9ldGggOCMzNjEgL250aWxkZSA4IzM2MiAvb2dyYXZlCis4IzM2MyAvb2FjdXRlIDgjMzY0IC9vY2lyY3VtZmxleCA4IzM2NSAvb3RpbGRlIDgjMzY2IC9vZGllcmVzaXMgOCMzNjcgL2RpdmlkZQorOCMzNzAgL29zbGFzaCA4IzM3MSAvdWdyYXZlIDgjMzcyIC91YWN1dGUgOCMzNzMgL3VjaXJjdW1mbGV4Cis4IzM3NCAvdWRpZXJlc2lzIDgjMzc1IC95YWN1dGUgOCMzNzYgL3Rob3JuIDgjMzc3IC95ZGllcmVzaXNdIGRlZgorL0hlbHZldGljYSAvSGVsdmV0aWNhLWlzbyBpc292ZWMgUmVFbmNvZGUKKy8kRjJwc0JlZ2luIHskRjJwc0RpY3QgYmVnaW4gLyRGMnBzRW50ZXJlZFN0YXRlIHNhdmUgZGVmfSBkZWYKKy8kRjJwc0VuZCB7JEYycHNFbnRlcmVkU3RhdGUgcmVzdG9yZSBlbmR9IGRlZgorCisvcGFnZWhlYWRlciB7CitzYXZlCituZXdwYXRoIDAgMzAwIG1vdmV0byAwIDAgbGluZXRvIDQ4OCAwIGxpbmV0byA0ODggMzAwIGxpbmV0byBjbG9zZXBhdGggY2xpcCBuZXdwYXRoCistMzIuNiAzNDguOSB0cmFuc2xhdGUKKzEgLTEgc2NhbGUKKyRGMnBzQmVnaW4KKzEwIHNldG1pdGVybGltaXQKKzAgc2xqIDAgc2xjCisgMC4wNjI5OSAwLjA2Mjk5IHNjCit9IGJpbmQgZGVmCisvcGFnZWZvb3RlciB7CiskRjJwc0VuZAorcmVzdG9yZQorfSBiaW5kIGRlZgorJSVFbmRQcm9sb2cKK3BhZ2VoZWFkZXIKKyUKKyUgRmlnIG9iamVjdHMgZm9sbG93CislCislIAorJSBoZXJlIHN0YXJ0cyBmaWd1cmUgd2l0aCBkZXB0aCA1MAorJSBQb2x5bGluZQorMCBzbGoKKzAgc2xjCisxNS4wMDAgc2x3CituIDY0NSA4MTAgbSA1NDAgODEwIDU0MCAyMDU1IDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1NDAgMjE2MCAyNjg1IDIxNjAgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDI3OTAgMjE2MCAyNzkwIDkxNSAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjc5MCA4MTAgNjQ1IDgxMCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIFBvbHlsaW5lCituIDY0NSAyNzkwIG0gNTQwIDI3OTAgNTQwIDQwMzUgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDU0MCA0MTQwIDI2ODUgNDE0MCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjc5MCA0MTQwIDI3OTAgMjg5NSAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjc5MCAyNzkwIDY0NSAyNzkwIDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gMzM0NSAyNzkwIG0gMzI0MCAyNzkwIDMyNDAgNDAzNSAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMzI0MCA0MTQwIDUzODUgNDE0MCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNTQ5MCA0MTQwIDU0OTAgMjg5NSAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNTQ5MCAyNzkwIDMzNDUgMjc5MCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIFBvbHlsaW5lCituIDYwNzUgMjgwNSBtIDU5NzAgMjgwNSA1OTcwIDQwNTAgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDU5NzAgNDE1NSA4MTE1IDQxNTUgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDgyMjAgNDE1NSA4MjIwIDI5MTAgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDgyMjAgMjgwNSA2MDc1IDI4MDUgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgY3AgZ3MgY29sMCBzIGdyIAorJSBQb2x5bGluZQorbiAzMzQ1IDgxMCBtIDMyNDAgODEwIDMyNDAgMjA1NSAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMzI0MCAyMTYwIDUzODUgMjE2MCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNTQ5MCAyMTYwIDU0OTAgOTE1IDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1NDkwIDgxMCAzMzQ1IDgxMCAxMDUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyBjcCBncyBjb2wwIHMgZ3IgCislIFBvbHlsaW5lCituIDYwOTAgODEwIG0gNTk4NSA4MTAgNTk4NSAyMDU1IDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1OTg1IDIxNjAgODEzMCAyMTYwIDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA4MjM1IDIxNjAgODIzNSA5MTUgMTA1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDgyMzUgODEwIDYwOTAgODEwIDEwNSBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gMzUxMyA0NTYzIG0gMzQzOCA0NTYzIDM0MzggNTQzOCA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICAzNDM4IDU1MTMgNDk0NyA1NTEzIDc1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDUwMjIgNTUxMyA1MDIyIDQ2MzggNzUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNTAyMiA0NTYzIDM1MTMgNDU2MyA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gNTU4MyA0NTYzIG0gNTUwOCA0NTYzIDU1MDggNTQzOCA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICA1NTA4IDU1MTMgNzAxNyA1NTEzIDc1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDcwOTIgNTUxMyA3MDkyIDQ2MzggNzUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgNzA5MiA0NTYzIDU1ODMgNDU2MyA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKyUgUG9seWxpbmUKK24gMTQ0MyA0NTY3IG0gMTM2OCA0NTY3IDEzNjggNTQ0MiA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorICAxMzY4IDU1MTcgMjg3NyA1NTE3IDc1IGFyY3RvIDQge3BvcH0gcmVwZWF0CisgIDI5NTIgNTUxNyAyOTUyIDQ2NDIgNzUgYXJjdG8gNCB7cG9wfSByZXBlYXQKKyAgMjk1MiA0NTY3IDE0NDMgNDU2NyA3NSBhcmN0byA0IHtwb3B9IHJlcGVhdAorIGNwIGdzIGNvbDAgcyBnciAKKy9IZWx2ZXRpY2EtaXNvIGZmIDMwMC4wMCBzY2Ygc2YKKzkwMCAxNDQwIG0KK2dzIDEgLTEgc2MgKFB1YmxpYy1LZXkpIGNvbDAgc2ggZ3IKKy9IZWx2ZXRpY2EtaXNvIGZmIDMwMC4wMCBzY2Ygc2YKKzkwMCAxODE1IG0KK2dzIDEgLTEgc2MgKEVuY3J5cHRpb24pIGNvbDAgc2ggZ3IKKy9IZWx2ZXRpY2EtaXNvIGZmIDMwMC4wMCBzY2Ygc2YKKzYzMCAzNDIwIG0KK2dzIDEgLTEgc2MgKE11bHRpLVByZWNpc2lvbi0pIGNvbDAgc2ggZ3IKKy9IZWx2ZXRpY2EtaXNvIGZmIDMwMC4wMCBzY2Ygc2YKKzkwMCAzNzk1IG0KK2dzIDEgLTEgc2MgKEludGVnZXJzKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAzMDAuMDAgc2NmIHNmCiszNDIwIDM0MjAgbQorZ3MgMSAtMSBzYyAoUHJpbWUtTnVtYmVyKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAzMDAuMDAgc2NmIHNmCiszNDIwIDM3OTUgbQorZ3MgMSAtMSBzYyAoR2VuZXJhdG9yKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAzMDAuMDAgc2NmIHNmCis2NDIwIDM0MzUgbQorZ3MgMSAtMSBzYyAoUmFuZG9tKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAzMDAuMDAgc2NmIHNmCis2NDIwIDM4MTAgbQorZ3MgMSAtMSBzYyAoTnVtYmVycykgY29sMCBzaCBncgorL0hlbHZldGljYS1pc28gZmYgMzAwLjAwIHNjZiBzZgorMzYwMCAxNDQwIG0KK2dzIDEgLTEgc2MgKFN5bW1ldHJpYykgY29sMCBzaCBncgorL0hlbHZldGljYS1pc28gZmYgMzAwLjAwIHNjZiBzZgorMzYwMCAxODE1IG0KK2dzIDEgLTEgc2MgKEVuY3J5cHRpb24pIGNvbDAgc2ggZ3IKKy9IZWx2ZXRpY2EtaXNvIGZmIDMwMC4wMCBzY2Ygc2YKKzY0MzUgMTQ0MCBtCitncyAxIC0xIHNjIChIYXNoaW5nKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAzMDAuMDAgc2NmIHNmCis2NDM1IDE4MTUgbQorZ3MgMSAtMSBzYyAoTUFDaW5nKSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAyMTAuMDAgc2NmIHNmCiszODI1IDUxMzAgbQorZ3MgMSAtMSBzYyAoTWVtb3J5KSBjb2wwIHNoIGdyCisvSGVsdmV0aWNhLWlzbyBmZiAyMTAuMDAgc2NmIHNmCis1NjM1IDUxMzMgbQorZ3MgMSAtMSBzYyAoTWlzY2VsbGVhbm91cykgY29sMCBzaCBncgorL0hlbHZldGljYS1pc28gZmYgMjEwLjAwIHNjZiBzZgorMTQ5NSA1MTM3IG0KK2dzIDEgLTEgc2MgKFMtZXhwcmVzc2lvbnMpIGNvbDAgc2ggZ3IKKyUgaGVyZSBlbmRzIGZpZ3VyZTsKK3BhZ2Vmb290ZXIKK3Nob3dwYWdlCislJVRyYWlsZXIKKyVFT0YKZGlmZiAtLWdpdCBhL2RvYy9saWJnY3J5cHQtbW9kdWxlcy5maWcgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMuZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhM2QwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMuZmlnCkBAIC0wLDAgKzEsMTkzIEBACisjRklHIDMuMgorTGFuZHNjYXBlCitDZW50ZXIKK01ldHJpYworQTQgICAgICAKKzEwMC4wMAorU2luZ2xlCistMgorMTIwMCAyCiswIDMyICM4ZThlOGUKKzAgMzMgIzQxNDU0MQorMCAzNCAjYzBjMGMwCiswIDM1ICM4MDgwODAKKzAgMzYgIzYzNjM2MworMCAzNyAjY2RjZGNkCiswIDM4ICM2YzZjNmMKKzAgMzkgI2M2Yjc5NworMCA0MCAjZWZmOGZmCiswIDQxICNkY2NiYTYKKzAgNDIgIzQwNDA0MAorMCA0MyAjZTBlMGUwCiswIDQ0ICM4ZThmOGUKKzAgNDUgI2FhYWFhYQorMCA0NiAjNTU1NTU1CiswIDQ3ICNkN2Q3ZDcKKzAgNDggI2FlYWVhZQorMCA0OSAjYmViZWJlCiswIDUwICM1MTUxNTEKKzAgNTEgI2U3ZTNlNworMCA1MiAjMDAwMDQ5CiswIDUzICM3OTc5NzkKKzAgNTQgIzMwMzQzMAorMCA1NSAjNDE0MTQxCiswIDU2ICNjN2I2OTYKKzAgNTcgI2RkOWQ5MworMCA1OCAjZjFlY2UwCiswIDU5ICNjM2MzYzMKKzAgNjAgI2UyYzhhOAorMCA2MSAjZTFlMWUxCiswIDYyICNkMmQyZDIKKzAgNjMgI2VkZWRlZAorMCA2NCAjZGE3YTFhCiswIDY1ICNmMWU0MWEKKzAgNjYgIzg4N2RjMgorMCA2NyAjZDZkNmQ2CiswIDY4ICM4YzhjYTUKKzAgNjkgIzRhNGE0YQorMCA3MCAjOGM2YjZiCiswIDcxICM1YTVhNWEKKzAgNzIgI2I3OWI3MworMCA3MyAjNDE5M2ZmCiswIDc0ICNiZjcwM2IKKzAgNzUgI2RiNzcwMAorMCA3NiAjZGFiODAwCiswIDc3ICMwMDY0MDAKKzAgNzggIzVhNmIzYgorMCA3OSAjZDNkM2QzCiswIDgwICM4ZThlYTQKKzAgODEgI2YzYjk1ZAorMCA4MiAjODk5OTZiCiswIDgzICM2NDY0NjQKKzAgODQgI2I3ZTZmZgorMCA4NSAjODZjMGVjCiswIDg2ICNiZGJkYmQKKzAgODcgI2QzOTU1MgorMCA4OCAjOThkMmZlCiswIDg5ICM4YzljNmIKKzAgOTAgI2Y3NmIwMAorMCA5MSAjNWE2YjM5CiswIDkyICM4YzljNmIKKzAgOTMgIzhjOWM3YgorMCA5NCAjMTg0YTE4CiswIDk1ICNhZGFkYWQKKzAgOTYgI2Y3YmQ1YQorMCA5NyAjNjM2YjljCiswIDk4ICNmN2Y3ZjcKKzAgOTkgI2RlMDAwMAorMCAxMDAgI2FkYWRhZAorMCAxMDEgI2Y3YmQ1YQorMCAxMDIgI2FkYWRhZAorMCAxMDMgI2Y3YmQ1YQorMCAxMDQgIzYzNmI5YworMCAxMDUgIzUyNmIyOQorMCAxMDYgIzk0OTQ5NAorMCAxMDcgIzAwNjMwMAorMCAxMDggIzAwNjM0YQorMCAxMDkgIzdiODQ0YQorMCAxMTAgI2U3YmQ3YgorMCAxMTEgI2E1YjVjNgorMCAxMTIgIzZiNmI5NAorMCAxMTMgIzg0NmI2YgorMCAxMTQgIzUyOWM0YQorMCAxMTUgI2Q2ZTdlNworMCAxMTYgIzUyNjM2MworMCAxMTcgIzE4NmI0YQorMCAxMTggIzljYTViNQorMCAxMTkgI2ZmOTQwMAorMCAxMjAgI2ZmOTQwMAorMCAxMjEgIzAwNjM0YQorMCAxMjIgIzdiODQ0YQorMCAxMjMgIzYzNzM3YgorMCAxMjQgI2U3YmQ3YgorMCAxMjUgI2RlZGVkZQorMCAxMjYgI2YzZWVkMworMCAxMjcgI2Y1YWU1ZAorMCAxMjggIzk1Y2U5OQorMCAxMjkgI2I1MTU3ZAorMCAxMzAgI2VlZWVlZQorMCAxMzEgIzg0ODQ4NAorMCAxMzIgIzdiN2I3YgorMCAxMzMgIzAwNWEwMAorMCAxMzQgI2U3NzM3MworMCAxMzUgI2ZmY2IzMQorMCAxMzYgIzI5Nzk0YQorMCAxMzcgI2RlMjgyMQorMCAxMzggIzIxNTljNgorMCAxMzkgI2Y4ZjhmOAorMCAxNDAgI2U2ZTZlNgorMCAxNDEgIzIxODQ1YQorMCAxNDIgI2M5YzljOQorMCAxNDMgI2RmZDhkZgorMCAxNDQgI2Y3ZjNmNworNiA0NTAgNzIwIDgzMjUgNTU4MAorNiA0NTAgNzIwIDgzMjUgNDI3NQorNiA0NTAgNzIwIDI4ODAgMjI1MAorNiA5MDAgMTE3MCAyMzQwIDE4OTAKKzQgMCAwIDUwIC0xIDE2IDIwIDAuMDAwMCA0IDMwMCAxNDEwIDkwMCAxNDQwIFB1YmxpYy1LZXlcMDAxCis0IDAgMCA1MCAtMSAxNiAyMCAwLjAwMDAgNCAzMDAgMTQxMCA5MDAgMTgxNSBFbmNyeXB0aW9uXDAwMQorLTYKKzIgNCAwIDIgMCA3IDUwIC0xIC0xIDAuMDAwIDAgMCA3IDAgMCA1CisJIDI3OTAgMjE2MCAyNzkwIDgxMCA1NDAgODEwIDU0MCAyMTYwIDI3OTAgMjE2MAorLTYKKzYgNTI1IDI3NzUgMjgwNSA0MTU1Cis2IDYzMCAzMTUwIDI3MDAgMzg3MAorNiA2MzAgMzE1MCAyNzAwIDM4NzAKKzQgMCAwIDUwIC0xIDE2IDIwIDAuMDAwMCA0IDIyNSAyMDU1IDYzMCAzNDIwIE11bHRpLVByZWNpc2lvbi1cMDAxCis0IDAgMCA1MCAtMSAxNiAyMCAwLjAwMDAgNCAzMDAgMTA5NSA5MDAgMzc5NSBJbnRlZ2Vyc1wwMDEKKy02CistNgorMiA0IDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDcgMCAwIDUKKwkgMjc5MCA0MTQwIDI3OTAgMjc5MCA1NDAgMjc5MCA1NDAgNDE0MCAyNzkwIDQxNDAKKy02Cis2IDMxNTAgMjcwMCA1NTgwIDQyMzAKKzYgMzQyMCAzMTUwIDU0MDAgMzg3MAorNCAwIDAgNTAgLTEgMTYgMjAgMC4wMDAwIDQgMjI1IDE5NjUgMzQyMCAzNDIwIFByaW1lLU51bWJlclwwMDEKKzQgMCAwIDUwIC0xIDE2IDIwIDAuMDAwMCA0IDIyNSAxMzY1IDM0MjAgMzc5NSBHZW5lcmF0b3JcMDAxCistNgorMiA0IDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDcgMCAwIDUKKwkgNTQ5MCA0MTQwIDU0OTAgMjc5MCAzMjQwIDI3OTAgMzI0MCA0MTQwIDU0OTAgNDE0MAorLTYKKzYgNTg4MCAyNzE1IDgzMTAgNDI0NQorNiA2NDIwIDMxNjUgNzY4MCAzODg1Cis0IDAgMCA1MCAtMSAxNiAyMCAwLjAwMDAgNCAyMjUgMTE0MCA2NDIwIDM0MzUgUmFuZG9tXDAwMQorNCAwIDAgNTAgLTEgMTYgMjAgMC4wMDAwIDQgMjI1IDEyMzAgNjQyMCAzODEwIE51bWJlcnNcMDAxCistNgorMiA0IDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDcgMCAwIDUKKwkgODIyMCA0MTU1IDgyMjAgMjgwNSA1OTcwIDI4MDUgNTk3MCA0MTU1IDgyMjAgNDE1NQorLTYKKzYgMzE1MCA3MjAgNTU4MCAyMjUwCis2IDM2MDAgMTE3MCA1MDQwIDE4OTAKKzQgMCAwIDUwIC0xIDE2IDIwIDAuMDAwMCA0IDMwMCAxNDI1IDM2MDAgMTQ0MCBTeW1tZXRyaWNcMDAxCis0IDAgMCA1MCAtMSAxNiAyMCAwLjAwMDAgNCAzMDAgMTQxMCAzNjAwIDE4MTUgRW5jcnlwdGlvblwwMDEKKy02CisyIDQgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgNyAwIDAgNQorCSA1NDkwIDIxNjAgNTQ5MCA4MTAgMzI0MCA4MTAgMzI0MCAyMTYwIDU0OTAgMjE2MAorLTYKKzYgNTk0MCA3NjUgODI4MCAyMjA1Cis2IDY0MzUgMTIxNSA3NTMwIDE4OTAKKzQgMCAwIDUwIC0xIDE2IDIwIDAuMDAwMCA0IDMwMCAxMDk1IDY0MzUgMTQ0MCBIYXNoaW5nXDAwMQorNCAwIDAgNTAgLTEgMTYgMjAgMC4wMDAwIDQgMzAwIDEwNjUgNjQzNSAxODE1IE1BQ2luZ1wwMDEKKy02CisyIDQgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgNyAwIDAgNQorCSA4MjM1IDIxNjAgODIzNSA4MTAgNTk4NSA4MTAgNTk4NSAyMTYwIDgyMzUgMjE2MAorLTYKKy02Cis2IDEzMDUgNDUwMCA3MTU1IDU1ODAKKzYgMzM3NSA0NTAwIDUwODUgNTU4MAorMiA0IDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDUgMCAwIDUKKwkgNTAyMiA1NTEzIDUwMjIgNDU2MyAzNDM4IDQ1NjMgMzQzOCA1NTEzIDUwMjIgNTUxMworNCAwIDAgNTAgLTEgMTYgMTQgMC4wMDAwIDQgMTk1IDc4MCAzODI1IDUxMzAgTWVtb3J5XDAwMQorLTYKKzYgNTQ0NSA0NTAwIDcxNTUgNTU3NgorMiA0IDAgMiAwIDcgNTAgLTEgLTEgMC4wMDAgMCAwIDUgMCAwIDUKKwkgNzA5MiA1NTEzIDcwOTIgNDU2MyA1NTA4IDQ1NjMgNTUwOCA1NTEzIDcwOTIgNTUxMworNCAwIDAgNTAgLTEgMTYgMTQgMC4wMDAwIDQgMTUwIDEzNTAgNTYzNSA1MTMzIE1pc2NlbGxlYW5vdXNcMDAxCistNgorNiAxMzA1IDQ1MDQgMzAxNSA1NTgwCisyIDQgMCAyIDAgNyA1MCAtMSAtMSAwLjAwMCAwIDAgNSAwIDAgNQorCSAyOTUyIDU1MTcgMjk1MiA0NTY3IDEzNjggNDU2NyAxMzY4IDU1MTcgMjk1MiA1NTE3Cis0IDAgMCA1MCAtMSAxNiAxNCAwLjAwMDAgNCAxOTUgMTM1MCAxNDk1IDUxMzcgUy1leHByZXNzaW9uc1wwMDEKKy02CistNgorLTYKZGlmZiAtLWdpdCBhL2RvYy9saWJnY3J5cHQtbW9kdWxlcy5wZGYgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExN2UyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9saWJnY3J5cHQtbW9kdWxlcy5wbmcgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDU1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGliZ2NyeXB0LW1vZHVsZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9zdGFtcC12dGkgYi9kb2Mvc3RhbXAtdnRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTllZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3RhbXAtdnRpCkBAIC0wLDAgKzEsNCBAQAorQHNldCBVUERBVEVEIDI5IEphbnVhcnkgMjAxNAorQHNldCBVUERBVEVELU1PTlRIIEphbnVhcnkgMjAxNAorQHNldCBFRElUSU9OIDEuNi4xCitAc2V0IFZFUlNJT04gMS42LjEKZGlmZiAtLWdpdCBhL2RvYy92ZXJzaW9uLnRleGkgYi9kb2MvdmVyc2lvbi50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTllZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdmVyc2lvbi50ZXhpCkBAIC0wLDAgKzEsNCBAQAorQHNldCBVUERBVEVEIDI5IEphbnVhcnkgMjAxNAorQHNldCBVUERBVEVELU1PTlRIIEphbnVhcnkgMjAxNAorQHNldCBFRElUSU9OIDEuNi4xCitAc2V0IFZFUlNJT04gMS42LjEKZGlmZiAtLWdpdCBhL2RvYy95YXQybS5jIGIvZG9jL3lhdDJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjNDM5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy95YXQybS5jCkBAIC0wLDAgKzEsMTQ4NiBAQAorLyogeWF0Mm0uYyAtIFlldCBBbm90aGVyIFRleGkgMiBNYW4gY29udmVydGVyCisgKglDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMTMgZzEwIENvZGUgR21iSAorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgICAgVGhpcyBpcyBhIHNpbXBsZSB0ZXhpbmZvIHRvIG1hbiBwYWdlIGNvbnZlcnRlci4gIEl0IG5lZWRzIHNvbWUKKyAgICBzcGVjaWFsIG1hcmt1cCBpbiB0aCBlIHRleGluZm8gYW5kIHRyaWVzIGJlc3QgdG8gZ2V0IGEgY3JlYXRlIG1hbgorICAgIHBhZ2UuICBJdCBoYXMgYmVlbiBkZXNpZ25lZCBmb3IgdGhlIEdudVBHIG1hbiBwYWdlcyBhbmQgdGh1cyBvbmx5CisgICAgYSBmZXcgdGV4aW5mbyBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLgorCisgICAgVG8gdXNlIHRoaXMgeW91IG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGludG8geW91ciB0ZXhpbmZvCisgICAgc291cmNlOgorCisgICAgICBAbWFjcm8gbWFucGFnZSB7YX0KKyAgICAgIEBlbmQgbWFjcm8KKyAgICAgIEBtYWNybyBtYW5zZWN0IHthfQorICAgICAgQGVuZCBtYWNybworICAgICAgQG1hY3JvIG1hbnBhdXNlCisgICAgICBAZW5kIG1hY3JvCisgICAgICBAbWFjcm8gbWFuY29udAorICAgICAgQGVuZCBtYWNybworCisgICAgVGhleSBhcmUgdXNlZCBieSB5YXQybSB0byBzZWxlY3QgcGFydHMgb2YgdGhlIFRleGluZm8gd2hpY2ggc2hvdWxkCisgICAgZ28gaW50byB0aGUgbWFuIHBhZ2UuIFRoZXNlIG1hY3JvcyBuZWVkIHRvIGJlIHVzZWQgd2l0aG91dCBsZWFkaW5nCisgICAgbGVmdCBzcGFjZS4gUHJvY2Vzc2luZyBzdGFydHMgYWZ0ZXIgYSAibWFucGFnZSIgbWFjcm8gaGFzIGJlZW4KKyAgICBzZWVuLiAgIm1hbnNlY3QiIGlkZW50aWZpZXMgdGhlIHNlY3Rpb24gYW5kIHlhdDJtIG1ha2Ugc3VyZSB0bworICAgIGVtaXQgdGhlIHNlY3Rpb25zIGluIHRoZSBwcm9wZXIgb3JkZXIuICBOb3RlIHRoYXQgQG1hbnNlY3Qgc2tpcHMKKyAgICB0aGUgbmV4dCBpbnB1dCBsaW5lIGlmIHRoYXQgbGluZSBiZWdpbnMgd2l0aCBAc2VjdGlvbiwgQHN1YnNlY3Rpb24gb3IKKyAgICBAY2hhcGhlYWRpbmcuCisKKyAgICBUbyBpbnNlcnQgdmVyYmF0aW0gdHJvZmYgbWFya3VwLCB0aGUgZm9sbG93aW5nIHRleGluZm8gY29kZSBtYXkgYmUKKyAgICB1c2VkOgorCisgICAgICBAaWZzZXQgbWFudmVyYgorICAgICAgLkIgd2hhdGVldmVyIHlvdSB3YW50CisgICAgICBAZW5kIGlmc2V0CisKKyAgICBhbHRlcm5hdGl2bHkgYSBzcGVjaWFsIGNvbW1lbnQgbWF5IGJlIHVzZWQ6CisKKyAgICAgIEBjIG1hbjouQiB3aGF0ZXZlciB5b3Ugd2FudAorCisgICAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZSB5b3UgbmVlZCBqdXN0IG9uZSBsaW5lLiBJZiB5b3Ugd2FudCB0bworICAgIGluY2x1ZGUgcGFydHMgb25seSBpbiB0aGUgbWFuIHBhZ2UgYnV0IGtlZXAgdGhlIHRleGluZm8KKyAgICB0cmFuc2xhdGlvbiB5b3UgbWF5IHVzZToKKworICAgICAgQGlmc2V0IGlzbWFuCisgICAgICBzdHVmZiB0byBiZSByZW5kZXJlZCBvbmx5IG9uIG1hbiBwYWdlcworICAgICAgQGVuZCBpZnNldAorCisgICAgb3IgdG8gZXhjbHVkZSBzdHVmZiBmcm9tIG1hbiBwYWdlczoKKworICAgICAgQGlmY2xlYXIgaXNtYW4KKyAgICAgIHN0dWZmIG5vdCB0byBiZSByZW5kZXJlZCBvbiBtYW4gcGFnZXMKKyAgICAgIEBlbmQgaWZjbGVhcgorCisgICAgdGhlIGtleXdvcmQgQHNlY3Rpb24gaXMgaWdub3JlZCwgaG93ZXZlciBAc3Vic2VjdGlvbiBnZXRzIHJlbmRlcmVkCisgICAgYXMgIi5TUyIuICBAbWVudSBpcyBjb21wbGV0ZWx5IHNraXBwZWQuIFNldmVyYWwgbWFuIHBhZ2VzIG1heSBiZQorICAgIGV4dHJhY3RlZCBmcm9tIG9uZSBmaWxlLCBlaXRoZXIgdXNpbmcgdGhlIC0tc3RvcmUgb3IgdGhlIC0tc2VsZWN0CisgICAgb3B0aW9uLgorCisgICAgSWYgeW91IHdhbnQgdG8gaW5kZW50IHRhYmxlcyBpbiB0aGUgc291cmNlIHVzZSB0aGlzIHN0eWxlOgorCisgICAgICBAdGFibGUgZm9vCisgICAgICAgIEBpdGVtCisgICAgICAgIEBpdGVtCisgICAgICAgIEB0YWJsZQorICAgICAgICAgIEBpdGVtCisgICAgICAgIEBlbmQKKyAgICAgIEBlbmQKKworICAgIERvbid0IGNoYW5nZSB0aGUgaW5kZW50YXRpb24gd2l0aGluIGEgdGFibGUgYW5kIGtlZXAgdGhlIHNhbWUKKyAgICBudW1iZXIgb2Ygd2hpdGUgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgeWF0Mm0gc2ltcGx5CisgICAgZGV0ZWN0cyB0aGUgbnVtYmVyIG9mIHdoaXRlIHNwYWNlcyBpbiBmcm9udCBvZiBhbiBAaXRlbSBhbmQgcmVtb3ZlCisgICAgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIGZyb20gYWxsIGZvbGxvd2luZyBsaW5lcyB1bnRpbCBhIG5ldyBAaXRlbQorICAgIGlzIGZvdW5kIG9yIHRoZXJlIGFyZSBsZXNzIHNwYWNlcyB0aGFuIGZvciB0aGUgbGFzdCBAaXRlbS4KKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKworI2RlZmluZSBQR00gInlhdDJtIgorI2RlZmluZSBWRVJTSU9OICIxLjAiCisKKy8qIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGxpbmUgaW5jbHVkaW5nIHRoZSBsaW5lZmVlZCBhbmQgb25lIGV4dHJhCisgICBjaGFyYWN0ZXIuICovCisjZGVmaW5lIExJTkVTSVpFIDEwMjQKKworLyogTnVtYmVyIG9mIGFsbG93ZWQgY29uZGl0aW9uIG5lc3RpbmdzLiAgKi8KKyNkZWZpbmUgTUFYX0NPTkRJVElPTl9ORVNUSU5HICAxMAorCisvKiBPcHRpb24gZmxhZ3MuICovCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IHF1aWV0Oworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBjb25zdCBjaGFyICpvcHRfc291cmNlOworc3RhdGljIGNvbnN0IGNoYXIgKm9wdF9yZWxlYXNlOworc3RhdGljIGNvbnN0IGNoYXIgKm9wdF9zZWxlY3Q7CitzdGF0aWMgY29uc3QgY2hhciAqb3B0X2luY2x1ZGU7CitzdGF0aWMgaW50IG9wdF9zdG9yZTsKKworLyogRmxhZyB0byBrZWVwIHRyYWNrIHdoZXRoZXIgYW55IGVycm9yIG9jY3VycmVkLiAgKi8KK3N0YXRpYyBpbnQgYW55X2Vycm9yOworCisKKy8qIE9iamVjdCB0byBrZWVwIG1hY3JvIGRlZmluaXRpb25zLiAgKi8KK3N0cnVjdCBtYWNyb19zCit7CisgIHN0cnVjdCBtYWNyb19zICpuZXh0OworICBjaGFyICp2YWx1ZTsgICAgLyogTWFsbG9jZWQgdmFsdWUuICovCisgIGNoYXIgbmFtZVsxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBtYWNyb19zICptYWNyb190OworCisvKiBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3Jvcy4gKi8KK3N0YXRpYyBtYWNyb190IG1hY3JvbGlzdDsKKworLyogTGlzdCBvZiBnbG9iYWwgbWFjcm8gbmFtZXMuICBUaGUgdmFsdWUgcGFydCBpcyBub3QgdXNlZC4gICovCitzdGF0aWMgbWFjcm9fdCBwcmVkZWZpbmVkbWFjcm9saXN0OworCisvKiBPYmplY3QgdG8ga2VlcCB0cmFjayBvZiBAaXNzZXQgYW5kIEBpZmNsZWFyLiAgKi8KK3N0cnVjdCBjb25kaXRpb25fcworeworICBpbnQgbWFudmVyYjsgICAvKiAibWFudmVyYiIgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuICAqLworICBpbnQgaXNzZXQ7ICAgICAvKiBUaGlzIGlzIGFuIEBpc3NldCBjb25kaXRpb24uICAqLworICBjaGFyIG5hbWVbMV07ICAvKiBOYW1lIG9mIHRoZSBjb25kaXRpb24gbWFjcm8uICAqLworfTsKK3R5cGVkZWYgc3RydWN0IGNvbmRpdGlvbl9zICpjb25kaXRpb25fdDsKKworLyogVGhlIHN0YWNrIHVzZWQgdG8gZXZhbHVhdGUgY29uZGl0aW9ucy4gIEFuZCB0aGUgY3VycmVudCBzdGF0ZXMuICovCitzdGF0aWMgY29uZGl0aW9uX3QgY29uZGl0aW9uX3N0YWNrW01BWF9DT05ESVRJT05fTkVTVElOR107CitzdGF0aWMgaW50IGNvbmRpdGlvbl9zdGFja19pZHg7CitzdGF0aWMgaW50IGNvbmRfaXNfYWN0aXZlOyAgICAgLyogU3RhdGUgb2YgaWZzZXQvaWZjbGVhciAqLworc3RhdGljIGludCBjb25kX2luX3ZlcmJhdGltOyAgIC8qIFN0YXRlIG9mICJtYW52ZXJiIi4gICovCisKKworLyogT2JqZWN0IHRvIHN0b3JlIG9uZSBsaW5lIG9mIGNvbnRlbnQuICAqLworc3RydWN0IGxpbmVfYnVmZmVyX3MKK3sKKyAgc3RydWN0IGxpbmVfYnVmZmVyX3MgKm5leHQ7CisgIGludCB2ZXJiYXRpbTsgIC8qIFRydWUgaWYgTElORSBjb250YWlucyB2ZXJiYXRpbSBkYXRhLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgaXMgVGV4aW5mbyBzb3VyY2UuICAqLworICBjaGFyICpsaW5lOworfTsKK3R5cGVkZWYgc3RydWN0IGxpbmVfYnVmZmVyX3MgKmxpbmVfYnVmZmVyX3Q7CisKKworLyogT2JqZWN0IHRvIGNvbGxlY3QgdGhlIGRhdGEgb2YgYSBzZWN0aW9uLiAgKi8KK3N0cnVjdCBzZWN0aW9uX2J1ZmZlcl9zCit7CisgIGNoYXIgKm5hbWU7ICAgICAgICAgICAvKiBNYWxsb2NlZCBuYW1lIG9mIHRoZSBzZWN0aW9uLiBUaGlzIG1heSBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBpbmRpY2F0ZSB0aGlzIHNsb3QgaXMgbm90IHVzZWQuICAqLworICBsaW5lX2J1ZmZlcl90IGxpbmVzOyAgLyogTGlua2VkIGxpc3Qgd2l0aCB0aGUgbGluZXMgb2YgdGhlIHNlY3Rpb24uICAqLworICBsaW5lX2J1ZmZlcl90ICpsaW5lc190YWlsOyAvKiBIZWxwZXIgZm9yIGZhc3RlciBhcHBlbmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZCBsaXN0LiAgKi8KKyAgbGluZV9idWZmZXJfdCBsYXN0X2xpbmU7ICAgLyogUG9pbnRzIHRvIHRoZSBsYXN0IGxpbmUgYXBwZW5kZWQuICAqLworfTsKK3R5cGVkZWYgc3RydWN0IHNlY3Rpb25fYnVmZmVyX3MgKnNlY3Rpb25fYnVmZmVyX3Q7CisKKy8qIFZhcmlhYmxlIHRvIGtlZXAgaW5mbyBhYm91dCB0aGUgY3VycmVudCBwYWdlIHRvZ2V0aGVyLiAgKi8KK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgLyogRmlsZW5hbWUgb2YgdGhlIGN1cnJlbnQgcGFnZSBvciBOVUxMIGlmIG5vIHBhZ2UgaXMgYWN0aXZlLiAgTWFsbG9jZWQuICovCisgIGNoYXIgKm5hbWU7CisKKyAgLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBlbGVtZW50cyBpbiBTRUNUSU9OUyBiZWxvdy4gICovCisgIHNpemVfdCBuX3NlY3Rpb25zOworICAvKiBBcnJheSB3aXRoIHRoZSBkYXRhIG9mIHRoZSBzZWN0aW9ucy4gICovCisgIHNlY3Rpb25fYnVmZmVyX3Qgc2VjdGlvbnM7CisKK30gdGhlcGFnZTsKKworCisvKiBUaGUgbGlzdCBvZiBzdGFuZGFyZCBzZWN0aW9uIG5hbWVzLiAgQ09NTUFORFMgYW5kIEFTU1VBTiBhcmUgR251UEcKKyAgIHNwZWNpZmljLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdGFuZGFyZF9zZWN0aW9uc1tdID0KKyAgeyAiTkFNRSIsICAiU1lOT1BTSVMiLCAgIkRFU0NSSVBUSU9OIiwKKyAgICAiUkVUVVJOIFZBTFVFIiwgIkVYSVQgU1RBVFVTIiwgIkVSUk9SIEhBTkRMSU5HIiwgIkVSUk9SUyIsCisgICAgIkNPTU1BTkRTIiwgIk9QVElPTlMiLCAiVVNBR0UiLCAiRVhBTVBMRVMiLCAiRklMRVMiLAorICAgICJFTlZJUk9OTUVOVCIsICJESUFHTk9TVElDUyIsICJTRUNVUklUWSIsICJDT05GT1JNSU5HIFRPIiwKKyAgICAiQVNTVUFOIiwgIk5PVEVTIiwgIkJVR1MiLCAiQVVUSE9SIiwgIlNFRSBBTFNPIiwgTlVMTCB9OworCisKKy8qLS0gTG9jYWwgcHJvdG90eXBlcy4gIC0tKi8KK3N0YXRpYyB2b2lkIHByb2NfdGV4aV9idWZmZXIgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJsZV9sZXZlbCwgaW50ICplb2xfYWN0aW9uKTsKKworCisKKy8qIFByaW50IGRpYWdub3N0aWMgbWVzc2FnZSBhbmQgZXhpdCB3aXRoIGZhaWx1cmUuICovCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIHB1dGMgKCdcbicsIHN0ZGVycik7CisKKyAgZXhpdCAoMSk7Cit9CisKKworLyogUHJpbnQgZGlhZ25vc3RpYyBtZXNzYWdlLiAqLworc3RhdGljIHZvaWQKK2VyciAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGlmIChzdHJuY21wIChmb3JtYXQsICIlczolZDoiLCA2KSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgYW55X2Vycm9yID0gMTsKK30KKworLyogUHJpbnQgZGlhZ25vc3RpYyBtZXNzYWdlLiAqLworc3RhdGljIHZvaWQKK2luZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBwdXRjICgnXG4nLCBzdGRlcnIpOworfQorCisKK3N0YXRpYyB2b2lkICoKK3htYWxsb2MgKHNpemVfdCBuKQoreworICB2b2lkICpwID0gbWFsbG9jIChuKTsKKyAgaWYgKCFwKQorICAgIGRpZSAoIm91dCBvZiBjb3JlOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICByZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgKgoreGNhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBtKQoreworICB2b2lkICpwID0gY2FsbG9jIChuLCBtKTsKKyAgaWYgKCFwKQorICAgIGRpZSAoIm91dCBvZiBjb3JlOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICByZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgKgoreHJlYWxsb2MgKHZvaWQgKm9sZCwgc2l6ZV90IG4pCit7CisgIHZvaWQgKnAgPSByZWFsbG9jIChvbGQsIG4pOworICBpZiAoIXApCisgICAgZGllICgib3V0IG9mIGNvcmU6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgIHJldHVybiBwOworfQorCitzdGF0aWMgY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHZvaWQgKnAgPSBtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSsxKTsKKyAgaWYgKCFwKQorICAgIGRpZSAoIm91dCBvZiBjb3JlOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICBzdHJjcHkgKHAsIHN0cmluZyk7CisgIHJldHVybiBwOworfQorCisKKy8qIFVwcGVyY2FzZSB0aGUgYXNjaWkgY2hhcmFjdGVycyBpbiBTVFJJTkcuICAqLworc3RhdGljIGNoYXIgKgorYXNjaWlfc3RydXByIChjaGFyICpzdHJpbmcpCit7CisgIGNoYXIgKnA7CisKKyAgZm9yIChwID0gc3RyaW5nOyAqcDsgcCsrKQorICAgIGlmICghKCpwICYgMHg4MCkpCisgICAgICAqcCA9IHRvdXBwZXIgKCpwKTsKKyAgcmV0dXJuIHN0cmluZzsKK30KKworCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZSBhcyBhbiBJU08gc3RyaW5nLiAgKi8KK2NvbnN0IGNoYXIgKgoraXNvZGF0ZXN0cmluZyAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgYnVmZmVyWzExKzVdOworICBzdHJ1Y3QgdG0gKnRwOworICB0aW1lX3QgYXRpbWUgPSB0aW1lIChOVUxMKTsKKworICBpZiAoYXRpbWUgPCAwKQorICAgIHN0cmNweSAoYnVmZmVyLCAiPz8/PyIgIi0/PyIgIi0/PyIpOworICBlbHNlCisgICAgeworICAgICAgdHAgPSBnbXRpbWUgKCZhdGltZSk7CisgICAgICBzcHJpbnRmIChidWZmZXIsIiUwNGQtJTAyZC0lMDJkIiwKKyAgICAgICAgICAgICAgIDE5MDArdHAtPnRtX3llYXIsIHRwLT50bV9tb24rMSwgdHAtPnRtX21kYXkgKTsKKyAgICB9CisgIHJldHVybiBidWZmZXI7Cit9CisKKworLyogQWRkIE5BTUUgdG8gdGhlIGxpc3Qgb2YgcHJlZGVmaW5lZCBtYWNyb3Mgd2hpY2ggYXJlIGdsb2JhbCBmb3IgYWxsCisgICBmaWxlcy4gICovCitzdGF0aWMgdm9pZAorYWRkX3ByZWRlZmluZWRfbWFjcm8gKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIG1hY3JvX3QgbTsKKworICBmb3IgKG09cHJlZGVmaW5lZG1hY3JvbGlzdDsgbTsgbSA9IG0tPm5leHQpCisgICAgaWYgKCFzdHJjbXAgKG0tPm5hbWUsIG5hbWUpKQorICAgICAgYnJlYWs7CisgIGlmICghbSkKKyAgICB7CisgICAgICBtID0geGNhbGxvYyAoMSwgc2l6ZW9mICptICsgc3RybGVuIChuYW1lKSk7CisgICAgICBzdHJjcHkgKG0tPm5hbWUsIG5hbWUpOworICAgICAgbS0+bmV4dCA9IHByZWRlZmluZWRtYWNyb2xpc3Q7CisgICAgICBwcmVkZWZpbmVkbWFjcm9saXN0ID0gbTsKKyAgICB9Cit9CisKKworLyogQ3JlYXRlIG9yIHVwZGF0ZSBhIG1hY3JvIHdpdGggbmFtZSBNQUNST05BTUUgYW5kIHNldCBpdHMgdmFsdWVzIFRPCisgICBNQUNST1ZBTFVFLiAgTm90ZSB0aGF0IG93bmVyc2hpcCBvZiB0aGUgbWFjcm8gdmFsdWUgaXMgdHJhbnNmZXJyZWQKKyAgIHRvIHRoaXMgZnVuY3Rpb24uICAqLworc3RhdGljIHZvaWQKK3NldF9tYWNybyAoY29uc3QgY2hhciAqbWFjcm9uYW1lLCBjaGFyICptYWNyb3ZhbHVlKQoreworICBtYWNyb190IG07CisKKyAgZm9yIChtPW1hY3JvbGlzdDsgbTsgbSA9IG0tPm5leHQpCisgICAgaWYgKCFzdHJjbXAgKG0tPm5hbWUsIG1hY3JvbmFtZSkpCisgICAgICBicmVhazsKKyAgaWYgKG0pCisgICAgZnJlZSAobS0+dmFsdWUpOworICBlbHNlCisgICAgeworICAgICAgbSA9IHhjYWxsb2MgKDEsIHNpemVvZiAqbSArIHN0cmxlbiAobWFjcm9uYW1lKSk7CisgICAgICBzdHJjcHkgKG0tPm5hbWUsIG1hY3JvbmFtZSk7CisgICAgICBtLT5uZXh0ID0gbWFjcm9saXN0OworICAgICAgbWFjcm9saXN0ID0gbTsKKyAgICB9CisgIG0tPnZhbHVlID0gbWFjcm92YWx1ZTsKKyAgbWFjcm92YWx1ZSA9IE5VTEw7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIG1hY3JvIE5BTUUgaXMgc2V0LCBpLmUuIG5vdCB0aGUgZW1wdHkgc3RyaW5nIGFuZAorICAgbm90IGV2YWx1YXRpbmcgdG8gMC4gICovCitzdGF0aWMgaW50CittYWNyb19zZXRfcCAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgbWFjcm9fdCBtOworCisgIGZvciAobSA9IG1hY3JvbGlzdDsgbSA7IG0gPSBtLT5uZXh0KQorICAgIGlmICghc3RyY21wIChtLT5uYW1lLCBuYW1lKSkKKyAgICAgIGJyZWFrOworICBpZiAoIW0gfHwgIW0tPnZhbHVlIHx8ICEqbS0+dmFsdWUpCisgICAgcmV0dXJuIDA7CisgIGlmICgoKm0tPnZhbHVlICYgMHg4MCkgfHwgIWlzZGlnaXQgKCptLT52YWx1ZSkpCisgICAgcmV0dXJuIDE7IC8qIE5vdCBhIGRpZ2l0IGJ1dCBzb21lIG90aGVyIHN0cmluZy4gICovCisgIHJldHVybiAhIWF0b2kgKG0tPnZhbHVlKTsKK30KKworCisvKiBFdmFsdWF0ZSB0aGUgY3VycmVudCBjb25kaXRpb25zLiAgKi8KK3N0YXRpYyB2b2lkCitldmFsdWF0ZV9jb25kaXRpb25zIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGxucikKK3sKKyAgaW50IGk7CisKKyAgLyogZm9yIChpPTA7IGkgPCBjb25kaXRpb25fc3RhY2tfaWR4OyBpKyspICovCisgIC8qICAgaW5mICgiJXM6JWQ6ICAgc3RhY2tbJWRdICVzICVzICVjIiwgKi8KKyAgLyogICAgICAgIGZuYW1lLCBsbnIsIGksIGNvbmRpdGlvbl9zdGFja1tpXS0+aXNzZXQ/ICJzZXQiOiJjbHIiLCAqLworICAvKiAgICAgICAgY29uZGl0aW9uX3N0YWNrW2ldLT5uYW1lLCAqLworICAvKiAgICAgICAgKG1hY3JvX3NldF9wIChjb25kaXRpb25fc3RhY2tbaV0tPm5hbWUpICovCisgIC8qICAgICAgICAgXiAhY29uZGl0aW9uX3N0YWNrW2ldLT5pc3NldCk/ICd0JzonZicpOyAqLworCisgIGNvbmRfaXNfYWN0aXZlID0gMTsKKyAgY29uZF9pbl92ZXJiYXRpbSA9IDA7CisgIGlmIChjb25kaXRpb25fc3RhY2tfaWR4KQorICAgIHsKKyAgICAgIGZvciAoaT0wOyBpIDwgY29uZGl0aW9uX3N0YWNrX2lkeDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGNvbmRpdGlvbl9zdGFja1tpXS0+bWFudmVyYikKKyAgICAgICAgICAgIGNvbmRfaW5fdmVyYmF0aW0gPSAobWFjcm9fc2V0X3AgKGNvbmRpdGlvbl9zdGFja1tpXS0+bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAhY29uZGl0aW9uX3N0YWNrW2ldLT5pc3NldCk7CisgICAgICAgICAgZWxzZSBpZiAoIShtYWNyb19zZXRfcCAoY29uZGl0aW9uX3N0YWNrW2ldLT5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgXiAhY29uZGl0aW9uX3N0YWNrW2ldLT5pc3NldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbmRfaXNfYWN0aXZlID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogaW5mICgiJXM6JWQ6ICAgYWN0aXZlPSVkIHZlcmJhdGltPSVkIiwgKi8KKyAgLyogICAgICBmbmFtZSwgbG5yLCBjb25kX2lzX2FjdGl2ZSwgY29uZF9pbl92ZXJiYXRpbSk7ICovCit9CisKKworLyogUHVzaCBhIGNvbmRpdGlvbiB3aXRoIGNvbmRpdGlvbiBtYWNybyBOQU1FIG9udG8gdGhlIHN0YWNrLiAgSWYKKyAgIElTU0VUIGlzIHRydWUsIGEgQGlzc2V0IGNvbmRpdGlvbiBpcyBwdXNoZWQuICAqLworc3RhdGljIHZvaWQKK3B1c2hfY29uZGl0aW9uIChjb25zdCBjaGFyICpuYW1lLCBpbnQgaXNzZXQsIGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbG5yKQoreworICBjb25kaXRpb25fdCBjb25kOworICBpbnQgbWFudmVyYiA9IDA7CisKKyAgaWYgKGNvbmRpdGlvbl9zdGFja19pZHggPj0gTUFYX0NPTkRJVElPTl9ORVNUSU5HKQorICAgIHsKKyAgICAgIGVyciAoIiVzOiVkOiBjb25kaXRpb24gbmVzdGVkIHRvbyBkZWVwIiwgZm5hbWUsIGxucik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICghc3RyY21wIChuYW1lLCAibWFudmVyYiIpKQorICAgIHsKKyAgICAgIGlmICghaXNzZXQpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgKCIlczolZDogdXNpbmcgXCJAaWZjbGVhciBtYW52ZXJiXCIgaXMgbm90IGFsbG93ZWQiLCBmbmFtZSwgbG5yKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIG1hbnZlcmIgPSAxOworICAgIH0KKworICBjb25kID0geGNhbGxvYyAoMSwgc2l6ZW9mICpjb25kICsgc3RybGVuIChuYW1lKSk7CisgIGNvbmQtPm1hbnZlcmIgPSBtYW52ZXJiOworICBjb25kLT5pc3NldCA9IGlzc2V0OworICBzdHJjcHkgKGNvbmQtPm5hbWUsIG5hbWUpOworCisgIGNvbmRpdGlvbl9zdGFja1tjb25kaXRpb25fc3RhY2tfaWR4KytdID0gY29uZDsKKyAgZXZhbHVhdGVfY29uZGl0aW9ucyAoZm5hbWUsIGxucik7Cit9CisKKworLyogUmVtb3ZlIHRoZSBsYXN0IGNvbmRpdGlvbiBmcm9tIHRoZSBzdGFjay4gIElTU0VUIGlzIHVzZWQgZm9yIGVycm9yCisgICByZXBvcnRpbmcuICAqLworc3RhdGljIHZvaWQKK3BvcF9jb25kaXRpb24gKGludCBpc3NldCwgY29uc3QgY2hhciAqZm5hbWUsIGludCBsbnIpCit7CisgIGlmICghY29uZGl0aW9uX3N0YWNrX2lkeCkKKyAgICB7CisgICAgICBlcnIgKCIlczolZDogdW5iYWxhbmNlZCBcIkBlbmQgJXNcIiIsCisgICAgICAgICAgIGZuYW1lLCBsbnIsIGlzc2V0PyJpc3NldCI6ImlzY2xlYXIiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGNvbmRpdGlvbl9zdGFja19pZHgtLTsKKyAgZnJlZSAoY29uZGl0aW9uX3N0YWNrW2NvbmRpdGlvbl9zdGFja19pZHhdKTsKKyAgY29uZGl0aW9uX3N0YWNrW2NvbmRpdGlvbl9zdGFja19pZHhdID0gTlVMTDsKKyAgZXZhbHVhdGVfY29uZGl0aW9ucyAoZm5hbWUsIGxucik7Cit9CisKKworDAorLyogUmV0dXJuIGEgc2VjdGlvbiBidWZmZXIgZm9yIHRoZSBzZWN0aW9uIE5BTUUuICBBbGxvY2F0ZSBhIG5ldyBidWZmZXIKKyAgIGlmIHRoaXMgaXMgYSBuZXcgc2VjdGlvbi4gIEtlZXAgdHJhY2sgb2YgdGhlIHNlY3Rpb25zIGluIFRIRVBBR0UuCisgICBUaGlzIGZ1bmN0aW9uIG1heSByZWFsbG9jYXRlIHRoZSBzZWN0aW9uIGFycmF5IGluIFRIRVBBR0UuICAqLworc3RhdGljIHNlY3Rpb25fYnVmZmVyX3QKK2dldF9zZWN0aW9uX2J1ZmZlciAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaW50IGk7CisgIHNlY3Rpb25fYnVmZmVyX3Qgc2VjdDsKKworICAvKiBJZiB0aGVyZSBpcyBubyBzZWN0aW9uIHdlIHB1dCBldmVyeXRoaW5nIGludG8gdGhlIHJlcXVpcmVkIE5BTUUKKyAgICAgc2VjdGlvbi4gIEdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3Qgb25lIGxpc3RlZCBpdCBpcyBsaWtlbHkKKyAgICAgdGhhdCBlcnJvciBhcmUgZWFzaWx5IHZpc2libGUuICAqLworICBpZiAoIW5hbWUpCisgICAgbmFtZSA9ICJOQU1FIjsKKworICBmb3IgKGk9MDsgaSA8IHRoZXBhZ2Uubl9zZWN0aW9uczsgaSsrKQorICAgIHsKKyAgICAgIHNlY3QgPSB0aGVwYWdlLnNlY3Rpb25zICsgaTsKKyAgICAgIGlmIChzZWN0LT5uYW1lICYmICFzdHJjbXAgKG5hbWUsIHNlY3QtPm5hbWUpKQorICAgICAgICByZXR1cm4gc2VjdDsKKyAgICB9CisgIGZvciAoaT0wOyBpIDwgdGhlcGFnZS5uX3NlY3Rpb25zOyBpKyspCisgICAgaWYgKCF0aGVwYWdlLnNlY3Rpb25zW2ldLm5hbWUpCisgICAgICBicmVhazsKKyAgaWYgKGkgPCB0aGVwYWdlLm5fc2VjdGlvbnMpCisgICAgc2VjdCA9IHRoZXBhZ2Uuc2VjdGlvbnMgKyBpOworICBlbHNlCisgICAgeworICAgICAgLyogV2UgbmVlZCB0byBhbGxvY2F0ZSBvciByZWFsbG9jYXRlIHRoZSBzZWN0aW9uIGFycmF5LiAgKi8KKyAgICAgIHNpemVfdCBvbGRfbiA9IHRoZXBhZ2Uubl9zZWN0aW9uczsKKyAgICAgIHNpemVfdCBuZXdfbiA9IDIwOworCisgICAgICBpZiAoIW9sZF9uKQorICAgICAgICB0aGVwYWdlLnNlY3Rpb25zID0geGNhbGxvYyAobmV3X24sIHNpemVvZiAqdGhlcGFnZS5zZWN0aW9ucyk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB0aGVwYWdlLnNlY3Rpb25zID0geHJlYWxsb2MgKHRoZXBhZ2Uuc2VjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9sZF9uICsgbmV3X24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKnRoZXBhZ2Uuc2VjdGlvbnMpKTsKKyAgICAgICAgICBtZW1zZXQgKHRoZXBhZ2Uuc2VjdGlvbnMgKyBvbGRfbiwgMCwKKyAgICAgICAgICAgICAgICAgIG5ld19uICogc2l6ZW9mICp0aGVwYWdlLnNlY3Rpb25zKTsKKyAgICAgICAgfQorICAgICAgdGhlcGFnZS5uX3NlY3Rpb25zICs9IG5ld19uOworCisgICAgICAvKiBTZXR1cCB0aGUgdGFpbCBwb2ludGVycy4gICovCisgICAgICBmb3IgKGk9b2xkX247IGkgPCB0aGVwYWdlLm5fc2VjdGlvbnM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHNlY3QgPSB0aGVwYWdlLnNlY3Rpb25zICsgaTsKKyAgICAgICAgICBzZWN0LT5saW5lc190YWlsID0gJnNlY3QtPmxpbmVzOworICAgICAgICB9CisgICAgICBzZWN0ID0gdGhlcGFnZS5zZWN0aW9ucyArIG9sZF9uOworICAgIH0KKworICAvKiBTdG9yZSB0aGUgbmFtZS4gICovCisgIGFzc2VydCAoIXNlY3QtPm5hbWUpOworICBzZWN0LT5uYW1lID0geHN0cmR1cCAobmFtZSk7CisgIHJldHVybiBzZWN0OworfQorCisKKworLyogQWRkIHRoZSBjb250ZW50IG9mIExJTkUgdG8gdGhlIHNlY3Rpb24gbmFtZWQgU0VDVE5BTUUuICAqLworc3RhdGljIHZvaWQKK2FkZF9jb250ZW50IChjb25zdCBjaGFyICpzZWN0bmFtZSwgY2hhciAqbGluZSwgaW50IHZlcmJhdGltKQoreworICBzZWN0aW9uX2J1ZmZlcl90IHNlY3Q7CisgIGxpbmVfYnVmZmVyX3QgbGI7CisKKyAgc2VjdCA9IGdldF9zZWN0aW9uX2J1ZmZlciAoc2VjdG5hbWUpOworICBpZiAoc2VjdC0+bGFzdF9saW5lICYmICFzZWN0LT5sYXN0X2xpbmUtPnZlcmJhdGltID09ICF2ZXJiYXRpbSkKKyAgICB7CisgICAgICAvKiBMZXRzIGFwcGVuZCB0aGF0IGxpbmUgdG8gdGhlIGxhc3Qgb25lLiAgV2UgZG8gdGhpcyB0byBrZWVwCisgICAgICAgICBhbGwgbGluZXMgb2YgdGhlIHNhbWUga2luZCAoaS5lLnZlcmJhdGltIG9yIG5vdCkgdG9nZXRoZXIgaW4KKyAgICAgICAgIG9uZSBsYXJnZSBidWZmZXIuICAqLworICAgICAgc2l6ZV90IG4xLCBuOworCisgICAgICBsYiA9IHNlY3QtPmxhc3RfbGluZTsKKyAgICAgIG4xID0gc3RybGVuIChsYi0+bGluZSk7CisgICAgICBuID0gbjEgKyAxICsgc3RybGVuIChsaW5lKSArIDE7CisgICAgICBsYi0+bGluZSA9IHhyZWFsbG9jIChsYi0+bGluZSwgbik7CisgICAgICBzdHJjcHkgKGxiLT5saW5lK24xLCAiXG4iKTsKKyAgICAgIHN0cmNweSAobGItPmxpbmUrbjErMSwgbGluZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbGIgPSB4Y2FsbG9jICgxLCBzaXplb2YgKmxiKTsKKyAgICAgIGxiLT52ZXJiYXRpbSA9IHZlcmJhdGltOworICAgICAgbGItPmxpbmUgPSB4c3RyZHVwIChsaW5lKTsKKyAgICAgIHNlY3QtPmxhc3RfbGluZSA9IGxiOworICAgICAgKnNlY3QtPmxpbmVzX3RhaWwgPSBsYjsKKyAgICAgIHNlY3QtPmxpbmVzX3RhaWwgPSAmbGItPm5leHQ7CisgICAgfQorfQorCisKKy8qIFByZXBhcmUgZm9yIGEgbmV3IG1hbiBwYWdlIHVzaW5nIHRoZSBmaWxlbmFtZSBOQU1FLiAqLworc3RhdGljIHZvaWQKK3N0YXJ0X3BhZ2UgKGNoYXIgKm5hbWUpCit7CisgIGlmICh2ZXJib3NlKQorICAgIGluZiAoInN0YXJ0aW5nIHBhZ2UgJyVzJyIsIG5hbWUpOworICBhc3NlcnQgKCF0aGVwYWdlLm5hbWUpOworICB0aGVwYWdlLm5hbWUgPSB4c3RyZHVwIChuYW1lKTsKKyAgdGhlcGFnZS5uX3NlY3Rpb25zID0gMDsKK30KKworCisvKiBXcml0ZSB0aGUgLlRIIGVudHJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UuICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYQorICAgcHJvYmxlbSB3aXRoIHRoZSBwYWdlLiAqLworc3RhdGljIGludAord3JpdGVfdGggKEZJTEUgKmZwKQoreworICBjaGFyICpuYW1lLCAqcDsKKworICBmcHV0cyAoIi5cXFwiIENyZWF0ZWQgZnJvbSBUZXhpbmZvIHNvdXJjZSBieSB5YXQybSAiIFZFUlNJT04gIlxuIiwgZnApOworCisgIG5hbWUgPSBhc2NpaV9zdHJ1cHIgKHhzdHJkdXAgKHRoZXBhZ2UubmFtZSkpOworICBwID0gc3RycmNociAobmFtZSwgJy4nKTsKKyAgaWYgKCFwIHx8ICFwWzFdKQorICAgIHsKKyAgICAgIGVyciAoIm5vIHNlY3Rpb24gbmFtZSBpbiBtYW4gcGFnZSAnJXMnIiwgdGhlcGFnZS5uYW1lKTsKKyAgICAgIGZyZWUgKG5hbWUpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgKnArKyA9IDA7CisgIGZwcmludGYgKGZwLCAiLlRIICVzICVzICVzIFwiJXNcIiBcIiVzXCJcbiIsCisgICAgICAgICAgIG5hbWUsIHAsIGlzb2RhdGVzdHJpbmcgKCksIG9wdF9yZWxlYXNlLCBvcHRfc291cmNlKTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogUHJvY2VzcyB0aGUgdGV4aW5mbyBjb21tYW5kIENPTU1BTkQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgQCkgYW5kCisgICB3cml0ZSBvdXRwdXQgaWYgbmVlZGVkIHRvIEZQLiBSRVNUIGlzIHRoZSByZW1haW5lciBvZiB0aGUgbGluZQorICAgd2hpY2ggc2hvdWxkIGVpdGhlciBwb2ludCB0byBhbiBvcGVuaW5nIGJyYWNlIG9yIHRvIGEgd2hpdGUgc3BhY2UuCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxyZWFkeSBwcm9jZXNzZWQKKyAgIGZyb20gUkVTVC4gIExFTiBpcyB0aGUgdXNhYmxlIGxlbmd0aCBvZiBSRVNULiAgVEFCTEVfTEVWRUwgaXMgdXNlZCB0bworICAgY29udHJvbCB0aGUgaW5kZW50YXRpb24gb2YgdGFibGVzLiAgKi8KK3N0YXRpYyBzaXplX3QKK3Byb2NfdGV4aV9jbWQgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICpyZXN0LCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgaW50ICp0YWJsZV9sZXZlbCwgaW50ICplb2xfYWN0aW9uKQoreworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAvKiBOYW1lIG9mIHRoZSBjb21tYW5kLiAgKi8KKyAgICBpbnQgd2hhdDsgICAgICAgICAgICAvKiBXaGF0IHRvIGRvIHdpdGggdGhpcyBjb21tYW5kLiAqLworICAgIGNvbnN0IGNoYXIgKmxlYWRfaW47IC8qIFN0cmluZyB0byBwcmludCB3aXRoIGEgb3BlbmluZyBicmFjZS4gICovCisgICAgY29uc3QgY2hhciAqbGVhZF9vdXQ7LyogU3RyaW5nIHRvIHByaW50IHdpdGggdGhlIGNsb3NpbmcgYnJhY2UuICovCisgIH0gY21kdGJsW10gPSB7CisgICAgeyAiY29tbWFuZCIsIDAsICJcXGZCIiwgIlxcZlIiIH0sCisgICAgeyAiY29kZSIsICAgIDAsICJcXGZCIiwgIlxcZlIiIH0sCisgICAgeyAic2MiLCAgICAgIDAsICJcXGZCIiwgIlxcZlIiIH0sCisgICAgeyAidmFyIiwgICAgIDAsICJcXGZJIiwgIlxcZlIiIH0sCisgICAgeyAic2FtcCIsICAgIDAsICJcXChhcSIsICJcXChhcSIgIH0sCisgICAgeyAiZmlsZSIsICAgIDAsICJcXChvcVxcZkkiLCJcXGZSXFwoY3EiIH0sCisgICAgeyAiZW52IiwgICAgIDAsICJcXChvcVxcZkkiLCJcXGZSXFwoY3EiIH0sCisgICAgeyAiYWNyb255bSIsIDAgfSwKKyAgICB7ICJkZm4iLCAgICAgMCB9LAorICAgIHsgIm9wdGlvbiIsICAwLCAiXFxmQiIsICJcXGZSIiAgIH0sCisgICAgeyAiZXhhbXBsZSIsIDEsICIuUlMgMlxuLm5mXG4iIH0sCisgICAgeyAic21hbGxleGFtcGxlIiwgMSwgIi5SUyAyXG4ubmZcbiIgfSwKKyAgICB7ICJhc2lzIiwgICAgNyB9LAorICAgIHsgImFuY2hvciIsICA3IH0sCisgICAgeyAiY2FydG91Y2hlIiwgMSB9LAorICAgIHsgInhyZWYiLCAgICAwLCAic2VlOiBbIiwgIl0iIH0sCisgICAgeyAicHhyZWYiLCAgIDAsICJzZWU6IFsiLCAiXSIgfSwKKyAgICB7ICJ1cmVmIiwgICAgMCwgIihcXGZCIiwgIlxcZlIpIiB9LAorICAgIHsgImZvb3Rub3RlIiwwLCAiIChbIiwgIl0pIiB9LAorICAgIHsgImVtcGgiLCAgICAwLCAiXFxmSSIsICJcXGZSIiB9LAorICAgIHsgInciLCAgICAgICAxIH0sCisgICAgeyAiYyIsICAgICAgIDUgfSwKKyAgICB7ICJvcGluZGV4IiwgMSB9LAorICAgIHsgImNwaW5kZXgiLCAxIH0sCisgICAgeyAiY2luZGV4IiwgIDEgfSwKKyAgICB7ICJub2luZGVudCIsIDAgfSwKKyAgICB7ICJzZWN0aW9uIiwgMSB9LAorICAgIHsgImNoYXB0ZXIiLCAxIH0sCisgICAgeyAic3Vic2VjdGlvbiIsIDYsICJcbi5TUyAiIH0sCisgICAgeyAiY2hhcGhlYWRpbmciLCAwfSwKKyAgICB7ICJpdGVtIiwgICAgMiwgIi5UUFxuLkIgIiB9LAorICAgIHsgIml0ZW14IiwgICAyLCAiLlRQXG4uQiAiIH0sCisgICAgeyAidGFibGUiLCAgIDMgfSwKKyAgICB7ICJpdGVtaXplIiwgICAzIH0sCisgICAgeyAiYnVsbGV0IiwgIDAsICIqICIgfSwKKyAgICB7ICJlbmQiLCAgICAgNCB9LAorICAgIHsgInF1b3RhdGlvbiIsMSwgIi5SU1xuXFxmQiIgfSwKKyAgICB7IE5VTEwgfQorICB9OworICBzaXplX3QgbjsKKyAgaW50IGk7CisgIGNvbnN0IGNoYXIgKnM7CisgIGNvbnN0IGNoYXIgKmxlYWRfb3V0ID0gTlVMTDsKKyAgaW50IGlnbm9yZV9hcmdzID0gMDsKKworICBmb3IgKGk9MDsgY21kdGJsW2ldLm5hbWUgJiYgc3RyY21wIChjbWR0YmxbaV0ubmFtZSwgY29tbWFuZCk7IGkrKykKKyAgICA7CisgIGlmIChjbWR0YmxbaV0ubmFtZSkKKyAgICB7CisgICAgICBzID0gY21kdGJsW2ldLmxlYWRfaW47CisgICAgICBpZiAocykKKyAgICAgICAgZnB1dHMgKHMsIGZwKTsKKyAgICAgIGxlYWRfb3V0ID0gY21kdGJsW2ldLmxlYWRfb3V0OworICAgICAgc3dpdGNoIChjbWR0YmxbaV0ud2hhdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6IC8qIFRocm93IGF3YXkgdGhlIGVudGlyZSBsaW5lLiAgKi8KKyAgICAgICAgICBzID0gbWVtY2hyIChyZXN0LCAnXG4nLCBsZW4pOworICAgICAgICAgIHJldHVybiBzPyAocy1yZXN0KSsxIDogbGVuOworICAgICAgICBjYXNlIDI6IC8qIEhhbmRsZSBAaXRlbS4gICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzogLyogSGFuZGxlIHRhYmxlLiAgKi8KKyAgICAgICAgICBpZiAoKysoKnRhYmxlX2xldmVsKSA+IDEpCisgICAgICAgICAgICBmcHV0cyAoIi5SU1xuIiwgZnApOworICAgICAgICAgIC8qIE5vdyB0aHJvdyBhd2F5IHRoZSBlbnRpcmUgbGluZS4gKi8KKyAgICAgICAgICBzID0gbWVtY2hyIChyZXN0LCAnXG4nLCBsZW4pOworICAgICAgICAgIHJldHVybiBzPyAocy1yZXN0KSsxIDogbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6IC8qIEhhbmRsZSBlbmQuICAqLworICAgICAgICAgIGZvciAocz1yZXN0LCBuPWxlbjsgbiAmJiAoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpOyBzKyssIG4tLSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgICBpZiAobiA+PSA1ICYmICFtZW1jbXAgKHMsICJ0YWJsZSIsIDUpCisgICAgICAgICAgICAgICYmICghbiB8fCBzWzVdID09ICcgJyB8fCBzWzVdID09ICdcdCcgfHwgc1s1XSA9PSAnXG4nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCgqdGFibGVfbGV2ZWwpLS0gPiAxKQorICAgICAgICAgICAgICAgIGZwdXRzICgiLlJFXG4iLCBmcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAobiA+PSA3ICYmICFtZW1jbXAgKHMsICJleGFtcGxlIiwgNykKKyAgICAgICAgICAgICAgJiYgKCFuIHx8IHNbN10gPT0gJyAnIHx8IHNbN10gPT0gJ1x0JyB8fCBzWzddID09ICdcbicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHV0cyAoIi5maVxuLlJFXG4iLCBmcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAobiA+PSAxMiAmJiAhbWVtY21wIChzLCAic21hbGxleGFtcGxlIiwgMTIpCisgICAgICAgICAgICAgICYmICghbiB8fCBzWzEyXSA9PSAnICcgfHwgc1sxMl0gPT0gJ1x0JyB8fCBzWzEyXSA9PSAnXG4nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnB1dHMgKCIuZmlcbi5SRVxuIiwgZnApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPj0gOSAmJiAhbWVtY21wIChzLCAicXVvdGF0aW9uIiwgOSkKKyAgICAgICAgICAgICAgJiYgKCFuIHx8IHNbOV0gPT0gJyAnIHx8IHNbOV0gPT0gJ1x0JyB8fCBzWzldID09ICdcbicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHV0cyAoIlxcZlJcbi5SRVxuIiwgZnApOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIE5vdyB0aHJvdyBhd2F5IHRoZSBlbnRpcmUgbGluZS4gKi8KKyAgICAgICAgICBzID0gbWVtY2hyIChyZXN0LCAnXG4nLCBsZW4pOworICAgICAgICAgIHJldHVybiBzPyAocy1yZXN0KSsxIDogbGVuOworICAgICAgICBjYXNlIDU6IC8qIEhhbmRsZSBzcGVjaWFsIGNvbW1lbnRzLiAqLworICAgICAgICAgIGZvciAocz1yZXN0LCBuPWxlbjsgbiAmJiAoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpOyBzKyssIG4tLSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgICBpZiAobiA+PSA0ICYmICFtZW1jbXAgKHMsICJtYW46IiwgNCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAocys9NCwgbi09NDsgbiAmJiAqcyAhPSAnXG4nOyBuLS0sIHMrKykKKyAgICAgICAgICAgICAgICBwdXRjICgqcywgZnApOworICAgICAgICAgICAgICBwdXRjICgnXG4nLCBmcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogTm93IHRocm93IGF3YXkgdGhlIGVudGlyZSBsaW5lLiAqLworICAgICAgICAgIHMgPSBtZW1jaHIgKHJlc3QsICdcbicsIGxlbik7CisgICAgICAgICAgcmV0dXJuIHM/IChzLXJlc3QpKzEgOiBsZW47CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAqZW9sX2FjdGlvbiA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICBpZ25vcmVfYXJncyA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtYWNyb190IG07CisKKyAgICAgIGZvciAobSA9IG1hY3JvbGlzdDsgbSA7IG0gPSBtLT5uZXh0KQorICAgICAgICBpZiAoIXN0cmNtcCAobS0+bmFtZSwgY29tbWFuZCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgIGlmIChtKQorICAgICAgICB7CisgICAgICAgICAgcHJvY190ZXhpX2J1ZmZlciAoZnAsIG0tPnZhbHVlLCBzdHJsZW4gKG0tPnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9sZXZlbCwgZW9sX2FjdGlvbik7CisgICAgICAgICAgaWdub3JlX2FyZ3MgPSAxOyAvKiBQYXJhbWV0ZXJpemVkIG1hY3JvcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuICovCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaW5mICgidGV4aW5mbyBjb21tYW5kICclcycgbm90IHN1cHBvcnRlZCAoJS4qcykiLCBjb21tYW5kLAorICAgICAgICAgICAgICgocyA9IG1lbWNociAocmVzdCwgJ1xuJywgbGVuKSksIChzPyAocy1yZXN0KSA6IGxlbikpLCByZXN0KTsKKyAgICB9CisKKyAgaWYgKCpyZXN0ID09ICd7JykKKyAgICB7CisgICAgICAvKiBGaW5kIG1hdGNoaW5nIGNsb3NpbmcgYnJhY2UuICAqLworICAgICAgZm9yIChzPXJlc3QrMSwgbj0xLCBpPTE7IGkgJiYgKnMgJiYgbiA8IGxlbjsgcysrLCBuKyspCisgICAgICAgIGlmICgqcyA9PSAneycpCisgICAgICAgICAgaSsrOworICAgICAgICBlbHNlIGlmICgqcyA9PSAnfScpCisgICAgICAgICAgaS0tOworICAgICAgaWYgKGkpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgKCJjbG9zaW5nIGJyYWNlIGZvciBjb21tYW5kICclcycgbm90IGZvdW5kIiwgY29tbWFuZCk7CisgICAgICAgICAgcmV0dXJuIGxlbjsKKyAgICAgICAgfQorICAgICAgaWYgKG4gPiAyICYmICFpZ25vcmVfYXJncykKKyAgICAgICAgcHJvY190ZXhpX2J1ZmZlciAoZnAsIHJlc3QrMSwgbi0yLCB0YWJsZV9sZXZlbCwgZW9sX2FjdGlvbik7CisgICAgfQorICBlbHNlCisgICAgbiA9IDA7CisKKyAgaWYgKGxlYWRfb3V0KQorICAgIGZwdXRzIChsZWFkX291dCwgZnApOworCisgIHJldHVybiBuOworfQorCisKKworLyogUHJvY2VzcyB0aGUgc3RyaW5nIExJTkUgd2l0aCBMRU4gYnl0ZXMgb2YgVGV4aW5mbyBjb250ZW50LiAqLworc3RhdGljIHZvaWQKK3Byb2NfdGV4aV9idWZmZXIgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgaW50ICp0YWJsZV9sZXZlbCwgaW50ICplb2xfYWN0aW9uKQoreworICBjb25zdCBjaGFyICpzOworICBjaGFyIGNtZGJ1ZlsyNTZdOworICBpbnQgY21kaWR4ID0gMDsKKyAgaW50IGluX2NtZCA9IDA7CisgIHNpemVfdCBuOworCisgIGZvciAocz1saW5lOyAqcyAmJiBsZW47IHMrKywgbGVuLS0pCisgICAgeworICAgICAgaWYgKGluX2NtZCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChpbl9jbWQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3dpdGNoICgqcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAnQCc6IGNhc2UgJ3snOiBjYXNlICd9JzoKKyAgICAgICAgICAgICAgICAgIHB1dGMgKCpzLCBmcCk7IGluX2NtZCA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICc6JzogLyogTm90IGVuZGluZyBhIHNlbnRlbmNlIGZsYWcuICAqLworICAgICAgICAgICAgICAgICAgaW5fY21kID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJy4nOiBjYXNlICchJzogY2FzZSAnPyc6IC8qIEVuZGluZyBhIHNlbnRlbmNlLiAqLworICAgICAgICAgICAgICAgICAgcHV0YyAoKnMsIGZwKTsgaW5fY21kID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJyAnOiBjYXNlICdcdCc6IGNhc2UgJ1xuJzogLyogTm9uIGNvbGxhcHNpbmcgc3BhY2VzLiAgKi8KKyAgICAgICAgICAgICAgICAgIHB1dGMgKCpzLCBmcCk7IGluX2NtZCA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgY21kaWR4ID0gMDsKKyAgICAgICAgICAgICAgICAgIGNtZGJ1ZltjbWRpZHgrK10gPSAqczsKKyAgICAgICAgICAgICAgICAgIGluX2NtZCsrOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCpzID09ICd7JyB8fCAqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JyB8fCAqcyA9PSAnXG4nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjbWRidWZbY21kaWR4XSA9IDA7CisgICAgICAgICAgICAgIG4gPSBwcm9jX3RleGlfY21kIChmcCwgY21kYnVmLCBzLCBsZW4sIHRhYmxlX2xldmVsLCBlb2xfYWN0aW9uKTsKKyAgICAgICAgICAgICAgYXNzZXJ0IChuIDw9IGxlbik7CisgICAgICAgICAgICAgIHMgKz0gbjsgbGVuIC09IG47CisgICAgICAgICAgICAgIHMtLTsgbGVuKys7CisgICAgICAgICAgICAgIGluX2NtZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoY21kaWR4IDwgc2l6ZW9mIGNtZGJ1ZiAtMSkKKyAgICAgICAgICAgIGNtZGJ1ZltjbWRpZHgrK10gPSAqczsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciAoInRleGluZm8gY29tbWFuZCB0b28gbG9uZyAtIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgaW5fY21kID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoKnMgPT0gJ0AnKQorICAgICAgICBpbl9jbWQgPSAxOworICAgICAgZWxzZSBpZiAoKnMgPT0gJ1xuJykKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoKmVvbF9hY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDE6IC8qIENyZWF0ZSBhIGR1bW15IHBhcmFncmFwaC4gKi8KKyAgICAgICAgICAgICAgZnB1dHMgKCJcblxcIFxuIiwgZnApOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHB1dGMgKCpzLCBmcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgKmVvbF9hY3Rpb24gPSAwOworICAgICAgICB9CisgICAgICBlbHNlIGlmICgqcyA9PSAnXFwnKQorICAgICAgICBmcHV0cyAoIlxcXFwiLCBmcCk7CisgICAgICBlbHNlCisgICAgICAgIHB1dGMgKCpzLCBmcCk7CisgICAgfQorCisgIGlmIChpbl9jbWQgPiAxKQorICAgIHsKKyAgICAgIGNtZGJ1ZltjbWRpZHhdID0gMDsKKyAgICAgIG4gPSBwcm9jX3RleGlfY21kIChmcCwgY21kYnVmLCBzLCBsZW4sIHRhYmxlX2xldmVsLCBlb2xfYWN0aW9uKTsKKyAgICAgIGFzc2VydCAobiA8PSBsZW4pOworICAgICAgcyArPSBuOyBsZW4gLT0gbjsKKyAgICAgIHMtLTsgbGVuKys7CisgICAgICBpbl9jbWQgPSAwOworICAgIH0KK30KKworCisvKiBEbyBzb21ldGhpbmcgd2l0aCB0aGUgVGV4aW5mbyBsaW5lIExJTkUuICAqLworc3RhdGljIHZvaWQKK3BhcnNlX3RleGlfbGluZSAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmxpbmUsIGludCAqdGFibGVfbGV2ZWwpCit7CisgIGludCBlb2xfYWN0aW9uID0gMDsKKworICAvKiBBIHF1aWNrIHRlc3Qgd2hldGhlciB0aGVyZSBhcmUgYW55IHRleGluZm8gY29tbWFuZHMuICAqLworICBpZiAoIXN0cmNociAobGluZSwgJ0AnKSkKKyAgICB7CisgICAgICBmcHV0cyAobGluZSwgZnApOworICAgICAgcHV0YyAoJ1xuJywgZnApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcHJvY190ZXhpX2J1ZmZlciAoZnAsIGxpbmUsIHN0cmxlbiAobGluZSksIHRhYmxlX2xldmVsLCAmZW9sX2FjdGlvbik7CisgIHB1dGMgKCdcbicsIGZwKTsKK30KKworCisvKiBXcml0ZSBhbGwgdGhlIGxpbmVzIExJTkVTIHRvIEZQLiAgKi8KK3N0YXRpYyB2b2lkCit3cml0ZV9jb250ZW50IChGSUxFICpmcCwgbGluZV9idWZmZXJfdCBsaW5lcykKK3sKKyAgbGluZV9idWZmZXJfdCBsaW5lOworICBpbnQgdGFibGVfbGV2ZWwgPSAwOworCisgIGZvciAobGluZSA9IGxpbmVzOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dCkKKyAgICB7CisgICAgICBpZiAobGluZS0+dmVyYmF0aW0pCisgICAgICAgIHsKKyAgICAgICAgICBmcHV0cyAobGluZS0+bGluZSwgZnApOworICAgICAgICAgIHB1dGMgKCdcbicsIGZwKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisvKiAgICAgICAgICAgZnB1dHMgKCJURVhJLS0tIiwgZnApOyAqLworLyogICAgICAgICAgIGZwdXRzIChsaW5lLT5saW5lLCBmcCk7ICovCisvKiAgICAgICAgICAgZnB1dHMgKCItLS1cbiIsIGZwKTsgKi8KKyAgICAgICAgICBwYXJzZV90ZXhpX2xpbmUgKGZwLCBsaW5lLT5saW5lLCAmdGFibGVfbGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCisKKworc3RhdGljIGludAoraXNfc3RhbmRhcmRfc2VjdGlvbiAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaW50IGk7CisgIGNvbnN0IGNoYXIgKnM7CisKKyAgZm9yIChpPTA7IChzPXN0YW5kYXJkX3NlY3Rpb25zW2ldKTsgaSsrKQorICAgIGlmICghc3RyY21wIChzLCBuYW1lKSkKKyAgICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworCisvKiBGaW5pc2ggYSBwYWdlOyB0aGF0IGlzIHNvcnQgdGhlIGRhdGEgYW5kIHdyaXRlIGl0IG91dCB0byB0aGUgZmlsZS4gICovCitzdGF0aWMgdm9pZAorZmluaXNoX3BhZ2UgKHZvaWQpCit7CisgIEZJTEUgKmZwOworICBzZWN0aW9uX2J1ZmZlcl90IHNlY3QgPSBOVUxMOworICBpbnQgaWR4OworICBjb25zdCBjaGFyICpzOworICBpbnQgaTsKKworICBpZiAoIXRoZXBhZ2UubmFtZSkKKyAgICByZXR1cm47IC8qIE5vIHBhZ2UgYWN0aXZlLiAgKi8KKworICBpZiAodmVyYm9zZSkKKyAgICBpbmYgKCJmaW5pc2hpbmcgcGFnZSAnJXMnIiwgdGhlcGFnZS5uYW1lKTsKKworICBpZiAob3B0X3NlbGVjdCkKKyAgICB7CisgICAgICBpZiAoIXN0cmNtcCAob3B0X3NlbGVjdCwgdGhlcGFnZS5uYW1lKSkKKyAgICAgICAgeworICAgICAgICAgIGluZiAoInNlbGVjdGVkICclcyciLCB0aGVwYWdlLm5hbWUgKTsKKyAgICAgICAgICBmcCA9IHN0ZG91dDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZnAgPSBmb3BlbiAoICIvZGV2L251bGwiLCAidyIgKTsKKyAgICAgICAgICBpZiAoIWZwKQorICAgICAgICAgICAgZGllICgiZmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKG9wdF9zdG9yZSkKKyAgICB7CisgICAgICBpbmYgKCJ3cml0aW5nICclcyciLCB0aGVwYWdlLm5hbWUgKTsKKyAgICAgIGZwID0gZm9wZW4gKCB0aGVwYWdlLm5hbWUsICJ3IiApOworICAgICAgaWYgKCFmcCkKKyAgICAgICAgZGllICgiZmFpbGVkIHRvIGNyZWF0ZSAnJXMnOiAlc1xuIiwgdGhlcGFnZS5uYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICB9CisgIGVsc2UKKyAgICBmcCA9IHN0ZG91dDsKKworICBpZiAod3JpdGVfdGggKGZwKSkKKyAgICBnb3RvIGxlYXZlOworCisgIGZvciAoaWR4PTA7IChzPXN0YW5kYXJkX3NlY3Rpb25zW2lkeF0pOyBpZHgrKykKKyAgICB7CisgICAgICBmb3IgKGk9MDsgaSA8IHRoZXBhZ2Uubl9zZWN0aW9uczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgc2VjdCA9IHRoZXBhZ2Uuc2VjdGlvbnMgKyBpOworICAgICAgICAgIGlmIChzZWN0LT5uYW1lICYmICFzdHJjbXAgKHMsIHNlY3QtPm5hbWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmIChpID09IHRoZXBhZ2Uubl9zZWN0aW9ucykKKyAgICAgICAgc2VjdCA9IE5VTEw7CisKKyAgICAgIGlmIChzZWN0KQorICAgICAgICB7CisgICAgICAgICAgZnByaW50ZiAoZnAsICIuU0ggJXNcbiIsIHNlY3QtPm5hbWUpOworICAgICAgICAgIHdyaXRlX2NvbnRlbnQgKGZwLCBzZWN0LT5saW5lcyk7CisgICAgICAgICAgLyogTm93IGNvbnRpbnVlIHdpdGggYWxsIG5vbiBzdGFuZGFyZCBzZWN0aW9ucyBkaXJlY3RseQorICAgICAgICAgICAgIGZvbGxvd2luZyB0aGlzIG9uZS4gKi8KKyAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRoZXBhZ2Uubl9zZWN0aW9uczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWN0ID0gdGhlcGFnZS5zZWN0aW9ucyArIGk7CisgICAgICAgICAgICAgIGlmIChzZWN0LT5uYW1lICYmIGlzX3N0YW5kYXJkX3NlY3Rpb24gKHNlY3QtPm5hbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBpZiAoc2VjdC0+bmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChmcCwgIi5TSCAlc1xuIiwgc2VjdC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICB3cml0ZV9jb250ZW50IChmcCwgc2VjdC0+bGluZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisKKyBsZWF2ZToKKyAgaWYgKGZwICE9IHN0ZG91dCkKKyAgICBmY2xvc2UgKGZwKTsKKyAgZnJlZSAodGhlcGFnZS5uYW1lKTsKKyAgdGhlcGFnZS5uYW1lID0gTlVMTDsKKyAgLyogRklYTUU6IENsZWFudXAgdGhlIGNvbnRlbnQuICAqLworfQorCisKKworCisvKiBQYXJzZSBvbmUgVGV4aW5mbyBmaWxlIGFuZCBjcmVhdGUgbWFucGFnZXMgYWNjb3JkaW5nIHRvIHRoZQorICAgZW1iZWRkZWQgaW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSwgRklMRSAqZnAsIGNoYXIgKipzZWN0aW9uX25hbWUsIGludCBpbl9wYXVzZSkKK3sKKyAgY2hhciAqbGluZTsKKyAgaW50IGxuciA9IDA7CisgIC8qIEZpeG1lOiBUaGUgZm9sbG93aW5nIHN0YXRlIHZhcmlhYmxlcyBkb24ndCBjYXJyeSBvdmVyIHRvIGluY2x1ZGUKKyAgICAgZmlsZXMuICovCisgIGludCBza2lwX3RvX2VuZCA9IDA7ICAgICAgICAvKiBVc2VkIHRvIHNraXAgb3ZlciBtZW51IGVudHJpZXMuICovCisgIGludCBza2lwX3NlY3RfbGluZSA9IDA7ICAgICAvKiBTa2lwIGFmdGVyIEBtYW5zZWN0LiAgKi8KKyAgaW50IGl0ZW1faW5kZW50ID0gMDsgICAgICAgIC8qIEhvdyBmYXIgaXMgdGhlIGN1cnJlbnQgQGl0ZW0gaW5kZW50ZWQuICAqLworCisgIC8qIEhlbHBlciB0byBkZWZpbmUgYSBtYWNyby4gKi8KKyAgY2hhciAqbWFjcm9uYW1lID0gTlVMTDsKKyAgY2hhciAqbWFjcm92YWx1ZSA9IE5VTEw7CisgIHNpemVfdCBtYWNyb3ZhbHVlc2l6ZSA9IDA7CisgIHNpemVfdCBtYWNyb3ZhbHVldXNlZCA9IDA7CisKKyAgbGluZSA9IHhtYWxsb2MgKExJTkVTSVpFKTsKKyAgd2hpbGUgKGZnZXRzIChsaW5lLCBMSU5FU0laRSwgZnApKQorICAgIHsKKyAgICAgIHNpemVfdCBuID0gc3RybGVuIChsaW5lKTsKKyAgICAgIGludCBnb3RfbGluZSA9IDA7CisgICAgICBjaGFyICpwLCAqcGVuZDsKKworICAgICAgbG5yKys7CisgICAgICBpZiAoIW4gfHwgbGluZVtuLTFdICE9ICdcbicpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgKCIlczolZDogdHJhaWxpbmcgbGluZWZlZWQgbWlzc2luZywgbGluZSB0b28gbG9uZyBvciAiCisgICAgICAgICAgICAgICAiZW1iZWRkZWQgTnVsIGNoYXJhY3RlciIsIGZuYW1lLCBsbnIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBsaW5lWy0tbl0gPSAwOworCisgICAgICAvKiBLbHVkZ2UgdG8gYWxsb3cgaW5kZW50YXRpb24gb2YgdGFibGVzLiAgKi8KKyAgICAgIGZvciAocD1saW5lOyAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JzsgcCsrKQorICAgICAgICA7CisgICAgICBpZiAoKnApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnAgPT0gJ0AnICYmICFzdHJuY21wIChwKzEsICJpdGVtIiwgNCkpCisgICAgICAgICAgICBpdGVtX2luZGVudCA9IHAgLSBsaW5lOyAgLyogU2V0IGEgbmV3IGluZGVudCBsZXZlbC4gICovCisgICAgICAgICAgZWxzZSBpZiAocCAtIGxpbmUgPCBpdGVtX2luZGVudCkKKyAgICAgICAgICAgIGl0ZW1faW5kZW50ID0gMDsgICAgICAgICAvKiBTd2l0Y2ggb2ZmIGluZGVudGlvbi4gICovCisKKyAgICAgICAgICBpZiAoaXRlbV9pbmRlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1lbW1vdmUgKGxpbmUsIGxpbmUraXRlbV9pbmRlbnQsIG4gLSBpdGVtX2luZGVudCArIDEpOworICAgICAgICAgICAgICBuIC09IGl0ZW1faW5kZW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgaWYgKCpsaW5lID09ICdAJykKKyAgICAgICAgeworICAgICAgICAgIGZvciAocD1saW5lKzEsIG49MTsgKnAgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcdCc7IHArKykKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcpCisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcCA9IGxpbmU7CisKKyAgICAgIC8qIFRha2UgYWN0aW9uIG9uIG1hY3JvLiAgKi8KKyAgICAgIGlmIChtYWNyb25hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAobiA9PSA0ICYmICFtZW1jbXAgKGxpbmUsICJAZW5kIiwgNCkKKyAgICAgICAgICAgICAgJiYgKGxpbmVbNF09PScgJ3x8bGluZVs0XT09J1x0J3x8IWxpbmVbNF0pCisgICAgICAgICAgICAgICYmICFzdHJuY21wIChwLCAibWFjcm8iLCA1KQorICAgICAgICAgICAgICAmJiAocFs1XT09JyAnfHxwWzVdPT0nXHQnfHwhcFs1XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChtYWNyb3ZhbHVldXNlZCkKKyAgICAgICAgICAgICAgICBtYWNyb3ZhbHVlWy0tbWFjcm92YWx1ZXVzZWRdID0gMDsgLyogS2lsbCB0aGUgbGFzdCBMRi4gKi8KKyAgICAgICAgICAgICAgbWFjcm92YWx1ZVttYWNyb3ZhbHVldXNlZF0gPSAwOyAgICAgLyogVGVybWluYXRlIG1hY3JvLiAqLworICAgICAgICAgICAgICBtYWNyb3ZhbHVlID0geHJlYWxsb2MgKG1hY3JvdmFsdWUsIG1hY3JvdmFsdWV1c2VkKzEpOworCisgICAgICAgICAgICAgIHNldF9tYWNybyAobWFjcm9uYW1lLCBtYWNyb3ZhbHVlKTsKKyAgICAgICAgICAgICAgbWFjcm92YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgIGZyZWUgKG1hY3JvbmFtZSk7CisgICAgICAgICAgICAgIG1hY3JvbmFtZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAobWFjcm92YWx1ZXVzZWQgKyBzdHJsZW4gKGxpbmUpICsgMiA+PSBtYWNyb3ZhbHVlc2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBtYWNyb3ZhbHVlc2l6ZSArPSBzdHJsZW4gKGxpbmUpICsgMjU2OworICAgICAgICAgICAgICAgICAgbWFjcm92YWx1ZSA9IHhyZWFsbG9jIChtYWNyb3ZhbHVlLCAgbWFjcm92YWx1ZXNpemUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc3RyY3B5IChtYWNyb3ZhbHVlK21hY3JvdmFsdWV1c2VkLCBsaW5lKTsKKyAgICAgICAgICAgICAgbWFjcm92YWx1ZXVzZWQgKz0gc3RybGVuIChsaW5lKTsKKyAgICAgICAgICAgICAgbWFjcm92YWx1ZVttYWNyb3ZhbHVldXNlZCsrXSA9ICdcbic7CisgICAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworCisgICAgICBpZiAobiA+PSA1ICYmICFtZW1jbXAgKGxpbmUsICJAbm9kZSIsIDUpCisgICAgICAgICAgJiYgKGxpbmVbNV09PScgJ3x8bGluZVs1XT09J1x0J3x8IWxpbmVbNV0pKQorICAgICAgICB7CisgICAgICAgICAgLyogQ29tcGxldGV5IGlnbm9yZSBAbm9kZSBsaW5lcy4gICovCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworCisgICAgICBpZiAoc2tpcF9zZWN0X2xpbmUpCisgICAgICAgIHsKKyAgICAgICAgICBza2lwX3NlY3RfbGluZSA9IDA7CisgICAgICAgICAgaWYgKCFzdHJuY21wIChsaW5lLCAiQHNlY3Rpb24iLCA4KQorICAgICAgICAgICAgICB8fCAhc3RybmNtcCAobGluZSwgIkBzdWJzZWN0aW9uIiwgMTEpCisgICAgICAgICAgICAgIHx8ICFzdHJuY21wIChsaW5lLCAiQGNoYXBoZWFkaW5nIiwgMTIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgLyogV2Ugb25seSBwYXJzZSBsaW5lcyB3ZSBuZWVkIGFuZCBpZ25vcmUgdGhlIHJlc3QuICBUaGVyZSBhcmUgYQorICAgICAgICAgZmV3IG1hY3JvcyB1c2VkIHRvIGNvbnRyb2wgdGhpcyBhcyB3ZWxsIGFzIG9uZSBAaWZzZXQKKyAgICAgICAgIGNvbW1hbmQuICBQYXJ0cyB3ZSBrbm93IGFib3V0IGFyZSBzYXZlZCBhd2F5IGludG8gY29udGFpbmVycworICAgICAgICAgc2VwYXJhdGUgZm9yIGVhY2ggc2VjdGlvbi4gKi8KKworICAgICAgLyogRmlyc3QgcHJvY2VzcyBpZnNldC9pZmNsZWFyIGNvbW1hbmRzLiAqLworICAgICAgaWYgKCpsaW5lID09ICdAJykKKyAgICAgICAgeworICAgICAgICAgIGlmIChuID09IDYgJiYgIW1lbWNtcCAobGluZSwgIkBpZnNldCIsIDYpCisgICAgICAgICAgICAgICAgICAgJiYgKGxpbmVbNl09PScgJ3x8bGluZVs2XT09J1x0JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAocD1saW5lKzc7ICpwID09ICcgJyB8fCAqcCA9PSAnXHQnOyBwKyspCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICBpZiAoISpwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGVyciAoIiVzOiVkOiBuYW1lIG1pc3NpbmcgYWZ0ZXIgXCJAaWZzZXRcIiIsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBmb3IgKHBlbmQ9cDsgKnBlbmQgJiYgKnBlbmQgIT0gJyAnICYmICpwZW5kICE9ICdcdCc7IHBlbmQrKykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICpwZW5kID0gMDsgIC8qIElnbm9yZSByZXN0IG9mIHRoZSBsaW5lLiAgKi8KKyAgICAgICAgICAgICAgcHVzaF9jb25kaXRpb24gKHAsIDEsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChuID09IDggJiYgIW1lbWNtcCAobGluZSwgIkBpZmNsZWFyIiwgOCkKKyAgICAgICAgICAgICAgICAgICAmJiAobGluZVs4XT09JyAnfHxsaW5lWzhdPT0nXHQnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yIChwPWxpbmUrOTsgKnAgPT0gJyAnIHx8ICpwID09ICdcdCc7IHArKykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgIGlmICghKnApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZXJyICgiJXM6JWQ6IG5hbWUgbWlzc2luZyBhZnRlciBcIkBpZnNjbGVhclwiIiwgZm5hbWUsIGxucik7CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGZvciAocGVuZD1wOyAqcGVuZCAmJiAqcGVuZCAhPSAnICcgJiYgKnBlbmQgIT0gJ1x0JzsgcGVuZCsrKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgKnBlbmQgPSAwOyAgLyogSWdub3JlIHJlc3Qgb2YgdGhlIGxpbmUuICAqLworICAgICAgICAgICAgICBwdXNoX2NvbmRpdGlvbiAocCwgMCwgZm5hbWUsIGxucik7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gNCAmJiAhbWVtY21wIChsaW5lLCAiQGVuZCIsIDQpCisgICAgICAgICAgICAgICAgICAgJiYgKGxpbmVbNF09PScgJ3x8bGluZVs0XT09J1x0JykKKyAgICAgICAgICAgICAgICAgICAmJiAhc3RybmNtcCAocCwgImlmc2V0IiwgNSkKKyAgICAgICAgICAgICAgICAgICAmJiAocFs1XT09JyAnfHxwWzVdPT0nXHQnfHwhcFs1XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBvcF9jb25kaXRpb24gKDEsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChuID09IDQgJiYgIW1lbWNtcCAobGluZSwgIkBlbmQiLCA0KQorICAgICAgICAgICAgICAgICAgICYmIChsaW5lWzRdPT0nICd8fGxpbmVbNF09PSdcdCcpCisgICAgICAgICAgICAgICAgICAgJiYgIXN0cm5jbXAgKHAsICJpZmNsZWFyIiwgNykKKyAgICAgICAgICAgICAgICAgICAmJiAocFs3XT09JyAnfHxwWzddPT0nXHQnfHwhcFs3XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBvcF9jb25kaXRpb24gKDAsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBUYWtlIGFjdGlvbiBvbiBpZnNldC9pZmNsZWFyLiAgKi8KKyAgICAgIGlmICghY29uZF9pc19hY3RpdmUpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBQcm9jZXNzIGNvbW1hbmRzLiAqLworICAgICAgaWYgKCpsaW5lID09ICdAJykKKyAgICAgICAgeworICAgICAgICAgIGlmIChza2lwX3RvX2VuZAorICAgICAgICAgICAgICAmJiBuID09IDQgJiYgIW1lbWNtcCAobGluZSwgIkBlbmQiLCA0KQorICAgICAgICAgICAgICAmJiAobGluZVs0XT09JyAnfHxsaW5lWzRdPT0nXHQnfHwhbGluZVs0XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNraXBfdG9fZW5kID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjb25kX2luX3ZlcmJhdGltKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdvdF9saW5lID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChuID09IDYgJiYgIW1lbWNtcCAobGluZSwgIkBtYWNybyIsIDYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtYWNyb25hbWUgPSB4c3RyZHVwIChwKTsKKyAgICAgICAgICAgICAgbWFjcm92YWx1ZSA9IHhtYWxsb2MgKChtYWNyb3ZhbHVlc2l6ZSA9IDEwMjQpKTsKKyAgICAgICAgICAgICAgbWFjcm92YWx1ZXVzZWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gOCAmJiAhbWVtY21wIChsaW5lLCAiQG1hbnBhZ2UiLCA4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnJlZSAoKnNlY3Rpb25fbmFtZSk7CisgICAgICAgICAgICAgICpzZWN0aW9uX25hbWUgPSBOVUxMOworICAgICAgICAgICAgICBmaW5pc2hfcGFnZSAoKTsKKyAgICAgICAgICAgICAgc3RhcnRfcGFnZSAocCk7CisgICAgICAgICAgICAgIGluX3BhdXNlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChuID09IDggJiYgIW1lbWNtcCAobGluZSwgIkBtYW5zZWN0IiwgOCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghdGhlcGFnZS5uYW1lKQorICAgICAgICAgICAgICAgIGVyciAoIiVzOiVkOiBzZWN0aW9uIG91dHNpZGUgb2YgYSBtYW4gcGFnZSIsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZnJlZSAoKnNlY3Rpb25fbmFtZSk7CisgICAgICAgICAgICAgICAgICAqc2VjdGlvbl9uYW1lID0gYXNjaWlfc3RydXByICh4c3RyZHVwIChwKSk7CisgICAgICAgICAgICAgICAgICBpbl9wYXVzZSA9IDA7CisgICAgICAgICAgICAgICAgICBza2lwX3NlY3RfbGluZSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gOSAmJiAhbWVtY21wIChsaW5lLCAiQG1hbnBhdXNlIiwgOSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghKnNlY3Rpb25fbmFtZSkKKyAgICAgICAgICAgICAgICBlcnIgKCIlczolZDogcGF1c2luZyBvdXRzaWRlIG9mIGEgbWFuIHNlY3Rpb24iLCBmbmFtZSwgbG5yKTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoaW5fcGF1c2UpCisgICAgICAgICAgICAgICAgZXJyICgiJXM6JWQ6IGFscmVhZHkgcGF1c2luZyIsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5fcGF1c2UgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gOCAmJiAhbWVtY21wIChsaW5lLCAiQG1hbmNvbnQiLCA4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCEqc2VjdGlvbl9uYW1lKQorICAgICAgICAgICAgICAgIGVyciAoIiVzOiVkOiBjb250aW51ZSBvdXRzaWRlIG9mIGEgbWFuIHNlY3Rpb24iLCBmbmFtZSwgbG5yKTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoIWluX3BhdXNlKQorICAgICAgICAgICAgICAgIGVyciAoIiVzOiVkOiBjb250aW51ZSB3aGlsZSBub3QgcGF1c2luZyIsIGZuYW1lLCBsbnIpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5fcGF1c2UgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gNSAmJiAhbWVtY21wIChsaW5lLCAiQG1lbnUiLCA1KQorICAgICAgICAgICAgICAgICAgICYmIChsaW5lWzVdPT0nICd8fGxpbmVbNV09PSdcdCd8fCFsaW5lWzVdKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2tpcF90b19lbmQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKG4gPT0gOCAmJiAhbWVtY21wIChsaW5lLCAiQGluY2x1ZGUiLCA4KQorICAgICAgICAgICAgICAgICAgICYmIChsaW5lWzhdPT0nICd8fGxpbmVbOF09PSdcdCd8fCFsaW5lWzhdKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2hhciAqaW5jbmFtZSA9IHhzdHJkdXAgKHApOworICAgICAgICAgICAgICBGSUxFICppbmNmcCA9IGZvcGVuIChpbmNuYW1lLCAiciIpOworCisgICAgICAgICAgICAgIGlmICghaW5jZnAgJiYgb3B0X2luY2x1ZGUgJiYgKm9wdF9pbmNsdWRlICYmICpwICE9ICcvJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcmVlIChpbmNuYW1lKTsKKyAgICAgICAgICAgICAgICAgIGluY25hbWUgPSB4bWFsbG9jIChzdHJsZW4gKG9wdF9pbmNsdWRlKSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAocCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5jbmFtZSwgb3B0X2luY2x1ZGUpOworICAgICAgICAgICAgICAgICAgaWYgKCBpbmNuYW1lW3N0cmxlbiAoaW5jbmFtZSktMV0gIT0gJy8nICkKKyAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChpbmNuYW1lLCAiLyIpOworICAgICAgICAgICAgICAgICAgc3RyY2F0IChpbmNuYW1lLCBwKTsKKyAgICAgICAgICAgICAgICAgIGluY2ZwID0gZm9wZW4gKGluY25hbWUsICJyIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICghaW5jZnApCisgICAgICAgICAgICAgICAgZXJyICgiY2FuJ3Qgb3BlbiBpbmNsdWRlIGZpbGUgJyVzJzolcyIsCisgICAgICAgICAgICAgICAgICAgICBpbmNuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHBhcnNlX2ZpbGUgKGluY25hbWUsIGluY2ZwLCBzZWN0aW9uX25hbWUsIGluX3BhdXNlKTsKKyAgICAgICAgICAgICAgICAgIGZjbG9zZSAoaW5jZnApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZnJlZSAoaW5jbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAobiA9PSA0ICYmICFtZW1jbXAgKGxpbmUsICJAYnllIiwgNCkKKyAgICAgICAgICAgICAgICAgICAmJiAobGluZVs0XT09JyAnfHxsaW5lWzRdPT0nXHQnfHwhbGluZVs0XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFza2lwX3RvX2VuZCkKKyAgICAgICAgICAgIGdvdF9saW5lID0gMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXNraXBfdG9fZW5kKQorICAgICAgICBnb3RfbGluZSA9IDE7CisKKyAgICAgIGlmIChnb3RfbGluZSAmJiBjb25kX2luX3ZlcmJhdGltKQorICAgICAgICBhZGRfY29udGVudCAoKnNlY3Rpb25fbmFtZSwgbGluZSwgMSk7CisgICAgICBlbHNlIGlmIChnb3RfbGluZSAmJiB0aGVwYWdlLm5hbWUgJiYgKnNlY3Rpb25fbmFtZSAmJiAhaW5fcGF1c2UpCisgICAgICAgIGFkZF9jb250ZW50ICgqc2VjdGlvbl9uYW1lLCBsaW5lLCAwKTsKKworICAgIH0KKyAgaWYgKGZlcnJvciAoZnApKQorICAgIGVyciAoIiVzOiVkOiByZWFkIGVycm9yOiAlcyIsIGZuYW1lLCBsbnIsIHN0cmVycm9yIChlcnJubykpOworICBmcmVlIChtYWNyb25hbWUpOworICBmcmVlIChtYWNyb3ZhbHVlKTsKKyAgZnJlZSAobGluZSk7Cit9CisKKworc3RhdGljIHZvaWQKK3RvcF9wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSwgRklMRSAqZnApCit7CisgIGNoYXIgKnNlY3Rpb25fbmFtZSA9IE5VTEw7ICAvKiBOYW1lIG9mIHRoZSBjdXJyZW50IHNlY3Rpb24gb3IgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluIGEgc2VjdGlvbi4gICovCisgIG1hY3JvX3QgbTsKKworICB3aGlsZSAobWFjcm9saXN0KQorICAgIHsKKyAgICAgIG1hY3JvX3QgbmV4dCA9IG1hY3JvbGlzdC0+bmV4dDsKKyAgICAgIGZyZWUgKG1hY3JvbGlzdC0+dmFsdWUpOworICAgICAgZnJlZSAobWFjcm9saXN0KTsKKyAgICAgIG1hY3JvbGlzdCA9IG5leHQ7CisgICAgfQorICBmb3IgKG09cHJlZGVmaW5lZG1hY3JvbGlzdDsgbTsgbSA9IG0tPm5leHQpCisgICAgc2V0X21hY3JvIChtLT5uYW1lLCB4c3RyZHVwICgiMSIpKTsKKyAgY29uZF9pc19hY3RpdmUgPSAxOworICBjb25kX2luX3ZlcmJhdGltID0gMDsKKworICBwYXJzZV9maWxlIChmbmFtZSwgZnAsICZzZWN0aW9uX25hbWUsIDApOworICBmcmVlIChzZWN0aW9uX25hbWUpOworICBmaW5pc2hfcGFnZSAoKTsKK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworCisgIG9wdF9zb3VyY2UgPSAiR05VIjsKKyAgb3B0X3JlbGVhc2UgPSAiIjsKKworICAvKiBEZWZpbmUgZGVmYXVsdCBtYWNyb3MuICBUaGUgdHJpY2sgaXMgdGhhdCB0aGVzZSBtYWNyb3MgYXJlIG5vdAorICAgICBkZWZpbmVkIHdoZW4gdXNpbmcgdGhlIGFjdHVhbCB0ZXhpbmZvIHJlbmRlcmVyLiAqLworICBhZGRfcHJlZGVmaW5lZF9tYWNybyAoImlzbWFuIik7CisgIGFkZF9wcmVkZWZpbmVkX21hY3JvICgibWFudmVyYiIpOworCisgIC8qIE9wdGlvbiBwYXJzaW5nLiAgKi8KKyAgaWYgKGFyZ2MpCisgICAgeworICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgfQorICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgeworICAgICAgICAgIHB1dHMgKAorICAgICAgICAgICAgICAgICJVc2FnZTogIiBQR00gIiBbT1BUSU9OXSBbRklMRV1cbiIKKyAgICAgICAgICAgICAgICAiRXh0cmFjdCBtYW4gcGFnZXMgZnJvbSBhIFRleGluZm8gc291cmNlLlxuXG4iCisgICAgICAgICAgICAgICAgIiAgLS1zb3VyY2UgTkFNRSAgICB1c2UgTkFNRSBhcyBzb3VyY2UgZmllbGRcbiIKKyAgICAgICAgICAgICAgICAiICAtLXJlbGVhc2UgU1RSSU5HIHVzZSBTVFJJTkcgYXMgdGhlIHJlbGVhc2UgZmllbGRcbiIKKyAgICAgICAgICAgICAgICAiICAtLXN0b3JlICAgICAgICAgIHdyaXRlIG91dHB1dCB1c2luZyBAbWFucGFnZSBuYW1lXG4iCisgICAgICAgICAgICAgICAgIiAgLS1zZWxlY3QgTkFNRSAgICBvbmx5IG91dHB1dCBwYWdlcyB3aXRoIEBtYW5wYWdlIE5BTUVcbiIKKyAgICAgICAgICAgICAgICAiICAtLXZlcmJvc2UgICAgICAgIGVuYWJsZSBleHRyYSBpbmZvcm1hdGlvbmFsIG91dHB1dFxuIgorICAgICAgICAgICAgICAgICIgIC0tZGVidWcgICAgICAgICAgZW5hYmxlIGFkZGl0aW9uYWwgZGVidWcgb3V0cHV0XG4iCisgICAgICAgICAgICAgICAgIiAgLS1oZWxwICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorICAgICAgICAgICAgICAgICIgIC1JIERJUiAgICAgICAgICAgYWxzbyBzZWFyY2ggaW4gaW5jbHVkZSBESVJcbiIKKyAgICAgICAgICAgICAgICAiICAtRCBncGdvbmUgICAgICAgIHRoZSBvbmx5IHVzZWFibGUgZGVmaW5lXG5cbiIKKyAgICAgICAgICAgICAgICAiV2l0aCBubyBGSUxFLCBvciB3aGVuIEZJTEUgaXMgLSwgcmVhZCBzdGFuZGFyZCBpbnB1dC5cblxuIgorICAgICAgICAgICAgICAgICJSZXBvcnQgYnVncyB0byA8YnVnc0BnMTBjb2RlLmNvbT4uIik7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJzaW9uIikpCisgICAgICAgIHsKKyAgICAgICAgICBwdXRzIChQR00gIiAiIFZFUlNJT04gIlxuIgorICAgICAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwNSBnMTAgQ29kZSBHbWJIXG4iCisgICAgICAgICAgICAgICAiVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKKyAgICAgICAgICAgICAgICJUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCisgICAgICAgICAgICAgICAgInVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4gU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGRldGFpbHMuIik7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJib3NlIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXF1aWV0IikpCisgICAgICAgIHsKKyAgICAgICAgICBxdWlldCA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1kZWJ1ZyIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSA9IGRlYnVnID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXNvdXJjZSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9wdF9zb3VyY2UgPSAqYXJndjsKKyAgICAgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1yZWxlYXNlIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb3B0X3JlbGVhc2UgPSAqYXJndjsKKyAgICAgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1zdG9yZSIpKQorICAgICAgICB7CisgICAgICAgICAgb3B0X3N0b3JlID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXNlbGVjdCIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9wdF9zZWxlY3QgPSBzdHJyY2hyICgqYXJndiwgJy8nKTsKKyAgICAgICAgICAgICAgaWYgKG9wdF9zZWxlY3QpCisgICAgICAgICAgICAgICAgb3B0X3NlbGVjdCsrOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3B0X3NlbGVjdCA9ICphcmd2OworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItSSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9wdF9pbmNsdWRlID0gKmFyZ3Y7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi1EIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWRkX3ByZWRlZmluZWRfbWFjcm8gKCphcmd2KTsKKyAgICAgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGFyZ2MgPiAxKQorICAgIGRpZSAoInVzYWdlOiAiIFBHTSAiIFtPUFRJT05dIFtGSUxFXSAodHJ5IC0taGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbilcbiIpOworCisgIC8qIFN0YXJ0IHByb2Nlc3NpbmcuICovCisgIGlmIChhcmdjICYmIHN0cmNtcCAoKmFyZ3YsICItIikpCisgICAgeworICAgICAgRklMRSAqZnAgPSBmb3BlbiAoKmFyZ3YsICJyYiIpOworICAgICAgaWYgKCFmcCkKKyAgICAgICAgZGllICgiJXM6MDogY2FuJ3Qgb3BlbiBmaWxlOiAlcyIsICphcmd2LCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIHRvcF9wYXJzZV9maWxlICgqYXJndiwgZnApOworICAgICAgZmNsb3NlIChmcCk7CisgICAgfQorICBlbHNlCisgICAgdG9wX3BhcnNlX2ZpbGUgKCItIiwgc3RkaW4pOworCisgIHJldHVybiAhIWFueV9lcnJvcjsKK30KKworCisvKgorTG9jYWwgVmFyaWFibGVzOgorY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1XYWxsIC1nIC1XYWxsIC1vIHlhdDJtIHlhdDJtLmMiCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvbTQvQ2hhbmdlTG9nLTIwMTEgYi9tNC9DaGFuZ2VMb2ctMjAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUxMDBhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvQ2hhbmdlTG9nLTIwMTEKQEAgLTAsMCArMSw1MCBAQAorMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCU5COiBDaGFuZ2VMb2cgZmlsZXMgYXJlIG5vIGxvbmdlciBtYW51YWxseSBtYWludGFpbmVkLiAgU3RhcnRpbmcKKwlvbiBEZWNlbWJlciAxc3QsIDIwMTEgd2UgcHV0IGNoYW5nZSBpbmZvcm1hdGlvbiBvbmx5IGluIHRoZSBHSVQKKwljb21taXQgbG9nLCBhbmQgZ2VuZXJhdGUgYSB0b3AtbGV2ZWwgQ2hhbmdlTG9nIGZpbGUgZnJvbSBsb2dzIGF0CisJIm1ha2UgZGlzdCIuICBTZWUgZG9jL0hBQ0tJTkcgZm9yIGRldGFpbHMuCisKKzIwMTEtMDItMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdwZy1lcnJvci5tNDogTmV3LiAgVGFrZSBmcm9tIGN1cnJlbnQgZ3BnLWVycm9yIG1hc3Rlci4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGdwZy1lcnJvci5tNC4KKworMjAwOS0wMS0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbm9leGVjc3RhY2subTQ6IFJlcGxhY2Ugbm9uIHBvcnRhYmxlIGdyZXAgLXEuICBSZXBvcnRlZCBieQorCUFsYmVydCBDaGluLgorCisyMDA3LTAyLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBub2V4ZWNzdGFjay5tNDogQ2hhbmdlIGRlZmF1bHQgdG8gZW5hYmxlIGl0LgorCisyMDA3LTAyLTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbTogTmV3LgorCisJKiBub2V4ZWNzdGFjay5tNDogIE5ldy4gIFRha2VuIGZyb20gZ251cGcgMS40CisKKzIwMDYtMTAtMTEgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogZmFsbGJhY2subTQ6IFJlbW92ZWQgYWdhaW4uCisKKzIwMDYtMTAtMTAgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogZmFsbGJhY2subTQ6IE5ldyBmaWxlIGZyb20gUHRoLgorCisyMDA2LTA3LTA0ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIHN5c19zb2NrZXRfaC5tNCwgc29ja2xlbi5tNCwgb25jZW9ubHkubTQ6IE5ldyBmaWxlcyBmcm9tIGdudWxpYi4KKworMjAwNC0wNC0wNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGxpYnRvb2wubTQ6IFVwZGF0ZWQgZnJvbSAxLjUuNAorCisyMDAzLTEyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbGlidG9vbC5tNDogTmV3LgorCitMb2NhbCBWYXJpYWJsZXM6CitidWZmZXItcmVhZC1vbmx5OiB0CitFbmQ6CmRpZmYgLS1naXQgYS9tNC9NYWtlZmlsZS5hbSBiL200L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTliYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIgQEAKK0VYVFJBX0RJU1QgPSBsaWJ0b29sLm00IG9uY2Vvbmx5Lm00IHNvY2tsZW4ubTQgc3lzX3NvY2tldF9oLm00IG5vZXhlY3N0YWNrLm00CitFWFRSQV9ESVNUICs9IGdwZy1lcnJvci5tNCBsb2NrLm00IHRocmVhZGxpYi5tNApkaWZmIC0tZ2l0IGEvbTQvTWFrZWZpbGUuaW4gYi9tNC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWExOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NDAgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBtNAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9ncGctZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ub2V4ZWNzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NvY2tsZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfRklMRVZFUlNJT04gPSBAQlVJTERfRklMRVZFUlNJT05ACitCVUlMRF9SRVZJU0lPTiA9IEBCVUlMRF9SRVZJU0lPTkAKK0JVSUxEX1RJTUVTVEFNUCA9IEBCVUlMRF9USU1FU1RBTVBACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDQ19GT1JfQlVJTEQgPSBAQ0NfRk9SX0JVSUxEQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRExfTElCUyA9IEBETF9MSUJTQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGQUxMQkFDS19TT0NLTEVOX1QgPSBARkFMTEJBQ0tfU09DS0xFTl9UQAorRkdSRVAgPSBARkdSRVBACitHQ1JZUFRfQ0lQSEVSUyA9IEBHQ1JZUFRfQ0lQSEVSU0AKK0dDUllQVF9ESUdFU1RTID0gQEdDUllQVF9ESUdFU1RTQAorR0NSWVBUX0hXRl9NT0RVTEVTID0gQEdDUllQVF9IV0ZfTU9EVUxFU0AKK0dDUllQVF9LREZTID0gQEdDUllQVF9LREZTQAorR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQEdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0dDUllQVF9SQU5ET00gPSBAR0NSWVBUX1JBTkRPTUAKK0dQR19FUlJPUl9DRkxBR1MgPSBAR1BHX0VSUk9SX0NGTEFHU0AKK0dQR19FUlJPUl9DT05GSUcgPSBAR1BHX0VSUk9SX0NPTkZJR0AKK0dQR19FUlJPUl9MSUJTID0gQEdQR19FUlJPUl9MSUJTQAorR1JFUCA9IEBHUkVQQAorSU5TRVJUX1NZU19TRUxFQ1RfSCA9IEBJTlNFUlRfU1lTX1NFTEVDVF9IQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkdDUllQVF9DSVBIRVJTID0gQExJQkdDUllQVF9DSVBIRVJTQAorTElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTiA9IEBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAorTElCR0NSWVBUX0NPTkZJR19DRkxBR1MgPSBATElCR0NSWVBUX0NPTkZJR19DRkxBR1NACitMSUJHQ1JZUFRfQ09ORklHX0hPU1QgPSBATElCR0NSWVBUX0NPTkZJR19IT1NUQAorTElCR0NSWVBUX0NPTkZJR19MSUJTID0gQExJQkdDUllQVF9DT05GSUdfTElCU0AKK0xJQkdDUllQVF9ESUdFU1RTID0gQExJQkdDUllQVF9ESUdFU1RTQAorTElCR0NSWVBUX0xUX0FHRSA9IEBMSUJHQ1JZUFRfTFRfQUdFQAorTElCR0NSWVBUX0xUX0NVUlJFTlQgPSBATElCR0NSWVBUX0xUX0NVUlJFTlRACitMSUJHQ1JZUFRfTFRfUkVWSVNJT04gPSBATElCR0NSWVBUX0xUX1JFVklTSU9OQAorTElCR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0xJQkdDUllQVF9USFJFQURfTU9EVUxFUyA9IEBMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVNACitMSUJNVUxUSVRIUkVBRCA9IEBMSUJNVUxUSVRIUkVBREAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVBJX1NGTEFHUyA9IEBNUElfU0ZMQUdTQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9FWEVDU1RBQ0tfRkxBR1MgPSBATk9FWEVDU1RBQ0tfRkxBR1NACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BUSF9DRkxBR1MgPSBAUFRIX0NGTEFHU0AKK1BUSF9DT05GSUcgPSBAUFRIX0NPTkZJR0AKK1BUSF9MSUJTID0gQFBUSF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1JDID0gQFJDQAorUlVOX0xBUkdFX0RBVEFfVEVTVFMgPSBAUlVOX0xBUkdFX0RBVEFfVEVTVFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorU1lTX1NPQ0tFVF9IID0gQFNZU19TT0NLRVRfSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05fTlVNQkVSID0gQFZFUlNJT05fTlVNQkVSQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZW1hY3NfbG9jYWxfdmFyc19iZWdpbiA9IEBlbWFjc19sb2NhbF92YXJzX2JlZ2luQAorZW1hY3NfbG9jYWxfdmFyc19lbmQgPSBAZW1hY3NfbG9jYWxfdmFyc19lbmRACitlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seSA9IEBlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seUAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBsaWJ0b29sLm00IG9uY2Vvbmx5Lm00IHNvY2tsZW4ubTQgc3lzX3NvY2tldF9oLm00IFwKKwlub2V4ZWNzdGFjay5tNCBncGctZXJyb3IubTQgbG9jay5tNCB0aHJlYWRsaWIubTQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IG00L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IG00L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbTQvZ3BnLWVycm9yLm00IGIvbTQvZ3BnLWVycm9yLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWQ3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9ncGctZXJyb3IubTQKQEAgLTAsMCArMSw5MCBAQAorIyBncGctZXJyb3IubTQgLSBhdXRvY29uZiBtYWNybyB0byBkZXRlY3QgbGliZ3BnLWVycm9yLgorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgZzEwIENvZGUgR21iSAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitkbmwgQU1fUEFUSF9HUEdfRVJST1IoW01JTklNVU0tVkVSU0lPTiwKK2RubCAgICAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgXV1dKQorZG5sIFRlc3QgZm9yIGxpYmdwZy1lcnJvciBhbmQgZGVmaW5lIEdQR19FUlJPUl9DRkxBR1MgYW5kIEdQR19FUlJPUl9MSUJTCitkbmwKK0FDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCitbCisgIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeD1QRlggaXMgdGhlIHByZWZlcnJlZCBuYW1lIGZvciB0aGlzIG9wdGlvbiwKKyAgZG5sIHNpbmNlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBvdXIgdGhyZWUgc2libGluZ3MgdXNlIHRoZSBkaXJlY3RvcnkvCisgIGRubCBwYWNrYWdlIG5hbWUgaW4gLS13aXRoLSRkaXJfbmFtZS1wcmVmaXg9UEZYLgorICBBQ19BUkdfV0lUSChsaWJncGctZXJyb3ItcHJlZml4LAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEdQRyBFcnJvciBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorICAgICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIikKKworICBkbmwgQWNjZXB0IC0td2l0aC1ncGctZXJyb3ItcHJlZml4IGFuZCBtYWtlIGl0IHdvcmsgdGhlIHNhbWUgYXMKKyAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4IGFib3ZlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksCisgIGRubCBidXQgZG8gbm90IGRvY3VtZW50IHRoaXMgb2xkLCBpbmNvbnNpc3RlbnRseS1uYW1lZCBvcHRpb24uCisgIEFDX0FSR19XSVRIKGdwZy1lcnJvci1wcmVmaXgsLAorICAgICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIikKKworICBpZiB0ZXN0IHgkZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKyAgICAgaWYgdGVzdCB4JHtHUEdfRVJST1JfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKyAgICAgICAgR1BHX0VSUk9SX0NPTkZJRz0kZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXgvYmluL2dwZy1lcnJvci1jb25maWcKKyAgICAgZmkKKyAgZmkKKworICBBQ19QQVRIX1RPT0woR1BHX0VSUk9SX0NPTkZJRywgZ3BnLWVycm9yLWNvbmZpZywgbm8pCisgIG1pbl9ncGdfZXJyb3JfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMCwkMSkKKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEcgRXJyb3IgLSB2ZXJzaW9uID49ICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24pCisgIG9rPW5vCisgIGlmIHRlc3QgIiRHUEdfRVJST1JfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCisgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKyAgICBncGdfZXJyb3JfY29uZmlnX3ZlcnNpb249YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS12ZXJzaW9uYAorICAgIG1ham9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorICAgIG1pbm9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorICAgICAgICBvaz15ZXMKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ2UgIiRyZXFfbWlub3IiOyB0aGVuCisgICAgICAgICAgICAgICBvaz15ZXMKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICBHUEdfRVJST1JfQ0ZMQUdTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorICAgIEdQR19FUlJPUl9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pXSkKKyAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgIGlmIHRlc3QgeCIkaG9zdCIgIT0geCA7IHRoZW4KKyAgICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorICAgICAgaWYgdGVzdCB4IiRncGdfZXJyb3JfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgIEFDX01TR19XQVJOKFtbCisqKioKKyoqKiBUaGUgY29uZmlnIHNjcmlwdCAkR1BHX0VSUk9SX0NPTkZJRyB3YXMKKyoqKiBidWlsdCBmb3IgJGdwZ19lcnJvcl9jb25maWdfaG9zdCBhbmQgdGh1cyBtYXkgbm90IG1hdGNoIHRoZQorKioqIHVzZWQgaG9zdCAkaG9zdC4KKyoqKiBZb3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1ncGctZXJyb3ItcHJlZml4CisqKiogdG8gc3BlY2lmeSBhIG1hdGNoaW5nIGNvbmZpZyBzY3JpcHQuCisqKipdXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIEdQR19FUlJPUl9DRkxBR1M9IiIKKyAgICBHUEdfRVJST1JfTElCUz0iIgorICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgZmkKKyAgQUNfU1VCU1QoR1BHX0VSUk9SX0NGTEFHUykKKyAgQUNfU1VCU1QoR1BHX0VSUk9SX0xJQlMpCitdKQpkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2MmIwNQotLS0gL2Rldi9udWxsCisrKyBiL200L2xpYnRvb2wubTQKQEAgLTAsMCArMSw4MDI3IEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU3IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK19MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworX0xUX0RFQ0woW10sIFtQQVRIX1NFUEFSQVRPUl0sIFsxXSwgW1RoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCitfTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKK2RubAorQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCitdKQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBfTFRfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQorX0xUX0xBTkdfQ19DT05GSUcKK19MVF9MQU5HX0RFRkFVTFRfQ09ORklHCitfTFRfQ09ORklHX0NPTU1BTkRTCitdKSMgX0xUX1NFVFVQCisKKworIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAorWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCitdKQorCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJFtdMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bworIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCisjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgorIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCittNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAorW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW2x0X3dyaXRlX2ZhaWw9MAorY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorJDIKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK19BU0VPRgordGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAorbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKKworIyBMVF9PVVRQVVQKKyMgLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKKyMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKyMgdGVzdHMuCitBQ19ERUZVTihbTFRfT1VUUFVUXSwKK1s6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCitfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKK1sjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK2x0X2NsX3NpbGVudD1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworeworICBlY2hvCisgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKK30gPiZBU19NRVNTQUdFX0xPR19GRAorCitsdF9jbF9oZWxwPSJcCitcYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiAkbHRfY2xfc2lsZW50OyB0aGVuCisgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKK2ZpCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKK0FTX0VYSVQoMCkKK19MVEVPRgorY2htb2QgK3ggIiRDT05GSUdfTFQiCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisjIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAorIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCisjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCitsdF9jbF9zdWNjZXNzPToKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmCisgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCiskU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCiskbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCitdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCitdKSMgX0xUX0NPTkZJRworCisKKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCisjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisjICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCitBQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQorCisKKyMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCittNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCisKKworIyBMVF9MQU5HKExBTkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCitBQ19ERUZVTihbTFRfTEFOR10sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorbTRfY2FzZShbJDFdLAorICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKKyAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCisgIFtHb10sCQkJW19MVF9MQU5HKEdPKV0sCisgIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKyAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAorICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKyAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKyAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCisgICAgW19MVF9MQU5HKCQxKV0sCisgICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKK10pIyBMVF9MQU5HCisKKworIyBfTFRfTEFORyhMQU5HTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkddLAorW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKyAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAorICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKK10pIyBfTFRfTEFORworCisKK200X2lmbmRlZihbQUNfUFJPR19HT10sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19HTy4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK200X2RlZnVuKFtBQ19QUk9HX0dPXSwKK1tBQ19MQU5HX1BVU0goR28pZG5sCitBQ19BUkdfVkFSKFtHT0NdLCAgICAgW0dvIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbR09GTEFHU10sIFtHbyBjb21waWxlciBmbGFnc10pZG5sCitfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKK0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbykKK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBBQ19DSEVDS19QUk9HKEdPQywgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10pCisgIGZpCitmaQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgQUNfQ0hFQ0tfUFJPRyhHT0MsIGdjY2dvLCBnY2NnbywgZmFsc2UpCitmaQorXSkjbTRfZGVmdW4KK10pI200X2lmbmRlZgorCisKKyMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgW0xUX0xBTkcoQ1hYKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisgIFtMVF9MQU5HKEY3NyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCisgIFtMVF9MQU5HKEZDKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisKK2RubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgW0xUX0xBTkcoR0NKKV0sCisgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCisgICAgICBbTFRfTEFORyhHQ0opXSwKKyAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCisJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR09dLAorICBbTFRfTEFORyhHTyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0dPXSwgZGVmbihbQUNfUFJPR19HT10pW0xUX0xBTkcoR08pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbTFRfTEFORyhXaW5kb3dzIFJlc291cmNlKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtdKQorCisKKyMgX0xUX1RBR19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKK19MVF9ERUNMKFtMVENGTEFHU10sIFtDRkxBR1NdLCBbMV0sIFtMVENDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfVEFHX0NPTVBJTEVSCisKKworIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKworCisjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0w2NF0sIFtvdG9vbDY0XSwgWzpdKQorICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtOTUVESVRdLCBbMV0sCisgICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MNjRdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAorICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKKyAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KK200X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCitbCisgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICAgIG00X2Nhc2UoWyQxXSwgW0Y3N10sIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10sCisgICAgICAgICAgICAgICAgICBbRkNdLCAgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSkKKyAgZWxzZQorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBmaQorICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH1dJworICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpXSxbXSkKKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPSIvdXNyL2xpYjovbGliIgorICBmaQorICBdKQorICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKK2ZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQorXSldKSMgX0xUX1NIRUxMX0lOSVQKKworCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KKyMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0CisjIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgorIyBwcmludGYgKHdoaWNoIHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnQgc3RyaW5nc10pCisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskW10xCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Citlc2FjCisKK200X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoWworICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAorICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKworX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfV0lUSF9TWVNST09UCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKK0FDX0FSR19XSVRIKFtzeXNyb290XSwKK1sgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorCitkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCitkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQorICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgIDs7Citlc2FjCisKKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCitfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisgICAgICAgICBwb3dlcnBjNjRsZS0qKQorICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisgICAgICAgICAgIDs7CisgICAgICAgICBwb3dlcnBjNjQtKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKyAgICAgICAgIHBvd2VycGNsZS0qKQorICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorICAgICAgICAgICA7OworICAgICAgICAgcG93ZXJwYy0qKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7OworKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0iJHtMRC1sZH1fc29sMiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorXSkjIF9MVF9FTkFCTEVfTE9DSworCisKKyMgX0xUX1BST0dfQVIKKyMgLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCitbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgICAgIF0pCisgIF0pCisKK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCitfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCitdKSMgX0xUX1BST0dfQVIKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW19MVF9QUk9HX0FSCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb25dLCBbMF0sCisgICAgW1doZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbl0pCitdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorCisKKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCitmaQorXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKworCisjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK31dCitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICAkMworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKK10pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCisKKworIyBMVF9TWVNfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICBdKQorICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisJICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQorICAgIF0pCisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitdKSMgTFRfU1lTX0RMT1BFTl9TRUxGCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKK10pCitfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKK10pIyBfTFRfQ09NUElMRVJfQ19PCisKKworIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK200X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCitbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQorCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKK10pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUworCisKKyMgX0xUX0NIRUNLX09CSkRJUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKK29iamRpcj0kbHRfY3Zfb2JqZGlyCitfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKyAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitdKSMgX0xUX0NIRUNLX09CSkRJUgorCisKKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCitbQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK19MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAorICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCitdKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICisKKworIyBfTFRfQ01EX1NUUklQTElCCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKK10pIyBfTFRfQ01EX1NUUklQTElCCisKKworIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbW0EtWmEtel1dOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmldKQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworbTRfaWYoWyQxXSwgW10sWworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMjNdXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBBQ19DQUNIRV9WQUwoW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sCisgICAgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAgICBdKQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZGVsZiotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbaW5zdGFsbF9vdmVycmlkZV9tb2RlXSwgWzFdLAorICAgIFtQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorX0xUX1BBVEhfTERfR05VCitBQ19TVUJTVChbTERdKQorCitfTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCitdKSMgTFRfUEFUSF9MRAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTERfR05VCisjLSAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkjIF9MVF9QQVRIX0xEX0dOVQorCisKKyMgX0xUX0NNRF9SRUxPQUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAorICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFtbNC05XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dXC5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCitsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworXSkKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCitfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorCisKKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK0FDX1NVQlNUKFtMSUJNXSkKK10pIyBMVF9MSUJfTQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfTk9fUlRUSV0sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ii1YY29tcGlsZXIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbWzEtN11dLiogfCAqU3VuKkZvcnRyYW4qXCA4LltbMC0zXV0qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbW0NGXV0qQ29tcGlsZXIqKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgOzsKKwkqUG9ydGxhbmRcIEdyb3VwKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworCitBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKQorICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKKyAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuW1syLTldXSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgW1szLTldXSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgXCIkc2VkX3VuY29tbWVudF9kZWZmaWxlXCIgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAxcWAiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCBcIiRzZWRfdW5jb21tZW50X2RlZmZpbGVcIiAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIDFxYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKwlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKKwlbJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisJICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorCSAgdGhlbgorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgZWxzZQorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKwldKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgICAgIExUX1BBVEhfTEQKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgXCIkc2VkX3VuY29tbWVudF9kZWZmaWxlXCIgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAxcWAiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZWxzZQorCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBmaX4KKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAgICouZXhlfCouRVhFKSA7OworCSAgICAgICopCisJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkJOzsKKwkgICAgZXNhY34KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCBcIiRzZWRfdW5jb21tZW50X2RlZmZpbGVcIiAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIDFxYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGZpfgorCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkMi4qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisJICAgICAgZmkKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKKwkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisJCSRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QyKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBvcGVuYnNkKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCisJICAgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KKwkgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKworCisjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIworIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisjIGV4Y2VwdCB0aGlzIG9uZSBjYW4gYmUgdXNlZCBieSBtNCBjb2RlIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIGJ5IGNvbmZpZ3VyZSwKKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKK0FDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCitmdW5jX3N0cmlwbmFtZV9jbmYgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKworIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAorIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK19MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9CisKK2RubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAorZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKK2RubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKK2RubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCitkbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KK200X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2ludCBhOwordm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KK19MVF9FT0YKK10sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKK10sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyKjQgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlciBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbR0NKXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwdWJsaWMgY2xhc3MgZm9vIHsKKyAgcHJpdmF0ZSBpbnQgYTsKKyAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7CisgICAgYSA9IDA7CisgIH0KK307CitfTFRfRU9GCitdLCBbJDFdLCBbR09dLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3BhY2thZ2UgZm9vCitmdW5jIGZvbygpIHsKK30KK19MVF9FT0YKK10pCisKK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworZXNhYworCitkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Citkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgoraWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAke3ByZXZ9IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgcHJldj0KKyAgICAgICA7OworCisgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK200X2lmKFskMV0sIFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbWzMtOV1dKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqIHwgc3VuQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworXSkKKworY2FzZSAiICRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgorKiIgLWxjICIqKSBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKK2VzYWMKKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQoraWYgdGVzdCAtbiAiJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSI7IHRoZW4KKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GNzc9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIENGTEFHUz0kRkZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSIkbHRfc2F2ZV9DQyIKKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKKworCisjIF9MVF9MQU5HX0ZDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRkNfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbikKKworaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0ZDPXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmYyB0ZXN0IHNvdXJjZXMuCithY19leHQ9JHthY19mY19zcmNleHQtZn0KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGZjIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENDPSR7RkMtImY5NSJ9CisgIENGTEFHUz0kRkNGTEFHUworICBjb21waWxlcj0kQ0MKKyAgR0NDPSRhY19jdl9mY19jb21waWxlcl9nbnUKKworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRkNfQ09ORklHCisKKworIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgSmF2YSBDb21waWxlciBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR0NKX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1qYXZhCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK0NGTEFHUz0kR0NKRkxBR1MKK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisKKworIyBfTFRfTEFOR19HT19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBHbyBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR09fQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dPXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgR28gdGVzdCBzb3VyY2VzLgorYWNfZXh0PWdvCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBHbyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9InBhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHT0MtImdjY2dvIn0KK0NGTEFHUz0kR09GTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHbyBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR09fQ09ORklHCisKKworIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPQorQ0M9JHtSQy0id2luZHJlcyJ9CitDRkxBR1M9Citjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICA6CisgIF9MVF9DT05GSUcoJDEpCitmaQorCitHQ0M9JGx0X3NhdmVfR0NDCitBQ19MQU5HX1JFU1RPUkUKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisKKworIyBMVF9QUk9HX0dDSgorIyAtLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCisgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQorICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19HTworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HT10sCitbQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvLCkKK10pCisKKworIyBMVF9QUk9HX1JDCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCkKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sIFtdKQorCisKKyMgX0xUX0RFQ0xfRUdSRVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19GR1JFUF0pZG5sCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitfTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCitfTFRfREVDTChbXSwgW0VHUkVQXSwgWzFdLCBbQW4gRVJFIG1hdGNoZXJdKQorX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCitkbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworQUNfU1VCU1QoW0dSRVBdKQorXSkKKworCisjIF9MVF9ERUNMX09CSkRVTVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IG9iamR1bXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfT0JKRFVNUF0sCitbQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKK0FDX1NVQlNUKFtPQkpEVU1QXSkKK10pCisKKyMgX0xUX0RFQ0xfRExMVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSBETExUT09MIHZhcmlhYmxlIGlzIHNldC4KK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorQUNfU1VCU1QoW0RMTFRPT0xdKQorXSkKKworIyBfTFRfREVDTF9TRUQKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCittNF9kZWZ1bihbX0xUX0RFQ0xfU0VEXSwKK1tBQ19QUk9HX1NFRAordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorICAgIFtTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbl0pCitdKSMgX0xUX0RFQ0xfU0VECisKK200X2lmbmRlZihbQUNfUFJPR19TRURdLCBbCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK200X2RlZnVuKFtBQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorXSkKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKK0FDX1NVQlNUKFtTRURdKQorQUNfTVNHX1JFU1VMVChbJFNFRF0pCitdKSNBQ19QUk9HX1NFRAorXSkjbTRfaWZuZGVmCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQorCisKKyMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCisjIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0c10pCisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLGIvYywgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCitBQ19NU0dfUkVTVUxUKFskeHNpX3NoZWxsXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAiKz0iXSkKK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK0FDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCddKQorCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCitfTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCitfTFRfREVDTChbU1AyTkxdLCBbbHRfU1AyTkxdLCBbMV0sIFt0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzXSlkbmwKK19MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworCisKKyMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAorIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgorbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAorW2RubCB7CitzZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKKyQxICgpXAore1wKK200X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQorfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitdKQorCisKKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlcGxhY2UgZXhpc3RpbmcgcG9ydGFibGUgaW1wbGVtZW50YXRpb25zIG9mIHNldmVyYWwgc2hlbGwgZnVuY3Rpb25zIHdpdGgKKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCittNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCitbaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICAgIGVzYWNdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgICAgZXNhYworICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAorICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfQorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICAgIGVzYWNdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xlbl0sIFsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XSkKK2ZpCisKK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCisgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQorCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitlbHNlCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitmaQorCitpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCitmaQorXSkKKworIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKyMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgorbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCitbY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCitdKQordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKK1sjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworXSkKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pZG5sCitdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKZGlmZiAtLWdpdCBhL200L2xvY2subTQgYi9tNC9sb2NrLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTNjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sb2NrLm00CkBAIC0wLDAgKzEsNDIgQEAKKyMgbG9jay5tNCBzZXJpYWwgMTMgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX0xPQ0tdLAorWworICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJdKQorICBpZiB0ZXN0ICIkZ2xfdGhyZWFkc19hcGkiID0gcG9zaXg7IHRoZW4KKyAgICAjIE9TRi8xIDQuMCBhbmQgTWFjIE9TIFggMTAuMSBsYWNrIHRoZSBwdGhyZWFkX3J3bG9ja190IHR5cGUgYW5kIHRoZQorICAgICMgcHRocmVhZF9yd2xvY2tfKiBmdW5jdGlvbnMuCisgICAgQUNfQ0hFQ0tfVFlQRShbcHRocmVhZF9yd2xvY2tfdF0sCisgICAgICBbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURfUldMT0NLXSwgWzFdLAorICAgICAgICAgW0RlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBoYXMgcmVhZC93cml0ZSBsb2Nrcy5dKV0sCisgICAgICBbXSwKKyAgICAgIFsjaW5jbHVkZSA8cHRocmVhZC5oPl0pCisgICAgIyBnbGliYyBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIGFzIGVudW0sIG5vdCBhcyBhIG1hY3JvLgorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAorICAgICAgICBbWworI2lmIF9fRnJlZUJTRF9fID09IDQKK2Vycm9yICJObywgaW4gRnJlZUJTRCA0LjAgcmVjdXJzaXZlIG11dGV4ZXMgYWN0dWFsbHkgZG9uJ3Qgd29yay4iCisjZWxpZiAoZGVmaW5lZCBfX0VOVklST05NRU5UX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEX18gXAorICAgICAgICYmIF9fRU5WSVJPTk1FTlRfTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRURfXyA8IDEwNzApCitlcnJvciAiTm8sIGluIE1hYyBPUyBYIDwgMTAuNyByZWN1cnNpdmUgbXV0ZXhlcyBhY3R1YWxseSBkb24ndCB3b3JrLiIKKyNlbHNlCitpbnQgeCA9IChpbnQpUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU7CityZXR1cm4gIXg7CisjZW5kaWYKKyAgICAgICAgXV0pXSwKKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVdLCBbMV0sCisgICAgICAgICBbRGVmaW5lIGlmIHRoZSA8cHRocmVhZC5oPiBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLl0pXSkKKyAgZmkKKyAgZ2xfUFJFUkVRX0xPQ0sKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2x0aHJlYWQvbG9jay5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9MT0NLXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbTQvbHRvcHRpb25zLm00IGIvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWFjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzODQgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFsxXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKKyMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAorIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCisjIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgTFRfSU5JVCBvcHRpb25zLgorIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorW0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLAorCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisgICAgW2x0X3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkd2l0aHZhbCBpbgorICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKyAgICAqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvbTQvbHRzdWdhci5tNCBiL200L2x0c3VnYXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwMGEwNQotLS0gL2Rldi9udWxsCisrKyBiL200L2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjMgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS9tNC9sdHZlcnNpb24ubTQgYi9tNC9sdHZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhODYwMgotLS0gL2Rldi9udWxsCisrKyBiL200L2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBzZXJpYWwgMzMzNyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjJdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzMzN10pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi40LjInCittYWNyb19yZXZpc2lvbj0nMS4zMzM3JworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL200L2x0fm9ic29sZXRlLm00IGIvbTQvbHR+b2Jzb2xldGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3M2RhOQotLS0gL2Rldi9udWxsCisrKyBiL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTggQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorbTRfaWZuZGVmKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sCVtBQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0NYWENQUF0sCQlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0pXSkKK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSldKQpkaWZmIC0tZ2l0IGEvbTQvbm9leGVjc3RhY2subTQgYi9tNC9ub2V4ZWNzdGFjay5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFiNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbm9leGVjc3RhY2subTQKQEAgLTAsMCArMSw1NSBAQAorIyBub2V4ZWNzdGFjay5tNAorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sCitkbmwgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorZG5sIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK2RubCB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorZG5sIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitkbmwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK2RubCBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK2RubCBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3ICBVU0EKKworZG5sIENoZWNrcyB3aGV0aGVyIHRoZSBzdGFjayBjYW4gYmUgbWFya2VkIG5vbmV4ZWN1dGFibGUgYnkgcGFzc2luZyBhbgorZG5sIG9wdGlvbiB0byB0aGUgQy1jb21waWxlciB3aGVuIGFjdGluZyBvbiAucyBmaWxlcy4gIFJldHVybnMgdGhhdAorZG5sIG9wdGlvbiBpbiBOT0VYRUNTVEFDS19GTEFHUy4KK2RubCBUaGlzIG1hY3JvIGlzIGFkYXB0ZWQgZnJvbSBvbmUgZm91bmQgaW4gR0xJQkMtMi4zLjUuCitBQ19ERUZVTihbQ0xfQVNfTk9FWEVDU1RBQ0tdLFsKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorQUNfUkVRVUlSRShbQU1fUFJPR19BU10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBub24gZXhjdXRhYmxlIHN0YWNrIHN1cHBvcnQgaXMgcmVxdWVzdGVkXSkKK0FDX0FSR19FTkFCTEUobm9leGVjc3RhY2ssCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbm9leGVjc3RhY2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZSBub24gZXhlY3V0YWJsZSBzdGFjayBzdXBwb3J0XSksCisgICAgICAgICAgICAgIG5vZXhlY3N0YWNrX3N1cHBvcnQ9JGVuYWJsZXZhbCwgbm9leGVjc3RhY2tfc3VwcG9ydD15ZXMpCitBQ19NU0dfUkVTVUxUKCRub2V4ZWNzdGFja19zdXBwb3J0KQorCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhc3NlbWJsZXIgc3VwcG9ydHMgLS1ub2V4ZWNzdGFjayBvcHRpb25dLAorY2xfY3ZfYXNfbm9leGVjc3RhY2ssIFtkbmwKKyAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgordm9pZCBmb28oKSB7fQorRU9GCisgIGlmIEFDX1RSWV9DT01NQU5EKFske0NDfSAkQ0ZMQUdTICRDUFBGTEFHUworICAgICAgICAgICAgICAgICAgICAgLVMgLW8gY29uZnRlc3QucyBjb25mdGVzdC5jID4vZGV2L251bGxdKSBcCisgICAgICYmIGdyZXAgLm5vdGUuR05VLXN0YWNrIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCBcCisgICAgICYmIEFDX1RSWV9DT01NQU5EKFske0NDQVN9ICRDQ0FTRkxBR1MgJENQUEZMQUdTIC1XYSwtLW5vZXhlY3N0YWNrCisgICAgICAgICAgICAgICAgICAgICAgIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QucyA+L2Rldi9udWxsXSkKKyAgdGhlbgorICAgIGNsX2N2X2FzX25vZXhlY3N0YWNrPXllcworICBlbHNlCisgICAgY2xfY3ZfYXNfbm9leGVjc3RhY2s9bm8KKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKKyAgaWYgdGVzdCAiJG5vZXhlY3N0YWNrX3N1cHBvcnQiID0geWVzIC1hICIkY2xfY3ZfYXNfbm9leGVjc3RhY2siID0geWVzOyB0aGVuCisJTk9FWEVDU1RBQ0tfRkxBR1M9Ii1XYSwtLW5vZXhlY3N0YWNrIgorICBlbHNlCisgICAgICAgIE5PRVhFQ1NUQUNLX0ZMQUdTPQorICBmaQorICBBQ19TVUJTVChOT0VYRUNTVEFDS19GTEFHUykKK10pCmRpZmYgLS1naXQgYS9tNC9vbmNlb25seS5tNCBiL200L29uY2Vvbmx5Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTEzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9vbmNlb25seS5tNApAQCAtMCwwICsxLDY2IEBACisjIG9uY2Vvbmx5Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTUpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgIm9uY2Ugb25seSIgdmFyaWFudHMgb2Ygc3RhbmRhcmQgYXV0b2NvbmYgbWFjcm9zLgorZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworZG5sICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfRlVOQ1MKK2RubCAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0RFQ0xTCitkbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworZG5sIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgY2hlY2sgZm9yIGVhY2ggb2YgdGhlIGhlYWRlcnMvZnVuY3Rpb25zL2RlY2xzCitkbmwgd2lsbCBiZSBwdXQgb25seSBvbmNlIGludG8gdGhlICdjb25maWd1cmUnIGZpbGUuIEl0IGtlZXBzIHRoZSBzaXplIG9mCitkbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKK2RubCBpcyBydW4uCitkbmwgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNoZWNrcyBjYW5ub3QgYmUgY29uZGl0aW9uYWxpemVkLiBJZiB5b3Ugd3JpdGUKK2RubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorZG5sIGluc2lkZSBhbiBBQ19ERUZVTmVkIGZ1bmN0aW9uLCB0aGUgZ2xfQ0hFQ0tfSEVBREVSUyBtYWNybyBjYWxsIGV4cGFuZHMgdG8KK2RubCBlbXB0eSwgYW5kIHRoZSBjaGVjayB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgQUNfREVGVU5lZAorZG5sIGZ1bmN0aW9uLgorCitkbmwgVGhpcyBmaWxlIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTkuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorZG5sIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4gIEJ1dCBhYm91dCBBQ19DSEVDS19ERUNMU19PTkNFOiBub3RlIHRoYXQgaW4KK2RubCBhdXRvY29uZiA+PSAyLjYwIHRoZSBzeW1ib2wgc2VwYXJhdG9yIGlzIGEgY29tbWEsIHdoZXJlYXMgaGVyZSBpdCBpcworZG5sIHdoaXRlc3BhY2UuCisKK2RubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCitBQ19QUkVSRVEoMi41NCkKKworIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorIyBBQ19DSEVDS19IRUFERVJTKEhFQURFUjEgSEVBREVSMiAuLi4pLgorQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKKyAgOgorICBBQ19GT1JFQUNIKFtnbF9IRUFERVJfTkFNRV0sIFskMV0sIFsKKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCisgICAgICBBQ19DSEVDS19IRUFERVJTKGdsX0hFQURFUl9OQU1FKQorICAgIF0pCisgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpKQorICBdKQorXSkKKworIyBBQ19DSEVDS19GVU5DU19PTkNFKEZVTkMxIEZVTkMyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorQUNfREVGVU4oW0FDX0NIRUNLX0ZVTkNTX09OQ0VdLCBbCisgIDoKKyAgQUNfRk9SRUFDSChbZ2xfRlVOQ19OQU1FXSwgWyQxXSwgWworICAgIEFDX0RFRlVOKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSwgWworICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisgICAgXSkKKyAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKyAgXSkKK10pCisKKyMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKyMgQUNfQ0hFQ0tfREVDTFMoREVDTDEsIERFQ0wyLCAuLi4pLgorQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xTX09OQ0VdLCBbCisgIDoKKyAgQUNfRk9SRUFDSChbZ2xfREVDTF9OQU1FXSwgWyQxXSwgWworICAgIEFDX0RFRlVOKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSwgWworICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisgICAgXSkKKyAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKyAgXSkKK10pCmRpZmYgLS1naXQgYS9tNC9zb2NrbGVuLm00IGIvbTQvc29ja2xlbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM3NjVhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc29ja2xlbi5tNApAQCAtMCwwICsxLDUyIEBACisjIHNvY2tsZW4ubTQgc2VyaWFsIDQKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQWxiZXJ0IENoaW4sIFdpbmRvd3MgZml4ZXMgZnJvbSBTaW1vbiBKb3NlZnNzb24uCisKK2RubCBDaGVjayBmb3Igc29ja2xlbl90OiBoaXN0b3JpY2FsbHkgb24gQlNEIGl0IGlzIGFuIGludCwgYW5kIGluCitkbmwgUE9TSVggMWcgaXQgaXMgYSB0eXBlIG9mIGl0cyBvd24sIGJ1dCBzb21lIHBsYXRmb3JtcyB1c2UgZGlmZmVyZW50CitkbmwgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB0byBnZXRzb2Nrb3B0LCBnZXRwZWVybmFtZSwgZXRjLiAgU28gd2UKK2RubCBoYXZlIHRvIHRlc3QgdG8gZmluZCBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsuCisKK2RubCBPbiBtaW5ndzMyLCBzb2NrbGVuX3QgaXMgaW4gd3MydGNwaXAuaCAoJ2ludCcpLCBzbyB3ZSB0cnkgdG8gZmluZAorZG5sIGl0IHRoZXJlIGZpcnN0LiAgVGhhdCBmaWxlIGlzIGluY2x1ZGVkIGJ5IGdudWxpYidzIHNvY2tldF8uaCwgd2hpY2gKK2RubCBhbGwgdXNlcnMgb2YgdGhpcyBtb2R1bGUgc2hvdWxkIGluY2x1ZGUuICBDeWd3aW4gbXVzdCBub3QgaW5jbHVkZQorZG5sIHdzMnRjcGlwLmguCitBQ19ERUZVTihbZ2xfVFlQRV9TT0NLTEVOX1RdLAorICBbQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NZU19TT0NLRVRdKWRubAorICAgQUNfQ0hFQ0tfVFlQRShbc29ja2xlbl90XSwgLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90IGVxdWl2YWxlbnRdKQorICAgICAgQUNfQ0FDSEVfVkFMKFtnbF9jdl9nbF9jdl9zb2NrbGVuX3RfZXF1aXZdLAorCVsjIFN5c3RlbXMgaGF2ZSBlaXRoZXIgInN0cnVjdCBzb2NrYWRkciAqIiBvcgorCSAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKwkgZ2xfY3Zfc29ja2xlbl90X2VxdWl2PQorCSBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworCSAgIGZvciB0IGluIGludCBzaXplX3QgInVuc2lnbmVkIGludCIgImxvbmcgaW50IiAidW5zaWduZWQgbG9uZyBpbnQiOyBkbworCSAgICAgQUNfVFJZX0NPTVBJTEUoCisJICAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKwkJaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopO10sCisJICAgICAgIFskdCBsZW47CisJCWdldHBlZXJuYW1lICgwLCAwLCAmbGVuKTtdLAorCSAgICAgICBbZ2xfY3Zfc29ja2xlbl90X2VxdWl2PSIkdCJdKQorCSAgICAgdGVzdCAiJGdsX2N2X3NvY2tsZW5fdF9lcXVpdiIgIT0gIiIgJiYgYnJlYWsKKwkgICBkb25lCisJICAgdGVzdCAiJGdsX2N2X3NvY2tsZW5fdF9lcXVpdiIgIT0gIiIgJiYgYnJlYWsKKwkgZG9uZQorICAgICAgXSkKKyAgICAgIGlmIHRlc3QgIiRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID0gIiI7IHRoZW4KKwlBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90XSkKKyAgICAgIGZpCisgICAgICBBQ19NU0dfUkVTVUxUKFskZ2xfY3Zfc29ja2xlbl90X2VxdWl2XSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbc29ja2xlbl90XSwgWyRnbF9jdl9zb2NrbGVuX3RfZXF1aXZdLAorCVt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKV0sCisgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyAgICAgICMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgI2VsaWYgSEFWRV9XUzJUQ1BJUF9ICisgICAgICAjIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisgICAgICAjZW5kaWZdKV0pCmRpZmYgLS1naXQgYS9tNC9zeXNfc29ja2V0X2gubTQgYi9tNC9zeXNfc29ja2V0X2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlNDViNAotLS0gL2Rldi9udWxsCisrKyBiL200L3N5c19zb2NrZXRfaC5tNApAQCAtMCwwICsxLDIzIEBACisjIHN5c19zb2NrZXRfaC5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBTaW1vbiBKb3NlZnNzb24uCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1lTX1NPQ0tFVF0sCitbCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3NvY2tldC5oXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCA9IHllczsgdGhlbgorICAgIFNZU19TT0NLRVRfSD0nJworICBlbHNlCisgICAgZG5sIFdlIGNhbm5vdCB1c2UgQUNfQ0hFQ0tfSEVBREVSU19PTkNFIGhlcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlCisgICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKyAgICBkbmwgdGhhdCB0aGUgaGVhZGVycyBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIChzaW5jZSBvbgorICAgIGRubCBjeWd3aW4sIGFsbCBzb2NrZXQgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgZnJvbSBzeXMvc29ja2V0LmgpLgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmggd3MydGNwaXAuaF0pCisgICAgU1lTX1NPQ0tFVF9IPSdzeXMvc29ja2V0LmgnCisgIGZpCisgIEFDX1NVQlNUKFNZU19TT0NLRVRfSCkKK10pCmRpZmYgLS1naXQgYS9tNC90aHJlYWRsaWIubTQgYi9tNC90aHJlYWRsaWIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxNTM2NQotLS0gL2Rldi9udWxsCisrKyBiL200L3RocmVhZGxpYi5tNApAQCAtMCwwICsxLDM0OSBAQAorIyB0aHJlYWRsaWIubTQgc2VyaWFsIDEwIChnZXR0ZXh0LTAuMTguMikgbW9kaWZpZWQgYnkgd2sgMjAxNC0wMS0yNC4KK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBnbF9USFJFQURMSUIKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBUZXN0cyBmb3IgYSBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHRvIGJlIHVzZWQuCitkbmwgSWYgdGhlIGNvbmZpZ3VyZS5hYyBjb250YWlucyBhIGRlZmluaXRpb24gb2YgdGhlIGdsX1RIUkVBRExJQl9ERUZBVUxUX05PCitkbmwgKGl0IG11c3QgYmUgcGxhY2VkIGJlZm9yZSB0aGUgaW52b2NhdGlvbiBvZiBnbF9USFJFQURMSUJfRUFSTFkhKSwgdGhlbiB0aGUKK2RubCBkZWZhdWx0IGlzICdubycsIG90aGVyd2lzZSBpdCBpcyBzeXN0ZW0gZGVwZW5kZW50LiBJbiBib3RoIGNhc2VzLCB0aGUgdXNlcgorZG5sIGNhbiBjaGFuZ2UgdGhlIGNob2ljZSB0aHJvdWdoIHRoZSBvcHRpb25zIC0tZW5hYmxlLXRocmVhZHM9Y2hvaWNlIG9yCitkbmwgLS1kaXNhYmxlLXRocmVhZHMuCitkbmwgRGVmaW5lcyBhdCBtb3N0IG9uZSBvZiB0aGUgbWFjcm9zIFVTRV9QT1NJWF9USFJFQURTLCBVU0VfU09MQVJJU19USFJFQURTLAorZG5sIFVTRV9XSU5ET1dTX1RIUkVBRFMKK2RubCBTZXRzIHRoZSB2YXJpYWJsZXMgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRCB0byB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHVzZQorZG5sIGluIGEgTWFrZWZpbGUgKExJQlRIUkVBRCBmb3IgdXNlIHdpdGhvdXQgbGlidG9vbCwgTFRMSUJUSFJFQUQgZm9yIHVzZSB3aXRoCitkbmwgbGlidG9vbCkuCitkbmwgU2V0cyB0aGUgdmFyaWFibGVzIExJQk1VTFRJVEhSRUFEIGFuZCBMVExJQk1VTFRJVEhSRUFEIHNpbWlsYXJseSwgZm9yCitkbmwgcHJvZ3JhbXMgdGhhdCByZWFsbHkgbmVlZCBtdWx0aXRocmVhZCBmdW5jdGlvbmFsaXR5LiBUaGUgZGlmZmVyZW5jZQorZG5sIGJldHdlZW4gTElCVEhSRUFEIGFuZCBMSUJNVUxUSVRIUkVBRCBpcyB0aGF0IG9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHdlYWsKK2RubCBzeW1ib2xzLCB0eXBpY2FsbHkgTElCVEhSRUFEPSIiIHdoZXJlYXMgTElCTVVMVElUSFJFQUQ9Ii1scHRocmVhZCIuCitkbmwgU2V0cyBUSFJFQURMSUJfQ1BQRkxBR1MgdG8gLURfUkVFTlRSQU5UIG9yIC1EX1RIUkVBRF9TQUZFIGlmIG5lZWRlZCBmb3IKK2RubCBtdWx0aXRocmVhZC1zYWZlIHByb2dyYW1zIGFuZCBhZGRzIFRIUkVBRExJQl9DUFBGTEFHUyB0byBDUFBGTEFHUy4KKworQUNfREVGVU4oW2dsX1RIUkVBRExJQl9FQVJMWV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSkKK10pCisKK2RubCBUaGUgZ3V0cyBvZiBnbF9USFJFQURMSUJfRUFSTFkuIE5lZWRzIHRvIGJlIGV4cGFuZGVkIG9ubHkgb25jZS4KKworQUNfREVGVU4oW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSwKK1sKKyAgZG5sIE9yZGVyaW5nIGNvbnN0cmFpbnRzOiBUaGlzIG1hY3JvIG1vZGlmaWVzIENQUEZMQUdTIGluIGEgd2F5IHRoYXQKKyAgZG5sIGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXV0b2NvbmYgdGVzdHMgdGhhdCB0ZXN0IGZvciAqX3VubG9ja2VkCisgIGRubCBkZWNsYXJhdGlvbnMsIG9uIEFJWCA1IGF0IGxlYXN0LiBUaGVyZWZvcmUgaXQgbXVzdCBjb21lIGVhcmx5LgorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dKWRubAorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0FSR1BdKWRubAorCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgZG5sIF9HTlVfU09VUkNFIGlzIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zLgorICBkbmwgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIHdhcyBpbnRyb2R1Y2VkIGluIGF1dG9jb25mIDIuNjAgYW5kIG9ic29sZXRlcworICBkbmwgQUNfR05VX1NPVVJDRS4KKyAgbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgICAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSwKKyAgICBbQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pXSkKKyAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgVEhSRUFETElCX0NQUEZMQUdTPSIiCisgIG00X2lmZGVmKFtnbF9USFJFQURMSUJfREVGQVVMVF9OT10sCisgICAgW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFtnbF91c2VfdGhyZWFkc19kZWZhdWx0PW5vXSldLAorICAgIFttNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ2xfdXNlX3RocmVhZHNfZGVmYXVsdD1dKV0pCisgIEFDX0FSR19FTkFCTEUoW3RocmVhZHNdLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8d2luZG93c31dLCBbc3BlY2lmeSBtdWx0aXRocmVhZGluZyBBUEldKW00X2lmZGVmKFtnbF9USFJFQURMSUJfREVGQVVMVF9OT10sIFtdLCBbCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXRocmVhZHNdLCBbYnVpbGQgd2l0aG91dCBtdWx0aXRocmVhZCBzYWZldHldKV0pLAorICAgIFtnbF91c2VfdGhyZWFkcz0kZW5hYmxldmFsXSwKKyAgICBbaWYgdGVzdCAtbiAiJGdsX3VzZV90aHJlYWRzX2RlZmF1bHQiOyB0aGVuCisgICAgICAgZ2xfdXNlX3RocmVhZHM9IiRnbF91c2VfdGhyZWFkc19kZWZhdWx0IgorICAgICBlbHNlCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgZG5sIERpc2FibGUgbXVsdGl0aHJlYWRpbmcgYnkgZGVmYXVsdCBvbiBPU0YvMSwgYmVjYXVzZSBpdCBpbnRlcmZlcmVzCisgICAgICAgICBkbmwgd2l0aCBmb3JrKCkvZXhlYygpOiBXaGVuIG1zZ2V4ZWMgaXMgbGlua2VkIHdpdGggLWxwdGhyZWFkLCBpdHMKKyAgICAgICAgIGRubCBjaGlsZCBwcm9jZXNzIGdldHMgYW4gZW5kbGVzcyBzZWdtZW50YXRpb24gZmF1bHQgaW5zaWRlIGV4ZWN2cCgpLgorICAgICAgICAgZG5sIERpc2FibGUgbXVsdGl0aHJlYWRpbmcgYnkgZGVmYXVsdCBvbiBDeWd3aW4gMS41LngsIGJlY2F1c2UgaXQgaGFzCisgICAgICAgICBkbmwgYnVncyB0aGF0IGxlYWQgdG8gZW5kbGVzcyBsb29wcyBvciBjcmFzaGVzLiBTZWUKKyAgICAgICAgIGRubCA8aHR0cDovL2N5Z3dpbi5jb20vbWwvY3lnd2luLzIwMDktMDgvbXNnMDAyODMuaHRtbD4uCisgICAgICAgICBvc2YqKSBnbF91c2VfdGhyZWFkcz1ubyA7OworICAgICAgICAgY3lnd2luKikKKyAgICAgICAgICAgICAgIGNhc2UgYHVuYW1lIC1yYCBpbgorICAgICAgICAgICAgICAgICAxLlswLTVdLiopIGdsX3VzZV90aHJlYWRzPW5vIDs7CisgICAgICAgICAgICAgICAgICopICAgICAgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICA7OworICAgICAgICAgKikgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICBmaQorICAgIF0pCisgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgIyBGb3IgdXNpbmcgPHB0aHJlYWQuaD46CisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBvc2YqKQorICAgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLURfUkVFTlRSQU5UIHNvIHRoYXQgaXQKKyAgICAgICAgIyBncm9rcyA8cHRocmVhZC5oPi4gY2MgYWxzbyB1bmRlcnN0YW5kcyB0aGUgZmxhZyAtcHRocmVhZCwgYnV0CisgICAgICAgICMgd2UgZG9uJ3QgdXNlIGl0IGJlY2F1c2UgMS4gZ2NjLTIuOTUgZG9lc24ndCB1bmRlcnN0YW5kIC1wdGhyZWFkLAorICAgICAgICAjIDIuIHB1dHRpbmcgYSBmbGFnIGludG8gQ1BQRkxBR1MgdGhhdCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBsaW5rZXIKKyAgICAgICAgIyBjYXVzZXMgdGhlIEFDX0xJTktfSUZFTFNFIHRlc3QgYmVsb3cgdG8gc3VjY2VlZCB1bmV4cGVjdGVkbHksCisgICAgICAgICMgbGVhZGluZyB0byB3cm9uZyB2YWx1ZXMgb2YgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRC4KKyAgICAgICAgVEhSRUFETElCX0NQUEZMQUdTPSIkVEhSRUFETElCX0NQUEZMQUdTIC1EX1JFRU5UUkFOVCIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBTb21lIHN5c3RlbXMgb3B0aW1pemUgZm9yIHNpbmdsZS10aHJlYWRlZCBwcm9ncmFtcyBieSBkZWZhdWx0LCBhbmQKKyAgICAjIG5lZWQgc3BlY2lhbCBmbGFncyB0byBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAjIGRlZmluaXRpb24gb2YgJ2Vycm5vJyBpbiA8ZXJybm8uaD4uCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBhaXgqIHwgZnJlZWJzZCopCisgICAgICAgICAgIFRIUkVBRExJQl9DUFBGTEFHUz0iJFRIUkVBRExJQl9DUFBGTEFHUyAtRF9USFJFQURfU0FGRSIKKyAgICAgICAgICAgOzsKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICAgICBUSFJFQURMSUJfQ1BQRkxBR1M9IiRUSFJFQURMSUJfQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorICAgICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCB4IiRUSFJFQURMSUJfQ1BQRkxBR1MiICE9IHggOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRUSFJFQURMSUJfQ1BQRkxBR1MiCisgIGZpCitdKQorCitkbmwgVGhlIGd1dHMgb2YgZ2xfVEhSRUFETElCLiBOZWVkcyB0byBiZSBleHBhbmRlZCBvbmx5IG9uY2UuCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSkKKyAgZ2xfdGhyZWFkc19hcGk9bm9uZQorICBMSUJUSFJFQUQ9CisgIExUTElCVEhSRUFEPQorICBMSUJNVUxUSVRIUkVBRD0KKyAgTFRMSUJNVUxUSVRIUkVBRD0KKyAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiAhPSBubzsgdGhlbgorICAgIGRubCBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBhbmQgbGlua2VyIHN1cHBvcnQgd2VhayBkZWNsYXJhdGlvbnMuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW1wb3J0ZWQgc3ltYm9scyBjYW4gYmUgZGVjbGFyZWQgd2Vha10sCisgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrXSwKKyAgICAgIFtnbF9jdl9oYXZlX3dlYWs9bm8KKyAgICAgICBkbmwgRmlyc3QsIHRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgYWNjZXB0cyBpdCBzeW50YWN0aWNhbGx5LgorICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbZXh0ZXJuIHZvaWQgeHl6enkgKCk7CisjcHJhZ21hIHdlYWsgeHl6enldXSwKKyAgICAgICAgICAgIFtbeHl6enkoKTtdXSldLAorICAgICAgICAgW2dsX2N2X2hhdmVfd2Vhaz1tYXliZV0pCisgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV93ZWFrID0gbWF5YmU7IHRoZW4KKyAgICAgICAgIGRubCBTZWNvbmQsIHRlc3Qgd2hldGhlciBpdCBhY3R1YWxseSB3b3Jrcy4gT24gQ3lnd2luIDEuNy4yLCB3aXRoCisgICAgICAgICBkbmwgZ2NjIDQuMywgc3ltYm9scyBkZWNsYXJlZCB3ZWFrIGFsd2F5cyBldmFsdWF0ZSB0byB0aGUgYWRkcmVzcyAwLgorICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNwcmFnbWEgd2VhayBmcHV0cworaW50IG1haW4gKCkKK3sKKyAgcmV0dXJuIChmcHV0cyA9PSBOVUxMKTsKK31dXSldLAorICAgICAgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrPXllc10sCisgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9bm9dLAorICAgICAgICAgICBbZG5sIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCBhc3N1bWUgdGhhdCBvbmx5IEVMRiBwbGF0Zm9ybXMgc3VwcG9ydAorICAgICAgICAgICAgZG5sIHdlYWsgc3ltYm9scy4KKyAgICAgICAgICAgIEFDX0VHUkVQX0NQUChbRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1hdF0sCisgICAgICAgICAgICAgIFsjaWZkZWYgX19FTEZfXworICAgICAgICAgICAgICAgRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1hdAorICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIHllcyJdLAorICAgICAgICAgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrPSJndWVzc2luZyBubyJdKQorICAgICAgICAgICBdKQorICAgICAgIGZpCisgICAgICBdKQorICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLXB0aHJlYWQgb3IgLURfUkVFTlRSQU5UIHNvIHRoYXQKKyAgICAgICMgaXQgZ3Jva3MgPHB0aHJlYWQuaD4uIEl0J3MgYWRkZWQgYWJvdmUsIGluIGdsX1RIUkVBRExJQl9FQVJMWV9CT0RZLgorICAgICAgQUNfQ0hFQ0tfSEVBREVSKFtwdGhyZWFkLmhdLAorICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkX2g9eWVzXSwgW2dsX2hhdmVfcHRocmVhZF9oPW5vXSkKKyAgICAgIGlmIHRlc3QgIiRnbF9oYXZlX3B0aHJlYWRfaCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB0ZXN0czoKKyAgICAgICAgIyAgIC1scHRocmVhZHMgKEZTVSB0aHJlYWRzLCBQQ3RocmVhZHMpCisgICAgICAgICMgICAtbGd0aHJlYWRzCisgICAgICAgIGdsX2hhdmVfcHRocmVhZD0KKyAgICAgICAgIyBUZXN0IHdoZXRoZXIgYm90aCBwdGhyZWFkX211dGV4X2xvY2sgYW5kIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgZXhpc3QKKyAgICAgICAgIyBpbiBsaWJjLiBJUklYIDYuNSBoYXMgdGhlIGZpcnN0IG9uZSBpbiBib3RoIGxpYmMgYW5kIGxpYnB0aHJlYWQsIGJ1dAorICAgICAgICAjIHRoZSBzZWNvbmQgb25lIG9ubHkgaW4gbGlicHRocmVhZCwgYW5kIGxvY2suYyBuZWVkcyBpdC4KKyAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCisgICAgICAgICAgICAgW1twdGhyZWFkX211dGV4X2xvY2soKHB0aHJlYWRfbXV0ZXhfdCopMCk7CisgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KChwdGhyZWFkX211dGV4YXR0cl90KikwKTtdXSldLAorICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzXSkKKyAgICAgICAgIyBUZXN0IGZvciBsaWJwdGhyZWFkIGJ5IGxvb2tpbmcgZm9yIHB0aHJlYWRfa2lsbC4gKE5vdCBwdGhyZWFkX3NlbGYsCisgICAgICAgICMgc2luY2UgaXQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE9TRi8xLikKKyAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgICAgICAjIFRoZSBwcm9ncmFtIGxpbmtzIGZpbmUgd2l0aG91dCBsaWJwdGhyZWFkLiBCdXQgaXQgbWF5IGFjdHVhbGx5CisgICAgICAgICAgIyBuZWVkIHRvIGxpbmsgd2l0aCBsaWJwdGhyZWFkIGluIG9yZGVyIHRvIGNyZWF0ZSBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAgICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2tpbGxdLAorICAgICAgICAgICAgW0xJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1VTFRJVEhSRUFEPS1scHRocmVhZAorICAgICAgICAgICAgICMgT24gU29sYXJpcyBhbmQgSFAtVVgsIG1vc3QgcHRocmVhZCBmdW5jdGlvbnMgZXhpc3QgYWxzbyBpbiBsaWJjLgorICAgICAgICAgICAgICMgVGhlcmVmb3JlIHB0aHJlYWRfaW5fdXNlKCkgbmVlZHMgdG8gYWN0dWFsbHkgdHJ5IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgIyB0aHJlYWQ6IHB0aHJlYWRfY3JlYXRlIGZyb20gbGliYyB3aWxsIGZhaWwsIHdoZXJlYXMKKyAgICAgICAgICAgICAjIHB0aHJlYWRfY3JlYXRlIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgdGhyZWFkLgorICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgc29sYXJpcyogfCBocHV4KikKKyAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRF0sIFsxXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBwdGhyZWFkX2luX3VzZSgpIGRldGVjdGlvbiBpcyBoYXJkLl0pCisgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgU29tZSBsaWJyYXJ5IGlzIG5lZWRlZC4gVHJ5IGxpYnB0aHJlYWQgYW5kIGxpYmNfci4KKyAgICAgICAgICBBQ19DSEVDS19MSUIoW3B0aHJlYWRdLCBbcHRocmVhZF9raWxsXSwKKyAgICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzCisgICAgICAgICAgICAgTElCVEhSRUFEPS1scHRocmVhZCBMVExJQlRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWRdKQorICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgICAjIEZvciBGcmVlQlNEIDQuCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoW2Nfcl0sIFtwdGhyZWFkX2tpbGxdLAorICAgICAgICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkPXllcworICAgICAgICAgICAgICAgTElCVEhSRUFEPS1sY19yIExUTElCVEhSRUFEPS1sY19yCisgICAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbGNfciBMVExJQk1VTFRJVEhSRUFEPS1sY19yXSkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXBvc2l4CisgICAgICAgICAgQUNfREVGSU5FKFtVU0VfUE9TSVhfVEhSRUFEU10sIFsxXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkTElCTVVMVElUSFJFQUQiIHx8IHRlc3QgLW4gIiRMVExJQk1VTFRJVEhSRUFEIjsgdGhlbgorICAgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QT1NJWF9USFJFQURTX1dFQUtdLCBbMV0sCisgICAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlIHdlYWsuXSkKKyAgICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gc29sYXJpczsgdGhlbgorICAgICAgICBnbF9oYXZlX3NvbGFyaXN0aHJlYWQ9CisgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sdGhyZWFkIgorICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjaW5jbHVkZSA8c3luY2guaD4KKyAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICBbW3Rocl9zZWxmKCk7XV0pXSwKKyAgICAgICAgICBbZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPXllc10pCisgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3NvbGFyaXN0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9c29sYXJpcworICAgICAgICAgIExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExUTElCVEhSRUFEPS1sdGhyZWFkCisgICAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCisgICAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorICAgICAgICAgIEFDX0RFRklORShbVVNFX1NPTEFSSVNfVEhSRUFEU10sIFsxXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9TT0xBUklTX1RIUkVBRFNfV0VBS10sIFsxXSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBvbGQgU29sYXJpcyBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlIHdlYWsuXSkKKyAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgIExUTElCVEhSRUFEPQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgIGNhc2UgIiRnbF91c2VfdGhyZWFkcyIgaW4KKyAgICAgICAgeWVzIHwgd2luZG93cyB8IHdpbjMyKSAjIFRoZSAnd2luMzInIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgICAgICAgIGlmIHsgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICAgIG1pbmd3KikgdHJ1ZTs7CisgICAgICAgICAgICAgICAgICopIGZhbHNlOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICB9OyB0aGVuCisgICAgICAgICAgICBnbF90aHJlYWRzX2FwaT13aW5kb3dzCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9XSU5ET1dTX1RIUkVBRFNdLCBbMV0sCisgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIG5hdGl2ZSBXaW5kb3dzIG11bHRpdGhyZWFkaW5nIEFQSSBjYW4gYmUgdXNlZC5dKQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBtdWx0aXRocmVhZCBBUEkgdG8gdXNlXSkKKyAgQUNfTVNHX1JFU1VMVChbJGdsX3RocmVhZHNfYXBpXSkKKyAgQUNfU1VCU1QoW0xJQlRIUkVBRF0pCisgIEFDX1NVQlNUKFtMVExJQlRIUkVBRF0pCisgIEFDX1NVQlNUKFtMSUJNVUxUSVRIUkVBRF0pCisgIEFDX1NVQlNUKFtMVExJQk1VTFRJVEhSRUFEXSkKK10pCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJdLAorWworICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJfRUFSTFldKQorICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJfQk9EWV0pCitdKQorCisKK2RubCBnbF9ESVNBQkxFX1RIUkVBRFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXRzIHRoZSBnbF9USFJFQURMSUIgZGVmYXVsdCBzbyB0aGF0IHRocmVhZHMgYXJlIG5vdCB1c2VkIGJ5IGRlZmF1bHQuCitkbmwgVGhlIHVzZXIgY2FuIHN0aWxsIG92ZXJyaWRlIGl0IGF0IGluc3RhbGxhdGlvbiB0aW1lLCBieSB1c2luZyB0aGUKK2RubCBjb25maWd1cmUgb3B0aW9uICctLWVuYWJsZS10aHJlYWRzJy4KKworQUNfREVGVU4oW2dsX0RJU0FCTEVfVEhSRUFEU10sIFsKKyAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sIFtnbF91c2VfdGhyZWFkc19kZWZhdWx0PW5vXSkKK10pCisKKworZG5sIFN1cnZleSBvZiBwbGF0Zm9ybXM6CitkbmwKK2RubCBQbGF0Zm9ybSAgICAgICAgICAgQXZhaWxhYmxlICBDb21waWxlciAgICBTdXBwb3J0cyAgIHRlc3QtbG9jaworZG5sICAgICAgICAgICAgICAgICAgICBmbGF2b3VycyAgIG9wdGlvbiAgICAgIHdlYWsgICAgICAgcmVzdWx0CitkbmwgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLSAgLS0tLS0tLS0tICAgLS0tLS0tLS0gICAtLS0tLS0tLS0KK2RubCBMaW51eCAyLjQvZ2xpYmMgICAgcG9zaXggICAgICAtbHB0aHJlYWQgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBHTlUgSHVyZC9nbGliYyAgICAgcG9zaXgKK2RubAorZG5sIEZyZWVCU0QgNS4zICAgICAgICBwb3NpeCAgICAgIC1sY19yICAgICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgLWxrc2UgPyAgICAgICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAtbHB0aHJlYWQgPyAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sdGhyICAgICAgICAgICBZCitkbmwKK2RubCBGcmVlQlNEIDUuMiAgICAgICAgcG9zaXggICAgICAtbGNfciAgICAgICAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sa3NlICAgICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgLWx0aHIgICAgICAgICAgIFkKK2RubAorZG5sIEZyZWVCU0QgNC4wLDQuMTAgICBwb3NpeCAgICAgIC1sY19yICAgICAgICAgICBZICAgICAgT0sKK2RubAorZG5sIE5ldEJTRCAxLjYgICAgICAgICAtLQorZG5sCitkbmwgT3BlbkJTRCAzLjQgICAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSworZG5sCitkbmwgTWFjIE9TIFggMTAuWzEyM10gIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSworZG5sCitkbmwgU29sYXJpcyA3LDgsOSAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBTb2wgNyw4OiAwLjA7IFNvbCA5OiBPSworZG5sICAgICAgICAgICAgICAgICAgICBzb2xhcmlzICAgIC1sdGhyZWFkICAgICAgICBZICAgICAgU29sIDcsODogMC4wOyBTb2wgOTogT0sKK2RubAorZG5sIEhQLVVYIDExICAgICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBOIChjYykgT0sKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSAoZ2NjKQorZG5sCitkbmwgSVJJWCA2LjUgICAgICAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICAwLjUKK2RubAorZG5sIEFJWCA0LjMsNS4xICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBOICAgICAgQUlYIDQ6IDAuNTsgQUlYIDU6IE9LCitkbmwKK2RubCBPU0YvMSA0LjAsNS4xICAgICAgcG9zaXggICAgICAtcHRocmVhZCAoY2MpICAgTiAgICAgIE9LCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWxwdGhyZWFkIChnY2MpIFkKK2RubAorZG5sIEN5Z3dpbiAgICAgICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIEFueSBvZiB0aGUgYWJvdmUgICBwdGggICAgICAgIC1scHRoICAgICAgICAgICAgICAgICAgMC4wCitkbmwKK2RubCBNaW5ndyAgICAgICAgICAgICAgd2luZG93cyAgICAgICAgICAgICAgICAgICAgTiAgICAgIE9LCitkbmwKK2RubCBCZU9TIDUgICAgICAgICAgICAgLS0KK2RubAorZG5sIFRoZSB0ZXN0LWxvY2sgcmVzdWx0IHNob3dzIHdoYXQgaGFwcGVucyBpZiBpbiB0ZXN0LWxvY2suYyBFWFBMSUNJVF9ZSUVMRCBpcworZG5sIHR1cm5lZCBvZmY6CitkbmwgICBPSyBpZiBhbGwgdGhyZWUgdGVzdHMgdGVybWluYXRlIE9LLAorZG5sICAgMC41IGlmIHRoZSBmaXJzdCB0ZXN0IHRlcm1pbmF0ZXMgT0sgYnV0IHRoZSBzZWNvbmQgb25lIGxvb3BzIGVuZGxlc3NseSwKK2RubCAgIDAuMCBpZiB0aGUgZmlyc3QgdGVzdCBhbHJlYWR5IGxvb3BzIGVuZGxlc3NseS4KZGlmZiAtLWdpdCBhL21raW5zdGFsbGRpcnMgYi9ta2luc3RhbGxkaXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmN2UxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9ta2luc3RhbGxkaXJzCkBAIC0wLDAgKzEsMTYxIEBACisjISAvYmluL3NoCisjIG1raW5zdGFsbGRpcnMgLS0tIG1ha2UgZGlyZWN0b3J5IGhpZXJhcmNoeQorCitzY3JpcHR2ZXJzaW9uPTIwMDYtMDUtMTEuMTkKKworIyBPcmlnaW5hbCBhdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKyMgQ3JlYXRlZDogMTk5My0wNS0xNgorIyBQdWJsaWMgZG9tYWluLgorIworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCitlcnJzdGF0dXM9MAorZGlybW9kZT0KKwordXNhZ2U9IlwKK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy0tdmVyc2lvbl0gWy1tIE1PREVdIERJUiAuLi4KKworQ3JlYXRlIGVhY2ggZGlyZWN0b3J5IERJUiAod2l0aCBtb2RlIE1PREUsIGlmIHNwZWNpZmllZCksIGluY2x1ZGluZyBhbGwKK2xlYWRpbmcgZmlsZSBuYW1lIGNvbXBvbmVudHMuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorICAgICAgZWNobyAiJHVzYWdlIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworICAgICAgc2hpZnQKKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZGlybW9kZT0kMQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS12ZXJzaW9uKQorICAgICAgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIG9wdGlvbgorICAgICAgZWNobyAiJHVzYWdlIiAxPiYyCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3Qgbm9uLW9wdCBhcmcKKyAgICAgIGJyZWFrCisgICAgICA7OworICBlc2FjCitkb25lCisKK2ZvciBmaWxlCitkbworICBpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKyAgICBzaGlmdAorICBlbHNlCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKKworY2FzZSAkIyBpbgorICAwKSBleGl0IDAgOzsKK2VzYWMKKworIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisjIG1rZGlyIC1wIGEvYyBhdCB0aGUgc2FtZSB0aW1lLCBib3RoIHdpbGwgZGV0ZWN0IHRoYXQgYSBpcyBtaXNzaW5nLAorIyBvbmUgd2lsbCBjcmVhdGUgYSwgdGhlbiB0aGUgb3RoZXIgd2lsbCB0cnkgdG8gY3JlYXRlIGEgYW5kIGRpZSB3aXRoCisjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisjIGZyb20gYSBwYXJhbGxlbCBtYWtlLiAgV2UgdXNlIC0tdmVyc2lvbiBpbiB0aGUgcHJvYmUgdG8gcmVzdHJpY3QKKyMgb3Vyc2VsdmVzIHRvIEdOVSBta2Rpciwgd2hpY2ggaXMgdGhyZWFkLXNhZmUuCitjYXNlICRkaXJtb2RlIGluCisgICcnKQorICAgIGlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKKyAgICAgICMgZXhpc3RzLgorICAgICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgICBmaQorICAgIDs7CisgICopCisgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1tICRkaXJtb2RlIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIENsZWFuIHVwIGFmdGVyIE5leHRTdGVwIGFuZCBPcGVuU3RlcCBta2Rpci4KKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisgICAgICBkbworICAgICAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgICAgICBkb25lCisgICAgZmkKKyAgICA7OworZXNhYworCitmb3IgZmlsZQorZG8KKyAgY2FzZSAkZmlsZSBpbgorICAgIC8qKSBwYXRoY29tcD0vIDs7CisgICAgKikgIHBhdGhjb21wPSA7OworICBlc2FjCisgIG9JRlM9JElGUworICBJRlM9LworICBzZXQgZm5vcmQgJGZpbGUKKyAgc2hpZnQKKyAgSUZTPSRvSUZTCisKKyAgZm9yIGQKKyAgZG8KKyAgICB0ZXN0ICJ4JGQiID0geCAmJiBjb250aW51ZQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wJGQKKyAgICBjYXNlICRwYXRoY29tcCBpbgorICAgICAgLSopIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgIG1rZGlyICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisJZXJyc3RhdHVzPSRsYXN0ZXJyCisgICAgICBlbHNlCisJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKwkgIGxhc3RlcnI9CisJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworCSAgaWYgdGVzdCAhIC16ICIkbGFzdGVyciI7IHRoZW4KKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisJICBmaQorCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAvCisgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL21waS9DaGFuZ2VMb2ctMjAxMSBiL21waS9DaGFuZ2VMb2ctMjAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA3ODcyCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL0NoYW5nZUxvZy0yMDExCkBAIC0wLDAgKzEsODMxIEBACisyMDExLTEyLTAxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJTkI6IENoYW5nZUxvZyBmaWxlcyBhcmUgbm8gbG9uZ2VyIG1hbnVhbGx5IG1haW50YWluZWQuICBTdGFydGluZworCW9uIERlY2VtYmVyIDFzdCwgMjAxMSB3ZSBwdXQgY2hhbmdlIGluZm9ybWF0aW9uIG9ubHkgaW4gdGhlIEdJVAorCWNvbW1pdCBsb2csIGFuZCBnZW5lcmF0ZSBhIHRvcC1sZXZlbCBDaGFuZ2VMb2cgZmlsZSBmcm9tIGxvZ3MgYXQKKwkibWFrZSBkaXN0Ii4gIFNlZSBkb2MvSEFDS0lORyBmb3IgZGV0YWlscy4KKworMjAxMS0wNy0wNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbG9uZ2xvbmcuaCAoYWRkX3NzYWFhYSkgW19fYXJtX19dOiBEbyBubyB1c2UgYXNtIGlmIHRodW1iIGNvZGUKKwlnZW5lcmF0aW9uIGlzIGVuYWJsZWQuICBUaGlzIGlzIGJ1ZyMxMjAyLiAgUmVwb3J0ZWQgZm9yIGdwZyAxLjQuCisKKzIwMTEtMDMtMjggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IFJlbW92ZSB1bnVzZWQgdmFyIFJTRUMuCisKKzIwMTEtMDItMDEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1jbXAuYyAoZ2NyeV9tcGlfY21wKTogQWxsb3cgY29tcGFyaW5nIG9mIG9wYXF1ZSBNUElzLgorCisyMDEwLTA0LTEyICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3aykKKworCVNwZWxsaW5nIGZpeGVzLgorCisyMDEwLTAyLTIyICBBdXJlbGllbiBKYXJubyA8YXVyZWwzMkBkZWJpYW4ub3JnPiAgKHdrKQorCisJKiBsb25nbG9uZy5oICh1bXVsX3BwbW0pIDxtaXBzPiBbX19HTlVDX18gPj0gNC40XTogUGF0Y2ggYWNjb3JkaW5nCisJdG8gcmVjb21tZW5kZWQgZ2NjIDQuNCBjaGFuZ2VzLgorCisyMDA5LTEyLTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWcubGlua3M6IFJlbW92ZSBhc20gbW9kdWxlcyBmb3IgYWxsIHNwYXJjNjQuICBUaGlzIGlzCisJZGViaWFuIzU2MDAyOC4KKworMjAwOS0wNS0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpY29kZXIuYyAobXBpX3JlYWRfZnJvbV9idWZmZXIpOiBBbGxvdyB6ZXJvLXNpemVkIE1QSXMgKGkuZSBhCisJemVybykuCisKKzIwMDktMDItMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waXV0aWwuYzogUmVtb3ZlIG1lbW9yeS5oLgorCisyMDA4LTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtcGljb2Rlci5jIChtcGlfcmVhZF9mcm9tX2J1ZmZlcik6IERvIG5vdCBiYWlsIG91dCBpZiB0aGUgbXBpIGlzCisJbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlciAocG90ZW50aWFsIHByb2JsZW0pLiAgRG8gbm90IHByaW50IGVycm9yCisJbWVzc2FnZXMuCisJKG1waV9mcm9tc3RyKTogUmV0dXJuIGFuIGVycm9yIGluc3RlYWQgb2YgaGl0dGluZyBhbiBhc3NlcnQuCisJKGdjcnlfbXBpX3NjYW4pIDxQR1A+OiBGaXggcG90ZW50aWFsIGRvdWJsZSBmcmVlIHByb2JsZW0uCisJKGdjcnlfbXBpX3NjYW4pIDxIRVg+OiBGaXggcG90ZW50aWFsIG1lbW9yeSBsZWFrLgorCShkb19nZXRfYnVmZmVyKTogUmV0dXJuIE5VTEwgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKwkoZ2NyeV9tcGlfcHJpbnQpOiBDaGVjayByZXN1bHQgb2YgZG9fZ2V0X2J1ZmZlci4KKwkoZ2NyeV9tcGlfYXByaW50KTogUmV0dXJuIGVycm9yIG9uIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKworCSogbXBpY29kZXIuYzogUmUtaW5kZW50LgorCisyMDA4LTEyLTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtcGktcG93LmMgKGdjcnlfbXBpX3Bvd20pOiBGaXggbGFzdCBjaGFuZ2UuICBBc3NlcnRzIGFyZSByZWFsbHkKKwl1c2VmdWwhCisKKzIwMDgtMTItMDIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IFJlLWluZGVudC4KKwkoZ2NyeV9tcGlfcG93bSk6IFNpbXBsaWZpZWQgYWxsb2NhdGlvbiBvZiB0aGUgcmVzdWx0IHRvIGZpeCBhCisJZG91YmxlIGZyZWUgYnVnLiAgVGhpcyBpcyBidWcjOTc3LiAgUmVwb3J0ZWQgYnkgSGFha29uIFJpbmdiZXJnLgorCisyMDA4LTA4LTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtcGktYml0LmMgKGdjcnlfbXBpX2xzaGlmdCk6IEFjdHVhbGx5IGltcGxlbWVudC4KKworMjAwOC0wOC0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpLWJpdC5jIChnY3J5X21waV9sc2hpZnQpOiBOZXcuCisKKzIwMDctMTAtMzEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1tb2QuYyAoZ2NyeV9tcGlfbW9kKTogUmVtb3ZlCisJKiBtcGktaW52LmMgKF9nY3J5X21waV9pbnZtKTogUmVtb3ZlIF8gcHJlZml4LgorCSogbXBpdXRpbC5jIChfZ2NyeV9tcGlfc3dhcCk6IFJlbW92ZS4KKwkoX2djcnlfbXBpX25ldyk6IFJlbW92ZS4KKwkoX2djcnlfbXBpX3NuZXcpOiBSZW1vdmUuCisJKGdjcnlfbXBpX2ludm0pOiBSZW1vdmUuCisJKGdjcnlfbXBpX2NvcHkpOiBSZW1vdmUgYW5kIHJlbmFtZSBfdmVyc2lvbiB0byB0aGlzLgorCShnY3J5X21waV9zZXQsIGdjcnlfbXBpX3NldF91aSk6IE1lcmdlIHdpdGggXyB2ZXJzaW9uLgorCSogbXBpLWludi5jIChnY3J5X21waV9pbnZtKTogUmVtb3ZlIF8gcHJlZml4IGFuZCByZXR1cm4gMS4KKwkqIG1waS1tdWwuYyAoZ2NyeV9tcGlfbXVsXzJleHApOiBSZW1vdmUgYW5kIHJlbmFtZSBfIHZlcnNpb24gdG8gdGhpcy4KKworMjAwNy0xMC0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlnLmxpbmtzOiBObyBDYW5kYWRpYW4gQ3Jvc3MgaGVyZSwgdGh1cyB1c2UgJGhvc3QgaW5zdGVhZCBvZgorCSR0YXJnZXQuCisKKzIwMDctMTAtMjYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZy5saW5rcyAobXBpX29wdGlvbmFsX21vZHVsZXMpOiBTcGVjaWFsIHJ1bGVzIGZvciBBcHBsZQorCURhcndpbiBvbiBpYTMyIGZyb20gR3JlZ29yIFJpZXBsLgorCisyMDA3LTA1LTA5ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGNvbmZpZy5saW5rczogUmVuYW1lIGFzc2VtYmxlciBmaWxlIGxpbmtzIGJ5IHN1ZmZpeGluZyAiLWFzbSIuCisJKiBNYWtlZmlsZS5hbSAoQ0NBU0NPTVBJTEUsIExUQ0NBU0NPTVBJTEUsIENMRUFORklMRVMsCisJbGlibXBpX2xhX0xJQkFERCwgbGlibXBpX2xhX0RFUEVOREVOQ0lFUywgU1VGRklYRVMsIC5TLm8sIC5TLm9iaiwKKwkuUy5sbyk6IFJlbW92ZWQgdmFyaWFibGVzIGFuZCB0YXJnZXRzLgorCShtcGloX2FkZDEsIG1waWhfc3ViMSwgbXBpaF9tdWwxLCBtcGloX211bDIsIG1waWhfbXVsMywKKwltcGloX2xzaGlmdCwgbXBpaF9yc2hpZnQsIG1waWhfdWRpdiwgbXBpaF91ZGl2X3Fybm5kLAorCW5vZGlzdF9saWJtcGlfbGFfU09VUkNFUyk6IE5ldyB2YXJpYWJsZXMuCisJKERJU1RDTEVBTkZJTEVTKTogUmVuYW1lIGFzc2VtYmxlciBmaWxlIGxpbmtzIGJ5IHN1ZmZpeGluZyAiLWFzbSIuCisJQWRkIHZhcmlhbnRzIGZvciBDIGZpbGUgbGlua3MuCisKKzIwMDctMDUtMDQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNvbmZpZy5saW5rcyAocGF0aCk6IEFsbG93dGhlIHN1ZSBvZiBjb2xvbnMgYXMgZGVsaW1pdGVycy4KKworMjAwNy0wNS0wMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcGVudGl1bTQvZGlzdGZpbGVzOiBGaXhlZC4KKworMjAwNy0wNC0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlnLmxpbmtzOiBDcmVhdGUgYSBmaWxlIG1vZC1zb3VyY2UtaW5mby5oLgorCSogTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogQWRkIHRoYXQgZmlsZS4KKwkqIG1waXV0aWwuYyAoX2djcnlfbXBpX2dldF9od19jb25maWcpOiBOZXcuCisKKzIwMDctMDQtMjggIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogY29uZmlnLmxpbmtzOiBBZGQgYWRkaXRpb25hbCBhc3NlbWJsZXIgc2VhcmNoIGRpcmVjdG9yaWVzLgorCisyMDA3LTAzLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBlYy5jOiBOZXcuCisKKzIwMDctMDMtMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1iaXQuYyAoX2djcnlfbXBpX2xzaGlmdF9saW1icyk6IEFzc2lnbiBBUCBhZnRlciB0aGUgcmVzaXplLgorCisJKiBtcGktZGl2LmMgKGdjcnlfbXBpX21vZCwgX2djcnlfbXBpX21vZCk6IE1vdmVkIHRvIC4uCisJKiBtcGktbW9kLmM6IC4uIG5ldyBmaWxlLgorCShfZ2NyeV9tcGlfYmFycmV0dF9pbml0LCBfZ2NyeV9tcGlfYmFycmV0dF9mcmVlKTogTmV3LgorCShfZ2NyeV9tcGlfbW9kX2JhcnJldHQpOiBOZXcuCisJKF9nY3J5X21waV9tdWxfYmFycmV0dCk6IE5ldy4KKworMjAwNy0wMy0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpLWRpdi5jIChfZ2NyeV9tcGlfbW9kKTogTmV3LgorCSogbXBpdXRpbC5jIChfZ2NyeV9tcGlfbmV3LCBfZ2NyeV9tcGlfc25ldyk6IE5ldy4KKworMjAwNy0wMy0xMyAgV2VybmVyIERpdHRtYW5uIDxXZXJuZXIuRGl0dG1hbm5AdC1vbmxpbmUuZGU+ICAod2spCisKKwkqIGFtZDY0L21waWgtYWRkMS5TLCBhbWQ2NC9tcGloLWFkZDEuUywgYW1kNjQvbXBpaC1sc2hpZnQuUworCSogYW1kNjQvbXBpaC1tdWwxLlMsIGFtZDY0L21waWgtbXVsMi5TLCBhbWQ2NC9tcGloLW11bDMuUworCSogYW1kNjQvbXBpaC1yc2hpZnQuUywgYW1kNjQvbXBpaC1zdWIxLlM6IE5ldy4KKwkqIGNvbmZpZy5saW5rczogIEFkZCBjYXNlIGZvciB4ODZfNjQuCisKKzIwMDctMDItMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IFJlbW92ZSB1bnVzZWQgdmFyIEVTSUdOLgorCisJKiBtcGl1dGlsLmMgKGdjcnlfbXBpX2dldF9mbGFnKTogTGV0IGl0IHJldHVybiBhIHZhbHVlIHRvIHNpbGVudAorCU1JUFNwcm8gY2Mgd2FybmluZy4KKworMjAwNy0wMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpY29kZXIuYyAoX2djcnlfbXBpX3NldF9idWZmZXIpOiBNYWRlIEJVRkZFUiBhIHZvaWQqLgorCisyMDA2LTExLTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoLlMubyk6IENoZWNrIGZvciBzcmNkaXIgYWxzbyBpbiBpbiBDUFAgcGFzcy4KKwkoSU5DTFVERVMpOiBSZW1vdmVkLgorCShBTV9DUFBGTEFHUywgQU1fQ0ZMQUdTKTogTmV3LCBtb2RpZmllZC4gTWVyZ2VkIHdpdGggTW9yaXR6JworCWNoYW5nZXMuCisKKzIwMDYtMTEtMDUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkZWQgLUkkKHRvcF9idWlsZGRpcikvc3JjIHNvIHRoYXQgdGhlCisJbmV3IGdjcnlwdC5oIGlzIHVzZWQsIG5vdCB0aGUgb25lIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorCisyMDA2LTEwLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjb25maWcubGlua3MgKG1waV9vcHRpb25hbF9tb2R1bGVzKTogTWFrZSBzdXJlIHRoYXQgcG93ZXJwYzY0IGlzCisJbWF0Y2hlZCBiZWZvcmUgYSBnZW5lcmljIHBvd2VycGMuICBSZXBvcnRlZCBieSBBbmRyZWFzIE1ldHpsZXIuCisJU2hvdWxkIGZpeCBEZWJpYW4gYnVnIDI4NDYwOS4KKworMjAwNi0wOC0yNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpLWJpdC5jIChnY3J5X21waV9yc2hpZnQpOiBEb24ndCBzaGlmdCBpZiBOID09IDAgYnV0IGRvIGEKKwlwbGFpbiBjb3B5LgorCisyMDA2LTA4LTA0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtcGktYml0LmMgKGdjcnlfbXBpX3JzaGlmdCk6IFJld3JpdHRlbiB0byByZW1vdmUgdGhlIGxpbWl0YXRpb24KKwlvbiBOICh3aGljaCB1c2VkIHRvIGJlIGxlc3MgdGhhbiBCSVRTX1BFUl9NUElfTElNQikuCisKKzIwMDYtMDgtMDMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waS1iaXQuYyAoZ2NyeV9tcGlfc2V0X2JpdCwgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQpOiBGaXhlZAorCWFsbG9jYXRpb24uICBSZXBvcnRlZCBieSBicGdjcnlwdCBhdCBpdGFwYXJpY2Eub3JnLgorCSogbXBpdXRpbC5jIChfZ2NyeV9tcGlfcmVzaXplKTogQ2xlYXIgdGhlIG5ldyBwYXJ0IG9mIHRoZSByZXNpemVkCisJbGltYiBzcGFjZS4KKworMjAwNi0wNy0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbXBpdXRpbC5jIChnY3J5X21waV9yYW5kb21pemUpOiBDaGFuZ2VkIFAgdG8gdW5zaWduZWQgY2hhciouCisKKwkqIG1waWNvZGVyLmMgKGdjcnlfbXBpX3NjYW4pOiBDaGFuZ2VkIGFyZyBCVUZGRVIgdG8gdm9pZCouCisJKG1waV9yZWFkX2Zyb21fYnVmZmVyKTogTWFkZSBCVUZGRVIgYXJnIGNvbnN0LgorCShnY3J5X21waV9zY2FuKTogUmVtb3ZlZCBub3cgbmVlZGxlc3MgY2FzdC4gQWRkIGNhc3QgZm9yIGFyZyB0bworCW1waV9mcm9tc3RyLgorCShnY3J5X21waV9wcmludCk6IE1hZGUgVE1QIHVuc2lnbmVkLgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0NBU0ZMQUdTKTogTmV3LgorCisyMDA1LTEwLTA5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbXBpLWNtcC5jIChnY3J5X21waV9jbXBfdWkpOiBSZXdyaXR0ZW47IGNvcnJlY3RseSBoYW5kbGUgY2FzZSBvZgorCXplcm8gbGltYnMgaW4gVS4KKworMjAwNS0wNC0yNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIG1waXV0aWwuYyAoZ2NyeV9tcGlfcmFuZG9taXplKTogU3RvcmUgcmFuZG9tIGRhdGEgaW4gc2VjdXJlCisJbWVtb3J5IGlmIHRoZSBnaXZlbiBNUEkgaXMgc2VjdXJlIC0gbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kIChhcmdsKS4KKworMjAwNS0wNC0yMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBEb24ndCBhc3N1bWUgdGhlIGNvbXBpbGVyIHdpbGwgcHJlLXByb2Nlc3MgdGhlIC5TCisJZmlsZXMuIFNvbWUgY29tcGlsZXJzLCBsaWtlIHRob3NlIGZyb20gSFAgYW5kIElCTSwgZG9uJ3QgZG8KKwl0aGlzLiBTbywgd2UgdXNlIHRoZSBzYW1lIHNvbHV0aW9uIGdudXBnLTEuNC4wIGRvZXMuIFByZXByb2Nlc3MKKwlmaXJzdCBhbmQgdGhlbiBjb21waWxlLgorCisJKiBocHBhMS4xL21waWgtbXVsMy5TOiBBZGQgImxldmVsIDEuMSIgZGlyZWN0aXZlIHRvIGRpc2FibGUKKwl3YXJuaW5nIGFib3V0IHVzaW5nIFBBLVJJU0MxLjEgb3Bjb2Rlcy4KKwkqIGhwcGExLjEvbXBpaC1tdWwyLlM6IExpa2V3aXNlLgorCSogaHBwYTEuMS9tcGloLW11bDEuUzogTGlrZXdpc2UuCisJKiBocHBhMS4xL3VkaXYtcXJubmQuUzogTGlrZXdpc2UuCisKKzIwMDUtMDItMTYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtcGl1dGlsLmMgKF9nY3J5X21waV9hbGxvY19saW1iX3NwYWNlKTogUmV3cml0dGVuLCBmaXhlZCBtZW1vcnkKKwljb3JydXB0aW9uLgorCisyMDA1LTAyLTA2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbXBpdXRpbC5jIChfZ2NyeV9tcGlfZ2V0X3VpLCBnY3J5X21waV9nZXRfdWkpOiBOZXcgZnVuY3Rpb25zLgorCisyMDA1LTAxLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBocHBhMS4xL3VkaXYtcXJubmQuUzogUmV2ZXJ0ZWQgY2hhbmdlIG9mIDIwMDQtMDMtMDIgYnV0IGtlcHQgdGhlCisJLmFsaWduIGRpcmVjdGl2ZS4KKworMjAwNC0xMi0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogY29uZmlnLmxpbmtzIChtcGlfb3B0aW9uYWxfbW9kdWxlcyk6IE1vdmUgZW50cnkgZm9yIHBvd2VycGM2NAorCWJlZm9yZSBnZW5lcmljIHBvd2VycGMuICBTdWdnZXN0ZWQgYnkgUmFmYWVsIMOBdmlsYSBkZSBFc3DDrW5kb2xhLgorCisyMDA0LTAzLTAyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogaHBwYTEuMS91ZGl2LXFybm5kLlM6IEFsaWdubWVudCBmaXggZnJvbSBMYW1vbnQgSm9uZXMgZm9yCisJRGViaWFuLiAgVGFrZW4gZnJvbSBnbnVwZy0xLjMuCisKKwkqIGxvbmdsb25nLmg6IEFkZGVkIFBvd2VyUEMgNjQgYml0IGNvZGUgZnJvbSBHUE0tNC4xLjIgYnV0IGRpZG4ndAorCWVuYWJsZSBpdCB5ZXQuICBTb21lIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBIUFBBIHRvIGZpeCBhc3NlbWJsZXIKKwlwcm9ibGVtcyBvbiBIUC1VWC4gIEZyb20gZ251cGcgMS4zCisKKwkqIG1waXV0aWwuYyAoX2djcnlfbXBpX2FsbG9jX2xpbWJfc3BhY2UpOiBCZXR0ZXIgYWxsb2NhdGUKKwlzb21ldGhpbmcgZXZlbiBpZiBOTElNQlMgaXMgcGFzc2VkIGFzIDAuCisKKwkqIGNvbmZpZy5saW5rczogVXBkYXRlZCBzeXN0ZW0gbGlzdCB0byBtYXRjaCBnbnVwZyAxLjMuCisKKzIwMDMtMTItMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtcGktaW50ZXJuYWwuaCBbTV9ERUJVR106IFJlbW92ZWQgdGhpcyB1bnVzZWQgY29kZS4KKwkoc3RydWN0IGthcmF0c3ViYV9jdHgpOiBBZGRlZCBUU1BBQ0VfTkxJTUJTIGFuZAlUUF9OTElNQlMuCisJKiBtcGl1dGlsLmMgKF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UpOiBBZGQgYXJnIE5MSU1CUyBhbmQgd2lwZQorCW91dCB0aGUgbWVtb3J5LiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KKwkqIG1waWgtbXVsLmMgKF9nY3J5X21waWhfbXVsX2thcmF0c3ViYV9jYXNlKTogS2VlcCB0cmFjayBvZgorCWFsbG9jYXRlZCBsaW1icy4KKwkqIG1waS1kaXYuYyAoX2djcnlfbXBpX3RkaXZfcXIpOiBLZWVwIHRyYWNrIG9mIGFsbG9jYXRlZCBsaW1icy4KKwkqIG1waS1tdWwuYyAoZ2NyeV9tcGlfbXVsKTogRGl0dG8uCisJKiBtcGktcG93LmMgKGdjcnlfbXBpX3Bvd20pOiBEaXR0by4KKworCSogTWFuaWZlc3Q6IEVtcHR5IG5ldyBmaWxlLiAgQWxzbyBhZGQgTWFuaWZlc3QgZmlsZXMgdG8gYWxsIENQVQorCXNwZWNpZmljIGRpcmVjdG9yaWVzLgorCSogTWFrZWZpbGUuYW06IEFkZGVkLgorCisJKiBtcGl1dGlsLmMgKGdjcnlfbXBpX3JhbmRvbWl6ZSk6IFVzZSBnY3J5X2NyZWF0ZV9ub25jZSBpZiBXRUFLCisJcmFuZG9tIGhhcyBiZWVuIHJlcXVlc3RlZC4KKworMjAwMy0xMC0zMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGkzODYvbXBpaC1yc2hpZnQuUywgaTM4Ni9tcGloLWxzaGlmdC5TOiBVc2UgJWRsIGFuZCBub3QgJWVkeCBmb3IKKwl0ZXN0YjsgdGhpcyBhdm9pZHMgYW4gYXNzZW1ibGVyIHdhcm5pbmcuCisKKwkqIG1waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IHMvZXhwL2V4cG8vIHRvIGF2b2lkIHNoYWRvd2luZyB3YXJuaW5nLgorCisyMDAzLTA4LTE5ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtIChTVUZGSVhFUyk6IE5ldyB2YXJpYWJsZS4KKwkoLlMubywgLlMubG8sIC5TLm9iaik6IFJld3JpdHRlbi4KKworMjAwMy0wNy0zMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGxvbmdsb25nLmggKF9fY2x6X3RhYik6IFJlbmFtZWQgdG8gX2djcnlfY2x6X3RhYi4KKwkqIG1waS1iaXQuYyAoX19jbHpfdGFiKTogTGlrZXdpc2UuCisKKzIwMDMtMDctMjcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtcGljb2Rlci5jIChnY3J5X21waV9zY2FuKTogTmV3IGFyZ3VtZW50IEJVRkxFTiB0byByZXBsYWNlIHRoZQorCXVzZSBvZiB0aGUgaW50aWFsIHZhbHVlIG9mIE5CWVRFUy4gIENoYW5nZWQgQlVGRkVSIHRvIHVuc2lnbmVkLgorCShnY3J5X21waV9wcmludCk6IExpa2V3aXNlLgorCShnY3J5X21waV9kdW1wKTogTmV3LgorCShfZ2NyeV9sb2dfbXBpZHVtcCk6IE1ha2UgdXNlIG9mIGdjcnlfbXBpX2R1bXAuCisJKG1waV9wcmludCk6IFJlbW92ZWQuCisJKGdjcnlfbXBpX3NjYW4pOiBBbGxvY2F0ZWQgbXBpIGluIHNlY3VyZSBtZW1vcnkgd2hlbiByZXF1aXJlZC4KKwkoZ2NyeV9tcGlfYXByaW50KTogQ2hhbmdlZCBCVUZGRVIgdG8gdW5zaWduZWQgY2hhciouCisKKzIwMDMtMDctMTQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtcGljb2Rlci5jOiBVc2VkIGdjcnlfZXJyKiB3cmFwcGVycyBmb3IgbGliZ3BnLWVycm9yIHN5bWJvbHMuCisKKzIwMDMtMDYtMTYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtcGktYWRkLmM6IFJlcGxhY2UgbGFzdCBvY2N1cmVuY2VzIG9mIG9sZCB0eXBlIG5hbWVzIHdpdGggbmV3ZXIKKwluYW1lcyAoaS5lLiByZXBsYWNlIE1QSSB3aXRoIGdjcnlfbXBpX3QpLgorCSogbXBpLWJpdC5jOiBMaWtld2lzZS4KKwkqIG1waS1jbXAuYzogTGlrZXdpc2UuCisJKiBtcGktZGl2LmM6IExpa2V3aXNlLgorCSogbXBpLWdjZC5jOiBMaWtld2lzZS4KKwkqIG1waS1pbnRlcm5hbC5oOiBMaWtld2lzZS4KKwkqIG1waS1pbnYuYzogTGlrZXdpc2UuCisJKiBtcGktbXBvdy5jOiBMaWtld2lzZS4KKwkqIG1waS1tdWwuYzogTGlrZXdpc2UuCisJKiBtcGktcG93LmM6IExpa2V3aXNlLgorCSogbXBpLXNjYW4uYzogTGlrZXdpc2UuCisJKiBtcGljb2Rlci5jOiBMaWtld2lzZS4KKwkqIG1waXV0aWwuYzogTGlrZXdpc2UuCisKKzIwMDMtMDYtMDkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtcGljb2Rlci5jIChnY3J5X21waV9zY2FuKTogQWRqdXN0IGZvciBsaWJncGctZXJyb3IuCisJKGdjcnlfbXBpX3ByaW50KTogTGlrZXdpc2UuCisJKGdjcnlfbXBpX2FwcmludCk6IExpa2V3aXNlLgorCisyMDAzLTA2LTA3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbG9uZ2xvbmcuaCwgbXBpLWFkZC5jLCBtcGktYml0LmMsIG1waS1jbXAuYywgbXBpLWRpdi5jLAorCW1waS1nY2QuYywgbXBpLWlubGluZS5jLCBtcGktaW5saW5lLmgsIG1waS1pbnRlcm5hbC5oLCBtcGktaW52LmMsCisJbXBpLW1wb3cuYywgbXBpLW11bC5jLCBtcGktcG93LmMsIG1waS1zY2FuLmMsIG1waWNvZGVyLmMsCisJbXBpaC1kaXYuYywgbXBpaC1tdWwuYywgbXBpdXRpbC5jLCBnZW5lcmljL21waS1hc20tZGVmcy5oLAorCWdlbmVyaWMvbXBpaC1hZGQxLmMsIGdlbmVyaWMvbXBpaC1sc2hpZnQuYywgZ2VuZXJpYy9tcGloLW11bDEuYywKKwlnZW5lcmljL21waWgtbXVsMi5jLCBnZW5lcmljL21waWgtbXVsMy5jLCBnZW5lcmljL21waWgtcnNoaWZ0LmMsCisJZ2VuZXJpYy9tcGloLXN1YjEuYywgZ2VuZXJpYy91ZGl2LXctc2Rpdi5jLCBpMzg2L3N5bnRheC5oLAorCW02OGsvc3ludGF4LmgsIG1pcHMzL21waS1hc20tZGVmcy5oLCBwb3dlcnBjMzIvc3ludGF4Lmg6IEVkaXRlZAorCWFsbCBwcmVwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgJyMnLgorCVRoaXMgaXMgbm90IHJlcXVpcmVkIGJ5IEM4OSwgYnV0IHRoZXJlIGFyZSBzb21lIGNvbXBpbGVycyBvdXQKKwl0aGVyZSB0aGF0IGRvbid0IGxpa2UgaXQuICBSZXBsYWNlZCBhbnkgb2NjdXJlbmNlIG9mIHRoZSBub3cKKwlkZXByZWNhdGVkIHR5cGUgbmFtZXMgd2l0aCB0aGUgbmV3IG9uZXMuCisKKzIwMDMtMDUtMjEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtcGl1dGlsLmMgKF9nY3J5X21waV9hbGxvY19saW1iX3NwYWNlKTogT25seSB0cnkgdG8gYWxsb2NhdGUKKwltZW1vcnkgaW4gY2FzZSB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvIGFsbG9jYXRlIGlzIG5vbi16ZXJvLgorCisyMDAzLTA0LTI3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbXBpdXRpbC5jIChfZ2NyeV9tcGlfcmVzaXplKTogQWxsb2NhdGUgc2VjdXJlIG1lbW9yeSwgaW4gY2FzZQorCWJpdCB6ZXJvIG9mIGBmbGFncycgaXMgc2V0LgorCisJKiBtcGktYWRkLmMgKGdjcnlfbXBpX3N1Yik6IFNpbXBsaWZ5IGZ1bmN0aW9uOyBhbHdheXMgdXNlIGEKKwl0ZW1wb3JhcnkgdmFyaWFibGUgbm93LgorCisyMDAzLTA0LTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbG9uZ2xvbmcuaCAodW11bF9wcG1tKTogU3VwcG9ydCBTSDMgYW5kIFNINC4gIFRoYW5rcyB0bworCWthenV5YS5zQGpwLnlva29nYXdhLmNvbS4KKworMjAwMy0wNC0wMiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waWNvZGVyLmMgKGdjcnlfbXBpX3ByaW50KTogRml4ZWQgdGVzdGluZyBhZ2FpbnN0IHBvc3NpYmxlCisJdW5pbml0aWFsaXplZCBMRU4uICBWYWxncmluZGVkIGJ5IE5pa29zIE1hdnJveWFub3BvdWxvcy4KKworMjAwMy0wMS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGxvbmdsb25nLmg6IFJlbW92ZWQgc29tZSBzcGFjZXMgYmV0d2VlbiBiYWNrc2xhc2hlcyBhbmQgbmV3bGluZXMuCisKKzIwMDItMDktMjAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtcGktbXVsLmMgKGdjcnlfbXBpX211bF8yZXhwKTogTmV3LiBUaGlzIHdhcyBkZWNsYXJlZCBpbgorCWdjcnlwdC5oIGJ1dCBvbmx5IGltcGxlbWVudGVkIGFzIGludGVybmFsIGZ1bmN0aW9uLiAgTm90ZWQgYnkgVGltbworCWJ1dCBhIGZldyBtaW51dGVzIHRvIGxhdGUgZm9yIHRvZGF5J3MgcmVsZWFzZS4KKworCSogTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogSW5jbHVkZSBtcGktYXNtLWRlZnMuaAorCisyMDAyLTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogTWFrZWZpbGUuYW0gKC5TLmxvKTogUGFzcyAtRFBJQy4gaTM4NiwgUFBDIGFuZCBTcGFyYyBjb2RlCisJcmVxdWlyZSBpdC4gIEl0IHdvcmtlZCBmb3IgbWUgYmVjYXVzZSBJIGFtIHVzaW5nIHRoZSBpNTg2IGNvZGUuCisKKzIwMDItMDgtMjMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoLlMubG8pOiBGaXhlZCBmb3IgbGlidG9vbCBidWlsZCB3aXRoIC0tZGlzYWJsZS1zaGFyZWQuCisKKzIwMDItMDctMjQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsb25nbG9uZy5oOiBSZXBsYWNlZCBhbGwgSyZSIG11bHRpbGluZSBzdHJpbmdzIGJ5IElTTyBvbmVzIGZvcgorCXRoZSBzYWtlIG9mIG1vZGVybiBjb21waWxlcnMuICBTdWdnZXN0ZWQgYnkgTWFyY28gUGFycm9uZS4KKworMjAwMi0wNi0yNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waXV0aWwuYyAoZ2NyeV9tcGlfc3dhcCk6IE5ldy4KKworCSogbXBpLWRpdi5jIChnY3J5X21waV9kaXYpOiBOZXcuCisJKGdjcnlfbXBpX21vZCk6IE5ldy4KKwkqIG1waS1pbnYuYyAoZ2NyeV9tcGlfaW52bSk6IE5ldy4KKworCSogbXBpY29kZXIuYyAoZG9fZ2V0X2J1ZmZlcik6IE1ha2Ugc3VyZSB0aGF0IHdlIGFsbG9jYXRlIGF0IGxlYXN0CisJb25lIGJ5dGUuCisKKzIwMDItMDYtMTIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBocHBhMS4xL3VkaXYtcXJubmQuUzogQ2hhbmdlcyBmb3IgUElDIGJ5IFJhbmRvbHBoIENodW5nLgorCisyMDAyLTA1LTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogY29uZmlnLmxpbmtzOiBDaG5hZ2UgdGhlIHdheSB0aGUgbXBpIG1vZHVsZXMgYXJlIGRldGVybWluZWQuCisJKiBNYWtlZmlsZS5hbTogUmV2YW1wZWQgdG8gYmV0dGVyIGhhbmRsZSBtb2R1bGVzCisKKzIwMDItMDUtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJQ2hhbmdlZCBsaWNlbnNlIG9mIGFsbCBmaWxlcyB0byB0aGUgTEdQTC4KKworMjAwMi0wNC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waWNvZGVyLmMgKGdjcnlfbXBpX3NjYW4pOiBEb24ndCB1c2Ugbm9ybWFsaXplIG9uIGEgTlVMTCBNUEkuCisKKzIwMDItMDMtMjAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtcGljb2Rlci5jIChtcGlfcmVhZF9mcm9tX2J1ZmZlcik6IEJhaWwgb3V0IG9uIGEgemVybyBsZW5ndGgKKwlidWZmZXIgYmVjYXVzZSB3ZSBjYW4ndCBldmVudHVhbGx5IGRvIGFuIG1hbGxvYyBvZiB0aGlzIHNpemUuCisJUmVwb3J0ZWQgYnkgVGltby4KKworMjAwMi0wMS0xNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waS1pbnYuYyAoX2djcnlfbXBpX2ludm0pOiBUeXBvIGZpeGVzLCBub3RlZCBieSBDYXJsbyBQZXJhc3NpLgorCisyMDAxLTExLTAxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbXBpY29kZXIuYyAoZ2NyeV9tcGlfc2Nhbik6IEFsbG93IHRvIHBhc3MgYSBuYnl0ZXMgYXMgTlVMTCBvcgorCXdpdGggdmFsdWUgMCBmb3IgZm9ybWF0IEdDUllfRk1UX1NTSCwgc28gdGhhdCB0aGUgbGVuZ3RoIGlzIG5vdAorCXVzZWQgZm9yIGFueSBjaGVja3MsIG9ubHkgdGhlIGxlbmd0aCBzdG9yZWQgaW4gdGhlIGJ1ZmVyIGlzIHVzZWQuCisJVGhpcyBpcyBhIG5pY2UgZm9ybWF0IGJlY3Vhc2Ugd2UgY2FuIGp1c3QgcGFzcyBhIGJ1ZmZlciBhcm91bmQgYW5kCisJZG9uJ3QgbmVlZCB0byBjYXJlIGFib3V0IGl0cyBsZW5ndGguCisKKzIwMDEtMDgtMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjb25maWcubGlua3M6IENoYW5nZWQgdGhlIHdheSB0aGUgbGlzdCBvZiBmaWxlcyB0byBiZQorCXN5bWxpbmtlZCBpcyByZXR1cm5lZC4KKworMjAwMS0wNS0zMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waWgtY21wLmM6IFJlbW92ZWQgYW5kIG1vdmVkIG1waWhlbHBfY21wIHRvIC4uCisJKiBtcGktaW5saW5lLmg6IC4uIGhlcmUuCisKKwlNYWpvciBmdW5jdGlvbiByZW5hbWluZy4gQWxsIGdsb2JhbCBmdW5jdGlvbnMgYXJlIG5vdyBwcmVmaXhlZAorCXdpdGggX2djcnlfIG9yIGdjcnlfLiAgUmVuYW1lZCBhbHNvIGFsbCBtcGloZWxwXyB0byBqdXN0IG1waWhfIHNvCisJdGhhdCBmdW5jdGlvbnMgbmFtZXMgYXJlIG5vdCBnZXR0aW5nIHRvIGxvbmcgYW4gdW5yZWFkYWJsZSBhbmQgZm9yCisJYmV0dGVyIG1hdGNoaW5nIHdpdGggdGhlIGZpbGVuYW1lcy4KKworMjAwMS0wNS0yOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waWNvZGVyLmMgKG1waV9mcm9tc3RyKTogTWFkZSBzdGF0aWMgYW5kIGFzc3VtZSB0aGF0IGFsbCBpbnB1dAorCWlzIGluIGhleGZvcm1hdC4KKworCVVwZGF0ZWQgYWxsIENQVSBzcGVjaWZpYyBjb2RlIHdpdGggdGhlIG9uZSBmcm9tIEdudVBHLTEuMC41LiAgVGhpcworCWlzIGp1c3QgYSBjaGFuZ2Ugb2YgdGV4dCBmb3JtYXR0aW5nIGFuZCB0aGUgdXNlIG9mIC5sYWJlbAorCWluc3RlYWQgb2YgbGFiZWxzIGZvciBocHBhIGFuZCBwYTcxMDAuCisKKwkqIGxvbmdsb25nLmg6IEZpeGVzIGZvciBBUk0gYnkgUGhpbCBCbHVuZGVsbC4KKworMjAwMS0wMy0yOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waS1tdWwuYyAobXBpX211bCk6IE1ha2Ugc3VyZSB0aGF0IHNlY3JldCB0ZW1wb3JhcnkgcmVzdWx0cyBhcmUKKwlub3Qgc3RvcmVkIGluIHcuICBTdWdnZXN0ZWQgYnkgRmxvcmlhbiBXZWltZXIuCisKKwkqIGNvbmZpZy5saW5rczogVXNlIGkzODYgY29kZSBmb3IgaTM4Ni4gIEFjY29yZGluZyB0byB0ZXN0cyBieQorCUtldmluIFJ5ZGUgdGhlIGk1ODYgY29kZSBydW5zIHNsb3cgb24gaTM4NiBDUFVzLiAgRGl0dG8gZm9yIGk3ODYuCisKKzIwMDEtMDEtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlZCBtcGkuaC4KKworMjAwMC0xMi0xOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waS1pbnRlcm5hbC5oOiBQdXQgbGltYl90IGRlZmluaXRpb24gaW4gYW4gaWZkZWYuCisKKwlNYWpvciBjaGFuZ2U6CisJUmVtb3ZlZCBhbGwgR251UEcgc3R1ZmYgYW5kIHJlbmFtZWQgdGhpcyBwaWVjZSBvZiBzb2Z0d2FyZQorCXRvIGdjcnlwdC4KKworMjAwMC0xMS0xNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waS1pbnRlcm5hbC5oLCBtcGkuaDogQ2hhbmdlZCB0aGUgd2F5IHRoZXkgYXJlIGNhbGxlZCBhbmQKKwlpbnRyb2R1Y2VkIERJRF9NUElfTElNUF9UWVBFREVGIGhhY2suICBWZXJ5IHVnbHksIHNob3VsZCBhbGwgYmUKKwlyZXZhbXBlZC4KKworCSogTWFrZWZpbGUuYW0gKE9NSVRfREVQRU5ERU5DSUVTKTogSGFjayB0byB3b3JrIGFyb3VuZCBkZXBlbmRlbmN5CisJcHJvYmxlbXMuCisKKzIwMDAtMTAtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnZW5lcmljL21waS1hc20tZGVmcy5oOiBOZXcuCisJKiBtaXBzMy9tcGktYXNtLWRlZnMuaDogTmV3LgorCSogY29uZmlnLmxpbmtzOiBDcmVhdGUgYSBsaW5rIHRvIG9uZSBvZiB0aGUgYWJvdmUgZmlsZXMuCisKK0ZyaSBKdWwgMjggMTg6MTk6MTEgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAqIG1waWNvZGVyLmMgKGdjcnlfbXBpX3NjYW4pOiBOb3JtYWxpemUgdGhlIHJldHVybmVkIE1QSS4KKworVHVlIEp1bCAyNSAxNzo0NDoxNSBDRVNUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAb3Blbml0LmRlPgorCisgICogY29uZmlnLmxpbmtzOiBTdXBwb3J0IGZvciBwb3dlcnBjLS1uZXRic2QgYnkgR2FicmllbCBSb3NlbmtvZXR0ZXIuCisKK01vbiBKdWwgMTcgMTY6MzU6NDcgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQD4KKworICAqIHBvd2VyLzogQWRkIGFsbCBmaWxlcyBmcm9tIEdNUCBmb3IgdGhpcyBDUFUuIENvbnZlcnRlZCBjb21tZW50cyB0bworICBDUFAgY29tbWVudHMgYmVjYXVzZSBzb21lIEFTZXMgY29tcGxhaW4gYWJvdXQgJyBpbiBjb21tZW50cy4KKworICAqIGNvbmZpZy5saW5rczogIFN1cHBvcnQgZm9yIEJTREkgNC54OyBieSBXYXluZSBDaGFwZXNraWUuIEFkZCBzdXBwb3J0CisgIGZvciBGcmVlQlNEIDUgYW5kIG1hZGUgdGhlIGNhc2Ugc3RtdCBsb29raW5nIG5pY2VyOyBieSBKdW4gS3VyaXlhbWEuCisgIEFkZCBzdXBwb3J0IGZvciBOZXRCU0QuCisgIChzcGFyYzgpOiBNYWRlIHRoZSBzZWFyY2ggcGF0aCB0aGUgc2FtZSBhcyBzcGFyYzkKKyAgKHNwYXJjNjQtdW5rbm93bi1saW51eC1nbnUpOiB1c2UgdWRpdiBtb2R1bGU7IGJ5IEFkYW0gTWl0Y2hlbGwuCisKKyAgKiBNYWtlZmlsZS5hbTogYy9TRkxBR1MvQVNGTEFHUy8uIFRoaXMgaGFzIG9ubHkgYmVlbiB1c2VkIGJ5IHRoZQorICBwb3dlcnBjIGFuZCBhY3R1YWxseSBuZXZlciBwYXNzZWQgdGhlIC1XYSxmb28gdG8gdGhlIGNjLgorCisgICogbXBpaC1kaXYuYyAobXBpaGVscF9kaXZyZW0pOiBUaGUgTVBOX0NPUFlfREVDUiBjb3BpZWQgb25lIGVsZW1lbnQKKyAgdG9vIG1hbnkuICBUaGlzIGlzIGEgZ21wMi4wLjJwOS50eHQgcGF0Y2guCisKKyAgKiBsb25nbG9uZy5oICh1bXVsX3BwbW0pOiBGaXhlcyBmb3IgQVJNLTQuIEJ5IFNlYW4gTWFjTGVubmFuLgorCisgICogbXBpLWludGVybmFsLmggKGthcmF0c3ViYV9jdHgpOiBOZXcuCisgICogbXBpaC1tdWwuYyAobXBpaGVscF9yZWxlYXNlX2thcmF0c3ViYV9jdHgpOiBOZXcuCisgIChtcGloZWxwX211bF9rYXJhdHN1YmFfY2FzZSk6IE5ldy4KKyAgKG1waWhlbHBfbXVsKTogU3BsaXR0ZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIG5ldyBmdW5jdGlvbnMuCisgICogbXBpLXBvdy5jIChtcGlfcG93bSk6IE1ha2UgdXNlIG9mIHRoZSBuZXcgc3BsaXR0ZWQgZnVuY3Rpb24gdG8gYXZvaWQKKyAgbXVsdGlwbGUgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcnkgbWVtb3J5IGR1cmluZyB0aGUga2FyYXRzdWJhIG9wZXJhdGlvbnMuCisgICogbXBpX21wb3cuYzogUmVtb3ZlZCB0aGUgdW51c2VkIEJhcnJldHQgY29kZS4KKworMjAwMC0wMy0yMSAxNjoxNzozMCAgV2VybmVyIEtvY2ggICh3a0BoYWJpYnRpLm9wZW5pdC5kZSkKKworCSogY29uZmlnLmxpbmtzOiBBZGQgc3VwcG9ydCBmb3IgRnJlZUJTRCA1LgorCitNb24gSmFuIDI0IDIyOjI0OjM4IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBtcGljb2Rlci5jIChnY3J5X21waV9hcHJpbnQpOiBOb3cgcmVhbGx5IHJldHVybnMgdGhlIGxlbmd0aC4KKworTW9uIEphbiAyNCAxMzowNDoyOCBDRVQgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogbXBpdXRpbC5jOiBSZW1vdmVkIGFsbCBtZW1vcnkgZGVidWdnaW5nIGNvZGUuCisKKwkqIG1waWNvZGVyLmMgKGdjcnlfbXBpX2FwcmludCk6IE5ldy4KKworCSogUmVwbGFjZWQgYWxsIG1fIG1lbW9yeSBmdW5jdGlvbnMgYnkgZzEwXyBvbmVzLgorCitGcmkgRGVjIDMxIDE0OjA2OjU2IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBtcGktYml0LmMgKGdjcnlfbXBpX2dldF9uYml0cyk6IE5ldy4KKworCSogbXBpdXRpbC5jIChtcGlfc2V0X3NlY3VyZSk6IG1hZGUgc3RhdGljLgorCShnY3J5X21waV9nZXRfZmxhZyk6IE5ldy4KKwkoZ2NyeV9tcGlfc2V0X2ZsYWcpOiBOZXcuCisJKGdjcnlfbXBpX2NsZWFyX2ZsYWcpOiBOZXcuCisJKG1waV9zZXRfb3BhcXVlKTogcmVuYW1lZCB0byBnY3J5X21waV9zZXRfb3BhcXVlLgorCShtcGlfZ2V0X29wYXF1ZSk6IHJlbmFtZWQgdG8gZ2NyeV9tcGlfZ2V0X29wYXF1ZS4KKworRnJpIERlYyAzMSAxMjo0ODozMSBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogbXBpY29kZXIuYyAobXBpX3JlYWRfZnJvbV9idWZmZXIpOiBNYWRlIHN0YXRpYy4KKwkoZ2NyeV9tcGlfcHJpbnQpOiBBIGJ1ZmZlciBvZiBOVUxMIGlzIG5vdyBhbGxvd2VkIHRvIGdldCB0aGUgcmVxdWlyZWQKKwlsZW5ndGggYmFjay4KKwkobXBpX2dldF9rZXlpZCk6IFJlbW92ZWQuCisJKG1waV9wcmludCk6IE1hZGUgc3RhdGljIC0gc2hvdWxkIGJlIHJlbW92ZWQuCisKK1dlZCBEZWMgIDggMjE6NTg6MzIgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZCAuLi9nY3J5cHQuCisKKwkqIGcxMG0uYyA6IFJlbW92ZWQuCisKKwkqIG1waWNvZGVyLmMgKG1waV93cml0ZSk6IFJlbW92ZWQuCisJKG1waV9yZWFkKTogUmVtb3ZlZC4KKwkoZ2NyeV9tcGlfc2Nhbik6IE5ldy4gVGFrZW4gZnJvbSAuLi9nY3J5cHQvbXBpYXBpLmMuCisJKGdjcnlfbXBpX3ByaW50KTogRGl0dG8uCisKKwkqIG1waS1wb3cuYyAobXBpX3Bvd20pOiBSZW5hbWVkIHRvIC4uLgorCShnY3J5X21waV9wb3dtKTogLi4uIHRoaXMuCisKKwkqIG1waXV0aWwuYyAoZ2NyeV9tcGlfbmV3KTogTmV3IGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIG9sZCBmdW5jdGlvbi4KKwlUYWtlbiBmcm9tIC4uL2djcnlwdC9tcGlhcGkuYy4KKwkoZ2NyeV9tcGlfc25ldyk6IERpdHRvLgorCShnY3J5X21waV9yZWxlYXNlKTogRGl0dG8uCisJKGdjcnlfbXBpX2NvcHkpOiBEaXR0by4KKwkoZ2NyeV9tcGlfc2V0KTogRGl0dG8uCisJKGdjcnlfbXBpX3NldF91aSk6IERpdHRvLgorCShnY3J5X21waV9jbXApOiBEaXR0by4KKwkoZ2NyeV9tcGlfY21wX3VpKTogRGl0dG8uCisJKGdjcnlfbXBpX3JhbmRvbWl6ZSk6IERpdHRvLgorCisJKiBtcGljb2Rlci5jIChtcGlfcHJpbnQpOiBSZW1vdmVkIHRoZSBuYml0X2luZm8ga2x1ZGdlLgorCSogbXBpLWJpdHMuYyAobXBpX2dldF9uYml0cyk6IFJlcGxhY2VkIHRoZSBpc19wcm90ZWN0ZWQgc3R1ZmYgYnkKKwljaGVja2luZyB3aGV0aGVyIGl0IGlzIGFuIG9wYXF1ZSBtcGkgYW5kIHRoZW4gcmV0dXJucyBpdCdzIGxlbmd0aAorCWluIGJpdHMuCisJKiBtcGl1dGlsLmMgKG1waV9zZXRfb3BhcXVlKTogQ2hhbmdlZCB0aGUgaW50ZXJmYWNlIHRvIHRha2UgYSBudW1iZXIKKwlvZiBiaXRzIGZvciB0aGUgbGVuZ3RoLiAgQWRqdXN0ZWQgYWxsIHVzZXJzLgorCShtcGlfZ2V0X29wYXF1ZSk6IERpdHRvLgorCitGcmkgTm92IDE5IDE3OjE1OjIwIENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBtcGljb2Rlci5jIChnMTBfbG9nX21waWR1bXApOiBBZGQgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZAorCisJKiBtcGloLW11bC5jIChtcGloZWxwX211bF9uKTogcy9tX2lzX2VjdXJlL2cxMF9pc19zZWN1cmUvCisKKwkqIG1waXV0aWwuYyAobXBpX2FsbG9jKTogUmVtdmVkIHRoZSBkZWJ1ZyBtb2RlIGJlY2F1c2UgaXQgaGFzIHR1cm5lZAorCW91dCwgdGhhdCB0aGlzIGZlYXR1cmUgd2FzIG5vdCB2ZXJ5IHVzZWZ1bCBpbiB0aGUgcGFzdC4gIFVzZSB0aGUKKwluZXcgYWxsb2MgZnVuY3Rpb25zLgorCShtcGlfYWxsb2Nfc2VjdXJlKTogRGl0dG8uCisJKG1waV9hbGxvY19saW1iX3NwYWNlKTogRGl0dG8uCisJKG1waV9mcmVlX2xpbWJfc3BhY2UpOiBEaXR0by4KKwkobXBpX3Jlc2l6ZSk6IERpdHRvLgorCShtcGlfZnJlZSk6IERpdHRvLgorCShtcGlfc2V0X3NlY3VyZSk6IFJlbW92ZWQgdGhlIGRlYnVnIHN0dWZmLgorCShtcGlfc2V0X29wYXF1ZSk6IERpdHRvLgorCShtcGlfY29weSk6IERpdHRvLgorCShtcGlfYWxsb2Nfc2V0X3VpKTogRGl0dG8uCisJKG1waV9tX2NoZWNrKTogVXNlIGcxMF8gd3JhcHBlci4KKworTW9uIEF1ZyAzMCAyMDozODozMyBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKworCSogY29uZmlnLmxpbmtzOiBBZGQgY2FzZSBsYWJlbCBmb3IgREpHUFAKKworV2VkIEp1bCAxNCAxOTo0MjowOCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKworCSogTWFrZWZpbGUuYW06IFVzZSAucyBmaWxlcyBhcyB0ZW1wb3JhcmllcywgZGlzYWJsZWQgb3RoZXIgLlMgcnVsZXMuCisKK1dlZCBKdWwgIDcgMTM6MDg6NDAgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisKKwkqIG1waWNvZGVyLmMgKGcxMF9sb2dfbXBpZHVtcCk6IE5ldy4KKworCSogTWFrZWZpbGUuYW06IFN1cHBvcnQgZm9yIGxpYnRvb2wuCisKK0ZyaSBKdWwgIDIgMTE6NDU6NTQgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisKKwkqIG1waS1iaXQuYyAobXBpX2xzaGlmdF9saW1icyxtcGlfcnNoaWZ0X2xpbWJzKTogTmV3LgorCSogbXBpLW1wb3cuYyAoYmFycmV0dF9tdWxtKTogTmV3IGJ1dCBkaWFibGVkLgorCitUdWUgSnVuICAxIDE2OjAxOjQ2IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlnLmxpbmtzIChpWzU2XTg2Ki0qLWZyZWVic2RlbGYqKTogTmV3LgorCitTdW4gTWF5IDIzIDE0OjIwOjIyIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlnLmxpbmtzIChzeXNkZXAuaCk6IE5vdCBhbnkgbW9yZSBjb25kaXRpb25hbGx5IGNyZWF0ZWQuCisKK1R1ZSBNYXkgIDQgMTU6NDc6NTMgQ0VTVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBtcGl1dGlsLmMgKG1waV9hbGxvY19saWtlKTogTmV3LgorCitNb24gQXByIDI2IDE3OjQ4OjE1IENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogbXBpaC1hZGQuYywgbXBpaC1zdWIuYzogUmVtb3ZlZAorCSogbXBpLWlubGluZS5jOiBOZXcuCisJKiBtcGktaW5saW5lLmg6IE1ha2UgaXQgdXNhYmxlIGJ5IG1waS1pbmxpbmUuYy4KKworU3VuIEFwciAxOCAxMDoxMToyOCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1waWgtbXVsLmMgKG1waWhlbHBfbXVsX24pOiBGaXhlZCB1c2Ugb2YgbWVtb3J5IHJlZ2lvbi4KKwkobXBpaGVscF9tdWwpOiBEaXR0by4KKworV2VkIEFwciAgNyAyMDo1MTozOSBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBFeHBsaWNpdCBydWxlcyB0byBpbnZva2UgY3BwIG9uICouUworCitNb24gTWFyICA4IDIwOjQ3OjE3IENFVCAxOTk5ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBjb25maWcubGlua3M6IFRha2UgYWR2YW50YWdlIG9mIHRoZSB3aXRoX3N5bWJvbF91bmRlcnNjb3JlIG1hY3JvLgorCUFkZCBzdXBwb3J0IGZvciBmcmVlYnNkIDQuCisKK1dlZCBGZWIgMjQgMTE6MDc6MjcgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1pcHMzL21waWgtc3ViMS5TOiBSZW1vdmVkIGxlZnQgb3ZlciBqdW5rIGluIGxhc3QgbGluZS4gKFNob3VsZCBJCisJYmxhbWUgbWUgb3IgbXkgZWRpdG9yPykuCisKK1NhdCBGZWIgMTMgMTI6MDQ6NDMgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmVkIHRoZSArPS4gQWRkIE1QSV9PUFRfRkxBR1MuCisKK1NhdCBKYW4gIDkgMTY6MDI6MjMgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIG1waS1jbXAuYyAobXBpX2NtcF91aSk6IE5vcm1hbGl6ZWQgdGhlIGFyZy4KKworVGh1IEphbiAgNyAxODowMDo1OCBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogbXBpLWJpdC5jIChtcGlfbm9ybWFsaXplKTogTmV3LgorCShtcGlfZ2V0X25iaXRzKTogTm9ybWFsaXplIHRoZSBNUEkuCisJKiBtcGktYml0LmMgKG1waV9jbXApOiBOb3JtYWxpemUgdGhlIE1QSSBiZWZvcmUgdGhlIGNvbXBhcmUuCisKKworVHVlIERlYyAgOCAxMzoxNToxNiBDRVQgMTk5OCAgV2VybmVyIEtvY2ggIDx3a0Bpc2lsLmQuc2h1dHRsZS5kZT4KKworCSogY29uZmlnLmxpbmtzOiBNb3ZlZCB0aGUgY2FzZSBmb3IgcG93ZXJwYypsaW51eAorCSogcG93ZXJwY3AzMi8qLlM6IFJlbW92ZWQgc29tZSB1bmRlcnNjb3Jlcy4KKworVGh1IE5vdiAyNiAwNzoyNzo1MiAxOTk4ICBXZXJuZXIgS29jaCAgPHdlcm5lci5rb2NoQGd1dWcuZGU+CisKKwkqIGNvbmZpZy5saW5rczogU3VwcG9ydCBmb3IgcHBjIHdpdGggRUxGCisJKiBwb3dlcnBjMzIvc3ludGF4Lmg6IE5ldy4KKwkqIHBvd2VycGMzMi8qLlM6IEFwcGxpZWQgRUxGIHBhdGNoZXMgKGdsaWJjIHBhdGNoZXMpCisKK1R1ZSBOb3YgMTAgMTk6MzE6MzcgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogcG93ZXIqLyA6IFN0YXJ0ZWQgd2l0aCBzdHVmZiBmb3IgUFBDCisJKiBjb25maWcubGlua3M6IFNvbWUgc3R1ZmYgZm9yIFBQQy4KKwkqIGdlbmVyaWMvdWRpdi13LXNkaXYuYzogTmV3IGJ1dCBkaXNhYmxlZC4KKworVHVlIE9jdCAyNyAxMjozNzo0NiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjb25maWcubGlua3MgKGZyZWVic2QpOiBGaXhlcyBmb3IgRnJlZUJTRCAzLjAKKworV2VkIE9jdCAxNCAwOTo1OTozMCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBjb25maWcubGlua3MgKGZyZWVic2QpOiBFTEYgcGF0Y2hlcyBmcm9tIEp1biBLdXJpeWFtYS4KKworVGh1IE9jdCAgOCAxMzoyODoxNyAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtcGktbXBvdy5jIChtcGlfbXVscG93bSk6IEZpeGVkIG1lbSBsZWFrIChtX2ZyZWUvbXBpX2ZyZWUpLgorCitUaHUgU2VwIDE3IDE4OjA4OjUwIDE5OTggIFdlcm5lciBLb2NoICAod2tAKG5vbmUpKQorCisJKiBocHBhMS4xL3VkaXYtcXJubmQuUzogRml4IGZyb20gU3RlZmZlbiBaYWhuIGZvciBIUFVYIDEwLjIwCisKK1RodSBBdWcgIDYgMTY6Mzk6MjggMTk5OCAgV2VybmVyIEtvY2gsbW9iaWwsLCwJKHdrQHRvYm9sZCkKKworCSogbXBpLWJpdC5jIChtcGlfc2V0X2J5dGVzKTogUmVtb3ZlZC4KKworV2VkIEF1ZyAgNSAxNToxMToxMiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQChub25lKSkKKworCSogbXBpY29kZXIuYyAobXBpX3JlYWRfZnJvbV9idWZmZXIpOiBOZXcuCisKKwkqIG1waXV0aWwuYyAobXBpX3NldF9vcGFxdWUpOiBOZXcuCisJKG1waV9nZXRfb3BhcXVlKTogTmV3LgorCShtcGlfY29weSk6IENoYW5nZWQgdG8gc3VwcG9ydCBvcGF1cWUgZmxhZworCShtcGlfZnJlZSk6IERpdHRvLgorCitTYXQgSnVsICA0IDEwOjExOjExIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1waXV0aWwuYyAobXBpX2NsZWFyKTogUmVzZXQgZmxhZ3MuCisJKG1waV9zZXQpOiBEaXR0by4KKwkobXBpX2FsbG9jX3NlY3VyZSk6IFNldCBmbGFnIHRvIDEgYW5kIG5vdCBvcmVkIHRoZSAxIGluLCB0c3NzLi4KKworRnJpIEp1biAyNiAxMToxOTowNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtcGl1dGlsLmMgKG1waV9hbGxvYyk6IHNldCBuYml0cyB0byAwLgorCShtcGlfYWxsb2Nfc2VjdXJlKTogRGl0dG8uCisJKG1waV9jbGVhcik6IERpdHRvLgorCitUaHUgSnVuIDI1IDExOjUwOjAxIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1pcHMzLyouUzogTmV3CisKK01vbiBNYXkgMTggMTM6NDc6MDYgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlnLmxpbmtzOiBzcGxpdCBtcGloLXNoaWZ0IGludG8gbXBpaC1bbHJdc2hpZnQgYW5kCisJY2hhbmdlZCBhbGwgaW1wbGVtZW50YXRpb25zLgorCSogbXBpL2FscGhhOiBhZGQgc29tZSBuZXcgYXNzZW1ibGVyIHN0dWZmLgorCitXZWQgTWF5IDEzIDExOjA0OjI5IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZy5saW5rczogQWRkIHN1cHBvcnQgZm9yIE1JUFMKKworVGh1IEFwciAgOSAxMTozMTozNiAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtcGljb2Rlci5jIChtcGlfZ2V0X3NlY3VyZV9idWZmZXIpOiBOZXcuCisKK1dlZCBBcHIgIDggMDk6NDQ6MzMgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlnLmxpbmtzOiBBcHBsaWVkIHNtYWxsIGZpeCBmcm9tIFVsZiBNw7ZsbGVyLgorCitNb24gQXByICA2IDEyOjM4OjUyIDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1waWNvZGVyLmMgKG1waV9nZXRfYnVmZmVyKTogUmVtb3ZlZCByZXR1cm5lZCBsZWFkaW5nIHplcm9lcworCWFuZCBjaGFuZ2VkIGFsbCBjYWxsZXJzLgorCitUdWUgTWFyIDEwIDEzOjQwOjM0IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIG1waS1iaXQuYyAobXBpX2NsZWFyX2hpZ2hiaXQpOiBOZXcuCisKK01vbiBNYXIgIDIgMTk6Mjk6MDAgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogTmV3CisKK1RodSBGZWIgMjYgMDY6NDg6NTQgMTk5OCAgV2VybmVyIEtvY2ggICh3a0Bpc2lsLmQuc2h1dHRsZS5kZSkKKworCSogY29uZmlnLmxpbmtzIChYODZfQlJPS0VOX0FMSUdOKTogQWRkZWQgZm9yIHNvbWUgc3lzdGVtcy4KKworTW9uIEZlYiAyMyAxMjoyMTo0MCAxOTk4ICBXZXJuZXIgS29jaCAgKHdrQGlzaWwuZC5zaHV0dGxlLmRlKQorCisJKiBtcGkvbTY4ay9tcGloLXNoaWZ0LlMgKExzcGVjaWFsKTogQ2hhbmdlZCBkdXBsaWNhdGUgc3ltYm9sLgorCitNb24gRmViIDE2IDEzOjAwOjI3IDE5OTggIFdlcm5lciBLb2NoICAod2tAaXNpbC5kLnNodXR0bGUuZGUpCisKKwkqIGNvbmZpZy5saW5rcyA6IEFkZCBkZXRlY3Rpb24gb2YgbTY4ayBjcHVzCisKKworIENvcHlyaWdodCAxOTk4LDE5OTksMjAwMCwyMDAxLDIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0xvY2FsIFZhcmlhYmxlczoKK2J1ZmZlci1yZWFkLW9ubHk6IHQKK0VuZDoKZGlmZiAtLWdpdCBhL21waS9NYWtlZmlsZS5hbSBiL21waS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFiMWVhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTc3IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisjIDEuNSBsZWFkcyB0byBhIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIGR1ZSB0byBhbGwgdGhlIGNvbmRpdGlvbmFscworIyBJIHdhcyBub3QgYWJsZSB0byBidWlsZCBpdCB3aXRoIDY0TWVncyAtIDEuNiBmaXhlcyB0aGlzLgorIyBub3QgYW55bW9yZSByZXF1aXJlZDogQVVUT01BS0VfT1BUSU9OUyA9IDEuNgorCisjIE5lZWQgdG8gaW5jbHVkZSAuLi9zcmMgaW4gYWRkaXRpb24gdG8gdG9wX3NyY2RpciBiZWNhdXNlIGdjcnlwdC5oIGlzCisjIGEgYnVpbHQgaGVhZGVyLgorQU1fQ1BQRkxBR1MgPSAtSS4uL3NyYyAtSSQodG9wX3NyY2Rpcikvc3JjCitBTV9DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpCisKK0FNX0FTRkxBR1MgPSAkKE1QSV9TRkxBR1MpCitBTV9DQ0FTRkxBR1MgPSAkKE5PRVhFQ1NUQUNLX0ZMQUdTKQorCitFWFRSQV9ESVNUID0gTWFuaWZlc3QgY29uZmlnLmxpbmtzCitESVNUQ0xFQU5GSUxFUyA9IG1waS1hc20tZGVmcy5oIFwKKyAgICAgICAgICAgICAgICAgbXBpaC1hZGQxLWFzbS5TIG1waWgtbXVsMS1hc20uUyBtcGloLW11bDItYXNtLlMgbXBpaC1tdWwzLWFzbS5TICBcCisJCSBtcGloLWxzaGlmdC1hc20uUyBtcGloLXJzaGlmdC1hc20uUyBtcGloLXN1YjEtYXNtLlMgYXNtLXN5bnRheC5oIFwKKyAgICAgICAgICAgICAgICAgbXBpaC1hZGQxLmMgbXBpaC1tdWwxLmMgbXBpaC1tdWwyLmMgbXBpaC1tdWwzLmMgIFwKKwkJIG1waWgtbHNoaWZ0LmMgbXBpaC1yc2hpZnQuYyBtcGloLXN1YjEuYyBcCisJICAgICAgICAgc3lzZGVwLmggbW9kLXNvdXJjZS1pbmZvLmgKKworIyBCZXdhcmU6IFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgYSBjb21tZW50IGJ1dCBncmVwcGVkIGJ5CisjICAgICAgICAgY29uZmlnLmxpbmtzIHRvIGdldCB0aGUgbGlzdCBvZiBzeW1saW5rZWQgbW9kdWxlcworIyAgICAgICAgIE9wdGlvbmFsIG1vZHVsZXMgYXJlIG1hcmtlZCB3aXRoIGFuIE8gaW4gdGhlIHNlY29uZCBjb2x1bW4uCisjQkVHSU5fQVNNX0xJU1QKKyMgbXBpaC1hZGQxICAgIEMKKyMgbXBpaC1zdWIxICAgIEMKKyMgbXBpaC1tdWwxICAgIEMKKyMgbXBpaC1tdWwyICAgIEMKKyMgbXBpaC1tdWwzICAgIEMKKyMgbXBpaC1sc2hpZnQgIEMKKyMgbXBpaC1yc2hpZnQgIEMKKyMgdWRpdiAgICAgICAgIE8KKyMgdWRpdi1xcm5uZCAgIE8KKyNFTkRfQVNNX0xJU1QKKworIyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuICBUaGVyZSBpcyBvbmx5IGEgZHVtbXkgaW4KKyMgZ2VuZXJpYy8KKyMgdWRpdi13LXNkaXYgIE8KKworIyBBbmQgd2UgbmVlZCB0byBoYXZlIGNvbmRpdGlvbmFscyBmb3IgYWxsIG1vZHVsZXMgYmVjYXVzZQorIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhleSBhcmUgLmMgb3IgLlMuICBWZXJ5IHVnbHk7IEkga25vdy4KKyMgUmVtZW1iZXIgdG8gZGVmaW5lIHRoZW0gYWxsIGluIGNvbmZpZ3VyZS5hYworaWYgTVBJX01PRF9BU01fTVBJSF9BREQxCittcGloX2FkZDEgPSBtcGloLWFkZDEtYXNtLlMKK2Vsc2UKK2lmIE1QSV9NT0RfQ19NUElIX0FERDEKK21waWhfYWRkMSA9IG1waWgtYWRkMS5jCitlbHNlCittcGloX2FkZDEgPQorZW5kaWYKK2VuZGlmCisKK2lmIE1QSV9NT0RfQVNNX01QSUhfU1VCMQorbXBpaF9zdWIxID0gbXBpaC1zdWIxLWFzbS5TCitlbHNlCitpZiBNUElfTU9EX0NfTVBJSF9TVUIxCittcGloX3N1YjEgPSBtcGloLXN1YjEuYworZWxzZQorbXBpaF9zdWIxID0KK2VuZGlmCitlbmRpZgorCitpZiBNUElfTU9EX0FTTV9NUElIX01VTDEKK21waWhfbXVsMSA9IG1waWgtbXVsMS1hc20uUworZWxzZQoraWYgTVBJX01PRF9DX01QSUhfTVVMMQorbXBpaF9tdWwxID0gbXBpaC1tdWwxLmMKK2Vsc2UKK21waWhfbXVsMSA9CitlbmRpZgorZW5kaWYKKworaWYgTVBJX01PRF9BU01fTVBJSF9NVUwyCittcGloX211bDIgPSBtcGloLW11bDItYXNtLlMKK2Vsc2UKK2lmIE1QSV9NT0RfQ19NUElIX01VTDIKK21waWhfbXVsMiA9IG1waWgtbXVsMi5jCitlbHNlCittcGloX211bDIgPQorZW5kaWYKK2VuZGlmCisKK2lmIE1QSV9NT0RfQVNNX01QSUhfTVVMMworbXBpaF9tdWwzID0gbXBpaC1tdWwzLWFzbS5TCitlbHNlCitpZiBNUElfTU9EX0NfTVBJSF9NVUwzCittcGloX211bDMgPSBtcGloLW11bDMuYworZWxzZQorbXBpaF9tdWwzID0KK2VuZGlmCitlbmRpZgorCitpZiBNUElfTU9EX0FTTV9NUElIX0xTSElGVAorbXBpaF9sc2hpZnQgPSBtcGloLWxzaGlmdC1hc20uUworZWxzZQoraWYgTVBJX01PRF9DX01QSUhfTFNISUZUCittcGloX2xzaGlmdCA9IG1waWgtbHNoaWZ0LmMKK2Vsc2UKK21waWhfbHNoaWZ0ID0KK2VuZGlmCitlbmRpZgorCitpZiBNUElfTU9EX0FTTV9NUElIX1JTSElGVAorbXBpaF9yc2hpZnQgPSBtcGloLXJzaGlmdC1hc20uUworZWxzZQoraWYgTVBJX01PRF9DX01QSUhfUlNISUZUCittcGloX3JzaGlmdCA9IG1waWgtcnNoaWZ0LmMKK2Vsc2UKK21waWhfcnNoaWZ0ID0KK2VuZGlmCitlbmRpZgorCitpZiBNUElfTU9EX0FTTV9VRElWCit1ZGl2ID0gdWRpdi1hc20uUworZWxzZQoraWYgTVBJX01PRF9DX1VESVYKK3VkaXYgPSB1ZGl2LmMKK2Vsc2UKK3VkaXYgPQorZW5kaWYKK2VuZGlmCisKK2lmIE1QSV9NT0RfQVNNX1VESVZfUVJOTkQKK3VkaXZfcXJubmQgPSB1ZGl2LXFybm5kLWFzbS5TCitlbHNlCitpZiBNUElfTU9EX0NfVURJVl9RUk5ORAordWRpdl9xcm5uZCA9IHVkaXYtcXJubmQuYworZWxzZQordWRpdl9xcm5uZCA9CitlbmRpZgorZW5kaWYKKworbm9pbnN0X0xUTElCUkFSSUVTID0gbGlibXBpLmxhCisKK2xpYm1waV9sYV9MREZMQUdTID0KK25vZGlzdF9saWJtcGlfbGFfU09VUkNFUyA9ICQobXBpaF9hZGQxKSAkKG1waWhfc3ViMSkgJChtcGloX211bDEpIFwKKwkkKG1waWhfbXVsMikgJChtcGloX211bDMpICQobXBpaF9sc2hpZnQpICQobXBpaF9yc2hpZnQpIFwKKwkkKHVkaXYpICQodWRpdl9xcm5uZCkKK2xpYm1waV9sYV9TT1VSQ0VTID0gbG9uZ2xvbmcuaAkgICBcCisJICAgICAgbXBpLWFkZC5jICAgICAgXAorCSAgICAgIG1waS1iaXQuYyAgICAgIFwKKwkgICAgICBtcGktY21wLmMgICAgICBcCisJICAgICAgbXBpLWRpdi5jICAgICAgXAorCSAgICAgIG1waS1nY2QuYyAgICAgIFwKKwkgICAgICBtcGktaW50ZXJuYWwuaCBcCisJICAgICAgbXBpLWlubGluZS5oICAgXAorCSAgICAgIG1waS1pbmxpbmUuYyAgIFwKKwkgICAgICBtcGktaW52LmMgICAgICBcCisJICAgICAgbXBpLW11bC5jICAgICAgXAorCSAgICAgIG1waS1tb2QuYyAgICAgIFwKKwkgICAgICBtcGktcG93LmMgICAgICBcCisJICAgICAgbXBpLW1wb3cuYyAgICAgXAorCSAgICAgIG1waS1zY2FuLmMgICAgIFwKKwkgICAgICBtcGljb2Rlci5jICAgICBcCisJICAgICAgbXBpaC1kaXYuYyAgICAgXAorCSAgICAgIG1waWgtbXVsLmMgICAgIFwKKwkgICAgICBtcGl1dGlsLmMgICAgICBcCisgICAgICAgICAgICAgIGVjLmMgZWMtaW50ZXJuYWwuaCBlYy1lZDI1NTE5LmMKZGlmZiAtLWdpdCBhL21waS9NYWtlZmlsZS5pbiBiL21waS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA3OThkCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzcxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisjIDEuNSBsZWFkcyB0byBhIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIGR1ZSB0byBhbGwgdGhlIGNvbmRpdGlvbmFscworIyBJIHdhcyBub3QgYWJsZSB0byBidWlsZCBpdCB3aXRoIDY0TWVncyAtIDEuNiBmaXhlcyB0aGlzLgorIyBub3QgYW55bW9yZSByZXF1aXJlZDogQVVUT01BS0VfT1BUSU9OUyA9IDEuNgorCitWUEFUSCA9IEBzcmNkaXJACithbV9fbWFrZV9kcnlydW4gPSBcCisgIHsgXAorICAgIGFtX19kcnk9bm87IFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAorICAgICAgKikgXAorICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAorICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKKyAgICAgICAgICAgICo9KnwtLSopIDs7IFwKKyAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAorICAgICAgICAgIGVzYWM7IFwKKyAgICAgICAgZG9uZTs7IFwKKyAgICBlc2FjOyBcCisgICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKKyAgfQorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbXBpCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2dwZy1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9jay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25vZXhlY3N0YWNrLm00ICQodG9wX3NyY2RpcikvbTQvb25jZW9ubHkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc29ja2xlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N5c19zb2NrZXRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90aHJlYWRsaWIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCitsaWJtcGlfbGFfTElCQUREID0KK2FtX2xpYm1waV9sYV9PQkpFQ1RTID0gbXBpLWFkZC5sbyBtcGktYml0LmxvIG1waS1jbXAubG8gbXBpLWRpdi5sbyBcCisJbXBpLWdjZC5sbyBtcGktaW5saW5lLmxvIG1waS1pbnYubG8gbXBpLW11bC5sbyBtcGktbW9kLmxvIFwKKwltcGktcG93LmxvIG1waS1tcG93LmxvIG1waS1zY2FuLmxvIG1waWNvZGVyLmxvIG1waWgtZGl2LmxvIFwKKwltcGloLW11bC5sbyBtcGl1dGlsLmxvIGVjLmxvIGVjLWVkMjU1MTkubG8KK0BNUElfTU9EX0FTTV9NUElIX0FERDFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX0FERDFfVFJVRUBhbV9fb2JqZWN0c18xID0gbXBpaC1hZGQxLmxvCitATVBJX01PRF9BU01fTVBJSF9BREQxX1RSVUVAYW1fX29iamVjdHNfMSA9IG1waWgtYWRkMS1hc20ubG8KK0BNUElfTU9EX0FTTV9NUElIX1NVQjFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX1NVQjFfVFJVRUBhbV9fb2JqZWN0c18yID0gbXBpaC1zdWIxLmxvCitATVBJX01PRF9BU01fTVBJSF9TVUIxX1RSVUVAYW1fX29iamVjdHNfMiA9IG1waWgtc3ViMS1hc20ubG8KK0BNUElfTU9EX0FTTV9NUElIX01VTDFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDFfVFJVRUBhbV9fb2JqZWN0c18zID0gbXBpaC1tdWwxLmxvCitATVBJX01PRF9BU01fTVBJSF9NVUwxX1RSVUVAYW1fX29iamVjdHNfMyA9IG1waWgtbXVsMS1hc20ubG8KK0BNUElfTU9EX0FTTV9NUElIX01VTDJfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDJfVFJVRUBhbV9fb2JqZWN0c180ID0gbXBpaC1tdWwyLmxvCitATVBJX01PRF9BU01fTVBJSF9NVUwyX1RSVUVAYW1fX29iamVjdHNfNCA9IG1waWgtbXVsMi1hc20ubG8KK0BNUElfTU9EX0FTTV9NUElIX01VTDNfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDNfVFJVRUBhbV9fb2JqZWN0c181ID0gbXBpaC1tdWwzLmxvCitATVBJX01PRF9BU01fTVBJSF9NVUwzX1RSVUVAYW1fX29iamVjdHNfNSA9IG1waWgtbXVsMy1hc20ubG8KK0BNUElfTU9EX0FTTV9NUElIX0xTSElGVF9GQUxTRUBATVBJX01PRF9DX01QSUhfTFNISUZUX1RSVUVAYW1fX29iamVjdHNfNiA9IG1waWgtbHNoaWZ0LmxvCitATVBJX01PRF9BU01fTVBJSF9MU0hJRlRfVFJVRUBhbV9fb2JqZWN0c182ID0gbXBpaC1sc2hpZnQtYXNtLmxvCitATVBJX01PRF9BU01fTVBJSF9SU0hJRlRfRkFMU0VAQE1QSV9NT0RfQ19NUElIX1JTSElGVF9UUlVFQGFtX19vYmplY3RzXzcgPSBtcGloLXJzaGlmdC5sbworQE1QSV9NT0RfQVNNX01QSUhfUlNISUZUX1RSVUVAYW1fX29iamVjdHNfNyA9IG1waWgtcnNoaWZ0LWFzbS5sbworQE1QSV9NT0RfQVNNX1VESVZfRkFMU0VAQE1QSV9NT0RfQ19VRElWX1RSVUVAYW1fX29iamVjdHNfOCA9IHVkaXYubG8KK0BNUElfTU9EX0FTTV9VRElWX1RSVUVAYW1fX29iamVjdHNfOCA9IHVkaXYtYXNtLmxvCitATVBJX01PRF9BU01fVURJVl9RUk5ORF9GQUxTRUBATVBJX01PRF9DX1VESVZfUVJOTkRfVFJVRUBhbV9fb2JqZWN0c185ID0gdWRpdi1xcm5uZC5sbworQE1QSV9NT0RfQVNNX1VESVZfUVJOTkRfVFJVRUBhbV9fb2JqZWN0c185ID0gdWRpdi1xcm5uZC1hc20ubG8KK25vZGlzdF9saWJtcGlfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgXAorCSQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpIFwKKwkkKGFtX19vYmplY3RzXzkpCitsaWJtcGlfbGFfT0JKRUNUUyA9ICQoYW1fbGlibXBpX2xhX09CSkVDVFMpIFwKKwkkKG5vZGlzdF9saWJtcGlfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYm1waV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJtcGlfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NQUEFTQ09NUElMRSA9ICQoQ0NBUykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCitMVENQUEFTQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDQVMpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0NBU0ZMQUdTKSAkKENDQVNGTEFHUykKK0FNX1ZfQ1BQQVMgPSAkKGFtX192X0NQUEFTX0BBTV9WQCkKK2FtX192X0NQUEFTXyA9ICQoYW1fX3ZfQ1BQQVNfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DUFBBU18wID0gQGVjaG8gIiAgQ1BQQVMgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGlibXBpX2xhX1NPVVJDRVMpICQobm9kaXN0X2xpYm1waV9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJtcGlfbGFfU09VUkNFUykKK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0ZJTEVWRVJTSU9OID0gQEJVSUxEX0ZJTEVWRVJTSU9OQAorQlVJTERfUkVWSVNJT04gPSBAQlVJTERfUkVWSVNJT05ACitCVUlMRF9USU1FU1RBTVAgPSBAQlVJTERfVElNRVNUQU1QQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkFMTEJBQ0tfU09DS0xFTl9UID0gQEZBTExCQUNLX1NPQ0tMRU5fVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NSWVBUX0NJUEhFUlMgPSBAR0NSWVBUX0NJUEhFUlNACitHQ1JZUFRfRElHRVNUUyA9IEBHQ1JZUFRfRElHRVNUU0AKK0dDUllQVF9IV0ZfTU9EVUxFUyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACitHQ1JZUFRfS0RGUyA9IEBHQ1JZUFRfS0RGU0AKK0dDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitHQ1JZUFRfUkFORE9NID0gQEdDUllQVF9SQU5ET01ACitHUEdfRVJST1JfQ0ZMQUdTID0gQEdQR19FUlJPUl9DRkxBR1NACitHUEdfRVJST1JfQ09ORklHID0gQEdQR19FUlJPUl9DT05GSUdACitHUEdfRVJST1JfTElCUyA9IEBHUEdfRVJST1JfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0lOU0VSVF9TWVNfU0VMRUNUX0ggPSBASU5TRVJUX1NZU19TRUxFQ1RfSEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJHQ1JZUFRfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfQ0lQSEVSU0AKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04gPSBATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTID0gQExJQkdDUllQVF9DT05GSUdfQ0ZMQUdTQAorTElCR0NSWVBUX0NPTkZJR19IT1NUID0gQExJQkdDUllQVF9DT05GSUdfSE9TVEAKK0xJQkdDUllQVF9DT05GSUdfTElCUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0xJQlNACitMSUJHQ1JZUFRfRElHRVNUUyA9IEBMSUJHQ1JZUFRfRElHRVNUU0AKK0xJQkdDUllQVF9MVF9BR0UgPSBATElCR0NSWVBUX0xUX0FHRUAKK0xJQkdDUllQVF9MVF9DVVJSRU5UID0gQExJQkdDUllQVF9MVF9DVVJSRU5UQAorTElCR0NSWVBUX0xUX1JFVklTSU9OID0gQExJQkdDUllQVF9MVF9SRVZJU0lPTkAKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMgPSBATElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK01QSV9TRkxBR1MgPSBATVBJX1NGTEFHU0AKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PRVhFQ1NUQUNLX0ZMQUdTID0gQE5PRVhFQ1NUQUNLX0ZMQUdTQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQVEhfQ0ZMQUdTID0gQFBUSF9DRkxBR1NACitQVEhfQ09ORklHID0gQFBUSF9DT05GSUdACitQVEhfTElCUyA9IEBQVEhfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitSQyA9IEBSQ0AKK1JVTl9MQVJHRV9EQVRBX1RFU1RTID0gQFJVTl9MQVJHRV9EQVRBX1RFU1RTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1NZU19TT0NLRVRfSCA9IEBTWVNfU09DS0VUX0hACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OX05VTUJFUiA9IEBWRVJTSU9OX05VTUJFUkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW4gPSBAZW1hY3NfbG9jYWxfdmFyc19iZWdpbkAKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kID0gQGVtYWNzX2xvY2FsX3ZhcnNfZW5kQAorZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHkgPSBAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgTmVlZCB0byBpbmNsdWRlIC4uL3NyYyBpbiBhZGRpdGlvbiB0byB0b3Bfc3JjZGlyIGJlY2F1c2UgZ2NyeXB0LmggaXMKKyMgYSBidWlsdCBoZWFkZXIuCitBTV9DUFBGTEFHUyA9IC1JLi4vc3JjIC1JJCh0b3Bfc3JjZGlyKS9zcmMKK0FNX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK0FNX0FTRkxBR1MgPSAkKE1QSV9TRkxBR1MpCitBTV9DQ0FTRkxBR1MgPSAkKE5PRVhFQ1NUQUNLX0ZMQUdTKQorRVhUUkFfRElTVCA9IE1hbmlmZXN0IGNvbmZpZy5saW5rcworRElTVENMRUFORklMRVMgPSBtcGktYXNtLWRlZnMuaCBcCisgICAgICAgICAgICAgICAgIG1waWgtYWRkMS1hc20uUyBtcGloLW11bDEtYXNtLlMgbXBpaC1tdWwyLWFzbS5TIG1waWgtbXVsMy1hc20uUyAgXAorCQkgbXBpaC1sc2hpZnQtYXNtLlMgbXBpaC1yc2hpZnQtYXNtLlMgbXBpaC1zdWIxLWFzbS5TIGFzbS1zeW50YXguaCBcCisgICAgICAgICAgICAgICAgIG1waWgtYWRkMS5jIG1waWgtbXVsMS5jIG1waWgtbXVsMi5jIG1waWgtbXVsMy5jICBcCisJCSBtcGloLWxzaGlmdC5jIG1waWgtcnNoaWZ0LmMgbXBpaC1zdWIxLmMgXAorCSAgICAgICAgIHN5c2RlcC5oIG1vZC1zb3VyY2UtaW5mby5oCisKK0BNUElfTU9EX0FTTV9NUElIX0FERDFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX0FERDFfRkFMU0VAbXBpaF9hZGQxID0gCitATVBJX01PRF9BU01fTVBJSF9BREQxX0ZBTFNFQEBNUElfTU9EX0NfTVBJSF9BREQxX1RSVUVAbXBpaF9hZGQxID0gbXBpaC1hZGQxLmMKKworIyBCZXdhcmU6IFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgYSBjb21tZW50IGJ1dCBncmVwcGVkIGJ5CisjICAgICAgICAgY29uZmlnLmxpbmtzIHRvIGdldCB0aGUgbGlzdCBvZiBzeW1saW5rZWQgbW9kdWxlcworIyAgICAgICAgIE9wdGlvbmFsIG1vZHVsZXMgYXJlIG1hcmtlZCB3aXRoIGFuIE8gaW4gdGhlIHNlY29uZCBjb2x1bW4uCisjQkVHSU5fQVNNX0xJU1QKKyMgbXBpaC1hZGQxICAgIEMKKyMgbXBpaC1zdWIxICAgIEMKKyMgbXBpaC1tdWwxICAgIEMKKyMgbXBpaC1tdWwyICAgIEMKKyMgbXBpaC1tdWwzICAgIEMKKyMgbXBpaC1sc2hpZnQgIEMKKyMgbXBpaC1yc2hpZnQgIEMKKyMgdWRpdiAgICAgICAgIE8KKyMgdWRpdi1xcm5uZCAgIE8KKyNFTkRfQVNNX0xJU1QKKworIyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuICBUaGVyZSBpcyBvbmx5IGEgZHVtbXkgaW4KKyMgZ2VuZXJpYy8KKyMgdWRpdi13LXNkaXYgIE8KKworIyBBbmQgd2UgbmVlZCB0byBoYXZlIGNvbmRpdGlvbmFscyBmb3IgYWxsIG1vZHVsZXMgYmVjYXVzZQorIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhleSBhcmUgLmMgb3IgLlMuICBWZXJ5IHVnbHk7IEkga25vdy4KKyMgUmVtZW1iZXIgdG8gZGVmaW5lIHRoZW0gYWxsIGluIGNvbmZpZ3VyZS5hYworQE1QSV9NT0RfQVNNX01QSUhfQUREMV9UUlVFQG1waWhfYWRkMSA9IG1waWgtYWRkMS1hc20uUworQE1QSV9NT0RfQVNNX01QSUhfU1VCMV9GQUxTRUBATVBJX01PRF9DX01QSUhfU1VCMV9GQUxTRUBtcGloX3N1YjEgPSAKK0BNUElfTU9EX0FTTV9NUElIX1NVQjFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX1NVQjFfVFJVRUBtcGloX3N1YjEgPSBtcGloLXN1YjEuYworQE1QSV9NT0RfQVNNX01QSUhfU1VCMV9UUlVFQG1waWhfc3ViMSA9IG1waWgtc3ViMS1hc20uUworQE1QSV9NT0RfQVNNX01QSUhfTVVMMV9GQUxTRUBATVBJX01PRF9DX01QSUhfTVVMMV9GQUxTRUBtcGloX211bDEgPSAKK0BNUElfTU9EX0FTTV9NUElIX01VTDFfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDFfVFJVRUBtcGloX211bDEgPSBtcGloLW11bDEuYworQE1QSV9NT0RfQVNNX01QSUhfTVVMMV9UUlVFQG1waWhfbXVsMSA9IG1waWgtbXVsMS1hc20uUworQE1QSV9NT0RfQVNNX01QSUhfTVVMMl9GQUxTRUBATVBJX01PRF9DX01QSUhfTVVMMl9GQUxTRUBtcGloX211bDIgPSAKK0BNUElfTU9EX0FTTV9NUElIX01VTDJfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDJfVFJVRUBtcGloX211bDIgPSBtcGloLW11bDIuYworQE1QSV9NT0RfQVNNX01QSUhfTVVMMl9UUlVFQG1waWhfbXVsMiA9IG1waWgtbXVsMi1hc20uUworQE1QSV9NT0RfQVNNX01QSUhfTVVMM19GQUxTRUBATVBJX01PRF9DX01QSUhfTVVMM19GQUxTRUBtcGloX211bDMgPSAKK0BNUElfTU9EX0FTTV9NUElIX01VTDNfRkFMU0VAQE1QSV9NT0RfQ19NUElIX01VTDNfVFJVRUBtcGloX211bDMgPSBtcGloLW11bDMuYworQE1QSV9NT0RfQVNNX01QSUhfTVVMM19UUlVFQG1waWhfbXVsMyA9IG1waWgtbXVsMy1hc20uUworQE1QSV9NT0RfQVNNX01QSUhfTFNISUZUX0ZBTFNFQEBNUElfTU9EX0NfTVBJSF9MU0hJRlRfRkFMU0VAbXBpaF9sc2hpZnQgPSAKK0BNUElfTU9EX0FTTV9NUElIX0xTSElGVF9GQUxTRUBATVBJX01PRF9DX01QSUhfTFNISUZUX1RSVUVAbXBpaF9sc2hpZnQgPSBtcGloLWxzaGlmdC5jCitATVBJX01PRF9BU01fTVBJSF9MU0hJRlRfVFJVRUBtcGloX2xzaGlmdCA9IG1waWgtbHNoaWZ0LWFzbS5TCitATVBJX01PRF9BU01fTVBJSF9SU0hJRlRfRkFMU0VAQE1QSV9NT0RfQ19NUElIX1JTSElGVF9GQUxTRUBtcGloX3JzaGlmdCA9IAorQE1QSV9NT0RfQVNNX01QSUhfUlNISUZUX0ZBTFNFQEBNUElfTU9EX0NfTVBJSF9SU0hJRlRfVFJVRUBtcGloX3JzaGlmdCA9IG1waWgtcnNoaWZ0LmMKK0BNUElfTU9EX0FTTV9NUElIX1JTSElGVF9UUlVFQG1waWhfcnNoaWZ0ID0gbXBpaC1yc2hpZnQtYXNtLlMKK0BNUElfTU9EX0FTTV9VRElWX0ZBTFNFQEBNUElfTU9EX0NfVURJVl9GQUxTRUB1ZGl2ID0gCitATVBJX01PRF9BU01fVURJVl9GQUxTRUBATVBJX01PRF9DX1VESVZfVFJVRUB1ZGl2ID0gdWRpdi5jCitATVBJX01PRF9BU01fVURJVl9UUlVFQHVkaXYgPSB1ZGl2LWFzbS5TCitATVBJX01PRF9BU01fVURJVl9RUk5ORF9GQUxTRUBATVBJX01PRF9DX1VESVZfUVJOTkRfRkFMU0VAdWRpdl9xcm5uZCA9IAorQE1QSV9NT0RfQVNNX1VESVZfUVJOTkRfRkFMU0VAQE1QSV9NT0RfQ19VRElWX1FSTk5EX1RSVUVAdWRpdl9xcm5uZCA9IHVkaXYtcXJubmQuYworQE1QSV9NT0RfQVNNX1VESVZfUVJOTkRfVFJVRUB1ZGl2X3Fybm5kID0gdWRpdi1xcm5uZC1hc20uUworbm9pbnN0X0xUTElCUkFSSUVTID0gbGlibXBpLmxhCitsaWJtcGlfbGFfTERGTEFHUyA9IAorbm9kaXN0X2xpYm1waV9sYV9TT1VSQ0VTID0gJChtcGloX2FkZDEpICQobXBpaF9zdWIxKSAkKG1waWhfbXVsMSkgXAorCSQobXBpaF9tdWwyKSAkKG1waWhfbXVsMykgJChtcGloX2xzaGlmdCkgJChtcGloX3JzaGlmdCkgXAorCSQodWRpdikgJCh1ZGl2X3Fybm5kKQorCitsaWJtcGlfbGFfU09VUkNFUyA9IGxvbmdsb25nLmgJICAgXAorCSAgICAgIG1waS1hZGQuYyAgICAgIFwKKwkgICAgICBtcGktYml0LmMgICAgICBcCisJICAgICAgbXBpLWNtcC5jICAgICAgXAorCSAgICAgIG1waS1kaXYuYyAgICAgIFwKKwkgICAgICBtcGktZ2NkLmMgICAgICBcCisJICAgICAgbXBpLWludGVybmFsLmggXAorCSAgICAgIG1waS1pbmxpbmUuaCAgIFwKKwkgICAgICBtcGktaW5saW5lLmMgICBcCisJICAgICAgbXBpLWludi5jICAgICAgXAorCSAgICAgIG1waS1tdWwuYyAgICAgIFwKKwkgICAgICBtcGktbW9kLmMgICAgICBcCisJICAgICAgbXBpLXBvdy5jICAgICAgXAorCSAgICAgIG1waS1tcG93LmMgICAgIFwKKwkgICAgICBtcGktc2Nhbi5jICAgICBcCisJICAgICAgbXBpY29kZXIuYyAgICAgXAorCSAgICAgIG1waWgtZGl2LmMgICAgIFwKKwkgICAgICBtcGloLW11bC5jICAgICBcCisJICAgICAgbXBpdXRpbC5jICAgICAgXAorICAgICAgICAgICAgICBlYy5jIGVjLWludGVybmFsLmggZWMtZWQyNTUxOS5jCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLlMgLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IG1waS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBtcGkvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYm1waS5sYTogJChsaWJtcGlfbGFfT0JKRUNUUykgJChsaWJtcGlfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYm1waV9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGlibXBpX2xhX0xJTkspICAkKGxpYm1waV9sYV9PQkpFQ1RTKSAkKGxpYm1waV9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VjLWVkMjU1MTkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waS1hZGQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGktYml0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpLWNtcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waS1kaXYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGktZ2NkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpLWlubGluZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waS1pbnYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGktbW9kLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpLW1wb3cuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGktbXVsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpLXBvdy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waS1zY2FuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpY29kZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLWFkZDEtYXNtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1hZGQxLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1kaXYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLWxzaGlmdC1hc20uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLWxzaGlmdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waWgtbXVsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1tdWwxLWFzbS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waWgtbXVsMS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waWgtbXVsMi1hc20uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLW11bDIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLW11bDMtYXNtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1tdWwzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1yc2hpZnQtYXNtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1yc2hpZnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGloLXN1YjEtYXNtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpaC1zdWIxLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXBpdXRpbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VkaXYtYXNtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdWRpdi1xcm5uZC1hc20uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91ZGl2LXFybm5kLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdWRpdi5QbG9AYW1fX3F1b3RlQAorCisuUy5vOgorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLlMub2JqOgorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisKKy5TLmxvOgorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpJChMVENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2RlcEApJChMVENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKwktdGVzdCAteiAiJChESVNUQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoRElTVENMRUFORklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL21waS9NYW5pZmVzdCBiL21waS9NYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjBkNjczCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL01hbmlmZXN0CkBAIC0wLDAgKzEsNDEgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgb2YgdGhlIG1waSBkaXJlY3RvcnkKKyMgQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK01ha2VmaWxlLmFtCitjb25maWcubGlua3MKK2xvbmdsb25nLmgKK21waS1hZGQuYworbXBpLWJpdC5jCittcGktY21wLmMKK21waS1kaXYuYworbXBpLWdjZC5jCittcGktaW5saW5lLmMKK21waS1pbmxpbmUuaAorbXBpLWludGVybmFsLmgKK21waS1pbnYuYworbXBpLW1wb3cuYworbXBpLW11bC5jCittcGktcG93LmMKK21waS1zY2FuLmMKK21waWNvZGVyLmMKK21waWgtZGl2LmMKK21waWgtbXVsLmMKK21waXV0aWwuYworJG5hbWVzJCBpUUNWQXdVQVArTG1mREVBbnA4MzJTLzdBUUtaSlFRQWtSL2dRSVRVTSs2WWd5OVdBT0FPMTdidHlLQWxDdEdUWHA1WFNaK0ozWDBvL3JZbmVSZFNDVzg5SUp2d0ZSSmpBT2NGSmQ1Mk1YczZaVkZGL1JRQkM4TXZKenVRQ2hiRXp2aWhLOG8yVmdLMzRZV2pVKzZYSDlzRmdSTUlnemtIcy81MVpaeGVRVU9QeTFYRjdUeUtCMFdFN1lCVVZpc0ZpUmFxQjFxR0lPcz09WjNxQgorCmRpZmYgLS1naXQgYS9tcGkvYWxwaGEvUkVBRE1FIGIvbXBpL2FscGhhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWMwYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FscGhhL1JFQURNRQpAQCAtMCwwICsxLDUzIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIG9wdGltaXplZCBmb3IgREVDIEFscGhhIHByb2Nlc3NvcnMuCisKK1JFTEVWQU5UIE9QVElNSVpBVElPTiBJU1NVRVMKKworRVY0CisKKzEuIFRoaXMgY2hpcCBoYXMgdmVyeSBsaW1pdGVkIHN0b3JlIGJhbmR3aWR0aC4gIFRoZSBvbi1jaGlwIEwxIGNhY2hlIGlzCit3cml0ZS10aHJvdWdoLCBhbmQgYSBjYWNoZSBsaW5lIGlzIHRyYW5zZmVyZWQgZnJvbSB0aGUgc3RvcmUgYnVmZmVyIHRvIHRoZQorb2ZmLWNoaXAgTDIgaW4gYXMgbXVjaCAxNSBjeWNsZXMgb24gbW9zdCBzeXN0ZW1zLiAgVGhpcyBkZWxheSBodXJ0cworbXBuX2FkZF9uLCBtcG5fc3ViX24sIG1wbl9sc2hpZnQsIGFuZCBtcG5fcnNoaWZ0LgorCisyLiBQYWlyaW5nIGlzIHBvc3NpYmxlIGJldHdlZW4gbWVtb3J5IGluc3RydWN0aW9ucyBhbmQgaW50ZWdlciBhcml0aG1ldGljCitpbnN0cnVjdGlvbnMuCisKKzMuIG11bHEgYW5kIHVtdWxoIGlzIGRvY3VtZW50ZWQgdG8gaGF2ZSBhIGxhdGVuY3kgb2YgMjMgY3ljbGVzLCBidXQgMiBvZgordGhlc2UgY3ljbGVzIGFyZSBwaXBlbGluZWQuICBUaHVzLCBtdWx0aXBseSBpbnN0cnVjdGlvbnMgY2FuIGJlIGlzc3VlZCBhdCBhCityYXRlIG9mIG9uZSBlYWNoIDIxbmQgY3ljbGUuCisKK0VWNQorCisxLiBUaGUgbWVtb3J5IGJhbmR3aWR0aCBvZiB0aGlzIGNoaXAgc2VlbXMgZXhjZWxsZW50LCBib3RoIGZvciBsb2FkcyBhbmQKK3N0b3Jlcy4gIEV2ZW4gd2hlbiB0aGUgd29ya2luZyBzZXQgaXMgbGFyZ2VyIHRoYW4gdGhlIG9uLWNoaXAgTDEgYW5kIEwyCitjYWNoZXMsIHRoZSBwZXJmcm9tYW5jZSByZW1haW4gYWxtb3N0IHVuYWZmZWN0ZWQuCisKKzIuIG11bHEgaGFzIGEgbWVhc3VyZWQgbGF0ZW5jeSBvZiAxMyBjeWNsZXMgYW5kIGFuIGlzc3VlIHJhdGUgb2YgMSBlYWNoIDh0aAorY3ljbGUuICB1bXVsaCBoYXMgYSBtZWFzdXJlZCBsYXRlbmN5IG9mIDE1IGN5Y2xlcyBhbmQgYW4gaXNzdWUgcmF0ZSBvZiAxCitlYWNoIDEwdGggY3ljbGUuICBCdXQgdGhlIGV4YWN0IHRpbWluZyBpcyBzb21ld2hhdCBjb25mdXNpbmcuCisKKzMuIG1wbl9hZGRfbi4gIFdpdGggNC1mb2xkIHVucm9sbGluZywgd2UgbmVlZCAzNyBpbnN0cnVjdGlvbnMsIHdoZXJlb2YgMTIKKyAgIGFyZSBtZW1vcnkgb3BlcmF0aW9ucy4gIFRoaXMgd2lsbCB0YWtlIGF0IGxlYXN0CisJY2VpbCgzNy8yKSBbZHVhbCBpc3N1ZV0gKyAxIFt0YWtlbiBicmFuY2hdID0gMjAgY3ljbGVzCisgICBXZSBoYXZlIDEyIG1lbW9yeSBjeWNsZXMsIHBsdXMgNCBhZnRlci1zdG9yZSBjb25mbGljdCBjeWNsZXMsIG9yIDE2IGRhdGEKKyAgIGNhY2hlIGN5Y2xlcywgd2hpY2ggc2hvdWxkIGJlIGNvbXBsZXRlbHkgaGlkZGVuIGluIHRoZSAyMCBpc3N1ZSBjeWNsZXMuCisgICBUaGUgY29tcHV0YXRpb24gaXMgaW5oZXJlbnRseSBzZXJpYWwsIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzOgorICAgICBhZGRxCisgICAgIC8gICBcCisgICBhZGRxICBjbXB1bHQKKyAgICAgfCAgICAgfAorICAgY21wdWx0ICB8CisgICAgICAgXCAgLworICAgICAgICBvcgorICAgSS5lLiwgdGhlcmUgaXMgYSA0IGN5Y2xlIHBhdGggZm9yIGVhY2ggbGltYiwgbWFraW5nIDE2IGN5Y2xlcyB0aGUgYWJzb2x1dGUKKyAgIG1pbmltdW0uICBXZSBjb3VsZCByZXBsYWNlIHRoZSBgb3InIHdpdGggYSBjbW92ZXEvY21vdm5lLCB3aGljaCB3b3VsZCBzYXZlCisgICBhIGN5Y2xlIG9uIEVWNSwgYnV0IHRoYXQgbWlnaHQgd2FzdGUgYSBjeWNsZSBvbiBFVjQuICBBbHNvLCBjbW92IHRha2VzIDIKKyAgIGN5Y2xlcy4KKyAgICAgYWRkcQorICAgICAvICAgXAorICAgYWRkcSAgY21wdWx0CisgICAgIHwgICAgICBcCisgICBjbXB1bHQgLT4gY21vdm5lCisKK1NUQVRVUworCmRpZmYgLS1naXQgYS9tcGkvYWxwaGEvZGlzdGZpbGVzIGIvbXBpL2FscGhhL2Rpc3RmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFiOWZjCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FscGhhL2Rpc3RmaWxlcwpAQCAtMCwwICsxLDExIEBACitSRUFETUUKK21waWgtYWRkMS5TCittcGloLXN1YjEuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworCit1ZGl2LXFybm5kLlMKKwpkaWZmIC0tZ2l0IGEvbXBpL2FscGhhL21waWgtYWRkMS5TIGIvbXBpL2FscGhhL21waWgtYWRkMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGJiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvYWxwaGEvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIGFscGhhICBhZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk4LCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqICBtcGlfbGltYl90CisgKiAgX2djcnlfbXBpaF9hZGRfbiggbXBpX3B0cl90IHJlc19wdHIsCSgkMTYpCisgKgkJICAgbXBpX3B0cl90IHMxX3B0ciwJKCQxNykKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkoJDE4KQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKCQxOSkKKyAqLworCisKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9hdAorLnRleHQKKwkuYWxpZ24JMworCS5nbG9ibAlfZ2NyeV9tcGloX2FkZF9uCisJLmVudAlfZ2NyeV9tcGloX2FkZF9uCitfZ2NyeV9tcGloX2FkZF9uOgorCS5mcmFtZQkkMzAsMCwkMjYsMAorCisJbGRxCSQzLDAoJDE3KQorCWxkcQkkNCwwKCQxOCkKKworCXN1YnEJJDE5LDEsJDE5CisJYW5kCSQxOSw0LTEsJDIJIyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCWJpcwkkMzEsJDMxLCQwCisJYmVxCSQyLC5MMAkJIyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKworCXN1YnEJJDE5LCQyLCQxOQorCisuTG9vcDA6IHN1YnEJJDIsMSwkMgorCWxkcQkkNSw4KCQxNykKKwlhZGRxCSQ0LCQwLCQ0CisJbGRxCSQ2LDgoJDE4KQorCWNtcHVsdAkkNCwkMCwkMQorCWFkZHEJJDMsJDQsJDQKKwljbXB1bHQJJDQsJDMsJDAKKwlzdHEJJDQsMCgkMTYpCisJb3IJJDAsJDEsJDAKKworCWFkZHEJJDE3LDgsJDE3CisJYWRkcQkkMTgsOCwkMTgKKwliaXMJJDUsJDUsJDMKKwliaXMJJDYsJDYsJDQKKwlhZGRxCSQxNiw4LCQxNgorCWJuZQkkMiwuTG9vcDAKKworLkwwOgliZXEJJDE5LC5MZW5kCisKKwkuYWxpZ24JMworLkxvb3A6CXN1YnEJJDE5LDQsJDE5CisKKwlsZHEJJDUsOCgkMTcpCisJYWRkcQkkNCwkMCwkNAorCWxkcQkkNiw4KCQxOCkKKwljbXB1bHQJJDQsJDAsJDEKKwlhZGRxCSQzLCQ0LCQ0CisJY21wdWx0CSQ0LCQzLCQwCisJc3RxCSQ0LDAoJDE2KQorCW9yCSQwLCQxLCQwCisKKwlsZHEJJDMsMTYoJDE3KQorCWFkZHEJJDYsJDAsJDYKKwlsZHEJJDQsMTYoJDE4KQorCWNtcHVsdAkkNiwkMCwkMQorCWFkZHEJJDUsJDYsJDYKKwljbXB1bHQJJDYsJDUsJDAKKwlzdHEJJDYsOCgkMTYpCisJb3IJJDAsJDEsJDAKKworCWxkcQkkNSwyNCgkMTcpCisJYWRkcQkkNCwkMCwkNAorCWxkcQkkNiwyNCgkMTgpCisJY21wdWx0CSQ0LCQwLCQxCisJYWRkcQkkMywkNCwkNAorCWNtcHVsdAkkNCwkMywkMAorCXN0cQkkNCwxNigkMTYpCisJb3IJJDAsJDEsJDAKKworCWxkcQkkMywzMigkMTcpCisJYWRkcQkkNiwkMCwkNgorCWxkcQkkNCwzMigkMTgpCisJY21wdWx0CSQ2LCQwLCQxCisJYWRkcQkkNSwkNiwkNgorCWNtcHVsdAkkNiwkNSwkMAorCXN0cQkkNiwyNCgkMTYpCisJb3IJJDAsJDEsJDAKKworCWFkZHEJJDE3LDMyLCQxNworCWFkZHEJJDE4LDMyLCQxOAorCWFkZHEJJDE2LDMyLCQxNgorCWJuZQkkMTksLkxvb3AKKworLkxlbmQ6CWFkZHEJJDQsJDAsJDQKKwljbXB1bHQJJDQsJDAsJDEKKwlhZGRxCSQzLCQ0LCQ0CisJY21wdWx0CSQ0LCQzLCQwCisJc3RxCSQ0LDAoJDE2KQorCW9yCSQwLCQxLCQwCisJcmV0CSQzMSwoJDI2KSwxCisKKwkuZW5kCV9nY3J5X21waWhfYWRkX24KKwpkaWZmIC0tZ2l0IGEvbXBpL2FscGhhL21waWgtbHNoaWZ0LlMgYi9tcGkvYWxwaGEvbXBpaC1sc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQ0YjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FscGhhL21waWgtbHNoaWZ0LlMKQEAgLTAsMCArMSwxMjIgQEAKKy8qIGFscGhhIC0gbGVmdCBzaGlmdAorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk4LCAyMDAxLAorICogICAgICAgICAgICAgICAgICAgIDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwJKHIxNikKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShyMTcpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHIxOCkKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShyMTkpCisgKgorICogVGhpcyBjb2RlIHJ1bnMgYXQgNC44IGN5Y2xlcy9saW1iIG9uIHRoZSAyMTA2NC4gIFdpdGggaW5maW5pdGUgdW5yb2xsaW5nLAorICogaXQgd291bGQgdGFrZSA0IGN5Y2xlcy9saW1iLiAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGdldCBkb3duIHRvIDMKKyAqIGN5Y2xlcy9saW1iIHNpbmNlIGJvdGggbGRxIGFuZCBzdHEgY2FuIGJlIHBhaXJlZCB3aXRoIHRoZSBvdGhlciB1c2VkCisgKiBpbnN0cnVjdGlvbnMuICBCdXQgdGhlcmUgYXJlIG1hbnkgcmVzdHJpY3Rpb25zIGluIHRoZSAyMTA2NCBwaXBlbGluZSB0aGF0CisgKiBtYWtlcyBpdCBoYXJkLCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gZ2V0IGRvd24gdG8gMyBjeWNsZXMvbGltYjoKKyAqCisgKiAxLiBsZHEgaGFzIGEgMyBjeWNsZSBkZWxheSwgc3JsIGFuZCBzbGwgaGF2ZSBhIDIgY3ljbGUgZGVsYXkuCisgKiAyLiBPbmx5IGFsaWduZWQgaW5zdHJ1Y3Rpb24gcGFpcnMgY2FuIGJlIHBhaXJlZC4KKyAqIDMuIFRoZSBzdG9yZSBidWZmZXIgb3Igc2lsbyBtaWdodCBub3QgYmUgYWJsZSB0byBkZWFsIHdpdGggdGhlIGJhbmR3aWR0aC4KKyAqLworCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy50ZXh0CisJLmFsaWduCTMKKwkuZ2xvYmwJX2djcnlfbXBpaF9sc2hpZnQKKwkuZW50CV9nY3J5X21waWhfbHNoaWZ0CitfZ2NyeV9tcGloX2xzaGlmdDoKKwkuZnJhbWUJJDMwLDAsJDI2LDAKKworCXM4YWRkcQkkMTgsJDE3LCQxNwkjIG1ha2UgcjE3IHBvaW50IGF0IGVuZCBvZiBzMQorCWxkcQkkNCwtOCgkMTcpCSMgbG9hZCBmaXJzdCBsaW1iCisJc3VicQkkMTcsOCwkMTcKKwlzdWJxCSQzMSwkMTksJDcKKwlzOGFkZHEJJDE4LCQxNiwkMTYJIyBtYWtlIHIxNiBwb2ludCBhdCBlbmQgb2YgUkVTCisJc3VicQkkMTgsMSwkMTgKKwlhbmQJJDE4LDQtMSwkMjAJIyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCXNybAkkNCwkNywkMAkjIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisKKwliZXEJJDIwLC5MMAorCXN1YnEJJDE4LCQyMCwkMTgKKworCS5hbGlnbgkzCisuTG9vcDA6CisJbGRxCSQzLC04KCQxNykKKwlzdWJxCSQxNiw4LCQxNgorCXN1YnEJJDE3LDgsJDE3CisJc3VicQkkMjAsMSwkMjAKKwlzbGwJJDQsJDE5LCQ1CisJc3JsCSQzLCQ3LCQ2CisJYmlzCSQzLCQzLCQ0CisJYmlzCSQ1LCQ2LCQ4CisJc3RxCSQ4LDAoJDE2KQorCWJuZQkkMjAsLkxvb3AwCisKKy5MMDoJYmVxCSQxOCwuTGVuZAorCisJLmFsaWduCTMKKy5Mb29wOglsZHEJJDMsLTgoJDE3KQorCXN1YnEJJDE2LDMyLCQxNgorCXN1YnEJJDE4LDQsJDE4CisJc2xsCSQ0LCQxOSwkNQorCXNybAkkMywkNywkNgorCisJbGRxCSQ0LC0xNigkMTcpCisJc2xsCSQzLCQxOSwkMQorCWJpcwkkNSwkNiwkOAorCXN0cQkkOCwyNCgkMTYpCisJc3JsCSQ0LCQ3LCQyCisKKwlsZHEJJDMsLTI0KCQxNykKKwlzbGwJJDQsJDE5LCQ1CisJYmlzCSQxLCQyLCQ4CisJc3RxCSQ4LDE2KCQxNikKKwlzcmwJJDMsJDcsJDYKKworCWxkcQkkNCwtMzIoJDE3KQorCXNsbAkkMywkMTksJDEKKwliaXMJJDUsJDYsJDgKKwlzdHEJJDgsOCgkMTYpCisJc3JsCSQ0LCQ3LCQyCisKKwlzdWJxCSQxNywzMiwkMTcKKwliaXMJJDEsJDIsJDgKKwlzdHEJJDgsMCgkMTYpCisKKwliZ3QJJDE4LC5Mb29wCisKKy5MZW5kOglzbGwJJDQsJDE5LCQ4CisJc3RxCSQ4LC04KCQxNikKKwlyZXQJJDMxLCgkMjYpLDEKKwkuZW5kCV9nY3J5X21waWhfbHNoaWZ0CisKKwpkaWZmIC0tZ2l0IGEvbXBpL2FscGhhL21waWgtbXVsMS5TIGIvbXBpL2FscGhhL21waWgtbXVsMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTFiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvYWxwaGEvbXBpaC1tdWwxLlMKQEAgLTAsMCArMSw5MCBAQAorLyogQWxwaGEgMjEwNjQgbXBpaC1tdWwxLlMgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKKyAqCQkJICAgICAgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NSwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsCShyMTYpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkocjE3KQorICoJCSAgbXBpX3NpemVfdCBzMV9zaXplLAkocjE4KQorICoJCSAgbXBpX2xpbWJfdCBzMl9saW1iKQkocjE5KQorICoKKyAqIFRoaXMgY29kZSBydW5zIGF0IDQyIGN5Y2xlcy9saW1iIG9uIHRoZSBFVjQgYW5kIDE4IGN5Y2xlcy9saW1iIG9uIHRoZSBFVjUuCisgKgorICogVG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgbG9uZyBtdWx0aXBsaWNhdGlvbnMsIHdlIHdvdWxkIHVzZQorICogJ2ZldGNoJyBmb3IgUzEgYW5kICdmZXRjaF9tJyBmb3IgUkVTLiAgSXQncyBub3Qgb2J2aW91cyBob3cgdG8gdXNlCisgKiB0aGVzZSBpbnN0cnVjdGlvbnMgd2l0aG91dCBzbG93aW5nIGRvd24gdGhlIGdlbmVyYWwgY29kZTogMS4gV2UgY2FuCisgKiBvbmx5IGhhdmUgdHdvIHByZWZldGNoZXMgaW4gb3BlcmF0aW9uIGF0IGFueSB0aW1lIGluIHRoZSBBbHBoYQorICogYXJjaGl0ZWN0dXJlLiAgMi4gVGhlcmUgd2lsbCBzZWxkb20gYmUgYW55IHNwZWNpYWwgYWxpZ25tZW50CisgKiBiZXR3ZWVuIFJFU19QVFIgYW5kIFMxX1BUUi4JTWF5YmUgd2UgY2FuIHNpbXBseSBkaXZpZGUgdGhlIGN1cnJlbnQKKyAqIGxvb3AgaW50byBhbiBpbm5lciBhbmQgb3V0ZXIgbG9vcCwgaGF2aW5nIHRoZSBpbm5lciBsb29wIGhhbmRsZQorICogZXhhY3RseSBvbmUgcHJlZmV0Y2ggYmxvY2s/CisgKi8KKworCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub2F0CisudGV4dAorCS5hbGlnbgkzCisJLmdsb2JsCV9nY3J5X21waWhfbXVsXzEKKwkuZW50CV9nY3J5X21waWhfbXVsXzEgMgorX2djcnlfbXBpaF9tdWxfMToKKwkuZnJhbWUJJDMwLDAsJDI2CisKKwlsZHEJJDIsMCgkMTcpCSMgJDIgPSBzMV9saW1iCisJc3VicQkkMTgsMSwkMTgJIyBzaXplLS0KKwltdWxxCSQyLCQxOSwkMwkjICQzID0gcHJvZF9sb3cKKwliaWMJJDMxLCQzMSwkNAkjIGNsZWFyIGN5X2xpbWIKKwl1bXVsaAkkMiwkMTksJDAJIyAkMCA9IHByb2RfaGlnaAorCWJlcQkkMTgsTGVuZDEJIyBqdW1wIGlmIHNpemUgd2FzID09IDEKKwlsZHEJJDIsOCgkMTcpCSMgJDIgPSBzMV9saW1iCisJc3VicQkkMTgsMSwkMTgJIyBzaXplLS0KKwlzdHEJJDMsMCgkMTYpCisJYmVxCSQxOCxMZW5kMgkjIGp1bXAgaWYgc2l6ZSB3YXMgPT0gMgorCisJLmFsaWduCTMKK0xvb3A6CW11bHEJJDIsJDE5LCQzCSMgJDMgPSBwcm9kX2xvdworCWFkZHEJJDQsJDAsJDAJIyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwlzdWJxCSQxOCwxLCQxOAkjIHNpemUtLQorCXVtdWxoCSQyLCQxOSwkNAkjICQ0ID0gY3lfbGltYgorCWxkcQkkMiwxNigkMTcpCSMgJDIgPSBzMV9saW1iCisJYWRkcQkkMTcsOCwkMTcJIyBzMV9wdHIrKworCWFkZHEJJDMsJDAsJDMJIyAkMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCXN0cQkkMyw4KCQxNikKKwljbXB1bHQJJDMsJDAsJDAJIyAkMCA9IGNhcnJ5IGZyb20gKGN5X2xpbWIgKyBwcm9kX2xvdykKKwlhZGRxCSQxNiw4LCQxNgkjIHJlc19wdHIrKworCWJuZQkkMTgsTG9vcAorCitMZW5kMjoJbXVscQkkMiwkMTksJDMJIyAkMyA9IHByb2RfbG93CisJYWRkcQkkNCwkMCwkMAkjIGN5X2xpbWIgPSBjeV9saW1iICsgJ2N5JworCXVtdWxoCSQyLCQxOSwkNAkjICQ0ID0gY3lfbGltYgorCWFkZHEJJDMsJDAsJDMJIyAkMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCWNtcHVsdAkkMywkMCwkMAkjICQwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCXN0cQkkMyw4KCQxNikKKwlhZGRxCSQ0LCQwLCQwCSMgY3lfbGltYiA9IHByb2RfaGlnaCArIGN5CisJcmV0CSQzMSwoJDI2KSwxCitMZW5kMToJc3RxCSQzLDAoJDE2KQorCXJldAkkMzEsKCQyNiksMQorCisJLmVuZAlfZ2NyeV9tcGloX211bF8xCisKKwpkaWZmIC0tZ2l0IGEvbXBpL2FscGhhL21waWgtbXVsMi5TIGIvbXBpL2FscGhhL21waWgtbXVsMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYjZiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvYWxwaGEvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSw5NyBAQAorLyogQWxwaGEgMjEwNjQgYWRkbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgYWRkCisgKgkJCSAgIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9hZGRtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgICAgKHIxNikKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHIxNykKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChyMTgpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAocjE5KQorICoKKyAqIFRoaXMgY29kZSBydW5zIGF0IDQyIGN5Y2xlcy9saW1iIG9uIEVWNCBhbmQgMTggY3ljbGVzL2xpbWIgb24gRVY1LgorICovCisKKworCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub2F0CisudGV4dAorCS5hbGlnbgkzCisJLmdsb2JsCV9nY3J5X21waWhfYWRkbXVsXzEKKwkuZW50CV9nY3J5X21waWhfYWRkbXVsXzEgMgorX2djcnlfbXBpaF9hZGRtdWxfMToKKwkuZnJhbWUJJDMwLDAsJDI2CisKKwlsZHEJJDIsMCgkMTcpCSMgJDIgPSBzMV9saW1iCisJYWRkcQkkMTcsOCwkMTcJIyBzMV9wdHIrKworCXN1YnEJJDE4LDEsJDE4CSMgc2l6ZS0tCisJbXVscQkkMiwkMTksJDMJIyAkMyA9IHByb2RfbG93CisJbGRxCSQ1LDAoJDE2KQkjICQ1ID0gKnJlc19wdHIKKwl1bXVsaAkkMiwkMTksJDAJIyAkMCA9IHByb2RfaGlnaAorCWJlcQkkMTgsLkxlbmQxCSMganVtcCBpZiBzaXplIHdhcyA9PSAxCisJbGRxCSQyLDAoJDE3KQkjICQyID0gczFfbGltYgorCWFkZHEJJDE3LDgsJDE3CSMgczFfcHRyKysKKwlzdWJxCSQxOCwxLCQxOAkjIHNpemUtLQorCWFkZHEJJDUsJDMsJDMKKwljbXB1bHQJJDMsJDUsJDQKKwlzdHEJJDMsMCgkMTYpCisJYWRkcQkkMTYsOCwkMTYJIyByZXNfcHRyKysKKwliZXEJJDE4LC5MZW5kMgkjIGp1bXAgaWYgc2l6ZSB3YXMgPT0gMgorCisJLmFsaWduCTMKKy5Mb29wOgltdWxxCSQyLCQxOSwkMwkjICQzID0gcHJvZF9sb3cKKwlsZHEJJDUsMCgkMTYpCSMgJDUgPSAqcmVzX3B0cgorCWFkZHEJJDQsJDAsJDAJIyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwlzdWJxCSQxOCwxLCQxOAkjIHNpemUtLQorCXVtdWxoCSQyLCQxOSwkNAkjICQ0ID0gY3lfbGltYgorCWxkcQkkMiwwKCQxNykJIyAkMiA9IHMxX2xpbWIKKwlhZGRxCSQxNyw4LCQxNwkjIHMxX3B0cisrCisJYWRkcQkkMywkMCwkMwkjICQzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CSQzLCQwLCQwCSMgJDAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJYWRkcQkkNSwkMywkMworCWNtcHVsdAkkMywkNSwkNQorCXN0cQkkMywwKCQxNikKKwlhZGRxCSQxNiw4LCQxNgkjIHJlc19wdHIrKworCWFkZHEJJDUsJDAsJDAJIyBjb21iaW5lIGNhcnJpZXMKKwlibmUJJDE4LC5Mb29wCisKKy5MZW5kMjogbXVscQkkMiwkMTksJDMJIyAkMyA9IHByb2RfbG93CisJbGRxCSQ1LDAoJDE2KQkjICQ1ID0gKnJlc19wdHIKKwlhZGRxCSQ0LCQwLCQwCSMgY3lfbGltYiA9IGN5X2xpbWIgKyAnY3knCisJdW11bGgJJDIsJDE5LCQ0CSMgJDQgPSBjeV9saW1iCisJYWRkcQkkMywkMCwkMwkjICQzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CSQzLCQwLCQwCSMgJDAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJYWRkcQkkNSwkMywkMworCWNtcHVsdAkkMywkNSwkNQorCXN0cQkkMywwKCQxNikKKwlhZGRxCSQ1LCQwLCQwCSMgY29tYmluZSBjYXJyaWVzCisJYWRkcQkkNCwkMCwkMAkjIGN5X2xpbWIgPSBwcm9kX2hpZ2ggKyBjeQorCXJldAkkMzEsKCQyNiksMQorLkxlbmQxOiBhZGRxCSQ1LCQzLCQzCisJY21wdWx0CSQzLCQ1LCQ1CisJc3RxCSQzLDAoJDE2KQorCWFkZHEJJDAsJDUsJDAKKwlyZXQJJDMxLCgkMjYpLDEKKworCS5lbmQJX2djcnlfbXBpaF9hZGRtdWxfMQorCmRpZmYgLS1naXQgYS9tcGkvYWxwaGEvbXBpaC1tdWwzLlMgYi9tcGkvYWxwaGEvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ZDJhZgotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbHBoYS9tcGloLW11bDMuUwpAQCAtMCwwICsxLDk1IEBACisvKiBBbHBoYSAyMTA2NAlzdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorICoJCQkgICAgc3VidHJhY3QgdGhlIHJlc3VsdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChyMTYgICApCisgKgkJICAgICBtcGlfcHRyX3QgczFfcHRyLAkgICAgIChyMTcgICApCisgKgkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsICAgICAocjE4ICAgKQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHIxOSAgICkKKyAqCisgKiBUaGlzIGNvZGUgcnVucyBhdCA0MiBjeWNsZXMvbGltYiBvbiBFVjQgYW5kIDE4IGN5Y2xlcy9saW1iIG9uIEVWNS4KKyAqLworCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy50ZXh0CisJLmFsaWduCTMKKwkuZ2xvYmwJX2djcnlfbXBpaF9zdWJtdWxfMQorCS5lbnQJX2djcnlfbXBpaF9zdWJtdWxfMSAyCitfZ2NyeV9tcGloX3N1Ym11bF8xOgorCS5mcmFtZQkkMzAsMCwkMjYKKworCWxkcQkkMiwwKCQxNykJIyAkMiA9IHMxX2xpbWIKKwlhZGRxCSQxNyw4LCQxNwkjIHMxX3B0cisrCisJc3VicQkkMTgsMSwkMTgJIyBzaXplLS0KKwltdWxxCSQyLCQxOSwkMwkjICQzID0gcHJvZF9sb3cKKwlsZHEJJDUsMCgkMTYpCSMgJDUgPSAqcmVzX3B0cgorCXVtdWxoCSQyLCQxOSwkMAkjICQwID0gcHJvZF9oaWdoCisJYmVxCSQxOCwuTGVuZDEJIyBqdW1wIGlmIHNpemUgd2FzID09IDEKKwlsZHEJJDIsMCgkMTcpCSMgJDIgPSBzMV9saW1iCisJYWRkcQkkMTcsOCwkMTcJIyBzMV9wdHIrKworCXN1YnEJJDE4LDEsJDE4CSMgc2l6ZS0tCisJc3VicQkkNSwkMywkMworCWNtcHVsdAkkNSwkMywkNAorCXN0cQkkMywwKCQxNikKKwlhZGRxCSQxNiw4LCQxNgkjIHJlc19wdHIrKworCWJlcQkkMTgsLkxlbmQyCSMganVtcCBpZiBzaXplIHdhcyA9PSAyCisKKwkuYWxpZ24JMworLkxvb3A6CW11bHEJJDIsJDE5LCQzCSMgJDMgPSBwcm9kX2xvdworCWxkcQkkNSwwKCQxNikJIyAkNSA9ICpyZXNfcHRyCisJYWRkcQkkNCwkMCwkMAkjIGN5X2xpbWIgPSBjeV9saW1iICsgJ2N5JworCXN1YnEJJDE4LDEsJDE4CSMgc2l6ZS0tCisJdW11bGgJJDIsJDE5LCQ0CSMgJDQgPSBjeV9saW1iCisJbGRxCSQyLDAoJDE3KQkjICQyID0gczFfbGltYgorCWFkZHEJJDE3LDgsJDE3CSMgczFfcHRyKysKKwlhZGRxCSQzLCQwLCQzCSMgJDMgPSBjeV9saW1iICsgcHJvZF9sb3cKKwljbXB1bHQJJDMsJDAsJDAJIyAkMCA9IGNhcnJ5IGZyb20gKGN5X2xpbWIgKyBwcm9kX2xvdykKKwlzdWJxCSQ1LCQzLCQzCisJY21wdWx0CSQ1LCQzLCQ1CisJc3RxCSQzLDAoJDE2KQorCWFkZHEJJDE2LDgsJDE2CSMgcmVzX3B0cisrCisJYWRkcQkkNSwkMCwkMAkjIGNvbWJpbmUgY2FycmllcworCWJuZQkkMTgsLkxvb3AKKworLkxlbmQyOiBtdWxxCSQyLCQxOSwkMwkjICQzID0gcHJvZF9sb3cKKwlsZHEJJDUsMCgkMTYpCSMgJDUgPSAqcmVzX3B0cgorCWFkZHEJJDQsJDAsJDAJIyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwl1bXVsaAkkMiwkMTksJDQJIyAkNCA9IGN5X2xpbWIKKwlhZGRxCSQzLCQwLCQzCSMgJDMgPSBjeV9saW1iICsgcHJvZF9sb3cKKwljbXB1bHQJJDMsJDAsJDAJIyAkMCA9IGNhcnJ5IGZyb20gKGN5X2xpbWIgKyBwcm9kX2xvdykKKwlzdWJxCSQ1LCQzLCQzCisJY21wdWx0CSQ1LCQzLCQ1CisJc3RxCSQzLDAoJDE2KQorCWFkZHEJJDUsJDAsJDAJIyBjb21iaW5lIGNhcnJpZXMKKwlhZGRxCSQ0LCQwLCQwCSMgY3lfbGltYiA9IHByb2RfaGlnaCArIGN5CisJcmV0CSQzMSwoJDI2KSwxCisuTGVuZDE6IHN1YnEJJDUsJDMsJDMKKwljbXB1bHQJJDUsJDMsJDUKKwlzdHEJJDMsMCgkMTYpCisJYWRkcQkkMCwkNSwkMAorCXJldAkkMzEsKCQyNiksMQorCisJLmVuZAlfZ2NyeV9tcGloX3N1Ym11bF8xCisKZGlmZiAtLWdpdCBhL21waS9hbHBoYS9tcGloLXJzaGlmdC5TIGIvbXBpL2FscGhhL21waWgtcnNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjOTgxNAotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbHBoYS9tcGloLXJzaGlmdC5TCkBAIC0wLDAgKzEsMTE4IEBACisvKiBhbHBoYSAgICByc2hpZnQKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk4LCAxOTk5LAorICogICAgICAgICAgICAgICAgICAgIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9yc2hpZnQoIG1waV9wdHJfdCB3cCwJKHIxNikKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShyMTcpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHIxOCkKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShyMTkpCisgKgorICogVGhpcyBjb2RlIHJ1bnMgYXQgNC44IGN5Y2xlcy9saW1iIG9uIHRoZSAyMTA2NC4gIFdpdGggaW5maW5pdGUgdW5yb2xsaW5nLAorICogaXQgd291bGQgdGFrZSA0IGN5Y2xlcy9saW1iLiAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGdldCBkb3duIHRvIDMKKyAqIGN5Y2xlcy9saW1iIHNpbmNlIGJvdGggbGRxIGFuZCBzdHEgY2FuIGJlIHBhaXJlZCB3aXRoIHRoZSBvdGhlciB1c2VkCisgKiBpbnN0cnVjdGlvbnMuICBCdXQgdGhlcmUgYXJlIG1hbnkgcmVzdHJpY3Rpb25zIGluIHRoZSAyMTA2NCBwaXBlbGluZSB0aGF0CisgKiBtYWtlcyBpdCBoYXJkLCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gZ2V0IGRvd24gdG8gMyBjeWNsZXMvbGltYjoKKyAqCisgKiAxLiBsZHEgaGFzIGEgMyBjeWNsZSBkZWxheSwgc3JsIGFuZCBzbGwgaGF2ZSBhIDIgY3ljbGUgZGVsYXkuCisgKiAyLiBPbmx5IGFsaWduZWQgaW5zdHJ1Y3Rpb24gcGFpcnMgY2FuIGJlIHBhaXJlZC4KKyAqIDMuIFRoZSBzdG9yZSBidWZmZXIgb3Igc2lsbyBtaWdodCBub3QgYmUgYWJsZSB0byBkZWFsIHdpdGggdGhlIGJhbmR3aWR0aC4KKyAqLworCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy50ZXh0CisJLmFsaWduCTMKKwkuZ2xvYmwJX2djcnlfbXBpaF9yc2hpZnQKKwkuZW50CV9nY3J5X21waWhfcnNoaWZ0CitfZ2NyeV9tcGloX3JzaGlmdDoKKwkuZnJhbWUJJDMwLDAsJDI2LDAKKworCWxkcQkkNCwwKCQxNykJIyBsb2FkIGZpcnN0IGxpbWIKKwlhZGRxCSQxNyw4LCQxNworCXN1YnEJJDMxLCQxOSwkNworCXN1YnEJJDE4LDEsJDE4CisJYW5kCSQxOCw0LTEsJDIwCSMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwlzbGwJJDQsJDcsJDAJIyBjb21wdXRlIGZ1bmN0aW9uIHJlc3VsdAorCisJYmVxCSQyMCwuUjAKKwlzdWJxCSQxOCwkMjAsJDE4CisKKwkuYWxpZ24JMworLlJvb3AwOgorCWxkcQkkMywwKCQxNykKKwlhZGRxCSQxNiw4LCQxNgorCWFkZHEJJDE3LDgsJDE3CisJc3VicQkkMjAsMSwkMjAKKwlzcmwJJDQsJDE5LCQ1CisJc2xsCSQzLCQ3LCQ2CisJYmlzCSQzLCQzLCQ0CisJYmlzCSQ1LCQ2LCQ4CisJc3RxCSQ4LC04KCQxNikKKwlibmUJJDIwLC5Sb29wMAorCisuUjA6CWJlcQkkMTgsLlJlbmQKKworCS5hbGlnbgkzCisuUm9vcDoJbGRxCSQzLDAoJDE3KQorCWFkZHEJJDE2LDMyLCQxNgorCXN1YnEJJDE4LDQsJDE4CisJc3JsCSQ0LCQxOSwkNQorCXNsbAkkMywkNywkNgorCisJbGRxCSQ0LDgoJDE3KQorCXNybAkkMywkMTksJDEKKwliaXMJJDUsJDYsJDgKKwlzdHEJJDgsLTMyKCQxNikKKwlzbGwJJDQsJDcsJDIKKworCWxkcQkkMywxNigkMTcpCisJc3JsCSQ0LCQxOSwkNQorCWJpcwkkMSwkMiwkOAorCXN0cQkkOCwtMjQoJDE2KQorCXNsbAkkMywkNywkNgorCisJbGRxCSQ0LDI0KCQxNykKKwlzcmwJJDMsJDE5LCQxCisJYmlzCSQ1LCQ2LCQ4CisJc3RxCSQ4LC0xNigkMTYpCisJc2xsCSQ0LCQ3LCQyCisKKwlhZGRxCSQxNywzMiwkMTcKKwliaXMJJDEsJDIsJDgKKwlzdHEJJDgsLTgoJDE2KQorCisJYmd0CSQxOCwuUm9vcAorCisuUmVuZDoJc3JsCSQ0LCQxOSwkOAorCXN0cQkkOCwwKCQxNikKKwlyZXQJJDMxLCgkMjYpLDEKKwkuZW5kCV9nY3J5X21waWhfcnNoaWZ0CisKZGlmZiAtLWdpdCBhL21waS9hbHBoYS9tcGloLXN1YjEuUyBiL21waS9hbHBoYS9tcGloLXN1YjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY0NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FscGhhL21waWgtc3ViMS5TCkBAIC0wLDAgKzEsMTI0IEBACisvKiBBbHBoYSAgc3ViX24gLS0gU3VidHJhY3QgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZAorICoJCSAgc3RvcmUgZGlmZmVyZW5jZSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqICBtcGlfbGltYl90CisgKiAgX2djcnlfbXBpaF9zdWJfbiggbXBpX3B0cl90IHJlc19wdHIsCShyMTYpCisgKgkJICAgbXBpX3B0cl90IHMxX3B0ciwJKHIxNykKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkocjE4KQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHIxOSkKKyAqLworCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy50ZXh0CisJLmFsaWduCTMKKwkuZ2xvYmwJX2djcnlfbXBpaF9zdWJfbgorCS5lbnQJX2djcnlfbXBpaF9zdWJfbgorX2djcnlfbXBpaF9zdWJfbjoKKwkuZnJhbWUJJDMwLDAsJDI2LDAKKworCWxkcQkkMywwKCQxNykKKwlsZHEJJDQsMCgkMTgpCisKKwlzdWJxCSQxOSwxLCQxOQorCWFuZAkkMTksNC0xLCQyCSMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliaXMJJDMxLCQzMSwkMAorCWJlcQkkMiwuTDAJCSMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisKKwlzdWJxCSQxOSwkMiwkMTkKKworLkxvb3AwOiBzdWJxCSQyLDEsJDIKKwlsZHEJJDUsOCgkMTcpCisJYWRkcQkkNCwkMCwkNAorCWxkcQkkNiw4KCQxOCkKKwljbXB1bHQJJDQsJDAsJDEKKwlzdWJxCSQzLCQ0LCQ0CisJY21wdWx0CSQzLCQ0LCQwCisJc3RxCSQ0LDAoJDE2KQorCW9yCSQwLCQxLCQwCisKKwlhZGRxCSQxNyw4LCQxNworCWFkZHEJJDE4LDgsJDE4CisJYmlzCSQ1LCQ1LCQzCisJYmlzCSQ2LCQ2LCQ0CisJYWRkcQkkMTYsOCwkMTYKKwlibmUJJDIsLkxvb3AwCisKKy5MMDoJYmVxCSQxOSwuTGVuZAorCisJLmFsaWduCTMKKy5Mb29wOglzdWJxCSQxOSw0LCQxOQorCisJbGRxCSQ1LDgoJDE3KQorCWFkZHEJJDQsJDAsJDQKKwlsZHEJJDYsOCgkMTgpCisJY21wdWx0CSQ0LCQwLCQxCisJc3VicQkkMywkNCwkNAorCWNtcHVsdAkkMywkNCwkMAorCXN0cQkkNCwwKCQxNikKKwlvcgkkMCwkMSwkMAorCisJbGRxCSQzLDE2KCQxNykKKwlhZGRxCSQ2LCQwLCQ2CisJbGRxCSQ0LDE2KCQxOCkKKwljbXB1bHQJJDYsJDAsJDEKKwlzdWJxCSQ1LCQ2LCQ2CisJY21wdWx0CSQ1LCQ2LCQwCisJc3RxCSQ2LDgoJDE2KQorCW9yCSQwLCQxLCQwCisKKwlsZHEJJDUsMjQoJDE3KQorCWFkZHEJJDQsJDAsJDQKKwlsZHEJJDYsMjQoJDE4KQorCWNtcHVsdAkkNCwkMCwkMQorCXN1YnEJJDMsJDQsJDQKKwljbXB1bHQJJDMsJDQsJDAKKwlzdHEJJDQsMTYoJDE2KQorCW9yCSQwLCQxLCQwCisKKwlsZHEJJDMsMzIoJDE3KQorCWFkZHEJJDYsJDAsJDYKKwlsZHEJJDQsMzIoJDE4KQorCWNtcHVsdAkkNiwkMCwkMQorCXN1YnEJJDUsJDYsJDYKKwljbXB1bHQJJDUsJDYsJDAKKwlzdHEJJDYsMjQoJDE2KQorCW9yCSQwLCQxLCQwCisKKwlhZGRxCSQxNywzMiwkMTcKKwlhZGRxCSQxOCwzMiwkMTgKKwlhZGRxCSQxNiwzMiwkMTYKKwlibmUJJDE5LC5Mb29wCisKKy5MZW5kOglhZGRxCSQ0LCQwLCQ0CisJY21wdWx0CSQ0LCQwLCQxCisJc3VicQkkMywkNCwkNAorCWNtcHVsdAkkMywkNCwkMAorCXN0cQkkNCwwKCQxNikKKwlvcgkkMCwkMSwkMAorCXJldAkkMzEsKCQyNiksMQorCisJLmVuZAlfZ2NyeV9tcGloX3N1Yl9uCisKKwpkaWZmIC0tZ2l0IGEvbXBpL2FscGhhL3VkaXYtcXJubmQuUyBiL21waS9hbHBoYS91ZGl2LXFybm5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwYzUyZAotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbHBoYS91ZGl2LXFybm5kLlMKQEAgLTAsMCArMSwxNTkgQEAKKy8qIEFscGhhIDIxMDY0IF9fdWRpdl9xcm5uZAorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKworCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub2F0CisudGV4dAorCS5hbGlnbgkzCisJLmdsb2JsCV9fdWRpdl9xcm5uZAorCS5lbnQJX191ZGl2X3Fybm5kCitfX3VkaXZfcXJubmQ6CisJLmZyYW1lICQzMCwwLCQyNiwwCisJLnByb2xvZ3VlIDAKKyNkZWZpbmUgY250CSQyCisjZGVmaW5lIHRtcAkkMworI2RlZmluZSByZW1fcHRyICQxNgorI2RlZmluZSBuMQkkMTcKKyNkZWZpbmUgbjAJJDE4CisjZGVmaW5lIGQJJDE5CisjZGVmaW5lIHFiCSQyMAorCisJbGRpcQljbnQsMTYKKwlibHQJZCwuTGFyZ2VkaXZpc29yCisKKy5Mb29wMTogY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJZCxuMSxxYgorCXN1YnEJbjEsZCx0bXAKKwljbW92bmUJcWIsdG1wLG4xCisJYmlzCW4wLHFiLG4wCisJY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJZCxuMSxxYgorCXN1YnEJbjEsZCx0bXAKKwljbW92bmUJcWIsdG1wLG4xCisJYmlzCW4wLHFiLG4wCisJY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJZCxuMSxxYgorCXN1YnEJbjEsZCx0bXAKKwljbW92bmUJcWIsdG1wLG4xCisJYmlzCW4wLHFiLG4wCisJY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJZCxuMSxxYgorCXN1YnEJbjEsZCx0bXAKKwljbW92bmUJcWIsdG1wLG4xCisJYmlzCW4wLHFiLG4wCisJc3VicQljbnQsMSxjbnQKKwliZ3QJY250LC5Mb29wMQorCXN0cQluMSwwKHJlbV9wdHIpCisJYmlzCSQzMSxuMCwkMAorCXJldAkkMzEsKCQyNiksMQorCisuTGFyZ2VkaXZpc29yOgorCWFuZAluMCwxLCQ0CisKKwlzcmwJbjAsMSxuMAorCXNsbAluMSw2Myx0bXAKKwlvcgl0bXAsbjAsbjAKKwlzcmwJbjEsMSxuMQorCisJYW5kCWQsMSwkNgorCXNybAlkLDEsJDUKKwlhZGRxCSQ1LCQ2LCQ1CisKKy5Mb29wMjogY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJJDUsbjEscWIKKwlzdWJxCW4xLCQ1LHRtcAorCWNtb3ZuZQlxYix0bXAsbjEKKwliaXMJbjAscWIsbjAKKwljbXBsdAluMCwwLHRtcAorCWFkZHEJbjEsbjEsbjEKKwliaXMJbjEsdG1wLG4xCisJYWRkcQluMCxuMCxuMAorCWNtcHVsZQkkNSxuMSxxYgorCXN1YnEJbjEsJDUsdG1wCisJY21vdm5lCXFiLHRtcCxuMQorCWJpcwluMCxxYixuMAorCWNtcGx0CW4wLDAsdG1wCisJYWRkcQluMSxuMSxuMQorCWJpcwluMSx0bXAsbjEKKwlhZGRxCW4wLG4wLG4wCisJY21wdWxlCSQ1LG4xLHFiCisJc3VicQluMSwkNSx0bXAKKwljbW92bmUJcWIsdG1wLG4xCisJYmlzCW4wLHFiLG4wCisJY21wbHQJbjAsMCx0bXAKKwlhZGRxCW4xLG4xLG4xCisJYmlzCW4xLHRtcCxuMQorCWFkZHEJbjAsbjAsbjAKKwljbXB1bGUJJDUsbjEscWIKKwlzdWJxCW4xLCQ1LHRtcAorCWNtb3ZuZQlxYix0bXAsbjEKKwliaXMJbjAscWIsbjAKKwlzdWJxCWNudCwxLGNudAorCWJndAljbnQsLkxvb3AyCisKKwlhZGRxCW4xLG4xLG4xCisJYWRkcQkkNCxuMSxuMQorCWJuZQkkNiwuTE9kZAorCXN0cQluMSwwKHJlbV9wdHIpCisJYmlzCSQzMSxuMCwkMAorCXJldAkkMzEsKCQyNiksMQorCisuTE9kZDoKKwkvKiBxJyBpbiBuMC4gcicgaW4gbjEgKi8KKwlhZGRxCW4xLG4wLG4xCisJY21wdWx0CW4xLG4wLHRtcAkjIHRtcCA6PSBjYXJyeSBmcm9tIGFkZHEKKwliZXEJdG1wLC5MTHA2CisJYWRkcQluMCwxLG4wCisJc3VicQluMSxkLG4xCisuTExwNjoJY21wdWx0CW4xLGQsdG1wCisJYm5lCXRtcCwuTExwNworCWFkZHEJbjAsMSxuMAorCXN1YnEJbjEsZCxuMQorLkxMcDc6CisJc3RxCW4xLDAocmVtX3B0cikKKwliaXMJJDMxLG4wLCQwCisJcmV0CSQzMSwoJDI2KSwxCisKKwkuZW5kCV9fdWRpdl9xcm5uZApkaWZmIC0tZ2l0IGEvbXBpL2FtZDY0L2Rpc3RmaWxlcyBiL21waS9hbWQ2NC9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NGM4ZAotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbWQ2NC9kaXN0ZmlsZXMKQEAgLTAsMCArMSw3IEBACittcGloLWFkZDEuUworbXBpaC1sc2hpZnQuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworbXBpaC1yc2hpZnQuUworbXBpaC1zdWIxLlMKZGlmZiAtLWdpdCBhL21waS9hbWQ2NC9tcGloLWFkZDEuUyBiL21waS9hbWQ2NC9tcGloLWFkZDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVjODljCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FtZDY0L21waWgtYWRkMS5TCkBAIC0wLDAgKzEsNjMgQEAKKy8qIEFNRDY0ICh4ODZfNjQpIGFkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCisgKgkJICAgc3VtIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqICBtcGlfbGltYl90CisgKiAgX2djcnlfbXBpaF9hZGRfbiggbXBpX3B0cl90IHJlc19wdHIsCXJkaQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCQlyc2kKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkJcmR4CisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkJcmN4CisgKi8KKworLnRleHQKKwkuZ2xvYmwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uOikKKwlsZWFxCSglcnNpLCVyY3gsOCksICVyc2kKKwlsZWFxCSglcmRpLCVyY3gsOCksICVyZGkKKwlsZWFxCSglcmR4LCVyY3gsOCksICVyZHgKKwluZWdxCSVyY3gKKwl4b3JsCSVlYXgsICVlYXgJCS8qIGNsZWFyIGN5ICovCisKKwlBTElHTig0KQkJCS8qIG1pbmltYWwgYWxpZ25tZW50IGZvciBjbGFpbWVkIHNwZWVkICovCisuTG9vcDoJbW92cQkoJXJzaSwlcmN4LDgpLCAlcmF4CisJbW92cQkoJXJkeCwlcmN4LDgpLCAlcjEwCisJYWRjcQklcjEwLCAlcmF4CisJbW92cQklcmF4LCAoJXJkaSwlcmN4LDgpCisJaW5jcQklcmN4CisJam5lCS5Mb29wCisKKwltb3ZxCSVyY3gsICVyYXgJCS8qIHplcm8gJXJheCAqLworCWFkY3EJJXJheCwgJXJheAorCXJldAorCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21waS9hbWQ2NC9tcGloLWxzaGlmdC5TIGIvbXBpL2FtZDY0L21waWgtbHNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZGQxYQotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbWQ2NC9tcGloLWxzaGlmdC5TCkBAIC0wLDAgKzEsNzcgQEAKKy8qIEFNRDY0ICh4ODZfNjQpIGxzaGlmdCAtLSBMZWZ0IHNoaWZ0IGEgbGltYiB2ZWN0b3IgYW5kIHN0b3JlCisgKgkJICByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2xzaGlmdCggbXBpX3B0cl90IHdwLAlyZGkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCXJzaQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCXJkeAorICoJCSAgIHVuc2lnbmVkIGNudCkJcmN4CisgKi8KKworLnRleHQKKwkuZ2xvYmwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2xzaGlmdCkKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9sc2hpZnQ6KQorCW1vdnEJLTgoJXJzaSwlcmR4LDgpLCAlbW03CisJbW92ZAklZWN4LCAlbW0xCisJbW92bAkkNjQsICVlYXgKKwlzdWJsCSVlY3gsICVlYXgKKwltb3ZkCSVlYXgsICVtbTAKKwltb3ZxCSVtbTcsICVtbTMKKwlwc3JscQklbW0wLCAlbW03CisJbW92ZAklbW03LCAlcmF4CisJc3VicQkkMiwgJXJkeAorCWpsCS5MZW5kbworCisJQUxJR04oNCkJCQkvKiBtaW5pbWFsIGFsaWdubWVudCBmb3IgY2xhaW1lZCBzcGVlZCAqLworLkxvb3A6CW1vdnEJKCVyc2ksJXJkeCw4KSwgJW1tNgorCW1vdnEJJW1tNiwgJW1tMgorCXBzcmxxCSVtbTAsICVtbTYKKwlwc2xscQklbW0xLCAlbW0zCisJcG9yCSVtbTYsICVtbTMKKwltb3ZxCSVtbTMsIDgoJXJkaSwlcmR4LDgpCisJamUJLkxlbmRlCisJbW92cQktOCglcnNpLCVyZHgsOCksICVtbTcKKwltb3ZxCSVtbTcsICVtbTMKKwlwc3JscQklbW0wLCAlbW03CisJcHNsbHEJJW1tMSwgJW1tMgorCXBvcgklbW03LCAlbW0yCisJbW92cQklbW0yLCAoJXJkaSwlcmR4LDgpCisJc3VicQkkMiwgJXJkeAorCWpnZQkuTG9vcAorCisuTGVuZG86CW1vdnEJJW1tMywgJW1tMgorLkxlbmRlOglwc2xscQklbW0xLCAlbW0yCisJbW92cQklbW0yLCAoJXJkaSkKKwllbW1zCisJcmV0CmRpZmYgLS1naXQgYS9tcGkvYW1kNjQvbXBpaC1tdWwxLlMgYi9tcGkvYW1kNjQvbXBpaC1tdWwxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiMGFiNAotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbWQ2NC9tcGloLW11bDEuUwpAQCAtMCwwICsxLDY1IEBACisvKiBBTUQ2NCBtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorICoJCQkgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsCShyZGkpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkocnNpKQorICoJCSAgbXBpX3NpemVfdCBzMV9zaXplLAkocmR4KQorICoJCSAgbXBpX2xpbWJfdCBzMl9saW1iKQkocmN4KQorICovCisKKworCVRFWFQKKwlBTElHTig1KQorCS5ieXRlCTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCisKKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbXVsXzE6KQorCisJbW92cQklcmR4LCAlcjExCisJbGVhcQkoJXJzaSwlcmR4LDgpLCAlcnNpCisJbGVhcQkoJXJkaSwlcmR4LDgpLCAlcmRpCisJbmVncQklcjExCisJeG9ybAklcjhkLCAlcjhkCisKKy5Mb29wOgltb3ZxCSglcnNpLCVyMTEsOCksICVyYXgKKwltdWxxCSVyY3gKKwlhZGRxCSVyOCwgJXJheAorCW1vdmwJJDAsICVyOGQKKwlhZGNxCSVyZHgsICVyOAorCW1vdnEJJXJheCwgKCVyZGksJXIxMSw4KQorCWluY3EJJXIxMQorCWpuZQkuTG9vcAorCisJbW92cQklcjgsICVyYXgKKwlyZXQKZGlmZiAtLWdpdCBhL21waS9hbWQ2NC9tcGloLW11bDIuUyBiL21waS9hbWQ2NC9tcGloLW11bDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzMyYTFkCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FtZDY0L21waWgtbXVsMi5TCkBAIC0wLDAgKzEsNjQgQEAKKy8qIEFNRDY0IGFkZG11bDIgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgYWRkCisgKgkJICAgICAgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9hZGRtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgKHJkaSkKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHJzaSkKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChyZHgpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAocmN4KQorICovCisJVEVYVAorCUdMT0JMCUNfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9hZGRtdWxfMSkKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9hZGRtdWxfMTopCisJbW92cQklcmR4LCAlcjExCisJbGVhcQkoJXJzaSwlcmR4LDgpLCAlcnNpCisJbGVhcQkoJXJkaSwlcmR4LDgpLCAlcmRpCisJbmVncQklcjExCisJeG9ybAklcjhkLCAlcjhkCisJeG9ybAklcjEwZCwgJXIxMGQKKworCUFMSUdOKDMpCQkJLyogbWluaW1hbCBhbGlnbm1lbnQgZm9yIGNsYWltZWQgc3BlZWQgKi8KKy5Mb29wOgltb3ZxCSglcnNpLCVyMTEsOCksICVyYXgKKwltdWxxCSVyY3gKKwlhZGRxCSglcmRpLCVyMTEsOCksICVyYXgKKwlhZGNxCSVyMTAsICVyZHgKKwlhZGRxCSVyOCwgJXJheAorCW1vdnEJJXIxMCwgJXI4CisJbW92cQklcmF4LCAoJXJkaSwlcjExLDgpCisJYWRjcQklcmR4LCAlcjgKKwlpbmNxCSVyMTEKKwlqbmUJLkxvb3AKKworCW1vdnEJJXI4LCAlcmF4CisJcmV0CmRpZmYgLS1naXQgYS9tcGkvYW1kNjQvbXBpaC1tdWwzLlMgYi9tcGkvYW1kNjQvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0NThhNwotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbWQ2NC9tcGloLW11bDMuUwpAQCAtMCwwICsxLDY2IEBACisvKiBBTUQ2NCBzdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqCQkgICAgICB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3N1Ym11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAocmRpKQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAocnNpKQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHJkeCkKKyAqCQkgICAgIG1waV9saW1iX3QgczJfbGltYikgICAgIChyY3gpCisgKi8KKwlURVhUCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xOikKKworCW1vdnEJJXJkeCwgJXIxMQorCWxlYXEJKCVyc2ksJXIxMSw4KSwgJXJzaQorCWxlYXEJKCVyZGksJXIxMSw4KSwgJXJkaQorCW5lZ3EJJXIxMQorCXhvcmwJJXI4ZCwgJXI4ZAorCisJQUxJR04oMykJCQkvKiBtaW5pbWFsIGFsaWdubWVudCBmb3IgY2xhaW1lZCBzcGVlZCAqLworLkxvb3A6CW1vdnEJKCVyc2ksJXIxMSw4KSwgJXJheAorCW1vdnEJKCVyZGksJXIxMSw4KSwgJXIxMAorCW11bHEJJXJjeAorCXN1YnEJJXI4LCAlcjEwCisJbW92bAkkMCwgJXI4ZAorCWFkY2wJJXI4ZCwgJXI4ZAorCXN1YnEJJXJheCwgJXIxMAorCWFkY3EJJXJkeCwgJXI4CisJbW92cQklcjEwLCAoJXJkaSwlcjExLDgpCisJaW5jcQklcjExCisJam5lCS5Mb29wCisKKwltb3ZxCSVyOCwgJXJheAorCXJldApkaWZmIC0tZ2l0IGEvbXBpL2FtZDY0L21waWgtcnNoaWZ0LlMgYi9tcGkvYW1kNjQvbXBpaC1yc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZjOGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2FtZDY0L21waWgtcnNoaWZ0LlMKQEAgLTAsMCArMSw4MCBAQAorLyogQU1ENjQgKHg4Nl82NCkgcnNoaWZ0IC0tIFJpZ2h0IHNoaWZ0IGEgbGltYiB2ZWN0b3IgYW5kIHN0b3JlCisgKgkJICByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3JzaGlmdCggbXBpX3B0cl90IHdwLAlyZGkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCXJzaQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCXJkeAorICoJCSAgIHVuc2lnbmVkIGNudCkJcmN4CisgKi8KKworLnRleHQKKwkuZ2xvYmwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdCkKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9yc2hpZnQ6KQorCW1vdnEJKCVyc2kpLCAlbW03CisJbW92ZAklZWN4LCAlbW0xCisJbW92bAkkNjQsICVlYXgKKwlzdWJsCSVlY3gsICVlYXgKKwltb3ZkCSVlYXgsICVtbTAKKwltb3ZxCSVtbTcsICVtbTMKKwlwc2xscQklbW0wLCAlbW03CisJbW92ZAklbW03LCAlcmF4CisJbGVhcQkoJXJzaSwlcmR4LDgpLCAlcnNpCisJbGVhcQkoJXJkaSwlcmR4LDgpLCAlcmRpCisJbmVncQklcmR4CisJYWRkcQkkMiwgJXJkeAorCWpnCS5MZW5kbworCisJQUxJR04oOCkJCQkvKiBtaW5pbWFsIGFsaWdubWVudCBmb3IgY2xhaW1lZCBzcGVlZCAqLworLkxvb3A6CW1vdnEJLTgoJXJzaSwlcmR4LDgpLCAlbW02CisJbW92cQklbW02LCAlbW0yCisJcHNsbHEJJW1tMCwgJW1tNgorCXBzcmxxCSVtbTEsICVtbTMKKwlwb3IJJW1tNiwgJW1tMworCW1vdnEJJW1tMywgLTE2KCVyZGksJXJkeCw4KQorCWplCS5MZW5kZQorCW1vdnEJKCVyc2ksJXJkeCw4KSwgJW1tNworCW1vdnEJJW1tNywgJW1tMworCXBzbGxxCSVtbTAsICVtbTcKKwlwc3JscQklbW0xLCAlbW0yCisJcG9yCSVtbTcsICVtbTIKKwltb3ZxCSVtbTIsIC04KCVyZGksJXJkeCw4KQorCWFkZHEJJDIsICVyZHgKKwlqbGUJLkxvb3AKKworLkxlbmRvOgltb3ZxCSVtbTMsICVtbTIKKy5MZW5kZToJcHNybHEJJW1tMSwgJW1tMgorCW1vdnEJJW1tMiwgLTgoJXJkaSkKKwllbW1zCisJcmV0CmRpZmYgLS1naXQgYS9tcGkvYW1kNjQvbXBpaC1zdWIxLlMgYi9tcGkvYW1kNjQvbXBpaC1zdWIxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MDliMAotLS0gL2Rldi9udWxsCisrKyBiL21waS9hbWQ2NC9tcGloLXN1YjEuUwpAQCAtMCwwICsxLDYxIEBACisvKiBBTUQ2NCAoeDg2XzY0KSBzdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCisgKgkJICAgc3VtIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqICBtcGlfbGltYl90CisgKiAgX2djcnlfbXBpaF9zdWJfbiggbXBpX3B0cl90IHJlc19wdHIsCXJkaQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCQlyc2kKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkJcmR4CisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkJcmN4CisgKi8KKy50ZXh0CisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbikKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbjopCisJbGVhcQkoJXJzaSwlcmN4LDgpLCAlcnNpCisJbGVhcQkoJXJkaSwlcmN4LDgpLCAlcmRpCisJbGVhcQkoJXJkeCwlcmN4LDgpLCAlcmR4CisJbmVncQklcmN4CisJeG9ybAklZWF4LCAlZWF4CQkvKiBjbGVhciBjeSAqLworCisJQUxJR04oNCkJCQkvKiBtaW5pbWFsIGFsaWdubWVudCBmb3IgY2xhaW1lZCBzcGVlZCAqLworLkxvb3A6CW1vdnEJKCVyc2ksJXJjeCw4KSwgJXJheAorCW1vdnEJKCVyZHgsJXJjeCw4KSwgJXIxMAorCXNiYnEJJXIxMCwgJXJheAorCW1vdnEJJXJheCwgKCVyZGksJXJjeCw4KQorCWluY3EJJXJjeAorCWpuZQkuTG9vcAorCisJbW92cQklcmN4LCAlcmF4CQkvKiB6ZXJvICVyYXggKi8KKwlhZGNxCSVyYXgsICVyYXgKKwlyZXQKZGlmZiAtLWdpdCBhL21waS9jb25maWcubGlua3MgYi9tcGkvY29uZmlnLmxpbmtzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTdkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvY29uZmlnLmxpbmtzCkBAIC0wLDAgKzEsNDMxIEBACisjIGNvbmZpZy5saW5rcyAtIGhlbHBlciBmb3IgLi4vY29uZmlndXJlICAgICAgICAgICAgIC0qLSBtb2RlOiBzaCAtKi0KKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgIGcxMCBDb2RlIEdtYkgKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyMKKyMgc291cmNlZCBieSAuLi9jb25maWd1cmUgdG8gZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIHRvIGxpbmsKKyMgdGhpcyBzaG91bGQgc2V0ICRtcGlfbG5fbGlzdC4KKyMgTm90ZTogdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgYWJvdmUgZGlyZWN0b3J5LgorIworIyBSZWd1aXJlZCB2YXJpYWJsZXM6CisjICAkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlCisjICAkZ2NyeV9jdl9nY2NfYXJtX3BsYXRmb3JtX2FzX29rCisKK21waV9zZmxhZ3M9CittcGlfZXh0cmFfbW9kdWxlcz0KK21waV9jcHVfYXJjaD0KKwordGVzdCAtZCAuL21waSB8fCBta2RpciAuL21waQorCisjIFdlIGdyZXAgdGhlIGxpc3Qgb2YgbW9kdWxlcyBmcm9tIHRoZSBNYWtlZmlsZSBzbyB0aGF0CisjIHdlIGRvbid0IG5lZWQgdG8gbWFpbnRhaW4gdGhlbSBoZXJlLgorbXBpX3N0YW5kYXJkX21vZHVsZXM9YCRBV0sgJy9eI0JFR0lOX0FTTV9MSVNULywvXiNFTkRfQVNNX0xJU1QvIHsKKyAgICAgICAgICAgICAgICAgaWYoICQzICE9ICJPIiApIHByaW50ICQyIH0nICAkc3JjZGlyL21waS9NYWtlZmlsZS5hbWAKK21waV9vcHRpb25hbF9tb2R1bGVzPWAkQVdLICcvXiNCRUdJTl9BU01fTElTVC8sL14jRU5EX0FTTV9MSVNULyB7CisgICAgICAgICAgICAgICAgIGlmKCAkMyA9PSAiTyIgKSBwcmludCAkMiB9JyAkc3JjZGlyL21waS9NYWtlZmlsZS5hbWAKKworCitlY2hvICcvKiBjcmVhdGVkIGJ5IGNvbmZpZy5saW5rcyAtIGRvIG5vdCBlZGl0ICovJyA+Li9tcGkvYXNtLXN5bnRheC5oCitlY2hvICIvKiBIb3N0OiAke2hvc3R9ICovIiA+Pi4vbXBpL2FzbS1zeW50YXguaAorCitjYXNlICIke2hvc3R9IiBpbgorICAgIHBvd2VycGMtYXBwbGUtZGFyd2luKiAgICAgICAgICB8IFwKKyAgICBpWzM0NTY3XTg2Ki0qLW9wZW5ic2RbMTJdKiAgICAgfCBcCisgICAgaVszNDU2N104NiotKi1vcGVuYnNkMy5bMDEyM10qKQorICAgICAgIGVjaG8gJy8qIE5vIHdvcmtpbmcgYXNzZW1ibGVyIG1vZHVsZXMgYXZhaWxhYmxlICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9IiIKKyAgICAgICBtcGlfY3B1X2FyY2g9Ing4NiIKKyAgICAgICA7OworICAgIGlbMzQ2N104NiotKi1vcGVuYnNkKiAgICAgIHwgXAorICAgIGlbMzQ2N104NiotKi1mcmVlYnNkKi1lbGYgIHwgXAorICAgIGlbMzQ2N104NiotKi1mcmVlYnNkWzMtOV0qIHwgXAorICAgIGlbMzQ2N104NiotKi1mcmVlYnNkZWxmKiAgIHwgXAorICAgIGlbMzQ2N104NiotKi1uZXRic2QqICAgICAgIHwgXAorICAgIGlbMzQ2N104NiotKi1rKmJzZCopCisgICAgICAgZWNobyAnI2RlZmluZSBFTEZfU1lOVEFYJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIGNhdCAgJHNyY2Rpci9tcGkvaTM4Ni9zeW50YXguaAkgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9ImkzODYiCisgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisgICAgICAgOzsKKyAgICBpNTg2Ki0qLW9wZW5ic2QqICAgICAgICAgfCBcCisgICAgaTU4NiotKi1mcmVlYnNkKi1lbGYgICAgIHwgXAorICAgIGk1ODYqLSotZnJlZWJzZFszLTldKiAgICB8IFwKKyAgICBpNTg2Ki0qLWZyZWVic2RlbGYqICAgICAgfCBcCisgICAgaTU4NiotKi1uZXRic2QqCSAgICAgfCBcCisgICAgaTU4NiotKi1rKmJzZCoJICAgICB8IFwKKyAgICBwZW50aXVtLSotbmV0YnNkKgkgICAgIHwgXAorICAgIHBlbnRpdW1wcm8tKi1uZXRic2QqKQorICAgICAgIGVjaG8gJyNkZWZpbmUgRUxGX1NZTlRBWCcgPj4uL21waS9hc20tc3ludGF4LmgKKyAgICAgICBjYXQgICRzcmNkaXIvbXBpL2kzODYvc3ludGF4LmgJICAgPj4uL21waS9hc20tc3ludGF4LmgKKyAgICAgICBwYXRoPSJpNTg2IGkzODYiCisgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisgICAgICAgOzsKKyAgICBpWzM0XTg2Ki0qLWJzZGk0KikKKyAgICAgICBlY2hvICcjZGVmaW5lIEVMRl9TWU5UQVgnID4+Li9tcGkvYXNtLXN5bnRheC5oCisgICAgICAgY2F0ICAkc3JjZGlyL21waS9pMzg2L3N5bnRheC5oCSA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9ImkzODYiCisgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisgICAgICAgOzsKKyAgICBpWzM0NjddODYqLSotbGludXhhb3V0KiAgfCBcCisgICAgaVszNDY3XTg2Ki0qLWxpbnV4b2xkbGQqIHwgXAorICAgIGlbMzQ2N104NiotKi0qYnNkKikKKwllY2hvICcjZGVmaW5lIEJTRF9TWU5UQVgnID4+Li9tcGkvYXNtLXN5bnRheC5oCisJZWNobyAnI2RlZmluZSBYODZfQlJPS0VOX0FMSUdOJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvaTM4Ni9zeW50YXguaAkgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJpMzg2IgorICAgICAgICBtcGlfY3B1X2FyY2g9Ing4NiIKKwk7OworICAgIGk1ODYqLSotbGludXhhb3V0KiAgfCBcCisgICAgaTU4NiotKi1saW51eG9sZGxkKiB8IFwKKyAgICBpNTg2Ki0qLSpic2QqKQorCWVjaG8gJyNkZWZpbmUgQlNEX1NZTlRBWCcgPj4uL21waS9hc20tc3ludGF4LmgKKwllY2hvICcjZGVmaW5lIFg4Nl9CUk9LRU5fQUxJR04nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJY2F0ICAkc3JjZGlyL21waS9pMzg2L3N5bnRheC5oCSAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9Imk1ODYgaTM4NiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisJOzsKKyAgICBpWzM0NjddODYqLW1zZG9zZGpncHAqIHwgXAorICAgIGlbMzRdODYqLWFwcGxlLWRhcndpbiopCisJZWNobyAnI2RlZmluZSBCU0RfU1lOVEFYJyAgICAgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwljYXQgICRzcmNkaXIvbXBpL2kzODYvc3ludGF4LmgJID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0iaTM4NiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisJOzsKKyAgICBpNTg2Ki1tc2Rvc2RqZ3BwKiB8IFwKKyAgICBpWzU2N104NiotYXBwbGUtZGFyd2luKikKKwllY2hvICcjZGVmaW5lIEJTRF9TWU5UQVgnICAgICAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvaTM4Ni9zeW50YXguaAkgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJpNTg2IGkzODYiCisgICAgICAgIG1waV9jcHVfYXJjaD0ieDg2IgorCTs7CisgICAgaVszNDY3XTg2Ki0qLSopCisJZWNobyAnI2RlZmluZSBFTEZfU1lOVEFYJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvaTM4Ni9zeW50YXguaAkgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJpMzg2IgorICAgICAgICBtcGlfY3B1X2FyY2g9Ing4NiIKKwk7OworICAgIGk1ODYqLSotKiAgfCBcCisgICAgcGVudGl1bS0qLSogICB8IFwKKyAgICBwZW50aXVtcHJvLSotKikKKwllY2hvICcjZGVmaW5lIEVMRl9TWU5UQVgnID4+Li9tcGkvYXNtLXN5bnRheC5oCisJY2F0ICAkc3JjZGlyL21waS9pMzg2L3N5bnRheC5oCSAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9Imk1ODYgaTM4NiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJ4ODYiCisJOzsKKyAgICB4ODZfNjQtKi0qKQorCWVjaG8gJyNkZWZpbmUgRUxGX1NZTlRBWCcgPj4uL21waS9hc20tc3ludGF4LmgKKwljYXQgICRzcmNkaXIvbXBpL2kzODYvc3ludGF4LmgJICAgID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0iYW1kNjQiCisgICAgICAgIG1waV9jcHVfYXJjaD0ieDg2IgorCTs7CisgICAgYWxwaGEqLSotKikKKwllY2hvICcvKiBjb25maWd1cmVkIGZvciBhbHBoYSAqLycgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJhbHBoYSIKKwltcGlfZXh0cmFfbW9kdWxlcz0idWRpdi1xcm5uZCIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJhbHBoYSIKKwk7OworICAgIGFhcmNoNjQtKi0qKQorCWVjaG8gJy8qIGNvbmZpZ3VyZWQgZm9yIGFhcmNoNjQgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0iYWFyY2g2NCIKKwltcGlfY3B1X2FyY2g9ImFhcmNoNjQiCisJOzsKKyAgICBhcm0qLSotKikKKwltcGlfY3B1X2FyY2g9ImFybSIKKwlpZiB0ZXN0ICIkZ2NyeV9jdl9nY2NfYXJtX3BsYXRmb3JtX2FzX29rIiA9ICJ5ZXMiIDsgdGhlbgorCSAgZWNobyAnLyogY29uZmlndXJlZCBmb3IgYXJtICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCSAgcGF0aD0iYXJtIgorCWVsc2UKKwkgIGVjaG8gJy8qIE5vIGFzc2VtYmxlciBtb2R1bGVzIGNvbmZpZ3VyZWQgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJICBwYXRoPSIiCisJZmkKKwk7OworICAgIGhwcGE3MDAwKi0qLSopCisJZWNobyAnLyogY29uZmlndXJlZCBmb3IgSFBQQSAocGE3MDAwKSAqLycgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJocHBhMS4xIGhwcGEiCisJbXBpX2V4dHJhX21vZHVsZXM9InVkaXYtcXJubmQiCisJbXBpX2NwdV9hcmNoPSJocHBhIgorCTs7CisgICAgaHBwYTEuMCotKi0qKQorCWVjaG8gJy8qIGNvbmZpZ3VyZWQgZm9yIEhQUEEgMS4wICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9ImhwcGEiCisJbXBpX2V4dHJhX21vZHVsZXM9InVkaXYtcXJubmQiCisJbXBpX2NwdV9hcmNoPSJocHBhIgorCTs7CisgICAgaHBwYSotKi0qKQkjIGFzc3VtZSBwYTcxMDAKKwllY2hvICcvKiBjb25maWd1cmVkIGZvciBIUFBBIChwYTcxMDApICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9InBhNzEwMCBocHBhMS4xIGhwcGEiCisJbXBpX2V4dHJhX21vZHVsZXM9InVkaXYtcXJubmQiCisJbXBpX2NwdV9hcmNoPSJocHBhIgorCTs7CisgICAgc3BhcmM2NC0qLWxpbnV4LWdudSkKKyAgICAgICAgZWNobyAnLyogTm8gd29ya2luZyBhc3NlbWJsZXIgbW9kdWxlcyBhdmFpbGFibGUgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0iIgorICAgICAgICBtcGlfY3B1X2FyY2g9InNwYXJjIgorCTs7CisgICAgc3BhcmM2NC1zdW4tc29sYXJpczIqKQorICAgICAgICBlY2hvICcvKiBObyB3b3JraW5nIGFzc2VtYmxlciBtb2R1bGVzIGF2YWlsYWJsZSAqLycgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSIiCisgICAgICAgIG1waV9jcHVfYXJjaD0ic3BhcmMiCisgICAgICAgIDs7CisgICAgc3BhcmM2NC0qLW5ldGJzZCogfCBzcGFyYzY0LSotZnJlZWJzZCogfCBzcGFyYzY0LSotb3BlbmJzZCopCisgICAgICAgIyBUaGVyZSBhcmUgbm8gc3BhcmM2NCBhc3NlbWJsZXIgbW9kdWxlcyB0aGF0IHdvcmsgb24gdGhlCisgICAgICAgIyAqQlNEcywgc28gdXNlIHRoZSBnZW5lcmljIEMgZnVuY3Rpb25zLgorICAgICAgIGVjaG8gJy8qIE5vIHdvcmtpbmcgYXNzZW1ibGVyIG1vZHVsZXMgYXZhaWxhYmxlICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9IiIKKyAgICAgICBtcGlfY3B1X2FyY2g9InNwYXJjIgorICAgICAgIDs7CisgICAgc3BhcmM2NCotKi0qKQorICAgICAgIGVjaG8gJy8qIE5vIHdvcmtpbmcgYXNzZW1ibGVyIG1vZHVsZXMgYXZhaWxhYmxlICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9IiIKKyAgICAgICBtcGlfY3B1X2FyY2g9InNwYXJjIgorICAgICAgIDs7CisgICAgc3BhcmM5Ki0qLSogICAgIHwgXAorICAgIHVsdHJhc3BhcmMqLSotKiApCisJZWNobyAnLyogY29uZmlndXJlZCBmb3Igc3BhcmM5IG9yIGhpZ2hlciAqLycgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJzcGFyYzMydjggc3BhcmMzMiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJzcGFyYyIKKwk7OworICAgIHNwYXJjOCotKi0qICAgICB8IFwKKyAgICBtaWNyb3NwYXJjKi0qLSopCisJZWNobyAnLyogY29uZmlndXJlZCBmb3Igc3BhcmM4ICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9InNwYXJjMzJ2OCBzcGFyYzMyIgorICAgICAgICBtcGlfY3B1X2FyY2g9InNwYXJjIgorCTs7CisgICAgc3VwZXJzcGFyYyotKi0qKQorCWVjaG8gJy8qIGNvbmZpZ3VyZWQgZm9yIHN1cGVyc3BhcmMgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0ic3VwZXJzcGFyYyBzcGFyYzMydjggc3BhcmMzMiIKKwltcGlfZXh0cmFfbW9kdWxlcz0idWRpdiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJzcGFyYyIKKwk7OworICAgIHNwYXJjKi0qLSopCisJZWNobyAnLyogY29uZmlndXJlZCBmb3Igc3BhcmMgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0ic3BhcmMzMiIKKwltcGlfZXh0cmFfbW9kdWxlcz0idWRpdiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJzcGFyYyIKKwk7OworICAgIG1pcHNbMzRdKi0qLSogfCBcCisgICAgbWlwcyotKi1pcml4NiopCisgICAgICAgZWNobyAnLyogY29uZmlndXJlZCBmb3IgTUlQUzMgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisgICAgICAgcGF0aD0ibWlwczMiCisgICAgICAgbXBpX2NwdV9hcmNoPSJtaXBzIgorICAgICAgIDs7CisgICAgbWlwcyotKi0qKQorICAgICAgIGVjaG8gJy8qIGNvbmZpZ3VyZWQgZm9yIE1JUFMyICovJyA+Pi4vbXBpL2FzbS1zeW50YXguaAorICAgICAgIHBhdGg9Im1pcHMyIgorICAgICAgIG1waV9jcHVfYXJjaD0ibWlwcyIKKyAgICAgICA7OworCisgICAgIyBNb3Rvcm9sYSA2OGsgY29uZmlndXJhdGlvbnMuICBMZXQgbTY4ayBtZWFuIDY4MDIwLTY4MDQwLgorICAgICMgbWM2ODAwMCBvciBtYzY4MDYwIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkKKyAgICBtNjgwWzIzNF0wKi0qLWxpbnV4YW91dCogfCBcCisgICAgbTY4ayotKi1saW51eGFvdXQqKQorCWVjaG8gJyNkZWZpbmUgTUlUX1NZTlRBWCcgICAgICAgICAgID4+Li9tcGkvYXNtLXN5bnRheC5oCisJY2F0ICAkc3JjZGlyL21waS9tNjhrL3N5bnRheC5oCSAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9Im02OGsvbWM2ODAyMCBtNjhrIgorICAgICAgICBtcGlfY3B1X2FyY2g9Im02OGsiCisJOzsKKyAgICBtNjgwNjAqLSotbGludXhhb3V0KikKKwllY2hvICcjZGVmaW5lIE1JVF9TWU5UQVgnICAgICAgICAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvbTY4ay9zeW50YXguaAkgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJtNjhrIgorICAgICAgICBtcGlfY3B1X2FyY2g9Im02OGsiCisJOzsKKyAgICBtNjgwWzIzNF0wKi0qLWxpbnV4KiB8IFwKKyAgICBtNjhrKi0qLWxpbnV4KikKKwllY2hvICcjZGVmaW5lIEVMRl9TWU5UQVgnICAgICAgICAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvbTY4ay9zeW50YXguaAkgICAgPj4uL21waS9hc20tc3ludGF4LmgKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJtNjhrIgorCTs7CisgICAgbTY4MDYwKi0qLWxpbnV4KikKKwllY2hvICcjZGVmaW5lIEVMRl9TWU5UQVgnICAgICAgICAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCWNhdCAgJHNyY2Rpci9tcGkvbTY4ay9zeW50YXguaAkgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJtNjhrIgorICAgICAgICBtcGlfY3B1X2FyY2g9Im02OGsiCisJOzsKKyAgICBtNjhrLWF0YXJpLW1pbnQpCisJZWNobyAnI2RlZmluZSBNSVRfU1lOVEFYJyAgICAgICAgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwljYXQgICRzcmNkaXIvbXBpL202OGsvc3ludGF4LmgJICAgID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0ibTY4ayIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJtNjhrIgorCTs7CisgICAgbTY4MDAwKi0qLSogfCBcCisgICAgbTY4MDYwKi0qLSopCisJZWNobyAnI2RlZmluZSBNSVRfU1lOVEFYJyAgICAgICAgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwljYXQgICRzcmNkaXIvbXBpL202OGsvc3ludGF4LmgJICAgID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0ibTY4ay9tYzY4MDAwIgorICAgICAgICBtcGlfY3B1X2FyY2g9Im02OGsiCisJOzsKKyAgICBtNjgwWzIzNF0wKi0qLSogfCBcCisgICAgbTY4ayotKi0qKQorCWVjaG8gJyNkZWZpbmUgTUlUX1NZTlRBWCcgICAgICAgICAgID4+Li9tcGkvYXNtLXN5bnRheC5oCisJY2F0ICAkc3JjZGlyL21waS9tNjhrL3N5bnRheC5oCSAgICA+Pi4vbXBpL2FzbS1zeW50YXguaAorCXBhdGg9Im02OGsvbWM2ODAyMCBtNjhrIgorICAgICAgICBtcGlfY3B1X2FyY2g9Im02OGsiCisJOzsKKworICAgIHBvd2VycGMqLSotbmV0YnNkKiB8IHBvd2VycGMqLSotb3BlbmJzZCopCisgICAgICAgZWNobyAnLyogY29uZmlndXJlZCB7T3BlbixOZXR9QlNEIG9uIHBvd2VycGMgKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisgICAgICAgZWNobyAnI2RlZmluZSBFTEZfU1lOVEFYJyAgICAgICAgICAgICAgICAgPj4uL21waS9hc20tc3ludGF4LmgKKyAgICAgICBjYXQgICAkc3JjZGlyL21waS9wb3dlcnBjMzIvc3ludGF4LmgJID4+Li9tcGkvYXNtLXN5bnRheC5oCisgICAgICAgbXBpX3NmbGFncz0iLVdhLC1tcHBjIgorICAgICAgIHBhdGg9InBvd2VycGMzMiIKKyAgICAgICBtcGlfY3B1X2FyY2g9InBwYyIKKyAgICAgICA7OworCisgICAgcHBjNjIwLSotKgkgICAgfCBcCisgICAgcG93ZXJwYzY0Ki0qLSopCisJbXBpX3NmbGFncz0iLVdhLC1tcHBjIgorCXBhdGg9InBvd2VycGM2NCIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJwcGMiCisJOzsKKyAgICBwb3dlcnBjKi0qLWxpbnV4KikKKwllY2hvICcvKiBjb25maWd1cmVkIGZvciBwb3dlcnBjL0VMRiAqLycgPj4uL21waS9hc20tc3ludGF4LmgKKwllY2hvICcjZGVmaW5lIEVMRl9TWU5UQVgnICAgICAgICAgICAgICAgPj4uL21waS9hc20tc3ludGF4LmgKKwljYXQgICAkc3JjZGlyL21waS9wb3dlcnBjMzIvc3ludGF4LmgJPj4uL21waS9hc20tc3ludGF4LmgKKwlwYXRoPSJwb3dlcnBjMzIiCisgICAgICAgbXBpX2NwdV9hcmNoPSJwcGMiCisJOzsKKworICAgIHJzNjAwMC0qLWFpeFs0NTY3ODldKiAgICB8IFwKKyAgICByczYwMDAtKi1haXgzLjIuWzQ1Njc4OV0pCisJbXBpX3NmbGFncz0iLVdhLC1tcHdyIgorCXBhdGg9InBvd2VyIgorCW1waV9leHRyYV9tb2R1bGVzPSJ1ZGl2LXctc2RpdiIKKwltcGlfY3B1X2FyY2g9InBwYyIKKwk7OworICAgIHJzNjAwMC0qLSogfCBcCisgICAgcG93ZXItKi0qICB8IFwKKyAgICBwb3dlcjItKi0qKQorCW1waV9zZmxhZ3M9Ii1XYSwtbXBwYyIKKwlwYXRoPSJwb3dlciIKKwltcGlfZXh0cmFfbW9kdWxlcz0idWRpdi13LXNkaXYiCisgICAgICAgIG1waV9jcHVfYXJjaD0icHBjIgorCTs7CisgICAgcG93ZXJwYy1pYm0tYWl4NC4yLiogKQorCSMgSSBhbSBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBidXQgYSBtYWNoaW5lIGlkZW50aWZpZWQgYnkKKwkjIHBvd2VycGMtaWJtLWFpeDQuMi4xLjAgY2Fubm90IHVzZSB0aGUgcG93ZXJwYzMyIGNvZGUuCisJbXBpX3NmbGFncz0iLVdhLC1tcHdyIgorCXBhdGg9InBvd2VyIgorCW1waV9leHRyYV9tb2R1bGVzPSJ1ZGl2LXctc2RpdiIKKyAgICAgICAgbXBpX2NwdV9hcmNoPSJwcGMiCisJOzsKKyAgICBwcGM2MDEtKi0qKQorCW1waV9zZmxhZ3M9Ii1XYSwtbXBwYyIKKwlwYXRoPSJwb3dlciBwb3dlcnBjMzIiCisgICAgICAgIG1waV9jcHVfYXJjaD0icHBjIgorCTs7CisgICAgcHBjNjBbMjM0XSotKi0qKQorCW1waV9zZmxhZ3M9Ii1XYSwtbXBwYyIKKwlwYXRoPSJwb3dlcnBjMzIiCisgICAgICAgIG1waV9jcHVfYXJjaD0icHBjIgorCTs7CisgICAgcG93ZXJwYyotKi0qKQorCW1waV9zZmxhZ3M9Ii1XYSwtbXBwYyIKKwlwYXRoPSJwb3dlcnBjMzIiCisgICAgICAgIG1waV9jcHVfYXJjaD0icHBjIgorCTs7CisgICAgKikKKwllY2hvICcvKiBQbGF0Zm9ybSBub3Qga25vd24gKi8nID4+Li9tcGkvYXNtLXN5bnRheC5oCisJcGF0aD0iIgorCTs7Citlc2FjCisKKyMgSWYgYXNtIG1vZHVsZXMgYXJlIGRpc2FibGVkIHJlc2V0IHRoZSBmb3VuZCB2YXJpYWJsZXMgYnV0IGtlZXAKKyMgbXBpX2NwdV9hcmNoLgoraWYgdGVzdCAiJHRyeV9hc21fbW9kdWxlcyIgIT0gInllcyIgOyB0aGVuCisgICAgZWNobyAnLyogQXNzZW1ibGVyIG1vZHVsZXMgZGlzYWJsZWQgb24gcmVxdWVzdCAqLycgPi4vbXBpL2FzbS1zeW50YXguaAorICAgIHBhdGg9IiIKKyAgICBtcGlfc2ZsYWdzPSIiCisgICAgbXBpX2V4dHJhX21vZHVsZXM9IiIKK2ZpCisKKyMgTWFrZSBzdXJlIHRoYXQgbXBpX2NwdV9hcmNoIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLgoraWYgdGVzdCB4IiRtcGlfY3B1X2FyY2giID0geCA7IHRoZW4KKyAgICBtcGlfY3B1X2FyY2g9InVua25vd24iCitmaQorCisKKyMgTWFrZSBzeXNkZXAuaAorZWNobyAnLyogY3JlYXRlZCBieSBjb25maWcubGlua3MgLSBkbyBub3QgZWRpdCAqLycgPi4vbXBpL3N5c2RlcC5oCitpZiB0ZXN0IHgkYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlID0geHllczsgdGhlbgorICAgIGNhdCA8PEVPRiA+Pi4vbXBpL3N5c2RlcC5oCisjaWYgX19TVERDX18KKyNkZWZpbmUgQ19TWU1CT0xfTkFNRShuYW1lKSBfIyNuYW1lCisjZWxzZQorI2RlZmluZSBDX1NZTUJPTF9OQU1FKG5hbWUpIF8vKiovbmFtZQorI2VuZGlmCitFT0YKK2Vsc2UKKyAgICBjYXQgPDxFT0YgPj4uL21waS9zeXNkZXAuaAorI2RlZmluZSBDX1NZTUJPTF9OQU1FKG5hbWUpIG5hbWUKK0VPRgorZmkKKworCisjIEZpZ3VyZSB0aGUgcmVxdWlyZWQgbW9kdWxlcyBvdXQKK21waV9yZXF1aXJlZF9tb2R1bGVzPSRtcGlfc3RhbmRhcmRfbW9kdWxlcworaWYgdGVzdCAiJG1waV9leHRyYV9tb2R1bGVzIiAhPSAiIjsgdGhlbgorICBmb3IgZm4gaW4gJG1waV9leHRyYV9tb2R1bGVzOyBkbworICAgICAgZm9yIGkgaW4gJG1waV9vcHRpb25hbF9tb2R1bGVzOyBkbworICAgICAgICAgIGlmIHRlc3QgIiRmbiIgPSAiJGkiIDsgdGhlbgorICAgICAgICAgICAgIG1waV9yZXF1aXJlZF9tb2R1bGVzPSIkbXBpX3JlcXVpcmVkX21vZHVsZXMgJGZuIgorICAgICAgICAgIGZpCisgICAgICBkb25lCisgIGRvbmUKK2ZpCisKKyMgVHJ5IHRvIGdldCBmaWxlIHRvIGxpbmsgZnJvbSB0aGUgYXNzZW1ibGVyIHN1YmRpcmVjdG9yeSBhbmQKKyMgaWYgdGhpcyBmYWlscyBnZXQgaXQgZnJvbSB0aGUgZ2VuZXJpYyBzdWJkaXJlY3RvcnkuCittcGlfbG5fbGlzdD0KK21waV9tb2RfbGlzdD0KK3BhdGg9YGVjaG8gIiRtcGlfZXh0cmFfcGF0aCAkcGF0aCBnZW5lcmljIiB8IHRyICc6JyAnICdgCitlY2hvICcvKiBDcmVhdGVkIGJ5IGNvbmZpZy5saW5rcyAtIGRvIG5vdCBlZGl0ICovJyA+Li9tcGkvbW9kLXNvdXJjZS1pbmZvLmgKK2VjaG8gIi8qIEhvc3Q6ICR7aG9zdH0gKi8iID4+Li9tcGkvbW9kLXNvdXJjZS1pbmZvLmgKK2VjaG8gInN0YXRpYyBjaGFyIG1vZF9zb3VyY2VfaW5mb1tdID0iID4+Li9tcGkvbW9kLXNvdXJjZS1pbmZvLmgKK2ZvciBmbiBpbiAkbXBpX3JlcXVpcmVkX21vZHVsZXMgOyBkbworICAgIGZudT1gZWNobyAkZm4gfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgbXBpX21vZF9jXyR7Zm51fT1ubworICAgIGV2YWwgbXBpX21vZF9hc21fJHtmbnV9PW5vCisgICAgZm9yIGRpciBpbiAkcGF0aCA7IGRvCisJcm0gLWYgJHNyY2Rpci9tcGkvJGZuLltTY10KKwlpZiB0ZXN0IC1mICRzcmNkaXIvbXBpLyRkaXIvJGZuLlMgOyB0aGVuCisgICAgICAgICAgICBlY2hvICIgIFwiOiRkaXIvJGZuLlNcIiIgPj4uL21waS9tb2Qtc291cmNlLWluZm8uaAorICAgICAgICAgICAgbXBpX2xuX2xpc3Q9IiRtcGlfbG5fbGlzdCBtcGkvJGZuLWFzbS5TOm1waS8kZGlyLyRmbi5TIgorICAgICAgICAgICAgZXZhbCBtcGlfbW9kX2FzbV8ke2ZudX09eWVzCisgICAgICAgICAgICBtcGlfbW9kX2xpc3Q9IiRtcGlfbW9kX2xpc3QgJGZuIgorCSAgICBicmVhazsKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci9tcGkvJGRpci8kZm4uYyA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiAgXCI6JGRpci8kZm4uY1wiIiA+Pi4vbXBpL21vZC1zb3VyY2UtaW5mby5oCisgICAgICAgICAgICBtcGlfbG5fbGlzdD0iJG1waV9sbl9saXN0IG1waS8kZm4uYzptcGkvJGRpci8kZm4uYyIKKyAgICAgICAgICAgIGV2YWwgbXBpX21vZF9jXyR7Zm51fT15ZXMKKyAgICAgICAgICAgIG1waV9tb2RfbGlzdD0iJG1waV9tb2RfbGlzdCAkZm4iCisJICAgIGJyZWFrOworCWZpCisgICAgZG9uZQorZG9uZQorZWNobyAiICA7IiA+Pi4vbXBpL21vZC1zb3VyY2UtaW5mby5oCisKKyMgU2FtZSB0aGluZyBmb3IgdGhlIGZpbGUgd2hpY2ggZGVmaW5lcyB0aGUgbGltYiBzaXplCitwYXRoPWBlY2hvICIkcGF0aCBnZW5lcmljIiB8IHRyICc6JyAnICdgCitmb3IgZGlyIGluICRwYXRoIDsgZG8KKyAgICBybSAtZiAkc3JjZGlyL21waS9tcGktYXNtLWRlZnMuaAorICAgIGlmIHRlc3QgLWYgJHNyY2Rpci9tcGkvJGRpci9tcGktYXNtLWRlZnMuaCA7IHRoZW4KKyAgICAgICAgbXBpX2xuX2xpc3Q9IiRtcGlfbG5fbGlzdCBtcGkvbXBpLWFzbS1kZWZzLmg6bXBpLyRkaXIvbXBpLWFzbS1kZWZzLmgiCisgICAgICAgIGJyZWFrOworICAgIGZpCitkb25lCmRpZmYgLS1naXQgYS9tcGkvZWMtZWQyNTUxOS5jIGIvbXBpL2VjLWVkMjU1MTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ZlMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2VjLWVkMjU1MTkuYwpAQCAtMCwwICsxLDM3IEBACisvKiBlYy1lZDI1NTE5LmMgLSAgRWQyNTUxOSBvcHRpbWl6ZWQgZWxsaXB0aWMgY3VydmUgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisjaW5jbHVkZSAiZWMtY29udGV4dC5oIgorCisKK3ZvaWQKK19nY3J5X21waV9lY19lZDI1NTE5X21vZCAoZ2NyeV9tcGlfdCBhKQoreworICAodm9pZClhOworCit9CmRpZmYgLS1naXQgYS9tcGkvZWMtaW50ZXJuYWwuaCBiL21waS9lYy1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTMzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZWMtaW50ZXJuYWwuaApAQCAtMCwwICsxLDI1IEBACisvKiBlYy1pbnRlcm5hbC5oIC0gSW50ZXJuYWwgZGVjbGFyYXRpb25zIG9mIGVjKi5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdDUllfRUNfSU5URVJOQUxfSAorI2RlZmluZSBHQ1JZX0VDX0lOVEVSTkFMX0gKKwordm9pZCBfZ2NyeV9tcGlfZWNfZWQyNTUxOV9tb2QgKGdjcnlfbXBpX3QgYSk7CisKKyNlbmRpZiAvKkdDUllfRUNfSU5URVJOQUxfSCovCmRpZmYgLS1naXQgYS9tcGkvZWMuYyBiL21waS9lYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODA3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZWMuYwpAQCAtMCwwICsxLDEzMDAgQEAKKy8qIGVjLmMgLSAgRWxsaXB0aWMgQ3VydmUgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisjaW5jbHVkZSAiZWMtY29udGV4dC5oIgorI2luY2x1ZGUgImVjLWludGVybmFsLmgiCisKKworI2RlZmluZSBwb2ludF9pbml0KGEpICBfZ2NyeV9tcGlfcG9pbnRfaW5pdCAoKGEpKQorI2RlZmluZSBwb2ludF9mcmVlKGEpICBfZ2NyeV9tcGlfcG9pbnRfZnJlZV9wYXJ0cyAoKGEpKQorCisKKy8qIFByaW50IGEgcG9pbnQgdXNpbmcgdGhlIGxvZyBmdWNudGlvbnMuICBJZiBDVFggaXMgbm90IE5VTEwgYWZmaW5lCisgICBjb29yZGluYXRlcyB3aWxsIGJlIHByaW50ZWQuICAqLwordm9pZAorX2djcnlfbXBpX3BvaW50X2xvZyAoY29uc3QgY2hhciAqbmFtZSwgbXBpX3BvaW50X3QgcG9pbnQsIG1waV9lY190IGN0eCkKK3sKKyAgZ2NyeV9tcGlfdCB4LCB5OworICBjaGFyIGJ1ZlsxMDBdOworCisgIGlmICghcG9pbnQpCisgICAgeworICAgICAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiAtIDEsICIlcy4qIiwgbmFtZSk7CisgICAgICBsb2dfbXBpZHVtcCAoYnVmLCBOVUxMKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIHNucHJpbnRmIChidWYsIHNpemVvZiBidWYgLSAxLCAiJXMuWCIsIG5hbWUpOworCisgIGlmIChjdHgpCisgICAgeworICAgICAgeCA9IG1waV9uZXcgKDApOworICAgICAgeSA9IG1waV9uZXcgKDApOworICAgIH0KKyAgaWYgKCFjdHggfHwgX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksIHBvaW50LCBjdHgpKQorICAgIHsKKyAgICAgIGxvZ19tcGlkdW1wIChidWYsIHBvaW50LT54KTsKKyAgICAgIGJ1ZltzdHJsZW4oYnVmKS0xXSA9ICdZJzsKKyAgICAgIGxvZ19tcGlkdW1wIChidWYsIHBvaW50LT55KTsKKyAgICAgIGJ1ZltzdHJsZW4oYnVmKS0xXSA9ICdaJzsKKyAgICAgIGxvZ19tcGlkdW1wIChidWYsIHBvaW50LT56KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBidWZbc3RybGVuKGJ1ZiktMV0gPSAneCc7CisgICAgICBsb2dfbXBpZHVtcCAoYnVmLCB4KTsKKyAgICAgIGJ1ZltzdHJsZW4oYnVmKS0xXSA9ICd5JzsKKyAgICAgIGxvZ19tcGlkdW1wIChidWYsIHkpOworCisgICAgfQorICBpZiAoY3R4KQorICAgIHsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICh4KTsKKyAgICAgIF9nY3J5X21waV9yZWxlYXNlICh5KTsKKyAgICB9Cit9CisKKworLyogQ3JlYXRlIGEgbmV3IHBvaW50IG9wdGlvbi4gIE5CSVRTIGdpdmVzIHRoZSBzaXplIGluIGJpdHMgb2Ygb25lCisgICBjb29yZGluYXRlOyBpdCBpcyBvbmx5IHVzZWQgdG8gcHJlLWFsbG9jYXRlIHNvbWUgcmVzb3VyY2VzIGFuZAorICAgbWlnaHQgYWxzbyBiZSBwYXNzZWQgYXMgMCB0byB1c2UgYSBkZWZhdWx0IHZhbHVlLiAgKi8KK21waV9wb2ludF90CitfZ2NyeV9tcGlfcG9pbnRfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIG1waV9wb2ludF90IHA7CisKKyAgKHZvaWQpbmJpdHM7ICAvKiBDdXJyZW50bHkgbm90IHVzZWQuICAqLworCisgIHAgPSB4bWFsbG9jIChzaXplb2YgKnApOworICBfZ2NyeV9tcGlfcG9pbnRfaW5pdCAocCk7CisgIHJldHVybiBwOworfQorCisKKy8qIFJlbGVhc2UgdGhlIHBvaW50IG9iamVjdCBQLiAgUCBtYXkgYmUgTlVMTC4gKi8KK3ZvaWQKK19nY3J5X21waV9wb2ludF9yZWxlYXNlIChtcGlfcG9pbnRfdCBwKQoreworICBpZiAocCkKKyAgICB7CisgICAgICBfZ2NyeV9tcGlfcG9pbnRfZnJlZV9wYXJ0cyAocCk7CisgICAgICB4ZnJlZSAocCk7CisgICAgfQorfQorCisKKy8qIEluaXRpYWxpemUgdGhlIGZpZWxkcyBvZiBhIHBvaW50IG9iamVjdC4gIGdjcnlfbXBpX3BvaW50X2ZyZWVfcGFydHMKKyAgIG1heSBiZSB1c2VkIHRvIHJlbGVhc2UgdGhlIGZpZWxkcy4gICovCit2b2lkCitfZ2NyeV9tcGlfcG9pbnRfaW5pdCAobXBpX3BvaW50X3QgcCkKK3sKKyAgcC0+eCA9IG1waV9uZXcgKDApOworICBwLT55ID0gbXBpX25ldyAoMCk7CisgIHAtPnogPSBtcGlfbmV3ICgwKTsKK30KKworCisvKiBSZWxlYXNlIHRoZSBwYXJ0cyBvZiBhIHBvaW50IG9iamVjdC4gKi8KK3ZvaWQKK19nY3J5X21waV9wb2ludF9mcmVlX3BhcnRzIChtcGlfcG9pbnRfdCBwKQoreworICBtcGlfZnJlZSAocC0+eCk7IHAtPnggPSBOVUxMOworICBtcGlfZnJlZSAocC0+eSk7IHAtPnkgPSBOVUxMOworICBtcGlfZnJlZSAocC0+eik7IHAtPnogPSBOVUxMOworfQorCisKKy8qIFNldCB0aGUgdmFsdWUgZnJvbSBTIGludG8gRC4gICovCitzdGF0aWMgdm9pZAorcG9pbnRfc2V0IChtcGlfcG9pbnRfdCBkLCBtcGlfcG9pbnRfdCBzKQoreworICBtcGlfc2V0IChkLT54LCBzLT54KTsKKyAgbXBpX3NldCAoZC0+eSwgcy0+eSk7CisgIG1waV9zZXQgKGQtPnosIHMtPnopOworfQorCisKKy8qIFNldCB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIFBPSU5UIGludG8gWCwgWSwgYW5kIFouICBJZiBhCisgICBjb29yZGluYXRlIGlzIG5vdCByZXF1aXJlZCwgWCwgWSwgb3IgWiBtYXkgYmUgcGFzc2VkIGFzIE5VTEwuICAqLwordm9pZAorX2djcnlfbXBpX3BvaW50X2dldCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeiwKKyAgICAgICAgICAgICAgICAgICAgIG1waV9wb2ludF90IHBvaW50KQoreworICBpZiAoeCkKKyAgICBtcGlfc2V0ICh4LCBwb2ludC0+eCk7CisgIGlmICh5KQorICAgIG1waV9zZXQgKHksIHBvaW50LT55KTsKKyAgaWYgKHopCisgICAgbXBpX3NldCAoeiwgcG9pbnQtPnopOworfQorCisKKy8qIFNldCB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIFBPSU5UIGludG8gWCwgWSwgYW5kIFogYW5kCisgICByZWxlYXNlIFBPSU5ULiAgSWYgYSBjb29yZGluYXRlIGlzIG5vdCByZXF1aXJlZCwgWCwgWSwgb3IgWiBtYXkgYmUKKyAgIHBhc3NlZCBhcyBOVUxMLiAgKi8KK3ZvaWQKK19nY3J5X21waV9wb2ludF9zbmF0Y2hfZ2V0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9wb2ludF90IHBvaW50KQoreworICBtcGlfc25hdGNoICh4LCBwb2ludC0+eCk7CisgIG1waV9zbmF0Y2ggKHksIHBvaW50LT55KTsKKyAgbXBpX3NuYXRjaCAoeiwgcG9pbnQtPnopOworICB4ZnJlZSAocG9pbnQpOworfQorCisKKy8qIFNldCB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIFgsIFksIGFuZCBaIGludG8gUE9JTlQuICBJZiBhCisgICBjb29yZGluYXRlIGlzIGdpdmVuIGFzIE5VTEwsIHRoZSB2YWx1ZSAwIGlzIHN0b3JlZCBpbnRvIHBvaW50LiAgSWYKKyAgIFBPSU5UIGlzIGdpdmVuIGFzIE5VTEwgYSBuZXcgcG9pbnQgb2JqZWN0IGlzIGFsbG9jYXRlZC4gIFJldHVybnMKKyAgIFBPSU5UIG9yIHRoZSBuZXdseSBhbGxvY2F0ZWQgcG9pbnQgb2JqZWN0LiAqLworbXBpX3BvaW50X3QKK19nY3J5X21waV9wb2ludF9zZXQgKG1waV9wb2ludF90IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeikKK3sKKyAgaWYgKCFwb2ludCkKKyAgICBwb2ludCA9IG1waV9wb2ludF9uZXcgKDApOworCisgIGlmICh4KQorICAgIG1waV9zZXQgKHBvaW50LT54LCB4KTsKKyAgZWxzZQorICAgIG1waV9jbGVhciAocG9pbnQtPngpOworICBpZiAoeSkKKyAgICBtcGlfc2V0IChwb2ludC0+eSwgeSk7CisgIGVsc2UKKyAgICBtcGlfY2xlYXIgKHBvaW50LT55KTsKKyAgaWYgKHopCisgICAgbXBpX3NldCAocG9pbnQtPnosIHopOworICBlbHNlCisgICAgbXBpX2NsZWFyIChwb2ludC0+eik7CisKKyAgcmV0dXJuIHBvaW50OworfQorCisKKy8qIFNldCB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIFgsIFksIGFuZCBaIGludG8gUE9JTlQuICBJZiBhCisgICBjb29yZGluYXRlIGlzIGdpdmVuIGFzIE5VTEwsIHRoZSB2YWx1ZSAwIGlzIHN0b3JlZCBpbnRvIHBvaW50LiAgSWYKKyAgIFBPSU5UIGlzIGdpdmVuIGFzIE5VTEwgYSBuZXcgcG9pbnQgb2JqZWN0IGlzIGFsbG9jYXRlZC4gIFRoZQorICAgY29vcmRpbmF0ZXMgWCwgWSwgYW5kIFogYXJlIHJlbGVhc2VkLiAgUmV0dXJucyBQT0lOVCBvciB0aGUgbmV3bHkKKyAgIGFsbG9jYXRlZCBwb2ludCBvYmplY3QuICovCittcGlfcG9pbnRfdAorX2djcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQgKG1waV9wb2ludF90IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHopCit7CisgIGlmICghcG9pbnQpCisgICAgcG9pbnQgPSBtcGlfcG9pbnRfbmV3ICgwKTsKKworICBpZiAoeCkKKyAgICBtcGlfc25hdGNoIChwb2ludC0+eCwgeCk7CisgIGVsc2UKKyAgICBtcGlfY2xlYXIgKHBvaW50LT54KTsKKyAgaWYgKHkpCisgICAgbXBpX3NuYXRjaCAocG9pbnQtPnksIHkpOworICBlbHNlCisgICAgbXBpX2NsZWFyIChwb2ludC0+eSk7CisgIGlmICh6KQorICAgIG1waV9zbmF0Y2ggKHBvaW50LT56LCB6KTsKKyAgZWxzZQorICAgIG1waV9jbGVhciAocG9pbnQtPnopOworCisgIHJldHVybiBwb2ludDsKK30KKworCisvKiBXID0gVyBtb2QgUC4gICovCitzdGF0aWMgdm9pZAorZWNfbW9kIChnY3J5X21waV90IHcsIG1waV9lY190IGVjKQoreworICBpZiAoMCAmJiBlYy0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgIF9nY3J5X21waV9lY19lZDI1NTE5X21vZCAodyk7CisgIGVsc2UgaWYgKGVjLT50LnBfYmFycmV0dCkKKyAgICBfZ2NyeV9tcGlfbW9kX2JhcnJldHQgKHcsIHcsIGVjLT50LnBfYmFycmV0dCk7CisgIGVsc2UKKyAgICBfZ2NyeV9tcGlfbW9kICh3LCB3LCBlYy0+cCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY19hZGRtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBtcGlfZWNfdCBjdHgpCit7CisgIG1waV9hZGQgKHcsIHUsIHYpOworICBlY19tb2QgKHcsIGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY19zdWJtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBtcGlfZWNfdCBlYykKK3sKKyAgKHZvaWQpZWM7CisgIG1waV9zdWIgKHcsIHUsIHYpOworICAvKmVjX21vZCAodywgZWMpOyovCit9CisKK3N0YXRpYyB2b2lkCitlY19tdWxtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBtcGlfZWNfdCBjdHgpCit7CisgIG1waV9tdWwgKHcsIHUsIHYpOworICBlY19tb2QgKHcsIGN0eCk7Cit9CisKKy8qIFcgPSAyICogVSBtb2QgUC4gICovCitzdGF0aWMgdm9pZAorZWNfbXVsMiAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIG1waV9lY190IGN0eCkKK3sKKyAgbXBpX2xzaGlmdCAodywgdSwgMSk7CisgIGVjX21vZCAodywgY3R4KTsKK30KKworc3RhdGljIHZvaWQKK2VjX3Bvd20gKGdjcnlfbXBpX3QgdywgY29uc3QgZ2NyeV9tcGlfdCBiLCBjb25zdCBnY3J5X21waV90IGUsCisgICAgICAgICBtcGlfZWNfdCBjdHgpCit7CisgIG1waV9wb3dtICh3LCBiLCBlLCBjdHgtPnApOworICAvKiBfZ2NyeV9tcGlfYWJzICh3KTsgKi8KK30KKworCisvKiBTaG9ydGN1dCBmb3IKKyAgICAgZWNfcG93bSAoQiwgQiwgbXBpX2NvbnN0IChNUElfQ19UV08pLCBjdHgpOworICAgZm9yIGVhc2llciBvcHRpbWl6YXRpb24uICAqLworc3RhdGljIHZvaWQKK2VjX3BvdzIgKGdjcnlfbXBpX3QgdywgY29uc3QgZ2NyeV9tcGlfdCBiLCBtcGlfZWNfdCBjdHgpCit7CisgIC8qIFVzaW5nIG1waV9tdWwgaXMgc2xpZ2h0bHkgZmFzdGVyIChhdCBsZWFzdCBvbiBhbWQ2NCkuICAqLworICAvKiBtcGlfcG93bSAodywgYiwgbXBpX2NvbnN0IChNUElfQ19UV08pLCBjdHgtPnApOyAqLworICBlY19tdWxtICh3LCBiLCBiLCBjdHgpOworfQorCisKKy8qIFNob3J0Y3V0IGZvcgorICAgICBlY19wb3dtIChCLCBCLCBtcGlfY29uc3QgKE1QSV9DX1RIUkVFKSwgY3R4KTsKKyAgIGZvciBlYXNpZXIgb3B0aW1pemF0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCitlY19wb3czIChnY3J5X21waV90IHcsIGNvbnN0IGdjcnlfbXBpX3QgYiwgbXBpX2VjX3QgY3R4KQoreworICBtcGlfcG93bSAodywgYiwgbXBpX2NvbnN0IChNUElfQ19USFJFRSksIGN0eC0+cCk7Cit9CisKKworc3RhdGljIHZvaWQKK2VjX2ludm0gKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCBtcGlfZWNfdCBjdHgpCit7CisgIGlmICghbXBpX2ludm0gKHgsIGEsIGN0eC0+cCkpCisgICAgeworICAgICAgbG9nX2Vycm9yICgiZWNfaW52bTogaW52ZXJzZSBkb2VzIG5vdCBleGlzdDpcbiIpOworICAgICAgbG9nX21waWR1bXAgKCIgIGEiLCBhKTsKKyAgICAgIGxvZ19tcGlkdW1wICgiICBwIiwgY3R4LT5wKTsKKyAgICB9Cit9CisKKworLyogRm9yY2UgcmVjb21wdXRhdGlvbiBvZiBhbGwgaGVscGVyIHZhcmlhYmxlcy4gICovCit2b2lkCitfZ2NyeV9tcGlfZWNfZ2V0X3Jlc2V0IChtcGlfZWNfdCBlYykKK3sKKyAgZWMtPnQudmFsaWQuYV9pc19wbWludXMzID0gMDsKKyAgZWMtPnQudmFsaWQudHdvX2ludl9wID0gMDsKK30KKworCisvKiBBY2Nlc3NvciBmb3IgaGVscGVyIHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBpbnQKK2VjX2dldF9hX2lzX3BtaW51czMgKG1waV9lY190IGVjKQoreworICBnY3J5X21waV90IHRtcDsKKworICBpZiAoIWVjLT50LnZhbGlkLmFfaXNfcG1pbnVzMykKKyAgICB7CisgICAgICBlYy0+dC52YWxpZC5hX2lzX3BtaW51czMgPSAxOworICAgICAgdG1wID0gbXBpX2FsbG9jX2xpa2UgKGVjLT5wKTsKKyAgICAgIG1waV9zdWJfdWkgKHRtcCwgZWMtPnAsIDMpOworICAgICAgZWMtPnQuYV9pc19wbWludXMzID0gIW1waV9jbXAgKGVjLT5hLCB0bXApOworICAgICAgbXBpX2ZyZWUgKHRtcCk7CisgICAgfQorCisgIHJldHVybiBlYy0+dC5hX2lzX3BtaW51czM7Cit9CisKKworLyogQWNjZXNzb3IgZm9yIGhlbHBlciB2YXJpYWJsZS4gICovCitzdGF0aWMgZ2NyeV9tcGlfdAorZWNfZ2V0X3R3b19pbnZfcCAobXBpX2VjX3QgZWMpCit7CisgIGlmICghZWMtPnQudmFsaWQudHdvX2ludl9wKQorICAgIHsKKyAgICAgIGVjLT50LnZhbGlkLnR3b19pbnZfcCA9IDE7CisgICAgICBpZiAoIWVjLT50LnR3b19pbnZfcCkKKyAgICAgICAgZWMtPnQudHdvX2ludl9wID0gbXBpX2FsbG9jICgwKTsKKyAgICAgIGVjX2ludm0gKGVjLT50LnR3b19pbnZfcCwgbXBpX2NvbnN0IChNUElfQ19UV08pLCBlYyk7CisgICAgfQorICByZXR1cm4gZWMtPnQudHdvX2ludl9wOworfQorCisKKworLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplZCBhIGNvbnRleHQgZm9yIGVsbGlwdGljIGN1cnZlIGJhc2VkIG9uIHRoZQorICAgZmllbGQgR0YocCkuICBQIGlzIHRoZSBwcmltZSBzcGVjaWZ5aW5nIHRoaXMgZmllbGQsIEEgaXMgdGhlIGZpcnN0CisgICBjb2VmZmljaWVudC4gIENUWCBpcyBleHBlY3RlZCB0byBiZSB6ZXJvaXplZC4gICovCitzdGF0aWMgdm9pZAorZWNfcF9pbml0IChtcGlfZWNfdCBjdHgsIGVudW0gZ2NyeV9tcGlfZWNfbW9kZWxzIG1vZGVsLAorICAgICAgICAgICBlbnVtIGVjY19kaWFsZWN0cyBkaWFsZWN0LAorICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgIGdjcnlfbXBpX3QgcCwgZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpCit7CisgIGludCBpOworICBzdGF0aWMgaW50IHVzZV9iYXJyZXR0OworCisgIGlmICghdXNlX2JhcnJldHQpCisgICAgeworICAgICAgaWYgKGdldGVudiAoIkdDUllQVF9CQVJSRVRUIikpCisgICAgICAgIHVzZV9iYXJyZXR0ID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgdXNlX2JhcnJldHQgPSAtMTsKKyAgICB9CisKKyAgLyogRml4bWU6IERvIHdlIHdhbnQgdG8gY2hlY2sgc29tZSBjb25zdHJhaW50cz8gZS5nLiAgYSA8IHAgICovCisKKyAgY3R4LT5tb2RlbCA9IG1vZGVsOworICBjdHgtPmRpYWxlY3QgPSBkaWFsZWN0OworICBjdHgtPmZsYWdzID0gZmxhZ3M7CisgIGlmIChkaWFsZWN0ID09IEVDQ19ESUFMRUNUX0VEMjU1MTkpCisgICAgY3R4LT5uYml0cyA9IDI1NjsKKyAgZWxzZQorICAgIGN0eC0+bmJpdHMgPSBtcGlfZ2V0X25iaXRzIChwKTsKKyAgY3R4LT5wID0gbXBpX2NvcHkgKHApOworICBjdHgtPmEgPSBtcGlfY29weSAoYSk7CisgIGN0eC0+YiA9IG1waV9jb3B5IChiKTsKKworICBjdHgtPnQucF9iYXJyZXR0ID0gdXNlX2JhcnJldHQgPiAwPyBfZ2NyeV9tcGlfYmFycmV0dF9pbml0IChjdHgtPnAsIDApOk5VTEw7CisKKyAgX2djcnlfbXBpX2VjX2dldF9yZXNldCAoY3R4KTsKKworICAvKiBBbGxvY2F0ZSBzY3JhdGNoIHZhcmlhYmxlcy4gICovCisgIGZvciAoaT0wOyBpPCBESU0oY3R4LT50LnNjcmF0Y2gpOyBpKyspCisgICAgY3R4LT50LnNjcmF0Y2hbaV0gPSBtcGlfYWxsb2NfbGlrZSAoY3R4LT5wKTsKKworICAvKiBQcmVwYXJlIGZvciBmYXN0IHJlZHVjdGlvbi4gICovCisgIC8qIEZJWE1FOiBuZWVkIGEgdGVzdCBmb3IgTklTVCB2YWx1ZXMuICBIb3dldmVyIGl0IGRvZXMgbm90IGdhaW4gdXMKKyAgICAgYW55IHJlYWwgYWR2YW50YWdlLCBmb3IgMzg0IGJpdHMgaXQgaXMgYWN0dWFsbHkgc2xvd2VyIHRoYW4gdXNpbmcKKyAgICAgbXBpX211bG0uICAqLworLyogICBjdHgtPm5pc3RfbmJpdHMgPSBtcGlfZ2V0X25iaXRzIChjdHgtPnApOyAqLworLyogICBpZiAoY3R4LT5uaXN0X25iaXRzID09IDE5MikgKi8KKy8qICAgICB7ICovCisvKiAgICAgICBmb3IgKGk9MDsgaSA8IDQ7IGkrKykgKi8KKy8qICAgICAgICAgY3R4LT5zW2ldID0gbXBpX25ldyAoMTkyKTsgKi8KKy8qICAgICAgIGN0eC0+YyAgICA9IG1waV9uZXcgKDE5MioyKTsgKi8KKy8qICAgICB9ICovCisvKiAgIGVsc2UgaWYgKGN0eC0+bmlzdF9uYml0cyA9PSAzODQpICovCisvKiAgICAgeyAqLworLyogICAgICAgZm9yIChpPTA7IGkgPCAxMDsgaSsrKSAqLworLyogICAgICAgICBjdHgtPnNbaV0gPSBtcGlfbmV3ICgzODQpOyAqLworLyogICAgICAgY3R4LT5jICAgID0gbXBpX25ldyAoMzg0KjIpOyAqLworLyogICAgIH0gKi8KK30KKworCitzdGF0aWMgdm9pZAorZWNfZGVpbml0ICh2b2lkICpvcGFxdWUpCit7CisgIG1waV9lY190IGN0eCA9IG9wYXF1ZTsKKyAgaW50IGk7CisKKyAgX2djcnlfbXBpX2JhcnJldHRfZnJlZSAoY3R4LT50LnBfYmFycmV0dCk7CisKKyAgLyogRG9tYWluIHBhcmFtZXRlci4gICovCisgIG1waV9mcmVlIChjdHgtPnApOworICBtcGlfZnJlZSAoY3R4LT5hKTsKKyAgbXBpX2ZyZWUgKGN0eC0+Yik7CisgIF9nY3J5X21waV9wb2ludF9yZWxlYXNlIChjdHgtPkcpOworICBtcGlfZnJlZSAoY3R4LT5uKTsKKworICAvKiBUaGUga2V5LiAgKi8KKyAgX2djcnlfbXBpX3BvaW50X3JlbGVhc2UgKGN0eC0+USk7CisgIG1waV9mcmVlIChjdHgtPmQpOworCisgIC8qIFByaXZhdGUgZGF0YSBvZiBlYy5jLiAgKi8KKyAgbXBpX2ZyZWUgKGN0eC0+dC50d29faW52X3ApOworCisgIGZvciAoaT0wOyBpPCBESU0oY3R4LT50LnNjcmF0Y2gpOyBpKyspCisgICAgbXBpX2ZyZWUgKGN0eC0+dC5zY3JhdGNoW2ldKTsKKworLyogICBpZiAoY3R4LT5uaXN0X25iaXRzID09IDE5MikgKi8KKy8qICAgICB7ICovCisvKiAgICAgICBmb3IgKGk9MDsgaSA8IDQ7IGkrKykgKi8KKy8qICAgICAgICAgbXBpX2ZyZWUgKGN0eC0+c1tpXSk7ICovCisvKiAgICAgICBtcGlfZnJlZSAoY3R4LT5jKTsgKi8KKy8qICAgICB9ICovCisvKiAgIGVsc2UgaWYgKGN0eC0+bmlzdF9uYml0cyA9PSAzODQpICovCisvKiAgICAgeyAqLworLyogICAgICAgZm9yIChpPTA7IGkgPCAxMDsgaSsrKSAqLworLyogICAgICAgICBtcGlfZnJlZSAoY3R4LT5zW2ldKTsgKi8KKy8qICAgICAgIG1waV9mcmVlIChjdHgtPmMpOyAqLworLyogICAgIH0gKi8KK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgY29udGV4dCBmb3IgZWxsaXB0aWMgY3VydmUgYmFzZWQgb24gdGhlCisgICBmaWVsZCBHRihwKS4gIFAgaXMgdGhlIHByaW1lIHNwZWNpZnlpbmcgdGhpcyBmaWVsZCwgQSBpcyB0aGUgZmlyc3QKKyAgIGNvZWZmaWNpZW50LCBCIGlzIHRoZSBzZWNvbmQgY29lZmZpY2llbnQsIGFuZCBNT0RFTCBpcyB0aGUgbW9kZWwKKyAgIGZvciB0aGUgY3VydmUuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB3aXRoaW4gTGliZ2NyeXB0IGFuZCBub3QKKyAgIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuCisKKyAgIFRoaXMgY29udGV4dCBuZWVkcyB0byBiZSByZWxlYXNlZCB1c2luZyBfZ2NyeV9tcGlfZWNfZnJlZS4gICovCittcGlfZWNfdAorX2djcnlfbXBpX2VjX3BfaW50ZXJuYWxfbmV3IChlbnVtIGdjcnlfbXBpX2VjX21vZGVscyBtb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBlY2NfZGlhbGVjdHMgZGlhbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHAsIGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiKQoreworICBtcGlfZWNfdCBjdHg7CisKKyAgY3R4ID0geGNhbGxvYyAoMSwgc2l6ZW9mICpjdHgpOworICBlY19wX2luaXQgKGN0eCwgbW9kZWwsIGRpYWxlY3QsIGZsYWdzLCBwLCBhLCBiKTsKKworICByZXR1cm4gY3R4OworfQorCisKKy8qIFRoaXMgaXMgYSB2YXJpYW50IG9mIF9nY3J5X21waV9lY19wX2ludGVybmFsX25ldyB3aGljaCByZXR1cm5zIGFuCisgICBwdWJsaWMgY29udGV4dCBhbmQgZG9lcyBzb21lIGVycm9yIGNoZWNraW5nIG9uIHRoZSBzdXBwbGllZAorICAgYXJndW1lbnRzLiAgT24gc3VjY2VzcyB0aGUgbmV3IGNvbnRleHQgaXMgc3RvcmVkIGF0IFJfQ1RYIGFuZCAwIGlzCisgICByZXR1cm5lZDsgb24gZXJyb3IgTlVMTCBpcyBzdG9yZWQgYXQgUl9DVFggYW5kIGFuIGVycm9yIGNvZGUgaXMKKyAgIHJldHVybmVkLgorCisgICBUaGUgY29udGV4dCBuZWVkcyB0byBiZSByZWxlYXNlZCB1c2luZyBnY3J5X2N0eF9yZWxlYXNlLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9tcGlfZWNfcF9uZXcgKGdjcnlfY3R4X3QgKnJfY3R4LAorICAgICAgICAgICAgICAgICAgICBlbnVtIGdjcnlfbXBpX2VjX21vZGVscyBtb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgZW51bSBlY2NfZGlhbGVjdHMgZGlhbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHAsIGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiKQoreworICBnY3J5X2N0eF90IGN0eDsKKyAgbXBpX2VjX3QgZWM7CisKKyAgKnJfY3R4ID0gTlVMTDsKKyAgaWYgKCFwIHx8ICFhIHx8ICFtcGlfY21wX3VpIChhLCAwKSkKKyAgICByZXR1cm4gR1BHX0VSUl9FSU5WQUw7CisKKyAgY3R4ID0gX2djcnlfY3R4X2FsbG9jIChDT05URVhUX1RZUEVfRUMsIHNpemVvZiAqZWMsIGVjX2RlaW5pdCk7CisgIGlmICghY3R4KQorICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgZWMgPSBfZ2NyeV9jdHhfZ2V0X3BvaW50ZXIgKGN0eCwgQ09OVEVYVF9UWVBFX0VDKTsKKyAgZWNfcF9pbml0IChlYywgbW9kZWwsIGRpYWxlY3QsIGZsYWdzLCBwLCBhLCBiKTsKKworICAqcl9jdHggPSBjdHg7CisgIHJldHVybiAwOworfQorCisKK3ZvaWQKK19nY3J5X21waV9lY19mcmVlIChtcGlfZWNfdCBjdHgpCit7CisgIGlmIChjdHgpCisgICAgeworICAgICAgZWNfZGVpbml0IChjdHgpOworICAgICAgeGZyZWUgKGN0eCk7CisgICAgfQorfQorCisKK2djcnlfbXBpX3QKK19nY3J5X21waV9lY19nZXRfbXBpIChjb25zdCBjaGFyICpuYW1lLCBnY3J5X2N0eF90IGN0eCwgaW50IGNvcHkpCit7CisgIG1waV9lY190IGVjID0gX2djcnlfY3R4X2dldF9wb2ludGVyIChjdHgsIENPTlRFWFRfVFlQRV9FQyk7CisKKyAgcmV0dXJuIF9nY3J5X2VjY19nZXRfbXBpIChuYW1lLCBlYywgY29weSk7Cit9CisKKworZ2NyeV9tcGlfcG9pbnRfdAorX2djcnlfbXBpX2VjX2dldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9jdHhfdCBjdHgsIGludCBjb3B5KQoreworICBtcGlfZWNfdCBlYyA9IF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpOworCisgICh2b2lkKWNvcHk7ICAvKiBOb3QgdXNlZC4gICovCisKKyAgcmV0dXJuIF9nY3J5X2VjY19nZXRfcG9pbnQgKG5hbWUsIGVjKTsKK30KKworCitncGdfZXJyX2NvZGVfdAorX2djcnlfbXBpX2VjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3QgbmV3dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpCit7CisgIG1waV9lY190IGVjID0gX2djcnlfY3R4X2dldF9wb2ludGVyIChjdHgsIENPTlRFWFRfVFlQRV9FQyk7CisKKyAgcmV0dXJuIF9nY3J5X2VjY19zZXRfbXBpIChuYW1lLCBuZXd2YWx1ZSwgZWMpOworfQorCisKK2dwZ19lcnJfY29kZV90CitfZ2NyeV9tcGlfZWNfc2V0X3BvaW50IChjb25zdCBjaGFyICpuYW1lLCBnY3J5X21waV9wb2ludF90IG5ld3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpCit7CisgIG1waV9lY190IGVjID0gX2djcnlfY3R4X2dldF9wb2ludGVyIChjdHgsIENPTlRFWFRfVFlQRV9FQyk7CisKKyAgcmV0dXJuIF9nY3J5X2VjY19zZXRfcG9pbnQgKG5hbWUsIG5ld3ZhbHVlLCBlYyk7Cit9CisKKworLyogQ29tcHV0ZSB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIGZyb20gdGhlIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgaW4KKyAgIFBPSU5ULiAgU2V0IHRoZW0gaW50byBYIGFuZCBZLiAgSWYgb25lIGNvb3JkaW5hdGUgaXMgbm90IHJlcXVpcmVkLAorICAgWCBvciBZIG1heSBiZSBwYXNzZWQgYXMgTlVMTC4gIENUWCBpcyB0aGUgdXN1YWwgY29udGV4dC4gUmV0dXJuczogMAorICAgb24gc3VjY2VzcyBvciAhMCBpZiBQT0lOVCBpcyBhdCBpbmZpbml0eS4gICovCitpbnQKK19nY3J5X21waV9lY19nZXRfYWZmaW5lIChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4KQoreworICBpZiAoIW1waV9jbXBfdWkgKHBvaW50LT56LCAwKSkKKyAgICByZXR1cm4gLTE7CisKKyAgc3dpdGNoIChjdHgtPm1vZGVsKQorICAgIHsKKyAgICBjYXNlIE1QSV9FQ19XRUlFUlNUUkFTUzogLyogVXNpbmcgSmFjb2JpYW4gY29vcmRpbmF0ZXMuICAqLworICAgICAgeworICAgICAgICBnY3J5X21waV90IHoxLCB6MiwgejM7CisKKyAgICAgICAgejEgPSBtcGlfbmV3ICgwKTsKKyAgICAgICAgejIgPSBtcGlfbmV3ICgwKTsKKyAgICAgICAgZWNfaW52bSAoejEsIHBvaW50LT56LCBjdHgpOyAgLyogejEgPSB6XigtMSkgbW9kIHAgICovCisgICAgICAgIGVjX211bG0gKHoyLCB6MSwgejEsIGN0eCk7ICAgIC8qIHoyID0gel4oLTIpIG1vZCBwICAqLworCisgICAgICAgIGlmICh4KQorICAgICAgICAgIGVjX211bG0gKHgsIHBvaW50LT54LCB6MiwgY3R4KTsKKworICAgICAgICBpZiAoeSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB6MyA9IG1waV9uZXcgKDApOworICAgICAgICAgICAgZWNfbXVsbSAoejMsIHoyLCB6MSwgY3R4KTsgICAgICAvKiB6MyA9IHpeKC0zKSBtb2QgcCAgKi8KKyAgICAgICAgICAgIGVjX211bG0gKHksIHBvaW50LT55LCB6MywgY3R4KTsKKyAgICAgICAgICAgIG1waV9mcmVlICh6Myk7CisgICAgICAgICAgfQorCisgICAgICAgIG1waV9mcmVlICh6Mik7CisgICAgICAgIG1waV9mcmVlICh6MSk7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgTVBJX0VDX01PTlRHT01FUlk6CisgICAgICB7CisgICAgICAgIGxvZ19mYXRhbCAoIiVzOiAlcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAiX2djcnlfbXBpX2VjX2dldF9hZmZpbmUiLCAiTW9udGdvbWVyeSIpOworICAgICAgfQorICAgICAgcmV0dXJuIC0xOworCisgICAgY2FzZSBNUElfRUNfVFdJU1RFREVEV0FSRFM6CisgICAgICB7CisgICAgICAgIGdjcnlfbXBpX3QgejsKKworICAgICAgICB6ID0gbXBpX25ldyAoMCk7CisgICAgICAgIGVjX2ludm0gKHosIHBvaW50LT56LCBjdHgpOworCisgICAgICAgIGlmICh4KQorICAgICAgICAgIGVjX211bG0gKHgsIHBvaW50LT54LCB6LCBjdHgpOworICAgICAgICBpZiAoeSkKKyAgICAgICAgICBlY19tdWxtICh5LCBwb2ludC0+eSwgeiwgY3R4KTsKKworICAgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoeik7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKKwwKKy8qICBSRVNVTFQgPSAyICogUE9JTlQgIChXZWllcnN0cmFzcyB2ZXJzaW9uKS4gKi8KK3N0YXRpYyB2b2lkCitkdXBfcG9pbnRfd2VpZXJzdHJhc3MgKG1waV9wb2ludF90IHJlc3VsdCwgbXBpX3BvaW50X3QgcG9pbnQsIG1waV9lY190IGN0eCkKK3sKKyNkZWZpbmUgeDMgKHJlc3VsdC0+eCkKKyNkZWZpbmUgeTMgKHJlc3VsdC0+eSkKKyNkZWZpbmUgejMgKHJlc3VsdC0+eikKKyNkZWZpbmUgdDEgKGN0eC0+dC5zY3JhdGNoWzBdKQorI2RlZmluZSB0MiAoY3R4LT50LnNjcmF0Y2hbMV0pCisjZGVmaW5lIHQzIChjdHgtPnQuc2NyYXRjaFsyXSkKKyNkZWZpbmUgbDEgKGN0eC0+dC5zY3JhdGNoWzNdKQorI2RlZmluZSBsMiAoY3R4LT50LnNjcmF0Y2hbNF0pCisjZGVmaW5lIGwzIChjdHgtPnQuc2NyYXRjaFs1XSkKKworICBpZiAoIW1waV9jbXBfdWkgKHBvaW50LT55LCAwKSB8fCAhbXBpX2NtcF91aSAocG9pbnQtPnosIDApKQorICAgIHsKKyAgICAgIC8qIFBfeSA9PSAwIHx8IFBfeiA9PSAwID0+IFsxOjE6MF0gKi8KKyAgICAgIG1waV9zZXRfdWkgKHgzLCAxKTsKKyAgICAgIG1waV9zZXRfdWkgKHkzLCAxKTsKKyAgICAgIG1waV9zZXRfdWkgKHozLCAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZWNfZ2V0X2FfaXNfcG1pbnVzMyAoY3R4KSkgIC8qIFVzZSB0aGUgZmFzdGVyIGNhc2UuICAqLworICAgICAgICB7CisgICAgICAgICAgLyogTDEgPSAzKFggLSBaXjIpKFggKyBaXjIpICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIFQxOiB1c2VkIGZvciBaXjIuICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIFQyOiB1c2VkIGZvciB0aGUgcmlnaHQgdGVybS4gICovCisgICAgICAgICAgZWNfcG93MiAodDEsIHBvaW50LT56LCBjdHgpOworICAgICAgICAgIGVjX3N1Ym0gKGwxLCBwb2ludC0+eCwgdDEsIGN0eCk7CisgICAgICAgICAgZWNfbXVsbSAobDEsIGwxLCBtcGlfY29uc3QgKE1QSV9DX1RIUkVFKSwgY3R4KTsKKyAgICAgICAgICBlY19hZGRtICh0MiwgcG9pbnQtPngsIHQxLCBjdHgpOworICAgICAgICAgIGVjX211bG0gKGwxLCBsMSwgdDIsIGN0eCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgLyogU3RhbmRhcmQgY2FzZS4gKi8KKyAgICAgICAgeworICAgICAgICAgIC8qIEwxID0gM1heMiArIGFaXjQgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgVDE6IHVzZWQgZm9yIGFaXjQuICovCisgICAgICAgICAgZWNfcG93MiAobDEsIHBvaW50LT54LCBjdHgpOworICAgICAgICAgIGVjX211bG0gKGwxLCBsMSwgbXBpX2NvbnN0IChNUElfQ19USFJFRSksIGN0eCk7CisgICAgICAgICAgZWNfcG93bSAodDEsIHBvaW50LT56LCBtcGlfY29uc3QgKE1QSV9DX0ZPVVIpLCBjdHgpOworICAgICAgICAgIGVjX211bG0gKHQxLCB0MSwgY3R4LT5hLCBjdHgpOworICAgICAgICAgIGVjX2FkZG0gKGwxLCBsMSwgdDEsIGN0eCk7CisgICAgICAgIH0KKyAgICAgIC8qIFozID0gMllaICovCisgICAgICBlY19tdWxtICh6MywgcG9pbnQtPnksIHBvaW50LT56LCBjdHgpOworICAgICAgZWNfbXVsMiAoejMsIHozLCBjdHgpOworCisgICAgICAvKiBMMiA9IDRYWV4yICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQyOiB1c2VkIGZvciBZMjsgcmVxdWlyZWQgbGF0ZXIuICovCisgICAgICBlY19wb3cyICh0MiwgcG9pbnQtPnksIGN0eCk7CisgICAgICBlY19tdWxtIChsMiwgdDIsIHBvaW50LT54LCBjdHgpOworICAgICAgZWNfbXVsbSAobDIsIGwyLCBtcGlfY29uc3QgKE1QSV9DX0ZPVVIpLCBjdHgpOworCisgICAgICAvKiBYMyA9IEwxXjIgLSAyTDIgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDE6IHVzZWQgZm9yIEwyXjIuICovCisgICAgICBlY19wb3cyICh4MywgbDEsIGN0eCk7CisgICAgICBlY19tdWwyICh0MSwgbDIsIGN0eCk7CisgICAgICBlY19zdWJtICh4MywgeDMsIHQxLCBjdHgpOworCisgICAgICAvKiBMMyA9IDhZXjQgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDI6IHRha2VuIGZyb20gYWJvdmUuICovCisgICAgICBlY19wb3cyICh0MiwgdDIsIGN0eCk7CisgICAgICBlY19tdWxtIChsMywgdDIsIG1waV9jb25zdCAoTVBJX0NfRUlHSFQpLCBjdHgpOworCisgICAgICAvKiBZMyA9IEwxKEwyIC0gWDMpIC0gTDMgKi8KKyAgICAgIGVjX3N1Ym0gKHkzLCBsMiwgeDMsIGN0eCk7CisgICAgICBlY19tdWxtICh5MywgeTMsIGwxLCBjdHgpOworICAgICAgZWNfc3VibSAoeTMsIHkzLCBsMywgY3R4KTsKKyAgICB9CisKKyN1bmRlZiB4MworI3VuZGVmIHkzCisjdW5kZWYgejMKKyN1bmRlZiB0MQorI3VuZGVmIHQyCisjdW5kZWYgdDMKKyN1bmRlZiBsMQorI3VuZGVmIGwyCisjdW5kZWYgbDMKK30KKworCisvKiAgUkVTVUxUID0gMiAqIFBPSU5UICAoTW9udGdvbWVyeSB2ZXJzaW9uKS4gKi8KK3N0YXRpYyB2b2lkCitkdXBfcG9pbnRfbW9udGdvbWVyeSAobXBpX3BvaW50X3QgcmVzdWx0LCBtcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4KQoreworICAodm9pZClyZXN1bHQ7CisgICh2b2lkKXBvaW50OworICAodm9pZCljdHg7CisgIGxvZ19mYXRhbCAoIiVzOiAlcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAiX2djcnlfbXBpX2VjX2R1cF9wb2ludCIsICJNb250Z29tZXJ5Iik7Cit9CisKKworLyogIFJFU1VMVCA9IDIgKiBQT0lOVCAgKFR3aXN0ZWQgRWR3YXJkcyB2ZXJzaW9uKS4gKi8KK3N0YXRpYyB2b2lkCitkdXBfcG9pbnRfdHdpc3RlZGVkd2FyZHMgKG1waV9wb2ludF90IHJlc3VsdCwgbXBpX3BvaW50X3QgcG9pbnQsIG1waV9lY190IGN0eCkKK3sKKyNkZWZpbmUgWDEgKHBvaW50LT54KQorI2RlZmluZSBZMSAocG9pbnQtPnkpCisjZGVmaW5lIFoxIChwb2ludC0+eikKKyNkZWZpbmUgWDMgKHJlc3VsdC0+eCkKKyNkZWZpbmUgWTMgKHJlc3VsdC0+eSkKKyNkZWZpbmUgWjMgKHJlc3VsdC0+eikKKyNkZWZpbmUgQiAoY3R4LT50LnNjcmF0Y2hbMF0pCisjZGVmaW5lIEMgKGN0eC0+dC5zY3JhdGNoWzFdKQorI2RlZmluZSBEIChjdHgtPnQuc2NyYXRjaFsyXSkKKyNkZWZpbmUgRSAoY3R4LT50LnNjcmF0Y2hbM10pCisjZGVmaW5lIEYgKGN0eC0+dC5zY3JhdGNoWzRdKQorI2RlZmluZSBIIChjdHgtPnQuc2NyYXRjaFs1XSkKKyNkZWZpbmUgSiAoY3R4LT50LnNjcmF0Y2hbNl0pCisKKyAgLyogQ29tcHV0ZTogKFhfMyA6IFlfMyA6IFpfMykgPSAyKCBYXzEgOiBZXzEgOiBaXzEgKSAqLworCisgIC8qIEIgPSAoWF8xICsgWV8xKV4yICAqLworICBlY19hZGRtIChCLCBYMSwgWTEsIGN0eCk7CisgIGVjX3BvdzIgKEIsIEIsIGN0eCk7CisKKyAgLyogQyA9IFhfMV4yICovCisgIC8qIEQgPSBZXzFeMiAqLworICBlY19wb3cyIChDLCBYMSwgY3R4KTsKKyAgZWNfcG93MiAoRCwgWTEsIGN0eCk7CisKKyAgLyogRSA9IGFDICovCisgIGlmIChjdHgtPmRpYWxlY3QgPT0gRUNDX0RJQUxFQ1RfRUQyNTUxOSkKKyAgICB7CisgICAgICBtcGlfc2V0IChFLCBDKTsKKyAgICAgIF9nY3J5X21waV9uZWcgKEUsIEUpOworICAgIH0KKyAgZWxzZQorICAgIGVjX211bG0gKEUsIGN0eC0+YSwgQywgY3R4KTsKKworICAvKiBGID0gRSArIEQgKi8KKyAgZWNfYWRkbSAoRiwgRSwgRCwgY3R4KTsKKworICAvKiBIID0gWl8xXjIgKi8KKyAgZWNfcG93MiAoSCwgWjEsIGN0eCk7CisKKyAgLyogSiA9IEYgLSAySCAqLworICBlY19tdWwyIChKLCBILCBjdHgpOworICBlY19zdWJtIChKLCBGLCBKLCBjdHgpOworCisgIC8qIFhfMyA9IChCIC0gQyAtIEQpIMK3IEogKi8KKyAgZWNfc3VibSAoWDMsIEIsIEMsIGN0eCk7CisgIGVjX3N1Ym0gKFgzLCBYMywgRCwgY3R4KTsKKyAgZWNfbXVsbSAoWDMsIFgzLCBKLCBjdHgpOworCisgIC8qIFlfMyA9IEYgwrcgKEUgLSBEKSAqLworICBlY19zdWJtIChZMywgRSwgRCwgY3R4KTsKKyAgZWNfbXVsbSAoWTMsIFkzLCBGLCBjdHgpOworCisgIC8qIFpfMyA9IEYgwrcgSiAqLworICBlY19tdWxtIChaMywgRiwgSiwgY3R4KTsKKworI3VuZGVmIFgxCisjdW5kZWYgWTEKKyN1bmRlZiBaMQorI3VuZGVmIFgzCisjdW5kZWYgWTMKKyN1bmRlZiBaMworI3VuZGVmIEIKKyN1bmRlZiBDCisjdW5kZWYgRAorI3VuZGVmIEUKKyN1bmRlZiBGCisjdW5kZWYgSAorI3VuZGVmIEoKK30KKworCisvKiAgUkVTVUxUID0gMiAqIFBPSU5UICAqLwordm9pZAorX2djcnlfbXBpX2VjX2R1cF9wb2ludCAobXBpX3BvaW50X3QgcmVzdWx0LCBtcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4KQoreworICBzd2l0Y2ggKGN0eC0+bW9kZWwpCisgICAgeworICAgIGNhc2UgTVBJX0VDX1dFSUVSU1RSQVNTOgorICAgICAgZHVwX3BvaW50X3dlaWVyc3RyYXNzIChyZXN1bHQsIHBvaW50LCBjdHgpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElfRUNfTU9OVEdPTUVSWToKKyAgICAgIGR1cF9wb2ludF9tb250Z29tZXJ5IChyZXN1bHQsIHBvaW50LCBjdHgpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElfRUNfVFdJU1RFREVEV0FSRFM6CisgICAgICBkdXBfcG9pbnRfdHdpc3RlZGVkd2FyZHMgKHJlc3VsdCwgcG9pbnQsIGN0eCk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKKworLyogUkVTVUxUID0gUDEgKyBQMiAgKFdlaWVyc3RyYXNzIHZlcnNpb24pLiovCitzdGF0aWMgdm9pZAorYWRkX3BvaW50c193ZWllcnN0cmFzcyAobXBpX3BvaW50X3QgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3BvaW50X3QgcDEsIG1waV9wb2ludF90IHAyLAorICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4KQoreworI2RlZmluZSB4MSAocDEtPnggICAgKQorI2RlZmluZSB5MSAocDEtPnkgICAgKQorI2RlZmluZSB6MSAocDEtPnogICAgKQorI2RlZmluZSB4MiAocDItPnggICAgKQorI2RlZmluZSB5MiAocDItPnkgICAgKQorI2RlZmluZSB6MiAocDItPnogICAgKQorI2RlZmluZSB4MyAocmVzdWx0LT54KQorI2RlZmluZSB5MyAocmVzdWx0LT55KQorI2RlZmluZSB6MyAocmVzdWx0LT56KQorI2RlZmluZSBsMSAoY3R4LT50LnNjcmF0Y2hbMF0pCisjZGVmaW5lIGwyIChjdHgtPnQuc2NyYXRjaFsxXSkKKyNkZWZpbmUgbDMgKGN0eC0+dC5zY3JhdGNoWzJdKQorI2RlZmluZSBsNCAoY3R4LT50LnNjcmF0Y2hbM10pCisjZGVmaW5lIGw1IChjdHgtPnQuc2NyYXRjaFs0XSkKKyNkZWZpbmUgbDYgKGN0eC0+dC5zY3JhdGNoWzVdKQorI2RlZmluZSBsNyAoY3R4LT50LnNjcmF0Y2hbNl0pCisjZGVmaW5lIGw4IChjdHgtPnQuc2NyYXRjaFs3XSkKKyNkZWZpbmUgbDkgKGN0eC0+dC5zY3JhdGNoWzhdKQorI2RlZmluZSB0MSAoY3R4LT50LnNjcmF0Y2hbOV0pCisjZGVmaW5lIHQyIChjdHgtPnQuc2NyYXRjaFsxMF0pCisKKyAgaWYgKCAoIW1waV9jbXAgKHgxLCB4MikpICYmICghbXBpX2NtcCAoeTEsIHkyKSkgJiYgKCFtcGlfY21wICh6MSwgejIpKSApCisgICAgeworICAgICAgLyogU2FtZSBwb2ludDsgbmVlZCB0byBjYWxsIHRoZSBkdXBsaWNhdGUgZnVuY3Rpb24uICAqLworICAgICAgX2djcnlfbXBpX2VjX2R1cF9wb2ludCAocmVzdWx0LCBwMSwgY3R4KTsKKyAgICB9CisgIGVsc2UgaWYgKCFtcGlfY21wX3VpICh6MSwgMCkpCisgICAgeworICAgICAgLyogUDEgaXMgYXQgaW5maW5pdHkuICAqLworICAgICAgbXBpX3NldCAoeDMsIHAyLT54KTsKKyAgICAgIG1waV9zZXQgKHkzLCBwMi0+eSk7CisgICAgICBtcGlfc2V0ICh6MywgcDItPnopOworICAgIH0KKyAgZWxzZSBpZiAoIW1waV9jbXBfdWkgKHoyLCAwKSkKKyAgICB7CisgICAgICAvKiBQMiBpcyBhdCBpbmZpbml0eS4gICovCisgICAgICBtcGlfc2V0ICh4MywgcDEtPngpOworICAgICAgbXBpX3NldCAoeTMsIHAxLT55KTsKKyAgICAgIG1waV9zZXQgKHozLCBwMS0+eik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IHoxX2lzX29uZSA9ICFtcGlfY21wX3VpICh6MSwgMSk7CisgICAgICBpbnQgejJfaXNfb25lID0gIW1waV9jbXBfdWkgKHoyLCAxKTsKKworICAgICAgLyogbDEgPSB4MSB6Ml4yICAqLworICAgICAgLyogbDIgPSB4MiB6MV4yICAqLworICAgICAgaWYgKHoyX2lzX29uZSkKKyAgICAgICAgbXBpX3NldCAobDEsIHgxKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGVjX3BvdzIgKGwxLCB6MiwgY3R4KTsKKyAgICAgICAgICBlY19tdWxtIChsMSwgbDEsIHgxLCBjdHgpOworICAgICAgICB9CisgICAgICBpZiAoejFfaXNfb25lKQorICAgICAgICBtcGlfc2V0IChsMiwgeDIpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZWNfcG93MiAobDIsIHoxLCBjdHgpOworICAgICAgICAgIGVjX211bG0gKGwyLCBsMiwgeDIsIGN0eCk7CisgICAgICAgIH0KKyAgICAgIC8qIGwzID0gbDEgLSBsMiAqLworICAgICAgZWNfc3VibSAobDMsIGwxLCBsMiwgY3R4KTsKKyAgICAgIC8qIGw0ID0geTEgejJeMyAgKi8KKyAgICAgIGVjX3Bvd20gKGw0LCB6MiwgbXBpX2NvbnN0IChNUElfQ19USFJFRSksIGN0eCk7CisgICAgICBlY19tdWxtIChsNCwgbDQsIHkxLCBjdHgpOworICAgICAgLyogbDUgPSB5MiB6MV4zICAqLworICAgICAgZWNfcG93bSAobDUsIHoxLCBtcGlfY29uc3QgKE1QSV9DX1RIUkVFKSwgY3R4KTsKKyAgICAgIGVjX211bG0gKGw1LCBsNSwgeTIsIGN0eCk7CisgICAgICAvKiBsNiA9IGw0IC0gbDUgICovCisgICAgICBlY19zdWJtIChsNiwgbDQsIGw1LCBjdHgpOworCisgICAgICBpZiAoIW1waV9jbXBfdWkgKGwzLCAwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICghbXBpX2NtcF91aSAobDYsIDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBQMSBhbmQgUDIgYXJlIHRoZSBzYW1lIC0gdXNlIGR1cGxpY2F0ZSBmdW5jdGlvbi4gICovCisgICAgICAgICAgICAgIF9nY3J5X21waV9lY19kdXBfcG9pbnQgKHJlc3VsdCwgcDEsIGN0eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBQMSBpcyB0aGUgaW52ZXJzZSBvZiBQMi4gICovCisgICAgICAgICAgICAgIG1waV9zZXRfdWkgKHgzLCAxKTsKKyAgICAgICAgICAgICAgbXBpX3NldF91aSAoeTMsIDEpOworICAgICAgICAgICAgICBtcGlfc2V0X3VpICh6MywgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIGw3ID0gbDEgKyBsMiAgKi8KKyAgICAgICAgICBlY19hZGRtIChsNywgbDEsIGwyLCBjdHgpOworICAgICAgICAgIC8qIGw4ID0gbDQgKyBsNSAgKi8KKyAgICAgICAgICBlY19hZGRtIChsOCwgbDQsIGw1LCBjdHgpOworICAgICAgICAgIC8qIHozID0gejEgejIgbDMgICovCisgICAgICAgICAgZWNfbXVsbSAoejMsIHoxLCB6MiwgY3R4KTsKKyAgICAgICAgICBlY19tdWxtICh6MywgejMsIGwzLCBjdHgpOworICAgICAgICAgIC8qIHgzID0gbDZeMiAtIGw3IGwzXjIgICovCisgICAgICAgICAgZWNfcG93MiAodDEsIGw2LCBjdHgpOworICAgICAgICAgIGVjX3BvdzIgKHQyLCBsMywgY3R4KTsKKyAgICAgICAgICBlY19tdWxtICh0MiwgdDIsIGw3LCBjdHgpOworICAgICAgICAgIGVjX3N1Ym0gKHgzLCB0MSwgdDIsIGN0eCk7CisgICAgICAgICAgLyogbDkgPSBsNyBsM14yIC0gMiB4MyAgKi8KKyAgICAgICAgICBlY19tdWwyICh0MSwgeDMsIGN0eCk7CisgICAgICAgICAgZWNfc3VibSAobDksIHQyLCB0MSwgY3R4KTsKKyAgICAgICAgICAvKiB5MyA9IChsOSBsNiAtIGw4IGwzXjMpLzIgICovCisgICAgICAgICAgZWNfbXVsbSAobDksIGw5LCBsNiwgY3R4KTsKKyAgICAgICAgICBlY19wb3dtICh0MSwgbDMsIG1waV9jb25zdCAoTVBJX0NfVEhSRUUpLCBjdHgpOyAvKiBmaXhtZTogVXNlIHNhdmVkIHZhbHVlKi8KKyAgICAgICAgICBlY19tdWxtICh0MSwgdDEsIGw4LCBjdHgpOworICAgICAgICAgIGVjX3N1Ym0gKHkzLCBsOSwgdDEsIGN0eCk7CisgICAgICAgICAgZWNfbXVsbSAoeTMsIHkzLCBlY19nZXRfdHdvX2ludl9wIChjdHgpLCBjdHgpOworICAgICAgICB9CisgICAgfQorCisjdW5kZWYgeDEKKyN1bmRlZiB5MQorI3VuZGVmIHoxCisjdW5kZWYgeDIKKyN1bmRlZiB5MgorI3VuZGVmIHoyCisjdW5kZWYgeDMKKyN1bmRlZiB5MworI3VuZGVmIHozCisjdW5kZWYgbDEKKyN1bmRlZiBsMgorI3VuZGVmIGwzCisjdW5kZWYgbDQKKyN1bmRlZiBsNQorI3VuZGVmIGw2CisjdW5kZWYgbDcKKyN1bmRlZiBsOAorI3VuZGVmIGw5CisjdW5kZWYgdDEKKyN1bmRlZiB0MgorfQorCisKKy8qIFJFU1VMVCA9IFAxICsgUDIgIChNb250Z29tZXJ5IHZlcnNpb24pLiovCitzdGF0aWMgdm9pZAorYWRkX3BvaW50c19tb250Z29tZXJ5IChtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgIG1waV9wb2ludF90IHAxLCBtcGlfcG9pbnRfdCBwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4KQoreworICAodm9pZClyZXN1bHQ7CisgICh2b2lkKXAxOworICAodm9pZClwMjsKKyAgKHZvaWQpY3R4OworICBsb2dfZmF0YWwgKCIlczogJXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisgICAgICAgICAgICAgIl9nY3J5X21waV9lY19hZGRfcG9pbnRzIiwgIk1vbnRnb21lcnkiKTsKK30KKworCisvKiBSRVNVTFQgPSBQMSArIFAyICAoVHdpc3RlZCBFZHdhcmRzIHZlcnNpb24pLiovCitzdGF0aWMgdm9pZAorYWRkX3BvaW50c190d2lzdGVkZWR3YXJkcyAobXBpX3BvaW50X3QgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3BvaW50X3QgcDEsIG1waV9wb2ludF90IHAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4KQoreworI2RlZmluZSBYMSAocDEtPngpCisjZGVmaW5lIFkxIChwMS0+eSkKKyNkZWZpbmUgWjEgKHAxLT56KQorI2RlZmluZSBYMiAocDItPngpCisjZGVmaW5lIFkyIChwMi0+eSkKKyNkZWZpbmUgWjIgKHAyLT56KQorI2RlZmluZSBYMyAocmVzdWx0LT54KQorI2RlZmluZSBZMyAocmVzdWx0LT55KQorI2RlZmluZSBaMyAocmVzdWx0LT56KQorI2RlZmluZSBBIChjdHgtPnQuc2NyYXRjaFswXSkKKyNkZWZpbmUgQiAoY3R4LT50LnNjcmF0Y2hbMV0pCisjZGVmaW5lIEMgKGN0eC0+dC5zY3JhdGNoWzJdKQorI2RlZmluZSBEIChjdHgtPnQuc2NyYXRjaFszXSkKKyNkZWZpbmUgRSAoY3R4LT50LnNjcmF0Y2hbNF0pCisjZGVmaW5lIEYgKGN0eC0+dC5zY3JhdGNoWzVdKQorI2RlZmluZSBHIChjdHgtPnQuc2NyYXRjaFs2XSkKKyNkZWZpbmUgdG1wIChjdHgtPnQuc2NyYXRjaFs3XSkKKworICAvKiBDb21wdXRlOiAoWF8zIDogWV8zIDogWl8zKSA9IChYXzEgOiBZXzEgOiBaXzEpICsgKFhfMiA6IFlfMiA6IFpfMykgICovCisKKyAgLyogQSA9IFoxIMK3IFoyICovCisgIGVjX211bG0gKEEsIFoxLCBaMiwgY3R4KTsKKworICAvKiBCID0gQV4yICovCisgIGVjX3BvdzIgKEIsIEEsIGN0eCk7CisKKyAgLyogQyA9IFgxIMK3IFgyICovCisgIGVjX211bG0gKEMsIFgxLCBYMiwgY3R4KTsKKworICAvKiBEID0gWTEgwrcgWTIgKi8KKyAgZWNfbXVsbSAoRCwgWTEsIFkyLCBjdHgpOworCisgIC8qIEUgPSBkIMK3IEMgwrcgRCAqLworICBlY19tdWxtIChFLCBjdHgtPmIsIEMsIGN0eCk7CisgIGVjX211bG0gKEUsIEUsIEQsIGN0eCk7CisKKyAgLyogRiA9IEIgLSBFICovCisgIGVjX3N1Ym0gKEYsIEIsIEUsIGN0eCk7CisKKyAgLyogRyA9IEIgKyBFICovCisgIGVjX2FkZG0gKEcsIEIsIEUsIGN0eCk7CisKKyAgLyogWF8zID0gQSDCtyBGIMK3ICgoWF8xICsgWV8xKSDCtyAoWF8yICsgWV8yKSAtIEMgLSBEKSAqLworICBlY19hZGRtICh0bXAsIFgxLCBZMSwgY3R4KTsKKyAgZWNfYWRkbSAoWDMsIFgyLCBZMiwgY3R4KTsKKyAgZWNfbXVsbSAoWDMsIFgzLCB0bXAsIGN0eCk7CisgIGVjX3N1Ym0gKFgzLCBYMywgQywgY3R4KTsKKyAgZWNfc3VibSAoWDMsIFgzLCBELCBjdHgpOworICBlY19tdWxtIChYMywgWDMsIEYsIGN0eCk7CisgIGVjX211bG0gKFgzLCBYMywgQSwgY3R4KTsKKworICAvKiBZXzMgPSBBIMK3IEcgwrcgKEQgLSBhQykgKi8KKyAgaWYgKGN0eC0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgIHsKKyAgICAgIC8qIFVzaW5nIGVjX2FkZG0gKFkzLCBELCBDLCBjdHgpIGlzIHBvc3NpYmxlIGJ1dCBhIGxpdHRlIGJpdAorICAgICAgICAgc2xvd2VyIGJlY2F1c2UgYSBzdWJtIGRvZXMgY3VycmVudGx5IHNraXAgdGhlIG1vZCBzdGVwLiAgKi8KKyAgICAgIG1waV9zZXQgKFkzLCBDKTsKKyAgICAgIF9nY3J5X21waV9uZWcgKFkzLCBZMyk7CisgICAgICBlY19zdWJtIChZMywgRCwgWTMsIGN0eCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZWNfbXVsbSAoWTMsIGN0eC0+YSwgQywgY3R4KTsKKyAgICAgIGVjX3N1Ym0gKFkzLCBELCBZMywgY3R4KTsKKyAgICB9CisgIGVjX211bG0gKFkzLCBZMywgRywgY3R4KTsKKyAgZWNfbXVsbSAoWTMsIFkzLCBBLCBjdHgpOworCisgIC8qIFpfMyA9IEYgwrcgRyAqLworICBlY19tdWxtIChaMywgRiwgRywgY3R4KTsKKworCisjdW5kZWYgWDEKKyN1bmRlZiBZMQorI3VuZGVmIFoxCisjdW5kZWYgWDIKKyN1bmRlZiBZMgorI3VuZGVmIFoyCisjdW5kZWYgWDMKKyN1bmRlZiBZMworI3VuZGVmIFozCisjdW5kZWYgQQorI3VuZGVmIEIKKyN1bmRlZiBDCisjdW5kZWYgRAorI3VuZGVmIEUKKyN1bmRlZiBGCisjdW5kZWYgRworI3VuZGVmIHRtcAorfQorCisKKy8qIFJFU1VMVCA9IFAxICsgUDIgKi8KK3ZvaWQKK19nY3J5X21waV9lY19hZGRfcG9pbnRzIChtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3BvaW50X3QgcDEsIG1waV9wb2ludF90IHAyLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9lY190IGN0eCkKK3sKKyAgc3dpdGNoIChjdHgtPm1vZGVsKQorICAgIHsKKyAgICBjYXNlIE1QSV9FQ19XRUlFUlNUUkFTUzoKKyAgICAgIGFkZF9wb2ludHNfd2VpZXJzdHJhc3MgKHJlc3VsdCwgcDEsIHAyLCBjdHgpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElfRUNfTU9OVEdPTUVSWToKKyAgICAgIGFkZF9wb2ludHNfbW9udGdvbWVyeSAocmVzdWx0LCBwMSwgcDIsIGN0eCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1QSV9FQ19UV0lTVEVERURXQVJEUzoKKyAgICAgIGFkZF9wb2ludHNfdHdpc3RlZGVkd2FyZHMgKHJlc3VsdCwgcDEsIHAyLCBjdHgpOworICAgICAgYnJlYWs7CisgICAgfQorfQorCisKKy8qIFNjYWxhciBwb2ludCBtdWx0aXBsaWNhdGlvbiAtIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBFQ0MuICBJZiB0YWtlcworICAgYW4gaW50ZWdlciBTQ0FMQVIgYW5kIGEgUE9JTlQgYXMgd2VsbCBhcyB0aGUgdXN1YWwgY29udGV4dCBDVFguCisgICBSRVNVTFQgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdGluZyBwb2ludC4gKi8KK3ZvaWQKK19nY3J5X21waV9lY19tdWxfcG9pbnQgKG1waV9wb2ludF90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgc2NhbGFyLCBtcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1waV9lY190IGN0eCkKK3sKKyAgZ2NyeV9tcGlfdCB4MSwgeTEsIHoxLCBrLCBoLCB5eTsKKyAgdW5zaWduZWQgaW50IGksIGxvb3BzOworICBtcGlfcG9pbnRfc3RydWN0IHAxLCBwMiwgcDFpbnY7CisKKyAgaWYgKGN0eC0+bW9kZWwgPT0gTVBJX0VDX1RXSVNURURFRFdBUkRTKQorICAgIHsKKyAgICAgIC8qIFNpbXBsZSBsZWZ0IHRvIHJpZ2h0IGJpbmFyeSBtZXRob2QuICBHRUNDIEFsZ29yaXRobSAzLjI3ICovCisgICAgICB1bnNpZ25lZCBpbnQgbmJpdHM7CisgICAgICBpbnQgajsKKworICAgICAgbmJpdHMgPSBtcGlfZ2V0X25iaXRzIChzY2FsYXIpOworICAgICAgbXBpX3NldF91aSAocmVzdWx0LT54LCAwKTsKKyAgICAgIG1waV9zZXRfdWkgKHJlc3VsdC0+eSwgMSk7CisgICAgICBtcGlfc2V0X3VpIChyZXN1bHQtPnosIDEpOworCisgICAgICBpZiAobXBpX2lzX3NlY3VyZSAoc2NhbGFyKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIFNDQUxBUiBpcyBpbiBzZWN1cmUgbWVtb3J5IHdlIGFzc3VtZSB0aGF0IGl0IGlzIHRoZQorICAgICAgICAgICAgIHNlY3JldCBrZXkgd2UgdXNlIGNvbnN0YW50IHRpbWUgb3BlcmF0aW9uLiAgKi8KKyAgICAgICAgICBtcGlfcG9pbnRfc3RydWN0IHRtcHBudDsKKworICAgICAgICAgIHBvaW50X2luaXQgKCZ0bXBwbnQpOworICAgICAgICAgIGZvciAoaj1uYml0cy0xOyBqID49IDA7IGotLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX2djcnlfbXBpX2VjX2R1cF9wb2ludCAocmVzdWx0LCByZXN1bHQsIGN0eCk7CisgICAgICAgICAgICAgIF9nY3J5X21waV9lY19hZGRfcG9pbnRzICgmdG1wcG50LCByZXN1bHQsIHBvaW50LCBjdHgpOworICAgICAgICAgICAgICBpZiAobXBpX3Rlc3RfYml0IChzY2FsYXIsIGopKQorICAgICAgICAgICAgICAgIHBvaW50X3NldCAocmVzdWx0LCAmdG1wcG50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBwb2ludF9mcmVlICgmdG1wcG50KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZm9yIChqPW5iaXRzLTE7IGogPj0gMDsgai0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfZ2NyeV9tcGlfZWNfZHVwX3BvaW50IChyZXN1bHQsIHJlc3VsdCwgY3R4KTsKKyAgICAgICAgICAgICAgaWYgKG1waV90ZXN0X2JpdCAoc2NhbGFyLCBqKSkKKyAgICAgICAgICAgICAgICBfZ2NyeV9tcGlfZWNfYWRkX3BvaW50cyAocmVzdWx0LCByZXN1bHQsIHBvaW50LCBjdHgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorCisgIHgxID0gbXBpX2FsbG9jX2xpa2UgKGN0eC0+cCk7CisgIHkxID0gbXBpX2FsbG9jX2xpa2UgKGN0eC0+cCk7CisgIGggID0gbXBpX2FsbG9jX2xpa2UgKGN0eC0+cCk7CisgIGsgID0gbXBpX2NvcHkgKHNjYWxhcik7CisgIHl5ID0gbXBpX2NvcHkgKHBvaW50LT55KTsKKworICBpZiAoIG1waV9oYXNfc2lnbiAoaykgKQorICAgIHsKKyAgICAgIGstPnNpZ24gPSAwOworICAgICAgZWNfaW52bSAoeXksIHl5LCBjdHgpOworICAgIH0KKworICBpZiAoIW1waV9jbXBfdWkgKHBvaW50LT56LCAxKSkKKyAgICB7CisgICAgICBtcGlfc2V0ICh4MSwgcG9pbnQtPngpOworICAgICAgbXBpX3NldCAoeTEsIHl5KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnY3J5X21waV90IHoyLCB6MzsKKworICAgICAgejIgPSBtcGlfYWxsb2NfbGlrZSAoY3R4LT5wKTsKKyAgICAgIHozID0gbXBpX2FsbG9jX2xpa2UgKGN0eC0+cCk7CisgICAgICBlY19tdWxtICh6MiwgcG9pbnQtPnosIHBvaW50LT56LCBjdHgpOworICAgICAgZWNfbXVsbSAoejMsIHBvaW50LT56LCB6MiwgY3R4KTsKKyAgICAgIGVjX2ludm0gKHoyLCB6MiwgY3R4KTsKKyAgICAgIGVjX211bG0gKHgxLCBwb2ludC0+eCwgejIsIGN0eCk7CisgICAgICBlY19pbnZtICh6MywgejMsIGN0eCk7CisgICAgICBlY19tdWxtICh5MSwgeXksIHozLCBjdHgpOworICAgICAgbXBpX2ZyZWUgKHoyKTsKKyAgICAgIG1waV9mcmVlICh6Myk7CisgICAgfQorICB6MSA9IG1waV9jb3B5IChtcGlfY29uc3QgKE1QSV9DX09ORSkpOworCisgIG1waV9tdWwgKGgsIGssIG1waV9jb25zdCAoTVBJX0NfVEhSRUUpKTsgLyogaCA9IDNrICovCisgIGxvb3BzID0gbXBpX2dldF9uYml0cyAoaCk7CisgIGlmIChsb29wcyA8IDIpCisgICAgeworICAgICAgLyogSWYgU0NBTEFSIGlzIHplcm8sIHRoZSBhYm92ZSBtcGlfbXVsIHNldHMgSCB0byB6ZXJvIGFuZCB0aHVzCisgICAgICAgICBMT09QcyB3aWxsIGJlIHplcm8uICBUbyBhdm9pZCBhbiB1bmRlcmZsb3cgb2YgSSBpbiB0aGUgbWFpbgorICAgICAgICAgbG9vcCB3ZSBzZXQgTE9PUCB0byAyIGFuZCB0aGUgcmVzdWx0IHRvICgwLDAsMCkuICAqLworICAgICAgbG9vcHMgPSAyOworICAgICAgbXBpX2NsZWFyIChyZXN1bHQtPngpOworICAgICAgbXBpX2NsZWFyIChyZXN1bHQtPnkpOworICAgICAgbXBpX2NsZWFyIChyZXN1bHQtPnopOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1waV9zZXQgKHJlc3VsdC0+eCwgcG9pbnQtPngpOworICAgICAgbXBpX3NldCAocmVzdWx0LT55LCB5eSk7CisgICAgICBtcGlfc2V0IChyZXN1bHQtPnosIHBvaW50LT56KTsKKyAgICB9CisgIG1waV9mcmVlICh5eSk7IHl5ID0gTlVMTDsKKworICBwMS54ID0geDE7IHgxID0gTlVMTDsKKyAgcDEueSA9IHkxOyB5MSA9IE5VTEw7CisgIHAxLnogPSB6MTsgejEgPSBOVUxMOworICBwb2ludF9pbml0ICgmcDIpOworICBwb2ludF9pbml0ICgmcDFpbnYpOworCisgIGZvciAoaT1sb29wcy0yOyBpID4gMDsgaS0tKQorICAgIHsKKyAgICAgIF9nY3J5X21waV9lY19kdXBfcG9pbnQgKHJlc3VsdCwgcmVzdWx0LCBjdHgpOworICAgICAgaWYgKG1waV90ZXN0X2JpdCAoaCwgaSkgPT0gMSAmJiBtcGlfdGVzdF9iaXQgKGssIGkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBwb2ludF9zZXQgKCZwMiwgcmVzdWx0KTsKKyAgICAgICAgICBfZ2NyeV9tcGlfZWNfYWRkX3BvaW50cyAocmVzdWx0LCAmcDIsICZwMSwgY3R4KTsKKyAgICAgICAgfQorICAgICAgaWYgKG1waV90ZXN0X2JpdCAoaCwgaSkgPT0gMCAmJiBtcGlfdGVzdF9iaXQgKGssIGkpID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICBwb2ludF9zZXQgKCZwMiwgcmVzdWx0KTsKKyAgICAgICAgICAvKiBJbnZlcnQgcG9pbnQ6IHkgPSBwIC0geSBtb2QgcCAgKi8KKyAgICAgICAgICBwb2ludF9zZXQgKCZwMWludiwgJnAxKTsKKyAgICAgICAgICBlY19zdWJtIChwMWludi55LCBjdHgtPnAsIHAxaW52LnksIGN0eCk7CisgICAgICAgICAgX2djcnlfbXBpX2VjX2FkZF9wb2ludHMgKHJlc3VsdCwgJnAyLCAmcDFpbnYsIGN0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgcG9pbnRfZnJlZSAoJnAxKTsKKyAgcG9pbnRfZnJlZSAoJnAyKTsKKyAgcG9pbnRfZnJlZSAoJnAxaW52KTsKKyAgbXBpX2ZyZWUgKGgpOworICBtcGlfZnJlZSAoayk7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgUE9JTlQgaXMgb24gdGhlIGN1cnZlIGRlc2NyaWJlZCBieSBDVFguICAqLworaW50CitfZ2NyeV9tcGlfZWNfY3VydmVfcG9pbnQgKGdjcnlfbXBpX3BvaW50X3QgcG9pbnQsIG1waV9lY190IGN0eCkKK3sKKyAgaW50IHJlcyA9IDA7CisgIGdjcnlfbXBpX3QgeCwgeSwgdzsKKworICB4ID0gbXBpX25ldyAoMCk7CisgIHkgPSBtcGlfbmV3ICgwKTsKKyAgdyA9IG1waV9uZXcgKDApOworCisgIGlmIChfZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgcG9pbnQsIGN0eCkpCisgICAgcmV0dXJuIDA7CisKKyAgc3dpdGNoIChjdHgtPm1vZGVsKQorICAgIHsKKyAgICBjYXNlIE1QSV9FQ19XRUlFUlNUUkFTUzoKKyAgICAgIHsKKyAgICAgICAgZ2NyeV9tcGlfdCB4eHggPSBtcGlfbmV3ICgwKTsKKworICAgICAgICAvKiB5XjIgPT0geF4zICsgYcK3eCArIGIgKi8KKyAgICAgICAgZWNfcG93MiAoeSwgeSwgY3R4KTsKKworICAgICAgICBlY19wb3czICh4eHgsIHgsIGN0eCk7CisgICAgICAgIGVjX211bG0gKHcsIGN0eC0+YSwgeCwgY3R4KTsKKyAgICAgICAgZWNfYWRkbSAodywgdywgY3R4LT5iLCBjdHgpOworICAgICAgICBlY19hZGRtICh3LCB3LCB4eHgsIGN0eCk7CisKKyAgICAgICAgaWYgKCFtcGlfY21wICh5LCB3KSkKKyAgICAgICAgICByZXMgPSAxOworCisgICAgICAgIF9nY3J5X21waV9yZWxlYXNlICh4eHgpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElfRUNfTU9OVEdPTUVSWToKKyAgICAgIGxvZ19mYXRhbCAoIiVzOiAlcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAgICAgIl9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCIsICJNb250Z29tZXJ5Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1QSV9FQ19UV0lTVEVERURXQVJEUzoKKyAgICAgIHsKKyAgICAgICAgLyogYSDCtyB4XjIgKyB5XjIgLSAxIC0gYiDCtyB4XjIgwrcgeV4yID09IDAgKi8KKyAgICAgICAgZWNfcG93MiAoeCwgeCwgY3R4KTsKKyAgICAgICAgZWNfcG93MiAoeSwgeSwgY3R4KTsKKyAgICAgICAgaWYgKGN0eC0+ZGlhbGVjdCA9PSBFQ0NfRElBTEVDVF9FRDI1NTE5KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG1waV9zZXQgKHcsIHgpOworICAgICAgICAgICAgX2djcnlfbXBpX25lZyAodywgdyk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZWNfbXVsbSAodywgY3R4LT5hLCB4LCBjdHgpOworICAgICAgICBlY19hZGRtICh3LCB3LCB5LCBjdHgpOworICAgICAgICBlY19zdWJtICh3LCB3LCBtcGlfY29uc3QgKE1QSV9DX09ORSksIGN0eCk7CisgICAgICAgIGVjX211bG0gKHgsIHgsIHksIGN0eCk7CisgICAgICAgIGVjX211bG0gKHgsIHgsIGN0eC0+YiwgY3R4KTsKKyAgICAgICAgZWNfc3VibSAodywgdywgeCwgY3R4KTsKKyAgICAgICAgaWYgKCFtcGlfY21wX3VpICh3LCAwKSkKKyAgICAgICAgICByZXMgPSAxOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgIF9nY3J5X21waV9yZWxlYXNlICh3KTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHgpOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoeSk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL21waS9nZW5lcmljL01hbmlmZXN0IGIvbXBpL2dlbmVyaWMvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyOWZkZQotLS0gL2Rldi9udWxsCisrKyBiL21waS9nZW5lcmljL01hbmlmZXN0CkBAIC0wLDAgKzEsMjkgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCittcGloLWFkZDEuYyBpUUNWQXdVQVArTGoyREVBbnA4MzJTLzdBUUtuL0FRQXdRTFdnZ2w2ek5RNUVaK2xFK2pLVjhXM0Zzb2dXMy82dHA5VDVyclNSNUpubFd5b0hROS9QdTRrbk9jTGpTNm5JZlZPaUFFaWZ1M251SXlzUXI5akRTU1NKQTJMeWxTVUJTWEtMS0RhbVBzT0N3WE9MeGlaT0RzbEpUM0NDR0FVdEx2WEpyV0RiVFpRcmtFdXduTG5qUUZEenVBN2lZOUpMckc5a0FvWEQ2UT09V29XbQorbXBpaC1tdWwxLmMgaVFDVkF3VUFQK0xrQ1RFQW5wODMyUy83QVFLRlZRUCtNaEJOamNZNzNKdG5zSFpmbmFWWnEzVGlLd04xNTFjV1Y1MW5EYzFSblRhTWhTSUZldU5sajN2Tk1MMlcwR244bitHbnlpV0UyWFhkUUVhaWs2QkwwMmVla1VuOWFxN0kvcmRwblRIdU9qUVBLMXV3anVObDhSdUo5WXJFUkJBeHE0b0I3MWYraXdNYWI4ZHNNU1VsVkMrTmRlQW9jUnFMTGduUi9lZmtkTGM9PTJUa2IKK21waWgtbXVsMi5jIGlRQ1ZBd1VBUCtMa01qRUFucDgzMlMvN0FRTFBlQVFBcW1SenhGZS9tRHFUZFpyL3BUWFQ4UlZ5QjF2S0IwRWkyVEhWMDVCeG1JNE9QdjM5dXlzZkZwTE10L0lOc1g3QUdxZE9sajRqT1ovcU5hRlhSMWNlTXJsU1h2bzh1L2VwazZyQ1hGcDgya003UXM5ODNMam9QLy9Qck1Da1lrWHdibGFWcmdVR2lCVUNidVBNbGlXVEs2cUtreHhYdEVmcVo3blZiRVdkQng4PT1Ld2hsCittcGloLW11bDMuYyBpUUNWQXdVQVArTGtWREVBbnA4MzJTLzdBUUw5MWdQL1FkNWlaV3hSaU41RGRFSVZIQWVkb052bDIzTlByVDJVVWRYdm5TSzQ5RHBwbFR4a0xpTUJqMFdxQ2F5Ry9ZSUVUMk5wTVJDZUx2QVpOY1N0NmxPbTBiU1pEWW8xSHYvTitVb3FEM1YxTWNqWTE2UkVCdi9ublBhTVdNWmN4N3JsNXlLVFZaaVgyUGdWNm9RT0w3WWZydDVaSU9sckhCUnM5UzIvemNDYVZ6MD09OUJRZQorbXBpaC1sc2hpZnQuYyBpUUNWQXdVQVArTGxBVEVBbnA4MzJTLzdBUUlBQ0FRQWhNcnB4MFNSWEUvTE4xTmtqTU85bjc0bk1ydm16WUp5cnUwZ3cyTzRCWXJVUHZEL0xXR2p1MkZaYWdnS1YwSUJqbWkwY0RvQ3JOZUs5RUdqS09PMWxmZ09EYlgySVoxTFVocjlqRHVNajBRUnFqNlQ5WWtBRllUTlVrNEdmcHdJZjdUNllibzdjNzhKeDkzUGlkQ0p0N2QzOWVNTUVhbG9vQzdMWjRJVTNOTT09blo0aworbXBpaC1yc2hpZnQuYyBpUUNWQXdVQVArTGxJakVBbnA4MzJTLzdBUUtpdUFQL2VZQzJaU2NkK3RhQngva056UnZHakEwZUFYdk9STWtNTFY2T3QrT1hWelZVaTA0ZW9QMnlYZHhTTkZLd1VqMTJwOEdXWGtkb01HM2FPR0JLZzJhN2JZNVE1UlVobzNoVVdiOVVzVllWVWZYTGY3SU9UdC8zYTZNTGgyQ21WNWRGUFdKbVNsYkN5UVJjbjZuL2ZMRGVKM0EyYldUUy9CaHFHZnBPWFVJVTF3cz09akNmOAorbXBpaC1zdWIxLmMgaVFDVkF3VUFQK0xsWnpFQW5wODMyUy83QVFJRVBnUC9kTEhURFJiUHJZSmhzTHA5U2pHc3RVMU04L0lDNVh5dGNEdE8zTlFldTRteDZ2YVhqcHVqdHNUdktJYlg0UUw1SWFoTm50VlZLdjF4RkxFbTJ5Rmc3TDJuczB1RC9tZndHZ09oQ0cxajJvL1NhVEFXUDVLeFA3YWU1VURjWmwydzZOV3ZFdU1qOXQzMnptemlBWmpQOFc3M0EzN0ZVc3BlUkRZaUw5c1F6a0k9PVFRemsKK3VkaXYtdy1zZGl2LmMgaVFDVkF3VUFQK0xrMFRFQW5wODMyUy83QVFJQ1hBUUFzeGUxU1FENCt4WmFaVHFCQzBWOUN5dW8wbXJkY2NuUkZ6dGhPdG0wQVJ3S0ZYVTJjdUxXL1pCT2ttZVdPVm1PRmhCcDIyL0k4ZEVHWW5NQTNnY2ZtT01DcE51OWk5emsvWEhmcHRkdW5BMU1uT2UzR3NvV2dmSEwwcmhwQXlQaHAvWDA0M0lDQjQxTkVsbm51eEFEdVFRbEQ0WjFmY2E1eWdZeE1yMmNySmc9PUVJLzYKK21waS1hc20tZGVmcy5oIGlRQ1ZBd1VBUCtMa2dERUFucDgzMlMvN0FRSzBGZ1FBeEpaN3h2WGhvWmEzM0dXZTIzTFJiM2Fzcm5vL2xvWlN5QUlYcm50cXRWSDhNM3BFc0NZME95VzRyeTRoWDJSbnhwdWhSQ00vUGRSTkxHM3hYeU1TVkloa0hVOFdWUkxxekYyTExqRWt5VTNjQW1Ibm5UUTlhTy9YcFVXdEpHVFo4cTJidjdac0FFaTRhUGwwcDZLaFBYY1BnTTl2UTJYY3lPUG4zRGwwZDZRPT14cGpJCiskbmFtZXMkIGlRQ1ZBd1VBUCtMbU5ERUFucDgzMlMvN0FRSmErZ1ArS1FOSnBiTk9nYytzMlVYK1lhMmdEYU9GY0FST0ltSWxsaGczZWo4RWFCRjh4eGRIbVdUMXphS3dUd2kzbW9FRWxleWtNUjEwNFlBR1d5UWVNYkZZaXVQUEJXK29oclQ2S3hSQlZKcElBOWF1T09xcUpNeWdsWnlvUjNIdjdnZHVWWVVXMWgvRGVibnFpS1hLRWZ6UURGcVl1VDBheXV0ZW9PUjRCNU5JQ2JFPT1uTFNoCmRpZmYgLS1naXQgYS9tcGkvZ2VuZXJpYy9kaXN0ZmlsZXMgYi9tcGkvZ2VuZXJpYy9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxMGVlZgotLS0gL2Rldi9udWxsCisrKyBiL21waS9nZW5lcmljL2Rpc3RmaWxlcwpAQCAtMCwwICsxLDExIEBACitNYW5pZmVzdAorbXBpaC1hZGQxLmMKK21waWgtbXVsMS5jCittcGloLW11bDIuYworbXBpaC1tdWwzLmMKK21waWgtbHNoaWZ0LmMKK21waWgtcnNoaWZ0LmMKK21waWgtc3ViMS5jCit1ZGl2LXctc2Rpdi5jCittcGktYXNtLWRlZnMuaAorCmRpZmYgLS1naXQgYS9tcGkvZ2VuZXJpYy9tcGktYXNtLWRlZnMuaCBiL21waS9nZW5lcmljL21waS1hc20tZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDI0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZ2VuZXJpYy9tcGktYXNtLWRlZnMuaApAQCAtMCwwICsxLDEwIEBACisvKiBUaGlzIGZpbGUgZGVmaW5lcyBzb21lIGJhc2ljIGNvbnN0YW50cyBmb3IgdGhlIE1QSSBtYWNoaW5lcnkuICBXZQorICogbmVlZCB0byBkZWZpbmUgdGhlIHR5cGVzIG9uIGEgcGVyLUNQVSBiYXNpcywgc28gaXQgaXMgZG9uZSB3aXRoCisgKiB0aGlzIGZpbGUgaGVyZS4gICovCisjZGVmaW5lIEJZVEVTX1BFUl9NUElfTElNQiAgKFNJWkVPRl9VTlNJR05FRF9MT05HKQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbXBpL2dlbmVyaWMvbXBpaC1hZGQxLmMgYi9tcGkvZ2VuZXJpYy9tcGloLWFkZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2dlbmVyaWMvbXBpaC1hZGQxLmMKQEAgLTAsMCArMSw2NSBAQAorLyogbXBpaGVscC1hZGRfMS5jICAtICBNUEkgaGVscGVyIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk3LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKK21waV9saW1iX3QKK19nY3J5X21waWhfYWRkX24gKG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLAorICAgICAgICAgICAgICAgICAgbXBpX3B0cl90IHMyX3B0ciwgbXBpX3NpemVfdCBzaXplKQoreworICBtcGlfbGltYl90IHgsIHksIGN5OworICBtcGlfc2l6ZV90IGo7CisKKyAgLyogVGhlIGxvb3AgY291bnRlciBhbmQgaW5kZXggSiBnb2VzIGZyb20gLVNJWkUgdG8gLTEuICBUaGlzIHdheQorICAgICB0aGUgbG9vcCBiZWNvbWVzIGZhc3Rlci4gICovCisgIGogPSAtc2l6ZTsKKworICAvKiBPZmZzZXQgdGhlIGJhc2UgcG9pbnRlcnMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIG5lZ2F0aXZlIGluZGljZXMuICovCisgIHMxX3B0ciAtPSBqOworICBzMl9wdHIgLT0gajsKKyAgcmVzX3B0ciAtPSBqOworCisgIGN5ID0gMDsKKyAgZG8gCisgICAgeworICAgICAgeSA9IHMyX3B0cltqXTsKKyAgICAgIHggPSBzMV9wdHJbal07CisgICAgICB5ICs9IGN5OwkJICAvKiBhZGQgcHJldmlvdXMgY2FycnkgdG8gb25lIGFkZGVuZCAqLworICAgICAgY3kgPSB5IDwgY3k7CSAgLyogZ2V0IG91dCBjYXJyeSBmcm9tIHRoYXQgYWRkaXRpb24gKi8KKyAgICAgIHkgKz0geDsgCQkgIC8qIGFkZCBvdGhlciBhZGRlbmQgKi8KKyAgICAgIGN5ICs9IHkgPCB4OwkgIC8qIGdldCBvdXQgY2FycnkgZnJvbSB0aGF0IGFkZCwgY29tYmluZSAqLworICAgICAgcmVzX3B0cltqXSA9IHk7CisgICAgfSAKKyAgd2hpbGUgKCArK2ogKTsKKworICByZXR1cm4gY3k7Cit9CisKZGlmZiAtLWdpdCBhL21waS9nZW5lcmljL21waWgtbHNoaWZ0LmMgYi9tcGkvZ2VuZXJpYy9tcGloLWxzaGlmdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGMxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZ2VuZXJpYy9tcGloLWxzaGlmdC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qIG1waS1sc2hpZnQuYyAgLSBNUEkgaGVscGVyIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisKKy8qIFNoaWZ0IFUgKHBvaW50ZWQgdG8gYnkgVVAgYW5kIFVTSVpFIGRpZ2l0cyBsb25nKSBDTlQgYml0cyB0byB0aGUgbGVmdAorICogYW5kIHN0b3JlIHRoZSBVU0laRSBsZWFzdCBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBhdCBXUC4KKyAqIFJldHVybiB0aGUgYml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSBtb3N0IHNpZ25pZmljYW50IGRpZ2l0LgorICoKKyAqIEFyZ3VtZW50IGNvbnN0cmFpbnRzOgorICogMS4gMCA8IENOVCA8IEJJVFNfUEVSX01QX0xJTUIKKyAqIDIuIElmIHRoZSByZXN1bHQgaXMgdG8gYmUgd3JpdHRlbiBvdmVyIHRoZSBpbnB1dCwgV1AgbXVzdCBiZSA+PSBVUC4KKyAqLworCittcGlfbGltYl90CitfZ2NyeV9tcGloX2xzaGlmdCggbXBpX3B0cl90IHdwLCBtcGlfcHRyX3QgdXAsIG1waV9zaXplX3QgdXNpemUsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgY250KQoreworICBtcGlfbGltYl90IGhpZ2hfbGltYiwgbG93X2xpbWI7CisgIHVuc2lnbmVkIHNoXzEsIHNoXzI7CisgIG1waV9zaXplX3QgaTsKKyAgbXBpX2xpbWJfdCByZXR2YWw7CisKKyAgc2hfMSA9IGNudDsKKyAgd3AgKz0gMTsKKyAgc2hfMiA9IEJJVFNfUEVSX01QSV9MSU1CIC0gc2hfMTsKKyAgaSA9IHVzaXplIC0gMTsKKyAgbG93X2xpbWIgPSB1cFtpXTsKKyAgcmV0dmFsID0gbG93X2xpbWIgPj4gc2hfMjsKKyAgaGlnaF9saW1iID0gbG93X2xpbWI7CisgIHdoaWxlICggLS1pID49IDAgKSAKKyAgICB7CisgICAgICBsb3dfbGltYiA9IHVwW2ldOworICAgICAgd3BbaV0gPSAoaGlnaF9saW1iIDw8IHNoXzEpIHwgKGxvd19saW1iID4+IHNoXzIpOworICAgICAgaGlnaF9saW1iID0gbG93X2xpbWI7CisgICAgfQorICB3cFtpXSA9IGhpZ2hfbGltYiA8PCBzaF8xOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbXBpL2dlbmVyaWMvbXBpaC1tdWwxLmMgYi9tcGkvZ2VuZXJpYy9tcGloLW11bDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTgxOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2dlbmVyaWMvbXBpaC1tdWwxLmMKQEAgLTAsMCArMSw2MiBAQAorLyogbXBpaGVscC1tdWxfMS5jICAtICBNUEkgaGVscGVyIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk3LCAxOTk4LCAyMDAxLAorICogICAgICAgICAgICAgICAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBpX2xpbWJfdAorX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsIG1waV9wdHJfdCBzMV9wdHIsIG1waV9zaXplX3QgczFfc2l6ZSwKKwkJCQkJCSAgICBtcGlfbGltYl90IHMyX2xpbWIpCit7CisgIG1waV9saW1iX3QgY3lfbGltYjsKKyAgbXBpX3NpemVfdCBqOworICBtcGlfbGltYl90IHByb2RfaGlnaCwgcHJvZF9sb3c7CisKKyAgLyogVGhlIGxvb3AgY291bnRlciBhbmQgaW5kZXggSiBnb2VzIGZyb20gLVMxX1NJWkUgdG8gLTEuICBUaGlzIHdheQorICAgKiB0aGUgbG9vcCBiZWNvbWVzIGZhc3Rlci4gICovCisgIGogPSAtczFfc2l6ZTsKKworICAvKiBPZmZzZXQgdGhlIGJhc2UgcG9pbnRlcnMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIG5lZ2F0aXZlIGluZGljZXMuICAqLworICBzMV9wdHIgLT0gajsKKyAgcmVzX3B0ciAtPSBqOworCisgIGN5X2xpbWIgPSAwOworICBkbyAKKyAgICB7CisgICAgICB1bXVsX3BwbW0oIHByb2RfaGlnaCwgcHJvZF9sb3csIHMxX3B0cltqXSwgczJfbGltYiApOworICAgICAgcHJvZF9sb3cgKz0gY3lfbGltYjsKKyAgICAgIGN5X2xpbWIgPSAocHJvZF9sb3cgPCBjeV9saW1iPzE6MCkgKyBwcm9kX2hpZ2g7CisgICAgICByZXNfcHRyW2pdID0gcHJvZF9sb3c7CisgICAgfSAKKyAgd2hpbGUoICsraiApOworCisgIHJldHVybiBjeV9saW1iOworfQorCmRpZmYgLS1naXQgYS9tcGkvZ2VuZXJpYy9tcGloLW11bDIuYyBiL21waS9nZW5lcmljL21waWgtbXVsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzU0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZ2VuZXJpYy9tcGloLW11bDIuYwpAQCAtMCwwICsxLDY4IEBACisvKiBtcGloLW11bDIuYyAgLSAgTVBJIGhlbHBlciBmdW5jdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5NywgMTk5OCwgMjAwMSwKKyAqICAgICAgICAgICAgICAgMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKK21waV9saW1iX3QKK19nY3J5X21waWhfYWRkbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLAorCQkgIG1waV9zaXplX3QgczFfc2l6ZSwgbXBpX2xpbWJfdCBzMl9saW1iKQoreworICBtcGlfbGltYl90IGN5X2xpbWI7CisgIG1waV9zaXplX3QgajsKKyAgbXBpX2xpbWJfdCBwcm9kX2hpZ2gsIHByb2RfbG93OworICBtcGlfbGltYl90IHg7CisKKyAgLyogVGhlIGxvb3AgY291bnRlciBhbmQgaW5kZXggSiBnb2VzIGZyb20gLVNJWkUgdG8gLTEuICBUaGlzIHdheQorICAgKiB0aGUgbG9vcCBiZWNvbWVzIGZhc3Rlci4gICovCisgIGogPSAtczFfc2l6ZTsKKyAgcmVzX3B0ciAtPSBqOworICBzMV9wdHIgLT0gajsKKworICBjeV9saW1iID0gMDsKKyAgZG8gCisgICAgeworICAgICAgdW11bF9wcG1tKCBwcm9kX2hpZ2gsIHByb2RfbG93LCBzMV9wdHJbal0sIHMyX2xpbWIgKTsKKworICAgICAgcHJvZF9sb3cgKz0gY3lfbGltYjsKKyAgICAgIGN5X2xpbWIgPSAocHJvZF9sb3cgPCBjeV9saW1iPzE6MCkgKyBwcm9kX2hpZ2g7CisKKyAgICAgIHggPSByZXNfcHRyW2pdOworICAgICAgcHJvZF9sb3cgPSB4ICsgcHJvZF9sb3c7CisgICAgICBjeV9saW1iICs9IHByb2RfbG93IDwgeD8xOjA7CisgICAgICByZXNfcHRyW2pdID0gcHJvZF9sb3c7CisgICAgfSAKKyAgd2hpbGUgKCArK2ogKTsKKyAgICAKKyAgcmV0dXJuIGN5X2xpbWI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbXBpL2dlbmVyaWMvbXBpaC1tdWwzLmMgYi9tcGkvZ2VuZXJpYy9tcGloLW11bDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg0Zjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2dlbmVyaWMvbXBpaC1tdWwzLmMKQEAgLTAsMCArMSw2OCBAQAorLyogbXBpaC1tdWwzLmMgIC0gIE1QSSBoZWxwZXIgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEsCisgKiAgICAgICAgICAgICAgIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKK21waV9saW1iX3QKK19nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLAorCQkgIG1waV9zaXplX3QgczFfc2l6ZSwgbXBpX2xpbWJfdCBzMl9saW1iKQoreworICBtcGlfbGltYl90IGN5X2xpbWI7CisgIG1waV9zaXplX3QgajsKKyAgbXBpX2xpbWJfdCBwcm9kX2hpZ2gsIHByb2RfbG93OworICBtcGlfbGltYl90IHg7CisKKyAgLyogVGhlIGxvb3AgY291bnRlciBhbmQgaW5kZXggSiBnb2VzIGZyb20gLVNJWkUgdG8gLTEuICBUaGlzIHdheQorICAgKiB0aGUgbG9vcCBiZWNvbWVzIGZhc3Rlci4gICovCisgIGogPSAtczFfc2l6ZTsKKyAgcmVzX3B0ciAtPSBqOworICBzMV9wdHIgLT0gajsKKworICBjeV9saW1iID0gMDsKKyAgZG8gCisgICAgeworICAgICAgdW11bF9wcG1tKCBwcm9kX2hpZ2gsIHByb2RfbG93LCBzMV9wdHJbal0sIHMyX2xpbWIpOworCisgICAgICBwcm9kX2xvdyArPSBjeV9saW1iOworICAgICAgY3lfbGltYiA9IChwcm9kX2xvdyA8IGN5X2xpbWI/MTowKSArIHByb2RfaGlnaDsKKworICAgICAgeCA9IHJlc19wdHJbal07CisgICAgICBwcm9kX2xvdyA9IHggLSBwcm9kX2xvdzsKKyAgICAgIGN5X2xpbWIgKz0gcHJvZF9sb3cgPiB4PzE6MDsKKyAgICAgIHJlc19wdHJbal0gPSBwcm9kX2xvdzsKKyAgICB9IAorICB3aGlsZSggKytqICk7CisKKyAgcmV0dXJuIGN5X2xpbWI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbXBpL2dlbmVyaWMvbXBpaC1yc2hpZnQuYyBiL21waS9nZW5lcmljL21waWgtcnNoaWZ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNzk0ZgotLS0gL2Rldi9udWxsCisrKyBiL21waS9nZW5lcmljL21waWgtcnNoaWZ0LmMKQEAgLTAsMCArMSw2NyBAQAorLyogbXBpaC1yc2hpZnQuYyAgLSAgTVBJIGhlbHBlciBmdW5jdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5OCwgMTk5OSwKKyAqICAgICAgICAgICAgICAgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorCisKKy8qIFNoaWZ0IFUgKHBvaW50ZWQgdG8gYnkgVVAgYW5kIFVTSVpFIGxpbWJzIGxvbmcpIENOVCBiaXRzIHRvIHRoZSByaWdodAorICogYW5kIHN0b3JlIHRoZSBVU0laRSBsZWFzdCBzaWduaWZpY2FudCBsaW1icyBvZiB0aGUgcmVzdWx0IGF0IFdQLgorICogVGhlIGJpdHMgc2hpZnRlZCBvdXQgdG8gdGhlIHJpZ2h0IGFyZSByZXR1cm5lZC4KKyAqCisgKiBBcmd1bWVudCBjb25zdHJhaW50czoKKyAqIDEuIDAgPCBDTlQgPCBCSVRTX1BFUl9NUF9MSU1CCisgKiAyLiBJZiB0aGUgcmVzdWx0IGlzIHRvIGJlIHdyaXR0ZW4gb3ZlciB0aGUgaW5wdXQsIFdQIG11c3QgYmUgPD0gVVAuCisgKi8KKworbXBpX2xpbWJfdAorX2djcnlfbXBpaF9yc2hpZnQoIG1waV9wdHJfdCB3cCwgbXBpX3B0cl90IHVwLCBtcGlfc2l6ZV90IHVzaXplLCB1bnNpZ25lZCBjbnQpCit7CisgIG1waV9saW1iX3QgaGlnaF9saW1iLCBsb3dfbGltYjsKKyAgdW5zaWduZWQgc2hfMSwgc2hfMjsKKyAgbXBpX3NpemVfdCBpOworICBtcGlfbGltYl90IHJldHZhbDsKKworICBzaF8xID0gY250OworICB3cCAtPSAxOworICBzaF8yID0gQklUU19QRVJfTVBJX0xJTUIgLSBzaF8xOworICBoaWdoX2xpbWIgPSB1cFswXTsKKyAgcmV0dmFsID0gaGlnaF9saW1iIDw8IHNoXzI7CisgIGxvd19saW1iID0gaGlnaF9saW1iOworICBmb3IgKGk9MTsgaSA8IHVzaXplOyBpKyspCisgICAgeworICAgICAgaGlnaF9saW1iID0gdXBbaV07CisgICAgICB3cFtpXSA9IChsb3dfbGltYiA+PiBzaF8xKSB8IChoaWdoX2xpbWIgPDwgc2hfMik7CisgICAgICBsb3dfbGltYiA9IGhpZ2hfbGltYjsKKyAgICB9CisgIHdwW2ldID0gbG93X2xpbWIgPj4gc2hfMTsKKworICByZXR1cm4gcmV0dmFsOworfQorCmRpZmYgLS1naXQgYS9tcGkvZ2VuZXJpYy9tcGloLXN1YjEuYyBiL21waS9nZW5lcmljL21waWgtc3ViMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODgyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvZ2VuZXJpYy9tcGloLXN1YjEuYwpAQCAtMCwwICsxLDY2IEBACisvKiBtcGloZWxwLWFkZF8yLmMgIC0gIE1QSSBoZWxwZXIgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEsCisgKiAgICAgICAgICAgICAgIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCittcGlfbGltYl90CitfZ2NyeV9tcGloX3N1Yl9uKCBtcGlfcHRyX3QgcmVzX3B0ciwgbXBpX3B0cl90IHMxX3B0ciwKKwkJCQkgIG1waV9wdHJfdCBzMl9wdHIsIG1waV9zaXplX3Qgc2l6ZSkKK3sKKyAgbXBpX2xpbWJfdCB4LCB5LCBjeTsKKyAgbXBpX3NpemVfdCBqOworCisgIC8qIFRoZSBsb29wIGNvdW50ZXIgYW5kIGluZGV4IEogZ29lcyBmcm9tIC1TSVpFIHRvIC0xLiAgVGhpcyB3YXkKKyAgICAgdGhlIGxvb3AgYmVjb21lcyBmYXN0ZXIuICAqLworICBqID0gLXNpemU7CisKKyAgLyogT2Zmc2V0IHRoZSBiYXNlIHBvaW50ZXJzIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBuZWdhdGl2ZSBpbmRpY2VzLiAgKi8KKyAgczFfcHRyIC09IGo7CisgIHMyX3B0ciAtPSBqOworICByZXNfcHRyIC09IGo7CisKKyAgY3kgPSAwOworICBkbyAKKyAgICB7CisgICAgICB5ID0gczJfcHRyW2pdOworICAgICAgeCA9IHMxX3B0cltqXTsKKyAgICAgIHkgKz0gY3k7CQkgIC8qIGFkZCBwcmV2aW91cyBjYXJyeSB0byBzdWJ0cmFoZW5kICovCisgICAgICBjeSA9IHkgPCBjeTsJCSAgLyogZ2V0IG91dCBjYXJyeSBmcm9tIHRoYXQgYWRkaXRpb24gKi8KKyAgICAgIHkgPSB4IC0geTsJCSAgLyogbWFpbiBzdWJ0cmFjdCAqLworICAgICAgY3kgKz0geSA+IHg7CQkgIC8qIGdldCBvdXQgY2FycnkgZnJvbSB0aGUgc3VidHJhY3QsIGNvbWJpbmUgKi8KKyAgICAgIHJlc19wdHJbal0gPSB5OworICAgIH0gCisgIHdoaWxlKCArK2ogKTsKKworICByZXR1cm4gY3k7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbXBpL2dlbmVyaWMvdWRpdi13LXNkaXYuYyBiL21waS9nZW5lcmljL3VkaXYtdy1zZGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwZDk4YgotLS0gL2Rldi9udWxsCisrKyBiL21waS9nZW5lcmljL3VkaXYtdy1zZGl2LmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qIG1waWgtdy1zZGl2IC0tIGltcGxlbWVudCB1ZGl2X3Fybm5kIG9uIG1hY2hpbmVzIHdpdGggb25seSBzaWduZWQKKyAqCSAgICAgIAkgIGRpdmlzaW9uLgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk2LCAxOTk4LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29udHJpYnV0ZWQgYnkgUGV0ZXIgTC4gTW9udGdvbWVyeS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisjaWYgMCAgLyogbm90IHlldCBwb3J0ZWQgdG8gTVBJICovCisKK21waV9saW1iX3QKK21waWhlbHBfdWRpdl93X3NkaXYoIG1waV9saW1wX3QgKnJwLAorCQkgICAgIG1waV9saW1wX3QgKmExLAorCQkgICAgIG1waV9saW1wX3QgKmEwLAorCQkgICAgIG1waV9saW1wX3QgKmQgICApCit7CisgIG1wX2xpbWJfdCBxLCByOworICBtcF9saW1iX3QgYzAsIGMxLCBiMTsKKworICBpZiAoKG1waV9saW1iX3NpZ25lZF90KSBkID49IDApCisgICAgeworICAgICAgaWYgKGExIDwgZCAtIGExIC0gKGEwID4+IChCSVRTX1BFUl9NUF9MSU1CIC0gMSkpKQorCXsKKwkgIC8qIGRpdmlkZW5kLCBkaXZpc29yLCBhbmQgcXVvdGllbnQgYXJlIG5vbm5lZ2F0aXZlICovCisJICBzZGl2X3Fybm5kIChxLCByLCBhMSwgYTAsIGQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBDb21wdXRlIGMxKjJeMzIgKyBjMCA9IGExKjJeMzIgKyBhMCAtIDJeMzEqZCAqLworCSAgc3ViX2RkbW1zcyAoYzEsIGMwLCBhMSwgYTAsIGQgPj4gMSwgZCA8PCAoQklUU19QRVJfTVBfTElNQiAtIDEpKTsKKwkgIC8qIERpdmlkZSAoYzEqMl4zMiArIGMwKSBieSBkICovCisJICBzZGl2X3Fybm5kIChxLCByLCBjMSwgYzAsIGQpOworCSAgLyogQWRkIDJeMzEgdG8gcXVvdGllbnQgKi8KKwkgIHEgKz0gKG1wX2xpbWJfdCkgMSA8PCAoQklUU19QRVJfTVBfTElNQiAtIDEpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiMSA9IGQgPj4gMTsJCQkvKiBkLzIsIGJldHdlZW4gMl4zMCBhbmQgMl4zMSAtIDEgKi8KKyAgICAgIGMxID0gYTEgPj4gMTsJCQkvKiBBLzIgKi8KKyAgICAgIGMwID0gKGExIDw8IChCSVRTX1BFUl9NUF9MSU1CIC0gMSkpICsgKGEwID4+IDEpOworCisgICAgICBpZiAoYTEgPCBiMSkJCQkvKiBBIDwgMl4zMipiMSwgc28gQS8yIDwgMl4zMSpiMSAqLworCXsKKwkgIHNkaXZfcXJubmQgKHEsIHIsIGMxLCBjMCwgYjEpOyAvKiAoQS8yKSAvIChkLzIpICovCisKKwkgIHIgPSAyKnIgKyAoYTAgJiAxKTsJCS8qIFJlbWFpbmRlciBmcm9tIEEvKDIqYjEpICovCisJICBpZiAoKGQgJiAxKSAhPSAwKQorCSAgICB7CisJICAgICAgaWYgKHIgPj0gcSkKKwkJciA9IHIgLSBxOworCSAgICAgIGVsc2UgaWYgKHEgLSByIDw9IGQpCisJCXsKKwkJICByID0gciAtIHEgKyBkOworCQkgIHEtLTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHIgPSByIC0gcSArIDIqZDsKKwkJICBxIC09IDI7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKGMxIDwgYjEpIAkJLyogU28gMl4zMSA8PSAoQS8yKS9iMSA8IDJeMzIgKi8KKwl7CisJICBjMSA9IChiMSAtIDEpIC0gYzE7CisJICBjMCA9IH5jMDsJCQkvKiBsb2dpY2FsIE5PVCAqLworCisJICBzZGl2X3Fybm5kIChxLCByLCBjMSwgYzAsIGIxKTsgLyogKEEvMikgLyAoZC8yKSAqLworCisJICBxID0gfnE7CQkJLyogKEEvMikvYjEgKi8KKwkgIHIgPSAoYjEgLSAxKSAtIHI7CisKKwkgIHIgPSAyKnIgKyAoYTAgJiAxKTsJCS8qIEEvKDIqYjEpICovCisKKwkgIGlmICgoZCAmIDEpICE9IDApCisJICAgIHsKKwkgICAgICBpZiAociA+PSBxKQorCQlyID0gciAtIHE7CisJICAgICAgZWxzZSBpZiAocSAtIHIgPD0gZCkKKwkJeworCQkgIHIgPSByIC0gcSArIGQ7CisJCSAgcS0tOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgciA9IHIgLSBxICsgMipkOworCQkgIHEgLT0gMjsKKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZQkJCQkvKiBJbXBsaWVzIGMxID0gYjEgKi8KKwl7CQkJCS8qIEhlbmNlIGExID0gZCAtIDEgPSAyKmIxIC0gMSAqLworCSAgaWYgKGEwID49IC1kKQorCSAgICB7CisJICAgICAgcSA9IC0xOworCSAgICAgIHIgPSBhMCArIGQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHEgPSAtMjsKKwkgICAgICByID0gYTAgKyAyKmQ7CisJICAgIH0KKwl9CisgICAgfQorCisgICpycCA9IHI7CisgIHJldHVybiBxOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbXBpL2hwcGEvUkVBRE1FIGIvbXBpL2hwcGEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmQ1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaHBwYS9SRUFETUUKQEAgLTAsMCArMSw4NCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgdmFyaW91cyBIUCBQQS1SSVNDIGNoaXBzLiAgQ29kZQordGhhdCBydW5zIGZhc3RlciBvbiB0aGUgUEE3MTAwIGFuZCBsYXRlciBpbXBsZW1lbnRhdGlvbnMsIGlzIGluIHRoZSBwYTcxMDAKK2RpcmVjdG9yeS4KKworUkVMRVZBTlQgT1BUSU1JWkFUSU9OIElTU1VFUworCisgIExvYWQgYW5kIFN0b3JlIHRpbWluZworCitPbiB0aGUgUEE3MDAwIG5vIG1lbW9yeSBpbnN0cnVjdGlvbnMgY2FuIGlzc3VlIHRoZSB0d28gY3ljbGVzIGFmdGVyIGEgc3RvcmUuCitGb3IgdGhlIFBBNzEwMCwgdGhpcyBpcyByZWR1Y2VkIHRvIG9uZSBjeWNsZS4KKworVGhlIFBBNzEwMCBoYXMgYSBsb29rdXAtZnJlZSBjYWNoZSwgc28gaXQgaGVscHMgdG8gc2NoZWR1bGUgbG9hZHMgYW5kIHRoZQorZGVwZW5kZW50IGluc3RydWN0aW9uIHJlYWxseSBmYXIgZnJvbSBlYWNoIG90aGVyLgorCitTVEFUVVMKKworMS4gbXBuX211bF8xIGNvdWxkIGJlIGltcHJvdmVkIHRvIDYuNSBjeWNsZXMvbGltYiBvbiB0aGUgUEE3MTAwLCB1c2luZyB0aGUKKyAgIGluc3RydWN0aW9ucyBid2xvdyAoYnV0IHNvbWUgc3cgcGlwZWxpbmluZyBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlCisgICB4bXB5dS1mc3RkcyBkZWxheSk6CisKKwlmbGRkcwlzMV9wdHIKKworCXhtcHl1CisJZnN0ZHMJTiglcjMwKQorCXhtcHl1CisJZnN0ZHMJTiglcjMwKQorCisJbGR3cwlOKCVyMzApCisJbGR3cwlOKCVyMzApCisJbGR3cwlOKCVyMzApCisJbGR3cwlOKCVyMzApCisKKwlhZGRjCisJc3R3cwlyZXNfcHRyCisJYWRkYworCXN0d3MJcmVzX3B0cgorCisJYWRkaWIJTG9vcAorCisyLiBtcG5fYWRkbXVsXzEgY291bGQgYmUgaW1wcm92ZWQgZnJvbSB0aGUgY3VycmVudCAxMCB0byA3LjUgY3ljbGVzL2xpbWIKKyAgIChhc3ltcHRvdGljYWxseSkgb24gdGhlIFBBNzEwMCwgdXNpbmcgdGhlIGluc3RydWN0aW9ucyBiZWxvdy4gIFdpdGggcHJvcGVyCisgICBzdyBwaXBlbGluaW5nIGFuZCB0aGUgdW5yb2xsaW5nIGxldmVsIGJlbG93LCB0aGUgc3BlZWQgYmVjb21lcyA4CisgICBjeWNsZXMvbGltYi4KKworCWZsZGRzCXMxX3B0cgorCWZsZGRzCXMxX3B0cgorCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlhZGRjCisJYWRkYworCWFkZGMKKwlhZGRjCisJYWRkYwklcjAsJXIwLGN5LWxpbWIKKworCWxkd3MJcmVzX3B0cgorCWxkd3MJcmVzX3B0cgorCWxkd3MJcmVzX3B0cgorCWxkd3MJcmVzX3B0cgorCWFkZAorCXN0d3MJcmVzX3B0cgorCWFkZGMKKwlzdHdzCXJlc19wdHIKKwlhZGRjCisJc3R3cwlyZXNfcHRyCisJYWRkYworCXN0d3MJcmVzX3B0cgorCisJYWRkaWIKZGlmZiAtLWdpdCBhL21waS9ocHBhL2Rpc3RmaWxlcyBiL21waS9ocHBhL2Rpc3RmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI0MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2hwcGEvZGlzdGZpbGVzCkBAIC0wLDAgKzEsNyBAQAorUkVBRE1FCit1ZGl2LXFybm5kLlMKK21waWgtYWRkMS5TCittcGloLXN1YjEuUworbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworCmRpZmYgLS1naXQgYS9tcGkvaHBwYS9tcGloLWFkZDEuUyBiL21waS9ocHBhL21waWgtYWRkMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzBlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaHBwYS9tcGloLWFkZDEuUwpAQCAtMCwwICsxLDcwIEBACisvKiBocHBhIGFkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCisgKgkJIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKGdyMjYpCisgKgkJICAgbXBpX3B0cl90IHMxX3B0ciwJKGdyMjUpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKGdyMjQpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoZ3IyMykKKyAqCisgKiBPbmUgbWlnaHQgd2FudCB0byB1bnJvbGwgdGhpcyBhcyBmb3Igb3RoZXIgcHJvY2Vzc29ycywgYnV0IGl0IHR1cm5zCisgKiBvdXQgdGhhdCB0aGUgZGF0YSBjYWNoZSBjb250ZW50aW9uIGFmdGVyIGEgc3RvcmUgbWFrZXMgc3VjaAorICogdW5yb2xsaW5nIHVzZWxlc3MuICBXZSBjYW4ndCBjb21lIHVuZGVyIDUgY3ljbGVzL2xpbWIgYW55d2F5LgorICovCisKKwkuY29kZQorCS5leHBvcnQgCV9nY3J5X21waWhfYWRkX24KKwkubGFiZWwJCV9nY3J5X21waWhfYWRkX24KKwkucHJvYworCS5jYWxsaW5mbwlmcmFtZT0wLG5vX2NhbGxzCisJLmVudHJ5CisKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI0KSwlcjE5CisKKwlhZGRpYiw9IAktMSwlcjIzLEwkZW5kCTsgY2hlY2sgZm9yIChTSVpFID09IDEpCisJIGFkZAkJJXIyMCwlcjE5LCVyMjgJOyBhZGQgZmlyc3QgbGltYnMgaWdub3JpbmcgY3kKKworCS5sYWJlbCBMJGxvb3AKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYSAJJXIyOCw0KDAsJXIyNikKKwlhZGRpYiw8PgktMSwlcjIzLEwkbG9vcAorCSBhZGRjCQklcjIwLCVyMTksJXIyOAorCisJLmxhYmVsIEwkZW5kCisJc3R3cwkJJXIyOCwwKDAsJXIyNikKKwlidgkJMCglcjIpCisJIGFkZGMJCSVyMCwlcjAsJXIyOAorCisJLmV4aXQKKwkucHJvY2VuZApkaWZmIC0tZ2l0IGEvbXBpL2hwcGEvbXBpaC1sc2hpZnQuUyBiL21waS9ocHBhL21waWgtbHNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiMjliYgotLS0gL2Rldi9udWxsCisrKyBiL21waS9ocHBhL21waWgtbHNoaWZ0LlMKQEAgLTAsMCArMSw3NyBAQAorLyogaHBwYSAgIGxzaGlmdAorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2xzaGlmdCggbXBpX3B0cl90IHdwLAkoZ3IyNikKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShncjI1KQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCShncjI0KQorICoJCSAgIHVuc2lnbmVkIGNudCkJKGdyMjMpCisgKi8KKworCS5jb2RlCisJLmV4cG9ydCAJX2djcnlfbXBpaF9sc2hpZnQKKwkubGFiZWwJCV9nY3J5X21waWhfbHNoaWZ0CisJLnByb2MKKwkuY2FsbGluZm8JZnJhbWU9NjQsbm9fY2FsbHMKKwkuZW50cnkKKworCXNoMmFkZAkJJXIyNCwlcjI1LCVyMjUKKwlzaDJhZGQJCSVyMjQsJXIyNiwlcjI2CisJbGR3cyxtYiAJLTQoMCwlcjI1KSwlcjIyCisJc3ViaQkJMzIsJXIyMywlcjEKKwltdHNhcgkJJXIxCisJYWRkaWIsPSAJLTEsJXIyNCxMJDAwMDQKKwl2c2hkCQklcjAsJXIyMiwlcjI4CQk7IGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlsZHdzLG1iIAktNCgwLCVyMjUpLCVyMjkKKwlhZGRpYiw9IAktMSwlcjI0LEwkMDAwMgorCXZzaGQJCSVyMjIsJXIyOSwlcjIwCisKKwkubGFiZWwJTCRsb29wCisJbGR3cyxtYiAJLTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYiAJJXIyMCwtNCgwLCVyMjYpCisJYWRkaWIsPSAJLTEsJXIyNCxMJDAwMDMKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCWxkd3MsbWIgCS00KDAsJXIyNSksJXIyOQorCXN0d3MsbWIgCSVyMjAsLTQoMCwlcjI2KQorCWFkZGliLDw+CS0xLCVyMjQsTCRsb29wCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKworCS5sYWJlbAlMJDAwMDIKKwlzdHdzLG1iIAklcjIwLC00KDAsJXIyNikKKwl2c2hkCQklcjI5LCVyMCwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwtNCgwLCVyMjYpCisJLmxhYmVsCUwkMDAwMworCXN0d3MsbWIgCSVyMjAsLTQoMCwlcjI2KQorCS5sYWJlbAlMJDAwMDQKKwl2c2hkCQklcjIyLCVyMCwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwtNCgwLCVyMjYpCisKKwkuZXhpdAorCS5wcm9jZW5kCisKKworCmRpZmYgLS1naXQgYS9tcGkvaHBwYS9tcGloLXJzaGlmdC5TIGIvbXBpL2hwcGEvbXBpaC1yc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E5ZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2hwcGEvbXBpaC1yc2hpZnQuUwpAQCAtMCwwICsxLDczIEBACisvKiBocHBhICAgcnNoaWZ0CisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfcnNoaWZ0KCBtcGlfcHRyX3Qgd3AsICAgICAgIChncjI2KQorICoJCSAgIG1waV9wdHJfdCB1cCwgICAgICAgKGdyMjUpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwgICAoZ3IyNCkKKyAqCQkgICB1bnNpZ25lZCBjbnQpICAgICAgIChncjIzKQorICovCisKKwkuY29kZQorCS5leHBvcnQgCV9nY3J5X21waWhfcnNoaWZ0CisJLmxhYmVsCQlfZ2NyeV9tcGloX3JzaGlmdAorCS5wcm9jCisJLmNhbGxpbmZvCWZyYW1lPTY0LG5vX2NhbGxzCisJLmVudHJ5CisKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMgorCW10c2FyCQklcjIzCisJYWRkaWIsPSAJLTEsJXIyNCxMJHIwMDQKKwl2c2hkCQklcjIyLCVyMCwlcjI4CQk7IGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyOQorCWFkZGliLD0gCS0xLCVyMjQsTCRyMDAyCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKworCS5sYWJlbAlMJHJvb3AKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMgorCXN0d3MsbWEgCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPSAJLTEsJXIyNCxMJHIwMDMKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwlhZGRpYiw8PgktMSwlcjI0LEwkcm9vcAorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisKKwkubGFiZWwJTCRyMDAyCisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjAsJXIyOSwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwwKDAsJXIyNikKKwkubGFiZWwJTCRyMDAzCisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwkubGFiZWwJTCRyMDA0CisJdnNoZAkJJXIwLCVyMjIsJXIyMAorCWJ2CQkwKCVyMikKKwlzdHcJCSVyMjAsMCgwLCVyMjYpCisKKwkuZXhpdAorCS5wcm9jZW5kCisKZGlmZiAtLWdpdCBhL21waS9ocHBhL21waWgtc3ViMS5TIGIvbXBpL2hwcGEvbXBpaC1zdWIxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxOTdlNAotLS0gL2Rldi9udWxsCisrKyBiL21waS9ocHBhL21waWgtc3ViMS5TCkBAIC0wLDAgKzEsNzggQEAKKy8qIGhwcGEgICBzdWJfbiAtLSBTdWIgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfc3ViX24oIG1waV9wdHJfdCByZXNfcHRyLAkoZ3IyNikKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkoZ3IyNSkKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkoZ3IyNCkKKyAqCQkgICBtcGlfc2l6ZV90IHNpemUpCShncjIzKQorICoKKyAqIE9uZSBtaWdodCB3YW50IHRvIHVucm9sbCB0aGlzIGFzIGZvciBvdGhlciBwcm9jZXNzb3JzLCBidXQgaXQgdHVybnMKKyAqIG91dCB0aGF0IHRoZSBkYXRhIGNhY2hlIGNvbnRlbnRpb24gYWZ0ZXIgYSBzdG9yZSBtYWtlcyBzdWNoCisgKiB1bnJvbGxpbmcgdXNlbGVzcy4gIFdlIGNhbid0IGNvbWUgdW5kZXIgNSBjeWNsZXMvbGltYiBhbnl3YXkuCisgKi8KKworCisJLmNvZGUKKwkuZXhwb3J0IAlfZ2NyeV9tcGloX3N1Yl9uCisJLmxhYmVsCQlfZ2NyeV9tcGloX3N1Yl9uCisJLnByb2MKKwkuY2FsbGluZm8JZnJhbWU9MCxub19jYWxscworCS5lbnRyeQorCisJbGR3cyxtYSAJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hIAk0KDAsJXIyNCksJXIxOQorCisJYWRkaWIsPSAJLTEsJXIyMyxMJGVuZAk7IGNoZWNrIGZvciAoU0laRSA9PSAxKQorCSBzdWIJCSVyMjAsJXIxOSwlcjI4CTsgc3VidHJhY3QgZmlyc3QgbGltYnMgaWdub3JpbmcgY3kKKworCS5sYWJlbAlMJGxvb3AKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYSAJJXIyOCw0KDAsJXIyNikKKwlhZGRpYiw8PgktMSwlcjIzLEwkbG9vcAorCSBzdWJiCQklcjIwLCVyMTksJXIyOAorCisJLmxhYmVsCUwkZW5kCisJc3R3cwkJJXIyOCwwKDAsJXIyNikKKwlhZGRjCQklcjAsJXIwLCVyMjgKKwlidgkJMCglcjIpCisJIHN1YmkJCTEsJXIyOCwlcjI4CisKKwkuZXhpdAorCS5wcm9jZW5kCisKKworCmRpZmYgLS1naXQgYS9tcGkvaHBwYS91ZGl2LXFybm5kLlMgYi9tcGkvaHBwYS91ZGl2LXFybm5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllYmY3YQotLS0gL2Rldi9udWxsCisrKyBiL21waS9ocHBhL3VkaXYtcXJubmQuUwpAQCAtMCwwICsxLDI5NyBAQAorLyogSFAtUEEgIF9fdWRpdl9xcm5uZCBkaXZpc2lvbiBzdXBwb3J0LCB1c2VkIGZyb20gbG9uZ2xvbmcuaC4KKyAqCSAgVGhpcyB2ZXJzaW9uIHJ1bnMgZmFzdCBvbiBwcmUtUEE3MDAwIENQVXMuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTgsIDIwMDEsCisgKiAgICAgICAgICAgICAgICAgICAgIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKworLyogSU5QVVQgUEFSQU1FVEVSUworICogICByZW1fcHRyCSAgIGdyMjYKKyAqICAgbjEgCSAgIGdyMjUKKyAqICAgbjAgCSAgIGdyMjQKKyAqICAgZAkJICAgZ3IyMworICoKKyAqICAgVGhlIGNvZGUgc2l6ZSBpcyBhIGJpdCBleGNlc3NpdmUuCVdlIGNvdWxkIG1lcmdlIHRoZSBsYXN0IHR3byBkczthZGRjCisgKiAgIHNlcXVlbmNlcyBieSBzaW1wbHkgbW92aW5nIHRoZSAiYmIsPCBPZGQiIGluc3RydWN0aW9uIGRvd24uICBUaGUgb25seQorICogICB0cm91YmxlIGlzIHRoZSBGRkZGRkZGRiBjb2RlIHRoYXQgd291bGQgbmVlZCBzb21lIGhhY2tpbmcuCisgKi8KKworCS5jb2RlCisJLmV4cG9ydCAJX191ZGl2X3Fybm5kCisJLmxhYmVsCQlfX3VkaXZfcXJubmQKKwkucHJvYworCS5jYWxsaW5mbwlmcmFtZT0wLG5vX2NhbGxzCisJLmVudHJ5CisKKwljb21iLDwJCSVyMjMsMCxMJGxhcmdlZGl2aXNvcgorCSBzdWIJCSVyMCwlcjIzLCVyMQkJOyBjbGVhciBjeSBhcyBzaWRlLWVmZmVjdAorCWRzCQklcjAsJXIxLCVyMAorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjgKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwljb21jbHIsPj0JJXIyNSwlcjAsJXIwCisJYWRkbAkJJXIyNSwlcjIzLCVyMjUKKwlzdHdzCQklcjI1LDAoMCwlcjI2KQorCWJ2CQkwKCVyMikKKwkgYWRkYwkJJXIyOCwlcjI4LCVyMjgKKworCS5sYWJlbAlMJGxhcmdlZGl2aXNvcgorCWV4dHJ1CQklcjI0LDMxLDEsJXIxOQkJOyByMTkgPSBuMCAmIDEKKwliYiw8CQklcjIzLDMxLEwkb2RkCisJIGV4dHJ1CQklcjIzLDMwLDMxLCVyMjIgCTsgcjIyID0gZCA+PiAxCisJc2hkCQklcjI1LCVyMjQsMSwlcjI0CTsgcjI0ID0gbmV3IG4wCisJZXh0cnUJCSVyMjUsMzAsMzEsJXIyNSAJOyByMjUgPSBuZXcgbjEKKwlzdWIJCSVyMCwlcjIyLCVyMjEKKwlkcwkJJXIwLCVyMjEsJXIwCisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWNvbWNsciw+PQklcjI1LCVyMCwlcjAKKwlhZGRsCQklcjI1LCVyMjIsJXIyNQorCXNoMWFkZGwgCSVyMjUsJXIxOSwlcjI1CisJc3R3cwkJJXIyNSwwKDAsJXIyNikKKwlidgkJMCglcjIpCisJIGFkZGMJCSVyMjQsJXIyNCwlcjI4CisKKwkubGFiZWwJTCRvZGQKKwlhZGRpYixzdixuCTEsJXIyMixMJEZGLi4JCTsgcjIyID0gKGQgLyAyICsgMSkKKwlzaGQJCSVyMjUsJXIyNCwxLCVyMjQJOyByMjQgPSBuZXcgbjAKKwlleHRydQkJJXIyNSwzMCwzMSwlcjI1IAk7IHIyNSA9IG5ldyBuMQorCXN1YgkJJXIwLCVyMjIsJXIyMQorCWRzCQklcjAsJXIyMSwlcjAKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjgKKwljb21jbHIsPj0JJXIyNSwlcjAsJXIwCisJYWRkbAkJJXIyNSwlcjIyLCVyMjUKKwlzaDFhZGRsIAklcjI1LCVyMTksJXIyNQorOyBXZSBoYXZlIGNvbXB1dGVkIChuMSwsbjApIC8gKGQgKyAxKSwgcScgPSByMjgsIHInID0gcjI1CisJYWRkLG51diAJJXIyOCwlcjI1LCVyMjUKKwlhZGRsCQklcjI1LCVyMSwlcjI1CisJYWRkYwkJJXIwLCVyMjgsJXIyOAorCXN1Yiw8PAkJJXIyNSwlcjIzLCVyMAorCWFkZGwJCSVyMjUsJXIxLCVyMjUKKwlzdHdzCQklcjI1LDAoMCwlcjI2KQorCWJ2CQkwKCVyMikKKwkgYWRkYwkJJXIwLCVyMjgsJXIyOAorCis7IFRoaXMgaXMganVzdCBhIHNwZWNpYWwgY2FzZSBvZiB0aGUgY29kZSBhYm92ZS4KKzsgV2UgY29tZSBoZXJlIHdoZW4gZCA9PSAweEZGRkZGRkZGCisJLmxhYmVsCUwkRkYuLgorCWFkZCx1dgkJJXIyNSwlcjI0LCVyMjQKKwlzdWIsPDwJCSVyMjQsJXIyMywlcjAKKwlsZG8JCTEoJXIyNCksJXIyNAorCXN0d3MJCSVyMjQsMCgwLCVyMjYpCisJYnYJCTAoJXIyKQorCSBhZGRjCQklcjAsJXIyNSwlcjI4CisKKwkuZXhpdAorCS5wcm9jZW5kCmRpZmYgLS1naXQgYS9tcGkvaHBwYTEuMS9kaXN0ZmlsZXMgYi9tcGkvaHBwYTEuMS9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4MjI3YQotLS0gL2Rldi9udWxsCisrKyBiL21waS9ocHBhMS4xL2Rpc3RmaWxlcwpAQCAtMCwwICsxLDUgQEAKK3VkaXYtcXJubmQuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworCmRpZmYgLS1naXQgYS9tcGkvaHBwYTEuMS9tcGloLW11bDEuUyBiL21waS9ocHBhMS4xL21waWgtbXVsMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTI2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaHBwYTEuMS9tcGloLW11bDEuUwpAQCAtMCwwICsxLDExNSBAQAorLyogaHBwYTEuMSAgbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKKyAqCQkgICAgIHRoZSByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX211bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHIyNikKKyAqCQkgIG1waV9wdHJfdCBzMV9wdHIsCShyMjUpCisgKgkJICBtcGlfc2l6ZV90IHMxX3NpemUsCShyMjQpCisgKgkJICBtcGlfbGltYl90IHMyX2xpbWIpCShyMjMpCisgKgorICoKKyAqCisgKiBUaGlzIHJ1bnMgYXQgOSBjeWNsZXMvbGltYiBvbiBhIFBBNzAwMC4gIFdpdGggdGhlIHVzZWQgaW5zdHJ1Y3Rpb25zLCBpdCBjYW4KKyAqIG5vdCBiZWNvbWUgZmFzdGVyIGR1ZSB0byBkYXRhIGNhY2hlIGNvbnRlbnRpb24gYWZ0ZXIgYSBzdG9yZS4gIE9uIHRoZQorICogUEE3MTAwIGl0IHJ1bnMgYXQgNyBjeWNsZXMvbGltYiwgYW5kIHRoYXQgY2FuIG5vdCBiZSBpbXByb3ZlZCBlaXRoZXIsIHNpbmNlCisgKiBvbmx5IHRoZSB4bXB5dSBkb2VzIG5vdCBuZWVkIHRoZSBpbnRlZ2VyIHBpcGVsaW5lLCBzbyB0aGUgb25seSBkdWFsLWlzc3VlCisgKiB3ZSB3aWxsIGdldCBhcmUgYWRkYyt4bXB5dS4JVW5yb2xsaW5nIHdvdWxkIG5vdCBoZWxwIGVpdGhlciBDUFUuCisgKgorICogV2UgY291bGQgdXNlIGZsZGRzIHRvIHJlYWQgdHdvIGxpbWJzIGF0IGEgdGltZSBmcm9tIHRoZSBTMSBhcnJheSwgYW5kIHRoYXQKKyAqIGNvdWxkIGJyaW5nIGRvd24gdGhlIHRpbWVzIHRvIDguNSBhbmQgNi41IGN5Y2xlcy9saW1iIGZvciB0aGUgUEE3MDAwIGFuZAorICogUEE3MTAwLCByZXNwZWN0aXZlbHkuICBXZSBkb24ndCBkbyB0aGF0IHNpbmNlIGl0IGRvZXMgbm90IHNlZW0gd29ydGggdGhlCisgKiAoYWxpZ25tZW50KSB0cm91Ymxlcy4uLgorICoKKyAqIEF0IGxlYXN0IHRoZSBQQTcxMDAgaXMgcnVtb3JlZCB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aCBjYWNoZS1taXNzZXMKKyAqIHdpdGhvdXQgc3RhbGxpbmcgaW5zdHJ1Y3Rpb24gaXNzdWUuCUlmIHRoaXMgaXMgdHJ1ZSwgYW5kIHRoZSBjYWNoZSBpcworICogYWN0dWFsbHkgYWxzbyBsb2NrdXAtZnJlZSwgd2Ugc2hvdWxkIHVzZSBhIGRlZXBlciBzb2Z0d2FyZSBwaXBlbGluZSwgYW5kCisgKiBsb2FkIGZyb20gUzEgdmVyeSBlYXJseSEgIChUaGUgbG9hZHMgYW5kIHN0b3JlcyB0byAtMTIoc3ApIHdpbGwgc3VyZWx5IGJlCisgKiBpbiB0aGUgY2FjaGUuKQorICovCisKKwkubGV2ZWwJCTEuMQorCisJLmNvZGUKKwkuZXhwb3J0IAlfZ2NyeV9tcGloX211bF8xCisJLmxhYmVsCQlfZ2NyeV9tcGloX211bF8xCisJLnByb2MKKwkuY2FsbGluZm8JZnJhbWU9NjQsbm9fY2FsbHMKKwkuZW50cnkKKworCWxkbwkJNjQoJXIzMCksJXIzMAorCWZsZHdzLG1hCTQoJXIyNSksJWZyNQorCXN0dwkJJXIyMywtMTYoJXIzMCkJCTsgbW92ZSBzMl9saW1iIC4uLgorCWFkZGliLD0gCS0xLCVyMjQsTCRqdXN0X29uZV9saW1iCisJIGZsZHdzCQktMTYoJXIzMCksJWZyNAkJOyAuLi4gaW50byBmcjQKKwlhZGQJCSVyMCwlcjAsJXIwCQk7IGNsZWFyIGNhcnJ5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJZmxkd3MsbWEJNCglcjI1KSwlZnI3CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJeG1weXUJCSVmcjQsJWZyNywlZnI4CisJbGR3CQktMTIoJXIzMCksJXIxOQkJOyBsZWFzdCBzaWduaWZpY2FudCBsaW1iIGluIHByb2R1Y3QKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisKKwlmc3RkcwkJJWZyOCwtMTYoJXIzMCkKKwlhZGRpYiw9IAktMSwlcjI0LEwkZW5kCisJIGxkdwkJLTEyKCVyMzApLCVyMQorCis7IE1haW4gbG9vcAorCS5sYWJlbAlMJGxvb3AKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjUKKwlzdHdzLG1hIAklcjE5LDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWZzdGRzCQklZnI2LC0xNiglcjMwKQorCWFkZGliLDw+CS0xLCVyMjQsTCRsb29wCisJIGxkdwkJLTEyKCVyMzApLCVyMQorCisJLmxhYmVsCUwkZW5kCisJc3R3cyxtYSAJJXIxOSw0KCVyMjYpCisJYWRkYwkJJXIyOCwlcjEsJXIxOQorCWxkdwkJLTE2KCVyMzApLCVyMjgKKwlzdHdzLG1hIAklcjE5LDQoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKKwkubGFiZWwJTCRqdXN0X29uZV9saW1iCisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJbGR3CQktMTYoJXIzMCksJXIyOAorCWxkbwkJLTY0KCVyMzApLCVyMzAKKwlidgkJMCglcjIpCisJIGZzdHdzCQklZnI2UiwwKCVyMjYpCisKKwkuZXhpdAorCS5wcm9jZW5kCisKKwpkaWZmIC0tZ2l0IGEvbXBpL2hwcGExLjEvbXBpaC1tdWwyLlMgYi9tcGkvaHBwYTEuMS9tcGloLW11bDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQ3YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2hwcGExLjEvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIGhwcGExLjEgICBhZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqCQkJIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfYWRkbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChyMjYpCisgKgkJICAgICBtcGlfcHRyX3QgczFfcHRyLAkgICAgIChyMjUpCisgKgkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsICAgICAocjI0KQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHIyMykKKyAqCisgKiBUaGlzIHJ1bnMgYXQgMTEgY3ljbGVzL2xpbWIgb24gYSBQQTcwMDAuICBXaXRoIHRoZSB1c2VkIGluc3RydWN0aW9ucywgaXQKKyAqIGNhbiBub3QgYmVjb21lIGZhc3RlciBkdWUgdG8gZGF0YSBjYWNoZSBjb250ZW50aW9uIGFmdGVyIGEgc3RvcmUuICBPbiB0aGUKKyAqIFBBNzEwMCBpdCBydW5zIGF0IDEwIGN5Y2xlcy9saW1iLCBhbmQgdGhhdCBjYW4gbm90IGJlIGltcHJvdmVkIGVpdGhlciwKKyAqIHNpbmNlIG9ubHkgdGhlIHhtcHl1IGRvZXMgbm90IG5lZWQgdGhlIGludGVnZXIgcGlwZWxpbmUsIHNvIHRoZSBvbmx5CisgKiBkdWFsLWlzc3VlIHdlIHdpbGwgZ2V0IGFyZSBhZGRjK3htcHl1LiAgVW5yb2xsaW5nIGNvdWxkIGdhaW4gYSBjeWNsZS9saW1iCisgKiBvbiB0aGUgUEE3MTAwLgorICoKKyAqIFRoZXJlIGFyZSBzb21lIGlkZWFzIGRlc2NyaWJlZCBpbiBtdWwxLlMgdGhhdCBhcHBsaWVzIHRvIHRoaXMgY29kZSB0b28uCisgKi8KKworCS5sZXZlbAkJMS4xCisKKwkuY29kZQorCS5leHBvcnQgCV9nY3J5X21waWhfYWRkbXVsXzEKKwkubGFiZWwJCV9nY3J5X21waWhfYWRkbXVsXzEKKwkucHJvYworCS5jYWxsaW5mbwlmcmFtZT02NCxub19jYWxscworCS5lbnRyeQorCisJbGRvCQk2NCglcjMwKSwlcjMwCisJZmxkd3MsbWEJNCglcjI1KSwlZnI1CisJc3R3CQklcjIzLC0xNiglcjMwKQkJOyBtb3ZlIHMyX2xpbWIgLi4uCisJYWRkaWIsPSAJLTEsJXIyNCxMJGp1c3Rfb25lX2xpbWIKKwkgZmxkd3MJCS0xNiglcjMwKSwlZnI0CQk7IC4uLiBpbnRvIGZyNAorCWFkZAkJJXIwLCVyMCwlcjAJCTsgY2xlYXIgY2FycnkKKwl4bXB5dQkJJWZyNCwlZnI1LCVmcjYKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjcKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwl4bXB5dQkJJWZyNCwlZnI3LCVmcjgKKwlsZHcJCS0xMiglcjMwKSwlcjE5CQk7IGxlYXN0IHNpZ25pZmljYW50IGxpbWIgaW4gcHJvZHVjdAorCWxkdwkJLTE2KCVyMzApLCVyMjgKKworCWZzdGRzCQklZnI4LC0xNiglcjMwKQorCWFkZGliLD0gCS0xLCVyMjQsTCRlbmQKKwkgbGR3CQktMTIoJXIzMCksJXIxCisKKzsgTWFpbiBsb29wCisJLmxhYmVsCUwkbG9vcAorCWxkd3MJCTAoJXIyNiksJXIyOQorCWZsZHdzLG1hCTQoJXIyNSksJWZyNQorCWFkZAkJJXIyOSwlcjE5LCVyMTkKKwlzdHdzLG1hIAklcjE5LDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWZzdGRzCQklZnI2LC0xNiglcjMwKQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlhZGRpYiw8PgktMSwlcjI0LEwkbG9vcAorCSBsZHcJCS0xMiglcjMwKSwlcjEKKworCS5sYWJlbAlMJGVuZAorCWxkdwkJMCglcjI2KSwlcjI5CisJYWRkCQklcjI5LCVyMTksJXIxOQorCXN0d3MsbWEgCSVyMTksNCglcjI2KQorCWFkZGMJCSVyMjgsJXIxLCVyMTkKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisJbGR3cwkJMCglcjI2KSwlcjI5CisJYWRkYwkJJXIwLCVyMjgsJXIyOAorCWFkZAkJJXIyOSwlcjE5LCVyMTkKKwlzdHdzLG1hIAklcjE5LDQoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKKwkubGFiZWwgTCRqdXN0X29uZV9saW1iCisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQkwKCVyMjYpLCVyMjkKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwlsZHcJCS0xMiglcjMwKSwlcjEKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisJYWRkCQklcjI5LCVyMSwlcjE5CisJc3R3CQklcjE5LDAoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKKwkuZXhpdAorCS5wcm9jZW5kCisKKwpkaWZmIC0tZ2l0IGEvbXBpL2hwcGExLjEvbXBpaC1tdWwzLlMgYi9tcGkvaHBwYTEuMS9tcGloLW11bDMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJhZGYxCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2hwcGExLjEvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSwxMjYgQEAKKy8qIGhwcGExLjEgICBzdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqCQkJIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3N1Ym11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAgICAocjI2KQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAocjI1KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHIyNCkKKyAqCQkgICAgIG1waV9saW1iX3QgczJfbGltYikgICAgIChyMjMpCisgKgorICoKKyAqIFRoaXMgcnVucyBhdCAxMiBjeWNsZXMvbGltYiBvbiBhIFBBNzAwMC4gIFdpdGggdGhlIHVzZWQgaW5zdHJ1Y3Rpb25zLCBpdAorICogY2FuIG5vdCBiZWNvbWUgZmFzdGVyIGR1ZSB0byBkYXRhIGNhY2hlIGNvbnRlbnRpb24gYWZ0ZXIgYSBzdG9yZS4gIE9uIHRoZQorICogUEE3MTAwIGl0IHJ1bnMgYXQgMTEgY3ljbGVzL2xpbWIsIGFuZCB0aGF0IGNhbiBub3QgYmUgaW1wcm92ZWQgZWl0aGVyLAorICogc2luY2Ugb25seSB0aGUgeG1weXUgZG9lcyBub3QgbmVlZCB0aGUgaW50ZWdlciBwaXBlbGluZSwgc28gdGhlIG9ubHkKKyAqIGR1YWwtaXNzdWUgd2Ugd2lsbCBnZXQgYXJlIGFkZGMreG1weXUuICBVbnJvbGxpbmcgY291bGQgZ2FpbiBhIGN5Y2xlL2xpbWIKKyAqIG9uIHRoZSBQQTcxMDAuCisgKgorICogVGhlcmUgYXJlIHNvbWUgaWRlYXMgZGVzY3JpYmVkIGluIG11bDEuUyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBjb2RlIHRvby4KKyAqCisgKiBJdCBzZWVtcyBwb3NzaWJsZSB0byBtYWtlIHRoaXMgcnVuIGFzIGZhc3QgYXMgYWRkbXVsXzEsIGlmIHdlIHVzZQorICoJIHN1Yiw+Pj0gJXIyOSwlcjE5LCVyMjIKKyAqCSBhZGRpCSAxLCVyMjgsJXIyOAorICogYnV0IHRoYXQgcmVxdWlyZXMgcmV3b3JraW5nIHRoZSBoYWlyeSBzb2Z0d2FyZSBwaXBlbGluZS4uLgorICovCisKKwkubGV2ZWwJCTEuMQorCisJLmNvZGUKKwkuZXhwb3J0IAlfZ2NyeV9tcGloX3N1Ym11bF8xCisJLmxhYmVsCQlfZ2NyeV9tcGloX3N1Ym11bF8xCisJLnByb2MKKwkuY2FsbGluZm8JZnJhbWU9NjQsbm9fY2FsbHMKKwkuZW50cnkKKworCWxkbwkJNjQoJXIzMCksJXIzMAorCWZsZHdzLG1hCTQoJXIyNSksJWZyNQorCXN0dwkJJXIyMywtMTYoJXIzMCkJCTsgbW92ZSBzMl9saW1iIC4uLgorCWFkZGliLD0gCS0xLCVyMjQsTCRqdXN0X29uZV9saW1iCisJIGZsZHdzCQktMTYoJXIzMCksJWZyNAkJOyAuLi4gaW50byBmcjQKKwlhZGQJCSVyMCwlcjAsJXIwCQk7IGNsZWFyIGNhcnJ5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJZmxkd3MsbWEJNCglcjI1KSwlZnI3CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJeG1weXUJCSVmcjQsJWZyNywlZnI4CisJbGR3CQktMTIoJXIzMCksJXIxOQkJOyBsZWFzdCBzaWduaWZpY2FudCBsaW1iIGluIHByb2R1Y3QKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisKKwlmc3RkcwkJJWZyOCwtMTYoJXIzMCkKKwlhZGRpYiw9IAktMSwlcjI0LEwkZW5kCisJIGxkdwkJLTEyKCVyMzApLCVyMQorCis7IE1haW4gbG9vcAorCS5sYWJlbAlMJGxvb3AKKwlsZHdzCQkwKCVyMjYpLCVyMjkKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjUKKwlzdWIJCSVyMjksJXIxOSwlcjIyCisJYWRkCQklcjIyLCVyMTksJXIwCisJc3R3cyxtYSAJJXIyMiw0KCVyMjYpCisJYWRkYwkJJXIyOCwlcjEsJXIxOQorCXhtcHl1CQklZnI0LCVmcjUsJWZyNgorCWxkdwkJLTE2KCVyMzApLCVyMjgKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYWRkaWIsPD4JLTEsJXIyNCxMJGxvb3AKKwkgbGR3CQktMTIoJXIzMCksJXIxCisKKwkubGFiZWwJTCRlbmQKKwlsZHcJCTAoJXIyNiksJXIyOQorCXN1YgkJJXIyOSwlcjE5LCVyMjIKKwlhZGQJCSVyMjIsJXIxOSwlcjAKKwlzdHdzLG1hIAklcjIyLDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWxkd3MJCTAoJXIyNiksJXIyOQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlzdWIJCSVyMjksJXIxOSwlcjIyCisJYWRkCQklcjIyLCVyMTksJXIwCisJc3R3cyxtYSAJJXIyMiw0KCVyMjYpCisJYWRkYwkJJXIwLCVyMjgsJXIyOAorCWJ2CQkwKCVyMikKKwkgbGRvCQktNjQoJXIzMCksJXIzMAorCisJLmxhYmVsCUwkanVzdF9vbmVfbGltYgorCXhtcHl1CQklZnI0LCVmcjUsJWZyNgorCWxkdwkJMCglcjI2KSwlcjI5CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJbGR3CQktMTIoJXIzMCksJXIxCisJbGR3CQktMTYoJXIzMCksJXIyOAorCXN1YgkJJXIyOSwlcjEsJXIyMgorCWFkZAkJJXIyMiwlcjEsJXIwCisJc3R3CQklcjIyLDAoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKKwkuZXhpdAorCS5wcm9jZW5kCisKZGlmZiAtLWdpdCBhL21waS9ocHBhMS4xL3VkaXYtcXJubmQuUyBiL21waS9ocHBhMS4xL3VkaXYtcXJubmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjI4YjdiCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2hwcGExLjEvdWRpdi1xcm5uZC5TCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEhQLVBBICBfX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCisgKgkgIFRoaXMgdmVyc2lvbiBydW5zIGZhc3Qgb24gUEEgNzAwMCBhbmQgbGF0ZXIuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKworLyogSU5QVVQgUEFSQU1FVEVSUworICogICByZW1fcHRyCSAgIGdyMjYKKyAqICAgbjEgCSAgIGdyMjUKKyAqICAgbjAgCSAgIGdyMjQKKyAqICAgZAkJICAgZ3IyMworICovCisKKwkubGV2ZWwJCTEuMQorCisgICAgICAgIC5kYXRhCisJLmFsaWduCQk4CisJLmxhYmVsIEwkMDAwMAorCS53b3JkCQkweDQzZjAwMDAwCisJLndvcmQJCTB4MAorICAgICAgICAuY29kZQorCS5leHBvcnQgCV9fdWRpdl9xcm5uZAorCS5sYWJlbAkJX191ZGl2X3Fybm5kCisJLnByb2MKKwkuY2FsbGluZm8JZnJhbWU9NjQsbm9fY2FsbHMKKwkuZW50cnkKKwlsZG8JCTY0KCVyMzApLCVyMzAKKworCXN0d3MJCSVyMjUsLTE2KDAsJXIzMCkJOyBuX2hpCisJc3R3cwkJJXIyNCwtMTIoMCwlcjMwKQk7IG5fbG8KKyAgICAgICAgc3R3ICAgICAgICAgICAgICVyMTksLTMyKCVyMzApCisgICAgICAgIGFkZGlsICAgICAgICAgICBMVCVMJDAwMDAsJXIxOQorICAgICAgICBsZHcgICAgICAgICAgICAgUlQlTCQwMDAwKCVyMSksJXIxCisJZmxkZHMJCS0xNigwLCVyMzApLCVmcjUKKwlzdHdzCQklcjIzLC0xMigwLCVyMzApCisJY29taWIsPD0JMCwlcjI1LEwkMQorCWZjbnZ4ZixkYmwsZGJsCSVmcjUsJWZyNQorICAgICAgICBmbGRkcyAgICAgICAgICAgMCgwLCVyMSksJWZyNAorCWZhZGQsZGJsCSVmcjQsJWZyNSwlZnI1CisJLmxhYmVsCUwkMQorCWZjcHksc2dsCSVmcjAsJWZyNkwKKwlmbGR3cwkJLTEyKDAsJXIzMCksJWZyNlIKKwlmY252eGYsZGJsLGRibAklZnI2LCVmcjQKKworCWZkaXYsZGJsCSVmcjUsJWZyNCwlZnI1CisKKwlmY252ZngsZGJsLGRibAklZnI1LCVmcjQKKwlmc3R3cwkJJWZyNFIsLTE2KCVyMzApCisJeG1weXUJCSVmcjRSLCVmcjZSLCVmcjYKKwlsZHdzCQktMTYoJXIzMCksJXIyOAorCWZzdGRzCQklZnI2LC0xNigwLCVyMzApCisJbGR3cwkJLTEyKDAsJXIzMCksJXIyMQorCWxkd3MJCS0xNigwLCVyMzApLCVyMjAKKwlzdWIJCSVyMjQsJXIyMSwlcjIyCisgICAgICAgIHN1YmIgICAgICAgICAgICAlcjI1LCVyMjAsJXIxCisgICAgICAgIGNvbWliLD0gICAgICAgICAwLCVyMSxMJDIKKwlsZG8JCS02NCglcjMwKSwlcjMwCisKKwlhZGQJCSVyMjIsJXIyMywlcjIyCisJbGRvCQktMSglcjI4KSwlcjI4CisJLmxhYmVsCUwkMgorCWJ2CQkwKCVyMikKKwlzdHdzCQklcjIyLDAoMCwlcjI2KQorCisJLmV4aXQKKwkucHJvY2VuZAorCmRpZmYgLS1naXQgYS9tcGkvaTM4Ni9NYW5pZmVzdCBiL21waS9pMzg2L01hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmJjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTM4Ni9NYW5pZmVzdApAQCAtMCwwICsxLDI4IEBACisjIE1hbmlmZXN0IC0gY2hlY2tzdW1zIAorIyBDb3B5cmlnaHQgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKworbXBpaC1hZGQxLlMKK21waWgtbXVsMS5TCittcGloLW11bDIuUworbXBpaC1tdWwzLlMKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKK21waWgtc3ViMS5TCitzeW50YXguaAorJG5hbWVzJCBpUUNWQXdVQVArTG1PVEVBbnA4MzJTLzdBUUpabWdRQTErR0lsN3JYaUVZMDB5NXhEMmtHNUxtMlFENmM5YUJNRThoVGw4MTJPRWNqMHVsL1FTcGR2OEUyTkVLb29pZnI0U2lMVmhFVmZMTmFMcUFnTjNjSXN0dG4zclJYMy9wTUM1SndTS0hESlBzVWJwTjl0emI1ZHIyWUM5R0c5bTh4bmdBUXJOMTFJUVBuR2Z2RkxKSytvRG5FTUlBZUhEcE9uWDlOZVFQREFRQT09Ym5PeQpkaWZmIC0tZ2l0IGEvbXBpL2kzODYvZGlzdGZpbGVzIGIvbXBpL2kzODYvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjk5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTM4Ni9kaXN0ZmlsZXMKQEAgLTAsMCArMSwxMCBAQAorTWFuaWZlc3QKK21waWgtYWRkMS5TCittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCittcGloLWxzaGlmdC5TCittcGloLXJzaGlmdC5TCittcGloLXN1YjEuUworc3ludGF4LmgKKwpkaWZmIC0tZ2l0IGEvbXBpL2kzODYvbXBpaC1hZGQxLlMgYi9tcGkvaTM4Ni9tcGloLWFkZDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJiMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2kzODYvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSwxMTYgQEAKKy8qIGk4MDM4NiBhZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfYWRkX24oIG1waV9wdHJfdCByZXNfcHRyLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKHNwICsgMTIpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoc3AgKyAxNikKKyAqLworCisudGV4dAorCUFMSUdOICgzKQorCS5nbG9ibCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkX24pCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkX246KQorCXB1c2hsICVlZGkKKwlwdXNobCAlZXNpCisKKwltb3ZsIDEyKCVlc3ApLCVlZGkJCS8qIHJlc19wdHIgKi8KKwltb3ZsIDE2KCVlc3ApLCVlc2kJCS8qIHMxX3B0ciAqLworCW1vdmwgMjAoJWVzcCksJWVkeAkJLyogczJfcHRyICovCisJbW92bCAyNCglZXNwKSwlZWN4CQkvKiBzaXplICovCisKKwltb3ZsCSVlY3gsJWVheAorCXNocmwJJDMsJWVjeCAJCS8qIGNvbXB1dGUgY291bnQgZm9yIHVucm9sbGVkIGxvb3AgKi8KKwluZWdsCSVlYXgKKwlhbmRsCSQ3LCVlYXggCQkvKiBnZXQgaW5kZXggd2hlcmUgdG8gc3RhcnQgbG9vcCAqLworCWp6CUxvb3AJCQkvKiBuZWNlc3Nhcnkgc3BlY2lhbCBjYXNlIGZvciAwICovCisJaW5jbAklZWN4CQkJLyogYWRqdXN0IGxvb3AgY291bnQgKi8KKwlzaGxsCSQyLCVlYXggCQkvKiBhZGp1c3RtZW50IGZvciBwb2ludGVycy4uLiAqLworCXN1YmwJJWVheCwlZWRpCQkvKiAuLi4gc2luY2UgdGhleSBhcmUgb2Zmc2V0IC4uLiAqLworCXN1YmwJJWVheCwlZXNpCQkvKiAuLi4gYnkgYSBjb25zdGFudCB3aGVuIHdlIC4uLiAqLworCXN1YmwJJWVheCwlZWR4CQkvKiAuLi4gZW50ZXIgdGhlIGxvb3AgKi8KKwlzaHJsCSQyLCVlYXggCQkvKiByZXN0b3JlIHByZXZpb3VzIHZhbHVlICovCisjaWZkZWYgUElDCisvKiBDYWxjdWxhdGUgc3RhcnQgYWRkcmVzcyBpbiBsb29wIGZvciBQSUMuICBEdWUgdG8gbGltaXRhdGlvbnMgaW4gc29tZQorICAgYXNzZW1ibGVycywgTG9vcC1MMC0zIGNhbm5vdCBiZSBwdXQgaW50byB0aGUgbGVhbCAqLworCWNhbGwJTDAKK0wwOglsZWFsCSglZWF4LCVlYXgsOCksJWVheAorCWFkZGwJKCVlc3ApLCVlYXgKKwlhZGRsCSQoTG9vcC1MMC0zKSwlZWF4CisJYWRkbAkkNCwlZXNwCisjZWxzZQorLyogQ2FsY3VsYXRlIHN0YXJ0IGFkZHJlc3MgaW4gbG9vcCBmb3Igbm9uLVBJQy4gICovCisJbGVhbAkoTG9vcCAtIDMpKCVlYXgsJWVheCw4KSwlZWF4CisjZW5kaWYKKwlqbXAJKiVlYXgJCQkvKiBqdW1wIGludG8gbG9vcCAqLworCUFMSUdOICgzKQorTG9vcDoJbW92bAkoJWVzaSksJWVheAorCWFkY2wJKCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsKCVlZGkpCisJbW92bAk0KCVlc2kpLCVlYXgKKwlhZGNsCTQoJWVkeCksJWVheAorCW1vdmwJJWVheCw0KCVlZGkpCisJbW92bAk4KCVlc2kpLCVlYXgKKwlhZGNsCTgoJWVkeCksJWVheAorCW1vdmwJJWVheCw4KCVlZGkpCisJbW92bAkxMiglZXNpKSwlZWF4CisJYWRjbAkxMiglZWR4KSwlZWF4CisJbW92bAklZWF4LDEyKCVlZGkpCisJbW92bAkxNiglZXNpKSwlZWF4CisJYWRjbAkxNiglZWR4KSwlZWF4CisJbW92bAklZWF4LDE2KCVlZGkpCisJbW92bAkyMCglZXNpKSwlZWF4CisJYWRjbAkyMCglZWR4KSwlZWF4CisJbW92bAklZWF4LDIwKCVlZGkpCisJbW92bAkyNCglZXNpKSwlZWF4CisJYWRjbAkyNCglZWR4KSwlZWF4CisJbW92bAklZWF4LDI0KCVlZGkpCisJbW92bAkyOCglZXNpKSwlZWF4CisJYWRjbAkyOCglZWR4KSwlZWF4CisJbW92bAklZWF4LDI4KCVlZGkpCisJbGVhbAkzMiglZWRpKSwlZWRpCisJbGVhbAkzMiglZXNpKSwlZXNpCisJbGVhbAkzMiglZWR4KSwlZWR4CisJZGVjbAklZWN4CisJam56CUxvb3AKKworCXNiYmwJJWVheCwlZWF4CisJbmVnbAklZWF4CisKKwlwb3BsICVlc2kKKwlwb3BsICVlZGkKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL2kzODYvbXBpaC1sc2hpZnQuUyBiL21waS9pMzg2L21waWgtbHNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4ZWQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL21waS9pMzg2L21waWgtbHNoaWZ0LlMKQEAgLTAsMCArMSw5NCBAQAorLyogaTgwMzg2ICAgbHNoaWZ0CisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2xzaGlmdCggbXBpX3B0cl90IHdwLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCB1cCwJKHNwICsgOCkKKyAqCQkgICBtcGlfc2l6ZV90IHVzaXplLAkoc3AgKyAxMikKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShzcCArIDE2KQorICovCisKKy50ZXh0CisJQUxJR04gKDMpCisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9sc2hpZnQpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbHNoaWZ0OikKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKworCW1vdmwJMTYoJWVzcCksJWVkaQkJLyogcmVzX3B0ciAqLworCW1vdmwJMjAoJWVzcCksJWVzaQkJLyogc19wdHIgKi8KKwltb3ZsCTI0KCVlc3ApLCVlZHgJCS8qIHNpemUgKi8KKwltb3ZsCTI4KCVlc3ApLCVlY3gJCS8qIGNudCAqLworCisJc3VibAkkNCwlZXNpIAkJLyogYWRqdXN0IHNfcHRyICovCisKKwltb3ZsCSglZXNpLCVlZHgsNCksJWVieAkvKiByZWFkIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiAqLworCXhvcmwJJWVheCwlZWF4CisJc2hsZGwJJWNsLCVlYngsJWVheAkJLyogY29tcHV0ZSBjYXJyeSBsaW1iICovCisJZGVjbAklZWR4CisJanoJTGVuZAorCXB1c2hsCSVlYXgJCQkvKiBwdXNoIGNhcnJ5IGxpbWIgb250byBzdGFjayAqLworCXRlc3RiCSQxLCVkbAorCWpueglMMQkJCS8qIGVudGVyIGxvb3AgaW4gdGhlIG1pZGRsZSAqLworCW1vdmwJJWVieCwlZWF4CisKKwlBTElHTiAoMykKK0xvb3A6CW1vdmwJKCVlc2ksJWVkeCw0KSwlZWJ4CS8qIGxvYWQgbmV4dCBsb3dlciBsaW1iICovCisJc2hsZGwJJWNsLCVlYngsJWVheAkJLyogY29tcHV0ZSByZXN1bHQgbGltYiAqLworCW1vdmwJJWVheCwoJWVkaSwlZWR4LDQpCS8qIHN0b3JlIGl0ICovCisJZGVjbAklZWR4CitMMToJbW92bAkoJWVzaSwlZWR4LDQpLCVlYXgKKwlzaGxkbAklY2wsJWVheCwlZWJ4CisJbW92bAklZWJ4LCglZWRpLCVlZHgsNCkKKwlkZWNsCSVlZHgKKwlqbnoJTG9vcAorCisJc2hsbAklY2wsJWVheAkJLyogY29tcHV0ZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iICovCisJbW92bAklZWF4LCglZWRpKQkJLyogc3RvcmUgaXQgKi8KKworCXBvcGwJJWVheAkJCS8qIHBvcCBjYXJyeSBsaW1iICovCisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworTGVuZDoJc2hsbAklY2wsJWVieAkJLyogY29tcHV0ZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iICovCisJbW92bAklZWJ4LCglZWRpKQkJLyogc3RvcmUgaXQgKi8KKworCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCmRpZmYgLS1naXQgYS9tcGkvaTM4Ni9tcGloLW11bDEuUyBiL21waS9pMzg2L21waWgtbXVsMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzYwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTM4Ni9tcGloLW11bDEuUwpAQCAtMCwwICsxLDg0IEBACisvKiBpODAzODYgbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKKyAqCQkJIHRoZSByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsCShzcCArIDQpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgbXBpX3NpemVfdCBzMV9zaXplLAkoc3AgKyAxMikKKyAqCQkgIG1waV9saW1iX3QgczJfbGltYikJKHNwICsgMTYpCisgKi8KKworI2RlZmluZSByZXNfcHRyIGVkaQorI2RlZmluZSBzMV9wdHIJZXNpCisjZGVmaW5lIHNpemUJZWN4CisjZGVmaW5lIHMyX2xpbWIgZWJwCisKKwlURVhUCisJQUxJR04gKDMpCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xOikKKworCUlOU04xKHB1c2gsbAksUihlZGkpKQorCUlOU04xKHB1c2gsbAksUihlc2kpKQorCUlOU04xKHB1c2gsbAksUihlYngpKQorCUlOU04xKHB1c2gsbAksUihlYnApKQorCisJSU5TTjIobW92LGwJLFIocmVzX3B0ciksTUVNX0RJU1AoZXNwLDIwKSkKKwlJTlNOMihtb3YsbAksUihzMV9wdHIpLE1FTV9ESVNQKGVzcCwyNCkpCisJSU5TTjIobW92LGwJLFIoc2l6ZSksTUVNX0RJU1AoZXNwLDI4KSkKKwlJTlNOMihtb3YsbAksUihzMl9saW1iKSxNRU1fRElTUChlc3AsMzIpKQorCisJSU5TTjIobGVhLGwJLFIocmVzX3B0ciksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSkKKwlJTlNOMihsZWEsbAksUihzMV9wdHIpLE1FTV9JTkRFWChzMV9wdHIsc2l6ZSw0KSkKKwlJTlNOMShuZWcsbAksUihzaXplKSkKKwlJTlNOMih4b3IsbAksUihlYngpLFIoZWJ4KSkKKwlBTElHTiAoMykKK0xvb3A6CisJSU5TTjIobW92LGwJLFIoZWF4KSxNRU1fSU5ERVgoczFfcHRyLHNpemUsNCkpCisJSU5TTjEobXVsLGwJLFIoczJfbGltYikpCisJSU5TTjIoYWRkLGwJLFIoZWF4KSxSKGVieCkpCisJSU5TTjIobW92LGwJLE1FTV9JTkRFWChyZXNfcHRyLHNpemUsNCksUihlYXgpKQorCUlOU04yKGFkYyxsCSxSKGVkeCksJDApCisJSU5TTjIobW92LGwJLFIoZWJ4KSxSKGVkeCkpCisKKwlJTlNOMShpbmMsbAksUihzaXplKSkKKwlJTlNOMShqbnosCSxMb29wKQorCUlOU04yKG1vdixsCSxSKGVheCksUihlYngpKQorCisJSU5TTjEocG9wLGwJLFIoZWJwKSkKKwlJTlNOMShwb3AsbAksUihlYngpKQorCUlOU04xKHBvcCxsCSxSKGVzaSkpCisJSU5TTjEocG9wLGwJLFIoZWRpKSkKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL2kzODYvbXBpaC1tdWwyLlMgYi9tcGkvaTM4Ni9tcGloLW11bDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk0ZTExCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2kzODYvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSw4NiBAQAorLyogaTgwMzg2IGFkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZAorICoJCSAgICAgIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9hZGRtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgICAgKHNwICsgNCkKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHNwICsgOCkKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChzcCArIDEyKQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHNwICsgMTYpCisgKi8KKworI2RlZmluZSByZXNfcHRyIGVkaQorI2RlZmluZSBzMV9wdHIJZXNpCisjZGVmaW5lIHNpemUJZWN4CisjZGVmaW5lIHMyX2xpbWIgZWJwCisKKwlURVhUCisJQUxJR04gKDMpCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZG11bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZG11bF8xOikKKworCUlOU04xKHB1c2gsbAksUihlZGkpKQorCUlOU04xKHB1c2gsbAksUihlc2kpKQorCUlOU04xKHB1c2gsbAksUihlYngpKQorCUlOU04xKHB1c2gsbAksUihlYnApKQorCisJSU5TTjIobW92LGwJLFIocmVzX3B0ciksTUVNX0RJU1AoZXNwLDIwKSkKKwlJTlNOMihtb3YsbAksUihzMV9wdHIpLE1FTV9ESVNQKGVzcCwyNCkpCisJSU5TTjIobW92LGwJLFIoc2l6ZSksTUVNX0RJU1AoZXNwLDI4KSkKKwlJTlNOMihtb3YsbAksUihzMl9saW1iKSxNRU1fRElTUChlc3AsMzIpKQorCisJSU5TTjIobGVhLGwJLFIocmVzX3B0ciksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSkKKwlJTlNOMihsZWEsbAksUihzMV9wdHIpLE1FTV9JTkRFWChzMV9wdHIsc2l6ZSw0KSkKKwlJTlNOMShuZWcsbAksUihzaXplKSkKKwlJTlNOMih4b3IsbAksUihlYngpLFIoZWJ4KSkKKwlBTElHTiAoMykKK0xvb3A6CisJSU5TTjIobW92LGwJLFIoZWF4KSxNRU1fSU5ERVgoczFfcHRyLHNpemUsNCkpCisJSU5TTjEobXVsLGwJLFIoczJfbGltYikpCisJSU5TTjIoYWRkLGwJLFIoZWF4KSxSKGVieCkpCisJSU5TTjIoYWRjLGwJLFIoZWR4KSwkMCkKKwlJTlNOMihhZGQsbAksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSxSKGVheCkpCisJSU5TTjIoYWRjLGwJLFIoZWR4KSwkMCkKKwlJTlNOMihtb3YsbAksUihlYngpLFIoZWR4KSkKKworCUlOU04xKGluYyxsCSxSKHNpemUpKQorCUlOU04xKGpueiwJLExvb3ApCisJSU5TTjIobW92LGwJLFIoZWF4KSxSKGVieCkpCisKKwlJTlNOMShwb3AsbAksUihlYnApKQorCUlOU04xKHBvcCxsCSxSKGVieCkpCisJSU5TTjEocG9wLGwJLFIoZXNpKSkKKwlJTlNOMShwb3AsbAksUihlZGkpKQorCXJldAorCmRpZmYgLS1naXQgYS9tcGkvaTM4Ni9tcGloLW11bDMuUyBiL21waS9pMzg2L21waWgtbXVsMy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjIwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTM4Ni9tcGloLW11bDMuUwpAQCAtMCwwICsxLDg2IEBACisvKiBpODAzODYgc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgYWRkCisgKgkJICAgICAgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9zdWJtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgICAgKHNwICsgNCkKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHNwICsgOCkKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChzcCArIDEyKQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHNwICsgMTYpCisgKi8KKworI2RlZmluZSByZXNfcHRyIGVkaQorI2RlZmluZSBzMV9wdHIJZXNpCisjZGVmaW5lIHNpemUJZWN4CisjZGVmaW5lIHMyX2xpbWIgZWJwCisKKwlURVhUCisJQUxJR04gKDMpCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xOikKKworCUlOU04xKHB1c2gsbAksUihlZGkpKQorCUlOU04xKHB1c2gsbAksUihlc2kpKQorCUlOU04xKHB1c2gsbAksUihlYngpKQorCUlOU04xKHB1c2gsbAksUihlYnApKQorCisJSU5TTjIobW92LGwJLFIocmVzX3B0ciksTUVNX0RJU1AoZXNwLDIwKSkKKwlJTlNOMihtb3YsbAksUihzMV9wdHIpLE1FTV9ESVNQKGVzcCwyNCkpCisJSU5TTjIobW92LGwJLFIoc2l6ZSksTUVNX0RJU1AoZXNwLDI4KSkKKwlJTlNOMihtb3YsbAksUihzMl9saW1iKSxNRU1fRElTUChlc3AsMzIpKQorCisJSU5TTjIobGVhLGwJLFIocmVzX3B0ciksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSkKKwlJTlNOMihsZWEsbAksUihzMV9wdHIpLE1FTV9JTkRFWChzMV9wdHIsc2l6ZSw0KSkKKwlJTlNOMShuZWcsbAksUihzaXplKSkKKwlJTlNOMih4b3IsbAksUihlYngpLFIoZWJ4KSkKKwlBTElHTiAoMykKK0xvb3A6CisJSU5TTjIobW92LGwJLFIoZWF4KSxNRU1fSU5ERVgoczFfcHRyLHNpemUsNCkpCisJSU5TTjEobXVsLGwJLFIoczJfbGltYikpCisJSU5TTjIoYWRkLGwJLFIoZWF4KSxSKGVieCkpCisJSU5TTjIoYWRjLGwJLFIoZWR4KSwkMCkKKwlJTlNOMihzdWIsbAksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSxSKGVheCkpCisJSU5TTjIoYWRjLGwJLFIoZWR4KSwkMCkKKwlJTlNOMihtb3YsbAksUihlYngpLFIoZWR4KSkKKworCUlOU04xKGluYyxsCSxSKHNpemUpKQorCUlOU04xKGpueiwJLExvb3ApCisJSU5TTjIobW92LGwJLFIoZWF4KSxSKGVieCkpCisKKwlJTlNOMShwb3AsbAksUihlYnApKQorCUlOU04xKHBvcCxsCSxSKGVieCkpCisJSU5TTjEocG9wLGwJLFIoZXNpKSkKKwlJTlNOMShwb3AsbAksUihlZGkpKQorCXJldAorCmRpZmYgLS1naXQgYS9tcGkvaTM4Ni9tcGloLXJzaGlmdC5TIGIvbXBpL2kzODYvbXBpaC1yc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTIwZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2kzODYvbXBpaC1yc2hpZnQuUwpAQCAtMCwwICsxLDk3IEBACisvKiBpODAzODYgICByc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9yc2hpZnQoIG1waV9wdHJfdCB3cCwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShzcCArIDgpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHNwICsgMTIpCisgKgkJICAgdW5zaWduZWQgY250KQkoc3AgKyAxNikKKyAqLworCisudGV4dAorCUFMSUdOICgzKQorCS5nbG9ibCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfcnNoaWZ0KQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdDopCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwlwdXNobAklZWJ4CisKKwltb3ZsCTE2KCVlc3ApLCVlZGkJCS8qIHdwICovCisJbW92bAkyMCglZXNwKSwlZXNpCQkvKiB1cCAqLworCW1vdmwJMjQoJWVzcCksJWVkeAkJLyogdXNpemUgKi8KKwltb3ZsCTI4KCVlc3ApLCVlY3gJCS8qIGNudCAqLworCisJbGVhbAktNCglZWRpLCVlZHgsNCksJWVkaQorCWxlYWwJKCVlc2ksJWVkeCw0KSwlZXNpCisJbmVnbAklZWR4CisKKwltb3ZsCSglZXNpLCVlZHgsNCksJWVieAkvKiByZWFkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgKi8KKwl4b3JsCSVlYXgsJWVheAorCXNocmRsCSVjbCwlZWJ4LCVlYXgJCS8qIGNvbXB1dGUgY2FycnkgbGltYiAqLworCWluY2wJJWVkeAorCWp6CUxlbmQyCisJcHVzaGwJJWVheAkJCS8qIHB1c2ggY2FycnkgbGltYiBvbnRvIHN0YWNrICovCisJdGVzdGIJJDEsJWRsCisJam56CUwyCQkJLyogZW50ZXIgbG9vcCBpbiB0aGUgbWlkZGxlICovCisJbW92bAklZWJ4LCVlYXgKKworCUFMSUdOICgzKQorTG9vcDI6CSBtb3ZsCSAoJWVzaSwlZWR4LDQpLCVlYngJIC8qIGxvYWQgbmV4dCBoaWdoZXIgbGltYiAqLworCXNocmRsCSVjbCwlZWJ4LCVlYXgJCS8qIGNvbXB1dGUgcmVzdWx0IGxpbWIgKi8KKwltb3ZsCSVlYXgsKCVlZGksJWVkeCw0KQkvKiBzdG9yZSBpdCAqLworCWluY2wJJWVkeAorTDI6CW1vdmwJKCVlc2ksJWVkeCw0KSwlZWF4CisJc2hyZGwJJWNsLCVlYXgsJWVieAorCW1vdmwJJWVieCwoJWVkaSwlZWR4LDQpCisJaW5jbAklZWR4CisJam56CUxvb3AyCisKKwlzaHJsCSVjbCwlZWF4CQkvKiBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiAqLworCW1vdmwJJWVheCwoJWVkaSkJCS8qIHN0b3JlIGl0ICovCisKKwlwb3BsCSVlYXgJCQkvKiBwb3AgY2FycnkgbGltYiAqLworCisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKK0xlbmQyOglzaHJsCSVjbCwlZWJ4CQkvKiBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiAqLworCW1vdmwJJWVieCwoJWVkaSkJCS8qIHN0b3JlIGl0ICovCisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL2kzODYvbXBpaC1zdWIxLlMgYi9tcGkvaTM4Ni9tcGloLXN1YjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQ3ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2kzODYvbXBpaC1zdWIxLlMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIGk4MDM4NiBzdWJfbiAtLSBTdWIgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfc3ViX24oIG1waV9wdHJfdCByZXNfcHRyLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKHNwICsgMTIpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoc3AgKyAxNikKKyAqLworCisKKy50ZXh0CisJQUxJR04gKDMpCisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbikKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbjopCisJcHVzaGwgJWVkaQorCXB1c2hsICVlc2kKKworCW1vdmwgMTIoJWVzcCksJWVkaQkJLyogcmVzX3B0ciAqLworCW1vdmwgMTYoJWVzcCksJWVzaQkJLyogczFfcHRyICovCisJbW92bCAyMCglZXNwKSwlZWR4CQkvKiBzMl9wdHIgKi8KKwltb3ZsIDI0KCVlc3ApLCVlY3gJCS8qIHNpemUgKi8KKworCW1vdmwJJWVjeCwlZWF4CisJc2hybAkkMywlZWN4IAkJLyogY29tcHV0ZSBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcCAqLworCW5lZ2wJJWVheAorCWFuZGwJJDcsJWVheCAJCS8qIGdldCBpbmRleCB3aGVyZSB0byBzdGFydCBsb29wICovCisJanoJTG9vcAkJCS8qIG5lY2Vzc2FyeSBzcGVjaWFsIGNhc2UgZm9yIDAgKi8KKwlpbmNsCSVlY3gJCQkvKiBhZGp1c3QgbG9vcCBjb3VudCAqLworCXNobGwJJDIsJWVheCAJCS8qIGFkanVzdG1lbnQgZm9yIHBvaW50ZXJzLi4uICovCisJc3VibAklZWF4LCVlZGkJCS8qIC4uLiBzaW5jZSB0aGV5IGFyZSBvZmZzZXQgLi4uICovCisJc3VibAklZWF4LCVlc2kJCS8qIC4uLiBieSBhIGNvbnN0YW50IHdoZW4gd2UgLi4uICovCisJc3VibAklZWF4LCVlZHgJCS8qIC4uLiBlbnRlciB0aGUgbG9vcCAqLworCXNocmwJJDIsJWVheCAJCS8qIHJlc3RvcmUgcHJldmlvdXMgdmFsdWUgKi8KKyNpZmRlZiBQSUMKKy8qIENhbGN1bGF0ZSBzdGFydCBhZGRyZXNzIGluIGxvb3AgZm9yIFBJQy4gIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBzb21lCisgICBhc3NlbWJsZXJzLCBMb29wLUwwLTMgY2Fubm90IGJlIHB1dCBpbnRvIHRoZSBsZWFsICovCisJY2FsbAlMMAorTDA6CWxlYWwJKCVlYXgsJWVheCw4KSwlZWF4CisJYWRkbAkoJWVzcCksJWVheAorCWFkZGwJJChMb29wLUwwLTMpLCVlYXgKKwlhZGRsCSQ0LCVlc3AKKyNlbHNlCisvKiBDYWxjdWxhdGUgc3RhcnQgYWRkcmVzcyBpbiBsb29wIGZvciBub24tUElDLiAgKi8KKwlsZWFsCShMb29wIC0gMykoJWVheCwlZWF4LDgpLCVlYXgKKyNlbmRpZgorCWptcAkqJWVheAkJCS8qIGp1bXAgaW50byBsb29wICovCisJQUxJR04gKDMpCitMb29wOgltb3ZsCSglZXNpKSwlZWF4CisJc2JibAkoJWVkeCksJWVheAorCW1vdmwJJWVheCwoJWVkaSkKKwltb3ZsCTQoJWVzaSksJWVheAorCXNiYmwJNCglZWR4KSwlZWF4CisJbW92bAklZWF4LDQoJWVkaSkKKwltb3ZsCTgoJWVzaSksJWVheAorCXNiYmwJOCglZWR4KSwlZWF4CisJbW92bAklZWF4LDgoJWVkaSkKKwltb3ZsCTEyKCVlc2kpLCVlYXgKKwlzYmJsCTEyKCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsMTIoJWVkaSkKKwltb3ZsCTE2KCVlc2kpLCVlYXgKKwlzYmJsCTE2KCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsMTYoJWVkaSkKKwltb3ZsCTIwKCVlc2kpLCVlYXgKKwlzYmJsCTIwKCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsMjAoJWVkaSkKKwltb3ZsCTI0KCVlc2kpLCVlYXgKKwlzYmJsCTI0KCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsMjQoJWVkaSkKKwltb3ZsCTI4KCVlc2kpLCVlYXgKKwlzYmJsCTI4KCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsMjgoJWVkaSkKKwlsZWFsCTMyKCVlZGkpLCVlZGkKKwlsZWFsCTMyKCVlc2kpLCVlc2kKKwlsZWFsCTMyKCVlZHgpLCVlZHgKKwlkZWNsCSVlY3gKKwlqbnoJTG9vcAorCisJc2JibAklZWF4LCVlYXgKKwluZWdsCSVlYXgKKworCXBvcGwgJWVzaQorCXBvcGwgJWVkaQorCXJldAorCmRpZmYgLS1naXQgYS9tcGkvaTM4Ni9zeW50YXguaCBiL21waS9pMzg2L3N5bnRheC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZWRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTM4Ni9zeW50YXguaApAQCAtMCwwICsxLDY4IEBACisvKiBzeW50YXguaCAtLSBEZWZpbml0aW9ucyBmb3IgeDg2IHN5bnRheCB2YXJpYXRpb25zLgorICoKKyAqICAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NSwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjdW5kZWYgQUxJR04KKworI2lmIGRlZmluZWQgKEJTRF9TWU5UQVgpIHx8IGRlZmluZWQgKEVMRl9TWU5UQVgpCisjZGVmaW5lIFIocikgJXIKKyNkZWZpbmUgTUVNKGJhc2UpKGJhc2UpCisjZGVmaW5lIE1FTV9ESVNQKGJhc2UsZGlzcGxhY2VtZW50KWRpc3BsYWNlbWVudChSKGJhc2UpKQorI2RlZmluZSBNRU1fSU5ERVgoYmFzZSxpbmRleCxzaXplKShSKGJhc2UpLFIoaW5kZXgpLHNpemUpCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgSU5TTjEobW5lbW9uaWMsc2l6ZV9zdWZmaXgsZHN0KW1uZW1vbmljIyNzaXplX3N1ZmZpeCBkc3QKKyNkZWZpbmUgSU5TTjIobW5lbW9uaWMsc2l6ZV9zdWZmaXgsZHN0LHNyYyltbmVtb25pYyMjc2l6ZV9zdWZmaXggc3JjLGRzdAorI2Vsc2UKKyNkZWZpbmUgSU5TTjEobW5lbW9uaWMsc2l6ZV9zdWZmaXgsZHN0KW1uZW1vbmljLyoqL3NpemVfc3VmZml4IGRzdAorI2RlZmluZSBJTlNOMihtbmVtb25pYyxzaXplX3N1ZmZpeCxkc3Qsc3JjKW1uZW1vbmljLyoqL3NpemVfc3VmZml4IHNyYyxkc3QKKyNlbmRpZgorI2RlZmluZSBURVhUIC50ZXh0CisjaWYgZGVmaW5lZCAoQlNEX1NZTlRBWCkKKyNkZWZpbmUgQUxJR04obG9nKSAuYWxpZ24gbG9nCisjZW5kaWYKKyNpZiBkZWZpbmVkIChFTEZfU1lOVEFYKQorI2RlZmluZSBBTElHTihsb2cpIC5hbGlnbiAxPDwobG9nKQorI2VuZGlmCisjZGVmaW5lIEdMT0JMIC5nbG9ibAorI2VuZGlmCisKKyNpZmRlZiBJTlRFTF9TWU5UQVgKKyNkZWZpbmUgUihyKSByCisjZGVmaW5lIE1FTShiYXNlKVtiYXNlXQorI2RlZmluZSBNRU1fRElTUChiYXNlLGRpc3BsYWNlbWVudClbYmFzZSsoZGlzcGxhY2VtZW50KV0KKyNkZWZpbmUgTUVNX0lOREVYKGJhc2UsaW5kZXgsc2l6ZSlbYmFzZStpbmRleCpzaXplXQorI2RlZmluZSBJTlNOMShtbmVtb25pYyxzaXplX3N1ZmZpeCxkc3QpbW5lbW9uaWMgZHN0CisjZGVmaW5lIElOU04yKG1uZW1vbmljLHNpemVfc3VmZml4LGRzdCxzcmMpbW5lbW9uaWMgZHN0LHNyYworI2RlZmluZSBURVhUIC50ZXh0CisjZGVmaW5lIEFMSUdOKGxvZykgLmFsaWduIGxvZworI2RlZmluZSBHTE9CTCAuZ2xvYmwKKyNlbmRpZgorCisjaWZkZWYgWDg2X0JST0tFTl9BTElHTgorI3VuZGVmIEFMSUdOCisjZGVmaW5lIEFMSUdOKGxvZykgLmFsaWduIGxvZywweDkwCisjZW5kaWYKZGlmZiAtLWdpdCBhL21waS9pNTg2L01hbmlmZXN0IGIvbXBpL2k1ODYvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL21waS9pNTg2L01hbmlmZXN0CkBAIC0wLDAgKzEsMjcgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCittcGloLWFkZDEuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworbXBpaC1zdWIxLlMKKyRuYW1lcyQgaVFDVkF3VUFQK0xtUURFQW5wODMyUy83QVFLQ21nUUFoRytFN1gwS0I0cWRWZjNzTWI2UXIrSXY1SmxlaHpvdWIvNXZ4VFJnZVBLelJ1T0hpZENuVHpTU295ekErK1VjSHJPakhRUURNc1huTzZQcXBTMWQvVEtreGpuR043ckU4bXZNWWxGQVQ4UnNhd1RvelNmaDE0bUN6STBIVERiYUtMOVo4cGNNSnRhZEIzWHFBdXFXSk5POGt5RUNKRnd1cnQzRFJXWFNXUzg9PVJ1ZzUKZGlmZiAtLWdpdCBhL21waS9pNTg2L1JFQURNRSBiL21waS9pNTg2L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNiMDgyCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2k1ODYvUkVBRE1FCkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBJbnRlbCBQZW50aXVtCitwcm9jZXNzb3JzLgorCitSRUxFVkFOVCBPUFRJTUlaQVRJT04gSVNTVUVTCisKKzEuIFBlbnRpdW0gZG9lc24ndCBhbGxvY2F0ZSBjYWNoZSBsaW5lcyBvbiB3cml0ZXMsIHVubGlrZSBtb3N0IG90aGVyIG1vZGVybgorcHJvY2Vzc29ycy4gIFNpbmNlIHRoZSBmdW5jdGlvbnMgaW4gdGhlIG1wbiBjbGFzcyBkbyBhcnJheSB3cml0ZXMsIHdlIGhhdmUgdG8KK2hhbmRsZSBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lcyBieSByZWFkaW5nIGEgd29yZCBmcm9tIGl0IGluIHRoZQorbG9vcHMsIHRvIGFjaGlldmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UuCisKKzIuIFBhaXJpbmcgb2YgbWVtb3J5IG9wZXJhdGlvbnMgcmVxdWlyZXMgdGhhdCB0aGUgdHdvIGlzc3VlZCBvcGVyYXRpb25zIHJlZmVyCit0byBkaWZmZXJlbnQgY2FjaGUgYmFua3MuICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGluc3VyZSB0aGlzIGlzIHRvIHJlYWQvd3JpdGUKK3R3byB3b3JkcyBmcm9tIHRoZSBzYW1lIG9iamVjdC4gIElmIHdlIG1ha2Ugb3BlcmF0aW9ucyBvbiBkaWZmZXJlbnQgb2JqZWN0cywKK3RoZXkgbWlnaHQgb3IgbWlnaHQgbm90IGJlIHRvIHRoZSBzYW1lIGNhY2hlIGJhbmsuCisKK1NUQVRVUworCisxLiBtcG5fbHNoaWZ0IGFuZCBtcG5fcnNoaWZ0IHJ1biBhdCBhYm91dCA2IGN5Y2xlcy9saW1iLCBidXQgdGhlIFBlbnRpdW0KK2RvY3VtZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgdGhleSBzaG91bGQgdGFrZSBvbmx5IDQzLzggPSA1LjM3NSBjeWNsZXMvbGltYiwKK29yIDUgY3ljbGVzL2xpbWIgYXN5bXB0b3RpY2FsbHkuCisKKzIuIG1wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uIHJ1biBhdCBhc3ltcHRvdGljYWxseSAyIGN5Y2xlcy9saW1iLiAgRHVlIHRvIGxvb3AKK292ZXJoZWFkIGFuZCBvdGhlciBkZWxheXMgKGNhY2hlIHJlZmlsbD8pLCB0aGV5IHJ1biBhdCBvciBuZWFyIDIuNSBjeWNsZXMvbGltYi4KKworMy4gbXBuX211bF8xLCBtcG5fYWRkbXVsXzEsIG1wbl9zdWJtdWxfMSBhbGwgcnVuIDEgY3ljbGUgZmFzdGVyIHRoYW4gdGhleQorc2hvdWxkLi4uCmRpZmYgLS1naXQgYS9tcGkvaTU4Ni9kaXN0ZmlsZXMgYi9tcGkvaTU4Ni9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2Zjc3NwotLS0gL2Rldi9udWxsCisrKyBiL21waS9pNTg2L2Rpc3RmaWxlcwpAQCAtMCwwICsxLDEwIEBACitNYW5pZmVzdAorbXBpaC1hZGQxLlMKK21waWgtbXVsMS5TCittcGloLW11bDIuUworbXBpaC1tdWwzLlMKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKK21waWgtc3ViMS5TCitSRUFETUUKKwpkaWZmIC0tZ2l0IGEvbXBpL2k1ODYvbXBpaC1hZGQxLlMgYi9tcGkvaTU4Ni9tcGloLWFkZDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM2ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL2k1ODYvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSwxMzUgQEAKKy8qIGk4MDU4NiBhZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShzcCArIDEyKQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHNwICsgMTYpCisgKi8KKworLnRleHQKKwlBTElHTiAoMykKKwkuZ2xvYmwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uOikKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCisKKwltb3ZsCTIwKCVlc3ApLCVlZGkJCS8qIHJlc19wdHIgKi8KKwltb3ZsCTI0KCVlc3ApLCVlc2kJCS8qIHMxX3B0ciAqLworCW1vdmwJMjgoJWVzcCksJWVicAkJLyogczJfcHRyICovCisJbW92bAkzMiglZXNwKSwlZWN4CQkvKiBzaXplICovCisKKwltb3ZsCSglZWJwKSwlZWJ4CisKKwlkZWNsCSVlY3gKKwltb3ZsCSVlY3gsJWVkeAorCXNocmwJJDMsJWVjeAorCWFuZGwJJDcsJWVkeAorCXRlc3RsCSVlY3gsJWVjeAkJLyogemVybyBjYXJyeSBmbGFnICovCisJanoJTGVuZAorCXB1c2hsCSVlZHgKKworCUFMSUdOICgzKQorTG9vcDoJbW92bAkyOCglZWRpKSwlZWF4CQkvKiBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lICovCisJbGVhbAkzMiglZWRpKSwlZWRpCisKK0wxOgltb3ZsCSglZXNpKSwlZWF4CisJbW92bAk0KCVlc2kpLCVlZHgKKwlhZGNsCSVlYngsJWVheAorCW1vdmwJNCglZWJwKSwlZWJ4CisJYWRjbAklZWJ4LCVlZHgKKwltb3ZsCTgoJWVicCksJWVieAorCW1vdmwJJWVheCwtMzIoJWVkaSkKKwltb3ZsCSVlZHgsLTI4KCVlZGkpCisKK0wyOgltb3ZsCTgoJWVzaSksJWVheAorCW1vdmwJMTIoJWVzaSksJWVkeAorCWFkY2wJJWVieCwlZWF4CisJbW92bAkxMiglZWJwKSwlZWJ4CisJYWRjbAklZWJ4LCVlZHgKKwltb3ZsCTE2KCVlYnApLCVlYngKKwltb3ZsCSVlYXgsLTI0KCVlZGkpCisJbW92bAklZWR4LC0yMCglZWRpKQorCitMMzoJbW92bAkxNiglZXNpKSwlZWF4CisJbW92bAkyMCglZXNpKSwlZWR4CisJYWRjbAklZWJ4LCVlYXgKKwltb3ZsCTIwKCVlYnApLCVlYngKKwlhZGNsCSVlYngsJWVkeAorCW1vdmwJMjQoJWVicCksJWVieAorCW1vdmwJJWVheCwtMTYoJWVkaSkKKwltb3ZsCSVlZHgsLTEyKCVlZGkpCisKK0w0Ogltb3ZsCTI0KCVlc2kpLCVlYXgKKwltb3ZsCTI4KCVlc2kpLCVlZHgKKwlhZGNsCSVlYngsJWVheAorCW1vdmwJMjgoJWVicCksJWVieAorCWFkY2wJJWVieCwlZWR4CisJbW92bAkzMiglZWJwKSwlZWJ4CisJbW92bAklZWF4LC04KCVlZGkpCisJbW92bAklZWR4LC00KCVlZGkpCisKKwlsZWFsCTMyKCVlc2kpLCVlc2kKKwlsZWFsCTMyKCVlYnApLCVlYnAKKwlkZWNsCSVlY3gKKwlqbnoJTG9vcAorCisJcG9wbAklZWR4CitMZW5kOgorCWRlY2wJJWVkeAkJCS8qIHRlc3QgJWVkeCB3L28gY2xvYmJlcmluZyBjYXJyeSAqLworCWpzCUxlbmQyCisJaW5jbAklZWR4CitMb29wMjoKKwlsZWFsCTQoJWVkaSksJWVkaQorCW1vdmwJKCVlc2kpLCVlYXgKKwlhZGNsCSVlYngsJWVheAorCW1vdmwJNCglZWJwKSwlZWJ4CisJbW92bAklZWF4LC00KCVlZGkpCisJbGVhbAk0KCVlc2kpLCVlc2kKKwlsZWFsCTQoJWVicCksJWVicAorCWRlY2wJJWVkeAorCWpueglMb29wMgorTGVuZDI6CisJbW92bAkoJWVzaSksJWVheAorCWFkY2wJJWVieCwlZWF4CisJbW92bAklZWF4LCglZWRpKQorCisJc2JibAklZWF4LCVlYXgKKwluZWdsCSVlYXgKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCisKZGlmZiAtLWdpdCBhL21waS9pNTg2L21waWgtbHNoaWZ0LlMgYi9tcGkvaTU4Ni9tcGloLWxzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjVmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTU4Ni9tcGloLWxzaGlmdC5TCkBAIC0wLDAgKzEsMjI5IEBACisvKiBpODA1ODYgICBsc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShzcCArIDgpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHNwICsgMTIpCisgKgkJICAgdW5zaWduZWQgY250KQkoc3AgKyAxNikKKyAqLworCisudGV4dAorCUFMSUdOICgzKQorCS5nbG9ibCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbHNoaWZ0KQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2xzaGlmdDopCisKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCisKKwltb3ZsCTIwKCVlc3ApLCVlZGkJCS8qIHJlc19wdHIgKi8KKwltb3ZsCTI0KCVlc3ApLCVlc2kJCS8qIHNfcHRyICovCisJbW92bAkyOCglZXNwKSwlZWJwCQkvKiBzaXplICovCisJbW92bAkzMiglZXNwKSwlZWN4CQkvKiBjbnQgKi8KKworLyogV2UgY2FuIHVzZSBmYXN0ZXIgY29kZSBmb3Igc2hpZnQtYnktMSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuICAqLworCWNtcAkkMSwlZWN4CisJam5lCUxub3JtYWwKKwlsZWFsCTQoJWVzaSksJWVheAorCWNtcGwJJWVkaSwlZWF4CisJam5jCUxzcGVjaWFsCQkvKiBqdW1wIGlmIHNfcHRyICsgMSA+PSByZXNfcHRyICovCisJbGVhbAkoJWVzaSwlZWJwLDQpLCVlYXgKKwljbXBsCSVlYXgsJWVkaQorCWpuYwlMc3BlY2lhbAkJLyoganVtcCBpZiByZXNfcHRyID49IHNfcHRyICsgc2l6ZSAqLworCitMbm9ybWFsOgorCWxlYWwJLTQoJWVkaSwlZWJwLDQpLCVlZGkKKwlsZWFsCS00KCVlc2ksJWVicCw0KSwlZXNpCisKKwltb3ZsCSglZXNpKSwlZWR4CisJc3VibAkkNCwlZXNpCisJeG9ybAklZWF4LCVlYXgKKwlzaGxkbAklY2wsJWVkeCwlZWF4CQkvKiBjb21wdXRlIGNhcnJ5IGxpbWIgKi8KKwlwdXNobAklZWF4CQkJLyogcHVzaCBjYXJyeSBsaW1iIG9udG8gc3RhY2sgKi8KKworCWRlY2wJJWVicAorCXB1c2hsCSVlYnAKKwlzaHJsCSQzLCVlYnAKKwlqeglMZW5kCisKKwltb3ZsCSglZWRpKSwlZWF4CQkvKiBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lICovCisKKwlBTElHTgkoMikKK0xvb3A6CW1vdmwJLTI4KCVlZGkpLCVlYXgJCS8qIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUgKi8KKwltb3ZsCSVlZHgsJWVieAorCisJbW92bAkoJWVzaSksJWVheAorCW1vdmwJLTQoJWVzaSksJWVkeAorCXNobGRsCSVjbCwlZWF4LCVlYngKKwlzaGxkbAklY2wsJWVkeCwlZWF4CisJbW92bAklZWJ4LCglZWRpKQorCW1vdmwJJWVheCwtNCglZWRpKQorCisJbW92bAktOCglZXNpKSwlZWJ4CisJbW92bAktMTIoJWVzaSksJWVheAorCXNobGRsCSVjbCwlZWJ4LCVlZHgKKwlzaGxkbAklY2wsJWVheCwlZWJ4CisJbW92bAklZWR4LC04KCVlZGkpCisJbW92bAklZWJ4LC0xMiglZWRpKQorCisJbW92bAktMTYoJWVzaSksJWVkeAorCW1vdmwJLTIwKCVlc2kpLCVlYngKKwlzaGxkbAklY2wsJWVkeCwlZWF4CisJc2hsZGwJJWNsLCVlYngsJWVkeAorCW1vdmwJJWVheCwtMTYoJWVkaSkKKwltb3ZsCSVlZHgsLTIwKCVlZGkpCisKKwltb3ZsCS0yNCglZXNpKSwlZWF4CisJbW92bAktMjgoJWVzaSksJWVkeAorCXNobGRsCSVjbCwlZWF4LCVlYngKKwlzaGxkbAklY2wsJWVkeCwlZWF4CisJbW92bAklZWJ4LC0yNCglZWRpKQorCW1vdmwJJWVheCwtMjgoJWVkaSkKKworCXN1YmwJJDMyLCVlc2kKKwlzdWJsCSQzMiwlZWRpCisJZGVjbAklZWJwCisJam56CUxvb3AKKworTGVuZDoJcG9wbAklZWJwCisJYW5kbAkkNywlZWJwCisJanoJTGVuZDIKK0xvb3AyOgltb3ZsCSglZXNpKSwlZWF4CisJc2hsZGwJJWNsLCVlYXgsJWVkeAorCW1vdmwJJWVkeCwoJWVkaSkKKwltb3ZsCSVlYXgsJWVkeAorCXN1YmwJJDQsJWVzaQorCXN1YmwJJDQsJWVkaQorCWRlY2wJJWVicAorCWpueglMb29wMgorCitMZW5kMjoJc2hsbAklY2wsJWVkeAkJLyogY29tcHV0ZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iICovCisJbW92bAklZWR4LCglZWRpKQkJLyogc3RvcmUgaXQgKi8KKworCXBvcGwJJWVheAkJCS8qIHBvcCBjYXJyeSBsaW1iICovCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworLyogV2UgbG9vcCBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGVuZCBvZiB0aGUgYXJyYXlzLCB3aGljaCBpcyBvbmx5CisgICBwZXJtaXNzYWJsZSBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkb24ndCBvdmVybGFwLCBzaW5jZSB0aGUKKyAgIGZ1bmN0aW9uIGlzIGRvY3VtZW50ZWQgdG8gd29yayBmb3Igb3ZlcmxhcHBpbmcgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKyovCisKK0xzcGVjaWFsOgorCW1vdmwJKCVlc2kpLCVlZHgKKwlhZGRsCSQ0LCVlc2kKKworCWRlY2wJJWVicAorCXB1c2hsCSVlYnAKKwlzaHJsCSQzLCVlYnAKKworCWFkZGwJJWVkeCwlZWR4CisJaW5jbAklZWJwCisJZGVjbAklZWJwCisJanoJTExlbmQKKworCW1vdmwJKCVlZGkpLCVlYXgJCS8qIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUgKi8KKworCUFMSUdOCSgyKQorTExvb3A6CW1vdmwJMjgoJWVkaSksJWVheAkJLyogZmV0Y2ggZGVzdGluYXRpb24gY2FjaGUgbGluZSAqLworCW1vdmwJJWVkeCwlZWJ4CisKKwltb3ZsCSglZXNpKSwlZWF4CisJbW92bAk0KCVlc2kpLCVlZHgKKwlhZGNsCSVlYXgsJWVheAorCW1vdmwJJWVieCwoJWVkaSkKKwlhZGNsCSVlZHgsJWVkeAorCW1vdmwJJWVheCw0KCVlZGkpCisKKwltb3ZsCTgoJWVzaSksJWVieAorCW1vdmwJMTIoJWVzaSksJWVheAorCWFkY2wJJWVieCwlZWJ4CisJbW92bAklZWR4LDgoJWVkaSkKKwlhZGNsCSVlYXgsJWVheAorCW1vdmwJJWVieCwxMiglZWRpKQorCisJbW92bAkxNiglZXNpKSwlZWR4CisJbW92bAkyMCglZXNpKSwlZWJ4CisJYWRjbAklZWR4LCVlZHgKKwltb3ZsCSVlYXgsMTYoJWVkaSkKKwlhZGNsCSVlYngsJWVieAorCW1vdmwJJWVkeCwyMCglZWRpKQorCisJbW92bAkyNCglZXNpKSwlZWF4CisJbW92bAkyOCglZXNpKSwlZWR4CisJYWRjbAklZWF4LCVlYXgKKwltb3ZsCSVlYngsMjQoJWVkaSkKKwlhZGNsCSVlZHgsJWVkeAorCW1vdmwJJWVheCwyOCglZWRpKQorCisJbGVhbAkzMiglZXNpKSwlZXNpCQkvKiB1c2UgbGVhbCBub3QgdG8gY2xvYmJlciBjYXJyeSAqLworCWxlYWwJMzIoJWVkaSksJWVkaQorCWRlY2wJJWVicAorCWpueglMTG9vcAorCitMTGVuZDoJcG9wbAklZWJwCisJc2JibAklZWF4LCVlYXgJCS8qIHNhdmUgY2FycnkgaW4gJWVheCAqLworCWFuZGwJJDcsJWVicAorCWp6CUxMZW5kMgorCWFkZGwJJWVheCwlZWF4CQkvKiByZXN0b3JlIGNhcnJ5IGZyb20gZWF4ICovCitMTG9vcDI6IG1vdmwJJWVkeCwlZWJ4CisJbW92bAkoJWVzaSksJWVkeAorCWFkY2wJJWVkeCwlZWR4CisJbW92bAklZWJ4LCglZWRpKQorCisJbGVhbAk0KCVlc2kpLCVlc2kJCS8qIHVzZSBsZWFsIG5vdCB0byBjbG9iYmVyIGNhcnJ5ICovCisJbGVhbAk0KCVlZGkpLCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJTExvb3AyCisKKwlqbXAJTEwxCitMTGVuZDI6IGFkZGwJJWVheCwlZWF4CQkvKiByZXN0b3JlIGNhcnJ5IGZyb20gZWF4ICovCitMTDE6CW1vdmwJJWVkeCwoJWVkaSkJCS8qIHN0b3JlIGxhc3QgbGltYiAqLworCisJc2JibAklZWF4LCVlYXgKKwluZWdsCSVlYXgKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCisKZGlmZiAtLWdpdCBhL21waS9pNTg2L21waWgtbXVsMS5TIGIvbXBpL2k1ODYvbXBpaC1tdWwxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMWQ5NgotLS0gL2Rldi9udWxsCisrKyBiL21waS9pNTg2L21waWgtbXVsMS5TCkBAIC0wLDAgKzEsODkgQEAKKy8qIGk4MDU4NiBtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorICoJCQkgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX211bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICBtcGlfc2l6ZV90IHMxX3NpemUsCShzcCArIDEyKQorICoJCSAgbXBpX2xpbWJfdCBzMl9saW1iKQkoc3AgKyAxNikKKyAqLworCisjZGVmaW5lIHJlc19wdHIgZWRpCisjZGVmaW5lIHMxX3B0cgllc2kKKyNkZWZpbmUgc2l6ZQllY3gKKyNkZWZpbmUgczJfbGltYiBlYnAKKworCVRFWFQKKwlBTElHTiAoMykKKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbXVsXzE6KQorCisJSU5TTjEocHVzaCxsCSxSKGVkaSkpCisJSU5TTjEocHVzaCxsCSxSKGVzaSkpCisJSU5TTjEocHVzaCxsCSxSKGVieCkpCisJSU5TTjEocHVzaCxsCSxSKGVicCkpCisKKwlJTlNOMihtb3YsbAksUihyZXNfcHRyKSxNRU1fRElTUChlc3AsMjApKQorCUlOU04yKG1vdixsCSxSKHMxX3B0ciksTUVNX0RJU1AoZXNwLDI0KSkKKwlJTlNOMihtb3YsbAksUihzaXplKSxNRU1fRElTUChlc3AsMjgpKQorCUlOU04yKG1vdixsCSxSKHMyX2xpbWIpLE1FTV9ESVNQKGVzcCwzMikpCisKKwlJTlNOMihsZWEsbAksUihyZXNfcHRyKSxNRU1fSU5ERVgocmVzX3B0cixzaXplLDQpKQorCUlOU04yKGxlYSxsCSxSKHMxX3B0ciksTUVNX0lOREVYKHMxX3B0cixzaXplLDQpKQorCUlOU04xKG5lZyxsCSxSKHNpemUpKQorCUlOU04yKHhvcixsCSxSKGVieCksUihlYngpKQorCUFMSUdOICgzKQorCitMb29wOglJTlNOMihhZGMsbAksUihlYngpLCQwKQorCUlOU04yKG1vdixsCSxSKGVheCksTUVNX0lOREVYKHMxX3B0cixzaXplLDQpKQorCisJSU5TTjEobXVsLGwJLFIoczJfbGltYikpCisKKwlJTlNOMihhZGQsbAksUihlYngpLFIoZWF4KSkKKworCUlOU04yKG1vdixsCSxNRU1fSU5ERVgocmVzX3B0cixzaXplLDQpLFIoZWJ4KSkKKwlJTlNOMShpbmMsbAksUihzaXplKSkKKworCUlOU04yKG1vdixsCSxSKGVieCksUihlZHgpKQorCUlOU04xKGpueiwJLExvb3ApCisKKwlJTlNOMihhZGMsbAksUihlYngpLCQwKQorCUlOU04yKG1vdixsCSxSKGVheCksUihlYngpKQorCUlOU04xKHBvcCxsCSxSKGVicCkpCisJSU5TTjEocG9wLGwJLFIoZWJ4KSkKKwlJTlNOMShwb3AsbAksUihlc2kpKQorCUlOU04xKHBvcCxsCSxSKGVkaSkpCisJcmV0CisKZGlmZiAtLWdpdCBhL21waS9pNTg2L21waWgtbXVsMi5TIGIvbXBpL2k1ODYvbXBpaC1tdWwyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyZDM2MwotLS0gL2Rldi9udWxsCisrKyBiL21waS9pNTg2L21waWgtbXVsMi5TCkBAIC0wLDAgKzEsOTMgQEAKKy8qIGk4MDU4NiBhZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqCQkgICAgICB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2FkZG11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAgICAoc3AgKyA0KQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAoc3AgKyA4KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHNwICsgMTIpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAoc3AgKyAxNikKKyAqLworCisjZGVmaW5lIHJlc19wdHIgZWRpCisjZGVmaW5lIHMxX3B0cgllc2kKKyNkZWZpbmUgc2l6ZQllY3gKKyNkZWZpbmUgczJfbGltYiBlYnAKKworCVRFWFQKKwlBTElHTiAoMykKKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkbXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkbXVsXzE6KQorCisJSU5TTjEocHVzaCxsCSxSKGVkaSkpCisJSU5TTjEocHVzaCxsCSxSKGVzaSkpCisJSU5TTjEocHVzaCxsCSxSKGVieCkpCisJSU5TTjEocHVzaCxsCSxSKGVicCkpCisKKwlJTlNOMihtb3YsbAksUihyZXNfcHRyKSxNRU1fRElTUChlc3AsMjApKQorCUlOU04yKG1vdixsCSxSKHMxX3B0ciksTUVNX0RJU1AoZXNwLDI0KSkKKwlJTlNOMihtb3YsbAksUihzaXplKSxNRU1fRElTUChlc3AsMjgpKQorCUlOU04yKG1vdixsCSxSKHMyX2xpbWIpLE1FTV9ESVNQKGVzcCwzMikpCisKKwlJTlNOMihsZWEsbAksUihyZXNfcHRyKSxNRU1fSU5ERVgocmVzX3B0cixzaXplLDQpKQorCUlOU04yKGxlYSxsCSxSKHMxX3B0ciksTUVNX0lOREVYKHMxX3B0cixzaXplLDQpKQorCUlOU04xKG5lZyxsCSxSKHNpemUpKQorCUlOU04yKHhvcixsCSxSKGVieCksUihlYngpKQorCUFMSUdOICgzKQorCitMb29wOglJTlNOMihhZGMsbAksUihlYngpLCQwKQorCUlOU04yKG1vdixsCSxSKGVheCksTUVNX0lOREVYKHMxX3B0cixzaXplLDQpKQorCisJSU5TTjEobXVsLGwJLFIoczJfbGltYikpCisKKwlJTlNOMihhZGQsbAksUihlYXgpLFIoZWJ4KSkKKwlJTlNOMihtb3YsbAksUihlYngpLE1FTV9JTkRFWChyZXNfcHRyLHNpemUsNCkpCisKKwlJTlNOMihhZGMsbAksUihlZHgpLCQwKQorCUlOU04yKGFkZCxsCSxSKGVieCksUihlYXgpKQorCisJSU5TTjIobW92LGwJLE1FTV9JTkRFWChyZXNfcHRyLHNpemUsNCksUihlYngpKQorCUlOU04xKGluYyxsCSxSKHNpemUpKQorCisJSU5TTjIobW92LGwJLFIoZWJ4KSxSKGVkeCkpCisJSU5TTjEoam56LAksTG9vcCkKKworCUlOU04yKGFkYyxsCSxSKGVieCksJDApCisJSU5TTjIobW92LGwJLFIoZWF4KSxSKGVieCkpCisJSU5TTjEocG9wLGwJLFIoZWJwKSkKKwlJTlNOMShwb3AsbAksUihlYngpKQorCUlOU04xKHBvcCxsCSxSKGVzaSkpCisJSU5TTjEocG9wLGwJLFIoZWRpKSkKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL2k1ODYvbXBpaC1tdWwzLlMgYi9tcGkvaTU4Ni9tcGloLW11bDMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI3ZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2k1ODYvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSw5MyBAQAorLyogaTgwNTg2IHN1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZAorICoJCSAgICAgIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9zdWJtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgICAgKHNwICsgNCkKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHNwICsgOCkKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChzcCArIDEyKQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHNwICsgMTYpCisgKi8KKworI2RlZmluZSByZXNfcHRyIGVkaQorI2RlZmluZSBzMV9wdHIJZXNpCisjZGVmaW5lIHNpemUJZWN4CisjZGVmaW5lIHMyX2xpbWIgZWJwCisKKwlURVhUCisJQUxJR04gKDMpCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xOikKKworCUlOU04xKHB1c2gsbAksUihlZGkpKQorCUlOU04xKHB1c2gsbAksUihlc2kpKQorCUlOU04xKHB1c2gsbAksUihlYngpKQorCUlOU04xKHB1c2gsbAksUihlYnApKQorCisJSU5TTjIobW92LGwJLFIocmVzX3B0ciksTUVNX0RJU1AoZXNwLDIwKSkKKwlJTlNOMihtb3YsbAksUihzMV9wdHIpLE1FTV9ESVNQKGVzcCwyNCkpCisJSU5TTjIobW92LGwJLFIoc2l6ZSksTUVNX0RJU1AoZXNwLDI4KSkKKwlJTlNOMihtb3YsbAksUihzMl9saW1iKSxNRU1fRElTUChlc3AsMzIpKQorCisJSU5TTjIobGVhLGwJLFIocmVzX3B0ciksTUVNX0lOREVYKHJlc19wdHIsc2l6ZSw0KSkKKwlJTlNOMihsZWEsbAksUihzMV9wdHIpLE1FTV9JTkRFWChzMV9wdHIsc2l6ZSw0KSkKKwlJTlNOMShuZWcsbAksUihzaXplKSkKKwlJTlNOMih4b3IsbAksUihlYngpLFIoZWJ4KSkKKwlBTElHTiAoMykKKworTG9vcDoJSU5TTjIoYWRjLGwJLFIoZWJ4KSwkMCkKKwlJTlNOMihtb3YsbAksUihlYXgpLE1FTV9JTkRFWChzMV9wdHIsc2l6ZSw0KSkKKworCUlOU04xKG11bCxsCSxSKHMyX2xpbWIpKQorCisJSU5TTjIoYWRkLGwJLFIoZWF4KSxSKGVieCkpCisJSU5TTjIobW92LGwJLFIoZWJ4KSxNRU1fSU5ERVgocmVzX3B0cixzaXplLDQpKQorCisJSU5TTjIoYWRjLGwJLFIoZWR4KSwkMCkKKwlJTlNOMihzdWIsbAksUihlYngpLFIoZWF4KSkKKworCUlOU04yKG1vdixsCSxNRU1fSU5ERVgocmVzX3B0cixzaXplLDQpLFIoZWJ4KSkKKwlJTlNOMShpbmMsbAksUihzaXplKSkKKworCUlOU04yKG1vdixsCSxSKGVieCksUihlZHgpKQorCUlOU04xKGpueiwJLExvb3ApCisKKwlJTlNOMihhZGMsbAksUihlYngpLCQwKQorCUlOU04yKG1vdixsCSxSKGVheCksUihlYngpKQorCUlOU04xKHBvcCxsCSxSKGVicCkpCisJSU5TTjEocG9wLGwJLFIoZWJ4KSkKKwlJTlNOMShwb3AsbAksUihlc2kpKQorCUlOU04xKHBvcCxsCSxSKGVkaSkpCisJcmV0CisKZGlmZiAtLWdpdCBhL21waS9pNTg2L21waWgtcnNoaWZ0LlMgYi9tcGkvaTU4Ni9tcGloLXJzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjFlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvaTU4Ni9tcGloLXJzaGlmdC5TCkBAIC0wLDAgKzEsMjI4IEBACisvKiBpODA1ODYgICByc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfcnNoaWZ0KCBtcGlfcHRyX3Qgd3AsCShzcCArIDQpCisgKgkJICAgbXBpX3B0cl90IHVwLAkoc3AgKyA4KQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCShzcCArIDEyKQorICoJCSAgIHVuc2lnbmVkIGNudCkJKHNwICsgMTYpCisgKi8KKworLnRleHQKKwlBTElHTiAoMykKKwkuZ2xvYmwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdCkKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9yc2hpZnQ6KQorCXB1c2hsCSVlZGkKKwlwdXNobAklZXNpCisJcHVzaGwJJWVieAorCXB1c2hsCSVlYnAKKworCW1vdmwJMjAoJWVzcCksJWVkaQkJLyogcmVzX3B0ciAqLworCW1vdmwJMjQoJWVzcCksJWVzaQkJLyogc19wdHIgKi8KKwltb3ZsCTI4KCVlc3ApLCVlYnAJCS8qIHNpemUgKi8KKwltb3ZsCTMyKCVlc3ApLCVlY3gJCS8qIGNudCAqLworCisvKiBXZSBjYW4gdXNlIGZhc3RlciBjb2RlIGZvciBzaGlmdC1ieS0xIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4gICovCisJY21wCSQxLCVlY3gKKwlqbmUJUm5vcm1hbAorCWxlYWwJNCglZWRpKSwlZWF4CisJY21wbAklZXNpLCVlYXgKKwlqbmMJUnNwZWNpYWwJCS8qIGp1bXAgaWYgcmVzX3B0ciArIDEgPj0gc19wdHIgKi8KKwlsZWFsCSglZWRpLCVlYnAsNCksJWVheAorCWNtcGwJJWVheCwlZXNpCisJam5jCVJzcGVjaWFsCQkvKiBqdW1wIGlmIHNfcHRyID49IHJlc19wdHIgKyBzaXplICovCisKK1Jub3JtYWw6CisJbW92bAkoJWVzaSksJWVkeAorCWFkZGwJJDQsJWVzaQorCXhvcmwJJWVheCwlZWF4CisJc2hyZGwJJWNsLCVlZHgsJWVheAkJLyogY29tcHV0ZSBjYXJyeSBsaW1iICovCisJcHVzaGwJJWVheAkJCS8qIHB1c2ggY2FycnkgbGltYiBvbnRvIHN0YWNrICovCisKKwlkZWNsCSVlYnAKKwlwdXNobAklZWJwCisJc2hybAkkMywlZWJwCisJanoJUmVuZAorCisJbW92bAkoJWVkaSksJWVheAkJLyogZmV0Y2ggZGVzdGluYXRpb24gY2FjaGUgbGluZSAqLworCisJQUxJR04JKDIpCitSb29wOgltb3ZsCTI4KCVlZGkpLCVlYXgJCS8qIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUgKi8KKwltb3ZsCSVlZHgsJWVieAorCisJbW92bAkoJWVzaSksJWVheAorCW1vdmwJNCglZXNpKSwlZWR4CisJc2hyZGwJJWNsLCVlYXgsJWVieAorCXNocmRsCSVjbCwlZWR4LCVlYXgKKwltb3ZsCSVlYngsKCVlZGkpCisJbW92bAklZWF4LDQoJWVkaSkKKworCW1vdmwJOCglZXNpKSwlZWJ4CisJbW92bAkxMiglZXNpKSwlZWF4CisJc2hyZGwJJWNsLCVlYngsJWVkeAorCXNocmRsCSVjbCwlZWF4LCVlYngKKwltb3ZsCSVlZHgsOCglZWRpKQorCW1vdmwJJWVieCwxMiglZWRpKQorCisJbW92bAkxNiglZXNpKSwlZWR4CisJbW92bAkyMCglZXNpKSwlZWJ4CisJc2hyZGwJJWNsLCVlZHgsJWVheAorCXNocmRsCSVjbCwlZWJ4LCVlZHgKKwltb3ZsCSVlYXgsMTYoJWVkaSkKKwltb3ZsCSVlZHgsMjAoJWVkaSkKKworCW1vdmwJMjQoJWVzaSksJWVheAorCW1vdmwJMjgoJWVzaSksJWVkeAorCXNocmRsCSVjbCwlZWF4LCVlYngKKwlzaHJkbAklY2wsJWVkeCwlZWF4CisJbW92bAklZWJ4LDI0KCVlZGkpCisJbW92bAklZWF4LDI4KCVlZGkpCisKKwlhZGRsCSQzMiwlZXNpCisJYWRkbAkkMzIsJWVkaQorCWRlY2wJJWVicAorCWpueglSb29wCisKK1JlbmQ6CXBvcGwJJWVicAorCWFuZGwJJDcsJWVicAorCWp6CVJlbmQyCitSb29wMjoJbW92bAkoJWVzaSksJWVheAorCXNocmRsCSVjbCwlZWF4LCVlZHgJCS8qIGNvbXB1dGUgcmVzdWx0IGxpbWIgKi8KKwltb3ZsCSVlZHgsKCVlZGkpCisJbW92bAklZWF4LCVlZHgKKwlhZGRsCSQ0LCVlc2kKKwlhZGRsCSQ0LCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJUm9vcDIKKworUmVuZDI6CXNocmwJJWNsLCVlZHgJCS8qIGNvbXB1dGUgbW9zdCBzaWduaWZpY2FudCBsaW1iICovCisJbW92bAklZWR4LCglZWRpKQkJLyogc3RvcmUgaXQgKi8KKworCXBvcGwJJWVheAkJCS8qIHBvcCBjYXJyeSBsaW1iICovCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworLyogV2UgbG9vcCBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGVuZCBvZiB0aGUgYXJyYXlzLCB3aGljaCBpcyBvbmx5CisgICBwZXJtaXNzYWJsZSBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkb24ndCBvdmVybGFwLCBzaW5jZSB0aGUKKyAgIGZ1bmN0aW9uIGlzIGRvY3VtZW50ZWQgdG8gd29yayBmb3Igb3ZlcmxhcHBpbmcgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKyovCisKK1JzcGVjaWFsOgorCWxlYWwJLTQoJWVkaSwlZWJwLDQpLCVlZGkKKwlsZWFsCS00KCVlc2ksJWVicCw0KSwlZXNpCisKKwltb3ZsCSglZXNpKSwlZWR4CisJc3VibAkkNCwlZXNpCisKKwlkZWNsCSVlYnAKKwlwdXNobAklZWJwCisJc2hybAkkMywlZWJwCisKKwlzaHJsCSQxLCVlZHgKKwlpbmNsCSVlYnAKKwlkZWNsCSVlYnAKKwlqeglSTGVuZAorCisJbW92bAkoJWVkaSksJWVheAkJLyogZmV0Y2ggZGVzdGluYXRpb24gY2FjaGUgbGluZSAqLworCisJQUxJR04JKDIpCitSTG9vcDoJbW92bAktMjgoJWVkaSksJWVheAkJLyogZmV0Y2ggZGVzdGluYXRpb24gY2FjaGUgbGluZSAqLworCW1vdmwJJWVkeCwlZWJ4CisKKwltb3ZsCSglZXNpKSwlZWF4CisJbW92bAktNCglZXNpKSwlZWR4CisJcmNybAkkMSwlZWF4CisJbW92bAklZWJ4LCglZWRpKQorCXJjcmwJJDEsJWVkeAorCW1vdmwJJWVheCwtNCglZWRpKQorCisJbW92bAktOCglZXNpKSwlZWJ4CisJbW92bAktMTIoJWVzaSksJWVheAorCXJjcmwJJDEsJWVieAorCW1vdmwJJWVkeCwtOCglZWRpKQorCXJjcmwJJDEsJWVheAorCW1vdmwJJWVieCwtMTIoJWVkaSkKKworCW1vdmwJLTE2KCVlc2kpLCVlZHgKKwltb3ZsCS0yMCglZXNpKSwlZWJ4CisJcmNybAkkMSwlZWR4CisJbW92bAklZWF4LC0xNiglZWRpKQorCXJjcmwJJDEsJWVieAorCW1vdmwJJWVkeCwtMjAoJWVkaSkKKworCW1vdmwJLTI0KCVlc2kpLCVlYXgKKwltb3ZsCS0yOCglZXNpKSwlZWR4CisJcmNybAkkMSwlZWF4CisJbW92bAklZWJ4LC0yNCglZWRpKQorCXJjcmwJJDEsJWVkeAorCW1vdmwJJWVheCwtMjgoJWVkaSkKKworCWxlYWwJLTMyKCVlc2kpLCVlc2kJCS8qIHVzZSBsZWFsIG5vdCB0byBjbG9iYmVyIGNhcnJ5ICovCisJbGVhbAktMzIoJWVkaSksJWVkaQorCWRlY2wJJWVicAorCWpueglSTG9vcAorCitSTGVuZDoJcG9wbAklZWJwCisJc2JibAklZWF4LCVlYXgJCS8qIHNhdmUgY2FycnkgaW4gJWVheCAqLworCWFuZGwJJDcsJWVicAorCWp6CVJMZW5kMgorCWFkZGwJJWVheCwlZWF4CQkvKiByZXN0b3JlIGNhcnJ5IGZyb20gZWF4ICovCitSTG9vcDI6IG1vdmwJJWVkeCwlZWJ4CisJbW92bAkoJWVzaSksJWVkeAorCXJjcmwJJDEsJWVkeAorCW1vdmwJJWVieCwoJWVkaSkKKworCWxlYWwJLTQoJWVzaSksJWVzaQkJLyogdXNlIGxlYWwgbm90IHRvIGNsb2JiZXIgY2FycnkgKi8KKwlsZWFsCS00KCVlZGkpLCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJUkxvb3AyCisKKwlqbXAJUkwxCitSTGVuZDI6IGFkZGwJJWVheCwlZWF4CQkvKiByZXN0b3JlIGNhcnJ5IGZyb20gZWF4ICovCitSTDE6CW1vdmwJJWVkeCwoJWVkaSkJCS8qIHN0b3JlIGxhc3QgbGltYiAqLworCisJbW92bAkkMCwlZWF4CisJcmNybAkkMSwlZWF4CisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL2k1ODYvbXBpaC1zdWIxLlMgYi9tcGkvaTU4Ni9tcGloLXN1YjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJkNTgwCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL2k1ODYvbXBpaC1zdWIxLlMKQEAgLTAsMCArMSwxNDIgQEAKKy8qIGk4MDU4NiBzdWJfbiAtLSBTdWIgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfc3ViX24oIG1waV9wdHJfdCByZXNfcHRyLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKHNwICsgMTIpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoc3AgKyAxNikKKyAqLworCisKKy50ZXh0CisJQUxJR04gKDMpCisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbikKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbjopCisKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCisKKwltb3ZsCTIwKCVlc3ApLCVlZGkJCS8qIHJlc19wdHIgKi8KKwltb3ZsCTI0KCVlc3ApLCVlc2kJCS8qIHMxX3B0ciAqLworCW1vdmwJMjgoJWVzcCksJWVicAkJLyogczJfcHRyICovCisJbW92bAkzMiglZXNwKSwlZWN4CQkvKiBzaXplICovCisKKwltb3ZsCSglZWJwKSwlZWJ4CisKKwlkZWNsCSVlY3gKKwltb3ZsCSVlY3gsJWVkeAorCXNocmwJJDMsJWVjeAorCWFuZGwJJDcsJWVkeAorCXRlc3RsCSVlY3gsJWVjeAkJLyogemVybyBjYXJyeSBmbGFnICovCisJanoJTGVuZAorCXB1c2hsCSVlZHgKKworCUFMSUdOICgzKQorTG9vcDoJbW92bAkyOCglZWRpKSwlZWF4CQkvKiBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lICovCisJbGVhbAkzMiglZWRpKSwlZWRpCisKK0wxOgltb3ZsCSglZXNpKSwlZWF4CisJbW92bAk0KCVlc2kpLCVlZHgKKwlzYmJsCSVlYngsJWVheAorCW1vdmwJNCglZWJwKSwlZWJ4CisJc2JibAklZWJ4LCVlZHgKKwltb3ZsCTgoJWVicCksJWVieAorCW1vdmwJJWVheCwtMzIoJWVkaSkKKwltb3ZsCSVlZHgsLTI4KCVlZGkpCisKK0wyOgltb3ZsCTgoJWVzaSksJWVheAorCW1vdmwJMTIoJWVzaSksJWVkeAorCXNiYmwJJWVieCwlZWF4CisJbW92bAkxMiglZWJwKSwlZWJ4CisJc2JibAklZWJ4LCVlZHgKKwltb3ZsCTE2KCVlYnApLCVlYngKKwltb3ZsCSVlYXgsLTI0KCVlZGkpCisJbW92bAklZWR4LC0yMCglZWRpKQorCitMMzoJbW92bAkxNiglZXNpKSwlZWF4CisJbW92bAkyMCglZXNpKSwlZWR4CisJc2JibAklZWJ4LCVlYXgKKwltb3ZsCTIwKCVlYnApLCVlYngKKwlzYmJsCSVlYngsJWVkeAorCW1vdmwJMjQoJWVicCksJWVieAorCW1vdmwJJWVheCwtMTYoJWVkaSkKKwltb3ZsCSVlZHgsLTEyKCVlZGkpCisKK0w0Ogltb3ZsCTI0KCVlc2kpLCVlYXgKKwltb3ZsCTI4KCVlc2kpLCVlZHgKKwlzYmJsCSVlYngsJWVheAorCW1vdmwJMjgoJWVicCksJWVieAorCXNiYmwJJWVieCwlZWR4CisJbW92bAkzMiglZWJwKSwlZWJ4CisJbW92bAklZWF4LC04KCVlZGkpCisJbW92bAklZWR4LC00KCVlZGkpCisKKwlsZWFsCTMyKCVlc2kpLCVlc2kKKwlsZWFsCTMyKCVlYnApLCVlYnAKKwlkZWNsCSVlY3gKKwlqbnoJTG9vcAorCisJcG9wbAklZWR4CitMZW5kOgorCWRlY2wJJWVkeAkJCS8qIHRlc3QgJWVkeCB3L28gY2xvYmJlcmluZyBjYXJyeSAqLworCWpzCUxlbmQyCisJaW5jbAklZWR4CitMb29wMjoKKwlsZWFsCTQoJWVkaSksJWVkaQorCW1vdmwJKCVlc2kpLCVlYXgKKwlzYmJsCSVlYngsJWVheAorCW1vdmwJNCglZWJwKSwlZWJ4CisJbW92bAklZWF4LC00KCVlZGkpCisJbGVhbAk0KCVlc2kpLCVlc2kKKwlsZWFsCTQoJWVicCksJWVicAorCWRlY2wJJWVkeAorCWpueglMb29wMgorTGVuZDI6CisJbW92bAkoJWVzaSksJWVheAorCXNiYmwJJWVieCwlZWF4CisJbW92bAklZWF4LCglZWRpKQorCisJc2JibAklZWF4LCVlYXgKKwluZWdsCSVlYXgKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCmRpZmYgLS1naXQgYS9tcGkvbG9uZ2xvbmcuaCBiL21waS9sb25nbG9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzM5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbG9uZ2xvbmcuaApAQCAtMCwwICsxLDE3MTUgQEAKKy8qIGxvbmdsb25nLmggLS0gZGVmaW5pdGlvbnMgZm9yIG1peGVkIHNpemUgMzIvNjQgYml0IGFyaXRobWV0aWMuCisgICBOb3RlOiBJIGFkZGVkIHNvbWUgc3R1ZmYgZm9yIHVzZSB3aXRoIGdudXBnCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NiwgMTk5OCwKKyAgICAgICAgICAgICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcsIFVTQS4gKi8KKworLyogWW91IGhhdmUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGU6CisKKyAgIFVXdHlwZSAtLSBBbiB1bnNpZ25lZCB0eXBlLCBkZWZhdWx0IHR5cGUgZm9yIG9wZXJhdGlvbnMgKHR5cGljYWxseSBhICJ3b3JkIikKKyAgIFVIV3R5cGUgLS0gQW4gdW5zaWduZWQgdHlwZSwgYXQgbGVhc3QgaGFsZiB0aGUgc2l6ZSBvZiBVV3R5cGUuCisgICBVRFd0eXBlIC0tIEFuIHVuc2lnbmVkIHR5cGUsIGF0IGxlYXN0IHR3aWNlIGFzIGxhcmdlIGEgVVd0eXBlCisgICBXX1RZUEVfU0laRSAtLSBzaXplIGluIGJpdHMgb2YgVVd0eXBlCisKKyAgIFNJdHlwZSwgVVNJdHlwZSAtLSBTaWduZWQgYW5kIHVuc2lnbmVkIDMyIGJpdCB0eXBlcy4KKyAgIERJdHlwZSwgVURJdHlwZSAtLSBTaWduZWQgYW5kIHVuc2lnbmVkIDY0IGJpdCB0eXBlcy4KKworICAgT24gYSAzMiBiaXQgbWFjaGluZSBVV3R5cGUgc2hvdWxkIHR5cGljYWxseSBiZSBVU0l0eXBlOworICAgb24gYSA2NCBiaXQgbWFjaGluZSwgVVd0eXBlIHNob3VsZCB0eXBpY2FsbHkgYmUgVURJdHlwZS4KKyovCisKKyNkZWZpbmUgX19CSVRTNCAoV19UWVBFX1NJWkUgLyA0KQorI2RlZmluZSBfX2xsX0IgKChVV3R5cGUpIDEgPDwgKFdfVFlQRV9TSVpFIC8gMikpCisjZGVmaW5lIF9fbGxfbG93cGFydCh0KSAoKFVXdHlwZSkgKHQpICYgKF9fbGxfQiAtIDEpKQorI2RlZmluZSBfX2xsX2hpZ2hwYXJ0KHQpICgoVVd0eXBlKSAodCkgPj4gKFdfVFlQRV9TSVpFIC8gMikpCisKKy8qIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgbm8gdW5kZXNpcmFibGUgc2hhcmluZyBiZXR3ZWVuIGRpZmZlcmVudCBsaWJyYXJpZXMKKyAgIHRoYXQgdXNlIHRoaXMgZmlsZSB0YWtlcyBwbGFjZS4gICovCisjaWZuZGVmIF9fTVBOCisjZGVmaW5lIF9fTVBOKHgpIF9fIyN4CisjZW5kaWYKKworLyogRGVmaW5lIGF1eGlsaWFyeSBhc20gbWFjcm9zLgorCisgICAxKSB1bXVsX3BwbW0oaGlnaF9wcm9kLCBsb3dfcHJvZCwgbXVsdGlwbGVyLCBtdWx0aXBsaWNhbmQpIG11bHRpcGxpZXMgdHdvCisgICBVV3R5cGUgaW50ZWdlcnMgTVVMVElQTEVSIGFuZCBNVUxUSVBMSUNBTkQsIGFuZCBnZW5lcmF0ZXMgYSB0d28gVVd0eXBlCisgICB3b3JkIHByb2R1Y3QgaW4gSElHSF9QUk9EIGFuZCBMT1dfUFJPRC4KKworICAgMikgX191bXVsc2lkaTMoYSxiKSBtdWx0aXBsaWVzIHR3byBVV3R5cGUgaW50ZWdlcnMgQSBhbmQgQiwgYW5kIHJldHVybnMgYQorICAgVURXdHlwZSBwcm9kdWN0LiAgVGhpcyBpcyBqdXN0IGEgdmFyaWFudCBvZiB1bXVsX3BwbW0uCisKKyAgIDMpIHVkaXZfcXJubmQocXVvdGllbnQsIHJlbWFpbmRlciwgaGlnaF9udW1lcmF0b3IsIGxvd19udW1lcmF0b3IsCisgICBkZW5vbWluYXRvcikgZGl2aWRlcyBhIFVEV3R5cGUsIGNvbXBvc2VkIGJ5IHRoZSBVV3R5cGUgaW50ZWdlcnMKKyAgIEhJR0hfTlVNRVJBVE9SIGFuZCBMT1dfTlVNRVJBVE9SLCBieSBERU5PTUlOQVRPUiBhbmQgcGxhY2VzIHRoZSBxdW90aWVudAorICAgaW4gUVVPVElFTlQgYW5kIHRoZSByZW1haW5kZXIgaW4gUkVNQUlOREVSLglISUdIX05VTUVSQVRPUiBtdXN0IGJlIGxlc3MKKyAgIHRoYW4gREVOT01JTkFUT1IgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLiAgSWYsIGluIGFkZGl0aW9uLCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYml0IG9mIERFTk9NSU5BVE9SIG11c3QgYmUgMSwgdGhlbiB0aGUgcHJlLXByb2Nlc3NvciBzeW1ib2wKKyAgIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBkZWZpbmVkIHRvIDEuCisKKyAgIDQpIHNkaXZfcXJubmQocXVvdGllbnQsIHJlbWFpbmRlciwgaGlnaF9udW1lcmF0b3IsIGxvd19udW1lcmF0b3IsCisgICBkZW5vbWluYXRvcikuICBMaWtlIHVkaXZfcXJubmQgYnV0IHRoZSBudW1iZXJzIGFyZSBzaWduZWQuICBUaGUgcXVvdGllbnQKKyAgIGlzIHJvdW5kZWQgdG93YXJkcyAwLgorCisgICA1KSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBjb3VudHMgdGhlIG51bWJlciBvZiB6ZXJvLWJpdHMgZnJvbSB0aGUKKyAgIG1zYiB0byB0aGUgZmlyc3Qgbm9uLXplcm8gYml0IGluIHRoZSBVV3R5cGUgWC4gIFRoaXMgaXMgdGhlIG51bWJlciBvZgorICAgc3RlcHMgWCBuZWVkcyB0byBiZSBzaGlmdGVkIGxlZnQgdG8gc2V0IHRoZSBtc2IuICBVbmRlZmluZWQgZm9yIFggPT0gMCwKKyAgIHVubGVzcyB0aGUgc3ltYm9sIENPVU5UX0xFQURJTkdfWkVST1NfMCBpcyBkZWZpbmVkIHRvIHNvbWUgdmFsdWUuCisKKyAgIDYpIGNvdW50X3RyYWlsaW5nX3plcm9zKGNvdW50LCB4KSBsaWtlIGNvdW50X2xlYWRpbmdfemVyb3MsIGJ1dCBjb3VudHMKKyAgIGZyb20gdGhlIGxlYXN0IHNpZ25pZmljYW50IGVuZC4KKworICAgNykgYWRkX3NzYWFhYShoaWdoX3N1bSwgbG93X3N1bSwgaGlnaF9hZGRlbmRfMSwgbG93X2FkZGVuZF8xLAorICAgaGlnaF9hZGRlbmRfMiwgbG93X2FkZGVuZF8yKSBhZGRzIHR3byBVV3R5cGUgaW50ZWdlcnMsIGNvbXBvc2VkIGJ5CisgICBISUdIX0FEREVORF8xIGFuZCBMT1dfQURERU5EXzEsIGFuZCBISUdIX0FEREVORF8yIGFuZCBMT1dfQURERU5EXzIKKyAgIHJlc3BlY3RpdmVseS4gIFRoZSByZXN1bHQgaXMgcGxhY2VkIGluIEhJR0hfU1VNIGFuZCBMT1dfU1VNLiAgT3ZlcmZsb3cKKyAgIChpLmUuIGNhcnJ5IG91dCkgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSwgYW5kIGlzIGxvc3QuCisKKyAgIDgpIHN1Yl9kZG1tc3MoaGlnaF9kaWZmZXJlbmNlLCBsb3dfZGlmZmVyZW5jZSwgaGlnaF9taW51ZW5kLCBsb3dfbWludWVuZCwKKyAgIGhpZ2hfc3VidHJhaGVuZCwgbG93X3N1YnRyYWhlbmQpIHN1YnRyYWN0cyB0d28gdHdvLXdvcmQgVVd0eXBlIGludGVnZXJzLAorICAgY29tcG9zZWQgYnkgSElHSF9NSU5VRU5EXzEgYW5kIExPV19NSU5VRU5EXzEsIGFuZCBISUdIX1NVQlRSQUhFTkRfMiBhbmQKKyAgIExPV19TVUJUUkFIRU5EXzIgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9ESUZGRVJFTkNFCisgICBhbmQgTE9XX0RJRkZFUkVOQ0UuCU92ZXJmbG93IChpLmUuIGNhcnJ5IG91dCkgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSwKKyAgIGFuZCBpcyBsb3N0LgorCisgICBJZiBhbnkgb2YgdGhlc2UgbWFjcm9zIGFyZSBsZWZ0IHVuZGVmaW5lZCBmb3IgYSBwYXJ0aWN1bGFyIENQVSwKKyAgIEMgbWFjcm9zIGFyZSB1c2VkLiAgKi8KKworLyogVGhlIENQVXMgY29tZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgYmVsb3cuCisKKyAgIFBsZWFzZSBhZGQgc3VwcG9ydCBmb3IgbW9yZSBDUFVzIGhlcmUsIG9yIGltcHJvdmUgdGhlIGN1cnJlbnQgc3VwcG9ydAorICAgZm9yIHRoZSBDUFVzIGJlbG93IQkqLworCisjaWZkZWYgX19yaXNjb3NfXworI3ByYWdtYSBjb250aW51ZV9hZnRlcl9oYXNoX2Vycm9yCisjZWxzZSAvKiAhX19yaXNjb3NfXyAqLworI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiAhZGVmaW5lZCAoTk9fQVNNKQorCisvKiBXZSBzb21ldGltZXMgbmVlZCB0byBjbG9iYmVyICJjYyIgd2l0aCBnY2MyLCBidXQgdGhhdCB3b3VsZCBub3QgYmUKKyAgIHVuZGVyc3Rvb2QgYnkgZ2NjMS4JVXNlIGNwcCB0byBhdm9pZCBtYWpvciBjb2RlIGR1cGxpY2F0aW9uLiAgKi8KKyNpZiBfX0dOVUNfXyA8IDIKKyNkZWZpbmUgX19DTE9CQkVSX0NDCisjZGVmaW5lIF9fQU5EX0NMT0JCRVJfQ0MKKyNlbHNlIC8qIF9fR05VQ19fID49IDIgKi8KKyNkZWZpbmUgX19DTE9CQkVSX0NDIDogImNjIgorI2RlZmluZSBfX0FORF9DTE9CQkVSX0NDICwgImNjIgorI2VuZGlmIC8qIF9fR05VQ19fIDwgMiAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgQTI5SyAgKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgKGRlZmluZWQgKF9fYTI5a19fKSB8fCBkZWZpbmVkIChfQU0yOUspKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImFkZCAlMSwlNCwlNVxuIiAgIFwKKyAgICAgICAgICAgImFkZGMgJTAsJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWIgJTEsJTQsJTVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgInN1YmMgJTAsJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiciIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgdW11bF9wcG1tKHhoLCB4bCwgbTAsIG0xKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoIm11bHRpcGx1ICUwLCUxLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKSh4bCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogInIiIChfX20wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKF9fbTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc21fXyAoIm11bHRtdSAlMCwlMSwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKSh4aCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogInIiIChfX20wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKF9fbTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIF9fYXNtX18gKCJkaXZpZHUgJTAsJTMsJTQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkocSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9cSIgKChVU0l0eXBlKShyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjEiICgoVVNJdHlwZSkobjEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKShuMCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyIiAoKFVTSXR5cGUpKGQpKSkKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICAgIF9fYXNtX18gKCJjbHogJTAsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoY291bnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJyIiAoKFVTSXR5cGUpKHgpKSkKKyNkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPU18wIDMyCisjZW5kaWYgLyogX19hMjlrX18gKi8KKworCisjaWYgZGVmaW5lZCAoX19hbHBoYSkgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgdW11bF9wcG1tKHBoLCBwbCwgbTAsIG0xKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVURJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoInVtdWxoICVyMSwlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChVREl0eXBlKSBwaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIiVySiIgKF9fbTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAickkiIChfX20xKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHBsKSA9IF9fbTAgKiBfX20xOyAJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIFVNVUxfVElNRSA0NgorI2lmbmRlZiBMT05HTE9OR19TVEFOREFMT05FCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIGRvIHsgVURJdHlwZSBfX3I7CQkJCQkJCVwKKyAgICAocSkgPSBfX3VkaXZfcXJubmQgKCZfX3IsIChuMSksIChuMCksIChkKSk7IAkJCVwKKyAgICAocikgPSBfX3I7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCitleHRlcm4gVURJdHlwZSBfX3VkaXZfcXJubmQgKCk7CisjZGVmaW5lIFVESVZfVElNRSAyMjAKKyNlbmRpZiAvKiBMT05HTE9OR19TVEFOREFMT05FICovCisjZW5kaWYgLyogX19hbHBoYSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIEFSTSAgKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmIFwKKyAgICAoIWRlZmluZWQgKF9fdGh1bWJfXykgfHwgZGVmaW5lZCAoX190aHVtYjJfXykpCisvKiBUaGUgX19BUk1fQVJDSCBkZWZpbmUgaXMgcHJvdmlkZWQgYnkgZ2NjIDQuOC4gIENvbnN0cnVjdCBpdCBvdGhlcndpc2UuICAqLworI2lmbmRlZiBfX0FSTV9BUkNICisjIGlmZGVmIF9fQVJNX0FSQ0hfMl9fCisjICBkZWZpbmUgX19BUk1fQVJDSCAyCisjIGVsaWYgZGVmaW5lZCAoX19BUk1fQVJDSF8zX18pIHx8IGRlZmluZWQgKF9fQVJNX0FSQ0hfM01fXykKKyMgIGRlZmluZSBfX0FSTV9BUkNIIDMKKyMgZWxpZiBkZWZpbmVkIChfX0FSTV9BUkNIXzRfXykgfHwgZGVmaW5lZCAoX19BUk1fQVJDSF80VF9fKQorIyAgZGVmaW5lIF9fQVJNX0FSQ0ggNAorIyBlbGlmIGRlZmluZWQgKF9fQVJNX0FSQ0hfNV9fKSB8fCBkZWZpbmVkIChfX0FSTV9BUkNIXzVFX18pIFwKKyAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNVRfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzVURV9fKSBcCisgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzVURUpfXykKKyMgIGRlZmluZSBfX0FSTV9BUkNIIDUKKyMgZWxpZiBkZWZpbmVkIChfX0FSTV9BUkNIXzZfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZKX18pIFwKKyAgICAgICB8fCBkZWZpbmVkIChfX0FSTV9BUkNIXzZaX18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF82WktfXykgXAorICAgICAgIHx8IGRlZmluZWQgKF9fQVJNX0FSQ0hfNktfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZUMl9fKQorIyAgZGVmaW5lIF9fQVJNX0FSQ0ggNgorIyBlbGlmIGRlZmluZWQgKF9fQVJNX0FSQ0hfN19fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0FfXykgXAorICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83Ul9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN01fXykgXAorICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83RU1fXykKKyMgIGRlZmluZSBfX0FSTV9BUkNIIDcKKyMgZWxzZQorICAgLyogY291bGQgbm90IGRldGVjdD8gKi8KKyMgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImFkZHMgJTEsICU0LCAlNVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAiYWRjICAlMCwgJTIsICUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZyIiAoKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySSIgKChVU0l0eXBlKShibCkpIF9fQ0xPQkJFUl9DQykKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWJzICUxLCAlNCwgJTVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgInNiYyAgJTAsICUyLCAlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiciIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoYmwpKSBfX0NMT0JCRVJfQ0MpCisjaWYgKGRlZmluZWQgX19BUk1fQVJDSCAmJiBfX0FSTV9BUkNIIDw9IDMpCisjZGVmaW5lIHVtdWxfcHBtbSh4aCwgeGwsIGEsIGIpIFwKKyAgX19hc21fXyAoIkAgSW5saW5lZCB1bXVsX3BwbW1cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkibW92CSV8cjAsICUyLCBsc3IgIzE2CQlAIEFBQUFcbiIgICAgICAgICAgICAgICBcCisJIm1vdgklfHIyLCAlMywgbHNyICMxNgkJQCBCQkJCXG4iICAgICAgICAgICAgICAgXAorCSJiaWMJJXxyMSwgJTIsICV8cjAsIGxzbCAjMTYJCUAgYWFhYVxuIiAgICAgICAgICAgICAgIFwKKwkiYmljCSUwLCAlMywgJXxyMiwgbHNsICMxNgkJQCBiYmJiXG4iICAgICAgICAgICAgICAgXAorCSJtdWwJJTEsICV8cjEsICV8cjIJCQlAIGFhYWEgKiBCQkJCXG4iICAgICAgICBcCisJIm11bAklfHIyLCAlfHIwLCAlfHIyCQlAIEFBQUEgKiBCQkJCXG4iICAgICAgICBcCisJIm11bAklfHIxLCAlMCwgJXxyMQkJCUAgYWFhYSAqIGJiYmJcbiIgICAgICAgIFwKKwkibXVsCSUwLCAlfHIwLCAlMAkJCUAgQUFBQSAqIGJiYmJcbiIgICAgICAgIFwKKwkiYWRkcwklfHIwLCAlMSwgJTAJCQlAIGNlbnRyYWwgc3VtXG4iICAgICAgICBcCisJImFkZGNzCSV8cjIsICV8cjIsICM2NTUzNlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJhZGRzCSUxLCAlfHIxLCAlfHIwLCBsc2wgIzE2XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJhZGMJJTAsICV8cjIsICV8cjAsIGxzciAjMTYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPSZyIiAoKHhoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ciIgKCh4bCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogInIiICgoVVNJdHlwZSkoYSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKShiKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJyMCIsICJyMSIsICJyMiIgX19BTkRfQ0xPQkJFUl9DQykKKyNlbHNlIC8qIF9fQVJNX0FSQ0ggPj0gNCAqLworI2RlZmluZSB1bXVsX3BwbW0oeGgsIHhsLCBhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2FzbV9fICgiQCBJbmxpbmVkIHVtdWxfcHBtbVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICJ1bXVsbCAlMSwgJTAsICUyLCAlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgIDogIj0mciIgKCh4aCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgICI9ciIgKCh4bCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgOiAiciIgKChVU0l0eXBlKShhKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICAgInIiICgoVVNJdHlwZSkoYikpKQorI2VuZGlmIC8qIF9fQVJNX0FSQ0ggPj0gNCAqLworI2RlZmluZSBVTVVMX1RJTUUgMjAKKyNkZWZpbmUgVURJVl9USU1FIDEwMAorI2lmIChkZWZpbmVkIF9fQVJNX0FSQ0ggJiYgX19BUk1fQVJDSCA+PSA1KQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIF9fYXNtX18gKCJjbHogJTAsICUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgIDogIj1yIiAoKGNvdW50KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICA6ICJyIiAoKFVTSXR5cGUpKHgpKSkKKyNlbmRpZiAvKiBfX0FSTV9BUkNIID49IDUgKi8KKyNlbmRpZiAvKiBfX2FybV9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqICBBUk02NCAvIEFhcmNoNjQgICoqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGRzICUxLCAlNCwgJTVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICJhZGMgICUwLCAlMiwgJTNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIDogInIiICgoVURJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgInIiICgoVURJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgInIiICgoVURJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgInIiICgoVURJdHlwZSkoYmwpKSBfX0NMT0JCRVJfQ0MpCisjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgic3VicyAlMSwgJTQsICU1XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAic2JjICAlMCwgJTIsICUzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICI9JnIiICgoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICA6ICJyIiAoKFVESXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICJyIiAoKFVESXR5cGUpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICJyIiAoKFVESXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICJyIiAoKFVESXR5cGUpKGJsKSkgX19DTE9CQkVSX0NDKQorI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVREl0eXBlIF9fbTAgPSAobTApLCBfX20xID0gKG0xKSwgX19waDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAocGwpID0gX19tMCAqIF9fbTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbV9fICgidW11bGggJTAsJTEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICA6ICI9ciIgKF9fcGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICA6ICJyIiAoX19tMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICJyIiAoX19tMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAocGgpID0gX19waDsgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIF9fYXNtX18gKCJjbHogJTAsICUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIDogIj1yIiAoKGNvdW50KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIDogInIiICgoVURJdHlwZSkoeCkpKQorI2VuZGlmIC8qIF9fYWFyY2g2NF9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgQ0xJUFBFUiAgKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZCAoX19jbGlwcGVyX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgKHt1bmlvbiB7VURJdHlwZSBfX2xsOwkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19sLCBfX2g7fSBfX2k7CQkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICBfX2FzbV9fICgibXVsd3V4ICUyLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoX194eC5fX2xsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJTAiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyIiAoKFVTSXR5cGUpKHYpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAodzEpID0gX194eC5fX2kuX19oOyAodzApID0gX194eC5fX2kuX19sO30pCisjZGVmaW5lIHNtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgKHt1bmlvbiB7REl0eXBlIF9fbGw7IAkJCQkJCVwKKwkgICBzdHJ1Y3Qge1NJdHlwZSBfX2wsIF9faDt9IF9faTsJCQkJXAorCSAgfSBfX3h4OwkJCQkJCQlcCisgIF9fYXNtX18gKCJtdWx3eCAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiIChfX3h4Ll9fbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlMCIgKChTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoU0l0eXBlKSh2KSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICh3MSkgPSBfX3h4Ll9faS5fX2g7ICh3MCkgPSBfX3h4Ll9faS5fX2w7fSkKKyNkZWZpbmUgX191bXVsc2lkaTModSwgdikgXAorICAoe1VESXR5cGUgX193OwkJCQkJCQlcCisgICAgX19hc21fXyAoIm11bHd1eCAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKF9fdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIiUwIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKChVU0l0eXBlKSh2KSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX193OyB9KQorI2VuZGlmIC8qIF9fY2xpcHBlcl9fICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBHTUlDUk8gICoqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkIChfX2dtaWNyb19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImFkZC53ICU1LCUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAiYWRkeCAlMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1nIiAoKFVTSXR5cGUpKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZnIiAoKFVTSXR5cGUpKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlMCIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiJTEiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGJsKSkpCisjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgic3ViLncgJTUsJTFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICJzdWJ4ICUzLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWciICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JmciICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIxIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgdW11bF9wcG1tKHBoLCBwbCwgbTAsIG0xKSBcCisgIF9fYXNtX18gKCJtdWx4ICUzLCUwLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWciICgoVVNJdHlwZSkocGgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ciIgKChVU0l0eXBlKShwbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKFVTSXR5cGUpKG0wKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShtMSkpKQorI2RlZmluZSB1ZGl2X3Fybm5kKHEsIHIsIG5oLCBubCwgZCkgXAorICBfX2FzbV9fICgiZGl2eCAlNCwlMCwlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1nIiAoKFVTSXR5cGUpKHEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPXIiICgoVVNJdHlwZSkocikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIxIiAoKFVTSXR5cGUpKG5oKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIjAiICgoVVNJdHlwZSkobmwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShkKSkpCisjZGVmaW5lIGNvdW50X2xlYWRpbmdfemVyb3MoY291bnQsIHgpIFwKKyAgX19hc21fXyAoImJzY2gvMSAlMSwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZyIgKGNvdW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogImciICgoVVNJdHlwZSkoeCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMCIgKChVU0l0eXBlKTApKQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBIUFBBICAqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkIChfX2hwcGEpICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgiCWFkZCAlNCwlNSwlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgIglhZGRjICUyLCUzLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiVyTSIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAick0iICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlck0iICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJNIiAoKFVTSXR5cGUpKGJsKSkpCisjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgiCXN1YiAlNCwlNSwlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAiCXN1YmIgJTIsJTMsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAick0iICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyTSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJNIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAick0iICgoVVNJdHlwZSkoYmwpKSkKKyNpZiBkZWZpbmVkIChfUEFfUklTQzFfMSkKKyNkZWZpbmUgdW11bF9wcG1tKHdoLCB3bCwgdSwgdikgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIHVuaW9uIHtVREl0eXBlIF9fbGw7CQkJCQkJXAorCSAgIHN0cnVjdCB7VVNJdHlwZSBfX2gsIF9fbDt9IF9faTsJCQkJXAorCSAgfSBfX3h4OwkJCQkJCQlcCisgICAgX19hc21fXyAoIgl4bXB5dSAlMSwlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPSpmIiAoX194eC5fX2xsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICIqZiIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgIipmIiAoKFVTSXR5cGUpKHYpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh3aCkgPSBfX3h4Ll9faS5fX2g7CQkJCQkJXAorICAgICh3bCkgPSBfX3h4Ll9faS5fX2w7CQkJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBVTVVMX1RJTUUgOAorI2RlZmluZSBVRElWX1RJTUUgNjAKKyNlbHNlCisjZGVmaW5lIFVNVUxfVElNRSA0MAorI2RlZmluZSBVRElWX1RJTUUgODAKKyNlbmRpZgorI2lmbmRlZiBMT05HTE9OR19TVEFOREFMT05FCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIGRvIHsgVVNJdHlwZSBfX3I7CQkJCQkJCVwKKyAgICAocSkgPSBfX3VkaXZfcXJubmQgKCZfX3IsIChuMSksIChuMCksIChkKSk7IAkJCVwKKyAgICAocikgPSBfX3I7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCitleHRlcm4gVVNJdHlwZSBfX3VkaXZfcXJubmQgKCk7CisjZW5kaWYgLyogTE9OR0xPTkdfU1RBTkRBTE9ORSAqLworI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIGRvIHsJCQkJCQkJCSAgICAgICBcCisgICAgVVNJdHlwZSBfX3RtcDsJCQkJCQkgICAgICAgXAorICAgIF9fYXNtX18gKAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICIJbGRpICAgICAgICAgICAgIDEsJTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICAgICAgICIJZXh0cnUsPSAJJTEsMTUsMTYsJSVyMCAgOyBCaXRzIDMxLi4xNiB6ZXJvPyAgICAgICAgIFxuIiBcCisgICAgICAgIglleHRydSx0cgklMSwxNSwxNiwlMSAgICA7IE5vLiAgU2hpZnQgZG93biwgc2tpcCBhZGQuXG4iIFwKKyAgICAgICAiCWxkbwkJMTYoJTApLCUwICAgICAgOyBZZXMuCVBlcmZvcm0gYWRkLiAgICAgICBcbiIgXAorICAgICAgICIJZXh0cnUsPSAJJTEsMjMsOCwlJXIwICAgOyBCaXRzIDE1Li44IHplcm8/ICAgICAgICAgIFxuIiBcCisgICAgICAgIglleHRydSx0cgklMSwyMyw4LCUxICAgICA7IE5vLiAgU2hpZnQgZG93biwgc2tpcCBhZGQuXG4iIFwKKyAgICAgICAiCWxkbwkJOCglMCksJTAgICAgICAgOyBZZXMuCVBlcmZvcm0gYWRkLiAgICAgICBcbiIgXAorICAgICAgICIJZXh0cnUsPSAJJTEsMjcsNCwlJXIwICAgOyBCaXRzIDcuLjQgemVybz8gICAgICAgICAgIFxuIiBcCisgICAgICAgIglleHRydSx0cgklMSwyNyw0LCUxICAgICA7IE5vLiAgU2hpZnQgZG93biwgc2tpcCBhZGQuXG4iIFwKKyAgICAgICAiCWxkbwkJNCglMCksJTAgICAgICAgOyBZZXMuCVBlcmZvcm0gYWRkLiAgICAgICBcbiIgXAorICAgICAgICIJZXh0cnUsPSAJJTEsMjksMiwlJXIwICAgOyBCaXRzIDMuLjIgemVybz8gICAgICAgICAgIFxuIiBcCisgICAgICAgIglleHRydSx0cgklMSwyOSwyLCUxICAgICA7IE5vLiAgU2hpZnQgZG93biwgc2tpcCBhZGQuXG4iIFwKKyAgICAgICAiCWxkbwkJMiglMCksJTAgICAgICAgOyBZZXMuCVBlcmZvcm0gYWRkLiAgICAgICBcbiIgXAorICAgICAgICIJZXh0cnUJCSUxLDMwLDEsJTEgICAgIDsgRXh0cmFjdCBiaXQgMS4gICAgICAgICAgICBcbiIgXAorICAgICAgICIJc3ViCQklMCwlMSwlMCAgICAgICA7IFN1YnRyYWN0IGl0LiAgICAgICAgICAgICAgIiAgIFwKKyAgICAgICA6ICI9ciIgKGNvdW50KSwgIj1yIiAoX190bXApIDogIjEiICh4KSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2VuZGlmIC8qIGhwcGEgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIEkzNzAgICoqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIChkZWZpbmVkIChfX2kzNzBfXykgfHwgZGVmaW5lZCAoX19tdnNfXykpICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIHVtdWxfcHBtbSh4aCwgeGwsIG0wLCBtMSkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIHVuaW9uIHtVREl0eXBlIF9fbGw7CQkJCQkJXAorCSAgIHN0cnVjdCB7VVNJdHlwZSBfX2gsIF9fbDt9IF9faTsJCQkJXAorCSAgfSBfX3h4OwkJCQkJCQlcCisgICAgVVNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoIm1yICUwLCUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKF9feHguX19pLl9faCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgIj1yIiAoX194eC5fX2kuX19sKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiJTEiIChfX20wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICJyIiAoX19tMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeGgpID0gX194eC5fX2kuX19oOyAoeGwpID0gX194eC5fX2kuX19sOwkJCQlcCisgICAgKHhoKSArPSAoKCgoU0l0eXBlKSBfX20wID4+IDMxKSAmIF9fbTEpCQkJCVwKKwkgICAgICsgKCgoU0l0eXBlKSBfX20xID4+IDMxKSAmIF9fbTApKTsgCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBzbXVsX3BwbW0oeGgsIHhsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICB1bmlvbiB7REl0eXBlIF9fbGw7IAkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19oLCBfX2w7fSBfX2k7CQkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICAgIF9fYXNtX18gKCJtciAlMCwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPXIiIChfX3h4Ll9faS5fX2gpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICI9ciIgKF9feHguX19pLl9fbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIiUxIiAobTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKG0xKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHhoKSA9IF9feHguX19pLl9faDsgKHhsKSA9IF9feHguX19pLl9fbDsJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBzZGl2X3Fybm5kKHEsIHIsIG4xLCBuMCwgZCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIHVuaW9uIHtESXR5cGUgX19sbDsgCQkJCQkJXAorCSAgIHN0cnVjdCB7VVNJdHlwZSBfX2gsIF9fbDt9IF9faTsJCQkJXAorCSAgfSBfX3h4OwkJCQkJCQlcCisgICAgX194eC5fX2kuX19oID0gbjE7IF9feHguX19pLl9fbCA9IG4wOwkJCQlcCisgICAgX19hc21fXyAoImRyICUwLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKF9feHguX19sbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIjAiIChfX3h4Ll9fbGwpLCAiciIgKGQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChxKSA9IF9feHguX19pLl9fbDsgKHIpID0gX194eC5fX2kuX19oOwkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIEkzODYgICoqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIChkZWZpbmVkIChfX2kzODZfXykgfHwgZGVmaW5lZCAoX19pNDg2X18pKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImFkZGwgJTUsJTFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAiYWRjbCAlMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZyIiAoKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlMCIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiJTEiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGJsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIF9fQ0xPQkJFUl9DQykKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWJsICU1LCUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgInNiYmwgJTMsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiMCIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIjEiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShibCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBfX0NMT0JCRVJfQ0MpCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgX19hc21fXyAoIm11bGwgJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9YSIgKCh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1kIiAoKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJTAiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJybSIgKChVU0l0eXBlKSh2KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIF9fQ0xPQkJFUl9DQykKKyNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpIFwKKyAgX19hc21fXyAoImRpdmwgJTQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9YSIgKChxKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1kIiAoKHIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiMCIgKChVU0l0eXBlKShuMCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIxIiAoKFVTSXR5cGUpKG4xKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJtIiAoKFVTSXR5cGUpKGQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgX19DTE9CQkVSX0NDKQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVNJdHlwZSBfX2NidG1wOwkJCQkJCQlcCisgICAgX19hc21fXyAoImJzcmwgJTEsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKF9fY2J0bXApIDogInJtIiAoKFVTSXR5cGUpKHgpKSAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIF9fQ0xPQkJFUl9DQyk7CQkJCQkJXAorICAgIChjb3VudCkgPSBfX2NidG1wIF4gMzE7CQkJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF90cmFpbGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBfX2FzbV9fICgiYnNmbCAlMSwlMCIgOiAiPXIiIChjb3VudCkgOiAicm0iICgoVVNJdHlwZSkoeCkpIF9fQ0xPQkJFUl9DQykKKyNpZm5kZWYgVU1VTF9USU1FCisjZGVmaW5lIFVNVUxfVElNRSA0MAorI2VuZGlmCisjaWZuZGVmIFVESVZfVElNRQorI2RlZmluZSBVRElWX1RJTUUgNDAKKyNlbmRpZgorI2VuZGlmIC8qIDgweDg2ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKiBBTUQ2NCAvIHg4Ni02NCAqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX3g4Nl82NCkgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGRxICU1LCUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgImFkY3EgJTMsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiMCIgKChVREl0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAgKChVREl0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIjEiICgoVURJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgICgoVURJdHlwZSkoYmwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBfX0NMT0JCRVJfQ0MpCisjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgic3VicSAlNSwlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICJzYmJxICUzLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVURJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVREl0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIxIiAoKFVESXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVURJdHlwZSkoYmwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgX19DTE9CQkVSX0NDKQorI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgIF9fYXNtX18gKCJtdWxxICUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWEiICgodzApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ZCIgKCh3MSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVURJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAicm0iICgoVURJdHlwZSkodikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBfX0NMT0JCRVJfQ0MpCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIF9fYXNtX18gKCJkaXZxICU0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWEiICgocSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ZCIgKChyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVURJdHlwZSkobjApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMSIgKChVREl0eXBlKShuMSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJybSIgKChVREl0eXBlKShkKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIF9fQ0xPQkJFUl9DQykKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVESXR5cGUgX19jYnRtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtX18gKCJic3JxICUxLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogIj1yIiAoX19jYnRtcCkgOiAicm0iICgoVURJdHlwZSkoeCkpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIF9fQ0xPQkJFUl9DQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChjb3VudCkgPSBfX2NidG1wIF4gNjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF90cmFpbGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVESXR5cGUgX19jYnRtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtX18gKCJic2ZxICUxLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogIj1yIiAoX19jYnRtcCkgOiAicm0iICgoVURJdHlwZSkoeCkpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIF9fQ0xPQkJFUl9DQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChjb3VudCkgPSBfX2NidG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2lmbmRlZiBVTVVMX1RJTUUKKyNkZWZpbmUgVU1VTF9USU1FIDQwCisjZW5kaWYKKyNpZm5kZWYgVURJVl9USU1FCisjZGVmaW5lIFVESVZfVElNRSA0MAorI2VuZGlmCisjZW5kaWYgLyogX194ODZfNjQgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIEk4NjAgICoqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9faTg2MF9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSByc2hpZnRfcmhsYyhyLGgsbCxjKSBcCisgIF9fYXNtX18gKCJzaHIgJTMscjAscjBcbiIgIFwKKyAgICAgICAgICAgInNocmQgJTEsJTIsJTAiICAgXAorCSAgICI9ciIgKHIpIDogInIiIChoKSwgInIiIChsKSwgInJuIiAoYykpCisjZW5kaWYgLyogaTg2MCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIEk5NjAgICoqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9faTk2MF9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoImNtcG8gMSwwXG4iICAgICAgXAorICAgICAgICAgICAiYWRkYyAlNSwlNCwlMVxuIiBcCisgICAgICAgICAgICJhZGRjICUzLCUyLCUwIiAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJWRJIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkSSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIiVkSSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZEkiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJjbXBvIDAsMFxuIiAgICAgIFwKKyAgICAgICAgICAgInN1YmMgJTUsJTQsJTFcbiIgXAorICAgICAgICAgICAic3ViYyAlMywlMiwlMCIgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogImRJIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZEkiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkSSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImRJIiAoKFVTSXR5cGUpKGJsKSkpCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgKHt1bmlvbiB7VURJdHlwZSBfX2xsOwkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19sLCBfX2g7fSBfX2k7CQkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICBfX2FzbV9fICgiZW11bCAgICAgICAgJTIsJTEsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1kIiAoX194eC5fX2xsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJWRJIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkSSIgKChVU0l0eXBlKSh2KSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAodzEpID0gX194eC5fX2kuX19oOyAodzApID0gX194eC5fX2kuX19sO30pCisjZGVmaW5lIF9fdW11bHNpZGkzKHUsIHYpIFwKKyAgKHtVREl0eXBlIF9fdzsJCQkJCQkJXAorICAgIF9fYXNtX18gKCJlbXVsICAgICAgJTIsJTEsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPWQiIChfX3cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICIlZEkiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgImRJIiAoKFVTSXR5cGUpKHYpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fdzsgfSkKKyNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuaCwgbmwsIGQpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICB1bmlvbiB7VURJdHlwZSBfX2xsOwkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19sLCBfX2g7fSBfX2k7CQkJCVwKKwkgIH0gX19ubjsJCQkJCQkJXAorICAgIF9fbm4uX19pLl9faCA9IChuaCk7IF9fbm4uX19pLl9fbCA9IChubCk7CQkJCVwKKyAgICBfX2FzbV9fICgiZWRpdiAlZCwlbiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZCIgKF9fcnEuX19sbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogImRJIiAoX19ubi5fX2xsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZEkiICgoVVNJdHlwZSkoZCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAocikgPSBfX3JxLl9faS5fX2w7IChxKSA9IF9fcnEuX19pLl9faDsJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVNJdHlwZSBfX2NidG1wOwkJCQkJCQlcCisgICAgX19hc21fXyAoInNjYW5iaXQgJTEsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKF9fY2J0bXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogInIiICgoVVNJdHlwZSkoeCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChjb3VudCkgPSBfX2NidG1wIF4gMzE7CQkJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TXzAgKC0zMikgLyogc2ljICovCisjaWYgZGVmaW5lZCAoX19pOTYwbXgpCQkvKiB3aGF0IGlzIHRoZSBwcm9wZXIgc3ltYm9sIHRvIHRlc3Q/Pz8gKi8KKyNkZWZpbmUgcnNoaWZ0X3JobGMocixoLGwsYykgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIHVuaW9uIHtVREl0eXBlIF9fbGw7CQkJCQkJXAorCSAgIHN0cnVjdCB7VVNJdHlwZSBfX2wsIF9faDt9IF9faTsJCQkJXAorCSAgfSBfX25uOwkJCQkJCQlcCisgICAgX19ubi5fX2kuX19oID0gKGgpOyBfX25uLl9faS5fX2wgPSAobCk7CQkJCVwKKyAgICBfX2FzbV9fICgic2hyZSAlMiwlMSwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIj1kIiAocikgOiAiZEkiIChfX25uLl9fbGwpLCAiZEkiIChjKSk7ICAgICAgICAgICAgICAgICAgXAorICB9CisjZW5kaWYgLyogaTk2MG14ICovCisjZW5kaWYgLyogaTk2MCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgNjgwMDAJKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAoZGVmaW5lZCAoX19tYzY4MDAwX18pIHx8IGRlZmluZWQgKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkIChfX05lWFRfXykgfHwgZGVmaW5lZChtYzY4MDIwKSkgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGQlLmwgJTUsJTFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgImFkZHglLmwgJTMsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZCIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mZCIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJTAiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkIiAoKFVTSXR5cGUpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIiUxIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShibCkpKQorI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoInN1YiUubCAlNSwlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAic3VieCUubCAlMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1kIiAoKFVTSXR5cGUpKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZkIiAoKFVTSXR5cGUpKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIwIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImQiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGJsKSkpCisjaWYgKGRlZmluZWQgKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkIChfX05lWFRfXykgfHwgZGVmaW5lZChtYzY4MDIwKSkKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgibXVsdSUubCAlMywlMTolMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1kIiAoKFVTSXR5cGUpKHcwKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPWQiICgoVVNJdHlwZSkodzEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlMCIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImRtaSIgKChVU0l0eXBlKSh2KSkpCisjZGVmaW5lIFVNVUxfVElNRSA0NQorI2RlZmluZSB1ZGl2X3Fybm5kKHEsIHIsIG4xLCBuMCwgZCkgXAorICBfX2FzbV9fICgiZGl2dSUubCAlNCwlMTolMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1kIiAoKFVTSXR5cGUpKHEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPWQiICgoVVNJdHlwZSkocikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIwIiAoKFVTSXR5cGUpKG4wKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIjEiICgoVVNJdHlwZSkobjEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZG1pIiAoKFVTSXR5cGUpKGQpKSkKKyNkZWZpbmUgVURJVl9USU1FIDkwCisjZGVmaW5lIHNkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIF9fYXNtX18gKCJkaXZzJS5sICU0LCUxOiUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWQiICgoVVNJdHlwZSkocSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ZCIgKChVU0l0eXBlKShyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVVNJdHlwZSkobjApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMSIgKChVU0l0eXBlKShuMSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkbWkiICgoVVNJdHlwZSkoZCkpKQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIF9fYXNtX18gKCJiZmZmbyAlMXslYjI6JWIyfSwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWQiICgoVVNJdHlwZSkoY291bnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJvZCIgKChVU0l0eXBlKSh4KSksICJuIiAoMCkpCisjZGVmaW5lIENPVU5UX0xFQURJTkdfWkVST1NfMCAzMgorI2Vsc2UgLyogbm90IG1jNjgwMjAgKi8KKyNkZWZpbmUgdW11bF9wcG1tKHhoLCB4bCwgYSwgYikgXAorICBkbyB7IFVTSXR5cGUgX191bXVsX3RtcDEsIF9fdW11bF90bXAyOwkJCSAgXAorCV9fYXNtX18gKCJ8IElubGluZWQgdW11bF9wcG1tICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbW92ZSUubCAlNSwlMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbW92ZSUubCAlMiwlMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbW92ZSUudyAlMywlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgc3dhcAklMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBzd2FwCSUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHUJJTIsJTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsdQklMywlMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWx1CSUyLCUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIHN3YXAJJTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsdQklNSwlMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhZGQlLmwJJTMsJTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIGpjYwkxZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhZGQlLmwJJSMweDEwMDAwLCUwICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIxOgltb3ZlJS5sICUyLCUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIGNsciUudwklMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgc3dhcAklMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBzd2FwCSUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIGNsciUudwklMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgYWRkJS5sCSUzLCUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhZGR4JS5sICUyLCUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICB8IEVuZCBpbmxpbmVkIHVtdWxfcHBtbSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICA6ICI9JmQiICgoVVNJdHlwZSkoeGgpKSwgIj0mZCIgKChVU0l0eXBlKSh4bCkpLCAgICAgXAorCQkiPWQiIChfX3VtdWxfdG1wMSksICI9JmQiIChfX3VtdWxfdG1wMikgICAgICAgICAgIFwKKwkgICAgICA6ICIlMiIgKChVU0l0eXBlKShhKSksICJkIiAoKFVTSXR5cGUpKGIpKSk7ICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBVTVVMX1RJTUUgMTAwCisjZGVmaW5lIFVESVZfVElNRSA0MDAKKyNlbmRpZiAvKiBub3QgbWM2ODAyMCAqLworI2VuZGlmIC8qIG1jNjgwMDAgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIDg4MDAwCSoqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZCAoX19tODgwMDBfXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGR1LmNvICUxLCVyNCwlcjVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgImFkZHUuY2kgJTAsJXIyLCVyMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiJXJKIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySiIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIiVySiIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickoiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWJ1LmNvICUxLCVyNCwlcjVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgInN1YnUuY2kgJTAsJXIyLCVyMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAickoiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySiIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJKIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickoiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVTSXR5cGUgX19jYnRtcDsJCQkJCQkJXAorICAgIF9fYXNtX18gKCJmZjEgJTAsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPXIiIChfX2NidG1wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJyIiAoKFVTSXR5cGUpKHgpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoY291bnQpID0gX19jYnRtcCBeIDMxOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPU18wIDYzIC8qIHNpYyAqLworI2lmIGRlZmluZWQgKF9fbTg4MTEwX18pCisjZGVmaW5lIHVtdWxfcHBtbSh3aCwgd2wsIHUsIHYpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICB1bmlvbiB7VURJdHlwZSBfX2xsOwkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19oLCBfX2w7fSBfX2k7CQkJCVwKKwkgIH0gX194OwkJCQkJCQlcCisgICAgX19hc21fXyAoIm11bHUuZCAlMCwlMSwlMiIgOiAiPXIiIChfX3guX19sbCkgOiAiciIgKHUpLCAiciIgKHYpKTsgICBcCisgICAgKHdoKSA9IF9feC5fX2kuX19oOyAJCQkJCQlcCisgICAgKHdsKSA9IF9feC5fX2kuX19sOyAJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgICh7dW5pb24ge1VESXR5cGUgX19sbDsJCQkJCQlcCisJICAgc3RydWN0IHtVU0l0eXBlIF9faCwgX19sO30gX19pOwkJCQlcCisJICB9IF9feCwgX19xOwkJCQkJCQlcCisgIF9feC5fX2kuX19oID0gKG4xKTsgX194Ll9faS5fX2wgPSAobjApOwkJCQlcCisgIF9fYXNtX18gKCJkaXZ1LmQgJTAsJTEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiIChfX3EuX19sbCkgOiAiciIgKF9feC5fX2xsKSwgInIiIChkKSk7ICAgICAgICAgICAgICAgIFwKKyAgKHIpID0gKG4wKSAtIF9fcS5fX2wgKiAoZCk7IChxKSA9IF9fcS5fX2w7IH0pCisjZGVmaW5lIFVNVUxfVElNRSA1CisjZGVmaW5lIFVESVZfVElNRSAyNQorI2Vsc2UKKyNkZWZpbmUgVU1VTF9USU1FIDE3CisjZGVmaW5lIFVESVZfVElNRSAxNTAKKyNlbmRpZiAvKiBfX204ODExMF9fICovCisjZW5kaWYgLyogX19tODgwMDBfXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIE1JUFMgICoqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fbWlwc19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2lmIGRlZmluZWQgKF9fY2xhbmdfXykgfHwgKF9fR05VQ19fID49IDUpIHx8IChfX0dOVUNfXyA9PSA0ICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19HTlVDX01JTk9SX18gPj0gNCkKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVESXR5cGUgX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9yID0gKFVESXR5cGUpIHUgKiB2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh3MSkgPSBfciA+PiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh3MCkgPSAoVVNJdHlwZSkgX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2VsaWYgX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID49IDcKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgibXVsdHUgJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1sIiAoKFVTSXR5cGUpKHcwKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPWgiICgoVVNJdHlwZSkodzEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJkIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImQiICgoVVNJdHlwZSkodikpKQorI2Vsc2UKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgibXVsdHUgJTIsJTMgXG4iIFwKKwkgICAibWZsbyAlMCBcbiIgICAgIFwKKwkgICAibWZoaSAlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZCIgKChVU0l0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1kIiAoKFVTSXR5cGUpKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiZCIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkIiAoKFVTSXR5cGUpKHYpKSkKKyNlbmRpZgorI2RlZmluZSBVTVVMX1RJTUUgMTAKKyNkZWZpbmUgVURJVl9USU1FIDEwMAorI2VuZGlmIC8qIF9fbWlwc19fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgTUlQUy82NCAgKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgKGRlZmluZWQgKF9fbWlwcykgJiYgX19taXBzID49IDMpICYmIFdfVFlQRV9TSVpFID09IDY0CisjaWYgKF9fR05VQ19fID49IDUpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpCit0eXBlZGVmIHVuc2lnbmVkIGludCBVVEl0eXBlIF9fYXR0cmlidXRlX18gKChtb2RlIChUSSkpKTsKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVRJdHlwZSBfcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfciA9IChVVEl0eXBlKSB1ICogdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh3MSkgPSBfciA+PiA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHcwKSA9IChVREl0eXBlKSBfcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNlbGlmIF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+PSA3CisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgX19hc21fXyAoImRtdWx0dSAlMiwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9bCIgKChVREl0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1oIiAoKFVESXR5cGUpKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiZCIgKChVREl0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkIiAoKFVESXR5cGUpKHYpKSkKKyNlbHNlCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgX19hc21fXyAoImRtdWx0dSAlMiwlMyBcbiIgICAgXAorCSAgICJtZmxvICUwIFxuIiAgICAgICAgIFwKKwkgICAibWZoaSAlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZCIgKChVREl0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1kIiAoKFVESXR5cGUpKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiZCIgKChVREl0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJkIiAoKFVESXR5cGUpKHYpKSkKKyNlbmRpZgorI2RlZmluZSBVTVVMX1RJTUUgMjAKKyNkZWZpbmUgVURJVl9USU1FIDE0MAorI2VuZGlmIC8qIF9fbWlwc19fICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICAzMjAwMAkqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fbnMzMjAwMF9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICh7dW5pb24ge1VESXR5cGUgX19sbDsJCQkJCQlcCisJICAgc3RydWN0IHtVU0l0eXBlIF9fbCwgX19oO30gX19pOwkJCQlcCisJICB9IF9feHg7CQkJCQkJCVwKKyAgX19hc21fXyAoIm1laWQgJTIsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZyIgKF9feHguX19sbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKSh2KSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKHcxKSA9IF9feHguX19pLl9faDsgKHcwKSA9IF9feHguX19pLl9fbDt9KQorI2RlZmluZSBfX3VtdWxzaWRpMyh1LCB2KSBcCisgICh7VURJdHlwZSBfX3c7CQkJCQkJCVwKKyAgICBfX2FzbV9fICgibWVpZCAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIj1nIiAoX193KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiJTAiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICJnIiAoKFVTSXR5cGUpKHYpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3c7IH0pCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgICh7dW5pb24ge1VESXR5cGUgX19sbDsJCQkJCQlcCisJICAgc3RydWN0IHtVU0l0eXBlIF9fbCwgX19oO30gX19pOwkJCQlcCisJICB9IF9feHg7CQkJCQkJCVwKKyAgX194eC5fX2kuX19oID0gKG4xKTsgX194eC5fX2kuX19sID0gKG4wKTsJCQkJXAorICBfX2FzbV9fICgiZGVpZCAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1nIiAoX194eC5fX2xsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiMCIgKF9feHguX19sbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGQpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAocikgPSBfX3h4Ll9faS5fX2w7IChxKSA9IF9feHguX19pLl9faDsgfSkKKyNkZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MoY291bnQseCkgXAorICBkbyB7CisgICAgX19hc21fXyAoImZmc2QgICAgICAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKSAoY291bnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIjAiICgoVVNJdHlwZSkgMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKChVU0l0eXBlKSAoeCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZW5kaWYgLyogX19uczMyMDAwX18gKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIFBQQyAgKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIChkZWZpbmVkIChfQVJDSF9QUEMpIHx8IGRlZmluZWQgKF9JQk1SMikpICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkgCQkJXAorICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthemV8YWRkemV9ICUwLCUyIiAgICAgICAgICAgXAorCSAgICAgOiAiPXIiICgoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICI9JnIiICgoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2FtZXxhZGRtZX0gJTAsJTIiICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7YSVJNXxhZGQlSTVjfSAlMSwlNCwlNVxuXHR7YWV8YWRkZX0gJTAsJTIsJTMiICAgICAgICAgIFwKKwkgICAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiPSZyIiAoKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgInIiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PSAwKSAJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2Z6ZXxzdWJmemV9ICUwLCUyIiAgICAgICBcCisJICAgICAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICI9JnIiICgoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PX4oVVNJdHlwZSkgMCkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZm1lfHN1YmZtZX0gJTAsJTIiICAgICAgIFwKKwkgICAgICAgOiAiPXIiICgoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09IDApCQkJXAorICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e2FtZXxhZGRtZX0gJTAsJTIiICAgICAgICAgXAorCSAgICAgICA6ICI9ciIgKChzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAiPSZyIiAoKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YXplfGFkZHplfSAlMCwlMiIgICAgICAgICBcCisJICAgICAgIDogIj1yIiAoKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICI9JnIiICgoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTR8c3ViZiVJNGN9ICUxLCU1LCU0XG5cdHtzZmV8c3ViZmV9ICUwLCUzLCUyIiAgICAgIFwKKwkgICAgICAgOiAiPXIiICgoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIj0mciIgKChzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgInIiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIF9fYXNtX18gKCJ7Y250bHp8Y250bHp3fSAlMCwlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoY291bnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJyIiAoKFVTSXR5cGUpKHgpKSkKKyNkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPU18wIDMyCisjaWYgZGVmaW5lZCAoX0FSQ0hfUFBDKQorI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVU0l0eXBlIF9fbTAgPSAobTApLCBfX20xID0gKG0xKTsJCQkJCVwKKyAgICBfX2FzbV9fICgibXVsaHd1ICUwLCUxLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIj1yIiAocGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiJXIiIChfX20wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICJyIiAoX19tMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAocGwpID0gX19tMCAqIF9fbTE7IAkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVU1VTF9USU1FIDE1CisjZGVmaW5lIHNtdWxfcHBtbShwaCwgcGwsIG0wLCBtMSkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoIm11bGh3ICUwLCUxLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChTSXR5cGUpIHBoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIiVyIiAoX19tMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKF9fbTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHBsKSA9IF9fbTAgKiBfX20xOyAJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNNVUxfVElNRSAxNAorI2RlZmluZSBVRElWX1RJTUUgMTIwCisjZWxzZQorI2RlZmluZSB1bXVsX3BwbW0oeGgsIHhsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVU0l0eXBlIF9fbTAgPSAobTApLCBfX20xID0gKG0xKTsJCQkJCVwKKyAgICBfX2FzbV9fICgibXVsICUwLCUyLCUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIj1yIiAoKHhoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiPXEiICgoeGwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJyIiAoX19tMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgInIiIChfX20xKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh4aCkgKz0gKCgoKFNJdHlwZSkgX19tMCA+PiAzMSkgJiBfX20xKQkJCQlcCisJICAgICArICgoKFNJdHlwZSkgX19tMSA+PiAzMSkgJiBfX20wKSk7IAkJCVwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVU1VTF9USU1FIDgKKyNkZWZpbmUgc211bF9wcG1tKHhoLCB4bCwgbTAsIG0xKSBcCisgIF9fYXNtX18gKCJtdWwgJTAsJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoU0l0eXBlKSh4aCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9cSIgKChTSXR5cGUpKHhsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogInIiIChtMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKG0xKSkKKyNkZWZpbmUgU01VTF9USU1FIDQKKyNkZWZpbmUgc2Rpdl9xcm5uZChxLCByLCBuaCwgbmwsIGQpIFwKKyAgX19hc21fXyAoImRpdiAlMCwlMiwlNCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChTSXR5cGUpKHEpKSwgIj1xIiAoKFNJdHlwZSkocikpICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogInIiICgoU0l0eXBlKShuaCkpLCAiMSIgKChTSXR5cGUpKG5sKSksICJyIiAoKFNJdHlwZSkoZCkpKQorI2RlZmluZSBVRElWX1RJTUUgMTAwCisjZW5kaWYKKyNlbmRpZiAvKiBQb3dlciBhcmNoaXRlY3R1cmUgdmFyaWFudHMuCSovCisKKy8qIFBvd2VycGMgNjQgYml0IHN1cHBvcnQgdGFrZW4gZnJvbSBnbXAtNC4xLjIuICovCisvKiBXZSBzaG91bGQgdGVzdCBfSUJNUjIgaGVyZSB3aGVuIHdlIGFkZCBhc3NlbWJseSBzdXBwb3J0IGZvciB0aGUgc3lzdGVtCisgICB2ZW5kb3IgY29tcGlsZXJzLiAgKi8KKyNpZiAwIC8qIE5vdCB5ZXQgZW5hYmxlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgaGFyZHdhcmUgZm9yIGEgdGVzdC4gKi8KKyNpZiAoZGVmaW5lZCAoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkIChfX3Bvd2VycGNfXykpICYmIFdfVFlQRV9TSVpFID09IDY0CisjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkJCQkJXAorICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthemV8YWRkemV9ICUwLCUyIgkJXAorCSAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkgOiAiciIgKGFoKSwgIiVyIiAoYWwpLCAickkiIChibCkpO1wKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gfihVREl0eXBlKSAwKQkJXAorICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAorCSAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkgOiAiciIgKGFoKSwgIiVyIiAoYWwpLCAickkiIChibCkpO1wKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICBfX2FzbV9fICgie2ElSTV8YWRkJUk1Y30gJTEsJTQsJTVcblx0e2FlfGFkZGV9ICUwLCUyLCUzIgkJXAorCSAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkJCQkJCVwKKwkgICAgIDogIiVyIiAoYWgpLCAiciIgKGJoKSwgIiVyIiAoYWwpLCAickkiIChibCkpOwkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGFoKSAmJiAoYWgpID09IDApCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZnplfHN1YmZ6ZX0gJTAsJTIiCVwKKwkgICAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkgOiAiciIgKGJoKSwgInJJIiAoYWwpLCAiciIgKGJsKSk7XAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PSB+KFVESXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2ZtZXxzdWJmbWV9ICUwLCUyIglcCisJICAgICAgIDogIj1yIiAoc2gpLCAiPSZyIiAoc2wpIDogInIiIChiaCksICJySSIgKGFsKSwgInIiIChibCkpO1wKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YW1lfGFkZG1lfSAlMCwlMiIJCVwKKwkgICAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkgOiAiciIgKGFoKSwgInJJIiAoYWwpLCAiciIgKGJsKSk7XAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSB+KFVESXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YXplfGFkZHplfSAlMCwlMiIJCVwKKwkgICAgICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkgOiAiciIgKGFoKSwgInJJIiAoYWwpLCAiciIgKGJsKSk7XAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTR8c3ViZiVJNGN9ICUxLCU1LCU0XG5cdHtzZmV8c3ViZmV9ICUwLCUzLCUyIglcCisJICAgICAgIDogIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCQlcCisJICAgICAgIDogInIiIChhaCksICJyIiAoYmgpLCAickkiIChhbCksICJyIiAoYmwpKTsJCVwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBfX2FzbV9fICgiY250bHpkICUwLCUxIiA6ICI9ciIgKGNvdW50KSA6ICJyIiAoeCkpCisjZGVmaW5lIENPVU5UX0xFQURJTkdfWkVST1NfMCA2NAorI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVREl0eXBlIF9fbTAgPSAobTApLCBfX20xID0gKG0xKTsJCQkJCVwKKyAgICBfX2FzbV9fICgibXVsaGR1ICUwLCUxLCUyIiA6ICI9ciIgKHBoKSA6ICIlciIgKG0wKSwgInIiIChtMSkpOwlcCisgICAgKHBsKSA9IF9fbTAgKiBfX20xOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIFVNVUxfVElNRSAxNQorI2RlZmluZSBzbXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBESXR5cGUgX19tMCA9IChtMCksIF9fbTEgPSAobTEpOwkJCQkJXAorICAgIF9fYXNtX18gKCJtdWxoZCAlMCwlMSwlMiIgOiAiPXIiIChwaCkgOiAiJXIiIChtMCksICJyIiAobTEpKTsJXAorICAgIChwbCkgPSBfX20wICogX19tMTsJCQkJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBTTVVMX1RJTUUgMTQgIC8qID8/PyAqLworI2RlZmluZSBVRElWX1RJTUUgMTIwIC8qID8/PyAqLworI2VuZGlmIC8qIDY0LWJpdCBQb3dlclBDLiAgKi8KKyNlbmRpZiAvKiBpZiAwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgUFlSICAqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZCAoX19weXJfXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGR3ICAgICAgICAlNSwlMSBcbiIgXAorCSAgICJhZGR3YwklMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlMSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWJ3ICAgICAgICAlNSwlMSBcbiIgXAorCSAgICJzdWJ3YgklMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIjAiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIxIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmwpKSkKKy8qIFRoaXMgaW5zbiB3b3JrcyBvbiBQeXJhbWlkcyB3aXRoIEFQLCBYUCwgb3IgTUkgQ1BVcywgYnV0IG5vdCB3aXRoIFNQLiAgKi8KKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAoe3VuaW9uIHtVREl0eXBlIF9fbGw7CQkJCQkJXAorCSAgIHN0cnVjdCB7VVNJdHlwZSBfX2gsIF9fbDt9IF9faTsJCQkJXAorCSAgfSBfX3h4OwkJCQkJCQlcCisgIF9fYXNtX18gKCJtb3Z3ICUxLCVSMCBcbiIgXAorCSAgICJ1ZW11bCAlMiwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPSZyIiAoX194eC5fX2xsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJnIiAoKFVTSXR5cGUpICh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkodikpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICh3MSkgPSBfX3h4Ll9faS5fX2g7ICh3MCkgPSBfX3h4Ll9faS5fX2w7fSkKKyNlbmRpZiAvKiBfX3B5cl9fICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBSVC9ST01QICAqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkIChfX2libTAzMl9fKSAvKiBSVC9ST01QICovCSYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgiYSAlMSwlNSBcbiIgXAorCSAgICJhZSAlMCwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlMSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzICUxLCU1XG4iIFwKKwkgICAic2UgJTAsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIwIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyIiAoKFVTSXR5cGUpKGJsKSkpCisjZGVmaW5lIHVtdWxfcHBtbShwaCwgcGwsIG0wLCBtMSkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVTSXR5cGUgX19tMCA9IChtMCksIF9fbTEgPSAobTEpOwkJCQkJXAorICAgIF9fYXNtX18gKAkJCQkJCQkJXAorICAgICAgICJzICAgICAgIHIyLHIyICAgIFxuIiBcCisgICAgICAgIm10cwlyMTAsJTIgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgIm0JcjIsJTMgICAgXG4iIFwKKyAgICAgICAibQlyMiwlMyAgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgIm0JcjIsJTMgICAgXG4iIFwKKyAgICAgICAibQlyMiwlMyAgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgIm0JcjIsJTMgICAgXG4iIFwKKyAgICAgICAibQlyMiwlMyAgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgIm0JcjIsJTMgICAgXG4iIFwKKyAgICAgICAibQlyMiwlMyAgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgIm0JcjIsJTMgICAgXG4iIFwKKyAgICAgICAibQlyMiwlMyAgICBcbiIgXAorICAgICAgICJtCXIyLCUzICAgIFxuIiBcCisgICAgICAgImNhcwklMCxyMixyMCBcbiIgXAorICAgICAgICJtZnMJcjEwLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShwaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgIj1yIiAoKFVTSXR5cGUpKHBsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiJXIiIChfX20wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSJyIiAoX19tMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAicjIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHBoKSArPSAoKCgoU0l0eXBlKSBfX20wID4+IDMxKSAmIF9fbTEpCQkJCVwKKwkgICAgICsgKCgoU0l0eXBlKSBfX20xID4+IDMxKSAmIF9fbTApKTsgCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBVTVVMX1RJTUUgMjAKKyNkZWZpbmUgVURJVl9USU1FIDIwMAorI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKCh4KSA+PSAweDEwMDAwKSAJCQkJCQlcCisgICAgICBfX2FzbV9fICgiY2x6ICAgICAlMCwlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKGNvdW50KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKSh4KSA+PiAxNikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsgCQkJCQkJCQlcCisJX19hc21fXyAoImNseiAgICUwLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJIDogIj1yIiAoKFVTSXR5cGUpKGNvdW50KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSA6ICJyIiAoKFVTSXR5cGUpKHgpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShjb3VudCkgKz0gMTY7CQkJCQkJCVwKKyAgICAgIH0gCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYgLyogUlQvUk9NUCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKiAgU0gyICAqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgKGRlZmluZWQgKF9fc2gyX18pIHx8IGRlZmluZWQoX19zaDNfXykgfHwgZGVmaW5lZChfX1NINF9fKSApIFwKKyAgICAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgIF9fYXNtX18gKAkJCQkJCQkJXAorICAgICAgICAiZG11bHUubCAlMiwlM1xuIiAgXAorCSJzdHMJbWFjbCwlMVxuIiBcCisJInN0cwltYWNoLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKSh3MSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj1yIiAoKFVTSXR5cGUpKHcwKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiciIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyIiAoKFVTSXR5cGUpKHYpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIm1hY2wiLCAibWFjaCIpCisjZGVmaW5lIFVNVUxfVElNRSA1CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBTUEFSQwkqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGRjYyAlcjQsJTUsJTFcbiIgXAorCSAgICJhZGR4ICVyMiwlMywlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiVySiIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoYmgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgX19DTE9CQkVSX0NDKQorI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgX19hc21fXyAoInN1YmNjICVyNCwlNSwlMVxuIiBcCisJICAgInN1YnggJXIyLCUzLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAickoiICgoVVNJdHlwZSkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJySSIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJKIiAoKFVTSXR5cGUpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoYmwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBfX0NMT0JCRVJfQ0MpCisjaWYgZGVmaW5lZCAoX19zcGFyY192OF9fKQorLyogRG9uJ3QgbWF0Y2ggaW1tZWRpYXRlIHJhbmdlIGJlY2F1c2UsIDEpIGl0IGlzIG5vdCBvZnRlbiB1c2VmdWwsCisgICAyKSB0aGUgJ0knIGZsYWcgdGhpbmtzIG9mIHRoZSByYW5nZSBhcyBhIDEzIGJpdCBzaWduZWQgaW50ZXJ2YWwsCisgICB3aGlsZSB3ZSB3YW50IHRvIG1hdGNoIGEgMTMgYml0IGludGVydmFsLCBzaWduIGV4dGVuZGVkIHRvIDMyIGJpdHMsCisgICBidXQgSU5URVJQUkVURUQgQVMgVU5TSUdORUQuICAqLworI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgIF9fYXNtX18gKCJ1bXVsICUyLCUzLCUxO3JkICUleSwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkodzEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ciIgKChVU0l0eXBlKSh3MCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogInIiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKSh2KSkpCisjZGVmaW5lIFVNVUxfVElNRSA1CisjaWZuZGVmIFNVUEVSU1BBUkMJLyogU3VwZXJTUEFSQydzIHVkaXYgb25seSBoYW5kbGVzIDUzIGJpdCBkaXZpZGVuZHMgKi8KKyNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVU0l0eXBlIF9fcTsJCQkJCQkJXAorICAgIF9fYXNtX18gKCJtb3YgJTEsJSV5O25vcDtub3A7bm9wO3VkaXYgJTIsJTMsJTAiICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoX19xKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJyIiAoKFVTSXR5cGUpKG4xKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgInIiICgoVVNJdHlwZSkobjApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiciIgKChVU0l0eXBlKShkKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHIpID0gKG4wKSAtIF9fcSAqIChkKTsJCQkJCQlcCisgICAgKHEpID0gX19xOwkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBVRElWX1RJTUUgMjUKKyNlbmRpZiAvKiBTVVBFUlNQQVJDICovCisjZWxzZSAvKiAhIF9fc3BhcmNfdjhfXyAqLworI2lmIGRlZmluZWQgKF9fc3BhcmNsaXRlX18pCisvKiBUaGlzIGhhcyBoYXJkd2FyZSBtdWx0aXBseSBidXQgbm90IGRpdmlkZS4gIEl0IGFsc28gaGFzIHR3byBhZGRpdGlvbmFsCisgICBpbnN0cnVjdGlvbnMgc2NhbiAoZmZzIGZyb20gaGlnaCBiaXQpIGFuZCBkaXZzY2MuICAqLworI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgIF9fYXNtX18gKCJ1bXVsICUyLCUzLCUxO3JkICUleSwlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkodzEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ciIgKChVU0l0eXBlKSh3MCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogInIiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKSh2KSkpCisjZGVmaW5lIFVNVUxfVElNRSA1CisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIF9fYXNtX18gKCIhIElubGluZWQgdWRpdl9xcm5uZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIHdyCSUlZzAsJTIsJSV5CSEgTm90IGEgZGVsYXllZCB3cml0ZSBmb3Igc3BhcmNsaXRlICBcbiIgXAorICIgICAgICAgIHRzdAklJWcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUzLCU0LCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgZGl2c2NjCSUlZzEsJTQsJTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgcmQJJSV5LCUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIGJsLGEgMWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhZGQJJTEsJTQsJTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIxOgkhIEVuZCBvZiBpbmxpbmUgdWRpdl9xcm5uZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoKFVTSXR5cGUpKHEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPXIiICgoVVNJdHlwZSkocikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJyIiAoKFVTSXR5cGUpKG4xKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgoVVNJdHlwZSkobjApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAickkiICgoVVNJdHlwZSkoZCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlZzEiIF9fQU5EX0NMT0JCRVJfQ0MpCisjZGVmaW5lIFVESVZfVElNRSAzNworI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zKGNvdW50LCB4KSBcCisgIF9fYXNtX18gKCJzY2FuICUxLDAsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICJyIiAoKFVTSXR5cGUpKGNvdW50KSkpCisvKiBFYXJseSBzcGFyY2xpdGVzIHJldHVybiA2MyBmb3IgYW4gYXJndW1lbnQgb2YgMCwgYnV0IHRoZXkgd2FybiB0aGF0IGZ1dHVyZQorICAgaW1wbGVtZW50YXRpb25zIG1pZ2h0IGNoYW5nZSB0aGlzLiAgVGhlcmVmb3JlLCBsZWF2ZSBDT1VOVF9MRUFESU5HX1pFUk9TXzAKKyAgIHVuZGVmaW5lZC4gICovCisjZW5kaWYgLyogX19zcGFyY2xpdGVfXyAqLworI2VuZGlmIC8qIF9fc3BhcmNfdjhfXyAqLworLyogRGVmYXVsdCB0byBzcGFyYyB2NyB2ZXJzaW9ucyBvZiB1bXVsX3BwbW0gYW5kIHVkaXZfcXJubmQuICAqLworI2lmbmRlZiB1bXVsX3BwbW0KKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgiISBJbmxpbmVkIHVtdWxfcHBtbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIHdyCSUlZzAsJTIsJSV5CSEgU1BBUkMgaGFzIDAtMyBkZWxheSBpbnNuIGFmdGVyIGEgd3IgIFxuIiBcCisgIiAgICAgICAgc3JhCSUzLDMxLCUlZzIJISBEb24ndCBtb3ZlIHRoaXMgaW5zbiAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhbmQJJTIsJSVnMiwlJWcyCSEgRG9uJ3QgbW92ZSB0aGlzIGluc24gICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgYW5kY2MJJSVnMCwwLCUlZzEJISBEb24ndCBtb3ZlIHRoaXMgaW5zbiAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsJTMsJSVnMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBtdWxzY2MJJSVnMSwlMywlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorICIgICAgICAgIG11bHNjYwklJWcxLCUzLCUlZzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgbXVsc2NjCSUlZzEsMCwlJWcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKyAiICAgICAgICBhZGQJJSVnMSwlJWcyLCUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisgIiAgICAgICAgcmQJJSV5LCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgoVVNJdHlwZSkodzEpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9ciIgKChVU0l0eXBlKSh3MCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiVySSIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKChVU0l0eXBlKSh2KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIlZzEiLCAiJWcyIiBfX0FORF9DTE9CQkVSX0NDKQorI2RlZmluZSBVTVVMX1RJTUUgMzkJCS8qIDM5IGluc3RydWN0aW9ucyAqLworI2VuZGlmCisjaWZuZGVmIHVkaXZfcXJubmQKKyNpZm5kZWYgTE9OR0xPTkdfU1RBTkRBTE9ORQorI2RlZmluZSB1ZGl2X3Fybm5kKHEsIHIsIG4xLCBuMCwgZCkgXAorICBkbyB7IFVTSXR5cGUgX19yOwkJCQkJCQlcCisgICAgKHEpID0gX191ZGl2X3Fybm5kICgmX19yLCAobjEpLCAobjApLCAoZCkpOyAJCQlcCisgICAgKHIpID0gX19yOwkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorZXh0ZXJuIFVTSXR5cGUgX191ZGl2X3Fybm5kICgpOworI2RlZmluZSBVRElWX1RJTUUgMTQwCisjZW5kaWYgLyogTE9OR0xPTkdfU1RBTkRBTE9ORSAqLworI2VuZGlmIC8qIHVkaXZfcXJubmQgKi8KKyNlbmRpZiAvKiBfX3NwYXJjX18gKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKiogIFZBWCAgKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fdmF4X18pICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgiYWRkbDIgJTUsJTFcbiIgXAorCSAgICJhZHdjICUzLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPWciICgoVVNJdHlwZSkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JmciICgoVVNJdHlwZSkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKFVTSXR5cGUpKGFoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlMSIgKChVU0l0eXBlKShhbCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgImciICgoVVNJdHlwZSkoYmwpKSkKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJzdWJsMiAlNSwlMVxuIiBcCisJICAgInNid2MgJTMsJTAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICI9ZyIgKChVU0l0eXBlKShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIj0mZyIgKChVU0l0eXBlKShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiMCIgKChVU0l0eXBlKShhaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJnIiAoKFVTSXR5cGUpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIjEiICgoVVNJdHlwZSkoYWwpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiZyIgKChVU0l0eXBlKShibCkpKQorI2RlZmluZSB1bXVsX3BwbW0oeGgsIHhsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICB1bmlvbiB7VURJdHlwZSBfX2xsOwkJCQkJCVwKKwkgICBzdHJ1Y3Qge1VTSXR5cGUgX19sLCBfX2g7fSBfX2k7CQkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICAgIFVTSXR5cGUgX19tMCA9IChtMCksIF9fbTEgPSAobTEpOwkJCQkJXAorICAgIF9fYXNtX18gKCJlbXVsICUxLCUyLCQwLCUwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPWciIChfX3h4Ll9fbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJnIiAoX19tMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgImciIChfX20xKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh4aCkgPSBfX3h4Ll9faS5fX2g7ICh4bCkgPSBfX3h4Ll9faS5fX2w7CQkJCVwKKyAgICAoeGgpICs9ICgoKChTSXR5cGUpIF9fbTAgPj4gMzEpICYgX19tMSkJCQkJXAorCSAgICAgKyAoKChTSXR5cGUpIF9fbTEgPj4gMzEpICYgX19tMCkpOyAJCQlcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIHNkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgdW5pb24ge0RJdHlwZSBfX2xsOyAJCQkJCQlcCisJICAgc3RydWN0IHtTSXR5cGUgX19sLCBfX2g7fSBfX2k7CQkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICAgIF9feHguX19pLl9faCA9IG4xOyBfX3h4Ll9faS5fX2wgPSBuMDsJCQkJXAorICAgIF9fYXNtX18gKCJlZGl2ICUzLCUyLCUwLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgOiAiPWciIChxKSwgIj1nIiAocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICJnIiAoX194eC5fX2xsKSwgImciIChkKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBfX3ZheF9fICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqICBaODAwMAkqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9fejgwMDBfXykgJiYgV19UWVBFX1NJWkUgPT0gMTYKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIF9fYXNtX18gKCJhZGQgJUgxLCVINVxuXHRhZGMgICVIMCwlSDMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgOiAiPXIiICgodW5zaWduZWQgaW50KShzaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICI9JnIiICgodW5zaWduZWQgaW50KShzbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIiUwIiAoKHVuc2lnbmVkIGludCkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiciIgKCh1bnNpZ25lZCBpbnQpKGJoKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICIlMSIgKCh1bnNpZ25lZCBpbnQpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInJRUiIgKCh1bnNpZ25lZCBpbnQpKGJsKSkpCisjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICBfX2FzbV9fICgic3ViICVIMSwlSDVcblx0c2JjICAlSDAsJUgzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIDogIj1yIiAoKHVuc2lnbmVkIGludCkoc2gpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiPSZyIiAoKHVuc2lnbmVkIGludCkoc2wpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICA6ICIwIiAoKHVuc2lnbmVkIGludCkoYWgpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgInIiICgodW5zaWduZWQgaW50KShiaCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiMSIgKCh1bnNpZ25lZCBpbnQpKGFsKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICJyUVIiICgodW5zaWduZWQgaW50KShibCkpKQorI2RlZmluZSB1bXVsX3BwbW0oeGgsIHhsLCBtMCwgbTEpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICB1bmlvbiB7bG9uZyBpbnQgX19sbDsJCQkJCQlcCisJICAgc3RydWN0IHt1bnNpZ25lZCBpbnQgX19oLCBfX2w7fSBfX2k7IAkJCVwKKwkgIH0gX194eDsJCQkJCQkJXAorICAgIHVuc2lnbmVkIGludCBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCVwKKyAgICBfX2FzbV9fICgibXVsdCAgICAgICVTMCwlSDMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIDogIj1yIiAoX194eC5fX2kuX19oKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiPXIiIChfX3h4Ll9faS5fX2wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICA6ICIlMSIgKF9fbTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgInJRUiIgKF9fbTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh4aCkgPSBfX3h4Ll9faS5fX2g7ICh4bCkgPSBfX3h4Ll9faS5fX2w7CQkJCVwKKyAgICAoeGgpICs9ICgoKChzaWduZWQgaW50KSBfX20wID4+IDE1KSAmIF9fbTEpIAkJCVwKKwkgICAgICsgKCgoc2lnbmVkIGludCkgX19tMSA+PiAxNSkgJiBfX20wKSk7CQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmIC8qIF9fejgwMDBfXyAqLworCisjZW5kaWYgLyogX19HTlVDX18gKi8KKyNlbmRpZiAvKiAhX19yaXNjb3NfXyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKiAgR2VuZXJpYyBWZXJzaW9ucwkqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKSAmJiBkZWZpbmVkIChfX3VtdWxzaWRpMykKKyNkZWZpbmUgdW11bF9wcG1tKHBoLCBwbCwgbTAsIG0xKSBcCisgIHsJCQkJCQkJCQlcCisgICAgVURXdHlwZSBfX2xsID0gX191bXVsc2lkaTMgKG0wLCBtMSk7CQkJCVwKKyAgICBwaCA9IChVV3R5cGUpIChfX2xsID4+IFdfVFlQRV9TSVpFKTsJCQkJXAorICAgIHBsID0gKFVXdHlwZSkgX19sbDsgCQkJCQkJXAorICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkIChfX3VtdWxzaWRpMykKKyNkZWZpbmUgX191bXVsc2lkaTModSwgdikgXAorICAoe1VXdHlwZSBfX2hpLCBfX2xvOwkJCQkJCQlcCisgICAgdW11bF9wcG1tIChfX2hpLCBfX2xvLCB1LCB2KTsJCQkJCVwKKyAgICAoKFVEV3R5cGUpIF9faGkgPDwgV19UWVBFX1NJWkUpIHwgX19sbzsgfSkKKyNlbmRpZgorCisvKiBJZiB0aGlzIG1hY2hpbmUgaGFzIG5vIGlubGluZSBhc3NlbWJsZXIsIHVzZSBDIG1hY3Jvcy4gICovCisKKyNpZiAhZGVmaW5lZCAoYWRkX3NzYWFhYSkKKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9feDsgCQkJCQkJCVwKKyAgICBfX3ggPSAoYWwpICsgKGJsKTsJCQkJCQkJXAorICAgIChzaCkgPSAoYWgpICsgKGJoKSArIChfX3ggPCAoYWwpKTsJCQkJCVwKKyAgICAoc2wpID0gX194OyAJCQkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoc3ViX2RkbW1zcykKKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9feDsgCQkJCQkJCVwKKyAgICBfX3ggPSAoYWwpIC0gKGJsKTsJCQkJCQkJXAorICAgIChzaCkgPSAoYWgpIC0gKGJoKSAtIChfX3ggPiAoYWwpKTsJCQkJCVwKKyAgICAoc2wpID0gX194OyAJCQkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKQorI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSAJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX194MCwgX194MSwgX194MiwgX194MzsJCQkJCVwKKyAgICBVSFd0eXBlIF9fdWwsIF9fdmwsIF9fdWgsIF9fdmg7CQkJCQlcCisgICAgVVd0eXBlIF9fdSA9ICh1KSwgX192ID0gKHYpOwkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9fdWwgPSBfX2xsX2xvd3BhcnQgKF9fdSk7CQkJCQkJXAorICAgIF9fdWggPSBfX2xsX2hpZ2hwYXJ0IChfX3UpOyAJCQkJCVwKKyAgICBfX3ZsID0gX19sbF9sb3dwYXJ0IChfX3YpOwkJCQkJCVwKKyAgICBfX3ZoID0gX19sbF9oaWdocGFydCAoX192KTsgCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX194MCA9IChVV3R5cGUpIF9fdWwgKiBfX3ZsOwkJCQkJXAorICAgIF9feDEgPSAoVVd0eXBlKSBfX3VsICogX192aDsJCQkJCVwKKyAgICBfX3gyID0gKFVXdHlwZSkgX191aCAqIF9fdmw7CQkJCQlcCisgICAgX194MyA9IChVV3R5cGUpIF9fdWggKiBfX3ZoOwkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9feDEgKz0gX19sbF9oaWdocGFydCAoX194MCk7LyogdGhpcyBjYW4ndCBnaXZlIGNhcnJ5ICovICAgICAgICAgICAgXAorICAgIF9feDEgKz0gX194MjsJCS8qIGJ1dCB0aGlzIGluZGVlZCBjYW4gKi8JCVwKKyAgICBpZiAoX194MSA8IF9feDIpCQkvKiBkaWQgd2UgZ2V0IGl0PyAqLwkJCVwKKyAgICAgIF9feDMgKz0gX19sbF9COwkJLyogeWVzLCBhZGQgaXQgaW4gdGhlIHByb3BlciBwb3MuICovCVwKKwkJCQkJCQkJCVwKKyAgICAodzEpID0gX194MyArIF9fbGxfaGlnaHBhcnQgKF9feDEpOyAJCQkJXAorICAgICh3MCkgPSAoX19sbF9sb3dwYXJ0IChfX3gxKSA8PCBXX1RZUEVfU0laRS8yKSArIF9fbGxfbG93cGFydCAoX194MCk7XAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKQorI2RlZmluZSBzbXVsX3BwbW0odzEsIHcwLCB1LCB2KSAJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX193MTsJCQkJCQkJXAorICAgIFVXdHlwZSBfX20wID0gKHUpLCBfX20xID0gKHYpOwkJCQkJXAorICAgIHVtdWxfcHBtbSAoX193MSwgdzAsIF9fbTAsIF9fbTEpOwkJCQkJXAorICAgICh3MSkgPSBfX3cxIC0gKC0oX19tMCA+PiAoV19UWVBFX1NJWkUgLSAxKSkgJiBfX20xKSAJCVwKKwkJLSAoLShfX20xID4+IChXX1RZUEVfU0laRSAtIDEpKSAmIF9fbTApOwkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIERlZmluZSB0aGlzIHVuY29uZGl0aW9uYWxseSwgc28gaXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4gICovCisjZGVmaW5lIF9fdWRpdl9xcm5uZF9jKHEsIHIsIG4xLCBuMCwgZCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX2QxLCBfX2QwLCBfX3ExLCBfX3EwLCBfX3IxLCBfX3IwLCBfX207CQkJXAorICAgIF9fZDEgPSBfX2xsX2hpZ2hwYXJ0IChkKTsJCQkJCQlcCisgICAgX19kMCA9IF9fbGxfbG93cGFydCAoZCk7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9fcjEgPSAobjEpICUgX19kMTsgCQkJCQkJXAorICAgIF9fcTEgPSAobjEpIC8gX19kMTsgCQkJCQkJXAorICAgIF9fbSA9IChVV3R5cGUpIF9fcTEgKiBfX2QwOyAJCQkJCVwKKyAgICBfX3IxID0gX19yMSAqIF9fbGxfQiB8IF9fbGxfaGlnaHBhcnQgKG4wKTsJCQkJXAorICAgIGlmIChfX3IxIDwgX19tKQkJCQkJCQlcCisgICAgICB7IAkJCQkJCQkJXAorCV9fcTEtLSwgX19yMSArPSAoZCk7CQkJCQkJXAorCWlmIChfX3IxID49IChkKSkgLyogaS5lLiB3ZSBkaWRuJ3QgZ2V0IGNhcnJ5IHdoZW4gYWRkaW5nIHRvIF9fcjEgKi9cCisJICBpZiAoX19yMSA8IF9fbSkJCQkJCQlcCisJICAgIF9fcTEtLSwgX19yMSArPSAoZCk7CQkJCQlcCisgICAgICB9IAkJCQkJCQkJXAorICAgIF9fcjEgLT0gX19tOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX19yMCA9IF9fcjEgJSBfX2QxOyAJCQkJCQlcCisgICAgX19xMCA9IF9fcjEgLyBfX2QxOyAJCQkJCQlcCisgICAgX19tID0gKFVXdHlwZSkgX19xMCAqIF9fZDA7IAkJCQkJXAorICAgIF9fcjAgPSBfX3IwICogX19sbF9CIHwgX19sbF9sb3dwYXJ0IChuMCk7CQkJCVwKKyAgICBpZiAoX19yMCA8IF9fbSkJCQkJCQkJXAorICAgICAgeyAJCQkJCQkJCVwKKwlfX3EwLS0sIF9fcjAgKz0gKGQpOwkJCQkJCVwKKwlpZiAoX19yMCA+PSAoZCkpCQkJCQkJXAorCSAgaWYgKF9fcjAgPCBfX20pCQkJCQkJXAorCSAgICBfX3EwLS0sIF9fcjAgKz0gKGQpOwkJCQkJXAorICAgICAgfSAJCQkJCQkJCVwKKyAgICBfX3IwIC09IF9fbTsJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgIChxKSA9IChVV3R5cGUpIF9fcTEgKiBfX2xsX0IgfCBfX3EwOwkJCQlcCisgICAgKHIpID0gX19yMDsgCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogSWYgdGhlIHByb2Nlc3NvciBoYXMgbm8gdWRpdl9xcm5uZCBidXQgc2Rpdl9xcm5uZCwgZ28gdGhyb3VnaAorICAgX191ZGl2X3dfc2RpdiAoZGVmaW5lZCBpbiBsaWJnY2Mgb3IgZWxzZXdoZXJlKS4gICovCisjaWYgIWRlZmluZWQgKHVkaXZfcXJubmQpICYmIGRlZmluZWQgKHNkaXZfcXJubmQpCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbmgsIG5sLCBkKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9fcjsgCQkJCQkJCVwKKyAgICAocSkgPSBfX01QTih1ZGl2X3dfc2RpdikgKCZfX3IsIG5oLCBubCwgZCk7IAkJCVwKKyAgICAocikgPSBfX3I7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogSWYgdWRpdl9xcm5uZCB3YXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcHJvY2Vzc29yLCB1c2UgX191ZGl2X3Fybm5kX2MuICAqLworI2lmICFkZWZpbmVkICh1ZGl2X3Fybm5kKQorI2RlZmluZSBVRElWX05FRURTX05PUk1BTElaQVRJT04gMQorI2RlZmluZSB1ZGl2X3Fybm5kIF9fdWRpdl9xcm5uZF9jCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChjb3VudF9sZWFkaW5nX3plcm9zKQorZXh0ZXJuCisjaWZkZWYgX19TVERDX18KK2NvbnN0CisjZW5kaWYKK3Vuc2lnbmVkIGNoYXIgX2djcnlfY2x6X3RhYltdOworI2RlZmluZSBNUElfSU5URVJOQUxfTkVFRF9DTFpfVEFCIDEKKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhjb3VudCwgeCkgXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX3hyID0gKHgpOwkJCQkJCQlcCisgICAgVVd0eXBlIF9fYTsgCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBpZiAoV19UWVBFX1NJWkUgPD0gMzIpCQkJCQkJXAorICAgICAgeyAJCQkJCQkJCVwKKwlfX2EgPSBfX3hyIDwgKChVV3R5cGUpIDEgPDwgMipfX0JJVFM0KQkJCQlcCisJICA/IChfX3hyIDwgKChVV3R5cGUpIDEgPDwgX19CSVRTNCkgPyAwIDogX19CSVRTNCkJCVwKKwkgIDogKF9feHIgPCAoKFVXdHlwZSkgMSA8PCAzKl9fQklUUzQpID8gIDIqX19CSVRTNCA6IDMqX19CSVRTNCk7XAorICAgICAgfSAJCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7IAkJCQkJCQkJXAorCWZvciAoX19hID0gV19UWVBFX1NJWkUgLSA4OyBfX2EgPiAwOyBfX2EgLT0gOCkJCQlcCisJICBpZiAoKChfX3hyID4+IF9fYSkgJiAweGZmKSAhPSAwKQkJCQlcCisJICAgIGJyZWFrOwkJCQkJCQlcCisgICAgICB9IAkJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgIChjb3VudCkgPSBXX1RZUEVfU0laRSAtIChfZ2NyeV9jbHpfdGFiW19feHIgPj4gX19hXSArIF9fYSk7CQlcCisgIH0gd2hpbGUgKDApCisvKiBUaGlzIHZlcnNpb24gZ2l2ZXMgYSB3ZWxsLWRlZmluZWQgdmFsdWUgZm9yIHplcm8uICovCisjZGVmaW5lIENPVU5UX0xFQURJTkdfWkVST1NfMCBXX1RZUEVfU0laRQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoY291bnRfdHJhaWxpbmdfemVyb3MpCisvKiBEZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MgdXNpbmcgY291bnRfbGVhZGluZ196ZXJvcy4gIFRoZSBsYXR0ZXIgbWlnaHQgYmUKKyAgIGRlZmluZWQgaW4gYXNtLCBidXQgaWYgaXQgaXMgbm90LCB0aGUgQyB2ZXJzaW9uIGFib3ZlIGlzIGdvb2QgZW5vdWdoLiAgKi8KKyNkZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MoY291bnQsIHgpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX19jdHpfeCA9ICh4KTsJCQkJCQlcCisgICAgVVd0eXBlIF9fY3R6X2M7CQkJCQkJCVwKKyAgICBjb3VudF9sZWFkaW5nX3plcm9zIChfX2N0el9jLCBfX2N0el94ICYgLV9fY3R6X3gpOwkJCVwKKyAgICAoY291bnQpID0gV19UWVBFX1NJWkUgLSAxIC0gX19jdHpfYzsJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OCisjZGVmaW5lIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiAwCisjZW5kaWYKZGlmZiAtLWdpdCBhL21waS9tNjhrL01hbmlmZXN0IGIvbXBpL202OGsvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNTM4YQotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL01hbmlmZXN0CkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCitzeW50YXguaAorbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworbXBpaC1hZGQxLlMKK21waWgtc3ViMS5TCiskbmFtZXMkIGlRQ1ZBd1VBUCtMbVRERUFucDgzMlMvN0FRSkhVQVAvZHhmcTJVMHBEYzVaTG9FaXpvcWdqamNuSEl5YjlFak1HM1lqdmdLNmpRNjJ5b0FPQ3VvL2pGWWxKUytNZHZlNmJnZmRUellNcm5LVjdCRzJTRWN3YjI2M3BWbkludFM3WmhLUVBpTUNiRmdYV1IyVmpOMythMXY4eWpRRFp0Z3FFZ204T2xRK3U3aktCWTEzT3J5aXVxNW5QTnhzWFpxSnBlbEc2WmtkZzlNPT1QSWVlCmRpZmYgLS1naXQgYS9tcGkvbTY4ay9kaXN0ZmlsZXMgYi9tcGkvbTY4ay9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyZTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL2Rpc3RmaWxlcwpAQCAtMCwwICsxLDkgQEAKK01hbmlmZXN0CitzeW50YXguaAorbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworbXBpaC1hZGQxLlMKK21waWgtc3ViMS5TCisKKworCmRpZmYgLS1naXQgYS9tcGkvbTY4ay9tYzY4MDIwL01hbmlmZXN0IGIvbXBpL202OGsvbWM2ODAyMC9NYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2IyNzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL202OGsvbWM2ODAyMC9NYW5pZmVzdApAQCAtMCwwICsxLDIzIEBACisjIE1hbmlmZXN0IC0gY2hlY2tzdW1zIAorIyBDb3B5cmlnaHQgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworJG5hbWVzJCBpUUNWQXdVQVArTG1SVEVBbnA4MzJTLzdBUUszcndQL1R5R0JiaWk1SENyakRpTENWSkhpRE5lT2RFTng2QWljUlhudTR2dUptTW1QWjB5K2k3TVB1c0RhZVRiSVVBMHc2UmFKeCtFcDQxbkl2dGhtTkRuRmVQWTVNdzBwSVVKY3BJN0FKUjR2WXFwd05RQTZubEVkbi9tMWpnNnNQTEtaWFVYTlVraHJvRXpjSHpvVSsxMkJQUytudlNYbHdTa3NnNnJYRUdPSitNcz09WENYUApkaWZmIC0tZ2l0IGEvbXBpL202OGsvbWM2ODAyMC9kaXN0ZmlsZXMgYi9tcGkvbTY4ay9tYzY4MDIwL2Rpc3RmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjk2NDMzCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL202OGsvbWM2ODAyMC9kaXN0ZmlsZXMKQEAgLTAsMCArMSw0IEBACitNYW5pZmVzdAorbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUwpkaWZmIC0tZ2l0IGEvbXBpL202OGsvbWM2ODAyMC9tcGloLW11bDEuUyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwxLlMKQEAgLTAsMCArMSwxMDQgQEAKKy8qIG1jNjgwMjAgX19tcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogICAgICAgCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX211bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICBtcGlfc2l6ZV90IHMxX3NpemUsCShzcCArIDEyKQorICoJCSAgbXBpX2xpbWJfdCBzMl9saW1iKQkoc3AgKyAxNikKKyAqLworCisKKwlURVhUCisJQUxJR04KKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbXVsXzEpCisKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9tdWxfMTopCitQUk9MT0coX2djcnlfbXBpaF9tdWxfMSkKKworI2RlZmluZSByZXNfcHRyIGEwCisjZGVmaW5lIHMxX3B0ciBhMQorI2RlZmluZSBzMV9zaXplIGQyCisjZGVmaW5lIHMyX2xpbWIgZDQKKworLyogU2F2ZSB1c2VkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suICAqLworCW1vdmVtbAlSKGQyKS1SKGQ0KSxNRU1fUFJFREVDKHNwKQorI2lmIDAKKwltb3ZlbAlSKGQyKSxNRU1fUFJFREVDKHNwKQorCW1vdmVsCVIoZDMpLE1FTV9QUkVERUMoc3ApCisJbW92ZWwJUihkNCksTUVNX1BSRURFQyhzcCkKKyNlbmRpZgorCisvKiBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLiAgQmV0dGVyIHVzZSBtb3ZlbT8JKi8KKwltb3ZlbAlNRU1fRElTUChzcCwxNiksUihyZXNfcHRyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDIwKSxSKHMxX3B0cikKKwltb3ZlbAlNRU1fRElTUChzcCwyNCksUihzMV9zaXplKQorCW1vdmVsCU1FTV9ESVNQKHNwLDI4KSxSKHMyX2xpbWIpCisKKwllb3J3CSMxLFIoczFfc2l6ZSkKKwljbHJsCVIoZDEpCisJbHNybAkjMSxSKHMxX3NpemUpCisJYmNjCUwoTDEpCisJc3VicWwJIzEsUihzMV9zaXplKQorCXN1YmwJUihkMCksUihkMCkJLyogKGQwLGN5KSA8PSAoMCwwKSAqLworCitMKExvb3A6KQorCW1vdmVsCU1FTV9QT1NUSU5DKHMxX3B0ciksUihkMykKKwltdWx1bAlSKHMyX2xpbWIpLFIoZDEpOlIoZDMpCisJYWRkeGwJUihkMCksUihkMykKKwltb3ZlbAlSKGQzKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorTChMMTopCW1vdmVsCU1FTV9QT1NUSU5DKHMxX3B0ciksUihkMykKKwltdWx1bAlSKHMyX2xpbWIpLFIoZDApOlIoZDMpCisJYWRkeGwJUihkMSksUihkMykKKwltb3ZlbAlSKGQzKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorCisJZGJmCVIoczFfc2l6ZSksTChMb29wKQorCWNscmwJUihkMykKKwlhZGR4bAlSKGQzKSxSKGQwKQorCXN1YmwJIzB4MTAwMDAsUihzMV9zaXplKQorCWJjYwlMKExvb3ApCisKKy8qIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4gICovCisJbW92ZW1sCU1FTV9QT1NUSU5DKHNwKSxSKGQyKS1SKGQ0KQorI2lmIDAKKwltb3ZlbAlNRU1fUE9TVElOQyhzcCksUihkNCkKKwltb3ZlbAlNRU1fUE9TVElOQyhzcCksUihkMykKKwltb3ZlbAlNRU1fUE9TVElOQyhzcCksUihkMikKKyNlbmRpZgorCXJ0cworRVBJTE9HKF9nY3J5X21waWhfbXVsXzEpCisKKwpkaWZmIC0tZ2l0IGEvbXBpL202OGsvbWM2ODAyMC9tcGloLW11bDIuUyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiYWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSw5NCBAQAorLyogbWM2ODAyMCBfX21wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICAgICAgIAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2FkZG11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAgICAoc3AgKyA0KQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAoc3AgKyA4KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHNwICsgMTIpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAoc3AgKyAxNikKKyAqLworCisKKwlURVhUCisJQUxJR04KKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkbXVsXzEpCisKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9hZGRtdWxfMTopCitQUk9MT0coX2djcnlfbXBpaF9hZGRtdWxfMSkKKworI2RlZmluZSByZXNfcHRyIGEwCisjZGVmaW5lIHMxX3B0ciBhMQorI2RlZmluZSBzMV9zaXplIGQyCisjZGVmaW5lIHMyX2xpbWIgZDQKKworLyogU2F2ZSB1c2VkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suICAqLworCW1vdmVtbAlSKGQyKS1SKGQ1KSxNRU1fUFJFREVDKHNwKQorCisvKiBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLiAgQmV0dGVyIHVzZSBtb3ZlbT8JKi8KKwltb3ZlbAlNRU1fRElTUChzcCwyMCksUihyZXNfcHRyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDI0KSxSKHMxX3B0cikKKwltb3ZlbAlNRU1fRElTUChzcCwyOCksUihzMV9zaXplKQorCW1vdmVsCU1FTV9ESVNQKHNwLDMyKSxSKHMyX2xpbWIpCisKKwllb3J3CSMxLFIoczFfc2l6ZSkKKwljbHJsCVIoZDEpCisJY2xybAlSKGQ1KQorCWxzcmwJIzEsUihzMV9zaXplKQorCWJjYwlMKEwxKQorCXN1YnFsCSMxLFIoczFfc2l6ZSkKKwlzdWJsCVIoZDApLFIoZDApCQkvKiAoZDAsY3kpIDw9ICgwLDApICovCisKK0woTG9vcDopCisJbW92ZWwJTUVNX1BPU1RJTkMoczFfcHRyKSxSKGQzKQorCW11bHVsCVIoczJfbGltYiksUihkMSk6UihkMykKKwlhZGR4bAlSKGQwKSxSKGQzKQorCWFkZHhsCVIoZDUpLFIoZDEpCisJYWRkbAlSKGQzKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorTChMMTopCW1vdmVsCU1FTV9QT1NUSU5DKHMxX3B0ciksUihkMykKKwltdWx1bAlSKHMyX2xpbWIpLFIoZDApOlIoZDMpCisJYWRkeGwJUihkMSksUihkMykKKwlhZGR4bAlSKGQ1KSxSKGQwKQorCWFkZGwJUihkMyksTUVNX1BPU1RJTkMocmVzX3B0cikKKworCWRiZglSKHMxX3NpemUpLEwoTG9vcCkKKwlhZGR4bAlSKGQ1KSxSKGQwKQorCXN1YmwJIzB4MTAwMDAsUihzMV9zaXplKQorCWJjYwlMKExvb3ApCisKKy8qIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4gICovCisJbW92ZW1sCU1FTV9QT1NUSU5DKHNwKSxSKGQyKS1SKGQ1KQorCisJcnRzCitFUElMT0coX2djcnlfbXBpaF9hZGRtdWxfMSkKKwpkaWZmIC0tZ2l0IGEvbXBpL202OGsvbWM2ODAyMC9tcGloLW11bDMuUyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1OGVmNgotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL21jNjgwMjAvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSw5NyBAQAorLyogbWM2ODAyMCBfX21wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTYsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgICAgICAKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChzcCArIDQpCisgKgkJICAgICBtcGlfcHRyX3QgczFfcHRyLAkgICAgIChzcCArIDgpCisgKgkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsICAgICAoc3AgKyAxMikKKyAqCQkgICAgIG1waV9saW1iX3QgczJfbGltYikgICAgIChzcCArIDE2KQorICovCisKKworCVRFWFQKKwlBTElHTgorCUdMT0JMCUNfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJtdWxfMSkKKworQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3N1Ym11bF8xOikKK1BST0xPRyhfZ2NyeV9tcGloX3N1Ym11bF8xKQorCisjZGVmaW5lIHJlc19wdHIgYTAKKyNkZWZpbmUgczFfcHRyIGExCisjZGVmaW5lIHMxX3NpemUgZDIKKyNkZWZpbmUgczJfbGltYiBkNAorCisvKiBTYXZlIHVzZWQgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4gICovCisJbW92ZW1sCVIoZDIpLVIoZDUpLE1FTV9QUkVERUMoc3ApCisKKy8qIENvcHkgdGhlIGFyZ3VtZW50cyB0byByZWdpc3RlcnMuICBCZXR0ZXIgdXNlIG1vdmVtPwkqLworCW1vdmVsCU1FTV9ESVNQKHNwLDIwKSxSKHJlc19wdHIpCisJbW92ZWwJTUVNX0RJU1Aoc3AsMjQpLFIoczFfcHRyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDI4KSxSKHMxX3NpemUpCisJbW92ZWwJTUVNX0RJU1Aoc3AsMzIpLFIoczJfbGltYikKKworCWVvcncJIzEsUihzMV9zaXplKQorCWNscmwJUihkMSkKKwljbHJsCVIoZDUpCisJbHNybAkjMSxSKHMxX3NpemUpCisJYmNjCUwoTDEpCisJc3VicWwJIzEsUihzMV9zaXplKQorCXN1YmwJUihkMCksUihkMCkJLyogKGQwLGN5KSA8PSAoMCwwKSAqLworCitMKExvb3A6KQorCW1vdmVsCU1FTV9QT1NUSU5DKHMxX3B0ciksUihkMykKKwltdWx1bAlSKHMyX2xpbWIpLFIoZDEpOlIoZDMpCisJYWRkeGwJUihkMCksUihkMykKKwlhZGR4bAlSKGQ1KSxSKGQxKQorCXN1YmwJUihkMyksTUVNX1BPU1RJTkMocmVzX3B0cikKK0woTDE6KQltb3ZlbAlNRU1fUE9TVElOQyhzMV9wdHIpLFIoZDMpCisJbXVsdWwJUihzMl9saW1iKSxSKGQwKTpSKGQzKQorCWFkZHhsCVIoZDEpLFIoZDMpCisJYWRkeGwJUihkNSksUihkMCkKKwlzdWJsCVIoZDMpLE1FTV9QT1NUSU5DKHJlc19wdHIpCisKKwlkYmYJUihzMV9zaXplKSxMKExvb3ApCisJYWRkeGwJUihkNSksUihkMCkKKwlzdWJsCSMweDEwMDAwLFIoczFfc2l6ZSkKKwliY2MJTChMb29wKQorCisvKiBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuICAqLworCW1vdmVtbAlNRU1fUE9TVElOQyhzcCksUihkMiktUihkNSkKKworCXJ0cworRVBJTE9HKF9nY3J5X21waWhfc3VibXVsXzEpCisKKwpkaWZmIC0tZ2l0IGEvbXBpL202OGsvbXBpaC1hZGQxLlMgYi9tcGkvbTY4ay9tcGloLWFkZDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyZDIxCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL202OGsvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSw5MiBAQAorLyogbWM2ODAyMCBfX21wbl9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICogICAgICAgICAgICAgICAgICAgICAgICBzdW0gaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwxOTk2LCAxOTk4LCAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogICAgICAgCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShzcCArIDE2KQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHNwICsgMTIpCisgKi8KKworCisJVEVYVAorCUFMSUdOCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uKQorCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkX246KQorUFJPTE9HKF9nY3J5X21waWhfYWRkX24pCisJLyogU2F2ZSB1c2VkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suICAqLworCW1vdmVsCVIoZDIpLE1FTV9QUkVERUMoc3ApCisJbW92ZWwJUihhMiksTUVNX1BSRURFQyhzcCkKKworCS8qIENvcHkgdGhlIGFyZ3VtZW50cyB0byByZWdpc3RlcnMuICBCZXR0ZXIgdXNlIG1vdmVtPwkqLworCW1vdmVsCU1FTV9ESVNQKHNwLDEyKSxSKGEyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDE2KSxSKGEwKQorCW1vdmVsCU1FTV9ESVNQKHNwLDIwKSxSKGExKQorCW1vdmVsCU1FTV9ESVNQKHNwLDI0KSxSKGQyKQorCisJZW9ydwkjMSxSKGQyKQorCWxzcmwJIzEsUihkMikKKwliY2MJTChMMSkKKwlzdWJxbAkjMSxSKGQyKQkvKiBjbGVhcnMgY3kgYXMgc2lkZSBlZmZlY3QgKi8KKworTChMb29wOikKKwltb3ZlbAlNRU1fUE9TVElOQyhhMCksUihkMCkKKwltb3ZlbAlNRU1fUE9TVElOQyhhMSksUihkMSkKKwlhZGR4bAlSKGQxKSxSKGQwKQorCW1vdmVsCVIoZDApLE1FTV9QT1NUSU5DKGEyKQorTChMMTopCW1vdmVsCU1FTV9QT1NUSU5DKGEwKSxSKGQwKQorCW1vdmVsCU1FTV9QT1NUSU5DKGExKSxSKGQxKQorCWFkZHhsCVIoZDEpLFIoZDApCisJbW92ZWwJUihkMCksTUVNX1BPU1RJTkMoYTIpCisKKwlkYmYJUihkMiksTChMb29wKQkJLyogbG9vcCB1bnRpbCAxNiBsc2Igb2YgJTQgPT0gLTEgKi8KKwlzdWJ4bAlSKGQwKSxSKGQwKQkvKiBkMCA8PSAtY3k7IHNhdmUgY3kgYXMgMCBvciAtMSBpbiBkMCAqLworCXN1YmwJIzB4MTAwMDAsUihkMikKKwliY3MJTChMMikKKwlhZGRsCVIoZDApLFIoZDApCS8qIHJlc3RvcmUgY3kgKi8KKwlicmEJTChMb29wKQorCitMKEwyOikKKwluZWdsCVIoZDApCisKKwkvKiBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuICAqLworCW1vdmVsCU1FTV9QT1NUSU5DKHNwKSxSKGEyKQorCW1vdmVsCU1FTV9QT1NUSU5DKHNwKSxSKGQyKQorCisJcnRzCitFUElMT0coX2djcnlfbXBpaF9hZGRfbikKKworCmRpZmYgLS1naXQgYS9tcGkvbTY4ay9tcGloLWxzaGlmdC5TIGIvbXBpL202OGsvbXBpaC1sc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNkMWFhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL202OGsvbXBpaC1sc2hpZnQuUwpAQCAtMCwwICsxLDE2NCBAQAorLyogbWM2ODAyMCBsc2hpZnQgLS0gU2hpZnQgbGVmdCBhIGxvdy1sZXZlbCBuYXR1cmFsLW51bWJlciBpbnRlZ2VyLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogICAgICAgCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShzcCArIDgpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHNwICsgMTIpCisgKgkJICAgdW5zaWduZWQgY250KQkoc3AgKyAxNikKKyAqLworCisjZGVmaW5lIHJlc19wdHIgYTEKKyNkZWZpbmUgc19wdHIgYTAKKyNkZWZpbmUgc19zaXplIGQ2CisjZGVmaW5lIGNudCBkNAorCisJVEVYVAorCUFMSUdOCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2xzaGlmdCkKKworQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2xzaGlmdDopCitQUk9MT0coX2djcnlfbXBpaF9sc2hpZnQpCisKKwkvKiBTYXZlIHVzZWQgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4gICovCisJbW92ZW1sCVIoZDIpLVIoZDYpL1IoYTIpLE1FTV9QUkVERUMoc3ApCisKKwkvKiBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLiAgKi8KKwltb3ZlbAlNRU1fRElTUChzcCwyOCksUihyZXNfcHRyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDMyKSxSKHNfcHRyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDM2KSxSKHNfc2l6ZSkKKwltb3ZlbAlNRU1fRElTUChzcCw0MCksUihjbnQpCisKKwltb3ZlcWwJIzEsUihkNSkKKwljbXBsCVIoZDUpLFIoY250KQorCWJuZQlMKExub3JtYWwpCisJY21wbAlSKHNfcHRyKSxSKHJlc19wdHIpCisJYmxzCUwoTHNwZWNpYWwpCQkvKiBqdW1wIGlmIHNfcHRyID49IHJlc19wdHIgKi8KKyNpZiAoZGVmaW5lZCAoX19tYzY4MDIwX18pIHx8IGRlZmluZWQgKF9fTmVYVF9fKSB8fCBkZWZpbmVkKG1jNjgwMjApKQorCWxlYQlNRU1fSU5EWDEoc19wdHIsc19zaXplLGwsNCksUihhMikKKyNlbHNlIC8qIG5vdCBtYzY4MDIwICovCisJbW92ZWwJUihzX3NpemUpLFIoZDApCisJYXNsbAkjMixSKGQwKQorCWxlYQlNRU1fSU5EWChzX3B0cixkMCxsKSxSKGEyKQorI2VuZGlmCisJY21wbAlSKHJlc19wdHIpLFIoYTIpCisJYmxzCUwoTHNwZWNpYWwpCQkvKiBqdW1wIGlmIHJlc19wdHIgPj0gc19wdHIgKyBzX3NpemUgKi8KKworTChMbm9ybWFsOikKKwltb3ZlcWwJIzMyLFIoZDUpCisJc3VibAlSKGNudCksUihkNSkKKworI2lmIChkZWZpbmVkIChfX21jNjgwMjBfXykgfHwgZGVmaW5lZCAoX19OZVhUX18pIHx8IGRlZmluZWQobWM2ODAyMCkpCisJbGVhCU1FTV9JTkRYMShzX3B0cixzX3NpemUsbCw0KSxSKHNfcHRyKQorCWxlYQlNRU1fSU5EWDEocmVzX3B0cixzX3NpemUsbCw0KSxSKHJlc19wdHIpCisjZWxzZSAvKiBub3QgbWM2ODAwMCAqLworCW1vdmVsCVIoc19zaXplKSxSKGQwKQorCWFzbGwJIzIsUihkMCkKKwlhZGRsCVIoc19zaXplKSxSKHNfcHRyKQorCWFkZGwJUihzX3NpemUpLFIocmVzX3B0cikKKyNlbmRpZgorCW1vdmVsCU1FTV9QUkVERUMoc19wdHIpLFIoZDIpCisJbW92ZWwJUihkMiksUihkMCkKKwlsc3JsCVIoZDUpLFIoZDApCQkvKiBjb21wdXRlIGNhcnJ5IGxpbWIgKi8KKworCWxzbGwJUihjbnQpLFIoZDIpCisJbW92ZWwJUihkMiksUihkMSkKKwlzdWJxbAkjMSxSKHNfc2l6ZSkKKwliZXEJTChMZW5kKQorCWxzcmwJIzEsUihzX3NpemUpCisJYmNzCUwoTDEpCisJc3VicWwJIzEsUihzX3NpemUpCisKK0woTG9vcDopCisJbW92ZWwJTUVNX1BSRURFQyhzX3B0ciksUihkMikKKwltb3ZlbAlSKGQyKSxSKGQzKQorCWxzcmwJUihkNSksUihkMykKKwlvcmwJUihkMyksUihkMSkKKwltb3ZlbAlSKGQxKSxNRU1fUFJFREVDKHJlc19wdHIpCisJbHNsbAlSKGNudCksUihkMikKK0woTDE6KQorCW1vdmVsCU1FTV9QUkVERUMoc19wdHIpLFIoZDEpCisJbW92ZWwJUihkMSksUihkMykKKwlsc3JsCVIoZDUpLFIoZDMpCisJb3JsCVIoZDMpLFIoZDIpCisJbW92ZWwJUihkMiksTUVNX1BSRURFQyhyZXNfcHRyKQorCWxzbGwJUihjbnQpLFIoZDEpCisKKwlkYmYJUihzX3NpemUpLEwoTG9vcCkKKwlzdWJsCSMweDEwMDAwLFIoc19zaXplKQorCWJjYwlMKExvb3ApCisKK0woTGVuZDopCisJbW92ZWwJUihkMSksTUVNX1BSRURFQyhyZXNfcHRyKSAvKiBzdG9yZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iICovCisKKy8qIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4gICovCisJbW92ZW1sCU1FTV9QT1NUSU5DKHNwKSxSKGQyKS1SKGQ2KS9SKGEyKQorCXJ0cworCisvKiBXZSBsb29wIGZyb20gbGVhc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIHRoZSBhcnJheXMsIHdoaWNoIGlzIG9ubHkKKyAgIHBlcm1pc3NhYmxlIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvbid0IG92ZXJsYXAsIHNpbmNlIHRoZQorICAgZnVuY3Rpb24gaXMgZG9jdW1lbnRlZCB0byB3b3JrIGZvciBvdmVybGFwcGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLiAgKi8KKworTChMc3BlY2lhbDopCisJY2xybAlSKGQwKQkJCS8qIGluaXRpYWxpemUgY2FycnkgKi8KKwllb3J3CSMxLFIoc19zaXplKQorCWxzcmwJIzEsUihzX3NpemUpCisJYmNjCUwoTEwxKQorCXN1YnFsCSMxLFIoc19zaXplKQorCitMKExMb29wOikKKwltb3ZlbAlNRU1fUE9TVElOQyhzX3B0ciksUihkMikKKwlhZGR4bAlSKGQyKSxSKGQyKQorCW1vdmVsCVIoZDIpLE1FTV9QT1NUSU5DKHJlc19wdHIpCitMKExMMTopCisJbW92ZWwJTUVNX1BPU1RJTkMoc19wdHIpLFIoZDIpCisJYWRkeGwJUihkMiksUihkMikKKwltb3ZlbAlSKGQyKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorCisJZGJmCVIoc19zaXplKSxMKExMb29wKQorCWFkZHhsCVIoZDApLFIoZDApCQkvKiBzYXZlIGN5IGluIGxzYiAqLworCXN1YmwJIzB4MTAwMDAsUihzX3NpemUpCisJYmNzCUwoTExlbmQpCisJbHNybAkjMSxSKGQwKQkJLyogcmVzdG9yZSBjeSAqLworCWJyYQlMKExMb29wKQorCitMKExMZW5kOikKKy8qIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4gICovCisJbW92ZW1sCU1FTV9QT1NUSU5DKHNwKSxSKGQyKS1SKGQ2KS9SKGEyKQorCXJ0cworRVBJTE9HKF9nY3J5X21waWhfbHNoaWZ0KQorCisKKworCisKZGlmZiAtLWdpdCBhL21waS9tNjhrL21waWgtcnNoaWZ0LlMgYi9tcGkvbTY4ay9tcGloLXJzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbTY4ay9tcGloLXJzaGlmdC5TCkBAIC0wLDAgKzEsMTYyIEBACisvKiBtYzY4MDIwIHJzaGlmdCAtLSBTaGlmdCByaWdodCBhIGxvdy1sZXZlbCBuYXR1cmFsLW51bWJlciBpbnRlZ2VyLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogICAgICAgCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9yc2hpZnQoIG1waV9wdHJfdCB3cCwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShzcCArIDgpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHNwICsgMTIpCisgKgkJICAgdW5zaWduZWQgY250KQkoc3AgKyAxNikKKyAqLworCisjZGVmaW5lIHJlc19wdHIgYTEKKyNkZWZpbmUgc19wdHIgYTAKKyNkZWZpbmUgc19zaXplIGQ2CisjZGVmaW5lIGNudCBkNAorCisJVEVYVAorCUFMSUdOCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdCkKKworQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdDopCitQUk9MT0coX2djcnlfbXBpaF9yc2hpZnQpCisJLyogU2F2ZSB1c2VkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suICAqLworCW1vdmVtbAlSKGQyKS1SKGQ2KS9SKGEyKSxNRU1fUFJFREVDKHNwKQorCisJLyogQ29weSB0aGUgYXJndW1lbnRzIHRvIHJlZ2lzdGVycy4gICovCisJbW92ZWwJTUVNX0RJU1Aoc3AsMjgpLFIocmVzX3B0cikKKwltb3ZlbAlNRU1fRElTUChzcCwzMiksUihzX3B0cikKKwltb3ZlbAlNRU1fRElTUChzcCwzNiksUihzX3NpemUpCisJbW92ZWwJTUVNX0RJU1Aoc3AsNDApLFIoY250KQorCisJbW92ZXFsCSMxLFIoZDUpCisJY21wbAlSKGQ1KSxSKGNudCkKKwlibmUJTChSbm9ybWFsKQorCWNtcGwJUihyZXNfcHRyKSxSKHNfcHRyKQorCWJscwlMKFJzcGVjaWFsKQkJLyoganVtcCBpZiByZXNfcHRyID49IHNfcHRyICovCisjaWYgKGRlZmluZWQgKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkIChfX05lWFRfXykgfHwgZGVmaW5lZChtYzY4MDIwKSkKKwlsZWEJTUVNX0lORFgxKHJlc19wdHIsc19zaXplLGwsNCksUihhMikKKyNlbHNlIC8qIG5vdCBtYzY4MDIwICovCisJbW92ZWwJUihzX3NpemUpLFIoZDApCisJYXNsbAkjMixSKGQwKQorCWxlYQlNRU1fSU5EWChyZXNfcHRyLGQwLGwpLFIoYTIpCisjZW5kaWYKKwljbXBsCVIoc19wdHIpLFIoYTIpCisJYmxzCUwoUnNwZWNpYWwpCQkvKiBqdW1wIGlmIHNfcHRyID49IHJlc19wdHIgKyBzX3NpemUgKi8KKworTChSbm9ybWFsOikKKwltb3ZlcWwJIzMyLFIoZDUpCisJc3VibAlSKGNudCksUihkNSkKKwltb3ZlbAlNRU1fUE9TVElOQyhzX3B0ciksUihkMikKKwltb3ZlbAlSKGQyKSxSKGQwKQorCWxzbGwJUihkNSksUihkMCkJCS8qIGNvbXB1dGUgY2FycnkgbGltYiAqLworCisJbHNybAlSKGNudCksUihkMikKKwltb3ZlbAlSKGQyKSxSKGQxKQorCXN1YnFsCSMxLFIoc19zaXplKQorCWJlcQlMKFJlbmQpCisJbHNybAkjMSxSKHNfc2l6ZSkKKwliY3MJTChSMSkKKwlzdWJxbAkjMSxSKHNfc2l6ZSkKKworTChSb29wOikKKwltb3ZlbAlNRU1fUE9TVElOQyhzX3B0ciksUihkMikKKwltb3ZlbAlSKGQyKSxSKGQzKQorCWxzbGwJUihkNSksUihkMykKKwlvcmwJUihkMyksUihkMSkKKwltb3ZlbAlSKGQxKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorCWxzcmwJUihjbnQpLFIoZDIpCitMKFIxOikKKwltb3ZlbAlNRU1fUE9TVElOQyhzX3B0ciksUihkMSkKKwltb3ZlbAlSKGQxKSxSKGQzKQorCWxzbGwJUihkNSksUihkMykKKwlvcmwJUihkMyksUihkMikKKwltb3ZlbAlSKGQyKSxNRU1fUE9TVElOQyhyZXNfcHRyKQorCWxzcmwJUihjbnQpLFIoZDEpCisKKwlkYmYJUihzX3NpemUpLEwoUm9vcCkKKwlzdWJsCSMweDEwMDAwLFIoc19zaXplKQorCWJjYwlMKFJvb3ApCisKK0woUmVuZDopCisJbW92ZWwJUihkMSksTUVNKHJlc19wdHIpIC8qIHN0b3JlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiAqLworCisvKiBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuICAqLworCW1vdmVtbAlNRU1fUE9TVElOQyhzcCksUihkMiktUihkNikvUihhMikKKwlydHMKKworLyogV2UgbG9vcCBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIHRoZSBhcnJheXMsIHdoaWNoIGlzIG9ubHkKKyAgIHBlcm1pc3NhYmxlIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvbid0IG92ZXJsYXAsIHNpbmNlIHRoZQorICAgZnVuY3Rpb24gaXMgZG9jdW1lbnRlZCB0byB3b3JrIGZvciBvdmVybGFwcGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLiAgKi8KKworTChSc3BlY2lhbDopCisjaWYgKGRlZmluZWQgKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkIChfX05lWFRfXykgfHwgZGVmaW5lZChtYzY4MDIwKSkKKwlsZWEJTUVNX0lORFgxKHNfcHRyLHNfc2l6ZSxsLDQpLFIoc19wdHIpCisJbGVhCU1FTV9JTkRYMShyZXNfcHRyLHNfc2l6ZSxsLDQpLFIocmVzX3B0cikKKyNlbHNlIC8qIG5vdCBtYzY4MDAwICovCisJbW92ZWwJUihzX3NpemUpLFIoZDApCisJYXNsbAkjMixSKGQwKQorCWFkZGwJUihzX3NpemUpLFIoc19wdHIpCisJYWRkbAlSKHNfc2l6ZSksUihyZXNfcHRyKQorI2VuZGlmCisKKwljbHJsCVIoZDApCQkJLyogaW5pdGlhbGl6ZSBjYXJyeSAqLworCWVvcncJIzEsUihzX3NpemUpCisJbHNybAkjMSxSKHNfc2l6ZSkKKwliY2MJTChMUjEpCisJc3VicWwJIzEsUihzX3NpemUpCisKK0woTFJvb3A6KQorCW1vdmVsCU1FTV9QUkVERUMoc19wdHIpLFIoZDIpCisJcm94cmwJIzEsUihkMikKKwltb3ZlbAlSKGQyKSxNRU1fUFJFREVDKHJlc19wdHIpCitMKExSMTopCisJbW92ZWwJTUVNX1BSRURFQyhzX3B0ciksUihkMikKKwlyb3hybAkjMSxSKGQyKQorCW1vdmVsCVIoZDIpLE1FTV9QUkVERUMocmVzX3B0cikKKworCWRiZglSKHNfc2l6ZSksTChMUm9vcCkKKwlyb3hybAkjMSxSKGQwKQkJLyogc2F2ZSBjeSBpbiBtc2IgKi8KKwlzdWJsCSMweDEwMDAwLFIoc19zaXplKQorCWJjcwlMKExSZW5kKQorCWFkZGwJUihkMCksUihkMCkJCS8qIHJlc3RvcmUgY3kgKi8KKwlicmEJTChMUm9vcCkKKworTChMUmVuZDopCisvKiBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuICAqLworCW1vdmVtbAlNRU1fUE9TVElOQyhzcCksUihkMiktUihkNikvUihhMikKKwlydHMKK0VQSUxPRyhfZ2NyeV9tcGloX3JzaGlmdCkKKworCisKKwpkaWZmIC0tZ2l0IGEvbXBpL202OGsvbXBpaC1zdWIxLlMgYi9tcGkvbTY4ay9tcGloLXN1YjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc1NTVmCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL202OGsvbXBpaC1zdWIxLlMKQEAgLTAsMCArMSw5MSBAQAorLyogbWM2ODAyMCBfX21wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICAgICAgIAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfc3ViX24oIG1waV9wdHJfdCByZXNfcHRyLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCShzcCArIDgpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKHNwICsgMTYpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoc3AgKyAxMikKKyAqLworCisKKwlURVhUCisJQUxJR04KKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3ViX24pCisKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9zdWJfbjopCitQUk9MT0coX2djcnlfbXBpaF9zdWJfbikKKy8qIFNhdmUgdXNlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrLiAgKi8KKwltb3ZlbAlSKGQyKSxNRU1fUFJFREVDKHNwKQorCW1vdmVsCVIoYTIpLE1FTV9QUkVERUMoc3ApCisKKy8qIENvcHkgdGhlIGFyZ3VtZW50cyB0byByZWdpc3RlcnMuICBCZXR0ZXIgdXNlIG1vdmVtPwkqLworCW1vdmVsCU1FTV9ESVNQKHNwLDEyKSxSKGEyKQorCW1vdmVsCU1FTV9ESVNQKHNwLDE2KSxSKGEwKQorCW1vdmVsCU1FTV9ESVNQKHNwLDIwKSxSKGExKQorCW1vdmVsCU1FTV9ESVNQKHNwLDI0KSxSKGQyKQorCisJZW9ydwkjMSxSKGQyKQorCWxzcmwJIzEsUihkMikKKwliY2MJTChMMSkKKwlzdWJxbAkjMSxSKGQyKQkvKiBjbGVhcnMgY3kgYXMgc2lkZSBlZmZlY3QgKi8KKworTChMb29wOikKKwltb3ZlbAlNRU1fUE9TVElOQyhhMCksUihkMCkKKwltb3ZlbAlNRU1fUE9TVElOQyhhMSksUihkMSkKKwlzdWJ4bAlSKGQxKSxSKGQwKQorCW1vdmVsCVIoZDApLE1FTV9QT1NUSU5DKGEyKQorTChMMTopCW1vdmVsCU1FTV9QT1NUSU5DKGEwKSxSKGQwKQorCW1vdmVsCU1FTV9QT1NUSU5DKGExKSxSKGQxKQorCXN1YnhsCVIoZDEpLFIoZDApCisJbW92ZWwJUihkMCksTUVNX1BPU1RJTkMoYTIpCisKKwlkYmYJUihkMiksTChMb29wKQkJLyogbG9vcCB1bnRpbCAxNiBsc2Igb2YgJTQgPT0gLTEgKi8KKwlzdWJ4bAlSKGQwKSxSKGQwKQkvKiBkMCA8PSAtY3k7IHNhdmUgY3kgYXMgMCBvciAtMSBpbiBkMCAqLworCXN1YmwJIzB4MTAwMDAsUihkMikKKwliY3MJTChMMikKKwlhZGRsCVIoZDApLFIoZDApCS8qIHJlc3RvcmUgY3kgKi8KKwlicmEJTChMb29wKQorCitMKEwyOikKKwluZWdsCVIoZDApCisKKy8qIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4gICovCisJbW92ZWwJTUVNX1BPU1RJTkMoc3ApLFIoYTIpCisJbW92ZWwJTUVNX1BPU1RJTkMoc3ApLFIoZDIpCisKKwlydHMKK0VQSUxPRyhfZ2NyeV9tcGloX3N1Yl9uKQorCisKZGlmZiAtLWdpdCBhL21waS9tNjhrL3N5bnRheC5oIGIvbXBpL202OGsvc3ludGF4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3ZGU5OAotLS0gL2Rldi9udWxsCisrKyBiL21waS9tNjhrL3N5bnRheC5oCkBAIC0wLDAgKzEsMTg1IEBACisvKiBhc20uaCAtLSBEZWZpbml0aW9ucyBmb3IgNjhrIHN5bnRheCB2YXJpYXRpb25zLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgICAgICAKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjdW5kZWYgQUxJR04KKworI2lmZGVmIE1JVF9TWU5UQVgKKyNkZWZpbmUgUFJPTE9HKG5hbWUpCisjZGVmaW5lIEVQSUxPRyhuYW1lKQorI2RlZmluZSBSKHIpcgorI2RlZmluZSBNRU0oYmFzZSliYXNlQAorI2RlZmluZSBNRU1fRElTUChiYXNlLGRpc3BsYWNlbWVudCliYXNlQChkaXNwbGFjZW1lbnQpCisjZGVmaW5lIE1FTV9JTkRYKGJhc2UsaWR4LHNpemVfc3VmZml4KWJhc2VAKGlkeDpzaXplX3N1ZmZpeCkKKyNkZWZpbmUgTUVNX0lORFgxKGJhc2UsaWR4LHNpemVfc3VmZml4LHNjYWxlKWJhc2VAKGlkeDpzaXplX3N1ZmZpeDpzY2FsZSkKKyNkZWZpbmUgTUVNX1BSRURFQyhtZW1vcnlfYmFzZSltZW1vcnlfYmFzZUAtCisjZGVmaW5lIE1FTV9QT1NUSU5DKG1lbW9yeV9iYXNlKW1lbW9yeV9iYXNlQCsKKyNkZWZpbmUgTChsYWJlbCkgbGFiZWwKKyNkZWZpbmUgVEVYVCAudGV4dAorI2RlZmluZSBBTElHTiAuZXZlbgorI2RlZmluZSBHTE9CTCAuZ2xvYmwKKyNkZWZpbmUgbW92ZXFsIG1vdmVxCisvKiBVc2UgdmFyaWFibGUgc2l6ZWQgb3Bjb2Rlcy4gICovCisjZGVmaW5lIGJjYyBqY2MKKyNkZWZpbmUgYmNzIGpjcworI2RlZmluZSBibHMgamxzCisjZGVmaW5lIGJlcSBqZXEKKyNkZWZpbmUgYm5lIGpuZQorI2RlZmluZSBicmEganJhCisjZW5kaWYKKworI2lmZGVmIFNPTllfU1lOVEFYCisjZGVmaW5lIFBST0xPRyhuYW1lKQorI2RlZmluZSBFUElMT0cobmFtZSkKKyNkZWZpbmUgUihyKXIKKyNkZWZpbmUgTUVNKGJhc2UpKGJhc2UpCisjZGVmaW5lIE1FTV9ESVNQKGJhc2UsZGlzcGxhY2VtZW50KShkaXNwbGFjZW1lbnQsYmFzZSkKKyNkZWZpbmUgTUVNX0lORFgoYmFzZSxpZHgsc2l6ZV9zdWZmaXgpKGJhc2UsaWR4LnNpemVfc3VmZml4KQorI2RlZmluZSBNRU1fSU5EWDEoYmFzZSxpZHgsc2l6ZV9zdWZmaXgsc2NhbGUpKGJhc2UsaWR4LnNpemVfc3VmZml4KnNjYWxlKQorI2RlZmluZSBNRU1fUFJFREVDKG1lbW9yeV9iYXNlKS0obWVtb3J5X2Jhc2UpCisjZGVmaW5lIE1FTV9QT1NUSU5DKG1lbW9yeV9iYXNlKShtZW1vcnlfYmFzZSkrCisjZGVmaW5lIEwobGFiZWwpIGxhYmVsCisjZGVmaW5lIFRFWFQgLnRleHQKKyNkZWZpbmUgQUxJR04gLmV2ZW4KKyNkZWZpbmUgR0xPQkwgLmdsb2JsCisjZW5kaWYKKworI2lmZGVmIE1PVE9ST0xBX1NZTlRBWAorI2RlZmluZSBQUk9MT0cobmFtZSkKKyNkZWZpbmUgRVBJTE9HKG5hbWUpCisjZGVmaW5lIFIocilyCisjZGVmaW5lIE1FTShiYXNlKShiYXNlKQorI2RlZmluZSBNRU1fRElTUChiYXNlLGRpc3BsYWNlbWVudCkoZGlzcGxhY2VtZW50LGJhc2UpCisjZGVmaW5lIE1FTV9JTkRYKGJhc2UsaWR4LHNpemVfc3VmZml4KShiYXNlLGlkeC5zaXplX3N1ZmZpeCkKKyNkZWZpbmUgTUVNX0lORFgxKGJhc2UsaWR4LHNpemVfc3VmZml4LHNjYWxlKShiYXNlLGlkeC5zaXplX3N1ZmZpeCpzY2FsZSkKKyNkZWZpbmUgTUVNX1BSRURFQyhtZW1vcnlfYmFzZSktKG1lbW9yeV9iYXNlKQorI2RlZmluZSBNRU1fUE9TVElOQyhtZW1vcnlfYmFzZSkobWVtb3J5X2Jhc2UpKworI2RlZmluZSBMKGxhYmVsKSBsYWJlbAorI2RlZmluZSBURVhUCisjZGVmaW5lIEFMSUdOCisjZGVmaW5lIEdMT0JMIFhERUYKKyNkZWZpbmUgbGVhIExFQQorI2RlZmluZSBtb3ZlbCBNT1ZFLkwKKyNkZWZpbmUgbW92ZW1sIE1PVkVNLkwKKyNkZWZpbmUgbW92ZXFsIE1PVkVRLkwKKyNkZWZpbmUgY21wbCBDTVAuTAorI2RlZmluZSBvcmwgT1IuTAorI2RlZmluZSBjbHJsIENMUi5MCisjZGVmaW5lIGVvcncgRU9SLlcKKyNkZWZpbmUgbHNybCBMU1IuTAorI2RlZmluZSBsc2xsIExTTC5MCisjZGVmaW5lIHJveHJsIFJPWFIuTAorI2RlZmluZSByb3hsbCBST1hMLkwKKyNkZWZpbmUgYWRkbCBBREQuTAorI2RlZmluZSBhZGR4bCBBRERYLkwKKyNkZWZpbmUgYWRkcWwgQUREUS5MCisjZGVmaW5lIHN1YmwgU1VCLkwKKyNkZWZpbmUgc3VieGwgU1VCWC5MCisjZGVmaW5lIHN1YnFsIFNVQlEuTAorI2RlZmluZSBuZWdsIE5FRy5MCisjZGVmaW5lIG11bHVsIE1VTFUuTAorI2RlZmluZSBiY2MgQkNDCisjZGVmaW5lIGJjcyBCQ1MKKyNkZWZpbmUgYmxzIEJMUworI2RlZmluZSBiZXEgQkVRCisjZGVmaW5lIGJuZSBCTkUKKyNkZWZpbmUgYnJhIEJSQQorI2RlZmluZSBkYmYgREJGCisjZGVmaW5lIHJ0cyBSVFMKKyNkZWZpbmUgZDAgRDAKKyNkZWZpbmUgZDEgRDEKKyNkZWZpbmUgZDIgRDIKKyNkZWZpbmUgZDMgRDMKKyNkZWZpbmUgZDQgRDQKKyNkZWZpbmUgZDUgRDUKKyNkZWZpbmUgZDYgRDYKKyNkZWZpbmUgZDcgRDcKKyNkZWZpbmUgYTAgQTAKKyNkZWZpbmUgYTEgQTEKKyNkZWZpbmUgYTIgQTIKKyNkZWZpbmUgYTMgQTMKKyNkZWZpbmUgYTQgQTQKKyNkZWZpbmUgYTUgQTUKKyNkZWZpbmUgYTYgQTYKKyNkZWZpbmUgYTcgQTcKKyNkZWZpbmUgc3AgU1AKKyNlbmRpZgorCisjaWZkZWYgRUxGX1NZTlRBWAorI2RlZmluZSBQUk9MT0cobmFtZSkgLnR5cGUgbmFtZSxAZnVuY3Rpb24KKyNkZWZpbmUgRVBJTE9HKG5hbWUpIC5zaXplIG5hbWUsLi1uYW1lCisjZGVmaW5lIE1FTShiYXNlKShSKGJhc2UpKQorI2RlZmluZSBNRU1fRElTUChiYXNlLGRpc3BsYWNlbWVudCkoZGlzcGxhY2VtZW50LFIoYmFzZSkpCisjZGVmaW5lIE1FTV9QUkVERUMobWVtb3J5X2Jhc2UpLShSKG1lbW9yeV9iYXNlKSkKKyNkZWZpbmUgTUVNX1BPU1RJTkMobWVtb3J5X2Jhc2UpKFIobWVtb3J5X2Jhc2UpKSsKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBSXyhyKSUjI3IKKyNkZWZpbmUgUihyKVJfKHIpCisjZGVmaW5lIE1FTV9JTkRYXyhiYXNlLGlkeCxzaXplX3N1ZmZpeCkoUihiYXNlKSxSKGlkeCMjLiMjc2l6ZV9zdWZmaXgpKQorI2RlZmluZSBNRU1fSU5EWChiYXNlLGlkeCxzaXplX3N1ZmZpeClNRU1fSU5EWF8oYmFzZSxpZHgsc2l6ZV9zdWZmaXgpCisjZGVmaW5lIE1FTV9JTkRYMV8oYmFzZSxpZHgsc2l6ZV9zdWZmaXgsc2NhbGUpKFIoYmFzZSksUihpZHgjIy4jI3NpemVfc3VmZml4KnNjYWxlKSkKKyNkZWZpbmUgTUVNX0lORFgxKGJhc2UsaWR4LHNpemVfc3VmZml4LHNjYWxlKU1FTV9JTkRYMV8oYmFzZSxpZHgsc2l6ZV9zdWZmaXgsc2NhbGUpCisjZGVmaW5lIEwobGFiZWwpIC4jI2xhYmVsCisjZWxzZQorI2RlZmluZSBSKHIpJS8qKi9yCisjZGVmaW5lIE1FTV9JTkRYKGJhc2UsaWR4LHNpemVfc3VmZml4KShSKGJhc2UpLFIoaWR4KS5zaXplX3N1ZmZpeCkKKyNkZWZpbmUgTUVNX0lORFgxKGJhc2UsaWR4LHNpemVfc3VmZml4LHNjYWxlKShSKGJhc2UpLFIoaWR4KS5zaXplX3N1ZmZpeCpzY2FsZSkKKyNkZWZpbmUgTChsYWJlbCkgLi8qKi9sYWJlbAorI2VuZGlmCisjZGVmaW5lIFRFWFQgLnRleHQKKyNkZWZpbmUgQUxJR04gLmFsaWduIDIKKyNkZWZpbmUgR0xPQkwgLmdsb2JsCisjZGVmaW5lIGJjYyBqYmNjCisjZGVmaW5lIGJjcyBqYmNzCisjZGVmaW5lIGJscyBqYmxzCisjZGVmaW5lIGJlcSBqYmVxCisjZGVmaW5lIGJuZSBqYm5lCisjZGVmaW5lIGJyYSBqYnJhCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNPTllfU1lOVEFYKSB8fCBkZWZpbmVkIChFTEZfU1lOVEFYKQorI2RlZmluZSBtb3ZlbCBtb3ZlLmwKKyNkZWZpbmUgbW92ZW1sIG1vdmVtLmwKKyNkZWZpbmUgbW92ZXFsIG1vdmVxLmwKKyNkZWZpbmUgY21wbCBjbXAubAorI2RlZmluZSBvcmwgb3IubAorI2RlZmluZSBjbHJsIGNsci5sCisjZGVmaW5lIGVvcncgZW9yLncKKyNkZWZpbmUgbHNybCBsc3IubAorI2RlZmluZSBsc2xsIGxzbC5sCisjZGVmaW5lIHJveHJsIHJveHIubAorI2RlZmluZSByb3hsbCByb3hsLmwKKyNkZWZpbmUgYWRkbCBhZGQubAorI2RlZmluZSBhZGR4bCBhZGR4LmwKKyNkZWZpbmUgYWRkcWwgYWRkcS5sCisjZGVmaW5lIHN1Ymwgc3ViLmwKKyNkZWZpbmUgc3VieGwgc3VieC5sCisjZGVmaW5lIHN1YnFsIHN1YnEubAorI2RlZmluZSBuZWdsIG5lZy5sCisjZGVmaW5lIG11bHVsIG11bHUubAorI2VuZGlmCmRpZmYgLS1naXQgYS9tcGkvbWlwczMvTWFuaWZlc3QgYi9tcGkvbWlwczMvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5MTE4NAotLS0gL2Rldi9udWxsCisrKyBiL21waS9taXBzMy9NYW5pZmVzdApAQCAtMCwwICsxLDI4IEBACisjIE1hbmlmZXN0IC0gY2hlY2tzdW1zIAorIyBDb3B5cmlnaHQgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKworbXBpaC1hZGQxLlMKK21waWgtc3ViMS5TCittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCittcGloLWxzaGlmdC5TCittcGloLXJzaGlmdC5TCittcGktYXNtLWRlZnMuaAorJG5hbWVzJCBpUUNWQXdVQVArTG1VVEVBbnA4MzJTLzdBUUxtL2dQL1JIUjJhTE13SFB4c3EwbUdPNUgwa25lVm44YTlsOXlETkVaQmVma1ljT0pNYjdNWkdLeGJHc3B5RU5pVTA0TWMyVEZuQTF3Uzlnak5IbFJXdFVZeHhuL3d5dVY2QklSZ2ZzdFh0Mm5YR2dFUXJLMDdHSXo4RVRGY1lxY3h1N0pLaUlDSXVYWmduSWdkd0JKc3diQlYxemFNVURYZWc1Qjh2a2tFZVJXajhoUT09SVFWTwpkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL1JFQURNRSBiL21waS9taXBzMy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0YjJjNwotLS0gL2Rldi9udWxsCisrKyBiL21waS9taXBzMy9SRUFETUUKQEAgLTAsMCArMSwyMyBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBvcHRpbWl6ZWQgZm9yIE1JUFMzLiAgRXhhbXBsZSBvZgorcHJvY2Vzc29ycyB0aGF0IGltcGxlbWVudCBNSVBTMyBhcmUgUjQwMDAsIFI0NDAwLCBSNDYwMCwgUjQ3MDAsIGFuZCBSODAwMC4KKworUkVMRVZBTlQgT1BUSU1JWkFUSU9OIElTU1VFUworCisxLiBPbiB0aGUgUjQwMDAgYW5kIFI0NDAwLCBicmFuY2hlcywgYm90aCB0aGUgcGxhaW4gYW5kIHRoZSAibGlrZWx5IiBvbmVzLAorICAgdGFrZSAzIGN5Y2xlcyB0byBleGVjdXRlLiAgKFRoZSBmYXN0ZXN0IHBvc3NpYmxlIGxvb3Agd2lsbCB0YWtlIDQgY3ljbGVzLAorICAgYmVjYXVzZSBvZiB0aGUgZGVsYXkgaW5zbi4pCisKKyAgIE9uIHRoZSBSNDYwMCwgYnJhbmNoZXMgdGFrZXMgYSBzaW5nbGUgY3ljbGUKKworICAgT24gdGhlIFI4MDAwLCBicmFuY2hlcyBvZnRlbiB0YWtlIG5vIG5vdGljYWJsZSBjeWNsZXMsIGFzIHRoZXkgYXJlCisgICBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHVuaXQuLgorCisyLiBUaGUgUjQwMDAgYW5kIFI0NDAwIGhhdmUgYSBsb2FkIGxhdGVuY3kgb2YgNCBjeWNsZXMuCisKKzMuIE9uIHRoZSBSNDAwMCBhbmQgUjQ0MDAsIG11bHRpcGxpZXMgdGFrZSBhIGRhdGEtZGVwZW5kZW50IG51bWJlciBvZgorICAgY3ljbGVzLCBjb250cmFyeSB0byB0aGUgU0dJIGRvY3VtZW50YXRpb24uICBUaGVyZSBzZWVtIHRvIGJlIDMgb3IgNAorICAgcG9zc2libGUgbGF0ZW5jaWVzLgorCitTVEFUVVMKKworR29vZC4uLgpkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL2Rpc3RmaWxlcyBiL21waS9taXBzMy9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YjZmZQotLS0gL2Rldi9udWxsCisrKyBiL21waS9taXBzMy9kaXN0ZmlsZXMKQEAgLTAsMCArMSwxMSBAQAorTWFuaWZlc3QKK1JFQURNRQorbXBpaC1hZGQxLlMKK21waWgtc3ViMS5TCittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCittcGloLWxzaGlmdC5TCittcGloLXJzaGlmdC5TCittcGktYXNtLWRlZnMuaAorCmRpZmYgLS1naXQgYS9tcGkvbWlwczMvbXBpLWFzbS1kZWZzLmggYi9tcGkvbWlwczMvbXBpLWFzbS1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5YTljMQotLS0gL2Rldi9udWxsCisrKyBiL21waS9taXBzMy9tcGktYXNtLWRlZnMuaApAQCAtMCwwICsxLDEwIEBACisvKiBUaGlzIGZpbGUgZGVmaW5lcyBzb21lIGJhc2ljIGNvbnN0YW50cyBmb3IgdGhlIE1QSSBtYWNoaW5lcnkuICBXZQorICogbmVlZCB0byBkZWZpbmUgdGhlIHR5cGVzIG9uIGEgcGVyLUNQVSBiYXNpcywgc28gaXQgaXMgZG9uZSB3aXRoCisgKiB0aGlzIGZpbGUgaGVyZS4gICovCisjZGVmaW5lIEJZVEVTX1BFUl9NUElfTElNQiAgOAorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL21waWgtYWRkMS5TIGIvbXBpL21pcHMzL21waWgtYWRkMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGIwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbWlwczMvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIG1pcHMzICBhZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk4LCAyMDAwCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKCQ0KQorICoJCSAgIG1waV9wdHJfdCBzMV9wdHIsCSgkNSkKKyAqCQkgICBtcGlfcHRyX3QgczJfcHRyLAkoJDYpCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQkoJDcpCisgKi8KKworCS50ZXh0CisJLmFsaWduCTIKKwkuZ2xvYmwJX2djcnlfbXBpaF9hZGRfbgorCS5lbnQJX2djcnlfbXBpaF9hZGRfbgorX2djcnlfbXBpaF9hZGRfbjoKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9tYWNybworCisJbGQJJDEwLDAoJDUpCisJbGQJJDExLDAoJDYpCisKKwlkYWRkaXUJJDcsJDcsLTEKKwlhbmQJJDksJDcsNC0xCSMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCSMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJIG1vdmUJJDIsJDAKKworCWRzdWJ1CSQ3LCQ3LCQ5CisKKy5Mb29wMDogZGFkZGl1CSQ5LCQ5LC0xCisJbGQJJDEyLDgoJDUpCisJZGFkZHUJJDExLCQxMSwkMgorCWxkCSQxMyw4KCQ2KQorCXNsdHUJJDgsJDExLCQyCisJZGFkZHUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMSwkMTAKKwlzZAkkMTEsMCgkNCkKKwlvcgkkMiwkMiwkOAorCisJZGFkZGl1CSQ1LCQ1LDgKKwlkYWRkaXUJJDYsJDYsOAorCW1vdmUJJDEwLCQxMgorCW1vdmUJJDExLCQxMworCWJuZQkkOSwkMCwuTG9vcDAKKwkgZGFkZGl1ICQ0LCQ0LDgKKworLkwwOgliZXEJJDcsJDAsLkxlbmQKKwkgbm9wCisKKy5Mb29wOglkYWRkaXUJJDcsJDcsLTQKKworCWxkCSQxMiw4KCQ1KQorCWRhZGR1CSQxMSwkMTEsJDIKKwlsZAkkMTMsOCgkNikKKwlzbHR1CSQ4LCQxMSwkMgorCWRhZGR1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTEsJDEwCisJc2QJJDExLDAoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMCwxNigkNSkKKwlkYWRkdQkkMTMsJDEzLCQyCisJbGQJJDExLDE2KCQ2KQorCXNsdHUJJDgsJDEzLCQyCisJZGFkZHUJJDEzLCQxMiwkMTMKKwlzbHR1CSQyLCQxMywkMTIKKwlzZAkkMTMsOCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbGQJJDEyLDI0KCQ1KQorCWRhZGR1CSQxMSwkMTEsJDIKKwlsZAkkMTMsMjQoJDYpCisJc2x0dQkkOCwkMTEsJDIKKwlkYWRkdQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDExLCQxMAorCXNkCSQxMSwxNigkNCkKKwlvcgkkMiwkMiwkOAorCisJbGQJJDEwLDMyKCQ1KQorCWRhZGR1CSQxMywkMTMsJDIKKwlsZAkkMTEsMzIoJDYpCisJc2x0dQkkOCwkMTMsJDIKKwlkYWRkdQkkMTMsJDEyLCQxMworCXNsdHUJJDIsJDEzLCQxMgorCXNkCSQxMywyNCgkNCkKKwlvcgkkMiwkMiwkOAorCisJZGFkZGl1CSQ1LCQ1LDMyCisJZGFkZGl1CSQ2LCQ2LDMyCisKKwlibmUJJDcsJDAsLkxvb3AKKwkgZGFkZGl1ICQ0LCQ0LDMyCisKKy5MZW5kOglkYWRkdQkkMTEsJDExLCQyCisJc2x0dQkkOCwkMTEsJDIKKwlkYWRkdQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDExLCQxMAorCXNkCSQxMSwwKCQ0KQorCWoJJDMxCisJb3IJJDIsJDIsJDgKKworCS5lbmQJX2djcnlfbXBpaF9hZGRfbgorCmRpZmYgLS1naXQgYS9tcGkvbWlwczMvbXBpaC1sc2hpZnQuUyBiL21waS9taXBzMy9tcGloLWxzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGMxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbWlwczMvbXBpaC1sc2hpZnQuUwpAQCAtMCwwICsxLDk3IEBACisvKiBtaXBzMyAgICBsc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OCwgMjAwMCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwJKCQ0KQorICoJCSAgIG1waV9wdHJfdCB1cCwJKCQ1KQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCSgkNikKKyAqCQkgICB1bnNpZ25lZCBjbnQpCSgkNykKKyAqLworCisJLnRleHQKKwkuYWxpZ24JMgorCS5nbG9ibAlfZ2NyeV9tcGloX2xzaGlmdAorCS5lbnQJX2djcnlfbXBpaF9sc2hpZnQKK19nY3J5X21waWhfbHNoaWZ0OgorCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub21hY3JvCisKKwlkc2xsCSQyLCQ2LDMKKwlkYWRkdQkkNSwkNSwkMgkjIG1ha2UgcjUgcG9pbnQgYXQgZW5kIG9mIHNyYworCWxkCSQxMCwtOCgkNSkJIyBsb2FkIGZpcnN0IGxpbWIKKwlkc3VidQkkMTMsJDAsJDcKKwlkYWRkdQkkNCwkNCwkMgkjIG1ha2UgcjQgcG9pbnQgYXQgZW5kIG9mIHJlcworCWRhZGRpdQkkNiwkNiwtMQorCWFuZAkkOSwkNiw0LTEJIyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCWJlcQkkOSwkMCwuTDAJIyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwkgZHNybAkkMiwkMTAsJDEzCSMgY29tcHV0ZSBmdW5jdGlvbiByZXN1bHQKKworCWRzdWJ1CSQ2LCQ2LCQ5CisKKy5Mb29wMDogbGQJJDMsLTE2KCQ1KQorCWRhZGRpdQkkNCwkNCwtOAorCWRhZGRpdQkkNSwkNSwtOAorCWRhZGRpdQkkOSwkOSwtMQorCWRzbGwJJDExLCQxMCwkNworCWRzcmwJJDEyLCQzLCQxMworCW1vdmUJJDEwLCQzCisJb3IJJDgsJDExLCQxMgorCWJuZQkkOSwkMCwuTG9vcDAKKwkgc2QJJDgsMCgkNCkKKworLkwwOgliZXEJJDYsJDAsLkxlbmQKKwkgbm9wCisKKy5Mb29wOglsZAkkMywtMTYoJDUpCisJZGFkZGl1CSQ0LCQ0LC0zMgorCWRhZGRpdQkkNiwkNiwtNAorCWRzbGwJJDExLCQxMCwkNworCWRzcmwJJDEyLCQzLCQxMworCisJbGQJJDEwLC0yNCgkNSkKKwlkc2xsCSQxNCwkMywkNworCW9yCSQ4LCQxMSwkMTIKKwlzZAkkOCwyNCgkNCkKKwlkc3JsCSQ5LCQxMCwkMTMKKworCWxkCSQzLC0zMigkNSkKKwlkc2xsCSQxMSwkMTAsJDcKKwlvcgkkOCwkMTQsJDkKKwlzZAkkOCwxNigkNCkKKwlkc3JsCSQxMiwkMywkMTMKKworCWxkCSQxMCwtNDAoJDUpCisJZHNsbAkkMTQsJDMsJDcKKwlvcgkkOCwkMTEsJDEyCisJc2QJJDgsOCgkNCkKKwlkc3JsCSQ5LCQxMCwkMTMKKworCWRhZGRpdQkkNSwkNSwtMzIKKwlvcgkkOCwkMTQsJDkKKwliZ3R6CSQ2LC5Mb29wCisJIHNkCSQ4LDAoJDQpCisKKy5MZW5kOglkc2xsCSQ4LCQxMCwkNworCWoJJDMxCisJc2QJJDgsLTgoJDQpCisJLmVuZAlfZ2NyeV9tcGloX2xzaGlmdApkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL21waWgtbXVsMS5TIGIvbXBpL21pcHMzL21waWgtbXVsMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDA5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbWlwczMvbXBpaC1tdWwxLlMKQEAgLTAsMCArMSw4OSBAQAorLyogbWlwczMgbXBpaC1tdWwxLlMgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKKyAqCQkJdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NSwgMTk5OCwgMjAwMAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLAkocjQpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkocjUpCisgKgkJICBtcGlfc2l6ZV90IHMxX3NpemUsCShyNikKKyAqCQkgIG1waV9saW1iX3QgczJfbGltYikJKHI3KQorICovCisKKwkudGV4dAorCS5hbGlnbgk0CisJLmdsb2JsCV9nY3J5X21waWhfbXVsXzEKKwkuZW50CV9nY3J5X21waWhfbXVsXzEKK19nY3J5X21waWhfbXVsXzE6CisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vbWFjcm8KKworLyogIyB3YXJtIHVwIHBoYXNlIDAgKi8KKwlsZAkkOCwwKCQ1KQorCisvKiAjIHdhcm0gdXAgcGhhc2UgMSAqLworCWRhZGRpdQkkNSwkNSw4CisJZG11bHR1CSQ4LCQ3CisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMAorCSBtb3ZlCSQyLCQwCQkjIHplcm8gY3kyCisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMQorCWxkCSQ4LDAoJDUpCSMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCitMb29wOgltZmxvCSQxMAorCW1maGkJJDkKKwlkYWRkaXUJJDUsJDUsOAorCWRhZGR1CSQxMCwkMTAsJDIJIyBhZGQgb2xkIGNhcnJ5IGxpbWIgdG8gbG93IHByb2R1Y3QgbGltYgorCWRtdWx0dQkkOCwkNworCWxkCSQ4LDAoJDUpCSMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCWRhZGRpdQkkNiwkNiwtMQkjIGRlY3JlbWVudCBsb29wIGNvdW50ZXIKKwlzbHR1CSQyLCQxMCwkMgkjIGNhcnJ5IGZyb20gcHJldmlvdXMgYWRkaXRpb24gLT4gJDIKKwlzZAkkMTAsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWJuZQkkNiwkMCxMb29wCisJIGRhZGR1CSQyLCQ5LCQyCSMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKKy8qICMgY29vbCBkb3duIHBoYXNlIDEgKi8KKyRMQzE6CW1mbG8JJDEwCisJbWZoaQkkOQorCWRhZGR1CSQxMCwkMTAsJDIKKwlzbHR1CSQyLCQxMCwkMgorCWRtdWx0dQkkOCwkNworCXNkCSQxMCwwKCQ0KQorCWRhZGRpdQkkNCwkNCw4CisJZGFkZHUJJDIsJDksJDIJIyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KKworLyogIyBjb29sIGRvd24gcGhhc2UgMCAqLworJExDMDoJbWZsbwkkMTAKKwltZmhpCSQ5CisJZGFkZHUJJDEwLCQxMCwkMgorCXNsdHUJJDIsJDEwLCQyCisJc2QJJDEwLDAoJDQpCisJagkkMzEKKwlkYWRkdQkkMiwkOSwkMgkjIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorCisJLmVuZAlfZ2NyeV9tcGloX211bF8xCisKZGlmZiAtLWdpdCBhL21waS9taXBzMy9tcGloLW11bDIuUyBiL21waS9taXBzMy9tcGloLW11bDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTgyNzYzCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21pcHMzL21waWgtbXVsMi5TCkBAIC0wLDAgKzEsMTAxIEBACisvKiBNSVBTMyAgIGFkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZAorICoJCSAgICAgICBhZGQgdGhlIHByb2R1Y3QgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTgsIDIwMDAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2FkZG11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAgICAocjQpCisgKgkJICAgICBtcGlfcHRyX3QgczFfcHRyLAkgICAgIChyNSkKKyAqCQkgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgICAgIChyNikKKyAqCQkgICAgIG1waV9saW1iX3QgczJfbGltYikgICAgIChyNykKKyAqLworCisJLnRleHQKKwkuYWxpZ24JNAorCS5nbG9ibAlfZ2NyeV9tcGloX2FkZG11bF8xCisJLmVudAlfZ2NyeV9tcGloX2FkZG11bF8xCitfZ2NyeV9tcGloX2FkZG11bF8xOgorCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub21hY3JvCisKKy8qICMgd2FybSB1cCBwaGFzZSAwICovCisJbGQJJDgsMCgkNSkKKworLyogIyB3YXJtIHVwIHBoYXNlIDEgKi8KKwlkYWRkaXUJJDUsJDUsOAorCWRtdWx0dQkkOCwkNworCisJZGFkZGl1CSQ2LCQ2LC0xCisJYmVxCSQ2LCQwLCRMQzAKKwkgbW92ZQkkMiwkMAkJIyB6ZXJvIGN5MgorCisJZGFkZGl1CSQ2LCQ2LC0xCisJYmVxCSQ2LCQwLCRMQzEKKwlsZAkkOCwwKCQ1KQkjIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKworTG9vcDoJbGQJJDEwLDAoJDQpCisJbWZsbwkkMworCW1maGkJJDkKKwlkYWRkaXUJJDUsJDUsOAorCWRhZGR1CSQzLCQzLCQyCSMgYWRkIG9sZCBjYXJyeSBsaW1iIHRvIGxvdyBwcm9kdWN0IGxpbWIKKwlkbXVsdHUJJDgsJDcKKwlsZAkkOCwwKCQ1KQkjIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKwlkYWRkaXUJJDYsJDYsLTEJIyBkZWNyZW1lbnQgbG9vcCBjb3VudGVyCisJc2x0dQkkMiwkMywkMgkjIGNhcnJ5IGZyb20gcHJldmlvdXMgYWRkaXRpb24gLT4gJDIKKwlkYWRkdQkkMywkMTAsJDMKKwlzbHR1CSQxMCwkMywkMTAKKwlkYWRkdQkkMiwkMiwkMTAKKwlzZAkkMywwKCQ0KQorCWRhZGRpdQkkNCwkNCw4CisJYm5lCSQ2LCQwLExvb3AKKwkgZGFkZHUJJDIsJDksJDIJIyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KKworLyogIyBjb29sIGRvd24gcGhhc2UgMSAqLworJExDMToJbGQJJDEwLDAoJDQpCisJbWZsbwkkMworCW1maGkJJDkKKwlkYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwlkbXVsdHUJJDgsJDcKKwlkYWRkdQkkMywkMTAsJDMKKwlzbHR1CSQxMCwkMywkMTAKKwlkYWRkdQkkMiwkMiwkMTAKKwlzZAkkMywwKCQ0KQorCWRhZGRpdQkkNCwkNCw4CisJZGFkZHUJJDIsJDksJDIJIyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KKworLyogIyBjb29sIGRvd24gcGhhc2UgMCAqLworJExDMDoJbGQJJDEwLDAoJDQpCisJbWZsbwkkMworCW1maGkJJDkKKwlkYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwlkYWRkdQkkMywkMTAsJDMKKwlzbHR1CSQxMCwkMywkMTAKKwlkYWRkdQkkMiwkMiwkMTAKKwlzZAkkMywwKCQ0KQorCWoJJDMxCisJZGFkZHUJJDIsJDksJDIJIyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KKworCS5lbmQJX2djcnlfbXBpaF9hZGRtdWxfMQorCmRpZmYgLS1naXQgYS9tcGkvbWlwczMvbXBpaC1tdWwzLlMgYi9tcGkvbWlwczMvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0MjFhNgotLS0gL2Rldi9udWxsCisrKyBiL21waS9taXBzMy9tcGloLW11bDMuUwpAQCAtMCwwICsxLDEwMSBAQAorLyogTUlQUzMgc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgc2luZ2xlIGxpbWIgYW5kCisgKgkJICAgICBzdWJ0cmFjdCB0aGUgcHJvZHVjdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LCAyMDAwCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9zdWJtdWxfMSggbXBpX3B0cl90IHJlc19wdHIsICAgICAgKHI0KQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAocjUpCisgKgkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsICAgICAocjYpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAocjcpCisgKi8KKworCS50ZXh0CisJLmFsaWduCTQKKwkuZ2xvYmwJX2djcnlfbXBpaF9zdWJtdWxfMQorCS5lbnQJX2djcnlfbXBpaF9zdWJtdWxfMQorX2djcnlfbXBpaF9zdWJtdWxfMToKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9tYWNybworCisvKiAjIHdhcm0gdXAgcGhhc2UgMCAqLworCWxkCSQ4LDAoJDUpCisKKy8qICMgd2FybSB1cCBwaGFzZSAxICovCisJZGFkZGl1CSQ1LCQ1LDgKKwlkbXVsdHUJJDgsJDcKKworCWRhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMwCisJIG1vdmUJJDIsJDAJCSMgemVybyBjeTIKKworCWRhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMxCisJbGQJJDgsMCgkNSkJIyBsb2FkIG5ldyBzMSBsaW1iIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisKK0xvb3A6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZGl1CSQ1LCQ1LDgKKwlkYWRkdQkkMywkMywkMgkjIGFkZCBvbGQgY2FycnkgbGltYiB0byBsb3cgcHJvZHVjdCBsaW1iCisJZG11bHR1CSQ4LCQ3CisJbGQJJDgsMCgkNSkJIyBsb2FkIG5ldyBzMSBsaW1iIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisJZGFkZGl1CSQ2LCQ2LC0xCSMgZGVjcmVtZW50IGxvb3AgY291bnRlcgorCXNsdHUJJDIsJDMsJDIJIyBjYXJyeSBmcm9tIHByZXZpb3VzIGFkZGl0aW9uIC0+ICQyCisJZHN1YnUJJDMsJDEwLCQzCisJc2d0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWJuZQkkNiwkMCxMb29wCisJIGRhZGR1CSQyLCQ5LCQyCSMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKKy8qICMgY29vbCBkb3duIHBoYXNlIDEgKi8KKyRMQzE6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZHUJJDMsJDMsJDIKKwlzbHR1CSQyLCQzLCQyCisJZG11bHR1CSQ4LCQ3CisJZHN1YnUJJDMsJDEwLCQzCisJc2d0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWRhZGR1CSQyLCQ5LCQyCSMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKKy8qICMgY29vbCBkb3duIHBoYXNlIDAgKi8KKyRMQzA6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZHUJJDMsJDMsJDIKKwlzbHR1CSQyLCQzLCQyCisJZHN1YnUJJDMsJDEwLCQzCisJc2d0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlqCSQzMQorCWRhZGR1CSQyLCQ5LCQyCSMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKKwkuZW5kCV9nY3J5X21waWhfc3VibXVsXzEKKwpkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL21waWgtcnNoaWZ0LlMgYi9tcGkvbWlwczMvbXBpaC1yc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UwMzVhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21pcHMzL21waWgtcnNoaWZ0LlMKQEAgLTAsMCArMSw5NSBAQAorLyogbWlwczMgICAgcnNoaWZ0CisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTgsIDIwMDAKKyAqICAgICAgICAgICAgICAgICAgICAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9yc2hpZnQoIG1waV9wdHJfdCB3cCwJKCQ0KQorICoJCSAgIG1waV9wdHJfdCB1cCwJKCQ1KQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsCSgkNikKKyAqCQkgICB1bnNpZ25lZCBjbnQpCSgkNykKKyAqLworCisJLnRleHQKKwkuYWxpZ24JMgorCS5nbG9ibAlfZ2NyeV9tcGloX3JzaGlmdAorCS5lbnQJX2djcnlfbXBpaF9yc2hpZnQKK19nY3J5X21waWhfcnNoaWZ0OgorCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub21hY3JvCisKKwlsZAkkMTAsMCgkNSkJIyBsb2FkIGZpcnN0IGxpbWIKKwlkc3VidQkkMTMsJDAsJDcKKwlkYWRkaXUJJDYsJDYsLTEKKwlhbmQJJDksJDYsNC0xCSMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCSMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJIGRzbGwJJDIsJDEwLCQxMwkjIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisKKwlkc3VidQkkNiwkNiwkOQorCisuTG9vcDA6IGxkCSQzLDgoJDUpCisJZGFkZGl1CSQ0LCQ0LDgKKwlkYWRkaXUJJDUsJDUsOAorCWRhZGRpdQkkOSwkOSwtMQorCWRzcmwJJDExLCQxMCwkNworCWRzbGwJJDEyLCQzLCQxMworCW1vdmUJJDEwLCQzCisJb3IJJDgsJDExLCQxMgorCWJuZQkkOSwkMCwuTG9vcDAKKwkgc2QJJDgsLTgoJDQpCisKKy5MMDoJYmVxCSQ2LCQwLC5MZW5kCisJIG5vcAorCisuTG9vcDoJbGQJJDMsOCgkNSkKKwlkYWRkaXUJJDQsJDQsMzIKKwlkYWRkaXUJJDYsJDYsLTQKKwlkc3JsCSQxMSwkMTAsJDcKKwlkc2xsCSQxMiwkMywkMTMKKworCWxkCSQxMCwxNigkNSkKKwlkc3JsCSQxNCwkMywkNworCW9yCSQ4LCQxMSwkMTIKKwlzZAkkOCwtMzIoJDQpCisJZHNsbAkkOSwkMTAsJDEzCisKKwlsZAkkMywyNCgkNSkKKwlkc3JsCSQxMSwkMTAsJDcKKwlvcgkkOCwkMTQsJDkKKwlzZAkkOCwtMjQoJDQpCisJZHNsbAkkMTIsJDMsJDEzCisKKwlsZAkkMTAsMzIoJDUpCisJZHNybAkkMTQsJDMsJDcKKwlvcgkkOCwkMTEsJDEyCisJc2QJJDgsLTE2KCQ0KQorCWRzbGwJJDksJDEwLCQxMworCisJZGFkZGl1CSQ1LCQ1LDMyCisJb3IJJDgsJDE0LCQ5CisJYmd0egkkNiwuTG9vcAorCSBzZAkkOCwtOCgkNCkKKworLkxlbmQ6CWRzcmwJJDgsJDEwLCQ3CisJagkkMzEKKwlzZAkkOCwwKCQ0KQorCS5lbmQJX2djcnlfbXBpaF9yc2hpZnQKKwpkaWZmIC0tZ2l0IGEvbXBpL21pcHMzL21waWgtc3ViMS5TIGIvbXBpL21pcHMzL21waWgtc3ViMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWM2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbWlwczMvbXBpaC1zdWIxLlMKQEAgLTAsMCArMSwxMjUgQEAKKy8qIG1pcHMzICBzdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCisgKgkJICBzdG9yZSBkaWZmZXJlbmNlIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisgKiAKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk4LCAxOTk5LCAyMDAwLAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqICBtcGlfbGltYl90CisgKiAgX2djcnlfbXBpaF9zdWJfbiggbXBpX3B0cl90IHJlc19wdHIsCShyNCkKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkocjUpCisgKgkJICAgbXBpX3B0cl90IHMyX3B0ciwJKHI2KQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHI3KQorICovCisKKworCS50ZXh0CisJLmFsaWduCTIKKwkuZ2xvYmwJX2djcnlfbXBpaF9zdWJfbgorCS5lbnQJX2djcnlfbXBpaF9zdWJfbgorX2djcnlfbXBpaF9zdWJfbjoKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9tYWNybworCisJbGQJJDEwLDAoJDUpCisJbGQJJDExLDAoJDYpCisKKwlkYWRkaXUJJDcsJDcsLTEKKwlhbmQJJDksJDcsNC0xCSMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCSMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJbW92ZSAgICQyLCQwCisKKwlkc3VidQkkNywkNywkOQorCisuTG9vcDA6IGRhZGRpdQkkOSwkOSwtMQorCWxkCSQxMiw4KCQ1KQorCWRhZGR1CSQxMSwkMTEsJDIKKwlsZAkkMTMsOCgkNikKKwlzbHR1CSQ4LCQxMSwkMgorCWRzdWJ1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTAsJDExCisJc2QJJDExLDAoJDQpCisJb3IJJDIsJDIsJDgKKworCWRhZGRpdQkkNSwkNSw4CisJZGFkZGl1CSQ2LCQ2LDgKKwltb3ZlCSQxMCwkMTIKKwltb3ZlCSQxMSwkMTMKKwlibmUJJDksJDAsLkxvb3AwCisJIGRhZGRpdSAkNCwkNCw4CisKKy5MMDoJYmVxCSQ3LCQwLC5MZW5kCisJIG5vcAorCisuTG9vcDoJZGFkZGl1CSQ3LCQ3LC00CisKKwlsZAkkMTIsOCgkNSkKKwlkYWRkdQkkMTEsJDExLCQyCisJbGQJJDEzLDgoJDYpCisJc2x0dQkkOCwkMTEsJDIKKwlkc3VidQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDEwLCQxMQorCXNkCSQxMSwwKCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlsZAkkMTAsMTYoJDUpCisJZGFkZHUJJDEzLCQxMywkMgorCWxkCSQxMSwxNigkNikKKwlzbHR1CSQ4LCQxMywkMgorCWRzdWJ1CSQxMywkMTIsJDEzCisJc2x0dQkkMiwkMTIsJDEzCisJc2QJJDEzLDgoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMiwyNCgkNSkKKwlkYWRkdQkkMTEsJDExLCQyCisJbGQJJDEzLDI0KCQ2KQorCXNsdHUJJDgsJDExLCQyCisJZHN1YnUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMCwkMTEKKwlzZAkkMTEsMTYoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMCwzMigkNSkKKwlkYWRkdQkkMTMsJDEzLCQyCisJbGQJJDExLDMyKCQ2KQorCXNsdHUJJDgsJDEzLCQyCisJZHN1YnUJJDEzLCQxMiwkMTMKKwlzbHR1CSQyLCQxMiwkMTMKKwlzZAkkMTMsMjQoJDQpCisJb3IJJDIsJDIsJDgKKworCWRhZGRpdQkkNSwkNSwzMgorCWRhZGRpdQkkNiwkNiwzMgorCisJYm5lCSQ3LCQwLC5Mb29wCisJIGRhZGRpdSAkNCwkNCwzMgorCisuTGVuZDoJZGFkZHUJJDExLCQxMSwkMgorCXNsdHUJJDgsJDExLCQyCisJZHN1YnUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMCwkMTEKKwlzZAkkMTEsMCgkNCkKKwlqCSQzMQorCW9yCSQyLCQyLCQ4CisKKwkuZW5kCV9nY3J5X21waWhfc3ViX24KKwpkaWZmIC0tZ2l0IGEvbXBpL21waS1hZGQuYyBiL21waS9tcGktYWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmNDc2ZQotLS0gL2Rldi9udWxsCisrKyBiL21waS9tcGktYWRkLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qIG1waS1hZGQuYyAgLSAgTVBJIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKworCisvKioqKioqKioqKioqKioqKgorICogQWRkIHRoZSB1bnNpZ25lZCBpbnRlZ2VyIFYgdG8gdGhlIG1waS1pbnRlZ2VyIFUgYW5kIHN0b3JlIHRoZQorICogcmVzdWx0IGluIFcuIFUgYW5kIFYgbWF5IGJlIHRoZSBzYW1lLgorICovCit2b2lkCitfZ2NyeV9tcGlfYWRkX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICkKK3sKKyAgICBtcGlfcHRyX3Qgd3AsIHVwOworICAgIG1waV9zaXplX3QgdXNpemUsIHdzaXplOworICAgIGludCB1c2lnbiwgd3NpZ247CisKKyAgICB1c2l6ZSA9IHUtPm5saW1iczsKKyAgICB1c2lnbiA9IHUtPnNpZ247CisgICAgd3NpZ24gPSAwOworCisgICAgLyogSWYgbm90IHNwYWNlIGZvciBXIChhbmQgcG9zc2libGUgY2FycnkpLCBpbmNyZWFzZSBzcGFjZS4gICovCisgICAgd3NpemUgPSB1c2l6ZSArIDE7CisgICAgaWYoIHctPmFsbG9jZWQgPCB3c2l6ZSApCisJbXBpX3Jlc2l6ZSh3LCB3c2l6ZSk7CisKKyAgICAvKiBUaGVzZSBtdXN0IGJlIGFmdGVyIHJlYWxsb2MgKFUgbWF5IGJlIHRoZSBzYW1lIGFzIFcpLiAgKi8KKyAgICB1cCA9IHUtPmQ7CisgICAgd3AgPSB3LT5kOworCisgICAgaWYoICF1c2l6ZSApIHsgIC8qIHNpbXBsZSAqLworCXdwWzBdID0gdjsKKwl3c2l6ZSA9IHY/IDE6MDsKKyAgICB9CisgICAgZWxzZSBpZiggIXVzaWduICkgeyAgLyogbXBpIGlzIG5vdCBuZWdhdGl2ZSAqLworCW1waV9saW1iX3QgY3k7CisJY3kgPSBfZ2NyeV9tcGloX2FkZF8xKHdwLCB1cCwgdXNpemUsIHYpOworCXdwW3VzaXplXSA9IGN5OworCXdzaXplID0gdXNpemUgKyBjeTsKKyAgICB9CisgICAgZWxzZSB7ICAvKiBUaGUgc2lnbnMgYXJlIGRpZmZlcmVudC4gIE5lZWQgZXhhY3QgY29tcGFyaXNvbiB0byBkZXRlcm1pbmUKKwkgICAgICogd2hpY2ggb3BlcmFuZCB0byBzdWJ0cmFjdCBmcm9tIHdoaWNoLiAgKi8KKwlpZiggdXNpemUgPT0gMSAmJiB1cFswXSA8IHYgKSB7CisJICAgIHdwWzBdID0gdiAtIHVwWzBdOworCSAgICB3c2l6ZSA9IDE7CisJfQorCWVsc2UgeworCSAgICBfZ2NyeV9tcGloX3N1Yl8xKHdwLCB1cCwgdXNpemUsIHYpOworCSAgICAvKiBTaXplIGNhbiBkZWNyZWFzZSB3aXRoIGF0IG1vc3Qgb25lIGxpbWIuICovCisJICAgIHdzaXplID0gdXNpemUgLSAod3BbdXNpemUtMV09PTApOworCSAgICB3c2lnbiA9IDE7CisJfQorICAgIH0KKworICAgIHctPm5saW1icyA9IHdzaXplOworICAgIHctPnNpZ24gICA9IHdzaWduOworfQorCisKK3ZvaWQKK19nY3J5X21waV9hZGQoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdikKK3sKKyAgICBtcGlfcHRyX3Qgd3AsIHVwLCB2cDsKKyAgICBtcGlfc2l6ZV90IHVzaXplLCB2c2l6ZSwgd3NpemU7CisgICAgaW50IHVzaWduLCB2c2lnbiwgd3NpZ247CisKKyAgICBpZiggdS0+bmxpbWJzIDwgdi0+bmxpbWJzICkgeyAvKiBTd2FwIFUgYW5kIFYuICovCisJdXNpemUgPSB2LT5ubGltYnM7CisJdXNpZ24gPSB2LT5zaWduOworCXZzaXplID0gdS0+bmxpbWJzOworCXZzaWduID0gdS0+c2lnbjsKKwl3c2l6ZSA9IHVzaXplICsgMTsKKwlSRVNJWkVfSUZfTkVFREVEKHcsIHdzaXplKTsKKwkvKiBUaGVzZSBtdXN0IGJlIGFmdGVyIHJlYWxsb2MgKHUgb3IgdiBtYXkgYmUgdGhlIHNhbWUgYXMgdykuICAqLworCXVwICAgID0gdi0+ZDsKKwl2cCAgICA9IHUtPmQ7CisgICAgfQorICAgIGVsc2UgeworCXVzaXplID0gdS0+bmxpbWJzOworCXVzaWduID0gdS0+c2lnbjsKKwl2c2l6ZSA9IHYtPm5saW1iczsKKwl2c2lnbiA9IHYtPnNpZ247CisJd3NpemUgPSB1c2l6ZSArIDE7CisJUkVTSVpFX0lGX05FRURFRCh3LCB3c2l6ZSk7CisJLyogVGhlc2UgbXVzdCBiZSBhZnRlciByZWFsbG9jICh1IG9yIHYgbWF5IGJlIHRoZSBzYW1lIGFzIHcpLiAgKi8KKwl1cCAgICA9IHUtPmQ7CisJdnAgICAgPSB2LT5kOworICAgIH0KKyAgICB3cCA9IHctPmQ7CisgICAgd3NpZ24gPSAwOworCisgICAgaWYoICF2c2l6ZSApIHsgIC8qIHNpbXBsZSAqLworCU1QTl9DT1BZKHdwLCB1cCwgdXNpemUgKTsKKwl3c2l6ZSA9IHVzaXplOworCXdzaWduID0gdXNpZ247CisgICAgfQorICAgIGVsc2UgaWYoIHVzaWduICE9IHZzaWduICkgeyAvKiBkaWZmZXJlbnQgc2lnbiAqLworCS8qIFRoaXMgdGVzdCBpcyByaWdodCBzaW5jZSBVU0laRSA+PSBWU0laRSAqLworCWlmKCB1c2l6ZSAhPSB2c2l6ZSApIHsKKwkgICAgX2djcnlfbXBpaF9zdWIod3AsIHVwLCB1c2l6ZSwgdnAsIHZzaXplKTsKKwkgICAgd3NpemUgPSB1c2l6ZTsKKwkgICAgTVBOX05PUk1BTElaRSh3cCwgd3NpemUpOworCSAgICB3c2lnbiA9IHVzaWduOworCX0KKwllbHNlIGlmKCBfZ2NyeV9tcGloX2NtcCh1cCwgdnAsIHVzaXplKSA8IDAgKSB7CisJICAgIF9nY3J5X21waWhfc3ViX24od3AsIHZwLCB1cCwgdXNpemUpOworCSAgICB3c2l6ZSA9IHVzaXplOworCSAgICBNUE5fTk9STUFMSVpFKHdwLCB3c2l6ZSk7CisJICAgIGlmKCAhdXNpZ24gKQorCQl3c2lnbiA9IDE7CisJfQorCWVsc2UgeworCSAgICBfZ2NyeV9tcGloX3N1Yl9uKHdwLCB1cCwgdnAsIHVzaXplKTsKKwkgICAgd3NpemUgPSB1c2l6ZTsKKwkgICAgTVBOX05PUk1BTElaRSh3cCwgd3NpemUpOworCSAgICBpZiggdXNpZ24gKQorCQl3c2lnbiA9IDE7CisJfQorICAgIH0KKyAgICBlbHNlIHsgLyogVSBhbmQgViBoYXZlIHNhbWUgc2lnbi4gQWRkIHRoZW0uICovCisJbXBpX2xpbWJfdCBjeSA9IF9nY3J5X21waWhfYWRkKHdwLCB1cCwgdXNpemUsIHZwLCB2c2l6ZSk7CisJd3BbdXNpemVdID0gY3k7CisJd3NpemUgPSB1c2l6ZSArIGN5OworCWlmKCB1c2lnbiApCisJICAgIHdzaWduID0gMTsKKyAgICB9CisKKyAgICB3LT5ubGltYnMgPSB3c2l6ZTsKKyAgICB3LT5zaWduID0gd3NpZ247Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFN1YnRyYWN0IHRoZSB1bnNpZ25lZCBpbnRlZ2VyIFYgZnJvbSB0aGUgbXBpLWludGVnZXIgVSBhbmQgc3RvcmUgdGhlCisgKiByZXN1bHQgaW4gVy4KKyAqLwordm9pZAorX2djcnlfbXBpX3N1Yl91aShnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICkKK3sKKyAgICBtcGlfcHRyX3Qgd3AsIHVwOworICAgIG1waV9zaXplX3QgdXNpemUsIHdzaXplOworICAgIGludCB1c2lnbiwgd3NpZ247CisKKyAgICB1c2l6ZSA9IHUtPm5saW1iczsKKyAgICB1c2lnbiA9IHUtPnNpZ247CisgICAgd3NpZ24gPSAwOworCisgICAgLyogSWYgbm90IHNwYWNlIGZvciBXIChhbmQgcG9zc2libGUgY2FycnkpLCBpbmNyZWFzZSBzcGFjZS4gICovCisgICAgd3NpemUgPSB1c2l6ZSArIDE7CisgICAgaWYoIHctPmFsbG9jZWQgPCB3c2l6ZSApCisJbXBpX3Jlc2l6ZSh3LCB3c2l6ZSk7CisKKyAgICAvKiBUaGVzZSBtdXN0IGJlIGFmdGVyIHJlYWxsb2MgKFUgbWF5IGJlIHRoZSBzYW1lIGFzIFcpLiAgKi8KKyAgICB1cCA9IHUtPmQ7CisgICAgd3AgPSB3LT5kOworCisgICAgaWYoICF1c2l6ZSApIHsgIC8qIHNpbXBsZSAqLworCXdwWzBdID0gdjsKKwl3c2l6ZSA9IHY/IDE6MDsKKwl3c2lnbiA9IDE7CisgICAgfQorICAgIGVsc2UgaWYoIHVzaWduICkgewkvKiBtcGkgYW5kIHYgYXJlIG5lZ2F0aXZlICovCisJbXBpX2xpbWJfdCBjeTsKKwljeSA9IF9nY3J5X21waWhfYWRkXzEod3AsIHVwLCB1c2l6ZSwgdik7CisJd3BbdXNpemVdID0gY3k7CisJd3NpemUgPSB1c2l6ZSArIGN5OworICAgIH0KKyAgICBlbHNlIHsgIC8qIFRoZSBzaWducyBhcmUgZGlmZmVyZW50LiAgTmVlZCBleGFjdCBjb21wYXJpc29uIHRvIGRldGVybWluZQorCSAgICAgKiB3aGljaCBvcGVyYW5kIHRvIHN1YnRyYWN0IGZyb20gd2hpY2guICAqLworCWlmKCB1c2l6ZSA9PSAxICYmIHVwWzBdIDwgdiApIHsKKwkgICAgd3BbMF0gPSB2IC0gdXBbMF07CisJICAgIHdzaXplID0gMTsKKwkgICAgd3NpZ24gPSAxOworCX0KKwllbHNlIHsKKwkgICAgX2djcnlfbXBpaF9zdWJfMSh3cCwgdXAsIHVzaXplLCB2KTsKKwkgICAgLyogU2l6ZSBjYW4gZGVjcmVhc2Ugd2l0aCBhdCBtb3N0IG9uZSBsaW1iLiAqLworCSAgICB3c2l6ZSA9IHVzaXplIC0gKHdwW3VzaXplLTFdPT0wKTsKKwl9CisgICAgfQorCisgICAgdy0+bmxpbWJzID0gd3NpemU7CisgICAgdy0+c2lnbiAgID0gd3NpZ247Cit9CisKK3ZvaWQKK19nY3J5X21waV9zdWIoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdikKK3sKKyAgZ2NyeV9tcGlfdCB2diA9IG1waV9jb3B5ICh2KTsKKyAgdnYtPnNpZ24gPSAhIHZ2LT5zaWduOworICBtcGlfYWRkICh3LCB1LCB2dik7CisgIG1waV9mcmVlICh2dik7Cit9CisKKwordm9pZAorX2djcnlfbXBpX2FkZG0oIGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYsIGdjcnlfbXBpX3QgbSkKK3sKKyAgbXBpX2FkZCAodywgdSwgdik7CisgIG1waV9tb2QgKHcsIHcsIG0pOworfQorCit2b2lkCitfZ2NyeV9tcGlfc3VibSggZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKQoreworICBtcGlfc3ViICh3LCB1LCB2KTsKKyAgbXBpX21vZCAodywgdywgbSk7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLWJpdC5jIGIvbXBpL21waS1iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FmZGEwCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1iaXQuYwpAQCAtMCwwICsxLDQwNyBAQAorLyogbXBpLWJpdC5jICAtICBNUEkgYml0IGxldmVsIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzICBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworI2lmZGVmIE1QSV9JTlRFUk5BTF9ORUVEX0NMWl9UQUIKKyNpZmRlZiBfX1NURENfXworY29uc3QKKyNlbmRpZgordW5zaWduZWQgY2hhcgorX2djcnlfY2x6X3RhYltdID0KK3sKKyAgMCwxLDIsMiwzLDMsMywzLDQsNCw0LDQsNCw0LDQsNCw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LAorICA2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsCisgIDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNywKKyAgNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LAorICA4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsCisgIDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCwKKyAgOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LAorICA4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsCit9OworI2VuZGlmCisKKworI2RlZmluZSBBX0xJTUJfMSAoKG1waV9saW1iX3QpMSkKKworCisvKioqKioqKioqKioqKioqKgorICogU29tZXRpbWVzIHdlIGhhdmUgTVNMIChtb3N0IHNpZ25pZmljYW50IGxpbWJzKSB3aGljaCBhcmUgMDsKKyAqIHRoaXMgaXMgZm9yIHNvbWUgcmVhc29ucyBub3QgZ29vZCwgc28gdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uCisgKi8KK3ZvaWQKK19nY3J5X21waV9ub3JtYWxpemUoIGdjcnlfbXBpX3QgYSApCit7CisgICAgaWYoIG1waV9pc19vcGFxdWUoYSkgKQorCXJldHVybjsKKworICAgIGZvciggOyBhLT5ubGltYnMgJiYgIWEtPmRbYS0+bmxpbWJzLTFdOyBhLT5ubGltYnMtLSApCisJOworfQorCisKKworLyoqKioqKioqKioqKioqKioKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gQS4KKyAqLwordW5zaWduZWQgaW50CitfZ2NyeV9tcGlfZ2V0X25iaXRzIChnY3J5X21waV90IGEpCit7CisgICAgdW5zaWduZWQgbjsKKworICAgIGlmKCBtcGlfaXNfb3BhcXVlKGEpICkgeworCXJldHVybiBhLT5zaWduOyAvKiB3aGljaCBob2xkcyB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgICB9CisKKyAgICBfZ2NyeV9tcGlfbm9ybWFsaXplKCBhICk7CisgICAgaWYoIGEtPm5saW1icyApIHsKKwltcGlfbGltYl90IGFsaW1iID0gYS0+ZFthLT5ubGltYnMtMV07CisJaWYoIGFsaW1iICkKKwkgICAgY291bnRfbGVhZGluZ196ZXJvcyggbiwgYWxpbWIgKTsKKwllbHNlCisJICAgIG4gPSBCSVRTX1BFUl9NUElfTElNQjsKKwluID0gQklUU19QRVJfTVBJX0xJTUIgLSBuICsgKGEtPm5saW1icy0xKSAqIEJJVFNfUEVSX01QSV9MSU1COworICAgIH0KKyAgICBlbHNlCisJbiA9IDA7CisgICAgcmV0dXJuIG47Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFRlc3Qgd2hldGhlciBiaXQgTiBpcyBzZXQuCisgKi8KK2ludAorX2djcnlfbXBpX3Rlc3RfYml0KCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGltYm5vLCBiaXRubzsKKyAgICBtcGlfbGltYl90IGxpbWI7CisKKyAgICBsaW1ibm8gPSBuIC8gQklUU19QRVJfTVBJX0xJTUI7CisgICAgYml0bm8gID0gbiAlIEJJVFNfUEVSX01QSV9MSU1COworCisgICAgaWYoIGxpbWJubyA+PSBhLT5ubGltYnMgKQorCXJldHVybiAwOyAvKiB0b28gZmFyIGxlZnQ6IHRoaXMgaXMgYSAwICovCisgICAgbGltYiA9IGEtPmRbbGltYm5vXTsKKyAgICByZXR1cm4gKGxpbWIgJiAoQV9MSU1CXzEgPDwgYml0bm8pKT8gMTogMDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogU2V0IGJpdCBOIG9mIEEuCisgKi8KK3ZvaWQKK19nY3J5X21waV9zZXRfYml0KCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuICkKK3sKKyAgdW5zaWduZWQgaW50IGxpbWJubywgYml0bm87CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsaW1ibm8gPSBuIC8gQklUU19QRVJfTVBJX0xJTUI7CisgIGJpdG5vICA9IG4gJSBCSVRTX1BFUl9NUElfTElNQjsKKworICBpZiAoIGxpbWJubyA+PSBhLT5ubGltYnMgKQorICAgIHsKKyAgICAgIG1waV9yZXNpemUgKGEsIGxpbWJubysxICk7CisgICAgICBhLT5ubGltYnMgPSBsaW1ibm8rMTsKKyAgICB9CisgIGEtPmRbbGltYm5vXSB8PSAoQV9MSU1CXzE8PGJpdG5vKTsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIFNldCBiaXQgTiBvZiBBLiBhbmQgY2xlYXIgYWxsIGJpdHMgYWJvdmUKKyAqLwordm9pZAorX2djcnlfbXBpX3NldF9oaWdoYml0KCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuICkKK3sKKyAgdW5zaWduZWQgaW50IGxpbWJubywgYml0bm87CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsaW1ibm8gPSBuIC8gQklUU19QRVJfTVBJX0xJTUI7CisgIGJpdG5vICA9IG4gJSBCSVRTX1BFUl9NUElfTElNQjsKKworICBpZiAoIGxpbWJubyA+PSBhLT5ubGltYnMgKQorICAgIHsKKyAgICAgIG1waV9yZXNpemUgKGEsIGxpbWJubysxICk7CisgICAgICBhLT5ubGltYnMgPSBsaW1ibm8rMTsKKyAgICB9CisgIGEtPmRbbGltYm5vXSB8PSAoQV9MSU1CXzE8PGJpdG5vKTsKKyAgZm9yICggYml0bm8rKzsgYml0bm8gPCBCSVRTX1BFUl9NUElfTElNQjsgYml0bm8rKyApCisgICAgYS0+ZFtsaW1ibm9dICY9IH4oQV9MSU1CXzEgPDwgYml0bm8pOworICBhLT5ubGltYnMgPSBsaW1ibm8rMTsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIGNsZWFyIGJpdCBOIG9mIEEgYW5kIGFsbCBiaXRzIGFib3ZlCisgKi8KK3ZvaWQKK19nY3J5X21waV9jbGVhcl9oaWdoYml0KCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuICkKK3sKKyAgdW5zaWduZWQgaW50IGxpbWJubywgYml0bm87CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsaW1ibm8gPSBuIC8gQklUU19QRVJfTVBJX0xJTUI7CisgIGJpdG5vICA9IG4gJSBCSVRTX1BFUl9NUElfTElNQjsKKworICBpZiggbGltYm5vID49IGEtPm5saW1icyApCisgICAgcmV0dXJuOyAvKiBub3QgYWxsb2NhdGVkLCB0aGVyZWZvcmUgbm8gbmVlZCB0byBjbGVhciBiaXRzIDotKSAqLworCisgIGZvciggOyBiaXRubyA8IEJJVFNfUEVSX01QSV9MSU1COyBiaXRubysrICkKKyAgICBhLT5kW2xpbWJub10gJj0gfihBX0xJTUJfMSA8PCBiaXRubyk7CisgIGEtPm5saW1icyA9IGxpbWJubysxOworfQorCisvKioqKioqKioqKioqKioqKgorICogQ2xlYXIgYml0IE4gb2YgQS4KKyAqLwordm9pZAorX2djcnlfbXBpX2NsZWFyX2JpdCggZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbiApCit7CisgIHVuc2lnbmVkIGludCBsaW1ibm8sIGJpdG5vOworCisgIGlmIChtcGlfaXNfaW1tdXRhYmxlIChhKSkKKyAgICB7CisgICAgICBtcGlfaW1tdXRhYmxlX2ZhaWxlZCAoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbGltYm5vID0gbiAvIEJJVFNfUEVSX01QSV9MSU1COworICBiaXRubyAgPSBuICUgQklUU19QRVJfTVBJX0xJTUI7CisKKyAgaWYgKGxpbWJubyA+PSBhLT5ubGltYnMpCisgICAgcmV0dXJuOyAvKiBEb24ndCBuZWVkIHRvIGNsZWFyIHRoaXMgYml0LCBpdCdzIGZhciB0b28gbGVmdC4gICovCisgIGEtPmRbbGltYm5vXSAmPSB+KEFfTElNQl8xIDw8IGJpdG5vKTsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogU2hpZnQgQSBieSBDT1VOVCBsaW1icyB0byB0aGUgcmlnaHQKKyAqIFRoaXMgaXMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgTVBJIGxpYnJhcnkKKyAqLwordm9pZAorX2djcnlfbXBpX3JzaGlmdF9saW1icyggZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgY291bnQgKQoreworICBtcGlfcHRyX3QgYXAgPSBhLT5kOworICBtcGlfc2l6ZV90IG4gPSBhLT5ubGltYnM7CisgIHVuc2lnbmVkIGludCBpOworCisgIGlmIChtcGlfaXNfaW1tdXRhYmxlIChhKSkKKyAgICB7CisgICAgICBtcGlfaW1tdXRhYmxlX2ZhaWxlZCAoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKGNvdW50ID49IG4pCisgICAgeworICAgICAgYS0+bmxpbWJzID0gMDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yKCBpID0gMDsgaSA8IG4gLSBjb3VudDsgaSsrICkKKyAgICBhcFtpXSA9IGFwW2krY291bnRdOworICBhcFtpXSA9IDA7CisgIGEtPm5saW1icyAtPSBjb3VudDsKK30KKworCisvKgorICogU2hpZnQgQSBieSBOIGJpdHMgdG8gdGhlIHJpZ2h0LgorICovCit2b2lkCitfZ2NyeV9tcGlfcnNoaWZ0ICggZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuICkKK3sKKyAgbXBpX3NpemVfdCB4c2l6ZTsKKyAgdW5zaWduZWQgaW50IGk7CisgIHVuc2lnbmVkIGludCBubGltYnMgPSAobi9CSVRTX1BFUl9NUElfTElNQik7CisgIHVuc2lnbmVkIGludCBuYml0cyA9IChuJUJJVFNfUEVSX01QSV9MSU1CKTsKKworICBpZiAobXBpX2lzX2ltbXV0YWJsZSAoeCkpCisgICAgeworICAgICAgbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICggeCA9PSBhICkKKyAgICB7CisgICAgICAvKiBJbi1wbGFjZSBvcGVyYXRpb24uICAqLworICAgICAgaWYgKCBubGltYnMgPj0geC0+bmxpbWJzICkKKyAgICAgICAgeworICAgICAgICAgIHgtPm5saW1icyA9IDA7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGlmIChubGltYnMpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGk9MDsgaSA8IHgtPm5saW1icyAtIG5saW1iczsgaSsrICkKKyAgICAgICAgICAgIHgtPmRbaV0gPSB4LT5kW2krbmxpbWJzXTsKKyAgICAgICAgICB4LT5kW2ldID0gMDsKKyAgICAgICAgICB4LT5ubGltYnMgLT0gbmxpbWJzOworCisgICAgICAgIH0KKyAgICAgIGlmICggeC0+bmxpbWJzICYmIG5iaXRzICkKKyAgICAgICAgX2djcnlfbXBpaF9yc2hpZnQgKCB4LT5kLCB4LT5kLCB4LT5ubGltYnMsIG5iaXRzICk7CisgICAgfQorICBlbHNlIGlmICggbmxpbWJzICkKKyAgICB7CisgICAgICAvKiBDb3B5IGFuZCBzaGlmdCBieSBtb3JlIG9yIGVxdWFsIGJpdHMgdGhhbiBpbiBhIGxpbWIuICovCisgICAgICB4c2l6ZSA9IGEtPm5saW1iczsKKyAgICAgIHgtPnNpZ24gPSBhLT5zaWduOworICAgICAgUkVTSVpFX0lGX05FRURFRCAoeCwgeHNpemUpOworICAgICAgeC0+bmxpbWJzID0geHNpemU7CisgICAgICBmb3IgKGk9MDsgaSA8IGEtPm5saW1iczsgaSsrICkKKyAgICAgICAgeC0+ZFtpXSA9IGEtPmRbaV07CisgICAgICB4LT5ubGltYnMgPSBpOworCisgICAgICBpZiAoIG5saW1icyA+PSB4LT5ubGltYnMgKQorICAgICAgICB7CisgICAgICAgICAgeC0+bmxpbWJzID0gMDsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgaWYgKG5saW1icykKKyAgICAgICAgeworICAgICAgICAgIGZvciAoaT0wOyBpIDwgeC0+bmxpbWJzIC0gbmxpbWJzOyBpKysgKQorICAgICAgICAgICAgeC0+ZFtpXSA9IHgtPmRbaStubGltYnNdOworICAgICAgICAgIHgtPmRbaV0gPSAwOworICAgICAgICAgIHgtPm5saW1icyAtPSBubGltYnM7CisgICAgICAgIH0KKworICAgICAgaWYgKCB4LT5ubGltYnMgJiYgbmJpdHMgKQorICAgICAgICBfZ2NyeV9tcGloX3JzaGlmdCAoIHgtPmQsIHgtPmQsIHgtPm5saW1icywgbmJpdHMgKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBDb3B5IGFuZCBzaGlmdCBieSBsZXNzIHRoYW4gYml0cyBpbiBhIGxpbWIuICAqLworICAgICAgeHNpemUgPSBhLT5ubGltYnM7CisgICAgICB4LT5zaWduID0gYS0+c2lnbjsKKyAgICAgIFJFU0laRV9JRl9ORUVERUQgKHgsIHhzaXplKTsKKyAgICAgIHgtPm5saW1icyA9IHhzaXplOworCisgICAgICBpZiAoIHhzaXplICkKKyAgICAgICAgeworICAgICAgICAgIGlmIChuYml0cyApCisgICAgICAgICAgICBfZ2NyeV9tcGloX3JzaGlmdCAoeC0+ZCwgYS0+ZCwgeC0+bmxpbWJzLCBuYml0cyApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVGhlIHJzaGlmdCBoZWxwZXIgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCBmb3IKKyAgICAgICAgICAgICAgICAgTkJJVFM9PTAsIHRodXMgd2UgZG8gYSBwbGFpbiBjb3B5IGhlcmUuICovCisgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgeC0+bmxpbWJzOyBpKysgKQorICAgICAgICAgICAgICAgIHgtPmRbaV0gPSBhLT5kW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBNUE5fTk9STUFMSVpFICh4LT5kLCB4LT5ubGltYnMpOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBTaGlmdCBBIGJ5IENPVU5UIGxpbWJzIHRvIHRoZSBsZWZ0CisgKiBUaGlzIGlzIHVzZWQgb25seSB3aXRoaW4gdGhlIE1QSSBsaWJyYXJ5CisgKi8KK3ZvaWQKK19nY3J5X21waV9sc2hpZnRfbGltYnMgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICBtcGlfcHRyX3QgYXA7CisgIGludCBuID0gYS0+bmxpbWJzOworICBpbnQgaTsKKworICBpZiAoIWNvdW50IHx8ICFuKQorICAgIHJldHVybjsKKworICBSRVNJWkVfSUZfTkVFREVEIChhLCBuK2NvdW50KTsKKworICBhcCA9IGEtPmQ7CisgIGZvciAoaSA9IG4tMTsgaSA+PSAwOyBpLS0pCisgICAgYXBbaStjb3VudF0gPSBhcFtpXTsKKyAgZm9yIChpPTA7IGkgPCBjb3VudDsgaSsrICkKKyAgICBhcFtpXSA9IDA7CisgIGEtPm5saW1icyArPSBjb3VudDsKK30KKworCisvKgorICogU2hpZnQgQSBieSBOIGJpdHMgdG8gdGhlIGxlZnQuCisgKi8KK3ZvaWQKK19nY3J5X21waV9sc2hpZnQgKCBnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4gKQoreworICB1bnNpZ25lZCBpbnQgbmxpbWJzID0gKG4vQklUU19QRVJfTVBJX0xJTUIpOworICB1bnNpZ25lZCBpbnQgbmJpdHMgPSAobiVCSVRTX1BFUl9NUElfTElNQik7CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKHgpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoeCA9PSBhICYmICFuKQorICAgIHJldHVybjsgIC8qIEluLXBsYWNlIHNoaWZ0IHdpdGggYW4gYW1vdW50IG9mIHplcm8uICAqLworCisgIGlmICggeCAhPSBhICkKKyAgICB7CisgICAgICAvKiBDb3B5IEEgdG8gWC4gICovCisgICAgICB1bnNpZ25lZCBpbnQgYWxpbWJzID0gYS0+bmxpbWJzOworICAgICAgaW50IGFzaWduICA9IGEtPnNpZ247CisgICAgICBtcGlfcHRyX3QgeHAsIGFwOworCisgICAgICBSRVNJWkVfSUZfTkVFREVEICh4LCBhbGltYnMrbmxpbWJzKzEpOworICAgICAgeHAgPSB4LT5kOworICAgICAgYXAgPSBhLT5kOworICAgICAgTVBOX0NPUFkgKHhwLCBhcCwgYWxpbWJzKTsKKyAgICAgIHgtPm5saW1icyA9IGFsaW1iczsKKyAgICAgIHgtPmZsYWdzID0gYS0+ZmxhZ3M7CisgICAgICB4LT5zaWduID0gYXNpZ247CisgICAgfQorCisgIGlmIChubGltYnMgJiYgIW5iaXRzKQorICAgIHsKKyAgICAgIC8qIFNoaWZ0IGEgZnVsbCBudW1iZXIgb2YgbGltYnMuICAqLworICAgICAgX2djcnlfbXBpX2xzaGlmdF9saW1icyAoeCwgbmxpbWJzKTsKKyAgICB9CisgIGVsc2UgaWYgKG4pCisgICAgeworICAgICAgLyogV2UgdXNlIGEgdmVyeSBkdW1wIGFwcHJvYWNoOiBTaGlmdCBsZWZ0IGJ5IHRoZSBudW1iZXIgb2YKKyAgICAgICAgIGxpbWJzIHBsdXMgb25lIGFuZCB0aGFuIGZpeCBpdCB1cCBieSBhbiByc2hpZnQuICAqLworICAgICAgX2djcnlfbXBpX2xzaGlmdF9saW1icyAoeCwgbmxpbWJzKzEpOworICAgICAgbXBpX3JzaGlmdCAoeCwgeCwgQklUU19QRVJfTVBJX0xJTUIgLSBuYml0cyk7CisgICAgfQorCisgIE1QTl9OT1JNQUxJWkUgKHgtPmQsIHgtPm5saW1icyk7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLWNtcC5jIGIvbXBpL21waS1jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzhhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1jbXAuYwpAQCAtMCwwICsxLDEwNyBAQAorLyogbXBpLWNtcC5jICAtICBNUEkgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorCitpbnQKK19nY3J5X21waV9jbXBfdWkgKGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2KQoreworICBtcGlfbGltYl90IGxpbWIgPSB2OworCisgIF9nY3J5X21waV9ub3JtYWxpemUgKHUpOworCisgIC8qIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFUgY29udGFpbnMgbm8gbGltYi4gICovCisgIGlmICh1LT5ubGltYnMgPT0gMCkKKyAgICByZXR1cm4gLShsaW1iICE9IDApOworCisgIC8qIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFUgaXMgbmVnYXRpdmUuICAqLworICBpZiAodS0+c2lnbikKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKHUtPm5saW1icyA9PSAxKQorICAgIHsKKyAgICAgIC8qIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFUgY29udGFpbnMgZXhhY3RseSBvbmUgbGltYi4gICovCisKKyAgICAgIGlmICh1LT5kWzBdID4gbGltYikKKwlyZXR1cm4gMTsKKyAgICAgIGlmICh1LT5kWzBdIDwgbGltYikKKwlyZXR1cm4gLTE7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICAvKiBIYW5kbGUgdGhlIGNhc2UgdGhhdCBVIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGltYi4gICovCisgICAgcmV0dXJuIDE7Cit9CisKKworaW50CitfZ2NyeV9tcGlfY21wIChnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdikKK3sKKyAgbXBpX3NpemVfdCB1c2l6ZTsKKyAgbXBpX3NpemVfdCB2c2l6ZTsKKyAgaW50IGNtcDsKKworICBpZiAobXBpX2lzX29wYXF1ZSAodSkgfHwgbXBpX2lzX29wYXF1ZSAodikpCisgICAgeworICAgICAgaWYgKG1waV9pc19vcGFxdWUgKHUpICYmICFtcGlfaXNfb3BhcXVlICh2KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgaWYgKCFtcGlfaXNfb3BhcXVlICh1KSAmJiBtcGlfaXNfb3BhcXVlICh2KSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoIXUtPnNpZ24gJiYgIXYtPnNpZ24pCisgICAgICAgIHJldHVybiAwOyAvKiBFbXB0eSBidWZmZXJzIGFyZSBpZGVudGljYWwuICAqLworICAgICAgaWYgKHUtPnNpZ24gPCB2LT5zaWduKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBpZiAodS0+c2lnbiA+IHYtPnNpZ24pCisgICAgICAgIHJldHVybiAxOworICAgICAgcmV0dXJuIG1lbWNtcCAodS0+ZCwgdi0+ZCwgKHUtPnNpZ24rNykvOCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgX2djcnlfbXBpX25vcm1hbGl6ZSAodSk7CisgICAgICBfZ2NyeV9tcGlfbm9ybWFsaXplICh2KTsKKworICAgICAgdXNpemUgPSB1LT5ubGltYnM7CisgICAgICB2c2l6ZSA9IHYtPm5saW1iczsKKworICAgICAgLyogQ29tcGFyZSBzaWduIGJpdHMuICAqLworCisgICAgICBpZiAoIXUtPnNpZ24gJiYgdi0+c2lnbikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAodS0+c2lnbiAmJiAhdi0+c2lnbikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAvKiBVIGFuZCBWIGFyZSBlaXRoZXIgYm90aCBwb3NpdGl2ZSBvciBib3RoIG5lZ2F0aXZlLiAgKi8KKworICAgICAgaWYgKHVzaXplICE9IHZzaXplICYmICF1LT5zaWduICYmICF2LT5zaWduKQorICAgICAgICByZXR1cm4gdXNpemUgLSB2c2l6ZTsKKyAgICAgIGlmICh1c2l6ZSAhPSB2c2l6ZSAmJiB1LT5zaWduICYmIHYtPnNpZ24pCisgICAgICAgIHJldHVybiB2c2l6ZSArIHVzaXplOworICAgICAgaWYgKCF1c2l6ZSApCisgICAgICAgIHJldHVybiAwOworICAgICAgaWYgKCEoY21wID0gX2djcnlfbXBpaF9jbXAgKHUtPmQsIHYtPmQsIHVzaXplKSkpCisgICAgICAgIHJldHVybiAwOworICAgICAgaWYgKChjbXAgPCAwPzE6MCkgPT0gKHUtPnNpZ24/MTowKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLWRpdi5jIGIvbXBpL21waS1kaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM5OWMzCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1kaXYuYwpAQCAtMCwwICsxLDM1NiBAQAorLyogbXBpLWRpdi5jICAtICBNUEkgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYsIDE5OTgsIDIwMDEsIDIwMDIsCisgKiAgICAgICAgICAgICAgIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorCisKK3ZvaWQKK19nY3J5X21waV9mZGl2X3IoIGdjcnlfbXBpX3QgcmVtLCBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IgKQoreworICAgIGludCBkaXZpc29yX3NpZ24gPSBkaXZpc29yLT5zaWduOworICAgIGdjcnlfbXBpX3QgdGVtcF9kaXZpc29yID0gTlVMTDsKKworICAgIC8qIFdlIG5lZWQgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBkaXZpc29yIGFmdGVyIHRoZSByZW1haW5kZXIgaGFzIGJlZW4KKyAgICAgKiBwcmVsaW1pbmFyeSBjYWxjdWxhdGVkLglXZSBoYXZlIHRvIGNvcHkgaXQgdG8gdGVtcG9yYXJ5IHNwYWNlIGlmIGl0J3MKKyAgICAgKiB0aGUgc2FtZSB2YXJpYWJsZSBhcyBSRU0uICAqLworICAgIGlmKCByZW0gPT0gZGl2aXNvciApIHsKKwl0ZW1wX2Rpdmlzb3IgPSBtcGlfY29weSggZGl2aXNvciApOworCWRpdmlzb3IgPSB0ZW1wX2Rpdmlzb3I7CisgICAgfQorCisgICAgX2djcnlfbXBpX3RkaXZfciggcmVtLCBkaXZpZGVuZCwgZGl2aXNvciApOworCisgICAgaWYoICgoZGl2aXNvcl9zaWduPzE6MCkgXiAoZGl2aWRlbmQtPnNpZ24/MTowKSkgJiYgcmVtLT5ubGltYnMgKQorCW1waV9hZGQgKHJlbSwgcmVtLCBkaXZpc29yKTsKKworICAgIGlmKCB0ZW1wX2Rpdmlzb3IgKQorCW1waV9mcmVlKHRlbXBfZGl2aXNvcik7Cit9CisKKworCisvKioqKioqKioqKioqKioqKgorICogRGl2aXNpb24gcm91bmRpbmcgdGhlIHF1b3RpZW50IHRvd2FyZHMgLWluZmluaXR5LgorICogVGhlIHJlbWFpbmRlciBnZXRzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRlbm9taW5hdG9yLgorICogcmVtIGlzIG9wdGlvbmFsCisgKi8KKwordWxvbmcKK19nY3J5X21waV9mZGl2X3JfdWkoIGdjcnlfbXBpX3QgcmVtLCBnY3J5X21waV90IGRpdmlkZW5kLCB1bG9uZyBkaXZpc29yICkKK3sKKyAgICBtcGlfbGltYl90IHJsaW1iOworCisgICAgcmxpbWIgPSBfZ2NyeV9tcGloX21vZF8xKCBkaXZpZGVuZC0+ZCwgZGl2aWRlbmQtPm5saW1icywgZGl2aXNvciApOworICAgIGlmKCBybGltYiAmJiBkaXZpZGVuZC0+c2lnbiApCisJcmxpbWIgPSBkaXZpc29yIC0gcmxpbWI7CisKKyAgICBpZiggcmVtICkgeworCXJlbS0+ZFswXSA9IHJsaW1iOworCXJlbS0+bmxpbWJzID0gcmxpbWI/IDE6MDsKKyAgICB9CisgICAgcmV0dXJuIHJsaW1iOworfQorCisKK3ZvaWQKK19nY3J5X21waV9mZGl2X3EoIGdjcnlfbXBpX3QgcXVvdCwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgZ2NyeV9tcGlfdCBkaXZpc29yICkKK3sKKyAgICBnY3J5X21waV90IHRtcCA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnMocXVvdCkgKTsKKyAgICBfZ2NyeV9tcGlfZmRpdl9xciggcXVvdCwgdG1wLCBkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgbXBpX2ZyZWUodG1wKTsKK30KKwordm9pZAorX2djcnlfbXBpX2ZkaXZfcXIoIGdjcnlfbXBpX3QgcXVvdCwgZ2NyeV9tcGlfdCByZW0sIGdjcnlfbXBpX3QgZGl2aWRlbmQsIGdjcnlfbXBpX3QgZGl2aXNvciApCit7CisgICAgaW50IGRpdmlzb3Jfc2lnbiA9IGRpdmlzb3ItPnNpZ247CisgICAgZ2NyeV9tcGlfdCB0ZW1wX2Rpdmlzb3IgPSBOVUxMOworCisgICAgaWYoIHF1b3QgPT0gZGl2aXNvciB8fCByZW0gPT0gZGl2aXNvciApIHsKKwl0ZW1wX2Rpdmlzb3IgPSBtcGlfY29weSggZGl2aXNvciApOworCWRpdmlzb3IgPSB0ZW1wX2Rpdmlzb3I7CisgICAgfQorCisgICAgX2djcnlfbXBpX3RkaXZfcXIoIHF1b3QsIHJlbSwgZGl2aWRlbmQsIGRpdmlzb3IgKTsKKworICAgIGlmKCAoZGl2aXNvcl9zaWduIF4gZGl2aWRlbmQtPnNpZ24pICYmIHJlbS0+bmxpbWJzICkgeworCW1waV9zdWJfdWkoIHF1b3QsIHF1b3QsIDEgKTsKKwltcGlfYWRkKCByZW0sIHJlbSwgZGl2aXNvcik7CisgICAgfQorCisgICAgaWYoIHRlbXBfZGl2aXNvciApCisJbXBpX2ZyZWUodGVtcF9kaXZpc29yKTsKK30KKworCisvKiBJZiBkZW4gPT0gcXVvdCwgZGVuIG5lZWRzIHRlbXBvcmFyeSBzdG9yYWdlLgorICogSWYgZGVuID09IHJlbSwgZGVuIG5lZWRzIHRlbXBvcmFyeSBzdG9yYWdlLgorICogSWYgbnVtID09IHF1b3QsIG51bSBuZWVkcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KKyAqIElmIGRlbiBoYXMgdGVtcG9yYXJ5IHN0b3JhZ2UsIGl0IGNhbiBiZSBub3JtYWxpemVkIHdoaWxlIGJlaW5nIGNvcGllZCwKKyAqICAgaS5lIG5vIGV4dHJhIHN0b3JhZ2Ugc2hvdWxkIGJlIGFsbG9jYXRlZC4KKyAqLworCit2b2lkCitfZ2NyeV9tcGlfdGRpdl9yKCBnY3J5X21waV90IHJlbSwgZ2NyeV9tcGlfdCBudW0sIGdjcnlfbXBpX3QgZGVuKQoreworICAgIF9nY3J5X21waV90ZGl2X3FyKE5VTEwsIHJlbSwgbnVtLCBkZW4gKTsKK30KKwordm9pZAorX2djcnlfbXBpX3RkaXZfcXIoIGdjcnlfbXBpX3QgcXVvdCwgZ2NyeV9tcGlfdCByZW0sIGdjcnlfbXBpX3QgbnVtLCBnY3J5X21waV90IGRlbikKK3sKKyAgICBtcGlfcHRyX3QgbnAsIGRwOworICAgIG1waV9wdHJfdCBxcCwgcnA7CisgICAgbXBpX3NpemVfdCBuc2l6ZSA9IG51bS0+bmxpbWJzOworICAgIG1waV9zaXplX3QgZHNpemUgPSBkZW4tPm5saW1iczsKKyAgICBtcGlfc2l6ZV90IHFzaXplLCByc2l6ZTsKKyAgICBtcGlfc2l6ZV90IHNpZ25fcmVtYWluZGVyID0gbnVtLT5zaWduOworICAgIG1waV9zaXplX3Qgc2lnbl9xdW90aWVudCA9IG51bS0+c2lnbiBeIGRlbi0+c2lnbjsKKyAgICB1bnNpZ25lZCBub3JtYWxpemF0aW9uX3N0ZXBzOworICAgIG1waV9saW1iX3QgcV9saW1iOworICAgIG1waV9wdHJfdCBtYXJrZXJbNV07CisgICAgdW5zaWduZWQgaW50IG1hcmtlcl9ubGltYnNbNV07CisgICAgaW50IG1hcmtpZHg9MDsKKworICAgIC8qIEVuc3VyZSBzcGFjZSBpcyBlbm91Z2ggZm9yIHF1b3RpZW50IGFuZCByZW1haW5kZXIuCisgICAgICogV2UgbmVlZCBzcGFjZSBmb3IgYW4gZXh0cmEgbGltYiBpbiB0aGUgcmVtYWluZGVyLCBiZWNhdXNlIGl0J3MKKyAgICAgKiB1cC1zaGlmdGVkIChub3JtYWxpemVkKSBiZWxvdy4gICovCisgICAgcnNpemUgPSBuc2l6ZSArIDE7CisgICAgbXBpX3Jlc2l6ZSggcmVtLCByc2l6ZSk7CisKKyAgICBxc2l6ZSA9IHJzaXplIC0gZHNpemU7CSAgLyogcXNpemUgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoaXMuCSovCisgICAgaWYoIHFzaXplIDw9IDAgKSB7CisJaWYoIG51bSAhPSByZW0gKSB7CisJICAgIHJlbS0+bmxpbWJzID0gbnVtLT5ubGltYnM7CisJICAgIHJlbS0+c2lnbiA9IG51bS0+c2lnbjsKKwkgICAgTVBOX0NPUFkocmVtLT5kLCBudW0tPmQsIG5zaXplKTsKKwl9CisJaWYoIHF1b3QgKSB7CisJICAgIC8qIFRoaXMgbmVlZHMgdG8gZm9sbG93IHRoZSBhc3NpZ25tZW50IHRvIHJlbSwgaW4gY2FzZSB0aGUKKwkgICAgICogbnVtZXJhdG9yIGFuZCBxdW90aWVudCBhcmUgdGhlIHNhbWUuICAqLworCSAgICBxdW90LT5ubGltYnMgPSAwOworCSAgICBxdW90LT5zaWduID0gMDsKKwl9CisJcmV0dXJuOworICAgIH0KKworICAgIGlmKCBxdW90ICkKKwltcGlfcmVzaXplKCBxdW90LCBxc2l6ZSk7CisKKyAgICAvKiBSZWFkIHBvaW50ZXJzIGhlcmUsIHdoZW4gcmVhbGxvY2F0aW9uIGlzIGZpbmlzaGVkLiAgKi8KKyAgICBucCA9IG51bS0+ZDsKKyAgICBkcCA9IGRlbi0+ZDsKKyAgICBycCA9IHJlbS0+ZDsKKworICAgIC8qIE9wdGltaXplIGRpdmlzaW9uIGJ5IGEgc2luZ2xlLWxpbWIgZGl2aXNvci4gICovCisgICAgaWYoIGRzaXplID09IDEgKSB7CisJbXBpX2xpbWJfdCBybGltYjsKKwlpZiggcXVvdCApIHsKKwkgICAgcXAgPSBxdW90LT5kOworCSAgICBybGltYiA9IF9nY3J5X21waWhfZGl2bW9kXzEoIHFwLCBucCwgbnNpemUsIGRwWzBdICk7CisJICAgIHFzaXplIC09IHFwW3FzaXplIC0gMV0gPT0gMDsKKwkgICAgcXVvdC0+bmxpbWJzID0gcXNpemU7CisJICAgIHF1b3QtPnNpZ24gPSBzaWduX3F1b3RpZW50OworCX0KKwllbHNlCisJICAgIHJsaW1iID0gX2djcnlfbXBpaF9tb2RfMSggbnAsIG5zaXplLCBkcFswXSApOworCXJwWzBdID0gcmxpbWI7CisJcnNpemUgPSBybGltYiAhPSAwPzE6MDsKKwlyZW0tPm5saW1icyA9IHJzaXplOworCXJlbS0+c2lnbiA9IHNpZ25fcmVtYWluZGVyOworCXJldHVybjsKKyAgICB9CisKKworICAgIGlmKCBxdW90ICkgeworCXFwID0gcXVvdC0+ZDsKKwkvKiBNYWtlIHN1cmUgUVAgYW5kIE5QIHBvaW50IHRvIGRpZmZlcmVudCBvYmplY3RzLiAgT3RoZXJ3aXNlIHRoZQorCSAqIG51bWVyYXRvciB3b3VsZCBiZSBncmFkdWFsbHkgb3ZlcndyaXR0ZW4gYnkgdGhlIHF1b3RpZW50IGxpbWJzLiAgKi8KKwlpZihxcCA9PSBucCkgeyAvKiBDb3B5IE5QIG9iamVjdCB0byB0ZW1wb3Jhcnkgc3BhY2UuICAqLworICAgICAgICAgICAgbWFya2VyX25saW1ic1ttYXJraWR4XSA9IG5zaXplOworCSAgICBucCA9IG1hcmtlclttYXJraWR4KytdID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UobnNpemUsCisJCQkJCQkJICBtcGlfaXNfc2VjdXJlKHF1b3QpKTsKKwkgICAgTVBOX0NPUFkobnAsIHFwLCBuc2l6ZSk7CisJfQorICAgIH0KKyAgICBlbHNlIC8qIFB1dCBxdW90aWVudCBhdCB0b3Agb2YgcmVtYWluZGVyLiAqLworCXFwID0gcnAgKyBkc2l6ZTsKKworICAgIGNvdW50X2xlYWRpbmdfemVyb3MoIG5vcm1hbGl6YXRpb25fc3RlcHMsIGRwW2RzaXplIC0gMV0gKTsKKworICAgIC8qIE5vcm1hbGl6ZSB0aGUgZGVub21pbmF0b3IsIGkuZS4gbWFrZSBpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0IGJ5CisgICAgICogc2hpZnRpbmcgaXQgTk9STUFMSVpBVElPTl9TVEVQUyBiaXRzIHRvIHRoZSBsZWZ0LiAgQWxzbyBzaGlmdCB0aGUKKyAgICAgKiBudW1lcmF0b3IgdGhlIHNhbWUgbnVtYmVyIG9mIHN0ZXBzICh0byBrZWVwIHRoZSBxdW90aWVudCB0aGUgc2FtZSEpLgorICAgICAqLworICAgIGlmKCBub3JtYWxpemF0aW9uX3N0ZXBzICkgeworCW1waV9wdHJfdCB0cDsKKwltcGlfbGltYl90IG5saW1iOworCisJLyogU2hpZnQgdXAgdGhlIGRlbm9taW5hdG9yIHNldHRpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mCisJICogdGhlIG1vc3Qgc2lnbmlmaWNhbnQgd29yZC4gIFVzZSB0ZW1wb3Jhcnkgc3RvcmFnZSBub3QgdG8gY2xvYmJlcgorCSAqIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGUgZGVub21pbmF0b3IuICAqLworICAgICAgICBtYXJrZXJfbmxpbWJzW21hcmtpZHhdID0gZHNpemU7CisJdHAgPSBtYXJrZXJbbWFya2lkeCsrXSA9IG1waV9hbGxvY19saW1iX3NwYWNlKGRzaXplLG1waV9pc19zZWN1cmUoZGVuKSk7CisJX2djcnlfbXBpaF9sc2hpZnQoIHRwLCBkcCwgZHNpemUsIG5vcm1hbGl6YXRpb25fc3RlcHMgKTsKKwlkcCA9IHRwOworCisJLyogU2hpZnQgdXAgdGhlIG51bWVyYXRvciwgcG9zc2libHkgaW50cm9kdWNpbmcgYSBuZXcgbW9zdAorCSAqIHNpZ25pZmljYW50IHdvcmQuICBNb3ZlIHRoZSBzaGlmdGVkIG51bWVyYXRvciBpbiB0aGUgcmVtYWluZGVyCisJICogbWVhbndoaWxlLiAgKi8KKwlubGltYiA9IF9nY3J5X21waWhfbHNoaWZ0KHJwLCBucCwgbnNpemUsIG5vcm1hbGl6YXRpb25fc3RlcHMpOworCWlmKCBubGltYiApIHsKKwkgICAgcnBbbnNpemVdID0gbmxpbWI7CisJICAgIHJzaXplID0gbnNpemUgKyAxOworCX0KKwllbHNlCisJICAgIHJzaXplID0gbnNpemU7CisgICAgfQorICAgIGVsc2UgeworCS8qIFRoZSBkZW5vbWluYXRvciBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQsIGFzIHJlcXVpcmVkLglDb3B5IGl0IHRvCisJICogdGVtcG9yYXJ5IHNwYWNlIGlmIGl0IG92ZXJsYXBzIHdpdGggdGhlIHF1b3RpZW50IG9yIHJlbWFpbmRlci4gICovCisJaWYoIGRwID09IHJwIHx8IChxdW90ICYmIChkcCA9PSBxcCkpKSB7CisJICAgIG1waV9wdHJfdCB0cDsKKworICAgICAgICAgICAgbWFya2VyX25saW1ic1ttYXJraWR4XSA9IGRzaXplOworCSAgICB0cCA9IG1hcmtlclttYXJraWR4KytdID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoZHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2lzX3NlY3VyZShkZW4pKTsKKwkgICAgTVBOX0NPUFkoIHRwLCBkcCwgZHNpemUgKTsKKwkgICAgZHAgPSB0cDsKKwl9CisKKwkvKiBNb3ZlIHRoZSBudW1lcmF0b3IgdG8gdGhlIHJlbWFpbmRlci4gICovCisJaWYoIHJwICE9IG5wICkKKwkgICAgTVBOX0NPUFkocnAsIG5wLCBuc2l6ZSk7CisKKwlyc2l6ZSA9IG5zaXplOworICAgIH0KKworICAgIHFfbGltYiA9IF9nY3J5X21waWhfZGl2cmVtKCBxcCwgMCwgcnAsIHJzaXplLCBkcCwgZHNpemUgKTsKKworICAgIGlmKCBxdW90ICkgeworCXFzaXplID0gcnNpemUgLSBkc2l6ZTsKKwlpZihxX2xpbWIpIHsKKwkgICAgcXBbcXNpemVdID0gcV9saW1iOworCSAgICBxc2l6ZSArPSAxOworCX0KKworCXF1b3QtPm5saW1icyA9IHFzaXplOworCXF1b3QtPnNpZ24gPSBzaWduX3F1b3RpZW50OworICAgIH0KKworICAgIHJzaXplID0gZHNpemU7CisgICAgTVBOX05PUk1BTElaRSAocnAsIHJzaXplKTsKKworICAgIGlmKCBub3JtYWxpemF0aW9uX3N0ZXBzICYmIHJzaXplICkgeworCV9nY3J5X21waWhfcnNoaWZ0KHJwLCBycCwgcnNpemUsIG5vcm1hbGl6YXRpb25fc3RlcHMpOworCXJzaXplIC09IHJwW3JzaXplIC0gMV0gPT0gMD8xOjA7CisgICAgfQorCisgICAgcmVtLT5ubGltYnMgPSByc2l6ZTsKKyAgICByZW0tPnNpZ24JPSBzaWduX3JlbWFpbmRlcjsKKyAgICB3aGlsZSggbWFya2lkeCApCisgICAgICB7CisgICAgICAgIG1hcmtpZHgtLTsKKwlfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlIChtYXJrZXJbbWFya2lkeF0sIG1hcmtlcl9ubGltYnNbbWFya2lkeF0pOworICAgICAgfQorfQorCit2b2lkCitfZ2NyeV9tcGlfdGRpdl9xXzJleHAoIGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBpbnQgY291bnQgKQoreworICAgIG1waV9zaXplX3QgdXNpemUsIHdzaXplOworICAgIG1waV9zaXplX3QgbGltYl9jbnQ7CisKKyAgICB1c2l6ZSA9IHUtPm5saW1iczsKKyAgICBsaW1iX2NudCA9IGNvdW50IC8gQklUU19QRVJfTVBJX0xJTUI7CisgICAgd3NpemUgPSB1c2l6ZSAtIGxpbWJfY250OworICAgIGlmKCBsaW1iX2NudCA+PSB1c2l6ZSApCisJdy0+bmxpbWJzID0gMDsKKyAgICBlbHNlIHsKKwltcGlfcHRyX3Qgd3A7CisJbXBpX3B0cl90IHVwOworCisJUkVTSVpFX0lGX05FRURFRCggdywgd3NpemUgKTsKKwl3cCA9IHctPmQ7CisJdXAgPSB1LT5kOworCisJY291bnQgJT0gQklUU19QRVJfTVBJX0xJTUI7CisJaWYoIGNvdW50ICkgeworCSAgICBfZ2NyeV9tcGloX3JzaGlmdCggd3AsIHVwICsgbGltYl9jbnQsIHdzaXplLCBjb3VudCApOworCSAgICB3c2l6ZSAtPSAhd3Bbd3NpemUgLSAxXTsKKwl9CisJZWxzZSB7CisJICAgIE1QTl9DT1BZX0lOQ1IoIHdwLCB1cCArIGxpbWJfY250LCB3c2l6ZSk7CisJfQorCisJdy0+bmxpbWJzID0gd3NpemU7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKgorICogQ2hlY2sgd2hldGhlciBkaXZpZGVuZCBpcyBkaXZpc2libGUgYnkgZGl2aXNvcgorICogKG5vdGU6IGRpdmlzb3IgbXVzdCBmaXQgaW50byBhIGxpbWIpCisgKi8KK2ludAorX2djcnlfbXBpX2RpdmlzaWJsZV91aShnY3J5X21waV90IGRpdmlkZW5kLCB1bG9uZyBkaXZpc29yICkKK3sKKyAgICByZXR1cm4gIV9nY3J5X21waWhfbW9kXzEoIGRpdmlkZW5kLT5kLCBkaXZpZGVuZC0+bmxpbWJzLCBkaXZpc29yICk7Cit9CisKKwordm9pZAorX2djcnlfbXBpX2RpdiAoZ2NyeV9tcGlfdCBxdW90LCBnY3J5X21waV90IHJlbSwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwKKyAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZGl2aXNvciwgaW50IHJvdW5kKQoreworICBpZiAoIXJvdW5kKQorICAgIHsKKyAgICAgIGlmICghcmVtKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9tcGlfdCB0bXAgPSBtcGlfYWxsb2MgKG1waV9nZXRfbmxpbWJzKHF1b3QpKTsKKyAgICAgICAgICBfZ2NyeV9tcGlfdGRpdl9xciAocXVvdCwgdG1wLCBkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgbXBpX2ZyZWUgKHRtcCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgX2djcnlfbXBpX3RkaXZfcXIgKHF1b3QsIHJlbSwgZGl2aWRlbmQsIGRpdmlzb3IpOworICAgIH0KKyAgZWxzZSBpZiAocm91bmQgPCAwKQorICAgIHsKKyAgICAgIGlmICghcmVtKQorICAgICAgICBfZ2NyeV9tcGlfZmRpdl9xIChxdW90LCBkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICBlbHNlIGlmICghcXVvdCkKKyAgICAgICAgX2djcnlfbXBpX2ZkaXZfciAocmVtLCBkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICBlbHNlCisgICAgICAgIF9nY3J5X21waV9mZGl2X3FyIChxdW90LCByZW0sIGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICB9CisgIGVsc2UKKyAgICBsb2dfYnVnICgibXBpIHJvdW5kaW5nIHRvIGNlaWxpbmcgbm90IHlldCBpbXBsZW1lbnRlZFxuIik7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLWdjZC5jIGIvbXBpL21waS1nY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2NhMDVhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1nY2QuYwpAQCAtMCwwICsxLDUyIEBACisvKiBtcGktZ2NkLmMgIC0gIE1QSSBmdW5jdGlvbnMKKyAqCUNvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisKKy8qKioqKioqKioqKioqKioqCisgKiBGaW5kIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBHIG9mIEEgYW5kIEIuCisgKiBSZXR1cm46IHRydWUgaWYgdGhpcyAxLCBmYWxzZSBpbiBhbGwgb3RoZXIgY2FzZXMKKyAqLworaW50CitfZ2NyeV9tcGlfZ2NkIChnY3J5X21waV90IGcsIGdjcnlfbXBpX3QgeGEsIGdjcnlfbXBpX3QgeGIpCit7CisgICAgZ2NyeV9tcGlfdCBhLCBiOworCisgICAgYSA9IG1waV9jb3B5KHhhKTsKKyAgICBiID0gbXBpX2NvcHkoeGIpOworCisgICAgLyogVEFPQ1AgVm9sIElJLCA0LjUuMiwgQWxnb3JpdGhtIEEgKi8KKyAgICBhLT5zaWduID0gMDsKKyAgICBiLT5zaWduID0gMDsKKyAgICB3aGlsZSAobXBpX2NtcF91aSAoYiwgMCkpCisgICAgICB7CisJX2djcnlfbXBpX2ZkaXZfciggZywgYSwgYiApOyAvKiBHIGlzIHVzZWQgYXMgdGVtcG9yYXJ5IHZhcmlhYmxlLiAqLworCW1waV9zZXQoYSxiKTsKKwltcGlfc2V0KGIsZyk7CisgICAgICB9CisgICAgbXBpX3NldChnLCBhKTsKKworICAgIG1waV9mcmVlKGEpOworICAgIG1waV9mcmVlKGIpOworICAgIHJldHVybiAhbXBpX2NtcF91aSggZywgMSk7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLWlubGluZS5jIGIvbXBpL21waS1pbmxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWUyMjIyCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1pbmxpbmUuYwpAQCAtMCwwICsxLDM1IEBACisvKiBtcGktaW5saW5lLmMKKyAqCUNvcHlyaWdodCAoQykgMTk5OSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIHB1dCB0aGUgaW5saW5lIGZ1bmN0aW9ucyBhcyByZWFsIGZ1bmN0aW9ucyBpbnRvIHRoZSBsaWIgKi8KKyNkZWZpbmUgRzEwX01QSV9JTkxJTkVfREVDTAorCisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisKKy8qIGFsd2F5cyBpbmNsdWRlIHRoZSBoZWFkZXIgYmVjYXVzZSBpdCBpcyBvbmx5CisgKiBpbmNsdWRlZCBieSBtcGktaW50ZXJuYWwgaWYgX19HQ0NfXyBpcyBkZWZpbmVkIGJ1dCB3ZQorICogbmVlZCBpdCBoZXJlIGluIGFsbCBjYXNlcyBhbmQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YKKyAqIG9mIHRoZSBtYWNybyBhbGxvd3MgdXMgdG8gZG8gc28KKyAqLworI2luY2x1ZGUgIm1waS1pbmxpbmUuaCIKZGlmZiAtLWdpdCBhL21waS9tcGktaW5saW5lLmggYi9tcGkvbXBpLWlubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTJhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbXBpLWlubGluZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKiBtcGktaW5saW5lLmggIC0gIEludGVybmFsIHRvIHRoZSBNdWx0aSBQcmVjaXNpb24gSW50ZWdlcnMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5OCwgMTk5OSwKKyAqICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKyNpZm5kZWYgRzEwX01QSV9JTkxJTkVfSAorI2RlZmluZSBHMTBfTVBJX0lOTElORV9ICisKKy8qIFN0YXJ0aW5nIHdpdGggZ2NjIDQuMyAiZXh0ZXJuIGlubGluZSIgY29uZm9ybXMgaW4gYzk5IG1vZGUgdG8gdGhlCisgICBjOTkgc2VtYW50aWNzLiAgVG8ga2VlcCB0aGUgdXNlZnVsIG9sZCBzZW1hbnRpY3Mgd2UgdXNlIGFuCisgICBhdHRyaWJ1dGUuICAqLworI2lmbmRlZiBHMTBfTVBJX0lOTElORV9ERUNMCisjIGlmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCisjICBkZWZpbmUgRzEwX01QSV9JTkxJTkVfREVDTCAgZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorIyBlbHNlCisjICBkZWZpbmUgRzEwX01QSV9JTkxJTkVfREVDTCAgZXh0ZXJuIF9faW5saW5lX18KKyMgZW5kaWYKKyNlbmRpZgorCitHMTBfTVBJX0lOTElORV9ERUNMICBtcGlfbGltYl90CitfZ2NyeV9tcGloX2FkZF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgbXBpX3B0cl90IHMxX3B0ciwKKwkgICAgICAgbXBpX3NpemVfdCBzMV9zaXplLCBtcGlfbGltYl90IHMyX2xpbWIpCit7CisgICAgbXBpX2xpbWJfdCB4OworCisgICAgeCA9ICpzMV9wdHIrKzsKKyAgICBzMl9saW1iICs9IHg7CisgICAgKnJlc19wdHIrKyA9IHMyX2xpbWI7CisgICAgaWYoIHMyX2xpbWIgPCB4ICkgeyAvKiBzdW0gaXMgbGVzcyB0aGFuIHRoZSBsZWZ0IG9wZXJhbmQ6IGhhbmRsZSBjYXJyeSAqLworCXdoaWxlKCAtLXMxX3NpemUgKSB7CisJICAgIHggPSAqczFfcHRyKysgKyAxOwkvKiBhZGQgY2FycnkgKi8KKwkgICAgKnJlc19wdHIrKyA9IHg7CS8qIGFuZCBzdG9yZSAqLworCSAgICBpZiggeCApCQkvKiBub3QgMCAobm8gb3ZlcmZsb3cpOiB3ZSBjYW4gc3RvcCAqLworCQlnb3RvIGxlYXZlOworCX0KKwlyZXR1cm4gMTsgLyogcmV0dXJuIGNhcnJ5IChzaXplIG9mIHMxIHRvIHNtYWxsKSAqLworICAgIH0KKworICBsZWF2ZToKKyAgICBpZiggcmVzX3B0ciAhPSBzMV9wdHIgKSB7IC8qIG5vdCB0aGUgc2FtZSB2YXJpYWJsZSAqLworCW1waV9zaXplX3QgaTsJICAgICAgIC8qIGNvcHkgdGhlIHJlc3QgKi8KKwlmb3IoIGk9MDsgaSA8IHMxX3NpemUtMTsgaSsrICkKKwkgICAgcmVzX3B0cltpXSA9IHMxX3B0cltpXTsKKyAgICB9CisgICAgcmV0dXJuIDA7IC8qIG5vIGNhcnJ5ICovCit9CisKKworCitHMTBfTVBJX0lOTElORV9ERUNMIG1waV9saW1iX3QKK19nY3J5X21waWhfYWRkKG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLCBtcGlfc2l6ZV90IHMxX3NpemUsCisJCQkgICAgICAgbXBpX3B0cl90IHMyX3B0ciwgbXBpX3NpemVfdCBzMl9zaXplKQoreworICAgIG1waV9saW1iX3QgY3kgPSAwOworCisgICAgaWYoIHMyX3NpemUgKQorCWN5ID0gX2djcnlfbXBpaF9hZGRfbiggcmVzX3B0ciwgczFfcHRyLCBzMl9wdHIsIHMyX3NpemUgKTsKKworICAgIGlmKCBzMV9zaXplIC0gczJfc2l6ZSApCisJY3kgPSBfZ2NyeV9tcGloX2FkZF8xKCByZXNfcHRyICsgczJfc2l6ZSwgczFfcHRyICsgczJfc2l6ZSwKKwkJCSAgICBzMV9zaXplIC0gczJfc2l6ZSwgY3kpOworICAgIHJldHVybiBjeTsKK30KKworCitHMTBfTVBJX0lOTElORV9ERUNMIG1waV9saW1iX3QKK19nY3J5X21waWhfc3ViXzEobXBpX3B0cl90IHJlc19wdHIsICBtcGlfcHRyX3QgczFfcHRyLAorCSAgICAgIG1waV9zaXplX3QgczFfc2l6ZSwgbXBpX2xpbWJfdCBzMl9saW1iICkKK3sKKyAgICBtcGlfbGltYl90IHg7CisKKyAgICB4ID0gKnMxX3B0cisrOworICAgIHMyX2xpbWIgPSB4IC0gczJfbGltYjsKKyAgICAqcmVzX3B0cisrID0gczJfbGltYjsKKyAgICBpZiggczJfbGltYiA+IHggKSB7CisJd2hpbGUoIC0tczFfc2l6ZSApIHsKKwkgICAgeCA9ICpzMV9wdHIrKzsKKwkgICAgKnJlc19wdHIrKyA9IHggLSAxOworCSAgICBpZiggeCApCisJCWdvdG8gbGVhdmU7CisJfQorCXJldHVybiAxOworICAgIH0KKworICBsZWF2ZToKKyAgICBpZiggcmVzX3B0ciAhPSBzMV9wdHIgKSB7CisJbXBpX3NpemVfdCBpOworCWZvciggaT0wOyBpIDwgczFfc2l6ZS0xOyBpKysgKQorCSAgICByZXNfcHRyW2ldID0gczFfcHRyW2ldOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisKK0cxMF9NUElfSU5MSU5FX0RFQ0wgICBtcGlfbGltYl90CitfZ2NyeV9tcGloX3N1YiggbXBpX3B0cl90IHJlc19wdHIsIG1waV9wdHJfdCBzMV9wdHIsIG1waV9zaXplX3QgczFfc2l6ZSwKKwkJCQltcGlfcHRyX3QgczJfcHRyLCBtcGlfc2l6ZV90IHMyX3NpemUpCit7CisgICAgbXBpX2xpbWJfdCBjeSA9IDA7CisKKyAgICBpZiggczJfc2l6ZSApCisJY3kgPSBfZ2NyeV9tcGloX3N1Yl9uKHJlc19wdHIsIHMxX3B0ciwgczJfcHRyLCBzMl9zaXplKTsKKworICAgIGlmKCBzMV9zaXplIC0gczJfc2l6ZSApCisJY3kgPSBfZ2NyeV9tcGloX3N1Yl8xKHJlc19wdHIgKyBzMl9zaXplLCBzMV9wdHIgKyBzMl9zaXplLAorCQkJCSAgICAgIHMxX3NpemUgLSBzMl9zaXplLCBjeSk7CisgICAgcmV0dXJuIGN5OworfQorCisvKioqKioqKioqKioqKioqKgorICogQ29tcGFyZSBPUDFfUFRSL09QMV9TSVpFIHdpdGggT1AyX1BUUi9PUDJfU0laRS4KKyAqIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhlIHJlbGF0aXZlIHNpemVzIG9mCisgKiB0aGUgdHdvIGFyZ3VtZW50cy4KKyAqIFJldHVybiAxIGlmIE9QMSA+IE9QMiwgMCBpZiB0aGV5IGFyZSBlcXVhbCwgYW5kIC0xIGlmIE9QMSA8IE9QMi4KKyAqLworRzEwX01QSV9JTkxJTkVfREVDTCBpbnQKK19nY3J5X21waWhfY21wKCBtcGlfcHRyX3Qgb3AxX3B0ciwgbXBpX3B0cl90IG9wMl9wdHIsIG1waV9zaXplX3Qgc2l6ZSApCit7CisgICAgbXBpX3NpemVfdCBpOworICAgIG1waV9saW1iX3Qgb3AxX3dvcmQsIG9wMl93b3JkOworCisgICAgZm9yKCBpID0gc2l6ZSAtIDE7IGkgPj0gMCA7IGktLSkgeworCW9wMV93b3JkID0gb3AxX3B0cltpXTsKKwlvcDJfd29yZCA9IG9wMl9wdHJbaV07CisJaWYoIG9wMV93b3JkICE9IG9wMl93b3JkICkKKwkgICAgZ290byBkaWZmOworICAgIH0KKyAgICByZXR1cm4gMDsKKworICBkaWZmOgorICAgIC8qIFRoaXMgY2FuICpub3QqIGJlIHNpbXBsaWZpZWQgdG8KKyAgICAgKgkgb3AyX3dvcmQgLSBvcDJfd29yZAorICAgICAqIHNpbmNlIHRoYXQgZXhwcmVzc2lvbiBtaWdodCBnaXZlIHNpZ25lZCBvdmVyZmxvdy4gICovCisgICAgcmV0dXJuIChvcDFfd29yZCA+IG9wMl93b3JkKSA/IDEgOiAtMTsKK30KKworCisjZW5kaWYgLypHMTBfTVBJX0lOTElORV9IKi8KZGlmZiAtLWdpdCBhL21waS9tcGktaW50ZXJuYWwuaCBiL21waS9tcGktaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OThjYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMjc4IEBACisvKiBtcGktaW50ZXJuYWwuaCAgLSAgSW50ZXJuYWwgdG8gdGhlIE11bHRpIFByZWNpc2lvbiBJbnRlZ2VycworICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk4LCAyMDAwLCAyMDAyLAorICogICAgICAgICAgICAgICAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworI2lmbmRlZiBHMTBfTVBJX0lOVEVSTkFMX0gKKyNkZWZpbmUgRzEwX01QSV9JTlRFUk5BTF9ICisKKyNpbmNsdWRlICJtcGktYXNtLWRlZnMuaCIKKworI2lmbmRlZiBCSVRTX1BFUl9NUElfTElNQgorI2lmIEJZVEVTX1BFUl9NUElfTElNQiA9PSBTSVpFT0ZfVU5TSUdORURfSU5UCisgIHR5cGVkZWYgdW5zaWduZWQgaW50IG1waV9saW1iX3Q7CisgIHR5cGVkZWYgICBzaWduZWQgaW50IG1waV9saW1iX3NpZ25lZF90OworI2VsaWYgQllURVNfUEVSX01QSV9MSU1CID09IFNJWkVPRl9VTlNJR05FRF9MT05HCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbXBpX2xpbWJfdDsKKyAgdHlwZWRlZiAgIHNpZ25lZCBsb25nIGludCBtcGlfbGltYl9zaWduZWRfdDsKKyNlbGlmIEJZVEVTX1BFUl9NUElfTElNQiA9PSBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBtcGlfbGltYl90OworICB0eXBlZGVmICAgc2lnbmVkIGxvbmcgbG9uZyBpbnQgbXBpX2xpbWJfc2lnbmVkX3Q7CisjZWxpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gU0laRU9GX1VOU0lHTkVEX1NIT1JUCisgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IG1waV9saW1iX3Q7CisgIHR5cGVkZWYgICBzaWduZWQgc2hvcnQgaW50IG1waV9saW1iX3NpZ25lZF90OworI2Vsc2UKKyNlcnJvciBCWVRFU19QRVJfTVBJX0xJTUIgZG9lcyBub3QgbWF0Y2ggYW55IEMgdHlwZQorI2VuZGlmCisjZGVmaW5lIEJJVFNfUEVSX01QSV9MSU1CICAgICg4KkJZVEVTX1BFUl9NUElfTElNQikKKyNlbmRpZiAvKkJJVFNfUEVSX01QSV9MSU1CKi8KKworI2luY2x1ZGUgIm1waS5oIgorCisvKiBJZiBLQVJBVFNVQkFfVEhSRVNIT0xEIGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsIGRlZmluZSBpdCB0byBhCisgKiB2YWx1ZSB3aGljaCBpcyBnb29kIG9uIG1vc3QgbWFjaGluZXMuICAqLworCisvKiB0ZXN0ZWQgNCwgMTYsIDMyIGFuZCA2NCwgd2hlcmUgMTYgZ2F2ZSB0aGUgYmVzdCBwZXJmb3JtYW5jZSB3aGVuCisgKiBjaGVja2luZyBhIDc2OCBhbmQgYSAxMDI0IGJpdCBFbEdhbWFsIHNpZ25hdHVyZS4KKyAqICh3ayAyMi4xMi45NykgKi8KKyNpZm5kZWYgS0FSQVRTVUJBX1RIUkVTSE9MRAorI2RlZmluZSBLQVJBVFNVQkFfVEhSRVNIT0xEIDE2CisjZW5kaWYKKworLyogVGhlIGNvZGUgY2FuJ3QgaGFuZGxlIEtBUkFUU1VCQV9USFJFU0hPTEQgc21hbGxlciB0aGFuIDIuICAqLworI2lmIEtBUkFUU1VCQV9USFJFU0hPTEQgPCAyCisjdW5kZWYgS0FSQVRTVUJBX1RIUkVTSE9MRAorI2RlZmluZSBLQVJBVFNVQkFfVEhSRVNIT0xEIDIKKyNlbmRpZgorCisKK3R5cGVkZWYgbXBpX2xpbWJfdCAqbXBpX3B0cl90OyAvKiBwb2ludGVyIHRvIGEgbGltYiAqLwordHlwZWRlZiBpbnQgbXBpX3NpemVfdDsgICAgICAgIC8qIChtdXN0IGJlIGEgc2lnbmVkIHR5cGUpICovCisKKyNkZWZpbmUgQUJTKHgpICh4ID49IDAgPyB4IDogLXgpCisjZGVmaW5lIE1JTihsLG8pICgobCkgPCAobykgPyAobCkgOiAobykpCisjZGVmaW5lIE1BWChoLGkpICgoaCkgPiAoaSkgPyAoaCkgOiAoaSkpCisjZGVmaW5lIFJFU0laRV9JRl9ORUVERUQoYSxiKSBcCisgICAgZG8gewkJCSAgIFwKKwlpZiggKGEpLT5hbGxvY2VkIDwgKGIpICkgICBcCisJICAgIG1waV9yZXNpemUoKGEpLCAoYikpOyAgXAorICAgIH0gd2hpbGUoMCkKKworLyogQ29weSBOIGxpbWJzIGZyb20gUyB0byBELiAgKi8KKyNkZWZpbmUgTVBOX0NPUFkoIGQsIHMsIG4pIFwKKyAgICBkbyB7CQkJCVwKKwltcGlfc2l6ZV90IF9pOwkJCVwKKwlmb3IoIF9pID0gMDsgX2kgPCAobik7IF9pKysgKQlcCisJICAgIChkKVtfaV0gPSAocylbX2ldOwkJXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBNUE5fQ09QWV9JTkNSKCBkLCBzLCBuKSAJXAorICAgIGRvIHsJCQkJXAorCW1waV9zaXplX3QgX2k7CQkJXAorCWZvciggX2kgPSAwOyBfaSA8IChuKTsgX2krKyApCVwKKwkgICAgKGQpW19pXSA9IChzKVtfaV07CQlcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNUE5fQ09QWV9ERUNSKCBkLCBzLCBuICkgXAorICAgIGRvIHsJCQkJXAorCW1waV9zaXplX3QgX2k7CQkJXAorCWZvciggX2kgPSAobiktMTsgX2kgPj0gMDsgX2ktLSkgXAorCSAgIChkKVtfaV0gPSAocylbX2ldOwkJXAorICAgIH0gd2hpbGUoMCkKKworLyogWmVybyBOIGxpbWJzIGF0IEQgKi8KKyNkZWZpbmUgTVBOX1pFUk8oZCwgbikgXAorICAgIGRvIHsJCQkJICBcCisJaW50ICBfaTsJCQkgIFwKKwlmb3IoIF9pID0gMDsgX2kgPCAobik7IF9pKysgKSAgXAorCSAgICAoZClbX2ldID0gMDsJCSAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNUE5fTk9STUFMSVpFKGQsIG4pICBcCisgICAgZG8gewkJICAgICAgIFwKKwl3aGlsZSggKG4pID4gMCApIHsgICAgIFwKKwkgICAgaWYoIChkKVsobiktMV0gKSBcCisJCWJyZWFrOwkgICAgICAgXAorCSAgICAobiktLTsJICAgICAgIFwKKwl9CQkgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBNUE5fTk9STUFMSVpFX05PVF9aRVJPKGQsIG4pIFwKKyAgICBkbyB7CQkJCSAgICBcCisJZm9yKDs7KSB7CQkJICAgIFwKKwkgICAgaWYoIChkKVsobiktMV0gKQkJICAgIFwKKwkJYnJlYWs7CQkJICAgIFwKKwkgICAgKG4pLS07CQkJICAgIFwKKwl9CQkJCSAgICBcCisgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIE1QTl9NVUxfTl9SRUNVUlNFKHByb2RwLCB1cCwgdnAsIHNpemUsIHRzcGFjZSkgXAorICAgIGRvIHsJCQkJCQlcCisJaWYoIChzaXplKSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKQkJXAorCSAgICBtdWxfbl9iYXNlY2FzZSAocHJvZHAsIHVwLCB2cCwgc2l6ZSk7CVwKKwllbHNlCQkJCQkJXAorCSAgICBtdWxfbiAocHJvZHAsIHVwLCB2cCwgc2l6ZSwgdHNwYWNlKTsJXAorICAgIH0gd2hpbGUgKDApOworCisKKy8qIERpdmlkZSB0aGUgdHdvLWxpbWIgbnVtYmVyIGluIChOSCwsTkwpIGJ5IEQsIHdpdGggREkgYmVpbmcgdGhlIGxhcmdlc3QKKyAqIGxpbWIgbm90IGxhcmdlciB0aGFuICgyKiooMipCSVRTX1BFUl9NUF9MSU1CKSkvRCAtICgyKipCSVRTX1BFUl9NUF9MSU1CKS4KKyAqIElmIHRoaXMgd291bGQgeWllbGQgb3ZlcmZsb3csIERJIHNob3VsZCBiZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBudW1iZXIKKyAqIChpLmUuLCBvbmx5IG9uZXMpLiAgRm9yIGNvcnJlY3Qgb3BlcmF0aW9uLCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgRAorICogaGFzIHRvIGJlIHNldC4gIFB1dCB0aGUgcXVvdGllbnQgaW4gUSBhbmQgdGhlIHJlbWFpbmRlciBpbiBSLgorICovCisjZGVmaW5lIFVESVZfUVJOTkRfUFJFSU5WKHEsIHIsIG5oLCBubCwgZCwgZGkpIFwKKyAgICBkbyB7CQkJCQkJCSAgICBcCisgICAgICAgIG1waV9saW1iX3QgX3FsIEdDQ19BVFRSX1VOVVNFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW1waV9saW1iX3QgX3EsIF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwltcGlfbGltYl90IF94aCwgX3hsOwkJCQkJICAgIFwKKwl1bXVsX3BwbW0gKF9xLCBfcWwsIChuaCksIChkaSkpOwkJCSAgICBcCisJX3EgKz0gKG5oKTsJLyogREkgaXMgMioqQklUU19QRVJfTVBJX0xJTUIgdG9vIHNtYWxsICovICBcCisJdW11bF9wcG1tIChfeGgsIF94bCwgX3EsIChkKSk7CQkJCSAgICBcCisJc3ViX2RkbW1zcyAoX3hoLCBfciwgKG5oKSwgKG5sKSwgX3hoLCBfeGwpOwkJICAgIFwKKwlpZiggX3hoICkgewkJCQkJCSAgICBcCisJICAgIHN1Yl9kZG1tc3MgKF94aCwgX3IsIF94aCwgX3IsIDAsIChkKSk7CQkgICAgXAorCSAgICBfcSsrOwkJCQkJCSAgICBcCisJICAgIGlmKCBfeGgpIHsJCQkJCQkgICAgXAorCQlzdWJfZGRtbXNzIChfeGgsIF9yLCBfeGgsIF9yLCAwLCAoZCkpOwkJICAgIFwKKwkJX3ErKzsJCQkJCQkgICAgXAorCSAgICB9CQkJCQkJCSAgICBcCisJfQkJCQkJCQkgICAgXAorCWlmKCBfciA+PSAoZCkgKSB7CQkJCQkgICAgXAorCSAgICBfciAtPSAoZCk7CQkJCQkJICAgIFwKKwkgICAgX3ErKzsJCQkJCQkgICAgXAorCX0JCQkJCQkJICAgIFwKKwkocikgPSBfcjsJCQkJCQkgICAgXAorCShxKSA9IF9xOwkJCQkJCSAgICBcCisgICAgfSB3aGlsZSAoMCkKKworCisvKi0tIG1waXV0aWwuYyAtLSovCisjZGVmaW5lIG1waV9hbGxvY19saW1iX3NwYWNlKG4sZikgIF9nY3J5X21waV9hbGxvY19saW1iX3NwYWNlKChuKSwoZikpCittcGlfcHRyX3QgX2djcnlfbXBpX2FsbG9jX2xpbWJfc3BhY2UoIHVuc2lnbmVkIG5saW1icywgaW50IHNlYyApOwordm9pZCBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBtcGlfcHRyX3QgYSwgdW5zaWduZWQgaW50IG5saW1icyApOwordm9pZCBfZ2NyeV9tcGlfYXNzaWduX2xpbWJfc3BhY2UoIGdjcnlfbXBpX3QgYSwgbXBpX3B0cl90IGFwLCB1bnNpZ25lZCBubGltYnMgKTsKKworLyotLSBtcGktYml0LmMgLS0qLworI2RlZmluZSBtcGlfcnNoaWZ0X2xpbWJzKGEsbikgIF9nY3J5X21waV9yc2hpZnRfbGltYnMgKChhKSwgKG4pKQorI2RlZmluZSBtcGlfbHNoaWZ0X2xpbWJzKGEsbikgIF9nY3J5X21waV9sc2hpZnRfbGltYnMgKChhKSwgKG4pKQorCit2b2lkIF9nY3J5X21waV9yc2hpZnRfbGltYnMoIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGNvdW50ICk7Cit2b2lkIF9nY3J5X21waV9sc2hpZnRfbGltYnMoIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGNvdW50ICk7CisKKworLyotLSBtcGloLWFkZC5jIC0tKi8KK21waV9saW1iX3QgX2djcnlfbXBpaF9hZGRfMShtcGlfcHRyX3QgcmVzX3B0ciwgIG1waV9wdHJfdCBzMV9wdHIsCisJCQkgbXBpX3NpemVfdCBzMV9zaXplLCBtcGlfbGltYl90IHMyX2xpbWIgKTsKK21waV9saW1iX3QgX2djcnlfbXBpaF9hZGRfbiggbXBpX3B0cl90IHJlc19wdHIsIG1waV9wdHJfdCBzMV9wdHIsCisJCQkgIG1waV9wdHJfdCBzMl9wdHIsICBtcGlfc2l6ZV90IHNpemUpOworbXBpX2xpbWJfdCBfZ2NyeV9tcGloX2FkZChtcGlfcHRyX3QgcmVzX3B0ciwgbXBpX3B0cl90IHMxX3B0ciwgbXBpX3NpemVfdCBzMV9zaXplLAorCQkgICAgICAgbXBpX3B0cl90IHMyX3B0ciwgbXBpX3NpemVfdCBzMl9zaXplKTsKKworLyotLSBtcGloLXN1Yi5jIC0tKi8KK21waV9saW1iX3QgX2djcnlfbXBpaF9zdWJfMSggbXBpX3B0cl90IHJlc19wdHIsICBtcGlfcHRyX3QgczFfcHRyLAorCQkJICBtcGlfc2l6ZV90IHMxX3NpemUsIG1waV9saW1iX3QgczJfbGltYiApOworbXBpX2xpbWJfdCBfZ2NyeV9tcGloX3N1Yl9uKCBtcGlfcHRyX3QgcmVzX3B0ciwgbXBpX3B0cl90IHMxX3B0ciwKKwkJCSAgbXBpX3B0cl90IHMyX3B0ciwgbXBpX3NpemVfdCBzaXplKTsKK21waV9saW1iX3QgX2djcnlfbXBpaF9zdWIobXBpX3B0cl90IHJlc19wdHIsIG1waV9wdHJfdCBzMV9wdHIsIG1waV9zaXplX3QgczFfc2l6ZSwKKwkJICAgICAgIG1waV9wdHJfdCBzMl9wdHIsIG1waV9zaXplX3QgczJfc2l6ZSk7CisKKy8qLS0gbXBpaC1jbXAuYyAtLSovCitpbnQgX2djcnlfbXBpaF9jbXAoIG1waV9wdHJfdCBvcDFfcHRyLCBtcGlfcHRyX3Qgb3AyX3B0ciwgbXBpX3NpemVfdCBzaXplICk7CisKKy8qLS0gbXBpaC1tdWwuYyAtLSovCisKK3N0cnVjdCBrYXJhdHN1YmFfY3R4IHsKKyAgICBzdHJ1Y3Qga2FyYXRzdWJhX2N0eCAqbmV4dDsKKyAgICBtcGlfcHRyX3QgdHNwYWNlOworICAgIHVuc2lnbmVkIGludCB0c3BhY2VfbmxpbWJzOworICAgIG1waV9zaXplX3QgdHNwYWNlX3NpemU7CisgICAgbXBpX3B0cl90IHRwOworICAgIHVuc2lnbmVkIGludCB0cF9ubGltYnM7CisgICAgbXBpX3NpemVfdCB0cF9zaXplOworfTsKKwordm9pZCBfZ2NyeV9tcGloX3JlbGVhc2Vfa2FyYXRzdWJhX2N0eCggc3RydWN0IGthcmF0c3ViYV9jdHggKmN0eCApOworCittcGlfbGltYl90IF9nY3J5X21waWhfYWRkbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLAorCQkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsIG1waV9saW1iX3QgczJfbGltYik7CittcGlfbGltYl90IF9nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCBtcGlfcHRyX3QgczFfcHRyLAorCQkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsIG1waV9saW1iX3QgczJfbGltYik7Cit2b2lkIF9nY3J5X21waWhfbXVsX24oIG1waV9wdHJfdCBwcm9kcCwgbXBpX3B0cl90IHVwLCBtcGlfcHRyX3QgdnAsCisJCQkJCQkgICBtcGlfc2l6ZV90IHNpemUpOworbXBpX2xpbWJfdCBfZ2NyeV9tcGloX211bCggbXBpX3B0cl90IHByb2RwLCBtcGlfcHRyX3QgdXAsIG1waV9zaXplX3QgdXNpemUsCisJCQkJCSBtcGlfcHRyX3QgdnAsIG1waV9zaXplX3QgdnNpemUpOwordm9pZCBfZ2NyeV9tcGloX3Nxcl9uX2Jhc2VjYXNlKCBtcGlfcHRyX3QgcHJvZHAsIG1waV9wdHJfdCB1cCwgbXBpX3NpemVfdCBzaXplICk7Cit2b2lkIF9nY3J5X21waWhfc3FyX24oIG1waV9wdHJfdCBwcm9kcCwgbXBpX3B0cl90IHVwLCBtcGlfc2l6ZV90IHNpemUsCisJCQkJCQltcGlfcHRyX3QgdHNwYWNlKTsKKwordm9pZCBfZ2NyeV9tcGloX211bF9rYXJhdHN1YmFfY2FzZSggbXBpX3B0cl90IHByb2RwLAorCQkJCSBtcGlfcHRyX3QgdXAsIG1waV9zaXplX3QgdXNpemUsCisJCQkJIG1waV9wdHJfdCB2cCwgbXBpX3NpemVfdCB2c2l6ZSwKKwkJCQkgc3RydWN0IGthcmF0c3ViYV9jdHggKmN0eCApOworCisKKy8qLS0gbXBpaC1tdWxfMS5jIChvciB4eHgvY3B1LyAqLlMpIC0tKi8KK21waV9saW1iX3QgX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsIG1waV9wdHJfdCBzMV9wdHIsCisJCQkgIG1waV9zaXplX3QgczFfc2l6ZSwgbXBpX2xpbWJfdCBzMl9saW1iKTsKKworLyotLSBtcGloLWRpdi5jIC0tKi8KK21waV9saW1iX3QgX2djcnlfbXBpaF9tb2RfMShtcGlfcHRyX3QgZGl2aWRlbmRfcHRyLCBtcGlfc2l6ZV90IGRpdmlkZW5kX3NpemUsCisJCQkJCQkgbXBpX2xpbWJfdCBkaXZpc29yX2xpbWIpOworbXBpX2xpbWJfdCBfZ2NyeV9tcGloX2RpdnJlbSggbXBpX3B0cl90IHFwLCBtcGlfc2l6ZV90IHFleHRyYV9saW1icywKKwkJCSAgIG1waV9wdHJfdCBucCwgbXBpX3NpemVfdCBuc2l6ZSwKKwkJCSAgIG1waV9wdHJfdCBkcCwgbXBpX3NpemVfdCBkc2l6ZSk7CittcGlfbGltYl90IF9nY3J5X21waWhfZGl2bW9kXzEoIG1waV9wdHJfdCBxdW90X3B0ciwKKwkJCSAgICAgbXBpX3B0cl90IGRpdmlkZW5kX3B0ciwgbXBpX3NpemVfdCBkaXZpZGVuZF9zaXplLAorCQkJICAgICBtcGlfbGltYl90IGRpdmlzb3JfbGltYik7CisKKy8qLS0gbXBpaC1zaGlmdC5jIC0tKi8KK21waV9saW1iX3QgX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwgbXBpX3B0cl90IHVwLCBtcGlfc2l6ZV90IHVzaXplLAorCQkJCQkJCSAgIHVuc2lnbmVkIGNudCk7CittcGlfbGltYl90IF9nY3J5X21waWhfcnNoaWZ0KCBtcGlfcHRyX3Qgd3AsIG1waV9wdHJfdCB1cCwgbXBpX3NpemVfdCB1c2l6ZSwKKwkJCQkJCQkgICB1bnNpZ25lZCBjbnQpOworCisKKy8qIERlZmluZSBzdHVmZiBmb3IgbG9uZ2xvbmcuaC4gICovCisjZGVmaW5lIFdfVFlQRV9TSVpFIEJJVFNfUEVSX01QSV9MSU1CCisgIHR5cGVkZWYgbXBpX2xpbWJfdCAgIFVXdHlwZTsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUhXdHlwZTsKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgVVFJdHlwZQkgIF9fYXR0cmlidXRlX18gKChtb2RlIChRSSkpKTsKKyAgdHlwZWRlZgkgICBpbnQgU0l0eXBlCSAgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOworICB0eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlCSAgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOworICB0eXBlZGVmCSAgIGludCBESXR5cGUJICBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50IFVESXR5cGUJICBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7CisjZWxzZQorICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVVFJdHlwZTsKKyAgdHlwZWRlZgkgICBsb25nIFNJdHlwZTsKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVTSXR5cGU7CisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjaW5jbHVkZSAibXBpLWlubGluZS5oIgorI2VuZGlmCisKKyNlbmRpZiAvKkcxMF9NUElfSU5URVJOQUxfSCovCmRpZmYgLS1naXQgYS9tcGkvbXBpLWludi5jIGIvbXBpL21waS1pbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY4MTNiCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1pbnYuYwpAQCAtMCwwICsxLDI3MiBAQAorLyogbXBpLWludi5jICAtICBNUEkgZnVuY3Rpb25zCisgKglDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorCisvKioqKioqKioqKioqKioqKgorICogQ2FsY3VsYXRlIHRoZSBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIFggb2YgQSBtb2QgTgorICogVGhhdCBpczogRmluZCB0aGUgc29sdXRpb24geCBmb3IKKyAqCQkxID0gKGEqeCkgbW9kIG4KKyAqLworaW50CitfZ2NyeV9tcGlfaW52bSAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgbikKK3sKKyNpZiAwCisgICAgZ2NyeV9tcGlfdCB1LCB2LCB1MSwgdTIsIHUzLCB2MSwgdjIsIHYzLCBxLCB0MSwgdDIsIHQzOworICAgIGdjcnlfbXBpX3QgdGEsIHRiLCB0YzsKKworICAgIHUgPSBtcGlfY29weShhKTsKKyAgICB2ID0gbXBpX2NvcHkobik7CisgICAgdTEgPSBtcGlfYWxsb2Nfc2V0X3VpKDEpOworICAgIHUyID0gbXBpX2FsbG9jX3NldF91aSgwKTsKKyAgICB1MyA9IG1waV9jb3B5KHUpOworICAgIHYxID0gbXBpX2FsbG9jX3NldF91aSgwKTsKKyAgICB2MiA9IG1waV9hbGxvY19zZXRfdWkoMSk7CisgICAgdjMgPSBtcGlfY29weSh2KTsKKyAgICBxICA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnModSkrMSApOworICAgIHQxID0gbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyh1KSsxICk7CisgICAgdDIgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHUpKzEgKTsKKyAgICB0MyA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnModSkrMSApOworICAgIHdoaWxlKCBtcGlfY21wX3VpKCB2MywgMCApICkgeworCW1waV9mZGl2X3EoIHEsIHUzLCB2MyApOworCW1waV9tdWwodDEsIHYxLCBxKTsgbXBpX211bCh0MiwgdjIsIHEpOyBtcGlfbXVsKHQzLCB2MywgcSk7CisJbXBpX3N1Yih0MSwgdTEsIHQxKTsgbXBpX3N1Yih0MiwgdTIsIHQyKTsgbXBpX3N1Yih0MywgdTMsIHQzKTsKKwltcGlfc2V0KHUxLCB2MSk7IG1waV9zZXQodTIsIHYyKTsgbXBpX3NldCh1MywgdjMpOworCW1waV9zZXQodjEsIHQxKTsgbXBpX3NldCh2MiwgdDIpOyBtcGlfc2V0KHYzLCB0Myk7CisgICAgfQorICAgIC8qCWxvZ19kZWJ1ZygicmVzdWx0OlxuIik7CisJbG9nX21waWR1bXAoInEgPSIsIHEgKTsKKwlsb2dfbXBpZHVtcCgidTE9IiwgdTEpOworCWxvZ19tcGlkdW1wKCJ1Mj0iLCB1Mik7CisJbG9nX21waWR1bXAoInUzPSIsIHUzKTsKKwlsb2dfbXBpZHVtcCgidjE9IiwgdjEpOworCWxvZ19tcGlkdW1wKCJ2Mj0iLCB2Mik7ICovCisgICAgbXBpX3NldCh4LCB1MSk7CisKKyAgICBtcGlfZnJlZSh1MSk7CisgICAgbXBpX2ZyZWUodTIpOworICAgIG1waV9mcmVlKHUzKTsKKyAgICBtcGlfZnJlZSh2MSk7CisgICAgbXBpX2ZyZWUodjIpOworICAgIG1waV9mcmVlKHYzKTsKKyAgICBtcGlfZnJlZShxKTsKKyAgICBtcGlfZnJlZSh0MSk7CisgICAgbXBpX2ZyZWUodDIpOworICAgIG1waV9mcmVlKHQzKTsKKyAgICBtcGlfZnJlZSh1KTsKKyAgICBtcGlfZnJlZSh2KTsKKyNlbGlmIDAKKyAgICAvKiBFeHRlbmRlZCBFdWNsaWQncyBhbGdvcml0aG0gKFNlZSBUQU9DUCBWb2wgSUksIDQuNS4yLCBBbGcgWCkKKyAgICAgKiBtb2RpZmllZCBhY2NvcmRpbmcgdG8gTWljaGFlbCBQZW5rJ3Mgc29sdXRpb24gZm9yIEV4ZXJjaXNlIDM1ICovCisKKyAgICAvKiBGSVhNRTogd2UgY2FuIHNpbXBsaWZ5IHRoaXMgaW4gbW9zdCBjYXNlcyAoc2VlIEtudXRoKSAqLworICAgIGdjcnlfbXBpX3QgdSwgdiwgdTEsIHUyLCB1MywgdjEsIHYyLCB2MywgdDEsIHQyLCB0MzsKKyAgICB1bnNpZ25lZCBrOworICAgIGludCBzaWduOworCisgICAgdSA9IG1waV9jb3B5KGEpOworICAgIHYgPSBtcGlfY29weShuKTsKKyAgICBmb3Ioaz0wOyAhbXBpX3Rlc3RfYml0KHUsMCkgJiYgIW1waV90ZXN0X2JpdCh2LDApOyBrKysgKSB7CisJbXBpX3JzaGlmdCh1LCB1LCAxKTsKKwltcGlfcnNoaWZ0KHYsIHYsIDEpOworICAgIH0KKworCisgICAgdTEgPSBtcGlfYWxsb2Nfc2V0X3VpKDEpOworICAgIHUyID0gbXBpX2FsbG9jX3NldF91aSgwKTsKKyAgICB1MyA9IG1waV9jb3B5KHUpOworICAgIHYxID0gbXBpX2NvcHkodik7CQkJCSAgIC8qICEtLSB1c2VkIGFzIGNvbnN0IDEgKi8KKyAgICB2MiA9IG1waV9hbGxvYyggbXBpX2dldF9ubGltYnModSkgKTsgbXBpX3N1YiggdjIsIHUxLCB1ICk7CisgICAgdjMgPSBtcGlfY29weSh2KTsKKyAgICBpZiggbXBpX3Rlc3RfYml0KHUsIDApICkgeyAvKiB1IGlzIG9kZCAqLworCXQxID0gbXBpX2FsbG9jX3NldF91aSgwKTsKKwl0MiA9IG1waV9hbGxvY19zZXRfdWkoMSk7IHQyLT5zaWduID0gMTsKKwl0MyA9IG1waV9jb3B5KHYpOyB0My0+c2lnbiA9ICF0My0+c2lnbjsKKwlnb3RvIFk0OworICAgIH0KKyAgICBlbHNlIHsKKwl0MSA9IG1waV9hbGxvY19zZXRfdWkoMSk7CisJdDIgPSBtcGlfYWxsb2Nfc2V0X3VpKDApOworCXQzID0gbXBpX2NvcHkodSk7CisgICAgfQorICAgIGRvIHsKKwlkbyB7CisJICAgIGlmKCBtcGlfdGVzdF9iaXQodDEsIDApIHx8IG1waV90ZXN0X2JpdCh0MiwgMCkgKSB7IC8qIG9uZSBpcyBvZGQgKi8KKwkJbXBpX2FkZCh0MSwgdDEsIHYpOworCQltcGlfc3ViKHQyLCB0MiwgdSk7CisJICAgIH0KKwkgICAgbXBpX3JzaGlmdCh0MSwgdDEsIDEpOworCSAgICBtcGlfcnNoaWZ0KHQyLCB0MiwgMSk7CisJICAgIG1waV9yc2hpZnQodDMsIHQzLCAxKTsKKwkgIFk0OgorCSAgICA7CisJfSB3aGlsZSggIW1waV90ZXN0X2JpdCggdDMsIDAgKSApOyAvKiB3aGlsZSB0MyBpcyBldmVuICovCisKKwlpZiggIXQzLT5zaWduICkgeworCSAgICBtcGlfc2V0KHUxLCB0MSk7CisJICAgIG1waV9zZXQodTIsIHQyKTsKKwkgICAgbXBpX3NldCh1MywgdDMpOworCX0KKwllbHNlIHsKKwkgICAgbXBpX3N1Yih2MSwgdiwgdDEpOworCSAgICBzaWduID0gdS0+c2lnbjsgdS0+c2lnbiA9ICF1LT5zaWduOworCSAgICBtcGlfc3ViKHYyLCB1LCB0Mik7CisJICAgIHUtPnNpZ24gPSBzaWduOworCSAgICBzaWduID0gdDMtPnNpZ247IHQzLT5zaWduID0gIXQzLT5zaWduOworCSAgICBtcGlfc2V0KHYzLCB0Myk7CisJICAgIHQzLT5zaWduID0gc2lnbjsKKwl9CisJbXBpX3N1Yih0MSwgdTEsIHYxKTsKKwltcGlfc3ViKHQyLCB1MiwgdjIpOworCW1waV9zdWIodDMsIHUzLCB2Myk7CisJaWYoIHQxLT5zaWduICkgeworCSAgICBtcGlfYWRkKHQxLCB0MSwgdik7CisJICAgIG1waV9zdWIodDIsIHQyLCB1KTsKKwl9CisgICAgfSB3aGlsZSggbXBpX2NtcF91aSggdDMsIDAgKSApOyAvKiB3aGlsZSB0MyAhPSAwICovCisgICAgLyogbXBpX2xzaGlmdCggdTMsIGsgKTsgKi8KKyAgICBtcGlfc2V0KHgsIHUxKTsKKworICAgIG1waV9mcmVlKHUxKTsKKyAgICBtcGlfZnJlZSh1Mik7CisgICAgbXBpX2ZyZWUodTMpOworICAgIG1waV9mcmVlKHYxKTsKKyAgICBtcGlfZnJlZSh2Mik7CisgICAgbXBpX2ZyZWUodjMpOworICAgIG1waV9mcmVlKHQxKTsKKyAgICBtcGlfZnJlZSh0Mik7CisgICAgbXBpX2ZyZWUodDMpOworI2Vsc2UKKyAgICAvKiBFeHRlbmRlZCBFdWNsaWQncyBhbGdvcml0aG0gKFNlZSBUQU9DUCBWb2wgSUksIDQuNS4yLCBBbGcgWCkKKyAgICAgKiBtb2RpZmllZCBhY2NvcmRpbmcgdG8gTWljaGFlbCBQZW5rJ3Mgc29sdXRpb24gZm9yIEV4ZXJjaXNlIDM1CisgICAgICogd2l0aCBmdXJ0aGVyIGVuaGFuY2VtZW50ICovCisgICAgZ2NyeV9tcGlfdCB1LCB2LCB1MSwgdTI9TlVMTCwgdTMsIHYxLCB2Mj1OVUxMLCB2MywgdDEsIHQyPU5VTEwsIHQzOworICAgIHVuc2lnbmVkIGs7CisgICAgaW50IHNpZ247CisgICAgaW50IG9kZCA7CisKKyAgICBpZiAoIW1waV9jbXBfdWkgKGEsIDApKQorICAgICAgICByZXR1cm4gMDsgLyogSW52ZXJzZSBkb2VzIG5vdCBleGlzdHMuICAqLworICAgIGlmICghbXBpX2NtcF91aSAobiwgMSkpCisgICAgICAgIHJldHVybiAwOyAvKiBJbnZlcnNlIGRvZXMgbm90IGV4aXN0cy4gICovCisKKyAgICB1ID0gbXBpX2NvcHkoYSk7CisgICAgdiA9IG1waV9jb3B5KG4pOworCisgICAgZm9yKGs9MDsgIW1waV90ZXN0X2JpdCh1LDApICYmICFtcGlfdGVzdF9iaXQodiwwKTsgaysrICkgeworCW1waV9yc2hpZnQodSwgdSwgMSk7CisJbXBpX3JzaGlmdCh2LCB2LCAxKTsKKyAgICB9CisgICAgb2RkID0gbXBpX3Rlc3RfYml0KHYsMCk7CisKKyAgICB1MSA9IG1waV9hbGxvY19zZXRfdWkoMSk7CisgICAgaWYoICFvZGQgKQorCXUyID0gbXBpX2FsbG9jX3NldF91aSgwKTsKKyAgICB1MyA9IG1waV9jb3B5KHUpOworICAgIHYxID0gbXBpX2NvcHkodik7CisgICAgaWYoICFvZGQgKSB7CisJdjIgPSBtcGlfYWxsb2MoIG1waV9nZXRfbmxpbWJzKHUpICk7CisJbXBpX3N1YiggdjIsIHUxLCB1ICk7IC8qIFUgaXMgdXNlZCBhcyBjb25zdCAxICovCisgICAgfQorICAgIHYzID0gbXBpX2NvcHkodik7CisgICAgaWYoIG1waV90ZXN0X2JpdCh1LCAwKSApIHsgLyogdSBpcyBvZGQgKi8KKwl0MSA9IG1waV9hbGxvY19zZXRfdWkoMCk7CisJaWYoICFvZGQgKSB7CisJICAgIHQyID0gbXBpX2FsbG9jX3NldF91aSgxKTsgdDItPnNpZ24gPSAxOworCX0KKwl0MyA9IG1waV9jb3B5KHYpOyB0My0+c2lnbiA9ICF0My0+c2lnbjsKKwlnb3RvIFk0OworICAgIH0KKyAgICBlbHNlIHsKKwl0MSA9IG1waV9hbGxvY19zZXRfdWkoMSk7CisJaWYoICFvZGQgKQorCSAgICB0MiA9IG1waV9hbGxvY19zZXRfdWkoMCk7CisJdDMgPSBtcGlfY29weSh1KTsKKyAgICB9CisgICAgZG8geworCWRvIHsKKwkgICAgaWYoICFvZGQgKSB7CisJCWlmKCBtcGlfdGVzdF9iaXQodDEsIDApIHx8IG1waV90ZXN0X2JpdCh0MiwgMCkgKSB7IC8qIG9uZSBpcyBvZGQgKi8KKwkJICAgIG1waV9hZGQodDEsIHQxLCB2KTsKKwkJICAgIG1waV9zdWIodDIsIHQyLCB1KTsKKwkJfQorCQltcGlfcnNoaWZ0KHQxLCB0MSwgMSk7CisJCW1waV9yc2hpZnQodDIsIHQyLCAxKTsKKwkJbXBpX3JzaGlmdCh0MywgdDMsIDEpOworCSAgICB9CisJICAgIGVsc2UgeworCQlpZiggbXBpX3Rlc3RfYml0KHQxLCAwKSApCisJCSAgICBtcGlfYWRkKHQxLCB0MSwgdik7CisJCW1waV9yc2hpZnQodDEsIHQxLCAxKTsKKwkJbXBpX3JzaGlmdCh0MywgdDMsIDEpOworCSAgICB9CisJICBZNDoKKwkgICAgOworCX0gd2hpbGUoICFtcGlfdGVzdF9iaXQoIHQzLCAwICkgKTsgLyogd2hpbGUgdDMgaXMgZXZlbiAqLworCisJaWYoICF0My0+c2lnbiApIHsKKwkgICAgbXBpX3NldCh1MSwgdDEpOworCSAgICBpZiggIW9kZCApCisJCW1waV9zZXQodTIsIHQyKTsKKwkgICAgbXBpX3NldCh1MywgdDMpOworCX0KKwllbHNlIHsKKwkgICAgbXBpX3N1Yih2MSwgdiwgdDEpOworCSAgICBzaWduID0gdS0+c2lnbjsgdS0+c2lnbiA9ICF1LT5zaWduOworCSAgICBpZiggIW9kZCApCisJCW1waV9zdWIodjIsIHUsIHQyKTsKKwkgICAgdS0+c2lnbiA9IHNpZ247CisJICAgIHNpZ24gPSB0My0+c2lnbjsgdDMtPnNpZ24gPSAhdDMtPnNpZ247CisJICAgIG1waV9zZXQodjMsIHQzKTsKKwkgICAgdDMtPnNpZ24gPSBzaWduOworCX0KKwltcGlfc3ViKHQxLCB1MSwgdjEpOworCWlmKCAhb2RkICkKKwkgICAgbXBpX3N1Yih0MiwgdTIsIHYyKTsKKwltcGlfc3ViKHQzLCB1MywgdjMpOworCWlmKCB0MS0+c2lnbiApIHsKKwkgICAgbXBpX2FkZCh0MSwgdDEsIHYpOworCSAgICBpZiggIW9kZCApCisJCW1waV9zdWIodDIsIHQyLCB1KTsKKwl9CisgICAgfSB3aGlsZSggbXBpX2NtcF91aSggdDMsIDAgKSApOyAvKiB3aGlsZSB0MyAhPSAwICovCisgICAgLyogbXBpX2xzaGlmdCggdTMsIGsgKTsgKi8KKyAgICBtcGlfc2V0KHgsIHUxKTsKKworICAgIG1waV9mcmVlKHUxKTsKKyAgICBtcGlfZnJlZSh2MSk7CisgICAgbXBpX2ZyZWUodDEpOworICAgIGlmKCAhb2RkICkgeworCW1waV9mcmVlKHUyKTsKKwltcGlfZnJlZSh2Mik7CisJbXBpX2ZyZWUodDIpOworICAgIH0KKyAgICBtcGlfZnJlZSh1Myk7CisgICAgbXBpX2ZyZWUodjMpOworICAgIG1waV9mcmVlKHQzKTsKKworICAgIG1waV9mcmVlKHUpOworICAgIG1waV9mcmVlKHYpOworI2VuZGlmCisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLW1vZC5jIGIvbXBpL21waS1tb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODYyNDcyCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1tb2QuYwpAQCAtMCwwICsxLDE4OCBAQAorLyogbXBpLW1vZC5jIC0gIE1vZHVsYXIgcmVkdWN0aW9uCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMsCisgICAgICAgICAgICAgICAgIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisKKyAgIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisgICBVU0EuICAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKworCisvKiBDb250ZXh0IHVzZWQgd2l0aCBCYXJyZXR0IHJlZHVjdGlvbi4gICovCitzdHJ1Y3QgYmFycmV0dF9jdHhfcworeworICBnY3J5X21waV90IG07ICAgLyogVGhlIG1vZHVsdXMgLSBtYXkgbm90IGJlIG1vZGlmaWVkLiAqLworICBpbnQgbV9jb3BpZWQ7ICAgLyogSWYgdHJ1ZSwgTSBuZWVkcyB0byBiZSByZWxlYXNlZC4gICovCisgIGludCBrOworICBnY3J5X21waV90IHk7CisgIGdjcnlfbXBpX3QgcjE7ICAvKiBIZWxwZXIgTVBJLiAqLworICBnY3J5X21waV90IHIyOyAgLyogSGVscGVyIE1QSS4gKi8KKyAgZ2NyeV9tcGlfdCByMzsgIC8qIEhlbHBlciBNUEkgYWxsb2NhdGVkIG9uIGRlbWFuZC4gKi8KK307CisKKworCit2b2lkCitfZ2NyeV9tcGlfbW9kIChnY3J5X21waV90IHJlbSwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgZ2NyeV9tcGlfdCBkaXZpc29yKQoreworICBfZ2NyeV9tcGlfZmRpdl9yIChyZW0sIGRpdmlkZW5kLCBkaXZpc29yKTsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgY29udGV4dCBmb3IgQmFycmV0dCBiYXNlZCBvcGVyYXRpb25zIG9uCisgICB0aGUgbW9kdWx1cyBNLiAgVGhpcyBjb250ZXh0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIHVzaW5nCisgICBfZ2NyeV9tcGlfYmFycmV0dF9mcmVlLiAgSWYgQ09QWSBpcyB0cnVlIE0gd2lsbCBiZSB0cmFuc2ZlcnJlZCB0bworICAgdGhlIGNvbnRleHQgYW5kIHRoZSB1c2VyIG1heSBjaGFuZ2UgTS4gIElmIENPUFkgaXMgZmFsc2UsIE0gbWF5IG5vdAorICAgYmUgY2hhbmdlZCB1bnRpbCBnY3J5X21waV9iYXJyZXR0X2ZyZWUgaGFzIGJlZW4gY2FsbGVkLiAqLworbXBpX2JhcnJldHRfdAorX2djcnlfbXBpX2JhcnJldHRfaW5pdCAoZ2NyeV9tcGlfdCBtLCBpbnQgY29weSkKK3sKKyAgbXBpX2JhcnJldHRfdCBjdHg7CisgIGdjcnlfbXBpX3QgdG1wOworCisgIG1waV9ub3JtYWxpemUgKG0pOworICBjdHggPSB4Y2FsbG9jICgxLCBzaXplb2YgKmN0eCk7CisKKyAgaWYgKGNvcHkpCisgICAgeworICAgICAgY3R4LT5tID0gbXBpX2NvcHkgKG0pOworICAgICAgY3R4LT5tX2NvcGllZCA9IDE7CisgICAgfQorICBlbHNlCisgICAgY3R4LT5tID0gbTsKKworICBjdHgtPmsgPSBtcGlfZ2V0X25saW1icyAobSk7CisgIHRtcCA9IG1waV9hbGxvYyAoY3R4LT5rICsgMSk7CisKKyAgLyogQmFycmV0dCBwcmVjYWxjdWxhdGlvbjogeSA9IGZsb29yKGJeKDJrKSAvIG0pLiAqLworICBtcGlfc2V0X3VpICh0bXAsIDEpOworICBtcGlfbHNoaWZ0X2xpbWJzICh0bXAsIDIgKiBjdHgtPmspOworICBtcGlfZmRpdl9xICh0bXAsIHRtcCwgbSk7CisKKyAgY3R4LT55ICA9IHRtcDsKKyAgY3R4LT5yMSA9IG1waV9hbGxvYyAoIDIgKiBjdHgtPmsgKyAxICk7CisgIGN0eC0+cjIgPSBtcGlfYWxsb2MgKCAyICogY3R4LT5rICsgMSApOworCisgIHJldHVybiBjdHg7Cit9CisKK3ZvaWQKK19nY3J5X21waV9iYXJyZXR0X2ZyZWUgKG1waV9iYXJyZXR0X3QgY3R4KQoreworICBpZiAoY3R4KQorICAgIHsKKyAgICAgIG1waV9mcmVlIChjdHgtPnkpOworICAgICAgbXBpX2ZyZWUgKGN0eC0+cjEpOworICAgICAgbXBpX2ZyZWUgKGN0eC0+cjIpOworICAgICAgaWYgKGN0eC0+cjMpCisgICAgICAgIG1waV9mcmVlIChjdHgtPnIzKTsKKyAgICAgIGlmIChjdHgtPm1fY29waWVkKQorICAgICAgICBtcGlfZnJlZSAoY3R4LT5tKTsKKyAgICAgIHhmcmVlIChjdHgpOworICAgIH0KK30KKworCisvKiBSID0gWCBtb2QgTQorCisgICBVc2luZyBCYXJyZXR0IHJlZHVjdGlvbi4gIEJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uCisgICBfZ2NyeV9tcGlfYmFycmV0dF9pbml0IG11c3QgaGF2ZSBiZWVuIGNhbGxlZCB0byBkbyB0aGUKKyAgIHByZWNhbGN1bGF0aW9ucy4gIENUWCBpcyB0aGUgY29udGV4dCBjcmVhdGVkIGJ5IHRoaXMgcHJlY2FsY3VsYXRpb24KKyAgIGFuZCBhbHNvIGNvbnZleXMgTS4gIElmIHRoZSBCYXJyZXQgcmVkdWN0aW9uIGNvdWxkIG5vIGJlIGRvbmUgYQorICAgc3RyYWlnaHRmb3J3YXJkIHJlZHVjdGlvbiBtZXRob2QgaXMgdXNlZC4KKworICAgV2UgYXNzdW1lIHRoYXQgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgSW5wdXQ6ICB4ID0oeF8yay0xIC4uLnhfMClfYgorIAkgICBtID0obV9rLTEgLi4uLm1fMClfYgkgIHdpdGggbV9rLTEgIT0gMAorICAgT3V0cHV0OiByID0geCBtb2QgbQorICovCit2b2lkCitfZ2NyeV9tcGlfbW9kX2JhcnJldHQgKGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCB4LCBtcGlfYmFycmV0dF90IGN0eCkKK3sKKyAgZ2NyeV9tcGlfdCBtID0gY3R4LT5tOworICBpbnQgayA9IGN0eC0+azsKKyAgZ2NyeV9tcGlfdCB5ID0gY3R4LT55OworICBnY3J5X21waV90IHIxID0gY3R4LT5yMTsKKyAgZ2NyeV9tcGlfdCByMiA9IGN0eC0+cjI7CisgIGludCBzaWduOworCisgIG1waV9ub3JtYWxpemUgKHgpOworICBpZiAobXBpX2dldF9ubGltYnMgKHgpID4gMiprICkKKyAgICB7CisgICAgICBtcGlfbW9kIChyLCB4LCBtKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgc2lnbiA9IHgtPnNpZ247CisgIHgtPnNpZ24gPSAwOworCisgIC8qIDEuIHExID0gZmxvb3IoIHggLyBiXmstMSkKKyAgICogICAgcTIgPSBxMSAqIHkKKyAgICogICAgcTMgPSBmbG9vciggcTIgLyBiXmsrMSApCisgICAqIEFjdHVhbGx5LCB3ZSBkb24ndCBuZWVkIHF4LCB3ZSBjYW4gd29yayBkaXJlY3Qgb24gcjIKKyAgICovCisgIG1waV9zZXQgKCByMiwgeCApOworICBtcGlfcnNoaWZ0X2xpbWJzICggcjIsIGstMSApOworICBtcGlfbXVsICggcjIsIHIyLCB5ICk7CisgIG1waV9yc2hpZnRfbGltYnMgKCByMiwgaysxICk7CisKKyAgLyogMi4gcjEgPSB4IG1vZCBiXmsrMQorICAgKglyMiA9IHEzICogbSBtb2QgYl5rKzEKKyAgICoJciAgPSByMSAtIHIyCisgICAqIDMuIGlmIHIgPCAwIHRoZW4gIHIgPSByICsgYl5rKzEKKyAgICovCisgIG1waV9zZXQgKCByMSwgeCApOworICBpZiAoIHIxLT5ubGltYnMgPiBrKzEgKSAvKiBRdWljayBtb2R1bG8gb3BlcmF0aW9uLiAgKi8KKyAgICByMS0+bmxpbWJzID0gaysxOworICBtcGlfbXVsICggcjIsIHIyLCBtICk7CisgIGlmICggcjItPm5saW1icyA+IGsrMSApIC8qIFF1aWNrIG1vZHVsbyBvcGVyYXRpb24uICovCisgICAgcjItPm5saW1icyA9IGsrMTsKKyAgbXBpX3N1YiAoIHIsIHIxLCByMiApOworCisgIGlmICggbXBpX2hhc19zaWduICggciApICkKKyAgICB7CisgICAgICBpZiAoIWN0eC0+cjMpCisgICAgICAgIHsKKyAgICAgICAgICBjdHgtPnIzID0gbXBpX2FsbG9jICggayArIDIgKTsKKyAgICAgICAgICBtcGlfc2V0X3VpIChjdHgtPnIzLCAxKTsKKyAgICAgICAgICBtcGlfbHNoaWZ0X2xpbWJzIChjdHgtPnIzLCBrICsgMSApOworICAgICAgICB9CisgICAgICBtcGlfYWRkICggciwgciwgY3R4LT5yMyApOworICAgIH0KKworICAvKiA0LiB3aGlsZSByID49IG0gZG8gciA9IHIgLSBtICovCisgIHdoaWxlICggbXBpX2NtcCggciwgbSApID49IDAgKQorICAgIG1waV9zdWIgKCByLCByLCBtICk7CisKKyAgeC0+c2lnbiA9IHNpZ247Cit9CisKKwordm9pZAorX2djcnlfbXBpX211bF9iYXJyZXR0IChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LAorICAgICAgICAgICAgICAgICAgICAgICBtcGlfYmFycmV0dF90IGN0eCkKK3sKKyAgbXBpX211bCAodywgdSwgdik7CisgIG1waV9tb2RfYmFycmV0dCAodywgdywgY3R4KTsKK30KZGlmZiAtLWdpdCBhL21waS9tcGktbXBvdy5jIGIvbXBpL21waS1tcG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiZDY0MQotLS0gL2Rldi9udWxsCisrKyBiL21waS9tcGktbXBvdy5jCkBAIC0wLDAgKzEsMjIzIEBACisvKiBtcGktbXBvdy5jICAtICBNUEkgZnVuY3Rpb25zCisgKglDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAibXBpLWludGVybmFsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKworCisvKiBCYXJyZXR0IGlzIHNsb3dlciB0aGFuIHRoZSBjbGFzc2ljYWwgd2F5LiAgSXQgY2FuIGJlIHR3ZWFrZWQgYnkKKyAqIHVzaW5nIHBhcnRpYWwgbXVsdGlwbGljYXRpb25zCisgKi8KKy8qI2RlZmluZSBVU0VfQkFSUkVUVCovCisKKworCisjaWZkZWYgVVNFX0JBUlJFVFQKK3N0YXRpYyB2b2lkIGJhcnJldHRfbXVsbSggZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtLCBnY3J5X21waV90IHksIGludCBrLCBnY3J5X21waV90IHIxLCBnY3J5X21waV90IHIyICk7CitzdGF0aWMgZ2NyeV9tcGlfdCBpbml0X2JhcnJldHQoIGdjcnlfbXBpX3QgbSwgaW50ICprLCBnY3J5X21waV90ICpyMSwgZ2NyeV9tcGlfdCAqcjIgKTsKK3N0YXRpYyBpbnQgY2FsY19iYXJyZXR0KCBnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBtLCBnY3J5X21waV90IHksIGludCBrLCBnY3J5X21waV90IHIxLCBnY3J5X21waV90IHIyICApOworI2Vsc2UKKyNkZWZpbmUgYmFycmV0dF9tdWxtKCB3LCB1LCB2LCBtLCB5LCBrLCByMSwgcjIgKSBfZ2NyeV9tcGlfbXVsbSggKHcpLCAodSksICh2KSwgKG0pICkKKyNlbmRpZgorCisKK3N0YXRpYyBpbnQKK2J1aWxkX2luZGV4KCBnY3J5X21waV90ICpleHBhcnJheSwgaW50IGssIGludCBpLCBpbnQgdCApCit7CisgICAgaW50IGosIGJpdG5vOworICAgIGludCBpZHggPSAwOworCisgICAgYml0bm8gPSB0LWk7CisgICAgZm9yKGo9ay0xOyBqID49IDA7IGotLSApIHsKKwlpZHggPDw9IDE7CisJaWYoIG1waV90ZXN0X2JpdCggZXhwYXJyYXlbal0sIGJpdG5vICkgKQorCSAgICBpZHggfD0gMTsKKyAgICB9CisgICAgLypsb2dfZGVidWcoInQ9JWQgaT0lZCBpZHg9JWRcbiIsIHQsIGksIGlkeCApOyovCisgICAgcmV0dXJuIGlkeDsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIFJFUyA9IChCQVNFWzBdIF4gRVhQWzBdKSAqICAoQkFTRVsxXSBeIEVYUFsxXSkgKiAuLi4gKiBtb2QgTQorICovCit2b2lkCitfZ2NyeV9tcGlfbXVscG93bSggZ2NyeV9tcGlfdCByZXMsIGdjcnlfbXBpX3QgKmJhc2VhcnJheSwgZ2NyeV9tcGlfdCAqZXhwYXJyYXksIGdjcnlfbXBpX3QgbSkKK3sKKyAgICBpbnQgazsJLyogbnVtYmVyIG9mIGVsZW1lbnRzICovCisgICAgaW50IHQ7CS8qIGJpdCBzaXplIG9mIGxhcmdlc3QgZXhwb25lbnQgKi8KKyAgICBpbnQgaSwgaiwgaWR4OworICAgIGdjcnlfbXBpX3QgKkc7CS8qIHRhYmxlIHdpdGggcHJlY29tcHV0ZWQgdmFsdWVzIG9mIHNpemUgMl5rICovCisgICAgZ2NyeV9tcGlfdCB0bXA7CisjaWZkZWYgVVNFX0JBUlJFVFQKKyAgICBnY3J5X21waV90IGJhcnJldHRfeSwgYmFycmV0dF9yMSwgYmFycmV0dF9yMjsKKyAgICBpbnQgYmFycmV0dF9rOworI2VuZGlmCisKKyAgICBmb3Ioaz0wOyBiYXNlYXJyYXlba107IGsrKyApCisJOworICAgIGdjcnlfYXNzZXJ0KGspOworICAgIGZvcih0PTAsIGk9MDsgKHRtcD1leHBhcnJheVtpXSk7IGkrKyApIHsKKwkvKmxvZ19tcGlkdW1wKCJleHA6ICIsIHRtcCApOyovCisJaiA9IG1waV9nZXRfbmJpdHModG1wKTsKKwlpZiggaiA+IHQgKQorCSAgICB0ID0gajsKKyAgICB9CisgICAgLypsb2dfbXBpZHVtcCgibW9kOiAiLCBtICk7Ki8KKyAgICBnY3J5X2Fzc2VydCAoaT09ayk7CisgICAgZ2NyeV9hc3NlcnQgKHQpOworICAgIGdjcnlfYXNzZXJ0IChrIDwgMTApOworCisgICAgRyA9IHhjYWxsb2MoICgxPDxrKSAsIHNpemVvZiAqRyApOworI2lmZGVmIFVTRV9CQVJSRVRUCisgICAgYmFycmV0dF95ID0gaW5pdF9iYXJyZXR0KCBtLCAmYmFycmV0dF9rLCAmYmFycmV0dF9yMSwgJmJhcnJldHRfcjIgKTsKKyNlbmRpZgorICAgIC8qIGFuZCBjYWxjdWxhdGUgKi8KKyAgICB0bXAgPSAgbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyhtKSsxICk7CisgICAgbXBpX3NldF91aSggcmVzLCAxICk7CisgICAgZm9yKGkgPSAxOyBpIDw9IHQ7IGkrKyApIHsKKwliYXJyZXR0X211bG0odG1wLCByZXMsIHJlcywgbSwgYmFycmV0dF95LCBiYXJyZXR0X2ssCisJCQkJICAgICAgIGJhcnJldHRfcjEsIGJhcnJldHRfcjIgKTsKKwlpZHggPSBidWlsZF9pbmRleCggZXhwYXJyYXksIGssIGksIHQgKTsKKwlnY3J5X2Fzc2VydCAoaWR4ID49IDAgJiYgaWR4IDwgKDE8PGspKTsKKwlpZiggIUdbaWR4XSApIHsKKwkgICAgaWYoICFpZHggKQorCQkgR1swXSA9IG1waV9hbGxvY19zZXRfdWkoIDEgKTsKKwkgICAgZWxzZSB7CisJCWZvcihqPTA7IGogPCBrOyBqKysgKSB7CisJCSAgICBpZiggKGlkeCAmICgxPDxqKSApICkgeworCQkJaWYoICFHW2lkeF0gKQorCQkJICAgIEdbaWR4XSA9IG1waV9jb3B5KCBiYXNlYXJyYXlbal0gKTsKKwkJCWVsc2UKKwkJCSAgICBiYXJyZXR0X211bG0oIEdbaWR4XSwgR1tpZHhdLCBiYXNlYXJyYXlbal0sCisJCQkJCSAgICAgICBtLCBiYXJyZXR0X3ksIGJhcnJldHRfaywgYmFycmV0dF9yMSwgYmFycmV0dF9yMgkpOworCQkgICAgfQorCQl9CisJCWlmKCAhR1tpZHhdICkKKwkJICAgIEdbaWR4XSA9IG1waV9hbGxvYygwKTsKKwkgICAgfQorCX0KKwliYXJyZXR0X211bG0ocmVzLCB0bXAsIEdbaWR4XSwgbSwgYmFycmV0dF95LCBiYXJyZXR0X2ssIGJhcnJldHRfcjEsIGJhcnJldHRfcjIJKTsKKyAgICB9CisKKyAgICAvKiBjbGVhbnVwICovCisgICAgbXBpX2ZyZWUodG1wKTsKKyNpZmRlZiBVU0VfQkFSUkVUVAorICAgIG1waV9mcmVlKGJhcnJldHRfeSk7CisgICAgbXBpX2ZyZWUoYmFycmV0dF9yMSk7CisgICAgbXBpX2ZyZWUoYmFycmV0dF9yMik7CisjZW5kaWYKKyAgICBmb3IoaT0wOyBpIDwgKDE8PGspOyBpKysgKQorCW1waV9mcmVlKEdbaV0pOworICAgIHhmcmVlKEcpOworfQorCisKKworI2lmZGVmIFVTRV9CQVJSRVRUCitzdGF0aWMgdm9pZAorYmFycmV0dF9tdWxtKCBnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBnY3J5X21waV90IG0sIGdjcnlfbXBpX3QgeSwgaW50IGssIGdjcnlfbXBpX3QgcjEsIGdjcnlfbXBpX3QgcjIJKQoreworICAgIG1waV9tdWwodywgdSwgdik7CisgICAgaWYoIGNhbGNfYmFycmV0dCggdywgdywgbSwgeSwgaywgcjEsIHIyICkgKQorCW1waV9mZGl2X3IoIHcsIHcsIG0gKTsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIEJhcnJldHQgcHJlY2FsY3VsYXRpb246IHkgPSBmbG9vcihiXigyaykgLyBtKQorICovCitzdGF0aWMgZ2NyeV9tcGlfdAoraW5pdF9iYXJyZXR0KCBnY3J5X21waV90IG0sIGludCAqaywgZ2NyeV9tcGlfdCAqcjEsIGdjcnlfbXBpX3QgKnIyICkKK3sKKyAgICBnY3J5X21waV90IHRtcDsKKworICAgIG1waV9ub3JtYWxpemUoIG0gKTsKKyAgICAqayA9IG1waV9nZXRfbmxpbWJzKCBtICk7CisgICAgdG1wID0gbXBpX2FsbG9jKCAqayArIDEgKTsKKyAgICBtcGlfc2V0X3VpKCB0bXAsIDEgKTsKKyAgICBtcGlfbHNoaWZ0X2xpbWJzKCB0bXAsIDIgKiAqayApOworICAgIG1waV9mZGl2X3EoIHRtcCwgdG1wLCBtICk7CisgICAgKnIxID0gbXBpX2FsbG9jKCAyKiAqayArIDEgKTsKKyAgICAqcjIgPSBtcGlfYWxsb2MoIDIqICprICsgMSApOworICAgIHJldHVybiB0bXA7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBCYXJyZXR0IHJlZHVjdGlvbjogV2UgYXNzdW1lIHRoYXQgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0OgorICogR2l2ZW4geCA9KHhfMmstMSAuLi54XzApX2IKKyAqCSBtID0obV9rLTEgLi4uLm1fMClfYgkgIHdpdGggbV9rLTEgIT0gMAorICogT3V0cHV0IHIgPSB4IG1vZCBtCisgKiBCZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbiBpbml0X2JhcnJldCBtdXN0IGJlIHVzZWQgdG8gY2FsdWNhbHRlIHkgYW5kIGsuCisgKiBSZXR1cm5zOiBmYWxzZSA9IG5vIGVycm9yCisgKgkgICAgdHJ1ZSA9IGNhbid0IHBlcmZvcm0gYmFycmV0IHJlZHVjdGlvbgorICovCitzdGF0aWMgaW50CitjYWxjX2JhcnJldHQoIGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IG0sIGdjcnlfbXBpX3QgeSwgaW50IGssIGdjcnlfbXBpX3QgcjEsIGdjcnlfbXBpX3QgcjIgKQoreworICAgIGludCB4eCA9IGsgPiAzID8gay0zOjA7CisKKyAgICBtcGlfbm9ybWFsaXplKCB4ICk7CisgICAgaWYoIG1waV9nZXRfbmxpbWJzKHgpID4gMiprICkKKwlyZXR1cm4gMTsgLyogY2FuJ3QgZG8gaXQgKi8KKworICAgIC8qIDEuIHExID0gZmxvb3IoIHggLyBiXmstMSkKKyAgICAgKgkgIHEyID0gcTEgKiB5CisgICAgICoJICBxMyA9IGZsb29yKCBxMiAvIGJeaysxICkKKyAgICAgKiBBY3R1YWxseSwgd2UgZG9uJ3QgbmVlZCBxeCwgd2UgY2FuIHdvcmsgZGlyZWN0IG9uIHIyCisgICAgICovCisgICAgbXBpX3NldCggcjIsIHggKTsKKyAgICBtcGlfcnNoaWZ0X2xpbWJzKCByMiwgay0xICk7CisgICAgbXBpX211bCggcjIsIHIyLCB5ICk7CisgICAgbXBpX3JzaGlmdF9saW1icyggcjIsIGsrMSApOworCisgICAgLyogMi4gcjEgPSB4IG1vZCBiXmsrMQorICAgICAqCSAgcjIgPSBxMyAqIG0gbW9kIGJeaysxCisgICAgICoJICByICA9IHIxIC0gcjIKKyAgICAgKiAzLiBpZiByIDwgMCB0aGVuICByID0gciArIGJeaysxCisgICAgICovCisgICAgbXBpX3NldCggcjEsIHggKTsKKyAgICBpZiggcjEtPm5saW1icyA+IGsrMSApIC8qIHF1aWNrIG1vZHVsbyBvcGVyYXRpb24gKi8KKwlyMS0+bmxpbWJzID0gaysxOworICAgIG1waV9tdWwoIHIyLCByMiwgbSApOworICAgIGlmKCByMi0+bmxpbWJzID4gaysxICkgLyogcXVpY2sgbW9kdWxvIG9wZXJhdGlvbiAqLworCXIyLT5ubGltYnMgPSBrKzE7CisgICAgbXBpX3N1YiggciwgcjEsIHIyICk7CisKKyAgICBpZiggbXBpX2hhc19zaWduIChyKSApIHsKKwlnY3J5X21waV90IHRtcDsKKworCXRtcCA9IG1waV9hbGxvYyggayArIDIgKTsKKwltcGlfc2V0X3VpKCB0bXAsIDEgKTsKKwltcGlfbHNoaWZ0X2xpbWJzKCB0bXAsIGsrMSApOworCW1waV9hZGQoIHIsIHIsIHRtcCApOworCW1waV9mcmVlKHRtcCk7CisgICAgfQorCisgICAgLyogNC4gd2hpbGUgciA+PSBtIGRvIHIgPSByIC0gbSAqLworICAgIHdoaWxlKCBtcGlfY21wKCByLCBtICkgPj0gMCApCisJbXBpX3N1YiggciwgciwgbSApOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogVVNFX0JBUlJFVFQgKi8KZGlmZiAtLWdpdCBhL21waS9tcGktbXVsLmMgYi9tcGkvbXBpLW11bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNGQ3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbXBpLW11bC5jCkBAIC0wLDAgKzEsMjEyIEBACisvKiBtcGktbXVsLmMgIC0gIE1QSSBmdW5jdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorCisKK3ZvaWQKK19nY3J5X21waV9tdWxfdWkgKGdjcnlfbXBpX3QgcHJvZCwgZ2NyeV9tcGlfdCBtdWx0LCB1bnNpZ25lZCBsb25nIHNtYWxsX211bHQpCit7CisgICAgbXBpX3NpemVfdCBzaXplLCBwcm9kX3NpemU7CisgICAgbXBpX3B0cl90ICBwcm9kX3B0cjsKKyAgICBtcGlfbGltYl90IGN5OworICAgIGludCBzaWduOworCisgICAgc2l6ZSA9IG11bHQtPm5saW1iczsKKyAgICBzaWduID0gbXVsdC0+c2lnbjsKKworICAgIGlmKCAhc2l6ZSB8fCAhc21hbGxfbXVsdCApIHsKKwlwcm9kLT5ubGltYnMgPSAwOworCXByb2QtPnNpZ24gPSAwOworCXJldHVybjsKKyAgICB9CisKKyAgICBwcm9kX3NpemUgPSBzaXplICsgMTsKKyAgICBpZiggcHJvZC0+YWxsb2NlZCA8IHByb2Rfc2l6ZSApCisJbXBpX3Jlc2l6ZSggcHJvZCwgcHJvZF9zaXplICk7CisgICAgcHJvZF9wdHIgPSBwcm9kLT5kOworCisgICAgY3kgPSBfZ2NyeV9tcGloX211bF8xKCBwcm9kX3B0ciwgbXVsdC0+ZCwgc2l6ZSwgKG1waV9saW1iX3Qpc21hbGxfbXVsdCApOworICAgIGlmKCBjeSApCisJcHJvZF9wdHJbc2l6ZSsrXSA9IGN5OworICAgIHByb2QtPm5saW1icyA9IHNpemU7CisgICAgcHJvZC0+c2lnbiA9IHNpZ247Cit9CisKKwordm9pZAorX2djcnlfbXBpX211bF8yZXhwIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyBjbnQpCit7CisgICAgbXBpX3NpemVfdCB1c2l6ZSwgd3NpemUsIGxpbWJfY250OworICAgIG1waV9wdHJfdCB3cDsKKyAgICBtcGlfbGltYl90IHdsaW1iOworICAgIGludCB1c2lnbiwgd3NpZ247CisKKyAgICB1c2l6ZSA9IHUtPm5saW1iczsKKyAgICB1c2lnbiA9IHUtPnNpZ247CisKKyAgICBpZiggIXVzaXplICkgeworCXctPm5saW1icyA9IDA7CisJdy0+c2lnbiA9IDA7CisJcmV0dXJuOworICAgIH0KKworICAgIGxpbWJfY250ID0gY250IC8gQklUU19QRVJfTVBJX0xJTUI7CisgICAgd3NpemUgPSB1c2l6ZSArIGxpbWJfY250ICsgMTsKKyAgICBpZiggdy0+YWxsb2NlZCA8IHdzaXplICkKKwltcGlfcmVzaXplKHcsIHdzaXplICk7CisgICAgd3AgPSB3LT5kOworICAgIHdzaXplID0gdXNpemUgKyBsaW1iX2NudDsKKyAgICB3c2lnbiA9IHVzaWduOworCisgICAgY250ICU9IEJJVFNfUEVSX01QSV9MSU1COworICAgIGlmKCBjbnQgKSB7CisJd2xpbWIgPSBfZ2NyeV9tcGloX2xzaGlmdCggd3AgKyBsaW1iX2NudCwgdS0+ZCwgdXNpemUsIGNudCApOworCWlmKCB3bGltYiApIHsKKwkgICAgd3Bbd3NpemVdID0gd2xpbWI7CisJICAgIHdzaXplKys7CisJfQorICAgIH0KKyAgICBlbHNlIHsKKwlNUE5fQ09QWV9ERUNSKCB3cCArIGxpbWJfY250LCB1LT5kLCB1c2l6ZSApOworICAgIH0KKworICAgIC8qIFplcm8gYWxsIHdob2xlIGxpbWJzIGF0IGxvdyBlbmQuICBEbyBpdCBoZXJlIGFuZCBub3QgYmVmb3JlIGNhbGxpbmcKKyAgICAgKiBtcG5fbHNoaWZ0LCBub3QgdG8gbG9zZSBmb3IgVSA9PSBXLiAgKi8KKyAgICBNUE5fWkVSTyggd3AsIGxpbWJfY250ICk7CisKKyAgICB3LT5ubGltYnMgPSB3c2l6ZTsKKyAgICB3LT5zaWduID0gd3NpZ247Cit9CisKKwordm9pZAorX2djcnlfbXBpX211bCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdikKK3sKKyAgICBtcGlfc2l6ZV90IHVzaXplLCB2c2l6ZSwgd3NpemU7CisgICAgbXBpX3B0cl90IHVwLCB2cCwgd3A7CisgICAgbXBpX2xpbWJfdCBjeTsKKyAgICBpbnQgdXNpZ24sIHZzaWduLCB1c2VjdXJlLCB2c2VjdXJlLCBzaWduX3Byb2R1Y3Q7CisgICAgaW50IGFzc2lnbl93cD0wOworICAgIG1waV9wdHJfdCB0bXBfbGltYj1OVUxMOworICAgIHVuc2lnbmVkIGludCB0bXBfbGltYl9ubGltYnMgPSAwOworCisgICAgaWYoIHUtPm5saW1icyA8IHYtPm5saW1icyApIHsgLyogU3dhcCBVIGFuZCBWLiAqLworCXVzaXplID0gdi0+bmxpbWJzOworCXVzaWduID0gdi0+c2lnbjsKKwl1c2VjdXJlID0gbXBpX2lzX3NlY3VyZSh2KTsKKwl1cCAgICA9IHYtPmQ7CisJdnNpemUgPSB1LT5ubGltYnM7CisJdnNpZ24gPSB1LT5zaWduOworCXZzZWN1cmUgPSBtcGlfaXNfc2VjdXJlKHUpOworCXZwICAgID0gdS0+ZDsKKyAgICB9CisgICAgZWxzZSB7CisJdXNpemUgPSB1LT5ubGltYnM7CisJdXNpZ24gPSB1LT5zaWduOworCXVzZWN1cmUgPSBtcGlfaXNfc2VjdXJlKHUpOworCXVwICAgID0gdS0+ZDsKKwl2c2l6ZSA9IHYtPm5saW1iczsKKwl2c2lnbiA9IHYtPnNpZ247CisJdnNlY3VyZSA9IG1waV9pc19zZWN1cmUodik7CisJdnAgICAgPSB2LT5kOworICAgIH0KKyAgICBzaWduX3Byb2R1Y3QgPSB1c2lnbiBeIHZzaWduOworICAgIHdwID0gdy0+ZDsKKworICAgIC8qIEVuc3VyZSBXIGhhcyBzcGFjZSBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdC4gICovCisgICAgd3NpemUgPSB1c2l6ZSArIHZzaXplOworICAgIGlmICggIW1waV9pc19zZWN1cmUgKHcpICYmIChtcGlfaXNfc2VjdXJlICh1KSB8fCBtcGlfaXNfc2VjdXJlICh2KSkgKSB7CisgICAgICAgIC8qIHcgaXMgbm90IGFsbG9jYXRlZCBpbiBzZWN1cmUgc3BhY2UgYnV0IHUgb3IgdiBpcy4gIFRvIG1ha2Ugc3VyZQorICAgICAgICAgKiB0aGF0IG5vIHRlbXBvcnJheSByZXN1bHRzIGFyZSBzdG9yZWQgaW4gdywgd2UgdGVtcG9yYXJ5IHVzZQorICAgICAgICAgKiBhIG5ld2x5IGFsbG9jYXRlZCBsaW1iIHNwYWNlIGZvciB3ICovCisgICAgICAgIHdwID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIHdzaXplLCAxICk7CisgICAgICAgIGFzc2lnbl93cCA9IDI7IC8qIG1hcmsgaXQgYXMgMiBzbyB0aGF0IHdlIGNhbiBsYXRlciBjb3B5IGl0IGJhY2sgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICogbW9ybWFsIG1lbW9yeSAqLworICAgIH0KKyAgICBlbHNlIGlmKCB3LT5hbGxvY2VkIDwgd3NpemUgKSB7CisJaWYoIHdwID09IHVwIHx8IHdwID09IHZwICkgeworCSAgICB3cCA9IG1waV9hbGxvY19saW1iX3NwYWNlKCB3c2l6ZSwgbXBpX2lzX3NlY3VyZSh3KSApOworCSAgICBhc3NpZ25fd3AgPSAxOworCX0KKwllbHNlIHsKKwkgICAgbXBpX3Jlc2l6ZSh3LCB3c2l6ZSApOworCSAgICB3cCA9IHctPmQ7CisJfQorICAgIH0KKyAgICBlbHNlIHsgLyogTWFrZSBVIGFuZCBWIG5vdCBvdmVybGFwIHdpdGggVy4JKi8KKwlpZiggd3AgPT0gdXAgKSB7CisJICAgIC8qIFcgYW5kIFUgYXJlIGlkZW50aWNhbC4gIEFsbG9jYXRlIHRlbXBvcmFyeSBzcGFjZSBmb3IgVS4JKi8KKyAgICAgICAgICAgIHRtcF9saW1iX25saW1icyA9IHVzaXplOworCSAgICB1cCA9IHRtcF9saW1iID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIHVzaXplLCB1c2VjdXJlICApOworCSAgICAvKiBJcyBWIGlkZW50aWNhbCB0b28/ICBLZWVwIGl0IGlkZW50aWNhbCB3aXRoIFUuICAqLworCSAgICBpZiggd3AgPT0gdnAgKQorCQl2cCA9IHVwOworCSAgICAvKiBDb3B5IHRvIHRoZSB0ZW1wb3Jhcnkgc3BhY2UuICAqLworCSAgICBNUE5fQ09QWSggdXAsIHdwLCB1c2l6ZSApOworCX0KKwllbHNlIGlmKCB3cCA9PSB2cCApIHsKKwkgICAgLyogVyBhbmQgViBhcmUgaWRlbnRpY2FsLiAgQWxsb2NhdGUgdGVtcG9yYXJ5IHNwYWNlIGZvciBWLgkqLworICAgICAgICAgICAgdG1wX2xpbWJfbmxpbWJzID0gdnNpemU7CisJICAgIHZwID0gdG1wX2xpbWIgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSggdnNpemUsIHZzZWN1cmUgKTsKKwkgICAgLyogQ29weSB0byB0aGUgdGVtcG9yYXJ5IHNwYWNlLiAgKi8KKwkgICAgTVBOX0NPUFkoIHZwLCB3cCwgdnNpemUgKTsKKwl9CisgICAgfQorCisgICAgaWYoICF2c2l6ZSApCisJd3NpemUgPSAwOworICAgIGVsc2UgeworCWN5ID0gX2djcnlfbXBpaF9tdWwoIHdwLCB1cCwgdXNpemUsIHZwLCB2c2l6ZSApOworCXdzaXplIC09IGN5PyAwOjE7CisgICAgfQorCisgICAgaWYoIGFzc2lnbl93cCApIHsKKyAgICAgICAgaWYgKGFzc2lnbl93cCA9PSAyKSB7CisgICAgICAgICAgICAvKiBjb3B5IHRoZSB0ZW1wIHdwIGZyb20gc2VjdXJlIG1lbW9yeSBiYWNrIHRvIG5vcm1hbCBtZW1vcnkgKi8KKwkgICAgbXBpX3B0cl90IHRtcF93cCA9IG1waV9hbGxvY19saW1iX3NwYWNlICh3c2l6ZSwgMCk7CisJICAgIE1QTl9DT1BZICh0bXBfd3AsIHdwLCB3c2l6ZSk7CisgICAgICAgICAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlICh3cCwgMCk7CisgICAgICAgICAgICB3cCA9IHRtcF93cDsKKyAgICAgICAgfQorCV9nY3J5X21waV9hc3NpZ25fbGltYl9zcGFjZSggdywgd3AsIHdzaXplICk7CisgICAgfQorICAgIHctPm5saW1icyA9IHdzaXplOworICAgIHctPnNpZ24gPSBzaWduX3Byb2R1Y3Q7CisgICAgaWYoIHRtcF9saW1iICkKKwlfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlICh0bXBfbGltYiwgdG1wX2xpbWJfbmxpbWJzKTsKK30KKworCit2b2lkCitfZ2NyeV9tcGlfbXVsbSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKQoreworICBtcGlfbXVsICh3LCB1LCB2KTsKKyAgX2djcnlfbXBpX3RkaXZfciAodywgdywgbSk7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpLXBvdy5jIGIvbXBpL21waS1wb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjA5NDdmCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waS1wb3cuYwpAQCAtMCwwICsxLDc5MiBAQAorLyogbXBpLXBvdy5jICAtICBNUEkgZnVuY3Rpb25zIGZvciBleHBvbmVudGlhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk2LCAxOTk4LCAyMDAwLCAyMDAyCisgKiAgICAgICAgICAgICAgIDIwMDMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogICAgICAgICAgICAgICAyMDEzICBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworLyoKKyAqIFdoZW4geW91IG5lZWQgb2xkIGltcGxlbWVudGF0aW9uLCBwbGVhc2UgYWRkIGNvbXBpbGF0aW9uIG9wdGlvbgorICogLURVU0VfQUxHT1JJVEhNX1NJTVBMRV9FWFBPTkVOVElBVElPTgorICogb3IgZXhwb3NlIHRoaXMgbGluZToKKyNkZWZpbmUgVVNFX0FMR09SSVRITV9TSU1QTEVfRVhQT05FTlRJQVRJT04gMQorICovCisKKyNpZiBkZWZpbmVkKFVTRV9BTEdPUklUSE1fU0lNUExFX0VYUE9ORU5USUFUSU9OKQorLyoqKioqKioqKioqKioqKioKKyAqIFJFUyA9IEJBU0UgXiBFWFBPIG1vZCBNT0QKKyAqLwordm9pZAorX2djcnlfbXBpX3Bvd20gKGdjcnlfbXBpX3QgcmVzLAorICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgYmFzZSwgZ2NyeV9tcGlfdCBleHBvLCBnY3J5X21waV90IG1vZCkKK3sKKyAgLyogUG9pbnRlciB0byB0aGUgbGltYnMgb2YgdGhlIGFyZ3VtZW50cywgdGhlaXIgc2l6ZSBhbmQgc2lnbnMuICovCisgIG1waV9wdHJfdCAgcnAsIGVwLCBtcCwgYnA7CisgIG1waV9zaXplX3QgZXNpemUsIG1zaXplLCBic2l6ZSwgcnNpemU7CisgIGludCAgICAgICAgICAgICAgIG1zaWduLCBic2lnbiwgcnNpZ247CisgIC8qIEZsYWdzIHRlbGxpbmcgdGhlIHNlY3VyZSBhbGxvY2F0aW9uIHN0YXR1cyBvZiB0aGUgYXJndW1lbnRzLiAgKi8KKyAgaW50ICAgICAgICBlc2VjLCAgbXNlYywgIGJzZWM7CisgIC8qIFNpemUgb2YgdGhlIHJlc3VsdCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRlbXBvcmFyeSB2YWx1ZXMuICAqLworICBtcGlfc2l6ZV90IHNpemU7CisgIC8qIEhlbHBlci4gICovCisgIGludCBtb2Rfc2hpZnRfY250OworICBpbnQgbmVnYXRpdmVfcmVzdWx0OworICBtcGlfcHRyX3QgbXBfbWFya2VyID0gTlVMTDsKKyAgbXBpX3B0cl90IGJwX21hcmtlciA9IE5VTEw7CisgIG1waV9wdHJfdCBlcF9tYXJrZXIgPSBOVUxMOworICBtcGlfcHRyX3QgeHBfbWFya2VyID0gTlVMTDsKKyAgdW5zaWduZWQgaW50IG1wX25saW1icyA9IDA7CisgIHVuc2lnbmVkIGludCBicF9ubGltYnMgPSAwOworICB1bnNpZ25lZCBpbnQgZXBfbmxpbWJzID0gMDsKKyAgdW5zaWduZWQgaW50IHhwX25saW1icyA9IDA7CisgIG1waV9wdHJfdCB0c3BhY2UgPSBOVUxMOworICBtcGlfc2l6ZV90IHRzaXplID0gMDsKKworCisgIGVzaXplID0gZXhwby0+bmxpbWJzOworICBtc2l6ZSA9IG1vZC0+bmxpbWJzOworICBzaXplID0gMiAqIG1zaXplOworICBtc2lnbiA9IG1vZC0+c2lnbjsKKworICBlc2VjID0gbXBpX2lzX3NlY3VyZShleHBvKTsKKyAgbXNlYyA9IG1waV9pc19zZWN1cmUobW9kKTsKKyAgYnNlYyA9IG1waV9pc19zZWN1cmUoYmFzZSk7CisKKyAgcnAgPSByZXMtPmQ7CisgIGVwID0gZXhwby0+ZDsKKworICBpZiAoIW1zaXplKQorICAgIF9nY3J5X2RpdmlkZV9ieV96ZXJvKCk7CisKKyAgaWYgKCFlc2l6ZSkKKyAgICB7CisgICAgICAvKiBFeHBvbmVudCBpcyB6ZXJvLCByZXN1bHQgaXMgMSBtb2QgTU9ELCBpLmUuLCAxIG9yIDAgZGVwZW5kaW5nCisgICAgICAgICBvbiBpZiBNT0QgZXF1YWxzIDEuICAqLworICAgICAgcmVzLT5ubGltYnMgPSAobXNpemUgPT0gMSAmJiBtb2QtPmRbMF0gPT0gMSkgPyAwIDogMTsKKyAgICAgIGlmIChyZXMtPm5saW1icykKKyAgICAgICAgeworICAgICAgICAgIFJFU0laRV9JRl9ORUVERUQgKHJlcywgMSk7CisgICAgICAgICAgcnAgPSByZXMtPmQ7CisgICAgICAgICAgcnBbMF0gPSAxOworICAgICAgICB9CisgICAgICByZXMtPnNpZ24gPSAwOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogTm9ybWFsaXplIE1PRCAoaS5lLiBtYWtlIGl0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQpIGFzCisgICAgIHJlcXVpcmVkIGJ5IG1wbl9kaXZyZW0uICBUaGlzIHdpbGwgbWFrZSB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlcworICAgICBpbiB0aGUgY2FsY3VsYXRpb24gc2xpZ2h0bHkgbGFyZ2VyLCBidXQgdGhlIGNvcnJlY3QgcmVzdWx0IGlzCisgICAgIG9idGFpbmVkIGFmdGVyIGEgZmluYWwgcmVkdWN0aW9uIHVzaW5nIHRoZSBvcmlnaW5hbCBNT0QgdmFsdWUuICovCisgIG1wX25saW1icyA9IG1zZWM/IG1zaXplOjA7CisgIG1wID0gbXBfbWFya2VyID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UobXNpemUsIG1zZWMpOworICBjb3VudF9sZWFkaW5nX3plcm9zIChtb2Rfc2hpZnRfY250LCBtb2QtPmRbbXNpemUtMV0pOworICBpZiAobW9kX3NoaWZ0X2NudCkKKyAgICBfZ2NyeV9tcGloX2xzaGlmdCAobXAsIG1vZC0+ZCwgbXNpemUsIG1vZF9zaGlmdF9jbnQpOworICBlbHNlCisgICAgTVBOX0NPUFkoIG1wLCBtb2QtPmQsIG1zaXplICk7CisKKyAgYnNpemUgPSBiYXNlLT5ubGltYnM7CisgIGJzaWduID0gYmFzZS0+c2lnbjsKKyAgaWYgKGJzaXplID4gbXNpemUpCisgICAgeworICAgICAgLyogVGhlIGJhc2UgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZS4gIFJlZHVjZSBpdC4KKworICAgICAgICAgQWxsb2NhdGUgKEJTSVpFICsgMSkgd2l0aCBzcGFjZSBmb3IgcmVtYWluZGVyIGFuZCBxdW90aWVudC4KKyAgICAgICAgIChUaGUgcXVvdGllbnQgaXMgKGJzaXplIC0gbXNpemUgKyAxKSBsaW1icy4pICAqLworICAgICAgYnBfbmxpbWJzID0gYnNlYyA/IChic2l6ZSArIDEpOjA7CisgICAgICBicCA9IGJwX21hcmtlciA9IG1waV9hbGxvY19saW1iX3NwYWNlKCBic2l6ZSArIDEsIGJzZWMgKTsKKyAgICAgIE1QTl9DT1BZICggYnAsIGJhc2UtPmQsIGJzaXplICk7CisgICAgICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSBxdW90aWVudCwgc3RvcmUgaXQgYWJvdmUgdGhlCisgICAgICAgKiByZW1haW5kZXIsIGF0IEJQICsgTVNJWkUuICAqLworICAgICAgX2djcnlfbXBpaF9kaXZyZW0oIGJwICsgbXNpemUsIDAsIGJwLCBic2l6ZSwgbXAsIG1zaXplICk7CisgICAgICBic2l6ZSA9IG1zaXplOworICAgICAgLyogQ2Fub25pY2FsaXplIHRoZSBiYXNlLCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gbXVsdGlwbHkgd2l0aCBpdAorCSBxdWl0ZSBhIGZldyB0aW1lcy4gICovCisgICAgICBNUE5fTk9STUFMSVpFKCBicCwgYnNpemUgKTsKKyAgICB9CisgIGVsc2UKKyAgICBicCA9IGJhc2UtPmQ7CisKKyAgaWYgKCFic2l6ZSkKKyAgICB7CisgICAgICByZXMtPm5saW1icyA9IDA7CisgICAgICByZXMtPnNpZ24gPSAwOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKworICAvKiBNYWtlIEJBU0UsIEVYUE8gYW5kIE1PRCBub3Qgb3ZlcmxhcCB3aXRoIFJFUy4gICovCisgIGlmICggcnAgPT0gYnAgKQorICAgIHsKKyAgICAgIC8qIFJFUyBhbmQgQkFTRSBhcmUgaWRlbnRpY2FsLiAgQWxsb2NhdGUgdGVtcC4gc3BhY2UgZm9yIEJBU0UuICAqLworICAgICAgZ2NyeV9hc3NlcnQgKCFicF9tYXJrZXIpOworICAgICAgYnBfbmxpbWJzID0gYnNlYz8gYnNpemU6MDsKKyAgICAgIGJwID0gYnBfbWFya2VyID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIGJzaXplLCBic2VjICk7CisgICAgICBNUE5fQ09QWShicCwgcnAsIGJzaXplKTsKKyAgICB9CisgIGlmICggcnAgPT0gZXAgKQorICAgIHsKKyAgICAgIC8qIFJFUyBhbmQgRVhQTyBhcmUgaWRlbnRpY2FsLiAgQWxsb2NhdGUgdGVtcC4gc3BhY2UgZm9yIEVYUE8uICAqLworICAgICAgZXBfbmxpbWJzID0gZXNlYz8gZXNpemU6MDsKKyAgICAgIGVwID0gZXBfbWFya2VyID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIGVzaXplLCBlc2VjICk7CisgICAgICBNUE5fQ09QWShlcCwgcnAsIGVzaXplKTsKKyAgICB9CisgIGlmICggcnAgPT0gbXAgKQorICAgIHsKKyAgICAgIC8qIFJFUyBhbmQgTU9EIGFyZSBpZGVudGljYWwuICBBbGxvY2F0ZSB0ZW1wb3Jhcnkgc3BhY2UgZm9yIE1PRC4qLworICAgICAgZ2NyeV9hc3NlcnQgKCFtcF9tYXJrZXIpOworICAgICAgbXBfbmxpbWJzID0gbXNlYz9tc2l6ZTowOworICAgICAgbXAgPSBtcF9tYXJrZXIgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSggbXNpemUsIG1zZWMgKTsKKyAgICAgIE1QTl9DT1BZKG1wLCBycCwgbXNpemUpOworICAgIH0KKworICAvKiBDb3B5IGJhc2UgdG8gdGhlIHJlc3VsdC4gICovCisgIGlmIChyZXMtPmFsbG9jZWQgPCBzaXplKQorICAgIHsKKyAgICAgIG1waV9yZXNpemUgKHJlcywgc2l6ZSk7CisgICAgICBycCA9IHJlcy0+ZDsKKyAgICB9CisgIE1QTl9DT1BZICggcnAsIGJwLCBic2l6ZSApOworICByc2l6ZSA9IGJzaXplOworICByc2lnbiA9IDA7CisKKyAgLyogTWFpbiBwcm9jZXNzaW5nLiAgKi8KKyAgeworICAgIG1waV9zaXplX3QgaTsKKyAgICBtcGlfcHRyX3QgeHA7CisgICAgaW50IGM7CisgICAgbXBpX2xpbWJfdCBlOworICAgIG1waV9saW1iX3QgY2FycnlfbGltYjsKKyAgICBzdHJ1Y3Qga2FyYXRzdWJhX2N0eCBrYXJhY3R4OworCisgICAgeHBfbmxpbWJzID0gbXNlYz8gKDIgKiAobXNpemUgKyAxKSk6MDsKKyAgICB4cCA9IHhwX21hcmtlciA9IG1waV9hbGxvY19saW1iX3NwYWNlKCAyICogKG1zaXplICsgMSksIG1zZWMgKTsKKworICAgIG1lbXNldCggJmthcmFjdHgsIDAsIHNpemVvZiBrYXJhY3R4ICk7CisgICAgbmVnYXRpdmVfcmVzdWx0ID0gKGVwWzBdICYgMSkgJiYgYnNpZ247CisKKyAgICBpID0gZXNpemUgLSAxOworICAgIGUgPSBlcFtpXTsKKyAgICBjb3VudF9sZWFkaW5nX3plcm9zIChjLCBlKTsKKyAgICBlID0gKGUgPDwgYykgPDwgMTsgICAgIC8qIFNoaWZ0IHRoZSBleHBvIGJpdHMgdG8gdGhlIGxlZnQsIGxvc2UgbXNiLiAgKi8KKyAgICBjID0gQklUU19QRVJfTVBJX0xJTUIgLSAxIC0gYzsKKworICAgIC8qIE1haW4gbG9vcC4KKworICAgICAgIE1ha2UgdGhlIHJlc3VsdCBiZSBwb2ludGVkIHRvIGFsdGVybmF0ZWx5IGJ5IFhQIGFuZCBSUC4gIFRoaXMKKyAgICAgICBoZWxwcyB1cyBhdm9pZCBibG9jayBjb3B5aW5nLCB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUKKyAgICAgICBuZWNlc3Nhcnkgd2l0aCB0aGUgb3ZlcmxhcCByZXN0cmljdGlvbnMgb2YKKyAgICAgICBfZ2NyeV9tcGloX2Rpdm1vZC4gV2l0aCA1MCUgcHJvYmFiaWxpdHkgdGhlIHJlc3VsdCBhZnRlciB0aGlzCisgICAgICAgbG9vcCB3aWxsIGJlIGluIHRoZSBhcmVhIG9yaWdpbmFsbHkgcG9pbnRlZCBieSBSUCAoPT1SRVMtPmQpLAorICAgICAgIGFuZCB3aXRoIDUwJSBwcm9iYWJpbGl0eSBpbiB0aGUgYXJlYSBvcmlnaW5hbGx5IHBvaW50ZWQgdG8gYnkgWFAuICovCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgd2hpbGUgKGMpCisgICAgICAgICAgeworICAgICAgICAgICAgbXBpX3B0cl90IHRwOworICAgICAgICAgICAgbXBpX3NpemVfdCB4c2l6ZTsKKworICAgICAgICAgICAgLyptcGloX211bF9uKHhwLCBycCwgcnAsIHJzaXplKTsqLworICAgICAgICAgICAgaWYgKCByc2l6ZSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKQorICAgICAgICAgICAgICBfZ2NyeV9tcGloX3Nxcl9uX2Jhc2VjYXNlKCB4cCwgcnAsIHJzaXplICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoICF0c3BhY2UgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0c2l6ZSA9IDIgKiByc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdHNwYWNlID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIHRzaXplLCAwICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRzaXplIDwgKDIqcnNpemUpICkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSAodHNwYWNlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdHNpemUgPSAyICogcnNpemU7CisgICAgICAgICAgICAgICAgICAgIHRzcGFjZSA9IG1waV9hbGxvY19saW1iX3NwYWNlICh0c2l6ZSwgMCApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF9nY3J5X21waWhfc3FyX24gKHhwLCBycCwgcnNpemUsIHRzcGFjZSk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeHNpemUgPSAyICogcnNpemU7CisgICAgICAgICAgICBpZiAoIHhzaXplID4gbXNpemUgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2djcnlfbXBpaF9kaXZyZW0oeHAgKyBtc2l6ZSwgMCwgeHAsIHhzaXplLCBtcCwgbXNpemUpOworICAgICAgICAgICAgICAgIHhzaXplID0gbXNpemU7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAgICAgICAgICAgIHJzaXplID0geHNpemU7CisKKyAgICAgICAgICAgIC8qIFRvIG1pdGlnYXRlIHRoZSBZYXJvbS9GYWxrbmVyIGZsdXNoK3JlbG9hZCBjYWNoZQorICAgICAgICAgICAgICogc2lkZS1jaGFubmVsIGF0dGFjayBvbiB0aGUgUlNBIHNlY3JldCBleHBvbmVudCwgd2UgZG8KKyAgICAgICAgICAgICAqIHRoZSBtdWx0aXBsaWNhdGlvbiByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAqIGhpZ2gtYml0IG9mIEUuICBCdXQgdG8gYXZvaWQgdGhpcyBwZXJmb3JtYW5jZSBwZW5hbHR5CisgICAgICAgICAgICAgKiB3ZSBkbyBpdCBvbmx5IGlmIHRoZSBleHBvbmVudCBoYXMgYmVlbiBzdG9yZWQgaW4gc2VjdXJlCisgICAgICAgICAgICAgKiBtZW1vcnkgYW5kIHdlIGNhbiB0aHVzIGFzc3VtZSBpdCBpcyBhIHNlY3JldCBleHBvbmVudC4gICovCisgICAgICAgICAgICBpZiAoZXNlYyB8fCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKm1waWhfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsqLworICAgICAgICAgICAgICAgIGlmKCBic2l6ZSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKQorICAgICAgICAgICAgICAgICAgX2djcnlfbXBpaF9tdWwgKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBfZ2NyeV9tcGloX211bF9rYXJhdHN1YmFfY2FzZSAoeHAsIHJwLCByc2l6ZSwgYnAsIGJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYXJhY3R4KTsKKworICAgICAgICAgICAgICAgIHhzaXplID0gcnNpemUgKyBic2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoIHhzaXplID4gbXNpemUgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBfZ2NyeV9tcGloX2RpdnJlbSh4cCArIG1zaXplLCAwLCB4cCwgeHNpemUsIG1wLCBtc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHhzaXplID0gbXNpemU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggKG1waV9saW1iX3NpZ25lZF90KWUgPCAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgICAgICAgICAgICAgICAgcnNpemUgPSB4c2l6ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZSA8PD0gMTsKKyAgICAgICAgICAgIGMtLTsKKyAgICAgICAgICB9CisKKyAgICAgICAgaS0tOworICAgICAgICBpZiAoIGkgPCAwICkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZSA9IGVwW2ldOworICAgICAgICBjID0gQklUU19QRVJfTVBJX0xJTUI7CisgICAgICB9CisKKyAgICAvKiBXZSBzaGlmdGVkIE1PRCwgdGhlIG1vZHVsbyByZWR1Y3Rpb24gYXJndW1lbnQsIGxlZnQKKyAgICAgICBNT0RfU0hJRlRfQ05UIHN0ZXBzLiAgQWRqdXN0IHRoZSByZXN1bHQgYnkgcmVkdWNpbmcgaXQgd2l0aCB0aGUKKyAgICAgICBvcmlnaW5hbCBNT0QuCisKKyAgICAgICBBbHNvIG1ha2Ugc3VyZSB0aGUgcmVzdWx0IGlzIHB1dCBpbiBSRVMtPmQgKHdoZXJlIGl0IGFscmVhZHkKKyAgICAgICBtaWdodCBiZSwgc2VlIGFib3ZlKS4gICovCisgICAgaWYgKCBtb2Rfc2hpZnRfY250ICkKKyAgICAgIHsKKyAgICAgICAgY2FycnlfbGltYiA9IF9nY3J5X21waWhfbHNoaWZ0KCByZXMtPmQsIHJwLCByc2l6ZSwgbW9kX3NoaWZ0X2NudCk7CisgICAgICAgIHJwID0gcmVzLT5kOworICAgICAgICBpZiAoIGNhcnJ5X2xpbWIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJwW3JzaXplXSA9IGNhcnJ5X2xpbWI7CisgICAgICAgICAgICByc2l6ZSsrOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlIGlmIChyZXMtPmQgIT0gcnApCisgICAgICB7CisgICAgICAgIE1QTl9DT1BZIChyZXMtPmQsIHJwLCByc2l6ZSk7CisgICAgICAgIHJwID0gcmVzLT5kOworICAgICAgfQorCisgICAgaWYgKCByc2l6ZSA+PSBtc2l6ZSApCisgICAgICB7CisgICAgICAgIF9nY3J5X21waWhfZGl2cmVtKHJwICsgbXNpemUsIDAsIHJwLCByc2l6ZSwgbXAsIG1zaXplKTsKKyAgICAgICAgcnNpemUgPSBtc2l6ZTsKKyAgICAgIH0KKworICAgIC8qIFJlbW92ZSBhbnkgbGVhZGluZyB6ZXJvIHdvcmRzIGZyb20gdGhlIHJlc3VsdC4gICovCisgICAgaWYgKCBtb2Rfc2hpZnRfY250ICkKKyAgICAgIF9nY3J5X21waWhfcnNoaWZ0KCBycCwgcnAsIHJzaXplLCBtb2Rfc2hpZnRfY250KTsKKyAgICBNUE5fTk9STUFMSVpFIChycCwgcnNpemUpOworCisgICAgX2djcnlfbXBpaF9yZWxlYXNlX2thcmF0c3ViYV9jdHggKCZrYXJhY3R4ICk7CisgIH0KKworICAvKiBGaXh1cCBmb3IgbmVnYXRpdmUgcmVzdWx0cy4gICovCisgIGlmICggbmVnYXRpdmVfcmVzdWx0ICYmIHJzaXplICkKKyAgICB7CisgICAgICBpZiAoIG1vZF9zaGlmdF9jbnQgKQorICAgICAgICBfZ2NyeV9tcGloX3JzaGlmdCggbXAsIG1wLCBtc2l6ZSwgbW9kX3NoaWZ0X2NudCk7CisgICAgICBfZ2NyeV9tcGloX3N1YiggcnAsIG1wLCBtc2l6ZSwgcnAsIHJzaXplKTsKKyAgICAgIHJzaXplID0gbXNpemU7CisgICAgICByc2lnbiA9IG1zaWduOworICAgICAgTVBOX05PUk1BTElaRShycCwgcnNpemUpOworICAgIH0KKyAgZ2NyeV9hc3NlcnQgKHJlcy0+ZCA9PSBycCk7CisgIHJlcy0+bmxpbWJzID0gcnNpemU7CisgIHJlcy0+c2lnbiA9IHJzaWduOworCisgbGVhdmU6CisgIGlmIChtcF9tYXJrZXIpCisgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSggbXBfbWFya2VyLCBtcF9ubGltYnMgKTsKKyAgaWYgKGJwX21hcmtlcikKKyAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBicF9tYXJrZXIsIGJwX25saW1icyApOworICBpZiAoZXBfbWFya2VyKQorICAgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UoIGVwX21hcmtlciwgZXBfbmxpbWJzICk7CisgIGlmICh4cF9tYXJrZXIpCisgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSggeHBfbWFya2VyLCB4cF9ubGltYnMgKTsKKyAgaWYgKHRzcGFjZSkKKyAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCB0c3BhY2UsIDAgKTsKK30KKyNlbHNlCisvKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGNvbXB1dGUKKyAqCisgKiAgICBYID0gUiAqIFMgbW9kIE0KKyAqCisgKiBhbmQgc2V0IHRoZSBzaXplIG9mIFggYXQgdGhlIHBvaW50ZXIgWFNJWkVfUC4KKyAqIFVzZSBrYXJhdHN1YmEgc3RydWN0dXJlIGF0IEtBUkFDVFhfUC4KKyAqCisgKiBDb25kaXRpb246CisgKiAgIFJTSVpFID49IFNTSVpFCisgKiAgIEVub3VnaCBzcGFjZSBmb3IgWCBpcyBhbGxvY2F0ZWQgYmVmb3JlaGFuZC4KKyAqCisgKiBGb3IgZ2VuZXJpYyBjYXNlcywgd2UgY2FuL3Nob3VsZCB1c2UgZ2NyeV9tcGlfbXVsbS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlIGZvciBzcGVjaWZpYyBpbnRlcm5hbCBjYXNlLgorICovCitzdGF0aWMgdm9pZAorbXVsX21vZCAobXBpX3B0cl90IHhwLCBtcGlfc2l6ZV90ICp4c2l6ZV9wLAorICAgICAgICAgbXBpX3B0cl90IHJwLCBtcGlfc2l6ZV90IHJzaXplLAorICAgICAgICAgbXBpX3B0cl90IHNwLCBtcGlfc2l6ZV90IHNzaXplLAorICAgICAgICAgbXBpX3B0cl90IG1wLCBtcGlfc2l6ZV90IG1zaXplLAorICAgICAgICAgc3RydWN0IGthcmF0c3ViYV9jdHggKmthcmFjdHhfcCkKK3sKKyAgaWYoIHNzaXplIDwgS0FSQVRTVUJBX1RIUkVTSE9MRCApCisgICAgX2djcnlfbXBpaF9tdWwgKCB4cCwgcnAsIHJzaXplLCBzcCwgc3NpemUgKTsKKyAgZWxzZQorICAgIF9nY3J5X21waWhfbXVsX2thcmF0c3ViYV9jYXNlICh4cCwgcnAsIHJzaXplLCBzcCwgc3NpemUsIGthcmFjdHhfcCk7CisKKyAgIGlmIChyc2l6ZSArIHNzaXplID4gbXNpemUpCisgICAgeworICAgICAgX2djcnlfbXBpaF9kaXZyZW0gKHhwICsgbXNpemUsIDAsIHhwLCByc2l6ZSArIHNzaXplLCBtcCwgbXNpemUpOworICAgICAgKnhzaXplX3AgPSBtc2l6ZTsKKyAgICB9CisgICBlbHNlCisgICAgICp4c2l6ZV9wID0gcnNpemUgKyBzc2l6ZTsKK30KKworI2RlZmluZSBTSVpFX0JfMkkzICgoMSA8PCAoNSAtIDEpKSAtIDEpCisKKy8qKioqKioqKioqKioqKioqCisgKiBSRVMgPSBCQVNFIF4gRVhQTyBtb2QgTU9ECisgKgorICogVG8gbWl0aWdhdGUgdGhlIFlhcm9tL0ZhbGtuZXIgZmx1c2grcmVsb2FkIGNhY2hlIHNpZGUtY2hhbm5lbAorICogYXR0YWNrIG9uIHRoZSBSU0Egc2VjcmV0IGV4cG9uZW50LCB3ZSBkb24ndCB1c2UgdGhlIHNxdWFyZQorICogcm91dGluZSBidXQgbXVsdGlwbGljYXRpb24uCisgKgorICogUmVmZXJlbmNlOgorICogICBIYW5kYm9vayBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeQorICogICAgICAgQWxnb3JpdGhtIDE0LjgzOiBNb2RpZmllZCBsZWZ0LXRvLXJpZ2h0IGstYXJ5IGV4cG9uZW50aWF0aW9uCisgKi8KK3ZvaWQKK19nY3J5X21waV9wb3dtIChnY3J5X21waV90IHJlcywKKyAgICAgICAgICAgICAgICBnY3J5X21waV90IGJhc2UsIGdjcnlfbXBpX3QgZXhwbywgZ2NyeV9tcGlfdCBtb2QpCit7CisgIC8qIFBvaW50ZXIgdG8gdGhlIGxpbWJzIG9mIHRoZSBhcmd1bWVudHMsIHRoZWlyIHNpemUgYW5kIHNpZ25zLiAqLworICBtcGlfcHRyX3QgIHJwLCBlcCwgbXAsIGJwOworICBtcGlfc2l6ZV90IGVzaXplLCBtc2l6ZSwgYnNpemUsIHJzaXplOworICBpbnQgICAgICAgICAgICAgICBtc2lnbiwgYnNpZ24sIHJzaWduOworICAvKiBGbGFncyB0ZWxsaW5nIHRoZSBzZWN1cmUgYWxsb2NhdGlvbiBzdGF0dXMgb2YgdGhlIGFyZ3VtZW50cy4gICovCisgIGludCAgICAgICAgZXNlYywgIG1zZWMsICBic2VjOworICAvKiBTaXplIG9mIHRoZSByZXN1bHQgaW5jbHVkaW5nIHNwYWNlIGZvciB0ZW1wb3JhcnkgdmFsdWVzLiAgKi8KKyAgbXBpX3NpemVfdCBzaXplOworICAvKiBIZWxwZXIuICAqLworICBpbnQgbW9kX3NoaWZ0X2NudDsKKyAgaW50IG5lZ2F0aXZlX3Jlc3VsdDsKKyAgbXBpX3B0cl90IG1wX21hcmtlciA9IE5VTEw7CisgIG1waV9wdHJfdCBicF9tYXJrZXIgPSBOVUxMOworICBtcGlfcHRyX3QgZXBfbWFya2VyID0gTlVMTDsKKyAgbXBpX3B0cl90IHhwX21hcmtlciA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBtcF9ubGltYnMgPSAwOworICB1bnNpZ25lZCBpbnQgYnBfbmxpbWJzID0gMDsKKyAgdW5zaWduZWQgaW50IGVwX25saW1icyA9IDA7CisgIHVuc2lnbmVkIGludCB4cF9ubGltYnMgPSAwOworICBtcGlfcHRyX3QgYl8yaTNbU0laRV9CXzJJM107IC8qIFByZS1jb21wdXRlZCBhcnJheTogQkFTRV4zLCBeNSwgXjcsIC4uLiAqLworICBtcGlfc2l6ZV90IGJfMmkzc2l6ZVtTSVpFX0JfMkkzXTsKKyAgbXBpX3NpemVfdCBXOworICBtcGlfcHRyX3QgYmFzZV91OworICBtcGlfc2l6ZV90IGJhc2VfdV9zaXplOworCisgIGVzaXplID0gZXhwby0+bmxpbWJzOworICBtc2l6ZSA9IG1vZC0+bmxpbWJzOworICBzaXplID0gMiAqIG1zaXplOworICBtc2lnbiA9IG1vZC0+c2lnbjsKKworICBpZiAoZXNpemUgKiBCSVRTX1BFUl9NUElfTElNQiA+IDUxMikKKyAgICBXID0gNTsKKyAgZWxzZSBpZiAoZXNpemUgKiBCSVRTX1BFUl9NUElfTElNQiA+IDI1NikKKyAgICBXID0gNDsKKyAgZWxzZSBpZiAoZXNpemUgKiBCSVRTX1BFUl9NUElfTElNQiA+IDEyOCkKKyAgICBXID0gMzsKKyAgZWxzZSBpZiAoZXNpemUgKiBCSVRTX1BFUl9NUElfTElNQiA+IDY0KQorICAgIFcgPSAyOworICBlbHNlCisgICAgVyA9IDE7CisKKyAgZXNlYyA9IG1waV9pc19zZWN1cmUoZXhwbyk7CisgIG1zZWMgPSBtcGlfaXNfc2VjdXJlKG1vZCk7CisgIGJzZWMgPSBtcGlfaXNfc2VjdXJlKGJhc2UpOworCisgIHJwID0gcmVzLT5kOworICBlcCA9IGV4cG8tPmQ7CisKKyAgaWYgKCFtc2l6ZSkKKyAgICBfZ2NyeV9kaXZpZGVfYnlfemVybygpOworCisgIGlmICghZXNpemUpCisgICAgeworICAgICAgLyogRXhwb25lbnQgaXMgemVybywgcmVzdWx0IGlzIDEgbW9kIE1PRCwgaS5lLiwgMSBvciAwIGRlcGVuZGluZworICAgICAgICAgb24gaWYgTU9EIGVxdWFscyAxLiAgKi8KKyAgICAgIHJlcy0+bmxpbWJzID0gKG1zaXplID09IDEgJiYgbW9kLT5kWzBdID09IDEpID8gMCA6IDE7CisgICAgICBpZiAocmVzLT5ubGltYnMpCisgICAgICAgIHsKKyAgICAgICAgICBSRVNJWkVfSUZfTkVFREVEIChyZXMsIDEpOworICAgICAgICAgIHJwID0gcmVzLT5kOworICAgICAgICAgIHJwWzBdID0gMTsKKyAgICAgICAgfQorICAgICAgcmVzLT5zaWduID0gMDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIE5vcm1hbGl6ZSBNT0QgKGkuZS4gbWFrZSBpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0KSBhcworICAgICByZXF1aXJlZCBieSBtcG5fZGl2cmVtLiAgVGhpcyB3aWxsIG1ha2UgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMKKyAgICAgaW4gdGhlIGNhbGN1bGF0aW9uIHNsaWdodGx5IGxhcmdlciwgYnV0IHRoZSBjb3JyZWN0IHJlc3VsdCBpcworICAgICBvYnRhaW5lZCBhZnRlciBhIGZpbmFsIHJlZHVjdGlvbiB1c2luZyB0aGUgb3JpZ2luYWwgTU9EIHZhbHVlLiAqLworICBtcF9ubGltYnMgPSBtc2VjPyBtc2l6ZTowOworICBtcCA9IG1wX21hcmtlciA9IG1waV9hbGxvY19saW1iX3NwYWNlKG1zaXplLCBtc2VjKTsKKyAgY291bnRfbGVhZGluZ196ZXJvcyAobW9kX3NoaWZ0X2NudCwgbW9kLT5kW21zaXplLTFdKTsKKyAgaWYgKG1vZF9zaGlmdF9jbnQpCisgICAgX2djcnlfbXBpaF9sc2hpZnQgKG1wLCBtb2QtPmQsIG1zaXplLCBtb2Rfc2hpZnRfY250KTsKKyAgZWxzZQorICAgIE1QTl9DT1BZKCBtcCwgbW9kLT5kLCBtc2l6ZSApOworCisgIGJzaXplID0gYmFzZS0+bmxpbWJzOworICBic2lnbiA9IGJhc2UtPnNpZ247CisgIGlmIChic2l6ZSA+IG1zaXplKQorICAgIHsKKyAgICAgIC8qIFRoZSBiYXNlIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUuICBSZWR1Y2UgaXQuCisKKyAgICAgICAgIEFsbG9jYXRlIChCU0laRSArIDEpIHdpdGggc3BhY2UgZm9yIHJlbWFpbmRlciBhbmQgcXVvdGllbnQuCisgICAgICAgICAoVGhlIHF1b3RpZW50IGlzIChic2l6ZSAtIG1zaXplICsgMSkgbGltYnMuKSAgKi8KKyAgICAgIGJwX25saW1icyA9IGJzZWMgPyAoYnNpemUgKyAxKTowOworICAgICAgYnAgPSBicF9tYXJrZXIgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSggYnNpemUgKyAxLCBic2VjICk7CisgICAgICBNUE5fQ09QWSAoIGJwLCBiYXNlLT5kLCBic2l6ZSApOworICAgICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcXVvdGllbnQsIHN0b3JlIGl0IGFib3ZlIHRoZQorICAgICAgICogcmVtYWluZGVyLCBhdCBCUCArIE1TSVpFLiAgKi8KKyAgICAgIF9nY3J5X21waWhfZGl2cmVtKCBicCArIG1zaXplLCAwLCBicCwgYnNpemUsIG1wLCBtc2l6ZSApOworICAgICAgYnNpemUgPSBtc2l6ZTsKKyAgICAgIC8qIENhbm9uaWNhbGl6ZSB0aGUgYmFzZSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIG11bHRpcGx5IHdpdGggaXQKKyAgICAgICAgIHF1aXRlIGEgZmV3IHRpbWVzLiAgKi8KKyAgICAgIE1QTl9OT1JNQUxJWkUoIGJwLCBic2l6ZSApOworICAgIH0KKyAgZWxzZQorICAgIGJwID0gYmFzZS0+ZDsKKworICBpZiAoIWJzaXplKQorICAgIHsKKyAgICAgIHJlcy0+bmxpbWJzID0gMDsKKyAgICAgIHJlcy0+c2lnbiA9IDA7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworCisgIC8qIE1ha2UgQkFTRSwgRVhQTyBhbmQgTU9EIG5vdCBvdmVybGFwIHdpdGggUkVTLiAgKi8KKyAgaWYgKCBycCA9PSBicCApCisgICAgeworICAgICAgLyogUkVTIGFuZCBCQVNFIGFyZSBpZGVudGljYWwuICBBbGxvY2F0ZSB0ZW1wLiBzcGFjZSBmb3IgQkFTRS4gICovCisgICAgICBnY3J5X2Fzc2VydCAoIWJwX21hcmtlcik7CisgICAgICBicF9ubGltYnMgPSBic2VjPyBic2l6ZTowOworICAgICAgYnAgPSBicF9tYXJrZXIgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSggYnNpemUsIGJzZWMgKTsKKyAgICAgIE1QTl9DT1BZKGJwLCBycCwgYnNpemUpOworICAgIH0KKyAgaWYgKCBycCA9PSBlcCApCisgICAgeworICAgICAgLyogUkVTIGFuZCBFWFBPIGFyZSBpZGVudGljYWwuICBBbGxvY2F0ZSB0ZW1wLiBzcGFjZSBmb3IgRVhQTy4gICovCisgICAgICBlcF9ubGltYnMgPSBlc2VjPyBlc2l6ZTowOworICAgICAgZXAgPSBlcF9tYXJrZXIgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSggZXNpemUsIGVzZWMgKTsKKyAgICAgIE1QTl9DT1BZKGVwLCBycCwgZXNpemUpOworICAgIH0KKyAgaWYgKCBycCA9PSBtcCApCisgICAgeworICAgICAgLyogUkVTIGFuZCBNT0QgYXJlIGlkZW50aWNhbC4gIEFsbG9jYXRlIHRlbXBvcmFyeSBzcGFjZSBmb3IgTU9ELiovCisgICAgICBnY3J5X2Fzc2VydCAoIW1wX21hcmtlcik7CisgICAgICBtcF9ubGltYnMgPSBtc2VjP21zaXplOjA7CisgICAgICBtcCA9IG1wX21hcmtlciA9IG1waV9hbGxvY19saW1iX3NwYWNlKCBtc2l6ZSwgbXNlYyApOworICAgICAgTVBOX0NPUFkobXAsIHJwLCBtc2l6ZSk7CisgICAgfQorCisgIC8qIENvcHkgYmFzZSB0byB0aGUgcmVzdWx0LiAgKi8KKyAgaWYgKHJlcy0+YWxsb2NlZCA8IHNpemUpCisgICAgeworICAgICAgbXBpX3Jlc2l6ZSAocmVzLCBzaXplKTsKKyAgICAgIHJwID0gcmVzLT5kOworICAgIH0KKworICAvKiBNYWluIHByb2Nlc3NpbmcuICAqLworICB7CisgICAgbXBpX3NpemVfdCBpLCBqOworICAgIG1waV9wdHJfdCB4cDsKKyAgICBtcGlfc2l6ZV90IHhzaXplOworICAgIGludCBjOworICAgIG1waV9saW1iX3QgZTsKKyAgICBtcGlfbGltYl90IGNhcnJ5X2xpbWI7CisgICAgc3RydWN0IGthcmF0c3ViYV9jdHgga2FyYWN0eDsKKyAgICBtcGlfcHRyX3QgdHA7CisKKyAgICB4cF9ubGltYnMgPSBtc2VjPyAoMiAqIChtc2l6ZSArIDEpKTowOworICAgIHhwID0geHBfbWFya2VyID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIDIgKiAobXNpemUgKyAxKSwgbXNlYyApOworCisgICAgbWVtc2V0KCAma2FyYWN0eCwgMCwgc2l6ZW9mIGthcmFjdHggKTsKKyAgICBuZWdhdGl2ZV9yZXN1bHQgPSAoZXBbMF0gJiAxKSAmJiBic2lnbjsKKworICAgIC8qIFByZWNvbXB1dGUgQl8ySTNbXSwgQkFTRV4oMiAqIGkgKyAzKSwgQkFTRV4zLCBeNSwgXjcsIC4uLiAqLworICAgIGlmIChXID4gMSkgICAgICAgICAgICAgICAgICAvKiBYIDo9IEJBU0VeMiAqLworICAgICAgbXVsX21vZCAoeHAsICZ4c2l6ZSwgYnAsIGJzaXplLCBicCwgYnNpemUsIG1wLCBtc2l6ZSwgJmthcmFjdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCAoMSA8PCAoVyAtIDEpKSAtIDE7IGkrKykKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQl8ySTNbaV0gPSBCQVNFXigyICogaSArIDMpICovCisgICAgICAgIGlmIChpID09IDApCisgICAgICAgICAgeworICAgICAgICAgICAgYmFzZV91ID0gYnA7CisgICAgICAgICAgICBiYXNlX3Vfc2l6ZSA9IGJzaXplOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2VfdSA9IGJfMmkzW2ktMV07CisgICAgICAgICAgICBiYXNlX3Vfc2l6ZSA9IGJfMmkzc2l6ZVtpLTFdOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoeHNpemUgPj0gYmFzZV91X3NpemUpCisgICAgICAgICAgbXVsX21vZCAocnAsICZyc2l6ZSwgeHAsIHhzaXplLCBiYXNlX3UsIGJhc2VfdV9zaXplLAorICAgICAgICAgICAgICAgICAgIG1wLCBtc2l6ZSwgJmthcmFjdHgpOworICAgICAgICBlbHNlCisgICAgICAgICAgbXVsX21vZCAocnAsICZyc2l6ZSwgYmFzZV91LCBiYXNlX3Vfc2l6ZSwgeHAsIHhzaXplLAorICAgICAgICAgICAgICAgICAgIG1wLCBtc2l6ZSwgJmthcmFjdHgpOworICAgICAgICBiXzJpM1tpXSA9IG1waV9hbGxvY19saW1iX3NwYWNlIChyc2l6ZSwgZXNlYyk7CisgICAgICAgIGJfMmkzc2l6ZVtpXSA9IHJzaXplOworICAgICAgICBNUE5fQ09QWSAoYl8yaTNbaV0sIHJwLCByc2l6ZSk7CisgICAgICB9CisKKyAgICBpID0gZXNpemUgLSAxOworCisgICAgLyogTWFpbiBsb29wLgorCisgICAgICAgTWFrZSB0aGUgcmVzdWx0IGJlIHBvaW50ZWQgdG8gYWx0ZXJuYXRlbHkgYnkgWFAgYW5kIFJQLiAgVGhpcworICAgICAgIGhlbHBzIHVzIGF2b2lkIGJsb2NrIGNvcHlpbmcsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZQorICAgICAgIG5lY2Vzc2FyeSB3aXRoIHRoZSBvdmVybGFwIHJlc3RyaWN0aW9ucyBvZgorICAgICAgIF9nY3J5X21waWhfZGl2bW9kLiBXaXRoIDUwJSBwcm9iYWJpbGl0eSB0aGUgcmVzdWx0IGFmdGVyIHRoaXMKKyAgICAgICBsb29wIHdpbGwgYmUgaW4gdGhlIGFyZWEgb3JpZ2luYWxseSBwb2ludGVkIGJ5IFJQICg9PVJFUy0+ZCksCisgICAgICAgYW5kIHdpdGggNTAlIHByb2JhYmlsaXR5IGluIHRoZSBhcmVhIG9yaWdpbmFsbHkgcG9pbnRlZCB0byBieSBYUC4gKi8KKyAgICByc2lnbiA9IDA7CisgICAgaWYgKFcgPT0gMSkKKyAgICAgIHsKKyAgICAgICAgcnNpemUgPSBic2l6ZTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJzaXplID0gbXNpemU7CisgICAgICAgIE1QTl9aRVJPIChycCwgcnNpemUpOworICAgICAgfQorICAgIE1QTl9DT1BZICggcnAsIGJwLCBic2l6ZSApOworCisgICAgZSA9IGVwW2ldOworICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKGMsIGUpOworICAgIGUgPSAoZSA8PCBjKSA8PCAxOworICAgIGMgPSBCSVRTX1BFUl9NUElfTElNQiAtIDEgLSBjOworCisgICAgaiA9IDA7CisKKyAgICBmb3IgKDs7KQorICAgICAgaWYgKGUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGogKz0gYzsKKyAgICAgICAgICBpLS07CisgICAgICAgICAgaWYgKCBpIDwgMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGMgPSAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGUgPSBlcFtpXTsKKyAgICAgICAgICBjID0gQklUU19QRVJfTVBJX0xJTUI7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGludCBjMDsKKyAgICAgICAgICBtcGlfbGltYl90IGUwOworCisgICAgICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoYzAsIGUpOworICAgICAgICAgIGUgPSAoZSA8PCBjMCk7CisgICAgICAgICAgYyAtPSBjMDsKKyAgICAgICAgICBqICs9IGMwOworCisgICAgICAgICAgaWYgKGMgPj0gVykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZTAgPSAoZSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBXKSk7CisgICAgICAgICAgICAgIGUgPSAoZSA8PCBXKTsKKyAgICAgICAgICAgICAgYyAtPSBXOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICBpZiAoIGkgPCAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBlID0gKGUgPj4gKEJJVFNfUEVSX01QSV9MSU1CIC0gYykpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGMwID0gYzsKKyAgICAgICAgICAgICAgZTAgPSAoZSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBXKSkKKyAgICAgICAgICAgICAgICB8IChlcFtpXSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBXICsgYzApKTsKKyAgICAgICAgICAgICAgZSA9IChlcFtpXSA8PCAoVyAtIGMwKSk7CisgICAgICAgICAgICAgIGMgPSBCSVRTX1BFUl9NUElfTElNQiAtIFcgKyBjMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjMCwgZTApOworICAgICAgICAgIGUwID0gKGUwID4+IGMwKSA+PiAxOworCisgICAgICAgICAgZm9yIChqICs9IFcgLSBjMDsgajsgai0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtdWxfbW9kICh4cCwgJnhzaXplLCBycCwgcnNpemUsIHJwLCByc2l6ZSwgbXAsIG1zaXplLCAma2FyYWN0eCk7CisgICAgICAgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgICAgICAgICAgICAgIHJzaXplID0geHNpemU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoZTAgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYmFzZV91ID0gYnA7CisgICAgICAgICAgICAgIGJhc2VfdV9zaXplID0gYnNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiYXNlX3UgPSBiXzJpM1tlMCAtIDFdOworICAgICAgICAgICAgICBiYXNlX3Vfc2l6ZSA9IGJfMmkzc2l6ZVtlMCAtMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBtdWxfbW9kICh4cCwgJnhzaXplLCBycCwgcnNpemUsIGJhc2VfdSwgYmFzZV91X3NpemUsCisgICAgICAgICAgICAgICAgICAgbXAsIG1zaXplLCAma2FyYWN0eCk7CisgICAgICAgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAgICAgICAgICByc2l6ZSA9IHhzaXplOworCisgICAgICAgICAgaiA9IGMwOworICAgICAgICB9CisKKyAgICBpZiAoYyAhPSAwKQorICAgICAgeworICAgICAgICBqICs9IGM7CisgICAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCBlKTsKKyAgICAgICAgZSA9IChlID4+IGMpOworICAgICAgICBqIC09IGM7CisgICAgICB9CisKKyAgICB3aGlsZSAoai0tKQorICAgICAgeworICAgICAgICBtdWxfbW9kICh4cCwgJnhzaXplLCBycCwgcnNpemUsIHJwLCByc2l6ZSwgbXAsIG1zaXplLCAma2FyYWN0eCk7CisgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgICAgICAgIHJzaXplID0geHNpemU7CisgICAgICB9CisKKyAgICBpZiAoZSAhPSAwKQorICAgICAgeworICAgICAgICBpZiAoKGU+PjEpID09IDApCisgICAgICAgICAgeworICAgICAgICAgICAgYmFzZV91ID0gYnA7CisgICAgICAgICAgICBiYXNlX3Vfc2l6ZSA9IGJzaXplOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2VfdSA9IGJfMmkzWyhlPj4xKSAtIDFdOworICAgICAgICAgICAgYmFzZV91X3NpemUgPSBiXzJpM3NpemVbKGU+PjEpIC0xXTsKKyAgICAgICAgICB9CisKKyAgICAgICAgbXVsX21vZCAoeHAsICZ4c2l6ZSwgcnAsIHJzaXplLCBiYXNlX3UsIGJhc2VfdV9zaXplLAorICAgICAgICAgICAgICAgICBtcCwgbXNpemUsICZrYXJhY3R4KTsKKyAgICAgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAgICAgICAgcnNpemUgPSB4c2l6ZTsKKworICAgICAgICBmb3IgKDsgYzsgYy0tKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG11bF9tb2QgKHhwLCAmeHNpemUsIHJwLCByc2l6ZSwgcnAsIHJzaXplLCBtcCwgbXNpemUsICZrYXJhY3R4KTsKKyAgICAgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgICAgICAgICAgICByc2l6ZSA9IHhzaXplOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIFdlIHNoaWZ0ZWQgTU9ELCB0aGUgbW9kdWxvIHJlZHVjdGlvbiBhcmd1bWVudCwgbGVmdAorICAgICAgIE1PRF9TSElGVF9DTlQgc3RlcHMuICBBZGp1c3QgdGhlIHJlc3VsdCBieSByZWR1Y2luZyBpdCB3aXRoIHRoZQorICAgICAgIG9yaWdpbmFsIE1PRC4KKworICAgICAgIEFsc28gbWFrZSBzdXJlIHRoZSByZXN1bHQgaXMgcHV0IGluIFJFUy0+ZCAod2hlcmUgaXQgYWxyZWFkeQorICAgICAgIG1pZ2h0IGJlLCBzZWUgYWJvdmUpLiAgKi8KKyAgICBpZiAoIG1vZF9zaGlmdF9jbnQgKQorICAgICAgeworICAgICAgICBjYXJyeV9saW1iID0gX2djcnlfbXBpaF9sc2hpZnQoIHJlcy0+ZCwgcnAsIHJzaXplLCBtb2Rfc2hpZnRfY250KTsKKyAgICAgICAgcnAgPSByZXMtPmQ7CisgICAgICAgIGlmICggY2FycnlfbGltYiApCisgICAgICAgICAgeworICAgICAgICAgICAgcnBbcnNpemVdID0gY2FycnlfbGltYjsKKyAgICAgICAgICAgIHJzaXplKys7CisgICAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UgaWYgKHJlcy0+ZCAhPSBycCkKKyAgICAgIHsKKyAgICAgICAgTVBOX0NPUFkgKHJlcy0+ZCwgcnAsIHJzaXplKTsKKyAgICAgICAgcnAgPSByZXMtPmQ7CisgICAgICB9CisKKyAgICBpZiAoIHJzaXplID49IG1zaXplICkKKyAgICAgIHsKKyAgICAgICAgX2djcnlfbXBpaF9kaXZyZW0ocnAgKyBtc2l6ZSwgMCwgcnAsIHJzaXplLCBtcCwgbXNpemUpOworICAgICAgICByc2l6ZSA9IG1zaXplOworICAgICAgfQorCisgICAgLyogUmVtb3ZlIGFueSBsZWFkaW5nIHplcm8gd29yZHMgZnJvbSB0aGUgcmVzdWx0LiAgKi8KKyAgICBpZiAoIG1vZF9zaGlmdF9jbnQgKQorICAgICAgX2djcnlfbXBpaF9yc2hpZnQoIHJwLCBycCwgcnNpemUsIG1vZF9zaGlmdF9jbnQpOworICAgIE1QTl9OT1JNQUxJWkUgKHJwLCByc2l6ZSk7CisKKyAgICBfZ2NyeV9tcGloX3JlbGVhc2Vfa2FyYXRzdWJhX2N0eCAoJmthcmFjdHggKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKDEgPDwgKFcgLSAxKSkgLSAxOyBpKyspCisgICAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBiXzJpM1tpXSwgZXNlYyA/IGJfMmkzc2l6ZVtpXSA6IDAgKTsKKyAgfQorCisgIC8qIEZpeHVwIGZvciBuZWdhdGl2ZSByZXN1bHRzLiAgKi8KKyAgaWYgKCBuZWdhdGl2ZV9yZXN1bHQgJiYgcnNpemUgKQorICAgIHsKKyAgICAgIGlmICggbW9kX3NoaWZ0X2NudCApCisgICAgICAgIF9nY3J5X21waWhfcnNoaWZ0KCBtcCwgbXAsIG1zaXplLCBtb2Rfc2hpZnRfY250KTsKKyAgICAgIF9nY3J5X21waWhfc3ViKCBycCwgbXAsIG1zaXplLCBycCwgcnNpemUpOworICAgICAgcnNpemUgPSBtc2l6ZTsKKyAgICAgIHJzaWduID0gbXNpZ247CisgICAgICBNUE5fTk9STUFMSVpFKHJwLCByc2l6ZSk7CisgICAgfQorICBnY3J5X2Fzc2VydCAocmVzLT5kID09IHJwKTsKKyAgcmVzLT5ubGltYnMgPSByc2l6ZTsKKyAgcmVzLT5zaWduID0gcnNpZ247CisKKyBsZWF2ZToKKyAgaWYgKG1wX21hcmtlcikKKyAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBtcF9tYXJrZXIsIG1wX25saW1icyApOworICBpZiAoYnBfbWFya2VyKQorICAgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UoIGJwX21hcmtlciwgYnBfbmxpbWJzICk7CisgIGlmIChlcF9tYXJrZXIpCisgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSggZXBfbWFya2VyLCBlcF9ubGltYnMgKTsKKyAgaWYgKHhwX21hcmtlcikKKyAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCB4cF9tYXJrZXIsIHhwX25saW1icyApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9tcGkvbXBpLXNjYW4uYyBiL21waS9tcGktc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyN2Y3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbXBpLXNjYW4uYwpAQCAtMCwwICsxLDEzMCBAQAorLyogbXBpLXNjYW4uYyAgLSAgTVBJIGZ1bmN0aW9ucworICoJQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKioqKioqKioqKioqKioqKgorICogU2NhbiB0aHJvdWdoIGFuIG1waSBhbmQgcmV0dXJuIGJ5dGUgZm9yIGJ5dGUuIGEgLTEgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUKKyAqIHRoZSBlbmQgb2YgdGhlIG1waS4gU2Nhbm5pbmcgaXMgZG9uZSBmcm9tIHRoZSBsc2IgdG8gdGhlIG1zYiwgcmV0dXJuZWQKKyAqIHZhbHVlcyBhcmUgaW4gdGhlIHJhbmdlIG9mIDAgLi4gMjU1LgorICoKKyAqIEZJWE1FOiBUaGlzIGNvZGUgaXMgVkVSWSB1Z2x5IQorICovCisvKiBpbnQgKi8KKy8qIF9nY3J5X21waV9nZXRieXRlKCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGlkeCApICovCisvKiB7ICovCisvKiAgICAgaW50IGksIGo7ICovCisvKiAgICAgdW5zaWduZWQgbjsgKi8KKy8qICAgICBtcGlfcHRyX3QgYXA7ICovCisvKiAgICAgbXBpX2xpbWJfdCBsaW1iOyAqLworCisvKiAgICAgYXAgPSBhLT5kOyAqLworLyogICAgIGZvcihuPTAsaT0wOyBpIDwgYS0+bmxpbWJzOyBpKysgKSB7ICovCisvKiAJbGltYiA9IGFwW2ldOyAqLworLyogCWZvciggaj0wOyBqIDwgQllURVNfUEVSX01QSV9MSU1COyBqKyssIG4rKyApICovCisvKiAJICAgIGlmKCBuID09IGlkeCApICovCisvKiAJCXJldHVybiAobGltYiA+PiBqKjgpICYgMHhmZjsgKi8KKy8qICAgICB9ICovCisvKiAgICAgcmV0dXJuIC0xOyAqLworLyogfSAqLworCisKKy8qKioqKioqKioqKioqKioqCisgKiBQdXQgYSB2YWx1ZSBhdCBwb3NpdGlvbiBJRFggaW50byBBLiBpZHggY291bnRzIGZyb20gbHNiIHRvIG1zYgorICovCisvKiB2b2lkICovCisvKiBfZ2NyeV9tcGlfcHV0Ynl0ZSggZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpZHgsIGludCB4YyApICovCisvKiB7ICovCisvKiAgICAgaW50IGksIGo7ICovCisvKiAgICAgdW5zaWduZWQgbjsgKi8KKy8qICAgICBtcGlfcHRyX3QgYXA7ICovCisvKiAgICAgbXBpX2xpbWJfdCBsaW1iLCBjOyAqLworCisvKiAgICAgYyA9IHhjICYgMHhmZjsgKi8KKy8qICAgICBhcCA9IGEtPmQ7ICovCisvKiAgICAgZm9yKG49MCxpPTA7IGkgPCBhLT5hbGxvY2VkOyBpKysgKSB7ICovCisvKiAJbGltYiA9IGFwW2ldOyAqLworLyogCWZvciggaj0wOyBqIDwgQllURVNfUEVSX01QSV9MSU1COyBqKyssIG4rKyApICovCisvKiAJICAgIGlmKCBuID09IGlkeCApIHsgKi8KKy8qIAkgICAgICAjaWYgQllURVNfUEVSX01QSV9MSU1CID09IDQgKi8KKy8qIAkJaWYoIGogPT0gMCApICovCisvKiAJCSAgICBsaW1iID0gKGxpbWIgJiAweGZmZmZmZjAwKSB8IGM7ICovCisvKiAJCWVsc2UgaWYoIGogPT0gMSApICovCisvKiAJCSAgICBsaW1iID0gKGxpbWIgJiAweGZmZmYwMGZmKSB8IChjPDw4KTsgKi8KKy8qIAkJZWxzZSBpZiggaiA9PSAyICkgKi8KKy8qIAkJICAgIGxpbWIgPSAobGltYiAmIDB4ZmYwMGZmZmYpIHwgKGM8PDE2KTsgKi8KKy8qIAkJZWxzZSAqLworLyogCQkgICAgbGltYiA9IChsaW1iICYgMHgwMGZmZmZmZikgfCAoYzw8MjQpOyAqLworLyogCSAgICAgICNlbGlmIEJZVEVTX1BFUl9NUElfTElNQiA9PSA4ICovCisvKiAJCWlmKCBqID09IDAgKSAqLworLyogCQkgICAgbGltYiA9IChsaW1iICYgMHhmZmZmZmZmZmZmZmZmZjAwKSB8IGM7ICovCisvKiAJCWVsc2UgaWYoIGogPT0gMSApICovCisvKiAJCSAgICBsaW1iID0gKGxpbWIgJiAweGZmZmZmZmZmZmZmZjAwZmYpIHwgKGM8PDgpOyAqLworLyogCQllbHNlIGlmKCBqID09IDIgKSAqLworLyogCQkgICAgbGltYiA9IChsaW1iICYgMHhmZmZmZmZmZmZmMDBmZmZmKSB8IChjPDwxNik7ICovCisvKiAJCWVsc2UgaWYoIGogPT0gMyApICovCisvKiAJCSAgICBsaW1iID0gKGxpbWIgJiAweGZmZmZmZmZmMDBmZmZmZmYpIHwgKGM8PDI0KTsgKi8KKy8qIAkJZWxzZSBpZiggaiA9PSA0ICkgKi8KKy8qIAkJICAgIGxpbWIgPSAobGltYiAmIDB4ZmZmZmZmMDBmZmZmZmZmZikgfCAoYzw8MzIpOyAqLworLyogCQllbHNlIGlmKCBqID09IDUgKSAqLworLyogCQkgICAgbGltYiA9IChsaW1iICYgMHhmZmZmMDBmZmZmZmZmZmZmKSB8IChjPDw0MCk7ICovCisvKiAJCWVsc2UgaWYoIGogPT0gNiApICovCisvKiAJCSAgICBsaW1iID0gKGxpbWIgJiAweGZmMDBmZmZmZmZmZmZmZmYpIHwgKGM8PDQ4KTsgKi8KKy8qIAkJZWxzZSAqLworLyogCQkgICAgbGltYiA9IChsaW1iICYgMHgwMGZmZmZmZmZmZmZmZmZmKSB8IChjPDw1Nik7ICovCisvKiAJICAgICAgI2Vsc2UgKi8KKy8qIAkJICNlcnJvciBwbGVhc2UgZW5oYW5jZSB0aGlzIGZ1bmN0aW9uLCBpdHMgdWdseSAtIGkga25vdy4gKi8KKy8qIAkgICAgICAjZW5kaWYgKi8KKy8qIAkJaWYoIGEtPm5saW1icyA8PSBpICkgKi8KKy8qIAkJICAgIGEtPm5saW1icyA9IGkrMTsgKi8KKy8qIAkJYXBbaV0gPSBsaW1iOyAqLworLyogCQlyZXR1cm47ICovCisvKiAJICAgIH0gKi8KKy8qICAgICB9ICovCisvKiAgICAgYWJvcnQoKTsgL1wqIGluZGV4IG91dCBvZiByYW5nZSAqXC8gKi8KKy8qIH0gKi8KKworCisvKioqKioqKioqKioqKioqKgorICogQ291bnQgdGhlIG51bWJlciBvZiB6ZXJvYml0cyBhdCB0aGUgbG93IGVuZCBvZiBBCisgKi8KK3Vuc2lnbmVkCitfZ2NyeV9tcGlfdHJhaWxpbmdfemVyb3MoIGdjcnlfbXBpX3QgYSApCit7CisgICAgdW5zaWduZWQgbiwgY291bnQgPSAwOworCisgICAgZm9yKG49MDsgbiA8IGEtPm5saW1iczsgbisrICkgeworCWlmKCBhLT5kW25dICkgeworCSAgICB1bnNpZ25lZCBubjsKKwkgICAgbXBpX2xpbWJfdCBhbGltYiA9IGEtPmRbbl07CisKKwkgICAgY291bnRfdHJhaWxpbmdfemVyb3MoIG5uLCBhbGltYiApOworCSAgICBjb3VudCArPSBubjsKKwkgICAgYnJlYWs7CisJfQorCWNvdW50ICs9IEJJVFNfUEVSX01QSV9MSU1COworICAgIH0KKyAgICByZXR1cm4gY291bnQ7CisKK30KZGlmZiAtLWdpdCBhL21waS9tcGljb2Rlci5jIGIvbXBpL21waWNvZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThhNDI0MAotLS0gL2Rldi9udWxsCisrKyBiL21waS9tcGljb2Rlci5jCkBAIC0wLDAgKzEsODk0IEBACisvKiBtcGljb2Rlci5jICAtICBDb2RlciBmb3IgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIE1QSXMKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworICogICAgICAgICAgICAgICAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKworI2RlZmluZSBNQVhfRVhURVJOX01QSV9CSVRTIDE2Mzg0CisKKy8qIEhlbHBlciB1c2VkIHRvIHNjYW4gUEdQIHN0eWxlIE1QSXMuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4gKi8KK3N0YXRpYyBnY3J5X21waV90CittcGlfcmVhZF9mcm9tX2J1ZmZlciAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCAqcmV0X25yZWFkLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzZWN1cmUpCit7CisgIGludCBpLCBqOworICB1bnNpZ25lZCBpbnQgbmJpdHMsIG5ieXRlcywgbmxpbWJzLCBucmVhZD0wOworICBtcGlfbGltYl90IGE7CisgIGdjcnlfbXBpX3QgdmFsID0gTVBJX05VTEw7CisKKyAgaWYgKCAqcmV0X25yZWFkIDwgMiApCisgICAgZ290byBsZWF2ZTsKKyAgbmJpdHMgPSBidWZmZXJbMF0gPDwgOCB8IGJ1ZmZlclsxXTsKKyAgaWYgKCBuYml0cyA+IE1BWF9FWFRFUk5fTVBJX0JJVFMgKQorICAgIHsKKy8qICAgICAgIGxvZ19kZWJ1ZyAoIm1waSB0b28gbGFyZ2UgKCV1IGJpdHMpXG4iLCBuYml0cyk7ICovCisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgYnVmZmVyICs9IDI7CisgIG5yZWFkID0gMjsKKworICBuYnl0ZXMgPSAobmJpdHMrNykgLyA4OworICBubGltYnMgPSAobmJ5dGVzK0JZVEVTX1BFUl9NUElfTElNQi0xKSAvIEJZVEVTX1BFUl9NUElfTElNQjsKKyAgdmFsID0gc2VjdXJlPyBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpIDogbXBpX2FsbG9jIChubGltYnMpOworICBpID0gQllURVNfUEVSX01QSV9MSU1CIC0gbmJ5dGVzICUgQllURVNfUEVSX01QSV9MSU1COworICBpICU9IEJZVEVTX1BFUl9NUElfTElNQjsKKyAgaj0gdmFsLT5ubGltYnMgPSBubGltYnM7CisgIHZhbC0+c2lnbiA9IDA7CisgIGZvciAoIDsgaiA+IDA7IGotLSApCisgICAgeworICAgICAgYSA9IDA7CisgICAgICBmb3IgKDsgaSA8IEJZVEVTX1BFUl9NUElfTElNQjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggKytucmVhZCA+ICpyZXRfbnJlYWQgKQorICAgICAgICAgICAgeworLyogICAgICAgICAgICAgICBsb2dfZGVidWcgKCJtcGkgbGFyZ2VyIHRoYW4gYnVmZmVyIik7ICovCisgICAgICAgICAgICAgIG1waV9mcmVlICh2YWwpOworICAgICAgICAgICAgICB2YWwgPSBOVUxMOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgfQorICAgICAgICAgIGEgPDw9IDg7CisgICAgICAgICAgYSB8PSAqYnVmZmVyKys7CisJfQorICAgICAgaSA9IDA7CisgICAgICB2YWwtPmRbai0xXSA9IGE7CisgICAgfQorCisgbGVhdmU6CisgICpyZXRfbnJlYWQgPSBucmVhZDsKKyAgcmV0dXJuIHZhbDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogRmlsbCB0aGUgbXBpIFZBTCBmcm9tIHRoZSBoZXggc3RyaW5nIGluIFNUUi4KKyAqLworc3RhdGljIGludAorbXBpX2Zyb21zdHIgKGdjcnlfbXBpX3QgdmFsLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGludCBzaWduID0gMDsKKyAgaW50IHByZXBlbmRfemVybyA9IDA7CisgIGludCBpLCBqLCBjLCBjMSwgYzI7CisgIHVuc2lnbmVkIGludCBuYml0cywgbmJ5dGVzLCBubGltYnM7CisgIG1waV9saW1iX3QgYTsKKworICBpZiAoICpzdHIgPT0gJy0nICkKKyAgICB7CisgICAgICBzaWduID0gMTsKKyAgICAgIHN0cisrOworICAgIH0KKworICAvKiBTa2lwIG9wdGlvbmFsIGhleCBwcmVmaXguICAqLworICBpZiAoICpzdHIgPT0gJzAnICYmIHN0clsxXSA9PSAneCcgKQorICAgIHN0ciArPSAyOworCisgIG5iaXRzID0gNCAqIHN0cmxlbiAoc3RyKTsKKyAgaWYgKChuYml0cyAlIDgpKQorICAgIHByZXBlbmRfemVybyA9IDE7CisKKyAgbmJ5dGVzID0gKG5iaXRzKzcpIC8gODsKKyAgbmxpbWJzID0gKG5ieXRlcytCWVRFU19QRVJfTVBJX0xJTUItMSkgLyBCWVRFU19QRVJfTVBJX0xJTUI7CisKKyAgaWYgKCB2YWwtPmFsbG9jZWQgPCBubGltYnMgKQorICAgIG1waV9yZXNpemUgKHZhbCwgbmxpbWJzKTsKKworICBpID0gQllURVNfUEVSX01QSV9MSU1CIC0gKG5ieXRlcyAlIEJZVEVTX1BFUl9NUElfTElNQik7CisgIGkgJT0gQllURVNfUEVSX01QSV9MSU1COworICBqID0gdmFsLT5ubGltYnMgPSBubGltYnM7CisgIHZhbC0+c2lnbiA9IHNpZ247CisgIGZvciAoOyBqID4gMDsgai0tKQorICAgIHsKKyAgICAgIGEgPSAwOworICAgICAgZm9yICg7IGkgPCBCWVRFU19QRVJfTVBJX0xJTUI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChwcmVwZW5kX3plcm8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGMxID0gJzAnOworICAgICAgICAgICAgICBwcmVwZW5kX3plcm8gPSAwOworCSAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYzEgPSAqc3RyKys7CisKKyAgICAgICAgICBpZiAoIWMxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtcGlfY2xlYXIgKHZhbCk7CisgICAgICAgICAgICAgIHJldHVybiAxOyAgLyogRXJyb3IuICAqLworCSAgICB9CisgICAgICAgICAgYzIgPSAqc3RyKys7CisgICAgICAgICAgaWYgKCFjMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbXBpX2NsZWFyICh2YWwpOworICAgICAgICAgICAgICByZXR1cm4gMTsgIC8qIEVycm9yLiAgKi8KKwkgICAgfQorICAgICAgICAgIGlmICggYzEgPj0gJzAnICYmIGMxIDw9ICc5JyApCisgICAgICAgICAgICBjID0gYzEgLSAnMCc7CisgICAgICAgICAgZWxzZSBpZiAoIGMxID49ICdhJyAmJiBjMSA8PSAnZicgKQorICAgICAgICAgICAgYyA9IGMxIC0gJ2EnICsgMTA7CisgICAgICAgICAgZWxzZSBpZiAoIGMxID49ICdBJyAmJiBjMSA8PSAnRicgKQorICAgICAgICAgICAgYyA9IGMxIC0gJ0EnICsgMTA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtcGlfY2xlYXIgKHZhbCk7CisgICAgICAgICAgICAgIHJldHVybiAxOyAgLyogRXJyb3IuICAqLworCSAgICB9CisgICAgICAgICAgYyA8PD0gNDsKKyAgICAgICAgICBpZiAoIGMyID49ICcwJyAmJiBjMiA8PSAnOScgKQorICAgICAgICAgICAgYyB8PSBjMiAtICcwJzsKKyAgICAgICAgICBlbHNlIGlmKCBjMiA+PSAnYScgJiYgYzIgPD0gJ2YnICkKKyAgICAgICAgICAgIGMgfD0gYzIgLSAnYScgKyAxMDsKKyAgICAgICAgICBlbHNlIGlmKCBjMiA+PSAnQScgJiYgYzIgPD0gJ0YnICkKKyAgICAgICAgICAgIGMgfD0gYzIgLSAnQScgKyAxMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1waV9jbGVhcih2YWwpOworICAgICAgICAgICAgICByZXR1cm4gMTsgIC8qIEVycm9yLiAqLworCSAgICB9CisgICAgICAgICAgYSA8PD0gODsKKyAgICAgICAgICBhIHw9IGM7CisJfQorICAgICAgaSA9IDA7CisgICAgICB2YWwtPmRbai0xXSA9IGE7CisgICAgfQorCisgIHJldHVybiAwOyAgLyogT2theS4gICovCit9CisKKworLyogUmV0dXJuIGFuIGFsbG9jYXRlZCBidWZmZXIgd2l0aCB0aGUgTVBJIChtc2IgZmlyc3QpLiAgTkJZVEVTCisgICByZWNlaXZlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyLiAgSWYgRklMTF9MRSBpcyBub3QgMCwgdGhlCisgICByZXR1cm5lZCB2YWx1ZSBpcyBzdG9yZWQgYXMgbGl0dGxlIGVuZGlhbiBhbmQgcmlnaHQgcGFkZGVkIHdpdGgKKyAgIHplcm9lcyBzbyB0aGF0IHRoZSByZXR1cm5lZCBidWZmZXIgaGFzIGF0IGxlYXN0IEZJTExfTEUgYnl0ZXMuCisKKyAgIENhbGxlciBtdXN0IGZyZWUgdGhlIHJldHVybiBzdHJpbmcuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4KKyAgIGFsbG9jYXRlZCBidWZmZXIgd2l0aCBOQllURVMgc2V0IHRvIHplcm8gaWYgdGhlIHZhbHVlIG9mIEEgaXMgemVyby4KKyAgIElmIHNpZ24gaXMgbm90IE5VTEwsIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSBzaWduIG9mIHRoZSBBLiAgT24gZXJyb3IKKyAgIE5VTEwgaXMgcmV0dXJuZWQgYW5kIEVSUk5PIHNldCBhcHByb3ByaWF0ZWx5LiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyICoKK2RvX2dldF9idWZmZXIgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGZpbGxfbGUsCisgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm5ieXRlcywgaW50ICpzaWduLCBpbnQgZm9yY2Vfc2VjdXJlKQoreworICB1bnNpZ25lZCBjaGFyICpwLCAqYnVmZmVyOworICB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB0bXA7CisgIG1waV9saW1iX3QgYWxpbWI7CisgIGludCBpOworICBzaXplX3QgbjsKKworICBpZiAoc2lnbikKKyAgICAqc2lnbiA9IGEtPnNpZ247CisKKyAgKm5ieXRlcyA9IGEtPm5saW1icyAqIEJZVEVTX1BFUl9NUElfTElNQjsKKyAgbiA9ICpuYnl0ZXM/ICpuYnl0ZXM6MTsgLyogQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGJ5dGUuICAqLworICBpZiAobiA8IGZpbGxfbGUpCisgICAgbiA9IGZpbGxfbGU7CisgIHAgPSBidWZmZXIgPSAoZm9yY2Vfc2VjdXJlIHx8IG1waV9pc19zZWN1cmUoYSkpPyB4dHJ5bWFsbG9jX3NlY3VyZSAobikKKwkJCQkJCSA6IHh0cnltYWxsb2MgKG4pOworICBpZiAoIWJ1ZmZlcikKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKGk9YS0+bmxpbWJzLTE7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIGFsaW1iID0gYS0+ZFtpXTsKKyNpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gNAorICAgICAgKnArKyA9IGFsaW1iID4+IDI0OworICAgICAgKnArKyA9IGFsaW1iID4+IDE2OworICAgICAgKnArKyA9IGFsaW1iID4+ICA4OworICAgICAgKnArKyA9IGFsaW1iCSAgOworI2VsaWYgQllURVNfUEVSX01QSV9MSU1CID09IDgKKyAgICAgICpwKysgPSBhbGltYiA+PiA1NjsKKyAgICAgICpwKysgPSBhbGltYiA+PiA0ODsKKyAgICAgICpwKysgPSBhbGltYiA+PiA0MDsKKyAgICAgICpwKysgPSBhbGltYiA+PiAzMjsKKyAgICAgICpwKysgPSBhbGltYiA+PiAyNDsKKyAgICAgICpwKysgPSBhbGltYiA+PiAxNjsKKyAgICAgICpwKysgPSBhbGltYiA+PiAgODsKKyAgICAgICpwKysgPSBhbGltYgkgIDsKKyNlbHNlCisjICAgICBlcnJvciBwbGVhc2UgaW1wbGVtZW50IGZvciB0aGlzIGxpbWIgc2l6ZS4KKyNlbmRpZgorICAgIH0KKworICBpZiAoZmlsbF9sZSkKKyAgICB7CisgICAgICBsZW5ndGggPSAqbmJ5dGVzOworICAgICAgLyogUmV2ZXJzZSBidWZmZXIgYW5kIHBhZCB3aXRoIHplcm9lcy4gICovCisgICAgICBmb3IgKGk9MDsgaSA8IGxlbmd0aC8yOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICB0bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgYnVmZmVyW2ldID0gYnVmZmVyW2xlbmd0aC0xLWldOworICAgICAgICAgIGJ1ZmZlcltsZW5ndGgtMS1pXSA9IHRtcDsKKyAgICAgICAgfQorICAgICAgLyogUGFkIHdpdGggemVyb2VzLiAgKi8KKyAgICAgIGZvciAocCA9IGJ1ZmZlciArIGxlbmd0aDsgbGVuZ3RoIDwgZmlsbF9sZTsgbGVuZ3RoKyspCisgICAgICAgICpwKysgPSAwOworICAgICAgKm5ieXRlcyA9IGxlbmd0aDsKKworICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisKKyAgLyogVGhpcyBpcyBzdWItb3B0aW1hbCBidXQgd2UgbmVlZCB0byBkbyB0aGUgc2hpZnQgb3BlcmF0aW9uIGJlY2F1c2UKKyAgICAgdGhlIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgcmV0dXJuZWQgYnVmZmVyLiAgKi8KKyAgZm9yIChwPWJ1ZmZlcjsgKm5ieXRlcyAmJiAhKnA7IHArKywgLS0qbmJ5dGVzKQorICAgIDsKKyAgaWYgKHAgIT0gYnVmZmVyKQorICAgIG1lbW1vdmUgKGJ1ZmZlcixwLCAqbmJ5dGVzKTsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitieXRlICoKK19nY3J5X21waV9nZXRfYnVmZmVyIChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBmaWxsX2xlLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYnl0ZXMsIGludCAqc2lnbikKK3sKKyAgcmV0dXJuIGRvX2dldF9idWZmZXIgKGEsIGZpbGxfbGUsIHJfbmJ5dGVzLCBzaWduLCAwKTsKK30KKworYnl0ZSAqCitfZ2NyeV9tcGlfZ2V0X3NlY3VyZV9idWZmZXIgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGZpbGxfbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYnl0ZXMsIGludCAqc2lnbikKK3sKKyAgcmV0dXJuIGRvX2dldF9idWZmZXIgKGEsIGZpbGxfbGUsIHJfbmJ5dGVzLCBzaWduLCAxKTsKK30KKworCisvKgorICogVXNlIHRoZSBOQllURVMgYXQgQlVGRkVSX0FSRyB0byB1cGRhdGUgQS4gIFNldCB0aGUgc2lnbiBvZiBhIHRvCisgKiBTSUdOLgorICovCit2b2lkCitfZ2NyeV9tcGlfc2V0X2J1ZmZlciAoZ2NyeV9tcGlfdCBhLCBjb25zdCB2b2lkICpidWZmZXJfYXJnLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIGludCBzaWduKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAoY29uc3QgdW5zaWduZWQgY2hhciopYnVmZmVyX2FyZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKyAgbXBpX2xpbWJfdCBhbGltYjsKKyAgaW50IG5saW1iczsKKyAgaW50IGk7CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBubGltYnMgPSAobmJ5dGVzICsgQllURVNfUEVSX01QSV9MSU1CIC0gMSkgLyBCWVRFU19QRVJfTVBJX0xJTUI7CisgIFJFU0laRV9JRl9ORUVERUQoYSwgbmxpbWJzKTsKKyAgYS0+c2lnbiA9IHNpZ247CisKKyAgZm9yIChpPTAsIHAgPSBidWZmZXIrbmJ5dGVzLTE7IHAgPj0gYnVmZmVyK0JZVEVTX1BFUl9NUElfTElNQjsgKQorICAgIHsKKyNpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gNAorICAgICAgYWxpbWIgID0gKnAtLQkgICAgOworICAgICAgYWxpbWIgfD0gKnAtLSA8PCAgOCA7CisgICAgICBhbGltYiB8PSAqcC0tIDw8IDE2IDsKKyAgICAgIGFsaW1iIHw9ICpwLS0gPDwgMjQgOworI2VsaWYgQllURVNfUEVSX01QSV9MSU1CID09IDgKKyAgICAgIGFsaW1iICA9IChtcGlfbGltYl90KSpwLS0JOworICAgICAgYWxpbWIgfD0gKG1waV9saW1iX3QpKnAtLSA8PCAgOCA7CisgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDE2IDsKKyAgICAgIGFsaW1iIHw9IChtcGlfbGltYl90KSpwLS0gPDwgMjQgOworICAgICAgYWxpbWIgfD0gKG1waV9saW1iX3QpKnAtLSA8PCAzMiA7CisgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDQwIDsKKyAgICAgIGFsaW1iIHw9IChtcGlfbGltYl90KSpwLS0gPDwgNDggOworICAgICAgYWxpbWIgfD0gKG1waV9saW1iX3QpKnAtLSA8PCA1NiA7CisjZWxzZQorIyAgICAgICBlcnJvciBwbGVhc2UgaW1wbGVtZW50IGZvciB0aGlzIGxpbWIgc2l6ZS4KKyNlbmRpZgorICAgICAgYS0+ZFtpKytdID0gYWxpbWI7CisgICAgfQorICBpZiAoIHAgPj0gYnVmZmVyICkKKyAgICB7CisjaWYgQllURVNfUEVSX01QSV9MSU1CID09IDQKKyAgICAgIGFsaW1iICA9ICpwLS07CisgICAgICBpZiAocCA+PSBidWZmZXIpCisgICAgICAgIGFsaW1iIHw9ICpwLS0gPDwgIDg7CisgICAgICBpZiAocCA+PSBidWZmZXIpCisgICAgICAgIGFsaW1iIHw9ICpwLS0gPDwgMTY7CisgICAgICBpZiAocCA+PSBidWZmZXIpCisgICAgICAgIGFsaW1iIHw9ICpwLS0gPDwgMjQ7CisjZWxpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gOAorICAgICAgYWxpbWIgID0gKG1waV9saW1iX3QpKnAtLTsKKyAgICAgIGlmIChwID49IGJ1ZmZlcikKKyAgICAgICAgYWxpbWIgfD0gKG1waV9saW1iX3QpKnAtLSA8PCA4OworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDE2OworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDI0OworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDMyOworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDQwOworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDQ4OworICAgICAgaWYgKHAgPj0gYnVmZmVyKQorICAgICAgICBhbGltYiB8PSAobXBpX2xpbWJfdCkqcC0tIDw8IDU2OworI2Vsc2UKKyMgICAgIGVycm9yIHBsZWFzZSBpbXBsZW1lbnQgZm9yIHRoaXMgbGltYiBzaXplLgorI2VuZGlmCisgICAgICBhLT5kW2krK10gPSBhbGltYjsKKyAgICB9CisgIGEtPm5saW1icyA9IGk7CisgIGdjcnlfYXNzZXJ0IChpID09IG5saW1icyk7Cit9CisKKworc3RhdGljIHZvaWQKK29uZWNvbXBsIChnY3J5X21waV90IGEpCit7CisgIG1waV9wdHJfdCBhcDsKKyAgbXBpX3NpemVfdCBuOworICB1bnNpZ25lZCBpbnQgaTsKKyAgdW5zaWduZWQgaW50IG5iaXRzID0gbXBpX2dldF9uYml0cyAoYSk7CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBtcGlfbm9ybWFsaXplIChhKTsKKyAgYXAgPSBhLT5kOworICBuID0gYS0+bmxpbWJzOworCisgIGZvciggaSA9IDA7IGkgPCBuOyBpKysgKQorICAgIGFwW2ldIF49IChtcGlfbGltYl90KSgtMSk7CisKKyAgYS0+c2lnbiA9IDA7CisgIG1waV9jbGVhcl9oaWdoYml0IChhLCBuYml0cy0xKTsKK30KKworCisvKiBQZXJmb3JtIGEgdHdvJ3MgY29tcGxlbWVudCBvcGVyYXRpb24gb24gYnVmZmVyIFAgb2Ygc2l6ZSBOIGJ5dGVzLiAgKi8KK3N0YXRpYyB2b2lkCit0d29jb21wbCAodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgaW50IG4pCit7CisgIGludCBpOworCisgIGZvciAoaT1uLTE7IGkgPj0gMCAmJiAhcFtpXTsgaS0tKQorICAgIDsKKyAgaWYgKGkgPj0gMCkKKyAgICB7CisgICAgICBpZiAoKHBbaV0gJiAweDAxKSkKKyAgICAgICAgcFtpXSA9ICgoKHBbaV0gXiAweGZlKSB8IDB4MDEpICYgMHhmZik7CisgICAgICBlbHNlIGlmICgocFtpXSAmIDB4MDIpKQorICAgICAgICBwW2ldID0gKCgocFtpXSBeIDB4ZmMpIHwgMHgwMikgJiAweGZlKTsKKyAgICAgIGVsc2UgaWYgKChwW2ldICYgMHgwNCkpCisgICAgICAgIHBbaV0gPSAoKChwW2ldIF4gMHhmOCkgfCAweDA0KSAmIDB4ZmMpOworICAgICAgZWxzZSBpZiAoKHBbaV0gJiAweDA4KSkKKyAgICAgICAgcFtpXSA9ICgoKHBbaV0gXiAweGYwKSB8IDB4MDgpICYgMHhmOCk7CisgICAgICBlbHNlIGlmICgocFtpXSAmIDB4MTApKQorICAgICAgICBwW2ldID0gKCgocFtpXSBeIDB4ZTApIHwgMHgxMCkgJiAweGYwKTsKKyAgICAgIGVsc2UgaWYgKChwW2ldICYgMHgyMCkpCisgICAgICAgIHBbaV0gPSAoKChwW2ldIF4gMHhjMCkgfCAweDIwKSAmIDB4ZTApOworICAgICAgZWxzZSBpZiAoKHBbaV0gJiAweDQwKSkKKyAgICAgICAgcFtpXSA9ICgoKHBbaV0gXiAweDgwKSB8IDB4NDApICYgMHhjMCk7CisgICAgICBlbHNlCisgICAgICAgIHBbaV0gPSAweDgwOworCisgICAgICBmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisgICAgICAgIHBbaV0gXj0gMHhmZjsKKyAgICB9Cit9CisKKworLyogQ29udmVydCB0aGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBzdG9yZWQgaW4gQlVGRkVSCisgICB3aXRoIGEgbGVuZ3RoIG9mIEJVRkxFTiBpbnRvIGEgbmV3bHkgY3JlYXRlIE1QSSByZXR1cm5lZCBpbgorICAgUkVUX01QSS4gIElmIE5CWVRFUyBpcyBub3QgTlVMTCwgaXQgd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2YKKyAgIGJ5dGVzIGFjdHVhbGx5IHNjYW5uZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbi4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X21waV9zY2FuIChzdHJ1Y3QgZ2NyeV9tcGkgKipyZXRfbXBpLCBlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyX2FyZywgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpuc2Nhbm5lZCkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcl9hcmc7CisgIHN0cnVjdCBnY3J5X21waSAqYSA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBsZW47CisgIGludCBzZWN1cmUgPSAoYnVmZmVyICYmIF9nY3J5X2lzX3NlY3VyZSAoYnVmZmVyKSk7CisKKyAgaWYgKGZvcm1hdCA9PSBHQ1JZTVBJX0ZNVF9TU0gpCisgICAgbGVuID0gMDsKKyAgZWxzZQorICAgIGxlbiA9IGJ1ZmxlbjsKKworICBpZiAoZm9ybWF0ID09IEdDUllNUElfRk1UX1NURCkKKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzID0gYnVmZmVyOworCisgICAgICBhID0gc2VjdXJlPyBtcGlfYWxsb2Nfc2VjdXJlICgobGVuK0JZVEVTX1BFUl9NUElfTElNQi0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL0JZVEVTX1BFUl9NUElfTElNQikKKyAgICAgICAgICAgICAgICA6IG1waV9hbGxvYyAoKGxlbitCWVRFU19QRVJfTVBJX0xJTUItMSkvQllURVNfUEVSX01QSV9MSU1CKTsKKyAgICAgIGlmIChsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciAoYSwgcywgbGVuLCAwKTsKKyAgICAgICAgICBhLT5zaWduID0gISEoKnMgJiAweDgwKTsKKyAgICAgICAgICBpZiAoYS0+c2lnbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb25lY29tcGwgKGEpOworICAgICAgICAgICAgICBtcGlfYWRkX3VpIChhLCBhLCAxKTsKKyAgICAgICAgICAgICAgYS0+c2lnbiA9IDE7CisJICAgIH0KKwl9CisgICAgICBpZiAocmV0X21waSkKKyAgICAgICAgeworICAgICAgICAgIG1waV9ub3JtYWxpemUgKCBhICk7CisgICAgICAgICAgKnJldF9tcGkgPSBhOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgbXBpX2ZyZWUoYSk7CisgICAgICBpZiAobnNjYW5uZWQpCisgICAgICAgICpuc2Nhbm5lZCA9IGxlbjsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZSBpZiAoZm9ybWF0ID09IEdDUllNUElfRk1UX1VTRykKKyAgICB7CisgICAgICBhID0gc2VjdXJlPyBtcGlfYWxsb2Nfc2VjdXJlICgobGVuK0JZVEVTX1BFUl9NUElfTElNQi0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL0JZVEVTX1BFUl9NUElfTElNQikKKyAgICAgICAgICAgICAgICA6IG1waV9hbGxvYyAoKGxlbitCWVRFU19QRVJfTVBJX0xJTUItMSkvQllURVNfUEVSX01QSV9MSU1CKTsKKworICAgICAgaWYgKGxlbikKKyAgICAgICAgX2djcnlfbXBpX3NldF9idWZmZXIgKGEsIGJ1ZmZlciwgbGVuLCAwKTsKKyAgICAgIGlmIChyZXRfbXBpKQorICAgICAgICB7CisgICAgICAgICAgbXBpX25vcm1hbGl6ZSAoIGEgKTsKKyAgICAgICAgICAqcmV0X21waSA9IGE7CisJfQorICAgICAgZWxzZQorICAgICAgICBtcGlfZnJlZShhKTsKKyAgICAgIGlmIChuc2Nhbm5lZCkKKyAgICAgICAgKm5zY2FubmVkID0gbGVuOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlIGlmIChmb3JtYXQgPT0gR0NSWU1QSV9GTVRfUEdQKQorICAgIHsKKyAgICAgIGEgPSBtcGlfcmVhZF9mcm9tX2J1ZmZlciAoYnVmZmVyLCAmbGVuLCBzZWN1cmUpOworICAgICAgaWYgKG5zY2FubmVkKQorICAgICAgICAqbnNjYW5uZWQgPSBsZW47CisgICAgICBpZiAocmV0X21waSAmJiBhKQorICAgICAgICB7CisgICAgICAgICAgbXBpX25vcm1hbGl6ZSAoYSk7CisgICAgICAgICAgKnJldF9tcGkgPSBhOworCX0KKyAgICAgIGVsc2UgaWYgKGEpCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfZnJlZShhKTsKKyAgICAgICAgICBhID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIGE/IDAgOiBHUEdfRVJSX0lOVl9PQko7CisgICAgfQorICBlbHNlIGlmIChmb3JtYXQgPT0gR0NSWU1QSV9GTVRfU1NIKQorICAgIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMgPSBidWZmZXI7CisgICAgICBzaXplX3QgbjsKKworICAgICAgLyogVGhpcyB0ZXN0IGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYW5kIGFuIGFzc2VydCAoIWxlbikKKyAgICAgICAgIHdvdWxkIGJlIHN1ZmZpY2llbnQuICBXZSBrZWVwIHRoaXMgdGVzdCBpbiBjYXNlIHdlIGxhdGVyCisgICAgICAgICBhbGxvdyB0aGUgQlVGTEVOIGFyZ3VtZW50IHRvIGFjdCBhcyBhIHNhbml0aXkgY2hlY2suICBTYW1lCisgICAgICAgICBiZWxvdy4gKi8KKyAgICAgIGlmIChsZW4gJiYgbGVuIDwgNCkKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfVE9PX1NIT1JUOworCisgICAgICBuID0gKHNbMF0gPDwgMjQgfCBzWzFdIDw8IDE2IHwgc1syXSA8PCA4IHwgc1szXSk7CisgICAgICBzICs9IDQ7CisgICAgICBpZiAobGVuKQorICAgICAgICBsZW4gLT0gNDsKKyAgICAgIGlmIChsZW4gJiYgbiA+IGxlbikKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfVE9PX0xBUkdFOworCisgICAgICBhID0gc2VjdXJlPyBtcGlfYWxsb2Nfc2VjdXJlICgobitCWVRFU19QRVJfTVBJX0xJTUItMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9CWVRFU19QRVJfTVBJX0xJTUIpCisgICAgICAgICAgICAgICAgOiBtcGlfYWxsb2MgKChuK0JZVEVTX1BFUl9NUElfTElNQi0xKS9CWVRFU19QRVJfTVBJX0xJTUIpOworICAgICAgaWYgKG4pCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9tcGlfc2V0X2J1ZmZlciggYSwgcywgbiwgMCApOworICAgICAgICAgIGEtPnNpZ24gPSAhISgqcyAmIDB4ODApOworICAgICAgICAgIGlmIChhLT5zaWduKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBvbmVjb21wbCAoYSk7CisgICAgICAgICAgICAgIG1waV9hZGRfdWkgKGEsIGEsIDEpOworICAgICAgICAgICAgICBhLT5zaWduID0gMTsKKwkgICAgfQorCX0KKyAgICAgIGlmIChuc2Nhbm5lZCkKKyAgICAgICAgKm5zY2FubmVkID0gbis0OworICAgICAgaWYgKHJldF9tcGkpCisgICAgICAgIHsKKyAgICAgICAgICBtcGlfbm9ybWFsaXplICggYSApOworICAgICAgICAgICpyZXRfbXBpID0gYTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBtcGlfZnJlZShhKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZSBpZiAoZm9ybWF0ID09IEdDUllNUElfRk1UX0hFWCkKKyAgICB7CisgICAgICAvKiBXZSBjYW4gb25seSBoYW5kbGUgQyBzdHJpbmdzIGZvciBub3cuICAqLworICAgICAgaWYgKGJ1ZmxlbikKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICAgICAgYSA9IHNlY3VyZT8gbXBpX2FsbG9jX3NlY3VyZSAoMCkgOiBtcGlfYWxsb2MoMCk7CisgICAgICBpZiAobXBpX2Zyb21zdHIgKGEsIChjb25zdCBjaGFyICopYnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgIG1waV9mcmVlIChhKTsKKyAgICAgICAgICByZXR1cm4gR1BHX0VSUl9JTlZfT0JKOworICAgICAgICB9CisgICAgICBpZiAocmV0X21waSkKKyAgICAgICAgeworICAgICAgICAgIG1waV9ub3JtYWxpemUgKCBhICk7CisgICAgICAgICAgKnJldF9tcGkgPSBhOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgbXBpX2ZyZWUoYSk7CisgICAgICBpZiAobnNjYW5uZWQpCisgICAgICAgICpuc2Nhbm5lZCA9IHN0cmxlbiAoKGNvbnN0IGNoYXIqKWJ1ZmZlcik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworfQorCisKKy8qIENvbnZlcnQgdGhlIGJpZyBpbnRlZ2VyIEEgaW50byB0aGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24KKyAgIGRlc2NyaWJlZCBieSBGT1JNQVQgYW5kIHN0b3JlIGl0IGluIHRoZSBwcm92aWRlZCBCVUZGRVIgd2hpY2ggaGFzCisgICBiZWVuIGFsbG9jYXRlZCBieSB0aGUgdXNlciB3aXRoIGEgc2l6ZSBvZiBCVUZMRU4gYnl0ZXMuICBOV1JJVFRFTgorICAgcmVjZWl2ZXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIHVubGVzcyBpdAorICAgaGFzIGJlZW4gcGFzc2VkIGFzIE5VTEwuICBCVUZGRVIgbWF5IGJlIE5VTEwgdG8gcXVlcnkgdGhlIHJlcXVpcmVkCisgICBsZW5ndGguICAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tcGlfcHJpbnQgKGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICBzaXplX3QgKm53cml0dGVuLCBzdHJ1Y3QgZ2NyeV9tcGkgKmEpCit7CisgIHVuc2lnbmVkIGludCBuYml0cyA9IG1waV9nZXRfbmJpdHMgKGEpOworICBzaXplX3QgbGVuOworICBzaXplX3QgZHVtbXlfbndyaXR0ZW47CisgIGludCBuZWdhdGl2ZTsKKworICBpZiAoIW53cml0dGVuKQorICAgIG53cml0dGVuID0gJmR1bW15X253cml0dGVuOworCisgIC8qIExpYmdjcnlwdCBkb2VzIG5vIGFsd2F5cyBjYXJlIHRvIHNldCBjbGVhciB0aGUgc2lnbiBpZiB0aGUgdmFsdWUKKyAgICAgaXMgMC4gIEZvciBwcmludGluZyB0aGlzIGlzIGEgYml0IG9mIGEgc3VycHJpc2UsIGluIHBhcnRpY3VsYXIKKyAgICAgYmVjYXVzZSBpZiBzb21lIG9mIHRoZSBmb3JtYXRzIGRvbid0IHN1cHBvcnQgbmVnYXRpdmUgbnVtYmVycyBidXQKKyAgICAgc2hvdWxkIGJlIGFibGUgdG8gcHJpbnQgYSB6ZXJvLiAgVGh1cyB3ZSBuZWVkIHRoaXMgZXh0cmEgdGVzdAorICAgICBmb3IgYSBuZWdhdGl2ZSBudW1iZXIuICAqLworICBpZiAoYS0+c2lnbiAmJiBfZ2NyeV9tcGlfY21wX3VpIChhLCAwKSkKKyAgICBuZWdhdGl2ZSA9IDE7CisgIGVsc2UKKyAgICBuZWdhdGl2ZSA9IDA7CisKKyAgbGVuID0gYnVmbGVuOworICAqbndyaXR0ZW4gPSAwOworICBpZiAoZm9ybWF0ID09IEdDUllNUElfRk1UX1NURCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICp0bXA7CisgICAgICBpbnQgZXh0cmEgPSAwOworICAgICAgdW5zaWduZWQgaW50IG47CisKKyAgICAgIHRtcCA9IF9nY3J5X21waV9nZXRfYnVmZmVyIChhLCAwLCAmbiwgTlVMTCk7CisgICAgICBpZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworCisgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgIHsKKyAgICAgICAgICB0d29jb21wbCAodG1wLCBuKTsKKyAgICAgICAgICBpZiAoISgqdG1wICYgMHg4MCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIE5lZWQgdG8gZXh0ZW5kIHRoZSBzaWduLiAgKi8KKyAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAgICBleHRyYSA9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG4gJiYgKCp0bXAgJiAweDgwKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFBvc2l0aXZlIGJ1dCB0aGUgaGlnaCBiaXQgb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBzZXQuCisgICAgICAgICAgICAgVGh1cyB3ZSBuZWVkIHRvIHByaW50IGFuIGV4dHJhIGxlYWRpbmcgMHgwMCBzbyB0aGF0IHRoZQorICAgICAgICAgICAgIG91dHB1dCBpcyBpbnRlcnByZXRlZCBhcyBhIHBvc2l0aXZlIG51bWJlci4gICovCisgICAgICAgICAgbisrOworICAgICAgICAgIGV4dHJhID0gMTsKKwl9CisKKyAgICAgIGlmIChidWZmZXIgJiYgbiA+IGxlbikKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBwcm92aWRlZCBidWZmZXIgaXMgdG9vIHNob3J0LiAqLworICAgICAgICAgIHhmcmVlICh0bXApOworICAgICAgICAgIHJldHVybiBHUEdfRVJSX1RPT19TSE9SVDsKKwl9CisgICAgICBpZiAoYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcyA9IGJ1ZmZlcjsKKworICAgICAgICAgIGlmIChleHRyYSA9PSAxKQorICAgICAgICAgICAgKnMrKyA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoZXh0cmEpCisgICAgICAgICAgICAqcysrID0gMHhmZjsKKyAgICAgICAgICBtZW1jcHkgKHMsIHRtcCwgbi0hIWV4dHJhKTsKKwl9CisgICAgICB4ZnJlZSAodG1wKTsKKyAgICAgICpud3JpdHRlbiA9IG47CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UgaWYgKGZvcm1hdCA9PSBHQ1JZTVBJX0ZNVF9VU0cpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IG4gPSAobmJpdHMgKyA3KS84OworCisgICAgICAvKiBOb3RlOiAgV2UgaWdub3JlIHRoZSBzaWduIGZvciB0aGlzIGZvcm1hdC4gICovCisgICAgICAvKiBGSVhNRTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgd2Ugc2hvdWxkIHB1dCB0aGlzIGludG8KKwkgbXBpX2FwcmludCBiZWNhdXNlIHdlIGNhbiB0aGVuIHVzZSB0aGUgYnVmZmVyIGRpcmVjdGx5LiAgKi8KKworICAgICAgaWYgKGJ1ZmZlciAmJiBuID4gbGVuKQorICAgICAgICByZXR1cm4gR1BHX0VSUl9UT09fU0hPUlQ7CisgICAgICBpZiAoYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAqdG1wOworCisgICAgICAgICAgdG1wID0gX2djcnlfbXBpX2dldF9idWZmZXIgKGEsIDAsICZuLCBOVUxMKTsKKyAgICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICBtZW1jcHkgKGJ1ZmZlciwgdG1wLCBuKTsKKyAgICAgICAgICB4ZnJlZSAodG1wKTsKKwl9CisgICAgICAqbndyaXR0ZW4gPSBuOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlIGlmIChmb3JtYXQgPT0gR0NSWU1QSV9GTVRfUEdQKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBuID0gKG5iaXRzICsgNykvODsKKworICAgICAgLyogVGhlIFBHUCBmb3JtYXQgY2FuIG9ubHkgaGFuZGxlIHVuc2lnbmVkIGludGVnZXJzLiAgKi8KKyAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICAgICAgaWYgKGJ1ZmZlciAmJiBuKzIgPiBsZW4pCisgICAgICAgIHJldHVybiBHUEdfRVJSX1RPT19TSE9SVDsKKworICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRtcDsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzID0gYnVmZmVyOworCisgICAgICAgICAgc1swXSA9IG5iaXRzID4+IDg7CisgICAgICAgICAgc1sxXSA9IG5iaXRzOworCisgICAgICAgICAgdG1wID0gX2djcnlfbXBpX2dldF9idWZmZXIgKGEsIDAsICZuLCBOVUxMKTsKKyAgICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICBtZW1jcHkgKHMrMiwgdG1wLCBuKTsKKyAgICAgICAgICB4ZnJlZSAodG1wKTsKKwl9CisgICAgICAqbndyaXR0ZW4gPSBuKzI7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UgaWYgKGZvcm1hdCA9PSBHQ1JZTVBJX0ZNVF9TU0gpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqdG1wOworICAgICAgaW50IGV4dHJhID0gMDsKKyAgICAgIHVuc2lnbmVkIGludCBuOworCisgICAgICB0bXAgPSBfZ2NyeV9tcGlfZ2V0X2J1ZmZlciAoYSwgMCwgJm4sIE5VTEwpOworICAgICAgaWYgKCF0bXApCisgICAgICAgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKworICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICB7CisgICAgICAgICAgdHdvY29tcGwgKHRtcCwgbik7CisgICAgICAgICAgaWYgKCEoKnRtcCAmIDB4ODApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBOZWVkIHRvIGV4dGVuZCB0aGUgc2lnbi4gICovCisgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgICAgZXh0cmEgPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChuICYmICgqdG1wICYgMHg4MCkpCisgICAgICAgIHsKKyAgICAgICAgICBuKys7CisgICAgICAgICAgZXh0cmE9MTsKKwl9CisKKyAgICAgIGlmIChidWZmZXIgJiYgbis0ID4gbGVuKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUodG1wKTsKKyAgICAgICAgICByZXR1cm4gR1BHX0VSUl9UT09fU0hPUlQ7CisJfQorCisgICAgICBpZiAoYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcyA9IGJ1ZmZlcjsKKworICAgICAgICAgICpzKysgPSBuID4+IDI0OworICAgICAgICAgICpzKysgPSBuID4+IDE2OworICAgICAgICAgICpzKysgPSBuID4+IDg7CisgICAgICAgICAgKnMrKyA9IG47CisgICAgICAgICAgaWYgKGV4dHJhID09IDEpCisgICAgICAgICAgICAqcysrID0gMDsKKyAgICAgICAgICBlbHNlIGlmIChleHRyYSkKKyAgICAgICAgICAgICpzKysgPSAweGZmOworICAgICAgICAgIG1lbWNweSAocywgdG1wLCBuLSEhZXh0cmEpOworCX0KKyAgICAgIHhmcmVlICh0bXApOworICAgICAgKm53cml0dGVuID0gNCtuOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlIGlmIChmb3JtYXQgPT0gR0NSWU1QSV9GTVRfSEVYKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRtcDsKKyAgICAgIGludCBpOworICAgICAgaW50IGV4dHJhID0gMDsKKyAgICAgIHVuc2lnbmVkIGludCBuID0gMDsKKworICAgICAgdG1wID0gX2djcnlfbXBpX2dldF9idWZmZXIgKGEsIDAsICZuLCBOVUxMKTsKKyAgICAgIGlmICghdG1wKQorICAgICAgICByZXR1cm4gZ3BnX2Vycl9jb2RlX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICBpZiAoIW4gfHwgKCp0bXAgJiAweDgwKSkKKyAgICAgICAgZXh0cmEgPSAyOworCisgICAgICBpZiAoYnVmZmVyICYmIDIqbiArIGV4dHJhICsgbmVnYXRpdmUgKyAxID4gbGVuKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUodG1wKTsKKyAgICAgICAgICByZXR1cm4gR1BHX0VSUl9UT09fU0hPUlQ7CisJfQorICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnMgPSBidWZmZXI7CisKKyAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAqcysrID0gJy0nOworICAgICAgICAgIGlmIChleHRyYSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKnMrKyA9ICcwJzsKKyAgICAgICAgICAgICAgKnMrKyA9ICcwJzsKKwkgICAgfQorCisgICAgICAgICAgZm9yIChpPTA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjID0gdG1wW2ldOworCisgICAgICAgICAgICAgICpzKysgPSAoYyA+PiA0KSA8IDEwPyAnMCcrKGM+PjQpIDogJ0EnKyhjPj40KS0xMCA7CisgICAgICAgICAgICAgIGMgJj0gMTU7CisgICAgICAgICAgICAgICpzKysgPSBjIDwgMTA/ICcwJytjIDogJ0EnK2MtMTAgOworCSAgICB9CisgICAgICAgICAgKnMrKyA9IDA7CisgICAgICAgICAgKm53cml0dGVuID0gcyAtIGJ1ZmZlcjsKKwl9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAqbndyaXR0ZW4gPSAyKm4gKyBleHRyYSArIG5lZ2F0aXZlICsgMTsKKwl9CisgICAgICB4ZnJlZSAodG1wKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7Cit9CisKKworLyoKKyAqIExpa2UgZ2NyeV9tcGlfcHJpbnQgYnV0IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBidWZmZXIgaXRzZWxmLgorICogVGhlIGNhbGxlciBoYXMgdG8gc3VwcGx5IHRoZSBhZGRyZXNzIG9mIGEgcG9pbnRlci4gIE5XUklUVEVOIG1heSBiZQorICogTlVMTC4KKyAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tcGlfYXByaW50IChlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKm53cml0dGVuLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGdjcnlfbXBpICphKQoreworICBzaXplX3QgbjsKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworCisgICpidWZmZXIgPSBOVUxMOworICByYyA9IF9nY3J5X21waV9wcmludCAoZm9ybWF0LCBOVUxMLCAwLCAmbiwgYSk7CisgIGlmIChyYykKKyAgICByZXR1cm4gcmM7CisKKyAgKmJ1ZmZlciA9IG1waV9pc19zZWN1cmUoYSkgPyB4dHJ5bWFsbG9jX3NlY3VyZSAobj9uOjEpIDogeHRyeW1hbGxvYyAobj9uOjEpOworICBpZiAoISpidWZmZXIpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICAvKiBJZiB0aGUgcmV0dXJuZWQgYnVmZmVyIHdpbGwgaGF2ZSBhIGxlbmd0aCBvZiAwLCB3ZSBuZXZlcnRoZWxlc3MKKyAgICAgYWxsb2NhdGVkIDEgYnl0ZSAobWFsbG9jIG5lZWRzIGl0IGFueXdheSkgYW5kIHN0b3JlIGEgMC4gICovCisgIGlmICghbikKKyAgICAqKmJ1ZmZlciA9IDA7CisgIHJjID0gX2djcnlfbXBpX3ByaW50KCBmb3JtYXQsICpidWZmZXIsIG4sICZuLCBhICk7CisgIGlmIChyYykKKyAgICB7CisgICAgICB4ZnJlZSAoKmJ1ZmZlcik7CisgICAgICAqYnVmZmVyID0gTlVMTDsKKyAgICB9CisgIGVsc2UgaWYgKG53cml0dGVuKQorICAgICpud3JpdHRlbiA9IG47CisgIHJldHVybiByYzsKK30KKworCisvKiBUdXJuIFZBTFVFIGludG8gYW4gb2N0ZXQgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBhbiBhbGxvY2F0ZWQgYnVmZmVyCisgICBhdCBSX0ZSQU1FIG9yIC0gaWYgUl9SQU1FIGlzIE5VTEwgLSBjb3B5IGl0IGludG8gdGhlIGNhbGxlcgorICAgcHJvdmlkZWQgYnVmZmVyIFNQQUNFOyBlaXRoZXIgU1BBQ0Ugb3IgUl9GUkFNRSBtYXkgYmUgdXNlZC4gIElmCisgICBTUEFDRSBpZiBub3QgTlVMTCwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgYSBidWZmZXIgb2YgYXQgbGVhc3QKKyAgIE5CWVRFUy4gIElmIHRoZSByZXN1bHRpbmcgb2N0ZXQgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbiBOQllURVMgcGFkCisgICBpdCB0byB0aGUgbGVmdCB3aXRoIHplcm9lcy4gIElmIFZBTFVFIGRvZXMgbm90IGZpdCBpbnRvIE5CWVRFUworICAgcmV0dXJuIGFuIGVycm9yIGNvZGUuICAqLworZ3BnX2Vycl9jb2RlX3QKK19nY3J5X21waV90b19vY3RldF9zdHJpbmcgKHVuc2lnbmVkIGNoYXIgKipyX2ZyYW1lLCB2b2lkICpzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgdmFsdWUsIHNpemVfdCBuYnl0ZXMpCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICBzaXplX3QgbmZyYW1lLCBub2ZmLCBuOworICB1bnNpZ25lZCBjaGFyICpmcmFtZTsKKworICBpZiAoIXJfZnJhbWUgPT0gIXNwYWNlKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7ICAvKiBPbmx5IG9uZSBtYXkgYmUgdXNlZC4gICovCisKKyAgaWYgKHJfZnJhbWUpCisgICAgKnJfZnJhbWUgPSBOVUxMOworCisgIHJjID0gX2djcnlfbXBpX3ByaW50IChHQ1JZTVBJX0ZNVF9VU0csIE5VTEwsIDAsICZuZnJhbWUsIHZhbHVlKTsKKyAgaWYgKHJjKQorICAgIHJldHVybiByYzsKKyAgaWYgKG5mcmFtZSA+IG5ieXRlcykKKyAgICByZXR1cm4gR1BHX0VSUl9UT09fTEFSR0U7IC8qIFZhbHVlIHRvbyBsb25nIHRvIGZpdCBpbnRvIE5CWVRFUy4gICovCisKKyAgbm9mZiA9IChuZnJhbWUgPCBuYnl0ZXMpPyBuYnl0ZXMgLSBuZnJhbWUgOiAwOworICBuID0gbmZyYW1lICsgbm9mZjsKKyAgaWYgKHNwYWNlKQorICAgIGZyYW1lID0gc3BhY2U7CisgIGVsc2UKKyAgICB7CisgICAgICBmcmFtZSA9IG1waV9pc19zZWN1cmUgKHZhbHVlKT8geHRyeW1hbGxvY19zZWN1cmUgKG4pIDogeHRyeW1hbGxvYyAobik7CisgICAgICBpZiAoIWZyYW1lKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBncGdfZXJyX2NvZGVfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChub2ZmKQorICAgIG1lbXNldCAoZnJhbWUsIDAsIG5vZmYpOworICBuZnJhbWUgKz0gbm9mZjsKKyAgcmMgPSBfZ2NyeV9tcGlfcHJpbnQgKEdDUllNUElfRk1UX1VTRywgZnJhbWUrbm9mZiwgbmZyYW1lLW5vZmYsIE5VTEwsIHZhbHVlKTsKKyAgaWYgKHJjKQorICAgIHsKKyAgICAgIHhmcmVlIChmcmFtZSk7CisgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgIGlmIChyX2ZyYW1lKQorICAgICpyX2ZyYW1lID0gZnJhbWU7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbXBpL21waWgtZGl2LmMgYi9tcGkvbXBpaC1kaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2MxYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waWgtZGl2LmMKQEAgLTAsMCArMSw1MzIgQEAKKy8qIG1waWgtZGl2LmMgIC0gIE1QSSBoZWxwZXIgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYsIDE5OTgsIDIwMDAsCisgKiAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJtcGktaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWZuZGVmIFVNVUxfVElNRQorI2RlZmluZSBVTVVMX1RJTUUgMQorI2VuZGlmCisjaWZuZGVmIFVESVZfVElNRQorI2RlZmluZSBVRElWX1RJTUUgVU1VTF9USU1FCisjZW5kaWYKKworLyogRklYTUU6IFdlIHNob3VsZCBiZSB1c2luZyBpbnZlcnRfbGltYiAob3IgaW52ZXJ0X25vcm1hbGl6ZWRfbGltYikKKyAqIGhlcmUgKG5vdCB1ZGl2X3Fybm5kKS4KKyAqLworCittcGlfbGltYl90CitfZ2NyeV9tcGloX21vZF8xKG1waV9wdHJfdCBkaXZpZGVuZF9wdHIsIG1waV9zaXplX3QgZGl2aWRlbmRfc2l6ZSwKKwkJCQkgICAgICBtcGlfbGltYl90IGRpdmlzb3JfbGltYikKK3sKKyAgICBtcGlfc2l6ZV90IGk7CisgICAgbXBpX2xpbWJfdCBuMSwgbjAsIHI7CisgICAgbXBpX2xpbWJfdCBkdW1teSBHQ0NfQVRUUl9VTlVTRUQ7CisKKyAgICAvKiBCb3RjaDogU2hvdWxkIHRoaXMgYmUgaGFuZGxlZCBhdCBhbGw/ICBSZWx5IG9uIGNhbGxlcnM/CSovCisgICAgaWYoICFkaXZpZGVuZF9zaXplICkKKwlyZXR1cm4gMDsKKworICAgIC8qIElmIG11bHRpcGxpY2F0aW9uIGlzIG11Y2ggZmFzdGVyIHRoYW4gZGl2aXNpb24sIGFuZCB0aGUKKyAgICAgKiBkaXZpZGVuZCBpcyBsYXJnZSwgcHJlLWludmVydCB0aGUgZGl2aXNvciwgYW5kIHVzZQorICAgICAqIG9ubHkgbXVsdGlwbGljYXRpb25zIGluIHRoZSBpbm5lciBsb29wLgorICAgICAqCisgICAgICogVGhpcyB0ZXN0IHNob3VsZCBiZSByZWFkOgorICAgICAqCSBEb2VzIGl0IGV2ZXIgaGVscCB0byB1c2UgdWRpdl9xcm5uZF9wcmVpbnY/CisgICAgICoJICAgJiYgRG9lcyB3aGF0IHdlIHNhdmUgY29tcGVuc2F0ZSBmb3IgdGhlIGludmVyc2lvbiBvdmVyaGVhZD8KKyAgICAgKi8KKyAgICBpZiggVURJVl9USU1FID4gKDIgKiBVTVVMX1RJTUUgKyA2KQorCSYmIChVRElWX1RJTUUgLSAoMiAqIFVNVUxfVElNRSArIDYpKSAqIGRpdmlkZW5kX3NpemUgPiBVRElWX1RJTUUgKSB7CisJaW50IG5vcm1hbGl6YXRpb25fc3RlcHM7CisKKwljb3VudF9sZWFkaW5nX3plcm9zKCBub3JtYWxpemF0aW9uX3N0ZXBzLCBkaXZpc29yX2xpbWIgKTsKKwlpZiggbm9ybWFsaXphdGlvbl9zdGVwcyApIHsKKwkgICAgbXBpX2xpbWJfdCBkaXZpc29yX2xpbWJfaW52ZXJ0ZWQ7CisKKwkgICAgZGl2aXNvcl9saW1iIDw8PSBub3JtYWxpemF0aW9uX3N0ZXBzOworCisJICAgIC8qIENvbXB1dGUgKDIqKjJOIC0gMioqTiAqIERJVklTT1JfTElNQikgLyBESVZJU09SX0xJTUIuICBUaGUKKwkgICAgICogcmVzdWx0IGlzIGEgKE4rMSktYml0IGFwcHJveGltYXRpb24gdG8gMS9ESVZJU09SX0xJTUIsIHdpdGggdGhlCisJICAgICAqIG1vc3Qgc2lnbmlmaWNhbnQgYml0ICh3aXRoIHdlaWdodCAyKipOKSBpbXBsaWNpdC4KKwkgICAgICoKKwkgICAgICogU3BlY2lhbCBjYXNlIGZvciBESVZJU09SX0xJTUIgPT0gMTAwLi4uMDAwLgorCSAgICAgKi8KKwkgICAgaWYoICEoZGl2aXNvcl9saW1iIDw8IDEpICkKKwkJZGl2aXNvcl9saW1iX2ludmVydGVkID0gfihtcGlfbGltYl90KTA7CisJICAgIGVsc2UKKwkJdWRpdl9xcm5uZChkaXZpc29yX2xpbWJfaW52ZXJ0ZWQsIGR1bW15LAorCQkJICAgLWRpdmlzb3JfbGltYiwgMCwgZGl2aXNvcl9saW1iKTsKKworCSAgICBuMSA9IGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMV07CisJICAgIHIgPSBuMSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBub3JtYWxpemF0aW9uX3N0ZXBzKTsKKworCSAgICAvKiBQb3NzaWJsZSBvcHRpbWl6YXRpb246CisJICAgICAqIGlmIChyID09IDAKKwkgICAgICogJiYgZGl2aXNvcl9saW1iID4gKChuMSA8PCBub3JtYWxpemF0aW9uX3N0ZXBzKQorCSAgICAgKgkJICAgICAgIHwgKGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMl0gPj4gLi4uKSkpCisJICAgICAqIC4uLm9uZSBkaXZpc2lvbiBsZXNzLi4uCisJICAgICAqLworCSAgICBmb3IoIGkgPSBkaXZpZGVuZF9zaXplIC0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJbjAgPSBkaXZpZGVuZF9wdHJbaV07CisJCVVESVZfUVJOTkRfUFJFSU5WKGR1bW15LCByLCByLAorCQkJCSAgICgobjEgPDwgbm9ybWFsaXphdGlvbl9zdGVwcykKKwkJCSAgfCAobjAgPj4gKEJJVFNfUEVSX01QSV9MSU1CIC0gbm9ybWFsaXphdGlvbl9zdGVwcykpKSwKKwkJCSAgZGl2aXNvcl9saW1iLCBkaXZpc29yX2xpbWJfaW52ZXJ0ZWQpOworCQluMSA9IG4wOworCSAgICB9CisJICAgIFVESVZfUVJOTkRfUFJFSU5WKGR1bW15LCByLCByLAorCQkJICAgICAgbjEgPDwgbm9ybWFsaXphdGlvbl9zdGVwcywKKwkJCSAgICAgIGRpdmlzb3JfbGltYiwgZGl2aXNvcl9saW1iX2ludmVydGVkKTsKKwkgICAgcmV0dXJuIHIgPj4gbm9ybWFsaXphdGlvbl9zdGVwczsKKwl9CisJZWxzZSB7CisJICAgIG1waV9saW1iX3QgZGl2aXNvcl9saW1iX2ludmVydGVkOworCisJICAgIC8qIENvbXB1dGUgKDIqKjJOIC0gMioqTiAqIERJVklTT1JfTElNQikgLyBESVZJU09SX0xJTUIuICBUaGUKKwkgICAgICogcmVzdWx0IGlzIGEgKE4rMSktYml0IGFwcHJveGltYXRpb24gdG8gMS9ESVZJU09SX0xJTUIsIHdpdGggdGhlCisJICAgICAqIG1vc3Qgc2lnbmlmaWNhbnQgYml0ICh3aXRoIHdlaWdodCAyKipOKSBpbXBsaWNpdC4KKwkgICAgICoKKwkgICAgICogU3BlY2lhbCBjYXNlIGZvciBESVZJU09SX0xJTUIgPT0gMTAwLi4uMDAwLgorCSAgICAgKi8KKwkgICAgaWYoICEoZGl2aXNvcl9saW1iIDw8IDEpICkKKwkJZGl2aXNvcl9saW1iX2ludmVydGVkID0gfihtcGlfbGltYl90KTA7CisJICAgIGVsc2UKKwkJdWRpdl9xcm5uZChkaXZpc29yX2xpbWJfaW52ZXJ0ZWQsIGR1bW15LAorCQkJICAgIC1kaXZpc29yX2xpbWIsIDAsIGRpdmlzb3JfbGltYik7CisKKwkgICAgaSA9IGRpdmlkZW5kX3NpemUgLSAxOworCSAgICByID0gZGl2aWRlbmRfcHRyW2ldOworCisJICAgIGlmKCByID49IGRpdmlzb3JfbGltYiApCisJCXIgPSAwOworCSAgICBlbHNlCisJCWktLTsKKworCSAgICBmb3IoIDsgaSA+PSAwOyBpLS0pIHsKKwkJbjAgPSBkaXZpZGVuZF9wdHJbaV07CisJCVVESVZfUVJOTkRfUFJFSU5WKGR1bW15LCByLCByLAorCQkJCSAgbjAsIGRpdmlzb3JfbGltYiwgZGl2aXNvcl9saW1iX2ludmVydGVkKTsKKwkgICAgfQorCSAgICByZXR1cm4gcjsKKwl9CisgICAgfQorICAgIGVsc2UgeworCWlmKCBVRElWX05FRURTX05PUk1BTElaQVRJT04gKSB7CisJICAgIGludCBub3JtYWxpemF0aW9uX3N0ZXBzOworCisJICAgIGNvdW50X2xlYWRpbmdfemVyb3Mobm9ybWFsaXphdGlvbl9zdGVwcywgZGl2aXNvcl9saW1iKTsKKwkgICAgaWYoIG5vcm1hbGl6YXRpb25fc3RlcHMgKSB7CisJCWRpdmlzb3JfbGltYiA8PD0gbm9ybWFsaXphdGlvbl9zdGVwczsKKworCQluMSA9IGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMV07CisJCXIgPSBuMSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBub3JtYWxpemF0aW9uX3N0ZXBzKTsKKworCQkvKiBQb3NzaWJsZSBvcHRpbWl6YXRpb246CisJCSAqIGlmIChyID09IDAKKwkJICogJiYgZGl2aXNvcl9saW1iID4gKChuMSA8PCBub3JtYWxpemF0aW9uX3N0ZXBzKQorCQkgKgkJICAgfCAoZGl2aWRlbmRfcHRyW2RpdmlkZW5kX3NpemUgLSAyXSA+PiAuLi4pKSkKKwkJICogLi4ub25lIGRpdmlzaW9uIGxlc3MuLi4KKwkJICovCisJCWZvcihpID0gZGl2aWRlbmRfc2l6ZSAtIDI7IGkgPj0gMDsgaS0tKSB7CisJCSAgICBuMCA9IGRpdmlkZW5kX3B0cltpXTsKKwkJICAgIHVkaXZfcXJubmQgKGR1bW15LCByLCByLAorCQkJCSgobjEgPDwgbm9ybWFsaXphdGlvbl9zdGVwcykKKwkJCSB8IChuMCA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBub3JtYWxpemF0aW9uX3N0ZXBzKSkpLAorCQkJIGRpdmlzb3JfbGltYik7CisJCSAgICBuMSA9IG4wOworCQl9CisJCXVkaXZfcXJubmQgKGR1bW15LCByLCByLAorCQkJICAgIG4xIDw8IG5vcm1hbGl6YXRpb25fc3RlcHMsCisJCQkgICAgZGl2aXNvcl9saW1iKTsKKwkJcmV0dXJuIHIgPj4gbm9ybWFsaXphdGlvbl9zdGVwczsKKwkgICAgfQorCX0KKwkvKiBObyBub3JtYWxpemF0aW9uIG5lZWRlZCwgZWl0aGVyIGJlY2F1c2UgdWRpdl9xcm5uZCBkb2Vzbid0IHJlcXVpcmUKKwkgKiBpdCwgb3IgYmVjYXVzZSBESVZJU09SX0xJTUIgaXMgYWxyZWFkeSBub3JtYWxpemVkLiAgKi8KKwlpID0gZGl2aWRlbmRfc2l6ZSAtIDE7CisJciA9IGRpdmlkZW5kX3B0cltpXTsKKworCWlmKHIgPj0gZGl2aXNvcl9saW1iKQorCSAgICByID0gMDsKKwllbHNlCisJICAgIGktLTsKKworCWZvcig7IGkgPj0gMDsgaS0tKSB7CisJICAgIG4wID0gZGl2aWRlbmRfcHRyW2ldOworCSAgICB1ZGl2X3Fybm5kIChkdW1teSwgciwgciwgbjAsIGRpdmlzb3JfbGltYik7CisJfQorCXJldHVybiByOworICAgIH0KK30KKworLyogRGl2aWRlIG51bSAoTlAvTlNJWkUpIGJ5IGRlbiAoRFAvRFNJWkUpIGFuZCB3cml0ZQorICogdGhlIE5TSVpFLURTSVpFIGxlYXN0IHNpZ25pZmljYW50IHF1b3RpZW50IGxpbWJzIGF0IFFQCisgKiBhbmQgdGhlIERTSVpFIGxvbmcgcmVtYWluZGVyIGF0IE5QLglJZiBRRVhUUkFfTElNQlMgaXMKKyAqIG5vbi16ZXJvLCBnZW5lcmF0ZSB0aGF0IG1hbnkgZnJhY3Rpb24gYml0cyBhbmQgYXBwZW5kIHRoZW0gYWZ0ZXIgdGhlCisgKiBvdGhlciBxdW90aWVudCBsaW1icy4KKyAqIFJldHVybiB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHRoZSBxdW90aWVudCwgdGhpcyBpcyBhbHdheXMgMCBvciAxLgorICoKKyAqIFByZWNvbmRpdGlvbnM6CisgKiAwLiBOU0laRSA+PSBEU0laRS4KKyAqIDEuIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgZGl2aXNvciBtdXN0IGJlIHNldC4KKyAqIDIuIFFQIG11c3QgZWl0aGVyIG5vdCBvdmVybGFwIHdpdGggdGhlIGlucHV0IG9wZXJhbmRzIGF0IGFsbCwgb3IKKyAqICAgIFFQICsgRFNJWkUgPj0gTlAgbXVzdCBob2xkIHRydWUuCShUaGlzIG1lYW5zIHRoYXQgaXQncworICogICAgcG9zc2libGUgdG8gcHV0IHRoZSBxdW90aWVudCBpbiB0aGUgaGlnaCBwYXJ0IG9mIE5VTSwgcmlnaHQgYWZ0ZXIgdGhlCisgKiAgICByZW1haW5kZXIgaW4gTlVNLgorICogMy4gTlNJWkUgPj0gRFNJWkUsIGV2ZW4gaWYgUUVYVFJBX0xJTUJTIGlzIG5vbi16ZXJvLgorICovCisKK21waV9saW1iX3QKK19nY3J5X21waWhfZGl2cmVtKCBtcGlfcHRyX3QgcXAsIG1waV9zaXplX3QgcWV4dHJhX2xpbWJzLAorICAgICAgICAgICAgICAgICAgICAgIG1waV9wdHJfdCBucCwgbXBpX3NpemVfdCBuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBtcGlfcHRyX3QgZHAsIG1waV9zaXplX3QgZHNpemUpCit7CisgICAgbXBpX2xpbWJfdCBtb3N0X3NpZ25pZmljYW50X3FfbGltYiA9IDA7CisKKyAgICBzd2l0Y2goZHNpemUpIHsKKyAgICAgIGNhc2UgMDoKKwlfZ2NyeV9kaXZpZGVfYnlfemVybygpOworCWJyZWFrOworCisgICAgICBjYXNlIDE6CisJeworCSAgICBtcGlfc2l6ZV90IGk7CisJICAgIG1waV9saW1iX3QgbjE7CisJICAgIG1waV9saW1iX3QgZDsKKworCSAgICBkID0gZHBbMF07CisJICAgIG4xID0gbnBbbnNpemUgLSAxXTsKKworCSAgICBpZiggbjEgPj0gZCApIHsKKwkJbjEgLT0gZDsKKwkJbW9zdF9zaWduaWZpY2FudF9xX2xpbWIgPSAxOworCSAgICB9CisKKwkgICAgcXAgKz0gcWV4dHJhX2xpbWJzOworCSAgICBmb3IoIGkgPSBuc2l6ZSAtIDI7IGkgPj0gMDsgaS0tKQorCQl1ZGl2X3Fybm5kKCBxcFtpXSwgbjEsIG4xLCBucFtpXSwgZCApOworCSAgICBxcCAtPSBxZXh0cmFfbGltYnM7CisKKwkgICAgZm9yKCBpID0gcWV4dHJhX2xpbWJzIC0gMTsgaSA+PSAwOyBpLS0gKQorCQl1ZGl2X3Fybm5kIChxcFtpXSwgbjEsIG4xLCAwLCBkKTsKKworCSAgICBucFswXSA9IG4xOworCX0KKwlicmVhazsKKworICAgICAgY2FzZSAyOgorCXsKKwkgICAgbXBpX3NpemVfdCBpOworCSAgICBtcGlfbGltYl90IG4xLCBuMCwgbjI7CisJICAgIG1waV9saW1iX3QgZDEsIGQwOworCisJICAgIG5wICs9IG5zaXplIC0gMjsKKwkgICAgZDEgPSBkcFsxXTsKKwkgICAgZDAgPSBkcFswXTsKKwkgICAgbjEgPSBucFsxXTsKKwkgICAgbjAgPSBucFswXTsKKworCSAgICBpZiggbjEgPj0gZDEgJiYgKG4xID4gZDEgfHwgbjAgPj0gZDApICkgeworCQlzdWJfZGRtbXNzIChuMSwgbjAsIG4xLCBuMCwgZDEsIGQwKTsKKwkJbW9zdF9zaWduaWZpY2FudF9xX2xpbWIgPSAxOworCSAgICB9CisKKwkgICAgZm9yKCBpID0gcWV4dHJhX2xpbWJzICsgbnNpemUgLSAyIC0gMTsgaSA+PSAwOyBpLS0gKSB7CisJCW1waV9saW1iX3QgcTsKKwkJbXBpX2xpbWJfdCByOworCisJCWlmKCBpID49IHFleHRyYV9saW1icyApCisJCSAgICBucC0tOworCQllbHNlCisJCSAgICBucFswXSA9IDA7CisKKwkJaWYoIG4xID09IGQxICkgeworCQkgICAgLyogUSBzaG91bGQgYmUgZWl0aGVyIDExMS4uMTExIG9yIDExMS4uMTEwLiAgTmVlZCBzcGVjaWFsCisJCSAgICAgKiB0cmVhdG1lbnQgb2YgdGhpcyByYXJlIGNhc2UgYXMgbm9ybWFsIGRpdmlzaW9uIHdvdWxkCisJCSAgICAgKiBnaXZlIG92ZXJmbG93LiAgKi8KKwkJICAgIHEgPSB+KG1waV9saW1iX3QpMDsKKworCQkgICAgciA9IG4wICsgZDE7CisJCSAgICBpZiggciA8IGQxICkgeyAgIC8qIENhcnJ5IGluIHRoZSBhZGRpdGlvbj8gKi8KKwkJCWFkZF9zc2FhYWEoIG4xLCBuMCwgciAtIGQwLCBucFswXSwgMCwgZDAgKTsKKwkJCXFwW2ldID0gcTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgbjEgPSBkMCAtIChkMCAhPSAwPzE6MCk7CisJCSAgICBuMCA9IC1kMDsKKwkJfQorCQllbHNlIHsKKwkJICAgIHVkaXZfcXJubmQgKHEsIHIsIG4xLCBuMCwgZDEpOworCQkgICAgdW11bF9wcG1tIChuMSwgbjAsIGQwLCBxKTsKKwkJfQorCisJCW4yID0gbnBbMF07CisJICAgICAgcV90ZXN0OgorCQlpZiggbjEgPiByIHx8IChuMSA9PSByICYmIG4wID4gbjIpICkgeworCQkgICAgLyogVGhlIGVzdGltYXRlZCBRIHdhcyB0b28gbGFyZ2UuICAqLworCQkgICAgcS0tOworCQkgICAgc3ViX2RkbW1zcyAobjEsIG4wLCBuMSwgbjAsIDAsIGQwKTsKKwkJICAgIHIgKz0gZDE7CisJCSAgICBpZiggciA+PSBkMSApICAgIC8qIElmIG5vdCBjYXJyeSwgdGVzdCBRIGFnYWluLiAgKi8KKwkJCWdvdG8gcV90ZXN0OworCQl9CisKKwkJcXBbaV0gPSBxOworCQlzdWJfZGRtbXNzIChuMSwgbjAsIHIsIG4yLCBuMSwgbjApOworCSAgICB9CisJICAgIG5wWzFdID0gbjE7CisJICAgIG5wWzBdID0gbjA7CisJfQorCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCXsKKwkgICAgbXBpX3NpemVfdCBpOworCSAgICBtcGlfbGltYl90IGRYLCBkMSwgbjA7CisKKwkgICAgbnAgKz0gbnNpemUgLSBkc2l6ZTsKKwkgICAgZFggPSBkcFtkc2l6ZSAtIDFdOworCSAgICBkMSA9IGRwW2RzaXplIC0gMl07CisJICAgIG4wID0gbnBbZHNpemUgLSAxXTsKKworCSAgICBpZiggbjAgPj0gZFggKSB7CisJCWlmKG4wID4gZFggfHwgX2djcnlfbXBpaF9jbXAobnAsIGRwLCBkc2l6ZSAtIDEpID49IDAgKSB7CisJCSAgICBfZ2NyeV9tcGloX3N1Yl9uKG5wLCBucCwgZHAsIGRzaXplKTsKKwkJICAgIG4wID0gbnBbZHNpemUgLSAxXTsKKwkJICAgIG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iID0gMTsKKwkJfQorCSAgICB9CisKKwkgICAgZm9yKCBpID0gcWV4dHJhX2xpbWJzICsgbnNpemUgLSBkc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCW1waV9saW1iX3QgcTsKKwkJbXBpX2xpbWJfdCBuMSwgbjI7CisJCW1waV9saW1iX3QgY3lfbGltYjsKKworCQlpZiggaSA+PSBxZXh0cmFfbGltYnMgKSB7CisJCSAgICBucC0tOworCQkgICAgbjIgPSBucFtkc2l6ZV07CisJCX0KKwkJZWxzZSB7CisJCSAgICBuMiA9IG5wW2RzaXplIC0gMV07CisJCSAgICBNUE5fQ09QWV9ERUNSIChucCArIDEsIG5wLCBkc2l6ZSAtIDEpOworCQkgICAgbnBbMF0gPSAwOworCQl9CisKKwkJaWYoIG4wID09IGRYICkgeworCQkgICAgLyogVGhpcyBtaWdodCBvdmVyLWVzdGltYXRlIHEsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aAorCQkgICAgICogdGhlIGV4dHJhIGNvZGUgaGVyZSB0byBmaW5kIG91dC4gICovCisJCSAgICBxID0gfihtcGlfbGltYl90KTA7CisJCX0KKwkJZWxzZSB7CisJCSAgICBtcGlfbGltYl90IHI7CisKKwkJICAgIHVkaXZfcXJubmQocSwgciwgbjAsIG5wW2RzaXplIC0gMV0sIGRYKTsKKwkJICAgIHVtdWxfcHBtbShuMSwgbjAsIGQxLCBxKTsKKworCQkgICAgd2hpbGUoIG4xID4gciB8fCAobjEgPT0gciAmJiBuMCA+IG5wW2RzaXplIC0gMl0pKSB7CisJCQlxLS07CisJCQlyICs9IGRYOworCQkJaWYoIHIgPCBkWCApIC8qIEkuZS4gImNhcnJ5IGluIHByZXZpb3VzIGFkZGl0aW9uPyIgKi8KKwkJCSAgICBicmVhazsKKwkJCW4xIC09IG4wIDwgZDE7CisJCQluMCAtPSBkMTsKKwkJICAgIH0KKwkJfQorCisJCS8qIFBvc3NpYmxlIG9wdGltaXphdGlvbjogV2UgYWxyZWFkeSBoYXZlIChxICogbjApIGFuZCAoMSAqIG4xKQorCQkgKiBhZnRlciB0aGUgY2FsY3VsYXRpb24gb2YgcS4JVGFraW5nIGFkdmFudGFnZSBvZiB0aGF0LCB3ZQorCQkgKiBjb3VsZCBtYWtlIHRoaXMgbG9vcCBtYWtlIHR3byBpdGVyYXRpb25zIGxlc3MuICAqLworCQljeV9saW1iID0gX2djcnlfbXBpaF9zdWJtdWxfMShucCwgZHAsIGRzaXplLCBxKTsKKworCQlpZiggbjIgIT0gY3lfbGltYiApIHsKKwkJICAgIF9nY3J5X21waWhfYWRkX24obnAsIG5wLCBkcCwgZHNpemUpOworCQkgICAgcS0tOworCQl9CisKKwkJcXBbaV0gPSBxOworCQluMCA9IG5wW2RzaXplIC0gMV07CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBEaXZpZGUgKERJVklERU5EX1BUUiwsRElWSURFTkRfU0laRSkgYnkgRElWSVNPUl9MSU1CLgorICogV3JpdGUgRElWSURFTkRfU0laRSBsaW1icyBvZiBxdW90aWVudCBhdCBRVU9UX1BUUi4KKyAqIFJldHVybiB0aGUgc2luZ2xlLWxpbWIgcmVtYWluZGVyLgorICogVGhlcmUgYXJlIG5vIGNvbnN0cmFpbnRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgZGl2aXNvci4KKyAqCisgKiBRVU9UX1BUUiBhbmQgRElWSURFTkRfUFRSIG1pZ2h0IHBvaW50IHRvIHRoZSBzYW1lIGxpbWIuCisgKi8KKworbXBpX2xpbWJfdAorX2djcnlfbXBpaF9kaXZtb2RfMSggbXBpX3B0cl90IHF1b3RfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3B0cl90IGRpdmlkZW5kX3B0ciwgbXBpX3NpemVfdCBkaXZpZGVuZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2xpbWJfdCBkaXZpc29yX2xpbWIpCit7CisgICAgbXBpX3NpemVfdCBpOworICAgIG1waV9saW1iX3QgbjEsIG4wLCByOworICAgIG1waV9saW1iX3QgZHVtbXkgR0NDX0FUVFJfVU5VU0VEOworCisgICAgaWYoICFkaXZpZGVuZF9zaXplICkKKwlyZXR1cm4gMDsKKworICAgIC8qIElmIG11bHRpcGxpY2F0aW9uIGlzIG11Y2ggZmFzdGVyIHRoYW4gZGl2aXNpb24sIGFuZCB0aGUKKyAgICAgKiBkaXZpZGVuZCBpcyBsYXJnZSwgcHJlLWludmVydCB0aGUgZGl2aXNvciwgYW5kIHVzZQorICAgICAqIG9ubHkgbXVsdGlwbGljYXRpb25zIGluIHRoZSBpbm5lciBsb29wLgorICAgICAqCisgICAgICogVGhpcyB0ZXN0IHNob3VsZCBiZSByZWFkOgorICAgICAqIERvZXMgaXQgZXZlciBoZWxwIHRvIHVzZSB1ZGl2X3Fybm5kX3ByZWludj8KKyAgICAgKiAmJiBEb2VzIHdoYXQgd2Ugc2F2ZSBjb21wZW5zYXRlIGZvciB0aGUgaW52ZXJzaW9uIG92ZXJoZWFkPworICAgICAqLworICAgIGlmKCBVRElWX1RJTUUgPiAoMiAqIFVNVUxfVElNRSArIDYpCisJJiYgKFVESVZfVElNRSAtICgyICogVU1VTF9USU1FICsgNikpICogZGl2aWRlbmRfc2l6ZSA+IFVESVZfVElNRSApIHsKKwlpbnQgbm9ybWFsaXphdGlvbl9zdGVwczsKKworCWNvdW50X2xlYWRpbmdfemVyb3MoIG5vcm1hbGl6YXRpb25fc3RlcHMsIGRpdmlzb3JfbGltYiApOworCWlmKCBub3JtYWxpemF0aW9uX3N0ZXBzICkgeworCSAgICBtcGlfbGltYl90IGRpdmlzb3JfbGltYl9pbnZlcnRlZDsKKworCSAgICBkaXZpc29yX2xpbWIgPDw9IG5vcm1hbGl6YXRpb25fc3RlcHM7CisKKwkgICAgLyogQ29tcHV0ZSAoMioqMk4gLSAyKipOICogRElWSVNPUl9MSU1CKSAvIERJVklTT1JfTElNQi4gIFRoZQorCSAgICAgKiByZXN1bHQgaXMgYSAoTisxKS1iaXQgYXBwcm94aW1hdGlvbiB0byAxL0RJVklTT1JfTElNQiwgd2l0aCB0aGUKKwkgICAgICogbW9zdCBzaWduaWZpY2FudCBiaXQgKHdpdGggd2VpZ2h0IDIqKk4pIGltcGxpY2l0LgorCSAgICAgKi8KKwkgICAgLyogU3BlY2lhbCBjYXNlIGZvciBESVZJU09SX0xJTUIgPT0gMTAwLi4uMDAwLiAgKi8KKwkgICAgaWYoICEoZGl2aXNvcl9saW1iIDw8IDEpICkKKwkJZGl2aXNvcl9saW1iX2ludmVydGVkID0gfihtcGlfbGltYl90KTA7CisJICAgIGVsc2UKKwkJdWRpdl9xcm5uZChkaXZpc29yX2xpbWJfaW52ZXJ0ZWQsIGR1bW15LAorCQkJICAgLWRpdmlzb3JfbGltYiwgMCwgZGl2aXNvcl9saW1iKTsKKworCSAgICBuMSA9IGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMV07CisJICAgIHIgPSBuMSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBub3JtYWxpemF0aW9uX3N0ZXBzKTsKKworCSAgICAvKiBQb3NzaWJsZSBvcHRpbWl6YXRpb246CisJICAgICAqIGlmIChyID09IDAKKwkgICAgICogJiYgZGl2aXNvcl9saW1iID4gKChuMSA8PCBub3JtYWxpemF0aW9uX3N0ZXBzKQorCSAgICAgKgkJICAgICAgIHwgKGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMl0gPj4gLi4uKSkpCisJICAgICAqIC4uLm9uZSBkaXZpc2lvbiBsZXNzLi4uCisJICAgICAqLworCSAgICBmb3IoIGkgPSBkaXZpZGVuZF9zaXplIC0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJbjAgPSBkaXZpZGVuZF9wdHJbaV07CisJCVVESVZfUVJOTkRfUFJFSU5WKCBxdW90X3B0cltpICsgMV0sIHIsIHIsCisJCQkJICAgKChuMSA8PCBub3JtYWxpemF0aW9uX3N0ZXBzKQorCQkJIHwgKG4wID4+IChCSVRTX1BFUl9NUElfTElNQiAtIG5vcm1hbGl6YXRpb25fc3RlcHMpKSksCisJCQkgICAgICBkaXZpc29yX2xpbWIsIGRpdmlzb3JfbGltYl9pbnZlcnRlZCk7CisJCW4xID0gbjA7CisJICAgIH0KKwkgICAgVURJVl9RUk5ORF9QUkVJTlYoIHF1b3RfcHRyWzBdLCByLCByLAorCQkJICAgICAgIG4xIDw8IG5vcm1hbGl6YXRpb25fc3RlcHMsCisJCQkgICAgICAgZGl2aXNvcl9saW1iLCBkaXZpc29yX2xpbWJfaW52ZXJ0ZWQpOworCSAgICByZXR1cm4gciA+PiBub3JtYWxpemF0aW9uX3N0ZXBzOworCX0KKwllbHNlIHsKKwkgICAgbXBpX2xpbWJfdCBkaXZpc29yX2xpbWJfaW52ZXJ0ZWQ7CisKKwkgICAgLyogQ29tcHV0ZSAoMioqMk4gLSAyKipOICogRElWSVNPUl9MSU1CKSAvIERJVklTT1JfTElNQi4gIFRoZQorCSAgICAgKiByZXN1bHQgaXMgYSAoTisxKS1iaXQgYXBwcm94aW1hdGlvbiB0byAxL0RJVklTT1JfTElNQiwgd2l0aCB0aGUKKwkgICAgICogbW9zdCBzaWduaWZpY2FudCBiaXQgKHdpdGggd2VpZ2h0IDIqKk4pIGltcGxpY2l0LgorCSAgICAgKi8KKwkgICAgLyogU3BlY2lhbCBjYXNlIGZvciBESVZJU09SX0xJTUIgPT0gMTAwLi4uMDAwLiAgKi8KKwkgICAgaWYoICEoZGl2aXNvcl9saW1iIDw8IDEpICkKKwkJZGl2aXNvcl9saW1iX2ludmVydGVkID0gfihtcGlfbGltYl90KSAwOworCSAgICBlbHNlCisJCXVkaXZfcXJubmQoZGl2aXNvcl9saW1iX2ludmVydGVkLCBkdW1teSwKKwkJCSAgIC1kaXZpc29yX2xpbWIsIDAsIGRpdmlzb3JfbGltYik7CisKKwkgICAgaSA9IGRpdmlkZW5kX3NpemUgLSAxOworCSAgICByID0gZGl2aWRlbmRfcHRyW2ldOworCisJICAgIGlmKCByID49IGRpdmlzb3JfbGltYiApCisJCXIgPSAwOworCSAgICBlbHNlCisJCXF1b3RfcHRyW2ktLV0gPSAwOworCisJICAgIGZvciggOyBpID49IDA7IGktLSApIHsKKwkJbjAgPSBkaXZpZGVuZF9wdHJbaV07CisJCVVESVZfUVJOTkRfUFJFSU5WKCBxdW90X3B0cltpXSwgciwgciwKKwkJCQkgICBuMCwgZGl2aXNvcl9saW1iLCBkaXZpc29yX2xpbWJfaW52ZXJ0ZWQpOworCSAgICB9CisJICAgIHJldHVybiByOworCX0KKyAgICB9CisgICAgZWxzZSB7CisJaWYoVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OKSB7CisJICAgIGludCBub3JtYWxpemF0aW9uX3N0ZXBzOworCisJICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5vcm1hbGl6YXRpb25fc3RlcHMsIGRpdmlzb3JfbGltYik7CisJICAgIGlmKCBub3JtYWxpemF0aW9uX3N0ZXBzICkgeworCQlkaXZpc29yX2xpbWIgPDw9IG5vcm1hbGl6YXRpb25fc3RlcHM7CisKKwkJbjEgPSBkaXZpZGVuZF9wdHJbZGl2aWRlbmRfc2l6ZSAtIDFdOworCQlyID0gbjEgPj4gKEJJVFNfUEVSX01QSV9MSU1CIC0gbm9ybWFsaXphdGlvbl9zdGVwcyk7CisKKwkJLyogUG9zc2libGUgb3B0aW1pemF0aW9uOgorCQkgKiBpZiAociA9PSAwCisJCSAqICYmIGRpdmlzb3JfbGltYiA+ICgobjEgPDwgbm9ybWFsaXphdGlvbl9zdGVwcykKKwkJICoJCSAgIHwgKGRpdmlkZW5kX3B0cltkaXZpZGVuZF9zaXplIC0gMl0gPj4gLi4uKSkpCisJCSAqIC4uLm9uZSBkaXZpc2lvbiBsZXNzLi4uCisJCSAqLworCQlmb3IoIGkgPSBkaXZpZGVuZF9zaXplIC0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJICAgIG4wID0gZGl2aWRlbmRfcHRyW2ldOworCQkgICAgdWRpdl9xcm5uZCAocXVvdF9wdHJbaSArIDFdLCByLCByLAorCQkJICAgICAoKG4xIDw8IG5vcm1hbGl6YXRpb25fc3RlcHMpCisJCQkgfCAobjAgPj4gKEJJVFNfUEVSX01QSV9MSU1CIC0gbm9ybWFsaXphdGlvbl9zdGVwcykpKSwKKwkJCQlkaXZpc29yX2xpbWIpOworCQkgICAgbjEgPSBuMDsKKwkJfQorCQl1ZGl2X3Fybm5kIChxdW90X3B0clswXSwgciwgciwKKwkJCSAgICBuMSA8PCBub3JtYWxpemF0aW9uX3N0ZXBzLAorCQkJICAgIGRpdmlzb3JfbGltYik7CisJCXJldHVybiByID4+IG5vcm1hbGl6YXRpb25fc3RlcHM7CisJICAgIH0KKwl9CisJLyogTm8gbm9ybWFsaXphdGlvbiBuZWVkZWQsIGVpdGhlciBiZWNhdXNlIHVkaXZfcXJubmQgZG9lc24ndCByZXF1aXJlCisJICogaXQsIG9yIGJlY2F1c2UgRElWSVNPUl9MSU1CIGlzIGFscmVhZHkgbm9ybWFsaXplZC4gICovCisJaSA9IGRpdmlkZW5kX3NpemUgLSAxOworCXIgPSBkaXZpZGVuZF9wdHJbaV07CisKKwlpZihyID49IGRpdmlzb3JfbGltYikKKwkgICAgciA9IDA7CisJZWxzZQorCSAgICBxdW90X3B0cltpLS1dID0gMDsKKworCWZvcig7IGkgPj0gMDsgaS0tKSB7CisJICAgIG4wID0gZGl2aWRlbmRfcHRyW2ldOworCSAgICB1ZGl2X3Fybm5kKCBxdW90X3B0cltpXSwgciwgciwgbjAsIGRpdmlzb3JfbGltYiApOworCX0KKwlyZXR1cm4gcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpaC1tdWwuYyBiL21waS9tcGloLW11bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmYwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvbXBpaC1tdWwuYwpAQCAtMCwwICsxLDUyOSBAQAorLyogbXBpaC1tdWwuYyAgLSAgTVBJIGhlbHBlciBmdW5jdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwKKyAqICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisKKyNkZWZpbmUgTVBOX01VTF9OX1JFQ1VSU0UocHJvZHAsIHVwLCB2cCwgc2l6ZSwgdHNwYWNlKSBcCisgICAgZG8gewkJCQkJCVwKKwlpZiggKHNpemUpIDwgS0FSQVRTVUJBX1RIUkVTSE9MRCApCQlcCisJICAgIG11bF9uX2Jhc2VjYXNlIChwcm9kcCwgdXAsIHZwLCBzaXplKTsJXAorCWVsc2UJCQkJCQlcCisJICAgIG11bF9uIChwcm9kcCwgdXAsIHZwLCBzaXplLCB0c3BhY2UpOwlcCisgICAgfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgTVBOX1NRUl9OX1JFQ1VSU0UocHJvZHAsIHVwLCBzaXplLCB0c3BhY2UpIFwKKyAgICBkbyB7CQkJCQkgICAgXAorCWlmICgoc2l6ZSkgPCBLQVJBVFNVQkFfVEhSRVNIT0xEKQkgICAgXAorCSAgICBfZ2NyeV9tcGloX3Nxcl9uX2Jhc2VjYXNlIChwcm9kcCwgdXAsIHNpemUpOwkgXAorCWVsc2UJCQkJCSAgICBcCisJICAgIF9nY3J5X21waWhfc3FyX24gKHByb2RwLCB1cCwgc2l6ZSwgdHNwYWNlKTsJIFwKKyAgICB9IHdoaWxlICgwKTsKKworCisKKworLyogTXVsdGlwbHkgdGhlIG5hdHVyYWwgbnVtYmVycyB1IChwb2ludGVkIHRvIGJ5IFVQKSBhbmQgdiAocG9pbnRlZCB0byBieSBWUCksCisgKiBib3RoIHdpdGggU0laRSBsaW1icywgYW5kIHN0b3JlIHRoZSByZXN1bHQgYXQgUFJPRFAuICAyICogU0laRSBsaW1icyBhcmUKKyAqIGFsd2F5cyBzdG9yZWQuICBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYi4KKyAqCisgKiBBcmd1bWVudCBjb25zdHJhaW50czoKKyAqIDEuIFBST0RQICE9IFVQIGFuZCBQUk9EUCAhPSBWUCwgaS5lLiB0aGUgZGVzdGluYXRpb24KKyAqICAgIG11c3QgYmUgZGlzdGluY3QgZnJvbSB0aGUgbXVsdGlwbGllciBhbmQgdGhlIG11bHRpcGxpY2FuZC4KKyAqCisgKgorICogSGFuZGxlIHNpbXBsZSBjYXNlcyB3aXRoIHRyYWRpdGlvbmFsIG11bHRpcGxpY2F0aW9uLgorICoKKyAqIFRoaXMgaXMgdGhlIG1vc3QgY3JpdGljYWwgY29kZSBvZiBtdWx0aXBsaWNhdGlvbi4gIEFsbCBtdWx0aXBsaWVzIHJlbHkKKyAqIG9uIHRoaXMsIGJvdGggc21hbGwgYW5kIGh1Z2UuICBTbWFsbCBvbmVzIGFycml2ZSBoZXJlIGltbWVkaWF0ZWx5LiAgSHVnZQorICogb25lcyBhcnJpdmUgaGVyZSBhcyB0aGlzIGlzIHRoZSBiYXNlIGNhc2UgZm9yIEthcmF0c3ViYSdzIHJlY3Vyc2l2ZQorICogYWxnb3JpdGhtIGJlbG93LgorICovCisKK3N0YXRpYyBtcGlfbGltYl90CittdWxfbl9iYXNlY2FzZSggbXBpX3B0cl90IHByb2RwLCBtcGlfcHRyX3QgdXAsCisJCQkJIG1waV9wdHJfdCB2cCwgbXBpX3NpemVfdCBzaXplKQoreworICAgIG1waV9zaXplX3QgaTsKKyAgICBtcGlfbGltYl90IGN5OworICAgIG1waV9saW1iX3Qgdl9saW1iOworCisgICAgLyogTXVsdGlwbHkgYnkgdGhlIGZpcnN0IGxpbWIgaW4gViBzZXBhcmF0ZWx5LCBhcyB0aGUgcmVzdWx0IGNhbiBiZQorICAgICAqIHN0b3JlZCAobm90IGFkZGVkKSB0byBQUk9ELiAgV2UgYWxzbyBhdm9pZCBhIGxvb3AgZm9yIHplcm9pbmcuICAqLworICAgIHZfbGltYiA9IHZwWzBdOworICAgIGlmKCB2X2xpbWIgPD0gMSApIHsKKwlpZiggdl9saW1iID09IDEgKQorCSAgICBNUE5fQ09QWSggcHJvZHAsIHVwLCBzaXplICk7CisJZWxzZQorCSAgICBNUE5fWkVSTyggcHJvZHAsIHNpemUgKTsKKwljeSA9IDA7CisgICAgfQorICAgIGVsc2UKKwljeSA9IF9nY3J5X21waWhfbXVsXzEoIHByb2RwLCB1cCwgc2l6ZSwgdl9saW1iICk7CisKKyAgICBwcm9kcFtzaXplXSA9IGN5OworICAgIHByb2RwKys7CisKKyAgICAvKiBGb3IgZWFjaCBpdGVyYXRpb24gaW4gdGhlIG91dGVyIGxvb3AsIG11bHRpcGx5IG9uZSBsaW1iIGZyb20KKyAgICAgKiBVIHdpdGggb25lIGxpbWIgZnJvbSBWLCBhbmQgYWRkIGl0IHRvIFBST0QuICAqLworICAgIGZvciggaSA9IDE7IGkgPCBzaXplOyBpKysgKSB7CisJdl9saW1iID0gdnBbaV07CisJaWYoIHZfbGltYiA8PSAxICkgeworCSAgICBjeSA9IDA7CisJICAgIGlmKCB2X2xpbWIgPT0gMSApCisJICAgICAgIGN5ID0gX2djcnlfbXBpaF9hZGRfbihwcm9kcCwgcHJvZHAsIHVwLCBzaXplKTsKKwl9CisJZWxzZQorCSAgICBjeSA9IF9nY3J5X21waWhfYWRkbXVsXzEocHJvZHAsIHVwLCBzaXplLCB2X2xpbWIpOworCisJcHJvZHBbc2l6ZV0gPSBjeTsKKwlwcm9kcCsrOworICAgIH0KKworICAgIHJldHVybiBjeTsKK30KKworCitzdGF0aWMgdm9pZAorbXVsX24oIG1waV9wdHJfdCBwcm9kcCwgbXBpX3B0cl90IHVwLCBtcGlfcHRyX3QgdnAsCisJCQltcGlfc2l6ZV90IHNpemUsIG1waV9wdHJfdCB0c3BhY2UgKQoreworICAgIGlmKCBzaXplICYgMSApIHsKKyAgICAgIC8qIFRoZSBzaXplIGlzIG9kZCwgYW5kIHRoZSBjb2RlIGJlbG93IGRvZXNuJ3QgaGFuZGxlIHRoYXQuCisgICAgICAgKiBNdWx0aXBseSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgKHNpemUgLSAxKSBsaW1icyB3aXRoIGEgcmVjdXJzaXZlCisgICAgICAgKiBjYWxsLCBhbmQgaGFuZGxlIHRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgb2YgUzEgYW5kIFMyCisgICAgICAgKiBzZXBhcmF0ZWx5LgorICAgICAgICogQSBzbGlnaHRseSBmYXN0ZXIgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gbWFrZSB0aGUgS2FyYXRzdWJhCisgICAgICAgKiBjb2RlIGJlbG93IGJlaGF2ZSBhcyBpZiB0aGUgc2l6ZSB3ZXJlIGV2ZW4sIGFuZCBsZXQgaXQgY2hlY2sgZm9yCisgICAgICAgKiBvZGQgc2l6ZSBpbiB0aGUgZW5kLiAgSS5lLiwgaW4gZXNzZW5jZSBtb3ZlIHRoaXMgY29kZSB0byB0aGUgZW5kLgorICAgICAgICogRG9pbmcgc28gd291bGQgc2F2ZSB1cyBhIHJlY3Vyc2l2ZSBjYWxsLCBhbmQgcG90ZW50aWFsbHkgbWFrZSB0aGUKKyAgICAgICAqIHN0YWNrIGdyb3cgYSBsb3QgbGVzcy4KKyAgICAgICAqLworICAgICAgbXBpX3NpemVfdCBlc2l6ZSA9IHNpemUgLSAxOwkgLyogZXZlbiBzaXplICovCisgICAgICBtcGlfbGltYl90IGN5X2xpbWI7CisKKyAgICAgIE1QTl9NVUxfTl9SRUNVUlNFKCBwcm9kcCwgdXAsIHZwLCBlc2l6ZSwgdHNwYWNlICk7CisgICAgICBjeV9saW1iID0gX2djcnlfbXBpaF9hZGRtdWxfMSggcHJvZHAgKyBlc2l6ZSwgdXAsIGVzaXplLCB2cFtlc2l6ZV0gKTsKKyAgICAgIHByb2RwW2VzaXplICsgZXNpemVdID0gY3lfbGltYjsKKyAgICAgIGN5X2xpbWIgPSBfZ2NyeV9tcGloX2FkZG11bF8xKCBwcm9kcCArIGVzaXplLCB2cCwgc2l6ZSwgdXBbZXNpemVdICk7CisgICAgICBwcm9kcFtlc2l6ZSArIHNpemVdID0gY3lfbGltYjsKKyAgICB9CisgICAgZWxzZSB7CisJLyogQW5hdG9saWogQWxla3NlZXZpY2ggS2FyYXRzdWJhJ3MgZGl2aWRlLWFuZC1jb25xdWVyIGFsZ29yaXRobS4KKwkgKgorCSAqIFNwbGl0IFUgaW4gdHdvIHBpZWNlcywgVTEgYW5kIFUwLCBzdWNoIHRoYXQKKwkgKiBVID0gVTAgKyBVMSooQioqbiksCisJICogYW5kIFYgaW4gVjEgYW5kIFYwLCBzdWNoIHRoYXQKKwkgKiBWID0gVjAgKyBWMSooQioqbikuCisJICoKKwkgKiBVViBpcyB0aGVuIGNvbXB1dGVkIHJlY3Vyc2l2ZWx5IHVzaW5nIHRoZSBpZGVudGl0eQorCSAqCisJICoJICAybiAgIG4JICBuCQkJbgorCSAqIFVWID0gKEIgICsgQiApVSBWICArICBCIChVIC1VICkoViAtViApICArICAoQiArIDEpVSBWCisJICoJCSAgMSAxCSAgICAgMQkwICAgMCAgMQkgICAgICAwIDAKKwkgKgorCSAqIFdoZXJlIEIgPSAyKipCSVRTX1BFUl9NUF9MSU1CLgorCSAqLworCW1waV9zaXplX3QgaHNpemUgPSBzaXplID4+IDE7CisJbXBpX2xpbWJfdCBjeTsKKwlpbnQgbmVnZmxnOworCisJLyogUHJvZHVjdCBILgkgICBfX19fX19fX19fX19fX19fICBfX19fX19fX19fX19fX19fCisJICoJCSAgfF9fX19fVTEgeCBWMV9fX198fF9fX19VMCB4IFYwX19fX198CisJICogUHV0IHJlc3VsdCBpbiB1cHBlciBwYXJ0IG9mIFBST0QgYW5kIHBhc3MgbG93IHBhcnQgb2YgVFNQQUNFCisJICogYXMgbmV3IFRTUEFDRS4KKwkgKi8KKwlNUE5fTVVMX05fUkVDVVJTRShwcm9kcCArIHNpemUsIHVwICsgaHNpemUsIHZwICsgaHNpemUsIGhzaXplLCB0c3BhY2UpOworCisJLyogUHJvZHVjdCBNLgkgICBfX19fX19fX19fX19fX19fCisJICoJCSAgfF8oVTEtVTApKFYwLVYxKV98CisJICovCisJaWYoIF9nY3J5X21waWhfY21wKHVwICsgaHNpemUsIHVwLCBoc2l6ZSkgPj0gMCApIHsKKwkgICAgX2djcnlfbXBpaF9zdWJfbihwcm9kcCwgdXAgKyBoc2l6ZSwgdXAsIGhzaXplKTsKKwkgICAgbmVnZmxnID0gMDsKKwl9CisJZWxzZSB7CisJICAgIF9nY3J5X21waWhfc3ViX24ocHJvZHAsIHVwLCB1cCArIGhzaXplLCBoc2l6ZSk7CisJICAgIG5lZ2ZsZyA9IDE7CisJfQorCWlmKCBfZ2NyeV9tcGloX2NtcCh2cCArIGhzaXplLCB2cCwgaHNpemUpID49IDAgKSB7CisJICAgIF9nY3J5X21waWhfc3ViX24ocHJvZHAgKyBoc2l6ZSwgdnAgKyBoc2l6ZSwgdnAsIGhzaXplKTsKKwkgICAgbmVnZmxnIF49IDE7CisJfQorCWVsc2UgeworCSAgICBfZ2NyeV9tcGloX3N1Yl9uKHByb2RwICsgaHNpemUsIHZwLCB2cCArIGhzaXplLCBoc2l6ZSk7CisJICAgIC8qIE5vIGNoYW5nZSBvZiBORUdGTEcuICAqLworCX0KKwkvKiBSZWFkIHRlbXBvcmFyeSBvcGVyYW5kcyBmcm9tIGxvdyBwYXJ0IG9mIFBST0QuCisJICogUHV0IHJlc3VsdCBpbiBsb3cgcGFydCBvZiBUU1BBQ0UgdXNpbmcgdXBwZXIgcGFydCBvZiBUU1BBQ0UKKwkgKiBhcyBuZXcgVFNQQUNFLgorCSAqLworCU1QTl9NVUxfTl9SRUNVUlNFKHRzcGFjZSwgcHJvZHAsIHByb2RwICsgaHNpemUsIGhzaXplLCB0c3BhY2UgKyBzaXplKTsKKworCS8qIEFkZC9jb3B5IHByb2R1Y3QgSC4gKi8KKwlNUE5fQ09QWSAocHJvZHAgKyBoc2l6ZSwgcHJvZHAgKyBzaXplLCBoc2l6ZSk7CisJY3kgPSBfZ2NyeV9tcGloX2FkZF9uKCBwcm9kcCArIHNpemUsIHByb2RwICsgc2l6ZSwKKwkJCSAgICBwcm9kcCArIHNpemUgKyBoc2l6ZSwgaHNpemUpOworCisJLyogQWRkIHByb2R1Y3QgTSAoaWYgTkVHRkxHIE0gaXMgYSBuZWdhdGl2ZSBudW1iZXIpICovCisJaWYobmVnZmxnKQorCSAgICBjeSAtPSBfZ2NyeV9tcGloX3N1Yl9uKHByb2RwICsgaHNpemUsIHByb2RwICsgaHNpemUsIHRzcGFjZSwgc2l6ZSk7CisJZWxzZQorCSAgICBjeSArPSBfZ2NyeV9tcGloX2FkZF9uKHByb2RwICsgaHNpemUsIHByb2RwICsgaHNpemUsIHRzcGFjZSwgc2l6ZSk7CisKKwkvKiBQcm9kdWN0IEwuCSAgIF9fX19fX19fX19fX19fX18gIF9fX19fX19fX19fX19fX18KKwkgKgkJICB8X19fX19fX19fX19fX19fX3x8X19fX1UwIHggVjBfX19fX3wKKwkgKiBSZWFkIHRlbXBvcmFyeSBvcGVyYW5kcyBmcm9tIGxvdyBwYXJ0IG9mIFBST0QuCisJICogUHV0IHJlc3VsdCBpbiBsb3cgcGFydCBvZiBUU1BBQ0UgdXNpbmcgdXBwZXIgcGFydCBvZiBUU1BBQ0UKKwkgKiBhcyBuZXcgVFNQQUNFLgorCSAqLworCU1QTl9NVUxfTl9SRUNVUlNFKHRzcGFjZSwgdXAsIHZwLCBoc2l6ZSwgdHNwYWNlICsgc2l6ZSk7CisKKwkvKiBBZGQvY29weSBQcm9kdWN0IEwgKHR3aWNlKSAqLworCisJY3kgKz0gX2djcnlfbXBpaF9hZGRfbihwcm9kcCArIGhzaXplLCBwcm9kcCArIGhzaXplLCB0c3BhY2UsIHNpemUpOworCWlmKCBjeSApCisJICBfZ2NyeV9tcGloX2FkZF8xKHByb2RwICsgaHNpemUgKyBzaXplLCBwcm9kcCArIGhzaXplICsgc2l6ZSwgaHNpemUsIGN5KTsKKworCU1QTl9DT1BZKHByb2RwLCB0c3BhY2UsIGhzaXplKTsKKwljeSA9IF9nY3J5X21waWhfYWRkX24ocHJvZHAgKyBoc2l6ZSwgcHJvZHAgKyBoc2l6ZSwgdHNwYWNlICsgaHNpemUsIGhzaXplKTsKKwlpZiggY3kgKQorCSAgICBfZ2NyeV9tcGloX2FkZF8xKHByb2RwICsgc2l6ZSwgcHJvZHAgKyBzaXplLCBzaXplLCAxKTsKKyAgICB9Cit9CisKKwordm9pZAorX2djcnlfbXBpaF9zcXJfbl9iYXNlY2FzZSggbXBpX3B0cl90IHByb2RwLCBtcGlfcHRyX3QgdXAsIG1waV9zaXplX3Qgc2l6ZSApCit7CisgICAgbXBpX3NpemVfdCBpOworICAgIG1waV9saW1iX3QgY3lfbGltYjsKKyAgICBtcGlfbGltYl90IHZfbGltYjsKKworICAgIC8qIE11bHRpcGx5IGJ5IHRoZSBmaXJzdCBsaW1iIGluIFYgc2VwYXJhdGVseSwgYXMgdGhlIHJlc3VsdCBjYW4gYmUKKyAgICAgKiBzdG9yZWQgKG5vdCBhZGRlZCkgdG8gUFJPRC4gIFdlIGFsc28gYXZvaWQgYSBsb29wIGZvciB6ZXJvaW5nLiAgKi8KKyAgICB2X2xpbWIgPSB1cFswXTsKKyAgICBpZiggdl9saW1iIDw9IDEgKSB7CisJaWYoIHZfbGltYiA9PSAxICkKKwkgICAgTVBOX0NPUFkoIHByb2RwLCB1cCwgc2l6ZSApOworCWVsc2UKKwkgICAgTVBOX1pFUk8ocHJvZHAsIHNpemUpOworCWN5X2xpbWIgPSAwOworICAgIH0KKyAgICBlbHNlCisJY3lfbGltYiA9IF9nY3J5X21waWhfbXVsXzEoIHByb2RwLCB1cCwgc2l6ZSwgdl9saW1iICk7CisKKyAgICBwcm9kcFtzaXplXSA9IGN5X2xpbWI7CisgICAgcHJvZHArKzsKKworICAgIC8qIEZvciBlYWNoIGl0ZXJhdGlvbiBpbiB0aGUgb3V0ZXIgbG9vcCwgbXVsdGlwbHkgb25lIGxpbWIgZnJvbQorICAgICAqIFUgd2l0aCBvbmUgbGltYiBmcm9tIFYsIGFuZCBhZGQgaXQgdG8gUFJPRC4gICovCisgICAgZm9yKCBpPTE7IGkgPCBzaXplOyBpKyspIHsKKwl2X2xpbWIgPSB1cFtpXTsKKwlpZiggdl9saW1iIDw9IDEgKSB7CisJICAgIGN5X2xpbWIgPSAwOworCSAgICBpZiggdl9saW1iID09IDEgKQorCQljeV9saW1iID0gX2djcnlfbXBpaF9hZGRfbihwcm9kcCwgcHJvZHAsIHVwLCBzaXplKTsKKwl9CisJZWxzZQorCSAgICBjeV9saW1iID0gX2djcnlfbXBpaF9hZGRtdWxfMShwcm9kcCwgdXAsIHNpemUsIHZfbGltYik7CisKKwlwcm9kcFtzaXplXSA9IGN5X2xpbWI7CisJcHJvZHArKzsKKyAgICB9Cit9CisKKwordm9pZAorX2djcnlfbXBpaF9zcXJfbiggbXBpX3B0cl90IHByb2RwLAorICAgICAgICAgICAgICAgICAgbXBpX3B0cl90IHVwLCBtcGlfc2l6ZV90IHNpemUsIG1waV9wdHJfdCB0c3BhY2UpCit7CisgICAgaWYoIHNpemUgJiAxICkgeworCS8qIFRoZSBzaXplIGlzIG9kZCwgYW5kIHRoZSBjb2RlIGJlbG93IGRvZXNuJ3QgaGFuZGxlIHRoYXQuCisJICogTXVsdGlwbHkgdGhlIGxlYXN0IHNpZ25pZmljYW50IChzaXplIC0gMSkgbGltYnMgd2l0aCBhIHJlY3Vyc2l2ZQorCSAqIGNhbGwsIGFuZCBoYW5kbGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiBTMSBhbmQgUzIKKwkgKiBzZXBhcmF0ZWx5LgorCSAqIEEgc2xpZ2h0bHkgZmFzdGVyIHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIG1ha2UgdGhlIEthcmF0c3ViYQorCSAqIGNvZGUgYmVsb3cgYmVoYXZlIGFzIGlmIHRoZSBzaXplIHdlcmUgZXZlbiwgYW5kIGxldCBpdCBjaGVjayBmb3IKKwkgKiBvZGQgc2l6ZSBpbiB0aGUgZW5kLiAgSS5lLiwgaW4gZXNzZW5jZSBtb3ZlIHRoaXMgY29kZSB0byB0aGUgZW5kLgorCSAqIERvaW5nIHNvIHdvdWxkIHNhdmUgdXMgYSByZWN1cnNpdmUgY2FsbCwgYW5kIHBvdGVudGlhbGx5IG1ha2UgdGhlCisJICogc3RhY2sgZ3JvdyBhIGxvdCBsZXNzLgorCSAqLworCW1waV9zaXplX3QgZXNpemUgPSBzaXplIC0gMTsJICAgLyogZXZlbiBzaXplICovCisJbXBpX2xpbWJfdCBjeV9saW1iOworCisJTVBOX1NRUl9OX1JFQ1VSU0UoIHByb2RwLCB1cCwgZXNpemUsIHRzcGFjZSApOworCWN5X2xpbWIgPSBfZ2NyeV9tcGloX2FkZG11bF8xKCBwcm9kcCArIGVzaXplLCB1cCwgZXNpemUsIHVwW2VzaXplXSApOworCXByb2RwW2VzaXplICsgZXNpemVdID0gY3lfbGltYjsKKwljeV9saW1iID0gX2djcnlfbXBpaF9hZGRtdWxfMSggcHJvZHAgKyBlc2l6ZSwgdXAsIHNpemUsIHVwW2VzaXplXSApOworCisJcHJvZHBbZXNpemUgKyBzaXplXSA9IGN5X2xpbWI7CisgICAgfQorICAgIGVsc2UgeworCW1waV9zaXplX3QgaHNpemUgPSBzaXplID4+IDE7CisJbXBpX2xpbWJfdCBjeTsKKworCS8qIFByb2R1Y3QgSC4JICAgX19fX19fX19fX19fX19fXyAgX19fX19fX19fX19fX19fXworCSAqCQkgIHxfX19fX1UxIHggVTFfX19ffHxfX19fVTAgeCBVMF9fX19ffAorCSAqIFB1dCByZXN1bHQgaW4gdXBwZXIgcGFydCBvZiBQUk9EIGFuZCBwYXNzIGxvdyBwYXJ0IG9mIFRTUEFDRQorCSAqIGFzIG5ldyBUU1BBQ0UuCisJICovCisJTVBOX1NRUl9OX1JFQ1VSU0UocHJvZHAgKyBzaXplLCB1cCArIGhzaXplLCBoc2l6ZSwgdHNwYWNlKTsKKworCS8qIFByb2R1Y3QgTS4JICAgX19fX19fX19fX19fX19fXworCSAqCQkgIHxfKFUxLVUwKShVMC1VMSlffAorCSAqLworCWlmKCBfZ2NyeV9tcGloX2NtcCggdXAgKyBoc2l6ZSwgdXAsIGhzaXplKSA+PSAwICkKKwkgICAgX2djcnlfbXBpaF9zdWJfbiggcHJvZHAsIHVwICsgaHNpemUsIHVwLCBoc2l6ZSk7CisJZWxzZQorCSAgICBfZ2NyeV9tcGloX3N1Yl9uIChwcm9kcCwgdXAsIHVwICsgaHNpemUsIGhzaXplKTsKKworCS8qIFJlYWQgdGVtcG9yYXJ5IG9wZXJhbmRzIGZyb20gbG93IHBhcnQgb2YgUFJPRC4KKwkgKiBQdXQgcmVzdWx0IGluIGxvdyBwYXJ0IG9mIFRTUEFDRSB1c2luZyB1cHBlciBwYXJ0IG9mIFRTUEFDRQorCSAqIGFzIG5ldyBUU1BBQ0UuICAqLworCU1QTl9TUVJfTl9SRUNVUlNFKHRzcGFjZSwgcHJvZHAsIGhzaXplLCB0c3BhY2UgKyBzaXplKTsKKworCS8qIEFkZC9jb3B5IHByb2R1Y3QgSCAgKi8KKwlNUE5fQ09QWShwcm9kcCArIGhzaXplLCBwcm9kcCArIHNpemUsIGhzaXplKTsKKwljeSA9IF9nY3J5X21waWhfYWRkX24ocHJvZHAgKyBzaXplLCBwcm9kcCArIHNpemUsCisJCQkgICBwcm9kcCArIHNpemUgKyBoc2l6ZSwgaHNpemUpOworCisJLyogQWRkIHByb2R1Y3QgTSAoaWYgTkVHRkxHIE0gaXMgYSBuZWdhdGl2ZSBudW1iZXIpLiAgKi8KKwljeSAtPSBfZ2NyeV9tcGloX3N1Yl9uIChwcm9kcCArIGhzaXplLCBwcm9kcCArIGhzaXplLCB0c3BhY2UsIHNpemUpOworCisJLyogUHJvZHVjdCBMLgkgICBfX19fX19fX19fX19fX19fICBfX19fX19fX19fX19fX19fCisJICoJCSAgfF9fX19fX19fX19fX19fX198fF9fX19VMCB4IFUwX19fX198CisJICogUmVhZCB0ZW1wb3Jhcnkgb3BlcmFuZHMgZnJvbSBsb3cgcGFydCBvZiBQUk9ELgorCSAqIFB1dCByZXN1bHQgaW4gbG93IHBhcnQgb2YgVFNQQUNFIHVzaW5nIHVwcGVyIHBhcnQgb2YgVFNQQUNFCisJICogYXMgbmV3IFRTUEFDRS4gICovCisJTVBOX1NRUl9OX1JFQ1VSU0UgKHRzcGFjZSwgdXAsIGhzaXplLCB0c3BhY2UgKyBzaXplKTsKKworCS8qIEFkZC9jb3B5IFByb2R1Y3QgTCAodHdpY2UpLgkqLworCWN5ICs9IF9nY3J5X21waWhfYWRkX24gKHByb2RwICsgaHNpemUsIHByb2RwICsgaHNpemUsIHRzcGFjZSwgc2l6ZSk7CisJaWYoIGN5ICkKKwkgICAgX2djcnlfbXBpaF9hZGRfMShwcm9kcCArIGhzaXplICsgc2l6ZSwgcHJvZHAgKyBoc2l6ZSArIHNpemUsCisJCQkJCQkJICAgIGhzaXplLCBjeSk7CisKKwlNUE5fQ09QWShwcm9kcCwgdHNwYWNlLCBoc2l6ZSk7CisJY3kgPSBfZ2NyeV9tcGloX2FkZF9uIChwcm9kcCArIGhzaXplLCBwcm9kcCArIGhzaXplLCB0c3BhY2UgKyBoc2l6ZSwgaHNpemUpOworCWlmKCBjeSApCisJICAgIF9nY3J5X21waWhfYWRkXzEgKHByb2RwICsgc2l6ZSwgcHJvZHAgKyBzaXplLCBzaXplLCAxKTsKKyAgICB9Cit9CisKKworLyogVGhpcyBzaG91bGQgYmUgbWFkZSBpbnRvIGFuIGlubGluZSBmdW5jdGlvbiBpbiBnbXAuaC4gICovCit2b2lkCitfZ2NyeV9tcGloX211bF9uKCBtcGlfcHRyX3QgcHJvZHAsCisgICAgICAgICAgICAgICAgICAgICBtcGlfcHRyX3QgdXAsIG1waV9wdHJfdCB2cCwgbXBpX3NpemVfdCBzaXplKQoreworICAgIGludCBzZWN1cmU7CisKKyAgICBpZiggdXAgPT0gdnAgKSB7CisJaWYoIHNpemUgPCBLQVJBVFNVQkFfVEhSRVNIT0xEICkKKwkgICAgX2djcnlfbXBpaF9zcXJfbl9iYXNlY2FzZSggcHJvZHAsIHVwLCBzaXplICk7CisJZWxzZSB7CisJICAgIG1waV9wdHJfdCB0c3BhY2U7CisJICAgIHNlY3VyZSA9IF9nY3J5X2lzX3NlY3VyZSggdXAgKTsKKwkgICAgdHNwYWNlID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIDIgKiBzaXplLCBzZWN1cmUgKTsKKwkgICAgX2djcnlfbXBpaF9zcXJfbiggcHJvZHAsIHVwLCBzaXplLCB0c3BhY2UgKTsKKwkgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSAodHNwYWNlLCAyICogc2l6ZSApOworCX0KKyAgICB9CisgICAgZWxzZSB7CisJaWYoIHNpemUgPCBLQVJBVFNVQkFfVEhSRVNIT0xEICkKKwkgICAgbXVsX25fYmFzZWNhc2UoIHByb2RwLCB1cCwgdnAsIHNpemUgKTsKKwllbHNlIHsKKwkgICAgbXBpX3B0cl90IHRzcGFjZTsKKwkgICAgc2VjdXJlID0gX2djcnlfaXNfc2VjdXJlKCB1cCApIHx8IF9nY3J5X2lzX3NlY3VyZSggdnAgKTsKKwkgICAgdHNwYWNlID0gbXBpX2FsbG9jX2xpbWJfc3BhY2UoIDIgKiBzaXplLCBzZWN1cmUgKTsKKwkgICAgbXVsX24gKHByb2RwLCB1cCwgdnAsIHNpemUsIHRzcGFjZSk7CisJICAgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UgKHRzcGFjZSwgMiAqIHNpemUgKTsKKwl9CisgICAgfQorfQorCisKKwordm9pZAorX2djcnlfbXBpaF9tdWxfa2FyYXRzdWJhX2Nhc2UoIG1waV9wdHJfdCBwcm9kcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfcHRyX3QgdXAsIG1waV9zaXplX3QgdXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3B0cl90IHZwLCBtcGlfc2l6ZV90IHZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrYXJhdHN1YmFfY3R4ICpjdHggKQoreworICAgIG1waV9saW1iX3QgY3k7CisKKyAgICBpZiggIWN0eC0+dHNwYWNlIHx8IGN0eC0+dHNwYWNlX3NpemUgPCB2c2l6ZSApIHsKKwlpZiggY3R4LT50c3BhY2UgKQorCSAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBjdHgtPnRzcGFjZSwgY3R4LT50c3BhY2VfbmxpbWJzICk7CisgICAgICAgIGN0eC0+dHNwYWNlX25saW1icyA9IDIgKiB2c2l6ZTsKKwljdHgtPnRzcGFjZSA9IG1waV9hbGxvY19saW1iX3NwYWNlICgyICogdnNpemUsCisJCQkJICAgICAgICAgICAgKF9nY3J5X2lzX3NlY3VyZSAodXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfZ2NyeV9pc19zZWN1cmUgKHZwKSkpOworCWN0eC0+dHNwYWNlX3NpemUgPSB2c2l6ZTsKKyAgICB9CisKKyAgICBNUE5fTVVMX05fUkVDVVJTRSggcHJvZHAsIHVwLCB2cCwgdnNpemUsIGN0eC0+dHNwYWNlICk7CisKKyAgICBwcm9kcCArPSB2c2l6ZTsKKyAgICB1cCArPSB2c2l6ZTsKKyAgICB1c2l6ZSAtPSB2c2l6ZTsKKyAgICBpZiggdXNpemUgPj0gdnNpemUgKSB7CisJaWYoICFjdHgtPnRwIHx8IGN0eC0+dHBfc2l6ZSA8IHZzaXplICkgeworCSAgICBpZiggY3R4LT50cCApCisJCV9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UoIGN0eC0+dHAsIGN0eC0+dHBfbmxpbWJzICk7CisgICAgICAgICAgICBjdHgtPnRwX25saW1icyA9IDIgKiB2c2l6ZTsKKwkgICAgY3R4LT50cCA9IG1waV9hbGxvY19saW1iX3NwYWNlICgyICogdnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZ2NyeV9pc19zZWN1cmUgKHVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX2djcnlfaXNfc2VjdXJlICh2cCkpKTsKKwkgICAgY3R4LT50cF9zaXplID0gdnNpemU7CisJfQorCisJZG8geworCSAgICBNUE5fTVVMX05fUkVDVVJTRSggY3R4LT50cCwgdXAsIHZwLCB2c2l6ZSwgY3R4LT50c3BhY2UgKTsKKwkgICAgY3kgPSBfZ2NyeV9tcGloX2FkZF9uKCBwcm9kcCwgcHJvZHAsIGN0eC0+dHAsIHZzaXplICk7CisJICAgIF9nY3J5X21waWhfYWRkXzEoIHByb2RwICsgdnNpemUsIGN0eC0+dHAgKyB2c2l6ZSwgdnNpemUsIGN5ICk7CisJICAgIHByb2RwICs9IHZzaXplOworCSAgICB1cCArPSB2c2l6ZTsKKwkgICAgdXNpemUgLT0gdnNpemU7CisJfSB3aGlsZSggdXNpemUgPj0gdnNpemUgKTsKKyAgICB9CisKKyAgICBpZiggdXNpemUgKSB7CisJaWYoIHVzaXplIDwgS0FSQVRTVUJBX1RIUkVTSE9MRCApIHsKKwkgICAgX2djcnlfbXBpaF9tdWwoIGN0eC0+dHNwYWNlLCB2cCwgdnNpemUsIHVwLCB1c2l6ZSApOworCX0KKwllbHNlIHsKKwkgICAgaWYoICFjdHgtPm5leHQgKSB7CisJCWN0eC0+bmV4dCA9IHhjYWxsb2MoIDEsIHNpemVvZiAqY3R4ICk7CisJICAgIH0KKwkgICAgX2djcnlfbXBpaF9tdWxfa2FyYXRzdWJhX2Nhc2UoIGN0eC0+dHNwYWNlLAorCQkJCQl2cCwgdnNpemUsCisJCQkJCXVwLCB1c2l6ZSwKKwkJCQkJY3R4LT5uZXh0ICk7CisJfQorCisJY3kgPSBfZ2NyeV9tcGloX2FkZF9uKCBwcm9kcCwgcHJvZHAsIGN0eC0+dHNwYWNlLCB2c2l6ZSk7CisJX2djcnlfbXBpaF9hZGRfMSggcHJvZHAgKyB2c2l6ZSwgY3R4LT50c3BhY2UgKyB2c2l6ZSwgdXNpemUsIGN5ICk7CisgICAgfQorfQorCisKK3ZvaWQKK19nY3J5X21waWhfcmVsZWFzZV9rYXJhdHN1YmFfY3R4KCBzdHJ1Y3Qga2FyYXRzdWJhX2N0eCAqY3R4ICkKK3sKKyAgICBzdHJ1Y3Qga2FyYXRzdWJhX2N0eCAqY3R4MjsKKworICAgIGlmKCBjdHgtPnRwICkKKwlfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBjdHgtPnRwLCBjdHgtPnRwX25saW1icyApOworICAgIGlmKCBjdHgtPnRzcGFjZSApCisJX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSggY3R4LT50c3BhY2UsIGN0eC0+dHNwYWNlX25saW1icyApOworICAgIGZvciggY3R4PWN0eC0+bmV4dDsgY3R4OyBjdHggPSBjdHgyICkgeworCWN0eDIgPSBjdHgtPm5leHQ7CisJaWYoIGN0eC0+dHAgKQorICAgICAgICAgICAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSggY3R4LT50cCwgY3R4LT50cF9ubGltYnMgKTsKKwlpZiggY3R4LT50c3BhY2UgKQorCSAgICBfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBjdHgtPnRzcGFjZSwgY3R4LT50c3BhY2VfbmxpbWJzICk7CisJeGZyZWUoIGN0eCApOworICAgIH0KK30KKworLyogTXVsdGlwbHkgdGhlIG5hdHVyYWwgbnVtYmVycyB1IChwb2ludGVkIHRvIGJ5IFVQLCB3aXRoIFVTSVpFIGxpbWJzKQorICogYW5kIHYgKHBvaW50ZWQgdG8gYnkgVlAsIHdpdGggVlNJWkUgbGltYnMpLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBhdAorICogUFJPRFAuICBVU0laRSArIFZTSVpFIGxpbWJzIGFyZSBhbHdheXMgc3RvcmVkLCBidXQgaWYgdGhlIGlucHV0CisgKiBvcGVyYW5kcyBhcmUgbm9ybWFsaXplZC4gIFJldHVybiB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHRoZQorICogcmVzdWx0LgorICoKKyAqIE5PVEU6IFRoZSBzcGFjZSBwb2ludGVkIHRvIGJ5IFBST0RQIGlzIG92ZXJ3cml0dGVuIGJlZm9yZSBmaW5pc2hlZAorICogd2l0aCBVIGFuZCBWLCBzbyBvdmVybGFwIGlzIGFuIGVycm9yLgorICoKKyAqIEFyZ3VtZW50IGNvbnN0cmFpbnRzOgorICogMS4gVVNJWkUgPj0gVlNJWkUuCisgKiAyLiBQUk9EUCAhPSBVUCBhbmQgUFJPRFAgIT0gVlAsIGkuZS4gdGhlIGRlc3RpbmF0aW9uCisgKiAgICBtdXN0IGJlIGRpc3RpbmN0IGZyb20gdGhlIG11bHRpcGxpZXIgYW5kIHRoZSBtdWx0aXBsaWNhbmQuCisgKi8KKworbXBpX2xpbWJfdAorX2djcnlfbXBpaF9tdWwoIG1waV9wdHJfdCBwcm9kcCwgbXBpX3B0cl90IHVwLCBtcGlfc2l6ZV90IHVzaXplLAorICAgICAgICAgICAgICAgICAgIG1waV9wdHJfdCB2cCwgbXBpX3NpemVfdCB2c2l6ZSkKK3sKKyAgICBtcGlfcHRyX3QgcHJvZF9lbmRwID0gcHJvZHAgKyB1c2l6ZSArIHZzaXplIC0gMTsKKyAgICBtcGlfbGltYl90IGN5OworICAgIHN0cnVjdCBrYXJhdHN1YmFfY3R4IGN0eDsKKworICAgIGlmKCB2c2l6ZSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKSB7CisJbXBpX3NpemVfdCBpOworCW1waV9saW1iX3Qgdl9saW1iOworCisJaWYoICF2c2l6ZSApCisJICAgIHJldHVybiAwOworCisJLyogTXVsdGlwbHkgYnkgdGhlIGZpcnN0IGxpbWIgaW4gViBzZXBhcmF0ZWx5LCBhcyB0aGUgcmVzdWx0IGNhbiBiZQorCSAqIHN0b3JlZCAobm90IGFkZGVkKSB0byBQUk9ELglXZSBhbHNvIGF2b2lkIGEgbG9vcCBmb3IgemVyb2luZy4gICovCisJdl9saW1iID0gdnBbMF07CisJaWYoIHZfbGltYiA8PSAxICkgeworCSAgICBpZiggdl9saW1iID09IDEgKQorCQlNUE5fQ09QWSggcHJvZHAsIHVwLCB1c2l6ZSApOworCSAgICBlbHNlCisJCU1QTl9aRVJPKCBwcm9kcCwgdXNpemUgKTsKKwkgICAgY3kgPSAwOworCX0KKwllbHNlCisJICAgIGN5ID0gX2djcnlfbXBpaF9tdWxfMSggcHJvZHAsIHVwLCB1c2l6ZSwgdl9saW1iICk7CisKKwlwcm9kcFt1c2l6ZV0gPSBjeTsKKwlwcm9kcCsrOworCisJLyogRm9yIGVhY2ggaXRlcmF0aW9uIGluIHRoZSBvdXRlciBsb29wLCBtdWx0aXBseSBvbmUgbGltYiBmcm9tCisJICogVSB3aXRoIG9uZSBsaW1iIGZyb20gViwgYW5kIGFkZCBpdCB0byBQUk9ELgkqLworCWZvciggaSA9IDE7IGkgPCB2c2l6ZTsgaSsrICkgeworCSAgICB2X2xpbWIgPSB2cFtpXTsKKwkgICAgaWYoIHZfbGltYiA8PSAxICkgeworCQljeSA9IDA7CisJCWlmKCB2X2xpbWIgPT0gMSApCisJCSAgIGN5ID0gX2djcnlfbXBpaF9hZGRfbihwcm9kcCwgcHJvZHAsIHVwLCB1c2l6ZSk7CisJICAgIH0KKwkgICAgZWxzZQorCQljeSA9IF9nY3J5X21waWhfYWRkbXVsXzEocHJvZHAsIHVwLCB1c2l6ZSwgdl9saW1iKTsKKworCSAgICBwcm9kcFt1c2l6ZV0gPSBjeTsKKwkgICAgcHJvZHArKzsKKwl9CisKKwlyZXR1cm4gY3k7CisgICAgfQorCisgICAgbWVtc2V0KCAmY3R4LCAwLCBzaXplb2YgY3R4ICk7CisgICAgX2djcnlfbXBpaF9tdWxfa2FyYXRzdWJhX2Nhc2UoIHByb2RwLCB1cCwgdXNpemUsIHZwLCB2c2l6ZSwgJmN0eCApOworICAgIF9nY3J5X21waWhfcmVsZWFzZV9rYXJhdHN1YmFfY3R4KCAmY3R4ICk7CisgICAgcmV0dXJuICpwcm9kX2VuZHA7Cit9CmRpZmYgLS1naXQgYS9tcGkvbXBpdXRpbC5jIGIvbXBpL21waXV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE3NTRhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL21waXV0aWwuYwpAQCAtMCwwICsxLDY3MCBAQAorLyogbXBpdXRpbC5hYyAgLSAgVXRpbGl0eSBmdW5jdGlvbnMgZm9yIE1QSQorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLAorICogICAgICAgICAgICAgICAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMyAgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgIm1waS1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1vZC1zb3VyY2UtaW5mby5oIgorCisvKiBDb25zdGF0bnMgYWxsb2NhdGVkIHJpZ2h0IGF3YXkgYXQgc3RydGFydHVwLiAgKi8KK3N0YXRpYyBnY3J5X21waV90IGNvbnN0YW50c1tNUElfTlVNQkVSX09GX0NPTlNUQU5UU107CisKKworCitjb25zdCBjaGFyICoKK19nY3J5X21waV9nZXRfaHdfY29uZmlnICh2b2lkKQoreworICByZXR1cm4gbW9kX3NvdXJjZV9pbmZvICsgMTsKK30KKworCisvKiBJbml0aWFsaXplIHRoZSBNUEkgc3Vic3lzdGVtLiAgVGhpcyBpcyBjYWxsZWQgZWFybHkgYW5kIGFsbG93cyB0bworICAgZG8gc29tZSBpbml0aWFsaXphdGlvbiB3aXRob3V0IHRha2luZyBjYXJlIG9mIHRocmVhZGluZyBpc3N1ZXMuICAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tcGlfaW5pdCAodm9pZCkKK3sKKyAgaW50IGlkeDsKKyAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworICBmb3IgKGlkeD0wOyBpZHggPCBNUElfTlVNQkVSX09GX0NPTlNUQU5UUzsgaWR4KyspCisgICAgeworICAgICAgc3dpdGNoIChpZHgpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNUElfQ19aRVJPOiAgdmFsdWUgPSAwOyBicmVhazsKKyAgICAgICAgY2FzZSBNUElfQ19PTkU6ICAgdmFsdWUgPSAxOyBicmVhazsKKyAgICAgICAgY2FzZSBNUElfQ19UV086ICAgdmFsdWUgPSAyOyBicmVhazsKKyAgICAgICAgY2FzZSBNUElfQ19USFJFRTogdmFsdWUgPSAzOyBicmVhazsKKyAgICAgICAgY2FzZSBNUElfQ19GT1VSOiAgdmFsdWUgPSA0OyBicmVhazsKKyAgICAgICAgY2FzZSBNUElfQ19FSUdIVDogdmFsdWUgPSA4OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogbG9nX2J1ZyAoImludmFsaWQgbXBpX2NvbnN0IHNlbGVjdG9yICVkXG4iLCBpZHgpOworICAgICAgICB9CisgICAgICBjb25zdGFudHNbaWR4XSA9IG1waV9hbGxvY19zZXRfdWkgKHZhbHVlKTsKKyAgICAgIGNvbnN0YW50c1tpZHhdLT5mbGFncyA9ICgxNnwzMik7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBOb3RlOiAgSXQgd2FzIGEgYmFkIGlkZWEgdG8gdXNlIHRoZSBudW1iZXIgb2YgbGltYnMgdG8gYWxsb2NhdGUKKyAqCSAgYmVjYXVzZSBvbiBhIGFscGhhIHRoZSBsaW1icyBhcmUgbGFyZ2UgYnV0IHdlIG5vcm1hbGx5IG5lZWQKKyAqCSAgaW50ZWdlcnMgb2YgbiBiaXRzIC0gU28gd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIGJpdHMgKG9yIGJ5dGVzKS4KKyAqCisgKgkgIEJ1dCBtcGlfYWxsb2MgaXMgdXNlZCBpbiBhIGxvdCBvZiBwbGFjZXMgOi0oLiAgTmV3IGNvZGUKKyAqCSAgc2hvdWxkIHVzZSBtcGlfbmV3LgorICovCitnY3J5X21waV90CitfZ2NyeV9tcGlfYWxsb2MoIHVuc2lnbmVkIG5saW1icyApCit7CisgICAgZ2NyeV9tcGlfdCBhOworCisgICAgYSA9IHhtYWxsb2MoIHNpemVvZiAqYSApOworICAgIGEtPmQgPSBubGltYnM/IG1waV9hbGxvY19saW1iX3NwYWNlKCBubGltYnMsIDAgKSA6IE5VTEw7CisgICAgYS0+YWxsb2NlZCA9IG5saW1iczsKKyAgICBhLT5ubGltYnMgPSAwOworICAgIGEtPnNpZ24gPSAwOworICAgIGEtPmZsYWdzID0gMDsKKyAgICByZXR1cm4gYTsKK30KKwordm9pZAorX2djcnlfbXBpX21fY2hlY2soIGdjcnlfbXBpX3QgYSApCit7CisgICAgX2djcnlfY2hlY2tfaGVhcChhKTsKKyAgICBfZ2NyeV9jaGVja19oZWFwKGEtPmQpOworfQorCitnY3J5X21waV90CitfZ2NyeV9tcGlfYWxsb2Nfc2VjdXJlKCB1bnNpZ25lZCBubGltYnMgKQoreworICAgIGdjcnlfbXBpX3QgYTsKKworICAgIGEgPSB4bWFsbG9jKCBzaXplb2YgKmEgKTsKKyAgICBhLT5kID0gbmxpbWJzPyBtcGlfYWxsb2NfbGltYl9zcGFjZSggbmxpbWJzLCAxICkgOiBOVUxMOworICAgIGEtPmFsbG9jZWQgPSBubGltYnM7CisgICAgYS0+ZmxhZ3MgPSAxOworICAgIGEtPm5saW1icyA9IDA7CisgICAgYS0+c2lnbiA9IDA7CisgICAgcmV0dXJuIGE7Cit9CisKKworCittcGlfcHRyX3QKK19nY3J5X21waV9hbGxvY19saW1iX3NwYWNlKCB1bnNpZ25lZCBpbnQgbmxpbWJzLCBpbnQgc2VjdXJlICkKK3sKKyAgICBtcGlfcHRyX3QgcDsKKyAgICBzaXplX3QgbGVuOworCisgICAgbGVuID0gKG5saW1icyA/IG5saW1icyA6IDEpICogc2l6ZW9mIChtcGlfbGltYl90KTsKKyAgICBwID0gc2VjdXJlID8geG1hbGxvY19zZWN1cmUgKGxlbikgOiB4bWFsbG9jIChsZW4pOworICAgIGlmICghIG5saW1icykKKyAgICAgICpwID0gMDsKKworICAgIHJldHVybiBwOworfQorCit2b2lkCitfZ2NyeV9tcGlfZnJlZV9saW1iX3NwYWNlKCBtcGlfcHRyX3QgYSwgdW5zaWduZWQgaW50IG5saW1icykKK3sKKyAgaWYgKGEpCisgICAgeworICAgICAgc2l6ZV90IGxlbiA9IG5saW1icyAqIHNpemVvZihtcGlfbGltYl90KTsKKworICAgICAgLyogSWYgd2UgaGF2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBsaW1icywgd2UKKyAgICAgICAgIGJldHRlciB3aXBlIHRoYXQgc3BhY2Ugb3V0LiAgVGhpcyBpcyBhIGZhaWxzYWZlIGZlYXR1cmUgaWYKKyAgICAgICAgIHNlY3VyZSBtZW1vcnkgaGFzIGJlZW4gZGlzYWJsZWQgb3Igd2FzIG5vdCBwcm9wZXJseQorICAgICAgICAgaW1wbGVtZW50ZWQgaW4gdXNlciBwcm92aWRlZCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gKi8KKyAgICAgIGlmIChsZW4pCisgICAgICAgIHdpcGVtZW1vcnkgKGEsIGxlbik7CisgICAgICB4ZnJlZShhKTsKKyAgICB9Cit9CisKKwordm9pZAorX2djcnlfbXBpX2Fzc2lnbl9saW1iX3NwYWNlKCBnY3J5X21waV90IGEsIG1waV9wdHJfdCBhcCwgdW5zaWduZWQgaW50IG5saW1icyApCit7CisgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UgKGEtPmQsIGEtPmFsbG9jZWQpOworICBhLT5kID0gYXA7CisgIGEtPmFsbG9jZWQgPSBubGltYnM7Cit9CisKKworCisvKioqKioqKioqKioqKioqKgorICogUmVzaXplIHRoZSBhcnJheSBvZiBBIHRvIE5MSU1CUy4gVGhlIGFkZGl0aW9uYWwgc3BhY2UgaXMgY2xlYXJlZAorICogKHNldCB0byAwKS4KKyAqLwordm9pZAorX2djcnlfbXBpX3Jlc2l6ZSAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBubGltYnMpCit7CisgIHNpemVfdCBpOworCisgIGlmIChubGltYnMgPD0gYS0+YWxsb2NlZCkKKyAgICB7CisgICAgICAvKiBXZSBvbmx5IG5lZWQgdG8gY2xlYXIgdGhlIG5ldyBzcGFjZSAodGhpcyBpcyBhIG5vcCBpZiB0aGUKKyAgICAgICAgIGxpbWIgc3BhY2UgaXMgYWxyZWFkeSBvZiB0aGUgY29ycmVjdCBzaXplLiAqLworICAgICAgZm9yIChpPWEtPm5saW1iczsgaSA8IGEtPmFsbG9jZWQ7IGkrKykKKyAgICAgICAgYS0+ZFtpXSA9IDA7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIEFjdHVhbGx5IHJlc2l6ZSB0aGUgbGltYiBzcGFjZS4gICovCisgIGlmIChhLT5kKQorICAgIHsKKyAgICAgIGEtPmQgPSB4cmVhbGxvYyAoYS0+ZCwgbmxpbWJzICogc2l6ZW9mIChtcGlfbGltYl90KSk7CisgICAgICBmb3IgKGk9YS0+YWxsb2NlZDsgaSA8IG5saW1iczsgaSsrKQorICAgICAgICBhLT5kW2ldID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoYS0+ZmxhZ3MgJiAxKQorCS8qIFNlY3VyZSBtZW1vcnkgaXMgd2FudGVkLiAgKi8KKwlhLT5kID0geGNhbGxvY19zZWN1cmUgKG5saW1icyAsIHNpemVvZiAobXBpX2xpbWJfdCkpOworICAgICAgZWxzZQorCS8qIFN0YW5kYXJkIG1lbW9yeS4gICovCisJYS0+ZCA9IHhjYWxsb2MgKG5saW1icyAsIHNpemVvZiAobXBpX2xpbWJfdCkpOworICAgIH0KKyAgYS0+YWxsb2NlZCA9IG5saW1iczsKK30KKwordm9pZAorX2djcnlfbXBpX2NsZWFyKCBnY3J5X21waV90IGEgKQoreworICBpZiAobXBpX2lzX2ltbXV0YWJsZSAoYSkpCisgICAgeworICAgICAgbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorICBhLT5ubGltYnMgPSAwOworICBhLT5mbGFncyA9IDA7Cit9CisKKwordm9pZAorX2djcnlfbXBpX2ZyZWUoIGdjcnlfbXBpX3QgYSApCit7CisgIGlmICghYSApCisgICAgcmV0dXJuOworICBpZiAoKGEtPmZsYWdzICYgMzIpKQorICAgIHJldHVybjsgLyogTmV2ZXIgcmVsZWFzZSBhIGNvbnN0YW50LiAqLworICBpZiAoKGEtPmZsYWdzICYgNCkpCisgICAgeGZyZWUoIGEtPmQgKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UoYS0+ZCwgYS0+YWxsb2NlZCk7CisgICAgfQorICAvKiBDaGVjayB0aGF0IHRoZSBmbGFncyBtYWtlcyBzZW5zZS4gIFdlIGJldHRlciBhbGxvdyBmb3IgYml0IDEKKyAgICAgKHZhbHVlIDIpIGZvciBiYWNrd2FyZCBBQkkgY29tcGF0aWJpbGl0eS4gICovCisgIGlmICgoYS0+ZmxhZ3MgJiB+KDF8Mnw0fDE2CisgICAgICAgICAgICAgICAgICAgIHxHQ1JZTVBJX0ZMQUdfVVNFUjEKKyAgICAgICAgICAgICAgICAgICAgfEdDUllNUElfRkxBR19VU0VSMgorICAgICAgICAgICAgICAgICAgICB8R0NSWU1QSV9GTEFHX1VTRVIzCisgICAgICAgICAgICAgICAgICAgIHxHQ1JZTVBJX0ZMQUdfVVNFUjQpKSkKKyAgICBsb2dfYnVnKCJpbnZhbGlkIGZsYWcgdmFsdWUgaW4gbXBpX2ZyZWVcbiIpOworICB4ZnJlZSAoYSk7Cit9CisKKwordm9pZAorX2djcnlfbXBpX2ltbXV0YWJsZV9mYWlsZWQgKHZvaWQpCit7CisgIGxvZ19pbmZvICgiV2FybmluZzogdHJ5aW5nIHRvIGNoYW5nZSBhbiBpbW11dGFibGUgTVBJXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAorbXBpX3NldF9zZWN1cmUoIGdjcnlfbXBpX3QgYSApCit7CisgIG1waV9wdHJfdCBhcCwgYnA7CisKKyAgaWYgKCAoYS0+ZmxhZ3MgJiAxKSApCisgICAgcmV0dXJuOworICBhLT5mbGFncyB8PSAxOworICBhcCA9IGEtPmQ7CisgIGlmICghYS0+bmxpbWJzKQorICAgIHsKKyAgICAgIGdjcnlfYXNzZXJ0ICghYXApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgYnAgPSBtcGlfYWxsb2NfbGltYl9zcGFjZSAoYS0+bmxpbWJzLCAxKTsKKyAgTVBOX0NPUFkoIGJwLCBhcCwgYS0+bmxpbWJzICk7CisgIGEtPmQgPSBicDsKKyAgX2djcnlfbXBpX2ZyZWVfbGltYl9zcGFjZSAoYXAsIGEtPmFsbG9jZWQpOworfQorCisKK2djcnlfbXBpX3QKK19nY3J5X21waV9zZXRfb3BhcXVlIChnY3J5X21waV90IGEsIHZvaWQgKnAsIHVuc2lnbmVkIGludCBuYml0cykKK3sKKyAgaWYgKCFhKQorICAgIGEgPSBtcGlfYWxsb2MoMCk7CisKKyAgaWYgKG1waV9pc19pbW11dGFibGUgKGEpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgIGlmKCBhLT5mbGFncyAmIDQgKQorICAgIHhmcmVlIChhLT5kKTsKKyAgZWxzZQorICAgIF9nY3J5X21waV9mcmVlX2xpbWJfc3BhY2UgKGEtPmQsIGEtPmFsbG9jZWQpOworCisgIGEtPmQgPSBwOworICBhLT5hbGxvY2VkID0gMDsKKyAgYS0+bmxpbWJzID0gMDsKKyAgYS0+c2lnbiAgPSBuYml0czsKKyAgYS0+ZmxhZ3MgPSA0IHwgKGEtPmZsYWdzICYgKEdDUllNUElfRkxBR19VU0VSMXxHQ1JZTVBJX0ZMQUdfVVNFUjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxHQ1JZTVBJX0ZMQUdfVVNFUjN8R0NSWU1QSV9GTEFHX1VTRVI0KSk7CisgIGlmIChfZ2NyeV9pc19zZWN1cmUgKGEtPmQpKQorICAgIGEtPmZsYWdzIHw9IDE7CisgIHJldHVybiBhOworfQorCisKK2djcnlfbXBpX3QKK19nY3J5X21waV9zZXRfb3BhcXVlX2NvcHkgKGdjcnlfbXBpX3QgYSwgY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IG5iaXRzKQoreworICB2b2lkICpkOworICB1bnNpZ25lZCBpbnQgbjsKKworICBuID0gKG5iaXRzKzcpLzg7CisgIGQgPSBfZ2NyeV9pc19zZWN1cmUgKHApPyB4dHJ5bWFsbG9jX3NlY3VyZSAobikgOiB4dHJ5bWFsbG9jIChuKTsKKyAgaWYgKCFkKQorICAgIHJldHVybiBOVUxMOworICBtZW1jcHkgKGQsIHAsIG4pOworICByZXR1cm4gbXBpX3NldF9vcGFxdWUgKGEsIGQsIG5iaXRzKTsKK30KKworCit2b2lkICoKK19nY3J5X21waV9nZXRfb3BhcXVlIChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCAqbmJpdHMpCit7CisgICAgaWYoICEoYS0+ZmxhZ3MgJiA0KSApCisJbG9nX2J1ZygibXBpX2dldF9vcGFxdWUgb24gbm9ybWFsIG1waVxuIik7CisgICAgaWYoIG5iaXRzICkKKwkqbmJpdHMgPSBhLT5zaWduOworICAgIHJldHVybiBhLT5kOworfQorCisKK3ZvaWQgKgorX2djcnlfbXBpX2dldF9vcGFxdWVfY29weSAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgKm5iaXRzKQoreworICBjb25zdCB2b2lkICpzOworICB2b2lkICpkOworICB1bnNpZ25lZCBpbnQgbjsKKworICBzID0gbXBpX2dldF9vcGFxdWUgKGEsIG5iaXRzKTsKKyAgaWYgKCFzICYmIG5iaXRzKQorICAgIHJldHVybiBOVUxMOworICBuID0gKCpuYml0cys3KS84OworICBkID0gX2djcnlfaXNfc2VjdXJlIChzKT8geHRyeW1hbGxvY19zZWN1cmUgKG4pIDogeHRyeW1hbGxvYyAobik7CisgIGlmIChkKQorICAgIG1lbWNweSAoZCwgcywgbik7CisgIHJldHVybiBkOworfQorCisvKioqKioqKioqKioqKioqKgorICogTm90ZTogVGhpcyBjb3B5IGZ1bmN0aW9uIHNob3VsZCBub3QgaW50ZXJwcmV0IHRoZSBNUEkKKyAqCSBidXQgY29weSBpdCB0cmFuc3BhcmVudGx5LgorICovCitnY3J5X21waV90CitfZ2NyeV9tcGlfY29weSAoZ2NyeV9tcGlfdCBhKQoreworICAgIGludCBpOworICAgIGdjcnlfbXBpX3QgYjsKKworICAgIGlmKCBhICYmIChhLT5mbGFncyAmIDQpICkgeworCXZvaWQgKnAgPSBfZ2NyeV9pc19zZWN1cmUoYS0+ZCk/IHhtYWxsb2Nfc2VjdXJlICgoYS0+c2lnbis3KS84KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB4bWFsbG9jICgoYS0+c2lnbis3KS84KTsKKwltZW1jcHkoIHAsIGEtPmQsIChhLT5zaWduKzcpLzggKTsKKwliID0gbXBpX3NldF9vcGFxdWUoIE5VTEwsIHAsIGEtPnNpZ24gKTsKKyAgICAgICAgYi0+ZmxhZ3MgJj0gfigxNnwzMik7IC8qIFJlc2V0IHRoZSBpbW11dGFibGUgYW5kIGNvbnN0YW50IGZsYWdzLiAgKi8KKyAgICB9CisgICAgZWxzZSBpZiggYSApIHsKKwliID0gbXBpX2lzX3NlY3VyZShhKT8gbXBpX2FsbG9jX3NlY3VyZSggYS0+bmxpbWJzICkKKwkJCSAgICA6IG1waV9hbGxvYyggYS0+bmxpbWJzICk7CisJYi0+bmxpbWJzID0gYS0+bmxpbWJzOworCWItPnNpZ24gPSBhLT5zaWduOworCWItPmZsYWdzICA9IGEtPmZsYWdzOworICAgICAgICBiLT5mbGFncyAmPSB+KDE2fDMyKTsgLyogUmVzZXQgdGhlIGltbXV0YWJsZSBhbmQgY29uc3RhbnQgZmxhZ3MuICAqLworCWZvcihpPTA7IGkgPCBiLT5ubGltYnM7IGkrKyApCisJICAgIGItPmRbaV0gPSBhLT5kW2ldOworICAgIH0KKyAgICBlbHNlCisJYiA9IE5VTEw7CisgICAgcmV0dXJuIGI7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgQSBpcyBuZWdhdGl2ZS4gICovCitpbnQKK19nY3J5X21waV9pc19uZWcgKGdjcnlfbXBpX3QgYSkKK3sKKyAgaWYgKGEtPnNpZ24gJiYgX2djcnlfbXBpX2NtcF91aSAoYSwgMCkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworCisvKiBXID0gLSBVICovCit2b2lkCitfZ2NyeV9tcGlfbmVnIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSkKK3sKKyAgaWYgKHcgIT0gdSkKKyAgICBtcGlfc2V0ICh3LCB1KTsKKyAgZWxzZSBpZiAobXBpX2lzX2ltbXV0YWJsZSAodykpCisgICAgeworICAgICAgbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHctPnNpZ24gPSAhdS0+c2lnbjsKK30KKworCisvKiBXID0gW1ddICovCit2b2lkCitfZ2NyeV9tcGlfYWJzIChnY3J5X21waV90IHcpCit7CisgIGlmIChtcGlfaXNfaW1tdXRhYmxlICh3KSkKKyAgICB7CisgICAgICBtcGlfaW1tdXRhYmxlX2ZhaWxlZCAoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgdy0+c2lnbiA9IDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuIE1QSSB3aGljaCBpcyBvcHRpbWl6ZWQgdG8gaG9sZAorICogYSB2YWx1ZSBhcyBsYXJnZSBhcyB0aGUgb25lIGdpdmVuIGluIHRoZSBhcmd1bWVudCBhbmQgYWxsb2NhdGVzIGl0CisgKiB3aXRoIHRoZSBzYW1lIGZsYWdzIGFzIEEuCisgKi8KK2djcnlfbXBpX3QKK19nY3J5X21waV9hbGxvY19saWtlKCBnY3J5X21waV90IGEgKQoreworICAgIGdjcnlfbXBpX3QgYjsKKworICAgIGlmKCBhICYmIChhLT5mbGFncyAmIDQpICkgeworCWludCBuID0gKGEtPnNpZ24rNykvODsKKwl2b2lkICpwID0gX2djcnlfaXNfc2VjdXJlKGEtPmQpPyB4dHJ5bWFsbG9jX3NlY3VyZSAobikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeHRyeW1hbGxvYyAobik7CisJbWVtY3B5KCBwLCBhLT5kLCBuICk7CisJYiA9IG1waV9zZXRfb3BhcXVlKCBOVUxMLCBwLCBhLT5zaWduICk7CisgICAgfQorICAgIGVsc2UgaWYoIGEgKSB7CisJYiA9IG1waV9pc19zZWN1cmUoYSk/IG1waV9hbGxvY19zZWN1cmUoIGEtPm5saW1icyApCisJCQkgICAgOiBtcGlfYWxsb2MoIGEtPm5saW1icyApOworCWItPm5saW1icyA9IDA7CisJYi0+c2lnbiA9IDA7CisJYi0+ZmxhZ3MgPSBhLT5mbGFnczsKKyAgICB9CisgICAgZWxzZQorCWIgPSBOVUxMOworICAgIHJldHVybiBiOworfQorCisKKy8qIFNldCBVIGludG8gVyBhbmQgcmVsZWFzZSBVLiAgSWYgVyBpcyBOVUxMIG9ubHkgVSB3aWxsIGJlIHJlbGVhc2VkLiAqLwordm9pZAorX2djcnlfbXBpX3NuYXRjaCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUpCit7CisgIGlmICh3KQorICAgIHsKKyAgICAgIGlmIChtcGlfaXNfaW1tdXRhYmxlICh3KSkKKyAgICAgICAgeworICAgICAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgX2djcnlfbXBpX2Fzc2lnbl9saW1iX3NwYWNlICh3LCB1LT5kLCB1LT5hbGxvY2VkKTsKKyAgICAgIHctPm5saW1icyA9IHUtPm5saW1iczsKKyAgICAgIHctPnNpZ24gICA9IHUtPnNpZ247CisgICAgICB3LT5mbGFncyAgPSB1LT5mbGFnczsKKyAgICAgIHUtPmFsbG9jZWQgPSAwOworICAgICAgdS0+bmxpbWJzID0gMDsKKyAgICAgIHUtPmQgPSBOVUxMOworICAgIH0KKyAgX2djcnlfbXBpX2ZyZWUgKHUpOworfQorCisKK2djcnlfbXBpX3QKK19nY3J5X21waV9zZXQgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1KQoreworICBtcGlfcHRyX3Qgd3AsIHVwOworICBtcGlfc2l6ZV90IHVzaXplID0gdS0+bmxpbWJzOworICBpbnQgdXNpZ24gPSB1LT5zaWduOworCisgIGlmICghdykKKyAgICB3ID0gX2djcnlfbXBpX2FsbG9jKCBtcGlfZ2V0X25saW1icyh1KSApOworICBpZiAobXBpX2lzX2ltbXV0YWJsZSAodykpCisgICAgeworICAgICAgbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCk7CisgICAgICByZXR1cm4gdzsKKyAgICB9CisgIFJFU0laRV9JRl9ORUVERUQodywgdXNpemUpOworICB3cCA9IHctPmQ7CisgIHVwID0gdS0+ZDsKKyAgTVBOX0NPUFkoIHdwLCB1cCwgdXNpemUgKTsKKyAgdy0+bmxpbWJzID0gdXNpemU7CisgIHctPmZsYWdzID0gdS0+ZmxhZ3M7CisgIHctPmZsYWdzICY9IH4oMTZ8MzIpOyAvKiBSZXNldCB0aGUgaW1tdXRhYmxlIGFuZCBjb25zdGFudCBmbGFncy4gICovCisgIHctPnNpZ24gPSB1c2lnbjsKKyAgcmV0dXJuIHc7Cit9CisKKworZ2NyeV9tcGlfdAorX2djcnlfbXBpX3NldF91aSAoZ2NyeV9tcGlfdCB3LCB1bnNpZ25lZCBsb25nIHUpCit7CisgIGlmICghdykKKyAgICB3ID0gX2djcnlfbXBpX2FsbG9jICgxKTsKKyAgLyogRklYTUU6IElmIFUgaXMgMCB3ZSBoYXZlIG5vIG5lZWQgdG8gcmVzaXplIGFuZCB0aHVzIHBvc3NpYmxlCisgICAgIGFsbG9jYXRpbmcgdGhlIHRoZSBsaW1icy4gKi8KKyAgaWYgKG1waV9pc19pbW11dGFibGUgKHcpKQorICAgIHsKKyAgICAgIG1waV9pbW11dGFibGVfZmFpbGVkICgpOworICAgICAgcmV0dXJuIHc7CisgICAgfQorICBSRVNJWkVfSUZfTkVFREVEKHcsIDEpOworICB3LT5kWzBdID0gdTsKKyAgdy0+bmxpbWJzID0gdT8gMTowOworICB3LT5zaWduID0gMDsKKyAgdy0+ZmxhZ3MgPSAwOworICByZXR1cm4gdzsKK30KKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9tcGlfZ2V0X3VpIChnY3J5X21waV90IHcsIHVuc2lnbmVkIGxvbmcgKnUpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlcnIgPSBHUEdfRVJSX05PX0VSUk9SOworICB1bnNpZ25lZCBsb25nIHggPSAwOworCisgIGlmICh3LT5ubGltYnMgPiAxKQorICAgIGVyciA9IEdQR19FUlJfVE9PX0xBUkdFOworICBlbHNlIGlmICh3LT5ubGltYnMgPT0gMSkKKyAgICB4ID0gdy0+ZFswXTsKKyAgZWxzZQorICAgIHggPSAwOworCisgIGlmICghIGVycikKKyAgICAqdSA9IHg7CisKKyAgcmV0dXJuIGVycjsKK30KKworCitnY3J5X21waV90CitfZ2NyeV9tcGlfYWxsb2Nfc2V0X3VpKCB1bnNpZ25lZCBsb25nIHUpCit7CisgICAgZ2NyeV9tcGlfdCB3ID0gbXBpX2FsbG9jKDEpOworICAgIHctPmRbMF0gPSB1OworICAgIHctPm5saW1icyA9IHU/IDE6MDsKKyAgICB3LT5zaWduID0gMDsKKyAgICByZXR1cm4gdzsKK30KKwordm9pZAorX2djcnlfbXBpX3N3YXAgKGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiKQoreworICAgIHN0cnVjdCBnY3J5X21waSB0bXA7CisKKyAgICB0bXAgPSAqYTsgKmEgPSAqYjsgKmIgPSB0bXA7Cit9CisKKworZ2NyeV9tcGlfdAorX2djcnlfbXBpX25ldyAodW5zaWduZWQgaW50IG5iaXRzKQoreworICAgIHJldHVybiBfZ2NyeV9tcGlfYWxsb2MgKCAobmJpdHMrQklUU19QRVJfTVBJX0xJTUItMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBCSVRTX1BFUl9NUElfTElNQiApOworfQorCisKK2djcnlfbXBpX3QKK19nY3J5X21waV9zbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfYWxsb2Nfc2VjdXJlICggKG5iaXRzK0JJVFNfUEVSX01QSV9MSU1CLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBCSVRTX1BFUl9NUElfTElNQiApOworfQorCit2b2lkCitfZ2NyeV9tcGlfcmVsZWFzZSggZ2NyeV9tcGlfdCBhICkKK3sKKyAgICBfZ2NyeV9tcGlfZnJlZSggYSApOworfQorCit2b2lkCitfZ2NyeV9tcGlfcmFuZG9taXplIChnY3J5X21waV90IHcsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBuYnl0ZXMgPSAobmJpdHMrNykvODsKKworICBpZiAobXBpX2lzX2ltbXV0YWJsZSAodykpCisgICAgeworICAgICAgbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAobGV2ZWwgPT0gR0NSWV9XRUFLX1JBTkRPTSkKKyAgICB7CisgICAgICBwID0gbXBpX2lzX3NlY3VyZSh3KSA/IHhtYWxsb2Nfc2VjdXJlIChuYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHhtYWxsb2MgKG5ieXRlcyk7CisgICAgICBfZ2NyeV9jcmVhdGVfbm9uY2UgKHAsIG5ieXRlcyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcCA9IG1waV9pc19zZWN1cmUodykgPyBfZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlIChuYnl0ZXMsIGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfZ2NyeV9yYW5kb21fYnl0ZXMgKG5ieXRlcywgbGV2ZWwpOworICAgIH0KKyAgX2djcnlfbXBpX3NldF9idWZmZXIoIHcsIHAsIG5ieXRlcywgMCApOworICB4ZnJlZSAocCk7Cit9CisKKwordm9pZAorX2djcnlfbXBpX3NldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKQoreworICBzd2l0Y2ggKGZsYWcpCisgICAgeworICAgIGNhc2UgR0NSWU1QSV9GTEFHX1NFQ1VSRTogICAgIG1waV9zZXRfc2VjdXJlKGEpOyBicmVhazsKKyAgICBjYXNlIEdDUllNUElfRkxBR19DT05TVDogICAgICBhLT5mbGFncyB8PSAoMTZ8MzIpOyBicmVhazsKKyAgICBjYXNlIEdDUllNUElfRkxBR19JTU1VVEFCTEU6ICBhLT5mbGFncyB8PSAxNjsgYnJlYWs7CisKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMToKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMjoKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMzoKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSNDogICAgICBhLT5mbGFncyB8PSBmbGFnOyBicmVhazsKKworICAgIGNhc2UgR0NSWU1QSV9GTEFHX09QQVFVRToKKyAgICBkZWZhdWx0OiBsb2dfYnVnKCJpbnZhbGlkIGZsYWcgdmFsdWVcbiIpOworICAgIH0KK30KKwordm9pZAorX2djcnlfbXBpX2NsZWFyX2ZsYWcgKGdjcnlfbXBpX3QgYSwgZW51bSBnY3J5X21waV9mbGFnIGZsYWcpCit7CisgICh2b2lkKWE7IC8qIE5vdCB5ZXQgdXNlZC4gKi8KKworICBzd2l0Y2ggKGZsYWcpCisgICAgeworICAgIGNhc2UgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRToKKyAgICAgIGlmICghKGEtPmZsYWdzICYgMzIpKQorICAgICAgICBhLT5mbGFncyAmPSB+MTY7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWU1QSV9GTEFHX1VTRVIxOgorICAgIGNhc2UgR0NSWU1QSV9GTEFHX1VTRVIyOgorICAgIGNhc2UgR0NSWU1QSV9GTEFHX1VTRVIzOgorICAgIGNhc2UgR0NSWU1QSV9GTEFHX1VTRVI0OgorICAgICAgYS0+ZmxhZ3MgJj0gfmZsYWc7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWU1QSV9GTEFHX0NPTlNUOgorICAgIGNhc2UgR0NSWU1QSV9GTEFHX1NFQ1VSRToKKyAgICBjYXNlIEdDUllNUElfRkxBR19PUEFRVUU6CisgICAgZGVmYXVsdDogbG9nX2J1ZygiaW52YWxpZCBmbGFnIHZhbHVlXG4iKTsKKyAgICB9Cit9CisKK2ludAorX2djcnlfbXBpX2dldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKQoreworICBzd2l0Y2ggKGZsYWcpCisgICAgeworICAgIGNhc2UgR0NSWU1QSV9GTEFHX1NFQ1VSRTogICAgcmV0dXJuICEhKGEtPmZsYWdzICYgMSk7CisgICAgY2FzZSBHQ1JZTVBJX0ZMQUdfT1BBUVVFOiAgICByZXR1cm4gISEoYS0+ZmxhZ3MgJiA0KTsKKyAgICBjYXNlIEdDUllNUElfRkxBR19JTU1VVEFCTEU6IHJldHVybiAhIShhLT5mbGFncyAmIDE2KTsKKyAgICBjYXNlIEdDUllNUElfRkxBR19DT05TVDogICAgIHJldHVybiAhIShhLT5mbGFncyAmIDMyKTsKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMToKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMjoKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSMzoKKyAgICBjYXNlIEdDUllNUElfRkxBR19VU0VSNDogICAgIHJldHVybiAhIShhLT5mbGFncyAmIGZsYWcpOworICAgIGRlZmF1bHQ6IGxvZ19idWcoImludmFsaWQgZmxhZyB2YWx1ZVxuIik7CisgICAgfQorICAvKk5PVFJFQUNIRUQqLworICByZXR1cm4gMDsKK30KKworCisvKiBSZXR1cm4gYSBjb25zdGFudCBNUEkgZGVzY3JpcGJlZCBieSBOTyB3aGljaCBpcyBvbmUgb2YgdGhlCisgICBNUElfQ194eHggbWFjcm9zLiAgVGhlcmUgaXMgbm8gbmVlZCB0byBjb3B5IHRoaXMgcmV0dXJuZWQgdmFsdWU7IGl0CisgICBtYXkgYmUgdXNlZCBkaXJlY3RseS4gICovCitnY3J5X21waV90CitfZ2NyeV9tcGlfY29uc3QgKGVudW0gZ2NyeV9tcGlfY29uc3RhbnRzIG5vKQoreworICBpZiAoKGludClubyA8IDAgfHwgbm8gPiBNUElfTlVNQkVSX09GX0NPTlNUQU5UUykKKyAgICBsb2dfYnVnKCJpbnZhbGlkIG1waV9jb25zdCBzZWxlY3RvciAlZFxuIiwgbm8pOworICBpZiAoIWNvbnN0YW50c1tub10pCisgICAgbG9nX2J1ZygiTVBJIHN1YnN5c3RlbSBub3QgaW5pdGlhbGl6ZWRcbiIpOworICByZXR1cm4gY29uc3RhbnRzW25vXTsKK30KZGlmZiAtLWdpdCBhL21waS9wYTcxMDAvTWFuaWZlc3QgYi9tcGkvcGE3MTAwL01hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzVhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGE3MTAwL01hbmlmZXN0CkBAIC0wLDAgKzEsMjIgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCittcGloLWxzaGlmdC5TCittcGloLXJzaGlmdC5TCiskbmFtZXMkIGlRQ1ZBd1VBUCtMbVZqRUFucDgzMlMvN0FRS2xFUVFBdjIreC9kK1owdDhGd3dIbHhLcElLT0pEcjllK1kyaTh5OG9yY0lFYTNkbndVNUxNT0gzRXpGb05TRDljcmMzMUZNb2tnbS9YNXhlTGpxUlRkY21HSHlKSlFKRFBKVkp5dWFPbTZxSEphRnp6ZkpqcmZNVzY2bkp4Zk5TWElpSW00RGdwUDIwTm11bWFvckxDa2lJWjVaODFLR0FjOEZpUmdnYlJWWXgrd3hvPT1Wamg5CmRpZmYgLS1naXQgYS9tcGkvcGE3MTAwL2Rpc3RmaWxlcyBiL21waS9wYTcxMDAvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxY2RlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGE3MTAwL2Rpc3RmaWxlcwpAQCAtMCwwICsxLDQgQEAKK01hbmlmZXN0CittcGloLWxzaGlmdC5TCittcGloLXJzaGlmdC5TCisKZGlmZiAtLWdpdCBhL21waS9wYTcxMDAvbXBpaC1sc2hpZnQuUyBiL21waS9wYTcxMDAvbXBpaC1sc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRlMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL3BhNzEwMC9tcGloLWxzaGlmdC5TCkBAIC0wLDAgKzEsOTYgQEAKKy8qIGhwcGEgICBsc2hpZnQKKyAqCSAgb3B0aW1pemVkIGZvciB0aGUgUEE3MTAwLCB3aGVyZSBpdCBydW5zIGF0IDMuMjUgY3ljbGVzL2xpbWIKKyAqIAorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTgsIAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9sc2hpZnQoIG1waV9wdHJfdCB3cCwJKGdyMjYpCisgKgkJICAgbXBpX3B0cl90IHVwLAkoZ3IyNSkKKyAqCQkgICBtcGlfc2l6ZV90IHVzaXplLAkoZ3IyNCkKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShncjIzKQorICovCisKKwkuY29kZQorCS5leHBvcnQgCV9nY3J5X21waWhfbHNoaWZ0CisJLmxhYmVsCQlfZ2NyeV9tcGloX2xzaGlmdAorCS5wcm9jCisJLmNhbGxpbmZvCWZyYW1lPTY0LG5vX2NhbGxzCisJLmVudHJ5CisKKwlzaDJhZGQJCSVyMjQsJXIyNSwlcjI1CisJc2gyYWRkCQklcjI0LCVyMjYsJXIyNgorCWxkd3MsbWIgCS00KDAsJXIyNSksJXIyMgorCXN1YmkJCTMyLCVyMjMsJXIxCisJbXRzYXIJCSVyMQorCWFkZGliLD0gCS0xLCVyMjQsTCQwMDA0CisJdnNoZAkJJXIwLCVyMjIsJXIyOAkJOyBjb21wdXRlIGNhcnJ5IG91dCBsaW1iCisJbGR3cyxtYiAJLTQoMCwlcjI1KSwlcjI5CisJYWRkaWIsPD0JLTUsJXIyNCxMJHJlc3QKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCisJLmxhYmVsCUwkbG9vcAorCWxkd3MsbWIgCS00KDAsJXIyNSksJXIyMgorCXN0d3MsbWIgCSVyMjAsLTQoMCwlcjI2KQorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisJbGR3cyxtYiAJLTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYiAJJXIyMCwtNCgwLCVyMjYpCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKwlsZHdzLG1iIAktNCgwLCVyMjUpLCVyMjIKKwlzdHdzLG1iIAklcjIwLC00KDAsJXIyNikKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCWxkd3MsbWIgCS00KDAsJXIyNSksJXIyOQorCXN0d3MsbWIgCSVyMjAsLTQoMCwlcjI2KQorCWFkZGliLD4gCS00LCVyMjQsTCRsb29wCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKworCS5sYWJlbAlMJHJlc3QKKwlhZGRpYiw9IAk0LCVyMjQsTCRlbmQxCisJbm9wCisJLmxhYmVsCUwkZWxvb3AKKwlsZHdzLG1iIAktNCgwLCVyMjUpLCVyMjIKKwlzdHdzLG1iIAklcjIwLC00KDAsJXIyNikKKwlhZGRpYiw8PQktMSwlcjI0LEwkZW5kMgorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisJbGR3cyxtYiAJLTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYiAJJXIyMCwtNCgwLCVyMjYpCisJYWRkaWIsPiAJLTEsJXIyNCxMJGVsb29wCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKworCS5sYWJlbAlMJGVuZDEKKwlzdHdzLG1iIAklcjIwLC00KDAsJXIyNikKKwl2c2hkCQklcjI5LCVyMCwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwtNCgwLCVyMjYpCisJLmxhYmVsCUwkZW5kMgorCXN0d3MsbWIgCSVyMjAsLTQoMCwlcjI2KQorCS5sYWJlbAlMJDAwMDQKKwl2c2hkCQklcjIyLCVyMCwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwtNCgwLCVyMjYpCisKKwkuZXhpdAorCS5wcm9jZW5kCisKKworCmRpZmYgLS1naXQgYS9tcGkvcGE3MTAwL21waWgtcnNoaWZ0LlMgYi9tcGkvcGE3MTAwL21waWgtcnNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyNDIwMgotLS0gL2Rldi9udWxsCisrKyBiL21waS9wYTcxMDAvbXBpaC1yc2hpZnQuUwpAQCAtMCwwICsxLDkyIEBACisvKiBocHBhICAgcnNoaWZ0CisgKgkgIG9wdGltaXplZCBmb3IgdGhlIFBBNzEwMCwgd2hlcmUgaXQgcnVucyBhdCAzLjI1IGN5Y2xlcy9saW1iCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3JzaGlmdCggbXBpX3B0cl90IHdwLCAgICAgICAoZ3IyNikKKyAqCQkgICBtcGlfcHRyX3QgdXAsICAgICAgIChncjI1KQorICoJCSAgIG1waV9zaXplX3QgdXNpemUsICAgKGdyMjQpCisgKgkJICAgdW5zaWduZWQgY250KSAgICAgICAoZ3IyMykKKyAqLworCisJLmNvZGUKKwkuZXhwb3J0IAlfZ2NyeV9tcGloX3JzaGlmdAorCS5sYWJlbAkJX2djcnlfbXBpaF9yc2hpZnQKKwkucHJvYworCS5jYWxsaW5mbwlmcmFtZT02NCxub19jYWxscworCS5lbnRyeQorCisJbGR3cyxtYSAJNCgwLCVyMjUpLCVyMjIKKwltdHNhcgkJJXIyMworCWFkZGliLD0gCS0xLCVyMjQsTCRyMDA0CisJdnNoZAkJJXIyMiwlcjAsJXIyOAkJOyBjb21wdXRlIGNhcnJ5IG91dCBsaW1iCisJbGR3cyxtYSAJNCgwLCVyMjUpLCVyMjkKKwlhZGRpYiw8PQktNSwlcjI0LEwkcnJlc3QKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCisJLmxhYmVsCUwkcm9vcAorCWxkd3MsbWEgCTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWEgCTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYSAJJXIyMCw0KDAsJXIyNikKKwlhZGRpYiw+IAktNCwlcjI0LEwkcm9vcAorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisKKwkubGFiZWwJTCRycmVzdAorCWFkZGliLD0gCTQsJXIyNCxMJHJlbmQxCisJbm9wCisJLmxhYmVsCUwkZXJvb3AKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyMgorCXN0d3MsbWEgCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPD0JLTEsJXIyNCxMJHJlbmQyCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKwlsZHdzLG1hIAk0KDAsJXIyNSksJXIyOQorCXN0d3MsbWEgCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPiAJLTEsJXIyNCxMJGVyb29wCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKworCS5sYWJlbAlMJHJlbmQxCisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjAsJXIyOSwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwwKDAsJXIyNikKKwkubGFiZWwJTCRyZW5kMgorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJLmxhYmVsCUwkcjAwNAorCXZzaGQJCSVyMCwlcjIyLCVyMjAKKwlidgkJMCglcjIpCisJc3R3CQklcjIwLDAoMCwlcjI2KQorCisJLmV4aXQKKwkucHJvY2VuZAorCisKZGlmZiAtLWdpdCBhL21waS9wZW50aXVtNC9SRUFETUUgYi9tcGkvcGVudGl1bTQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWZjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGVudGl1bTQvUkVBRE1FCkBAIC0wLDAgKzEsMTE1IEBACitDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorMDIxMTAtMTMwMSwgVVNBLgorCisKKworCisgICAgICAgICAgICAgICAgICAgSU5URUwgUEVOVElVTS00IE1QTiBTVUJST1VUSU5FUworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBJbnRlbCBQZW50aXVtLTQuCisKK1RoZSBtbXggc3ViZGlyZWN0b3J5IGhhcyByb3V0aW5lcyB1c2luZyBNTVggaW5zdHJ1Y3Rpb25zLCB0aGUgc3NlMgorc3ViZGlyZWN0b3J5IGhhcyByb3V0aW5lcyB1c2luZyBTU0UyIGluc3RydWN0aW9ucy4gIEFsbCBQNHMgaGF2ZSB0aGVzZSwgdGhlCitzZXBhcmF0ZSBkaXJlY3RvcmllcyBhcmUganVzdCBzbyBjb25maWd1cmUgY2FuIG9taXQgdGhhdCBjb2RlIGlmIHRoZQorYXNzZW1ibGVyIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCitTVEFUVVMKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorCisJbXBuX2FkZF9uL3N1Yl9uICAgICAgICAgICAgNCBub3JtYWwsIDYgaW4tcGxhY2UKKworCW1wbl9tdWxfMSAgICAgICAgICAgICAgICAgIDQgbm9ybWFsLCA2IGluLXBsYWNlCisJbXBuX2FkZG11bF8xICAgICAgICAgICAgICAgNgorCW1wbl9zdWJtdWxfMSAgICAgICAgICAgICAgIDcKKworCW1wbl9tdWxfYmFzZWNhc2UgICAgICAgICAgIDYgY3ljbGVzL2Nyb3NzcHJvZHVjdCAoYXBwcm94KQorCisJbXBuX3Nxcl9iYXNlY2FzZSAgICAgICAgICAgMy41IGN5Y2xlcy9jcm9zc3Byb2R1Y3QgKGFwcHJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgNy4wIGN5Y2xlcy90cmlhbmdsZXByb2R1Y3QgKGFwcHJveCkKKworCW1wbl9sL3JzaGlmdCAgICAgICAgICAgICAgIDEuNzUKKworCisKK1RoZSBzaGlmdHMgb3VnaHQgdG8gYmUgYWJsZSB0byBnbyBhdCAxLjUgYy9sLCBidXQgbm90IG11Y2ggZWZmb3J0IGhhcyBiZWVuCithcHBsaWVkIHRvIHRoZW0geWV0LgorCitJbi1wbGFjZSBvcGVyYXRpb25zLCBhbmQgYWxsIGFkZG11bCwgc3VibXVsLCBtdWxfYmFzZWNhc2UgYW5kIHNxcl9iYXNlY2FzZQorY2FsbHMsIHN1ZmZlciBmcm9tIHBpcGVsaW5lIGFub21hbGllcyBhc3NvY2lhdGVkIHdpdGggd3JpdGUgY29tYmluaW5nIGFuZAorbW92ZCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBzYW1lIG9yIG5lYXJieSBsb2NhdGlvbnMuICBUaGUgbW92cQoraW5zdHJ1Y3Rpb25zIGRvIG5vdCB0cmlnZ2VyIHRoZSBzYW1lIGhhcmR3YXJlIHByb2JsZW1zLiAgVW5mb3J0dW5hdGVseSwKK3VzaW5nIG1vdnEgYW5kIHNwbGl0dGluZy9jb21iaW5pbmcgc2VlbXMgdG8gcmVxdWlyZSB0b28gbWFueSBleHRyYQoraW5zdHJ1Y3Rpb25zIHRvIGhlbHAuICBQZXJoYXBzIGZ1dHVyZSBjaGlwIHN0ZXBwaW5ncyB3aWxsIGJlIGJldHRlci4KKworCisKK05PVEVTCisKK1RoZSBQZW50aXVtLTQgcGlwZWxpbmUgIk5ldGJ1cnN0IiwgcHJvdmlkZXMgZm9yIHF1aXRlIGEgbnVtYmVyIG9mIHN1cnByaXNlcy4KK01hbnkgdHJhZGl0aW9uYWwgeDg2IGluc3RydWN0aW9ucyBydW4gdmVyeSBzbG93bHksIHJlcXVpcmluZyB1c2Ugb2YKK2FsdGVyYXRpdmUgaW5zdHJ1Y3Rpb25zIGZvciBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlLgorCithZGNsIGFuZCBzYmJsIGFyZSBxdWl0ZSBzbG93IGF0IDggY3ljbGVzIGZvciByZWctPnJlZy4gIHBhZGRxIG9mIDMyLWJpdHMKK3dpdGhpbiBhIDY0LWJpdCBtbXggcmVnaXN0ZXIgc2VlbXMgYmV0dGVyLCB0aG91Z2ggdGhlIGNvbWJpbmF0aW9uCitwYWRkcS9wc3JscSB3aGVuIHByb3BhZ2F0aW5nIGEgY2FycnkgaXMgc3RpbGwgYSA0IGN5Y2xlIGxhdGVuY3kuCisKK2luY2wgYW5kIGRlY2wgc2hvdWxkIGJlIGF2b2lkZWQsIGluc3RlYWQgdXNlIGFkZCAkMSBhbmQgc3ViICQxLiAgQXBwYXJlbnRseQordGhlIGNhcnJ5IGZsYWcgaXMgbm90IHNlcGFyYXRlbHkgcmVuYW1lZCwgc28gaW5jbCBhbmQgZGVjbCBkZXBlbmQgb24gYWxsCitwcmV2aW91cyBmbGFncy1zZXR0aW5nIGluc3RydWN0aW9ucy4KKworc2hsbCBhbmQgc2hybCBoYXZlIGEgNCBjeWNsZSBsYXRlbmN5LCBvciA4IHRpbWVzIHRoZSBsYXRlbmN5IG9mIHRoZSBmYXN0ZXN0CitpbnRlZ2VyIGluc3RydWN0aW9ucyAoYWRkbCwgc3VibCwgb3JsLCBhbmRsLCBhbmQgc29tZSBtb3JlKS4gIHNobGRsIGFuZAorc2hyZGwgc2VlbSB0byBoYXZlIDEzIGFuZCAxNSBjeWNsZXMgbGF0ZW5jeSwgcmVzcGVjdGl2ZWx5LiAgQml6YXJyZS4KKworbW92cSBtbXggLT4gbW14IGRvZXMgaGF2ZSA2IGN5Y2xlIGxhdGVuY3ksIGFzIG5vdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorcHhvci9wb3Igb3Igc2ltaWxhciBjb21iaW5hdGlvbiBhdCAyIGN5Y2xlcyBsYXRlbmN5IGNhbiBiZSB1c2VkIGluc3RlYWQuCitUaGUgbW92cSBob3dldmVyIGV4ZWN1dGVzIGluIHRoZSBmbG9hdCB1bml0LCB0aGVyZWJ5IHNhdmluZyBNTVggZXhlY3V0aW9uCityZXNvdXJjZXMuICBXaXRoIHRoZSByaWdodCBqdWdnbGluZywgZGF0YSBtb3ZlcyBzaG91bGRuJ3QgYmUgb24gYSBkZXBlbmRlbnQKK2NoYWluLgorCitMMSBpcyB3cml0ZS10aHJvdWdoLCBidXQgdGhlIHdyaXRlLWNvbWJpbmluZyBzb3VuZHMgbGlrZSBpdCBkb2VzIGVub3VnaCB0bworbm90IHJlcXVpcmUgZXhwbGljaXQgZGVzdGluYXRpb24gcHJlZmV0Y2hpbmcuCisKK3htbSByZWdpc3RlcnMgc28gZmFyIGhhdmVuJ3QgZm91bmQgYSB1c2UsIGJ1dCBub3QgbXVjaCBlZmZvcnQgaGFzIGJlZW4KK2V4cGVuZGVkLiAgQSBjb25maWd1cmUgdGVzdCBmb3Igd2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBrbm93cworZnhzYXZlL2Z4cmVzdG9yIHdpbGwgYmUgbmVlZGVkIGlmIHRoZXkncmUgdXNlZC4KKworCisKK1JFRkVSRU5DRVMKKworSW50ZWwgUGVudGl1bS00IHByb2Nlc3NvciBtYW51YWxzLAorCisJaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL3BlbnRpdW00L21hbnVhbHMKKworIkludGVsIFBlbnRpdW0gNCBQcm9jZXNzb3IgT3B0aW1pemF0aW9uIFJlZmVyZW5jZSBNYW51YWwiLCBJbnRlbCwgMjAwMSwKK29yZGVyIG51bWJlciAyNDg5NjYuICBBdmFpbGFibGUgb24tbGluZToKKworCWh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9wZW50aXVtNC9tYW51YWxzLzI0ODk2Ni5odG0KKworCisKKy0tLS0tLS0tLS0tLS0tLS0KK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHRleHQKK2ZpbGwtY29sdW1uOiA3NgorRW5kOgpkaWZmIC0tZ2l0IGEvbXBpL3BlbnRpdW00L2Rpc3RmaWxlcyBiL21waS9wZW50aXVtNC9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxOWY4NQotLS0gL2Rldi9udWxsCisrKyBiL21waS9wZW50aXVtNC9kaXN0ZmlsZXMKQEAgLTAsMCArMSwzIEBACitSRUFETUUKKworCmRpZmYgLS1naXQgYS9tcGkvcGVudGl1bTQvbW14L2Rpc3RmaWxlcyBiL21waS9wZW50aXVtNC9tbXgvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMGVhNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGVudGl1bTQvbW14L2Rpc3RmaWxlcwpAQCAtMCwwICsxLDIgQEAKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKZGlmZiAtLWdpdCBhL21waS9wZW50aXVtNC9tbXgvbXBpaC1sc2hpZnQuUyBiL21waS9wZW50aXVtNC9tbXgvbXBpaC1sc2hpZnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmRkMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL3BlbnRpdW00L21teC9tcGloLWxzaGlmdC5TCkBAIC0wLDAgKzEsNDU3IEBACisvKiBJbnRlbCBQZW50aXVtLTQgbXBuX2xzaGlmdCAtLSBsZWZ0IHNoaWZ0LgorICoKKyAqIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2xzaGlmdCggbXBpX3B0cl90IHdwLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCB1cCwJKHNwICsgOCkKKyAqCQkgICBtcGlfc2l6ZV90IHVzaXplLAkoc3AgKyAxMikKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShzcCArIDE2KQorICoKKyAqIFA0IFdpbGxhbWV0dGUsIE5vcnRod29vZDogMS43NSBjeWNsZXMvbGltYgorICogUDQgUHJlc2NvdHQ6CQkgICAgIDIuMCBjeWNsZXMvbGltYgorICovCisKKy50ZXh0CisJQUxJR04gKDMpCisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9sc2hpZnQpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbHNoaWZ0OikKKworCQorCXB1c2hsCSVlYngKKwlwdXNobAklZWRpCisKKworCW1vdmwJMjAoJWVzcCksICVlYXgKKwltb3ZsCTEyKCVlc3ApLCAlZWR4CisKKwltb3ZsCTE2KCVlc3ApLCAlZWJ4CisJbW92bAkyNCglZXNwKSwgJWVjeAorCisJY21wCSQ1LCAlZWF4CisJamFlCS5MdW5yb2xsCisKKwltb3ZsCS00KCVlYngsJWVheCw0KSwgJWVkaQkKKwlkZWNsCSVlYXgKKworCWpuegkuTHNpbXBsZQorCisJc2hsZGwJJWNsLCAlZWRpLCAlZWF4CQorCisJc2hsbAklY2wsICVlZGkKKworCW1vdmwJJWVkaSwgKCVlZHgpCQkKKwlwb3BsCSVlZGkJCQkKKworCXBvcGwJJWVieAorCisJcmV0CisKKworCisKKworLkxzaW1wbGU6CisJCisJCisJCisJCisJCisJCisJCisKKworCW1vdmQJKCVlYngsJWVheCw0KSwgJW1tNQkKKworCW1vdmQJJWVjeCwgJW1tNgkJCisJbmVnbAklZWN4CisKKwlwc2xscQklbW02LCAlbW01CisJYWRkbAkkMzIsICVlY3gKKworCW1vdmQJJWVjeCwgJW1tNworCXBzcmxxCSQzMiwgJW1tNQkJCisKKworLkxzaW1wbGVfdG9wOgorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisJbW92cQktNCglZWJ4LCVlYXgsNCksICVtbTAKKwlkZWNsCSVlYXgKKworCXBzcmxxCSVtbTcsICVtbTAKKworCQorCisJbW92ZAklbW0wLCA0KCVlZHgsJWVheCw0KQorCWpuegkuTHNpbXBsZV90b3AKKworCisJbW92ZAkoJWVieCksICVtbTAKKworCW1vdmQJJW1tNSwgJWVheAorCXBzbGxxCSVtbTYsICVtbTAKKworCXBvcGwJJWVkaQorCXBvcGwJJWVieAorCisJbW92ZAklbW0wLCAoJWVkeCkKKworCWVtbXMKKworCXJldAorCisKKworCisKKwkuYWxpZ24JOCwgMHg5MAorLkx1bnJvbGw6CisJCisJCisJCisJCisJCisJCisJCisKKworCW1vdmQJLTQoJWVieCwlZWF4LDQpLCAlbW01CQorCWxlYWwJKCVlYngsJWVheCw0KSwgJWVkaQorCisJbW92ZAklZWN4LCAlbW02CQkKKwlhbmRsCSQ0LCAlZWRpCisKKwlwc2xscQklbW02LCAlbW01CisJanoJLkxzdGFydF9zcmNfYWxpZ25lZAorCisKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKworCW1vdnEJLTgoJWVieCwlZWF4LDQpLCAlbW0wCQorCisJcHNsbHEJJW1tNiwgJW1tMAorCWRlY2wJJWVheAorCisJcHNybHEJJDMyLCAlbW0wCisKKwkKKworCW1vdmQJJW1tMCwgKCVlZHgsJWVheCw0KQorLkxzdGFydF9zcmNfYWxpZ25lZDoKKworCW1vdnEJLTgoJWVieCwlZWF4LDQpLCAlbW0xCQorCWxlYWwJKCVlZHgsJWVheCw0KSwgJWVkaQorCisJYW5kbAkkNCwgJWVkaQorCXBzcmxxCSQzMiwgJW1tNQkJCisKKwltb3ZxCS0xNiglZWJ4LCVlYXgsNCksICVtbTMJCisJanoJLkxzdGFydF9kc3RfYWxpZ25lZAorCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisKKwltb3ZxCSVtbTEsICVtbTAKKwlhZGRsCSQzMiwgJWVjeAkJCisKKwlwc2xscQklbW02LCAlbW0wCisKKwltb3ZkCSVlY3gsICVtbTYKKwlwc3JscQkkMzIsICVtbTAKKworCQorCisJbW92ZAklbW0wLCAtNCglZWR4LCVlYXgsNCkKKwlzdWJsCSQ0LCAlZWR4CisuTHN0YXJ0X2RzdF9hbGlnbmVkOgorCisKKwlwc2xscQklbW02LCAlbW0xCisJbmVnbAklZWN4CQkJCisKKwlhZGRsCSQ2NCwgJWVjeAkJCisJbW92cQklbW0zLCAlbW0yCisKKwltb3ZkCSVlY3gsICVtbTcKKwlzdWJsCSQ4LCAlZWF4CQkKKworCXBzcmxxCSVtbTcsICVtbTMKKworCXBvcgklbW0xLCAlbW0zCQkKKwlqYwkuTGZpbmlzaAorCisKKwkKKworCS5hbGlnbgk4LCAweDkwCisuTHVucm9sbF9sb29wOgorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisJbW92cQk4KCVlYngsJWVheCw0KSwgJW1tMAorCXBzbGxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzcmxxCSVtbTcsICVtbTAKKworCW1vdnEJJW1tMywgMjQoJWVkeCwlZWF4LDQpCQorCXBvcgklbW0yLCAlbW0wCisKKwltb3ZxCSglZWJ4LCVlYXgsNCksICVtbTMJCisJcHNsbHEJJW1tNiwgJW1tMQkJCisKKwltb3ZxCSVtbTAsIDE2KCVlZHgsJWVheCw0KQorCW1vdnEJJW1tMywgJW1tMgkJCisKKwlwc3JscQklbW03LCAlbW0zCQkKKwlzdWJsCSQ0LCAlZWF4CisKKwlwb3IJJW1tMSwgJW1tMwkJCisJam5jCS5MdW5yb2xsX2xvb3AKKworCisKKy5MZmluaXNoOgorCQorCisJdGVzdGIJJDIsICVhbAorCisJanoJLkxmaW5pc2hfbm9fdHdvCisKKwltb3ZxCTgoJWVieCwlZWF4LDQpLCAlbW0wCisJcHNsbHEJJW1tNiwgJW1tMgorCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJW1tNywgJW1tMAorCisJbW92cQklbW0zLCAyNCglZWR4LCVlYXgsNCkJCisJcG9yCSVtbTIsICVtbTAKKworCW1vdnEJJW1tMSwgJW1tMgorCW1vdnEJJW1tMCwgJW1tMworCisJc3VibAkkMiwgJWVheAorLkxmaW5pc2hfbm9fdHdvOgorCisKKwkKKwkKKwkKKwkKKworCXRlc3RiCSQxLCAlYWwKKwltb3ZkCSVtbTUsICVlYXgJCisKKwlwb3BsCSVlZGkKKwlqegkuTGZpbmlzaF96ZXJvCisKKworCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKworCisJCisJCisJCisJCisKKworCW1vdmQJKCVlYngpLCAlbW0wCisJcHNsbHEJJW1tNiwgJW1tMgorCisJbW92cQklbW0zLCAxMiglZWR4KQorCXBzbGxxCSQzMiwgJW1tMAorCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJW1tNywgJW1tMAorCisJcG9yCSVtbTIsICVtbTAKKwlwc2xscQklbW02LCAlbW0xCisKKwltb3ZxCSVtbTAsIDQoJWVkeCkKKwlwc3JscQkkMzIsICVtbTEKKworCWFuZGwJJDMyLCAlZWN4CisJcG9wbAklZWJ4CisKKwlqegkuTGZpbmlzaF9vbmVfdW5hbGlnbmVkCisKKwltb3ZkCSVtbTEsICglZWR4KQorLkxmaW5pc2hfb25lX3VuYWxpZ25lZDoKKworCWVtbXMKKworCXJldAorCisKKworCisuTGZpbmlzaF96ZXJvOgorCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisKKworCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisKKwkKKwkKKworCisJbW92cQklbW0zLCA4KCVlZHgpCisJYW5kbAkkMzIsICVlY3gKKworCXBzbGxxCSVtbTYsICVtbTIKKwlqegkuTGZpbmlzaF96ZXJvX3VuYWxpZ25lZAorCisJbW92cQklbW0yLCAoJWVkeCkKKy5MZmluaXNoX3plcm9fdW5hbGlnbmVkOgorCisJcHNybHEJJDMyLCAlbW0yCisJcG9wbAklZWJ4CisKKwltb3ZkCSVtbTUsICVlYXgJCisKKwltb3ZkCSVtbTIsIDQoJWVkeCkKKworCWVtbXMKKworCXJldApkaWZmIC0tZ2l0IGEvbXBpL3BlbnRpdW00L21teC9tcGloLXJzaGlmdC5TIGIvbXBpL3BlbnRpdW00L21teC9tcGloLXJzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzc0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGVudGl1bTQvbW14L21waWgtcnNoaWZ0LlMKQEAgLTAsMCArMSw0NTMgQEAKKy8qIEludGVsIFBlbnRpdW0tNCBtcG5fcnNoaWZ0IC0tIHJpZ2h0IHNoaWZ0LgorICoKKyAqIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3JzaGlmdCggbXBpX3B0cl90IHdwLAkoc3AgKyA0KQorICoJCSAgIG1waV9wdHJfdCB1cCwJKHNwICsgOCkKKyAqCQkgICBtcGlfc2l6ZV90IHVzaXplLAkoc3AgKyAxMikKKyAqCQkgICB1bnNpZ25lZCBjbnQpCShzcCArIDE2KQorICoKKyAqIFA0IFdpbGxhbWV0dGUsIE5vcnRod29vZDogMS43NSBjeWNsZXMvbGltYgorICogUDQgUHJlc2NvdHQ6CQkgICAgIDIuMCBjeWNsZXMvbGltYgorICovCisKKy50ZXh0CisJQUxJR04gKDMpCisJLmdsb2JsIENfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9yc2hpZnQpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfcnNoaWZ0OikKKwlwdXNobAklZWJ4CisJcHVzaGwJJWVkaQorCisKKwltb3ZsCTIwKCVlc3ApLCAlZWF4CisJbW92bAkxMiglZXNwKSwgJWVkeAorCisJbW92bAkxNiglZXNwKSwgJWVieAorCW1vdmwJMjQoJWVzcCksICVlY3gKKworCWNtcAkkNSwgJWVheAorCWphZQkuTHVucm9sbAorCisJZGVjbAklZWF4CisJbW92bAkoJWVieCksICVlZGkJCQorCisJam56CS5Mc2ltcGxlCisKKwlzaHJkbAklY2wsICVlZGksICVlYXgJCisKKwlzaHJsCSVjbCwgJWVkaQorCisJbW92bAklZWRpLCAoJWVkeCkJCQorCXBvcGwJJWVkaQkJCQorCisJcG9wbAklZWJ4CisKKwlyZXQKKworCisKKworCisJLmFsaWduCTgsIDB4OTAKKy5Mc2ltcGxlOgorCQorCQorCQorCQorCQorCQorCQorCisKKwltb3ZkCSglZWJ4KSwgJW1tNQkJCisJbGVhbAkoJWVieCwlZWF4LDQpLCAlZWJ4CQorCisJbW92ZAklZWN4LCAlbW02CQkKKwlsZWFsCS00KCVlZHgsJWVheCw0KSwgJWVkeAkKKworCXBzbGxxCSQzMiwgJW1tNQorCW5lZ2wJJWVheAorCisKKworCisKKworCisuTHNpbXBsZV90b3A6CisJCisJCisJCisJCisJCisJCisJCisJCisKKwltb3ZxCSglZWJ4LCVlYXgsNCksICVtbTAKKwlpbmNsCSVlYXgKKworCXBzcmxxCSVtbTYsICVtbTAKKworCW1vdmQJJW1tMCwgKCVlZHgsJWVheCw0KQorCWpuegkuTHNpbXBsZV90b3AKKworCisJbW92ZAkoJWVieCksICVtbTAKKwlwc3JscQklbW02LCAlbW01CQkKKworCXBzcmxxCSVtbTYsICVtbTAKKwlwb3BsCSVlZGkKKworCW1vdmQJJW1tNSwgJWVheAorCXBvcGwJJWVieAorCisJbW92ZAklbW0wLCA0KCVlZHgpCisKKwllbW1zCisKKwlyZXQKKworCisKKworCisJLmFsaWduCTgsIDB4OTAKKy5MdW5yb2xsOgorCQorCQorCQorCQorCQorCQorCQorCisKKwltb3ZkCSglZWJ4KSwgJW1tNQkJCisJbW92bAkkNCwgJWVkaQorCisJbW92ZAklZWN4LCAlbW02CQkKKwl0ZXN0bAklZWRpLCAlZWJ4CisKKwlwc2xscQkkMzIsICVtbTUKKwlqegkuTHN0YXJ0X3NyY19hbGlnbmVkCisKKworCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisJbW92cQkoJWVieCksICVtbTAJCQorCisJcHNybHEJJW1tNiwgJW1tMAorCWFkZGwJJDQsICVlYngKKworCWRlY2wJJWVheAorCisJbW92ZAklbW0wLCAoJWVkeCkKKwlhZGRsCSQ0LCAlZWR4CisuTHN0YXJ0X3NyY19hbGlnbmVkOgorCisKKwltb3ZxCSglZWJ4KSwgJW1tMQorCXRlc3RsCSVlZGksICVlZHgKKworCXBzcmxxCSVtbTYsICVtbTUJCQorCWp6CS5Mc3RhcnRfZHN0X2FsaWduZWQKKworCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisJbW92cQklbW0xLCAlbW0wCisJYWRkbAkkMzIsICVlY3gJCQorCisJcHNybHEJJW1tNiwgJW1tMAorCisJbW92ZAklZWN4LCAlbW02CisKKwltb3ZkCSVtbTAsICglZWR4KQorCWFkZGwJJDQsICVlZHgKKy5Mc3RhcnRfZHN0X2FsaWduZWQ6CisKKworCW1vdnEJOCglZWJ4KSwgJW1tMworCW5lZ2wJJWVjeAorCisJbW92cQklbW0zLCAlbW0yCQkKKwlhZGRsCSQ2NCwgJWVjeAorCisJbW92ZAklZWN4LCAlbW03CisJcHNybHEJJW1tNiwgJW1tMQorCisJbGVhbAktMTIoJWVieCwlZWF4LDQpLCAlZWJ4CisJbGVhbAktMjAoJWVkeCwlZWF4LDQpLCAlZWR4CisKKwlwc2xscQklbW03LCAlbW0zCisJc3VibAkkNywgJWVheAkJCisKKwlwb3IJJW1tMSwgJW1tMwkJCisJbmVnbAklZWF4CQkJCisKKwlqbnMJLkxmaW5pc2gKKworCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisKKwkuYWxpZ24JOCwgMHg5MAorLkx1bnJvbGxfbG9vcDoKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKworCW1vdnEJKCVlYngsJWVheCw0KSwgJW1tMAorCXBzcmxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzbGxxCSVtbTcsICVtbTAKKworCW1vdnEJJW1tMywgLTgoJWVkeCwlZWF4LDQpCQorCXBvcgklbW0yLCAlbW0wCisKKwltb3ZxCTgoJWVieCwlZWF4LDQpLCAlbW0zCQorCXBzcmxxCSVtbTYsICVtbTEJCQorCisJbW92cQklbW0wLCAoJWVkeCwlZWF4LDQpCisJbW92cQklbW0zLCAlbW0yCQkKKworCXBzbGxxCSVtbTcsICVtbTMJCQorCWFkZGwJJDQsICVlYXgKKworCXBvcgklbW0xLCAlbW0zCQkKKwlqcwkuTHVucm9sbF9sb29wCisKKworLkxmaW5pc2g6CisJCisKKwl0ZXN0YgkkMiwgJWFsCisKKwlqbnoJLkxmaW5pc2hfbm9fdHdvCisKKwltb3ZxCSglZWJ4LCVlYXgsNCksICVtbTAKKwlwc3JscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc2xscQklbW03LCAlbW0wCisKKwltb3ZxCSVtbTMsIC04KCVlZHgsJWVheCw0KQkKKwlwb3IJJW1tMiwgJW1tMAorCisJbW92cQklbW0xLCAlbW0yCisJbW92cQklbW0wLCAlbW0zCisKKwlhZGRsCSQyLCAlZWF4CisuTGZpbmlzaF9ub190d286CisKKworCQorCQorCQorCQorCisJdGVzdGIJJDEsICVhbAorCXBvcGwJJWVkaQorCisJbW92ZAklbW01LCAlZWF4CQorCWpuegkuTGZpbmlzaF96ZXJvCisKKworCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCisKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKworCisJCisJCisJCisKKworCW1vdmQJOCglZWJ4KSwgJW1tMAorCXBzcmxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzbGxxCSVtbTcsICVtbTAKKworCW1vdnEJJW1tMywgKCVlZHgpCisJcG9yCSVtbTIsICVtbTAKKworCXBzcmxxCSVtbTYsICVtbTEKKwlhbmRsCSQzMiwgJWVjeAorCisJcG9wbAklZWJ4CisJanoJLkxmaW5pc2hfb25lX3VuYWxpZ25lZAorCisJCisJbW92ZAklbW0xLCAxNiglZWR4KQorLkxmaW5pc2hfb25lX3VuYWxpZ25lZDoKKworCW1vdnEJJW1tMCwgOCglZWR4KQorCisJZW1tcworCisJcmV0CisKKworCisKKy5MZmluaXNoX3plcm86CisKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKworCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisJCisKKworCQorCQorCQorCisKKwltb3ZxCSVtbTMsIDQoJWVkeCkKKwlwc3JscQklbW02LCAlbW0yCisKKwltb3ZkCSVtbTIsIDEyKCVlZHgpCisJYW5kbAkkMzIsICVlY3gKKworCXBvcGwJJWVieAorCWp6CS5MZmluaXNoX3plcm9fdW5hbGlnbmVkCisKKwltb3ZxCSVtbTIsIDEyKCVlZHgpCisuTGZpbmlzaF96ZXJvX3VuYWxpZ25lZDoKKworCWVtbXMKKworCXJldApkaWZmIC0tZ2l0IGEvbXBpL3BlbnRpdW00L3NzZTIvZGlzdGZpbGVzIGIvbXBpL3BlbnRpdW00L3NzZTIvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTJjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcGVudGl1bTQvc3NlMi9kaXN0ZmlsZXMKQEAgLTAsMCArMSw1IEBACittcGloLWFkZDEuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworbXBpaC1zdWIxLlMKZGlmZiAtLWdpdCBhL21waS9wZW50aXVtNC9zc2UyL21waWgtYWRkMS5TIGIvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1hZGQxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL21waS9wZW50aXVtNC9zc2UyL21waWgtYWRkMS5TCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEludGVsIFBlbnRpdW0tNCBtcG5fYWRkX24gLS0gbXBuIGFkZGl0aW9uLgorICoKKyAqIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKwkvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShzcCArIDEyKQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHNwICsgMTYpCisgKgorICogUDQgV2lsbGFtZXR0ZSwgTm9ydGh3b29kOiA0LjAgY3ljbGVzL2xpbWIgaWYgZHN0IT1zcmMxIGFuZCBkc3QhPXNyYzIKKyAqCQkJICAgIDYuMCBjeWNsZXMvbGltYiBpZiBkc3Q9PXNyYzEgb3IgZHN0PT1zcmMyCisgKiBQNCBQcmVzY290dDoJCSAgICA+PSA1IGN5Y2xlcy9saW1iCisgKgorICogVGhlIDQgYy9sIGFjaGlldmVkIGhlcmUgaXNuJ3QgcGFydGljdWxhcmx5IGdvb2QsIGJ1dCBpcyBiZXR0ZXIgdGhhbiA5IGMvbAorICogZm9yIGEgYmFzaWMgYWRjIGxvb3AuCisgKi8KKworCVRFWFQKKwlBTElHTiAoMykKKwlHTE9CTCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkX24pCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkX246KQorCisJcHhvcgklbW0wLCAlbW0wCisJCisJbW92bAk4KCVlc3ApLCAlZWF4CQkvKiBzMV9wdHIgKi8KKwltb3ZsCSVlYngsIDgoJWVzcCkJCS8qIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UgKi8KKwltb3ZsCTEyKCVlc3ApLCAlZWJ4CQkvKiByZXNfcHRyICovCisJbW92bAk0KCVlc3ApLCAlZWR4CQkvKiBzMl9wdHIgKi8KKwltb3ZsCTE2KCVlc3ApLCAlZWN4CQkvKiBzaXplICovCisKKwlsZWFsCSglZWF4LCVlY3gsNCksICVlYXgJLyogc3JjMSBlbmQgKi8KKwlsZWFsCSglZWJ4LCVlY3gsNCksICVlYngJLyogc3JjMiBlbmQgKi8KKwlsZWFsCSglZWR4LCVlY3gsNCksICVlZHgJLyogZHN0IGVuZCAqLworCW5lZ2wJJWVjeAkJCS8qIC1zaXplICovCisKK0x0b3A6CisvKgorCUMgZWF4CXNyYzEgZW5kCisJQyBlYngJc3JjMiBlbmQKKwlDIGVjeAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVkeAlkc3QgZW5kCisJQyBtbTAJY2FycnkgYml0CisqLworCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0xCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJcGFkZHEJJW1tMiwgJW1tMQorCisJcGFkZHEJJW1tMSwgJW1tMAorCW1vdmQJJW1tMCwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDMyLCAlbW0wCisKKwlhZGRsCSQxLCAlZWN4CisJam56CUx0b3AKKworCisJbW92ZAklbW0wLCAlZWF4CisJbW92bAk4KCVlc3ApLCAlZWJ4CS8qIHJlc3RvcmUgc2F2ZWQgRUJYICovCisJZW1tcworCXJldApkaWZmIC0tZ2l0IGEvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1tdWwxLlMgYi9tcGkvcGVudGl1bTQvc3NlMi9tcGloLW11bDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM5OGZiCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1tdWwxLlMKQEAgLTAsMCArMSw5NiBAQAorLyogSW50ZWwgUGVudGl1bS00IG1wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorICogdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogbXBpX2xpbWJfdAorICogX2djcnlfbXBpaF9tdWxfMSggbXBpX3B0cl90IHJlc19wdHIsCShzcCArIDQpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgbXBpX3NpemVfdCBzMV9zaXplLAkoc3AgKyAxMikKKyAqCQkgIG1waV9saW1iX3QgczJfbGltYikJKHNwICsgMTYpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgIT0gZHN0ICAgICAgc3JjID09IGRzdAorICogUDYgbW9kZWwgOSAgKEJhbmlhcykgICAgICAgICAgPy4/CisgKiBQNiBtb2RlbCAxMyAoRG90aGFuKSAgICAgICAgICA0Ljc1ICAgICAgICAgICAgNC43NQorICogUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpICAgICAgNC4wICAgICAgICAgICAgIDYuMAorICogUDQgbW9kZWwgMSAgKD8pICAgICAgICAgICAgICAgNC4wICAgICAgICAgICAgIDYuMAorICogUDQgbW9kZWwgMiAgKE5vcnRod29vZCkgICAgICAgNC4wICAgICAgICAgICAgIDYuMAorICogUDQgbW9kZWwgMyAgKFByZXNjb3R0KSAgICAgICAgPy4/ICAgICAgICAgICAgID8uPworICogUDQgbW9kZWwgNCAgKE5vY29uYSkgICAgICAgICAgPy4/ICAgICAgICAgICAgID8uPworICogVW5mb3J0dW5hdGVseSB3aGVuIHNyYz09ZHN0IHRoZSB3cml0ZS1jb21iaW5pbmcgZGVzY3JpYmVkIGluCisgKiBwZW50aXVtNC9SRUFETUUgdGFrZXMgdXMgdXAgdG8gNiBjL2wuCisgKgorICovCisKKwlURVhUCisJQUxJR04gKDMpCisJR0xPQkwJQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xOik7IAorCisJcHhvcgklbW0wLCAlbW0wCisKKy5Mc3RhcnRfMWM6CisJbW92bAk4KCVlc3ApLCAlZWF4CisJbW92ZAkxNiglZXNwKSwgJW1tNworCW1vdmwJNCglZXNwKSwgJWVkeAorCW1vdmwJMTIoJWVzcCksICVlY3gKKworLkx0b3A6CisKKy8qCisJQyBlYXgJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIGVieAorCUMgZWN4CWNvdW50ZXIsIHNpemUgaXRlcmF0aW9ucworCUMgZWR4CWRzdCwgaW5jcmVtZW50aW5nCisJQworCUMgbW0wCWNhcnJ5IGxpbWIKKwlDIG1tNwltdWx0aXBsaWVyCisqLworCQorCW1vdmQJKCVlYXgpLCAlbW0xCisJYWRkbAkkNCwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCisJcGFkZHEJJW1tMSwgJW1tMAorCW1vdmQJJW1tMCwgKCVlZHgpCisJYWRkbAkkNCwgJWVkeAorCisJcHNybHEJJDMyLCAlbW0wCisKKwlzdWJsCSQxLCAlZWN4CisJam56CS5MdG9wCisKKworCW1vdmQJJW1tMCwgJWVheAorCWVtbXMKKwlyZXQKKwpkaWZmIC0tZ2l0IGEvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1tdWwyLlMgYi9tcGkvcGVudGl1bTQvc3NlMi9tcGloLW11bDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc1YWRmCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIEludGVsIFBlbnRpdW0tNCBtcG5fYWRkbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgYWRkCisgKiB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX2FkZG11bF8xKCBtcGlfcHRyX3QgcmVzX3B0ciwgICAgICAoc3AgKyA0KQorICoJCSAgICAgbXBpX3B0cl90IHMxX3B0ciwJICAgICAoc3AgKyA4KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHNwICsgMTIpCisgKgkJICAgICBtcGlfbGltYl90IHMyX2xpbWIpICAgICAoc3AgKyAxNikKKyAqCisgKiBQMyBtb2RlbCA5ICAoQmFuaWFzKSAgICAgICAgICA/Lj8KKyAqIFAzIG1vZGVsIDEzIChEb3RoYW4pICAgICAgICAgIDUuOAorICogUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpICAgICAgNS41CisgKiBQNCBtb2RlbCAxICAoPykgICAgICAgICAgICAgICA1LjUKKyAqIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpICAgICAgIDUuNQorICogUDQgbW9kZWwgMyAgKFByZXNjb3R0KSAgICAgICAgNi4wCisgKiBQNCBtb2RlbCA0ICAoTm9jb25hKQorICoKKyAqIE9ubHkgdGhlIGNhcnJ5IGxpbWIgcHJvcGFnYXRpb24gaXMgb24gdGhlIGRlcGVuZGVudCBjaGFpbiwgYnV0IHNvbWUgb3RoZXIKKyAqIFBlbnRpdW00IHBpcGVsaW5lIG1hZ2ljIGJyaW5ncyBkb3duIHBlcmZvcm1hbmNlIHRvIDYgY3ljbGVzL2wgZnJvbSB0aGUKKyAqIGlkZWFsIDQgY3ljbGVzL2wuCisgKi8KKworCisJVEVYVAorCUFMSUdOICg0KQorCUdMT0JMCUNfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9hZGRtdWxfMSkKK0NfU1lNQk9MX05BTUUoX2djcnlfbXBpaF9hZGRtdWxfMTopCisKKwlweG9yCSVtbTQsICVtbTQKKy5Mc3RhcnRfMWM6CisJbW92bAk4KCVlc3ApLCAlZWF4CisJbW92bAkxMiglZXNwKSwgJWVjeAorCW1vdmwJNCglZXNwKSwgJWVkeAorCW1vdmQJMTYoJWVzcCksICVtbTcKKworLyoKKwlDIGVheAlzcmMsIGluY3JlbWVudGluZyA7IDVCCisJQyBlY3gJbG9vcCBjb3VudGVyLCBkZWNyZW1lbnRpbmcKKwlDIGVkeAlkc3QsIGluY3JlbWVudGluZworCUMKKwlDIG1tNAljYXJyeSwgbG93IDMyLWJpdHMKKwlDIG1tNwltdWx0aXBsaWVyCisqLworCisJbW92ZAkJKCVlYXgpLCAlbW0yCQorCXBtdWx1ZHEJCSVtbTcsICVtbTIKKworCXNocmwJJDEsICVlY3gKKwlqbmMJLkxldmVuCisKKwlsZWFsCQk0KCVlYXgpLCAlZWF4CisJbW92ZAkJKCVlZHgpLCAlbW0xCisJcGFkZHEJCSVtbTIsICVtbTEKKwlwYWRkcQkJJW1tMSwgJW1tNAorCW1vdmQJCSVtbTQsICglZWR4KQorCXBzcmxxCQkkMzIsICVtbTQKKworCXRlc3RsCSVlY3gsICVlY3gKKwlqegkuTHJ0bgorCWxlYWwJNCglZWR4KSwgJWVkeAorCisJbW92ZAkJKCVlYXgpLCAlbW0yCQorCXBtdWx1ZHEJCSVtbTcsICVtbTIKKy5MZXZlbjoKKwltb3ZkCQk0KCVlYXgpLCAlbW0wCQorCW1vdmQJCSglZWR4KSwgJW1tMQkKKwlwbXVsdWRxCQklbW03LCAlbW0wCisKKwlzdWJsCSQxLCAlZWN4CisJanoJLkxlbmQKKy5MbG9vcDoKKwlwYWRkcQkJJW1tMiwgJW1tMQkKKwltb3ZkCQk4KCVlYXgpLCAlbW0yCQorCXBhZGRxCQklbW0xLCAlbW00CQorCW1vdmQJCTQoJWVkeCksICVtbTMJCisJcG11bHVkcQkJJW1tNywgJW1tMgorCW1vdmQJCSVtbTQsICglZWR4KQorCXBzcmxxCQkkMzIsICVtbTQKKworCXBhZGRxCQklbW0wLCAlbW0zCQorCW1vdmQJCTEyKCVlYXgpLCAlbW0wCQorCXBhZGRxCQklbW0zLCAlbW00CQorCW1vdmQJCTgoJWVkeCksICVtbTEJCisJcG11bHVkcQkJJW1tNywgJW1tMAorCW1vdmQJCSVtbTQsIDQoJWVkeCkKKwlwc3JscQkJJDMyLCAlbW00CisKKwlsZWFsCTgoJWVheCksICVlYXgKKwlsZWFsCTgoJWVkeCksICVlZHgKKwlzdWJsCSQxLCAlZWN4CisJam56CS5MbG9vcAorLkxlbmQ6CisJcGFkZHEJCSVtbTIsICVtbTEJCisJcGFkZHEJCSVtbTEsICVtbTQJCisJbW92ZAkJNCglZWR4KSwgJW1tMwkKKwltb3ZkCQklbW00LCAoJWVkeCkKKwlwc3JscQkJJDMyLCAlbW00CisJcGFkZHEJCSVtbTAsICVtbTMJCisJcGFkZHEJCSVtbTMsICVtbTQJCisJbW92ZAkJJW1tNCwgNCglZWR4KQorCXBzcmxxCQkkMzIsICVtbTQKKy5McnRuOgorCW1vdmQJJW1tNCwgJWVheAorCWVtbXMKKwlyZXQKZGlmZiAtLWdpdCBhL21waS9wZW50aXVtNC9zc2UyL21waWgtbXVsMy5TIGIvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjZDJhNgotLS0gL2Rldi9udWxsCisrKyBiL21waS9wZW50aXVtNC9zc2UyL21waWgtbXVsMy5TCkBAIC0wLDAgKzEsMTI3IEBACisvKiBJbnRlbCBQZW50aXVtLTQgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCisgKiBzdWJ0cmFjdCB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogQ29weXJpZ2h0IDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChzcCArIDQpCisgKgkJICAgICBtcGlfcHRyX3QgczFfcHRyLAkgICAgIChzcCArIDgpCisgKgkJICAgICBtcGlfc2l6ZV90IHMxX3NpemUsICAgICAoc3AgKyAxMikKKyAqCQkgICAgIG1waV9saW1iX3QgczJfbGltYikgICAgIChzcCArIDE2KQorICoKKyAqIFA0OiA3IGN5Y2xlcy9saW1iLCB1bnN0YWJsZSB0aW1pbmcsIGF0IGxlYXN0IG9uIGVhcmx5IFBlbnRpdW00IHNpbGljb24KKyAqICAgIChzdGVwcGluZyAxMCkuCisgKgorICogVGhpcyBjb2RlIGlzIG5vdCBwYXJ0aWN1bGFybHkgZ29vZCBhdCA3IGMvbC4gIFRoZSBkZXBlbmRlbnQgY2hhaW4gaXMgb25seQorICogNCBjL2wgYW5kIHRoZXJlJ3Mgb25seSA0IE1NWCB1bml0IGluc3RydWN0aW9ucywgc28gaXQncyBub3QgY2xlYXIgd2h5IHRoYXQKKyAqIHNwZWVkIGlzbid0IGFjaGlldmVkLgorICoKKyAqIFRoZSBhcnJhbmdlbWVudHMgbWFkZSBoZXJlIHRvIGdldCBhIHR3byBpbnN0cnVjdGlvbiBkZXBlbmRlbnQgY2hhaW4gYXJlCisgKiBzbGlnaHRseSBzdWJ0bGUuICBJbiB0aGUgbG9vcCB0aGUgY2FycnkgKG9yIGJvcnJvdyByYXRoZXIpIGlzIGEgbmVnYXRpdmUKKyAqIHNvIHRoYXQgYSBwYWRkcSBjYW4gYmUgdXNlZCB0byBnaXZlIGEgbG93IGxpbWIgcmVhZHkgdG8gc3RvcmUsIGFuZCBhIGhpZ2gKKyAqIGxpbWIgcmVhZHkgdG8gYmVjb21lIHRoZSBuZXcgY2FycnkgYWZ0ZXIgYSBwc3JscS4KKyAqCisgKiBJZiB0aGUgY2Fycnkgd2FzIGEgc2ltcGxlIHR3b3MgY29tcGxlbWVudCBuZWdhdGl2ZSB0aGVuIHRoZSBwc3JscSBzaGlmdAorICogd291bGQgbmVlZCB0byBicmluZyBpbiAwIGJpdHMgb3IgMSBiaXRzIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBoaWdoIHdhcworICogemVybyBvciBub24temVybywgc2luY2UgYSBub24temVybyB2YWx1ZSB3b3VsZCByZXByZXNlbnQgYSBuZWdhdGl2ZQorICogbmVlZGluZyBzaWduIGV4dGVuc2lvbi4gIFRoYXQgd291bGRuJ3QgYmUgcGFydGljdWxhcmx5IGVhc3kgdG8gYXJyYW5nZSBhbmQKKyAqIGNlcnRhaW5seSB3b3VsZCBhZGQgYW4gaW5zdHJ1Y3Rpb24gdG8gdGhlIGRlcGVuZGVudCBjaGFpbiwgc28gaW5zdGVhZCBhbgorICogb2Zmc2V0IGlzIGFwcGxpZWQgc28gdGhhdCB0aGUgaGlnaCBsaW1iIHdpbGwgYmUgMHhGRkZGRkZGRitjLiAgV2l0aCBjIGluCisgKiB0aGUgcmFuZ2UgLTB4RkZGRkZGRkYgdG8gMCwgdGhlIHZhbHVlIDB4RkZGRkZGRkYrYyBpcyBpbiB0aGUgcmFuZ2UgMCB0bworICogMHhGRkZGRkZGRiBhbmQgaXMgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZSBhbmQgY2FuIGFsd2F5cyBoYXZlIDAgYml0cworICogc2hpZnRlZCBpbiwgd2hpY2ggaXMgd2hhdCBwc3JscSBkb2VzLgorICoKKyAqIFRoZSBleHRyYSAweEZGRkZGRkZGIG11c3QgYmUgc3VidHJhY3RlZCBiZWZvcmUgYyBpcyB1c2VkLCBidXQgdGhhdCBjYW4gYmUKKyAqIGRvbmUgb2ZmIHRoZSBkZXBlbmRlbnQgY2hhaW4uICBUaGUgdG90YWwgYWRqdXN0bWVudCB0aGVuIGlzIHRvIGFkZAorICogMHhGRkZGRkZGRjAwMDAwMDAwIHRvIG9mZnNldCB0aGUgbmV3IGNhcnJ5LCBhbmQgc3VidHJhY3QKKyAqIDB4MDAwMDAwMDBGRkZGRkZGRiB0byByZW1vdmUgdGhlIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IGNhcnJ5LCBmb3IgYSBuZXQKKyAqIGFkZCBvZiAweEZGRkZGRkZFMDAwMDAwMDEuICBJbiB0aGUgY29kZSB0aGlzIGlzIGFwcGxpZWQgdG8gdGhlIGRlc3RpbmF0aW9uCisgKiBsaW1iIHdoZW4gZmV0Y2hlZC4KKyAqCisgKiBJdCdzIGFsc28gcG9zc2libGUgdG8gdmlldyB0aGUgMHhGRkZGRkZGRiBhZGp1c3RtZW50IGFzIGEgb25lcy1jb21wbGVtZW50CisgKiBuZWdhdGl2ZSwgd2hpY2ggaXMgaG93IGl0J3MgdW5kb25lIGZvciB0aGUgcmV0dXJuIHZhbHVlLCBidXQgdGhhdCBkb2Vzbid0CisgKiBzZWVtIGFzIGNsZWFyLgorKi8KKworCVRFWFQKKwlBTElHTiAoNCkKKwlHTE9CTAlDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3VibXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3VibXVsXzE6KQorCisJcHhvcgklbW0xLCAlbW0xCQkKKworLkxzdGFydF8xYzoKKwltb3ZsCTgoJWVzcCksICVlYXgKKwlwY21wZXFkCSVtbTAsICVtbTAKKworCW1vdmQJMTYoJWVzcCksICVtbTcKKwlwY21wZXFkCSVtbTYsICVtbTYKKworCW1vdmwJNCglZXNwKSwgJWVkeAorCXBzcmxxCSQzMiwgJW1tMAkJCisKKwltb3ZsCTEyKCVlc3ApLCAlZWN4CisJcHNsbHEJJDMyLCAlbW02CQkKKworCXBzdWJxCSVtbTAsICVtbTYJCQorCisJcHN1YnEJJW1tMSwgJW1tMAkJCisKKy8qCisJQyBlYXgJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIGVieAorCUMgZWN4CWxvb3AgY291bnRlciwgZGVjcmVtZW50aW5nCisJQyBlZHgJZHN0LCBpbmNyZW1lbnRpbmcKKwlDCisJQyBtbTAJMHhGRkZGRkZGRiAtIGJvcnJvdworCUMgbW02CTB4RkZGRkZGRkUwMDAwMDAwMQorCUMgbW03CW11bHRpcGxpZXIKKyovCisJCisuTGxvb3A6CisJbW92ZAkoJWVheCksICVtbTEJCQorCWxlYWwJNCglZWF4KSwgJWVheAorCW1vdmQJKCVlZHgpLCAlbW0yCQkKKwlwYWRkcQklbW02LCAlbW0yCQkKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlwc3VicQklbW0xLCAlbW0yCQkKKwlwYWRkcQklbW0yLCAlbW0wCQkKKwlzdWJsCSQxLCAlZWN4CisJbW92ZAklbW0wLCAoJWVkeCkJCQorCXBzcmxxCSQzMiwgJW1tMAorCWxlYWwJNCglZWR4KSwgJWVkeAorCWpuegkuTGxvb3AKKworCW1vdmQJJW1tMCwgJWVheAorCW5vdGwJJWVheAorCWVtbXMKKwlyZXQKZGlmZiAtLWdpdCBhL21waS9wZW50aXVtNC9zc2UyL21waWgtc3ViMS5TIGIvbXBpL3BlbnRpdW00L3NzZTIvbXBpaC1zdWIxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5MDBjNwotLS0gL2Rldi9udWxsCisrKyBiL21waS9wZW50aXVtNC9zc2UyL21waWgtc3ViMS5TCkBAIC0wLDAgKzEsMTEyIEBACisvKiBJbnRlbCBQZW50aXVtLTQgbXBuX3N1Yl9uIC0tIG1wbiBzdWJ0cmFjdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIEdOVSBNUCBMaWJyYXJ5LgorICoJIEFjdHVhbGx5IGl0J3MgdGhlIHNhbWUgY29kZSB3aXRoIG9ubHkgbWlub3IgY2hhbmdlcyBpbiB0aGUKKyAqCSB3YXkgdGhlIGRhdGEgaXMgc3RvcmVkOyB0aGlzIGlzIHRvIHN1cHBvcnQgdGhlIGFic3RyYWN0aW9uCisgKgkgb2YgYW4gb3B0aW9uYWwgc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWNoIG1heSBiZSB1c2VkCisgKgkgdG8gYXZvaWQgcmV2ZWFsaW5nIG9mIHNlbnNpdGl2ZSBkYXRhIGR1ZSB0byBwYWdpbmcgZXRjLgorICovCisKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX3N1Yl9uKCBtcGlfcHRyX3QgcmVzX3B0ciwJKHNwICsgNCkKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAkoc3AgKyA4KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShzcCArIDEyKQorICoJCSAgIG1waV9zaXplX3Qgc2l6ZSkJKHNwICsgMTYpCisgKgorICogUDQgV2lsbGFtZXR0ZSwgTm9ydGh3b29kOiA0LjAgY3ljbGVzL2xpbWIgaWYgZHN0IT1zcmMxIGFuZCBkc3QhPXNyYzIKKyAqCQkJICAgICA2LjAgY3ljbGVzL2xpbWIgaWYgZHN0PT1zcmMxIG9yIGRzdD09c3JjMgorICogUDQgUHJlc2NvdHQ6CQkgICAgID49IDUgY3ljbGVzL2xpbWIKKyAqCisgKiBUaGUgbWFpbiBsb29wIGNvZGUgaXMgMnggdW5yb2xsZWQgc28gdGhhdCB0aGUgY2FycnkgYml0IGNhbiBhbHRlcm5hdGUKKyAqIGJldHdlZW4gbW0wIGFuZCBtbTEuCisgKi8KKworCisudGV4dAorCUFMSUdOICgzKQorCS5nbG9ibCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3ViX24pCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3ViX246KQorCisJcHhvcgklbW0wLCAlbW0wCisuTHN0YXJ0X25jOgorCW1vdmwJOCglZXNwKSwgJWVheAorCW1vdmwJJWVieCwgOCglZXNwKQorCW1vdmwJMTIoJWVzcCksICVlYngKKwltb3ZsCTQoJWVzcCksICVlZHgKKwltb3ZsCTE2KCVlc3ApLCAlZWN4CisKKwlsZWFsCSglZWF4LCVlY3gsNCksICVlYXgJCisJbGVhbAkoJWVieCwlZWN4LDQpLCAlZWJ4CQorCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVkeAkKKwluZWdsCSVlY3gJCQkKKworLkx0b3A6CisvKgorCUMgZWF4CXNyYzEgZW5kCisJQyBlYngJc3JjMiBlbmQKKwlDIGVjeAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVkeAlkc3QgZW5kCisJQyBtbTAJY2FycnkgYml0CisqLworCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0xCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJcHN1YnEJJW1tMiwgJW1tMQorCisJcHN1YnEJJW1tMCwgJW1tMQorCW1vdmQJJW1tMSwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDYzLCAlbW0xCisKKwlhZGRsCSQxLCAlZWN4CisJanoJLkxkb25lX21tMQorCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0wCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJcHN1YnEJJW1tMiwgJW1tMAorCisJcHN1YnEJJW1tMSwgJW1tMAorCW1vdmQJJW1tMCwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDYzLCAlbW0wCisKKwlhZGRsCSQxLCAlZWN4CisJam56CS5MdG9wCisKKworCW1vdmQJJW1tMCwgJWVheAorCW1vdmwJOCglZXNwKSwgJWVieAorCWVtbXMKKwlyZXQKKworCisKKy5MZG9uZV9tbTE6CisJbW92ZAklbW0xLCAlZWF4CisJbW92bAk4KCVlc3ApLCAlZWJ4CisJZW1tcworCXJldApkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VyL01hbmlmZXN0IGIvbXBpL3Bvd2VyL01hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGZjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXIvTWFuaWZlc3QKQEAgLTAsMCArMSwyNyBAQAorIyBNYW5pZmVzdCAtIGNoZWNrc3VtcyAKKyMgQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK21waWgtYWRkMS5TCittcGloLWxzaGlmdC5TCittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCittcGloLXJzaGlmdC5TCittcGloLXN1YjEuUworJG5hbWVzJCBpUUNWQXdVQVArTG1YVEVBbnA4MzJTLzdBUUorbmdQL1hZcjVGdmwvOFdHVkhjSUthZWh4dm5LY1NEMklMVFdaTkd1YmduV3A4ZWJJeFZpampRQ3hZbmVUVHkrek8wc05hQjAwMm5leXNjeWl3YUpqL0pRSXdaWGZyMDZ1R3dlSXFsU3B3cGo5bmRrb0pjOEU0L0ZadSs1TlRPK0UzUmFCREFEK1RwbytNVGZiQzFzMThwNWkrYW45M1ZyU1RnTmNrNVBQWVFyVWNQQT09c2wzdApkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VyL2Rpc3RmaWxlcyBiL21waS9wb3dlci9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiYzAwOAotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlci9kaXN0ZmlsZXMKQEAgLTAsMCArMSw4IEBACitNYW5pZmVzdAorbXBpaC1hZGQxLlMKK21waWgtbHNoaWZ0LlMKK21waWgtbXVsMS5TCittcGloLW11bDIuUworbXBpaC1tdWwzLlMKK21waWgtcnNoaWZ0LlMKK21waWgtc3ViMS5TCmRpZmYgLS1naXQgYS9tcGkvcG93ZXIvbXBpaC1hZGQxLlMgYi9tcGkvcG93ZXIvbXBpaC1hZGQxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2YjU2YwotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlci9tcGloLWFkZDEuUwpAQCAtMCwwICsxLDg3IEBACisvKiBJQk0gUE9XRVIgYWRkX24gLS0gQWRkIHR3byBsaW1iIHZlY3RvcnMgb2YgZXF1YWwsIG5vbi16ZXJvIGxlbmd0aC4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OSwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisvKgorIyBJTlBVVCBQQVJBTUVURVJTCisjIHJlc19wdHIJcjMKKyMgczFfcHRyCXI0CisjIHMyX3B0cglyNQorIyBzaXplCQlyNgorICovCisKKwkudG9jCisJLmV4dGVybiBfZ2NyeV9tcGloX2FkZF9uW0RTXQorCS5leHRlcm4gLl9nY3J5X21waWhfYWRkX24KKy5jc2VjdCBbUFJdCisJLmFsaWduIDIKKwkuZ2xvYmwgX2djcnlfbXBpaF9hZGRfbgorCS5nbG9ibCAuX2djcnlfbXBpaF9hZGRfbgorCS5jc2VjdCBfZ2NyeV9tcGloX2FkZF9uW0RTXQorX2djcnlfbXBpaF9hZGRfbjoKKwkubG9uZyAuX2djcnlfbXBpaF9hZGRfbiwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgW1BSXQorLl9nY3J5X21waWhfYWRkX246CisJYW5kaWwuCTEwLDYsMQkJIyBvZGQgb3IgZXZlbiBudW1iZXIgb2YgbGltYnM/CisJbAk4LDAoNCkJCSMgbG9hZCBsZWFzdCBzaWduaWZpY2FudCBzMSBsaW1iCisJbAkwLDAoNSkJCSMgbG9hZCBsZWFzdCBzaWduaWZpY2FudCBzMiBsaW1iCisJY2FsCTMsLTQoMykgCSMgb2Zmc2V0IHJlc19wdHIsIGl0J3MgdXBkYXRlZCBiZWZvcmUgaXQncyB1c2VkCisJc3JpCTEwLDYsMQkJIyBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcAorCWEJNywwLDgJCSMgYWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzLCBzZXQgY3kKKwltdGN0cgkxMAkJIyBjb3B5IGNvdW50IGludG8gQ1RSCisJYmVxCTAsTGV2ZW4gCSMgYnJhbmNoIGlmIGV2ZW4gIyBvZiBsaW1icyAoIyBvZiBsaW1icyA+PSAyKQorCisjIFdlIGhhdmUgYW4gb2RkICMgb2YgbGltYnMuICBBZGQgdGhlIGZpcnN0IGxpbWJzIHNlcGFyYXRlbHkuCisJY21waQkxLDEwLDAJCSMgaXMgY291bnQgZm9yIHVucm9sbGVkIGxvb3AgemVybz8KKwlibmUJMSxMMQkJIyBicmFuY2ggaWYgbm90CisJc3QJNyw0KDMpCisJYXplCTMsMTAJCSMgdXNlIHRoZSBmYWN0IHRoYXQgcjEwIGlzIHplcm8uLi4KKwlicgkJCSMgcmV0dXJuCisKKyMgV2UgYWRkZWQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMuICBOb3cgcmVsb2FkIHRoZSBuZXh0IGxpbWJzIHRvIGVudGVyIGxvb3AuCitMMToJbHUJOCw0KDQpCQkjIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTAsNCg1KQkJIyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlzdHUJNyw0KDMpCisJYWUJNywwLDgJCSMgYWRkIGxpbWJzLCBzZXQgY3kKK0xldmVuOglsdQk5LDQoNCkJCSMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHUJMTAsNCg1KSAJIyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwliZHoJTGVuZAkJIyBJZiBkb25lLCBza2lwIGxvb3AKKworTG9vcDoJbHUJOCw0KDQpCQkjIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTAsNCg1KQkJIyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlhZQkxMSw5LDEwIAkjIGFkZCBwcmV2aW91cyBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzdHUJNyw0KDMpCQkjCisJbHUJOSw0KDQpCQkjIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTEwLDQoNSkgCSMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJYWUJNywwLDgJCSMgYWRkIHByZXZpb3VzIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0dQkxMSw0KDMpIAkjCisJYmRuCUxvb3AJCSMgZGVjcmVtZW50IENUUiBhbmQgbG9vcCBiYWNrCisKK0xlbmQ6CWFlCTExLDksMTAgCSMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0CTcsNCgzKQkJIworCXN0CTExLDgoMykgCSMKKwlsaWwJMywwCQkjIGxvYWQgY3kgaW50byAuLi4KKwlhemUJMywzCQkjIC4uLiByZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKwlicgorCmRpZmYgLS1naXQgYS9tcGkvcG93ZXIvbXBpaC1sc2hpZnQuUyBiL21waS9wb3dlci9tcGloLWxzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXIvbXBpaC1sc2hpZnQuUwpAQCAtMCwwICsxLDY0IEBACisvKiBJQk0gUE9XRVIgbHNoaWZ0CisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTksIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKy8qCisjIElOUFVUIFBBUkFNRVRFUlMKKyMgcmVzX3B0cglyMworIyBzX3B0ciAJcjQKKyMgc2l6ZQkJcjUKKyMgY250CQlyNgorICovCisKKwkudG9jCisJLmV4dGVybiBfZ2NyeV9tcGloX2xzaGlmdFtEU10KKwkuZXh0ZXJuIC5fZ2NyeV9tcGloX2xzaGlmdAorLmNzZWN0IFtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX2xzaGlmdAorCS5nbG9ibCAuX2djcnlfbXBpaF9sc2hpZnQKKwkuY3NlY3QgX2djcnlfbXBpaF9sc2hpZnRbRFNdCitfZ2NyeV9tcGloX2xzaGlmdDoKKwkubG9uZyAuX2djcnlfbXBpaF9sc2hpZnQsIFRPQ1t0YzBdLCAwCisJLmNzZWN0IFtQUl0KKy5fZ2NyeV9tcGloX2xzaGlmdDoKKwlzbGkJMCw1LDIKKwljYXgJOSwzLDAKKwljYXgJNCw0LDAKKwlzZmkJOCw2LDMyCisJbXRjdHIJNQkJIyBwdXQgbGltYiBjb3VudCBpbiBDVFIgbG9vcCByZWdpc3RlcgorCWx1CTAsLTQoNCkgCSMgcmVhZCBtb3N0IHNpZ25pZmljYW50IGxpbWIKKwlzcmUJMywwLDgJCSMgY29tcHV0ZSBjYXJyeSBvdXQgbGltYiwgYW5kIGluaXQgTVEgcmVnaXN0ZXIKKwliZHoJTGVuZDIJCSMgaWYganVzdCBvbmUgbGltYiwgc2tpcCBsb29wCisJbHUJMCwtNCg0KSAJIyByZWFkIDI6bmQgbW9zdCBzaWduaWZpY2FudCBsaW1iCisJc3JlcQk3LDAsOAkJIyBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiByZXN1bHQKKwliZHoJTGVuZAkJIyBpZiBqdXN0IHR3byBsaW1iLCBza2lwIGxvb3AKK0xvb3A6CWx1CTAsLTQoNCkgCSMgbG9hZCBuZXh0IGxvd2VyIGxpbWIKKwlzdHUJNywtNCg5KSAJIyBzdG9yZSBwcmV2aW91cyByZXN1bHQgZHVyaW5nIHJlYWQgbGF0ZW5jeQorCXNyZXEJNywwLDgJCSMgY29tcHV0ZSByZXN1bHQgbGltYgorCWJkbglMb29wCQkjIGxvb3AgYmFjayB1bnRpbCBDVFIgaXMgemVybworTGVuZDoJc3R1CTcsLTQoOSkgCSMgc3RvcmUgMjpuZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iCitMZW5kMjoJc2xlCTcsMCw2CQkjIGNvbXB1dGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYgorCXN0CTcsLTQoOSkgCSMgc3RvcmUgaXQKKwlicgorCmRpZmYgLS1naXQgYS9tcGkvcG93ZXIvbXBpaC1tdWwxLlMgYi9tcGkvcG93ZXIvbXBpaC1tdWwxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMzRmYQotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlci9tcGloLW11bDEuUwpAQCAtMCwwICsxLDExNSBAQAorLyogSUJNIFBPV0VSICBtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorICogICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk5LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisvKgorIyBJTlBVVCBQQVJBTUVURVJTCisjIHJlc19wdHIJcjMKKyMgczFfcHRyCXI0CisjIHNpemUJCXI1CisjIHMyX2xpbWIJcjYKKworIyBUaGUgUlMvNjAwMCBoYXMgbm8gdW5zaWduZWQgMzJ4MzItPjY0IGJpdCBtdWx0aXBsaWNhdGlvbiBpbnN0cnVjdGlvbi4gIFRvCisjIG9idGFpbiB0aGF0IG9wZXJhdGlvbiwgd2UgaGF2ZSB0byB1c2UgdGhlIDMyeDMyLT42NCBzaWduZWQgbXVsdGlwbGljYXRpb24KKyMgaW5zdHJ1Y3Rpb24sIGFuZCBhZGQgdGhlIGFwcHJvcHJpYXRlIGNvbXBlbnNhdGlvbiB0byB0aGUgaGlnaCBsaW1iIG9mIHRoZQorIyByZXN1bHQuICBXZSBhZGQgdGhlIG11bHRpcGxpY2FuZCBpZiB0aGUgbXVsdGlwbGllciBoYXMgaXRzIG1vc3Qgc2lnbmlmaWNhbnQKKyMgYml0IHNldCwgYW5kIHdlIGFkZCB0aGUgbXVsdGlwbGllciBpZiB0aGUgbXVsdGlwbGljYW5kIGhhcyBpdHMgbW9zdAorIyBzaWduaWZpY2FudCBiaXQgc2V0LglXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBjYXJyeSBmbGFnIGJldHdlZW4gZWFjaAorIyBpdGVyYXRpb24sIHNvIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgY29tcGVuc2F0aW9uIGNhcmVmdWxseSAodGhlIG5hdHVyYWwsCisjIHNyYWkrYW5kIGRvZXNuJ3Qgd29yaykuICBTaW5jZSB0aGUgUE9XRVIgYXJjaGl0ZWN0dXJlIGhhcyBhIGJyYW5jaCB1bml0CisjIHdlIGNhbiBicmFuY2ggaW4gemVybyBjeWNsZXMsIHNvIHRoYXQncyBob3cgd2UgcGVyZm9ybSB0aGUgYWRkaXRpb25zLgorICovCisKKwkudG9jCisJLmNzZWN0IC5fZ2NyeV9tcGloX211bF8xW1BSXQorCS5hbGlnbiAyCisJLmdsb2JsIF9nY3J5X21waWhfbXVsXzEKKwkuZ2xvYmwgLl9nY3J5X21waWhfbXVsXzEKKwkuY3NlY3QgX2djcnlfbXBpaF9tdWxfMVtEU10KK19nY3J5X21waWhfbXVsXzE6CisJLmxvbmcgLl9nY3J5X21waWhfbXVsXzFbUFJdLCBUT0NbdGMwXSwgMAorCS5jc2VjdCAuX2djcnlfbXBpaF9tdWxfMVtQUl0KKy5fZ2NyeV9tcGloX211bF8xOgorCisJY2FsCTMsLTQoMykKKwlsCTAsMCg0KQorCWNtcGkJMCw2LDAKKwltdGN0cgk1CisJbXVsCTksMCw2CisJc3JhaQk3LDAsMzEKKwlhbmQJNyw3LDYKKwltZm1xCTgKKwlhaQkwLDAsMAkJIyByZXNldCBjYXJyeQorCWNheAk5LDksNworCWJsdAlMbmVnCitMcG9zOgliZHoJTGVuZAorTHBsb29wOiBsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAkxMCwwLDYKKwltZm1xCTAKKwlhZQk4LDAsOQorCWJnZQlMcDAKKwljYXgJMTAsMTAsNiAJIyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xwMDoJYmR6CUxlbmQwCisJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJOSwwLDYKKwltZm1xCTAKKwlhZQk4LDAsMTAKKwliZ2UJTHAxCisJY2F4CTksOSw2CQkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAxOgliZG4JTHBsb29wCisJYglMZW5kCisKK0xuZWc6CWNheAk5LDksMAorCWJkeglMZW5kCitMbmxvb3A6IGx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCWNheAkxMCwxMCwwIAkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIHMyX2xpbWIKKwltZm1xCTAKKwlhZQk4LDAsOQorCWJnZQlMbjAKKwljYXgJMTAsMTAsNiAJIyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xuMDoJYmR6CUxlbmQwCisJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJOSwwLDYKKwljYXgJOSw5LDAJCSMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgczJfbGltYgorCW1mbXEJMAorCWFlCTgsMCwxMAorCWJnZQlMbjEKKwljYXgJOSw5LDYJCSMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMbjE6CWJkbglMbmxvb3AKKwliCUxlbmQKKworTGVuZDA6CWNhbAk5LDAoMTApCitMZW5kOglzdAk4LDQoMykKKwlhemUJMyw5CisJYnIKKwpkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VyL21waWgtbXVsMi5TIGIvbXBpL3Bvd2VyL21waWgtbXVsMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTZlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXIvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSwxMzAgQEAKKy8qIElCTSBQT1dFUiBhZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKKyAqCQkJIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTQsIDE5OTksIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworCisvKgorIyBJTlBVVCBQQVJBTUVURVJTCisjIHJlc19wdHIJcjMKKyMgczFfcHRyCXI0CisjIHNpemUJCXI1CisjIHMyX2xpbWIJcjYKKworIyBUaGUgUlMvNjAwMCBoYXMgbm8gdW5zaWduZWQgMzJ4MzItPjY0IGJpdCBtdWx0aXBsaWNhdGlvbiBpbnN0cnVjdGlvbi4gIFRvCisjIG9idGFpbiB0aGF0IG9wZXJhdGlvbiwgd2UgaGF2ZSB0byB1c2UgdGhlIDMyeDMyLT42NCBzaWduZWQgbXVsdGlwbGljYXRpb24KKyMgaW5zdHJ1Y3Rpb24sIGFuZCBhZGQgdGhlIGFwcHJvcHJpYXRlIGNvbXBlbnNhdGlvbiB0byB0aGUgaGlnaCBsaW1iIG9mIHRoZQorIyByZXN1bHQuICBXZSBhZGQgdGhlIG11bHRpcGxpY2FuZCBpZiB0aGUgbXVsdGlwbGllciBoYXMgaXRzIG1vc3Qgc2lnbmlmaWNhbnQKKyMgYml0IHNldCwgYW5kIHdlIGFkZCB0aGUgbXVsdGlwbGllciBpZiB0aGUgbXVsdGlwbGljYW5kIGhhcyBpdHMgbW9zdAorIyBzaWduaWZpY2FudCBiaXQgc2V0LglXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBjYXJyeSBmbGFnIGJldHdlZW4gZWFjaAorIyBpdGVyYXRpb24sIHNvIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgY29tcGVuc2F0aW9uIGNhcmVmdWxseSAodGhlIG5hdHVyYWwsCisjIHNyYWkrYW5kIGRvZXNuJ3Qgd29yaykuICBTaW5jZSB0aGUgUE9XRVIgYXJjaGl0ZWN0dXJlIGhhcyBhIGJyYW5jaCB1bml0CisjIHdlIGNhbiBicmFuY2ggaW4gemVybyBjeWNsZXMsIHNvIHRoYXQncyBob3cgd2UgcGVyZm9ybSB0aGUgYWRkaXRpb25zLgorICovCisKKwkudG9jCisJLmNzZWN0IC5fZ2NyeV9tcGloX2FkZG11bF8xW1BSXQorCS5hbGlnbiAyCisJLmdsb2JsIF9nY3J5X21waWhfYWRkbXVsXzEKKwkuZ2xvYmwgLl9nY3J5X21waWhfYWRkbXVsXzEKKwkuY3NlY3QgX2djcnlfbXBpaF9hZGRtdWxfMVtEU10KK19nY3J5X21waWhfYWRkbXVsXzE6CisJLmxvbmcgLl9nY3J5X21waWhfYWRkbXVsXzFbUFJdLCBUT0NbdGMwXSwgMAorCS5jc2VjdCAuX2djcnlfbXBpaF9hZGRtdWxfMVtQUl0KKy5fZ2NyeV9tcGloX2FkZG11bF8xOgorCisJY2FsCTMsLTQoMykKKwlsCTAsMCg0KQorCWNtcGkJMCw2LDAKKwltdGN0cgk1CisJbXVsCTksMCw2CisJc3JhaQk3LDAsMzEKKwlhbmQJNyw3LDYKKwltZm1xCTgKKwljYXgJOSw5LDcKKwlsCTcsNCgzKQorCWEJOCw4LDcJCSMgYWRkIHJlc19saW1iCisJYmx0CUxuZWcKK0xwb3M6CWJkeglMZW5kCisKK0xwbG9vcDogbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJMTAsMCw2CisJbWZtcQkwCisJYWUJOCwwLDkJCSMgbG93IGxpbWIgKyBvbGRfY3lfbGltYiArIG9sZCBjeQorCWwJNyw0KDMpCisJYXplCTEwLDEwCQkjIHByb3BhZ2F0ZSBjeSB0byBuZXcgY3lfbGltYgorCWEJOCw4LDcJCSMgYWRkIHJlc19saW1iCisJYmdlCUxwMAorCWNheAkxMCwxMCw2IAkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAwOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCW1mbXEJMAorCWFlCTgsMCwxMAorCWwJNyw0KDMpCisJYXplCTksOQorCWEJOCw4LDcKKwliZ2UJTHAxCisJY2F4CTksOSw2CQkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAxOgliZG4JTHBsb29wCisKKwliCUxlbmQKKworTG5lZzoJY2F4CTksOSwwCisJYmR6CUxlbmQKK0xubG9vcDogbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJMTAsMCw2CisJbWZtcQk3CisJYWUJOCw3LDkKKwlsCTcsNCgzKQorCWFlCTEwLDEwLDAgCSMgcHJvcGFnYXRlIGN5IHRvIG5ldyBjeV9saW1iCisJYQk4LDgsNwkJIyBhZGQgcmVzX2xpbWIKKwliZ2UJTG4wCisJY2F4CTEwLDEwLDYgCSMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMbjA6CWJkeglMZW5kMAorCWx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTksMCw2CisJbWZtcQk3CisJYWUJOCw3LDEwCisJbAk3LDQoMykKKwlhZQk5LDksMAkJIyBwcm9wYWdhdGUgY3kgdG8gbmV3IGN5X2xpbWIKKwlhCTgsOCw3CQkjIGFkZCByZXNfbGltYgorCWJnZQlMbjEKKwljYXgJOSw5LDYJCSMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMbjE6CWJkbglMbmxvb3AKKwliCUxlbmQKKworTGVuZDA6CWNhbAk5LDAoMTApCitMZW5kOglzdAk4LDQoMykKKwlhemUJMyw5CisJYnIKKwpkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VyL21waWgtbXVsMy5TIGIvbXBpL3Bvd2VyL21waWgtbXVsMy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXIvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSwxMzUgQEAKKy8qIElCTSBQT1dFUiBzdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorICoJCQkgdGhlIHJlc3VsdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk5LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qCisKKyMgSU5QVVQgUEFSQU1FVEVSUworIyByZXNfcHRyCXIzCisjIHMxX3B0cglyNAorIyBzaXplCQlyNQorIyBzMl9saW1iCXI2CisKKyMgVGhlIFJTLzYwMDAgaGFzIG5vIHVuc2lnbmVkIDMyeDMyLT42NCBiaXQgbXVsdGlwbGljYXRpb24gaW5zdHJ1Y3Rpb24uICBUbworIyBvYnRhaW4gdGhhdCBvcGVyYXRpb24sIHdlIGhhdmUgdG8gdXNlIHRoZSAzMngzMi0+NjQgc2lnbmVkIG11bHRpcGxpY2F0aW9uCisjIGluc3RydWN0aW9uLCBhbmQgYWRkIHRoZSBhcHByb3ByaWF0ZSBjb21wZW5zYXRpb24gdG8gdGhlIGhpZ2ggbGltYiBvZiB0aGUKKyMgcmVzdWx0LiAgV2UgYWRkIHRoZSBtdWx0aXBsaWNhbmQgaWYgdGhlIG11bHRpcGxpZXIgaGFzIGl0cyBtb3N0IHNpZ25pZmljYW50CisjIGJpdCBzZXQsIGFuZCB3ZSBhZGQgdGhlIG11bHRpcGxpZXIgaWYgdGhlIG11bHRpcGxpY2FuZCBoYXMgaXRzIG1vc3QKKyMgc2lnbmlmaWNhbnQgYml0IHNldC4JV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgY2FycnkgZmxhZyBiZXR3ZWVuIGVhY2gKKyMgaXRlcmF0aW9uLCBzbyB3ZSBoYXZlIHRvIGNvbXB1dGUgdGhlIGNvbXBlbnNhdGlvbiBjYXJlZnVsbHkgKHRoZSBuYXR1cmFsLAorIyBzcmFpK2FuZCBkb2Vzbid0IHdvcmspLiAgU2luY2UgdGhlIFBPV0VSIGFyY2hpdGVjdHVyZSBoYXMgYSBicmFuY2ggdW5pdAorIyB3ZSBjYW4gYnJhbmNoIGluIHplcm8gY3ljbGVzLCBzbyB0aGF0J3MgaG93IHdlIHBlcmZvcm0gdGhlIGFkZGl0aW9ucy4KKyAqLworCisJLnRvYworCS5jc2VjdCAuX2djcnlfbXBpaF9zdWJtdWxfMVtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX3N1Ym11bF8xCisJLmdsb2JsIC5fZ2NyeV9tcGloX3N1Ym11bF8xCisJLmNzZWN0IF9nY3J5X21waWhfc3VibXVsXzFbRFNdCitfZ2NyeV9tcGloX3N1Ym11bF8xOgorCS5sb25nIC5fZ2NyeV9tcGloX3N1Ym11bF8xW1BSXSwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgLl9nY3J5X21waWhfc3VibXVsXzFbUFJdCisuX2djcnlfbXBpaF9zdWJtdWxfMToKKworCWNhbAkzLC00KDMpCisJbAkwLDAoNCkKKwljbXBpCTAsNiwwCisJbXRjdHIJNQorCW11bAk5LDAsNgorCXNyYWkJNywwLDMxCisJYW5kCTcsNyw2CisJbWZtcQkxMQorCWNheAk5LDksNworCWwJNyw0KDMpCisJc2YJOCwxMSw3CQkjIGFkZCByZXNfbGltYgorCWEJMTEsOCwxMSAJIyBpbnZlcnQgY3kgKHIxMSBpcyBqdW5rKQorCWJsdAlMbmVnCitMcG9zOgliZHoJTGVuZAorCitMcGxvb3A6IGx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCW1mbXEJMAorCWFlCTExLDAsOQkJIyBsb3cgbGltYiArIG9sZF9jeV9saW1iICsgb2xkIGN5CisJbAk3LDQoMykKKwlhemUJMTAsMTAJCSMgcHJvcGFnYXRlIGN5IHRvIG5ldyBjeV9saW1iCisJc2YJOCwxMSw3CQkjIGFkZCByZXNfbGltYgorCWEJMTEsOCwxMSAJIyBpbnZlcnQgY3kgKHIxMSBpcyBqdW5rKQorCWJnZQlMcDAKKwljYXgJMTAsMTAsNiAJIyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xwMDoJYmR6CUxlbmQwCisJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJOSwwLDYKKwltZm1xCTAKKwlhZQkxMSwwLDEwCisJbAk3LDQoMykKKwlhemUJOSw5CisJc2YJOCwxMSw3CisJYQkxMSw4LDExIAkjIGludmVydCBjeSAocjExIGlzIGp1bmspCisJYmdlCUxwMQorCWNheAk5LDksNgkJIyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xwMToJYmRuCUxwbG9vcAorCisJYglMZW5kCisKK0xuZWc6CWNheAk5LDksMAorCWJkeglMZW5kCitMbmxvb3A6IGx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCW1mbXEJNworCWFlCTExLDcsOQorCWwJNyw0KDMpCisJYWUJMTAsMTAsMCAJIyBwcm9wYWdhdGUgY3kgdG8gbmV3IGN5X2xpbWIKKwlzZgk4LDExLDcJCSMgYWRkIHJlc19saW1iCisJYQkxMSw4LDExIAkjIGludmVydCBjeSAocjExIGlzIGp1bmspCisJYmdlCUxuMAorCWNheAkxMCwxMCw2IAkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTG4wOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCW1mbXEJNworCWFlCTExLDcsMTAKKwlsCTcsNCgzKQorCWFlCTksOSwwCQkjIHByb3BhZ2F0ZSBjeSB0byBuZXcgY3lfbGltYgorCXNmCTgsMTEsNwkJIyBhZGQgcmVzX2xpbWIKKwlhCTExLDgsMTEgCSMgaW52ZXJ0IGN5IChyMTEgaXMganVuaykKKwliZ2UJTG4xCisJY2F4CTksOSw2CQkjIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTG4xOgliZG4JTG5sb29wCisJYglMZW5kCisKK0xlbmQwOgljYWwJOSwwKDEwKQorTGVuZDoJc3QJOCw0KDMpCisJYXplCTMsOQorCWJyCisKZGlmZiAtLWdpdCBhL21waS9wb3dlci9tcGloLXJzaGlmdC5TIGIvbXBpL3Bvd2VyL21waWgtcnNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMWE4NgotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlci9tcGloLXJzaGlmdC5TCkBAIC0wLDAgKzEsNjQgQEAKKy8qIElCTSBQT1dFUiByc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5OSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1ZGUgImFzbS1zeW50YXguaCIKKworCisvKgorIyBJTlBVVCBQQVJBTUVURVJTCisjIHJlc19wdHIJcjMKKyMgc19wdHIgCXI0CisjIHNpemUJCXI1CisjIGNudAkJcjYKKyovCisKKwkudG9jCisJLmV4dGVybiBfZ2NyeV9tcGloX3JzaGlmdFtEU10KKwkuZXh0ZXJuIC5fZ2NyeV9tcGloX3JzaGlmdAorLmNzZWN0IFtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX3JzaGlmdAorCS5nbG9ibCAuX2djcnlfbXBpaF9yc2hpZnQKKwkuY3NlY3QgX2djcnlfbXBpaF9yc2hpZnRbRFNdCitfZ2NyeV9tcGloX3JzaGlmdDoKKwkubG9uZyAuX2djcnlfbXBpaF9yc2hpZnQsIFRPQ1t0YzBdLCAwCisJLmNzZWN0IFtQUl0KKy5fZ2NyeV9tcGloX3JzaGlmdDoKKwlzZmkJOCw2LDMyCisJbXRjdHIJNQkJIyBwdXQgbGltYiBjb3VudCBpbiBDVFIgbG9vcCByZWdpc3RlcgorCWwJMCwwKDQpCQkjIHJlYWQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYgorCWFpCTksMywtNAkJIyBhZGp1c3QgcmVzX3B0ciBzaW5jZSBpdCdzIG9mZnNldCBpbiB0aGUgc3R1OnMKKwlzbGUJMywwLDgJCSMgY29tcHV0ZSBjYXJyeSBsaW1iLCBhbmQgaW5pdCBNUSByZWdpc3RlcgorCWJkeglMZW5kMgkJIyBpZiBqdXN0IG9uZSBsaW1iLCBza2lwIGxvb3AKKwlsdQkwLDQoNCkJCSMgcmVhZCAyOm5kIGxlYXN0IHNpZ25pZmljYW50IGxpbWIKKwlzbGVxCTcsMCw4CQkjIGNvbXB1dGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiByZXN1bHQKKwliZHoJTGVuZAkJIyBpZiBqdXN0IHR3byBsaW1iLCBza2lwIGxvb3AKK0xvb3A6CWx1CTAsNCg0KQkJIyBsb2FkIG5leHQgaGlnaGVyIGxpbWIKKwlzdHUJNyw0KDkpCQkjIHN0b3JlIHByZXZpb3VzIHJlc3VsdCBkdXJpbmcgcmVhZCBsYXRlbmN5CisJc2xlcQk3LDAsOAkJIyBjb21wdXRlIHJlc3VsdCBsaW1iCisJYmRuCUxvb3AJCSMgbG9vcCBiYWNrIHVudGlsIENUUiBpcyB6ZXJvCitMZW5kOglzdHUJNyw0KDkpCQkjIHN0b3JlIDI6bmQgbW9zdCBzaWduaWZpY2FudCBsaW1iCitMZW5kMjoJc3JlCTcsMCw2CQkjIGNvbXB1dGUgbW9zdCBzaWduaWZpY2FudCBsaW1iCisJc3QJNyw0KDkpCQkjIHN0b3JlIGl0CisJYnIKKworCmRpZmYgLS1naXQgYS9tcGkvcG93ZXIvbXBpaC1zdWIxLlMgYi9tcGkvcG93ZXIvbXBpaC1zdWIxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3NDhmYwotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlci9tcGloLXN1YjEuUwpAQCAtMCwwICsxLDg4IEBACisvKiBJQk0gUE9XRVIgc3ViX24gLS0gU3VidHJhY3QgdHdvIGxpbWIgdmVjdG9ycyBvZiBlcXVhbCwgbm9uLXplcm8gbGVuZ3RoLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LAorICogICAgICAgICAgICAgICAgICAgIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKy8qCisjIElOUFVUIFBBUkFNRVRFUlMKKyMgcmVzX3B0cglyMworIyBzMV9wdHIJcjQKKyMgczJfcHRyCXI1CisjIHNpemUJCXI2CisgKi8KKworCS50b2MKKwkuZXh0ZXJuIF9nY3J5X21waWhfc3ViX25bRFNdCisJLmV4dGVybiAuX2djcnlfbXBpaF9zdWJfbgorLmNzZWN0IFtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX3N1Yl9uCisJLmdsb2JsIC5fZ2NyeV9tcGloX3N1Yl9uCisJLmNzZWN0IF9nY3J5X21waWhfc3ViX25bRFNdCitfZ2NyeV9tcGloX3N1Yl9uOgorCS5sb25nIC5fZ2NyeV9tcGloX3N1Yl9uLCBUT0NbdGMwXSwgMAorCS5jc2VjdCBbUFJdCisuX2djcnlfbXBpaF9zdWJfbjoKKwlhbmRpbC4JMTAsNiwxCQkjIG9kZCBvciBldmVuIG51bWJlciBvZiBsaW1icz8KKwlsCTgsMCg0KQkJIyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMxIGxpbWIKKwlsCTAsMCg1KQkJIyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMyIGxpbWIKKwljYWwJMywtNCgzKSAJIyBvZmZzZXQgcmVzX3B0ciwgaXQncyB1cGRhdGVkIGJlZm9yZSBpdCdzIHVzZWQKKwlzcmkJMTAsNiwxCQkjIGNvdW50IGZvciB1bnJvbGxlZCBsb29wCisJc2YJNywwLDgJCSMgc3VidHJhY3QgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMsIHNldCBjeQorCW10Y3RyCTEwCQkjIGNvcHkgY291bnQgaW50byBDVFIKKwliZXEJMCxMZXZlbiAJIyBicmFuY2ggaWYgZXZlbiAjIG9mIGxpbWJzICgjIG9mIGxpbWJzID49IDIpCisKKyMgV2UgaGF2ZSBhbiBvZGQgIyBvZiBsaW1icy4gIEFkZCB0aGUgZmlyc3QgbGltYnMgc2VwYXJhdGVseS4KKwljbXBpCTEsMTAsMAkJIyBpcyBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcCB6ZXJvPworCWJuZQkxLEwxCQkjIGJyYW5jaCBpZiBub3QKKwlzdAk3LDQoMykKKwlzZmUJMywwLDAJCSMgbG9hZCAhY3kgaW50byAuLi4KKwlzZmkJMywzLDAJCSMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWJyCQkJIyByZXR1cm4KKworIyBXZSBhZGRlZCBsZWFzdCBzaWduaWZpY2FudCBsaW1icy4gIE5vdyByZWxvYWQgdGhlIG5leHQgbGltYnMgdG8gZW50ZXIgbG9vcC4KK0wxOglsdQk4LDQoNCkJCSMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHUJMCw0KDUpCQkjIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCXN0dQk3LDQoMykKKwlzZmUJNywwLDgJCSMgc3VidHJhY3QgbGltYnMsIHNldCBjeQorTGV2ZW46CWx1CTksNCg0KQkJIyBsb2FkIHMxIGxpbWIgYW5kIHVwZGF0ZSBzMV9wdHIKKwlsdQkxMCw0KDUpIAkjIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCWJkeglMZW5kCQkjIElmIGRvbmUsIHNraXAgbG9vcAorCitMb29wOglsdQk4LDQoNCkJCSMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHUJMCw0KDUpCQkjIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCXNmZQkxMSwxMCw5IAkjIHN1YnRyYWN0IHByZXZpb3VzIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0dQk3LDQoMykJCSMKKwlsdQk5LDQoNCkJCSMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHUJMTAsNCg1KSAJIyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlzZmUJNywwLDgJCSMgc3VidHJhY3QgcHJldmlvdXMgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3R1CTExLDQoMykgCSMKKwliZG4JTG9vcAkJIyBkZWNyZW1lbnQgQ1RSIGFuZCBsb29wIGJhY2sKKworTGVuZDoJc2ZlCTExLDEwLDkgCSMgc3VidHJhY3QgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3QJNyw0KDMpCQkjCisJc3QJMTEsOCgzKSAJIworCXNmZQkzLDAsMAkJIyBsb2FkICFjeSBpbnRvIC4uLgorCXNmaQkzLDMsMAkJIyAuLi4gcmV0dXJuIHZhbHVlIHJlZ2lzdGVyCisJYnIKKwpkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VycGMzMi9NYW5pZmVzdCBiL21waS9wb3dlcnBjMzIvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhYjZlYQotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlcnBjMzIvTWFuaWZlc3QKQEAgLTAsMCArMSwyOCBAQAorIyBNYW5pZmVzdCAtIGNoZWNrc3VtcyAKKyMgQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK21waWgtYWRkMS5TCittcGloLXN1YjEuUworbXBpaC1tdWwxLlMKK21waWgtbXVsMi5TCittcGloLW11bDMuUworbXBpaC1sc2hpZnQuUworbXBpaC1yc2hpZnQuUworc3ludGF4LmgKKyRuYW1lcyQgaVFDVkF3VUFQK0xtWXpFQW5wODMyUy83QVFJL2NRUCtNY2c5ckYvYy9iSlRZNDhQRTEvQVJ0N3ZDTXRwSWx2OWFsWlNTU3JVM1dIekN0djluVmN6Rm13SFUzRGRLRmF3aWdZMkRsalFjSzkyZFo1WmxPZnBGTk16NFBLbFZNV2FLRGsraktscW0yZHh2bEh1cUV2WFBwakZBRTJnSHJocTVxTFhTNVpIZU1MSklFSzg0R1lDNmZqZkxVTWRaVTNhbHRYVFVCdm9YaEE9PVlheCsKZGlmZiAtLWdpdCBhL21waS9wb3dlcnBjMzIvZGlzdGZpbGVzIGIvbXBpL3Bvd2VycGMzMi9kaXN0ZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NjYxNAotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlcnBjMzIvZGlzdGZpbGVzCkBAIC0wLDAgKzEsMTAgQEAKK01hbmlmZXN0CittcGloLWFkZDEuUworbXBpaC1zdWIxLlMKK21waWgtbXVsMS5TCittcGloLW11bDIuUworbXBpaC1tdWwzLlMKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKK3N5bnRheC5oCisKZGlmZiAtLWdpdCBhL21waS9wb3dlcnBjMzIvbXBpaC1hZGQxLlMgYi9tcGkvcG93ZXJwYzMyL21waWgtYWRkMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjFmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXJwYzMyL21waWgtYWRkMS5TCkBAIC0wLDAgKzEsMTM2IEBACisvKiBQb3dlclBDLTMyIGFkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIGVxdWFsLCBub24temVybyBsZW5ndGguCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKyNpZm5kZWYgVVNFX1BQQ19QQVRDSEVTCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfYWRkX24oIG1waV9wdHJfdCByZXNfcHRyLAkocjMpCisgKgkJICAgbXBpX3B0cl90IHMxX3B0ciwJKHI0KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShyNSkKKyAqCQkgICBtcGlfc2l6ZV90IHNpemUpCShyNikKKyAqLworCisJLnRvYworCS5leHRlcm4gX2djcnlfbXBpaF9hZGRfbltEU10KKwkuZXh0ZXJuIC5fZ2NyeV9tcGloX2FkZF9uCisuY3NlY3QgW1BSXQorCS5hbGlnbiAyCisJLmdsb2JsIF9nY3J5X21waWhfYWRkX24KKwkuZ2xvYmwgLl9nY3J5X21waWhfYWRkX24KKwkuY3NlY3QgX2djcnlfbXBpaF9hZGRfbltEU10KK19nY3J5X21waWhfYWRkX246CisJLmxvbmcgLl9nY3J5X21waWhfYWRkX24sIFRPQ1t0YzBdLCAwCisJLmNzZWN0IFtQUl0KKy5fZ2NyeV9tcGloX2FkZF9uOgorCW10Y3RyCTYJCSMgY29weSBzaXplIGludG8gQ1RSCisJbHd6CTgsMCg0KQkJIyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMxIGxpbWIKKwlsd3oJMCwwKDUpCQkjIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczIgbGltYgorCWFkZGkJMywzLC00CQkjIG9mZnNldCByZXNfcHRyLCBpdCBpcyB1cGRhdGVkIGJlZm9yZSB1c2VkCisJYWRkYwk3LDAsOAkJIyBhZGQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMsIHNldCBjeQorCWJkeglMZW5kCQkjIElmIGRvbmUsIHNraXAgbG9vcAorTG9vcDoJbHd6dQk4LDQoNCkJCSMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHd6dQkwLDQoNSkJCSMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJc3R3dQk3LDQoMykJCSMgc3RvcmUgcHJldmlvdXMgbGltYiBpbiBsb2FkIGxhdGVuY3kgc2xvdAorCWFkZGUJNywwLDgJCSMgYWRkIG5ldyBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwliZG56CUxvb3AJCSMgZGVjcmVtZW50IENUUiBhbmQgbG9vcCBiYWNrCitMZW5kOglzdHcJNyw0KDMpCQkjIHN0b3JlIHVsdGltYXRlIHJlc3VsdCBsaW1iCisJbGkJMywwCQkjIGxvYWQgY3kgaW50byAuLi4KKwlhZGR6ZQkzLDMJCSMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWJscgorCisjZWxzZQorLyogQWRkIHR3byBsaW1iIHZlY3RvcnMgb2YgZXF1YWwsIG5vbi16ZXJvIGxlbmd0aCBmb3IgUG93ZXJQQy4KKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgkqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKy8qIG1wX2xpbWJfdCBtcG5fYWRkX24gKG1wX3B0ciByZXNfcHRyLCBtcF9zcmNwdHIgczFfcHRyLCBtcF9zcmNwdHIgczJfcHRyLAorCQkJbXBfc2l6ZV90IHNpemUpCisgICBDYWxjdWxhdGUgczErczIgYW5kIHB1dCByZXN1bHQgaW4gcmVzX3B0cjsgcmV0dXJuIGNhcnJ5LCAwIG9yIDEuICAqLworCisvKiBOb3RlIG9uIG9wdGltaXNhdGlvbjogVGhpcyBjb2RlIGlzIG9wdGltYWwgZm9yIHRoZSA2MDEuICBBbG1vc3QgZXZlcnkgb3RoZXIKKyAgIHBvc3NpYmxlIDItdW5yb2xsZWQgaW5uZXIgbG9vcCB3aWxsIG5vdCBiZS4JQWxzbywgd2F0Y2ggb3V0IGZvciB0aGUKKyAgIGFsaWdubWVudC4uLiAgKi8KKworRUFMSUdOKF9nY3J5X21waWhfYWRkX24sMywwKQorLyogU2V0IHVwIGZvciBsb29wIGJlbG93LiAgKi8KKyAgICAgICBtdGNyZiAweDAxLCVyNgorICAgICAgIHNyd2kuICVyNywlcjYsMQorICAgICAgIGxpICAgICVyMTAsMAorICAgICAgIG10Y3RyICVyNworICAgICAgIGJ0ICAgIDMxLDJmCisKKy8qIENsZWFyIHRoZSBjYXJyeS4gICovCisgICAgICAgYWRkaWMgJXIwLCVyMCwwCisvKiBBZGp1c3QgcG9pbnRlcnMgZm9yIGxvb3AuICAqLworICAgICAgIGFkZGkgICVyMywlcjMsLTQKKyAgICAgICBhZGRpICAlcjQsJXI0LC00CisgICAgICAgYWRkaSAgJXI1LCVyNSwtNAorICAgICAgIGIgICAgIDBmCisKKzI6ICAgICBsd3ogICVyNywwKCVyNSkKKyAgICAgICBsd3ogICVyNiwwKCVyNCkKKyAgICAgICBhZGRjICVyNiwlcjYsJXI3CisgICAgICAgc3R3ICAlcjYsMCglcjMpCisJYmVxICAxZgorCisvKiBUaGUgbG9vcC4gICovCisKKy8qIEFsaWduIHN0YXJ0IG9mIGxvb3AgdG8gYW4gb2RkIHdvcmQgYm91bmRhcnkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlCisgICBsYXN0IHR3byB3b3JkcyBjYW4gYmUgZmV0Y2hlZCBpbiBvbmUgYWNjZXNzIChmb3IgNjAxKS4gICovCiswOiAgICAgbHd6ICAlcjksNCglcjQpCisgICAgICAgbHd6ICAlcjgsNCglcjUpCisgICAgICAgbHd6dSAlcjYsOCglcjQpCisgICAgICAgbHd6dSAlcjcsOCglcjUpCisgICAgICAgYWRkZSAlcjgsJXI5LCVyOAorICAgICAgIHN0dyAgJXI4LDQoJXIzKQorICAgICAgIGFkZGUgJXI2LCVyNiwlcjcKKyAgICAgICBzdHd1ICVyNiw4KCVyMykKKyAgICAgICBiZG56IDBiCisvKiBSZXR1cm4gdGhlIGNhcnJ5LiAgKi8KKzE6ICAgICBhZGR6ZSAlcjMsJXIxMAorICAgICAgIGJscgorRU5EKF9nY3J5X21waWhfYWRkX24pCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VycGMzMi9tcGloLWxzaGlmdC5TIGIvbXBpL3Bvd2VycGMzMi9tcGloLWxzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzEwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXJwYzMyL21waWgtbHNoaWZ0LlMKQEAgLTAsMCArMSwxOTggQEAKKy8qIFBvd2VyUEMtMzIgbHNoaWZ0CisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTgsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworI2lmbmRlZiBVU0VfUFBDX1BBVENIRVMKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfbHNoaWZ0KCBtcGlfcHRyX3Qgd3AsCShyMykKKyAqCQkgICBtcGlfcHRyX3QgdXAsCShyNCkKKyAqCQkgICBtcGlfc2l6ZV90IHVzaXplLAkocjUpCisgKgkJICAgdW5zaWduZWQgY250KQkocjYpCisgKi8KKworCS50b2MKKy5jc2VjdAkudGV4dFtQUl0KKwkuYWxpZ24JMgorCS5nbG9ibAlfZ2NyeV9tcGloX2xzaGlmdAorCS5nbG9ibAkuX2djcnlfbXBpaF9sc2hpZnQKKwkuY3NlY3QJX2djcnlfbXBpaF9sc2hpZnRbRFNdCitfZ2NyeV9tcGloX2xzaGlmdDoKKwkubG9uZwkuX2djcnlfbXBpaF9sc2hpZnQsICBUT0NbdGMwXSwJICAwCisJLmNzZWN0CS50ZXh0W1BSXQorLl9nY3J5X21waWhfbHNoaWZ0OgorCW10Y3RyCTUJCSMgY29weSBzaXplIGludG8gQ1RSCisJc2x3aQkwLDUsMgorCWFkZAk3LDMsMAkJIyBtYWtlIHI3IHBvaW50IGF0IGVuZCBvZiByZXMKKwlhZGQJNCw0LDAJCSMgbWFrZSByNCBwb2ludCBhdCBlbmQgb2YgczEKKwlzdWJmaWMJOCw2LDMyCisJbHd6dQkxMSwtNCg0KQkjIGxvYWQgZmlyc3QgczEgbGltYgorCXNydwkzLDExLDgJCSMgY29tcHV0ZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUKKwliZHoJTGVuZDEKKworTG9vcDoJbHd6dQkxMCwtNCg0KQorCXNsdwk5LDExLDYKKwlzcncJMTIsMTAsOAorCW9yCTksOSwxMgorCXN0d3UJOSwtNCg3KQorCWJkeglMZW5kMgorCWx3enUJMTEsLTQoNCkKKwlzbHcJOSwxMCw2CisJc3J3CTEyLDExLDgKKwlvcgk5LDksMTIKKwlzdHd1CTksLTQoNykKKwliZG56CUxvb3AKKworTGVuZDE6CXNsdwkwLDExLDYKKwlzdHcJMCwtNCg3KQorCWJscgorCitMZW5kMjoJc2x3CTAsMTAsNgorCXN0dwkwLC00KDcpCisJYmxyCisKKyNlbHNlCisvKiBTaGlmdCBhIGxpbWIgbGVmdCwgbG93IGxldmVsIHJvdXRpbmUuCisgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4JKi8KKworLyogbXBfbGltYl90IG1wbl9sc2hpZnQgKG1wX3B0ciB3cCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdXNpemUsCisJCQl1bnNpZ25lZCBpbnQgY250KSAgKi8KKworRUFMSUdOKF9nY3J5X21waWhfbHNoaWZ0LDMsMCkKKyAgICAgICBtdGN0ciAgICVyNQkgICAgICAgIyBjb3B5IHNpemUgaW50byBDVFIKKyAgICAgICBjbXBsd2kgICVjcjAsJXI1LDE2ICAgICAjIGlzIHNpemUgPCAxNgorICAgICAgIHNsd2kgICAgJXIwLCVyNSwyCisgICAgICAgYWRkICAgICAlcjcsJXIzLCVyMCAgICAgIyBtYWtlIHI3IHBvaW50IGF0IGVuZCBvZiByZXMKKyAgICAgICBhZGQgICAgICVyNCwlcjQsJXIwICAgICAjIG1ha2UgcjQgcG9pbnQgYXQgZW5kIG9mIHMxCisgICAgICAgbHd6dSAgICAlcjExLC00KCVyNCkgICAgIyBsb2FkIGZpcnN0IHMxIGxpbWIKKyAgICAgICBzdWJmaWMgICVyOCwlcjYsMzIKKyAgICAgICBzcncgICAgICVyMywlcjExLCVyOCAgICAjIGNvbXB1dGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisgICAgICAgYmdlICAgICAlY3IwLEwoYmlnKSAgICAgIyBicmFuY2ggaWYgc2l6ZSA+PSAxNgorCisgICAgICAgYmR6ICAgICBMKGVuZDEpCisKKzA6ICAgICBsd3p1ICAgICVyMTAsLTQoJXI0KQorICAgICAgIHNsdyAgICAgJXI5LCVyMTEsJXI2CisgICAgICAgc3J3ICAgICAlcjEyLCVyMTAsJXI4CisgICAgICAgb3IgICAgICAlcjksJXI5LCVyMTIKKyAgICAgICBzdHd1ICAgICVyOSwtNCglcjcpCisgICAgICAgYmR6ICAgICBMKGVuZDIpCisgICAgICAgbHd6dSAgICAlcjExLC00KCVyNCkKKyAgICAgICBzbHcgICAgICVyOSwlcjEwLCVyNgorICAgICAgIHNydyAgICAgJXIxMiwlcjExLCVyOAorICAgICAgIG9yICAgICAgJXI5LCVyOSwlcjEyCisgICAgICAgc3R3dSAgICAlcjksLTQoJXI3KQorICAgICAgIGJkbnogICAgMGIKKworTChlbmQxKTpzbHcgICAgJXIwLCVyMTEsJXI2CisgICAgICAgc3R3ICAgICAlcjAsLTQoJXI3KQorICAgICAgIGJscgorCisKKy8qIEd1YXJhbnRlZWQgbm90IHRvIHN1Y2NlZWQuICAqLworTChib29tKTogdHdlcQkgJXIwLCVyMAorCisvKiBXZSBpbWl0YXRlIGEgY2FzZSBzdGF0ZW1lbnQsIGJ5IHVzaW5nICh5dWshKSBmaXhlZC1sZW5ndGggY29kZSBjaHVua3MsCisgICBvZiBzaXplIDQqMTIgYnl0ZXMuCVdlIGhhdmUgdG8gZG8gdGhpcyAob3Igc29tZXRoaW5nKSB0byBtYWtlIHRoaXMgUElDLiAgKi8KK0woYmlnKTogICAgICAgIG1mbHIgICAgJXI5CisgICAgICAgYmx0bC0gICAlY3IwLEwoYm9vbSkgICAgIyBOZXZlciB0YWtlbiwgb25seSB1c2VkIHRvIHNldCBMUi4KKyAgICAgICBzbHdpICAgICVyMTAsJXI2LDQKKyAgICAgICBtZmxyICAgICVyMTIKKyAgICAgICBhZGQgICAgICVyMTAsJXIxMiwlcjEwCisgICAgICAgc2x3aSAgICAlcjgsJXI2LDUKKyAgICAgICBhZGQgICAgICVyMTAsJXI4LCVyMTAKKyAgICAgICBtdGN0ciAgICVyMTAKKyAgICAgICBhZGRpICAgICVyNSwlcjUsLTEKKyAgICAgICBtdGxyICAgICVyOQorICAgICAgIGJjdHIKKworTChlbmQyKTpzbHcgICAgJXIwLCVyMTAsJXI2CisgICAgICAgc3R3ICAgICAlcjAsLTQoJXI3KQorICAgICAgIGJscgorCisjZGVmaW5lIERPX0xTSElGVChuKSBcCisgICAgICAgbXRjdHIgICAlcjU7CQkJCQkJICAgICAgIFwKKzA6ICAgICBsd3p1ICAgICVyMTAsLTQoJXI0KTsJCQkJCSAgICAgICBcCisgICAgICAgc2x3aSAgICAlcjksJXIxMSxuOwkJCQkJICAgICAgIFwKKyAgICAgICBpbnNsd2kgICVyOSwlcjEwLG4sMzItbjsgCQkJCSAgICAgICBcCisgICAgICAgc3R3dSAgICAlcjksLTQoJXI3KTsJCQkJCSAgICAgICBcCisgICAgICAgYmR6LSAgICBMKGVuZDIpOyAJCQkJCSAgICAgICBcCisgICAgICAgbHd6dSAgICAlcjExLC00KCVyNCk7CQkJCQkgICAgICAgXAorICAgICAgIHNsd2kgICAgJXI5LCVyMTAsbjsJCQkJCSAgICAgICBcCisgICAgICAgaW5zbHdpICAlcjksJXIxMSxuLDMyLW47IAkJCQkgICAgICAgXAorICAgICAgIHN0d3UgICAgJXI5LC00KCVyNyk7CQkJCQkgICAgICAgXAorICAgICAgIGJkbnogICAgMGI7CQkJCQkJICAgICAgIFwKKyAgICAgICBiICAgICAgIEwoZW5kMSkKKworICAgICAgIERPX0xTSElGVCgxKQorICAgICAgIERPX0xTSElGVCgyKQorICAgICAgIERPX0xTSElGVCgzKQorICAgICAgIERPX0xTSElGVCg0KQorICAgICAgIERPX0xTSElGVCg1KQorICAgICAgIERPX0xTSElGVCg2KQorICAgICAgIERPX0xTSElGVCg3KQorICAgICAgIERPX0xTSElGVCg4KQorICAgICAgIERPX0xTSElGVCg5KQorICAgICAgIERPX0xTSElGVCgxMCkKKyAgICAgICBET19MU0hJRlQoMTEpCisgICAgICAgRE9fTFNISUZUKDEyKQorICAgICAgIERPX0xTSElGVCgxMykKKyAgICAgICBET19MU0hJRlQoMTQpCisgICAgICAgRE9fTFNISUZUKDE1KQorICAgICAgIERPX0xTSElGVCgxNikKKyAgICAgICBET19MU0hJRlQoMTcpCisgICAgICAgRE9fTFNISUZUKDE4KQorICAgICAgIERPX0xTSElGVCgxOSkKKyAgICAgICBET19MU0hJRlQoMjApCisgICAgICAgRE9fTFNISUZUKDIxKQorICAgICAgIERPX0xTSElGVCgyMikKKyAgICAgICBET19MU0hJRlQoMjMpCisgICAgICAgRE9fTFNISUZUKDI0KQorICAgICAgIERPX0xTSElGVCgyNSkKKyAgICAgICBET19MU0hJRlQoMjYpCisgICAgICAgRE9fTFNISUZUKDI3KQorICAgICAgIERPX0xTSElGVCgyOCkKKyAgICAgICBET19MU0hJRlQoMjkpCisgICAgICAgRE9fTFNISUZUKDMwKQorICAgICAgIERPX0xTSElGVCgzMSkKKworRU5EKF9nY3J5X21waWhfbHNoaWZ0KQorI2VuZGlmCmRpZmYgLS1naXQgYS9tcGkvcG93ZXJwYzMyL21waWgtbXVsMS5TIGIvbXBpL3Bvd2VycGMzMi9tcGloLW11bDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQxOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL3Bvd2VycGMzMi9tcGloLW11bDEuUwpAQCAtMCwwICsxLDEyMCBAQAorLyogUG93ZXJQQy0zMiBtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorICoJCSAgICAgICB0aGUgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAorICogICAgICAgICAgICAgICAgICAgIDE5OTgsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworI2lmbmRlZiBVU0VfUFBDX1BBVENIRVMKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLAkocjMpCisgKgkJICBtcGlfcHRyX3QgczFfcHRyLAkocjQpCisgKgkJICBtcGlfc2l6ZV90IHMxX3NpemUsCShyNSkKKyAqCQkgIG1waV9saW1iX3QgczJfbGltYikJKHI2KQorICoKKyAqIFRoaXMgaXMgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uLiAgVGhlIHRpbWluZyBvZiB0aGUgUEM2MDEKKyAqIGlzIGhhcmQgdG8gdW5kZXJzdGFuZCwgc28gSSB3aWxsIHdhaXQgdG8gb3B0aW1pemUgdGhpcyB1bnRpbCBJIGhhdmUgc29tZQorICogaGFyZHdhcmUgdG8gcGxheSB3aXRoLgorICoKKyAqIFRoZSBjb2RlIHRyaXZpYWxseSBnZW5lcmFsaXplcyB0byA2NCBiaXQgbGltYnMgZm9yIHRoZSBQQzYyMC4KKyAqLworCisJLnRvYworCS5jc2VjdCAuX2djcnlfbXBpaF9tdWxfMVtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX211bF8xCisJLmdsb2JsIC5fZ2NyeV9tcGloX211bF8xCisJLmNzZWN0IF9nY3J5X21waWhfbXVsXzFbRFNdCitfZ2NyeV9tcGloX211bF8xOgorCS5sb25nIC5fZ2NyeV9tcGloX211bF8xW1BSXSwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgLl9nY3J5X21waWhfbXVsXzFbUFJdCisuX2djcnlfbXBpaF9tdWxfMToKKwltdGN0cgk1CisKKwlsd3oJMCwwKDQpCisJbXVsbHcJNywwLDYKKwltdWxod3UJMTAsMCw2CisJYWRkaQkzLDMsLTQJCSMgYWRqdXN0IHJlc19wdHIKKwlhZGRpYwk1LDUsMAkJIyBjbGVhciBjeSB3aXRoIGR1bW15IGluc24KKwliZHoJTGVuZAorCitMb29wOglsd3p1CTAsNCg0KQorCXN0d3UJNyw0KDMpCisJbXVsbHcJOCwwLDYKKwlhZGRlCTcsOCwxMAorCW11bGh3dQkxMCwwLDYKKwliZG56CUxvb3AKKworTGVuZDoJc3R3CTcsNCgzKQorCWFkZHplCTMsMTAKKwlibHIKKworI2Vsc2UKKy8qIE11bHRpcGx5IGEgbGltYiB2ZWN0b3IgYnkgYSBsaW1iLCBmb3IgUG93ZXJQQy4KKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgkqLworCisKKy8qIG1wX2xpbWJfdCBtcG5fbXVsXzEgKG1wX3B0ciByZXNfcHRyLCBtcF9zcmNwdHIgczFfcHRyLAorCQkJbXBfc2l6ZV90IHMxX3NpemUsIG1wX2xpbWJfdCBzMl9saW1iKQorICAgQ2FsY3VsYXRlIHMxKnMyIGFuZCBwdXQgcmVzdWx0IGluIHJlc19wdHI7IHJldHVybiBjYXJyeS4gICovCisKK0VOVFJZKF9nY3J5X21waWhfbXVsXzEpCisgICAgICAgbXRjdHIgICAlcjUKKworICAgICAgIGx3eiAgICAgJXIwLDAoJXI0KQorICAgICAgIG11bGx3ICAgJXI3LCVyMCwlcjYKKyAgICAgICBtdWxod3UgICVyMTAsJXIwLCVyNgorICAgICAgIGFkZGkgICAgJXIzLCVyMywtNAkgICAgICAgIyBhZGp1c3QgcmVzX3B0cgorICAgICAgIGFkZGljICAgJXI1LCVyNSwwCSAgICAgICAjIGNsZWFyIGN5IHdpdGggZHVtbXkgaW5zbgorICAgICAgIGJkeiAgICAgMWYKKworMDogICAgIGx3enUgICAgJXIwLDQoJXI0KQorICAgICAgIHN0d3UgICAgJXI3LDQoJXIzKQorICAgICAgIG11bGx3ICAgJXI4LCVyMCwlcjYKKyAgICAgICBhZGRlICAgICVyNywlcjgsJXIxMAorICAgICAgIG11bGh3dSAgJXIxMCwlcjAsJXI2CisgICAgICAgYmRueiAgICAwYgorCisxOiAgICAgc3R3ICAgICAlcjcsNCglcjMpCisgICAgICAgYWRkemUgICAlcjMsJXIxMAorICAgICAgIGJscgorRU5EKF9nY3J5X21waWhfbXVsXzEpCisjZW5kaWYKZGlmZiAtLWdpdCBhL21waS9wb3dlcnBjMzIvbXBpaC1tdWwyLlMgYi9tcGkvcG93ZXJwYzMyL21waWgtbXVsMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTdiODEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXJwYzMyL21waWgtbXVsMi5TCkBAIC0wLDAgKzEsMTI3IEBACisvKiBQb3dlclBDLTMyIGFkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZAorICoJCQkgIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTgsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworI2lmbmRlZiBVU0VfUFBDX1BBVENIRVMKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfYWRkbXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChyMykKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHI0KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHI1KQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHI2KQorICoKKyAqIFRoaXMgaXMgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uLiAgVGhlIHRpbWluZyBvZiB0aGUgUEM2MDEKKyAqIGlzIGhhcmQgdG8gdW5kZXJzdGFuZCwgc28gSSB3aWxsIHdhaXQgdG8gb3B0aW1pemUgdGhpcyB1bnRpbCBJIGhhdmUgc29tZQorICogaGFyZHdhcmUgdG8gcGxheSB3aXRoLgorICoKKyAqIFRoZSBjb2RlIHRyaXZpYWxseSBnZW5lcmFsaXplcyB0byA2NCBiaXQgbGltYnMgZm9yIHRoZSBQQzYyMC4KKyAqLworCisKKwkudG9jCisJLmNzZWN0IC5fZ2NyeV9tcGloX2FkZG11bF8xW1BSXQorCS5hbGlnbiAyCisJLmdsb2JsIF9nY3J5X21waWhfYWRkbXVsXzEKKwkuZ2xvYmwgLl9nY3J5X21waWhfYWRkbXVsXzEKKwkuY3NlY3QgX2djcnlfbXBpaF9hZGRtdWxfMVtEU10KK19nY3J5X21waWhfYWRkbXVsXzE6CisJLmxvbmcgLl9nY3J5X21waWhfYWRkbXVsXzFbUFJdLCBUT0NbdGMwXSwgMAorCS5jc2VjdCAuX2djcnlfbXBpaF9hZGRtdWxfMVtQUl0KKy5fZ2NyeV9tcGloX2FkZG11bF8xOgorCW10Y3RyCTUKKworCWx3egkwLDAoNCkKKwltdWxsdwk3LDAsNgorCW11bGh3dQkxMCwwLDYKKwlsd3oJOSwwKDMpCisJYWRkYwk4LDcsOQorCWFkZGkJMywzLC00CisJYmR6CUxlbmQKKworTG9vcDoJbHd6dQkwLDQoNCkKKwlzdHd1CTgsNCgzKQorCW11bGx3CTgsMCw2CisJYWRkZQk3LDgsMTAKKwltdWxod3UJMTAsMCw2CisJbHd6CTksNCgzKQorCWFkZHplCTEwLDEwCisJYWRkYwk4LDcsOQorCWJkbnoJTG9vcAorCitMZW5kOglzdHcJOCw0KDMpCisJYWRkemUJMywxMAorCWJscgorCisjZWxzZQorLyogTXVsdGlwbHkgYSBsaW1iIHZlY3RvciBieSBhIHNpbmdsZSBsaW1iLCBmb3IgUG93ZXJQQy4KKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgkqLworCisKKy8qIG1wX2xpbWJfdCBtcG5fYWRkbXVsXzEgKG1wX3B0ciByZXNfcHRyLCBtcF9zcmNwdHIgczFfcHRyLAorCQkJICAgbXBfc2l6ZV90IHMxX3NpemUsIG1wX2xpbWJfdCBzMl9saW1iKQorICAgQ2FsY3VsYXRlIHJlcytzMSpzMiBhbmQgcHV0IHJlc3VsdCBiYWNrIGluIHJlczsgcmV0dXJuIGNhcnJ5LiAgKi8KK0VOVFJZKF9nY3J5X21waWhfYWRkbXVsXzEpCisgICAgICAgbXRjdHIgICAlcjUKKworICAgICAgIGx3eiAgICAgJXIwLDAoJXI0KQorICAgICAgIG11bGx3ICAgJXI3LCVyMCwlcjYKKyAgICAgICBtdWxod3UgICVyMTAsJXIwLCVyNgorICAgICAgIGx3eiAgICAgJXI5LDAoJXIzKQorICAgICAgIGFkZGMgICAgJXI4LCVyNywlcjkKKyAgICAgICBhZGRpICAgICVyMywlcjMsLTQJICAgICAgIC8qIGFkanVzdCByZXNfcHRyICovCisgICAgICAgYmR6ICAgICAxZgorCiswOiAgICAgbHd6dSAgICAlcjAsNCglcjQpCisgICAgICAgc3R3dSAgICAlcjgsNCglcjMpCisgICAgICAgbXVsbHcgICAlcjgsJXIwLCVyNgorICAgICAgIGFkZGUgICAgJXI3LCVyOCwlcjEwCisgICAgICAgbXVsaHd1ICAlcjEwLCVyMCwlcjYKKyAgICAgICBsd3ogICAgICVyOSw0KCVyMykKKyAgICAgICBhZGR6ZSAgICVyMTAsJXIxMAorICAgICAgIGFkZGMgICAgJXI4LCVyNywlcjkKKyAgICAgICBiZG56ICAgIDBiCisKKzE6ICAgICBzdHcgICAgICVyOCw0KCVyMykKKyAgICAgICBhZGR6ZSAgICVyMywlcjEwCisgICAgICAgYmxyCitFTkQoX2djcnlfbXBpaF9hZGRtdWxfMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbXBpL3Bvd2VycGMzMi9tcGloLW11bDMuUyBiL21waS9wb3dlcnBjMzIvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxMGRiYgotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlcnBjMzIvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSwxMzAgQEAKKy8qIFBvd2VyUEMtMzIgc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3VidHJhY3QKKyAqCQkJICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTgsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKyNpbmNsdWRlICJhc20tc3ludGF4LmgiCisKKworI2lmbmRlZiBVU0VfUFBDX1BBVENIRVMKKworLyoqKioqKioqKioqKioqKioqKioKKyAqIG1waV9saW1iX3QKKyAqIF9nY3J5X21waWhfc3VibXVsXzEoIG1waV9wdHJfdCByZXNfcHRyLCAgICAgIChyMykKKyAqCQkgICAgIG1waV9wdHJfdCBzMV9wdHIsCSAgICAgKHI0KQorICoJCSAgICAgbXBpX3NpemVfdCBzMV9zaXplLCAgICAgKHI1KQorICoJCSAgICAgbXBpX2xpbWJfdCBzMl9saW1iKSAgICAgKHI2KQorICoKKyAqIFRoaXMgaXMgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uLiAgVGhlIHRpbWluZyBvZiB0aGUgUEM2MDEKKyAqIGlzIGhhcmQgdG8gdW5kZXJzdGFuZCwgc28gSSB3aWxsIHdhaXQgdG8gb3B0aW1pemUgdGhpcyB1bnRpbCBJIGhhdmUgc29tZQorICogaGFyZHdhcmUgdG8gcGxheSB3aXRoLgorICoKKyAqIFRoZSBjb2RlIHRyaXZpYWxseSBnZW5lcmFsaXplcyB0byA2NCBiaXQgbGltYnMgZm9yIHRoZSBQQzYyMC4KKyAqLworCisJLnRvYworCS5jc2VjdCAuX2djcnlfbXBpaF9zdWJtdWxfMVtQUl0KKwkuYWxpZ24gMgorCS5nbG9ibCBfZ2NyeV9tcGloX3N1Ym11bF8xCisJLmdsb2JsIC5fZ2NyeV9tcGloX3N1Ym11bF8xCisJLmNzZWN0IF9nY3J5X21waWhfc3VibXVsXzFbRFNdCitfZ2NyeV9tcGloX3N1Ym11bF8xOgorCS5sb25nIC5fZ2NyeV9tcGloX3N1Ym11bF8xW1BSXSwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgLl9nY3J5X21waWhfc3VibXVsXzFbUFJdCisuX2djcnlfbXBpaF9zdWJtdWxfMToKKwltdGN0cgk1CisKKwlsd3oJMCwwKDQpCisJbXVsbHcJNywwLDYKKwltdWxod3UJMTAsMCw2CisJbHd6CTksMCgzKQorCXN1YmZjCTgsNyw5CisJYWRkYwk3LDcsOAkJIyBpbnZlcnQgY3kgKHI3IGlzIGp1bmspCisJYWRkaQkzLDMsLTQKKwliZHoJTGVuZAorCitMb29wOglsd3p1CTAsNCg0KQorCXN0d3UJOCw0KDMpCisJbXVsbHcJOCwwLDYKKwlhZGRlCTcsOCwxMAorCW11bGh3dQkxMCwwLDYKKwlsd3oJOSw0KDMpCisJYWRkemUJMTAsMTAKKwlzdWJmYwk4LDcsOQorCWFkZGMJNyw3LDgJCSMgaW52ZXJ0IGN5IChyNyBpcyBqdW5rKQorCWJkbnoJTG9vcAorCitMZW5kOglzdHcJOCw0KDMpCisJYWRkemUJMywxMAorCWJscgorCisjZWxzZQorLyogTXVsdGlwbHkgYSBsaW1iIHZlY3RvciBieSBhIHNpbmdsZSBsaW1iLCBmb3IgUG93ZXJQQy4KKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgkqLworCisvKiBtcF9saW1iX3QgbXBuX3N1Ym11bF8xIChtcF9wdHIgcmVzX3B0ciwgbXBfc3JjcHRyIHMxX3B0ciwKKwkJCSAgIG1wX3NpemVfdCBzMV9zaXplLCBtcF9saW1iX3QgczJfbGltYikKKyAgIENhbGN1bGF0ZSByZXMtczEqczIgYW5kIHB1dCByZXN1bHQgYmFjayBpbiByZXM7IHJldHVybiBjYXJyeS4gICovCisKK0VOVFJZKF9nY3J5X21waWhfc3VibXVsXzEpCisgICAgICAgbXRjdHIgICAlcjUKKworICAgICAgIGx3eiAgICAgJXIwLDAoJXI0KQorICAgICAgIG11bGx3ICAgJXI3LCVyMCwlcjYKKyAgICAgICBtdWxod3UgICVyMTAsJXIwLCVyNgorICAgICAgIGx3eiAgICAgJXI5LDAoJXIzKQorICAgICAgIHN1YmYgICAgJXI4LCVyNywlcjkKKyAgICAgICBhZGRjICAgICVyNywlcjcsJXI4CSAgICAgICAjIGludmVydCBjeSAocjcgaXMganVuaykKKyAgICAgICBhZGRpICAgICVyMywlcjMsLTQJICAgICAgICMgYWRqdXN0IHJlc19wdHIKKyAgICAgICBiZHogICAgIDFmCisKKzA6ICAgICBsd3p1ICAgICVyMCw0KCVyNCkKKyAgICAgICBzdHd1ICAgICVyOCw0KCVyMykKKyAgICAgICBtdWxsdyAgICVyOCwlcjAsJXI2CisgICAgICAgYWRkZSAgICAlcjcsJXI4LCVyMTAKKyAgICAgICBtdWxod3UgICVyMTAsJXIwLCVyNgorICAgICAgIGx3eiAgICAgJXI5LDQoJXIzKQorICAgICAgIGFkZHplICAgJXIxMCwlcjEwCisgICAgICAgc3ViZiAgICAlcjgsJXI3LCVyOQorICAgICAgIGFkZGMgICAgJXI3LCVyNywlcjgJICAgICAgICMgaW52ZXJ0IGN5IChyNyBpcyBqdW5rKQorICAgICAgIGJkbnogICAgMGIKKworMTogICAgIHN0dyAgICAgJXI4LDQoJXIzKQorICAgICAgIGFkZHplICAgJXIzLCVyMTAKKyAgICAgICBibHIKK0VORChfZ2NyeV9tcGloX3N1Ym11bF8xKQorI2VuZGlmCmRpZmYgLS1naXQgYS9tcGkvcG93ZXJwYzMyL21waWgtcnNoaWZ0LlMgYi9tcGkvcG93ZXJwYzMyL21waWgtcnNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzNDllZAotLS0gL2Rldi9udWxsCisrKyBiL21waS9wb3dlcnBjMzIvbXBpaC1yc2hpZnQuUwpAQCAtMCwwICsxLDEzMSBAQAorLyogUG93ZXJQQy0zMiByc2hpZnQKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKyNpZm5kZWYgVVNFX1BQQ19QQVRDSEVTCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiBtcGlfbGltYl90CisgKiBfZ2NyeV9tcGloX3JzaGlmdCggbXBpX3B0cl90IHdwLAkocjMpCisgKgkJICAgbXBpX3B0cl90IHVwLAkocjQpCisgKgkJICAgbXBpX3NpemVfdCB1c2l6ZSwJKHI1KQorICoJCSAgIHVuc2lnbmVkIGNudCkJKHI2KQorICovCisKKwkudG9jCisuY3NlY3QJLnRleHRbUFJdCisJLmFsaWduCTIKKwkuZ2xvYmwJX2djcnlfbXBpaF9yc2hpZnQKKwkuZ2xvYmwJLl9nY3J5X21waWhfcnNoaWZ0CisJLmNzZWN0CV9nY3J5X21waWhfcnNoaWZ0W0RTXQorX2djcnlfbXBpaF9yc2hpZnQ6CisJLmxvbmcJLl9nY3J5X21waWhfcnNoaWZ0LCAgVE9DW3RjMF0sCSAgMAorCS5jc2VjdAkudGV4dFtQUl0KKy5fZ2NyeV9tcGloX3JzaGlmdDoKKwltdGN0cgk1CQkjIGNvcHkgc2l6ZSBpbnRvIENUUgorCWFkZGkJNywzLC00CQkjIG1vdmUgYWRqdXN0ZWQgcmVzX3B0ciB0byBmcmVlIHJldHVybiByZWcKKwlzdWJmaWMJOCw2LDMyCisJbHd6CTExLDAoNCkgCSMgbG9hZCBmaXJzdCBzMSBsaW1iCisJc2x3CTMsMTEsOAkJIyBjb21wdXRlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCWJkeglMZW5kMQorCitMb29wOglsd3p1CTEwLDQoNCkKKwlzcncJOSwxMSw2CisJc2x3CTEyLDEwLDgKKwlvcgk5LDksMTIKKwlzdHd1CTksNCg3KQorCWJkeglMZW5kMgorCWx3enUJMTEsNCg0KQorCXNydwk5LDEwLDYKKwlzbHcJMTIsMTEsOAorCW9yCTksOSwxMgorCXN0d3UJOSw0KDcpCisJYmRueglMb29wCisKK0xlbmQxOglzcncJMCwxMSw2CisJc3R3CTAsNCg3KQorCWJscgorCitMZW5kMjoJc3J3CTAsMTAsNgorCXN0dwkwLDQoNykKKwlibHIKKworI2Vsc2UKKy8qIFNoaWZ0IGEgbGltYiByaWdodCwgbG93IGxldmVsIHJvdXRpbmUuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4JKi8KKworCisvKiBJTlBVVCBQQVJBTUVURVJTCisgICByZXNfcHRyICAgICByMworICAgczFfcHRyICAgICAgcjQKKyAgIHNpemUgCSAgICAgICByNQorICAgY250CSAgICAgICByNiAgKi8KKworRU5UUlkoX2djcnlfbXBpaF9yc2hpZnQpCisgICAgICAgbXRjdHIgICA1CSAgICAgICAjIGNvcHkgc2l6ZSBpbnRvIENUUgorICAgICAgIGFkZGkgICAgNywzLC00CSAgICAgICAjIG1vdmUgYWRqdXN0ZWQgcmVzX3B0ciB0byBmcmVlIHJldHVybiByZWcKKyAgICAgICBzdWJmaWMgIDgsNiwzMgorICAgICAgIGx3eiAgICAgMTEsMCg0KQkgICAgICAgIyBsb2FkIGZpcnN0IHMxIGxpbWIKKyAgICAgICBzbHcgICAgIDMsMTEsOAkgICAgICAgIyBjb21wdXRlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorICAgICAgIGJkeiAgICAgMWYKKworMDogICAgIGx3enUgICAgMTAsNCg0KQorICAgICAgIHNydyAgICAgOSwxMSw2CisgICAgICAgc2x3ICAgICAxMiwxMCw4CisgICAgICAgb3IgICAgICA5LDksMTIKKyAgICAgICBzdHd1ICAgIDksNCg3KQorICAgICAgIGJkeiAgICAgMmYKKyAgICAgICBsd3p1ICAgIDExLDQoNCkKKyAgICAgICBzcncgICAgIDksMTAsNgorICAgICAgIHNsdyAgICAgMTIsMTEsOAorICAgICAgIG9yICAgICAgOSw5LDEyCisgICAgICAgc3R3dSAgICA5LDQoNykKKyAgICAgICBiZG56ICAgIDBiCisKKzE6ICAgICBzcncgICAgIDAsMTEsNgorICAgICAgIHN0dyAgICAgMCw0KDcpCisgICAgICAgYmxyCisKKzI6ICAgICBzcncgICAgIDAsMTAsNgorICAgICAgIHN0dyAgICAgMCw0KDcpCisgICAgICAgYmxyCitFTkQoX2djcnlfbXBpaF9yc2hpZnQpCisjZW5kaWYKZGlmZiAtLWdpdCBhL21waS9wb3dlcnBjMzIvbXBpaC1zdWIxLlMgYi9tcGkvcG93ZXJwYzMyL21waWgtc3ViMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXJwYzMyL21waWgtc3ViMS5TCkBAIC0wLDAgKzEsMTMzIEBACisvKiBQb3dlclBDLTMyICBzdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAKKyAqCQkJYW5kIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NSwgMTk5OCwKKyAqICAgICAgICAgICAgICAgICAgICAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAic3lzZGVwLmgiCisjaW5jbHVkZSAiYXNtLXN5bnRheC5oIgorCisKKyNpZm5kZWYgVVNFX1BQQ19QQVRDSEVTCisKKy8qKioqKioqKioqKioqKioqKioqCisgKiAgbXBpX2xpbWJfdAorICogIF9nY3J5X21waWhfc3ViX24oIG1waV9wdHJfdCByZXNfcHRyLAkocjMpCisgKgkJICAgbXBpX3B0cl90IHMxX3B0ciwJKHI0KQorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCShyNSkKKyAqCQkgICBtcGlfc2l6ZV90IHNpemUpCShyNikKKyAqLworCisJLnRvYworCS5leHRlcm4gX2djcnlfbXBpaF9zdWJfbltEU10KKwkuZXh0ZXJuIC5fZ2NyeV9tcGloX3N1Yl9uCisuY3NlY3QgW1BSXQorCS5hbGlnbiAyCisJLmdsb2JsIF9nY3J5X21waWhfc3ViX24KKwkuZ2xvYmwgLl9nY3J5X21waWhfc3ViX24KKwkuY3NlY3QgX2djcnlfbXBpaF9zdWJfbltEU10KK19nY3J5X21waWhfc3ViX246CisJLmxvbmcgLl9nY3J5X21waWhfc3ViX24sIFRPQ1t0YzBdLCAwCisJLmNzZWN0IFtQUl0KKy5fZ2NyeV9tcGloX3N1Yl9uOgorCW10Y3RyCTYJCSMgY29weSBzaXplIGludG8gQ1RSCisJbHd6CTgsMCg0KQkJIyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMxIGxpbWIKKwlsd3oJMCwwKDUpCQkjIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczIgbGltYgorCWFkZGkJMywzLC00CQkjIG9mZnNldCByZXNfcHRyLCBpdCBpcyB1cGRhdGVkIGJlZm9yZSB1c2VkCisJc3ViZmMJNywwLDgJCSMgYWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzLCBzZXQgY3kKKwliZHoJTGVuZAkJIyBJZiBkb25lLCBza2lwIGxvb3AKK0xvb3A6CWx3enUJOCw0KDQpCQkjIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx3enUJMCw0KDUpCQkjIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCXN0d3UJNyw0KDMpCQkjIHN0b3JlIHByZXZpb3VzIGxpbWIgaW4gbG9hZCBsYXRlbmN5IHNsb3QKKwlzdWJmZQk3LDAsOAkJIyBhZGQgbmV3IGxpbWJzIHdpdGggY3ksIHNldCBjeQorCWJkbnoJTG9vcAkJIyBkZWNyZW1lbnQgQ1RSIGFuZCBsb29wIGJhY2sKK0xlbmQ6CXN0dwk3LDQoMykJCSMgc3RvcmUgdWx0aW1hdGUgcmVzdWx0IGxpbWIKKwlzdWJmZQkzLDAsMAkJIyBsb2FkICFjeSBpbnRvIC4uLgorCXN1YmZpYwkzLDMsMAkJIyAuLi4gcmV0dXJuIHZhbHVlIHJlZ2lzdGVyCisJYmxyCisKKyNlbHNlCisvKiBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIGVxdWFsLCBub24temVybyBsZW5ndGggZm9yIFBvd2VyUEMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4JKi8KKworLyogbXBfbGltYl90IG1wbl9zdWJfbiAobXBfcHRyIHJlc19wdHIsIG1wX3NyY3B0ciBzMV9wdHIsIG1wX3NyY3B0ciBzMl9wdHIsCisJCQltcF9zaXplX3Qgc2l6ZSkKKyAgIENhbGN1bGF0ZSBzMS1zMiBhbmQgcHV0IHJlc3VsdCBpbiByZXNfcHRyOyByZXR1cm4gYm9ycm93LCAwIG9yIDEuICAqLworCisvKiBOb3RlIG9uIG9wdGltaXNhdGlvbjogVGhpcyBjb2RlIGlzIG9wdGltYWwgZm9yIHRoZSA2MDEuICBBbG1vc3QgZXZlcnkgb3RoZXIKKyAgIHBvc3NpYmxlIDItdW5yb2xsZWQgaW5uZXIgbG9vcCB3aWxsIG5vdCBiZS4JQWxzbywgd2F0Y2ggb3V0IGZvciB0aGUKKyAgIGFsaWdubWVudC4uLiAgKi8KKworRUFMSUdOKF9nY3J5X21waWhfc3ViX24sMywxKQorLyogU2V0IHVwIGZvciBsb29wIGJlbG93LiAgKi8KKyAgICAgICBtdGNyZiAweDAxLCVyNgorICAgICAgIHNyd2kuICVyNywlcjYsMQorICAgICAgIG10Y3RyICVyNworICAgICAgIGJ0ICAgIDMxLDJmCisKKy8qIFNldCB0aGUgY2FycnkgKGNsZWFyIHRoZSBib3Jyb3cpLiAgKi8KKyAgICAgICBzdWJmYyAlcjAsJXIwLCVyMAorLyogQWRqdXN0IHBvaW50ZXJzIGZvciBsb29wLiAgKi8KKyAgICAgICBhZGRpICAlcjMsJXIzLC00CisgICAgICAgYWRkaSAgJXI0LCVyNCwtNAorICAgICAgIGFkZGkgICVyNSwlcjUsLTQKKyAgICAgICBiICAgICAwZgorCisyOiAgICAgbHd6ICAgJXI3LDAoJXI1KQorICAgICAgIGx3eiAgICVyNiwwKCVyNCkKKyAgICAgICBzdWJmYyAlcjYsJXI3LCVyNgorICAgICAgIHN0dyAgICVyNiwwKCVyMykKKwliZXEgICAxZgorCisvKiBBbGlnbiBzdGFydCBvZiBsb29wIHRvIGFuIG9kZCB3b3JkIGJvdW5kYXJ5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZQorICAgbGFzdCB0d28gd29yZHMgY2FuIGJlIGZldGNoZWQgaW4gb25lIGFjY2VzcyAoZm9yIDYwMSkuICBUaGlzIHR1cm5zCisgICBvdXQgdG8gYmUgaW1wb3J0YW50LiAgKi8KKzA6CisgICAgICAgbHd6ICAgJXI5LDQoJXI0KQorICAgICAgIGx3eiAgICVyOCw0KCVyNSkKKyAgICAgICBsd3p1ICAlcjYsOCglcjQpCisgICAgICAgbHd6dSAgJXI3LDgoJXI1KQorICAgICAgIHN1YmZlICVyOCwlcjgsJXI5CisgICAgICAgc3R3ICAgJXI4LDQoJXIzKQorICAgICAgIHN1YmZlICVyNiwlcjcsJXI2CisgICAgICAgc3R3dSAgJXI2LDgoJXIzKQorICAgICAgIGJkbnogIDBiCisvKiBSZXR1cm4gdGhlIGJvcnJvdy4gKi8KKzE6ICAgICBzdWJmZSAlcjMsJXIzLCVyMworICAgICAgIG5lZyAgICVyMywlcjMKKyAgICAgICBibHIKK0VORChfZ2NyeV9tcGloX3N1Yl9uKQorI2VuZGlmCmRpZmYgLS1naXQgYS9tcGkvcG93ZXJwYzMyL3N5bnRheC5oIGIvbXBpL3Bvd2VycGMzMi9zeW50YXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDRhZjlmCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL3Bvd2VycGMzMi9zeW50YXguaApAQCAtMCwwICsxLDc1IEBACisvKiBnbXAyLTIuMC4yLXBwYy9tcG4vcG93ZXJwYy1saW51eC9zeW50YXguaCAgIFR1ZSBPY3QJNiAxOToyNzowMSAxOTk4ICovCisvKiBGcm9tIGdsaWJjJ3Mgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9zeXNkZXAuaCAqLworCisvKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTcsIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4JKi8KKworCisjZGVmaW5lIFVTRV9QUENfUEFUQ0hFUyAxCisKKy8qIFRoaXMgc2VlbXMgdG8gYWx3YXlzIGJlIHRoZSBjYXNlIG9uIFBQQy4gICovCisjZGVmaW5lIEFMSUdOQVJHKGxvZzIpIGxvZzIKKy8qIEZvciBFTEYgd2UgbmVlZCB0aGUgYC50eXBlJyBkaXJlY3RpdmUgdG8gbWFrZSBzaGFyZWQgbGlicyB3b3JrIHJpZ2h0LiAgKi8KKyNkZWZpbmUgQVNNX1RZUEVfRElSRUNUSVZFKG5hbWUsdHlwZWFyZykgLnR5cGUgbmFtZSx0eXBlYXJnOworI2RlZmluZSBBU01fU0laRV9ESVJFQ1RJVkUobmFtZSkgLnNpemUgbmFtZSwuLW5hbWUKKyNkZWZpbmUgQVNNX0dMT0JBTF9ESVJFQ1RJVkUgICAuZ2xvYmwKKworI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIENfTEFCRUwobmFtZSkgQ19TWU1CT0xfTkFNRShuYW1lKSMjOgorI2Vsc2UKKyNkZWZpbmUgQ19MQUJFTChuYW1lKSBDX1NZTUJPTF9OQU1FKG5hbWUpLyoqLzoKKyNlbmRpZgorCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgTChib2R5KSAuTCMjYm9keQorI2Vsc2UKKyNkZWZpbmUgTChib2R5KSAuTC8qKi9ib2R5CisjZW5kaWYKKworLyogTm8gcHJvZmlsaW5nIG9mIGdtcCdzIGFzc2VtYmx5IGZvciBub3cuLi4gKi8KKyNkZWZpbmUgQ0FMTF9NQ09VTlQgLyogbm8gcHJvZmlsaW5nICovCisKKyNkZWZpbmUgICAgICAgIEVOVFJZKG5hbWUpCQkJCSAgICBcCisgIEFTTV9HTE9CQUxfRElSRUNUSVZFIENfU1lNQk9MX05BTUUobmFtZSk7CQkgICAgXAorICBBU01fVFlQRV9ESVJFQ1RJVkUgKENfU1lNQk9MX05BTUUobmFtZSksQGZ1bmN0aW9uKQkgICAgXAorICAuYWxpZ24gQUxJR05BUkcoMik7CQkJCQkgICAgXAorICBDX0xBQkVMKG5hbWUpIAkJCQkJICAgIFwKKyAgQ0FMTF9NQ09VTlQKKworI2RlZmluZSBFQUxJR05fV18wICAvKiBObyB3b3JkcyB0byBpbnNlcnQuICAqLworI2RlZmluZSBFQUxJR05fV18xICBub3AKKyNkZWZpbmUgRUFMSUdOX1dfMiAgbm9wO25vcAorI2RlZmluZSBFQUxJR05fV18zICBub3A7bm9wO25vcAorI2RlZmluZSBFQUxJR05fV180ICBFQUxJR05fV18zO25vcAorI2RlZmluZSBFQUxJR05fV181ICBFQUxJR05fV180O25vcAorI2RlZmluZSBFQUxJR05fV182ICBFQUxJR05fV181O25vcAorI2RlZmluZSBFQUxJR05fV183ICBFQUxJR05fV182O25vcAorCisvKiBFQUxJR04gaXMgbGlrZSBFTlRSWSwgYnV0IGRvZXMgYWxpZ25tZW50IHRvICd3b3JkcycqNCBieXRlcworICAgcGFzdCBhIDJeYWxpZ24gYm91bmRhcnkuICAqLworI2RlZmluZSBFQUxJR04obmFtZSwgYWxpZ250LCB3b3JkcykJCQlcCisgIEFTTV9HTE9CQUxfRElSRUNUSVZFIENfU1lNQk9MX05BTUUobmFtZSk7CQlcCisgIEFTTV9UWVBFX0RJUkVDVElWRSAoQ19TWU1CT0xfTkFNRShuYW1lKSxAZnVuY3Rpb24pCVwKKyAgLmFsaWduIEFMSUdOQVJHKGFsaWdudCk7CQkJCVwKKyAgRUFMSUdOX1dfIyN3b3JkczsJCQkJCVwKKyAgQ19MQUJFTChuYW1lKQorCisjdW5kZWYgRU5ECisjZGVmaW5lIEVORChuYW1lKQkJICAgICBcCisgIEFTTV9TSVpFX0RJUkVDVElWRShuYW1lKQorCmRpZmYgLS1naXQgYS9tcGkvcG93ZXJwYzY0L2Rpc3RmaWxlcyBiL21waS9wb3dlcnBjNjQvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvcG93ZXJwYzY0L2Rpc3RmaWxlcwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzIvTWFuaWZlc3QgYi9tcGkvc3BhcmMzMi9NYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjc5MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL3NwYXJjMzIvTWFuaWZlc3QKQEAgLTAsMCArMSwyNCBAQAorIyBNYW5pZmVzdCAtIGNoZWNrc3VtcyAKKyMgQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKK21waWgtYWRkMS5TCit1ZGl2LlMKKyRuYW1lcyQgaVFDVkF3VUFQK0xtYURFQW5wODMyUy83QVFJU0hnUC9aNW9yVStDUEtCZVJGQ29nU1FEbTRwN0oyVnBEb3ZVNm10Zk1UZGpocVd1WkcwVTZ5OFdxSDBhajNVU2Z6aU9odGM4WWpRSFErOTdnMytFbklXWmdMakthY1dDNnBTY1kvUWJBVEVwRjFEMFdyY2VhNXJrM3FSMXQ3aXNkQlZWT3J4ZWRaNXZ1ajVPcDJ6eC8wT2xQSSt3dDZmVHRXODhCZEcvYTZ3L1pVLzg9PVB5NmgKZGlmZiAtLWdpdCBhL21waS9zcGFyYzMyL2Rpc3RmaWxlcyBiL21waS9zcGFyYzMyL2Rpc3RmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBmMThlCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL3NwYXJjMzIvZGlzdGZpbGVzCkBAIC0wLDAgKzEsNiBAQAorTWFuaWZlc3QKK21waWgtbHNoaWZ0LlMKK21waWgtcnNoaWZ0LlMKK21waWgtYWRkMS5TCit1ZGl2LlMKKwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzIvbXBpaC1hZGQxLlMgYi9tcGkvc3BhcmMzMi9tcGloLWFkZDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE4MGNhCi0tLSAvZGV2L251bGwKKysrIGIvbXBpL3NwYXJjMzIvbXBpaC1hZGQxLlMKQEAgLTAsMCArMSwyMzkgQEAKKy8qIFNQQVJDIF9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorICoJCSAgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKgorICogIG1waV9saW1iX3QKKyAqICBfZ2NyeV9tcGloX2FkZF9uKCBtcGlfcHRyX3QgcmVzX3B0ciwKKyAqCQkgICBtcGlfcHRyX3QgczFfcHRyLAorICoJCSAgIG1waV9wdHJfdCBzMl9wdHIsCisgKgkJICAgbXBpX3NpemVfdCBzaXplKQorICovCisKKyEgSU5QVVQgUEFSQU1FVEVSUworI2RlZmluZSByZXNfcHRyICVvMAorI2RlZmluZSBzMV9wdHIJJW8xCisjZGVmaW5lIHMyX3B0cgklbzIKKyNkZWZpbmUgc2l6ZQklbzMKKworI2luY2x1ZGUgInN5c2RlcC5oIgorCisJLnRleHQKKwkuYWxpZ24JNAorCS5nbG9iYWwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2FkZF9uKToKKwl4b3IJczJfcHRyLHJlc19wdHIsJWcxCisJYW5kY2MJJWcxLDQsJWcwCisJYm5lCUwxCQkJISBicmFuY2ggaWYgYWxpZ25tZW50IGRpZmZlcnMKKwlub3AKKyEgKiogIFYxYSAgKioKK0wwOglhbmRjYwlyZXNfcHRyLDQsJWcwCQkhIHJlc19wdHIgdW5hbGlnbmVkPyBTaWRlIGVmZmVjdDogY3k9MAorCWJlCUxfdjEJCQkhIGlmIG5vLCBicmFuY2gKKwlub3AKKy8qIEFkZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iIHNlcGFyYXRlbHkgdG8gYWxpZ24gcmVzX3B0ciBhbmQgczJfcHRyICovCisJbGQJW3MxX3B0cl0sJWc0CisJYWRkCXMxX3B0ciw0LHMxX3B0cgorCWxkCVtzMl9wdHJdLCVnMgorCWFkZAlzMl9wdHIsNCxzMl9wdHIKKwlhZGQJc2l6ZSwtMSxzaXplCisJYWRkY2MJJWc0LCVnMiwlbzQKKwlzdAklbzQsW3Jlc19wdHJdCisJYWRkCXJlc19wdHIsNCxyZXNfcHRyCitMX3YxOglhZGR4CSVnMCwlZzAsJW80CQkhIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKwljbXAJc2l6ZSwyCQkJISBpZiBzaXplIDwgMiAuLi4KKwlibAlMZW5kMgkJCSEgLi4uIGJyYW5jaCB0byB0YWlsIGNvZGUKKwlzdWJjYwklZzAsJW80LCVnMAkJISByZXN0b3JlIGN5CisKKwlsZAlbczFfcHRyKzBdLCVnNAorCWFkZGNjCXNpemUsLTEwLHNpemUKKwlsZAlbczFfcHRyKzRdLCVnMQorCWxkZAlbczJfcHRyKzBdLCVnMgorCWJsdAlMZmluMQorCXN1YmNjCSVnMCwlbzQsJWcwCQkhIHJlc3RvcmUgY3kKKy8qIEFkZCBibG9ja3Mgb2YgOCBsaW1icyB1bnRpbCBsZXNzIHRoYW4gOCBsaW1icyByZW1haW4gKi8KK0xvb3AxOglhZGR4Y2MJJWc0LCVnMiwlbzQKKwlsZAlbczFfcHRyKzhdLCVnNAorCWFkZHhjYwklZzEsJWczLCVvNQorCWxkCVtzMV9wdHIrMTJdLCVnMQorCWxkZAlbczJfcHRyKzhdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMF0KKwlhZGR4Y2MJJWc0LCVnMiwlbzQKKwlsZAlbczFfcHRyKzE2XSwlZzQKKwlhZGR4Y2MJJWcxLCVnMywlbzUKKwlsZAlbczFfcHRyKzIwXSwlZzEKKwlsZGQJW3MyX3B0cisxNl0sJWcyCisJc3RkCSVvNCxbcmVzX3B0cis4XQorCWFkZHhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrMjRdLCVnNAorCWFkZHhjYwklZzEsJWczLCVvNQorCWxkCVtzMV9wdHIrMjhdLCVnMQorCWxkZAlbczJfcHRyKzI0XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzE2XQorCWFkZHhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrMzJdLCVnNAorCWFkZHhjYwklZzEsJWczLCVvNQorCWxkCVtzMV9wdHIrMzZdLCVnMQorCWxkZAlbczJfcHRyKzMyXSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzI0XQorCWFkZHgJJWcwLCVnMCwlbzQJCSEgc2F2ZSBjeSBpbiByZWdpc3RlcgorCWFkZGNjCXNpemUsLTgsc2l6ZQorCWFkZAlzMV9wdHIsMzIsczFfcHRyCisJYWRkCXMyX3B0ciwzMixzMl9wdHIKKwlhZGQJcmVzX3B0ciwzMixyZXNfcHRyCisJYmdlCUxvb3AxCisJc3ViY2MJJWcwLCVvNCwlZzAJCSEgcmVzdG9yZSBjeQorCitMZmluMToJYWRkY2MJc2l6ZSw4LTIsc2l6ZQorCWJsdAlMZW5kMQorCXN1YmNjCSVnMCwlbzQsJWcwCQkhIHJlc3RvcmUgY3kKKy8qIEFkZCBibG9ja3Mgb2YgMiBsaW1icyB1bnRpbCBsZXNzIHRoYW4gMiBsaW1icyByZW1haW4gKi8KK0xvb3BlMTogYWRkeGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0cis4XSwlZzQKKwlhZGR4Y2MJJWcxLCVnMywlbzUKKwlsZAlbczFfcHRyKzEyXSwlZzEKKwlsZGQJW3MyX3B0cis4XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJISBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJc2l6ZSwtMixzaXplCisJYWRkCXMxX3B0ciw4LHMxX3B0cgorCWFkZAlzMl9wdHIsOCxzMl9wdHIKKwlhZGQJcmVzX3B0ciw4LHJlc19wdHIKKwliZ2UJTG9vcGUxCisJc3ViY2MJJWcwLCVvNCwlZzAJCSEgcmVzdG9yZSBjeQorTGVuZDE6CWFkZHhjYwklZzQsJWcyLCVvNAorCWFkZHhjYwklZzEsJWczLCVvNQorCXN0ZAklbzQsW3Jlc19wdHIrMF0KKwlhZGR4CSVnMCwlZzAsJW80CQkhIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKworCWFuZGNjCXNpemUsMSwlZzAKKwliZQlMcmV0MQorCXN1YmNjCSVnMCwlbzQsJWcwCQkhIHJlc3RvcmUgY3kKKy8qIEFkZCBsYXN0IGxpbWIgKi8KKwlsZAlbczFfcHRyKzhdLCVnNAorCWxkCVtzMl9wdHIrOF0sJWcyCisJYWRkeGNjCSVnNCwlZzIsJW80CisJc3QJJW80LFtyZXNfcHRyKzhdCisKK0xyZXQxOglyZXRsCisJYWRkeAklZzAsJWcwLCVvMAkhIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKworTDE6CXhvcglzMV9wdHIscmVzX3B0ciwlZzEKKwlhbmRjYwklZzEsNCwlZzAKKwlibmUJTDIKKwlub3AKKyEgKiogIFYxYiAgKioKKwltb3YJczJfcHRyLCVnMQorCW1vdglzMV9wdHIsczJfcHRyCisJYglMMAorCW1vdgklZzEsczFfcHRyCisKKyEgKiogIFYyICAqKgorLyogSWYgd2UgY29tZSBoZXJlLCB0aGUgYWxpZ25tZW50IG9mIHMxX3B0ciBhbmQgcmVzX3B0ciBhcyB3ZWxsIGFzIHRoZQorICAgYWxpZ25tZW50IG9mIHMyX3B0ciBhbmQgcmVzX3B0ciBkaWZmZXIuICBTaW5jZSB0aGVyZSBhcmUgb25seSB0d28gd2F5cworICAgdGhpbmdzIGNhbiBiZSBhbGlnbmVkICh0aGF0IHdlIGNhcmUgYWJvdXQpIHdlIG5vdyBrbm93IHRoYXQgdGhlIGFsaWdubWVudAorICAgb2YgczFfcHRyIGFuZCBzMl9wdHIgYXJlIHRoZSBzYW1lLiAgKi8KKworTDI6CWNtcAlzaXplLDEKKwliZQlMam9uZQorCW5vcAorCWFuZGNjCXMxX3B0ciw0LCVnMAkJISBzMV9wdHIgdW5hbGlnbmVkPyBTaWRlIGVmZmVjdDogY3k9MAorCWJlCUxfdjIJCQkhIGlmIG5vLCBicmFuY2gKKwlub3AKKy8qIEFkZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iIHNlcGFyYXRlbHkgdG8gYWxpZ24gczFfcHRyIGFuZCBzMl9wdHIgKi8KKwlsZAlbczFfcHRyXSwlZzQKKwlhZGQJczFfcHRyLDQsczFfcHRyCisJbGQJW3MyX3B0cl0sJWcyCisJYWRkCXMyX3B0ciw0LHMyX3B0cgorCWFkZAlzaXplLC0xLHNpemUKKwlhZGRjYwklZzQsJWcyLCVvNAorCXN0CSVvNCxbcmVzX3B0cl0KKwlhZGQJcmVzX3B0ciw0LHJlc19wdHIKKworTF92MjoJYWRkeAklZzAsJWcwLCVvNAkJISBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJc2l6ZSwtOCxzaXplCisJYmx0CUxmaW4yCisJc3ViY2MJJWcwLCVvNCwlZzAJCSEgcmVzdG9yZSBjeQorLyogQWRkIGJsb2NrcyBvZiA4IGxpbWJzIHVudGlsIGxlc3MgdGhhbiA4IGxpbWJzIHJlbWFpbiAqLworTG9vcDI6CWxkZAlbczFfcHRyKzBdLCVnMgorCWxkZAlbczJfcHRyKzBdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0ciswXQorCWFkZHhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cis0XQorCWxkZAlbczFfcHRyKzhdLCVnMgorCWxkZAlbczJfcHRyKzhdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0cis4XQorCWFkZHhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cisxMl0KKwlsZGQJW3MxX3B0cisxNl0sJWcyCisJbGRkCVtzMl9wdHIrMTZdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0cisxNl0KKwlhZGR4Y2MJJWczLCVvNSwlZzMKKwlzdAklZzMsW3Jlc19wdHIrMjBdCisJbGRkCVtzMV9wdHIrMjRdLCVnMgorCWxkZAlbczJfcHRyKzI0XSwlbzQKKwlhZGR4Y2MJJWcyLCVvNCwlZzIKKwlzdAklZzIsW3Jlc19wdHIrMjRdCisJYWRkeGNjCSVnMywlbzUsJWczCisJc3QJJWczLFtyZXNfcHRyKzI4XQorCWFkZHgJJWcwLCVnMCwlbzQJCSEgc2F2ZSBjeSBpbiByZWdpc3RlcgorCWFkZGNjCXNpemUsLTgsc2l6ZQorCWFkZAlzMV9wdHIsMzIsczFfcHRyCisJYWRkCXMyX3B0ciwzMixzMl9wdHIKKwlhZGQJcmVzX3B0ciwzMixyZXNfcHRyCisJYmdlCUxvb3AyCisJc3ViY2MJJWcwLCVvNCwlZzAJCSEgcmVzdG9yZSBjeQorCitMZmluMjoJYWRkY2MJc2l6ZSw4LTIsc2l6ZQorCWJsdAlMZW5kMgorCXN1YmNjCSVnMCwlbzQsJWcwCQkhIHJlc3RvcmUgY3kKK0xvb3BlMjogbGRkCVtzMV9wdHIrMF0sJWcyCisJbGRkCVtzMl9wdHIrMF0sJW80CisJYWRkeGNjCSVnMiwlbzQsJWcyCisJc3QJJWcyLFtyZXNfcHRyKzBdCisJYWRkeGNjCSVnMywlbzUsJWczCisJc3QJJWczLFtyZXNfcHRyKzRdCisJYWRkeAklZzAsJWcwLCVvNAkJISBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJc2l6ZSwtMixzaXplCisJYWRkCXMxX3B0ciw4LHMxX3B0cgorCWFkZAlzMl9wdHIsOCxzMl9wdHIKKwlhZGQJcmVzX3B0ciw4LHJlc19wdHIKKwliZ2UJTG9vcGUyCisJc3ViY2MJJWcwLCVvNCwlZzAJCSEgcmVzdG9yZSBjeQorTGVuZDI6CWFuZGNjCXNpemUsMSwlZzAKKwliZQlMcmV0MgorCXN1YmNjCSVnMCwlbzQsJWcwCQkhIHJlc3RvcmUgY3kKKy8qIEFkZCBsYXN0IGxpbWIgKi8KK0xqb25lOglsZAlbczFfcHRyXSwlZzQKKwlsZAlbczJfcHRyXSwlZzIKKwlhZGR4Y2MJJWc0LCVnMiwlbzQKKwlzdAklbzQsW3Jlc19wdHJdCisKK0xyZXQyOglyZXRsCisJYWRkeAklZzAsJWcwLCVvMAkhIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKworCisKZGlmZiAtLWdpdCBhL21waS9zcGFyYzMyL21waWgtbHNoaWZ0LlMgYi9tcGkvc3BhcmMzMi9tcGloLWxzaGlmdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjJhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvc3BhcmMzMi9tcGloLWxzaGlmdC5TCkBAIC0wLDAgKzEsOTcgQEAKKy8qIHNwYXJjIGxzaGlmdAorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKworISBJTlBVVCBQQVJBTUVURVJTCishIHJlc19wdHIJJW8wCishIHNyY19wdHIJJW8xCishIHNpemUJCSVvMgorISBjbnQJCSVvMworCisjaW5jbHVkZSAic3lzZGVwLmgiCisKKwkudGV4dAorCS5hbGlnbgk0CisJLmdsb2JhbCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfbHNoaWZ0KQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX2xzaGlmdCk6CisJc2xsCSVvMiwyLCVnMQorCWFkZAklbzEsJWcxLCVvMQkhIG1ha2UgJW8xIHBvaW50IGF0IGVuZCBvZiBzcmMKKwlsZAlbJW8xLTRdLCVnMgkhIGxvYWQgZmlyc3QgbGltYgorCXN1YgklZzAsJW8zLCVvNQkhIG5lZ2F0ZSBzaGlmdCBjb3VudAorCWFkZAklbzAsJWcxLCVvMAkhIG1ha2UgJW8wIHBvaW50IGF0IGVuZCBvZiByZXMKKwlhZGQJJW8yLC0xLCVvMgorCWFuZGNjCSVvMiw0LTEsJWc0CSEgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwlzcmwJJWcyLCVvNSwlZzEJISBjb21wdXRlIGZ1bmN0aW9uIHJlc3VsdAorCWJlCUwwCQkhIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCXN0CSVnMSxbJXNwKzgwXQorCisJc3ViCSVvMiwlZzQsJW8yCSEgYWRqdXN0IGNvdW50IGZvciBtYWluIGxvb3AKKworTG9vcDA6CWxkCVslbzEtOF0sJWczCisJYWRkCSVvMCwtNCwlbzAKKwlhZGQJJW8xLC00LCVvMQorCWFkZGNjCSVnNCwtMSwlZzQKKwlzbGwJJWcyLCVvMywlbzQKKwlzcmwJJWczLCVvNSwlZzEKKwltb3YJJWczLCVnMgorCW9yCSVvNCwlZzEsJW80CisJYm5lCUxvb3AwCisJIHN0CSVvNCxbJW8wKzBdCisKK0wwOgl0c3QJJW8yCisJYmUJTGVuZAorCSBub3AKKworTG9vcDoJbGQJWyVvMS04XSwlZzMKKwlhZGQJJW8wLC0xNiwlbzAKKwlhZGRjYwklbzIsLTQsJW8yCisJc2xsCSVnMiwlbzMsJW80CisJc3JsCSVnMywlbzUsJWcxCisKKwlsZAlbJW8xLTEyXSwlZzIKKwlzbGwJJWczLCVvMywlZzQKKwlvcgklbzQsJWcxLCVvNAorCXN0CSVvNCxbJW8wKzEyXQorCXNybAklZzIsJW81LCVnMQorCisJbGQJWyVvMS0xNl0sJWczCisJc2xsCSVnMiwlbzMsJW80CisJb3IJJWc0LCVnMSwlZzQKKwlzdAklZzQsWyVvMCs4XQorCXNybAklZzMsJW81LCVnMQorCisJbGQJWyVvMS0yMF0sJWcyCisJc2xsCSVnMywlbzMsJWc0CisJb3IJJW80LCVnMSwlbzQKKwlzdAklbzQsWyVvMCs0XQorCXNybAklZzIsJW81LCVnMQorCisJYWRkCSVvMSwtMTYsJW8xCisJb3IJJWc0LCVnMSwlZzQKKwlibmUJTG9vcAorCSBzdAklZzQsWyVvMCswXQorCitMZW5kOglzbGwJJWcyLCVvMywlZzIKKwlzdAklZzIsWyVvMC00XQorCXJldGwKKwlsZAlbJXNwKzgwXSwlbzAKKwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzIvbXBpaC1yc2hpZnQuUyBiL21waS9zcGFyYzMyL21waWgtcnNoaWZ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzZGI0MQotLS0gL2Rldi9udWxsCisrKyBiL21waS9zcGFyYzMyL21waWgtcnNoaWZ0LlMKQEAgLTAsMCArMSw5MyBAQAorLyogc3BhcmMgcnNoaWZ0CisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTgsCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworISBJTlBVVCBQQVJBTUVURVJTCishIHJlc19wdHIJJW8wCishIHNyY19wdHIJJW8xCishIHNpemUJCSVvMgorISBjbnQJCSVvMworCisjaW5jbHVkZSAic3lzZGVwLmgiCisKKwkudGV4dAorCS5hbGlnbgk0CisJLmdsb2JhbCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfcnNoaWZ0KQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX3JzaGlmdCk6CisJbGQJWyVvMV0sJWcyCSEgbG9hZCBmaXJzdCBsaW1iCisJc3ViCSVnMCwlbzMsJW81CSEgbmVnYXRlIHNoaWZ0IGNvdW50CisJYWRkCSVvMiwtMSwlbzIKKwlhbmRjYwklbzIsNC0xLCVnNAkhIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJc2xsCSVnMiwlbzUsJWcxCSEgY29tcHV0ZSBmdW5jdGlvbiByZXN1bHQKKwliZQlMMAkJISBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwlzdAklZzEsWyVzcCs4MF0KKworCXN1YgklbzIsJWc0LCVvMgkhIGFkanVzdCBjb3VudCBmb3IgbWFpbiBsb29wCisKK0xvb3AwOglsZAlbJW8xKzRdLCVnMworCWFkZAklbzAsNCwlbzAKKwlhZGQJJW8xLDQsJW8xCisJYWRkY2MJJWc0LC0xLCVnNAorCXNybAklZzIsJW8zLCVvNAorCXNsbAklZzMsJW81LCVnMQorCW1vdgklZzMsJWcyCisJb3IJJW80LCVnMSwlbzQKKwlibmUJTG9vcDAKKwkgc3QJJW80LFslbzAtNF0KKworTDA6CXRzdAklbzIKKwliZQlMZW5kCisJIG5vcAorCitMb29wOglsZAlbJW8xKzRdLCVnMworCWFkZAklbzAsMTYsJW8wCisJYWRkY2MJJW8yLC00LCVvMgorCXNybAklZzIsJW8zLCVvNAorCXNsbAklZzMsJW81LCVnMQorCisJbGQJWyVvMSs4XSwlZzIKKwlzcmwJJWczLCVvMywlZzQKKwlvcgklbzQsJWcxLCVvNAorCXN0CSVvNCxbJW8wLTE2XQorCXNsbAklZzIsJW81LCVnMQorCisJbGQJWyVvMSsxMl0sJWczCisJc3JsCSVnMiwlbzMsJW80CisJb3IJJWc0LCVnMSwlZzQKKwlzdAklZzQsWyVvMC0xMl0KKwlzbGwJJWczLCVvNSwlZzEKKworCWxkCVslbzErMTZdLCVnMgorCXNybAklZzMsJW8zLCVnNAorCW9yCSVvNCwlZzEsJW80CisJc3QJJW80LFslbzAtOF0KKwlzbGwJJWcyLCVvNSwlZzEKKworCWFkZAklbzEsMTYsJW8xCisJb3IJJWc0LCVnMSwlZzQKKwlibmUJTG9vcAorCSBzdAklZzQsWyVvMC00XQorCitMZW5kOglzcmwJJWcyLCVvMywlZzIKKwlzdAklZzIsWyVvMC0wXQorCXJldGwKKwlsZAlbJXNwKzgwXSwlbzAKKwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzIvdWRpdi5TIGIvbXBpL3NwYXJjMzIvdWRpdi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvc3BhcmMzMi91ZGl2LlMKQEAgLTAsMCArMSwxOTUgQEAKKy8qIFNQQVJDIHY3IF9fdWRpdl9xcm5uZCBkaXZpc2lvbiBzdXBwb3J0LCB1c2VkIGZyb20gbG9uZ2xvbmcuaC4KKyAqICAgICAgICAgICBUaGlzIGlzIGZvciB2NyBDUFVzIHdpdGhvdXQgYSBmbG9hdGluZy1wb2ludCB1bml0LgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgICAgICAKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCishIElOUFVUIFBBUkFNRVRFUlMKKyEgcmVtX3B0cglvMAorISBuMQkJbzEKKyEgbjAJCW8yCishIGQJCW8zCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmFsIENfU1lNQk9MX05BTUUoX191ZGl2X3Fybm5kKQorQ19TWU1CT0xfTkFNRShfX3VkaXZfcXJubmQpOgorCXRzdAklbzMKKwlibmVnCUxhcmdlZGl2aXNvcgorCW1vdgk4LCVnMQorCisJYglMcDEKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKKworTHBsb3A6CWJjYwlMbjEKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xwMToJYWRkeAklbzEsJW8xLCVvMQorCXN1YmNjCSVvMSwlbzMsJW80CisJYmNjCUxuMgorCWFkZHhjYwklbzIsJW8yLCVvMgorTHAyOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVvMywlbzQKKwliY2MJTG4zCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMcDM6CWFkZHgJJW8xLCVvMSwlbzEKKwlzdWJjYwklbzEsJW8zLCVvNAorCWJjYwlMbjQKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xwNDoJYWRkeAklbzEsJW8xLCVvMQorCWFkZGNjCSVnMSwtMSwlZzEKKwlibmUJTHBsb3AKKwlzdWJjYwklbzEsJW8zLCVvNAorCWJjYwlMbjUKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xwNToJc3QJJW8xLFslbzBdCisJcmV0bAorCXhub3IJJWcwLCVvMiwlbzAKKworTG5sb3A6CWJjYwlMcDEKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xuMToJYWRkeAklbzQsJW80LCVvNAorCXN1YmNjCSVvNCwlbzMsJW8xCisJYmNjCUxwMgorCWFkZHhjYwklbzIsJW8yLCVvMgorTG4yOglhZGR4CSVvNCwlbzQsJW80CisJc3ViY2MJJW80LCVvMywlbzEKKwliY2MJTHAzCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMbjM6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMcDQKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xuNDoJYWRkeAklbzQsJW80LCVvNAorCWFkZGNjCSVnMSwtMSwlZzEKKwlibmUJTG5sb3AKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMcDUKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xuNToJc3QJJW80LFslbzBdCisJcmV0bAorCXhub3IJJWcwLCVvMiwlbzAKKworTGFyZ2VkaXZpc29yOgorCWFuZAklbzIsMSwlbzUJISAlbzUgPSBuMCAmIDEKKworCXNybAklbzIsMSwlbzIKKwlzbGwJJW8xLDMxLCVnMgorCW9yCSVnMiwlbzIsJW8yCSEgJW8yID0gbG8objFuMCA+PiAxKQorCXNybAklbzEsMSwlbzEJISAlbzEgPSBoaShuMW4wID4+IDEpCisKKwlhbmQJJW8zLDEsJWcyCisJc3JsCSVvMywxLCVnMwkhICVnMyA9IGZsb29yKGQgLyAyKQorCWFkZAklZzMsJWcyLCVnMwkhICVnMyA9IGNlaWwoZCAvIDIpCisKKwliCUxMcDEKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKKworTExwbG9wOiBiY2MJTExuMQorCWFkZHhjYwklbzIsJW8yLCVvMgorTExwMToJYWRkeAklbzEsJW8xLCVvMQorCXN1YmNjCSVvMSwlZzMsJW80CisJYmNjCUxMbjIKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xMcDI6CWFkZHgJJW8xLCVvMSwlbzEKKwlzdWJjYwklbzEsJWczLCVvNAorCWJjYwlMTG4zCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMTHAzOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVnMywlbzQKKwliY2MJTExuNAorCWFkZHhjYwklbzIsJW8yLCVvMgorTExwNDoJYWRkeAklbzEsJW8xLCVvMQorCWFkZGNjCSVnMSwtMSwlZzEKKwlibmUJTExwbG9wCisJc3ViY2MJJW8xLCVnMywlbzQKKwliY2MJTExuNQorCWFkZHhjYwklbzIsJW8yLCVvMgorTExwNToJYWRkCSVvMSwlbzEsJW8xCSEgPDwgMQorCXRzdAklZzIKKwlibmUJT2RkcAorCWFkZAklbzUsJW8xLCVvMQorCXN0CSVvMSxbJW8wXQorCXJldGwKKwl4bm9yCSVnMCwlbzIsJW8wCisKK0xMbmxvcDogYmNjCUxMcDEKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xMbjE6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJWczLCVvMQorCWJjYwlMTHAyCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMTG4yOglhZGR4CSVvNCwlbzQsJW80CisJc3ViY2MJJW80LCVnMywlbzEKKwliY2MJTExwMworCWFkZHhjYwklbzIsJW8yLCVvMgorTExuMzoJYWRkeAklbzQsJW80LCVvNAorCXN1YmNjCSVvNCwlZzMsJW8xCisJYmNjCUxMcDQKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xMbjQ6CWFkZHgJJW80LCVvNCwlbzQKKwlhZGRjYwklZzEsLTEsJWcxCisJYm5lCUxMbmxvcAorCXN1YmNjCSVvNCwlZzMsJW8xCisJYmNjCUxMcDUKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0xMbjU6CWFkZAklbzQsJW80LCVvNAkhIDw8IDEKKwl0c3QJJWcyCisJYm5lCU9kZG4KKwlhZGQJJW81LCVvNCwlbzQKKwlzdAklbzQsWyVvMF0KKwlyZXRsCisJeG5vcgklZzAsJW8yLCVvMAorCitPZGRwOgl4bm9yCSVnMCwlbzIsJW8yCisJISBxJyBpbiAlbzIuIHInIGluICVvMQorCWFkZGNjCSVvMSwlbzIsJW8xCisJYmNjCUxMcDYKKwlhZGR4CSVvMiwwLCVvMgorCXN1YgklbzEsJW8zLCVvMQorTExwNjoJc3ViY2MJJW8xLCVvMywlZzAKKwliY3MJTExwNworCXN1YngJJW8yLC0xLCVvMgorCXN1YgklbzEsJW8zLCVvMQorTExwNzoJc3QJJW8xLFslbzBdCisJcmV0bAorCW1vdgklbzIsJW8wCisKK09kZG46CXhub3IJJWcwLCVvMiwlbzIKKwkhIHEnIGluICVvMi4gcicgaW4gJW80CisJYWRkY2MJJW80LCVvMiwlbzQKKwliY2MJTExuNgorCWFkZHgJJW8yLDAsJW8yCisJc3ViCSVvNCwlbzMsJW80CitMTG42OglzdWJjYwklbzQsJW8zLCVnMAorCWJjcwlMTG43CisJc3VieAklbzIsLTEsJW8yCisJc3ViCSVvNCwlbzMsJW80CitMTG43OglzdAklbzQsWyVvMF0KKwlyZXRsCisJbW92CSVvMiwlbzAKZGlmZiAtLWdpdCBhL21waS9zcGFyYzMydjgvTWFuaWZlc3QgYi9tcGkvc3BhcmMzMnY4L01hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWNlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvc3BhcmMzMnY4L01hbmlmZXN0CkBAIC0wLDAgKzEsMjMgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCiskbmFtZXMkIGlRQ1ZBd1VBUCtMbWJqRUFucDgzMlMvN0FRS1EyZ1FBb3RwQ3BZOXJPSlVDZFpIYkRMWFhCOWkxVVVNcmFSS2JWV2ltdEtxNDkzWTJkMndjcVhDSzJXYUdzMUFlUEszSzZRazZtc3haMFBMNUhvN0tnSE1renNaK3dHMEVVemlpdVgweVpSVFdObTByM1RZZXJQNlNkV0g1R09WZFNYbjdja2twcGsyc1ZPb2tmUVR5K1Rtcm5haDMrZGxZSm91amFuK2ZtWFdONlVzPT1Eb2xNCmRpZmYgLS1naXQgYS9tcGkvc3BhcmMzMnY4L2Rpc3RmaWxlcyBiL21waS9zcGFyYzMydjgvZGlzdGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOWE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvc3BhcmMzMnY4L2Rpc3RmaWxlcwpAQCAtMCwwICsxLDUgQEAKK01hbmlmZXN0CittcGloLW11bDEuUworbXBpaC1tdWwyLlMKK21waWgtbXVsMy5TCisKZGlmZiAtLWdpdCBhL21waS9zcGFyYzMydjgvbXBpaC1tdWwxLlMgYi9tcGkvc3BhcmMzMnY4L21waWgtbXVsMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZmNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tcGkvc3BhcmMzMnY4L21waWgtbXVsMS5TCkBAIC0wLDAgKzEsMTA5IEBACisvKiBTUEFSQyB2OCBfX21wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBzaW5nbGUgbGltYiBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIHRoZSBwcm9kdWN0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0LCAxOTk1LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgICAgICAKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisKKyEgSU5QVVQgUEFSQU1FVEVSUworISByZXNfcHRyCW8wCishIHMxX3B0cglvMQorISBzaXplCQlvMgorISBzMl9saW1iCW8zCisKKyNpbmNsdWRlICJzeXNkZXAuaCIKKworLnRleHQKKwkuYWxpZ24JOAorCS5nbG9iYWwgQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xKQorQ19TWU1CT0xfTkFNRShfZ2NyeV9tcGloX211bF8xKToKKwlzbGwJJW8yLDQsJWcxCisJYW5kCSVnMSwoNC0xKTw8NCwlZzEKKyNpZiBQSUMKKwltb3YJJW83LCVnNCAJCSEgU2F2ZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgorCWNhbGwJMWYKKwlhZGQJJW83LExMLTFmLCVnMworMToJbW92CSVnNCwlbzcgCQkhIFJlc3RvcmUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIKKyNlbHNlCisJc2V0aGkJJWhpKExMKSwlZzMKKwlvcgklZzMsJWxvKExMKSwlZzMKKyNlbmRpZgorCWptcAklZzMrJWcxCisJbGQJWyVvMSswXSwlbzQJISAxCitMTDoKK0xMMDA6CWFkZAklbzAsLTQsJW8wCisJYWRkCSVvMSwtNCwlbzEKKwliCUxvb3AwMAkJLyogNCwgOCwgMTIsIC4uLiAqLworCW9yY2MJJWcwLCVnMCwlZzIKK0xMMDE6CWIJTG9vcDAxCQkvKiAxLCA1LCA5LCAuLi4gKi8KKwlvcmNjCSVnMCwlZzAsJWcyCisJbm9wCisJbm9wCitMTDEwOglhZGQJJW8wLC0xMiwlbzAJLyogMiwgNiwgMTAsIC4uLiAqLworCWFkZAklbzEsNCwlbzEKKwliCUxvb3AxMAorCW9yY2MJJWcwLCVnMCwlZzIKKwlub3AKK0xMMTE6CWFkZAklbzAsLTgsJW8wCS8qIDMsIDcsIDExLCAuLi4gKi8KKwlhZGQJJW8xLC04LCVvMQorCWIJTG9vcDExCisJb3JjYwklZzAsJWcwLCVnMgorCitMb29wOglhZGRjYwklZzMsJWcyLCVnMwkhIDEKKwlsZAlbJW8xKzRdLCVvNAkhIDIKKwlzdAklZzMsWyVvMCswXQkhIDEKKwlyZAkleSwlZzIJCSEgMQorTG9vcDAwOiB1bXVsCSVvNCwlbzMsJWczCSEgMgorCWFkZHhjYwklZzMsJWcyLCVnMwkhIDIKKwlsZAlbJW8xKzhdLCVvNAkhIDMKKwlzdAklZzMsWyVvMCs0XQkhIDIKKwlyZAkleSwlZzIJCSEgMgorTG9vcDExOiB1bXVsCSVvNCwlbzMsJWczCSEgMworCWFkZHhjYwklZzMsJWcyLCVnMwkhIDMKKwlsZAlbJW8xKzEyXSwlbzQJISA0CisJYWRkCSVvMSwxNiwlbzEKKwlzdAklZzMsWyVvMCs4XQkhIDMKKwlyZAkleSwlZzIJCSEgMworTG9vcDEwOiB1bXVsCSVvNCwlbzMsJWczCSEgNAorCWFkZHhjYwklZzMsJWcyLCVnMwkhIDQKKwlsZAlbJW8xKzBdLCVvNAkhIDEKKwlzdAklZzMsWyVvMCsxMl0JISA0CisJYWRkCSVvMCwxNiwlbzAKKwlyZAkleSwlZzIJCSEgNAorCWFkZHgJJWcwLCVnMiwlZzIKK0xvb3AwMTogYWRkY2MJJW8yLC00LCVvMgorCWJnCUxvb3AKKwl1bXVsCSVvNCwlbzMsJWczCSEgMQorCisJYWRkY2MJJWczLCVnMiwlZzMJISA0CisJc3QJJWczLFslbzArMF0JISA0CisJcmQJJXksJWcyCQkhIDQKKworCXJldGwKKwlhZGR4CSVnMCwlZzIsJW8wCisKKwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzJ2OC9tcGloLW11bDIuUyBiL21waS9zcGFyYzMydjgvbXBpaC1tdWwyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1Y2M0MwotLS0gL2Rldi9udWxsCisrKyBiL21waS9zcGFyYzMydjgvbXBpaC1tdWwyLlMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIFNQQVJDIHY4IF9fbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICAgICAgIAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisKKworISBJTlBVVCBQQVJBTUVURVJTCishIHJlc19wdHIJbzAKKyEgczFfcHRyCW8xCishIHNpemUJCW8yCishIHMyX2xpbWIJbzMKKworI2luY2x1ZGUgInN5c2RlcC5oIgorCisudGV4dAorCS5hbGlnbiA0CisJLmdsb2JhbCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkbXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfYWRkbXVsXzEpOgorCW9yY2MJJWcwLCVnMCwlZzIKKwlsZAlbJW8xKzBdLCVvNAkhIDEKKworCXNsbAklbzIsNCwlZzEKKwlhbmQJJWcxLCg0LTEpPDw0LCVnMQorI2lmIFBJQworCW1vdgklbzcsJWc0IAkJISBTYXZlIHJldHVybiBhZGRyZXNzIHJlZ2lzdGVyCisJY2FsbAkxZgorCWFkZAklbzcsTEwtMWYsJWczCisxOgltb3YJJWc0LCVvNyAJCSEgUmVzdG9yZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgorI2Vsc2UKKwlzZXRoaQklaGkoTEwpLCVnMworCW9yCSVnMywlbG8oTEwpLCVnMworI2VuZGlmCisJam1wCSVnMyslZzEKKwlub3AKK0xMOgorTEwwMDoJYWRkCSVvMCwtNCwlbzAKKwliCUxvb3AwMAkJLyogNCwgOCwgMTIsIC4uLiAqLworCWFkZAklbzEsLTQsJW8xCisJbm9wCitMTDAxOgliCUxvb3AwMQkJLyogMSwgNSwgOSwgLi4uICovCisJbm9wCisJbm9wCisJbm9wCitMTDEwOglhZGQJJW8wLC0xMiwlbzAJLyogMiwgNiwgMTAsIC4uLiAqLworCWIJTG9vcDEwCisJYWRkCSVvMSw0LCVvMQorCW5vcAorTEwxMToJYWRkCSVvMCwtOCwlbzAJLyogMywgNywgMTEsIC4uLiAqLworCWIJTG9vcDExCisJYWRkCSVvMSwtOCwlbzEKKwlub3AKKworMToJYWRkY2MJJWczLCVnMiwlZzMJISAxCisJbGQJWyVvMSs0XSwlbzQJISAyCisJcmQJJXksJWcyCQkhIDEKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCswXSwlZzEJISAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCswXQkhIDEKK0xvb3AwMDogdW11bAklbzQsJW8zLCVnMwkhIDIKKwlsZAlbJW8wKzRdLCVnMQkhIDIKKwlhZGR4Y2MJJWczLCVnMiwlZzMJISAyCisJbGQJWyVvMSs4XSwlbzQJISAzCisJcmQJJXksJWcyCQkhIDIKKwlhZGR4CSVnMCwlZzIsJWcyCisJbm9wCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCs0XQkhIDIKK0xvb3AxMTogdW11bAklbzQsJW8zLCVnMwkhIDMKKwlhZGR4Y2MJJWczLCVnMiwlZzMJISAzCisJbGQJWyVvMSsxMl0sJW80CSEgNAorCXJkCSV5LCVnMgkJISAzCisJYWRkCSVvMSwxNiwlbzEKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCs4XSwlZzEJISAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCs4XQkhIDMKK0xvb3AxMDogdW11bAklbzQsJW8zLCVnMwkhIDQKKwlhZGR4Y2MJJWczLCVnMiwlZzMJISA0CisJbGQJWyVvMSswXSwlbzQJISAxCisJcmQJJXksJWcyCQkhIDQKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCsxMl0sJWcxCSEgMgorCWFkZGNjCSVnMSwlZzMsJWczCisJc3QJJWczLFslbzArMTJdCSEgNAorCWFkZAklbzAsMTYsJW8wCisJYWRkeAklZzAsJWcyLCVnMgorTG9vcDAxOiBhZGRjYwklbzIsLTQsJW8yCisJYmcJMWIKKwl1bXVsCSVvNCwlbzMsJWczCSEgMQorCisJYWRkY2MJJWczLCVnMiwlZzMJISA0CisJcmQJJXksJWcyCQkhIDQKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCswXSwlZzEJISAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCswXQkhIDQKKwlhZGR4CSVnMCwlZzIsJW8wCisKKwlyZXRsCisJIG5vcAorCisKKyEJdW11bCwgbGQsIGFkZHhjYywgcmQsIHN0CisKKyEJdW11bCwgbGQsIGFkZHhjYywgcmQsIGxkLCBhZGRjYywgc3QsIGFkZHgKKwpkaWZmIC0tZ2l0IGEvbXBpL3NwYXJjMzJ2OC9tcGloLW11bDMuUyBiL21waS9zcGFyYzMydjgvbXBpaC1tdWwzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiYjE5NAotLS0gL2Rldi9udWxsCisrKyBiL21waS9zcGFyYzMydjgvbXBpaC1tdWwzLlMKQEAgLTAsMCArMSw2NyBAQAorLyogU1BBUkMgdjggX19tcG5fc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRyYWN0IHRoZSByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5OCwgCisgKiAgICAgICAgICAgICAgICAgICAgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICAgICAgIAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisgICAgICAgIAorISBJTlBVVCBQQVJBTUVURVJTCishIHJlc19wdHIJbzAKKyEgczFfcHRyCW8xCishIHNpemUJCW8yCishIHMyX2xpbWIJbzMKKworI2luY2x1ZGUgInN5c2RlcC5oIgorCisudGV4dAorCS5hbGlnbiA0CisJLmdsb2JhbCBDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3VibXVsXzEpCitDX1NZTUJPTF9OQU1FKF9nY3J5X21waWhfc3VibXVsXzEpOgorCXN1YgklZzAsJW8yLCVvMgkJISBuZWdhdGUgLi4uCisJc2xsCSVvMiwyLCVvMgkJISAuLi4gYW5kIHNjYWxlIHNpemUKKwlzdWIJJW8xLCVvMiwlbzEJCSEgbzEgaXMgb2Zmc2V0IHMxX3B0cgorCXN1YgklbzAsJW8yLCVnMQkJISBnMSBpcyBvZmZzZXQgcmVzX3B0cgorCisJbW92CTAsJW8wCQkJISBjbGVhciBjeV9saW1iCisKK0xvb3A6CWxkCVslbzErJW8yXSwlbzQKKwlsZAlbJWcxKyVvMl0sJWcyCisJdW11bAklbzQsJW8zLCVvNQorCXJkCSV5LCVnMworCWFkZGNjCSVvNSwlbzAsJW81CisJYWRkeAklZzMsMCwlbzAKKwlzdWJjYwklZzIsJW81LCVnMgorCWFkZHgJJW8wLDAsJW8wCisJc3QJJWcyLFslZzErJW8yXQorCisJYWRkY2MJJW8yLDQsJW8yCisJYm5lCUxvb3AKKwkgbm9wCisKKwlyZXRsCisJIG5vcAorCisKZGlmZiAtLWdpdCBhL21waS9zdXBlcnNwYXJjL01hbmlmZXN0IGIvbXBpL3N1cGVyc3BhcmMvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5Yjk3YgotLS0gL2Rldi9udWxsCisrKyBiL21waS9zdXBlcnNwYXJjL01hbmlmZXN0CkBAIC0wLDAgKzEsMjEgQEAKKyMgTWFuaWZlc3QgLSBjaGVja3N1bXMgCisjIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCit1ZGl2LlMKKyRuYW1lcyQgaVFDVkF3VUFQK0xtZGpFQW5wODMyUy83QVFJclVnUUEzWW11clpoSzdyMjBEcVJ2ZzBnd05lOWpNRGNGZlVZNFpQaFc1SGtHek1ibXJ4WHRqNUR4NTBSSVB0ZXVtNzJiWEUrSWhjbmdsalFiL2Nza2lONUhpOW9jMmEyQ1BoeVRxVkZFZUd5RitrSjE3MEdJMXBWZkZPZnpiVkcwRjRuRXdtNWxHSGd2L252RnN2cmptbUFYVlcxdi95azVOMzV3YmlMdmlPRnJMT1E9PWJ5RmMKZGlmZiAtLWdpdCBhL21waS9zdXBlcnNwYXJjL2Rpc3RmaWxlcyBiL21waS9zdXBlcnNwYXJjL2Rpc3RmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdjMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbXBpL3N1cGVyc3BhcmMvZGlzdGZpbGVzCkBAIC0wLDAgKzEsMyBAQAorTWFuaWZlc3QKK3VkaXYuUworCmRpZmYgLS1naXQgYS9tcGkvc3VwZXJzcGFyYy91ZGl2LlMgYi9tcGkvc3VwZXJzcGFyYy91ZGl2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNTA2YQotLS0gL2Rldi9udWxsCisrKyBiL21waS9zdXBlcnNwYXJjL3VkaXYuUwpAQCAtMCwwICsxLDExOCBAQAorLyogU3VwZXJTUEFSQyBfX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCisgKiAgICAgICAgICAgIFRoaXMgaXMgZm9yIFN1cGVyU1BBUkMgb25seSwgdG8gY29tcGVuc2F0ZSBmb3IgaXRzCisgKiAgICAgICAgICAgIHNlbWktZnVuY3Rpb25hbCB1ZGl2IGluc3RydWN0aW9uLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk2LCAxOTk4LAorICogICAgICAgICAgICAgICAgICAgIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgICAgICAKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgR05VIE1QIExpYnJhcnkuCisgKgkgQWN0dWFsbHkgaXQncyB0aGUgc2FtZSBjb2RlIHdpdGggb25seSBtaW5vciBjaGFuZ2VzIGluIHRoZQorICoJIHdheSB0aGUgZGF0YSBpcyBzdG9yZWQ7IHRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgYWJzdHJhY3Rpb24KKyAqCSBvZiBhbiBvcHRpb25hbCBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gd2hpY2ggbWF5IGJlIHVzZWQKKyAqCSB0byBhdm9pZCByZXZlYWxpbmcgb2Ygc2Vuc2l0aXZlIGRhdGEgZHVlIHRvIHBhZ2luZyBldGMuCisgKi8KKworCisKKyEgSU5QVVQgUEFSQU1FVEVSUworISByZW1fcHRyCWkwCishIG4xCQlpMQorISBuMAkJaTIKKyEgZAkJaTMKKworI2luY2x1ZGUgInN5c2RlcC5oIgorI3VuZGVmIHJldAkvKiBLbHVkZ2UgZm9yIGdsaWJjICovCisKKwkudGV4dAorCS5hbGlnbgk4CitMQzA6CS5kb3VibGUgMHI0Mjk0OTY3Mjk2CitMQzE6CS5kb3VibGUgMHIyMTQ3NDgzNjQ4CisKKwkuYWxpZ24JNAorCS5nbG9iYWwgQ19TWU1CT0xfTkFNRShfX3VkaXZfcXJubmQpCitDX1NZTUJPTF9OQU1FKF9fdWRpdl9xcm5uZCk6CisJISNQUk9MT0dVRSMgMAorCXNhdmUJJXNwLC0xMDQsJXNwCisJISNQUk9MT0dVRSMgMQorCXN0CSVpMSxbJWZwLThdCisJbGQJWyVmcC04XSwlZjEwCisJc2V0aGkJJWhpKExDMCksJW83CisJZml0b2QJJWYxMCwlZjQKKwlsZGQJWyVvNyslbG8oTEMwKV0sJWY4CisJY21wCSVpMSwwCisJYmdlCUwyNDgKKwltb3YJJWkwLCVpNQorCWZhZGRkCSVmNCwlZjgsJWY0CitMMjQ4OgorCXN0CSVpMixbJWZwLThdCisJbGQJWyVmcC04XSwlZjEwCisJZm11bGQJJWY0LCVmOCwlZjYKKwljbXAJJWkyLDAKKwliZ2UJTDI0OQorCWZpdG9kCSVmMTAsJWYyCisJZmFkZGQJJWYyLCVmOCwlZjIKK0wyNDk6CisJc3QJJWkzLFslZnAtOF0KKwlmYWRkZAklZjYsJWYyLCVmMgorCWxkCVslZnAtOF0sJWYxMAorCWNtcAklaTMsMAorCWJnZQlMMjUwCisJZml0b2QJJWYxMCwlZjQKKwlmYWRkZAklZjQsJWY4LCVmNAorTDI1MDoKKwlmZGl2ZAklZjIsJWY0LCVmMgorCXNldGhpCSVoaShMQzEpLCVvNworCWxkZAlbJW83KyVsbyhMQzEpXSwlZjQKKwlmY21wZWQJJWYyLCVmNAorCW5vcAorCWZiZ2UsYQlMMjUxCisJZnN1YmQJJWYyLCVmNCwlZjIKKwlmZHRvaQklZjIsJWYyCisJc3QJJWYyLFslZnAtOF0KKwliCUwyNTIKKwlsZAlbJWZwLThdLCVpNAorTDI1MToKKwlmZHRvaQklZjIsJWYyCisJc3QJJWYyLFslZnAtOF0KKwlsZAlbJWZwLThdLCVpNAorCXNldGhpCSVoaSgtMjE0NzQ4MzY0OCksJWcyCisJeG9yCSVpNCwlZzIsJWk0CitMMjUyOgorCXVtdWwJJWkzLCVpNCwlZzMKKwlyZAkleSwlaTAKKwlzdWJjYwklaTIsJWczLCVvNworCXN1YnhjYwklaTEsJWkwLCVnMAorCWJlCUwyNTMKKwljbXAJJW83LCVpMworCisJYWRkCSVpNCwtMSwlaTAKKwlhZGQJJW83LCVpMywlbzcKKwlzdAklbzcsWyVpNV0KKwlyZXQKKwlyZXN0b3JlCitMMjUzOgorCWJsdQlMMjQ2CisJbW92CSVpNCwlaTAKKwlhZGQJJWk0LDEsJWkwCisJc3ViCSVvNywlaTMsJW83CitMMjQ2OgorCXN0CSVvNyxbJWk1XQorCXJldAorCXJlc3RvcmUKKwpkaWZmIC0tZ2l0IGEvcmFuZG9tL0NoYW5nZUxvZy0yMDExIGIvcmFuZG9tL0NoYW5nZUxvZy0yMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5kb20vQ2hhbmdlTG9nLTIwMTEKQEAgLTAsMCArMSwxOTEgQEAKKzIwMTEtMTItMDEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlOQjogQ2hhbmdlTG9nIGZpbGVzIGFyZSBubyBsb25nZXIgbWFudWFsbHkgbWFpbnRhaW5lZC4gIFN0YXJ0aW5nCisJb24gRGVjZW1iZXIgMXN0LCAyMDExIHdlIHB1dCBjaGFuZ2UgaW5mb3JtYXRpb24gb25seSBpbiB0aGUgR0lUCisJY29tbWl0IGxvZywgYW5kIGdlbmVyYXRlIGEgdG9wLWxldmVsIENoYW5nZUxvZyBmaWxlIGZyb20gbG9ncyBhdAorCSJtYWtlIGRpc3QiLiAgU2VlIGRvYy9IQUNLSU5HIGZvciBkZXRhaWxzLgorCisyMDExLTA5LTA4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmRsaW51eC5jIChfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tKTogRG9uJ3QgdXNlIHNlbGVjdCBpZgorCXRoZSBmZCBudW1iZXIgaXMgdG9vIGhpZ2guICBSZXBvcnRlZCBieSBKYWt1YiBCb2d1c3ouCisKKzIwMTAtMTAtMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZHczMi5jIChyZWdpc3RyeV9wb2xsKTogRGlzYWJsZSBwZXJmb3JtYWNlIGZhdGEgZ2F0aGVyaW5nIGlmCisJR05VUEdfUk5EVzMyX05PUEVSRiBoYXMgYmVlbiBzZXQuCisKKzIwMTAtMDQtMjcgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogcm5kdzMyY2UuYyAoZmlsbHVwX2J1ZmZlcik6IFJld3JpdGUgd2l0aG91dCB1c2luZyBuZXN0ZWQKKwlmdW5jdGlvbnMsIHdoaWNoIGFyZSBicm9rZW4gb24gYXJtL2NlZ2NjLgorCisyMDEwLTA0LTEyICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3aykKKworCVNwZWxsaW5nIGZpeGVzLgorCisyMDEwLTAzLTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBybmR3MzIuYzogUmV2ZXJ0IGFsbCBjaGFuZ2VzIGZyb20gMjAxMC0wMS0yMS4KKworCSogcm5kdzMyY2UuYzogTmV3LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX2xpYnJhbmRvbV9sYV9TT1VSQ0VTKTogQWRkIGl0LgorCSogcmFuZG9tLWNzcHJuZy5jIChnZXRmbmNfZ2F0aGVyX3JhbmRvbSkKKwkoZ2V0Zm5jX2Zhc3RfcmFuZG9tX3BvbGwpIFtVU0VfUk5EVzMyQ0VdOiBVc2Ugcm5kdzMyY2UuCisKKzIwMTAtMDEtMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZHczMi5jIChyZWFkX21ibV9kYXRhKSBbVzMyQ0VdOiBEbyBub3QgYnVpbGQuCisJKHNsb3dfZ2F0aGVyZXIpIFtXMzJDRV06IERvIG5vdCBjYWxsIHJlYWRfbWJtX2RhdGEuCisJKF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tX2Zhc3QpIFtXMzJDRV06IEV4Y2x1ZGUgc29tZSBjYWxscy4KKwkoX2djcnlfcm5kdzMyX2dhdGhlcl9yYW5kb20pOiBBZGp1c3QgdmVyc2lvbiB0ZXN0IGZvciBXaW5kb3dzQ0UuCisKKzIwMDktMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZHczMi5jIChzeXN0ZW1faXNfdzIwMDApOiBOZXcuCisJKF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tKTogU2V0IGl0LgorCShzbG93X2dhdGhlcmVyKTogSWdub3JlIFN5c3RlbU9iamVjdEluZm9ybWF0aW9uIG9uIFcyMDAwLiAgRml4ZXMKKwlidWcjMTE2Ny4KKworMjAwOS0wNy0wOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcm5kbGludXguYyAoX2djcnlfcm5kbGludXhfZ2F0aGVyX3JhbmRvbSk6IFByaW50IHJlYWwgdmFsdWVzIGZvcgorCXRoZSBwcm9nZXNzIGZ1bmN0aW9uIGFuZCBjYWxsIGl0IGJlZm9yZSBibG9ja2luZy4gIFN1Z2dlc3RlZCBieQorCUNocmlzdGlhbiBHcm90aG9mZi4KKwkqIHJuZHVuaXguYyAoc2xvd19wb2xsKTogQWRkIHNpbWlsYXIsIGJ1dCBub3QgeWV0IGZ1bmN0aW9uYWwsIGNvZGUuCisKKzIwMDktMDctMDIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJuZGh3LmMgKHBvbGxfcGFkbG9jayk6IEFzbSBjaGFuZ2UgZnJvbSBGZWRvcmEuCisKKzIwMDktMDEtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS5jIChfZ2NyeV9yYW5kb21fZGVpbml0X2V4dGVybmFsX3Rlc3QpOiBEbyBub3QgcmV0dXJuIGEKKwl2YWx1ZS4gIFJlcG9ydGVkIEFsYmVydCBDaGluLgorCisyMDA4LTA5LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20tZmlwcy5jICh4OTMxX2Flc19kcml2ZXIpOiBObyByZS1zZWVkaW5nIHdpdGggdGVzdCBjb250ZXh0cy4KKwkoX2djcnlfcm5nZmlwc19pbml0X2V4dGVybmFsX3Rlc3QpOiBGaXggc2V0dGluZyBvZiB0ZXN0X2R0X3B0ci4KKwkoc3RydWN0IHJuZ19jb250ZXh0KTogQWRkIGZsYWcgVEVTVF9OT19EVVBfQ0hFQ0suCisJKHg5MzFfYWVzX2RyaXZlcik6IFVzZSB0aGF0IGZsYWcuCisJKF9nY3J5X3JuZ2ZpcHNfaW5pdF9leHRlcm5hbF90ZXN0KTogQWRkIGFyZyBGTEFHUyBhbmQgdXNlIGl0IHRvCisJbW9kaWZ5IHRoZSB0ZXN0LgorCSogcmFuZG9tLmMgKF9nY3J5X3JhbmRvbV9pbml0X2V4dGVybmFsX3Rlc3QpOiBQYXNzIEZMQUdTLgorCisyMDA4LTA5LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAoX2djcnlfcmFuZG9tX2luaXRfZXh0ZXJuYWxfdGVzdCk6IE5ldy4KKwkoX2djcnlfcmFuZG9tX3J1bl9leHRlcm5hbF90ZXN0KTogTmV3LgorCShfZ2NyeV9yYW5kb21fZGVpbml0X2V4dGVybmFsX3Rlc3QpOiBOZXcuCisJKiByYW5kb20tZmlwcy5jIChzdHJ1Y3Qgcm5nX2NvbnRleHQpOiBUdXJuIFRFU1RfRFRfQ09VTlRFUiBpbnRvIGEKKwkzMiBiaXQgaW50ZWdlci4KKwkoeDkzMV9nZXRfZHQpOiBEaXR0by4KKwkoc2VsZnRlc3Rfa2F0KTogSW50aWFsaXplIGl0IGFjY29yZGluZ2x5LgorCShfZ2NyeV9ybmdmaXBzX2luaXRfZXh0ZXJuYWxfdGVzdCk6IE5ldy4KKwkoX2djcnlfcm5nZmlwc19ydW5fZXh0ZXJuYWxfdGVzdCk6IE5ldy4KKwkoX2djcnlfcm5nZmlwc19kZWluaXRfZXh0ZXJuYWxfdGVzdCk6IE5ldy4KKworMjAwOC0wOS0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLmMgKF9nY3J5X3JhbmRvbV9zZWxmdGVzdCk6IFJldHVybiBzdWNjZXNzIGlmIG5vdCBpbiBmaXBzCisJbW9kZS4KKworMjAwOC0wOS0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLWZpcHMuYyAoeDkzMV9nZXRfZHQpIFtXMzJdOiBEbyBub3QgdXNlIGdldHBwaWQuCisJKGdldF9lbnRyb3B5KTogUHJlcGFyZSBmb3IgdXNlIHVuZGVyIFdpbmRvd3MuCisJKF9nY3J5X3JuZ2ZpcHNfc2VsZnRlc3QpOiBEaXR0by4KKwkoZW50cm9weV9jb2xsZWN0X2NiKTogTWFrZSBzdXJlIHRoYXQgdGhlIGdhdGhlcmVyIG5ldmVyIG92ZXJmbG93cworCXRoZSBidWZmZXJzLgorCisyMDA4LTA4LTI5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20tZmlwcy5jIChTRUVEX1RUTCk6IE5ldy4KKwkoc3RydWN0IHJuZ19jb250ZXh0KTogQWRkIFVTRV9DT1VOVEVSLCByZW1vdmUgTkVFRF9TVFJPTkdfRU5UUk9QWS4KKwkoeDkzMV9hZXNfZHJpdmVyKTogRG8gcmUtc2VlZGluZyBpZiByZXF1aXJlZC4KKwkoeDkzMV9nZW5lcmF0ZV9rZXksIHg5MzFfZ2VuZXJhdGVfc2VlZCk6IEZhY3RvciBjb21tb24gY29kZSBvdXQgdG8gLi4KKwkoZ2V0X2VudHJvcHkpOiAuLiBuZXcuICBBbHdheXMgdXNlIC9kZXYvcmFuZG9tLgorCSh4OTMxX2dlbmVyYXRlX2tleSk6IFNlZWQga2V5IGZvciBub25jZV9jb250ZXh0IGZyb20gc3RkX3JuZ19jb250ZXh0LgorCSh4OTMxX3Jlc2VlZCk6IE5ldy4gU2VlZCBub25jZSBjb250ZXh0IGZyb20gc3RkX3JuZ19jb250ZXh0LgorCShnZXRfcmFuZG9tKTogVXNlIHg5MzFfcmVzZWVkLgorCShfZ2NyeV9ybmdmaXBzX3NlbGZ0ZXN0KTogUmV0dXJuIGFuIGVycm9yIGlmIG5vIC9kZXYvcmFkb20gc3VwcG9ydAorCWhhcyBiZWVuIGNvbXBpbGVkIGluLgorCShnZXRfcmFuZG9tKTogUmVtb3ZlIGxvY2tpbmcuCisJKF9nY3J5X3JuZ2ZpcHNfcmFuZG9taXplLCBfZ2NyeV9ybmdmaXBzX2NyZWF0ZV9ub25jZSk6IExvY2sgaGVyZS4KKworMjAwOC0wOC0yOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLWRhZW1vbi5jIChjb25uZWN0X3RvX3NvY2tldCk6IFVzZSBHUEdfRVJSX0VOQU1FVE9PTE9ORy4KKworMjAwOC0wOC0yNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcmFuZG9tLWZpcHMuYyAoeDkzMV9hZXMpOiBUYWtlIGRhdGV0aW1lX0dUIGZyb20gYW4gYXJnLgorCSh4OTMxX2Flc19kcml2ZXIpOiBDYWxsIHg5MzFfZ2V0X2R0IGhlcmUuCisJKHg5MzFfZ2V0X2R0KTogSW1wbGVtZW50IHRoZSBLQVQgaGFjay4KKwkoeDkzMV9nZW5lcmF0ZV9zZWVkKTogQ29weSB0aGUgc2VlZCB2YWx1ZSB0byB0aGUgcHJvdmlkZWQgYnVmZmVyLgorCShzZWxmdGVzdF9rYXQpOiBOZXcuCisKKzIwMDgtMDgtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS5jIChfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSk6IE1vdmUgb3BlcmF0aW9uYWwgY2hlY2sKKwl0byBfZ2NyeV92Y29udHJvbC4KKwkoX2djcnlfZmFzdF9yYW5kb21fcG9sbCk6IERpdHRvLgorCShfZ2NyeV9yYW5kb21fc2VsZnRlc3QpOiBOZXcuCisJKiByYW5kb20tZmlwcy5jIChfZ2NyeV9ybmdmaXBzX3NlbGZ0ZXN0KTogTmV3LgorCisyMDA4LTA4LTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20tZmlwcy5jOiBGaW5pc2ggaW1wbGVtZW50YXRpb24uCisKKzIwMDgtMDgtMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS1maXBzLmM6IE5ldy4KKworCSogcmFuZG9tLWNzcHJuZy5jIChwcm9jZXNzLWNiLCBwcm9ncmVzc19jYl9kYXRhKTogTW92ZSB0bworCXJhbmRvbS5jLgorCShfZ2NyeV9yZWdpc3Rlcl9yYW5kb21fcHJvZ3Jlc3MsIF9nY3J5X3JhbmRvbV9wcm9ncmVzcyk6IERpdHRvLgorCShfZ2NyeV9yYW5kb21faW5pdGlhbGl6ZSk6IFJlbmFtZSB0byBfZ2NyeV9ybmdjc3BybmdfaW5pdGlhbGl6ZS4KKwkoX2djcnlfcmFuZG9tX2R1bXBfc3RhdHMpOiBSZW5hbWUgdG8gX2djcnlfcm5nY3Nwcm5nX2R1bXBfc3RhdHMuCisJKF9nY3J5X3NlY3VyZV9yYW5kb21fYWxsb2MpOiBSZW5hbWUgdG8KKwlfZ2NyeV9ybmdjc3Bybmdfc2VjdXJlX2FsbG9jLgorCShfZ2NyeV9lbmFibGVfcXVpY2tfcmFuZG9tX2dlbik6IFJlbmFtZSB0bworCV9nY3J5X3JuZ2NzcHJuZ19lbmFibGVfcXVpY2tfZ2VuLgorCShfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQpOiBSZW5hbWUgdG8KKwlfZ2NyeV9ybmdjc3Bybmdfc2V0X2RhZW1vbl9zb2NrZXQuCisJKF9nY3J5X3VzZV9yYW5kb21fZGFlbW9uKTogUmVuYW1lIHRvIF9nY3J5X3JuZ2NzcHJuZ191c2VfZGFlbW9uLgorCShfZ2NyeV9yYW5kb21faXNfZmFrZWQpOiBSZW5hbWUgdG8gX2djcnlfcm5nY3Nwcm5nX2lzX2Zha2VkLgorCShnY3J5X3JhbmRvbV9hZGRfYnl0ZXMpOiBSZW5hbWUgdG8gX2djcnlfcm5nY3Nwcm5nX2FkZF9ieXRlcy4KKwkoZ2NyeV9yYW5kb21fYnl0ZXMpOiBSZW1vdmUKKwkoZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlKTogUmVtb3ZlLgorCShnY3J5X3JhbmRvbWl6ZSk6IFJlbmFtZSB0byBfZ2NyeV9ybmdjc3BybmdfcmFuZG9taXplLgorCShfZ2NyeV9zZXRfcmFuZG9tX3NlZWRfZmlsZSk6IFJlbmFtZSB0bworCV9nY3J5X3JuZ2NzcHJuZ19zZXRfc2VlZF9maWxlLgorCShfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSk6IFJlbmFtZSB0bworCV9nY3J5X3JuZ2NzcHJuZ191cGRhdGVfc2VlZF9maWxlLgorCShfZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKTogUmVuYW1lIHRvIF9nY3J5X3JuZ2NzcHJuZ19mYXN0X3BvbGwuCisJKGdjcnlfY3JlYXRlX25vbmNlKTogUmVuYW1lIHRvIF9nY3J5X3JuZ2NzcHJuZ19jcmVhdGVfbm9uY2UuCisKKwkqIHJhbmRvbS5jOiBGYWN0b3IgYWxsIGNvZGUgb3V0IHRvIHJhbmRvbS1jc3BybmcuYyBhbmQgaW1wbGVtZW50CisJd3JhcHBlciBmdW5jdGlvbnMuCisKKzIwMDgtMDctMDUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJhbmRvbS1kYWVtb24uYywgcmFuZG9tLmgsIHJuZGh3LmMsIHJuZHVuaXguYywgcmFuZC1pbnRlcm5hbC5oICoKKwlyYW5kb20uYywgcm5kZWdkLmMsIHJuZGxpbnV4LmMsIHJuZHczMi5jOiBNb3ZlIGZyb20gLi4vY2lwaGVyLyB0bworCWhlcmUuCisJKiBNYWtlZmlsZS5hbTogTmV3LgorCisgQ29weXJpZ2h0IDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitMb2NhbCBWYXJpYWJsZXM6CitidWZmZXItcmVhZC1vbmx5OiB0CitFbmQ6CmRpZmYgLS1naXQgYS9yYW5kb20vTWFrZWZpbGUuYW0gYi9yYW5kb20vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNTg3YQotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUxIEBACisjIE1ha2VmaWxlIGZvciBjaXBoZXIgbW9kdWxlcworIyBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorCisjIE5lZWQgdG8gaW5jbHVkZSAuLi9zcmMgaW4gYWRkaXRpb24gdG8gdG9wX3NyY2RpciBiZWNhdXNlIGdjcnlwdC5oIGlzCisjIGEgYnVpbHQgaGVhZGVyLgorQU1fQ1BQRkxBR1MgPSAtSS4uL3NyYyAtSSQodG9wX3NyY2Rpcikvc3JjCitBTV9DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpCisKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYnJhbmRvbS5sYQorCitHQ1JZUFRfTU9EVUxFUyA9IEBHQ1JZUFRfUkFORE9NQAorCitsaWJyYW5kb21fbGFfREVQRU5ERU5DSUVTID0gJChHQ1JZUFRfTU9EVUxFUykKK2xpYnJhbmRvbV9sYV9MSUJBREQgPSAkKEdDUllQVF9NT0RVTEVTKQorCitsaWJyYW5kb21fbGFfU09VUkNFUyA9IFwKK3JhbmRvbS5jIHJhbmRvbS5oIFwKK3JhbmQtaW50ZXJuYWwuaCBcCityYW5kb20tY3Nwcm5nLmMgXAorcmFuZG9tLWZpcHMuYyBcCityYW5kb20tc3lzdGVtLmMgXAorcm5kaHcuYworCitpZiBVU0VfUkFORE9NX0RBRU1PTgorbGlicmFuZG9tX2xhX1NPVVJDRVMgKz0gcmFuZG9tLWRhZW1vbi5jCitlbmRpZiBVU0VfUkFORE9NX0RBRU1PTgorCisKK0VYVFJBX2xpYnJhbmRvbV9sYV9TT1VSQ0VTID0gXAorcm5kbGludXguYyBcCitybmRlZ2QuYyBcCitybmR1bml4LmMgXAorcm5kdzMyLmMgIFwKK3JuZHczMmNlLmMKZGlmZiAtLWdpdCBhL3JhbmRvbS9NYWtlZmlsZS5pbiBiL3JhbmRvbS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTU0NDFmCi0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjE4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgTWFrZWZpbGUgZm9yIGNpcGhlciBtb2R1bGVzCisjIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorIworIyBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitAVVNFX1JBTkRPTV9EQUVNT05fVFJVRUBhbV9fYXBwZW5kXzEgPSByYW5kb20tZGFlbW9uLmMKK3N1YmRpciA9IHJhbmRvbQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9ncGctZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ub2V4ZWNzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NvY2tsZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2FtX19saWJyYW5kb21fbGFfU09VUkNFU19ESVNUID0gcmFuZG9tLmMgcmFuZG9tLmggcmFuZC1pbnRlcm5hbC5oIFwKKwlyYW5kb20tY3Nwcm5nLmMgcmFuZG9tLWZpcHMuYyByYW5kb20tc3lzdGVtLmMgcm5kaHcuYyBcCisJcmFuZG9tLWRhZW1vbi5jCitAVVNFX1JBTkRPTV9EQUVNT05fVFJVRUBhbV9fb2JqZWN0c18xID0gcmFuZG9tLWRhZW1vbi5sbworYW1fbGlicmFuZG9tX2xhX09CSkVDVFMgPSByYW5kb20ubG8gcmFuZG9tLWNzcHJuZy5sbyByYW5kb20tZmlwcy5sbyBcCisJcmFuZG9tLXN5c3RlbS5sbyBybmRody5sbyAkKGFtX19vYmplY3RzXzEpCitsaWJyYW5kb21fbGFfT0JKRUNUUyA9ICQoYW1fbGlicmFuZG9tX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJyYW5kb21fbGFfU09VUkNFUykgJChFWFRSQV9saWJyYW5kb21fbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2xpYnJhbmRvbV9sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKEVYVFJBX2xpYnJhbmRvbV9sYV9TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfRklMRVZFUlNJT04gPSBAQlVJTERfRklMRVZFUlNJT05ACitCVUlMRF9SRVZJU0lPTiA9IEBCVUlMRF9SRVZJU0lPTkAKK0JVSUxEX1RJTUVTVEFNUCA9IEBCVUlMRF9USU1FU1RBTVBACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDQ19GT1JfQlVJTEQgPSBAQ0NfRk9SX0JVSUxEQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRExfTElCUyA9IEBETF9MSUJTQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGQUxMQkFDS19TT0NLTEVOX1QgPSBARkFMTEJBQ0tfU09DS0xFTl9UQAorRkdSRVAgPSBARkdSRVBACitHQ1JZUFRfQ0lQSEVSUyA9IEBHQ1JZUFRfQ0lQSEVSU0AKK0dDUllQVF9ESUdFU1RTID0gQEdDUllQVF9ESUdFU1RTQAorR0NSWVBUX0hXRl9NT0RVTEVTID0gQEdDUllQVF9IV0ZfTU9EVUxFU0AKK0dDUllQVF9LREZTID0gQEdDUllQVF9LREZTQAorR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQEdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0dDUllQVF9SQU5ET00gPSBAR0NSWVBUX1JBTkRPTUAKK0dQR19FUlJPUl9DRkxBR1MgPSBAR1BHX0VSUk9SX0NGTEFHU0AKK0dQR19FUlJPUl9DT05GSUcgPSBAR1BHX0VSUk9SX0NPTkZJR0AKK0dQR19FUlJPUl9MSUJTID0gQEdQR19FUlJPUl9MSUJTQAorR1JFUCA9IEBHUkVQQAorSU5TRVJUX1NZU19TRUxFQ1RfSCA9IEBJTlNFUlRfU1lTX1NFTEVDVF9IQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkdDUllQVF9DSVBIRVJTID0gQExJQkdDUllQVF9DSVBIRVJTQAorTElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTiA9IEBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAorTElCR0NSWVBUX0NPTkZJR19DRkxBR1MgPSBATElCR0NSWVBUX0NPTkZJR19DRkxBR1NACitMSUJHQ1JZUFRfQ09ORklHX0hPU1QgPSBATElCR0NSWVBUX0NPTkZJR19IT1NUQAorTElCR0NSWVBUX0NPTkZJR19MSUJTID0gQExJQkdDUllQVF9DT05GSUdfTElCU0AKK0xJQkdDUllQVF9ESUdFU1RTID0gQExJQkdDUllQVF9ESUdFU1RTQAorTElCR0NSWVBUX0xUX0FHRSA9IEBMSUJHQ1JZUFRfTFRfQUdFQAorTElCR0NSWVBUX0xUX0NVUlJFTlQgPSBATElCR0NSWVBUX0xUX0NVUlJFTlRACitMSUJHQ1JZUFRfTFRfUkVWSVNJT04gPSBATElCR0NSWVBUX0xUX1JFVklTSU9OQAorTElCR0NSWVBUX1BVQktFWV9DSVBIRVJTID0gQExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKK0xJQkdDUllQVF9USFJFQURfTU9EVUxFUyA9IEBMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVNACitMSUJNVUxUSVRIUkVBRCA9IEBMSUJNVUxUSVRIUkVBREAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRIUkVBRCA9IEBMSUJUSFJFQURACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk1VTFRJVEhSRUFEID0gQExUTElCTVVMVElUSFJFQURACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRMSUJUSFJFQUQgPSBATFRMSUJUSFJFQURACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVBJX1NGTEFHUyA9IEBNUElfU0ZMQUdTQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9FWEVDU1RBQ0tfRkxBR1MgPSBATk9FWEVDU1RBQ0tfRkxBR1NACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BUSF9DRkxBR1MgPSBAUFRIX0NGTEFHU0AKK1BUSF9DT05GSUcgPSBAUFRIX0NPTkZJR0AKK1BUSF9MSUJTID0gQFBUSF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1JDID0gQFJDQAorUlVOX0xBUkdFX0RBVEFfVEVTVFMgPSBAUlVOX0xBUkdFX0RBVEFfVEVTVFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorU1lTX1NPQ0tFVF9IID0gQFNZU19TT0NLRVRfSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05fTlVNQkVSID0gQFZFUlNJT05fTlVNQkVSQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZW1hY3NfbG9jYWxfdmFyc19iZWdpbiA9IEBlbWFjc19sb2NhbF92YXJzX2JlZ2luQAorZW1hY3NfbG9jYWxfdmFyc19lbmQgPSBAZW1hY3NfbG9jYWxfdmFyc19lbmRACitlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seSA9IEBlbWFjc19sb2NhbF92YXJzX3JlYWRfb25seUAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBOZWVkIHRvIGluY2x1ZGUgLi4vc3JjIGluIGFkZGl0aW9uIHRvIHRvcF9zcmNkaXIgYmVjYXVzZSBnY3J5cHQuaCBpcworIyBhIGJ1aWx0IGhlYWRlci4KK0FNX0NQUEZMQUdTID0gLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYworQU1fQ0ZMQUdTID0gJChHUEdfRVJST1JfQ0ZMQUdTKQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGlicmFuZG9tLmxhCitHQ1JZUFRfTU9EVUxFUyA9IEBHQ1JZUFRfUkFORE9NQAorbGlicmFuZG9tX2xhX0RFUEVOREVOQ0lFUyA9ICQoR0NSWVBUX01PRFVMRVMpCitsaWJyYW5kb21fbGFfTElCQUREID0gJChHQ1JZUFRfTU9EVUxFUykKK2xpYnJhbmRvbV9sYV9TT1VSQ0VTID0gcmFuZG9tLmMgcmFuZG9tLmggcmFuZC1pbnRlcm5hbC5oIFwKKwlyYW5kb20tY3Nwcm5nLmMgcmFuZG9tLWZpcHMuYyByYW5kb20tc3lzdGVtLmMgcm5kaHcuYyBcCisJJChhbV9fYXBwZW5kXzEpCitFWFRSQV9saWJyYW5kb21fbGFfU09VUkNFUyA9IFwKK3JuZGxpbnV4LmMgXAorcm5kZWdkLmMgXAorcm5kdW5peC5jIFwKK3JuZHczMi5jICBcCitybmR3MzJjZS5jCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHJhbmRvbS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSByYW5kb20vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYnJhbmRvbS5sYTogJChsaWJyYW5kb21fbGFfT0JKRUNUUykgJChsaWJyYW5kb21fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnJhbmRvbV9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQoTElOSykgICQobGlicmFuZG9tX2xhX09CSkVDVFMpICQobGlicmFuZG9tX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmFuZG9tLWNzcHJuZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JhbmRvbS1kYWVtb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYW5kb20tZmlwcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JhbmRvbS1zeXN0ZW0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYW5kb20uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ybmRlZ2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ybmRody5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JuZGxpbnV4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcm5kdW5peC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JuZHczMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JuZHczMmNlLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3JhbmRvbS9yYW5kLWludGVybmFsLmggYi9yYW5kb20vcmFuZC1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjIzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5kb20vcmFuZC1pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTUyIEBACisvKiByYW5kLWludGVybmFsLmggLSBoZWFkZXIgdG8gZ2x1ZSB0aGUgcmFuZG9tIGZ1bmN0aW9ucworICoJQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEcxMF9SQU5EX0lOVEVSTkFMX0gKKyNkZWZpbmUgRzEwX1JBTkRfSU5URVJOQUxfSAorCisjaW5jbHVkZSAiLi4vc3JjL2NpcGhlci1wcm90by5oIgorCisvKiBDb25zdGFudHMgdXNlZCB0byBkZWZpbmUgdGhlIG9yaWdpbiBvZiByYW5kb20gYWRkZWQgdG8gdGhlIHBvb2wuCisgICBUaGUgY29kZSBpcyBzZW5zaXRpdmUgdG8gdGhlIG9yZGVyIG9mIHRoZSB2YWx1ZXMuICAqLworZW51bSByYW5kb21fb3JpZ2lucworICB7CisgICAgUkFORE9NX09SSUdJTl9JTklUID0gMCwgICAgICAvKiBVc2VkIG9ubHkgZm9yIGluaXRpYWxpemF0aW9uLiAqLworICAgIFJBTkRPTV9PUklHSU5fRVhURVJOQUwgPSAxLCAgLyogQWRkZWQgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UuICAqLworICAgIFJBTkRPTV9PUklHSU5fRkFTVFBPTEwgPSAyLCAgLyogRmFzdCByYW5kb20gcG9sbCBmdW5jdGlvbi4gICovCisgICAgUkFORE9NX09SSUdJTl9TTE9XUE9MTCA9IDMsICAvKiBTbG93IHBvbGwgZnVuY3Rpb24uICAqLworICAgIFJBTkRPTV9PUklHSU5fRVhUUkFQT0xMID0gNCAgLyogVXNlZCB0byBtYXJrIGFuIGV4dHJhIHBvb2wgc2VlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVlIHRvIGEgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSByZXF1ZXN0LiAgKi8KKyAgfTsKKworCisKKy8qLS0gcmFuZG9tLmMgLS0qLwordm9pZCBfZ2NyeV9yYW5kb21fcHJvZ3Jlc3MgKGNvbnN0IGNoYXIgKndoYXQsIGludCBwcmludGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnQsIGludCB0b3RhbCk7CisKKworLyotLSByYW5kb20tY3Nwcm5nLmMgLS0qLwordm9pZCBfZ2NyeV9ybmdjc3BybmdfaW5pdGlhbGl6ZSAoaW50IGZ1bGwpOwordm9pZCBfZ2NyeV9ybmdjc3BybmdfY2xvc2VfZmRzICh2b2lkKTsKK3ZvaWQgX2djcnlfcm5nY3Nwcm5nX2R1bXBfc3RhdHMgKHZvaWQpOwordm9pZCBfZ2NyeV9ybmdjc3Bybmdfc2VjdXJlX2FsbG9jICh2b2lkKTsKK3ZvaWQgX2djcnlfcm5nY3Nwcm5nX2VuYWJsZV9xdWlja19nZW4gKHZvaWQpOwordm9pZCBfZ2NyeV9ybmdjc3Bybmdfc2V0X2RhZW1vbl9zb2NrZXQgKGNvbnN0IGNoYXIgKnNvY2tldG5hbWUpOworaW50ICBfZ2NyeV9ybmdjc3BybmdfdXNlX2RhZW1vbiAoaW50IG9ub2ZmKTsKK2ludCAgX2djcnlfcm5nY3Nwcm5nX2lzX2Zha2VkICh2b2lkKTsKK2djcnlfZXJyb3JfdCBfZ2NyeV9ybmdjc3BybmdfYWRkX2J5dGVzIChjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHF1YWxpdHkpOwordm9pZCAqX2djcnlfcm5nY3Nwcm5nX2dldF9ieXRlcyAoc2l6ZV90IG5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOwordm9pZCAqX2djcnlfcm5nY3Nwcm5nX2dldF9ieXRlc19zZWN1cmUgKHNpemVfdCBuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCk7Cit2b2lkIF9nY3J5X3JuZ2NzcHJuZ19yYW5kb21pemUgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCk7Cit2b2lkIF9nY3J5X3JuZ2NzcHJuZ19zZXRfc2VlZF9maWxlIChjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgX2djcnlfcm5nY3Nwcm5nX3VwZGF0ZV9zZWVkX2ZpbGUgKHZvaWQpOwordm9pZCBfZ2NyeV9ybmdjc3BybmdfZmFzdF9wb2xsICh2b2lkKTsKKworLyotLSByYW5kb20tZmlwcy5jIC0tKi8KK3ZvaWQgX2djcnlfcm5nZmlwc19pbml0aWFsaXplIChpbnQgZnVsbCk7Cit2b2lkIF9nY3J5X3JuZ2ZpcHNfY2xvc2VfZmRzICh2b2lkKTsKK3ZvaWQgX2djcnlfcm5nZmlwc19kdW1wX3N0YXRzICh2b2lkKTsKK2ludCAgX2djcnlfcm5nZmlwc19pc19mYWtlZCAodm9pZCk7CitnY3J5X2Vycm9yX3QgX2djcnlfcm5nZmlwc19hZGRfYnl0ZXMgKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcXVhbGl0eSk7Cit2b2lkIF9nY3J5X3JuZ2ZpcHNfcmFuZG9taXplICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOwordm9pZCBfZ2NyeV9ybmdmaXBzX2NyZWF0ZV9ub25jZSAodm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKworZ2NyeV9lcnJvcl90IF9nY3J5X3JuZ2ZpcHNfc2VsZnRlc3QgKHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KTsKKworZ2NyeV9lcnJfY29kZV90IF9nY3J5X3JuZ2ZpcHNfaW5pdF9leHRlcm5hbF90ZXN0ICh2b2lkICoqcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmR0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZHRsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X3JuZ2ZpcHNfcnVuX2V4dGVybmFsX3Rlc3QgKHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKK3ZvaWQgX2djcnlfcm5nZmlwc19kZWluaXRfZXh0ZXJuYWxfdGVzdCAodm9pZCAqY29udGV4dCk7CisKKworLyotLSByYW5kb20tc3lzdGVtLmMgLS0qLwordm9pZCBfZ2NyeV9ybmdzeXN0ZW1faW5pdGlhbGl6ZSAoaW50IGZ1bGwpOwordm9pZCBfZ2NyeV9ybmdzeXN0ZW1fY2xvc2VfZmRzICh2b2lkKTsKK3ZvaWQgX2djcnlfcm5nc3lzdGVtX2R1bXBfc3RhdHMgKHZvaWQpOworaW50ICBfZ2NyeV9ybmdzeXN0ZW1faXNfZmFrZWQgKHZvaWQpOworZ2NyeV9lcnJvcl90IF9nY3J5X3JuZ3N5c3RlbV9hZGRfYnl0ZXMgKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcXVhbGl0eSk7Cit2b2lkIF9nY3J5X3JuZ3N5c3RlbV9yYW5kb21pemUgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCk7CisKKworCisvKi0tIHJuZGxpbnV4LmMgLS0qLworaW50IF9nY3J5X3JuZGxpbnV4X2dhdGhlcl9yYW5kb20gKHZvaWQgKCphZGQpIChjb25zdCB2b2lkICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCk7CisKKy8qLS0gcm5kdW5peC5jIC0tKi8KK2ludCBfZ2NyeV9ybmR1bml4X2dhdGhlcl9yYW5kb20gKHZvaWQgKCphZGQpIChjb25zdCB2b2lkICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsKTsKKworLyotLSBybmRlbGcuYyAtLSovCitpbnQgX2djcnlfcm5kZWdkX2dhdGhlcl9yYW5kb20gKHZvaWQgKCphZGQpIChjb25zdCB2b2lkICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsKTsKK2ludCBfZ2NyeV9ybmRlZ2RfY29ubmVjdF9zb2NrZXQgKGludCBub2ZhaWwpOworCisvKi0tIHJuZHczMi5jIC0tKi8KK2ludCBfZ2NyeV9ybmR3MzJfZ2F0aGVyX3JhbmRvbSAodm9pZCAoKmFkZCkgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwpOwordm9pZCBfZ2NyeV9ybmR3MzJfZ2F0aGVyX3JhbmRvbV9mYXN0ICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4gKTsKKworLyotLSBybmR3MzJjZS5jIC0tKi8KK2ludCBfZ2NyeV9ybmR3MzJjZV9nYXRoZXJfcmFuZG9tICh2b2lkICgqYWRkKSAoY29uc3Qgdm9pZCAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCk7Cit2b2lkIF9nY3J5X3JuZHczMmNlX2dhdGhlcl9yYW5kb21fZmFzdCAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbiApOworCisvKi0tIHJuZGh3LmMgLS0qLworaW50IF9nY3J5X3JuZGh3X2ZhaWxlZF9wICh2b2lkKTsKK3ZvaWQgX2djcnlfcm5kaHdfcG9sbF9mYXN0ICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luKTsKK3NpemVfdCBfZ2NyeV9ybmRod19wb2xsX3Nsb3cgKHZvaWQgKCphZGQpKGNvbnN0IHZvaWQqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luKTsKKworCisKKyNlbmRpZiAvKkcxMF9SQU5EX0lOVEVSTkFMX0gqLwpkaWZmIC0tZ2l0IGEvcmFuZG9tL3JhbmRvbS1jc3BybmcuYyBiL3JhbmRvbS9yYW5kb20tY3Nwcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMzVkOAotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9yYW5kb20tY3Nwcm5nLmMKQEAgLTAsMCArMSwxMzI3IEBACisvKiByYW5kb20tY3Nwcm5nLmMgLSBDU1BSTkcgc3R5bGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKGxpYmdjcnlwdCBjbGFzc2ljKQorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorICogICAgICAgICAgICAgICAyMDA3LCAyMDA4LCAyMDEwLCAyMDEyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAgIFRoaXMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaXMgbW9kZWxsZWQgYWZ0ZXIgdGhlIG9uZSBkZXNjcmliZWQgaW4KKyAgIFBldGVyIEd1dG1hbm4ncyAxOTk4IFVzZW5peCBTZWN1cml0eSBTeW1wb3NpdW0gcGFwZXI6ICJTb2Z0d2FyZQorICAgR2VuZXJhdGlvbiBvZiBQcmFjdGljYWxseSBTdHJvbmcgUmFuZG9tIE51bWJlcnMiLiAgU2VlIGFsc28gY2hhcHRlcgorICAgNiBpbiBoaXMgYm9vayAiQ3J5cHRvZ3JhcGhpYyBTZWN1cml0eSBBcmNoaXRlY3R1cmUiLCBOZXcgWW9yaywKKyAgIDIwMDQsIElTQk4gMC0zODctOTUzODctNi4KKworICAgTm90ZSB0aGF0IHRoZSBhY3JvbnltIENTUFJORyBzdGFuZHMgZm9yICJDb250aW51b3VzbHkgU2VlZGVkCisgICBQc2V1ZG9SYW5kb20gTnVtYmVyIEdlbmVyYXRvciIgYXMgdXNlZCBpbiBQZXRlcidzIGltcGxlbWVudGF0aW9uIG9mCisgICB0aGUgcGFwZXIgYW5kIG5vdCBvbmx5IGZvciAiQ3J5cHRvZ3JhcGhpY2FsbHkgU2VjdXJlIFBzZXVkb1JhbmRvbQorICAgTnVtYmVyIEdlbmVyYXRvciIuCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZglIQVZFX0dFVEhSVElNRQorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNlbmRpZgorI2lmZGVmIF9fTUlOR1czMl9fCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlmCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiLi4vY2lwaGVyL3JtZC5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgInJhbmQtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIgLyogUmVxdWlyZWQgZm9yIHRoZSBybWQxNjBfaGFzaF9idWZmZXIoKSBwcm90b3R5cGUuICAqLworI2luY2x1ZGUgImF0aC5oIgorCisjaWZuZGVmIFJBTkRfTUFYICAgLyogRm9yIFN1bk9TLiAqLworI2RlZmluZSBSQU5EX01BWCAzMjc2NworI2VuZGlmCisKKy8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIGxvY2sgdGhlIHNlZWQgZmlsZSByZWFkIHdyaXRlLiAqLworI2lmIGRlZmluZWQoSEFWRV9GQ05UTCkgJiYgZGVmaW5lZChIQVZFX0ZUUlVOQ0FURSkgJiYgIWRlZmluZWQoSEFWRV9XMzJfU1lTVEVNKQorI2RlZmluZSBMT0NLX1NFRURfRklMRSAxCisjZWxzZQorI2RlZmluZSBMT0NLX1NFRURfRklMRSAwCisjZW5kaWYKKworLyogRGVmaW5lIHRoZSBjb25zdGFudCB3ZSB1c2UgZm9yIHRyYW5zZm9ybWluZyB0aGUgcG9vbCBhdCByZWFkLW91dC4gKi8KKyNpZiBTSVpFT0ZfVU5TSUdORURfTE9ORyA9PSA4CisjZGVmaW5lIEFERF9WQUxVRSAweGE1YTVhNWE1YTVhNWE1YTUKKyNlbGlmIFNJWkVPRl9VTlNJR05FRF9MT05HID09IDQKKyNkZWZpbmUgQUREX1ZBTFVFIDB4YTVhNWE1YTUKKyNlbHNlCisjZXJyb3Igd2VpcmQgc2l6ZSBmb3IgYW4gdW5zaWduZWQgbG9uZworI2VuZGlmCisKKy8qIENvbnRzdGFudHMgcGVydGFpbmluZyB0byB0aGUgaGFzaCBwb29sLiAqLworI2RlZmluZSBCTE9DS0xFTiAgNjQgICAvKiBIYXNoIHRoaXMgYW1vdW50IG9mIGJ5dGVzLi4uICovCisjZGVmaW5lIERJR0VTVExFTiAyMCAgIC8qIC4uLiBpbnRvIGEgZGlnZXN0IG9mIHRoaXMgbGVuZ3RoIChybWQxNjApLiAqLworLyogUE9PTEJMT0NLUyBpcyB0aGUgbnVtYmVyIG9mIGRpZ2VzdHMgd2hpY2ggbWFrZSB1cCB0aGUgcG9vbC4gICovCisjZGVmaW5lIFBPT0xCTE9DS1MgMzAKKy8qIFBPT0xTSVpFIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgZGlnZXN0IGxlbmd0aCB0byBtYWtlIHRoZSBBTkQKKyAgIG9wZXJhdGlvbnMgZmFzdGVyLCB0aGUgc2l6ZSBzaG91bGQgYWxzbyBiZSBhIG11bHRpcGxlIG9mIHVuc2lnbmVkCisgICBsb25nLiAgKi8KKyNkZWZpbmUgUE9PTFNJWkUgKFBPT0xCTE9DS1MqRElHRVNUTEVOKQorI2lmIChQT09MU0laRSAlIFNJWkVPRl9VTlNJR05FRF9MT05HKQorI2Vycm9yIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBwb29sc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorI2RlZmluZSBQT09MV09SRFMgKFBPT0xTSVpFIC8gU0laRU9GX1VOU0lHTkVEX0xPTkcpCisKKworLyogUk5EUE9PTCBpcyB0aGUgcG9vbCB3ZSB1c2UgdG8gY29sbGVjdCB0aGUgZW50cm9weSBhbmQgdG8gc3RpciBpdAorICAgdXAuICBJdHMgYWxsb2NhdGVkIHNpemUgaXMgUE9PTFNJWkUrQkxPQ0tMRU4uICBOb3RlIHRoYXQgdGhpcyBpcworICAgYWxzbyBhbiBpbmRpY2F0aW9uIG9uIHdoZXRoZXIgdGhlIG1vZHVsZSBoYXMgYmVlbiBmdWxseQorICAgaW5pdGlhbGl6ZWQuICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqcm5kcG9vbDsKKworLyogS0VZUE9PTCBpcyB1c2VkIGFzIGEgc2NyYXRjaCBjb3B5IHRvIHJlYWQgb3V0IHJhbmRvbSBmcm9tIFJORFBPT0wuCisgICBJdHMgYWxsb2NhdGVkIHNpemUgaXMgYWxzbyBQT09MU0laRStCTE9DS0xFTi4gICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqa2V5cG9vbDsKKworLyogVGhpcyBpcyB0aGUgb2Zmc2V0IGludG8gUk5EUE9PTCB3aGVyZSB0aGUgbmV4dCByYW5kb20gYnl0ZXMgYXJlIHRvCisgICBiZSBtaXhlZCBpbi4gICovCitzdGF0aWMgc2l6ZV90IHBvb2xfd3JpdGVwb3M7CisKKy8qIFdoZW4gcmVhZGluZyBkYXRhIG91dCBvZiBLRVlQT09MLCB3ZSBzdGFydCB0aGUgcmVhZCBhdCBkaWZmZXJlbnQKKyAgIHBvc2l0aW9ucy4gIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb24gd2hlcmUgdG8gcmVhZCBuZXh0LiAgKi8KK3N0YXRpYyBzaXplX3QgcG9vbF9yZWFkcG9zOworCisvKiBUaGlzIGZsYWcgaXMgc2V0IHRvIHRydWUgYXMgc29vbiBhcyB0aGUgcG9vbCBoYXMgYmVlbiBjb21wbGV0ZWx5CisgICBmaWxsZWQgdGhlIGZpcnN0IHRpbWUuICBUaGlzIG1heSBoYXBwZW4gZWl0aGVyIGJ5IHJlcmVhZGluZyBhIHNlZWQKKyAgIGZpbGUgb3IgYnkgYWRkaW5nIGVub3VnaCBlbnRyb3B5LiAgKi8KK3N0YXRpYyBpbnQgcG9vbF9maWxsZWQ7CisKKy8qIFRoaXMgY291bnRlciBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGluaXRpYWwgc2VlZGluZyBoYXMgYmVlbgorICAgZG9uZSB3aXRoIGVub3VnaCBieXRlcyBmcm9tIGEgcmVsaWFibGUgZW50cm9weSBzb3VyY2UuICAqLworc3RhdGljIHNpemVfdCBwb29sX2ZpbGxlZF9jb3VudGVyOworCisvKiBJZiByYW5kb20gb2YgbGV2ZWwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gaGFzIGJlZW4gcmVxdWVzdGVkIHdlCisgICBoYXZlIHN0cmljdGVyIHJlcXVpcmVtZW50cyBvbiB3aGF0IGtpbmQgb2YgZW50cm9weSBpcyBpbiB0aGUgcG9vbC4KKyAgIEluIHBhcnRpY3VsYXIgUE9PTF9GSUxMRUQgaXMgbm90IHN1ZmZpY2llbnQuICBUaHVzIHdlIGFkZCBzb21lCisgICBleHRyYSBzZWVkaW5nIGFuZCBzZXQgdGhpcyBmbGFnIHRvIHRydWUgaWYgdGhlIGV4dHJhIHNlZWRpbmcgaGFzCisgICBiZWVuIGRvbmUuICAqLworc3RhdGljIGludCBkaWRfaW5pdGlhbF9leHRyYV9zZWVkaW5nOworCisvKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZXN0aW1hdGVkIHRoZSBhbW91bnQgb2YgZnJlc2ggZW50cm9weQorICAgYXZhaWxhYmxlIGluIFJORFBPT0wuICAqLworc3RhdGljIGludCBwb29sX2JhbGFuY2U7CisKKy8qIEFmdGVyIGEgbWl4aW5nIG9wZXJhdGlvbiB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRydWUgYW5kCisgICBjbGVhcmVkIGlmIG5ldyBlbnRyb3B5IGhhcyBiZWVuIGFkZGVkIG9yIGEgcmVtaXggaXMgcmVxdWlyZWQgZm9yCisgICBvdGhlciByZWFzb25zLiAgKi8KK3N0YXRpYyBpbnQganVzdF9taXhlZDsKKworLyogVGhlIG5hbWUgb2YgdGhlIHNlZWQgZmlsZSBvciBOVUxMIGlmIG5vIHNlZWQgZmlsZSBoYXMgYmVlbiBkZWZpbmVkLgorICAgVGhlIHNlZWQgZmlsZSBuZWVkcyB0byBiZSByZWdzaXRlcmVkIGF0IGluaXRpYWxpYXRpb24gdGltZS4gIFdlCisgICBrZWVwIGEgbWFsbG9jZWQgY29weSBoZXJlLiAgKi8KK3N0YXRpYyBjaGFyICpzZWVkX2ZpbGVfbmFtZTsKKworLyogSWYgYSBzZWVkIGZpbGUgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgbWF5YmUgdXBkYXRlZCBvbiBleGl0IHRoaXMKKyAgIGZsYWcgc2V0LiAqLworc3RhdGljIGludCBhbGxvd19zZWVkX2ZpbGVfdXBkYXRlOworCisvKiBPcHRpb24gZmxhZyBzZXQgYXQgaW5pdGlhbGlhdGlvbiB0aW1lIHRvIGZvcmNlIGFsbG9jYXRpb24gb2YgdGhlCisgICBwb29sIGluIHNlY3VyZSBtZW1vcnkuICAqLworc3RhdGljIGludCBzZWN1cmVfYWxsb2M7CisKKy8qIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBzZXQgdG8gdGhlIGFjdHVhbCBlbnRyb3B5IGdhdGhlcmluZworICAgZnVuY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uLiAgQWZ0ZXIgaW5pdGlhbGl6YXRpb24gaXQgaXMKKyAgIGd1YXJhbnRlZWQgdG8gcG9pbnQgdG8gZnVuY3Rpb24uICAoT24gc3lzdGVtcyB3aXRob3V0IGEgcmFuZG9tCisgICBnYXRoZXJlciBtb2R1bGUgYSBkdW1teSBmdW5jdGlvbiBpcyB1c2VkKS4qLworc3RhdGljIGludCAoKnNsb3dfZ2F0aGVyX2ZuYykodm9pZCAoKikoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucywgc2l6ZV90LCBpbnQpOworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgYWN0dWFsIGZhc3QgZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24KKyAgIGR1cmluZyBpbml0aWFsaXphdGlvbi4gIElmIGl0IGlzIE5VTEwsIG5vIHN1Y2ggZnVuY3Rpb24gaXMKKyAgIGF2YWlsYWJsZS4gKi8KK3N0YXRpYyB2b2lkICgqZmFzdF9nYXRoZXJfZm5jKSh2b2lkICgqKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpOworCisKKy8qIE9wdGlvbiBmbGFnIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCB0aGUgdGVzdCBzdWl0ZS4gIElmIHNldAorICAgcmVxdWVzdHMgZm9yIHZlcnkgc3Ryb25nIHJhbmRvbSBhcmUgZGVncmFkZWQgdG8gc3Ryb25nIHJhbmRvbS4gIE5vdAorICAgdXNlZCBieSByZWd1bGFyIGFwcGxpY2F0aW9ucy4gICovCitzdGF0aWMgaW50IHF1aWNrX3Rlc3Q7CisKKy8qIE9uIHN5c3RlbXMgd2l0aG91dCBlbnRyb3B5IGdhdGhlcmluZyBtb2R1bGVzLCB0aGlzIGZsYWcgaXMgc2V0IHRvCisgICBpbmRpY2F0ZSB0aGF0IHRoZSByYW5kb20gZ2VuZXJhdG9yIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5LiAgQQorICAgd2FybmluZyBtZXNzYWdlIGlzIGlzc3VlZCBhcyB3ZWxsLiAgVGhpcyBpcyB1c2VmdWwgb25seSBmb3IKKyAgIGRlYnVnZ2luZyBhbmQgZHVyaW5nIGRldmVsb3BtZW50LiAgKi8KK3N0YXRpYyBpbnQgZmFrZWRfcm5nOworCisvKiBUaGlzIGlzIHRoZSBsb2NrIHdlIHVzZSB0byBwcm90ZWN0IGFsbCBwb29sIG9wZXJhdGlvbnMuICAqLworc3RhdGljIGF0aF9tdXRleF90IHBvb2xfbG9jazsKKworLyogVGhpcyBpcyBhIGhlbHBlciBmb3IgYXNzZXJ0IGNhbGxzLiAgVGhlc2UgY2FsbHMgYXJlIHVzZWQgdG8gYXNzZXJ0CisgICB0aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIGEgbG9ja2VkIHN0YXRlLiAgSXQgaXMgbm90IG1lYW50IHRvIGJlCisgICB0aHJlYWQtc2FmZSBidXQgYXMgYSBtZXRob2QgdG8gZ2V0IGF3YXJlIG9mIG1pc3NpbmcgbG9ja3MgaW4gdGhlCisgICB0ZXN0IHN1aXRlLiAgKi8KK3N0YXRpYyBpbnQgcG9vbF9pc19sb2NrZWQ7CisKKworLyogV2Uga2VlcCBzb21lIGNvdW50ZXJzIGluIHRoaXMgc3RydWN0dXJlIGZvciB0aGUgc2FrZSBvZiB0aGUKKyAgIF9nY3J5X3JhbmRvbV9kdW1wX3N0YXRzICgpIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgbG9uZyBtaXhybmQ7CisgIHVuc2lnbmVkIGxvbmcgbWl4a2V5OworICB1bnNpZ25lZCBsb25nIHNsb3dwb2xsczsKKyAgdW5zaWduZWQgbG9uZyBmYXN0cG9sbHM7CisgIHVuc2lnbmVkIGxvbmcgZ2V0Ynl0ZXMxOworICB1bnNpZ25lZCBsb25nIG5nZXRieXRlczE7CisgIHVuc2lnbmVkIGxvbmcgZ2V0Ynl0ZXMyOworICB1bnNpZ25lZCBsb25nIG5nZXRieXRlczI7CisgIHVuc2lnbmVkIGxvbmcgYWRkYnl0ZXM7CisgIHVuc2lnbmVkIGxvbmcgbmFkZGJ5dGVzOworfSBybmRzdGF0czsKKworCisKKy8qIC0tLSBTdHVmZiBwZXJ0YWluaW5nIHRvIHRoZSByYW5kb20gZGFlbW9uIHN1cHBvcnQuIC0tLSAqLworI2lmZGVmIFVTRV9SQU5ET01fREFFTU9OCisKKy8qIElmIEFMTE9XX0RBRU1PTiBpcyB0cnVlLCB0aGUgbW9kdWxlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgcmFuZG9tCisgICBkYWVtb24gZmlyc3QuICBJZiB0aGUgZGFlbW9uIGhhcyBmYWlsZWQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvCisgICBiYWNrIHRvIGZhbHNlIGFuZCB0aGUgY29kZSBjb250aW51ZXMgYXMgbm9ybWFsLiAgTm90ZSwgd2UgZG9uJ3QKKyAgIHRlc3QgdGhpcyBmbGFnIGluIGEgbG9ja2VkIHN0YXRlIGJlY2F1c2UgYSB3cm9uZyB2YWx1ZSBkb2VzIG5vdAorICAgaGFybSBhbmQgdGhlIHRyaGVhZCB3aWxsIGZpbmQgb3V0IGl0c2VsZiB0aGF0IHRoZSBkYWVtb24gZG9lcyBub3QKKyAgIHdvcmsgYW5kIHNldCBpdCAoYWdhaW4pIHRvIGZhbHNlLiAgKi8KK3N0YXRpYyBpbnQgYWxsb3dfZGFlbW9uOworCisvKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSB1c2VyIG1heSBzZXQgYSBub24tZGVmYXVsdCBzb2NrZXQgbmFtZQorICAgZm9yIGFjY2Vzc2luZyB0aGUgcmFuZG9tIGRhZW1vbi4gIElmIHRoaXMgdmFsdWUgaXMgTlVMTCwgdGhlCisgICBkZWZhdWx0IG5hbWUgd2lsbCBiZSB1c2VkLiAqLworc3RhdGljIGNoYXIgKmRhZW1vbl9zb2NrZXRfbmFtZTsKKworI2VuZGlmIC8qVVNFX1JBTkRPTV9EQUVNT04qLworCisKKworLyogLS0tICBQcm90b3R5cGVzICAtLS0gKi8KK3N0YXRpYyB2b2lkIHJlYWRfcG9vbCAoYnl0ZSAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKTsKK3N0YXRpYyB2b2lkIGFkZF9yYW5kb21uZXNzIChjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4pOworc3RhdGljIHZvaWQgcmFuZG9tX3BvbGwgKHZvaWQpOworc3RhdGljIHZvaWQgZG9fZmFzdF9yYW5kb21fcG9sbCAodm9pZCk7CitzdGF0aWMgaW50ICgqZ2V0Zm5jX2dhdGhlcl9yYW5kb20gKHZvaWQpKSh2b2lkICgqKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zLCBzaXplX3QsIGludCk7CitzdGF0aWMgdm9pZCAoKmdldGZuY19mYXN0X3JhbmRvbV9wb2xsICh2b2lkKSkodm9pZCAoKikoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKTsKK3N0YXRpYyB2b2lkIHJlYWRfcmFuZG9tX3NvdXJjZSAoZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCk7CitzdGF0aWMgaW50IGdhdGhlcl9mYWtlZCAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucywgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICk7CisKKworDAorLyogLS0tICBGdW5jdGlvbnMgIC0tLSAqLworCisKKy8qIEJhc2ljIGluaXRpYWxpemF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgbXV0ZXhlcyBhbmQKKyAgIHN1Y2guICBJdCBkb2VzIG5vdCBydW4gYSBmdWxsIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgdGhlIGZpbGxpbmcgb2YKKyAgIHRoZSByYW5kb20gcG9vbCBjYW4gYmUgZGVsYXllZCB1bnRpbCBpdCBpcyBhY3R1YWxseSBuZWVkZWQuICBXZQorICAgYXNzdW1lIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlZm9yZSBhbnkgY29uY3VycmVudCBhY2Nlc3MKKyAgIGhhcHBlbnMuICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9iYXNpY3Modm9pZCkKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKyAgaW50IGVycjsKKworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIGVyciA9IGF0aF9tdXRleF9pbml0ICgmcG9vbF9sb2NrKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGxvZ19mYXRhbCAoImZhaWxlZCB0byBjcmVhdGUgdGhlIHBvb2wgbG9jazogJXNcbiIsIHN0cmVycm9yIChlcnIpICk7CisKKyNpZmRlZiBVU0VfUkFORE9NX0RBRU1PTgorICAgICAgX2djcnlfZGFlbW9uX2luaXRpYWxpemVfYmFzaWNzICgpOworI2VuZGlmIC8qVVNFX1JBTkRPTV9EQUVNT04qLworCisgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgc3RpbGwgdXNpbmcgdGhlIHZhbHVlcyB3ZSBoYXZlCisgICAgICAgICB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIHRoZSByYW5kb20gbGV2ZWxzLiAgKi8KKyAgICAgIGdjcnlfYXNzZXJ0IChHQ1JZX1dFQUtfUkFORE9NID09IDAKKyAgICAgICAgICAgICAgICAgICAmJiBHQ1JZX1NUUk9OR19SQU5ET00gPT0gMQorICAgICAgICAgICAgICAgICAgICYmIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NID09IDIpOworICAgIH0KK30KKworLyogVGFrZSB0aGUgcG9vbCBsb2NrLiAqLworc3RhdGljIHZvaWQKK2xvY2tfcG9vbCAodm9pZCkKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBhdGhfbXV0ZXhfbG9jayAoJnBvb2xfbG9jayk7CisgIGlmIChlcnIpCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIGFjcXVpcmUgdGhlIHBvb2wgbG9jazogJXNcbiIsIHN0cmVycm9yIChlcnIpKTsKKyAgcG9vbF9pc19sb2NrZWQgPSAxOworfQorCisvKiBSZWxlYXNlIHRoZSBwb29sIGxvY2suICovCitzdGF0aWMgdm9pZAordW5sb2NrX3Bvb2wgKHZvaWQpCit7CisgIGludCBlcnI7CisKKyAgcG9vbF9pc19sb2NrZWQgPSAwOworICBlcnIgPSBhdGhfbXV0ZXhfdW5sb2NrICgmcG9vbF9sb2NrKTsKKyAgaWYgKGVycikKKyAgICBsb2dfZmF0YWwgKCJmYWlsZWQgdG8gcmVsZWFzZSB0aGUgcG9vbCBsb2NrOiAlc1xuIiwgc3RyZXJyb3IgKGVycikpOworfQorCisKKy8qIEZ1bGwgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBtb2R1bGUuICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZSh2b2lkKQoreworICAvKiBBbHRob3VnaCB0aGUgYmFzaWMgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGhhdmUgaGFwcGVuZWQgYWxyZWFkeSwKKyAgICAgd2UgY2FsbCBpdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBwcmVyZXF1aXNpdGVzIGFyZSBtZXQuICAqLworICBpbml0aWFsaXplX2Jhc2ljcyAoKTsKKworICAvKiBOb3cgd2UgY2FuIGxvb2sgdGhlIHBvb2wgYW5kIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBpZgorICAgICBuZWNlc3NhcnkuICAqLworICBsb2NrX3Bvb2wgKCk7CisgIGlmICghcm5kcG9vbCkKKyAgICB7CisgICAgICAvKiBUaGUgZGF0YSBidWZmZXIgaXMgYWxsb2NhdGVkIHNvbWV3aGF0IGxhcmdlciwgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgIHVzZSB0aGlzIGV4dHJhIHNwYWNlICh3aGljaCBpcyBhbGxvY2F0ZWQgaW4gc2VjdXJlIG1lbW9yeSkgYXMKKyAgICAgICAgIGEgdGVtcG9yYXJ5IGhhc2ggYnVmZmVyICovCisgICAgICBybmRwb29sID0gKHNlY3VyZV9hbGxvYworICAgICAgICAgICAgICAgICA/IHhjYWxsb2Nfc2VjdXJlICgxLCBQT09MU0laRSArIEJMT0NLTEVOKQorICAgICAgICAgICAgICAgICA6IHhjYWxsb2MgKDEsIFBPT0xTSVpFICsgQkxPQ0tMRU4pKTsKKyAgICAgIGtleXBvb2wgPSAoc2VjdXJlX2FsbG9jCisgICAgICAgICAgICAgICAgID8geGNhbGxvY19zZWN1cmUgKDEsIFBPT0xTSVpFICsgQkxPQ0tMRU4pCisgICAgICAgICAgICAgICAgIDogeGNhbGxvYyAoMSwgUE9PTFNJWkUgKyBCTE9DS0xFTikpOworCisgICAgICAvKiBTZXR1cCB0aGUgc2xvdyBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbi4gIFRoZSBjb2RlIHJlcXVpcmVzCisgICAgICAgICB0aGF0IHRoaXMgZnVuY3Rpb24gZXhpc3RzLiAqLworICAgICAgc2xvd19nYXRoZXJfZm5jID0gZ2V0Zm5jX2dhdGhlcl9yYW5kb20gKCk7CisgICAgICBpZiAoIXNsb3dfZ2F0aGVyX2ZuYykKKyAgICAgICAgeworICAgICAgICAgIGZha2VkX3JuZyA9IDE7CisgICAgICAgICAgc2xvd19nYXRoZXJfZm5jID0gZ2F0aGVyX2Zha2VkOworCX0KKworICAgICAgLyogU2V0dXAgdGhlIGZhc3QgZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24uICAqLworICAgICAgZmFzdF9nYXRoZXJfZm5jID0gZ2V0Zm5jX2Zhc3RfcmFuZG9tX3BvbGwgKCk7CisKKyAgICB9CisgIHVubG9ja19wb29sICgpOworfQorCisKKworCisvKiBJbml0aWFsaXplIHRoaXMgcmFuZG9tIHN1YnN5c3RlbS4gIElmIEZVTEwgaXMgZmFsc2UsIHRoaXMgZnVuY3Rpb24KKyAgIG1lcmVseSBjYWxscyB0aGUgaW5pdGlhbGl6ZSBhbmQgZG9lcyBub3QgZG8gYW55dGhpbmcgbW9yZS4gIERvaW5nCisgICB0aGlzIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQgYnV0IHdoZW4gcnVubmluZyBpbiBhIHRocmVhZGVkCisgICBlbnZpcm9ubWVudCB3ZSBtaWdodCBnZXQgYSByYWNlIGNvbmRpdGlvbiBvdGhlcndpc2UuICovCit2b2lkCitfZ2NyeV9ybmdjc3BybmdfaW5pdGlhbGl6ZSAoaW50IGZ1bGwpCit7CisgIGlmICghZnVsbCkKKyAgICBpbml0aWFsaXplX2Jhc2ljcyAoKTsKKyAgZWxzZQorICAgIGluaXRpYWxpemUgKCk7Cit9CisKKworLyogVHJ5IHRvIGNsb3NlIHRoZSBGRHMgb2YgdGhlIHJhbmRvbSBnYXRoZXIgbW9kdWxlLiAgVGhpcyBpcworICAgY3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIHJuZGxpbnV4LiAqLwordm9pZAorX2djcnlfcm5nY3Nwcm5nX2Nsb3NlX2ZkcyAodm9pZCkKK3sKKyAgbG9ja19wb29sICgpOworI2lmIFVTRV9STkRMSU5VWAorICBfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tIChOVUxMLCAwLCAwLCAwKTsKKyAgcG9vbF9maWxsZWQgPSAwOyAvKiBGb3JjZSByZS1vcGVuIG9uIG5leHQgdXNlLiAgKi8KKyNlbmRpZgorICB1bmxvY2tfcG9vbCAoKTsKK30KKworCit2b2lkCitfZ2NyeV9ybmdjc3BybmdfZHVtcF9zdGF0cyAodm9pZCkKK3sKKyAgLyogSW4gdGhlb3J5IHdlIHdvdWxkIG5lZWQgdG8gbG9jayB0aGUgc3RhdHMgaGVyZS4gIEhvd2V2ZXIgdGhpcworICAgICBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBkdXJpbmcgY2xlYW51cCBhbmQgdGhlbiB3ZSBfbWlnaHRfIHJ1bgorICAgICBpbnRvIHByb2JsZW1zLiAgKi8KKworICBsb2dfaW5mbyAoInJhbmRvbSB1c2FnZTogcG9vbHNpemU9JWQgbWl4ZWQ9JWx1IHBvbGxzPSVsdS8lbHUgYWRkZWQ9JWx1LyVsdVxuIgorCSAgICAiICAgICAgICAgICAgICBvdXRtaXg9JWx1IGdldGx2bDE9JWx1LyVsdSBnZXRsdmwyPSVsdS8lbHUlc1xuIiwKKyAgICAgICAgICAgIFBPT0xTSVpFLCBybmRzdGF0cy5taXhybmQsIHJuZHN0YXRzLnNsb3dwb2xscywgcm5kc3RhdHMuZmFzdHBvbGxzLAorICAgICAgICAgICAgcm5kc3RhdHMubmFkZGJ5dGVzLCBybmRzdGF0cy5hZGRieXRlcywKKyAgICAgICAgICAgIHJuZHN0YXRzLm1peGtleSwgcm5kc3RhdHMubmdldGJ5dGVzMSwgcm5kc3RhdHMuZ2V0Ynl0ZXMxLAorICAgICAgICAgICAgcm5kc3RhdHMubmdldGJ5dGVzMiwgcm5kc3RhdHMuZ2V0Ynl0ZXMyLAorICAgICAgICAgICAgX2djcnlfcm5kaHdfZmFpbGVkX3AoKT8gIiAoaHdybmcgZmFpbGVkKSI6IiIpOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGJlZm9yZQorICAgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBtb2R1bGUgdG8gcGxhY2UgdGhlIHJhbmRvbSBwb29scyBpbnRvIHNlY3VyZQorICAgbWVtb3J5LiAgKi8KK3ZvaWQKK19nY3J5X3JuZ2NzcHJuZ19zZWN1cmVfYWxsb2MgKHZvaWQpCit7CisgIHNlY3VyZV9hbGxvYyA9IDE7Cit9CisKKworLyogVGhpcyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBmdWxsIGluaXRpYWxpemF0aW9uIHRvIGRlZ3JhZGUgdGhlCisgICBxdWFsaXR5IG9mIHRoZSBSTkcgZm9yIHRoZSBzYWtlIG9mIGEgZmFzdGVyIHJ1bm5pbmcgdGVzdCBzdWl0ZS4gICovCit2b2lkCitfZ2NyeV9ybmdjc3BybmdfZW5hYmxlX3F1aWNrX2dlbiAodm9pZCkKK3sKKyAgcXVpY2tfdGVzdCA9IDE7Cit9CisKKwordm9pZAorX2djcnlfcm5nY3Nwcm5nX3NldF9kYWVtb25fc29ja2V0IChjb25zdCBjaGFyICpzb2NrZXRuYW1lKQoreworI2lmZGVmIFVTRV9SQU5ET01fREFFTU9OCisgIGlmIChkYWVtb25fc29ja2V0X25hbWUpCisgICAgQlVHICgpOworCisgIGRhZW1vbl9zb2NrZXRfbmFtZSA9IGdjcnlfeHN0cmR1cCAoc29ja2V0bmFtZSk7CisjZWxzZSAvKiFVU0VfUkFORE9NX0RBRU1PTiovCisgICh2b2lkKXNvY2tldG5hbWU7CisjZW5kaWYgLyohVVNFX1JBTkRPTV9EQUVNT04qLworfQorCisvKiBXaXRoIE9OT0ZGIHNldCB0byAxLCBlbmFibGUgdGhlIHVzZSBvZiB0aGUgZGFlbW9uLiAgV2l0aCBPTk9GRiBzZXQKKyAgIHRvIDAsIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgZGFlbW9uLiAgV2l0aCBPTk9GIHNldCB0byAtMSwgcmV0dXJuCisgICB3aGV0aGVyIHRoZSBkYWVtb24gaGFzIGJlZW4gZW5hYmxlZC4gKi8KK2ludAorX2djcnlfcm5nY3Nwcm5nX3VzZV9kYWVtb24gKGludCBvbm9mZikKK3sKKyNpZmRlZiBVU0VfUkFORE9NX0RBRU1PTgorICBpbnQgbGFzdDsKKworICAvKiBUaGlzIGlzIG5vdCByZWFsbHkgdGhyZWFkIHNhZmUuICBIb3dldmVyIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcworICAgICBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBhdCB0aGF0IHBvaW50CisgICAgIHdlIGFyZSBmb3Igb3RoZXIgcmVhc29ucyBub3QgcmVhbGx5IHRocmVhZCBzYWZlLiAgV2UgZG8gbm90IHdhbnQKKyAgICAgdG8gbG9jayBpdCBiZWNhdXNlIHdlIG1pZ2h0IGV2ZW50dWFsbHkgZGVjaWRlIHRoYXQgdGhpcyBmdW5jdGlvbgorICAgICBtYXkgZXZlbiBiZSBjYWxsZWQgcHJpb3IgdG8gZ2NyeV9jaGVja192ZXJzaW9uLiAgKi8KKyAgbGFzdCA9IGFsbG93X2RhZW1vbjsKKyAgaWYgKG9ub2ZmICE9IC0xKQorICAgIGFsbG93X2RhZW1vbiA9IG9ub2ZmOworCisgIHJldHVybiBsYXN0OworI2Vsc2UgLyohVVNFX1JBTkRPTV9EQUVNT04qLworICAodm9pZClvbm9mZjsKKyAgcmV0dXJuIDA7CisjZW5kaWYgLyohVVNFX1JBTkRPTV9EQUVNT04qLworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIG5vIHJlYWwgUk5HIGlzIGF2YWlsYWJsZSBvciB0aGUKKyAgIHF1YWxpdHkgb2YgdGhlIFJORyBoYXMgYmVlbiBkZWdyYWRlZCBmb3IgdGVzdCBwdXJwb3Nlcy4gICovCitpbnQKK19nY3J5X3JuZ2NzcHJuZ19pc19mYWtlZCAodm9pZCkKK3sKKyAgLyogV2UgbmVlZCB0byBpbml0aWFsaXplIGR1ZSB0byB0aGUgcnVudGltZSBkZXRlcm1pbmF0aW9uIG9mCisgICAgIGF2YWlsYWJsZSBlbnRyb3B5IGdhdGhlciBtb2R1bGVzLiAgKi8KKyAgaW5pdGlhbGl6ZSgpOworICByZXR1cm4gKGZha2VkX3JuZyB8fCBxdWlja190ZXN0KTsKK30KKworCisvKiBBZGQgQlVGTEVOIGJ5dGVzIGZyb20gQlVGIHRvIHRoZSBpbnRlcm5hbCByYW5kb20gcG9vbC4gIFFVQUxJVFkKKyAgIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMC4uMTAwIHRvIGluZGljYXRlIHRoZSBnb29kbmVzcyBvZiB0aGUKKyAgIGVudHJvcHkgYWRkZWQsIG9yIC0xIGZvciBnb29kbmVzcyBub3Qga25vd24uICAqLworZ2NyeV9lcnJvcl90CitfZ2NyeV9ybmdjc3BybmdfYWRkX2J5dGVzIChjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIGludCBxdWFsaXR5KQoreworICBzaXplX3QgbmJ5dGVzOworICBjb25zdCBjaGFyICpidWZwdHI7CisKKyAgaWYgKHF1YWxpdHkgPT0gLTEpCisgICAgcXVhbGl0eSA9IDM1OworICBlbHNlIGlmIChxdWFsaXR5ID4gMTAwKQorICAgIHF1YWxpdHkgPSAxMDA7CisgIGVsc2UgaWYgKHF1YWxpdHkgPCAwKQorICAgIHF1YWxpdHkgPSAwOworCisgIGlmICghYnVmKQorICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0FSRyk7CisKKyAgaWYgKCFidWZsZW4gfHwgcXVhbGl0eSA8IDEwKQorICAgIHJldHVybiAwOyAvKiBUYWtlIGEgc2hvcnRjdXQuICovCisKKyAgLyogQmVjYXVzZSB3ZSBkb24ndCBpbmNyZW1lbnQgdGhlIGVudHJvcHkgZXN0aW1hdGlvbiB3aXRoIEZBU1RQT0xMLAorICAgICB3ZSBkb24ndCBuZWVkIHRvIHRha2UgbG9jayB0aGF0IGVzdGltYXRpb24gd2hpbGUgYWRkaW5nIGZyb20gYW4KKyAgICAgZXh0ZXJuYWwgc291cmNlLiAgVGhpcyBsaW1pdGVkIGVudHJvcHkgZXN0aW1hdGlvbiBhbHNvIG1lYW5zIHRoYXQKKyAgICAgd2UgY2FuJ3QgdGFrZSBRVUFMSVRZIGludG8gYWNjb3VudC4gICovCisgIGluaXRpYWxpemVfYmFzaWNzICgpOworICBidWZwdHIgPSBidWY7CisgIHdoaWxlIChidWZsZW4pCisgICAgeworICAgICAgbmJ5dGVzID0gYnVmbGVuID4gUE9PTFNJWkU/IFBPT0xTSVpFIDogYnVmbGVuOworICAgICAgbG9ja19wb29sICgpOworICAgICAgaWYgKHJuZHBvb2wpCisgICAgICAgIGFkZF9yYW5kb21uZXNzIChidWZwdHIsIG5ieXRlcywgUkFORE9NX09SSUdJTl9FWFRFUk5BTCk7CisgICAgICB1bmxvY2tfcG9vbCAoKTsKKyAgICAgIGJ1ZnB0ciArPSBuYnl0ZXM7CisgICAgICBidWZsZW4gLT0gbmJ5dGVzOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9uIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIExFTkdUSCBieXRlcyBvZgorICAgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIHJhbmRvbSBieXRlcy4gIExldmVsIEdDUllfV0VBS19SQU5ET00gaXMKKyAgIG5vdCB2ZXJ5IHN0cm9uZywgR0NSWV9TVFJPTkdfUkFORE9NIGlzIHN0cm9uZyBlbm91Z2ggZm9yIG1vc3QKKyAgIHVzYWdlLCBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSBpcyBnb29kIGZvciBrZXkgZ2VuZXJhdGlvbiBzdHVmZiBidXQKKyAgIG1heSBiZSB2ZXJ5IHNsb3cuICAqLwordm9pZAorX2djcnlfcm5nY3Nwcm5nX3JhbmRvbWl6ZSAodm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICAvKiBNYWtlIHN1cmUgd2UgYXJlIGluaXRpYWxpemVkLiAqLworICBpbml0aWFsaXplICgpOworCisgIC8qIEhhbmRsZSBvdXIgaGFjayB1c2VkIGZvciByZWdyZXNzaW9uIHRlc3RzIG9mIExpYmdjcnlwdC4gKi8KKyAgaWYgKCBxdWlja190ZXN0ICYmIGxldmVsID4gR0NSWV9TVFJPTkdfUkFORE9NICkKKyAgICBsZXZlbCA9IEdDUllfU1RST05HX1JBTkRPTTsKKworICAvKiBNYWtlIHN1cmUgdGhlIGxldmVsIGlzIG9rYXkuICovCisgIGxldmVsICY9IDM7CisKKyNpZmRlZiBVU0VfUkFORE9NX0RBRU1PTgorICBpZiAoYWxsb3dfZGFlbW9uCisgICAgICAmJiAhX2djcnlfZGFlbW9uX3JhbmRvbWl6ZSAoZGFlbW9uX3NvY2tldF9uYW1lLCBidWZmZXIsIGxlbmd0aCwgbGV2ZWwpKQorICAgIHJldHVybjsgLyogVGhlIGRhZW1vbiBzdWNjZWVkZWQuICovCisgIGFsbG93X2RhZW1vbiA9IDA7IC8qIERhZW1vbiBmYWlsZWQgLSBzd2l0Y2ggb2ZmLiAqLworI2VuZGlmIC8qVVNFX1JBTkRPTV9EQUVNT04qLworCisgIC8qIEFjcXVpcmUgdGhlIHBvb2wgbG9jay4gKi8KKyAgbG9ja19wb29sICgpOworCisgIC8qIFVwZGF0ZSB0aGUgc3RhdGlzdGljcy4gKi8KKyAgaWYgKGxldmVsID49IEdDUllfVkVSWV9TVFJPTkdfUkFORE9NKQorICAgIHsKKyAgICAgIHJuZHN0YXRzLmdldGJ5dGVzMiArPSBsZW5ndGg7CisgICAgICBybmRzdGF0cy5uZ2V0Ynl0ZXMyKys7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcm5kc3RhdHMuZ2V0Ynl0ZXMxICs9IGxlbmd0aDsKKyAgICAgIHJuZHN0YXRzLm5nZXRieXRlczErKzsKKyAgICB9CisKKyAgLyogUmVhZCB0aGUgcmFuZG9tIGludG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4gKi8KKyAgZm9yIChwID0gYnVmZmVyOyBsZW5ndGggPiAwOykKKyAgICB7CisgICAgICBzaXplX3QgbjsKKworICAgICAgbiA9IGxlbmd0aCA+IFBPT0xTSVpFPyBQT09MU0laRSA6IGxlbmd0aDsKKyAgICAgIHJlYWRfcG9vbCAocCwgbiwgbGV2ZWwpOworICAgICAgbGVuZ3RoIC09IG47CisgICAgICBwICs9IG47CisgICAgfQorCisgIC8qIFJlbGVhc2UgdGhlIHBvb2wgbG9jay4gKi8KKyAgdW5sb2NrX3Bvb2wgKCk7Cit9CisKKworCisKKy8qCisgICBNaXggdGhlIHBvb2w6CisKKyAgIHwuLi4uLi4uLmJsb2NrcyoyMGJ5dGUuLi4uLi4uLnwyMGJ5dGV8Li40NGJ5dGUuLnwKKyAgIDwuLjQ0Ynl0ZS4uPiAgICAgICAgICAgPDIwYnl0ZT4KKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICArLS0tLS0tKworICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgIHYKKyAgIHwuLi4uLi4uLmJsb2NrcyoyMGJ5dGUuLi4uLi4uLnwyMGJ5dGV8Li40NGJ5dGUuLnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwuLi4uLjY0Ynl0ZXMuLi4uLj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIEhhc2gKKyAgICAgIHYKKyAgIHwuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnwyMGJ5dGV8Li40NGJ5dGUuLnwKKyAgIDwyMGJ5dGU+PDIwYnl0ZT48Li40NGJ5dGUuLj4KKyAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgdgorICAgfC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufDIwYnl0ZXwuLjQ0Ynl0ZS4ufAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC4uLi4uNjRieXRlLi4uLi4uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgSGFzaAorICAgICAgICAgICAgICB2CisgICB8Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58MjBieXRlfC4uNDRieXRlLi58CisgICA8MjBieXRlPjwyMGJ5dGU+PC4uNDRieXRlLi4+CisKKyAgIGFuZCBzbyBvbiB1bnRpbCB3ZSBkaWQgdGhpcyBmb3IgYWxsIGJsb2Nrcy4KKworICAgVG8gYmV0dGVyIHByb3RlY3QgYWdhaW5zdCBpbXBsZW1lbnRhdGlvbiBlcnJvcnMgaW4gdGhpcyBjb2RlLCB3ZQorICAgeG9yIGEgZGlnZXN0IG9mIHRoZSBlbnRpcmUgcG9vbCBpbnRvIHRoZSBwb29sIGJlZm9yZSBtaXhpbmcuCisKKyAgIE5vdGU6IHRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9ja2VkIHBvb2wuCisgKi8KK3N0YXRpYyB2b2lkCittaXhfcG9vbCh1bnNpZ25lZCBjaGFyICpwb29sKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciBmYWlsc2FmZV9kaWdlc3RbRElHRVNUTEVOXTsKKyAgc3RhdGljIGludCBmYWlsc2FmZV9kaWdlc3RfdmFsaWQ7CisKKyAgdW5zaWduZWQgY2hhciAqaGFzaGJ1ZiA9IHBvb2wgKyBQT09MU0laRTsKKyAgdW5zaWduZWQgY2hhciAqcCwgKnBlbmQ7CisgIGludCBpLCBuOworICBSTUQxNjBfQ09OVEVYVCBtZDsKKworI2lmIERJR0VTVExFTiAhPSAyMAorI2Vycm9yIG11c3QgaGF2ZSBhIGRpZ2VzdCBsZW5ndGggb2YgMjAgZm9yIHJpcGUtbWQtMTYwCisjZW5kaWYKKworICBnY3J5X2Fzc2VydCAocG9vbF9pc19sb2NrZWQpOworICBfZ2NyeV9ybWQxNjBfaW5pdCggJm1kICk7CisKKyAgLyogTG9vcCBvdmVyIHRoZSBwb29sLiAgKi8KKyAgcGVuZCA9IHBvb2wgKyBQT09MU0laRTsKKyAgbWVtY3B5KGhhc2hidWYsIHBlbmQgLSBESUdFU1RMRU4sIERJR0VTVExFTiApOworICBtZW1jcHkoaGFzaGJ1ZitESUdFU1RMRU4sIHBvb2wsIEJMT0NLTEVOLURJR0VTVExFTik7CisgIF9nY3J5X3JtZDE2MF9taXhibG9jayggJm1kLCBoYXNoYnVmKTsKKyAgbWVtY3B5KHBvb2wsIGhhc2hidWYsIDIwICk7CisKKyAgaWYgKGZhaWxzYWZlX2RpZ2VzdF92YWxpZCAmJiBwb29sID09IHJuZHBvb2wpCisgICAgeworICAgICAgZm9yIChpPTA7IGkgPCAyMDsgaSsrKQorICAgICAgICBwb29sW2ldIF49IGZhaWxzYWZlX2RpZ2VzdFtpXTsKKyAgICB9CisKKyAgcCA9IHBvb2w7CisgIGZvciAobj0xOyBuIDwgUE9PTEJMT0NLUzsgbisrKQorICAgIHsKKyAgICAgIG1lbWNweSAoaGFzaGJ1ZiwgcCwgRElHRVNUTEVOKTsKKworICAgICAgcCArPSBESUdFU1RMRU47CisgICAgICBpZiAocCtESUdFU1RMRU4rQkxPQ0tMRU4gPCBwZW5kKQorICAgICAgICBtZW1jcHkgKGhhc2hidWYrRElHRVNUTEVOLCBwK0RJR0VTVExFTiwgQkxPQ0tMRU4tRElHRVNUTEVOKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBwID0gcCArIERJR0VTVExFTjsKKworICAgICAgICAgIGZvciAoaT1ESUdFU1RMRU47IGkgPCBCTE9DS0xFTjsgaSsrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBwcCA+PSBwZW5kICkKKyAgICAgICAgICAgICAgICBwcCA9IHBvb2w7CisgICAgICAgICAgICAgIGhhc2hidWZbaV0gPSAqcHArKzsKKwkgICAgfQorCX0KKworICAgICAgX2djcnlfcm1kMTYwX21peGJsb2NrICggJm1kLCBoYXNoYnVmKTsKKyAgICAgIG1lbWNweShwLCBoYXNoYnVmLCAyMCApOworICAgIH0KKworICAgIC8qIE91ciBoYXNoIGltcGxlbWVudGF0aW9uIGRvZXMgb25seSBsZWF2ZSBzbWFsbCBwYXJ0cyAoNjQgYnl0ZXMpCisgICAgICAgb2YgdGhlIHBvb2wgb24gdGhlIHN0YWNrLCBzbyBpdCBpcyBva2F5IG5vdCB0byByZXF1aXJlIHNlY3VyZQorICAgICAgIG1lbW9yeSBoZXJlLiAgQmVmb3JlIHdlIHVzZSB0aGlzIHBvb2wsIGl0IHdpbGwgYmUgY29waWVkIHRvIHRoZQorICAgICAgIGhlbHAgYnVmZmVyIGFueXdheS4gKi8KKyAgICBpZiAoIHBvb2wgPT0gcm5kcG9vbCkKKyAgICAgIHsKKyAgICAgICAgX2djcnlfcm1kMTYwX2hhc2hfYnVmZmVyIChmYWlsc2FmZV9kaWdlc3QsIHBvb2wsIFBPT0xTSVpFKTsKKyAgICAgICAgZmFpbHNhZmVfZGlnZXN0X3ZhbGlkID0gMTsKKyAgICAgIH0KKworICAgIF9nY3J5X2J1cm5fc3RhY2sgKDM4NCk7IC8qIGZvciB0aGUgcm1kMTYwX21peGJsb2NrKCksIHJtZDE2MF9oYXNoX2J1ZmZlciAqLworfQorCisKK3ZvaWQKK19nY3J5X3JuZ2NzcHJuZ19zZXRfc2VlZF9maWxlIChjb25zdCBjaGFyICpuYW1lKQoreworICBpZiAoc2VlZF9maWxlX25hbWUpCisgICAgQlVHICgpOworICBzZWVkX2ZpbGVfbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworfQorCisKKy8qIExvY2sgYW4gb3BlbiBmaWxlIGlkZW50aWZpZWQgYnkgZmlsZSBkZXNjcmlwdG9yIEZEIGFuZCB3YWl0IGEKKyAgIHJlYXNvbmFibGUgdGltZSB0byBzdWNjZWVkLiAgV2l0aCBGT1JfV1JJVEUgc2V0IHRvIHRydWUgYSB3cml0ZQorICAgbG9jayB3aWxsIGJlIHRha2VuLiAgRk5BTUUgaXMgdXNlZCBvbmx5IGZvciBkaWFnbm9zdGljcy4gUmV0dXJucyAwCisgICBvbiBzdWNjZXNzIG9yIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbG9ja19zZWVkX2ZpbGUgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIGludCBmb3Jfd3JpdGUpCit7CisjaWZkZWYgX19HQ0NfXworI3dhcm5pbmcgQ2hlY2sgd2hldGhlciB3ZSBjYW4gbG9jayBvbiBXaW5kb3dzLgorI2VuZGlmCisjaWYgTE9DS19TRUVEX0ZJTEUKKyAgc3RydWN0IGZsb2NrIGxjazsKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIGludCBiYWNrb2ZmPTA7CisKKyAgLyogV2UgdGFrZSBhIGxvY2sgb24gdGhlIGVudGlyZSBmaWxlLiAqLworICBtZW1zZXQgKCZsY2ssIDAsIHNpemVvZiBsY2spOworICBsY2subF90eXBlID0gZm9yX3dyaXRlPyBGX1dSTENLIDogRl9SRExDSzsKKyAgbGNrLmxfd2hlbmNlID0gU0VFS19TRVQ7CisKKyAgd2hpbGUgKGZjbnRsIChmZCwgRl9TRVRMSywgJmxjaykgPT0gLTEpCisgICAgeworICAgICAgaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFQUNDRVMpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfaW5mbyAoXygiY2FuJ3QgbG9jayBgJXMnOiAlc1xuIiksIGZuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgaWYgKGJhY2tvZmYgPiAyKSAvKiBTaG93IHRoZSBmaXJzdCBtZXNzYWdlIGFmdGVyIH4yLjI1IHNlY29uZHMuICovCisgICAgICAgIGxvZ19pbmZvKCBfKCJ3YWl0aW5nIGZvciBsb2NrIG9uIGAlcycuLi5cbiIpLCBmbmFtZSk7CisKKyAgICAgIHR2LnR2X3NlYyA9IGJhY2tvZmY7CisgICAgICB0di50dl91c2VjID0gMjUwMDAwOworICAgICAgc2VsZWN0ICgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgaWYgKGJhY2tvZmYgPCAxMCkKKyAgICAgICAgYmFja29mZisrIDsKKyAgICB9CisjZW5kaWYgLyohTE9DS19TRUVEX0ZJTEUqLworICByZXR1cm4gMDsKK30KKworCisvKiBSZWFkIGluIGEgc2VlZCBmcm9tIHRoZSByYW5kb21fc2VlZCBmaWxlIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGlzCisgICB3YXMgc3VjY2Vzc2Z1bC4KKworICAgTm90ZTogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIGFwcGxpY2F0aW9ucyBzaGFyaW5nIHRoZSBzYW1lIHJhbmRvbQorICAgc2VlZCBmaWxlIGNhbiBiZSBzdGFydGVkIGluIHBhcmFsbGVsLCBpbiB3aGljaCBjYXNlIHRoZXkgd2lsbCByZWFkCisgICBvdXQgdGhlIHNhbWUgcG9vbCBhbmQgdGhlbiByYWNlIGZvciB1cGRhdGluZyBpdCAodGhlIGxhc3QgdXBkYXRlCisgICBvdmVyd3JpdGVzIGVhcmxpZXIgdXBkYXRlcykuICBUaGV5IHdpbGwgZGlmZmVyZW50aWF0ZSBvbmx5IGJ5IHRoZQorICAgd2VhayBlbnRyb3B5IHRoYXQgaXMgYWRkZWQgaW4gcmVhZF9zZWVkX2ZpbGUgYmFzZWQgb24gdGhlIFBJRCBhbmQKKyAgIGNsb2NrLCBhbmQgdXAgdG8gMTYgYnl0ZXMgb2Ygd2VhayByYW5kb20gbm9uLWJsb2NraW5nbHkuICBUaGUKKyAgIGNvbnNlcXVlbmNlIGlzIHRoYXQgdGhlIG91dHB1dCBvZiB0aGVzZSBkaWZmZXJlbnQgaW5zdGFuY2VzIGlzCisgICBjb3JyZWxhdGVkIHRvIHNvbWUgZXh0ZW50LiAgSW4gdGhlIHBlcmZlY3Qgc2NlbmFyaW8sIHRoZSBhdHRhY2tlcgorICAgY2FuIGNvbnRyb2wgKG9yIGF0IGxlYXN0IGd1ZXNzKSB0aGUgUElEIGFuZCBjbG9jayBvZiB0aGUKKyAgIGFwcGxpY2F0aW9uLCBhbmQgZHJhaW4gdGhlIHN5c3RlbSdzIGVudHJvcHkgcG9vbCB0byByZWR1Y2UgdGhlICJ1cAorICAgdG8gMTYgYnl0ZXMiIGFib3ZlIHRvIDAuICBUaGVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGluaXRpYWwKKyAgIHN0YXRlcyBvZiB0aGUgcG9vbHMgYXJlIGNvbXBsZXRlbHkga25vd24uICAqLworc3RhdGljIGludAorcmVhZF9zZWVkX2ZpbGUgKHZvaWQpCit7CisgIGludCBmZDsKKyAgc3RydWN0IHN0YXQgc2I7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW1BPT0xTSVpFXTsKKyAgaW50IG47CisKKyAgZ2NyeV9hc3NlcnQgKHBvb2xfaXNfbG9ja2VkKTsKKworICBpZiAoIXNlZWRfZmlsZV9uYW1lKQorICAgIHJldHVybiAwOworCisjaWZkZWYgSEFWRV9ET1NJU0hfU1lTVEVNCisgIGZkID0gb3Blbiggc2VlZF9maWxlX25hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlkgKTsKKyNlbHNlCisgIGZkID0gb3Blbiggc2VlZF9maWxlX25hbWUsIE9fUkRPTkxZICk7CisjZW5kaWYKKyAgaWYoIGZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICB7CisgICAgICBhbGxvd19zZWVkX2ZpbGVfdXBkYXRlID0gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAoZmQgPT0gLTEgKQorICAgIHsKKyAgICAgIGxvZ19pbmZvKF8oImNhbid0IG9wZW4gYCVzJzogJXNcbiIpLCBzZWVkX2ZpbGVfbmFtZSwgc3RyZXJyb3IoZXJybm8pICk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGlmIChsb2NrX3NlZWRfZmlsZSAoZmQsIHNlZWRfZmlsZV9uYW1lLCAwKSkKKyAgICB7CisgICAgICBjbG9zZSAoZmQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBpZiAoZnN0YXQoIGZkLCAmc2IgKSApCisgICAgeworICAgICAgbG9nX2luZm8oXygiY2FuJ3Qgc3RhdCBgJXMnOiAlc1xuIiksIHNlZWRfZmlsZV9uYW1lLCBzdHJlcnJvcihlcnJubykgKTsKKyAgICAgIGNsb3NlKGZkKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgaWYgKCFTX0lTUkVHKHNiLnN0X21vZGUpICkKKyAgICB7CisgICAgICBsb2dfaW5mbyhfKCJgJXMnIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSAtIGlnbm9yZWRcbiIpLCBzZWVkX2ZpbGVfbmFtZSApOworICAgICAgY2xvc2UoZmQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBpZiAoIXNiLnN0X3NpemUgKQorICAgIHsKKyAgICAgIGxvZ19pbmZvKF8oIm5vdGU6IHJhbmRvbV9zZWVkIGZpbGUgaXMgZW1wdHlcbiIpICk7CisgICAgICBjbG9zZShmZCk7CisgICAgICBhbGxvd19zZWVkX2ZpbGVfdXBkYXRlID0gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgaWYgKHNiLnN0X3NpemUgIT0gUE9PTFNJWkUgKQorICAgIHsKKyAgICAgIGxvZ19pbmZvKF8oIndhcm5pbmc6IGludmFsaWQgc2l6ZSBvZiByYW5kb21fc2VlZCBmaWxlIC0gbm90IHVzZWRcbiIpICk7CisgICAgICBjbG9zZShmZCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgZG8KKyAgICB7CisgICAgICBuID0gcmVhZCggZmQsIGJ1ZmZlciwgUE9PTFNJWkUgKTsKKyAgICB9CisgIHdoaWxlIChuID09IC0xICYmIGVycm5vID09IEVJTlRSICk7CisKKyAgaWYgKG4gIT0gUE9PTFNJWkUpCisgICAgeworICAgICAgbG9nX2ZhdGFsKF8oImNhbid0IHJlYWQgYCVzJzogJXNcbiIpLCBzZWVkX2ZpbGVfbmFtZSxzdHJlcnJvcihlcnJubykgKTsKKyAgICAgIGNsb3NlKGZkKTsvKk5PVFJFQUNIRUQqLworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGNsb3NlKGZkKTsKKworICBhZGRfcmFuZG9tbmVzcyggYnVmZmVyLCBQT09MU0laRSwgUkFORE9NX09SSUdJTl9JTklUICk7CisgIC8qIGFkZCBzb21lIG1pbm9yIGVudHJvcHkgdG8gdGhlIHBvb2wgbm93ICh0aGlzIHdpbGwgYWxzbyBmb3JjZSBhIG1peGluZykgKi8KKyAgeworICAgIHBpZF90IHggPSBnZXRwaWQoKTsKKyAgICBhZGRfcmFuZG9tbmVzcyggJngsIHNpemVvZih4KSwgUkFORE9NX09SSUdJTl9JTklUICk7CisgIH0KKyAgeworICAgIHRpbWVfdCB4ID0gdGltZShOVUxMKTsKKyAgICBhZGRfcmFuZG9tbmVzcyggJngsIHNpemVvZih4KSwgUkFORE9NX09SSUdJTl9JTklUICk7CisgIH0KKyAgeworICAgIGNsb2NrX3QgeCA9IGNsb2NrKCk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZ4LCBzaXplb2YoeCksIFJBTkRPTV9PUklHSU5fSU5JVCApOworICB9CisKKyAgLyogQW5kIHJlYWQgYSBmZXcgYnl0ZXMgZnJvbSBvdXIgZW50cm9weSBzb3VyY2UuICBCeSB1c2luZyBhIGxldmVsCisgICAqIG9mIDAgdGhpcyB3aWxsIG5vdCBibG9jayBhbmQgbWlnaHQgbm90IHJldHVybiBhbnl0aGluZyB3aXRoIHNvbWUKKyAgICogZW50cm9weSBkcml2ZXJzLCBob3dldmVyIHRoZSBybmRsaW51eCBkcml2ZXIgd2lsbCB1c2UKKyAgICogL2Rldi91cmFuZG9tIGFuZCByZXR1cm4gc29tZSBzdHVmZiAtIERvIG5vdCByZWFkIHRvbyBtdWNoIGFzIHdlCisgICAqIHdhbnQgdG8gYmUgZnJpZW5kbHkgdG8gdGhlIHNjYXJlIHN5c3RlbSBlbnRyb3B5IHJlc291cmNlLiAqLworICByZWFkX3JhbmRvbV9zb3VyY2UgKCBSQU5ET01fT1JJR0lOX0lOSVQsIDE2LCBHQ1JZX1dFQUtfUkFORE9NICk7CisKKyAgYWxsb3dfc2VlZF9maWxlX3VwZGF0ZSA9IDE7CisgIHJldHVybiAxOworfQorCisKK3ZvaWQKK19nY3J5X3JuZ2NzcHJuZ191cGRhdGVfc2VlZF9maWxlICh2b2lkKQoreworICB1bnNpZ25lZCBsb25nICpzcCwgKmRwOworICBpbnQgZmQsIGk7CisKKyAgLyogV2UgZG8gb25seSBhIGJhc2ljIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgd2UgY2FuIGxvY2sgdGhlIHBvb2wuCisgICAgIFRoaXMgaXMgcmVxdWlyZWQgdG8gY29wZSB3aXRoIHRoZSBjYXNlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcworICAgICBjYWxsZWQgYnkgc29tZSBjbGVhbnVwIGNvZGUgYXQgYSBwb2ludCB3aGVyZSB0aGUgUk5HIGhhcyBuZXZlcgorICAgICBiZWVuIGluaXRpYWxpemVkLiAgKi8KKyAgaW5pdGlhbGl6ZV9iYXNpY3MgKCk7CisgIGxvY2tfcG9vbCAoKTsKKworICBpZiAoICFzZWVkX2ZpbGVfbmFtZSB8fCAhcm5kcG9vbCB8fCAhcG9vbF9maWxsZWQgKQorICAgIHsKKyAgICAgIHVubG9ja19wb29sICgpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKCAhYWxsb3dfc2VlZF9maWxlX3VwZGF0ZSApCisgICAgeworICAgICAgdW5sb2NrX3Bvb2wgKCk7CisgICAgICBsb2dfaW5mbyhfKCJub3RlOiByYW5kb21fc2VlZCBmaWxlIG5vdCB1cGRhdGVkXG4iKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGUgcG9vbCBhbmQKKyAgICAgdGh1cyB3ZSBjYW4gY29uY2x1ZGUgdGhhdCB0aGUgcG9vbCBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZC4gICovCisKKworICAvKiBDb3B5IHRoZSBlbnRyb3B5IHBvb2wgdG8gYSBzY3JhdGNoIHBvb2wgYW5kIG1peCBib3RoIG9mIHRoZW0uICovCisgIGZvciAoaT0wLGRwPSh1bnNpZ25lZCBsb25nKilrZXlwb29sLCBzcD0odW5zaWduZWQgbG9uZyopcm5kcG9vbDsKKyAgICAgICBpIDwgUE9PTFdPUkRTOyBpKyssIGRwKyssIHNwKysgKQorICAgIHsKKyAgICAgICpkcCA9ICpzcCArIEFERF9WQUxVRTsKKyAgICB9CisgIG1peF9wb29sKHJuZHBvb2wpOyBybmRzdGF0cy5taXhybmQrKzsKKyAgbWl4X3Bvb2woa2V5cG9vbCk7IHJuZHN0YXRzLm1peGtleSsrOworCisjaWYgZGVmaW5lZChIQVZFX0RPU0lTSF9TWVNURU0pIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyAgZmQgPSBvcGVuIChzZWVkX2ZpbGVfbmFtZSwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DfE9fQklOQVJZLAorICAgICAgICAgICAgIFNfSVJVU1J8U19JV1VTUiApOworI2Vsc2UKKyMgaWYgTE9DS19TRUVEX0ZJTEUKKyAgICBmZCA9IG9wZW4gKHNlZWRfZmlsZV9uYW1lLCBPX1dST05MWXxPX0NSRUFULCBTX0lSVVNSfFNfSVdVU1IgKTsKKyMgZWxzZQorICAgIGZkID0gb3BlbiAoc2VlZF9maWxlX25hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgU19JUlVTUnxTX0lXVVNSICk7CisjIGVuZGlmCisjZW5kaWYKKworICBpZiAoZmQgPT0gLTEgKQorICAgIGxvZ19pbmZvIChfKCJjYW4ndCBjcmVhdGUgYCVzJzogJXNcbiIpLCBzZWVkX2ZpbGVfbmFtZSwgc3RyZXJyb3IoZXJybm8pICk7CisgIGVsc2UgaWYgKGxvY2tfc2VlZF9maWxlIChmZCwgc2VlZF9maWxlX25hbWUsIDEpKQorICAgIHsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgfQorI2lmIExPQ0tfU0VFRF9GSUxFCisgIGVsc2UgaWYgKGZ0cnVuY2F0ZSAoZmQsIDApKQorICAgIHsKKyAgICAgIGxvZ19pbmZvKF8oImNhbid0IHdyaXRlIGAlcyc6ICVzXG4iKSwgc2VlZF9maWxlX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBjbG9zZSAoZmQpOworICAgIH0KKyNlbmRpZiAvKkxPQ0tfU0VFRF9GSUxFKi8KKyAgZWxzZQorICAgIHsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBpID0gd3JpdGUgKGZkLCBrZXlwb29sLCBQT09MU0laRSApOworICAgICAgICB9CisgICAgICB3aGlsZSAoaSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICBpZiAoaSAhPSBQT09MU0laRSkKKyAgICAgICAgbG9nX2luZm8gKF8oImNhbid0IHdyaXRlIGAlcyc6ICVzXG4iKSxzZWVkX2ZpbGVfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIGlmIChjbG9zZShmZCkpCisgICAgICAgIGxvZ19pbmZvIChfKCJjYW4ndCBjbG9zZSBgJXMnOiAlc1xuIiksc2VlZF9maWxlX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorCisgIHVubG9ja19wb29sICgpOworfQorCisKKy8qIFJlYWQgcmFuZG9tIG91dCBvZiB0aGUgcG9vbC4gIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhlCisgICBwdWJsaWMgcmFuZG9tIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBMZXZlbCBHQ1JZX1dFQUtfUkFORE9NIGlzIG5vdAorICAgYW55bW9yZSBoYW5kbGVkIHNwZWNpYWwgYW5kIGluIGZhY3QgaXMgYW4gYWxpYXMgaW4gdGhlIEFQSSBmb3IKKyAgIGxldmVsIEdDUllfU1RST05HX1JBTkRPTS4gIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBvb2wgYWxyZWFkeQorICAgbG9ja2VkLiAgKi8KK3N0YXRpYyB2b2lkCityZWFkX3Bvb2wgKGJ5dGUgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsKQoreworICBpbnQgaTsKKyAgdW5zaWduZWQgbG9uZyAqc3AsICpkcDsKKyAgLyogVGhlIHZvbGF0aWxlIGlzIHRoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qgb3B0aW1pemUKKyAgICAgdGhlIGNvZGUgYXdheSBpbiBjYXNlIHRoZSBnZXRwaWQgZnVuY3Rpb24gaXMgYmFkbHkgYXR0cmlidXRlZC4KKyAgICAgTm90ZSB0aGF0IHdlIGtlZXAgYSBwaWQgaW4gYSBzdGF0aWMgdmFyaWFibGUgYXMgd2VsbCBhcyBpbiBhCisgICAgIHN0YWNrIGJhc2VkIG9uZTsgdGhlIGxhdHRlciBpcyB0byBkZXRlY3QgaWxsIGJlaGF2aW5nIHRocmVhZAorICAgICBsaWJyYXJpZXMsIGlnbm9yaW5nIHRoZSBwb29sIG11dGV4ZXMuICovCisgIHN0YXRpYyB2b2xhdGlsZSBwaWRfdCBteV9waWQgPSAocGlkX3QpKC0xKTsKKyAgdm9sYXRpbGUgcGlkX3QgbXlfcGlkMjsKKworICBnY3J5X2Fzc2VydCAocG9vbF9pc19sb2NrZWQpOworCisgcmV0cnk6CisgIC8qIEdldCBvdXIgb3duIHBpZCwgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IGEgZm9yay4gKi8KKyAgbXlfcGlkMiA9IGdldHBpZCAoKTsKKyAgaWYgKG15X3BpZCA9PSAocGlkX3QpKC0xKSkKKyAgICBteV9waWQgPSBteV9waWQyOworICBpZiAoIG15X3BpZCAhPSBteV9waWQyICkKKyAgICB7CisgICAgICAvKiBXZSBkZXRlY3RlZCBhIHBsYWluIGZvcms7IGkuZS4gd2UgYXJlIG5vdyB0aGUgY2hpbGQuICBVcGRhdGUKKyAgICAgICAgIHRoZSBzdGF0aWMgcGlkIGFuZCBhZGQgc29tZSByYW5kb21uZXNzLiAqLworICAgICAgcGlkX3QgeDsKKworICAgICAgbXlfcGlkID0gbXlfcGlkMjsKKyAgICAgIHggPSBteV9waWQ7CisgICAgICBhZGRfcmFuZG9tbmVzcyAoJngsIHNpemVvZih4KSwgUkFORE9NX09SSUdJTl9JTklUKTsKKyAgICAgIGp1c3RfbWl4ZWQgPSAwOyAvKiBNYWtlIHN1cmUgaXQgd2lsbCBnZXQgbWl4ZWQuICovCisgICAgfQorCisgIGdjcnlfYXNzZXJ0IChwb29sX2lzX2xvY2tlZCk7CisKKyAgLyogT3VyIGNvZGUgZG9lcyBub3QgYWxsb3cgdG8gZXh0cmFjdCBtb3JlIHRoYW4gUE9PTFNJWkUuICBCZXR0ZXIKKyAgICAgY2hlY2sgaXQgaGVyZS4gKi8KKyAgaWYgKGxlbmd0aCA+IFBPT0xTSVpFKQorICAgIHsKKyAgICAgIGxvZ19idWcoInRvbyBtYW55IHJhbmRvbSBiaXRzIHJlcXVlc3RlZFxuIik7CisgICAgfQorCisgIGlmICghcG9vbF9maWxsZWQpCisgICAgeworICAgICAgaWYgKHJlYWRfc2VlZF9maWxlKCkgKQorICAgICAgICBwb29sX2ZpbGxlZCA9IDE7CisgICAgfQorCisgIC8qIEZvciBsZXZlbCAyIHF1YWxpdHkgKGtleSBnZW5lcmF0aW9uKSB3ZSBhbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgIHBvb2wgaGFzIGJlZW4gc2VlZGVkIGVub3VnaCBpbml0aWFsbHkuICovCisgIGlmIChsZXZlbCA9PSBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSAmJiAhZGlkX2luaXRpYWxfZXh0cmFfc2VlZGluZykKKyAgICB7CisgICAgICBzaXplX3QgbmVlZGVkOworCisgICAgICBwb29sX2JhbGFuY2UgPSAwOworICAgICAgbmVlZGVkID0gbGVuZ3RoIC0gcG9vbF9iYWxhbmNlOworICAgICAgaWYgKG5lZWRlZCA8IFBPT0xTSVpFLzIpCisgICAgICAgIG5lZWRlZCA9IFBPT0xTSVpFLzI7CisgICAgICBlbHNlIGlmKCBuZWVkZWQgPiBQT09MU0laRSApCisgICAgICAgIEJVRyAoKTsKKyAgICAgIHJlYWRfcmFuZG9tX3NvdXJjZSAoUkFORE9NX09SSUdJTl9FWFRSQVBPTEwsIG5lZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICAgICAgcG9vbF9iYWxhbmNlICs9IG5lZWRlZDsKKyAgICAgIGRpZF9pbml0aWFsX2V4dHJhX3NlZWRpbmcgPSAxOworICAgIH0KKworICAvKiBGb3IgbGV2ZWwgMiBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcmFuZG9tIGluIHRoZSBwb29sLiAqLworICBpZiAobGV2ZWwgPT0gR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gJiYgcG9vbF9iYWxhbmNlIDwgbGVuZ3RoKQorICAgIHsKKyAgICAgIHNpemVfdCBuZWVkZWQ7CisKKyAgICAgIGlmIChwb29sX2JhbGFuY2UgPCAwKQorICAgICAgICBwb29sX2JhbGFuY2UgPSAwOworICAgICAgbmVlZGVkID0gbGVuZ3RoIC0gcG9vbF9iYWxhbmNlOworICAgICAgaWYgKG5lZWRlZCA+IFBPT0xTSVpFKQorICAgICAgICBCVUcgKCk7CisgICAgICByZWFkX3JhbmRvbV9zb3VyY2UgKFJBTkRPTV9PUklHSU5fRVhUUkFQT0xMLCBuZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NKTsKKyAgICAgIHBvb2xfYmFsYW5jZSArPSBuZWVkZWQ7CisgICAgfQorCisgIC8qIE1ha2Ugc3VyZSB0aGUgcG9vbCBpcyBmaWxsZWQuICovCisgIHdoaWxlICghcG9vbF9maWxsZWQpCisgICAgcmFuZG9tX3BvbGwoKTsKKworICAvKiBBbHdheXMgZG8gYSBmYXN0IHJhbmRvbSBwb2xsICh3ZSBoYXZlIHRvIHVzZSB0aGUgdW5sb2NrZWQgdmVyc2lvbikuICovCisgIGRvX2Zhc3RfcmFuZG9tX3BvbGwoKTsKKworICAvKiBNaXggdGhlIHBpZCBpbiBzbyB0aGF0IHdlIGZvciBzdXJlIHdvbid0IGRlbGl2ZXIgdGhlIHNhbWUgcmFuZG9tCisgICAgIGFmdGVyIGEgZm9yay4gKi8KKyAgeworICAgIHBpZF90IGFwaWQgPSBteV9waWQ7CisgICAgYWRkX3JhbmRvbW5lc3MgKCZhcGlkLCBzaXplb2YgKGFwaWQpLCBSQU5ET01fT1JJR0lOX0lOSVQpOworICB9CisKKyAgLyogTWl4IHRoZSBwb29sIChpZiBhZGRfcmFuZG9tbmVzcygpIGRpZG4ndCBpdCkuICovCisgIGlmICghanVzdF9taXhlZCkKKyAgICB7CisgICAgICBtaXhfcG9vbChybmRwb29sKTsKKyAgICAgIHJuZHN0YXRzLm1peHJuZCsrOworICAgIH0KKworICAvKiBDcmVhdGUgYSBuZXcgcG9vbC4gKi8KKyAgZm9yKGk9MCxkcD0odW5zaWduZWQgbG9uZyopa2V5cG9vbCwgc3A9KHVuc2lnbmVkIGxvbmcqKXJuZHBvb2w7CisgICAgICBpIDwgUE9PTFdPUkRTOyBpKyssIGRwKyssIHNwKysgKQorICAgICpkcCA9ICpzcCArIEFERF9WQUxVRTsKKworICAvKiBNaXggYm90aCBwb29scy4gKi8KKyAgbWl4X3Bvb2wocm5kcG9vbCk7IHJuZHN0YXRzLm1peHJuZCsrOworICBtaXhfcG9vbChrZXlwb29sKTsgcm5kc3RhdHMubWl4a2V5Kys7CisKKyAgLyogUmVhZCB0aGUgcmVxdWVzdGVkIGRhdGEuICBXZSB1c2UgYSByZWFkIHBvaW50ZXIgdG8gcmVhZCBmcm9tIGEKKyAgICAgZGlmZmVyZW50IHBvc2l0aW9uIGVhY2ggdGltZS4gICovCisgIHdoaWxlIChsZW5ndGgtLSkKKyAgICB7CisgICAgICAqYnVmZmVyKysgPSBrZXlwb29sW3Bvb2xfcmVhZHBvcysrXTsKKyAgICAgIGlmIChwb29sX3JlYWRwb3MgPj0gUE9PTFNJWkUpCisgICAgICAgIHBvb2xfcmVhZHBvcyA9IDA7CisgICAgICBwb29sX2JhbGFuY2UtLTsKKyAgICB9CisKKyAgaWYgKHBvb2xfYmFsYW5jZSA8IDApCisgICAgcG9vbF9iYWxhbmNlID0gMDsKKworICAvKiBDbGVhciB0aGUga2V5cG9vbC4gKi8KKyAgbWVtc2V0IChrZXlwb29sLCAwLCBQT09MU0laRSk7CisKKyAgLyogV2UgbmVlZCB0byBkZXRlY3Qgd2hldGhlciBhIGZvcmsgaGFzIGhhcHBlbmVkLiAgQSBmb3JrIG1pZ2h0IGhhdmUKKyAgICAgYW4gaWRlbnRpY2FsIHBvb2wgYW5kIHRodXMgdGhlIGNoaWxkIGFuZCB0aGUgcGFyZW50IGNvdWxkIGVtaXQKKyAgICAgdGhlIHZlcnkgc2FtZSByYW5kb20gbnVtYmVyLiAgVGhpcyB0ZXN0IGhlcmUgaXMgdG8gZGV0ZWN0IGZvcmtzCisgICAgIGluIGEgbXVsdGktdGhyZWFkZWQgcHJvY2Vzcy4gIEl0IGRvZXMgbm90IHdvcmsgd2l0aCBhbGwgdGhyZWFkCisgICAgIGltcGxlbWVudGF0aW9ucyBpbiBwYXJ0aWN1bGFyIG5vdCB3aXRoIHB0aHJlYWRzLiAgSG93ZXZlciBpdCBpcworICAgICBnb29kIGVub3VnaCBmb3IgR05VIFB0aC4gKi8KKyAgaWYgKCBnZXRwaWQgKCkgIT0gbXlfcGlkMiApCisgICAgeworICAgICAgcGlkX3QgeCA9IGdldHBpZCgpOworICAgICAgYWRkX3JhbmRvbW5lc3MgKCZ4LCBzaXplb2YoeCksIFJBTkRPTV9PUklHSU5fSU5JVCk7CisgICAgICBqdXN0X21peGVkID0gMDsgLyogTWFrZSBzdXJlIGl0IHdpbGwgZ2V0IG1peGVkLiAqLworICAgICAgbXlfcGlkID0geDsgICAgIC8qIEFsc28gdXBkYXRlIHRoZSBzdGF0aWMgcGlkLiAqLworICAgICAgZ290byByZXRyeTsKKyAgICB9Cit9CisKKworCisvKiBBZGQgTEVOR1RIIGJ5dGVzIG9mIHJhbmRvbW5lc3MgZnJvbSBidWZmZXIgdG8gdGhlIHBvb2wuICBPUklHSU4gaXMKKyAgIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmFuZG9tbmVzcyBvcmlnaW4uICBUaGlzIGlzIG9uZSBvZiB0aGUKKyAgIFJBTkRPTV9PUklHSU5fKiB2YWx1ZXMuICovCitzdGF0aWMgdm9pZAorYWRkX3JhbmRvbW5lc3MgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWZmZXI7CisgIHNpemVfdCBjb3VudCA9IDA7CisKKyAgZ2NyeV9hc3NlcnQgKHBvb2xfaXNfbG9ja2VkKTsKKworICBybmRzdGF0cy5hZGRieXRlcyArPSBsZW5ndGg7CisgIHJuZHN0YXRzLm5hZGRieXRlcysrOworICB3aGlsZSAobGVuZ3RoLS0gKQorICAgIHsKKyAgICAgIHJuZHBvb2xbcG9vbF93cml0ZXBvcysrXSBePSAqcCsrOworICAgICAgY291bnQrKzsKKyAgICAgIGlmIChwb29sX3dyaXRlcG9zID49IFBPT0xTSVpFICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgYXJlIGludm9rZWQgYmVmb3JlIHRoZSBwb29sIGlzCisgICAgICAgICAgICAgZmlsbGVkIHVzaW5nIGFuIHVucmVsaWFibGUgb3JpZ2luIG9mIGVudHJvcHksIGZvciBleGFtcGxlCisgICAgICAgICAgICAgdGhlIGZhc3QgcmFuZG9tIHBvbGwuICBUbyBhdm9pZCBmbGFnZ2luZyB0aGUgcG9vbCBhcworICAgICAgICAgICAgIGZpbGxlZCBpbiB0aGlzIGNhc2UsIHdlIHRyYWNrIHRoZSBpbml0aWFsIGZpbGxpbmcgc3RhdGUKKyAgICAgICAgICAgICBzZXBhcmF0ZWx5LiAgU2VlIGFsc28gdGhlIHJlbWFya3MgYWJvdXQgdGhlIHNlZWQgZmlsZS4gKi8KKyAgICAgICAgICBpZiAob3JpZ2luID49IFJBTkRPTV9PUklHSU5fU0xPV1BPTEwgJiYgIXBvb2xfZmlsbGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwb29sX2ZpbGxlZF9jb3VudGVyICs9IGNvdW50OworICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgIGlmIChwb29sX2ZpbGxlZF9jb3VudGVyID49IFBPT0xTSVpFKQorICAgICAgICAgICAgICAgIHBvb2xfZmlsbGVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBwb29sX3dyaXRlcG9zID0gMDsKKyAgICAgICAgICBtaXhfcG9vbChybmRwb29sKTsgcm5kc3RhdHMubWl4cm5kKys7CisgICAgICAgICAganVzdF9taXhlZCA9ICFsZW5ndGg7CisJfQorICAgIH0KK30KKworCisKK3N0YXRpYyB2b2lkCityYW5kb21fcG9sbCgpCit7CisgIHJuZHN0YXRzLnNsb3dwb2xscysrOworICByZWFkX3JhbmRvbV9zb3VyY2UgKFJBTkRPTV9PUklHSU5fU0xPV1BPTEwsIFBPT0xTSVpFLzUsIEdDUllfU1RST05HX1JBTkRPTSk7Cit9CisKKworLyogUnVudGltZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSBzbG93IGVudHJvcHkgZ2F0aGVyaW5nIG1vZHVsZS4gICovCitzdGF0aWMgaW50ICgqCitnZXRmbmNfZ2F0aGVyX3JhbmRvbSAodm9pZCkpKHZvaWQgKCopKGNvbnN0IHZvaWQqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zLCBzaXplX3QsIGludCkKK3sKKyAgaW50ICgqZm5jKSh2b2lkICgqKShjb25zdCB2b2lkKiwgc2l6ZV90LCBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zLCBzaXplX3QsIGludCk7CisKKyNpZiBVU0VfUk5ETElOVVgKKyAgaWYgKCAhYWNjZXNzIChOQU1FX09GX0RFVl9SQU5ET00sIFJfT0spCisgICAgICAgJiYgIWFjY2VzcyAoTkFNRV9PRl9ERVZfVVJBTkRPTSwgUl9PSykpCisgICAgeworICAgICAgZm5jID0gX2djcnlfcm5kbGludXhfZ2F0aGVyX3JhbmRvbTsKKyAgICAgIHJldHVybiBmbmM7CisgICAgfQorI2VuZGlmCisKKyNpZiBVU0VfUk5ERUdECisgIGlmICggX2djcnlfcm5kZWdkX2Nvbm5lY3Rfc29ja2V0ICgxKSAhPSAtMSApCisgICAgeworICAgICAgZm5jID0gX2djcnlfcm5kZWdkX2dhdGhlcl9yYW5kb207CisgICAgICByZXR1cm4gZm5jOworICAgIH0KKyNlbmRpZgorCisjaWYgVVNFX1JORFVOSVgKKyAgZm5jID0gX2djcnlfcm5kdW5peF9nYXRoZXJfcmFuZG9tOworICByZXR1cm4gZm5jOworI2VuZGlmCisKKyNpZiBVU0VfUk5EVzMyCisgIGZuYyA9IF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tOworICByZXR1cm4gZm5jOworI2VuZGlmCisKKyNpZiBVU0VfUk5EVzMyQ0UKKyAgZm5jID0gX2djcnlfcm5kdzMyY2VfZ2F0aGVyX3JhbmRvbTsKKyAgcmV0dXJuIGZuYzsKKyNlbmRpZgorCisgIGxvZ19mYXRhbCAoXygibm8gZW50cm9weSBnYXRoZXJpbmcgbW9kdWxlIGRldGVjdGVkXG4iKSk7CisKKyAgcmV0dXJuIE5VTEw7IC8qTk9UUkVBQ0hFRCovCit9CisKKy8qIFJ1bnRpbWUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgZmFzdCBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbi4KKyAgIChDdXJyZW50bHkgYSBjb21waWxlIHRpbWUgbWV0aG9kIGlzIHVzZWQuKSAgKi8KK3N0YXRpYyB2b2lkICgqCitnZXRmbmNfZmFzdF9yYW5kb21fcG9sbCAodm9pZCkpKCB2b2lkICgqKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKQoreworI2lmIFVTRV9STkRXMzIKKyAgcmV0dXJuIF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tX2Zhc3Q7CisjZW5kaWYKKyNpZiBVU0VfUk5EVzMyQ0UKKyAgcmV0dXJuIF9nY3J5X3JuZHczMmNlX2dhdGhlcl9yYW5kb21fZmFzdDsKKyNlbmRpZgorICByZXR1cm4gTlVMTDsKK30KKworCisKK3N0YXRpYyB2b2lkCitkb19mYXN0X3JhbmRvbV9wb2xsICh2b2lkKQoreworICBnY3J5X2Fzc2VydCAocG9vbF9pc19sb2NrZWQpOworCisgIHJuZHN0YXRzLmZhc3Rwb2xscysrOworCisgIGlmIChmYXN0X2dhdGhlcl9mbmMpCisgICAgZmFzdF9nYXRoZXJfZm5jIChhZGRfcmFuZG9tbmVzcywgUkFORE9NX09SSUdJTl9GQVNUUE9MTCk7CisKKyAgLyogQ29udGludWUgd2l0aCB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMuICovCisjaWYgSEFWRV9HRVRIUlRJTUUKKyAgeworICAgIGhydGltZV90IHR2OworICAgIHR2ID0gZ2V0aHJ0aW1lKCk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZ0diwgc2l6ZW9mKHR2KSwgUkFORE9NX09SSUdJTl9GQVNUUE9MTCApOworICB9CisjZWxpZiBIQVZFX0dFVFRJTUVPRkRBWQorICB7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgaWYoIGdldHRpbWVvZmRheSggJnR2LCBOVUxMICkgKQorICAgICAgQlVHKCk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZ0di50dl9zZWMsIHNpemVvZih0di50dl9zZWMpLCBSQU5ET01fT1JJR0lOX0ZBU1RQT0xMICk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZ0di50dl91c2VjLCBzaXplb2YodHYudHZfdXNlYyksIFJBTkRPTV9PUklHSU5fRkFTVFBPTEwgKTsKKyAgfQorI2VsaWYgSEFWRV9DTE9DS19HRVRUSU1FCisgIHsJc3RydWN0IHRpbWVzcGVjIHR2OworICBpZiggY2xvY2tfZ2V0dGltZSggQ0xPQ0tfUkVBTFRJTUUsICZ0diApID09IC0xICkKKyAgICBCVUcoKTsKKyAgYWRkX3JhbmRvbW5lc3MoICZ0di50dl9zZWMsIHNpemVvZih0di50dl9zZWMpLCBSQU5ET01fT1JJR0lOX0ZBU1RQT0xMICk7CisgIGFkZF9yYW5kb21uZXNzKCAmdHYudHZfbnNlYywgc2l6ZW9mKHR2LnR2X25zZWMpLCBSQU5ET01fT1JJR0lOX0ZBU1RQT0xMICk7CisgIH0KKyNlbHNlIC8qIHVzZSB0aW1lcyAqLworIyBpZm5kZWYgSEFWRV9ET1NJU0hfU1lTVEVNCisgIHsJc3RydWN0IHRtcyBidWY7CisgIHRpbWVzKCAmYnVmICk7CisgIGFkZF9yYW5kb21uZXNzKCAmYnVmLCBzaXplb2YgYnVmLCBSQU5ET01fT1JJR0lOX0ZBU1RQT0xMICk7CisgIH0KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKyMgaWZkZWYgUlVTQUdFX1NFTEYKKyAgeworICAgIHN0cnVjdCBydXNhZ2UgYnVmOworICAgIC8qIFFOWC9OZXV0cmlubyBkb2VzIHJldHVybiBFTk9TWVMgLSBzbyB3ZSBqdXN0IGlnbm9yZSBpdCBhbmQgYWRkCisgICAgICAgd2hhdGV2ZXIgaXMgaW4gYnVmLiAgSW4gYSBjaHJvb3QgZW52aXJvbm1lbnQgaXQgbWlnaHQgbm90IHdvcmsKKyAgICAgICBhdCBhbGwgKGkuZS4gYmVjYXVzZSAvcHJvYy8gaXMgbm90IGFjY2Vzc2libGUpLCBzbyB3ZSBiZXR0ZXIKKyAgICAgICBpZ25vcmUgYWxsIGVycm9yIGNvZGVzIGFuZCBob3BlIGZvciB0aGUgYmVzdC4gKi8KKyAgICBnZXRydXNhZ2UgKFJVU0FHRV9TRUxGLCAmYnVmICk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZidWYsIHNpemVvZiBidWYsIFJBTkRPTV9PUklHSU5fRkFTVFBPTEwgKTsKKyAgICBtZW1zZXQoICZidWYsIDAsIHNpemVvZiBidWYgKTsKKyAgfQorIyBlbHNlIC8qIVJVU0FHRV9TRUxGKi8KKyMgIGlmZGVmIF9fR0NDX18KKyMgICB3YXJuaW5nIFRoZXJlIGlzIG5vIFJVU0FHRV9TRUxGIG9uIHRoaXMgc3lzdGVtCisjICBlbmRpZgorIyBlbmRpZiAvKiFSVVNBR0VfU0VMRiovCisjZW5kaWYgLypIQVZFX0dFVFJVU0FHRSovCisKKyAgLyogVGltZSBhbmQgY2xvY2sgYXJlIGF2YWlsYWJlIG9uIGFsbCBzeXN0ZW1zIC0gc28gd2UgYmV0dGVyIGRvIGl0CisgICAgIGp1c3QgaW4gY2FzZSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBkaWRuJ3Qgd29yay4gICovCisgIHsKKyAgICB0aW1lX3QgeCA9IHRpbWUoTlVMTCk7CisgICAgYWRkX3JhbmRvbW5lc3MoICZ4LCBzaXplb2YoeCksIFJBTkRPTV9PUklHSU5fRkFTVFBPTEwgKTsKKyAgfQorICB7CisgICAgY2xvY2tfdCB4ID0gY2xvY2soKTsKKyAgICBhZGRfcmFuZG9tbmVzcyggJngsIHNpemVvZih4KSwgUkFORE9NX09SSUdJTl9GQVNUUE9MTCApOworICB9CisKKyAgLyogSWYgdGhlIHN5c3RlbSBmZWF0dXJlcyBhIGZhc3QgaGFyZHdhcmUgUk5HLCByZWFkIHNvbWUgYnl0ZXMgZnJvbQorICAgICB0aGVyZS4gICovCisgIF9nY3J5X3JuZGh3X3BvbGxfZmFzdCAoYWRkX3JhbmRvbW5lc3MsIFJBTkRPTV9PUklHSU5fRkFTVFBPTEwpOworfQorCisKKy8qIFRoZSBmYXN0IHJhbmRvbSBwb29sIGZ1bmN0aW9uIGFzIGNhbGxlZCBhdCBzb21lIHBsYWNlcyBpbgorICAgbGliZ2NyeXB0LiAgVGhpcyBpcyBtZXJlbHkgYSB3cmFwcGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbW9kdWxlCisgICBpcyBpbml0aWFsaXplZCBhbmQgdG8gbG9jayB0aGUgcG9vbC4gIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhCisgICBOT1AgdW5sZXNzIGEgcmFuZG9tIGZ1bmN0aW9uIGhhcyBiZWVuIHVzZWQgb3IgX2djcnlfaW5pdGlhbGl6ZSAoMSkKKyAgIGhhcyBiZWVuIHVzZWQuICBXZSB1c2UgdGhpcyBoYWNrIHNvIHRoYXQgdGhlIGludGVybmFsIHVzZSBvZiB0aGlzCisgICBmdW5jdGlvbiBpbiBjaXBoZXJfb3BlbiBhbmQgbWRfb3BlbiB3b24ndCBzdGFydCBmaWxsaW5nIHVwIHRoZQorICAgcmFuZG9tIHBvb2wsIGV2ZW4gaWYgbm8gcmFuZG9tIHdpbGwgYmUgcmVxdWlyZWQgYnkgdGhlIHByb2Nlc3MuICovCit2b2lkCitfZ2NyeV9ybmdjc3BybmdfZmFzdF9wb2xsICh2b2lkKQoreworICBpbml0aWFsaXplX2Jhc2ljcyAoKTsKKworICBsb2NrX3Bvb2wgKCk7CisgIGlmIChybmRwb29sKQorICAgIHsKKyAgICAgIC8qIFllcywgd2UgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiAqLworICAgICAgZG9fZmFzdF9yYW5kb21fcG9sbCAoKTsKKyAgICB9CisgIHVubG9ja19wb29sICgpOworfQorCisKKworc3RhdGljIHZvaWQKK3JlYWRfcmFuZG9tX3NvdXJjZSAoZW51bSByYW5kb21fb3JpZ2lucyBvcmdpbiwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICkKK3sKKyAgaWYgKCAhc2xvd19nYXRoZXJfZm5jICkKKyAgICBsb2dfZmF0YWwgKCJTbG93IGVudHJvcHkgZ2F0aGVyaW5nIG1vZHVsZSBub3QgeWV0IGluaXRpYWxpemVkXG4iKTsKKworICBpZiAoIHNsb3dfZ2F0aGVyX2ZuYyAoYWRkX3JhbmRvbW5lc3MsIG9yZ2luLCBsZW5ndGgsIGxldmVsKSA8IDApCisgICAgbG9nX2ZhdGFsICgiTm8gd2F5IHRvIGdhdGhlciBlbnRyb3B5IGZvciB0aGUgUk5HXG4iKTsKK30KKworCitzdGF0aWMgaW50CitnYXRoZXJfZmFrZWQgKHZvaWQgKCphZGQpKGNvbnN0IHZvaWQqLCBzaXplX3QsIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbiwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICkKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZD0wOworICBzaXplX3QgbjsKKyAgY2hhciAqYnVmZmVyLCAqcDsKKworICAodm9pZClhZGQ7CisgICh2b2lkKWxldmVsOworCisgIGlmICggIWluaXRpYWxpemVkICkKKyAgICB7CisgICAgICBsb2dfaW5mbyhfKCJXQVJOSU5HOiB1c2luZyBpbnNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciEhXG4iKSk7CisgICAgICBpbml0aWFsaXplZD0xOworI2lmZGVmIEhBVkVfUkFORAorICAgICAgc3JhbmQoIHRpbWUoTlVMTCkqZ2V0cGlkKCkpOworI2Vsc2UKKyAgICAgIHNyYW5kb20oIHRpbWUoTlVMTCkqZ2V0cGlkKCkpOworI2VuZGlmCisgICAgfQorCisgIHAgPSBidWZmZXIgPSB4bWFsbG9jKCBsZW5ndGggKTsKKyAgbiA9IGxlbmd0aDsKKyNpZmRlZiBIQVZFX1JBTkQKKyAgd2hpbGUgKCBuLS0gKQorICAgICpwKysgPSAoKHVuc2lnbmVkKSgxICsgKGludCkgKDI1Ni4wKnJhbmQoKS8oUkFORF9NQVgrMS4wKSkpLTEpOworI2Vsc2UKKyAgd2hpbGUgKCBuLS0gKQorICAgICpwKysgPSAoKHVuc2lnbmVkKSgxICsgKGludCkgKDI1Ni4wKnJhbmRvbSgpLyhSQU5EX01BWCsxLjApKSktMSk7CisjZW5kaWYKKyAgYWRkX3JhbmRvbW5lc3MgKCBidWZmZXIsIGxlbmd0aCwgb3JpZ2luICk7CisgIHhmcmVlIChidWZmZXIpOworICByZXR1cm4gMDsgLyogb2theSAqLworfQpkaWZmIC0tZ2l0IGEvcmFuZG9tL3JhbmRvbS1kYWVtb24uYyBiL3JhbmRvbS9yYW5kb20tZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhMDE1MwotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9yYW5kb20tZGFlbW9uLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qIHJhbmRvbS1kYWVtb24uYyAgLSBBY2Nlc3MgdG8gdGhlIGV4dGVybmFsIHJhbmRvbSBkYWVtb24KKyAqIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKy8qCisgICBUaGUgZnVuY3Rpb25zIGhlcmUgYXJlIHVzZWQgYnkgcmFuZG9tLmMgdG8gZGl2ZXJ0IGNhbGxzIHRvIGFuCisgICBleHRlcm5hbCByYW5kb20gbnVtYmVyIGRhZW1vbi4gIFRoZSBhY3R1YWwgZGFlbW9uIHdlIHVzZSBpcworICAgZ2NyeXB0cm5kLiAgU3VjaCBhIGRhZW1vbiBpcyB1c2VmdWwgdG8ga2VlcCBhIHBlcnNpc3RlbnQgcG9vbCBpbgorICAgbWVtb3J5IG92ZXIgaW52b2NhdGlvbnMgb2YgYSBzaW5nbGUgYXBwbGljYXRpb24gYW5kIHRvIGFsbG93CisgICBwcmlvcml0aXppbmcgYWNjZXNzIHRvIHRoZSBhY3R1YWwgZW50cm9weSBzb3VyY2VzLiAgVGhlIGRyYXdiYWNrIGlzCisgICB0aGF0IHdlIG5lZWQgdG8gdXNlIElQQyAoaS5lLiB1bml4IGRvbWFpbiBzb2NrZXQpIHRvIGNvbnZleQorICAgc2Vuc2l0aXZlIGRhdGEuCisgKi8KKworI2Vycm9yIFRoaXMgZGFtZW9uIG5lZWRzIHRvIGJlIGZpeGVkIGR1ZSB0byB0aGUgYXRoIGNoYW5nZXMKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKyNpbmNsdWRlICJhdGguaCIKKworDAorCisvKiBUaGlzIGlzIGRlZmF1bHQgc29ja2V0IG5hbWUgd2UgdXNlIGluIGNhc2UgdGhlIHByb3ZpZGVkIHNvY2tldCBuYW1lCisgICBpcyBOVUxMLiAgKi8KKyNkZWZpbmUgUkFORE9NX0RBRU1PTl9TT0NLRVQgIi92YXIvcnVuL2xpYmdjcnlwdC9TLmdjcnlwdHJuZCIKKworLyogVGhlIGxvY2sgc2VyaWFsaXppbmcgYWNjZXNzIHRvIHRoZSBkYWVtb24uICAqLworc3RhdGljIGF0aF9tdXRleF90IGRhZW1vbl9sb2NrID0gQVRIX01VVEVYX0lOSVRJQUxJWkVSOworCisvKiBUaGUgc29ja2V0IGNvbm5lY3RlZCB0byB0aGUgZGFlbW9uLiAgKi8KK3N0YXRpYyBpbnQgZGFlbW9uX3NvY2tldCA9IC0xOworCisvKiBDcmVhdGVzIGEgc29ja2V0IGNvbm5lY3RlZCB0byB0aGUgZGFlbW9uLiAgT24gc3VjY2Vzcywgc3RvcmUgdGhlCisgICBzb2NrZXQgZmQgaW4gKlNPQ0suICBSZXR1cm5zIGVycm9yIGNvZGUuICAqLworc3RhdGljIGdjcnlfZXJyb3JfdAorY29ubmVjdF90b19zb2NrZXQgKGNvbnN0IGNoYXIgKnNvY2tldG5hbWUsIGludCAqc29jaykKK3sKKyAgc3RydWN0IHNvY2thZGRyX3VuICpzcnZyX2FkZHI7CisgIHNvY2tsZW5fdCBhZGRybGVuOworICBnY3J5X2Vycm9yX3QgZXJyOworICBpbnQgZmQ7CisgIGludCByYzsKKworICBzcnZyX2FkZHIgPSBOVUxMOworCisgIC8qIENyZWF0ZSBhIHNvY2tldC4gKi8KKyAgZmQgPSBzb2NrZXQgKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgaWYgKGZkID09IC0xKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoImNhbid0IGNyZWF0ZSBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGVyciA9IGdjcnlfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pOworICAgICAgZ290byBvdXQ7CisgICAgfQorCisgIC8qIFNldCB1cCBhZGRyZXNzLiAgKi8KKyAgc3J2cl9hZGRyID0gZ2NyeV9tYWxsb2MgKHNpemVvZiAqc3J2cl9hZGRyKTsKKyAgaWYgKCEgc3J2cl9hZGRyKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoIm1hbGxvYyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGVyciA9IGdjcnlfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pOworICAgICAgZ290byBvdXQ7CisgICAgfQorICBtZW1zZXQgKHNydnJfYWRkciwgMCwgc2l6ZW9mICpzcnZyX2FkZHIpOworICBzcnZyX2FkZHItPnN1bl9mYW1pbHkgPSBBRl9VTklYOworICBpZiAoc3RybGVuIChzb2NrZXRuYW1lKSArIDEgPj0gc2l6ZW9mIChzcnZyX2FkZHItPnN1bl9wYXRoKSkKKyAgICB7CisgICAgICBsb2dfZXJyb3IgKCJzb2NrZXQgbmFtZSBgJXMnIHRvbyBsb25nXG4iLCBzb2NrZXRuYW1lKTsKKyAgICAgIGVyciA9IGdjcnlfZXJyb3IgKEdQR19FUlJfRU5BTUVUT09MT05HKTsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgc3RyY3B5IChzcnZyX2FkZHItPnN1bl9wYXRoLCBzb2NrZXRuYW1lKTsKKyAgYWRkcmxlbiA9IChvZmZzZXRvZiAoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkKKyAgICAgICAgICAgICArIHN0cmxlbiAoc3J2cl9hZGRyLT5zdW5fcGF0aCkgKyAxKTsKKworICAvKiBDb25uZWN0IHNvY2tldC4gICovCisgIHJjID0gY29ubmVjdCAoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgc3J2cl9hZGRyLCBhZGRybGVuKTsKKyAgaWYgKHJjID09IC0xKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoImVycm9yIGNvbm5lY3Rpbmcgc29ja2V0IGAlcyc6ICVzXG4iLAorCQkgc3J2cl9hZGRyLT5zdW5fcGF0aCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBlcnIgPSBnY3J5X2Vycm9yX2Zyb21fZXJybm8gKGVycm5vKTsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKworICBlcnIgPSAwOworCisgb3V0OgorCisgIGdjcnlfZnJlZSAoc3J2cl9hZGRyKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBjbG9zZSAoZmQpOworICAgICAgZmQgPSAtMTsKKyAgICB9CisgICpzb2NrID0gZmQ7CisKKyAgcmV0dXJuIGVycjsKK30KKworCisvKiBJbml0aWFsaXplIGJhc2ljcyBvZiB0aGlzIG1vZHVsZS4gVGhpcyBzaG91bGQgYmUgdmlld2VkIGFzIGEKKyAgIGNvbnN0cnVjdG9yIHRvIHByZXBhcmUgbG9ja2luZy4gKi8KK3ZvaWQKK19nY3J5X2RhZW1vbl9pbml0aWFsaXplX2Jhc2ljcyAodm9pZCkKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKyAgaW50IGVycjsKKworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgIGVyciA9IGF0aF9tdXRleF9pbml0ICgmZGFlbW9uX2xvY2spOworICAgICAgaWYgKGVycikKKyAgICAgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgZGFlbW9uIGxvY2s6ICVzXG4iLCBzdHJlcnJvciAoZXJyKSApOworICAgIH0KK30KKworCisKKy8qIFNlbmQgTEVOR1RIIGJ5dGVzIG9mIEJVRkZFUiB0byBmaWxlIGRlc2NyaXB0b3IgRkQuICBSZXR1cm5zIDAgb24KKyAgIHN1Y2Nlc3Mgb3IgYW5vdGhlciB2YWx1ZSBvbiB3cml0ZSBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3dyaXRlbiAoaW50IGZkLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIHNzaXplX3QgbjsKKworICB3aGlsZSAobGVuZ3RoKQorICAgIHsKKyAgICAgIGRvCisgICAgICAgIG4gPSBhdGhfd3JpdGUgKGZkLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICB3aGlsZSAobiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgeworICAgICAgICAgICBsb2dfZXJyb3IgKCJ3cml0ZSBlcnJvcjogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgICByZXR1cm4gLTE7IC8qIHdyaXRlIGVycm9yICovCisgICAgICAgICB9CisgICAgICBsZW5ndGggLT0gbjsKKyAgICAgIGJ1ZmZlciA9IChjb25zdCBjaGFyKilidWZmZXIgKyBuOworICAgIH0KKyAgcmV0dXJuIDA7ICAvKiBPa2F5ICovCit9CisKK3N0YXRpYyBpbnQKK3JlYWRuIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpyZXRfbnJlYWQpCit7CisgIHNpemVfdCBubGVmdCA9IGJ1ZmxlbjsKKyAgaW50IG5yZWFkOworICBjaGFyICpwOworCisgIHAgPSBidWY7CisgIHdoaWxlIChubGVmdCA+IDApCisgICAgeworICAgICAgbnJlYWQgPSBhdGhfcmVhZCAoZmQsIGJ1ZiwgbmxlZnQpOworICAgICAgaWYgKG5yZWFkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChucmVhZCA9PSBFSU5UUikKKyAgICAgICAgICAgIG5yZWFkID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFucmVhZCkKKyAgICAgICAgYnJlYWs7IC8qIEVPRiAqLworICAgICAgbmxlZnQgLT0gbnJlYWQ7CisgICAgICBidWYgPSAoY2hhciopYnVmICsgbnJlYWQ7CisgICAgfQorICBpZiAocmV0X25yZWFkKQorICAgICpyZXRfbnJlYWQgPSBidWZsZW4gLSBubGVmdDsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb25zIHJlcXVlc3RzIFJFUV9OQllURVMgZnJvbSB0aGUgZGFlbW9uLiAgSWYgTk9OQ0UgaXMKKyAgIHRydWUsIHRoZSBkYXRhIHNob3VsZCBiZSBzdWl0ZWQgZm9yIGEgbm9uY2UuICBJZiBOT05DRSBpcyBGQUxTRSwKKyAgIGRhdGEgb2YgcmFuZG9tIGxldmVsIExFVkVMIHdpbGwgYmUgZ2VuZXJhdGVkLiAgVGhlIHJldHJpZXZlZCByYW5kb20KKyAgIGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4gQlVGRkVSLiAgUmV0dXJucyBlcnJvciBjb2RlLiAgKi8KK3N0YXRpYyBnY3J5X2Vycm9yX3QKK2NhbGxfZGFlbW9uIChjb25zdCBjaGFyICpzb2NrZXRuYW1lLAorICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHJlcV9uYnl0ZXMsIGludCBub25jZSwKKwkgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisgIHVuc2lnbmVkIGNoYXIgYnVmWzI1NV07CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworICBzaXplX3QgbmJ5dGVzOworICBzaXplX3QgbnJlYWQ7CisgIGludCByYzsKKworICBpZiAoIXJlcV9uYnl0ZXMpCisgICAgcmV0dXJuIDA7CisKKyAgYXRoX211dGV4X2xvY2sgKCZkYWVtb25fbG9jayk7CisKKyAgLyogT3BlbiB0aGUgc29ja2V0IGlmIHRoYXQgaGFzIG5vdCBiZWVuIGRvbmUuICovCisgIGlmICghaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgICAgZXJyID0gY29ubmVjdF90b19zb2NrZXQgKHNvY2tldG5hbWUgPyBzb2NrZXRuYW1lIDogUkFORE9NX0RBRU1PTl9TT0NLRVQsCisJCQkgICAgICAgJmRhZW1vbl9zb2NrZXQpOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGRhZW1vbl9zb2NrZXQgPSAtMTsKKyAgICAgICAgICBsb2dfaW5mbyAoIm5vdCB1c2luZyByYW5kb20gZGFlbW9uXG4iKTsKKyAgICAgICAgICBhdGhfbXV0ZXhfdW5sb2NrICgmZGFlbW9uX2xvY2spOworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc29ja2V0IGRlc2NyaXB0b3IuICovCisgIGlmICggZGFlbW9uX3NvY2tldCA9PSAtMSApCisgICAgeworICAgICAgYXRoX211dGV4X3VubG9jayAoJmRhZW1vbl9sb2NrKTsKKyAgICAgIHJldHVybiBnY3J5X2Vycm9yIChHUEdfRVJSX0lOVEVSTkFMKTsKKyAgICB9CisKKworICAvKiBEbyB0aGUgcmVhbCB3b3JrLiAgKi8KKworICBkbworICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgaW4gY2h1bmtzLiAgKi8KKyAgICAgIG5ieXRlcyA9IHJlcV9uYnl0ZXMgPiBzaXplb2YgKGJ1ZikgPyBzaXplb2YgKGJ1ZikgOiByZXFfbmJ5dGVzOworICAgICAgcmVxX25ieXRlcyAtPSBuYnl0ZXM7CisKKyAgICAgIC8qIENvbnN0cnVjdCByZXF1ZXN0LiAgKi8KKyAgICAgIGJ1ZlswXSA9IDM7CisgICAgICBpZiAobm9uY2UpCisJYnVmWzFdID0gMTA7CisgICAgICBlbHNlIGlmIChsZXZlbCA9PSBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSkKKwlidWZbMV0gPSAxMjsKKyAgICAgIGVsc2UgaWYgKGxldmVsID09IEdDUllfU1RST05HX1JBTkRPTSkKKwlidWZbMV0gPSAxMTsKKyAgICAgIGJ1ZlsyXSA9IG5ieXRlczsKKworICAgICAgLyogU2VuZCByZXF1ZXN0LiAgKi8KKyAgICAgIHJjID0gd3JpdGVuIChkYWVtb25fc29ja2V0LCBidWYsIDMpOworICAgICAgaWYgKHJjID09IC0xKQorCXsKKwkgIGVyciA9IGdjcnlfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pOworCSAgYnJlYWs7CisJfQorCisgICAgICAvKiBSZXRyaWV2ZSByZXNwb25zZS4gICovCisKKyAgICAgIHJjID0gcmVhZG4gKGRhZW1vbl9zb2NrZXQsIGJ1ZiwgMiwgJm5yZWFkKTsKKyAgICAgIGlmIChyYyA9PSAtMSkKKwl7CisJICBlcnIgPSBnY3J5X2Vycm9yX2Zyb21fZXJybm8gKGVycm5vKTsKKwkgIGxvZ19lcnJvciAoInJlYWQgZXJyb3I6ICVzXG4iLCBfZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisJICBicmVhazsKKwl9CisgICAgICBpZiAobnJlYWQgJiYgYnVmWzBdKQorCXsKKwkgIGxvZ19lcnJvciAoInJhbmRvbSBkYWVtb24gcmV0dXJuZWQgZXJyb3IgY29kZSAlZFxuIiwgYnVmWzBdKTsKKwkgIGVyciA9IGdjcnlfZXJyb3IgKEdQR19FUlJfSU5URVJOQUwpOyAvKiA/ICovCisJICBicmVhazsKKwl9CisgICAgICBpZiAobnJlYWQgIT0gMikKKwl7CisJICBsb2dfZXJyb3IgKCJyZXNwb25zZSB0b28gc21hbGxcbiIpOworCSAgZXJyID0gZ2NyeV9lcnJvciAoR1BHX0VSUl9QUk9UT0NPTF9WSU9MQVRJT04pOyAvKiA/ICovCisJICBicmVhazsKKwl9CisKKyAgICAgIC8qICAgICAgaWYgKDEpKi8JCQkvKiBEbyB0aGlzIGluIHZlcmJvc2UgbW9kZT8gKi8KKyAgICAgIC8qCWxvZ19pbmZvICgicmVjZWl2ZWQgcmVzcG9uc2Ugd2l0aCAlZCBieXRlcyBvZiBkYXRhXG4iLCBidWZbMV0pOyovCisKKyAgICAgIGlmIChidWZbMV0gPCBuYnl0ZXMpCisJeworCSAgbG9nX2Vycm9yICgiZXJyb3I6IHNlcnZlciByZXR1cm5lZCBsZXNzIGJ5dGVzIHRoYW4gcmVxdWVzdGVkXG4iKTsKKwkgIGVyciA9IGdjcnlfZXJyb3IgKEdQR19FUlJfUFJPVE9DT0xfVklPTEFUSU9OKTsgLyogPyAqLworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZSBpZiAoYnVmWzFdID4gbmJ5dGVzKQorCXsKKwkgIGxvZ19lcnJvciAoIndhcm5pbmc6IHNlcnZlciByZXR1cm5lZCBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkXG4iKTsKKwkgIGVyciA9IGdjcnlfZXJyb3IgKEdQR19FUlJfUFJPVE9DT0xfVklPTEFUSU9OKTsgLyogPyAqLworCSAgYnJlYWs7CisJfQorCisgICAgICBhc3NlcnQgKG5ieXRlcyA8PSBzaXplb2YgKGJ1ZikpOworCisgICAgICByYyA9IHJlYWRuIChkYWVtb25fc29ja2V0LCBidWYsIG5ieXRlcywgJm5yZWFkKTsKKyAgICAgIGlmIChyYyA9PSAtMSkKKwl7CisJICBlcnIgPSBnY3J5X2Vycm9yX2Zyb21fZXJybm8gKGVycm5vKTsKKwkgIGxvZ19lcnJvciAoInJlYWQgZXJyb3I6ICVzXG4iLCBfZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIGlmIChucmVhZCAhPSBuYnl0ZXMpCisJeworCSAgbG9nX2Vycm9yICgidG9vIGxpdHRsZSByYW5kb20gZGF0YSByZWFkXG4iKTsKKwkgIGVyciA9IGdjcnlfZXJyb3IgKEdQR19FUlJfSU5URVJOQUwpOworCSAgYnJlYWs7CisJfQorCisgICAgICAvKiBTdWNjZXNzZnVseSByZWFkIGFub3RoZXIgY2h1bmsgb2YgZGF0YS4gICovCisgICAgICBtZW1jcHkgKGJ1ZmZlciwgYnVmLCBuYnl0ZXMpOworICAgICAgYnVmZmVyID0gKChjaGFyICopIGJ1ZmZlcikgKyBuYnl0ZXM7CisgICAgfQorICB3aGlsZSAocmVxX25ieXRlcyk7CisKKyAgYXRoX211dGV4X3VubG9jayAoJmRhZW1vbl9sb2NrKTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBmaWxsIEJVRkZFUiB3aXRoIExFTkdUSCBieXRlcyBvZiByYW5kb20uICBXZQorICAgc3VwcG9ydCBHQ1JZX1NUUk9OR19SQU5ET00gYW5kIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NIGhlcmUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAqLworaW50CitfZ2NyeV9kYWVtb25fcmFuZG9taXplIChjb25zdCBjaGFyICpzb2NrZXRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVycjsKKworICBlcnIgPSBjYWxsX2RhZW1vbiAoc29ja2V0bmFtZSwgYnVmZmVyLCBsZW5ndGgsIDAsIGxldmVsKTsKKworICByZXR1cm4gZXJyID8gLTEgOiAwOworfQorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3JhbmRvbS9yYW5kb20tZmlwcy5jIGIvcmFuZG9tL3JhbmRvbS1maXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwODI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9yYW5kb20tZmlwcy5jCkBAIC0wLDAgKzEsMTEyOSBAQAorLyogcmFuZG9tLWZpcHMuYyAtIEZJUFMgc3R5bGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgICBUaGUgY29yZSBvZiB0aGlzIGRldGVybWluaXN0aWMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaXMKKyAgIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgIk5JU1QtUmVjb21tZW5kZWQgUmFuZG9tCisgICBOdW1iZXIgR2VuZXJhdG9yIEJhc2VkIG9uIEFOU0kgWDkuMzEgQXBwZW5kaXggQS4yLjQgVXNpbmcgdGhlIDMtS2V5CisgICBUcmlwbGUgREVTIGFuZCBBRVMgQWxnb3JpdGhtcyIgKDIwMDUtMDEtMzEpLiAgVGhpcyBpbXBsZW1lbnRhdGlvbgorICAgdXNlcyB0aGUgQUVTIHZhcmlhbnQuCisKKyAgIFRoZXJlIGFyZSAzIHJhbmRvbSBjb250ZXh0IHdoaWNoIG1hcCB0byB0aGUgZGlmZmVyZW50IGxldmVscyBvZgorICAgcmFuZG9tIHF1YWxpdHk6CisKKyAgIEdlbmVyYXRvciAgICAgICAgICAgICAgICBTZWVkIGFuZCBLZXkgICAgICAgIEtlcm5lbCBlbnRyb3B5IChpbml0L3Jlc2VlZCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gIC9kZXYvcmFuZG9tICAgICAgICAgMjU2LzEyOCBiaXRzCisgICBHQ1JZX1NUUk9OR19SQU5ET00gICAgICAgL2Rldi9yYW5kb20gICAgICAgICAyNTYvMTI4IGJpdHMKKyAgIGdjcnlfY3JlYXRlX25vbmNlICAgICAgICBHQ1JZX1NUUk9OR19SQU5ET00gIG4vYQorCisgICBBbGwgcmFuZG9tIGdlbmVyYXRvcnMgcmV0dXJuIHRoZWlyIGRhdGEgaW4gMTI4IGJpdCBibG9ja3MuICBJZiB0aGUKKyAgIGNhbGxlciByZXF1ZXN0ZWQgbGVzcyBiaXRzLCB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQuICBUaGUga2V5CisgICBmb3IgZWFjaCBnZW5lcmF0b3IgaXMgb25seSBzZXQgb25jZSBhdCB0aGUgZmlyc3QgdGltZSBhIGdlbmVyYXRvcgorICAgaXMgdXNlZC4gIFRoZSBzZWVkIHZhbHVlIGlzIHNldCB3aXRoIHRoZSBrZXkgYW5kIGFnYWluIGFmdGVyIDEwMDAKKyAgIChTRUVEX1RUTCkgb3V0cHV0IGJsb2NrczsgdGhlIHJlLXNlZWRpbmcgaXMgZGlzYWJsZWQgaW4gdGVzdCBtb2RlLgorCisgICBUaGUgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gYW5kIEdDUllfU1RST05HX1JBTkRPTSBnZW5lcmF0b3JzIGFyZQorICAga2V5ZWQgYW5kIHNlZWRlZCBmcm9tIHRoZSAvZGV2L3JhbmRvbSBkZXZpY2UuICBUaHVzIHRoZXNlCisgICBnZW5lcmF0b3JzIG1heSBibG9jayB1bnRpbCB0aGUga2VybmVsIGhhcyBjb2xsZWN0ZWQgZW5vdWdoIGVudHJvcHkuCisKKyAgIFRoZSBnY3J5X2NyZWF0ZV9ub25jZSBnZW5lcmF0b3IgaXMga2V5ZWQgYW5kIHNlZWRlZCBmcm9tIHRoZQorICAgR0NSWV9TVFJPTkdfUkFORE9NIGdlbmVyYXRvci4gIEl0IG1heSBhbHNvIGJsb2NrIGlmIHRoZQorICAgR0NSWV9TVFJPTkdfUkFORE9NIGdlbmVyYXRvciBoYXMgbm90IHlldCBiZWVuIHVzZWQgYmVmb3JlIGFuZCB0aHVzCisgICBnZXRzIGluaXRpYWxpemVkIG9uIHRoZSBmaXJzdCB1c2UgYnkgZ2NyeV9jcmVhdGVfbm9uY2UuICBUaGlzCisgICBzcGVjaWFsIHRyZWF0bWVudCBpcyBqdXN0aWZpZWQgYnkgdGhlIHdlYWtlciByZXF1aXJlbWVudHMgZm9yIGEKKyAgIG5vbmNlIGdlbmVyYXRvciBhbmQgdG8gc2F2ZSBwcmVjaW91cyBrZXJuZWwgZW50cm9weSBmb3IgdXNlIGJ5IHRoZQorICAgcmVhbCByYW5kb20gZ2VuZXJhdG9ycy4KKworICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKyNpbmNsdWRlICJyYW5kLWludGVybmFsLmgiCisjaW5jbHVkZSAiYXRoLmgiCisKKy8qIFRoaXMgaXMgdGhlIGxvY2sgd2UgdXNlIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhpcyBSTkcuICBUaGUgZXh0cmEKKyAgIGludGVnZXIgdmFyaWFibGUgaXMgb25seSB1c2VkIHRvIGNoZWNrIHRoZSBsb2NraW5nIHN0YXRlOyB0aGF0IGlzLAorICAgaXQgaXMgbm90IG1lYW50IHRvIGJlIHRocmVhZC1zYWZlIGJ1dCBtZXJlbHkgYXMgYSBmYWlsc2FmZSBmZWF0dXJlCisgICB0byBhc3NlcnQgcHJvcGVyIGxvY2tpbmcuICAqLworc3RhdGljIGF0aF9tdXRleF90IGZpcHNfcm5nX2xvY2s7CitzdGF0aWMgaW50IGZpcHNfcm5nX2lzX2xvY2tlZDsKKworCisvKiBUaGUgcmVxdWlyZWQgc2l6ZSBmb3IgdGhlIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhlIHg5MzFfYWVzX2RyaXZlcgorICAgZnVuY3Rpb24gYW5kIHRoZSBidWZmZXIgaXRzZWxmIHdoaWNoIHdpbGwgYmUgYWxsb2NhdGVkIGluIHNlY3VyZQorICAgbWVtb3J5LiAgVGhpcyBuZWVkcyB0byBiZSBnbG9iYWwgdmFyaWFibGUgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbgorICAgYW5kIHRvIGFsbG93IHNodXR0aW5nIGRvd24gdGhlIFJORyB3aXRob3V0IGxlYWtpbmcgbWVtb3J5LiAgTWF5CisgICBvbmx5IGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgRklQU19STkdfTE9DSy4KKworICAgVGhpcyB2YXJpYWJsZSBpcyBhbHNvIHVzZWQgdG8gYXZvaWQgZHVwbGljYXRlIGluaXRpYWxpemF0aW9uLiAgKi8KKyNkZWZpbmUgVEVNUFZBTFVFX0ZPUl9YOTMxX0FFU19EUklWRVJfU0laRSA0OAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRlbXB2YWx1ZV9mb3JfeDkzMV9hZXNfZHJpdmVyOworCisKKy8qIEFmdGVyIGhhdmluZyByZXRyaWV2ZWQgdGhpcyBudW1iZXIgb2YgYmxvY2tzIGZyb20gdGhlIFJORywgd2Ugd2FudAorICAgdG8gZG8gYSByZXNlZWRpbmcuICAqLworI2RlZmluZSBTRUVEX1RUTCAxMDAwCisKKworLyogVGhlIGxlbmd0aCBvZiB0aGUga2V5IHdlIHVzZTogIDE2IGJ5dGVzICgxMjggYml0KSBmb3IgQUVTMTI4LiAgKi8KKyNkZWZpbmUgWDkzMV9BRVNfS0VZTEVOICAxNgorLyogQSBnbG9iYWwgYnVmZmVyIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgeDkzMV9nZW5lcmF0ZV9rZXkKKyAgIGFuZCB4OTMxX2dlbmVyYXRlX3NlZWQgZnVuY3Rpb25zIGFuZCB0aGUgZW50cm9weV9jb2xsZWN0X2NiCisgICBmdW5jdGlvbi4gIEl0IG1heSBvbmx5IGJlIHVzZWQgYnkgdGhlc2UgZnVuY3Rpb25zLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmVudHJvcHlfY29sbGVjdF9idWZmZXI7ICAvKiBCdWZmZXIuICAqLworc3RhdGljIHNpemVfdCBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX2xlbjsgICAgICAvKiBVc2VkIGxlbmd0aC4gICovCitzdGF0aWMgc2l6ZV90IGVudHJvcHlfY29sbGVjdF9idWZmZXJfc2l6ZTsgICAgIC8qIEFsbG9jYXRlZCBsZW5ndGguICAqLworCisKKy8qIFRoaXMgcmFuZG9tIGNvbnRleHQgdHlwZSBpcyB1c2VkIHRvIHRyYWNrIHByb3BlcnRpZXMgb2Ygb25lIHJhbmRvbQorICAgZ2VuZXJhdG9yLiBUaGVlIGNvbnRleHQgYXJlIHVzdWFsbHkgYWxsb2NhdGVkIGluIHNlY3VyZSBtZW1vcnkgc28KKyAgIHRoYXQgdGhlIHNlZWQgdmFsdWUgaXMgd2VsbCBwcm90ZWN0ZWQuICBUaGVyZSBhcmUgYSBjb3VibGUgb2YgZ3VhcmQKKyAgIGZpZWxkcyB0byBoZWxwIGRldGVjdGluZyBhcHBsaWNhdGlvbnMgYWNjaWRlbnRseSBvdmVyd3JpdGluZyBwYXJ0cworICAgb2YgdGhlIG1lbW9yeS4gKi8KK3N0cnVjdCBybmdfY29udGV4dAoreworICB1bnNpZ25lZCBjaGFyIGd1YXJkXzBbMV07CisKKyAgLyogVGhlIGhhbmRsZSBvZiB0aGUgY2lwaGVyIHVzZWQgYnkgdGhlIFJORy4gIElmIHRoaXMgb25lIGlzIG5vdAorICAgICBOVUxMIGEgY2lwaGVyIGhhbmRsZSBhbG9uZyB3aXRoIGEgcmFuZG9tIGtleSBoYXMgYmVlbgorICAgICBlc3RhYmxpc2hlZC4gICovCisgIGdjcnlfY2lwaGVyX2hkX3QgY2lwaGVyX2hkOworCisgIC8qIElmIHRoaXMgZmxhZyBpcyB0cnVlLCB0aGUgU0VFRF9WIGJ1ZmZlciBiZWxvdyBjYXJyaWVzIGEgdmFsaWQKKyAgICAgc2VlZC4gICovCisgIGludCBpc19zZWVkZWQ6MTsKKworICAvKiBUaGUgdmVyeSBmaXJzdCBibG9jayBnZW5lcmF0ZWQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSByZXN1bHQKKyAgICAgYWdhaW5zdCB0aGUgbGFzdCByZXN1bHQuICBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgc3VjaCBhIGJsb2NrCisgICAgIGlzIGF2YWlsYWJsZS4gICovCisgIGludCBjb21wYXJlX3ZhbHVlX3ZhbGlkOjE7CisKKyAgLyogQSBjb3VudGVyIHVzZWQgdG8gdHJpZ2dlciByZS1zZWVkaW5nLiAgKi8KKyAgdW5zaWduZWQgaW50IHVzZV9jb3VudGVyOworCisgIHVuc2lnbmVkIGNoYXIgZ3VhcmRfMVsxXTsKKworICAvKiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHNlZWQgdmFsdWUgVi4gICovCisgIHVuc2lnbmVkIGNoYXIgc2VlZF9WWzE2XTsKKworICB1bnNpZ25lZCBjaGFyIGd1YXJkXzJbMV07CisKKyAgLyogVGhlIGxhc3QgcmVzdWx0IGZyb20gdGhlIHg5MzFfYWVzIGZ1bmN0aW9uLiAgT25seSB2YWxpZCBpZgorICAgICBjb21wYXJlX3ZhbHVlX3ZhbGlkIGlzIHNldC4gICovCisgIHVuc2lnbmVkIGNoYXIgY29tcGFyZV92YWx1ZVsxNl07CisKKyAgdW5zaWduZWQgY2hhciBndWFyZF8zWzFdOworCisgIC8qIFRoZSBleHRlcm5hbCB0ZXN0IG1heSB3YW50IHRvIHN1cHByZXNzIHRoZSBkdXBsaWNhdGUgYm9jayBjaGVjay4KKyAgICAgVGhpcyBpcyBkb25lIGlmIHRoZSB0aGlzIGZsYWcgaXMgc2V0LiAgKi8KKyAgdW5zaWduZWQgY2hhciB0ZXN0X25vX2R1cF9jaGVjazsKKyAgLyogVG8gaW1wbGVtZW50IGEgS0FUIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGtub3cgRFQgdmFsdWUuICBUbworICAgICBhY2NvbXBsaXNoIHRoaXMgdGhlIHg5MzFfZ2V0X2R0IGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoaXMKKyAgICAgZmllbGQgaXMgbm90IE5VTEwgYW5kIHRoZW4gdXNlcyB0aGUgMTYgYnl0ZXMgYXQgdGhpcyBhZGRyZXNzIGZvcgorICAgICB0aGUgRFQgdmFsdWUuICBIb3dldmVyIHRoZSBsYXN0IDQgYnl0ZXMgYXJlIHJlcGxhY2VkIGJ5IHRoZQorICAgICB2YWx1ZSBvZiBmaWVsZCBURVNUX0RUX0NPVU5URVIgd2hpY2ggd2lsbCBiZSBpbmNyZW1lbnRlZCBhZnRlcgorICAgICBlYWNoIGludm9jYXRpb24gb2YgeDkzMV9nZXRfZHQuIFdlIHVzZSBhIHBvaW50ZXIgYW5kIG5vdCBhIGJ1ZmZlcgorICAgICBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHV0IHRoaXMgdmFsdWUgaW50byBzZWN1cmUgbWVtb3J5LiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqdGVzdF9kdF9wdHI7CisgIHUzMiB0ZXN0X2R0X2NvdW50ZXI7CisKKyAgLyogV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBwcm9jZXNzIHdoaWNoIGRpZCB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IGEgZm9yay4gIFRoZSB2b2xhdGlsZSBtb2RpZmllciBpcyByZXF1aXJlZAorICAgICBzbyB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCBvcHRpbWl6ZSBpdCBhd2F5IGluIGNhc2UgdGhlIGdldHBpZAorICAgICBmdW5jdGlvbiBpcyBiYWRseSBhdHRyaWJ1dGVkLiAgKi8KKyAgcGlkX3Qga2V5X2luaXRfcGlkOworICBwaWRfdCBzZWVkX2luaXRfcGlkOworfTsKK3R5cGVkZWYgc3RydWN0IHJuZ19jb250ZXh0ICpybmdfY29udGV4dF90OworCisKKy8qIFRoZSByYW5kb20gY29udGV4dCB1c2VkIGZvciB0aGUgbm9uY2UgZ2VuZXJhdG9yLiAgTWF5IG9ubHkgYmUgdXNlZAorICAgd2hpbGUgaG9sZGluZyB0aGUgRklQU19STkdfTE9DSy4gICovCitzdGF0aWMgcm5nX2NvbnRleHRfdCBub25jZV9jb250ZXh0OworLyogVGhlIHJhbmRvbSBjb250ZXh0IHVzZWQgZm9yIHRoZSBzdGFuZGFyZCByYW5kb20gZ2VuZXJhdG9yLiAgTWF5CisgICBvbmx5IGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgRklQU19STkdfTE9DSy4gICovCitzdGF0aWMgcm5nX2NvbnRleHRfdCBzdGRfcm5nX2NvbnRleHQ7CisvKiBUaGUgcmFuZG9tIGNvbnRleHQgdXNlZCBmb3IgdGhlIHZlcnkgc3Ryb25nIHJhbmRvbSBnZW5lcmF0b3IuICBNYXkKKyAgIG9ubHkgYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZSBGSVBTX1JOR19MT0NLLiAgKi8KK3N0YXRpYyBybmdfY29udGV4dF90IHN0cm9uZ19ybmdfY29udGV4dDsKKworCisvKiAtLS0gTG9jYWwgcHJvdG90eXBlcyAtLS0gICovCitzdGF0aWMgdm9pZCB4OTMxX3Jlc2VlZCAocm5nX2NvbnRleHRfdCBybmdfY3R4KTsKK3N0YXRpYyB2b2lkIGdldF9yYW5kb20gKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgcm5nX2NvbnRleHRfdCBybmdfY3R4KTsKKworCisKKwwKKy8qIC0tLSBGdW5jdGlvbnMgIC0tLSAqLworCisvKiBCYXNpYyBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIG11dGV4ZXMgYW5kCisgICBkbyBhIGZldyBjaGVja3Mgb24gdGhlIGltcGxlbWVudGF0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCitiYXNpY19pbml0aWFsaXphdGlvbiAodm9pZCkKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKyAgaW50IG15X2Vycm5vOworCisgIGlmIChpbml0aWFsaXplZCkKKyAgICByZXR1cm47CisgIGluaXRpYWxpemVkID0gMTsKKworICBteV9lcnJubyA9IGF0aF9tdXRleF9pbml0ICgmZmlwc19ybmdfbG9jayk7CisgIGlmIChteV9lcnJubykKKyAgICBsb2dfZmF0YWwgKCJmYWlsZWQgdG8gY3JlYXRlIHRoZSBSTkcgbG9jazogJXNcbiIsIHN0cmVycm9yIChteV9lcnJubykpOworICBmaXBzX3JuZ19pc19sb2NrZWQgPSAwOworCisgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBzdGlsbCB1c2luZyB0aGUgdmFsdWVzIHdlIGhhdmUKKyAgICAgdHJhZGl0aW9uYWxseSB1c2VkIGZvciB0aGUgcmFuZG9tIGxldmVscy4gICovCisgIGdjcnlfYXNzZXJ0IChHQ1JZX1dFQUtfUkFORE9NID09IDAKKyAgICAgICAgICAgICAgICYmIEdDUllfU1RST05HX1JBTkRPTSA9PSAxCisgICAgICAgICAgICAgICAmJiBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSA9PSAyKTsKKworfQorCisKKy8qIEFjcXVpcmUgdGhlIGZpcHNfcm5nX2xvY2suICAqLworc3RhdGljIHZvaWQKK2xvY2tfcm5nICh2b2lkKQoreworICBpbnQgbXlfZXJybm87CisKKyAgbXlfZXJybm8gPSBhdGhfbXV0ZXhfbG9jayAoJmZpcHNfcm5nX2xvY2spOworICBpZiAobXlfZXJybm8pCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIGFjcXVpcmUgdGhlIFJORyBsb2NrOiAlc1xuIiwgc3RyZXJyb3IgKG15X2Vycm5vKSk7CisgIGZpcHNfcm5nX2lzX2xvY2tlZCA9IDE7Cit9CisKKworLyogUmVsZWFzZSB0aGUgZmlwc19ybmdfbG9jay4gICovCitzdGF0aWMgdm9pZAordW5sb2NrX3JuZyAodm9pZCkKK3sKKyAgaW50IG15X2Vycm5vOworCisgIGZpcHNfcm5nX2lzX2xvY2tlZCA9IDA7CisgIG15X2Vycm5vID0gYXRoX211dGV4X3VubG9jayAoJmZpcHNfcm5nX2xvY2spOworICBpZiAobXlfZXJybm8pCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIHJlbGVhc2UgdGhlIFJORyBsb2NrOiAlc1xuIiwgc3RyZXJyb3IgKG15X2Vycm5vKSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR1cF9ndWFyZHMgKHJuZ19jb250ZXh0X3Qgcm5nX2N0eCkKK3sKKyAgLyogU2V0IHRoZSBndWFyZHMgdG8gc29tZSBhcmJpdHJhcnkgdmFsdWVzLiAgKi8KKyAgcm5nX2N0eC0+Z3VhcmRfMFswXSA9IDE3OworICBybmdfY3R4LT5ndWFyZF8xWzBdID0gNDI7CisgIHJuZ19jdHgtPmd1YXJkXzJbMF0gPSAxMzc7CisgIHJuZ19jdHgtPmd1YXJkXzNbMF0gPSAyNTI7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19ndWFyZHMgKHJuZ19jb250ZXh0X3Qgcm5nX2N0eCkKK3sKKyAgaWYgKCBybmdfY3R4LT5ndWFyZF8wWzBdICE9IDE3CisgICAgICAgfHwgcm5nX2N0eC0+Z3VhcmRfMVswXSAhPSA0MgorICAgICAgIHx8IHJuZ19jdHgtPmd1YXJkXzJbMF0gIT0gMTM3CisgICAgICAgfHwgcm5nX2N0eC0+Z3VhcmRfM1swXSAhPSAyNTIgKQorICAgIGxvZ19mYXRhbCAoIm1lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkIGluIFJORyBjb250ZXh0ICVwXG4iLCBybmdfY3R4KTsKK30KKworCisvKiBHZXQgdGhlIERUIHZlY3RvciBmb3IgdXNlIHdpdGggdGhlIGNvcmUgUFJORyBmdW5jdGlvbi4gIEJ1ZmZlcgorICAgbmVlZHMgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciB3aXRoIGEgc2l6ZSBvZiBhdCBsZWFzdCBMRU5HVEgKKyAgIGJ5dGVzLiBSTkdfQ1RYIG5lZWRzIHRvIGJlIHBhc3NlZCB0byBhbGxvdyBmb3IgYSBLQVQuICBUaGUgMTYgYnl0ZQorICAgdGltZXN0YW1wIHdlIGNvbnN0cnVjdCBpcyBtYWRlIHVwIHRoZSByZWFsIHRpbWUgYW5kIHRocmVlIGNvdW50ZXJzOgorCisgICBCdWZmZXI6ICAgICAgIDAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGCisgICAgICAgICAgICAgICAgICEtLSstLS0hIS0rLSEhKyEhLS0rLS0tISEtLSstLS0hCisgICBzZWNvbmRzIC0tLS0tLS0tLS8gICAgICB8ICAgfCAgICB8ICAgICAgIHwKKyAgIG1pY3Jvc2Vjb25kcyAtLS0tLS0tLS0tLS8gICB8ICAgIHwgICAgICAgfAorICAgY291bnRlcjIgLS0tLS0tLS0tLS0tLS0tLS0tLS8gICAgfCAgICAgICB8CisgICBjb3VudGVyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vICAgICAgIHwKKyAgIGNvdW50ZXIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworCisgICBDb3VudGVyIDIgaXMganVzdCAxMiBiaXRzIHdpZGUgYW5kIHVzZWQgdG8gdHJhY2sgZnJhY3Rpb25zIG9mCisgICBtaWxsaXNlY29uZHMgd2hlcmVhcyBjb3VudGVycyAxIGFuZCAwIGFyZSBjb21iaW5lZCB0byBhIGZyZWUKKyAgIHJ1bm5pbmcgNjQgYml0IGNvdW50ZXIuICAqLworc3RhdGljIHZvaWQKK3g5MzFfZ2V0X2R0ICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHJuZ19jb250ZXh0X3Qgcm5nX2N0eCkKK3sKKyAgZ2NyeV9hc3NlcnQgKGxlbmd0aCA9PSAxNik7IC8qIFRoaXMgbGVuZ3RoIGlzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aCBBRVMuICAqLworICBnY3J5X2Fzc2VydCAoZmlwc19ybmdfaXNfbG9ja2VkKTsKKworICAvKiBJZiB0aGUgcmFuZG9tIGNvbnRleHQgaW5kaWNhdGVzIHRoYXQgYSB0ZXN0IERUIHNob3VsZCBiZSB1c2VkLAorICAgICB0YWtlIHRoZSBEVCB2YWx1ZSBmcm9tIHRoZSBjb250ZXh0LiAgRm9yIHNhZmV0eSByZWFzb25zIHdlIGRvCisgICAgIHRoaXMgb25seSBpZiB0aGUgY29udGV4dCBpcyBub3Qgb25lIG9mIHRoZSByZWd1bGFyIGNvbnRleHRzLiAgKi8KKyAgaWYgKHJuZ19jdHgtPnRlc3RfZHRfcHRyCisgICAgICAmJiBybmdfY3R4ICE9IG5vbmNlX2NvbnRleHQKKyAgICAgICYmIHJuZ19jdHggIT0gc3RkX3JuZ19jb250ZXh0CisgICAgICAmJiBybmdfY3R4ICE9IHN0cm9uZ19ybmdfY29udGV4dCkKKyAgICB7CisgICAgICBtZW1jcHkgKGJ1ZmZlciwgcm5nX2N0eC0+dGVzdF9kdF9wdHIsIDE2KTsKKyAgICAgIGJ1ZmZlclsxMl0gPSAocm5nX2N0eC0+dGVzdF9kdF9jb3VudGVyID4+IDI0KTsKKyAgICAgIGJ1ZmZlclsxM10gPSAocm5nX2N0eC0+dGVzdF9kdF9jb3VudGVyID4+IDE2KTsKKyAgICAgIGJ1ZmZlclsxNF0gPSAocm5nX2N0eC0+dGVzdF9kdF9jb3VudGVyID4+IDgpOworICAgICAgYnVmZmVyWzE1XSA9IHJuZ19jdHgtPnRlc3RfZHRfY291bnRlcjsKKyAgICAgIHJuZ19jdHgtPnRlc3RfZHRfY291bnRlcisrOworICAgICAgcmV0dXJuOworICAgIH0KKworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgeworICAgIHN0YXRpYyB1MzIgbGFzdF9zZWMsIGxhc3RfdXNlYzsKKyAgICBzdGF0aWMgdTMyIGNvdW50ZXIxLCBjb3VudGVyMDsKKyAgICBzdGF0aWMgdTE2IGNvdW50ZXIyOworCisgICAgdW5zaWduZWQgaW50IHVzZWM7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBpZiAoIWxhc3Rfc2VjKQorICAgICAgeworICAgICAgICAvKiBUaGlzIGlzIHRoZSB2ZXJ5IGZpcnN0IHRpbWUgd2UgYXJlIGNhbGxlZDogU2V0IHRoZSBjb3VudGVycworICAgICAgICAgICB0byBhbiBub3Qgc28gZWFzeSBwcmVkaWN0YWJsZSB2YWx1ZSB0byBhdm9pZCBhbHdheXMKKyAgICAgICAgICAgc3RhcnRpbmcgYXQgMC4gIE5vdCByZWFsbHkgbmVlZGVkIGJ1dCBpdCBkb2Vzbid0IGhhcm0uICAqLworICAgICAgICBjb3VudGVyMSA9ICh1MzIpZ2V0cGlkICgpOworI2lmbmRlZiBIQVZFX1czMl9TWVNURU0KKyAgICAgICAgY291bnRlcjAgPSAodTMyKWdldHBwaWQgKCk7CisjZW5kaWYKKyAgICAgIH0KKworCisgICAgaWYgKGdldHRpbWVvZmRheSAoJnR2LCBOVUxMKSkKKyAgICAgIGxvZ19mYXRhbCAoImdldHRpbWVvZmRheSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworCisgICAgLyogVGhlIG1pY3Jvc2Vjb25kcyBwYXJ0IGlzIGFsd2F5cyBsZXNzIHRoYW4gMSBtaWxsb24gKDB4MGY0MjQwKS4KKyAgICAgICBUaHVzIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIE1TQiBhbmQgaW4gYWRkaXRpb24gc2hpZnQgaXQgdG8KKyAgICAgICB0aGUgbGVmdCBieSA0IGJpdHMuICAqLworICAgIHVzZWMgPSB0di50dl91c2VjOworICAgIHVzZWMgPDw9IDQ7CisgICAgLyogSWYgd2UgZ290IHRoZSBzYW1lIHRpbWUgYXMgYnkgdGhlIGxhc3QgaW52b2NhdGlvbiwgYnVtcCB1cAorICAgICAgIGNvdW50ZXIyIGFuZCBzYXZlIHRoZSB0aW1lIGZvciB0aGUgbmV4dCBpbnZvY2F0aW9uLiAgKi8KKyAgICBpZiAodHYudHZfc2VjID09IGxhc3Rfc2VjICYmIHVzZWMgPT0gbGFzdF91c2VjKQorICAgICAgeworICAgICAgICBjb3VudGVyMisrOworICAgICAgICBjb3VudGVyMiAmPSAweDBmZmY7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgICBjb3VudGVyMiA9IDA7CisgICAgICAgIGxhc3Rfc2VjID0gdHYudHZfc2VjOworICAgICAgICBsYXN0X3VzZWMgPSB1c2VjOworICAgICAgfQorICAgIC8qIEZpbGwgdGhlIGJ1ZmZlciB3aXRoIHRoZSB0aW1lc3RhbXAuICAqLworICAgIGJ1ZmZlclswXSA9ICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworICAgIGJ1ZmZlclsxXSA9ICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworICAgIGJ1ZmZlclsyXSA9ICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7CisgICAgYnVmZmVyWzNdID0gKHR2LnR2X3NlYyAmIDB4ZmYpOworICAgIGJ1ZmZlcls0XSA9ICgodXNlYyA+PiAxNikgJiAweGZmKTsKKyAgICBidWZmZXJbNV0gPSAoKHVzZWMgPj4gOCkgJiAweGZmKTsKKyAgICBidWZmZXJbNl0gPSAoKHVzZWMgJiAweGYwKSB8ICgoY291bnRlcjIgPj4gOCkgJiAweDBmKSk7CisgICAgYnVmZmVyWzddID0gKGNvdW50ZXIyICYgMHhmZik7CisgICAgLyogQWRkIHRoZSBmcmVlIHJ1bm5pbmcgY291bnRlci4gICovCisgICAgYnVmZmVyWzhdICA9ICgoY291bnRlcjEgPj4gMjQpICYgMHhmZik7CisgICAgYnVmZmVyWzldICA9ICgoY291bnRlcjEgPj4gMTYpICYgMHhmZik7CisgICAgYnVmZmVyWzEwXSA9ICgoY291bnRlcjEgPj4gOCkgJiAweGZmKTsKKyAgICBidWZmZXJbMTFdID0gKChjb3VudGVyMSkgJiAweGZmKTsKKyAgICBidWZmZXJbMTJdID0gKChjb3VudGVyMCA+PiAyNCkgJiAweGZmKTsKKyAgICBidWZmZXJbMTNdID0gKChjb3VudGVyMCA+PiAxNikgJiAweGZmKTsKKyAgICBidWZmZXJbMTRdID0gKChjb3VudGVyMCA+PiA4KSAmIDB4ZmYpOworICAgIGJ1ZmZlclsxNV0gPSAoKGNvdW50ZXIwKSAmIDB4ZmYpOworICAgIC8qIEJ1bXAgdXAgdGhhdCBjb3VudGVyLiAgKi8KKyAgICBpZiAoISsrY291bnRlcjApCisgICAgICArK2NvdW50ZXIxOworICB9CisjZWxzZQorICBsb2dfZmF0YWwgKCJnZXR0aW1lb2ZkYXkoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtXG4iKTsKKyNlbmRpZgorCisgIC8qIGxvZ19wcmludGhleCAoIng5MzFfZ2V0X2R0OiAiLCBidWZmZXIsIDE2KTsgKi8KK30KKworCisvKiBYT1IgdGhlIGJ1ZmZlcnMgQSBhbmQgQiB3aGljaCBhcmUgZWFjaCBvZiBMRU5HVEggYnl0ZXMgYW5kIHN0b3JlCisgICB0aGUgcmVzdWx0IGF0IFIuICBSIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgd2l0aCBhIHNpemUKKyAgIG9mIGF0IGxlYXN0IExFTkdUSCBieXRlcy4gICovCitzdGF0aWMgdm9pZAoreG9yX2J1ZmZlciAodW5zaWduZWQgY2hhciAqciwKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIHNpemVfdCBsZW5ndGgpCit7CisgIGZvciAoIDsgbGVuZ3RoOyBsZW5ndGgtLSwgYSsrLCBiKyssIHIrKykKKyAgICAqciA9ICgqYSBeICpiKTsKK30KKworCisvKiBFbmNyeXB0IExFTkdUSCBieXRlcyBvZiBJTlBVVCB0byBPVVRQVVQgdXNpbmcgS0VZLiAgTEVOR1RICisgICBuZWVkcyB0byBiZSAxNi4gKi8KK3N0YXRpYyB2b2lkCitlbmNyeXB0X2FlcyAoZ2NyeV9jaXBoZXJfaGRfdCBrZXksCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworCisgIGdjcnlfYXNzZXJ0IChsZW5ndGggPT0gMTYpOworCisgIGVyciA9IF9nY3J5X2NpcGhlcl9lbmNyeXB0IChrZXksIG91dHB1dCwgbGVuZ3RoLCBpbnB1dCwgbGVuZ3RoKTsKKyAgaWYgKGVycikKKyAgICBsb2dfZmF0YWwgKCJBRVMgZW5jcnlwdGlvbiBpbiBSTkcgZmFpbGVkOiAlc1xuIiwgX2djcnlfc3RyZXJyb3IgKGVycikpOworfQorCisKKy8qIFRoZSBjb3JlIEFOU0kgWDkuMzEsIEFwcGVuZGl4IEEuMi40IGZ1bmN0aW9uIHVzaW5nIEFFUy4gIFRoZSBjYWxsZXIKKyAgIG5lZWRzIHRvIHBhc3MgYSAxNiBieXRlIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCwgdGhlIDE2IGJ5dGUKKyAgIGRhdGV0aW1lX0RUIHZhbHVlIGFuZCB0aGUgMTYgYnl0ZSBzZWVkIHZhbHVlIFYuICBUaGUgY2FsbGVyIGFsc28KKyAgIG5lZWRzIHRvIHBhc3MgYW4gYXBwcm9wcmlhdGUgS0VZIGFuZCBtYWtlIHN1cmUgdG8gcGFzcyBhIHZhbGlkCisgICBzZWVkX1YuICBUaGUgY2FsbGVyIGFsc28gbmVlZHMgdG8gcHJvdmlkZSB0d28gMTYgYnl0ZXMgYnVmZmVyIGZvcgorICAgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHRoZXkgbWF5IGJlIHJldXNlZCBieSB0aGUgY2FsbGVyIGxhdGVyLgorCisgICBPbiByZXR1cm4gdGhlIHJlc3VsdCBpcyBzdG9yZWQgYXQgUkVTVUxUX1IgYW5kIHRoZSBTRUVEX1YgaXMKKyAgIHVwZGF0ZWQuICBNYXkgb25seSBiZSB1c2VkIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suICAqLworc3RhdGljIHZvaWQKK3g5MzFfYWVzICh1bnNpZ25lZCBjaGFyIHJlc3VsdF9SWzE2XSwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGV0aW1lX0RUWzE2XSwgdW5zaWduZWQgY2hhciBzZWVkX1ZbMTZdLAorICAgICAgICAgIGdjcnlfY2lwaGVyX2hkX3Qga2V5LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW50ZXJtZWRpYXRlX0lbMTZdLCB1bnNpZ25lZCBjaGFyIHRlbXBfeG9yWzE2XSkKK3sKKyAgLyogTGV0IGVkZSpYKFkpIHJlcHJlc2VudCB0aGUgQUVTIGVuY3J5cHRpb24gb2YgWSB1bmRlciB0aGUga2V5ICpYLgorCisgICAgIExldCBWIGJlIGEgMTI4LWJpdCBzZWVkIHZhbHVlIHdoaWNoIGlzIGFsc28ga2VwdCBzZWNyZXQsIGFuZCBYT1IKKyAgICAgYmUgdGhlIGV4Y2x1c2l2ZS1vciBvcGVyYXRvci4gTGV0IERUIGJlIGEgZGF0ZS90aW1lIHZlY3RvciB3aGljaAorICAgICBpcyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0aW9uLiBJIGlzIGEgaW50ZXJtZWRpYXRlIHZhbHVlLgorCisgICAgIEkgPSBlZGUqSyhEVCkgICovCisgIGVuY3J5cHRfYWVzIChrZXksIGludGVybWVkaWF0ZV9JLCBkYXRldGltZV9EVCwgMTYpOworCisgIC8qIFIgPSBlZGUqSyhJIFhPUiBWKSAqLworICB4b3JfYnVmZmVyICh0ZW1wX3hvciwgaW50ZXJtZWRpYXRlX0ksIHNlZWRfViwgMTYpOworICBlbmNyeXB0X2FlcyAoa2V5LCByZXN1bHRfUiwgdGVtcF94b3IsIDE2KTsKKworICAvKiBWID0gZWRlKksoUiBYT1IgSSkuICAqLworICB4b3JfYnVmZmVyICh0ZW1wX3hvciwgcmVzdWx0X1IsIGludGVybWVkaWF0ZV9JLCAxNik7CisgIGVuY3J5cHRfYWVzIChrZXksIHNlZWRfViwgdGVtcF94b3IsIDE2KTsKKworICAvKiBaZXJvIG91dCB0ZW1wb3JhcnkgdmFsdWVzLiAgKi8KKyAgd2lwZW1lbW9yeSAoaW50ZXJtZWRpYXRlX0ksIDE2KTsKKyAgd2lwZW1lbW9yeSAodGVtcF94b3IsIDE2KTsKK30KKworCisvKiBUaGUgaGlnaCBsZXZlbCBkcml2ZXIgdG8geDkzMV9hZXMuICBUaGlzIG9uZSBkb2VzIHRoZSByZXF1aXJlZAorICAgdGVzdHMgYW5kIGNhbGxzIHRoZSBjb3JlIGZ1bmN0aW9uIHVudGlsIHRoZSBlbnRpcmUgYnVmZmVyIGhhcyBiZWVuCisgICBmaWxsZWQuICBPVVRQVVQgaXMgYSBjYWxsZXIgcHJvdmlkZWQgYnVmZmVyIG9mIExFTkdUSCBieXRlcyB0bworICAgcmVjZWl2ZSB0aGUgcmFuZG9tLCBSTkdfQ1RYIGlzIHRoZSBjb250ZXh0IG9mIHRoZSBSTkcuICBUaGUgY29udGV4dAorICAgbXVzdCBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGludAoreDkzMV9hZXNfZHJpdmVyICh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW5ndGgsIHJuZ19jb250ZXh0X3Qgcm5nX2N0eCkKK3sKKyAgdW5zaWduZWQgY2hhciBkYXRldGltZV9EVFsxNl07CisgIHVuc2lnbmVkIGNoYXIgKmludGVybWVkaWF0ZV9JLCAqdGVtcF9idWZmZXIsICpyZXN1bHRfYnVmZmVyOworICBzaXplX3QgbmJ5dGVzOworCisgIGdjcnlfYXNzZXJ0IChmaXBzX3JuZ19pc19sb2NrZWQpOworICBnY3J5X2Fzc2VydCAocm5nX2N0eC0+Y2lwaGVyX2hkKTsKKyAgZ2NyeV9hc3NlcnQgKHJuZ19jdHgtPmlzX3NlZWRlZCk7CisKKyAgZ2NyeV9hc3NlcnQgKHRlbXB2YWx1ZV9mb3JfeDkzMV9hZXNfZHJpdmVyKTsKKyAgZ2NyeV9hc3NlcnQgKFRFTVBWQUxVRV9GT1JfWDkzMV9BRVNfRFJJVkVSX1NJWkUgPT0gNDgpOworICBpbnRlcm1lZGlhdGVfSSA9IHRlbXB2YWx1ZV9mb3JfeDkzMV9hZXNfZHJpdmVyOworICB0ZW1wX2J1ZmZlciAgICA9IHRlbXB2YWx1ZV9mb3JfeDkzMV9hZXNfZHJpdmVyICsgMTY7CisgIHJlc3VsdF9idWZmZXIgID0gdGVtcHZhbHVlX2Zvcl94OTMxX2Flc19kcml2ZXIgKyAzMjsKKworICB3aGlsZSAobGVuZ3RoKQorICAgIHsKKyAgICAgIC8qIFVubGVzcyB3ZSBhcmUgcnVubmluZyB3aXRoIGEgdGVzdCBjb250ZXh0LCB3ZSByZXF1aXJlIGEgbmV3CisgICAgICAgICBzZWVkIGFmdGVyIHNvbWUgdGltZS4gICovCisgICAgICBpZiAoIXJuZ19jdHgtPnRlc3RfZHRfcHRyICYmIHJuZ19jdHgtPnVzZV9jb3VudGVyID4gU0VFRF9UVEwpCisgICAgICAgIHsKKyAgICAgICAgICB4OTMxX3Jlc2VlZCAocm5nX2N0eCk7CisgICAgICAgICAgcm5nX2N0eC0+dXNlX2NvdW50ZXIgPSAwOworICAgICAgICB9CisKKyAgICAgIC8qIER1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBSTkcsIHdlIGFsd2F5cyByZWNlaXZlIDE2IGJ5dGVzICgxMjgKKyAgICAgICAgIGJpdCkgb2YgcmFuZG9tIGV2ZW4gaWYgd2UgcmVxdWlyZSBsZXNzLiAgVGhlIGV4dHJhIGJ5dGVzCisgICAgICAgICByZXR1cm5lZCBhcmUgbm90IHVzZWQuICBJbnRoZW9yeSB3ZSBjb3VsZCBzYXZlIHRoZW0gZm9yIHRoZQorICAgICAgICAgbmV4dCBpbnZvY2F0aW9uLCBidXQgdGhhdCB3b3VsZCBtYWtlIHRoZSBjb250cm9sIGZsb3cgaGFyZGVyCisgICAgICAgICB0byByZWFkLiAgKi8KKyAgICAgIG5ieXRlcyA9IGxlbmd0aCA8IDE2PyBsZW5ndGggOiAxNjsKKworICAgICAgeDkzMV9nZXRfZHQgKGRhdGV0aW1lX0RULCAxNiwgcm5nX2N0eCk7CisgICAgICB4OTMxX2FlcyAocmVzdWx0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICBkYXRldGltZV9EVCwgcm5nX2N0eC0+c2VlZF9WLCBybmdfY3R4LT5jaXBoZXJfaGQsCisgICAgICAgICAgICAgICAgaW50ZXJtZWRpYXRlX0ksIHRlbXBfYnVmZmVyKTsKKyAgICAgIHJuZ19jdHgtPnVzZV9jb3VudGVyKys7CisKKyAgICAgIGlmIChybmdfY3R4LT50ZXN0X25vX2R1cF9jaGVjaworICAgICAgICAgICYmIHJuZ19jdHgtPnRlc3RfZHRfcHRyCisgICAgICAgICAgJiYgcm5nX2N0eCAhPSBub25jZV9jb250ZXh0CisgICAgICAgICAgJiYgcm5nX2N0eCAhPSBzdGRfcm5nX2NvbnRleHQKKyAgICAgICAgICAmJiBybmdfY3R4ICE9IHN0cm9uZ19ybmdfY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoaXMgaXMgYSB0ZXN0IGNvbnRleHQgd2hpY2ggZG9lcyBub3Qgd2FudCB0aGUgZHVwbGljYXRlCisgICAgICAgICAgICAgYmxvY2sgY2hlY2suICovCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERvIGEgYmFzaWMgY2hlY2sgb24gdGhlIG91dHB1dCB0byBhdm9pZCBhIHN0dWNrIGdlbmVyYXRvci4gICovCisgICAgICAgICAgaWYgKCFybmdfY3R4LT5jb21wYXJlX3ZhbHVlX3ZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBGaXJzdCB0aW1lIHVzZWQsIG9ubHkgc2F2ZSB0aGUgcmVzdWx0LiAgKi8KKyAgICAgICAgICAgICAgbWVtY3B5IChybmdfY3R4LT5jb21wYXJlX3ZhbHVlLCByZXN1bHRfYnVmZmVyLCAxNik7CisgICAgICAgICAgICAgIHJuZ19jdHgtPmNvbXBhcmVfdmFsdWVfdmFsaWQgPSAxOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIW1lbWNtcCAocm5nX2N0eC0+Y29tcGFyZV92YWx1ZSwgcmVzdWx0X2J1ZmZlciwgMTYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBPb29wcywgd2UgcmVjZWl2ZWQgdGhlIHNhbWUgMTI4IGJpdCBibG9jayAtIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgIGluIHRoZW9yeSBuZXZlciBoYXBwZW4uICBUaGUgRklQUyByZXF1aXJlbWVudCBzYXlzIHRoYXQKKyAgICAgICAgICAgICAgICAgd2UgbmVlZCB0byBwdXQgb3Vyc2VsZiBpbnRvIHRoZSBlcnJvciBzdGF0ZSBpbiBzdWNoCisgICAgICAgICAgICAgICAgIGNhc2UuICAqLworICAgICAgICAgICAgICBmaXBzX3NpZ25hbF9lcnJvciAoImR1cGxpY2F0ZSAxMjggYml0IGJsb2NrIHJldHVybmVkIGJ5IFJORyIpOworICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgbWVtY3B5IChybmdfY3R4LT5jb21wYXJlX3ZhbHVlLCByZXN1bHRfYnVmZmVyLCAxNik7CisgICAgICAgIH0KKworICAgICAgLyogQXBwZW5kIHRvIG91dGJ1dC4gICovCisgICAgICBtZW1jcHkgKG91dHB1dCwgcmVzdWx0X2J1ZmZlciwgbmJ5dGVzKTsKKyAgICAgIHdpcGVtZW1vcnkgKHJlc3VsdF9idWZmZXIsIDE2KTsKKyAgICAgIG91dHB1dCArPSBuYnl0ZXM7CisgICAgICBsZW5ndGggLT0gbmJ5dGVzOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCisvKiBDYWxsYmFjayBmb3IgeDkzMV9nZW5lcmF0ZV9rZXkuIE5vdGUgdGhhdCB0aGlzIGNhbGxiYWNrIHVzZXMgdGhlCisgICBnbG9iYWwgRU5UUk9QWV9DT0xMRUNUX0JVRkZFUiB3aGljaCBoYXMgYmVlbiBzZXR1cCBieSBnZXRfZW50cm9weS4KKyAgIE9SSUdJTiBpcyBub3QgdXNlZCBidXQgcmVxdWlyZWQgZHVlIHRvIHRoZSBkZXNpZ24gb2YgZW50cm9weQorICAgZ2F0aGVyaW5nIG1vZHVsZS4gKi8KK3N0YXRpYyB2b2lkCitlbnRyb3B5X2NvbGxlY3RfY2IgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWZmZXI7CisKKyAgKHZvaWQpb3JpZ2luOworCisgIGdjcnlfYXNzZXJ0IChmaXBzX3JuZ19pc19sb2NrZWQpOworICBnY3J5X2Fzc2VydCAoZW50cm9weV9jb2xsZWN0X2J1ZmZlcik7CisKKyAgLyogTm90ZSB0aGF0IHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGdhdGhlcmVycyByZXR1cm5pbmcgbW9yZQorICAgICB0aGFuIHRoZSByZXF1ZXN0ZWQgYnl0ZXMgKGUuZy4gcm5kdzMyKS4gICovCisgIHdoaWxlIChsZW5ndGgtLSAmJiBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX2xlbiA8IGVudHJvcHlfY29sbGVjdF9idWZmZXJfc2l6ZSkKKyAgICB7CisgICAgICBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyW2VudHJvcHlfY29sbGVjdF9idWZmZXJfbGVuKytdIF49ICpwKys7CisgICAgfQorfQorCisKKy8qIEdldCBOQllURVMgb2YgZW50cm9weSBmcm9tIHRoZSBrZXJuZWwgZGV2aWNlLiAgVGhlIGNhbGxlcnMgbmVlZHMgdG8KKyAgIGZyZWUgdGhlIHJldHVybmVkIGJ1ZmZlci4gIFRoZSBmdW5jdGlvbiBlaXRoZXIgc3VjY2VlZHMgb3IKKyAgIHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MgaW4gY2FzZSBvZiBhIGZhdGFsIGVycm9yLiAqLworc3RhdGljIHZvaWQgKgorZ2V0X2VudHJvcHkgKHNpemVfdCBuYnl0ZXMpCit7CisgIHZvaWQgKnJlc3VsdDsKKyAgaW50IHJjOworCisgIGdjcnlfYXNzZXJ0ICghZW50cm9weV9jb2xsZWN0X2J1ZmZlcik7CisgIGVudHJvcHlfY29sbGVjdF9idWZmZXIgPSB4bWFsbG9jX3NlY3VyZSAobmJ5dGVzKTsKKyAgZW50cm9weV9jb2xsZWN0X2J1ZmZlcl9zaXplID0gbmJ5dGVzOworICBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX2xlbiA9IDA7CisKKyNpZiBVU0VfUk5ETElOVVgKKyAgcmMgPSBfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tIChlbnRyb3B5X2NvbGxlY3RfY2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDkzMV9BRVNfS0VZTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NKTsKKyNlbGlmIFVTRV9STkRXMzIKKyAgZG8KKyAgICB7CisgICAgICByYyA9IF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tIChlbnRyb3B5X2NvbGxlY3RfY2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYOTMxX0FFU19LRVlMRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSk7CisgICAgfQorICB3aGlsZSAocmMgPj0gMCAmJiBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX2xlbiA8IGVudHJvcHlfY29sbGVjdF9idWZmZXJfc2l6ZSk7CisjZWxzZQorICByYyA9IC0xOworI2VuZGlmCisKKyAgaWYgKHJjIDwgMCB8fCBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX2xlbiAhPSBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyX3NpemUpCisgICAgeworICAgICAgeGZyZWUgKGVudHJvcHlfY29sbGVjdF9idWZmZXIpOworICAgICAgZW50cm9weV9jb2xsZWN0X2J1ZmZlciA9IE5VTEw7CisgICAgICBsb2dfZmF0YWwgKCJlcnJvciBnZXR0aW5nIGVudHJvcHkgZGF0YVxuIik7CisgICAgfQorICByZXN1bHQgPSBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyOworICBlbnRyb3B5X2NvbGxlY3RfYnVmZmVyID0gTlVMTDsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBHZW5lcmF0ZSBhIGtleSBmb3IgdXNlIHdpdGggeDkzMV9hZXMuICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhCisgICBoYW5kbGUgdG8gdGhlIGNpcGhlciBjb250ZXh0IHJlYWRpbHkgcHJlcGFyZWQgZm9yIEVDQiBlbmNyeXB0aW9uLgorICAgSWYgRk9SX05PTkNFIGlzIHRydWUsIHRoZSBrZXkgaXMgcmV0cmlldmVkIGJ5IHJlYWRvbmcgcmFuZG9tIGZyb20KKyAgIHRoZSBzdGFuZGFyZCBnZW5lcmF0b3IuICBPbiBlcnJvciBOVUxMIGlzIHJldHVybmVkLiAgKi8KK3N0YXRpYyBnY3J5X2NpcGhlcl9oZF90Cit4OTMxX2dlbmVyYXRlX2tleSAoaW50IGZvcl9ub25jZSkKK3sKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZDsKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIHZvaWQgKmJ1ZmZlcjsKKworICBnY3J5X2Fzc2VydCAoZmlwc19ybmdfaXNfbG9ja2VkKTsKKworICAvKiBBbGxvY2F0ZSBhIGNpcGhlciBjb250ZXh0LiAgKi8KKyAgcmMgPSBfZ2NyeV9jaXBoZXJfb3BlbiAoJmhkLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1JZX0NJUEhFUl9TRUNVUkUpOworICBpZiAocmMpCisgICAgeworICAgICAgbG9nX2Vycm9yICgiZXJyb3IgY3JlYXRpbmcgY2lwaGVyIGNvbnRleHQgZm9yIFJORzogJXNcbiIsCisgICAgICAgICAgICAgICAgIF9nY3J5X3N0cmVycm9yIChyYykpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qIEdldCBhIGtleSBmcm9tIHRoZSBzdGFuZGFyZCBSTkcgb3IgZnJvbSB0aGUgZW50cm9weSBzb3VyY2UuICAqLworICBpZiAoZm9yX25vbmNlKQorICAgIHsKKyAgICAgIGJ1ZmZlciA9IHhtYWxsb2MgKFg5MzFfQUVTX0tFWUxFTik7CisgICAgICBnZXRfcmFuZG9tIChidWZmZXIsIFg5MzFfQUVTX0tFWUxFTiwgc3RkX3JuZ19jb250ZXh0KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBidWZmZXIgPSBnZXRfZW50cm9weSAoWDkzMV9BRVNfS0VZTEVOKTsKKyAgICB9CisKKyAgLyogU2V0IHRoZSBrZXkgYW5kIGRlbGV0ZSB0aGUgYnVmZmVyIGJlY2F1c2UgdGhlIGtleSBpcyBub3cgcGFydCBvZgorICAgICB0aGUgY2lwaGVyIGNvbnRleHQuICAqLworICByYyA9IF9nY3J5X2NpcGhlcl9zZXRrZXkgKGhkLCBidWZmZXIsIFg5MzFfQUVTX0tFWUxFTik7CisgIHdpcGVtZW1vcnkgKGJ1ZmZlciwgWDkzMV9BRVNfS0VZTEVOKTsKKyAgeGZyZWUgKGJ1ZmZlcik7CisgIGlmIChyYykKKyAgICB7CisgICAgICBsb2dfZXJyb3IgKCJlcnJvciBjcmVhdGluZyBrZXkgZm9yIFJORzogJXNcbiIsIF9nY3J5X3N0cmVycm9yIChyYykpOworICAgICAgX2djcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIGhkOworfQorCisKKy8qIEdlbmVyYXRlIGEga2V5IGZvciB1c2Ugd2l0aCB4OTMxX2Flcy4gIFRoZSBmdW5jdGlvbiBjb3BpZXMgYSBzZWVkCisgICBvZiBMRU5HVEggYnl0ZXMgaW50byBTRUVEX0JVRkZFUi4gTEVOR1RIIG5lZWRzIHRvIGJ5IGdpdmVuIGFzIDE2LiAgKi8KK3N0YXRpYyB2b2lkCit4OTMxX2dlbmVyYXRlX3NlZWQgKHVuc2lnbmVkIGNoYXIgKnNlZWRfYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICB2b2lkICpidWZmZXI7CisKKyAgZ2NyeV9hc3NlcnQgKGZpcHNfcm5nX2lzX2xvY2tlZCk7CisgIGdjcnlfYXNzZXJ0IChsZW5ndGggPT0gMTYpOworCisgIGJ1ZmZlciA9IGdldF9lbnRyb3B5IChYOTMxX0FFU19LRVlMRU4pOworCisgIG1lbWNweSAoc2VlZF9idWZmZXIsIGJ1ZmZlciwgWDkzMV9BRVNfS0VZTEVOKTsKKyAgd2lwZW1lbW9yeSAoYnVmZmVyLCBYOTMxX0FFU19LRVlMRU4pOworICB4ZnJlZSAoYnVmZmVyKTsKK30KKworCisKKy8qIFJlc2VlZCBhIGdlbmVyYXRvci4gIFRoaXMgaXMgYWxzbyB1c2VkIGZvciB0aGUgaW5pdGlhbCBzZWVkaW5nLiAqLworc3RhdGljIHZvaWQKK3g5MzFfcmVzZWVkIChybmdfY29udGV4dF90IHJuZ19jdHgpCit7CisgIGdjcnlfYXNzZXJ0IChmaXBzX3JuZ19pc19sb2NrZWQpOworCisgIGlmIChybmdfY3R4ID09IG5vbmNlX2NvbnRleHQpCisgICAgeworICAgICAgLyogVGhlIG5vbmNlIGNvbnRleHQgaXMgc3BlY2lhbC4gIEl0IHdpbGwgYmUgc2VlZGVkIHVzaW5nIHRoZQorICAgICAgICAgc3RhbmRhcmQgcmFuZG9tIGdlbmVyYXRvci4gICovCisgICAgICBnZXRfcmFuZG9tIChybmdfY3R4LT5zZWVkX1YsIDE2LCBzdGRfcm5nX2NvbnRleHQpOworICAgICAgcm5nX2N0eC0+aXNfc2VlZGVkID0gMTsKKyAgICAgIHJuZ19jdHgtPnNlZWRfaW5pdF9waWQgPSBnZXRwaWQgKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIG90aGVyIHR3byBnZW5lcmF0b3JzIGFyZSBzZWVkZWQgZnJvbSAvZGV2L3JhbmRvbS4gICovCisgICAgICB4OTMxX2dlbmVyYXRlX3NlZWQgKHJuZ19jdHgtPnNlZWRfViwgMTYpOworICAgICAgcm5nX2N0eC0+aXNfc2VlZGVkID0gMTsKKyAgICAgIHJuZ19jdHgtPnNlZWRfaW5pdF9waWQgPSBnZXRwaWQgKCk7CisgICAgfQorfQorCisKKy8qIENvcmUgcmFuZG9tIGZ1bmN0aW9uLiAgVGhpcyBpcyB1c2VkIGZvciBib3RoIG5vbmNlIGFuZCByYW5kb20KKyAgIGdlbmVyYXRvci4gIFRoZSBhY3R1YWwgUk5HIHRvIGJlIHVzZWQgZGVwZW5kcyBvbiB0aGUgcmFuZG9tIGNvbnRleHQKKyAgIFJOR19DVFggcGFzc2VkLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIFJORyBub3QKKyAgIHlldCBsb2NrZWQuICAqLworc3RhdGljIHZvaWQKK2dldF9yYW5kb20gKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgcm5nX2NvbnRleHRfdCBybmdfY3R4KQoreworICBnY3J5X2Fzc2VydCAoYnVmZmVyKTsKKyAgZ2NyeV9hc3NlcnQgKHJuZ19jdHgpOworCisgIGNoZWNrX2d1YXJkcyAocm5nX2N0eCk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lwaGVyIGhhbmRsZSBhbmQgdGh1cyBzZXR1cCB0aGUga2V5IGlmIG5lZWRlZC4gICovCisgIGlmICghcm5nX2N0eC0+Y2lwaGVyX2hkKQorICAgIHsKKyAgICAgIGlmIChybmdfY3R4ID09IG5vbmNlX2NvbnRleHQpCisgICAgICAgIHJuZ19jdHgtPmNpcGhlcl9oZCA9IHg5MzFfZ2VuZXJhdGVfa2V5ICgxKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcm5nX2N0eC0+Y2lwaGVyX2hkID0geDkzMV9nZW5lcmF0ZV9rZXkgKDApOworICAgICAgaWYgKCFybmdfY3R4LT5jaXBoZXJfaGQpCisgICAgICAgIGdvdG8gYmFpbG91dDsKKyAgICAgIHJuZ19jdHgtPmtleV9pbml0X3BpZCA9IGdldHBpZCAoKTsKKyAgICB9CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgc2VlZCB2YWx1ZSBpZiBuZWVkZWQuICAqLworICBpZiAoIXJuZ19jdHgtPmlzX3NlZWRlZCkKKyAgICB4OTMxX3Jlc2VlZCAocm5nX2N0eCk7CisKKyAgaWYgKHJuZ19jdHgtPmtleV9pbml0X3BpZCAhPSBnZXRwaWQgKCkKKyAgICAgIHx8IHJuZ19jdHgtPnNlZWRfaW5pdF9waWQgIT0gZ2V0cGlkICgpKQorICAgIHsKKyAgICAgIC8qIFdlIGFyZSBpbiBhIGNoaWxkIG9mIHVzLiAgQmVjYXVzZSB3ZSBoYXZlIG5vIHdheSB5ZXQgdG8gZG8KKyAgICAgICAgIHByb3BlciByZS1pbml0aWFsaXphdGlvbiAoaW5jbHVkaW5nIHNlbGYtY2hlY2tzIGV0YyksIHRoZQorICAgICAgICAgb25seSBjaGFuY2Ugd2UgaGF2ZSBpcyB0byBiYWlsIG91dC4gIE9idml1c2x5IGEgZm9yay9leGVjCisgICAgICAgICB3b24ndCBoYXJtIGJlY2F1c2UgdGhlIGV4ZWMgb3ZlcndyaXRlcyB0aGUgb2xkIGltYWdlLiAqLworICAgICAgZmlwc19zaWduYWxfZXJyb3IgKCJmb3JrIHdpdGhvdXQgcHJvcGVyIHJlLWluaXRpYWxpemF0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGV0ZWN0ZWQgaW4gUk5HIik7CisgICAgICBnb3RvIGJhaWxvdXQ7CisgICAgfQorCisgIGlmICh4OTMxX2Flc19kcml2ZXIgKGJ1ZmZlciwgbGVuZ3RoLCBybmdfY3R4KSkKKyAgICBnb3RvIGJhaWxvdXQ7CisKKyAgY2hlY2tfZ3VhcmRzIChybmdfY3R4KTsKKyAgcmV0dXJuOworCisgYmFpbG91dDoKKyAgbG9nX2ZhdGFsICgic2V2ZXJlIGVycm9yIGdldHRpbmcgcmFuZG9tXG4iKTsKKyAgLypOT1RSRUFDSEVEKi8KK30KKworCisMCisvKiAtLS0gUHVibGljIEZ1bmN0aW9ucyAtLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0aGlzIHJhbmRvbSBzdWJzeXN0ZW0uICBJZiBGVUxMIGlzIGZhbHNlLCB0aGlzIGZ1bmN0aW9uCisgICBtZXJlbHkgY2FsbHMgdGhlIGJhc2ljIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUgYW5kIGRvZXMgbm90IGRvCisgICBhbnl0aGluZyBtb3JlLiAgRG9pbmcgdGhpcyBpcyBub3QgcmVhbGx5IHJlcXVpcmVkIGJ1dCB3aGVuIHJ1bm5pbmcKKyAgIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQgd2UgbWlnaHQgZ2V0IGEgcmFjZSBjb25kaXRpb24KKyAgIG90aGVyd2lzZS4gKi8KK3ZvaWQKK19nY3J5X3JuZ2ZpcHNfaW5pdGlhbGl6ZSAoaW50IGZ1bGwpCit7CisgIGJhc2ljX2luaXRpYWxpemF0aW9uICgpOworICBpZiAoIWZ1bGwpCisgICAgcmV0dXJuOworCisgIC8qIEFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXJzLiAgSWYgdGhhdCBidWZmZXIgYWxyZWFkeSBleGlzdHMgd2UKKyAgICAga25vdyB0aGF0IHdlIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLiAgKi8KKyAgbG9ja19ybmcgKCk7CisgIGlmICghdGVtcHZhbHVlX2Zvcl94OTMxX2Flc19kcml2ZXIpCisgICAgeworICAgICAgdGVtcHZhbHVlX2Zvcl94OTMxX2Flc19kcml2ZXIKKyAgICAgICAgPSB4bWFsbG9jX3NlY3VyZSAoVEVNUFZBTFVFX0ZPUl9YOTMxX0FFU19EUklWRVJfU0laRSk7CisKKyAgICAgIC8qIEFsbG9jYXRlIHRoZSByYW5kb20gY29udGV4dHMuICBOb3RlIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gdXNlCisgICAgICAgICBzZWN1cmUgbWVtb3J5IGZvciB0aGUgbm9uY2UgY29udGV4dC4gICovCisgICAgICBub25jZV9jb250ZXh0ID0geGNhbGxvYyAoMSwgc2l6ZW9mICpub25jZV9jb250ZXh0KTsKKyAgICAgIHNldHVwX2d1YXJkcyAobm9uY2VfY29udGV4dCk7CisKKyAgICAgIHN0ZF9ybmdfY29udGV4dCA9IHhjYWxsb2Nfc2VjdXJlICgxLCBzaXplb2YgKnN0ZF9ybmdfY29udGV4dCk7CisgICAgICBzZXR1cF9ndWFyZHMgKHN0ZF9ybmdfY29udGV4dCk7CisKKyAgICAgIHN0cm9uZ19ybmdfY29udGV4dCA9IHhjYWxsb2Nfc2VjdXJlICgxLCBzaXplb2YgKnN0cm9uZ19ybmdfY29udGV4dCk7CisgICAgICBzZXR1cF9ndWFyZHMgKHN0cm9uZ19ybmdfY29udGV4dCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogQWxyZWFkeSBpbml0aWFsaXplZC4gRG8gc29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgICAgIGdjcnlfYXNzZXJ0ICghbm9uY2VfY29udGV4dC0+dGVzdF9kdF9wdHIpOworICAgICAgZ2NyeV9hc3NlcnQgKCFzdGRfcm5nX2NvbnRleHQtPnRlc3RfZHRfcHRyKTsKKyAgICAgIGdjcnlfYXNzZXJ0ICghc3Ryb25nX3JuZ19jb250ZXh0LT50ZXN0X2R0X3B0cik7CisgICAgICBjaGVja19ndWFyZHMgKG5vbmNlX2NvbnRleHQpOworICAgICAgY2hlY2tfZ3VhcmRzIChzdGRfcm5nX2NvbnRleHQpOworICAgICAgY2hlY2tfZ3VhcmRzIChzdHJvbmdfcm5nX2NvbnRleHQpOworICAgIH0KKyAgdW5sb2NrX3JuZyAoKTsKK30KKworCisvKiBUcnkgdG8gY2xvc2UgdGhlIEZEcyBvZiB0aGUgcmFuZG9tIGdhdGhlciBtb2R1bGUuICBUaGlzIGlzCisgICBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3Igcm5kbGludXguICovCit2b2lkCitfZ2NyeV9ybmdmaXBzX2Nsb3NlX2ZkcyAodm9pZCkKK3sKKyAgbG9ja19ybmcgKCk7CisjaWYgVVNFX1JORExJTlVYCisgIF9nY3J5X3JuZGxpbnV4X2dhdGhlcl9yYW5kb20gKE5VTEwsIDAsIDAsIDApOworI2VuZGlmCisgIHVubG9ja19ybmcgKCk7Cit9CisKKworLyogUHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IHRoZSBSTkcuICAqLwordm9pZAorX2djcnlfcm5nZmlwc19kdW1wX3N0YXRzICh2b2lkKQoreworICAvKiBOb3QgeWV0IGltcGxlbWVudGVkLiAgKi8KK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBubyByZWFsIFJORyBpcyBhdmFpbGFibGUgb3IgdGhlCisgICBxdWFsaXR5IG9mIHRoZSBSTkcgaGFzIGJlZW4gZGVncmFkZWQgZm9yIHRlc3QgcHVycG9zZXMuICAqLworaW50CitfZ2NyeV9ybmdmaXBzX2lzX2Zha2VkICh2b2lkKQoreworICByZXR1cm4gMDsgIC8qIEZha2VkIHJhbmRvbSBpcyBub3QgYWxsb3dlZC4gICovCit9CisKKworLyogQWRkIEJVRkxFTiBieXRlcyBmcm9tIEJVRiB0byB0aGUgaW50ZXJuYWwgcmFuZG9tIHBvb2wuICBRVUFMSVRZCisgICBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIG9mIDAuLjEwMCB0byBpbmRpY2F0ZSB0aGUgZ29vZG5lc3Mgb2YgdGhlCisgICBlbnRyb3B5IGFkZGVkLCBvciAtMSBmb3IgZ29vZG5lc3Mgbm90IGtub3duLiAqLworZ2NyeV9lcnJvcl90CitfZ2NyeV9ybmdmaXBzX2FkZF9ieXRlcyAoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBpbnQgcXVhbGl0eSkKK3sKKyAgKHZvaWQpYnVmOworICAodm9pZClidWZsZW47CisgICh2b2lkKXF1YWxpdHk7CisgIHJldHVybiAwOyAgLyogTm90IGltcGxlbWVudGVkLiAqLworfQorCisKKy8qIFB1YmxpYyBmdW5jdGlvbiB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBMRU5HVEggYnl0ZXMgb2YKKyAgIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyByYW5kb20gYnl0ZXMuICBMZXZlbCBHQ1JZX1dFQUtfUkFORE9NIGlzCisgICBoZXJlIG1hcHBlZCB0byBHQ1JZX1NUUk9OR19SQU5ET00sIEdDUllfU1RST05HX1JBTkRPTSBpcyBzdHJvbmcKKyAgIGVub3VnaCBmb3IgbW9zdCB1c2FnZSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gaXMgZ29vZCBmb3Iga2V5CisgICBnZW5lcmF0aW9uIHN0dWZmIGJ1dCBtYXkgYmUgdmVyeSBzbG93LiAgKi8KK3ZvaWQKK19nY3J5X3JuZ2ZpcHNfcmFuZG9taXplICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgX2djcnlfcm5nZmlwc19pbml0aWFsaXplICgxKTsgIC8qIEF1dG8taW5pdGlhbGl6ZSBpZiBuZWVkZWQuICAqLworCisgIGxvY2tfcm5nICgpOworICBpZiAobGV2ZWwgPT0gR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pCisgICAgZ2V0X3JhbmRvbSAoYnVmZmVyLCBsZW5ndGgsIHN0cm9uZ19ybmdfY29udGV4dCk7CisgIGVsc2UKKyAgICBnZXRfcmFuZG9tIChidWZmZXIsIGxlbmd0aCwgc3RkX3JuZ19jb250ZXh0KTsKKyAgdW5sb2NrX3JuZyAoKTsKK30KKworCisvKiBDcmVhdGUgYW4gdW5wcmVkaWNhYmxlIG5vbmNlIG9mIExFTkdUSCBieXRlcyBpbiBCVUZGRVIuICovCit2b2lkCitfZ2NyeV9ybmdmaXBzX2NyZWF0ZV9ub25jZSAodm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBfZ2NyeV9ybmdmaXBzX2luaXRpYWxpemUgKDEpOyAgLyogQXV0by1pbml0aWFsaXplIGlmIG5lZWRlZC4gICovCisKKyAgbG9ja19ybmcgKCk7CisgIGdldF9yYW5kb20gKGJ1ZmZlciwgbGVuZ3RoLCBub25jZV9jb250ZXh0KTsKKyAgdW5sb2NrX3JuZyAoKTsKK30KKworCisvKiBSdW4gYSBLbm93LUFuc3dlci1UZXN0IHVzaW5nIGEgZGVkaWNhdGVkIHRlc3QgY29udGV4dC4gIE5vdGUgdGhhdAorICAgd2UgY2FuJ3QgdXNlIHRoZSBzYW1wbGVzIGZyb20gdGhlIE5JU1IgUk5HVlMgZG9jdW1lbnQgYmVjYXVzZSB0aGV5CisgICBkb24ndCB0YWtlIHRoZSByZXF1aXJlbWVudCB0byB0aHJvdyBhd2F5IHRoZSBmaXJzdCBibG9jayBhbmQgdXNlCisgICB0aGF0IGZvciBkdXBsaWNhdGUgY2hlY2sgaW4gYWNjb3VudC4gIFRodXMgd2UgbWFkZSB1cCBvdXIgb3duIHRlc3QKKyAgIHZlY3RvcnMuICovCitzdGF0aWMgZ2NyeV9lcnJfY29kZV90CitzZWxmdGVzdF9rYXQgKHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBzdGF0aWMgc3RydWN0CisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBkdFsxNl07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciB2WzE2XTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHJbM11bMTZdOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIHsgeyAweGI5LCAweGNhLCAweDdmLCAweGQ2LCAweGEwLCAweGY1LCAweGQzLCAweDQyLAorICAgICAgICAgIDB4MTksIDB4NmQsIDB4ODQsIDB4OTEsIDB4NzYsIDB4MWMsIDB4M2IsIDB4YmUgfSwKKyAgICAgICAgeyAweDQ4LCAweGIyLCAweDgyLCAweDk4LCAweDY4LCAweGMyLCAweDgwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MjUsIDB4MDAgfSwKKyAgICAgICAgeyAweDUyLCAweDE3LCAweDhkLCAweDI5LCAweGEyLCAweGQ1LCAweDg0LCAweDEyLAorICAgICAgICAgIDB4OWQsIDB4ODksIDB4OWEsIDB4NDUsIDB4ODIsIDB4MDIsIDB4ZjcsIDB4NzcgfSwKKyAgICAgICAgeyB7IDB4NDIsIDB4OWMsIDB4MDgsIDB4M2QsIDB4ODIsIDB4ZjQsIDB4OGEsIDB4NDAsCisgICAgICAgICAgICAweDY2LCAweGI1LCAweDQ5LCAweDI3LCAweGFiLCAweDQyLCAweGM3LCAweGMzIH0sCisgICAgICAgICAgeyAweDBlLCAweGI3LCAweDYxLCAweDNjLCAweGZlLCAweGIwLCAweGJlLCAweDczLAorICAgICAgICAgICAgMHhmNywgMHg2ZSwgMHg2ZCwgMHg2ZiwgMHgxZCwgMHhhMywgMHgxNCwgMHhmYSB9LAorICAgICAgICAgIHsgMHhiYiwgMHg0YiwgMHhjMSwgMHgwZSwgMHhjNSwgMHhmYiwgMHhjZCwgMHg0NiwKKyAgICAgICAgICAgIDB4YmUsIDB4MjgsIDB4NjEsIDB4ZTcsIDB4MDMsIDB4MmIsIDB4MzcsIDB4N2QgfSB9IH0sCisgICAgICB7IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgIHsgeyAweGY3LCAweDk1LCAweGJkLCAweDRhLCAweDUyLCAweGUyLCAweDllLCAweGQ3LAorICAgICAgICAgICAgMHgxMywgMHhkMywgMHgxMywgMHhmYSwgMHgyMCwgMHhlOSwgMHg4ZCwgMHhiYyB9LAorICAgICAgICAgIHsgMHhjOCwgMHhkMSwgMHhlNSwgMHgxMSwgMHg1OSwgMHg1MiwgMHhmNywgMHhmYSwKKyAgICAgICAgICAgIDB4MzcsIDB4MzgsIDB4YjQsIDB4YzUsIDB4Y2UsIDB4YjIsIDB4YjAsIDB4OWEgfSwKKyAgICAgICAgICB7IDB4MGQsIDB4OWMsIDB4YzUsIDB4MGQsIDB4MTYsIDB4ZTEsIDB4YmMsIDB4ZWQsCisgICAgICAgICAgICAweGNmLCAweDYwLCAweDYyLCAweDA5LCAweDlkLCAweDIwLCAweDgzLCAweDdlIH0gfSB9LAorICAgICAgeyB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgICAgICB7IDB4ODAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4ODIsIDB4MDIsIDB4ODMsIDB4MDMsCisgICAgICAgICAgMHhhMCwgMHgyMCwgMHhhMSwgMHgyMSwgMHhhMiwgMHgyMiwgMHhhMywgMHgyMyB9LAorICAgICAgICB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorICAgICAgICB7IHsgMHg5NiwgMHhlZCwgMHhjYywgMHhjMywgMHhkZCwgMHgwNCwgMHg3ZiwgMHg3NSwKKyAgICAgICAgICAgIDB4NjMsIDB4MTksIDB4MzcsIDB4NmYsIDB4MTUsIDB4MjIsIDB4NTcsIDB4NTYgfSwKKyAgICAgICAgICB7IDB4N2EsIDB4MTQsIDB4NzYsIDB4NzcsIDB4OTUsIDB4MTcsIDB4N2UsIDB4YzgsCisgICAgICAgICAgICAweDkyLCAweGU4LCAweGRkLCAweDE1LCAweGNiLCAweDFmLCAweGJjLCAweGIxIH0sCisgICAgICAgICAgeyAweDI1LCAweDNlLCAweDJlLCAweGEyLCAweDQxLCAweDFiLCAweGRkLCAweGY1LAorICAgICAgICAgICAgMHgyMSwgMHg0OCwgMHg0MSwgMHg3MSwgMHhiMywgMHg4ZCwgMHgyZiwgMHg0YyB9IH0gfQorICAgIH07CisgIGludCB0dmlkeCwgcmlkeDsKKyAgcm5nX2NvbnRleHRfdCB0ZXN0X2N0eDsKKyAgZ3BnX2Vycl9jb2RlX3QgcmM7CisgIGNvbnN0IGNoYXIgKmVycnR4dCA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzE2XTsKKworICBnY3J5X2Fzc2VydCAodGVtcHZhbHVlX2Zvcl94OTMxX2Flc19kcml2ZXIpOworCisgIHRlc3RfY3R4ID0geGNhbGxvYyAoMSwgc2l6ZW9mICp0ZXN0X2N0eCk7CisgIHNldHVwX2d1YXJkcyAodGVzdF9jdHgpOworCisgIGxvY2tfcm5nICgpOworCisgIGZvciAodHZpZHg9MDsgdHZpZHggPCBESU0gKHR2KTsgdHZpZHgrKykKKyAgICB7CisgICAgICAvKiBTZXR1cCB0aGUga2V5LiAgKi8KKyAgICAgIHJjID0gX2djcnlfY2lwaGVyX29wZW4gKCZ0ZXN0X2N0eC0+Y2lwaGVyX2hkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfQ0lQSEVSX1NFQ1VSRSk7CisgICAgICBpZiAocmMpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJ0eHQgPSAiZXJyb3IgY3JlYXRpbmcgY2lwaGVyIGNvbnRleHQgZm9yIFJORyI7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorCisgICAgICByYyA9IF9nY3J5X2NpcGhlcl9zZXRrZXkgKHRlc3RfY3R4LT5jaXBoZXJfaGQsIHR2W3R2aWR4XS5rZXksIDE2KTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgeworICAgICAgICAgIGVycnR4dCA9ICJlcnJvciBzZXR0aW5nIGtleSBmb3IgUk5HIjsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisgICAgICB0ZXN0X2N0eC0+a2V5X2luaXRfcGlkID0gZ2V0cGlkICgpOworCisgICAgICAvKiBTZXR1cCB0aGUgc2VlZC4gICovCisgICAgICBtZW1jcHkgKHRlc3RfY3R4LT5zZWVkX1YsIHR2W3R2aWR4XS52LCAxNik7CisgICAgICB0ZXN0X2N0eC0+aXNfc2VlZGVkID0gMTsKKyAgICAgIHRlc3RfY3R4LT5zZWVkX2luaXRfcGlkID0gZ2V0cGlkICgpOworCisgICAgICAvKiBTZXR1cCBhIERUIHZhbHVlLiAgKi8KKyAgICAgIHRlc3RfY3R4LT50ZXN0X2R0X3B0ciA9IHR2W3R2aWR4XS5kdDsKKyAgICAgIHRlc3RfY3R4LT50ZXN0X2R0X2NvdW50ZXIgPSAoICh0dlt0dmlkeF0uZHRbMTJdIDw8IDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KHR2W3R2aWR4XS5kdFsxM10gPDwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwodHZbdHZpZHhdLmR0WzE0XSA8PCA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KHR2W3R2aWR4XS5kdFsxNV0pICk7CisKKyAgICAgIC8qIEdldCBhbmQgY29tcGFyZSB0aGUgZmlyc3QgdGhyZWUgcmVzdWx0cy4gICovCisgICAgICBmb3IgKHJpZHg9MDsgcmlkeCA8IDM7IHJpZHgrKykKKyAgICAgICAgeworICAgICAgICAgIC8qIENvbXB1dGUgdGhlIG5leHQgdmFsdWUuICAqLworICAgICAgICAgIGlmICh4OTMxX2Flc19kcml2ZXIgKHJlc3VsdCwgMTYsIHRlc3RfY3R4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJydHh0ID0gIlg5LjMxIFJORyBjb3JlIGZ1bmN0aW9uIGZhaWxlZCI7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBDb21wYXJlIGl0IHRvIHRoZSBrbm93biB2YWx1ZS4gICovCisgICAgICAgICAgaWYgKG1lbWNtcCAocmVzdWx0LCB0dlt0dmlkeF0ucltyaWR4XSwgMTYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBsb2dfcHJpbnRoZXggKCJ4OTMxX2FlcyBnb3Q6ICIsIHJlc3VsdCwgMTYpOyAqLworICAgICAgICAgICAgICAvKiBsb2dfcHJpbnRoZXggKCJ4OTMxX2FlcyBleHA6ICIsIHR2W3R2aWR4XS5yW3JpZHhdLCAxNik7ICovCisgICAgICAgICAgICAgIGVycnR4dCA9ICJSTkcgb3V0cHV0IGRvZXMgbm90IG1hdGNoIGtub3duIHZhbHVlIjsKKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBUaGlzIHRlc3QgaXMgYWN0dWFsIHByZXR0eSBwb2ludGxlc3MgYmVjYXVzZSB3ZSB1c2UgYSBsb2NhbCB0ZXN0CisgICAgICAgICBjb250ZXh0LiAgKi8KKyAgICAgIGlmICh0ZXN0X2N0eC0+a2V5X2luaXRfcGlkICE9IGdldHBpZCAoKQorICAgICAgICAgIHx8IHRlc3RfY3R4LT5zZWVkX2luaXRfcGlkICE9IGdldHBpZCAoKSkKKyAgICAgICAgeworICAgICAgICAgIGVycnR4dCA9ICJmb3JrIGRldGVjdGlvbiBmYWlsZWQiOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgX2djcnlfY2lwaGVyX2Nsb3NlICh0ZXN0X2N0eC0+Y2lwaGVyX2hkKTsKKyAgICAgIHRlc3RfY3R4LT5jaXBoZXJfaGQgPSBOVUxMOworICAgICAgdGVzdF9jdHgtPmlzX3NlZWRlZCA9IDA7CisgICAgICBjaGVja19ndWFyZHMgKHRlc3RfY3R4KTsKKyAgICB9CisKKyBsZWF2ZToKKyAgdW5sb2NrX3JuZyAoKTsKKyAgX2djcnlfY2lwaGVyX2Nsb3NlICh0ZXN0X2N0eC0+Y2lwaGVyX2hkKTsKKyAgY2hlY2tfZ3VhcmRzICh0ZXN0X2N0eCk7CisgIHhmcmVlICh0ZXN0X2N0eCk7CisgIGlmIChyZXBvcnQgJiYgZXJydHh0KQorICAgIHJlcG9ydCAoInJhbmRvbSIsIDAsICJLQVQiLCBlcnJ0eHQpOworICByZXR1cm4gZXJydHh0PyBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRCA6IDA7Cit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzLiAgKi8KK2djcnlfZXJyb3JfdAorX2djcnlfcm5nZmlwc19zZWxmdGVzdCAoc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpCit7CisgIGdjcnlfZXJyX2NvZGVfdCBlYzsKKworI2lmIGRlZmluZWQoVVNFX1JORExJTlVYKSB8fCBkZWZpbmVkKFVTRV9STkRXMzIpCisgIHsKKyAgICBjaGFyIGJ1ZmZlcls4XTsKKworICAgIC8qIERvIGEgc2ltcGxlIHRlc3QgdXNpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICBUaGlzIHdpbGwgYWxzbworICAgICAgIGVuZm9yY2UgZnVsbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgUk5HLiAgV2UgbmVlZCB0byBiZSBmdWxseQorICAgICAgIGluaXRpYWxpemVkIGR1ZSB0byB0aGUgZ2xvYmFsIHJlcXVpcmVtZW50IG9mIHRoZQorICAgICAgIHRlbXB2YWx1ZV9mb3JfeDkzMV9hZXNfZHJpdmVyIHN0dWZmLiAqLworICAgIF9nY3J5X3JhbmRvbWl6ZSAoYnVmZmVyLCBzaXplb2YgYnVmZmVyLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICB9CisKKyAgZWMgPSBzZWxmdGVzdF9rYXQgKHJlcG9ydCk7CisKKyNlbHNlIC8qIShVU0VfUk5ETElOVVh8fFVTRV9STkRXMzIpKi8KKyAgcmVwb3J0ICgicmFuZG9tIiwgMCwgInNldHVwIiwgIm5vIGVudHJvcHkgZ2F0aGVyaW5nIG1vZHVsZSIpOworICBlYyA9IEdQR19FUlJfU0VMRlRFU1RfRkFJTEVEOworI2VuZGlmCisgIHJldHVybiBncGdfZXJyb3IgKGVjKTsKK30KKworCisvKiBDcmVhdGUgYSBuZXcgdGVzdCBjb250ZXh0IGZvciBhbiBleHRlcm5hbCBSTkcgdGVzdCBkcml2ZXIuICBPbgorICAgc3VjY2VzcyB0aGUgdGVzdCBjb250ZXh0IGlzIHN0b3JlZCBhdCBSX0NPTlRFWFQ7IG9uIGZhaWx1cmUgTlVMTCBpcworICAgc3RvcmVkIGF0IFJfQ09OVEVYVCBhbmQgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3JuZ2ZpcHNfaW5pdF9leHRlcm5hbF90ZXN0ICh2b2lkICoqcl9jb250ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmR0LCBzaXplX3QgZHRsZW4pCit7CisgIGdwZ19lcnJfY29kZV90IHJjOworICBybmdfY29udGV4dF90IHRlc3RfY3R4OworCisgIF9nY3J5X3JuZ2ZpcHNfaW5pdGlhbGl6ZSAoMSk7ICAvKiBBdXRvLWluaXRpYWxpemUgaWYgbmVlZGVkLiAgKi8KKworICBpZiAoIXJfY29udGV4dAorICAgICAgfHwgIWtleSAgfHwga2V5bGVuICAhPSAxNgorICAgICAgfHwgIXNlZWQgfHwgc2VlZGxlbiAhPSAxNgorICAgICAgfHwgIWR0ICAgfHwgZHRsZW4gICAhPSAxNiApCisgICAgcmV0dXJuIEdQR19FUlJfSU5WX0FSRzsKKworICB0ZXN0X2N0eCA9IHh0cnljYWxsb2MgKDEsIHNpemVvZiAqdGVzdF9jdHggKyBkdGxlbik7CisgIGlmICghdGVzdF9jdHgpCisgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX3N5c2Vycm9yICgpOworICBzZXR1cF9ndWFyZHMgKHRlc3RfY3R4KTsKKworICAvKiBTZXR1cCB0aGUga2V5LiAgKi8KKyAgcmMgPSBfZ2NyeV9jaXBoZXJfb3BlbiAoJnRlc3RfY3R4LT5jaXBoZXJfaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfQ0lQSEVSX1NFQ1VSRSk7CisgIGlmIChyYykKKyAgICBnb3RvIGxlYXZlOworCisgIHJjID0gX2djcnlfY2lwaGVyX3NldGtleSAodGVzdF9jdHgtPmNpcGhlcl9oZCwga2V5LCBrZXlsZW4pOworICBpZiAocmMpCisgICAgZ290byBsZWF2ZTsKKworICB0ZXN0X2N0eC0+a2V5X2luaXRfcGlkID0gZ2V0cGlkICgpOworCisgIC8qIFNldHVwIHRoZSBzZWVkLiAgKi8KKyAgbWVtY3B5ICh0ZXN0X2N0eC0+c2VlZF9WLCBzZWVkLCBzZWVkbGVuKTsKKyAgdGVzdF9jdHgtPmlzX3NlZWRlZCA9IDE7CisgIHRlc3RfY3R4LT5zZWVkX2luaXRfcGlkID0gZ2V0cGlkICgpOworCisgIC8qIFNldHVwIGEgRFQgdmFsdWUuICBCZWNhdXNlIG91ciBjb250ZXh0IHN0cnVjdHVyZSBvbmx5IHN0b3JlcyBhCisgICAgIHBvaW50ZXIgd2UgY29weSB0aGUgRFQgdmFsdWUgdG8gdGhlIGV4dHJhIHNwYWNlIHdlIGFsbG9jYXRlZCBpbgorICAgICB0aGUgdGVzdF9jdHggYW5kIHNldCB0aGUgcG9pbnRlciB0byB0aGF0IGFkZHJlc3MuICAqLworICBtZW1jcHkgKCh1bnNpZ25lZCBjaGFyKil0ZXN0X2N0eCArIHNpemVvZiAqdGVzdF9jdHgsIGR0LCBkdGxlbik7CisgIHRlc3RfY3R4LT50ZXN0X2R0X3B0ciA9ICh1bnNpZ25lZCBjaGFyKil0ZXN0X2N0eCArIHNpemVvZiAqdGVzdF9jdHg7CisgIHRlc3RfY3R4LT50ZXN0X2R0X2NvdW50ZXIgPSAoICh0ZXN0X2N0eC0+dGVzdF9kdF9wdHJbMTJdIDw8IDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwodGVzdF9jdHgtPnRlc3RfZHRfcHRyWzEzXSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KHRlc3RfY3R4LT50ZXN0X2R0X3B0clsxNF0gPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KHRlc3RfY3R4LT50ZXN0X2R0X3B0clsxNV0pICk7CisKKyAgaWYgKCAoZmxhZ3MgJiAxKSApCisgICAgdGVzdF9jdHgtPnRlc3Rfbm9fZHVwX2NoZWNrID0gMTsKKworICBjaGVja19ndWFyZHMgKHRlc3RfY3R4KTsKKyAgLyogQWxsIGZpbmUuICAqLworICByYyA9IDA7CisKKyBsZWF2ZToKKyAgaWYgKHJjKQorICAgIHsKKyAgICAgIF9nY3J5X2NpcGhlcl9jbG9zZSAodGVzdF9jdHgtPmNpcGhlcl9oZCk7CisgICAgICB4ZnJlZSAodGVzdF9jdHgpOworICAgICAgKnJfY29udGV4dCA9IE5VTEw7CisgICAgfQorICBlbHNlCisgICAgKnJfY29udGV4dCA9IHRlc3RfY3R4OworICByZXR1cm4gcmM7Cit9CisKKworLyogR2V0IEJVRkxFTiBieXRlcyBmcm9tIHRoZSBSTkcgdXNpbmcgdGhlIHRlc3QgQ09OVEVYVCBhbmQgc3RvcmUgdGhlbQorICAgYXQgQlVGRkVSLiAgUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcm5nZmlwc19ydW5fZXh0ZXJuYWxfdGVzdCAodm9pZCAqY29udGV4dCwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworICBybmdfY29udGV4dF90IHRlc3RfY3R4ID0gY29udGV4dDsKKworICBpZiAoIXRlc3RfY3R4IHx8ICFidWZmZXIgfHwgYnVmbGVuICE9IDE2KQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgbG9ja19ybmcgKCk7CisgIGdldF9yYW5kb20gKGJ1ZmZlciwgYnVmbGVuLCB0ZXN0X2N0eCk7CisgIHVubG9ja19ybmcgKCk7CisgIHJldHVybiAwOworfQorCisvKiBSZWxlYXNlIHRoZSB0ZXN0IENPTlRFWFQuICAqLwordm9pZAorX2djcnlfcm5nZmlwc19kZWluaXRfZXh0ZXJuYWxfdGVzdCAodm9pZCAqY29udGV4dCkKK3sKKyAgcm5nX2NvbnRleHRfdCB0ZXN0X2N0eCA9IGNvbnRleHQ7CisKKyAgaWYgKHRlc3RfY3R4KQorICAgIHsKKyAgICAgIF9nY3J5X2NpcGhlcl9jbG9zZSAodGVzdF9jdHgtPmNpcGhlcl9oZCk7CisgICAgICB4ZnJlZSAodGVzdF9jdHgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3JhbmRvbS9yYW5kb20tc3lzdGVtLmMgYi9yYW5kb20vcmFuZG9tLXN5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NjJhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5kb20vcmFuZG9tLXN5c3RlbS5jCkBAIC0wLDAgKzEsMjU2IEBACisvKiByYW5kb20tc3lzdGVtLmMgLSB3cmFwcGVyIGFyb3VuZCB0aGUgc3lzdGVtJ3MgUk5HCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKgorICAgVGhpcyBSTkcgaXMgbWVyZWx5IHdyYXBwZXIgYXJvdW5kIHRoZSBzeXN0ZW0ncyBuYXRpdmUgUk5HLiAgRm9yCisgICBleGFtcGxlIG9uIFVuaXggc3lzdGVtcyBpdCBkaXJlY3RseSB1c2VzIC9kZXYve3UsfXJhbmRvbS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfR0VUVElNRU9GREFZCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisjaW5jbHVkZSAicmFuZC1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImF0aC5oIgorCisvKiBUaGlzIGlzIHRoZSBsb2NrIHdlIHVzZSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoaXMgUk5HLiAgVGhlIGV4dHJhCisgICBpbnRlZ2VyIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCB0byBjaGVjayB0aGUgbG9ja2luZyBzdGF0ZTsgdGhhdCBpcywKKyAgIGl0IGlzIG5vdCBtZWFudCB0byBiZSB0aHJlYWQtc2FmZSBidXQgbWVyZWx5IGFzIGEgZmFpbHNhZmUgZmVhdHVyZQorICAgdG8gYXNzZXJ0IHByb3BlciBsb2NraW5nLiAgKi8KK3N0YXRpYyBhdGhfbXV0ZXhfdCBzeXN0ZW1fcm5nX2xvY2s7CitzdGF0aWMgaW50IHN5c3RlbV9ybmdfaXNfbG9ja2VkOworCisKKy8qIC0tLSBMb2NhbCBwcm90b3R5cGVzIC0tLSAgKi8KKworCisKKwwKKy8qIC0tLSBGdW5jdGlvbnMgIC0tLSAqLworCisvKiBCYXNpYyBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIG11dGV4ZXMgYW5kCisgICBkbyBhIGZldyBjaGVja3Mgb24gdGhlIGltcGxlbWVudGF0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCitiYXNpY19pbml0aWFsaXphdGlvbiAodm9pZCkKK3sKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKyAgaW50IG15X2Vycm5vOworCisgIGlmIChpbml0aWFsaXplZCkKKyAgICByZXR1cm47CisgIGluaXRpYWxpemVkID0gMTsKKworICBteV9lcnJubyA9IGF0aF9tdXRleF9pbml0ICgmc3lzdGVtX3JuZ19sb2NrKTsKKyAgaWYgKG15X2Vycm5vKQorICAgIGxvZ19mYXRhbCAoImZhaWxlZCB0byBjcmVhdGUgdGhlIFN5c3RlbSBSTkcgbG9jazogJXNcbiIsCisgICAgICAgICAgICAgICBzdHJlcnJvciAobXlfZXJybm8pKTsKKyAgc3lzdGVtX3JuZ19pc19sb2NrZWQgPSAwOworCisgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBzdGlsbCB1c2luZyB0aGUgdmFsdWVzIHdlIHRyYWRpdGlvbmFsbHkKKyAgICAgdXNlZCBmb3IgdGhlIHJhbmRvbSBsZXZlbHMuICAqLworICBnY3J5X2Fzc2VydCAoR0NSWV9XRUFLX1JBTkRPTSA9PSAwCisgICAgICAgICAgICAgICAmJiBHQ1JZX1NUUk9OR19SQU5ET00gPT0gMQorICAgICAgICAgICAgICAgJiYgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gPT0gMik7CisKK30KKworCisvKiBBY3F1aXJlIHRoZSBzeXN0ZW1fcm5nX2xvY2suICAqLworc3RhdGljIHZvaWQKK2xvY2tfcm5nICh2b2lkKQoreworICBpbnQgbXlfZXJybm87CisKKyAgbXlfZXJybm8gPSBhdGhfbXV0ZXhfbG9jayAoJnN5c3RlbV9ybmdfbG9jayk7CisgIGlmIChteV9lcnJubykKKyAgICBsb2dfZmF0YWwgKCJmYWlsZWQgdG8gYWNxdWlyZSB0aGUgU3lzdGVtIFJORyBsb2NrOiAlc1xuIiwKKyAgICAgICAgICAgICAgIHN0cmVycm9yIChteV9lcnJubykpOworICBzeXN0ZW1fcm5nX2lzX2xvY2tlZCA9IDE7Cit9CisKKworLyogUmVsZWFzZSB0aGUgc3lzdGVtX3JuZ19sb2NrLiAgKi8KK3N0YXRpYyB2b2lkCit1bmxvY2tfcm5nICh2b2lkKQoreworICBpbnQgbXlfZXJybm87CisKKyAgc3lzdGVtX3JuZ19pc19sb2NrZWQgPSAwOworICBteV9lcnJubyA9IGF0aF9tdXRleF91bmxvY2sgKCZzeXN0ZW1fcm5nX2xvY2spOworICBpZiAobXlfZXJybm8pCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIHJlbGVhc2UgdGhlIFN5c3RlbSBSTkcgbG9jazogJXNcbiIsCisgICAgICAgICAgICAgICBzdHJlcnJvciAobXlfZXJybm8pKTsKK30KKworCisvKiBIZWxwZXIgdmFyaWFibGVzIGZvciByZWFkX2NiKCkuCisKKyAgIFRoZSBfZ2NyeV9ybmQqX2dhdGhlcl9yYW5kb20gaW50ZXJmYWNlIGRvZXMgbm90IGFsbG93IHRvIHByb3ZpZGUgYQorICAgZGF0YSBwb2ludGVyLiAgVGh1cyB3ZSBuZWVkIHRvIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSBmb3IKKyAgIGNvbW11bmljYXRpb24uICBIb3dldmVyLCB0aGUgdGhlbiByZXF1aXJlZCBsb2NraW5nIGlzIGFueXdheSBhIGdvb2QKKyAgIGlkZWEgYmVjYXVzZSBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgc2V2ZXJhbCByZWFkZXJzIG9mIChzYXkKKyAgIC9kZXYvcmFuZG9tKS4gIEl0IGlzIGVhc2llciB0byBzZXJ2ZSB0aGVtIG9uZSBhZnRlciB0aGUgb3RoZXIuICAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnJlYWRfY2JfYnVmZmVyOyAgIC8qIFRoZSBidWZmZXIuICAqLworc3RhdGljIHNpemVfdCAgICAgICAgIHJlYWRfY2Jfc2l6ZTsgICAgIC8qIFNpemUgb2YgdGhlIGJ1ZmZlci4gICovCitzdGF0aWMgc2l6ZV90ICAgICAgICAgcmVhZF9jYl9sZW47ICAgICAgLyogVXNlZCBsZW5ndGguICAqLworCisKKy8qIENhbGxiYWNrIGZvciBfZ2NyeV9ybmQqX2dhdGhlcl9yYW5kb20uICAqLworc3RhdGljIHZvaWQKK3JlYWRfY2IgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWZmZXI7CisKKyAgKHZvaWQpb3JpZ2luOworCisgIGdjcnlfYXNzZXJ0IChzeXN0ZW1fcm5nX2lzX2xvY2tlZCk7CisgIGdjcnlfYXNzZXJ0IChyZWFkX2NiX2J1ZmZlcik7CisKKyAgLyogTm90ZSB0aGF0IHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGdhdGhlcmVycyByZXR1cm5pbmcgbW9yZQorICAgICB0aGFuIHRoZSByZXF1ZXN0ZWQgYnl0ZXMgKGUuZy4gcm5kdzMyKS4gICovCisgIHdoaWxlIChsZW5ndGgtLSAmJiByZWFkX2NiX2xlbiA8IHJlYWRfY2Jfc2l6ZSkKKyAgICB7CisgICAgICByZWFkX2NiX2J1ZmZlcltyZWFkX2NiX2xlbisrXSA9ICpwKys7CisgICAgfQorfQorCisKKy8qIEZpbGwgQlVGRkVSIHdpdGggTEVOR1RIIGJ5dGVzIG9mIHJhbmRvbSBhdCBxdWFsaXR5IExFVkVMLiAgVGhlCisgICBmdW5jdGlvbiBlaXRoZXIgc3VjY2VlZHMgb3IgdGVybWluYXRlcyB0aGUgcHJvY2VzcyBpbiBjYXNlIG9mIGEKKyAgIGZhdGFsIGVycm9yLiAqLworc3RhdGljIHZvaWQKK2dldF9yYW5kb20gKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsKQoreworICBpbnQgcmM7CisKKyAgZ2NyeV9hc3NlcnQgKGJ1ZmZlcik7CisKKyAgcmVhZF9jYl9idWZmZXIgPSBidWZmZXI7CisgIHJlYWRfY2Jfc2l6ZSAgID0gbGVuZ3RoOworICByZWFkX2NiX2xlbiAgICA9IDA7CisKKyNpZiBVU0VfUk5ETElOVVgKKyAgcmMgPSBfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tIChyZWFkX2NiLCAwLCBsZW5ndGgsIGxldmVsKTsKKyNlbGlmIFVTRV9STkRVTklYCisgIHJjID0gX2djcnlfcm5kdW5peF9nYXRoZXJfcmFuZG9tIChyZWFkX2NiLCAwLCBsZW5ndGgsIGxldmVsKTsKKyNlbGlmIFVTRV9STkRXMzIKKyAgZG8KKyAgICB7CisgICAgICByYyA9IF9nY3J5X3JuZHczMl9nYXRoZXJfcmFuZG9tIChyZWFkX2NiLCAwLCBsZW5ndGgsIGxldmVsKTsKKyAgICB9CisgIHdoaWxlIChyYyA+PSAwICYmIHJlYWRfY2JfbGVuIDwgcmVhZF9jYl9zaXplKTsKKyNlbHNlCisgIHJjID0gLTE7CisjZW5kaWYKKworICBpZiAocmMgPCAwIHx8IHJlYWRfY2JfbGVuICE9IHJlYWRfY2Jfc2l6ZSkKKyAgICB7CisgICAgICBsb2dfZmF0YWwgKCJlcnJvciByZWFkaW5nIHJhbmRvbSBmcm9tIHN5c3RlbSBSTkcgKHJjPSVkKVxuIiwgcmMpOworICAgIH0KK30KKworCisMCisvKiAtLS0gUHVibGljIEZ1bmN0aW9ucyAtLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0aGlzIHJhbmRvbSBzdWJzeXN0ZW0uICBJZiBGVUxMIGlzIGZhbHNlLCB0aGlzIGZ1bmN0aW9uCisgICBtZXJlbHkgY2FsbHMgdGhlIGJhc2ljIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUgYW5kIGRvZXMgbm90IGRvCisgICBhbnl0aGluZyBtb3JlLiAgRG9pbmcgdGhpcyBpcyBub3QgcmVhbGx5IHJlcXVpcmVkIGJ1dCB3aGVuIHJ1bm5pbmcKKyAgIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQgd2UgbWlnaHQgZ2V0IGEgcmFjZSBjb25kaXRpb24KKyAgIG90aGVyd2lzZS4gKi8KK3ZvaWQKK19nY3J5X3JuZ3N5c3RlbV9pbml0aWFsaXplIChpbnQgZnVsbCkKK3sKKyAgYmFzaWNfaW5pdGlhbGl6YXRpb24gKCk7CisgIGlmICghZnVsbCkKKyAgICByZXR1cm47CisgIC8qIE5vdGhpbmcgbW9yZSB0byBpbml0aWFsaXplLiAgKi8KKyAgcmV0dXJuOworfQorCisKKy8qIFRyeSB0byBjbG9zZSB0aGUgRkRzIG9mIHRoZSByYW5kb20gZ2F0aGVyIG1vZHVsZS4gIFRoaXMgaXMKKyAgIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBybmRsaW51eC4gKi8KK3ZvaWQKK19nY3J5X3JuZ3N5c3RlbV9jbG9zZV9mZHMgKHZvaWQpCit7CisgIGxvY2tfcm5nICgpOworI2lmIFVTRV9STkRMSU5VWAorICBfZ2NyeV9ybmRsaW51eF9nYXRoZXJfcmFuZG9tIChOVUxMLCAwLCAwLCAwKTsKKyNlbmRpZgorICB1bmxvY2tfcm5nICgpOworfQorCisKKy8qIFByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCB0aGUgUk5HLiAgKi8KK3ZvaWQKK19nY3J5X3JuZ3N5c3RlbV9kdW1wX3N0YXRzICh2b2lkKQoreworICAvKiBOb3QgeWV0IGltcGxlbWVudGVkLiAgKi8KK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBubyByZWFsIFJORyBpcyBhdmFpbGFibGUgb3IgdGhlCisgICBxdWFsaXR5IG9mIHRoZSBSTkcgaGFzIGJlZW4gZGVncmFkZWQgZm9yIHRlc3QgcHVycG9zZXMuICAqLworaW50CitfZ2NyeV9ybmdzeXN0ZW1faXNfZmFrZWQgKHZvaWQpCit7CisgIHJldHVybiAwOyAgLyogRmFrZWQgcmFuZG9tIGlzIG5vdCBzdXBwb3J0ZWQuICAqLworfQorCisKKy8qIEFkZCBCVUZMRU4gYnl0ZXMgZnJvbSBCVUYgdG8gdGhlIGludGVybmFsIHJhbmRvbSBwb29sLiAgUVVBTElUWQorICAgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiAwLi4xMDAgdG8gaW5kaWNhdGUgdGhlIGdvb2RuZXNzIG9mIHRoZQorICAgZW50cm9weSBhZGRlZCwgb3IgLTEgZm9yIGdvb2RuZXNzIG5vdCBrbm93bi4gKi8KK2djcnlfZXJyb3JfdAorX2djcnlfcm5nc3lzdGVtX2FkZF9ieXRlcyAoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBpbnQgcXVhbGl0eSkKK3sKKyAgKHZvaWQpYnVmOworICAodm9pZClidWZsZW47CisgICh2b2lkKXF1YWxpdHk7CisgIHJldHVybiAwOyAgLyogTm90IGltcGxlbWVudGVkLiAqLworfQorCisKKy8qIFB1YmxpYyBmdW5jdGlvbiB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBMRU5HVEggYnl0ZXMgb2YKKyAgIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyByYW5kb20gYnl0ZXMuICBMZXZlbCBHQ1JZX1dFQUtfUkFORE9NIGlzCisgICBoZXJlIG1hcHBlZCB0byBHQ1JZX1NUUk9OR19SQU5ET00sIEdDUllfU1RST05HX1JBTkRPTSBpcyBzdHJvbmcKKyAgIGVub3VnaCBmb3IgbW9zdCB1c2FnZSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gaXMgZ29vZCBmb3Iga2V5CisgICBnZW5lcmF0aW9uIHN0dWZmIGJ1dCBtYXkgYmUgdmVyeSBzbG93LiAgKi8KK3ZvaWQKK19nY3J5X3JuZ3N5c3RlbV9yYW5kb21pemUgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIF9nY3J5X3JuZ3N5c3RlbV9pbml0aWFsaXplICgxKTsgIC8qIEF1dG8taW5pdGlhbGl6ZSBpZiBuZWVkZWQuICAqLworCisgIGlmIChsZXZlbCAhPSBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSkKKyAgICBsZXZlbCA9IEdDUllfU1RST05HX1JBTkRPTTsKKworICBsb2NrX3JuZyAoKTsKKyAgZ2V0X3JhbmRvbSAoYnVmZmVyLCBsZW5ndGgsIGxldmVsKTsKKyAgdW5sb2NrX3JuZyAoKTsKK30KZGlmZiAtLWdpdCBhL3JhbmRvbS9yYW5kb20uYyBiL3JhbmRvbS9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjlkNmQyCi0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tL3JhbmRvbS5jCkBAIC0wLDAgKzEsNTU5IEBACisvKiByYW5kb20uYyAtIFJhbmRvbSBudW1iZXIgc3dpdGNoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKgorICBUaGlzIG1vZHVsZSBzd2l0Y2hlcyBiZXR3ZWVuIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgcmFuZG9tCisgIG51bWJlciBnZW5lcmF0b3JzIGFuZCBwcm92aWRlcyBhIGZldyBoZWxwIGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgInJhbmQtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIgICAgICAgICAvKiBGb3IgX2djcnlfc2hhMV9oYXNoX2J1ZmZlcigpLiAgKi8KKyNpbmNsdWRlICJhdGguaCIKKworCisvKiBJZiBub3QgTlVMTCBhIHByb2dyZXNzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNlcnRhaW4gcGxhY2VzIGFuZCB0aGUKKyAgIG9wYXF1ZSB2YWx1ZSBwYXNzZWQgYWxvbmcuICBSZWdpc3RlcmVkIGJ5CisgICBfZ2NyeV9yZWdpc3Rlcl9yYW5kb21fcHJvZ3Jlc3MgKCkuICovCitzdGF0aWMgdm9pZCAoKnByb2dyZXNzX2NiKSAodm9pZCAqLGNvbnN0IGNoYXIqLGludCxpbnQsIGludCApOworc3RhdGljIHZvaWQgKnByb2dyZXNzX2NiX2RhdGE7CisKKy8qIEZsYWdzIGluZGljYXRpbmcgdGhlIHJlcXVlc3RlZCBSTkcgdHlwZXMuICAqLworc3RhdGljIHN0cnVjdAoreworICBpbnQgc3RhbmRhcmQ7CisgIGludCBmaXBzOworICBpbnQgc3lzdGVtOworfSBybmdfdHlwZXM7CisKKworLyogVGhpcyBpcyB0aGUgbG9jayB3ZSB1c2UgdG8gcHJvdGVjdCB0aGUgYnVmZmVyIHVzZWQgYnkgdGhlIG5vbmNlCisgICBnZW5lcmF0aW9uLiAgKi8KK3N0YXRpYyBhdGhfbXV0ZXhfdCBub25jZV9idWZmZXJfbG9jazsKKworCisMCisvKiAtLS0gIEZ1bmN0aW9ucyAgLS0tICovCisKKworLyogVXNlZCB0byByZWdpc3RlciBhIHByb2dyZXNzIGNhbGxiYWNrLiAgVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQKKyAgIGJlZm9yZSBhbnkgdGhyZWFkcyBhcmUgY3JlYXRlZC4gKi8KK3ZvaWQKK19nY3J5X3JlZ2lzdGVyX3JhbmRvbV9wcm9ncmVzcyAodm9pZCAoKmNiKSh2b2lkICosY29uc3QgY2hhciosaW50LGludCxpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYl9kYXRhICkKK3sKKyAgcHJvZ3Jlc3NfY2IgPSBjYjsKKyAgcHJvZ3Jlc3NfY2JfZGF0YSA9IGNiX2RhdGE7Cit9CisKKworLyogVGhpcyBwcm9ncmVzcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgcmFuZG9tIG1vZHVsZXMgdG8KKyAgIGdpdmUgaGludHMgb24gaG93IG11Y2ggbW9yZSBlbnRyb3B5IGlzIHJlcXVpcmVkLiAqLwordm9pZAorX2djcnlfcmFuZG9tX3Byb2dyZXNzIChjb25zdCBjaGFyICp3aGF0LCBpbnQgcHJpbnRjaGFyLCBpbnQgY3VycmVudCwgaW50IHRvdGFsKQoreworICBpZiAocHJvZ3Jlc3NfY2IpCisgICAgcHJvZ3Jlc3NfY2IgKHByb2dyZXNzX2NiX2RhdGEsIHdoYXQsIHByaW50Y2hhciwgY3VycmVudCwgdG90YWwpOworfQorCisKKy8qIFNldCB0aGUgcHJlZmVycmVkIFJORyB0eXBlLiAgVGhpcyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGV2ZW4KKyAgIGJlZm9yZSBnY3J5X2NoZWNrX3ZlcnNpb24uICBUaHVzIHdlIGNhbid0IGFzc3VtZSBhbnkgdGhyZWFkIHN5c3RlbQorICAgaW5pdGlhbGl6YXRpb24uICBBIHR5cGUgb2YgMCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW55IExpYmdjcnlwdAorICAgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZG9uZS4qLwordm9pZAorX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoaW50IHR5cGUpCit7CisgIHN0YXRpYyBpbnQgYW55X2luaXQ7CisKKyAgaWYgKCF0eXBlKQorICAgIHsKKyAgICAgIGFueV9pbml0ID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKHR5cGUgPT0gR0NSWV9STkdfVFlQRV9TVEFOREFSRCkKKyAgICB7CisgICAgICBybmdfdHlwZXMuc3RhbmRhcmQgPSAxOworICAgIH0KKyAgZWxzZSBpZiAoYW55X2luaXQpCisgICAgeworICAgICAgLyogQWZ0ZXIgYW55IGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGRvbmUgd2Ugb25seSBhbGxvdyB0bworICAgICAgICAgdXBncmFkZSB0byB0aGUgc3RhbmRhcmQgUk5HIChoYW5kbGVkIGFib3ZlKS4gIEFsbCBvdGhlcgorICAgICAgICAgcmVxdWVzdHMgYXJlIGlnbm9yZWQuICBUaGUgaWRlYSBpcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBuZWVkcworICAgICAgICAgdG8gZGVjbGFyZSBhIHByZWZlcmVuY2UgZm9yIGEgd2Vha2VyIFJORyBhcyBzb29uIGFzIHBvc3NpYmxlCisgICAgICAgICBhbmQgYmVmb3JlIGFueSBsaWJyYXJ5IHNldHMgYSBwcmVmZXJlbmNlLiAgV2UgYXNzdW1lIHRoYXQgYQorICAgICAgICAgbGlicmFyeSB3aGljaCB1c2VzIExpYmdjcnlwdCBjYWxscyBhbiBpbml0IGZ1bmN0aW9uIHZlcnkKKyAgICAgICAgIGVhcmx5LiAgVGhpcyB3YXkgLS0tIGV2ZW4gaWYgdGhlIGxpYnJhcnkgZ2V0cyBpbml0aWFsaXplZAorICAgICAgICAgZWFybHkgYnkgdGhlIGFwcGxpY2F0aW9uIC0tLSBpdCBpcyB1bmxpa2VseSB0aGF0IGl0IGNhbgorICAgICAgICAgc2VsZWN0IGEgbG93ZXIgcHJpb3JpdHkgUk5HLgorCisgICAgICAgICBUaGlzIHNjaGVtZSBoZWxwcyB0byBlbnN1cmUgdGhhdCBleGlzdGluZyB1bm1vZGlmaWVkCisgICAgICAgICBhcHBsaWNhdGlvbnMgKGUuZy4gZ3BnMiksIHdoaWNoIGRvbid0IGtub3duIGFib3V0IHRoZSBuZXcgUk5HCisgICAgICAgICBzZWxlY3Rpb24gc3lzdGVtLCB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgc3RhbmRhcmQgUk5HIGFuZAorICAgICAgICAgbm90IGJlIHRyaWNrZWQgYnkgc29tZSBsaWJyYXJ5IHRvIHVzZSBhIGxvd2VyIHByaW9yaXR5IFJORy4KKyAgICAgICAgIFRoZXJlIGFyZSBzb21lIGxvb3Bob2xlcyBoZXJlIGJ1dCBhdCBsZWFzdCBtb3N0IEdudVBHIHN0dWZmCisgICAgICAgICBzaG91bGQgYmUgc2F2ZSBiZWNhdXNlIGl0IGNhbGxzIHNyY19je2djcnlfY29udHJvbAorICAgICAgICAgKEdDUllDVExfU1VTUEVORF9TRUNNRU1fV0FSTik7fSBxdWl0ZSBlYXJseSBhbmQgdGh1cyBpbmhpYml0cworICAgICAgICAgc3dpdGNoaW5nIHRvIGEgbG93IHByaW9yaXR5IFJORy4KKyAgICAgICAqLworICAgIH0KKyAgZWxzZSBpZiAodHlwZSA9PSBHQ1JZX1JOR19UWVBFX0ZJUFMpCisgICAgeworICAgICAgcm5nX3R5cGVzLmZpcHMgPSAxOworICAgIH0KKyAgZWxzZSBpZiAodHlwZSA9PSBHQ1JZX1JOR19UWVBFX1NZU1RFTSkKKyAgICB7CisgICAgICBybmdfdHlwZXMuc3lzdGVtID0gMTsKKyAgICB9Cit9CisKKworLyogSW5pdGlhbGl6ZSB0aGlzIHJhbmRvbSBzdWJzeXN0ZW0uICBJZiBGVUxMIGlzIGZhbHNlLCB0aGlzIGZ1bmN0aW9uCisgICBtZXJlbHkgY2FsbHMgdGhlIGJhc2ljIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUgYW5kIGRvZXMgbm90IGRvCisgICBhbnl0aGluZyBtb3JlLiAgRG9pbmcgdGhpcyBpcyBub3QgcmVhbGx5IHJlcXVpcmVkIGJ1dCB3aGVuIHJ1bm5pbmcKKyAgIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQgd2UgbWlnaHQgZ2V0IGEgcmFjZSBjb25kaXRpb24KKyAgIG90aGVyd2lzZS4gKi8KK3ZvaWQKK19nY3J5X3JhbmRvbV9pbml0aWFsaXplIChpbnQgZnVsbCkKK3sKKyAgc3RhdGljIGludCBub25jZV9pbml0aWFsaXplZDsKKyAgaW50IGVycjsKKworICBpZiAoIW5vbmNlX2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIG5vbmNlX2luaXRpYWxpemVkID0gMTsKKyAgICAgIGVyciA9IGF0aF9tdXRleF9pbml0ICgmbm9uY2VfYnVmZmVyX2xvY2spOworICAgICAgaWYgKGVycikKKyAgICAgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgbm9uY2UgYnVmZmVyIGxvY2s6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpICk7CisgICAgfQorCisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgX2djcnlfcm5nZmlwc19pbml0aWFsaXplIChmdWxsKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN0YW5kYXJkKQorICAgIF9nY3J5X3JuZ2NzcHJuZ19pbml0aWFsaXplIChmdWxsKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLmZpcHMpCisgICAgX2djcnlfcm5nZmlwc19pbml0aWFsaXplIChmdWxsKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN5c3RlbSkKKyAgICBfZ2NyeV9ybmdzeXN0ZW1faW5pdGlhbGl6ZSAoZnVsbCk7CisgIGVsc2UKKyAgICBfZ2NyeV9ybmdjc3BybmdfaW5pdGlhbGl6ZSAoZnVsbCk7Cit9CisKKworLyogSWYgcG9zc2libGUgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycyB1c2VkIGJ5IHRoZSBSTkcuICovCit2b2lkCitfZ2NyeV9yYW5kb21fY2xvc2VfZmRzICh2b2lkKQoreworICAvKiBOb3RlIHRoYXQgd2UgY2FuJ3QgZG8gdGhhdCBkaXJlY3RseSBiZWNhdXNlIGVhY2ggcmFuZG9tIHN5c3RlbQorICAgICBoYXMgaXRzIG93biBsb2NrIGZ1bmN0aW9ucyB3aGljaCBuZWVkIHRvIGJlIHVzZWQgZm9yIGFjY2Vzc2luZworICAgICB0aGUgZW50cm9weSBnYXRoZXJlci4gICovCisKKyAgaWYgKGZpcHNfbW9kZSAoKSkKKyAgICBfZ2NyeV9ybmdmaXBzX2Nsb3NlX2ZkcyAoKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN0YW5kYXJkKQorICAgIF9nY3J5X3JuZ2NzcHJuZ19jbG9zZV9mZHMgKCk7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5maXBzKQorICAgIF9nY3J5X3JuZ2ZpcHNfY2xvc2VfZmRzICgpOworICBlbHNlIGlmIChybmdfdHlwZXMuc3lzdGVtKQorICAgIF9nY3J5X3JuZ3N5c3RlbV9jbG9zZV9mZHMgKCk7CisgIGVsc2UKKyAgICBfZ2NyeV9ybmdjc3BybmdfY2xvc2VfZmRzICgpOworfQorCisKKy8qIFJldHVybiB0aGUgY3VycmVudCBSTkcgdHlwZS4gIElHTk9SRV9GSVBTX01PREUgaXMgYSBmbGFnIHVzZWQgdG8KKyAgIHNraXAgdGhlIHRlc3QgZm9yIEZJUFMuICBUaGlzIGlzIHVzZWZ1bCwgc28gdGhhdCB3ZSBhcmUgYWJsZSB0bworICAgcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBSTkcgZXZlbiBiZWZvcmUgd2UgaGF2ZSBzZXR1cCBGSVBTIG1vZGUKKyAgIChub3RlIHRoYXQgRklQUyBtb2RlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1bnRpbCBpdCBpcyBzd2l0Y2hlZCBvZmYKKyAgIGJ5IHRoZSBpbml0aWFsaXphdGlvbikuICBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yIHRoZSByZWdyZXNzaW9uCisgICB0ZXN0LiAgKi8KK2ludAorX2djcnlfZ2V0X3JuZ190eXBlIChpbnQgaWdub3JlX2ZpcHNfbW9kZSkKK3sKKyAgaWYgKCFpZ25vcmVfZmlwc19tb2RlICYmIGZpcHNfbW9kZSAoKSkKKyAgICByZXR1cm4gR0NSWV9STkdfVFlQRV9GSVBTOworICBlbHNlIGlmIChybmdfdHlwZXMuc3RhbmRhcmQpCisgICAgcmV0dXJuIEdDUllfUk5HX1RZUEVfU1RBTkRBUkQ7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5maXBzKQorICAgIHJldHVybiBHQ1JZX1JOR19UWVBFX0ZJUFM7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5zeXN0ZW0pCisgICAgcmV0dXJuIEdDUllfUk5HX1RZUEVfU1lTVEVNOworICBlbHNlCisgICAgcmV0dXJuIEdDUllfUk5HX1RZUEVfU1RBTkRBUkQ7Cit9CisKKwordm9pZAorX2djcnlfcmFuZG9tX2R1bXBfc3RhdHMgKHZvaWQpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgX2djcnlfcm5nZmlwc19kdW1wX3N0YXRzICgpOworICBlbHNlCisgICAgX2djcnlfcm5nY3Nwcm5nX2R1bXBfc3RhdHMgKCk7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgYmVmb3JlCisgICBpbml0aWFsaXphdGlvbiBvZiB0aGlzIG1vZHVsZSB0byBwbGFjZSB0aGUgcmFuZG9tIHBvb2xzIGludG8gc2VjdXJlCisgICBtZW1vcnkuICAqLwordm9pZAorX2djcnlfc2VjdXJlX3JhbmRvbV9hbGxvYyAodm9pZCkKK3sKKyAgaWYgKGZpcHNfbW9kZSAoKSkKKyAgICA7ICAvKiBOb3QgdXNlZDsgdGhlIEZJUFMgUk5HIGlzIGFsd2F5cyBpbiBzZWN1cmUgbW9kZS4gICovCisgIGVsc2UKKyAgICBfZ2NyeV9ybmdjc3Bybmdfc2VjdXJlX2FsbG9jICgpOworfQorCisKKy8qIFRoaXMgbWF5IGJlIGNhbGxlZCBiZWZvcmUgZnVsbCBpbml0aWFsaXphdGlvbiB0byBkZWdyYWRlIHRoZQorICAgcXVhbGl0eSBvZiB0aGUgUk5HIGZvciB0aGUgc2FrZSBvZiBhIGZhc3RlciBydW5uaW5nIHRlc3Qgc3VpdGUuICAqLwordm9pZAorX2djcnlfZW5hYmxlX3F1aWNrX3JhbmRvbV9nZW4gKHZvaWQpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgOyAgLyogTm90IHVzZWQuICAqLworICBlbHNlCisgICAgX2djcnlfcm5nY3Nwcm5nX2VuYWJsZV9xdWlja19nZW4gKCk7Cit9CisKKwordm9pZAorX2djcnlfc2V0X3JhbmRvbV9kYWVtb25fc29ja2V0IChjb25zdCBjaGFyICpzb2NrZXRuYW1lKQoreworICBpZiAoZmlwc19tb2RlICgpKQorICAgIDsgIC8qIE5vdCB1c2VkLiAgKi8KKyAgZWxzZQorICAgIF9nY3J5X3JuZ2NzcHJuZ19zZXRfZGFlbW9uX3NvY2tldCAoc29ja2V0bmFtZSk7Cit9CisKKy8qIFdpdGggT05PRkYgc2V0IHRvIDEsIGVuYWJsZSB0aGUgdXNlIG9mIHRoZSBkYWVtb24uICBXaXRoIE9OT0ZGIHNldAorICAgdG8gMCwgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBkYWVtb24uICBXaXRoIE9OT0Ygc2V0IHRvIC0xLCByZXR1cm4KKyAgIHdoZXRoZXIgdGhlIGRhZW1vbiBoYXMgYmVlbiBlbmFibGVkLiAqLworaW50CitfZ2NyeV91c2VfcmFuZG9tX2RhZW1vbiAoaW50IG9ub2ZmKQoreworICBpZiAoZmlwc19tb2RlICgpKQorICAgIHJldHVybiAwOyAvKiBOZXZlciBlbmFibGVkIGluIGZpcHMgbW9kZS4gICovCisgIGVsc2UKKyAgICByZXR1cm4gX2djcnlfcm5nY3Nwcm5nX3VzZV9kYWVtb24gKG9ub2ZmKTsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBubyByZWFsIFJORyBpcyBhdmFpbGFibGUgb3IgdGhlCisgICBxdWFsaXR5IG9mIHRoZSBSTkcgaGFzIGJlZW4gZGVncmFkZWQgZm9yIHRlc3QgcHVycG9zZXMuICAqLworaW50CitfZ2NyeV9yYW5kb21faXNfZmFrZWQgKHZvaWQpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgcmV0dXJuIF9nY3J5X3JuZ2ZpcHNfaXNfZmFrZWQgKCk7CisgIGVsc2UKKyAgICByZXR1cm4gX2djcnlfcm5nY3Nwcm5nX2lzX2Zha2VkICgpOworfQorCisKKy8qIEFkZCBCVUZMRU4gYnl0ZXMgZnJvbSBCVUYgdG8gdGhlIGludGVybmFsIHJhbmRvbSBwb29sLiAgUVVBTElUWQorICAgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiAwLi4xMDAgdG8gaW5kaWNhdGUgdGhlIGdvb2RuZXNzIG9mIHRoZQorICAgZW50cm9weSBhZGRlZCwgb3IgLTEgZm9yIGdvb2RuZXNzIG5vdCBrbm93bi4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3JhbmRvbV9hZGRfYnl0ZXMgKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgaW50IHF1YWxpdHkpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgcmV0dXJuIDA7IC8qIE5vIG5lZWQgZm9yIHRoaXMgaW4gZmlwcyBtb2RlLiAgKi8KKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN0YW5kYXJkKQorICAgIHJldHVybiBncGdfZXJyX2NvZGUgKF9nY3J5X3JuZ2NzcHJuZ19hZGRfYnl0ZXMgKGJ1ZiwgYnVmbGVuLCBxdWFsaXR5KSk7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5maXBzKQorICAgIHJldHVybiAwOworICBlbHNlIGlmIChybmdfdHlwZXMuc3lzdGVtKQorICAgIHJldHVybiAwOworICBlbHNlIC8qIGRlZmF1bHQgKi8KKyAgICByZXR1cm4gZ3BnX2Vycl9jb2RlIChfZ2NyeV9ybmdjc3BybmdfYWRkX2J5dGVzIChidWYsIGJ1ZmxlbiwgcXVhbGl0eSkpOworfQorCisKKy8qIEhlbHBlciBmdW5jdGlvbi4gICovCitzdGF0aWMgdm9pZAorZG9fcmFuZG9taXplICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgX2djcnlfcm5nZmlwc19yYW5kb21pemUgKGJ1ZmZlciwgbGVuZ3RoLCBsZXZlbCk7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5zdGFuZGFyZCkKKyAgICBfZ2NyeV9ybmdjc3BybmdfcmFuZG9taXplIChidWZmZXIsIGxlbmd0aCwgbGV2ZWwpOworICBlbHNlIGlmIChybmdfdHlwZXMuZmlwcykKKyAgICBfZ2NyeV9ybmdmaXBzX3JhbmRvbWl6ZSAoYnVmZmVyLCBsZW5ndGgsIGxldmVsKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN5c3RlbSkKKyAgICBfZ2NyeV9ybmdzeXN0ZW1fcmFuZG9taXplIChidWZmZXIsIGxlbmd0aCwgbGV2ZWwpOworICBlbHNlIC8qIGRlZmF1bHQgKi8KKyAgICBfZ2NyeV9ybmdjc3BybmdfcmFuZG9taXplIChidWZmZXIsIGxlbmd0aCwgbGV2ZWwpOworfQorCisvKiBUaGUgcHVibGljIGZ1bmN0aW9uIHRvIHJldHVybiByYW5kb20gZGF0YSBvZiB0aGUgcXVhbGl0eSBMRVZFTC4KKyAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGFuZCByYW5kb21pemVkIGJ1ZmZlciBvZgorICAgTEVWRUwgYW5kIE5CWVRFUyBsZW5ndGguICBDYWxsZXIgbXVzdCBmcmVlIHRoZSBidWZmZXIuICAqLwordm9pZCAqCitfZ2NyeV9yYW5kb21fYnl0ZXMgKHNpemVfdCBuYnl0ZXMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIHZvaWQgKmJ1ZmZlcjsKKworICBidWZmZXIgPSB4bWFsbG9jIChuYnl0ZXMpOworICBkb19yYW5kb21pemUgKGJ1ZmZlciwgbmJ5dGVzLCBsZXZlbCk7CisgIHJldHVybiBidWZmZXI7Cit9CisKKworLyogVGhlIHB1YmxpYyBmdW5jdGlvbiB0byByZXR1cm4gcmFuZG9tIGRhdGEgb2YgdGhlIHF1YWxpdHkgTEVWRUw7CisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJhbmRvbSBpbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgIGluIHNlY3VyZSBtZW1vcnkuICBDYWxsZXIgbXVzdCBmcmVlIHRoZSBidWZmZXIuICovCit2b2lkICoKK19nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUgKHNpemVfdCBuYnl0ZXMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIHZvaWQgKmJ1ZmZlcjsKKworICAvKiBIaXN0b3JpY2FsIG5vdGUgKDEuMy4wLS0xLjQuMSk6IFRoZSBidWZmZXIgd2FzIG9ubHkgYWxsb2NhdGVkCisgICAgIGluIHNlY3VyZSBtZW1vcnkgaWYgdGhlIHBvb2wgaW4gcmFuZG9tLWNzcHJuZy5jIHdhcyBhbHNvIHNldCB0bworICAgICB1c2Ugc2VjdXJlIG1lbW9yeS4gICovCisgIGJ1ZmZlciA9IHhtYWxsb2Nfc2VjdXJlIChuYnl0ZXMpOworICBkb19yYW5kb21pemUgKGJ1ZmZlciwgbmJ5dGVzLCBsZXZlbCk7CisgIHJldHVybiBidWZmZXI7Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9uIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIExFTkdUSCBieXRlcyBvZgorICAgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIHJhbmRvbSBieXRlcy4gIExldmVsIEdDUllfV0VBS19SQU5ET00gaXMKKyAgIG5vdCB2ZXJ5IHN0cm9uZywgR0NSWV9TVFJPTkdfUkFORE9NIGlzIHN0cm9uZyBlbm91Z2ggZm9yIG1vc3QKKyAgIHVzYWdlLCBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSBpcyBnb29kIGZvciBrZXkgZ2VuZXJhdGlvbiBzdHVmZiBidXQKKyAgIG1heSBiZSB2ZXJ5IHNsb3cuICAqLwordm9pZAorX2djcnlfcmFuZG9taXplICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIGRvX3JhbmRvbWl6ZSAoYnVmZmVyLCBsZW5ndGgsIGxldmVsKTsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgdG8gYmUgdXNlZCBhcyBhIHNlZWQKKyAgIGZpbGUgZm9yIHRoZSBQUk5HLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHByaW9yIHRvIHRoZQorICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJhbmRvbSBtb2R1bGUuICBOQU1FIG1heSBub3QgYmUgTlVMTC4gICovCit2b2lkCitfZ2NyeV9zZXRfcmFuZG9tX3NlZWRfZmlsZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaWYgKGZpcHNfbW9kZSAoKSkKKyAgICA7IC8qIE5vIG5lZWQgZm9yIHRoaXMgaW4gZmlwcyBtb2RlLiAgKi8KKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN0YW5kYXJkKQorICAgIF9nY3J5X3JuZ2NzcHJuZ19zZXRfc2VlZF9maWxlIChuYW1lKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLmZpcHMpCisgICAgOworICBlbHNlIGlmIChybmdfdHlwZXMuc3lzdGVtKQorICAgIDsKKyAgZWxzZSAvKiBkZWZhdWx0ICovCisgICAgX2djcnlfcm5nY3Nwcm5nX3NldF9zZWVkX2ZpbGUgKG5hbWUpOworfQorCisKKy8qIElmIGEgc2VlZCBmaWxlIGhhcyBiZWVuIHNldHVwLCB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHRvIHdyaXRlCisgICBiYWNrIHRoZSByYW5kb20gbnVtYmVycyBlbnRyb3B5IHBvb2wuICAqLwordm9pZAorX2djcnlfdXBkYXRlX3JhbmRvbV9zZWVkX2ZpbGUgKHZvaWQpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgOyAvKiBObyBuZWVkIGZvciB0aGlzIGluIGZpcHMgbW9kZS4gICovCisgIGVsc2UgaWYgKHJuZ190eXBlcy5zdGFuZGFyZCkKKyAgICBfZ2NyeV9ybmdjc3BybmdfdXBkYXRlX3NlZWRfZmlsZSAoKTsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLmZpcHMpCisgICAgOworICBlbHNlIGlmIChybmdfdHlwZXMuc3lzdGVtKQorICAgIDsKKyAgZWxzZSAvKiBkZWZhdWx0ICovCisgICAgX2djcnlfcm5nY3Nwcm5nX3VwZGF0ZV9zZWVkX2ZpbGUgKCk7Cit9CisKKworCisvKiBUaGUgZmFzdCByYW5kb20gcG9vbCBmdW5jdGlvbiBhcyBjYWxsZWQgYXQgc29tZSBwbGFjZXMgaW4KKyAgIGxpYmdjcnlwdC4gIFRoaXMgaXMgbWVyZWx5IGEgd3JhcHBlciB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIG1vZHVsZQorICAgaXMgaW5pdGlhbGl6ZWQgYW5kIHRvIGxvY2sgdGhlIHBvb2wuICBOb3RlLCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYQorICAgTk9QIHVubGVzcyBhIHJhbmRvbSBmdW5jdGlvbiBoYXMgYmVlbiB1c2VkIG9yIF9nY3J5X2luaXRpYWxpemUgKDEpCisgICBoYXMgYmVlbiB1c2VkLiAgV2UgdXNlIHRoaXMgaGFjayBzbyB0aGF0IHRoZSBpbnRlcm5hbCB1c2Ugb2YgdGhpcworICAgZnVuY3Rpb24gaW4gY2lwaGVyX29wZW4gYW5kIG1kX29wZW4gd29uJ3Qgc3RhcnQgZmlsbGluZyB1cCB0aGUKKyAgIHJhbmRvbSBwb29sLCBldmVuIGlmIG5vIHJhbmRvbSB3aWxsIGJlIHJlcXVpcmVkIGJ5IHRoZSBwcm9jZXNzLiAqLwordm9pZAorX2djcnlfZmFzdF9yYW5kb21fcG9sbCAodm9pZCkKK3sKKyAgaWYgKGZpcHNfbW9kZSAoKSkKKyAgICA7IC8qIE5vIG5lZWQgZm9yIHRoaXMgaW4gZmlwcyBtb2RlLiAgKi8KKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN0YW5kYXJkKQorICAgIF9nY3J5X3JuZ2NzcHJuZ19mYXN0X3BvbGwgKCk7CisgIGVsc2UgaWYgKHJuZ190eXBlcy5maXBzKQorICAgIDsKKyAgZWxzZSBpZiAocm5nX3R5cGVzLnN5c3RlbSkKKyAgICA7CisgIGVsc2UgLyogZGVmYXVsdCAqLworICAgIF9nY3J5X3JuZ2NzcHJuZ19mYXN0X3BvbGwgKCk7Cit9CisKKworCisvKiBDcmVhdGUgYW4gdW5wcmVkaWNhYmxlIG5vbmNlIG9mIExFTkdUSCBieXRlcyBpbiBCVUZGRVIuICovCit2b2lkCitfZ2NyeV9jcmVhdGVfbm9uY2UgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbm9uY2VfYnVmZmVyWzIwKzhdOworICBzdGF0aWMgaW50IG5vbmNlX2J1ZmZlcl9pbml0aWFsaXplZCA9IDA7CisgIHN0YXRpYyB2b2xhdGlsZSBwaWRfdCBteV9waWQ7IC8qIFRoZSB2b2xhdGlsZSBpcyB0aGVyZSB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGRvZXMgbm90IG9wdGltaXplIHRoZSBjb2RlIGF3YXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSB0aGUgZ2V0cGlkIGZ1bmN0aW9uIGlzIGJhZGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWQuICovCisgIHZvbGF0aWxlIHBpZF90IGFwaWQ7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBuOworICBpbnQgZXJyOworCisgIC8qIEZpcnN0IGNoZWNrIHdoZXRoZXIgd2Ugc2hhbGwgdXNlIHRoZSBGSVBTIG5vbmNlIGdlbmVyYXRvci4gIFRoaXMKKyAgICAgaXMgb25seSBkb25lIGluIEZJUFMgbW9kZSwgaW4gYWxsIG90aGVyIG1vZGVzLCB3ZSB1c2Ugb3VyIG93bgorICAgICBub25jZSBnZW5lcmF0b3Igd2hpY2ggaXMgc2VlZGVkIGJ5IHRoZSBSTkcgYWN0dWFsIGluIHVzZS4gICovCisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgeworICAgICAgX2djcnlfcm5nZmlwc19jcmVhdGVfbm9uY2UgKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogVGhpcyBpcyB0aGUgbm9uY2UgZ2VuZXJhdG9yLCB3aGljaCBmb3JtZXJseSBsaXZlZCBpbgorICAgICByYW5kb20tY3Nwcm5nLmMuICBJdCBpcyBub3cgdXNlZCBieSBhbGwgUk5HIHR5cGVzIGV4Y2VwdCB3aGVuIGluCisgICAgIEZJUFMgbW9kZSAobm90IHRoYXQgdGhpcyBtZWFucyBpdCBpcyBhbHNvIHVzZWQgaWYgdGhlIEZJUFMgUk5HCisgICAgIGhhcyBiZWVuIHNlbGVjdGVkIGJ1dCB3ZSBhcmUgbm90IGluIGZpcHMgbW9kZSkuICAqLworCisgIC8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW5pdGlhbGl6ZWQuICovCisgIF9nY3J5X3JhbmRvbV9pbml0aWFsaXplICgxKTsKKworICAvKiBBY3F1aXJlIHRoZSBub25jZSBidWZmZXIgbG9jay4gKi8KKyAgZXJyID0gYXRoX211dGV4X2xvY2sgKCZub25jZV9idWZmZXJfbG9jayk7CisgIGlmIChlcnIpCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIGFjcXVpcmUgdGhlIG5vbmNlIGJ1ZmZlciBsb2NrOiAlc1xuIiwKKyAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKKworICBhcGlkID0gZ2V0cGlkICgpOworICAvKiBUaGUgZmlyc3QgdGltZSBpbml0aWFsaXplIG91ciBidWZmZXIuICovCisgIGlmICghbm9uY2VfYnVmZmVyX2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIHRpbWVfdCBhdGltZSA9IHRpbWUgKE5VTEwpOworICAgICAgcGlkX3QgeHBpZCA9IGFwaWQ7CisKKyAgICAgIG15X3BpZCA9IGFwaWQ7CisKKyAgICAgIGlmICgoc2l6ZW9mIGFwaWQgKyBzaXplb2YgYXRpbWUpID4gc2l6ZW9mIG5vbmNlX2J1ZmZlcikKKyAgICAgICAgQlVHICgpOworCisgICAgICAvKiBJbml0aWFsaXplIHRoZSBmaXJzdCAyMCBieXRlcyB3aXRoIGEgcmVhc29uYWJsZSB2YWx1ZSBzbyB0aGF0CisgICAgICAgICBhIGZhaWx1cmUgb2YgZ2NyeV9yYW5kb21pemUgd29uJ3QgYWZmZWN0IHVzIHRvbyBtdWNoLiAgRG9uJ3QKKyAgICAgICAgIGNhcmUgYWJvdXQgdGhlIHVuaW5pdGlhbGl6ZWQgcmVtYWluaW5nIGJ5dGVzLiAqLworICAgICAgcCA9IG5vbmNlX2J1ZmZlcjsKKyAgICAgIG1lbWNweSAocCwgJnhwaWQsIHNpemVvZiB4cGlkKTsKKyAgICAgIHAgKz0gc2l6ZW9mIHhwaWQ7CisgICAgICBtZW1jcHkgKHAsICZhdGltZSwgc2l6ZW9mIGF0aW1lKTsKKworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgbmV2ZXIgY2hhbmdpbmcgcHJpdmF0ZSBwYXJ0IG9mIDY0IGJpdHMuICovCisgICAgICBfZ2NyeV9yYW5kb21pemUgKG5vbmNlX2J1ZmZlcisyMCwgOCwgR0NSWV9XRUFLX1JBTkRPTSk7CisKKyAgICAgIG5vbmNlX2J1ZmZlcl9pbml0aWFsaXplZCA9IDE7CisgICAgfQorICBlbHNlIGlmICggbXlfcGlkICE9IGFwaWQgKQorICAgIHsKKyAgICAgIC8qIFdlIGZvcmtlZC4gTmVlZCB0byByZXNlZWQgdGhlIGJ1ZmZlciAtIGRvaW5nIHRoaXMgZm9yIHRoZQorICAgICAgICAgcHJpdmF0ZSBwYXJ0IHNob3VsZCBiZSBzdWZmaWNpZW50LiAqLworICAgICAgZG9fcmFuZG9taXplIChub25jZV9idWZmZXIrMjAsIDgsIEdDUllfV0VBS19SQU5ET00pOworICAgICAgLyogVXBkYXRlIHRoZSBwaWQgc28gdGhhdCB3ZSB3b24ndCBydW4gaW50byBoZXJlIGFnYWluIGFuZAorICAgICAgICAgYWdhaW4uICovCisgICAgICBteV9waWQgPSBhcGlkOworICAgIH0KKworICAvKiBDcmVhdGUgdGhlIG5vbmNlIGJ5IGhhc2hpbmcgdGhlIGVudGlyZSBidWZmZXIsIHJldHVybmluZyB0aGUgaGFzaAorICAgICBhbmQgdXBkYXRpbmcgdGhlIGZpcnN0IDIwIGJ5dGVzIG9mIHRoZSBidWZmZXIgd2l0aCB0aGlzIGhhc2guICovCisgIGZvciAocCA9IGJ1ZmZlcjsgbGVuZ3RoID4gMDsgbGVuZ3RoIC09IG4sIHAgKz0gbikKKyAgICB7CisgICAgICBfZ2NyeV9zaGExX2hhc2hfYnVmZmVyIChub25jZV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZV9idWZmZXIsIHNpemVvZiBub25jZV9idWZmZXIpOworICAgICAgbiA9IGxlbmd0aCA+IDIwPyAyMCA6IGxlbmd0aDsKKyAgICAgIG1lbWNweSAocCwgbm9uY2VfYnVmZmVyLCBuKTsKKyAgICB9CisKKyAgLyogUmVsZWFzZSB0aGUgbm9uY2UgYnVmZmVyIGxvY2suICovCisgIGVyciA9IGF0aF9tdXRleF91bmxvY2sgKCZub25jZV9idWZmZXJfbG9jayk7CisgIGlmIChlcnIpCisgICAgbG9nX2ZhdGFsICgiZmFpbGVkIHRvIHJlbGVhc2UgdGhlIG5vbmNlIGJ1ZmZlciBsb2NrOiAlc1xuIiwKKyAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKK30KKworCisvKiBSdW4gdGhlIHNlbGYtdGVzdHMgZm9yIHRoZSBSTkcuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkCisgICBmb3IgdGhlIEZJUFMgZ2VuZXJhdG9yLiAgKi8KK2dwZ19lcnJvcl90CitfZ2NyeV9yYW5kb21fc2VsZnRlc3QgKHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KQoreworICBpZiAoZmlwc19tb2RlICgpKQorICAgIHJldHVybiBfZ2NyeV9ybmdmaXBzX3NlbGZ0ZXN0IChyZXBvcnQpOworICBlbHNlCisgICAgcmV0dXJuIDA7IC8qIE5vIHNlbGZ0ZXN0cyB5ZXQuICAqLworfQorCisKKy8qIENyZWF0ZSBhIG5ldyB0ZXN0IGNvbnRleHQgZm9yIGFuIGV4dGVybmFsIFJORyB0ZXN0IGRyaXZlci4gIE9uCisgICBzdWNjZXNzIHRoZSB0ZXN0IGNvbnRleHQgaXMgc3RvcmVkIGF0IFJfQ09OVEVYVDsgb24gZmFpbHVyZSBOVUxMIGlzCisgICBzdG9yZWQgYXQgUl9DT05URVhUIGFuZCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcmFuZG9tX2luaXRfZXh0ZXJuYWxfdGVzdCAodm9pZCAqKnJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZHQsIHNpemVfdCBkdGxlbikKK3sKKyAgKHZvaWQpZmxhZ3M7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgcmV0dXJuIF9nY3J5X3JuZ2ZpcHNfaW5pdF9leHRlcm5hbF90ZXN0IChyX2NvbnRleHQsIGZsYWdzLCBrZXksIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIHNlZWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdCwgZHRsZW4pOworICBlbHNlCisgICAgcmV0dXJuIEdQR19FUlJfTk9UX1NVUFBPUlRFRDsKK30KKworLyogR2V0IEJVRkxFTiBieXRlcyBmcm9tIHRoZSBSTkcgdXNpbmcgdGhlIHRlc3QgQ09OVEVYVCBhbmQgc3RvcmUgdGhlbQorICAgYXQgQlVGRkVSLiAgUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfcmFuZG9tX3J1bl9leHRlcm5hbF90ZXN0ICh2b2lkICpjb250ZXh0LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgcmV0dXJuIF9nY3J5X3JuZ2ZpcHNfcnVuX2V4dGVybmFsX3Rlc3QgKGNvbnRleHQsIGJ1ZmZlciwgYnVmbGVuKTsKKyAgZWxzZQorICAgIHJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQ7Cit9CisKKy8qIFJlbGVhc2UgdGhlIHRlc3QgQ09OVEVYVC4gICovCit2b2lkCitfZ2NyeV9yYW5kb21fZGVpbml0X2V4dGVybmFsX3Rlc3QgKHZvaWQgKmNvbnRleHQpCit7CisgIGlmIChmaXBzX21vZGUgKCkpCisgICAgX2djcnlfcm5nZmlwc19kZWluaXRfZXh0ZXJuYWxfdGVzdCAoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9yYW5kb20vcmFuZG9tLmggYi9yYW5kb20vcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOGNhYgotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9yYW5kb20uaApAQCAtMCwwICsxLDY5IEBACisvKiByYW5kb20uaCAtIHJhbmRvbSBmdW5jdGlvbnMKKyAqCUNvcHlyaWdodCAoQykgMTk5OCwgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKyNpZm5kZWYgRzEwX1JBTkRPTV9ICisjZGVmaW5lIEcxMF9SQU5ET01fSAorCisjaW5jbHVkZSAidHlwZXMuaCIKKworLyotLSByYW5kb20uYyAtLSovCit2b2lkIF9nY3J5X3JlZ2lzdGVyX3JhbmRvbV9wcm9ncmVzcyAodm9pZCAoKmNiKSh2b2lkICosY29uc3QgY2hhciosaW50LGludCxpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNiX2RhdGEgKTsKKwordm9pZCBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlIChpbnQgdHlwZSk7Cit2b2lkIF9nY3J5X3JhbmRvbV9pbml0aWFsaXplIChpbnQgZnVsbCk7Cit2b2lkIF9nY3J5X3JhbmRvbV9jbG9zZV9mZHMgKHZvaWQpOworaW50ICBfZ2NyeV9nZXRfcm5nX3R5cGUgKGludCBpZ25vcmVfZmlwc19tb2RlKTsKK3ZvaWQgX2djcnlfcmFuZG9tX2R1bXBfc3RhdHModm9pZCk7Cit2b2lkIF9nY3J5X3NlY3VyZV9yYW5kb21fYWxsb2Modm9pZCk7Cit2b2lkIF9nY3J5X2VuYWJsZV9xdWlja19yYW5kb21fZ2VuICh2b2lkKTsKK2ludCAgX2djcnlfcmFuZG9tX2lzX2Zha2VkKHZvaWQpOwordm9pZCBfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQgKGNvbnN0IGNoYXIgKnNvY2tldG5hbWUpOworaW50ICBfZ2NyeV91c2VfcmFuZG9tX2RhZW1vbiAoaW50IG9ub2ZmKTsKK3ZvaWQgX2djcnlfc2V0X3JhbmRvbV9zZWVkX2ZpbGUgKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSAodm9pZCk7CisKK2J5dGUgKl9nY3J5X2dldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKTsKK3ZvaWQgX2djcnlfZmFzdF9yYW5kb21fcG9sbCggdm9pZCApOworCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfcmFuZG9tX2luaXRfZXh0ZXJuYWxfdGVzdCAodm9pZCAqKnJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpkdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZHRsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X3JhbmRvbV9ydW5fZXh0ZXJuYWxfdGVzdCAodm9pZCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7Cit2b2lkICAgICAgICAgICAgX2djcnlfcmFuZG9tX2RlaW5pdF9leHRlcm5hbF90ZXN0ICh2b2lkICpjb250ZXh0KTsKKworCisvKi0tIHJuZGVnZC5jIC0tKi8KK2dwZ19lcnJvcl90IF9nY3J5X3JuZGVnZF9zZXRfc29ja2V0X25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKi0tIHJhbmRvbS1kYWVtb24uYyAob25seSB1c2VkIGZyb20gcmFuZG9tLmMpIC0tKi8KKyNpZmRlZiBVU0VfUkFORE9NX0RBRU1PTgordm9pZCBfZ2NyeV9kYWVtb25faW5pdGlhbGl6ZV9iYXNpY3MgKHZvaWQpOworaW50IF9nY3J5X2RhZW1vbl9yYW5kb21pemUgKGNvbnN0IGNoYXIgKnNvY2tldG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOworI2VuZGlmIC8qVVNFX1JBTkRPTV9EQUVNT04qLworCisjZW5kaWYgLypHMTBfUkFORE9NX0gqLwpkaWZmIC0tZ2l0IGEvcmFuZG9tL3JuZGVnZC5jIGIvcmFuZG9tL3JuZGVnZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0M2ZjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5kb20vcm5kZWdkLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qIHJuZGVnZC5jICAtCWludGVyZmFjZSB0byB0aGUgRUdECisgKglDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgInJhbmQtaW50ZXJuYWwuaCIKKworI2lmbmRlZiBvZmZzZXRvZgorI2RlZmluZSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpICgoc2l6ZV90KSAmKCh0eXBlICopMCktPm1lbWJlcikKKyNlbmRpZgorCitzdGF0aWMgaW50IGVnZF9zb2NrZXQgPSAtMTsKKworLyogQWxsb2NhdGVkIG5hbWUgb2YgdGhlIHNvY2tldCBpZiBzdXBwbGllZCBhdCBydW50aW1lLiAgKi8KK3N0YXRpYyBjaGFyICp1c2VyX3NvY2tldF9uYW1lOworCisKKy8qIEFsbG9jYXRlIGEgbmV3IGZpbGVuYW1lIGZyb20gRklSU1RfUEFSVCBhbmQgU0VDT05EX1BBUlQgYW5kIHRvCisgICB0aWxkZSBleHBhbnNpb24gZm9yIGZpcnN0X3BhcnQuICBTRUNPTkRfUEFSVCBtaWdodCBiZSBOVUxMLgorICovCitzdGF0aWMgY2hhciAqCitteV9tYWtlX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaXJzdF9wYXJ0LCBjb25zdCBjaGFyICpzZWNvbmRfcGFydCkKK3sKKyAgc2l6ZV90IG47CisgIGNoYXIgKm5hbWUsICpob21lLCAqcDsKKworICBuID0gc3RybGVuKGZpcnN0X3BhcnQpKzE7CisgIGlmIChzZWNvbmRfcGFydCkKKyAgICBuICs9IHN0cmxlbiAoc2Vjb25kX3BhcnQpICsgMTsKKworICBob21lID0gTlVMTDsKKyAgaWYoICpmaXJzdF9wYXJ0ID09ICd+JyAmJiBmaXJzdF9wYXJ0WzFdID09ICcvJworICAgICAgJiYgKGhvbWUgPSBnZXRlbnYoIkhPTUUiKSkgJiYgKmhvbWUgKQorICAgIG4gKz0gc3RybGVuKGhvbWUpOworCisgIG5hbWUgPSBnY3J5X3htYWxsb2Mobik7CisgIHAgPSAoaG9tZQorICAgICAgID8gc3RwY3B5IChzdHBjcHkgKG5hbWUsIGhvbWUpLCBmaXJzdF9wYXJ0KzEgKQorICAgICAgIDogc3RwY3B5IChuYW1lLCBmaXJzdF9wYXJ0KSApOworCisgIGlmIChzZWNvbmRfcGFydCkKKyAgICBzdHJjcHkgKHN0cGNweShwLCIvIiksIHNlY29uZF9wYXJ0KTsKKworICByZXR1cm4gbmFtZTsKK30KKworCitzdGF0aWMgaW50Citkb193cml0ZSggaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZXMgKQoreworICBzaXplX3QgbmxlZnQgPSBuYnl0ZXM7CisgIGludCBud3JpdHRlbjsKKworICB3aGlsZSggbmxlZnQgPiAwICkKKyAgICB7CisgICAgICBud3JpdHRlbiA9IHdyaXRlKCBmZCwgYnVmLCBubGVmdCk7CisgICAgICBpZiggbndyaXR0ZW4gPCAwICkKKyAgICAgICAgeworICAgICAgICAgIGlmKCBlcnJubyA9PSBFSU5UUiApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICByZXR1cm4gLTE7CisJfQorICAgICAgbmxlZnQgLT0gbndyaXR0ZW47CisgICAgICBidWYgPSAoY2hhciopYnVmICsgbndyaXR0ZW47CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZG9fcmVhZCggaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZXMgKQoreworICBpbnQgbiwgbnJlYWQgPSAwOworCisgIGRvCisgICAgeworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIG4gPSByZWFkKGZkLCAoY2hhciopYnVmICsgbnJlYWQsIG5ieXRlcyApOworICAgICAgICB9CisgICAgICB3aGlsZSggbiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiApOworICAgICAgaWYoIG4gPT0gLTEpCisgICAgICAgIHJldHVybiBucmVhZD8gbnJlYWQ6LTE7CisgICAgICBpZiggbiA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBucmVhZCArPSBuOworICAgICAgbmJ5dGVzIC09IG47CisgICAgfQorICB3aGlsZSggbnJlYWQgPCBuYnl0ZXMgKTsKKyAgcmV0dXJuIG5yZWFkOworfQorCisKKy8qIE5vdGUgdGhhdCBoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLiAgKi8KK2dwZ19lcnJvcl90CitfZ2NyeV9ybmRlZ2Rfc2V0X3NvY2tldF9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjaGFyICpuZXduYW1lOworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKworICBuZXduYW1lID0gbXlfbWFrZV9maWxlbmFtZSAobmFtZSwgTlVMTCk7CisgIGlmIChzdHJsZW4gKG5ld25hbWUpKzEgPj0gc2l6ZW9mIGFkZHIuc3VuX3BhdGgpCisgICAgeworICAgICAgeGZyZWUgKG5ld25hbWUpOworICAgICAgcmV0dXJuIGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgIH0KKyAgeGZyZWUgKHVzZXJfc29ja2V0X25hbWUpOworICB1c2VyX3NvY2tldF9uYW1lID0gbmV3bmFtZTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogQ29ubmVjdCB0byB0aGUgRUdEIGFuZCByZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvci4gIFJldHVybiAtMSBvbgorICAgZXJyb3IuICBXaXRoIE5PRkFJTCBzZXQgdG8gdHJ1ZSwgc2lsZW50bHkgZmFpbCBhbmQgcmV0dXJuIHRoZQorICAgZXJyb3IsIG90aGVyd2lzZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBkaWUuICovCitpbnQKK19nY3J5X3JuZGVnZF9jb25uZWN0X3NvY2tldCAoaW50IG5vZmFpbCkKK3sKKyAgaW50IGZkOworICBjb25zdCBjaGFyICpibmFtZSA9IE5VTEw7CisgIGNoYXIgKm5hbWU7CisgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworICBpbnQgYWRkcl9sZW47CisKKyAgaWYgKGVnZF9zb2NrZXQgIT0gLTEpCisgICAgeworICAgICAgY2xvc2UgKGVnZF9zb2NrZXQpOworICAgICAgZWdkX3NvY2tldCA9IC0xOworICAgIH0KKworI2lmZGVmIEVHRF9TT0NLRVRfTkFNRQorICBibmFtZSA9IEVHRF9TT0NLRVRfTkFNRTsKKyNlbmRpZgorICBpZiAodXNlcl9zb2NrZXRfbmFtZSkKKyAgICB7CisgICAgICBuYW1lID0gZ2NyeV9zdHJkdXAgKHVzZXJfc29ja2V0X25hbWUpOworICAgICAgaWYgKCFuYW1lKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFub2ZhaWwpCisgICAgICAgICAgICBsb2dfZmF0YWwgKCJlcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBpbiBybmRlZ2Q6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykgKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKCAhYm5hbWUgfHwgISpibmFtZSApCisgICAgbmFtZSA9IG15X21ha2VfZmlsZW5hbWUgKCJ+Ly5nbnVwZyIsICJlbnRyb3B5Iik7CisgIGVsc2UKKyAgICBuYW1lID0gbXlfbWFrZV9maWxlbmFtZSAoYm5hbWUsIE5VTEwpOworCisgIGlmIChzdHJsZW4obmFtZSkrMSA+PSBzaXplb2YgYWRkci5zdW5fcGF0aCkKKyAgICBsb2dfZmF0YWwgKCJFR0Qgc29ja2V0bmFtZSBpcyB0b28gbG9uZ1xuIik7CisKKyAgbWVtc2V0KCAmYWRkciwgMCwgc2l6ZW9mIGFkZHIgKTsKKyAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgc3RyY3B5KCBhZGRyLnN1bl9wYXRoLCBuYW1lICk7CisgIGFkZHJfbGVuID0gKG9mZnNldG9mKCBzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoICkKKyAgICAgICAgICAgICAgKyBzdHJsZW4oIGFkZHIuc3VuX3BhdGggKSk7CisKKyAgZmQgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOworICBpZiAoZmQgPT0gLTEgJiYgIW5vZmFpbCkKKyAgICBsb2dfZmF0YWwoImNhbid0IGNyZWF0ZSB1bml4IGRvbWFpbiBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykgKTsKKyAgZWxzZSBpZiAoY29ubmVjdCAoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBhZGRyX2xlbikgPT0gLTEpCisgICAgeworICAgICAgaWYgKCFub2ZhaWwpCisgICAgICAgIGxvZ19mYXRhbCgiY2FuJ3QgY29ubmVjdCB0byBFR0Qgc29ja2V0IGAlcyc6ICVzXG4iLAorCQkgIG5hbWUsIHN0cmVycm9yKGVycm5vKSApOworICAgICAgY2xvc2UgKGZkKTsKKyAgICAgIGZkID0gLTE7CisgICAgfQorICB4ZnJlZSAobmFtZSk7CisgIGlmIChmZCAhPSAtMSkKKyAgICBlZ2Rfc29ja2V0ID0gZmQ7CisgIHJldHVybiBmZDsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIE5vdGU6IFdlIGFsd2F5cyB1c2UgdGhlIGhpZ2hlc3QgbGV2ZWwuCisgKiBUbyBib29zdCB0aGUgcGVyZm9ybWFuY2Ugd2UgbWF5IHdhbnQgdG8gYWRkIHNvbWUKKyAqIGFkZGl0aW9uYWwgY29kZSBmb3IgbGV2ZWwgMQorICoKKyAqIFVzaW5nIGEgbGV2ZWwgb2YgMCBzaG91bGQgbmV2ZXIgYmxvY2sgYW5kIGJldHRlciBhZGQgbm90aGluZworICogdG8gdGhlIHBvb2wuICBTbyB0aGlzIGlzIGp1c3QgYSBkdW1teSBmb3IgRUdELgorICovCitpbnQKK19nY3J5X3JuZGVnZF9nYXRoZXJfcmFuZG9tICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApCit7CisgIGludCBmZCA9IGVnZF9zb2NrZXQ7CisgIGludCBuOworICBieXRlIGJ1ZmZlclsyNTYrMl07CisgIGludCBuYnl0ZXM7CisgIGludCBkb19yZXN0YXJ0ID0gMDsKKworICBpZiggIWxlbmd0aCApCisgICAgcmV0dXJuIDA7CisgIGlmKCAhbGV2ZWwgKQorICAgIHJldHVybiAwOworCisgcmVzdGFydDoKKyAgaWYgKGZkID09IC0xIHx8IGRvX3Jlc3RhcnQpCisgICAgZmQgPSBfZ2NyeV9ybmRlZ2RfY29ubmVjdF9zb2NrZXQgKDApOworCisgIGRvX3Jlc3RhcnQgPSAwOworCisgIG5ieXRlcyA9IGxlbmd0aCA8IDI1NT8gbGVuZ3RoIDogMjU1OworICAvKiBGaXJzdCB0aW1lIHdlIGRvIGl0IHdpdGggYSBub24gYmxvY2tpbmcgcmVxdWVzdCAqLworICBidWZmZXJbMF0gPSAxOyAvKiBub24gYmxvY2tpbmcgKi8KKyAgYnVmZmVyWzFdID0gbmJ5dGVzOworICBpZiggZG9fd3JpdGUoIGZkLCBidWZmZXIsIDIgKSA9PSAtMSApCisgICAgbG9nX2ZhdGFsKCJjYW4ndCB3cml0ZSB0byB0aGUgRUdEOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pICk7CisgIG4gPSBkb19yZWFkKCBmZCwgYnVmZmVyLCAxICk7CisgIGlmKCBuID09IC0xICkKKyAgICB7CisgICAgICBsb2dfZXJyb3IoInJlYWQgZXJyb3Igb24gRUdEOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIGRvX3Jlc3RhcnQgPSAxOworICAgICAgZ290byByZXN0YXJ0OworICAgIH0KKyAgbiA9IGJ1ZmZlclswXTsKKyAgaWYoIG4gKQorICAgIHsKKyAgICAgIG4gPSBkb19yZWFkKCBmZCwgYnVmZmVyLCBuICk7CisgICAgICBpZiggbiA9PSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfZXJyb3IoInJlYWQgZXJyb3Igb24gRUdEOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICBkb19yZXN0YXJ0ID0gMTsKKyAgICAgICAgICBnb3RvIHJlc3RhcnQ7CisJfQorICAgICAgKCphZGQpKCBidWZmZXIsIG4sIG9yaWdpbiApOworICAgICAgbGVuZ3RoIC09IG47CisgICAgfQorCisgIGlmKCBsZW5ndGggKQorICAgIHsKKyAgICAgIGxvZ19pbmZvICgKKyAgICAgIF8oIlBsZWFzZSB3YWl0LCBlbnRyb3B5IGlzIGJlaW5nIGdhdGhlcmVkLiBEbyBzb21lIHdvcmsgaWYgaXQgd291bGRcbiIKKyAgICAgICAgImtlZXAgeW91IGZyb20gZ2V0dGluZyBib3JlZCwgYmVjYXVzZSBpdCB3aWxsIGltcHJvdmUgdGhlIHF1YWxpdHlcbiIKKyAgICAgICAgIm9mIHRoZSBlbnRyb3B5LlxuIikgKTsKKyAgICB9CisgIHdoaWxlKCBsZW5ndGggKQorICAgIHsKKyAgICAgIG5ieXRlcyA9IGxlbmd0aCA8IDI1NT8gbGVuZ3RoIDogMjU1OworCisgICAgICBidWZmZXJbMF0gPSAyOyAvKiBibG9ja2luZyAqLworICAgICAgYnVmZmVyWzFdID0gbmJ5dGVzOworICAgICAgaWYoIGRvX3dyaXRlKCBmZCwgYnVmZmVyLCAyICkgPT0gLTEgKQorICAgICAgICBsb2dfZmF0YWwoImNhbid0IHdyaXRlIHRvIHRoZSBFR0Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykgKTsKKyAgICAgIG4gPSBkb19yZWFkKCBmZCwgYnVmZmVyLCBuYnl0ZXMgKTsKKyAgICAgIGlmKCBuID09IC0xICkKKyAgICAgICAgeworICAgICAgICAgIGxvZ19lcnJvcigicmVhZCBlcnJvciBvbiBFR0Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgIGRvX3Jlc3RhcnQgPSAxOworICAgICAgICAgIGdvdG8gcmVzdGFydDsKKwl9CisgICAgICAoKmFkZCkoIGJ1ZmZlciwgbiwgb3JpZ2luICk7CisgICAgICBsZW5ndGggLT0gbjsKKyAgICB9CisgIG1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpICk7CisKKyAgcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KK30KZGlmZiAtLWdpdCBhL3JhbmRvbS9ybmRody5jIGIvcmFuZG9tL3JuZGh3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyNTUxMgotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9ybmRody5jCkBAIC0wLDAgKzEsMjIxIEBACisvKiBybmRody5jICAtIEFjY2VzcyB0byB0aGUgZXh0ZXJuYWwgcmFuZG9tIGRhZW1vbgorICogQ29weXJpZ2h0IChDKSAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAgRG1pdHJ5IEthc2F0a2luCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJyYW5kLWludGVybmFsLmgiCisKKyN1bmRlZiBVU0VfUEFETE9DSworI2lmZGVmIEVOQUJMRV9QQURMT0NLX1NVUFBPUlQKKyMgaWZkZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKyMgIGlmIChkZWZpbmVkIChfX2kzODZfXykgJiYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gNCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgIGRlZmluZSBVU0VfUEFETE9DSyAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qRU5BQkxFX1BBRExPQ0tfU1VQUE9SVCovCisKKyN1bmRlZiBVU0VfRFJORworI2lmZGVmIEVOQUJMRV9EUk5HX1NVUFBPUlQKKyMgaWZkZWYgSEFWRV9HQ0NfQVRUUklCVVRFX0FMSUdORUQKKyMgIGlmIChkZWZpbmVkIChfX2kzODZfXykgJiYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gNCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgIGRlZmluZSBVU0VfRFJORyAxCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qRU5BQkxFX1JEUkFORF9TVVBQT1JUKi8KKwordHlwZWRlZiB2b2lkICgqYWRkX2ZuX3QpKGNvbnN0IHZvaWQqLCBzaXplX3QsIGVudW0gcmFuZG9tX29yaWdpbnMpOworCisvKiBLZWVwIHRyYWNrIG9uIHdoZXRoZXIgdGhlIFJORyBoYXMgcHJvYmxlbXMuICAqLworc3RhdGljIHZvbGF0aWxlIGludCBybmdfZmFpbGVkOworCisKKyNpZmRlZiBVU0VfUEFETE9DSworc3RhdGljIHNpemVfdAorcG9sbF9wYWRsb2NrICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LCBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4sIGludCBmYXN0KQoreworICB2b2xhdGlsZSBjaGFyIGJ1ZmZlcls2NCs4XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKKyAgdm9sYXRpbGUgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IG5ieXRlcywgc3RhdHVzOworCisgIC8qIFBldGVyIEd1dG1hbm4ncyBjcnlwdGxpYiB0ZXN0cyBhZ2FpbiB3aGV0aGVyIHRoZSBSTkcgaXMgZW5hYmxlZAorICAgICBidXQgd2UgZG9uJ3QgZG8gc28uICBXZSB3b3VsZCBoYXZlIHRvIGRvIHRoaXMgYWxzbyBmb3Igb3VyIEFFUworICAgICBpbXBsZW1lbnRhaW9uIGFuZCB0aGF0IGlzIGRlZmluaXRlbHkgdG9vIHRpbWUgY29uc3VtaW5nLiAgVGhlcmUKKyAgICAgd291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiBhbnl3YXkuICBUaHVzIHdlIGFzc3VtZSB0aGF0IHRoZSBPUworICAgICBkb2VzIG5vdCBjaGFuZ2UgdGhlIFBhZGxvY2sgaW5pdGlhbGl6YXRpb24gd2hpbGUgYSB1c2VyIHByb2Nlc3MKKyAgICAgaXMgcnVubmluZy4gICovCisgIHAgPSBidWZmZXI7CisgIG5ieXRlcyA9IDA7CisgIHdoaWxlIChuYnl0ZXMgPCA2NCkKKyAgICB7CisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKQorICAgICAgYXNtIHZvbGF0aWxlCisgICAgICAgICgibW92cSAlMSwgJSVyZGlcblx0IiAgICAgICAgIC8qIFNldCBidWZmZXIuICAqLworICAgICAgICAgInhvcnEgJSVyZHgsICUlcmR4XG5cdCIgICAgICAvKiBSZXF1ZXN0IHVwIHRvIDggYnl0ZXMuICAqLworICAgICAgICAgIi5ieXRlIDB4MGYsIDB4YTcsIDB4YzBcblx0IiAvKiBYU1RPUkUgUk5HLiAqLworICAgICAgICAgOiAiPWEiIChzdGF0dXMpCisgICAgICAgICA6ICJnIiAocCkKKyAgICAgICAgIDogIiVyZHgiLCAiJXJkaSIsICJjYyIKKyAgICAgICAgICk7CisjZWxzZQorICAgICAgYXNtIHZvbGF0aWxlCisgICAgICAgICgibW92bCAlMSwgJSVlZGlcblx0IiAgICAgICAgIC8qIFNldCBidWZmZXIuICAqLworICAgICAgICAgInhvcmwgJSVlZHgsICUlZWR4XG5cdCIgICAgICAvKiBSZXF1ZXN0IHVwIHRvIDggYnl0ZXMuICAqLworICAgICAgICAgIi5ieXRlIDB4MGYsIDB4YTcsIDB4YzBcblx0IiAvKiBYU1RPUkUgUk5HLiAqLworICAgICAgICAgOiAiPWEiIChzdGF0dXMpCisgICAgICAgICA6ICJnIiAocCkKKyAgICAgICAgIDogIiVlZHgiLCAiJWVkaSIsICJjYyIKKyAgICAgICAgICk7CisjZW5kaWYKKyAgICAgIGlmICgoc3RhdHVzICYgKDE8PDYpKSAgICAgICAgIC8qIFJORyBzdGlsbCBlbmFibGVkLiAgKi8KKyAgICAgICAgICAmJiAhKHN0YXR1cyAmICgxPDwxMykpICAgIC8qIHZvbiBOZXVtYW5uIGNvcnJlY3RvciBpcyBlbmFibGVkLiAgKi8KKyAgICAgICAgICAmJiAhKHN0YXR1cyAmICgxPDwxNCkpICAgIC8qIFN0cmluZyBmaWx0ZXIgaXMgZGlzYWJsZWQuICAqLworICAgICAgICAgICYmICEoc3RhdHVzICYgMHgxYzAwKSAgICAgLyogQklBUyB2b2x0YWdlIGF0IGRlZmF1bHQuICAqLworICAgICAgICAgICYmICghKHN0YXR1cyAmIDB4MWYpIHx8IChzdGF0dXMgJiAweDFmKSA9PSA4KSAvKiBTYW5pdHkgY2hlY2suICAqLworICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIG5ieXRlcyArPSAoc3RhdHVzICYgMHgxZik7CisgICAgICAgICAgaWYgKGZhc3QpCisgICAgICAgICAgICBicmVhazsgLyogRG9uJ3QgZ2V0IGludG8gdGhlIGxvb3Agd2l0aCB0aGUgZmFzdCBmbGFnIHNldC4gICovCisgICAgICAgICAgcCArPSAoc3RhdHVzICYgMHgxZik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciB3ZSBuZWVkIHRvIGJyZWFrIHRoZSBsb29wIGFuZAorICAgICAgICAgICAgIHJlY29yZCB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBwYWRsb2NrCisgICAgICAgICAgICAgUk5HLiAgKi8KKyAgICAgICAgICBybmdfZmFpbGVkID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAobmJ5dGVzKQorICAgIHsKKyAgICAgICgqYWRkKSAoKHZvaWQqKWJ1ZmZlciwgbmJ5dGVzLCBvcmlnaW4pOworICAgICAgd2lwZW1lbW9yeSAoYnVmZmVyLCBuYnl0ZXMpOworICAgIH0KKyAgcmV0dXJuIG5ieXRlczsKK30KKyNlbmRpZiAvKlVTRV9QQURMT0NLKi8KKworCisjaWZkZWYgVVNFX0RSTkcKKyMgZGVmaW5lIFJEUkFORF9SRVRSWV9MT09QUwkxMAorIyBkZWZpbmUgUkRSQU5EX0lOVAkiLmJ5dGUgMHgwZiwweGM3LDB4ZjAiCisjIGlmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX0xQNjRfXykKKyMgIGRlZmluZSBSRFJBTkRfTE9ORwkiLmJ5dGUgMHg0OCwweDBmLDB4YzcsMHhmMCIKKyMgZWxzZQorIyAgZGVmaW5lIFJEUkFORF9MT05HCVJEUkFORF9JTlQKKyMgZW5kaWYKK3N0YXRpYyBpbmxpbmUgaW50CityZHJhbmRfbG9uZyAodW5zaWduZWQgbG9uZyAqdikKK3sKKyAgaW50IG9rOworICBhc20gdm9sYXRpbGUgKCIxOiAiIFJEUkFORF9MT05HICJcblx0IgorICAgICAgICAgICAgICAgICJqYyAyZlxuXHQiCisgICAgICAgICAgICAgICAgImRlY2wgJTBcblx0IgorICAgICAgICAgICAgICAgICJqbnogMWJcblx0IgorICAgICAgICAgICAgICAgICIyOiIKKyAgICAgICAgICAgICAgICA6ICI9ciIgKG9rKSwgIj1hIiAoKnYpCisgICAgICAgICAgICAgICAgOiAiMCIgKFJEUkFORF9SRVRSWV9MT09QUykKKyAgICAgICAgICAgICAgICA6ICJjYyIpOworICByZXR1cm4gb2s7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQKK3JkcmFuZF9ubG9uZyAodW5zaWduZWQgbG9uZyAqdiwgaW50IGNvdW50KQoreworICB3aGlsZSAoY291bnQtLSkKKyAgICBpZiAoIXJkcmFuZF9sb25nKHYrKykpCisgICAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHNpemVfdAorcG9sbF9kcm5nIChhZGRfZm5fdCBhZGQsIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLCBpbnQgZmFzdCkKK3sKKyAgdm9sYXRpbGUgY2hhciBidWZmZXJbNjRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOworICB1bnNpZ25lZCBpbnQgbmJ5dGVzID0gc2l6ZW9mIChidWZmZXIpOworCisgICh2b2lkKWZhc3Q7CisKKyAgaWYgKCFyZHJhbmRfbmxvbmcgKCh1bnNpZ25lZCBsb25nICopYnVmZmVyLCBzaXplb2YoYnVmZmVyKS9zaXplb2YobG9uZykpKQorICAgIHJldHVybiAwOworICAoKmFkZCkoKHZvaWQgKilidWZmZXIsIG5ieXRlcywgb3JpZ2luKTsKKyAgcmV0dXJuIG5ieXRlczsKK30KKyNlbmRpZiAvKlVTRV9EUk5HKi8KKworCitpbnQKK19nY3J5X3JuZGh3X2ZhaWxlZF9wICh2b2lkKQoreworICByZXR1cm4gcm5nX2ZhaWxlZDsKK30KKworCisvKiBUcnkgdG8gcmVhZCByYW5kb20gZnJvbSBhIGhhcmR3YXJlIFJORyBpZiBhIGZhc3Qgb25lIGlzCisgICBhdmFpbGFibGUuICAqLwordm9pZAorX2djcnlfcm5kaHdfcG9sbF9mYXN0ICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LCBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4pCit7CisgICh2b2lkKWFkZDsKKyAgKHZvaWQpb3JpZ2luOworCisjaWZkZWYgVVNFX0RSTkcKKyAgaWYgKChfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCkgJiBIV0ZfSU5URUxfUkRSQU5EKSkKKyAgICBwb2xsX2RybmcgKGFkZCwgb3JpZ2luLCAxKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9QQURMT0NLCisgIGlmICgoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX1BBRExPQ0tfUk5HKSkKKyAgICBwb2xsX3BhZGxvY2sgKGFkZCwgb3JpZ2luLCAxKTsKKyNlbmRpZgorfQorCisKKy8qIFJlYWQgNjQgYnl0ZXMgZnJvbSBhIGhhcmR3YXJlIFJORyBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgIGFjdHVhbGx5IHJlYWQuICAqLworc2l6ZV90CitfZ2NyeV9ybmRod19wb2xsX3Nsb3cgKHZvaWQgKCphZGQpKGNvbnN0IHZvaWQqLCBzaXplX3QsIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbikKK3sKKyAgc2l6ZV90IG5ieXRlcyA9IDA7CisKKyAgKHZvaWQpYWRkOworICAodm9pZClvcmlnaW47CisKKyNpZmRlZiBVU0VfRFJORworICBpZiAoKF9nY3J5X2dldF9od19mZWF0dXJlcyAoKSAmIEhXRl9JTlRFTF9SRFJBTkQpKQorICAgIG5ieXRlcyArPSBwb2xsX2RybmcgKGFkZCwgb3JpZ2luLCAwKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9QQURMT0NLCisgIGlmICgoX2djcnlfZ2V0X2h3X2ZlYXR1cmVzICgpICYgSFdGX1BBRExPQ0tfUk5HKSkKKyAgICBuYnl0ZXMgKz0gcG9sbF9wYWRsb2NrIChhZGQsIG9yaWdpbiwgMCk7CisjZW5kaWYKKworICByZXR1cm4gbmJ5dGVzOworfQpkaWZmIC0tZ2l0IGEvcmFuZG9tL3JuZGxpbnV4LmMgYi9yYW5kb20vcm5kbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWFjMjAzCi0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tL3JuZGxpbnV4LmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIHJuZGxpbnV4LmMgIC0gIHJhdyByYW5kb20gbnVtYmVyIGZvciBPU2VzIHdpdGggL2Rldi9yYW5kb20KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNywKKyAqICAgICAgICAgICAgICAgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyMgaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAicmFuZC1pbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IG9wZW5fZGV2aWNlIChjb25zdCBjaGFyICpuYW1lLCBpbnQgcmV0cnkpOworCisKK3N0YXRpYyBpbnQKK3NldF9jbG9leGVjX2ZsYWcgKGludCBmZCkKK3sKKyAgaW50IG9sZGZsYWdzOworCisgIG9sZGZsYWdzPSBmY250bCAoZmQsIEZfR0VURkQsIDApOworICBpZiAob2xkZmxhZ3MgPCAwKQorICAgIHJldHVybiBvbGRmbGFnczsKKyAgb2xkZmxhZ3MgfD0gRkRfQ0xPRVhFQzsKKyAgcmV0dXJuIGZjbnRsIChmZCwgRl9TRVRGRCwgb2xkZmxhZ3MpOworfQorCisKKworLyoKKyAqIFVzZWQgdG8gb3BlbiB0aGUgL2Rldi9yYW5kb20gZGV2aWNlcyAoTGludXgsIHhCU0QsIFNvbGFyaXMgKGlmIGl0CisgKiBleGlzdHMpKS4gIElmIFJFVFJZIGlzIHRydWUsIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgd2l0aAorICogYSBmYXRhbCBlcnJvciBidXQgcmV0cmllcyB1bnRpbCBpdCBpcyBhYmxlIHRvIHJlb3BlbiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50CitvcGVuX2RldmljZSAoY29uc3QgY2hhciAqbmFtZSwgaW50IHJldHJ5KQoreworICBpbnQgZmQ7CisKKyAgaWYgKHJldHJ5KQorICAgIF9nY3J5X3JhbmRvbV9wcm9ncmVzcyAoIm9wZW5fZGV2X3JhbmRvbSIsICdYJywgMSwgMCk7CisgYWdhaW46CisgIGZkID0gb3BlbiAobmFtZSwgT19SRE9OTFkpOworICBpZiAoZmQgPT0gLTEgJiYgcmV0cnkpCisgICAgeworICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICAgIHR2LnR2X3NlYyA9IDU7CisgICAgICB0di50dl91c2VjID0gMDsKKyAgICAgIF9nY3J5X3JhbmRvbV9wcm9ncmVzcyAoIndhaXRfZGV2X3JhbmRvbSIsICdYJywgMCwgKGludCl0di50dl9zZWMpOworICAgICAgc2VsZWN0ICgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgZ290byBhZ2FpbjsKKyAgICB9CisgIGlmIChmZCA9PSAtMSkKKyAgICBsb2dfZmF0YWwgKCJjYW4ndCBvcGVuICVzOiAlc1xuIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pICk7CisKKyAgaWYgKHNldF9jbG9leGVjX2ZsYWcgKGZkKSkKKyAgICBsb2dfZXJyb3IgKCJlcnJvciBzZXR0aW5nIEZEX0NMT0VYRUMgb24gZmQgJWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgZmQsIHN0cmVycm9yIChlcnJubykpOworCisgIC8qIFdlIHVzZWQgdG8gZG8gdGhlIGZvbGxvd2luZyBjaGVjaywgaG93ZXZlciBpdCB0dXJuZWQgb3V0IHRoYXQgdGhpcworICAgICBpcyBub3QgcG9ydGFibGUgc2luY2UgbW9yZSBPU2VzIHByb3ZpZGUgYSByYW5kb20gZGV2aWNlIHdoaWNoIGlzCisgICAgIHNvbWV0aW1lcyBpbXBsZW1lbnRlZCBhcyBhbm90aGVyIGRldmljZSB0eXBlLgorCisgICAgIHN0cnVjdCBzdGF0IHNiOworCisgICAgIGlmKCBmc3RhdCggZmQsICZzYiApICkKKyAgICAgICAgbG9nX2ZhdGFsKCJzdGF0KCkgb2ZmICVzIGZhaWxlZDogJXNcbiIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSApOworICAgICBpZiggKCFTX0lTQ0hSKHNiLnN0X21vZGUpKSAmJiAoIVNfSVNGSUZPKHNiLnN0X21vZGUpKSApCisgICAgICAgIGxvZ19mYXRhbCgiaW52YWxpZCByYW5kb20gZGV2aWNlIVxuIiApOworICAqLworICByZXR1cm4gZmQ7Cit9CisKKworLyogTm90ZSB0aGF0IHRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgICBjYWxsZWQgYnkgb25lIHRocmVhZCBhdCBhIHRpbWUuICBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgIG9yIHRydWUgb24gZmFpbHVyZSAoaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIHdpbGwgc2lnbmFsIGEgZmF0YWwKKyAgIGVycm9yKS4gICovCitpbnQKK19nY3J5X3JuZGxpbnV4X2dhdGhlcl9yYW5kb20gKHZvaWQgKCphZGQpKGNvbnN0IHZvaWQqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICkKK3sKKyAgc3RhdGljIGludCBmZF91cmFuZG9tID0gLTE7CisgIHN0YXRpYyBpbnQgZmRfcmFuZG9tID0gLTE7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGV2ZXJfb3BlbmVkOworICBpbnQgZmQ7CisgIGludCBuOworICBieXRlIGJ1ZmZlcls3NjhdOworICBzaXplX3Qgbl9odzsKKyAgc2l6ZV90IHdhbnQgPSBsZW5ndGg7CisgIHNpemVfdCBsYXN0X3NvX2ZhciA9IDA7CisgIGludCBhbnlfbmVlZF9lbnRyb3B5ID0gMDsKKyAgaW50IGRlbGF5OworCisgIGlmICghYWRkKQorICAgIHsKKyAgICAgIC8qIFNwZWNpYWwgbW9kZSB0byBjbG9zZSB0aGUgZGVzY3JpcHRvcnMuICAqLworICAgICAgaWYgKGZkX3JhbmRvbSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgIGNsb3NlIChmZF9yYW5kb20pOworICAgICAgICAgIGZkX3JhbmRvbSA9IC0xOworICAgICAgICB9CisgICAgICBpZiAoZmRfdXJhbmRvbSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgIGNsb3NlIChmZF91cmFuZG9tKTsKKyAgICAgICAgICBmZF91cmFuZG9tID0gLTE7CisgICAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworCisgIC8qIEZpcnN0IHJlYWQgZnJvbSBhIGhhcmR3YXJlIHNvdXJjZS4gIEhvd2V2ZXIgbGV0IGl0IGFjY291bnQgb25seQorICAgICBmb3IgdXAgdG8gNTAlIG9mIHRoZSByZXF1ZXN0ZWQgYnl0ZXMuICAqLworICBuX2h3ID0gX2djcnlfcm5kaHdfcG9sbF9zbG93IChhZGQsIG9yaWdpbik7CisgIGlmIChuX2h3ID4gbGVuZ3RoLzIpCisgICAgbl9odyA9IGxlbmd0aC8yOworICBpZiAobGVuZ3RoID4gMSkKKyAgICBsZW5ndGggLT0gbl9odzsKKworICAvKiBPcGVuIHRoZSByZXF1ZXN0ZWQgZGV2aWNlLiAgVGhlIGZpcnN0IHRpbWUgYSBkZXZpY2UgaXMgdG8gYmUKKyAgICAgb3BlbmVkIHdlIGZhaWwgd2l0aCBhIGZhdGFsIGVycm9yIGlmIHRoZSBkZXZpY2UgZG9lcyBub3QgZXhpc3RzLgorICAgICBJbiBjYXNlIHRoZSBkZXZpY2UgaGFzIGV2ZXIgYmVlbiBjbG9zZWQsIGZ1cnRoZXIgb3BlbiByZXF1ZXN0cworICAgICB3aWxsIGhvd2V2ZXIgcmV0cnkgaW5kZWZpbml0ZWx5LiAgVGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBiZWhhdmlvdXIgaXMKKyAgICAgdGhhdCB3ZSBhbHdheXMgcmVxdWlyZSB0aGUgZGV2aWNlIHRvIGJlIGV4aXN0ZW50IGJ1dCB3YW50IGEgbW9yZQorICAgICBncmFjZWZ1bCBiZWhhdmlvdXIgaWYgdGhlIHJhcmVseSBuZWVkZWQgY2xvc2Ugb3BlcmF0aW9uIGhhcyBiZWVuCisgICAgIHVzZWQgYW5kIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUgcmUtb3BlbmVkIGxhdGVyLiAqLworICBpZiAobGV2ZWwgPj0gMikKKyAgICB7CisgICAgICBpZiAoZmRfcmFuZG9tID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgZmRfcmFuZG9tID0gb3Blbl9kZXZpY2UgKE5BTUVfT0ZfREVWX1JBTkRPTSwgKGV2ZXJfb3BlbmVkICYgMSkpOworICAgICAgICAgIGV2ZXJfb3BlbmVkIHw9IDE7CisgICAgICAgIH0KKyAgICAgIGZkID0gZmRfcmFuZG9tOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmZF91cmFuZG9tID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgZmRfdXJhbmRvbSA9IG9wZW5fZGV2aWNlIChOQU1FX09GX0RFVl9VUkFORE9NLCAoZXZlcl9vcGVuZWQgJiAyKSk7CisgICAgICAgICAgZXZlcl9vcGVuZWQgfD0gMjsKKyAgICAgICAgfQorICAgICAgZmQgPSBmZF91cmFuZG9tOworICAgIH0KKworICAvKiBFbnRlciB0aGUgcmVhZCBsb29wLiAgKi8KKyAgZGVsYXkgPSAwOyAgLyogU3RhcnQgd2l0aCAwIHNlY29uZHMgc28gdGhhdCB3ZSBkbyBubyBibG9jayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgZmlyc3QgaXRlcmF0aW9uIGFuZCBpbiB0dXJuIGNhbGwgdGhlIHByb2dyZXNzIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgIGJlZm9yZSBibG9ja2luZy4gIFRvIGdpdmUgdGhlIE9TIGEgYmV0dGVyIGNoYW5jZSB0bworICAgICAgICAgICAgICAgICByZXR1cm4gd2l0aCBzb21ldGhpbmcgd2Ugd2lsbCBhY3R1YWxseSB1c2UgMTAwbXMuICovCisgIHdoaWxlIChsZW5ndGgpCisgICAgeworICAgICAgZmRfc2V0IHJmZHM7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgIGludCByYzsKKworICAgICAgLyogSWYgd2UgY29sbGVjdGVkIHNvbWUgYnl0ZXMgdXBkYXRlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuICBXZQorICAgICAgICAgZG8gdGhpcyBhbHdheXMgYW5kIG5vdCBqdXN0IGlmIHRoZSBzZWxlY3QgdGltZWQgb3V0IGJlY2F1c2UKKyAgICAgICAgIG9mdGVuIGp1c3QgYSBmZXcgYnl0ZXMgYXJlIGdhdGhlcmVkIHdpdGhpbiB0aGUgdGltZW91dAorICAgICAgICAgcGVyaW9kLiAgKi8KKyAgICAgIGlmIChhbnlfbmVlZF9lbnRyb3B5IHx8IGxhc3Rfc29fZmFyICE9ICh3YW50IC0gbGVuZ3RoKSApCisgICAgICAgIHsKKyAgICAgICAgICBsYXN0X3NvX2ZhciA9IHdhbnQgLSBsZW5ndGg7CisgICAgICAgICAgX2djcnlfcmFuZG9tX3Byb2dyZXNzICgibmVlZF9lbnRyb3B5IiwgJ1gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClsYXN0X3NvX2ZhciwgKGludCl3YW50KTsKKyAgICAgICAgICBhbnlfbmVlZF9lbnRyb3B5ID0gMTsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB0aGUgc3lzdGVtIGhhcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgIGFuZCB3ZSBlbmNvdW50ZXIgYW4gZmQgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGZkX3NldCBzaXplLAorICAgICAgICAgd2UgZG9uJ3QgdXNlIHRoZSBzZWxlY3QgYXQgYWxsLiAgVGhlIHNlbGVjdCBjb2RlIGlzIG9ubHkgdXNlZAorICAgICAgICAgdG8gZW1pdCBwcm9ncmVzcyBtZXNzYWdlcy4gIEEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvCisgICAgICAgICBmYWxsIGJhY2sgdG8gcG9sbCgpIGlmIGF2YWlsYWJsZS4gICovCisjaWZkZWYgRkRfU0VUU0laRQorICAgICAgaWYgKGZkIDwgRkRfU0VUU0laRSkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgRkRfWkVSTygmcmZkcyk7CisgICAgICAgICAgRkRfU0VUKGZkLCAmcmZkcyk7CisgICAgICAgICAgdHYudHZfc2VjID0gZGVsYXk7CisgICAgICAgICAgdHYudHZfdXNlYyA9IGRlbGF5PyAwIDogMTAwMDAwOworICAgICAgICAgIGlmICggIShyYz1zZWxlY3QoZmQrMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0dikpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYW55X25lZWRfZW50cm9weSA9IDE7CisgICAgICAgICAgICAgIGRlbGF5ID0gMzsgLyogVXNlIDMgc2Vjb25kcyBoZW5jZWZvcnRoLiAgKi8KKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiggcmMgPT0gLTEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dfZXJyb3IgKCJzZWxlY3QoKSBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgIGlmICghZGVsYXkpCisgICAgICAgICAgICAgICAgZGVsYXkgPSAxOyAvKiBVc2UgMSBzZWNvbmQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UgaGF2ZSBldmVyIGJsb2NrZWQuICAqLworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgaW50IG5ieXRlcyA9IGxlbmd0aCA8IHNpemVvZihidWZmZXIpPyBsZW5ndGggOiBzaXplb2YoYnVmZmVyKTsKKyAgICAgICAgICBuID0gcmVhZChmZCwgYnVmZmVyLCBuYnl0ZXMgKTsKKyAgICAgICAgICBpZiggbiA+PSAwICYmIG4gPiBuYnl0ZXMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dfZXJyb3IoImJvZ3VzIHJlYWQgZnJvbSByYW5kb20gZGV2aWNlIChuPSVkKVxuIiwgbiApOworICAgICAgICAgICAgICBuID0gbmJ5dGVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB3aGlsZSggbiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiApOworICAgICAgaWYgKCBuID09IC0xICkKKyAgICAgICAgbG9nX2ZhdGFsKCJyZWFkIGVycm9yIG9uIHJhbmRvbSBkZXZpY2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgKCphZGQpKCBidWZmZXIsIG4sIG9yaWdpbiApOworICAgICAgbGVuZ3RoIC09IG47CisgICAgfQorICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSApOworCisgIGlmIChhbnlfbmVlZF9lbnRyb3B5KQorICAgIF9nY3J5X3JhbmRvbV9wcm9ncmVzcyAoIm5lZWRfZW50cm9weSIsICdYJywgKGludCl3YW50LCAoaW50KXdhbnQpOworCisgIHJldHVybiAwOyAvKiBzdWNjZXNzICovCit9CmRpZmYgLS1naXQgYS9yYW5kb20vcm5kdW5peC5jIGIvcmFuZG9tL3JuZHVuaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjgxMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tL3JuZHVuaXguYwpAQCAtMCwwICsxLDkxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJICAgICoKKyAqCQkJCQkJCQkJICAgICoKKyAqICAgVW5peCBSYW5kb21uZXNzLUdhdGhlcmluZyBDb2RlCQkJCQkgICAgKgorICoJCQkJCQkJCQkgICAgKgorICogICBDb3B5cmlnaHQgUGV0ZXIgR3V0bWFubiwgUGF1bCBLZW5kYWxsLCBhbmQgQ2hyaXMgV2VkZ3dvb2QgMTk5Ni0xOTk5LiAgICoKKyAqICAgSGVhdmlseSBtb2RpZmllZCBmb3IgR251UEcgYnkgV2VybmVyIEtvY2gJCQkJICAgICoKKyAqCQkJCQkJCQkJICAgICoKKyAqCQkJCQkJCQkJICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHRoZSBjcnlwdGxpYiBjb250aW51b3VzbHkgc2VlZGVkIHBzZXVkb3JhbmRvbQorICAgbnVtYmVyIGdlbmVyYXRvci4gIEZvciB1c2FnZSBjb25kaXRpb25zLCBzZWUgbGliX3JhbmQuYworCisgICBbSGVyZSBpcyB0aGUgbm90aWNlIGZyb20gbGliX3JhbmQuYzpdCisKKyAgIFRoaXMgbW9kdWxlIGFuZCB0aGUgbWlzYy9ybmQqLmMgbW9kdWxlcyByZXByZXNlbnQgdGhlIGNyeXB0bGliCisgICBjb250aW51b3VzbHkgc2VlZGVkIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChDU1BSTkcpIGFzIGRlc2NyaWJlZCBpbgorICAgbXkgMTk5OCBVc2VuaXggU2VjdXJpdHkgU3ltcG9zaXVtIHBhcGVyICJUaGUgZ2VuZXJhdGlvbiBvZiByYW5kb20gbnVtYmVycworICAgZm9yIGNyeXB0b2dyYXBoaWMgcHVycG9zZXMiLgorCisgICBUaGUgQ1NQUk5HIGNvZGUgaXMgY29weXJpZ2h0IFBldGVyIEd1dG1hbm4gKGFuZCB2YXJpb3VzIG90aGVycykgMTk5NiwKKyAgIDE5OTcsIDE5OTgsIDE5OTksIGFsbCByaWdodHMgcmVzZXJ2ZWQuICBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgQ1NQUk5HCisgICBtb2R1bGVzIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZQorICAgICAgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LgorCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4KKyAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAzLiBBIGNvcHkgb2YgYW55IGJ1Z2ZpeGVzIG9yIGVuaGFuY2VtZW50cyBtYWRlIG11c3QgYmUgcHJvdmlkZWQgdG8gdGhlCisgICAgICBhdXRob3IsIDxwZ3V0MDAxQGNzLmF1Y2tsYW5kLmFjLm56PiB0byBhbGxvdyB0aGVtIHRvIGJlIGFkZGVkIHRvIHRoZQorICAgICAgYmFzZWxpbmUgdmVyc2lvbiBvZiB0aGUgY29kZS4KKworICBBTFRFUk5BVElWRUxZLCB0aGUgY29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4xIG9yIGFueSBsYXRlciB2ZXJzaW9uCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZQorICBwcm92aXNpb25zIG9mIHRoZSBHTlUgTEdQTCBhcmUgcmVxdWlyZWQgSU5TVEVBRCBPRiB0aGUgYWJvdmUKKyAgcmVzdHJpY3Rpb25zLgorCisgIEFsdGhvdWdoIG5vdCByZXF1aXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExHUEwsIGl0IHdvdWxkIHN0aWxsIGJlCisgIG5pY2UgaWYgeW91IGNvdWxkIG1ha2UgYW55IGNoYW5nZXMgYXZhaWxhYmxlIHRvIHRoZSBhdXRob3IgdG8gYWxsb3cKKyAgYSBjb25zaXN0ZW50IGNvZGUgYmFzZSB0byBiZSBtYWludGFpbmVkLiAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgVGhlIGFib3ZlIGFsdGVybmF0aXZlIHdhcyBjaGFuZ2VkIGZyb20gR1BMIHRvIExHUEwgb24gMjAwNy0wOC0yMiB3aXRoCisgcGVybWlzc2lvbiBmcm9tIFBldGVyIEd1dG1hbm46CisgPT09PT09PT09PQorIEZyb206IHBndXQwMDEgPHBndXQwMDFAY3MuYXVja2xhbmQuYWMubno+CisgU3ViamVjdDogUmU6IExHUEwgZm9yIHRoZSB3aW5kb3dzIGVudHJvcHkgZ2F0aGVyZXIKKyBUbzogd2tAZ251cGcub3JnCisgRGF0ZTogV2VkLCAyMiBBdWcgMjAwNyAwMzowNTo0MiArMTIwMAorCisgSGksCisKKyA+QXMgb2Ygbm93IGxpYmdjcnlwdCBpcyBHUEwgdW5kZXIgV2luZG93cyBkdWUgdG8gdGhhdCBtb2R1bGUgYW5kIHNvbWUgcGVvcGxlCisgPndvdWxkIHJlYWxseSBsaWtlIHRvIHNlZSBpdCB1bmRlciBMR1BMIHRvby4gIENhbiB5b3UgZG8gc3VjaCBhIGxpY2Vuc2UgY2hhbmdlCisgPnRvIExHUEwgdmVyc2lvbiAyPyAgTm90ZSB0aGF0IExHUEwgZ2l2ZSB0aGUgdXNlciB0aGUgb3B0aW9uIHRvIHJlbGljZW5zZSBpdAorID51bmRlciBHUEwsIHNvIHRoZSBjaGFuZ2Ugd291bGQgYmUgcHJldHR5IGVhc3kgYW5kIGJhY2t3YXIgY29tcGF0aWJsZS4KKworIFN1cmUuICBJIGFzc3VtZWQgdGhhdCBzaW5jZSBHUEcgd2FzIEdQTGQsIHlvdSdkIHByZWZlciB0aGUgR1BMIGZvciB0aGUgZW50cm9weQorIGNvZGUgYXMgd2VsbCwgYnV0IElhbiBhc2tlZCBmb3IgTEdQTCBhcyBhbiBvcHRpb24gc28gYXMgb2YgdGhlIG5leHQgcmVsZWFzZQorIEknbGwgaGF2ZSBMR1BMIGluIHRoZXJlLiAgWW91IGNhbiBjb25zaWRlciBpdCB0byBiZSByZXRyb2FjdGl2ZSwgc28geW91cgorIGN1cnJlbnQgdmVyc2lvbiB3aWxsIGJlIExHUExkIGFzIHdlbGwuCisKKyBQZXRlci4KKyA9PT09PT09PT09CisgRnJvbTogcGd1dDAwMSA8cGd1dDAwMUBjcy5hdWNrbGFuZC5hYy5uej4KKyBTdWJqZWN0OiBSZTogTEdQTCBmb3IgdGhlIHdpbmRvd3MgZW50cm9weSBnYXRoZXJlcgorIFRvOiB3a0BnbnVwZy5vcmcKKyBEYXRlOiBXZWQsIDIyIEF1ZyAyMDA3IDIwOjUwOjA4ICsxMjAwCisKKyA+V291bGQgeW91IG1pbmQgdG8gZXh0ZW5kIHRoaXMgYWxzbyB0byB0aGUgVW5peCBlbnRyb3B5IGdhdGhlcmVyIHdoaWNoIGlzCisgPnN0aWxsIHVzZWQgb24gc3lzdGVtcyB3aXRob3V0IC9kZXYvcmFuZG9tIGFuZCB3aGVuIEVHRCBpcyBub3QgaW5zdGFsbGVkPyBUaGF0CisgPndvdWxkIGJlIHRoZSBsYXN0IEdQTGVkIHBpZWNlIGluIExpYmdjcnlwdC4KKworIFN1cmUsIGl0IGNvdmVycyB0aGUgZW50aXJlIGVudHJvcHktZ2F0aGVyaW5nIHN1YnN5c3RlbS4KKworIFBldGVyLgorID09PT09PT09PQorKi8KKworLyogR2VuZXJhbCBpbmNsdWRlcyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogT1Mtc3BlY2lmaWMgaW5jbHVkZXMgKi8KKworI2lmZGVmIF9fb3NmX18KKyAgLyogU29tZXdoZXJlIGluIHRoZSBtb3Jhc3Mgb2Ygc3lzdGVtLXNwZWNpZmljIGNydWZ0IHdoaWNoIE9TRi8xIHB1bGxzIGluCisgICAqIHZpYSB0aGUgZm9sbG93aW5nIGluY2x1ZGVzIGFyZSB2YXJpb3VzIGVuZGlhbm5lc3MgZGVmaW5lcywgc28gd2UKKyAgICogdW5kZWZpbmUgdGhlIGNyeXB0bGliIG9uZXMsIHdoaWNoIGFyZW4ndCByZWFsbHkgbmVlZGVkIGZvciB0aGlzIG1vZHVsZQorICAgKiBhbnl3YXkgKi8KKyN1bmRlZiBCSUdfRU5ESUFOCisjdW5kZWYgTElUVExFX0VORElBTgorI2VuZGlmCQkJCS8qIF9fb3NmX18gKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaWZuZGVmIF9fUU5YX18KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjZW5kaWYJCQkJLyogX19RTlhfXyAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CQkvKiBTQ08gYW5kIFN1bk9TIG5lZWQgdGhpcyBiZWZvcmUgcmVzb3VyY2UuaCAqLworI2lmbmRlZiBfX1FOWF9fCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYJCQkJLyogX19RTlhfXyAqLworI2lmIGRlZmluZWQoIF9BSVggKSB8fCBkZWZpbmVkKCBfX1FOWF9fICkKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYJCQkJLyogX0FJWCAqLworI2lmbmRlZiBfX1FOWF9fCisjaW5jbHVkZSA8c3lzL3NobS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKyNlbmRpZgkJCQkvKiBfX1FOWF9fICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCS8qIFZlcnNjaGllZGVuZSBrb21pc2NoZSBUeXBlbiAqLworI2lmIGRlZmluZWQoIF9faHB1eCApICYmICggT1NfVkVSU0lPTiA9PSA5ICkKKyNpbmNsdWRlIDx2Zm9yay5oPgorI2VuZGlmCQkJCS8qIF9faHB1eCA5LngsIGFmdGVyIHRoYXQgaXQncyBpbiB1bmlzdGQuaCAqLworI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisvKiAjaW5jbHVkZSA8a2l0Y2hlbnNpbmsuaD4gKi8KKyNpZmRlZiBfX1FOWF9fCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlmCQkgICAgICAvKiBfX1FOWF9fICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInR5cGVzLmgiICAvKiBmb3IgYnl0ZSBhbmQgdTMyIHR5cGVkZWZzICovCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAicmFuZC1pbnRlcm5hbC5oIgorCisjaWZuZGVmIEVBR0FJTgorI2RlZmluZSBFQUdBSU4JRVdPVUxEQkxPQ0sKKyNlbmRpZgorI2lmbmRlZiBTVERJTl9GSUxFTk8KKyNkZWZpbmUgU1RESU5fRklMRU5PIDAKKyNlbmRpZgorI2lmbmRlZiBTVERPVVRfRklMRU5PCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisKKyNkZWZpbmUgR0FUSEVSX0JVRlNJWkUJCTQ5MTUyCS8qIFVzdWFsbHkgYWJvdXQgMjVLIGFyZSBmaWxsZWQgKi8KKworLyogVGhlIHN0cnVjdHVyZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIHJhbmRvbS1kYXRhIHNvdXJjZXMuICBFYWNoCisgKiByZWNvcmQgY29udGFpbnMgdGhlIHNvdXJjZSBhbmQgYSByZWxhdGl2ZSBlc3RpbWF0ZSBvZiBpdHMgdXNlZnVsbmVzcworICogKHdlaWdodGluZykgd2hpY2ggaXMgdXNlZCB0byBzY2FsZSB0aGUgbnVtYmVyIG9mIGtCIG9mIG91dHB1dCBmcm9tIHRoZQorICogc291cmNlICh0b3RhbCA9IGRhdGFfYnl0ZXMgLyB1c2VmdWxuZXNzKS4gIFVzdWFsbHkgdGhlIHdlaWdodGluZyBpcyBpbiB0aGUKKyAqIHJhbmdlIDEtMyAob3IgMCBmb3IgZXNwZWNpYWxseSB1c2VsZXNzIHNvdXJjZXMpLCByZXN1bHRpbmcgaW4gYSB1c2VmdWxuZXNzCisgKiByYXRpbmcgb2YgMS4uLjMgZm9yIGVhY2gga0Igb2Ygc291cmNlIG91dHB1dCAob3IgMCBmb3IgdGhlIHVzZWxlc3MKKyAqIHNvdXJjZXMpLgorICoKKyAqIElmIHRoZSBzb3VyY2UgaXMgY29uc3RhbnRseSBjaGFuZ2luZyAoY2VydGFpbiB0eXBlcyBvZiBuZXR3b3JrIHN0YXRpc3RpY3MKKyAqIGhhdmUgdGhpcyBjaGFyYWN0ZXJpc3RpYykgYnV0IHRoZSBhbW91bnQgb2Ygb3V0cHV0IGlzIHNtYWxsLCB0aGUgd2VpZ2h0aW5nCisgKiBpcyBnaXZlbiBhcyBhIG5lZ2F0aXZlIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgYmUgdHJlYXRlZAorICogYXMgaWYgYSBtaW5pbXVtIG9mIDFLIG9mIG91dHB1dCBoYWQgYmVlbiBvYnRhaW5lZC4gIElmIHRoZSBzb3VyY2UgcHJvZHVjZXMKKyAqIGEgbG90IG9mIG91dHB1dCB0aGVuIHRoZSBzY2FsZSBmYWN0b3IgaXMgZnJhY3Rpb25hbCwgcmVzdWx0aW5nIGluIGEKKyAqIHVzZWZ1bG5lc3MgcmF0aW5nIG9mIDwgMSBmb3IgZWFjaCBrQiBvZiBzb3VyY2Ugb3V0cHV0LgorICoKKyAqIEluIG9yZGVyIHRvIHByb3ZpZGUgZW5vdWdoIHJhbmRvbW5lc3MgdG8gc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciBhCisgKiBzbG93IHBvbGwsIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSBhdCBsZWFzdCAyMCBwb2ludHMgb2YgdXNlZnVsbmVzcyAoYQorICogdHlwaWNhbCBzeXN0ZW0gc2hvdWxkIGdldCBhYm91dCAzMCBwb2ludHMpLgorICoKKyAqIFNvbWUgcG90ZW50aWFsIG9wdGlvbnMgYXJlIG1pc3NlZCBvdXQgYmVjYXVzZSBvZiBzcGVjaWFsIGNvbnNpZGVyYXRpb25zLgorICogcHN0YXQgLWkgYW5kIHBzdGF0IC1mIGNhbiBwcm9kdWNlIGFtYXppbmcgYW1vdW50cyBvZiBvdXRwdXQgKHRoZSByZWNvcmQKKyAqIGlzIDYwMEsgb24gYW4gT3JhY2xlIHNlcnZlcikgd2hpY2ggZmxvb2RzIHRoZSBidWZmZXIgYW5kIGRvZXNuJ3QgeWllbGQKKyAqIGFueXRoaW5nIHVzZWZ1bCAoYXBhcnQgZnJvbSBwZXJoYXBzIGluY3JlYXNpbmcgdGhlIGVudHJvcHkgb2YgdGhlIHZtc3RhdAorICogb3V0cHV0IGEgYml0KSwgc28gd2UgZG9uJ3QgYm90aGVyIHdpdGggdGhpcy4gIHBzdGF0IGluIGdlbmVyYWwgcHJvZHVjZXMKKyAqIHF1aXRlIGEgYml0IG9mIG91dHB1dCwgYnV0IGl0IGRvZXNuJ3QgY2hhbmdlIG11Y2ggb3ZlciB0aW1lLCBzbyBpdCBnZXRzCisgKiB2ZXJ5IGxvdyB3ZWlnaHRpbmdzLiAgbmV0c3RhdCAtcyBwcm9kdWNlcyBjb25zdGFudGx5LWNoYW5naW5nIG91dHB1dCBidXQKKyAqIGFsc28gcHJvZHVjZXMgcXVpdGUgYSBiaXQgb2YgaXQsIHNvIGl0IG9ubHkgZ2V0cyBhIHdlaWdodGluZyBvZiAyIHJhdGhlcgorICogdGhhbiAzLiAgVGhlIHNhbWUgaG9sZHMgZm9yIG5ldHN0YXQgLWluLCB3aGljaCBnZXRzIDEgcmF0aGVyIHRoYW4gMi4KKyAqCisgKiBTb21lIGJpbmFyaWVzIGFyZSBzdG9yZWQgaW4gZGlmZmVyZW50IGxvY2F0aW9ucyBvbiBkaWZmZXJlbnQgc3lzdGVtcyBzbworICogYWx0ZXJuYXRpdmUgcGF0aHMgYXJlIGdpdmVuIGZvciB0aGVtLiAgVGhlIGNvZGUgc29ydHMgb3V0IHdoaWNoIG9uZSB0bworICogcnVuIGJ5IGl0c2VsZiwgb25jZSBpdCBmaW5kcyBhbiBleGVjdGFibGUgc29tZXdoZXJlIGl0IG1vdmVzIG9uIHRvIHRoZQorICogbmV4dCBzb3VyY2UuICBUaGUgc291cmNlcyBhcmUgYXJyYW5nZWQgcm91Z2hseSBpbiB0aGVpciBvcmRlciBvZgorICogdXNlZnVsbmVzcywgb2NjYXNpb25hbGx5IHNvdXJjZXMgd2hpY2ggcHJvdmlkZSBhIHRpbnkgYW1vdW50IG9mCisgKiByZWxhdGl2ZWx5IHVzZWxlc3MgZGF0YSBhcmUgcGxhY2VkIGFoZWFkIG9mIG9uZXMgd2hpY2ggcHJvdmlkZSBhIGxhcmdlCisgKiBhbW91bnQgb2YgcG9zc2libHkgdXNlZnVsIGRhdGEgYmVjYXVzZSBhbm90aGVyIDEwMCBieXRlcyBjYW4ndCBodXJ0LCBhbmQKKyAqIGl0IG1lYW5zIHRoZSBidWZmZXIgd29uJ3QgYmUgc3dhbXBlZCBieSBvbmUgb3IgdHdvIGhpZ2gtb3V0cHV0IHNvdXJjZXMuCisgKiBBbGwgdGhlIGhpZ2gtb3V0cHV0IHNvdXJjZXMgYXJlIGNsdXN0ZXJlZCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGxpc3QKKyAqIGZvciB0aGlzIHJlYXNvbi4gIFNvbWUgYmluYXJpZXMgYXJlIGNoZWNrZWQgZm9yIGluIGEgY2VydGFpbiBvcmRlciwgZm9yCisgKiBleGFtcGxlIHVuZGVyIFNsb3dhcmlzIC91c3IvdWNiL3BzIHVuZGVyc3RhbmRzIGF1eCBhcyBhbiBhcmcsIGJ1dCB0aGUKKyAqIG90aGVycyBkb24ndC4gIFNvbWUgc3lzdGVtcyBoYXZlIGNvbmRpdGlvbmFsIGRlZmluZXMgZW5hYmxpbmcgYWx0ZXJuYXRpdmVzCisgKiB0byBjb21tYW5kcyB3aGljaCBkb24ndCB1bmRlcnN0YW5kIHRoZSB1c3VhbCBvcHRpb25zIGJ1dCB3aWxsIHByb3ZpZGUKKyAqIGVub3VnaCBvdXRwdXQgKGluIHRoZSBmb3JtIG9mIGVycm9yIG1lc3NhZ2VzKSB0byBsb29rIGxpa2UgdGhleSdyZSB0aGUKKyAqIHJlYWwgdGhpbmcsIGNhdXNpbmcgYWx0ZXJuYXRpdmUgb3B0aW9ucyB0byBiZSBza2lwcGVkICh3ZSBjYW4ndCBjaGVjayB0aGUKKyAqIHJldHVybiBlaXRoZXIgYmVjYXVzZSBzb21lIGNvbW1hbmRzIHJldHVybiBwZWN1bGlhciwgbm9uLXplcm8gc3RhdHVzIGV2ZW4KKyAqIHdoZW4gdGhleSdyZSB3b3JraW5nIGNvcnJlY3RseSkuCisgKgorICogSW4gb3JkZXIgdG8gbWF4aW1pc2UgdXNlIG9mIHRoZSBidWZmZXIsIHRoZSBjb2RlIHBlcmZvcm1zIGEgZm9ybSBvZiBydW4tCisgKiBsZW5ndGggY29tcHJlc3Npb24gb24gaXRzIGlucHV0IHdoZXJlIGEgcmVwZWF0ZWQgc2VxdWVuY2Ugb2YgYnl0ZXMgaXMKKyAqIHJlcGxhY2VkIGJ5IHRoZSBvY2N1cnJlbmNlIGNvdW50IG1vZCAyNTYuICBTb21lIGNvbW1hbmRzIG91dHB1dCBhbiBhd2Z1bAorICogbG90IG9mIHdoaXRlc3BhY2UsIHRoaXMgbWVhc3VyZSBncmVhdGx5IGluY3JlYXNlcyB0aGUgYW1vdW50IG9mIGRhdGEgd2UKKyAqIGNhbiBmaXQgaW4gdGhlIGJ1ZmZlci4KKyAqCisgKiBXaGVuIHdlIHNjYWxlIHRoZSB3ZWlnaHRpbmcgdXNpbmcgdGhlIFNDKCkgbWFjcm8sIHNvbWUgcHJlcHJvY2Vzc29ycyBtYXkKKyAqIGdpdmUgYSBkaXZpc2lvbiBieSB6ZXJvIHdhcm5pbmcgZm9yIHRoZSBtb3N0IG9idmlvdXMgZXhwcmVzc2lvbgorICogJ3dlaWdodCA/IDEwMjQgLyB3ZWlnaHQgOiAwJyAoYW5kIGdjYyAyLjcuMi4yIGRpZXMgd2l0aCBhIGRpdmlzaW9uIGJ5IHplcm8KKyAqIHRyYXApLCBzbyB3ZSBkZWZpbmUgYSB2YWx1ZSBTQ18wIHdoaWNoIGV2YWx1YXRlcyB0byB6ZXJvIHdoZW4gZmVkIHRvCisgKiAnMTAyNCAvIFNDXzAnICovCisKKyNkZWZpbmUgU0MoIHdlaWdodCApCSggMTAyNCAvIHdlaWdodCApCS8qIFNjYWxlIGZhY3RvciAqLworI2RlZmluZSBTQ18wCQkJMTYzODQJLyogU0MoIFNDXzAgKSBldmFsdWF0ZXMgdG8gMCAqLworCitzdGF0aWMgc3RydWN0IFJJIHsKKyAgICBjb25zdCBjaGFyICpwYXRoOwkJLyogUGF0aCB0byBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHNvdXJjZSAqLworICAgIGNvbnN0IGNoYXIgKmFyZzsJCS8qIEFyZ3MgZm9yIHNvdXJjZSAqLworICAgIGNvbnN0IGludCB1c2VmdWxuZXNzOwkvKiBVc2VmdWxuZXNzIG9mIHNvdXJjZSAqLworICAgIEZJTEUgKnBpcGU7IAkJLyogUGlwZSB0byBzb3VyY2UgYXMgRklMRSAqICovCisgICAgaW50IHBpcGVGRDsgCQkvKiBQaXBlIHRvIHNvdXJjZSBhcyBGRCAqLworICAgIHBpZF90IHBpZDsJCQkvKiBwaWQgb2YgY2hpbGQgZm9yIHdhaXRwaWQoKSAqLworICAgIGludCBsZW5ndGg7IAkJLyogUXVhbnRpdHkgb2Ygb3V0cHV0IHByb2R1Y2VkICovCisgICAgY29uc3QgaW50IGhhc0FsdGVybmF0aXZlOwkgICAgLyogV2hldGhlciBzb3VyY2UgaGFzIGFsdC5sb2NhdGlvbiAqLworfSBkYXRhU291cmNlc1tdID0geworCisgICAgewkiL2Jpbi92bXN0YXQiLCAiLXMiLCBTQygtMyksIE5VTEwsIDAsIDAsIDAsIDEgICAgfSwKKyAgICB7CSIvdXNyL2Jpbi92bXN0YXQiLCAiLXMiLCBTQygtMyksIE5VTEwsIDAsIDAsIDAsIDB9LAorICAgIHsJIi9iaW4vdm1zdGF0IiwgIi1jIiwgU0MoLTMpLCBOVUxMLCAwLCAwLCAwLCAxICAgICB9LAorICAgIHsJIi91c3IvYmluL3Ztc3RhdCIsICItYyIsIFNDKC0zKSwgTlVMTCwgMCwgMCwgMCwgMH0sCisgICAgewkiL3Vzci9iaW4vcGZzdGF0IiwgTlVMTCwgU0MoLTIpLCBOVUxMLCAwLCAwLCAwLCAwfSwKKyAgICB7CSIvYmluL3Ztc3RhdCIsICItaSIsIFNDKC0yKSwgTlVMTCwgMCwgMCwgMCwgMSAgICAgfSwKKyAgICB7CSIvdXNyL2Jpbi92bXN0YXQiLCAiLWkiLCBTQygtMiksIE5VTEwsIDAsIDAsIDAsIDB9LAorICAgIHsJIi91c3IvdWNiL25ldHN0YXQiLCAiLXMiLCBTQygyKSwgTlVMTCwgMCwgMCwgMCwgMSB9LAorICAgIHsJIi91c3IvYmluL25ldHN0YXQiLCAiLXMiLCBTQygyKSwgTlVMTCwgMCwgMCwgMCwgMSB9LAorICAgIHsJIi91c3Ivc2Jpbi9uZXRzdGF0IiwgIi1zIiwgU0MoMiksIE5VTEwsIDAsIDAsIDAsIDF9LAorICAgIHsJIi91c3IvZXRjL25ldHN0YXQiLCAiLXMiLCBTQygyKSwgTlVMTCwgMCwgMCwgMCwgMH0sCisgICAgewkiL3Vzci9iaW4vbmZzc3RhdCIsIE5VTEwsIFNDKDIpLCBOVUxMLCAwLCAwLCAwLCAwfSwKKyAgICB7CSIvdXNyL3VjYi9uZXRzdGF0IiwgIi1tIiwgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAxICB9LAorICAgIHsJIi91c3IvYmluL25ldHN0YXQiLCAiLW0iLCBTQygtMSksIE5VTEwsIDAsIDAsIDAsIDEgIH0sCisgICAgewkiL3Vzci9zYmluL25ldHN0YXQiLCAiLW0iLCBTQygtMSksIE5VTEwsIDAsIDAsIDAsIDEgfSwKKyAgICB7CSIvdXNyL2V0Yy9uZXRzdGF0IiwgIi1tIiwgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAwIH0sCisgICAgewkiL2Jpbi9uZXRzdGF0IiwgICAgICItaW4iLCBTQygtMSksIE5VTEwsIDAsIDAsIDAsIDEgfSwKKyAgICB7CSIvdXNyL3VjYi9uZXRzdGF0IiwgIi1pbiIsIFNDKC0xKSwgTlVMTCwgMCwgMCwgMCwgMSB9LAorICAgIHsJIi91c3IvYmluL25ldHN0YXQiLCAiLWluIiwgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAxIH0sCisgICAgewkiL3Vzci9zYmluL25ldHN0YXQiLCAiLWluIiwgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAxfSwKKyAgICB7CSIvdXNyL2V0Yy9uZXRzdGF0IiwgIi1pbiIsIFNDKC0xKSwgTlVMTCwgMCwgMCwgMCwgMH0sCisgICAgewkiL3Vzci9zYmluL3NubXBfcmVxdWVzdCIsICJsb2NhbGhvc3QgcHVibGljIGdldCAxLjMuNi4xLjIuMS43LjEuMCIsCisJCQkJICAgIFNDKC0xKSwgTlVMTCwgMCwgMCwgMCwgMCB9LCAvKiBVRFAgaW4gKi8KKyAgICB7CSIvdXNyL3NiaW4vc25tcF9yZXF1ZXN0IiwgImxvY2FsaG9zdCBwdWJsaWMgZ2V0IDEuMy42LjEuMi4xLjcuNC4wIiwKKwkJCQkgICAgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAwIH0sICAvKiBVRFAgb3V0ICovCisgICAgewkiL3Vzci9zYmluL3NubXBfcmVxdWVzdCIsICJsb2NhbGhvc3QgcHVibGljIGdldCAxLjMuNi4xLjIuMS40LjMuMCIsCisJCQkJICAgIFNDKC0xKSwgTlVMTCwgMCwgMCwgMCwgMCB9LCAvKiBJUCA/ICovCisgICAgewkiL3Vzci9zYmluL3NubXBfcmVxdWVzdCIsICJsb2NhbGhvc3QgcHVibGljIGdldCAxLjMuNi4xLjIuMS42LjEwLjAiLAorCQkJCSAgICBTQygtMSksIE5VTEwsIDAsIDAsIDAsIDAgfSwgLyogVENQID8gKi8KKyAgICB7CSIvdXNyL3NiaW4vc25tcF9yZXF1ZXN0IiwgImxvY2FsaG9zdCBwdWJsaWMgZ2V0IDEuMy42LjEuMi4xLjYuMTEuMCIsCisJCQkJICAgIFNDKC0xKSwgTlVMTCwgMCwgMCwgMCwgMCB9LCAvKiBUQ1AgPyAqLworICAgIHsJIi91c3Ivc2Jpbi9zbm1wX3JlcXVlc3QiLCAibG9jYWxob3N0IHB1YmxpYyBnZXQgMS4zLjYuMS4yLjEuNi4xMy4wIiwKKwkJCQkgICAgU0MoLTEpLCBOVUxMLCAwLCAwLCAwLCAwIH0sIC8qIFRDUCA/ICovCisgICAgewkiL3Vzci9iaW4vbXBzdGF0IiwgTlVMTCwgU0MoMSksIE5VTEwsIDAsIDAsIDAsIDAgICAgIH0sCisgICAgewkiL3Vzci9iaW4vdyIsIE5VTEwsIFNDKDEpLCBOVUxMLCAwLCAwLCAwLCAxICAgICAgICAgICB9LAorICAgIHsJIi91c3IvYnNkL3ciLCBOVUxMLCBTQygxKSwgTlVMTCwgMCwgMCwgMCwgMCAgICAgICAgICB9LAorICAgIHsJIi91c3IvYmluL2RmIiwgTlVMTCwgU0MoMSksIE5VTEwsIDAsIDAsIDAsIDEgICAgICAgICAgfSwKKyAgICB7CSIvYmluL2RmIiwgTlVMTCwgU0MoMSksIE5VTEwsIDAsIDAsIDAsIDAgICAgICAgICAgICAgfSwKKyAgICB7CSIvdXNyL3NiaW4vcG9ydHN0YXQiLCBOVUxMLCBTQygxKSwgTlVMTCwgMCwgMCwgMCwgMCAgfSwKKyAgICB7CSIvdXNyL2Jpbi9pb3N0YXQiLCBOVUxMLCBTQyhTQ18wKSwgTlVMTCwgMCwgMCwgMCwgMCAgfSwKKyAgICB7CSIvdXNyL2Jpbi91cHRpbWUiLCBOVUxMLCBTQyhTQ18wKSwgTlVMTCwgMCwgMCwgMCwgMSAgIH0sCisgICAgewkiL3Vzci9ic2QvdXB0aW1lIiwgTlVMTCwgU0MoU0NfMCksIE5VTEwsIDAsIDAsIDAsIDAgIH0sCisgICAgewkiL2Jpbi92bXN0YXQiLCAiLWYiLCBTQyhTQ18wKSwgTlVMTCwgMCwgMCwgMCwgMSAgICAgICB9LAorICAgIHsJIi91c3IvYmluL3Ztc3RhdCIsICItZiIsIFNDKFNDXzApLCBOVUxMLCAwLCAwLCAwLCAwICB9LAorICAgIHsJIi9iaW4vdm1zdGF0IiwgTlVMTCwgU0MoU0NfMCksIE5VTEwsIDAsIDAsIDAsIDEgICAgICAgfSwKKyAgICB7CSIvdXNyL2Jpbi92bXN0YXQiLCBOVUxMLCBTQyhTQ18wKSwgTlVMTCwgMCwgMCwgMCwgMCAgfSwKKyAgICB7CSIvdXNyL3VjYi9uZXRzdGF0IiwgIi1uIiwgU0MoMC41KSwgTlVMTCwgMCwgMCwgMCwgMSAgIH0sCisgICAgewkiL3Vzci9iaW4vbmV0c3RhdCIsICItbiIsIFNDKDAuNSksIE5VTEwsIDAsIDAsIDAsIDEgICB9LAorICAgIHsJIi91c3Ivc2Jpbi9uZXRzdGF0IiwgIi1uIiwgU0MoMC41KSwgTlVMTCwgMCwgMCwgMCwgMSAgfSwKKyAgICB7CSIvdXNyL2V0Yy9uZXRzdGF0IiwgIi1uIiwgU0MoMC41KSwgTlVMTCwgMCwgMCwgMCwgMCAgfSwKKyNpZiBkZWZpbmVkKCBfX3NnaSApIHx8IGRlZmluZWQoIF9faHB1eCApCisgICAgewkiL2Jpbi9wcyIsICItZWwiLCBTQygwLjMpLCBOVUxMLCAwLCAwLCAwLCAxICAgICAgICAgICB9LAorI2VuZGlmCQkJCS8qIF9fc2dpIHx8IF9faHB1eCAqLworICAgIHsJIi91c3IvdWNiL3BzIiwgImF1eCIsIFNDKDAuMyksIE5VTEwsIDAsIDAsIDAsIDEgICAgICAgfSwKKyAgICB7CSIvdXNyL2Jpbi9wcyIsICJhdXgiLCBTQygwLjMpLCBOVUxMLCAwLCAwLCAwLCAxICAgICAgIH0sCisgICAgewkiL2Jpbi9wcyIsICJhdXgiLCBTQygwLjMpLCBOVUxMLCAwLCAwLCAwLCAwICAgICAgICAgIH0sCisgICAgeyAgICIvYmluL3BzIiwgIi1BIiwgU0MoMC4zKSwgTlVMTCwgMCwgMCwgMCwgMCAgICAgICAgICAgfSwgLypRTlgqLworICAgIHsJIi91c3IvYmluL2lwY3MiLCAiLWEiLCBTQygwLjUpLCBOVUxMLCAwLCAwLCAwLCAxICAgICAgfSwKKyAgICB7CSIvYmluL2lwY3MiLCAiLWEiLCBTQygwLjUpLCBOVUxMLCAwLCAwLCAwLCAwICAgICAgICAgfSwKKyAgICAvKiBVbnJlbGlhYmxlIHNvdXJjZSwgZGVwZW5kcyBvbiBzeXN0ZW0gdXNhZ2UgKi8KKyAgICB7CSIvZXRjL3BzdGF0IiwgIi1wIiwgU0MoMC41KSwgTlVMTCwgMCwgMCwgMCwgMSAgICAgICAgIH0sCisgICAgewkiL2Jpbi9wc3RhdCIsICItcCIsIFNDKDAuNSksIE5VTEwsIDAsIDAsIDAsIDAgICAgICAgIH0sCisgICAgewkiL2V0Yy9wc3RhdCIsICItUyIsIFNDKDAuMiksIE5VTEwsIDAsIDAsIDAsIDEgICAgICAgICB9LAorICAgIHsJIi9iaW4vcHN0YXQiLCAiLVMiLCBTQygwLjIpLCBOVUxMLCAwLCAwLCAwLCAwICAgICAgICB9LAorICAgIHsJIi9ldGMvcHN0YXQiLCAiLXYiLCBTQygwLjIpLCBOVUxMLCAwLCAwLCAwLCAxICAgICAgICAgfSwKKyAgICB7CSIvYmluL3BzdGF0IiwgIi12IiwgU0MoMC4yKSwgTlVMTCwgMCwgMCwgMCwgMCAgICAgICAgfSwKKyAgICB7CSIvZXRjL3BzdGF0IiwgIi14IiwgU0MoMC4yKSwgTlVMTCwgMCwgMCwgMCwgMSAgICAgICAgIH0sCisgICAgewkiL2Jpbi9wc3RhdCIsICIteCIsIFNDKDAuMiksIE5VTEwsIDAsIDAsIDAsIDAgICAgICAgIH0sCisgICAgewkiL2V0Yy9wc3RhdCIsICItdCIsIFNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDEgICAgICAgICB9LAorICAgIHsJIi9iaW4vcHN0YXQiLCAiLXQiLCBTQygwLjEpLCBOVUxMLCAwLCAwLCAwLCAwICAgICAgICB9LAorICAgIC8qIHBzdGF0IGlzIHlvdXIgZnJpZW5kICovCisgICAgewkiL3Vzci9iaW4vbGFzdCIsICItbiA1MCIsIFNDKDAuMyksIE5VTEwsIDAsIDAsIDAsIDEgICB9LAorI2lmZGVmIF9fc2dpCisgICAgewkiL3Vzci9ic2QvbGFzdCIsICItNTAiLCBTQygwLjMpLCBOVUxMLCAwLCAwLCAwLCAwICAgIH0sCisjZW5kaWYJCQkJLyogX19zZ2kgKi8KKyNpZmRlZiBfX2hwdXgKKyAgICB7CSIvZXRjL2xhc3QiLCAiLTUwIiwgU0MoMC4zKSwgTlVMTCwgMCwgMCwgMCwgMCAgICAgICAgfSwKKyNlbmRpZgkJCQkvKiBfX2hwdXggKi8KKyAgICB7CSIvdXNyL2JzZC9sYXN0IiwgIi1uIDUwIiwgU0MoMC4zKSwgTlVMTCwgMCwgMCwgMCwgMCAgfSwKKyAgICB7CSIvdXNyL3NiaW4vc25tcF9yZXF1ZXN0IiwgImxvY2FsaG9zdCBwdWJsaWMgZ2V0IDEuMy42LjEuMi4xLjUuMS4wIiwKKwkJCQlTQygwLjEpLCBOVUxMLCAwLCAwLCAwLCAwIH0sIC8qIElDTVAgPyAqLworICAgIHsJIi91c3Ivc2Jpbi9zbm1wX3JlcXVlc3QiLCAibG9jYWxob3N0IHB1YmxpYyBnZXQgMS4zLjYuMS4yLjEuNS4zLjAiLAorCQkJCVNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDAgfSwgLyogSUNNUCA/ICovCisgICAgewkiL2V0Yy9hcnAiLCAiLWEiLCBTQygwLjEpLCBOVUxMLCAwLCAwLCAwLCAxICB9LAorICAgIHsJIi91c3IvZXRjL2FycCIsICItYSIsIFNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDEgIH0sCisgICAgewkiL3Vzci9iaW4vYXJwIiwgIi1hIiwgU0MoMC4xKSwgTlVMTCwgMCwgMCwgMCwgMSAgfSwKKyAgICB7CSIvdXNyL3NiaW4vYXJwIiwgIi1hIiwgU0MoMC4xKSwgTlVMTCwgMCwgMCwgMCwgMCB9LAorICAgIHsJIi91c3Ivc2Jpbi9yaXBxdWVyeSIsICItbncgMSAxMjcuMC4wLjEiLAorCQkJCVNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDAgfSwKKyAgICB7CSIvYmluL2xwc3RhdCIsICItdCIsIFNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDEgICAgIH0sCisgICAgewkiL3Vzci9iaW4vbHBzdGF0IiwgIi10IiwgU0MoMC4xKSwgTlVMTCwgMCwgMCwgMCwgMSB9LAorICAgIHsJIi91c3IvdWNiL2xwc3RhdCIsICItdCIsIFNDKDAuMSksIE5VTEwsIDAsIDAsIDAsIDAgfSwKKyAgICB7CSIvdXNyL2Jpbi90Y3BkdW1wIiwgIi1jIDUgLWVmdnZ4IiwgU0MoMSksIE5VTEwsIDAsIDAsIDAsIDAgfSwKKyAgICAvKiBUaGlzIGlzIHZlcnkgZW52aXJvbm1lbnQtZGVwZW5kYW50LiAgSWYgbmV0d29yayB0cmFmZmljIGlzIGxvdywgaXQnbGwKKyAgICAgKiBwcm9iYWJseSB0aW1lIG91dCBiZWZvcmUgZGVsaXZlcmluZyA1IHBhY2tldHMsIHdoaWNoIGlzIE9LIGJlY2F1c2UKKyAgICAgKiBpdCdsbCBwcm9iYWJseSBiZSBmaXhlZCBzdHVmZiBsaWtlIEFSUCBhbnl3YXkgKi8KKyAgICB7CSIvdXNyL3NiaW4vYWR2ZnNzdGF0IiwgIi1iIHVzcl9kb21haW4iLAorCQkJCVNDKFNDXzApLCBOVUxMLCAwLCAwLCAwLCAwfSwKKyAgICB7CSIvdXNyL3NiaW4vYWR2ZnNzdGF0IiwgIi1sIDIgdXNyX2RvbWFpbiIsCisJCQkJU0MoMC41KSwgTlVMTCwgMCwgMCwgMCwgMH0sCisgICAgewkiL3Vzci9zYmluL2FkdmZzc3RhdCIsICItcCB1c3JfZG9tYWluIiwKKwkJCQlTQyhTQ18wKSwgTlVMTCwgMCwgMCwgMCwgMH0sCisgICAgLyogVGhpcyBpcyBhIGNvbXBsZXggYW5kIHNjcmV3YmFsbCBwcm9ncmFtLiAgU29tZSBzeXN0ZW1zIGhhdmUgdGhpbmdzCisgICAgICogbGlrZSByWF9kbW4sIHggPSBpbnRlZ2VyLCBmb3IgUkFJRCBzeXN0ZW1zLCBidXQgdGhlIHN0YXRpc3RpY3MgYXJlCisgICAgICogcHJldHR5IGRvZGd5ICovCisjaWZkZWYgX19RTlhOVE9fXworICAgIHsgIi9iaW4vcGlkaW4iLCAiLUYlQSVCJWMlZCVFJUklSiVLJW0lTSVuJU4lcCVQJVMlcyVUIiwgU0MoMC4zKSwKKyAgICAgICAgICAgICBOVUxMLCAwLCAwLCAwLCAwICAgICAgIH0sCisjZW5kaWYKKyNpZiAwCisgICAgLyogVGhlIGZvbGxvd2luZyBhcmVuJ3QgZW5hYmxlZCBzaW5jZSB0aGV5J3JlIHNvbWV3aGF0IHNsb3cgYW5kIG5vdCB2ZXJ5CisgICAgICogdW5wcmVkaWN0YWJsZSwgaG93ZXZlciB0aGV5IGdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgc29ydCBvZiBzb3VyY2VzCisgICAgICogeW91IGNhbiB1c2UgKGZvciBleGFtcGxlIHRoZSBmaW5nZXIgbWlnaHQgYmUgbW9yZSB1c2VmdWwgb24gYQorICAgICAqIGZpcmV3YWxsZWQgaW50ZXJuYWwgbmV0d29yaykgKi8KKyAgICB7CSIvdXNyL2Jpbi9maW5nZXIiLCAiQG1sLm1lZGlhLm1pdC5lZHUiLCBTQygwLjkpLCBOVUxMLCAwLCAwLCAwLCAwIH0sCisgICAgewkiL3Vzci9sb2NhbC9iaW4vd2dldCIsICItTyAtIGh0dHA6Ly9sYXZhcmFuZC5zZ2kuY29tL2Jsb2NrLmh0bWwiLAorCQkJCVNDKDAuOSksIE5VTEwsIDAsIDAsIDAsIDAgfSwKKyAgICB7CSIvYmluL2NhdCIsICIvdXNyL3Nwb29sL21xdWV1ZS9zeXNsb2ciLCBTQygwLjkpLCBOVUxMLCAwLCAwLCAwLCAwIH0sCisjZW5kaWYJCQkJLyogMCAqLworICAgIHsJTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgYnl0ZSAqZ2F0aGVyX2J1ZmZlcjsJICAgIC8qIGJ1ZmZlciBmb3IgZ2F0aGVyaW5nIHJhbmRvbSBub2lzZSAqLworc3RhdGljIGludCBnYXRoZXJfYnVmZmVyX3NpemU7CSAgICAvKiBzaXplIG9mIHRoZSBtZW1vcnkgYnVmZmVyICovCitzdGF0aWMgdWlkX3QgZ2F0aGVyZXJfdWlkOworCisvKiBUaGUgbWVzc2FnZSBzdHJ1Y3R1cmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwYXJlbnQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgIHVzZWZ1bG5lc3M7CS8qIHVzZWZ1bG5lc3Mgb2YgZGF0YSAqLworICAgIGludCAgbmRhdGE7IAkvKiB2YWxpZCBieXRlcyBpbiBkYXRhICovCisgICAgY2hhciBkYXRhWzUwMF07CS8qIGdhdGhlcmVkIGRhdGEgKi8KK30gR0FUSEVSX01TRzsKKworI2lmbmRlZiBIQVZFX1dBSVRQSUQKK3N0YXRpYyBwaWRfdAord2FpdHBpZChwaWRfdCBwaWQsIGludCAqc3RhdHB0ciwgaW50IG9wdGlvbnMpCit7CisjaWZkZWYgSEFWRV9XQUlUNAorCXJldHVybiB3YWl0NChwaWQsIHN0YXRwdHIsIG9wdGlvbnMsIE5VTEwpOworI2Vsc2UKKwkvKiBJZiB3YWl0NCBpcyBhbHNvIG5vdCBhdmFpbGFibGUsIHRyeSB3YWl0MyBmb3IgU1ZSMyB2YXJpYW50cyAqLworCS8qIExlc3MgaWRlYWwgYmVjYXVzZSBjYW4ndCBhY3R1YWxseSByZXF1ZXN0IGEgc3BlY2lmaWMgcGlkICovCisJLyogRm9yIHRoYXQgcmVhc29uLCBmaXJzdCBjaGVjayB0byBzZWUgaWYgcGlkIGlzIGZvciBhbiAqLworCS8qICAgZXhpc3RpbmcgcHJvY2Vzcy4gKi8KKwlpbnQgdG1wX3BpZCwgZHVtbXlzdGF0OzsKKwlpZiAoa2lsbChwaWQsIDApID09IC0xKSB7CisJCWVycm5vID0gRUNISUxEOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzdGF0cHRyID09IE5VTEwpCisJCXN0YXRwdHIgPSAmZHVtbXlzdGF0OworCXdoaWxlICgoKHRtcF9waWQgPSB3YWl0MyhzdGF0cHRyLCBvcHRpb25zLCAwKSkgIT0gcGlkKSAmJgorCQkgICAgKHRtcF9waWQgIT0gLTEpICYmICh0bXBfcGlkICE9IDApICYmIChwaWQgIT0gLTEpKQorCSAgICA7CisJcmV0dXJuIHRtcF9waWQ7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiBVbmRlciBTdW5PUyBwb3BlbigpIGRvZXNuJ3QgcmVjb3JkIHRoZSBwaWQgb2YgdGhlIGNoaWxkIHByb2Nlc3MuICBXaGVuCisgKiBwY2xvc2UoKSBpcyBjYWxsZWQsIGluc3RlYWQgb2YgY2FsbGluZyB3YWl0cGlkKCkgZm9yIHRoZSBjb3JyZWN0IGNoaWxkLCBpdAorICogY2FsbHMgd2FpdCgpIHJlcGVhdGVkbHkgdW50aWwgdGhlIHJpZ2h0IGNoaWxkIGlzIHJlYXBlZC4gIFRoZSBwcm9ibGVtIGlzCisgKiB0aGF0IHRoaXMgcmVhcHMgYW55IG90aGVyIGNoaWxkcmVuIHRoYXQgaGFwcGVuIHRvIGhhdmUgZGllZCBhdCB0aGF0CisgKiBtb21lbnQsIGFuZCB3aGVuIHRoZWlyIHBjbG9zZSgpIGNvbWVzIGFsb25nLCB0aGUgcHJvY2VzcyBoYW5ncyBmb3JldmVyLgorICogVGhlIGZpeCBpcyB0byB1c2UgYSB3cmFwcGVyIGZvciBwb3BlbigpL3BjbG9zZSgpIHdoaWNoIHNhdmVzIHRoZSBwaWQgaW4KKyAqIHRoZSBkYXRhU291cmNlcyBzdHJ1Y3R1cmUgKGNvZGUgYWRhcHRlZCBmcm9tIEdOVS1saWJjJ3MgcG9wZW4oKSBjYWxsKS4KKyAqCisgKiBBdXQgdmlhbSBpbnZlbmlhbSBhdXQgZmFjaWFtICovCisKK3N0YXRpYyBGSUxFICoKK215X3BvcGVuKHN0cnVjdCBSSSAqZW50cnkpCit7CisgICAgaW50IHBpcGVkZXNbMl07CisgICAgRklMRSAqc3RyZWFtOworCisgICAgLyogQ3JlYXRlIHRoZSBwaXBlICovCisgICAgaWYgKHBpcGUocGlwZWRlcykgPCAwKQorCXJldHVybiAoTlVMTCk7CisKKyAgICAvKiBGb3JrIG9mZiB0aGUgY2hpbGQgKCJ2Zm9yaygpIGlzIGxpa2UgYW4gT1Mgb3JnYXNtLiAgQWxsIE9TJ3Mgd2FudCB0bworICAgICAqIGRvIGl0LCBidXQgbW9zdCBqdXN0IGVuZCB1cCBmYWtpbmcgaXQiIC0gQ2hyaXMgV2VkZ3dvb2QpLiAgSWYgeW91ciBPUworICAgICAqIHN1cHBvcnRzIGl0LCB5b3Ugc2hvdWxkIHRyeSB0byB1c2UgdmZvcmsoKSBoZXJlIGJlY2F1c2UgaXQncyBzb21ld2hhdAorICAgICAqIG1vcmUgZWZmaWNpZW50ICovCisjaWYgZGVmaW5lZCggc3VuICkgfHwgZGVmaW5lZCggX191bHRyaXhfXyApIHx8IGRlZmluZWQoIF9fb3NmX18gKSB8fCBcCisJZGVmaW5lZChfX2hwdXgpCisgICAgZW50cnktPnBpZCA9IHZmb3JrKCk7CisjZWxzZQkJCQkvKiAgKi8KKyAgICBlbnRyeS0+cGlkID0gZm9yaygpOworI2VuZGlmCQkJCS8qIFVuaXhlbiB3aGljaCBoYXZlIHZmb3JrKCkgKi8KKyAgICBpZiAoZW50cnktPnBpZCA9PSAocGlkX3QpIC0gMSkgeworCS8qIFRoZSBmb3JrIGZhaWxlZCAqLworCWNsb3NlKHBpcGVkZXNbMF0pOworCWNsb3NlKHBpcGVkZXNbMV0pOworCXJldHVybiAoTlVMTCk7CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5waWQgPT0gKHBpZF90KSAwKSB7CisJc3RydWN0IHBhc3N3ZCAqcGFzc3dkOworCisJLyogV2UgYXJlIHRoZSBjaGlsZC4gIE1ha2UgdGhlIHJlYWQgc2lkZSBvZiB0aGUgcGlwZSBiZSBzdGRvdXQgKi8KKwlpZiAoZHVwMihwaXBlZGVzW1NURE9VVF9GSUxFTk9dLCBTVERPVVRfRklMRU5PKSA8IDApCisJICAgIGV4aXQoMTI3KTsKKworCS8qIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLCBnaXZlIHVwIG91ciBwZXJtaXNzaW9ucyB0byBtYWtlCisJICogc3VyZSB3ZSBkb24ndCByZWFkIGFueXRoaW5nIHNlbnNpdGl2ZS4gIElmIHRoZSBnZXRwd25hbSgpIGZhaWxzLAorCSAqIHdlIGRlZmF1bHQgdG8gLTEsIHdoaWNoIGlzIHVzdWFsbHkgbm9ib2R5ICovCisJaWYgKGdhdGhlcmVyX3VpZCA9PSAodWlkX3QpLTEgJiYgXAorCSAgICAocGFzc3dkID0gZ2V0cHduYW0oIm5vYm9keSIpKSAhPSBOVUxMKQorCSAgICBnYXRoZXJlcl91aWQgPSBwYXNzd2QtPnB3X3VpZDsKKworCXNldHVpZChnYXRoZXJlcl91aWQpOworCisJLyogQ2xvc2UgdGhlIHBpcGUgZGVzY3JpcHRvcnMgKi8KKwljbG9zZShwaXBlZGVzW1NURElOX0ZJTEVOT10pOworCWNsb3NlKHBpcGVkZXNbU1RET1VUX0ZJTEVOT10pOworCisJLyogVHJ5IGFuZCBleGVjIHRoZSBwcm9ncmFtICovCisJZXhlY2woZW50cnktPnBhdGgsIGVudHJ5LT5wYXRoLCBlbnRyeS0+YXJnLCBOVUxMKTsKKworCS8qIERpZSBpZiB0aGUgZXhlYyBmYWlsZWQgKi8KKwlleGl0KDEyNyk7CisgICAgfQorCisgICAgLyogV2UgYXJlIHRoZSBwYXJlbnQuICBDbG9zZSB0aGUgaXJyZWxldmFudCBzaWRlIG9mIHRoZSBwaXBlIGFuZCBvcGVuCisgICAgICogdGhlIHJlbGV2YW50IHNpZGUgYXMgYSBuZXcgc3RyZWFtLiAgTWFyayBvdXIgc2lkZSBvZiB0aGUgcGlwZSB0bworICAgICAqIGNsb3NlIG9uIGV4ZWMsIHNvIG5ldyBjaGlsZHJlbiB3b24ndCBzZWUgaXQgKi8KKyAgICBjbG9zZShwaXBlZGVzW1NURE9VVF9GSUxFTk9dKTsKKworI2lmZGVmIEZEX0NMT0VYRUMKKyAgICBmY250bChwaXBlZGVzW1NURElOX0ZJTEVOT10sIEZfU0VURkQsIEZEX0NMT0VYRUMpOworI2VuZGlmCisKKyAgICBzdHJlYW0gPSBmZG9wZW4ocGlwZWRlc1tTVERJTl9GSUxFTk9dLCAiciIpOworCisgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJaW50IHNhdmVkRXJybm8gPSBlcnJubzsKKworCS8qIFRoZSBzdHJlYW0gY291bGRuJ3QgYmUgb3BlbmVkIG9yIHRoZSBjaGlsZCBzdHJ1Y3R1cmUgY291bGRuJ3QgYmUKKwkgKiBhbGxvY2F0ZWQuICBLaWxsIHRoZSBjaGlsZCBhbmQgY2xvc2UgdGhlIG90aGVyIHNpZGUgb2YgdGhlIHBpcGUgKi8KKwlraWxsKGVudHJ5LT5waWQsIFNJR0tJTEwpOworCWlmIChzdHJlYW0gPT0gTlVMTCkKKwkgICAgY2xvc2UocGlwZWRlc1tTVERPVVRfRklMRU5PXSk7CisJZWxzZQorCSAgICBmY2xvc2Uoc3RyZWFtKTsKKworCXdhaXRwaWQoZW50cnktPnBpZCwgTlVMTCwgMCk7CisKKwllbnRyeS0+cGlkID0gMDsKKwllcnJubyA9IHNhdmVkRXJybm87CisJcmV0dXJuIChOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQKK215X3BjbG9zZShzdHJ1Y3QgUkkgKmVudHJ5KQoreworICAgIGludCBzdGF0dXMgPSAwOworCisgICAgaWYgKGZjbG9zZShlbnRyeS0+cGlwZSkpCisJcmV0dXJuICgtMSk7CisKKyAgICAvKiBXZSBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBwcm9jZXNzIGJlY2F1c2Ugc29tZQorICAgICAgIHByb2dyYW1zIHJldHVybiBmdW5ueSB2YWx1ZXMgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBpbnB1dAorICAgICAgIGJlaW5nIGRpc2NhcmRlZCBldmVuIGlmIHRoZXkgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhpcyBpc24ndAorICAgICAgIGEgcHJvYmxlbSBiZWNhdXNlIHRoZSByZXN1bHQgZGF0YSBzaXplIHRocmVzaG9sZCB3aWxsIGZpbHRlcgorICAgICAgIG91dCBhbnkgcHJvZ3JhbXMgd2hpY2ggZXhpdCB3aXRoIGEgdXNhZ2UgbWVzc2FnZSB3aXRob3V0CisgICAgICAgcHJvZHVjaW5nIHVzZWZ1bCBvdXRwdXQuICAqLworICAgIGlmICh3YWl0cGlkKGVudHJ5LT5waWQsIE5VTEwsIDApICE9IGVudHJ5LT5waWQpCisJc3RhdHVzID0gLTE7CisKKyAgICBlbnRyeS0+cGlwZSA9IE5VTEw7CisgICAgZW50cnktPnBpZCA9IDA7CisgICAgcmV0dXJuIChzdGF0dXMpOworfQorCisKKy8qIFVuaXggc2xvdyBwb2xsICh3aXRob3V0IHNwZWNpYWwgc3VwcG9ydCBmb3IgTGludXgpCisgKgorICogSWYgYSBmZXcgb2YgdGhlIHJhbmRvbW5lc3Mgc291cmNlcyBjcmVhdGUgYSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0IHRoZW4KKyAqIHRoZSBzbG93UG9sbCgpIHN0b3BzIG9uY2UgdGhlIGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQgKGJ1dCBiZWZvcmUgYWxsIHRoZQorICogcmFuZG9tbmVzcyBzb3VyY2VzIGhhdmUgYmVlbiBzdWNrZWQgZHJ5KSBzbyB0aGF0IHRoZSAndXNlZnVsbmVzcycgZmFjdG9yCisgKiByZW1haW5zIGJlbG93IHRoZSB0aHJlc2hvbGQuICBGb3IgdGhpcyByZWFzb24gdGhlIGdhdGhlcmVyIGJ1ZmZlciBoYXMgdG8KKyAqIGJlIGZhaXJseSBzaXplYWJsZSBvbiBtb2RlcmF0ZWx5IGxvYWRlZCBzeXN0ZW1zLiAgVGhpcyBpcyBzb21ldGhpbmcgb2YgYQorICogYnVnIHNpbmNlIHRoZSB1c2VmdWxuZXNzIHNob3VsZCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBhbW91bnQgb2Ygb3V0cHV0IGFzCisgKiB3ZWxsIGFzIHRoZSBzb3VyY2UgdHlwZSAqLworCisKK3N0YXRpYyBpbnQKK3Nsb3dfcG9sbChGSUxFICpkYmdmcCwgaW50IGRiZ2FsbCwgc2l6ZV90ICpuYnl0ZXMgKQoreworICAgIGludCBtb3JlU291cmNlczsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBmZF9zZXQgZmRzOworI2lmIGRlZmluZWQoIF9faHB1eCApCisgICAgc2l6ZV90IG1heEZEID0gMDsKKyNlbHNlCisgICAgaW50IG1heEZEID0gMDsKKyNlbmRpZiAvKiBPUy1zcGVjaWZpYyBicm9rZW5uZXNzICovCisgICAgaW50IGJ1ZlBvcywgaSwgdXNlZnVsbmVzcyA9IDA7CisgICAgaW50IGxhc3Rfc29fZmFyID0gMDsKKyAgICBpbnQgYW55X25lZWRfZW50cm9weSA9IDA7CisgICAgaW50IGRlbGF5OworICAgIGludCByYzsKKworICAgIC8qIEZpcmUgdXAgZWFjaCByYW5kb21uZXNzIHNvdXJjZSAqLworICAgIEZEX1pFUk8oJmZkcyk7CisgICAgZm9yIChpID0gMDsgZGF0YVNvdXJjZXNbaV0ucGF0aCAhPSBOVUxMOyBpKyspIHsKKwkvKiBTaW5jZSBwb3BlbigpIGlzIGEgZmFpcmx5IGhlYXZ5IGZ1bmN0aW9uLCB3ZSBjaGVjayB0byBzZWUgd2hldGhlcgorCSAqIHRoZSBleGVjdXRhYmxlIGV4aXN0cyBiZWZvcmUgd2UgdHJ5IHRvIHJ1biBpdCAqLworCWlmIChhY2Nlc3MoZGF0YVNvdXJjZXNbaV0ucGF0aCwgWF9PSykpIHsKKwkgICAgaWYoIGRiZ2ZwICYmIGRiZ2FsbCApCisJCWZwcmludGYoZGJnZnAsICIlcyBub3QgcHJlc2VudCVzXG4iLCBkYXRhU291cmNlc1tpXS5wYXRoLAorCQkJICAgICAgIGRhdGFTb3VyY2VzW2ldLmhhc0FsdGVybmF0aXZlID8KKwkJCQkJIiwgaGFzIGFsdGVybmF0aXZlcyIgOiAiIik7CisJICAgIGRhdGFTb3VyY2VzW2ldLnBpcGUgPSBOVUxMOworCX0KKwllbHNlCisJICAgIGRhdGFTb3VyY2VzW2ldLnBpcGUgPSBteV9wb3BlbigmZGF0YVNvdXJjZXNbaV0pOworCisJaWYgKGRhdGFTb3VyY2VzW2ldLnBpcGUgIT0gTlVMTCkgeworCSAgICBkYXRhU291cmNlc1tpXS5waXBlRkQgPSBmaWxlbm8oZGF0YVNvdXJjZXNbaV0ucGlwZSk7CisJICAgIGlmIChkYXRhU291cmNlc1tpXS5waXBlRkQgPiBtYXhGRCkKKwkJbWF4RkQgPSBkYXRhU291cmNlc1tpXS5waXBlRkQ7CisKKyNpZmRlZiBPX05PTkJMT0NLIC8qIE9oaGggd2hhdCBhIGhhY2sgKHVzZWQgZm9yIEF0YXJpKSAqLworCSAgICBmY250bChkYXRhU291cmNlc1tpXS5waXBlRkQsIEZfU0VURkwsIE9fTk9OQkxPQ0spOworI2Vsc2UKKyNlcnJvciBPX05PTkJMT0NLIGlzIG1pc3NpbmcKKyNlbmRpZgorICAgICAgICAgICAgLyogRklYTUU6IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZkIGlzIGxlc3MgdGhhbgorICAgICAgICAgICAgICAgRkRfU0VUU0laRS4gICovCisJICAgIEZEX1NFVChkYXRhU291cmNlc1tpXS5waXBlRkQsICZmZHMpOworCSAgICBkYXRhU291cmNlc1tpXS5sZW5ndGggPSAwOworCisJICAgIC8qIElmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgY29tbWFuZCwgZG9uJ3QgdHJ5IGFuZAorCSAgICAgKiBleGVjdXRlIHRoZW0gKi8KKwkgICAgd2hpbGUgKGRhdGFTb3VyY2VzW2ldLmhhc0FsdGVybmF0aXZlKSB7CisJCWlmKCBkYmdmcCAmJiBkYmdhbGwgKQorCQkgICAgZnByaW50ZihkYmdmcCwgIlNraXBwaW5nICVzXG4iLCBkYXRhU291cmNlc1tpICsgMV0ucGF0aCk7CisJCWkrKzsKKwkgICAgfQorCX0KKyAgICB9CisKKworICAgIC8qIFN1Y2sgYWxsIHRoZSBkYXRhIHdlIGNhbiBnZXQgZnJvbSBlYWNoIG9mIHRoZSBzb3VyY2VzICovCisgICAgYnVmUG9zID0gMDsKKyAgICBtb3JlU291cmNlcyA9IDE7CisgICAgZGVsYXkgPSAwOyAvKiBSZXR1cm4gaW1tZWRpYXRlbHkgKHdlbGwsIGFmdGVyIDEwMG1zKSB0aGUgZmlyc3QgdGltZS4gICovCisgICAgd2hpbGUgKG1vcmVTb3VyY2VzICYmIGJ1ZlBvcyA8PSBnYXRoZXJfYnVmZmVyX3NpemUpIHsKKwkvKiBXYWl0IGZvciBkYXRhIHRvIGJlY29tZSBhdmFpbGFibGUgZnJvbSBhbnkgb2YgdGhlIHNvdXJjZXMsIHdpdGggYQorCSAqIHRpbWVvdXQgb2YgMTAgc2Vjb25kcy4gIFRoaXMgYWRkcyBldmVuIG1vcmUgcmFuZG9tbmVzcyBzaW5jZSBkYXRhCisJICogYmVjb21lcyBhdmFpbGFibGUgaW4gYSBub25kZXRlcm1pbmlzdGljIGZhc2hpb24uICBLdWRvcyB0byBIUCdzIFFBCisJICogZGVwYXJ0bWVudCBmb3IgbWFuYWdpbmcgdG8gc2hpcCBhIHNlbGVjdCgpIHdoaWNoIGJyZWFrcyBpdHMgb3duCisJICogcHJvdG90eXBlICovCisJdHYudHZfc2VjID0gZGVsYXk7CisJdHYudHZfdXNlYyA9IGRlbGF5PyAwIDogMTAwMDAwOworCisjaWYgZGVmaW5lZCggX19ocHV4ICkgJiYgKCBPU19WRVJTSU9OID09IDkgKQorCXJjID0gc2VsZWN0KG1heEZEICsgMSwgKGludCAqKSZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisjZWxzZSAgLyogICovCisJcmMgPSBzZWxlY3QobWF4RkQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworI2VuZGlmIC8qIF9faHB1eCAqLworICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgYnJlYWs7IC8qIE9vb3BzOyBzZWxlY3QgZmFpbGVkLiAqLworCisgICAgICAgIGlmICghcmMpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogRklYTUU6IEJlY2F1c2Ugd2UgcnVuIHNldmVyYWwgdG9vbHMgYXQgb25jZSBpdCBpcworICAgICAgICAgICAgICAgdW5saWtlbHkgdGhhdCB3ZSB3aWxsIHNlZSBhIGJsb2NrIGluIHNlbGVjdCBhdCBhbGwuICovCisgICAgICAgICAgICBpZiAoIWFueV9uZWVkX2VudHJvcHkKKyAgICAgICAgICAgICAgICB8fCBsYXN0X3NvX2ZhciAhPSAoZ2F0aGVyX2J1ZmZlcl9zaXplIC0gYnVmUG9zKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsYXN0X3NvX2ZhciA9IGdhdGhlcl9idWZmZXJfc2l6ZSAtIGJ1ZlBvczsKKyAgICAgICAgICAgICAgICBfZ2NyeV9yYW5kb21fcHJvZ3Jlc3MgKCJuZWVkX2VudHJvcHkiLCAnWCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3NvX2ZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGhlcl9idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgYW55X25lZWRfZW50cm9weSA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGF5ID0gMTA7IC8qIFVzZSAxMCBzZWNvbmRzIGhlbmNlZm9ydGguICAqLworICAgICAgICAgICAgLyogTm90ZSB0aGF0IHRoZSBmZF9zZXQgaXMgc2V0dXAgYWdhaW4gYXQgdGhlIGVuZCBvZiB0aGlzIGxvb3AuICAqLworICAgICAgICAgIH0KKworCS8qIE9uZSBvZiB0aGUgc291cmNlcyBoYXMgZGF0YSBhdmFpbGFibGUsIHJlYWQgaXQgaW50byB0aGUgYnVmZmVyICovCisJZm9yIChpID0gMDsgZGF0YVNvdXJjZXNbaV0ucGF0aCAhPSBOVUxMOyBpKyspIHsKKwkgICAgaWYoIGRhdGFTb3VyY2VzW2ldLnBpcGUgJiYgRkRfSVNTRVQoZGF0YVNvdXJjZXNbaV0ucGlwZUZELCAmZmRzKSkgeworCQlzaXplX3Qgbm9CeXRlczsKKworCQlpZiAoKG5vQnl0ZXMgPSBmcmVhZChnYXRoZXJfYnVmZmVyICsgYnVmUG9zLCAxLAorCQkJCSAgICAgZ2F0aGVyX2J1ZmZlcl9zaXplIC0gYnVmUG9zLAorCQkJCSAgICAgZGF0YVNvdXJjZXNbaV0ucGlwZSkpID09IDApIHsKKwkJICAgIGlmIChteV9wY2xvc2UoJmRhdGFTb3VyY2VzW2ldKSA9PSAwKSB7CisJCQlpbnQgdG90YWwgPSAwOworCisJCQkvKiBUcnkgYW5kIGVzdGltYXRlIGhvdyBtdWNoIGVudHJvcHkgd2UncmUgZ2V0dGluZworCQkJICogZnJvbSBhIGRhdGEgc291cmNlICovCisJCQlpZiAoZGF0YVNvdXJjZXNbaV0udXNlZnVsbmVzcykgeworCQkJICAgIGlmIChkYXRhU291cmNlc1tpXS51c2VmdWxuZXNzIDwgMCkKKwkJCQl0b3RhbCA9IChkYXRhU291cmNlc1tpXS5sZW5ndGggKyA5OTkpCisJCQkJCS8gLWRhdGFTb3VyY2VzW2ldLnVzZWZ1bG5lc3M7CisJCQkgICAgZWxzZQorCQkJCXRvdGFsID0gZGF0YVNvdXJjZXNbaV0ubGVuZ3RoCisJCQkJCS8gZGF0YVNvdXJjZXNbaV0udXNlZnVsbmVzczsKKwkJCX0KKwkJCWlmKCBkYmdmcCApCisJCQkgICAgZnByaW50ZihkYmdmcCwKKwkJCSAgICAgICAiJXMgJXMgY29udHJpYnV0ZWQgJWQgYnl0ZXMsICIKKwkJCSAgICAgICAidXNlZnVsbmVzcyA9ICVkXG4iLCBkYXRhU291cmNlc1tpXS5wYXRoLAorCQkJICAgICAgIChkYXRhU291cmNlc1tpXS5hcmcgIT0gTlVMTCkgPworCQkJCSAgICAgICBkYXRhU291cmNlc1tpXS5hcmcgOiAiIiwKKwkJCQkgICAgICBkYXRhU291cmNlc1tpXS5sZW5ndGgsIHRvdGFsKTsKKwkJCWlmKCBkYXRhU291cmNlc1tpXS5sZW5ndGggKQorCQkJICAgIHVzZWZ1bG5lc3MgKz0gdG90YWw7CisJCSAgICB9CisJCSAgICBkYXRhU291cmNlc1tpXS5waXBlID0gTlVMTDsKKwkJfQorCQllbHNlIHsKKwkJICAgIGludCBjdXJyUG9zID0gYnVmUG9zOworCQkgICAgaW50IGVuZFBvcyA9IGJ1ZlBvcyArIG5vQnl0ZXM7CisKKwkJICAgIC8qIFJ1bi1sZW5ndGggY29tcHJlc3MgdGhlIGlucHV0IGJ5dGUgc2VxdWVuY2UgKi8KKwkJICAgIHdoaWxlIChjdXJyUG9zIDwgZW5kUG9zKSB7CisJCQlpbnQgY2ggPSBnYXRoZXJfYnVmZmVyW2N1cnJQb3NdOworCisJCQkvKiBJZiBpdCdzIGEgc2luZ2xlIGJ5dGUsIGp1c3QgY29weSBpdCBvdmVyICovCisJCQlpZiAoY2ggIT0gZ2F0aGVyX2J1ZmZlcltjdXJyUG9zICsgMV0pIHsKKwkJCSAgICBnYXRoZXJfYnVmZmVyW2J1ZlBvcysrXSA9IGNoOworCQkJICAgIGN1cnJQb3MrKzsKKwkJCX0KKwkJCWVsc2UgeworCQkJICAgIGludCBjb3VudCA9IDA7CisKKwkJCSAgICAvKiBJdCdzIGEgcnVuIG9mIHJlcGVhdGVkIGJ5dGVzLCByZXBsYWNlIHRoZW0KKwkJCSAgICAgKiB3aXRoIHRoZSBieXRlIGNvdW50IG1vZCAyNTYgKi8KKwkJCSAgICB3aGlsZSAoKGNoID09IGdhdGhlcl9idWZmZXJbY3VyclBvc10pCisJCQkJICAgICYmIGN1cnJQb3MgPCBlbmRQb3MpIHsKKwkJCQljb3VudCsrOworCQkJCWN1cnJQb3MrKzsKKwkJCSAgICB9CisJCQkgICAgZ2F0aGVyX2J1ZmZlcltidWZQb3MrK10gPSBjb3VudDsKKwkJCSAgICBub0J5dGVzIC09IGNvdW50IC0gMTsKKwkJCX0KKwkJICAgIH0KKworCQkgICAgLyogUmVtZW1iZXIgdGhlIG51bWJlciBvZiAoY29tcHJlc3NlZCkgYnl0ZXMgb2YgaW5wdXQgd2UKKwkJICAgICAqIG9idGFpbmVkICovCisJCSAgICBkYXRhU291cmNlc1tpXS5sZW5ndGggKz0gbm9CeXRlczsKKwkJfQorCSAgICB9CisJfQorCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgbW9yZSBpbnB1dCBhdmFpbGFibGUgb24gYW55IG9mIHRoZSBzb3VyY2VzICovCisJbW9yZVNvdXJjZXMgPSAwOworCUZEX1pFUk8oJmZkcyk7CisJZm9yIChpID0gMDsgZGF0YVNvdXJjZXNbaV0ucGF0aCAhPSBOVUxMOyBpKyspIHsKKwkgICAgaWYgKGRhdGFTb3VyY2VzW2ldLnBpcGUgIT0gTlVMTCkgeworCQlGRF9TRVQoZGF0YVNvdXJjZXNbaV0ucGlwZUZELCAmZmRzKTsKKwkJbW9yZVNvdXJjZXMgPSAxOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChhbnlfbmVlZF9lbnRyb3B5KQorICAgICAgICBfZ2NyeV9yYW5kb21fcHJvZ3Jlc3MgKCJuZWVkX2VudHJvcHkiLCAnWCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F0aGVyX2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGhlcl9idWZmZXJfc2l6ZSk7CisKKyAgICBpZiggZGJnZnAgKSB7CisJZnByaW50ZihkYmdmcCwgIkdvdCAlZCBieXRlcywgdXNlZnVsbmVzcyA9ICVkXG4iLCBidWZQb3MsIHVzZWZ1bG5lc3MpOworCWZmbHVzaChkYmdmcCk7CisgICAgfQorICAgICpuYnl0ZXMgPSBidWZQb3M7CisgICAgcmV0dXJuIHVzZWZ1bG5lc3M7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBTdGFydCB0aGUgZ2F0aGVyZXIgcHJvY2VzcyB3aGljaCB3cml0ZXMgbWVzc2FnZXMgb2YKKyAqIHR5cGUgR0FUSEVSRVJfTVNHIHRvIHBpcGVkZXMKKyAqLworc3RhdGljIHZvaWQKK3N0YXJ0X2dhdGhlcmVyKCBpbnQgcGlwZWZkICkKK3sKKyAgICBGSUxFICpkYmdmcCA9IE5VTEw7CisgICAgaW50IGRiZ2FsbDsKKworICAgIHsKKwljb25zdCBjaGFyICpzID0gZ2V0ZW52KCJHTlVQR19STkRVTklYX0RCRyIpOworCWlmKCBzICkgeworCSAgICBkYmdmcCA9ICgqcz09Jy0nICYmICFzWzFdKT8gc3Rkb3V0IDogZm9wZW4ocywgImEiKTsKKwkgICAgaWYoICFkYmdmcCApCisJCWxvZ19pbmZvKCJjYW4ndCBvcGVuIGRlYnVnIGZpbGUgYCVzJzogJXNcbiIsCisJCQkgICAgIHMsIHN0cmVycm9yKGVycm5vKSApOworCSAgICBlbHNlCisJCWZwcmludGYoZGJnZnAsIlxuU1RBUlQgUk5EVU5JWCBERUJVRyBwaWQ9JWRcbiIsIChpbnQpZ2V0cGlkKCkpOworCX0KKwlkYmdhbGwgPSAhIWdldGVudigiR05VUEdfUk5EVU5JWF9EQkdBTEwiKTsKKyAgICB9CisgICAgLyogY2xvc2UgYWxsIGZpbGVzIGJ1dCB0aGUgb25lcyB3ZSBuZWVkICovCisgICAgewlpbnQgbm1heCwgbjEsIG4yLCBpOworI2lmZGVmIF9TQ19PUEVOX01BWAorCWlmKCAobm1heD1zeXNjb25mKCBfU0NfT1BFTl9NQVggKSkgPCAwICkgeworI2lmZGVmIF9QT1NJWF9PUEVOX01BWAorCSAgICBubWF4ID0gX1BPU0lYX09QRU5fTUFYOworI2Vsc2UKKwkgICAgbm1heCA9IDIwOyAvKiBhc3N1bWUgYSByZWFzb25hYmxlIHZhbHVlICovCisjZW5kaWYKKwl9CisjZWxzZSAvKiFfU0NfT1BFTl9NQVgqLworCW5tYXggPSAyMDsgLyogYXNzdW1lIGEgcmVhc29uYWJsZSB2YWx1ZSAqLworI2VuZGlmIC8qIV9TQ19PUEVOX01BWCovCisJbjEgPSBmaWxlbm8oIHN0ZGVyciApOworCW4yID0gZGJnZnA/IGZpbGVubyggZGJnZnAgKSA6IC0xOworCWZvcihpPTA7IGkgPCBubWF4OyBpKysgKSB7CisJICAgIGlmKCBpICE9IG4xICYmIGkgIT0gbjIgJiYgaSAhPSBwaXBlZmQgKQorCQljbG9zZShpKTsKKwl9CisJZXJybm8gPSAwOworICAgIH0KKworCisgICAgLyogU2V0IHVwIHRoZSBidWZmZXIuICBOb3QgZXRoYXQgd2UgdXNlIGEgcGxhaW4gc3RhbmRhcmQgbWFsbG9jIGhlcmUuICovCisgICAgZ2F0aGVyX2J1ZmZlcl9zaXplID0gR0FUSEVSX0JVRlNJWkU7CisgICAgZ2F0aGVyX2J1ZmZlciA9IG1hbGxvYyggZ2F0aGVyX2J1ZmZlcl9zaXplICk7CisgICAgaWYoICFnYXRoZXJfYnVmZmVyICkgeworCWxvZ19lcnJvcigib3V0IG9mIGNvcmUgd2hpbGUgYWxsb2NhdGluZyB0aGUgZ2F0aGVyZXIgYnVmZmVyXG4iKTsKKwlleGl0KDIpOworICAgIH0KKworICAgIC8qIFJlc2V0IHRoZSBTSUdDKEgpTEQgaGFuZGxlciB0byB0aGUgc3lzdGVtIGRlZmF1bHQuICBUaGlzIGlzIG5lY2Vzc2FyeQorICAgICAqIGJlY2F1c2UgaWYgdGhlIHByb2dyYW0gd2hpY2ggY3J5cHRsaWIgaXMgYSBwYXJ0IG9mIGluc3RhbGxzIGl0cyBvd24KKyAgICAgKiBTSUdDKEgpTEQgaGFuZGxlciwgaXQgd2lsbCBlbmQgdXAgcmVhcGluZyB0aGUgY3J5cHRsaWIgY2hpbGRyZW4gYmVmb3JlCisgICAgICogY3J5cHRsaWIgY2FuLiAgQXMgYSByZXN1bHQsIG15X3BjbG9zZSgpIHdpbGwgY2FsbCB3YWl0cGlkKCkgb24gYQorICAgICAqIHByb2Nlc3Mgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiByZWFwZWQgYnkgdGhlIGluc3RhbGxlZCBoYW5kbGVyIGFuZAorICAgICAqIHJldHVybiBhbiBlcnJvciwgc28gdGhlIHJlYWQgZGF0YSB3b24ndCBiZSBhZGRlZCB0byB0aGUgcmFuZG9tbmVzcworICAgICAqIHBvb2wuICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFNJR0MoSClMRCBuYW1pbmcsIHRoZSBTeXNWIFNJR0NMRCBhbmQKKyAgICAgKiB0aGUgQlNEL1Bvc2l4IFNJR0NITEQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIGVpdGhlciBwb3NzaWJpbGl0eSAqLworI2lmZGVmIFNJR0NMRAorICAgIHNpZ25hbChTSUdDTEQsIFNJR19ERkwpOworI2Vsc2UKKyAgICBzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisjZW5kaWYKKworICAgIGZjbG9zZShzdGRlcnIpOwkJLyogQXJyZ2hoISEgIEl0J3MgU3R1YXJ0IGNvZGUhISAqLworCisgICAgZm9yKDs7KSB7CisJR0FUSEVSX01TRyBtc2c7CisJc2l6ZV90IG5ieXRlczsKKwljb25zdCBjaGFyICpwOworCisJbXNnLnVzZWZ1bG5lc3MgPSBzbG93X3BvbGwoIGRiZ2ZwLCBkYmdhbGwsICZuYnl0ZXMgKTsKKwlwID0gZ2F0aGVyX2J1ZmZlcjsKKwl3aGlsZSggbmJ5dGVzICkgeworCSAgICBtc2cubmRhdGEgPSBuYnl0ZXMgPiBzaXplb2YobXNnLmRhdGEpPyBzaXplb2YobXNnLmRhdGEpIDogbmJ5dGVzOworCSAgICBtZW1jcHkoIG1zZy5kYXRhLCBwLCBtc2cubmRhdGEgKTsKKwkgICAgbmJ5dGVzIC09IG1zZy5uZGF0YTsKKwkgICAgcCArPSBtc2cubmRhdGE7CisKKwkgICAgd2hpbGUoIHdyaXRlKCBwaXBlZmQsICZtc2csIHNpemVvZihtc2cpICkgIT0gc2l6ZW9mKG1zZykgKSB7CisJCWlmKCBlcnJubyA9PSBFSU5UUiApCisJCSAgICBjb250aW51ZTsKKwkJaWYoIGVycm5vID09IEVBR0FJTiApIHsKKwkJICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCQkgICAgdHYudHZfc2VjID0gMDsKKwkJICAgIHR2LnR2X3VzZWMgPSA1MDAwMDsKKwkJICAgIHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdHYpOworCQkgICAgY29udGludWU7CisJCX0KKwkJaWYoIGVycm5vID09IEVQSVBFICkgLyogcGFyZW50IGhhcyBleGl0ZWQsIHNvIGdpdmUgdXAgKi8KKwkJICAgZXhpdCgwKTsKKworCQkvKiB3ZSBjYW4ndCBkbyB2ZXJ5IG11Y2ggaGVyZSBiZWNhdXNlIHN0ZGVyciBpcyBjbG9zZWQgKi8KKwkJaWYoIGRiZ2ZwICkKKwkJICAgIGZwcmludGYoZGJnZnAsICJnYXRoZXJlciBjYW4ndCB3cml0ZSB0byBwaXBlOiAlc1xuIiwKKwkJCQkgICAgc3RyZXJyb3IoZXJybm8pICk7CisJCS8qIHdlIHN0YXJ0IGEgbmV3IHBvbGwgdG8gZ2l2ZSB0aGUgc3lzdGVtIHNvbWUgdGltZSAqLworCQluYnl0ZXMgPSAwOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgLyogd2UgYXJlIGtpbGxlZCB3aGVuIHRoZSBwYXJlbnQgZGllcyAqLworfQorCisKK3N0YXRpYyBpbnQKK3JlYWRfYV9tc2coIGludCBmZCwgR0FUSEVSX01TRyAqbXNnICkKK3sKKyAgICBjaGFyICpidWZmZXIgPSAoY2hhciopbXNnOworICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YoICptc2cgKTsKKyAgICBpbnQgbjsKKworICAgIGRvIHsKKwlkbyB7CisJICAgIG4gPSByZWFkKGZkLCBidWZmZXIsIGxlbmd0aCApOworCX0gd2hpbGUoIG4gPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIgKTsKKwlpZiggbiA9PSAtMSApCisJICAgIHJldHVybiAtMTsKKwlidWZmZXIgKz0gbjsKKwlsZW5ndGggLT0gbjsKKyAgICB9IHdoaWxlKCBsZW5ndGggKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogVXNpbmcgYSBsZXZlbCBvZiAwIHNob3VsZCBuZXZlciBibG9jayBhbmQgYmV0dGVyIGFkZCBub3RoaW5nCisgKiB0byB0aGUgcG9vbC4gIFNvIHRoaXMgaXMganVzdCBhIGR1bW15IGZvciB0aGlzIGdhdGhlcmVyLgorICovCitpbnQKK19nY3J5X3JuZHVuaXhfZ2F0aGVyX3JhbmRvbSAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKQoreworICAgIHN0YXRpYyBwaWRfdCBnYXRoZXJlcl9waWQgPSAwOworICAgIHN0YXRpYyBpbnQgcGlwZWRlc1syXTsKKyAgICBHQVRIRVJfTVNHIG1zZzsKKyAgICBzaXplX3QgbjsKKworICAgIGlmKCAhbGV2ZWwgKQorCXJldHVybiAwOworCisgICAgaWYoICFnYXRoZXJlcl9waWQgKSB7CisJLyogTWFrZSBzdXJlIHdlIGFyZSBub3Qgc2V0dWlkLiAqLworCWlmICggZ2V0dWlkKCkgIT0gZ2V0ZXVpZCgpICkKKwkgICAgQlVHKCk7CisJLyogdGltZSB0byBzdGFydCB0aGUgZ2F0aGVyZXIgcHJvY2VzcyAqLworCWlmKCBwaXBlKCBwaXBlZGVzICkgKSB7CisJICAgIGxvZ19lcnJvcigicGlwZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJICAgIHJldHVybiAtMTsKKwl9CisJZ2F0aGVyZXJfcGlkID0gZm9yaygpOworCWlmKCBnYXRoZXJlcl9waWQgPT0gLTEgKSB7CisJICAgIGxvZ19lcnJvcigiY2FuJ3QgZm9yIGdhdGhlcmVyIHByb2Nlc3M6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCSAgICByZXR1cm4gLTE7CisJfQorCWlmKCAhZ2F0aGVyZXJfcGlkICkgeworCSAgICBzdGFydF9nYXRoZXJlciggcGlwZWRlc1sxXSApOworCSAgICAvKiBvb3BzLCBjYW4ndCBoYXBwZW4gKi8KKwkgICAgcmV0dXJuIC0xOworCX0KKyAgICB9CisKKyAgICAvKiBub3cgcmVhZCBmcm9tIHRoZSBnYXRoZXJlciAqLworICAgIHdoaWxlKCBsZW5ndGggKSB7CisJaW50IGdvb2RuZXNzOworCXVsb25nIHN1YnRyYWN0OworCisJaWYoIHJlYWRfYV9tc2coIHBpcGVkZXNbMF0sICZtc2cgKSApIHsKKwkgICAgbG9nX2Vycm9yKCJyZWFkaW5nIGZyb20gZ2F0aGVyZXIgcGlwZSBmYWlsZWQ6ICVzXG4iLAorCQkJCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCSAgICByZXR1cm4gLTE7CisJfQorCisKKwlpZiggbGV2ZWwgPiAxICkgeworCSAgICBpZiggbXNnLnVzZWZ1bG5lc3MgPiAzMCApCisJCWdvb2RuZXNzID0gMTAwOworCSAgICBlbHNlIGlmICggbXNnLnVzZWZ1bG5lc3MgKQorCQlnb29kbmVzcyA9IG1zZy51c2VmdWxuZXNzICogMTAwIC8gMzA7CisJICAgIGVsc2UKKwkJZ29vZG5lc3MgPSAwOworCX0KKwllbHNlIGlmKCBsZXZlbCApIHsKKwkgICAgaWYoIG1zZy51c2VmdWxuZXNzID4gMTUgKQorCQlnb29kbmVzcyA9IDEwMDsKKwkgICAgZWxzZSBpZiAoIG1zZy51c2VmdWxuZXNzICkKKwkJZ29vZG5lc3MgPSBtc2cudXNlZnVsbmVzcyAqIDEwMCAvIDE1OworCSAgICBlbHNlCisJCWdvb2RuZXNzID0gMDsKKwl9CisJZWxzZQorCSAgICBnb29kbmVzcyA9IDEwMDsgLyogZ29vZG5lc3Mgb2YgbGV2ZWwgMCBpcyBhbHdheXMgMTAwICUgKi8KKworCW4gPSBtc2cubmRhdGE7CisJaWYoIG4gPiBsZW5ndGggKQorCSAgICBuID0gbGVuZ3RoOworCSgqYWRkKSggbXNnLmRhdGEsIG4sIG9yaWdpbiApOworCisJLyogdGhpcyBpcyB0aGUgdHJpY2sgaG93IHdlIGNvcGUgd2l0aCB0aGUgZ29vZG5lc3MgKi8KKwlzdWJ0cmFjdCA9ICh1bG9uZyluICogZ29vZG5lc3MgLyAxMDA7CisJLyogc3VidHJhY3QgYXQgbGVhc3QgMSBieXRlIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzICovCisJbGVuZ3RoIC09IHN1YnRyYWN0ID8gc3VidHJhY3QgOiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcmFuZG9tL3JuZHczMi5jIGIvcmFuZG9tL3JuZHczMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTUxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5kb20vcm5kdzMyLmMKQEAgLTAsMCArMSw5OTUgQEAKKy8qIHJuZHczMi5jICAtICBXMzIgZW50cm9weSBnYXRoZXJlcgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA3LAorICogICAgICAgICAgICAgICAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IFBldGVyIEd1dG1hbm4sIE1hdHQgVGhvbWxpbnNvbiBhbmQgQmxha2UgQ292ZXJldHQgMTk5Ni0yMDA2CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgY29kZSBoZXJlIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDcnlwdGxpYiAzLjAgYmV0YSBieSBQZXRlciBHdXRtYW5uLgorICogU291cmNlIGZpbGUgbWlzYy9ybmR3aW4zMi5jICJXaW4zMiBSYW5kb21uZXNzLUdhdGhlcmluZyBDb2RlIiB3aXRoIHRoaXMKKyAqIGNvcHlyaWdodCBub3RpY2U6CisgKgorICogVGhpcyBtb2R1bGUgaXMgcGFydCBvZiB0aGUgY3J5cHRsaWIgY29udGludW91c2x5IHNlZWRlZCBwc2V1ZG9yYW5kb20KKyAqIG51bWJlciBnZW5lcmF0b3IuICBGb3IgdXNhZ2UgY29uZGl0aW9ucywgc2VlIGxpYl9yYW5kLmMKKyAqCisgKiBbSGVyZSBpcyB0aGUgbm90aWNlIGZyb20gbGliX3JhbmQuYywgd2hpY2ggaXMgbm93IGNhbGxlZCBkZXZfc3lzLmNdCisgKgorICogVGhpcyBtb2R1bGUgYW5kIHRoZSBtaXNjL3JuZCouYyBtb2R1bGVzIHJlcHJlc2VudCB0aGUgY3J5cHRsaWIKKyAqIGNvbnRpbnVvdXNseSBzZWVkZWQgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKENTUFJORykgYXMgZGVzY3JpYmVkIGluCisgKiBteSAxOTk4IFVzZW5peCBTZWN1cml0eSBTeW1wb3NpdW0gcGFwZXIgIlRoZSBnZW5lcmF0aW9uIG9mIHJhbmRvbSBudW1iZXJzCisgKiBmb3IgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlcyIuCisgKgorICogVGhlIENTUFJORyBjb2RlIGlzIGNvcHlyaWdodCBQZXRlciBHdXRtYW5uIChhbmQgdmFyaW91cyBvdGhlcnMpIDE5OTYsCisgKiAxOTk3LCAxOTk4LCAxOTk5LCBhbGwgcmlnaHRzIHJlc2VydmVkLiAgUmVkaXN0cmlidXRpb24gb2YgdGhlIENTUFJORworICogbW9kdWxlcyBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZQorICogICAgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0IG5vdGljZSBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogMy4gQSBjb3B5IG9mIGFueSBidWdmaXhlcyBvciBlbmhhbmNlbWVudHMgbWFkZSBtdXN0IGJlIHByb3ZpZGVkIHRvIHRoZQorICogICAgYXV0aG9yLCA8cGd1dDAwMUBjcy5hdWNrbGFuZC5hYy5uej4gdG8gYWxsb3cgdGhlbSB0byBiZSBhZGRlZCB0byB0aGUKKyAqICAgIGJhc2VsaW5lIHZlcnNpb24gb2YgdGhlIGNvZGUuCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhlIGNvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLjEgb3IgYW55IGxhdGVyIHZlcnNpb24KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZQorICogcHJvdmlzaW9ucyBvZiB0aGUgR05VIExHUEwgYXJlIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlCisgKiByZXN0cmljdGlvbnMuCisgKgorICogQWx0aG91Z2ggbm90IHJlcXVpcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCwgaXQgd291bGQgc3RpbGwKKyAqIGJlIG5pY2UgaWYgeW91IGNvdWxkIG1ha2UgYW55IGNoYW5nZXMgYXZhaWxhYmxlIHRvIHRoZSBhdXRob3IgdG8KKyAqIGFsbG93IGEgY29uc2lzdGVudCBjb2RlIGJhc2UgdG8gYmUgbWFpbnRhaW5lZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgYWJvdmUgYWx0ZXJuYXRpdmUgd2FzIGNoYW5nZWQgZnJvbSBHUEwgdG8gTEdQTCBvbiAyMDA3LTA4LTIyIHdpdGgKKyAqIHBlcm1pc3Npb24gZnJvbSBQZXRlciBHdXRtYW5uOgorICo9PT09PT09PT09CisgRnJvbTogcGd1dDAwMSA8cGd1dDAwMUBjcy5hdWNrbGFuZC5hYy5uej4KKyBTdWJqZWN0OiBSZTogTEdQTCBmb3IgdGhlIHdpbmRvd3MgZW50cm9weSBnYXRoZXJlcgorIFRvOiB3a0BnbnVwZy5vcmcKKyBEYXRlOiBXZWQsIDIyIEF1ZyAyMDA3IDAzOjA1OjQyICsxMjAwCisKKyBIaSwKKworID5BcyBvZiBub3cgbGliZ2NyeXB0IGlzIEdQTCB1bmRlciBXaW5kb3dzIGR1ZSB0byB0aGF0IG1vZHVsZSBhbmQgc29tZSBwZW9wbGUKKyA+d291bGQgcmVhbGx5IGxpa2UgdG8gc2VlIGl0IHVuZGVyIExHUEwgdG9vLiAgQ2FuIHlvdSBkbyBzdWNoIGEgbGljZW5zZSBjaGFuZ2UKKyA+dG8gTEdQTCB2ZXJzaW9uIDI/ICBOb3RlIHRoYXQgTEdQTCBnaXZlIHRoZSB1c2VyIHRoZSBvcHRpb24gdG8gcmVsaWNlbnNlIGl0CisgPnVuZGVyIEdQTCwgc28gdGhlIGNoYW5nZSB3b3VsZCBiZSBwcmV0dHkgZWFzeSBhbmQgYmFja3dhciBjb21wYXRpYmxlLgorCisgU3VyZS4gIEkgYXNzdW1lZCB0aGF0IHNpbmNlIEdQRyB3YXMgR1BMZCwgeW91J2QgcHJlZmVyIHRoZSBHUEwgZm9yIHRoZSBlbnRyb3B5CisgY29kZSBhcyB3ZWxsLCBidXQgSWFuIGFza2VkIGZvciBMR1BMIGFzIGFuIG9wdGlvbiBzbyBhcyBvZiB0aGUgbmV4dCByZWxlYXNlCisgSSdsbCBoYXZlIExHUEwgaW4gdGhlcmUuICBZb3UgY2FuIGNvbnNpZGVyIGl0IHRvIGJlIHJldHJvYWN0aXZlLCBzbyB5b3VyCisgY3VycmVudCB2ZXJzaW9uIHdpbGwgYmUgTEdQTGQgYXMgd2VsbC4KKworIFBldGVyLgorICo9PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBfX0dOVUNfXworI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJyYW5kLWludGVybmFsLmgiCisKKworLyogRGVmaW5pdGlvbnMgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBHTlUgV2luZG93czMyQXBpLiAgKi8KKyNpZm5kZWYgSU9DVExfRElTS19QRVJGT1JNQU5DRQorI2RlZmluZSBJT0NUTF9ESVNLX1BFUkZPUk1BTkNFICAweDAwMDcwMDIwCisjZW5kaWYKKworLyogVGhpcyB1c2VkIHRvIGJlICg2KjgrNSo0KzgqMiksIGJ1dCBQZXRlciBHdXRtYW5uIGZpZ3VyZWQgYSBsYXJnZXIKKyAgIHZhbHVlIGluIGEgbmV3ZXIgcmVsZWFzZS4gU28gd2UgdXNlIGEgZmFyIGxhcmdlciB2YWx1ZS4gKi8KKyNkZWZpbmUgU0laRU9GX0RJU0tfUEVSRk9STUFOQ0VfU1RSVUNUIDI1NgorCisvKiBXZSBkb24ndCBpbmNsdWRlIHdpbmNyeXB0Lmggc28gZGVmaW5lIGl0IGhlcmUuICAqLworI2RlZmluZSBIQ1JZUFRQUk9WICBIQU5ETEUKKworCisvKiBXaGVuIHdlIHF1ZXJ5IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycywgd2UgYWxsb2NhdGUgYW4gaW5pdGlhbCBidWZmZXIgYW5kCisgKiB0aGVuIHJlYWxsb2NhdGUgaXQgYXMgcmVxdWlyZWQgdW50aWwgUmVnUXVlcnlWYWx1ZUV4KCkgc3RvcHMgcmV0dXJuaW5nCisgKiBFUlJPUl9NT1JFX0RBVEEuICBUaGUgZm9sbG93aW5nIHZhbHVlcyBkZWZpbmUgdGhlIGluaXRpYWwgYnVmZmVyIHNpemUgYW5kCisgKiBzdGVwIHNpemUgYnkgd2hpY2ggdGhlIGJ1ZmZlciBpcyBpbmNyZWFzZWQKKyAqLworI2RlZmluZSBQRVJGT1JNQU5DRV9CVUZGRVJfU0laRSAgICAgICAgIDY1NTM2ICAgLyogU3RhcnQgYXQgNjRLICovCisjZGVmaW5lIFBFUkZPUk1BTkNFX0JVRkZFUl9TVEVQICAgICAgICAgMTYzODQgICAvKiBTdGVwIGJ5IDE2SyAqLworCisKKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSBzeXN0ZW0gUk5HIG9uIGVhY2ggc2xvdyBwb2xsLiAgKi8KKyNkZWZpbmUgU1lTVEVNUk5HX0JZVEVTIDY0CisKKy8qIEludGVsIENoaXBzZXQgQ1NQIHR5cGUgYW5kIG5hbWUgKi8KKyNkZWZpbmUgUFJPVl9JTlRFTF9TRUMgIDIyCisjZGVmaW5lIElOVEVMX0RFRl9QUk9WICAiSW50ZWwgSGFyZHdhcmUgQ3J5cHRvZ3JhcGhpYyBTZXJ2aWNlIFByb3ZpZGVyIgorCisKKworCisvKiBUeXBlIGRlZmluaXRpb25zIGZvciBmdW5jdGlvbiBwb2ludGVycyB0byBjYWxsIE5ldEFQSTMyIGZ1bmN0aW9ucy4gICovCit0eXBlZGVmIERXT1JEIChXSU5BUEkgKk5FVFNUQVRJU1RJQ1NHRVQpKExQV1NUUiBzelNlcnZlciwgTFBXU1RSIHN6U2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdMZXZlbCwgRFdPUkQgZHdPcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEJZVEUgKmxwQnVmZmVyKTsKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqTkVUQVBJQlVGRkVSU0laRSkoTFBWT0lEIGxwQnVmZmVyLCBMUERXT1JEIGNiQnVmZmVyKTsKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqTkVUQVBJQlVGRkVSRlJFRSkoTFBWT0lEIGxwQnVmZmVyKTsKKworLyogVHlwZSBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgdG8gY2FsbCBuYXRpdmUgTlQgZnVuY3Rpb25zLiAgKi8KK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqTlRRVUVSWVNZU1RFTUlORk9STUFUSU9OKShEV09SRCBzeXN0ZW1JbmZvcm1hdGlvbkNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBWT0lEIHN5c3RlbUluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HIHN5c3RlbUluZm9ybWF0aW9uTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9ORyByZXR1cm5MZW5ndGgpOwordHlwZWRlZiBEV09SRCAoV0lOQVBJICpOVFFVRVJZSU5GT1JNQVRJT05QUk9DRVNTKQorICAgICAoSEFORExFIHByb2Nlc3NIYW5kbGUsIERXT1JEIHByb2Nlc3NJbmZvcm1hdGlvbkNsYXNzLAorICAgICAgUFZPSUQgcHJvY2Vzc0luZm9ybWF0aW9uLCBVTE9ORyBwcm9jZXNzSW5mb3JtYXRpb25MZW5ndGgsCisgICAgICBQVUxPTkcgcmV0dXJuTGVuZ3RoKTsKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqTlRQT1dFUklORk9STUFUSU9OKQorICAgICAoRFdPUkQgcG93ZXJJbmZvcm1hdGlvbkNsYXNzLCBQVk9JRCBpbnB1dEJ1ZmZlciwKKyAgICAgIFVMT05HIGlucHV0QnVmZmVyTGVuZ3RoLCBQVk9JRCBvdXRwdXRCdWZmZXIsIFVMT05HIG91dHB1dEJ1ZmZlckxlbmd0aCApOworCisvKiBUeXBlIGRlZmluaXRpb25zIGZvciBmdW5jdGlvbiBwb2ludGVycyB0byBjYWxsIENyeXB0b0FQSSBmdW5jdGlvbnMuICovCit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ1JZUFRBQ1FVSVJFQ09OVEVYVCkoSENSWVBUUFJPViAqcGhQcm92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1RTVFIgcHN6Q29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1RTVFIgcHN6UHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdQcm92VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd0ZsYWdzKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEdFTlJBTkRPTSkoSENSWVBUUFJPViBoUHJvdiwgRFdPUkQgZHdMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVFJFTEVBU0VDT05URVhUKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0ZsYWdzKTsKKworLyogU29tZXdoYXQgYWx0ZXJuYXRpdmUgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgYXMgYSBkaXJlY3QgY2FsbCwgZm9yCisgICBXaW5kb3dzIFhQIGFuZCBuZXdlci4gIFRoaXMgaXMgdGhlIENyeXB0b0FQSSBSTkcsIHdoaWNoIGlzbid0IGFueXdoZXJlCisgICBuZWFyIGFzIGdvb2QgYXMgdGhlIEhXIFJORywgYnV0IHdlIHVzZSBpdCBpZiBpdCdzIHByZXNlbnQgb24gdGhlIGJhc2lzCisgICB0aGF0IGF0IGxlYXN0IGl0IGNhbid0IG1ha2UgdGhpbmdzIGFueSB3b3JzZS4gIFRoaXMgZGlyZWN0IGFjY2VzcyB2ZXJzaW9uCisgICBpcyBvbmx5IGF2YWlsYWJsZSB1bmRlciBXaW5kb3dzIFhQLCB3ZSBkb24ndCBnbyBvdXQgb2Ygb3VyIHdheSB0byBhY2Nlc3MKKyAgIHRoZSBtb3JlIGdlbmVyYWwgQ3J5cHRvQVBJIG9uZSBzaW5jZSB0aGUgbWFpbiBwdXJwb3NlIG9mIHVzaW5nIGl0IGlzIHRvCisgICB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG9zc2libGUgZnV0dXJlIGhhcmR3YXJlIFJOR3MgdGhhdCBtYXkgYmUgYWRkZWQsCisgICBmb3IgZXhhbXBsZSB2aWEgVENQQSBkZXZpY2VzLiAgKi8KK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpSVExHRU5SQU5ET00pKFBWT0lEIFJhbmRvbUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HIFJhbmRvbUJ1ZmZlckxlbmd0aCk7CisKKworCisvKiBNQk0gZGF0YSBzdHJ1Y3R1cmVzLCBvcmlnaW5hbGx5IGJ5IEFsZXhhbmRlciB2YW4gS2FhbSwgY29udmVydGVkIHRvIEMgYnkKKyAgIEFuZGVyc0BNYWpsYW5kLm9yZywgZmluYWxseSB1cGRhdGVkIGJ5IENocmlzIFphaHJ0IDx0ZWNobjBAaWFzdGF0ZS5lZHU+ICovCisjZGVmaW5lIEJ1c1R5cGUgICAgICAgICBjaGFyCisjZGVmaW5lIFNNQlR5cGUgICAgICAgICBjaGFyCisjZGVmaW5lIFNlbnNvclR5cGUgICAgICBjaGFyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFNlbnNvclR5cGUgaVR5cGU7ICAgICAgICAgICAgICAgLyogVHlwZSBvZiBzZW5zb3IuICAqLworICBpbnQgQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBzZW5zb3IgZm9yIHRoYXQgdHlwZS4gICovCit9IFNoYXJlZEluZGV4OworCit0eXBlZGVmIHN0cnVjdAoreworICBTZW5zb3JUeXBlIHNzVHlwZTsgICAgICAgICAgICAgIC8qIFR5cGUgb2Ygc2Vuc29yICovCisgIHVuc2lnbmVkIGNoYXIgc3NOYW1lWzEyXTsgICAgICAgLyogTmFtZSBvZiBzZW5zb3IgKi8KKyAgY2hhciBzc3BhZGRpbmcxWzNdOyAgICAgICAgICAgICAvKiBQYWRkaW5nIG9mIDMgYnl0ZXMgKi8KKyAgZG91YmxlIHNzQ3VycmVudDsgICAgICAgICAgICAgICAvKiBDdXJyZW50IHZhbHVlICovCisgIGRvdWJsZSBzc0xvdzsgICAgICAgICAgICAgICAgICAgLyogTG93ZXN0IHJlYWRvdXQgKi8KKyAgZG91YmxlIHNzSGlnaDsgICAgICAgICAgICAgICAgICAvKiBIaWdoZXN0IHJlYWRvdXQgKi8KKyAgbG9uZyBzc0NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBUb3RhbCBudW1iZXIgb2YgcmVhZG91dCAqLworICBjaGFyIHNzcGFkZGluZzJbNF07ICAgICAgICAgICAgIC8qIFBhZGRpbmcgb2YgNCBieXRlcyAqLworICBsb25nIGRvdWJsZSBzc1RvdGFsOyAgICAgICAgICAgIC8qIFRvdGFsIGFtb3V0IG9mIGFsbCByZWFkb3V0cyAqLworICBjaGFyIHNzcGFkZGluZzNbNl07ICAgICAgICAgICAgIC8qIFBhZGRpbmcgb2YgNiBieXRlcyAqLworICBkb3VibGUgc3NBbGFybTE7ICAgICAgICAgICAgICAgIC8qIFRlbXAgJiBmYW46IGhpZ2ggYWxhcm07IHZvbHRhZ2U6ICUgb2ZmICovCisgIGRvdWJsZSBzc0FsYXJtMjsgICAgICAgICAgICAgICAgLyogVGVtcDogbG93IGFsYXJtICovCit9IFNoYXJlZFNlbnNvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2hvcnQgc2lTTUJfQmFzZTsgICAgICAgICAgICAgICAvKiBTTUJ1cyBiYXNlIGFkZHJlc3MgKi8KKyAgQnVzVHlwZSBzaVNNQl9UeXBlOyAgICAgICAgICAgICAvKiBTTUJ1cy9Jc2EgYnVzIHVzZWQgdG8gYWNjZXNzIGNoaXAgKi8KKyAgU01CVHlwZSBzaVNNQl9Db2RlOyAgICAgICAgICAgICAvKiBTTUJ1cyBzdWIgdHlwZSwgSW50ZWwsIEFNRCBvciBBTGkgKi8KKyAgY2hhciBzaVNNQl9BZGRyOyAgICAgICAgICAgICAgICAvKiBBZGRyZXNzIG9mIHNlbnNvciBjaGlwIG9uIFNNQnVzICovCisgIHVuc2lnbmVkIGNoYXIgc2lTTUJfTmFtZVs0MV07ICAgLyogTmljZSBuYW1lIGZvciBTTUJ1cyAqLworICBzaG9ydCBzaUlTQV9CYXNlOyAgICAgICAgICAgICAgIC8qIElTQSBiYXNlIGFkZHJlc3Mgb2Ygc2Vuc29yIGNoaXAgb24gSVNBICovCisgIGludCBzaUNoaXBUeXBlOyAgICAgICAgICAgICAgICAgLyogQ2hpcCBuciwgY29ubmVjdHMgd2l0aCBDaGlwaW5mby5pbmkgKi8KKyAgY2hhciBzaVZvbHRhZ2VTdWJUeXBlOyAgICAgICAgICAvKiBTdWJ2b2x0YWdlIG9wdGlvbiBzZWxlY3RlZCAqLworfSBTaGFyZWRJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICBkb3VibGUgc2RWZXJzaW9uOyAgICAgICAgICAgICAgIC8qIFZlcnNpb24gbnVtYmVyIChleGFtcGxlOiA1MTA5MCkgKi8KKyAgU2hhcmVkSW5kZXggc2RJbmRleFsxMF07ICAgICAgICAvKiBTZW5zb3IgaW5kZXggKi8KKyAgU2hhcmVkU2Vuc29yIHNkU2Vuc29yWzEwMF07ICAgICAvKiBTZW5zb3IgaW5mbyAqLworICBTaGFyZWRJbmZvIHNkSW5mbzsgICAgICAgICAgICAgIC8qIE1pc2MuaW5mbyAqLworICB1bnNpZ25lZCBjaGFyIHNkU3RhcnRbNDFdOyAgICAgIC8qIFN0YXJ0IHRpbWUgKi8KKworICAvKiBXZSBkb24ndCB1c2UgdGhlIG5leHQgdHdvIGZpZWxkcyBib3RoIGJlY2F1c2UgdGhleSdyZSBub3QgcmFuZG9tCisgICAgIGFuZCBiZWNhdXNlIGl0IHByb3ZpZGVzIGEgbmljZSBzYWZldHkgbWFyZ2luIGluIGNhc2Ugb2YgZGF0YSBzaXplCisgICAgIG1pcy0gZXN0aW1hdGVzICh3ZSBhbHdheXMgdW5kZXItZXN0aW1hdGUgdGhlIGJ1ZmZlciBzaXplKS4gICovCisjaWYgMAorICB1bnNpZ25lZCBjaGFyIHNkQ3VycmVudFs0MV07ICAgIC8qIEN1cnJlbnQgdGltZSAqLworICB1bnNpZ25lZCBjaGFyIHNkUGF0aFsyNTZdOyAgICAgIC8qIE1CTSBwYXRoICovCisjZW5kaWYgLyowKi8KK30gU2hhcmVkRGF0YTsKKworCisKKy8qIE9uZSB0aW1lIGludGlhbGl6ZWQgaGFuZGxlcyBhbmQgZnVuY3Rpb24gcG9pbnRlcnMuICBXZSB1c2UgZHluYW1pYworICAgbG9hZGluZyBvZiB0aGUgRExMcyB0byBkbyB3aXRob3V0IHRoZW0gaW4gY2FzZSBsaWJnY3J5cHQgZG9lcyBub3QKKyAgIG5lZWQgYW55IHJhbmRvbS4gICovCitzdGF0aWMgSEFORExFIGhOZXRBUEkzMjsKK3N0YXRpYyBORVRTVEFUSVNUSUNTR0VUIHBOZXRTdGF0aXN0aWNzR2V0Oworc3RhdGljIE5FVEFQSUJVRkZFUlNJWkUgcE5ldEFwaUJ1ZmZlclNpemU7CitzdGF0aWMgTkVUQVBJQlVGRkVSRlJFRSBwTmV0QXBpQnVmZmVyRnJlZTsKKworc3RhdGljIEhBTkRMRSBoTlRBUEk7CitzdGF0aWMgTlRRVUVSWVNZU1RFTUlORk9STUFUSU9OICBwTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uOworc3RhdGljIE5UUVVFUllJTkZPUk1BVElPTlBST0NFU1MgcE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3M7CitzdGF0aWMgTlRQT1dFUklORk9STUFUSU9OICAgICAgICBwTnRQb3dlckluZm9ybWF0aW9uOworCitzdGF0aWMgSEFORExFIGhBZHZBUEkzMjsKK3N0YXRpYyBDUllQVEFDUVVJUkVDT05URVhUIHBDcnlwdEFjcXVpcmVDb250ZXh0Oworc3RhdGljIENSWVBUR0VOUkFORE9NICAgICAgcENyeXB0R2VuUmFuZG9tOworc3RhdGljIENSWVBUUkVMRUFTRUNPTlRFWFQgcENyeXB0UmVsZWFzZUNvbnRleHQ7CitzdGF0aWMgUlRMR0VOUkFORE9NICAgICAgICBwUnRsR2VuUmFuZG9tOworCisKKy8qIE90aGVyIG1vZHVsZSBnbG9iYWwgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBpbnQgc3lzdGVtX3JuZ19hdmFpbGFibGU7IC8qIFdoZXRoZXIgYSBzeXN0ZW0gUk5HIGlzIGF2YWlsYWJsZS4gICovCitzdGF0aWMgSENSWVBUUFJPViBoUk5HUHJvdjsgICAgICAvKiBIYW5kbGUgdG8gSW50ZWwgUk5HIENTUC4gKi8KKworc3RhdGljIGludCBkZWJ1Z19tZTsgIC8qIERlYnVnIGZsYWcuICAqLworCitzdGF0aWMgaW50IHN5c3RlbV9pc193MjAwMDsgICAgIC8qIFRydWUgaWYgcnVubmluZyBvbiBXMjAwMC4gICovCisKKworCisMCisvKiBUcnkgYW5kIGNvbm5lY3QgdG8gdGhlIHN5c3RlbSBSTkcgaWYgdGhlcmUncyBvbmUgcHJlc2VudC4gKi8KK3N0YXRpYyB2b2lkCitpbml0X3N5c3RlbV9ybmcgKHZvaWQpCit7CisgIHN5c3RlbV9ybmdfYXZhaWxhYmxlID0gMDsKKyAgaFJOR1Byb3YgPSBOVUxMOworCisgIGhBZHZBUEkzMiA9IEdldE1vZHVsZUhhbmRsZSAoIkFkdkFQSTMyLmRsbCIpOworICBpZiAoIWhBZHZBUEkzMikKKyAgICByZXR1cm47CisKKyAgcENyeXB0QWNxdWlyZUNvbnRleHQgPSAoQ1JZUFRBQ1FVSVJFQ09OVEVYVCkKKyAgICBHZXRQcm9jQWRkcmVzcyAoaEFkdkFQSTMyLCAiQ3J5cHRBY3F1aXJlQ29udGV4dEEiKTsKKyAgcENyeXB0R2VuUmFuZG9tID0gKENSWVBUR0VOUkFORE9NKQorICAgIEdldFByb2NBZGRyZXNzIChoQWR2QVBJMzIsICJDcnlwdEdlblJhbmRvbSIpOworICBwQ3J5cHRSZWxlYXNlQ29udGV4dCA9IChDUllQVFJFTEVBU0VDT05URVhUKQorICAgIEdldFByb2NBZGRyZXNzIChoQWR2QVBJMzIsICJDcnlwdFJlbGVhc2VDb250ZXh0Iik7CisKKyAgLyogR2V0IGEgcG9pbnRlciB0byB0aGUgbmF0aXZlIHJhbmRvbW5lc3MgZnVuY3Rpb24gaWYgaXQncyBhdmFpbGFibGUuCisgICAgIFRoaXMgaXNuJ3QgZXhwb3J0ZWQgYnkgbmFtZSwgc28gd2UgaGF2ZSB0byBnZXQgaXQgYnkgb3JkaW5hbC4gICovCisgIHBSdGxHZW5SYW5kb20gPSAoUlRMR0VOUkFORE9NKQorICAgIEdldFByb2NBZGRyZXNzIChoQWR2QVBJMzIsICJTeXN0ZW1GdW5jdGlvbjAzNiIpOworCisgIC8qIFRyeSBhbmQgY29ubmVjdCB0byB0aGUgUElJSSBSTkcgQ1NQLiAgVGhlIEFNRCA3Njggc291dGhicmlkZ2UgKGZyb20KKyAgICAgdGhlIDc2MCBNUCBjaGlwc2V0KSBhbHNvIGhhcyBhIGhhcmR3YXJlIFJORywgYnV0IHRoZXJlIGRvZXNuJ3QgYXBwZWFyCisgICAgIHRvIGJlIGFueSBkcml2ZXIgc3VwcG9ydCBmb3IgdGhpcyBhcyB0aGVyZSBpcyBmb3IgdGhlIEludGVsIFJORyBzbyB3ZQorICAgICBjYW4ndCBkbyBtdWNoIHdpdGggaXQuICBPVE9IIHRoZSBJbnRlbCBSTkcgaXMgYWxzbyBlZmZlY3RpdmVseSBkZWFkCisgICAgIGFzIHdlbGwsIG1vc3RseSBkdWUgdG8gdmlydHVhbGx5IG5vbmV4aXN0ZW50IHN1cHBvcnQvbWFya2V0aW5nIGJ5CisgICAgIEludGVsLCBpdCdzIGluY2x1ZGVkIGhlcmUgbW9zdGx5IGZvciBmb3JtJ3Mgc2FrZS4gICovCisgIGlmICggKCFwQ3J5cHRBY3F1aXJlQ29udGV4dCB8fCAhcENyeXB0R2VuUmFuZG9tIHx8ICFwQ3J5cHRSZWxlYXNlQ29udGV4dAorICAgICAgICB8fCAhcENyeXB0QWNxdWlyZUNvbnRleHQgKCZoUk5HUHJvdiwgTlVMTCwgSU5URUxfREVGX1BST1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9JTlRFTF9TRUMsIDApICkKKyAgICAgICAmJiAhcFJ0bEdlblJhbmRvbSkKKyAgICB7CisgICAgICBoQWR2QVBJMzIgPSBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHN5c3RlbV9ybmdfYXZhaWxhYmxlID0gMTsKK30KKworCisvKiBSZWFkIGRhdGEgZnJvbSB0aGUgc3lzdGVtIFJORyBpZiBhdmFpbGF2bGUuICAqLworc3RhdGljIHZvaWQKK3JlYWRfc3lzdGVtX3JuZyAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgcmVxdWVzdGVyKQoreworICBCWVRFIGJ1ZmZlclsgU1lTVEVNUk5HX0JZVEVTICsgOCBdOworICBpbnQgcXVhbGl0eSA9IDA7CisKKyAgaWYgKCFzeXN0ZW1fcm5nX2F2YWlsYWJsZSkKKyAgICByZXR1cm47CisKKyAgLyogUmVhZCBTWVNURU1STkdfQllURVMgYnl0ZXMgZnJvbSB0aGUgc3lzdGVtIFJORy4gIFdlIGRvbid0IHJlbHkgb24KKyAgICAgdGhpcyBmb3IgYWxsIG91ciByYW5kb21uZXNzIHJlcXVpcmVtZW50cyAocGFydGljdWxhcmx5IHRoZQorICAgICBzb2Z0d2FyZSBSTkcpIGluIGNhc2UgaXQncyBicm9rZW4gaW4gc29tZSB3YXkuICAqLworICBpZiAoaFJOR1Byb3YpCisgICAgeworICAgICAgaWYgKHBDcnlwdEdlblJhbmRvbSAoaFJOR1Byb3YsIFNZU1RFTVJOR19CWVRFUywgYnVmZmVyKSkKKyAgICAgICAgcXVhbGl0eSA9IDgwOworICAgIH0KKyAgZWxzZSBpZiAocFJ0bEdlblJhbmRvbSkKKyAgICB7CisgICAgICBpZiAoIHBSdGxHZW5SYW5kb20gKGJ1ZmZlciwgU1lTVEVNUk5HX0JZVEVTKSkKKyAgICAgICAgcXVhbGl0eSA9IDUwOworICAgIH0KKyAgaWYgKHF1YWxpdHkgPiAwKQorICAgIHsKKyAgICAgIGlmIChkZWJ1Z19tZSkKKyAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyI3JlYWRfc3lzdGVtX3JuZzogZ290ICVkIGJ5dGVzIG9mIHF1YWxpdHkgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgU1lTVEVNUk5HX0JZVEVTLCBxdWFsaXR5KTsKKyAgICAgICgqYWRkKSAoYnVmZmVyLCBTWVNURU1STkdfQllURVMsIHJlcXVlc3Rlcik7CisgICAgICB3aXBlbWVtb3J5IChidWZmZXIsIFNZU1RFTVJOR19CWVRFUyk7CisgICAgfQorfQorCisKKy8qIFJlYWQgZGF0YSBmcm9tIE1CTS4gIFRoaXMgY29tbXVuaWNhdGVzIHZpYSBzaGFyZWQgbWVtb3J5LCBzbyBhbGwgd2UKKyAgIG5lZWQgdG8gZG8gaXMgbWFwIGEgZmlsZSBhbmQgcmVhZCB0aGUgZGF0YSBvdXQuICAqLworc3RhdGljIHZvaWQKK3JlYWRfbWJtX2RhdGEgKHZvaWQgKCphZGQpKGNvbnN0IHZvaWQqLCBzaXplX3QsIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyByZXF1ZXN0ZXIpCit7CisgIEhBTkRMRSBoTUJNRGF0YTsKKyAgU2hhcmVkRGF0YSAqbWJtRGF0YVB0cjsKKworICBoTUJNRGF0YSA9IE9wZW5GaWxlTWFwcGluZyAoRklMRV9NQVBfUkVBRCwgRkFMU0UsICIkTSRCJE0kNSRTJEQkIiApOworICBpZiAoaE1CTURhdGEpCisgICAgeworICAgICAgbWJtRGF0YVB0ciA9IChTaGFyZWREYXRhKilNYXBWaWV3T2ZGaWxlIChoTUJNRGF0YSwgRklMRV9NQVBfUkVBRCwwLDAsMCk7CisgICAgICBpZiAobWJtRGF0YVB0cikKKyAgICAgICAgeworICAgICAgICAgIGlmIChkZWJ1Z19tZSkKKyAgICAgICAgICAgIGxvZ19kZWJ1ZyAoInJuZHczMiNyZWFkX21ibV9kYXRhOiBnb3QgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mIChTaGFyZWREYXRhKSk7CisgICAgICAgICAgKCphZGQpIChtYm1EYXRhUHRyLCBzaXplb2YgKFNoYXJlZERhdGEpLCByZXF1ZXN0ZXIpOworICAgICAgICAgIFVubWFwVmlld09mRmlsZSAobWJtRGF0YVB0cik7CisgICAgICAgIH0KKyAgICAgIENsb3NlSGFuZGxlIChoTUJNRGF0YSk7CisgICAgfQorfQorCisKKy8qIEZhbGxiYWNrIG1ldGhvZCB1c2luZyB0aGUgcmVnaXN0cnkgdG8gcG9sbCB0aGUgc3RhdGlzdGljcy4gICovCitzdGF0aWMgdm9pZAorcmVnaXN0cnlfcG9sbCAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIHJlcXVlc3RlcikKK3sKKyAgc3RhdGljIGludCBjYlBlcmZEYXRhID0gUEVSRk9STUFOQ0VfQlVGRkVSX1NJWkU7CisgIGludCBpdGVyYXRpb25zOworICBEV09SRCBkd1NpemUsIHN0YXR1czsKKyAgUEVSRl9EQVRBX0JMT0NLICpwUGVyZkRhdGE7CisKKyAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIHN5c3RlbSBwZXJmb3JtYW5jZSBjb3VudGVycy4gIFRoaXMgY2FuIHRha2UgYQorICAgICBmZXcgc2Vjb25kcyB0byBkby4gIEluIHNvbWUgZW52aXJvbm1lbnRzIHRoZSBjYWxsIHRvIFJlZ1F1ZXJ5VmFsdWVFeCgpCisgICAgIGNhbiBwcm9kdWNlIGFuIGFjY2VzcyB2aW9sYXRpb24gYXQgc29tZSByYW5kb20gdGltZSBpbiB0aGUgZnV0dXJlLCBpbgorICAgICBzb21lIGNhc2VzIGFkZGluZyBhIHNob3J0IGRlbGF5IGFmdGVyIHRoZSBmb2xsb3dpbmcgY29kZSBibG9jayBtYWtlcworICAgICB0aGUgcHJvYmxlbSBnbyBhd2F5LiAgVGhpcyBwcm9ibGVtIGlzIGV4dHJlbWVseSBkaWZmaWN1bHQgdG8KKyAgICAgcmVwcm9kdWNlLCBJIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIGdldCBpdCB0byBvY2N1ciBkZXNwaXRlIHJ1bm5pbmcgaXQKKyAgICAgb24gYSBudW1iZXIgb2YgbWFjaGluZXMuICBNUyBrbm93bGVkZ2UgYmFzZSBhcnRpY2xlIFExNzg4ODcgY292ZXJzCisgICAgIHRoaXMgdHlwZSBvZiBwcm9ibGVtLCBpdCdzIHR5cGljYWxseSBjYXVzZWQgYnkgYW4gZXh0ZXJuYWwgZHJpdmVyIG9yCisgICAgIG90aGVyIHByb2dyYW0gdGhhdCBhZGRzIGl0cyBvd24gdmFsdWVzIHVuZGVyIHRoZQorICAgICBIS0VZX1BFUkZPUk1BTkNFX0RBVEEga2V5LiAgVGhlIE5UIGtlcm5lbCwgdmlhIEFkdmFwaTMyLmRsbCwgY2FsbHMgdGhlCisgICAgIHJlcXVpcmVkIGV4dGVybmFsIG1vZHVsZSB0byBtYXAgaW4gdGhlIGRhdGEgaW5zaWRlIGFuIFNFSCB0cnkvZXhjZXB0CisgICAgIGJsb2NrLCBzbyBwcm9ibGVtcyBpbiB0aGUgbW9kdWxlJ3MgY29sbGVjdCBmdW5jdGlvbiBkb24ndCBwb3AgdXAgdW50aWwKKyAgICAgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVkLCBzbyB0aGUgZmF1bHQgYXBwZWFycyB0byBvY2N1ciBpbiBBZHZhcGkzMi5kbGwuCisgICAgIFRoZXJlIG1heSBiZSBwcm9ibGVtcyBpbiB0aGUgTlQga2VybmVsIGFzIHdlbGwgdGhvdWdoLCBhIGxvdy1sZXZlbAorICAgICBtZW1vcnkgY2hlY2tlciBpbmRpY2F0ZWQgdGhhdCBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoKSBpbgorICAgICBLZXJuZWwzMi5kbGwsIGNhbGxlZCBhbiBpbnRlcm1pbmFibGUgbnVtYmVyIG9mIGNhbGxzIGRvd24gaW5zaWRlCisgICAgIFJlZ1F1ZXJ5VmFsdWVFeCgpLCB3YXMgb3ZlcndyaXRpbmcgbWVtb3J5IChpdCB3cm90ZSB0d2ljZSB0aGUKKyAgICAgYWxsb2NhdGVkIHNpemUgb2YgYSBidWZmZXIgdG8gYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBOVCBrZXJuZWwpLgorICAgICBPVE9IIHRoaXMgY291bGQgYmUgY29taW5nIGZyb20gdGhlIGV4dGVybmFsIG1vZHVsZSBjYWxsaW5nIGJhY2sgaW50bworICAgICB0aGUga2VybmVsLCB3aGljaCBldmVudHVhbGx5IGNhdXNlcyB0aGUgcHJvYmxlbSBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAgUG9zc2libHkgYXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBwcm9ibGVtIHRoYXQgdGhlIGtybmxXYWl0U2VtYXBob3JlKCkKKyAgICAgY2FsbCBhYm92ZSB3b3JrcyBhcm91bmQsIHJ1bm5pbmcgdHdvIGluc3RhbmNlcyBvZiBjcnlwdGxpYiAoZS5nLiB0d28KKyAgICAgYXBwbGljYXRpb25zIHRoYXQgdXNlIGl0KSB1bmRlciBOVDQgY2FuIHJlc3VsdCBpbiBvbmUgb2YgdGhlbSBoYW5naW5nCisgICAgIGluIHRoZSBSZWdRdWVyeVZhbHVlRXgoKSBjYWxsLiAgVGhpcyBoYXBwZW5zIG9ubHkgdW5kZXIgTlQ0IGFuZCBpcworICAgICBoYXJkIHRvIHJlcHJvZHVjZSBpbiBhbnkgY29uc2lzdGVudCBtYW5uZXIuCisKKyAgICAgT25lIHdvcmthcm91bmQgdGhhdCBoZWxwcyBhIGJpdCBpcyB0byByZWFkIHRoZSByZWdpc3RyeSBhcyBhIHJlbW90ZQorICAgICAocmF0aGVyIHRoYW4gbG9jYWwpIHJlZ2lzdHJ5LCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZSBvZiBhIG5ldHdvcmsKKyAgICAgUlBDIGNhbGwgaXNvbGF0ZXMgdGhlIGNhbGxpbmcgYXBwIGZyb20gdGhlIHByb2JsZW0gaW4gdGhhdCB3aGF0ZXZlcgorICAgICBzZXJ2aWNlIGhhbmRsZXMgdGhlIFJQQyBpcyB0YWtpbmcgdGhlIGhpdCBhbmQgbm90IGFmZmVjdGluZyB0aGUKKyAgICAgY2FsbGluZyBhcHAuICBTaW5jZSB0aGlzIHdvdWxkIHJlcXVpcmUgYW5vdGhlciByb3VuZCBvZiBleHRlbnNpdmUKKyAgICAgdGVzdGluZyB0byB2ZXJpZnkgYW5kIHRoZSBOVCBuYXRpdmUgQVBJIGNhbGwgaXMgd29ya2luZyBmaW5lLCB3ZSdsbAorICAgICBzdGljayB3aXRoIHRoZSBuYXRpdmUgQVBJIGNhbGwgZm9yIG5vdy4KKworICAgICBTb21lIHZlcnNpb25zIG9mIE5UNCBoYWQgYSBwcm9ibGVtIHdoZXJlIHRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZAorICAgICB3YXMgbWlzLXJlcG9ydGVkIGFuZCB3b3VsZCBuZXZlciBzZXR0bGUgZG93biwgYmVjYXVzZSBvZiB0aGlzIHRoZSBjb2RlCisgICAgIGJlbG93IGluY2x1ZGVzIGEgc2FmZXR5LWNhdGNoIHRoYXQgYmFpbHMgb3V0IGFmdGVyIDEwIGF0dGVtcHRzIGhhdmUKKyAgICAgYmVlbiBtYWRlLCB0aGlzIHJlc3VsdHMgaW4gbm8gZGF0YSBiZWluZyByZXR1cm5lZCBidXQgYXQgZG9lcyBlbnN1cmUKKyAgICAgdGhhdCB0aGUgdGhyZWFkIHdpbGwgdGVybWluYXRlLgorCisgICAgIEluIGFkZGl0aW9uIHRvIHRoZXNlIHByb2JsZW1zIHRoZSBjb2RlIGluIFJlZ1F1ZXJ5VmFsdWVFeCgpIHRoYXQKKyAgICAgZXN0aW1hdGVzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIHRvIHJldHVybiB0aGUgcGVyZm9ybWFuY2UKKyAgICAgY291bnRlciBpbmZvcm1hdGlvbiBpc24ndCB2ZXJ5IGFjY3VyYXRlIChpdCdzIG11Y2ggd29yc2UgdGhhbiB0aGUKKyAgICAgInNsaWdodGx5LWluYWNjdXJhdGUiIGxldmVsIHRoYXQgdGhlIE1TIGRvY3Mgd2FybiBhYm91dCwgaXQncyB1c3VhbGx5CisgICAgIHdpbGRseSBvZmYpIHNpbmNlIGl0IGFsd2F5cyByZXR1cm5zIGEgd29yc3QtY2FzZSBlc3RpbWF0ZSB3aGljaCBpcworICAgICB1c3VhbGx5IG5vd2hlcmUgbmVhciB0aGUgYWN0dWFsIGFtb3VudCByZXF1aXJlZC4gIEZvciBleGFtcGxlIGl0IG1heQorICAgICByZXBvcnQgdGhhdCAxMjhLIG9mIG1lbW9yeSBpcyByZXF1aXJlZCwgYnV0IG9ubHkgcmV0dXJuIDY0SyBvZiBkYXRhLgorCisgICAgIEV2ZW4gd29yc2UgdGhhbiB0aGUgcmVnaXN0cnktYmFzZWQgcGVyZm9ybWFuY2UgY291bnRlcnMgaXMgdGhlCisgICAgIHBlcmZvcm1hbmNlIGRhdGEgaGVscGVyIChQREgpIHNoaW0gdGhhdCB0cmllcyB0byBtYWtlIHRoZSBjb3VudGVycworICAgICBsb29rIGxpa2UgdGhlIG9sZCBXaW4xNiBBUEkgKHdoaWNoIGlzIGFsc28gdXNlZCBieSBXaW45NSkuICBVbmRlciBOVAorICAgICB0aGlzIGNhbiBjb25zdW1lIHRlbnMgb2YgTUIgb2YgbWVtb3J5IGFuZCBodWdlIGFtb3VudHMgb2YgQ1BVIHRpbWUKKyAgICAgd2hpbGUgaXQgZ2F0aGVycyBpdHMgZGF0YSwgYW5kIGV2ZW4gcnVubmluZyBvbmNlIGNhbiBzdGlsbCBjb25zdW1lCisgICAgIGFib3V0IDEvMk1CIG9mIG1lbW9yeSAqLworICBpZiAoZ2V0ZW52ICgiR05VUEdfUk5EVzMyX05PUEVSRiIpKQorICAgIHsKKyAgICAgIHN0YXRpYyBpbnQgc2hvd247CisKKyAgICAgIGlmICghc2hvd24pCisgICAgICAgIHsKKyAgICAgICAgICBzaG93biA9IDE7CisgICAgICAgICAgbG9nX2luZm8gKCJub3RlOiBnZXQgcGVyZm9ybWFuY2UgZGF0YSBoYXMgYmVlbiBkaXNhYmxlZFxuIik7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwUGVyZkRhdGEgPSB4bWFsbG9jIChjYlBlcmZEYXRhKTsKKyAgICAgIGZvciAoaXRlcmF0aW9ucz0wOyBpdGVyYXRpb25zIDwgMTA7IGl0ZXJhdGlvbnMrKykKKyAgICAgICAgeworICAgICAgICAgIGR3U2l6ZSA9IGNiUGVyZkRhdGE7CisgICAgICAgICAgaWYgKCBkZWJ1Z19tZSApCisgICAgICAgICAgICBsb2dfZGVidWcgKCJybmR3MzIjc2xvd19nYXRoZXJlcl9udDogZ2V0IHBlcmYgZGF0YVxuIiApOworCisgICAgICAgICAgc3RhdHVzID0gUmVnUXVlcnlWYWx1ZUV4IChIS0VZX1BFUkZPUk1BTkNFX0RBVEEsICJHbG9iYWwiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKExQQllURSkgcFBlcmZEYXRhLCAmZHdTaXplKTsKKyAgICAgICAgICBpZiAoc3RhdHVzID09IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghbWVtY21wIChwUGVyZkRhdGEtPlNpZ25hdHVyZSwgTCJQRVJGIiwgOCkpCisgICAgICAgICAgICAgICAgKCphZGQpICggcFBlcmZEYXRhLCBkd1NpemUsIHJlcXVlc3RlciApOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyOiBubyBQRVJGIHNpZ25hdHVyZVxuIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBFUlJPUl9NT1JFX0RBVEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNiUGVyZkRhdGEgKz0gUEVSRk9STUFOQ0VfQlVGRkVSX1NURVA7CisgICAgICAgICAgICAgIHBQZXJmRGF0YSA9IHhyZWFsbG9jIChwUGVyZkRhdGEsIGNiUGVyZkRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGludCBiZWVuX2hlcmU7CisKKyAgICAgICAgICAgICAgLyogU2lsZW5jZSB0aGUgZXJyb3IgbWVzc2FnZS4gIEluIHBhcnRpY3VsYXIgdW5kZXIgV2luZSAoYXMKKyAgICAgICAgICAgICAgICAgb2YgMjAwOCkgd2Ugd291bGQgZ2V0IHN3YW1wZWQgd2l0aCBzdWNoIGRpYWdub3Rpc2NzLiAgT25lCisgICAgICAgICAgICAgICAgIHN1Y2ggZGlhZ25vdGlzY3Mgc2hvdWxkIGJlIGVub3VnaC4gICovCisgICAgICAgICAgICAgIGlmIChiZWVuX2hlcmUgIT0gc3RhdHVzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGJlZW5faGVyZSA9IHN0YXR1czsKKyAgICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZyAoInJuZHczMjogZ2V0IHBlcmZvcm1hbmNlIGRhdGEgcHJvYmxlbTogZWM9JWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHhmcmVlIChwUGVyZkRhdGEpOworICAgIH0KKworICAvKiBBbHRob3VnaCB0aGlzIGlzbid0IGRvY3VtZW50ZWQgaW4gdGhlIFdpbjMyIEFQSSBkb2NzLCBpdCdzIG5lY2Vzc2FyeQorICAgICB0byBleHBsaWNpdGx5IGNsb3NlIHRoZSBIS0VZX1BFUkZPUk1BTkNFX0RBVEEga2V5IGFmdGVyIHVzZSAoaXQncworICAgICBpbXBsaWNpdGx5IG9wZW5lZCBvbiB0aGUgZmlyc3QgY2FsbCB0byBSZWdRdWVyeVZhbHVlRXgoKSkuICBJZiB0aGlzCisgICAgIGlzbid0IGRvbmUgdGhlbiBhbnkgc3lzdGVtIGNvbXBvbmVudHMgd2hpY2ggcHJvdmlkZSBwZXJmb3JtYW5jZSBkYXRhCisgICAgIGNhbid0IGJlIHJlbW92ZWQgb3IgY2hhbmdlZCB3aGlsZSB0aGUgaGFuZGxlIHJlbWFpbnMgYWN0aXZlLiAgKi8KKyAgUmVnQ2xvc2VLZXkgKEhLRVlfUEVSRk9STUFOQ0VfREFUQSk7Cit9CisKKworc3RhdGljIHZvaWQKK3Nsb3dfZ2F0aGVyZXIgKCB2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LCBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIHJlcXVlc3RlciApCit7CisgIHN0YXRpYyBpbnQgaXNfaW5pdGlhbGl6ZWQgPSAwOworICBzdGF0aWMgaW50IGlzX3dvcmtzdGF0aW9uID0gMTsKKyAgSEFORExFIGhEZXZpY2U7CisgIERXT1JEIGR3VHlwZSwgZHdTaXplLCBkd1Jlc3VsdDsKKyAgVUxPTkcgdWxTaXplOworICBpbnQgZHJpdmVfbm8sIHN0YXR1czsKKyAgaW50IG5vX3Jlc3VsdHMgPSAwOworICB2b2lkICpidWZmZXI7CisKKyAgaWYgKCAhaXNfaW5pdGlhbGl6ZWQgKQorICAgIHsKKyAgICAgIEhLRVkgaEtleTsKKworICAgICAgaWYgKCBkZWJ1Z19tZSApCisgICAgICAgIGxvZ19kZWJ1ZyAoInJuZHczMiNzbG93X2dhdGhlcmVyOiBpbml0IHRvb2xraXRcbiIgKTsKKyAgICAgIC8qIEZpbmQgb3V0IHdoZXRoZXIgdGhpcyBpcyBhbiBOVCBzZXJ2ZXIgb3Igd29ya3N0YXRpb24gaWYgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoUmVnT3BlbktleUV4IChIS0VZX0xPQ0FMX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiU1lTVEVNXFxDdXJyZW50Q29udHJvbFNldFxcQ29udHJvbFxcUHJvZHVjdE9wdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgS0VZX1JFQUQsICZoS2V5KSA9PSBFUlJPUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgQllURSBzelZhbHVlWzMyICsgOF07CisgICAgICAgICAgZHdTaXplID0gMzI7CisKKyAgICAgICAgICBpZiAoIGRlYnVnX21lICkKKyAgICAgICAgICAgIGxvZ19kZWJ1ZyAoInJuZHczMiNzbG93X2dhdGhlcmVyOiBjaGVjayBwcm9kdWN0IG9wdGlvbnNcbiIgKTsKKworICAgICAgICAgIHN0YXR1cyA9IFJlZ1F1ZXJ5VmFsdWVFeCAoaEtleSwgIlByb2R1Y3RUeXBlIiwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VmFsdWUsICZkd1NpemUpOworICAgICAgICAgIGlmIChzdGF0dXMgPT0gRVJST1JfU1VDQ0VTUyAmJiBzdHJpY21wIChzelZhbHVlLCAiV2luTlQiKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogTm90ZTogVGhlcmUgYXJlIChhdCBsZWFzdCkgdGhyZWUgY2FzZXMgZm9yIFByb2R1Y3RUeXBlOgorICAgICAgICAgICAgICAgICBXaW5OVCA9IE5UIFdvcmtzdGF0aW9uLCBTZXJ2ZXJOVCA9IE5UIFNlcnZlciwgTGFubWFuTlQgPQorICAgICAgICAgICAgICAgICBOVCBTZXJ2ZXIgYWN0aW5nIGFzIGEgRG9tYWluIENvbnRyb2xsZXIuICAqLworICAgICAgICAgICAgICBpc193b3Jrc3RhdGlvbiA9IDA7CisgICAgICAgICAgICAgIGlmICggZGVidWdfbWUgKQorICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZyAoInJuZHczMjogdGhpcyBpcyBhIE5UIHNlcnZlclxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgUmVnQ2xvc2VLZXkgKGhLZXkpOworICAgICAgICB9CisKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIGZpeGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3Mgc28gd2UKKyAgICAgICAgIG9ubHkgYWRkIHRoZW0gb25jZSAqLworICAgICAgLyogcmVhZFBuUERhdGEgKCk7ICAtIHdlIGhhdmUgbm90IGltcGxlbWVudGVkIHRoYXQuICAqLworCisgICAgICAvKiBJbml0aWFsaXplIHRoZSBOZXRBUEkzMiBmdW5jdGlvbiBwb2ludGVycyBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGhOZXRBUEkzMiA9IExvYWRMaWJyYXJ5ICgiTkVUQVBJMzIuRExMIik7CisgICAgICBpZiAoaE5ldEFQSTMyKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGRlYnVnX21lKQorICAgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyI3Nsb3dfZ2F0aGVyZXI6IG5ldGFwaTMyIGxvYWRlZFxuIiApOworICAgICAgICAgIHBOZXRTdGF0aXN0aWNzR2V0ID0gKE5FVFNUQVRJU1RJQ1NHRVQpCisgICAgICAgICAgICBHZXRQcm9jQWRkcmVzcyAoaE5ldEFQSTMyLCAiTmV0U3RhdGlzdGljc0dldCIpOworICAgICAgICAgIHBOZXRBcGlCdWZmZXJTaXplID0gKE5FVEFQSUJVRkZFUlNJWkUpCisgICAgICAgICAgICBHZXRQcm9jQWRkcmVzcyAoaE5ldEFQSTMyLCAiTmV0QXBpQnVmZmVyU2l6ZSIpOworICAgICAgICAgIHBOZXRBcGlCdWZmZXJGcmVlID0gKE5FVEFQSUJVRkZFUkZSRUUpCisgICAgICAgICAgICBHZXRQcm9jQWRkcmVzcyAoaE5ldEFQSTMyLCAiTmV0QXBpQnVmZmVyRnJlZSIpOworCisgICAgICAgICAgaWYgKCFwTmV0U3RhdGlzdGljc0dldCB8fCAhcE5ldEFwaUJ1ZmZlclNpemUgfHwgIXBOZXRBcGlCdWZmZXJGcmVlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGcmVlTGlicmFyeSAoaE5ldEFQSTMyKTsKKyAgICAgICAgICAgICAgaE5ldEFQSTMyID0gTlVMTDsKKyAgICAgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyOiBObyBORVRBUEkgZm91bmRcbiIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBJbml0aWFsaXplIHRoZSBOVCBrZXJuZWwgbmF0aXZlIEFQSSBmdW5jdGlvbiBwb2ludGVycyBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGhOVEFQSSA9IEdldE1vZHVsZUhhbmRsZSAoIk5URGxsLmRsbCIpOworICAgICAgaWYgKGhOVEFQSSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIE5UIG5hdGl2ZSBpbmZvcm1hdGlvbiBxdWVyeSBmdW5jdGlvbnMgKi8KKyAgICAgICAgICBwTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uID0gKE5UUVVFUllTWVNURU1JTkZPUk1BVElPTikKKyAgICAgICAgICAgIEdldFByb2NBZGRyZXNzIChoTlRBUEksICJOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24iKTsKKyAgICAgICAgICBwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyA9IChOVFFVRVJZSU5GT1JNQVRJT05QUk9DRVNTKQorICAgICAgICAgICAgR2V0UHJvY0FkZHJlc3MgKGhOVEFQSSwgIk50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MiKTsKKyAgICAgICAgICBwTnRQb3dlckluZm9ybWF0aW9uID0gKE5UUE9XRVJJTkZPUk1BVElPTikKKyAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGhOVEFQSSwgIk50UG93ZXJJbmZvcm1hdGlvbiIpOworCisgICAgICAgICAgaWYgKCFwTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uIHx8ICFwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcykKKyAgICAgICAgICAgIGhOVEFQSSA9IE5VTEw7CisgICAgICAgIH0KKworCisgICAgICBpc19pbml0aWFsaXplZCA9IDE7CisgICAgfQorCisgIHJlYWRfc3lzdGVtX3JuZyAoIGFkZCwgcmVxdWVzdGVyICk7CisgIHJlYWRfbWJtX2RhdGEgKCBhZGQsIHJlcXVlc3RlciApOworCisgIC8qIEdldCBuZXR3b3JrIHN0YXRpc3RpY3MuICAgIE5vdGU6IEJvdGggTlQgV29ya3N0YXRpb24gYW5kIE5UIFNlcnZlciBieQorICAgICBkZWZhdWx0IHdpbGwgYmUgcnVubmluZyBib3RoIHRoZSB3b3Jrc3RhdGlvbiBhbmQgc2VydmVyIHNlcnZpY2VzLiAgVGhlCisgICAgIGhldXJpc3RpYyBiZWxvdyBpcyBwcm9iYWJseSB1c2VmdWwgdGhvdWdoIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlCisgICAgIG1ham9yaXR5IG9mIHRoZSBuZXR3b3JrIHRyYWZmaWMgd2lsbCBiZSB2aWEgdGhlIGFwcHJvcHJpYXRlIHNlcnZpY2UuCisgICAgIEluIGFueSBjYXNlIHRoZSBuZXR3b3JrIHN0YXRpc3RpY3MgcmV0dXJuIGFsbW9zdCBubyByYW5kb21uZXNzLiAgKi8KKyAgeworICAgIExQQllURSBscEJ1ZmZlcjsKKworICAgIGlmIChoTmV0QVBJMzIKKyAgICAgICAgJiYgIXBOZXRTdGF0aXN0aWNzR2V0IChOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3dvcmtzdGF0aW9uID8gTCJMYW5tYW5Xb3Jrc3RhdGlvbiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwiTGFubWFuU2VydmVyIiwgMCwgMCwgJmxwQnVmZmVyKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkZWJ1Z19tZSApCisgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyI3Nsb3dfZ2F0aGVyZXI6IGdldCBuZXRzdGF0c1xuIiApOworICAgICAgICBwTmV0QXBpQnVmZmVyU2l6ZSAobHBCdWZmZXIsICZkd1NpemUpOworICAgICAgICAoKmFkZCkgKCBscEJ1ZmZlciwgZHdTaXplLCByZXF1ZXN0ZXIgKTsKKyAgICAgICAgcE5ldEFwaUJ1ZmZlckZyZWUgKGxwQnVmZmVyKTsKKyAgICAgIH0KKyAgfQorCisgIC8qIEdldCBkaXNrIEkvTyBzdGF0aXN0aWNzIGZvciBhbGwgdGhlIGhhcmQgZHJpdmVzLiAgMTAwIGlzIGFuCisgICAgIGFyYml0cmFyeSBmYWlsc2FmZSBsaW1pdC4gICovCisgIGZvciAoZHJpdmVfbm8gPSAwOyBkcml2ZV9ubyA8IDEwMCA7IGRyaXZlX25vKyspCisgICAgeworICAgICAgY2hhciBkaXNrUGVyZm9ybWFuY2VbU0laRU9GX0RJU0tfUEVSRk9STUFOQ0VfU1RSVUNUICsgOF07CisgICAgICBjaGFyIHN6RGV2aWNlWzUwXTsKKworICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBjYW4gYWNjZXNzIHRoaXMgZGV2aWNlLiAgKi8KKyAgICAgIHNucHJpbnRmIChzekRldmljZSwgc2l6ZW9mIHN6RGV2aWNlLCAiXFxcXC5cXFBoeXNpY2FsRHJpdmUlZCIsCisgICAgICAgICAgICAgICAgZHJpdmVfbm8pOworICAgICAgaERldmljZSA9IENyZWF0ZUZpbGUgKHN6RGV2aWNlLCAwLCBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworICAgICAgaWYgKGhEZXZpY2UgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIGJyZWFrOyAvKiBObyBtb3JlIGRyaXZlcy4gICovCisKKyAgICAgIC8qIE5vdGU6IFRoaXMgb25seSB3b3JrcyBpZiB5b3UgaGF2ZSB0dXJuZWQgb24gdGhlIGRpc2sgcGVyZm9ybWFuY2UKKyAgICAgICAgIGNvdW50ZXJzIHdpdGggJ2Rpc2twZXJmIC15Jy4gIFRoZXNlIGNvdW50ZXJzIGFyZSBvZmYgYnkgZGVmYXVsdC4gKi8KKyAgICAgIGR3U2l6ZSA9IHNpemVvZiBkaXNrUGVyZm9ybWFuY2U7CisgICAgICBpZiAoRGV2aWNlSW9Db250cm9sIChoRGV2aWNlLCBJT0NUTF9ESVNLX1BFUkZPUk1BTkNFLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1BlcmZvcm1hbmNlLCBTSVpFT0ZfRElTS19QRVJGT1JNQU5DRV9TVFJVQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHdTaXplLCBOVUxMKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICggZGVidWdfbWUgKQorICAgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyI3Nsb3dfZ2F0aGVyZXI6IGlvc3RhdCBkcml2ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVfbm8pOworICAgICAgICAgICgqYWRkKSAoZGlza1BlcmZvcm1hbmNlLCBkd1NpemUsIHJlcXVlc3Rlcik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGxvZ19pbmZvICgiTk9URTogeW91IHNob3VsZCBydW4gJ2Rpc2twZXJmIC15JyAiCisgICAgICAgICAgICAgICAgICAgICJ0byBlbmFibGUgdGhlIGRpc2sgc3RhdGlzdGljc1xuIik7CisgICAgICAgIH0KKyAgICAgIENsb3NlSGFuZGxlIChoRGV2aWNlKTsKKyAgICB9CisKKyAgLyogSW4gdGhlb3J5IHdlIHNob3VsZCBiZSB1c2luZyB0aGUgV2luMzIgcGVyZm9ybWFuY2UgcXVlcnkgQVBJIHRvIG9idGFpbgorICAgICB1bnByZWRpY3RhYmxlIGRhdGEgZnJvbSB0aGUgc3lzdGVtLCBob3dldmVyIHRoaXMgaXMgc28gdW5yZWxpYWJsZSAoc2VlCisgICAgIHRoZSBtdWx0aXBsZSBzZXRzIG9mIGNvbW1lbnRzIGluIHJlZ2lzdHJ5UG9sbCgpKSB0aGF0IGl0J3MgdG9vIHJpc2t5CisgICAgIHRvIHJlbHkgb24gaXQgZXhjZXB0IGFzIGEgZmFsbGJhY2sgaW4gZW1lcmdlbmNpZXMuICBJbnN0ZWFkLCB3ZSByZWx5CisgICAgIG1vc3RseSBvbiB0aGUgTlQgbmF0aXZlIEFQSSBmdW5jdGlvbiBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24oKSwgd2hpY2gKKyAgICAgaGFzIHRoZSBkdWFsIGFkdmFudGFnZXMgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYXMgbWFueSAoa25vd24pIHByb2JsZW1zCisgICAgIGFzIHRoZSBXaW4zMiBlcXVpdmFsZW50IGFuZCB0aGF0IGl0IGRvZXNuJ3QgYWNjZXNzIHRoZSBkYXRhIGluZGlyZWN0bHkKKyAgICAgdmlhIHBzZXVkby1yZWdpc3RyeSBrZXlzLCB3aGljaCBtZWFucyB0aGF0IGl0J3MgbXVjaCBmYXN0ZXIuICBOb3RlCisgICAgIHRoYXQgdGhlIFdpbjMyIGVxdWl2YWxlbnQgYWN0dWFsbHkgd29ya3MgYWxtb3N0IGFsbCBvZiB0aGUgdGltZSwgdGhlCisgICAgIHByb2JsZW0gaXMgdGhhdCBvbiBvbmUgb3IgdHdvIHN5c3RlbXMgaXQgY2FuIGZhaWwgaW4gc3RyYW5nZSB3YXlzIHRoYXQKKyAgICAgYXJlIG5ldmVyIHRoZSBzYW1lIGFuZCBjYW4ndCBiZSByZXByb2R1Y2VkIG9uIGFueSBvdGhlciBzeXN0ZW0sIHdoaWNoCisgICAgIGlzIHdoeSB3ZSB1c2UgdGhlIG5hdGl2ZSBBUEkgaGVyZS4gIE1pY3Jvc29mdCBvZmZpY2lhbGx5IGRvY3VtZW50ZWQKKyAgICAgdGhpcyBmdW5jdGlvbiBpbiBlYXJseSAyMDAzLCBzbyBpdCdsbCBiZSBmYWlybHkgc2FmZSB0byB1c2UuICAqLworICBpZiAoICFoTlRBUEkgKQorICAgIHsKKyAgICAgIHJlZ2lzdHJ5X3BvbGwgKGFkZCwgcmVxdWVzdGVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKworICAvKiBTY2FuIHRoZSBmaXJzdCA2NCBwb3NzaWJsZSBpbmZvcm1hdGlvbiB0eXBlcyAod2UgZG9uJ3QgYm90aGVyIHdpdGgKKyAgICAgaW5jcmVhc2luZyB0aGUgYnVmZmVyIHNpemUgYXMgd2UgZG8gd2l0aCB0aGUgV2luMzIgdmVyc2lvbiBvZiB0aGUKKyAgICAgcGVyZm9ybWFuY2UgZGF0YSByZWFkLCB3ZSBtYXkgbWlzcyBhIGZldyBjbGFzc2VzIGJ1dCBpdCdzIG5vIGJpZyBkZWFsKS4KKyAgICAgVGhpcyBzY2FuIHR5cGljYWxseSB5aWVsZHMgYXJvdW5kIDIwIHBpZWNlcyBvZiBkYXRhLCB0aGVyZSdzIG5vdGhpbmcKKyAgICAgaW4gdGhlIHJhbmdlIDY1Li4uMTI4IHNvIGNoYW5jZXMgYXJlIHRoZXJlIHdvbid0IGJlIGFueXRoaW5nIGFib3ZlCisgICAgIHRoZXJlIGVpdGhlci4gICovCisgIGJ1ZmZlciA9IHhtYWxsb2MgKFBFUkZPUk1BTkNFX0JVRkZFUl9TSVpFKTsKKyAgZm9yIChkd1R5cGUgPSAwOyBkd1R5cGUgPCA2NDsgZHdUeXBlKyspCisgICAgeworICAgICAgc3dpdGNoIChkd1R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBJRCAxNyA9IFN5c3RlbU9iamVjdEluZm9ybWF0aW9uIGhhbmdzIG9uIHNvbWUgd2luMmsgc3lzdGVtcy4gICovCisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgaWYgKHN5c3RlbV9pc193MjAwMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogU29tZSBpbmZvcm1hdGlvbiB0eXBlcyBhcmUgd3JpdGUtb25seSAodGhlIElEcyBhcmUgc2hhcmVkIHdpdGgKKyAgICAgICAgICAgICBhIHNldC1pbmZvcm1hdGlvbiBjYWxsKSwgd2Ugc2tpcCB0aGVzZS4gICovCisgICAgICAgIGNhc2UgMjY6IGNhc2UgMjc6IGNhc2UgMzg6IGNhc2UgNDY6IGNhc2UgNDc6IGNhc2UgNDg6IGNhc2UgNTI6CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAvKiBJRCA1MyA9IFN5c3RlbVNlc3Npb25Qcm9jZXNzSW5mb3JtYXRpb24gcmVhZHMgaW5wdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCB3aGljaCBoYXMgdG8gY29udGFpbiBhIHNlc3Npb24gSUQgYW5kIHBvaW50ZXIKKyAgICAgICAgICAgICB0byB0aGUgYWN0dWFsIGJ1ZmZlciBpbiB3aGljaCB0byBzdG9yZSB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICBCZWNhdXNlIHRoaXMgaXNuJ3QgYSBzdGFuZGFyZCBxdWVyeSwgd2Ugc2tpcCB0aGlzLiAgKi8KKyAgICAgICAgY2FzZSAgNTM6CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgLyogUXVlcnkgdGhlIGluZm8gZm9yIHRoaXMgSUQuICBTb21lIHJlc3VsdHMgKGZvciBleGFtcGxlIGZvcgorICAgICAgICAgSUQgPSA2LCBTeXN0ZW1DYWxsQ291bnRzKSBhcmUgb25seSBhdmFpbGFibGUgaW4gY2hlY2tlZCBidWlsZHMKKyAgICAgICAgIG9mIHRoZSBrZXJuZWwuICBBIHNtYWxsZXIgc3ViY2xlc3Mgb2YgcmVzdWx0cyByZXF1aXJlIHRoYXQKKyAgICAgICAgIGNlcnRhaW4gc3lzdGVtIGNvbmZpZyBmbGFncyBiZSBzZXQsIGZvciBleGFtcGxlCisgICAgICAgICBTeXN0ZW1PYmplY3RJbmZvcm1hdGlvbiByZXF1aXJlcyB0aGF0IHRoZQorICAgICAgICAgRkxHX01BSU5UQUlOX09CSkVDVF9UWVBFTElTVCBiZSBzZXQgaW4gTnRHbG9iYWxGbGFncy4gIFRvIGF2b2lkCisgICAgICAgICBoYXZpbmcgdG8gc3BlY2lhbC1jYXNlIGFsbCBvZiB0aGVzZSwgd2UgdHJ5IHJlYWRpbmcgZWFjaCBvbmUgYW5kCisgICAgICAgICBvbmx5IHVzZSB0aG9zZSBmb3Igd2hpY2ggd2UgZ2V0IGEgc3VjY2VzcyBzdGF0dXMuICAqLworICAgICAgZHdSZXN1bHQgPSBwTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uIChkd1R5cGUsIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVSRk9STUFOQ0VfQlVGRkVSX1NJWkUgLSAyMDQ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWxTaXplKTsKKyAgICAgIGlmIChkd1Jlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogU29tZSBjYWxscyAoZS5nLiBJRCA9IDIzLCBTeXN0ZW1Qcm9jZXNzb3JTdGF0aXN0aWNzLCBhbmQgSUQgPSAyNCwKKyAgICAgICAgIFN5c3RlbURwY0luZm9ybWF0aW9uKSBpbmNvcnJlY3RseSByZXR1cm4gYSBsZW5ndGggb2YgemVybywgc28gd2UKKyAgICAgICAgIG1hbnVhbGx5IGFkanVzdCB0aGUgbGVuZ3RoIHRvIHRoZSBjb3JyZWN0IHZhbHVlLiAgKi8KKyAgICAgIGlmICggIXVsU2l6ZSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZHdUeXBlID09IDIzKQorICAgICAgICAgICAgdWxTaXplID0gNiAqIHNpemVvZiAoVUxPTkcpOworICAgICAgICAgIGVsc2UgaWYgKGR3VHlwZSA9PSAyNCkKKyAgICAgICAgICAgIHVsU2l6ZSA9IDUgKiBzaXplb2YgKFVMT05HKTsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB3ZSBnb3Qgc29tZSBkYXRhIGJhY2ssIGFkZCBpdCB0byB0aGUgZW50cm9weSBwb29sLiAgKi8KKyAgICAgIGlmICh1bFNpemUgPiAwICYmIHVsU2l6ZSA8PSBQRVJGT1JNQU5DRV9CVUZGRVJfU0laRSAtIDIwNDgpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZGVidWdfbWUpCisgICAgICAgICAgICBsb2dfZGVidWcgKCJybmR3MzIjc2xvd19nYXRoZXJlcjogJWx1IGJ5dGVzIGZyb20gc3lzaW5mbyAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHVsU2l6ZSwgZHdUeXBlKTsKKyAgICAgICAgICAoKmFkZCkgKGJ1ZmZlciwgdWxTaXplLCByZXF1ZXN0ZXIpOworICAgICAgICAgIG5vX3Jlc3VsdHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBOb3cgd2Ugd291bGQgZG8gdGhlIHNhbWUgZm9yIHRoZSBwcm9jZXNzIGluZm9ybWF0aW9uLiAgVGhpcworICAgICBjYWxsIHdvdWxkIHJhdGhlciB1Z2x5IGluIHRoYXQgaXQgcmVxdWlyZXMgYW4gZXhhY3QgbGVuZ3RoCisgICAgIG1hdGNoIGZvciB0aGUgZGF0YSByZXR1cm5lZCwgZmFpbGluZyB3aXRoIGEKKyAgICAgU1RBVFVTX0lORk9fTEVOR1RIX01JU01BVENIIGVycm9yIGNvZGUgKDB4QzAwMDAwMDQpIGlmIHRoZQorICAgICBsZW5ndGggaXNuJ3QgYW4gZXhhY3QgbWF0Y2guICBJdCByZXF1aXJlcyBhIGNvbXBpbGVyIHRvIGhhbmRsZQorICAgICBjb21wbGV4IG5lc3RlZCBzdHJ1Y3RzLCBhbGlnbm1lbnQgaXNzdWVzLCBhbmQgc28gb24sIGFuZAorICAgICB3aXRob3V0IHRoZSBoZWFkZXJzIGluIHdoaWNoIHRoZSBlbnRyaWVzIGFyZSBkZWNsYXJlZCBpdCdzCisgICAgIGFsbW9zdCBpbXBvc3NpYmxlIHRvIGRvLiAgVGh1cyB3ZSBkb24ndC4gICovCisKKworICAvKiBGaW5hbGx5LCBkbyB0aGUgc2FtZSBmb3IgdGhlIHN5c3RlbSBwb3dlciBzdGF0dXMgaW5mb3JtYXRpb24uICBUaGVyZQorICAgICBhcmUgb25seSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHVzZWZ1bCBpbmZvcm1hdGlvbiB0eXBlcyBhdmFpbGFibGUgc28gd2UKKyAgICAgcmVzdHJpY3Qgb3Vyc2VsdmVzIHRvIHRoZSB1c2VmdWwgdHlwZXMuICBJbiBhZGRpdGlvbiBzaW5jZSB0aGlzCisgICAgIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGxlbmd0aCBpbmZvcm1hdGlvbiwgd2UgaGF2ZSB0byBoYXJkY29kZSBpbgorICAgICBsZW5ndGggZGF0YS4gICovCisgIGlmIChwTnRQb3dlckluZm9ybWF0aW9uKQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyBpbnQgdHlwZTsgaW50IHNpemU7IH0gcG93ZXJJbmZvW10gPSB7CisgICAgICAgIHsgMCwgMTI4IH0sICAgICAvKiBTeXN0ZW1Qb3dlclBvbGljeUFjICovCisgICAgICAgIHsgMSwgMTI4IH0sICAgICAvKiBTeXN0ZW1Qb3dlclBvbGljeURjICovCisgICAgICAgIHsgNCwgNjQgfSwgICAgICAvKiBTeXN0ZW1Qb3dlckNhcGFiaWxpdGllcyAqLworICAgICAgICB7IDUsIDQ4IH0sICAgICAgLyogU3lzdGVtQmF0dGVyeVN0YXRlICovCisgICAgICAgIHsgMTEsIDQ4IH0sICAgICAvKiBQcm9jZXNzb3JJbmZvcm1hdGlvbiAqLworICAgICAgICB7IDEyLCAyNCB9LCAgICAgLyogU3lzdGVtUG93ZXJJbmZvcm1hdGlvbiAqLworICAgICAgICB7IC0xLCAtMSB9CisgICAgICB9OworICAgICAgaW50IGk7CisKKyAgICAgIC8qIFRoZSAxMDAgaXMgYSBmYWlsc2FmZSBsaW1pdC4gICovCisgICAgICBmb3IgKGkgPSAwOyBwb3dlckluZm9baV0udHlwZSAhPSAtMSAmJiBpIDwgMTAwOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgLyogUXVlcnkgdGhlIGluZm8gZm9yIHRoaXMgSUQgKi8KKyAgICAgICAgICBkd1Jlc3VsdCA9IHBOdFBvd2VySW5mb3JtYXRpb24gKHBvd2VySW5mb1tpXS50eXBlLCBOVUxMLCAwLCBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRVJGT1JNQU5DRV9CVUZGRVJfU0laRSAtIDIwNDgpOworICAgICAgICAgIGlmIChkd1Jlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgaWYgKGRlYnVnX21lKQorICAgICAgICAgICAgbG9nX2RlYnVnICgicm5kdzMyI3Nsb3dfZ2F0aGVyZXI6ICV1IGJ5dGVzIGZyb20gcG93ZXJpbmZvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBwb3dlckluZm9baV0uc2l6ZSwgaSk7CisgICAgICAgICAgKCphZGQpIChidWZmZXIsIHBvd2VySW5mb1tpXS5zaXplLCByZXF1ZXN0ZXIpOworICAgICAgICAgIG5vX3Jlc3VsdHMrKzsKKyAgICAgICAgfQorICAgICAgZ2NyeV9hc3NlcnQgKGkgPCAxMDApOworICAgIH0KKyAgeGZyZWUgKGJ1ZmZlcik7CisKKyAgLyogV2UgY291bGRuJ3QgZ2V0IGVub3VnaCByZXN1bHRzIGZyb20gdGhlIGtlcm5lbCwgZmFsbCBiYWNrIHRvIHRoZQorICAgICBzb21ld2hhdCB0cm91Ymxlc29tZSByZWdpc3RyeSBwb2xsLiAgKi8KKyAgaWYgKG5vX3Jlc3VsdHMgPCAxNSkKKyAgICByZWdpc3RyeV9wb2xsIChhZGQsIHJlcXVlc3Rlcik7Cit9CisKKworaW50CitfZ2NyeV9ybmR3MzJfZ2F0aGVyX3JhbmRvbSAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKQoreworICBzdGF0aWMgaW50IGlzX2luaXRpYWxpemVkOworCisgIGlmICghbGV2ZWwpCisgICAgcmV0dXJuIDA7CisKKyAgLyogV2UgZG9uJ3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGxldmVsIDEgYW5kIDIgaGVyZSBiZWNhdXNlIHRoZXJlCisgICAgIGlzIG5vIGludGVybmFsIGVudHJvcHkgcG9vbCBhcyBhIHNjYXJ5IHJlc291cmNlLiAgSXQgbWF5IGFsbCB3b3JrCisgICAgIHNsb3dlciwgYnV0IGJlY2F1c2Ugb3VyIGVudHJvcHkgc291cmNlIHdpbGwgbmV2ZXIgYmxvY2sgYnV0CisgICAgIGRlbGl2ZXIgc29tZSBub3QgZWFzeSB0byBtZWFzdXJlIGVudHJvcHksIHdlIGFzc3VtZSBsZXZlbCAyLiAgKi8KKworICBpZiAoIWlzX2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIE9TVkVSU0lPTklORk8gb3N2aSA9IHsgc2l6ZW9mKCBvc3ZpICkgfTsKKworICAgICAgR2V0VmVyc2lvbkV4KCAmb3N2aSApOworICAgICAgaWYgKG9zdmkuZHdQbGF0Zm9ybUlkICE9IFZFUl9QTEFURk9STV9XSU4zMl9OVCkKKyAgICAgICAgbG9nX2ZhdGFsICgiY2FuIG9ubHkgcnVuIG9uIGEgV2luZG93cyBOVCBwbGF0Zm9ybVxuIiApOworICAgICAgc3lzdGVtX2lzX3cyMDAwID0gKG9zdmkuZHdNYWpvclZlcnNpb24gPT0gNSAmJiBvc3ZpLmR3TWlub3JWZXJzaW9uID09IDApOworICAgICAgaW5pdF9zeXN0ZW1fcm5nICgpOworICAgICAgaXNfaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKworICBpZiAoZGVidWdfbWUpCisgICAgbG9nX2RlYnVnICgicm5kdzMyI2dhdGhlcl9yYW5kb206IG9yaT0lZCBsZW49JXUgbHZsPSVkXG4iLAorICAgICAgICAgICAgICAgb3JpZ2luLCAodW5zaWduZWQgaW50KWxlbmd0aCwgbGV2ZWwgKTsKKworICBzbG93X2dhdGhlcmVyIChhZGQsIG9yaWdpbik7CisKKyAgcmV0dXJuIDA7Cit9CisKKworCit2b2lkCitfZ2NyeV9ybmR3MzJfZ2F0aGVyX3JhbmRvbV9mYXN0ICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJhbmRvbV9vcmlnaW5zIG9yaWdpbikKK3sKKyAgc3RhdGljIGludCBhZGRlZEZpeGVkSXRlbXMgPSAwOworCisgIGlmICggZGVidWdfbWUgKQorICAgIGxvZ19kZWJ1ZyAoInJuZHczMiNnYXRoZXJfcmFuZG9tX2Zhc3Q6IG9yaT0lZFxuIiwgb3JpZ2luICk7CisKKyAgLyogR2V0IHZhcmlvdXMgYmFzaWMgcGllY2VzIG9mIHN5c3RlbSBpbmZvcm1hdGlvbjogSGFuZGxlIG9mIGFjdGl2ZQorICAgICB3aW5kb3csIGhhbmRsZSBvZiB3aW5kb3cgd2l0aCBtb3VzZSBjYXB0dXJlLCBoYW5kbGUgb2YgY2xpcGJvYXJkCisgICAgIG93bmVyIGhhbmRsZSBvZiBzdGFydCBvZiBjbHBib2FyZCB2aWV3ZXIgbGlzdCwgcHNldWRvaGFuZGxlIG9mCisgICAgIGN1cnJlbnQgcHJvY2VzcywgY3VycmVudCBwcm9jZXNzIElELCBwc2V1ZG9oYW5kbGUgb2YgY3VycmVudAorICAgICB0aHJlYWQsIGN1cnJlbnQgdGhyZWFkIElELCBoYW5kbGUgb2YgZGVza3RvcCB3aW5kb3csIGhhbmRsZSBvZgorICAgICB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb2N1cywgd2hldGhlciBzeXN0ZW0gcXVldWUgaGFzIGFueSBldmVudHMsCisgICAgIGN1cnNvciBwb3NpdGlvbiBmb3IgbGFzdCBtZXNzYWdlLCAxIG1zIHRpbWUgZm9yIGxhc3QgbWVzc2FnZSwKKyAgICAgaGFuZGxlIG9mIHdpbmRvdyB3aXRoIGNsaXBib2FyZCBvcGVuLCBoYW5kbGUgb2YgcHJvY2VzcyBoZWFwLAorICAgICBoYW5kbGUgb2YgcHJvY3Mgd2luZG93IHN0YXRpb24sIHR5cGVzIG9mIGV2ZW50cyBpbiBpbnB1dCBxdWV1ZSwKKyAgICAgYW5kIG1pbGxpc2Vjb25kcyBzaW5jZSBXaW5kb3dzIHdhcyBzdGFydGVkLiAgKi8KKworICB7CisgICAgYnl0ZSBidWZmZXJbMjAqc2l6ZW9mKHVsb25nKV0sICpidWZwdHI7CisKKyAgICBidWZwdHIgPSBidWZmZXI7CisjZGVmaW5lIEFERChmKSAgZG8geyB1bG9uZyBhbG9uZyA9ICh1bG9uZykoZik7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChidWZwdHIsICZhbG9uZywgc2l6ZW9mIChhbG9uZykgKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgIGJ1ZnB0ciArPSBzaXplb2YgKGFsb25nKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKKworICAgIEFERCAoIEdldEFjdGl2ZVdpbmRvdyAoKSk7CisgICAgQUREICggR2V0Q2FwdHVyZSAoKSk7CisgICAgQUREICggR2V0Q2xpcGJvYXJkT3duZXIgKCkpOworICAgIEFERCAoIEdldENsaXBib2FyZFZpZXdlciAoKSk7CisgICAgQUREICggR2V0Q3VycmVudFByb2Nlc3MgKCkpOworICAgIEFERCAoIEdldEN1cnJlbnRQcm9jZXNzSWQgKCkpOworICAgIEFERCAoIEdldEN1cnJlbnRUaHJlYWQgKCkpOworICAgIEFERCAoIEdldEN1cnJlbnRUaHJlYWRJZCAoKSk7CisgICAgQUREICggR2V0RGVza3RvcFdpbmRvdyAoKSk7CisgICAgQUREICggR2V0Rm9jdXMgKCkpOworICAgIEFERCAoIEdldElucHV0U3RhdGUgKCkpOworICAgIEFERCAoIEdldE1lc3NhZ2VQb3MgKCkpOworICAgIEFERCAoIEdldE1lc3NhZ2VUaW1lICgpKTsKKyAgICBBREQgKCBHZXRPcGVuQ2xpcGJvYXJkV2luZG93ICgpKTsKKyAgICBBREQgKCBHZXRQcm9jZXNzSGVhcCAoKSk7CisgICAgQUREICggR2V0UHJvY2Vzc1dpbmRvd1N0YXRpb24gKCkpOworICAgIEFERCAoIEdldFF1ZXVlU3RhdHVzIChRU19BTExFVkVOVFMpKTsKKyAgICBBREQgKCBHZXRUaWNrQ291bnQgKCkpOworCisgICAgZ2NyeV9hc3NlcnQgKCBidWZwdHItYnVmZmVyIDwgc2l6ZW9mIChidWZmZXIpICk7CisgICAgKCphZGQpICggYnVmZmVyLCBidWZwdHItYnVmZmVyLCBvcmlnaW4gKTsKKyN1bmRlZiBBREQKKyAgfQorCisgIC8qIEdldCBtdWx0aXdvcmQgc3lzdGVtIGluZm9ybWF0aW9uOiBDdXJyZW50IGNhcmV0IHBvc2l0aW9uLCBjdXJyZW50CisgICAgIG1vdXNlIGN1cnNvciBwb3NpdGlvbi4gICovCisgIHsKKyAgICBQT0lOVCBwb2ludDsKKworICAgIEdldENhcmV0UG9zICgmcG9pbnQpOworICAgICgqYWRkKSAoICZwb2ludCwgc2l6ZW9mIChwb2ludCksIG9yaWdpbiApOworICAgIEdldEN1cnNvclBvcyAoJnBvaW50KTsKKyAgICAoKmFkZCkgKCAmcG9pbnQsIHNpemVvZiAocG9pbnQpLCBvcmlnaW4gKTsKKyAgfQorCisgIC8qIEdldCBwZXJjZW50IG9mIG1lbW9yeSBpbiB1c2UsIGJ5dGVzIG9mIHBoeXNpY2FsIG1lbW9yeSwgYnl0ZXMgb2YKKyAgICAgZnJlZSBwaHlzaWNhbCBtZW1vcnksIGJ5dGVzIGluIHBhZ2luZyBmaWxlLCBmcmVlIGJ5dGVzIGluIHBhZ2luZworICAgICBmaWxlLCB1c2VyIGJ5dGVzIG9mIGFkZHJlc3Mgc3BhY2UsIGFuZCBmcmVlIHVzZXIgYnl0ZXMuICAqLworICB7CisgICAgTUVNT1JZU1RBVFVTIG1lbW9yeVN0YXR1czsKKworICAgIG1lbW9yeVN0YXR1cy5kd0xlbmd0aCA9IHNpemVvZiAoTUVNT1JZU1RBVFVTKTsKKyAgICBHbG9iYWxNZW1vcnlTdGF0dXMgKCZtZW1vcnlTdGF0dXMpOworICAgICgqYWRkKSAoICZtZW1vcnlTdGF0dXMsIHNpemVvZiAobWVtb3J5U3RhdHVzKSwgb3JpZ2luICk7CisgIH0KKworICAvKiBHZXQgdGhyZWFkIGFuZCBwcm9jZXNzIGNyZWF0aW9uIHRpbWUsIGV4aXQgdGltZSwgdGltZSBpbiBrZXJuZWwKKyAgICAgbW9kZSwgYW5kIHRpbWUgaW4gdXNlciBtb2RlIGluIDEwMG5zIGludGVydmFscy4gICovCisgIHsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIEZJTEVUSU1FIGNyZWF0aW9uVGltZSwgZXhpdFRpbWUsIGtlcm5lbFRpbWUsIHVzZXJUaW1lOworICAgIERXT1JEIG1pbmltdW1Xb3JraW5nU2V0U2l6ZSwgbWF4aW11bVdvcmtpbmdTZXRTaXplOworCisgICAgaGFuZGxlID0gR2V0Q3VycmVudFRocmVhZCAoKTsKKyAgICBHZXRUaHJlYWRUaW1lcyAoaGFuZGxlLCAmY3JlYXRpb25UaW1lLCAmZXhpdFRpbWUsCisgICAgICAgICAgICAgICAgICAgICZrZXJuZWxUaW1lLCAmdXNlclRpbWUpOworICAgICgqYWRkKSAoICZjcmVhdGlvblRpbWUsIHNpemVvZiAoY3JlYXRpb25UaW1lKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJmV4aXRUaW1lLCBzaXplb2YgKGV4aXRUaW1lKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJmtlcm5lbFRpbWUsIHNpemVvZiAoa2VybmVsVGltZSksIG9yaWdpbiApOworICAgICgqYWRkKSAoICZ1c2VyVGltZSwgc2l6ZW9mICh1c2VyVGltZSksIG9yaWdpbiApOworCisgICAgaGFuZGxlID0gR2V0Q3VycmVudFByb2Nlc3MgKCk7CisgICAgR2V0UHJvY2Vzc1RpbWVzIChoYW5kbGUsICZjcmVhdGlvblRpbWUsICZleGl0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICZrZXJuZWxUaW1lLCAmdXNlclRpbWUpOworICAgICgqYWRkKSAoICZjcmVhdGlvblRpbWUsIHNpemVvZiAoY3JlYXRpb25UaW1lKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJmV4aXRUaW1lLCBzaXplb2YgKGV4aXRUaW1lKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJmtlcm5lbFRpbWUsIHNpemVvZiAoa2VybmVsVGltZSksIG9yaWdpbiApOworICAgICgqYWRkKSAoICZ1c2VyVGltZSwgc2l6ZW9mICh1c2VyVGltZSksIG9yaWdpbiApOworCisgICAgLyogR2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHdvcmtpbmcgc2V0IHNpemUgZm9yIHRoZSBjdXJyZW50CisgICAgICAgcHJvY2Vzcy4gICovCisgICAgR2V0UHJvY2Vzc1dvcmtpbmdTZXRTaXplIChoYW5kbGUsICZtaW5pbXVtV29ya2luZ1NldFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4aW11bVdvcmtpbmdTZXRTaXplKTsKKyAgICAoKmFkZCkgKCAmbWluaW11bVdvcmtpbmdTZXRTaXplLAorICAgICAgICAgICAgIHNpemVvZiAobWluaW11bVdvcmtpbmdTZXRTaXplKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJm1heGltdW1Xb3JraW5nU2V0U2l6ZSwKKyAgICAgICAgICAgICBzaXplb2YgKG1heGltdW1Xb3JraW5nU2V0U2l6ZSksIG9yaWdpbiApOworICB9CisKKworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBmaXhlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwcm9jZXNzIHNvIHdlIG9ubHkKKyAgICogYWRkIHRoZW0gb25jZSAqLworICBpZiAoIWFkZGVkRml4ZWRJdGVtcykKKyAgICB7CisgICAgICBTVEFSVFVQSU5GTyBzdGFydHVwSW5mbzsKKworICAgICAgLyogR2V0IG5hbWUgb2YgZGVza3RvcCwgY29uc29sZSB3aW5kb3cgdGl0bGUsIG5ldyB3aW5kb3cKKyAgICAgICAgIHBvc2l0aW9uIGFuZCBzaXplLCB3aW5kb3cgZmxhZ3MsIGFuZCBoYW5kbGVzIGZvciBzdGRpbiwKKyAgICAgICAgIHN0ZG91dCwgYW5kIHN0ZGVyci4gICovCisgICAgICBzdGFydHVwSW5mby5jYiA9IHNpemVvZiAoU1RBUlRVUElORk8pOworICAgICAgR2V0U3RhcnR1cEluZm8gKCZzdGFydHVwSW5mbyk7CisgICAgICAoKmFkZCkgKCAmc3RhcnR1cEluZm8sIHNpemVvZiAoU1RBUlRVUElORk8pLCBvcmlnaW4gKTsKKyAgICAgIGFkZGVkRml4ZWRJdGVtcyA9IDE7CisgICAgfQorCisgIC8qIFRoZSBwZXJmb3JtYW5jZSBvZiBRUEMgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGl0J3MKKyAgICAgcnVubmluZyBvbiBhbmQgb24gdGhlIE9TLCB0aGUgTVMgZG9jdW1lbnRhdGlvbiBpcyB2YWd1ZSBhYm91dCB0aGUKKyAgICAgZGV0YWlscyBiZWNhdXNlIGl0IHZhcmllcyBzbyBtdWNoLiAgVW5kZXIgV2luOXgvTUUgaXQgcmVhZHMgdGhlCisgICAgIDEuMTkzMTgwIE1IeiBQSUMgdGltZXIuICBVbmRlciBOVC9XaW4ySy9YUCBpdCBtYXkgb3IgbWF5IG5vdCByZWFkIHRoZQorICAgICA2NC1iaXQgVFNDIGRlcGVuZGluZyBvbiB0aGUgSEFMIGFuZCBhc3NvcnRlZCBvdGhlciBjaXJjdW1zdGFuY2VzLAorICAgICBnZW5lcmFsbHkgb24gbWFjaGluZXMgd2l0aCBhIHVuaXByb2Nlc3NvciBIQUwKKyAgICAgS2VRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigpIHVzZXMgYSAzLjU3OTU0NU1IeiB0aW1lciBhbmQgb24gbWFjaGluZXMKKyAgICAgd2l0aCBhIG11bHRpcHJvY2Vzc29yIG9yIEFQSUMgSEFMIGl0IHVzZXMgdGhlIFRTQyAodGhlIGV4YWN0IHRpbWUKKyAgICAgc291cmNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIEhhbHBVc2U4MjU0IGZsYWcgaW4gdGhlIGtlcm5lbCkuICBUaGF0CisgICAgIGNob2ljZSBvZiB0aW1lIHNvdXJjZXMgaXMgc29tZXdoYXQgcGVjdWxpYXIgYmVjYXVzZSBvbiBhCisgICAgIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgaXQncyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGdldCBjb21wbGV0ZWx5CisgICAgIGRpZmZlcmVudCBUU0MgcmVhZGluZ3MgZGVwZW5kaW5nIG9uIHdoaWNoIENQVSB5b3UncmUgY3VycmVudGx5CisgICAgIHJ1bm5pbmcgb24sIHdoaWxlIGZvciB1bmlwcm9jZXNzb3IgbWFjaGluZXMgaXQncyBub3QgYSBwcm9ibGVtLgorICAgICBIb3dldmVyLCB0aGUga2VybmVsIGFwcGVhcnMgdG8gc3luY2hyb25pc2UgdGhlIFRTQ3MgYWNyb3NzIENQVXMgYXQKKyAgICAgYm9vdCB0aW1lIChpdCByZXNldHMgdGhlIFRTQyBhcyBwYXJ0IG9mIGl0cyBzeXN0ZW0gaW5pdCksIHNvIHRoaXMKKyAgICAgc2hvdWxkbid0IHJlYWxseSBiZSBhIHByb2JsZW0uICBVbmRlciBXaW5DRSBpdCdzIGNvbXBsZXRlbHkgcGxhdGZvcm0tCisgICAgIGRlcGVuZGFudCwgaWYgdGhlcmUncyBubyBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIGF2YWlsYWJsZSwgaXQKKyAgICAgdXNlcyB0aGUgMW1zIHN5c3RlbSB0aW1lci4KKworICAgICBBbm90aGVyIGZlYXR1cmUgb2YgdGhlIFRTQyAoYWx0aG91Z2ggaXQgZG9lc24ndCByZWFsbHkgYWZmZWN0IHVzIGhlcmUpCisgICAgIGlzIHRoYXQgbW9iaWxlIENQVXMgd2lsbCB0dXJuIG9mZiB0aGUgVFNDIHdoZW4gdGhleSBpZGxlLCBQZW50aXVtcworICAgICB3aWxsIGNoYW5nZSB0aGUgcmF0ZSBvZiB0aGUgY291bnRlciB3aGVuIHRoZXkgY2xvY2stdGhyb3R0bGUgKHRvCisgICAgIG1hdGNoIHRoZSBjdXJyZW50IENQVSBzcGVlZCksIGFuZCBoeXBlcnRocmVhZGluZyBQZW50aXVtcyB3aWxsIHR1cm4KKyAgICAgaXQgb2ZmIHdoZW4gYm90aCB0aHJlYWRzIGFyZSBpZGxlICh0aGlzIG1vcmUgb3IgbGVzcyBtYWtlcyBzZW5zZSwKKyAgICAgc2luY2UgdGhlIENQVSB3aWxsIGJlIGluIHRoZSBoYWx0ZWQgc3RhdGUgYW5kIG5vdCBleGVjdXRpbmcgYW55CisgICAgIGluc3RydWN0aW9ucyB0byBjb3VudCkuCisKKyAgICAgVG8gbWFrZSB0aGluZ3MgdW5hbWJpZ3VvdXMsIHdlIGRldGVjdCBhIENQVSBuZXcgZW5vdWdoIHRvIGNhbGwgUkRUU0MKKyAgICAgZGlyZWN0bHkgYnkgY2hlY2tpbmcgZm9yIENQVUlEIGNhcGFiaWxpdGllcywgYW5kIGZhbGwgYmFjayB0byBRUEMgaWYKKyAgICAgdGhpcyBpc24ndCBwcmVzZW50LiAgKi8KKyNpZmRlZiBfX0dOVUNfXworLyogICBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBpbXBsZW1lbnQgdGhlIENQVSBmZWF0dXJlIHRlc3RzIGZpcnN0LiAgKi8KKy8qICAgaWYgKGNwdV9oYXNfZmVhdHVyZV9yZHRzYykgKi8KKy8qICAgICB7ICovCisvKiAgICAgICB1aW50MzJfdCBsbywgaGk7ICovCisgICAgICAvKiBXZSBjYW5ub3QgdXNlICI9QSIsIHNpbmNlIHRoaXMgd291bGQgdXNlICVyYXggb24geDg2XzY0LiAqLworLyogICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZHRzYyIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSk7ICovCisgICAgICAvKiBJZ25vcmUgaGlnaCAzMiBiaXRzLCBod2ljaCBhcmUgPjFzIHJlcy4gICovCisvKiAgICAgICAoKmFkZCkgKCZsbywgNCwgb3JpZ2luICk7ICovCisvKiAgICAgfSAqLworLyogICBlbHNlICovCisjZW5kaWYgLyohX19HTlVDX18qLworICAgIHsKKyAgICAgIExBUkdFX0lOVEVHRVIgcGVyZm9ybWFuY2VDb3VudDsKKworICAgICAgaWYgKFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyICgmcGVyZm9ybWFuY2VDb3VudCkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGRlYnVnX21lICkKKyAgICAgICAgICBsb2dfZGVidWcgKCJybmR3MzIjZ2F0aGVyX3JhbmRvbV9mYXN0OiBwZXJmIGRhdGFcbiIpOworICAgICAgICAgICgqYWRkKSAoJnBlcmZvcm1hbmNlQ291bnQsIHNpemVvZiAocGVyZm9ybWFuY2VDb3VudCksIG9yaWdpbik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIE1pbGxpc2Vjb25kIGFjY3VyYWN5IGF0IGJlc3QuLi4gKi8KKyAgICAgICAgICBEV09SRCBhd29yZCA9IEdldFRpY2tDb3VudCAoKTsKKyAgICAgICAgICAoKmFkZCkgKCZhd29yZCwgc2l6ZW9mIChhd29yZCksIG9yaWdpbiApOworICAgICAgICB9CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL3JhbmRvbS9ybmR3MzJjZS5jIGIvcmFuZG9tL3JuZHczMmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4NWVlZgotLS0gL2Rldi9udWxsCisrKyBiL3JhbmRvbS9ybmR3MzJjZS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKiBybmR3MzJjZS5jICAtICBXMzJDRSBlbnRyb3B5IGdhdGhlcmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5jcnlwdC5oPgorCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJyYW5kLWludGVybmFsLmgiCisKKworLyogVGhlIE1pY3Jvc29mdCBkb2NzIHNheSB0aGF0IGl0IGlzIHN1Z2dlc3RlZCB0byBzZWUgdGhlIGJ1ZmZlciB3aXRoCisgICBzb21lIGV4dHJhIHJhbmRvbS4gIFdlIGRvIHRoaXMsIGRlc3BpdGUgdGhhdCBpdCBpcyBhIHF1ZXN0aW9uYWJsZQorICAgc3VnZ2VzdGlvbiBhcyB0aGUgT1MgYXMgYmV0dGVyIG1lYW5zIG9mIGNvbGxlY3RpbmcgZW50cm9weSB0aGFuIGFuCisgICBhcHBsaWNhdGlvbi4gICovCitzdGF0aWMgc2l6ZV90IGZpbGxlcl91c2VkOworc3RhdGljIHNpemVfdCBmaWxsZXJfbGVuZ3RoOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZpbGxlcl9idWZmZXI7CisKK3N0YXRpYyB2b2lkCitmaWxsZXIgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuLCBlbnVtIHJhbmRvbV9vcmlnaW5zIGR1bW15KQoreworICAodm9pZClkdW1teTsKKyAgaWYgKGZpbGxlcl91c2VkICsgZGF0YWxlbiA+IGZpbGxlcl9sZW5ndGgpCisgICAgZGF0YWxlbiA9IGZpbGxlcl9sZW5ndGggLSBmaWxsZXJfdXNlZDsKKyAgbWVtY3B5IChmaWxsZXJfYnVmZmVyICsgZmlsbGVyX3VzZWQsIGRhdGEsIGRhdGFsZW4pOworICBmaWxsZXJfdXNlZCArPSBkYXRhbGVuOworfQorCisKK3N0YXRpYyB2b2lkCitmaWxsdXBfYnVmZmVyICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIGZpbGxlcl91c2VkID0gMDsKKyAgZmlsbGVyX2xlbmd0aCA9IGxlbmd0aDsKKyAgZmlsbGVyX2J1ZmZlciA9IGJ1ZmZlcjsKKworICB3aGlsZSAoZmlsbGVyX3VzZWQgPCBsZW5ndGgpCisgICAgX2djcnlfcm5kdzMyY2VfZ2F0aGVyX3JhbmRvbV9mYXN0IChmaWxsZXIsIDApOworfQorCisKK2ludAorX2djcnlfcm5kdzMyY2VfZ2F0aGVyX3JhbmRvbSAodm9pZCAoKmFkZCkoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKQoreworICBIQ1JZUFRQUk9WIHByb3Y7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyIFsyNTZdOworICBEV09SRCBidWZsZW47CisKKyAgaWYgKCFsZXZlbCkKKyAgICByZXR1cm4gMDsKKworICAvKiBOb3RlIHRoYXQgTEVOR1RIIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGNhbGxlcgorICAgICBjaGVja3MgdGhlIHJldHVybmVkIGxlbmd0aHMgYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24gdW50aWwgaXQKKyAgICAgZmVlbHMgdGhhdCBlbm91Z2ggZW50cm9weSBoYXMgYmVlbiBnYXRoZXJlZC4gICovCisKKyAgYnVmbGVuID0gc2l6ZW9mIGJ1ZmZlcjsKKyAgaWYgKGxlbmd0aCs4IDwgYnVmbGVuKQorICAgIGJ1ZmxlbiA9IGxlbmd0aCs4OyAgLyogUmV0dXJuIGEgYml0IG1vcmUgdGhhbiByZXF1ZXN0ZWQuICAqLworCisgIGlmICghQ3J5cHRBY3F1aXJlQ29udGV4dCAoJnByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1JZUFRfVkVSSUZZQ09OVEVYVHxDUllQVF9TSUxFTlQpKSApCisgICAgbG9nX2RlYnVnICgiQ3J5cHRBY3F1aXJlQ29udGV4dCBmYWlsZWQ6IHJjPSVkXG4iLCAoaW50KUdldExhc3RFcnJvciAoKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBmaWxsdXBfYnVmZmVyIChidWZmZXIsIGJ1Zmxlbik7CisgICAgICBpZiAoIUNyeXB0R2VuUmFuZG9tIChwcm92LCBidWZsZW4sIGJ1ZmZlcikpCisgICAgICAgIGxvZ19kZWJ1ZyAoIkNyeXB0R2VuUmFuZG9tKCVkKSBmYWlsZWQ6IHJjPSVkXG4iLAorICAgICAgICAgICAgICAgICAgIChpbnQpYnVmbGVuLCAoaW50KUdldExhc3RFcnJvciAoKSk7CisgICAgICBlbHNlCisgICAgICAgICgqYWRkKSAoYnVmZmVyLCBidWZsZW4sIG9yaWdpbik7CisgICAgICBDcnlwdFJlbGVhc2VDb250ZXh0IChwcm92LCAwKTsKKyAgICAgIHdpcGVtZW1vcnkgKGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlcik7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKwordm9pZAorX2djcnlfcm5kdzMyY2VfZ2F0aGVyX3JhbmRvbV9mYXN0ICh2b2lkICgqYWRkKShjb25zdCB2b2lkKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByYW5kb21fb3JpZ2lucyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcmFuZG9tX29yaWdpbnMgb3JpZ2luKQoreworCisgIC8qIEFkZCB3b3JkIHNpemVkIHZhbHVlcy4gICovCisgIHsKKyMgICBkZWZpbmUgQUREKHQsZikgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0IGFsb25nID0gKGYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgbWVtY3B5IChidWZwdHIsICZhbG9uZywgc2l6ZW9mIChhbG9uZykpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ1ZnB0ciArPSBzaXplb2YgKGFsb25nKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyMCpzaXplb2YodWxvbmcpXSwgKmJ1ZnB0cjsKKworICAgIGJ1ZnB0ciA9IGJ1ZmZlcjsKKyAgICBBREQgKEhXTkQsICAgR2V0QWN0aXZlV2luZG93ICgpKTsKKyAgICBBREQgKEhXTkQsICAgR2V0Q2FwdHVyZSAoKSk7CisgICAgQUREIChIV05ELCAgIEdldENsaXBib2FyZE93bmVyICgpKTsKKyAgICBBREQgKEhBTkRMRSwgR2V0Q3VycmVudFByb2Nlc3MgKCkpOworICAgIEFERCAoRFdPUkQsICBHZXRDdXJyZW50UHJvY2Vzc0lkICgpKTsKKyAgICBBREQgKEhBTkRMRSwgR2V0Q3VycmVudFRocmVhZCAoKSk7CisgICAgQUREIChEV09SRCwgIEdldEN1cnJlbnRUaHJlYWRJZCAoKSk7CisgICAgQUREIChIV05ELCAgIEdldERlc2t0b3BXaW5kb3cgKCkpOworICAgIEFERCAoSFdORCwgICBHZXRGb2N1cyAoKSk7CisgICAgQUREIChEV09SRCwgIEdldE1lc3NhZ2VQb3MgKCkpOworICAgIEFERCAoSFdORCwgICBHZXRPcGVuQ2xpcGJvYXJkV2luZG93ICgpKTsKKyAgICBBREQgKEhXTkQsICAgR2V0UHJvY2Vzc0hlYXAgKCkpOworICAgIEFERCAoRFdPUkQsICBHZXRRdWV1ZVN0YXR1cyAoUVNfQUxMRVZFTlRTKSk7CisgICAgQUREIChEV09SRCwgIEdldFRpY2tDb3VudCAoKSk7CisKKyAgICBnY3J5X2Fzc2VydCAoIGJ1ZnB0ci1idWZmZXIgPCBzaXplb2YgKGJ1ZmZlcikgKTsKKyAgICAoKmFkZCkgKCBidWZmZXIsIGJ1ZnB0ci1idWZmZXIsIG9yaWdpbiApOworIyAgIHVuZGVmIEFERAorICB9CisKKyAgLyogR2V0IG11bHRpd29yZCBzeXN0ZW0gaW5mb3JtYXRpb246IEN1cnJlbnQgY2FyZXQgcG9zaXRpb24sIGN1cnJlbnQKKyAgICAgbW91c2UgY3Vyc29yIHBvc2l0aW9uLiAgKi8KKyAgeworICAgIFBPSU5UIHBvaW50OworCisgICAgR2V0Q2FyZXRQb3MgKCZwb2ludCk7CisgICAgKCphZGQpICggJnBvaW50LCBzaXplb2YgKHBvaW50KSwgb3JpZ2luICk7CisgICAgR2V0Q3Vyc29yUG9zICgmcG9pbnQpOworICAgICgqYWRkKSAoICZwb2ludCwgc2l6ZW9mIChwb2ludCksIG9yaWdpbiApOworICB9CisKKyAgLyogR2V0IHBlcmNlbnQgb2YgbWVtb3J5IGluIHVzZSwgYnl0ZXMgb2YgcGh5c2ljYWwgbWVtb3J5LCBieXRlcyBvZgorICAgICBmcmVlIHBoeXNpY2FsIG1lbW9yeSwgYnl0ZXMgaW4gcGFnaW5nIGZpbGUsIGZyZWUgYnl0ZXMgaW4gcGFnaW5nCisgICAgIGZpbGUsIHVzZXIgYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZSwgYW5kIGZyZWUgdXNlciBieXRlcy4gICovCisgIHsKKyAgICBNRU1PUllTVEFUVVMgbWVtb3J5U3RhdHVzOworCisgICAgbWVtb3J5U3RhdHVzLmR3TGVuZ3RoID0gc2l6ZW9mIChNRU1PUllTVEFUVVMpOworICAgIEdsb2JhbE1lbW9yeVN0YXR1cyAoJm1lbW9yeVN0YXR1cyk7CisgICAgKCphZGQpICggJm1lbW9yeVN0YXR1cywgc2l6ZW9mIChtZW1vcnlTdGF0dXMpLCBvcmlnaW4gKTsKKyAgfQorCisKKyAgLyogR2V0IHRocmVhZCBhbmQgcHJvY2VzcyBjcmVhdGlvbiB0aW1lLCBleGl0IHRpbWUsIHRpbWUgaW4ga2VybmVsCisgICAgIG1vZGUsIGFuZCB0aW1lIGluIHVzZXIgbW9kZSBpbiAxMDBucyBpbnRlcnZhbHMuICAqLworICB7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBGSUxFVElNRSBjcmVhdGlvblRpbWUsIGV4aXRUaW1lLCBrZXJuZWxUaW1lLCB1c2VyVGltZTsKKworICAgIGhhbmRsZSA9IEdldEN1cnJlbnRUaHJlYWQgKCk7CisgICAgR2V0VGhyZWFkVGltZXMgKGhhbmRsZSwgJmNyZWF0aW9uVGltZSwgJmV4aXRUaW1lLAorICAgICAgICAgICAgICAgICAgICAma2VybmVsVGltZSwgJnVzZXJUaW1lKTsKKyAgICAoKmFkZCkgKCAmY3JlYXRpb25UaW1lLCBzaXplb2YgKGNyZWF0aW9uVGltZSksIG9yaWdpbiApOworICAgICgqYWRkKSAoICZleGl0VGltZSwgc2l6ZW9mIChleGl0VGltZSksIG9yaWdpbiApOworICAgICgqYWRkKSAoICZrZXJuZWxUaW1lLCBzaXplb2YgKGtlcm5lbFRpbWUpLCBvcmlnaW4gKTsKKyAgICAoKmFkZCkgKCAmdXNlclRpbWUsIHNpemVvZiAodXNlclRpbWUpLCBvcmlnaW4gKTsKKworICAgIGhhbmRsZSA9IEdldEN1cnJlbnRUaHJlYWQgKCk7CisgICAgR2V0VGhyZWFkVGltZXMgKGhhbmRsZSwgJmNyZWF0aW9uVGltZSwgJmV4aXRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgJmtlcm5lbFRpbWUsICZ1c2VyVGltZSk7CisgICAgKCphZGQpICggJmNyZWF0aW9uVGltZSwgc2l6ZW9mIChjcmVhdGlvblRpbWUpLCBvcmlnaW4gKTsKKyAgICAoKmFkZCkgKCAmZXhpdFRpbWUsIHNpemVvZiAoZXhpdFRpbWUpLCBvcmlnaW4gKTsKKyAgICAoKmFkZCkgKCAma2VybmVsVGltZSwgc2l6ZW9mIChrZXJuZWxUaW1lKSwgb3JpZ2luICk7CisgICAgKCphZGQpICggJnVzZXJUaW1lLCBzaXplb2YgKHVzZXJUaW1lKSwgb3JpZ2luICk7CisKKyAgfQorCisKKyAgLyogSW4gY2FzZSB0aGUgT0VNIHByb3ZpZGVzIGEgaGlnaCBwcmVjaXNpb24gdGltZXIgZ2V0IHRoaXMuICBJZgorICAgICBub25lIGlzIGF2YWlsYWJsZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZQorICAgICBHZXRUaWNrQ291bnQuICAqLworICB7CisgICAgTEFSR0VfSU5URUdFUiBwZXJmb3JtYW5jZUNvdW50OworCisgICAgaWYgKFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyICgmcGVyZm9ybWFuY2VDb3VudCkpCisgICAgICAoKmFkZCkgKCZwZXJmb3JtYW5jZUNvdW50LCBzaXplb2YgKHBlcmZvcm1hbmNlQ291bnQpLCBvcmlnaW4pOworICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9DaGFuZ2VMb2ctMjAxMSBiL3NyYy9DaGFuZ2VMb2ctMjAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTcxZmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL0NoYW5nZUxvZy0yMDExCkBAIC0wLDAgKzEsMjM5OCBAQAorMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCU5COiBDaGFuZ2VMb2cgZmlsZXMgYXJlIG5vIGxvbmdlciBtYW51YWxseSBtYWludGFpbmVkLiAgU3RhcnRpbmcKKwlvbiBEZWNlbWJlciAxc3QsIDIwMTEgd2UgcHV0IGNoYW5nZSBpbmZvcm1hdGlvbiBvbmx5IGluIHRoZSBHSVQKKwljb21taXQgbG9nLCBhbmQgZ2VuZXJhdGUgYSB0b3AtbGV2ZWwgQ2hhbmdlTG9nIGZpbGUgZnJvbSBsb2dzIGF0CisJIm1ha2UgZGlzdCIuICBTZWUgZG9jL0hBQ0tJTkcgZm9yIGRldGFpbHMuCisKKzIwMTEtMDktMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlDaGFuZ2UgQVRIIGNvZGUgYW5kIHR1cm4gdGhlIHRocmVhZCBpbml0aWFsaXphdGlvbiBjYWxsYmFja3MgaW4KKwl0aGUgQVBJIGludG8gZHVtbXkgZnVuY3Rpb25zLgorCisJKiBnbG9iYWwuYyAoZ2xvYmFsX2luaXQpOiBDYWxsIF9nY3J5X3BpbWVnZW5faW5pdC4KKworCSogZ2NyeXB0LmguaW4gKEdDUllfVEhSRUFEX09QVEkgT05fVkVSU0lPTik6IEJ1bXAgdG8gMS4KKwkoR0NSWV9USFJFQURfT1BUSU9OX1BUSF9JTVBMKTogU2ltcGxpZnkuCisJKEdDUllfVEhSRUFEX09QVElPTl9QVEhSRUFEX0lNUEwpOiBTaW1wbGlmeS4KKworCSogYXRoLmMgKGF0aF9yZWFkLCBhdGhfd3JpdGUpOiBSZW1vdmUuICBUaGV5IGFyZSBvbmx5IHVzZWQgaW4gdGhlCisJb3B0aW9uYWwgcmFuZG9tLWRhZW1vbi4KKwkoYXRoX3NlbGVjdCwgYXRoX3dhaXRwaWQsIGF0aF9hY2NlcHQsIGF0aF9jb25uZWN0LCBhdGhfc2VuZG1zZykKKwkoYXRoX3JlY3Ztc2cpOiBSZW1vdmUuICBUaGV5IGFyZSBub3QgdXNlZC4KKwkqIGF0aC5oOiBSZW1vdmUgcHJvdG90eXBlcyBhbmQgY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmUgZmllbGRzLgorCisyMDExLTAzLTExICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBhdGguYyAobXV0ZXhfaW5pdCk6IFJlbmFtZSBzZWNvbmQgYXJnIHRvIEZPUkNFIGFuZCBpbnZlcnQKKwlsb2dpYy4gIENoYW5nZSBhbGwgY2FsbGVycy4KKworMjAxMS0wOS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKGVudW0gZ2NyeV90aHJlYWRfb3B0aW9uKTogUmVtb3ZlIGRlcHJlY2F0ZWQgZW51bS4KKwkoZ2NyeV9tZF9zdGFydF9kZWJ1ZywgZ2NyeV9tZF9zdG9wX2RlYnVnKTogUmVtb3ZlIGRlcHJlY2F0ZWQgdGhlc2UKKwltYWNyb3MuCisKKzIwMTEtMDktMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwlSZW1vdmFsIG9mIHRoZSBnY3J5X2FjIGFuZCB0aGUgbW9kdWxlIHJlZ2lzdGVyIGludGVyZmFjZXMuCisKKwkqIE1ha2VmaWxlLmFtIChpbmNsdWRlX0hFQURFUlMpOiBSZW1vdmUgZ2NyeXB0LW1vZHVsZS5oLgorCShsaWJnY3J5cHRfbGFfU09VUkNFUyk6IEFkZCBnY3J5cHQtbW9kdWxlLmggd2hpY2ggaXMgbm93IGludGVybmFsCisJaGVhZGVyLgorCSogZ2NyeXB0LW1vZHVsZS5oIChnY3J5X21kX3JlZ2lzdGVyLCBnY3J5X21kX3VucmVnaXN0ZXIpOiBSZW1vdmUuCisJKGdjcnlfcGtfcmVnaXN0ZXIsIGdjcnlfcGtfdW5yZWdpc3Rlcik6IFJlbW92ZS4KKwkoZ2NyeV9jaXBoZXJfcmVnaXN0ZXIsIGdjcnlfY2lwaGVyX3VucmVnaXN0ZXIpOiBSZW1vdmUuCisJKiB2aXNpYmlsaXR5Lmg6IEluY2x1ZGUgZ2NyeXB0LW1vZHVsZS5oLgorCSogZ2NyeXB0LmguaW46IERvIG5vdCBpbmNsdWRlIGdjcnlwdC1tb2R1bGUuaC4KKwkqIGdjcnlwdC5oLmluOiBSZW1vdmUgYWxsIGdjcnlfYWMgc3ltYm9scy4KKwkoZ2NyeV9wa19saXN0LCBnY3J5X21kX2xpc3QsIGdjcnlfY2lwaGVyX2xpc3QpOiBSZW1vdmUuCisJKiB2aXNpYmlsaXR5Lmg6IFJlbW92ZSBhbGwgZ2NyeV9hYyBzeW1ib2xzLgorCShnY3J5X3BrX2xpc3QsIGdjcnlfbWRfbGlzdCwgZ2NyeV9jaXBoZXJfbGlzdCk6IFJlbW92ZS4KKwkoZ2NyeV9jaXBoZXJfcmVnaXN0ZXIsIGdjcnlfY2lwaGVyX3VucmVnaXN0ZXIsIGdjcnlfcGtfcmVnaXN0ZXIpCisJKGdjcnlfcGtfdW5yZWdpc3RlciwgZ2NyeV9tZF9yZWdpc3RlciwgZ2NyeV9tZF91bnJlZ2lzdGVyKTogUmVtb3ZlLgorCSogdmlzaWJpbGl0eS5jOiBSZW1vdmUgYWxsIGdjcnlfYWMgd3JhcHBlcnMuCisJKGdjcnlfcGtfbGlzdCwgZ2NyeV9jaXBoZXJfbGlzdCwgZ2NyeV9tZF9saXN0KTogUmVtb3ZlLgorCShnY3J5X2NpcGhlcl9yZWdpc3RlciwgZ2NyeV9jaXBoZXJfdW5yZWdpc3RlciwgZ2NyeV9wa19yZWdpc3RlcikKKwkoZ2NyeV9wa191bnJlZ2lzdGVyLCBnY3J5X21kX3JlZ2lzdGVyLCBnY3J5X21kX3VucmVnaXN0ZXIpOiBSZW1vdmUuCisJKiBsaWJnY3J5cHQudmVyczogUmVtb3ZlIGFsbCBnY3J5X2FjIHN5bWJvbHMuCisJKEdDUllQVF8xLjIpOiBSZW5hbWUgdG8gR0NSWVBUXzEuNi4KKwkoZ2NyeV9wa19saXN0LCBnY3J5X21kX2xpc3QsIGdjcnlfY2lwaGVyX2xpc3QpOiBSZW1vdmUuCisJKiBsaWJnY3J5cHQuZGVmOiBSZW1vdmUgYWxsIGdjcnlfYWMgc3ltYm9scy4KKwkoZ2NyeV9wa19saXN0LCBnY3J5X21kX2xpc3QsIGdjcnlfY2lwaGVyX2xpc3QpOiBSZW1vdmUuCisJKiBnbG9iYWwuYyAoZ2xvYmFsX2luaXQpOiBSZW1vdmUgY29tbWVudCBjb2RlIHdpdGggYSBjYWxsIHRvCisJX2djcnlfYWNfaW5pdC4KKworMjAxMS0wOS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogaG1hYzI1Ni5jIChtYWluKTogRml4IGVuZGxlc3MgbG9vcCB3aGVuIHVzaW5nIHBpcGUgaW5wdXQgYW5kCisJb3B0aW9uIC0tYmluYXJ5LgorCisyMDExLTA2LTEwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzZXhwLmMgKHZzZXhwX3NzY2FuKTogQWRkIG5ldyBmb3JtYXQgc3BlY2lmaWVycyAnTScgYW5kICd1Jy4KKworMjAxMS0wNS0yNCAgRGFpa2kgVWVubyAgPHVlbm9AdW5peHVzZXIub3JnPgorCisJKiBjaXBoZXIuaCAocGtfb3BlcmF0aW9uKTogTmV3LgorCShwa19lbmNvZGluZ19jdHgpOiBBZGQgbmV3IGZpZWxkczogb3AsIG5iaXRzLCBmbGFncywgdmVyaWZ5X2NtcCwKKwlhbmQgdmVyaWZ5X2FyZy4KKworMjAxMS0wNS0xOSAgRGFpa2kgVWVubyAgPHVlbm9AdW5peHVzZXIub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoZ2NyeXB0cm5kX0xEQUREKTogU3VwcGx5ICQoR1BHX0VSUk9SX0xJQlMpIGZvcgorCWdwZ19zdHJlcnJvci4KKworMjAxMS0wNS0xOCAgRGFpa2kgVWVubyAgPHVlbm9AdW5peHVzZXIub3JnPgorCisJKiBjaXBoZXIuaDogUmVtb3ZlIFBVQktFWV9GTEFHX1VOUEFELgorCisyMDExLTA1LTExICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIGNpcGhlci5oIChQVUJLRVlfRkxBR19VTlBBRCk6IE5ldy4KKwkoZW51bSBwa19lbmNvZGluZyk6IE5ldy4KKwkoc3RydWN0IHBrX2VuY29kaW5nX2N0eCk6IE5ldy4KKworMjAxMS0wNC0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc3RkbWVtLmMgKF9nY3J5X3ByaXZhdGVfbWFsbG9jX3NlY3VyZSwgX2djcnlfcHJpdmF0ZV9tYWxsb2MpOgorCVNldCBFUlJOTyBvbiBmYWlsdXJlLgorCSogc2VjbWVtLmMgKG1iX2dldF9uZXcpOiBTZXQgRVJSTk8gb24gZmFpbHVyZS4KKwkoX2djcnlfc2VjbWVtX21hbGxvY19pbnRlcm5hbCk6IERpdHRvLgorCisyMDExLTA0LTAxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9yZWFsbG9jKTogRGl2ZXJ0IHRvIGdjcnlfbWFsbG9jIG9yIGdjcnlfZnJlZS4KKworMjAxMS0wMy0wOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKGdjcnlfa2RmX2FsZ29zKTogTmV3LgorCShnY3J5X2tkZl9kZXJpdmUpOiBOZXcuCisJKiB2aXNpYmlsaXR5LmMgKGdjcnlfa2RmX2Rlcml2ZSk6IE5ldy4KKwkqIHZpc2liaWxpdHkuaCwgbGliZ2NyeXB0LnZlcnMsIGxpYmdjcnlwdC5kZWY6IEFkZCBnY3J5X2tkZl9kZXJpdmUuCisKKzIwMTEtMDItMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGxpYmdjcnlwdC1jb25maWcuaW46IEFkZCBvcHRpb24gLS1ob3N0LgorCSogbGliZ2NyeXB0Lm00OiBVc2UgQUNfUFJPR19UT09MIHRvIGZpbmQgdGhlIGNvbmZpZyBzY3JpcHQuICBQcmludAorCWEgd2FybmluZyBpcyB0aGUgY29uZmlnIHNjcmlwdHMgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyZSBob3N0LgorCisyMDExLTAyLTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jaGVja192ZXJzaW9uKTogRG8gbm90IHRha2UgdGhlIHBhdGNobGV2ZWwgaW4KKwlhY2NvdW50OyBpdCBpcyBub3Qgd2VsbCBkZWZpbmVkLgorCisyMDExLTAyLTE3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQtbW9kdWxlLmggKGdjcnlfY2lwaGVyX3JlZ2lzdGVyLCBnY3J5X2NpcGhlcl91bnJlZ2lzdGVyKQorCShnY3J5X3BrX3JlZ2lzdGVyLCBnY3J5X3BrX3VucmVnaXN0ZXIsIGdjcnlfbWRfcmVnaXN0ZXIpCisJKGdjcnlfbWRfdW5yZWdpc3Rlcik6IE1hcmsgYXMgZGVwcmVjYXRlZCBieSB0aGUgQVBJOyBpbiBhIGZ1dHVyZQorCXZlcnNpb24gdGhlIG1vZHVsZSByZWdpc3RlciBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZC4KKworCSogZ2NyeXB0LmguaW46IEF0dHJpYnV0ZSBhbGwgX2FjXyBmdW5jdGlvbnMgYW5kIHR5cGVzIGFzCisJZGVwcmVjYXRlZCBieSB0aGUgQVBJLgorCisJKiBod2ZlYXR1cmVzLmMgKGRldGVjdF9pYTMyX2dudWMpOiBGaXggQUVTLU5JIGRldGVjdGlvbi4gIFVzZSBBTkQKKwlpbnN0ZWFkIG9mIFNVQiBmb3IgYml0IHRlc3RpbmcuCisKKzIwMTEtMDItMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluIChHQ1JZQ1RMX0RJU0FCTEVfSFdGKTogTmV3LgorCSogZ2xvYmFsLmMgKF9nY3J5X3Zjb250cm9sKTogU3VwcG9ydCBuZXcgY29udHJvbCBjb2RlLgorCShwcmludF9jb25maWcpOiBGYWN0b3IgbGlzdCBvZiBod2ZlYXR1cmVzIG91dCB0byAuLi4KKwkoaHdmbGlzdCk6IG5ldy4KKwkoZGlzYWJsZWRfaHdfZmVhdHVyZXMpOiBOZXcuCisJKGdsb2JhbF9pbml0KTogUGFzcyBuZXcgdmFyaWFibGUgdG8gX2djcnlfZGV0ZWN0X2h3X2ZlYXR1cmVzLgorCSogaHdmZWF0dXJlcy5jIChfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMpOiBBZGQgYXJnCisJRElTQUJMRURfRkVBVFVSRVMgYW5kIGRpc2FibGUgZGV0ZWN0ZWQgZmVhdHVyZXMuCisKKzIwMTEtMDItMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGcxMGxpYi5oIChIV0ZfSU5URUxfQUVTKTogUmVuYW1lIHRvIEhXRl9JTlRFTF9BRVNOSS4KKwkqIGh3ZmVhdHVyZXMuYyAoZGV0ZWN0X2lhMzJfZ251Yyk6IEZpeCBzZXR0aW5nIG9mIHRoaXMgZmxhZy4KKworMjAxMS0wMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKGdjcnlfcGtfZ2V0X2N1cnZlLCBnY3J5X3BrX2dldF9wYXJhbSk6IE5ldy4KKwkqIGxpYmdjcnlwdC52ZXJzIChnY3J5X3BrX2dldF9jdXJ2ZSwgZ2NyeV9wa19nZXRfcGFyYW0pOiBBZGQuCisJKiBsaWJnY3J5cHQuZGVmIChnY3J5X3BrX2dldF9jdXJ2ZSwgZ2NyeV9wa19nZXRfcGFyYW0pOiBBZGQuCisJKiB2aXNpYmlsaXR5LmMgKGdjcnlfcGtfZ2V0X2N1cnZlLCBnY3J5X3BrX2dldF9wYXJhbSk6IE5ldy4KKwkqIGNpcGhlci1wcm90by5oIChwa19leHRyYV9zcGVjKTogQWRkIGZpZWxkcyBHRVRfQ1VSVkUgYW5kCisJR0VUX0NVUlZFX1BBUk0uCisKKzIwMTEtMDEtMzEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHNleHAuYyAodnNleHBfc3NjYW4pOiBBbGxvdyBvcGFxdWUgTVBJcyBpbiAiJW0iLgorCisyMDEwLTA4LTI3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnMTBsaWIuaCAoSFdGX0lOVEVMX0FFUyk6IE5ldy4KKwkqIGdsb2JhbC5jIChwcmludF9jb25maWcpOiBQcmludCBuZXcgZmxhZy4KKwkqIGh3ZmVhdHVyZXMuYyAoZGV0ZWN0X2lhMzJfZ251Yyk6IERldGVjdCB0aGlzIGZsYWcuCisKKzIwMTAtMDgtMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluIFshV0lOMzJdOiBBZGQgSU5TRVJUX1NZU19TRUxFQ1RfSCBhdXRvY29uZiBzdWJzdGl0dXRlLgorCisyMDEwLTA3LTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiBbIV9fR05VQ19fICYmIFczMl06IFR5cGVkZWYgc3NpemVfdCBhbmQgcGlkX3QgdG8KKwloZWxwIGJ1aWxkaW5nIHdpdGggTVNWQy4KKworMjAxMC0wNi0yNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gW1czMl06IEluY2x1ZGUgdGltZS5oIGFuZCBub3Qgc3lzL3RpbWUuaC4KKworMjAxMC0wNC0xOSAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBtaXNjLmMgKHdyaXRlMnN0ZGVycik6IER1bW15IHZhcmlhYmxlIHRvIHNpbGVuY2UgZ2NjIHdhcm5pbmcuCisKKzIwMTAtMDQtMTYgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogc2V4cC5jOiAoc2V4cF9zc2Nhbik6IE1ha2UgaXQgdmFyaWFibGUgbGVuZ3RoLCBhbmQgcmVuYW1lIHRoZQorCW9sZCB2ZXJzaW9uIHRvIC4uLgorCSh2c2V4cF9zc2Nhbik6IC4uLiB0aGlzIG5ldyBmdW5jdGlvbi4gIEFsc28gc3dhcCBsYXN0IHR3byBhcmd1bWVudHMuCisJKGdjcnlfc2V4cF9jcmVhdGUpOiBSZW1vdmUgZHVtbXkgdmFfbGlzdC4KKwkoZ2NyeV9zZXhwX2J1aWxkKTogVXNlIHZzZXhwX3NzY2FuIGluc3RlYWQgb2Ygc2V4cF9zc2Nhbi4KKwkoX2djcnlfc2V4cF92YnVpbGQpOiBMaWtld2lzZS4KKwkoZ2NyeV9zZXhwX2J1aWxkX2FycmF5KTogUmVtb3ZlIGR1bW15IHZhX2xpc3QuCisJKGdjcnlfc2V4cF9zc2Nhbik6IExpa2V3aXNlLgorCisyMDEwLTA0LTEyICBCcmFkIEhhcmRzICA8YnJhZGhAZnJvZ21vdXRoLm5ldD4gICh3aykKKworCVNwZWxsaW5nIGZpeGVzLgorCisyMDEwLTAzLTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbjogQWRkIGF1dG9jb25mIHRlbXBsYXRlIHRvIHNldCBnZW5lcmF0ZWQgZmlsZSB0bworCXJlYWQtb25seSBpbiBhbiBFbWFjcyBidWZmZXIuCisKKzIwMTAtMDEtMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChhcmNoX2dwZ19lcnJvcl9jZmxhZ3MsIGFyY2hfZ3BnX2Vycm9yX2xpYnMpOiBOZXcuCisJKGR1bXBzZXhwX0NGTEFHUyk6IE5ldy4KKwkoZHVtcHNleHBfTERBREQpOiBBZGQgYXJjaF9ncGdfZXJyb3JfbGlicy4KKwkoaG1hYzI1Nl9DRkxBR1MsIGhtYWMyNTZfTERBREQpOiBBZGQgdGhlIGFyY2ggdmFyaWFibGVzLgorCShsaWJnY3J5cHRfbGFfREVQRU5ERU5DSUVTKTogQWRkIGxpYmNvbXBhdC4KKwkqIHNlY21lbS5jIChsb2NrX3Bvb2wpOiBNYXJrIHVudXNlZCBhcmdzLgorCSogZ2xvYmFsLmMgKGRvX21hbGxvYywgZ2NyeV9yZWFsbG9jLCBnY3J5X2ZyZWUsIGdjcnlfY2FsbG9jKQorCShnY3J5X2NhbGxvY19zZWN1cmUsIGdjcnlfeGNhbGxvYywgZ2NyeV94Y2FsbG9jX3NlY3VyZSk6IFVzZQorCWdwZ19lcnJfc2V0X2Vycm5vLgorCShfZ2NyeV92Y29udHJvbCk6IENhbGwgX2djcnlfY29tcGF0X2lkZW50aWZpY2F0aW9uLgorCSogaG1hYzI1Ni5jIFtfX01JTkdXMzJDRV9fXTogSW5jbHVkZSBncGctZXJyb3IuaC4KKwkoX2djcnlfaG1hYzI1Nl9maWxlKTogVXNlIGdwZ19lcnJfc2V0X2Vycm5vLgorCShncGdfZXJyX3NldF9lcnJubykgWyFHUEdfRVJSX0lOTElORV06IEFkZCBtYWNyby4KKwkqIGcxMGxpYi5oOiBJbmNsdWRlIGxpYmNvbXBhdC5oLgorCisyMDEwLTAxLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoR0NSWV9QS19FQ0RIKTogTmV3LgorCisyMDA5LTEyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoR0NSWV9DSVBIRVJfTU9ERV9BRVNXUkFQKTogTmV3LgorCisyMDA5LTEyLTA4ICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtIChMVFJDQ09NUElMRSk6IFJlZmFjdG9yIHdpdGggLi4uCisJKFJDQ09NUElMRSk6IC4uLiB0aGlzIG5ldyBtYWNyby4gIEFkZCAkKGxpYmdjcnlwdF9sYV9DUFBGTEFHUykuCisJKFNVRkZJWEVTKTogQWRkIC5sby4KKwkoLnJjLm8pOiBDaGFuZ2UgdG8gLi4uCisJKC5yYy5sbyk6IC4uLiB0aGlzIGltcGxpY2l0IHJ1bGUuCisJKGdjcnlwdF9yZXNfbGRmbGFnKTogUmVtb3ZlZC4KKwkoZ2NyeXB0X3Jlcyk6IFVzZSBsaWJ0b29sIG9iamVjdCBmaWxlIG5hbWUgaGVyZS4KKwkobGliZ2NyeXB0X2xhX0xERkxBR1MpOiBSZW1vdmUgZ2NyeXB0X3Jlc19sZGZsYWcgdXNhZ2UuCisJKGxpYmdjcnlwdF9sYV9MSUJBREQpOiBBZGQgZ2NyeXB0X3Jlcy4KKworMjAwOS0xMS0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogaHdmZWF0dXJlcy5jIChkZXRlY3RfaWEzMl9nbnVjKTogUmVwYWxjZSAiPXIiIGJ5ICIrciIgc28gdGhhdAorCUhBUy1DUFVESUQgaXMgYWx3YXlzIGluaXRpYWxpemVkLiAgVGhhbmtzIHRvIEJlbiBIdXRjaGluZ3MgZm9yCisJcG9pbnRpbmcgb3V0IHRoaXMgcHJvYmxlbS4KKworMjAwOS0wOC0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYXRoLmg6IEluY2x1ZGUgc3lzL21zZy5oLgorCisyMDA5LTA3LTAyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzLmMgKF9nY3J5X2luaXRpYWxpemVfZmlwc19tb2RlKTogRG8gbm90IHVzZSBGSVBTIG1vZGUgaWYKKwkvcHJvYy8uLi4vZmlwc19lbmFibGVkIGhhcyBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuCisKKwkqIGR1bXBzZXhwLmMgKG1haW4pOiBGaXggaGFuZGxpbmcgbXVsdGlwbGUgZmlsZXMuCisJKHBhcnNlX2FuZF9wcmludCk6IEltcGxlbWVudCBoZXggYW5kIG9jdGFsIGVzY2FwaW5nLgorCisJKiBzZXhwLmMgKHVucXVvdGVfc3RyaW5nKTogUmVtb3ZlIHN1cGVyZmx1b3VzIGNsZWFyaW5nIG9mIEVTQy4KKwkqIGR1bXBzZXhwLmMgKHBhcnNlX2FuZF9wcmludCk6IEFkZCBtaXNzaW5nIGJyZWFrLgorCShtYWluKTogRml4IHJldHVybiB2YWx1ZS4KKwlSZXBvcnRlZCBieSBGYWJpYW4gS2VpbC4KKworMjAwOS0wMi0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYXRoLmggW0hBVkVfU1lTX1NFTEVDVF9IXTogSW5jbHVkZSA8c3lzL3NlbGVjdC5oPiBmb3IgZmRfc2V0LgorCVshSEFWRV9TWVNfU0VMRUNUX0hdOiBJbmNsdWRlIDxzeXMvdGltZS5oPi4gIE1vdmUgaW5jbHVzaW9uIG9mCisJY29uZmlnLmggdG8gdGhlIHRvcC4gIFRoZSBhY3R1YWwgY29uZmlndXJlIGNoZWNrIHdhcyBhbHJlYWR5CisJdGhlcmUuCisKKwkqIHNleHAuYzogUmVtb3ZlIG1lbW9yeS5oLgorCSogbXBpLmg6IFJlbW92ZSBtZW1vcnkuaC4gIEFkZCBzdHJpbmcuaC4KKworMjAwOS0wMi0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYXRoLmg6IEluY2x1ZGUgc3lzL3RpbWUuaC4gIEZpeGVzIGJ1ZyM5OTMuCisKKzIwMDktMDEtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHMuYyAoX2djcnlfaW5pdGlhbGl6ZV9maXBzX21vZGUpOiBSZW1vdmUgc3VwZXJmbHVvdXMgY29uc3QKKwlmcm9tIHN0YXRpYyBzdHJpbmcuICBSZXBvcnRlZCBieSBBbGJlcnQgQ2hpbi4KKwkqIGhtYWMyNTYuYyAoc2VsZnRlc3QpOiBEaXR0byBhbmQgY2hhbmdlIHRvIHVuc2lnbmVkIGNoYXIuCisKKzIwMDgtMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGhtYWMyNTYuYyAoZmluYWxpemUpOiBGaXggZm9yIGJpZyBlbmRpYW4gaG9zdHMuCisKKzIwMDgtMTItMDUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdsb2JhbC5jIChnY3J5X2ZyZWUpOiBTYXZlIGFuZCByZXN0b3JlIEVSUk5PIGlmIHNldC4KKworMjAwOC0xMS0yNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc2V4cC5jIChnZXRfaW50ZXJuYWxfYnVmZmVyKTogTmV3LgorCShzZXhwX3NzY2FuKTogQWRkIGZvcm1hdCBjaGFyYWN0ZXIgUy4KKwkqIGNpcGhlci1wcm90by5oIChwa19leHRfZ2VuZXJhdGVfdCk6IEFkZCBmaWVsZCBFWFRSQUlORk8gIGNoYW5nZWQKKwlhbGwgaW1wbGVtZW50b3JzLgorCisJKiBjaXBoZXItcHJvdG8uaCAocGtfZXh0X2dlbmVyYXRlX3QpOiBTaW1wbGlmeS4KKwkocGtfZ2V0X3BhcmFtKTogTmV3LgorCShwa19leHRyYV9zcGVjX3QpOiBBZGQgZmllbGQgR0VUX1BBUkFNLgorCSogY2lwaGVyLmggKFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVkpOiBSZW1vdmUuCisJKF9nY3J5X3B1YmtleV9leHRyYXNwZWNfZWxnKTogTmV3LgorCisyMDA4LTExLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoQ0lQSEVSX0lORk9fTk9fV0VBS19LRVkpOiBOZXcuCisKKwkqIGNpcGhlci1wcm90by5oIChjaXBoZXJfc2V0X2V4dHJhX2luZm9fdCk6IE5ldy4KKwkoY2lwaGVyX2V4dHJhX3NwZWMpOiBBZGQgZmllbGQgU0VUX0VYVFJBX0lORk8uCisKKzIwMDgtMTAtMzAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGcxMGxpYi5oIChHQ0NfQVRUUl9GT1JNQVRfQVJHKTogTmV3LgorCShfZ2NyeV9nZXR0ZXh0KTogVXNlIGl0LgorCisyMDA4LTEwLTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoaW5hY3RpdmVfZmlwc19tb2RlKTogTW92ZSB0byBmaXBzLmMuCisJKGdjcnlfc2V0X2FsbG9jYXRpb25faGFuZGxlcik6IEZhY3RvciBjb2RlIG91dCB0byAuLi4KKwkqIGZpcHMuYyAoX2djcnlfaW5hY3RpdmF0ZV9maXBzX21vZGUpOiBOZXcuCisJKF9nY3J5X2lzX2ZpcHNfbW9kZV9pbmFjdGl2ZSk6IE5ldy4KKworMjAwOC0wOS0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LW1vZHVsZS5oIChHQ1JZX01PRFVMRV9JRF9VU0VSLCBHQ1JZX01PRFVMRV9JRF9VU0VSX0xBU1QpOgorCU5ldy4KKwkqIG1vZHVsZS5jIChNT0RVTEVfSURfVVNFUiwgTU9EVUxFX0lEX1VTRVJfTEFTVCk6IERlZmluZSB1c2luZyBuZXcKKwltYWNyb3MuCisKKzIwMDgtMDktMjAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGhtYWMyNTYuYyAoZmluYWxpemUpIFtXT1JEU19CSUdFTkRJQU5dOiBGaXggc2lnYnVzIHByb2JsZW0uCisKKzIwMDgtMDktMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNpcGhlci1wcm90by5oIChwa19leHRfZ2VuZXJhdGVfdCk6IEFkZCBhcmdzIFFCSVRTLCBOQU1FLCBET01BSU4uCisKKwkqIGZpcHMuYyAoZmlwc19uZXdfc3RhdGUpOiBBbGxvdyBFcnJvciA9PiBFcnJvciB0cmFuc2l0aW9uLgorCisyMDA4LTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoZ2NyeV9maXBzX21vZGVfYWN0aXZlKTogTmV3LgorCisJKiBzZWNtZW0uYyAoX2djcnlfc2VjbWVtX2luaXQpOiBGYWN0b3IgbW9zdCBjb2RlIG91dCB0byAuLgorCShzZWNtZW1faW5pdCk6IC4uIG5ldy4KKwkoREVGQVVMVF9QT09MX1NJWkUpOiBSZW5hbWUgdG8gTUlOSU1VTV9QT09MX1NJWkUuCisJKFNUQU5EQVJEX1BPT0xfU0laRSk6IE5ldy4KKwkoX2djcnlfc2VjbWVtX21hbGxvY19pbnRlcm5hbCk6IERvbid0IGFib3J0IGlmIHRoZSBwb29sIGlzIG5vdAorCWluaXRpYWxpemVkIGJ1dCB0cnkgdG8gb3V0IGludGlhbGl6ZSBpdCBmaXJzdCBhbmQgb25seSB0aGVuIHByaW50CisJYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIE5VTEwuICBJZiB0aGUgcG9vbCBpcyBub3QgbG9ja2VkIHdoaWxlCisJaW4gRklQUyBtb2RlLCByZXR1cm4gTlVMTC4KKworCSogZmlwcy5jIChGSVBTX0ZPUkNFX0ZJTEUpOiBOZXcgY29uc3RhbnQuICBDaGFuZ2UgdGhlIGZpbGUgbmFtZSB0bworCSIvZXRjL2djcnlwdC9maXBzX2VuYWJsZWQiLgorCShlbmZvcmNlZF9maXBzX21vZGUpOiBOZXcuCisJKF9nY3J5X2luaXRpYWxpemVfZmlwc19tb2RlKTogU2V0IHRoYXQgZmxhZy4KKwkoX2djcnlfZW5mb3JjZWRfZmlwc19tb2RlKTogTmV3LgorCSogZ2xvYmFsLmMgKGluYWN0aXZlX2ZpcHNfbW9kZSk6IE5ldy4KKwkoX2djcnlfdmNvbnRyb2wpOiBUYWtlIHRoYXQgZmxhZyBpbiBhY2NvdW50IGZvcglHQ1JZQ1RMX0ZJUFNfTU9ERV9QLgorCShnY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXIpOiBUYWtlIGNhcmUgb2YgdGhlIGVuZm9yY2VkIGZpcHMgbWRvZQorCWZsYWcuCisJKGdldF9ub19zZWN1cmVfbWVtb3J5KTogTmV3LgorCShkb19tYWxsb2MsIGdjcnlfaXNfc2VjdXJlKTogVXNlIGl0LgorCisyMDA4LTA5LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAocHJpbnRfY29uZmlnKTogVXNlIHkvbiBmb3IgZmlwcyBtb2RlLgorCisJKiBmaXBzLmMgKGZpcHNfbmV3X3N0YXRlKTogQWxsb3cgdHJhbnNpdGlvbiB0byBFcnJvciBhbmQKKwlGYXRhbC1lcnJvciBmcm9tIEluaXQuCisKKzIwMDgtMDktMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHMuYyBbSEFWRV9TWVNMT0ddOiBJbmNsdWRlIHN5c2xvZy5oLgorCShfZ2NyeV9pbml0aWFsaXplX2ZpcHNfbW9kZSwgbG9ja19mc20sIHVubG9ja19mc20pCisJKF9nY3J5X2ZpcHNfc2lnbmFsX2Vycm9yLCBmaXBzX25ld19zdGF0ZSkKKwkoX2djcnlfZmlwc19ub3JldHVybikgW0hBVkVfU1lTTE9HXTogQWxzbyBsb2cgdmlhIHN5c2xvZy4KKwkoY2hlY2tfYmluYXJ5X2ludGVncml0eSkgW0hBVkVfU1lTTE9HXTogTG9nIGZhaWx1cmUuCisJKiBnbG9iYWwuaCBbSEFWRV9TWVNMT0ddOiBJbmNsdWRlIHN5c2xvZy5oLgorCShfZ2NyeV9nbG9iYWxfaXNfb3BlcmF0aW9uYWwpIFtIQVZFX1NZU0xPR106IFByaW50IHdhcm5pbmcuCisKKwkqIGdsb2JhbC5jIChfZ2NyeV92Y29udHJvbCk6IFVzZSBHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVECisJdG8gcnVuIHBvd2VyLXVwIHRlc3RzLiAgQWRkIHVucHVibGlzaGVkIGNvbnRyb2wgY29tbWFuZHMgNTgtNjAuCisKKwkqIGdsb2JhbC5jIChfZ2NyeV9nbG9iYWxfaXNfb3BlcmF0aW9uYWwpOiBOZXcuCisJKiBnMTBsaWIuaCAoZmlwc19pc19vcGVyYXRpb25hbCk6IENoYW5nZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisKKzIwMDgtMDktMTIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHMuYyAoX2djcnlfZmlwc19ydW5fc2VsZnRlc3RzKTogQWRkIGFyZyBFWFRFTkRFRC4KKwkocnVuX2NpcGhlcl9zZWxmdGVzdHMsIHJ1bl9kaWdlc3Rfc2VsZnRlc3RzLCBydW5faG1hY19zZWxmdGVzdHMpCisJKHJ1bl9wdWJrZXlfc2VsZnRlc3RzKTogRGl0dG8uCisJKiBjaXBoZXItcHJvdG8uaCAoc2VsZnRlc3RfZnVuY190KTogQWRkIGFyZyBFWFRFTkRFRAorCisyMDA4LTA5LTExICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzLmM6IEluY2x1ZGUgc3RyaW5nLmguCisJKGxveHRvaV8xLCBsb3h0b2lfMiwgbG94ZGlnaXRfcCk6IE5ldy4KKwkoY2hlY2tfYmluYXJ5X2ludGVncml0eSk6IENoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBleHBlY3RlZCBmaWxlLgorCisJKiBmaXBzLmMgKF9nY3J5X2ZpcHNfcnVuX3NlbGZ0ZXN0cyk6IFJ1biByYW5kb20gdGVzdHMgYmVmb3JlIHRoZQorCXB1YmtleSB0ZXN0cy4KKworMjAwOC0wOS0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKEdDWVJDVExfU0VMRlRFU1QpOiBOZXcuCisJKiBnbG9iYWwuYyAoX2djcnlfdmNvbnRyb2wpOiBJbXBsZW1lbnQuCisJKiBmaXBzLmMgKF9nY3J5X2ZpcHNfcnVuX3NlbGZ0ZXN0cyk6IERvIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkgaWYKKwlpbiBmaXBzIG1vZGUuICBSZXR1cm4gYW4gZXJyb3IgY29kZS4KKworMjAwOC0wOS0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc3RkbWVtLmM6IFJlLWluZGVudGVkLgorCisyMDA4LTA4LTI5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzLmMgKF9nY3J5X2luaXRpYWxpemVfZmlwc19tb2RlKTogQ2hhbmdlZCAvcHJvYyBmaWxlIHRvIHRlc3QKKwlmb3IgRklQUyBtb2RlLgorCisJKiBjaXBoZXItcHJvdG8uaCAocGtfY29tcHV0ZV9rZXlncmlwX3QpOiBOZXcuCisJKHBrX2V4dHJhX3NwZWMpOiBBZGQgZmllbGQgY29tcF9rZXlncmlwLgorCisyMDA4LTA4LTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBod2ZlYXR1cmVzLmMgKF9nY3J5X2RldGVjdF9od19mZWF0dXJlcyk6IERpc2FibGUgaGFyZHdhcmUKKwlkZXRlY3Rpb24gaW4gRklQUyBtb2RlLgorCisyMDA4LTA4LTI3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoX2djcnlfdmNvbnRyb2wpOiBBbGxvdyBydW5uaW5nIHNlbGZ0ZXN0cyBmcm9tIGVycm9yCisJc3RhdGUuCisJKGdjcnlfc2V0X291dG9mY29yZV9oYW5kbGVyKTogT25seSBwcmludCBhIHdhcm5pbmcgaWYgdXNlZCBpbiBGSVBTCisJbW9kZS4KKwkoZ2NyeV94bWFsbG9jLCBnY3J5X3hyZWFsbG9jLCBnY3J5X3htYWxsb2Nfc2VjdXJlLCBnY3J5X3hzdHJkdXApOgorCUlnbm9yZSBhbiBvdXRvZmNvcmUgaGFuZGxlciBpbiBGSVBTIG1vZGUuCisKKwkqIGZpcHMuYyAoX2djcnlfZmlwc190ZXN0X2Vycm9yX29yX29wZXJhdGlvbmFsKTogTmV3LgorCShmaXBzX25ld19zdGF0ZSk6IEFsbG93IHRyYW5zaXRpb24gZnJvbSBlcnJvciBpbnRvIHNlbGZ0ZXN0LgorCURpc2FsbG93IGVycm9yIHRvIGluaXQuCisKKzIwMDgtMDgtMjYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHMuYyAoZmlwc19uZXdfc3RhdGUpOiBQcmludCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5IGF0CisJdmVyYm9zaXR5IGxldmVsIG9mIDIuCisJKHJlcG9ydGVyKTogTGlrZXdpc2UuCisKKwkqIGNpcGhlci1wcm90by5oIChwa19leHRfZ2VuZXJhdGVfdCk6IE5ldy4KKwkocGtfZXh0cmFfc3BlYyk6IEFkZCBtZW1iZXIgZXh0X2dlbmVyYXRlLgorCSogY2lwaGVyLmggKFBVQktFWV9GTEFHX1RSQU5TSUVOVF9LRVkpOiBOZXcuCisKKzIwMDgtMDgtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGhtYWMyNTYuYyAoX2djcnlfaG1hYzI1Nl9maWxlKTogTmV3LgorCShtYWluKTogTmV3IG9wdGlvbiAtLWJpbmFyeS4KKwkqIGZpcHMuYyAoY2hlY2tfYmluYXJ5X2ludGVncml0eSk6IE5ldy4KKwkoX2djcnlfZmlwc19ydW5fc2VsZnRlc3RzKTogUnVuIGl0LgorCisJKiBnbG9iYWwuYyAoX2djcnlfdmNvbnRyb2wpIDxHQ1JZQ1RMX1VQREFURV9SQU5ET01fU0VFRF9GSUxFPjoKKwlDaGVjayBmb3IgZmlwcyBvcGVyYXRpb25hbCBzdGF0ZS4KKwkoX2djcnlfdmNvbnRyb2wpIDxHQ1JZQ1RMX0ZBU1RfUE9MTD46IERpdHQuCisKKzIwMDgtMDgtMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1pc2MuYyAoX2djcnlfbG9nX3ByaW50aGV4KTogTmV3LgorCisyMDA4LTA4LTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnMTBsaWIuaCAoZ2NyeV9hc3NlcnQpOiBOZXcuICB1c2UgdGhpcyBhdCBhbG1vc3QgYWxsIHBsYWNlcworCXdoZXJlIHdlIHVzZWQgYSBwbGFpbiBhc3NlcnQuCisJKiBtaXNjLmMgKF9nY3J5X2Fzc2VydF9mYWlsZWQpOiBOZXcuCisJKF9nY3J5X2J1Zyk6IEFsc28gdXNlIGZ1bmMgdmFyaWFudCBmb3IgSVNPLUM5OS4KKworMjAwOC0wOC0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogdmlzaWJpbGl0eS5jLCB2aXNpYmlsaXR5LmggKGdjcnlfbXBpX2xzaGlmdCk6IE5ldy4KKwkqIGxpYmdjcnlwdC52ZXJzLCBsaWJnY3J5cHQuZGVmLCBnY3J5cHQuaC5pbjogRGl0dG8uCisKKzIwMDgtMDgtMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluIChnY3J5X2NpcGhlcl9zZXRrZXkpOiBSZXBsYWNlIG1hY3JvIGJ5IGZ1bmN0aW9uLgorCShnY3J5X2NpcGhlcl9zZXRpdik6ICBEaXR0by4KKwkoZ2NyeV9jaXBoZXJfc2V0Y3RyKTogRGl0dG8uCisJKiB2aXNpYmlsaXR5LmMgKGdjcnlfY2lwaGVyX3NldGtleSwgZ2NyeV9jaXBoZXJfc2V0aXYpCisJKGdjcnlfY2lwaGVyX3NldGN0cik6IE5ldy4KKwkqIHZpc2liaWxpdHkuaCAoZ2NyeV9jaXBoZXJfc2V0a2V5LCBnY3J5X2NpcGhlcl9zZXRpdikKKwkoZ2NyeV9jaXBoZXJfc2V0Y3RyKTogTmV3LgorCSogbGliZ2NyeXB0LnZlcnMgKGdjcnlfY2lwaGVyX3NldGtleSwgZ2NyeV9jaXBoZXJfc2V0aXYpCisJKGdjcnlfY2lwaGVyX3NldGN0cik6IE5ldy4KKwkqIGxpYmdjcnlwdC5kZWYgKGdjcnlfY2lwaGVyX3NldGtleSwgZ2NyeV9jaXBoZXJfc2V0aXYpCisJKGdjcnlfY2lwaGVyX3NldGN0cik6IE5ldy4KKworCSogaG1hYzI1Ni5oLCBobWFjMjU2LmM6IE5ldy4KKwkqIE1ha2VmaWxlLmFtIChobWFjMjU2X1NPVVJDRVMpOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoYmluX1BST0dSQU1TKTogQWRkIGhtYWMyNTYuCisKKwkqIGdjcnlwdC5oLmluIChzdHJ1Y3QgZ2NyeV90aHJlYWRfY2JzKTogQ2hhbmdlIHR5cGUgb2YgT1BUSU9OIHRvCisJdW5zaWduZWQgaW50LiAgQWx0aG91Z2ggdGhpcyBpcyBhIHR5cGUgY2hhbmdlIGl0IGRvZXMgbm90IG1ha2UgYQorCWRpZmZlcmVuY2UuCisJKiBhdGguYyAoYXRoX2luc3RhbGwpOiBUYWtlIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcHRpb24gZmllbGQgaW4KKwlhY2NvdW50LgorCisJKiB2aXNpYmlsaXR5LmMgKGdjcnlfcGtfZW5jcnlwdCwgZ2NyeV9wa19kZWNyeXB0LCBnY3J5X3BrX3NpZ24pCisJKGdjcnlfcGtfdmVyaWZ5LCBnY3J5X3BrX3Rlc3RrZXksIGdjcnlfcGtfZ2Vua2V5KQorCShnY3J5X3BrX2dldF9uYml0cywgZ2NyeV9wa19nZXRfa2V5Z3JpcCkKKwkoZ2NyeV9tZF9vcGVuLCBnY3J5X21kX2NvcHksIGdjcnlfbWRfZW5hYmxlKQorCShnY3J5X21kX3dyaXRlLCBtZF9maW5hbCwgZ2NyeV9tZF9jdGwsIGdjcnlfbWRfc2V0a2V5KQorCShnY3J5X21kX2hhc2hfYnVmZmVyLCBnY3J5X21kX2dldF9hbGdvLCBnY3J5X21kX2luZm8pCisJKGdjcnlfbWRfaXNfZW5hYmxlZCkKKwkoZ2NyeV9jaXBoZXJfb3BlbiwgZ2NyeV9jaXBoZXJfZW5jcnlwdCkKKwkoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgZ2NyeV9jaXBoZXJfY3RsKQorCShnY3J5X2NpcGhlcl9hbGdvX2luZm8pOiBDaGVjayB3aGV0aGVyIHRoZSBsaWJyYXJ5IGlzIG9wZXJhdGlvbmFsLgorCisJKiBjaXBoZXItcHJvdG8uaDogTmV3LgorCSogY2lwaGVyLmg6IEluY2x1ZGUgY2lwaGVyLXByb3RvLmguCisJKiB2aXNpYmlsaXR5Lmg6IFJlbW92ZSBkdXBsaWNhdGUgbWFjcm8gZGVmaW5pdGlvbnMuICBSZW1vdmUKKwlnY3J5X2NpcGhlcl9yZWdpc3RlciwgZ2NyeV9tZF9yZWdpc3RlciwJZ2NyeV9wa19yZWdpc3RlciBtYWNyb3MuCisJKiB2aXNpYmlsaXR5LmM6IEluY2x1ZGUgY2lwaGVyLXByb3RvLmguCisJKGdjcnlfY2lwaGVyX3JlZ2lzdGVyKTogUGFzcyBkdW1teSBleHRyYSBhcmdzIHRvIHRoZSBpbnRlcm5hbAorCXJlZ2lzdGVyIGZ1bmN0aW9uLgorCShnY3J5X21kX3JlZ2lzdGVyLCBnY3J5X3BrX3JlZ2lzdGVyKTogRGl0dG8uCisJKiBnMTBsaWIuaCAoc3RydWN0IGdjcnlfbW9kdWxlKTogQWRkIGZpZWxkIEVYVFJBU1BFQy4KKwkqIG1vZHVsZS5jIChfZ2NyeV9tb2R1bGVfYWRkKTogQWRkIGFyZyBFWFRSQVNQRUMuICBDaGFuZ2VkIGFsbAorCWNhbGxlcnMgdG8gcGFzcyBOVUxMLgorCisJKiBmaXBzLmM6IE5ldy4KKwkqIGdjcnlwdC5oLmluIChHQ1JZQ1RMX0ZJUFNfTU9ERV9QKTogTmV3LgorCSogZ2xvYmFsLmMgKGdsb2JhbF9pbml0KTogQ2FsbCBmaXBzIGluaXRpYWxpemF0aW9uLgorCShfZ2NyeV92Y29udHJvbCk6IEFkZCBHQ1JZQ1RMX0ZJUFNfTU9ERV9QIGNvZGUuCisJKHByaW50X2NvbmZpZyk6IEFkZCBjb25maWcgaXRlbSBmaXBzLW1vZGUuCisJKGdjcnlfc2V0X2FsbG9jYXRpb25faGFuZGxlcik6IERvIG5vdCBhbGxvdyB0aGUgdXNlIG9mIGN1c3RvbQorCWFsbG9jYXRpb24gaGFuZGxlcnMuCisJKGdjcnlfc2V0X291dG9mY29yZV9oYW5kbGVyKTogRGl0dG8uCisJKF9nY3J5X2dldF9kZWJ1Z19mbGFnKTogRG8gbm90IHJldHVybiBhbnkgZGVidWcgZmxhZ3MgaW4gZmlwcyBtb2RlLgorCSogbWlzYy5jIChfZ2NyeV9sb2d2KTogU2lnbmFsIGZpcHMgZXJyb3Igb24gQlVHIG9yIEZBVEFMLgorCShfZ2NyeV9mYXRhbF9lcnJvcik6IERpdHRvLgorCisyMDA4LTA3LTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbTogSW5jbHVkZSBsaWJyYW5kb20ubGEuCisKKzIwMDgtMDQtMTggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1pc3Npbmctc3RyaW5nLmMgKHZhc3ByaW50Zik6IFJlbW92ZS4gIEl0IGlzIG5vdCB1c2VkLiAgUmVwb3J0ZWQKKwlieSBTaW1vbiBKb3NlZnNzb24uCisKKzIwMDgtMDMtMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluIChnY3J5X2FjX2VtX3QsIGdjcnlfYWNfc2NoZW1lX3QpOiBSZW1vdmUgdHJhaWxpbmcKKwljb21tYSBmb3IgZnVsbCBDLTg5IGNvbXBhdGliaWxpdHkuCisKKzIwMDgtMDEtMjEgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogaHdmZWF0dXJlcy5jIChkZXRlY3RfaWEzMl9nbnVjKTogRml4IGlubGluZSBhc20uCisKKzIwMDctMTItMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHZpc2liaWxpdHkuYyAoZ2NyeV9tZF9oYXNoX2J1ZmZlcik6IERvbid0IHVzZSByZXR1cm4gdm9yIGEgdm9pZAorCWZ1bmN0aW9uLiAgSGV5LCB3aHkgZG9lcyBnY2Mgbm90IGNvbXBsYWluIGFib3V0IHRoaXM/CisJKGdjcnlfYWNfaW9faW5pdF92YSk6IERpdHRvLgorCisyMDA3LTEyLTA1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBod2ZlYXR1cmVzLmMgKGRldGVjdF9pYTMyX2dudWMpOiBEZXBlbmQgb24gRU5BQkxFX1BBRExPQ0tfU1VQUE9SVC4KKworMjAwNy0xMi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogbWlzYy5jIChfZ2NyeV9sb2d2KTogVXNlIGFib3J0IGZvciBlcnJvciBsZXZlbHMgZmF0YWwgYW5kIGJ1ZyBhcworCXRoaXMgaXMgbW9yZSBhcHByb3JpYXRlIGZvciBhIGxpYnJhcnkuICBUZXJtaW5hdGUgdGhlIHNlY21lbQorCWJlZm9yZSBkb2luZyBzby4KKwkoX2djcnlfZmF0YWxfZXJyb3IpOiBUZXJtaW5hdGUgc2VjbWVtIGJlZm9yZSBhYm9ydC4KKwkqIHNlY21lbS5jIChfZ2NyeV9zZWNtZW1fbWFsbG9jX2ludGVybmFsKTogVXNlIGxvZ19idWcgaW5zdGVhZCBvZgorCWV4aXQuCisKKzIwMDctMTEtMjkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGh3ZmVhdHVyZXMuYyAoZGV0ZWN0X2lhMzJfZ251Yyk6IERldGVjdCBQYWRsb2NrIGVuZ2luZS4KKworMjAwNy0xMS0xMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKF9HQ1JZX0dDQ19BVFRSX01BTExPQyk6IEZpeGVkIGdjYyB2ZXJzaW9uIGNoZWNrLgorCVJlcG9ydGVkIGJ5IEdhYnJpZWxlIE1vbnRpLgorCisyMDA3LTEwLTMxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKTogRmFjdG9yIG1vc3QgY29kZSBvdXQgdG8gLi4KKwkoX2djcnlfdmNvbnRyb2wpOiAuLiBuZXcuCisJKiBzZXhwLmMgKF9nY3J5X3NleHBfdmJ1aWxkKTogTmV3LgorCSogbXBpLmggKF9nY3J5X21waV9zZXQsIF9nY3J5X21waV9zZXRfdWksIF9nY3J5X21waV9pbnZtKTogUmVtb3ZlCisJcHJvdG90eXBlcyBhcyB0aGV5IGFyZSBhbHJlYWR5IGluIGdjcnlwdC5oLgorCisyMDA3LTEwLTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzZXhwLmMgKGdjcnlfc2V4cF9udGhfc3RyaW5nKTogUmVwbGFjZSBieSBfZ2NyeV9zZXhwX250aF9zdHJpbmcuCisKKwkqIHZpc2liaWxpdHkuaCwgdmlzaWJpbGl0eS5jOiBOZXcuCisJKiBnMTBsaWIuaDogSW5jbHVkZSB2aXNpYmlsaXR5LmggaW5zdGVhZCBvZiBnY3J5cHQuaC4KKwkqIGdsb2JhbHMuYyAoX2djcnlfbWFsbG9jKTogUmVuYW1lIHRvIC4uCisJKGRvX21hbGxvYyk6IC4uIHRoaXMuCisKKwkqIGh3ZmVhdHVyZXMuYzogTmV3LgorCSogZ2xvYmFsLmMgKGdsb2JhbF9pbml0KTogRGV0ZWN0IGZlYXR1cmVzLgorCShwcmludF9jb25maWcpOiBQcmludCB0aGVtLgorCisyMDA3LTA4LTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBkdW1wc2V4cC5jOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoYmluX1BST0dSQU1TKTogSW5zdGFsbCBpdC4KKworCSogZ2V0cmFuZG9tLmMgKHByaW50X3ZlcnNpb24pOiBVc2UgbmV3IHN0YW5kYXJkIGxpY2Vuc2UgbGluZS4KKwkqIGdjcnlwdHJuZC5jIChwcmludF92ZXJzaW9uKTogRGl0dG8uCisKKzIwMDctMDYtMDYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluIChHQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUEwpOiBGYWN0cm9yIG5ldHdvcmsKKwlyZWxhdGVkIGNvZGUgb3V0IHNvIHRoYXQgdGhlIHByb3RvdHlwZXMgY2FuIGJlIGFkanVzdGVkIGZvciBXMzIuCisJKF9HQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUExfTkVUKTogTmV3LgorCisyMDA3LTA1LTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBsaWJnY3J5cHQubTQ6IFByaW50IGZvdW5kIHZlcnNpb24gb24gc3VjY2Vzcy4KKworMjAwNy0wNS0wOSAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBnY3J5cHQuaC5pbiAoZ2NyeV9hY19pb190KTogQWRkIG5hbWUgZm9yIGFub255bW91cyB1bmlvbiwgYW5kIG1hcmsKKwlhbGwgbWVtYmVycyBhcyBpbnRlcm5hbCAoYWN0dWFsbHk6IGRlcHJlY2F0ZWQpLgorCisyMDA3LTA1LTA0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoLnJjLmxvKTogTmV3IHRvIHJlcGxhY2UgZ21ha2Ugc3BlY2lmaWMgc3VmZml4IHJ1bGUuCisKKzIwMDctMDUtMDMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGxpYmdjcnlwdC5kZWYgKGdjcnlfc2V4cF9udGhfc3RyaW5nKTogTmV3LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbGliZ2NyeXB0LmRlZi4KKworMjAwNy0wNS0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmMgKHByaW50X2NvbmZpZyk6IFByaW50IGNpcGhlcnMsIGRpZ2VzdHMgYW5kIHB1YmtleXMuCisKKzIwMDctMDUtMDIgIERhdmlkIFNoYXcgIDxkc2hhd0BqYWJiZXJ3b2NreS5jb20+CisKKwkqIGNpcGhlci5oLCBnY3J5cHQuaC5pbjogQWRkIENhbWVsbGlhLgorCisyMDA3LTA0LTMwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoR0NSWUNUTF9QUklOVF9DT05GSUcpOiBOZXcuCisJKEdDUllDVExfU0VUX1JOREVHRF9TT0NLRVQpOiBOZXcuCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKTogQWRkIEdDUllDVExfUFJJTlRfQ09ORklHIGFuZAorCUdDUllDVExfU0VUX1JOREVHRF9TT0NLRVQuCisJKHByaW50X2NvbmZpZyk6IE5ldy4KKwkqIG1pc2MuYyAoX2djcnlfbG9nX2luZm9fd2l0aF9kdW1teV9mcCk6IE5ldy4KKworMjAwNy0wNC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKGdjcnlfc2V4cF9udGhfc3RyaW5nKTogTmV3LgorCisJKiBzZXhwLmMgKGdjcnlfc2V4cF9udGhfZGF0YSk6IEZhY3RvcmVkIGNvZGUgb3V0IHRvIC4uLgorCShzZXhwX250aF9kYXRhKTogLi4uIG5ldy4KKwkoZ2NyeV9zZXhwX250aF9zdHJpbmcpOiBOZXcuCisJKGdjcnlfc2V4cF9udGhfbXBpKTogUmVpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBzZXhwX250ZF9kYXRhLgorCisyMDA3LTA0LTE2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzZWNtZW0uYyAoaW5pdF9wb29sKTogVXNlIHN5c2NvbmYoKSBpZiBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lCisJcGFnZSBzaXplLgorCisyMDA3LTAzLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBtcGkuaCAobXBpX21vZCk6IE5ldy4KKwkobXBpX25ldywgbXBpX3NuZXcpOiBOZXcuCisKKwkqIGdjcnlwdC5oLmluOiBBZGQgR0NSWV9QS19FQ0RTQS4KKworMjAwNy0wMy0xNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmguaW4gKEdDUllfVEhSRUFEX09QVElPTl9QVEhSRUFEX0lNUEwpOiBGaXhlZCB0eXBvCisJaW50cm9kdWNlZCBieSBtZSBvbiAyMDA2LTEwLTIzLgorCisyMDA3LTAyLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoZ2NyeV9hY19pZF90b19uYW1lLCBnY3J5X2FjX25hbWVfdG9faWQpOiBNYXJrIGFzCisJZGVwcmVjYXRlZC4KKworCSogbGliZ2NyeXB0LmRlZiAoZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKTogUmVtb3ZlZCAtIGl0IGlzIGEgbWFjcm8uCisJKGdjcnlfY2lwaGVyX3JlZ2lzdGVyLCBnY3J5X2NpcGhlcl91bnJlZ2lzdGVyKTogTmV3LgorCShnY3J5X21kX3JlZ2lzdGVyLCBnY3J5X21kX3VucmVnaXN0ZXIpOiBOZXcuCisJKGdjcnlfcGtfcmVnaXN0ZXIsIGdjcnlfcGtfdW5yZWdpc3Rlcik6IE5ldy4KKwkoZ2NyeV9hY19kYXRhX2Zyb21fc2V4cCwgZ2NyeV9hY19kYXRhX3RvX3NleHApOiBOZXcuCisJKGdjcnlfYWNfaW9faW5pdCwgZ2NyeV9hY19pb19pbml0X3ZhKTogTmV3LgorCShnY3J5X2FjX2RhdGFfZW5jcnlwdF9zY2hlbWUsIGdjcnlfYWNfZGF0YV9kZWNyeXB0X3NjaGVtZSk6IE5ldy4KKwkoZ2NyeV9hY19kYXRhX3NpZ25fc2NoZW1lLCBnY3J5X2FjX2RhdGFfdmVyaWZ5X3NjaGVtZSk6IE5ldy4KKworCSogbWlzc2luZy1zdHJpbmcuYzogSW5jbHVkZSBzdGRpby5oIGZvciB0aGUgdnNwcmludGYgcHJvdG90eXBlLgorCisJKiBhdGguaCAoc3RydWN0IGF0aF9vcHMpIFtfV0lOMzJdOiBVc2UgaW50IGluc3RlYWQgb2Ygc29ja2xlbl90LgorCisyMDA3LTAyLTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBsaWJnY3J5cHQuZGVmIChnY3J5X2NyZWF0ZV9ub25jZSwgZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKQorCShnY3J5X21kX2RlYnVnKTogTmV3LgorCisJKiBsaWJnY3J5cHQtY29uZmlnLmluOiBSZW1vdmUgZHVwbGljYXRlcyBmcm9tIC0tY2ZsYWdzIGFuZCAtLWxpYnMuCisJUHJpbnQgYSBlcnJvciBmb3Igb3B0aW9uIC0tdGhyZWFkLgorCisJKiBnY3J5cHQuaC5pbiAoZ2NyeV9zZXhwX3NwcmludCk6IENoYW5nZSBCVUZGRVIgZnJvbSBjaGFyKiB0byB2b2lkKi4KKwkoZ2NyeV9tZF9jdGwpOiBDaGFuZ2UgQlVGRkVSIGZyb20gdW5zaWduZWQgY2hhciogdG8gdm9pZCouCisJKGdjcnlfbWRfZGVidWcpOiBOZXcuCisJKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGdjcnlfY2lwaGVyX2RlY3J5cHQpOiBDaGFuZ2UgYnVmZmVyIGFyZ3MgdG8KKwl2b2lkKi4KKwkoZ2NyeV9yYW5kb21pemUpOiBDaGFuZ2UgQlVGRkVSIHRvIHZvaWQuCisJKGdjcnlfY3JlYXRlX25vbmNlKTogRGl0dG8uCisKKwkqIGxpYmdjcnlwdC52ZXJzIChnY3J5X21kX2RlYnVnKTogTmV3LgorCisJKiBzZXhwLmMgKGdjcnlfc2V4cF9zcHJpbnQpOiBEaXR0by4KKwkobm9ybWFsaXplKTogTWFrZSBQIHVuc2lnbmVkLgorCShnY3J5X3NleHBfbnRoX2RhdGEpOiBDYXN0IHJldHVybiB2YWx1ZSB0byBjaGFyKi4KKwkoc2V4cF9zc2Nhbik6IEZpeCBzaWduL3Vuc2lnbmVkIGNvbmZsaWN0cy4KKwkod2hpdGVzcGFjZXApOiBDaGFuZ2UgUCB0byBjaGFyKi4KKwkodW5xdW90ZV9zdHJpbmcpOiBDaGFuZ2UgU1RSSU5HIHRvIGNoYXIqLgorCShjb252ZXJ0X3RvX2hleCk6IENoYW5nZSBERVNUIHRvIGNoYXIqLgorCShjb252ZXJ0X3RvX3N0cmluZyk6IENoYW5nZSBERVNUIGFuZCBQIHRvIGNoYXIqLgorCShjb252ZXJ0X3RvX3Rva2VuKTogQ2huYWdlIERFU1QgdG8gY2hhciouCisJKGdjcnlfc2V4cF9jYW5vbl9sZW4pOiBDaGFuZ2UgRElTUEhJTlQgdG8gdW5zaWduZWQgY2hhciouCisKKwkqIGdjcnlwdC1tb2R1bGUuaCAoZ2NyeV9wa19zcGVjKTogTWFkZSBBTElBU0VTIGEgY29uc3QuCisJKGdjcnlfbWRfd3JpdGVfdCk6IENoYW5nZWQgQlVGIHRvIGEgY29uc3Qgdm9pZCouCisKKzIwMDctMDItMTIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oLmluOiBJbmNsdWRlIHN0ZGxpYi5oIGZvciB0aGUgc2FrZSBmbyB0aGUgdHJoZWFkaW5nCisJbWFjcm9zLiAgU3VnZ2VzdGVkIGJ5IEFuZHJlYXMgTWV0emxlci4KKworCSogc2VjbWVtLmMgKHB0cl9pbnRvX3Bvb2xfcCk6IE5ldy4KKwkoX2djcnlfcHJpdmF0ZV9pc19zZWN1cmUpOiBJbXBsZW1lbnQgaW4gdGVybXMgb2YgbmV3IGZ1bmN0aW9uLgorCShCTE9DS19WQUxJRCk6IFJlbW92ZWQuICBSZXBsYWNlZCBhbGwgdXNlcnMgYnkgbmV3IGZ1bmN0aW9uLgorCisyMDA3LTAxLTMxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBzZWNtZW0uYyAoX2djcnlfcHJpdmF0ZV9pc19zZWN1cmUpOiBGaXhlZCBzZXZlcmUgaW1wbGVtZW50YXRpb24KKwlmbGF3LiAgTWlnaHQgYmUgdGhlIHJlYXNvbiBmb3Igc29tZSBvZiB0aGUgbW9yZSBvYnNjdXJlIGJ1Z3MuCisJKE1CX1dJUEVfT1VUKTogVXNlIHdpcGVtZW1vcnkyLgorCisyMDA2LTEwLTIzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaC5pbiAoR0NSWV9USFJFQURfT1BUSU9OX1BUSFJFQURfSU1QTCk6IEFkZCBzb21lIGNhc3QgZm9yCisJdXNlIGJ5IEMtZG91YmxlcGx1cy4gIEluIGdlbmVyYWwgSSBkb24ndCBsaWtlIHRoaXMgYnV0IGR1ZSB0bworCXB1YmxpYyBkZW1hbmQgSSBnaXZlIHVwIDstKQorCisyMDA2LTEwLTE5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKSA8R0NSWUNUTF9JTklUX1NFQ01FTT46IFJldHVybiBhbiBlcnJvcgorCWlmIHRoZSBtZW1vcnkgY291bGQgbm90IGJlIGxvY2tlZC4KKwkqIHNlY21lbS5jIChub3RfbG9ja2VkKTogTmV3LgorCShfZ2NyeV9zZWNtZW1fZ2V0X2ZsYWdzKTogUmV0dXJuIHRoYXQgZmxhZy4KKwkqIHNlY21lbS5oIChHQ1JZX1NFQ01FTV9GTEFHX05PVF9MT0NLRUQpOiBOZXcuCisKKzIwMDYtMTAtMDUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1vZHVsZS5jIChfZ2NyeV9tb2R1bGVfaWRfbmV3KTogRG9uJ3QgYXNzaWduIG1vZHVsZXMgaW4gdGhlIHJhbmdlCisJdGhlIHJhbmdlIG9mIDEwMjQuLjQwOTYuCisJKiBnY3J5cHQuaCAoR0NSWV9NRF9VU0VSLCBHQ1JZX01EX1VTRVJfTEFTVCk6IE5ldworCShHQ1JZX1BLX1VTRVIsIEdDUllfUEtfVVNFUl9MQVNUKTogTmV3LgorCShHQ1JZX0NJUEhFUl9VU0VSLCBHQ1JZX0NJUEhFUl9VU0VSX0xBU1QpOiBOZXcuCisKKzIwMDYtMTAtMTIgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogZ2NyeXB0LmguaW46IFJlcGxhY2Ugc29ja2xlbl90IHdpdGggZ2NyeV9zb2NrbGVuX3QuCisKKzIwMDYtMTAtMTEgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogZ2NyeXB0LmguaW46IFJlcGxhY2UgdmVyc2lvbiBieSBAVkVSU0lPTkAuCisKKzIwMDYtMTAtMTAgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogZ2NyeXB0Lmg6IEFkZCBmYWxsYmFjayB0eXBlIGZvciBzb2NrbGVuX3QuICBNb3ZlIHRvIC4uLgorCSogZ2NyeXB0LmguaW46IC4uLiB0aGlzIGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBnY3J5cHQuaC5pbi4KKworMjAwNi0wOS0wNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0Lmg6IFJlbW92ZWQgc29tZSB0cmFpbGluZyBjb21tYSBpbiBlbnVtcy4KKworMjAwNi0wOC0yOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmMgKGdjcnlfeHJlYWxsb2MpOiBQYXNzIHNlY3VyZSBmbGFnIHRvIG91dG9mY29yZSBoYW5kbGVyLgorCisJKiBnY3J5cHQuaCAoR0NSWV9DSVBIRVJfU0VFRCk6IE5ldy4KKworMjAwNi0wOC0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKEdDUllDVExfRkFLRURfUkFORE9NX1ApOiBOZXcuCisKKzIwMDYtMDctMjkgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogc2VjbWVtLmMgKGluaXRfcG9vbCk6IENsb3NlIEZEIGFmdGVyIGVzdGFibGlzaGluZyB0aGUgbWFwcGluZy4KKworMjAwNi0wNy0xMiAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBhdGguYyAoYXRoX211dGV4X2Rlc3Ryb3kpOiBNaWNyb29wdGltaXplIGRlc3RydWN0aW9uIG9mIHVudXNlZAorCXN0YXRpdGljYWxseSBpbml0aWFsaXplZCBtdXRleGVzLiAgU3VnZ2VzdGVkIGJ5IFZpY3RvciBTdGlubmVyCisJPHZpY3Rvci5zdGlubmVyQGlubC5mcj4uCisKKwkqIGdjcnlwdC5oIChHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRF9JTVBMLAorCShHQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUEwpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMgdG8KKwlzdXBwcmVzcyBnY2Mgd2FybmluZy4KKwlTdWJtaXR0ZWQgYnkgVmljdG9yIFN0aW5uZXIgPHZpY3Rvci5zdGlubmVyQGlubC5mcj4uCisKKzIwMDYtMDctMDQgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogYXRoLmM6IEF2b2lkIHdhcm5pbmcgYWJvdXQgZG91YmxlIGRlZmluZWQgdHlwZSBieXRlIGFuZCBvdGhlcgorCWhhY2tzIHRvIGxldCBpdCBidWlsZCBmb3IgVzMyIChiYWNrcG9ydGVkIGZyb20gTElCR0NSWVBULTEtMi1CUkFOQ0gpLgorCSogYXRoLmgsIGdjcnlwdC5oLCB0ZXN0cy9iZW5jaG1hcmsuYywgc3JjL3R5cGVzLmg6IExpa2V3aXNlLgorCisJKiBnY3J5cHQuaDogUmV2ZXJ0IGxhc3QgY2hhbmdlLCBhbmQgaW5zdGVhZDoKKwlbX1dJTjMyIHx8IF9fV0lOMzJfX106IERvIG5vdCBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+LCBidXQKKwk8d2luc29jazIuaD4gYW5kIDx3czJ0Y3BpcC5oPi4KKwlTdWdnZXN0ZWQgYnkgU2ltb24gSm9zZWZzc29uIDxqYXNAZXh0dW5kby5jb20+LgorCisJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1kYXRhLWxvY2FsLCB1bmluc3RhbGwtbG9jYWwsICUubG8sCisJKGluc3RhbGwtZGVmLWZpbGUsIHVuaW5zdGFsbC1kZWYtZmlsZSk6IE5ldyB0YXJnZXRzLgorCShMVFJDQ09NUElMRSwgZ2NyeXB0X3JlcywgZ2NyeXB0X3Jlc19sZGZsYWcsIG5vX3VuZGVmaW5lZCwKKwkoZXhwb3J0X3N5bWJvbHMsIGdjcnlwdF9kZXBzKTogTmV3IHZhcmlhYmxlcy4KKwkqIHZlcnNpb25pbmZvLnJjLmluOiBOZXcgZmlsZS4KKwkqIGxpYmdjcnlwdC5kZWY6IE5ldyBmaWxlIGZyb20gLi4vdzMyLWRsbC9saWJnY3J5cHQuZGVmLgorCisJKiBnY3J5cHQuaCBbIUhBVkVfU1lTX1NPQ0tFVF9IXTogRG8gbm90IGluY2x1ZGUgc3lzL3NvY2tldC5oLCBidXQKKwl0aGUgYXBwcm9wcmlhdGUgd2luZG93cyBzb2NrZXQgaGVhZGVyLgorCisyMDA2LTA2LTIxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV94Y2FsbG9jLCBnY3J5X3hjYWxsb2Nfc2VjdXJlKTogTWFkZSBzYWZlIGFnYWluc3QKKwlpbnRlZ2VyIG92ZXJmbG93LgorCisJKiBzZXhwLmMgKG1ha2Vfc3BhY2UpOiBSZXR1cm4gYW4gZXJyb3Igb24gb3V0IG9mIGNvcmUuCisJKHNleHBfc3NjYW4pOiBSZW1vdmUgYWxsIHhtYWxsb2Mgc3R5bGUgY2FsbHMgYW5kIHJldHVybiBwcm9wZXIKKwllcnJvciBjb2RlcyBvbiBhbGxvY2F0aW9uIGZhaWx1cmVzLgorCShnY3J5X3NleHBfZmluZF90b2tlbik6IERpdHRvLgorCShnY3J5X3NleHBfbnRoKToKKworCSogc2V4cC5jIChnY3J5X3NleHBfZmluZF90b2tlbik6IFJlLWluZGVudGVkIGFuZCByZW1vdmVkIGEgY3J1ZnQKKwkid2hpbGUobGV2ZWwpOyIgd2hpY2ggZm9ydHVuYXRlbHkgaGFkIG5vIGVmZmVjdC4KKworMjAwNi0wNC0yOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKEdDUllfTURfU0hBMjI0KTogQ2hhbmdlIHZhbHVlIGZyb20gMzA2IHRvIDExIHRvIG1hdGNoCisJdGhlIHVzZSBpbiBPcGVuUEdQLiAgVGhlcmUgaGFzIGJlZW4gbm8gcmVsZWFzZSB5ZXQsIHNvIHdlIGNhbgorCXNhZmVseSBkbyBpdC4KKworMjAwNi0wNC0yMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oIChnY3J5X2N0bF9jbWRzKTogTmV3IGNvbW1hbmRzOgorCUdDUllDVExfU0VUX1JBTkRPTV9EQUVNT05fU09DS0VULCBHQ1JZQ1RMX1VTRV9SQU5ET01fREFFTU9OLgorCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IEhhbmRsZSBuZXcgY29tbWFuZHMsIGNhbGxpbmcKKwlfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQoKSBhbmQgX2djcnlfdXNlX3JhbmRvbV9kYWVtb24oKS4KKworMjAwNi0wNC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKEdDUllfUEtfVVNBR0VfQ0VSVCwgR0NSWV9QS19VU0FHRV9BVVRIKQorCShHQ1JZX1BLX1VTQUdFX1VOS04pOiBOZXcuCisKKzIwMDYtMDQtMDEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9hY19lbWVfcGtjc192MV81KTogUmVtb3ZlZCBtZW1iZXJzOiBrZXksIGhhbmRsZTsKKwlhZGRlZCBtZW1iZXI6IGtleV9zaXplLgorCisJKiBzZWNtZW0uYyAoTUJfRkxBR19BQ1RJVkUpOiBXcml0ZSBicmFjZXMgYXJvdW5kIE1CX0ZMQUdfQUNUSVZFCisJZGVmaW5pdGlvbi4KKworMjAwNi0wMy0xNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2V0cmFuZG9tLmM6IE5ldy4KKworMjAwNi0wMy0xNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0cm5kLmM6IE5ldy4KKworMjAwNi0wMy0xMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0Lmg6IEFkZCBHQ1JZX01EX1NIQTIyNC4KKworMjAwNS0xMS0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oOiBVcGRhdGUgY29tbWVudHMgZm9yIGZ1bmN0aW9uczogZ2NyeV9jaXBoZXJfYWxnb19uYW1lLAorCWdjcnlfcGtfYWxnb19uYW1lLgorCisyMDA1LTEwLTMxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmM6IEFkZGVkIGRvY3VtZW50YXRpb24uCisKKzIwMDUtMTAtMTYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2xvYmFsX2luaXQpOiBVc2UgZ2NyeV9lcnJvcl90IGluc3RlYWQgb2YKKwlnY3J5X2Vycl9jb2RlX3Q7IHVzZSBnb3RvIGluc3RlYWQgb2YgaWYgY29uc3RydWN0cy4KKworCSogc3RkbWVtLmM6IEluc2VydGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXllcmVkIG1lbW9yeSBtYW5hZ2VtZW50CisJaW4gTGliZ2NyeXB0LgorCisJKiBnMTBsaWIuaDogUmVtb3ZlZCBHMTBfSTE4Tl9IIHJlbGF0ZWQgY2hlY2s7IGl0IHNlZW1zIHRvIGJlIGEKKwlHbnVQRyByZWxpY3QgKExpYmdjcnlwdCBkb2VzIG5vdCBkZWZpbmUgdGhpcyBzeW1ib2wgYW55d2hlcmUpLgorCShGTEFHX01PRFVMRV9ESVNBQkxFRCk6IERvbid0IGZvcmdldCBwYXJhbnRoZXNlcyBhcm91bmQgc2hpZnRlZAorCXZhbHVlLgorCisJUmVtb3ZlZCBHQ0NfQVRUUl9QVVJFIG1hY3JvIGRlZmluaXRpb25zLCBzaW5jZSBnY3J5cHQuaCBkb2VzCisJYWxyZWFkeSBjb250YWluIHN1Y2ggYSBtYWNybyBuYW1lZCBfR0NSWV9HQ0NfQVRUUl9QVVJFLCB3aGljaCB3ZQorCWNhbiB1c2UgaGVyZSBhcyB3ZWxsLgorCisJTGlrZXdpc2UgZm9yIEdDQ19BVFRSX01BTExPQyBhbmQgX0dDUllfR0NDX0FUVFJfTUFMTE9DLgorCisJKiBzdGRtZW0uaDogVXNlIF9HQ1JZX0dDQ19BVFRSX01BTExPQyBpbnN0ZWFkIG9mIEdDQ19BVFRSX01BTExPQy4KKwkqIHNlY21lbS5oOiBMaWtld2lzZS4KKworMjAwNS0xMC0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdsb2JhbC5jIChnY3J5X2NvbnRyb2wpOiBDYWxsIGdsb2JhbF9pbml0KCkgYWZ0ZXIgcGFzc2luZyB0aHJlYWQKKwljYnMgdG8gYXRoLiAgZ2xvYmFsX2luaXQoKSBNVVNUIHRvIGJlIGNhbGxlZCBBRlRFUiBwYXNzaW5nIHRoZSBjYnMKKwl0byBhdGggYW5kIEJFRk9SRSBjYWxsaW5nIGxpYnJhcnkgZnVuY3Rpb25zLCB3aGljaCBtYWtlIHVzZSBvZgorCWF0aC4gIFRoaXMgY2hhbmdlIGNvbWJpbmVzIGNicyBpbnN0YWxsaW5nIHdpdGggYXRoIGluaXRpYWxpemF0aW9uCisJYW5kIHRodXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBjYWxsIG90aGVyIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24KKwlmdW5jdGlvbnMgaW5iZXR3ZWVuIGxpa2UgZS5nLiBnY3J5X2NoZWNrX3ZlcnNpb24oKS4KKworMjAwNS0xMC0wMSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGF0aC5jOiBBc3NpZ24gY29weXJpZ2h0IHRvIEZTRi4KKwkqIGF0aC5oOiBMaWtld2lzZS4KKworMjAwNS0wNi0yNSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChwa2djb25maWdkaXIsIHBrZ2NvbmZpZ19EQVRBKTogUmVtb3ZlZCB2YXJpYWJsZXMuCisJKiBsaWJnY3J5cHQucGMuaW46IFJlbW92ZWQgZmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIHN1cHBvcnQgYQorCXNlY29uZCwgZm9yZWlnbiBjb25maWd1cmF0aW9uIHN5c3RlbS4KKworMjAwNS0wNi0xNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdsb2JhbC5jIChnY3J5X3hzdHJkdXApOiBSZW1vdmVkIHN1cGVyZmx1b3VzIHN0cmNweSBjYWxsLgorCisyMDA1LTA0LTIyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ2RpciwgcGtnY29uZmlnX0RBVEEpOiBOZXc7IHN1cHBvcnQgZm9yCisJcGtnY29uZmlnIHByb3ZpZGVkIGJ5IEFsYmVydCBDaGluLgorCSogbGliZ2NyeXB0LnBjLmluIChDZmxhZ3MpOiBOZXcgZmlsZS4KKworMjAwNS0wNC0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGcxMGxpYi5oIChfZ2NyeV9hY19pbml0KTogRGVjbGFyZS4KKwkqIGdsb2JhbC5jIChnbG9iYWxfaW5pdCk6IENhbGwgX2djcnlfYWNfaW5pdDsgZG9uJ3QgZm9yZ2V0IHRvIHNldAorCWVyci4KKworMjAwNS0wNC0xNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogc2V4cC5jICh3aGl0ZXNwYWNlcCk6IE5ldy4KKwkoc2V4cF9zc2Nhbik6IFJlcGxhY2VkIGlzZGlnaXQgYW5kIGlzc3BhY2UgYnkgd2hpdGVzcGFjZXAgYW5kCisJZGlnaXRwLgorCisyMDA1LTA0LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKGdjcnlfbWRfYWxnb3MpOiBBZGRlZDogR0NSWV9NRF9XSElSTFBPT0wuCisJKiBjaXBoZXIuaCAoX2djcnlfZGlnZXN0X3NwZWNfd2hpcmxwb29sKTogRGVjbGFyZS4KKworMjAwNS0wMy0zMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGxpYmdjcnlwdC52ZXJzOiBBZGRlZDogZ2NyeV9hY19pb19pbml0LCBncnlfYWNfaW9faW5pdF92YS4KKworCSogZ2NyeXB0LmggKGdjcnlfYWNfZGF0YV9yZWFkX2NiX3QsIGdjcnlfYWNfZGF0YV93cml0ZV9jYl90LAorCWdjcnlfYWNfaW9fbW9kZV90LCBnY3J5X2FjX2lvX3R5cGVfdCwgZ2NyeV9hY19pb190KTogTmV3IHR5cGVzLgorCShnY3J5X2FjX2lvX2luaXRfdmEpOiBEZWNsYXJlIGZ1bmN0aW9uLgorCShnY3J5X2FjX2RhdGFfZW5jb2RlLCBnY3J5X2FjX2RhdGFfZGVjb2RlLAorCWdjcnlfYWNfZGF0YV9lbmNyeXB0X3NjaGVtZSwgZ2NyeV9hY19kYXRhX2RlY3J5cHRfc2NoZW1lLAorCWdjcnlfYWNfZGF0YV9zaWduX3NjaGVtZSwgZ2NyeV9hY19kYXRhX3ZlcmlmeV9zY2hlbWUpOiBVc2UKKwlnY3J5X2FjX2lvX3R5cGVfdCBvYmplY3RzIGluc3RlYWQgb2YgbWVtb3J5IHN0cmluZ3MgZGlyZWN0bHkuCisKKzIwMDUtMDMtMDMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBsaWJnY3J5cHQudmVyczogQWRkZWQ6IGdjcnlfYWNfZGF0YV90b19zZXhwKCkgYW5kCisJZ2NyeV9hY19kYXRhX2Zyb21fc2V4cCgpLgorCisyMDA1LTAyLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoX2djcnlfbWFsbG9jKTogTWFrZSBzdXJlIEVSUk5PIGlzIHNldCBpZiB3ZSByZXR1cm4KKwlOVUxMLiAgUmVtb3ZlIHVubmVlZGVkIGluaXRpYWxpemF0aW9uIG9mIE0gdG8gYWxsb3cgdGhlIGNvbXBpbGVyCisJdG8gY2F0Y2ggZXJyb3JzLgorCShnY3J5X3JlYWxsb2MpOiBNYWtlIHN1cmUgRVJSTk8gaXMgc2V0IGlmIHdlIHJldHVybiBOVUxMPgorCisyMDA1LTAyLTEzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0Lmg6IERlY2xhcmUgbmV3IGZ1bmN0aW9uczogZ2NyeV9hY19kYXRhX2VuY3J5cHRfc2NoZW1lLAorCWdjcnlfYWNfZGF0YV9kZWNyeXB0X3NjaGVtZSwgZ2NyeV9hY19kYXRhX3NpZ25fc2NoZW1lLAorCWdjcnlfYWNfZGF0YV92ZXJpZnlfc2NoZW1lLCBnY3J5X2FjX2RhdGFfZW5jb2RlLAorCWdjcnlfYWNfZGF0YV9kZWNvZGUsIGdjcnlfYWNfZGF0YV90b19zZXhwLCBnY3J5X2FjX2RhdGFfZnJvbV9zZXhwLgorCU5ldyB0eXBlczogZ2NyeV9hY19lbXNhX3BrY3NfdjFfNV90LCBnY3J5X2FjX3NzYV9wa2NzX3YxXzVfdCwKKwlnY3J5X21kX2FsZ29fdC4KKwlOZXcgZW51bWVyYXRpb24gbGlzdHM6IGdjcnlfYWNfc2NoZW1lX3QsIGdjcnlfYWNfZW1fdC4KKwkqIGxpYmdjcnlwdC52ZXJzOiBBZGRlZCBuZXcgYWMgZnVuY3Rpb25zLgorCSogZzEwbGliLmg6IERlY2xhcmUgZnVuY3Rpb246IF9nY3J5X3BrX2dldF9lbGVtZW50cy4KKwkqIG1waS5oIChtcGlfZ2V0X3VpKTogTmV3IG1hY3JvLgorCURlY2xhcmUgZnVuY3Rpb246IF9nY3J5X21waV9nZXRfdWkuCisKKzIwMDQtMTEtMDkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oOiBSZW1vdmVkIDMgdHJhaWxpbmcgY29tbWFzIGZyb20gZW51bXMuICBOb3RlZCBieSBIZWlrbworCVN0YW1lci4KKworMjAwNC0wOS0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmRlPgorCisJKiBzZXhwLmMgKHNleHBfc3NjYW4pOiBSZW1vdmVkIEMrKyBzdHlsZSBjb21tZW50cy4gIE5vdGVkIGJ5IFlvYW5uCisJVmFuZG9vcnNlbGFlcmUuCisKKzIwMDQtMDgtMjMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYzogRG8gbm90IGluY2x1ZGUgPGFzc2VydC5oPi4KKwkqIHNleHAuYzogTGlrZXdpc2UuCisJKiBtb2R1bGUuYzogTGlrZXdpc2UuCisJKiBtaXNjLmM6IExpa2V3aXNlLgorCisyMDA0LTA4LTE4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9pbml0KTogVHJ5IHRvIGxvY2sgcG9vbCBpbnRvIGNvcmUgbm90CisJb25seSB3aGVuIHJ1bm5pbmcgd2l0aCByb290IHByaXZpbGVnZXMuCisKKzIwMDQtMDgtMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5kZT4KKworCSogc2VjbWVtLmggKF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MsX2djcnlfc2VjbWVtX2dldF9mbGFncyk6CisJUmVtb3ZlZCBfX3B1cmVfXy4KKwkoR0NSWV9TRUNNRU1fRkxBR19OT19XQVJOSU5HKTogUHV0IG1hY3JvIHZhbHVlIGludG8gcGFyZW5zLgorCisJKiBzZWNtZW0uYyAoX2djcnlfc2VjbWVtX2luaXQpOiBEZWZlciBwcmludGluZyBvZiB0aGUgd2FybmluZy4KKworMjAwNC0wOC0xMCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oOiBJbmNsdWRlIDxzeXMvdGltZS5oPiwgdGhhbmtzIHRvIFNpbW9uIEpvc2Vmc3Nvbi4KKworMjAwNC0wNS0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBBZGRlZCBHQ1JZQ1RMX0ZBU1RfUE9MTC4KKwkoZ2NyeV9mYXN0X3JhbmRvbV9wb2xsKTogTmV3LgorCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCkgPElOSVRJQUxJWkFUSU9OX0ZJTklTSEVEPjogRG8gb25seSBiYXNpYworCXJhbmRvbSBzdWJzeXN0ZW0gaW5pdC4KKwkoZ2NyeV9jb250cm9sKSA8RkFTVF9QT0xMPjogTmV3LgorCisyMDA0LTA0LTIyICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIGxpYmdjcnlwdC5tNDogUXVvdGUgZmlyc3QgYXJndW1lbnQgdG8gQUNfREVGVU4uCisKKzIwMDQtMDQtMTUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBzZWNtZW0uYyAoX2djcnlfc2VjbWVtX21hbGxvY19pbnRlcm5hbCk6IFJlbW92ZWQgb2xkIGV4dHJhIGluZm8KKwllcnJvciBvdXRwdXQuCisJKF9nY3J5X3NlY21lbV90ZXJtKTogVXNlIHdpcGVtZW1vcnkyIGhlcmUuCisKKwkqIG1pc2MuYyAoX2djcnlfYnVybl9zdGFjayk6IFVzZSB3aXBlbWVtb3J5IHRvIGF2b2lkIG9wdGltaXphdGlvbnMuCisKKwkqIHN0cmluZy5jOiBSZW1vdmVkLiAgV2FzIG5ldmVyIHVzZWQuCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJkdXApOiBSZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBmcm9tIHN0cmluZy5jCisJKGdjcnlfeHN0cmR1cCk6IFJld3JpdHRlbi4KKwkqIGdjcnlwdC5oOiBSZW1vdmVkIGR1cGxpY2F0ZSBwcm90b3R5cGUgZm9yIGdjcnlfc3RyZHVwLgorCisyMDA0LTAzLTI5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9yZWFsbG9jKTogRml4ZWQgZG91YmxlIHVubG9jazsgYnVnCisJbWFuaWZlc3RlZCBpdHNlbGYgZHVlIHRvIHRoZSBtb3JlIHJpZ29yb3VzIGNoZWNraW5nIGluIHRoZSBjaGFuZ2VkCisJYXRoLmgKKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbiAoT3B0aW9ucyk6IElnbm9yZSB0aGUgb2Jzb2xldGUgLS10aHJlYWRzCisJb3B0aW9uIGZvciBub3cuCisKKzIwMDQtMDMtMTcgIE1hcmN1cyBCcmlua21hbm4gIDxtYXJjdXNAZzEwY29kZS5kZT4KKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbiAoaW5jbHVkZWRpciwgbGliZGlyKTogUXVvdGUnZW0uICBVc2UKKwkkZ3BnX2Vycm9yX2NmbGFncyBhbmQgJGdwZ19lcnJvcl9saWJzLiAgRml4IGNvbnN0cnVjdGlvbiBvZgorCSRpbmNsdWRlcy4KKworMjAwNC0wMy0xNCAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBsaWJnY3J5cHQtY29uZmlnLmluIChpbmNsdWRlZGlyLCBsaWJkaXIpOiBOZXcgdmFyaWFibGVzLiAgRm9yCisJLS1jZmxhZ3MsIGRvbid0IHRlc3QgJGNmbGFncy4gIEFsc28gY2hlY2sgYWdhaW5zdCAvaW5jbHVkZSBmb3IgdGhlCisJR05VL0h1cmQuICBEb24ndCBvdmVyd3JpdGUgYnV0IGV4dGVuZCAkY2ZsYWdzX2ZpbmFsLiAgTGlrZXdpc2UgZm9yCisJLS1saWJzLgorCisyMDA0LTAzLTEwICBNYXJjdXMgQnJpbmttYW5uICA8bWFyY3VzQGcxMGNvZGUuZGU+CisKKwkqIE1ha2VmaWxlLmFtIChsdGxpYl9saWJnY3J5cHRfcHRocmVhZCwgbHRsaWJfbGliZ2NyeXB0X3B0aCk6IFJlbW92ZWQuCisJKGxpYl9MVExJQlJBUklFUyk6IFJlbW92ZSB0aG9zZSB2YXJpYWJsZXMgZnJvbSBoZXJlLgorCShsaWJnY3J5cHRfcHRocmVhZF9sYV9TT1VSQ0VTLCBsaWJnY3J5cHRfcHRocmVhZF9sYV9MREZMQUdTLAorCShsaWJnY3J5cHRfcHRocmVhZF9sYV9ERVBFTkRFTkNJRVMsIGxpYmdjcnlwdF9wdGhyZWFkX2xhX0xJQkFERCwKKwkobGliZ2NyeXB0X3B0aF9sYV9TT1VSQ0VTLCBsaWJnY3J5cHRfcHRoX2xhX0xERkxBR1MsCisJKGxpYmdjcnlwdF9wdGhfbGFfREVQRU5ERU5DSUVTLCBsaWJnY3J5cHRfcHRoX2xhX0xJQkFERCwKKwkobm9pbnN0X0xUTElCUkFSSUVTKTogUmVtb3ZlZC4KKwkobGliZ2NyeXB0X3JlYWxfbGFfU09VUkNFUyk6IE1lcmdlIHdpdGggLi4uCisJKGxpYmdjcnlwdF9sYV9TT1VSQ0VTKTogLi4uIGxpa2V3aXNlLgorCShsaWJnY3J5cHRfcmVhbF9sYV9ERVBFTkRFTkNJRVMpOiBNZXJnZSB3aXRoIC4uLgorCShsaWJnY3J5cHRfbGFfREVQRU5ERU5DSUVTKTogLi4uIHRoaXMuCisJKGxpYmdjcnlwdF9yZWFsX2xhX0xJQkFERCk6IE1lcmdlIHdpdGggLi4uCisJKGxpYmdjcnlwdF9sYV9MSUJBREQpOiAuLi4gdGhpcy4KKwkqIGxpYmdjcnlwdC1jb25maWcuaW4gKGxpYnNfcHRocmVhZCwgbGlic19wdGgsIGNmbGFnc19wdGgpCisJKGNmbGFnc19wdGhyZWFkLCB0aHJlYWRfbW9kdWxlLCB0aHJlYWRfbW9kdWxlcyk6IFJlbW92ZWQuCisJKE9wdGlvbnMpOiBSZW1vdmUgLS10aHJlYWQgb3B0aW9uIGZyb20gaGVscCBvdXRwdXQuICBJZiB0aGUgb3B0aW9uCisJaXMgc3BlY2lmaWVkLCBvdXRwdXQgYW4gZXJyb3IgYW5kIGV4aXQuCisJRm9yIC0tY2ZsYWdzIGFuZCAtLWxpYnMgb3B0aW9uLCByZW1vdmUgcHRoIGFuZCBwdGhyZWFkIGZyb20gb3V0cHV0LgorCSogZ2NyeXB0Lmg6IEluY2x1ZGUgPHN5cy90eXBlcy5oPiBhbmQgPHN5cy9zb2NrZXQuaD4uCisJKGVudW0gZ2NyeV9jdGxfY21kcyk6IEFkZCBHQ1JZQ1RMX1NFVF9USFJFQURfQ0JTLgorCShnY3J5X3RocmVhZF9jYnMpOiBOZXcgc3RydWN0LgorCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IEltcGxlbWVudCBHQ1JZQ1RMX1NFVF9USFJFQURfQ0JTLgorCShnbG9iYWxfaW5pdCk6IERvbid0IGNhbGwgYXRoX2luaXQgaGVyZS4KKwkqIGF0aC5oOiBSZXdyaXR0ZW4uCisJKiBhdGguYzogUmV3cml0dGVuLgorCisyMDA0LTAzLTA2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbjogcy8tLXNvbmFtZS1udW1iZXIvLS1hcGktdmVyc2lvbi8KKwkqIGxpYmdjcnlwdC5tNDogQ2hhbmdlZCB0ZXN0IGZvciBBUEkgdmVyc2lvbi4KKworMjAwNC0wMy0wNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGxpYmdjcnlwdC5tNDogT3B0aW9uYWxseSBjaGVjayB0aGUgU09OQU1FIG51bWJlci4KKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbjogQWRkIG9wdGlvbiAtLXNvbmFtZS1udW1iZXIKKworMjAwNC0wMy0wMSAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBNYWtlZmlsZS5hbSAobGliZ2NyeXB0X2xhX1NPVVJDRVMpOiBBZGQgYXRoLmMuCisJKiBhdGguYyAoYXRoX2luaXQpOiBBZGQgbWlzc2luZyBmdW5jdGlvbi4KKworCSogTWFrZWZpbGUuYW0gKGF0aF9wdGhfc3JjKTogUmVtb3ZlZC4KKwkoYXRoX3B0aHJlYWRfc3JjKTogUmVtb3ZlZC4KKwkobGliZ2NyeXB0X2xhX1NPVVJDRVMpOiBSZW1vdmUgYXRoLWNvbXBhdCwgJChhdGhfcHRoX3NyYykgYW5kCisJJChhdGhfcHRocmVhZF9zcmMpLgorCSogYXRoLWNvbXBhdC5jLCBhdGgtcHRoLWNvbXBhdC5jLCBhdGgtcHRocmVhZC1jb21wYXQuYzogRmlsZXMKKwlyZW1vdmVkLgorCisyMDA0LTAyLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LmggKEdDUllfUFJJTUVfQ0hFQ0tfQVRfR09UX1BSSU1FKQorCShHQ1JZX1BSSU1FX0NIRUNLX0FUX0ZJTklTSCksCisJKEdDUllfUFJJTUVfQ0hFQ0tfQVRfTUFZQkVfUFJJTUUpOiBOZXcuCisKKzIwMDQtMDItMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsaWJnY3J5cHQtY29uZmlnLmluOiBJZ25vcmUgc2V0dGluZyBvZiAtLXByZWZpeC4KKworMjAwNC0wMi0xMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBBZGRlZCBHQ1JZX0NJUEhFUl9SRkMyMjY4XzEyOCwgYWxzdGhvdWdoIG5vdCB5ZXQKKwlzdXBwb3J0ZWQuCisKKzIwMDQtMDItMDYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaDogQWRkZWQgR0NSWV9DSVBIRVJfUkZDMjI2OF80MC4KKworMjAwNC0wMi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNlY21lbS5jIChfZ2NyeV9zZWNtZW1faW5pdCk6IERvIG5vdCBwcmludCB0aGUgIm5vdCBsb2NrZWQgaW50bworCWNvcmUgd2FybmluZyIgaWYgdGhlIE5PX1dBUk5JTkcgZmxhZyBoYXMgYmVlbiBzZXQuCisKKwkqIHNleHAuYyAoc2V4cF9zc2Nhbik6IEFsbG9jYXRlIHJlc3VsdCBpbiBzZWN1cmUgbWVtb3J5IGlmIEJVRkZFUgorCWlzIGluIHNlY3VyZSBtZW1vcnkuIFN3aXRjaCB0byBzZWN1cmUgbWVtb3J5IGZvciB0aGUgYSBzZWN1cmUgJWIKKwlmb3JtYXQgaXRlbS4gRXh0cmEgcGFyYW5vaWQgd2lwZSBvbiBlcnJvci4KKwkoZ2NyeV9zZXhwX3JlbGVhc2UpOiBBZGRlZCBwYXJhbm9pZCB3aXBpbmcgZm9yIHNlY3VyZWx5IGFsbG9jYXRlZAorCVMtZXhwcmVzc2lvbnMuCisKKzIwMDQtMDEtMjUgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGF0aC5oOiBJbmNsdWRlIDxjb25maWcuaD4uCisKKzIwMDQtMDEtMTIgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oOiBBZGp1c3RlZCBkZWNsYXJhdGlvbnMgb2Y6IGdjcnlfYWNfZGF0YV9zZXQsCisJZ2NyeV9hY19kYXRhX2dldF9uYW1lLCBnY3J5X2FjX2RhdGFfZ2V0X2luZGV4LAorCWdjcnlfYWNfa2V5X3BhaXJfZ2VuZXJhdGUsIGdjcnlfYWNfa2V5X3Rlc3QsCisJZ2NyeV9hY19rZXlfZ2V0X25iaXRzLCBnY3J5X2FjX2tleV9nZXRfZ3JpcC4KKworCSogZ2NyeXB0LmggKEdDUllfQUNfRkxBR19EQVRBX05PX0JMSU5ESU5HKTogUmVtb3ZlZCBzeW1ib2wuCisJKEdDUllfQUNfRkxBR19ERUFMTE9DLCBHQ1JZX0FDX0ZMQUdfQ09QWSkKKwkoR0NSWV9BQ19GTEFHX05PX0JMSU5ESU5HKTogTmV3IHN5bWJvbHMuCisKKwkqIGdsb2JhbC5jIChnY3J5X3N0cmR1cCk6IFJlbW92ZWQgZnVuY3Rpb24uCisJKiBzdHJpbmcuYzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAobGliZ2NyeXB0X3JlYWxfbGFfU09VUkNFUyk6IEFkZGVkOiBzdHJpbmcuYy4KKwkqIHN0cmluZy5jIChnY3J5X3N0cmR1cCk6IE5ldyBmdW5jdGlvbi4KKwkqIGdjcnlwdC5oIChnY3J5X3N0cmR1cCk6IERlY2xhcmUuCisKKzIwMDMtMTItMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnMTBsaWIuaCAod2lwZW1lbW9yeSwgd2lwZW1lbW9yeTIpOiBOZXc7IHRha2VuIGZyb20gZ251cGcuCisKKzIwMDMtMTEtMTQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJkdXApOiBEb24ndCBjb3B5IHRoZSBzdHJpbmcgYWZ0ZXIgYSBtYWxsb2MKKwllcnJvci4KKworMjAwMy0xMS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNleHAuYyAoc2V4cF9zc2Nhbik6IEltcGxlbWVudGVkICIlYiIgZm9ybWF0IHNwZWNpZmllci4KKworMjAwMy0xMS0xMSAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogbGliZ2NyeXB0Lm00OiBEbyBub3Qgc2V0IHByZWZpeCB3aGVuIGNhbGxpbmcgbGliZ2NyeXB0LWNvbmZpZy4KKwlUaGFua3MgdG8gTmlrb3MgTWF2cm95YW5vcG91bG9zLgorCisyMDAzLTExLTA4ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoc21hbGxfcHJpbWVfbnVtYmVycyk6IFJlbW92ZWQgZGVjbGFyYXRpb24uCisJKFBVQktFWV9GTEFHX05PX0JMSU5ESU5HKTogUHV0IGJyYWNlcyBhcm91bmQgc2hpZnQuCisKKzIwMDMtMTEtMDQgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuaCAoX2djcnlfc2hhMV9oYXNfYnVmZmVyKTogTmV3LgorCisJKiBnY3J5cHQuaCAoZ2NyeV9jcmVhdGVfbm9uY2UpOiBOZXcuCisKKzIwMDMtMTAtMzEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsaWJnY3J5cHQudmVycyAoX2djcnlfZ2VuZXJhdGVfZWxnX3ByaW1lKTogUmVtb3ZlZCB0aGlzIHN5bWJvbDsKKwlnbnV0bHMgZG9lcyBub3QgbmVlZCBpdCBhbnltb3JlLgorCisJKiBzZWNtZW0uYyAobWJfZ2V0X25ldyk6IHMvcG9vbC9ibG9jay8gZHVlIHRvIGdsb2JhbCBwb29sLgorCisJKiBtaXNjLmMgKGdjcnlfc2V0X2xvZ19oYW5kbGVyKTogcy9sb2dmL2YvIHRvIGF2b2lkIHNoYWRvd2luZworCXdhcm5pbmcgYWdhaW5zdCBhIGJ1aWx0aW4uCisKKwkqIGF0aC1wdGgtY29tcGF0LmM6IGNhc3QgcHRoX2Nvbm5lY3QgdG8gZ2V0IHJpZCBvZiB0aGUgY29uc3QKKwlwcm90b3R5cGUuCisKKzIwMDMtMTAtMjcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhdGguaCAoQVRIX01VVEVYX0lOSVRJQUxJWkVSKTogUmVtb3ZlZCBzcHVyaW91cyBzZW1pY29sb24uCisKKzIwMDMtMTAtMjcgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGxpYmdjcnlwdC1jb25maWcuaW46IEluY2x1ZGUgbGlicy9jZmxhZ3Mgb2YgbGliZ3BnLWVycm9yLgorCisJKiBzZXhwLmMgKHNleHBfc3NjYW4pOiBDbGVhbmVkIHVwLCBkZWFsbG9jYXRlIHNjYW5uZWQgc2V4cCBvbgorCWVycm9yLgorCisJKiBtb2R1bGUuYyAoTU9EVUxFX0lEX01JTik6IE5ldyBzeW1ib2wsIHVzZSBpdC4KKworMjAwMy0xMC0yNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oIChnY3J5X3BrX3Rlc3RrZXkpOiBEb2MgZml4LgorCisyMDAzLTA5LTI5ICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBsaWJnY3J5cHQtY29uZmlnLmluOiBGaXggLS1hbGdvcml0aG1zIG9wdGlvbi4KKworMjAwMy0xMC0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oIChnY3J5X2Vycl9jb2RlKTogVXNlIEdQR19FUlJfSU5MSU5FIGluc3RlYWQgb2YKKwlfX2lubGluZV9fLgorCisJKiBzZWNtZW0uYyAobG9ja19wb29sKTogRG9uJ3QgcHJpbnQgdGhlIHdhcm5pbmcgZm9yIGNlcnRhaW4KKwlzeXN0ZW1zLCBoYW5kbGUgRU5PTUVNLgorCisyMDAzLTEwLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9kdW1wX3N0YXRzKTogRml4ZWQgZm9ybWF0IHNlcGNpZmllciBmb3IgYQorCXNpemVfdC4gIFJlcG9ydGVkIGJ5IFN0ZXBoYW5lIENvcnRoZXN5LgorCisyMDAzLTEwLTEwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2xvYmFsLmMgKF9nY3J5X21hbGxvYyk6IEhhbmRsZSB0aGUgbm9fc2VjdXJlX21lbW9yeSBvcHRpb24uCisKKwkqIGdjcnlwdC5oIChnY3J5X3ByaW1lX2dyb3VwX2dlbmVyYXRvcik6IE5ldy4KKwkoZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMpOiBOZXcuCisKKzIwMDMtMTAtMDcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBzZXhwLmMgKHNleHBfc3NjYW4pOiBDaGVjayB0aGF0IHBhcmVudGhlc2lzIGFyZSBtYXRjaGluZy4KKworMjAwMy0wOS0yOCAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogZzEwbGliLmg6IERlY2xhcmU6IF9nY3J5X21hbGxvYy4KKwkoR0NSWV9BTExPQ19GTEFHX1NFQ1VSRSk6IE5ldyBzeW1ib2wuCisKKwkqIGdsb2JhbC5jIChfZ2NyeV9tYWxsb2MpOiBOZXcgZnVuY3Rpb24uLi4KKwkoZ2NyeV9tYWxsb2MpOiAuLi4gdXNlIGl0LgorCShnY3J5X21hbGxvY19zZWN1cmUpOiBMaWtld2lzZS4KKworCSogYXRoLmM6IENoYW5nZSBMaWNlbnNlIHRvIExHUEwuCisJKiBhdGgtcHRocmVhZC1jb21wYXQuYzogTGlrZXdpc2UuCisJKiBhdGgtcHRocmVhZC5jOiBMaWtld2lzZS4KKwkqIGF0aC1wdGgtY29tcGF0LmM6IExpa2V3aXNlLgorCSogYXRoLXB0aC5jOiBMaWtld2lzZS4KKwkqIGF0aC5oOiBMaWtld2lzZS4KKwkqIGF0aC1jb21wYXQuYzogTGlrZXdpc2UuCisKKwkqIHNlY21lbS5jIChfZ2NyeV9zZWNtZW1fcmVhbGxvYyk6IERvIG5vdCBmb3JnZXQgdG8gcmVsZWFzZSBzZWNtZW0KKwlsb2NrLiAgVGhhbmtzIHRvIGxvdyBoYWxvIGZvciB0cmlnZ2VyaW5nIHRoaXMgYnVnLgorCisyMDAzLTA5LTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LmggKF9HQ1JZX0VSUl9TT1VSQ0VfREVGQVVMVCk6IFJlbW92ZWQgY3J1ZnQuCisJKGdjcnlfcHJpbWVfY2hlY2tfZnVuY190KTogUmVuYW1lZCBhcmcgZm9yIGNsYXJpdHkuCisKKzIwMDMtMDktMDIgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oIChHQ1JZX1BSSU1FX0ZMQUdfU1BFQ0lBTF9GQUNUT1IpOiBOZXcgc3ltYm9sLgorCisyMDAzLTA5LTAxICBNb3JpdHogU2NodWx0ZSAgPG1vQGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9yYW5kb21fbGV2ZWxfdCk6IE5ldyB0eXBlLgorCShnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCk6IExpa2V3aXNlLgorCShHQ1JZX1BSSU1FX0ZMQUdfU0VDUkVUKTogTmV3IHN5bWJvbC4KKwkoZ2NyeV9wcmltZV9nZW5lcmF0ZSwgZ2NyeV9wcmltZV9jaGVjayk6IERlY2xhcmUgZnVuY3Rpb25zLgorCisyMDAzLTA4LTI4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogTWFrZWZpbGUuYW0gKGxpYmdjcnlwdF9wdGhfbGFfTERGTEFHUyk6IFJlbW92ZWQgUFRIX0NGTEFHUyBjcnVmdC4KKworMjAwMy0wOC0yNyAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IFJlbW92ZSBjYWxsIHRvIGF0aF9kZWluaXQuCisKKwkqIE1ha2VmaWxlLmFtIChsaWJnY3J5cHRfcmVhbF9sYV9ERVBFTkRFTkNJRVMpOiBGaXhlZC4KKwkobGliZ2NyeXB0X3JlYWxfbGFfTElCQUREKTogRml4ZWQuCisJUmVtb3ZlZCB1bmVjZXNzYXJ5IHZhcmlhYmxlcy4KKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbjogQWRqdXN0ZWQgc2NyaXB0IGZvciBuZXcgdGhyZWFkIGhhbmRsaW5nLgorCisJKiBNYWtlZmlsZS5hbTogTmV3IHZlcnNpb24sIGJhc2VkIG9uIEdQR01FcyBNYWtlZmlsZS5hbS4KKworCSogYXRoLmMsIGF0aC1jb21wYXQuYywgYXRoLmgsIGF0aC1wdGguYywgYXRoLXB0aC1jb21wYXQuYywKKwlhdGgtcHRocmVhZC5jLCBhdGgtcHRocmVhZC1jb21wYXQuYzogTmV3IGZpbGVzLCBtZXJnZWQgZnJvbSBHUEdNRS4KKwkqIGF0aC5jLCBhdGguaCwgYXRoLXB0aHJlYWQuYywgYXRoLXB0aC5jOiBSZW1vdmVkIGZpbGVzLgorCisyMDAzLTA4LTA4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmMgKGdjcnlfcmVhbGxvYyk6IFJlbW92ZSBGSVhNRSBhYm91dCBgY2xlYXJpbmcgb3V0CisJcmVhbGxvY2VkIG1lbW9yeScsIHNpbmNlIF9nY3J5X3NlY21lbV9yZWFsbG9jIHRha2VzIGNhcmUgb2YKKwlvdmVyd3JpdGluZyBvbGQgbWVtb3J5LgorCisyMDAzLTA4LTA3ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbW9kdWxlLmMgKF9nY3J5X21vZHVsZV9yZWxlYXNlKTogRG9uJ3QgYWN0IGlmIG1vZHVsZSBpcyBOVUxMLgorCisyMDAzLTA3LTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKGVudW0gZ2NyeV9hY19pZCk6IEFkZGVkOiBHQ1JZX0FDX0VMR19FLgorCVJldmVydGVkIGNoYW5nZTogdXNlIGdjcnlfbWRfZmxhZ3MgZW51bWVyYXRpb24gbGlzdCBpbnN0ZWFkIG9mCisJZGVmaW5lcy4KKworMjAwMy0wNy0yOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdsb2JhbC5jIChnY3J5X2NvbnRyb2wpOiBBZGQgR0NSWUNUTF9TRVRfUkFORE9NX1NFRURfRklMRSBhbmQKKwlHQ1JZQ1RMX1VQREFURV9SQU5ET01fU0VFRF9GSUxFLgorCSogZ2NyeXB0Lmg6IERpdHRvLiAgUmVuYW1lZCBpbmRleCB0byBpZHgsIHNvIGF2b2lkIHdhcm5pbmcKKwlyZWxhdGVkIHRvIHRoZSBvbGQgaW5kZXggZnVuY3Rpb24uCisKKzIwMDMtMDctMjggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vLCBnY3J5X2Vycl9jb2RlX3RvX2Vycm5vKQorCShnY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8sIGdjcnlfZXJyb3JfZnJvbV9lcnJubyk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIGdjcnlwdC5oOiBEZWNsYXJlZDogZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vLAorCWdjcnlfZXJyX2NvZGVfdG9fZXJybm8sIGdjcnlfZXJyX21ha2VfZnJvbV9lcnJubywKKwlnY3J5X2Vycm9yX2Zyb21fZXJybm8uCisKKwkqIE1ha2VmaWxlLmFtIChpbmNsdWRlX0hFQURFUlMpOiBBZGRlZDogZ2NyeXB0LW1vZHVsZS5oLgorCisJKiBnY3J5cHQuaDogSW5jbHVkZSA8Z2NyeXB0LW1vZHVsZS5oPi4KKworCSogZ2NyeXB0LW1vZHVsZS5oOiBOZXcgZmlsZS4KKworMjAwMy0wNy0yNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oIChnY3J5X21waV9zY2FuLCBnY3J5X21waV9wcmludCk6IEFQSSBjaGFuZ2UuCisJKGdjcnlfbXBpX2R1bXApOiBOZXcuCisKKzIwMDMtMDctMjEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaDogRGVjbGFyZWQ6IGdjcnlfYWNfa2V5X2RhdGFfZ2V0LgorCShnY3J5X3BrX3NwZWMpOiBSZW5hbWVkIG1lbWJlciBgc2V4cF9uYW1lcycgaW50byBgYWxpYXNlcycuCisKKzIwMDMtMDctMjAgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9tZF9vaWRfc3BlY190KTogTmV3IHR5cGUuCisJKGdjcnlfbWRfc3BlYyk6IE5ldyBtZW1iZXI6IG9pZHMuCisKKzIwMDMtMDctMTkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9jaXBoZXJfb2lkX3NwZWNfdCk6IE5ldyB0eXBlLgorCShnY3J5X2NpcGhlcl9zcGVjKTogTmV3IG1lbWJlcjogb2lkczsKKworMjAwMy0wNy0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oIChnY3J5X21waV9zZXRfb3BhcXVlKTogQWRkIGEgd2FybmluZyBjb21tZW50LgorCisyMDAzLTA3LTE1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogc2VjbWVtLmMgKGNvbXByZXNzX3Bvb2wpOiBSZW1vdmUgZnVuY3Rpb24sIHNpbmNlIHVudXNlZCBibG9ja3MKKwlhcmUgYXV0b21hdGljYWxseSBjb25jYXRlbmFkLgorCisJKiBnY3J5cHQuaDogQnVtcGVkIHZlcnNpb24gbnVtYmVyIHVwIHRvIDEuMS40Mi1jdnMuCisKKzIwMDMtMDctMTQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9jaXBoZXJfc3BlYyk6IE5ldyBtZW1iZXI6IGFsaWFzZXMuCisKKwkqIE1ha2VmaWxlLmFtIChub2luc3RfUFJPR1JBTVMsIHRlc3RhcGlfU09VUkNFUywgdGVzdGFwYWlfTERBREQsCisJYmVuY2htYXJrX1NPVVJDRVMsIGJlbmNobWFya19MREFERCk6IFJlbW92ZWQuCisKKwkqIGJlbmNobWFyay5jLCB0ZXN0YXBpLmM6IFJlbW92ZWQgZmlsZXMuCisKKwkqIG1waS5oOiBSZW1vdmVkIGRpc2FibGVkIHR5cGVkZWYuCisJKiBnMTBsaWIuaDogTGlrZXdpc2UuCisKKwkqIGJlbmNobWFyay5jLCBnMTBsaWIuaCwgZ2NyeXB0LmgsIGdsb2JhbC5jLCBtb2R1bGUuYywgc2V4cC5jOgorCVVzZWQgZ2NyeV9lcnIqIHdyYXBwZXJzIGZvciBsaWJncGctZXJyb3Igc3ltYm9scy4KKworMjAwMy0wNy0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdsb2JhbC5jOiBMaWtld2lzZS4KKworCSogZ2NyeXB0Lmg6IE5ldyB0eXBlOiBnY3J5X2Vycm9yX3QsIGdjcnlfZXJyX2NvZGVfdCBhbmQKKwlnY3J5X2Vycl9zb3VyY2VfdC4KKwkoZ2NyeV9lcnJfbWFrZSwgZ2NyeV9lcnJvciwgZ2NyeV9lcnJfY29kZSwgZ2NyeV9lcnJfc291cmNlKTogTmV3CisJZnVuY3Rpb25zLgorCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJlcnJvcik6IE5ldyBmdW5jdGlvbi4KKwkoZ2NyeV9zdHJzb3VyY2UpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGdjcnlwdC5oOiBOZXcgc3ltYm9sOiBHQ1JZX0NJUEhFUl9UV09GSVNIMTI4LgorCisyMDAzLTA3LTA5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKGVudW0gZ2NyeV9tZF9mbGFncyk6IFJlbW92ZWQsIHVzZWQgZGVmaW5lIGluc3RlYWQsCisJc2luY2UgdGhhdCBpcyBtb3JlIGNvbW1vbiB0aGFuIGFuIGVudW1lcmF0aW9uIGxpc3Qgd2hlbiBpdCBjb21lcworCXRvIGZsYWdzIHRoYXQgY2FuIGJlIGJpdHdpc2UgT1JlZC4KKworMjAwMy0wNy0wOCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdsb2JhbC5jOiBVc2UgbmV3IHR5cGVzIGZvciBoYW5kbGVycy4KKworCSogZ2NyeXB0Lmg6IERlY2xhcmU6IGdjcnlfYWNfZGF0YV9jb3B5LgorCisyMDAzLTA3LTA3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogc2V4cC5jIChnY3J5X3NleHBfYnVpbGRfYXJyYXkpOiBVc2UgZHVtbXkgYXJndW1lbnQgcG9pbnRlci4KKwlUaGFua3MgdG8gU2ltb24gSm9zZWZzc29uIDxqYXNAZXh0dW5kZS5jb20+LgorCisJKiBnY3J5cHQuaDogRGVjbGFyZTogZ2NyeV9jaXBoZXJfbGlzdCwgZ2NyeV9wa19saXN0LCBnY3J5X21kX2xpc3QuCisKKzIwMDMtMDctMDUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBnY3J5cHQuaDogRGVjbGFyZTogZ2NyeV9jaXBoZXJfcmVnaXN0ZXIsIGdjcnlfY2lwaGVyX3VucmVnaXN0ZXIsCisJZ2NyeV9tZF9yZWdpc3RlciwgZ2NyeV9tZF91bnJlZ2lzdGVyLCBnY3J5X3BrX3JlZ2lzdGVyLAorCWdjcnlfcGtfdW5yZWdpc3Rlci4KKwkoZ2NyeV9jaXBoZXJfc3BlYyk6IFJlbW92ZWQgbWVtYmVyOiBhbGdvcml0aG0uCisJKGdjcnlfcGtfc3BlYyk6IExpa2V3aXNlLgorCShnY3J5X21kX3NwZWMpOiBMaWtld2lzZS4KKwlBZGp1c3RlZCBkZWNsYXJhdGlvbnM6IGdjcnlfY2lwaGVyX3JlZ2lzdGVyLCBnY3J5X3BrX3JlZ2lzdGVyLAorCWdjcnlfbWRfcmVnaXN0ZXIuCisKKwkqIG1vZHVsZS5jOiBSZXBsYWNlZCBhbGwgb2NjdXJlbmNlcyBvZiBgaWQnIHdpdGggYG1vZF9pZCcsIHNpbmNlCisJYGlkJyBpcyBhIGtleXdvcmQgaW4gb2JqLWMuCisKKwkqIGdjcnlwdC5oIChnY3J5X2NpcGhlcl9zcGVjKTogUmVuYW1lZCBtZW1iZXIgYGlkJyB0byBgYWxnb3JpdGhtJy4KKwkoZ2NyeV9wa19zcGVjKTogTGlrZXdpc2UuCisJKGdjcnlfbWRfc3BlYyk6IExpa2V3aXNlLgorCisJKiBjaXBoZXIuaDogUmVtb3ZlZCB0eXBlczogZ2NyeV9wdWJrZXlfZ2VuZXJhdGVfdCwKKwlnY3J5X3B1YmtleV9jaGVja19zZWNyZXRfa2V5X3QsIGdjcnlfcHVia2V5X2VuY3J5cHRfdCwKKwlnY3J5X3B1YmtleV9kZWNyeXB0X3QsIGdjcnlfcHVia2V5X3NpZ25fdCwgZ2NyeV9wdWJrZXlfdmVyaWZ5X3QsCisJZ2NyeV9wdWJrZXlfZ2V0X25iaXRzX3QsIGdjcnlfcGtfc3BlY190LCBnY3J5X2RpZ2VzdF9pbml0X3QsCisJZ2NyeV9kaWdlc3Rfd3JpdGVfdCwgZ2NyeV9kaWdlc3RfZmluYWxfdCwgZ2NyeV9kaWdlc3RfcmVhZF90LAorCWdjcnlfZGlnZXN0X3NwZWNfdCwgZ2NyeV9jaXBoZXJfc2V0a2V5X3QsIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCwKKwlnY3J5X2NpcGhlcl9kZWNyeXB0X3QsIGdjcnlfY2lwaGVyX3N0ZW5jcnlwdF90LAorCWdjcnlfY2lwaGVyX3N0ZGVjcnlwdF90LCBnY3J5X2NpcGhlcl9zcGVjX3QuCisKKwkqIGdjcnlwdC5oOiBOZXcgdHlwZXM6IGdjcnlfcGtfZ2VuZXJhdGVfdCwKKwlnY3J5X3BrX2NoZWNrX3NlY3JldF9rZXlfdCwgZ2NyeV9wa19lbmNyeXB0X3QsIGdjcnlfcGtfZGVjcnlwdF90LAorCWdjcnlfcGtfc2lnbl90LCBnY3J5X3BrX3ZlcmlmeV90LCBnY3J5X3BrX2dldF9uYml0c190LAorCWdjcnlfcGtfc3BlY190LCBnY3J5X21kX2luaXRfdCwgZ2NyeV9tZF93cml0ZV90LCBnY3J5X21kX2ZpbmFsX3QsCisJZ2NyeV9tZF9yZWFkX3QsIGdjcnlfbWRfc3BlY190LCBnY3J5X2NpcGhlcl9zZXRrZXlfdCwKKwlnY3J5X2NpcGhlcl9lbmNyeXB0X3QsIGdjcnlfY2lwaGVyX2RlY3J5cHRfdCwKKwlnY3J5X2NpcGhlcl9zdGVuY3J5cHRfdCwgZ2NyeV9jaXBoZXJfc3RkZWNyeXB0X3QsCisJZ2NyeV9jaXBoZXJfc3BlY190LCBnY3J5X21vZHVsZV90LgorCisyMDAzLTA3LTA0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbW9kdWxlLmMgKF9nY3J5X21vZHVsZV9saXN0KTogTmV3IGZ1bmN0aW9uLgorCisyMDAzLTA3LTAyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogbW9kdWxlLmMgKF9nY3J5X21vZHVsZV9sb29rdXApOiBGaXhlZCB0eXBvLgorCisJKiBnY3J5cHQuaDogQWRkZWQgYWxsIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgbmVjZXNzYXJ5IGZvcgorCXRoZSBuZXcgYWMgaW50ZXJmYWNlLgorCisyMDAzLTA2LTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZzEwbGliLmg6IEFkZGVkIGRlY2xhcmF0aW9uczogX2djcnlfcGtfbW9kdWxlX2xvb2t1cCwKKwlfZ2NyeV9wa19tb2R1bGVfcmVsZWFzZS4KKworMjAwMy0wNi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGJlbmNobWFyay5jIChjaXBoZXJfYmVuY2gpOiBBZGp1c3RlZCBmb3IgbmV3IEFQSSBvZiBnZXRfYmxrbGVuCisJYW5kIGdldF9rZXlsZW4uCisKKwkqIGdjcnlwdC5oIChnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4pCisJKGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbik6IFJlcGxhY2VkIG1hY3JvIGJ5IGZ1bmNpb24uCisKKzIwMDMtMDYtMTggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaDogUmVuYW1lZCB0eXBlcyBHY3J5RGlnZXN0U3BlYywgR2NyeUNpcGhlclNwZWMgYW5kCisJR2NyeVB1YmtleVNwZWMgaW50bzogZ2NyeV9kaWdlc3Rfc3BlY190LCBnY3J5X2NpcGhlcl9zcGVjX3QgYW5kCisJZ2NyeV9wdWJrZXlfc3BlY190LgorCShnY3J5X3B1YmtleV9zcGVjKTogRGVmaW5lZCBtZW1iZXIgYGlkJyBhcyB1bnNpZ25lZC4KKwkoZ2NyeV9kaWdlc3Rfc3BlYyk6IExpa2V3aXNlLgorCShnY3J5X2NpcGhlcl9zcGVjKTogTGlrZXdpc2UuCisKKwkqIG1vZHVsZS5jIChfZ2NyeV9tb2R1bGVfaWRfbmV3KTogTmV3IGZ1bmN0aW9uLgorCShfZ2NyeV9tb2R1bGVfYWRkKTogR2VuZXJhdGUgYSBuZXcgSUQgdmlhIF9nY3J5X21vZHVsZV9pZF9uZXcgaW4KKwljYXNlIGBpZCcgaXMgemVyby4KKworCSogZzEwbGliLmgsIG1vZHVsZS5jOiBSZXBsYWNlIG9sZCB0eXBlIEdjcnlNb2R1bGUgd2l0aCBuZXdlciBvbmU6CisJZ2NyeV9tb2R1bGVfdC4KKworCSogbW9kdWxlLmMgKF9nY3J5X21vZHVsZV9hZGQpOiBBZGRlZCBhcmd1bWVudCBgaWQnLCB1c2UgaXQuCisKKwkqIGcxMGxpYi5oOiBBZGRlZCBkZWNsYXJhdGlvbjogX2djcnlfbW9kdWxlX2xvb2t1cF9pZC4KKwkoX2djcnlfbW9kdWxlX2FkZCk6IEFkZGVkIGFyZ3VtZW50IGBpZCcuCisKKwkqIG1vZHVsZS5jIChfZ2NyeV9tb2R1bGVfbG9va3VwX2lkKTogTmV3IGZ1bmN0aW9uLgorCisJKiBnMTBsaWIuaCAoc3RydWN0IGdjcnlfbW9kdWxlKTogTmV3IG1lbWJlcjogaWQuCisKKwkqIGdjcnlwdC5oOiBOZXcgdHlwZTogZ2NyeV9oYW5kbGVyX3Byb2dyZXNzX3QsCisJZ2NyeV9oYW5kbGVyX2FsbG9jX3QsIGdjcnlfaGFhbmRsZXJfc2VjdXJlX2NoZWNrX3QsCisJZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCwgZ2NyeV9oYW5kbGVyX2ZyZWVfdCwKKwlnY3J5X2hhbmRsZXJfbm9fbWVtX3QsIGdjcnlfaGFuZGxlcl9lcnJvcl90LCBnY3J5X2hhbmRsZXJfbG9nX3QuCisJVXNlIG5ldyB0eXBlcy4KKworCSogY2lwaGVyLmg6IEluY2x1ZGUgPGdjcnlwdC5oPi4KKwlOZXcgdHlwZXM6IGdjcnlfcGtfZ2VuZXJhdGVfdCwgZ2NyeV9wa19jaGVja19zZWNyZXRfa2V5X3QsCisJZ2NyeV9wa19lbmNyeXB0X3QsIGdjcnlfcGtfZGVjcnlwdF90LCBnY3J5X3BrX3NpZ25fdCwKKwlnY3J5X3BrX3ZlcmlmeV90LCBnY3J5X3BrX2dldF9uYml0c190LCBnY3J5X21kX2luaXRfdCwKKwlnY3J5X21kX3dyaXRlX3QsIGdjcnlfbWRfZmluYWxfdCwgZ2NyeV9tZF9yZWFkX3QsCisJZ2NyeV9jaXBoZXJfc2V0a2V5X3QsIGdjcnlfY2lwaGVyX2VuY3J5cHRfdCwKKwlnY3J5X2NpcGhlcl9kZWNyeXB0X3QsIGdjcnlfY2lwaGVyX3N0ZW5jcnlwdF90LAorCWdjcnlfY2lwaGVyX3N0ZGVjcnlwdF90LgorCVVzZSBuZXcgdHlwZXMuCisKKzIwMDMtMDYtMTcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkZWQ6IEBHUEdfRVJST1JfQ0ZMQUdTQC4KKworMjAwMy0wNi0xNiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGcxMGxpYi5oOiBSZXBsYWNlIGxhc3Qgb2NjdXJlbmNlcyBvZiBvbGQgdHlwZSBuYW1lcyB3aXRoIG5ld2VyCisJbmFtZXMgKGkuZS4gcmVwbGFjZSBNUEkgd2l0aCBnY3J5X21waV90KS4KKwkqIG1waS5oOiBMaWtld2lzZS4KKwkqIHNleHAuYzogTGlrZXdpc2UuCisKKzIwMDMtMDYtMTUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiB0ZXN0YXBpLmMgKHRlc3RfZ2Vua2V5KTogVXNlIGdwZ19zdHJlcnJvciBpbnN0ZWFkIG9mCisJZ2NyeV9zdHJlcnJvci4KKworCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IEZpeGVkIHR5cG8uCisKKwkqIG1pc2MuYyAoX2djcnlfZmF0YWxfZXJyb3IpOiBVc2UgZ3BnX3N0cmVycm9yIGluc3RlYWQgb2YKKwlnY3J5X3N0cmVycm9yLgorCisJKiB0eXBlcy5oIChTVFJMSVNUKTogUmVtb3ZlZCB0eXBlIHNpbmNlIGl0IGlzIG5vdCB1c2VkLgorCisyMDAzLTA2LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2xvYmFsLmMgKGdsb2JhbF9pbml0KTogQ2FsbDogX2djcnlfY2lwaGVyX2luaXQsIF9nY3J5X21kX2luaXQsCisJX2djcnlfcGtfaW5pdC4KKworCSogZzEwbGliLmg6IERlY2xhcmU6IF9nY3J5X2NpcGhlcl9pbml0LCBfZ2NyeV9tZF9pbml0LAorCV9nY3J5X3BrX2luaXQuCisKKwkqIGdsb2JhbC5jIChnY3J5X3N0cmVycm9yKTogUmVtb3ZlIGNvbXBhdGliaWxpdHkgY29kZS4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBzdXBwb3J0IGxpYmdwZy1lcnJvciBzcGVjaWFsIGhhbmRsaW5nLgorCShBTV9DUFBGTEFHUyk6IEFkZCBAR1BHX0VSUk9SX0NGTEFHU0AKKworCSogZ2NyeXB0Lmg6IExpa2V3aXNlLgorCisyMDAzLTA2LTEzICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LmggKGdjcnlfbWRfZ2V0X2FsZ28pOiBSZXZlcnRlZCB0byBvbGQgQVBJLiAgVGhpcyBpcyBhCisJY29udmVuaWVuY2UgZnVuY3Rpb24gYW55d2F5IGFuZCBlcnJvciBjaGVja2luZyBpcyBub3QgYXBwcm9yaWF0ZS4KKwkoZ2NyeV9tZF9pc19lbmFibGVkKTogTmV3LgorCShnY3J5X21kX2lzX3NlY3VyZSk6IFJlcGxhY2VkIG1hY3JvIGJ5IGZ1bmN0aW9uIGFuZCByZXZlcnRlZCB0byBvbGQKKwlBUEkuCisKKzIwMDMtMDYtMTEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaCAoR0NSWUVSUik6IERlZmluZSBfR0NSWV9FUlJfU09VUkNFX0RFRkFVTFQgaW5zdGVhZCBvZgorCUdQR19FUlJfU09VUkNFX0RFRkFVTFQsIHNvIHRoYXQgbGliZ3BnLWVycm9yIHN0aWxsIHdvcmtzIGRlc3BpdGUKKwl0aGUgdXNlIG9mIHRoZSBvbGQgZ2NyeXB0IGVycm9yIGNvZGVzLgorCShnY3J5X21kX2NvcHkpOiBTd2FwcGVkIGFyZ3VtZW50cy4KKworMjAwMy0wNi0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBTdXBwb3J0IGZvciBsaWJncGctZXJyb3IuCisKKzIwMDMtMDYtMDggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBzZXhwLmMgKGdjcnlfc2V4cF9jcmVhdGUpOiBFeHBlY3Qgc2FuZSBlcnJvciB2YWx1ZXMgZnJvbQorCWdjcnlfc2V4cF9jYW5vbl9sZW4gaW5zdGVhZCBvZiB0aGUgYGhpc3RvcmljYWwnIHZhbHVlcy4KKworMjAwMy0wNi0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGF0aC5jLCBhdGguYywgYXRoLXB0aC5jLCBhdGgtcHRocmVhZC5jLCBiZW5jaG1hcmsuYywgY2lwaGVyLmgsCisJZzEwbGliLmgsIGdjcnlwdC5oLCBnbG9iYWwuYywgbWlzYy5jLCBtaXNzaW5nLXN0cmluZy5jLCBtb2R1bGUuYywKKwltcGkuaCwgc2VjbWVtLmMsIHNlY21lbS5oLCBzZXhwLmMsIHN0ZG1lbS5jLCBzdGRtZW0uaCwgdGVzdGFwaS5jLAorCXR5cGVzLmg6IEVkaXRlZCBhbGwgcHJlcHJvY2Vzc29yIGluc3RydWN0aW9ucyB0byByZW1vdmUgd2hpdGVzcGFjZQorCWJlZm9yZSB0aGUgJyMnLiAgVGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgQzg5LCBidXQgdGhlcmUgYXJlIHNvbWUKKwljb21waWxlcnMgb3V0IHRoZXJlIHRoYXQgZG9uJ3QgbGlrZSBpdC4gIFJlcGxhY2VkIGFueSBvY2N1cmVuY2Ugb2YKKwl0aGUgbm93IGRlcHJlY2F0ZWQgdHlwZSBuYW1lcyB3aXRoIHRoZSBuZXcgb25lcy4KKworCSogZ2NyeXB0Lmg6IFJlLW9yZ2FuaXplZCBjaGVja2luZyBmb3IgZ2NjIGZlYXR1cmVzOyBOZXcgbWFjcm86CisJX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRC4KKwlJbmNsdWRlIGNvcHkgb2YgbGliZ3BnLWVycm9yJ3MgZ3BnLWVycm9yLmggaW4gb3JkZXIgdG8gbWFrZSBpdAorCWVhc3kgdG8gYnVpbGQgbGliZ2NyeXB0IHdpdGhvdXQgbmVlZGluZyBsaWJncGctZXJyb3IuaC4KKworCShHQ1JZX01QSSwgR2NyeU1QSSwgR0NSWV9TRVhQLCBHY3J5U2V4cCwgR0NSWV9DSVBIRVJfSEQsCisJR2NyeUNpcGhlckhkLCBHQ1JZX01EX0hELCBHY3J5TURIZCk6IERlY2xhcmVkIGRlcHJlY2F0ZWQuCisJKGdjcnlfbXBpX3QsIGdjcnlfc2V4cF90LCBnY3J5X2NpcGhlcl9oZF90LCBnY3J5X21kX2hkX3QpOiBOZXcKKwl0eXBlcy4KKworMjAwMy0wNi0wNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHNleHAuYyAoc2V4cF9zc2Nhbik6IE5ldyBhcmd1bWVudDogYXJnX2xpc3QsIGFkanVzdGVkIGFsbAorCWNhbGxlcnMuCisJKEFSR19ORVhUKTogTmV3IG1hY3JvLgorCShzZXhwX3NzY2FuKTogVXNlIEFSR19ORVhUIGZvciByZWNlaXZpbmcgZm9ybWF0IHN0cmluZyBhcmd1bWVudHMuCisJKGdjcnlfc2V4cF9idWlsZF9hcnJheSk6IE5ldyBmdW5jdGlvbi4KKworMjAwMy0wNi0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oOiBBZGRlZCBzb21lIGNvbW1lbnRzIGRlc2NyaWJpbmcgdGhlIGdjcnlfc2V4cF8qCisJZnVuY3Rpb25zLgorCUluY2x1ZGUgPGdwZy1lcnJvci5oPiBpbnN0ZWFkIG9mIDxncGcvZXJyb3IuaD4uCisKKzIwMDMtMDYtMDEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBzZXhwLmMgKE9MRFBBUlNFQ09ERSk6IFJlbW92ZWQgbWFjcm8uLi4KKwkoZ2NyeV9zZXhwX2Nhbm9uX2xlbik6IC4uLiBhbmQgZG8gbm90IHVzZSBpdC4KKworCSogZ2NyeXB0LmggKGdjcnlfZXJybm8pOiBSZW1vdmVkIGRlY2xhcmF0aW9uLgorCisJKiBnMTBsaWIuaCAoc3RyaW5nX3RvX3B1YmtleV9hbGdvLCBwdWJrZXlfYWxnb190b19zdHJpbmcsCisJcHVia2V5X25iaXRzKTogUmVtb3ZlZCBkZWNsYXJhdGlvbnMgZm9yIG5vbi1leGlzdGluZyBmdW5jdGlvbnMuCisKKzIwMDMtMDUtMzEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoaXNfUlNBLCBpc19FTEdBTUFMKTogUmVtb3ZlZCBtYWNyb3MuCisKKwkqIGcxMGxpYi5oIChzZXRfbGFzdGVycik6IFJlbW92ZWQgbWFjcm8uCisJKF9nY3J5X3NldF9sYXN0ZXJyKTogUmVtb3ZlZCBkZWNsYXJhdGlvbi4KKworCSogZ2NyeXB0Lmg6IENoYW5nZWQgZGVjbGFyYXRpb25zIGZvcjogZ2NyeV9wa19hbGdvX2luZm8sCisJZ2NyeV9tZF9vcGVuLCBnY3J5X21kX2NvcHksIGdjcnlfbWRfYWxnb19pbmZvLCBnY3J5X21kX2luZm8sCisJZ2NyeV9tZF9nZXRfYWxnbywgZ2NyeV9yYW5kb21fYWRkX2J5dGVzLgorCisJKGdjcnlfbWRfaXNfc2VjdXJlKTogQWRqdXN0IG1hY3JvIGZvciBuZXcgQVBJLgorCisyMDAzLTA1LTI5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0Lmg6IENoYW5nZWQgZGVjbGFyYXRpb25zIGZvcjogZ2NyeV9jaXBoZXJfb3BlbiwKKwlnY3J5X2NpcGhlcl9pbmZvLCBnY3J5X2NpcGhlcl9hbGdvX2luZm8uCisJKGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbik6IEFkanVzdGVyIGZvciBuZXcKKwlnY3J5X2NpcGhlcl9hbGdvX2luZm8gaW50ZXJmYWNlLgorCShnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4pOiBMaWtld2lzZS4KKworCSogZ2xvYmFsLmMgKGdjcnlfZXJybm8pOiBSZW1vdmVkIGZ1bmN0aW9uLgorCShnY3J5X3N0cmVycm9yKTogRG8gbm90IHVzZSBnY3J5X2Vycm5vLgorCShfZ2NyeV9zZXRfbGFzdGVycik6IFJlbW92ZWQgZnVuY3Rpb24uCisJKGxhc3RfZWMpOiBSZW1vdmVkIHZhcmlhYmxlLgorCisyMDAzLTA1LTI3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKGVudW0gZ2NyeV9jaXBoZXJfYWxnb3MpOiBNYWtlIFNlcnBlbnQgSURzIGRvIG5vdAorCWNvbmZsaWN0IHdpdGggT3BlblBHUC4gIFJlcG9ydGVkIGJ5IFRpbW8gU2NodWx6LgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKTogRml4ZWQgbmFtZSBvZiBlbnVtIGxpc3QuCisKKzIwMDMtMDUtMjUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoZ2NyeV9jaXBoZXJfc3BlYyk6IEFkanVzdCByZXR1cm4gdHlwZSBvZiBgc2V0a2V5JyBmb3IKKwlsaWJncGctZXJyb3IuCisJKGdjcnlfcHVia2V5X3NwZWMpOiBBZGp1c3QgcmV0dXJuIHR5cGUgb2YgYGdlbmVyYXRlJywKKwlgY2hlY2tfc2VjcmV0X2tleScsIGBlbmNyeXB0JywgYGRlY3J5cHQnLCBgc2lnbicgYW5kIGB2ZXJpZnknIGZvcgorCWxpYmdwZy1lcnJvci4KKworCSogc2V4cC5jIChnY3J5X3NleHBfY2Fub25fbGVuKTogQWRqdXN0ZWQgZm9yIGxpYmdwZy1lcnJvci4KKwkoZ2NyeV9zZXhwX2NyZWF0ZSk6IExpa2V3aXNlLgorCShnY3J5X3NleHBfbmV3KTogTGlrZXdpc2UuCisJKHNleHBfc3NjYW4pOiBMaWtld2lzZS4KKwkoZ2NyeV9zZXhwX2J1aWxkKTogTGlrZXdpc2UuCisJKGdjcnlfc2V4cF9zc2Nhbik6IExpa2V3aXNlLgorCisJKiBtb2R1bGUuYyAoX2djcnlfbW9kdWxlX2FkZCk6IExpa2V3aXNlLgorCisJKiBnbG9iYWwuYyAobGFzdF9lYyk6IENoYW5nZSB0eXBlIHRvIGdwZ19lcnJvcl90LgorCShnY3J5X2NvbnRyb2wpOiBBZGp1c3QgZm9yIGxpYmdwZy1lcnJvci4KKwkoZ2NyeV9lcnJubyk6IExpa2V3aXNlLgorCShnY3J5X3N0cmVycm9yKTogTGlrZXdpc2UuCisJKF9nY3J5X3NldF9sYXN0ZXJyKTogTGlrZXdpc2UuCisJKGdjcnlfeG1hbGxvYyk6IExpa2V3aXNlLgorCShnY3J5X3hyZWFsbG9jKTogTGlrZXdpc2UuCisKKzIwMDMtMDUtMjIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiB0eXBlcy5oOiBNZXJnZWQgY29kZSBmcm9tIEdudVBHIHJlZ2FyZGluZyBVNjRfQy4KKworCSogbWlzc2luZy1zdHJpbmcuYyAoc3Ryc2VwKTogUmVtb3ZlZCBmdW5jdGlvbi4KKworCSogZzEwbGliLmg6IFJlbW92ZWQgZGVjbGFyYXRpb25zOiBzdHJzZXAsIHN0cmx3ci4KKworCSogc2VjbWVtLmMgKHNlY21lbV9sb2NrKTogTmV3IHZhcmlhYmxlLgorCShTRUNNRU1fTE9DSywgU0VDTUVNX1VOTE9DSyk6IE5ldyBtYWNyb3MuCisJKF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MpOiBVc2UgU0VDTUVNX0xPQ0sgYW5kIFNFQ01FTV9VTkxPQ0suCisJKF9nY3J5X3NlY21lbV9nZXRfZmxhZ3MpOiBMaWtld2lzZS4KKwkoX2djcnlfc2VjbWVtX2luaXQpOiBMaWtld2llLgorCShfZ2NyeV9zZWNtZW1fbWFsbG9jKTogTGlrZXdpc2UuCisJKF9nY3J5X3NlY21lbV9mcmVlKTogTGlrZXdpc2UuCisJKF9nY3J5X3NlY21lbV9tYWxsb2MpOiBSZW5hbWVkIHRvIC4uLgorCShfZ2NyeV9zZWNtZW1fbWFsbG9jX2ludGVybmFsKTogLi4uIHRoaXMuCisJKF9nY3J5X3NlY21lbV9tYWxsb2MpOiBOZXcgZnVuY3Rpb24sIHVzZSBTRUNNRU1fTE9DSywKKwlTRUNNRU1fVU5MT0NLLCBjYWxsIF9nY3J5X3NlY21lbV9tYWxsb2NfaW50ZXJuYWwuCisJKF9nY3J5X3NlY21lbV9mcmVlKTogUmVuYW1lZCB0byAuLi4KKwkoX2djcnlfc2VjbWVtX2ZyZWVfaW50ZXJuYWwpOiAuLi4gdGhpcy4KKwkoX2djcnlfc2VjbWVtX2ZyZWUpOiBOZXcgZnVuY3Rpb24sIHVzZSBTRUNNRU1fTE9DSywgU0VDTUVNX1VOTE9DSywKKwljYWxsIF9nY3J5X3NlY21lbV9mcmVlX2ludGVybmFsLgorCShfZ2NyeV9zZWNtZW1fcmVhbGxvYyk6IFVzZSBTRUNNRU1fTE9DSywgU0VDTUVNX1VOTE9DSywgY2FsbAorCV9nY3J5X3NlY21lbV9tYWxsb2NfaW50ZXJuYWwgYW5kIF9nY3J5X3NlY21lbV9mcmVlX2ludGVybmFsLgorCShfZ2NyeV9wcml2YXRlX2lzX3NlY3VyZSk6IFVzZSBTRUNNRU1fTE9DSywgU0VDTUVNX1VOTE9DSy4KKwkoX2djcnlfc2VjbWVtX2R1bXBfc3RhdHMpOiBMaWtld2lzZS4KKwkoX2djcnlfc2VjbWVtX21hbGxvY19pbnRlcm5hbCk6IFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlOgorCWNvbXByZXNzZWQuCisJSW5jbHVkZSAiYXRoLmgiLgorCisyMDAzLTA1LTIxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0LmggKEdDUllfQ0lQSEVSX1NFUlBFTlQxMjgsIEdDUllfQ0lQSEVSX1NFUlBFTlQxOTIsCisJR0NSWV9DSVBIRVJfU0VSUEVOVDI1Nik6IE5ldyBzeW1ib2xzLgorCisyMDAzLTA1LTE5ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZ2NyeXB0Lmg6IFJldmVyc2VkIGNoYW5nZXMgZnJvbSAyMDAzLTAzLTAzIHNpbmNlIHRoZXkgd291bGQgaGF2ZQorCWJlZW4gYW4gdW5uZWNlc3NhcnkgQUJJIGJyZWFrLgorCisyMDAzLTA1LTEzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogc2VjbWVtLmMgKHN0YXRzX3VwZGF0ZSk6IE5ldyBmdW5jdGlvbi4KKwkoQkxPQ0tfSEVBRF9TSVpFKTogTmV3IHN5bWJvbC4KKwkoTUJfRkxBR19BQ1RJVkUpOiBOZXcgc3ltYm9sLgorCShBRERSX1RPX0JMT0NLLCBCTE9DS19WQUxJRCk6IE5ldyBtYWNyb3MuCisJKG1iX2dldF9uZXh0KTogTmV3IGZ1bmN0aW9uLgorCShtYl9nZXRfcHJldik6IE5ldyBmdW5jdGlvbi4KKwkobWJfbWVyZ2UpOiBOZXcgZnVuY3Rpb24uCisJKG1iX2dldF9uZXcpOiBOZXcgZnVuY3Rpb24uCisJKHVudXNlZF9ibG9ja3MpOiBSZW1vdmVkIHZhcmlhYmxlLgorCShpbml0X3Bvb2wpOiBJbml0aWFsaXplIG5ldyBtZW1vcnkgcG9vbC4KKwkoX2djcnlfc2VjbWVtX21hbGxvYyk6IFVzZSBuZXcgaGVhcCBtYW5hZ2VtZW50IGNvZGUuCisJKF9nY3J5X3NlY21lbV9mcmVlKTogTGlrZXdpc2UuCisJKF9nY3J5X3NlY21lbV9yZWFsbG9jKTogTGlrZXdpc2UuCisJUmVuYW1lZCB0eXBlIE1FTUJMT0NLIHRvIG1lbWJsb2NrX3QuCisKKzIwMDMtMDQtMjcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoZ2NyeV9wdWJrZXlfc3BlYyk6IE5ldyBtZW1iZXI6IHNleHBfbmFtZXMuCisKKzIwMDMtMDQtMjMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoZ2NyeV9wdWJrZXlfc3BlYyk6IFJlbW92ZWQgbWVtYmVyczogbnBrZXksIG5za2V5LAorCW5lbmMsIG5zaWcuCisJKGdjcnlfcHVia2V5X3NwZWMpOiBBZGRlZCBtZW1iZXJzOiBlbGVtZW50c19wa2V5LCBlbGVtZW50c19za2V5LAorCWVsZW1lbnRzX2VuYywgZWxlbWVudHNfc2lnLCBlbGVtZW50c19ncmlwLgorCisyMDAzLTA0LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogZzEwbGliLmggKEdjcnlNb2R1bGUpOiBOZXcgdHlwZWRlZi4KKworCSogZ2NyeXB0LmggKGdjcnlfY2lwaGVyX3JlZ2lzdGVyLCBnY3J5X2NpcGhlcl91bnJlZ2lzdGVyLAorCWdjcnlfZGlnZXN0X3JlZ2lzdGVyLCBnY3J5X2RpZ2VzdF91bnJlZ2lzdGVyLAorCWdjcnlfcHVia2V5X3JlZ2lzdGVyLCBnY3J5X3B1YmtleV91bnJlZ2lzdGVyKTogRnVuY3Rpb24KKwlkZWNsYXJhdGlvbnMgcmVtb3ZlZCAtIGZvciBub3cuCisKKwkqIGdjcnlwdC5oIChHY3J5TW9kdWxlKTogRGVjbGFyYXRpb24gcmVtb3ZlZC4KKwkqIGdjcnlwdC5oIChHY3J5UHVia2V5U3BlYywgR2NyeURpZ2VzdFNwZWMsIEdjcnlDaXBoZXJTcGVjKToKKwlUeXBlcyBNb3ZlZC4uLgorCSogY2lwaGVyLmg6IC4uLiBoZXJlLgorCisyMDAzLTA0LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogY2lwaGVyLmg6IERlY2xhcmUgZGlnZXN0X3NwZWNfc2hhNTEyIGFuZCBkaWdlc3Rfc3BlY18zODQuCisKKzIwMDMtMDQtMTYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtb2R1bGUuYyAoX2djcnlfbW9kdWxlX3VzZSk6IE5ldyBmdW5jdGlvbi4KKwkqIGcxMGxpYi5oIChfZ2NyeV9tb2R1bGVfdXNlKTogRGVjbGFyZSBmdW5jdGlvbi4KKworCSogbGliZ2NyeXB0LWNvbmZpZy5pbjogU3VwcG9ydCBmb3IgLS1hbGdvcml0aG1zIHN3aXRjaCwgd2hpY2gKKwlwcmludHMgdGhlIGFsZ29yaXRobXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWx0IGxpYmdjcnlwdC4KKworCSogZ2xvYmFsLmMgKGdjcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIpOiBSZWdpc3RlciBwcm9ncmVzcworCWZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGVuYWJsZWQgYWxnb3JpdGhtcy4KKworMjAwMy0wNC0wNyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJnY3J5cHRfbGFfU09VUkNFUyk6IEFkZGVkIG1vZHVsZS5jCisKKwkqIG1vZHVsZS5jOiBOZXcgZmlsZS4KKwkoX2djcnlfbW9kdWxlX2FkZCk6IE5ldyBmdW5jdGlvbi4KKwkoX2djcnlfbW9kdWxlX2Ryb3ApOiBOZXcgZnVuY3Rpb24uCisJKF9nY3J5X21vZHVsZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCisJKF9nY3J5X21vZHVsZV9yZWxlYXNlKTogTmV3IGZ1bmN0aW9uLgorCisJKiBnMTBsaWIuaCAoR2NyeU1vZHVsZSk6IE5ldyB0eXBlcy4KKwkoRkxBR19NT0RVTEVfRElTQUJMRUQpOiBOZXcgc3ltYm9sLgorCUFkZGVkIGRlY2xhcmF0aW9ucyBmb3IgX2djcnlfbW9kdWxlX2FkZCwgX2djcnlfbW9kdWxlX3JlbGVhc2UgYW5kCisJX2djcnlfbW9kdWxlX2xvb2t1cC4KKworCSogZ2NyeXB0Lmg6IE5ldyB0eXBlczogR2NyeVB1YmtleVNwZWMsIEdjcnlEaWdlc3RTcGVjLAorCUdjcnlDaXBoZXJTcGVjLgorCUFkZGVkIGRlY2xhcmF0aW9ucyBmb3I6IGdjcnlfY2lwaGVyX3JlZ2lzdGVyLAorCWdjcnlfY2lwaGVyX3VucmVnaXN0ZXIsIGdjcnlfZGlnZXN0X3JlZ2lzdGVyLAorCWdjcnlfZGlnZXN0X3VucmVnaXN0ZXIsIGdjcnlfcHVia2V5X3JlZ2lzdGVyIGFuZAorCWdjcnlfcHVia2V5X3VucmVnaXN0ZXIuCisKKwkqIGNpcGhlci5oOiBSZW1vdmVkIHN5bWJvbHM6IENJUEhFUl9BTEdPX05PTkUsIENJUEhFUl9BTEdPX0lERUEsCisJQ0lQSEVSX0FMR09fM0RFUywgQ0lQSEVSX0FMR09fQ0FTVDUsIENJUEhFUl9BTEdPX0JMT1dGSVNILAorCUNJUEhFUl9BTEdPX1NBRkVSX1NLMTI4LCBDSVBIRVJfQUxHT19ERVNfU0ssIENJUEhFUl9BTEdPX1RXT0ZJU0gsCisJQ0lQSEVSX0FMR09fVFdPRklTSF9PTEQsIENJUEhFUl9BTEdPX0RVTU1ZLCBQVUJLRVlfVVNBR0VfU0lHLAorCVBVQktFWV9VU0FHRV9FTkMsIERJR0VTVF9BTEdPX01ENSwgRElHRVNUX0FMR09fU0hBMSwKKwlESUdFU1RfQUxHT19STUQxNjAsIERJR0VTVF9BTEdPX1RJR0VSLCBQVUJLRVlfQUxHT19SU0EsCisJUFVCS0VZX0FMR09fUlNBX0UsIFBVQktFWV9BTEdPX1JTQV9TLCBQVUJLRVlfQUxHT19EU0EsCisJUFVCS0VZX0FMR09fRUxHQU1BTCwgUFVCS0VZX0FMR09fRUxHQU1BTF9FLgorCisyMDAzLTA0LTAyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKG1kX2JlbmNoKTogRml4IGVycm9yIG1lc3NhZ2UuCisKKzIwMDMtMDMtMzEgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAoY2lwaGVyX2JlbmNoKTogQWRkZWQgQ1RSIG1vZGUuCisKKzIwMDMtMDMtMzAgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogZ2NyeXB0LmggKGVudW0gZ2NyeV9jb250cm9sX2NtZHMpOiBBZGQgR0NSWV9TRVRfQ1RSLgorCShlbnVtIGdjcnlfY2lwaGVyX21vZGVzKTogQWRkIEdDUllfQ0lQSEVSX01PREVfQ1RSLgorCShnY3J5X2NpcGhlcl9zZXRjdHIpOiBOZXcgbWFjcm8gdG8gc2V0IGNvdW50ZXIuCisKKzIwMDMtMDMtMTkgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBjaXBoZXIuaCAoUFVCS0VZX0ZMQUdfTk9fQkxJTkRJTkcpOiBOZXcgc3ltYm9sLgorCisyMDAzLTAzLTIyICBTaW1vbiBKb3NlZnNzb24gIDxqYXNAZXh0dW5kby5jb20+CisKKwkqIGdjcnlwdC5oOiBBZGQgR0NSWUNUTF9TRVRfQ0JDX01BQyBhbmQgR0NSWV9DSVBIRVJfQ0JDX01BQy4KKworMjAwMy0wMy0xOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGcxMGxpYi5oOiBBZGp1c3RlZCBwcmltZWdlbi5jIHByb3RvdHlwZXMuCisKKzIwMDMtMDMtMTIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBzZXhwLmMgKHNleHBfc3NjYW4pOiBJbml0aWFsaXplIE5NLiAgVGhhbmtzIHRvIElhbiBQZXRlcnMgZm9yCisJdmFsZ3JpbmRpbmcgdGhpcy4KKworMjAwMy0wMy0wNiAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogc2VjbWVtLmggKEdDUllfU0VDTUVNX0ZMQUdfTk9fV0FSTklORywKKwlHQ1JZX1NFQ01FTV9GTEFHX1NVU1BFTkRfV0FSTklORyk6IE5ldyBzeW1ib2xzLgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKTogVXNlCisJR0NSWV9TRUNNRU1fRkxBR197Tk8sU1VTUEVORH1fV0FSTklORywgaW5zdGVhZCBvZiBoYXJkLWNvZGVkCisJdmFsdWVzLgorCSogc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MpOiBMaWtld2lzZS4KKwkqIHNlY21lbS5jIChfZ2NyeV9zZWNtZW1fZ2V0X2ZsYWdzKTogTGlrZXdpc2UuCisKKzIwMDMtMDMtMDMgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBtaXNjLmM6IFJlbW92ZWQgb2xkIEZJWE1FLCBzaW5jZSB0aGVyZSBpcyBhbHJlYWR5IGEgZnVuY3Rpb24gdG8KKwlzZXQgdGhlIHZhbHVlIG9mIGB2ZXJib3NpdHlfbGV2ZWwnLgorCisJKiBnY3J5cHQuaDogUmVtb3ZlZCBlbnVtZXJhdGlvbiBsaXN0OiBnY3J5X2N0bF9jbWRzLgorCU5ldyBlbnVtZXJhdGlvbiBsaXN0czogZ2NyeV9nbG9iYWxfY29udHJvbF9jbWRzLAorCWdjcnlfY29udHJvbF9jbWRzLCBnY3J5X2luZm9fY21kcywgZ2NyeV9hbGdvX2luZm9fY21kcy4KKworMjAwMy0wMy0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGdjcnlwdC5oIChnY3J5X2NpcGhlcl9yZXNldCk6IE5ldyBtYWNybyBmb3IgcmVzZXR0aW5nIGEgaGFuZGxlLgorCisyMDAzLTAyLTI4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogc2VjbWVtLmMgKERFRkFVTFRfUEFHRVNJWkUpOiBOZXcgc3ltYm9sLgorCShpbml0X3Bvb2wpOiBVc2UgREVGQVVMVF9QQUdFU0laRS4KKworMjAwMy0wMi0yMyAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHNlY21lbS5oOiBGaXggdHlwbyBpbiBkZWNsYXJhdGlvbiBvZiBfZ2NyeV9zZWNtZW1fdGVybS4KKworCSogc2V4cC5jOiBNb3ZlIG1hY3JvIGRlZmluaXRpb25zIG9mIGBkaWdpdHAnLCBgb2N0ZGlnaXQnLCBgYWxwaGFwJworCWFuZCBgaGV4ZGlnaXQnIC4uLgorCSogZzEwbGliLmg6IC4uLiBoZXJlLgorCisJKiBtaXNjLmMgKF9nY3J5X2J1cm5fc3RhY2spOiBOZXcgZnVuY3Rpb24gKGZvcm1lciBuYW1lOgorCWJ1cm5fc3RhY2spLgorCisJKiBnMTBsaWIuaCAoYnVybl9zdGFjayk6IERlY2xhcmUgX2djcnlfYnVybl9zdGFjaygpLgorCisyMDAzLTAxLTI0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2xvYmFsLmMgKGdjcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIpOiBSZWdpc3RlciBhIHJhbmRvbSBwcm9ncmVzcworCWhhbmRsZXIuCisKKzIwMDMtMDEtMjMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaCAoR0NSWV9FTkFCTEVfUVVJQ0tfUkFORE9NKTogTmV3LgorCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IE1ha2UgdXNlIG9mIGl0LgorCisyMDAzLTAxLTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LmggKGdjcnlfcmFuZG9tX2FkZF9ieXRlcyk6IEFkZCBRVUFMSVRZIGFyZ3VtZW50LgorCisyMDAzLTAxLTIxICBUaW1vIFNjaHVseiAgPHR3b2FkYXlAZnJlYWttYWlsLmRlPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9yYW5kb21fYWRkX2J5dGVzKTogTmV3LgorCisyMDAzLTAxLTIwICBTaW1vbiBKb3NlZnNzb24gIDxqYXNAZXh0dW5kby5jb20+CisKKwkqIGdjcnlwdC5oIChnY3J5X21kX2FsZ29zKTogQWRkIEdDUllfTURfQ1JDMzIsCisJR0NSWV9NRF9DUkMzMl9SRkMxNTEwLCBHQ1JZX01EX0NSQzI0X1JGQzI0NDAuCisKKzIwMDMtMDEtMTYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9tZF93cml0ZSk6IENoYW5nZWQgdHlwZSBvZiAybmQgYXJndW1lbnQgdG8gdm9pZCouCisJKGdjcnlfbWRfaGFzaF9idWZmZXIpOiBDaGFuZ2VkIHR5cGUgb2YgYm90aCBidWZmZXJzIHRvIHZvaWQqLgorCShnY3J5X21kX3NldGtleSk6IENoYW5nZWQgdHlwZSBvZiAybmQgYXJndW1lbnQgdG8gdm9pZCouCisJKGdjcnlfbWRfZ2V0X2Fzbm9pZCk6IE5ldy4KKworMjAwMy0wMS0xNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNleHAuYyAoZ2NyeV9zZXhwX2xlbmd0aCk6IEZpeGVkLiAgVGhpcyB3YXMgc2VyaW91c2x5IGJyb2tlbi4KKworMjAwMy0wMS0xNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oIChHQ1JZRVJSX0lOVl9GTEFHKSwgZ2xvYmFsLmMgKGdjcnlfc3RyZXJyb3IpOiBOZXcuCisKKzIwMDMtMDEtMDIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsaWJnY3J5cHQudmVyczogVGVtcG9yYXJ5IGV4cG9ydCBfZ2NyeV9nZW5lcmF0ZV9lbGdfcHJpbWUgZm9yCisJdXNlIGJ5IEdOVVRMUy4KKworMjAwMi0xMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBNYWtlIHVzZSBvZiBnY2MncyBwdXJlIGFuZCBtYWxsb2MgYXR0cmlidXRlcworCShnY3J5X21kX3B1dGMpOiBVc2UgYSBoZWxwZXIgdmFyaWFibGUgdG8gYXZvaWQgbXVsdGlwbGUKKwlldmFsdWF0aW9uIG9mIEguCisJKiBnMTBsaWIuaCwgc3RkbWVtLmgsIHNlY21lbS5oOiBVc2UgZ2NjIGF0dHJpYnV0ZXMgcHVyZSBhbmQgbWFsbG9jLgorCisJKiBzdGRtZW0uYyAodXNlX21fZ3VhcmQpOiBEb24ndCBkZWZhdWx0IHRvIHllcy4KKworMjAwMi0xMi0xOSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdsb2JhbC5jIChnbG9iYWxfaW5pdCk6IFRoZSBtZWF0IHdhcyBuZXZlciBydW4gZHVlIHRvIGEgZmF1bHR5CisJY2hlY2suIFRoYW5rcyB0byBOaWtvcyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKKwkqIGdsb2JhbC5jIChnY3J5X2NvbnRyb2wpOiBSZXR1cm4gMSBhbmQgbm90IC0xIGZvciB0aGUKKwlpbml0aWFsaXphdGlvbiB0ZXN0cy4KKworCSogbGliZ2NyeXB0LnZlcnM6IE5ldy4KKwkqIE1ha2VmaWxlLmFtOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBidWlsZCBzeW1ib2wgZmlsZS4KKworCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCkgPGluaXRpYWxpemF0aW9uPjogQ2FsbCB0aGUgcmFuZG9tIG1vZHVsZQorCWluaXRpYWxpemVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwb29sIGxvY2sgZmxhZyBoYXMgYmVlbgorCWluaXRpYWxpemVkLgorCisyMDAyLTEyLTA5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2xvYmFsLmMgKGdjcnlfY2FsbG9jLGdjcnlfY2FsbG9jX3NlY3VyZSk6IENoZWNrIGZvciBvdmVyZmxvdy4KKwlOb3RlZCBieSBGbG9yaWFuIFdlaW1lci4KKworMjAwMi0xMS0xMCAgU2ltb24gSm9zZWZzc29uICA8amFzQGV4dHVuZG8uY29tPgorCisJKiBnY3J5cHQuaCAoZ2NyeV9jdGxfY21kcyk6IE5ldyBHQ1JZQ1RMX1NFVF9DQkNfQ1RTIGNvbnRyb2wgZmxhZy4KKwkoZ2NyeV9jaXBoZXJfZmxhZ3MpOiBOZXcgR0NSWV9DSVBIRVJfQ0JDX0NUUyBnY3J5X2NpcGhlcl9vcGVuKCkgZmxhZy4KKwkoZ2NyeV9jaXBoZXJfY3RzKTogTmV3IG1hY3JvIGZvciB0b2dnbGluZyBDVFMuCisKKzIwMDItMTEtMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaCAoR0NSWV9NRF9NRDQpOiBOZXcuICBXZSB1c2UgYSBub24gT3BlblBHUCB2YWx1ZSBoZXJlLgorCisyMDAyLTA5LTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYXRoLmM6IEluY2x1ZGUgc3lzLnRpbWUuaCBpZiBzeXMvc2VsZWN0LmggZG9lcyBub3QgZXhpc3QuCisJKGF0aF9zZWxlY3QsIGF0aF93YWl0cGlkKTogU2hvcnRjdXQgZm9yIFdpbmRvd3MuCisJKiBhdGguaDogSW5jbHVkZSBzb21lIFdpbmRvd3MgaGVhZGVycy4gIEJ5IFRpbW8uCisKKzIwMDItMDktMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBhdGguaDogUHJlZml4IGF0aF9kZWluaXQuCisKKzIwMDItMDktMTcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBiZW5jaG1hcmsuYzogTmV3LgorCShtcGlfYmVuY2gsIGRvX3Bvd20pOiBBZGQgYSBhIHNpbXBsZSB0ZXN0IGZvciBSU0EuCisKKwkqIGdsb2JhbC5jIChnbG9iYWxfaW5pdCk6IE5ldy4gIFVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBzZXR0aW5nCisJYW55X2luaXRfZG9uZS4gIEluaXRpYWxpemUgdGhlIEFUSCBzeXN0ZW0uCisJKGdjcnlfY2hlY2tfdmVyc2lvbik6IEhvb2sgZ2xvYmFsX2luaXQgaW4uICBUaGlzIGlzIHRoZSBzdWdnZXN0ZWQKKwl3YXkgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4KKwkoX2djcnlfbm9faW50ZXJuYWxfbG9ja2luZyk6IFJlbW92ZWQuICBXZSBzaW1wbHkgY2FsbCBhIGF0aF9kZWluaXQKKwlhbmQgbGVhdmUgaXQgdG8gQVRIIHRvIGRpc2JhbGUgdGhlIGxvY2tpbmcuCisKKwkqIGF0aC5jLCBhdGguaCwgYXRoLXB0aC5jLCBhdGgtcHRocmVhZC5jOiBOZXcuIFRha2VuIGZyb20gR1BHTUUuCisJKiBtdXRleC5oOiBSZW1vdmVkLgorCSogTWFrZWZpbGUuYW0gKGF0aF9jb21wb25lbnRzKTogTmV3LgorCisyMDAyLTA5LTE2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2VjbWVtLmMgKF9nY3J5X3NlY21lbV9kdW1wX3N0YXRzKTogUmVwbGFjZWQgZnByaW50ZiBieSBsb2dfKi4KKworMjAwMi0wOC0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1pc3Npbmctc3RyaW5nLmM6IFJlbW92ZWQgdW5uZWVkZWQgc3RybHdyLgorCisJKiBsaWJnY3J5cHQubTQ6IE1hZGUgbXVjaCBtb3JlIHNpbXBsZS4KKwkqIGxpYmdjcnlwdC1jb25maWcuaW46IE1hZGUgLS1wcmVmaXggd29yayBmb3IgLS1saWJzLgorCisyMDAyLTA4LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0Lmg6IEFkZCBHQ1JZX0NJUEdFUl9ERVMuICBJbmNsdWRlZCBzdHJpbmcuaCBmb3Igc2l6ZV90LgorCVN1Z2dlc3RlZCBieSBTaW1vbiBKb3NlZnNzb24uCisKKzIwMDItMDctMjUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBjaXBoZXIuaDogQWRkZWQgcHJvdG90eXBlcyBmb3IgcHJvZ3Jlc3MgZnVuY3Rpb25zLgorCSogZ2xvYmFsLmM6IEluY2x1ZGUgY2lwaGVyLmggZm9yIHRob3NlIHByb3RvdHlwZXMuCisKKwkqIHN0ZG1lbS5jIChfZ2NyeV9wcml2YXRlX3JlYWxsb2MpOiBSZXBsYWNlZCB2b2lkKiBieSBjaGFyICogZm9yCisJcG9pbnRlciBhcml0aG1ldGljIHJlYXNvbnMuICBOb3RlZCBieSBTdGVwaGFuIEF1c3Rlcm11ZWhsZS4KKworMjAwMi0wNi0yNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1pc3Npbmctc3RyaW5nLmM6IEluY2x1ZGUgY3R5cGUuaC4KKworCSogZ2NyeXB0LmggKGdjcnlfbXBpX2ludm0sIGdjcnlfbXBpX2RpdiwgZ2NyeV9tcGlfbW9kKQorCShnY3J5X21waV9zd2FwKTogTmV3LgorCisyMDAyLTA2LTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0Lmg6IEFkZGVkIGEgYnVuY2ggb2YgYnJpZWYgZnVuY3Rpb24gZGVzY3JpcHRpb25zLgorCisyMDAyLTA1LTIxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbWlzYy5jIChfZ2NyeV9sb2dfcHJpbnRmKTogRG9uJ3QgaW5pdGlhbGl6ZSBhIHZhX2xpc3QuICBOb3RlZCBieQorCUplZmYgSm9obnNvbi4KKworCSogZ2xvYmFsLmMgKGdjcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIpOiBOZXcuCisKKwkqIGdjcnlwdC5oOiBSZXBsYWNlZCB0aGUgdHlwZWRlZiBmb3IgYnl0ZS4KKworMjAwMi0wNS0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1pc3Npbmctc3RyaW5nLmM6IE5ldy4KKworCSogZ2NyeXB0Lmg6IEFkZCBuZXcgZXJyb3IgY29kZXMgR0NSWUVSUl9TRVhQXyBhbmQgdHlwZWRlZnMKKwlHY3J5TVBJLCBHY3J5U2V4cCwgR2NyeUNpcGhlckhkLCBHY3J5TURIZCBhcyBhbGlhc2VzIGZvciB0aGUgb2xkCisJb25lcyB1c2luZyBhbiB1bmRlcnNjb3JlLgorCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJlcnJvcik6IEFkZCBzdHJpbmdzIGZybyB0aGUgbmV3IGVycm9yIGNvZGVzLgorCSogc2V4cC5jIChnY3J5X3NleHBfY2Fub25fbGVuKTogVXNlIGEgbWFjcm8gdG8gY29udmVydCBmcm9tIG5ldyB0bworCW9sZCBlcnJvciBjb2Rlcy4KKwkoZ2NyeV9zZXhwX2NyZWF0ZSxnY3J5X3NleHBfbmV3KTogTmV3LgorCisyMDAyLTA1LTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbXV0ZXguaCAoREVGSU5FX0xPQ0FMX01VVEVYKTogTWFjcm8gdG8gZGVmaW5lIGEgbXV0ZXggYW5kCisJaW5pdGlhbGl6ZSBpdCBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgYW4gdW5pdGlhbGl6ZWQgbXV0ZXggYW5kIGRvbid0CisJcmVhZCBmcm9tIHN0ZGluLgorCisyMDAyLTA1LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUNoYW5nZWQgbGljZW5zZSBvZiBhbGwgZmlsZXMgdG8gdGhlIExHUEwuCisKKzIwMDItMDUtMDcgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sKTogQWRkIGNvbW1hbmRzCisJR0NSWUNUTF9BTllfSU5JVElBTElaQVRJT05fUCBhbmQgR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRF9QCisJc28gdGhhdCBvdGhlciBsaWJyYXJpZXMgYXJlIGFibGUgdG8gY2hlY2sgZm9yIHJlcXVpcmVkCisJaW5pdGlhbGl6YXRpb25zLgorCisyMDAyLTA1LTAyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogZ2NyeXB0LmggKEdDUllDVExfRElTQUJMRV9JTlRFUk5BTF9MT0NLSU5HKTogTmV3LgorCSogZ2xvYmFsLmMgKGdjcnlfY29udHJvbCk6IEltcGxlbWVudCBpdC4KKwkoX2djcnlfbm9faW50ZXJuYWxfbG9ja2luZyk6IE5ldy4KKwkqIG11dGV4Lmg6IFByZWZpeGVkIGFsbCBmdWNudGlvbnMgd2l0aCBfZ2NyeV8uICBCeXBhc3MgYWxsCisJZnVuY3Rpb25zIHdoZW4gZGVzaXJlZC4KKworCSogZ2NyeXB0LmggKEdDUllDVExfRElTQUJMRV9TRUNNRU0pOiBOZXcuCisJKiBnbG9iYWwuYyAoZ2NyeV9jb250cm9sLGdjcnlfbWFsbG9jX3NlY3VyZSxnY3J5X2lzX3NlY3VyZSk6CisJSW1wbGVtZW50IGl0IGhlcmUuCisJKiBzZWNtZW0uYyAoX2djcnlfcHJpdmF0ZV9pc19zZWN1cmUpOiBSZXR1cm4gZmFsc2UgaWYgdGhlIHBvb2wgaXMKKwlub3QgaW5pdGlhbGl6ZWQuCisKKwkqIGdjcnlwdC5oIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVEKTogTmV3LgorCisJKiBnY3J5cHQuaCAoZ2NyeV9jaXBoZXJfYWxnb3MpOiBSZXBsYWNlZCBSSU5EQUVMIGJ5IEFFUyBhbmQgY2hhbmdlCisJdGhlIG1hY3JvcyB0byBleHBhbmQgZnJvbSByaWpkYWVsIHRvIGFlcy4KKworCSogc3RkbWVtLmMgKF9nY3J5X3ByaXZhdGVfbWFsbG9jKTogUmV0dXJuIE5VTEwgZm9yIDAgYnl0ZSBhbGxvY2F0aW9uLgorCShfZ2NyeV9wcml2YXRlX21hbGxvY19zZWN1cmUpOiBEaXR0by4KKworCSogZzEwbGliLmg6ICBDb3BpZWQgdGhlIEpOTElCX0dDQyBtYWNyb3MgZnJvbSAuLi9qbmxpYi9taXNjaGVscC5oCisJYW5kIHJlbW92ZWQgdGhlIGluY2x1c2lvbiBvZiB0aGF0IGZpbGUuCisKKzIwMDItMDQtMTUgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJkdXApOiBOZXcuCisKKzIwMDItMDMtMTggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBtdXRleC5oOiBOZXcgZmlsZSB3aXRoIGEgcG9ydGFibGUgdGhyZWFkIG11dGV4IGltcGxlbWVudGF0aW9uCisJd3JpdHRlbiBieSBNYXJjdXMgQnJpbmttYW5uLiAgVGFrZW4gZnJvbSBHUEdNRS4KKworMjAwMi0wMi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNleHAuYyAoZ2NyeV9zZXhwX3NzY2FuKTogRG9uJ3QgaW5pdGlhbGl6ZSB0aGUgZHVtbXkKKwl2YXJpYWJsZS4gIFN1Z2dlc3RlZCBieSBKb3JkaSBNYWxsYWNoLgorCisyMDAyLTAxLTMxICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2V4cC5jIChzdWl0YWJsZV9lbmNvZGluZyxjb252ZXJ0X3RvX2hleCxjb252ZXJ0X3RvX3N0cmluZykKKwkoY29udmVydF90b190b2tlbik6IE5ldy4KKwkoZ2NyeV9zZXhwX3NwcmludCk6IEJldHRlciBmb3JtYXR0aW5nIG9mIGFkdmFuY2VkIGVuY29kaW5nLCBkb2VzCisJbm93IGluc2VydCBMRnMgYW5kIGVzY2FwZXMgYWxsIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuCisJKHVucXVvdGVfc3RyaW5nKTogTmV3LgorCShzZXhwX3NzY2FuKTogSW1wbGVtZW50ZWQgdGhlIG1pc3NpbmcgY29udmVyc2lvbiBvZiBxdW90ZWQgc3RyaW5ncy4KKworMjAwMi0wMS0yNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGxpYmdjcnlwdC1jb25maWcuaW46IEFkZCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDAyLTAxLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2V4cC5jIChnY3J5X3NleHBfY2Fub25fbGVuKTogRml4ZWQgbGFzdCBjaGFuZ2UuCisKKzIwMDItMDEtMDEgIFRpbW8gU2NodWx6IDx0c0B3aW5wdC5vcmc+CisKKwkqIHN0ZG1lbS5jIChfZ2NyeV9wcml2YXRlX3JlYWxsb2MpOiBJZiBwb2ludGVyIGlzIE5VTEwgbm93IHJlYWxsb2MKKwliZWhhdmVzIGxpa2UgbWFsbG9jLgorCisyMDAxLTEyLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2V4cC5jIChnY3J5X3NleHBfY2Fub25fbGVuKTogRGVzY3JpYmUgdGhlIGVycm9yIGNvZGVzIGFuZAorCXJldHVybiBhbiBlcnJvciBpZiB0aGlzIGlzIG5vdCBhIFMtRXhwOyBpLmUuIGl0IGRvZXMgbm90IHN0YXJ0CisJd2l0aCBhbiBvcGVuIHBhcmVudGhlc2lzLgorCisyMDAxLTEyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogc2V4cC5jIChnY3J5X3NleHBfY2Fub25fbGVuKTogRml4ZWQgdGhlIHRlc3Qgb24gTlVMTCBidWZmZXIuCisKKwkqIE1ha2VmaWxlLmFtIChESVNUQ0xFQU5GSUxFUyk6IEluY2x1ZGUgbGliZ2NyeXB0LnN5bQorCisJKiBzZXhwLmM6IFJlbW92ZWQgdGhlIGNvbW1lbnRlZCB0ZXN0IGNvZGUgYmVjYXVzZSB3ZSBub3cgaGF2ZSBhCisJdGVzdCBpbiAuLi90ZXN0cy8KKworMjAwMS0xMi0xNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHNleHAuYyAoZ2NyeV9zZXhwX2Nhbm9uX2xlbik6IE5ldy4KKworMjAwMS0xMi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBGaXhlZCBBRVMxMjggbWFjcm8sIGFkZCBlbnVtIGZvciBPRkIgbW9kZS4KKworMjAwMS0xMi0wNSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1pc2MuYyAoX2djcnlfbG9nX3ByaW50Zik6IE5ldy4KKwkqIHNleHAuYyAoZHVtcF9zdHJpbmcsZ2NyeV9zZXhwX2R1bXApOiBVc2UgbG9nZ2luZyBmdW5jdGlvbnMKKwlpbnN0ZWFkIG9mIHN0ZGVyci4KKworMjAwMS0xMS0xNiAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBOZXcgY29uc3RhbnQgR0NSWUNUTF9JU19BTEdPX0VOQUJMRUQuCisKKzIwMDEtMTAtMDIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaDogUmVtb3ZlZCBhIGNvdXBsZSBvZiB0cmFpbGluZyBjb21tYXMuCisKKzIwMDEtMDgtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBzZXhwLmMgKHNleHBfc3NjYW4pOiBBZGQgYW4gYXJndW1lbnQgdG8gZW5hYmxlIHRoZQorCWFyZ19wdHIuIENoYW5nZWQgYWxsIGNhbGxlcnMuICBTdWdnZXN0ZWQgYnkgVG9tIEhvbHJveWQuCisKKzIwMDEtMDgtMDMgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnbG9iYWwuYyAoZ2NyeV9zdHJlcnJvcik6IFVwZGF0ZWQgbGlzdCBvZiBlcnJvciBjb2Rlcy4KKworMjAwMS0wNy0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGdjcnlwdC5oOiBSZXBsYWNlZCB0aGUgbGFzdCB1bG9uZy4gIE5vdGVkIGJ5IFJhbWkgTGVodGkuCisKKzIwMDEtMDUtMzEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaCwgbXBpLmg6IE1hZGUgc29tZSBtcGkgZnVuY3Rpb25zIHB1YmxpYy4KKworCSogd3JhcHBlci5jOiBSZW1vdmVkLgorCSogZ2xvYmFsLmM6IFJlbmFtZWQgYWxsIGcxMF8gcHJlZml4ZWQgZnVuY3Rpb25zIHdoaWNoIGhhZCB3cmFwcGVycworCXRvIGdjcnlfeHh4LiBTbyB3ZSBub3cgdXNlIHRoZSBleHBvcnRlZCBtZW1vcnkgZnVuY3Rpb25zIGluZXJuYWxseS4KKworCVJlbmFtZWQgYWxsIGcxMF8gcHJlZml4ZWQgZnVuY3Rpb25zIHRvIF9nY3J5XyBwcmVmaXhlZCBvbmVzLgorCisJKiBnMTBsaWIuaCAoX0dDUllQVF9JTl9MSUJHQ1JZUFQpOiBSZXBsYWNlIGRlZmludGlvbiBieSBhIHRlc3Qgb24gaXQuCisKKzIwMDEtMDUtMjggIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBsaWJnY3J5cHQubTQ6IENoZWNrIEdDUllQVF9WRVJTSU9OIG1hY3JvIGFuZCBub3QgTElCR0NSWVBUX1ZFUlNJT04uCisKKwkqIG1waS5oOiBSZW1vdmVkIG1waV9mcm9tc3RyIHByb3RvdHlwZS4KKworMjAwMS0wMS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJnY3J5cHRfbGFfU09VUkNFUyk6IEFkZCBtcGkuaAorCisyMDAwLTEyLTE5ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogdHlwZXMuaDogTW92ZWQgZnJvbSAuLi9pbmNsdWRlIHRvIGhlcmUuCisKKwlNYWpvciBjaGFuZ2U6CisJUmVtb3ZlZCBhbGwgR251UEcgc3R1ZmYgYW5kIHJlbmFtZWQgdGhpcyBwaWVjZSBvZiBzb2Z0d2FyZQorCXRvIGdjcnlwdC4KKworMjAwMC0xMS0xNCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIG1waS5oOiBNb3ZlZCB0byAuLi9tcGkuCisKKwkqIE1ha2VmaWxlLmFtIChPTUlUX0RFUEVOREVOQ0lFUyk6IEhhY2sgdG8gd29yayBhcm91bmQgZGVwZW5kZW5jeQorCXByb2JsZW1zLgorCisyMDAwLTEwLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogbXBpLmg6IENoYW5nZWQgdGhlIHdheSBtcGlfbGltYl90IGlzIGRlZmluZWQuCisKKzIwMDAtMTAtMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVGFrZSB2ZXJzaW9uLWluZm8gZnJvbSBjb25maWd1cmUuCisKKzIwMDAtMTAtMDkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBnY3J5cHQuaDogTmV3IGNpcGhlciBtb2RlLCBuZXcgYWxnbyBBcmNmb3VyIGFuZCBuZXcgZXJyb3IgY29kZQorCUdDUllFUlJfSU5WX0NJUEhFUl9NT0RFLgorCSogZ2xvYmFsLmMgKGdjcnlfc3RyZXJyb3IpOiBOZXcgZXJyb3Jjb2RlLgorCitXZWQgT2N0ICA0IDEzOjE2OjE4IENFU1QgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BvcGVuaXQuZGU+CisKKyAgICAgICAgKiBnY3J5cHQuaCAoZ2NyeV9tZF9zZXRrZXkpOiBSZXBsYWNlZCBtYWNybyBieSBmdW5jdGlvbiBwcm90b3R5cGUuCisKK01vbiBTZXAgMTggMTY6MzU6NDUgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAgICAgICAqIGdjcnlwdC5oIChHQ1JZQ1RMX0dFVF9BTEdPX1VTQUdFKTogTmV3LgorCisgICAgICAgICogc2VjbWVtLmMgKHNlY21lbV9yZWFsbG9jKTogY2hlY2sgZm9yIGZhaWxlZCBzZWNtZW1fbWFsbG9jLiAgQnkKKyAgICAgICAgTWF0dCBLcmFhaS4KKworTW9uIEp1bCAzMSAxMDowNDo0NyBDRVNUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAb3Blbml0LmRlPgorCisgICogc2V4cC5jOiBSZW1vdmVkIHRoZSBkYXRhbGVuIGZpZWxkcyBmcm9tIGxpc3QgdGFncy4KKyAgKGdjcnlfc2V4cF9jYXJfZGF0YSxnY3J5X3NleHBfY2RyX2RhdGEsZ2NyeV9zZXhwX2Nhcl9tcGksCisgICBnY3J5X3NleHBfY2RyX21waSk6IFJlbW92ZWQuCisgIChnY3J5X3NleHBfbnRoLGdjcnlfc2V4cF9udGhfZGF0YSxnY3J5X3NleHBfbnRoX21waSk6IE5ldy4KKworRnJpIEp1bCAyOCAxODoxOToxMSBDRVNUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAb3Blbml0LmRlPgorCisgICogc2V4cC5jIChzZXhwX3NzY2FuKTogRml4ZWQgcmVhbGxvY2F0aW9uIHRvIHNlY3VyZSBtZW1vcnkuCisgIChuZXdfZW1wdHlfbGlzdCk6IFJlbW92ZWQKKyAgKGdjcnlfc2V4cF9sZW5ndGgpOiBOZXcuCisgIChnY3J5X3NleHBfZW51bSk6IFJlbW92ZWQuCisgIChub3JtYWxpemUpOiBOZXcuIFJld29ya2VkIHRoZSB3aG9sZSB0aGluZyB0byB1c2UgTlVMTCBmb3IgYW4gZW1wdHkgbGlzdC4KKyAgKG1ha2Vfc3BhY2UpOiBOZXcgaW5zdGVhZCBvZiB0aGUgbWFjcm8uCisKK1R1ZSBKdWwgMjUgMTc6NDQ6MTUgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQG9wZW5pdC5kZT4KKworICAqIHNleHAuYzogTWFqb3IgcmV3cml0ZS4KKyAgKGdjcnlfc2V4cF9zc2Nhbik6IFJlb3JkZXJlZCBhcmd1bWVudHMuICBNb3ZlZCBmdW5jdGlvbmFsaXR5IHRvIC4uCisgIChzZXhwX3NzY2FuKTogLi4gdGhpcy4KKyAgKGdjcnlfc2V4cF9idWlsZCk6IE5ldy4KKyAgKGdjcnlfc2V4cF9uZXdfbmFtZV9tcGksIGdjcnlfc2V4cF9uZXdfbmFtZV9kYXRhLCBnY3J5X3NleHBfbmV3X2RhdGEsCisgICBnY3J5X3NleHBfbmV3X21waSk6IFJlbW92ZWQuCisKK0ZyaSBKdWwgMTQgMTk6Mzg6MjMgQ0VTVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQD4KKworICAqIGdjcnlwdC5oIChnY3J5X21kX3N0YXJ0X2RlYnVnLCBnY3J5X21kX3N0b3BfZGVidWcpOiBOZXcuCisgIChnY3J5X2N0bF9jbWRzKTogTmV3IGNvbnRyb2wgdmFsdWVzCisKKyAgKiBzZXhwLmMgKGdjcnlfc2V4cF9zc2Nhbik6IEFkZCBoZXggZm9ybWF0IHBhcnNpbmcuCisKKyAgKiBzZWNtZW0uYyAobG9ja19wb29sKTogQ2hlY2sgZm9yIEVOT1NZUyByZXR1cm4gbXkgbWxvY2soKSBvbiBvbGQgU0NPcy4KKyAgKHBvb2xfaXNfbW1hcHBlZCk6IE1hZGUgdm9sYXRpbGUuCisgIChsb2NrX3Bvb2wpOiBObyBtb3JlIHdhcm5pbmcgZm9yIFFOWC4gQnkgU2FtIFJvYmVydHMuCisgIChsb2NrX3Bvb2wsc2VjbWVtX2luaXQpOiBBZGRpdGlvbmFsIGNoZWNrIGZvciBkcm9wcGVkIHByaXZzLgorCisyMDAwLTAzLTIxIDA5OjE4OjQ4ICBXZXJuZXIgS29jaCAgKHdrQGhhYmlidGkuZ251cGcuZGUpCisKKwkqIGdjcnlwdC5oIChnY3J5X21kX3NldGtleSk6IE5ldy4KKwkoR0NSWV9NRF9GTEFHX0hNQUMpOiBOZXcuCisKK01vbiBKYW4gMzEgMTY6Mzc6MzQgQ0VUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZzEwbGliLmgKKworVGh1IEphbiAyNyAxODowMDo0NCBDRVQgMjAwMCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogc2V4cC5jIChnY3J5X3NleHBfc3NjYW4pOiBBbGxvdyBOVUxMIGZvciBlcnJvZmYuCisKK01vbiBKYW4gMjQgMjI6MjQ6MzggQ0VUIDIwMDAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIHNleHAuYyAoZ2NyeV9zZXhwX2FsaXN0KTogTmV3LgorCitNb24gSmFuIDI0IDEzOjA0OjI4IENFVCAyMDAwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLmRlPgorCisJKiBzZWNtZW0uYzogTW92ZWQgZnJvbSAuLi91dGlsIHRvIGhlcmUuCisJKiBzZWNtZW0uaDogTmV3LgorCSogc3RkbWVtLmM6IE5ldy4gQmFzZWQgb24gdGhlIG9sZCAuLi91dGlsL21lbW9yeS5jLgorCSogc3RkbWVtLmg6IE5ldy4KKworV2VkIERlYyAgOCAyMTo1ODozMiBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogZ2NyeXB0Lm00OiBOZXcuCisJKiBnY3J5cHQtY29uZmlnOiBOZXcuCisKKwkqIG1waS5oIChtcGlfZ2V0X25iaXRfaW5mbyk6IFJlbW92ZWQKKwkobXBpX3NldF9uYml0X2luZm8pOiBSZW1vdmVkLgorCShzdHJ1Y3QgZ2NyeV9tcGkpOiBSZW1vdmVkIHRoZSBuYml0cyBmaWVsZC4KKworCSogbWlzYy5jIChnMTBfbG9nX3ZlcmJvc2l0eSk6IE5ldy4KKworCSogZ2xvYmFsLmMgKGcxMF94c3RyZHVwKTogTmV3LgorCisJKiBtcGlhcGkuYzogUmVtb3ZlZC4KKworCSogbXBpLmg6IE1vdmVkIGZyb20gLi4vaW5jbHVkZSB0byBoZXJlLiAgUmVtb3ZlZCBzb21lIG9ic29sZXRlCisJcHJvdG90eXBlcyBhbmQgdGhlIGlvYnVmLmggaGVhZGVyLgorCSogY2lwaGVyLmg6IE1vdmVkIGZyb20gLi4vaW5jbHVkZSB0byBoZXJlLiBSZW1vdmVkIHRoZSBtcGkuaCBoZWFkZXIuCisJKiBnMTBsaWIuaDogTW92ZWQgZnJvbSAuLi9pbmNsdWRlIHRvIGhlcmUuCisKK0ZyaSBOb3YgMTkgMTc6MTU6MjAgQ0VUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcuZGU+CisKKwkqIHNleHAuYyAoZHVtcF9zdHJpbmcpOiBOZXcuICBUYWtlbiBmcm9tIGdudXBnL3V0aWwvbWlzY3V0aWwuYy4KKwkoZG9fZHVtcF9saXN0KTogcy9wcmludF9zdHJpbmcvZHVtcF9zdHJpbmcvLgorCisJKiB0ZXN0YXBpLmM6IE5ldy4KKworCSogbXBpYXBpLmMgKGdjcnlfbXBpX3JhbmRvbWl6ZSk6IFVzZSBuZXcgcmFuZG9tIEFQSS4KKworU2F0IE5vdiAxMyAxNzo0NDoyMyBDRVQgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogZ2xvYWJsLmMgKGdjcnlfY29udHJvbCk6IEFkZCBjYXNlcyBmb3IgZHVtcGluZyByYW5kb20KKwlhbmQgc2VjbWVtIHN0YXRzLgorCitUdWUgT2N0IDI2IDE0OjEwOjIxIENFU1QgMTk5OSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5kZT4KKworCSogcGthcGkuYzogUmVtb3ZlZC4KKworCSogc3ltYXBpLmM6IFJlbW92ZWQuCisKKwkqIGcxMGxpYi5oOiAgTW92ZWQgdG8gLi4vaW5jbHVkZS4KKworCSogbWRhcGkuYzogUmVtb3ZlZC4KKworV2VkIEp1bCAgNyAxMzowODo0MCBDRVNUIDE5OTkgIFdlcm5lciBLb2NoICA8d2tAaXNpbC5kLnNodXR0bGUuZGU+CisKKwkqIHNleHAuYzogTmV3LgorCitUdWUgRGVjICA4IDEzOjE1OjE2IENFVCAxOTk4ICBXZXJuZXIgS29jaCAgPHdrQGlzaWwuZC5zaHV0dGxlLmRlPgorCisJKiBnY3J5cHQuaDogTmV3CisJKiBtcGlhcGkuYzogTmV3CisKKworIENvcHlyaWdodCAoQykgMTk5OCwxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDMKKwkgICAgICAgMjAwNCwyMDA1LDIwMDgsMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworTG9jYWwgVmFyaWFibGVzOgorYnVmZmVyLXJlYWQtb25seTogdAorRW5kOgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDgwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNTggQEAKKyMgTWFrZWZpbGUuYW0gLSBmb3IgZ2NyeXB0L3NyYworIyBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgMjAwNiwgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisKK0VYVFJBX0RJU1QgPSBNYW5pZmVzdCBsaWJnY3J5cHQtY29uZmlnLmluIGxpYmdjcnlwdC5tNCBsaWJnY3J5cHQudmVycyBcCisgICAgICAgICAgICAgZ2NyeXB0LmguaW4gbGliZ2NyeXB0LmRlZgorCitiaW5fU0NSSVBUUyA9IGxpYmdjcnlwdC1jb25maWcKK200ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorbTRkYXRhX0RBVEEgPSBsaWJnY3J5cHQubTQKK2luY2x1ZGVfSEVBREVSUyA9IGdjcnlwdC5oCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmdjcnlwdC5sYQorYmluX1BST0dSQU1TID0gZHVtcHNleHAgaG1hYzI1NiBtcGljYWxjCitpZiBVU0VfUkFORE9NX0RBRU1PTgorc2Jpbl9QUk9HUkFNUyA9IGdjcnlwdHJuZAorYmluX1BST0dSQU1TICs9IGdldHJhbmRvbQorZW5kaWYgVVNFX1JBTkRPTV9EQUVNT04KKworIyBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBzb21lIHRhcmdldHMgcmVxdWlyZSBsaWJncGctZXJyb3IuCitpZiBIQVZFX1czMkNFX1NZU1RFTQorYXJjaF9ncGdfZXJyb3JfY2ZsYWdzID0gJChHUEdfRVJST1JfQ0ZMQUdTKQorYXJjaF9ncGdfZXJyb3JfbGlicyAgID0gJChHUEdfRVJST1JfTElCUykKK2Vsc2UKK2FyY2hfZ3BnX2Vycm9yX2NmbGFncyA9CithcmNoX2dwZ19lcnJvcl9saWJzICAgPQorZW5kaWYKKworQU1fQ0ZMQUdTID0gJChHUEdfRVJST1JfQ0ZMQUdTKQorQU1fQ0NBU0ZMQUdTID0gJChOT0VYRUNTVEFDS19GTEFHUykKKworaWYgSEFWRV9MRF9WRVJTSU9OX1NDUklQVAorICBsaWJnY3J5cHRfdmVyc2lvbl9zY3JpcHRfY21kID0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpL2xpYmdjcnlwdC52ZXJzCitlbHNlCisgIGxpYmdjcnlwdF92ZXJzaW9uX3NjcmlwdF9jbWQgPQorZW5kaWYKKworbGliZ2NyeXB0X2xhX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK2xpYmdjcnlwdF9sYV9TT1VSQ0VTID0gXAorICAgICAgICBnY3J5cHQtaW50LmggZzEwbGliLmggdmlzaWJpbGl0eS5jIHZpc2liaWxpdHkuaCB0eXBlcy5oIFwKKwljaXBoZXIuaCBjaXBoZXItcHJvdG8uaCBcCisJbWlzYy5jIGdsb2JhbC5jIHNleHAuYyBod2ZlYXR1cmVzLmMgaHdmLWNvbW1vbi5oIFwKKwlzdGRtZW0uYyBzdGRtZW0uaCBzZWNtZW0uYyBzZWNtZW0uaCBcCisJbXBpLmggbWlzc2luZy1zdHJpbmcuYyBmaXBzLmMgXAorCWhtYWMyNTYuYyBobWFjMjU2LmggY29udGV4dC5jIGNvbnRleHQuaCBcCisJZWMtY29udGV4dC5oIFwKKwlhdGguaCBhdGguYworCitFWFRSQV9saWJnY3J5cHRfbGFfU09VUkNFUyA9IGh3Zi14ODYuYyBod2YtYXJtLmMKK2djcnlwdF9od2ZfbW9kdWxlcyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACisKKworaWYgSEFWRV9XMzJfU1lTVEVNCisKK1JDQ09NUElMRSA9ICQoUkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChsaWJnY3J5cHRfbGFfQ1BQRkxBR1MpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpCitMVFJDQ09NUElMRSA9ICQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgLS10YWc9UkMgJChSQ0NPTVBJTEUpCisKK1NVRkZJWEVTID0gLnJjIC5sbworCisucmMubG86CisJJChMVFJDQ09NUElMRSkgLWkgIiQ8IiAtbyAiJEAiCisKK2djcnlwdF9yZXMgPSB2ZXJzaW9uaW5mby5sbworbm9fdW5kZWZpbmVkID0gLW5vLXVuZGVmaW5lZAorZXhwb3J0X3N5bWJvbHMgPSAtZXhwb3J0LXN5bWJvbHMgJChzcmNkaXIpL2xpYmdjcnlwdC5kZWYKKworaW5zdGFsbC1kZWYtZmlsZToKKwktJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChsaWJkaXIpCisJJChJTlNUQUxMKSAkKHNyY2RpcikvbGliZ2NyeXB0LmRlZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdjcnlwdC5kZWYKKwordW5pbnN0YWxsLWRlZi1maWxlOgorCS1ybSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdjcnlwdC5kZWYKKworZ2NyeXB0X2RlcHMgPSAkKGdjcnlwdF9yZXMpIGxpYmdjcnlwdC5kZWYKKworZWxzZSAhSEFWRV9XMzJfU1lTVEVNCisKK2djcnlwdF9yZXMgPQorZ2NyeXB0X3Jlc19sZGZsYWcgPQorbm9fdW5kZWZpbmVkID0KK2V4cG9ydF9zeW1ib2xzID0KK2luc3RhbGwtZGVmLWZpbGU6Cit1bmluc3RhbGwtZGVmLWZpbGU6CisKK2djcnlwdF9kZXBzID0KKworZW5kaWYgIUhBVkVfVzMyX1NZU1RFTQorCisKK2xpYmdjcnlwdF9sYV9MREZMQUdTID0gJChub191bmRlZmluZWQpICQoZXhwb3J0X3N5bWJvbHMpIFwKKwkkKGxpYmdjcnlwdF92ZXJzaW9uX3NjcmlwdF9jbWQpIC12ZXJzaW9uLWluZm8gXAorCUBMSUJHQ1JZUFRfTFRfQ1VSUkVOVEA6QExJQkdDUllQVF9MVF9SRVZJU0lPTkA6QExJQkdDUllQVF9MVF9BR0VACitsaWJnY3J5cHRfbGFfREVQRU5ERU5DSUVTID0gXAorICAgICAgICAgJChnY3J5cHRfaHdmX21vZHVsZXMpIFwKKwkuLi9jaXBoZXIvbGliY2lwaGVyLmxhIFwKKwkuLi9yYW5kb20vbGlicmFuZG9tLmxhIFwKKwkuLi9tcGkvbGlibXBpLmxhIFwKKwkuLi9jb21wYXQvbGliY29tcGF0LmxhIFwKKwkkKHNyY2RpcikvbGliZ2NyeXB0LnZlcnMgJChnY3J5cHRfZGVwcykKK2xpYmdjcnlwdF9sYV9MSUJBREQgPSAkKGdjcnlwdF9yZXMpIFwKKyAgICAgICAgJChnY3J5cHRfaHdmX21vZHVsZXMpIFwKKwkuLi9jaXBoZXIvbGliY2lwaGVyLmxhIFwKKwkuLi9yYW5kb20vbGlicmFuZG9tLmxhIFwKKwkuLi9tcGkvbGlibXBpLmxhIFwKKwkuLi9jb21wYXQvbGliY29tcGF0LmxhICAkKEdQR19FUlJPUl9MSUJTKQorCisKK2R1bXBzZXhwX1NPVVJDRVMgPSBkdW1wc2V4cC5jCitkdW1wc2V4cF9DRkxBR1MgPSAkKGFyY2hfZ3BnX2Vycm9yX2NmbGFncykKK2R1bXBzZXhwX0xEQUREID0gJChhcmNoX2dwZ19lcnJvcl9saWJzKSAkKExJQlRIUkVBRCkKKworbXBpY2FsY19TT1VSQ0VTID0gbXBpY2FsYy5jCittcGljYWxjX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK21waWNhbGNfTERBREQgPSBsaWJnY3J5cHQubGEgJChHUEdfRVJST1JfTElCUykgJChMSUJUSFJFQUQpCisKK2htYWMyNTZfU09VUkNFUyA9IGhtYWMyNTYuYworaG1hYzI1Nl9DRkxBR1MgPSAtRFNUQU5EQUxPTkUgJChhcmNoX2dwZ19lcnJvcl9jZmxhZ3MpCitobWFjMjU2X0xEQUREID0gJChhcmNoX2dwZ19lcnJvcl9saWJzKSAkKExJQlRIUkVBRCkKKworaWYgVVNFX1JBTkRPTV9EQUVNT04KK2djcnlwdHJuZF9TT1VSQ0VTID0gZ2NyeXB0cm5kLmMKK2djcnlwdHJuZF9DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpICQoUFRIX0NGTEFHUykKK2djcnlwdHJuZF9MREFERCA9IGxpYmdjcnlwdC5sYSAkKEdQR19FUlJPUl9MSUJTKSAkKFBUSF9MSUJTKSAkKExJQlRIUkVBRCkKKworZ2V0cmFuZG9tX1NPVVJDRVMgPSBnZXRyYW5kb20uYworZW5kaWYgVVNFX1JBTkRPTV9EQUVNT04KKworCitpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtZGVmLWZpbGUKKwordW5pbnN0YWxsLWxvY2FsOiB1bmluc3RhbGwtZGVmLWZpbGUKKworIyBGSVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBnZXQgdGhlIGFjdHVhbCBuYW1lIChwYXJzaW5nCisjIGxpYmdjcnlwdC5sYT8pIGFuZCBob3cgdG8gY3JlYXRlIHRoZSBobWFjIGZpbGUgYWxyZWFkeSBhdCBsaW5rIHRpbWUKKyMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3aXRob3V0IGluc3RhbGxpbmcgbGliZ2NyeXB0IGZpcnN0LgorI2luc3RhbGwtZXhlYy1ob29rOgorIwkuL2htYWMyNTYgIldoYXQgYW0gSSwgYSBkb2N0b3Igb3IgYSBtb29uc2h1dHRsZSBjb25kdWN0b3I/IiBcCisjICAgICAgICAgIDwgJChERVNURElSKSQobGliZGlyKS9saWJnY3J5cHQuc28uMTEuNS4wIFwKKyMgICAgICAgICAgPiAkKERFU1RESVIpJChsaWJkaXIpLy5saWJnY3J5cHQuc28uMTEuNS4wLmhtYWMKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGFkNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTE3OSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIE1ha2VmaWxlLmFtIC0gZm9yIGdjcnlwdC9zcmMKKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgIDIwMDYsIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKworCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitiaW5fUFJPR1JBTVMgPSBkdW1wc2V4cCQoRVhFRVhUKSBobWFjMjU2JChFWEVFWFQpIG1waWNhbGMkKEVYRUVYVCkgXAorCSQoYW1fX0VYRUVYVF8xKQorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAc2Jpbl9QUk9HUkFNUyA9IGdjcnlwdHJuZCQoRVhFRVhUKQorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAYW1fX2FwcGVuZF8xID0gZ2V0cmFuZG9tCitzdWJkaXIgPSBzcmMKK0RJU1RfQ09NTU9OID0gJChpbmNsdWRlX0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9nY3J5cHQuaC5pbiBcCisJJChzcmNkaXIpL2xpYmdjcnlwdC1jb25maWcuaW4gJChzcmNkaXIpL3ZlcnNpb25pbmZvLnJjLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9ncGctZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ub2V4ZWNzdGFjay5tNCAkKHRvcF9zcmNkaXIpL200L29uY2Vvbmx5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NvY2tsZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zeXNfc29ja2V0X2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdGhyZWFkbGliLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZ2NyeXB0LmggbGliZ2NyeXB0LWNvbmZpZyB2ZXJzaW9uaW5mby5yYworQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIiBcCisJIiQoREVTVERJUikkKHNiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgXAorCSIkKERFU1RESVIpJChtNGRhdGFkaXIpIiAiJChERVNURElSKSQoaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQGFtX19ERVBFTkRFTkNJRVNfMSA9IHZlcnNpb25pbmZvLmxvCithbV9fREVQRU5ERU5DSUVTXzIgPQorYW1fbGliZ2NyeXB0X2xhX09CSkVDVFMgPSBsaWJnY3J5cHRfbGEtdmlzaWJpbGl0eS5sbyBcCisJbGliZ2NyeXB0X2xhLW1pc2MubG8gbGliZ2NyeXB0X2xhLWdsb2JhbC5sbyBcCisJbGliZ2NyeXB0X2xhLXNleHAubG8gbGliZ2NyeXB0X2xhLWh3ZmVhdHVyZXMubG8gXAorCWxpYmdjcnlwdF9sYS1zdGRtZW0ubG8gbGliZ2NyeXB0X2xhLXNlY21lbS5sbyBcCisJbGliZ2NyeXB0X2xhLW1pc3Npbmctc3RyaW5nLmxvIGxpYmdjcnlwdF9sYS1maXBzLmxvIFwKKwlsaWJnY3J5cHRfbGEtaG1hYzI1Ni5sbyBsaWJnY3J5cHRfbGEtY29udGV4dC5sbyBcCisJbGliZ2NyeXB0X2xhLWF0aC5sbworbGliZ2NyeXB0X2xhX09CSkVDVFMgPSAkKGFtX2xpYmdjcnlwdF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorbGliZ2NyeXB0X2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJnY3J5cHRfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAYW1fX0VYRUVYVF8xID0gZ2V0cmFuZG9tJChFWEVFWFQpCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKSAkKHNiaW5fUFJPR1JBTVMpCithbV9kdW1wc2V4cF9PQkpFQ1RTID0gZHVtcHNleHAtZHVtcHNleHAuJChPQkpFWFQpCitkdW1wc2V4cF9PQkpFQ1RTID0gJChhbV9kdW1wc2V4cF9PQkpFQ1RTKQorQEhBVkVfVzMyQ0VfU1lTVEVNX1RSVUVAYW1fX0RFUEVOREVOQ0lFU18zID0gJChhbV9fREVQRU5ERU5DSUVTXzIpCitkdW1wc2V4cF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMykgJChhbV9fREVQRU5ERU5DSUVTXzIpCitkdW1wc2V4cF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChkdW1wc2V4cF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fZ2NyeXB0cm5kX1NPVVJDRVNfRElTVCA9IGdjcnlwdHJuZC5jCitAVVNFX1JBTkRPTV9EQUVNT05fVFJVRUBhbV9nY3J5cHRybmRfT0JKRUNUUyA9ICBcCitAVVNFX1JBTkRPTV9EQUVNT05fVFJVRUAJZ2NyeXB0cm5kLWdjcnlwdHJuZC4kKE9CSkVYVCkKK2djcnlwdHJuZF9PQkpFQ1RTID0gJChhbV9nY3J5cHRybmRfT0JKRUNUUykKK0BVU0VfUkFORE9NX0RBRU1PTl9UUlVFQGdjcnlwdHJuZF9ERVBFTkRFTkNJRVMgPSBsaWJnY3J5cHQubGEgXAorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18yKSBcCitAVVNFX1JBTkRPTV9EQUVNT05fVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKK0BVU0VfUkFORE9NX0RBRU1PTl9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMikKK2djcnlwdHJuZF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChnY3J5cHRybmRfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX2dldHJhbmRvbV9TT1VSQ0VTX0RJU1QgPSBnZXRyYW5kb20uYworQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAYW1fZ2V0cmFuZG9tX09CSkVDVFMgPSBnZXRyYW5kb20uJChPQkpFWFQpCitnZXRyYW5kb21fT0JKRUNUUyA9ICQoYW1fZ2V0cmFuZG9tX09CSkVDVFMpCitnZXRyYW5kb21fTERBREQgPSAkKExEQUREKQorYW1faG1hYzI1Nl9PQkpFQ1RTID0gaG1hYzI1Ni1obWFjMjU2LiQoT0JKRVhUKQoraG1hYzI1Nl9PQkpFQ1RTID0gJChhbV9obWFjMjU2X09CSkVDVFMpCitobWFjMjU2X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18zKSAkKGFtX19ERVBFTkRFTkNJRVNfMikKK2htYWMyNTZfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoaG1hYzI1Nl9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9tcGljYWxjX09CSkVDVFMgPSBtcGljYWxjLW1waWNhbGMuJChPQkpFWFQpCittcGljYWxjX09CSkVDVFMgPSAkKGFtX21waWNhbGNfT0JKRUNUUykKK21waWNhbGNfREVQRU5ERU5DSUVTID0gbGliZ2NyeXB0LmxhICQoYW1fX0RFUEVOREVOQ0lFU18yKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzIpCittcGljYWxjX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKG1waWNhbGNfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorU0NSSVBUUyA9ICQoYmluX1NDUklQVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJnY3J5cHRfbGFfU09VUkNFUykgJChFWFRSQV9saWJnY3J5cHRfbGFfU09VUkNFUykgXAorCSQoZHVtcHNleHBfU09VUkNFUykgJChnY3J5cHRybmRfU09VUkNFUykgJChnZXRyYW5kb21fU09VUkNFUykgXAorCSQoaG1hYzI1Nl9TT1VSQ0VTKSAkKG1waWNhbGNfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGliZ2NyeXB0X2xhX1NPVVJDRVMpICQoRVhUUkFfbGliZ2NyeXB0X2xhX1NPVVJDRVMpIFwKKwkkKGR1bXBzZXhwX1NPVVJDRVMpICQoYW1fX2djcnlwdHJuZF9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19nZXRyYW5kb21fU09VUkNFU19ESVNUKSAkKGhtYWMyNTZfU09VUkNFUykgXAorCSQobXBpY2FsY19TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK0RBVEEgPSAkKG00ZGF0YV9EQVRBKQorSEVBREVSUyA9ICQoaW5jbHVkZV9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9GSUxFVkVSU0lPTiA9IEBCVUlMRF9GSUxFVkVSU0lPTkAKK0JVSUxEX1JFVklTSU9OID0gQEJVSUxEX1JFVklTSU9OQAorQlVJTERfVElNRVNUQU1QID0gQEJVSUxEX1RJTUVTVEFNUEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitETF9MSUJTID0gQERMX0xJQlNACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZBTExCQUNLX1NPQ0tMRU5fVCA9IEBGQUxMQkFDS19TT0NLTEVOX1RACitGR1JFUCA9IEBGR1JFUEAKK0dDUllQVF9DSVBIRVJTID0gQEdDUllQVF9DSVBIRVJTQAorR0NSWVBUX0RJR0VTVFMgPSBAR0NSWVBUX0RJR0VTVFNACitHQ1JZUFRfSFdGX01PRFVMRVMgPSBAR0NSWVBUX0hXRl9NT0RVTEVTQAorR0NSWVBUX0tERlMgPSBAR0NSWVBUX0tERlNACitHQ1JZUFRfUFVCS0VZX0NJUEhFUlMgPSBAR0NSWVBUX1BVQktFWV9DSVBIRVJTQAorR0NSWVBUX1JBTkRPTSA9IEBHQ1JZUFRfUkFORE9NQAorR1BHX0VSUk9SX0NGTEFHUyA9IEBHUEdfRVJST1JfQ0ZMQUdTQAorR1BHX0VSUk9SX0NPTkZJRyA9IEBHUEdfRVJST1JfQ09ORklHQAorR1BHX0VSUk9SX0xJQlMgPSBAR1BHX0VSUk9SX0xJQlNACitHUkVQID0gQEdSRVBACitJTlNFUlRfU1lTX1NFTEVDVF9IID0gQElOU0VSVF9TWVNfU0VMRUNUX0hACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCR0NSWVBUX0NJUEhFUlMgPSBATElCR0NSWVBUX0NJUEhFUlNACitMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OID0gQExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05ACitMSUJHQ1JZUFRfQ09ORklHX0NGTEFHUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0NGTEFHU0AKK0xJQkdDUllQVF9DT05GSUdfSE9TVCA9IEBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACitMSUJHQ1JZUFRfQ09ORklHX0xJQlMgPSBATElCR0NSWVBUX0NPTkZJR19MSUJTQAorTElCR0NSWVBUX0RJR0VTVFMgPSBATElCR0NSWVBUX0RJR0VTVFNACitMSUJHQ1JZUFRfTFRfQUdFID0gQExJQkdDUllQVF9MVF9BR0VACitMSUJHQ1JZUFRfTFRfQ1VSUkVOVCA9IEBMSUJHQ1JZUFRfTFRfQ1VSUkVOVEAKK0xJQkdDUllQVF9MVF9SRVZJU0lPTiA9IEBMSUJHQ1JZUFRfTFRfUkVWSVNJT05ACitMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlMgPSBATElCR0NSWVBUX1BVQktFWV9DSVBIRVJTQAorTElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTID0gQExJQkdDUllQVF9USFJFQURfTU9EVUxFU0AKK0xJQk1VTFRJVEhSRUFEID0gQExJQk1VTFRJVEhSRUFEQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVEhSRUFEID0gQExJQlRIUkVBREAKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCTVVMVElUSFJFQUQgPSBATFRMSUJNVUxUSVRIUkVBREAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVExJQlRIUkVBRCA9IEBMVExJQlRIUkVBREAKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNS0RJUl9QID0gQE1LRElSX1BACitNUElfU0ZMQUdTID0gQE1QSV9TRkxBR1NACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT0VYRUNTVEFDS19GTEFHUyA9IEBOT0VYRUNTVEFDS19GTEFHU0AKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUFRIX0NGTEFHUyA9IEBQVEhfQ0ZMQUdTQAorUFRIX0NPTkZJRyA9IEBQVEhfQ09ORklHQAorUFRIX0xJQlMgPSBAUFRIX0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorUkMgPSBAUkNACitSVU5fTEFSR0VfREFUQV9URVNUUyA9IEBSVU5fTEFSR0VfREFUQV9URVNUU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitTWVNfU09DS0VUX0ggPSBAU1lTX1NPQ0tFVF9IQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTl9OVU1CRVIgPSBAVkVSU0lPTl9OVU1CRVJACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitlbWFjc19sb2NhbF92YXJzX2JlZ2luID0gQGVtYWNzX2xvY2FsX3ZhcnNfYmVnaW5ACitlbWFjc19sb2NhbF92YXJzX2VuZCA9IEBlbWFjc19sb2NhbF92YXJzX2VuZEAKK2VtYWNzX2xvY2FsX3ZhcnNfcmVhZF9vbmx5ID0gQGVtYWNzX2xvY2FsX3ZhcnNfcmVhZF9vbmx5QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorRVhUUkFfRElTVCA9IE1hbmlmZXN0IGxpYmdjcnlwdC1jb25maWcuaW4gbGliZ2NyeXB0Lm00IGxpYmdjcnlwdC52ZXJzIFwKKyAgICAgICAgICAgICBnY3J5cHQuaC5pbiBsaWJnY3J5cHQuZGVmCisKK2Jpbl9TQ1JJUFRTID0gbGliZ2NyeXB0LWNvbmZpZworbTRkYXRhZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCittNGRhdGFfREFUQSA9IGxpYmdjcnlwdC5tNAoraW5jbHVkZV9IRUFERVJTID0gZ2NyeXB0LmgKK2xpYl9MVExJQlJBUklFUyA9IGxpYmdjcnlwdC5sYQorQEhBVkVfVzMyQ0VfU1lTVEVNX0ZBTFNFQGFyY2hfZ3BnX2Vycm9yX2NmbGFncyA9IAorCisjIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIHNvbWUgdGFyZ2V0cyByZXF1aXJlIGxpYmdwZy1lcnJvci4KK0BIQVZFX1czMkNFX1NZU1RFTV9UUlVFQGFyY2hfZ3BnX2Vycm9yX2NmbGFncyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK0BIQVZFX1czMkNFX1NZU1RFTV9GQUxTRUBhcmNoX2dwZ19lcnJvcl9saWJzID0gCitASEFWRV9XMzJDRV9TWVNURU1fVFJVRUBhcmNoX2dwZ19lcnJvcl9saWJzID0gJChHUEdfRVJST1JfTElCUykKK0FNX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK0FNX0NDQVNGTEFHUyA9ICQoTk9FWEVDU1RBQ0tfRkxBR1MpCitASEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRUBsaWJnY3J5cHRfdmVyc2lvbl9zY3JpcHRfY21kID0gCitASEFWRV9MRF9WRVJTSU9OX1NDUklQVF9UUlVFQGxpYmdjcnlwdF92ZXJzaW9uX3NjcmlwdF9jbWQgPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHNyY2RpcikvbGliZ2NyeXB0LnZlcnMKK2xpYmdjcnlwdF9sYV9DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpCitsaWJnY3J5cHRfbGFfU09VUkNFUyA9IFwKKyAgICAgICAgZ2NyeXB0LWludC5oIGcxMGxpYi5oIHZpc2liaWxpdHkuYyB2aXNpYmlsaXR5LmggdHlwZXMuaCBcCisJY2lwaGVyLmggY2lwaGVyLXByb3RvLmggXAorCW1pc2MuYyBnbG9iYWwuYyBzZXhwLmMgaHdmZWF0dXJlcy5jIGh3Zi1jb21tb24uaCBcCisJc3RkbWVtLmMgc3RkbWVtLmggc2VjbWVtLmMgc2VjbWVtLmggXAorCW1waS5oIG1pc3Npbmctc3RyaW5nLmMgZmlwcy5jIFwKKwlobWFjMjU2LmMgaG1hYzI1Ni5oIGNvbnRleHQuYyBjb250ZXh0LmggXAorCWVjLWNvbnRleHQuaCBcCisJYXRoLmggYXRoLmMKKworRVhUUkFfbGliZ2NyeXB0X2xhX1NPVVJDRVMgPSBod2YteDg2LmMgaHdmLWFybS5jCitnY3J5cHRfaHdmX21vZHVsZXMgPSBAR0NSWVBUX0hXRl9NT0RVTEVTQAorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQFJDQ09NUElMRSA9ICQoUkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCitASEFWRV9XMzJfU1lTVEVNX1RSVUVACSQobGliZ2NyeXB0X2xhX0NQUEZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKQorCitASEFWRV9XMzJfU1lTVEVNX1RSVUVATFRSQ0NPTVBJTEUgPSAkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPVJDICQoUkNDT01QSUxFKQorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQFNVRkZJWEVTID0gLnJjIC5sbworQEhBVkVfVzMyX1NZU1RFTV9GQUxTRUBnY3J5cHRfcmVzID0gCitASEFWRV9XMzJfU1lTVEVNX1RSVUVAZ2NyeXB0X3JlcyA9IHZlcnNpb25pbmZvLmxvCitASEFWRV9XMzJfU1lTVEVNX0ZBTFNFQG5vX3VuZGVmaW5lZCA9IAorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQG5vX3VuZGVmaW5lZCA9IC1uby11bmRlZmluZWQKK0BIQVZFX1czMl9TWVNURU1fRkFMU0VAZXhwb3J0X3N5bWJvbHMgPSAKK0BIQVZFX1czMl9TWVNURU1fVFJVRUBleHBvcnRfc3ltYm9scyA9IC1leHBvcnQtc3ltYm9scyAkKHNyY2RpcikvbGliZ2NyeXB0LmRlZgorQEhBVkVfVzMyX1NZU1RFTV9GQUxTRUBnY3J5cHRfZGVwcyA9IAorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQGdjcnlwdF9kZXBzID0gJChnY3J5cHRfcmVzKSBsaWJnY3J5cHQuZGVmCitASEFWRV9XMzJfU1lTVEVNX0ZBTFNFQGdjcnlwdF9yZXNfbGRmbGFnID0gCitsaWJnY3J5cHRfbGFfTERGTEFHUyA9ICQobm9fdW5kZWZpbmVkKSAkKGV4cG9ydF9zeW1ib2xzKSBcCisJJChsaWJnY3J5cHRfdmVyc2lvbl9zY3JpcHRfY21kKSAtdmVyc2lvbi1pbmZvIFwKKwlATElCR0NSWVBUX0xUX0NVUlJFTlRAOkBMSUJHQ1JZUFRfTFRfUkVWSVNJT05AOkBMSUJHQ1JZUFRfTFRfQUdFQAorCitsaWJnY3J5cHRfbGFfREVQRU5ERU5DSUVTID0gXAorICAgICAgICAgJChnY3J5cHRfaHdmX21vZHVsZXMpIFwKKwkuLi9jaXBoZXIvbGliY2lwaGVyLmxhIFwKKwkuLi9yYW5kb20vbGlicmFuZG9tLmxhIFwKKwkuLi9tcGkvbGlibXBpLmxhIFwKKwkuLi9jb21wYXQvbGliY29tcGF0LmxhIFwKKwkkKHNyY2RpcikvbGliZ2NyeXB0LnZlcnMgJChnY3J5cHRfZGVwcykKKworbGliZ2NyeXB0X2xhX0xJQkFERCA9ICQoZ2NyeXB0X3JlcykgXAorICAgICAgICAkKGdjcnlwdF9od2ZfbW9kdWxlcykgXAorCS4uL2NpcGhlci9saWJjaXBoZXIubGEgXAorCS4uL3JhbmRvbS9saWJyYW5kb20ubGEgXAorCS4uL21waS9saWJtcGkubGEgXAorCS4uL2NvbXBhdC9saWJjb21wYXQubGEgICQoR1BHX0VSUk9SX0xJQlMpCisKK2R1bXBzZXhwX1NPVVJDRVMgPSBkdW1wc2V4cC5jCitkdW1wc2V4cF9DRkxBR1MgPSAkKGFyY2hfZ3BnX2Vycm9yX2NmbGFncykKK2R1bXBzZXhwX0xEQUREID0gJChhcmNoX2dwZ19lcnJvcl9saWJzKSAkKExJQlRIUkVBRCkKK21waWNhbGNfU09VUkNFUyA9IG1waWNhbGMuYworbXBpY2FsY19DRkxBR1MgPSAkKEdQR19FUlJPUl9DRkxBR1MpCittcGljYWxjX0xEQUREID0gbGliZ2NyeXB0LmxhICQoR1BHX0VSUk9SX0xJQlMpICQoTElCVEhSRUFEKQoraG1hYzI1Nl9TT1VSQ0VTID0gaG1hYzI1Ni5jCitobWFjMjU2X0NGTEFHUyA9IC1EU1RBTkRBTE9ORSAkKGFyY2hfZ3BnX2Vycm9yX2NmbGFncykKK2htYWMyNTZfTERBREQgPSAkKGFyY2hfZ3BnX2Vycm9yX2xpYnMpICQoTElCVEhSRUFEKQorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAZ2NyeXB0cm5kX1NPVVJDRVMgPSBnY3J5cHRybmQuYworQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAZ2NyeXB0cm5kX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykgJChQVEhfQ0ZMQUdTKQorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAZ2NyeXB0cm5kX0xEQUREID0gbGliZ2NyeXB0LmxhICQoR1BHX0VSUk9SX0xJQlMpICQoUFRIX0xJQlMpICQoTElCVEhSRUFEKQorQFVTRV9SQU5ET01fREFFTU9OX1RSVUVAZ2V0cmFuZG9tX1NPVVJDRVMgPSBnZXRyYW5kb20uYworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucmMgLmxvIC5jIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHNyYy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBzcmMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitnY3J5cHQuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2djcnlwdC5oLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2xpYmdjcnlwdC1jb25maWc6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9saWJnY3J5cHQtY29uZmlnLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK3ZlcnNpb25pbmZvLnJjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvdmVyc2lvbmluZm8ucmMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAoraW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdjcnlwdC5sYTogJChsaWJnY3J5cHRfbGFfT0JKRUNUUykgJChsaWJnY3J5cHRfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdjcnlwdF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliZ2NyeXB0X2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJnY3J5cHRfbGFfT0JKRUNUUykgJChsaWJnY3J5cHRfbGFfTElCQUREKSAkKExJQlMpCitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitpbnN0YWxsLXNiaW5QUk9HUkFNUzogJChzYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChzYmluZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChzYmluZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChzYmluZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKHNiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoc2JpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1zYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChzYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoc2JpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHNiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoc2JpbmRpcikiICYmIHJtIC1mICQkZmlsZXMKKworY2xlYW4tc2JpblBST0dSQU1TOgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitkdW1wc2V4cCQoRVhFRVhUKTogJChkdW1wc2V4cF9PQkpFQ1RTKSAkKGR1bXBzZXhwX0RFUEVOREVOQ0lFUykgJChFWFRSQV9kdW1wc2V4cF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBkdW1wc2V4cCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoZHVtcHNleHBfTElOSykgJChkdW1wc2V4cF9PQkpFQ1RTKSAkKGR1bXBzZXhwX0xEQUREKSAkKExJQlMpCitnY3J5cHRybmQkKEVYRUVYVCk6ICQoZ2NyeXB0cm5kX09CSkVDVFMpICQoZ2NyeXB0cm5kX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nY3J5cHRybmRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ2NyeXB0cm5kJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChnY3J5cHRybmRfTElOSykgJChnY3J5cHRybmRfT0JKRUNUUykgJChnY3J5cHRybmRfTERBREQpICQoTElCUykKK2dldHJhbmRvbSQoRVhFRVhUKTogJChnZXRyYW5kb21fT0JKRUNUUykgJChnZXRyYW5kb21fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dldHJhbmRvbV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnZXRyYW5kb20kKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ2V0cmFuZG9tX09CSkVDVFMpICQoZ2V0cmFuZG9tX0xEQUREKSAkKExJQlMpCitobWFjMjU2JChFWEVFWFQpOiAkKGhtYWMyNTZfT0JKRUNUUykgJChobWFjMjU2X0RFUEVOREVOQ0lFUykgJChFWFRSQV9obWFjMjU2X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGhtYWMyNTYkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGhtYWMyNTZfTElOSykgJChobWFjMjU2X09CSkVDVFMpICQoaG1hYzI1Nl9MREFERCkgJChMSUJTKQorbXBpY2FsYyQoRVhFRVhUKTogJChtcGljYWxjX09CSkVDVFMpICQobXBpY2FsY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfbXBpY2FsY19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBtcGljYWxjJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChtcGljYWxjX0xJTkspICQobXBpY2FsY19PQkpFQ1RTKSAkKG1waWNhbGNfTERBREQpICQoTElCUykKK2luc3RhbGwtYmluU0NSSVBUUzogJChiaW5fU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoYmluZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChiaW5kaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgZWxzZSA6OyBmaTsgXAorCWRvbmUgfCBcCisJc2VkIC1lICdwO3MsLiovLCw7bicgXAorCSAgICAtZSAnaDtzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDskKHRyYW5zZm9ybSknIHwgc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMTsgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSB7IGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICAgIGlmICgrK25bZF0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSB7IFwKKwkJcHJpbnQgImYiLCBkLCBmaWxlc1tkXTsgbltkXSA9IDA7IGZpbGVzW2RdID0gIiIgfSB9IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgZCAiLyIgJCQ0LCAkJDEgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCisJICAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICAgICBlY2hvICIgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoYmluZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1iaW5TQ1JJUFRTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGJpbmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kdW1wc2V4cC1kdW1wc2V4cC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2NyeXB0cm5kLWdjcnlwdHJuZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cmFuZG9tLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9obWFjMjU2LWhtYWMyNTYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdjcnlwdF9sYS1hdGguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnY3J5cHRfbGEtY29udGV4dC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdjcnlwdF9sYS1maXBzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ2NyeXB0X2xhLWdsb2JhbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdjcnlwdF9sYS1obWFjMjU2LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ2NyeXB0X2xhLWh3Zi1hcm0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnY3J5cHRfbGEtaHdmLXg4Ni5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdjcnlwdF9sYS1od2ZlYXR1cmVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ2NyeXB0X2xhLW1pc2MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnY3J5cHRfbGEtbWlzc2luZy1zdHJpbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnY3J5cHRfbGEtc2VjbWVtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ2NyeXB0X2xhLXNleHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnY3J5cHRfbGEtc3RkbWVtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ2NyeXB0X2xhLXZpc2liaWxpdHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tcGljYWxjLW1waWNhbGMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliZ2NyeXB0X2xhLXZpc2liaWxpdHkubG86IHZpc2liaWxpdHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLXZpc2liaWxpdHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdjcnlwdF9sYS12aXNpYmlsaXR5LlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtdmlzaWJpbGl0eS5sbyBgdGVzdCAtZiAndmlzaWJpbGl0eS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2aXNpYmlsaXR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS12aXNpYmlsaXR5LlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLXZpc2liaWxpdHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndmlzaWJpbGl0eS5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS12aXNpYmlsaXR5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS12aXNpYmlsaXR5LmxvIGB0ZXN0IC1mICd2aXNpYmlsaXR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHZpc2liaWxpdHkuYworCitsaWJnY3J5cHRfbGEtbWlzYy5sbzogbWlzYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnY3J5cHRfbGEtbWlzYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLW1pc2MuVHBvIC1jIC1vIGxpYmdjcnlwdF9sYS1taXNjLmxvIGB0ZXN0IC1mICdtaXNjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1pc2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ2NyeXB0X2xhLW1pc2MuVHBvICQoREVQRElSKS9saWJnY3J5cHRfbGEtbWlzYy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtaXNjLmMnIG9iamVjdD0nbGliZ2NyeXB0X2xhLW1pc2MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ2NyeXB0X2xhLW1pc2MubG8gYHRlc3QgLWYgJ21pc2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWlzYy5jCisKK2xpYmdjcnlwdF9sYS1nbG9iYWwubG86IGdsb2JhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnY3J5cHRfbGEtZ2xvYmFsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnY3J5cHRfbGEtZ2xvYmFsLlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtZ2xvYmFsLmxvIGB0ZXN0IC1mICdnbG9iYWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xvYmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS1nbG9iYWwuVHBvICQoREVQRElSKS9saWJnY3J5cHRfbGEtZ2xvYmFsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dsb2JhbC5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS1nbG9iYWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ2NyeXB0X2xhLWdsb2JhbC5sbyBgdGVzdCAtZiAnZ2xvYmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdsb2JhbC5jCisKK2xpYmdjcnlwdF9sYS1zZXhwLmxvOiBzZXhwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdjcnlwdF9sYS1zZXhwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnY3J5cHRfbGEtc2V4cC5UcG8gLWMgLW8gbGliZ2NyeXB0X2xhLXNleHAubG8gYHRlc3QgLWYgJ3NleHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2V4cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnY3J5cHRfbGEtc2V4cC5UcG8gJChERVBESVIpL2xpYmdjcnlwdF9sYS1zZXhwLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NleHAuYycgb2JqZWN0PSdsaWJnY3J5cHRfbGEtc2V4cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnY3J5cHRfbGEtc2V4cC5sbyBgdGVzdCAtZiAnc2V4cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzZXhwLmMKKworbGliZ2NyeXB0X2xhLWh3ZmVhdHVyZXMubG86IGh3ZmVhdHVyZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLWh3ZmVhdHVyZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdjcnlwdF9sYS1od2ZlYXR1cmVzLlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtaHdmZWF0dXJlcy5sbyBgdGVzdCAtZiAnaHdmZWF0dXJlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bod2ZlYXR1cmVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS1od2ZlYXR1cmVzLlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLWh3ZmVhdHVyZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naHdmZWF0dXJlcy5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS1od2ZlYXR1cmVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS1od2ZlYXR1cmVzLmxvIGB0ZXN0IC1mICdod2ZlYXR1cmVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh3ZmVhdHVyZXMuYworCitsaWJnY3J5cHRfbGEtc3RkbWVtLmxvOiBzdGRtZW0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLXN0ZG1lbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLXN0ZG1lbS5UcG8gLWMgLW8gbGliZ2NyeXB0X2xhLXN0ZG1lbS5sbyBgdGVzdCAtZiAnc3RkbWVtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0ZG1lbS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnY3J5cHRfbGEtc3RkbWVtLlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLXN0ZG1lbS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdGRtZW0uYycgb2JqZWN0PSdsaWJnY3J5cHRfbGEtc3RkbWVtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS1zdGRtZW0ubG8gYHRlc3QgLWYgJ3N0ZG1lbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdGRtZW0uYworCitsaWJnY3J5cHRfbGEtc2VjbWVtLmxvOiBzZWNtZW0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLXNlY21lbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLXNlY21lbS5UcG8gLWMgLW8gbGliZ2NyeXB0X2xhLXNlY21lbS5sbyBgdGVzdCAtZiAnc2VjbWVtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNlY21lbS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnY3J5cHRfbGEtc2VjbWVtLlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLXNlY21lbS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzZWNtZW0uYycgb2JqZWN0PSdsaWJnY3J5cHRfbGEtc2VjbWVtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS1zZWNtZW0ubG8gYHRlc3QgLWYgJ3NlY21lbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzZWNtZW0uYworCitsaWJnY3J5cHRfbGEtbWlzc2luZy1zdHJpbmcubG86IG1pc3Npbmctc3RyaW5nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdjcnlwdF9sYS1taXNzaW5nLXN0cmluZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLW1pc3Npbmctc3RyaW5nLlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtbWlzc2luZy1zdHJpbmcubG8gYHRlc3QgLWYgJ21pc3Npbmctc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1pc3Npbmctc3RyaW5nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS1taXNzaW5nLXN0cmluZy5UcG8gJChERVBESVIpL2xpYmdjcnlwdF9sYS1taXNzaW5nLXN0cmluZy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtaXNzaW5nLXN0cmluZy5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS1taXNzaW5nLXN0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnY3J5cHRfbGEtbWlzc2luZy1zdHJpbmcubG8gYHRlc3QgLWYgJ21pc3Npbmctc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1pc3Npbmctc3RyaW5nLmMKKworbGliZ2NyeXB0X2xhLWZpcHMubG86IGZpcHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLWZpcHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdjcnlwdF9sYS1maXBzLlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtZmlwcy5sbyBgdGVzdCAtZiAnZmlwcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXBzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS1maXBzLlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLWZpcHMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmlwcy5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS1maXBzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS1maXBzLmxvIGB0ZXN0IC1mICdmaXBzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcHMuYworCitsaWJnY3J5cHRfbGEtaG1hYzI1Ni5sbzogaG1hYzI1Ni5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnY3J5cHRfbGEtaG1hYzI1Ni5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLWhtYWMyNTYuVHBvIC1jIC1vIGxpYmdjcnlwdF9sYS1obWFjMjU2LmxvIGB0ZXN0IC1mICdobWFjMjU2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhtYWMyNTYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ2NyeXB0X2xhLWhtYWMyNTYuVHBvICQoREVQRElSKS9saWJnY3J5cHRfbGEtaG1hYzI1Ni5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdobWFjMjU2LmMnIG9iamVjdD0nbGliZ2NyeXB0X2xhLWhtYWMyNTYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ2NyeXB0X2xhLWhtYWMyNTYubG8gYHRlc3QgLWYgJ2htYWMyNTYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG1hYzI1Ni5jCisKK2xpYmdjcnlwdF9sYS1jb250ZXh0LmxvOiBjb250ZXh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdjcnlwdF9sYS1jb250ZXh0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnY3J5cHRfbGEtY29udGV4dC5UcG8gLWMgLW8gbGliZ2NyeXB0X2xhLWNvbnRleHQubG8gYHRlc3QgLWYgJ2NvbnRleHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29udGV4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnY3J5cHRfbGEtY29udGV4dC5UcG8gJChERVBESVIpL2xpYmdjcnlwdF9sYS1jb250ZXh0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbnRleHQuYycgb2JqZWN0PSdsaWJnY3J5cHRfbGEtY29udGV4dC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnY3J5cHRfbGEtY29udGV4dC5sbyBgdGVzdCAtZiAnY29udGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250ZXh0LmMKKworbGliZ2NyeXB0X2xhLWF0aC5sbzogYXRoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdjcnlwdF9sYS1hdGgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdjcnlwdF9sYS1hdGguVHBvIC1jIC1vIGxpYmdjcnlwdF9sYS1hdGgubG8gYHRlc3QgLWYgJ2F0aC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdGguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ2NyeXB0X2xhLWF0aC5UcG8gJChERVBESVIpL2xpYmdjcnlwdF9sYS1hdGguUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXRoLmMnIG9iamVjdD0nbGliZ2NyeXB0X2xhLWF0aC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnY3J5cHRfbGEtYXRoLmxvIGB0ZXN0IC1mICdhdGguYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXRoLmMKKworbGliZ2NyeXB0X2xhLWh3Zi14ODYubG86IGh3Zi14ODYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdjcnlwdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ2NyeXB0X2xhLWh3Zi14ODYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdjcnlwdF9sYS1od2YteDg2LlRwbyAtYyAtbyBsaWJnY3J5cHRfbGEtaHdmLXg4Ni5sbyBgdGVzdCAtZiAnaHdmLXg4Ni5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bod2YteDg2LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdjcnlwdF9sYS1od2YteDg2LlRwbyAkKERFUERJUikvbGliZ2NyeXB0X2xhLWh3Zi14ODYuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naHdmLXg4Ni5jJyBvYmplY3Q9J2xpYmdjcnlwdF9sYS1od2YteDg2LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdjcnlwdF9sYS1od2YteDg2LmxvIGB0ZXN0IC1mICdod2YteDg2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh3Zi14ODYuYworCitsaWJnY3J5cHRfbGEtaHdmLWFybS5sbzogaHdmLWFybS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ2NyeXB0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnY3J5cHRfbGEtaHdmLWFybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ2NyeXB0X2xhLWh3Zi1hcm0uVHBvIC1jIC1vIGxpYmdjcnlwdF9sYS1od2YtYXJtLmxvIGB0ZXN0IC1mICdod2YtYXJtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh3Zi1hcm0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ2NyeXB0X2xhLWh3Zi1hcm0uVHBvICQoREVQRElSKS9saWJnY3J5cHRfbGEtaHdmLWFybS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdod2YtYXJtLmMnIG9iamVjdD0nbGliZ2NyeXB0X2xhLWh3Zi1hcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnY3J5cHRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ2NyeXB0X2xhLWh3Zi1hcm0ubG8gYHRlc3QgLWYgJ2h3Zi1hcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHdmLWFybS5jCisKK2R1bXBzZXhwLWR1bXBzZXhwLm86IGR1bXBzZXhwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkdW1wc2V4cF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZHVtcHNleHAtZHVtcHNleHAubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZHVtcHNleHAtZHVtcHNleHAuVHBvIC1jIC1vIGR1bXBzZXhwLWR1bXBzZXhwLm8gYHRlc3QgLWYgJ2R1bXBzZXhwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGR1bXBzZXhwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2R1bXBzZXhwLWR1bXBzZXhwLlRwbyAkKERFUERJUikvZHVtcHNleHAtZHVtcHNleHAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkdW1wc2V4cC5jJyBvYmplY3Q9J2R1bXBzZXhwLWR1bXBzZXhwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGR1bXBzZXhwX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGR1bXBzZXhwLWR1bXBzZXhwLm8gYHRlc3QgLWYgJ2R1bXBzZXhwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGR1bXBzZXhwLmMKKworZHVtcHNleHAtZHVtcHNleHAub2JqOiBkdW1wc2V4cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZHVtcHNleHBfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGR1bXBzZXhwLWR1bXBzZXhwLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZHVtcHNleHAtZHVtcHNleHAuVHBvIC1jIC1vIGR1bXBzZXhwLWR1bXBzZXhwLm9iaiBgaWYgdGVzdCAtZiAnZHVtcHNleHAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkdW1wc2V4cC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kdW1wc2V4cC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kdW1wc2V4cC1kdW1wc2V4cC5UcG8gJChERVBESVIpL2R1bXBzZXhwLWR1bXBzZXhwLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZHVtcHNleHAuYycgb2JqZWN0PSdkdW1wc2V4cC1kdW1wc2V4cC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGR1bXBzZXhwX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGR1bXBzZXhwLWR1bXBzZXhwLm9iaiBgaWYgdGVzdCAtZiAnZHVtcHNleHAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkdW1wc2V4cC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kdW1wc2V4cC5jJzsgZmlgCisKK2djcnlwdHJuZC1nY3J5cHRybmQubzogZ2NyeXB0cm5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnY3J5cHRybmRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdjcnlwdHJuZC1nY3J5cHRybmQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2NyeXB0cm5kLWdjcnlwdHJuZC5UcG8gLWMgLW8gZ2NyeXB0cm5kLWdjcnlwdHJuZC5vIGB0ZXN0IC1mICdnY3J5cHRybmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2NyeXB0cm5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2djcnlwdHJuZC1nY3J5cHRybmQuVHBvICQoREVQRElSKS9nY3J5cHRybmQtZ2NyeXB0cm5kLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2NyeXB0cm5kLmMnIG9iamVjdD0nZ2NyeXB0cm5kLWdjcnlwdHJuZC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnY3J5cHRybmRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2NyeXB0cm5kLWdjcnlwdHJuZC5vIGB0ZXN0IC1mICdnY3J5cHRybmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2NyeXB0cm5kLmMKKworZ2NyeXB0cm5kLWdjcnlwdHJuZC5vYmo6IGdjcnlwdHJuZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2NyeXB0cm5kX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnY3J5cHRybmQtZ2NyeXB0cm5kLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2NyeXB0cm5kLWdjcnlwdHJuZC5UcG8gLWMgLW8gZ2NyeXB0cm5kLWdjcnlwdHJuZC5vYmogYGlmIHRlc3QgLWYgJ2djcnlwdHJuZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2djcnlwdHJuZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nY3J5cHRybmQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ2NyeXB0cm5kLWdjcnlwdHJuZC5UcG8gJChERVBESVIpL2djcnlwdHJuZC1nY3J5cHRybmQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnY3J5cHRybmQuYycgb2JqZWN0PSdnY3J5cHRybmQtZ2NyeXB0cm5kLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2NyeXB0cm5kX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdjcnlwdHJuZC1nY3J5cHRybmQub2JqIGBpZiB0ZXN0IC1mICdnY3J5cHRybmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnY3J5cHRybmQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2NyeXB0cm5kLmMnOyBmaWAKKworaG1hYzI1Ni1obWFjMjU2Lm86IGhtYWMyNTYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhtYWMyNTZfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGhtYWMyNTYtaG1hYzI1Ni5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9obWFjMjU2LWhtYWMyNTYuVHBvIC1jIC1vIGhtYWMyNTYtaG1hYzI1Ni5vIGB0ZXN0IC1mICdobWFjMjU2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhtYWMyNTYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvaG1hYzI1Ni1obWFjMjU2LlRwbyAkKERFUERJUikvaG1hYzI1Ni1obWFjMjU2LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naG1hYzI1Ni5jJyBvYmplY3Q9J2htYWMyNTYtaG1hYzI1Ni5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChobWFjMjU2X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGhtYWMyNTYtaG1hYzI1Ni5vIGB0ZXN0IC1mICdobWFjMjU2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhtYWMyNTYuYworCitobWFjMjU2LWhtYWMyNTYub2JqOiBobWFjMjU2LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChobWFjMjU2X0NGTEFHUykgJChDRkxBR1MpIC1NVCBobWFjMjU2LWhtYWMyNTYub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9obWFjMjU2LWhtYWMyNTYuVHBvIC1jIC1vIGhtYWMyNTYtaG1hYzI1Ni5vYmogYGlmIHRlc3QgLWYgJ2htYWMyNTYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdobWFjMjU2LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2htYWMyNTYuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvaG1hYzI1Ni1obWFjMjU2LlRwbyAkKERFUERJUikvaG1hYzI1Ni1obWFjMjU2LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naG1hYzI1Ni5jJyBvYmplY3Q9J2htYWMyNTYtaG1hYzI1Ni5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhtYWMyNTZfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gaG1hYzI1Ni1obWFjMjU2Lm9iaiBgaWYgdGVzdCAtZiAnaG1hYzI1Ni5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2htYWMyNTYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaG1hYzI1Ni5jJzsgZmlgCisKK21waWNhbGMtbXBpY2FsYy5vOiBtcGljYWxjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChtcGljYWxjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBtcGljYWxjLW1waWNhbGMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbXBpY2FsYy1tcGljYWxjLlRwbyAtYyAtbyBtcGljYWxjLW1waWNhbGMubyBgdGVzdCAtZiAnbXBpY2FsYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtcGljYWxjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL21waWNhbGMtbXBpY2FsYy5UcG8gJChERVBESVIpL21waWNhbGMtbXBpY2FsYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21waWNhbGMuYycgb2JqZWN0PSdtcGljYWxjLW1waWNhbGMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobXBpY2FsY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBtcGljYWxjLW1waWNhbGMubyBgdGVzdCAtZiAnbXBpY2FsYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtcGljYWxjLmMKKworbXBpY2FsYy1tcGljYWxjLm9iajogbXBpY2FsYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobXBpY2FsY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbXBpY2FsYy1tcGljYWxjLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbXBpY2FsYy1tcGljYWxjLlRwbyAtYyAtbyBtcGljYWxjLW1waWNhbGMub2JqIGBpZiB0ZXN0IC1mICdtcGljYWxjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbXBpY2FsYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tcGljYWxjLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL21waWNhbGMtbXBpY2FsYy5UcG8gJChERVBESVIpL21waWNhbGMtbXBpY2FsYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21waWNhbGMuYycgb2JqZWN0PSdtcGljYWxjLW1waWNhbGMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChtcGljYWxjX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG1waWNhbGMtbXBpY2FsYy5vYmogYGlmIHRlc3QgLWYgJ21waWNhbGMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtcGljYWxjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21waWNhbGMuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1tNGRhdGFEQVRBOiAkKG00ZGF0YV9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKG00ZGF0YV9EQVRBKSc7IHRlc3QgLW4gIiQobTRkYXRhZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChtNGRhdGFkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKG00ZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobTRkYXRhZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobTRkYXRhZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1tNGRhdGFEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobTRkYXRhX0RBVEEpJzsgdGVzdCAtbiAiJChtNGRhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtNGRhdGFkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1pbmNsdWRlSEVBREVSUzogJChpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1pbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykgJChTQ1JJUFRTKSAkKERBVEEpIFwKKwkJJChIRUFERVJTKQoraW5zdGFsbC1iaW5QUk9HUkFNUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKHNiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG00ZGF0YWRpcikiICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLXNiaW5QUk9HUkFNUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtaW5jbHVkZUhFQURFUlMgXAorCWluc3RhbGwtbTRkYXRhREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1iaW5QUk9HUkFNUyBpbnN0YWxsLWJpblNDUklQVFMgXAorCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1zYmluUFJPR1JBTVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWJpblNDUklQVFMgXAorCXVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbTRkYXRhREFUQSB1bmluc3RhbGwtc2JpblBST0dSQU1TCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLXNiaW5QUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1iaW5TQ1JJUFRTIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluY2x1ZGVIRUFERVJTIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tNGRhdGFEQVRBIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc2JpblBST0dSQU1TIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWJpblBST0dSQU1TIFwKKwl1bmluc3RhbGwtYmluU0NSSVBUUyB1bmluc3RhbGwtaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyB1bmluc3RhbGwtbG9jYWwgdW5pbnN0YWxsLW00ZGF0YURBVEEgXAorCXVuaW5zdGFsbC1zYmluUFJPR1JBTVMKKworCitASEFWRV9XMzJfU1lTVEVNX1RSVUVALnJjLmxvOgorQEhBVkVfVzMyX1NZU1RFTV9UUlVFQAkkKExUUkNDT01QSUxFKSAtaSAiJDwiIC1vICIkQCIKKworQEhBVkVfVzMyX1NZU1RFTV9UUlVFQGluc3RhbGwtZGVmLWZpbGU6CitASEFWRV9XMzJfU1lTVEVNX1RSVUVACS0kKElOU1RBTEwpIC1kICQoREVTVERJUikkKGxpYmRpcikKK0BIQVZFX1czMl9TWVNURU1fVFJVRUAJJChJTlNUQUxMKSAkKHNyY2RpcikvbGliZ2NyeXB0LmRlZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdjcnlwdC5kZWYKKworQEhBVkVfVzMyX1NZU1RFTV9UUlVFQHVuaW5zdGFsbC1kZWYtZmlsZToKK0BIQVZFX1czMl9TWVNURU1fVFJVRUAJLXJtICQoREVTVERJUikkKGxpYmRpcikvbGliZ2NyeXB0LmRlZgorQEhBVkVfVzMyX1NZU1RFTV9GQUxTRUBpbnN0YWxsLWRlZi1maWxlOgorQEhBVkVfVzMyX1NZU1RFTV9GQUxTRUB1bmluc3RhbGwtZGVmLWZpbGU6CisKK2luc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1kZWYtZmlsZQorCit1bmluc3RhbGwtbG9jYWw6IHVuaW5zdGFsbC1kZWYtZmlsZQorCisjIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGdldCB0aGUgYWN0dWFsIG5hbWUgKHBhcnNpbmcKKyMgbGliZ2NyeXB0LmxhPykgYW5kIGhvdyB0byBjcmVhdGUgdGhlIGhtYWMgZmlsZSBhbHJlYWR5IGF0IGxpbmsgdGltZQorIyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGhvdXQgaW5zdGFsbGluZyBsaWJnY3J5cHQgZmlyc3QuCisjaW5zdGFsbC1leGVjLWhvb2s6CisjCS4vaG1hYzI1NiAiV2hhdCBhbSBJLCBhIGRvY3RvciBvciBhIG1vb25zaHV0dGxlIGNvbmR1Y3Rvcj8iIFwKKyMgICAgICAgICAgPCAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdjcnlwdC5zby4xMS41LjAgXAorIyAgICAgICAgICA+ICQoREVTVERJUikkKGxpYmRpcikvLmxpYmdjcnlwdC5zby4xMS41LjAuaG1hYworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zcmMvTWFuaWZlc3QgYi9zcmMvTWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwMDNkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYW5pZmVzdApAQCAtMCwwICsxLDU4IEBACisjIE1hbmlmZXN0IC0gY2hlY2tzdW1zIG9mIHRoZSBzcmMgZGlyZWN0b3J5CisjIENvcHlyaWdodCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisjIENoZWNrc3VtcyBmb3IgYWxsIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gRm9ybWF0IGlzCisjIGZpbGVuYW1lLCBibGFua3MsIGJhc2UtNjQgcGFydCBvZiBhbiBPcGVuUEdQIGRldGFjaGVkIHNpZ25hdHVyZQorIyB3aXRob3V0IHRoZSBoZWFkZXIgbGluZXMuICBCbGFuayBsaW5lcyBhbmQgbGluZXMgYmVnaW5uaW5nIHdpdGggYQorIyBoYXNoIG1hcmsgYXJlIGlnbm9yZWQuICBBIHRvb2wgdG8gcHJvY2VzcyB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlIGJ5CisjIGN2cyAtZCA6cHNlcnZlcjphbm9uY3ZzQGN2cy5nbnVwZy5vcmc6L2N2cy93ayBjbyBtaXNjLXNjcmlwdHMvbWFuaWZlc3QtdG9vbAorIworIyBUaGUgc3BlY2lhbCBlbnRyeSAiJG5hbWVzJCIgaG9sZHMgYSBzaWduYXR1cmUgb3ZlciBhbGwgc29ydGVkCisjIGZpbGVuYW1lcyBleGNsdWRpbmcgaXRzZWxmLgorCitnY3J5cHQuaCBpUUNWQXdVQVFINVJzVEVBbnA4MzJTLzdBUUs3eGdQK0tjM05ZOWxpcFprYUFNcm5IRGtRVkxkSFl3VGJaV3VHT1lkVExwOFh5N0F1aDl3dFdWOWhyV1ZVcXMra3hEelQvMmlGNlhrTzNXVDNyZi9QbVEvUTBUSUdmT3lqRTNjL3F2Qi9qVmlwcGF4b0dkYTN0bkdwT0R5dGRJM1hQaGZQUzBTczhuRHpmQ1N0UEJHQUVxME9WVTdpbW5FeHJGemhSWHQrR2xqcjBvMD09WWFnegorZ2NyeXB0LW1vZHVsZS5oIGlRQ1ZBd1VBUUg1VVh6RUFucDgzMlMvN0FRSk1RZ1FBenVtejlhYVplbGh3K0Z4VENlVmFkcGhCeHQxYmJOUXZNcm5kZFlZYmx5SnYrQWN4WjlaeEd6Mm9QZXVzTjU4UWc1NERRY2FXM2xZaFRnbldmWHVsdHNpK1J1eGx6NzQwME9VcnpTWE9sM0F0N0tzc2RPREFvc2NGelpJZ2g5NEc5bHpReEVCcjlsVFhJOVIzTHNQRkpQNm11Tkc0ZnJjTkJBQTQyeWNrSzd3PT1CQnA1CisKK2F0aC5jIGlRQ1ZBd1VBUUg1RStERUFucDgzMlMvN0FRS0ZwZ1ArS1NaSHRWY25oOUZGZ2dJeUhLYkFMVWxqVzJGWGF1YXNadkZ5TjhTay9tSU1nS3h5WEZPRzFUSEJBVXpXTGFLV0lFV1UrV2tZVTd1VGhxQnRwbkVJbU01QWVuV3piUXVKamZ0UEMzZ1ZITzh5amptQldENHptSmoyOGh0b0tEb2EveERzb3F1bXJIeGFlM0ZZY2FDV3RZR1ZqTS9QYmwrT01STU9GQWhwMGhvPT1sUVozCithdGguaCBpUUNWQXdVQVFINUZPREVBbnA4MzJTLzdBUUtpdVFRQWc0SytLT0FuMUxXQlpOMzJNQWhtczRGZVpLb2NlMGZBdVpXN0JweVk0Y0N4SVZneHFydFVDOTBDRHlrdzhYZWdGZk95eVlyZ2QwTm1hTVZkWTdIWkRuY05PdklQeHBnRlFQQ1pyeWNzTU9vQXRvVndqSzcwNFJEZU5vM3ptZXl4VEtlREgrM00xSjdKbUxpYWZhRWRTYk9DOGZsWC9XMGljYVYwT2w0ZG1CYz09TGw2dworCitjaXBoZXIuaCBpUUNWQXdVQVFINUZVekVBbnA4MzJTLzdBUUpLTGdQOUdTU2s5ZjdFSU5JUnFTUUgxWEtYK2RZenQzcGhESGRxRlRVR0lmWU5oN1l6R2R5MGRydmdGaEc0azE1bnFEb3VLUnVGVk0vaEtZM1pWWTdKY2NtS1hLR0FINitaWVNob0c2TE1GZklHZ0RYOHpuZTBkTnhjNzJQTGZuczNmVnhObi9SbEhtSEJrclErcHBqUjlIblN0aEZtT3F6YlFhVzFCS21jM1oyeDVHVT09bEllVworZzEwbGliLmggaVFDVkF3VUFRSDVGZWpFQW5wODMyUy83QVFKNzV3UC9aak95YndSaXg1ZW9YZGZWZVhQam9QeWdlanpwWUpKZE1VR04zWTVVdGtmQnU5bVBSRXNLZnZaNnRIK0V2angrM3hmZUFiNGJVL2sybVJNcDB0aVduazJrb1RvUzA4dkk5dXhuaW9LUXI5b3VsWkg2cjI4UytOTFNnTVF1RUdOMUpOVWt5NlJROVRUTlJuZGVUaktLU3JFalo3VjZidityYjhBMWJZQ0tDaHM9PVA1bWsKK21waS5oIGlRQ1ZBd1VBUUg1Rnd6RUFucDgzMlMvN0FRSko0d1A5RTNqVmtjTzlNMFl0U0JISWJqRzNoRFdLV1h6aTg2QWxVaDUxcWlFOC8yWFAwRmZqQTRUb3N5dm1pY1pzN2o0OEhpdEFCeXI5dEhPU3huYmVvN05CZjE3SUN3QW82RXF0eSt3S0RnK2V5TGVFR1V5N1ZwVkszUkpSUUFBNEgra2wzUzJsM1lNVEtmM1dKbGJjN3FrV1NYWnNwZHk1YzlzQXhlb2RDS3JBdWJVPT1vQUxmCisKK2dsb2JhbC5jIGlRQ1ZBd1VBUUg1SEZ6RUFucDgzMlMvN0FRSmMrUVFBdmk1M1prTUN6TG5WVUxIdmhJNlcrRVg1Mzd6aTluOGNwbFlndXZJSnFVaEFaclA2OHlHQUl5cXlDT05iWlZEeUI3d3FlWGRVTUx6TWs3VzhmZyt4dWs1SlNEcHBwQVFmMm0vYmRReXplNlhWcUpzbzY4MmVZQk04K2I5ei9JVkV2TGFGd2haY09LTzFiY1h1ZEJsQkNjSmdWRHB1cGZUdEFXZ1BuZXdpbDlRPT1Yd3kxCittaXNjLmMgaVFDVkF3VUFRSDVJSWpFQW5wODMyUy83QVFLTkpBUUFrRXB5WTNmQ0c3dHZBREpGQVc5eEE3REVRd0xDYThZbWlVaEh2ckVzV09JNFlndlM3TFViV1djN1ZxSytyeU9SdlhMS1JBVmllem5ibkhBdXkwVEt0cWRubUEva1VtaXVyUzBhaDVTV3FSL2l1QWVKdHQwUkdzbVphWjZvYTJtNFBaMlkyR0NIU1RacWNjbHZ3c2V0UzllcTVBaXB4SHhZRlVsdHU1d0daTkk9PXR3TTIKK21pc3Npbmctc3RyaW5nLmMgaVFDVkF3VUFRSDVKZmpFQW5wODMyUy83QVFJM1pRUUFnNTVlRUpiR1FRSHlCRUpHeHZ0L0ZYcFFpWGNvRGl0M1pIenZkYVFuL05VZ2RMakNIaVdWemh5Q1hBQ0dpdkxXTU5Nb2REYVNhWmswNzNOWHhWa1dmUGNYOXZrRi8vV3Vnd3ppZGQ1UDNCZnU1azM1bytYeHo4MmZzazVLdUZHR3ExbUJVWjA3eFVZUThLa0traEFEVWtyMFFpUUF1eXBwMDc5WXEwdVVDN1E9PXp2S24KK21vZHVsZS5jIGlRQ1ZBd1VBUUg1SnZqRUFucDgzMlMvN0FRS2xNZ1FBalpZVFhNcFdiNWtIeENNWHpSaTA2OUt1LzQveG5Xc0QrUzBkamUxTGlLekNuUnB3VFR4QVJ6Yy95MTBZOE9jeWdrTXVSNHVuRWFXZWRPKzlzeWpqdHkzZkJDY3VlL2o3WWxMaXRxNUVDOVVFNG8yM3BvV3ZXQ3VYOVRhZG0yREs1cWY0cDdzbU1KMjJPMjJjTFRZVFZDeUFvWVRRMnhDOGFqekJzQlJrWDgwPT15UlJECitzZWNtZW0uYyBpUUNWQXdVQVFINUxMREVBbnA4MzJTLzdBUUt0RndRQXdZMndCcjZXSkMxY3dxcC8xRFFvS3pIeDlDM3BsT054YlpNYXp3UjdWTUk4M05VYkJBYnYxbWN4cGVaV1htYjJkUnJuc1IxVkJiTlBEU2JKTE41VDZjekxRMm5JYjZtbnE5dThJcDRTQWErR0NXZkRWNEFVdEFKNGhOL3l2V284aUVLdStLRDVpSjZ4SmgzMU5kWGp0NXlrNnZuazQ2U0E2UjRGa0hkSUVYYz09VUtWcgorc2VjbWVtLmggaVFDVkF3VUFRSDVMVERFQW5wODMyUy83QVFJc0p3UUFrWlV1NGh2bWg5TlhDTE5tOTgrdEdaRnpXWXZaTy9OZmZDMndkUEU4US9PVGEvbTNnK29CYkVoYVYxemUzb1k0dDFGL3A3WkhGeDVDc0lwNHpWanlQa3hsbmk4QUFWTVVPUXIvTG9weXhvdUhuMk9qS08rZFZxZWNXUWYwMStuUFdqa2xiTDJGWjNtUTk5azJxZVdabFZTa3owbm04dTM5RjN2N3ozT1RDc3M9PUFKcUUKK3NleHAuYyBpUUNWQXdVQVFINUxvakVBbnA4MzJTLzdBUUtDVFFRQXJscmoxS0d3UjJ4OTNmY3lOM00waVh1R2tCcTVSOUtOdSsxQnEwNEc0U0xscFoxUlJZME9qVjNMOVRvMUJIVGQwMWxYbE84TU56N05wUnhXbEcxU3c1Rm9oYkJsaFdaUVJjVzhHZEFhd0pQY2ZJWTJZOEVrNll4OHF1Wktiazl1RDNiY0JtU3RtZzBQK1RJQTBucjIwYm10ZkIzdVgyS1FWSFFxV1pRVDVxVT09UDhGRQorc3RkbWVtLmMgaVFDVkF3VUFRSDVMempFQW5wODMyUy83QVFMT1VBUDlGVTE2aXRYQkJya2ZSREdtaFVqQU9lRUVLZGQrYnJRM1hkVDh4b0x2UC9JSC82VTFLcTNhbXBQMi94Y0w0a3dWZHoycnc2TlJ6UDdqbEwveU0zdFc3MjJsU1MvSlBKa0grMitxVWtjYjBmWU5vcWwvV1lQTVlwMS9NenU2dHRYbmphZzFjUUdsS0l5WUFEK0c2aDNGdHBMd1F5MGhFSm9wbkY5K092ZDhVN0E9PUNraVoKK3N0ZG1lbS5oIGlRQ1ZBd1VBUUg1TDhqRUFucDgzMlMvN0FRSUgwd1ArTHlxaDB0aisrczJMNzlUbWYvZ3FnQ0srSExNeFRkZGNld0YzWGJzWWY5VDVGbUxlejFnejZHZ3RpNFNzOVZqb3pPQTN0aTN0ckNpQS9ZTlJtVjlBWXc0ekxVUG0rTXNqSnV2ZUwvQWdCOUhkb0QyditSZkptMFd3Z1NLaXlzcCs4aXlqZzNQbG9wbWhiYTRjR3VPUDVNSjNDV1RxWXdQbUpWc2NVS0M2ZzM4PT0wMk1OCisKK3R5cGVzLmggaVFDVkF3VUFRSDVNS1RFQW5wODMyUy83QVFMcVRBUDZBM21VTUQ1TU1rQmtlYnE0YlJZNkJxMEtzZ2RLZlo4VExoYzJvODdnRmF5OFlEMFVvbTNZSk5HMkxGL3JBSWN0MmloNGpZSmFJYjVkUmZKMEtKb1BpMkVUZDQ2Mko4T0ZDTDRmanE5VGFTakIycFhjQitrV294elBhc0dOZzJVa2swZFE2bHZGMXRTWXJ0dDMyUFZJN3EvVWFQc2pUeWxnUm16TGZYL1Z4clU9PU9NdTMKKworCisjIENvbmZpZ3VyYXRpb24KK01ha2VmaWxlLmFtIGlRQ1ZBd1VBUUg1V1ZqRUFucDgzMlMvN0FRTG1zUVAvYmJJOC9VV0FDNXlJVFZoR2NDT0NiTi9GYU1xWFZLanhFU3pvNkdUczAyanhLMXkzUnV1YW9OVTFzc1FaR0F4cEZpTUpXOHU5MzNWM3lUSEZNeFdwd0hlbURuRXl2L2E4WUFDeEpCUTB0UWdwZ0hTNzE2QmpNYkhPZmN1T2lzMldsQ09PbTBFcmpoQVlOYTROUTFxM2p3a092VERMRnBkbnFhV0kyd1duMDhVPT1ZanVuCitsaWJnY3J5cHQubTQgaVFDVkF3VUFRSDVNYlRFQW5wODMyUy83QVFKMXVBUUExQzZ4STdxWGlLVnRVZVhhd2hQeXRBbGRvc3J6Y1htcXozNHhpN0prbFFxdzgzZDY4V3RXSEZNQkVVYTdNS2ZpNFdDYnVRYjdGakdVdk1SdzV6L1Q5ZXo3Q29EZWtIYzYzK2NJSVpMUTIzd2VVSzhHYUExdVFMb0Qwc2NtVDQxSjVSa0JsSmJIN2NrMXpSZDNkMDRvNzVyV05FVU5pdDZLQnZyUTRQZDhvUTg9PXVNZ0IKK2xpYmdjcnlwdC1jb25maWcuaW4gaVFDVkF3VUFRSDVVYnpFQW5wODMyUy83QVFKSVNnUCtOYmQyQVFuRE0vazhzUUxidno4WVpqd1gzTGlnWk0rQWtGMVZBd3lBbTZZT1UzbnJYbno1dCtjWGtRRDJka3o0TDJGMEFBc0lrRmlKc3JnbVpnQ3AyaDFMNkxlRm5IK2hvSWQ5UmhiWXc0TmtEYUhiK01DOUpjYWxwY2ZGdnZ4cTZ2TS9XMzdiU0ZpbU03OFArNVJMS3lwWEN5dFZRTkFBYUlSZ1pqVmZYWTg9PUlHRFMKK2xpYmdjcnlwdC52ZXJzIGlRQ1ZBd1VBUUg1TWpURUFucDgzMlMvN0FRS0NkUVFBb3RHNlozemRjZVBJMFYzM1lZMnNoOTF1WWtMQk5oUXcrUHp5RTNCUlJBVmhNR0xPQkQxblNXSkhKdkUzZXlDVk9xRlkwWm12cFZleDUxRmEwRC9Ud3NKT080UlZ4ZjFMOWJiQW5jdTlPdUVYYUdYS3l0TFpwNTRUbGlEVEFXR0RxMGx2dHgxVHZERGd0TThUYmJhWHZNYmpmUTR3WEJ4ZEx2YWVuRkNUbFI0PT1rZ0hxCisKKyRuYW1lcyQgaVFDVkF3VUFRSDVVaERFQW5wODMyUy83QVFLL2p3UDlIN0EzbUk5OU0xTkd1aEQrMTZDKzJnSklJVEI4R0plWWVVZDN2bThrV1E1bjc2V3lNQ2RlQTYycW4wSlVkZElCakFiYWd0ZnZUTDVhZXNuRDlNbGhFR2FObEhhdVU3U0lOVElKOG5qS2Y4N0VBQWZEWnJoUy90R0R6aUMybmFrTVB3ZVJ4WFFDTERXSGtCUGpZZnJzcFNMTG9oamRlZ3FCdlROeVZNNzYrS0U9PTNwOVoKZGlmZiAtLWdpdCBhL3NyYy9hdGguYyBiL3NyYy9hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg1ZDNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2F0aC5jCkBAIC0wLDAgKzEsNDA2IEBACisvKiBhdGguYyAtIEEgVGhyZWFkLXNhZmVuZXNzIGxpYnJhcnkuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAxNCBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWYgVVNFX1BPU0lYX1RIUkVBRFMKKyMgaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhdGguaCIKKworI2lmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsKKyMgaWYgICFVU0VfUE9TSVhfVEhSRUFEUworIyAgZXJyb3IgVVNFX1BPU0lYX1RIUkVBRFNfV0VBSyBidXQgbm8gVVNFX1BPU0lYX1RIUkVBRFMKKyMgZW5kaWYKKyNlbmRpZgorCisMCisvKiBPbiBhbiBFTEYgc3lzdGVtIGl0IGlzIGVhc3kgdG8gdXNlIHB0aHJlYWRzIHVzaW5nIHdlYWsgcmVmZXJlbmNlcy4KKyAgIFRha2UgY2FyZSBub3QgdG8gdGVzdCB0aGUgYWRkcmVzcyBvZiBhIHdlYWsgcmVmZXJlbmNlZCBmdW5jdGlvbiB3ZQorICAgYWN0dWFsbHkgdXNlOyBzb21lIEdDQyB2ZXJzaW9ucyBoYXZlIGEgYnVnIHdlcmUgJmZvbyAhPSBOVUxMIGlzCisgICBhbHdheXMgZXZhbHVhdGVkIHRvIHRydWUgaW4gUElDIG1vZGUuICBVU0lOR19QVEhSRUFEX0FTX0RFRkFVTFQgaXMKKyAgIHVzZWQgYnkgYXRoX2luc3RhbGwgdG8gZGV0ZWN0IHRoZSBkZWZhdWx0IHVzYWdlIG9mIHB0aHJlYWQuICAqLworI2lmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsKKyMgcHJhZ21hIHdlYWsgcHRocmVhZF9jYW5jZWwKKyMgcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9pbml0CisjIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jaworIyBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jaworIyBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2Rlc3Ryb3kKKyNlbmRpZgorCisvKiBGb3IgdGhlIGR1bW15IGludGVyZmFjZS4gIFRoZSBNVVRFWF9OT1RJTklUIHZhbHVlIGlzIHVzZWQgdG8gY2hlY2sKKyAgIHRoYXQgYSBtdXRleCBoYXMgYmVlbiBpbml0aWFsaXplZC4gICovCisjZGVmaW5lIE1VVEVYX05PVElOSVQJKChhdGhfbXV0ZXhfdCkgMCkKKyNkZWZpbmUgTVVURVhfVU5MT0NLRUQJKChhdGhfbXV0ZXhfdCkgMSkKKyNkZWZpbmUgTVVURVhfTE9DS0VECSgoYXRoX211dGV4X3QpIDIpCisjZGVmaW5lIE1VVEVYX0RFU1RST1lFRAkoKGF0aF9tdXRleF90KSAzKQorCisKKy8qIFJldHVybiB0aGUgdGhyZWFkIHR5cGUgZnJvbSB0aGUgb3B0aW9uIGZpZWxkLiAqLworI2RlZmluZSBHRVRfT1BUSU9OKGEpICAgICgoYSkgJiAweGZmKQorCisKKwwKK2VudW0gYXRoX3RocmVhZF9tb2RlbCB7CisgIGF0aF9tb2RlbF91bmRlZmluZWQgPSAwLAorICBhdGhfbW9kZWxfbm9uZSwgICAgICAgICAgLyogTm8gdGhyZWFkIHN1cHBvcnQuICAqLworICBhdGhfbW9kZWxfcHRocmVhZHNfd2VhaywgLyogUE9TSVggdGhyZWFkcyB1c2luZyB3ZWFrIHN5bWJvbHMuICAqLworICBhdGhfbW9kZWxfcHRocmVhZHMsICAgICAgLyogUE9TSVggdGhyZWFkcyBkaXJlY3RseSBsaW5rZWQuICAqLworICBhdGhfbW9kZWxfdzMyICAgICAgICAgICAgLyogTWljcm9zb2Z0IFdpbmRvd3MgdGhyZWFkcy4gICovCit9OworCisKKy8qIFRoZSB0aHJlYWQgbW9kZWwgaW4gdXNlLiAgKi8KK3N0YXRpYyBlbnVtIGF0aF90aHJlYWRfbW9kZWwgdGhyZWFkX21vZGVsOworCisKKy8qIEluaXRpYWxpemUgdGhlIGF0aCBzdWJzeXN0ZW0uICBUaGlzIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZQorICAgTGliZ2NyeXB0IGluaXRpYWxpemF0aW9uLiAgSXQncyBwdXJwb3NlIGlzIHRvIGluaXRpYWxpemUgdGhlCisgICBsb2NraW5nIHN5c3RlbS4gIEl0IHJldHVybnMgMCBvbiBzdWNlc3Mgb3IgYW4gRVJSTk8gdmFsdWUgb24gZXJyb3IuCisgICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgaXMgbm90IGRlZmluZWQgd2hldGhlciBFUlJOTyB3YXMgY2hhbmdlZC4KKworICAgTm90ZTogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGJlY2F1c2UgaXQgaXMgbm90CisgICBhbHdheXMgcG9zc2libGUgdG8gZGV0ZWN0IHRoZSB0aHJlYWQgbW9kZWwgdG8gdXNlIHdoaWxlIGFscmVhZHkKKyAgIHJ1bm5pbmcgbXVsdGkgdGhyZWFkZWQuICAqLworaW50CithdGhfaW5pdCAodm9pZCkKK3sKKyAgaW50IGVyciA9IDA7CisKKyAgaWYgKHRocmVhZF9tb2RlbCkKKyAgICByZXR1cm4gMDsgLyogQWxyZWFkeSBpbml0aWFsaXplZCAtIG5vIGVycm9yLiAgKi8KKworICBpZiAoMCkKKyAgICA7CisjaWYgVVNFX1BPU0lYX1RIUkVBRFNfV0VBSworICBlbHNlIGlmIChwdGhyZWFkX2NhbmNlbCkKKyAgICB7CisgICAgICB0aHJlYWRfbW9kZWwgPSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhazsKKyAgICB9CisjZW5kaWYKKyAgZWxzZQorICAgIHsKKyNpZiBIQVZFX1czMl9TWVNURU0KKyAgICAgIHRocmVhZF9tb2RlbCA9IGF0aF9tb2RlbF93MzI7CisjZWxpZiBVU0VfUE9TSVhfVEhSRUFEUyAmJiAhVVNFX1BPU0lYX1RIUkVBRFNfV0VBSworICAgICAgdGhyZWFkX21vZGVsID0gYXRoX21vZGVsX3B0aHJlYWRzOworI2Vsc2UgLyohVVNFX1BPU0lYX1RIUkVBRFMqLworICAgICAgLyogQXNzdW1lIGEgc2luZ2xlIHRocmVhZGVkIGFwcGxpY2F0aW9uLiAgKi8KKyAgICAgIHRocmVhZF9tb2RlbCA9IGF0aF9tb2RlbF9ub25lOworI2VuZGlmIC8qIVVTRV9QT1NJWF9USFJFQURTKi8KKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworCisvKiBSZXR1cm4gdGhlIHVzZWQgdGhyZWFkIG1vZGVsIGFzIHN0cmluZyBmb3IgZGlzcGxheSBwdXJwb3NlcyBhbiBpZgorICAgUl9NT0RFTCBpcyBub3QgbnVsbCBzdG9yZSBpdHMgaW50ZXJuYWwgbnVtYmVyIGF0IFJfTU9ERUwuICAqLworY29uc3QgY2hhciAqCithdGhfZ2V0X21vZGVsIChpbnQgKnJfbW9kZWwpCit7CisgIGlmIChyX21vZGVsKQorICAgICpyX21vZGVsID0gdGhyZWFkX21vZGVsOworICBzd2l0Y2ggKHRocmVhZF9tb2RlbCkKKyAgICB7CisgICAgY2FzZSBhdGhfbW9kZWxfdW5kZWZpbmVkOiAgICAgcmV0dXJuICJ1bmRlZmluZWQiOworICAgIGNhc2UgYXRoX21vZGVsX25vbmU6ICAgICAgICAgIHJldHVybiAibm9uZSI7CisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhazogcmV0dXJuICJwdGhyZWFkKHdlYWspIjsKKyAgICBjYXNlIGF0aF9tb2RlbF9wdGhyZWFkczogICAgICByZXR1cm4gInB0aHJlYWQiOworICAgIGNhc2UgYXRoX21vZGVsX3czMjogICAgICAgICAgIHJldHVybiAidzMyIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIj8iOworICAgIH0KK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHdhcyB1c2VkIGluIG9sZCBMaWJnY3J5cHQgdmVyc2lvbnMgKHZpYQorICAgR0NSWUNUTF9TRVRfVEhSRUFEX0NCUykgdG8gcmVnaXN0ZXIgdGhlIHRocmVhZCBjYWxsYmFjayBmdW5jdGlvbnMuCisgICBJdCBpcyBub3QgYW55bW9yZSByZXF1aXJlZC4gIEhvd2V2ZXIgdG8gYWxsb3cgZXhpc3RpbmcgY29kZSB0bworICAgY29udGludWUgdG8gd29yaywgd2Uga2VlcCB0aGlzIGZ1bmN0aW9uIGFuZCBjaGVjayB0aGF0IG5vIHVzZXIKKyAgIGRlZmluZWQgY2FsbGJhY2tzIGFyZSB1c2VkIGFuZCB0aGF0IHRoZSByZXF1ZXN0ZWQgdGhyZWFkIHN5c3RlbQorICAgbWF0Y2hlcyB0aGUgb25lIExpYmdjcnlwdCBpcyB1c2luZy4gICovCitncGdfZXJyX2NvZGVfdAorYXRoX2luc3RhbGwgKHN0cnVjdCBhdGhfb3BzICphdGhfb3BzKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgdW5zaWduZWQgaW50IHRocmVhZF9vcHRpb247CisKKyAgLyogRmlzdCBjYWxsIGF0aF9pbml0IHNvIHRoYXQgd2Uga25vdyBvdXIgdGhyZWFkIG1vZGVsLiAgKi8KKyAgcmMgPSBhdGhfaW5pdCAoKTsKKyAgaWYgKHJjKQorICAgIHJldHVybiByYzsKKworICAvKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIHRocmVhZCBvcHRpb24gaXMgY29tcGF0aWJsZSB0byB0aGUKKyAgICAgdGhyZWFkIG9wdGlvbiB3ZSBhcmUgYWxyZWFkeSBjb21taXR0ZWQgdG8uICAqLworICB0aHJlYWRfb3B0aW9uID0gYXRoX29wcz8gR0VUX09QVElPTiAoYXRoX29wcy0+b3B0aW9uKSA6IDA7CisKKyAgLyogUmV0dXJuIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0ZWQgdGhyZWFkIG1vZGVsIGRvZXMgbm90IG1hdGNoIHRoZQorICAgICBjb25maWd1cmVkIG9uZS4gICovCisgIGlmICgwKQorICAgIDsKKyNpZiBVU0VfUE9TSVhfVEhSRUFEUworICBlbHNlIGlmICh0aHJlYWRfbW9kZWwgPT0gYXRoX21vZGVsX3B0aHJlYWRzCisgICAgICAgICAgIHx8IHRocmVhZF9tb2RlbCA9PSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhaykKKyAgICB7CisgICAgICBpZiAodGhyZWFkX29wdGlvbiA9PSBBVEhfVEhSRUFEX09QVElPTl9QVEhSRUFEKQorICAgICAgICByZXR1cm4gMDsgLyogT2theSAtIGNvbXBhdGlibGUuICAqLworICAgICAgaWYgKHRocmVhZF9vcHRpb24gPT0gQVRIX1RIUkVBRF9PUFRJT05fUFRIKQorICAgICAgICByZXR1cm4gMDsgLyogT2theSAtIGNvbXBhdGlibGUuICAqLworICAgIH0KKyNlbmRpZiAvKlVTRV9QT1NJWF9USFJFQURTKi8KKyAgZWxzZSBpZiAodGhyZWFkX29wdGlvbiA9PSBBVEhfVEhSRUFEX09QVElPTl9QVEgpCisgICAgeworICAgICAgaWYgKHRocmVhZF9tb2RlbCA9PSBhdGhfbW9kZWxfbm9uZSkKKyAgICAgICAgcmV0dXJuIDA7IC8qIE9rYXkgLSBjb21wYXRpYmxlLiAgKi8KKyAgICB9CisgIGVsc2UgaWYgKHRocmVhZF9vcHRpb24gPT0gQVRIX1RIUkVBRF9PUFRJT05fREVGQVVMVCkKKyAgICByZXR1cm4gMDsgLyogTm8gdGhyZWFkIHN1cHBvcnQgcmVxdWVzdGVkLiAgKi8KKyNpZiBIQVZFX1czMl9TWVNURU0KKyAgZWxzZQorICAgIHJldHVybiAwOyAvKiBJdCBpcyBhbHdheXMgZW5hYmxlZC4gICovCisjZW5kaWYgLypIQVZFX1czMl9TWVNURU0qLworCisgIHJldHVybiBHUEdfRVJSX05PVF9TVVBQT1JURUQ7Cit9CisKKworLyogSW5pdGlhbGl6ZSBhIG5ldyBtdXRleC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYW4KKyAgIHN5c3RlbSBlcnJvciBjb2RlIChpLmUuIGFuIEVSUk5PIHZhbHVlKS4gIEVSUk5PIG1heSBvciBtYXkgbm90IGJlCisgICBjaGFuZ2VkIG9uIGVycm9yLiAgKi8KK2ludAorYXRoX211dGV4X2luaXQgKGF0aF9tdXRleF90ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIHN3aXRjaCAodGhyZWFkX21vZGVsKQorICAgIHsKKyAgICBjYXNlIGF0aF9tb2RlbF9ub25lOgorICAgICAgKmxvY2sgPSBNVVRFWF9VTkxPQ0tFRDsKKyAgICAgIGVyciA9IDA7CisgICAgICBicmVhazsKKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHM6CisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhazoKKyAgICAgIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF90ICpwbGNrOworCisgICAgICAgIHBsY2sgPSBtYWxsb2MgKHNpemVvZiAqcGxjayk7CisgICAgICAgIGlmICghcGxjaykKKyAgICAgICAgICBlcnIgPSBlcnJubz8gZXJybm8gOiBFTk9NRU07CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnIgPSBwdGhyZWFkX211dGV4X2luaXQgKHBsY2ssIE5VTEwpOworICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgZnJlZSAocGxjayk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICpsb2NrID0gKHZvaWQqKXBsY2s7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYgLypVU0VfUE9TSVhfVEhSRUFEUyovCisKKyNpZiBIQVZFX1czMl9TWVNURU0KKyAgICBjYXNlIGF0aF9tb2RlbF93MzI6CisgICAgICB7CisgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04gKmNzZWM7CisKKyAgICAgICAgY3NlYyA9IG1hbGxvYyAoc2l6ZW9mICpjc2VjKTsKKyAgICAgICAgaWYgKCFjc2VjKQorICAgICAgICAgIGVyciA9IGVycm5vPyBlcnJubyA6IEVOT01FTTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24gKGNzZWMpOworICAgICAgICAgICAgKmxvY2sgPSAodm9pZCopY3NlYzsKKyAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYgLypIQVZFX1czMl9TWVNURU0qLworCisgICAgZGVmYXVsdDoKKyAgICAgIGVyciA9IEVJTlZBTDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisKKy8qIERlc3Ryb3kgYSBtdXRleC4gIFRoaXMgZnVuY3Rpb24gaXMgYSBOT1AgaWYgTE9DSyBpcyBOVUxMLiAgSWYgdGhlCisgICBtdXRleCBpcyBzdGlsbCBsb2NrZWQgaXQgY2FuJ3QgYmUgZGVzdHJveWVkIGFuZCB0aGUgZnVuY3Rpb24KKyAgIHJldHVybnMgRUJVU1kuICBFUlJOTyBtYXkgb3IgbWF5IG5vdCBiZSBjaGFuZ2VkIG9uIGVycm9yLiAgKi8KK2ludAorYXRoX211dGV4X2Rlc3Ryb3kgKGF0aF9tdXRleF90ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIGlmICghKmxvY2spCisgICAgcmV0dXJuIDA7CisKKyAgc3dpdGNoICh0aHJlYWRfbW9kZWwpCisgICAgeworICAgIGNhc2UgYXRoX21vZGVsX25vbmU6CisgICAgICBpZiAoKmxvY2sgIT0gTVVURVhfVU5MT0NLRUQpCisgICAgICAgIGVyciA9IEVCVVNZOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgKmxvY2sgPSBNVVRFWF9ERVNUUk9ZRUQ7CisgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyNpZiBVU0VfUE9TSVhfVEhSRUFEUworICAgIGNhc2UgYXRoX21vZGVsX3B0aHJlYWRzOgorICAgIGNhc2UgYXRoX21vZGVsX3B0aHJlYWRzX3dlYWs6CisgICAgICB7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqcGxjayA9IChwdGhyZWFkX211dGV4X3QqKSAoKmxvY2spOworCisgICAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocGxjayk7CisgICAgICAgIGlmICghZXJyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZyZWUgKHBsY2spOworICAgICAgICAgICAgbG9jayA9IE5VTEw7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYgLypVU0VfUE9TSVhfVEhSRUFEUyovCisKKyNpZiBIQVZFX1czMl9TWVNURU0KKyAgICBjYXNlIGF0aF9tb2RlbF93MzI6CisgICAgICB7CisgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04gKmNzZWMgPSAoQ1JJVElDQUxfU0VDVElPTiAqKSgqbG9jayk7CisKKyAgICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uIChjc2VjKTsKKyAgICAgICAgZnJlZSAoY3NlYyk7CisgICAgICAgIGVyciA9IDA7CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZiAvKkhBVkVfVzMyX1NZU1RFTSovCisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyID0gRUlOVkFMOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKworLyogTG9jayB0aGUgbXV0ZXggTE9DSy4gIE9uIHN1Y2Nlc3MgdGhlIGZ1bmN0aW9uIHJldHVybnMgMDsgb24gZXJyb3IKKyAgIGFuIGVycm9yIGNvZGUuICBFUlJOTyBtYXkgb3IgbWF5IG5vdCBiZSBjaGFuZ2VkIG9uIGVycm9yLiAgKi8KK2ludAorYXRoX211dGV4X2xvY2sgKGF0aF9tdXRleF90ICpsb2NrKQoreworICBpbnQgZXJyOworCisgIHN3aXRjaCAodGhyZWFkX21vZGVsKQorICAgIHsKKyAgICBjYXNlIGF0aF9tb2RlbF9ub25lOgorICAgICAgaWYgKCpsb2NrID09IE1VVEVYX05PVElOSVQpCisJZXJyID0gRUlOVkFMOworICAgICAgZWxzZSBpZiAoKmxvY2sgPT0gTVVURVhfVU5MT0NLRUQpCisgICAgICAgIHsKKyAgICAgICAgICAqbG9jayA9IE1VVEVYX0xPQ0tFRDsKKyAgICAgICAgICBlcnIgPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGVyciA9IEVERUFETEs7CisgICAgICBicmVhazsKKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHM6CisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhazoKKyAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jayAoKHB0aHJlYWRfbXV0ZXhfdCopKCpsb2NrKSk7CisgICAgICBicmVhazsKKyNlbmRpZiAvKlVTRV9QT1NJWF9USFJFQURTKi8KKworI2lmIEhBVkVfVzMyX1NZU1RFTQorICAgIGNhc2UgYXRoX21vZGVsX3czMjoKKyAgICAgIHsKKyAgICAgICAgQ1JJVElDQUxfU0VDVElPTiAqY3NlYyA9IChDUklUSUNBTF9TRUNUSU9OICopKCpsb2NrKTsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoY3NlYyk7CisgICAgICAgIGVyciA9IDA7CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZiAvKkhBVkVfVzMyX1NZU1RFTSovCisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyID0gRUlOVkFMOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKy8qIFVubG9jayB0aGUgbXV0ZXggTE9DSy4gIE9uIHN1Y2Nlc3MgdGhlIGZ1bmN0aW9uIHJldHVybnMgMDsgb24gZXJyb3IKKyAgIGFuIGVycm9yIGNvZGUuICBFUlJOTyBtYXkgb3IgbWF5IG5vdCBiZSBjaGFuZ2VkIG9uIGVycm9yLiAgKi8KK2ludAorYXRoX211dGV4X3VubG9jayAoYXRoX211dGV4X3QgKmxvY2spCit7CisgIGludCBlcnI7CisKKyAgc3dpdGNoICh0aHJlYWRfbW9kZWwpCisgICAgeworICAgIGNhc2UgYXRoX21vZGVsX25vbmU6CisgICAgICBpZiAoKmxvY2sgPT0gTVVURVhfTk9USU5JVCkKKwllcnIgPSBFSU5WQUw7CisgICAgICBlbHNlIGlmICgqbG9jayA9PSBNVVRFWF9MT0NLRUQpCisgICAgICAgIHsKKyAgICAgICAgICAqbG9jayA9IE1VVEVYX1VOTE9DS0VEOworICAgICAgICAgIGVyciA9IDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZXJyID0gRVBFUk07CisgICAgICBicmVhazsKKworI2lmIFVTRV9QT1NJWF9USFJFQURTCisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHM6CisgICAgY2FzZSBhdGhfbW9kZWxfcHRocmVhZHNfd2VhazoKKyAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgocHRocmVhZF9tdXRleF90KikoKmxvY2spKTsKKyAgICAgIGJyZWFrOworI2VuZGlmIC8qVVNFX1BPU0lYX1RIUkVBRFMqLworCisjaWYgSEFWRV9XMzJfU1lTVEVNCisgICAgY2FzZSBhdGhfbW9kZWxfdzMyOgorICAgICAgeworICAgICAgICBDUklUSUNBTF9TRUNUSU9OICpjc2VjID0gKENSSVRJQ0FMX1NFQ1RJT04gKikoKmxvY2spOworCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uIChjc2VjKTsKKyAgICAgICAgZXJyID0gMDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmIC8qSEFWRV9XMzJfU1lTVEVNKi8KKworICAgIGRlZmF1bHQ6CisgICAgICBlcnIgPSBFSU5WQUw7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NyYy9hdGguaCBiL3NyYy9hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTMyZTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2F0aC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIGF0aC5oIC0gVGhyZWFkLXNhZmVuZXNzIGxpYnJhcnkuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgQVRIX0gKKyNkZWZpbmUgQVRIX0gKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgX1dJTjMyCisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlIC8qICFfV0lOMzIgKi8KKyMgaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyMgIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGlmZGVmIEhBVkVfU1lTX01TR19ICisjICBpbmNsdWRlIDxzeXMvbXNnLmg+ICAvKiAoZS5nLiBmb3Igek9TKSAqLworIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYgLyogIV9XSU4zMiAqLworI2luY2x1ZGUgPGdwZy1lcnJvci5oPgorCisKKwwKKy8qIERlZmluZSBfQVRIX0VYVF9TWU1fUFJFRklYIGlmIHlvdSB3YW50IHRvIGdpdmUgYWxsIGV4dGVybmFsIHN5bWJvbHMKKyAgIGEgcHJlZml4LiAgKi8KKyNkZWZpbmUgX0FUSF9FWFRfU1lNX1BSRUZJWCBfZ2NyeV8KKworI2lmZGVmIF9BVEhfRVhUX1NZTV9QUkVGSVgKKyNkZWZpbmUgX0FUSF9QUkVGSVgxKHgseSkgeCAjIyB5CisjZGVmaW5lIF9BVEhfUFJFRklYMih4LHkpIF9BVEhfUFJFRklYMSh4LHkpCisjZGVmaW5lIF9BVEhfUFJFRklYKHgpIF9BVEhfUFJFRklYMihfQVRIX0VYVF9TWU1fUFJFRklYLHgpCisjZGVmaW5lIGF0aF9pbnN0YWxsIF9BVEhfUFJFRklYKGF0aF9pbnN0YWxsKQorI2RlZmluZSBhdGhfaW5pdCBfQVRIX1BSRUZJWChhdGhfaW5pdCkKKyNkZWZpbmUgYXRoX2dldF9tb2RlbCBfQVRIX1BSRUZJWChhdGhfZ2V0X21vZGVsKQorI2RlZmluZSBhdGhfbXV0ZXhfaW5pdCBfQVRIX1BSRUZJWChhdGhfbXV0ZXhfaW5pdCkKKyNkZWZpbmUgYXRoX211dGV4X2Rlc3Ryb3kgX0FUSF9QUkVGSVgoYXRoX211dGV4X2Rlc3Ryb3kpCisjZGVmaW5lIGF0aF9tdXRleF9sb2NrIF9BVEhfUFJFRklYKGF0aF9tdXRleF9sb2NrKQorI2RlZmluZSBhdGhfbXV0ZXhfdW5sb2NrIF9BVEhfUFJFRklYKGF0aF9tdXRleF91bmxvY2spCisjZW5kaWYKKworDAorZW51bSBhdGhfdGhyZWFkX29wdGlvbgorICB7CisgICAgQVRIX1RIUkVBRF9PUFRJT05fREVGQVVMVCA9IDAsCisgICAgQVRIX1RIUkVBRF9PUFRJT05fVVNFUiA9IDEsCisgICAgQVRIX1RIUkVBRF9PUFRJT05fUFRIID0gMiwKKyAgICBBVEhfVEhSRUFEX09QVElPTl9QVEhSRUFEID0gMworICB9OworCitzdHJ1Y3QgYXRoX29wcworeworICAvKiBUaGUgT1BUSU9OIGZpZWxkIGVuY29kZXMgdGhlIHRocmVhZCBtb2RlbCBhbmQgdGhlIHZlcnNpb24gbnVtYmVyCisgICAgIG9mIHRoaXMgc3RydWN0dXJlLgorICAgICAgIEJpdHMgIDcgLSAwICBhcmUgdXNlZCBmb3IgdGhlIHRocmVhZCBtb2RlbAorICAgICAgIEJpdHMgMTUgLSA4ICBhcmUgdXNlZCBmb3IgdGhlIHZlcnNpb24gbnVtYmVyLgorICAqLworICB1bnNpZ25lZCBpbnQgb3B0aW9uOworCit9OworCitncGdfZXJyX2NvZGVfdCBhdGhfaW5zdGFsbCAoc3RydWN0IGF0aF9vcHMgKmF0aF9vcHMpOworaW50IGF0aF9pbml0ICh2b2lkKTsKK2NvbnN0IGNoYXIgKmF0aF9nZXRfbW9kZWwgKGludCAqcl9tb2RlbCk7CisKKy8qIEZ1bmN0aW9ucyBmb3IgbXV0dWFsIGV4Y2x1c2lvbi4gICovCit0eXBlZGVmIHZvaWQgKmF0aF9tdXRleF90OworCitpbnQgYXRoX211dGV4X2luaXQgKGF0aF9tdXRleF90ICptdXRleCk7CitpbnQgYXRoX211dGV4X2Rlc3Ryb3kgKGF0aF9tdXRleF90ICptdXRleCk7CitpbnQgYXRoX211dGV4X2xvY2sgKGF0aF9tdXRleF90ICptdXRleCk7CitpbnQgYXRoX211dGV4X3VubG9jayAoYXRoX211dGV4X3QgKm11dGV4KTsKKworI2VuZGlmCS8qIEFUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVyLXByb3RvLmggYi9zcmMvY2lwaGVyLXByb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2Nzc5MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jaXBoZXItcHJvdG8uaApAQCAtMCwwICsxLDI2MSBAQAorLyogY2lwaGVyLXByb3RvLmggLSBJbnRlcm5hbCBkZWNsYXJhdGlvbnMKKyAqCUNvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogVGhpcyBmaWxlIGhhcyBiZWVuIGZhY3RvcmVkIG91dCBmcm9tIGNpcGhlci5oIHNvIHRoYXQgaXQgY2FuIGJlCisgICB1c2VkIHN0YW5kYWxvbmUgaW4gdmlzaWJpbGl0eS5jIC4gKi8KKworI2lmbmRlZiBHMTBfQ0lQSEVSX1BST1RPX0gKKyNkZWZpbmUgRzEwX0NJUEhFUl9QUk9UT19ICisKKworZW51bSBwa19lbmNvZGluZzsKKworCisvKiBEZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24gdXNlZCB0byByZXBvcnQgc2VsZnRlc3QgZmFpbHVyZXMuCisgICBET01BSU4gaXMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gYmxvY2s6CisgICAgICAgICAgImNpcGhlciIsICJkaWdlc3QiLCAicHVia2V5IG9yICJyYW5kb20iLAorICAgQUxHTyAgIGlzIHRoZSBhbGdvcml0aG0gdW5kZXIgdGVzdCwKKyAgIFdIQVQgICBpcyBhIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFzIGJlZW4gdGVzdGVkLAorICAgREVTQyAgIGlzIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAqLwordHlwZWRlZiB2b2lkICgqc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCkoY29uc3QgY2hhciAqZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp3aGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyZGVzYyk7CisKKy8qIERlZmluaXRpb24gb2YgdGhlIHNlbGZ0ZXN0IGZ1bmN0aW9ucy4gICovCit0eXBlZGVmIGdwZ19lcnJfY29kZV90ICgqc2VsZnRlc3RfZnVuY190KQorICAgICAoaW50IGFsZ28sIGludCBleHRlbmRlZCwgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpOworCisMCisvKgorICoKKyAqIFB1YmxpYyBrZXkgcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAqCisgKi8KKworLyogVHlwZSBmb3IgdGhlIHBrX2dlbmVyYXRlIGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9wa19nZW5lcmF0ZV90KSAoZ2NyeV9zZXhwX3QgZ2VucGFybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90ICpyX3NrZXkpOworCisvKiBUeXBlIGZvciB0aGUgcGtfY2hlY2tfc2VjcmV0X2tleSBmdW5jdGlvbi4gICovCit0eXBlZGVmIGdjcnlfZXJyX2NvZGVfdCAoKmdjcnlfcGtfY2hlY2tfc2VjcmV0X2tleV90KSAoZ2NyeV9zZXhwX3Qga2V5cGFybXMpOworCisvKiBUeXBlIGZvciB0aGUgcGtfZW5jcnlwdCBmdW5jdGlvbi4gICovCit0eXBlZGVmIGdjcnlfZXJyX2NvZGVfdCAoKmdjcnlfcGtfZW5jcnlwdF90KSAoZ2NyeV9zZXhwX3QgKnJfY2lwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBzX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qga2V5cGFybXMpOworCisvKiBUeXBlIGZvciB0aGUgcGtfZGVjcnlwdCBmdW5jdGlvbi4gICovCit0eXBlZGVmIGdjcnlfZXJyX2NvZGVfdCAoKmdjcnlfcGtfZGVjcnlwdF90KSAoZ2NyeV9zZXhwX3QgKnJfcGxhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qgc19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGtleXBhcm1zKTsKKworLyogVHlwZSBmb3IgdGhlIHBrX3NpZ24gZnVuY3Rpb24uICAqLwordHlwZWRlZiBnY3J5X2Vycl9jb2RlX3QgKCpnY3J5X3BrX3NpZ25fdCkgKGdjcnlfc2V4cF90ICpyX3NpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBzX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qga2V5cGFybXMpOworCisvKiBUeXBlIGZvciB0aGUgcGtfdmVyaWZ5IGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9wa192ZXJpZnlfdCkgKGdjcnlfc2V4cF90IHNfc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qgc19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qga2V5cGFybXMpOworCisvKiBUeXBlIGZvciB0aGUgcGtfZ2V0X25iaXRzIGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgKCpnY3J5X3BrX2dldF9uYml0c190KSAoZ2NyeV9zZXhwX3Qga2V5cGFybXMpOworCisKKy8qIFRoZSB0eXBlIHVzZWQgdG8gY29tcHV0ZSB0aGUga2V5Z3JpcC4gICovCit0eXBlZGVmIGdwZ19lcnJfY29kZV90ICgqcGtfY29tcF9rZXlncmlwX3QpIChnY3J5X21kX2hkX3QgbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBrZXlwYXJtKTsKKworLyogVGhlIHR5cGUgdXNlZCB0byBxdWVyeSBhbiBFQ0MgY3VydmUgbmFtZS4gICovCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqcGtfZ2V0X2N1cnZlX3QpKGdjcnlfc2V4cF90IGtleXBhcm1zLCBpbnQgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYml0cyk7CisKKy8qIFRoZSB0eXBlIHVzZWQgdG8gcXVlcnkgRUNDIGN1cnZlIHBhcmFtZXRlcnMgYnkgbmFtZS4gICovCit0eXBlZGVmIGdjcnlfc2V4cF90ICgqcGtfZ2V0X2N1cnZlX3BhcmFtX3QpKGNvbnN0IGNoYXIgKm5hbWUpOworCisKKy8qIE1vZHVsZSBzcGVjaWZpY2F0aW9uIHN0cnVjdHVyZSBmb3IgcHVibGljIGtleSBhbGdvcml0bXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9wa19zcGVjCit7CisgIGludCBhbGdvOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBkaXNhYmxlZDoxOworICAgIHVuc2lnbmVkIGludCBmaXBzOjE7CisgIH0gZmxhZ3M7CisgIGludCB1c2U7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKiphbGlhc2VzOworICBjb25zdCBjaGFyICplbGVtZW50c19wa2V5OworICBjb25zdCBjaGFyICplbGVtZW50c19za2V5OworICBjb25zdCBjaGFyICplbGVtZW50c19lbmM7CisgIGNvbnN0IGNoYXIgKmVsZW1lbnRzX3NpZzsKKyAgY29uc3QgY2hhciAqZWxlbWVudHNfZ3JpcDsKKyAgZ2NyeV9wa19nZW5lcmF0ZV90IGdlbmVyYXRlOworICBnY3J5X3BrX2NoZWNrX3NlY3JldF9rZXlfdCBjaGVja19zZWNyZXRfa2V5OworICBnY3J5X3BrX2VuY3J5cHRfdCBlbmNyeXB0OworICBnY3J5X3BrX2RlY3J5cHRfdCBkZWNyeXB0OworICBnY3J5X3BrX3NpZ25fdCBzaWduOworICBnY3J5X3BrX3ZlcmlmeV90IHZlcmlmeTsKKyAgZ2NyeV9wa19nZXRfbmJpdHNfdCBnZXRfbmJpdHM7CisgIHNlbGZ0ZXN0X2Z1bmNfdCBzZWxmdGVzdDsKKyAgcGtfY29tcF9rZXlncmlwX3QgY29tcF9rZXlncmlwOworICBwa19nZXRfY3VydmVfdCBnZXRfY3VydmU7CisgIHBrX2dldF9jdXJ2ZV9wYXJhbV90IGdldF9jdXJ2ZV9wYXJhbTsKK30gZ2NyeV9wa19zcGVjX3Q7CisKKworDAorLyoKKyAqCisgKiBTeW1tZXRyaWMgY2lwaGVyIHJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgKgorICovCisKKy8qIFR5cGUgZm9yIHRoZSBjaXBoZXJfc2V0a2V5IGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgZ2NyeV9lcnJfY29kZV90ICgqZ2NyeV9jaXBoZXJfc2V0a2V5X3QpICh2b2lkICpjLAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKwkJCQkJCSB1bnNpZ25lZCBrZXlsZW4pOworCisvKiBUeXBlIGZvciB0aGUgY2lwaGVyX2VuY3J5cHQgZnVuY3Rpb24uICAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpnY3J5X2NpcGhlcl9lbmNyeXB0X3QpICh2b2lkICpjLAorCQkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYpOworCisvKiBUeXBlIGZvciB0aGUgY2lwaGVyX2RlY3J5cHQgZnVuY3Rpb24uICAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpnY3J5X2NpcGhlcl9kZWNyeXB0X3QpICh2b2lkICpjLAorCQkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYpOworCisvKiBUeXBlIGZvciB0aGUgY2lwaGVyX3N0ZW5jcnlwdCBmdW5jdGlvbi4gICovCit0eXBlZGVmIHZvaWQgKCpnY3J5X2NpcGhlcl9zdGVuY3J5cHRfdCkgKHZvaWQgKmMsCisJCQkJCSB1bnNpZ25lZCBjaGFyICpvdXRidWYsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwKKwkJCQkJIHNpemVfdCBuKTsKKworLyogVHlwZSBmb3IgdGhlIGNpcGhlcl9zdGRlY3J5cHQgZnVuY3Rpb24uICAqLwordHlwZWRlZiB2b2lkICgqZ2NyeV9jaXBoZXJfc3RkZWNyeXB0X3QpICh2b2lkICpjLAorCQkJCQkgdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsCisJCQkJCSBzaXplX3Qgbik7CisKKy8qIFRoZSB0eXBlIHVzZWQgdG8gY29udmV5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYSBjaXBoZXIuICAqLwordHlwZWRlZiBncGdfZXJyX2NvZGVfdCAoKmNpcGhlcl9zZXRfZXh0cmFfaW5mb190KQorICAgICAodm9pZCAqYywgaW50IHdoYXQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CisKKy8qIFRoZSB0eXBlIHVzZWQgdG8gc2V0IGFuIElWIGRpcmVjdGx5IGluIHRoZSBhbGdvcml0aG0gbW9kdWxlLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmNpcGhlcl9zZXRpdl9mdW5jX3QpKHZvaWQgKmMsIGNvbnN0IGJ5dGUgKml2LCBzaXplX3QgaXZsZW4pOworCisvKiBBIHN0cnVjdHVyZSB0byBtYXAgT0lEcyB0byBlbmNyeXB0aW9uIG1vZGVzLiAgKi8KK3R5cGVkZWYgc3RydWN0IGdjcnlfY2lwaGVyX29pZF9zcGVjCit7CisgIGNvbnN0IGNoYXIgKm9pZDsKKyAgaW50IG1vZGU7Cit9IGdjcnlfY2lwaGVyX29pZF9zcGVjX3Q7CisKKworLyogTW9kdWxlIHNwZWNpZmljYXRpb24gc3RydWN0dXJlIGZvciBjaXBoZXJzLiAgKi8KK3R5cGVkZWYgc3RydWN0IGdjcnlfY2lwaGVyX3NwZWMKK3sKKyAgaW50IGFsZ287CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IGRpc2FibGVkOjE7CisgICAgdW5zaWduZWQgaW50IGZpcHM6MTsKKyAgfSBmbGFnczsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqKmFsaWFzZXM7CisgIGdjcnlfY2lwaGVyX29pZF9zcGVjX3QgKm9pZHM7CisgIHNpemVfdCBibG9ja3NpemU7CisgIHNpemVfdCBrZXlsZW47CisgIHNpemVfdCBjb250ZXh0c2l6ZTsKKyAgZ2NyeV9jaXBoZXJfc2V0a2V5X3Qgc2V0a2V5OworICBnY3J5X2NpcGhlcl9lbmNyeXB0X3QgZW5jcnlwdDsKKyAgZ2NyeV9jaXBoZXJfZGVjcnlwdF90IGRlY3J5cHQ7CisgIGdjcnlfY2lwaGVyX3N0ZW5jcnlwdF90IHN0ZW5jcnlwdDsKKyAgZ2NyeV9jaXBoZXJfc3RkZWNyeXB0X3Qgc3RkZWNyeXB0OworICBzZWxmdGVzdF9mdW5jX3Qgc2VsZnRlc3Q7CisgIGNpcGhlcl9zZXRfZXh0cmFfaW5mb190IHNldF9leHRyYV9pbmZvOworICBjaXBoZXJfc2V0aXZfZnVuY190IHNldGl2OworfSBnY3J5X2NpcGhlcl9zcGVjX3Q7CisKKworDAorLyoKKyAqCisgKiBNZXNzYWdlIGRpZ2VzdCByZWxhdGVkIGRlZmluaXRpb25zLgorICoKKyAqLworCisvKiBUeXBlIGZvciB0aGUgbWRfaW5pdCBmdW5jdGlvbi4gICovCit0eXBlZGVmIHZvaWQgKCpnY3J5X21kX2luaXRfdCkgKHZvaWQgKmMsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qIFR5cGUgZm9yIHRoZSBtZF93cml0ZSBmdW5jdGlvbi4gICovCit0eXBlZGVmIHZvaWQgKCpnY3J5X21kX3dyaXRlX3QpICh2b2lkICpjLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZXMpOworCisvKiBUeXBlIGZvciB0aGUgbWRfZmluYWwgZnVuY3Rpb24uICAqLwordHlwZWRlZiB2b2lkICgqZ2NyeV9tZF9maW5hbF90KSAodm9pZCAqYyk7CisKKy8qIFR5cGUgZm9yIHRoZSBtZF9yZWFkIGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAqKCpnY3J5X21kX3JlYWRfdCkgKHZvaWQgKmMpOworCit0eXBlZGVmIHN0cnVjdCBnY3J5X21kX29pZF9zcGVjCit7CisgIGNvbnN0IGNoYXIgKm9pZHN0cmluZzsKK30gZ2NyeV9tZF9vaWRfc3BlY190OworCisvKiBNb2R1bGUgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2UgZGlnZXN0cy4gICovCit0eXBlZGVmIHN0cnVjdCBnY3J5X21kX3NwZWMKK3sKKyAgaW50IGFsZ287CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IGRpc2FibGVkOjE7CisgICAgdW5zaWduZWQgaW50IGZpcHM6MTsKKyAgfSBmbGFnczsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgY2hhciAqYXNub2lkOworICBpbnQgYXNubGVuOworICBnY3J5X21kX29pZF9zcGVjX3QgKm9pZHM7CisgIGludCBtZGxlbjsKKyAgZ2NyeV9tZF9pbml0X3QgaW5pdDsKKyAgZ2NyeV9tZF93cml0ZV90IHdyaXRlOworICBnY3J5X21kX2ZpbmFsX3QgZmluYWw7CisgIGdjcnlfbWRfcmVhZF90IHJlYWQ7CisgIHNpemVfdCBjb250ZXh0c2l6ZTsgLyogYWxsb2NhdGUgdGhpcyBhbW91bnQgb2YgY29udGV4dCAqLworICBzZWxmdGVzdF9mdW5jX3Qgc2VsZnRlc3Q7Cit9IGdjcnlfbWRfc3BlY190OworCisKKwwKKy8qIFRoZSBzZWxmdGVzdCBmdW5jdGlvbnMuICAqLworZ2NyeV9lcnJvcl90IF9nY3J5X2NpcGhlcl9zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KTsKK2djcnlfZXJyb3JfdCBfZ2NyeV9tZF9zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZnRlc3RfcmVwb3J0X2Z1bmNfdCByZXBvcnQpOworZ2NyeV9lcnJvcl90IF9nY3J5X3BrX3NlbGZ0ZXN0IChpbnQgYWxnbywgaW50IGV4dGVuZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCk7CitnY3J5X2Vycm9yX3QgX2djcnlfaG1hY19zZWxmdGVzdCAoaW50IGFsZ28sIGludCBleHRlbmRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmdGVzdF9yZXBvcnRfZnVuY190IHJlcG9ydCk7CisKK2djcnlfZXJyb3JfdCBfZ2NyeV9yYW5kb21fc2VsZnRlc3QgKHNlbGZ0ZXN0X3JlcG9ydF9mdW5jX3QgcmVwb3J0KTsKKworCisKKworI2VuZGlmIC8qRzEwX0NJUEhFUl9QUk9UT19IKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXIuaCBiL3NyYy9jaXBoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJmZTBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NpcGhlci5oCkBAIC0wLDAgKzEsMjY5IEBACisvKiBjaXBoZXIuaAorICoJQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyLCAyMDAzLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworI2lmbmRlZiBHMTBfQ0lQSEVSX0gKKyNkZWZpbmUgRzEwX0NJUEhFUl9ICisKKyNpbmNsdWRlICJnY3J5cHQtaW50LmgiCisKKyNkZWZpbmUgREJHX0NJUEhFUiBfZ2NyeV9nZXRfZGVidWdfZmxhZyggMSApCisKKyNpbmNsdWRlICIuLi9yYW5kb20vcmFuZG9tLmgiCisKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfTk9fQkxJTkRJTkcgICAgKDEgPDwgMCkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfUkZDNjk3OSAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfRklYRURMRU4gICAgICAgKDEgPDwgMikKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfTEVHQUNZUkVTVUxUICAgKDEgPDwgMykKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfUkFXX0ZMQUcgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfVFJBTlNJRU5UX0tFWSAgKDEgPDwgNSkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfVVNFX1g5MzEgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODYgICAgKDEgPDwgNykKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfVVNFX0ZJUFMxODZfMiAgKDEgPDwgOCkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfUEFSQU0gICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfQ09NUCAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIFBVQktFWV9GTEFHX05PQ09NUCAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBQVUJLRVlfRkxBR19FRERTQSAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgUFVCS0VZX0ZMQUdfR09TVCAgICAgICAgICAgKDEgPDwgMTMpCisKKworZW51bSBwa19vcGVyYXRpb24KKyAgeworICAgIFBVQktFWV9PUF9FTkNSWVBULAorICAgIFBVQktFWV9PUF9ERUNSWVBULAorICAgIFBVQktFWV9PUF9TSUdOLAorICAgIFBVQktFWV9PUF9WRVJJRlkKKyAgfTsKKworZW51bSBwa19lbmNvZGluZworICB7CisgICAgUFVCS0VZX0VOQ19SQVcsCisgICAgUFVCS0VZX0VOQ19QS0NTMSwKKyAgICBQVUJLRVlfRU5DX09BRVAsCisgICAgUFVCS0VZX0VOQ19QU1MsCisgICAgUFVCS0VZX0VOQ19VTktOT1dOCisgIH07CisKK3N0cnVjdCBwa19lbmNvZGluZ19jdHgKK3sKKyAgZW51bSBwa19vcGVyYXRpb24gb3A7CisgIHVuc2lnbmVkIGludCBuYml0czsKKworICBlbnVtIHBrX2VuY29kaW5nIGVuY29kaW5nOworICBpbnQgZmxhZ3M7CisKKyAgaW50IGhhc2hfYWxnbzsKKworICAvKiBmb3IgT0FFUCAqLworICB1bnNpZ25lZCBjaGFyICpsYWJlbDsKKyAgc2l6ZV90IGxhYmVsbGVuOworCisgIC8qIGZvciBQU1MgKi8KKyAgc2l6ZV90IHNhbHRsZW47CisKKyAgaW50ICgqIHZlcmlmeV9jbXApICh2b2lkICpvcGFxdWUsIGdjcnlfbXBpX3QgdG1wKTsKKyAgdm9pZCAqdmVyaWZ5X2FyZzsKK307CisKKyNkZWZpbmUgQ0lQSEVSX0lORk9fTk9fV0VBS19LRVkgICAgMQorCisjaW5jbHVkZSAiY2lwaGVyLXByb3RvLmgiCisKKy8qIFRoZSBpbnRlcm5hbCBlbmNyeXB0aW9uIG1vZGVzLiAqLworZW51bSBnY3J5X2NpcGhlcl9pbnRlcm5hbF9tb2RlcworICB7CisgICAgR0NSWV9DSVBIRVJfTU9ERV9JTlRFUk5BTCA9IDB4MTAwMDAsCisgICAgR0NSWV9DSVBIRVJfTU9ERV9DTUFDICAgICA9IDB4MTAwMDAgKyAxICAgLyogQ2lwaGVyLWJhc2VkIE1BQy4gKi8KKyAgfTsKKworCisvKi0tIGNpcGhlci5jIC0tKi8KK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfb3Blbl9pbnRlcm5hbCAoZ2NyeV9jaXBoZXJfaGRfdCAqaGFuZGxlLAorCQkJCQkgICAgaW50IGFsZ28sIGludCBtb2RlLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKworLyotLSBjaXBoZXItY21hYy5jIC0tKi8KK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfY21hY19hdXRoZW50aWNhdGUKKy8qICAgICAgICAgICAqLyAoZ2NyeV9jaXBoZXJfaGRfdCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBzaXplX3QgYWJ1Zmxlbik7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NtYWNfZ2V0X3RhZworLyogICAgICAgICAgICovIChnY3J5X2NpcGhlcl9oZF90IGMsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHRhZywgc2l6ZV90IHRhZ2xlbik7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2NtYWNfY2hlY2tfdGFnCisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYywKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW50YWcsIHNpemVfdCB0YWdsZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9jbWFjX3NldF9zdWJrZXlzCisvKiAgICAgICAgICAgKi8gKGdjcnlfY2lwaGVyX2hkX3QgYyk7CisKKy8qLS0gcm1kMTYwLmMgLS0qLwordm9pZCBfZ2NyeV9ybWQxNjBfaGFzaF9idWZmZXIgKHZvaWQgKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworLyotLSBzaGExLmMgLS0qLwordm9pZCBfZ2NyeV9zaGExX2hhc2hfYnVmZmVyICh2b2lkICpvdXRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIF9nY3J5X3NoYTFfaGFzaF9idWZmZXJzICh2b2lkICpvdXRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X2J1ZmZlcl90ICppb3YsIGludCBpb3ZjbnQpOworCisvKi0tIHJpam5kYWVsLmMgLS0qLwordm9pZCBfZ2NyeV9hZXNfY2ZiX2VuYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWYsIGNvbnN0IHZvaWQgKmluYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpOwordm9pZCBfZ2NyeV9hZXNfY2ZiX2RlYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2Nrcyk7Cit2b2lkIF9nY3J5X2Flc19jYmNfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzLCBpbnQgY2JjX21hYyk7Cit2b2lkIF9nY3J5X2Flc19jYmNfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKK3ZvaWQgX2djcnlfYWVzX2N0cl9lbmMgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKKworLyotLSBibG93ZmlzaC5jIC0tKi8KK3ZvaWQgX2djcnlfYmxvd2Zpc2hfY2ZiX2RlYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisJCQkgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKwkJCSAgICAgc2l6ZV90IG5ibG9ja3MpOworCit2b2lkIF9nY3J5X2Jsb3dmaXNoX2NiY19kZWMgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorCQkJICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisJCQkgICAgIHNpemVfdCBuYmxvY2tzKTsKKwordm9pZCBfZ2NyeV9ibG93ZmlzaF9jdHJfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpjdHIsCisJCQkgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKwkJCSAgICAgc2l6ZV90IG5ibG9ja3MpOworCisvKi0tIGNhc3Q1LmMgLS0qLwordm9pZCBfZ2NyeV9jYXN0NV9jZmJfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKwkJCSAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorCQkJICBzaXplX3QgbmJsb2Nrcyk7CisKK3ZvaWQgX2djcnlfY2FzdDVfY2JjX2RlYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisJCQkgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKwkJCSAgc2l6ZV90IG5ibG9ja3MpOworCit2b2lkIF9nY3J5X2Nhc3Q1X2N0cl9lbmMgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmN0ciwKKwkJCSAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorCQkJICBzaXplX3QgbmJsb2Nrcyk7CisKKy8qLS0gY2FtZWxsaWEtZ2x1ZS5jIC0tKi8KK3ZvaWQgX2djcnlfY2FtZWxsaWFfY3RyX2VuYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKK3ZvaWQgX2djcnlfY2FtZWxsaWFfY2JjX2RlYyAodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpOwordm9pZCBfZ2NyeV9jYW1lbGxpYV9jZmJfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2Nrcyk7CisKKy8qLS0gc2VycGVudC5jIC0tKi8KK3ZvaWQgX2djcnlfc2VycGVudF9jdHJfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpjdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKK3ZvaWQgX2djcnlfc2VycGVudF9jYmNfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpOwordm9pZCBfZ2NyeV9zZXJwZW50X2NmYl9kZWMgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2Nrcyk7CisKKy8qLS0gdHdvZmlzaC5jIC0tKi8KK3ZvaWQgX2djcnlfdHdvZmlzaF9jdHJfZW5jICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpjdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmX2FyZywgY29uc3Qgdm9pZCAqaW5idWZfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYmxvY2tzKTsKK3ZvaWQgX2djcnlfdHdvZmlzaF9jYmNfZGVjICh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWZfYXJnLCBjb25zdCB2b2lkICppbmJ1Zl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ibG9ja3MpOwordm9pZCBfZ2NyeV90d29maXNoX2NmYl9kZWMgKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1Zl9hcmcsIGNvbnN0IHZvaWQgKmluYnVmX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJsb2Nrcyk7CisKKy8qLS0gZHNhLmMgLS0qLwordm9pZCBfZ2NyeV9yZWdpc3Rlcl9wa19kc2FfcHJvZ3Jlc3MgKGdjcnlfaGFuZGxlcl9wcm9ncmVzc190IGNiYywgdm9pZCAqY2JfZGF0YSk7CisKKy8qLS0gZWxnYW1hbC5jIC0tKi8KK3ZvaWQgX2djcnlfcmVnaXN0ZXJfcGtfZWxnX3Byb2dyZXNzIChnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYl9kYXRhKTsKKworCisvKi0tIGVjYy5jIC0tKi8KK3ZvaWQgX2djcnlfcmVnaXN0ZXJfcGtfZWNjX3Byb2dyZXNzIChnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdCBjYmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfZGF0YSk7CisKKworLyotLSBwcmltZWdlbi5jIC0tKi8KK3ZvaWQgX2djcnlfcmVnaXN0ZXJfcHJpbWVnZW5fcHJvZ3Jlc3MgKGdjcnlfaGFuZGxlcl9wcm9ncmVzc190IGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfZGF0YSk7CisKKy8qLS0gcHVia2V5LmMgLS0qLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIHRoZSBjaXBoZXIgc3BlY2lmaWNhdGlvbnMuICAqLworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19ibG93ZmlzaDsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfZGVzOworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY190cmlwbGVkZXM7CitleHRlcm4gZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2FyY2ZvdXI7CitleHRlcm4gZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2Nhc3Q1OworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19hZXM7CitleHRlcm4gZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2FlczE5MjsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfYWVzMjU2OworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY190d29maXNoOworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY190d29maXNoMTI4OworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MTI4OworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MTkyOworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19zZXJwZW50MjU2OworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19yZmMyMjY4XzQwOworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19yZmMyMjY4XzEyODsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfc2VlZDsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfY2FtZWxsaWExMjg7CitleHRlcm4gZ2NyeV9jaXBoZXJfc3BlY190IF9nY3J5X2NpcGhlcl9zcGVjX2NhbWVsbGlhMTkyOworZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2NyeV9jaXBoZXJfc3BlY19jYW1lbGxpYTI1NjsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfaWRlYTsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfc2Fsc2EyMDsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfc2Fsc2EyMHIxMjsKK2V4dGVybiBnY3J5X2NpcGhlcl9zcGVjX3QgX2djcnlfY2lwaGVyX3NwZWNfZ29zdDI4MTQ3OworCisvKiBEZWNsYXJhdGlvbnMgZm9yIHRoZSBkaWdlc3Qgc3BlY2lmaWNhdGlvbnMuICAqLworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyOworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyX3JmYzE1MTA7CitleHRlcm4gZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfY3JjMjRfcmZjMjQ0MDsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19nb3N0MzQxMV85NDsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zdHJpYm9nXzI1NjsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zdHJpYm9nXzUxMjsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19tZDQ7CitleHRlcm4gZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfbWQ1OworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3JtZDE2MDsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGExOworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTIyNDsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEyNTY7CitleHRlcm4gZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfc2hhNTEyOworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTM4NDsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY190aWdlcjsKK2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY190aWdlcjE7CitleHRlcm4gZ2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfdGlnZXIyOworZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3doaXJscG9vbDsKKworLyogRGVjbGFyYXRpb25zIGZvciB0aGUgcHVia2V5IGNpcGhlciBzcGVjaWZpY2F0aW9ucy4gICovCitleHRlcm4gZ2NyeV9wa19zcGVjX3QgX2djcnlfcHVia2V5X3NwZWNfcnNhOworZXh0ZXJuIGdjcnlfcGtfc3BlY190IF9nY3J5X3B1YmtleV9zcGVjX2VsZzsKK2V4dGVybiBnY3J5X3BrX3NwZWNfdCBfZ2NyeV9wdWJrZXlfc3BlY19lbGdfZTsKK2V4dGVybiBnY3J5X3BrX3NwZWNfdCBfZ2NyeV9wdWJrZXlfc3BlY19kc2E7CitleHRlcm4gZ2NyeV9wa19zcGVjX3QgX2djcnlfcHVia2V5X3NwZWNfZWNjOworCisKKyNlbmRpZiAvKkcxMF9DSVBIRVJfSCovCmRpZmYgLS1naXQgYS9zcmMvY29udGV4dC5jIGIvc3JjL2NvbnRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGU1YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRleHQuYwpAQCAtMCwwICsxLDEzNyBAQAorLyogY29udGV4dC5jIC0gQ29udGV4dCBtYW5hZ2VtZW50CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisKKyNkZWZpbmUgQ1RYX01BR0lDICJjVHgiCisjZGVmaW5lIENUWF9NQUdJQ19MRU4gMworCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBnZW5lcmljIGNvbnRleHQgb2JqZWN0LiAgVGhlIHB1YmxpYyB0eXBlZGVmCisgICBnY3J5X2N0eF90IGlzIHVzZWQgdG8gYWNjZXNzIGl0LiAgKi8KK3N0cnVjdCBnY3J5X2NvbnRleHQKK3sKKyAgY2hhciBtYWdpY1tDVFhfTUFHSUNfTEVOXTsgLyogTWFnaWMgdmFsdWUgdG8gY3Jvc3MgY2hlY2sgdGhhdCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlYWxseSBhIGNvbnRleHQgb2JqZWN0LiAqLworICBjaGFyIHR5cGU7ICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgY29udGV4dCAoQ09OVEVYVF9UWVBFX2ZvbykuICAqLworCisgIHZvaWQgKCpkZWluaXQpKHZvaWQqKTsgLyogRnVuY3Rpb24gdXNlZCB0byBmcmVlIHRoZSBwcml2YXRlIHBhcnQuICovCisgIFBST1BFUkxZX0FMSUdORURfVFlQRSB1OworfTsKKworCisvKiBBbGxvY2F0ZSBhIGZyZXNoIGdlbmVyaWMgY29udGV4dCBvZiBjb250ZWN0IFRZUEUgYW5kIGFsbG9jYXRlCisgICBMRU5HVEggZXh0cmEgYnl0ZXMgZm9yIHByaXZhdGUgdXNlIG9mIHRoZSB0eXBlIGhhbmRsZXIuIERFSU5JVCBpcyBhCisgICBmdWNudGlvbiB1c2VkIGNhbGxlZCB0byBkZWluaXRpYWxpemUgdGhlIHByaXZhdGUgcGFydDsgaXQgbWF5IGJlCisgICBOVUxMIGlmIGRlLWluaXRpYWxpemF0aW9uIGlzIG5vdCByZXF1aXJlZC4gIFJldHVybnMgTlVMTCBhbmQgc2V0cworICAgRVJSTk8gaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiAgKi8KK2djcnlfY3R4X3QKK19nY3J5X2N0eF9hbGxvYyAoaW50IHR5cGUsIHNpemVfdCBsZW5ndGgsIHZvaWQgKCpkZWluaXQpKHZvaWQqKSkKK3sKKyAgZ2NyeV9jdHhfdCBjdHg7CisKKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICBjYXNlIENPTlRFWFRfVFlQRV9FQzoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBsb2dfYnVnICgiYmFkIGNvbnRleHQgdHlwZSAlZCBnaXZlbiB0byBfZ2NyeV9jdHhfYWxsb2NcbiIsIHR5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorCisgIGlmIChsZW5ndGggPCBzaXplb2YgKFBST1BFUkxZX0FMSUdORURfVFlQRSkpCisgICAgbGVuZ3RoID0gc2l6ZW9mIChQUk9QRVJMWV9BTElHTkVEX1RZUEUpOworCisgIGN0eCA9IHh0cnljYWxsb2MgKDEsIHNpemVvZiAqY3R4IC0gc2l6ZW9mIChQUk9QRVJMWV9BTElHTkVEX1RZUEUpICsgbGVuZ3RoKTsKKyAgaWYgKCFjdHgpCisgICAgcmV0dXJuIE5VTEw7CisgIG1lbWNweSAoY3R4LT5tYWdpYywgQ1RYX01BR0lDLCBDVFhfTUFHSUNfTEVOKTsKKyAgY3R4LT50eXBlID0gdHlwZTsKKyAgY3R4LT5kZWluaXQgPSBkZWluaXQ7CisKKyAgcmV0dXJuIGN0eDsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIGNvbnRleHQgQ1RYLiAgVFlQRSBpcworICAgdGhlIHJlcXVlc3RlZCBjb250ZXh0IHR5cGUuICBVc2luZyBhbiBleHBsaWNpdCB0eXBlIGFsbG93cyB0byBjcm9zcworICAgY2hlY2sgdGhlIHR5cGUgYW5kIGV2ZW50dWFsbHkgYWxsb3dzIHRvIHN0b3JlIHNldmVyYWwgcHJpdmF0ZQorICAgY29udGV4dHMgaW4gb25lIGNvbnRleHQgb2JqZWN0LiAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhbgorICAgZXJyb3IgYnV0IGFib3J0cyBpZiB0aGUgcHJvdmlkZWQgQ1RYIGlzIG5vdCB2YWxpZC4gICovCit2b2lkICoKK19nY3J5X2N0eF9nZXRfcG9pbnRlciAoZ2NyeV9jdHhfdCBjdHgsIGludCB0eXBlKQoreworICBpZiAoIWN0eCB8fCBtZW1jbXAgKGN0eC0+bWFnaWMsIENUWF9NQUdJQywgQ1RYX01BR0lDX0xFTikpCisgICAgbG9nX2ZhdGFsICgiYmFkIHBvaW50ZXIgJXAgcGFzc2VkIHRvIF9nY3J5X2N0eF9nZXRfcG9pbnRlclxuIiwgY3R4KTsKKyAgaWYgKGN0eC0+dHlwZSAhPSB0eXBlKQorICAgIGxvZ19mYXRhbCAoIndyb25nIGNvbnRleHQgdHlwZSAlZCByZXF1ZXN0IGZvciBjb250ZXh0ICVwIG9mIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICB0eXBlLCBjdHgsIGN0eC0+dHlwZSk7CisgIHJldHVybiAmY3R4LT51OworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIGNvbnRleHQgQ1RYLiAgVFlQRSBpcworICAgdGhlIHJlcXVlc3RlZCBjb250ZXh0IHR5cGUuICBVc2luZyBhbiBleHBsaWNpdCB0eXBlIGFsbG93cyB0byBjcm9zcworICAgY2hlY2sgdGhlIHR5cGUgYW5kIGV2ZW50dWFsbHkgYWxsb3dzIHRvIHN0b3JlIHNldmVyYWwgcHJpdmF0ZQorICAgY29udGV4dHMgaW4gb25lIGNvbnRleHQgb2JqZWN0LiAgSW4gY29udHJhc3QgdG8KKyAgIF9nY3J5X2N0eF9nZXRfcG9pbnRlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwgaWYgbm8gY29udGV4dCBmb3IKKyAgIHRoZSBnaXZlbiB0eXBlIHdhcyBmb3VuZC4gIElmIENUWCBpcyBOVUxMIHRoZSBmdW5jdGlvbiBkb2VzIG5vdAorICAgYWJvcnQgYnV0IHJldHVybnMgTlVMTC4gICovCit2b2lkICoKK19nY3J5X2N0eF9maW5kX3BvaW50ZXIgKGdjcnlfY3R4X3QgY3R4LCBpbnQgdHlwZSkKK3sKKyAgaWYgKCFjdHgpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmIChtZW1jbXAgKGN0eC0+bWFnaWMsIENUWF9NQUdJQywgQ1RYX01BR0lDX0xFTikpCisgICAgbG9nX2ZhdGFsICgiYmFkIHBvaW50ZXIgJXAgcGFzc2VkIHRvIF9nY3J5X2N0eF9nZXRfcG9pbnRlclxuIiwgY3R4KTsKKyAgaWYgKGN0eC0+dHlwZSAhPSB0eXBlKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gJmN0eC0+dTsKK30KKworCisvKiBSZWxlYXNlIHRoZSBnZW5lcmljIGNvbnRleHQgQ1RYLiAgKi8KK3ZvaWQKK19nY3J5X2N0eF9yZWxlYXNlIChnY3J5X2N0eF90IGN0eCkKK3sKKyAgaWYgKCFjdHgpCisgICAgcmV0dXJuOworICBpZiAobWVtY21wIChjdHgtPm1hZ2ljLCBDVFhfTUFHSUMsIENUWF9NQUdJQ19MRU4pKQorICAgIGxvZ19mYXRhbCAoImJhZCBwb2ludGVyICVwIHBhc3NlZCB0byBnY3J5X2N0eF9yZWxhc2VcbiIsIGN0eCk7CisgIHN3aXRjaCAoY3R4LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENPTlRFWFRfVFlQRV9FQzoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBsb2dfZmF0YWwgKCJiYWQgY29udGV4dCB0eXBlICVkIGRldGVjdGVkIGluIGdjcnlfY3R4X3JlbGFzZVxuIiwKKyAgICAgICAgICAgICAgICAgY3R4LT50eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgaWYgKGN0eC0+ZGVpbml0KQorICAgIGN0eC0+ZGVpbml0ICgmY3R4LT51KTsKKyAgeGZyZWUgKGN0eCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29udGV4dC5oIGIvc3JjL2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVkZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbnRleHQuaApAQCAtMCwwICsxLDMyIEBACisvKiBjb250ZXh0LmggLSBEZWNsYXJhdGlvbnMgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQKKyAqIENvcHlyaWdodCAoQykgMjAxMyAgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdDUllfQ09OVEVYVF9ICisjZGVmaW5lIEdDUllfQ09OVEVYVF9ICisKKy8qIENvbnRleHQgdHlwZXMgYXMgdXNlZCBpbiBzdHJ1Y3QgZ2NyeV9jb250ZXh0LiAgKi8KKyNkZWZpbmUgQ09OVEVYVF9UWVBFX0VDIDEgIC8qIFRoZSBjb250ZXh0IGlzIHVzZWQgd2l0aCBFQyBmdW5jdGlvbnMuICAqLworCisKK2djcnlfY3R4X3QgX2djcnlfY3R4X2FsbG9jIChpbnQgdHlwZSwgc2l6ZV90IGxlbmd0aCwgdm9pZCAoKmRlaW5pdCkodm9pZCopKTsKK3ZvaWQgKl9nY3J5X2N0eF9nZXRfcG9pbnRlciAoZ2NyeV9jdHhfdCBjdHgsIGludCB0eXBlKTsKK3ZvaWQgKl9nY3J5X2N0eF9maW5kX3BvaW50ZXIgKGdjcnlfY3R4X3QgY3R4LCBpbnQgdHlwZSk7CisKKworI2VuZGlmIC8qR0NSWV9DT05URVhUX0gqLwpkaWZmIC0tZ2l0IGEvc3JjL2R1bXBzZXhwLmMgYi9zcmMvZHVtcHNleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjM4NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2R1bXBzZXhwLmMKQEAgLTAsMCArMSw3NjYgQEAKKy8qIGR1bXBzZXhwLmMgLSBEdW1wIFMtZXhwcmVzc2lvbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLAorICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisvKiBGb3IgYSBuYXRpdmUgV2luZG93c0NFIGJpbmFyeSB3ZSBuZWVkIHRvIGluY2x1ZGUgZ3BnLWVycm9yLmggdG8KKyAgIHByb3ZpZGUgYSByZXBsYWNlbWVudCBmb3Igc3RyZXJyb3IuICAqLworI2lmZGVmIF9fTUlOR1czMkNFX18KKyMgaW5jbHVkZSA8Z3BnLWVycm9yLmg+CisjZW5kaWYKKworI2RlZmluZSBQR00gImR1bXBzZXhwIgorI2RlZmluZSBNWVZFUlNJT05fTElORSBQR00gIiAoTGliZ2NyeXB0KSAiIFZFUlNJT04KKyNkZWZpbmUgQlVHUkVQT1JUX0xJTkUgIlxuUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJnY3J5cHRAZ251cGcub3JnPi5cbiIKKworCitzdGF0aWMgaW50IHZlcmJvc2U7ICAvKiBWZXJib3NlIG1vZGUuICAqLworc3RhdGljIGludCBkZWNpbWFsOyAgLyogUHJpbnQgYWRkcmVzc2VzIGluIGRlY2ltYWwuICAqLworc3RhdGljIGludCBhc3N1bWVfaGV4OyAgLyogQXNzdW1lIGlucHV0IGlzIGhleGVuY29kZWQuICAqLworc3RhdGljIGludCBhZHZhbmNlZDsgLyogQWR2YW5jZWQgZm9ybWF0IG91dHB1dC4gICovCisKK3N0YXRpYyB2b2lkCitwcmludF92ZXJzaW9uIChpbnQgd2l0aF9oZWxwKQoreworICBmcHV0cyAoTVlWRVJTSU9OX0xJTkUgIlxuIgorICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyAgICAgICAgICJMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgIgorICAgICAgICAgIjxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD5cbiIKKyAgICAgICAgICJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyAgICAgICAgICJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIiwKKyAgICAgICAgIHN0ZG91dCk7CisKKyAgaWYgKHdpdGhfaGVscCkKKyAgICBmcHV0cyAoIlxuIgorICAgICAgICAgICAiVXNhZ2U6ICIgUEdNICIgW09QVElPTlNdIFtmaWxlXVxuIgorICAgICAgICAgICAiRGVidWcgdG9vbCBmb3IgUy1leHByZXNzaW9uc1xuIgorICAgICAgICAgICAiXG4iCisgICAgICAgICAgICIgIC0tZGVjaW1hbCAgICAgUHJpbnQgb2Zmc2V0cyB1c2luZyBkZWNpbWFsIG5vdGF0aW9uXG4iCisgICAgICAgICAgICIgIC0tYXNzdW1lLWhleCAgQXNzdW1lIGlucHV0IGlzIGEgaGV4IGR1bXBcbiIKKyAgICAgICAgICAgIiAgLS1hZHZhbmNlZCAgICBQcmludCBmaWxlIGluIGFkdmFuY2VkIGZvcm1hdFxuIgorICAgICAgICAgICAiICAtLXZlcmJvc2UgICAgIFNob3cgd2hhdCB3ZSBhcmUgZG9pbmdcbiIKKyAgICAgICAgICAgIiAgLS12ZXJzaW9uICAgICBQcmludCB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGFuZCBleGl0XG4iCisgICAgICAgICAgICIgIC0taGVscCAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyAgICAgICAgICAgQlVHUkVQT1JUX0xJTkUsIHN0ZG91dCApOworCisgIGV4aXQgKDApOworfQorCitzdGF0aWMgaW50CitwcmludF91c2FnZSAodm9pZCkKK3sKKyAgZnB1dHMgKCJ1c2FnZTogIiBQR00gIiBbT1BUSU9OU10gTkJZVEVTXG4iLCBzdGRlcnIpOworICBmcHV0cyAoIiAgICAgICAodXNlIC0taGVscCB0byBkaXNwbGF5IG9wdGlvbnMpXG4iLCBzdGRlcnIpOworICBleGl0ICgxKTsKK30KKworCisjZGVmaW5lIHNwYWNlX3AoYSkgICAgKChhKT09JyAnIHx8IChhKT09J1xuJyB8fCAoYSk9PSdccicgfHwgKGEpPT0nXHQnKQorI2RlZmluZSBkaWdpdF9wKGEpICAgICgoYSkgPj0gJzAnICYmIChhKSA8PSAnOScpCisjZGVmaW5lIG9jdGRpZ2l0X3AoYSkgKChhKSA+PSAnMCcgJiYgKGEpIDw9ICc3JykKKyNkZWZpbmUgYWxwaGFfcChhKSAgICAoICAgKChhKSA+PSAnQScgJiYgKGEpIDw9ICdaJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgKChhKSA+PSAnYScgJiYgKGEpIDw9ICd6JykpCisjZGVmaW5lIGhleGRpZ2l0X3AoYSkgKGRpZ2l0X3AgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGEpID49ICdBJyAmJiAoYSkgPD0gJ0YnKSAgXAorICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGEpID49ICdhJyAmJiAoYSkgPD0gJ2YnKSkKKyNkZWZpbmUgeHRvaV8xKGEpICAgICAoKGEpIDw9ICc5Jz8gKChhKS0gJzAnKTogXAorICAgICAgICAgICAgICAgICAgICAgICAoYSkgPD0gJ0YnPyAoKGEpLSdBJysxMCk6KChhKS0nYScrMTApKQorCisKKy8qIFJldHVybiB0cnVlIGlmIFAgcG9pbnRzIHRvIGEgYnl0ZSBjb250YWluaW5nIGEgd2hpdGVzcGFjZSBhY2NvcmRpbmcKKyAgIHRvIHRoZSBTLWV4cHJlc3Npb25zIGRlZmluaXRpb24uICovCitzdGF0aWMgaW5saW5lIGludAord2hpdGVzcGFjZV9wIChpbnQgYykKK3sKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICcgJzogY2FzZSAnXHQnOiBjYXNlICdcdic6IGNhc2UgJ1xmJzogY2FzZSAnXHInOiBjYXNlICdcbic6IHJldHVybiAxOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2xvZ2l0IChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpIDsKKyAgZnB1dHMgKFBHTSAiOiAiLCBzdGRlcnIpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICBwdXRjICgnXG4nLCBzdGRlcnIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCisvKiBUaGUgcmF3IGRhdGEgYnVmZmVyIGFuZCBpdHMgY3VycmVudCBsZW5ndGggKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRhdGFidWZmZXJbMTZdOworc3RhdGljIGludCBkYXRhYnVmZmVybGVuOworLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBkYXRhYnVmZmVyIHdoaWNoIHNob3VsZCBiZSBza2lwcGVkIGF0IGEgZmx1c2guICAqLworc3RhdGljIGludCBza2lwZGF0YWJ1ZmZlcmxlbjsKKy8qIFRoZSBudW1iZXIgb2YgcmF3IGJ5dGVzIHByaW50ZWQgb24gdGhlIGxhc3QgbGluZS4gICovCitzdGF0aWMgaW50IG5ieXRlc3ByaW50ZWQ7CisvKiBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgZGF0YSBidWZmZXIgLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhdGFidWZmZXJvZmZzZXQ7CisKKworCitzdGF0aWMgaW50CitteV9nZXRjIChGSUxFICpmcCkKK3sKKyAgaW50IGMxLCBjMjsKKworICBpZiAoIWFzc3VtZV9oZXgpCisgICAgcmV0dXJuIGdldGMgKGZwKTsKKworICB3aGlsZSAoIChjMT1nZXRjIChmcCkpICE9IEVPRiAmJiBzcGFjZV9wIChjMSkgKQorICAgIDsKKyAgaWYgKGMxID09IEVPRikKKyAgICByZXR1cm4gRU9GOworCisgIGlmICghaGV4ZGlnaXRfcCAoYzEpKQorICAgIHsKKyAgICAgIGxvZ2l0ICgibm9uIGhleC1kaWdpdCBlbmNvdW50ZXJlZFxuIik7CisgICAgICByZXR1cm4gRU9GOworICAgIH0KKworICB3aGlsZSAoIChjMj1nZXRjIChmcCkpICE9IEVPRiAmJiBzcGFjZV9wIChjMikgKQorICAgIDsKKyAgaWYgKGMyID09IEVPRikKKyAgICB7CisgICAgICBsb2dpdCAoImVycm9yIHJlYWRpbmcgc2Vjb25kIGhleCBuaWJibGVcbiIpOworICAgICAgcmV0dXJuIEVPRjsKKyAgICB9CisgIGlmICghaGV4ZGlnaXRfcCAoYzIpKQorICAgIHsKKyAgICAgIGxvZ2l0ICgic2Vjb25kIGhleCBuaWJibGUgaXMgbm90IGEgaGV4LWRpZ2l0XG4iKTsKKyAgICAgIHJldHVybiBFT0Y7CisgICAgfQorICByZXR1cm4geHRvaV8xIChjMSkgKiAxNiArIHh0b2lfMSAoYzIpOworfQorCisKKworCisKKy8qIEZsdXNoIHRoZSByYXcgZGF0YSBidWZmZXIuICAqLworc3RhdGljIHZvaWQKK2ZsdXNoZGF0YWJ1ZmZlciAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgaWYgKCFkYXRhYnVmZmVybGVuKQorICAgIHJldHVybjsKKyAgbmJ5dGVzcHJpbnRlZCA9IDA7CisgIGlmIChkZWNpbWFsKQorICAgIHByaW50ZiAoIiUwOGx1ICIsIGRhdGFidWZmZXJvZmZzZXQpOworICBlbHNlCisgICAgcHJpbnRmICgiJTA4bHggIiwgZGF0YWJ1ZmZlcm9mZnNldCk7CisgIGZvciAoaT0wOyBpIDwgZGF0YWJ1ZmZlcmxlbjsgaSsrKQorICAgIHsKKyAgICAgIGlmIChpID09IDgpCisgICAgICAgIHB1dGNoYXIgKCcgJyk7CisgICAgICBpZiAoaSA8IHNraXBkYXRhYnVmZmVybGVuKQorICAgICAgICBmcHV0cyAoIiAgICIsIHN0ZG91dCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwcmludGYgKCIgJTAyeCIsIGRhdGFidWZmZXJbaV0pOworICAgICAgICAgIGRhdGFidWZmZXJvZmZzZXQrKzsKKyAgICAgICAgfQorICAgICAgbmJ5dGVzcHJpbnRlZCsrOworICAgIH0KKyAgZm9yICg7IGkgPCBzaXplb2YgKGRhdGFidWZmZXIpOyBpKyspCisgICAgeworICAgICAgaWYgKGkgPT0gOCkKKyAgICAgICAgcHV0Y2hhciAoJyAnKTsKKyAgICAgIGZwdXRzICgiICAgIiwgc3Rkb3V0KTsKKyAgICB9CisgIGZwdXRzICgiICB8Iiwgc3Rkb3V0KTsKKyAgZm9yIChpPTA7IGkgPCBkYXRhYnVmZmVybGVuOyBpKyspCisgICAgeworICAgICAgaWYgKGkgPCBza2lwZGF0YWJ1ZmZlcmxlbikKKyAgICAgICAgcHV0Y2hhciAoJyAnKTsKKyAgICAgIGVsc2UgaWYgKGRhdGFidWZmZXJbaV0gPj0gJyAnICYmIGRhdGFidWZmZXJbaV0gPD0gJ34nCisgICAgICAgICAgICAgICAmJiBkYXRhYnVmZmVyW2ldICE9ICd8JykKKyAgICAgICAgcHV0Y2hhciAoZGF0YWJ1ZmZlcltpXSk7CisgICAgICBlbHNlCisgICAgICAgIHB1dGNoYXIgKCcuJyk7CisgICAgfQorICBwdXRjaGFyICgnfCcpOworICBwdXRjaGFyICgnXG4nKTsKKyAgZGF0YWJ1ZmZlcmxlbiA9IDA7CisgIHNraXBkYXRhYnVmZmVybGVuID0gMDsKK30KKworCisvKiBBZGQgQyB0byB0aGUgcmF3IGRhdGEgYnVmZmVyIGFuZCBmbHVzaCBhcyBuZWVkZWQuICAqLworc3RhdGljIHZvaWQKK2FkZHJhd2RhdGEgKGludCBjKQoreworICBpZiAoIGRhdGFidWZmZXJsZW4gPj0gc2l6ZW9mIGRhdGFidWZmZXIgKQorICAgIGZsdXNoZGF0YWJ1ZmZlciAoKTsKKyAgZGF0YWJ1ZmZlcltkYXRhYnVmZmVybGVuKytdID0gYzsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRjdXJzb3IgKGludCBib3RoKQoreworICBpbnQgaTsKKworICBmbHVzaGRhdGFidWZmZXIgKCk7CisgIHByaW50ZiAoIiU4cyAiLCAiIik7CisgIGZvciAoaT0wOyBpIDwgc2l6ZW9mIChkYXRhYnVmZmVyKTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChpID09IDgpCisgICAgICAgIHB1dGNoYXIgKCcgJyk7CisgICAgICBpZiAoaSsxID09IG5ieXRlc3ByaW50ZWQpCisgICAgICAgIHsKKyAgICAgICAgICBmcHV0cyAoIiBeICIsIHN0ZG91dCk7CisgICAgICAgICAgaWYgKCFib3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZnB1dHMgKCIgICAiLCBzdGRvdXQpOworICAgIH0KKyAgaWYgKGJvdGgpCisgICAgeworICAgICAgZnB1dHMgKCIgICAiLCBzdGRvdXQpOworICAgICAgZm9yIChpPTA7IGkgPCBuYnl0ZXNwcmludGVkLTE7IGkrKykKKyAgICAgICAgcHV0Y2hhciAoJyAnKTsKKyAgICAgIHB1dGNoYXIgKCdeJyk7CisgICAgfQorICBkYXRhYnVmZmVybGVuID0gc2tpcGRhdGFidWZmZXJsZW4gPSBuYnl0ZXNwcmludGVkOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRlcnIgKGNvbnN0IGNoYXIgKnRleHQpCit7CisgIHByaW50Y3Vyc29yICgxKTsKKyAgcHJpbnRmICgiXG4gICAgICAgICAgRXJyb3I6ICVzXG4iLCB0ZXh0KTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50Y3RsIChjb25zdCBjaGFyICp0ZXh0KQoreworICBpZiAodmVyYm9zZSAmJiAhYWR2YW5jZWQpCisgICAgeworICAgICAgcHJpbnRjdXJzb3IgKDApOworICAgICAgcHJpbnRmICgiJXNcbiIsIHRleHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3ByaW50Y2hyIChpbnQgYykKK3sKKyAgcHV0Y2hhciAoYyk7Cit9CisKKy8qIHN0YXRpYyB2b2lkICovCisvKiBwcmludGhleCAoaW50IGMpICovCisvKiB7ICovCisvKiAgIHByaW50ZiAoIlxceCUwMngiLCBjKTsgKi8KKy8qIH0gKi8KKworCisjaWYgMAorLyoqKioqKioqKioqKioqKioKKyAqIFByaW50IFNFWFAgdG8gYnVmZmVyIHVzaW5nIHRoZSBNT0RFLiAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZQorICogU0VYUCBpbiBidWZmZXIgb3IgMCBpZiB0aGUgYnVmZmVyIGlzIHRvbyBzaG9ydCAoV2UgaGF2ZSBhdCBsZWFzdCBhbgorICogZW1wdHkgbGlzdCBjb25zaXN0aW5nIG9mIDIgYnl0ZXMpLiAgSWYgYSBidWZmZXIgb2YgTlVMTCBpcyBwcm92aWRlZCwKKyAqIHRoZSByZXF1aXJlZCBsZW5ndGggaXMgcmV0dXJuZWQuCisgKi8KK3NpemVfdAorZ2NyeV9zZXhwX3NwcmludCAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IG1heGxlbmd0aCApCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGVtcHR5WzNdID0geyBTVF9PUEVOLCBTVF9DTE9TRSwgU1RfU1RPUCB9OworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworICBjaGFyICpkOworICBEQVRBTEVOIG47CisgIGNoYXIgbnVtYnVmWzIwXTsKKyAgaW50IGksIGluZGVudCA9IDA7CisKKyAgcyA9IGxpc3Q/IGxpc3QtPmQgOiBlbXB0eTsKKyAgZCA9IGJ1ZmZlcjsKKyAgd2hpbGUgKCAqcyAhPSBTVF9TVE9QICkKKyAgICB7CisgICAgICBzd2l0Y2ggKCAqcyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTVF9PUEVOOgorICAgICAgICAgIHMrKzsKKyAgICAgICAgICBpZiAoaW5kZW50KQorICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgICAgZm9yIChpPTA7IGkgPCBpbmRlbnQ7IGkrKykKKyAgICAgICAgICAgIHB1dGNoYXIgKCcgJyk7CisgICAgICAgICAgcHV0Y2hhciAoJygnKTsKKyAgICAgICAgICBpbmRlbnQrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVF9DTE9TRToKKyAgICAgICAgICBzKys7CisgICAgICAgICAgcHV0Y2hhciAoJyknKTsKKyAgICAgICAgICBpbmRlbnQtLTsKKyAgICAgICAgICBpZiAoKnMgIT0gU1RfT1BFTiAmJiAqcyAhPSBTVF9TVE9QKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBpbmRlbnQ7IGkrKykKKyAgICAgICAgICAgICAgICBwdXRjaGFyICgnICcpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUX0RBVEE6CisgICAgICAgICAgcysrOworICAgICAgICAgIG1lbWNweSAoJm4sIHMsIHNpemVvZiBuKTsKKyAgICAgICAgICBzICs9IHNpemVvZiBuOworICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0eXBlOworICAgICAgICAgICAgc2l6ZV90IG5uOworCisgICAgICAgICAgICBzd2l0Y2ggKCAodHlwZT1zdWl0YWJsZV9lbmNvZGluZyAocywgbikpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogbm4gPSBjb252ZXJ0X3RvX3N0cmluZyAocywgbiwgTlVMTCk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG5uID0gY29udmVydF90b190b2tlbiAocywgbiwgTlVMTCk7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBubiA9IGNvbnZlcnRfdG9faGV4IChzLCBuLCBOVUxMKTsgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IGNvbnZlcnRfdG9fc3RyaW5nIChzLCBuLCBkKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogY29udmVydF90b190b2tlbiAocywgbiwgZCk7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBjb252ZXJ0X3RvX2hleCAocywgbiwgZCk7IGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkICs9IG5uOworICAgICAgICAgICAgaWYgKHNbbl0gIT0gU1RfQ0xPU0UpCisgICAgICAgICAgICAgIHB1dGNoYXIgKCcgJyk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc25wcmludGYgKG51bWJ1Ziwgc2l6ZW9mIG51bWJ1ZiwgICIldToiLCAodW5zaWduZWQgaW50KW4gKTsKKyAgICAgICAgICAgICAgZCA9IHN0cGNweSAoZCwgbnVtYnVmKTsKKyAgICAgICAgICAgICAgbWVtY3B5IChkLCBzLCBuKTsKKyAgICAgICAgICAgICAgZCArPSBuOworICAgICAgICAgICAgfQorICAgICAgICAgIHMgKz0gbjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBCVUcgKCk7CisJfQorICAgIH0KKyAgcHV0Y2hhciAoJ1xuJyk7CisgIHJldHVybiBsZW47Cit9CisjZW5kaWYKKworCisvKiBQcmVwYXJlIGZvciBzYXZpbmcgYSBjaHVuayBvZiBkYXRhLiAgKi8KK3N0YXRpYyB2b2lkCitpbml0X2RhdGEgKHZvaWQpCit7CisKK30KKworLyogUHVzaCBDIG9uIHRoZSBjdXJyZW50IGRhdGEgY2h1bmsuICAqLworc3RhdGljIHZvaWQKK3B1c2hfZGF0YSAoaW50IGMpCit7CisgICh2b2lkKWM7Cit9CisKKy8qIEZsdXNoIGFuZCB0aHVzIHByaW50IHRoZSBjdXJyZW50IGRhdGEgY2h1bmsuICAqLworc3RhdGljIHZvaWQKK2ZsdXNoX2RhdGEgKHZvaWQpCit7CisKK30KKworCisvKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgaW50CitwYXJzZV9hbmRfcHJpbnQgKEZJTEUgKmZwKQoreworICBzdGF0aWMgY29uc3QgY2hhciB0b2tlbmNoYXJzW10gPQorICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgIjAxMjM0NTY3ODktLi9fOiorPSI7CisgIGludCBjOworICBpbnQgbGV2ZWwgPSAwOworICBpbnQgdG9rZW5jID0gMDsKKyAgaW50IGhleGNvdW50ID0gMDsKKyAgaW50IGRpc3BoaW50ID0gMDsKKyAgdW5zaWduZWQgbG9uZyBkYXRhbGVuID0gMDsKKyAgY2hhciBxdW90ZV9idWZbMTBdOworICBpbnQgcXVvdGVfaWR4ID0gMDsKKyAgZW51bQorICAgIHsKKyAgICAgIElOSVRfU1RBVEUgPSAwLCBJTl9OVU1CRVIsIFBSRV9EQVRBLCBJTl9EQVRBLCBJTl9TVFJJTkcsCisgICAgICBJTl9FU0NBUEUsIElOX09DVF9FU0MsIElOX0hFWF9FU0MsCisgICAgICBDUl9FU0MsIExGX0VTQywgSU5fSEVYRk1ULCBJTl9CQVNFNjQKKyAgICB9CisgIHN0YXRlID0gSU5JVF9TVEFURTsKKworCisgIHdoaWxlICgoYyA9IG15X2dldGMgKGZwKSkgIT0gRU9GICkKKyAgICB7CisgICAgICBhZGRyYXdkYXRhIChjKTsKKyAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBJTklUX1NUQVRFOgorICAgICAgICAgIGlmICh0b2tlbmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChzdHJjaHIgKHRva2VuY2hhcnMsIGMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHByaW50Y2hyIChjKTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdG9rZW5jID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcGFyc2VfaW5pdF9zdGF0ZToKKyAgICAgICAgICBpZiAoYyA9PSAnKCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChkaXNwaGludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwcmludGVyciAoInVubWF0Y2hlZCBkaXNwbGF5IGhpbnQiKTsKKyAgICAgICAgICAgICAgICAgIGRpc3BoaW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHByaW50Y3RsICgib3BlbiIpOworICAgICAgICAgICAgICBsZXZlbCsrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJyknKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZGlzcGhpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcHJpbnRlcnIgKCJ1bm1hdGNoZWQgZGlzcGxheSBoaW50Iik7CisgICAgICAgICAgICAgICAgICBkaXNwaGludCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwcmludGN0bCAoImNsb3NlIik7CisgICAgICAgICAgICAgIGxldmVsLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXCInKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0ZSA9IElOX1NUUklORzsKKyAgICAgICAgICAgICAgcHJpbnRjdGwgKCJiZWdpbnN0cmluZyIpOworICAgICAgICAgICAgICBpbml0X2RhdGEgKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnIycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRlID0gSU5fSEVYRk1UOworICAgICAgICAgICAgICBoZXhjb3VudCA9IDA7CisgICAgICAgICAgICAgIHByaW50Y3RsICgiYmVnaW5oZXgiKTsKKyAgICAgICAgICAgICAgaW5pdF9kYXRhICgpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ3wnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0ZSA9IElOX0JBU0U2NDsKKyAgICAgICAgICAgICAgcHJpbnRjdGwgKCJiZWdpbmJhc2U2NCIpOworICAgICAgICAgICAgICBpbml0X2RhdGEgKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnWycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChkaXNwaGludCkKKyAgICAgICAgICAgICAgICBwcmludGVyciAoIm5lc3RlZCBkaXNwbGF5IGhpbnQiKTsKKyAgICAgICAgICAgICAgZGlzcGhpbnQgPSBjOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ10nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIWRpc3BoaW50KQorICAgICAgICAgICAgICAgIHByaW50ZXJyICgibm8gb3BlbiBkaXNwbGF5IGhpbnQiKTsKKyAgICAgICAgICAgICAgZGlzcGhpbnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoYyA9PSAnMCcpCisgICAgICAgICAgICAgICAgcHJpbnRlcnIgKCJ6ZXJvIHByZWZpeGVkIGxlbmd0aCIpOworICAgICAgICAgICAgICBzdGF0ZSA9IElOX05VTUJFUjsKKyAgICAgICAgICAgICAgZGF0YWxlbiA9IChjIC0gJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChzdHJjaHIgKHRva2VuY2hhcnMsIGMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwcmludGNociAoYyk7CisgICAgICAgICAgICAgIHRva2VuYyA9IGM7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAod2hpdGVzcGFjZV9wIChjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgICBlbHNlIGlmIChjID09ICd7JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHJpbnRlcnIgKCJyZXNjYW5uaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjID09ICcmJyB8fCBjID09ICdcXCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHByaW50ZXJyICgicmVzZXJ2ZWQgcHVuY3R1YXRpb24gZGV0ZWN0ZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHByaW50ZXJyICgiYmFkIGNoYXJhY3RlciBkZXRlY3RlZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSU5fTlVNQkVSOgorICAgICAgICAgIGlmIChkaWdpdF9wIChjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBkYXRhbGVuICogMTAgKyAoYyAtICcwJyk7CisgICAgICAgICAgICAgIGlmICh0bXAgPCBkYXRhbGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ZXJyICgib3ZlcmZsb3cgaW4gZGF0YSBsZW5ndGgiKTsKKyAgICAgICAgICAgICAgICAgIHN0YXRlID0gSU5JVF9TVEFURTsKKyAgICAgICAgICAgICAgICAgIGRhdGFsZW4gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGFsZW4gPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnOicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghZGF0YWxlbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwcmludGVyciAoIm5vIGRhdGEgbGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICBzdGF0ZSA9IElOSVRfU1RBVEU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdGUgPSBQUkVfREFUQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjID09ICdcIicgfHwgYyA9PSAnIycgfHwgYyA9PSAnfCcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBXZSBpZ25vcmUgdGhlIG9wdGlvbmFsIGxlbmd0aCBhbmQgZGl2ZXJ0IHRvIHRoZSBpbml0CisgICAgICAgICAgICAgICAgIHN0YXRlIHBhcnNlciBjb2RlLiAqLworICAgICAgICAgICAgICBnb3RvIHBhcnNlX2luaXRfc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRlcnIgKCJpbnZhbGlkIGxlbmd0aCBzcGVjaWZpY2F0aW9uIik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUkVfREFUQToKKyAgICAgICAgICBzdGF0ZSA9IElOX0RBVEE7CisgICAgICAgICAgcHJpbnRjdGwgKCJiZWdpbmRhdGEiKTsKKyAgICAgICAgICBpbml0X2RhdGEgKCk7CisgICAgICAgIGNhc2UgSU5fREFUQToKKyAgICAgICAgICBpZiAoZGF0YWxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHVzaF9kYXRhIChjKTsKKyAgICAgICAgICAgICAgZGF0YWxlbi0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICghZGF0YWxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGUgPSBJTklUX1NUQVRFOworICAgICAgICAgICAgICBwcmludGN0bCAoImVuZGRhdGEiKTsKKyAgICAgICAgICAgICAgZmx1c2hfZGF0YSAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElOX1NUUklORzoKKyAgICAgICAgICBpZiAoYyA9PSAnXCInKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwcmludGN0bCAoImVuZHN0cmluZyIpOworICAgICAgICAgICAgICBmbHVzaF9kYXRhICgpOworICAgICAgICAgICAgICBzdGF0ZSA9IElOSVRfU1RBVEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXFwnKQorICAgICAgICAgICAgc3RhdGUgPSBJTl9FU0NBUEU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHVzaF9kYXRhIChjKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElOX0VTQ0FQRToKKyAgICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdiJzogIHB1c2hfZGF0YSAoJ1xiJyk7IHN0YXRlID0gSU5fU1RSSU5HOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOiAgcHVzaF9kYXRhICgnXHQnKTsgc3RhdGUgPSBJTl9TVFJJTkc7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAndic6ICBwdXNoX2RhdGEgKCdcdicpOyBzdGF0ZSA9IElOX1NUUklORzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICduJzogIHB1c2hfZGF0YSAoJ1xuJyk7IHN0YXRlID0gSU5fU1RSSU5HOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOiAgcHVzaF9kYXRhICgnXGYnKTsgc3RhdGUgPSBJTl9TVFJJTkc7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAncic6ICBwdXNoX2RhdGEgKCdccicpOyBzdGF0ZSA9IElOX1NUUklORzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICciJzogIHB1c2hfZGF0YSAoJyInKTsgIHN0YXRlID0gSU5fU1RSSU5HOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1wnJzogcHVzaF9kYXRhICgnXCcnKTsgc3RhdGUgPSBJTl9TVFJJTkc7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXFwnOiBwdXNoX2RhdGEgKCdcXCcpOyBzdGF0ZSA9IElOX1NUUklORzsgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6CisgICAgICAgICAgICAgIHN0YXRlID0gSU5fT0NUX0VTQzsKKyAgICAgICAgICAgICAgcXVvdGVfaWR4ID0gMDsKKyAgICAgICAgICAgICAgcXVvdGVfYnVmW3F1b3RlX2lkeCsrXSA9IGM7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgc3RhdGUgPSBJTl9IRVhfRVNDOworICAgICAgICAgICAgICBxdW90ZV9pZHggPSAwOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnXHInOgorICAgICAgICAgICAgICBzdGF0ZSA9IENSX0VTQzsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICAgc3RhdGUgPSBMRl9FU0M7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBwcmludGVyciAoImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIik7CisgICAgICAgICAgICAgIHN0YXRlID0gSU5fU1RSSU5HOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElOX09DVF9FU0M6CisgICAgICAgICAgaWYgKHF1b3RlX2lkeCA8IDMgJiYgc3RyY2hyICgiMDEyMzQ1NjciLCBjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcXVvdGVfYnVmW3F1b3RlX2lkeCsrXSA9IGM7CisgICAgICAgICAgICAgIGlmIChxdW90ZV9pZHggPT0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwdXNoX2RhdGEgKCh1bnNpZ25lZCBpbnQpcXVvdGVfYnVmWzBdICogOCAqIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAodW5zaWduZWQgaW50KXF1b3RlX2J1ZlsxXSAqIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAodW5zaWduZWQgaW50KXF1b3RlX2J1ZlsyXSk7CisgICAgICAgICAgICAgICAgICBzdGF0ZSA9IElOX1NUUklORzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGUgPSBJTl9TVFJJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fSEVYX0VTQzoKKyAgICAgICAgICBpZiAocXVvdGVfaWR4IDwgMiAmJiBzdHJjaHIgKCIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIiwgYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHF1b3RlX2J1ZltxdW90ZV9pZHgrK10gPSBjOworICAgICAgICAgICAgICBpZiAocXVvdGVfaWR4ID09IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcHVzaF9kYXRhICh4dG9pXzEgKHF1b3RlX2J1ZlswXSkgKiAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHh0b2lfMSAocXVvdGVfYnVmWzFdKSk7CisgICAgICAgICAgICAgICAgICBzdGF0ZSA9IElOX1NUUklORzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGUgPSBJTl9TVFJJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1JfRVNDOgorICAgICAgICAgIHN0YXRlID0gSU5fU1RSSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExGX0VTQzoKKyAgICAgICAgICBzdGF0ZSA9IElOX1NUUklORzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElOX0hFWEZNVDoKKyAgICAgICAgICBpZiAoaGV4ZGlnaXRfcCAoYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB1c2hfZGF0YSAoYyk7CisgICAgICAgICAgICAgIGhleGNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnIycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICgoaGV4Y291bnQgJiAxKSkKKyAgICAgICAgICAgICAgICBwcmludGVyciAoIm9kZCBudW1iZXIgb2YgaGV4IGRpZ2l0cyIpOworICAgICAgICAgICAgICBwcmludGN0bCAoImVuZGhleCIpOworICAgICAgICAgICAgICBmbHVzaF9kYXRhICgpOworICAgICAgICAgICAgICBzdGF0ZSA9IElOSVRfU1RBVEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIXdoaXRlc3BhY2VfcCAoYykpCisgICAgICAgICAgICBwcmludGVyciAoImJhZCBoZXggY2hhcmFjdGVyIik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJTl9CQVNFNjQ6CisgICAgICAgICAgaWYgKGMgPT0gJ3wnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwcmludGN0bCAoImVuZGJhc2U2NCIpOworICAgICAgICAgICAgICBmbHVzaF9kYXRhICgpOworICAgICAgICAgICAgICBzdGF0ZSA9IElOSVRfU1RBVEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHVzaF9kYXRhIChjKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGxvZ2l0ICgiaW52YWxpZCBzdGF0ZSAlZCBkZXRlY3RlZCIsIHN0YXRlKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorICAgIH0KKyAgZmx1c2hkYXRhYnVmZmVyICgpOworICBpZiAoZmVycm9yIChmcCkpCisgICAgeworICAgICAgbG9naXQgKCJlcnJvciByZWFkaW5nIGlucHV0OiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgcmM7CisKKyAgaWYgKGFyZ2MpCisgICAgeworICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgfQorICB3aGlsZSAoYXJnYyAmJiAqKmFyZ3YgPT0gJy0nICYmICgqYXJndilbMV0gPT0gJy0nKQorICAgIHsKKyAgICAgIGlmICghKCphcmd2KVsyXSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyc2lvbiIpKQorICAgICAgICBwcmludF92ZXJzaW9uICgwKTsKKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1oZWxwIikpCisgICAgICAgIHByaW50X3ZlcnNpb24gKDEpOworICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcmJvc2UiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVjaW1hbCIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgZGVjaW1hbCA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1hc3N1bWUtaGV4IikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBhc3N1bWVfaGV4ID0gMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWFkdmFuY2VkIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBhZHZhbmNlZCA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcHJpbnRfdXNhZ2UgKCk7CisgICAgfQorCisgIGlmICghYXJnYykKKyAgICB7CisgICAgICByYyA9IHBhcnNlX2FuZF9wcmludCAoc3RkaW4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJjID0gMDsKKyAgICAgIGZvciAoOyBhcmdjOyBhcmd2KyssIGFyZ2MtLSkKKyAgICAgICAgeworICAgICAgICAgIEZJTEUgKmZwID0gZm9wZW4gKCphcmd2LCAicmIiKTsKKyAgICAgICAgICBpZiAoIWZwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dpdCAoImNhbid0IG9wZW4gYCVzJzogJXNcbiIsICphcmd2LCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICAgcmMgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHBhcnNlX2FuZF9wcmludCAoZnApKQorICAgICAgICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuICEhcmM7Cit9CmRpZmYgLS1naXQgYS9zcmMvZWMtY29udGV4dC5oIGIvc3JjL2VjLWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGNhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2VjLWNvbnRleHQuaApAQCAtMCwwICsxLDg0IEBACisvKiBlYy1jb250ZXh0LmggLSBQcml2YXRlIGRlZmluaXRpb25zIGZvciBDT05URVhUX1RZUEVfRUMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHQ1JZX0VDX0NPTlRFWFRfSAorI2RlZmluZSBHQ1JZX0VDX0NPTlRFWFRfSAorCisvKiBUaGlzIGNvbnRleHQgaXMgdXNlZCB3aXRoIGFsbCBvdXIgRUMgZnVuY3Rpb25zLiAqLworc3RydWN0IG1waV9lY19jdHhfcworeworICBlbnVtIGdjcnlfbXBpX2VjX21vZGVscyBtb2RlbDsgLyogVGhlIG1vZGVsIGRlc2NyaWJpbmcgdGhpcyBjdXJ2ZS4gICovCisKKyAgZW51bSBlY2NfZGlhbGVjdHMgZGlhbGVjdDsgICAgIC8qIFRoZSBFQ0MgZGlhbGVjdCB1c2VkIHdpdGggdGhlIGN1cnZlLiAgKi8KKworICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgLyogUHVibGljIGtleSBmbGFncyAobm90IGFsd2F5cyB1c2VkKS4gICovCisKKyAgdW5zaWduZWQgaW50IG5iaXRzOyAgICAgICAgICAgIC8qIE51bWJlciBvZiBiaXRzLiAgKi8KKworICAvKiBEb21haW4gcGFyYW1ldGVycy4gIE5vdGUgdGhhdCB0aGV5IG1heSBub3QgYWxsIGJlIHNldCBhbmQgaWYgc2V0CisgICAgIHRoZSBNUElzIG1heSBiZSBmbGFnZWQgYXMgY29uc3RhbnQuICovCisgIGdjcnlfbXBpX3QgcDsgICAgICAgICAvKiBQcmltZSBzcGVjaWZ5aW5nIHRoZSBmaWVsZCBHRihwKS4gICovCisgIGdjcnlfbXBpX3QgYTsgICAgICAgICAvKiBGaXJzdCBjb2VmZmljaWVudCBvZiB0aGUgV2VpZXJzdHJhc3MgZXF1YXRpb24uICAqLworICBnY3J5X21waV90IGI7ICAgICAgICAgLyogU2Vjb25kIGNvZWZmaWNpZW50IG9mIHRoZSBXZWllcnN0cmFzcyBlcXVhdGlvbi4gICovCisgIGdjcnlfbXBpX3BvaW50X3QgRzsgICAvKiBCYXNlIHBvaW50IChnZW5lcmF0b3IpLiAgKi8KKyAgZ2NyeV9tcGlfdCBuOyAgICAgICAgIC8qIE9yZGVyIG9mIEcuICAqLworCisgIC8qIFRoZSBhY3R1YWwga2V5LiAgTWF5IG5vdCBiZSBzZXQuICAqLworICBnY3J5X21waV9wb2ludF90IFE7ICAgLyogUHVibGljIGtleS4gICAqLworICBnY3J5X21waV90IGQ7ICAgICAgICAgLyogUHJpdmF0ZSBrZXkuICAqLworCisKKyAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZSB0byBtcGkvZWMuYyEgKi8KKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgaW50IGFfaXNfcG1pbnVzMzoxOworICAgICAgdW5zaWduZWQgaW50IHR3b19pbnZfcDoxOworICAgIH0gdmFsaWQ7IC8qIEZsYWdzIHRvIGhlbHAgc2V0dGluZyB0aGUgaGVscGVyIHZhcnMgYmVsb3cuICAqLworCisgICAgaW50IGFfaXNfcG1pbnVzMzsgIC8qIFRydWUgaWYgQSA9IFAgLSAzLiAqLworCisgICAgZ2NyeV9tcGlfdCB0d29faW52X3A7CisKKyAgICBtcGlfYmFycmV0dF90IHBfYmFycmV0dDsKKworICAgIC8qIFNjcmF0Y2ggdmFyaWFibGVzLiAgKi8KKyAgICBnY3J5X21waV90IHNjcmF0Y2hbMTFdOworCisgICAgLyogSGVscGVyIGZvciBmYXN0IHJlZHVjdGlvbi4gICovCisgICAgLyogICBpbnQgbmlzdF9uYml0czsgL1wqIElmIHRoaXMgaXMgYSBOSVNUIGN1cnZlLCB0aGUgIyBvZiBiaXRzLiAgKlwvICovCisgICAgLyogICBnY3J5X21waV90IHNbMTBdOyAqLworICAgIC8qICAgZ2NyeV9tcGlfdCBjOyAqLworICB9IHQ7Cit9OworCisKKy8qLS0gbXBpL2VjLmMgLS0qLwordm9pZCBfZ2NyeV9tcGlfZWNfZ2V0X3Jlc2V0IChtcGlfZWNfdCBlYyk7CisKKworLyotLSBjaXBoZXIvZWNjLWN1cnZlcy5jIC0tKi8KK2djcnlfbXBpX3QgICAgICAgX2djcnlfZWNjX2dldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIG1waV9lY190IGVjLCBpbnQgY29weSk7CitnY3J5X21waV9wb2ludF90IF9nY3J5X2VjY19nZXRfcG9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsIG1waV9lY190IGVjKTsKK2dwZ19lcnJfY29kZV90ICAgX2djcnlfZWNjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IG5ld3ZhbHVlLCBtcGlfZWNfdCBlYyk7CitncGdfZXJyX2NvZGVfdCAgIF9nY3J5X2VjY19zZXRfcG9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgbmV3dmFsdWUsIG1waV9lY190IGVjKTsKKworCisjZW5kaWYgLypHQ1JZX0VDX0NPTlRFWFRfSCovCmRpZmYgLS1naXQgYS9zcmMvZmlwcy5jIGIvc3JjL2ZpcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ4ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ZpcHMuYwpAQCAtMCwwICsxLDg2MCBAQAorLyogZmlwcy5jIC0gRklQUyBtb2RlIG1hbmFnZW1lbnQKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgRU5BQkxFX0hNQUNfQklOQVJZX0NIRUNLCisjIGluY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU0xPRworIyBpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImF0aC5oIgorI2luY2x1ZGUgImNpcGhlci1wcm90by5oIgorI2luY2x1ZGUgImhtYWMyNTYuaCIKKworCisvKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB1c2VkIHRvIGZvcmNlIGxpYmdjcnlwdCBpbnRvIGZpcHMgbW9kZS4gKi8KKyNkZWZpbmUgRklQU19GT1JDRV9GSUxFICIvZXRjL2djcnlwdC9maXBzX2VuYWJsZWQiCisKKworLyogVGhlIHN0YXRlcyBvZiB0aGUgZmluaXRlIHN0YXRlIG1hY2hpbmUgdXNlZCBpbiBmaXBzIG1vZGUuICAqLworZW51bSBtb2R1bGVfc3RhdGVzCisgIHsKKyAgICAvKiBQT1dFUk9GRiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQuICAqLworICAgIFNUQVRFX1BPV0VST04gID0gMCwKKyAgICBTVEFURV9JTklULAorICAgIFNUQVRFX1NFTEZURVNULAorICAgIFNUQVRFX09QRVJBVElPTkFMLAorICAgIFNUQVRFX0VSUk9SLAorICAgIFNUQVRFX0ZBVEFMRVJST1IsCisgICAgU1RBVEVfU0hVVERPV04KKyAgfTsKKworCisvKiBGbGFnIHRlbGxpbmcgd2hldGhlciB3ZSBhcmUgaW4gZmlwcyBtb2RlLiAgSXQgdXNlcyBpbnZlcnNlIGxvZ2ljIHNvCisgICB0aGF0IGZpcHMgbW9kZSBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgY2hhbmdlZCBieSB0aGUgaW5pdGlhbGl6YXRpb24KKyAgIGNvZGUuIFRvIGNoZWNrIHdoZXRoZXIgZmlwcyBtb2RlIGlzIGVuYWJsZWQsIHVzZSB0aGUgZnVuY3Rpb24KKyAgIGZpcHNfbW9kZSgpISAqLworc3RhdGljIGludCBub19maXBzX21vZGVfcmVxdWlyZWQ7CisKKy8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgaW4gdGhlIGVuZm9yY2VkIEZJUFMgbW9kZS4gICovCitzdGF0aWMgaW50IGVuZm9yY2VkX2ZpcHNfbW9kZTsKKworLyogSWYgdGhpcyBmbGFnIGlzIHNldCwgdGhlIGFwcGxpY2F0aW9uIG1heSBubyBsb25nZXIgYXNzdW1lIHRoYXQgdGhlCisgICBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gRklQUyBtb2RlLiAgVGhpcyBmbGFnIGlzIHByb3RlY3RlZCBieSB0aGUKKyAgIEZTTV9MT0NLLiAgKi8KK3N0YXRpYyBpbnQgaW5hY3RpdmVfZmlwc19tb2RlOworCisvKiBUaGlzIGlzIHRoZSBsb2NrIHdlIHVzZSB0byBwcm90ZWN0IHRoZSBGU00uICAqLworc3RhdGljIGF0aF9tdXRleF90IGZzbV9sb2NrOworCisvKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgRlNNLiAgVGhlIHdob2xlIHN0YXRlIG1hY2hpbmVyeSBpcyBvbmx5CisgICB1c2VkIHdoaWxlIGluIGZpcHMgbW9kZS4gQ2hhbmdlIHRoaXMgb25seSB3aGlsZSBob2xkaW5nIGZzbV9sb2NrLiAqLworc3RhdGljIGVudW0gbW9kdWxlX3N0YXRlcyBjdXJyZW50X3N0YXRlOworCisKKworCisMCitzdGF0aWMgdm9pZCBmaXBzX25ld19zdGF0ZSAoZW51bSBtb2R1bGVfc3RhdGVzIG5ld19zdGF0ZSk7CisKKworDAorLyogQ29udmVydCBsb3dlcmNhc2UgaGV4IGRpZ2l0czsgYXNzdW1lcyB2YWxpZCBoZXggZGlnaXRzLiAqLworI2RlZmluZSBsb3h0b2lfMShwKSAgICgqKHApIDw9ICc5Jz8gKCoocCktICcwJyk6ICgqKHApLSdhJysxMCkpCisjZGVmaW5lIGxveHRvaV8yKHApICAgKChsb3h0b2lfMShwKSAqIDE2KSArIGxveHRvaV8xKChwKSsxKSkKKworLyogUmV0dXJucyB0cnVlIGlmIFAgcG9pbnRzIHRvIGEgbG93ZXJjYXNlIGhleCBkaWdpdC4gKi8KKyNkZWZpbmUgbG94ZGlnaXRfcChwKSAhIXN0cmNociAoIjAxMjM0NTY3ODkwYWJjZGVmIiwgKihwKSkKKworCisMCisvKiBDaGVjayB3aGV0aGVyIHRoZSBPUyBpcyBpbiBGSVBTIG1vZGUgYW5kIHJlY29yZCB0aGF0IGluIGEgbW9kdWxlCisgICBsb2NhbCB2YXJpYWJsZS4gIElmIEZPUkNFIGlzIHBhc3NlZCBhcyB0cnVlLCBmaXBzIG1vZGUgd2lsbCBiZQorICAgZW5hYmxlZCBhbnl3YXkuIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlIGFuZCBzaG91bGQKKyAgIGJlIGNhbGxlZCBiZWZvcmUgYW55IHRocmVhZHMgYXJlIGNyZWF0ZWQuICBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5CisgICBiZSBjYWxsZWQgb25jZS4gICovCit2b2lkCitfZ2NyeV9pbml0aWFsaXplX2ZpcHNfbW9kZSAoaW50IGZvcmNlKQoreworICBzdGF0aWMgaW50IGRvbmU7CisgIGdwZ19lcnJvcl90IGVycjsKKworICAvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBhY2NpZGVudGx5IGNhbGxlZCB0d2ljZS4gICovCisgIGlmIChkb25lKQorICAgIHsKKyAgICAgIGlmICggZmlwc19tb2RlICgpICkKKyAgICAgICAgeworICAgICAgICAgIGZpcHNfbmV3X3N0YXRlIChTVEFURV9GQVRBTEVSUk9SKTsKKyAgICAgICAgICBmaXBzX25vcmV0dXJuICgpOworICAgICAgICB9CisgICAgICAvKiBJZiBub3QgaW4gZmlwcyBtb2RlIGFuIGFzc2VydCBpcyBzdWZmaWNpZW50LiAgKi8KKyAgICAgIGdjcnlfYXNzZXJ0ICghZG9uZSk7CisgICAgfQorICBkb25lID0gMTsKKworICAvKiBJZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmaXBzbW9kZSwgZG8gc28uICAqLworICBpZiAoZm9yY2UpCisgICAgeworICAgICAgZ2NyeV9hc3NlcnQgKCFub19maXBzX21vZGVfcmVxdWlyZWQpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgLyogRm9yIHRlc3RpbmcgdGhlIHN5c3RlbSBpdCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlIHN5c3RlbQorICAgICBwcm92aWRlZCBkZXRlY3Rpb24gb2YgdGhlIEZJUFMgbW9kZSBhbmQgZm9yY2UgRklQUyBtb2RlIHVzaW5nIGEKKyAgICAgZmlsZS4gIFRoZSBmaWxlbmFtZSBpcyBoYXJkd2lyZWQgc28gdGhhdCB0aGVyZSB3b24ndCBiZSBhbnkKKyAgICAgY29uZnVzaW9uIG9uIHdoZXRoZXIgL2V0Yy9nY3J5cHQvIG9yIC91c3IvbG9jYWwvZXRjL2djcnlwdC8gaXMKKyAgICAgYWN0dWFsbHkgdXNlZC4gIFRoZSBmaWxlIGl0c2VsZiBtYXkgYmUgZW1wdHkuICAqLworICBpZiAoICFhY2Nlc3MgKEZJUFNfRk9SQ0VfRklMRSwgRl9PSykgKQorICAgIHsKKyAgICAgIGdjcnlfYXNzZXJ0ICghbm9fZmlwc19tb2RlX3JlcXVpcmVkKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorCisgIC8qIENoZWNraW5nIGJhc2VkIG9uIC9wcm9jIGZpbGUgcHJvcGVydGllcy4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBwcm9jZm5hbWVbXSA9ICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCI7CisgICAgRklMRSAqZnA7CisgICAgaW50IHNhdmVkX2Vycm5vOworCisgICAgZnAgPSBmb3BlbiAocHJvY2ZuYW1lLCAiciIpOworICAgIGlmIChmcCkKKyAgICAgIHsKKyAgICAgICAgY2hhciBsaW5lWzI1Nl07CisKKyAgICAgICAgaWYgKGZnZXRzIChsaW5lLCBzaXplb2YgbGluZSwgZnApICYmIGF0b2kgKGxpbmUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFN5c3RlbSBpcyBpbiBmaXBzIG1vZGUuICAqLworICAgICAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICAgICAgICBnY3J5X2Fzc2VydCAoIW5vX2ZpcHNfbW9kZV9yZXF1aXJlZCk7CisgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgIH0KKyAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICB9CisgICAgZWxzZSBpZiAoKHNhdmVkX2Vycm5vID0gZXJybm8pICE9IEVOT0VOVAorICAgICAgICAgICAgICYmIHNhdmVkX2Vycm5vICE9IEVBQ0NFUworICAgICAgICAgICAgICYmICFhY2Nlc3MgKCIvcHJvYy92ZXJzaW9uIiwgRl9PSykgKQorICAgICAgeworICAgICAgICAvKiBQcm9ibGVtIHJlYWRpbmcgdGhlIGZpcHMgZmlsZSBkZXNwaXRlIHRoYXQgd2UgaGF2ZSB0aGUgcHJvYworICAgICAgICAgICBmaWxlIHN5c3RlbS4gIFdlIGJldHRlciBzdG9wIHJpZ2h0IGF3YXkuICovCisgICAgICAgIGxvZ19pbmZvICgiRkFUQUw6IGVycm9yIHJlYWRpbmcgYCVzJyBpbiBsaWJnY3J5cHQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgcHJvY2ZuYW1lLCBzdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19FUlIsICJMaWJnY3J5cHQgZXJyb3I6ICIKKyAgICAgICAgICAgICAgICAicmVhZGluZyBgJXMnIGZhaWxlZDogJXMgLSBhYm9ydCIsCisgICAgICAgICAgICAgICAgcHJvY2ZuYW1lLCBzdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICAgICAgYWJvcnQgKCk7CisgICAgICB9CisgIH0KKworICAvKiBGaXBzIG5vdCBub3QgcmVxdWVzdGVkLCBzZXQgZmxhZy4gICovCisgIG5vX2ZpcHNfbW9kZV9yZXF1aXJlZCA9IDE7CisKKyBsZWF2ZToKKyAgaWYgKCFub19maXBzX21vZGVfcmVxdWlyZWQpCisgICAgeworICAgICAgLyogWWVzLCB3ZSBhcmUgaW4gRklQUyBtb2RlLiAgKi8KKyAgICAgIEZJTEUgKmZwOworCisgICAgICAvKiBJbnRpdGlhbGl6ZSB0aGUgbG9jayB0byBwcm90ZWN0IHRoZSBGU00uICAqLworICAgICAgZXJyID0gYXRoX211dGV4X2luaXQgKCZmc21fbG9jayk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgLyogSWYgdGhhdCBmYWlscyB3ZSBjYW4ndCBkbyBhbnl0aGluZyBidXQgYWJvcnQgdGhlCisgICAgICAgICAgICAgcHJvY2Vzcy4gV2UgbmVlZCB0byB1c2UgbG9nX2luZm8gc28gdGhhdCB0aGUgRlNNIHdvbid0CisgICAgICAgICAgICAgZ2V0IGludm9sdmVkLiAgKi8KKyAgICAgICAgICBsb2dfaW5mbyAoIkZBVEFMOiBmYWlsZWQgdG8gY3JlYXRlIHRoZSBGU00gbG9jayBpbiBsaWJnY3J5cHQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycikpOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfRVJSLCAiTGliZ2NyeXB0IGVycm9yOiAiCisgICAgICAgICAgICAgICAgICAiY3JlYXRpbmcgRlNNIGxvY2sgZmFpbGVkOiAlcyAtIGFib3J0IiwKKyAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgfQorCisKKyAgICAgIC8qIElmIHRoZSBGSVBTIGZvcmNlIGZpbGVzIGV4aXN0cywgaXMgcmVhZGFibGUgYW5kIGhhcyBhIG51bWJlcgorICAgICAgICAgIT0gMCBvbiBpdHMgZmlyc3QgbGluZSwgd2UgZW5hYmxlIHRoZSBlbmZvcmNlZCBmaXBzIG1vZGUuICAqLworICAgICAgZnAgPSBmb3BlbiAoRklQU19GT1JDRV9GSUxFLCAiciIpOworICAgICAgaWYgKGZwKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBsaW5lWzI1Nl07CisKKyAgICAgICAgICBpZiAoZmdldHMgKGxpbmUsIHNpemVvZiBsaW5lLCBmcCkgJiYgYXRvaSAobGluZSkpCisgICAgICAgICAgICBlbmZvcmNlZF9maXBzX21vZGUgPSAxOworICAgICAgICAgIGZjbG9zZSAoZnApOworICAgICAgICB9CisKKyAgICAgIC8qIE5vdyBnZXQgdXMgaW50byB0aGUgSU5JVCBzdGF0ZS4gICovCisgICAgICBmaXBzX25ld19zdGF0ZSAoU1RBVEVfSU5JVCk7CisKKyAgICB9CisgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2xvY2tfZnNtICh2b2lkKQoreworICBncGdfZXJyb3JfdCBlcnI7CisKKyAgZXJyID0gYXRoX211dGV4X2xvY2sgKCZmc21fbG9jayk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgbG9nX2luZm8gKCJGQVRBTDogZmFpbGVkIHRvIGFjcXVpcmUgdGhlIEZTTSBsb2NrIGluIGxpYmdyeXB0OiAlc1xuIiwKKyAgICAgICAgICAgICAgICBzdHJlcnJvciAoZXJyKSk7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX0VSUiwgIkxpYmdjcnlwdCBlcnJvcjogIgorICAgICAgICAgICAgICAiYWNxdWlyaW5nIEZTTSBsb2NrIGZhaWxlZDogJXMgLSBhYm9ydCIsCisgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICAgIGFib3J0ICgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3VubG9ja19mc20gKHZvaWQpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKworICBlcnIgPSBhdGhfbXV0ZXhfdW5sb2NrICgmZnNtX2xvY2spOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGxvZ19pbmZvICgiRkFUQUw6IGZhaWxlZCB0byByZWxlYXNlIHRoZSBGU00gbG9jayBpbiBsaWJncnlwdDogJXNcbiIsCisgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycikpOworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19FUlIsICJMaWJnY3J5cHQgZXJyb3I6ICIKKyAgICAgICAgICAgICAgInJlbGVhc2luZyBGU00gbG9jayBmYWlsZWQ6ICVzIC0gYWJvcnQiLAorICAgICAgICAgICAgICBzdHJlcnJvciAoZXJyKSk7CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisgICAgICBhYm9ydCAoKTsKKyAgICB9Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgZmlwcyBtb2RlIGlzIGVuYWJsZWQuICBUaGlzIGlzCisgICBpbmRlcGVuZGVudCBvZiB0aGUgZmlwcyByZXF1aXJlZCBmaW5pdGUgc3RhdGUgbWFjaGluZSBhbmQgb25seSB1c2VkCisgICB0byBlbmFibGUgZmlwcyBzcGVjaWZpYyBjb2RlLiAgUGxlYXNlIHVzZSB0aGUgZmlwc19tb2RlIG1hY3JvCisgICBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4gKi8KK2ludAorX2djcnlfZmlwc19tb2RlICh2b2lkKQoreworICAvKiBObyBsb2NraW5nIGlzIHJlcXVpcmVkIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGlzCisgICAgIHZhcmlhYmxlIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb25jZSB3aXRoIG5vIG90aGVyIHRocmVhZHMKKyAgICAgZXhpc3RpbmcuICAqLworICByZXR1cm4gIW5vX2ZpcHNfbW9kZV9yZXF1aXJlZDsKK30KKworCisvKiBSZXR1cm4gYSBmbGFnIHRlbGxpbmcgd2hldGhlciB3ZSBhcmUgaW4gdGhlIGVuZm9yY2VkIGZpcHMgbW9kZS4gICovCitpbnQKK19nY3J5X2VuZm9yY2VkX2ZpcHNfbW9kZSAodm9pZCkKK3sKKyAgaWYgKCFfZ2NyeV9maXBzX21vZGUgKCkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBlbmZvcmNlZF9maXBzX21vZGU7Cit9CisKKy8qIFNldCBhIGZsYWcgdGVsbGluZyB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgZW5mb3JjZWQgZmlwcyBtb2RlLiAgKi8KK3ZvaWQKK19nY3J5X3NldF9lbmZvcmNlZF9maXBzX21vZGUgKHZvaWQpCit7CisgIGVuZm9yY2VkX2ZpcHNfbW9kZSA9IDE7Cit9CisKKy8qIElmIHdlIGRvIG5vdCB3YW50IHRvIGVuZm9yY2UgdGhlIGZpcHMgbW9kZSwgd2UgY2FuIHNldCBhIGZsYWcgc28KKyAgIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG1heSBjaGVjayB3aGV0aGVyIGl0IGlzIHN0aWxsIGluIGZpcHMgbW9kZS4KKyAgIFRFWFQgd2lsbCBiZSBwcmludGVkIGFzIHBhcnQgb2YgYSBzeXNsb2cgbWVzc2FnZS4gIFRoaXMgZnVuY3Rpb24KKyAgIG1heSBvbmx5IGJlIGJlIGNhbGxlZCBpZiBpbiBmaXBzIG1vZGUuICovCit2b2lkCitfZ2NyeV9pbmFjdGl2YXRlX2ZpcHNfbW9kZSAoY29uc3QgY2hhciAqdGV4dCkKK3sKKyAgZ2NyeV9hc3NlcnQgKF9nY3J5X2ZpcHNfbW9kZSAoKSk7CisKKyAgaWYgKF9nY3J5X2VuZm9yY2VkX2ZpcHNfbW9kZSAoKSApCisgICAgeworICAgICAgLyogR2V0IHVzIGludG8gdGhlIGVycm9yIHN0YXRlLiAqLworICAgICAgZmlwc19zaWduYWxfZXJyb3IgKHRleHQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsb2NrX2ZzbSAoKTsKKyAgaWYgKCFpbmFjdGl2ZV9maXBzX21vZGUpCisgICAgeworICAgICAgaW5hY3RpdmVfZmlwc19tb2RlID0gMTsKKyAgICAgIHVubG9ja19mc20gKCk7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX1dBUk5JTkcsICJMaWJnY3J5cHQgd2FybmluZzogIgorICAgICAgICAgICAgICAiJXMgLSBGSVBTIG1vZGUgaW5hY3RpdmF0ZWQiLCB0ZXh0KTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICB9CisgIGVsc2UKKyAgICB1bmxvY2tfZnNtICgpOworfQorCisKKy8qIFJldHVybiB0aGUgRklQUyBtb2RlIGluYWN0aXZlIGZsYWcuICBJZiBpdCBpcyB0cnVlIHRoZSBGSVBTIG1vZGUgaXMKKyAgIG5vdCBhbnltb3JlIGFjdGl2ZS4gICovCitpbnQKK19nY3J5X2lzX2ZpcHNfbW9kZV9pbmFjdGl2ZSAodm9pZCkKK3sKKyAgaW50IGZsYWc7CisKKyAgaWYgKCFfZ2NyeV9maXBzX21vZGUgKCkpCisgICAgcmV0dXJuIDA7CisgIGxvY2tfZnNtICgpOworICBmbGFnID0gaW5hY3RpdmVfZmlwc19tb2RlOworICB1bmxvY2tfZnNtICgpOworICByZXR1cm4gZmxhZzsKK30KKworCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0YXRlMnN0ciAoZW51bSBtb2R1bGVfc3RhdGVzIHN0YXRlKQoreworICBjb25zdCBjaGFyICpzOworCisgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgIGNhc2UgU1RBVEVfUE9XRVJPTjogICAgIHMgPSAiUG93ZXItT24iOyBicmVhazsKKyAgICBjYXNlIFNUQVRFX0lOSVQ6ICAgICAgICBzID0gIkluaXQiOyBicmVhazsKKyAgICBjYXNlIFNUQVRFX1NFTEZURVNUOiAgICBzID0gIlNlbGYtVGVzdCI7IGJyZWFrOworICAgIGNhc2UgU1RBVEVfT1BFUkFUSU9OQUw6IHMgPSAiT3BlcmF0aW9uYWwiOyBicmVhazsKKyAgICBjYXNlIFNUQVRFX0VSUk9SOiAgICAgICBzID0gIkVycm9yIjsgYnJlYWs7CisgICAgY2FzZSBTVEFURV9GQVRBTEVSUk9SOiAgcyA9ICJGYXRhbC1FcnJvciI7IGJyZWFrOworICAgIGNhc2UgU1RBVEVfU0hVVERPV046ICAgIHMgPSAiU2h1dGRvd24iOyBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICBzID0gIj8iOyBicmVhazsKKyAgICB9CisgIHJldHVybiBzOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBsaWJyYXJ5IGlzIGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZS4gICovCitpbnQKK19nY3J5X2ZpcHNfaXNfb3BlcmF0aW9uYWwgKHZvaWQpCit7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKCFmaXBzX21vZGUgKCkpCisgICAgcmVzdWx0ID0gMTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGxvY2tfZnNtICgpOworICAgICAgaWYgKGN1cnJlbnRfc3RhdGUgPT0gU1RBVEVfSU5JVCkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIHdlIGFyZSBzdGlsbCBpbiB0aGUgSU5JVCBzdGF0ZSwgd2UgbmVlZCB0byBydW4gdGhlCisgICAgICAgICAgICAgc2VsZnRlc3RzIHNvIHRoYXQgdGhlIEZTTSBjYW4gZXZlbnR1YWxseSBnZXQgaW50bworICAgICAgICAgICAgIG9wZXJhdGlvbmFsIHN0YXRlLiAgR2l2ZW4gdGhhdCB3ZSB3b3VsZCBuZWVkIGEgMi1waGFzZQorICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIGxpYmdjcnlwdCwgYnV0IHRoYXQgaGFzIHRyYWRpdGlvbmFsbHkKKyAgICAgICAgICAgICBub3QgYmVlbiBlbmZvcmNlZCwgd2UgdXNlIHRoaXMgb24gZGVtYW5kIHNlbGYtdGVzdAorICAgICAgICAgICAgIGNoZWNraW5nLiAgTm90ZSB0aGF0IFByb3BlciBhcHBsaWNhdGlvbnMgd291bGQgZG8gdGhlCisgICAgICAgICAgICAgYXBwbGljYXRpb24gc3BlY2lmaWMgbGliZ2NyeXB0IGluaXRpYWxpemF0aW9uIGJldHdlZW4gYQorICAgICAgICAgICAgIGdjcnlfY2hlY2tfdmVyc2lvbigpIGFuZCBnY3J5X2NvbnRyb2wKKyAgICAgICAgICAgICAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCkgd2hlcmUgdGhlIGxhdHRlciB3aWxsCisgICAgICAgICAgICAgcnVuIHRoZSBzZWxmdGVzdHMuICBUaGUgZHJhd2JhY2sgb2YgdGhlc2Ugb24tZGVtYW5kCisgICAgICAgICAgICAgc2VsZi10ZXN0cyBhcmUgYSBzbWFsbCBjaGFuY2UgdGhhdCBzZWxmLXRlc3RzIGFyZQorICAgICAgICAgICAgIHBlcmZvcm1lZCBieSBzZXZlcmVhbCB0aHJlYWRzOyB0aGF0IGlzIG5vIHByb2JsZW0gYmVjYXVzZQorICAgICAgICAgICAgIG91ciBGU00gbWFrZSBzdXJlIHRoYXQgd2Ugd29uJ3Qgb3ZlcnNlZSBhbnkgZXJyb3IuICovCisgICAgICAgICAgdW5sb2NrX2ZzbSAoKTsKKyAgICAgICAgICBfZ2NyeV9maXBzX3J1bl9zZWxmdGVzdHMgKDApOworICAgICAgICAgIGxvY2tfZnNtICgpOworICAgICAgICB9CisKKyAgICAgIHJlc3VsdCA9IChjdXJyZW50X3N0YXRlID09IFNUQVRFX09QRVJBVElPTkFMKTsKKyAgICAgIHVubG9ja19mc20gKCk7CisgICAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRoaXMgaXMgdGVzdCBvbiB3aGV0aGVyIHRoZSBsaWJyYXJ5IGlzIGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZS4gIEluCisgICBjb250cmFzdCB0byBfZ2NyeV9maXBzX2lzX29wZXJhdGlvbmFsIHRoaXMgZnVuY3Rpb24gd29uJ3QgZG8gYQorICAgc3RhdGUgdHJhbnNpdGlvbiBvbiB0aGUgZmx5LiAgKi8KK2ludAorX2djcnlfZmlwc190ZXN0X29wZXJhdGlvbmFsICh2b2lkKQoreworICBpbnQgcmVzdWx0OworCisgIGlmICghZmlwc19tb2RlICgpKQorICAgIHJlc3VsdCA9IDE7CisgIGVsc2UKKyAgICB7CisgICAgICBsb2NrX2ZzbSAoKTsKKyAgICAgIHJlc3VsdCA9IChjdXJyZW50X3N0YXRlID09IFNUQVRFX09QRVJBVElPTkFMKTsKKyAgICAgIHVubG9ja19mc20gKCk7CisgICAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRoaXMgaXMgYSB0ZXN0IG9uIHdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgaW4gdGhlIGVycm9yIG9yCisgICBvcGVyYXRpb25hbCBzdGF0ZS4gKi8KK2ludAorX2djcnlfZmlwc190ZXN0X2Vycm9yX29yX29wZXJhdGlvbmFsICh2b2lkKQoreworICBpbnQgcmVzdWx0OworCisgIGlmICghZmlwc19tb2RlICgpKQorICAgIHJlc3VsdCA9IDE7CisgIGVsc2UKKyAgICB7CisgICAgICBsb2NrX2ZzbSAoKTsKKyAgICAgIHJlc3VsdCA9IChjdXJyZW50X3N0YXRlID09IFNUQVRFX09QRVJBVElPTkFMCisgICAgICAgICAgICAgICAgfHwgY3VycmVudF9zdGF0ZSA9PSBTVEFURV9FUlJPUik7CisgICAgICB1bmxvY2tfZnNtICgpOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZAorcmVwb3J0ZXIgKGNvbnN0IGNoYXIgKmRvbWFpbiwgaW50IGFsZ28sIGNvbnN0IGNoYXIgKndoYXQsIGNvbnN0IGNoYXIgKmVycnR4dCkKK3sKKyAgaWYgKCFlcnJ0eHQgJiYgIV9nY3J5X2xvZ192ZXJib3NpdHkgKDIpKQorICAgIHJldHVybjsKKworICBsb2dfaW5mbyAoImxpYmdjcnlwdCBzZWxmdGVzdDogJXMgJXMlcyAoJWQpOiAlcyVzJXMlc1xuIiwKKyAgICAgICAgICAgICFzdHJjbXAgKGRvbWFpbiwgImhtYWMiKT8gImRpZ2VzdCI6ZG9tYWluLAorICAgICAgICAgICAgIXN0cmNtcCAoZG9tYWluLCAiaG1hYyIpPyAiSE1BQy0iOiIiLAorICAgICAgICAgICAgIXN0cmNtcCAoZG9tYWluLCAiY2lwaGVyIik/IF9nY3J5X2NpcGhlcl9hbGdvX25hbWUgKGFsZ28pIDoKKyAgICAgICAgICAgICFzdHJjbXAgKGRvbWFpbiwgImRpZ2VzdCIpPyBfZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pIDoKKyAgICAgICAgICAgICFzdHJjbXAgKGRvbWFpbiwgImhtYWMiKT8gICBfZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pIDoKKyAgICAgICAgICAgICFzdHJjbXAgKGRvbWFpbiwgInB1YmtleSIpPyBfZ2NyeV9wa19hbGdvX25hbWUgKGFsZ28pIDogIiIsCisgICAgICAgICAgICBhbGdvLCBlcnJ0eHQ/IGVycnR4dDoiT2theSIsCisgICAgICAgICAgICB3aGF0PyIgKCI6IiIsIHdoYXQ/IHdoYXQ6IiIsIHdoYXQ/IikiOiIiKTsKK30KKworLyogUnVuIHNlbGYtdGVzdHMgZm9yIGFsbCByZXF1aXJlZCBjaXBoZXIgYWxnb3JpdGhtcy4gIFJldHVybiAwIG9uCisgICBzdWNjZXNzLiAqLworc3RhdGljIGludAorcnVuX2NpcGhlcl9zZWxmdGVzdHMgKGludCBleHRlbmRlZCkKK3sKKyAgc3RhdGljIGludCBhbGdvc1tdID0KKyAgICB7CisgICAgICBHQ1JZX0NJUEhFUl8zREVTLAorICAgICAgR0NSWV9DSVBIRVJfQUVTMTI4LAorICAgICAgR0NSWV9DSVBIRVJfQUVTMTkyLAorICAgICAgR0NSWV9DSVBIRVJfQUVTMjU2LAorICAgICAgMAorICAgIH07CisgIGludCBpZHg7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IGFueWVyciA9IDA7CisKKyAgZm9yIChpZHg9MDsgYWxnb3NbaWR4XTsgaWR4KyspCisgICAgeworICAgICAgZXJyID0gX2djcnlfY2lwaGVyX3NlbGZ0ZXN0IChhbGdvc1tpZHhdLCBleHRlbmRlZCwgcmVwb3J0ZXIpOworICAgICAgcmVwb3J0ZXIgKCJjaXBoZXIiLCBhbGdvc1tpZHhdLCBOVUxMLAorICAgICAgICAgICAgICAgIGVycj8gZ3BnX3N0cmVycm9yIChlcnIpOk5VTEwpOworICAgICAgaWYgKGVycikKKyAgICAgICAgYW55ZXJyID0gMTsKKyAgICB9CisgIHJldHVybiBhbnllcnI7Cit9CisKKworLyogUnVuIHNlbGYtdGVzdHMgZm9yIGFsbCByZXF1aXJlZCBoYXNoIGFsZ29yaXRobXMuICBSZXR1cm4gMCBvbgorICAgc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3J1bl9kaWdlc3Rfc2VsZnRlc3RzIChpbnQgZXh0ZW5kZWQpCit7CisgIHN0YXRpYyBpbnQgYWxnb3NbXSA9CisgICAgeworICAgICAgR0NSWV9NRF9TSEExLAorICAgICAgR0NSWV9NRF9TSEEyMjQsCisgICAgICBHQ1JZX01EX1NIQTI1NiwKKyAgICAgIEdDUllfTURfU0hBMzg0LAorICAgICAgR0NSWV9NRF9TSEE1MTIsCisgICAgICAwCisgICAgfTsKKyAgaW50IGlkeDsKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBpbnQgYW55ZXJyID0gMDsKKworICBmb3IgKGlkeD0wOyBhbGdvc1tpZHhdOyBpZHgrKykKKyAgICB7CisgICAgICBlcnIgPSBfZ2NyeV9tZF9zZWxmdGVzdCAoYWxnb3NbaWR4XSwgZXh0ZW5kZWQsIHJlcG9ydGVyKTsKKyAgICAgIHJlcG9ydGVyICgiZGlnZXN0IiwgYWxnb3NbaWR4XSwgTlVMTCwKKyAgICAgICAgICAgICAgICBlcnI/IGdwZ19zdHJlcnJvciAoZXJyKTpOVUxMKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGFueWVyciA9IDE7CisgICAgfQorICByZXR1cm4gYW55ZXJyOworfQorCisKKy8qIFJ1biBzZWxmLXRlc3RzIGZvciBhbGwgSE1BQyBhbGdvcml0aG1zLiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3J1bl9obWFjX3NlbGZ0ZXN0cyAoaW50IGV4dGVuZGVkKQoreworICBzdGF0aWMgaW50IGFsZ29zW10gPQorICAgIHsKKyAgICAgIEdDUllfTURfU0hBMSwKKyAgICAgIEdDUllfTURfU0hBMjI0LAorICAgICAgR0NSWV9NRF9TSEEyNTYsCisgICAgICBHQ1JZX01EX1NIQTM4NCwKKyAgICAgIEdDUllfTURfU0hBNTEyLAorICAgICAgMAorICAgIH07CisgIGludCBpZHg7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IGFueWVyciA9IDA7CisKKyAgZm9yIChpZHg9MDsgYWxnb3NbaWR4XTsgaWR4KyspCisgICAgeworICAgICAgZXJyID0gX2djcnlfaG1hY19zZWxmdGVzdCAoYWxnb3NbaWR4XSwgZXh0ZW5kZWQsIHJlcG9ydGVyKTsKKyAgICAgIHJlcG9ydGVyICgiaG1hYyIsIGFsZ29zW2lkeF0sIE5VTEwsCisgICAgICAgICAgICAgICAgZXJyPyBncGdfc3RyZXJyb3IgKGVycik6TlVMTCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBhbnllcnIgPSAxOworICAgIH0KKyAgcmV0dXJuIGFueWVycjsKK30KKworCisvKiBSdW4gc2VsZi10ZXN0cyBmb3IgYWxsIHJlcXVpcmVkIHB1YmxpYyBrZXkgYWxnb3JpdGhtcy4gIFJldHVybiAwIG9uCisgICBzdWNjZXNzLiAqLworc3RhdGljIGludAorcnVuX3B1YmtleV9zZWxmdGVzdHMgKGludCBleHRlbmRlZCkKK3sKKyAgc3RhdGljIGludCBhbGdvc1tdID0KKyAgICB7CisgICAgICBHQ1JZX1BLX1JTQSwKKyAgICAgIEdDUllfUEtfRFNBLAorICAgICAgLyogR0NSWV9QS19FQ0MgaXMgbm90IGVuYWJsZWQgaW4gZmlwcyBtb2RlLiAgKi8KKyAgICAgIDAKKyAgICB9OworICBpbnQgaWR4OworICBncGdfZXJyb3JfdCBlcnI7CisgIGludCBhbnllcnIgPSAwOworCisgIGZvciAoaWR4PTA7IGFsZ29zW2lkeF07IGlkeCsrKQorICAgIHsKKyAgICAgIGVyciA9IF9nY3J5X3BrX3NlbGZ0ZXN0IChhbGdvc1tpZHhdLCBleHRlbmRlZCwgcmVwb3J0ZXIpOworICAgICAgcmVwb3J0ZXIgKCJwdWJrZXkiLCBhbGdvc1tpZHhdLCBOVUxMLAorICAgICAgICAgICAgICAgIGVycj8gZ3BnX3N0cmVycm9yIChlcnIpOk5VTEwpOworICAgICAgaWYgKGVycikKKyAgICAgICAgYW55ZXJyID0gMTsKKyAgICB9CisgIHJldHVybiBhbnllcnI7Cit9CisKKworLyogUnVuIHNlbGYtdGVzdHMgZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gIFJldHVybnMgMCBvbgorICAgc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3J1bl9yYW5kb21fc2VsZnRlc3RzICh2b2lkKQoreworICBncGdfZXJyb3JfdCBlcnI7CisKKyAgZXJyID0gX2djcnlfcmFuZG9tX3NlbGZ0ZXN0IChyZXBvcnRlcik7CisgIHJlcG9ydGVyICgicmFuZG9tIiwgMCwgTlVMTCwgZXJyPyBncGdfc3RyZXJyb3IgKGVycik6TlVMTCk7CisKKyAgcmV0dXJuICEhZXJyOworfQorCisvKiBSdW4gYW4gaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBiaW5hcnkuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gICovCitzdGF0aWMgaW50CitjaGVja19iaW5hcnlfaW50ZWdyaXR5ICh2b2lkKQoreworI2lmZGVmIEVOQUJMRV9ITUFDX0JJTkFSWV9DSEVDSworICBncGdfZXJyb3JfdCBlcnI7CisgIERsX2luZm8gaW5mbzsKKyAgdW5zaWduZWQgY2hhciBkaWdlc3RbMzJdOworICBpbnQgZGxlbjsKKyAgY2hhciAqZm5hbWUgPSBOVUxMOworICBjb25zdCBjaGFyIGtleVtdID0gIldoYXQgYW0gSSwgYSBkb2N0b3Igb3IgYSBtb29uc2h1dHRsZSBjb25kdWN0b3I/IjsKKworICBpZiAoIWRsYWRkciAoImdjcnlfY2hlY2tfdmVyc2lvbiIsICZpbmZvKSkKKyAgICBlcnIgPSBncGdfZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGRsZW4gPSBfZ2NyeV9obWFjMjU2X2ZpbGUgKGRpZ2VzdCwgc2l6ZW9mIGRpZ2VzdCwgaW5mby5kbGlfZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHN0cmxlbiAoa2V5KSk7CisgICAgICBpZiAoZGxlbiA8IDApCisgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgZWxzZSBpZiAoZGxlbiAhPSAzMikKKyAgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVEVSTkFMKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGZuYW1lID0gZ2NyeV9tYWxsb2MgKHN0cmxlbiAoaW5mby5kbGlfZm5hbWUpICsgMSArIDUgKyAxICk7CisgICAgICAgICAgaWYgKCFmbmFtZSkKKyAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRklMRSAqZnA7CisgICAgICAgICAgICAgIGNoYXIgKnA7CisKKyAgICAgICAgICAgICAgLyogUHJlZml4IHRoZSBiYXNlbmFtZSB3aXRoIGEgZG90LiAgKi8KKyAgICAgICAgICAgICAgc3RyY3B5IChmbmFtZSwgaW5mby5kbGlfZm5hbWUpOworICAgICAgICAgICAgICBwID0gc3RycmNociAoZm5hbWUsICcvJyk7CisgICAgICAgICAgICAgIGlmIChwKQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHAgPSBmbmFtZTsKKyAgICAgICAgICAgICAgbWVtbW92ZSAocCsxLCBwLCBzdHJsZW4gKHApKzEpOworICAgICAgICAgICAgICAqcCA9ICcuJzsKKyAgICAgICAgICAgICAgc3RyY2F0IChmbmFtZSwgIi5obWFjIik7CisKKyAgICAgICAgICAgICAgLyogT3BlbiB0aGUgZmlsZS4gICovCisgICAgICAgICAgICAgIGZwID0gZm9wZW4gKGZuYW1lLCAiciIpOworICAgICAgICAgICAgICBpZiAoIWZwKQorICAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogQSBidWZmZXIgb2YgNjQgYnl0ZXMgcGx1cyBvbmUgZm9yIGEgTEYgYW5kIG9uZSB0bworICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0IGdhcmJhZ2UuICAqLworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjQrMSsxXTsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnM7CisgICAgICAgICAgICAgICAgICBpbnQgbjsKKworICAgICAgICAgICAgICAgICAgLyogVGhlIEhNQUMgZmlsZXMgY29uc2lzdHMgb2YgbG93ZXJjYXNlIGhleCBkaWdpdHMKKyAgICAgICAgICAgICAgICAgICAgIG9ubHkgd2l0aCBhbiBvcHRpb25hbCB0cmFpbGluZyBsaW5lZmVlZC4gIEZhaWwgaWYKKyAgICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFueSBnYXJiYWdlLiAgKi8KKyAgICAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9TRUxGVEVTVF9GQUlMRUQpOworICAgICAgICAgICAgICAgICAgbiA9IGZyZWFkIChidWZmZXIsIDEsIHNpemVvZiBidWZmZXIsIGZwKTsKKyAgICAgICAgICAgICAgICAgIGlmIChuID09IDY0IHx8IChuID09IDY1ICYmIGJ1ZmZlcls2NF0gPT0gJ1xuJykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbNjRdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG49MCwgcz0gYnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA8IDMyICYmIGxveGRpZ2l0X3AgKHMpICYmIGxveGRpZ2l0X3AgKHMrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBuKyssIHMgKz0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltuXSA9IGxveHRvaV8yIChzKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIG4gPT0gMzIgJiYgIW1lbWNtcCAoZGlnZXN0LCBidWZmZXIsIDMyKSApCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBmY2xvc2UgKGZwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJlcG9ydGVyICgiYmluYXJ5IiwgMCwgZm5hbWUsIGVycj8gZ3BnX3N0cmVycm9yIChlcnIpOk5VTEwpOworI2lmZGVmIEhBVkVfU1lTTE9HCisgIGlmIChlcnIpCisgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfRVJSLCAiTGliZ2NyeXB0IGVycm9yOiAiCisgICAgICAgICAgICAiaW50ZWdyaXR5IGNoZWNrIHVzaW5nIGAlcycgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBmbmFtZT8gZm5hbWU6Ils/XSIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisgIHhmcmVlIChmbmFtZSk7CisgIHJldHVybiAhIWVycjsKKyNlbHNlCisgIHJldHVybiAwOworI2VuZGlmCit9CisKKworLyogUnVuIHRoZSBzZWxmLXRlc3RzLiAgSWYgRVhURU5ERUQgaXMgdHJ1ZSwgZXh0ZW5kZWQgdmVyc2lvbnMgb2YgdGhlCisgICBzZWxmdGVzdCBhcmUgcnVuLCB0aGF0IGlzIG1vcmUgdGVzdHMgdGhhbiByZXF1aXJlZCBieSBGSVBTLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9maXBzX3J1bl9zZWxmdGVzdHMgKGludCBleHRlbmRlZCkKK3sKKyAgZW51bSBtb2R1bGVfc3RhdGVzIHJlc3VsdCA9IFNUQVRFX0VSUk9SOworICBnY3J5X2Vycl9jb2RlX3QgZWMgPSBHUEdfRVJSX1NFTEZURVNUX0ZBSUxFRDsKKworICBpZiAoZmlwc19tb2RlICgpKQorICAgIGZpcHNfbmV3X3N0YXRlIChTVEFURV9TRUxGVEVTVCk7CisKKyAgaWYgKHJ1bl9jaXBoZXJfc2VsZnRlc3RzIChleHRlbmRlZCkpCisgICAgZ290byBsZWF2ZTsKKworICBpZiAocnVuX2RpZ2VzdF9zZWxmdGVzdHMgKGV4dGVuZGVkKSkKKyAgICBnb3RvIGxlYXZlOworCisgIGlmIChydW5faG1hY19zZWxmdGVzdHMgKGV4dGVuZGVkKSkKKyAgICBnb3RvIGxlYXZlOworCisgIC8qIFJ1biByYW5kb20gdGVzdHMgYmVmb3JlIHRoZSBwdWJrZXkgdGVzdHMgYmVjYXVzZSB0aGUgbGF0dGVyCisgICAgIHJlcXVpcmUgcmFuZG9tLiAgKi8KKyAgaWYgKHJ1bl9yYW5kb21fc2VsZnRlc3RzICgpKQorICAgIGdvdG8gbGVhdmU7CisKKyAgaWYgKHJ1bl9wdWJrZXlfc2VsZnRlc3RzIChleHRlbmRlZCkpCisgICAgZ290byBsZWF2ZTsKKworICAvKiBOb3cgY2hlY2sgdGhlIGludGVncml0eSBvZiB0aGUgYmluYXJ5LiAgV2UgZG8gdGhpcyB0aGlzIGFmdGVyCisgICAgIGhhdmluZyBjaGVja2VkIHRoZSBITUFDIGNvZGUuICAqLworICBpZiAoY2hlY2tfYmluYXJ5X2ludGVncml0eSAoKSkKKyAgICBnb3RvIGxlYXZlOworCisgIC8qIEFsbCBzZWxmdGVzdHMgcGFzc2VkLiAgKi8KKyAgcmVzdWx0ID0gU1RBVEVfT1BFUkFUSU9OQUw7CisgIGVjID0gMDsKKworIGxlYXZlOgorICBpZiAoZmlwc19tb2RlICgpKQorICAgIGZpcHNfbmV3X3N0YXRlIChyZXN1bHQpOworCisgIHJldHVybiBlYzsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgRlNNIGFib3V0IGVycm9ycyBpbiB0aGUgbGlicmFyeS4KKyAgIFRoZSBGU00gd2lsbCBiZSBwdXQgaW50byBhbiBlcnJvciBzdGF0ZS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdAorICAgYmUgY2FsbGVkIGRpcmVjdGx5IGJ1dCBieSBvbmUgb2YgdGhlIG1hY3JvcworCisgICAgIGZpcHNfc2lnbmFsX2Vycm9yIChkZXNjcmlwdGlvbikKKyAgICAgZmlwc19zaWduYWxfZmF0YWxfZXJyb3IgKGRlc2NyaXB0aW9uKQorCisgICB3aGVyZSBERVNDUklQVElPTiBpcyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBlcnJvci4gKi8KK3ZvaWQKK19nY3J5X2ZpcHNfc2lnbmFsX2Vycm9yIChjb25zdCBjaGFyICpzcmNmaWxlLCBpbnQgc3JjbGluZSwgY29uc3QgY2hhciAqc3JjZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfZmF0YWwsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQoreworICBpZiAoIWZpcHNfbW9kZSAoKSkKKyAgICByZXR1cm47ICAvKiBOb3QgcmVxdWlyZWQuICAqLworCisgIC8qIFNldCBuZXcgc3RhdGUgYmVmb3JlIHByaW50aW5nIGFuIGVycm9yLiAgKi8KKyAgZmlwc19uZXdfc3RhdGUgKGlzX2ZhdGFsPyBTVEFURV9GQVRBTEVSUk9SIDogU1RBVEVfRVJST1IpOworCisgIC8qIFByaW50IGVycm9yLiAgKi8KKyAgbG9nX2luZm8gKCIlc2Vycm9yIGluIGxpYmdjcnlwdCwgZmlsZSAlcywgbGluZSAlZCVzJXM6ICVzXG4iLAorICAgICAgICAgICAgaXNfZmF0YWw/ICJmYXRhbCAiOiIiLAorICAgICAgICAgICAgc3JjZmlsZSwgc3JjbGluZSwKKyAgICAgICAgICAgIHNyY2Z1bmM/ICIsIGZ1bmN0aW9uICI6IiIsIHNyY2Z1bmM/IHNyY2Z1bmM6IiIsCisgICAgICAgICAgICBkZXNjcmlwdGlvbj8gZGVzY3JpcHRpb24gOiAibm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlIik7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgc3lzbG9nIChMT0dfVVNFUnxMT0dfRVJSLCAiTGliZ2NyeXB0IGVycm9yOiAiCisgICAgICAgICAgIiVzZXJyb3IgaW4gZmlsZSAlcywgbGluZSAlZCVzJXM6ICVzIiwKKyAgICAgICAgICBpc19mYXRhbD8gImZhdGFsICI6IiIsCisgICAgICAgICAgc3JjZmlsZSwgc3JjbGluZSwKKyAgICAgICAgICBzcmNmdW5jPyAiLCBmdW5jdGlvbiAiOiIiLCBzcmNmdW5jPyBzcmNmdW5jOiIiLAorICAgICAgICAgIGRlc2NyaXB0aW9uPyBkZXNjcmlwdGlvbiA6ICJubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUiKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KK30KKworCisvKiBQZXJmb3JtIGEgc3RhdGUgdHJhbnNpdGlvbiB0byBORVdfU1RBVEUuICBJZiB0aGlzIGlzIGFuIGludmFsaWQKKyAgIHRyYW5zaXRpb24sIHRoZSBtb2R1bGUgd2lsbCBnbyBpbnRvIGEgZmF0YWwgZXJyb3Igc3RhdGUuICovCitzdGF0aWMgdm9pZAorZmlwc19uZXdfc3RhdGUgKGVudW0gbW9kdWxlX3N0YXRlcyBuZXdfc3RhdGUpCit7CisgIGludCBvayA9IDA7CisgIGVudW0gbW9kdWxlX3N0YXRlcyBsYXN0X3N0YXRlOworCisgIGxvY2tfZnNtICgpOworCisgIGxhc3Rfc3RhdGUgPSBjdXJyZW50X3N0YXRlOworICBzd2l0Y2ggKGN1cnJlbnRfc3RhdGUpCisgICAgeworICAgIGNhc2UgU1RBVEVfUE9XRVJPTjoKKyAgICAgIGlmIChuZXdfc3RhdGUgPT0gU1RBVEVfSU5JVAorICAgICAgICAgIHx8IG5ld19zdGF0ZSA9PSBTVEFURV9FUlJPUgorICAgICAgICAgIHx8IG5ld19zdGF0ZSA9PSBTVEFURV9GQVRBTEVSUk9SKQorICAgICAgICBvayA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1RBVEVfSU5JVDoKKyAgICAgIGlmIChuZXdfc3RhdGUgPT0gU1RBVEVfU0VMRlRFU1QKKyAgICAgICAgICB8fCBuZXdfc3RhdGUgPT0gU1RBVEVfRVJST1IKKyAgICAgICAgICB8fCBuZXdfc3RhdGUgPT0gU1RBVEVfRkFUQUxFUlJPUikKKyAgICAgICAgb2sgPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNUQVRFX1NFTEZURVNUOgorICAgICAgaWYgKG5ld19zdGF0ZSA9PSBTVEFURV9PUEVSQVRJT05BTAorICAgICAgICAgIHx8IG5ld19zdGF0ZSA9PSBTVEFURV9FUlJPUgorICAgICAgICAgIHx8IG5ld19zdGF0ZSA9PSBTVEFURV9GQVRBTEVSUk9SKQorICAgICAgICBvayA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1RBVEVfT1BFUkFUSU9OQUw6CisgICAgICBpZiAobmV3X3N0YXRlID09IFNUQVRFX1NIVVRET1dOCisgICAgICAgICAgfHwgbmV3X3N0YXRlID09IFNUQVRFX1NFTEZURVNUCisgICAgICAgICAgfHwgbmV3X3N0YXRlID09IFNUQVRFX0VSUk9SCisgICAgICAgICAgfHwgbmV3X3N0YXRlID09IFNUQVRFX0ZBVEFMRVJST1IpCisgICAgICAgIG9rID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVEFURV9FUlJPUjoKKyAgICAgIGlmIChuZXdfc3RhdGUgPT0gU1RBVEVfU0hVVERPV04KKyAgICAgICAgICB8fCBuZXdfc3RhdGUgPT0gU1RBVEVfRVJST1IKKyAgICAgICAgICB8fCBuZXdfc3RhdGUgPT0gU1RBVEVfRkFUQUxFUlJPUgorICAgICAgICAgIHx8IG5ld19zdGF0ZSA9PSBTVEFURV9TRUxGVEVTVCkKKyAgICAgICAgb2sgPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNUQVRFX0ZBVEFMRVJST1I6CisgICAgICBpZiAobmV3X3N0YXRlID09IFNUQVRFX1NIVVRET1dOICkKKyAgICAgICAgb2sgPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNUQVRFX1NIVVRET1dOOgorICAgICAgLyogV2Ugd29uJ3Qgc2VlIGFueSB0cmFuc2l0aW9uICpmcm9tKiBTaHV0ZG93biBiZWNhdXNlIHRoZSBvbmx5CisgICAgICAgICBhbGxvd2VkIG5ldyBzdGF0ZSBpcyBQb3dlci1PZmYgYW5kIHRoYXQgb25lIGNhbid0IGJlCisgICAgICAgICByZXByZXNlbnRlZC4gICovCisgICAgICBicmVhazsKKworICAgIH0KKworICBpZiAob2spCisgICAgeworICAgICAgY3VycmVudF9zdGF0ZSA9IG5ld19zdGF0ZTsKKyAgICB9CisKKyAgdW5sb2NrX2ZzbSAoKTsKKworICBpZiAoIW9rIHx8IF9nY3J5X2xvZ192ZXJib3NpdHkgKDIpKQorICAgIGxvZ19pbmZvICgibGliZ2NyeXB0IHN0YXRlIHRyYW5zaXRpb24gJXMgPT4gJXMgJXNcbiIsCisgICAgICAgICAgICAgIHN0YXRlMnN0ciAobGFzdF9zdGF0ZSksIHN0YXRlMnN0ciAobmV3X3N0YXRlKSwKKyAgICAgICAgICAgICAgb2s/ICJncmFudGVkIjoiZGVuaWVkIik7CisKKyAgaWYgKCFvaykKKyAgICB7CisgICAgICAvKiBJbnZhbGlkIHN0YXRlIHRyYW5zaXRpb24uICBIYWx0aW5nIGxpYnJhcnkuICovCisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgIHN5c2xvZyAoTE9HX1VTRVJ8TE9HX0VSUiwKKyAgICAgICAgICAgICAgIkxpYmdjcnlwdCBlcnJvcjogaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9uICVzID0+ICVzIiwKKyAgICAgICAgICAgICAgc3RhdGUyc3RyIChsYXN0X3N0YXRlKSwgc3RhdGUyc3RyIChuZXdfc3RhdGUpKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICAgIGZpcHNfbm9yZXR1cm4gKCk7CisgICAgfQorICBlbHNlIGlmIChuZXdfc3RhdGUgPT0gU1RBVEVfRVJST1IgfHwgbmV3X3N0YXRlID09IFNUQVRFX0ZBVEFMRVJST1IpCisgICAgeworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICBzeXNsb2cgKExPR19VU0VSfExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAiTGliZ2NyeXB0IG5vdGljZTogc3RhdGUgdHJhbnNpdGlvbiAlcyA9PiAlcyIsCisgICAgICAgICAgICAgIHN0YXRlMnN0ciAobGFzdF9zdGF0ZSksIHN0YXRlMnN0ciAobmV3X3N0YXRlKSk7CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisgICAgfQorfQorCisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV4ZWN1dGlvbiBzaGFsbAorICAgbm90IGNvbnRpbnVlLiAqLwordm9pZAorX2djcnlfZmlwc19ub3JldHVybiAodm9pZCkKK3sKKyNpZmRlZiBIQVZFX1NZU0xPRworICBzeXNsb2cgKExPR19VU0VSfExPR19FUlIsICJMaWJnY3J5cHQgdGVybWluYXRlZCB0aGUgYXBwbGljYXRpb24iKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgZmZsdXNoIChOVUxMKTsKKyAgYWJvcnQgKCk7CisgIC8qTk9UUkVBQ0hFRCovCit9CmRpZmYgLS1naXQgYS9zcmMvZzEwbGliLmggYi9zcmMvZzEwbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkYzAxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nMTBsaWIuaApAQCAtMCwwICsxLDQyOCBAQAorLyogZzEwbGliLmggLSBJbnRlcm5hbCBkZWZpbml0aW9ucyBmb3IgbGliZ2NyeXB0CisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUKKyAqICAgICAgICAgICAgICAgMjAwNywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogVGhpcyBoZWFkZXIgaXMgdG8gYmUgdXNlZCBpbnNpZGUgb2YgbGliZ2NyeXB0IGluIHBsYWNlIG9mIGdjcnlwdC5oLgorICAgVGhpcyB3YXkgd2UgY2FuIGJldHRlciBkaXN0aW5ndWlzaCBiZXR3ZWVuIGludGVybmFsIGFuZCBleHRlcm5hbAorICAgdXNhZ2Ugb2YgZ2NyeXB0LmguICovCisKKyNpZm5kZWYgRzEwTElCX0gKKyNkZWZpbmUgRzEwTElCX0ggMQorCisjaWZkZWYgX0dDUllQVF9ICisjZXJyb3IgIGdjcnlwdC5oIGFscmVhZHkgaW5jbHVkZWQKKyNlbmRpZgorCisjaWZuZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjZXJyb3Igc29tZXRoaW5nIGlzIHdyb25nIHdpdGggY29uZmlnLmgKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgInZpc2liaWxpdHkuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorCisKKwwKKworLyogQXR0cmlidXRlIGhhbmRsaW5nIG1hY3Jvcy4gICovCisKKyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNSApCisjZGVmaW5lIEpOTElCX0dDQ19NX0ZVTkNUSU9OIDEKKyNkZWZpbmUgSk5MSUJfR0NDX0FfTlIgCSAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKKyNkZWZpbmUgSk5MSUJfR0NDX0FfUFJJTlRGKCBmLCBhICkgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZixmLGEpKSkKKyNkZWZpbmUgSk5MSUJfR0NDX0FfTlJfUFJJTlRGKCBmLCBhICkgXAorCQkJICAgIF9fYXR0cmlidXRlX18gKChub3JldHVybiwgZm9ybWF0IChwcmludGYsZixhKSkpCisjZGVmaW5lIEdDQ19BVFRSX05PUkVUVVJOICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyNlbHNlCisjZGVmaW5lIEpOTElCX0dDQ19BX05SCisjZGVmaW5lIEpOTElCX0dDQ19BX1BSSU5URiggZiwgYSApCisjZGVmaW5lIEpOTElCX0dDQ19BX05SX1BSSU5URiggZiwgYSApCisjZGVmaW5lIEdDQ19BVFRSX05PUkVUVVJOCisjZW5kaWYKKworI2lmIF9fR05VQ19fID49IDMKKy8qIEFjY29yZGluZyB0byBnbGliYyB0aGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgc2luY2UgMi44IGhvd2V2ZXIgd2UKKyAgIGJldHRlciBwbGF5IHNhZmUgYW5kIHVzZSBpdCBvbmx5IHdpdGggZ2NjIDMgb3IgbmV3ZXIuICovCisjZGVmaW5lIEdDQ19BVFRSX0ZPUk1BVF9BUkcoYSkgIF9fYXR0cmlidXRlX18gKChmb3JtYXRfYXJnIChhKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfQVRUUl9GT1JNQVRfQVJHKGEpCisjZW5kaWYKKworLyogSSBhbSBub3Qgc3VyZSBzaW5jZSB3aGVuIHRoZSB1bnVzZWQgYXR0cmlidXRlIGlzIHJlYWxseSBzdXBwb3J0ZWQuCisgICBJbiBhbnkgY2FzZSBpdCBpdCBvbmx5IG5lZWRlZCBmb3IgZ2NjIHZlcnNpb25zIHdoaWNoIHByaW50IGEKKyAgIHdhcm5pbmcuICBUaHVzIGxldCB1cyByZXF1aXJlIGdjYyA+PSAzLjUuICAqLworI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA1ICkKKyNkZWZpbmUgR0NDX0FUVFJfVU5VU0VEICBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19BVFRSX1VOVVNFRAorI2VuZGlmCisKKy8qIEdldHRleHQgbWFjcm9zLiAgKi8KKworI2RlZmluZSBfKGEpICBfZ2NyeV9nZXR0ZXh0KGEpCisjZGVmaW5lIE5fKGEpIChhKQorCisvKiBTb21lIGhhbmR5IG1hY3JvcyAqLworI2lmbmRlZiBTVFIKKyNkZWZpbmUgU1RSKHYpICN2CisjZW5kaWYKKyNkZWZpbmUgU1RSMih2KSBTVFIodikKKyNkZWZpbmUgRElNKHYpIChzaXplb2Yodikvc2l6ZW9mKCh2KVswXSkpCisjZGVmaW5lIERJTW9mKHR5cGUsbWVtYmVyKSAgIERJTSgoKHR5cGUgKikwKS0+bWVtYmVyKQorCisMCisKKy8qLS0gc3JjL2dsb2JhbC5jIC0qLworaW50IF9nY3J5X2dsb2JhbF9pc19vcGVyYXRpb25hbCAodm9pZCk7CitnY3J5X2Vycm9yX3QgX2djcnlfdmNvbnRyb2wgKGVudW0gZ2NyeV9jdGxfY21kcyBjbWQsIHZhX2xpc3QgYXJnX3B0cik7Cit2b2lkICBfZ2NyeV9jaGVja19oZWFwIChjb25zdCB2b2lkICphKTsKK2ludCBfZ2NyeV9nZXRfZGVidWdfZmxhZyAodW5zaWduZWQgaW50IG1hc2spOworCisvKiBNYWxsb2MgZnVuY3Rpb25zIGFuZCBjb21tb24gd3JhcHBlciBtYWNyb3MuICAqLwordm9pZCAqX2djcnlfbWFsbG9jIChzaXplX3QgbikgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqX2djcnlfY2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IG0pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X21hbGxvY19zZWN1cmUgKHNpemVfdCBuKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpfZ2NyeV9jYWxsb2Nfc2VjdXJlIChzaXplX3Qgbiwgc2l6ZV90IG0pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3JlYWxsb2MgKHZvaWQgKmEsIHNpemVfdCBuKTsKK2NoYXIgKl9nY3J5X3N0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpfZ2NyeV94bWFsbG9jIChzaXplX3QgbikgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqX2djcnlfeGNhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBtKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpfZ2NyeV94bWFsbG9jX3NlY3VyZSAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3hjYWxsb2Nfc2VjdXJlIChzaXplX3Qgbiwgc2l6ZV90IG0pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3hyZWFsbG9jICh2b2lkICphLCBzaXplX3Qgbik7CitjaGFyICpfZ2NyeV94c3RyZHVwIChjb25zdCBjaGFyICogYSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAgX2djcnlfZnJlZSAodm9pZCAqYSk7CitpbnQgICBfZ2NyeV9pc19zZWN1cmUgKGNvbnN0IHZvaWQgKmEpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKyNkZWZpbmUgeHRyeW1hbGxvYyhhKSAgICBfZ2NyeV9tYWxsb2MgKChhKSkKKyNkZWZpbmUgeHRyeWNhbGxvYyhhLGIpICBfZ2NyeV9jYWxsb2MgKChhKSwoYikpCisjZGVmaW5lIHh0cnltYWxsb2Nfc2VjdXJlKGEpICAgX2djcnlfbWFsbG9jX3NlY3VyZSAoKGEpKQorI2RlZmluZSB4dHJ5Y2FsbG9jX3NlY3VyZShhLGIpIF9nY3J5X2NhbGxvY19zZWN1cmUgKChhKSwoYikpCisjZGVmaW5lIHh0cnlyZWFsbG9jKGEsYikgX2djcnlfcmVhbGxvYyAoKGEpLChiKSkKKyNkZWZpbmUgeHRyeXN0cmR1cChhKSAgICBfZ2NyeV9zdHJkdXAgKChhKSkKKyNkZWZpbmUgeG1hbGxvYyhhKSAgICAgICBfZ2NyeV94bWFsbG9jICgoYSkpCisjZGVmaW5lIHhjYWxsb2MoYSxiKSAgICAgX2djcnlfeGNhbGxvYyAoKGEpLChiKSkKKyNkZWZpbmUgeG1hbGxvY19zZWN1cmUoYSkgICBfZ2NyeV94bWFsbG9jX3NlY3VyZSAoKGEpKQorI2RlZmluZSB4Y2FsbG9jX3NlY3VyZShhLGIpIF9nY3J5X3hjYWxsb2Nfc2VjdXJlICgoYSksKGIpKQorI2RlZmluZSB4cmVhbGxvYyhhLGIpICAgIF9nY3J5X3hyZWFsbG9jICgoYSksKGIpKQorI2RlZmluZSB4c3RyZHVwKGEpICAgICAgIF9nY3J5X3hzdHJkdXAgKChhKSkKKyNkZWZpbmUgeGZyZWUoYSkgICAgICAgICBfZ2NyeV9mcmVlICgoYSkpCisKKworLyotLSBzcmMvbWlzYy5jIC0tKi8KKworI2lmIGRlZmluZWQoSk5MSUJfR0NDX01fRlVOQ1RJT04pIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAordm9pZCBfZ2NyeV9idWcgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMpIEdDQ19BVFRSX05PUkVUVVJOOwordm9pZCBfZ2NyeV9hc3NlcnRfZmFpbGVkIChjb25zdCBjaGFyICpleHByLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuYykgR0NDX0FUVFJfTk9SRVRVUk47CisjZWxzZQordm9pZCBfZ2NyeV9idWcgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKK3ZvaWQgX2djcnlfYXNzZXJ0X2ZhaWxlZCAoY29uc3QgY2hhciAqZXhwciwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworI2VuZGlmCisKK3ZvaWQgX2djcnlfZGl2aWRlX2J5X3plcm8gKHZvaWQpIEpOTElCX0dDQ19BX05SOworCitjb25zdCBjaGFyICpfZ2NyeV9nZXR0ZXh0IChjb25zdCBjaGFyICprZXkpIEdDQ19BVFRSX0ZPUk1BVF9BUkcoMSk7Cit2b2lkIF9nY3J5X2ZhdGFsX2Vycm9yKGludCByYywgY29uc3QgY2hhciAqdGV4dCApIEpOTElCX0dDQ19BX05SOwordm9pZCBfZ2NyeV9sb2d2IChpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdfcHRyKSBKTkxJQl9HQ0NfQV9QUklOVEYoMiwwKTsKK3ZvaWQgX2djcnlfbG9nKCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkgSk5MSUJfR0NDX0FfUFJJTlRGKDIsMyk7Cit2b2lkIF9nY3J5X2xvZ19idWcoIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkgICBKTkxJQl9HQ0NfQV9OUl9QUklOVEYoMSwyKTsKK3ZvaWQgX2djcnlfbG9nX2ZhdGFsKCBjb25zdCBjaGFyICpmbXQsIC4uLiApIEpOTElCX0dDQ19BX05SX1BSSU5URigxLDIpOwordm9pZCBfZ2NyeV9sb2dfZXJyb3IoIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkgSk5MSUJfR0NDX0FfUFJJTlRGKDEsMik7Cit2b2lkIF9nY3J5X2xvZ19pbmZvKCBjb25zdCBjaGFyICpmbXQsIC4uLiApICBKTkxJQl9HQ0NfQV9QUklOVEYoMSwyKTsKK2ludCAgX2djcnlfbG9nX2luZm9fd2l0aF9kdW1teV9mcCAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpOTElCX0dDQ19BX1BSSU5URigyLDMpOwordm9pZCBfZ2NyeV9sb2dfZGVidWcoIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkgSk5MSUJfR0NDX0FfUFJJTlRGKDEsMik7Cit2b2lkIF9nY3J5X2xvZ19wcmludGYgKCBjb25zdCBjaGFyICpmbXQsIC4uLiApIEpOTElCX0dDQ19BX1BSSU5URigxLDIpOwordm9pZCBfZ2NyeV9sb2dfcHJpbnRoZXggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIF9nY3J5X2xvZ19wcmludG1waSAoY29uc3QgY2hhciAqdGV4dCwgZ2NyeV9tcGlfdCBtcGkpOwordm9pZCBfZ2NyeV9sb2dfcHJpbnRzeHAgKGNvbnN0IGNoYXIgKnRleHQsIGdjcnlfc2V4cF90IHNleHApOworCit2b2lkIF9nY3J5X3NldF9sb2dfdmVyYm9zaXR5KCBpbnQgbGV2ZWwgKTsKK2ludCBfZ2NyeV9sb2dfdmVyYm9zaXR5KCBpbnQgbGV2ZWwgKTsKKworI2lmZGVmIEpOTElCX0dDQ19NX0ZVTkNUSU9OCisjZGVmaW5lIEJVRygpIF9nY3J5X2J1ZyggX19GSUxFX18gLCBfX0xJTkVfXywgX19GVU5DVElPTl9fICkKKyNkZWZpbmUgZ2NyeV9hc3NlcnQoZXhwcikgKChleHByKT8gKHZvaWQpMCBcCisgICAgICAgICA6IF9nY3J5X2Fzc2VydF9mYWlsZWQgKFNUUihleHByKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorI2VsaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisjZGVmaW5lIEJVRygpIF9nY3J5X2J1ZyggX19GSUxFX18gLCBfX0xJTkVfXywgX19mdW5jX18gKQorI2RlZmluZSBnY3J5X2Fzc2VydChleHByKSAoKGV4cHIpPyAodm9pZCkwIFwKKyAgICAgICAgIDogX2djcnlfYXNzZXJ0X2ZhaWxlZCAoU1RSKGV4cHIpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIEJVRygpIF9nY3J5X2J1ZyggX19GSUxFX18gLCBfX0xJTkVfXyApCisjZGVmaW5lIGdjcnlfYXNzZXJ0KGV4cHIpICgoZXhwcik/ICh2b2lkKTAgXAorICAgICAgICAgOiBfZ2NyeV9hc3NlcnRfZmFpbGVkIChTVFIoZXhwciksIF9fRklMRV9fLCBfX0xJTkVfXykpCisjZW5kaWYKKworCisjZGVmaW5lIGxvZ19idWcgICAgIF9nY3J5X2xvZ19idWcKKyNkZWZpbmUgbG9nX2ZhdGFsICAgX2djcnlfbG9nX2ZhdGFsCisjZGVmaW5lIGxvZ19lcnJvciAgIF9nY3J5X2xvZ19lcnJvcgorI2RlZmluZSBsb2dfaW5mbyAgICBfZ2NyeV9sb2dfaW5mbworI2RlZmluZSBsb2dfZGVidWcgICBfZ2NyeV9sb2dfZGVidWcKKyNkZWZpbmUgbG9nX3ByaW50ZiAgX2djcnlfbG9nX3ByaW50ZgorI2RlZmluZSBsb2dfcHJpbnRoZXggX2djcnlfbG9nX3ByaW50aGV4CisjZGVmaW5lIGxvZ19wcmludG1waSBfZ2NyeV9sb2dfcHJpbnRtcGkKKyNkZWZpbmUgbG9nX3ByaW50c3hwIF9nY3J5X2xvZ19wcmludHN4cAorCisvKiBDb21wYXRpYmlsaXR5IG1hY3JvLiAgKi8KKyNkZWZpbmUgbG9nX21waWR1bXAgX2djcnlfbG9nX3ByaW50bXBpCisKKworLyotLSBzcmMvaHdmZWF0dXJlcy5jIC0tKi8KKy8qIChEbyBub3QgY2hhbmdlIHRoZXNlIHZhbHVlcyB1bmxlc3Mgc3luY2VkIHdpdGggdGhlIGFzbSBjb2RlLikgICovCisjZGVmaW5lIEhXRl9QQURMT0NLX1JORyAgMQorI2RlZmluZSBIV0ZfUEFETE9DS19BRVMgIDIKKyNkZWZpbmUgSFdGX1BBRExPQ0tfU0hBICA0CisjZGVmaW5lIEhXRl9QQURMT0NLX01NVUwgOAorCisjZGVmaW5lIEhXRl9JTlRFTF9DUFUgICAgMTYKKyNkZWZpbmUgSFdGX0lOVEVMX0JNSTIgICAzMgorI2RlZmluZSBIV0ZfSU5URUxfU1NTRTMgIDY0CisjZGVmaW5lIEhXRl9JTlRFTF9QQ0xNVUwgMTI4CisjZGVmaW5lIEhXRl9JTlRFTF9BRVNOSSAgMjU2CisjZGVmaW5lIEhXRl9JTlRFTF9SRFJBTkQgNTEyCisjZGVmaW5lIEhXRl9JTlRFTF9BVlggICAgMTAyNAorI2RlZmluZSBIV0ZfSU5URUxfQVZYMiAgIDIwNDgKKworI2RlZmluZSBIV0ZfQVJNX05FT04gICAgIDQwOTYKKworCitncGdfZXJyX2NvZGVfdCBfZ2NyeV9kaXNhYmxlX2h3X2ZlYXR1cmUgKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMgKHZvaWQpOwordW5zaWduZWQgaW50IF9nY3J5X2dldF9od19mZWF0dXJlcyAodm9pZCk7Citjb25zdCBjaGFyICpfZ2NyeV9lbnVtX2h3X2ZlYXR1cmVzIChpbnQgaWR4LCB1bnNpZ25lZCBpbnQgKnJfZmVhdHVyZSk7CisKKworLyotLSBtcGkvbXBpdXRpbC5jIC0tKi8KK2NvbnN0IGNoYXIgKl9nY3J5X21waV9nZXRfaHdfY29uZmlnICh2b2lkKTsKKworCisvKi0tIGNpcGhlci9wdWJrZXkuYyAtLSovCisKKy8qIEZJWE1FOiBzaG91bGRuJ3QgdGhpcyBnbyBpbnRvIG1waS5oPyAgKi8KKyNpZm5kZWYgbXBpX3Bvd20KKyNkZWZpbmUgbXBpX3Bvd20odyxiLGUsbSkgICBnY3J5X21waV9wb3dtKCAodyksIChiKSwgKGUpLCAobSkgKQorI2VuZGlmCisKKy8qLS0gcHJpbWVnZW4uYyAtLSovCitnY3J5X2Vycl9jb2RlX3QgX2djcnlfcHJpbWVnZW5faW5pdCAodm9pZCk7CitnY3J5X21waV90IF9nY3J5X2dlbmVyYXRlX3NlY3JldF9wcmltZSAodW5zaWduZWQgaW50IG5iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9yYW5kb21fbGV2ZWxfdCByYW5kb21fbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpleHRyYV9jaGVjaykodm9pZCosIGdjcnlfbXBpX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXh0cmFfY2hlY2tfYXJnKTsKK2djcnlfbXBpX3QgX2djcnlfZ2VuZXJhdGVfcHVibGljX3ByaW1lICh1bnNpZ25lZCBpbnQgbmJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmV4dHJhX2NoZWNrKSh2b2lkKiwgZ2NyeV9tcGlfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYV9jaGVja19hcmcpOworZ2NyeV9tcGlfdCBfZ2NyeV9nZW5lcmF0ZV9lbGdfcHJpbWUgKGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYml0cywgdW5zaWduZWQgaW50IHFiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZywgZ2NyeV9tcGlfdCAqKmZhY3RvcnMpOworZ2NyeV9tcGlfdCBfZ2NyeV9kZXJpdmVfeDkzMV9wcmltZSAoY29uc3QgZ2NyeV9tcGlfdCB4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgeHAxLCBjb25zdCBnY3J5X21waV90IHhwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKnJfcDEsIGdjcnlfbXBpX3QgKnJfcDIpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfZ2VuZXJhdGVfZmlwczE4Nl8yX3ByaW1lCisgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgcGJpdHMsIHVuc2lnbmVkIGludCBxYml0cywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqcl9xLCBnY3J5X21waV90ICpyX3AsCisgICAgICAgICAgICAgICAgICBpbnQgKnJfY291bnRlciwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKipyX3NlZWQsIHNpemVfdCAqcl9zZWVkbGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2dlbmVyYXRlX2ZpcHMxODZfM19wcmltZQorICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50IHBiaXRzLCB1bnNpZ25lZCBpbnQgcWJpdHMsCisgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzZWVkLCBzaXplX3Qgc2VlZGxlbiwKKyAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKnJfcSwgZ2NyeV9tcGlfdCAqcl9wLAorICAgICAgICAgICAgICAgICAgaW50ICpyX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICB2b2lkICoqcl9zZWVkLCBzaXplX3QgKnJfc2VlZGxlbiwgaW50ICpyX2hhc2hhbGdvKTsKKworCisvKiBSZXBsYWNlbWVudHMgb2YgbWlzc2luZyBmdW5jdGlvbnMgKG1pc3Npbmctc3RyaW5nLmMpLiAgKi8KKyNpZm5kZWYgSEFWRV9TVFBDUFkKK2NoYXIgKnN0cGNweSAoY2hhciAqYSwgY29uc3QgY2hhciAqYik7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9TVFJDQVNFQ01QCitpbnQgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgX0dDUllfR0NDX0FUVFJfUFVSRTsKKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vY29tcGF0L2xpYmNvbXBhdC5oIgorCisKKy8qIE1hY3JvcyB1c2VkIHRvIHJlbmFtZSBtaXNzaW5nIGZ1bmN0aW9ucy4gICovCisjaWZuZGVmIEhBVkVfU1RSVE9VTAorI2RlZmluZSBzdHJ0b3VsKGEsYixjKSAgKCh1bnNpZ25lZCBsb25nKXN0cnRvbCgoYSksKGIpLChjKSkpCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9NRU1NT1ZFCisjZGVmaW5lIG1lbW1vdmUoZCwgcywgbikgYmNvcHkoKHMpLCAoZCksIChuKSkKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1NUUklDTVAKKyNkZWZpbmUgc3RyaWNtcChhLGIpCSBzdHJjYXNlY21wKCAoYSksIChiKSApCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9BVEVYSVQKKyNkZWZpbmUgYXRleGl0KGEpICAgIChvbl9leGl0KChhKSwwKSkKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1JBSVNFCisjZGVmaW5lIHJhaXNlKGEpIGtpbGwoZ2V0cGlkKCksIChhKSkKKyNlbmRpZgorCisKKy8qIFN0YWNrIGJ1cm5pbmcuICAqLworCisjaWZkZWYgSEFWRV9HQ0NfQVNNX1ZPTEFUSUxFX01FTU9SWQorI2RlZmluZSAgX19nY3J5X2J1cm5fc3RhY2tfZHVtbXkoKSBhc20gdm9sYXRpbGUgKCIiOjo6Im1lbW9yeSIpCisjZWxzZQordm9pZCBfX2djcnlfYnVybl9zdGFja19kdW1teSAodm9pZCk7CisjZW5kaWYKKwordm9pZCBfX2djcnlfYnVybl9zdGFjayAodW5zaWduZWQgaW50IGJ5dGVzKTsKKyNkZWZpbmUgX2djcnlfYnVybl9zdGFjayhieXRlcykgXAorCWRvIHsgX19nY3J5X2J1cm5fc3RhY2sgKGJ5dGVzKTsgXAorCSAgICAgX19nY3J5X2J1cm5fc3RhY2tfZHVtbXkgKCk7IH0gd2hpbGUoMCkKKworCisvKiBUbyBhdm9pZCB0aGF0IGEgY29tcGlsZXIgb3B0aW1pemVzIGNlcnRhaW4gbWVtc2V0IGNhbGxzIGF3YXksIHRoZXNlCisgICBtYWNyb3MgbWF5IGJlIHVzZWQgaW5zdGVhZC4gKi8KKyNkZWZpbmUgd2lwZW1lbW9yeTIoX3B0cixfc2V0LF9sZW4pIGRvIHsgXAorICAgICAgICAgICAgICB2b2xhdGlsZSBjaGFyICpfdnB0cj0odm9sYXRpbGUgY2hhciAqKShfcHRyKTsgXAorICAgICAgICAgICAgICBzaXplX3QgX3ZsZW49KF9sZW4pOyBcCisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX3ZzZXQ9KF9zZXQpOyBcCisgICAgICAgICAgICAgIGZhc3Rfd2lwZW1lbW9yeTIoX3ZwdHIsX3ZzZXQsX3ZsZW4pOyBcCisgICAgICAgICAgICAgIHdoaWxlKF92bGVuKSB7ICpfdnB0cj0oX3ZzZXQpOyBfdnB0cisrOyBfdmxlbi0tOyB9IFwKKyAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNkZWZpbmUgd2lwZW1lbW9yeShfcHRyLF9sZW4pIHdpcGVtZW1vcnkyKF9wdHIsMCxfbGVuKQorCisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorICAjZGVmaW5lIEZBU1RXSVBFX1QgdTY0CisgICNkZWZpbmUgRkFTVFdJUEVfTVVMVCAoVTY0X0MoMHgwMTAxMDEwMTAxMDEwMTAxKSkKKyNlbHNlCisgICNkZWZpbmUgRkFTVFdJUEVfVCB1MzIKKyAgI2RlZmluZSBGQVNUV0lQRV9NVUxUICgweDAxMDEwMTAxVSkKKyNlbmRpZgorCisvKiBGb2xsb3dpbmcgYXJjaGl0ZWN0dXJlcyBjYW4gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3NlcyBmYXN0LiAgKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEKSkgfHwgXAorICAgIGRlZmluZWQoX19hYXJjaDY0X18pCisjZGVmaW5lIGZhc3Rfd2lwZW1lbW9yeTJfdW5hbGlnbmVkX2hlYWQoX3B0cixfc2V0LF9sZW4pIC8qZG8gbm90aGluZyovCisjZWxzZQorI2RlZmluZSBmYXN0X3dpcGVtZW1vcnkyX3VuYWxpZ25lZF9oZWFkKF92cHRyLF92c2V0LF92bGVuKSBkbyB7IFwKKyAgICAgICAgICAgICAgd2hpbGUoKHNpemVfdCkoX3ZwdHIpJihzaXplb2YoRkFTVFdJUEVfVCktMSkgJiYgX3ZsZW4pIFwKKyAgICAgICAgICAgICAgICB7ICpfdnB0cj0oX3ZzZXQpOyBfdnB0cisrOyBfdmxlbi0tOyB9IFwKKyAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKiBmYXN0X3dpcGVtZW1vcnkyIG1heSBsZWF2ZSB0YWlsIGJ5dGVzIHVuaGFuZGxlZCwgaW4gd2hpY2ggY2FzZSB0YWlsIGJ5dGVzCisgICBhcmUgaGFuZGxlZCBieSB3aXBlbWVtb3J5Mi4gKi8KKyNkZWZpbmUgZmFzdF93aXBlbWVtb3J5MihfdnB0cixfdnNldCxfdmxlbikgZG8geyBcCisgICAgICAgICAgICAgIEZBU1RXSVBFX1QgX3ZzZXRfbG9uZyA9IF92c2V0OyBcCisgICAgICAgICAgICAgIGZhc3Rfd2lwZW1lbW9yeTJfdW5hbGlnbmVkX2hlYWQoX3ZwdHIsX3ZzZXQsX3ZsZW4pOyBcCisgICAgICAgICAgICAgIGlmIChfdmxlbiA8IHNpemVvZihGQVNUV0lQRV9UKSkgXAorICAgICAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgICAgICAgIF92c2V0X2xvbmcgKj0gRkFTVFdJUEVfTVVMVDsgXAorICAgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSBGQVNUV0lQRV9UICpfdnB0cl9sb25nID0gKHZvbGF0aWxlIHZvaWQgKilfdnB0cjsgXAorICAgICAgICAgICAgICAgICpfdnB0cl9sb25nID0gX3ZzZXRfbG9uZzsgXAorICAgICAgICAgICAgICAgIF92bGVuIC09IHNpemVvZihGQVNUV0lQRV9UKTsgXAorICAgICAgICAgICAgICAgIF92cHRyICs9IHNpemVvZihGQVNUV0lQRV9UKTsgXAorICAgICAgICAgICAgICB9IHdoaWxlIChfdmxlbiA+PSBzaXplb2YoRkFTVFdJUEVfVCkpOyBcCisgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQorCisKKy8qIERpZ2l0IHByZWRpY2F0ZXMuICAqLworCisjZGVmaW5lIGRpZ2l0cChwKSAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgb2N0ZGlnaXRwKHApICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc3JykKKyNkZWZpbmUgYWxwaGFwKGEpICAgICggICAoKihhKSA+PSAnQScgJiYgKihhKSA8PSAnWicpICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ2EnICYmICooYSkgPD0gJ3onKSkKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpIChkaWdpdHAgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdBJyAmJiAqKGEpIDw9ICdGJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorCisvKiBJbml0IGZ1bmN0aW9ucy4gICovCisKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfaW5pdCAodm9pZCk7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfbWRfaW5pdCAodm9pZCk7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfcGtfaW5pdCAodm9pZCk7CitnY3J5X2Vycl9jb2RlX3QgX2djcnlfc2VjbWVtX21vZHVsZV9pbml0ICh2b2lkKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9tcGlfaW5pdCAodm9pZCk7CisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50LiAgKi8KKyNkZWZpbmUgR0NSWV9BTExPQ19GTEFHX1NFQ1VSRSAoMSA8PCAwKQorCisKKy8qLS0gc2V4cC5jIC0tKi8KK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9zZXhwX3ZidWlsZCAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJnX3B0cik7CitjaGFyICpfZ2NyeV9zZXhwX250aF9zdHJpbmcgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfc2V4cF92ZXh0cmFjdF9wYXJhbSAoZ2NyeV9zZXhwX3Qgc2V4cCwgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpc3QsIHZhX2xpc3QgYXJnX3B0cik7CisKKworLyotLSBmaXBzLmMgLS0qLworCit2b2lkIF9nY3J5X2luaXRpYWxpemVfZmlwc19tb2RlIChpbnQgZm9yY2UpOworCitpbnQgX2djcnlfZmlwc19tb2RlICh2b2lkKTsKKyNkZWZpbmUgZmlwc19tb2RlKCkgX2djcnlfZmlwc19tb2RlICgpCisKK2ludCBfZ2NyeV9lbmZvcmNlZF9maXBzX21vZGUgKHZvaWQpOworCit2b2lkIF9nY3J5X3NldF9lbmZvcmNlZF9maXBzX21vZGUgKHZvaWQpOworCit2b2lkIF9nY3J5X2luYWN0aXZhdGVfZmlwc19tb2RlIChjb25zdCBjaGFyICp0ZXh0KTsKK2ludCBfZ2NyeV9pc19maXBzX21vZGVfaW5hY3RpdmUgKHZvaWQpOworCisKK3ZvaWQgX2djcnlfZmlwc19zaWduYWxfZXJyb3IgKGNvbnN0IGNoYXIgKnNyY2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyY2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfZmF0YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CisjaWZkZWYgSk5MSUJfR0NDX01fRlVOQ1RJT04KKyMgZGVmaW5lIGZpcHNfc2lnbmFsX2Vycm9yKGEpIFwKKyAgICAgICAgICAgX2djcnlfZmlwc19zaWduYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAwLCAoYSkpCisjIGRlZmluZSBmaXBzX3NpZ25hbF9mYXRhbF9lcnJvcihhKSBcCisgICAgICAgICAgIF9nY3J5X2ZpcHNfc2lnbmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgMSwgKGEpKQorI2Vsc2UKKyMgZGVmaW5lIGZpcHNfc2lnbmFsX2Vycm9yKGEpIFwKKyAgICAgICAgICAgX2djcnlfZmlwc19zaWduYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgTlVMTCwgMCwgKGEpKQorIyBkZWZpbmUgZmlwc19zaWduYWxfZmF0YWxfZXJyb3IoYSkgXAorICAgICAgICAgICBfZ2NyeV9maXBzX3NpZ25hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLCBOVUxMLCAxLCAoYSkpCisjZW5kaWYKKworaW50IF9nY3J5X2ZpcHNfaXNfb3BlcmF0aW9uYWwgKHZvaWQpOworI2RlZmluZSBmaXBzX2lzX29wZXJhdGlvbmFsKCkgICAoX2djcnlfZ2xvYmFsX2lzX29wZXJhdGlvbmFsICgpKQorI2RlZmluZSBmaXBzX25vdF9vcGVyYXRpb25hbCgpICAoR1BHX0VSUl9OT1RfT1BFUkFUSU9OQUwpCisKK2ludCBfZ2NyeV9maXBzX3Rlc3Rfb3BlcmF0aW9uYWwgKHZvaWQpOworaW50IF9nY3J5X2ZpcHNfdGVzdF9lcnJvcl9vcl9vcGVyYXRpb25hbCAodm9pZCk7CisKK2dwZ19lcnJfY29kZV90IF9nY3J5X2ZpcHNfcnVuX3NlbGZ0ZXN0cyAoaW50IGV4dGVuZGVkKTsKKwordm9pZCBfZ2NyeV9maXBzX25vcmV0dXJuICh2b2lkKTsKKyNkZWZpbmUgZmlwc19ub3JldHVybigpICAoX2djcnlfZmlwc19ub3JldHVybiAoKSkKKworCisKKyNlbmRpZiAvKiBHMTBMSUJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2djcnlwdC1pbnQuaCBiL3NyYy9nY3J5cHQtaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkY2I0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nY3J5cHQtaW50LmgKQEAgLTAsMCArMSw1MzQgQEAKKy8qIGdjcnlwdC1pbnQuaCAtIEludGVybmFsIHZlcnNpb24gb2YgZ2NyeXB0LmgKKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgR0NSWV9HQ1JZUFRfSU5UX0gKKyNkZWZpbmUgR0NSWV9HQ1JZUFRfSU5UX0gKKworI2lmZGVmIF9HQ1JZUFRfSAorI2Vycm9yICBnY3J5cHQuaCBhbHJlYWR5IGluY2x1ZGVkCisjZW5kaWYKKworI2luY2x1ZGUgImdjcnlwdC5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisKKy8qIFRoZXNlIGVycm9yIGNvZGVzIGFyZSB1c2VkIGJ1dCBub3QgZGVmaW5lZCBpbiB0aGUgcmVxdWlyZWQKKyAgIGxpYmdwZy1lcnJvciAxLjExLiAgRGVmaW5lIHRoZW0gaGVyZS4gKi8KKyNpZiBHUEdfRVJST1JfVkVSU0lPTl9OVU1CRVIgPCAweDAxMGMwMCAgLyogMS4xMiAqLworIyBkZWZpbmUgR1BHX0VSUl9OT19DUllQVF9DVFgJICAgIDE5MQorIyBkZWZpbmUgR1BHX0VSUl9XUk9OR19DUllQVF9DVFggICAgMTkyCisjIGRlZmluZSBHUEdfRVJSX0JBRF9DUllQVF9DVFgJICAgIDE5MworIyBkZWZpbmUgR1BHX0VSUl9DUllQVF9DVFhfQ09ORkxJQ1QgMTk0CisjIGRlZmluZSBHUEdfRVJSX0JST0tFTl9QVUJLRVkgICAgICAxOTUKKyMgZGVmaW5lIEdQR19FUlJfQlJPS0VOX1NFQ0tFWSAgICAgIDE5NgorI2VuZGlmCisKKyNpZiBHUEdfRVJST1JfVkVSU0lPTl9OVU1CRVIgPCAweDAxMGQwMCAgLyogMS4xMyAqLworIyBkZWZpbmUgR1BHX0VSUl9NQUNfQUxHTyAgICAgICAgICAgMTk3CisjZW5kaWYKKworDAorLyogQ29udGV4dCB1c2VkIHdpdGggZWxsaXB0aWMgY3VydmUgZnVuY3Rpb25zLiAgKi8KK3N0cnVjdCBtcGlfZWNfY3R4X3M7Cit0eXBlZGVmIHN0cnVjdCBtcGlfZWNfY3R4X3MgKm1waV9lY190OworCisKKwwKKy8qIFVuZGVyc2NvcmUgcHJlZml4ZWQgaW50ZXJuYWwgdmVyc2lvbnMgb2YgdGhlIHB1YmxpYyBmdW5jdGlvbnMuCisgICBUaGV5IHJldHVybiBncGdfZXJyX2NvZGUgYW5kIG5vdCBncGdfZXJyb3JfdC4gIFNvbWUgbWFjcm9zIGFsc28KKyAgIG5lZWQgYW4gdW5kZXJzY29yZSBwcmVmaXhlZCBpbnRlcm5hbCB2ZXJzaW9uLgorCisgICBOb3RlIHRoYXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBhbmQgbWFjcm9zICh4bWFsbG9jIGV0Yy4pCisgICBhcmUgbm90IGRlZmluZWQgaGVyZSBidXQgaW4gZzEwbGliLmggYmVjYXVzZSB0aGlzIGZpbGUgaGVyZSBpcworICAgaW5jbHVkZWQgYnkgc29tZSB0ZXN0IHByb2dyYW1zIHdoaWNoIGRlZmluZSB0aGVpZSBvd24geG1hbGxvYworICAgbWFjcm9zLiAgKi8KKworZ3BnX2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX29wZW4gKGdjcnlfY2lwaGVyX2hkX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxnbywgaW50IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7Cit2b2lkIF9nY3J5X2NpcGhlcl9jbG9zZSAoZ2NyeV9jaXBoZXJfaGRfdCBoKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9jdGwgKGdjcnlfY2lwaGVyX2hkX3QgaCwgaW50IGNtZCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9pbmZvIChnY3J5X2NpcGhlcl9oZF90IGgsIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7Citjb25zdCBjaGFyICpfZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworaW50IF9nY3J5X2NpcGhlcl9tYXBfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkgX0dDUllfR0NDX0FUVFJfUFVSRTsKK2ludCBfZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCAoY29uc3QgY2hhciAqc3RyaW5nKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2VuY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXQsIHNpemVfdCBvdXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4pOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX2RlY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXQsIHNpemVfdCBvdXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4pOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9zZXRrZXkgKGdjcnlfY2lwaGVyX2hkX3QgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTsKK2djcnlfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfc2V0aXYgKGdjcnlfY2lwaGVyX2hkX3QgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppdiwgc2l6ZV90IGl2bGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWJ1Zmxlbik7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9jaXBoZXJfZ2V0dGFnIChnY3J5X2NpcGhlcl9oZF90IGhkLCB2b2lkICpvdXR0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnbGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X2NpcGhlcl9jaGVja3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaW50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0YWdsZW4pOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfY2lwaGVyX3NldGN0ciAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmN0ciwgc2l6ZV90IGN0cmxlbik7CitzaXplX3QgX2djcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiAoaW50IGFsZ28pOworc2l6ZV90IF9nY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGludCBhbGdvKTsKKworI2RlZmluZSBfZ2NyeV9jaXBoZXJfcmVzZXQoaCkgIF9nY3J5X2NpcGhlcl9jdGwgKChoKSwgR0NSWUNUTF9SRVNFVCwgTlVMTCwgMCkKKworCisKKwwKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX2VuY3J5cHQgKGdjcnlfc2V4cF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBwa2V5KTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX2RlY3J5cHQgKGdjcnlfc2V4cF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBza2V5KTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3NpZ24gKGdjcnlfc2V4cF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBza2V5KTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3ZlcmlmeSAoZ2NyeV9zZXhwX3Qgc2lndmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBwa2V5KTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3BrX3Rlc3RrZXkgKGdjcnlfc2V4cF90IGtleSk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wa19nZW5rZXkgKGdjcnlfc2V4cF90ICpyX2tleSwgZ2NyeV9zZXhwX3Qgc19wYXJtcyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wa19jdGwgKGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wa19hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyk7Citjb25zdCBjaGFyICpfZ2NyeV9wa19hbGdvX25hbWUgKGludCBhbGdvcml0aG0pIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CitpbnQgX2djcnlfcGtfbWFwX25hbWUgKGNvbnN0IGNoYXIqIG5hbWUpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7Cit1bnNpZ25lZCBpbnQgX2djcnlfcGtfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBrZXkpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7Cit1bnNpZ25lZCBjaGFyICpfZ2NyeV9wa19nZXRfa2V5Z3JpcCAoZ2NyeV9zZXhwX3Qga2V5LCB1bnNpZ25lZCBjaGFyICphcnJheSk7Citjb25zdCBjaGFyICpfZ2NyeV9wa19nZXRfY3VydmUgKGdjcnlfc2V4cF90IGtleSwgaW50IGl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnJfbmJpdHMpOworZ2NyeV9zZXhwX3QgX2djcnlfcGtfZ2V0X3BhcmFtIChpbnQgYWxnbywgY29uc3QgY2hhciAqbmFtZSk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKGdjcnlfc2V4cF90ICpyX3NleHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBnY3J5X2N0eF90IGN0eCk7CisKKwwKK2dwZ19lcnJfY29kZV90IF9nY3J5X21kX29wZW4gKGdjcnlfbWRfaGRfdCAqaCwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncyk7Cit2b2lkIF9nY3J5X21kX2Nsb3NlIChnY3J5X21kX2hkX3QgaGQpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbWRfZW5hYmxlIChnY3J5X21kX2hkX3QgaGQsIGludCBhbGdvKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X21kX2NvcHkgKGdjcnlfbWRfaGRfdCAqYmhkLCBnY3J5X21kX2hkX3QgYWhkKTsKK3ZvaWQgX2djcnlfbWRfcmVzZXQgKGdjcnlfbWRfaGRfdCBoZCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tZF9jdGwgKGdjcnlfbWRfaGRfdCBoZCwgaW50IGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKK3ZvaWQgX2djcnlfbWRfd3JpdGUgKGdjcnlfbWRfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKK3Vuc2lnbmVkIGNoYXIgKl9nY3J5X21kX3JlYWQgKGdjcnlfbWRfaGRfdCBoZCwgaW50IGFsZ28pOwordm9pZCBfZ2NyeV9tZF9oYXNoX2J1ZmZlciAoaW50IGFsZ28sIHZvaWQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGludCBhbGdvLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9idWZmZXJfdCAqaW92LCBpbnQgaW92Y250KTsKK2ludCBfZ2NyeV9tZF9nZXRfYWxnbyAoZ2NyeV9tZF9oZF90IGhkKTsKK3Vuc2lnbmVkIGludCBfZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChpbnQgYWxnbyk7CitpbnQgX2djcnlfbWRfaXNfZW5hYmxlZCAoZ2NyeV9tZF9oZF90IGEsIGludCBhbGdvKTsKK2ludCBfZ2NyeV9tZF9pc19zZWN1cmUgKGdjcnlfbWRfaGRfdCBhKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X21kX2luZm8gKGdjcnlfbWRfaGRfdCBoLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tZF9hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7Citjb25zdCBjaGFyICpfZ2NyeV9tZF9hbGdvX25hbWUgKGludCBhbGdvKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworaW50IF9nY3J5X21kX21hcF9uYW1lIChjb25zdCBjaGFyKiBuYW1lKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbWRfc2V0a2V5IChnY3J5X21kX2hkX3QgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7Cit2b2lkIF9nY3J5X21kX2RlYnVnIChnY3J5X21kX2hkX3QgaGQsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CisKKyNkZWZpbmUgX2djcnlfbWRfdGVzdF9hbGdvKGEpIFwKKyAgICAgICAgICAgIF9nY3J5X21kX2FsZ29faW5mbyAoKGEpLCBHQ1JZQ1RMX1RFU1RfQUxHTywgTlVMTCwgTlVMTCkKKworI2RlZmluZSBfZ2NyeV9tZF9maW5hbChhKSBcCisgICAgICAgICAgICBfZ2NyeV9tZF9jdGwgKChhKSwgR0NSWUNUTF9GSU5BTElaRSwgTlVMTCwgMCkKKworI2RlZmluZSBfZ2NyeV9tZF9wdXRjKGgsYykgIFwKKyAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZ2NyeV9tZF9oZF90IGhfXyA9IChoKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmKCAoaF9fKS0+YnVmcG9zID09IChoX18pLT5idWZzaXplICkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgX2djcnlfbWRfd3JpdGUoIChoX18pLCBOVUxMLCAwICk7ICAgICBcCisgICAgICAgICAgICAgICAgKGhfXyktPmJ1ZlsoaF9fKS0+YnVmcG9zKytdID0gKGMpICYgMHhmZjsgXAorICAgICAgICAgICAgfSB3aGlsZSgwKQorCisKKwwKK2dwZ19lcnJfY29kZV90IF9nY3J5X21hY19vcGVuIChnY3J5X21hY19oZF90ICpoYW5kbGUsIGludCBhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgZ2NyeV9jdHhfdCBjdHgpOwordm9pZCBfZ2NyeV9tYWNfY2xvc2UgKGdjcnlfbWFjX2hkX3QgaCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tYWNfY3RsIChnY3J5X21hY19oZF90IGgsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZsZW4pOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbWFjX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tYWNfc2V0a2V5IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X21hY19zZXRpdiAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdmxlbik7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tYWNfcmVhZCAoZ2NyeV9tYWNfaGRfdCBoZCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmJ1Zmxlbik7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tYWNfdmVyaWZ5IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKK3Vuc2lnbmVkIGludCBfZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuIChpbnQgYWxnbyk7Cit1bnNpZ25lZCBpbnQgX2djcnlfbWFjX2dldF9hbGdvX2tleWxlbiAoaW50IGFsZ28pOworY29uc3QgY2hhciAqX2djcnlfbWFjX2FsZ29fbmFtZSAoaW50IGFsZ29yaXRobSkgX0dDUllfR0NDX0FUVFJfUFVSRTsKK2ludCBfZ2NyeV9tYWNfbWFwX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKyNkZWZpbmUgX2djcnlfbWFjX3Jlc2V0KGgpICBfZ2NyeV9tYWNfY3RsICgoaCksIEdDUllDVExfUkVTRVQsIE5VTEwsIDApCisKKwwKK2dwZ19lcnJfY29kZV90IF9nY3J5X2tkZl9kZXJpdmUgKGNvbnN0IHZvaWQgKnBhc3NwaHJhc2UsIHNpemVfdCBwYXNzcGhyYXNlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZ28sIGludCBzdWJhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2FsdCwgc2l6ZV90IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5c2l6ZSwgdm9pZCAqa2V5YnVmZmVyKTsKKworDAorZ3BnX2Vycl9jb2RlX3QgX2djcnlfcHJpbWVfZ2VuZXJhdGUgKGdjcnlfbXBpX3QgKnByaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmltZV9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmYWN0b3JfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICoqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCBjYl9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNiX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yIChnY3J5X21waV90ICpyX2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgcHJpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKmZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgc3RhcnRfZyk7Cit2b2lkIF9nY3J5X3ByaW1lX3JlbGVhc2VfZmFjdG9ycyAoZ2NyeV9tcGlfdCAqZmFjdG9ycyk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9wcmltZV9jaGVjayAoZ2NyeV9tcGlfdCB4LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisMCit2b2lkIF9nY3J5X3JhbmRvbWl6ZSAodm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfcmFuZG9tX2FkZF9ieXRlcyAoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHF1YWxpdHkpOwordm9pZCAqX2djcnlfcmFuZG9tX2J5dGVzIChzaXplX3QgbmJ5dGVzLCBlbnVtIGdjcnlfcmFuZG9tX2xldmVsIGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3JhbmRvbV9ieXRlc19zZWN1cmUgKHNpemVfdCBuYnl0ZXMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgX2djcnlfbXBpX3JhbmRvbWl6ZSAoZ2NyeV9tcGlfdCB3LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCk7Cit2b2lkIF9nY3J5X2NyZWF0ZV9ub25jZSAodm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKworDAordm9pZCBfZ2NyeV9jdHhfcmVsZWFzZSAoZ2NyeV9jdHhfdCBjdHgpOworCisMCitjb25zdCBjaGFyICpfZ2NyeV9jaGVja192ZXJzaW9uIChjb25zdCBjaGFyICpyZXFfdmVyc2lvbik7CisKK3ZvaWQgX2djcnlfc2V0X2FsbG9jYXRpb25faGFuZGxlciAoZ2NyeV9oYW5kbGVyX2FsbG9jX3QgZnVuY19hbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfYWxsb2NfdCBmdW5jX2FsbG9jX3NlY3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfc2VjdXJlX2NoZWNrX3QgZnVuY19zZWN1cmVfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCBmdW5jX3JlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBmdW5jX2ZyZWUpOwordm9pZCBfZ2NyeV9zZXRfb3V0b2Zjb3JlX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9ub19tZW1fdCBoLCB2b2lkICpvcGFxdWUpOwordm9pZCBfZ2NyeV9zZXRfZmF0YWxlcnJvcl9oYW5kbGVyIChnY3J5X2hhbmRsZXJfZXJyb3JfdCBmbmMsIHZvaWQgKm9wYXF1ZSk7Cit2b2lkIF9nY3J5X3NldF9sb2dfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX2xvZ190IGYsIHZvaWQgKm9wYXF1ZSk7Cit2b2lkIF9nY3J5X3NldF9nZXR0ZXh0X2hhbmRsZXIgKGNvbnN0IGNoYXIgKigqZikoY29uc3QgY2hhciopKTsKK3ZvaWQgX2djcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9wcm9ncmVzc190IGNiLCB2b2lkICpjYl9kYXRhKTsKKworDAorLyogUmV0dXJuIGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIGEgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yCisgICBjb2RlIGluIHRoZSBlcnJvciB2YWx1ZSBFUlIuICAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK19nY3J5X3N0cmVycm9yIChnY3J5X2Vycm9yX3QgZXJyKQoreworICByZXR1cm4gZ3BnX3N0cmVycm9yIChlcnIpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKKyAgIHNvdXJjZSBpbiB0aGUgZXJyb3IgdmFsdWUgRVJSLiAgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitfZ2NyeV9zdHJzb3VyY2UgKGdjcnlfZXJyb3JfdCBlcnIpCit7CisgIHJldHVybiBncGdfc3Ryc291cmNlIChlcnIpOworfQorCisvKiBSZXRyaWV2ZSB0aGUgZXJyb3IgY29kZSBmb3IgdGhlIHN5c3RlbSBlcnJvciBFUlIuICBUaGlzIHJldHVybnMKKyAgIEdQR19FUlJfVU5LTk9XTl9FUlJOTyBpZiB0aGUgc3lzdGVtIGVycm9yIGlzIG5vdCBtYXBwZWQgKHJlcG9ydAorICAgdGhpcykuICAqLworc3RhdGljIGlubGluZSBnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2Vycl9jb2RlX2Zyb21fZXJybm8gKGludCBlcnIpCit7CisgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJyKTsKK30KKworLyogUmV0cmlldmUgdGhlIHN5c3RlbSBlcnJvciBmb3IgdGhlIGVycm9yIGNvZGUgQ09ERS4gIFRoaXMgcmV0dXJucyAwCisgICBpZiBDT0RFIGlzIG5vdCBhIHN5c3RlbSBlcnJvciBjb2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfZ2NyeV9lcnJfY29kZV90b19lcnJubyAoZ2NyeV9lcnJfY29kZV90IGNvZGUpCit7CisgIHJldHVybiBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoY29kZSk7Cit9CisKKy8qIFJldHVybiBhbiBlcnJvciB2YWx1ZSB3aXRoIHRoZSBlcnJvciBzb3VyY2UgU09VUkNFIGFuZCB0aGUgc3lzdGVtCisgICBlcnJvciBFUlIuICAqLworc3RhdGljIGlubGluZSBnY3J5X2Vycl9jb2RlX3QKK19nY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8gKGdwZ19lcnJfc291cmNlX3Qgc291cmNlLCBpbnQgZXJyKQoreworICByZXR1cm4gZ3BnX2Vycl9tYWtlX2Zyb21fZXJybm8gKHNvdXJjZSwgZXJyKTsKK30KKworCisvKiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgd2l0aCB0aGUgc3lzdGVtIGVycm9yIEVSUi4gICovCitzdGF0aWMgaW5saW5lIGdjcnlfZXJyX2NvZGVfdAorX2djcnlfZXJyb3JfZnJvbV9lcnJubyAoaW50IGVycikKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycikpOworfQorCisKKwwKK2dwZ19lcnJfY29kZV90IF9nY3J5X3NleHBfbmV3IChnY3J5X3NleHBfdCAqcmV0c2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dG9kZXRlY3QpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfc2V4cF9jcmVhdGUgKGdjcnlfc2V4cF90ICpyZXRzZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXV0b2RldGVjdCwgdm9pZCAoKmZyZWVmbmMpICh2b2lkICopKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X3NleHBfc3NjYW4gKGdjcnlfc2V4cF90ICpyZXRzZXhwLCBzaXplX3QgKmVycm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9zZXhwX2J1aWxkIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9zZXhwX2J1aWxkX2FycmF5IChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZvaWQgKiphcmdfbGlzdCk7Cit2b2lkIF9nY3J5X3NleHBfcmVsZWFzZSAoZ2NyeV9zZXhwX3Qgc2V4cCk7CitzaXplX3QgX2djcnlfc2V4cF9jYW5vbl9sZW4gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmVycm9mZiwgZ2NyeV9lcnJfY29kZV90ICplcnJjb2RlKTsKK3NpemVfdCBfZ2NyeV9zZXhwX3NwcmludCAoZ2NyeV9zZXhwX3Qgc2V4cCwgaW50IG1vZGUsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbmd0aCk7Cit2b2lkIF9nY3J5X3NleHBfZHVtcCAoY29uc3QgZ2NyeV9zZXhwX3QgYSk7CitnY3J5X3NleHBfdCBfZ2NyeV9zZXhwX2NvbnMgKGNvbnN0IGdjcnlfc2V4cF90IGEsIGNvbnN0IGdjcnlfc2V4cF90IGIpOworZ2NyeV9zZXhwX3QgX2djcnlfc2V4cF9hbGlzdCAoY29uc3QgZ2NyeV9zZXhwX3QgKmFycmF5KTsKK2djcnlfc2V4cF90IF9nY3J5X3NleHBfdmxpc3QgKGNvbnN0IGdjcnlfc2V4cF90IGEsIC4uLik7CitnY3J5X3NleHBfdCBfZ2NyeV9zZXhwX2FwcGVuZCAoY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3Qgbik7CitnY3J5X3NleHBfdCBfZ2NyeV9zZXhwX3ByZXBlbmQgKGNvbnN0IGdjcnlfc2V4cF90IGEsIGNvbnN0IGdjcnlfc2V4cF90IG4pOworZ2NyeV9zZXhwX3QgX2djcnlfc2V4cF9maW5kX3Rva2VuIChnY3J5X3NleHBfdCBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2ssIHNpemVfdCB0b2tsZW4pOworaW50IF9nY3J5X3NleHBfbGVuZ3RoIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKK2djcnlfc2V4cF90IF9nY3J5X3NleHBfbnRoIChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyKTsKK2djcnlfc2V4cF90IF9nY3J5X3NleHBfY2FyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKK2djcnlfc2V4cF90IF9nY3J5X3NleHBfY2RyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKK2djcnlfc2V4cF90IF9nY3J5X3NleHBfY2FkciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCk7Citjb25zdCBjaGFyICpfZ2NyeV9zZXhwX250aF9kYXRhIChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhbGVuKTsKK3ZvaWQgKl9nY3J5X3NleHBfbnRoX2J1ZmZlciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpybGVuZ3RoKTsKK2NoYXIgKl9nY3J5X3NleHBfbnRoX3N0cmluZyAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlcik7CitnY3J5X21waV90IF9nY3J5X3NleHBfbnRoX21waSAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwgaW50IG1waWZtdCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKGdjcnlfc2V4cF90IHNleHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgX0dDUllfR0NDX0FUVFJfU0VOVElORUwoMCk7CisKKyNkZWZpbmUgc2V4cF9uZXcoYSwgYiwgYywgZCkgICAgICAgICBfZ2NyeV9zZXhwX25ldyAoKGEpLCAoYiksIChjKSwgKGQpKQorI2RlZmluZSBzZXhwX2NyZWF0ZShhLCBiLCBjLCBkLCBlKSAgIF9nY3J5X3NleHBfY3JlYXRlICgoYSksIChiKSwgKGMpLCAoZCksIChlKSkKKyNkZWZpbmUgc2V4cF9zc2NhbihhLCBiLCBjLCBkKSAgICAgICBfZ2NyeV9zZXhwX3NzY2FuICgoYSksIChiKSwgKGMpLCAoZCkpCisjZGVmaW5lIHNleHBfYnVpbGQgICAgICAgICAgICAgICAgICAgX2djcnlfc2V4cF9idWlsZAorI2RlZmluZSBzZXhwX2J1aWxkX2FycmF5KGEsIGIsIGMsIGQpIF9nY3J5X3NleHBfYnVpbGRfYXJyYXkgKChhKSwgKGIpLCAoYyksIChkKSkKKyNkZWZpbmUgc2V4cF9yZWxlYXNlKGEpICAgICAgICAgICAgICBfZ2NyeV9zZXhwX3JlbGVhc2UgKChhKSkKKyNkZWZpbmUgc2V4cF9jYW5vbl9sZW4oYSwgYiwgYywgZCkgICBfZ2NyeV9zZXhwX2Nhbm9uX2xlbiAoKGEpLCAoYiksIChjKSwgKGQpKQorI2RlZmluZSBzZXhwX3NwcmludChhLCBiLCBjLCBkKSAgICAgIF9nY3J5X3NleHBfc3ByaW50ICgoYSksIChiKSwgKGMpLCAoZCkpCisjZGVmaW5lIHNleHBfZHVtcChhKSAgICAgICAgICAgICAgICAgX2djcnlfc2V4cF9kdW1wICgoYSkpCisjZGVmaW5lIHNleHBfY29ucyhhLCBiKSAgICAgICAgICAgICAgX2djcnlfc2V4cF9jb25zICgoYSksIChiKSkKKyNkZWZpbmUgc2V4cF9hbGlzdChhKSAgICAgICAgICAgICAgICBfZ2NyeV9zZXhwX2FsaXN0ICgoYSkpCisjZGVmaW5lIHNleHBfdmxpc3QgICAgICAgICAgICAgICAgICAgX2djcnlfc2V4cF92bGlzdAorI2RlZmluZSBzZXhwX2FwcGVuZChhLCBiKSAgICAgICAgICAgIF9nY3J5X3NleHBfYXBwZW5kICgoYSksIChiKSkKKyNkZWZpbmUgc2V4cF9wcmVwZW5kKGEsIGIpICAgICAgICAgICBfZ2NyeV9zZXhwX3ByZXBlbmQgKChhKSwgKGIpKQorI2RlZmluZSBzZXhwX2ZpbmRfdG9rZW4oYSwgYiwgYykgICAgIF9nY3J5X3NleHBfZmluZF90b2tlbiAoKGEpLCAoYiksIChjKSkKKyNkZWZpbmUgc2V4cF9sZW5ndGgoYSkgICAgICAgICAgICAgICBfZ2NyeV9zZXhwX2xlbmd0aCAoKGEpKQorI2RlZmluZSBzZXhwX250aChhLCBiKSAgICAgICAgICAgICAgIF9nY3J5X3NleHBfbnRoICgoYSksIChiKSkKKyNkZWZpbmUgc2V4cF9jYXIoYSkgICAgICAgICAgICAgICAgICBfZ2NyeV9zZXhwX2NhciAoKGEpKQorI2RlZmluZSBzZXhwX2NkcihhKSAgICAgICAgICAgICAgICAgIF9nY3J5X3NleHBfY2RyICgoYSkpCisjZGVmaW5lIHNleHBfY2FkcihhKSAgICAgICAgICAgICAgICAgX2djcnlfc2V4cF9jYWRyICgoYSkpCisjZGVmaW5lIHNleHBfbnRoX2RhdGEoYSwgYiwgYykgICAgICAgX2djcnlfc2V4cF9udGhfZGF0YSAoKGEpLCAoYiksIChjKSkKKyNkZWZpbmUgc2V4cF9udGhfYnVmZmVyKGEsIGIsIGMpICAgICBfZ2NyeV9zZXhwX250aF9idWZmZXIgKChhKSwgKGIpLCAoYykpCisjZGVmaW5lIHNleHBfbnRoX3N0cmluZyhhLCBiKSAgICAgICAgX2djcnlfc2V4cF9udGhfc3RyaW5nICgoYSksIChiKSkKKyNkZWZpbmUgc2V4cF9udGhfbXBpKGEsIGIsIGMpICAgICAgICBfZ2NyeV9zZXhwX250aF9tcGkgKChhKSwgKGIpLCAoYykpCisjZGVmaW5lIHNleHBfZXh0cmFjdF9wYXJhbSAgICAgICAgICAgX2djcnlfc2V4cF9leHRyYWN0X3BhcmFtCisKKworDAorZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfc25ldyAodW5zaWduZWQgaW50IG5iaXRzKTsKK3ZvaWQgX2djcnlfbXBpX3JlbGVhc2UgKGdjcnlfbXBpX3QgYSk7CitnY3J5X21waV90IF9nY3J5X21waV9jb3B5IChjb25zdCBnY3J5X21waV90IGEpOwordm9pZCBfZ2NyeV9tcGlfc25hdGNoIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSk7CitnY3J5X21waV90IF9nY3J5X21waV9zZXQgKGdjcnlfbXBpX3QgdywgY29uc3QgZ2NyeV9tcGlfdCB1KTsKK2djcnlfbXBpX3QgX2djcnlfbXBpX3NldF91aSAoZ2NyeV9tcGlfdCB3LCB1bnNpZ25lZCBsb25nIHUpOworZ2NyeV9lcnJfY29kZV90IF9nY3J5X21waV9nZXRfdWkgKGdjcnlfbXBpX3QgdywgdWxvbmcgKnUpOwordm9pZCBfZ2NyeV9tcGlfc3dhcCAoZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpOworaW50IF9nY3J5X21waV9pc19uZWcgKGdjcnlfbXBpX3QgYSk7Cit2b2lkIF9nY3J5X21waV9uZWcgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1KTsKK3ZvaWQgX2djcnlfbXBpX2FicyAoZ2NyeV9tcGlfdCB3KTsKK2ludCBfZ2NyeV9tcGlfY21wIChjb25zdCBnY3J5X21waV90IHUsIGNvbnN0IGdjcnlfbXBpX3Qgdik7CitpbnQgX2djcnlfbXBpX2NtcF91aSAoY29uc3QgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBsb25nIHYpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbXBpX3NjYW4gKGdjcnlfbXBpX3QgKnJldF9tcGksIGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbnNjYW5uZWQpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbXBpX3ByaW50IChlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbndyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBhKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X21waV9hcHJpbnQgKGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmJ1ZmZlciwgc2l6ZV90ICpud3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBhKTsKK3ZvaWQgX2djcnlfbXBpX2R1bXAgKGNvbnN0IGdjcnlfbXBpX3QgYSk7Cit2b2lkIF9nY3J5X21waV9hZGQgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpOwordm9pZCBfZ2NyeV9tcGlfYWRkX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2KTsKK3ZvaWQgX2djcnlfbXBpX2FkZG0gKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYsIGdjcnlfbXBpX3QgbSk7Cit2b2lkIF9nY3J5X21waV9zdWIgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpOwordm9pZCBfZ2NyeV9tcGlfc3ViX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICk7Cit2b2lkIF9nY3J5X21waV9zdWJtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBnY3J5X21waV90IG0pOwordm9pZCBfZ2NyeV9tcGlfbXVsIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2KTsKK3ZvaWQgX2djcnlfbXBpX211bF91aSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgdiApOwordm9pZCBfZ2NyeV9tcGlfbXVsbSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKTsKK3ZvaWQgX2djcnlfbXBpX211bF8yZXhwIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyBjbnQpOwordm9pZCBfZ2NyeV9tcGlfZGl2IChnY3J5X21waV90IHEsIGdjcnlfbXBpX3QgciwKKyAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IsIGludCByb3VuZCk7Cit2b2lkIF9nY3J5X21waV9tb2QgKGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgZ2NyeV9tcGlfdCBkaXZpc29yKTsKK3ZvaWQgX2djcnlfbXBpX3Bvd20gKGdjcnlfbXBpX3QgdywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBiLCBjb25zdCBnY3J5X21waV90IGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgbSk7CitpbnQgX2djcnlfbXBpX2djZCAoZ2NyeV9tcGlfdCBnLCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYik7CitpbnQgX2djcnlfbXBpX2ludm0gKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IG0pOworZ2NyeV9tcGlfcG9pbnRfdCBfZ2NyeV9tcGlfcG9pbnRfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpOwordm9pZCBfZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCk7Cit2b2lkIF9nY3J5X21waV9wb2ludF9nZXQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHosCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCk7Cit2b2lkIF9nY3J5X21waV9wb2ludF9zbmF0Y2hfZ2V0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV9wb2ludF90IHBvaW50KTsKK2djcnlfbXBpX3BvaW50X3QgX2djcnlfbXBpX3BvaW50X3NldCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfdCB6KTsKK2djcnlfbXBpX3BvaW50X3QgX2djcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQgKGdjcnlfbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHopOworZ3BnX2Vycm9yX3QgX2djcnlfbXBpX2VjX25ldyAoZ2NyeV9jdHhfdCAqcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGtleXBhcmFtLCBjb25zdCBjaGFyICpjdXJ2ZW5hbWUpOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfZWNfZ2V0X21waSAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9jdHhfdCBjdHgsIGludCBjb3B5KTsKK2djcnlfbXBpX3BvaW50X3QgX2djcnlfbXBpX2VjX2dldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCwgaW50IGNvcHkpOworZ3BnX2Vycm9yX3QgX2djcnlfbXBpX2VjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3QgbmV3dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CitncGdfZXJyb3JfdCBfZ2NyeV9tcGlfZWNfc2V0X3BvaW50IChjb25zdCBjaGFyICpuYW1lLCBnY3J5X21waV9wb2ludF90IG5ld3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CitpbnQgX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV9wb2ludF90IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfZWNfdCBjdHgpOwordm9pZCBfZ2NyeV9tcGlfZWNfZHVwIChnY3J5X21waV9wb2ludF90IHcsIGdjcnlfbXBpX3BvaW50X3QgdSwgZ2NyeV9jdHhfdCBjdHgpOwordm9pZCBfZ2NyeV9tcGlfZWNfYWRkIChnY3J5X21waV9wb2ludF90IHcsCisgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgdSwgZ2NyeV9tcGlfcG9pbnRfdCB2LCBtcGlfZWNfdCBjdHgpOwordm9pZCBfZ2NyeV9tcGlfZWNfbXVsIChnY3J5X21waV9wb2ludF90IHcsIGdjcnlfbXBpX3QgbiwgZ2NyeV9tcGlfcG9pbnRfdCB1LAorICAgICAgICAgICAgICAgICAgICAgICBtcGlfZWNfdCBjdHgpOworaW50IF9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoZ2NyeV9tcGlfcG9pbnRfdCB3LCBtcGlfZWNfdCBjdHgpOwordW5zaWduZWQgaW50IF9nY3J5X21waV9nZXRfbmJpdHMgKGdjcnlfbXBpX3QgYSk7CitpbnQgX2djcnlfbXBpX3Rlc3RfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgX2djcnlfbXBpX3NldF9iaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOwordm9pZCBfZ2NyeV9tcGlfY2xlYXJfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgX2djcnlfbXBpX3NldF9oaWdoYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgX2djcnlfbXBpX2NsZWFyX2hpZ2hiaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOwordm9pZCBfZ2NyeV9tcGlfcnNoaWZ0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOwordm9pZCBfZ2NyeV9tcGlfbHNoaWZ0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfc2V0X29wYXF1ZSAoZ2NyeV9tcGlfdCBhLCB2b2lkICpwLCB1bnNpZ25lZCBpbnQgbmJpdHMpOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfc2V0X29wYXF1ZV9jb3B5IChnY3J5X21waV90IGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IG5iaXRzKTsKK3ZvaWQgKl9nY3J5X21waV9nZXRfb3BhcXVlIChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCAqbmJpdHMpOwordm9pZCBfZ2NyeV9tcGlfc2V0X2ZsYWcgKGdjcnlfbXBpX3QgYSwgZW51bSBnY3J5X21waV9mbGFnIGZsYWcpOwordm9pZCBfZ2NyeV9tcGlfY2xlYXJfZmxhZyAoZ2NyeV9tcGlfdCBhLCBlbnVtIGdjcnlfbXBpX2ZsYWcgZmxhZyk7CitpbnQgX2djcnlfbXBpX2dldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKTsKKworCisvKiBQcml2YXRlIGZ1bmN0aW9uIC0gZG8gbm90IHVzZS4gICovCisvKiBnY3J5X21waV90IF9nY3J5X21waV9nZXRfY29uc3QgKGludCBubyk7ICovCisKKy8qIFdlIG5lZWQgb3VyIGludGVybmFsIHZlcnNpb25zIG9mIHRoZSBtYWNyb3MuICAqLworI2lmbmRlZiBHQ1JZUFRfTk9fTVBJX01BQ1JPUworIyBlcnJvciBHQ1JZUFRfTk9fTVBJX01BQ1JPUyBpcyBub3QgZGVmaW5lZAorI2VuZGlmCisKKyNkZWZpbmUgbXBpX25ldyhuKSAgICAgICAgICAgICBfZ2NyeV9tcGlfbmV3ICgobikpCisjZGVmaW5lIG1waV9zZWN1cmVfbmV3KCBuICkgICAgX2djcnlfbXBpX3NuZXcgKChuKSkKKyNkZWZpbmUgbXBpX3NuZXcobikgICAgICAgICAgICBfZ2NyeV9tcGlfc25ldyAoKG4pKQorCisjZGVmaW5lIG1waV9yZWxlYXNlKGEpICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfZ2NyeV9tcGlfcmVsZWFzZSAoKGEpKTtcCisgICAgICAoYSkgPSBOVUxMOyAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlICgwKQorCisjZGVmaW5lIG1waV9zbmF0Y2goIHcsIHUpICAgICAgX2djcnlfbXBpX3NuYXRjaCggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfc2V0KCB3LCB1KSAgICAgICAgIF9nY3J5X21waV9zZXQoICh3KSwgKHUpICkKKyNkZWZpbmUgbXBpX3NldF91aSggdywgdSkgICAgICBfZ2NyeV9tcGlfc2V0X3VpKCAodyksICh1KSApCisjZGVmaW5lIG1waV9nZXRfdWkoYSxiKSAgICAgICAgX2djcnlfbXBpX2dldF91aSggKGEpLCAoYikgKQorI2RlZmluZSBtcGlfc3dhcChhLGIpICAgICAgICAgIF9nY3J5X21waV9zd2FwICgoYSksKGIpKQorI2RlZmluZSBtcGlfYWJzKCB3ICkgICAgICAgICAgIF9nY3J5X21waV9hYnMoICh3KSApCisjZGVmaW5lIG1waV9uZWcoIHcsIHUpICAgICAgICAgX2djcnlfbXBpX25lZyggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfY21wKCB1LCB2ICkgICAgICAgIF9nY3J5X21waV9jbXAoICh1KSwgKHYpICkKKyNkZWZpbmUgbXBpX2NtcF91aSggdSwgdiApICAgICBfZ2NyeV9tcGlfY21wX3VpKCAodSksICh2KSApCisjZGVmaW5lIG1waV9pc19uZWcoIGEgKSAgICAgICAgX2djcnlfbXBpX2lzX25lZyAoKGEpKQorCisjZGVmaW5lIG1waV9hZGRfdWkodyx1LHYpICAgICAgX2djcnlfbXBpX2FkZF91aSgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX2FkZCh3LHUsdikgICAgICAgICBfZ2NyeV9tcGlfYWRkICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX2FkZG0odyx1LHYsbSkgICAgICBfZ2NyeV9tcGlfYWRkbSAoKHcpLCh1KSwodiksKG0pKQorI2RlZmluZSBtcGlfc3ViX3VpKHcsdSx2KSAgICAgIF9nY3J5X21waV9zdWJfdWkgKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfc3ViKHcsdSx2KSAgICAgICAgIF9nY3J5X21waV9zdWIgKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfc3VibSh3LHUsdixtKSAgICAgIF9nY3J5X21waV9zdWJtICgodyksKHUpLCh2KSwobSkpCisjZGVmaW5lIG1waV9tdWxfdWkodyx1LHYpICAgICAgX2djcnlfbXBpX211bF91aSAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9tdWxfMmV4cCh3LHUsdikgICAgX2djcnlfbXBpX211bF8yZXhwICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX211bCh3LHUsdikgICAgICAgICBfZ2NyeV9tcGlfbXVsICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX211bG0odyx1LHYsbSkgICAgICBfZ2NyeV9tcGlfbXVsbSAoKHcpLCh1KSwodiksKG0pKQorI2RlZmluZSBtcGlfcG93bSh3LGIsZSxtKSAgICAgIF9nY3J5X21waV9wb3dtICggKHcpLCAoYiksIChlKSwgKG0pICkKKyNkZWZpbmUgbXBpX3RkaXYocSxyLGEsbSkgICAgICBfZ2NyeV9tcGlfZGl2ICggKHEpLCAociksIChhKSwgKG0pLCAwKQorI2RlZmluZSBtcGlfZmRpdihxLHIsYSxtKSAgICAgIF9nY3J5X21waV9kaXYgKCAocSksIChyKSwgKGEpLCAobSksIC0xKQorI2RlZmluZSBtcGlfbW9kKHIsYSxtKSAgICAgICAgIF9nY3J5X21waV9tb2QgKChyKSwgKGEpLCAobSkpCisjZGVmaW5lIG1waV9nY2QoZyxhLGIpICAgICAgICAgX2djcnlfbXBpX2djZCAoIChnKSwgKGEpLCAoYikgKQorI2RlZmluZSBtcGlfaW52bShnLGEsYikgICAgICAgIF9nY3J5X21waV9pbnZtICggKGcpLCAoYSksIChiKSApCisKKyNkZWZpbmUgbXBpX3BvaW50X25ldyhuKSAgICAgICBfZ2NyeV9tcGlfcG9pbnRfbmV3KChuKSkKKworI2RlZmluZSBtcGlfcG9pbnRfcmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX2djcnlfbXBpX3BvaW50X3JlbGVhc2UgKChwKSk7ICAgICAgICAgICAgIFwKKyAgICAgIChwKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBtcGlfcG9pbnRfZ2V0KHgseSx6LHApICAgICAgICBfZ2NyeV9tcGlfcG9pbnRfZ2V0KCh4KSwoeSksKHopLChwKSkKKyNkZWZpbmUgbXBpX3BvaW50X3NuYXRjaF9nZXQoeCx5LHoscCkgX2djcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQoKHgpLCh5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeiksKHApKQorI2RlZmluZSBtcGlfcG9pbnRfc2V0KHAseCx5LHopICAgICAgICBfZ2NyeV9tcGlfcG9pbnRfc2V0KChwKSwoeCksKHkpLCh6KSkKKyNkZWZpbmUgbXBpX3BvaW50X3NuYXRjaF9zZXQocCx4LHkseikgX2djcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQoKHApLCh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeSksKHopKQorCisjZGVmaW5lIG1waV9nZXRfbmJpdHMoYSkgICAgICAgX2djcnlfbXBpX2dldF9uYml0cyAoKGEpKQorI2RlZmluZSBtcGlfdGVzdF9iaXQoYSxiKSAgICAgIF9nY3J5X21waV90ZXN0X2JpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX3NldF9iaXQoYSxiKSAgICAgICBfZ2NyeV9tcGlfc2V0X2JpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX3NldF9oaWdoYml0KGEsYikgICBfZ2NyeV9tcGlfc2V0X2hpZ2hiaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9jbGVhcl9iaXQoYSxiKSAgICAgX2djcnlfbXBpX2NsZWFyX2JpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX2NsZWFyX2hpZ2hiaXQoYSxiKSBfZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX3JzaGlmdChhLGIsYykgICAgICBfZ2NyeV9tcGlfcnNoaWZ0ICgoYSksKGIpLChjKSkKKyNkZWZpbmUgbXBpX2xzaGlmdChhLGIsYykgICAgICBfZ2NyeV9tcGlfbHNoaWZ0ICgoYSksKGIpLChjKSkKKworI2RlZmluZSBtcGlfc2V0X29wYXF1ZShhLGIsYykgIF9nY3J5X21waV9zZXRfb3BhcXVlICgoYSksIChiKSwgKGMpKQorI2RlZmluZSBtcGlfZ2V0X29wYXF1ZShhLGIpICAgIF9nY3J5X21waV9nZXRfb3BhcXVlICgoYSksIChiKSkKKyNkZWZpbmUgbXBpX3NldF9mbGFnKGEsZikgICAgICBfZ2NyeV9tcGlfc2V0X2ZsYWcgKChhKSwgKGYpKQorI2RlZmluZSBtcGlfc2V0X2ZsYWcoYSxmKSAgICAgIF9nY3J5X21waV9zZXRfZmxhZyAoKGEpLCAoZikpCisjZGVmaW5lIG1waV9jbGVhcl9mbGFnKGEsZikgICAgX2djcnlfbXBpX2NsZWFyX2ZsYWcgKChhKSwgKGYpKQorI2RlZmluZSBtcGlfZ2V0X2ZsYWcoYSxmKSAgICAgIF9nY3J5X21waV9nZXRfZmxhZyAoKGEpLCAoZikpCisKKworI2VuZGlmIC8qR0NSWV9HQ1JZUFRfSU5UX0gqLwpkaWZmIC0tZ2l0IGEvc3JjL2djcnlwdC5oIGIvc3JjL2djcnlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZGE3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ2NyeXB0LmgKQEAgLTAsMCArMSwxNjgzIEBACisvKiBnY3J5cHQuaCAtICBHTlUgQ3J5cHRvZ3JhcGhpYyBMaWJyYXJ5IEludGVyZmFjZSAgICAgICAgICAgICAgLSotIGMgLSotCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgKiAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCisgKiAgICAgICAgICAgICAgIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzICBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIEZpbGU6IHNyYy9nY3J5cHQuaC4gIEdlbmVyYXRlZCBmcm9tIGdjcnlwdC5oLmluIGJ5IGNvbmZpZ3VyZS4KKyAqLworCisjaWZuZGVmIF9HQ1JZUFRfSAorI2RlZmluZSBfR0NSWVBUX0gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z3BnLWVycm9yLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyMgaWZuZGVmIF9fR05VQ19fCisgIHR5cGVkZWYgbG9uZyBzc2l6ZV90OworICB0eXBlZGVmIGludCAgcGlkX3Q7CisjIGVuZGlmIC8qIV9fR05VQ19fKi8KKyNlbHNlCisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmIC8qIV9XSU4zMiovCisKK3R5cGVkZWYgc29ja2xlbl90IGdjcnlfc29ja2xlbl90OworCisvKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBlcnJvciBjb2RlIGNvbXBhdGliaWxpdHkuICovCisjZGVmaW5lIF9HQ1JZX0VSUl9TT1VSQ0VfREVGQVVMVCBHUEdfRVJSX1NPVVJDRV9HQ1JZUFQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNpZiAwIC8qIChLZWVwIEVtYWNzZW5zJyBhdXRvLWluZGVudCBoYXBweS4pICovCit9CisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvZiB0aGUgbGlicmFyeS4gSXQKKyAgIHNob3VsZCBub3QgYmUgdXNlZCBieSBhIHByb2dyYW0gYmVjYXVzZSBnY3J5X2NoZWNrX3ZlcnNpb24oKSBzaG91bGQKKyAgIHJldHVybiB0aGUgc2FtZSB2ZXJzaW9uLiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBtYWNybyBpcyB0byBsZXQKKyAgIGF1dG9jb25mICh1c2luZyB0aGUgQU1fUEFUSF9HQ1JZUFQgbWFjcm8pIGNoZWNrIHRoYXQgdGhpcyBoZWFkZXIKKyAgIG1hdGNoZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5LiAgKi8KKyNkZWZpbmUgR0NSWVBUX1ZFUlNJT04gIjEuNi4xIgorCisvKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBoZWFkZXIuICBJdCBtYXkgYmUgdXNlZCB0byBoYW5kbGUgbWlub3IKKyAgIEFQSSBpbmNvbXBhdGliaWxpdGllcy4gICovCisjZGVmaW5lIEdDUllQVF9WRVJTSU9OX05VTUJFUiAweDAxMDYwMQorCisKKy8qIEludGVybmFsOiBXZSBjYW4ndCB1c2UgdGhlIGNvbnZlbmllbmNlIG1hY3JvcyBmb3IgdGhlIG11bHRpCisgICBwcmVjaXNpb24gaW50ZWdlciBmdW5jdGlvbnMgd2hlbiBidWlsZGluZyB0aGlzIGxpYnJhcnkuICovCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyNpZm5kZWYgR0NSWVBUX05PX01QSV9NQUNST1MKKyNkZWZpbmUgR0NSWVBUX05PX01QSV9NQUNST1MgMQorI2VuZGlmCisjZW5kaWYKKworLyogV2Ugd2FudCB0byB1c2UgZ2NjIGF0dHJpYnV0ZXMgd2hlbiBwb3NzaWJsZS4gIFdhcm5pbmc6IERvbid0IHVzZQorICAgdGhlc2UgbWFjcm9zIGluIHlvdXIgcHJvZ3JhbXM6IEFzIGluZGljYXRlZCBieSB0aGUgbGVhZGluZworICAgdW5kZXJzY29yZSB0aGV5IGFyZSBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZS4gKi8KKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIF9HQ1JZX0dDQ19WRVJTSU9OIChfX0dOVUNfXyAqIDEwMDAwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19HTlVDX1BBVENITEVWRUxfXykKKworI2lmIF9HQ1JZX0dDQ19WRVJTSU9OID49IDMwMTAwCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXyAoKF9fZGVwcmVjYXRlZF9fKSkKKyNlbmRpZgorCisjaWYgX0dDUllfR0NDX1ZFUlNJT04gPj0gMjk2MDAKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfUFVSRSAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbmRpZgorCisjaWYgX0dDUllfR0NDX1ZFUlNJT04gPj0gMzAyMDAKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfTUFMTE9DICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpCisjZW5kaWYKKworI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9QUklOVEYoZixhKSAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLGYsYSkpKQorCisjaWYgX0dDUlRfR0NDX1ZFUlNJT04gPj0gNDAwMDAKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfU0VOVElORUwoYSkgX19hdHRyaWJ1dGVfXyAoKHNlbnRpbmVsKGEpKSkKKyNlbmRpZgorCisjZW5kaWYgLypfX0dOVUNfXyovCisKKyNpZm5kZWYgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRAorI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVECisjZW5kaWYKKyNpZm5kZWYgX0dDUllfR0NDX0FUVFJfUFVSRQorI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9QVVJFCisjZW5kaWYKKyNpZm5kZWYgX0dDUllfR0NDX0FUVFJfTUFMTE9DCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX01BTExPQworI2VuZGlmCisjaWZuZGVmIF9HQ1JZX0dDQ19BVFRSX1BSSU5URgorI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9QUklOVEYoZixhKQorI2VuZGlmCisjaWZuZGVmIF9HQ1JZX0dDQ19BVFRSX1NFTlRJTkVMCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX1NFTlRJTkVMKGEpCisjZW5kaWYKKworLyogTWFrZSB1cCBhbiBhdHRyaWJ1dGUgdG8gbWFyayBmdW5jdGlvbnMgYW5kIHR5cGVzIGFzIGRlcHJlY2F0ZWQgYnV0CisgICBhbGxvdyBpbnRlcm5hbCB1c2UgYnkgTGliZ2NyeXB0LiAgKi8KKyNpZmRlZiBfR0NSWVBUX0lOX0xJQkdDUllQVAorI2RlZmluZSBfR0NSWV9BVFRSX0lOVEVSTkFMCisjZWxzZQorI2RlZmluZSBfR0NSWV9BVFRSX0lOVEVSTkFMCV9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQKKyNlbmRpZgorCisvKiBXcmFwcGVycyBmb3IgdGhlIGxpYmdwZy1lcnJvciBsaWJyYXJ5LiAgKi8KKwordHlwZWRlZiBncGdfZXJyb3JfdCBnY3J5X2Vycm9yX3Q7Cit0eXBlZGVmIGdwZ19lcnJfY29kZV90IGdjcnlfZXJyX2NvZGVfdDsKK3R5cGVkZWYgZ3BnX2Vycl9zb3VyY2VfdCBnY3J5X2Vycl9zb3VyY2VfdDsKKworc3RhdGljIEdQR19FUlJfSU5MSU5FIGdjcnlfZXJyb3JfdAorZ2NyeV9lcnJfbWFrZSAoZ2NyeV9lcnJfc291cmNlX3Qgc291cmNlLCBnY3J5X2Vycl9jb2RlX3QgY29kZSkKK3sKKyAgcmV0dXJuIGdwZ19lcnJfbWFrZSAoc291cmNlLCBjb2RlKTsKK30KKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBHUEdfRVJSX1NPVVJDRV9ERUZBVUxUIGJlZm9yZSBpbmNsdWRpbmcgdGhpcworICAgZmlsZSB0byBzcGVjaWZ5IGEgZGVmYXVsdCBzb3VyY2UgZm9yIGdwZ19lcnJvci4gICovCisjaWZuZGVmIEdDUllfRVJSX1NPVVJDRV9ERUZBVUxUCisjZGVmaW5lIEdDUllfRVJSX1NPVVJDRV9ERUZBVUxUICBHUEdfRVJSX1NPVVJDRV9VU0VSXzEKKyNlbmRpZgorCitzdGF0aWMgR1BHX0VSUl9JTkxJTkUgZ2NyeV9lcnJvcl90CitnY3J5X2Vycm9yIChnY3J5X2Vycl9jb2RlX3QgY29kZSkKK3sKKyAgcmV0dXJuIGdjcnlfZXJyX21ha2UgKEdDUllfRVJSX1NPVVJDRV9ERUZBVUxULCBjb2RlKTsKK30KKworc3RhdGljIEdQR19FUlJfSU5MSU5FIGdjcnlfZXJyX2NvZGVfdAorZ2NyeV9lcnJfY29kZSAoZ2NyeV9lcnJvcl90IGVycikKK3sKKyAgcmV0dXJuIGdwZ19lcnJfY29kZSAoZXJyKTsKK30KKworCitzdGF0aWMgR1BHX0VSUl9JTkxJTkUgZ2NyeV9lcnJfc291cmNlX3QKK2djcnlfZXJyX3NvdXJjZSAoZ2NyeV9lcnJvcl90IGVycikKK3sKKyAgcmV0dXJuIGdwZ19lcnJfc291cmNlIChlcnIpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKKyAgIGNvZGUgaW4gdGhlIGVycm9yIHZhbHVlIEVSUi4gICovCitjb25zdCBjaGFyICpnY3J5X3N0cmVycm9yIChnY3J5X2Vycm9yX3QgZXJyKTsKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIGEgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yCisgICBzb3VyY2UgaW4gdGhlIGVycm9yIHZhbHVlIEVSUi4gICovCitjb25zdCBjaGFyICpnY3J5X3N0cnNvdXJjZSAoZ2NyeV9lcnJvcl90IGVycik7CisKKy8qIFJldHJpZXZlIHRoZSBlcnJvciBjb2RlIGZvciB0aGUgc3lzdGVtIGVycm9yIEVSUi4gIFRoaXMgcmV0dXJucworICAgR1BHX0VSUl9VTktOT1dOX0VSUk5PIGlmIHRoZSBzeXN0ZW0gZXJyb3IgaXMgbm90IG1hcHBlZCAocmVwb3J0CisgICB0aGlzKS4gICovCitnY3J5X2Vycl9jb2RlX3QgZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vIChpbnQgZXJyKTsKKworLyogUmV0cmlldmUgdGhlIHN5c3RlbSBlcnJvciBmb3IgdGhlIGVycm9yIGNvZGUgQ09ERS4gIFRoaXMgcmV0dXJucyAwCisgICBpZiBDT0RFIGlzIG5vdCBhIHN5c3RlbSBlcnJvciBjb2RlLiAgKi8KK2ludCBnY3J5X2Vycl9jb2RlX3RvX2Vycm5vIChnY3J5X2Vycl9jb2RlX3QgY29kZSk7CisKKy8qIFJldHVybiBhbiBlcnJvciB2YWx1ZSB3aXRoIHRoZSBlcnJvciBzb3VyY2UgU09VUkNFIGFuZCB0aGUgc3lzdGVtCisgICBlcnJvciBFUlIuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfZXJyX21ha2VfZnJvbV9lcnJubyAoZ2NyeV9lcnJfc291cmNlX3Qgc291cmNlLCBpbnQgZXJyKTsKKworLyogUmV0dXJuIGFuIGVycm9yIHZhbHVlIHdpdGggdGhlIHN5c3RlbSBlcnJvciBFUlIuICAqLworZ2NyeV9lcnJfY29kZV90IGdjcnlfZXJyb3JfZnJvbV9lcnJubyAoaW50IGVycik7CisKKwwKKy8qIE5PVEU6IFNpbmNlIExpYmdjcnlwdCAxLjYgdGhlIHRocmVhZCBjYWxsYmFja3MgYXJlIG5vdCBhbnltb3JlCisgICB1c2VkLiAgSG93ZXZlciB3ZSBrZWVwIGl0IHRvIGFsbG93IGZvciBzb21lIHNvdXJjZSBjb2RlCisgICBjb21wYXRpYmlsaXR5IGlmIHVzZWQgaW4gdGhlIHN0YW5kYXJkIHdheS4gICovCisKKy8qIENvbnN0YW50cyBkZWZpbmluZyB0aGUgdGhyZWFkIG1vZGVsIHRvIHVzZS4gIFVzZWQgd2l0aCB0aGUgT1BUSU9OCisgICBmaWVsZCBvZiB0aGUgc3RydWN0IGdjcnlfdGhyZWFkX2Nicy4gICovCisjZGVmaW5lIEdDUllfVEhSRUFEX09QVElPTl9ERUZBVUxUICAwCisjZGVmaW5lIEdDUllfVEhSRUFEX09QVElPTl9VU0VSICAgICAxCisjZGVmaW5lIEdDUllfVEhSRUFEX09QVElPTl9QVEggICAgICAyCisjZGVmaW5lIEdDUllfVEhSRUFEX09QVElPTl9QVEhSRUFEICAzCisKKy8qIFRoZSB2ZXJzaW9uIG51bWJlciBlbmNvZGVkIGluIHRoZSBPUFRJT04gZmllbGQgb2YgdGhlIHN0cnVjdAorICAgZ2NyeV90aHJlYWRfY2JzLiAgKi8KKyNkZWZpbmUgR0NSWV9USFJFQURfT1BUSU9OX1ZFUlNJT04gIDEKKworLyogV3JhcHBlciBmb3Igc3RydWN0IGF0aF9vcHMuICAqLworc3RydWN0IGdjcnlfdGhyZWFkX2NicworeworICAvKiBUaGUgT1BUSU9OIGZpZWxkIGVuY29kZXMgdGhlIHRocmVhZCBtb2RlbCBhbmQgdGhlIHZlcnNpb24gbnVtYmVyCisgICAgIG9mIHRoaXMgc3RydWN0dXJlLgorICAgICAgIEJpdHMgIDcgLSAwICBhcmUgdXNlZCBmb3IgdGhlIHRocmVhZCBtb2RlbAorICAgICAgIEJpdHMgMTUgLSA4ICBhcmUgdXNlZCBmb3IgdGhlIHZlcnNpb24gbnVtYmVyLiAgKi8KKyAgdW5zaWduZWQgaW50IG9wdGlvbjsKK30gX0dDUllfQVRUUl9JTlRFUk5BTDsKKworI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgc3RydWN0IGdjcnlfdGhyZWFkX2NicyBnY3J5X3RocmVhZHNfcHRoID0geyAgICAgICAgICAgICAgICAgICAgXAorICAgIChHQ1JZX1RIUkVBRF9PUFRJT05fUFRIIHwgKEdDUllfVEhSRUFEX09QVElPTl9WRVJTSU9OIDw8IDgpKX0KKworI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRF9JTVBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgc3RydWN0IGdjcnlfdGhyZWFkX2NicyBnY3J5X3RocmVhZHNfcHRocmVhZCA9IHsgICAgICAgICAgICAgICAgXAorICAgIChHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRCB8IChHQ1JZX1RIUkVBRF9PUFRJT05fVkVSU0lPTiA8PCA4KSl9CisKKworDAorLyogQSBnZW5lcmljIGNvbnRleHQgb2JqZWN0IGFzIHVzZWQgYnkgc29tZSBmdW5jdGlvbnMuICAqLworc3RydWN0IGdjcnlfY29udGV4dDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfY29udGV4dCAqZ2NyeV9jdHhfdDsKKworLyogVGhlIGRhdGEgb2JqZWN0cyB1c2VkIHRvIGhvbGQgbXVsdGkgcHJlY2lzaW9uIGludGVnZXJzLiAgKi8KK3N0cnVjdCBnY3J5X21waTsKK3R5cGVkZWYgc3RydWN0IGdjcnlfbXBpICpnY3J5X21waV90Oworc3RydWN0IGdjcnlfbXBpX3BvaW50OwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tcGlfcG9pbnQgKmdjcnlfbXBpX3BvaW50X3Q7CisKKyNpZm5kZWYgR0NSWVBUX05PX0RFUFJFQ0FURUQKK3R5cGVkZWYgc3RydWN0IGdjcnlfbXBpICpHQ1JZX01QSSBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tcGkgKkdjcnlNUEkgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKKyNlbmRpZgorCisvKiBBIHN0cnVjdHVyZSB1c2VkIGZvciBzY2F0dGVyIGdhdGhlciBoYXNoaW5nLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHNpemVfdCBzaXplOyAgLyogVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBidWZmZXIgb3IgMC4gICovCisgIHNpemVfdCBvZmY7ICAgLyogT2Zmc2V0IGludG8gdGhlIGJ1ZmZlci4gICovCisgIHNpemVfdCBsZW47ICAgLyogVGhlIHVzZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIuICAqLworICB2b2lkICpkYXRhOyAgIC8qIFRoZSBidWZmZXIuICAqLworfSBnY3J5X2J1ZmZlcl90OworCisKKwwKKworLyogQ2hlY2sgdGhhdCB0aGUgbGlicmFyeSBmdWxmaWxscyB0aGUgdmVyc2lvbiByZXF1aXJlbWVudC4gICovCitjb25zdCBjaGFyICpnY3J5X2NoZWNrX3ZlcnNpb24gKGNvbnN0IGNoYXIgKnJlcV92ZXJzaW9uKTsKKworLyogQ29kZXMgZm9yIGZ1bmN0aW9uIGRpc3BhdGNoZXJzLiAgKi8KKworLyogQ29kZXMgdXNlZCB3aXRoIHRoZSBnY3J5X2NvbnRyb2wgZnVuY3Rpb24uICovCitlbnVtIGdjcnlfY3RsX2NtZHMKKyAgeworICAgIC8qIE5vdGU6IDEgLi4gMiBhcmUgbm90IGFueW1vcmUgdXNlZC4gKi8KKyAgICBHQ1JZQ1RMX0NGQl9TWU5DID0gMywKKyAgICBHQ1JZQ1RMX1JFU0VUICAgID0gNCwgICAvKiBlLmcuIGZvciBNRHMgKi8KKyAgICBHQ1JZQ1RMX0ZJTkFMSVpFID0gNSwKKyAgICBHQ1JZQ1RMX0dFVF9LRVlMRU4gPSA2LAorICAgIEdDUllDVExfR0VUX0JMS0xFTiA9IDcsCisgICAgR0NSWUNUTF9URVNUX0FMR08gPSA4LAorICAgIEdDUllDVExfSVNfU0VDVVJFID0gOSwKKyAgICBHQ1JZQ1RMX0dFVF9BU05PSUQgPSAxMCwKKyAgICBHQ1JZQ1RMX0VOQUJMRV9BTEdPID0gMTEsCisgICAgR0NSWUNUTF9ESVNBQkxFX0FMR08gPSAxMiwKKyAgICBHQ1JZQ1RMX0RVTVBfUkFORE9NX1NUQVRTID0gMTMsCisgICAgR0NSWUNUTF9EVU1QX1NFQ01FTV9TVEFUUyA9IDE0LAorICAgIEdDUllDVExfR0VUX0FMR09fTlBLRVkgICAgPSAxNSwKKyAgICBHQ1JZQ1RMX0dFVF9BTEdPX05TS0VZICAgID0gMTYsCisgICAgR0NSWUNUTF9HRVRfQUxHT19OU0lHTiAgICA9IDE3LAorICAgIEdDUllDVExfR0VUX0FMR09fTkVOQ1IgICAgPSAxOCwKKyAgICBHQ1JZQ1RMX1NFVF9WRVJCT1NJVFkgICAgID0gMTksCisgICAgR0NSWUNUTF9TRVRfREVCVUdfRkxBR1MgICA9IDIwLAorICAgIEdDUllDVExfQ0xFQVJfREVCVUdfRkxBR1MgPSAyMSwKKyAgICBHQ1JZQ1RMX1VTRV9TRUNVUkVfUk5EUE9PTD0gMjIsCisgICAgR0NSWUNUTF9EVU1QX01FTU9SWV9TVEFUUyA9IDIzLAorICAgIEdDUllDVExfSU5JVF9TRUNNRU0gICAgICAgPSAyNCwKKyAgICBHQ1JZQ1RMX1RFUk1fU0VDTUVNICAgICAgID0gMjUsCisgICAgR0NSWUNUTF9ESVNBQkxFX1NFQ01FTV9XQVJOID0gMjcsCisgICAgR0NSWUNUTF9TVVNQRU5EX1NFQ01FTV9XQVJOID0gMjgsCisgICAgR0NSWUNUTF9SRVNVTUVfU0VDTUVNX1dBUk4gID0gMjksCisgICAgR0NSWUNUTF9EUk9QX1BSSVZTICAgICAgICAgID0gMzAsCisgICAgR0NSWUNUTF9FTkFCTEVfTV9HVUFSRCAgICAgID0gMzEsCisgICAgR0NSWUNUTF9TVEFSVF9EVU1QICAgICAgICAgID0gMzIsCisgICAgR0NSWUNUTF9TVE9QX0RVTVAgICAgICAgICAgID0gMzMsCisgICAgR0NSWUNUTF9HRVRfQUxHT19VU0FHRSAgICAgID0gMzQsCisgICAgR0NSWUNUTF9JU19BTEdPX0VOQUJMRUQgICAgID0gMzUsCisgICAgR0NSWUNUTF9ESVNBQkxFX0lOVEVSTkFMX0xPQ0tJTkcgPSAzNiwKKyAgICBHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNICAgICAgPSAzNywKKyAgICBHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVEID0gMzgsCisgICAgR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRF9QID0gMzksCisgICAgR0NSWUNUTF9BTllfSU5JVElBTElaQVRJT05fUCA9IDQwLAorICAgIEdDUllDVExfU0VUX0NCQ19DVFMgPSA0MSwKKyAgICBHQ1JZQ1RMX1NFVF9DQkNfTUFDID0gNDIsCisgICAgLyogTm90ZTogNDMgaXMgbm90IGFueW1vcmUgdXNlZC4gKi8KKyAgICBHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET00gPSA0NCwKKyAgICBHQ1JZQ1RMX1NFVF9SQU5ET01fU0VFRF9GSUxFID0gNDUsCisgICAgR0NSWUNUTF9VUERBVEVfUkFORE9NX1NFRURfRklMRSA9IDQ2LAorICAgIEdDUllDVExfU0VUX1RIUkVBRF9DQlMgPSA0NywKKyAgICBHQ1JZQ1RMX0ZBU1RfUE9MTCA9IDQ4LAorICAgIEdDUllDVExfU0VUX1JBTkRPTV9EQUVNT05fU09DS0VUID0gNDksCisgICAgR0NSWUNUTF9VU0VfUkFORE9NX0RBRU1PTiA9IDUwLAorICAgIEdDUllDVExfRkFLRURfUkFORE9NX1AgPSA1MSwKKyAgICBHQ1JZQ1RMX1NFVF9STkRFR0RfU09DS0VUID0gNTIsCisgICAgR0NSWUNUTF9QUklOVF9DT05GSUcgPSA1MywKKyAgICBHQ1JZQ1RMX09QRVJBVElPTkFMX1AgPSA1NCwKKyAgICBHQ1JZQ1RMX0ZJUFNfTU9ERV9QID0gNTUsCisgICAgR0NSWUNUTF9GT1JDRV9GSVBTX01PREUgPSA1NiwKKyAgICBHQ1JZQ1RMX1NFTEZURVNUID0gNTcsCisgICAgLyogTm90ZTogNTggLi4gNjIgYXJlIHVzZWQgaW50ZXJuYWxseS4gICovCisgICAgR0NSWUNUTF9ESVNBQkxFX0hXRiA9IDYzLAorICAgIEdDUllDVExfU0VUX0VORk9SQ0VEX0ZJUFNfRkxBRyA9IDY0LAorICAgIEdDUllDVExfU0VUX1BSRUZFUlJFRF9STkdfVFlQRSA9IDY1LAorICAgIEdDUllDVExfR0VUX0NVUlJFTlRfUk5HX1RZUEUgPSA2NiwKKyAgICBHQ1JZQ1RMX0RJU0FCTEVfTE9DS0VEX1NFQ01FTSA9IDY3LAorICAgIEdDUllDVExfRElTQUJMRV9QUklWX0RST1AgPSA2OCwKKyAgICBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUyA9IDY5LAorICAgIEdDUllDVExfQ0xPU0VfUkFORE9NX0RFVklDRSA9IDcwLAorICAgIEdDUllDVExfSU5BQ1RJVkFURV9GSVBTX0ZMQUcgPSA3MSwKKyAgICBHQ1JZQ1RMX1JFQUNUSVZBVEVfRklQU19GTEFHID0gNzIKKyAgfTsKKworLyogUGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgZGVmaW5lZCBieSBDTUQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jb250cm9sIChlbnVtIGdjcnlfY3RsX2NtZHMgQ01ELCAuLi4pOworCisMCisvKiBTLWV4cHJlc3Npb24gbWFuYWdlbWVudC4gKi8KKworLyogVGhlIG9iamVjdCB0byByZXByZXNlbnQgYW4gUy1leHByZXNzaW9uIGFzIHVzZWQgd2l0aCB0aGUgcHVibGljIGtleQorICAgZnVuY3Rpb25zLiAgKi8KK3N0cnVjdCBnY3J5X3NleHA7Cit0eXBlZGVmIHN0cnVjdCBnY3J5X3NleHAgKmdjcnlfc2V4cF90OworCisjaWZuZGVmIEdDUllQVF9OT19ERVBSRUNBVEVECit0eXBlZGVmIHN0cnVjdCBnY3J5X3NleHAgKkdDUllfU0VYUCBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9zZXhwICpHY3J5U2V4cCBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOworI2VuZGlmCisKKy8qIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBTLWV4cHJlc3Npb24gZm9ybWF0LiAqLworZW51bSBnY3J5X3NleHBfZm9ybWF0CisgIHsKKyAgICBHQ1JZU0VYUF9GTVRfREVGQVVMVCAgID0gMCwKKyAgICBHQ1JZU0VYUF9GTVRfQ0FOT04gICAgID0gMSwKKyAgICBHQ1JZU0VYUF9GTVRfQkFTRTY0ICAgID0gMiwKKyAgICBHQ1JZU0VYUF9GTVRfQURWQU5DRUQgID0gMworICB9OworCisvKiBDcmVhdGUgYW4gbmV3IFMtZXhwcmVzc2lvbiBvYmplY3QgZnJvbSBCVUZGRVIgb2Ygc2l6ZSBMRU5HVEggYW5kCisgICByZXR1cm4gaXQgaW4gUkVUU0VYUC4gIFdpdGggQVVUT0RFVEVDVCBzZXQgdG8gMCB0aGUgZGF0YSBpbiBCVUZGRVIKKyAgIGlzIGV4cGVjdGVkIHRvIGJlIGluIGNhbm9uaXplZCBmb3JtYXQuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfc2V4cF9uZXcgKGdjcnlfc2V4cF90ICpyZXRzZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXV0b2RldGVjdCk7CisKKyAvKiBTYW1lIGFzIGdjcnlfc2V4cF9uZXcgYnV0IGFsbG93cyB0byBwYXNzIGEgRlJFRUZOQyB3aGljaCBoYXMgdGhlCisgICAgZWZmZWN0IHRvIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBCVUZGRVIgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3NleHBfY3JlYXRlIChnY3J5X3NleHBfdCAqcmV0c2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dG9kZXRlY3QsIHZvaWQgKCpmcmVlZm5jKSAodm9pZCAqKSk7CisKKy8qIFNjYW4gQlVGRkVSIGFuZCByZXR1cm4gYSBuZXcgUy1leHByZXNzaW9uIG9iamVjdCBpbiBSRVRTRVhQLiAgVGhpcworICAgZnVuY3Rpb24gZXhwZWN0cyBhIHByaW50ZiBsaWtlIHN0cmluZyBpbiBCVUZGRVIuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfc2V4cF9zc2NhbiAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKworLyogU2FtZSBhcyBnY3J5X3NleHBfc3NjYW4gYnV0IGV4cGVjdHMgYSBzdHJpbmcgaW4gRk9STUFUIGFuZCBjYW4gdGh1cworICAgb25seSBiZSB1c2VkIGZvciBjZXJ0YWluIGVuY29kaW5ncy4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9zZXhwX2J1aWxkIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKy8qIExpa2UgZ2NyeV9zZXhwX2J1aWxkLCBidXQgdXNlcyBhbiBhcnJheSBpbnN0ZWFkIG9mIHZhcmlhYmxlCisgICBmdW5jdGlvbiBhcmd1bWVudHMuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfc2V4cF9idWlsZF9hcnJheSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorCQkJCSAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZvaWQgKiphcmdfbGlzdCk7CisKKy8qIFJlbGVhc2UgdGhlIFMtZXhwcmVzc2lvbiBvYmplY3QgU0VYUCAqLwordm9pZCBnY3J5X3NleHBfcmVsZWFzZSAoZ2NyeV9zZXhwX3Qgc2V4cCk7CisKKy8qIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGFuIGNhbm9uaXplZCBTLWV4cHJlc2lvbiBpbiBCVUZGRVIgYW5kCisgICBjaGVjayBmb3IgYSB2YWxpZCBlbmNvZGluZy4gKi8KK3NpemVfdCBnY3J5X3NleHBfY2Fub25fbGVuIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICplcnJvZmYsIGdjcnlfZXJyb3JfdCAqZXJyY29kZSk7CisKKy8qIENvcGllcyB0aGUgUy1leHByZXNzaW9uIG9iamVjdCBTRVhQIGludG8gQlVGRkVSIHVzaW5nIHRoZSBmb3JtYXQKKyAgIHNwZWNpZmllZCBpbiBNT0RFLiAgKi8KK3NpemVfdCBnY3J5X3NleHBfc3ByaW50IChnY3J5X3NleHBfdCBzZXhwLCBpbnQgbW9kZSwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhsZW5ndGgpOworCisvKiBEdW1wcyB0aGUgUy1leHByZXNzaW9uIG9iamVjdCBBIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBkZWJ1Z2dpbmcKKyAgIHRvIExpYmdjcnlwdCdzIGxvZ2dpbmcgc3RyZWFtLiAgKi8KK3ZvaWQgZ2NyeV9zZXhwX2R1bXAgKGNvbnN0IGdjcnlfc2V4cF90IGEpOworCitnY3J5X3NleHBfdCBnY3J5X3NleHBfY29ucyAoY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3QgYik7CitnY3J5X3NleHBfdCBnY3J5X3NleHBfYWxpc3QgKGNvbnN0IGdjcnlfc2V4cF90ICphcnJheSk7CitnY3J5X3NleHBfdCBnY3J5X3NleHBfdmxpc3QgKGNvbnN0IGdjcnlfc2V4cF90IGEsIC4uLik7CitnY3J5X3NleHBfdCBnY3J5X3NleHBfYXBwZW5kIChjb25zdCBnY3J5X3NleHBfdCBhLCBjb25zdCBnY3J5X3NleHBfdCBuKTsKK2djcnlfc2V4cF90IGdjcnlfc2V4cF9wcmVwZW5kIChjb25zdCBnY3J5X3NleHBfdCBhLCBjb25zdCBnY3J5X3NleHBfdCBuKTsKKworLyogU2NhbiB0aGUgUy1leHByZXNzaW9uIGZvciBhIHN1Ymxpc3Qgd2l0aCBhIHR5cGUgKHRoZSBjYXIgb2YgdGhlCisgICBsaXN0KSBtYXRjaGluZyB0aGUgc3RyaW5nIFRPS0VOLiAgSWYgVE9LTEVOIGlzIG5vdCAwLCB0aGUgdG9rZW4gaXMKKyAgIGFzc3VtZWQgdG8gYmUgcmF3IG1lbW9yeSBvZiB0aGlzIGxlbmd0aC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEKKyAgIG5ld2x5IGFsbG9jYXRlZCBTLWV4cHJlc3Npb24gY29uc2lzdGluZyBvZiB0aGUgZm91bmQgc3VibGlzdCBvcgorICAgYE5VTEwnIHdoZW4gbm90IGZvdW5kLiAgKi8KK2djcnlfc2V4cF90IGdjcnlfc2V4cF9maW5kX3Rva2VuIChnY3J5X3NleHBfdCBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2ssIHNpemVfdCB0b2tsZW4pOworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIExJU1QuICBGb3IgYSB2YWxpZCBTLWV4cHJlc3Npb24gdGhpcworICAgc2hvdWxkIGJlIGF0IGxlYXN0IDEuICAqLworaW50IGdjcnlfc2V4cF9sZW5ndGggKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QpOworCisvKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBTLWV4cHJlc3Npb24gZnJvbSB0aGUgZWxlbWVudCB3aXRoIGluZGV4CisgICBOVU1CRVIgaW4gTElTVC4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBoYXMgdGhlIGluZGV4IDAuICBJZgorICAgdGhlcmUgaXMgbm8gc3VjaCBlbGVtZW50LCBgTlVMTCcgaXMgcmV0dXJuZWQuICAqLworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX250aCAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlcik7CisKKy8qIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFMtZXhwcmVzc2lvbiBmcm9tIHRoZSBmaXJzdCBlbGVtZW50IGluCisgICBMSVNUOyB0aGlzIGNhbGxlZCB0aGUgInR5cGUiIGFuZCBzaG91bGQgYWx3YXlzIGV4aXN0IGFuZCBiZSBhCisgICBzdHJpbmcuIGBOVUxMJyBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIGEgcHJvYmxlbS4gICovCitnY3J5X3NleHBfdCBnY3J5X3NleHBfY2FyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKKworLyogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgbGlzdCBmb3JtIGFsbCBlbGVtZW50cyBleGNlcHQgZm9yIHRoZSBmaXJzdAorICAgb25lLiAgTm90ZSwgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYW4gaW52YWxpZCBTLWV4cHJlc3Npb24KKyAgIGJlY2F1c2UgaXQgaXMgbm90IGd1YXJhbnRlZWQsIHRoYXQgdGhlIHR5cGUgZXhpc3RzIGFuZCBpcyBhIHN0cmluZy4KKyAgIEhvd2V2ZXIsIGZvciBwYXJzaW5nIGEgY29tcGxleCBTLWV4cHJlc3Npb24gaXQgbWlnaHQgYmUgdXNlZnVsIGZvcgorICAgaW50ZXJtZWRpYXRlIGxpc3RzLiAgUmV0dXJucyBgTlVMTCcgb24gZXJyb3IuICAqLworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2NkciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCk7CisKK2djcnlfc2V4cF90IGdjcnlfc2V4cF9jYWRyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSBhIExJU1QuICBBIHBvaW50ZXIgdG8gdGhlCisgICBhY3R1YWwgZGF0YSB3aXRoIGluZGV4IE5VTUJFUiBpcyByZXR1cm5lZCBhbmQgdGhlIGxlbmd0aCBvZiB0aGlzCisgICBkYXRhIHdpbGwgYmUgc3RvcmVkIHRvIERBVEFMRU4uICBJZiB0aGVyZSBpcyBubyBkYXRhIGF0IHRoZSBnaXZlbgorICAgaW5kZXggb3IgdGhlIGluZGV4IHJlcHJlc2VudHMgYW5vdGhlciBsaXN0LCBgTlVMTCcgaXMgcmV0dXJuZWQuCisgICAqTm90ZToqIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHZhbGlkIGFzIGxvbmcgYXMgTElTVCBpcyBub3QKKyAgIG1vZGlmaWVkIG9yIHJlbGVhc2VkLiAgKi8KK2NvbnN0IGNoYXIgKmdjcnlfc2V4cF9udGhfZGF0YSAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhbGVuKTsKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBkYXRhIGZyb20gYSBMSVNULiAgQSBtYWxsb2NlZCBidWZmZXIgdG8gdGhlCisgICBkYXRhIHdpdGggaW5kZXggTlVNQkVSIGlzIHJldHVybmVkIGFuZCB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgIGRhdGEgd2lsbCBiZSBzdG9yZWQgdG8gUkxFTkdUSC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgYXQgdGhlIGdpdmVuCisgICBpbmRleCBvciB0aGUgaW5kZXggcmVwcmVzZW50cyBhbm90aGVyIGxpc3QsIGBOVUxMJyBpcyByZXR1cm5lZC4gICovCit2b2lkICpnY3J5X3NleHBfbnRoX2J1ZmZlciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnJsZW5ndGgpOworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZCBjb252ZXJ0IGRhdGEgZnJvbSBhIExJU1QuICBUaGUKKyAgIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBhIE51bCB0ZXJtaW5hdGVkIHN0cmluZy4gIFRoZSBjYWxsZXIgbXVzdAorICAgcmVsZWFzZSB0aGUgcmV0dXJuZWQgdmFsdWUgdXNpbmcgYGdjcnlfZnJlZScuICBJZiB0aGVyZSBpcyBubyBkYXRhCisgICBhdCB0aGUgZ2l2ZW4gaW5kZXgsIHRoZSBpbmRleCByZXByZXNlbnRzIGEgbGlzdCBvciB0aGUgdmFsdWUgY2FuJ3QKKyAgIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZywgYE5VTEwnIGlzIHJldHVybmVkLiAgKi8KK2NoYXIgKmdjcnlfc2V4cF9udGhfc3RyaW5nIChnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyKTsKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBhbmQgY29udmVydCBkYXRhIGZyb20gYSBMSVNULiBUaGlzCisgICBkYXRhIGlzIGFzc3VtZWQgdG8gYmUgYW4gTVBJIHN0b3JlZCBpbiB0aGUgZm9ybWF0IGRlc2NyaWJlZCBieQorICAgTVBJRk1UIGFuZCByZXR1cm5lZCBhcyBhIHN0YW5kYXJkIExpYmdjcnlwdCBNUEkuICBUaGUgY2FsbGVyIG11c3QKKyAgIHJlbGVhc2UgdGhpcyByZXR1cm5lZCB2YWx1ZSB1c2luZyBgZ2NyeV9tcGlfcmVsZWFzZScuICBJZiB0aGVyZSBpcworICAgbm8gZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kZXgsIHRoZSBpbmRleCByZXByZXNlbnRzIGEgbGlzdCBvciB0aGUKKyAgIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhbiBNUEksIGBOVUxMJyBpcyByZXR1cm5lZC4gICovCitnY3J5X21waV90IGdjcnlfc2V4cF9udGhfbXBpIChnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyLCBpbnQgbXBpZm10KTsKKworLyogQ29udmVuaWVuY2UgZnVjbnRpb24gdG8gZXh0cmFjdCBwYXJhbWV0ZXJzIGZyb20gYW4gUy1leHByZXNzaW9uCisgKiB1c2luZyBhIGxpc3Qgb2Ygc2luZ2xlIGxldHRlciBwYXJhbWV0ZXJzLiAgKi8KK2dwZ19lcnJvcl90IGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtIChnY3J5X3NleHBfdCBzZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIF9HQ1JZX0dDQ19BVFRSX1NFTlRJTkVMKDApOworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBNdWx0aSBQcmVjaXNpb24gSW50ZWdlciBGdW5jdGlvbnMgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERpZmZlcmVudCBmb3JtYXRzIG9mIGV4dGVybmFsIGJpZyBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uLiAqLworZW51bSBnY3J5X21waV9mb3JtYXQKKyAgeworICAgIEdDUllNUElfRk1UX05PTkU9IDAsCisgICAgR0NSWU1QSV9GTVRfU1REID0gMSwgICAgLyogVHdvcyBjb21wbGVtZW50IHN0b3JlZCB3aXRob3V0IGxlbmd0aC4gICovCisgICAgR0NSWU1QSV9GTVRfUEdQID0gMiwgICAgLyogQXMgdXNlZCBieSBPcGVuUEdQICh1bnNpZ25lZCBvbmx5KS4gICovCisgICAgR0NSWU1QSV9GTVRfU1NIID0gMywgICAgLyogQXMgdXNlZCBieSBTU0ggKGxpa2UgU1REIGJ1dCB3aXRoIGxlbmd0aCkuICAqLworICAgIEdDUllNUElfRk1UX0hFWCA9IDQsICAgIC8qIEhleCBmb3JtYXQuICovCisgICAgR0NSWU1QSV9GTVRfVVNHID0gNSwgICAgLyogTGlrZSBTVEQgYnV0IHVuc2lnbmVkLiAqLworICAgIEdDUllNUElfRk1UX09QQVFVRSA9IDggIC8qIE9wYXF1ZSBmb3JtYXQgKHNvbWUgZnVuY3Rpb25zIG9ubHkpLiAgKi8KKyAgfTsKKworLyogRmxhZ3MgdXNlZCBmb3IgY3JlYXRpbmcgYmlnIGludGVnZXJzLiAgKi8KK2VudW0gZ2NyeV9tcGlfZmxhZworICB7CisgICAgR0NSWU1QSV9GTEFHX1NFQ1VSRSA9IDEsICAvKiBBbGxvY2F0ZSB0aGUgbnVtYmVyIGluICJzZWN1cmUiIG1lbW9yeS4gICovCisgICAgR0NSWU1QSV9GTEFHX09QQVFVRSA9IDIsICAvKiBUaGUgbnVtYmVyIGlzIG5vdCBhIHJlYWwgb25lIGJ1dCBqdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHdheSB0byBzdG9yZSBzb21lIGJ5dGVzLiAgVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZnVsIGZvciBlbmNyeXB0ZWQgYmlnIGludGVnZXJzLiAgKi8KKyAgICBHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFID0gNCwgLyogTWFyayB0aGUgTVBJIGFzIGltbXV0YWJsZS4gICovCisgICAgR0NSWU1QSV9GTEFHX0NPTlNUICAgICA9IDgsIC8qIE1hcmsgdGhlIE1QSSBhcyBhIGNvbnN0YW50LiAgKi8KKyAgICBHQ1JZTVBJX0ZMQUdfVVNFUjEgPSAweDAxMDAsLyogVXNlciBmbGFnIDEuICAqLworICAgIEdDUllNUElfRkxBR19VU0VSMiA9IDB4MDIwMCwvKiBVc2VyIGZsYWcgMi4gICovCisgICAgR0NSWU1QSV9GTEFHX1VTRVIzID0gMHgwNDAwLC8qIFVzZXIgZmxhZyAzLiAgKi8KKyAgICBHQ1JZTVBJX0ZMQUdfVVNFUjQgPSAweDA4MDAsLyogVXNlciBmbGFnIDQuICAqLworICB9OworCisKKy8qIE1hY3JvcyB0byByZXR1cm4gcHJlLWRlZmluZWQgTVBJIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEdDUllNUElfQ09OU1RfT05FICAgKF9nY3J5X21waV9nZXRfY29uc3QgKDEpKQorI2RlZmluZSBHQ1JZTVBJX0NPTlNUX1RXTyAgIChfZ2NyeV9tcGlfZ2V0X2NvbnN0ICgyKSkKKyNkZWZpbmUgR0NSWU1QSV9DT05TVF9USFJFRSAoX2djcnlfbXBpX2dldF9jb25zdCAoMykpCisjZGVmaW5lIEdDUllNUElfQ09OU1RfRk9VUiAgKF9nY3J5X21waV9nZXRfY29uc3QgKDQpKQorI2RlZmluZSBHQ1JZTVBJX0NPTlNUX0VJR0hUIChfZ2NyeV9tcGlfZ2V0X2NvbnN0ICg4KSkKKworLyogQWxsb2NhdGUgYSBuZXcgYmlnIGludGVnZXIgb2JqZWN0LCBpbml0aWFsaXplIGl0IHdpdGggMCBhbmQKKyAgIGluaXRpYWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgbnVtYmVyIG9mIGF0IGxlYXN0IE5CSVRTLiAqLworZ2NyeV9tcGlfdCBnY3J5X21waV9uZXcgKHVuc2lnbmVkIGludCBuYml0cyk7CisKKy8qIFNhbWUgYXMgZ2NyeV9tcGlfbmV3KCkgYnV0IGFsbG9jYXRlIGluICJzZWN1cmUiIG1lbW9yeS4gKi8KK2djcnlfbXBpX3QgZ2NyeV9tcGlfc25ldyAodW5zaWduZWQgaW50IG5iaXRzKTsKKworLyogUmVsZWFzZSB0aGUgbnVtYmVyIEEgYW5kIGZyZWUgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAqLwordm9pZCBnY3J5X21waV9yZWxlYXNlIChnY3J5X21waV90IGEpOworCisvKiBDcmVhdGUgYSBuZXcgbnVtYmVyIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgQS4gKi8KK2djcnlfbXBpX3QgZ2NyeV9tcGlfY29weSAoY29uc3QgZ2NyeV9tcGlfdCBhKTsKKworLyogU3RvcmUgdGhlIGJpZyBpbnRlZ2VyIHZhbHVlIFUgaW4gVyBhbmQgcmVsZWFzZSBVLiAgKi8KK3ZvaWQgZ2NyeV9tcGlfc25hdGNoIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSk7CisKKy8qIFN0b3JlIHRoZSBiaWcgaW50ZWdlciB2YWx1ZSBVIGluIFcuICovCitnY3J5X21waV90IGdjcnlfbXBpX3NldCAoZ2NyeV9tcGlfdCB3LCBjb25zdCBnY3J5X21waV90IHUpOworCisvKiBTdG9yZSB0aGUgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBVIGluIFcuICovCitnY3J5X21waV90IGdjcnlfbXBpX3NldF91aSAoZ2NyeV9tcGlfdCB3LCB1bnNpZ25lZCBsb25nIHUpOworCisvKiBTd2FwIHRoZSB2YWx1ZXMgb2YgQSBhbmQgQi4gKi8KK3ZvaWQgZ2NyeV9tcGlfc3dhcCAoZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpOworCisvKiBSZXR1cm4gMSBpZiBBIGlzIG5lZ2F0aXZlOyAwIGlmIHplcm8gb3IgcG9zaXRpdmUuICAqLworaW50IGdjcnlfbXBpX2lzX25lZyAoZ2NyeV9tcGlfdCBhKTsKKworLyogVyA9IC0gVSAqLwordm9pZCBnY3J5X21waV9uZWcgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1KTsKKworLyogVyA9IFtXXSAqLwordm9pZCBnY3J5X21waV9hYnMgKGdjcnlfbXBpX3Qgdyk7CisKKy8qIENvbXBhcmUgdGhlIGJpZyBpbnRlZ2VyIG51bWJlciBVIGFuZCBWIHJldHVybmluZyAwIGZvciBlcXVhbGl0eSwgYQorICAgcG9zaXRpdmUgdmFsdWUgZm9yIFUgPiBWIGFuZCBhIG5lZ2F0aXZlIGZvciBVIDwgVi4gKi8KK2ludCBnY3J5X21waV9jbXAgKGNvbnN0IGdjcnlfbXBpX3QgdSwgY29uc3QgZ2NyeV9tcGlfdCB2KTsKKworLyogQ29tcGFyZSB0aGUgYmlnIGludGVnZXIgbnVtYmVyIFUgd2l0aCB0aGUgdW5zaWduZWQgaW50ZWdlciBWCisgICByZXR1cm5pbmcgMCBmb3IgZXF1YWxpdHksIGEgcG9zaXRpdmUgdmFsdWUgZm9yIFUgPiBWIGFuZCBhIG5lZ2F0aXZlCisgICBmb3IgVSA8IFYuICovCitpbnQgZ2NyeV9tcGlfY21wX3VpIChjb25zdCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgdik7CisKKy8qIENvbnZlcnQgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgc3RvcmVkIGluIEJVRkZFUgorICAgd2l0aCBhIGxlbmd0aCBvZiBCVUZMRU4gaW50byBhIG5ld2x5IGNyZWF0ZSBNUEkgcmV0dXJuZWQgaW4KKyAgIFJFVF9NUEkuICBJZiBOU0NBTk5FRCBpcyBub3QgTlVMTCwgaXQgd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2YKKyAgIGJ5dGVzIGFjdHVhbGx5IHNjYW5uZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbi4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21waV9zY2FuIChnY3J5X21waV90ICpyZXRfbXBpLCBlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbnNjYW5uZWQpOworCisvKiBDb252ZXJ0IHRoZSBiaWcgaW50ZWdlciBBIGludG8gdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uCisgICBkZXNjcmliZWQgYnkgRk9STUFUIGFuZCBzdG9yZSBpdCBpbiB0aGUgcHJvdmlkZWQgQlVGRkVSIHdoaWNoIGhhcworICAgYmVlbiBhbGxvY2F0ZWQgYnkgdGhlIHVzZXIgd2l0aCBhIHNpemUgb2YgQlVGTEVOIGJ5dGVzLiAgTldSSVRURU4KKyAgIHJlY2VpdmVzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgaXQKKyAgIGhhcyBiZWVuIHBhc3NlZCBhcyBOVUxMLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfbXBpX3ByaW50IChlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpud3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBhKTsKKworLyogQ29udmVydCB0aGUgYmlnIGludGVnZXIgQSBpbnQgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIGRlc2NyaWJlZAorICAgYnkgRk9STUFUIGFuZCBzdG9yZSBpdCBpbiBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgd2hpY2ggYWRkcmVzcworICAgd2lsbCBiZSBwdXQgaW50byBCVUZGRVIuICBOV1JJVFRFTiByZWNlaXZlcyB0aGUgYWN0dWFsIGxlbmd0aHMgb2YgdGhlCisgICBleHRlcm5hbCByZXByZXNlbnRhdGlvbi4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21waV9hcHJpbnQgKGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipidWZmZXIsIHNpemVfdCAqbndyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X21waV90IGEpOworCisvKiBEdW1wIHRoZSB2YWx1ZSBvZiBBIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBkZWJ1Z2dpbmcgdG8KKyAgIExpYmdjcnlwdCdzIGxvZ2dpbmcgc3RyZWFtLiAgTm90ZSB0aGF0IG9uZSBsZWFkaW5nIHNwYWNlIGJ1dCBubworICAgdHJhaWxpbmcgc3BhY2Ugb3IgbGluZWZlZWQgd2lsbCBiZSBwcmludGVkLiAgSXQgaXMgb2theSB0byBwYXNzCisgICBOVUxMIGZvciBBLiAqLwordm9pZCBnY3J5X21waV9kdW1wIChjb25zdCBnY3J5X21waV90IGEpOworCisKKy8qIFcgPSBVICsgVi4gICovCit2b2lkIGdjcnlfbXBpX2FkZCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3Qgdik7CisKKy8qIFcgPSBVICsgVi4gIFYgaXMgYW4gdW5zaWduZWQgaW50ZWdlci4gKi8KK3ZvaWQgZ2NyeV9tcGlfYWRkX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2KTsKKworLyogVyA9IFUgKyBWIG1vZCBNLiAqLwordm9pZCBnY3J5X21waV9hZGRtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBnY3J5X21waV90IG0pOworCisvKiBXID0gVSAtIFYuICovCit2b2lkIGdjcnlfbXBpX3N1YiAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3Qgdik7CisKKy8qIFcgPSBVIC0gVi4gIFYgaXMgYW4gdW5zaWduZWQgaW50ZWdlci4gKi8KK3ZvaWQgZ2NyeV9tcGlfc3ViX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICk7CisKKy8qIFcgPSBVIC0gViBtb2QgTSAqLwordm9pZCBnY3J5X21waV9zdWJtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBnY3J5X21waV90IG0pOworCisvKiBXID0gVSAqIFYuICovCit2b2lkIGdjcnlfbXBpX211bCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3Qgdik7CisKKy8qIFcgPSBVICogVi4gIFYgaXMgYW4gdW5zaWduZWQgaW50ZWdlci4gKi8KK3ZvaWQgZ2NyeV9tcGlfbXVsX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICk7CisKKy8qIFcgPSBVICogViBtb2QgTS4gKi8KK3ZvaWQgZ2NyeV9tcGlfbXVsbSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKTsKKworLyogVyA9IFUgKiAoMiBeIENOVCkuICovCit2b2lkIGdjcnlfbXBpX211bF8yZXhwIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyBjbnQpOworCisvKiBRID0gRElWSURFTkQgLyBESVZJU09SLCBSID0gRElWSURFTkQgJSBESVZJU09SLAorICAgUSBvciBSIG1heSBiZSBwYXNzZWQgYXMgTlVMTC4gIFJPVU5EIHNob3VsZCBiZSBuZWdhdGl2ZSBvciAwLiAqLwordm9pZCBnY3J5X21waV9kaXYgKGdjcnlfbXBpX3QgcSwgZ2NyeV9tcGlfdCByLAorICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgZGl2aWRlbmQsIGdjcnlfbXBpX3QgZGl2aXNvciwgaW50IHJvdW5kKTsKKworLyogUiA9IERJVklERU5EICUgRElWSVNPUiAqLwordm9pZCBnY3J5X21waV9tb2QgKGdjcnlfbXBpX3QgciwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgZ2NyeV9tcGlfdCBkaXZpc29yKTsKKworLyogVyA9IEIgXiBFIG1vZCBNLiAqLwordm9pZCBnY3J5X21waV9wb3dtIChnY3J5X21waV90IHcsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgYiwgY29uc3QgZ2NyeV9tcGlfdCBlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X21waV90IG0pOworCisvKiBTZXQgRyB0byB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgQSBhbmQgQi4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSBHIGlzIDEuICovCitpbnQgZ2NyeV9tcGlfZ2NkIChnY3J5X21waV90IGcsIGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiKTsKKworLyogU2V0IFggdG8gdGhlIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgQSBtb2QgTS4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBleGlzdHMuICovCitpbnQgZ2NyeV9tcGlfaW52bSAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgbSk7CisKKy8qIENyZWF0ZSBhIG5ldyBwb2ludCBvYmplY3QuICBOQklUUyBpcyB1c3VhbGx5IDAuICAqLworZ2NyeV9tcGlfcG9pbnRfdCBnY3J5X21waV9wb2ludF9uZXcgKHVuc2lnbmVkIGludCBuYml0cyk7CisKKy8qIFJlbGVhc2UgdGhlIG9iamVjdCBQT0lOVC4gIFBPSU5UIG1heSBiZSBOVUxMLiAqLwordm9pZCBnY3J5X21waV9wb2ludF9yZWxlYXNlIChnY3J5X21waV9wb2ludF90IHBvaW50KTsKKworLyogU3RvcmUgdGhlIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgZnJvbSBQT0lOVCBpbnRvIFgsIFksIGFuZCBaLiAgKi8KK3ZvaWQgZ2NyeV9tcGlfcG9pbnRfZ2V0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQpOworCisvKiBTdG9yZSB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBmcm9tIFBPSU5UIGludG8gWCwgWSwgYW5kIFogYW5kCisgICByZWxlYXNlIFBPSU5ULiAgKi8KK3ZvaWQgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCk7CisKKy8qIFN0b3JlIHRoZSBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIFgsIFksIGFuZCBaIGludG8gUE9JTlQuICAqLworZ2NyeV9tcGlfcG9pbnRfdCBnY3J5X21waV9wb2ludF9zZXQgKGdjcnlfbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3Qgeik7CisKKy8qIFN0b3JlIHRoZSBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIFgsIFksIGFuZCBaIGludG8gUE9JTlQgYW5kIHJlbGVhc2UKKyAgIFgsIFksIGFuZCBaLiAgKi8KK2djcnlfbXBpX3BvaW50X3QgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgeik7CisKKy8qIEFsbG9jYXRlIGEgbmV3IGNvbnRleHQgZm9yIGVsbGlwdGljIGN1cnZlIG9wZXJhdGlvbnMgYmFzZWQgb24gdGhlCisgICBwYXJhbWV0ZXJzIGdpdmVuIGJ5IEtFWVBBUkFNIG9yIHVzaW5nIENVUlZFTkFNRS4gICovCitncGdfZXJyb3JfdCBnY3J5X21waV9lY19uZXcgKGdjcnlfY3R4X3QgKnJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBrZXlwYXJhbSwgY29uc3QgY2hhciAqY3VydmVuYW1lKTsKKworLyogR2V0IGEgbmFtZWQgTVBJIGZyb20gYW4gZWxsaXB0aWMgY3VydmUgY29udGV4dC4gICovCitnY3J5X21waV90IGdjcnlfbXBpX2VjX2dldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfY3R4X3QgY3R4LCBpbnQgY29weSk7CisKKy8qIEdldCBhIG5hbWVkIHBvaW50IGZyb20gYW4gZWxsaXB0aWMgY3VydmUgY29udGV4dC4gICovCitnY3J5X21waV9wb2ludF90IGdjcnlfbXBpX2VjX2dldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCwgaW50IGNvcHkpOworCisvKiBTdG9yZSBhIG5hbWVkIE1QSSBpbnRvIGFuIGVsbGlwdGljIGN1cnZlIGNvbnRleHQuICAqLworZ3BnX2Vycm9yX3QgZ2NyeV9tcGlfZWNfc2V0X21waSAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9tcGlfdCBuZXd2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KTsKKworLyogU3RvcmUgYSBuYW1lZCBwb2ludCBpbnRvIGFuIGVsbGlwdGljIGN1cnZlIGNvbnRleHQuICAqLworZ3BnX2Vycm9yX3QgZ2NyeV9tcGlfZWNfc2V0X3BvaW50IChjb25zdCBjaGFyICpuYW1lLCBnY3J5X21waV9wb2ludF90IG5ld3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFN0b3JlIHRoZSBhZmZpbmUgY29vcmRpbmF0ZXMgb2YgUE9JTlQgaW50byBYIGFuZCBZLiAgKi8KK2ludCBnY3J5X21waV9lY19nZXRfYWZmaW5lIChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFcgPSAyICogVS4gICovCit2b2lkIGdjcnlfbXBpX2VjX2R1cCAoZ2NyeV9tcGlfcG9pbnRfdCB3LCBnY3J5X21waV9wb2ludF90IHUsIGdjcnlfY3R4X3QgY3R4KTsKKworLyogVyA9IFUgKyBWLiAgKi8KK3ZvaWQgZ2NyeV9tcGlfZWNfYWRkIChnY3J5X21waV9wb2ludF90IHcsCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfdCB1LCBnY3J5X21waV9wb2ludF90IHYsIGdjcnlfY3R4X3QgY3R4KTsKKworLyogVyA9IE4gKiBVLiAgKi8KK3ZvaWQgZ2NyeV9tcGlfZWNfbXVsIChnY3J5X21waV9wb2ludF90IHcsIGdjcnlfbXBpX3QgbiwgZ2NyeV9tcGlfcG9pbnRfdCB1LAorICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KTsKKworLyogUmV0dXJuIHRydWUgaWYgUE9JTlQgaXMgb24gdGhlIGN1cnZlIGRlc2NyaWJlZCBieSBDVFguICAqLworaW50IGdjcnlfbXBpX2VjX2N1cnZlX3BvaW50IChnY3J5X21waV9wb2ludF90IHcsIGdjcnlfY3R4X3QgY3R4KTsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byByZXByZXNlbnQgQS4gKi8KK3Vuc2lnbmVkIGludCBnY3J5X21waV9nZXRfbmJpdHMgKGdjcnlfbXBpX3QgYSk7CisKKy8qIFJldHVybiB0cnVlIHdoZW4gYml0IG51bWJlciBOIChjb3VudGluZyBmcm9tIDApIGlzIHNldCBpbiBBLiAqLworaW50ICAgICAgZ2NyeV9tcGlfdGVzdF9iaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOworCisvKiBTZXQgYml0IG51bWJlciBOIGluIEEuICovCit2b2lkICAgICBnY3J5X21waV9zZXRfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogQ2xlYXIgYml0IG51bWJlciBOIGluIEEuICovCit2b2lkICAgICBnY3J5X21waV9jbGVhcl9iaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOworCisvKiBTZXQgYml0IG51bWJlciBOIGluIEEgYW5kIGNsZWFyIGFsbCBiaXRzIGdyZWF0ZXIgdGhhbiBOLiAqLwordm9pZCAgICAgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOworCisvKiBDbGVhciBiaXQgbnVtYmVyIE4gaW4gQSBhbmQgYWxsIGJpdHMgZ3JlYXRlciB0aGFuIE4uICovCit2b2lkICAgICBnY3J5X21waV9jbGVhcl9oaWdoYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogU2hpZnQgdGhlIHZhbHVlIG9mIEEgYnkgTiBiaXRzIHRvIHRoZSByaWdodCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBYLiAqLwordm9pZCAgICAgZ2NyeV9tcGlfcnNoaWZ0IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pOworCisvKiBTaGlmdCB0aGUgdmFsdWUgb2YgQSBieSBOIGJpdHMgdG8gdGhlIGxlZnQgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gWC4gKi8KK3ZvaWQgICAgIGdjcnlfbXBpX2xzaGlmdCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogU3RvcmUgTkJJVFMgb2YgdGhlIHZhbHVlIFAgcG9pbnRzIHRvIGluIEEgYW5kIG1hcmsgQSBhcyBhbiBvcGFxdWUKKyAgIHZhbHVlLiAgT24gc3VjY2VzcyBBIHJlY2VpdmVkIHRoZSB0aGUgb3duZXJzaGlwIG9mIHRoZSB2YWx1ZSBQLgorICAgV0FSTklORzogTmV2ZXIgdXNlIGFuIG9wYXF1ZSBNUEkgZm9yIGFueXRoaW5nIHRoaW5nIGVsc2UgdGhhbgorICAgZ2NyeV9tcGlfcmVsZWFzZSwgZ2NyeV9tcGlfZ2V0X29wYXF1ZS4gKi8KK2djcnlfbXBpX3QgZ2NyeV9tcGlfc2V0X29wYXF1ZSAoZ2NyeV9tcGlfdCBhLCB2b2lkICpwLCB1bnNpZ25lZCBpbnQgbmJpdHMpOworCisvKiBTdG9yZSBOQklUUyBvZiB0aGUgdmFsdWUgUCBwb2ludHMgdG8gaW4gQSBhbmQgbWFyayBBIGFzIGFuIG9wYXF1ZQorICAgdmFsdWUuICBUaGUgZnVuY3Rpb24gdGFrZXMgYSBjb3B5IG9mIHRoZSBwcm92aWRlZCB2YWx1ZSBQLgorICAgV0FSTklORzogTmV2ZXIgdXNlIGFuIG9wYXF1ZSBNUEkgZm9yIGFueXRoaW5nIHRoaW5nIGVsc2UgdGhhbgorICAgZ2NyeV9tcGlfcmVsZWFzZSwgZ2NyeV9tcGlfZ2V0X29wYXF1ZS4gKi8KK2djcnlfbXBpX3QgZ2NyeV9tcGlfc2V0X29wYXF1ZV9jb3B5IChnY3J5X21waV90IGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IG5iaXRzKTsKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byBhbiBvcGFxdWUgdmFsdWUgc3RvcmVkIGluIEEgYW5kIHJldHVybiBpdHMgc2l6ZQorICAgaW4gTkJJVFMuICBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgc3RpbGwgb3duZWQgYnkgQSBhbmQKKyAgIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSB1c2VkIGZvciBhbiBub24tb3BhcXVlIE1QSS4gKi8KK3ZvaWQgKmdjcnlfbXBpX2dldF9vcGFxdWUgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50ICpuYml0cyk7CisKKy8qIFNldCB0aGUgRkxBRyBmb3IgdGhlIGJpZyBpbnRlZ2VyIEEuICBDdXJyZW50bHkgb25seSB0aGUgZmxhZworICAgR0NSWU1QSV9GTEFHX1NFQ1VSRSBpcyBhbGxvd2VkIHRvIGNvbnZlcnQgQSBpbnRvIGFuIGJpZyBpbnRnZXIKKyAgIHN0b3JlZCBpbiAic2VjdXJlIiBtZW1vcnkuICovCit2b2lkIGdjcnlfbXBpX3NldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKTsKKworLyogQ2xlYXIgRkxBRyBmb3IgdGhlIGJpZyBpbnRlZ2VyIEEuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcworICAgY3VycmVudGx5IHVzZWxlc3MgYXMgbm8gZmxhZ3MgYXJlIGFsbG93ZWQuICovCit2b2lkIGdjcnlfbXBpX2NsZWFyX2ZsYWcgKGdjcnlfbXBpX3QgYSwgZW51bSBnY3J5X21waV9mbGFnIGZsYWcpOworCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgRkxBRyBpcyBzZXQgZm9yIEEuICovCitpbnQgZ2NyeV9tcGlfZ2V0X2ZsYWcgKGdjcnlfbXBpX3QgYSwgZW51bSBnY3J5X21waV9mbGFnIGZsYWcpOworCisvKiBQcml2YXRlIGZ1bmN0aW9uIC0gZG8gbm90IHVzZS4gICovCitnY3J5X21waV90IF9nY3J5X21waV9nZXRfY29uc3QgKGludCBubyk7CisKKy8qIFVubGVzcyB0aGUgR0NSWVBUX05PX01QSV9NQUNST1MgaXMgdXNlZCwgcHJvdmlkZSBhIGNvdXBsZSBvZgorICAgY29udmVuaWVuY2UgbWFjcm9zIGZvciB0aGUgYmlnIGludGVnZXIgZnVuY3Rpb25zLiAqLworI2lmbmRlZiBHQ1JZUFRfTk9fTVBJX01BQ1JPUworI2RlZmluZSBtcGlfbmV3KG4pICAgICAgICAgIGdjcnlfbXBpX25ldyggKG4pICkKKyNkZWZpbmUgbXBpX3NlY3VyZV9uZXcoIG4gKSBnY3J5X21waV9zbmV3KCAobikgKQorI2RlZmluZSBtcGlfcmVsZWFzZShhKSAgICAgIFwKKyAgZG8gXAorICAgIHsgXAorICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoKGEpKTsgXAorICAgICAgKGEpID0gTlVMTDsgXAorICAgIH0gXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBtcGlfY29weSggYSApICAgICAgICAgIGdjcnlfbXBpX2NvcHkoIChhKSApCisjZGVmaW5lIG1waV9zbmF0Y2goIHcsIHUpICAgICAgZ2NyeV9tcGlfc25hdGNoKCAodyksICh1KSApCisjZGVmaW5lIG1waV9zZXQoIHcsIHUpICAgICAgICAgZ2NyeV9tcGlfc2V0KCAodyksICh1KSApCisjZGVmaW5lIG1waV9zZXRfdWkoIHcsIHUpICAgICAgZ2NyeV9tcGlfc2V0X3VpKCAodyksICh1KSApCisjZGVmaW5lIG1waV9hYnMoIHcgKSAgICAgICAgICAgZ2NyeV9tcGlfYWJzKCAodykgKQorI2RlZmluZSBtcGlfbmVnKCB3LCB1KSAgICAgICAgIGdjcnlfbXBpX25lZyggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfY21wKCB1LCB2ICkgICAgICAgIGdjcnlfbXBpX2NtcCggKHUpLCAodikgKQorI2RlZmluZSBtcGlfY21wX3VpKCB1LCB2ICkgICAgIGdjcnlfbXBpX2NtcF91aSggKHUpLCAodikgKQorI2RlZmluZSBtcGlfaXNfbmVnKCBhICkgICAgICAgIGdjcnlfbXBpX2lzX25lZyAoKGEpKQorCisjZGVmaW5lIG1waV9hZGRfdWkodyx1LHYpICAgICAgZ2NyeV9tcGlfYWRkX3VpKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfYWRkKHcsdSx2KSAgICAgICAgIGdjcnlfbXBpX2FkZCAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9hZGRtKHcsdSx2LG0pICAgICAgZ2NyeV9tcGlfYWRkbSAoKHcpLCh1KSwodiksKG0pKQorI2RlZmluZSBtcGlfc3ViX3VpKHcsdSx2KSAgICAgIGdjcnlfbXBpX3N1Yl91aSAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9zdWIodyx1LHYpICAgICAgICAgZ2NyeV9tcGlfc3ViICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX3N1Ym0odyx1LHYsbSkgICAgICBnY3J5X21waV9zdWJtICgodyksKHUpLCh2KSwobSkpCisjZGVmaW5lIG1waV9tdWxfdWkodyx1LHYpICAgICAgZ2NyeV9tcGlfbXVsX3VpICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX211bF8yZXhwKHcsdSx2KSAgICBnY3J5X21waV9tdWxfMmV4cCAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9tdWwodyx1LHYpICAgICAgICAgZ2NyeV9tcGlfbXVsICgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX211bG0odyx1LHYsbSkgICAgICBnY3J5X21waV9tdWxtICgodyksKHUpLCh2KSwobSkpCisjZGVmaW5lIG1waV9wb3dtKHcsYixlLG0pICAgICAgZ2NyeV9tcGlfcG93bSAoICh3KSwgKGIpLCAoZSksIChtKSApCisjZGVmaW5lIG1waV90ZGl2KHEscixhLG0pICAgICAgZ2NyeV9tcGlfZGl2ICggKHEpLCAociksIChhKSwgKG0pLCAwKQorI2RlZmluZSBtcGlfZmRpdihxLHIsYSxtKSAgICAgIGdjcnlfbXBpX2RpdiAoIChxKSwgKHIpLCAoYSksIChtKSwgLTEpCisjZGVmaW5lIG1waV9tb2QocixhLG0pICAgICAgICAgZ2NyeV9tcGlfbW9kICgociksIChhKSwgKG0pKQorI2RlZmluZSBtcGlfZ2NkKGcsYSxiKSAgICAgICAgIGdjcnlfbXBpX2djZCAoIChnKSwgKGEpLCAoYikgKQorI2RlZmluZSBtcGlfaW52bShnLGEsYikgICAgICAgIGdjcnlfbXBpX2ludm0gKCAoZyksIChhKSwgKGIpICkKKworI2RlZmluZSBtcGlfcG9pbnRfbmV3KG4pICAgICAgICAgICAgICBnY3J5X21waV9wb2ludF9uZXcoKG4pKQorI2RlZmluZSBtcGlfcG9pbnRfcmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoKHApKTsgICAgICAgICAgICAgXAorICAgICAgKHApID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoMCkKKyNkZWZpbmUgbXBpX3BvaW50X2dldCh4LHkseixwKSAgICAgICAgZ2NyeV9tcGlfcG9pbnRfZ2V0KCh4KSwoeSksKHopLChwKSkKKyNkZWZpbmUgbXBpX3BvaW50X3NuYXRjaF9nZXQoeCx5LHoscCkgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCgoeCksKHkpLCh6KSwocCkpCisjZGVmaW5lIG1waV9wb2ludF9zZXQocCx4LHkseikgICAgICAgIGdjcnlfbXBpX3BvaW50X3NldCgocCksKHgpLCh5KSwoeikpCisjZGVmaW5lIG1waV9wb2ludF9zbmF0Y2hfc2V0KHAseCx5LHopIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQoKHApLCh4KSwoeSksKHopKQorCisjZGVmaW5lIG1waV9nZXRfbmJpdHMoYSkgICAgICAgZ2NyeV9tcGlfZ2V0X25iaXRzICgoYSkpCisjZGVmaW5lIG1waV90ZXN0X2JpdChhLGIpICAgICAgZ2NyeV9tcGlfdGVzdF9iaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9zZXRfYml0KGEsYikgICAgICAgZ2NyeV9tcGlfc2V0X2JpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX3NldF9oaWdoYml0KGEsYikgICBnY3J5X21waV9zZXRfaGlnaGJpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX2NsZWFyX2JpdChhLGIpICAgICBnY3J5X21waV9jbGVhcl9iaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9jbGVhcl9oaWdoYml0KGEsYikgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoKGEpLChiKSkKKyNkZWZpbmUgbXBpX3JzaGlmdChhLGIsYykgICAgICBnY3J5X21waV9yc2hpZnQgKChhKSwoYiksKGMpKQorI2RlZmluZSBtcGlfbHNoaWZ0KGEsYixjKSAgICAgIGdjcnlfbXBpX2xzaGlmdCAoKGEpLChiKSwoYykpCisKKyNkZWZpbmUgbXBpX3NldF9vcGFxdWUoYSxiLGMpICBnY3J5X21waV9zZXRfb3BhcXVlKCAoYSksIChiKSwgKGMpICkKKyNkZWZpbmUgbXBpX2dldF9vcGFxdWUoYSxiKSAgICBnY3J5X21waV9nZXRfb3BhcXVlKCAoYSksIChiKSApCisjZW5kaWYgLyogR0NSWVBUX05PX01QSV9NQUNST1MgKi8KKworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFN5bW1ldHJpYyBDaXBoZXIgRnVuY3Rpb25zICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGUgZGF0YSBvYmplY3QgdXNlZCB0byBob2xkIGEgaGFuZGxlIHRvIGFuIGVuY3J5cHRpb24gb2JqZWN0LiAgKi8KK3N0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGU7Cit0eXBlZGVmIHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUgKmdjcnlfY2lwaGVyX2hkX3Q7CisKKyNpZm5kZWYgR0NSWVBUX05PX0RFUFJFQ0FURUQKK3R5cGVkZWYgc3RydWN0IGdjcnlfY2lwaGVyX2hhbmRsZSAqR0NSWV9DSVBIRVJfSEQgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfY2lwaGVyX2hhbmRsZSAqR2NyeUNpcGhlckhkIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQ7CisjZW5kaWYKKworLyogQWxsIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgSURzLgorICAgTW9yZSBJRHMgbWF5IGJlIHJlZ2lzdGVyZWQgYXQgcnVudGltZS4gKi8KK2VudW0gZ2NyeV9jaXBoZXJfYWxnb3MKKyAgeworICAgIEdDUllfQ0lQSEVSX05PTkUgICAgICAgID0gMCwKKyAgICBHQ1JZX0NJUEhFUl9JREVBICAgICAgICA9IDEsCisgICAgR0NSWV9DSVBIRVJfM0RFUyAgICAgICAgPSAyLAorICAgIEdDUllfQ0lQSEVSX0NBU1Q1ICAgICAgID0gMywKKyAgICBHQ1JZX0NJUEhFUl9CTE9XRklTSCAgICA9IDQsCisgICAgR0NSWV9DSVBIRVJfU0FGRVJfU0sxMjggPSA1LAorICAgIEdDUllfQ0lQSEVSX0RFU19TSyAgICAgID0gNiwKKyAgICBHQ1JZX0NJUEhFUl9BRVMgICAgICAgICA9IDcsCisgICAgR0NSWV9DSVBIRVJfQUVTMTkyICAgICAgPSA4LAorICAgIEdDUllfQ0lQSEVSX0FFUzI1NiAgICAgID0gOSwKKyAgICBHQ1JZX0NJUEhFUl9UV09GSVNIICAgICA9IDEwLAorCisgICAgLyogT3RoZXIgY2lwaGVyIG51bWJlcnMgYXJlIGFib3ZlIDMwMCBmb3IgT3BlblBHUCByZWFzb25zLiAqLworICAgIEdDUllfQ0lQSEVSX0FSQ0ZPVVIgICAgID0gMzAxLCAgLyogRnVsbHkgY29tcGF0aWJsZSB3aXRoIFJTQSdzIFJDNCAodG0pLiAqLworICAgIEdDUllfQ0lQSEVSX0RFUyAgICAgICAgID0gMzAyLCAgLyogWWVzLCB0aGlzIGlzIHNpbmdsZSBrZXkgNTYgYml0IERFUy4gKi8KKyAgICBHQ1JZX0NJUEhFUl9UV09GSVNIMTI4ICA9IDMwMywKKyAgICBHQ1JZX0NJUEhFUl9TRVJQRU5UMTI4ICA9IDMwNCwKKyAgICBHQ1JZX0NJUEhFUl9TRVJQRU5UMTkyICA9IDMwNSwKKyAgICBHQ1JZX0NJUEhFUl9TRVJQRU5UMjU2ICA9IDMwNiwKKyAgICBHQ1JZX0NJUEhFUl9SRkMyMjY4XzQwICA9IDMwNywgIC8qIFJvbidzIENpcGhlciAyICg0MCBiaXQpLiAqLworICAgIEdDUllfQ0lQSEVSX1JGQzIyNjhfMTI4ID0gMzA4LCAgLyogUm9uJ3MgQ2lwaGVyIDIgKDEyOCBiaXQpLiAqLworICAgIEdDUllfQ0lQSEVSX1NFRUQgICAgICAgID0gMzA5LCAgLyogMTI4IGJpdCBjaXBoZXIgZGVzY3JpYmVkIGluIFJGQzQyNjkuICovCisgICAgR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjggPSAzMTAsCisgICAgR0NSWV9DSVBIRVJfQ0FNRUxMSUExOTIgPSAzMTEsCisgICAgR0NSWV9DSVBIRVJfQ0FNRUxMSUEyNTYgPSAzMTIsCisgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCAgICAgPSAzMTMsCisgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiAgPSAzMTQsCisgICAgR0NSWV9DSVBIRVJfR09TVDI4MTQ3ICAgPSAzMTUKKyAgfTsKKworLyogVGhlIFJpam5kYWVsIGFsZ29yaXRobSBpcyBiYXNpY2FsbHkgQUVTLCBzbyBwcm92aWRlIHNvbWUgbWFjcm9zLiAqLworI2RlZmluZSBHQ1JZX0NJUEhFUl9BRVMxMjggICAgICBHQ1JZX0NJUEhFUl9BRVMKKyNkZWZpbmUgR0NSWV9DSVBIRVJfUklKTkRBRUwgICAgR0NSWV9DSVBIRVJfQUVTCisjZGVmaW5lIEdDUllfQ0lQSEVSX1JJSk5EQUVMMTI4IEdDUllfQ0lQSEVSX0FFUzEyOAorI2RlZmluZSBHQ1JZX0NJUEhFUl9SSUpOREFFTDE5MiBHQ1JZX0NJUEhFUl9BRVMxOTIKKyNkZWZpbmUgR0NSWV9DSVBIRVJfUklKTkRBRUwyNTYgR0NSWV9DSVBIRVJfQUVTMjU2CisKKy8qIFRoZSBzdXBwb3J0ZWQgZW5jcnlwdGlvbiBtb2Rlcy4gIE5vdGUgdGhhdCBub3QgYWxsIG9mIHRoZW0gYXJlCisgICBzdXBwb3J0ZWQgZm9yIGVhY2ggYWxnb3JpdGhtLiAqLworZW51bSBnY3J5X2NpcGhlcl9tb2RlcworICB7CisgICAgR0NSWV9DSVBIRVJfTU9ERV9OT05FICAgPSAwLCAgLyogTm90IHlldCBzcGVjaWZpZWQuICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9FQ0IgICAgPSAxLCAgLyogRWxlY3Ryb25pYyBjb2RlYm9vay4gKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX0NGQiAgICA9IDIsICAvKiBDaXBoZXIgZmVlZGJhY2suICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9DQkMgICAgPSAzLCAgLyogQ2lwaGVyIGJsb2NrIGNoYWluaW5nLiAqLworICAgIEdDUllfQ0lQSEVSX01PREVfU1RSRUFNID0gNCwgIC8qIFVzZWQgd2l0aCBzdHJlYW0gY2lwaGVycy4gKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX09GQiAgICA9IDUsICAvKiBPdXRlciBmZWVkYmFjay4gKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX0NUUiAgICA9IDYsICAvKiBDb3VudGVyLiAqLworICAgIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUD0gNywgIC8qIEFFUy1XUkFQIGFsZ29yaXRobS4gICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9DQ00gICAgPSA4LCAgLyogQ291bnRlciB3aXRoIENCQy1NQUMuICAqLworICAgIEdDUllfQ0lQSEVSX01PREVfR0NNICAgID0gOSAgIC8qIEdhbG9pcyBDb3VudGVyIE1vZGUuICovCisgIH07CisKKy8qIEZsYWdzIHVzZWQgd2l0aCB0aGUgb3BlbiBmdW5jdGlvbi4gKi8KK2VudW0gZ2NyeV9jaXBoZXJfZmxhZ3MKKyAgeworICAgIEdDUllfQ0lQSEVSX1NFQ1VSRSAgICAgID0gMSwgIC8qIEFsbG9jYXRlIGluIHNlY3VyZSBtZW1vcnkuICovCisgICAgR0NSWV9DSVBIRVJfRU5BQkxFX1NZTkMgPSAyLCAgLyogRW5hYmxlIENGQiBzeW5jIG1vZGUuICovCisgICAgR0NSWV9DSVBIRVJfQ0JDX0NUUyAgICAgPSA0LCAgLyogRW5hYmxlIENCQyBjaXBoZXIgdGV4dCBzdGVhbGluZyAoQ1RTKS4gKi8KKyAgICBHQ1JZX0NJUEhFUl9DQkNfTUFDICAgICA9IDggICAvKiBFbmFibGUgQ0JDIG1lc3NhZ2UgYXV0aC4gY29kZSAoTUFDKS4gKi8KKyAgfTsKKworLyogR0NNIHdvcmtzIG9ubHkgd2l0aCBibG9ja3Mgb2YgMTI4IGJpdHMgKi8KKyNkZWZpbmUgR0NSWV9HQ01fQkxPQ0tfTEVOICAoMTI4IC8gOCkKKworLyogQ0NNIHdvcmtzIG9ubHkgd2l0aCBibG9ja3Mgb2YgMTI4IGJpdHMuICAqLworI2RlZmluZSBHQ1JZX0NDTV9CTE9DS19MRU4gICgxMjggLyA4KQorCisvKiBDcmVhdGUgYSBoYW5kbGUgZm9yIGFsZ29yaXRobSBBTEdPIHRvIGJlIHVzZWQgaW4gTU9ERS4gIEZMQUdTIG1heQorICAgYmUgZ2l2ZW4gYXMgYW4gYml0d2lzZSBPUiBvZiB0aGUgZ2NyeV9jaXBoZXJfZmxhZ3MgdmFsdWVzLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX29wZW4gKGdjcnlfY2lwaGVyX2hkX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGdvLCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworLyogQ2xvc2UgdGhlIGNpb2hlciBoYW5kbGUgSCBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2UuICovCit2b2lkIGdjcnlfY2lwaGVyX2Nsb3NlIChnY3J5X2NpcGhlcl9oZF90IGgpOworCisvKiBQZXJmb3JtIHZhcmlvdXMgb3BlcmF0aW9ucyBvbiB0aGUgY2lwaGVyIG9iamVjdCBILiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2N0bCAoZ2NyeV9jaXBoZXJfaGRfdCBoLCBpbnQgY21kLCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZsZW4pOworCisvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaXBoZXIgb2JqZWN0IEguICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfaW5mbyAoZ2NyeV9jaXBoZXJfaGRfdCBoLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworCisvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaXBoZXIgYWxnb3JpdGhtIEFMR08uICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfYWxnb19pbmZvIChpbnQgYWxnbywgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworCisvKiBNYXAgdGhlIGNpcGhlciBhbGdvcml0aG0gd2hvc2UgSUQgaXMgY29udGFpbmVkIGluIEFMR09SSVRITSB0byBhCisgICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFsZ29yaXRobSBuYW1lLiAgRm9yIHVua25vd24gYWxnb3JpdGhtCisgICBJRHMgdGhpcyBmdW5jdGlvbiByZXR1cm5zICI/Ii4gICovCitjb25zdCBjaGFyICpnY3J5X2NpcGhlcl9hbGdvX25hbWUgKGludCBhbGdvcml0aG0pIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIE1hcCB0aGUgYWxnb3JpdGhtIG5hbWUgTkFNRSB0byBhbiBjaXBoZXIgYWxnb3JpdGhtIElELiAgUmV0dXJuIDAgaWYKKyAgIHRoZSBhbGdvcml0aG0gbmFtZSBpcyBub3Qga25vd24uICovCitpbnQgZ2NyeV9jaXBoZXJfbWFwX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIEdpdmVuIGFuIEFTTi4xIG9iamVjdCBpZGVudGlmaWVyIGluIHN0YW5kYXJkIElFVEYgZG90dGVkIGRlY2ltYWwKKyAgIGZvcm1hdCBpbiBTVFJJTkcsIHJldHVybiB0aGUgZW5jcnlwdGlvbiBtb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGF0CisgICBPSUQgb3IgMCBpZiBub3Qga25vd24gb3IgYXBwbGljYWJsZS4gKi8KK2ludCBnY3J5X2NpcGhlcl9tb2RlX2Zyb21fb2lkIChjb25zdCBjaGFyICpzdHJpbmcpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIEVuY3J5cHQgdGhlIHBsYWludGV4dCBvZiBzaXplIElOTEVOIGluIElOIHVzaW5nIHRoZSBjaXBoZXIgaGFuZGxlIEgKKyAgIGludG8gdGhlIGJ1ZmZlciBPVVQgd2hpY2ggaGFzIGFuIGFsbG9jYXRlZCBsZW5ndGggb2YgT1VUU0laRS4gIEZvcgorICAgbW9zdCBhbGdvcml0aG1zIGl0IGlzIHBvc3NpYmxlIHRvIHBhc3MgTlVMTCBmb3IgaW4gYW5kIDAgZm9yIElOTEVOCisgICBhbmQgZG8gYSBpbi1wbGFjZSBkZWNyeXB0aW9uIG9mIHRoZSBkYXRhIHByb3ZpZGVkIGluIE9VVC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfZW5jcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dCwgc2l6ZV90IG91dHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbik7CisKKy8qIFRoZSBjb3VudGVycGFydCB0byBnY3J5X2NpcGhlcl9lbmNyeXB0LiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9kZWNyeXB0IChnY3J5X2NpcGhlcl9oZF90IGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0LCBzaXplX3Qgb3V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuKTsKKworLyogU2V0IEtFWSBvZiBsZW5ndGggS0VZTEVOIGJ5dGVzIGZvciB0aGUgY2lwaGVyIGhhbmRsZSBIRC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfc2V0a2V5IChnY3J5X2NpcGhlcl9oZF90IGhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTsKKworCisvKiBTZXQgaW5pdGlhbGl6YXRpb24gdmVjdG9yIElWIG9mIGxlbmd0aCBJVkxFTiBmb3IgdGhlIGNpcGhlciBoYW5kbGUgSEQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfc2V0aXYgKGdjcnlfY2lwaGVyX2hkX3QgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKml2LCBzaXplX3QgaXZsZW4pOworCisvKiBQcm92aWRlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YSBmb3IgQUVBRCBtb2Rlcy9jaXBoZXJzLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWJ1Zmxlbik7CisKKy8qIEdldCBhdXRoZW50aWNhdGlvbiB0YWcgZm9yIEFFQUQgbW9kZXMvY2lwaGVycy4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfZ2V0dGFnIChnY3J5X2NpcGhlcl9oZF90IGhkLCB2b2lkICpvdXR0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnbGVuKTsKKworLyogQ2hlY2sgYXV0aGVudGljYXRpb24gdGFnIGZvciBBRUFEIG1vZGVzL2NpcGhlcnMuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2NoZWNrdGFnIChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICppbnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ2xlbik7CisKKy8qIFJlc2V0IHRoZSBoYW5kbGUgdG8gdGhlIHN0YXRlIGFmdGVyIG9wZW4uICAqLworI2RlZmluZSBnY3J5X2NpcGhlcl9yZXNldChoKSAgZ2NyeV9jaXBoZXJfY3RsICgoaCksIEdDUllDVExfUkVTRVQsIE5VTEwsIDApCisKKy8qIFBlcmZvcm0gdGhlIE9wZW5QR1Agc3luYyBvcGVyYXRpb24gaWYgdGhpcyBpcyBlbmFibGVkIGZvciB0aGUKKyAgIGNpcGhlciBoYW5kbGUgSC4gKi8KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfc3luYyhoKSAgZ2NyeV9jaXBoZXJfY3RsKCAoaCksIEdDUllDVExfQ0ZCX1NZTkMsIE5VTEwsIDApCisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIENUUyBpbiBmdXR1cmUgY2FsbHMgdG8gZ2NyeV9lbmNyeXB0KCkuIENCQyBtb2RlIG9ubHkuICovCisjZGVmaW5lIGdjcnlfY2lwaGVyX2N0cyhoLG9uKSAgZ2NyeV9jaXBoZXJfY3RsKCAoaCksIEdDUllDVExfU0VUX0NCQ19DVFMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBvbiApCisKKy8qIFNldCBjb3VudGVyIGZvciBDVFIgbW9kZS4gIChDVFIsQ1RSTEVOKSBtdXN0IGRlbm90ZSBhIGJ1ZmZlciBvZgorICAgYmxvY2sgc2l6ZSBsZW5ndGgsIG9yIChOVUxMLDApIHRvIHNldCB0aGUgQ1RSIHRvIHRoZSBhbGwtemVybyBibG9jay4gKi8KK2dwZ19lcnJvcl90IGdjcnlfY2lwaGVyX3NldGN0ciAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY3RyLCBzaXplX3QgY3RybGVuKTsKKworLyogUmV0cmlldmUgdGhlIGtleSBsZW5ndGggaW4gYnl0ZXMgdXNlZCB3aXRoIGFsZ29yaXRobSBBLiAqLworc2l6ZV90IGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiAoaW50IGFsZ28pOworCisvKiBSZXRyaWV2ZSB0aGUgYmxvY2sgbGVuZ3RoIGluIGJ5dGVzIHVzZWQgd2l0aCBhbGdvcml0aG0gQS4gKi8KK3NpemVfdCBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGludCBhbGdvKTsKKworLyogUmV0dXJuIDAgaWYgdGhlIGFsZ29yaXRobSBBIGlzIGF2YWlsYWJsZSBmb3IgdXNlLiAqLworI2RlZmluZSBnY3J5X2NpcGhlcl90ZXN0X2FsZ28oYSkgXAorICAgICAgICAgICAgZ2NyeV9jaXBoZXJfYWxnb19pbmZvKCAoYSksIEdDUllDVExfVEVTVF9BTEdPLCBOVUxMLCBOVUxMICkKKworDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgQXN5bW1ldHJpYyBDaXBoZXIgRnVuY3Rpb25zICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIGFsZ29yaXRobXMgYW5kIHRoZWlyIElEcyB3ZSBzdXBwb3J0LiAgKi8KK2VudW0gZ2NyeV9wa19hbGdvcworICB7CisgICAgR0NSWV9QS19SU0EgICA9IDEsICAgICAgLyogUlNBICovCisgICAgR0NSWV9QS19SU0FfRSA9IDIsICAgICAgLyogKGRlcHJlY2F0ZWQ6IHVzZSAxKS4gICovCisgICAgR0NSWV9QS19SU0FfUyA9IDMsICAgICAgLyogKGRlcHJlY2F0ZWQ6IHVzZSAxKS4gICovCisgICAgR0NSWV9QS19FTEdfRSA9IDE2LCAgICAgLyogKGRlcHJlY2F0ZWQ6IHVzZSAyMCkuICovCisgICAgR0NSWV9QS19EU0EgICA9IDE3LCAgICAgLyogRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtLiAgKi8KKyAgICBHQ1JZX1BLX0VDQyAgID0gMTgsICAgICAvKiBHZW5lcmljIEVDQy4gICovCisgICAgR0NSWV9QS19FTEcgICA9IDIwLCAgICAgLyogRWxnYW1hbCAgICAgICAqLworICAgIEdDUllfUEtfRUNEU0EgPSAzMDEsICAgIC8qIChkZXByZWNhdGVkOiB1c2UgMTgpLiAgKi8KKyAgICBHQ1JZX1BLX0VDREggID0gMzAyICAgICAvKiAoZGVwcmVjYXRlZDogdXNlIDE4KS4gICovCisgIH07CisKKy8qIEZsYWdzIGRlc2NyaWJpbmcgdXNhZ2UgY2FwYWJpbGl0aWVzIG9mIGEgUEsgYWxnb3JpdGhtLiAqLworI2RlZmluZSBHQ1JZX1BLX1VTQUdFX1NJR04gMSAgIC8qIEdvb2QgZm9yIHNpZ25hdHVyZXMuICovCisjZGVmaW5lIEdDUllfUEtfVVNBR0VfRU5DUiAyICAgLyogR29vZCBmb3IgZW5jcnlwdGlvbi4gKi8KKyNkZWZpbmUgR0NSWV9QS19VU0FHRV9DRVJUIDQgICAvKiBHb29kIHRvIGNlcnRpZnkgb3RoZXIga2V5cy4gKi8KKyNkZWZpbmUgR0NSWV9QS19VU0FHRV9BVVRIIDggICAvKiBHb29kIGZvciBhdXRoZW50aWNhdGlvbi4gKi8KKyNkZWZpbmUgR0NSWV9QS19VU0FHRV9VTktOIDEyOCAvKiBVbmtub3duIHVzYWdlIGZsYWcuICovCisKKy8qIE1vZGVzIHVzZWQgd2l0aCBnY3J5X3B1YmtleV9nZXRfc2V4cC4gICovCisjZGVmaW5lIEdDUllfUEtfR0VUX1BVQktFWSAxCisjZGVmaW5lIEdDUllfUEtfR0VUX1NFQ0tFWSAyCisKKy8qIEVuY3J5cHQgdGhlIERBVEEgdXNpbmcgdGhlIHB1YmxpYyBrZXkgUEtFWSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBhcworICAgYSBuZXdseSBjcmVhdGVkIFMtZXhwcmVzc2lvbiBhdCBSRVNVTFQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wa19lbmNyeXB0IChnY3J5X3NleHBfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgZGF0YSwgZ2NyeV9zZXhwX3QgcGtleSk7CisKKy8qIERlY3J5cHQgdGhlIERBVEEgdXNpbmcgdGhlIHByaXZhdGUga2V5IFNLRVkgYW5kIHN0b3JlIHRoZSByZXN1bHQgYXMKKyAgIGEgbmV3bHkgY3JlYXRlZCBTLWV4cHJlc3Npb24gYXQgUkVTVUxULiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfZGVjcnlwdCAoZ2NyeV9zZXhwX3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGRhdGEsIGdjcnlfc2V4cF90IHNrZXkpOworCisvKiBTaWduIHRoZSBEQVRBIHVzaW5nIHRoZSBwcml2YXRlIGtleSBTS0VZIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGFzCisgICBhIG5ld2x5IGNyZWF0ZWQgUy1leHByZXNzaW9uIGF0IFJFU1VMVC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X3BrX3NpZ24gKGdjcnlfc2V4cF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBza2V5KTsKKworLyogQ2hlY2sgdGhlIHNpZ25hdHVyZSBTSUdWQUwgb24gREFUQSB1c2luZyB0aGUgcHVibGljIGtleSBQS0VZLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfdmVyaWZ5IChnY3J5X3NleHBfdCBzaWd2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGRhdGEsIGdjcnlfc2V4cF90IHBrZXkpOworCisvKiBDaGVjayB0aGF0IHByaXZhdGUgS0VZIGlzIHNhbmUuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wa190ZXN0a2V5IChnY3J5X3NleHBfdCBrZXkpOworCisvKiBHZW5lcmF0ZSBhIG5ldyBrZXkgcGFpciBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgZ2l2ZW4gaW4KKyAgIFNfUEFSTVMuICBUaGUgbmV3IGtleSBwYWlyIGlzIHJldHVybmVkIGluIGFzIGFuIFMtZXhwcmVzc2lvbiBpbgorICAgUl9LRVkuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wa19nZW5rZXkgKGdjcnlfc2V4cF90ICpyX2tleSwgZ2NyeV9zZXhwX3Qgc19wYXJtcyk7CisKKy8qIENhdGNoIGFsbCBmdW5jdGlvbiBmb3IgbWlzY2VsbGFuZW91cyBvcGVyYXRpb25zLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfY3RsIChpbnQgY21kLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pOworCisvKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVibGljIGtleSBhbGdvcml0aG0gQUxHTy4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X3BrX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbmJ5dGVzKTsKKworLyogTWFwIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB3aG9zZSBJRCBpcyBjb250YWluZWQgaW4gQUxHT1JJVEhNIHRvCisgICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIG5hbWUuICBGb3IgdW5rbm93bgorICAgYWxnb3JpdGhtIElEcyB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zICI/Ii4gKi8KK2NvbnN0IGNoYXIgKmdjcnlfcGtfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBNYXAgdGhlIGFsZ29yaXRobSBOQU1FIHRvIGEgcHVibGljIGtleSBhbGdvcml0aG0gSWQuICBSZXR1cm4gMCBpZgorICAgdGhlIGFsZ29yaXRobSBuYW1lIGlzIG5vdCBrbm93bi4gKi8KK2ludCBnY3J5X3BrX21hcF9uYW1lIChjb25zdCBjaGFyKiBuYW1lKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBSZXR1cm4gd2hhdCBpcyBjb21tb25seSByZWZlcnJlZCBhcyB0aGUga2V5IGxlbmd0aCBmb3IgdGhlIGdpdmVuCisgICBwdWJsaWMgb3IgcHJpdmF0ZSBLRVkuICAqLwordW5zaWduZWQgaW50IGdjcnlfcGtfZ2V0X25iaXRzIChnY3J5X3NleHBfdCBrZXkpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIFJldHVybiB0aGUgc28gY2FsbGVkIEtFWUdSSVAgd2hpY2ggaXMgdGhlIFNIQS0xIGhhc2ggb2YgdGhlIHB1YmxpYworICAga2V5IHBhcmFtZXRlcnMgZXhwcmVzc2VkIGluIGEgd2F5IGRlcGVuZGluZyBvbiB0aGUgYWxnb3JpdGhtLiAgKi8KK3Vuc2lnbmVkIGNoYXIgKmdjcnlfcGtfZ2V0X2tleWdyaXAgKGdjcnlfc2V4cF90IGtleSwgdW5zaWduZWQgY2hhciAqYXJyYXkpOworCisvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnZlIG1hdGNoaW5nIEtFWS4gICovCitjb25zdCBjaGFyICpnY3J5X3BrX2dldF9jdXJ2ZSAoZ2NyeV9zZXhwX3Qga2V5LCBpbnQgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpyX25iaXRzKTsKKworLyogUmV0dXJuIGFuIFMtZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBuYW1lZCBFQ0MgY3VydmUKKyAgIE5BTUUuICBBTEdPIG11c3QgYmUgc2V0IHRvIGFuIEVDQyBhbGdvcml0aG0uICAqLworZ2NyeV9zZXhwX3QgZ2NyeV9wa19nZXRfcGFyYW0gKGludCBhbGdvLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyogUmV0dXJuIDAgaWYgdGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtIEEgaXMgYXZhaWxhYmxlIGZvciB1c2UuICovCisjZGVmaW5lIGdjcnlfcGtfdGVzdF9hbGdvKGEpIFwKKyAgICAgICAgICAgIGdjcnlfcGtfYWxnb19pbmZvKCAoYSksIEdDUllDVExfVEVTVF9BTEdPLCBOVUxMLCBOVUxMICkKKworLyogUmV0dXJuIGFuIFMtZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbnRleHQgQ1RYLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3B1YmtleV9nZXRfc2V4cCAoZ2NyeV9zZXhwX3QgKnJfc2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGdjcnlfY3R4X3QgY3R4KTsKKworDAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIENyeXB0b2dyYWhpYyBIYXNoIEZ1bmN0aW9ucyAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBbGdvcml0aG0gSURzIGZvciB0aGUgaGFzaCBmdW5jdGlvbnMgd2Uga25vdyBhYm91dC4gTm90IGFsbCBvZiB0aGVtCisgICBhcmUgaW1wbGVtbnRlZC4gKi8KK2VudW0gZ2NyeV9tZF9hbGdvcworICB7CisgICAgR0NSWV9NRF9OT05FICAgID0gMCwKKyAgICBHQ1JZX01EX01ENSAgICAgPSAxLAorICAgIEdDUllfTURfU0hBMSAgICA9IDIsCisgICAgR0NSWV9NRF9STUQxNjAgID0gMywKKyAgICBHQ1JZX01EX01EMiAgICAgPSA1LAorICAgIEdDUllfTURfVElHRVIgICA9IDYsICAgLyogVElHRVIvMTkyIGFzIHVzZWQgYnkgZ3BnIDw9IDEuMy4yLiAqLworICAgIEdDUllfTURfSEFWQUwgICA9IDcsICAgLyogSEFWQUwsIDUgcGFzcywgMTYwIGJpdC4gKi8KKyAgICBHQ1JZX01EX1NIQTI1NiAgPSA4LAorICAgIEdDUllfTURfU0hBMzg0ICA9IDksCisgICAgR0NSWV9NRF9TSEE1MTIgID0gMTAsCisgICAgR0NSWV9NRF9TSEEyMjQgID0gMTEsCisgICAgR0NSWV9NRF9NRDQgICAgID0gMzAxLAorICAgIEdDUllfTURfQ1JDMzIgICAgICAgICA9IDMwMiwKKyAgICBHQ1JZX01EX0NSQzMyX1JGQzE1MTAgPSAzMDMsCisgICAgR0NSWV9NRF9DUkMyNF9SRkMyNDQwID0gMzA0LAorICAgIEdDUllfTURfV0hJUkxQT09MICAgICA9IDMwNSwKKyAgICBHQ1JZX01EX1RJR0VSMSAgICAgICAgPSAzMDYsIC8qIFRJR0VSIGZpeGVkLiAgKi8KKyAgICBHQ1JZX01EX1RJR0VSMiAgICAgICAgPSAzMDcsIC8qIFRJR0VSMiB2YXJpYW50LiAgICovCisgICAgR0NSWV9NRF9HT1NUUjM0MTFfOTQgID0gMzA4LCAvKiBHT1NUIFIgMzQuMTEtOTQuICAqLworICAgIEdDUllfTURfU1RSSUJPRzI1NiAgICA9IDMwOSwgLyogR09TVCBSIDM0LjExLTIwMTIsIDI1NiBiaXQuICAqLworICAgIEdDUllfTURfU1RSSUJPRzUxMiAgICA9IDMxMCAgLyogR09TVCBSIDM0LjExLTIwMTIsIDUxMiBiaXQuICAqLworICB9OworCisvKiBGbGFncyB1c2VkIHdpdGggdGhlIG9wZW4gZnVuY3Rpb24uICAqLworZW51bSBnY3J5X21kX2ZsYWdzCisgIHsKKyAgICBHQ1JZX01EX0ZMQUdfU0VDVVJFID0gMSwgIC8qIEFsbG9jYXRlIGFsbCBidWZmZXJzIGluICJzZWN1cmUiIG1lbW9yeS4gICovCisgICAgR0NSWV9NRF9GTEFHX0hNQUMgICA9IDIsICAvKiBNYWtlIGFuIEhNQUMgb3V0IG9mIHRoaXMgYWxnb3JpdGhtLiAgKi8KKyAgICBHQ1JZX01EX0ZMQUdfQlVHRU1VMSA9IDB4MDEwMAorICB9OworCisvKiAoRm9yd2FyZCBkZWNsYXJhdGlvbi4pICAqLworc3RydWN0IGdjcnlfbWRfY29udGV4dDsKKworLyogVGhpcyBvYmplY3QgaXMgdXNlZCB0byBob2xkIGEgaGFuZGxlIHRvIGEgbWVzc2FnZSBkaWdlc3Qgb2JqZWN0LgorICAgVGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZSAtIG9ubHkgdG8gYmUgdXNlZCBieSB0aGUgcHVibGljIGdjcnlfbWRfKgorICAgbWFjcm9zLiAgKi8KK3R5cGVkZWYgc3RydWN0IGdjcnlfbWRfaGFuZGxlCit7CisgIC8qIEFjdHVhbCBjb250ZXh0LiAgKi8KKyAgc3RydWN0IGdjcnlfbWRfY29udGV4dCAqY3R4OworCisgIC8qIEJ1ZmZlciBtYW5hZ2VtZW50LiAgKi8KKyAgaW50ICBidWZwb3M7CisgIGludCAgYnVmc2l6ZTsKKyAgdW5zaWduZWQgY2hhciBidWZbMV07Cit9ICpnY3J5X21kX2hkX3Q7CisKKy8qIENvbXBhdGliaWxpdHkgdHlwZXMsIGRvIG5vdCB1c2UgdGhlbS4gICovCisjaWZuZGVmIEdDUllQVF9OT19ERVBSRUNBVEVECit0eXBlZGVmIHN0cnVjdCBnY3J5X21kX2hhbmRsZSAqR0NSWV9NRF9IRCBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tZF9oYW5kbGUgKkdjcnlNREhkIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQ7CisjZW5kaWYKKworLyogQ3JlYXRlIGEgbWVzc2FnZSBkaWdlc3Qgb2JqZWN0IGZvciBhbGdvcml0aG0gQUxHTy4gIEZMQUdTIG1heSBiZQorICAgZ2l2ZW4gYXMgYW4gYml0d2lzZSBPUiBvZiB0aGUgZ2NyeV9tZF9mbGFncyB2YWx1ZXMuICBBTEdPIG1heSBiZQorICAgZ2l2ZW4gYXMgMCBpZiB0aGUgYWxnb3JpdGhtcyB0byBiZSB1c2VkIGFyZSBsYXRlciBzZXQgdXNpbmcKKyAgIGdjcnlfbWRfZW5hYmxlLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX29wZW4gKGdjcnlfbWRfaGRfdCAqaCwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qIFJlbGVhc2UgdGhlIG1lc3NhZ2UgZGlnZXN0IG9iamVjdCBIRC4gICovCit2b2lkIGdjcnlfbWRfY2xvc2UgKGdjcnlfbWRfaGRfdCBoZCk7CisKKy8qIEFkZCB0aGUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIEFMR08gdG8gdGhlIGRpZ2VzdCBvYmplY3QgSEQuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWRfZW5hYmxlIChnY3J5X21kX2hkX3QgaGQsIGludCBhbGdvKTsKKworLyogQ3JlYXRlIGEgbmV3IGRpZ2VzdCBvYmplY3QgYXMgYW4gZXhhY3QgY29weSBvZiB0aGUgb2JqZWN0IEhELiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX2NvcHkgKGdjcnlfbWRfaGRfdCAqYmhkLCBnY3J5X21kX2hkX3QgYWhkKTsKKworLyogUmVzZXQgdGhlIGRpZ2VzdCBvYmplY3QgSEQgdG8gaXRzIGluaXRpYWwgc3RhdGUuICAqLwordm9pZCBnY3J5X21kX3Jlc2V0IChnY3J5X21kX2hkX3QgaGQpOworCisvKiBQZXJmb3JtIHZhcmlvdXMgb3BlcmF0aW9ucyBvbiB0aGUgZGlnZXN0IG9iamVjdCBIRC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX2N0bCAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pOworCisvKiBQYXNzIExFTkdUSCBieXRlcyBvZiBkYXRhIGluIEJVRkZFUiB0byB0aGUgZGlnZXN0IG9iamVjdCBIRCBzbyB0aGF0CisgICBpdCBjYW4gdXBkYXRlIHRoZSBkaWdlc3QgdmFsdWVzLiAgVGhpcyBpcyB0aGUgYWN0dWFsIGhhc2gKKyAgIGZ1bmN0aW9uLiAqLwordm9pZCBnY3J5X21kX3dyaXRlIChnY3J5X21kX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CisKKy8qIFJlYWQgb3V0IHRoZSBmaW5hbCBkaWdlc3QgZnJvbSBIRCByZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBmb3IKKyAgIGFsZ29yaXRobSBBTEdPLiAqLwordW5zaWduZWQgY2hhciAqZ2NyeV9tZF9yZWFkIChnY3J5X21kX2hkX3QgaGQsIGludCBhbGdvKTsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBoYXNoIGZyb20gdGhlIGRhdGEgaW4gQlVGRkVSCisgICBvZiBzaXplIExFTkdUSCB1c2luZyB0aGUgYWxnb3JpdGhtIEFMR08gYXZvaWRpbmcgdGhlIGNyZWF0aW5nIG9mIGEKKyAgIGhhc2ggb2JqZWN0LiAgVGhlIGhhc2ggaXMgcmV0dXJuZWQgaW4gdGhlIGNhbGxlciBwcm92aWRlZCBidWZmZXIKKyAgIERJR0VTVCB3aGljaCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBkaWdlc3Qgb2YgdGhlIGdpdmVuCisgICBhbGdvcml0aG0uICovCit2b2lkIGdjcnlfbWRfaGFzaF9idWZmZXIgKGludCBhbGdvLCB2b2lkICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGhhc2ggbXVsdGlwbGUgYnVmZmVycy4gICovCitncGdfZXJyb3JfdCBnY3J5X21kX2hhc2hfYnVmZmVycyAoaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfYnVmZmVyX3QgKmlvdiwgaW50IGlvdmNudCk7CisKKy8qIFJldHJpZXZlIHRoZSBhbGdvcml0aG0gdXNlZCB3aXRoIEhELiAgVGhpcyBkb2VzIG5vdCB3b3JrIHJlbGlhYmxlCisgICBpZiBtb3JlIHRoYW4gb25lIGFsZ29yaXRobSBpcyBlbmFibGVkIGluIEhELiAqLworaW50IGdjcnlfbWRfZ2V0X2FsZ28gKGdjcnlfbWRfaGRfdCBoZCk7CisKKy8qIFJldHJpZXZlIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRpZ2VzdCB5aWVsZGVkIGJ5IGFsZ29yaXRobQorICAgQUxHTy4gKi8KK3Vuc2lnbmVkIGludCBnY3J5X21kX2dldF9hbGdvX2RsZW4gKGludCBhbGdvKTsKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIHRoZSBhbGdvcml0aG0gQUxHTyBpcyBlbmFibGVkIGluIHRoZSBkaWdlc3QKKyAgIG9iamVjdCBBLiAqLworaW50IGdjcnlfbWRfaXNfZW5hYmxlZCAoZ2NyeV9tZF9oZF90IGEsIGludCBhbGdvKTsKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIGRpZ2VzdCBvYmplY3QgQSBpcyBhbGxvY2F0ZWQgaW4gInNlY3VyZSIgbWVtb3J5LiAqLworaW50IGdjcnlfbWRfaXNfc2VjdXJlIChnY3J5X21kX2hkX3QgYSk7CisKKy8qIFJldHJpZXZlIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBILiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX2luZm8gKGdjcnlfbWRfaGRfdCBoLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7CisKKy8qIFJldHJpZXZlIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobSBBTEdPLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworCisvKiBNYXAgdGhlIGRpZ2VzdCBhbGdvcml0aG0gaWQgQUxHTyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgIGFsZ29yaXRobSBuYW1lLiAgRm9yIHVua25vd24gYWxnb3JpdGhtcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgICI/Ii4gKi8KK2NvbnN0IGNoYXIgKmdjcnlfbWRfYWxnb19uYW1lIChpbnQgYWxnbykgX0dDUllfR0NDX0FUVFJfUFVSRTsKKworLyogTWFwIHRoZSBhbGdvcml0aG0gTkFNRSB0byBhIGRpZ2VzdCBhbGdvcml0aG0gSWQuICBSZXR1cm4gMCBpZgorICAgdGhlIGFsZ29yaXRobSBuYW1lIGlzIG5vdCBrbm93bi4gKi8KK2ludCBnY3J5X21kX21hcF9uYW1lIChjb25zdCBjaGFyKiBuYW1lKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBGb3IgdXNlIHdpdGggdGhlIEhNQUMgZmVhdHVyZSwgdGhlIHNldCBNQUMga2V5IHRvIHRoZSBLRVkgb2YKKyAgIEtFWUxFTiBieXRlcy4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX3NldGtleSAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4pOworCisvKiBTdGFydCBvciBzdG9wIGRlYnVnZ2luZyBmb3IgZGlnZXN0IGhhbmRsZSBIRDsgaS5lLiBjcmVhdGUgYSBmaWxlCisgICBuYW1lZCBkYmdtZC08bj4uPHN1ZmZpeD4gd2hpbGUgaGFzaGluZy4gIElmIFNVRkZJWCBpcyBOVUxMLAorICAgZGVidWdnaW5nIHN0b3BzIGFuZCB0aGUgZmlsZSB3aWxsIGJlIGNsb3NlZC4gKi8KK3ZvaWQgZ2NyeV9tZF9kZWJ1ZyAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCBjaGFyICpzdWZmaXgpOworCisKKy8qIFVwZGF0ZSB0aGUgaGFzaChzKSBvZiBIIHdpdGggdGhlIGNoYXJhY3RlciBDLiAgVGhpcyBpcyBhIGJ1ZmZlcmVkCisgICB2ZXJzaW9uIG9mIHRoZSBnY3J5X21kX3dyaXRlIGZ1bmN0aW9uLiAqLworI2RlZmluZSBnY3J5X21kX3B1dGMoaCxjKSAgXAorICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBnY3J5X21kX2hkX3QgaF9fID0gKGgpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYoIChoX18pLT5idWZwb3MgPT0gKGhfXyktPmJ1ZnNpemUgKSAgICAgXAorICAgICAgICAgICAgICAgICAgICBnY3J5X21kX3dyaXRlKCAoaF9fKSwgTlVMTCwgMCApOyAgICAgIFwKKyAgICAgICAgICAgICAgICAoaF9fKS0+YnVmWyhoX18pLT5idWZwb3MrK10gPSAoYykgJiAweGZmOyBcCisgICAgICAgICAgICB9IHdoaWxlKDApCisKKy8qIEZpbmFsaXplIHRoZSBkaWdlc3QgY2FsY3VsYXRpb24uICBUaGlzIGlzIG5vdCByZWFsbHkgbmVlZGVkIGJlY2F1c2UKKyAgIGdjcnlfbWRfcmVhZCgpIGRvZXMgdGhpcyBpbXBsaWNpdGx5LiAqLworI2RlZmluZSBnY3J5X21kX2ZpbmFsKGEpIFwKKyAgICAgICAgICAgIGdjcnlfbWRfY3RsICgoYSksIEdDUllDVExfRklOQUxJWkUsIE5VTEwsIDApCisKKy8qIFJldHVybiAwIGlmIHRoZSBhbGdvcml0aG0gQSBpcyBhdmFpbGFibGUgZm9yIHVzZS4gKi8KKyNkZWZpbmUgZ2NyeV9tZF90ZXN0X2FsZ28oYSkgXAorICAgICAgICAgICAgZ2NyeV9tZF9hbGdvX2luZm8oIChhKSwgR0NSWUNUTF9URVNUX0FMR08sIE5VTEwsIE5VTEwgKQorCisvKiBSZXR1cm4gYW4gREVSIGVuY29kZWQgQVNOLjEgT0lEIGZvciB0aGUgYWxnb3JpdGhtIEEgaW4gYnVmZmVyIEIuIE4KKyAgIG11c3QgcG9pbnQgdG8gc2l6ZV90IHZhcmlhYmxlIHdpdGggdGhlIGF2YWlsYWJsZSBzaXplIG9mIGJ1ZmZlciBCLgorICAgQWZ0ZXIgcmV0dXJuIGl0IHdpbGwgcmVjZWl2ZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHJldHVybmVkCisgICBPSUQuICovCisjZGVmaW5lIGdjcnlfbWRfZ2V0X2Fzbm9pZChhLGIsbikgXAorICAgICAgICAgICAgZ2NyeV9tZF9hbGdvX2luZm8oKGEpLCBHQ1JZQ1RMX0dFVF9BU05PSUQsIChiKSwgKG4pKQorCisMCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgRnVuY3Rpb25zICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIGRhdGEgb2JqZWN0IHVzZWQgdG8gaG9sZCBhIGhhbmRsZSB0byBhbiBlbmNyeXB0aW9uIG9iamVjdC4gICovCitzdHJ1Y3QgZ2NyeV9tYWNfaGFuZGxlOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tYWNfaGFuZGxlICpnY3J5X21hY19oZF90OworCisvKiBBbGdvcml0aG0gSURzIGZvciB0aGUgaGFzaCBmdW5jdGlvbnMgd2Uga25vdyBhYm91dC4gTm90IGFsbCBvZiB0aGVtCisgICBhcmUgaW1wbGVtZW50ZWQuICovCitlbnVtIGdjcnlfbWFjX2FsZ29zCisgIHsKKyAgICBHQ1JZX01BQ19OT05FICAgICAgICAgICAgICAgPSAwLAorCisgICAgR0NSWV9NQUNfSE1BQ19TSEEyNTYgICAgICAgID0gMTAxLAorICAgIEdDUllfTUFDX0hNQUNfU0hBMjI0ICAgICAgICA9IDEwMiwKKyAgICBHQ1JZX01BQ19ITUFDX1NIQTUxMiAgICAgICAgPSAxMDMsCisgICAgR0NSWV9NQUNfSE1BQ19TSEEzODQgICAgICAgID0gMTA0LAorICAgIEdDUllfTUFDX0hNQUNfU0hBMSAgICAgICAgICA9IDEwNSwKKyAgICBHQ1JZX01BQ19ITUFDX01ENSAgICAgICAgICAgPSAxMDYsCisgICAgR0NSWV9NQUNfSE1BQ19NRDQgICAgICAgICAgID0gMTA3LAorICAgIEdDUllfTUFDX0hNQUNfUk1EMTYwICAgICAgICA9IDEwOCwKKyAgICBHQ1JZX01BQ19ITUFDX1RJR0VSMSAgICAgICAgPSAxMDksIC8qIFRoZSBmaXhlZCBUSUdFUiB2YXJpYW50ICovCisgICAgR0NSWV9NQUNfSE1BQ19XSElSTFBPT0wgICAgID0gMTEwLAorICAgIEdDUllfTUFDX0hNQUNfR09TVFIzNDExXzk0ICA9IDExMSwKKyAgICBHQ1JZX01BQ19ITUFDX1NUUklCT0cyNTYgICAgPSAxMTIsCisgICAgR0NSWV9NQUNfSE1BQ19TVFJJQk9HNTEyICAgID0gMTEzLAorCisgICAgR0NSWV9NQUNfQ01BQ19BRVMgICAgICAgICAgID0gMjAxLAorICAgIEdDUllfTUFDX0NNQUNfM0RFUyAgICAgICAgICA9IDIwMiwKKyAgICBHQ1JZX01BQ19DTUFDX0NBTUVMTElBICAgICAgPSAyMDMsCisgICAgR0NSWV9NQUNfQ01BQ19DQVNUNSAgICAgICAgID0gMjA0LAorICAgIEdDUllfTUFDX0NNQUNfQkxPV0ZJU0ggICAgICA9IDIwNSwKKyAgICBHQ1JZX01BQ19DTUFDX1RXT0ZJU0ggICAgICAgPSAyMDYsCisgICAgR0NSWV9NQUNfQ01BQ19TRVJQRU5UICAgICAgID0gMjA3LAorICAgIEdDUllfTUFDX0NNQUNfU0VFRCAgICAgICAgICA9IDIwOCwKKyAgICBHQ1JZX01BQ19DTUFDX1JGQzIyNjggICAgICAgPSAyMDksCisgICAgR0NSWV9NQUNfQ01BQ19JREVBICAgICAgICAgID0gMjEwLAorICAgIEdDUllfTUFDX0NNQUNfR09TVDI4MTQ3ICAgICA9IDIxMSwKKworICAgIEdDUllfTUFDX0dNQUNfQUVTICAgICAgICAgICA9IDQwMSwKKyAgICBHQ1JZX01BQ19HTUFDX0NBTUVMTElBICAgICAgPSA0MDIsCisgICAgR0NSWV9NQUNfR01BQ19UV09GSVNIICAgICAgID0gNDAzLAorICAgIEdDUllfTUFDX0dNQUNfU0VSUEVOVCAgICAgICA9IDQwNCwKKyAgICBHQ1JZX01BQ19HTUFDX1NFRUQgICAgICAgICAgPSA0MDUKKyAgfTsKKworLyogRmxhZ3MgdXNlZCB3aXRoIHRoZSBvcGVuIGZ1bmN0aW9uLiAgKi8KK2VudW0gZ2NyeV9tYWNfZmxhZ3MKKyAgeworICAgIEdDUllfTUFDX0ZMQUdfU0VDVVJFID0gMSwgIC8qIEFsbG9jYXRlIGFsbCBidWZmZXJzIGluICJzZWN1cmUiIG1lbW9yeS4gICovCisgIH07CisKKy8qIENyZWF0ZSBhIE1BQyBoYW5kbGUgZm9yIGFsZ29yaXRobSBBTEdPLiAgRkxBR1MgbWF5IGJlIGdpdmVuIGFzIGFuIGJpdHdpc2UgT1IKKyAgIG9mIHRoZSBnY3J5X21hY19mbGFncyB2YWx1ZXMuICBDVFggbWF5YmUgTlVMTCBvciBnY3J5X2N0eF90IG9iamVjdCB0byBiZQorICAgYXNzb2NpYXRlZCB3aXRoIEhBTkRMRS4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfb3BlbiAoZ2NyeV9tYWNfaGRfdCAqaGFuZGxlLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGdjcnlfY3R4X3QgY3R4KTsKKworLyogQ2xvc2UgdGhlIE1BQyBoYW5kbGUgSCBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2UuICovCit2b2lkIGdjcnlfbWFjX2Nsb3NlIChnY3J5X21hY19oZF90IGgpOworCisvKiBQZXJmb3JtIHZhcmlvdXMgb3BlcmF0aW9ucyBvbiB0aGUgTUFDIG9iamVjdCBILiAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX2N0bCAoZ2NyeV9tYWNfaGRfdCBoLCBpbnQgY21kLCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKKworLyogUmV0cmlldmUgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTUFDIGFsZ29yaXRobSBBTEdPLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5ieXRlcyk7CisKKy8qIFNldCBLRVkgb2YgbGVuZ3RoIEtFWUxFTiBieXRlcyBmb3IgdGhlIE1BQyBoYW5kbGUgSEQuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX3NldGtleSAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbik7CisKKy8qIFNldCBpbml0aWFsaXphdGlvbiB2ZWN0b3IgSVYgb2YgbGVuZ3RoIElWTEVOIGZvciB0aGUgTUFDIGhhbmRsZSBIRC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY19zZXRpdiAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdmxlbik7CisKKy8qIFBhc3MgTEVOR1RIIGJ5dGVzIG9mIGRhdGEgaW4gQlVGRkVSIHRvIHRoZSBNQUMgb2JqZWN0IEhEIHNvIHRoYXQKKyAgIGl0IGNhbiB1cGRhdGUgdGhlIE1BQyB2YWx1ZXMuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX3dyaXRlIChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpOworCisvKiBSZWFkIG91dCB0aGUgZmluYWwgYXV0aGVudGljYXRpb24gY29kZSBmcm9tIHRoZSBNQUMgb2JqZWN0IEhEIHRvIEJVRkZFUi4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY19yZWFkIChnY3J5X21hY19oZF90IGhkLCB2b2lkICpidWZmZXIsIHNpemVfdCAqYnVmbGVuKTsKKworLyogVmVyaWZ5IHRoZSBmaW5hbCBhdXRoZW50aWNhdGlvbiBjb2RlIGZyb20gdGhlIE1BQyBvYmplY3QgSEQgd2l0aCBCVUZGRVIuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfdmVyaWZ5IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKKworLyogUmV0cmlldmUgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgTUFDIHlpZWxkZWQgYnkgYWxnb3JpdGhtIEFMR08uICovCit1bnNpZ25lZCBpbnQgZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuIChpbnQgYWxnbyk7CisKKy8qIFJldHJpZXZlIHRoZSBkZWZhdWx0IGtleSBsZW5ndGggaW4gYnl0ZXMgdXNlZCB3aXRoIGFsZ29yaXRobSBBLiAqLwordW5zaWduZWQgaW50IGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbiAoaW50IGFsZ28pOworCisvKiBNYXAgdGhlIE1BQyBhbGdvcml0aG0gd2hvc2UgSUQgaXMgY29udGFpbmVkIGluIEFMR09SSVRITSB0byBhCisgICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFsZ29yaXRobSBuYW1lLiAgRm9yIHVua25vd24gYWxnb3JpdGhtCisgICBJRHMgdGhpcyBmdW5jdGlvbiByZXR1cm5zICI/Ii4gICovCitjb25zdCBjaGFyICpnY3J5X21hY19hbGdvX25hbWUgKGludCBhbGdvcml0aG0pIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIE1hcCB0aGUgYWxnb3JpdGhtIG5hbWUgTkFNRSB0byBhbiBNQUMgYWxnb3JpdGhtIElELiAgUmV0dXJuIDAgaWYKKyAgIHRoZSBhbGdvcml0aG0gbmFtZSBpcyBub3Qga25vd24uICovCitpbnQgZ2NyeV9tYWNfbWFwX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIFJlc2V0IHRoZSBoYW5kbGUgdG8gdGhlIHN0YXRlIGFmdGVyIG9wZW4vc2V0a2V5LiAgKi8KKyNkZWZpbmUgZ2NyeV9tYWNfcmVzZXQoaCkgIGdjcnlfbWFjX2N0bCAoKGgpLCBHQ1JZQ1RMX1JFU0VULCBOVUxMLCAwKQorCisvKiBSZXR1cm4gMCBpZiB0aGUgYWxnb3JpdGhtIEEgaXMgYXZhaWxhYmxlIGZvciB1c2UuICovCisjZGVmaW5lIGdjcnlfbWFjX3Rlc3RfYWxnbyhhKSBcCisgICAgICAgICAgICBnY3J5X21hY19hbGdvX2luZm8oIChhKSwgR0NSWUNUTF9URVNUX0FMR08sIE5VTEwsIE5VTEwgKQorCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgS2V5IERlcml2YXRpb24gRnVuY3Rpb25zICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBbGdvcml0aG0gSURzIGZvciB0aGUgS0RGcy4gICovCitlbnVtIGdjcnlfa2RmX2FsZ29zCisgIHsKKyAgICBHQ1JZX0tERl9OT05FID0gMCwKKyAgICBHQ1JZX0tERl9TSU1QTEVfUzJLID0gMTYsCisgICAgR0NSWV9LREZfU0FMVEVEX1MySyA9IDE3LAorICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLID0gMTksCisgICAgR0NSWV9LREZfUEJLREYxID0gMzMsCisgICAgR0NSWV9LREZfUEJLREYyID0gMzQsCisgICAgR0NSWV9LREZfU0NSWVBUID0gNDgKKyAgfTsKKworLyogRGVyaXZlIGEga2V5IGZyb20gYSBwYXNzcGhyYXNlLiAgKi8KK2dwZ19lcnJvcl90IGdjcnlfa2RmX2Rlcml2ZSAoY29uc3Qgdm9pZCAqcGFzc3BocmFzZSwgc2l6ZV90IHBhc3NwaHJhc2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGdvLCBpbnQgc3ViYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2FsdCwgc2l6ZV90IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleXNpemUsIHZvaWQgKmtleWJ1ZmZlcik7CisKKworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFJhbmRvbSBHZW5lcmF0aW5nIEZ1bmN0aW9ucyAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGUgdHlwZSBvZiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICAqLworZW51bSBnY3J5X3JuZ190eXBlcworICB7CisgICAgR0NSWV9STkdfVFlQRV9TVEFOREFSRCAgID0gMSwgLyogVGhlIGRlZmF1bHQgQ1NQUk5HIGdlbmVyYXRvci4gICovCisgICAgR0NSWV9STkdfVFlQRV9GSVBTICAgICAgID0gMiwgLyogVGhlIEZJUFMgWDkuMzEgQUVTIGdlbmVyYXRvci4gICovCisgICAgR0NSWV9STkdfVFlQRV9TWVNURU0gICAgID0gMyAgLyogVGhlIHN5c3RlbSdzIG5hdGl2ZSBnZW5lcmF0b3IuICovCisgIH07CisKKy8qIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSByYW5kb20gcXVhbGl0eS4gIFRoZSBydWxlIG9mIHRodW1iIGlzCisgICB0byB1c2UgU1RST05HIGZvciBzZXNzaW9uIGtleXMgYW5kIFZFUllfU1RST05HIGZvciBrZXkgbWF0ZXJpYWwuCisgICBXRUFLIGlzIHVzdWFsbHkgYW4gYWxpYXMgZm9yIFNUUk9ORyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUKKyAgIChleGNlcHQgd2l0aCBnY3J5X21waV9yYW5kb21pemUpOyB1c2UgZ2NyeV9jcmVhdGVfbm9uY2UgaW5zdGVhZC4gKi8KK3R5cGVkZWYgZW51bSBnY3J5X3JhbmRvbV9sZXZlbAorICB7CisgICAgR0NSWV9XRUFLX1JBTkRPTSA9IDAsCisgICAgR0NSWV9TVFJPTkdfUkFORE9NID0gMSwKKyAgICBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSA9IDIKKyAgfQorZ2NyeV9yYW5kb21fbGV2ZWxfdDsKKworLyogRmlsbCBCVUZGRVIgd2l0aCBMRU5HVEggYnl0ZXMgb2YgcmFuZG9tLCB1c2luZyByYW5kb20gbnVtYmVycyBvZgorICAgcXVhbGl0eSBMRVZFTC4gKi8KK3ZvaWQgZ2NyeV9yYW5kb21pemUgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOworCisvKiBBZGQgdGhlIGV4dGVybmFsIHJhbmRvbSBmcm9tIEJVRkZFUiB3aXRoIExFTkdUSCBieXRlcyBpbnRvIHRoZQorICAgcG9vbC4gUVVBTElUWSBzaG91bGQgZWl0aGVyIGJlIC0xIGZvciB1bmtub3duIG9yIGluIHRoZSByYW5nZSBvZiAwCisgICB0byAxMDAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3JhbmRvbV9hZGRfYnl0ZXMgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxdWFsaXR5KTsKKworLyogSWYgcmFuZG9tIG51bWJlcnMgYXJlIHVzZWQgaW4gYW4gYXBwbGljYXRpb24sIHRoaXMgbWFjcm8gc2hvdWxkIGJlCisgICBjYWxsZWQgZnJvbSB0aW1lIHRvIHRpbWUgc28gdGhhdCBuZXcgc3R1ZmYgZ2V0cyBhZGRlZCB0byB0aGUKKyAgIGludGVybmFsIHBvb2wgb2YgdGhlIFJORy4gICovCisjZGVmaW5lIGdjcnlfZmFzdF9yYW5kb21fcG9sbCgpICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRkFTVF9QT0xMLCBOVUxMKQorCisKKy8qIFJldHVybiBOQllURVMgb2YgYWxsb2NhdGVkIHJhbmRvbSB1c2luZyBhIHJhbmRvbSBudW1iZXJzIG9mIHF1YWxpdHkKKyAgIExFVkVMLiAqLwordm9pZCAqZ2NyeV9yYW5kb21fYnl0ZXMgKHNpemVfdCBuYnl0ZXMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgX0dDUllfR0NDX0FUVFJfTUFMTE9DOworCisvKiBSZXR1cm4gTkJZVEVTIG9mIGFsbG9jYXRlZCByYW5kb20gdXNpbmcgYSByYW5kb20gbnVtYmVycyBvZiBxdWFsaXR5CisgICBMRVZFTC4gIFRoZSByYW5kb20gbnVtYmVycyBhcmUgY3JlYXRlZCByZXR1cm5lZCBpbiAic2VjdXJlIgorICAgbWVtb3J5LiAqLwordm9pZCAqZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlIChzaXplX3QgbmJ5dGVzLCBlbnVtIGdjcnlfcmFuZG9tX2xldmVsIGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7CisKKworLyogU2V0IHRoZSBiaWcgaW50ZWdlciBXIHRvIGEgcmFuZG9tIHZhbHVlIG9mIE5CSVRTIHVzaW5nIGEgcmFuZG9tCisgICBnZW5lcmF0b3Igd2l0aCBxdWFsaXR5IExFVkVMLiAgTm90ZSB0aGF0IGJ5IHVzaW5nIGEgbGV2ZWwgb2YKKyAgIEdDUllfV0VBS19SQU5ET00gZ2NyeV9jcmVhdGVfbm9uY2UgaXMgdXNlZCBpbnRlcm5hbGx5LiAqLwordm9pZCBnY3J5X21waV9yYW5kb21pemUgKGdjcnlfbXBpX3QgdywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpOworCisKKy8qIENyZWF0ZSBhbiB1bnByZWRpY2FibGUgbm9uY2Ugb2YgTEVOR1RIIGJ5dGVzIGluIEJVRkZFUi4gKi8KK3ZvaWQgZ2NyeV9jcmVhdGVfbm9uY2UgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CisKKworCisKKwwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQcmltZSBOdW1iZXIgRnVuY3Rpb25zICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZGUgdmFsdWVzIHBhc3NlZCB0byBhIGdjcnlfcHJpbWVfY2hlY2tfZnVuY190LiAqLworI2RlZmluZSBHQ1JZX1BSSU1FX0NIRUNLX0FUX0ZJTklTSCAgICAgIDAKKyNkZWZpbmUgR0NSWV9QUklNRV9DSEVDS19BVF9HT1RfUFJJTUUgICAxCisjZGVmaW5lIEdDUllfUFJJTUVfQ0hFQ0tfQVRfTUFZQkVfUFJJTUUgMgorCisvKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAxIGlmIHRoZSBvcGVyYXRpb24gc2hhbGwgY29udGludWUsIDAgdG8KKyAgIHJlamVjdCB0aGUgcHJpbWUgY2FuZGlkYXRlLiAqLwordHlwZWRlZiBpbnQgKCpnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCkgKHZvaWQgKmFyZywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBjYW5kaWRhdGUpOworCisvKiBGbGFncyBmb3IgZ2NyeV9wcmltZV9nZW5lcmF0ZSgpOiAgKi8KKworLyogQWxsb2NhdGUgcHJpbWUgbnVtYmVycyBhbmQgZmFjdG9ycyBpbiBzZWN1cmUgbWVtb3J5LiAgKi8KKyNkZWZpbmUgR0NSWV9QUklNRV9GTEFHX1NFQ1JFVCAgICAgICAgICgxIDw8IDApCisKKy8qIE1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBwcmltZSBmYWN0b3IgaXMgb2Ygc2l6ZQorICAgYEZBQ1RPUl9CSVRTJy4gICovCisjZGVmaW5lIEdDUllfUFJJTUVfRkxBR19TUEVDSUFMX0ZBQ1RPUiAoMSA8PCAxKQorCisvKiBHZW5lcmF0ZSBhIG5ldyBwcmltZSBudW1iZXIgb2YgUFJJTUVfQklUUyBiaXRzIGFuZCBzdG9yZSBpdCBpbgorICAgUFJJTUUuICBJZiBGQUNUT1JfQklUUyBpcyBub24temVybywgb25lIG9mIHRoZSBwcmltZSBmYWN0b3JzIG9mCisgICAocHJpbWUgLSAxKSAvIDIgbXVzdCBiZSBGQUNUT1JfQklUUyBiaXRzIGxvbmcuICBJZiBGQUNUT1JTIGlzCisgICBub24temVybywgYWxsb2NhdGUgYSBuZXcsIE5VTEwtdGVybWluYXRlZCBhcnJheSBob2xkaW5nIHRoZSBwcmltZQorICAgZmFjdG9ycyBhbmQgc3RvcmUgaXQgaW4gRkFDVE9SUy4gIEZMQUdTIG1pZ2h0IGJlIHVzZWQgdG8gaW5mbHVlbmNlCisgICB0aGUgcHJpbWUgbnVtYmVyIGdlbmVyYXRpb24gcHJvY2Vzcy4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wcmltZV9nZW5lcmF0ZSAoZ2NyeV9tcGlfdCAqcHJpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByaW1lX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZhY3Rvcl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKipmYWN0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfcHJpbWVfY2hlY2tfZnVuY190IGNiX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfcmFuZG9tX2xldmVsX3QgcmFuZG9tX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qIEZpbmQgYSBnZW5lcmF0b3IgZm9yIFBSSU1FIHdoZXJlIHRoZSBmYWN0b3JpemF0aW9uIG9mIChwcmltZS0xKSBpcworICAgaW4gdGhlIE5VTEwgdGVybWluYXRlZCBhcnJheSBGQUNUT1JTLiBSZXR1cm4gdGhlIGdlbmVyYXRvciBhcyBhCisgICBuZXdseSBhbGxvY2F0ZWQgTVBJIGluIFJfRy4gIElmIFNUQVJUX0cgaXMgbm90IE5VTEwsIHVzZSB0aGlzIGFzCisgICB0ZWggc3RhcnQgZm9yIHRoZSBzZWFyY2guICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgKGdjcnlfbXBpX3QgKnJfZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBwcmltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCAqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBzdGFydF9nKTsKKworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byByZWxlYXNlIHRoZSBGQUNUT1JTIGFycmF5LiAqLwordm9pZCBnY3J5X3ByaW1lX3JlbGVhc2VfZmFjdG9ycyAoZ2NyeV9tcGlfdCAqZmFjdG9ycyk7CisKKworLyogQ2hlY2sgd2V0aGVyIHRoZSBudW1iZXIgWCBpcyBwcmltZS4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wcmltZV9jaGVjayAoZ2NyeV9tcGlfdCB4LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisKKwwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBNaXNjZWxsYW5lb3VzIFN0dWZmICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJlbGVhc2UgdGhlIGNvbnRleHQgb2JqZWN0IENUWC4gICovCit2b2lkIGdjcnlfY3R4X3JlbGVhc2UgKGdjcnlfY3R4X3QgY3R4KTsKKworLyogTG9nIGRhdGEgdXNpbmcgTGliZ2NyeXB0J3Mgb3duIGxvZyBpbnRlcmZhY2UuICAqLwordm9pZCBnY3J5X2xvZ19kZWJ1ZyAoY29uc3QgY2hhciAqZm10LCAuLi4pIF9HQ1JZX0dDQ19BVFRSX1BSSU5URigxLDIpOwordm9pZCBnY3J5X2xvZ19kZWJ1Z2hleCAoY29uc3QgY2hhciAqdGV4dCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKK3ZvaWQgZ2NyeV9sb2dfZGVidWdtcGkgKGNvbnN0IGNoYXIgKnRleHQsIGdjcnlfbXBpX3QgbXBpKTsKK3ZvaWQgZ2NyeV9sb2dfZGVidWdwbnQgKGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV9wb2ludF90IHBvaW50LCBnY3J5X2N0eF90IGN0eCk7Cit2b2lkIGdjcnlfbG9nX2RlYnVnc3hwIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X3NleHBfdCBzZXhwKTsKKworCisvKiBMb2cgbGV2ZWxzIHVzZWQgYnkgdGhlIGludGVybmFsIGxvZ2dpbmcgZmFjaWxpdHkuICovCitlbnVtIGdjcnlfbG9nX2xldmVscworICB7CisgICAgR0NSWV9MT0dfQ09OVCAgID0gMCwgICAgLyogKENvbnRpbnVlIHRoZSBsYXN0IGxvZyBsaW5lLikgKi8KKyAgICBHQ1JZX0xPR19JTkZPICAgPSAxMCwKKyAgICBHQ1JZX0xPR19XQVJOICAgPSAyMCwKKyAgICBHQ1JZX0xPR19FUlJPUiAgPSAzMCwKKyAgICBHQ1JZX0xPR19GQVRBTCAgPSA0MCwKKyAgICBHQ1JZX0xPR19CVUcgICAgPSA1MCwKKyAgICBHQ1JZX0xPR19ERUJVRyAgPSAxMDAKKyAgfTsKKworLyogVHlwZSBmb3IgcHJvZ3Jlc3MgaGFuZGxlcnMuICAqLwordHlwZWRlZiB2b2lkICgqZ2NyeV9oYW5kbGVyX3Byb2dyZXNzX3QpICh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCk7CisKKy8qIFR5cGUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAqKCpnY3J5X2hhbmRsZXJfYWxsb2NfdCkgKHNpemVfdCBuKTsKKworLyogVHlwZSBmb3Igc2VjdXJlIG1lbW9yeSBjaGVjayBoYW5kbGVycy4gICovCit0eXBlZGVmIGludCAoKmdjcnlfaGFuZGxlcl9zZWN1cmVfY2hlY2tfdCkgKGNvbnN0IHZvaWQgKik7CisKKy8qIFR5cGUgZm9yIG1lbW9yeSByZWFsbG9jYXRpb24gaGFuZGxlcnMuICAqLwordHlwZWRlZiB2b2lkICooKmdjcnlfaGFuZGxlcl9yZWFsbG9jX3QpICh2b2lkICpwLCBzaXplX3Qgbik7CisKKy8qIFR5cGUgZm9yIG1lbW9yeSBmcmVlIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmdjcnlfaGFuZGxlcl9mcmVlX3QpICh2b2lkICopOworCisvKiBUeXBlIGZvciBvdXQtb2YtbWVtb3J5IGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgaW50ICgqZ2NyeV9oYW5kbGVyX25vX21lbV90KSAodm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CisKKy8qIFR5cGUgZm9yIGZhdGFsIGVycm9yIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmdjcnlfaGFuZGxlcl9lcnJvcl90KSAodm9pZCAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisKKy8qIFR5cGUgZm9yIGxvZ2dpbmcgaGFuZGxlcnMuICAqLwordHlwZWRlZiB2b2lkICgqZ2NyeV9oYW5kbGVyX2xvZ190KSAodm9pZCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKy8qIENlcnRhaW4gb3BlcmF0aW9ucyBjYW4gcHJvdmlkZSBwcm9ncmVzcyBpbmZvcm1hdGlvbi4gIFRoaXMgZnVuY3Rpb24KKyAgIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBoYW5kbGVyIGZvciByZXRyaWV2aW5nIHRoZXNlIGluZm9ybWF0aW9uLiAqLwordm9pZCBnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyIChnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdCBjYiwgdm9pZCAqY2JfZGF0YSk7CisKKworLyogUmVnaXN0ZXIgYSBjdXN0b20gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiAqLwordm9pZCBnY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXIgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfYWxsb2NfdCBmdW5jX2FsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfYWxsb2NfdCBmdW5jX2FsbG9jX3NlY3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX3NlY3VyZV9jaGVja190IGZ1bmNfc2VjdXJlX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfcmVhbGxvY190IGZ1bmNfcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBmdW5jX2ZyZWUpOworCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgb3V0IG9mIG1lbW9yeQorICAgaGFuZGxlci4gKi8KK3ZvaWQgZ2NyeV9zZXRfb3V0b2Zjb3JlX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9ub19tZW1fdCBoLCB2b2lkICpvcGFxdWUpOworCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgZmF0YWwgZXJyb3IKKyAgIGhhbmRsZXIuICovCit2b2lkIGdjcnlfc2V0X2ZhdGFsZXJyb3JfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX2Vycm9yX3QgZm5jLCB2b2lkICpvcGFxdWUpOworCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgbG9nZ2luZworICAgZmFjaWxpdHkuICovCit2b2lkIGdjcnlfc2V0X2xvZ19oYW5kbGVyIChnY3J5X2hhbmRsZXJfbG9nX3QgZiwgdm9pZCAqb3BhcXVlKTsKKworLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCit2b2lkIGdjcnlfc2V0X2dldHRleHRfaGFuZGxlciAoY29uc3QgY2hhciAqKCpmKShjb25zdCBjaGFyKikpOworCisvKiBMaWJnY3J5cHQgdXNlcyBpdHMgb3duIG1lbW9yeSBhbGxvY2F0aW9uLiAgSXQgaXMgaW1wb3J0YW50IHRvIHVzZQorICAgZ2NyeV9mcmVlICgpIHRvIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSBsaWJnY3J5cHQuICovCit2b2lkICpnY3J5X21hbGxvYyAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfY2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IG0pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfbWFsbG9jX3NlY3VyZSAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfY2FsbG9jX3NlY3VyZSAoc2l6ZV90IG4sIHNpemVfdCBtKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X3JlYWxsb2MgKHZvaWQgKmEsIHNpemVfdCBuKTsKK2NoYXIgKmdjcnlfc3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfeG1hbGxvYyAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfeGNhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBtKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X3htYWxsb2Nfc2VjdXJlIChzaXplX3QgbikgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqZ2NyeV94Y2FsbG9jX3NlY3VyZSAoc2l6ZV90IG4sIHNpemVfdCBtKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X3hyZWFsbG9jICh2b2lkICphLCBzaXplX3Qgbik7CitjaGFyICpnY3J5X3hzdHJkdXAgKGNvbnN0IGNoYXIgKiBhKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICBnY3J5X2ZyZWUgKHZvaWQgKmEpOworCisvKiBSZXR1cm4gdHJ1ZSBpZiBBIGlzIGFsbG9jYXRlZCBpbiAic2VjdXJlIiBtZW1vcnkuICovCitpbnQgZ2NyeV9pc19zZWN1cmUgKGNvbnN0IHZvaWQgKmEpIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIFJldHVybiB0cnVlIGlmIExpYmdjcnlwdCBpcyBpbiBGSVBTIG1vZGUuICAqLworI2RlZmluZSBnY3J5X2ZpcHNfbW9kZV9hY3RpdmUoKSAgISFnY3J5X2NvbnRyb2wgKEdDUllDVExfRklQU19NT0RFX1AsIDApCisKKworI2lmIDAgLyogKEtlZXAgRW1hY3NlbnMnIGF1dG8taW5kZW50IGhhcHB5LikgKi8KK3sKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBfR0NSWVBUX0ggKi8KKy8qCitMb2NhbCBWYXJpYWJsZXM6CitidWZmZXItcmVhZC1vbmx5OiB0CitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvc3JjL2djcnlwdC5oLmluIGIvc3JjL2djcnlwdC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjQ4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ2NyeXB0LmguaW4KQEAgLTAsMCArMSwxNjgzIEBACisvKiBnY3J5cHQuaCAtICBHTlUgQ3J5cHRvZ3JhcGhpYyBMaWJyYXJ5IEludGVyZmFjZSAgICAgICAgICAgICAgLSotIGMgLSotCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgKiAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCisgKiAgICAgICAgICAgICAgIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzICBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIEZpbGU6IEBjb25maWd1cmVfaW5wdXRACisgKi8KKworI2lmbmRlZiBfR0NSWVBUX0gKKyNkZWZpbmUgX0dDUllQVF9ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdwZy1lcnJvci5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworIyBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyBpbmNsdWRlIDx3czJ0Y3BpcC5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjIGlmbmRlZiBfX0dOVUNfXworICB0eXBlZGVmIGxvbmcgc3NpemVfdDsKKyAgdHlwZWRlZiBpbnQgIHBpZF90OworIyBlbmRpZiAvKiFfX0dOVUNfXyovCisjZWxzZQorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjQElOU0VSVF9TWVNfU0VMRUNUX0hACisjZW5kaWYgLyohX1dJTjMyKi8KKworQEZBTExCQUNLX1NPQ0tMRU5fVEAKKworLyogVGhpcyBpcyByZXF1aXJlZCBmb3IgZXJyb3IgY29kZSBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSBfR0NSWV9FUlJfU09VUkNFX0RFRkFVTFQgR1BHX0VSUl9TT1VSQ0VfR0NSWVBUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWYgMCAvKiAoS2VlcCBFbWFjc2VucycgYXV0by1pbmRlbnQgaGFwcHkuKSAqLworfQorI2VuZGlmCisjZW5kaWYKKworLyogVGhlIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgc2hvdWxkIG1hdGNoIHRoZSBvbmUgb2YgdGhlIGxpYnJhcnkuIEl0CisgICBzaG91bGQgbm90IGJlIHVzZWQgYnkgYSBwcm9ncmFtIGJlY2F1c2UgZ2NyeV9jaGVja192ZXJzaW9uKCkgc2hvdWxkCisgICByZXR1cm4gdGhlIHNhbWUgdmVyc2lvbi4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWFjcm8gaXMgdG8gbGV0CisgICBhdXRvY29uZiAodXNpbmcgdGhlIEFNX1BBVEhfR0NSWVBUIG1hY3JvKSBjaGVjayB0aGF0IHRoaXMgaGVhZGVyCisgICBtYXRjaGVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeS4gICovCisjZGVmaW5lIEdDUllQVF9WRVJTSU9OICJAVkVSU0lPTkAiCisKKy8qIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGhlYWRlci4gIEl0IG1heSBiZSB1c2VkIHRvIGhhbmRsZSBtaW5vcgorICAgQVBJIGluY29tcGF0aWJpbGl0aWVzLiAgKi8KKyNkZWZpbmUgR0NSWVBUX1ZFUlNJT05fTlVNQkVSIEBWRVJTSU9OX05VTUJFUkAKKworCisvKiBJbnRlcm5hbDogV2UgY2FuJ3QgdXNlIHRoZSBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIHRoZSBtdWx0aQorICAgcHJlY2lzaW9uIGludGVnZXIgZnVuY3Rpb25zIHdoZW4gYnVpbGRpbmcgdGhpcyBsaWJyYXJ5LiAqLworI2lmZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjaWZuZGVmIEdDUllQVF9OT19NUElfTUFDUk9TCisjZGVmaW5lIEdDUllQVF9OT19NUElfTUFDUk9TIDEKKyNlbmRpZgorI2VuZGlmCisKKy8qIFdlIHdhbnQgdG8gdXNlIGdjYyBhdHRyaWJ1dGVzIHdoZW4gcG9zc2libGUuICBXYXJuaW5nOiBEb24ndCB1c2UKKyAgIHRoZXNlIG1hY3JvcyBpbiB5b3VyIHByb2dyYW1zOiBBcyBpbmRpY2F0ZWQgYnkgdGhlIGxlYWRpbmcKKyAgIHVuZGVyc2NvcmUgdGhleSBhcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuICovCisjaWZkZWYgX19HTlVDX18KKworI2RlZmluZSBfR0NSWV9HQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19HTlVDX01JTk9SX18gKiAxMDAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fR05VQ19QQVRDSExFVkVMX18pCisKKyNpZiBfR0NSWV9HQ0NfVkVSU0lPTiA+PSAzMDEwMAorI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18gKChfX2RlcHJlY2F0ZWRfXykpCisjZW5kaWYKKworI2lmIF9HQ1JZX0dDQ19WRVJTSU9OID49IDI5NjAwCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX1BVUkUgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZW5kaWYKKworI2lmIF9HQ1JZX0dDQ19WRVJTSU9OID49IDMwMjAwCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX01BTExPQyAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKQorI2VuZGlmCisKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfUFJJTlRGKGYsYSkgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZixmLGEpKSkKKworI2lmIF9HQ1JUX0dDQ19WRVJTSU9OID49IDQwMDAwCisjZGVmaW5lIF9HQ1JZX0dDQ19BVFRSX1NFTlRJTkVMKGEpIF9fYXR0cmlidXRlX18gKChzZW50aW5lbChhKSkpCisjZW5kaWYKKworI2VuZGlmIC8qX19HTlVDX18qLworCisjaWZuZGVmIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRAorI2VuZGlmCisjaWZuZGVmIF9HQ1JZX0dDQ19BVFRSX1BVUkUKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfUFVSRQorI2VuZGlmCisjaWZuZGVmIF9HQ1JZX0dDQ19BVFRSX01BTExPQworI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0MKKyNlbmRpZgorI2lmbmRlZiBfR0NSWV9HQ0NfQVRUUl9QUklOVEYKKyNkZWZpbmUgX0dDUllfR0NDX0FUVFJfUFJJTlRGKGYsYSkKKyNlbmRpZgorI2lmbmRlZiBfR0NSWV9HQ0NfQVRUUl9TRU5USU5FTAorI2RlZmluZSBfR0NSWV9HQ0NfQVRUUl9TRU5USU5FTChhKQorI2VuZGlmCisKKy8qIE1ha2UgdXAgYW4gYXR0cmlidXRlIHRvIG1hcmsgZnVuY3Rpb25zIGFuZCB0eXBlcyBhcyBkZXByZWNhdGVkIGJ1dAorICAgYWxsb3cgaW50ZXJuYWwgdXNlIGJ5IExpYmdjcnlwdC4gICovCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyNkZWZpbmUgX0dDUllfQVRUUl9JTlRFUk5BTAorI2Vsc2UKKyNkZWZpbmUgX0dDUllfQVRUUl9JTlRFUk5BTAlfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVECisjZW5kaWYKKworLyogV3JhcHBlcnMgZm9yIHRoZSBsaWJncGctZXJyb3IgbGlicmFyeS4gICovCisKK3R5cGVkZWYgZ3BnX2Vycm9yX3QgZ2NyeV9lcnJvcl90OwordHlwZWRlZiBncGdfZXJyX2NvZGVfdCBnY3J5X2Vycl9jb2RlX3Q7Cit0eXBlZGVmIGdwZ19lcnJfc291cmNlX3QgZ2NyeV9lcnJfc291cmNlX3Q7CisKK3N0YXRpYyBHUEdfRVJSX0lOTElORSBnY3J5X2Vycm9yX3QKK2djcnlfZXJyX21ha2UgKGdjcnlfZXJyX3NvdXJjZV90IHNvdXJjZSwgZ2NyeV9lcnJfY29kZV90IGNvZGUpCit7CisgIHJldHVybiBncGdfZXJyX21ha2UgKHNvdXJjZSwgY29kZSk7Cit9CisKKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgR1BHX0VSUl9TT1VSQ0VfREVGQVVMVCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMKKyAgIGZpbGUgdG8gc3BlY2lmeSBhIGRlZmF1bHQgc291cmNlIGZvciBncGdfZXJyb3IuICAqLworI2lmbmRlZiBHQ1JZX0VSUl9TT1VSQ0VfREVGQVVMVAorI2RlZmluZSBHQ1JZX0VSUl9TT1VSQ0VfREVGQVVMVCAgR1BHX0VSUl9TT1VSQ0VfVVNFUl8xCisjZW5kaWYKKworc3RhdGljIEdQR19FUlJfSU5MSU5FIGdjcnlfZXJyb3JfdAorZ2NyeV9lcnJvciAoZ2NyeV9lcnJfY29kZV90IGNvZGUpCit7CisgIHJldHVybiBnY3J5X2Vycl9tYWtlIChHQ1JZX0VSUl9TT1VSQ0VfREVGQVVMVCwgY29kZSk7Cit9CisKK3N0YXRpYyBHUEdfRVJSX0lOTElORSBnY3J5X2Vycl9jb2RlX3QKK2djcnlfZXJyX2NvZGUgKGdjcnlfZXJyb3JfdCBlcnIpCit7CisgIHJldHVybiBncGdfZXJyX2NvZGUgKGVycik7Cit9CisKKworc3RhdGljIEdQR19FUlJfSU5MSU5FIGdjcnlfZXJyX3NvdXJjZV90CitnY3J5X2Vycl9zb3VyY2UgKGdjcnlfZXJyb3JfdCBlcnIpCit7CisgIHJldHVybiBncGdfZXJyX3NvdXJjZSAoZXJyKTsKK30KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIGEgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yCisgICBjb2RlIGluIHRoZSBlcnJvciB2YWx1ZSBFUlIuICAqLworY29uc3QgY2hhciAqZ2NyeV9zdHJlcnJvciAoZ2NyeV9lcnJvcl90IGVycik7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcgorICAgc291cmNlIGluIHRoZSBlcnJvciB2YWx1ZSBFUlIuICAqLworY29uc3QgY2hhciAqZ2NyeV9zdHJzb3VyY2UgKGdjcnlfZXJyb3JfdCBlcnIpOworCisvKiBSZXRyaWV2ZSB0aGUgZXJyb3IgY29kZSBmb3IgdGhlIHN5c3RlbSBlcnJvciBFUlIuICBUaGlzIHJldHVybnMKKyAgIEdQR19FUlJfVU5LTk9XTl9FUlJOTyBpZiB0aGUgc3lzdGVtIGVycm9yIGlzIG5vdCBtYXBwZWQgKHJlcG9ydAorICAgdGhpcykuICAqLworZ2NyeV9lcnJfY29kZV90IGdjcnlfZXJyX2NvZGVfZnJvbV9lcnJubyAoaW50IGVycik7CisKKy8qIFJldHJpZXZlIHRoZSBzeXN0ZW0gZXJyb3IgZm9yIHRoZSBlcnJvciBjb2RlIENPREUuICBUaGlzIHJldHVybnMgMAorICAgaWYgQ09ERSBpcyBub3QgYSBzeXN0ZW0gZXJyb3IgY29kZS4gICovCitpbnQgZ2NyeV9lcnJfY29kZV90b19lcnJubyAoZ2NyeV9lcnJfY29kZV90IGNvZGUpOworCisvKiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgd2l0aCB0aGUgZXJyb3Igc291cmNlIFNPVVJDRSBhbmQgdGhlIHN5c3RlbQorICAgZXJyb3IgRVJSLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8gKGdjcnlfZXJyX3NvdXJjZV90IHNvdXJjZSwgaW50IGVycik7CisKKy8qIFJldHVybiBhbiBlcnJvciB2YWx1ZSB3aXRoIHRoZSBzeXN0ZW0gZXJyb3IgRVJSLiAgKi8KK2djcnlfZXJyX2NvZGVfdCBnY3J5X2Vycm9yX2Zyb21fZXJybm8gKGludCBlcnIpOworCisMCisvKiBOT1RFOiBTaW5jZSBMaWJnY3J5cHQgMS42IHRoZSB0aHJlYWQgY2FsbGJhY2tzIGFyZSBub3QgYW55bW9yZQorICAgdXNlZC4gIEhvd2V2ZXIgd2Uga2VlcCBpdCB0byBhbGxvdyBmb3Igc29tZSBzb3VyY2UgY29kZQorICAgY29tcGF0aWJpbGl0eSBpZiB1c2VkIGluIHRoZSBzdGFuZGFyZCB3YXkuICAqLworCisvKiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIHRocmVhZCBtb2RlbCB0byB1c2UuICBVc2VkIHdpdGggdGhlIE9QVElPTgorICAgZmllbGQgb2YgdGhlIHN0cnVjdCBnY3J5X3RocmVhZF9jYnMuICAqLworI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fREVGQVVMVCAgMAorI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fVVNFUiAgICAgMQorI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fUFRIICAgICAgMgorI2RlZmluZSBHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRCAgMworCisvKiBUaGUgdmVyc2lvbiBudW1iZXIgZW5jb2RlZCBpbiB0aGUgT1BUSU9OIGZpZWxkIG9mIHRoZSBzdHJ1Y3QKKyAgIGdjcnlfdGhyZWFkX2Nicy4gICovCisjZGVmaW5lIEdDUllfVEhSRUFEX09QVElPTl9WRVJTSU9OICAxCisKKy8qIFdyYXBwZXIgZm9yIHN0cnVjdCBhdGhfb3BzLiAgKi8KK3N0cnVjdCBnY3J5X3RocmVhZF9jYnMKK3sKKyAgLyogVGhlIE9QVElPTiBmaWVsZCBlbmNvZGVzIHRoZSB0aHJlYWQgbW9kZWwgYW5kIHRoZSB2ZXJzaW9uIG51bWJlcgorICAgICBvZiB0aGlzIHN0cnVjdHVyZS4KKyAgICAgICBCaXRzICA3IC0gMCAgYXJlIHVzZWQgZm9yIHRoZSB0aHJlYWQgbW9kZWwKKyAgICAgICBCaXRzIDE1IC0gOCAgYXJlIHVzZWQgZm9yIHRoZSB2ZXJzaW9uIG51bWJlci4gICovCisgIHVuc2lnbmVkIGludCBvcHRpb247Cit9IF9HQ1JZX0FUVFJfSU5URVJOQUw7CisKKyNkZWZpbmUgR0NSWV9USFJFQURfT1BUSU9OX1BUSF9JTVBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIHN0cnVjdCBnY3J5X3RocmVhZF9jYnMgZ2NyeV90aHJlYWRzX3B0aCA9IHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoR0NSWV9USFJFQURfT1BUSU9OX1BUSCB8IChHQ1JZX1RIUkVBRF9PUFRJT05fVkVSU0lPTiA8PCA4KSl9CisKKyNkZWZpbmUgR0NSWV9USFJFQURfT1BUSU9OX1BUSFJFQURfSU1QTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIHN0cnVjdCBnY3J5X3RocmVhZF9jYnMgZ2NyeV90aHJlYWRzX3B0aHJlYWQgPSB7ICAgICAgICAgICAgICAgIFwKKyAgICAoR0NSWV9USFJFQURfT1BUSU9OX1BUSFJFQUQgfCAoR0NSWV9USFJFQURfT1BUSU9OX1ZFUlNJT04gPDwgOCkpfQorCisKKwwKKy8qIEEgZ2VuZXJpYyBjb250ZXh0IG9iamVjdCBhcyB1c2VkIGJ5IHNvbWUgZnVuY3Rpb25zLiAgKi8KK3N0cnVjdCBnY3J5X2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBnY3J5X2NvbnRleHQgKmdjcnlfY3R4X3Q7CisKKy8qIFRoZSBkYXRhIG9iamVjdHMgdXNlZCB0byBob2xkIG11bHRpIHByZWNpc2lvbiBpbnRlZ2Vycy4gICovCitzdHJ1Y3QgZ2NyeV9tcGk7Cit0eXBlZGVmIHN0cnVjdCBnY3J5X21waSAqZ2NyeV9tcGlfdDsKK3N0cnVjdCBnY3J5X21waV9wb2ludDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfbXBpX3BvaW50ICpnY3J5X21waV9wb2ludF90OworCisjaWZuZGVmIEdDUllQVF9OT19ERVBSRUNBVEVECit0eXBlZGVmIHN0cnVjdCBnY3J5X21waSAqR0NSWV9NUEkgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfbXBpICpHY3J5TVBJIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQ7CisjZW5kaWYKKworLyogQSBzdHJ1Y3R1cmUgdXNlZCBmb3Igc2NhdHRlciBnYXRoZXIgaGFzaGluZy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3Qgc2l6ZTsgIC8qIFRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgYnVmZmVyIG9yIDAuICAqLworICBzaXplX3Qgb2ZmOyAgIC8qIE9mZnNldCBpbnRvIHRoZSBidWZmZXIuICAqLworICBzaXplX3QgbGVuOyAgIC8qIFRoZSB1c2VkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgdm9pZCAqZGF0YTsgICAvKiBUaGUgYnVmZmVyLiAgKi8KK30gZ2NyeV9idWZmZXJfdDsKKworCisMCisKKy8qIENoZWNrIHRoYXQgdGhlIGxpYnJhcnkgZnVsZmlsbHMgdGhlIHZlcnNpb24gcmVxdWlyZW1lbnQuICAqLworY29uc3QgY2hhciAqZ2NyeV9jaGVja192ZXJzaW9uIChjb25zdCBjaGFyICpyZXFfdmVyc2lvbik7CisKKy8qIENvZGVzIGZvciBmdW5jdGlvbiBkaXNwYXRjaGVycy4gICovCisKKy8qIENvZGVzIHVzZWQgd2l0aCB0aGUgZ2NyeV9jb250cm9sIGZ1bmN0aW9uLiAqLworZW51bSBnY3J5X2N0bF9jbWRzCisgIHsKKyAgICAvKiBOb3RlOiAxIC4uIDIgYXJlIG5vdCBhbnltb3JlIHVzZWQuICovCisgICAgR0NSWUNUTF9DRkJfU1lOQyA9IDMsCisgICAgR0NSWUNUTF9SRVNFVCAgICA9IDQsICAgLyogZS5nLiBmb3IgTURzICovCisgICAgR0NSWUNUTF9GSU5BTElaRSA9IDUsCisgICAgR0NSWUNUTF9HRVRfS0VZTEVOID0gNiwKKyAgICBHQ1JZQ1RMX0dFVF9CTEtMRU4gPSA3LAorICAgIEdDUllDVExfVEVTVF9BTEdPID0gOCwKKyAgICBHQ1JZQ1RMX0lTX1NFQ1VSRSA9IDksCisgICAgR0NSWUNUTF9HRVRfQVNOT0lEID0gMTAsCisgICAgR0NSWUNUTF9FTkFCTEVfQUxHTyA9IDExLAorICAgIEdDUllDVExfRElTQUJMRV9BTEdPID0gMTIsCisgICAgR0NSWUNUTF9EVU1QX1JBTkRPTV9TVEFUUyA9IDEzLAorICAgIEdDUllDVExfRFVNUF9TRUNNRU1fU1RBVFMgPSAxNCwKKyAgICBHQ1JZQ1RMX0dFVF9BTEdPX05QS0VZICAgID0gMTUsCisgICAgR0NSWUNUTF9HRVRfQUxHT19OU0tFWSAgICA9IDE2LAorICAgIEdDUllDVExfR0VUX0FMR09fTlNJR04gICAgPSAxNywKKyAgICBHQ1JZQ1RMX0dFVF9BTEdPX05FTkNSICAgID0gMTgsCisgICAgR0NSWUNUTF9TRVRfVkVSQk9TSVRZICAgICA9IDE5LAorICAgIEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTICAgPSAyMCwKKyAgICBHQ1JZQ1RMX0NMRUFSX0RFQlVHX0ZMQUdTID0gMjEsCisgICAgR0NSWUNUTF9VU0VfU0VDVVJFX1JORFBPT0w9IDIyLAorICAgIEdDUllDVExfRFVNUF9NRU1PUllfU1RBVFMgPSAyMywKKyAgICBHQ1JZQ1RMX0lOSVRfU0VDTUVNICAgICAgID0gMjQsCisgICAgR0NSWUNUTF9URVJNX1NFQ01FTSAgICAgICA9IDI1LAorICAgIEdDUllDVExfRElTQUJMRV9TRUNNRU1fV0FSTiA9IDI3LAorICAgIEdDUllDVExfU1VTUEVORF9TRUNNRU1fV0FSTiA9IDI4LAorICAgIEdDUllDVExfUkVTVU1FX1NFQ01FTV9XQVJOICA9IDI5LAorICAgIEdDUllDVExfRFJPUF9QUklWUyAgICAgICAgICA9IDMwLAorICAgIEdDUllDVExfRU5BQkxFX01fR1VBUkQgICAgICA9IDMxLAorICAgIEdDUllDVExfU1RBUlRfRFVNUCAgICAgICAgICA9IDMyLAorICAgIEdDUllDVExfU1RPUF9EVU1QICAgICAgICAgICA9IDMzLAorICAgIEdDUllDVExfR0VUX0FMR09fVVNBR0UgICAgICA9IDM0LAorICAgIEdDUllDVExfSVNfQUxHT19FTkFCTEVEICAgICA9IDM1LAorICAgIEdDUllDVExfRElTQUJMRV9JTlRFUk5BTF9MT0NLSU5HID0gMzYsCisgICAgR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSAgICAgID0gMzcsCisgICAgR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCA9IDM4LAorICAgIEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRURfUCA9IDM5LAorICAgIEdDUllDVExfQU5ZX0lOSVRJQUxJWkFUSU9OX1AgPSA0MCwKKyAgICBHQ1JZQ1RMX1NFVF9DQkNfQ1RTID0gNDEsCisgICAgR0NSWUNUTF9TRVRfQ0JDX01BQyA9IDQyLAorICAgIC8qIE5vdGU6IDQzIGlzIG5vdCBhbnltb3JlIHVzZWQuICovCisgICAgR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NID0gNDQsCisgICAgR0NSWUNUTF9TRVRfUkFORE9NX1NFRURfRklMRSA9IDQ1LAorICAgIEdDUllDVExfVVBEQVRFX1JBTkRPTV9TRUVEX0ZJTEUgPSA0NiwKKyAgICBHQ1JZQ1RMX1NFVF9USFJFQURfQ0JTID0gNDcsCisgICAgR0NSWUNUTF9GQVNUX1BPTEwgPSA0OCwKKyAgICBHQ1JZQ1RMX1NFVF9SQU5ET01fREFFTU9OX1NPQ0tFVCA9IDQ5LAorICAgIEdDUllDVExfVVNFX1JBTkRPTV9EQUVNT04gPSA1MCwKKyAgICBHQ1JZQ1RMX0ZBS0VEX1JBTkRPTV9QID0gNTEsCisgICAgR0NSWUNUTF9TRVRfUk5ERUdEX1NPQ0tFVCA9IDUyLAorICAgIEdDUllDVExfUFJJTlRfQ09ORklHID0gNTMsCisgICAgR0NSWUNUTF9PUEVSQVRJT05BTF9QID0gNTQsCisgICAgR0NSWUNUTF9GSVBTX01PREVfUCA9IDU1LAorICAgIEdDUllDVExfRk9SQ0VfRklQU19NT0RFID0gNTYsCisgICAgR0NSWUNUTF9TRUxGVEVTVCA9IDU3LAorICAgIC8qIE5vdGU6IDU4IC4uIDYyIGFyZSB1c2VkIGludGVybmFsbHkuICAqLworICAgIEdDUllDVExfRElTQUJMRV9IV0YgPSA2MywKKyAgICBHQ1JZQ1RMX1NFVF9FTkZPUkNFRF9GSVBTX0ZMQUcgPSA2NCwKKyAgICBHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUgPSA2NSwKKyAgICBHQ1JZQ1RMX0dFVF9DVVJSRU5UX1JOR19UWVBFID0gNjYsCisgICAgR0NSWUNUTF9ESVNBQkxFX0xPQ0tFRF9TRUNNRU0gPSA2NywKKyAgICBHQ1JZQ1RMX0RJU0FCTEVfUFJJVl9EUk9QID0gNjgsCisgICAgR0NSWUNUTF9TRVRfQ0NNX0xFTkdUSFMgPSA2OSwKKyAgICBHQ1JZQ1RMX0NMT1NFX1JBTkRPTV9ERVZJQ0UgPSA3MCwKKyAgICBHQ1JZQ1RMX0lOQUNUSVZBVEVfRklQU19GTEFHID0gNzEsCisgICAgR0NSWUNUTF9SRUFDVElWQVRFX0ZJUFNfRkxBRyA9IDcyCisgIH07CisKKy8qIFBlcmZvcm0gdmFyaW91cyBvcGVyYXRpb25zIGRlZmluZWQgYnkgQ01ELiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY29udHJvbCAoZW51bSBnY3J5X2N0bF9jbWRzIENNRCwgLi4uKTsKKworDAorLyogUy1leHByZXNzaW9uIG1hbmFnZW1lbnQuICovCisKKy8qIFRoZSBvYmplY3QgdG8gcmVwcmVzZW50IGFuIFMtZXhwcmVzc2lvbiBhcyB1c2VkIHdpdGggdGhlIHB1YmxpYyBrZXkKKyAgIGZ1bmN0aW9ucy4gICovCitzdHJ1Y3QgZ2NyeV9zZXhwOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9zZXhwICpnY3J5X3NleHBfdDsKKworI2lmbmRlZiBHQ1JZUFRfTk9fREVQUkVDQVRFRAordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9zZXhwICpHQ1JZX1NFWFAgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfc2V4cCAqR2NyeVNleHAgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKKyNlbmRpZgorCisvKiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgUy1leHByZXNzaW9uIGZvcm1hdC4gKi8KK2VudW0gZ2NyeV9zZXhwX2Zvcm1hdAorICB7CisgICAgR0NSWVNFWFBfRk1UX0RFRkFVTFQgICA9IDAsCisgICAgR0NSWVNFWFBfRk1UX0NBTk9OICAgICA9IDEsCisgICAgR0NSWVNFWFBfRk1UX0JBU0U2NCAgICA9IDIsCisgICAgR0NSWVNFWFBfRk1UX0FEVkFOQ0VEICA9IDMKKyAgfTsKKworLyogQ3JlYXRlIGFuIG5ldyBTLWV4cHJlc3Npb24gb2JqZWN0IGZyb20gQlVGRkVSIG9mIHNpemUgTEVOR1RIIGFuZAorICAgcmV0dXJuIGl0IGluIFJFVFNFWFAuICBXaXRoIEFVVE9ERVRFQ1Qgc2V0IHRvIDAgdGhlIGRhdGEgaW4gQlVGRkVSCisgICBpcyBleHBlY3RlZCB0byBiZSBpbiBjYW5vbml6ZWQgZm9ybWF0LiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3NleHBfbmV3IChnY3J5X3NleHBfdCAqcmV0c2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dG9kZXRlY3QpOworCisgLyogU2FtZSBhcyBnY3J5X3NleHBfbmV3IGJ1dCBhbGxvd3MgdG8gcGFzcyBhIEZSRUVGTkMgd2hpY2ggaGFzIHRoZQorICAgIGVmZmVjdCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgQlVGRkVSIHRvIHRoZSBjcmVhdGVkIG9iamVjdC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9zZXhwX2NyZWF0ZSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdXRvZGV0ZWN0LCB2b2lkICgqZnJlZWZuYykgKHZvaWQgKikpOworCisvKiBTY2FuIEJVRkZFUiBhbmQgcmV0dXJuIGEgbmV3IFMtZXhwcmVzc2lvbiBvYmplY3QgaW4gUkVUU0VYUC4gIFRoaXMKKyAgIGZ1bmN0aW9uIGV4cGVjdHMgYSBwcmludGYgbGlrZSBzdHJpbmcgaW4gQlVGRkVSLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3NleHBfc3NjYW4gKGdjcnlfc2V4cF90ICpyZXRzZXhwLCBzaXplX3QgKmVycm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CisKKy8qIFNhbWUgYXMgZ2NyeV9zZXhwX3NzY2FuIGJ1dCBleHBlY3RzIGEgc3RyaW5nIGluIEZPUk1BVCBhbmQgY2FuIHRodXMKKyAgIG9ubHkgYmUgdXNlZCBmb3IgY2VydGFpbiBlbmNvZGluZ3MuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfc2V4cF9idWlsZCAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCisvKiBMaWtlIGdjcnlfc2V4cF9idWlsZCwgYnV0IHVzZXMgYW4gYXJyYXkgaW5zdGVhZCBvZiB2YXJpYWJsZQorICAgZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X3NleHBfYnVpbGRfYXJyYXkgKGdjcnlfc2V4cF90ICpyZXRzZXhwLCBzaXplX3QgKmVycm9mZiwKKwkJCQkgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2b2lkICoqYXJnX2xpc3QpOworCisvKiBSZWxlYXNlIHRoZSBTLWV4cHJlc3Npb24gb2JqZWN0IFNFWFAgKi8KK3ZvaWQgZ2NyeV9zZXhwX3JlbGVhc2UgKGdjcnlfc2V4cF90IHNleHApOworCisvKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhbiBjYW5vbml6ZWQgUy1leHByZXNpb24gaW4gQlVGRkVSIGFuZAorICAgY2hlY2sgZm9yIGEgdmFsaWQgZW5jb2RpbmcuICovCitzaXplX3QgZ2NyeV9zZXhwX2Nhbm9uX2xlbiAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZXJyb2ZmLCBnY3J5X2Vycm9yX3QgKmVycmNvZGUpOworCisvKiBDb3BpZXMgdGhlIFMtZXhwcmVzc2lvbiBvYmplY3QgU0VYUCBpbnRvIEJVRkZFUiB1c2luZyB0aGUgZm9ybWF0CisgICBzcGVjaWZpZWQgaW4gTU9ERS4gICovCitzaXplX3QgZ2NyeV9zZXhwX3NwcmludCAoZ2NyeV9zZXhwX3Qgc2V4cCwgaW50IG1vZGUsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4bGVuZ3RoKTsKKworLyogRHVtcHMgdGhlIFMtZXhwcmVzc2lvbiBvYmplY3QgQSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgZGVidWdnaW5nCisgICB0byBMaWJnY3J5cHQncyBsb2dnaW5nIHN0cmVhbS4gICovCit2b2lkIGdjcnlfc2V4cF9kdW1wIChjb25zdCBnY3J5X3NleHBfdCBhKTsKKworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2NvbnMgKGNvbnN0IGdjcnlfc2V4cF90IGEsIGNvbnN0IGdjcnlfc2V4cF90IGIpOworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2FsaXN0IChjb25zdCBnY3J5X3NleHBfdCAqYXJyYXkpOworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX3ZsaXN0IChjb25zdCBnY3J5X3NleHBfdCBhLCAuLi4pOworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2FwcGVuZCAoY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3Qgbik7CitnY3J5X3NleHBfdCBnY3J5X3NleHBfcHJlcGVuZCAoY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3Qgbik7CisKKy8qIFNjYW4gdGhlIFMtZXhwcmVzc2lvbiBmb3IgYSBzdWJsaXN0IHdpdGggYSB0eXBlICh0aGUgY2FyIG9mIHRoZQorICAgbGlzdCkgbWF0Y2hpbmcgdGhlIHN0cmluZyBUT0tFTi4gIElmIFRPS0xFTiBpcyBub3QgMCwgdGhlIHRva2VuIGlzCisgICBhc3N1bWVkIHRvIGJlIHJhdyBtZW1vcnkgb2YgdGhpcyBsZW5ndGguICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhCisgICBuZXdseSBhbGxvY2F0ZWQgUy1leHByZXNzaW9uIGNvbnNpc3Rpbmcgb2YgdGhlIGZvdW5kIHN1Ymxpc3Qgb3IKKyAgIGBOVUxMJyB3aGVuIG5vdCBmb3VuZC4gICovCitnY3J5X3NleHBfdCBnY3J5X3NleHBfZmluZF90b2tlbiAoZ2NyeV9zZXhwX3QgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rLCBzaXplX3QgdG9rbGVuKTsKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBMSVNULiAgRm9yIGEgdmFsaWQgUy1leHByZXNzaW9uIHRoaXMKKyAgIHNob3VsZCBiZSBhdCBsZWFzdCAxLiAgKi8KK2ludCBnY3J5X3NleHBfbGVuZ3RoIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KTsKKworLyogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUy1leHByZXNzaW9uIGZyb20gdGhlIGVsZW1lbnQgd2l0aCBpbmRleAorICAgTlVNQkVSIGluIExJU1QuICBOb3RlIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgaGFzIHRoZSBpbmRleCAwLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHN1Y2ggZWxlbWVudCwgYE5VTEwnIGlzIHJldHVybmVkLiAgKi8KK2djcnlfc2V4cF90IGdjcnlfc2V4cF9udGggKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIpOworCisvKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBTLWV4cHJlc3Npb24gZnJvbSB0aGUgZmlyc3QgZWxlbWVudCBpbgorICAgTElTVDsgdGhpcyBjYWxsZWQgdGhlICJ0eXBlIiBhbmQgc2hvdWxkIGFsd2F5cyBleGlzdCBhbmQgYmUgYQorICAgc3RyaW5nLiBgTlVMTCcgaXMgcmV0dXJuZWQgaW4gY2FzZSBvZiBhIHByb2JsZW0uICAqLworZ2NyeV9zZXhwX3QgZ2NyeV9zZXhwX2NhciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCk7CisKKy8qIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGxpc3QgZm9ybSBhbGwgZWxlbWVudHMgZXhjZXB0IGZvciB0aGUgZmlyc3QKKyAgIG9uZS4gIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGFuIGludmFsaWQgUy1leHByZXNzaW9uCisgICBiZWNhdXNlIGl0IGlzIG5vdCBndWFyYW50ZWVkLCB0aGF0IHRoZSB0eXBlIGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcuCisgICBIb3dldmVyLCBmb3IgcGFyc2luZyBhIGNvbXBsZXggUy1leHByZXNzaW9uIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IKKyAgIGludGVybWVkaWF0ZSBsaXN0cy4gIFJldHVybnMgYE5VTEwnIG9uIGVycm9yLiAgKi8KK2djcnlfc2V4cF90IGdjcnlfc2V4cF9jZHIgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QpOworCitnY3J5X3NleHBfdCBnY3J5X3NleHBfY2FkciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCk7CisKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBkYXRhIGZyb20gYSBMSVNULiAgQSBwb2ludGVyIHRvIHRoZQorICAgYWN0dWFsIGRhdGEgd2l0aCBpbmRleCBOVU1CRVIgaXMgcmV0dXJuZWQgYW5kIHRoZSBsZW5ndGggb2YgdGhpcworICAgZGF0YSB3aWxsIGJlIHN0b3JlZCB0byBEQVRBTEVOLiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBhdCB0aGUgZ2l2ZW4KKyAgIGluZGV4IG9yIHRoZSBpbmRleCByZXByZXNlbnRzIGFub3RoZXIgbGlzdCwgYE5VTEwnIGlzIHJldHVybmVkLgorICAgKk5vdGU6KiBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyB2YWxpZCBhcyBsb25nIGFzIExJU1QgaXMgbm90CisgICBtb2RpZmllZCBvciByZWxlYXNlZC4gICovCitjb25zdCBjaGFyICpnY3J5X3NleHBfbnRoX2RhdGEgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YWxlbik7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgZGF0YSBmcm9tIGEgTElTVC4gIEEgbWFsbG9jZWQgYnVmZmVyIHRvIHRoZQorICAgZGF0YSB3aXRoIGluZGV4IE5VTUJFUiBpcyByZXR1cm5lZCBhbmQgdGhlIGxlbmd0aCBvZiB0aGlzCisgICBkYXRhIHdpbGwgYmUgc3RvcmVkIHRvIFJMRU5HVEguICBJZiB0aGVyZSBpcyBubyBkYXRhIGF0IHRoZSBnaXZlbgorICAgaW5kZXggb3IgdGhlIGluZGV4IHJlcHJlc2VudHMgYW5vdGhlciBsaXN0LCBgTlVMTCcgaXMgcmV0dXJuZWQuICAqLwordm9pZCAqZ2NyeV9zZXhwX250aF9idWZmZXIgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpybGVuZ3RoKTsKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBhbmQgY29udmVydCBkYXRhIGZyb20gYSBMSVNULiAgVGhlCisgICBkYXRhIGlzIGFzc3VtZWQgdG8gYmUgYSBOdWwgdGVybWluYXRlZCBzdHJpbmcuICBUaGUgY2FsbGVyIG11c3QKKyAgIHJlbGVhc2UgdGhlIHJldHVybmVkIHZhbHVlIHVzaW5nIGBnY3J5X2ZyZWUnLiAgSWYgdGhlcmUgaXMgbm8gZGF0YQorICAgYXQgdGhlIGdpdmVuIGluZGV4LCB0aGUgaW5kZXggcmVwcmVzZW50cyBhIGxpc3Qgb3IgdGhlIHZhbHVlIGNhbid0CisgICBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIGBOVUxMJyBpcyByZXR1cm5lZC4gICovCitjaGFyICpnY3J5X3NleHBfbnRoX3N0cmluZyAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlcik7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgYW5kIGNvbnZlcnQgZGF0YSBmcm9tIGEgTElTVC4gVGhpcworICAgZGF0YSBpcyBhc3N1bWVkIHRvIGJlIGFuIE1QSSBzdG9yZWQgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgYnkKKyAgIE1QSUZNVCBhbmQgcmV0dXJuZWQgYXMgYSBzdGFuZGFyZCBMaWJnY3J5cHQgTVBJLiAgVGhlIGNhbGxlciBtdXN0CisgICByZWxlYXNlIHRoaXMgcmV0dXJuZWQgdmFsdWUgdXNpbmcgYGdjcnlfbXBpX3JlbGVhc2UnLiAgSWYgdGhlcmUgaXMKKyAgIG5vIGRhdGEgYXQgdGhlIGdpdmVuIGluZGV4LCB0aGUgaW5kZXggcmVwcmVzZW50cyBhIGxpc3Qgb3IgdGhlCisgICB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYW4gTVBJLCBgTlVMTCcgaXMgcmV0dXJuZWQuICAqLworZ2NyeV9tcGlfdCBnY3J5X3NleHBfbnRoX21waSAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwgaW50IG1waWZtdCk7CisKKy8qIENvbnZlbmllbmNlIGZ1Y250aW9uIHRvIGV4dHJhY3QgcGFyYW1ldGVycyBmcm9tIGFuIFMtZXhwcmVzc2lvbgorICogdXNpbmcgYSBsaXN0IG9mIHNpbmdsZSBsZXR0ZXIgcGFyYW1ldGVycy4gICovCitncGdfZXJyb3JfdCBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoZ2NyeV9zZXhwX3Qgc2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBfR0NSWV9HQ0NfQVRUUl9TRU5USU5FTCgwKTsKKworDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgTXVsdGkgUHJlY2lzaW9uIEludGVnZXIgRnVuY3Rpb25zICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEaWZmZXJlbnQgZm9ybWF0cyBvZiBleHRlcm5hbCBiaWcgaW50ZWdlciByZXByZXNlbnRhdGlvbi4gKi8KK2VudW0gZ2NyeV9tcGlfZm9ybWF0CisgIHsKKyAgICBHQ1JZTVBJX0ZNVF9OT05FPSAwLAorICAgIEdDUllNUElfRk1UX1NURCA9IDEsICAgIC8qIFR3b3MgY29tcGxlbWVudCBzdG9yZWQgd2l0aG91dCBsZW5ndGguICAqLworICAgIEdDUllNUElfRk1UX1BHUCA9IDIsICAgIC8qIEFzIHVzZWQgYnkgT3BlblBHUCAodW5zaWduZWQgb25seSkuICAqLworICAgIEdDUllNUElfRk1UX1NTSCA9IDMsICAgIC8qIEFzIHVzZWQgYnkgU1NIIChsaWtlIFNURCBidXQgd2l0aCBsZW5ndGgpLiAgKi8KKyAgICBHQ1JZTVBJX0ZNVF9IRVggPSA0LCAgICAvKiBIZXggZm9ybWF0LiAqLworICAgIEdDUllNUElfRk1UX1VTRyA9IDUsICAgIC8qIExpa2UgU1REIGJ1dCB1bnNpZ25lZC4gKi8KKyAgICBHQ1JZTVBJX0ZNVF9PUEFRVUUgPSA4ICAvKiBPcGFxdWUgZm9ybWF0IChzb21lIGZ1bmN0aW9ucyBvbmx5KS4gICovCisgIH07CisKKy8qIEZsYWdzIHVzZWQgZm9yIGNyZWF0aW5nIGJpZyBpbnRlZ2Vycy4gICovCitlbnVtIGdjcnlfbXBpX2ZsYWcKKyAgeworICAgIEdDUllNUElfRkxBR19TRUNVUkUgPSAxLCAgLyogQWxsb2NhdGUgdGhlIG51bWJlciBpbiAic2VjdXJlIiBtZW1vcnkuICAqLworICAgIEdDUllNUElfRkxBR19PUEFRVUUgPSAyLCAgLyogVGhlIG51bWJlciBpcyBub3QgYSByZWFsIG9uZSBidXQganVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB3YXkgdG8gc3RvcmUgc29tZSBieXRlcy4gIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCBmb3IgZW5jcnlwdGVkIGJpZyBpbnRlZ2Vycy4gICovCisgICAgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSA9IDQsIC8qIE1hcmsgdGhlIE1QSSBhcyBpbW11dGFibGUuICAqLworICAgIEdDUllNUElfRkxBR19DT05TVCAgICAgPSA4LCAvKiBNYXJrIHRoZSBNUEkgYXMgYSBjb25zdGFudC4gICovCisgICAgR0NSWU1QSV9GTEFHX1VTRVIxID0gMHgwMTAwLC8qIFVzZXIgZmxhZyAxLiAgKi8KKyAgICBHQ1JZTVBJX0ZMQUdfVVNFUjIgPSAweDAyMDAsLyogVXNlciBmbGFnIDIuICAqLworICAgIEdDUllNUElfRkxBR19VU0VSMyA9IDB4MDQwMCwvKiBVc2VyIGZsYWcgMy4gICovCisgICAgR0NSWU1QSV9GTEFHX1VTRVI0ID0gMHgwODAwLC8qIFVzZXIgZmxhZyA0LiAgKi8KKyAgfTsKKworCisvKiBNYWNyb3MgdG8gcmV0dXJuIHByZS1kZWZpbmVkIE1QSSBjb25zdGFudHMuICAqLworI2RlZmluZSBHQ1JZTVBJX0NPTlNUX09ORSAgIChfZ2NyeV9tcGlfZ2V0X2NvbnN0ICgxKSkKKyNkZWZpbmUgR0NSWU1QSV9DT05TVF9UV08gICAoX2djcnlfbXBpX2dldF9jb25zdCAoMikpCisjZGVmaW5lIEdDUllNUElfQ09OU1RfVEhSRUUgKF9nY3J5X21waV9nZXRfY29uc3QgKDMpKQorI2RlZmluZSBHQ1JZTVBJX0NPTlNUX0ZPVVIgIChfZ2NyeV9tcGlfZ2V0X2NvbnN0ICg0KSkKKyNkZWZpbmUgR0NSWU1QSV9DT05TVF9FSUdIVCAoX2djcnlfbXBpX2dldF9jb25zdCAoOCkpCisKKy8qIEFsbG9jYXRlIGEgbmV3IGJpZyBpbnRlZ2VyIG9iamVjdCwgaW5pdGlhbGl6ZSBpdCB3aXRoIDAgYW5kCisgICBpbml0aWFsbHkgYWxsb2NhdGUgbWVtb3J5IGZvciBhIG51bWJlciBvZiBhdCBsZWFzdCBOQklUUy4gKi8KK2djcnlfbXBpX3QgZ2NyeV9tcGlfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpOworCisvKiBTYW1lIGFzIGdjcnlfbXBpX25ldygpIGJ1dCBhbGxvY2F0ZSBpbiAic2VjdXJlIiBtZW1vcnkuICovCitnY3J5X21waV90IGdjcnlfbXBpX3NuZXcgKHVuc2lnbmVkIGludCBuYml0cyk7CisKKy8qIFJlbGVhc2UgdGhlIG51bWJlciBBIGFuZCBmcmVlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4gKi8KK3ZvaWQgZ2NyeV9tcGlfcmVsZWFzZSAoZ2NyeV9tcGlfdCBhKTsKKworLyogQ3JlYXRlIGEgbmV3IG51bWJlciB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIEEuICovCitnY3J5X21waV90IGdjcnlfbXBpX2NvcHkgKGNvbnN0IGdjcnlfbXBpX3QgYSk7CisKKy8qIFN0b3JlIHRoZSBiaWcgaW50ZWdlciB2YWx1ZSBVIGluIFcgYW5kIHJlbGVhc2UgVS4gICovCit2b2lkIGdjcnlfbXBpX3NuYXRjaCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUpOworCisvKiBTdG9yZSB0aGUgYmlnIGludGVnZXIgdmFsdWUgVSBpbiBXLiAqLworZ2NyeV9tcGlfdCBnY3J5X21waV9zZXQgKGdjcnlfbXBpX3QgdywgY29uc3QgZ2NyeV9tcGlfdCB1KTsKKworLyogU3RvcmUgdGhlIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgVSBpbiBXLiAqLworZ2NyeV9tcGlfdCBnY3J5X21waV9zZXRfdWkgKGdjcnlfbXBpX3QgdywgdW5zaWduZWQgbG9uZyB1KTsKKworLyogU3dhcCB0aGUgdmFsdWVzIG9mIEEgYW5kIEIuICovCit2b2lkIGdjcnlfbXBpX3N3YXAgKGdjcnlfbXBpX3QgYSwgZ2NyeV9tcGlfdCBiKTsKKworLyogUmV0dXJuIDEgaWYgQSBpcyBuZWdhdGl2ZTsgMCBpZiB6ZXJvIG9yIHBvc2l0aXZlLiAgKi8KK2ludCBnY3J5X21waV9pc19uZWcgKGdjcnlfbXBpX3QgYSk7CisKKy8qIFcgPSAtIFUgKi8KK3ZvaWQgZ2NyeV9tcGlfbmVnIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSk7CisKKy8qIFcgPSBbV10gKi8KK3ZvaWQgZ2NyeV9tcGlfYWJzIChnY3J5X21waV90IHcpOworCisvKiBDb21wYXJlIHRoZSBiaWcgaW50ZWdlciBudW1iZXIgVSBhbmQgViByZXR1cm5pbmcgMCBmb3IgZXF1YWxpdHksIGEKKyAgIHBvc2l0aXZlIHZhbHVlIGZvciBVID4gViBhbmQgYSBuZWdhdGl2ZSBmb3IgVSA8IFYuICovCitpbnQgZ2NyeV9tcGlfY21wIChjb25zdCBnY3J5X21waV90IHUsIGNvbnN0IGdjcnlfbXBpX3Qgdik7CisKKy8qIENvbXBhcmUgdGhlIGJpZyBpbnRlZ2VyIG51bWJlciBVIHdpdGggdGhlIHVuc2lnbmVkIGludGVnZXIgVgorICAgcmV0dXJuaW5nIDAgZm9yIGVxdWFsaXR5LCBhIHBvc2l0aXZlIHZhbHVlIGZvciBVID4gViBhbmQgYSBuZWdhdGl2ZQorICAgZm9yIFUgPCBWLiAqLworaW50IGdjcnlfbXBpX2NtcF91aSAoY29uc3QgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBsb25nIHYpOworCisvKiBDb252ZXJ0IHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIHN0b3JlZCBpbiBCVUZGRVIKKyAgIHdpdGggYSBsZW5ndGggb2YgQlVGTEVOIGludG8gYSBuZXdseSBjcmVhdGUgTVBJIHJldHVybmVkIGluCisgICBSRVRfTVBJLiAgSWYgTlNDQU5ORUQgaXMgbm90IE5VTEwsIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbnVtYmVyIG9mCisgICBieXRlcyBhY3R1YWxseSBzY2FubmVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tcGlfc2NhbiAoZ2NyeV9tcGlfdCAqcmV0X21waSwgZW51bSBnY3J5X21waV9mb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5zY2FubmVkKTsKKworLyogQ29udmVydCB0aGUgYmlnIGludGVnZXIgQSBpbnRvIHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbgorICAgZGVzY3JpYmVkIGJ5IEZPUk1BVCBhbmQgc3RvcmUgaXQgaW4gdGhlIHByb3ZpZGVkIEJVRkZFUiB3aGljaCBoYXMKKyAgIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHdpdGggYSBzaXplIG9mIEJVRkxFTiBieXRlcy4gIE5XUklUVEVOCisgICByZWNlaXZlcyB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gdW5sZXNzIGl0CisgICBoYXMgYmVlbiBwYXNzZWQgYXMgTlVMTC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21waV9wcmludCAoZW51bSBnY3J5X21waV9mb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbndyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgYSk7CisKKy8qIENvbnZlcnQgdGhlIGJpZyBpbnRlZ2VyIEEgaW50IHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBkZXNjcmliZWQKKyAgIGJ5IEZPUk1BVCBhbmQgc3RvcmUgaXQgaW4gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHdoaWNoIGFkZHJlc3MKKyAgIHdpbGwgYmUgcHV0IGludG8gQlVGRkVSLiAgTldSSVRURU4gcmVjZWl2ZXMgdGhlIGFjdHVhbCBsZW5ndGhzIG9mIHRoZQorICAgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24uICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tcGlfYXByaW50IChlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKm53cml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBhKTsKKworLyogRHVtcCB0aGUgdmFsdWUgb2YgQSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgZGVidWdnaW5nIHRvCisgICBMaWJnY3J5cHQncyBsb2dnaW5nIHN0cmVhbS4gIE5vdGUgdGhhdCBvbmUgbGVhZGluZyBzcGFjZSBidXQgbm8KKyAgIHRyYWlsaW5nIHNwYWNlIG9yIGxpbmVmZWVkIHdpbGwgYmUgcHJpbnRlZC4gIEl0IGlzIG9rYXkgdG8gcGFzcworICAgTlVMTCBmb3IgQS4gKi8KK3ZvaWQgZ2NyeV9tcGlfZHVtcCAoY29uc3QgZ2NyeV9tcGlfdCBhKTsKKworCisvKiBXID0gVSArIFYuICAqLwordm9pZCBnY3J5X21waV9hZGQgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpOworCisvKiBXID0gVSArIFYuICBWIGlzIGFuIHVuc2lnbmVkIGludGVnZXIuICovCit2b2lkIGdjcnlfbXBpX2FkZF91aSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgdik7CisKKy8qIFcgPSBVICsgViBtb2QgTS4gKi8KK3ZvaWQgZ2NyeV9tcGlfYWRkbSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKTsKKworLyogVyA9IFUgLSBWLiAqLwordm9pZCBnY3J5X21waV9zdWIgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpOworCisvKiBXID0gVSAtIFYuICBWIGlzIGFuIHVuc2lnbmVkIGludGVnZXIuICovCit2b2lkIGdjcnlfbXBpX3N1Yl91aSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgdiApOworCisvKiBXID0gVSAtIFYgbW9kIE0gKi8KK3ZvaWQgZ2NyeV9tcGlfc3VibSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKTsKKworLyogVyA9IFUgKiBWLiAqLwordm9pZCBnY3J5X21waV9tdWwgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpOworCisvKiBXID0gVSAqIFYuICBWIGlzIGFuIHVuc2lnbmVkIGludGVnZXIuICovCit2b2lkIGdjcnlfbXBpX211bF91aSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgdiApOworCisvKiBXID0gVSAqIFYgbW9kIE0uICovCit2b2lkIGdjcnlfbXBpX211bG0gKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYsIGdjcnlfbXBpX3QgbSk7CisKKy8qIFcgPSBVICogKDIgXiBDTlQpLiAqLwordm9pZCBnY3J5X21waV9tdWxfMmV4cCAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIHVuc2lnbmVkIGxvbmcgY250KTsKKworLyogUSA9IERJVklERU5EIC8gRElWSVNPUiwgUiA9IERJVklERU5EICUgRElWSVNPUiwKKyAgIFEgb3IgUiBtYXkgYmUgcGFzc2VkIGFzIE5VTEwuICBST1VORCBzaG91bGQgYmUgbmVnYXRpdmUgb3IgMC4gKi8KK3ZvaWQgZ2NyeV9tcGlfZGl2IChnY3J5X21waV90IHEsIGdjcnlfbXBpX3QgciwKKyAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IsIGludCByb3VuZCk7CisKKy8qIFIgPSBESVZJREVORCAlIERJVklTT1IgKi8KK3ZvaWQgZ2NyeV9tcGlfbW9kIChnY3J5X21waV90IHIsIGdjcnlfbXBpX3QgZGl2aWRlbmQsIGdjcnlfbXBpX3QgZGl2aXNvcik7CisKKy8qIFcgPSBCIF4gRSBtb2QgTS4gKi8KK3ZvaWQgZ2NyeV9tcGlfcG93bSAoZ2NyeV9tcGlfdCB3LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X21waV90IGIsIGNvbnN0IGdjcnlfbXBpX3QgZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBtKTsKKworLyogU2V0IEcgdG8gdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIEEgYW5kIEIuCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgRyBpcyAxLiAqLworaW50IGdjcnlfbXBpX2djZCAoZ2NyeV9tcGlfdCBnLCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYik7CisKKy8qIFNldCBYIHRvIHRoZSBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIEEgbW9kIE0uCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgZXhpc3RzLiAqLworaW50IGdjcnlfbXBpX2ludm0gKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IG0pOworCisvKiBDcmVhdGUgYSBuZXcgcG9pbnQgb2JqZWN0LiAgTkJJVFMgaXMgdXN1YWxseSAwLiAgKi8KK2djcnlfbXBpX3BvaW50X3QgZ2NyeV9tcGlfcG9pbnRfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpOworCisvKiBSZWxlYXNlIHRoZSBvYmplY3QgUE9JTlQuICBQT0lOVCBtYXkgYmUgTlVMTC4gKi8KK3ZvaWQgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCk7CisKKy8qIFN0b3JlIHRoZSBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIGZyb20gUE9JTlQgaW50byBYLCBZLCBhbmQgWi4gICovCit2b2lkIGdjcnlfbXBpX3BvaW50X2dldCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV9wb2ludF90IHBvaW50KTsKKworLyogU3RvcmUgdGhlIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgZnJvbSBQT0lOVCBpbnRvIFgsIFksIGFuZCBaIGFuZAorICAgcmVsZWFzZSBQT0lOVC4gICovCit2b2lkIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQpOworCisvKiBTdG9yZSB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBYLCBZLCBhbmQgWiBpbnRvIFBPSU5ULiAgKi8KK2djcnlfbXBpX3BvaW50X3QgZ2NyeV9tcGlfcG9pbnRfc2V0IChnY3J5X21waV9wb2ludF90IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHopOworCisvKiBTdG9yZSB0aGUgcHJvamVjdGl2ZSBjb29yZGluYXRlcyBYLCBZLCBhbmQgWiBpbnRvIFBPSU5UIGFuZCByZWxlYXNlCisgICBYLCBZLCBhbmQgWi4gICovCitnY3J5X21waV9wb2ludF90IGdjcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQgKGdjcnlfbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHopOworCisvKiBBbGxvY2F0ZSBhIG5ldyBjb250ZXh0IGZvciBlbGxpcHRpYyBjdXJ2ZSBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZQorICAgcGFyYW1ldGVycyBnaXZlbiBieSBLRVlQQVJBTSBvciB1c2luZyBDVVJWRU5BTUUuICAqLworZ3BnX2Vycm9yX3QgZ2NyeV9tcGlfZWNfbmV3IChnY3J5X2N0eF90ICpyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qga2V5cGFyYW0sIGNvbnN0IGNoYXIgKmN1cnZlbmFtZSk7CisKKy8qIEdldCBhIG5hbWVkIE1QSSBmcm9tIGFuIGVsbGlwdGljIGN1cnZlIGNvbnRleHQuICAqLworZ2NyeV9tcGlfdCBnY3J5X21waV9lY19nZXRfbXBpIChjb25zdCBjaGFyICpuYW1lLCBnY3J5X2N0eF90IGN0eCwgaW50IGNvcHkpOworCisvKiBHZXQgYSBuYW1lZCBwb2ludCBmcm9tIGFuIGVsbGlwdGljIGN1cnZlIGNvbnRleHQuICAqLworZ2NyeV9tcGlfcG9pbnRfdCBnY3J5X21waV9lY19nZXRfcG9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgsIGludCBjb3B5KTsKKworLyogU3RvcmUgYSBuYW1lZCBNUEkgaW50byBhbiBlbGxpcHRpYyBjdXJ2ZSBjb250ZXh0LiAgKi8KK2dwZ19lcnJvcl90IGdjcnlfbXBpX2VjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3QgbmV3dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFN0b3JlIGEgbmFtZWQgcG9pbnQgaW50byBhbiBlbGxpcHRpYyBjdXJ2ZSBjb250ZXh0LiAgKi8KK2dwZ19lcnJvcl90IGdjcnlfbXBpX2VjX3NldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9tcGlfcG9pbnRfdCBuZXd2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpOworCisvKiBTdG9yZSB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIFBPSU5UIGludG8gWCBhbmQgWS4gICovCitpbnQgZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpOworCisvKiBXID0gMiAqIFUuICAqLwordm9pZCBnY3J5X21waV9lY19kdXAgKGdjcnlfbXBpX3BvaW50X3QgdywgZ2NyeV9tcGlfcG9pbnRfdCB1LCBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFcgPSBVICsgVi4gICovCit2b2lkIGdjcnlfbXBpX2VjX2FkZCAoZ2NyeV9tcGlfcG9pbnRfdCB3LAorICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgdSwgZ2NyeV9tcGlfcG9pbnRfdCB2LCBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFcgPSBOICogVS4gICovCit2b2lkIGdjcnlfbXBpX2VjX211bCAoZ2NyeV9tcGlfcG9pbnRfdCB3LCBnY3J5X21waV90IG4sIGdjcnlfbXBpX3BvaW50X3QgdSwKKyAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFJldHVybiB0cnVlIGlmIFBPSU5UIGlzIG9uIHRoZSBjdXJ2ZSBkZXNjcmliZWQgYnkgQ1RYLiAgKi8KK2ludCBnY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoZ2NyeV9tcGlfcG9pbnRfdCB3LCBnY3J5X2N0eF90IGN0eCk7CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IEEuICovCit1bnNpZ25lZCBpbnQgZ2NyeV9tcGlfZ2V0X25iaXRzIChnY3J5X21waV90IGEpOworCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIGJpdCBudW1iZXIgTiAoY291bnRpbmcgZnJvbSAwKSBpcyBzZXQgaW4gQS4gKi8KK2ludCAgICAgIGdjcnlfbXBpX3Rlc3RfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogU2V0IGJpdCBudW1iZXIgTiBpbiBBLiAqLwordm9pZCAgICAgZ2NyeV9tcGlfc2V0X2JpdCAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qIENsZWFyIGJpdCBudW1iZXIgTiBpbiBBLiAqLwordm9pZCAgICAgZ2NyeV9tcGlfY2xlYXJfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogU2V0IGJpdCBudW1iZXIgTiBpbiBBIGFuZCBjbGVhciBhbGwgYml0cyBncmVhdGVyIHRoYW4gTi4gKi8KK3ZvaWQgICAgIGdjcnlfbXBpX3NldF9oaWdoYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogQ2xlYXIgYml0IG51bWJlciBOIGluIEEgYW5kIGFsbCBiaXRzIGdyZWF0ZXIgdGhhbiBOLiAqLwordm9pZCAgICAgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qIFNoaWZ0IHRoZSB2YWx1ZSBvZiBBIGJ5IE4gYml0cyB0byB0aGUgcmlnaHQgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gWC4gKi8KK3ZvaWQgICAgIGdjcnlfbXBpX3JzaGlmdCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKTsKKworLyogU2hpZnQgdGhlIHZhbHVlIG9mIEEgYnkgTiBiaXRzIHRvIHRoZSBsZWZ0IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIFguICovCit2b2lkICAgICBnY3J5X21waV9sc2hpZnQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qIFN0b3JlIE5CSVRTIG9mIHRoZSB2YWx1ZSBQIHBvaW50cyB0byBpbiBBIGFuZCBtYXJrIEEgYXMgYW4gb3BhcXVlCisgICB2YWx1ZS4gIE9uIHN1Y2Nlc3MgQSByZWNlaXZlZCB0aGUgdGhlIG93bmVyc2hpcCBvZiB0aGUgdmFsdWUgUC4KKyAgIFdBUk5JTkc6IE5ldmVyIHVzZSBhbiBvcGFxdWUgTVBJIGZvciBhbnl0aGluZyB0aGluZyBlbHNlIHRoYW4KKyAgIGdjcnlfbXBpX3JlbGVhc2UsIGdjcnlfbXBpX2dldF9vcGFxdWUuICovCitnY3J5X21waV90IGdjcnlfbXBpX3NldF9vcGFxdWUgKGdjcnlfbXBpX3QgYSwgdm9pZCAqcCwgdW5zaWduZWQgaW50IG5iaXRzKTsKKworLyogU3RvcmUgTkJJVFMgb2YgdGhlIHZhbHVlIFAgcG9pbnRzIHRvIGluIEEgYW5kIG1hcmsgQSBhcyBhbiBvcGFxdWUKKyAgIHZhbHVlLiAgVGhlIGZ1bmN0aW9uIHRha2VzIGEgY29weSBvZiB0aGUgcHJvdmlkZWQgdmFsdWUgUC4KKyAgIFdBUk5JTkc6IE5ldmVyIHVzZSBhbiBvcGFxdWUgTVBJIGZvciBhbnl0aGluZyB0aGluZyBlbHNlIHRoYW4KKyAgIGdjcnlfbXBpX3JlbGVhc2UsIGdjcnlfbXBpX2dldF9vcGFxdWUuICovCitnY3J5X21waV90IGdjcnlfbXBpX3NldF9vcGFxdWVfY29weSAoZ2NyeV9tcGlfdCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnAsIHVuc2lnbmVkIGludCBuYml0cyk7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIHZhbHVlIHN0b3JlZCBpbiBBIGFuZCByZXR1cm4gaXRzIHNpemUKKyAgIGluIE5CSVRTLiAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHN0aWxsIG93bmVkIGJ5IEEgYW5kCisgICB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgdXNlZCBmb3IgYW4gbm9uLW9wYXF1ZSBNUEkuICovCit2b2lkICpnY3J5X21waV9nZXRfb3BhcXVlIChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCAqbmJpdHMpOworCisvKiBTZXQgdGhlIEZMQUcgZm9yIHRoZSBiaWcgaW50ZWdlciBBLiAgQ3VycmVudGx5IG9ubHkgdGhlIGZsYWcKKyAgIEdDUllNUElfRkxBR19TRUNVUkUgaXMgYWxsb3dlZCB0byBjb252ZXJ0IEEgaW50byBhbiBiaWcgaW50Z2VyCisgICBzdG9yZWQgaW4gInNlY3VyZSIgbWVtb3J5LiAqLwordm9pZCBnY3J5X21waV9zZXRfZmxhZyAoZ2NyeV9tcGlfdCBhLCBlbnVtIGdjcnlfbXBpX2ZsYWcgZmxhZyk7CisKKy8qIENsZWFyIEZMQUcgZm9yIHRoZSBiaWcgaW50ZWdlciBBLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMKKyAgIGN1cnJlbnRseSB1c2VsZXNzIGFzIG5vIGZsYWdzIGFyZSBhbGxvd2VkLiAqLwordm9pZCBnY3J5X21waV9jbGVhcl9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKTsKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIEZMQUcgaXMgc2V0IGZvciBBLiAqLworaW50IGdjcnlfbXBpX2dldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKTsKKworLyogUHJpdmF0ZSBmdW5jdGlvbiAtIGRvIG5vdCB1c2UuICAqLworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfZ2V0X2NvbnN0IChpbnQgbm8pOworCisvKiBVbmxlc3MgdGhlIEdDUllQVF9OT19NUElfTUFDUk9TIGlzIHVzZWQsIHByb3ZpZGUgYSBjb3VwbGUgb2YKKyAgIGNvbnZlbmllbmNlIG1hY3JvcyBmb3IgdGhlIGJpZyBpbnRlZ2VyIGZ1bmN0aW9ucy4gKi8KKyNpZm5kZWYgR0NSWVBUX05PX01QSV9NQUNST1MKKyNkZWZpbmUgbXBpX25ldyhuKSAgICAgICAgICBnY3J5X21waV9uZXcoIChuKSApCisjZGVmaW5lIG1waV9zZWN1cmVfbmV3KCBuICkgZ2NyeV9tcGlfc25ldyggKG4pICkKKyNkZWZpbmUgbXBpX3JlbGVhc2UoYSkgICAgICBcCisgIGRvIFwKKyAgICB7IFwKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKChhKSk7IFwKKyAgICAgIChhKSA9IE5VTEw7IFwKKyAgICB9IFwKKyAgd2hpbGUgKDApCisKKyNkZWZpbmUgbXBpX2NvcHkoIGEgKSAgICAgICAgICBnY3J5X21waV9jb3B5KCAoYSkgKQorI2RlZmluZSBtcGlfc25hdGNoKCB3LCB1KSAgICAgIGdjcnlfbXBpX3NuYXRjaCggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfc2V0KCB3LCB1KSAgICAgICAgIGdjcnlfbXBpX3NldCggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfc2V0X3VpKCB3LCB1KSAgICAgIGdjcnlfbXBpX3NldF91aSggKHcpLCAodSkgKQorI2RlZmluZSBtcGlfYWJzKCB3ICkgICAgICAgICAgIGdjcnlfbXBpX2FicyggKHcpICkKKyNkZWZpbmUgbXBpX25lZyggdywgdSkgICAgICAgICBnY3J5X21waV9uZWcoICh3KSwgKHUpICkKKyNkZWZpbmUgbXBpX2NtcCggdSwgdiApICAgICAgICBnY3J5X21waV9jbXAoICh1KSwgKHYpICkKKyNkZWZpbmUgbXBpX2NtcF91aSggdSwgdiApICAgICBnY3J5X21waV9jbXBfdWkoICh1KSwgKHYpICkKKyNkZWZpbmUgbXBpX2lzX25lZyggYSApICAgICAgICBnY3J5X21waV9pc19uZWcgKChhKSkKKworI2RlZmluZSBtcGlfYWRkX3VpKHcsdSx2KSAgICAgIGdjcnlfbXBpX2FkZF91aSgodyksKHUpLCh2KSkKKyNkZWZpbmUgbXBpX2FkZCh3LHUsdikgICAgICAgICBnY3J5X21waV9hZGQgKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfYWRkbSh3LHUsdixtKSAgICAgIGdjcnlfbXBpX2FkZG0gKCh3KSwodSksKHYpLChtKSkKKyNkZWZpbmUgbXBpX3N1Yl91aSh3LHUsdikgICAgICBnY3J5X21waV9zdWJfdWkgKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfc3ViKHcsdSx2KSAgICAgICAgIGdjcnlfbXBpX3N1YiAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9zdWJtKHcsdSx2LG0pICAgICAgZ2NyeV9tcGlfc3VibSAoKHcpLCh1KSwodiksKG0pKQorI2RlZmluZSBtcGlfbXVsX3VpKHcsdSx2KSAgICAgIGdjcnlfbXBpX211bF91aSAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9tdWxfMmV4cCh3LHUsdikgICAgZ2NyeV9tcGlfbXVsXzJleHAgKCh3KSwodSksKHYpKQorI2RlZmluZSBtcGlfbXVsKHcsdSx2KSAgICAgICAgIGdjcnlfbXBpX211bCAoKHcpLCh1KSwodikpCisjZGVmaW5lIG1waV9tdWxtKHcsdSx2LG0pICAgICAgZ2NyeV9tcGlfbXVsbSAoKHcpLCh1KSwodiksKG0pKQorI2RlZmluZSBtcGlfcG93bSh3LGIsZSxtKSAgICAgIGdjcnlfbXBpX3Bvd20gKCAodyksIChiKSwgKGUpLCAobSkgKQorI2RlZmluZSBtcGlfdGRpdihxLHIsYSxtKSAgICAgIGdjcnlfbXBpX2RpdiAoIChxKSwgKHIpLCAoYSksIChtKSwgMCkKKyNkZWZpbmUgbXBpX2ZkaXYocSxyLGEsbSkgICAgICBnY3J5X21waV9kaXYgKCAocSksIChyKSwgKGEpLCAobSksIC0xKQorI2RlZmluZSBtcGlfbW9kKHIsYSxtKSAgICAgICAgIGdjcnlfbXBpX21vZCAoKHIpLCAoYSksIChtKSkKKyNkZWZpbmUgbXBpX2djZChnLGEsYikgICAgICAgICBnY3J5X21waV9nY2QgKCAoZyksIChhKSwgKGIpICkKKyNkZWZpbmUgbXBpX2ludm0oZyxhLGIpICAgICAgICBnY3J5X21waV9pbnZtICggKGcpLCAoYSksIChiKSApCisKKyNkZWZpbmUgbXBpX3BvaW50X25ldyhuKSAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfbmV3KChuKSkKKyNkZWZpbmUgbXBpX3BvaW50X3JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGdjcnlfbXBpX3BvaW50X3JlbGVhc2UgKChwKSk7ICAgICAgICAgICAgIFwKKyAgICAgIChwKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUgKDApCisjZGVmaW5lIG1waV9wb2ludF9nZXQoeCx5LHoscCkgICAgICAgIGdjcnlfbXBpX3BvaW50X2dldCgoeCksKHkpLCh6KSwocCkpCisjZGVmaW5lIG1waV9wb2ludF9zbmF0Y2hfZ2V0KHgseSx6LHApIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQoKHgpLCh5KSwoeiksKHApKQorI2RlZmluZSBtcGlfcG9pbnRfc2V0KHAseCx5LHopICAgICAgICBnY3J5X21waV9wb2ludF9zZXQoKHApLCh4KSwoeSksKHopKQorI2RlZmluZSBtcGlfcG9pbnRfc25hdGNoX3NldChwLHgseSx6KSBnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0KChwKSwoeCksKHkpLCh6KSkKKworI2RlZmluZSBtcGlfZ2V0X25iaXRzKGEpICAgICAgIGdjcnlfbXBpX2dldF9uYml0cyAoKGEpKQorI2RlZmluZSBtcGlfdGVzdF9iaXQoYSxiKSAgICAgIGdjcnlfbXBpX3Rlc3RfYml0ICgoYSksKGIpKQorI2RlZmluZSBtcGlfc2V0X2JpdChhLGIpICAgICAgIGdjcnlfbXBpX3NldF9iaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9zZXRfaGlnaGJpdChhLGIpICAgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9jbGVhcl9iaXQoYSxiKSAgICAgZ2NyeV9tcGlfY2xlYXJfYml0ICgoYSksKGIpKQorI2RlZmluZSBtcGlfY2xlYXJfaGlnaGJpdChhLGIpIGdjcnlfbXBpX2NsZWFyX2hpZ2hiaXQgKChhKSwoYikpCisjZGVmaW5lIG1waV9yc2hpZnQoYSxiLGMpICAgICAgZ2NyeV9tcGlfcnNoaWZ0ICgoYSksKGIpLChjKSkKKyNkZWZpbmUgbXBpX2xzaGlmdChhLGIsYykgICAgICBnY3J5X21waV9sc2hpZnQgKChhKSwoYiksKGMpKQorCisjZGVmaW5lIG1waV9zZXRfb3BhcXVlKGEsYixjKSAgZ2NyeV9tcGlfc2V0X29wYXF1ZSggKGEpLCAoYiksIChjKSApCisjZGVmaW5lIG1waV9nZXRfb3BhcXVlKGEsYikgICAgZ2NyeV9tcGlfZ2V0X29wYXF1ZSggKGEpLCAoYikgKQorI2VuZGlmIC8qIEdDUllQVF9OT19NUElfTUFDUk9TICovCisKKworDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBTeW1tZXRyaWMgQ2lwaGVyIEZ1bmN0aW9ucyAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIGRhdGEgb2JqZWN0IHVzZWQgdG8gaG9sZCBhIGhhbmRsZSB0byBhbiBlbmNyeXB0aW9uIG9iamVjdC4gICovCitzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlOwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9jaXBoZXJfaGFuZGxlICpnY3J5X2NpcGhlcl9oZF90OworCisjaWZuZGVmIEdDUllQVF9OT19ERVBSRUNBVEVECit0eXBlZGVmIHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUgKkdDUllfQ0lQSEVSX0hEIF9HQ1JZX0dDQ19BVFRSX0RFUFJFQ0FURUQ7Cit0eXBlZGVmIHN0cnVjdCBnY3J5X2NpcGhlcl9oYW5kbGUgKkdjcnlDaXBoZXJIZCBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOworI2VuZGlmCisKKy8qIEFsbCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIElEcy4KKyAgIE1vcmUgSURzIG1heSBiZSByZWdpc3RlcmVkIGF0IHJ1bnRpbWUuICovCitlbnVtIGdjcnlfY2lwaGVyX2FsZ29zCisgIHsKKyAgICBHQ1JZX0NJUEhFUl9OT05FICAgICAgICA9IDAsCisgICAgR0NSWV9DSVBIRVJfSURFQSAgICAgICAgPSAxLAorICAgIEdDUllfQ0lQSEVSXzNERVMgICAgICAgID0gMiwKKyAgICBHQ1JZX0NJUEhFUl9DQVNUNSAgICAgICA9IDMsCisgICAgR0NSWV9DSVBIRVJfQkxPV0ZJU0ggICAgPSA0LAorICAgIEdDUllfQ0lQSEVSX1NBRkVSX1NLMTI4ID0gNSwKKyAgICBHQ1JZX0NJUEhFUl9ERVNfU0sgICAgICA9IDYsCisgICAgR0NSWV9DSVBIRVJfQUVTICAgICAgICAgPSA3LAorICAgIEdDUllfQ0lQSEVSX0FFUzE5MiAgICAgID0gOCwKKyAgICBHQ1JZX0NJUEhFUl9BRVMyNTYgICAgICA9IDksCisgICAgR0NSWV9DSVBIRVJfVFdPRklTSCAgICAgPSAxMCwKKworICAgIC8qIE90aGVyIGNpcGhlciBudW1iZXJzIGFyZSBhYm92ZSAzMDAgZm9yIE9wZW5QR1AgcmVhc29ucy4gKi8KKyAgICBHQ1JZX0NJUEhFUl9BUkNGT1VSICAgICA9IDMwMSwgIC8qIEZ1bGx5IGNvbXBhdGlibGUgd2l0aCBSU0EncyBSQzQgKHRtKS4gKi8KKyAgICBHQ1JZX0NJUEhFUl9ERVMgICAgICAgICA9IDMwMiwgIC8qIFllcywgdGhpcyBpcyBzaW5nbGUga2V5IDU2IGJpdCBERVMuICovCisgICAgR0NSWV9DSVBIRVJfVFdPRklTSDEyOCAgPSAzMDMsCisgICAgR0NSWV9DSVBIRVJfU0VSUEVOVDEyOCAgPSAzMDQsCisgICAgR0NSWV9DSVBIRVJfU0VSUEVOVDE5MiAgPSAzMDUsCisgICAgR0NSWV9DSVBIRVJfU0VSUEVOVDI1NiAgPSAzMDYsCisgICAgR0NSWV9DSVBIRVJfUkZDMjI2OF80MCAgPSAzMDcsICAvKiBSb24ncyBDaXBoZXIgMiAoNDAgYml0KS4gKi8KKyAgICBHQ1JZX0NJUEhFUl9SRkMyMjY4XzEyOCA9IDMwOCwgIC8qIFJvbidzIENpcGhlciAyICgxMjggYml0KS4gKi8KKyAgICBHQ1JZX0NJUEhFUl9TRUVEICAgICAgICA9IDMwOSwgIC8qIDEyOCBiaXQgY2lwaGVyIGRlc2NyaWJlZCBpbiBSRkM0MjY5LiAqLworICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4ID0gMzEwLAorICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTkyID0gMzExLAorICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMjU2ID0gMzEyLAorICAgIEdDUllfQ0lQSEVSX1NBTFNBMjAgICAgID0gMzEzLAorICAgIEdDUllfQ0lQSEVSX1NBTFNBMjBSMTIgID0gMzE0LAorICAgIEdDUllfQ0lQSEVSX0dPU1QyODE0NyAgID0gMzE1CisgIH07CisKKy8qIFRoZSBSaWpuZGFlbCBhbGdvcml0aG0gaXMgYmFzaWNhbGx5IEFFUywgc28gcHJvdmlkZSBzb21lIG1hY3Jvcy4gKi8KKyNkZWZpbmUgR0NSWV9DSVBIRVJfQUVTMTI4ICAgICAgR0NSWV9DSVBIRVJfQUVTCisjZGVmaW5lIEdDUllfQ0lQSEVSX1JJSk5EQUVMICAgIEdDUllfQ0lQSEVSX0FFUworI2RlZmluZSBHQ1JZX0NJUEhFUl9SSUpOREFFTDEyOCBHQ1JZX0NJUEhFUl9BRVMxMjgKKyNkZWZpbmUgR0NSWV9DSVBIRVJfUklKTkRBRUwxOTIgR0NSWV9DSVBIRVJfQUVTMTkyCisjZGVmaW5lIEdDUllfQ0lQSEVSX1JJSk5EQUVMMjU2IEdDUllfQ0lQSEVSX0FFUzI1NgorCisvKiBUaGUgc3VwcG9ydGVkIGVuY3J5cHRpb24gbW9kZXMuICBOb3RlIHRoYXQgbm90IGFsbCBvZiB0aGVtIGFyZQorICAgc3VwcG9ydGVkIGZvciBlYWNoIGFsZ29yaXRobS4gKi8KK2VudW0gZ2NyeV9jaXBoZXJfbW9kZXMKKyAgeworICAgIEdDUllfQ0lQSEVSX01PREVfTk9ORSAgID0gMCwgIC8qIE5vdCB5ZXQgc3BlY2lmaWVkLiAqLworICAgIEdDUllfQ0lQSEVSX01PREVfRUNCICAgID0gMSwgIC8qIEVsZWN0cm9uaWMgY29kZWJvb2suICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9DRkIgICAgPSAyLCAgLyogQ2lwaGVyIGZlZWRiYWNrLiAqLworICAgIEdDUllfQ0lQSEVSX01PREVfQ0JDICAgID0gMywgIC8qIENpcGhlciBibG9jayBjaGFpbmluZy4gKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTSA9IDQsICAvKiBVc2VkIHdpdGggc3RyZWFtIGNpcGhlcnMuICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9PRkIgICAgPSA1LCAgLyogT3V0ZXIgZmVlZGJhY2suICovCisgICAgR0NSWV9DSVBIRVJfTU9ERV9DVFIgICAgPSA2LCAgLyogQ291bnRlci4gKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVA9IDcsICAvKiBBRVMtV1JBUCBhbGdvcml0aG0uICAqLworICAgIEdDUllfQ0lQSEVSX01PREVfQ0NNICAgID0gOCwgIC8qIENvdW50ZXIgd2l0aCBDQkMtTUFDLiAgKi8KKyAgICBHQ1JZX0NJUEhFUl9NT0RFX0dDTSAgICA9IDkgICAvKiBHYWxvaXMgQ291bnRlciBNb2RlLiAqLworICB9OworCisvKiBGbGFncyB1c2VkIHdpdGggdGhlIG9wZW4gZnVuY3Rpb24uICovCitlbnVtIGdjcnlfY2lwaGVyX2ZsYWdzCisgIHsKKyAgICBHQ1JZX0NJUEhFUl9TRUNVUkUgICAgICA9IDEsICAvKiBBbGxvY2F0ZSBpbiBzZWN1cmUgbWVtb3J5LiAqLworICAgIEdDUllfQ0lQSEVSX0VOQUJMRV9TWU5DID0gMiwgIC8qIEVuYWJsZSBDRkIgc3luYyBtb2RlLiAqLworICAgIEdDUllfQ0lQSEVSX0NCQ19DVFMgICAgID0gNCwgIC8qIEVuYWJsZSBDQkMgY2lwaGVyIHRleHQgc3RlYWxpbmcgKENUUykuICovCisgICAgR0NSWV9DSVBIRVJfQ0JDX01BQyAgICAgPSA4ICAgLyogRW5hYmxlIENCQyBtZXNzYWdlIGF1dGguIGNvZGUgKE1BQykuICovCisgIH07CisKKy8qIEdDTSB3b3JrcyBvbmx5IHdpdGggYmxvY2tzIG9mIDEyOCBiaXRzICovCisjZGVmaW5lIEdDUllfR0NNX0JMT0NLX0xFTiAgKDEyOCAvIDgpCisKKy8qIENDTSB3b3JrcyBvbmx5IHdpdGggYmxvY2tzIG9mIDEyOCBiaXRzLiAgKi8KKyNkZWZpbmUgR0NSWV9DQ01fQkxPQ0tfTEVOICAoMTI4IC8gOCkKKworLyogQ3JlYXRlIGEgaGFuZGxlIGZvciBhbGdvcml0aG0gQUxHTyB0byBiZSB1c2VkIGluIE1PREUuICBGTEFHUyBtYXkKKyAgIGJlIGdpdmVuIGFzIGFuIGJpdHdpc2UgT1Igb2YgdGhlIGdjcnlfY2lwaGVyX2ZsYWdzIHZhbHVlcy4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9vcGVuIChnY3J5X2NpcGhlcl9oZF90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxnbywgaW50IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qIENsb3NlIHRoZSBjaW9oZXIgaGFuZGxlIEggYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlLiAqLwordm9pZCBnY3J5X2NpcGhlcl9jbG9zZSAoZ2NyeV9jaXBoZXJfaGRfdCBoKTsKKworLyogUGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIGNpcGhlciBvYmplY3QgSC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9jdGwgKGdjcnlfY2lwaGVyX2hkX3QgaCwgaW50IGNtZCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKKworLyogUmV0cmlldmUgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2lwaGVyIG9iamVjdCBILiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2luZm8gKGdjcnlfY2lwaGVyX2hkX3QgaCwgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmJ5dGVzKTsKKworLyogUmV0cmlldmUgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2lwaGVyIGFsZ29yaXRobSBBTEdPLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmJ5dGVzKTsKKworLyogTWFwIHRoZSBjaXBoZXIgYWxnb3JpdGhtIHdob3NlIElEIGlzIGNvbnRhaW5lZCBpbiBBTEdPUklUSE0gdG8gYQorICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhbGdvcml0aG0gbmFtZS4gIEZvciB1bmtub3duIGFsZ29yaXRobQorICAgSURzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAiPyIuICAqLworY29uc3QgY2hhciAqZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBNYXAgdGhlIGFsZ29yaXRobSBuYW1lIE5BTUUgdG8gYW4gY2lwaGVyIGFsZ29yaXRobSBJRC4gIFJldHVybiAwIGlmCisgICB0aGUgYWxnb3JpdGhtIG5hbWUgaXMgbm90IGtub3duLiAqLworaW50IGdjcnlfY2lwaGVyX21hcF9uYW1lIChjb25zdCBjaGFyICpuYW1lKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBHaXZlbiBhbiBBU04uMSBvYmplY3QgaWRlbnRpZmllciBpbiBzdGFuZGFyZCBJRVRGIGRvdHRlZCBkZWNpbWFsCisgICBmb3JtYXQgaW4gU1RSSU5HLCByZXR1cm4gdGhlIGVuY3J5cHRpb24gbW9kZSBhc3NvY2lhdGVkIHdpdGggdGhhdAorICAgT0lEIG9yIDAgaWYgbm90IGtub3duIG9yIGFwcGxpY2FibGUuICovCitpbnQgZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCAoY29uc3QgY2hhciAqc3RyaW5nKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBFbmNyeXB0IHRoZSBwbGFpbnRleHQgb2Ygc2l6ZSBJTkxFTiBpbiBJTiB1c2luZyB0aGUgY2lwaGVyIGhhbmRsZSBICisgICBpbnRvIHRoZSBidWZmZXIgT1VUIHdoaWNoIGhhcyBhbiBhbGxvY2F0ZWQgbGVuZ3RoIG9mIE9VVFNJWkUuICBGb3IKKyAgIG1vc3QgYWxnb3JpdGhtcyBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIE5VTEwgZm9yIGluIGFuZCAwIGZvciBJTkxFTgorICAgYW5kIGRvIGEgaW4tcGxhY2UgZGVjcnlwdGlvbiBvZiB0aGUgZGF0YSBwcm92aWRlZCBpbiBPVVQuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGdjcnlfY2lwaGVyX2hkX3QgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXQsIHNpemVfdCBvdXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4pOworCisvKiBUaGUgY291bnRlcnBhcnQgdG8gZ2NyeV9jaXBoZXJfZW5jcnlwdC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dCwgc2l6ZV90IG91dHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbik7CisKKy8qIFNldCBLRVkgb2YgbGVuZ3RoIEtFWUxFTiBieXRlcyBmb3IgdGhlIGNpcGhlciBoYW5kbGUgSEQuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX3NldGtleSAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CisKKworLyogU2V0IGluaXRpYWxpemF0aW9uIHZlY3RvciBJViBvZiBsZW5ndGggSVZMRU4gZm9yIHRoZSBjaXBoZXIgaGFuZGxlIEhELiAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX3NldGl2IChnY3J5X2NpcGhlcl9oZF90IGhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppdiwgc2l6ZV90IGl2bGVuKTsKKworLyogUHJvdmlkZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgZm9yIEFFQUQgbW9kZXMvY2lwaGVycy4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlIChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICphYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFidWZsZW4pOworCisvKiBHZXQgYXV0aGVudGljYXRpb24gdGFnIGZvciBBRUFEIG1vZGVzL2NpcGhlcnMuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfY2lwaGVyX2dldHRhZyAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgdm9pZCAqb3V0dGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ2xlbik7CisKKy8qIENoZWNrIGF1dGhlbnRpY2F0aW9uIHRhZyBmb3IgQUVBRCBtb2Rlcy9jaXBoZXJzLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X2NpcGhlcl9jaGVja3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaW50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0YWdsZW4pOworCisvKiBSZXNldCB0aGUgaGFuZGxlIHRvIHRoZSBzdGF0ZSBhZnRlciBvcGVuLiAgKi8KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfcmVzZXQoaCkgIGdjcnlfY2lwaGVyX2N0bCAoKGgpLCBHQ1JZQ1RMX1JFU0VULCBOVUxMLCAwKQorCisvKiBQZXJmb3JtIHRoZSBPcGVuUEdQIHN5bmMgb3BlcmF0aW9uIGlmIHRoaXMgaXMgZW5hYmxlZCBmb3IgdGhlCisgICBjaXBoZXIgaGFuZGxlIEguICovCisjZGVmaW5lIGdjcnlfY2lwaGVyX3N5bmMoaCkgIGdjcnlfY2lwaGVyX2N0bCggKGgpLCBHQ1JZQ1RMX0NGQl9TWU5DLCBOVUxMLCAwKQorCisvKiBFbmFibGUgb3IgZGlzYWJsZSBDVFMgaW4gZnV0dXJlIGNhbGxzIHRvIGdjcnlfZW5jcnlwdCgpLiBDQkMgbW9kZSBvbmx5LiAqLworI2RlZmluZSBnY3J5X2NpcGhlcl9jdHMoaCxvbikgIGdjcnlfY2lwaGVyX2N0bCggKGgpLCBHQ1JZQ1RMX1NFVF9DQkNfQ1RTLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgb24gKQorCisvKiBTZXQgY291bnRlciBmb3IgQ1RSIG1vZGUuICAoQ1RSLENUUkxFTikgbXVzdCBkZW5vdGUgYSBidWZmZXIgb2YKKyAgIGJsb2NrIHNpemUgbGVuZ3RoLCBvciAoTlVMTCwwKSB0byBzZXQgdGhlIENUUiB0byB0aGUgYWxsLXplcm8gYmxvY2suICovCitncGdfZXJyb3JfdCBnY3J5X2NpcGhlcl9zZXRjdHIgKGdjcnlfY2lwaGVyX2hkX3QgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmN0ciwgc2l6ZV90IGN0cmxlbik7CisKKy8qIFJldHJpZXZlIHRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzIHVzZWQgd2l0aCBhbGdvcml0aG0gQS4gKi8KK3NpemVfdCBnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4gKGludCBhbGdvKTsKKworLyogUmV0cmlldmUgdGhlIGJsb2NrIGxlbmd0aCBpbiBieXRlcyB1c2VkIHdpdGggYWxnb3JpdGhtIEEuICovCitzaXplX3QgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIChpbnQgYWxnbyk7CisKKy8qIFJldHVybiAwIGlmIHRoZSBhbGdvcml0aG0gQSBpcyBhdmFpbGFibGUgZm9yIHVzZS4gKi8KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfdGVzdF9hbGdvKGEpIFwKKyAgICAgICAgICAgIGdjcnlfY2lwaGVyX2FsZ29faW5mbyggKGEpLCBHQ1JZQ1RMX1RFU1RfQUxHTywgTlVMTCwgTlVMTCApCisKKwwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgIEFzeW1tZXRyaWMgQ2lwaGVyIEZ1bmN0aW9ucyAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBhbGdvcml0aG1zIGFuZCB0aGVpciBJRHMgd2Ugc3VwcG9ydC4gICovCitlbnVtIGdjcnlfcGtfYWxnb3MKKyAgeworICAgIEdDUllfUEtfUlNBICAgPSAxLCAgICAgIC8qIFJTQSAqLworICAgIEdDUllfUEtfUlNBX0UgPSAyLCAgICAgIC8qIChkZXByZWNhdGVkOiB1c2UgMSkuICAqLworICAgIEdDUllfUEtfUlNBX1MgPSAzLCAgICAgIC8qIChkZXByZWNhdGVkOiB1c2UgMSkuICAqLworICAgIEdDUllfUEtfRUxHX0UgPSAxNiwgICAgIC8qIChkZXByZWNhdGVkOiB1c2UgMjApLiAqLworICAgIEdDUllfUEtfRFNBICAgPSAxNywgICAgIC8qIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobS4gICovCisgICAgR0NSWV9QS19FQ0MgICA9IDE4LCAgICAgLyogR2VuZXJpYyBFQ0MuICAqLworICAgIEdDUllfUEtfRUxHICAgPSAyMCwgICAgIC8qIEVsZ2FtYWwgICAgICAgKi8KKyAgICBHQ1JZX1BLX0VDRFNBID0gMzAxLCAgICAvKiAoZGVwcmVjYXRlZDogdXNlIDE4KS4gICovCisgICAgR0NSWV9QS19FQ0RIICA9IDMwMiAgICAgLyogKGRlcHJlY2F0ZWQ6IHVzZSAxOCkuICAqLworICB9OworCisvKiBGbGFncyBkZXNjcmliaW5nIHVzYWdlIGNhcGFiaWxpdGllcyBvZiBhIFBLIGFsZ29yaXRobS4gKi8KKyNkZWZpbmUgR0NSWV9QS19VU0FHRV9TSUdOIDEgICAvKiBHb29kIGZvciBzaWduYXR1cmVzLiAqLworI2RlZmluZSBHQ1JZX1BLX1VTQUdFX0VOQ1IgMiAgIC8qIEdvb2QgZm9yIGVuY3J5cHRpb24uICovCisjZGVmaW5lIEdDUllfUEtfVVNBR0VfQ0VSVCA0ICAgLyogR29vZCB0byBjZXJ0aWZ5IG90aGVyIGtleXMuICovCisjZGVmaW5lIEdDUllfUEtfVVNBR0VfQVVUSCA4ICAgLyogR29vZCBmb3IgYXV0aGVudGljYXRpb24uICovCisjZGVmaW5lIEdDUllfUEtfVVNBR0VfVU5LTiAxMjggLyogVW5rbm93biB1c2FnZSBmbGFnLiAqLworCisvKiBNb2RlcyB1c2VkIHdpdGggZ2NyeV9wdWJrZXlfZ2V0X3NleHAuICAqLworI2RlZmluZSBHQ1JZX1BLX0dFVF9QVUJLRVkgMQorI2RlZmluZSBHQ1JZX1BLX0dFVF9TRUNLRVkgMgorCisvKiBFbmNyeXB0IHRoZSBEQVRBIHVzaW5nIHRoZSBwdWJsaWMga2V5IFBLRVkgYW5kIHN0b3JlIHRoZSByZXN1bHQgYXMKKyAgIGEgbmV3bHkgY3JlYXRlZCBTLWV4cHJlc3Npb24gYXQgUkVTVUxULiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfZW5jcnlwdCAoZ2NyeV9zZXhwX3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IGRhdGEsIGdjcnlfc2V4cF90IHBrZXkpOworCisvKiBEZWNyeXB0IHRoZSBEQVRBIHVzaW5nIHRoZSBwcml2YXRlIGtleSBTS0VZIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGFzCisgICBhIG5ld2x5IGNyZWF0ZWQgUy1leHByZXNzaW9uIGF0IFJFU1VMVC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X3BrX2RlY3J5cHQgKGdjcnlfc2V4cF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBza2V5KTsKKworLyogU2lnbiB0aGUgREFUQSB1c2luZyB0aGUgcHJpdmF0ZSBrZXkgU0tFWSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBhcworICAgYSBuZXdseSBjcmVhdGVkIFMtZXhwcmVzc2lvbiBhdCBSRVNVTFQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wa19zaWduIChnY3J5X3NleHBfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgZGF0YSwgZ2NyeV9zZXhwX3Qgc2tleSk7CisKKy8qIENoZWNrIHRoZSBzaWduYXR1cmUgU0lHVkFMIG9uIERBVEEgdXNpbmcgdGhlIHB1YmxpYyBrZXkgUEtFWS4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X3BrX3ZlcmlmeSAoZ2NyeV9zZXhwX3Qgc2lndmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBwa2V5KTsKKworLyogQ2hlY2sgdGhhdCBwcml2YXRlIEtFWSBpcyBzYW5lLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfdGVzdGtleSAoZ2NyeV9zZXhwX3Qga2V5KTsKKworLyogR2VuZXJhdGUgYSBuZXcga2V5IHBhaXIgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIGluCisgICBTX1BBUk1TLiAgVGhlIG5ldyBrZXkgcGFpciBpcyByZXR1cm5lZCBpbiBhcyBhbiBTLWV4cHJlc3Npb24gaW4KKyAgIFJfS0VZLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcGtfZ2Vua2V5IChnY3J5X3NleHBfdCAqcl9rZXksIGdjcnlfc2V4cF90IHNfcGFybXMpOworCisvKiBDYXRjaCBhbGwgZnVuY3Rpb24gZm9yIG1pc2NlbGxhbmVvdXMgb3BlcmF0aW9ucy4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X3BrX2N0bCAoaW50IGNtZCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKKworLyogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtIEFMR08uICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wa19hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyk7CisKKy8qIE1hcCB0aGUgcHVibGljIGtleSBhbGdvcml0aG0gd2hvc2UgSUQgaXMgY29udGFpbmVkIGluIEFMR09SSVRITSB0bworICAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFsZ29yaXRobSBuYW1lLiAgRm9yIHVua25vd24KKyAgIGFsZ29yaXRobSBJRHMgdGhpcyBmdW5jdGlvbnMgcmV0dXJucyAiPyIuICovCitjb25zdCBjaGFyICpnY3J5X3BrX2FsZ29fbmFtZSAoaW50IGFsZ29yaXRobSkgX0dDUllfR0NDX0FUVFJfUFVSRTsKKworLyogTWFwIHRoZSBhbGdvcml0aG0gTkFNRSB0byBhIHB1YmxpYyBrZXkgYWxnb3JpdGhtIElkLiAgUmV0dXJuIDAgaWYKKyAgIHRoZSBhbGdvcml0aG0gbmFtZSBpcyBub3Qga25vd24uICovCitpbnQgZ2NyeV9wa19tYXBfbmFtZSAoY29uc3QgY2hhciogbmFtZSkgX0dDUllfR0NDX0FUVFJfUFVSRTsKKworLyogUmV0dXJuIHdoYXQgaXMgY29tbW9ubHkgcmVmZXJyZWQgYXMgdGhlIGtleSBsZW5ndGggZm9yIHRoZSBnaXZlbgorICAgcHVibGljIG9yIHByaXZhdGUgS0VZLiAgKi8KK3Vuc2lnbmVkIGludCBnY3J5X3BrX2dldF9uYml0cyAoZ2NyeV9zZXhwX3Qga2V5KSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBSZXR1cm4gdGhlIHNvIGNhbGxlZCBLRVlHUklQIHdoaWNoIGlzIHRoZSBTSEEtMSBoYXNoIG9mIHRoZSBwdWJsaWMKKyAgIGtleSBwYXJhbWV0ZXJzIGV4cHJlc3NlZCBpbiBhIHdheSBkZXBlbmRpbmcgb24gdGhlIGFsZ29yaXRobS4gICovCit1bnNpZ25lZCBjaGFyICpnY3J5X3BrX2dldF9rZXlncmlwIChnY3J5X3NleHBfdCBrZXksIHVuc2lnbmVkIGNoYXIgKmFycmF5KTsKKworLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJ2ZSBtYXRjaGluZyBLRVkuICAqLworY29uc3QgY2hhciAqZ2NyeV9wa19nZXRfY3VydmUgKGdjcnlfc2V4cF90IGtleSwgaW50IGl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcl9uYml0cyk7CisKKy8qIFJldHVybiBhbiBTLWV4cHJlc3Npb24gd2l0aCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgbmFtZWQgRUNDIGN1cnZlCisgICBOQU1FLiAgQUxHTyBtdXN0IGJlIHNldCB0byBhbiBFQ0MgYWxnb3JpdGhtLiAgKi8KK2djcnlfc2V4cF90IGdjcnlfcGtfZ2V0X3BhcmFtIChpbnQgYWxnbywgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIFJldHVybiAwIGlmIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSBBIGlzIGF2YWlsYWJsZSBmb3IgdXNlLiAqLworI2RlZmluZSBnY3J5X3BrX3Rlc3RfYWxnbyhhKSBcCisgICAgICAgICAgICBnY3J5X3BrX2FsZ29faW5mbyggKGEpLCBHQ1JZQ1RMX1RFU1RfQUxHTywgTlVMTCwgTlVMTCApCisKKy8qIFJldHVybiBhbiBTLWV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb250ZXh0IENUWC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKGdjcnlfc2V4cF90ICpyX3NleHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBnY3J5X2N0eF90IGN0eCk7CisKKwwKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBDcnlwdG9ncmFoaWMgSGFzaCBGdW5jdGlvbnMgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQWxnb3JpdGhtIElEcyBmb3IgdGhlIGhhc2ggZnVuY3Rpb25zIHdlIGtub3cgYWJvdXQuIE5vdCBhbGwgb2YgdGhlbQorICAgYXJlIGltcGxlbW50ZWQuICovCitlbnVtIGdjcnlfbWRfYWxnb3MKKyAgeworICAgIEdDUllfTURfTk9ORSAgICA9IDAsCisgICAgR0NSWV9NRF9NRDUgICAgID0gMSwKKyAgICBHQ1JZX01EX1NIQTEgICAgPSAyLAorICAgIEdDUllfTURfUk1EMTYwICA9IDMsCisgICAgR0NSWV9NRF9NRDIgICAgID0gNSwKKyAgICBHQ1JZX01EX1RJR0VSICAgPSA2LCAgIC8qIFRJR0VSLzE5MiBhcyB1c2VkIGJ5IGdwZyA8PSAxLjMuMi4gKi8KKyAgICBHQ1JZX01EX0hBVkFMICAgPSA3LCAgIC8qIEhBVkFMLCA1IHBhc3MsIDE2MCBiaXQuICovCisgICAgR0NSWV9NRF9TSEEyNTYgID0gOCwKKyAgICBHQ1JZX01EX1NIQTM4NCAgPSA5LAorICAgIEdDUllfTURfU0hBNTEyICA9IDEwLAorICAgIEdDUllfTURfU0hBMjI0ICA9IDExLAorICAgIEdDUllfTURfTUQ0ICAgICA9IDMwMSwKKyAgICBHQ1JZX01EX0NSQzMyICAgICAgICAgPSAzMDIsCisgICAgR0NSWV9NRF9DUkMzMl9SRkMxNTEwID0gMzAzLAorICAgIEdDUllfTURfQ1JDMjRfUkZDMjQ0MCA9IDMwNCwKKyAgICBHQ1JZX01EX1dISVJMUE9PTCAgICAgPSAzMDUsCisgICAgR0NSWV9NRF9USUdFUjEgICAgICAgID0gMzA2LCAvKiBUSUdFUiBmaXhlZC4gICovCisgICAgR0NSWV9NRF9USUdFUjIgICAgICAgID0gMzA3LCAvKiBUSUdFUjIgdmFyaWFudC4gICAqLworICAgIEdDUllfTURfR09TVFIzNDExXzk0ICA9IDMwOCwgLyogR09TVCBSIDM0LjExLTk0LiAgKi8KKyAgICBHQ1JZX01EX1NUUklCT0cyNTYgICAgPSAzMDksIC8qIEdPU1QgUiAzNC4xMS0yMDEyLCAyNTYgYml0LiAgKi8KKyAgICBHQ1JZX01EX1NUUklCT0c1MTIgICAgPSAzMTAgIC8qIEdPU1QgUiAzNC4xMS0yMDEyLCA1MTIgYml0LiAgKi8KKyAgfTsKKworLyogRmxhZ3MgdXNlZCB3aXRoIHRoZSBvcGVuIGZ1bmN0aW9uLiAgKi8KK2VudW0gZ2NyeV9tZF9mbGFncworICB7CisgICAgR0NSWV9NRF9GTEFHX1NFQ1VSRSA9IDEsICAvKiBBbGxvY2F0ZSBhbGwgYnVmZmVycyBpbiAic2VjdXJlIiBtZW1vcnkuICAqLworICAgIEdDUllfTURfRkxBR19ITUFDICAgPSAyLCAgLyogTWFrZSBhbiBITUFDIG91dCBvZiB0aGlzIGFsZ29yaXRobS4gICovCisgICAgR0NSWV9NRF9GTEFHX0JVR0VNVTEgPSAweDAxMDAKKyAgfTsKKworLyogKEZvcndhcmQgZGVjbGFyYXRpb24uKSAgKi8KK3N0cnVjdCBnY3J5X21kX2NvbnRleHQ7CisKKy8qIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gaG9sZCBhIGhhbmRsZSB0byBhIG1lc3NhZ2UgZGlnZXN0IG9iamVjdC4KKyAgIFRoaXMgc3RydWN0dXJlIGlzIHByaXZhdGUgLSBvbmx5IHRvIGJlIHVzZWQgYnkgdGhlIHB1YmxpYyBnY3J5X21kXyoKKyAgIG1hY3Jvcy4gICovCit0eXBlZGVmIHN0cnVjdCBnY3J5X21kX2hhbmRsZQoreworICAvKiBBY3R1YWwgY29udGV4dC4gICovCisgIHN0cnVjdCBnY3J5X21kX2NvbnRleHQgKmN0eDsKKworICAvKiBCdWZmZXIgbWFuYWdlbWVudC4gICovCisgIGludCAgYnVmcG9zOworICBpbnQgIGJ1ZnNpemU7CisgIHVuc2lnbmVkIGNoYXIgYnVmWzFdOworfSAqZ2NyeV9tZF9oZF90OworCisvKiBDb21wYXRpYmlsaXR5IHR5cGVzLCBkbyBub3QgdXNlIHRoZW0uICAqLworI2lmbmRlZiBHQ1JZUFRfTk9fREVQUkVDQVRFRAordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tZF9oYW5kbGUgKkdDUllfTURfSEQgX0dDUllfR0NDX0FUVFJfREVQUkVDQVRFRDsKK3R5cGVkZWYgc3RydWN0IGdjcnlfbWRfaGFuZGxlICpHY3J5TURIZCBfR0NSWV9HQ0NfQVRUUl9ERVBSRUNBVEVEOworI2VuZGlmCisKKy8qIENyZWF0ZSBhIG1lc3NhZ2UgZGlnZXN0IG9iamVjdCBmb3IgYWxnb3JpdGhtIEFMR08uICBGTEFHUyBtYXkgYmUKKyAgIGdpdmVuIGFzIGFuIGJpdHdpc2UgT1Igb2YgdGhlIGdjcnlfbWRfZmxhZ3MgdmFsdWVzLiAgQUxHTyBtYXkgYmUKKyAgIGdpdmVuIGFzIDAgaWYgdGhlIGFsZ29yaXRobXMgdG8gYmUgdXNlZCBhcmUgbGF0ZXIgc2V0IHVzaW5nCisgICBnY3J5X21kX2VuYWJsZS4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9vcGVuIChnY3J5X21kX2hkX3QgKmgsIGludCBhbGdvLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKiBSZWxlYXNlIHRoZSBtZXNzYWdlIGRpZ2VzdCBvYmplY3QgSEQuICAqLwordm9pZCBnY3J5X21kX2Nsb3NlIChnY3J5X21kX2hkX3QgaGQpOworCisvKiBBZGQgdGhlIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSBBTEdPIHRvIHRoZSBkaWdlc3Qgb2JqZWN0IEhELiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21kX2VuYWJsZSAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnbyk7CisKKy8qIENyZWF0ZSBhIG5ldyBkaWdlc3Qgb2JqZWN0IGFzIGFuIGV4YWN0IGNvcHkgb2YgdGhlIG9iamVjdCBIRC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9jb3B5IChnY3J5X21kX2hkX3QgKmJoZCwgZ2NyeV9tZF9oZF90IGFoZCk7CisKKy8qIFJlc2V0IHRoZSBkaWdlc3Qgb2JqZWN0IEhEIHRvIGl0cyBpbml0aWFsIHN0YXRlLiAgKi8KK3ZvaWQgZ2NyeV9tZF9yZXNldCAoZ2NyeV9tZF9oZF90IGhkKTsKKworLyogUGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIGRpZ2VzdCBvYmplY3QgSEQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9jdGwgKGdjcnlfbWRfaGRfdCBoZCwgaW50IGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKKworLyogUGFzcyBMRU5HVEggYnl0ZXMgb2YgZGF0YSBpbiBCVUZGRVIgdG8gdGhlIGRpZ2VzdCBvYmplY3QgSEQgc28gdGhhdAorICAgaXQgY2FuIHVwZGF0ZSB0aGUgZGlnZXN0IHZhbHVlcy4gIFRoaXMgaXMgdGhlIGFjdHVhbCBoYXNoCisgICBmdW5jdGlvbi4gKi8KK3ZvaWQgZ2NyeV9tZF93cml0ZSAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworCisvKiBSZWFkIG91dCB0aGUgZmluYWwgZGlnZXN0IGZyb20gSEQgcmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgZm9yCisgICBhbGdvcml0aG0gQUxHTy4gKi8KK3Vuc2lnbmVkIGNoYXIgKmdjcnlfbWRfcmVhZCAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnbyk7CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCBmcm9tIHRoZSBkYXRhIGluIEJVRkZFUgorICAgb2Ygc2l6ZSBMRU5HVEggdXNpbmcgdGhlIGFsZ29yaXRobSBBTEdPIGF2b2lkaW5nIHRoZSBjcmVhdGluZyBvZiBhCisgICBoYXNoIG9iamVjdC4gIFRoZSBoYXNoIGlzIHJldHVybmVkIGluIHRoZSBjYWxsZXIgcHJvdmlkZWQgYnVmZmVyCisgICBESUdFU1Qgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZGlnZXN0IG9mIHRoZSBnaXZlbgorICAgYWxnb3JpdGhtLiAqLwordm9pZCBnY3J5X21kX2hhc2hfYnVmZmVyIChpbnQgYWxnbywgdm9pZCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBoYXNoIG11bHRpcGxlIGJ1ZmZlcnMuICAqLworZ3BnX2Vycm9yX3QgZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGludCBhbGdvLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY3J5X2J1ZmZlcl90ICppb3YsIGludCBpb3ZjbnQpOworCisvKiBSZXRyaWV2ZSB0aGUgYWxnb3JpdGhtIHVzZWQgd2l0aCBIRC4gIFRoaXMgZG9lcyBub3Qgd29yayByZWxpYWJsZQorICAgaWYgbW9yZSB0aGFuIG9uZSBhbGdvcml0aG0gaXMgZW5hYmxlZCBpbiBIRC4gKi8KK2ludCBnY3J5X21kX2dldF9hbGdvIChnY3J5X21kX2hkX3QgaGQpOworCisvKiBSZXRyaWV2ZSB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkaWdlc3QgeWllbGRlZCBieSBhbGdvcml0aG0KKyAgIEFMR08uICovCit1bnNpZ25lZCBpbnQgZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChpbnQgYWxnbyk7CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSB0aGUgYWxnb3JpdGhtIEFMR08gaXMgZW5hYmxlZCBpbiB0aGUgZGlnZXN0CisgICBvYmplY3QgQS4gKi8KK2ludCBnY3J5X21kX2lzX2VuYWJsZWQgKGdjcnlfbWRfaGRfdCBhLCBpbnQgYWxnbyk7CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBkaWdlc3Qgb2JqZWN0IEEgaXMgYWxsb2NhdGVkIGluICJzZWN1cmUiIG1lbW9yeS4gKi8KK2ludCBnY3J5X21kX2lzX3NlY3VyZSAoZ2NyeV9tZF9oZF90IGEpOworCisvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgSC4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9pbmZvIChnY3J5X21kX2hkX3QgaCwgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworCisvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhbGdvcml0aG0gQUxHTy4gICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmJ5dGVzKTsKKworLyogTWFwIHRoZSBkaWdlc3QgYWxnb3JpdGhtIGlkIEFMR08gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICBhbGdvcml0aG0gbmFtZS4gIEZvciB1bmtub3duIGFsZ29yaXRobXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICAiPyIuICovCitjb25zdCBjaGFyICpnY3J5X21kX2FsZ29fbmFtZSAoaW50IGFsZ28pIF9HQ1JZX0dDQ19BVFRSX1BVUkU7CisKKy8qIE1hcCB0aGUgYWxnb3JpdGhtIE5BTUUgdG8gYSBkaWdlc3QgYWxnb3JpdGhtIElkLiAgUmV0dXJuIDAgaWYKKyAgIHRoZSBhbGdvcml0aG0gbmFtZSBpcyBub3Qga25vd24uICovCitpbnQgZ2NyeV9tZF9tYXBfbmFtZSAoY29uc3QgY2hhciogbmFtZSkgX0dDUllfR0NDX0FUVFJfUFVSRTsKKworLyogRm9yIHVzZSB3aXRoIHRoZSBITUFDIGZlYXR1cmUsIHRoZSBzZXQgTUFDIGtleSB0byB0aGUgS0VZIG9mCisgICBLRVlMRU4gYnl0ZXMuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tZF9zZXRrZXkgKGdjcnlfbWRfaGRfdCBoZCwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTsKKworLyogU3RhcnQgb3Igc3RvcCBkZWJ1Z2dpbmcgZm9yIGRpZ2VzdCBoYW5kbGUgSEQ7IGkuZS4gY3JlYXRlIGEgZmlsZQorICAgbmFtZWQgZGJnbWQtPG4+LjxzdWZmaXg+IHdoaWxlIGhhc2hpbmcuICBJZiBTVUZGSVggaXMgTlVMTCwKKyAgIGRlYnVnZ2luZyBzdG9wcyBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjbG9zZWQuICovCit2b2lkIGdjcnlfbWRfZGVidWcgKGdjcnlfbWRfaGRfdCBoZCwgY29uc3QgY2hhciAqc3VmZml4KTsKKworCisvKiBVcGRhdGUgdGhlIGhhc2gocykgb2YgSCB3aXRoIHRoZSBjaGFyYWN0ZXIgQy4gIFRoaXMgaXMgYSBidWZmZXJlZAorICAgdmVyc2lvbiBvZiB0aGUgZ2NyeV9tZF93cml0ZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgZ2NyeV9tZF9wdXRjKGgsYykgIFwKKyAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZ2NyeV9tZF9oZF90IGhfXyA9IChoKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmKCAoaF9fKS0+YnVmcG9zID09IChoX18pLT5idWZzaXplICkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tZF93cml0ZSggKGhfXyksIE5VTEwsIDAgKTsgICAgICBcCisgICAgICAgICAgICAgICAgKGhfXyktPmJ1ZlsoaF9fKS0+YnVmcG9zKytdID0gKGMpICYgMHhmZjsgXAorICAgICAgICAgICAgfSB3aGlsZSgwKQorCisvKiBGaW5hbGl6ZSB0aGUgZGlnZXN0IGNhbGN1bGF0aW9uLiAgVGhpcyBpcyBub3QgcmVhbGx5IG5lZWRlZCBiZWNhdXNlCisgICBnY3J5X21kX3JlYWQoKSBkb2VzIHRoaXMgaW1wbGljaXRseS4gKi8KKyNkZWZpbmUgZ2NyeV9tZF9maW5hbChhKSBcCisgICAgICAgICAgICBnY3J5X21kX2N0bCAoKGEpLCBHQ1JZQ1RMX0ZJTkFMSVpFLCBOVUxMLCAwKQorCisvKiBSZXR1cm4gMCBpZiB0aGUgYWxnb3JpdGhtIEEgaXMgYXZhaWxhYmxlIGZvciB1c2UuICovCisjZGVmaW5lIGdjcnlfbWRfdGVzdF9hbGdvKGEpIFwKKyAgICAgICAgICAgIGdjcnlfbWRfYWxnb19pbmZvKCAoYSksIEdDUllDVExfVEVTVF9BTEdPLCBOVUxMLCBOVUxMICkKKworLyogUmV0dXJuIGFuIERFUiBlbmNvZGVkIEFTTi4xIE9JRCBmb3IgdGhlIGFsZ29yaXRobSBBIGluIGJ1ZmZlciBCLiBOCisgICBtdXN0IHBvaW50IHRvIHNpemVfdCB2YXJpYWJsZSB3aXRoIHRoZSBhdmFpbGFibGUgc2l6ZSBvZiBidWZmZXIgQi4KKyAgIEFmdGVyIHJldHVybiBpdCB3aWxsIHJlY2VpdmUgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSByZXR1cm5lZAorICAgT0lELiAqLworI2RlZmluZSBnY3J5X21kX2dldF9hc25vaWQoYSxiLG4pIFwKKyAgICAgICAgICAgIGdjcnlfbWRfYWxnb19pbmZvKChhKSwgR0NSWUNUTF9HRVRfQVNOT0lELCAoYiksIChuKSkKKworDAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIEZ1bmN0aW9ucyAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBkYXRhIG9iamVjdCB1c2VkIHRvIGhvbGQgYSBoYW5kbGUgdG8gYW4gZW5jcnlwdGlvbiBvYmplY3QuICAqLworc3RydWN0IGdjcnlfbWFjX2hhbmRsZTsKK3R5cGVkZWYgc3RydWN0IGdjcnlfbWFjX2hhbmRsZSAqZ2NyeV9tYWNfaGRfdDsKKworLyogQWxnb3JpdGhtIElEcyBmb3IgdGhlIGhhc2ggZnVuY3Rpb25zIHdlIGtub3cgYWJvdXQuIE5vdCBhbGwgb2YgdGhlbQorICAgYXJlIGltcGxlbWVudGVkLiAqLworZW51bSBnY3J5X21hY19hbGdvcworICB7CisgICAgR0NSWV9NQUNfTk9ORSAgICAgICAgICAgICAgID0gMCwKKworICAgIEdDUllfTUFDX0hNQUNfU0hBMjU2ICAgICAgICA9IDEwMSwKKyAgICBHQ1JZX01BQ19ITUFDX1NIQTIyNCAgICAgICAgPSAxMDIsCisgICAgR0NSWV9NQUNfSE1BQ19TSEE1MTIgICAgICAgID0gMTAzLAorICAgIEdDUllfTUFDX0hNQUNfU0hBMzg0ICAgICAgICA9IDEwNCwKKyAgICBHQ1JZX01BQ19ITUFDX1NIQTEgICAgICAgICAgPSAxMDUsCisgICAgR0NSWV9NQUNfSE1BQ19NRDUgICAgICAgICAgID0gMTA2LAorICAgIEdDUllfTUFDX0hNQUNfTUQ0ICAgICAgICAgICA9IDEwNywKKyAgICBHQ1JZX01BQ19ITUFDX1JNRDE2MCAgICAgICAgPSAxMDgsCisgICAgR0NSWV9NQUNfSE1BQ19USUdFUjEgICAgICAgID0gMTA5LCAvKiBUaGUgZml4ZWQgVElHRVIgdmFyaWFudCAqLworICAgIEdDUllfTUFDX0hNQUNfV0hJUkxQT09MICAgICA9IDExMCwKKyAgICBHQ1JZX01BQ19ITUFDX0dPU1RSMzQxMV85NCAgPSAxMTEsCisgICAgR0NSWV9NQUNfSE1BQ19TVFJJQk9HMjU2ICAgID0gMTEyLAorICAgIEdDUllfTUFDX0hNQUNfU1RSSUJPRzUxMiAgICA9IDExMywKKworICAgIEdDUllfTUFDX0NNQUNfQUVTICAgICAgICAgICA9IDIwMSwKKyAgICBHQ1JZX01BQ19DTUFDXzNERVMgICAgICAgICAgPSAyMDIsCisgICAgR0NSWV9NQUNfQ01BQ19DQU1FTExJQSAgICAgID0gMjAzLAorICAgIEdDUllfTUFDX0NNQUNfQ0FTVDUgICAgICAgICA9IDIwNCwKKyAgICBHQ1JZX01BQ19DTUFDX0JMT1dGSVNIICAgICAgPSAyMDUsCisgICAgR0NSWV9NQUNfQ01BQ19UV09GSVNIICAgICAgID0gMjA2LAorICAgIEdDUllfTUFDX0NNQUNfU0VSUEVOVCAgICAgICA9IDIwNywKKyAgICBHQ1JZX01BQ19DTUFDX1NFRUQgICAgICAgICAgPSAyMDgsCisgICAgR0NSWV9NQUNfQ01BQ19SRkMyMjY4ICAgICAgID0gMjA5LAorICAgIEdDUllfTUFDX0NNQUNfSURFQSAgICAgICAgICA9IDIxMCwKKyAgICBHQ1JZX01BQ19DTUFDX0dPU1QyODE0NyAgICAgPSAyMTEsCisKKyAgICBHQ1JZX01BQ19HTUFDX0FFUyAgICAgICAgICAgPSA0MDEsCisgICAgR0NSWV9NQUNfR01BQ19DQU1FTExJQSAgICAgID0gNDAyLAorICAgIEdDUllfTUFDX0dNQUNfVFdPRklTSCAgICAgICA9IDQwMywKKyAgICBHQ1JZX01BQ19HTUFDX1NFUlBFTlQgICAgICAgPSA0MDQsCisgICAgR0NSWV9NQUNfR01BQ19TRUVEICAgICAgICAgID0gNDA1CisgIH07CisKKy8qIEZsYWdzIHVzZWQgd2l0aCB0aGUgb3BlbiBmdW5jdGlvbi4gICovCitlbnVtIGdjcnlfbWFjX2ZsYWdzCisgIHsKKyAgICBHQ1JZX01BQ19GTEFHX1NFQ1VSRSA9IDEsICAvKiBBbGxvY2F0ZSBhbGwgYnVmZmVycyBpbiAic2VjdXJlIiBtZW1vcnkuICAqLworICB9OworCisvKiBDcmVhdGUgYSBNQUMgaGFuZGxlIGZvciBhbGdvcml0aG0gQUxHTy4gIEZMQUdTIG1heSBiZSBnaXZlbiBhcyBhbiBiaXR3aXNlIE9SCisgICBvZiB0aGUgZ2NyeV9tYWNfZmxhZ3MgdmFsdWVzLiAgQ1RYIG1heWJlIE5VTEwgb3IgZ2NyeV9jdHhfdCBvYmplY3QgdG8gYmUKKyAgIGFzc29jaWF0ZWQgd2l0aCBIQU5ETEUuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX29wZW4gKGdjcnlfbWFjX2hkX3QgKmhhbmRsZSwgaW50IGFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBnY3J5X2N0eF90IGN0eCk7CisKKy8qIENsb3NlIHRoZSBNQUMgaGFuZGxlIEggYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlLiAqLwordm9pZCBnY3J5X21hY19jbG9zZSAoZ2NyeV9tYWNfaGRfdCBoKTsKKworLyogUGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIE1BQyBvYmplY3QgSC4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY19jdGwgKGdjcnlfbWFjX2hkX3QgaCwgaW50IGNtZCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1Zmxlbik7CisKKy8qIFJldHJpZXZlIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1BQyBhbGdvcml0aG0gQUxHTy4gKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY19hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYnl0ZXMpOworCisvKiBTZXQgS0VZIG9mIGxlbmd0aCBLRVlMRU4gYnl0ZXMgZm9yIHRoZSBNQUMgaGFuZGxlIEhELiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY19zZXRrZXkgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4pOworCisvKiBTZXQgaW5pdGlhbGl6YXRpb24gdmVjdG9yIElWIG9mIGxlbmd0aCBJVkxFTiBmb3IgdGhlIE1BQyBoYW5kbGUgSEQuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfc2V0aXYgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZsZW4pOworCisvKiBQYXNzIExFTkdUSCBieXRlcyBvZiBkYXRhIGluIEJVRkZFUiB0byB0aGUgTUFDIG9iamVjdCBIRCBzbyB0aGF0CisgICBpdCBjYW4gdXBkYXRlIHRoZSBNQUMgdmFsdWVzLiAgKi8KK2djcnlfZXJyb3JfdCBnY3J5X21hY193cml0ZSAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKTsKKworLyogUmVhZCBvdXQgdGhlIGZpbmFsIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSB0aGUgTUFDIG9iamVjdCBIRCB0byBCVUZGRVIuICovCitnY3J5X2Vycm9yX3QgZ2NyeV9tYWNfcmVhZCAoZ2NyeV9tYWNfaGRfdCBoZCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmJ1Zmxlbik7CisKKy8qIFZlcmlmeSB0aGUgZmluYWwgYXV0aGVudGljYXRpb24gY29kZSBmcm9tIHRoZSBNQUMgb2JqZWN0IEhEIHdpdGggQlVGRkVSLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfbWFjX3ZlcmlmeSAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1Zmxlbik7CisKKy8qIFJldHJpZXZlIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIE1BQyB5aWVsZGVkIGJ5IGFsZ29yaXRobSBBTEdPLiAqLwordW5zaWduZWQgaW50IGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbiAoaW50IGFsZ28pOworCisvKiBSZXRyaWV2ZSB0aGUgZGVmYXVsdCBrZXkgbGVuZ3RoIGluIGJ5dGVzIHVzZWQgd2l0aCBhbGdvcml0aG0gQS4gKi8KK3Vuc2lnbmVkIGludCBnY3J5X21hY19nZXRfYWxnb19rZXlsZW4gKGludCBhbGdvKTsKKworLyogTWFwIHRoZSBNQUMgYWxnb3JpdGhtIHdob3NlIElEIGlzIGNvbnRhaW5lZCBpbiBBTEdPUklUSE0gdG8gYQorICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhbGdvcml0aG0gbmFtZS4gIEZvciB1bmtub3duIGFsZ29yaXRobQorICAgSURzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAiPyIuICAqLworY29uc3QgY2hhciAqZ2NyeV9tYWNfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBNYXAgdGhlIGFsZ29yaXRobSBuYW1lIE5BTUUgdG8gYW4gTUFDIGFsZ29yaXRobSBJRC4gIFJldHVybiAwIGlmCisgICB0aGUgYWxnb3JpdGhtIG5hbWUgaXMgbm90IGtub3duLiAqLworaW50IGdjcnlfbWFjX21hcF9uYW1lIChjb25zdCBjaGFyICpuYW1lKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBSZXNldCB0aGUgaGFuZGxlIHRvIHRoZSBzdGF0ZSBhZnRlciBvcGVuL3NldGtleS4gICovCisjZGVmaW5lIGdjcnlfbWFjX3Jlc2V0KGgpICBnY3J5X21hY19jdGwgKChoKSwgR0NSWUNUTF9SRVNFVCwgTlVMTCwgMCkKKworLyogUmV0dXJuIDAgaWYgdGhlIGFsZ29yaXRobSBBIGlzIGF2YWlsYWJsZSBmb3IgdXNlLiAqLworI2RlZmluZSBnY3J5X21hY190ZXN0X2FsZ28oYSkgXAorICAgICAgICAgICAgZ2NyeV9tYWNfYWxnb19pbmZvKCAoYSksIEdDUllDVExfVEVTVF9BTEdPLCBOVUxMLCBOVUxMICkKKworDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9ucyAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQWxnb3JpdGhtIElEcyBmb3IgdGhlIEtERnMuICAqLworZW51bSBnY3J5X2tkZl9hbGdvcworICB7CisgICAgR0NSWV9LREZfTk9ORSA9IDAsCisgICAgR0NSWV9LREZfU0lNUExFX1MySyA9IDE2LAorICAgIEdDUllfS0RGX1NBTFRFRF9TMksgPSAxNywKKyAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySyA9IDE5LAorICAgIEdDUllfS0RGX1BCS0RGMSA9IDMzLAorICAgIEdDUllfS0RGX1BCS0RGMiA9IDM0LAorICAgIEdDUllfS0RGX1NDUllQVCA9IDQ4CisgIH07CisKKy8qIERlcml2ZSBhIGtleSBmcm9tIGEgcGFzc3BocmFzZS4gICovCitncGdfZXJyb3JfdCBnY3J5X2tkZl9kZXJpdmUgKGNvbnN0IHZvaWQgKnBhc3NwaHJhc2UsIHNpemVfdCBwYXNzcGhyYXNlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxnbywgaW50IHN1YmFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlzaXplLCB2b2lkICprZXlidWZmZXIpOworCisKKworDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBSYW5kb20gR2VuZXJhdGluZyBGdW5jdGlvbnMgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIHR5cGUgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KK2VudW0gZ2NyeV9ybmdfdHlwZXMKKyAgeworICAgIEdDUllfUk5HX1RZUEVfU1RBTkRBUkQgICA9IDEsIC8qIFRoZSBkZWZhdWx0IENTUFJORyBnZW5lcmF0b3IuICAqLworICAgIEdDUllfUk5HX1RZUEVfRklQUyAgICAgICA9IDIsIC8qIFRoZSBGSVBTIFg5LjMxIEFFUyBnZW5lcmF0b3IuICAqLworICAgIEdDUllfUk5HX1RZUEVfU1lTVEVNICAgICA9IDMgIC8qIFRoZSBzeXN0ZW0ncyBuYXRpdmUgZ2VuZXJhdG9yLiAqLworICB9OworCisvKiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgcmFuZG9tIHF1YWxpdHkuICBUaGUgcnVsZSBvZiB0aHVtYiBpcworICAgdG8gdXNlIFNUUk9ORyBmb3Igc2Vzc2lvbiBrZXlzIGFuZCBWRVJZX1NUUk9ORyBmb3Iga2V5IG1hdGVyaWFsLgorICAgV0VBSyBpcyB1c3VhbGx5IGFuIGFsaWFzIGZvciBTVFJPTkcgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlCisgICAoZXhjZXB0IHdpdGggZ2NyeV9tcGlfcmFuZG9taXplKTsgdXNlIGdjcnlfY3JlYXRlX25vbmNlIGluc3RlYWQuICovCit0eXBlZGVmIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwKKyAgeworICAgIEdDUllfV0VBS19SQU5ET00gPSAwLAorICAgIEdDUllfU1RST05HX1JBTkRPTSA9IDEsCisgICAgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00gPSAyCisgIH0KK2djcnlfcmFuZG9tX2xldmVsX3Q7CisKKy8qIEZpbGwgQlVGRkVSIHdpdGggTEVOR1RIIGJ5dGVzIG9mIHJhbmRvbSwgdXNpbmcgcmFuZG9tIG51bWJlcnMgb2YKKyAgIHF1YWxpdHkgTEVWRUwuICovCit2b2lkIGdjcnlfcmFuZG9taXplICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBlbnVtIGdjcnlfcmFuZG9tX2xldmVsIGxldmVsKTsKKworLyogQWRkIHRoZSBleHRlcm5hbCByYW5kb20gZnJvbSBCVUZGRVIgd2l0aCBMRU5HVEggYnl0ZXMgaW50byB0aGUKKyAgIHBvb2wuIFFVQUxJVFkgc2hvdWxkIGVpdGhlciBiZSAtMSBmb3IgdW5rbm93biBvciBpbiB0aGUgcmFuZ2Ugb2YgMAorICAgdG8gMTAwICovCitnY3J5X2Vycm9yX3QgZ2NyeV9yYW5kb21fYWRkX2J5dGVzIChjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcXVhbGl0eSk7CisKKy8qIElmIHJhbmRvbSBudW1iZXJzIGFyZSB1c2VkIGluIGFuIGFwcGxpY2F0aW9uLCB0aGlzIG1hY3JvIHNob3VsZCBiZQorICAgY2FsbGVkIGZyb20gdGltZSB0byB0aW1lIHNvIHRoYXQgbmV3IHN0dWZmIGdldHMgYWRkZWQgdG8gdGhlCisgICBpbnRlcm5hbCBwb29sIG9mIHRoZSBSTkcuICAqLworI2RlZmluZSBnY3J5X2Zhc3RfcmFuZG9tX3BvbGwoKSAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0ZBU1RfUE9MTCwgTlVMTCkKKworCisvKiBSZXR1cm4gTkJZVEVTIG9mIGFsbG9jYXRlZCByYW5kb20gdXNpbmcgYSByYW5kb20gbnVtYmVycyBvZiBxdWFsaXR5CisgICBMRVZFTC4gKi8KK3ZvaWQgKmdjcnlfcmFuZG9tX2J5dGVzIChzaXplX3QgbmJ5dGVzLCBlbnVtIGdjcnlfcmFuZG9tX2xldmVsIGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKKworLyogUmV0dXJuIE5CWVRFUyBvZiBhbGxvY2F0ZWQgcmFuZG9tIHVzaW5nIGEgcmFuZG9tIG51bWJlcnMgb2YgcXVhbGl0eQorICAgTEVWRUwuICBUaGUgcmFuZG9tIG51bWJlcnMgYXJlIGNyZWF0ZWQgcmV0dXJuZWQgaW4gInNlY3VyZSIKKyAgIG1lbW9yeS4gKi8KK3ZvaWQgKmdjcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoc2l6ZV90IG5ieXRlcywgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dDUllfR0NDX0FUVFJfTUFMTE9DOworCisKKy8qIFNldCB0aGUgYmlnIGludGVnZXIgVyB0byBhIHJhbmRvbSB2YWx1ZSBvZiBOQklUUyB1c2luZyBhIHJhbmRvbQorICAgZ2VuZXJhdG9yIHdpdGggcXVhbGl0eSBMRVZFTC4gIE5vdGUgdGhhdCBieSB1c2luZyBhIGxldmVsIG9mCisgICBHQ1JZX1dFQUtfUkFORE9NIGdjcnlfY3JlYXRlX25vbmNlIGlzIHVzZWQgaW50ZXJuYWxseS4gKi8KK3ZvaWQgZ2NyeV9tcGlfcmFuZG9taXplIChnY3J5X21waV90IHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzLCBlbnVtIGdjcnlfcmFuZG9tX2xldmVsIGxldmVsKTsKKworCisvKiBDcmVhdGUgYW4gdW5wcmVkaWNhYmxlIG5vbmNlIG9mIExFTkdUSCBieXRlcyBpbiBCVUZGRVIuICovCit2b2lkIGdjcnlfY3JlYXRlX25vbmNlICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworCisKKworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUHJpbWUgTnVtYmVyIEZ1bmN0aW9ucyAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNb2RlIHZhbHVlcyBwYXNzZWQgdG8gYSBnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdC4gKi8KKyNkZWZpbmUgR0NSWV9QUklNRV9DSEVDS19BVF9GSU5JU0ggICAgICAwCisjZGVmaW5lIEdDUllfUFJJTUVfQ0hFQ0tfQVRfR09UX1BSSU1FICAgMQorI2RlZmluZSBHQ1JZX1BSSU1FX0NIRUNLX0FUX01BWUJFX1BSSU1FIDIKKworLyogVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMSBpZiB0aGUgb3BlcmF0aW9uIHNoYWxsIGNvbnRpbnVlLCAwIHRvCisgICByZWplY3QgdGhlIHByaW1lIGNhbmRpZGF0ZS4gKi8KK3R5cGVkZWYgaW50ICgqZ2NyeV9wcmltZV9jaGVja19mdW5jX3QpICh2b2lkICphcmcsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgY2FuZGlkYXRlKTsKKworLyogRmxhZ3MgZm9yIGdjcnlfcHJpbWVfZ2VuZXJhdGUoKTogICovCisKKy8qIEFsbG9jYXRlIHByaW1lIG51bWJlcnMgYW5kIGZhY3RvcnMgaW4gc2VjdXJlIG1lbW9yeS4gICovCisjZGVmaW5lIEdDUllfUFJJTUVfRkxBR19TRUNSRVQgICAgICAgICAoMSA8PCAwKQorCisvKiBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgcHJpbWUgZmFjdG9yIGlzIG9mIHNpemUKKyAgIGBGQUNUT1JfQklUUycuICAqLworI2RlZmluZSBHQ1JZX1BSSU1FX0ZMQUdfU1BFQ0lBTF9GQUNUT1IgKDEgPDwgMSkKKworLyogR2VuZXJhdGUgYSBuZXcgcHJpbWUgbnVtYmVyIG9mIFBSSU1FX0JJVFMgYml0cyBhbmQgc3RvcmUgaXQgaW4KKyAgIFBSSU1FLiAgSWYgRkFDVE9SX0JJVFMgaXMgbm9uLXplcm8sIG9uZSBvZiB0aGUgcHJpbWUgZmFjdG9ycyBvZgorICAgKHByaW1lIC0gMSkgLyAyIG11c3QgYmUgRkFDVE9SX0JJVFMgYml0cyBsb25nLiAgSWYgRkFDVE9SUyBpcworICAgbm9uLXplcm8sIGFsbG9jYXRlIGEgbmV3LCBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgaG9sZGluZyB0aGUgcHJpbWUKKyAgIGZhY3RvcnMgYW5kIHN0b3JlIGl0IGluIEZBQ1RPUlMuICBGTEFHUyBtaWdodCBiZSB1c2VkIHRvIGluZmx1ZW5jZQorICAgdGhlIHByaW1lIG51bWJlciBnZW5lcmF0aW9uIHByb2Nlc3MuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfcHJpbWVfZ2VuZXJhdGUgKGdjcnlfbXBpX3QgKnByaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmltZV9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmYWN0b3JfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICoqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3ByaW1lX2NoZWNrX2Z1bmNfdCBjYl9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNiX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKiBGaW5kIGEgZ2VuZXJhdG9yIGZvciBQUklNRSB3aGVyZSB0aGUgZmFjdG9yaXphdGlvbiBvZiAocHJpbWUtMSkgaXMKKyAgIGluIHRoZSBOVUxMIHRlcm1pbmF0ZWQgYXJyYXkgRkFDVE9SUy4gUmV0dXJuIHRoZSBnZW5lcmF0b3IgYXMgYQorICAgbmV3bHkgYWxsb2NhdGVkIE1QSSBpbiBSX0cuICBJZiBTVEFSVF9HIGlzIG5vdCBOVUxMLCB1c2UgdGhpcyBhcworICAgdGVoIHN0YXJ0IGZvciB0aGUgc2VhcmNoLiAqLworZ2NyeV9lcnJvcl90IGdjcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yIChnY3J5X21waV90ICpyX2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgcHJpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgKmZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgc3RhcnRfZyk7CisKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgRkFDVE9SUyBhcnJheS4gKi8KK3ZvaWQgZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMgKGdjcnlfbXBpX3QgKmZhY3RvcnMpOworCisKKy8qIENoZWNrIHdldGhlciB0aGUgbnVtYmVyIFggaXMgcHJpbWUuICAqLworZ2NyeV9lcnJvcl90IGdjcnlfcHJpbWVfY2hlY2sgKGdjcnlfbXBpX3QgeCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgTWlzY2VsbGFuZW91cyBTdHVmZiAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZWxlYXNlIHRoZSBjb250ZXh0IG9iamVjdCBDVFguICAqLwordm9pZCBnY3J5X2N0eF9yZWxlYXNlIChnY3J5X2N0eF90IGN0eCk7CisKKy8qIExvZyBkYXRhIHVzaW5nIExpYmdjcnlwdCdzIG93biBsb2cgaW50ZXJmYWNlLiAgKi8KK3ZvaWQgZ2NyeV9sb2dfZGVidWcgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfR0NSWV9HQ0NfQVRUUl9QUklOVEYoMSwyKTsKK3ZvaWQgZ2NyeV9sb2dfZGVidWdoZXggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIGdjcnlfbG9nX2RlYnVnbXBpIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X21waV90IG1waSk7Cit2b2lkIGdjcnlfbG9nX2RlYnVncG50IChjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwgZ2NyeV9jdHhfdCBjdHgpOwordm9pZCBnY3J5X2xvZ19kZWJ1Z3N4cCAoY29uc3QgY2hhciAqdGV4dCwgZ2NyeV9zZXhwX3Qgc2V4cCk7CisKKworLyogTG9nIGxldmVscyB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBsb2dnaW5nIGZhY2lsaXR5LiAqLworZW51bSBnY3J5X2xvZ19sZXZlbHMKKyAgeworICAgIEdDUllfTE9HX0NPTlQgICA9IDAsICAgIC8qIChDb250aW51ZSB0aGUgbGFzdCBsb2cgbGluZS4pICovCisgICAgR0NSWV9MT0dfSU5GTyAgID0gMTAsCisgICAgR0NSWV9MT0dfV0FSTiAgID0gMjAsCisgICAgR0NSWV9MT0dfRVJST1IgID0gMzAsCisgICAgR0NSWV9MT0dfRkFUQUwgID0gNDAsCisgICAgR0NSWV9MT0dfQlVHICAgID0gNTAsCisgICAgR0NSWV9MT0dfREVCVUcgID0gMTAwCisgIH07CisKKy8qIFR5cGUgZm9yIHByb2dyZXNzIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmdjcnlfaGFuZGxlcl9wcm9ncmVzc190KSAodm9pZCAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQpOworCisvKiBUeXBlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBoYW5kbGVycy4gICovCit0eXBlZGVmIHZvaWQgKigqZ2NyeV9oYW5kbGVyX2FsbG9jX3QpIChzaXplX3Qgbik7CisKKy8qIFR5cGUgZm9yIHNlY3VyZSBtZW1vcnkgY2hlY2sgaGFuZGxlcnMuICAqLwordHlwZWRlZiBpbnQgKCpnY3J5X2hhbmRsZXJfc2VjdXJlX2NoZWNrX3QpIChjb25zdCB2b2lkICopOworCisvKiBUeXBlIGZvciBtZW1vcnkgcmVhbGxvY2F0aW9uIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAqKCpnY3J5X2hhbmRsZXJfcmVhbGxvY190KSAodm9pZCAqcCwgc2l6ZV90IG4pOworCisvKiBUeXBlIGZvciBtZW1vcnkgZnJlZSBoYW5kbGVycy4gICovCit0eXBlZGVmIHZvaWQgKCpnY3J5X2hhbmRsZXJfZnJlZV90KSAodm9pZCAqKTsKKworLyogVHlwZSBmb3Igb3V0LW9mLW1lbW9yeSBoYW5kbGVycy4gICovCit0eXBlZGVmIGludCAoKmdjcnlfaGFuZGxlcl9ub19tZW1fdCkgKHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCisvKiBUeXBlIGZvciBmYXRhbCBlcnJvciBoYW5kbGVycy4gICovCit0eXBlZGVmIHZvaWQgKCpnY3J5X2hhbmRsZXJfZXJyb3JfdCkgKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICopOworCisvKiBUeXBlIGZvciBsb2dnaW5nIGhhbmRsZXJzLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmdjcnlfaGFuZGxlcl9sb2dfdCkgKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworCisvKiBDZXJ0YWluIG9wZXJhdGlvbnMgY2FuIHByb3ZpZGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24uICBUaGlzIGZ1bmN0aW9uCisgICBpcyB1c2VkIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBmb3IgcmV0cmlldmluZyB0aGVzZSBpbmZvcm1hdGlvbi4gKi8KK3ZvaWQgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX3Byb2dyZXNzX3QgY2IsIHZvaWQgKmNiX2RhdGEpOworCisKKy8qIFJlZ2lzdGVyIGEgY3VzdG9tIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gKi8KK3ZvaWQgZ2NyeV9zZXRfYWxsb2NhdGlvbl9oYW5kbGVyICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2FsbG9jX3QgZnVuY19hbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2FsbG9jX3QgZnVuY19hbGxvY19zZWN1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfaGFuZGxlcl9zZWN1cmVfY2hlY2tfdCBmdW5jX3NlY3VyZV9jaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCBmdW5jX3JlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfaGFuZGxlcl9mcmVlX3QgZnVuY19mcmVlKTsKKworLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB1c2VkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIG91dCBvZiBtZW1vcnkKKyAgIGhhbmRsZXIuICovCit2b2lkIGdjcnlfc2V0X291dG9mY29yZV9oYW5kbGVyIChnY3J5X2hhbmRsZXJfbm9fbWVtX3QgaCwgdm9pZCAqb3BhcXVlKTsKKworLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB1c2VkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIGZhdGFsIGVycm9yCisgICBoYW5kbGVyLiAqLwordm9pZCBnY3J5X3NldF9mYXRhbGVycm9yX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9lcnJvcl90IGZuYywgdm9pZCAqb3BhcXVlKTsKKworLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB1c2VkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIGxvZ2dpbmcKKyAgIGZhY2lsaXR5LiAqLwordm9pZCBnY3J5X3NldF9sb2dfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX2xvZ190IGYsIHZvaWQgKm9wYXF1ZSk7CisKKy8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAqLwordm9pZCBnY3J5X3NldF9nZXR0ZXh0X2hhbmRsZXIgKGNvbnN0IGNoYXIgKigqZikoY29uc3QgY2hhciopKTsKKworLyogTGliZ2NyeXB0IHVzZXMgaXRzIG93biBtZW1vcnkgYWxsb2NhdGlvbi4gIEl0IGlzIGltcG9ydGFudCB0byB1c2UKKyAgIGdjcnlfZnJlZSAoKSB0byByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgbGliZ2NyeXB0LiAqLwordm9pZCAqZ2NyeV9tYWxsb2MgKHNpemVfdCBuKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X2NhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBtKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X21hbGxvY19zZWN1cmUgKHNpemVfdCBuKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X2NhbGxvY19zZWN1cmUgKHNpemVfdCBuLCBzaXplX3QgbSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqZ2NyeV9yZWFsbG9jICh2b2lkICphLCBzaXplX3Qgbik7CitjaGFyICpnY3J5X3N0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X3htYWxsb2MgKHNpemVfdCBuKSBfR0NSWV9HQ0NfQVRUUl9NQUxMT0M7Cit2b2lkICpnY3J5X3hjYWxsb2MgKHNpemVfdCBuLCBzaXplX3QgbSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqZ2NyeV94bWFsbG9jX3NlY3VyZSAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKmdjcnlfeGNhbGxvY19zZWN1cmUgKHNpemVfdCBuLCBzaXplX3QgbSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqZ2NyeV94cmVhbGxvYyAodm9pZCAqYSwgc2l6ZV90IG4pOworY2hhciAqZ2NyeV94c3RyZHVwIChjb25zdCBjaGFyICogYSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAgZ2NyeV9mcmVlICh2b2lkICphKTsKKworLyogUmV0dXJuIHRydWUgaWYgQSBpcyBhbGxvY2F0ZWQgaW4gInNlY3VyZSIgbWVtb3J5LiAqLworaW50IGdjcnlfaXNfc2VjdXJlIChjb25zdCB2b2lkICphKSBfR0NSWV9HQ0NfQVRUUl9QVVJFOworCisvKiBSZXR1cm4gdHJ1ZSBpZiBMaWJnY3J5cHQgaXMgaW4gRklQUyBtb2RlLiAgKi8KKyNkZWZpbmUgZ2NyeV9maXBzX21vZGVfYWN0aXZlKCkgICEhZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0ZJUFNfTU9ERV9QLCAwKQorCisKKyNpZiAwIC8qIChLZWVwIEVtYWNzZW5zJyBhdXRvLWluZGVudCBoYXBweS4pICovCit7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX0dDUllQVF9IICovCisvKgorQGVtYWNzX2xvY2FsX3ZhcnNfYmVnaW5ACitAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitAZW1hY3NfbG9jYWxfdmFyc19lbmRACisqLwpkaWZmIC0tZ2l0IGEvc3JjL2djcnlwdHJuZC5jIGIvc3JjL2djcnlwdHJuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMzkzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ2NyeXB0cm5kLmMKQEAgLTAsMCArMSw2ODAgQEAKKy8qIGdjcnlwdHJuZC5jIC0gTGliZ2NyeXB0IFJhbmRvbSBOdW1iZXIgRGFlbW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogR2NyeXB0ZW5kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLAorICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBHY3J5cHRybmQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIFdlIHJlcXVpcmUgdnN5c2xvZyBwdGgKKyAgIFdlIG5lZWQgdG8gdGVzdCBmb3I6ICBzZXRybGltaXQKKworICAgV2Ugc2hvdWxkIGFsc28gcHJpb3JpdGl6ZSByZXF1ZXN0cy4gIFRoaXMgaXMgYmVzdCBkb25lIGJ5IHB1dHRpbmcKKyAgIHRoZSByZXF1ZXN0cyBpbnRvIHF1ZXVlcyBhbmQgaGF2ZSBhIG1haW4gdGhyZWFkIHByb2Nlc3NpbmcgdGhlc2UKKyAgIHF1ZXVlcy4KKworICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aC5oPgorI2luY2x1ZGUgPGdjcnlwdC5oPgorCisjZGVmaW5lIFBHTSAiZ2NyeXB0cm5kIgorI2RlZmluZSBNWVZFUlNJT05fTElORSBQR00gIiAoTGliZ2NyeXB0KSAiIFZFUlNJT04KKyNkZWZpbmUgQlVHUkVQT1JUX0xJTkUgIlxuUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJnY3J5cHRAZ251cGcub3JnPi5cbiIKKworLyogUHRoIHdyYXBwZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICovCitHQ1JZX1RIUkVBRF9PUFRJT05fUFRIX0lNUEw7CisKKworLyogRmxhZyBzZXQgdG8gdHJ1ZSBpZiB3ZSBoYXZlIGJlZW4gZGFlbW9uaXplZC4gKi8KK3N0YXRpYyBpbnQgcnVubmluZ19kZXRhY2hlZDsKKy8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IGEgc2h1dGRvd24gaGFzIGJlZW4gcmVxdWVzdGVkLiAgKi8KK3N0YXRpYyBpbnQgc2h1dGRvd25fcGVuZGluZzsKKy8qIENvdW50ZXIgZm9yIGFjdGl2ZSBjb25uZWN0aW9ucy4gICovCitzdGF0aWMgaW50IGFjdGl2ZV9jb25uZWN0aW9uczsKKworCisKKy8qIExvY2FsIHByb3RvdHlwZXMuICAqLworc3RhdGljIHZvaWQgc2VydmUgKGludCBsaXN0ZW5fZmQpOworCisKKworDAorCisvKiBUbyBhdm9pZCB0aGF0IGEgY29tcGlsZXIgb3B0aW1pemVzIGNlcnRhaW4gbWVtc2V0IGNhbGxzIGF3YXksIHRoZXNlCisgICBtYWNyb3MgbWF5IGJlIHVzZWQgaW5zdGVhZC4gKi8KKyNkZWZpbmUgd2lwZW1lbW9yeTIoX3B0cixfc2V0LF9sZW4pIGRvIHsgXAorICAgICAgICAgICAgICB2b2xhdGlsZSBjaGFyICpfdnB0cj0odm9sYXRpbGUgY2hhciAqKShfcHRyKTsgXAorICAgICAgICAgICAgICBzaXplX3QgX3ZsZW49KF9sZW4pOyBcCisgICAgICAgICAgICAgIHdoaWxlKF92bGVuKSB7ICpfdnB0cj0oX3NldCk7IF92cHRyKys7IF92bGVuLS07IH0gXAorICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2RlZmluZSB3aXBlbWVtb3J5KF9wdHIsX2xlbikgd2lwZW1lbW9yeTIoX3B0ciwwLF9sZW4pCisKKworCisKKy8qIEVycm9yIHByaW50aW5nIHV0aWxpdHkuICBQUklPUklUWSBzaG91bGQgYmUgb25lIG9mIHN5c2xvZydzCisgICBwcmlvcml0eSBsZXZlbHMuICBUaGlzIGZ1bmN0aW9ucyBwcmludHMgdG8gdGhlIHN0ZGVyciBvciBzeXNsb2cKKyAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSBhbHJlYWR5IGRhZW1vbml6ZWQuICovCitzdGF0aWMgdm9pZAorbG9naXQgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KSA7CisgIGlmIChydW5uaW5nX2RldGFjaGVkKQorICAgIHsKKyAgICAgIHZzeXNsb2cgKHByaW9yaXR5LCBmb3JtYXQsIGFyZ19wdHIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZwdXRzIChQR00gIjogIiwgc3RkZXJyKTsKKyAgICAgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgICAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICAgIH0KKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworLyogQ2FsbGJhY2sgdXNlZCBieSBsaWJnY3J5cHQgZm9yIGxvZ2dpbmcuICovCitzdGF0aWMgdm9pZAorbXlfZ2NyeV9sb2dnZXIgKHZvaWQgKmR1bW15LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdfcHRyKQoreworICAodm9pZClkdW1teTsKKworICAvKiBNYXAgdGhlIGxvZyBsZXZlbHMuICovCisgIHN3aXRjaCAobGV2ZWwpCisgICAgeworICAgIGNhc2UgR0NSWV9MT0dfQ09OVDogbGV2ZWwgPSBMT0dfSU5GTyAvKiBGSVhNRSAqLzsgYnJlYWs7CisgICAgY2FzZSBHQ1JZX0xPR19JTkZPOiBsZXZlbCA9IExPR19JTkZPOyBicmVhazsKKyAgICBjYXNlIEdDUllfTE9HX1dBUk46IGxldmVsID0gTE9HX1dBUk5JTkc7IGJyZWFrOworICAgIGNhc2UgR0NSWV9MT0dfRVJST1I6bGV2ZWwgPSBMT0dfRVJSOyBicmVhazsKKyAgICBjYXNlIEdDUllfTE9HX0ZBVEFMOmxldmVsID0gTE9HX0NSSVQ7IGJyZWFrOworICAgIGNhc2UgR0NSWV9MT0dfQlVHOiAgbGV2ZWwgPSBMT0dfQ1JJVDsgYnJlYWs7CisgICAgY2FzZSBHQ1JZX0xPR19ERUJVRzpsZXZlbCA9IExPR19ERUJVRzsgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICBsZXZlbCA9IExPR19FUlI7IGJyZWFrOworICAgIH0KKyAgaWYgKHJ1bm5pbmdfZGV0YWNoZWQpCisgICAgeworICAgICAgdnN5c2xvZyAobGV2ZWwsIGZvcm1hdCwgYXJnX3B0cik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnB1dHMgKFBHTSAiOiAiLCBzdGRlcnIpOworICAgICAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgICAgIGlmICghKmZvcm1hdCB8fCBmb3JtYXRbc3RybGVuIChmb3JtYXQpLTFdICE9ICdcbicpCisgICAgICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgICAgfQorfQorCisKKy8qIFRoZSBjbGVhbnVwIGhhbmRsZXIgLSB1c2VkIHRvIHdpcGUgb3V0IHRoZSBzZWN1cmUgbWVtb3J5LiAqLworc3RhdGljIHZvaWQKK2NsZWFudXAgKHZvaWQpCit7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9URVJNX1NFQ01FTSApOworfQorCisKKy8qIE1ha2UgdXMgYSBkYWVtb24gYW5kIG9wZW4gdGhlIHN5c2xvZy4gKi8KK3N0YXRpYyB2b2lkCitkYWVtb25pemUgKHZvaWQpCit7CisgIGludCBpOworICBwaWRfdCBwaWQ7CisKKyAgZmZsdXNoIChOVUxMKTsKKworICBwaWQgPSBmb3JrICgpOworICBpZiAocGlkID09IChwaWRfdCktMSkKKyAgICB7CisgICAgICBsb2dpdCAoTE9HX0NSSVQsICJmb3JrIGZhaWxlZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgaWYgKHBpZCkKKyAgICBleGl0ICgwKTsKKworICBpZiAoc2V0c2lkKCkgPT0gLTEpCisgICAgeworICAgICAgbG9naXQgKExPR19DUklULCAic2V0c2lkKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgc2lnbmFsIChTSUdIVVAsIFNJR19JR04pOworCisgIHBpZCA9IGZvcmsgKCk7CisgIGlmIChwaWQgPT0gKHBpZF90KS0xKQorICAgIHsKKyAgICAgIGxvZ2l0IChMT0dfQ1JJVCwgUEdNICI6IHNlY29uZCBmb3JrIGZhaWxlZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgaWYgKHBpZCkKKyAgICBleGl0ICgwKTsgLyogRmlyc3QgY2hpbGQgZXhpdHMuICovCisKKyAgcnVubmluZ19kZXRhY2hlZCA9IDE7CisKKyAgaWYgKGNoZGlyKCIvIikpCisgICAgeworICAgICAgbG9naXQgKExPR19DUklULCAiY2hkaXIoXCIvXCIpIGZhaWxlZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgdW1hc2sgKDApOworCisgIGZvciAoaT0wOyBpIDw9IDI7IGkrKykKKyAgICBjbG9zZSAoaSk7CisKKyAgb3BlbmxvZyAoUEdNLCBMT0dfUElELCBMT0dfREFFTU9OKTsKK30KKworCitzdGF0aWMgdm9pZAorZGlzYWJsZV9jb3JlX2R1bXBzICh2b2lkKQoreworI2lmZGVmIEhBVkVfU0VUUkxJTUlUCisgIHN0cnVjdCBybGltaXQgbGltaXQ7CisKKyAgaWYgKGdldHJsaW1pdCAoUkxJTUlUX0NPUkUsICZsaW1pdCkpCisgICAgbGltaXQucmxpbV9tYXggPSAwOworICBsaW1pdC5ybGltX2N1ciA9IDA7CisgIGlmKCAhc2V0cmxpbWl0IChSTElNSVRfQ09SRSwgJmxpbWl0KSApCisgICAgcmV0dXJuIDA7CisgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PU1lTKQorICAgIGxvZ2l0IChMT0dfRVJSLCAiY2FuJ3QgZGlzYWJsZSBjb3JlIGR1bXBzOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisjZW5kaWYgLyogSEFWRV9TRVRSTElNSVQgKi8KK30KKworCisKK3N0YXRpYyB2b2lkCitwcmludF92ZXJzaW9uIChpbnQgd2l0aF9oZWxwKQoreworICBmcHV0cyAoTVlWRVJTSU9OX0xJTkUgIlxuIgorICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyAgICAgICAgICJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgIgorICAgICAgICAgIjxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAuaHRtbD5cbiIKKyAgICAgICAgICJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyAgICAgICAgICJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIiwKKyAgICAgICAgIHN0ZG91dCk7CisKKyAgaWYgKHdpdGhfaGVscCkKKyAgICBmcHV0cyAoIlxuIgorICAgICAgICAgICAiVXNhZ2U6ICIgUEdNICIgW09QVElPTlNdIFtTT0NLRVROQU1FXVxuIgorICAgICAgICAgICAiU3RhcnQgTGliZ2NyeXB0J3MgcmFuZG9tIG51bWJlciBkYWVtb24gbGlzdGVuaW5nIgorICAgICAgICAgICAiIG9uIHNvY2tldCBTT0NLRVROQU1FXG4iCisgICAgICAgICAgICJTT0NLRVROQU1FIGRlZmF1bHRzIHRvIFhYWFxuIgorICAgICAgICAgICAiXG4iCisgICAgICAgICAgICIgIC0tbm8tZGV0YWNoICAgZG8gbm90IGRlYXRhY2ggZnJvbSB0aGUgY29uc29sZVxuIgorICAgICAgICAgICAiICAtLXZlcnNpb24gICAgIHByaW50IHZlcnNpb24gb2YgdGhlIHByb2dyYW0gYW5kIGV4aXRcbiIKKyAgICAgICAgICAgIiAgLS1oZWxwICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorICAgICAgICAgICBCVUdSRVBPUlRfTElORSwgc3Rkb3V0ICk7CisKKyAgZXhpdCAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X3VzYWdlICh2b2lkKQoreworICBmcHV0cyAoInVzYWdlOiAiIFBHTSAiIFtPUFRJT05TXSBbU09DS0VUTkFNRV1cbiIsIHN0ZGVycik7CisgIGZwdXRzICgiICAgICAgICh1c2UgLS1oZWxwIHRvIGRpc3BsYXkgb3B0aW9ucylcbiIsIHN0ZGVycik7CisgIGV4aXQgKDEpOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbm9fZGV0YWNoID0gMDsKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnNydnJfYWRkcjsKKyAgc29ja2xlbl90IGFkZHJsZW47CisgIGludCBmZDsKKyAgaW50IHJjOworICBjb25zdCBjaGFyICpzb2NrZXRuYW1lID0gIi92YXIvcnVuL2xpYmdjcnlwdC9TLmdjcnlwdHJuZCI7CisKKworICBpZiAoYXJnYykKKyAgICB7CisgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICB9CisgIHdoaWxlIChhcmdjICYmICoqYXJndiA9PSAnLScgJiYgKCphcmd2KVsxXSA9PSAnLScpCisgICAgeworICAgICAgaWYgKCEoKmFyZ3YpWzJdKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJzaW9uIikpCisgICAgICAgIHByaW50X3ZlcnNpb24gKDApOworICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgcHJpbnRfdmVyc2lvbiAoMSk7CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tbm8tZGV0YWNoIikpCisgICAgICAgIHsKKyAgICAgICAgICBub19kZXRhY2ggPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHByaW50X3VzYWdlICgpOworICAgIH0KKworICBpZiAoYXJnYyA9PSAxKQorICAgIHNvY2tldG5hbWUgPSBhcmd2WzBdOworICBlbHNlIGlmIChhcmdjID4gMSkKKyAgICBwcmludF91c2FnZSAoKTsKKworICBpZiAoIW5vX2RldGFjaCkKKyAgICBkYWVtb25pemUgKCk7CisKKyAgc2lnbmFsIChTSUdQSVBFLCBTSUdfSUdOKTsKKworICBsb2dpdCAoTE9HX05PVElDRSwgInN0YXJ0ZWQgdmVyc2lvbiAiIFZFUlNJT04gKTsKKworICAvKiBMaWJnY3J5cHQgcmVxdWlyZXMgdXMgdG8gcmVnaXN0ZXIgdGhlIHRocmVhZGluZyBtb2RlbCBiZWZvcmUgd2UKKyAgICAgZG8gYW55dGhpbmcgZWxzZSB3aXRoIGl0LiBOb3RlIHRoYXQgdGhpcyBhbHNvIGNhbGxzIHB0aF9pbml0LiAgV2UKKyAgICAgZG8gdGhlIGluaXRpYWxpemF0aW9uIHdoaWxlIGFscmVhZHkgcnVubmluZyBhcyBhIGRhZW1vbiB0byBhdm9pZAorICAgICBvdmVyaGVhZCB3aXRoIGRvdWJsZSBpbml0aWFsaXphdGlvbiBvZiBMaWJnY3J5cHQuICovCisgIGVyciA9IGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfVEhSRUFEX0NCUywgJmdjcnlfdGhyZWFkc19wdGgpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGxvZ2l0IChMT0dfQ1JJVCwgImNhbid0IHJlZ2lzdGVyIEdOVSBQdGggd2l0aCBMaWJnY3J5cHQ6ICVzIiwKKyAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8qIENoZWNrIHRoYXQgdGhlIGxpYmdjcnlwdCB2ZXJzaW9uIGlzIHN1ZmZpY2llbnQuICAqLworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoVkVSU0lPTikgKQorICAgIHsKKyAgICAgIGxvZ2l0IChMT0dfQ1JJVCwgImxpYmdjcnlwdCBpcyB0b28gb2xkIChuZWVkICVzLCBoYXZlICVzKSIsCisgICAgICAgICAgICAgVkVSU0lPTiwgZ2NyeV9jaGVja192ZXJzaW9uIChOVUxMKSApOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8qIFJlZ2lzdGVyIHRoZSBsb2dnaW5nIGNhbGxiYWNrIGFuZCB0ZWxsIExpYmNncnlwdCB0byBwdXQgdGhlCisgICAgIHJhbmRvbSBwb29sIGludG8gc2VjdXJlIG1lbW9yeS4gKi8KKyAgZ2NyeV9zZXRfbG9nX2hhbmRsZXIgKG15X2djcnlfbG9nZ2VyLCBOVUxMKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1VTRV9TRUNVUkVfUk5EUE9PTCk7CisKKyAgLyogT2J2aW91c2x5IHdlIGRvbid0IHdhbnQgdG8gYWxsb3cgYW55IGNvcmUgZHVtcHMuICovCisgIGRpc2FibGVfY29yZV9kdW1wcyAoKTsKKworICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgbWVtb3J5IHN0dWZmIHdoaWNoIHdpbGwgYWxzbyBkcm9wIGFueSBleHRyYQorICAgICBwcml2aWxlZ2VzIHdlIGhhdmUuICovCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUX1NFQ01FTSwgMTYzODQsIDApOworCisgIC8qIFJlZ2lzdGVyIGEgY2xlYW51cCBoYW5kbGVyLiAqLworICBhdGV4aXQgKGNsZWFudXApOworCisgIC8qIENyZWF0ZSBhbmQgbGlzdGVuIG9uIHRoZSBzb2NrZXQuICovCisgIGZkID0gc29ja2V0IChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CisgIGlmIChmZCA9PSAtMSkKKyAgICB7CisgICAgICBsb2dpdCAoTE9HX0NSSVQsICJjYW4ndCBjcmVhdGUgc29ja2V0OiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBzcnZyX2FkZHIgPSBnY3J5X3htYWxsb2MgKHNpemVvZiAqc3J2cl9hZGRyKTsKKyAgbWVtc2V0IChzcnZyX2FkZHIsIDAsIHNpemVvZiAqc3J2cl9hZGRyKTsKKyAgc3J2cl9hZGRyLT5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgaWYgKHN0cmxlbiAoc29ja2V0bmFtZSkgKyAxID49IHNpemVvZiAoc3J2cl9hZGRyLT5zdW5fcGF0aCkpCisgICAgeworICAgICAgbG9naXQgKExPR19DUklULCAic29ja2V0IG5hbWUgYCVzJyB0b28gbG9uZyIsIHNvY2tldG5hbWUpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBzdHJjcHkgKHNydnJfYWRkci0+c3VuX3BhdGgsIHNvY2tldG5hbWUpOworICBhZGRybGVuID0gKG9mZnNldG9mIChzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKQorICAgICAgICAgICAgICsgc3RybGVuIChzcnZyX2FkZHItPnN1bl9wYXRoKSArIDEpOworICByYyA9IGJpbmQgKGZkLCAoc3RydWN0IHNvY2thZGRyKikgc3J2cl9hZGRyLCBhZGRybGVuKTsKKyAgaWYgKHJjID09IC0xICYmIGVycm5vID09IEVBRERSSU5VU0UpCisgICAgeworICAgICAgcmVtb3ZlIChzb2NrZXRuYW1lKTsKKyAgICAgIHJjID0gYmluZCAoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSBzcnZyX2FkZHIsIGFkZHJsZW4pOworICAgIH0KKyAgaWYgKHJjID09IC0xKQorICAgIHsKKyAgICAgIGxvZ2l0IChMT0dfQ1JJVCwgImVycm9yIGJpbmRpbmcgc29ja2V0IHRvIGAlcyc6ICVzIiwKKyAgICAgICAgICAgICBzcnZyX2FkZHItPnN1bl9wYXRoLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGNsb3NlIChmZCk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgaWYgKGxpc3RlbiAoZmQsIDUgKSA9PSAtMSkKKyAgICB7CisgICAgICBsb2dpdCAoTE9HX0NSSVQsICJsaXN0ZW4oKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBjbG9zZSAoZmQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGxvZ2l0IChMT0dfSU5GTywgImxpc3RlbmluZyBvbiBzb2NrZXQgYCVzJywgZmQ9JWQiLAorICAgICAgICAgc3J2cl9hZGRyLT5zdW5fcGF0aCwgZmQpOworCisgIHNlcnZlIChmZCk7CisgIGNsb3NlIChmZCk7CisKKyAgbG9naXQgKExPR19OT1RJQ0UsICJzdG9wcGVkIHZlcnNpb24gIiBWRVJTSU9OICk7CisgIHJldHVybiAwOworfQorCisKKy8qIFNlbmQgTEVOR1RIIGJ5dGVzIG9mIEJVRkZFUiB0byBmaWxlIGRlc2NyaXB0b3IgRkQuICBSZXR1cm5zIDAgb24KKyAgIHN1Y2Nlc3Mgb3IgYW5vdGhlciB2YWx1ZSBvbiB3cml0ZSBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3dyaXRlbiAoaW50IGZkLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIHdoaWxlIChsZW5ndGgpCisgICAgeworICAgICAgc3NpemVfdCBuID0gcHRoX3dyaXRlIChmZCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgeworICAgICAgICAgICBsb2dpdCAoTE9HX0VSUiwgImNvbm5lY3Rpb24gJWQ6IHdyaXRlIGVycm9yOiAlcyIsCisgICAgICAgICAgICAgICAgICBmZCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgIHJldHVybiAtMTsgLyogd3JpdGUgZXJyb3IgKi8KKyAgICAgICAgIH0KKyAgICAgIGxlbmd0aCAtPSBuOworICAgICAgYnVmZmVyID0gKGNvbnN0IGNoYXIqKWJ1ZmZlciArIG47CisgICAgfQorICByZXR1cm4gMDsgIC8qIE9rYXkgKi8KK30KKworCisvKiBTZW5kIGFuIGVycm9yIHJlc3BvbnNlIGJhY2suICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3NlbmRfZXJyb3IgKGludCBmZCwgaW50IGVycmNvZGUpCit7CisgIHVuc2lnbmVkIGNoYXIgYnVmWzJdOworCisgIGJ1ZlswXSA9IGVycmNvZGU7CisgIGJ1ZlsxXSA9IDA7CisgIHJldHVybiB3cml0ZW4gKGZkLCBidWYsIDIgKTsKK30KKworLyogU2VuZCBhIHBvbmcgcmVzcG9uc2UgYmFjay4gIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFub3RoZXIgdmFsdWUKKyAgIG9uIHdyaXRlIGVycm9yLiAgKi8KK3N0YXRpYyBpbnQKK3NlbmRfcG9uZyAoaW50IGZkKQoreworICByZXR1cm4gd3JpdGVuIChmZCwgIlx4MDBceDA0cG9uZyIsIDYpOworfQorCisvKiBTZW5kIGEgbm9uY2Ugb2Ygc2l6ZSBMRU5HVEggYmFjay4gUmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3NlbmRfbm9uY2UgKGludCBmZCwgaW50IGxlbmd0aCkKK3sKKyAgdW5zaWduZWQgY2hhciBidWZbMisyNTVdOworICBpbnQgcmM7CisKKyAgYXNzZXJ0IChsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gMjU1KTsKKyAgYnVmWzBdID0gMDsKKyAgYnVmWzFdID0gbGVuZ3RoOworICBnY3J5X2NyZWF0ZV9ub25jZSAoYnVmKzIsIGxlbmd0aCk7CisgIHJjID0gd3JpdGVuIChmZCwgYnVmLCAyK2xlbmd0aCApOworICB3aXBlbWVtb3J5IChidWYrMiwgbGVuZ3RoKTsKKyAgcmV0dXJuIHJjOworfQorCisvKiBTZW5kIGEgcmFuZG9tIG9mIHNpemUgTEVOR1RIIHdpdGggcXVhbGl0eSBMRVZFTCBiYWNrLiBSZXR1cm4gMCBvbgorICAgc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK3NlbmRfcmFuZG9tIChpbnQgZmQsIGludCBsZW5ndGgsIGludCBsZXZlbCkKK3sKKyAgdW5zaWduZWQgY2hhciBidWZbMisyNTVdOworICBpbnQgcmM7CisKKyAgYXNzZXJ0IChsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gMjU1KTsKKyAgYXNzZXJ0IChsZXZlbCA9PSBHQ1JZX1NUUk9OR19SQU5ET00gfHwgbGV2ZWwgPT0gR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICBidWZbMF0gPSAwOworICBidWZbMV0gPSBsZW5ndGg7CisgIC8qIE5vdGUgdGhhdCB3ZSBkb24ndCBib3RoZXIgcHV0dGluZyB0aGUgcmFuZG9tIHN0dWZmIGludG8gc2VjdXJlCisgICAgIG1lbW9yeSBiZWNhdXNlIHRoaXMgZGFlbW9uIGlzIGFueXdheSBpbnRlbmRlZCB0byBiZSBydW4gdW5kZXIKKyAgICAgcm9vdCBhbmQgaXQgaXMgcXVlc3Rpb25hYmxlIHdoZXRoZXIgdGhlIGtlcm5lbCBidWZmZXJzIGV0Yy4gYXJlCisgICAgIGVxdWFsbHkgd2VsbCBwcm90ZWN0ZWQuICovCisgIGdjcnlfcmFuZG9taXplIChidWYrMiwgbGVuZ3RoLCBsZXZlbCk7CisgIHJjID0gd3JpdGVuIChmZCwgYnVmLCAyK2xlbmd0aCApOworICB3aXBlbWVtb3J5IChidWYrMiwgbGVuZ3RoKTsKKyAgcmV0dXJuIHJjOworfQorCisvKiBNYWluIHByb2Nlc3NpbmcgbG9vcCBmb3IgYSBjb25uZWN0aW9uLgorCisgICBBIHJlcXVlc3QgaXMgbWFkZSB1cCBvZjoKKworICAgIDEgYnl0ZSAgVG90YWwgbGVuZ3RoIG9mIHJlcXVlc3Q7IG11c3QgYmUgMworICAgIDEgYnl0ZSAgQ29tbWFuZAorICAgICAgICAgICAgMCAgID0gUGluZworICAgICAgICAgICAgMTAgID0gR2V0Tm9uY2UKKyAgICAgICAgICAgIDExICA9IEdldFN0cm9uZ1JhbmRvbQorICAgICAgICAgICAgMTIgID0gR2V0VmVyeVN0cm9uZ1JhbmRvbQorICAgICAgICAgICAgKGFsbCBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkKQorICAgIDEgYnl0ZSAgTnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcy4KKyAgICAgICAgICAgIFRoaXMgaXMgaWdub3JlZCBmb3IgY29tbWFuZCBQaW5nLgorCisgICBBIHJlc3BvbnNlIGlzIG1hZGUgdXAgb2Y6CisKKyAgICAxIGJ5dGUgIEVycm9yIENvZGUKKyAgICAgICAgICAgIDAgICAgPSBFdmVyeXRoaW5nIGlzIGZpbmUKKyAgICAgICAgICAgIDEgICAgPSBCYWQgQ29tbWFuZAorICAgICAgICAgICAgMHhmZiA9IE90aGVyIGVycm9yLgorICAgICAgICAgICAgKEZvciBhIGJhZCByZXF1ZXN0IHRoZSBjb25uZWN0aW9uIHdpbGwgc2ltcGx5IGJlIGNsb3NlZCkKKyAgICAxIGJ5dGUgIExlbmd0aCBvZiBkYXRhCisgICAgbiBieXRlICBkYXRhCisKKyAgIFRoZSByZXF1ZXN0cyBhcmUgcmVhZCBhcyBsb25nIGFzIHRoZSBjb25uZWN0aW9uIGlzIG9wZW4uCisKKworICovCitzdGF0aWMgdm9pZAorY29ubmVjdGlvbl9sb29wIChpbnQgZmQpCit7CisgIHVuc2lnbmVkIGNoYXIgcmVxdWVzdFszXTsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IG5sZWZ0LCBuOworICBpbnQgcmM7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBmb3IgKG5sZWZ0PTMsIHA9cmVxdWVzdDsgbmxlZnQgPiAwOyApCisgICAgICAgIHsKKyAgICAgICAgICBuID0gcHRoX3JlYWQgKGZkLCBwLCBubGVmdCk7CisgICAgICAgICAgaWYgKCFuICYmIHAgPT0gcmVxdWVzdCkKKyAgICAgICAgICAgIHJldHVybjsgLyogQ2xpZW50IHRlcm1pbmF0ZWQgY29ubmVjdGlvbi4gKi8KKyAgICAgICAgICBpZiAobiA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dpdCAoTE9HX0VSUiwgImNvbm5lY3Rpb24gJWQ6IHJlYWQgZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGZkLCBuPyBzdHJlcnJvciAoZXJybm8pIDogIlVuZXhwZWN0ZWQgRU9GIik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBwICs9IG47CisgICAgICAgICAgbmxlZnQgLT0gbjsKKyAgICAgICAgfQorICAgICAgaWYgKHJlcXVlc3RbMF0gIT0gMykKKyAgICAgICAgeworICAgICAgICAgIGxvZ2l0IChMT0dfRVJSLCAiY29ubmVjdGlvbiAlZDogaW52YWxpZCBsZW5ndGggKCVkKSBvZiByZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgZmQsIHJlcXVlc3RbMF0pOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBzd2l0Y2ggKHJlcXVlc3RbMV0pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOiAvKiBQaW5nICovCisgICAgICAgICAgcmMgPSBzZW5kX3BvbmcgKGZkKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLyogR2V0Tm9uY2UgKi8KKyAgICAgICAgICByYyA9IHNlbmRfbm9uY2UgKGZkLCByZXF1ZXN0WzJdKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMTogLyogR2V0U3Ryb25nUmFuZG9tICovCisgICAgICAgICAgcmMgPSBzZW5kX3JhbmRvbSAoZmQsIHJlcXVlc3RbMl0sIEdDUllfU1RST05HX1JBTkRPTSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI6IC8qIEdldFZlcnlTdHJvbmdSYW5kb20gKi8KKyAgICAgICAgICByYyA9IHNlbmRfcmFuZG9tIChmZCwgcmVxdWVzdFsyXSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6IC8qIEludmFsaWQgY29tbWFuZCAqLworICAgICAgICAgIHJjID0gc2VuZF9lcnJvciAoZmQsIDEpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAocmMpCisgICAgICAgIGJyZWFrOyAvKiBBIHdyaXRlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgdGhlIHJlc3BvbnNlLiAqLworICAgIH0KK30KKworCisKKy8qIEVudHJ5IHBvaW50IGZvciBhIGNvbm5lY3Rpb24ncyB0aHJlYWQuICovCitzdGF0aWMgdm9pZCAqCitjb25uZWN0aW9uX3RocmVhZCAodm9pZCAqYXJnKQoreworICBpbnQgZmQgPSAoaW50KWFyZzsKKworICBhY3RpdmVfY29ubmVjdGlvbnMrKzsKKyAgbG9naXQgKExPR19JTkZPLCAiY29ubmVjdGlvbiBoYW5kbGVyIGZvciBmZCAlZCBzdGFydGVkIiwgZmQpOworCisgIGNvbm5lY3Rpb25fbG9vcCAoZmQpOworCisgIGNsb3NlIChmZCk7CisgIGxvZ2l0IChMT0dfSU5GTywgImNvbm5lY3Rpb24gaGFuZGxlciBmb3IgZmQgJWQgdGVybWluYXRlZCIsIGZkKTsKKyAgYWN0aXZlX2Nvbm5lY3Rpb25zLS07CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogVGhpcyBzaWduYWwgaGFuZGxlciBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbiBsb29wIGJldHdlZW4gYWNlcHRpbmcKKyAgIGNvbm5lY3Rpb25zLiAgSXQgaXMgY2FsbGVkIG9uIHRoZSByZWd1bGFyIHN0YWNrLCB0aHVzIG5vIHNwZWNpYWwKKyAgIGNhdXRpb24gbmVlZHMgdG8gYmUgdGFrZW4uICBJdCByZXR1cm5zIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgIHByb2Nlc3Mgc2hvdWxkIHRlcm1pbmF0ZS4gKi8KK3N0YXRpYyBpbnQKK2hhbmRsZV9zaWduYWwgKGludCBzaWdubykKK3sKKyAgc3dpdGNoIChzaWdubykKKyAgICB7CisgICAgY2FzZSBTSUdIVVA6CisgICAgICBsb2dpdCAoTE9HX05PVElDRSwgIlNJR0hVUCByZWNlaXZlZCAtIHJlLXJlYWRpbmcgY29uZmlndXJhdGlvbiIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJR1VTUjE6CisgICAgICBsb2dpdCAoTE9HX05PVElDRSwgIlNJR1VTUjEgcmVjZWl2ZWQgLSBubyBhY3Rpb24gZGVmaW5lZCIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJR1VTUjI6CisgICAgICBsb2dpdCAoTE9HX05PVElDRSwgIlNJR1VTUjIgcmVjZWl2ZWQgLSBubyBhY3Rpb24gZGVmaW5lZCIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJR1RFUk06CisgICAgICBpZiAoIXNodXRkb3duX3BlbmRpbmcpCisgICAgICAgIGxvZ2l0IChMT0dfTk9USUNFLCAiU0lHVEVSTSByZWNlaXZlZCAtIHNodXR0aW5nIGRvd24gLi4uIik7CisgICAgICBlbHNlCisgICAgICAgIGxvZ2l0IChMT0dfTk9USUNFLCAiU0lHVEVSTSByZWNlaXZlZCAtIHN0aWxsICVkIGFjdGl2ZSBjb25uZWN0aW9ucyIsCisgICAgICAgICAgICAgICBhY3RpdmVfY29ubmVjdGlvbnMpOworICAgICAgc2h1dGRvd25fcGVuZGluZysrOworICAgICAgaWYgKHNodXRkb3duX3BlbmRpbmcgPiAyKQorICAgICAgICB7CisgICAgICAgICAgbG9naXQgKExPR19OT1RJQ0UsICJzaHV0ZG93biBmb3JjZWQiKTsKKyAgICAgICAgICByZXR1cm4gMTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0lHSU5UOgorICAgICAgbG9naXQgKExPR19OT1RJQ0UsICJTSUdJTlQgcmVjZWl2ZWQgLSBpbW1lZGlhdGUgc2h1dGRvd24iKTsKKyAgICAgIHJldHVybiAxOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ2l0IChMT0dfTk9USUNFLCAic2lnbmFsICVkIHJlY2VpdmVkIC0gbm8gYWN0aW9uIGRlZmluZWRcbiIsIHNpZ25vKTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisKKworLyogTWFpbiBzZXJ2ZXIgbG9vcC4gIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIEZEIG9mIHRoZSBsaXN0ZW5pbmcKKyAgIHNvY2tldC4gKi8KK3N0YXRpYyB2b2lkCitzZXJ2ZSAoaW50IGxpc3Rlbl9mZCkKK3sKKyAgcHRoX2F0dHJfdCB0YXR0cjsKKyAgcHRoX2V2ZW50X3QgZXY7CisgIHNpZ3NldF90IHNpZ3M7CisgIGludCBzaWdubzsKKyAgc3RydWN0IHNvY2thZGRyX3VuIHBhZGRyOworICBzb2NrbGVuX3QgcGxlbiA9IHNpemVvZiAocGFkZHIpOworICBpbnQgZmQ7CisKKyAgdGF0dHIgPSBwdGhfYXR0cl9uZXcoKTsKKyAgcHRoX2F0dHJfc2V0ICh0YXR0ciwgUFRIX0FUVFJfSk9JTkFCTEUsIDApOworICBwdGhfYXR0cl9zZXQgKHRhdHRyLCBQVEhfQVRUUl9TVEFDS19TSVpFLCAyNTYqMTAyNCk7CisgIHB0aF9hdHRyX3NldCAodGF0dHIsIFBUSF9BVFRSX05BTUUsICJjb25uZWN0aW9uIik7CisKKyAgc2lnZW1wdHlzZXQgKCZzaWdzKTsKKyAgc2lnYWRkc2V0ICgmc2lncywgU0lHSFVQKTsKKyAgc2lnYWRkc2V0ICgmc2lncywgU0lHVVNSMSk7CisgIHNpZ2FkZHNldCAoJnNpZ3MsIFNJR1VTUjIpOworICBzaWdhZGRzZXQgKCZzaWdzLCBTSUdJTlQpOworICBzaWdhZGRzZXQgKCZzaWdzLCBTSUdURVJNKTsKKyAgZXYgPSBwdGhfZXZlbnQgKFBUSF9FVkVOVF9TSUdTLCAmc2lncywgJnNpZ25vKTsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChzaHV0ZG93bl9wZW5kaW5nKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFhY3RpdmVfY29ubmVjdGlvbnMpCisgICAgICAgICAgICBicmVhazsgLyogUmVhZHkuICovCisKKyAgICAgICAgICAvKiBEbyBub3QgYWNjZXB0IGFueW1vcmUgY29ubmVjdGlvbnMgYnV0IHdhaXQgZm9yIGV4aXN0aW5nCisgICAgICAgICAgICAgY29ubmVjdGlvbnMgdG8gdGVybWluYXRlLiAgKi8KKyAgICAgICAgICBzaWdubyA9IDA7CisgICAgICAgICAgcHRoX3dhaXQgKGV2KTsKKyAgICAgICAgICBpZiAocHRoX2V2ZW50X29jY3VycmVkIChldikgJiYgc2lnbm8pCisgICAgICAgICAgICBpZiAoaGFuZGxlX3NpZ25hbCAoc2lnbm8pKQorICAgICAgICAgICAgICBicmVhazsgLyogU3RvcCB0aGUgbG9vcC4gKi8KKyAgICAgICAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIGdjcnlfZmFzdF9yYW5kb21fcG9sbCAoKTsKKyAgICAgIGZkID0gcHRoX2FjY2VwdF9ldiAobGlzdGVuX2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnBhZGRyLCAmcGxlbiwgZXYpOworICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHB0aF9ldmVudF9vY2N1cnJlZCAoZXYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoaGFuZGxlX3NpZ25hbCAoc2lnbm8pKQorICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBTdG9wIHRoZSBsb29wLiAqLworICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgfQorICAgICAgICAgIGxvZ2l0IChMT0dfV0FSTklORywgImFjY2VwdCBmYWlsZWQ6ICVzIC0gd2FpdGluZyAxc1xuIiwKKyAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgZ2NyeV9mYXN0X3JhbmRvbV9wb2xsICgpOworICAgICAgICAgIHB0aF9zbGVlcCAoMSk7CisgICAgICAgICAgY29udGludWU7CisJfQorCisgICAgICBpZiAoIXB0aF9zcGF3biAodGF0dHIsIGNvbm5lY3Rpb25fdGhyZWFkLCAodm9pZCopZmQpKQorICAgICAgICB7CisgICAgICAgICAgbG9naXQgKExPR19FUlIsICJlcnJvciBzcGF3bmluZyBjb25uZWN0aW9uIGhhbmRsZXI6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pICk7CisgICAgICAgICAgY2xvc2UgKGZkKTsKKwl9CisgICAgfQorCisgIHB0aF9ldmVudF9mcmVlIChldiwgUFRIX0ZSRUVfQUxMKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9nZXRyYW5kb20uYyBiL3NyYy9nZXRyYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJiNWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dldHJhbmRvbS5jCkBAIC0wLDAgKzEsMzI2IEBACisvKiBnZXRyYW5kb20uYyAtIExpYmdjcnlwdCBSYW5kb20gTnVtYmVyIGNsaWVudAorICogQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIEdldHJhbmRvbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwKKyAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogR2V0cmFuZG9tIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIFBHTSAiZ2V0cmFuZG9tIgorI2RlZmluZSBNWVZFUlNJT05fTElORSBQR00gIiAoTGliZ2NyeXB0KSAiIFZFUlNJT04KKyNkZWZpbmUgQlVHUkVQT1JUX0xJTkUgIlxuUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJnY3J5cHRAZ251cGcub3JnPi5cbiIKKworCitzdGF0aWMgdm9pZAorbG9naXQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCkgOworICBmcHV0cyAoUEdNICI6ICIsIHN0ZGVycik7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgIHZhX2VuZCAoYXJnX3B0cik7Cit9CisKKworLyogU2VuZCBMRU5HVEggYnl0ZXMgb2YgQlVGRkVSIHRvIGZpbGUgZGVzY3JpcHRvciBGRC4gIFJldHVybnMgMCBvbgorICAgc3VjY2VzcyBvciBhbm90aGVyIHZhbHVlIG9uIHdyaXRlIGVycm9yLiAqLworc3RhdGljIGludAord3JpdGVuIChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgd2hpbGUgKGxlbmd0aCkKKyAgICB7CisgICAgICBzc2l6ZV90IG47CisKKyAgICAgIGRvCisgICAgICAgIG4gPSB3cml0ZSAoZmQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgIHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICBpZiAobiA8IDApCisgICAgICAgICB7CisgICAgICAgICAgIGxvZ2l0ICgid3JpdGUgZXJyb3I6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgIHJldHVybiAtMTsgLyogd3JpdGUgZXJyb3IgKi8KKyAgICAgICAgIH0KKyAgICAgIGxlbmd0aCAtPSBuOworICAgICAgYnVmZmVyID0gKGNvbnN0IGNoYXIgKilidWZmZXIgKyBuOworICAgIH0KKyAgcmV0dXJuIDA7ICAvKiBPa2F5ICovCit9CisKKworCisKK3N0YXRpYyB2b2lkCitwcmludF92ZXJzaW9uIChpbnQgd2l0aF9oZWxwKQoreworICBmcHV0cyAoTVlWRVJTSU9OX0xJTkUgIlxuIgorICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyAgICAgICAgICJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgIgorICAgICAgICAgIjxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAuaHRtbD5cbiIKKyAgICAgICAgICJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyAgICAgICAgICJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIiwKKyAgICAgICAgIHN0ZG91dCk7CisKKyAgaWYgKHdpdGhfaGVscCkKKyAgICBmcHV0cyAoIlxuIgorICAgICAgICAgICAiVXNhZ2U6ICIgUEdNICIgW09QVElPTlNdIE5CWVRFU1xuIgorICAgICAgICAgICAiQ29ubmVjdCB0byBsaWJnY3J5cHQncyByYW5kb20gbnVtYmVyIGRhZW1vbiBhbmQgIgorICAgICAgICAgICAicmV0dXJuIHJhbmRvbSBudW1iZXJzIgorICAgICAgICAgICAiXG4iCisgICAgICAgICAgICIgIC0tbm9uY2UgICAgICAgUmV0dXJuIHdlYWsgcmFuZG9tIHN1aXRhYmxlIGZvciBhIG5vbmNlXG4iCisgICAgICAgICAgICIgIC0tdmVyeS1zdHJvbmcgUmV0dXJuIHZlcnkgc3Ryb25nIHJhbmRvbVxuIgorICAgICAgICAgICAiICAtLXBpbmcgICAgICAgIFNlbmQgYSBwaW5nXG4iCisgICAgICAgICAgICIgIC0tc29ja2V0IE5BTUUgTmFtZSBvZiBzb2Nra2V0IHRvIGNvbm5lY3QgdG9cbiIKKyAgICAgICAgICAgIiAgLS1oZXggICAgICAgICBSZXR1cm4gcmVzdWx0IGFzIGEgaGV4IGR1bXBcbiIKKyAgICAgICAgICAgIiAgLS12ZXJib3NlICAgICBTaG93IHdoYXQgd2UgYXJlIGRvaW5nXG4iCisgICAgICAgICAgICIgIC0tdmVyc2lvbiAgICAgUHJpbnQgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBhbmQgZXhpdFxuIgorICAgICAgICAgICAiICAtLWhlbHAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisgICAgICAgICAgIEJVR1JFUE9SVF9MSU5FLCBzdGRvdXQgKTsKKworICBleGl0ICgwKTsKK30KKworc3RhdGljIGludAorcHJpbnRfdXNhZ2UgKHZvaWQpCit7CisgIGZwdXRzICgidXNhZ2U6ICIgUEdNICIgW09QVElPTlNdIE5CWVRFU1xuIiwgc3RkZXJyKTsKKyAgZnB1dHMgKCIgICAgICAgKHVzZSAtLWhlbHAgdG8gZGlzcGxheSBvcHRpb25zKVxuIiwgc3RkZXJyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBzb2NrYWRkcl91biAqc3J2cl9hZGRyOworICBzb2NrbGVuX3QgYWRkcmxlbjsKKyAgaW50IGZkOworICBpbnQgcmM7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzMwMF07CisgIGludCBubGVmdCwgbnJlYWQ7CisgIGNvbnN0IGNoYXIgKnNvY2tldG5hbWUgPSAiL3Zhci9ydW4vbGliZ2NyeXB0L1MuZ2NyeXB0cm5kIjsKKyAgaW50IGRvX3BpbmcgPSAwOworICBpbnQgZ2V0X25vbmNlID0gMDsKKyAgaW50IGdldF92ZXJ5X3N0cm9uZyA9IDA7CisgIGludCByZXFfbmJ5dGVzLCBuYnl0ZXMsIG47CisgIGludCB2ZXJib3NlID0gMDsKKyAgaW50IGZhaWwgPSAwOworICBpbnQgZG9faGV4ID0gMDsKKworICBpZiAoYXJnYykKKyAgICB7CisgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICB9CisgIHdoaWxlIChhcmdjICYmICoqYXJndiA9PSAnLScgJiYgKCphcmd2KVsxXSA9PSAnLScpCisgICAgeworICAgICAgaWYgKCEoKmFyZ3YpWzJdKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJzaW9uIikpCisgICAgICAgIHByaW50X3ZlcnNpb24gKDApOworICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgcHJpbnRfdmVyc2lvbiAoMSk7CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tc29ja2V0IikgJiYgYXJnYyA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgc29ja2V0bmFtZSA9ICphcmd2OworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tbm9uY2UiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGdldF9ub25jZSA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJ5LXN0cm9uZyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgZ2V0X3Zlcnlfc3Ryb25nID0gMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXBpbmciKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGRvX3BpbmcgPSAxOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGV4IikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBkb19oZXggPSAxOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcHJpbnRfdXNhZ2UgKCk7CisgICAgfQorCisKKyAgaWYgKCFhcmdjICYmIGRvX3BpbmcpCisgICAgOyAvKiBUaGlzIGlzIGFsbG93ZWQuICovCisgIGVsc2UgaWYgKGFyZ2MgIT0gMSkKKyAgICBwcmludF91c2FnZSAoKTsKKyAgcmVxX25ieXRlcyA9IGFyZ2M/IGF0b2kgKCphcmd2KSA6IDA7CisKKyAgaWYgKHJlcV9uYnl0ZXMgPCAwKQorICAgIHByaW50X3VzYWdlICgpOworCisgIC8qIENyZWF0ZSBhIHNvY2tldC4gKi8KKyAgZmQgPSBzb2NrZXQgKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgaWYgKGZkID09IC0xKQorICAgIHsKKyAgICAgIGxvZ2l0ICgiY2FuJ3QgY3JlYXRlIHNvY2tldDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgc3J2cl9hZGRyID0gbWFsbG9jIChzaXplb2YgKnNydnJfYWRkcik7CisgIGlmICghc3J2cl9hZGRyKQorICAgIHsKKyAgICAgIGxvZ2l0ICgibWFsbG9jIGZhaWxlZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgbWVtc2V0IChzcnZyX2FkZHIsIDAsIHNpemVvZiAqc3J2cl9hZGRyKTsKKyAgc3J2cl9hZGRyLT5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgaWYgKHN0cmxlbiAoc29ja2V0bmFtZSkgKyAxID49IHNpemVvZiAoc3J2cl9hZGRyLT5zdW5fcGF0aCkpCisgICAgeworICAgICAgbG9naXQgKCJzb2NrZXQgbmFtZSBgJXMnIHRvbyBsb25nIiwgc29ja2V0bmFtZSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIHN0cmNweSAoc3J2cl9hZGRyLT5zdW5fcGF0aCwgc29ja2V0bmFtZSk7CisgIGFkZHJsZW4gPSAob2Zmc2V0b2YgKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpCisgICAgICAgICAgICAgKyBzdHJsZW4gKHNydnJfYWRkci0+c3VuX3BhdGgpICsgMSk7CisgIHJjID0gY29ubmVjdCAoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSBzcnZyX2FkZHIsIGFkZHJsZW4pOworICBpZiAocmMgPT0gLTEpCisgICAgeworICAgICAgbG9naXQgKCJlcnJvciBjb25uZWN0aW5nIHNvY2tldCBgJXMnOiAlcyIsCisgICAgICAgICAgICAgc3J2cl9hZGRyLT5zdW5fcGF0aCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBjbG9zZSAoZmQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGRvCisgICAgeworICAgICAgbmJ5dGVzID0gcmVxX25ieXRlcyA+IDI1NT8gMjU1IDogcmVxX25ieXRlczsKKyAgICAgIHJlcV9uYnl0ZXMgLT0gbmJ5dGVzOworCisgICAgICBidWZmZXJbMF0gPSAzOworICAgICAgaWYgKGRvX3BpbmcpCisgICAgICAgIGJ1ZmZlclsxXSA9IDA7CisgICAgICBlbHNlIGlmIChnZXRfbm9uY2UpCisgICAgICAgIGJ1ZmZlclsxXSA9IDEwOworICAgICAgZWxzZSBpZiAoZ2V0X3Zlcnlfc3Ryb25nKQorICAgICAgICBidWZmZXJbMV0gPSAxMjsKKyAgICAgIGVsc2UKKyAgICAgICAgYnVmZmVyWzFdID0gMTE7CisgICAgICBidWZmZXJbMl0gPSBuYnl0ZXM7CisgICAgICBpZiAod3JpdGVuIChmZCwgYnVmZmVyLCAzKSkKKyAgICAgICAgZmFpbCA9IDE7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKG5sZWZ0PTIsIG5yZWFkPTA7IG5sZWZ0ID4gMDsgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIG4gPSByZWFkIChmZCwgYnVmZmVyK25yZWFkLCBubGVmdCk7CisgICAgICAgICAgICAgIHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBsb2dpdCAoInJlYWQgZXJyb3I6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG5sZWZ0IC09IG47CisgICAgICAgICAgICAgIG5yZWFkICs9IG47CisgICAgICAgICAgICAgIGlmIChucmVhZCAmJiBidWZmZXJbMF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbG9naXQgKCJzZXJ2ZXIgcmV0dXJuZWQgZXJyb3IgY29kZSAlZCIsIGJ1ZmZlclswXSk7CisgICAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBsb2dpdCAoInJlY2VpdmVkIHJlc3BvbnNlIHdpdGggJWQgYnl0ZXMgb2YgZGF0YSIsIGJ1ZmZlclsxXSk7CisgICAgICAgICAgaWYgKGJ1ZmZlclsxXSA8IG5ieXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbG9naXQgKCJ3YXJuaW5nOiBzZXJ2ZXIgcmV0dXJuZWQgbGVzcyBieXRlcyB0aGFuIHJlcXVlc3RlZCIpOworICAgICAgICAgICAgICBmYWlsID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChidWZmZXJbMV0gPiBuYnl0ZXMgJiYgIWRvX3BpbmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvZ2l0ICgid2FybmluZzogc2VydmVyIHJldHVybmVkIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQiKTsKKyAgICAgICAgICAgICAgZmFpbCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgbmJ5dGVzID0gYnVmZmVyWzFdOworICAgICAgICAgIGlmIChuYnl0ZXMgPiBzaXplb2YgYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dpdCAoImJ1ZmZlciB0b28gc2hvcnQgdG8gcmVjZWl2ZSBkYXRhIik7CisgICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgZm9yIChubGVmdD1uYnl0ZXMsIG5yZWFkPTA7IG5sZWZ0ID4gMDsgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIG4gPSByZWFkIChmZCwgYnVmZmVyK25yZWFkLCBubGVmdCk7CisgICAgICAgICAgICAgIHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBsb2dpdCAoInJlYWQgZXJyb3I6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG5sZWZ0IC09IG47CisgICAgICAgICAgICAgIG5yZWFkICs9IG47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoZG9faGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKG49MDsgbiA8IG5ieXRlczsgbisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIShuICUgMTYpKQorICAgICAgICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsKKyAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiUwMlgiLCBidWZmZXJbbl0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKG5ieXRlcykKKyAgICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChmd3JpdGUgKGJ1ZmZlciwgbmJ5dGVzLCAxLCBzdGRvdXQpICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbG9naXQgKCJlcnJvciB3cml0aW5nIHRvIHN0ZG91dDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgIGZhaWwgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgd2hpbGUgKCFmYWlsICYmIHJlcV9uYnl0ZXMpOworCisgIGNsb3NlIChmZCk7CisgIGZyZWUgKHNydnJfYWRkcik7CisgIHJldHVybiBmYWlsPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWwuYyBiL3NyYy9nbG9iYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjljYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dsb2JhbC5jCkBAIC0wLDAgKzEsMTE3MiBAQAorLyogZ2xvYmFsLmMgIC0JZ2xvYmFsIGNvbnRyb2wgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyAqICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMSwKKyAqICAgICAgICAgICAgICAgMjAxMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZmRlZiBIQVZFX1NZU0xPRworIyBpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgInN0ZG1lbS5oIiAvKiBvdXIgb3duIG1lbW9yeSBhbGxvY2F0b3IgKi8KKyNpbmNsdWRlICJzZWNtZW0uaCIgLyogb3VyIG93biBzZWNtZW0gYWxsb2NhdG9yICovCisjaW5jbHVkZSAiYXRoLmgiCisKKwwKKworLyoqKioqKioqKioqKioqKioKKyAqIGZsYWcgYml0czogMCA6IGdlbmVyYWwgY2lwaGVyIGRlYnVnCisgKgkgICAgICAxIDogZ2VuZXJhbCBNUEkgZGVidWcKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z19mbGFnczsKKworLyogZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9GSVBTX01PREUpLCBzZXRzIHRoaXMgZmxhZyBzbyB0aGF0IHRoZQorICAgaW5pdGlhbGl6YXRpb24gY29kZSBzd2l0Y2hlZCBmaXBzIG1vZGUgb24uICAqLworc3RhdGljIGludCBmb3JjZV9maXBzX21vZGU7CisKKy8qIENvbnRyb2xsZWQgYnkgZ2xvYmFsX2luaXQoKS4gICovCitzdGF0aWMgaW50IGFueV9pbml0X2RvbmU7CisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50LiAqLworCitzdGF0aWMgZ2NyeV9oYW5kbGVyX2FsbG9jX3QgYWxsb2NfZnVuYzsKK3N0YXRpYyBnY3J5X2hhbmRsZXJfYWxsb2NfdCBhbGxvY19zZWN1cmVfZnVuYzsKK3N0YXRpYyBnY3J5X2hhbmRsZXJfc2VjdXJlX2NoZWNrX3QgaXNfc2VjdXJlX2Z1bmM7CitzdGF0aWMgZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCByZWFsbG9jX2Z1bmM7CitzdGF0aWMgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBmcmVlX2Z1bmM7CitzdGF0aWMgZ2NyeV9oYW5kbGVyX25vX21lbV90IG91dG9mY29yZV9oYW5kbGVyOworc3RhdGljIHZvaWQgKm91dG9mY29yZV9oYW5kbGVyX3ZhbHVlOworc3RhdGljIGludCBub19zZWN1cmVfbWVtb3J5OworCisvKiBQcm90b3R5cGVzLiAgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdCBleHRlcm5hbF9sb2NrX3Rlc3QgKGludCBjbWQpOworCisMCisKKworLyogVGhpcyBpcyBvdXIgaGFuZG1hZGUgY29uc3RydWN0b3IuICBJdCBnZXRzIGNhbGxlZCBieSBhbnkgZnVuY3Rpb24KKyAgIGxpa2VseSB0byBiZSBjYWxsZWQgYXQgc3RhcnR1cC4gIFRoZSBzdWdnZXN0ZWQgd2F5IGZvciBhbgorICAgYXBwbGljYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBoYXMgYmVlbiBjYWxsZWQgaXMgYnkgdXNpbmcKKyAgIGdjcnlfY2hlY2tfdmVyc2lvbi4gKi8KK3N0YXRpYyB2b2lkCitnbG9iYWxfaW5pdCAodm9pZCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgaWYgKGFueV9pbml0X2RvbmUpCisgICAgcmV0dXJuOworICBhbnlfaW5pdF9kb25lID0gMTsKKworICAvKiBUZWxsIHRoZSByYW5kb20gbW9kdWxlIHRoYXQgd2UgaGF2ZSBzZWVuIGFuIGluaXQgY2FsbC4gICovCisgIF9nY3J5X3NldF9wcmVmZXJyZWRfcm5nX3R5cGUgKDApOworCisgIC8qIEluaXRpYWxpemUgb3VyIHBvcnRhYmxlIHRocmVhZC9tdXRleCB3cmFwcGVyLiAgKi8KKyAgZXJyID0gYXRoX2luaXQgKCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fZXJybm8gKGVycik7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgIC8qIFNlZSB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMgaW4gRklQUyBtb2RlLiAgVGhpcyBuZWVkcyB0byBjb21lIGFzCisgICAgIGVhcmx5IGFzIHBvc3NpYmxlIGJ1dCBhZnRlciBBVEggaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICAqLworICBfZ2NyeV9pbml0aWFsaXplX2ZpcHNfbW9kZSAoZm9yY2VfZmlwc19tb2RlKTsKKworICAvKiBCZWZvcmUgd2UgZG8gYW55IG90aGVyIGluaXRpYWxpemF0aW9uIHdlIG5lZWQgdG8gdGVzdCBhdmFpbGFibGUKKyAgICAgaGFyZHdhcmUgZmVhdHVyZXMuICAqLworICBfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlcyAtIHRoaXMgaXMgbWFpbmx5IGFsbG9jYXRpbmcgc29tZSBtZW1vcnkgYW5kCisgICAgIGNyZWF0aW5nIG11dGV4ZXMuICAqLworICBlcnIgPSBfZ2NyeV9jaXBoZXJfaW5pdCAoKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisgIGVyciA9IF9nY3J5X21kX2luaXQgKCk7CisgIGlmIChlcnIpCisgICAgZ290byBmYWlsOworICBlcnIgPSBfZ2NyeV9wa19pbml0ICgpOworICBpZiAoZXJyKQorICAgIGdvdG8gZmFpbDsKKyAgZXJyID0gX2djcnlfcHJpbWVnZW5faW5pdCAoKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisgIGVyciA9IF9nY3J5X3NlY21lbV9tb2R1bGVfaW5pdCAoKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisgIGVyciA9IF9nY3J5X21waV9pbml0ICgpOworICBpZiAoZXJyKQorICAgIGdvdG8gZmFpbDsKKworICByZXR1cm47CisKKyBmYWlsOgorICBCVUcgKCk7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIG1hY3JvIGZpcHNfaXNfb3BlcmF0aW9uYWwgYW5kIG1ha2VzCisgICBzdXJlIHRoYXQgdGhlIG1pbmltYWwgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZG9uZS4gIFRoaXMgaXMgZmFyCisgICBmcm9tIGEgcGVyZmVjdCBzb2x1dGlvbiBhbmQgaGlkZXMgcHJvYmxlbXMgd2l0aCBhbiBpbXByb3BlcgorICAgaW5pdGlhbGl6YXRpb24gYnV0IGF0IGxlYXN0IGluIHNpbmdsZS10aHJlYWRlZCBtb2RlIGl0IHNob3VsZCB3b3JrCisgICByZWxpYWJsZS4KKworICAgVGhlIHJlYXNvbiB3ZSBuZWVkIHRoaXMgaXMgdGhhdCBhIGxvdCBvZiBhcHBsaWNhdGlvbnMgZG9uJ3QgdXNlCisgICBMaWJnY3J5cHQgcHJvcGVybHkgYnkgbm90IHJ1bm5pbmcgYW55IGluaXRpYWxpemF0aW9uIGNvZGUgYXQgYWxsLgorICAgVGhleSBqdXN0IGNhbGwgYSBMaWJnY3J5cHQgZnVuY3Rpb24gYW5kIHRoYXQgaXMgYWxsIHdoYXQgdGhleSB3YW50LgorICAgTm93IHdpdGggdGhlIEZJUFMgbW9kZSwgdGhhdCBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGVudGVyaW5nIEZJUFMKKyAgIG1vZGUgKGZvciBzZWN1cml0eSByZWFzb25zLCBGSVBTIG1vZGUgaXMgdGhlIGRlZmF1bHQgaWYgbm8KKyAgIGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGRvbmUpIGFuZCBiYWlsaW5nIG91dCBpbW1lZGlhdGVseSBiZWNhdXNlCisgICB0aGUgRlNNIGlzIGluIHRoZSB3cm9uZyBzdGF0ZS4gIElmIHdlIGFsd2F5cyBydW4gdGhlIGluaXQgY29kZSwKKyAgIExpYmdjcnlwdCBjYW4gdGVzdCBmb3IgRklQUyBtb2RlIGFuZCBhdCBsZWFzdCBpZiBub3QgaW4gRklQUyBtb2RlLAorICAgaXQgd2lsbCBiZWhhdmUgYXMgYmVmb3JlLiAgTm90ZSB0aGF0IHRoaXMgb24tdGhlLWZseSBpbml0aWFsaXphdGlvbgorICAgaXMgb25seSBkb25lIGZvciB0aGUgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbnMgc3ViamVjdCB0byBGSVBTIG1vZGUKKyAgIGFuZCB0aHVzIG5vdCBhbGwgQVBJIGNhbGxzIHdpbGwgZG8gc3VjaCBhbiBpbml0aWFsaXphdGlvbi4gICovCitpbnQKK19nY3J5X2dsb2JhbF9pc19vcGVyYXRpb25hbCAodm9pZCkKK3sKKyAgaWYgKCFhbnlfaW5pdF9kb25lKQorICAgIHsKKyNpZmRlZiBIQVZFX1NZU0xPRworICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywgIkxpYmdjcnlwdCB3YXJuaW5nOiAiCisgICAgICAgICAgICAgICJtaXNzaW5nIGluaXRpYWxpemF0aW9uIC0gcGxlYXNlIGZpeCB0aGUgYXBwbGljYXRpb24iKTsKKyNlbmRpZiAvKkhBVkVfU1lTTE9HKi8KKyAgICAgIGdsb2JhbF9pbml0ICgpOworICAgIH0KKyAgcmV0dXJuIF9nY3J5X2ZpcHNfaXNfb3BlcmF0aW9uYWwgKCk7Cit9CisKKworCisMCisvKiBWZXJzaW9uIG51bWJlciBwYXJzaW5nLiAgKi8KKworLyogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGZpcnN0IHBvcnRpb24gb2YgdGhlIHZlcnNpb24gbnVtYmVyIFMgYW5kCisgICBzdG9yZXMgaXQgaW4gKk5VTUJFUi4gIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIKKyAgIGludG8gUyBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZQorICAgaW5pdGlhbCBudW1iZXIgcG9ydGlvbjsgb24gZmFpbHVyZSwgTlVMTCBpcyByZXR1cm5lZC4gICovCitzdGF0aWMgY29uc3QgY2hhcioKK3BhcnNlX3ZlcnNpb25fbnVtYmVyKCBjb25zdCBjaGFyICpzLCBpbnQgKm51bWJlciApCit7CisgICAgaW50IHZhbCA9IDA7CisKKyAgICBpZiggKnMgPT0gJzAnICYmIGlzZGlnaXQoc1sxXSkgKQorCXJldHVybiBOVUxMOyAvKiBsZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dlZCAqLworICAgIGZvciAoIDsgaXNkaWdpdCgqcyk7IHMrKyApIHsKKwl2YWwgKj0gMTA7CisJdmFsICs9ICpzIC0gJzAnOworICAgIH0KKyAgICAqbnVtYmVyID0gdmFsOworICAgIHJldHVybiB2YWwgPCAwPyBOVUxMIDogczsKK30KKworLyogVGhpcyBmdW5jdGlvbiBicmVha3MgdXAgdGhlIGNvbXBsZXRlIHN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgIHZlcnNpb24gbnVtYmVyIFMsIHdoaWNoIGlzIG9mIHRoZSBmb2xsb3dpbmcgc3RydXR1cmU6IDxtYWpvcgorICAgbnVtYmVyPi48bWlub3IgbnVtYmVyPi48bWljcm8gbnVtYmVyPjxwYXRjaCBsZXZlbD4uICBUaGUgbWFqb3IsCisgICBtaW5vciBhbmQgbWljcm8gbnVtYmVyIGNvbXBvbmVudHMgd2lsbCBiZSBzdG9yZWQgaW4gKk1BSk9SLCAqTUlOT1IKKyAgIGFuZCAqTUlDUk8uCisKKyAgIE9uIHN1Y2Nlc3MsIHRoZSBsYXN0IGNvbXBvbmVudCwgdGhlIHBhdGNoIGxldmVsLCB3aWxsIGJlIHJldHVybmVkOworICAgaW4gZmFpbHVyZSwgTlVMTCB3aWxsIGJlIHJldHVybmVkLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorcGFyc2VfdmVyc2lvbl9zdHJpbmcoIGNvbnN0IGNoYXIgKnMsIGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqbWljcm8gKQoreworICAgIHMgPSBwYXJzZV92ZXJzaW9uX251bWJlciggcywgbWFqb3IgKTsKKyAgICBpZiggIXMgfHwgKnMgIT0gJy4nICkKKwlyZXR1cm4gTlVMTDsKKyAgICBzKys7CisgICAgcyA9IHBhcnNlX3ZlcnNpb25fbnVtYmVyKCBzLCBtaW5vciApOworICAgIGlmKCAhcyB8fCAqcyAhPSAnLicgKQorCXJldHVybiBOVUxMOworICAgIHMrKzsKKyAgICBzID0gcGFyc2VfdmVyc2lvbl9udW1iZXIoIHMsIG1pY3JvICk7CisgICAgaWYoICFzICkKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gczsgLyogcGF0Y2hsZXZlbCAqLworfQorCisvKiBJZiBSRVFfVkVSU0lPTiBpcyBub24tTlVMTCwgY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeQorICAgaXMgYXQgbWluaW11bSB0aGUgcmVxdWVzdGVkIG9uZS4gIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIGxpYnJhcnkgdmVyc2lvbiBpZiB0aGUgY29uZGl0aW9uIGlzIHNhdGlzZmllZDsgcmV0dXJuIE5VTEwKKyAgIGlmIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBuZXdlciB0aGFuIHRoYXQgb2YgdGhlIGxpYnJhcnkuCisKKyAgIElmIGEgTlVMTCBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgbm8gY2hlY2sgaXMgZG9uZSwgYnV0IHRoZQorICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGlzIHNpbXBseSByZXR1cm5lZC4gICovCitjb25zdCBjaGFyICoKK19nY3J5X2NoZWNrX3ZlcnNpb24gKGNvbnN0IGNoYXIgKnJlcV92ZXJzaW9uKQoreworICAgIGNvbnN0IGNoYXIgKnZlciA9IFZFUlNJT047CisgICAgaW50IG15X21ham9yLCBteV9taW5vciwgbXlfbWljcm87CisgICAgaW50IHJxX21ham9yLCBycV9taW5vciwgcnFfbWljcm87CisgICAgY29uc3QgY2hhciAqbXlfcGx2bDsKKworICAgIGlmIChyZXFfdmVyc2lvbiAmJiByZXFfdmVyc2lvblswXSA9PSAxICYmIHJlcV92ZXJzaW9uWzFdID09IDEpCisgICAgICAgIHJldHVybiBfZ2NyeV9jb21wYXRfaWRlbnRpZmljYXRpb24gKCk7CisKKyAgICAvKiBJbml0aWFsaXplIGxpYnJhcnkuICAqLworICAgIGdsb2JhbF9pbml0ICgpOworCisgICAgaWYgKCAhcmVxX3ZlcnNpb24gKQorICAgICAgICAvKiBDYWxsZXIgd2FudHMgb3VyIHZlcnNpb24gbnVtYmVyLiAgKi8KKwlyZXR1cm4gdmVyOworCisgICAgLyogUGFyc2Ugb3duIHZlcnNpb24gbnVtYmVyLiAgKi8KKyAgICBteV9wbHZsID0gcGFyc2VfdmVyc2lvbl9zdHJpbmcoIHZlciwgJm15X21ham9yLCAmbXlfbWlub3IsICZteV9taWNybyApOworICAgIGlmICggIW15X3BsdmwgKQorICAgICAgICAvKiB2ZXJ5IHN0cmFuZ2Ugb3VyIG93biB2ZXJzaW9uIGlzIGJvZ3VzLiAgU2hvdWxkbid0IHdlIHVzZQorCSAgIGFzc2VydCgpIGhlcmUgYW5kIGJhaWwgb3V0IGluIGNhc2UgdGhpcyBoYXBwZW5zPyAgLW1vLiAgKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIC8qIFBhcnNlIHJlcXVlc3RlZCB2ZXJzaW9uIG51bWJlci4gICovCisgICAgaWYgKCFwYXJzZV92ZXJzaW9uX3N0cmluZyAocmVxX3ZlcnNpb24sICZycV9tYWpvciwgJnJxX21pbm9yLCAmcnFfbWljcm8pKQorICAgICAgcmV0dXJuIE5VTEw7ICAvKiByZXEgdmVyc2lvbiBzdHJpbmcgaXMgaW52YWxpZCwgdGhpcyBjYW4gaGFwcGVuLiAgKi8KKworICAgIC8qIENvbXBhcmUgdmVyc2lvbiBudW1iZXJzLiAgKi8KKyAgICBpZiAoIG15X21ham9yID4gcnFfbWFqb3IKKwl8fCAobXlfbWFqb3IgPT0gcnFfbWFqb3IgJiYgbXlfbWlub3IgPiBycV9taW5vcikKKwl8fCAobXlfbWFqb3IgPT0gcnFfbWFqb3IgJiYgbXlfbWlub3IgPT0gcnFfbWlub3IJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICYmIG15X21pY3JvID4gcnFfbWljcm8pCisJfHwgKG15X21ham9yID09IHJxX21ham9yICYmIG15X21pbm9yID09IHJxX21pbm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBteV9taWNybyA9PSBycV9taWNybykpCisgICAgICB7CisJcmV0dXJuIHZlcjsKKyAgICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkCitwcmludF9jb25maWcgKCBpbnQgKCpmbmMpKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiksIEZJTEUgKmZwKQoreworICB1bnNpZ25lZCBpbnQgaHdmZWF0dXJlcywgYWZlYXR1cmU7CisgIGludCBpOworICBjb25zdCBjaGFyICpzOworCisgIGZuYyAoZnAsICJ2ZXJzaW9uOiVzOlxuIiwgVkVSU0lPTik7CisgIGZuYyAoZnAsICJjaXBoZXJzOiVzOlxuIiwgTElCR0NSWVBUX0NJUEhFUlMpOworICBmbmMgKGZwLCAicHVia2V5czolczpcbiIsIExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyk7CisgIGZuYyAoZnAsICJkaWdlc3RzOiVzOlxuIiwgTElCR0NSWVBUX0RJR0VTVFMpOworICBmbmMgKGZwLCAicm5kLW1vZDoiCisjaWYgVVNFX1JOREVHRAorICAgICAgICAgICAgICAgICJlZ2Q6IgorI2VuZGlmCisjaWYgVVNFX1JORExJTlVYCisgICAgICAgICAgICAgICAgImxpbnV4OiIKKyNlbmRpZgorI2lmIFVTRV9STkRVTklYCisgICAgICAgICAgICAgICAgInVuaXg6IgorI2VuZGlmCisjaWYgVVNFX1JORFczMgorICAgICAgICAgICAgICAgICJ3MzI6IgorI2VuZGlmCisgICAgICAgIlxuIik7CisgIGZuYyAoZnAsICJjcHUtYXJjaDoiCisjaWYgZGVmaW5lZChIQVZFX0NQVV9BUkNIX1g4NikKKyAgICAgICAieDg2IgorI2VsaWYgZGVmaW5lZChIQVZFX0NQVV9BUkNIX0FMUEhBKQorICAgICAgICJhbHBoYSIKKyNlbGlmIGRlZmluZWQoSEFWRV9DUFVfQVJDSF9TUEFSQykKKyAgICAgICAic3BhcmMiCisjZWxpZiBkZWZpbmVkKEhBVkVfQ1BVX0FSQ0hfTUlQUykKKyAgICAgICAibWlwcyIKKyNlbGlmIGRlZmluZWQoSEFWRV9DUFVfQVJDSF9NNjhLKQorICAgICAgICJtNjhrIgorI2VsaWYgZGVmaW5lZChIQVZFX0NQVV9BUkNIX1BQQykKKyAgICAgICAicHBjIgorI2VsaWYgZGVmaW5lZChIQVZFX0NQVV9BUkNIX0FSTSkKKyAgICAgICAiYXJtIgorI2VuZGlmCisgICAgICAgIjpcbiIpOworICBmbmMgKGZwLCAibXBpLWFzbTolczpcbiIsIF9nY3J5X21waV9nZXRfaHdfY29uZmlnICgpKTsKKyAgZm5jIChmcCwgInRocmVhZHM6JXM6XG4iLCBhdGhfZ2V0X21vZGVsIChOVUxMKSk7CisgIGh3ZmVhdHVyZXMgPSBfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKCk7CisgIGZuYyAoZnAsICJod2ZsaXN0OiIpOworICBmb3IgKGk9MDsgKHMgPSBfZ2NyeV9lbnVtX2h3X2ZlYXR1cmVzIChpLCAmYWZlYXR1cmUpKTsgaSsrKQorICAgIGlmICgoaHdmZWF0dXJlcyAmIGFmZWF0dXJlKSkKKyAgICAgIGZuYyAoZnAsICIlczoiLCBzKTsKKyAgZm5jIChmcCwgIlxuIik7CisgIC8qIFdlIHVzZSB5L24gaW5zdGVhZCBvZiAxLzAgZm9yIHRoZSBzaW1wbGUgcmVhc29uIHRoYXQgRW1hY3NlbidzCisgICAgIGNvbXBpbGUgZXJyb3IgcGFyc2VyIHdvdWxkIGFjY2lkZW50bHkgZmxhZyB0aGF0IGxpbmUgd2hlbiBwcmludGVkCisgICAgIGR1cmluZyAibWFrZSBjaGVjayIgYXMgYW4gZXJyb3IuICAqLworICBmbmMgKGZwLCAiZmlwcy1tb2RlOiVjOiVjOlxuIiwKKyAgICAgICBmaXBzX21vZGUgKCk/ICd5JzonbicsCisgICAgICAgX2djcnlfZW5mb3JjZWRfZmlwc19tb2RlICgpPyAneSc6J24nICk7CisgIC8qIFRoZSBjdXJyZW50bHkgdXNlZCBSTkcgdHlwZS4gICovCisgIHsKKyAgICBpID0gX2djcnlfZ2V0X3JuZ190eXBlICgwKTsKKyAgICBzd2l0Y2ggKGkpCisgICAgICB7CisgICAgICBjYXNlIEdDUllfUk5HX1RZUEVfU1RBTkRBUkQ6IHMgPSAic3RhbmRhcmQiOyBicmVhazsKKyAgICAgIGNhc2UgR0NSWV9STkdfVFlQRV9GSVBTOiAgICAgcyA9ICJmaXBzIjsgYnJlYWs7CisgICAgICBjYXNlIEdDUllfUk5HX1RZUEVfU1lTVEVNOiAgIHMgPSAic3lzdGVtIjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBCVUcgKCk7CisgICAgICB9CisgICAgZm5jIChmcCwgInJuZy10eXBlOiVzOiVkOlxuIiwgcywgaSk7CisgIH0KKworfQorCisKKwwKKworLyogQ29tbWFuZCBkaXNwYXRjaGVyIGZ1bmN0aW9uLCBhY3RpbmcgYXMgZ2VuZXJhbCBjb250cm9sCisgICBmdW5jdGlvbi4gICovCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3Zjb250cm9sIChlbnVtIGdjcnlfY3RsX2NtZHMgY21kLCB2YV9saXN0IGFyZ19wdHIpCit7CisgIHN0YXRpYyBpbnQgaW5pdF9maW5pc2hlZCA9IDA7CisgIGdjcnlfZXJyX2NvZGVfdCByYyA9IDA7CisKKyAgc3dpdGNoIChjbWQpCisgICAgeworICAgIGNhc2UgR0NSWUNUTF9FTkFCTEVfTV9HVUFSRDoKKyAgICAgIF9nY3J5X3ByaXZhdGVfZW5hYmxlX21fZ3VhcmQgKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBfZ2NyeV9lbmFibGVfcXVpY2tfcmFuZG9tX2dlbiAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0ZBS0VEX1JBTkRPTV9QOgorICAgICAgLyogUmV0dXJuIGFuIGVycm9yIGlmIHRoZSBSTkcgaXMgZmFrZWQgb25lIChlLmcuIGVuYWJsZWQgYnkKKyAgICAgICAgIEVOQUJMRV9RVUlDS19SQU5ET00uICovCisgICAgICBpZiAoX2djcnlfcmFuZG9tX2lzX2Zha2VkICgpKQorICAgICAgICByYyA9IEdQR19FUlJfR0VORVJBTDsgIC8qIFVzZSBhcyBUUlVFIHZhbHVlLiAgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0RVTVBfUkFORE9NX1NUQVRTOgorICAgICAgX2djcnlfcmFuZG9tX2R1bXBfc3RhdHMgKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9EVU1QX01FTU9SWV9TVEFUUzoKKyAgICAgIC8qbV9wcmludF9zdGF0cygiW2ZpeG1lOiBwcmVmaXhdIik7Ki8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0RVTVBfU0VDTUVNX1NUQVRTOgorICAgICAgX2djcnlfc2VjbWVtX2R1bXBfc3RhdHMgKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9EUk9QX1BSSVZTOgorICAgICAgZ2xvYmFsX2luaXQgKCk7CisgICAgICBfZ2NyeV9zZWNtZW1faW5pdCAoMCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9ESVNBQkxFX1NFQ01FTToKKyAgICAgIGdsb2JhbF9pbml0ICgpOworICAgICAgbm9fc2VjdXJlX21lbW9yeSA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9JTklUX1NFQ01FTToKKyAgICAgIGdsb2JhbF9pbml0ICgpOworICAgICAgX2djcnlfc2VjbWVtX2luaXQgKHZhX2FyZyAoYXJnX3B0ciwgdW5zaWduZWQgaW50KSk7CisgICAgICBpZiAoKF9nY3J5X3NlY21lbV9nZXRfZmxhZ3MgKCkgJiBHQ1JZX1NFQ01FTV9GTEFHX05PVF9MT0NLRUQpKQorICAgICAgICByYyA9IEdQR19FUlJfR0VORVJBTDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1RFUk1fU0VDTUVNOgorICAgICAgZ2xvYmFsX2luaXQgKCk7CisgICAgICBfZ2NyeV9zZWNtZW1fdGVybSAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNX1dBUk46CisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MgKChfZ2NyeV9zZWNtZW1fZ2V0X2ZsYWdzICgpCisJCQkgICAgICAgfCBHQ1JZX1NFQ01FTV9GTEFHX05PX1dBUk5JTkcpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1NVU1BFTkRfU0VDTUVNX1dBUk46CisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MgKChfZ2NyeV9zZWNtZW1fZ2V0X2ZsYWdzICgpCisJCQkgICAgICAgfCBHQ1JZX1NFQ01FTV9GTEFHX1NVU1BFTkRfV0FSTklORykpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfUkVTVU1FX1NFQ01FTV9XQVJOOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBfZ2NyeV9zZWNtZW1fc2V0X2ZsYWdzICgoX2djcnlfc2VjbWVtX2dldF9mbGFncyAoKQorCQkJICAgICAgICYgfkdDUllfU0VDTUVNX0ZMQUdfU1VTUEVORF9XQVJOSU5HKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9VU0VfU0VDVVJFX1JORFBPT0w6CisgICAgICBnbG9iYWxfaW5pdCAoKTsKKyAgICAgIF9nY3J5X3NlY3VyZV9yYW5kb21fYWxsb2MgKCk7IC8qIFB1dCByYW5kb20gbnVtYmVyIGludG8gc2VjdXJlIG1lbW9yeS4gKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1NFVF9SQU5ET01fU0VFRF9GSUxFOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBfZ2NyeV9zZXRfcmFuZG9tX3NlZWRfZmlsZSAodmFfYXJnIChhcmdfcHRyLCBjb25zdCBjaGFyICopKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1VQREFURV9SQU5ET01fU0VFRF9GSUxFOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBpZiAoIGZpcHNfaXNfb3BlcmF0aW9uYWwgKCkgKQorICAgICAgICBfZ2NyeV91cGRhdGVfcmFuZG9tX3NlZWRfZmlsZSAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX1NFVF9WRVJCT1NJVFk6CisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIF9nY3J5X3NldF9sb2dfdmVyYm9zaXR5ICh2YV9hcmcgKGFyZ19wdHIsIGludCkpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTOgorICAgICAgZGVidWdfZmxhZ3MgfD0gdmFfYXJnIChhcmdfcHRyLCB1bnNpZ25lZCBpbnQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfQ0xFQVJfREVCVUdfRkxBR1M6CisgICAgICBkZWJ1Z19mbGFncyAmPSB+dmFfYXJnIChhcmdfcHRyLCB1bnNpZ25lZCBpbnQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfRElTQUJMRV9JTlRFUk5BTF9MT0NLSU5HOgorICAgICAgLyogTm90IHVzZWQgYW55bW9yZS4gICovCisgICAgICBnbG9iYWxfaW5pdCAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0FOWV9JTklUSUFMSVpBVElPTl9QOgorICAgICAgaWYgKGFueV9pbml0X2RvbmUpCisJcmMgPSBHUEdfRVJSX0dFTkVSQUw7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRF9QOgorICAgICAgaWYgKGluaXRfZmluaXNoZWQpCisJcmMgPSBHUEdfRVJSX0dFTkVSQUw7IC8qIFllcy4gICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRDoKKyAgICAgIC8qIFRoaXMgaXMgYSBob29rIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IGFuIGFwcGxpY2F0aW9uIGFmdGVyCisJIGFsbCBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lIGFuZCByaWdodCBiZWZvcmUgYW55IHRocmVhZHMKKwkgYXJlIHN0YXJ0ZWQuICBJdCBpcyBub3QgcmVhbGx5IG5lZWRlZCBidXQgdGhlIG9ubHkgd2F5IHRvIGJlCisJIHJlYWxseSBzdXJlIHRoYXQgYWxsIGluaXRpYWxpemF0aW9uIGZvciB0aHJlYWQtc2FmZXR5IGhhcworCSBiZWVuIGRvbmUuICovCisgICAgICBpZiAoISBpbml0X2ZpbmlzaGVkKQorICAgICAgICB7CisgICAgICAgICAgZ2xvYmFsX2luaXQgKCk7CisgICAgICAgICAgLyogRG8gb25seSBhIGJhc2ljIHJhbmRvbSBpbml0aWFsaXphdGlvbiwgaS5lLiBpbml0IHRoZQorICAgICAgICAgICAgIG11dGV4ZXMuICovCisgICAgICAgICAgX2djcnlfcmFuZG9tX2luaXRpYWxpemUgKDApOworICAgICAgICAgIGluaXRfZmluaXNoZWQgPSAxOworICAgICAgICAgIC8qIEZvcmNlIHVzIGludG8gb3BlcmF0aW9uYWwgc3RhdGUgaWYgaW4gRklQUyBtb2RlLiAgKi8KKyAgICAgICAgICAodm9pZClmaXBzX2lzX29wZXJhdGlvbmFsICgpOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9TRVRfVEhSRUFEX0NCUzoKKyAgICAgIF9nY3J5X3NldF9wcmVmZXJyZWRfcm5nX3R5cGUgKDApOworICAgICAgcmMgPSBhdGhfaW5zdGFsbCAodmFfYXJnIChhcmdfcHRyLCB2b2lkICopKTsKKyAgICAgIGlmICghcmMpCisJZ2xvYmFsX2luaXQgKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9GQVNUX1BPTEw6CisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIC8qIFdlIG5lZWQgdG8gZG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJhbmRvbSBwb29sIGlzIHJlYWxseQorICAgICAgICAgaW5pdGlhbGl6ZWQgc28gdGhhdCB0aGUgcG9sbCBmdW5jdGlvbiBpcyBub3QgYSBOT1AuICovCisgICAgICBfZ2NyeV9yYW5kb21faW5pdGlhbGl6ZSAoMSk7CisKKyAgICAgIGlmICggZmlwc19pc19vcGVyYXRpb25hbCAoKSApCisgICAgICAgIF9nY3J5X2Zhc3RfcmFuZG9tX3BvbGwgKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9TRVRfUk5ERUdEX1NPQ0tFVDoKKyNpZiBVU0VfUk5ERUdECisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIHJjID0gX2djcnlfcm5kZWdkX3NldF9zb2NrZXRfbmFtZSAodmFfYXJnIChhcmdfcHRyLCBjb25zdCBjaGFyICopKTsKKyNlbHNlCisgICAgICByYyA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT1RfU1VQUE9SVEVEKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VUX1JBTkRPTV9EQUVNT05fU09DS0VUOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBfZ2NyeV9zZXRfcmFuZG9tX2RhZW1vbl9zb2NrZXQgKHZhX2FyZyAoYXJnX3B0ciwgY29uc3QgY2hhciAqKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9VU0VfUkFORE9NX0RBRU1PTjoKKyAgICAgIC8qIFdlIG5lZWQgdG8gZG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJhbmRvbSBwb29sIGlzIHJlYWxseQorICAgICAgICAgaW5pdGlhbGl6ZWQgc28gdGhhdCB0aGUgcG9sbCBmdW5jdGlvbiBpcyBub3QgYSBOT1AuICovCisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIF9nY3J5X3JhbmRvbV9pbml0aWFsaXplICgxKTsKKyAgICAgIF9nY3J5X3VzZV9yYW5kb21fZGFlbW9uICghISB2YV9hcmcgKGFyZ19wdHIsIGludCkpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfQ0xPU0VfUkFORE9NX0RFVklDRToKKyAgICAgIF9nY3J5X3JhbmRvbV9jbG9zZV9mZHMgKCk7CisgICAgICBicmVhazsKKworICAgICAgLyogVGhpcyBjb21tYW5kIGR1bXBzIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gdGhlCisgICAgICAgICBjb25maWd1cmF0aW9uIG9mIGxpYmdjcnlwdCB0byB0aGUgZ2l2ZW4gc3RyZWFtLiAgSXQgbWF5IGJlCisgICAgICAgICB1c2VkIGJlZm9yZSB0aGUgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZmluaXNoZWQgYnV0IG5vdAorICAgICAgICAgYmVmb3JlIGEgZ2NyeV92ZXJzaW9uX2NoZWNrLiAqLworICAgIGNhc2UgR0NSWUNUTF9QUklOVF9DT05GSUc6CisgICAgICB7CisgICAgICAgIEZJTEUgKmZwID0gdmFfYXJnIChhcmdfcHRyLCBGSUxFICopOworICAgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgICAgcHJpbnRfY29uZmlnIChmcD9mcHJpbnRmOl9nY3J5X2xvZ19pbmZvX3dpdGhfZHVtbXlfZnAsIGZwKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX09QRVJBVElPTkFMX1A6CisgICAgICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGxpYnJhcnkgaXMgaW4gYW4gb3BlcmF0aW9uYWwgc3RhdGUuICBUaGlzCisgICAgICAgICBpcyBhbHdheXMgdHJ1ZSBmb3Igbm9uLWZpcHMgbW9kZS4gICovCisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIGlmIChfZ2NyeV9maXBzX3Rlc3Rfb3BlcmF0aW9uYWwgKCkpCisgICAgICAgIHJjID0gR1BHX0VSUl9HRU5FUkFMOyAvKiBVc2VkIGFzIFRSVUUgdmFsdWUgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0ZJUFNfTU9ERV9QOgorICAgICAgaWYgKGZpcHNfbW9kZSAoKQorICAgICAgICAgICYmICFfZ2NyeV9pc19maXBzX21vZGVfaW5hY3RpdmUgKCkKKyAgICAgICAgICAmJiAhbm9fc2VjdXJlX21lbW9yeSkKKwlyYyA9IEdQR19FUlJfR0VORVJBTDsgLyogVXNlZCBhcyBUUlVFIHZhbHVlICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9GT1JDRV9GSVBTX01PREU6CisgICAgICAvKiBQZXJmb3JtaW5nIHRoaXMgY29tbWFuZCBwdXRzIHRoZSBsaWJyYXJ5IGludG8gZmlwcyBtb2RlLiAgSWYKKyAgICAgICAgIHRoZSBsaWJyYXJ5IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgaW50byBmaXBzIG1vZGUsIGEKKyAgICAgICAgIHNlbGZ0ZXN0IGlzIHRyaWdnZXJlZC4gIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgdGhlIGxpYnJhdHkKKyAgICAgICAgIGludG8gZmlwcyBtb2RlIGFmdGVyIGhhdmluZyBwYXNzZWQgdGhlIGluaXRpYWxpemF0aW9uLiAqLworICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBpZiAoIWFueV9pbml0X2RvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBOb3QgeWV0IGludGlhbGl6ZWQgYXQgYWxsLiAgU2V0IGEgZmxhZyBzbyB0aGF0IHdlIGFyZSBwdXQKKyAgICAgICAgICAgICBpbnRvIGZpcHMgbW9kZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICAqLworICAgICAgICAgIGZvcmNlX2ZpcHNfbW9kZSA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIEFscmVhZHkgaW5pdGlhbGl6ZWQuICBJZiB3ZSBhcmUgYWxyZWFkeSBvcGVyYXRpb25hbCB3ZQorICAgICAgICAgICAgIHJ1biBhIHNlbGZ0ZXN0LiAgSWYgbm90IHdlIHVzZSB0aGUgaXNfb3BlcmF0aW9uYWwgY2FsbCB0bworICAgICAgICAgICAgIGZvcmNlIHVzIGludG8gb3BlcmF0aW9uYWwgc3RhdGUgaWYgcG9zc2libGUuICAqLworICAgICAgICAgIGlmIChfZ2NyeV9maXBzX3Rlc3RfZXJyb3Jfb3Jfb3BlcmF0aW9uYWwgKCkpCisgICAgICAgICAgICBfZ2NyeV9maXBzX3J1bl9zZWxmdGVzdHMgKDEpOworICAgICAgICAgIGlmIChfZ2NyeV9maXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgICAgICAgICAgcmMgPSBHUEdfRVJSX0dFTkVSQUw7IC8qIFVzZWQgYXMgVFJVRSB2YWx1ZSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VMRlRFU1Q6CisgICAgICAvKiBSdW4gYSBzZWxmdGVzdC4gIFRoaXMgd29ya3MgaW4gZmlwcyBtb2RlIGFzIHdlbGwgYXMgaW4KKyAgICAgICAgIHN0YW5kYXJkIG1vZGUuICBJbiBjb250cmFzdCB0byB0aGUgcG93ZXItdXAgdGVzdHMsIHdlIHVzZSBhbgorICAgICAgICAgZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgc2VsZnRlc3RzLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbgorICAgICAgICAgZXJyb3IgY29kZS4gKi8KKyAgICAgIGdsb2JhbF9pbml0ICgpOworICAgICAgcmMgPSBfZ2NyeV9maXBzX3J1bl9zZWxmdGVzdHMgKDEpOworICAgICAgYnJlYWs7CisKKyNpZiBfR0NSWV9HQ0NfVkVSU0lPTiA+PSA0MDYwMAorIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2giCisjZW5kaWYKKyAgICBjYXNlIDU4OiAgLyogSW5pdCBleHRlcm5hbCByYW5kb20gdGVzdC4gICovCisgICAgICB7CisgICAgICAgIHZvaWQgKipyY3R4ICAgICAgICA9IHZhX2FyZyAoYXJnX3B0ciwgdm9pZCAqKik7CisgICAgICAgIHVuc2lnbmVkIGludCBmbGFncyA9IHZhX2FyZyAoYXJnX3B0ciwgdW5zaWduZWQgaW50KTsKKyAgICAgICAgY29uc3Qgdm9pZCAqa2V5ICAgID0gdmFfYXJnIChhcmdfcHRyLCBjb25zdCB2b2lkICopOworICAgICAgICBzaXplX3Qga2V5bGVuICAgICAgPSB2YV9hcmcgKGFyZ19wdHIsIHNpemVfdCk7CisgICAgICAgIGNvbnN0IHZvaWQgKnNlZWQgICA9IHZhX2FyZyAoYXJnX3B0ciwgY29uc3Qgdm9pZCAqKTsKKyAgICAgICAgc2l6ZV90IHNlZWRsZW4gICAgID0gdmFfYXJnIChhcmdfcHRyLCBzaXplX3QpOworICAgICAgICBjb25zdCB2b2lkICpkdCAgICAgPSB2YV9hcmcgKGFyZ19wdHIsIGNvbnN0IHZvaWQgKik7CisgICAgICAgIHNpemVfdCBkdGxlbiAgICAgICA9IHZhX2FyZyAoYXJnX3B0ciwgc2l6ZV90KTsKKyAgICAgICAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgICAgICAgIHJjID0gZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByYyA9IF9nY3J5X3JhbmRvbV9pbml0X2V4dGVybmFsX3Rlc3QgKHJjdHgsIGZsYWdzLCBrZXksIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIHNlZWRsZW4sIGR0LCBkdGxlbik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDU5OiAgLyogUnVuIGV4dGVybmFsIHJhbmRvbSB0ZXN0LiAgKi8KKyAgICAgIHsKKyAgICAgICAgdm9pZCAqY3R4ICAgICA9IHZhX2FyZyAoYXJnX3B0ciwgdm9pZCAqKTsKKyAgICAgICAgdm9pZCAqYnVmZmVyICA9IHZhX2FyZyAoYXJnX3B0ciwgdm9pZCAqKTsKKyAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IHZhX2FyZyAoYXJnX3B0ciwgc2l6ZV90KTsKKyAgICAgICAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgICAgICAgIHJjID0gZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByYyA9IF9nY3J5X3JhbmRvbV9ydW5fZXh0ZXJuYWxfdGVzdCAoY3R4LCBidWZmZXIsIGJ1Zmxlbik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDYwOiAgLyogRGVpbml0IGV4dGVybmFsIHJhbmRvbSB0ZXN0LiAgKi8KKyAgICAgIHsKKyAgICAgICAgdm9pZCAqY3R4ID0gdmFfYXJnIChhcmdfcHRyLCB2b2lkICopOworICAgICAgICBfZ2NyeV9yYW5kb21fZGVpbml0X2V4dGVybmFsX3Rlc3QgKGN0eCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDYxOiAgLyogUnVuIGV4dGVybmFsIGxvY2sgdGVzdCAqLworICAgICAgcmMgPSBleHRlcm5hbF9sb2NrX3Rlc3QgKHZhX2FyZyAoYXJnX3B0ciwgaW50KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDYyOiAgLyogUkZVICovCisgICAgICBicmVhazsKKyNpZiBfR0NSWV9HQ0NfVkVSU0lPTiA+PSA0MDYwMAorIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworICAgIGNhc2UgR0NSWUNUTF9ESVNBQkxFX0hXRjoKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHZhX2FyZyAoYXJnX3B0ciwgY29uc3QgY2hhciAqKTsKKyAgICAgICAgcmMgPSBfZ2NyeV9kaXNhYmxlX2h3X2ZlYXR1cmUgKG5hbWUpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdDUllDVExfU0VUX0VORk9SQ0VEX0ZJUFNfRkxBRzoKKyAgICAgIGlmICghYW55X2luaXRfZG9uZSkKKyAgICAgICAgeworICAgICAgICAgIC8qIE5vdCB5ZXQgaW5pdGlhbGl6ZWQgYXQgYWxsLiAgU2V0IHRoZSBlbmZvcmNlZCBmaXBzIG1vZGUgZmxhZyAqLworICAgICAgICAgIF9nY3J5X3NldF9wcmVmZXJyZWRfcm5nX3R5cGUgKDApOworICAgICAgICAgIF9nY3J5X3NldF9lbmZvcmNlZF9maXBzX21vZGUgKCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBHUEdfRVJSX0dFTkVSQUw7CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFOgorICAgICAgLyogVGhpcyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBnY3J5X2NoZWNrX3ZlcnNpb24uICAqLworICAgICAgeworICAgICAgICBpbnQgaSA9IHZhX2FyZyAoYXJnX3B0ciwgaW50KTsKKyAgICAgICAgLyogTm90ZSB0aGF0IHdlIG1heSBub3QgcGFzcyAwIHRvIF9nY3J5X3NldF9wcmVmZXJyZWRfcm5nX3R5cGUuICAqLworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoaSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0NSWUNUTF9HRVRfQ1VSUkVOVF9STkdfVFlQRToKKyAgICAgIHsKKyAgICAgICAgaW50ICppcCA9IHZhX2FyZyAoYXJnX3B0ciwgaW50Kik7CisgICAgICAgIGlmIChpcCkKKyAgICAgICAgICAqaXAgPSBfZ2NyeV9nZXRfcm5nX3R5cGUgKCFhbnlfaW5pdF9kb25lKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0RJU0FCTEVfTE9DS0VEX1NFQ01FTToKKyAgICAgIF9nY3J5X3NldF9wcmVmZXJyZWRfcm5nX3R5cGUgKDApOworICAgICAgX2djcnlfc2VjbWVtX3NldF9mbGFncyAoKF9nY3J5X3NlY21lbV9nZXRfZmxhZ3MgKCkKKwkJCSAgICAgICB8IEdDUllfU0VDTUVNX0ZMQUdfTk9fTUxPQ0spKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0RJU0FCTEVfUFJJVl9EUk9QOgorICAgICAgX2djcnlfc2V0X3ByZWZlcnJlZF9ybmdfdHlwZSAoMCk7CisgICAgICBfZ2NyeV9zZWNtZW1fc2V0X2ZsYWdzICgoX2djcnlfc2VjbWVtX2dldF9mbGFncyAoKQorCQkJICAgICAgIHwgR0NSWV9TRUNNRU1fRkxBR19OT19QUklWX0RST1ApKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHQ1JZQ1RMX0lOQUNUSVZBVEVfRklQU19GTEFHOgorICAgIGNhc2UgR0NSWUNUTF9SRUFDVElWQVRFX0ZJUFNfRkxBRzoKKyAgICAgIHJjID0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBfZ2NyeV9zZXRfcHJlZmVycmVkX3JuZ190eXBlICgwKTsKKyAgICAgIHJjID0gR1BHX0VSUl9JTlZfT1A7CisgICAgfQorCisgIHJldHVybiByYzsKK30KKworCisKKy8qIFNldCBjdXN0b20gYWxsb2NhdGlvbiBoYW5kbGVycy4gIFRoaXMgaXMgaW4gZ2VuZXJhbCBub3QgdXNlZnVsCisgKiBiZWNhdXNlIHRoZSBsaWJnY3J5cHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8KKyAqIHByb3ZpZGUgcHJvcGVyIGFsbG9jYXRpb24gaGFuZGxlcnMgd2hpY2ggemVyb2l6ZSBtZW1vcnkgaWYgbmVlZGVkLgorICogTk9URTogQWxsIDUgZnVuY3Rpb25zIHNob3VsZCBiZSBzZXQuICAqLwordm9pZAorX2djcnlfc2V0X2FsbG9jYXRpb25faGFuZGxlciAoZ2NyeV9oYW5kbGVyX2FsbG9jX3QgbmV3X2FsbG9jX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfYWxsb2NfdCBuZXdfYWxsb2Nfc2VjdXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfc2VjdXJlX2NoZWNrX3QgbmV3X2lzX3NlY3VyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX3JlYWxsb2NfdCBuZXdfcmVhbGxvY19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBuZXdfZnJlZV9mdW5jKQoreworICBnbG9iYWxfaW5pdCAoKTsKKworICBpZiAoZmlwc19tb2RlICgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRvIG5vdCB3YW50IHRvIGVuZm9yY2UgdGhlIGZpcHMgbW9kZSwgYnV0IG1lcmVseSBzZXQgYQorICAgICAgICAgZmxhZyBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBtYXkgY2hlY2sgd2hldGhlciBpdCBpcyBzdGlsbCBpbgorICAgICAgICAgZmlwcyBtb2RlLiAgKi8KKyAgICAgIF9nY3J5X2luYWN0aXZhdGVfZmlwc19tb2RlICgiY3VzdG9tIGFsbG9jYXRpb24gaGFuZGxlciIpOworICAgIH0KKworICBhbGxvY19mdW5jID0gbmV3X2FsbG9jX2Z1bmM7CisgIGFsbG9jX3NlY3VyZV9mdW5jID0gbmV3X2FsbG9jX3NlY3VyZV9mdW5jOworICBpc19zZWN1cmVfZnVuYyA9IG5ld19pc19zZWN1cmVfZnVuYzsKKyAgcmVhbGxvY19mdW5jID0gbmV3X3JlYWxsb2NfZnVuYzsKKyAgZnJlZV9mdW5jID0gbmV3X2ZyZWVfZnVuYzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqCisgKiBTZXQgYW4gb3B0aW9uYWwgaGFuZGxlciB3aGljaCBpcyBjYWxsZWQgaW4gY2FzZSB0aGUgeG1hbGxvYyBmdW5jdGlvbnMKKyAqIHJhbiBvdXQgb2YgbWVtb3J5LiAgVGhpcyBoYW5kbGVyIG1heSBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorICogICBvIGZyZWUgc29tZSBtZW1vcnkgYW5kIHJldHVybiB0cnVlLCBzbyB0aGF0IHRoZSB4bWFsbG9jIGZ1bmN0aW9uCisgKiAgICAgdHJpZXMgYWdhaW4uCisgKiAgIG8gRG8gd2hhdGV2ZXIgaXQgbGlrZSBhbmQgcmV0dXJuIGZhbHNlLCBzbyB0aGF0IHRoZSB4bWFsbG9jIGZ1bmN0aW9ucworICogICAgIHVzZSB0aGUgZGVmYXVsdCBmYXRhbCBlcnJvciBoYW5kbGVyLgorICogICBvIFRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSBhbmQgZG9uJ3QgcmV0dXJuLgorICoKKyAqIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIDMgYXJndW1lbnRzOiAgVGhlIG9wYXF1ZSB2YWx1ZSBzZXQgd2l0aAorICogdGhpcyBmdW5jdGlvbiwgdGhlIHJlcXVlc3RlZCBtZW1vcnkgc2l6ZSwgYW5kIGEgZmxhZyB3aXRoIHRoZXNlIGJpdHMKKyAqIGN1cnJlbnRseSBkZWZpbmVkOgorICoJYml0IDAgc2V0ID0gc2VjdXJlIG1lbW9yeSBoYXMgYmVlbiByZXF1ZXN0ZWQuCisgKi8KK3ZvaWQKK19nY3J5X3NldF9vdXRvZmNvcmVfaGFuZGxlciAoaW50ICgqZikodm9pZCosIHNpemVfdCwgdW5zaWduZWQgaW50KSwgdm9pZCAqdmFsdWUpCit7CisgIGdsb2JhbF9pbml0ICgpOworCisgIGlmIChmaXBzX21vZGUgKCkgKQorICAgIHsKKyAgICAgIGxvZ19pbmZvICgib3V0IG9mIGNvcmUgaGFuZGxlciBpZ25vcmVkIGluIEZJUFMgbW9kZVxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG91dG9mY29yZV9oYW5kbGVyID0gZjsKKyAgb3V0b2Zjb3JlX2hhbmRsZXJfdmFsdWUgPSB2YWx1ZTsKK30KKworLyogUmV0dXJuIHRoZSBub19zZWN1cmVfbWVtb3J5IGZsYWcuICAqLworc3RhdGljIGludAorZ2V0X25vX3NlY3VyZV9tZW1vcnkgKHZvaWQpCit7CisgIGlmICghbm9fc2VjdXJlX21lbW9yeSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKF9nY3J5X2VuZm9yY2VkX2ZpcHNfbW9kZSAoKSkKKyAgICB7CisgICAgICBub19zZWN1cmVfbWVtb3J5ID0gMDsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIG5vX3NlY3VyZV9tZW1vcnk7Cit9CisKKworc3RhdGljIGdjcnlfZXJyX2NvZGVfdAorZG9fbWFsbG9jIChzaXplX3QgbiwgdW5zaWduZWQgaW50IGZsYWdzLCB2b2lkICoqbWVtKQoreworICBnY3J5X2Vycl9jb2RlX3QgZXJyID0gMDsKKyAgdm9pZCAqbTsKKworICBpZiAoKGZsYWdzICYgR0NSWV9BTExPQ19GTEFHX1NFQ1VSRSkgJiYgIWdldF9ub19zZWN1cmVfbWVtb3J5ICgpKQorICAgIHsKKyAgICAgIGlmIChhbGxvY19zZWN1cmVfZnVuYykKKwltID0gKCphbGxvY19zZWN1cmVfZnVuYykgKG4pOworICAgICAgZWxzZQorCW0gPSBfZ2NyeV9wcml2YXRlX21hbGxvY19zZWN1cmUgKG4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChhbGxvY19mdW5jKQorCW0gPSAoKmFsbG9jX2Z1bmMpIChuKTsKKyAgICAgIGVsc2UKKwltID0gX2djcnlfcHJpdmF0ZV9tYWxsb2MgKG4pOworICAgIH0KKworICBpZiAoIW0pCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHRoYXQgRVJSTk8gaGFzIGJlZW4gc2V0IGluIGNhc2UgYSB1c2VyIHN1cHBsaWVkCisgICAgICAgICBtZW1vcnkgaGFuZGxlciBkaWRuJ3QgaXQgY29ycmVjdGx5LiAqLworICAgICAgaWYgKCFlcnJubykKKyAgICAgICAgZ3BnX2Vycl9zZXRfZXJybm8gKEVOT01FTSk7CisgICAgICBlcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pOworICAgIH0KKyAgZWxzZQorICAgICptZW0gPSBtOworCisgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgKgorX2djcnlfbWFsbG9jIChzaXplX3QgbikKK3sKKyAgdm9pZCAqbWVtID0gTlVMTDsKKworICBkb19tYWxsb2MgKG4sIDAsICZtZW0pOworCisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQgKgorX2djcnlfbWFsbG9jX3NlY3VyZSAoc2l6ZV90IG4pCit7CisgIHZvaWQgKm1lbSA9IE5VTEw7CisKKyAgZG9fbWFsbG9jIChuLCBHQ1JZX0FMTE9DX0ZMQUdfU0VDVVJFLCAmbWVtKTsKKworICByZXR1cm4gbWVtOworfQorCitpbnQKK19nY3J5X2lzX3NlY3VyZSAoY29uc3Qgdm9pZCAqYSkKK3sKKyAgaWYgKGdldF9ub19zZWN1cmVfbWVtb3J5ICgpKQorICAgIHJldHVybiAwOworICBpZiAoaXNfc2VjdXJlX2Z1bmMpCisgICAgcmV0dXJuIGlzX3NlY3VyZV9mdW5jIChhKSA7CisgIHJldHVybiBfZ2NyeV9wcml2YXRlX2lzX3NlY3VyZSAoYSk7Cit9CisKK3ZvaWQKK19nY3J5X2NoZWNrX2hlYXAoIGNvbnN0IHZvaWQgKmEgKQoreworICAodm9pZClhOworCisgICAgLyogRklYTUU6IGltcGxlbWVudCB0aGlzKi8KKyNpZiAwCisgICAgaWYoIHNvbWVfaGFuZGxlciApCisJc29tZV9oYW5kbGVyKGEpCisgICAgZWxzZQorCV9nY3J5X3ByaXZhdGVfY2hlY2tfaGVhcChhKQorI2VuZGlmCit9CisKK3ZvaWQgKgorX2djcnlfcmVhbGxvYyAodm9pZCAqYSwgc2l6ZV90IG4pCit7CisgIHZvaWQgKnA7CisKKyAgLyogVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBub24tc3RhbmRhcmQgcmVhbGxvYyBpbXBsZW1lbnRhdGlvbnMgYW5kCisgICAgIG91ciBvd24gc2VjbWVtX3JlYWxsb2MsIHdlIGRpdmVydCB0byBtYWxsb2MgYW5kIGZyZWUgaGVyZS4gICovCisgIGlmICghYSkKKyAgICByZXR1cm4gX2djcnlfbWFsbG9jIChuKTsKKyAgaWYgKCFuKQorICAgIHsKKyAgICAgIHhmcmVlIChhKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBpZiAocmVhbGxvY19mdW5jKQorICAgIHAgPSByZWFsbG9jX2Z1bmMgKGEsIG4pOworICBlbHNlCisgICAgcCA9ICBfZ2NyeV9wcml2YXRlX3JlYWxsb2MgKGEsIG4pOworICBpZiAoIXAgJiYgIWVycm5vKQorICAgIGdwZ19lcnJfc2V0X2Vycm5vIChFTk9NRU0pOworICByZXR1cm4gcDsKK30KKwordm9pZAorX2djcnlfZnJlZSAodm9pZCAqcCkKK3sKKyAgaW50IHNhdmVfZXJybm87CisKKyAgaWYgKCFwKQorICAgIHJldHVybjsKKworICAvKiBJbiBjYXNlIEVSUk5PIGlzIHNldCB3ZSBiZXR0ZXIgc2F2ZSBpdCBzbyB0aGF0IHRoZSBmcmVlIG1hY2hpbmVyeQorICAgICBtYXkgbm90IGFjY2lkZW50bHkgY2hhbmdlIEVSUk5PLiAgV2UgcmVzdG9yZSBpdCBvbmx5IGlmIGl0IHdhcworICAgICBhbHJlYWR5IHNldCB0byBjb21wbHkgd2l0aCB0aGUgdXN1YWwgQyBzZW1hbnRpYyBmb3IgRVJSTk8uICAqLworICBzYXZlX2Vycm5vID0gZXJybm87CisgIGlmIChmcmVlX2Z1bmMpCisgICAgZnJlZV9mdW5jIChwKTsKKyAgZWxzZQorICAgIF9nY3J5X3ByaXZhdGVfZnJlZSAocCk7CisKKyAgaWYgKHNhdmVfZXJybm8pCisgICAgZ3BnX2Vycl9zZXRfZXJybm8gKHNhdmVfZXJybm8pOworfQorCit2b2lkICoKK19nY3J5X2NhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBtKQoreworICBzaXplX3QgYnl0ZXM7CisgIHZvaWQgKnA7CisKKyAgYnl0ZXMgPSBuICogbTsgLyogc2l6ZV90IGlzIHVuc2lnbmVkIHNvIHRoZSBiZWhhdmlvciBvbiBvdmVyZmxvdyBpcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkLiAqLworICBpZiAobSAmJiBieXRlcyAvIG0gIT0gbikKKyAgICB7CisgICAgICBncGdfZXJyX3NldF9lcnJubyAoRU5PTUVNKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBwID0gX2djcnlfbWFsbG9jIChieXRlcyk7CisgIGlmIChwKQorICAgIG1lbXNldCAocCwgMCwgYnl0ZXMpOworICByZXR1cm4gcDsKK30KKwordm9pZCAqCitfZ2NyeV9jYWxsb2Nfc2VjdXJlIChzaXplX3Qgbiwgc2l6ZV90IG0pCit7CisgIHNpemVfdCBieXRlczsKKyAgdm9pZCAqcDsKKworICBieXRlcyA9IG4gKiBtOyAvKiBzaXplX3QgaXMgdW5zaWduZWQgc28gdGhlIGJlaGF2aW9yIG9uIG92ZXJmbG93IGlzCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQuICovCisgIGlmIChtICYmIGJ5dGVzIC8gbSAhPSBuKQorICAgIHsKKyAgICAgIGdwZ19lcnJfc2V0X2Vycm5vIChFTk9NRU0pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHAgPSBfZ2NyeV9tYWxsb2Nfc2VjdXJlIChieXRlcyk7CisgIGlmIChwKQorICAgIG1lbXNldCAocCwgMCwgYnl0ZXMpOworICByZXR1cm4gcDsKK30KKworCisvKiBDcmVhdGUgYW5kIHJldHVybiBhIGNvcHkgb2YgdGhlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgU1RSSU5HLiAgSWYKKyAgIGl0IGlzIGNvbnRhaW5lZCBpbiBzZWN1cmUgbWVtb3J5LCB0aGUgY29weSB3aWxsIGJlIGNvbnRhaW5lZCBpbgorICAgc2VjdXJlIG1lbW9yeSBhcyB3ZWxsLiAgSW4gYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24sIE5VTEwgaXMKKyAgIHJldHVybmVkLiAgKi8KK2NoYXIgKgorX2djcnlfc3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGNoYXIgKnN0cmluZ19jcCA9IE5VTEw7CisgIHNpemVfdCBzdHJpbmdfbiA9IDA7CisKKyAgc3RyaW5nX24gPSBzdHJsZW4gKHN0cmluZyk7CisKKyAgaWYgKF9nY3J5X2lzX3NlY3VyZSAoc3RyaW5nKSkKKyAgICBzdHJpbmdfY3AgPSBfZ2NyeV9tYWxsb2Nfc2VjdXJlIChzdHJpbmdfbiArIDEpOworICBlbHNlCisgICAgc3RyaW5nX2NwID0gX2djcnlfbWFsbG9jIChzdHJpbmdfbiArIDEpOworCisgIGlmIChzdHJpbmdfY3ApCisgICAgc3RyY3B5IChzdHJpbmdfY3AsIHN0cmluZyk7CisKKyAgcmV0dXJuIHN0cmluZ19jcDsKK30KKworCit2b2lkICoKK19nY3J5X3htYWxsb2MoIHNpemVfdCBuICkKK3sKKyAgdm9pZCAqcDsKKworICB3aGlsZSAoICEocCA9IF9nY3J5X21hbGxvYyggbiApKSApCisgICAgeworICAgICAgaWYgKCBmaXBzX21vZGUgKCkKKyAgICAgICAgICAgfHwgIW91dG9mY29yZV9oYW5kbGVyCisgICAgICAgICAgIHx8ICFvdXRvZmNvcmVfaGFuZGxlciAob3V0b2Zjb3JlX2hhbmRsZXJfdmFsdWUsIG4sIDApICkKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2ZhdGFsX2Vycm9yIChncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcDsKK30KKwordm9pZCAqCitfZ2NyeV94cmVhbGxvYyggdm9pZCAqYSwgc2l6ZV90IG4gKQoreworICB2b2lkICpwOworCisgIHdoaWxlICggIShwID0gX2djcnlfcmVhbGxvYyggYSwgbiApKSApCisgICAgeworICAgICAgaWYgKCBmaXBzX21vZGUgKCkKKyAgICAgICAgICAgfHwgIW91dG9mY29yZV9oYW5kbGVyCisgICAgICAgICAgIHx8ICFvdXRvZmNvcmVfaGFuZGxlciAob3V0b2Zjb3JlX2hhbmRsZXJfdmFsdWUsIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2djcnlfaXNfc2VjdXJlKGEpPyAzOjIpKQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfZmF0YWxfZXJyb3IgKGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyksIE5VTEwgKTsKKwl9CisgICAgfQorICAgIHJldHVybiBwOworfQorCit2b2lkICoKK19nY3J5X3htYWxsb2Nfc2VjdXJlKCBzaXplX3QgbiApCit7CisgIHZvaWQgKnA7CisKKyAgd2hpbGUgKCAhKHAgPSBfZ2NyeV9tYWxsb2Nfc2VjdXJlKCBuICkpICkKKyAgICB7CisgICAgICBpZiAoIGZpcHNfbW9kZSAoKQorICAgICAgICAgICB8fCAhb3V0b2Zjb3JlX2hhbmRsZXIKKyAgICAgICAgICAgfHwgIW91dG9mY29yZV9oYW5kbGVyIChvdXRvZmNvcmVfaGFuZGxlcl92YWx1ZSwgbiwgMSkgKQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfZmF0YWxfZXJyb3IgKGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIm91dCBvZiBjb3JlIGluIHNlY3VyZSBtZW1vcnkiKSk7CisJfQorICAgIH0KKyAgcmV0dXJuIHA7Cit9CisKKwordm9pZCAqCitfZ2NyeV94Y2FsbG9jKCBzaXplX3Qgbiwgc2l6ZV90IG0gKQoreworICBzaXplX3QgbmJ5dGVzOworICB2b2lkICpwOworCisgIG5ieXRlcyA9IG4gKiBtOworICBpZiAobSAmJiBuYnl0ZXMgLyBtICE9IG4pCisgICAgeworICAgICAgZ3BnX2Vycl9zZXRfZXJybm8gKEVOT01FTSk7CisgICAgICBfZ2NyeV9mYXRhbF9lcnJvcihncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pLCBOVUxMICk7CisgICAgfQorCisgIHAgPSBfZ2NyeV94bWFsbG9jICggbmJ5dGVzICk7CisgIG1lbXNldCAoIHAsIDAsIG5ieXRlcyApOworICByZXR1cm4gcDsKK30KKwordm9pZCAqCitfZ2NyeV94Y2FsbG9jX3NlY3VyZSggc2l6ZV90IG4sIHNpemVfdCBtICkKK3sKKyAgc2l6ZV90IG5ieXRlczsKKyAgdm9pZCAqcDsKKworICBuYnl0ZXMgPSBuICogbTsKKyAgaWYgKG0gJiYgbmJ5dGVzIC8gbSAhPSBuKQorICAgIHsKKyAgICAgIGdwZ19lcnJfc2V0X2Vycm5vIChFTk9NRU0pOworICAgICAgX2djcnlfZmF0YWxfZXJyb3IoZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKSwgTlVMTCApOworICAgIH0KKworICBwID0gX2djcnlfeG1hbGxvY19zZWN1cmUgKCBuYnl0ZXMgKTsKKyAgbWVtc2V0ICggcCwgMCwgbmJ5dGVzICk7CisgIHJldHVybiBwOworfQorCitjaGFyICoKK19nY3J5X3hzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgY2hhciAqcDsKKworICB3aGlsZSAoICEocCA9IF9nY3J5X3N0cmR1cCAoc3RyaW5nKSkgKQorICAgIHsKKyAgICAgIHNpemVfdCBuID0gc3RybGVuIChzdHJpbmcpOworICAgICAgaW50IGlzX3NlYyA9ICEhX2djcnlfaXNfc2VjdXJlIChzdHJpbmcpOworCisgICAgICBpZiAoZmlwc19tb2RlICgpCisgICAgICAgICAgfHwgIW91dG9mY29yZV9oYW5kbGVyCisgICAgICAgICAgfHwgIW91dG9mY29yZV9oYW5kbGVyIChvdXRvZmNvcmVfaGFuZGxlcl92YWx1ZSwgbiwgaXNfc2VjKSApCisgICAgICAgIHsKKyAgICAgICAgICBfZ2NyeV9mYXRhbF9lcnJvciAoZ3BnX2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2VjPyBfKCJvdXQgb2YgY29yZSBpbiBzZWN1cmUgbWVtb3J5Iik6TlVMTCk7CisJfQorICAgIH0KKworICByZXR1cm4gcDsKK30KKworCitpbnQKK19nY3J5X2dldF9kZWJ1Z19mbGFnICh1bnNpZ25lZCBpbnQgbWFzaykKK3sKKyAgaWYgKCBmaXBzX21vZGUgKCkgKQorICAgIHJldHVybiAwOworICByZXR1cm4gKGRlYnVnX2ZsYWdzICYgbWFzayk7Cit9CisKKworDAorLyogSXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGdldCBzb21lIGZlZWRiYWNrIG9mIGxvbmcgcnVubmluZyBvcGVyYXRpb25zLgorICAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZCB0byByZWdpc3RlciBhIGhhbmRsZXIgZm9yIHRoaXMuCisgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gQ0IgaXMgdXNlZCBhczoKKworICAgdm9pZCBjYiAodm9pZCAqb3BhcXVlLCBjb25zdCBjaGFyICp3aGF0LCBpbnQgcHJpbnRjaGFyLAorICAgICAgICAgICBpbnQgY3VycmVudCwgaW50IHRvdGFsKTsKKworICAgV2hlcmUgV0hBVCBpcyBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgdGhlIHR5cGUgb2YgdGhlIHByb2dyZXNzCisgICBvdXRwdXQsIFBSSU5UQ0hBUiB0aGUgY2hhcmFjdGVyIHVzdWFsbHkgcHJpbnRlZCwgQ1VSUkVOVCB0aGUgYW1vdW50CisgICBvZiBwcm9ncmVzcyBjdXJyZW50bHkgZG9uZSBhbmQgVE9UQUwgdGhlIGV4cGVjdGVkIGFtb3VudCBvZgorICAgcHJvZ3Jlc3MuICBBIHZhbHVlIG9mIDAgZm9yIFRPVEFMIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vCisgICBlc3RpbWF0aW9uIGF2YWlsYWJsZS4KKworICAgRGVmaW5lZCB2YWx1ZXMgZm9yIFdIQVQ6CisKKyAgICJuZWVkX2VudHJvcHkiICBYICAgIDAgIG51bWJlci1vZi1ieXRlcy1yZXF1aXJlZAorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGxvdyBvbiBlbnRyb3B5CisgICAicHJpbWVnZW4iICAgICAgJ1xuJyAgMCAwCisgICAgICAgICAgIFByaW1lIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICchJworICAgICAgICAgICBOZWVkIHRvIHJlZnJlc2ggdGhlIHByaW1lIHBvb2wKKyAgICAgICAgICAgICAgICAgICAnPCcsJz4nCisgICAgICAgICAgIE51bWJlciBvZiBiaXRzIGFkanVzdGVkCisgICAgICAgICAgICAgICAgICAgJ14nCisgICAgICAgICAgIExvb2tpbmcgZm9yIGEgZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgJy4nCisgICAgICAgICAgIEZlcm1hdCB0ZXN0cyBvbiAxMCBjYW5kaWRhdGVzIGZhaWxlZAorICAgICAgICAgICAgICAgICAgJzonCisgICAgICAgICAgIFJlc3RhcnQgd2l0aCBhIG5ldyByYW5kb20gdmFsdWUKKyAgICAgICAgICAgICAgICAgICcrJworICAgICAgICAgICBSYWJpbiBNaWxsZXIgdGVzdCBwYXNzZWQKKyAgICJwa19lbGciICAgICAgICAnKycsJy0nLCcuJywnXG4nICAgMCAgMAorICAgICAgICAgICAgT25seSB1c2VkIGluIGRlYnVnZ2luZyBtb2RlLgorICAgInBrX2RzYSIKKyAgICAgICAgICAgIE9ubHkgdXNlZCBpbiBkZWJ1Z2dpbmcgbW9kZS4KKyovCit2b2lkCitfZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAodm9pZCAoKmNiKSh2b2lkICosY29uc3QgY2hhciosaW50LCBpbnQsIGludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKyNpZiBVU0VfRFNBCisgIF9nY3J5X3JlZ2lzdGVyX3BrX2RzYV9wcm9ncmVzcyAoY2IsIGNiX2RhdGEpOworI2VuZGlmCisjaWYgVVNFX0VMR0FNQUwKKyAgX2djcnlfcmVnaXN0ZXJfcGtfZWxnX3Byb2dyZXNzIChjYiwgY2JfZGF0YSk7CisjZW5kaWYKKyAgX2djcnlfcmVnaXN0ZXJfcHJpbWVnZW5fcHJvZ3Jlc3MgKGNiLCBjYl9kYXRhKTsKKyAgX2djcnlfcmVnaXN0ZXJfcmFuZG9tX3Byb2dyZXNzIChjYiwgY2JfZGF0YSk7Cit9CisKKworDAorLyogVGhpcyBpcyBhIGhlbHBlciBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSB0byB0ZXN0IExpYmdjcnlwdCdzIGxvY2tzLgorICAgSXQgd29ya3MgdXNpbmcgYSBvbmUgdGVzdCBsb2NrIHdpdGggQ01EIGNvbnRyb2xsaW5nIHdoYXQgdG8gZG86CisKKyAgICAgMzAxMTEgLSBBbGxvY2F0ZSBhbmQgaW5pdCBsb2NrCisgICAgIDMwMTEyIC0gVGFrZSBsb2NrCisgICAgIDMwMTEzIC0gUmVsZWFzZSBsb2NrCisgICAgIDMwMTE0IC0gRGVzdHJveSBsb2NrLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGVzdHMvdC1sb2NrLmMgLSBpdCBpcyBub3QgcGFydCBvZiB0aGUKKyAgIHB1YmxpYyBBUEkhCisgKi8KK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorZXh0ZXJuYWxfbG9ja190ZXN0IChpbnQgY21kKQoreworICBzdGF0aWMgYXRoX211dGV4X3QgdGVzdGxvY2s7CisgIGdwZ19lcnJfY29kZV90IHJjID0gMDsKKworICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSAzMDExMTogIC8qIEluaXQgTG9jay4gICovCisgICAgICByYyA9IGF0aF9tdXRleF9pbml0ICgmdGVzdGxvY2spOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDMwMTEyOiAgLyogVGFrZSBMb2NrLiAgKi8KKyAgICAgIHJjID0gYXRoX211dGV4X2xvY2sgKCZ0ZXN0bG9jayk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMzAxMTM6ICAvKiBSZWxlYXNlIExvY2suICAqLworICAgICAgcmMgPSBhdGhfbXV0ZXhfdW5sb2NrICgmdGVzdGxvY2spOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDMwMTE0OiAgLyogRGVzdHJveSBMb2NrLiAgKi8KKyAgICAgIHJjID0gYXRoX211dGV4X2Rlc3Ryb3kgKCZ0ZXN0bG9jayk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByYyA9IEdQR19FUlJfSU5WX09QOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3NyYy9obWFjMjU2LmMgYi9zcmMvaG1hYzI1Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTI2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaG1hYzI1Ni5jCkBAIC0wLDAgKzEsNzg3IEBACisvKiBobWFjMjU2LmMgLSBTdGFuZGFsb25lIEhNQUMgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgSE1BQy1TSEEtMjU2IGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlCisgICAgZnJvbSAuLi9jaXBoZXIvc2hhMjU2LmMuICBJdCBpcyBhIHNlY29uZCBpbXBsZW1lbnRhdGlvbiB0byBhbGxvdworICAgIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgYW5kIHRvIGJlIHVzZWQgZm9yCisgICAgaW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2tzLiAgSXQgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzZW5zaXRpdmUKKyAgICBkYXRhIGJlY2F1c2Ugbm8gbWVjaGFuaXNtcyB0byBjbGVhciB0aGUgc3RhY2sgZXRjIGFyZSB1c2VkLgorCisgICAgVGhpcyBtb2R1bGUgbWF5IGJlIHVzZWQgc3RhbmRhbG9uZSBhbmQgcmVxdWlyZXMgb25seSBhIGZldworICAgIHN0YW5kYXJkIGRlZmluaXRpb25zIHRvIGJlIHByb3ZpZGVkIGluIGEgY29uZmlnLmggZmlsZS4KKworICAgIFR5cGVzOgorCisgICAgIHUzMiAtIHVuc2lnbmVkIDMyIGJpdCB0eXBlLgorCisgICAgQ29uc3RhbnRzOgorCisgICAgIFdPUkRTX0JJR0VORElBTiAgICAgICBEZWZpbmVkIHRvIDEgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLgorICAgICBpbmxpbmUgICAgICAgICAgICAgICAgSWYgZGVmaW5lZCwgaXQgc2hvdWxkIHlpZWxkIHRoZSBrZXl3b3JkIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGlubGluZSBhIGZ1bmN0aW9uLgorICAgICBIQVZFX1UzMl9UWVBFREVGICAgICAgRGVmaW5lZCBpZiB0aGUgdTMyIHR5cGUgaXMgYXZhaWxhYmxlLgorICAgICBTSVpFT0ZfVU5TSUdORURfSU5UICAgRGVmaW5lZCB0byB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiB1bnNpZ25lZCBpbnQuCisgICAgIFNJWkVPRl9VTlNJR05FRF9MT05HICBEZWZpbmVkIHRvIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIHVuc2lnbmVkIGxvbmcuCisKKyAgICAgU1RBTkRBTE9ORSAgICAgICAgICAgIENvbXBpbGUgYSB0ZXN0IGRyaXZlciBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMXN1bSB0b29sLiAgVGhpcyBkcml2ZXIgdXNlcyBhIHNlbGYtdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsbHkgdG8gdGhlIG9uZSB1c2VkIGJ5IExpYmNncnlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRlc3RpbmcgdGhpcyBpbmNsdWRlZCBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZiBkZWZpbmVkKF9fV0lOMzIpICYmIGRlZmluZWQoU1RBTkRBTE9ORSkKKyMgaW5jbHVkZSA8ZmNudGwuaD4gLyogV2UgbmVlZCBzZXRtb2RlKCkuICAqLworI2VuZGlmCisKKy8qIEZvciBhIG5hdGl2ZSBXaW5kb3dzQ0UgYmluYXJ5IHdlIG5lZWQgdG8gaW5jbHVkZSBncGctZXJyb3IuaCB0bworICAgcHJvdmlkZSBhIHJlcGxhY2VtZW50IGZvciBzdHJlcnJvci4gIEluIG90aGVyIGNhc2VzIHdlIG5lZWQgYQorICAgcmVwbGFjZW1lbnQgbWFjcm8gZm9yIGdwZ19lcnJfc2V0X2Vycm5vLiAgKi8KKyNpZmRlZiBfX01JTkdXMzJDRV9fCisjIGluY2x1ZGUgPGdwZy1lcnJvci5oPgorI2Vsc2UKKyMgZGVmaW5lIGdwZ19lcnJfc2V0X2Vycm5vKGEpIChlcnJubyA9IChhKSkKKyNlbmRpZgorCisjaW5jbHVkZSAiaG1hYzI1Ni5oIgorCisKKworI2lmbmRlZiBIQVZFX1UzMl9UWVBFREVGCisjIHVuZGVmIHUzMiAvKiBVbmRlZiBhIHBvc3NpYmxlIG1hY3JvIHdpdGggdGhhdCBuYW1lLiAgKi8KKyMgaWYgU0laRU9GX1VOU0lHTkVEX0lOVCA9PSA0CisgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisjIGVsaWYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gNAorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHUzMjsKKyMgZWxzZQorIyAgZXJyb3Igbm8gdHlwZWRlZiBmb3IgdTMyCisjIGVuZGlmCisjIGRlZmluZSBIQVZFX1UzMl9UWVBFREVGCisjZW5kaWYKKworCisKKworLyogVGhlIGNvbnRleHQgdXNlZCBieSB0aGlzIG1vZHVsZS4gICovCitzdHJ1Y3QgaG1hYzI1Nl9jb250ZXh0Cit7CisgIHUzMiAgaDAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGg3OworICB1MzIgIG5ibG9ja3M7CisgIGludCAgY291bnQ7CisgIGludCAgZmluYWxpemVkOjE7CisgIGludCAgdXNlX2htYWM6MTsKKyAgdW5zaWduZWQgY2hhciBidWZbNjRdOworICB1bnNpZ25lZCBjaGFyIG9wYWRbNjRdOworfTsKKworCisvKiBSb3RhdGUgYSAzMiBiaXQgd29yZC4gICovCitzdGF0aWMgaW5saW5lIHUzMiByb3IodTMyIHgsIGludCBuKQoreworCXJldHVybiAoICgoeCkgPj4gKG4pKSB8ICgoeCkgPDwgKDMyLShuKSkpICk7Cit9CisKKyNkZWZpbmUgbXlfd2lwZW1lbW9yeTIoX3B0cixfc2V0LF9sZW4pIGRvIHsgXAorICAgICAgICAgICAgICB2b2xhdGlsZSBjaGFyICpfdnB0cj0odm9sYXRpbGUgY2hhciAqKShfcHRyKTsgXAorICAgICAgICAgICAgICBzaXplX3QgX3ZsZW49KF9sZW4pOyBcCisgICAgICAgICAgICAgIHdoaWxlKF92bGVuKSB7ICpfdnB0cj0oX3NldCk7IF92cHRyKys7IF92bGVuLS07IH0gXAorICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2RlZmluZSBteV93aXBlbWVtb3J5KF9wdHIsX2xlbikgbXlfd2lwZW1lbW9yeTIoX3B0ciwwLF9sZW4pCisKKworCisMCisvKgorICAgIFRoZSBTSEEtMjU2IGNvcmU6IFRyYW5zZm9ybSB0aGUgbWVzc2FnZSBYIHdoaWNoIGNvbnNpc3RzIG9mIDE2CisgICAgMzItYml0LXdvcmRzLiBTZWUgRklQUyAxODAtMiBmb3IgZGV0YWlscy4KKyAqLworc3RhdGljIHZvaWQKK3RyYW5zZm9ybSAoaG1hYzI1Nl9jb250ZXh0X3QgaGQsIGNvbnN0IHZvaWQgKmRhdGFfYXJnKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gZGF0YV9hcmc7CisKKyNkZWZpbmUgQ2hvKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpICAgICAgLyogKDQuMikgc2FtZSBhcyBTSEEtMSdzIEYxICovCisjZGVmaW5lIE1haih4LHkseikgKCh4ICYgeSkgfCAoeiAmICh4fHkpKSkgIC8qICg0LjMpIHNhbWUgYXMgU0hBLTEncyBGMyAqLworI2RlZmluZSBTdW0wKHgpIChyb3IgKCh4KSwgMikgXiByb3IgKCh4KSwgMTMpIF4gcm9yICgoeCksIDIyKSkgIC8qICg0LjQpICovCisjZGVmaW5lIFN1bTEoeCkgKHJvciAoKHgpLCA2KSBeIHJvciAoKHgpLCAxMSkgXiByb3IgKCh4KSwgMjUpKSAgLyogKDQuNSkgKi8KKyNkZWZpbmUgUzAoeCkgKHJvciAoKHgpLCA3KSBeIHJvciAoKHgpLCAxOCkgXiAoKHgpID4+IDMpKSAgICAgICAvKiAoNC42KSAqLworI2RlZmluZSBTMSh4KSAocm9yICgoeCksIDE3KSBeIHJvciAoKHgpLCAxOSkgXiAoKHgpID4+IDEwKSkgICAgIC8qICg0LjcpICovCisjZGVmaW5lIFIoYSxiLGMsZCxlLGYsZyxoLGssdykgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0MSA9IChoKSArIFN1bTEoKGUpKSArIENobygoZSksKGYpLChnKSkgKyAoaykgKyAodyk7ICBcCisgICAgICAgICAgICB0MiA9IFN1bTAoKGEpKSArIE1haigoYSksKGIpLChjKSk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBoID0gZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnID0gZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmID0gZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlID0gZCArIHQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkID0gYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjID0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBiID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhID0gdDEgKyB0MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoMCkKKworICBzdGF0aWMgY29uc3QgdTMyIEtbNjRdID0KKyAgICB7CisgICAgICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LAorICAgICAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwKKyAgICAgIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsCisgICAgICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LAorICAgICAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywKKyAgICAgIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsCisgICAgICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LAorICAgICAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywKKyAgICAgIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsCisgICAgICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LAorICAgICAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywKKyAgICAgIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsCisgICAgICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LAorICAgICAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywKKyAgICAgIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsCisgICAgICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyCisgICAgfTsKKworICB1MzIgYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgdDEsIHQyOworICB1MzIgeFsxNl07CisgIHUzMiB3WzY0XTsKKyAgaW50IGk7CisKKyAgYSA9IGhkLT5oMDsKKyAgYiA9IGhkLT5oMTsKKyAgYyA9IGhkLT5oMjsKKyAgZCA9IGhkLT5oMzsKKyAgZSA9IGhkLT5oNDsKKyAgZiA9IGhkLT5oNTsKKyAgZyA9IGhkLT5oNjsKKyAgaCA9IGhkLT5oNzsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICBtZW1jcHkgKHgsIGRhdGEsIDY0KTsKKyNlbHNlIC8qIVdPUkRTX0JJR0VORElBTiovCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyICpwMjsKKworICAgIGZvciAoaT0wLCBwMj0odW5zaWduZWQgY2hhciopeDsgaSA8IDE2OyBpKyssIHAyICs9IDQgKQorICAgICAgeworICAgICAgICBwMlszXSA9ICpkYXRhKys7CisgICAgICAgIHAyWzJdID0gKmRhdGErKzsKKyAgICAgICAgcDJbMV0gPSAqZGF0YSsrOworICAgICAgICBwMlswXSA9ICpkYXRhKys7CisgICAgICB9CisgIH0KKyNlbmRpZiAvKiFXT1JEU19CSUdFTkRJQU4qLworCisgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICB3W2ldID0geFtpXTsKKyAgZm9yICg7IGkgPCA2NDsgaSsrKQorICAgIHdbaV0gPSBTMSh3W2ktMl0pICsgd1tpLTddICsgUzAod1tpLTE1XSkgKyB3W2ktMTZdOworCisgIGZvciAoaT0wOyBpIDwgNjQ7IGkrKykKKyAgICBSKGEsYixjLGQsZSxmLGcsaCxLW2ldLHdbaV0pOworCisgIGhkLT5oMCArPSBhOworICBoZC0+aDEgKz0gYjsKKyAgaGQtPmgyICs9IGM7CisgIGhkLT5oMyArPSBkOworICBoZC0+aDQgKz0gZTsKKyAgaGQtPmg1ICs9IGY7CisgIGhkLT5oNiArPSBnOworICBoZC0+aDcgKz0gaDsKK30KKyN1bmRlZiBDaG8KKyN1bmRlZiBNYWoKKyN1bmRlZiBTdW0wCisjdW5kZWYgU3VtMQorI3VuZGVmIFMwCisjdW5kZWYgUzEKKyN1bmRlZiBSCisKKworLyogIEZpbmFsaXplIHRoZSBjdXJyZW50IFNIQTI1NiBjYWxjdWxhdGlvbi4gICovCitzdGF0aWMgdm9pZAorZmluYWxpemUgKGhtYWMyNTZfY29udGV4dF90IGhkKQoreworICB1MzIgdCwgbXNiLCBsc2I7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgaWYgKGhkLT5maW5hbGl6ZWQpCisgICAgcmV0dXJuOyAvKiBTaWxlbnRseSBpZ25vcmUgYSBmaW5hbGl6ZWQgY29udGV4dC4gICovCisKKyAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKGhkLCBOVUxMLCAwKTsgLyogRmx1c2guICAqLworCisgIHQgPSBoZC0+bmJsb2NrczsKKyAgLyogTXVsdGlwbHkgYnkgNjQgdG8gbWFrZSBhIGJ5dGUgY291bnQuICovCisgIGxzYiA9IHQgPDwgNjsKKyAgbXNiID0gdCA+PiAyNjsKKyAgLyogQWRkIHRoZSBjb3VudC4gKi8KKyAgdCA9IGxzYjsKKyAgaWYgKChsc2IgKz0gaGQtPmNvdW50KSA8IHQpCisgICAgbXNiKys7CisgIC8qIE11bHRpcGx5IGJ5IDggdG8gbWFrZSBhIGJpdCBjb3VudC4gKi8KKyAgdCA9IGxzYjsKKyAgbHNiIDw8PSAzOworICBtc2IgPDw9IDM7CisgIG1zYiB8PSB0ID4+IDI5OworCisgIGlmIChoZC0+Y291bnQgPCA1NikKKyAgICB7IC8qIEVub3VnaCByb29tLiAgKi8KKyAgICAgIGhkLT5idWZbaGQtPmNvdW50KytdID0gMHg4MDsgLyogcGFkICovCisgICAgICB3aGlsZSAoaGQtPmNvdW50IDwgNTYpCisgICAgICAgIGhkLT5idWZbaGQtPmNvdW50KytdID0gMDsgIC8qIHBhZCAqLworICAgIH0KKyAgZWxzZQorICAgIHsgLyogTmVlZCBvbmUgZXh0cmEgYmxvY2suICovCisgICAgICBoZC0+YnVmW2hkLT5jb3VudCsrXSA9IDB4ODA7IC8qIHBhZCBjaGFyYWN0ZXIgKi8KKyAgICAgIHdoaWxlIChoZC0+Y291bnQgPCA2NCkKKyAgICAgICAgaGQtPmJ1ZltoZC0+Y291bnQrK10gPSAwOworICAgICAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKGhkLCBOVUxMLCAwKTsgIC8qIEZsdXNoLiAgKi87CisgICAgICBtZW1zZXQgKGhkLT5idWYsIDAsIDU2ICk7IC8qIFplcm8gb3V0IG5leHQgbmV4dCBibG9jay4gICovCisgICAgfQorICAvKiBBcHBlbmQgdGhlIDY0IGJpdCBjb3VudC4gKi8KKyAgaGQtPmJ1Zls1Nl0gPSBtc2IgPj4gMjQ7CisgIGhkLT5idWZbNTddID0gbXNiID4+IDE2OworICBoZC0+YnVmWzU4XSA9IG1zYiA+PiAgODsKKyAgaGQtPmJ1Zls1OV0gPSBtc2I7CisgIGhkLT5idWZbNjBdID0gbHNiID4+IDI0OworICBoZC0+YnVmWzYxXSA9IGxzYiA+PiAxNjsKKyAgaGQtPmJ1Zls2Ml0gPSBsc2IgPj4gIDg7CisgIGhkLT5idWZbNjNdID0gbHNiOworICB0cmFuc2Zvcm0gKGhkLCBoZC0+YnVmKTsKKworICAvKiBTdG9yZSB0aGUgZGlnZXN0IGludG8gaGQtPmJ1Zi4gICovCisgIHAgPSBoZC0+YnVmOworI2RlZmluZSBYKGEpIGRvIHsgKnArKyA9IGhkLT5oIyNhID4+IDI0OyAqcCsrID0gaGQtPmgjI2EgPj4gMTY7CSBcCisJCSAgKnArKyA9IGhkLT5oIyNhID4+IDg7ICpwKysgPSBoZC0+aCMjYTsgfSB3aGlsZSgwKQorICBYKDApOworICBYKDEpOworICBYKDIpOworICBYKDMpOworICBYKDQpOworICBYKDUpOworICBYKDYpOworICBYKDcpOworI3VuZGVmIFgKKyAgaGQtPmZpbmFsaXplZCA9IDE7Cit9CisKKworCisvKiBDcmVhdGUgYSBuZXcgY29udGV4dC4gIE9uIGVycm9yIE5VTEwgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldAorICAgYXBwcm9wcmlhdGVseS4gIElmIEtFWSBpcyBnaXZlbiB0aGUgZnVuY3Rpb24gY29tcHV0ZXMgSE1BQyB1c2luZworICAgdGhpcyBrZXk7IHdpdGggS0VZIGdpdmVuIGFzIE5VTEwsIGEgcGxhaW4gU0hBLTI1NiBkaWdlc3QgaXMKKyAgIGNvbXB1dGVkLiAgKi8KK2htYWMyNTZfY29udGV4dF90CitfZ2NyeV9obWFjMjU2X25ldyAoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworICBobWFjMjU2X2NvbnRleHRfdCBoZDsKKworICBoZCA9IG1hbGxvYyAoc2l6ZW9mICpoZCk7CisgIGlmICghaGQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaGQtPmgwID0gMHg2YTA5ZTY2NzsKKyAgaGQtPmgxID0gMHhiYjY3YWU4NTsKKyAgaGQtPmgyID0gMHgzYzZlZjM3MjsKKyAgaGQtPmgzID0gMHhhNTRmZjUzYTsKKyAgaGQtPmg0ID0gMHg1MTBlNTI3ZjsKKyAgaGQtPmg1ID0gMHg5YjA1Njg4YzsKKyAgaGQtPmg2ID0gMHgxZjgzZDlhYjsKKyAgaGQtPmg3ID0gMHg1YmUwY2QxOTsKKyAgaGQtPm5ibG9ja3MgPSAwOworICBoZC0+Y291bnQgPSAwOworICBoZC0+ZmluYWxpemVkID0gMDsKKyAgaGQtPnVzZV9obWFjID0gMDsKKworICBpZiAoa2V5KQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgdW5zaWduZWQgY2hhciBpcGFkWzY0XTsKKworICAgICAgbWVtc2V0IChpcGFkLCAwLCA2NCk7CisgICAgICBtZW1zZXQgKGhkLT5vcGFkLCAwLCA2NCk7CisgICAgICBpZiAoa2V5bGVuIDw9IDY0KQorICAgICAgICB7CisgICAgICAgICAgbWVtY3B5IChpcGFkLCBrZXksIGtleWxlbik7CisgICAgICAgICAgbWVtY3B5IChoZC0+b3BhZCwga2V5LCBrZXlsZW4pOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBobWFjMjU2X2NvbnRleHRfdCB0bXBoZDsKKworICAgICAgICAgIHRtcGhkID0gX2djcnlfaG1hYzI1Nl9uZXcgKE5VTEwsIDApOworICAgICAgICAgIGlmICghdG1waGQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZyZWUgKGhkKTsKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKHRtcGhkLCBrZXksIGtleWxlbik7CisgICAgICAgICAgZmluYWxpemUgKHRtcGhkKTsKKyAgICAgICAgICBtZW1jcHkgKGlwYWQsIHRtcGhkLT5idWYsIDMyKTsKKyAgICAgICAgICBtZW1jcHkgKGhkLT5vcGFkLCB0bXBoZC0+YnVmLCAzMik7CisgICAgICAgICAgX2djcnlfaG1hYzI1Nl9yZWxlYXNlICh0bXBoZCk7CisgICAgICAgIH0KKyAgICAgIGZvciAoaT0wOyBpIDwgNjQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlwYWRbaV0gXj0gMHgzNjsKKyAgICAgICAgICBoZC0+b3BhZFtpXSBePSAweDVjOworICAgICAgICB9CisgICAgICBoZC0+dXNlX2htYWMgPSAxOworICAgICAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKGhkLCBpcGFkLCA2NCk7CisgICAgICBteV93aXBlbWVtb3J5IChpcGFkLCA2NCk7CisgICAgfQorCisgIHJldHVybiBoZDsKK30KKworLyogUmVsZWFzZSBhIGNvbnRleHQgY3JlYXRlZCBieSBfZ2NyeV9obWFjMjU2X25ldy4gIENUWCBtYXkgYmUgTlVMTAorICAgaW4gd2hpY2ggY2FzZSB0aGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgKi8KK3ZvaWQKK19nY3J5X2htYWMyNTZfcmVsZWFzZSAoaG1hYzI1Nl9jb250ZXh0X3QgY3R4KQoreworICBpZiAoY3R4KQorICAgIHsKKyAgICAgIC8qIE5vdGU6IFdlIG5lZWQgdG8gdGFrZSBjYXJlIG5vdCB0byBtb2RpZnkgZXJybm8uICAqLworICAgICAgaWYgKGN0eC0+dXNlX2htYWMpCisgICAgICAgIG15X3dpcGVtZW1vcnkgKGN0eC0+b3BhZCwgNjQpOworICAgICAgZnJlZSAoY3R4KTsKKyAgICB9Cit9CisKKworLyogVXBkYXRlIHRoZSBtZXNzYWdlIGRpZ2VzdCB3aXRoIHRoZSBjb250ZW50cyBvZiBCVUZGRVIgY29udGFpbmluZworICAgTEVOR1RIIGJ5dGVzLiAgKi8KK3ZvaWQKK19nY3J5X2htYWMyNTZfdXBkYXRlIChobWFjMjU2X2NvbnRleHRfdCBoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYgPSBidWZmZXI7CisKKyAgaWYgKGhkLT5maW5hbGl6ZWQpCisgICAgcmV0dXJuOyAvKiBTaWxlbnRseSBpZ25vcmUgYSBmaW5hbGl6ZWQgY29udGV4dC4gICovCisKKyAgaWYgKGhkLT5jb3VudCA9PSA2NCkKKyAgICB7CisgICAgICAvKiBGbHVzaCB0aGUgYnVmZmVyLiAqLworICAgICAgdHJhbnNmb3JtIChoZCwgaGQtPmJ1Zik7CisgICAgICBoZC0+Y291bnQgPSAwOworICAgICAgaGQtPm5ibG9ja3MrKzsKKyAgICB9CisgIGlmICghaW5idWYpCisgICAgcmV0dXJuOyAgLyogT25seSBmbHVzaGluZyB3YXMgcmVxdWVzdGVkLiAqLworICBpZiAoaGQtPmNvdW50KQorICAgIHsKKyAgICAgIGZvciAoOyBsZW5ndGggJiYgaGQtPmNvdW50IDwgNjQ7IGxlbmd0aC0tKQorICAgICAgICBoZC0+YnVmW2hkLT5jb3VudCsrXSA9ICppbmJ1ZisrOworICAgICAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKGhkLCBOVUxMLCAwKTsgLyogRmx1c2guICAqLworICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICB3aGlsZSAobGVuZ3RoID49IDY0KQorICAgIHsKKyAgICAgIHRyYW5zZm9ybSAoaGQsIGluYnVmKTsKKyAgICAgIGhkLT5jb3VudCA9IDA7CisgICAgICBoZC0+bmJsb2NrcysrOworICAgICAgbGVuZ3RoIC09IDY0OworICAgICAgaW5idWYgKz0gNjQ7CisgICAgfQorICBmb3IgKDsgbGVuZ3RoICYmIGhkLT5jb3VudCA8IDY0OyBsZW5ndGgtLSkKKyAgICBoZC0+YnVmW2hkLT5jb3VudCsrXSA9ICppbmJ1ZisrOworfQorCisKKy8qIEZpbmFsaXplIGFuIG9wZXJhdGlvbiBhbmQgcmV0dXJuIHRoZSBkaWdlc3QuICBJZiBSX0RMRU4gaXMgbm90IE5VTEwKKyAgIHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdCB3aWxsIGJlIHN0b3JlZCBhdCB0aGF0IGFkZHJlc3MuICBUaGUKKyAgIHJldHVybmVkIHZhbHVlIGlzIHZhbGlkIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQgZXhpc3RzLiAgT24gZXJyb3IKKyAgIE5VTEwgaXMgcmV0dXJuZWQuICovCitjb25zdCB2b2lkICoKK19nY3J5X2htYWMyNTZfZmluYWxpemUgKGhtYWMyNTZfY29udGV4dF90IGhkLCBzaXplX3QgKnJfZGxlbikKK3sKKyAgZmluYWxpemUgKGhkKTsKKyAgaWYgKGhkLT51c2VfaG1hYykKKyAgICB7CisgICAgICBobWFjMjU2X2NvbnRleHRfdCB0bXBoZDsKKworICAgICAgdG1waGQgPSBfZ2NyeV9obWFjMjU2X25ldyAoTlVMTCwgMCk7CisgICAgICBpZiAoIXRtcGhkKQorICAgICAgICB7CisgICAgICAgICAgZnJlZSAoaGQpOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBfZ2NyeV9obWFjMjU2X3VwZGF0ZSAodG1waGQsIGhkLT5vcGFkLCA2NCk7CisgICAgICBfZ2NyeV9obWFjMjU2X3VwZGF0ZSAodG1waGQsIGhkLT5idWYsIDMyKTsKKyAgICAgIGZpbmFsaXplICh0bXBoZCk7CisgICAgICBtZW1jcHkgKGhkLT5idWYsIHRtcGhkLT5idWYsIDMyKTsKKyAgICAgIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAodG1waGQpOworICAgIH0KKyAgaWYgKHJfZGxlbikKKyAgICAqcl9kbGVuID0gMzI7CisgIHJldHVybiAodm9pZCopaGQtPmJ1ZjsKK30KKworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSBITUFDLVNIQTI1NiBvZiBvbmUgZmlsZS4gIFRoZQorICAgdXNlciBuZWVkcyB0byBwcm92aWRlIGEgYnVmZmVyIFJFU1VMVCBvZiBhdCBsZWFzdCAzMiBieXRlcywgaGUKKyAgIG5lZWRzIHRvIHB1dCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGludG8gUkVTVUxUU0laRSBhbmQgdGhlCisgICBGSUxFTkFNRS4gIEtFWSBhbmQgS0VZTEVOIGFyZSBhcyBkZXNjcmliZWQgZm9yIF9nY3J5X2htYWMyNTZfbmV3LgorICAgT24gc3VjY2VzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgbGVuZ3RoIG9mIHRoZSByZXN1bHQKKyAgIGJ1ZmZlciAod2hpY2ggd2lsbCBiZSAzMikgb3IgLTEgb24gZXJyb3IuICBPbiBlcnJvciBFUlJOTyBpcyBzZXQKKyAgIGFwcHJvcHJpYXRlLiAgKi8KK2ludAorX2djcnlfaG1hYzI1Nl9maWxlICh2b2lkICpyZXN1bHQsIHNpemVfdCByZXN1bHRzaXplLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworICBGSUxFICpmcDsKKyAgaG1hYzI1Nl9jb250ZXh0X3QgaGQ7CisgIHNpemVfdCBidWZmZXJfc2l6ZSwgbnJlYWQsIGRpZ2VzdGxlbjsKKyAgY2hhciAqYnVmZmVyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisKKyAgZnAgPSBmb3BlbiAoZmlsZW5hbWUsICJyYiIpOworICBpZiAoIWZwKQorICAgIHJldHVybiAtMTsKKworICBoZCA9IF9nY3J5X2htYWMyNTZfbmV3IChrZXksIGtleWxlbik7CisgIGlmICghaGQpCisgICAgeworICAgICAgZmNsb3NlIChmcCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGJ1ZmZlcl9zaXplID0gMzI3Njg7CisgIGJ1ZmZlciA9IG1hbGxvYyAoYnVmZmVyX3NpemUpOworICBpZiAoIWJ1ZmZlcikKKyAgICB7CisgICAgICBmY2xvc2UgKGZwKTsKKyAgICAgIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAoaGQpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICB3aGlsZSAoIChucmVhZCA9IGZyZWFkIChidWZmZXIsIDEsIGJ1ZmZlcl9zaXplLCBmcCkpKQorICAgIF9nY3J5X2htYWMyNTZfdXBkYXRlIChoZCwgYnVmZmVyLCBucmVhZCk7CisKKyAgZnJlZSAoYnVmZmVyKTsKKworICBpZiAoZmVycm9yIChmcCkpCisgICAgeworICAgICAgZmNsb3NlIChmcCk7CisgICAgICBfZ2NyeV9obWFjMjU2X3JlbGVhc2UgKGhkKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgZmNsb3NlIChmcCk7CisKKyAgZGlnZXN0ID0gX2djcnlfaG1hYzI1Nl9maW5hbGl6ZSAoaGQsICZkaWdlc3RsZW4pOworICBpZiAoIWRpZ2VzdCkKKyAgICB7CisgICAgICBfZ2NyeV9obWFjMjU2X3JlbGVhc2UgKGhkKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKGRpZ2VzdGxlbiA+IHJlc3VsdHNpemUpCisgICAgeworICAgICAgX2djcnlfaG1hYzI1Nl9yZWxlYXNlIChoZCk7CisgICAgICBncGdfZXJyX3NldF9lcnJubyAoRUlOVkFMKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIG1lbWNweSAocmVzdWx0LCBkaWdlc3QsIGRpZ2VzdGxlbik7CisgIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAoaGQpOworCisgIHJldHVybiBkaWdlc3RsZW47Cit9CisKKworCisjaWZkZWYgU1RBTkRBTE9ORQorc3RhdGljIGludAorc2VsZnRlc3QgKHZvaWQpCit7CisgIHN0YXRpYyBzdHJ1Y3QKKyAgeworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkZXNjOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkYXRhOworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBrZXk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBleHBlY3RbMzJdOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIHsgImRhdGEtMjgga2V5LTQiLAorICAgICAgICAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCisgICAgICAgICJKZWZlIiwKKwl7IDB4NWIsIDB4ZGMsIDB4YzEsIDB4NDYsIDB4YmYsIDB4NjAsIDB4NzUsIDB4NGUsCisgICAgICAgICAgMHg2YSwgMHgwNCwgMHgyNCwgMHgyNiwgMHgwOCwgMHg5NSwgMHg3NSwgMHhjNywKKyAgICAgICAgICAweDVhLCAweDAwLCAweDNmLCAweDA4LCAweDlkLCAweDI3LCAweDM5LCAweDgzLAorICAgICAgICAgIDB4OWQsIDB4ZWMsIDB4NTgsIDB4YjksIDB4NjQsIDB4ZWMsIDB4MzgsIDB4NDMgfSB9LAorCisgICAgICB7ICJkYXRhLTkga2V5LTIwIiwKKyAgICAgICAgIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGIiLAorICAgICAgICB7IDB4YjAsIDB4MzQsIDB4NGMsIDB4NjEsIDB4ZDgsIDB4ZGIsIDB4MzgsIDB4NTMsCisgICAgICAgICAgMHg1YywgMHhhOCwgMHhhZiwgMHhjZSwgMHhhZiwgMHgwYiwgMHhmMSwgMHgyYiwKKyAgICAgICAgICAweDg4LCAweDFkLCAweGMyLCAweDAwLCAweGM5LCAweDgzLCAweDNkLCAweGE3LAorICAgICAgICAgIDB4MjYsIDB4ZTksIDB4MzcsIDB4NmMsIDB4MmUsIDB4MzIsIDB4Y2YsIDB4ZjcgfSB9LAorCisgICAgICB7ICJkYXRhLTUwIGtleS0yMCIsCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZCIsCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhIiwKKyAgICAgICAgeyAweDc3LCAweDNlLCAweGE5LCAweDFlLCAweDM2LCAweDgwLCAweDBlLCAweDQ2LAorICAgICAgICAgIDB4ODUsIDB4NGQsIDB4YjgsIDB4ZWIsIDB4ZDAsIDB4OTEsIDB4ODEsIDB4YTcsCisgICAgICAgICAgMHgyOSwgMHg1OSwgMHgwOSwgMHg4YiwgMHgzZSwgMHhmOCwgMHhjMSwgMHgyMiwKKyAgICAgICAgICAweGQ5LCAweDYzLCAweDU1LCAweDE0LCAweGNlLCAweGQ1LCAweDY1LCAweGZlIH0gfSwKKworICAgICAgeyAiZGF0YS01MCBrZXktMjYiLAorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorICAgICAgICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKwl7IDB4ODIsIDB4NTUsIDB4OGEsIDB4MzgsIDB4OWEsIDB4NDQsIDB4M2MsIDB4MGUsCisgICAgICAgICAgMHhhNCwgMHhjYywgMHg4MSwgMHg5OCwgMHg5OSwgMHhmMiwgMHgwOCwgMHgzYSwKKyAgICAgICAgICAweDg1LCAweGYwLCAweGZhLCAweGEzLCAweGU1LCAweDc4LCAweGY4LCAweDA3LAorICAgICAgICAgIDB4N2EsIDB4MmUsIDB4M2YsIDB4ZjQsIDB4NjcsIDB4MjksIDB4NjYsIDB4NWIgfSB9LAorCisgICAgICB7ICJkYXRhLTU0IGtleS0xMzEiLAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorCXsgMHg2MCwgMHhlNCwgMHgzMSwgMHg1OSwgMHgxZSwgMHhlMCwgMHhiNiwgMHg3ZiwKKyAgICAgICAgICAweDBkLCAweDhhLCAweDI2LCAweGFhLCAweGNiLCAweGY1LCAweGI3LCAweDdmLAorICAgICAgICAgIDB4OGUsIDB4MGIsIDB4YzYsIDB4MjEsIDB4MzcsIDB4MjgsIDB4YzUsIDB4MTQsCisgICAgICAgICAgMHgwNSwgMHg0NiwgMHgwNCwgMHgwZiwgMHgwZSwgMHhlMywgMHg3ZiwgMHg1NCB9IH0sCisKKyAgICAgIHsgImRhdGEtMTUyIGtleS0xMzEiLAorICAgICAgICAiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgIgorICAgICAgICAidGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyAiCisgICAgICAgICJ1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYSIsCisJeyAweDliLCAweDA5LCAweGZmLCAweGE3LCAweDFiLCAweDk0LCAweDJmLCAweGNiLAorICAgICAgICAgIDB4MjcsIDB4NjMsIDB4NWYsIDB4YmMsIDB4ZDUsIDB4YjAsIDB4ZTksIDB4NDQsCisgICAgICAgICAgMHhiZiwgMHhkYywgMHg2MywgMHg2NCwgMHg0ZiwgMHgwNywgMHgxMywgMHg5MywKKyAgICAgICAgICAweDhhLCAweDdmLCAweDUxLCAweDUzLCAweDVjLCAweDNhLCAweDM1LCAweGUyIH0gfSwKKworICAgICAgeyBOVUxMIH0KKyAgICB9OworICBpbnQgdHZpZHg7CisKKyAgZm9yICh0dmlkeD0wOyB0dlt0dmlkeF0uZGVzYzsgdHZpZHgrKykKKyAgICB7CisgICAgICBobWFjMjU2X2NvbnRleHRfdCBobWFjaGQ7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgICAgICBzaXplX3QgZGxlbjsKKworICAgICAgaG1hY2hkID0gX2djcnlfaG1hYzI1Nl9uZXcgKHR2W3R2aWR4XS5rZXksIHN0cmxlbiAodHZbdHZpZHhdLmtleSkpOworICAgICAgaWYgKCFobWFjaGQpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIF9nY3J5X2htYWMyNTZfdXBkYXRlIChobWFjaGQsIHR2W3R2aWR4XS5kYXRhLCBzdHJsZW4gKHR2W3R2aWR4XS5kYXRhKSk7CisgICAgICBkaWdlc3QgPSBfZ2NyeV9obWFjMjU2X2ZpbmFsaXplIChobWFjaGQsICZkbGVuKTsKKyAgICAgIGlmICghZGlnZXN0KQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfaG1hYzI1Nl9yZWxlYXNlIChobWFjaGQpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgaWYgKGRsZW4gIT0gc2l6ZW9mICh0dlt0dmlkeF0uZXhwZWN0KQorICAgICAgICAgIHx8IG1lbWNtcCAoZGlnZXN0LCB0dlt0dmlkeF0uZXhwZWN0LCBzaXplb2YgKHR2W3R2aWR4XS5leHBlY3QpKSkKKyAgICAgICAgeworICAgICAgICAgIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAoaG1hY2hkKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAoaG1hY2hkKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7IC8qIFN1Y2NlZWRlZC4gKi8KK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgY29uc3QgY2hhciAqcGdtOworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGNvbnN0IGNoYXIgKmtleTsKKyAgc2l6ZV90IGtleWxlbjsKKyAgRklMRSAqZnA7CisgIGhtYWMyNTZfY29udGV4dF90IGhkOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIGNoYXIgYnVmZmVyWzQwOTZdOworICBzaXplX3QgbiwgZGxlbiwgaWR4OworICBpbnQgdXNlX3N0ZGluID0gMDsKKyAgaW50IHVzZV9iaW5hcnkgPSAwOworCisgIGFzc2VydCAoc2l6ZW9mICh1MzIpID09IDQpOworI2lmZGVmIF9fV0lOMzIKKyAgc2V0bW9kZSAoZmlsZW5vIChzdGRpbiksIE9fQklOQVJZKTsKKyNlbmRpZgorCisgIGlmIChhcmdjKQorICAgIHsKKyAgICAgIHBnbSA9IHN0cnJjaHIgKCphcmd2LCAnLycpOworICAgICAgaWYgKHBnbSkKKyAgICAgICAgcGdtKys7CisgICAgICBlbHNlCisgICAgICAgIHBnbSA9ICphcmd2OworICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgfQorICBlbHNlCisgICAgcGdtID0gIj8iOworCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyc2lvbiIpKQorICAgICAgICB7CisgICAgICAgICAgZnB1dHMgKCJobWFjMjU2IChMaWJnY3J5cHQpICIgVkVSU0lPTiAiXG4iCisgICAgICAgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisgICAgICAgICAgICAgICAgICJMaWNlbnNlIExHUEx2Mi4xKzogR05VIExHUEwgdmVyc2lvbiAyLjEgb3IgbGF0ZXIgIgorICAgICAgICAgICAgICAgICAiPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sPlxuIgorICAgICAgICAgICAgICAgICAiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCAiCisgICAgICAgICAgICAgICAgICJyZWRpc3RyaWJ1dGUgaXQuXG4iCisgICAgICAgICAgICAgICAgICJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIiwKKyAgICAgICAgICAgICAgICAgc3Rkb3V0KTsKKyAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWJpbmFyeSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgdXNlX2JpbmFyeSA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGFyZ2MgPCAxKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLS1iaW5hcnldIGtleSBbZmlsZW5hbWVdXG4iLCBwZ20pOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisjaWZkZWYgX19XSU4zMgorICBpZiAodXNlX2JpbmFyeSkKKyAgICBzZXRtb2RlIChmaWxlbm8gKHN0ZG91dCksIE9fQklOQVJZKTsKKyNlbmRpZgorCisgIGtleSA9ICphcmd2OworICBhcmdjLS0sIGFyZ3YrKzsKKyAga2V5bGVuID0gc3RybGVuIChrZXkpOworICB1c2Vfc3RkaW4gPSAhYXJnYzsKKworICBpZiAoc2VsZnRlc3QgKCkpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGZhdGFsIGVycm9yOiBzZWxmLXRlc3QgZmFpbGVkXG4iLCBwZ20pOworICAgICAgZXhpdCAoMik7CisgICAgfQorCisgIGZvciAoOyBhcmdjIHx8IHVzZV9zdGRpbjsgYXJndisrLCBhcmdjLS0pCisgICAgeworICAgICAgY29uc3QgY2hhciAqZm5hbWUgPSB1c2Vfc3RkaW4/ICItIiA6ICphcmd2OworICAgICAgZnAgPSB1c2Vfc3RkaW4/IHN0ZGluIDogZm9wZW4gKGZuYW1lLCAicmIiKTsKKyAgICAgIGlmICghZnApCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiBgJXMnOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBwZ20sIGZuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorICAgICAgaGQgPSBfZ2NyeV9obWFjMjU2X25ldyAoa2V5LCBrZXlsZW4pOworICAgICAgaWYgKCFoZCkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW4ndCBhbGxvY2F0ZSBjb250ZXh0OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBwZ20sIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisgICAgICB3aGlsZSAoIChuID0gZnJlYWQgKGJ1ZmZlciwgMSwgc2l6ZW9mIGJ1ZmZlciwgZnApKSkKKyAgICAgICAgX2djcnlfaG1hYzI1Nl91cGRhdGUgKGhkLCBidWZmZXIsIG4pOworICAgICAgaWYgKGZlcnJvciAoZnApKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGVycm9yIHJlYWRpbmcgYCVzJzogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcGdtLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKyAgICAgIGlmICghdXNlX3N0ZGluKQorICAgICAgICBmY2xvc2UgKGZwKTsKKworICAgICAgZGlnZXN0ID0gX2djcnlfaG1hYzI1Nl9maW5hbGl6ZSAoaGQsICZkbGVuKTsKKyAgICAgIGlmICghZGlnZXN0KQorICAgICAgICB7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGVycm9yIGNvbXB1dGluZyBITUFDOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBwZ20sIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisgICAgICBpZiAodXNlX2JpbmFyeSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChmd3JpdGUgKGRpZ2VzdCwgZGxlbiwgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogZXJyb3Igd3JpdGluZyBvdXRwdXQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBwZ20sIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodXNlX3N0ZGluKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGZvciAoaWR4PTA7IGlkeCA8IGRsZW47IGlkeCsrKQorICAgICAgICAgICAgcHJpbnRmICgiJTAyeCIsIGRpZ2VzdFtpZHhdKTsKKyAgICAgICAgICBfZ2NyeV9obWFjMjU2X3JlbGVhc2UgKGhkKTsKKyAgICAgICAgICBpZiAodXNlX3N0ZGluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgcHJpbnRmICgiICAlc1xuIiwgZm5hbWUpOworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorI2VuZGlmIC8qU1RBTkRBTE9ORSovCisKKworLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvbXBpbGUtY29tbWFuZDogImNjIC1XYWxsIC1nIC1JLi4gLURTVEFOREFMT05FIC1vIGhtYWMyNTYgaG1hYzI1Ni5jIgorRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9obWFjMjU2LmggYi9zcmMvaG1hYzI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjhlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaG1hYzI1Ni5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGhtYWMyNTYuaCAtIERlY2xhcmF0aW9ucyBmb3IgX2djcnlfaG1hYzI1NgorICoJQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEhNQUMyNTZfSAorI2RlZmluZSBITUFDMjU2X0gKKworCitzdHJ1Y3QgaG1hYzI1Nl9jb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgaG1hYzI1Nl9jb250ZXh0ICpobWFjMjU2X2NvbnRleHRfdDsKKworaG1hYzI1Nl9jb250ZXh0X3QgX2djcnlfaG1hYzI1Nl9uZXcgKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7Cit2b2lkIF9nY3J5X2htYWMyNTZfdXBkYXRlIChobWFjMjU2X2NvbnRleHRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2NvbnN0IHZvaWQgKl9nY3J5X2htYWMyNTZfZmluYWxpemUgKGhtYWMyNTZfY29udGV4dF90IGhkLCBzaXplX3QgKnJfZGxlbik7Cit2b2lkIF9nY3J5X2htYWMyNTZfcmVsZWFzZSAoaG1hYzI1Nl9jb250ZXh0X3QgaGQpOworCitpbnQgX2djcnlfaG1hYzI1Nl9maWxlICh2b2lkICpyZXN1bHQsIHNpemVfdCByZXN1bHRzaXplLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CisKKworI2VuZGlmIC8qSE1BQzI1Nl9IKi8KZGlmZiAtLWdpdCBhL3NyYy9od2YtYXJtLmMgYi9zcmMvaHdmLWFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaHdmLWFybS5jCkBAIC0wLDAgKzEsMTE1IEBACisvKiBod2YtYXJtLmMgLSBEZXRlY3QgaGFyZHdhcmUgZmVhdHVyZXMgLSBBUk0gcGFydAorICogQ29weXJpZ2h0IMKpIDIwMTMgIEp1c3NpIEtpdmlsaW5uYSA8anVzc2kua2l2aWxpbm5hQGlraS5maT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJod2YtY29tbW9uLmgiCisKKyNpZiAhZGVmaW5lZCAoX19hcm1fXykKKyMgZXJyb3IgTW9kdWxlIGJ1aWxkIGZvciB3cm9uZyBDUFUuCisjZW5kaWYKKworI3VuZGVmIEhBU19TWVNfQVRfSFdDQVAKKyNpZmRlZiBfX2xpbnV4X18KKworI2RlZmluZSBIQVNfU1lTX0FUX0hXQ0FQIDEKKworI2RlZmluZSBBVF9IV0NBUCAxNgorI2RlZmluZSBIV0NBUF9ORU9OIDQwOTYKKworc3RhdGljIGludAorZ2V0X2h3Y2FwKHVuc2lnbmVkIGludCAqaHdjYXApCit7CisgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBhX3R5cGU7IHVuc2lnbmVkIGludCBhX3ZhbDsgfSBhdXh2OworICBGSUxFICpmOworICBpbnQgZXJyID0gLTE7CisgIHN0YXRpYyBpbnQgaHdjYXBfaW5pdGlhbGl6ZWQgPSAwOworICBzdGF0aWMgdW5zaWduZWQgaW50IHN0b3JlZF9od2NhcDsKKworICBpZiAoaHdjYXBfaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgKmh3Y2FwID0gc3RvcmVkX2h3Y2FwOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGYgPSBmb3BlbigiL3Byb2Mvc2VsZi9hdXh2IiwgInIiKTsKKyAgaWYgKCFmKQorICAgIHsKKyAgICAgICpod2NhcCA9IHN0b3JlZF9od2NhcDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgd2hpbGUgKGZyZWFkKCZhdXh2LCBzaXplb2YoYXV4diksIDEsIGYpID4gMCkKKyAgICB7CisgICAgICBpZiAoYXV4di5hX3R5cGUgIT0gQVRfSFdDQVApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBzdG9yZWRfaHdjYXAgPSBhdXh2LmFfdmFsOworICAgICAgaHdjYXBfaW5pdGlhbGl6ZWQgPSAxOworICAgICAgZXJyID0gMDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICBmY2xvc2UoZik7CisgICpod2NhcCA9IHN0b3JlZF9od2NhcDsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZGV0ZWN0X2FybV9hdF9od2NhcCh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgaHdjYXA7CisgIHVuc2lnbmVkIGludCBmZWF0dXJlcyA9IDA7CisKKyAgaWYgKGdldF9od2NhcCgmaHdjYXApIDwgMCkKKyAgICByZXR1cm4gZmVhdHVyZXM7CisKKyNpZmRlZiBFTkFCTEVfTkVPTl9TVVBQT1JUCisgIGlmIChod2NhcCAmIEhXQ0FQX05FT04pCisgICAgZmVhdHVyZXMgfD0gSFdGX0FSTV9ORU9OOworI2VuZGlmCisKKyAgcmV0dXJuIGZlYXR1cmVzOworfQorCisjZW5kaWYgLyogX19saW51eF9fICovCisKK3Vuc2lnbmVkIGludAorX2djcnlfaHdmX2RldGVjdF9hcm0gKHZvaWQpCit7CisgIHVuc2lnbmVkIGludCByZXQgPSAwOworCisjaWYgZGVmaW5lZCAoSEFTX1NZU19BVF9IV0NBUCkKKyAgcmV0IHw9IGRldGVjdF9hcm1fYXRfaHdjYXAgKCk7CisjZWxzZQorICByZXQgfD0gMDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FSTV9ORU9OX18pICYmIGRlZmluZWQoRU5BQkxFX05FT05fU1VQUE9SVCkKKyAgcmV0IHw9IEhXRl9BUk1fTkVPTjsKKyNlbmRpZgorCisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvaHdmLWNvbW1vbi5oIGIvc3JjL2h3Zi1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjE1NmI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2h3Zi1jb21tb24uaApAQCAtMCwwICsxLDI3IEBACisvKiBod2YtY29tbW9uLmggLSBEZWNsYXJhdGlvbnMgZm9yIGh3Zi1DUFUuYyBtb2R1bGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIV0ZfQ09NTU9OX0gKKyNkZWZpbmUgSFdGX0NPTU1PTl9ICisKK3Vuc2lnbmVkIGludCBfZ2NyeV9od2ZfZGV0ZWN0X3g4NiAodm9pZCk7Cit1bnNpZ25lZCBpbnQgX2djcnlfaHdmX2RldGVjdF9hcm0gKHZvaWQpOworCisKKyNlbmRpZiAvKkhXRl9DT01NT05fSCovCmRpZmYgLS1naXQgYS9zcmMvaHdmLXg4Ni5jIGIvc3JjL2h3Zi14ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTkxYjRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2h3Zi14ODYuYwpAQCAtMCwwICsxLDMwNiBAQAorLyogaHdmLXg4Ni5jIC0gRGV0ZWN0IGhhcmR3YXJlIGZlYXR1cmVzIC0geDg2IHBhcnQKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMSwgMjAxMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIEp1c3NpIEtpdmlsaW5uYQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgImh3Zi1jb21tb24uaCIKKworI2lmICFkZWZpbmVkIChfX2kzODZfXykgJiYgIWRlZmluZWQgKF9feDg2XzY0X18pCisjIGVycm9yIE1vZHVsZSBidWlsZCBmb3Igd3JvbmcgQ1BVLgorI2VuZGlmCisKKy8qIFdlIHVzZSB0aGUgbmV4dCBtYWNybyB0byBkZWNpZGUgd2hldGhlciB3ZSBjYW4gdGVzdCBmb3IgY2VydGFpbgorICAgZmVhdHVyZXMuICAqLworI3VuZGVmIEhBU19YODZfQ1BVSUQKKworI2lmIGRlZmluZWQgKF9faTM4Nl9fKSAmJiBTSVpFT0ZfVU5TSUdORURfTE9ORyA9PSA0ICYmIGRlZmluZWQgKF9fR05VQ19fKQorIyBkZWZpbmUgSEFTX1g4Nl9DUFVJRCAxCisKK3N0YXRpYyBpbnQKK2lzX2NwdWlkX2F2YWlsYWJsZSh2b2lkKQoreworICBpbnQgaGFzX2NwdWlkID0gMDsKKworICAvKiBEZXRlY3QgdGhlIENQVUlEIGZlYXR1cmUgYnkgdGVzdGluZyBzb21lIHVuZGVmaW5lZCBiZWhhdmlvdXIgKDE2CisgICAgIHZzIDMyIGJpdCBwdXNoZi9wb3BmKS4gKi8KKyAgYXNtIHZvbGF0aWxlCisgICAgKCJwdXNoZlxuXHQiICAgICAgICAgICAgICAgICAvKiBDb3B5IGZsYWdzIHRvIEVBWC4gICovCisgICAgICJwb3BsICUlZWF4XG5cdCIKKyAgICAgIm1vdmwgJSVlYXgsICUlZWN4XG5cdCIgICAgIC8qIFNhdmUgZmxhZ3MgaW50byBFQ1guICAqLworICAgICAieG9ybCAkMHgyMDAwMDAsICUlZWF4XG5cdCIgLyogVG9nZ2xlIElEIGJpdCBhbmQgY29weSBpdCB0byB0aGUgZmxhZ3MuICAqLworICAgICAicHVzaGwgJSVlYXhcblx0IgorICAgICAicG9wZlxuXHQiCisgICAgICJwdXNoZlxuXHQiICAgICAgICAgICAgICAgICAvKiBDb3B5IGNoYW5nZWQgZmxhZ3MgYWdhaW4gdG8gRUFYLiAgKi8KKyAgICAgInBvcGwgJSVlYXhcblx0IgorICAgICAicHVzaGwgJSVlY3hcblx0IiAgICAgICAgICAgLyogUmVzdG9yZSBmbGFncyBmcm9tIEVDWC4gICovCisgICAgICJwb3BmXG5cdCIKKyAgICAgInhvcmwgJSVlYXgsICUlZWN4XG5cdCIgICAgIC8qIENvbXBhcmUgZmxhZ3MgYWdhaW5zdCBzYXZlZCBmbGFncy4gICovCisgICAgICJqeiAuTG5vX2NwdWlkJT1cblx0IiAgICAgICAvKiBUb2dnbGluZyBkaWQgbm90IHdvcmssIHRodXMgbm8gQ1BVSUQuICAqLworICAgICAibW92bCAkMSwgJTBcbiIgICAgICAgICAgICAgLyogV29ya2VkLiB0cnVlIC0+IEhBU19DUFVJRC4gICovCisgICAgICIuTG5vX2NwdWlkJT06XG5cdCIKKyAgICAgOiAiK3IiIChoYXNfY3B1aWQpCisgICAgIDoKKyAgICAgOiAiJWVheCIsICIlZWN4IiwgImNjIgorICAgICApOworCisgIHJldHVybiBoYXNfY3B1aWQ7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfY3B1aWQodW5zaWduZWQgaW50IGluLCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCisgICAgICAgICAgdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KQoreworICB1bnNpZ25lZCBpbnQgcmVnc1s0XTsKKworICBhc20gdm9sYXRpbGUKKyAgICAoInB1c2hsICUlZWJ4XG5cdCIgICAgICAgICAgIC8qIFNhdmUgR09UIHJlZ2lzdGVyLiAgKi8KKyAgICAgIm1vdmwgJTEsICUlZWJ4XG5cdCIKKyAgICAgImNwdWlkXG5cdCIKKyAgICAgIm1vdmwgJSVlYngsICUxXG5cdCIKKyAgICAgInBvcGwgJSVlYnhcblx0IiAgICAgICAgICAgIC8qIFJlc3RvcmUgR09UIHJlZ2lzdGVyLiAqLworICAgICA6ICI9YSIgKHJlZ3NbMF0pLCAiPXIiIChyZWdzWzFdKSwgIj1jIiAocmVnc1syXSksICI9ZCIgKHJlZ3NbM10pCisgICAgIDogIjAiIChpbiksICIxIiAoMCksICIyIiAoMCksICIzIiAoMCkKKyAgICAgOiAiY2MiCisgICAgICk7CisKKyAgaWYgKGVheCkKKyAgICAqZWF4ID0gcmVnc1swXTsKKyAgaWYgKGVieCkKKyAgICAqZWJ4ID0gcmVnc1sxXTsKKyAgaWYgKGVjeCkKKyAgICAqZWN4ID0gcmVnc1syXTsKKyAgaWYgKGVkeCkKKyAgICAqZWR4ID0gcmVnc1szXTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X3hnZXRidih2b2lkKQoreworICB1bnNpZ25lZCBpbnQgdF9lYXg7CisKKyAgYXNtIHZvbGF0aWxlCisgICAgKCJ4Z2V0YnZcblx0IgorICAgICA6ICI9YSIgKHRfZWF4KQorICAgICA6ICJjIiAoMCkKKyAgICApOworCisgIHJldHVybiB0X2VheDsKK30KKworI2VuZGlmIC8qIGkzODYgJiYgR05VQyAqLworCisKKyNpZiBkZWZpbmVkIChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIChfX0dOVUNfXykKKyMgZGVmaW5lIEhBU19YODZfQ1BVSUQgMQorCitzdGF0aWMgaW50Citpc19jcHVpZF9hdmFpbGFibGUodm9pZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfY3B1aWQodW5zaWduZWQgaW50IGluLCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCisgICAgICAgICAgdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KQoreworICB1bnNpZ25lZCBpbnQgcmVnc1s0XTsKKworICBhc20gdm9sYXRpbGUKKyAgICAoImNwdWlkXG5cdCIKKyAgICAgOiAiPWEiIChyZWdzWzBdKSwgIj1iIiAocmVnc1sxXSksICI9YyIgKHJlZ3NbMl0pLCAiPWQiIChyZWdzWzNdKQorICAgICA6ICIwIiAoaW4pLCAiMSIgKDApLCAiMiIgKDApLCAiMyIgKDApCisgICAgIDogImNjIgorICAgICApOworCisgIGlmIChlYXgpCisgICAgKmVheCA9IHJlZ3NbMF07CisgIGlmIChlYngpCisgICAgKmVieCA9IHJlZ3NbMV07CisgIGlmIChlY3gpCisgICAgKmVjeCA9IHJlZ3NbMl07CisgIGlmIChlZHgpCisgICAgKmVkeCA9IHJlZ3NbM107Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldF94Z2V0YnYodm9pZCkKK3sKKyAgdW5zaWduZWQgaW50IHRfZWF4OworCisgIGFzbSB2b2xhdGlsZQorICAgICgieGdldGJ2XG5cdCIKKyAgICAgOiAiPWEiICh0X2VheCkKKyAgICAgOiAiYyIgKDApCisgICAgKTsKKworICByZXR1cm4gdF9lYXg7Cit9CisKKyNlbmRpZiAvKiB4ODYtNjQgJiYgR05VQyAqLworCisKKyNpZmRlZiBIQVNfWDg2X0NQVUlECitzdGF0aWMgdW5zaWduZWQgaW50CitkZXRlY3RfeDg2X2dudWMgKHZvaWQpCit7CisgIGNoYXIgdmVuZG9yX2lkWzEyKzFdOworICB1bnNpZ25lZCBpbnQgZmVhdHVyZXM7CisgIHVuc2lnbmVkIGludCBvc19zdXBwb3J0c19hdnhfYXZ4Ml9yZWdpc3RlcnMgPSAwOworICB1bnNpZ25lZCBpbnQgbWF4X2NwdWlkX2xldmVsOworICB1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKworICAodm9pZClvc19zdXBwb3J0c19hdnhfYXZ4Ml9yZWdpc3RlcnM7CisKKyAgaWYgKCFpc19jcHVpZF9hdmFpbGFibGUoKSkKKyAgICByZXR1cm4gMDsKKworICBnZXRfY3B1aWQoMCwgJm1heF9jcHVpZF9sZXZlbCwKKyAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgKikmdmVuZG9yX2lkWzBdLAorICAgICAgICAgICAgKHVuc2lnbmVkIGludCAqKSZ2ZW5kb3JfaWRbOF0sCisgICAgICAgICAgICAodW5zaWduZWQgaW50ICopJnZlbmRvcl9pZFs0XSk7CisgIHZlbmRvcl9pZFsxMl0gPSAwOworCisgIGlmICgwKQorICAgIDsgLyogSnVzdCB0byBtYWtlICJlbHNlIGlmIiBhbmQgaWZkZWYgbWFjcm9zIGxvb2sgcHJldHR5LiAgKi8KKyNpZmRlZiBFTkFCTEVfUEFETE9DS19TVVBQT1JUCisgIGVsc2UgaWYgKCFzdHJjbXAgKHZlbmRvcl9pZCwgIkNlbnRhdXJIYXVscyIpKQorICAgIHsKKyAgICAgIC8qIFRoaXMgaXMgYSBWSUEgQ1BVLiAgQ2hlY2sgd2hhdCBQYWRMb2NrIGZlYXR1cmVzIHdlIGhhdmUuICAqLworCisgICAgICAvKiBDaGVjayBmb3IgZXh0ZW5kZWQgY2VudGF1ciAoRUFYKS4gICovCisgICAgICBnZXRfY3B1aWQoMHhDMDAwMDAwMCwgJmZlYXR1cmVzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgICAgLyogSGFzIGV4dGVuZGVkIGNlbnRhdXIgZmVhdHVyZXM/ICovCisgICAgICBpZiAoZmVhdHVyZXMgPiAweEMwMDAwMDAwKQorICAgICAgICB7CisgICAgICAgICAgIC8qIEFzayBmb3IgdGhlIGV4dGVuZGVkIGZlYXR1cmUgZmxhZ3MgKEVEWCkuICovCisgICAgICAgICAgIGdldF9jcHVpZCgweEMwMDAwMDAxLCBOVUxMLCBOVUxMLCBOVUxMLCAmZmVhdHVyZXMpOworCisgICAgICAgICAgIC8qIFRlc3QgYml0cyAyIGFuZCAzIHRvIHNlZSB3aGV0aGVyIHRoZSBSTkcgZXhpc3RzIGFuZCBpcyBlbmFibGVkLiAqLworICAgICAgICAgICBpZiAoKGZlYXR1cmVzICYgMHgwQykgPT0gMHgwQykKKyAgICAgICAgICAgICByZXN1bHQgfD0gSFdGX1BBRExPQ0tfUk5HOworCisgICAgICAgICAgIC8qIFRlc3QgYml0cyA2IGFuZCA3IHRvIHNlZSB3aGV0aGVyIHRoZSBBQ0UgZXhpc3RzIGFuZCBpcyBlbmFibGVkLiAqLworICAgICAgICAgICBpZiAoKGZlYXR1cmVzICYgMHhDMCkgPT0gMHhDMCkKKyAgICAgICAgICAgICByZXN1bHQgfD0gSFdGX1BBRExPQ0tfQUVTOworCisgICAgICAgICAgIC8qIFRlc3QgYml0cyAxMCBhbmQgMTEgdG8gc2VlIHdoZXRoZXIgdGhlIFBIRSBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgIGVuYWJsZWQuICAqLworICAgICAgICAgICBpZiAoKGZlYXR1cmVzICYgMHhDMDApID09IDB4QzAwKQorICAgICAgICAgICAgIHJlc3VsdCB8PSBIV0ZfUEFETE9DS19TSEE7CisKKyAgICAgICAgICAgLyogVGVzdCBiaXRzIDEyIGFuZCAxMyB0byBzZWUgd2hldGhlciB0aGUgTU9OVE1VTCBleGlzdHMgYW5kIGlzCisgICAgICAgICAgICAgIGVuYWJsZWQuICAqLworICAgICAgICAgICBpZiAoKGZlYXR1cmVzICYgMHgzMDAwKSA9PSAweDMwMDApCisgICAgICAgICAgICAgcmVzdWx0IHw9IEhXRl9QQURMT0NLX01NVUw7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLypFTkFCTEVfUEFETE9DS19TVVBQT1JUKi8KKyAgZWxzZSBpZiAoIXN0cmNtcCAodmVuZG9yX2lkLCAiR2VudWluZUludGVsIikpCisgICAgeworICAgICAgLyogVGhpcyBpcyBhbiBJbnRlbCBDUFUuICAqLworICAgICAgcmVzdWx0IHw9IEhXRl9JTlRFTF9DUFU7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wICh2ZW5kb3JfaWQsICJBdXRoZW50aWNBTUQiKSkKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIGFuIEFNRCBDUFUuICAqLworICAgIH0KKworICAvKiBEZXRlY3QgSW50ZWwgZmVhdHVyZXMsIHRoYXQgbWlnaHQgYWxzbyBiZSBzdXBwb3J0ZWQgYnkgb3RoZXIKKyAgICAgdmVuZG9ycy4gICovCisKKyAgLyogR2V0IENQVSBpbmZvIGFuZCBJbnRlbCBmZWF0dXJlIGZsYWdzIChFQ1gpLiAgKi8KKyAgZ2V0X2NwdWlkKDEsIE5VTEwsIE5VTEwsICZmZWF0dXJlcywgTlVMTCk7CisKKyNpZmRlZiBFTkFCTEVfUENMTVVMX1NVUFBPUlQKKyAgLyogVGVzdCBiaXQgMSBmb3IgUENMTVVMLiAgKi8KKyAgaWYgKGZlYXR1cmVzICYgMHgwMDAwMDAwMikKKyAgICAgcmVzdWx0IHw9IEhXRl9JTlRFTF9QQ0xNVUw7CisjZW5kaWYKKyAgLyogVGVzdCBiaXQgOSBmb3IgU1NTRTMuICAqLworICBpZiAoZmVhdHVyZXMgJiAweDAwMDAwMjAwKQorICAgICByZXN1bHQgfD0gSFdGX0lOVEVMX1NTU0UzOworI2lmZGVmIEVOQUJMRV9BRVNOSV9TVVBQT1JUCisgIC8qIFRlc3QgYml0IDI1IGZvciBBRVMtTkkuICAqLworICBpZiAoZmVhdHVyZXMgJiAweDAyMDAwMDAwKQorICAgICByZXN1bHQgfD0gSFdGX0lOVEVMX0FFU05JOworI2VuZGlmIC8qRU5BQkxFX0FFU05JX1NVUFBPUlQqLworI2lmIGRlZmluZWQoRU5BQkxFX0FWWF9TVVBQT1JUKSB8fCBkZWZpbmVkKEVOQUJMRV9BVlgyX1NVUFBPUlQpCisgIC8qIFRlc3QgYml0IDI3IGZvciBPU1hTQVZFIChyZXF1aXJlZCBmb3IgQVZYL0FWWDIpLiAgKi8KKyAgaWYgKGZlYXR1cmVzICYgMHgwODAwMDAwMCkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGF0IE9TIGhhcyBlbmFibGVkIGJvdGggWE1NIGFuZCBZTU0gc3RhdGUgc3VwcG9ydC4gICovCisgICAgICBpZiAoKGdldF94Z2V0YnYoKSAmIDB4NikgPT0gMHg2KQorICAgICAgICBvc19zdXBwb3J0c19hdnhfYXZ4Ml9yZWdpc3RlcnMgPSAxOworICAgIH0KKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9BVlhfU1VQUE9SVAorICAvKiBUZXN0IGJpdCAyOCBmb3IgQVZYLiAgKi8KKyAgaWYgKGZlYXR1cmVzICYgMHgxMDAwMDAwMCkKKyAgICBpZiAob3Nfc3VwcG9ydHNfYXZ4X2F2eDJfcmVnaXN0ZXJzKQorICAgICAgcmVzdWx0IHw9IEhXRl9JTlRFTF9BVlg7CisjZW5kaWYgLypFTkFCTEVfQVZYX1NVUFBPUlQqLworI2lmZGVmIEVOQUJMRV9EUk5HX1NVUFBPUlQKKyAgLyogVGVzdCBiaXQgMzAgZm9yIFJEUkFORC4gICovCisgIGlmIChmZWF0dXJlcyAmIDB4NDAwMDAwMDApCisgICAgIHJlc3VsdCB8PSBIV0ZfSU5URUxfUkRSQU5EOworI2VuZGlmIC8qRU5BQkxFX0RSTkdfU1VQUE9SVCovCisKKyAgLyogQ2hlY2sgYWRkaXRpb25hbCBJbnRlbCBmZWF0dXJlIGZsYWdzLiAgRWFybHkgSW50ZWwgUDUgcHJvY2Vzc29ycyByZXBvcnQKKyAgICogdG9vIGhpZ2ggbWF4X2NwdWlkX2xldmVsLCBzbyBkb24ndCBjaGVjayBsZXZlbCA3IGlmIHByb2Nlc3NvciBkb2VzIG5vdAorICAgKiBzdXBwb3J0IFNTRTMgKGFzIGNwdWlkOjcgY29udGFpbnMgb25seSBmZWF0dXJlcyBmb3IgbmV3ZXIgcHJvY2Vzc29ycykuCisgICAqIFNvdXJjZTogaHR0cDovL3d3dy5zYW5kcGlsZS5vcmcveDg2L2NwdWlkLmh0bSAgKi8KKyAgaWYgKG1heF9jcHVpZF9sZXZlbCA+PSA3ICYmIChmZWF0dXJlcyAmIDB4MDAwMDAwMDEpKQorICAgIHsKKyAgICAgIC8qIEdldCBDUFVJRDo3IGNvbnRhaW5zIGZ1cnRoZXIgSW50ZWwgZmVhdHVyZSBmbGFncy4gKi8KKyAgICAgIGdldF9jcHVpZCg3LCBOVUxMLCAmZmVhdHVyZXMsIE5VTEwsIE5VTEwpOworCisgICAgICAvKiBUZXN0IGJpdCA4IGZvciBCTUkyLiAgKi8KKyAgICAgIGlmIChmZWF0dXJlcyAmIDB4MDAwMDAxMDApCisgICAgICAgICAgcmVzdWx0IHw9IEhXRl9JTlRFTF9CTUkyOworCisjaWZkZWYgRU5BQkxFX0FWWDJfU1VQUE9SVAorICAgICAgLyogVGVzdCBiaXQgNSBmb3IgQVZYMi4gICovCisgICAgICBpZiAoZmVhdHVyZXMgJiAweDAwMDAwMDIwKQorICAgICAgICBpZiAob3Nfc3VwcG9ydHNfYXZ4X2F2eDJfcmVnaXN0ZXJzKQorICAgICAgICAgIHJlc3VsdCB8PSBIV0ZfSU5URUxfQVZYMjsKKyNlbmRpZiAvKkVOQUJMRV9BVlhfU1VQUE9SVCovCisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogSEFTX1g4Nl9DUFVJRCAqLworCisKK3Vuc2lnbmVkIGludAorX2djcnlfaHdmX2RldGVjdF94ODYgKHZvaWQpCit7CisjaWYgZGVmaW5lZCAoSEFTX1g4Nl9DUFVJRCkKKyAgcmV0dXJuIGRldGVjdF94ODZfZ251YyAoKTsKKyNlbHNlCisgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvaHdmZWF0dXJlcy5jIGIvc3JjL2h3ZmVhdHVyZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA5OWM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2h3ZmVhdHVyZXMuYwpAQCAtMCwwICsxLDIwMSBAQAorLyogaHdmZWF0dXJlcy5jIC0gRGV0ZWN0IGhhcmR3YXJlIGZlYXR1cmVzLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDExICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfU1lTTE9HCisjIGluY2x1ZGUgPHN5c2xvZy5oPgorI2VuZGlmIC8qSEFWRV9TWVNMT0cqLworCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAiaHdmLWNvbW1vbi5oIgorCisvKiBUaGUgbmFtZSBvZiBhIGZpbGUgdXNlZCB0byBnbG9iYWxseSBkaXNhYmxlIHNlbGVjdGVkIGZlYXR1cmVzLiAqLworI2RlZmluZSBIV0ZfREVOWV9GSUxFICIvZXRjL2djcnlwdC9od2YuZGVueSIKKworLyogQSB0YWJsZSB0byBtYXAgaGFyZHdhcmUgZmVhdHVyZXMgdG8gYSBzdHJpbmcuICAqLworc3RhdGljIHN0cnVjdAoreworICB1bnNpZ25lZCBpbnQgZmxhZzsKKyAgY29uc3QgY2hhciAqZGVzYzsKK30gaHdmbGlzdFtdID0KKyAgeworICAgIHsgSFdGX1BBRExPQ0tfUk5HLCAicGFkbG9jay1ybmciIH0sCisgICAgeyBIV0ZfUEFETE9DS19BRVMsICJwYWRsb2NrLWFlcyIgfSwKKyAgICB7IEhXRl9QQURMT0NLX1NIQSwgInBhZGxvY2stc2hhIiB9LAorICAgIHsgSFdGX1BBRExPQ0tfTU1VTCwicGFkbG9jay1tbXVsIn0sCisgICAgeyBIV0ZfSU5URUxfQ1BVLCAgICJpbnRlbC1jcHUiIH0sCisgICAgeyBIV0ZfSU5URUxfQk1JMiwgICJpbnRlbC1ibWkyIiB9LAorICAgIHsgSFdGX0lOVEVMX1NTU0UzLCAiaW50ZWwtc3NzZTMiIH0sCisgICAgeyBIV0ZfSU5URUxfUENMTVVMLCJpbnRlbC1wY2xtdWwiIH0sCisgICAgeyBIV0ZfSU5URUxfQUVTTkksICJpbnRlbC1hZXNuaSIgfSwKKyAgICB7IEhXRl9JTlRFTF9SRFJBTkQsImludGVsLXJkcmFuZCIgfSwKKyAgICB7IEhXRl9JTlRFTF9BVlgsICAgImludGVsLWF2eCIgfSwKKyAgICB7IEhXRl9JTlRFTF9BVlgyLCAgImludGVsLWF2eDIiIH0sCisgICAgeyBIV0ZfQVJNX05FT04sICAgICJhcm0tbmVvbiIgfQorICB9OworCisvKiBBIGJpdCB2ZWN0b3Igd2l0aCB0aGUgaGFyZHdhcmUgZmVhdHVyZXMgd2hpY2ggc2hhbGwgbm90IGJlIHVzZWQuCisgICBUaGlzIHZhcmlhYmxlIG11c3QgYmUgc2V0IHByaW9yIHRvIGFueSBpbml0aWFsaXphdGlvbi4gICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVkX2h3X2ZlYXR1cmVzOworCisvKiBBIGJpdCB2ZWN0b3IgZGVzY3JpYmluZyB0aGUgaGFyZHdhcmUgZmVhdHVyZXMgY3VycmVudGx5CisgICBhdmFpbGFibGUuICovCitzdGF0aWMgdW5zaWduZWQgaW50IGh3X2ZlYXR1cmVzOworCisvKiBDb252ZW5pZW5jZSBtYWNyb3MuICAqLworI2RlZmluZSBteV9pc2FzY2lpKGMpICghKChjKSAmIDB4ODApKQorCisKKwwKKy8qIERpc2FibGUgYSBmZWF0dXJlIGJ5IG5hbWUuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkICpiZWZvcmUqCisgICBfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMgaXMgY2FsbGVkLiAgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9kaXNhYmxlX2h3X2ZlYXR1cmUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGludCBpOworCisgIGZvciAoaT0wOyBpIDwgRElNIChod2ZsaXN0KTsgaSsrKQorICAgIGlmICghc3RyY21wIChod2ZsaXN0W2ldLmRlc2MsIG5hbWUpKQorICAgICAgeworICAgICAgICBkaXNhYmxlZF9od19mZWF0dXJlcyB8PSBod2ZsaXN0W2ldLmZsYWc7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICByZXR1cm4gR1BHX0VSUl9JTlZfTkFNRTsKK30KKworCisvKiBSZXR1cm4gYSBiaXQgdmVjdG9yIGRlc2NyaWJpbmcgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSBmZWF0dXJlcy4KKyAgIFRoZSBIV0ZfIGNvbnN0YW50cyBhcmUgdXNlZCB0byB0ZXN0IGZvciB0aGVtLiAqLwordW5zaWduZWQgaW50CitfZ2NyeV9nZXRfaHdfZmVhdHVyZXMgKHZvaWQpCit7CisgIHJldHVybiBod19mZWF0dXJlczsKK30KKworCisvKiBFbnVtZXJhdGUgYWxsIGZlYXR1cmVzLiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBzdGFydCB3aXRoIGFuCisgICBJRFggb2YgMCBhbmQgdGhlbiBpbmNyZW1lbnQgSURYIHVudGlsIE5VTEwgaXMgcmV0dXJuZWQuICAqLworY29uc3QgY2hhciAqCitfZ2NyeV9lbnVtX2h3X2ZlYXR1cmVzIChpbnQgaWR4LCB1bnNpZ25lZCBpbnQgKnJfZmVhdHVyZSkKK3sKKyAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IERJTSAoaHdmbGlzdCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmIChyX2ZlYXR1cmUpCisgICAgKnJfZmVhdHVyZSA9IGh3Zmxpc3RbaWR4XS5mbGFnOworICByZXR1cm4gaHdmbGlzdFtpZHhdLmRlc2M7Cit9CisKKworLyogUmVhZCBhIGZpbGUgd2l0aCBmZWF0dXJlcyB3aGljaCBzaGFsbCBub3QgYmUgdXNlZC4gIFRoZSBmaWxlIGlzIGEKKyAgIHNpbXBsZSB0ZXh0IGZpbGUgd2hlcmUgZW1wdHkgbGluZXMgYW5kIGxpbmVzIHdpdGggdGhlIGZpcnN0IG5vbgorICAgd2hpdGUtc3BhY2UgY2hhcmFjdGVyIGJlaW5nICcjJyBhcmUgaWdub3JlZC4gICovCitzdGF0aWMgdm9pZAorcGFyc2VfaHdmX2RlbnlfZmlsZSAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqZm5hbWUgPSBIV0ZfREVOWV9GSUxFOworICBGSUxFICpmcDsKKyAgY2hhciBidWZmZXJbMjU2XTsKKyAgY2hhciAqcCwgKnBlbmQ7CisgIGludCBpLCBsbnIgPSAwOworCisgIGZwID0gZm9wZW4gKGZuYW1lLCAiciIpOworICBpZiAoIWZwKQorICAgIHJldHVybjsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmICghZmdldHMgKGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlciwgZnApKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFmZW9mIChmcCkpCisgICAgICAgICAgICB7CisjaWZkZWYgSEFWRV9TWVNMT0cKKyAgICAgICAgICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAiTGliZ2NyeXB0IHdhcm5pbmc6IGVycm9yIHJlYWRpbmcgJyVzJywgbGluZSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGxucik7CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisgICAgICAgICAgICB9CisgICAgICAgICAgZmNsb3NlIChmcCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBsbnIrKzsKKyAgICAgIGZvciAocD1idWZmZXI7IG15X2lzYXNjaWkgKCpwKSAmJiBpc3NwYWNlICgqcCk7IHArKykKKyAgICAgICAgOworICAgICAgcGVuZCA9IHN0cmNociAocCwgJ1xuJyk7CisgICAgICBpZiAocGVuZCkKKyAgICAgICAgKnBlbmQgPSAwOworICAgICAgcGVuZCA9IHAgKyAoKnA/IChzdHJsZW4gKHApLTEpOjApOworICAgICAgZm9yICggO3BlbmQgPiBwOyBwZW5kLS0pCisgICAgICAgIGlmIChteV9pc2FzY2lpICgqcGVuZCkgJiYgaXNzcGFjZSAoKnBlbmQpKQorICAgICAgICAgICpwZW5kID0gMDsKKyAgICAgIGlmICghKnAgfHwgKnAgPT0gJyMnKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgZm9yIChpPTA7IGkgPCBESU0gKGh3Zmxpc3QpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIXN0cmNtcCAoaHdmbGlzdFtpXS5kZXNjLCBwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGlzYWJsZWRfaHdfZmVhdHVyZXMgfD0gaHdmbGlzdFtpXS5mbGFnOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKGkgPT0gRElNIChod2ZsaXN0KSkKKyAgICAgICAgeworI2lmZGVmIEhBVkVfU1lTTE9HCisgICAgICAgICAgc3lzbG9nIChMT0dfVVNFUnxMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICJMaWJnY3J5cHQgd2FybmluZzogdW5rbm93biBmZWF0dXJlIGluICclcycsIGxpbmUgJWQiLAorICAgICAgICAgICAgICAgICAgZm5hbWUsIGxucik7CisjZW5kaWYgLypIQVZFX1NZU0xPRyovCisgICAgICAgIH0KKyAgICB9Cit9CisKKworLyogRGV0ZWN0IHRoZSBhdmFpbGFibGUgaGFyZHdhcmUgZmVhdHVyZXMuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICAgb25jZSByaWdodCBhdCBzdGFydHVwIGFuZCB3ZSBhc3N1bWUgdGhhdCBubyBvdGhlciB0aHJlYWRzIGFyZQorICAgcnVubmluZy4gICovCit2b2lkCitfZ2NyeV9kZXRlY3RfaHdfZmVhdHVyZXMgKHZvaWQpCit7CisgIGh3X2ZlYXR1cmVzID0gMDsKKworICBpZiAoZmlwc19tb2RlICgpKQorICAgIHJldHVybjsgLyogSGFyZHdhcmUgc3VwcG9ydCBpcyBub3QgdG8gYmUgZXZhbHVhdGVkLiAgKi8KKworICBwYXJzZV9od2ZfZGVueV9maWxlICgpOworCisjaWYgZGVmaW5lZCAoSEFWRV9DUFVfQVJDSF9YODYpCisgIHsKKyAgICBod19mZWF0dXJlcyA9IF9nY3J5X2h3Zl9kZXRlY3RfeDg2ICgpOworICB9CisjZW5kaWYgLyogSEFWRV9DUFVfQVJDSF9YODYgKi8KKyNpZiBkZWZpbmVkIChIQVZFX0NQVV9BUkNIX0FSTSkKKyAgeworICAgIGh3X2ZlYXR1cmVzID0gX2djcnlfaHdmX2RldGVjdF9hcm0gKCk7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0NQVV9BUkNIX0FSTSAqLworCisgIGh3X2ZlYXR1cmVzICY9IH5kaXNhYmxlZF9od19mZWF0dXJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQtY29uZmlnLmluIGIvc3JjL2xpYmdjcnlwdC1jb25maWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1MjYzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9saWJnY3J5cHQtY29uZmlnLmluCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLCAyMDAzLCAyMDA0LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIworIyBGaWxlOiBAY29uZmlndXJlX2lucHV0QAorCisjIEdlbmVyYWwuCitwcmVmaXg9IkBwcmVmaXhAIgorZXhlY19wcmVmaXg9IkBleGVjX3ByZWZpeEAiCit2ZXJzaW9uPSJAVkVSU0lPTkAiCitpbmNsdWRlZGlyPSJAaW5jbHVkZWRpckAiCitsaWJkaXI9IkBsaWJkaXJAIgorZ3BnX2Vycm9yX2xpYnM9IkBHUEdfRVJST1JfTElCU0AiCitncGdfZXJyb3JfY2ZsYWdzPSJAR1BHX0VSUk9SX0NGTEFHU0AiCisKKyMgbGliZ2NyeXB0IHZhbHVlcy4KK2xpYnM9IkBMSUJHQ1JZUFRfQ09ORklHX0xJQlNAIgorY2ZsYWdzPSJATElCR0NSWVBUX0NPTkZJR19DRkxBR1NAIgorCisjIEFQSSBpbmZvCithcGlfdmVyc2lvbj0iQExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05AIgorCisjIENvbmZpZ3VyZWQgZm9yIGhvc3QKK215X2hvc3Q9IkBMSUJHQ1JZUFRfQ09ORklHX0hPU1RAIgorCisjIE1pc2MgaW5mb3JtYXRpb24uCitzeW1tZXRyaWNfY2lwaGVycz0iQExJQkdDUllQVF9DSVBIRVJTQCIKK2FzeW1tZXRyaWNfY2lwaGVycz0iQExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AiCitkaWdlc3RzPSJATElCR0NSWVBUX0RJR0VTVFNAIgorCisjIFN0YXRlIHZhcmlhYmxlcy4KK2VjaG9fbGlicz1ubworZWNob19jZmxhZ3M9bm8KK2VjaG9fcHJlZml4PW5vCitlY2hvX2FsZ29yaXRobXM9bm8KK2VjaG9fZXhlY19wcmVmaXg9bm8KK2VjaG9fdmVyc2lvbj1ubworZWNob19hcGlfdmVyc2lvbj1ubworZWNob19ob3N0PW5vCisKKyMgUHJpbnRzIHVzYWdlIGluZm9ybWF0aW9uLgordXNhZ2UoKQoreworICAgIGNhdCA8PEVPRgorVXNhZ2U6ICQwIFtPUFRJT05TXQorT3B0aW9uczoKKwlbLS1wcmVmaXhdCisJWy0tZXhlYy1wcmVmaXhdCisJWy0tdmVyc2lvbl0KKyAgICAgICAgWy0tYXBpLXZlcnNpb25dCisJWy0tbGlic10KKwlbLS1jZmxhZ3NdCisJWy0tYWxnb3JpdGhtc10KKyAgICAgICAgWy0taG9zdF0KK0VPRgorICAgIGV4aXQgJDEKK30KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICAgICMgTm90aGluZyB0byBkby4KKyAgICB1c2FnZSAxIDE+JjIKK2ZpCisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgY2FzZSAiJDEiIGluCisJIyBTZXQgdXAgYG9wdGFyZycuCisJLS0qPSopCisJICAgIG9wdGFyZz1gZWNobyAiJDEiIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AKKwkgICAgOzsKKwkqKQorCSAgICBvcHRhcmc9IiIKKwkgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICQxIGluCisJLS10aHJlYWQ9KikKKwkgICAgZWNobyAiJDA6IC0tdGhyZWFkIG9wdGlvbiBvYnNvbGV0ZTogdXNlIHRoZSB0aHJlYWQgY2FsbGJhY2sgaW50ZXJmYWNlIiAxPiYyCisJICAgIGV4aXQgMQorCSAgICA7OworICAgICAgICAtLXByZWZpeD0qKQorICAgICAgICAgICAgIyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIHdpdGggb2xkIE00IG1hY3Jvcywgd2UgaWdub3JlCisgICAgICAgICAgICAjIHNldHRpbmcgb2YgcHJlZml4LgorICAgICAgICAgICAgOzsKKwktLXByZWZpeCkKKwkgICAgZWNob19wcmVmaXg9eWVzCisJICAgIDs7CisgICAgICAgIC0tZXhlYy1wcmVmaXg9KikKKyAgICAgICAgICAgIDs7CisJLS1leGVjLXByZWZpeCkKKwkgICAgZWNob19leGVjX3ByZWZpeD15ZXMKKwkgICAgOzsKKwktLXZlcnNpb24pCisJICAgIGVjaG9fdmVyc2lvbj15ZXMKKwkgICAgOzsKKyAgICAgICAgLS1hcGktdmVyc2lvbikKKyAgICAgICAgICAgIGVjaG9fYXBpX3ZlcnNpb249eWVzCisgICAgICAgICAgICA7OworCS0tY2ZsYWdzKQorCSAgICBlY2hvX2NmbGFncz15ZXMKKwkgICAgOzsKKwktLWxpYnMpCisJICAgIGVjaG9fbGlicz15ZXMKKwkgICAgOzsKKwktLWFsZ29yaXRobXMpCisJICAgIGVjaG9fYWxnb3JpdGhtcz15ZXMKKwkgICAgOzsKKyAgICAgICAgLS1ob3N0KQorICAgICAgICAgICAgZWNob19ob3N0PXllcworICAgICAgICAgICAgOzsKKwkqKQorCSAgICB1c2FnZSAxIDE+JjIKKwkgICAgOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAiJGVjaG9fcHJlZml4IiA9ICJ5ZXMiOyB0aGVuCisgICAgZWNobyAiJHByZWZpeCIKK2ZpCisKK2lmIHRlc3QgIiRlY2hvX2V4ZWNfcHJlZml4IiA9ICJ5ZXMiOyB0aGVuCisgICAgZWNobyAiJGV4ZWNfcHJlZml4IgorZmkKKworaWYgdGVzdCAiJGVjaG9fY2ZsYWdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgaW5jbHVkZXM9IiIKKyAgICBjZmxhZ3NfZmluYWw9IiRjZmxhZ3MiCisKKyAgICAjIFNldCB1cCBgaW5jbHVkZXMnLgorICAgIGlmIHRlc3QgIngkaW5jbHVkZWRpciIgIT0gIngvdXNyL2luY2x1ZGUiIC1hICJ4JGluY2x1ZGVkaXIiICE9ICJ4L2luY2x1ZGUiOyB0aGVuCisJaW5jbHVkZXM9Ii1JJGluY2x1ZGVkaXIiCisgICAgZmkKKyAgICAjIFNldCB1cCBgY2ZsYWdzX2ZpbmFsJy4KKyAgICBjZmxhZ3NfZmluYWw9IiRjZmxhZ3NfZmluYWwgJGdwZ19lcnJvcl9jZmxhZ3MiCisKKyAgICB0bXA9IiIKKyAgICBmb3IgaSBpbiAkaW5jbHVkZXMgJGNmbGFnc19maW5hbDsgZG8KKyAgICAgICBpZiBlY2hvICIkdG1wIiB8IGZncmVwIC12IC0tICIkaSIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICB0bXA9IiR0bXAgJGkiCisgICAgICAgZmkKKyAgICBkb25lCisgICAgZWNobyAkdG1wCitmaQorCitpZiB0ZXN0ICIkZWNob19saWJzIiA9ICJ5ZXMiOyB0aGVuCisgICAgbGliZGlycz0iIgorICAgIGxpYnNfZmluYWw9IiRsaWJzIgorCisgICAgIyBTZXQgdXAgYGxpYmRpcnMnLgorICAgIGlmIHRlc3QgIngkbGliZGlyIiAhPSAieC91c3IvbGliIiAtYSAieCRsaWJkaXIiICE9ICJ4L2xpYiI7IHRoZW4KKwlsaWJkaXJzPSItTCRsaWJkaXIiCisgICAgZmkKKworICAgICMgU2V0IHVwIGBsaWJzX2ZpbmFsJy4KKyAgICBsaWJzX2ZpbmFsPSIkbGlic19maW5hbCAkZ3BnX2Vycm9yX2xpYnMiCisKKyAgICB0bXA9IiIKKyAgICBmb3IgaSBpbiAkbGliZGlycyAkbGlic19maW5hbDsgZG8KKyAgICAgICBpZiBlY2hvICIkdG1wIiB8IGZncmVwIC12IC0tICIkaSIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICB0bXA9IiR0bXAgJGkiCisgICAgICAgZmkKKyAgICBkb25lCisgICAgZWNobyAkdG1wCitmaQorCitpZiB0ZXN0ICIkZWNob192ZXJzaW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgZWNobyAiJHZlcnNpb24iCitmaQorCitpZiB0ZXN0ICIkZWNob19hcGlfdmVyc2lvbiIgPSAieWVzIjsgdGhlbgorICAgIGVjaG8gIiRhcGlfdmVyc2lvbiIKK2ZpCisKK2lmIHRlc3QgIiRlY2hvX2hvc3QiID0gInllcyI7IHRoZW4KKyAgICBlY2hvICIkbXlfaG9zdCIKK2ZpCisKK2lmIHRlc3QgIiRlY2hvX2FsZ29yaXRobXMiID0gInllcyI7IHRoZW4KKyAgICBlY2hvICJTeW1tZXRyaWMgY2lwaGVyIGFsZ29yaXRobXM6ICRzeW1tZXRyaWNfY2lwaGVycyIKKyAgICBlY2hvICJQdWJsaWMta2V5IGNpcGhlciBhbGdvcml0aG1zOiAkYXN5bW1ldHJpY19jaXBoZXJzIgorICAgIGVjaG8gIk1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobXM6ICRkaWdlc3RzIgorZmkKZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQuZGVmIGIvc3JjL2xpYmdjcnlwdC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwZWZjZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9saWJnY3J5cHQuZGVmCkBAIC0wLDAgKzEsMjc5IEBACis7OyBsaWJnY3J5cHQuZGVmcyAtICBFeHBvcnRlZCBzeW1ib2xzIGZvciBXMzIKKzs7IENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7Cis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCis7OworOzsgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7OyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCis7OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCis7OyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCis7OworCis7OyBOb3RlOiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgbWFudWFsbHkgYW5kIHRoZSBvcmRpbmFscyBzaGFsbAorOzsgbmV2ZXIgYmUgY2hhbmdlZC4gIEFsc28gY2hlY2sgbGliZ2NyeXB0LnZlcnMgYW5kIHZpc2liaWxpdHkuaC4KKworCitFWFBPUlRTCisgICAgICBnY3J5X2NoZWNrX3ZlcnNpb24gIEAxCisgICAgICBnY3J5X2NvbnRyb2wgIEAyCisKKyAgICAgIGdjcnlfbWFsbG9jICBAMworICAgICAgZ2NyeV9jYWxsb2MgIEA0CisgICAgICBnY3J5X21hbGxvY19zZWN1cmUgIEA1CisgICAgICBnY3J5X2NhbGxvY19zZWN1cmUgIEA2CisgICAgICBnY3J5X3JlYWxsb2MgIEA3CisgICAgICBnY3J5X3N0cmR1cCAgQDgKKyAgICAgIGdjcnlfeG1hbGxvYyAgQDkKKyAgICAgIGdjcnlfeGNhbGxvYyAgQDEwCisgICAgICBnY3J5X3htYWxsb2Nfc2VjdXJlICBAMTEKKyAgICAgIGdjcnlfeGNhbGxvY19zZWN1cmUgIEAxMgorICAgICAgZ2NyeV94cmVhbGxvYyAgQDEzCisgICAgICBnY3J5X3hzdHJkdXAgIEAxNAorICAgICAgZ2NyeV9pc19zZWN1cmUgIEAxNQorICAgICAgZ2NyeV9mcmVlICBAMTYKKworICAgICAgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAgQDE3CisgICAgICBnY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXIgIEAxOAorICAgICAgZ2NyeV9zZXRfb3V0b2Zjb3JlX2hhbmRsZXIgIEAxOQorICAgICAgZ2NyeV9zZXRfZmF0YWxlcnJvcl9oYW5kbGVyICBAMjAKKyAgICAgIGdjcnlfc2V0X2xvZ19oYW5kbGVyICBAMjEKKyAgICAgIGdjcnlfc2V0X2dldHRleHRfaGFuZGxlciAgQDIyCisKKyAgICAgIGdjcnlfc3RyZXJyb3IgIEAyMworICAgICAgZ2NyeV9zdHJzb3VyY2UgIEAyNAorICAgICAgZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vICBAMjUKKyAgICAgIGdjcnlfZXJyX2NvZGVfdG9fZXJybm8gIEAyNgorICAgICAgZ2NyeV9lcnJfbWFrZV9mcm9tX2Vycm5vICBAMjcKKyAgICAgIGdjcnlfZXJyb3JfZnJvbV9lcnJubyAgQDI4CisKKyAgICAgIGdjcnlfc2V4cF9uZXcgIEAyOQorICAgICAgZ2NyeV9zZXhwX2NyZWF0ZSAgQDMwCisgICAgICBnY3J5X3NleHBfc3NjYW4gIEAzMQorICAgICAgZ2NyeV9zZXhwX2J1aWxkICBAMzIKKyAgICAgIGdjcnlfc2V4cF9idWlsZF9hcnJheSAgQDMzCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAgQDM0CisgICAgICBnY3J5X3NleHBfY2Fub25fbGVuICBAMzUKKyAgICAgIGdjcnlfc2V4cF9zcHJpbnQgIEAzNgorICAgICAgZ2NyeV9zZXhwX2R1bXAgIEAzNworICAgICAgZ2NyeV9zZXhwX2NvbnMgIEAzOAorICAgICAgZ2NyeV9zZXhwX2FsaXN0ICBAMzkKKyAgICAgIGdjcnlfc2V4cF92bGlzdCAgQDQwCisgICAgICBnY3J5X3NleHBfYXBwZW5kICBANDEKKyAgICAgIGdjcnlfc2V4cF9wcmVwZW5kICBANDIKKyAgICAgIGdjcnlfc2V4cF9maW5kX3Rva2VuICBANDMKKyAgICAgIGdjcnlfc2V4cF9sZW5ndGggIEA0NAorICAgICAgZ2NyeV9zZXhwX250aCAgQDQ1CisgICAgICBnY3J5X3NleHBfY2FyICBANDYKKyAgICAgIGdjcnlfc2V4cF9jZHIgIEA0NworICAgICAgZ2NyeV9zZXhwX2NhZHIgIEA0OAorICAgICAgZ2NyeV9zZXhwX250aF9kYXRhICBANDkKKyAgICAgIGdjcnlfc2V4cF9udGhfbXBpICBANTAKKworICAgICAgZ2NyeV9tcGlfbmV3ICBANTEKKyAgICAgIGdjcnlfbXBpX3NuZXcgIEA1MgorICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAgQDUzCisgICAgICBnY3J5X21waV9jb3B5ICBANTQKKyAgICAgIGdjcnlfbXBpX3NldCAgQDU1CisgICAgICBnY3J5X21waV9zZXRfdWkgIEA1NgorICAgICAgZ2NyeV9tcGlfc3dhcCAgQDU3CisgICAgICBnY3J5X21waV9jbXAgIEA1OAorICAgICAgZ2NyeV9tcGlfY21wX3VpICBANTkKKyAgICAgIGdjcnlfbXBpX3NjYW4gIEA2MAorICAgICAgZ2NyeV9tcGlfcHJpbnQgIEA2MQorICAgICAgZ2NyeV9tcGlfYXByaW50ICBANjIKKyAgICAgIGdjcnlfbXBpX2R1bXAgIEA2MworICAgICAgZ2NyeV9tcGlfYWRkICBANjQKKyAgICAgIGdjcnlfbXBpX2FkZF91aSAgQDY1CisgICAgICBnY3J5X21waV9hZGRtICBANjYKKyAgICAgIGdjcnlfbXBpX3N1YiAgQDY3CisgICAgICBnY3J5X21waV9zdWJfdWkgIEA2OAorICAgICAgZ2NyeV9tcGlfc3VibSAgQDY5CisgICAgICBnY3J5X21waV9tdWwgIEA3MAorICAgICAgZ2NyeV9tcGlfbXVsX3VpICBANzEKKyAgICAgIGdjcnlfbXBpX211bG0gIEA3MgorICAgICAgZ2NyeV9tcGlfbXVsXzJleHAgIEA3MworICAgICAgZ2NyeV9tcGlfZGl2ICBANzQKKyAgICAgIGdjcnlfbXBpX21vZCAgQDc1CisgICAgICBnY3J5X21waV9wb3dtICBANzYKKyAgICAgIGdjcnlfbXBpX2djZCAgQDc3CisgICAgICBnY3J5X21waV9pbnZtICBANzgKKyAgICAgIGdjcnlfbXBpX2dldF9uYml0cyAgQDc5CisgICAgICBnY3J5X21waV90ZXN0X2JpdCAgQDgwCisgICAgICBnY3J5X21waV9zZXRfYml0ICBAODEKKyAgICAgIGdjcnlfbXBpX2NsZWFyX2JpdCAgQDgyCisgICAgICBnY3J5X21waV9zZXRfaGlnaGJpdCAgQDgzCisgICAgICBnY3J5X21waV9jbGVhcl9oaWdoYml0ICBAODQKKyAgICAgIGdjcnlfbXBpX3JzaGlmdCAgQDg1CisgICAgICBnY3J5X21waV9zZXRfb3BhcXVlICBAODYKKyAgICAgIGdjcnlfbXBpX2dldF9vcGFxdWUgIEA4NworICAgICAgZ2NyeV9tcGlfc2V0X2ZsYWcgIEA4OAorICAgICAgZ2NyeV9tcGlfY2xlYXJfZmxhZyAgQDg5CisgICAgICBnY3J5X21waV9nZXRfZmxhZyAgQDkwCisKKworICAgICAgZ2NyeV9jaXBoZXJfb3BlbiAgQDkyCisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAgQDkzCisgICAgICBnY3J5X2NpcGhlcl9jdGwgIEA5NAorICAgICAgZ2NyeV9jaXBoZXJfaW5mbyAgQDk1CisgICAgICBnY3J5X2NpcGhlcl9hbGdvX2luZm8gIEA5NgorICAgICAgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICBAOTcKKyAgICAgIGdjcnlfY2lwaGVyX21hcF9uYW1lICBAOTgKKyAgICAgIGdjcnlfY2lwaGVyX21vZGVfZnJvbV9vaWQgIEA5OQorICAgICAgZ2NyeV9jaXBoZXJfZW5jcnlwdCAgQDEwMAorICAgICAgZ2NyeV9jaXBoZXJfZGVjcnlwdCAgQDEwMQorICAgICAgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuICBAMTAyCisgICAgICBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gIEAxMDMKKworOzsgQDEwNCB1c2VkIHRvIGJlIHBhcnQgb2YgdGhlIG1vZHVsZSByZWdpc3RlciBpbnRlcmZhY2UKKworICAgICAgZ2NyeV9wa19lbmNyeXB0ICBAMTA1CisgICAgICBnY3J5X3BrX2RlY3J5cHQgIEAxMDYKKyAgICAgIGdjcnlfcGtfc2lnbiAgQDEwNworICAgICAgZ2NyeV9wa192ZXJpZnkgIEAxMDgKKyAgICAgIGdjcnlfcGtfdGVzdGtleSAgQDEwOQorICAgICAgZ2NyeV9wa19nZW5rZXkgIEAxMTAKKyAgICAgIGdjcnlfcGtfY3RsICBAMTExCisgICAgICBnY3J5X3BrX2FsZ29faW5mbyAgQDExMgorICAgICAgZ2NyeV9wa19hbGdvX25hbWUgIEAxMTMKKyAgICAgIGdjcnlfcGtfbWFwX25hbWUgIEAxMTQKKyAgICAgIGdjcnlfcGtfZ2V0X25iaXRzICBAMTE1CisgICAgICBnY3J5X3BrX2dldF9rZXlncmlwICBAMTE2CisKKzs7IEAxMTcgdXNlZCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUgcmVnaXN0ZXIgaW50ZXJmYWNlCisKKzs7Cis7OyAxMTggdG8gMTQyIHdlcmUgdXNlZCBpbiBwcmV2aW91cyBMaWJnY3J5cHQgdmVyc2lvbnMgZm9yIHRoZSBnY3J5X2FjCis7OyBpbnRlcmZhY2UKKzs7CisKKyAgICAgIGdjcnlfbWRfb3BlbiAgQDE0MworICAgICAgZ2NyeV9tZF9jbG9zZSAgQDE0NAorICAgICAgZ2NyeV9tZF9lbmFibGUgIEAxNDUKKyAgICAgIGdjcnlfbWRfY29weSAgQDE0NgorICAgICAgZ2NyeV9tZF9yZXNldCAgQDE0NworICAgICAgZ2NyeV9tZF9jdGwgIEAxNDgKKyAgICAgIGdjcnlfbWRfd3JpdGUgIEAxNDkKKyAgICAgIGdjcnlfbWRfcmVhZCAgQDE1MAorICAgICAgZ2NyeV9tZF9oYXNoX2J1ZmZlciAgQDE1MQorICAgICAgZ2NyeV9tZF9nZXRfYWxnbyAgQDE1MgorICAgICAgZ2NyeV9tZF9nZXRfYWxnb19kbGVuICBAMTUzCisgICAgICBnY3J5X21kX2lzX2VuYWJsZWQgIEAxNTQKKyAgICAgIGdjcnlfbWRfaXNfc2VjdXJlICBAMTU1CisgICAgICBnY3J5X21kX2luZm8gIEAxNTYKKyAgICAgIGdjcnlfbWRfYWxnb19pbmZvICBAMTU3CisgICAgICBnY3J5X21kX2FsZ29fbmFtZSAgQDE1OAorICAgICAgZ2NyeV9tZF9tYXBfbmFtZSAgQDE1OQorICAgICAgZ2NyeV9tZF9zZXRrZXkgIEAxNjAKKzs7IEAxNjEgdXNlZCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUgcmVnaXN0ZXIgaW50ZXJmYWNlCisgICAgICBnY3J5X3JhbmRvbWl6ZSAgQDE2MgorICAgICAgZ2NyeV9yYW5kb21fYWRkX2J5dGVzICBAMTYzCisgICAgICBnY3J5X3JhbmRvbV9ieXRlcyAgQDE2NAorICAgICAgZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlICBAMTY1CisgICAgICBnY3J5X21waV9yYW5kb21pemUgIEAxNjYKKworICAgICAgZ2NyeV9wcmltZV9nZW5lcmF0ZSAgQDE2NworICAgICAgZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgIEAxNjgKKyAgICAgIGdjcnlfcHJpbWVfcmVsZWFzZV9mYWN0b3JzICBAMTY5CisgICAgICBnY3J5X3ByaW1lX2NoZWNrICBAMTcwCisKKyAgICAgIGdjcnlfY3JlYXRlX25vbmNlICBAMTcxCisKKyAgICAgIGdjcnlfbWRfZGVidWcgIEAxNzIKKworOzsgQDE3MyB1c2VkIHRvIGJlIHBhcnQgb2YgdGhlIG1vZHVsZSByZWdpc3RlciBpbnRlcmZhY2UKKzs7IEAxNzQgdXNlZCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUgcmVnaXN0ZXIgaW50ZXJmYWNlCis7OyBAMTc1IHVzZWQgdG8gYmUgcGFydCBvZiB0aGUgbW9kdWxlIHJlZ2lzdGVyIGludGVyZmFjZQorOzsgQDE3NiB1c2VkIHRvIGJlIHBhcnQgb2YgdGhlIG1vZHVsZSByZWdpc3RlciBpbnRlcmZhY2UKKzs7IEAxNzcgdXNlZCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUgcmVnaXN0ZXIgaW50ZXJmYWNlCis7OyBAMTc4IHVzZWQgdG8gYmUgcGFydCBvZiB0aGUgbW9kdWxlIHJlZ2lzdGVyIGludGVyZmFjZQorOzsKKzs7IEAxNzkgdG8gQDE4NiB1c2VkIHRvIGJlIHBhcnQgb2YgdGhlIHJlbW92ZWQgZ2NyeV9hYyBpbnRlcmZhY2UKKzs7CisKKyAgICAgIGdjcnlfc2V4cF9udGhfc3RyaW5nICBAMTg3CisKKyAgICAgIGdjcnlfY2lwaGVyX3NldGtleSAgICBAMTg4CisgICAgICBnY3J5X2NpcGhlcl9zZXRpdiAgICAgQDE4OQorICAgICAgZ2NyeV9jaXBoZXJfc2V0Y3RyICAgIEAxOTAKKworICAgICAgZ2NyeV9tcGlfbHNoaWZ0ICAgICAgIEAxOTEKKworICAgICAgZ2NyeV9wa19nZXRfY3VydmUgICAgIEAxOTIKKyAgICAgIGdjcnlfcGtfZ2V0X3BhcmFtICAgICBAMTkzCisKKyAgICAgIGdjcnlfa2RmX2Rlcml2ZSAgICAgICBAMTk0CisKKyAgICAgIGdjcnlfbXBpX3NuYXRjaCAgICAgICBAMTk1CisKKyAgICAgIGdjcnlfbXBpX3BvaW50X25ldyAgICAgICAgQDE5NgorICAgICAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAgICBAMTk3CisgICAgICBnY3J5X21waV9wb2ludF9nZXQgICAgICAgIEAxOTgKKyAgICAgIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQgQDE5OQorICAgICAgZ2NyeV9tcGlfcG9pbnRfc2V0ICAgICAgICBAMjAwCisgICAgICBnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0IEAyMDEKKworICAgICAgZ2NyeV9jdHhfcmVsZWFzZSAgICAgICAgICBAMjAyCisKKyAgICAgIGdjcnlfbXBpX2VjX25ldyAgICAgICAgICAgQDIwMworICAgICAgZ2NyeV9tcGlfZWNfZ2V0X21waSAgICAgICBAMjA0CisgICAgICBnY3J5X21waV9lY19nZXRfcG9pbnQgICAgIEAyMDUKKyAgICAgIGdjcnlfbXBpX2VjX3NldF9tcGkgICAgICAgQDIwNgorICAgICAgZ2NyeV9tcGlfZWNfc2V0X3BvaW50ICAgICBAMjA3CisgICAgICBnY3J5X21waV9lY19nZXRfYWZmaW5lICAgIEAyMDgKKyAgICAgIGdjcnlfbXBpX2VjX2R1cCAgICAgICAgICAgQDIwOQorICAgICAgZ2NyeV9tcGlfZWNfYWRkICAgICAgICAgICBAMjEwCisgICAgICBnY3J5X21waV9lY19tdWwgICAgICAgICAgIEAyMTEKKworICAgICAgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgICAgICBAMjEyCisKKyAgICAgIF9nY3J5X21waV9nZXRfY29uc3QgICAgICAgQDIxMworCisgICAgICBnY3J5X3NleHBfbnRoX2J1ZmZlciAgICAgIEAyMTQKKworICAgICAgZ2NyeV9tcGlfaXNfbmVnICAgICAgICAgICBAMjE1CisgICAgICBnY3J5X21waV9uZWcgICAgICAgICAgICAgIEAyMTYKKyAgICAgIGdjcnlfbXBpX2FicyAgICAgICAgICAgICAgQDIxNworCisgICAgICBnY3J5X21waV9lY19jdXJ2ZV9wb2ludCAgIEAyMTgKKworICAgICAgZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgICAgICBAMjE5CisKKyAgICAgIGdjcnlfbG9nX2RlYnVnICAgICAgICAgICAgQDIyMAorICAgICAgZ2NyeV9sb2dfZGVidWdoZXggICAgICAgICBAMjIxCisgICAgICBnY3J5X2xvZ19kZWJ1Z21waSAgICAgICAgIEAyMjIKKyAgICAgIGdjcnlfbG9nX2RlYnVncG50ICAgICAgICAgQDIyMworICAgICAgZ2NyeV9sb2dfZGVidWdzeHAgICAgICAgICBAMjI0CisKKyAgICAgIGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtICAgQDIyNQorCisgICAgICBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgIEAyMjYKKyAgICAgIGdjcnlfY2lwaGVyX2dldHRhZyAgICAgICAgQDIyNworICAgICAgZ2NyeV9jaXBoZXJfY2hlY2t0YWcgICAgICBAMjI4CisKKyAgICAgIGdjcnlfbXBpX3NldF9vcGFxdWVfY29weSAgQDIyOQorCisgICAgICBnY3J5X21hY19hbGdvX2luZm8gICAgICAgIEAyMzAKKyAgICAgIGdjcnlfbWFjX2FsZ29fbmFtZSAgICAgICAgQDIzMQorICAgICAgZ2NyeV9tYWNfbWFwX25hbWUgICAgICAgICBAMjMyCisgICAgICBnY3J5X21hY19nZXRfYWxnb19tYWNsZW4gIEAyMzMKKyAgICAgIGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbiAgQDIzNAorICAgICAgZ2NyeV9tYWNfb3BlbiAgICAgICAgICAgICBAMjM1CisgICAgICBnY3J5X21hY19jbG9zZSAgICAgICAgICAgIEAyMzYKKyAgICAgIGdjcnlfbWFjX3NldGtleSAgICAgICAgICAgQDIzNworICAgICAgZ2NyeV9tYWNfc2V0aXYgICAgICAgICAgICBAMjM4CisgICAgICBnY3J5X21hY193cml0ZSAgICAgICAgICAgIEAyMzkKKyAgICAgIGdjcnlfbWFjX3JlYWQgICAgICAgICAgICAgQDI0MAorICAgICAgZ2NyeV9tYWNfdmVyaWZ5ICAgICAgICAgICBAMjQxCisgICAgICBnY3J5X21hY19jdGwgICAgICAgICAgICAgIEAyNDIKKworCis7OyBlbmQgb2YgZmlsZSB3aXRoIHB1YmxpYyBzeW1ib2xzIGZvciBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvc3JjL2xpYmdjcnlwdC5tNCBiL3NyYy9saWJnY3J5cHQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNDgyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9saWJnY3J5cHQubTQKQEAgLTAsMCArMSwxMjIgQEAKK2RubCBBdXRvY29uZiBtYWNyb3MgZm9yIGxpYmdjcnlwdAorZG5sICAgICAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubAorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKK2RubCB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKK2RubCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCitkbmwgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKworZG5sIEFNX1BBVEhfTElCR0NSWVBUKFtNSU5JTVVNLVZFUlNJT04sCitkbmwgICAgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIF1dXSkKK2RubCBUZXN0IGZvciBsaWJnY3J5cHQgYW5kIGRlZmluZSBMSUJHQ1JZUFRfQ0ZMQUdTIGFuZCBMSUJHQ1JZUFRfTElCUy4KK2RubCBNSU5JTVVOLVZFUlNJT04gaXMgYSBzdHJpbmcgd2l0aCB0aGUgdmVyc2lvbiBudW1iZXIgb3B0aW9uYWxsaXkgcHJlZml4ZWQKK2RubCB3aXRoIHRoZSBBUEkgdmVyc2lvbiB0byBhbHNvIGNoZWNrIHRoZSBBUEkgY29tcGF0aWJpbGl0eS4gRXhhbXBsZToKK2RubCBhIE1JTklNVU4tVkVSU0lPTiBvZiAxOjEuMi41IHdvbid0IHBhc3MgdGhlIHRlc3QgdW5sZXNzIHRoZSBpbnN0YWxsZWQKK2RubCB2ZXJzaW9uIG9mIGxpYmdjcnlwdCBpcyBhdCBsZWFzdCAxLjIuNSAqYW5kKiB0aGUgQVBJIG51bWJlciBpcyAxLiAgVXNpbmcKK2RubCB0aGlzIGZlYXR1cmVzIGFsbG93cyB0byBwcmV2ZW50IGJ1aWxkIGFnYWluc3QgbmV3ZXIgdmVyc2lvbnMgb2YgbGliZ2NyeXB0Citkbmwgd2l0aCBhIGNoYW5nZWQgQVBJLgorZG5sCitBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAorWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEFDX0FSR19XSVRIKGxpYmdjcnlwdC1wcmVmaXgsCisgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdjcnlwdC1wcmVmaXg9UEZYXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCR0NSWVBUIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCisgICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQorICBpZiB0ZXN0IHgkbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKyAgICAgaWYgdGVzdCB4JHtMSUJHQ1JZUFRfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKyAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0kbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXgvYmluL2xpYmdjcnlwdC1jb25maWcKKyAgICAgZmkKKyAgZmkKKworICBBQ19QQVRIX1RPT0woTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCisgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MS4yLjAsJDEpCisgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgcmVxX2xpYmdjcnlwdF9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCisgICAgIG1pbl9saWJnY3J5cHRfdmVyc2lvbj1gZWNobyAiJHRtcCIgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMi8nYAorICBlbHNlCisgICAgIHJlcV9saWJnY3J5cHRfYXBpPTAKKyAgICAgbWluX2xpYmdjcnlwdF92ZXJzaW9uPSIkdG1wIgorICBmaQorCisgIEFDX01TR19DSEVDS0lORyhmb3IgTElCR0NSWVBUIC0gdmVyc2lvbiA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uKQorICBvaz1ubworICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCisgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorICAgIHJlcV9taWNybz1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKyAgICBsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb249YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKyAgICBtYWpvcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorICAgIG1pbm9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCisgICAgbWljcm89YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKyAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKyAgICAgICAgb2s9eWVzCisgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorICAgICAgICAgICAgICAgb2s9eWVzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIG9rPXllcworICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbildKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgZmkKKyAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmdjcnlwdCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgIyBBUEkgaXMgY29tcGF0aWJsZQorICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1ndCAwIDsgdGhlbgorICAgICAgICB0bXA9YCRMSUJHQ1JZUFRfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJHQ1JZUFQgQVBJIHZlcnNpb25dKQorICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbb2theV0pCisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBvaz1ubworICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW2RvZXMgbm90IG1hdGNoLiB3YW50PSRyZXFfbGliZ2NyeXB0X2FwaSBnb3Q9JHRtcF0pCisgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgIGZpCisgIGZpCisgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgLS1jZmxhZ3NgCisgICAgTElCR0NSWVBUX0xJQlM9YCRMSUJHQ1JZUFRfQ09ORklHIC0tbGlic2AKKyAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJExJQkdDUllQVF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKyAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgIEFDX01TR19XQVJOKFtbCisqKioKKyoqKiBUaGUgY29uZmlnIHNjcmlwdCAkTElCR0NSWVBUX0NPTkZJRyB3YXMKKyoqKiBidWlsdCBmb3IgJGxpYmdjcnlwdF9jb25maWdfaG9zdCBhbmQgdGh1cyBtYXkgbm90IG1hdGNoIHRoZQorKioqIHVzZWQgaG9zdCAkaG9zdC4KKyoqKiBZb3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1saWJnY3J5cHQtcHJlZml4CisqKiogdG8gc3BlY2lmeSBhIG1hdGNoaW5nIGNvbmZpZyBzY3JpcHQuCisqKipdXSkKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKyAgICBMSUJHQ1JZUFRfTElCUz0iIgorICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgIGZpCisgIEFDX1NVQlNUKExJQkdDUllQVF9DRkxBR1MpCisgIEFDX1NVQlNUKExJQkdDUllQVF9MSUJTKQorXSkKZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQudmVycyBiL3NyYy9saWJnY3J5cHQudmVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE4YzgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xpYmdjcnlwdC52ZXJzCkBAIC0wLDAgKzEsMTIxIEBACisjIGxpYmdjcnlwdC52ZXJzICAtIFdoYXQgc3ltYm9scyB0byBleHBvcnQgICAgICAgICAgICAgICAgICAtKi0gc3RkIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyMKKyMgTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisKKyMgTk9URTogV2hlbiBhZGRpbmcgbmV3IGZ1bmN0aW9ucywgcGxlYXNlIG1ha2Ugc3VyZSB0byBhZGQgdGhlbSB0bworIyB2aXNpYmlsaXR5LmggYW5kIGxpYmdjcnlwdC5kZWYgYXMgd2VsbC4KKworR0NSWVBUXzEuNiB7CisgIGdsb2JhbDoKKyAgICBnY3J5X2NoZWNrX3ZlcnNpb247IGdjcnlfY29udHJvbDsKKyAgICBnY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXI7IGdjcnlfc2V0X2ZhdGFsZXJyb3JfaGFuZGxlcjsKKyAgICBnY3J5X3NldF9nZXR0ZXh0X2hhbmRsZXI7IGdjcnlfc2V0X2xvZ19oYW5kbGVyOworICAgIGdjcnlfc2V0X291dG9mY29yZV9oYW5kbGVyOyBnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyOworCisgICAgZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vOyBnY3J5X2Vycl9jb2RlX3RvX2Vycm5vOworICAgIGdjcnlfZXJyX21ha2VfZnJvbV9lcnJubzsgZ2NyeV9lcnJvcl9mcm9tX2Vycm5vOworICAgIGdjcnlfc3RyZXJyb3I7IGdjcnlfc3Ryc291cmNlOworCisgICAgZ2NyeV9mcmVlOyBnY3J5X21hbGxvYzsgZ2NyeV9tYWxsb2Nfc2VjdXJlOyBnY3J5X2NhbGxvYzsKKyAgICBnY3J5X2NhbGxvY19zZWN1cmU7IGdjcnlfcmVhbGxvYzsgZ2NyeV9zdHJkdXA7IGdjcnlfaXNfc2VjdXJlOworICAgIGdjcnlfeGNhbGxvYzsgZ2NyeV94Y2FsbG9jX3NlY3VyZTsgZ2NyeV94bWFsbG9jOworICAgIGdjcnlfeG1hbGxvY19zZWN1cmU7IGdjcnlfeHJlYWxsb2M7IGdjcnlfeHN0cmR1cDsKKworICAgIGdjcnlfbWRfYWxnb19pbmZvOyBnY3J5X21kX2FsZ29fbmFtZTsgZ2NyeV9tZF9jbG9zZTsKKyAgICBnY3J5X21kX2NvcHk7IGdjcnlfbWRfY3RsOyBnY3J5X21kX2VuYWJsZTsgZ2NyeV9tZF9nZXQ7CisgICAgZ2NyeV9tZF9nZXRfYWxnbzsgZ2NyeV9tZF9nZXRfYWxnb19kbGVuOyBnY3J5X21kX2hhc2hfYnVmZmVyOworICAgIGdjcnlfbWRfaGFzaF9idWZmZXJzOworICAgIGdjcnlfbWRfaW5mbzsgZ2NyeV9tZF9pc19lbmFibGVkOyBnY3J5X21kX2lzX3NlY3VyZTsKKyAgICBnY3J5X21kX21hcF9uYW1lOyBnY3J5X21kX29wZW47IGdjcnlfbWRfcmVhZDsKKyAgICBnY3J5X21kX3Jlc2V0OyBnY3J5X21kX3NldGtleTsKKyAgICBnY3J5X21kX3dyaXRlOyBnY3J5X21kX2RlYnVnOworCisgICAgZ2NyeV9jaXBoZXJfYWxnb19pbmZvOyBnY3J5X2NpcGhlcl9hbGdvX25hbWU7IGdjcnlfY2lwaGVyX2Nsb3NlOworICAgIGdjcnlfY2lwaGVyX2N0bDsgZ2NyeV9jaXBoZXJfZGVjcnlwdDsgZ2NyeV9jaXBoZXJfZW5jcnlwdDsKKyAgICBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW47IGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbjsKKyAgICBnY3J5X2NpcGhlcl9pbmZvOyBnY3J5X2NpcGhlcl9tYXBfbmFtZTsKKyAgICBnY3J5X2NpcGhlcl9tb2RlX2Zyb21fb2lkOyBnY3J5X2NpcGhlcl9vcGVuOworICAgIGdjcnlfY2lwaGVyX3NldGtleTsgZ2NyeV9jaXBoZXJfc2V0aXY7IGdjcnlfY2lwaGVyX3NldGN0cjsKKyAgICBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGU7IGdjcnlfY2lwaGVyX2dldHRhZzsgZ2NyeV9jaXBoZXJfY2hlY2t0YWc7CisKKyAgICBnY3J5X21hY19hbGdvX2luZm87IGdjcnlfbWFjX2FsZ29fbmFtZTsgZ2NyeV9tYWNfbWFwX25hbWU7CisgICAgZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuOyBnY3J5X21hY19nZXRfYWxnb19rZXlsZW47CisgICAgZ2NyeV9tYWNfb3BlbjsgZ2NyeV9tYWNfY2xvc2U7IGdjcnlfbWFjX3NldGtleTsgZ2NyeV9tYWNfc2V0aXY7CisgICAgZ2NyeV9tYWNfd3JpdGU7IGdjcnlfbWFjX3JlYWQ7IGdjcnlfbWFjX3ZlcmlmeTsgZ2NyeV9tYWNfY3RsOworCisgICAgZ2NyeV9wa19hbGdvX2luZm87IGdjcnlfcGtfYWxnb19uYW1lOyBnY3J5X3BrX2N0bDsKKyAgICBnY3J5X3BrX2RlY3J5cHQ7IGdjcnlfcGtfZW5jcnlwdDsgZ2NyeV9wa19nZW5rZXk7CisgICAgZ2NyeV9wa19nZXRfa2V5Z3JpcDsgZ2NyeV9wa19nZXRfbmJpdHM7CisgICAgZ2NyeV9wa19tYXBfbmFtZTsgZ2NyeV9wa19yZWdpc3RlcjsgZ2NyeV9wa19zaWduOworICAgIGdjcnlfcGtfdGVzdGtleTsgZ2NyeV9wa192ZXJpZnk7CisgICAgZ2NyeV9wa19nZXRfY3VydmU7IGdjcnlfcGtfZ2V0X3BhcmFtOworCisgICAgZ2NyeV9wdWJrZXlfZ2V0X3NleHA7CisKKyAgICBnY3J5X2tkZl9kZXJpdmU7CisKKyAgICBnY3J5X3ByaW1lX2NoZWNrOyBnY3J5X3ByaW1lX2dlbmVyYXRlOworICAgIGdjcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yOyBnY3J5X3ByaW1lX3JlbGVhc2VfZmFjdG9yczsKKworICAgIGdjcnlfcmFuZG9tX2FkZF9ieXRlczsgZ2NyeV9yYW5kb21fYnl0ZXM7IGdjcnlfcmFuZG9tX2J5dGVzX3NlY3VyZTsKKyAgICBnY3J5X3JhbmRvbWl6ZTsgZ2NyeV9jcmVhdGVfbm9uY2U7CisKKyAgICBnY3J5X3NleHBfYWxpc3Q7IGdjcnlfc2V4cF9hcHBlbmQ7IGdjcnlfc2V4cF9idWlsZDsKKyAgICBnY3J5X3NleHBfYnVpbGRfYXJyYXk7IGdjcnlfc2V4cF9jYWRyOyBnY3J5X3NleHBfY2Fub25fbGVuOworICAgIGdjcnlfc2V4cF9jYXI7IGdjcnlfc2V4cF9jZHI7IGdjcnlfc2V4cF9jb25zOyBnY3J5X3NleHBfY3JlYXRlOworICAgIGdjcnlfc2V4cF9kdW1wOyBnY3J5X3NleHBfZmluZF90b2tlbjsgZ2NyeV9zZXhwX2xlbmd0aDsKKyAgICBnY3J5X3NleHBfbmV3OyBnY3J5X3NleHBfbnRoOyBnY3J5X3NleHBfbnRoX2J1ZmZlcjsgZ2NyeV9zZXhwX250aF9kYXRhOworICAgIGdjcnlfc2V4cF9udGhfbXBpOyBnY3J5X3NleHBfcHJlcGVuZDsgZ2NyeV9zZXhwX3JlbGVhc2U7CisgICAgZ2NyeV9zZXhwX3NwcmludDsgZ2NyeV9zZXhwX3NzY2FuOyBnY3J5X3NleHBfdmxpc3Q7CisgICAgZ2NyeV9zZXhwX250aF9zdHJpbmc7IGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtOworCisgICAgZ2NyeV9tcGlfaXNfbmVnOyBnY3J5X21waV9uZWc7IGdjcnlfbXBpX2FiczsKKyAgICBnY3J5X21waV9hZGQ7IGdjcnlfbXBpX2FkZF91aTsgZ2NyeV9tcGlfYWRkbTsgZ2NyeV9tcGlfYXByaW50OworICAgIGdjcnlfbXBpX2NsZWFyX2JpdDsgZ2NyeV9tcGlfY2xlYXJfZmxhZzsgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdDsKKyAgICBnY3J5X21waV9jbXA7IGdjcnlfbXBpX2NtcF91aTsgZ2NyeV9tcGlfY29weTsgZ2NyeV9tcGlfZGl2OworICAgIGdjcnlfbXBpX2R1bXA7IGdjcnlfbXBpX2djZDsgZ2NyeV9tcGlfZ2V0X2ZsYWc7IGdjcnlfbXBpX2dldF9uYml0czsKKyAgICBnY3J5X21waV9nZXRfb3BhcXVlOyBnY3J5X21waV9pbnZtOyBnY3J5X21waV9tb2Q7IGdjcnlfbXBpX211bDsKKyAgICBnY3J5X21waV9tdWxfMmV4cDsgZ2NyeV9tcGlfbXVsX3VpOyBnY3J5X21waV9tdWxtOyBnY3J5X21waV9uZXc7CisgICAgZ2NyeV9tcGlfcG93bTsgZ2NyeV9tcGlfcHJpbnQ7IGdjcnlfbXBpX3JhbmRvbWl6ZTsgZ2NyeV9tcGlfcmVsZWFzZTsKKyAgICBnY3J5X21waV9yc2hpZnQ7IGdjcnlfbXBpX3NjYW47IGdjcnlfbXBpX3NldDsgZ2NyeV9tcGlfc2V0X2JpdDsKKyAgICBnY3J5X21waV9zZXRfZmxhZzsgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQ7CisgICAgZ2NyeV9tcGlfc2V0X29wYXF1ZTsgZ2NyeV9tcGlfc2V0X29wYXF1ZV9jb3B5OworICAgIGdjcnlfbXBpX3NldF91aTsgZ2NyeV9tcGlfc25ldzsgZ2NyeV9tcGlfc3ViOyBnY3J5X21waV9zdWJfdWk7CisgICAgZ2NyeV9tcGlfc3VibTsgZ2NyeV9tcGlfc3dhcDsgZ2NyeV9tcGlfdGVzdF9iaXQ7CisgICAgZ2NyeV9tcGlfbHNoaWZ0OyBnY3J5X21waV9zbmF0Y2g7CisgICAgZ2NyeV9tcGlfcG9pbnRfbmV3OyBnY3J5X21waV9wb2ludF9yZWxlYXNlOworICAgIGdjcnlfbXBpX3BvaW50X2dldDsgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldDsKKyAgICBnY3J5X21waV9wb2ludF9zZXQ7IGdjcnlfbXBpX3BvaW50X3NuYXRjaF9zZXQ7CisgICAgZ2NyeV9tcGlfZWNfbmV3OworICAgIGdjcnlfbXBpX2VjX2dldF9tcGk7IGdjcnlfbXBpX2VjX2dldF9wb2ludDsKKyAgICBnY3J5X21waV9lY19zZXRfbXBpOyBnY3J5X21waV9lY19zZXRfcG9pbnQ7CisgICAgZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZTsKKyAgICBnY3J5X21waV9lY19kdXA7IGdjcnlfbXBpX2VjX2FkZDsgZ2NyeV9tcGlfZWNfbXVsOworICAgIGdjcnlfbXBpX2VjX2N1cnZlX3BvaW50OworCisgICAgZ2NyeV9sb2dfZGVidWc7CisgICAgZ2NyeV9sb2dfZGVidWdoZXg7IGdjcnlfbG9nX2RlYnVnbXBpOyBnY3J5X2xvZ19kZWJ1Z3BudDsgZ2NyeV9sb2dfZGVidWdzeHA7CisKKyAgICBfZ2NyeV9tcGlfZ2V0X2NvbnN0OworCisgICAgZ2NyeV9jdHhfcmVsZWFzZTsKKworICBsb2NhbDoKKyAgICAqOworCit9OwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MuYyBiL3NyYy9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjNTZlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9taXNjLmMKQEAgLTAsMCArMSw0NzAgQEAKKy8qIG1pc2MuYworICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA3LAorICogICAgICAgICAgICAgICAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAic2VjbWVtLmgiCisjaW5jbHVkZSAibXBpLmgiCisKK3N0YXRpYyBpbnQgdmVyYm9zaXR5X2xldmVsID0gMDsKKworc3RhdGljIHZvaWQgKCpmYXRhbF9lcnJvcl9oYW5kbGVyKSh2b2lkKixpbnQsIGNvbnN0IGNoYXIqKSA9IE5VTEw7CitzdGF0aWMgdm9pZCAqZmF0YWxfZXJyb3JfaGFuZGxlcl92YWx1ZSA9IDA7CitzdGF0aWMgdm9pZCAoKmxvZ19oYW5kbGVyKSh2b2lkKixpbnQsIGNvbnN0IGNoYXIqLCB2YV9saXN0KSA9IE5VTEw7CitzdGF0aWMgdm9pZCAqbG9nX2hhbmRsZXJfdmFsdWUgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciAqKCp1c2VyX2dldHRleHRfaGFuZGxlcikoIGNvbnN0IGNoYXIgKiApID0gTlVMTDsKKwordm9pZAorX2djcnlfc2V0X2dldHRleHRfaGFuZGxlciAoY29uc3QgY2hhciAqKCpmKShjb25zdCBjaGFyKikpCit7CisgICAgdXNlcl9nZXR0ZXh0X2hhbmRsZXIgPSBmOworfQorCisKK2NvbnN0IGNoYXIgKgorX2djcnlfZ2V0dGV4dCggY29uc3QgY2hhciAqa2V5ICkKK3sKKyAgICBpZiggdXNlcl9nZXR0ZXh0X2hhbmRsZXIgKQorCXJldHVybiB1c2VyX2dldHRleHRfaGFuZGxlcigga2V5ICk7CisgICAgLyogRklYTUU6IHN3aXRjaCB0aGUgZG9tYWluIHRvIGdudXBnIGFuZCByZXN0b3JlIGxhdGVyICovCisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZAorX2djcnlfc2V0X2ZhdGFsZXJyb3JfaGFuZGxlciggdm9pZCAoKmZuYykodm9pZCosaW50LCBjb25zdCBjaGFyKiksIHZvaWQgKnZhbHVlKQoreworICAgIGZhdGFsX2Vycm9yX2hhbmRsZXJfdmFsdWUgPSB2YWx1ZTsKKyAgICBmYXRhbF9lcnJvcl9oYW5kbGVyID0gZm5jOworfQorCitzdGF0aWMgdm9pZAord3JpdGUyc3RkZXJyKCBjb25zdCBjaGFyICpzICkKK3sKKyAgLyogRHVtbXkgdmFyaWFibGUgdG8gc2lsZW5jZSBnY2Mgd2FybmluZy4gICovCisgIGludCByZXMgPSB3cml0ZSggMiwgcywgc3RybGVuKHMpICk7CisgICh2b2lkKSByZXM7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZmF0YWwgZXJyb3JzLiAgQSBjYWxsZXIgbWlnaHQgd2FudCB0bworICogc2V0IGhpcyBvd24gaGFuZGxlciBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIGFib3J0KCkuCisgKi8KK3ZvaWQKK19nY3J5X2ZhdGFsX2Vycm9yIChpbnQgcmMsIGNvbnN0IGNoYXIgKnRleHQpCit7CisgIGlmICggIXRleHQgKSAvKiBnZXQgYSBkZWZhdWx0IHRleHQgKi8KKyAgICB0ZXh0ID0gZ3BnX3N0cmVycm9yIChyYyk7CisKKyAgaWYgKGZhdGFsX2Vycm9yX2hhbmRsZXIgJiYgIWZpcHNfbW9kZSAoKSApCisgICAgZmF0YWxfZXJyb3JfaGFuZGxlciAoZmF0YWxfZXJyb3JfaGFuZGxlcl92YWx1ZSwgcmMsIHRleHQpOworCisgIGZpcHNfc2lnbmFsX2ZhdGFsX2Vycm9yICh0ZXh0KTsKKyAgd3JpdGUyc3RkZXJyKCJcbkZhdGFsIGVycm9yOiAiKTsKKyAgd3JpdGUyc3RkZXJyKHRleHQpOworICB3cml0ZTJzdGRlcnIoIlxuIik7CisgIF9nY3J5X3NlY21lbV90ZXJtICgpOworICBhYm9ydCAoKTsKK30KKwordm9pZAorX2djcnlfc2V0X2xvZ19oYW5kbGVyICh2b2lkICgqZikodm9pZCosaW50LCBjb25zdCBjaGFyKiwgdmFfbGlzdCksIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBsb2dfaGFuZGxlciA9IGY7CisgICAgbG9nX2hhbmRsZXJfdmFsdWUgPSBvcGFxdWU7Cit9CisKK3ZvaWQKK19nY3J5X3NldF9sb2dfdmVyYm9zaXR5KCBpbnQgbGV2ZWwgKQoreworICAgIHZlcmJvc2l0eV9sZXZlbCA9IGxldmVsOworfQorCitpbnQKK19nY3J5X2xvZ192ZXJib3NpdHkoIGludCBsZXZlbCApCit7CisgICAgcmV0dXJuIHZlcmJvc2l0eV9sZXZlbCA+PSBsZXZlbDsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIFRoaXMgaXMgb3VyIGxvZyBmdW5jdGlvbiB3aGljaCBwcmludHMgYWxsIGxvZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IKKyAqIHVzaW5nIHRoZSBmdW5jdGlvbiBkZWZpbmVkIHdpdGggZ2NyeV9zZXRfbG9nX2hhbmRsZXIoKS4KKyAqLwordm9pZAorX2djcnlfbG9ndiggaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJnX3B0ciApCit7CisgIGlmIChsb2dfaGFuZGxlcikKKyAgICBsb2dfaGFuZGxlciAobG9nX2hhbmRsZXJfdmFsdWUsIGxldmVsLCBmbXQsIGFyZ19wdHIpOworICBlbHNlCisgICAgeworICAgICAgc3dpdGNoIChsZXZlbCkKKyAgICAgICAgeworICAgICAgICBjYXNlIEdDUllfTE9HX0NPTlQ6ICBicmVhazsKKyAgICAgICAgY2FzZSBHQ1JZX0xPR19JTkZPOiAgYnJlYWs7CisgICAgICAgIGNhc2UgR0NSWV9MT0dfV0FSTjogIGJyZWFrOworICAgICAgICBjYXNlIEdDUllfTE9HX0VSUk9SOiBicmVhazsKKyAgICAgICAgY2FzZSBHQ1JZX0xPR19GQVRBTDogZnB1dHMoIkZhdGFsOiAiLHN0ZGVyciApOyBicmVhazsKKyAgICAgICAgY2FzZSBHQ1JZX0xPR19CVUc6ICAgZnB1dHMoIk9oaGhoIGplZWVlOiAiLCBzdGRlcnIpOyBicmVhazsKKyAgICAgICAgY2FzZSBHQ1JZX0xPR19ERUJVRzogZnB1dHMoIkRCRzogIiwgc3RkZXJyICk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBmcHJpbnRmKHN0ZGVyciwiW1Vua25vd24gbG9nIGxldmVsICVkXTogIiwgbGV2ZWwgKTsgYnJlYWs7CisJfQorICAgICAgdmZwcmludGYoc3RkZXJyLGZtdCxhcmdfcHRyKSA7CisgICAgfQorCisgIGlmICggbGV2ZWwgPT0gR0NSWV9MT0dfRkFUQUwgfHwgbGV2ZWwgPT0gR0NSWV9MT0dfQlVHICkKKyAgICB7CisgICAgICBmaXBzX3NpZ25hbF9mYXRhbF9lcnJvciAoImludGVybmFsIGVycm9yIChmYXRhbCBvciBidWcpIik7CisgICAgICBfZ2NyeV9zZWNtZW1fdGVybSAoKTsKKyAgICAgIGFib3J0ICgpOworICAgIH0KK30KKworCit2b2lkCitfZ2NyeV9sb2coIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4gKQoreworICAgIHZhX2xpc3QgYXJnX3B0ciA7CisKKyAgICB2YV9zdGFydCggYXJnX3B0ciwgZm10ICkgOworICAgIF9nY3J5X2xvZ3YoIGxldmVsLCBmbXQsIGFyZ19wdHIgKTsKKyAgICB2YV9lbmQoYXJnX3B0cik7Cit9CisKKworI2lmIGRlZmluZWQoSk5MSUJfR0NDX01fRlVOQ1RJT04pIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAordm9pZAorX2djcnlfYnVnKCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYyApCit7CisgICAgX2djcnlfbG9nKCBHQ1JZX0xPR19CVUcsCisJICAgICAoIi4uLiB0aGlzIGlzIGEgYnVnICglczolZDolcylcbiIpLCBmaWxlLCBsaW5lLCBmdW5jICk7CisgICAgYWJvcnQoKTsgLyogbmV2ZXIgY2FsbGVkLCBidXQgaXQgbWFrZXMgdGhlIGNvbXBpbGVyIGhhcHB5ICovCit9Cit2b2lkCitfZ2NyeV9hc3NlcnRfZmFpbGVkIChjb25zdCBjaGFyICpleHByLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMpCit7CisgIF9nY3J5X2xvZyAoR0NSWV9MT0dfQlVHLAorICAgICAgICAgICAgICgiQXNzZXJ0aW9uIGAlcycgZmFpbGVkICglczolZDolcylcbiIpLCBleHByLCBmaWxlLCBsaW5lLCBmdW5jICk7CisgIGFib3J0KCk7IC8qIE5ldmVyIGNhbGxlZCwgYnV0IGl0IG1ha2VzIHRoZSBjb21waWxlciBoYXBweS4gKi8KK30KKyNlbHNlCit2b2lkCitfZ2NyeV9idWcoIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lICkKK3sKKyAgICBfZ2NyeV9sb2coIEdDUllfTE9HX0JVRywKKwkgICAgIF8oInlvdSBmb3VuZCBhIGJ1ZyAuLi4gKCVzOiVkKVxuIiksIGZpbGUsIGxpbmUpOworICAgIGFib3J0KCk7IC8qIG5ldmVyIGNhbGxlZCwgYnV0IGl0IG1ha2VzIHRoZSBjb21waWxlciBoYXBweSAqLworfQordm9pZAorX2djcnlfYXNzZXJ0X2ZhaWxlZCAoY29uc3QgY2hhciAqZXhwciwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgIF9nY3J5X2xvZyAoR0NSWV9MT0dfQlVHLAorICAgICAgICAgICAgICgiQXNzZXJ0aW9uIGAlcycgZmFpbGVkICglczolZClcbiIpLCBleHByLCBmaWxlLCBsaW5lKTsKKyAgYWJvcnQoKTsgLyogTmV2ZXIgY2FsbGVkLCBidXQgaXQgbWFrZXMgdGhlIGNvbXBpbGVyIGhhcHB5LiAqLworfQorI2VuZGlmCisKK3ZvaWQKK19nY3J5X2xvZ19pbmZvKCBjb25zdCBjaGFyICpmbXQsIC4uLiApCit7CisgICAgdmFfbGlzdCBhcmdfcHRyIDsKKworICAgIHZhX3N0YXJ0KCBhcmdfcHRyLCBmbXQgKSA7CisgICAgX2djcnlfbG9ndiggR0NSWV9MT0dfSU5GTywgZm10LCBhcmdfcHRyICk7CisgICAgdmFfZW5kKGFyZ19wdHIpOworfQorCitpbnQKK19nY3J5X2xvZ19pbmZvX3dpdGhfZHVtbXlfZnAgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLiApCit7CisgICAgdmFfbGlzdCBhcmdfcHRyOworCisgICAgKHZvaWQpZnA7CisgICAgdmFfc3RhcnQoIGFyZ19wdHIsIGZtdCApIDsKKyAgICBfZ2NyeV9sb2d2KCBHQ1JZX0xPR19JTkZPLCBmbXQsIGFyZ19wdHIgKTsKKyAgICB2YV9lbmQoYXJnX3B0cik7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK19nY3J5X2xvZ19lcnJvciggY29uc3QgY2hhciAqZm10LCAuLi4gKQoreworICAgIHZhX2xpc3QgYXJnX3B0ciA7CisKKyAgICB2YV9zdGFydCggYXJnX3B0ciwgZm10ICkgOworICAgIF9nY3J5X2xvZ3YoIEdDUllfTE9HX0VSUk9SLCBmbXQsIGFyZ19wdHIgKTsKKyAgICB2YV9lbmQoYXJnX3B0cik7Cit9CisKKwordm9pZAorX2djcnlfbG9nX2ZhdGFsKCBjb25zdCBjaGFyICpmbXQsIC4uLiApCit7CisgICAgdmFfbGlzdCBhcmdfcHRyIDsKKworICAgIHZhX3N0YXJ0KCBhcmdfcHRyLCBmbXQgKSA7CisgICAgX2djcnlfbG9ndiggR0NSWV9MT0dfRkFUQUwsIGZtdCwgYXJnX3B0ciApOworICAgIHZhX2VuZChhcmdfcHRyKTsKKyAgICBhYm9ydCgpOyAvKiBuZXZlciBjYWxsZWQsIGJ1dCBpdCBtYWtlcyB0aGUgY29tcGlsZXIgaGFwcHkgKi8KK30KKwordm9pZAorX2djcnlfbG9nX2J1ZyggY29uc3QgY2hhciAqZm10LCAuLi4gKQoreworICAgIHZhX2xpc3QgYXJnX3B0ciA7CisKKyAgICB2YV9zdGFydCggYXJnX3B0ciwgZm10ICkgOworICAgIF9nY3J5X2xvZ3YoIEdDUllfTE9HX0JVRywgZm10LCBhcmdfcHRyICk7CisgICAgdmFfZW5kKGFyZ19wdHIpOworICAgIGFib3J0KCk7IC8qIG5ldmVyIGNhbGxlZCwgYnV0IGl0IG1ha2VzIHRoZSBjb21waWxlciBoYXBweSAqLworfQorCit2b2lkCitfZ2NyeV9sb2dfZGVidWcoIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkKK3sKKyAgICB2YV9saXN0IGFyZ19wdHIgOworCisgICAgdmFfc3RhcnQoIGFyZ19wdHIsIGZtdCApIDsKKyAgICBfZ2NyeV9sb2d2KCBHQ1JZX0xPR19ERUJVRywgZm10LCBhcmdfcHRyICk7CisgICAgdmFfZW5kKGFyZ19wdHIpOworfQorCisKK3ZvaWQKK19nY3J5X2xvZ19wcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgaWYgKGZtdCkKKyAgICB7CisgICAgICB2YV9zdGFydCggYXJnX3B0ciwgZm10ICkgOworICAgICAgX2djcnlfbG9ndiAoR0NSWV9MT0dfQ09OVCwgZm10LCBhcmdfcHRyKTsKKyAgICAgIHZhX2VuZChhcmdfcHRyKTsKKyAgICB9Cit9CisKKworLyogSGVscGVyIGZvciBfZ2NyeV9sb2dfcHJpbnRoZXggYW5kIF9nY3J5X2xvZ19wcmludG1waS4gICovCitzdGF0aWMgdm9pZAorZG9fcHJpbnRoZXggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnRleHQyLAorICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgaW50IHdyYXAgPSAwOworICBpbnQgY250ID0gMDsKKworICBpZiAodGV4dCAmJiAqdGV4dCkKKyAgICB7CisgICAgICB3cmFwID0gMTsKKyAgICAgIGxvZ19kZWJ1ZyAoIiVzOiVzIiwgdGV4dCwgdGV4dDIpOworICAgICAgaWYgKHRleHQyWzFdID09ICdbJyAmJiBsZW5ndGggJiYgYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgLyogU3RhcnQgd2l0aCBhIG5ldyBsaW5lIHNvIHRoYXQgd2UgZ2V0IG5pY2Ugb3V0cHV0IGZvcgorICAgICAgICAgICAgIG9wYXF1ZSBNUElTOgorICAgICAgICAgICAgICAgInZhbHVlOiBbMzEgYml0XSIKKyAgICAgICAgICAgICAgICIgICAgICAgIDAxMDIwMzAwIiAgKi8KKyAgICAgICAgICBsb2dfcHJpbnRmICgiXG4iKTsKKyAgICAgICAgICB0ZXh0MiA9ICIgIjsKKyAgICAgICAgICBsb2dfZGVidWcgKCIlKnMgICIsIChpbnQpc3RybGVuKHRleHQpLCAiIik7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZmZlcjsKKyAgICAgIGZvciAoOyBsZW5ndGgtLTsgcCsrKQorICAgICAgICB7CisgICAgICAgICAgbG9nX3ByaW50ZiAoIiUwMngiLCAqcCk7CisgICAgICAgICAgaWYgKHdyYXAgJiYgKytjbnQgPT0gMzIgJiYgbGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjbnQgPSAwOworICAgICAgICAgICAgICBsb2dfcHJpbnRmICgiIFxcXG4iKTsKKyAgICAgICAgICAgICAgbG9nX2RlYnVnICgiJSpzICUqcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzdHJsZW4odGV4dCksICIiLCAoaW50KXN0cmxlbih0ZXh0MiksICIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgaWYgKHRleHQpCisgICAgbG9nX3ByaW50ZiAoIlxuIik7Cit9CisKKworLyogUHJpbnQgYSBoZXhkdW1wIG9mIEJVRkZFUi4gIFdpdGggVEVYVCBvZiBOVUxMIHByaW50IGp1c3QgdGhlIHJhdworICAgZHVtcCB3aXRob3V0IGFueSB3cmFwcHBpbmcsIHdpdGggVEVYVCBhbiBlbXB0eSBzdHJpbmcsIHByaW50IGEKKyAgIHRyYWlsaW5nIGxpbmVmZWVkLCBvdGhlcndpc2UgcHJpbnQgYW4gZW50aXJlIGRlYnVnIGxpbmUuICovCit2b2lkCitfZ2NyeV9sb2dfcHJpbnRoZXggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgZG9fcHJpbnRoZXggKHRleHQsICIgIiwgYnVmZmVyLCBsZW5ndGgpOworfQorCisKKy8qIFByaW50IE1QSSBpbiBoZXggbm90YXRpb24uICBUbyBtYWtlIGNsZWFyIHRoYXQgdGhlIG91dHB1dCBpcyBhbiBNUEkKKyAgIGEgc2lnbiBpcyBhbHdheXMgcHJpbnRlZC4gV2l0aCBURVhUIG9mIE5VTEwgcHJpbnQganVzdCB0aGUgcmF3IGR1bXAKKyAgIHdpdGhvdXQgYW55IHdyYXBwaW5nLCB3aXRoIFRFWFQgYW4gZW1wdHkgc3RyaW5nLCBwcmludCBhIHRyYWlsaW5nCisgICBsaW5lZmVlZCwgb3RoZXJ3aXNlIHByaW50IGFuIGVudGlyZSBkZWJ1ZyBsaW5lLiAqLwordm9pZAorX2djcnlfbG9nX3ByaW50bXBpIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X21waV90IG1waSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmF3bXBpOworICB1bnNpZ25lZCBpbnQgcmF3bXBpbGVuOworICBpbnQgc2lnbjsKKworICBpZiAoIW1waSkKKyAgICBkb19wcmludGhleCAodGV4dD8gdGV4dDoiICIsICIgKG51bGwpIiwgTlVMTCwgMCk7CisgIGVsc2UgaWYgKG1waV9pc19vcGFxdWUgKG1waSkpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IG5iaXRzOworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIGNoYXIgcHJlZml4WzMwXTsKKworICAgICAgcCA9IG1waV9nZXRfb3BhcXVlIChtcGksICZuYml0cyk7CisgICAgICBzbnByaW50ZiAocHJlZml4LCBzaXplb2YgcHJlZml4LCAiIFsldSBiaXRdIiwgbmJpdHMpOworICAgICAgZG9fcHJpbnRoZXggKHRleHQ/IHRleHQ6IiAiLCBwcmVmaXgsIHAsIChuYml0cys3KS84KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByYXdtcGkgPSBfZ2NyeV9tcGlfZ2V0X2J1ZmZlciAobXBpLCAwLCAmcmF3bXBpbGVuLCAmc2lnbik7CisgICAgICBpZiAoIXJhd21waSkKKyAgICAgICAgZG9fcHJpbnRoZXggKHRleHQ/IHRleHQ6IiAiLCAiIFtvdXQgb2YgY29yZV0iLCBOVUxMLCAwKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICghcmF3bXBpbGVuKQorICAgICAgICAgICAgZG9fcHJpbnRoZXggKHRleHQsIHNpZ24/ICItIjoiKyIsICIiLCAxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkb19wcmludGhleCAodGV4dCwgc2lnbj8gIi0iOiIrIiwgcmF3bXBpLCByYXdtcGlsZW4pOworICAgICAgICAgIHhmcmVlIChyYXdtcGkpOworICAgICAgICB9CisgICAgfQorfQorCisKK3N0YXRpYyBpbnQKK2NvdW50X2Nsb3NpbmdfcGFyZW5zIChjb25zdCBjaGFyICpwKQoreworICBpbnQgY291bnQgPSAwOworCisgIGZvciAoOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnKScpCisgICAgICBjb3VudCsrOworICAgIGVsc2UgaWYgKCFzdHJjaHIgKCJcbiBcdCIsICpwKSkKKyAgICAgIHJldHVybiAwOworCisgIHJldHVybiBjb3VudDsKK30KKworCisvKiBQcmludCBTRVhQIGluIGh1bWFuIHJlYWRhYmFsZSBmb3JtYXQuICBXaXRoIFRFWFQgb2YgTlVMTCBwcmludCBqdXN0IHRoZSByYXcKKyAgIGR1bXAgd2l0aG91dCBhbnkgd3JhcHBwaW5nLCB3aXRoIFRFWFQgYW4gZW1wdHkgc3RyaW5nLCBwcmludCBhCisgICB0cmFpbGluZyBsaW5lZmVlZCwgb3RoZXJ3aXNlIHByaW50IHRoZSBmdWxsIGRlYnVnIG91dHB1dC4gKi8KK3ZvaWQKK19nY3J5X2xvZ19wcmludHN4cCAoY29uc3QgY2hhciAqdGV4dCwgZ2NyeV9zZXhwX3Qgc2V4cCkKK3sKKyAgaW50IHdpdGhfbGYgPSAwOworCisgIGlmICh0ZXh0ICYmICp0ZXh0KQorICAgIHsKKyAgICAgIGlmICgod2l0aF9sZiA9ICEhc3RyY2hyICh0ZXh0LCAnXG4nKSkpCisgICAgICAgIGxvZ19kZWJ1ZyAoIiVzIiwgdGV4dCk7CisgICAgICBlbHNlCisgICAgICAgIGxvZ19kZWJ1ZyAoIiVzOiAiLCB0ZXh0KTsKKyAgICB9CisgIGlmIChzZXhwKQorICAgIHsKKyAgICAgIGludCBhbnkgPSAwOworICAgICAgaW50IG5fY2xvc2luZzsKKyAgICAgIGNoYXIgKmJ1ZiwgKnBlbmQ7CisgICAgICBjb25zdCBjaGFyICpwOworICAgICAgc2l6ZV90IHNpemU7CisKKyAgICAgIHNpemUgPSBzZXhwX3NwcmludCAoc2V4cCwgR0NSWVNFWFBfRk1UX0FEVkFOQ0VELCBOVUxMLCAwKTsKKyAgICAgIHAgPSBidWYgPSB4bWFsbG9jIChzaXplKTsKKyAgICAgIHNleHBfc3ByaW50IChzZXhwLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIGJ1Ziwgc2l6ZSk7CisKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYW55ICYmICF3aXRoX2xmKQorICAgICAgICAgICAgbG9nX2RlYnVnICgiJSpzICAiLCAoaW50KXN0cmxlbih0ZXh0KSwgIiIpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFueSA9IDE7CisgICAgICAgICAgcGVuZCA9IHN0cmNociAocCwgJ1xuJyk7CisgICAgICAgICAgc2l6ZSA9IHBlbmQ/IChwZW5kIC0gcCkgOiBzdHJsZW4gKHApOworICAgICAgICAgIGlmICh3aXRoX2xmKQorICAgICAgICAgICAgbG9nX2RlYnVnICgiJS4qcyIsIChpbnQpc2l6ZSwgcCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIiUuKnMiLCAoaW50KXNpemUsIHApOworICAgICAgICAgIGlmIChwZW5kKQorICAgICAgICAgICAgcCA9IHBlbmQgKyAxOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAgKz0gc2l6ZTsKKyAgICAgICAgICBuX2Nsb3NpbmcgPSBjb3VudF9jbG9zaW5nX3BhcmVucyAocCk7CisgICAgICAgICAgaWYgKG5fY2xvc2luZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgd2hpbGUgKG5fY2xvc2luZy0tKQorICAgICAgICAgICAgICAgIGxvZ19wcmludGYgKCIpIik7CisgICAgICAgICAgICAgIHAgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBsb2dfcHJpbnRmICgiXG4iKTsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCpwKTsKKyAgICAgIHhmcmVlIChidWYpOworICAgIH0KKyAgZWxzZSBpZiAodGV4dCkKKyAgICBsb2dfcHJpbnRmICgiXG4iKTsKK30KKworCit2b2lkCitfX2djcnlfYnVybl9zdGFjayAodW5zaWduZWQgaW50IGJ5dGVzKQoreworI2lmZGVmIEhBVkVfVkxBCisgICAgLyogKGJ5dGVzID09IDAgPyAxIDogYnl0ZXMpID09ICghYnl0ZXMgKyBieXRlcykgKi8KKyAgICB1bnNpZ25lZCBpbnQgYnVmbGVuID0gKCghYnl0ZXMgKyBieXRlcykgKyA2MykgJiB+NjM7CisgICAgdm9sYXRpbGUgY2hhciBidWZbYnVmbGVuXTsKKworICAgIHdpcGVtZW1vcnkgKGJ1Ziwgc2l6ZW9mIGJ1Zik7CisjZWxzZQorICAgIHZvbGF0aWxlIGNoYXIgYnVmWzY0XTsKKworICAgIHdpcGVtZW1vcnkgKGJ1Ziwgc2l6ZW9mIGJ1Zik7CisKKyAgICBpZiAoYnl0ZXMgPiBzaXplb2YgYnVmKQorICAgICAgICBfZ2NyeV9idXJuX3N0YWNrIChieXRlcyAtIHNpemVvZiBidWYpOworI2VuZGlmCit9CisKKyNpZm5kZWYgSEFWRV9HQ0NfQVNNX1ZPTEFUSUxFX01FTU9SWQordm9pZAorX19nY3J5X2J1cm5fc3RhY2tfZHVtbXkgKHZvaWQpCit7Cit9CisjZW5kaWYKKwordm9pZAorX2djcnlfZGl2aWRlX2J5X3plcm8gKHZvaWQpCit7CisgICAgZ3BnX2Vycl9zZXRfZXJybm8gKEVET00pOworICAgIF9nY3J5X2ZhdGFsX2Vycm9yIChncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pLCAiZGl2aWRlIGJ5IHplcm8iKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9taXNzaW5nLXN0cmluZy5jIGIvc3JjL21pc3Npbmctc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NmMwMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9taXNzaW5nLXN0cmluZy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIG1pc3Npbmctc3RyaW5nLmMgLSBtaXNzaW5nIHN0cmluZyB1dGlsaXRpZXMKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyAqICAgICAgICAgICAgICAgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImcxMGxpYi5oIgorCisKKyNpZm5kZWYgSEFWRV9TVFBDUFkKK2NoYXIgKgorc3RwY3B5KGNoYXIgKmEsY29uc3QgY2hhciAqYikKK3sKKyAgICB3aGlsZSggKmIgKQorCSphKysgPSAqYisrOworICAgICphID0gMDsKKworICAgIHJldHVybiAoY2hhciopYTsKK30KKyNlbmRpZgorCisKKyNpZm5kZWYgSEFWRV9TVFJDQVNFQ01QCitpbnQKK3N0cmNhc2VjbXAoIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIgKQoreworICAgIGZvciggOyAqYSAmJiAqYjsgYSsrLCBiKysgKSB7CisJaWYoICphICE9ICpiICYmIHRvdXBwZXIoKmEpICE9IHRvdXBwZXIoKmIpICkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAqKGNvbnN0IGJ5dGUqKWEgLSAqKGNvbnN0IGJ5dGUqKWI7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9tcGkuaCBiL3NyYy9tcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTU3YjlhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21waS5oCkBAIC0wLDAgKzEsMzAxIEBACisvKiBtcGkuaCAgLSAgTXVsdGkgUHJlY2lzaW9uIEludGVnZXJzCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTYsIDE5OTgsCisgKiAgICAgICAgICAgICAgIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAqCSBBY3R1YWxseSBpdCdzIHRoZSBzYW1lIGNvZGUgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMgaW4gdGhlCisgKgkgd2F5IHRoZSBkYXRhIGlzIHN0b3JlZDsgdGhpcyBpcyB0byBzdXBwb3J0IHRoZSBhYnN0cmFjdGlvbgorICoJIG9mIGFuIG9wdGlvbmFsIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgdXNlZAorICoJIHRvIGF2b2lkIHJldmVhbGluZyBvZiBzZW5zaXRpdmUgZGF0YSBkdWUgdG8gcGFnaW5nIGV0Yy4KKyAqLworCisjaWZuZGVmIEcxMF9NUElfSAorI2RlZmluZSBHMTBfTVBJX0gKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgIi4uL21waS9tcGktYXNtLWRlZnMuaCIKKworI2luY2x1ZGUgImcxMGxpYi5oIgorCisjaWZuZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjZXJyb3IgdGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIGxpYmdjcnlwdAorI2VuZGlmCisKKyNpZm5kZWYgQklUU19QRVJfTVBJX0xJTUIKKyNpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gU0laRU9GX1VOU0lHTkVEX0lOVAorICB0eXBlZGVmIHVuc2lnbmVkIGludCBtcGlfbGltYl90OworICB0eXBlZGVmICAgc2lnbmVkIGludCBtcGlfbGltYl9zaWduZWRfdDsKKyNlbGlmIEJZVEVTX1BFUl9NUElfTElNQiA9PSBTSVpFT0ZfVU5TSUdORURfTE9ORworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IG1waV9saW1iX3Q7CisgIHR5cGVkZWYgICBzaWduZWQgbG9uZyBpbnQgbXBpX2xpbWJfc2lnbmVkX3Q7CisjZWxpZiBCWVRFU19QRVJfTVBJX0xJTUIgPT0gU0laRU9GX1VOU0lHTkVEX0xPTkdfTE9ORworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbXBpX2xpbWJfdDsKKyAgdHlwZWRlZiAgIHNpZ25lZCBsb25nIGxvbmcgaW50IG1waV9saW1iX3NpZ25lZF90OworI2VsaWYgQllURVNfUEVSX01QSV9MSU1CID09IFNJWkVPRl9VTlNJR05FRF9TSE9SVAorICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBtcGlfbGltYl90OworICB0eXBlZGVmICAgc2lnbmVkIHNob3J0IGludCBtcGlfbGltYl9zaWduZWRfdDsKKyNlbHNlCisjZXJyb3IgQllURVNfUEVSX01QSV9MSU1CIGRvZXMgbm90IG1hdGNoIGFueSBDIHR5cGUKKyNlbmRpZgorI2RlZmluZSBCSVRTX1BFUl9NUElfTElNQiAgICAoOCpCWVRFU19QRVJfTVBJX0xJTUIpCisjZW5kaWYgLypCSVRTX1BFUl9NUElfTElNQiovCisKKyNkZWZpbmUgREJHX01QSSAgICAgX2djcnlfZ2V0X2RlYnVnX2ZsYWcoIDIgKTsKKworc3RydWN0IGdjcnlfbXBpCit7CisgIGludCBhbGxvY2VkOyAgICAgICAgIC8qIEFycmF5IHNpemUgKCMgb2YgYWxsb2NhdGVkIGxpbWJzKS4gKi8KKyAgaW50IG5saW1iczsgICAgICAgICAgLyogTnVtYmVyIG9mIHZhbGlkIGxpbWJzLiAqLworICBpbnQgc2lnbjsJICAgICAgIC8qIEluZGljYXRlcyBhIG5lZ2F0aXZlIG51bWJlciBhbmQgaXMgYWxzbyB1c2VkCisJCSAgICAgICAgICBmb3Igb3BhcXVlIE1QSXMgdG8gc3RvcmUgdGhlIGxlbmd0aC4gICovCisgIHVuc2lnbmVkIGludCBmbGFnczsgLyogQml0IDA6IEFycmF5IHRvIGJlIGFsbG9jYXRlZCBpbiBzZWN1cmUgbWVtb3J5IHNwYWNlLiovCisgICAgICAgICAgICAgICAgICAgICAgLyogQml0IDI6IFRoZSBsaW1iIGlzIGEgcG9pbnRlciB0byBzb21lIG1fYWxsb2NlZCBkYXRhLiovCisgICAgICAgICAgICAgICAgICAgICAgLyogQml0IDQ6IEltbXV0YWJsZSBNUEkgLSB0aGUgTVBJIG1heSBub3QgYmUgbW9kaWZpZWQuICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIEJpdCA1OiBDb25zdGFudCBNUEkgLSB0aGUgTVBJIHdpbGwgbm90IGJlIGZyZWVkLiAgKi8KKyAgbXBpX2xpbWJfdCAqZDsgICAgICAvKiBBcnJheSB3aXRoIHRoZSBsaW1icyAqLworfTsKKworI2RlZmluZSBNUElfTlVMTCBOVUxMCisKKyNkZWZpbmUgbXBpX2dldF9ubGltYnMoYSkgICAgICgoYSktPm5saW1icykKKyNkZWZpbmUgbXBpX2hhc19zaWduKGEpCSAgICAgICgoYSktPnNpZ24pCisKKy8qLS0gbXBpdXRpbC5jIC0tKi8KKworI2lmZGVmIE1fREVCVUcKKyMgZGVmaW5lIG1waV9hbGxvYyhuKQlfZ2NyeV9tcGlfZGVidWdfYWxsb2MoKG4pLCBNX0RCR0lORk8oIF9fTElORV9fICkgKQorIyBkZWZpbmUgbXBpX2FsbG9jX3NlY3VyZShuKSAgX2djcnlfbXBpX2RlYnVnX2FsbG9jX3NlY3VyZSgobiksIE1fREJHSU5GTyggX19MSU5FX18gKSApCisjIGRlZmluZSBtcGlfZnJlZShhKQlfZ2NyeV9tcGlfZGVidWdfZnJlZSgoYSksIE1fREJHSU5GTyhfX0xJTkVfXykgKQorIyBkZWZpbmUgbXBpX3Jlc2l6ZShhLGIpIF9nY3J5X21waV9kZWJ1Z19yZXNpemUoKGEpLChiKSwgTV9EQkdJTkZPKF9fTElORV9fKSApCisjIGRlZmluZSBtcGlfY29weShhKQkgIF9nY3J5X21waV9kZWJ1Z19jb3B5KChhKSwgTV9EQkdJTkZPKF9fTElORV9fKSApCisgIGdjcnlfbXBpX3QgX2djcnlfbXBpX2RlYnVnX2FsbG9jKCB1bnNpZ25lZCBubGltYnMsIGNvbnN0IGNoYXIgKmluZm8gKTsKKyAgZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfZGVidWdfYWxsb2Nfc2VjdXJlKCB1bnNpZ25lZCBubGltYnMsIGNvbnN0IGNoYXIgKmluZm8gKTsKKyAgdm9pZCBfZ2NyeV9tcGlfZGVidWdfZnJlZSggZ2NyeV9tcGlfdCBhLCBjb25zdCBjaGFyICppbmZvICk7CisgIHZvaWQgX2djcnlfbXBpX2RlYnVnX3Jlc2l6ZSggZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBubGltYnMsIGNvbnN0IGNoYXIgKmluZm8gKTsKKyAgZ2NyeV9tcGlfdCAgX2djcnlfbXBpX2RlYnVnX2NvcHkoIGdjcnlfbXBpX3QgYSwgY29uc3QgY2hhciAqaW5mbwkpOworI2Vsc2UKKyMgZGVmaW5lIG1waV9hbGxvYyhuKQkgICAgICAgX2djcnlfbXBpX2FsbG9jKChuKSApCisjIGRlZmluZSBtcGlfYWxsb2Nfc2VjdXJlKG4pICBfZ2NyeV9tcGlfYWxsb2Nfc2VjdXJlKChuKSApCisjIGRlZmluZSBtcGlfZnJlZShhKQkgICAgICAgX2djcnlfbXBpX2ZyZWUoKGEpICkKKyMgZGVmaW5lIG1waV9yZXNpemUoYSxiKSAgICAgIF9nY3J5X21waV9yZXNpemUoKGEpLChiKSkKKyMgZGVmaW5lIG1waV9jb3B5KGEpCSAgICAgICBfZ2NyeV9tcGlfY29weSgoYSkpCisgIGdjcnlfbXBpX3QgIF9nY3J5X21waV9hbGxvYyggdW5zaWduZWQgbmxpbWJzICk7CisgIGdjcnlfbXBpX3QgIF9nY3J5X21waV9hbGxvY19zZWN1cmUoIHVuc2lnbmVkIG5saW1icyApOworICB2b2lkIF9nY3J5X21waV9mcmVlKCBnY3J5X21waV90IGEgKTsKKyAgdm9pZCBfZ2NyeV9tcGlfcmVzaXplKCBnY3J5X21waV90IGEsIHVuc2lnbmVkIG5saW1icyApOworICBnY3J5X21waV90ICBfZ2NyeV9tcGlfY29weSggZ2NyeV9tcGlfdCBhICk7CisjZW5kaWYKKwordm9pZCBfZ2NyeV9tcGlfaW1tdXRhYmxlX2ZhaWxlZCAodm9pZCk7CisjZGVmaW5lIG1waV9pbW11dGFibGVfZmFpbGVkKCkgX2djcnlfbXBpX2ltbXV0YWJsZV9mYWlsZWQgKCkKKworI2RlZmluZSBtcGlfaXNfY29uc3QoYSkgICAgICAgKChhKSAmJiAoKGEpLT5mbGFncyYzMikpCisjZGVmaW5lIG1waV9pc19pbW11dGFibGUoYSkgICAoKGEpICYmICgoYSktPmZsYWdzJjE2KSkKKyNkZWZpbmUgbXBpX2lzX29wYXF1ZShhKSAgICAgICgoYSkgJiYgKChhKS0+ZmxhZ3MmNCkpCisjZGVmaW5lIG1waV9pc19zZWN1cmUoYSkgICAgICAoKGEpICYmICgoYSktPmZsYWdzJjEpKQorI2RlZmluZSBtcGlfY2xlYXIoYSkgICAgICAgICAgX2djcnlfbXBpX2NsZWFyICgoYSkpCisjZGVmaW5lIG1waV9hbGxvY19saWtlKGEpICAgICBfZ2NyeV9tcGlfYWxsb2NfbGlrZSgoYSkpCisKKyNkZWZpbmUgbXBpX2FsbG9jX3NldF91aShhKSAgIF9nY3J5X21waV9hbGxvY19zZXRfdWkgKChhKSkKKyNkZWZpbmUgbXBpX21fY2hlY2soYSkgICAgICAgIF9nY3J5X21waV9tX2NoZWNrICgoYSkpCisjZGVmaW5lIG1waV9jb25zdChuKSAgICAgICAgICBfZ2NyeV9tcGlfY29uc3QgKChuKSkKKwordm9pZCBfZ2NyeV9tcGlfY2xlYXIoIGdjcnlfbXBpX3QgYSApOworZ2NyeV9tcGlfdCAgX2djcnlfbXBpX2FsbG9jX2xpa2UoIGdjcnlfbXBpX3QgYSApOworZ2NyeV9tcGlfdCAgX2djcnlfbXBpX2FsbG9jX3NldF91aSggdW5zaWduZWQgbG9uZyB1KTsKK3ZvaWQgX2djcnlfbXBpX21fY2hlY2soIGdjcnlfbXBpX3QgYSApOwordm9pZCBfZ2NyeV9tcGlfc3dhcCggZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpOworZ2NyeV9tcGlfdCBfZ2NyeV9tcGlfc25ldyAodW5zaWduZWQgaW50IG5iaXRzKTsKK2djcnlfbXBpX3QgX2djcnlfbXBpX3NldF9vcGFxdWVfY29weSAoZ2NyeV9tcGlfdCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBpbnQgbmJpdHMpOwordm9pZCAqX2djcnlfbXBpX2dldF9vcGFxdWVfY29weSAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgKm5iaXRzKTsKK2ludCBfZ2NyeV9tcGlfaXNfbmVnIChnY3J5X21waV90IGEpOwordm9pZCBfZ2NyeV9tcGlfbmVnIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSk7Cit2b2lkIF9nY3J5X21waV9hYnMgKGdjcnlfbXBpX3Qgdyk7CisKKy8qIENvbnN0YW50cyB1c2VkIHRvIHJldHVybiBjb25zdGFudCBNUElzLiAgU2VlIF9nY3J5X21waV9pbml0IGlmIHlvdQorICAgd2FudCB0byBhZGQgbW9yZSBjb25zdGFudHMuICovCisjZGVmaW5lIE1QSV9OVU1CRVJfT0ZfQ09OU1RBTlRTIDYKK2VudW0gZ2NyeV9tcGlfY29uc3RhbnRzCisgIHsKKyAgICBNUElfQ19aRVJPLAorICAgIE1QSV9DX09ORSwKKyAgICBNUElfQ19UV08sCisgICAgTVBJX0NfVEhSRUUsCisgICAgTVBJX0NfRk9VUiwKKyAgICBNUElfQ19FSUdIVAorICB9OworCisKK2djcnlfbXBpX3QgX2djcnlfbXBpX2NvbnN0IChlbnVtIGdjcnlfbXBpX2NvbnN0YW50cyBubyk7CisKKworLyotLSBtcGljb2Rlci5jIC0tKi8KK3ZvaWQgIF9nY3J5X2xvZ19tcGlkdW1wKCBjb25zdCBjaGFyICp0ZXh0LCBnY3J5X21waV90IGEgKTsKK3UzMiAgIF9nY3J5X21waV9nZXRfa2V5aWQoIGdjcnlfbXBpX3QgYSwgdTMyICprZXlpZCApOworYnl0ZSAqX2djcnlfbXBpX2dldF9idWZmZXIgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IGZpbGxfbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpyX25ieXRlcywgaW50ICpzaWduKTsKK2J5dGUgKl9nY3J5X21waV9nZXRfc2VjdXJlX2J1ZmZlciAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgZmlsbF9sZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnJfbmJ5dGVzLCBpbnQgKnNpZ24pOwordm9pZCAgX2djcnlfbXBpX3NldF9idWZmZXIgKCBnY3J5X21waV90IGEsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgaW50IHNpZ24gKTsKK2dwZ19lcnJfY29kZV90IF9nY3J5X21waV90b19vY3RldF9zdHJpbmcgKHVuc2lnbmVkIGNoYXIgKipyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHZhbHVlLCBzaXplX3QgbmJ5dGVzKTsKKworLyotLSBtcGktZGl2LmMgLS0qLworI2RlZmluZSBtcGlfZmRpdl9yX3VpKGEsYixjKSAgIF9nY3J5X21waV9mZGl2X3JfdWkoKGEpLChiKSwoYykpCisjZGVmaW5lIG1waV9mZGl2X3IoYSxiLGMpICAgICAgX2djcnlfbXBpX2ZkaXZfcigoYSksKGIpLChjKSkKKyNkZWZpbmUgbXBpX2ZkaXZfcShhLGIsYykgICAgICBfZ2NyeV9tcGlfZmRpdl9xKChhKSwoYiksKGMpKQorI2RlZmluZSBtcGlfZmRpdl9xcihhLGIsYyxkKSAgIF9nY3J5X21waV9mZGl2X3FyKChhKSwoYiksKGMpLChkKSkKKyNkZWZpbmUgbXBpX3RkaXZfcihhLGIsYykgICAgICBfZ2NyeV9tcGlfdGRpdl9yKChhKSwoYiksKGMpKQorI2RlZmluZSBtcGlfdGRpdl9xcihhLGIsYyxkKSAgIF9nY3J5X21waV90ZGl2X3FyKChhKSwoYiksKGMpLChkKSkKKyNkZWZpbmUgbXBpX3RkaXZfcV8yZXhwKGEsYixjKSBfZ2NyeV9tcGlfdGRpdl9xXzJleHAoKGEpLChiKSwoYykpCisjZGVmaW5lIG1waV9kaXZpc2libGVfdWkoYSxiKSAgX2djcnlfbXBpX2RpdmlzaWJsZV91aSgoYSksKGIpKQorCit1bG9uZyBfZ2NyeV9tcGlfZmRpdl9yX3VpKCBnY3J5X21waV90IHJlbSwgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgdWxvbmcgZGl2aXNvciApOwordm9pZCAgX2djcnlfbXBpX2ZkaXZfciggZ2NyeV9tcGlfdCByZW0sIGdjcnlfbXBpX3QgZGl2aWRlbmQsIGdjcnlfbXBpX3QgZGl2aXNvciApOwordm9pZCAgX2djcnlfbXBpX2ZkaXZfcSggZ2NyeV9tcGlfdCBxdW90LCBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IgKTsKK3ZvaWQgIF9nY3J5X21waV9mZGl2X3FyKCBnY3J5X21waV90IHF1b3QsIGdjcnlfbXBpX3QgcmVtLCBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IgKTsKK3ZvaWQgIF9nY3J5X21waV90ZGl2X3IoIGdjcnlfbXBpX3QgcmVtLCBnY3J5X21waV90IG51bSwgZ2NyeV9tcGlfdCBkZW4pOwordm9pZCAgX2djcnlfbXBpX3RkaXZfcXIoIGdjcnlfbXBpX3QgcXVvdCwgZ2NyeV9tcGlfdCByZW0sIGdjcnlfbXBpX3QgbnVtLCBnY3J5X21waV90IGRlbik7Cit2b2lkICBfZ2NyeV9tcGlfdGRpdl9xXzJleHAoIGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBjb3VudCApOworaW50ICAgX2djcnlfbXBpX2RpdmlzaWJsZV91aShnY3J5X21waV90IGRpdmlkZW5kLCB1bG9uZyBkaXZpc29yICk7CisKKworLyotLSBtcGktbW9kLmMgLS0qLworI2RlZmluZSBtcGlfYmFycmV0dF9pbml0KG0sZikgICAgIF9nY3J5X21waV9iYXJyZXR0X2luaXQgKChtKSwoZikpCisjZGVmaW5lIG1waV9iYXJyZXR0X2ZyZWUoYykgICAgICAgX2djcnlfbXBpX2JhcnJldHRfZnJlZSAoKGMpKQorI2RlZmluZSBtcGlfbW9kX2JhcnJldHQocixhLGMpICAgIF9nY3J5X21waV9tb2RfYmFycmV0dCAoKHIpLCAoYSksIChjKSkKKyNkZWZpbmUgbXBpX211bF9iYXJyZXR0KHIsdSx2LGMpICBfZ2NyeV9tcGlfbXVsX2JhcnJldHQgKChyKSwgKHUpLCAodiksIChjKSkKKworLyogQ29udGV4dCB1c2VkIHdpdGggQmFycmV0dCByZWR1Y3Rpb24uICAqLworc3RydWN0IGJhcnJldHRfY3R4X3M7Cit0eXBlZGVmIHN0cnVjdCBiYXJyZXR0X2N0eF9zICptcGlfYmFycmV0dF90OworCittcGlfYmFycmV0dF90IF9nY3J5X21waV9iYXJyZXR0X2luaXQgKGdjcnlfbXBpX3QgbSwgaW50IGNvcHkpOwordm9pZCBfZ2NyeV9tcGlfYmFycmV0dF9mcmVlIChtcGlfYmFycmV0dF90IGN0eCk7Cit2b2lkIF9nY3J5X21waV9tb2RfYmFycmV0dCAoZ2NyeV9tcGlfdCByLCBnY3J5X21waV90IHgsIG1waV9iYXJyZXR0X3QgY3R4KTsKK3ZvaWQgX2djcnlfbXBpX211bF9iYXJyZXR0IChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9iYXJyZXR0X3QgY3R4KTsKKworCisvKi0tIG1waS1tcG93LmMgLS0qLworI2RlZmluZSBtcGlfbXVscG93bShhLGIsYyxkKSBfZ2NyeV9tcGlfbXVscG93bSAoKGEpLChiKSwoYyksKGQpKQordm9pZCBfZ2NyeV9tcGlfbXVscG93bSggZ2NyeV9tcGlfdCByZXMsIGdjcnlfbXBpX3QgKmJhc2VhcnJheSwgZ2NyeV9tcGlfdCAqZXhwYXJyYXksIGdjcnlfbXBpX3QgbW9kKTsKKworLyotLSBtcGktc2Nhbi5jIC0tKi8KKyNkZWZpbmUgbXBpX3RyYWlsaW5nX3plcm9zKGEpIF9nY3J5X21waV90cmFpbGluZ196ZXJvcyAoKGEpKQoraW50ICAgICAgX2djcnlfbXBpX2dldGJ5dGUoIGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaWR4ICk7Cit2b2lkICAgICBfZ2NyeV9tcGlfcHV0Ynl0ZSggZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpZHgsIGludCB2YWx1ZSApOwordW5zaWduZWQgX2djcnlfbXBpX3RyYWlsaW5nX3plcm9zKCBnY3J5X21waV90IGEgKTsKKworLyotLSBtcGktYml0LmMgLS0qLworI2RlZmluZSBtcGlfbm9ybWFsaXplKGEpICAgICAgIF9nY3J5X21waV9ub3JtYWxpemUgKChhKSkKKwordm9pZCBfZ2NyeV9tcGlfbm9ybWFsaXplKCBnY3J5X21waV90IGEgKTsKKworLyotLSBlYy5jIC0tKi8KKworLyogT2JqZWN0IHRvIHJlcHJlc2VudCBhIHBvaW50IGluIHByb2plY3RpdmUgY29vcmRpbmF0ZXMuICovCitzdHJ1Y3QgZ2NyeV9tcGlfcG9pbnQKK3sKKyAgZ2NyeV9tcGlfdCB4OworICBnY3J5X21waV90IHk7CisgIGdjcnlfbXBpX3QgejsKK307Cit0eXBlZGVmIHN0cnVjdCBnY3J5X21waV9wb2ludCBtcGlfcG9pbnRfc3RydWN0OwordHlwZWRlZiBzdHJ1Y3QgZ2NyeV9tcGlfcG9pbnQgKm1waV9wb2ludF90OworCit2b2lkIF9nY3J5X21waV9wb2ludF9pbml0IChtcGlfcG9pbnRfdCBwKTsKK3ZvaWQgX2djcnlfbXBpX3BvaW50X2ZyZWVfcGFydHMgKG1waV9wb2ludF90IHApOwordm9pZCBfZ2NyeV9tcGlfZ2V0X3BvaW50IChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfcG9pbnRfdCBwb2ludCk7Cit2b2lkIF9nY3J5X21waV9zbmF0Y2hfcG9pbnQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waV9wb2ludF90IHBvaW50KTsKKworCisvKiBNb2RlbHMgZGVzY3JpYmluZyBhbiBlbGxpcHRpYyBjdXJ2ZS4gICovCitlbnVtIGdjcnlfbXBpX2VjX21vZGVscworICB7CisKKyAgICBNUElfRUNfV0VJRVJTVFJBU1MgPSAwLAorICAgIE1QSV9FQ19NT05UR09NRVJZLAorICAgIE1QSV9FQ19UV0lTVEVERURXQVJEUworICAgIC8qIFRoZSBlcXVhdGlvbiBmb3IgVHdpc3RlZCBFZHdhcmRzIGN1cnZlcyBpcworICAgICAgICAgIGF4XjIgKyB5XjIgPSAxICsgYnheMnleMgorICAgICAgIE5vdGUgdGhhdCB3ZSB1c2UgJ2InIGluc3RlYWQgb2YgdGhlIGNvbW1vbmx5IHVzZWQgJ2QnLiAgKi8KKyAgfTsKKworLyogRGlhbGVjdHMgdXNlZCB3aXRoIGVsbGlwdGljIGN1cnZlcy4gIEl0IGlzIGVhc2llciB0byBrZWVwIHRoZQorICAgZGVmaW5pdGlvbiBoZXJlIHRoYW4gaW4gZWNjLWNvbW1vbi5oLiAqLworZW51bSBlY2NfZGlhbGVjdHMKKyAgeworICAgIEVDQ19ESUFMRUNUX1NUQU5EQVJEID0gMCwKKyAgICBFQ0NfRElBTEVDVF9FRDI1NTE5CisgIH07CisKKwordm9pZCBfZ2NyeV9tcGlfcG9pbnRfbG9nIChjb25zdCBjaGFyICpuYW1lLCBtcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4KTsKKyNkZWZpbmUgbG9nX3ByaW50cG50KGEscCxjKSBfZ2NyeV9tcGlfcG9pbnRfbG9nICgoYSksIChwKSwgKGMpKQorCittcGlfZWNfdCBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKGVudW0gZ2NyeV9tcGlfZWNfbW9kZWxzIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGVjY19kaWFsZWN0cyBkaWFsZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgcCwgZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpOworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbXBpX2VjX3BfbmV3IChnY3J5X2N0eF90ICpyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY3J5X21waV9lY19tb2RlbHMgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZWNjX2RpYWxlY3RzIGRpYWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBwLCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYik7Cit2b2lkIF9nY3J5X21waV9lY19mcmVlIChtcGlfZWNfdCBjdHgpOworCit2b2lkIF9nY3J5X21waV9lY19kdXBfcG9pbnQgKG1waV9wb2ludF90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX3BvaW50X3QgcG9pbnQsIG1waV9lY190IGN0eCk7Cit2b2lkIF9nY3J5X21waV9lY19hZGRfcG9pbnRzIChtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfcG9pbnRfdCBwMSwgbXBpX3BvaW50X3QgcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfZWNfdCBjdHgpOwordm9pZCBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50IChtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3Qgc2NhbGFyLCBtcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpX2VjX3QgY3R4KTsKK2ludCAgX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50IChnY3J5X21waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBjdHgpOworCitnY3J5X21waV90IF9nY3J5X21waV9lY19lYzJvcyAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgZWN0eCk7CisKK2djcnlfbXBpX3QgX2djcnlfbXBpX2VjX2dldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfY3R4X3QgY3R4LCBpbnQgY29weSk7CitnY3J5X21waV9wb2ludF90IF9nY3J5X21waV9lY19nZXRfcG9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4LCBpbnQgY29weSk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tcGlfZWNfc2V0X21waSAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9tcGlfdCBuZXd2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2N0eF90IGN0eCk7CitncGdfZXJyX2NvZGVfdCBfZ2NyeV9tcGlfZWNfc2V0X3BvaW50IChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfcG9pbnRfdCBuZXd2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KTsKKworLyotLSBlY2MtY3VydmVzLmMgLS0qLworZ3BnX2Vycl9jb2RlX3QgX2djcnlfbXBpX2VjX25ldyAoZ2NyeV9jdHhfdCAqcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfdCBrZXlwYXJhbSwgY29uc3QgY2hhciAqY3VydmVuYW1lKTsKKworCisKKyNlbmRpZiAvKkcxMF9NUElfSCovCmRpZmYgLS1naXQgYS9zcmMvbXBpY2FsYy5jIGIvc3JjL21waWNhbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmI0MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21waWNhbGMuYwpAQCAtMCwwICsxLDU4OCBAQAorLyogbXBpY2FsYy5jIC0gU2ltcGxlIFJQTiBjYWxjdWxhdG9yIHVzaW5nIGdjcnlfbXBpIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDA0LCAyMDA2LCAyMDEzICBXZXJuZXIgS29jaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgICBUaGlzIHByb2dyYW0gaXMgYSBzaW1wbGUgUlBOIGNhbGN1bGF0b3Igd2hpY2ggd2FzIG9yaWdpbmFsbHkgdXNlZAorICAgdG8gZGV2ZWxvcCB0aGUgbXBpIGZ1bmN0aW9ucyBvZiBHbnVQRy4gIFZhbHVlcyBtdXN0IGJlIGdpdmVuIGluCisgICBoZXguICBPcGVyYXRpb24gaXMgbGlrZSBkYygxKSBleGNlcHQgdGhhdCB0aGUgaW5wdXQvb3V0cHV0IHJhZGl4IGlzCisgICBhbHdheXMgMTYgYW5kIHlvdSBjYW4gdXNlIGEgJy0nIHRvIHByZWZpeCBhIG5lZ2F0aXZlIG51bWJlci4KKyAgIEFkZGl0aW9uIG9wZXJhdG9yczogKysgYW5kIC0tLiAgQWxsIG9wZXJhdG9ycyBtdXN0IGJlIGRlbGltaXRlZCBieQorICAgYSBibGFuay4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjIHVuZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjIGluY2x1ZGUgImdjcnlwdC5oIgorI2Vsc2UKKyMgaW5jbHVkZSA8Z2NyeXB0Lmg+CisjZW5kaWYKKworCisjZGVmaW5lIE1QSUNBTENfVkVSU0lPTiAiMi4wIgorI2RlZmluZSBORUVEX0xJQkdDUllQVF9WRVJTSU9OICIxLjYuMCIKKworI2RlZmluZSBTVEFDS1NJWkUgIDUwMAorc3RhdGljIGdjcnlfbXBpX3Qgc3RhY2tbU1RBQ0tTSVpFXTsKK3N0YXRpYyBpbnQgc3RhY2tpZHg7CisKKworc3RhdGljIGludAorc2Nhbl9tcGkgKGdjcnlfbXBpX3QgcmV0dmFsLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9tcGlfdCB2YWw7CisKKyAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJnZhbCwgR0NSWU1QSV9GTVRfSEVYLCBzdHJpbmcsIDAsIE5VTEwpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInNjYW5uaW5nIGlucHV0IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBtcGlfc2V0IChyZXR2YWwsIHZhbCk7CisgIG1waV9yZWxlYXNlICh2YWwpOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfbXBpIChnY3J5X21waV90IGEpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgY2hhciAqYnVmOworICB2b2lkICpidWZhZGRyID0gJmJ1ZjsKKworICBlcnIgPSBnY3J5X21waV9hcHJpbnQgKEdDUllNUElfRk1UX0hFWCwgYnVmYWRkciwgTlVMTCwgYSk7CisgIGlmIChlcnIpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiW2Vycm9yIHByaW50aW5nIG51bWJlcjogJXNdXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICBlbHNlCisgICAgeworICAgICAgZnB1dHMgKGJ1Ziwgc3Rkb3V0KTsKKyAgICAgIGdjcnlfZnJlZSAoYnVmKTsKKyAgICB9Cit9CisKKworCitzdGF0aWMgdm9pZAorZG9fYWRkICh2b2lkKQoreworICBpZiAoc3RhY2tpZHggPCAyKQorICAgIHsKKyAgICAgIGZwdXRzICgic3RhY2sgdW5kZXJmbG93XG4iLCBzdGRlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbXBpX2FkZCAoc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIHN0YWNraWR4LS07Cit9CisKK3N0YXRpYyB2b2lkCitkb19zdWIgKHZvaWQpCit7CisgIGlmIChzdGFja2lkeCA8IDIpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfc3ViIChzdGFja1tzdGFja2lkeCAtIDJdLCBzdGFja1tzdGFja2lkeCAtIDJdLCBzdGFja1tzdGFja2lkeCAtIDFdKTsKKyAgc3RhY2tpZHgtLTsKK30KKworc3RhdGljIHZvaWQKK2RvX2luYyAodm9pZCkKK3sKKyAgaWYgKHN0YWNraWR4IDwgMSkKKyAgICB7CisgICAgICBmcHV0cyAoInN0YWNrIHVuZGVyZmxvd1xuIiwgc3RkZXJyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIG1waV9hZGRfdWkgKHN0YWNrW3N0YWNraWR4IC0gMV0sIHN0YWNrW3N0YWNraWR4IC0gMV0sIDEpOworfQorCitzdGF0aWMgdm9pZAorZG9fZGVjICh2b2lkKQoreworICBpZiAoc3RhY2tpZHggPCAxKQorICAgIHsKKyAgICAgIGZwdXRzICgic3RhY2sgdW5kZXJmbG93XG4iLCBzdGRlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogbXBpX3N1Yl91aSggc3RhY2tbc3RhY2tpZHgtMV0sIHN0YWNrW3N0YWNraWR4LTFdLCAxICk7ICovCit9CisKK3N0YXRpYyB2b2lkCitkb19tdWwgKHZvaWQpCit7CisgIGlmIChzdGFja2lkeCA8IDIpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfbXVsIChzdGFja1tzdGFja2lkeCAtIDJdLCBzdGFja1tzdGFja2lkeCAtIDJdLCBzdGFja1tzdGFja2lkeCAtIDFdKTsKKyAgc3RhY2tpZHgtLTsKK30KKworc3RhdGljIHZvaWQKK2RvX211bG0gKHZvaWQpCit7CisgIGlmIChzdGFja2lkeCA8IDMpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfbXVsbSAoc3RhY2tbc3RhY2tpZHggLSAzXSwgc3RhY2tbc3RhY2tpZHggLSAzXSwKKwkgICAgc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIHN0YWNraWR4IC09IDI7Cit9CisKK3N0YXRpYyB2b2lkCitkb19kaXYgKHZvaWQpCit7CisgIGlmIChzdGFja2lkeCA8IDIpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfZmRpdiAoc3RhY2tbc3RhY2tpZHggLSAyXSwgTlVMTCwKKyAgICAgICAgICAgIHN0YWNrW3N0YWNraWR4IC0gMl0sIHN0YWNrW3N0YWNraWR4IC0gMV0pOworICBzdGFja2lkeC0tOworfQorCitzdGF0aWMgdm9pZAorZG9fcmVtICh2b2lkKQoreworICBpZiAoc3RhY2tpZHggPCAyKQorICAgIHsKKyAgICAgIGZwdXRzICgic3RhY2sgdW5kZXJmbG93XG4iLCBzdGRlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbXBpX21vZCAoc3RhY2tbc3RhY2tpZHggLSAyXSwKKyAgICAgICAgICAgc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIHN0YWNraWR4LS07Cit9CisKK3N0YXRpYyB2b2lkCitkb19wb3dtICh2b2lkKQoreworICBnY3J5X21waV90IGE7CisgIGlmIChzdGFja2lkeCA8IDMpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBhID0gbXBpX25ldyAoMCk7CisgIG1waV9wb3dtIChhLCBzdGFja1tzdGFja2lkeCAtIDNdLCBzdGFja1tzdGFja2lkeCAtIDJdLCBzdGFja1tzdGFja2lkeCAtIDFdKTsKKyAgbXBpX3JlbGVhc2UgKHN0YWNrW3N0YWNraWR4IC0gM10pOworICBzdGFja1tzdGFja2lkeCAtIDNdID0gYTsKKyAgc3RhY2tpZHggLT0gMjsKK30KKworc3RhdGljIHZvaWQKK2RvX2ludiAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfdCBhID0gbXBpX25ldyAoMCk7CisgIGlmIChzdGFja2lkeCA8IDIpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfaW52bSAoYSwgc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIG1waV9zZXQgKHN0YWNrW3N0YWNraWR4IC0gMl0sIGEpOworICBtcGlfcmVsZWFzZSAoYSk7CisgIHN0YWNraWR4LS07Cit9CisKK3N0YXRpYyB2b2lkCitkb19nY2QgKHZvaWQpCit7CisgIGdjcnlfbXBpX3QgYSA9IG1waV9uZXcgKDApOworICBpZiAoc3RhY2tpZHggPCAyKQorICAgIHsKKyAgICAgIGZwdXRzICgic3RhY2sgdW5kZXJmbG93XG4iLCBzdGRlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbXBpX2djZCAoYSwgc3RhY2tbc3RhY2tpZHggLSAyXSwgc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIG1waV9zZXQgKHN0YWNrW3N0YWNraWR4IC0gMl0sIGEpOworICBtcGlfcmVsZWFzZSAoYSk7CisgIHN0YWNraWR4LS07Cit9CisKK3N0YXRpYyB2b2lkCitkb19yc2hpZnQgKHZvaWQpCit7CisgIGlmIChzdGFja2lkeCA8IDEpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBtcGlfcnNoaWZ0IChzdGFja1tzdGFja2lkeCAtIDFdLCBzdGFja1tzdGFja2lkeCAtIDFdLCAxKTsKK30KKworCitzdGF0aWMgdm9pZAorZG9fbmJpdHMgKHZvaWQpCit7CisgIHVuc2lnbmVkIGludCBuOworCisgIGlmIChzdGFja2lkeCA8IDEpCisgICAgeworICAgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICBuID0gbXBpX2dldF9uYml0cyAoc3RhY2tbc3RhY2tpZHggLSAxXSk7CisgIG1waV9zZXRfdWkgKHN0YWNrW3N0YWNraWR4IC0gMV0sIG4pOworfQorCisKK3N0YXRpYyBpbnQKK215X2dldGMgKHZvaWQpCit7CisgIHN0YXRpYyBpbnQgc2hvd247CisgIGludCBjOworCisgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKChjID0gZ2V0YyAoc3RkaW4pKSA9PSBFT0YpCisgICAgICAgIHJldHVybiBFT0Y7CisgICAgICBpZiAoIShjICYgMHg4MCkpCisgICAgICAgIHJldHVybiBjOworCisgICAgICBpZiAoIXNob3duKQorICAgICAgICB7CisgICAgICAgICAgc2hvd24gPSAxOworICAgICAgICAgIGZwdXRzICgibm90ZTogTm9uIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWRcbiIsIHN0ZGVycik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK3ByaW50X2hlbHAgKHZvaWQpCit7CisgIGZwdXRzICgiKyAgIGFkZCAgICAgICAgICAgWzBdIDo9IFsxXSArIFswXSAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiLSAgIHN1YnRyYWN0ICAgICAgWzBdIDo9IFsxXSAtIFswXSAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiKiAgIG11bHRpcGx5ICAgICAgWzBdIDo9IFsxXSAqIFswXSAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiLyAgIGRpdmlkZSAgICAgICAgWzBdIDo9IFsxXSAtIFswXSAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiJSAgIG1vZHVsbyAgICAgICAgWzBdIDo9IFsxXSAlIFswXSAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiPiAgIHJpZ2h0IHNoaWZ0ICAgWzBdIDo9IFswXSA+PiAxICAgICAgICAgICB7MH1cbiIKKyAgICAgICAgICIrKyAgaW5jcmVtZW50ICAgICBbMF0gOj0gWzBdKysgICAgICAgICAgICAgIHswfVxuIgorICAgICAgICAgIi0tICBkZWNyZW1lbnQgICAgIFswXSA6PSBbMF0tLSAgICAgICAgICAgICAgezB9XG4iCisgICAgICAgICAibSAgIG11bHRpcGx5IG1vZCAgWzBdIDo9IFsyXSAqIFsxXSBtb2QgWzBdICB7LTJ9XG4iCisgICAgICAgICAiXiAgIHBvd2VyIG1vZCAgICAgWzBdIDo9IFsyXSBeIFsxXSBtb2QgWzBdICB7LTJ9XG4iCisgICAgICAgICAiSSAgIGludmVyc2UgbW9kICAgWzBdIDo9IFsxXV4tMSBtb2QgWzBdICAgICB7LTF9XG4iCisgICAgICAgICAiRyAgIGdjZCAgICAgICAgICAgWzBdIDo9IGdjZChbMV0sWzBdKSAgICAgICB7LTF9XG4iCisgICAgICAgICAiaSAgIHJlbW92ZSBpdGVtICAgWzBdIDo9IFsxXSAgICAgICAgICAgICAgICB7LTF9XG4iCisgICAgICAgICAiZCAgIGR1cCBpdGVtICAgICAgWy0xXSA6PSBbMF0gICAgICAgICAgICAgICB7KzF9XG4iCisgICAgICAgICAiciAgIHJldmVyc2UgICAgICAgWzBdIDo9IFsxXSwgWzFdIDo9IFswXSAgICB7MH1cbiIKKyAgICAgICAgICJiICAgIyBvZiBiaXRzICAgICBbMF0gOj0gbmJpdHMoWzBdKSAgICAgICAgIHswfVxuIgorICAgICAgICAgImMgICBjbGVhciBzdGFja1xuIgorICAgICAgICAgInAgICBwcmludCB0b3AgaXRlbVxuIgorICAgICAgICAgImYgICBwcmludCB0aGUgc3RhY2tcbiIKKyAgICAgICAgICIjICAgaWdub3JlIHVudGlsIGVuZCBvZiBsaW5lXG4iCisgICAgICAgICAiPyAgIHByaW50IHRoaXMgaGVscFxuIgorICAgICAgICAgLCBzdGRvdXQpOworfQorCisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGNvbnN0IGNoYXIgKnBnbTsKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworICBpbnQgcHJpbnRfY29uZmlnID0gMDsKKyAgaW50IGksIGM7CisgIGludCBzdGF0ZSA9IDA7CisgIGNoYXIgc3RyYnVmWzEwMDBdOworICBpbnQgc3RyaWR4ID0gMDsKKworICBpZiAoYXJnYykKKyAgICB7CisgICAgICBwZ20gPSBzdHJyY2hyICgqYXJndiwgJy8nKTsKKyAgICAgIGlmIChwZ20pCisgICAgICAgIHBnbSsrOworICAgICAgZWxzZQorICAgICAgICBwZ20gPSAqYXJndjsKKyAgICAgIGFyZ2MtLTsgYXJndisrOworICAgIH0KKyAgZWxzZQorICAgIHBnbSA9ICI/IjsKKworICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcnNpb24iKQorICAgICAgICAgICAgICAgfHwgIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50ZiAoIiVzICIgTVBJQ0FMQ19WRVJTSU9OICJcbiIKKyAgICAgICAgICAgICAgICAgICJsaWJnY3J5cHQgJXNcbiIKKyAgICAgICAgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMTMgIFdlcm5lciBLb2NoXG4iCisgICAgICAgICAgICAgICAgICAiTGljZW5zZSBMR1BMdjIuMSs6IEdOVSBMR1BMIHZlcnNpb24gMi4xIG9yIGxhdGVyICIKKyAgICAgICAgICAgICAgICAgICI8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWw+XG4iCisgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCAiCisgICAgICAgICAgICAgICAgICAicmVkaXN0cmlidXRlIGl0LlxuIgorICAgICAgICAgICAgICAgICAgIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiU3ludGF4OiBtcGljYWxjIFtvcHRpb25zXVxuIgorICAgICAgICAgICAgICAgICAgIlNpbXBsZSBpbnRlcmFjdGl2ZSBiaWcgaW50ZWdlciBSUE4gY2FsY3VsYXRvclxuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAgICAgICAiICAtLXZlcnNpb24gICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiIKKyAgICAgICAgICAgICAgICAgICIgIC0tcHJpbnQtY29uZmlnICAgICAgcHJpbnQgdGhlIExpYmdjcnlwdCBjb25maWdcbiIKKyAgICAgICAgICAgICAgICAgICIgIC0tZGlzYWJsZS1od2YgTkFNRSAgZGlzYWJsZSBmZWF0dXJlIE5BTUVcbiIsCisgICAgICAgICAgICAgICAgICBwZ20sIGdjcnlfY2hlY2tfdmVyc2lvbiAoTlVMTCkpOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tcHJpbnQtY29uZmlnIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBwcmludF9jb25maWcgPSAxOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGlzYWJsZS1od2YiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmIChhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfSFdGLCAqYXJndiwgTlVMTCkpCisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IHVua25vd24gaGFyZHdhcmUgZmVhdHVyZSBgJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgLSBvcHRpb24gaWdub3JlZFxuIiwgcGdtLCAqYXJndik7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIGlmIChhcmdjKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbb3B0aW9uc10gICgtLWhlbHAgZm9yIGhlbHApXG4iLCBwZ20pOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChORUVEX0xJQkdDUllQVF9WRVJTSU9OKSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogTGliZ2NyeXB0IGlzIHRvbyBvbGQgKG5lZWQgJXMsIGhhdmUgJXMpXG4iLAorICAgICAgICAgICAgICAgcGdtLCBORUVEX0xJQkdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpICk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChwcmludF9jb25maWcpCisgICAgeworICAgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1BSSU5UX0NPTkZJRywgc3Rkb3V0KTsKKyAgICAgIGV4aXQgKDApOworICAgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgU1RBQ0tTSVpFOyBpKyspCisgICAgc3RhY2tbaV0gPSBOVUxMOworICBzdGFja2lkeCA9IDA7CisKKyAgd2hpbGUgKChjID0gbXlfZ2V0YyAoKSkgIT0gRU9GKQorICAgIHsKKyAgICAgIGlmICghc3RhdGUpIC8qIHdhaXRpbmcgKi8KKwl7CisJICBpZiAoaXNkaWdpdCAoYykpCisJICAgIHsKKwkgICAgICBzdGF0ZSA9IDE7CisJICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisJICAgICAgc3RyYnVmWzBdID0gJzAnOworCSAgICAgIHN0cmJ1ZlsxXSA9ICd4JzsKKwkgICAgICBzdHJpZHggPSAyOworCSAgICB9CisJICBlbHNlIGlmIChpc3NwYWNlIChjKSkKKwkgICAgOworCSAgZWxzZQorCSAgICB7CisJICAgICAgc3dpdGNoIChjKQorCQl7CisgICAgICAgICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAnKyc6CisJCSAgaWYgKChjID0gbXlfZ2V0YyAoKSkgPT0gJysnKQorCQkgICAgZG9faW5jICgpOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisJCSAgICAgIGRvX2FkZCAoKTsKKwkJICAgIH0KKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICctJzoKKwkJICBpZiAoKGMgPSBteV9nZXRjICgpKSA9PSAnLScpCisJCSAgICBkb19kZWMgKCk7CisJCSAgZWxzZSBpZiAoaXNkaWdpdCAoYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChjID49ICdBJyAmJiBjIDw9ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChjID49ICdhJyAmJiBjIDw9ICdmJykpCisJCSAgICB7CisJCSAgICAgIHN0YXRlID0gMTsKKwkJICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisJCSAgICAgIHN0cmJ1ZlswXSA9ICctJzsKKwkJICAgICAgc3RyYnVmWzFdID0gJzAnOworCQkgICAgICBzdHJidWZbMl0gPSAneCc7CisJCSAgICAgIHN0cmlkeCA9IDM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICB1bmdldGMgKGMsIHN0ZGluKTsKKwkJICAgICAgZG9fc3ViICgpOworCQkgICAgfQorCQkgIGJyZWFrOworCQljYXNlICcqJzoKKwkJICBkb19tdWwgKCk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ20nOgorCQkgIGRvX211bG0gKCk7CisJCSAgYnJlYWs7CisJCWNhc2UgJy8nOgorCQkgIGRvX2RpdiAoKTsKKwkJICBicmVhazsKKwkJY2FzZSAnJSc6CisJCSAgZG9fcmVtICgpOworCQkgIGJyZWFrOworCQljYXNlICdeJzoKKwkJICBkb19wb3dtICgpOworCQkgIGJyZWFrOworCQljYXNlICc+JzoKKwkJICBkb19yc2hpZnQgKCk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0knOgorCQkgIGRvX2ludiAoKTsKKwkJICBicmVhazsKKwkJY2FzZSAnRyc6CisJCSAgZG9fZ2NkICgpOworCQkgIGJyZWFrOworCQljYXNlICdpJzoJLyogZHVtbXkgKi8KKwkJICBpZiAoIXN0YWNraWR4KQorCQkgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBtcGlfcmVsZWFzZSAoc3RhY2tbc3RhY2tpZHggLSAxXSk7CisJCSAgICAgIHN0YWNraWR4LS07CisJCSAgICB9CisJCSAgYnJlYWs7CisJCWNhc2UgJ2QnOgkvKiBkdXBsaWNhdGUgdGhlIHRvcyAqLworCQkgIGlmICghc3RhY2tpZHgpCisJCSAgICBmcHV0cyAoInN0YWNrIHVuZGVyZmxvd1xuIiwgc3RkZXJyKTsKKwkJICBlbHNlIGlmIChzdGFja2lkeCA8IFNUQUNLU0laRSkKKwkJICAgIHsKKwkJICAgICAgbXBpX3JlbGVhc2UgKHN0YWNrW3N0YWNraWR4XSk7CisJCSAgICAgIHN0YWNrW3N0YWNraWR4XSA9IG1waV9jb3B5IChzdGFja1tzdGFja2lkeCAtIDFdKTsKKwkJICAgICAgc3RhY2tpZHgrKzsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBmcHV0cyAoInN0YWNrIG92ZXJmbG93XG4iLCBzdGRlcnIpOworCQkgIGJyZWFrOworCQljYXNlICdyJzoJLyogc3dhcCB0b3AgZWxlbWVudHMgKi8KKwkJICBpZiAoc3RhY2tpZHggPCAyKQorCQkgICAgZnB1dHMgKCJzdGFjayB1bmRlcmZsb3dcbiIsIHN0ZGVycik7CisJCSAgZWxzZSBpZiAoc3RhY2tpZHggPCBTVEFDS1NJWkUpCisJCSAgICB7CisJCSAgICAgIGdjcnlfbXBpX3QgdG1wID0gc3RhY2tbc3RhY2tpZHgtMV07CisgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tpZHgtMV0gPSBzdGFja1tzdGFja2lkeCAtIDJdOworICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNraWR4LTJdID0gdG1wOworCQkgICAgfQorCQkgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgZG9fbmJpdHMgKCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAnYyc6CisJCSAgZm9yIChpID0gMDsgaSA8IHN0YWNraWR4OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBtcGlfcmVsZWFzZSAoc3RhY2tbaV0pOyBzdGFja1tpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJICBzdGFja2lkeCA9IDA7CisJCSAgYnJlYWs7CisJCWNhc2UgJ3AnOgkvKiBwcmludCB0aGUgdG9zICovCisJCSAgaWYgKCFzdGFja2lkeCkKKwkJICAgIHB1dHMgKCJzdGFjayBpcyBlbXB0eSIpOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgcHJpbnRfbXBpIChzdGFja1tzdGFja2lkeCAtIDFdKTsKKwkJICAgICAgcHV0Y2hhciAoJ1xuJyk7CisJCSAgICB9CisJCSAgYnJlYWs7CisJCWNhc2UgJ2YnOgkvKiBwcmludCB0aGUgc3RhY2sgKi8KKwkJICBmb3IgKGkgPSBzdGFja2lkeCAtIDE7IGkgPj0gMDsgaS0tKQorCQkgICAgeworCQkgICAgICBwcmludGYgKCJbJTJkXTogIiwgaSk7CisJCSAgICAgIHByaW50X21waSAoc3RhY2tbaV0pOworCQkgICAgICBwdXRjaGFyICgnXG4nKTsKKwkJICAgIH0KKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICAgIHByaW50X2hlbHAgKCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICBmcHV0cyAoImludmFsaWQgb3BlcmF0b3JcbiIsIHN0ZGVycik7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHN0YXRlID09IDEpIC8qIEluIGEgbnVtYmVyLiAqLworCXsKKwkgIGlmICghaXN4ZGlnaXQgKGMpKQorCSAgICB7CisgICAgICAgICAgICAgIC8qIFN0b3JlIHRoZSBudW1iZXIgKi8KKwkgICAgICBzdGF0ZSA9IDA7CisJICAgICAgdW5nZXRjIChjLCBzdGRpbik7CisJICAgICAgaWYgKHN0cmlkeCA8IHNpemVvZiBzdHJidWYpCisJCXN0cmJ1ZltzdHJpZHhdID0gMDsKKworCSAgICAgIGlmIChzdGFja2lkeCA8IFNUQUNLU0laRSkKKwkJeworCQkgIGlmICghc3RhY2tbc3RhY2tpZHhdKQorCQkgICAgc3RhY2tbc3RhY2tpZHhdID0gbXBpX25ldyAoMCk7CisJCSAgaWYgKHNjYW5fbXBpIChzdGFja1tzdGFja2lkeF0sIHN0cmJ1ZikpCisJCSAgICBmcHV0cyAoImludmFsaWQgbnVtYmVyXG4iLCBzdGRlcnIpOworCQkgIGVsc2UKKwkJICAgIHN0YWNraWR4Kys7CisJCX0KKwkgICAgICBlbHNlCisJCWZwdXRzICgic3RhY2sgb3ZlcmZsb3dcbiIsIHN0ZGVycik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeyAvKiBTdG9yZSBhIGRpZ2l0LiAgKi8KKwkgICAgICBpZiAoc3RyaWR4IDwgc2l6ZW9mIHN0cmJ1ZiAtIDEpCisJCXN0cmJ1ZltzdHJpZHgrK10gPSBjOworCSAgICAgIGVsc2UgaWYgKHN0cmlkeCA9PSBzaXplb2Ygc3RyYnVmIC0gMSkKKwkJeworCQkgIHN0cmJ1ZltzdHJpZHhdID0gMDsKKwkJICBmcHV0cyAoImlucHV0IHRvbyBsYXJnZSAtIHRydW5jYXRlZFxuIiwgc3RkZXJyKTsKKwkJICBzdHJpZHgrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gMikgLyogSW4gYSBjb21tZW50LiAqLworICAgICAgICB7CisgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKKyAgICAgICAgICAgIHN0YXRlID0gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBzdGFja2lkeDsgaSsrKQorICAgIG1waV9yZWxlYXNlIChzdGFja1tpXSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3NlY21lbS5jIGIvc3JjL3NlY21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjdkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2VjbWVtLmMKQEAgLTAsMCArMSw3MzYgQEAKKy8qIHNlY21lbS5jICAtCW1lbW9yeSBhbGxvY2F0aW9uIGZyb20gYSBzZWN1cmUgaGVhcAorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorICogICAgICAgICAgICAgICAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQoSEFWRV9NTE9DSykgfHwgZGVmaW5lZChIQVZFX01NQVApCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIFVTRV9DQVBBQklMSVRJRVMKKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImF0aC5oIgorI2luY2x1ZGUgImcxMGxpYi5oIgorI2luY2x1ZGUgInNlY21lbS5oIgorCisjaWYgZGVmaW5lZCAoTUFQX0FOT04pICYmICEgZGVmaW5lZCAoTUFQX0FOT05ZTU9VUykKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgorI2VuZGlmCisKKyNkZWZpbmUgTUlOSU1VTV9QT09MX1NJWkUgMTYzODQKKyNkZWZpbmUgU1RBTkRBUkRfUE9PTF9TSVpFIDMyNzY4CisjZGVmaW5lIERFRkFVTFRfUEFHRV9TSVpFIDQwOTYKKwordHlwZWRlZiBzdHJ1Y3QgbWVtYmxvY2sKK3sKKyAgdW5zaWduZWQgc2l6ZTsJCS8qIFNpemUgb2YgdGhlIG1lbW9yeSBhdmFpbGFibGUgdG8gdGhlCisJCQkJICAgdXNlci4gICovCisgIGludCBmbGFnczsJCQkvKiBTZWUgYmVsb3cuICAqLworICBQUk9QRVJMWV9BTElHTkVEX1RZUEUgYWxpZ25lZDsKK30gbWVtYmxvY2tfdDsKKworLyogVGhpcyBmbGFnIHNwZWNpZmllcyB0aGF0IHRoZSBtZW1vcnkgYmxvY2sgaXMgaW4gdXNlLiAgKi8KKyNkZWZpbmUgTUJfRkxBR19BQ1RJVkUgKDEgPDwgMCkKKworLyogVGhlIHBvb2wgb2Ygc2VjdXJlIG1lbW9yeS4gICovCitzdGF0aWMgdm9pZCAqcG9vbDsKKworLyogU2l6ZSBvZiBQT09MIGluIGJ5dGVzLiAgKi8KK3N0YXRpYyBzaXplX3QgcG9vbF9zaXplOworCisvKiBUcnVlLCBpZiB0aGUgbWVtb3J5IHBvb2wgaXMgcmVhZHkgZm9yIHVzZS4gIE1heSBiZSBjaGVja2VkIGluIGFuCisgICBhdGV4aXQgZnVuY3Rpb24uICAqLworc3RhdGljIHZvbGF0aWxlIGludCBwb29sX29rYXk7CisKKy8qIFRydWUsIGlmIHRoZSBtZW1vcnkgcG9vbCBpcyBtbWFwcGVkLiAgKi8KK3N0YXRpYyB2b2xhdGlsZSBpbnQgcG9vbF9pc19tbWFwcGVkOworCisvKiBGSVhNRT8gICovCitzdGF0aWMgaW50IGRpc2FibGVfc2VjbWVtOworc3RhdGljIGludCBzaG93X3dhcm5pbmc7CitzdGF0aWMgaW50IG5vdF9sb2NrZWQ7CitzdGF0aWMgaW50IG5vX3dhcm5pbmc7CitzdGF0aWMgaW50IHN1c3BlbmRfd2FybmluZzsKK3N0YXRpYyBpbnQgbm9fbWxvY2s7CitzdGF0aWMgaW50IG5vX3ByaXZfZHJvcDsKKworLyogU3RhdHMuICAqLworc3RhdGljIHVuc2lnbmVkIGludCBjdXJfYWxsb2NlZCwgY3VyX2Jsb2NrczsKKworLyogTG9jayBwcm90ZWN0aW5nIGFjY2Vzc2VzIHRvIHRoZSBtZW1vcnkgcG9vbC4gICovCitzdGF0aWMgYXRoX211dGV4X3Qgc2VjbWVtX2xvY2s7CisKKy8qIENvbnZlbmllbnQgbWFjcm9zLiAgKi8KKyNkZWZpbmUgU0VDTUVNX0xPQ0sgICBhdGhfbXV0ZXhfbG9jayAgICgmc2VjbWVtX2xvY2spCisjZGVmaW5lIFNFQ01FTV9VTkxPQ0sgYXRoX211dGV4X3VubG9jayAoJnNlY21lbV9sb2NrKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWVtYmxvY2sgc3RydWN0dXJlOyB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlCisgICBtZW1vcnkgdGhhdCBpcyBhdmFpbGFibGUgdG8gdGhlIHVzZXIuICAqLworI2RlZmluZSBCTE9DS19IRUFEX1NJWkUgXAorICBvZmZzZXRvZiAobWVtYmxvY2tfdCwgYWxpZ25lZCkKKworLyogQ29udmVydCBhbiBhZGRyZXNzIGludG8gdGhlIGFjY29yZGluZyBtZW1vcnkgYmxvY2sgc3RydWN0dXJlLiAgKi8KKyNkZWZpbmUgQUREUl9UT19CTE9DSyhhZGRyKSBcCisgIChtZW1ibG9ja190ICopICgoY2hhciAqKSBhZGRyIC0gQkxPQ0tfSEVBRF9TSVpFKQorCisvKiBDaGVjayB3aGV0aGVyIFAgcG9pbnRzIGludG8gdGhlIHBvb2wuICAqLworc3RhdGljIGludAorcHRyX2ludG9fcG9vbF9wIChjb25zdCB2b2lkICpwKQoreworICAvKiBXZSBuZWVkIHRvIGNvbnZlcnQgcG9pbnRlcnMgdG8gYWRkcmVzc2VzLiAgVGhpcyBpcyByZXF1aXJlZCBieQorICAgICBDLTk5IDYuNS44IHRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvdXIuICBVc2luZyBzaXplX3QgaXMgYXQKKyAgICAgbGVhc3Qgb25seSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgU2VlIGFsc28KKyAgICAgaHR0cDovL2xpc3RzLmdudXBnLm9yZy9waXBlcm1haWwvZ2NyeXB0LWRldmVsLzIwMDctRmVicnVhcnkvMDAxMTAyLmh0bWwKKyAgKi8KKyAgc2l6ZV90IHBfYWRkciA9IChzaXplX3QpcDsKKyAgc2l6ZV90IHBvb2xfYWRkciA9IChzaXplX3QpcG9vbDsKKworICByZXR1cm4gcF9hZGRyID49IHBvb2xfYWRkciAmJiBwX2FkZHIgPCAgcG9vbF9hZGRyK3Bvb2xfc2l6ZTsKK30KKworLyogVXBkYXRlIHRoZSBzdGF0cy4gICovCitzdGF0aWMgdm9pZAorc3RhdHNfdXBkYXRlIChzaXplX3QgYWRkLCBzaXplX3Qgc3ViKQoreworICBpZiAoYWRkKQorICAgIHsKKyAgICAgIGN1cl9hbGxvY2VkICs9IGFkZDsKKyAgICAgIGN1cl9ibG9ja3MrKzsKKyAgICB9CisgIGlmIChzdWIpCisgICAgeworICAgICAgY3VyX2FsbG9jZWQgLT0gc3ViOworICAgICAgY3VyX2Jsb2Nrcy0tOworICAgIH0KK30KKworLyogUmV0dXJuIHRoZSBibG9jayBmb2xsb3dpbmcgTUIgb3IgTlVMTCwgaWYgTUIgaXMgdGhlIGxhc3QgYmxvY2suICAqLworc3RhdGljIG1lbWJsb2NrX3QgKgorbWJfZ2V0X25leHQgKG1lbWJsb2NrX3QgKm1iKQoreworICBtZW1ibG9ja190ICptYl9uZXh0OworCisgIG1iX25leHQgPSAobWVtYmxvY2tfdCAqKSAoKGNoYXIgKikgbWIgKyBCTE9DS19IRUFEX1NJWkUgKyBtYi0+c2l6ZSk7CisKKyAgaWYgKCEgcHRyX2ludG9fcG9vbF9wIChtYl9uZXh0KSkKKyAgICBtYl9uZXh0ID0gTlVMTDsKKworICByZXR1cm4gbWJfbmV4dDsKK30KKworLyogUmV0dXJuIHRoZSBibG9jayBwcmVjZWRpbmcgTUIgb3IgTlVMTCwgaWYgTUIgaXMgdGhlIGZpcnN0CisgICBibG9jay4gICovCitzdGF0aWMgbWVtYmxvY2tfdCAqCittYl9nZXRfcHJldiAobWVtYmxvY2tfdCAqbWIpCit7CisgIG1lbWJsb2NrX3QgKm1iX3ByZXYsICptYl9uZXh0OworCisgIGlmIChtYiA9PSBwb29sKQorICAgIG1iX3ByZXYgPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgbWJfcHJldiA9IChtZW1ibG9ja190ICopIHBvb2w7CisgICAgICB3aGlsZSAoMSkKKwl7CisJICBtYl9uZXh0ID0gbWJfZ2V0X25leHQgKG1iX3ByZXYpOworCSAgaWYgKG1iX25leHQgPT0gbWIpCisJICAgIGJyZWFrOworCSAgZWxzZQorCSAgICBtYl9wcmV2ID0gbWJfbmV4dDsKKwl9CisgICAgfQorCisgIHJldHVybiBtYl9wcmV2OworfQorCisvKiBJZiB0aGUgcHJlY2VkaW5nIGJsb2NrIG9mIE1CIGFuZC9vciB0aGUgZm9sbG93aW5nIGJsb2NrIG9mIE1CCisgICBleGlzdCBhbmQgYXJlIG5vdCBhY3RpdmUsIG1lcmdlIHRoZW0gdG8gZm9ybSBhIGJpZ2dlciBibG9jay4gICovCitzdGF0aWMgdm9pZAorbWJfbWVyZ2UgKG1lbWJsb2NrX3QgKm1iKQoreworICBtZW1ibG9ja190ICptYl9wcmV2LCAqbWJfbmV4dDsKKworICBtYl9wcmV2ID0gbWJfZ2V0X3ByZXYgKG1iKTsKKyAgbWJfbmV4dCA9IG1iX2dldF9uZXh0IChtYik7CisKKyAgaWYgKG1iX3ByZXYgJiYgKCEgKG1iX3ByZXYtPmZsYWdzICYgTUJfRkxBR19BQ1RJVkUpKSkKKyAgICB7CisgICAgICBtYl9wcmV2LT5zaXplICs9IEJMT0NLX0hFQURfU0laRSArIG1iLT5zaXplOworICAgICAgbWIgPSBtYl9wcmV2OworICAgIH0KKyAgaWYgKG1iX25leHQgJiYgKCEgKG1iX25leHQtPmZsYWdzICYgTUJfRkxBR19BQ1RJVkUpKSkKKyAgICBtYi0+c2l6ZSArPSBCTE9DS19IRUFEX1NJWkUgKyBtYl9uZXh0LT5zaXplOworfQorCisvKiBSZXR1cm4gYSBuZXcgYmxvY2ssIHdoaWNoIGNhbiBob2xkIFNJWkUgYnl0ZXMuICAqLworc3RhdGljIG1lbWJsb2NrX3QgKgorbWJfZ2V0X25ldyAobWVtYmxvY2tfdCAqYmxvY2ssIHNpemVfdCBzaXplKQoreworICBtZW1ibG9ja190ICptYiwgKm1iX3NwbGl0OworCisgIGZvciAobWIgPSBibG9jazsgcHRyX2ludG9fcG9vbF9wIChtYik7IG1iID0gbWJfZ2V0X25leHQgKG1iKSkKKyAgICBpZiAoISAobWItPmZsYWdzICYgTUJfRkxBR19BQ1RJVkUpICYmIG1iLT5zaXplID49IHNpemUpCisgICAgICB7CisJLyogRm91bmQgYSBmcmVlIGJsb2NrLiAgKi8KKwltYi0+ZmxhZ3MgfD0gTUJfRkxBR19BQ1RJVkU7CisKKwlpZiAobWItPnNpemUgLSBzaXplID4gQkxPQ0tfSEVBRF9TSVpFKQorCSAgeworCSAgICAvKiBTcGxpdCBibG9jay4gICovCisKKwkgICAgbWJfc3BsaXQgPSAobWVtYmxvY2tfdCAqKSAoKChjaGFyICopIG1iKSArIEJMT0NLX0hFQURfU0laRSArIHNpemUpOworCSAgICBtYl9zcGxpdC0+c2l6ZSA9IG1iLT5zaXplIC0gc2l6ZSAtIEJMT0NLX0hFQURfU0laRTsKKwkgICAgbWJfc3BsaXQtPmZsYWdzID0gMDsKKworCSAgICBtYi0+c2l6ZSA9IHNpemU7CisKKwkgICAgbWJfbWVyZ2UgKG1iX3NwbGl0KTsKKworCSAgfQorCisJYnJlYWs7CisgICAgICB9CisKKyAgaWYgKCEgcHRyX2ludG9fcG9vbF9wIChtYikpCisgICAgeworICAgICAgZ3BnX2Vycl9zZXRfZXJybm8gKEVOT01FTSk7CisgICAgICBtYiA9IE5VTEw7CisgICAgfQorCisgIHJldHVybiBtYjsKK30KKworLyogUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3dhcm4gKHZvaWQpCit7CisgIGlmICghbm9fd2FybmluZykKKyAgICBsb2dfaW5mbyAoXygiV2FybmluZzogdXNpbmcgaW5zZWN1cmUgbWVtb3J5IVxuIikpOworfQorCisvKiBMb2NrIHRoZSBtZW1vcnkgcGFnZXMgaW50byBjb3JlIGFuZCBkcm9wIHByaXZpbGVnZXMuICAqLworc3RhdGljIHZvaWQKK2xvY2tfcG9vbCAodm9pZCAqcCwgc2l6ZV90IG4pCit7CisjaWYgZGVmaW5lZChVU0VfQ0FQQUJJTElUSUVTKSAmJiBkZWZpbmVkKEhBVkVfTUxPQ0spCisgIGludCBlcnI7CisKKyAgeworICAgIGNhcF90IGNhcDsKKworICAgIGNhcCA9IGNhcF9mcm9tX3RleHQgKCJjYXBfaXBjX2xvY2srZXAiKTsKKyAgICBjYXBfc2V0X3Byb2MgKGNhcCk7CisgICAgY2FwX2ZyZWUgKGNhcCk7CisgICAgZXJyID0gbm9fbWxvY2s/IDAgOiBtbG9jayAocCwgbik7CisgICAgaWYgKGVyciAmJiBlcnJubykKKyAgICAgIGVyciA9IGVycm5vOworICAgIGNhcCA9IGNhcF9mcm9tX3RleHQgKCJjYXBfaXBjX2xvY2srcCIpOworICAgIGNhcF9zZXRfcHJvYyAoY2FwKTsKKyAgICBjYXBfZnJlZShjYXApOworICB9CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBpZiAoZXJybm8gIT0gRVBFUk0KKyNpZmRlZiBFQUdBSU4JLyogT3BlbkJTRCByZXR1cm5zIHRoaXMgKi8KKwkgICYmIGVycm5vICE9IEVBR0FJTgorI2VuZGlmCisjaWZkZWYgRU5PU1lTCS8qIFNvbWUgU0NPcyByZXR1cm4gdGhpcyAoZnVuY3Rpb24gbm90IGltcGxlbWVudGVkKSAqLworCSAgJiYgZXJybm8gIT0gRU5PU1lTCisjZW5kaWYKKyNpZmRlZiBFTk9NRU0gIC8qIExpbnV4IG1pZ2h0IHJldHVybiB0aGlzLiAqLworICAgICAgICAgICAgJiYgZXJybm8gIT0gRU5PTUVNCisjZW5kaWYKKwkgICkKKwlsb2dfZXJyb3IgKCJjYW4ndCBsb2NrIG1lbW9yeTogJXNcbiIsIHN0cmVycm9yIChlcnIpKTsKKyAgICAgIHNob3dfd2FybmluZyA9IDE7CisgICAgICBub3RfbG9ja2VkID0gMTsKKyAgICB9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9NTE9DSykKKyAgdWlkX3QgdWlkOworICBpbnQgZXJyOworCisgIHVpZCA9IGdldHVpZCAoKTsKKworI2lmZGVmIEhBVkVfQlJPS0VOX01MT0NLCisgIC8qIFVuZGVyIEhQL1VYIG1sb2NrIHNlZ2ZhdWx0cyBpZiBjYWxsZWQgYnkgbm9uLXJvb3QuICBOb3RlLCB3ZSBoYXZlCisgICAgIG5vY2ggY2hlY2tlZCB3aGV0aGVyIG1sb2NrIGRvZXMgcmVhbGx5IHdvcmsgdW5kZXIgQUlYIHdoZXJlIHdlCisgICAgIGFsc28gZGV0ZWN0ZWQgYSBicm9rZW4gbmxvY2suICBOb3RlIGZ1cnRoZXIsIHRoYXQgdXNpbmcgcGxvY2sgKCkKKyAgICAgaXMgbm90IGEgZ29vZCBpZGVhIHVuZGVyIEFJWC4gKi8KKyAgaWYgKHVpZCkKKyAgICB7CisgICAgICBlcnJubyA9IEVQRVJNOworICAgICAgZXJyID0gZXJybm87CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gbm9fbWxvY2s/IDAgOiBtbG9jayAocCwgbik7CisgICAgICBpZiAoZXJyICYmIGVycm5vKQorCWVyciA9IGVycm5vOworICAgIH0KKyNlbHNlIC8qICFIQVZFX0JST0tFTl9NTE9DSyAqLworICBlcnIgPSBub19tbG9jaz8gMCA6IG1sb2NrIChwLCBuKTsKKyAgaWYgKGVyciAmJiBlcnJubykKKyAgICBlcnIgPSBlcnJubzsKKyNlbmRpZiAvKiAhSEFWRV9CUk9LRU5fTUxPQ0sgKi8KKworICAvKiBUZXN0IHdoZXRoZXIgd2UgYXJlIHJ1bm5pbmcgc2V0dWlkKDApLiAgKi8KKyAgaWYgKHVpZCAmJiAhIGdldGV1aWQgKCkpCisgICAgeworICAgICAgLyogWWVzLCB3ZSBhcmUuICAqLworICAgICAgaWYgKCFub19wcml2X2Ryb3ApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDaGVjayB0aGF0IHdlIHJlYWxseSBkcm9wcGVkIHRoZSBwcml2cy4KKyAgICAgICAgICAgKiBOb3RlOiBzZXR1aWQoMCkgc2hvdWxkIGFsd2F5cyBmYWlsICovCisgICAgICAgICAgaWYgKHNldHVpZCAodWlkKSB8fCBnZXR1aWQgKCkgIT0gZ2V0ZXVpZCAoKSB8fCAhc2V0dWlkICgwKSkKKyAgICAgICAgICAgIGxvZ19mYXRhbCAoImZhaWxlZCB0byByZXNldCB1aWQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGlmIChlcnJubyAhPSBFUEVSTQorI2lmZGVmIEVBR0FJTgkvKiBPcGVuQlNEIHJldHVybnMgdGhpcy4gKi8KKwkgICYmIGVycm5vICE9IEVBR0FJTgorI2VuZGlmCisjaWZkZWYgRU5PU1lTCS8qIFNvbWUgU0NPcyByZXR1cm4gdGhpcyAoZnVuY3Rpb24gbm90IGltcGxlbWVudGVkKS4gKi8KKwkgICYmIGVycm5vICE9IEVOT1NZUworI2VuZGlmCisjaWZkZWYgRU5PTUVNICAvKiBMaW51eCBtaWdodCByZXR1cm4gdGhpcy4gKi8KKyAgICAgICAgICAgICYmIGVycm5vICE9IEVOT01FTQorI2VuZGlmCisJICApCisJbG9nX2Vycm9yICgiY2FuJ3QgbG9jayBtZW1vcnk6ICVzXG4iLCBzdHJlcnJvciAoZXJyKSk7CisgICAgICBzaG93X3dhcm5pbmcgPSAxOworICAgICAgbm90X2xvY2tlZCA9IDE7CisgICAgfQorCisjZWxpZiBkZWZpbmVkICggX19RTlhfXyApCisgIC8qIFFOWCBkb2VzIG5vdCBwYWdlIGF0IGFsbCwgc28gdGhlIHdob2xlIHNlY3VyZSBtZW1vcnkgc3R1ZmYgZG9lcworICAgKiBub3QgbWFrZSBtdWNoIHNlbnNlLiAgSG93ZXZlciBpdCBpcyBzdGlsbCBvZiB1c2UgYmVjYXVzZSBpdAorICAgKiB3aXBlcyBvdXQgdGhlIG1lbW9yeSBvbiBhIGZyZWUoKS4KKyAgICogVGhlcmVmb3JlIGl0IGlzIHN1ZmZpY2llbnQgdG8gc3VwcHJlc3MgdGhlIHdhcm5pbmcuICAqLworICAodm9pZClwOworICAodm9pZCluOworI2VsaWYgZGVmaW5lZCAoSEFWRV9ET1NJU0hfU1lTVEVNKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorICAgIC8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gcHJpbnQgc3VjaCBhIHdhcm5pbmcsIGdpdmVuIHRoZSBmYWN0IHRoYXQKKyAgICAgKiB0aGlzIHdob2xlIFdpbmRvd3MgIUAjJCUgYW5kIHRoZWlyIHVzZXIgYmFzZSBhcmUgaW5oZXJlbnRseSBpbnNlY3VyZS4gKi8KKyAgKHZvaWQpcDsKKyAgKHZvaWQpbjsKKyNlbGlmIGRlZmluZWQgKF9fcmlzY29zX18pCisgICAgLyogTm8gdmlydHVhbCBtZW1vcnkgb24gUklTQyBPUywgc28gbm8gcGFnZXMgYXJlIHN3YXBwZWQgdG8gZGlzYywKKyAgICAgKiBiZXNpZGVzIHdlIGRvbid0IGhhdmUgbW1hcCwgc28gd2UgZG9uJ3QgdXNlIGl0ISA7LSkKKyAgICAgKiBCdXQgZG9uJ3QgY29tcGxhaW4sIGFzIGV4cGxhaW5lZCBhYm92ZS4gICovCisgICh2b2lkKXA7CisgICh2b2lkKW47CisjZWxzZQorICAodm9pZClwOworICAodm9pZCluOworICBpZiAoIW5vX21sb2NrKQorICAgIGxvZ19pbmZvICgiUGxlYXNlIG5vdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBzZWN1cmUgbWVtb3J5IG9uIHRoaXMgc3lzdGVtXG4iKTsKKyNlbmRpZgorfQorCisvKiBJbml0aWFsaXplIFBPT0wuICAqLworc3RhdGljIHZvaWQKK2luaXRfcG9vbCAoc2l6ZV90IG4pCit7CisgIHNpemVfdCBwZ3NpemU7CisgIGxvbmcgaW50IHBnc2l6ZV92YWw7CisgIG1lbWJsb2NrX3QgKm1iOworCisgIHBvb2xfc2l6ZSA9IG47CisKKyAgaWYgKGRpc2FibGVfc2VjbWVtKQorICAgIGxvZ19idWcgKCJzZWN1cmUgbWVtb3J5IGlzIGRpc2FibGVkIik7CisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfUEFHRVNJWkUpCisgIHBnc2l6ZV92YWwgPSBzeXNjb25mIChfU0NfUEFHRVNJWkUpOworI2VsaWYgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQorICBwZ3NpemVfdmFsID0gZ2V0cGFnZXNpemUgKCk7CisjZWxzZQorICBwZ3NpemVfdmFsID0gLTE7CisjZW5kaWYKKyAgcGdzaXplID0gKHBnc2l6ZV92YWwgIT0gLTEgJiYgcGdzaXplX3ZhbCA+IDApPyBwZ3NpemVfdmFsOkRFRkFVTFRfUEFHRV9TSVpFOworCisKKyNpZiBIQVZFX01NQVAKKyAgcG9vbF9zaXplID0gKHBvb2xfc2l6ZSArIHBnc2l6ZSAtIDEpICYgfihwZ3NpemUgLSAxKTsKKyNpZmRlZiBNQVBfQU5PTllNT1VTCisgIHBvb2wgPSBtbWFwICgwLCBwb29sX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOworI2Vsc2UgLyogbWFwIC9kZXYvemVybyBpbnN0ZWFkICovCisgIHsKKyAgICBpbnQgZmQ7CisKKyAgICBmZCA9IG9wZW4gKCIvZGV2L3plcm8iLCBPX1JEV1IpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgIHsKKwlsb2dfZXJyb3IgKCJjYW4ndCBvcGVuIC9kZXYvemVybzogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworCXBvb2wgPSAodm9pZCAqKSAtMTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJcG9vbCA9IG1tYXAgKDAsIHBvb2xfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgIH0KKyAgfQorI2VuZGlmCisgIGlmIChwb29sID09ICh2b2lkICopIC0xKQorICAgIGxvZ19pbmZvICgiY2FuJ3QgbW1hcCBwb29sIG9mICV1IGJ5dGVzOiAlcyAtIHVzaW5nIG1hbGxvY1xuIiwKKwkgICAgICAodW5zaWduZWQpIHBvb2xfc2l6ZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBwb29sX2lzX21tYXBwZWQgPSAxOworICAgICAgcG9vbF9va2F5ID0gMTsKKyAgICB9CisKKyNlbmRpZgorICBpZiAoIXBvb2xfb2theSkKKyAgICB7CisgICAgICBwb29sID0gbWFsbG9jIChwb29sX3NpemUpOworICAgICAgaWYgKCFwb29sKQorCWxvZ19mYXRhbCAoImNhbid0IGFsbG9jYXRlIG1lbW9yeSBwb29sIG9mICV1IGJ5dGVzXG4iLAorCQkgICAodW5zaWduZWQpIHBvb2xfc2l6ZSk7CisgICAgICBlbHNlCisJcG9vbF9va2F5ID0gMTsKKyAgICB9CisKKyAgLyogSW5pdGlhbGl6ZSBmaXJzdCBtZW1vcnkgYmxvY2suICAqLworICBtYiA9IChtZW1ibG9ja190ICopIHBvb2w7CisgIG1iLT5zaXplID0gcG9vbF9zaXplOworICBtYi0+ZmxhZ3MgPSAwOworfQorCit2b2lkCitfZ2NyeV9zZWNtZW1fc2V0X2ZsYWdzICh1bnNpZ25lZCBmbGFncykKK3sKKyAgaW50IHdhc19zdXNwOworCisgIFNFQ01FTV9MT0NLOworCisgIHdhc19zdXNwID0gc3VzcGVuZF93YXJuaW5nOworICBub193YXJuaW5nID0gZmxhZ3MgJiBHQ1JZX1NFQ01FTV9GTEFHX05PX1dBUk5JTkc7CisgIHN1c3BlbmRfd2FybmluZyA9IGZsYWdzICYgR0NSWV9TRUNNRU1fRkxBR19TVVNQRU5EX1dBUk5JTkc7CisgIG5vX21sb2NrICAgICAgPSBmbGFncyAmIEdDUllfU0VDTUVNX0ZMQUdfTk9fTUxPQ0s7CisgIG5vX3ByaXZfZHJvcCA9IGZsYWdzICYgR0NSWV9TRUNNRU1fRkxBR19OT19QUklWX0RST1A7CisKKyAgLyogYW5kIG5vdyBpc3N1ZSB0aGUgd2FybmluZyBpZiBpdCBpcyBub3QgbG9uZ2VyIHN1c3BlbmRlZCAqLworICBpZiAod2FzX3N1c3AgJiYgIXN1c3BlbmRfd2FybmluZyAmJiBzaG93X3dhcm5pbmcpCisgICAgeworICAgICAgc2hvd193YXJuaW5nID0gMDsKKyAgICAgIHByaW50X3dhcm4gKCk7CisgICAgfQorCisgIFNFQ01FTV9VTkxPQ0s7Cit9CisKK3Vuc2lnbmVkIGludAorX2djcnlfc2VjbWVtX2dldF9mbGFncyAodm9pZCkKK3sKKyAgdW5zaWduZWQgZmxhZ3M7CisKKyAgU0VDTUVNX0xPQ0s7CisKKyAgZmxhZ3MgPSBub193YXJuaW5nID8gR0NSWV9TRUNNRU1fRkxBR19OT19XQVJOSU5HIDogMDsKKyAgZmxhZ3MgfD0gc3VzcGVuZF93YXJuaW5nID8gR0NSWV9TRUNNRU1fRkxBR19TVVNQRU5EX1dBUk5JTkcgOiAwOworICBmbGFncyB8PSBub3RfbG9ja2VkID8gR0NSWV9TRUNNRU1fRkxBR19OT1RfTE9DS0VEIDogMDsKKyAgZmxhZ3MgfD0gbm9fbWxvY2sgPyBHQ1JZX1NFQ01FTV9GTEFHX05PX01MT0NLIDogMDsKKyAgZmxhZ3MgfD0gbm9fcHJpdl9kcm9wID8gR0NSWV9TRUNNRU1fRkxBR19OT19QUklWX0RST1AgOiAwOworCisgIFNFQ01FTV9VTkxPQ0s7CisKKyAgcmV0dXJuIGZsYWdzOworfQorCisKKy8qIFNlZSBfZ2NyeV9zZWNtZW1faW5pdC4gIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIHdpdGgKKyAgIHRoZSBzZWNtZW0gbG9jayBoZWxkLiAqLworc3RhdGljIHZvaWQKK3NlY21lbV9pbml0IChzaXplX3QgbikKK3sKKyAgaWYgKCFuKQorICAgIHsKKyNpZmRlZiBVU0VfQ0FQQUJJTElUSUVTCisgICAgICAvKiBkcm9wIGFsbCBjYXBhYmlsaXRpZXMgKi8KKyAgICAgIHsKKyAgICAgICAgY2FwX3QgY2FwOworCisgICAgICAgIGNhcCA9IGNhcF9mcm9tX3RleHQgKCJhbGwtZWlwIik7CisgICAgICAgIGNhcF9zZXRfcHJvYyAoY2FwKTsKKyAgICAgICAgY2FwX2ZyZWUgKGNhcCk7CisgICAgICB9CisKKyNlbGlmICFkZWZpbmVkKEhBVkVfRE9TSVNIX1NZU1RFTSkKKyAgICAgIHVpZF90IHVpZDsKKworICAgICAgZGlzYWJsZV9zZWNtZW0gPSAxOworICAgICAgdWlkID0gZ2V0dWlkICgpOworICAgICAgaWYgKHVpZCAhPSBnZXRldWlkICgpKQorCXsKKwkgIGlmIChzZXR1aWQgKHVpZCkgfHwgZ2V0dWlkICgpICE9IGdldGV1aWQgKCkgfHwgIXNldHVpZCAoMCkpCisJICAgIGxvZ19mYXRhbCAoImZhaWxlZCB0byBkcm9wIHNldHVpZFxuIik7CisJfQorI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKG4gPCBNSU5JTVVNX1BPT0xfU0laRSkKKwluID0gTUlOSU1VTV9QT09MX1NJWkU7CisgICAgICBpZiAoISBwb29sX29rYXkpCisJeworCSAgaW5pdF9wb29sIChuKTsKKwkgIGxvY2tfcG9vbCAocG9vbCwgbik7CisJfQorICAgICAgZWxzZQorCWxvZ19lcnJvciAoIk9vcHMsIHNlY3VyZSBtZW1vcnkgcG9vbCBhbHJlYWR5IGluaXRpYWxpemVkXG4iKTsKKyAgICB9Cit9CisKKworCisvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgbWVtb3J5IHN5c3RlbS4gIElmIHJ1bm5pbmcgd2l0aCB0aGUgbmVjZXNzYXJ5CisgICBwcml2aWxlZ2VzLCB0aGUgc2VjdXJlIG1lbW9yeSBwb29sIHdpbGwgYmUgbG9ja2VkIGludG8gdGhlIGNvcmUgaW4KKyAgIG9yZGVyIHRvIHByZXZlbnQgcGFnZS1vdXRzIG9mIHRoZSBkYXRhLiAgRnVydGhlcm1vcmUgYWxsb2NhdGVkCisgICBzZWN1cmUgbWVtb3J5IHdpbGwgYmUgd2lwZWQgb3V0IHdoZW4gcmVsZWFzZWQuICAqLwordm9pZAorX2djcnlfc2VjbWVtX2luaXQgKHNpemVfdCBuKQoreworICBTRUNNRU1fTE9DSzsKKworICBzZWNtZW1faW5pdCAobik7CisKKyAgU0VDTUVNX1VOTE9DSzsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3NlY21lbV9tb2R1bGVfaW5pdCAoKQoreworICBpbnQgZXJyOworCisgIGVyciA9IGF0aF9tdXRleF9pbml0ICgmc2VjbWVtX2xvY2spOworICBpZiAoZXJyKQorICAgIGxvZ19mYXRhbCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBzZWNtZW0gbG9ja1xuIik7CisKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgKgorX2djcnlfc2VjbWVtX21hbGxvY19pbnRlcm5hbCAoc2l6ZV90IHNpemUpCit7CisgIG1lbWJsb2NrX3QgKm1iOworCisgIGlmICghcG9vbF9va2F5KQorICAgIHsKKyAgICAgIC8qIFRyeSB0byBpbml0aWFsaXplIHRoZSBwb29sIGlmIHRoZSB1c2VyIGZvcmdvdCBhYm91dCBpdC4gICovCisgICAgICBzZWNtZW1faW5pdCAoU1RBTkRBUkRfUE9PTF9TSVpFKTsKKyAgICAgIGlmICghcG9vbF9va2F5KQorICAgICAgICB7CisgICAgICAgICAgbG9nX2luZm8gKF8oIm9wZXJhdGlvbiBpcyBub3QgcG9zc2libGUgd2l0aG91dCAiCisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIHNlY3VyZSBtZW1vcnlcbiIpKTsKKyAgICAgICAgICBncGdfZXJyX3NldF9lcnJubyAoRU5PTUVNKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKG5vdF9sb2NrZWQgJiYgZmlwc19tb2RlICgpKQorICAgIHsKKyAgICAgIGxvZ19pbmZvIChfKCJzZWN1cmUgbWVtb3J5IHBvb2wgaXMgbm90IGxvY2tlZCB3aGlsZSBpbiBGSVBTIG1vZGVcbiIpKTsKKyAgICAgIGdwZ19lcnJfc2V0X2Vycm5vIChFTk9NRU0pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAoc2hvd193YXJuaW5nICYmICFzdXNwZW5kX3dhcm5pbmcpCisgICAgeworICAgICAgc2hvd193YXJuaW5nID0gMDsKKyAgICAgIHByaW50X3dhcm4gKCk7CisgICAgfQorCisgIC8qIEJsb2NrcyBhcmUgYWx3YXlzIGEgbXVsdGlwbGUgb2YgMzIuICovCisgIHNpemUgPSAoKHNpemUgKyAzMSkgLyAzMikgKiAzMjsKKworICBtYiA9IG1iX2dldF9uZXcgKChtZW1ibG9ja190ICopIHBvb2wsIHNpemUpOworICBpZiAobWIpCisgICAgc3RhdHNfdXBkYXRlIChzaXplLCAwKTsKKworICByZXR1cm4gbWIgPyAmbWItPmFsaWduZWQuYyA6IE5VTEw7Cit9CisKK3ZvaWQgKgorX2djcnlfc2VjbWVtX21hbGxvYyAoc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnA7CisKKyAgU0VDTUVNX0xPQ0s7CisgIHAgPSBfZ2NyeV9zZWNtZW1fbWFsbG9jX2ludGVybmFsIChzaXplKTsKKyAgU0VDTUVNX1VOTE9DSzsKKworICByZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQKK19nY3J5X3NlY21lbV9mcmVlX2ludGVybmFsICh2b2lkICphKQoreworICBtZW1ibG9ja190ICptYjsKKyAgaW50IHNpemU7CisKKyAgaWYgKCFhKQorICAgIHJldHVybjsKKworICBtYiA9IEFERFJfVE9fQkxPQ0sgKGEpOworICBzaXplID0gbWItPnNpemU7CisKKyAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2U6IHByb2JhYmx5IHRoaXMgbWVtb3J5IGlzIGhlbGQgaW4gdGhlCisgICAqIGNhY2hlLiBXZSBkbyBpdCBhbnl3YXk6ICovCisjZGVmaW5lIE1CX1dJUEVfT1VUKGJ5dGUpIFwKKyAgd2lwZW1lbW9yeTIgKChtZW1ibG9ja190ICopICgoY2hhciAqKSBtYiArIEJMT0NLX0hFQURfU0laRSksIChieXRlKSwgc2l6ZSk7CisKKyAgTUJfV0lQRV9PVVQgKDB4ZmYpOworICBNQl9XSVBFX09VVCAoMHhhYSk7CisgIE1CX1dJUEVfT1VUICgweDU1KTsKKyAgTUJfV0lQRV9PVVQgKDB4MDApOworCisgIHN0YXRzX3VwZGF0ZSAoMCwgc2l6ZSk7CisKKyAgbWItPmZsYWdzICY9IH5NQl9GTEFHX0FDVElWRTsKKworICAvKiBVcGRhdGUgc3RhdHMuICAqLworCisgIG1iX21lcmdlIChtYik7Cit9CisKKy8qIFdpcGUgb3V0IGFuZCByZWxlYXNlIG1lbW9yeS4gICovCit2b2lkCitfZ2NyeV9zZWNtZW1fZnJlZSAodm9pZCAqYSkKK3sKKyAgU0VDTUVNX0xPQ0s7CisgIF9nY3J5X3NlY21lbV9mcmVlX2ludGVybmFsIChhKTsKKyAgU0VDTUVNX1VOTE9DSzsKK30KKworLyogUmVhbGxvYyBtZW1vcnkuICAqLwordm9pZCAqCitfZ2NyeV9zZWNtZW1fcmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG5ld3NpemUpCit7CisgIG1lbWJsb2NrX3QgKm1iOworICBzaXplX3Qgc2l6ZTsKKyAgdm9pZCAqYTsKKworICBTRUNNRU1fTE9DSzsKKworICBtYiA9IChtZW1ibG9ja190ICopICgoY2hhciAqKSBwIC0gKChzaXplX3QpICYoKG1lbWJsb2NrX3QgKikgMCktPmFsaWduZWQuYykpOworICBzaXplID0gbWItPnNpemU7CisgIGlmIChuZXdzaXplIDwgc2l6ZSkKKyAgICB7CisgICAgICAvKiBJdCBpcyBlYXNpZXIgdG8gbm90IHNocmluayB0aGUgbWVtb3J5LiAgKi8KKyAgICAgIGEgPSBwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGEgPSBfZ2NyeV9zZWNtZW1fbWFsbG9jX2ludGVybmFsIChuZXdzaXplKTsKKyAgICAgIGlmIChhKQorCXsKKwkgIG1lbWNweSAoYSwgcCwgc2l6ZSk7CisJICBtZW1zZXQgKChjaGFyICopIGEgKyBzaXplLCAwLCBuZXdzaXplIC0gc2l6ZSk7CisJICBfZ2NyeV9zZWNtZW1fZnJlZV9pbnRlcm5hbCAocCk7CisJfQorICAgIH0KKworICBTRUNNRU1fVU5MT0NLOworCisgIHJldHVybiBhOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFAgcG9pbnRzIGludG8gdGhlIHNlY3VyZSBtZW1vcnkgYXJlYS4gICovCitpbnQKK19nY3J5X3ByaXZhdGVfaXNfc2VjdXJlIChjb25zdCB2b2lkICpwKQoreworICByZXR1cm4gcG9vbF9va2F5ICYmIHB0cl9pbnRvX3Bvb2xfcCAocCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIFdhcm5pbmc6ICBUaGlzIGNvZGUgbWlnaHQgYmUgY2FsbGVkIGJ5IGFuIGludGVycnVwdCBoYW5kbGVyCisgKgkgICAgIGFuZCBmcmFua2x5LCB0aGVyZSBzaG91bGQgcmVhbGx5IGJlIHN1Y2ggYSBoYW5kbGVyLAorICoJICAgICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGlzIHdpcGVkIG91dC4KKyAqCSAgICAgV2UgaG9wZSB0aGF0IHRoZSBPUyB3aXBlcyBvdXQgbWxvY2tlZCBtZW1vcnkgYWZ0ZXIKKyAqCSAgICAgcmVjZWl2aW5nIGEgU0lHS0lMTCAtIGl0IHJlYWxseSBzaG91bGQgZG8gc28sIG90aGVyd2lzZQorICoJICAgICB0aGVyZSBpcyBubyBjaGFuY2UgdG8gZ2V0IHRoZSBzZWN1cmUgbWVtb3J5IGNsZWFuZWQuCisgKi8KK3ZvaWQKK19nY3J5X3NlY21lbV90ZXJtICgpCit7CisgIGlmICghcG9vbF9va2F5KQorICAgIHJldHVybjsKKworICB3aXBlbWVtb3J5MiAocG9vbCwgMHhmZiwgcG9vbF9zaXplKTsKKyAgd2lwZW1lbW9yeTIgKHBvb2wsIDB4YWEsIHBvb2xfc2l6ZSk7CisgIHdpcGVtZW1vcnkyIChwb29sLCAweDU1LCBwb29sX3NpemUpOworICB3aXBlbWVtb3J5MiAocG9vbCwgMHgwMCwgcG9vbF9zaXplKTsKKyNpZiBIQVZFX01NQVAKKyAgaWYgKHBvb2xfaXNfbW1hcHBlZCkKKyAgICBtdW5tYXAgKHBvb2wsIHBvb2xfc2l6ZSk7CisjZW5kaWYKKyAgcG9vbCA9IE5VTEw7CisgIHBvb2xfb2theSA9IDA7CisgIHBvb2xfc2l6ZSA9IDA7CisgIG5vdF9sb2NrZWQgPSAwOworfQorCisKK3ZvaWQKK19nY3J5X3NlY21lbV9kdW1wX3N0YXRzICgpCit7CisjaWYgMQorICBTRUNNRU1fTE9DSzsKKworIGlmIChwb29sX29rYXkpCisgICAgbG9nX2luZm8gKCJzZWNtZW0gdXNhZ2U6ICV1LyVsdSBieXRlcyBpbiAldSBibG9ja3NcbiIsCisJICAgICAgY3VyX2FsbG9jZWQsICh1bnNpZ25lZCBsb25nKXBvb2xfc2l6ZSwgY3VyX2Jsb2Nrcyk7CisgIFNFQ01FTV9VTkxPQ0s7CisjZWxzZQorICBtZW1ibG9ja190ICptYjsKKyAgaW50IGk7CisKKyAgU0VDTUVNX0xPQ0s7CisKKyAgZm9yIChpID0gMCwgbWIgPSAobWVtYmxvY2tfdCAqKSBwb29sOworICAgICAgIHB0cl9pbnRvX3Bvb2xfcCAobWIpOworICAgICAgIG1iID0gbWJfZ2V0X25leHQgKG1iKSwgaSsrKQorICAgIGxvZ19pbmZvICgiU0VDTUVNOiBbJXNdIGJsb2NrOiAlaTsgc2l6ZTogJWlcbiIsCisJICAgICAgKG1iLT5mbGFncyAmIE1CX0ZMQUdfQUNUSVZFKSA/ICJ1c2VkIiA6ICJmcmVlIiwKKwkgICAgICBpLAorCSAgICAgIG1iLT5zaXplKTsKKyAgU0VDTUVNX1VOTE9DSzsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL3NlY21lbS5oIGIvc3JjL3NlY21lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzczODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2VjbWVtLmgKQEAgLTAsMCArMSw0MSBAQAorLyogc2VjbWVtLmggLSAgaW50ZXJuYWwgZGVmaW5pdGlvbnMgZm9yIHNlY21lbQorICoJQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaWZuZGVmIEcxMF9TRUNNRU1fSAorI2RlZmluZSBHMTBfU0VDTUVNX0ggMQorCit2b2lkIF9nY3J5X3NlY21lbV9pbml0IChzaXplX3QgbnBvb2wpOwordm9pZCBfZ2NyeV9zZWNtZW1fdGVybSAodm9pZCk7Cit2b2lkICpfZ2NyeV9zZWNtZW1fbWFsbG9jIChzaXplX3Qgc2l6ZSkgX0dDUllfR0NDX0FUVFJfTUFMTE9DOwordm9pZCAqX2djcnlfc2VjbWVtX3JlYWxsb2MgKHZvaWQgKmEsIHNpemVfdCBuZXdzaXplKTsKK3ZvaWQgX2djcnlfc2VjbWVtX2ZyZWUgKHZvaWQgKmEpOwordm9pZCBfZ2NyeV9zZWNtZW1fZHVtcF9zdGF0cyAodm9pZCk7Cit2b2lkIF9nY3J5X3NlY21lbV9zZXRfZmxhZ3MgKHVuc2lnbmVkIGZsYWdzKTsKK3Vuc2lnbmVkIF9nY3J5X3NlY21lbV9nZXRfZmxhZ3Modm9pZCk7CitpbnQgX2djcnlfcHJpdmF0ZV9pc19zZWN1cmUgKGNvbnN0IHZvaWQgKnApOworCisvKiBGbGFncyBmb3IgX2djcnlfc2VjbWVtX3tzZXQsZ2V0fV9mbGFncy4gICovCisjZGVmaW5lIEdDUllfU0VDTUVNX0ZMQUdfTk9fV0FSTklORyAgICAgICgxIDw8IDApCisjZGVmaW5lIEdDUllfU0VDTUVNX0ZMQUdfU1VTUEVORF9XQVJOSU5HICgxIDw8IDEpCisjZGVmaW5lIEdDUllfU0VDTUVNX0ZMQUdfTk9UX0xPQ0tFRCAgICAgICgxIDw8IDIpCisjZGVmaW5lIEdDUllfU0VDTUVNX0ZMQUdfTk9fTUxPQ0sgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIEdDUllfU0VDTUVNX0ZMQUdfTk9fUFJJVl9EUk9QICAgICgxIDw8IDQpCisKKyNlbmRpZiAvKiBHMTBfU0VDTUVNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9zZXhwLmMgYi9zcmMvc2V4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNGFmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2V4cC5jCkBAIC0wLDAgKzEsMjQzMiBAQAorLyogc2V4cC5jICAtICBTLUV4cHJlc3Npb24gaGFuZGxpbmcKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKKyAqICAgICAgICAgICAgICAgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBHQ1JZUFRfTk9fTVBJX01BQ1JPUyAxCisjaW5jbHVkZSAiZzEwbGliLmgiCisKKworLyogTm90ZXMgb24gdGhlIGludGVybmFsIG1lbW9yeSBsYXlvdXQuCisKKyAgIFdlIHN0b3JlIGFuIFMtZXhwcmVzc2lvbiBhcyBvbmUgbWVtb3J5IGJ1ZmZlciB3aXRoIHRhZ3MsIGxlbmd0aCBhbmQKKyAgIHZhbHVlLiAgVGhlIHNpbXBsZXN0IGxpc3Qgd291bGQgdGh1cyBiZToKKworICAgLy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS1cCisgICB8IG9wZW5fdGFnIHwgZGF0YV90YWcgfCBkYXRhbGVuIHwgZGF0YSB8IGNsb3NlX3RhZyB8IHN0b3BfdGFnIHwKKyAgIFwtLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLworCisgICBFeHByZXNzZWQgbW9yZSBjb21wYWN0IGFuZCB3aXRoIGFuIGV4YW1wbGU6CisKKyAgIC8tLS0tKy0tLS0rLS0tLSstLS0rLS0tLSstLS0tXAorICAgfCBPVCB8IERUIHwgREwgfCBEIHwgQ1QgfCBTVCB8ICAiKGZvbykiCisgICBcLS0tLSstLS0tKy0tLS0rLS0tKy0tLS0rLS0tLS8KKworICAgVGhlIG9wZW4gdGFnIG11c3QgYWx3YXlzIGJlIHRoZSBmaXJzdCB0YWcgb2YgYSBsaXN0IGFzIHJlcXVpcmVzIGJ5CisgICB0aGUgUy1leHByZXNzaW9uIHNwZWNzLiAgQXQgbGVhc3QgZGF0YSBlbGVtZW50IChkYXRhX3RhZywgZGF0YWxlbiwKKyAgIGRhdGEpIGlzIHJlcXVpcmVkIGFzIHdlbGwuICBUaGUgY2xvc2VfdGFnIGZpbmlzaGVzIHRoZSBsaXN0IGFuZAorICAgd291bGQgYWN0dWFsbHkgYmUgc3VmZmljaWVudC4gIEZvciBmYWlsLXNhZmUgcmVhc29ucyBhIGZpbmFsIHN0b3AKKyAgIHRhZyBpcyBhbHdheXMgdGhlIGxhc3QgYnl0ZSBpbiBhIGJ1ZmZlcjsgaXQgaGFzIGEgdmFsdWUgb2YgMCBzbworICAgdGhhdCBzdHJpbmcgZnVuY3Rpb24gYWNjaWRlbnRseSBhcHBsaWVkIHRvIGFuIFMtZXhwcmVzc2lvbiB3aWxsCisgICBuZXZlciBhY2Nlc3MgdW5hbGxvY2F0ZWQgZGF0YS4gIFdlIGRvIG5vdCBzdXBwb3J0IGRpc3BsYXkgaGludHMgYW5kCisgICB0aHVzIGRvbid0IG5lZWQgdG8gcmVwcmVzZW50IHRoZW0uICBBIGxpc3QgbWF5IGhhdmUgbW9yZSBhbgorICAgYXJiaXRyYXJ5IG51bWJlciBvZiBkYXRhIGVsZW1lbnRzIGJ1dCBhdCBsZWFzdCBvbmUgaXMgcmVxdWlyZWQuCisgICBUaGUgbGVuZ3RoIG9mIGVhY2ggZGF0YSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBoYXMgYSBjdXJyZW50CisgICBsaW1pdCB0byA2NTUzNSBieXRlcyAoYnkgbWVhbnMgb2YgdGhlIERBVEFMRU4gdHlwZSkuCisKKyAgIEEgbGlzdCB3aXRoIHR3byBkYXRhIGVsZW1lbnRzOgorCisgICAvLS0tLSstLS0tKy0tLS0rLS0tKy0tLS0rLS0tLSstLS0rLS0tLSstLS0tXAorICAgfCBPVCB8IERUIHwgREwgfCBEIHwgRFQgfCBETCB8IEQgfCBDVCB8IFNUIHwgICIoZm9vIGJhcikiCisgICBcLS0tLSstLS0tKy0tLS0rLS0tKy0tLS0rLS0tLSstLS0rLS0tLSstLS0tLworCisgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSBib3RoIERMIGZpZWxkcyBoYXZlIGEgdmFsdWUgb2YgMy4KKyAgIEEgbGlzdCBvZiBhIGxpc3Qgd2l0aCBvbmUgZGF0YSBlbGVtZW50OgorCisgICAvLS0tLSstLS0tKy0tLS0rLS0tLSstLS0rLS0tLSstLS0tKy0tLS1cCisgICB8IE9UIHwgT1QgfCBEVCB8IERMIHwgRCB8IENUIHwgQ1QgfCBTVCB8ICAiKChmb28pKSIKKyAgIFwtLS0tKy0tLS0rLS0tLSstLS0tKy0tLSstLS0tKy0tLS0rLS0tLS8KKworICAgQSBsaXN0IHdpdGggb25lIGVsZW1lbnQgZm9sbG93ZWQgYnkgYW5vdGhlciBsaXN0OgorCisgICAvLS0tLSstLS0tKy0tLS0rLS0tKy0tLS0rLS0tLSstLS0tKy0tLSstLS0tKy0tLS0rLS0tLVwKKyAgIHwgT1QgfCBEVCB8IERMIHwgRCB8IE9UIHwgRFQgfCBETCB8IEQgfCBDVCB8IENUIHwgU1QgfCAgIihmb28gKGJhcikpIgorICAgXC0tLS0rLS0tLSstLS0tKy0tLSstLS0tKy0tLS0rLS0tLSstLS0rLS0tLSstLS0tKy0tLS0vCisKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IERBVEFMRU47CisKK3N0cnVjdCBnY3J5X3NleHAKK3sKKyAgYnl0ZSBkWzFdOworfTsKKworI2RlZmluZSBTVF9TVE9QICAwCisjZGVmaW5lIFNUX0RBVEEgIDEgIC8qIGRhdGFsZW4gZm9sbG93cyAqLworLyojZGVmaW5lIFNUX0hJTlQgIDIgICBkYXRhbGVuIGZvbGxvd3MgKGN1cnJlbnRseSBub3QgdXNlZCkgKi8KKyNkZWZpbmUgU1RfT1BFTiAgMworI2RlZmluZSBTVF9DTE9TRSA0CisKKy8qIFRoZSBhdG9pIG1hY3JvcyBhc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGhhcyBvbmx5IHZhbGlkIGRpZ2l0cy4gICovCisjZGVmaW5lIGF0b2lfMShwKSAgICgqKHApIC0gJzAnICkKKyNkZWZpbmUgeHRvaV8xKHApICAgKCoocCkgPD0gJzknPyAoKihwKS0gJzAnKTogXAorICAgICAgICAgICAgICAgICAgICAgKihwKSA8PSAnRic/ICgqKHApLSdBJysxMCk6KCoocCktJ2EnKzEwKSkKKyNkZWZpbmUgeHRvaV8yKHApICAgKCh4dG9pXzEocCkgKiAxNikgKyB4dG9pXzEoKHApKzEpKQorCisjZGVmaW5lIFRPS0VOX1NQRUNJQUxTICAiLS4vXzoqKz0iCisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX3ZzZXhwX3NzY2FuIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgYXJnZmxhZywKKyAgICAgICAgICAgICAgICB2b2lkICoqYXJnX2xpc3QsIHZhX2xpc3QgYXJnX3B0cik7CisKK3N0YXRpYyBnY3J5X2Vycl9jb2RlX3QKK2RvX3NleHBfc3NjYW4gKGdjcnlfc2V4cF90ICpyZXRzZXhwLCBzaXplX3QgKmVycm9mZiwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGFyZ2ZsYWcsCisgICAgICAgICAgICAgICB2b2lkICoqYXJnX2xpc3QsIC4uLik7CisKKy8qIFJldHVybiB0cnVlIGlmIFAgcG9pbnRzIHRvIGEgYnl0ZSBjb250YWluaW5nIGEgd2hpdGVzcGFjZSBhY2NvcmRpbmcKKyAgIHRvIHRoZSBTLWV4cHJlc3Npb25zIGRlZmluaXRpb24uICovCisjdW5kZWYgd2hpdGVzcGFjZXAKK3N0YXRpYyBHUEdfRVJSX0lOTElORSBpbnQKK3doaXRlc3BhY2VwIChjb25zdCBjaGFyICpwKQoreworICBzd2l0Y2ggKCpwKQorICAgIHsKKyAgICBjYXNlICcgJzogY2FzZSAnXHQnOiBjYXNlICdcdic6IGNhc2UgJ1xmJzogY2FzZSAnXHInOiBjYXNlICdcbic6IHJldHVybiAxOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KK30KKworCisjaWYgMAorc3RhdGljIHZvaWQKK2R1bXBfbXBpKCBnY3J5X21waV90IGEgKQoreworICAgIGNoYXIgYnVmZmVyWzEwMDBdOworICAgIHNpemVfdCBuID0gMTAwMDsKKworICAgIGlmKCAhYSApCisJZnB1dHMoIltubyBNUEldIiwgc3RkZXJyICk7CisgICAgZWxzZSBpZiggZ2NyeV9tcGlfcHJpbnQoIEdDUllNUElfRk1UX0hFWCwgYnVmZmVyLCAmbiwgYSApICkKKwlmcHV0cygiW01QSSB0b28gbGFyZ2UgdG8gcHJpbnRdIiwgc3RkZXJyICk7CisgICAgZWxzZQorCWZwdXRzKCBidWZmZXIsIHN0ZGVyciApOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitkdW1wX3N0cmluZyAoY29uc3QgYnl0ZSAqcCwgc2l6ZV90IG4sIGludCBkZWxpbSApCit7CisgIGZvciAoOyBuOyBuLS0sIHArKyApCisgICAgeworICAgICAgaWYgKCgqcCAmIDB4ODApIHx8IGlzY250cmwoICpwICkgfHwgKnAgPT0gZGVsaW0gKQorICAgICAgICB7CisgICAgICAgICAgaWYoICpwID09ICdcbicgKQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxcbiIpOworICAgICAgICAgIGVsc2UgaWYoICpwID09ICdccicgKQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxcciIpOworICAgICAgICAgIGVsc2UgaWYoICpwID09ICdcZicgKQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxcZiIpOworICAgICAgICAgIGVsc2UgaWYoICpwID09ICdcdicgKQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxcdiIpOworCSAgICBlbHNlIGlmKCAqcCA9PSAnXGInICkKKyAgICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxcYiIpOworICAgICAgICAgIGVsc2UgaWYoICEqcCApCisgICAgICAgICAgICBsb2dfcHJpbnRmICgiXFwwIik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nX3ByaW50ZiAoIlxceCUwMngiLCAqcCApOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgbG9nX3ByaW50ZiAoIiVjIiwgKnApOworICAgIH0KK30KKworCit2b2lkCitfZ2NyeV9zZXhwX2R1bXAgKGNvbnN0IGdjcnlfc2V4cF90IGEpCit7CisgIGNvbnN0IGJ5dGUgKnA7CisgIGludCBpbmRlbnQgPSAwOworICBpbnQgdHlwZTsKKworICBpZiAoIWEpCisgICAgeworICAgICAgbG9nX3ByaW50ZiAoICJbbmlsXVxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHAgPSBhLT5kOworICB3aGlsZSAoICh0eXBlID0gKnApICE9IFNUX1NUT1AgKQorICAgIHsKKyAgICAgIHArKzsKKyAgICAgIHN3aXRjaCAoIHR5cGUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgU1RfT1BFTjoKKyAgICAgICAgICBsb2dfcHJpbnRmICgiJSpzW29wZW5dXG4iLCAyKmluZGVudCwgIiIpOworICAgICAgICAgIGluZGVudCsrOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUX0NMT1NFOgorICAgICAgICAgIGlmKCBpbmRlbnQgKQorICAgICAgICAgICAgaW5kZW50LS07CisgICAgICAgICAgbG9nX3ByaW50ZiAoIiUqc1tjbG9zZV1cbiIsIDIqaW5kZW50LCAiIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RfREFUQTogeworICAgICAgICAgIERBVEFMRU4gbjsKKyAgICAgICAgICBtZW1jcHkgKCAmbiwgcCwgc2l6ZW9mIG4gKTsKKyAgICAgICAgICBwICs9IHNpemVvZiBuOworICAgICAgICAgIGxvZ19wcmludGYgKCIlKnNbZGF0YT1cIiIsIDIqaW5kZW50LCAiIiApOworICAgICAgICAgIGR1bXBfc3RyaW5nIChwLCBuLCAnXCInICk7CisgICAgICAgICAgbG9nX3ByaW50ZiAoIlwiXVxuIik7CisgICAgICAgICAgcCArPSBuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGxvZ19wcmludGYgKCIlKnNbdW5rbm93biB0YWcgJWRdXG4iLCAyKmluZGVudCwgIiIsIHR5cGUpOworICAgICAgICAgIGJyZWFrOworCX0KKyAgICB9Cit9CisKKworLyogUGFzcyBsaXN0IHRocm91Z2ggZXhjZXB0IHdoZW4gaXQgaXMgYW4gZW1wdHkgbGlzdCAtIGluIHRoYXQgY2FzZQorICogcmV0dXJuIE5VTEwgYW5kIHJlbGVhc2UgdGhlIHBhc3NlZCBsaXN0LiAgVGhpcyBpcyB1c2VkIHRvIG1ha2Ugc3VyZQorICogdGhhdCBubyBmb3JiaWRkZW4gZW1wdHkgbGlzdHMgYXJlIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyBnY3J5X3NleHBfdAorbm9ybWFsaXplICggZ2NyeV9zZXhwX3QgbGlzdCApCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgaWYgKCAhbGlzdCApCisgICAgcmV0dXJuIE5VTEw7CisgIHAgPSBsaXN0LT5kOworICBpZiAoICpwID09IFNUX1NUT1AgKQorICAgIHsKKyAgICAgIC8qIHRoaXMgaXMgIiIgKi8KKyAgICAgIHNleHBfcmVsZWFzZSAoIGxpc3QgKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgaWYgKCAqcCA9PSBTVF9PUEVOICYmIHBbMV0gPT0gU1RfQ0xPU0UgKQorICAgIHsKKyAgICAgIC8qIHRoaXMgaXMgIigpIiAqLworICAgICAgc2V4cF9yZWxlYXNlICggbGlzdCApOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBsaXN0OworfQorCisvKiBDcmVhdGUgYSBuZXcgUy1leHByZXNzaW9uIG9iamVjdCBieSByZWFkaW5nIExFTkdUSCBieXRlcyBmcm9tCisgICBCVUZGRVIsIGFzc3VtaW5nIGl0IGlzIGNhbm9uaWNhbCBlbmNvZGVkIG9yIGF1dG9kZXRlY3RlZCBlbmNvZGluZworICAgd2hlbiBBVVRPREVURUNUIGlzIHNldCB0byAxLiAgV2l0aCBGUkVFRk5DIG5vdCBOVUxMLCBvd25lcnNoaXAgb2YKKyAgIHRoZSBidWZmZXIgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LiAgRlJFRUZOQworICAgc2hvdWxkIGJlIHRoZSBmcmVlZm5jIHVzZWQgdG8gcmVsZWFzZSBCVUZGRVI7IHRoZXJlIGlzIG5vIGd1YXJhbnRlZQorICAgYXQgd2hpY2ggcG9pbnQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQ7IG1vc3QgbGlrZXkgeW91IHdhbnQgdG8gdXNlCisgICBmcmVlKCkgb3IgZ2NyeV9mcmVlKCkuCisKKyAgIFBhc3NpbmcgTEVOR1RIIGFuZCBBVVRPREVURUNUIGFzIDAgaXMgYWxsb3dlZCB0byBpbmRpY2F0ZSB0aGF0CisgICBCVUZGRVIgcG9pbnRzIHRvIGEgdmFsaWQgY2Fub25pY2FsIGVuY29kZWQgUy1leHByZXNzaW9uLiAgQSBMRU5HVEgKKyAgIG9mIDAgYW5kIEFVVE9ERVRFQ1QgMSBpbmRpY2F0ZXMgdGhhdCBidWZmZXIgcG9pbnRzIHRvIGEKKyAgIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGFuZCBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBvYmplY3QgaW4KKyAgIFJFVFNFWFAgb3IgYW4gZXJyb3IgY29kZSBpbiB3aGljaCBjYXNlIFJFVFNFWFAgaXMgc2V0IHRvIE5VTEwuICAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9zZXhwX2NyZWF0ZSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIGludCBhdXRvZGV0ZWN0LCB2b2lkICgqZnJlZWZuYykodm9pZCopICkKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVycmNvZGU7CisgIGdjcnlfc2V4cF90IHNlOworCisgIGlmICghcmV0c2V4cCkKKyAgICByZXR1cm4gR1BHX0VSUl9JTlZfQVJHOworICAqcmV0c2V4cCA9IE5VTEw7CisgIGlmIChhdXRvZGV0ZWN0IDwgMCB8fCBhdXRvZGV0ZWN0ID4gMSB8fCAhYnVmZmVyKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7CisKKyAgaWYgKCFsZW5ndGggJiYgIWF1dG9kZXRlY3QpCisgICAgeyAvKiBXaGF0IGEgYnJhdmUgY2FsbGVyIHRvIGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJlYWxseSBhIGNhbm9uaWNhbAorICAgICAgICAgZW5jb2RlZCBTLWV4cHJlc3Npb24gaW4gYnVmZmVyICovCisgICAgICBsZW5ndGggPSBfZ2NyeV9zZXhwX2Nhbm9uX2xlbiAoYnVmZmVyLCAwLCBOVUxMLCAmZXJyY29kZSk7CisgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVycmNvZGU7CisgICAgfQorICBlbHNlIGlmICghbGVuZ3RoICYmIGF1dG9kZXRlY3QpCisgICAgeyAvKiBidWZmZXIgaXMgYSBzdHJpbmcgKi8KKyAgICAgIGxlbmd0aCA9IHN0cmxlbiAoKGNoYXIgKilidWZmZXIpOworICAgIH0KKworICBlcnJjb2RlID0gZG9fc2V4cF9zc2NhbiAoJnNlLCBOVUxMLCBidWZmZXIsIGxlbmd0aCwgMCwgTlVMTCk7CisgIGlmIChlcnJjb2RlKQorICAgIHJldHVybiBlcnJjb2RlOworCisgICpyZXRzZXhwID0gc2U7CisgIGlmIChmcmVlZm5jKQorICAgIHsKKyAgICAgIC8qIEZvciBub3cgd2UgcmVsZWFzZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5LiAgQXMgc29vbiBhcyB3ZQorICAgICAgICAgaGF2ZSBjaGFuZ2VkIHRoZSBpbnRlcm5hbCByZXByZXNlbmF0aW9uIG9mIFMtZXhwcmVzc2lvbiB0bworICAgICAgICAgdGhlIGNhbm9uY2lhbCBmb3JtYXQgLSB3aGljaCBoYXMgdGhlIGFkdmFudGFnZSBvZiBmYXN0ZXIKKyAgICAgICAgIHBhcnNpbmcgLSB3ZSB3aWxsIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgY2xvc3VyZSBpbiBvdXIKKyAgICAgICAgIEdDUllTRVhQIG9iamVjdCBhbmQgdXNlIHRoZSBCVUZGRVIgZGlyZWN0bHkuICAqLworICAgICAgZnJlZWZuYyAoYnVmZmVyKTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBTYW1lIGFzIGdjcnlfc2V4cF9jcmVhdGUgYnV0IGRvbid0IHRyYW5zZmVyIG93bmVyc2hpcCAqLworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9zZXhwX25ldyAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgIGludCBhdXRvZGV0ZWN0KQoreworICByZXR1cm4gX2djcnlfc2V4cF9jcmVhdGUgKHJldHNleHAsICh2b2lkICopYnVmZmVyLCBsZW5ndGgsIGF1dG9kZXRlY3QsIE5VTEwpOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBSZWxlYXNlIHJlc291cmNlIG9mIHRoZSBnaXZlbiBTRVhQIG9iamVjdC4KKyAqLwordm9pZAorX2djcnlfc2V4cF9yZWxlYXNlKCBnY3J5X3NleHBfdCBzZXhwICkKK3sKKyAgaWYgKHNleHApCisgICAgeworICAgICAgaWYgKF9nY3J5X2lzX3NlY3VyZSAoc2V4cCkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFeHRyYSBwYXJhbm9pZCB3aXBpbmcuICovCisgICAgICAgICAgY29uc3QgYnl0ZSAqcCA9IHNleHAtPmQ7CisgICAgICAgICAgaW50IHR5cGU7CisKKyAgICAgICAgICB3aGlsZSAoICh0eXBlID0gKnApICE9IFNUX1NUT1AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNUX09QRU46CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNUX0NMT1NFOgorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTVF9EQVRBOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQVRBTEVOIG47CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSAoICZuLCBwLCBzaXplb2YgbiApOworICAgICAgICAgICAgICAgICAgICBwICs9IHNpemVvZiBuOworICAgICAgICAgICAgICAgICAgICBwICs9IG47CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIHdpcGVtZW1vcnkgKHNleHAtPmQsIHAgLSBzZXhwLT5kKTsKKyAgICAgICAgfQorICAgICAgeGZyZWUgKCBzZXhwICk7CisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBNYWtlIGEgcGFpciBmcm9tIGxpc3RzIGEgYW5kIGIsIGRvbid0IHVzZSBhIG9yIGIgbGF0ZXIgb24uCisgKiBTcGVjaWFsIGJlaGF2aW91cjogIElmIG9uZSBpcyBhIHNpbmdsZSBlbGVtZW50IGxpc3Qgd2UgcHV0IHRoZQorICogZWxlbWVudCBzdHJhaWdodCBpbnRvIHRoZSBuZXcgcGFpci4KKyAqLworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfY29ucyggY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3QgYiApCit7CisgICh2b2lkKWE7CisgICh2b2lkKWI7CisKKyAgLyogTllJOiBJbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgcXVpdGUgZWFzeSB3aXRoIG91ciBuZXcgZGF0YQorICAgICByZXByZXNlbnRhdGlvbiAqLworICBCVUcgKCk7CisgIHJldHVybiBOVUxMOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBNYWtlIGEgbGlzdCBmcm9tIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgdGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgbWFya2VkCisgKiB3aXRoIGEgTlVMTC4KKyAqLworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfYWxpc3QoIGNvbnN0IGdjcnlfc2V4cF90ICphcnJheSApCit7CisgICh2b2lkKWFycmF5OworCisgIC8qIE5ZSTogSW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHF1aXRlIGVhc3kgd2l0aCBvdXIgbmV3IGRhdGEKKyAgICAgcmVwcmVzZW50YXRpb24uICovCisgIEJVRyAoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBNYWtlIGEgbGlzdCBmcm9tIGFsbCBpdGVtcywgdGhlIGVuZCBvZiBsaXN0IGlzIGluZGljYXRlZCBieSBhIE5VTEwKKyAqLworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfdmxpc3QoIGNvbnN0IGdjcnlfc2V4cF90IGEsIC4uLiApCit7CisgICh2b2lkKWE7CisgIC8qIE5ZSTogSW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHF1aXRlIGVhc3kgd2l0aCBvdXIgbmV3IGRhdGEKKyAgICAgcmVwcmVzZW50YXRpb24uICovCisgIEJVRyAoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyoqKioqKioqKioqKioqKioKKyAqIEFwcGVuZCBuIHRvIHRoZSBsaXN0IGEKKyAqIFJldHVybnM6IGEgbmV3IGlzdCAod2hpY2ggbWF5YmUgYSkKKyAqLworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfYXBwZW5kKCBjb25zdCBnY3J5X3NleHBfdCBhLCBjb25zdCBnY3J5X3NleHBfdCBuICkKK3sKKyAgKHZvaWQpYTsKKyAgKHZvaWQpbjsKKyAgLyogTllJOiBJbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgcXVpdGUgZWFzeSB3aXRoIG91ciBuZXcgZGF0YQorICAgICByZXByZXNlbnRhdGlvbi4gKi8KKyAgQlVHICgpOworICByZXR1cm4gTlVMTDsKK30KKworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfcHJlcGVuZCggY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3QgbiApCit7CisgICh2b2lkKWE7CisgICh2b2lkKW47CisgIC8qIE5ZSTogSW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHF1aXRlIGVhc3kgd2l0aCBvdXIgbmV3IGRhdGEKKyAgICAgcmVwcmVzZW50YXRpb24uICovCisgIEJVRyAoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworCisvKioqKioqKioqKioqKioqKgorICogTG9jYXRlIHRva2VuIGluIGEgbGlzdC4gVGhlIHRva2VuIG11c3QgYmUgdGhlIGNhciBvZiBhIHN1Ymxpc3QuCisgKiBSZXR1cm5zOiBBIG5ldyBsaXN0IHdpdGggdGhpcyBzdWJsaXN0IG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitnY3J5X3NleHBfdAorX2djcnlfc2V4cF9maW5kX3Rva2VuKCBjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBjb25zdCBjaGFyICp0b2ssIHNpemVfdCB0b2tsZW4gKQoreworICBjb25zdCBieXRlICpwOworICBEQVRBTEVOIG47CisKKyAgaWYgKCAhbGlzdCApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCAhdG9rbGVuICkKKyAgICB0b2tsZW4gPSBzdHJsZW4odG9rKTsKKworICBwID0gbGlzdC0+ZDsKKyAgd2hpbGUgKCAqcCAhPSBTVF9TVE9QICkKKyAgICB7CisgICAgICBpZiAoICpwID09IFNUX09QRU4gJiYgcFsxXSA9PSBTVF9EQVRBICkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGJ5dGUgKmhlYWQgPSBwOworCisgICAgICAgICAgcCArPSAyOworICAgICAgICAgIG1lbWNweSAoICZuLCBwLCBzaXplb2YgbiApOworICAgICAgICAgIHAgKz0gc2l6ZW9mIG47CisgICAgICAgICAgaWYgKCBuID09IHRva2xlbiAmJiAhbWVtY21wKCBwLCB0b2ssIHRva2xlbiApICkKKyAgICAgICAgICAgIHsgLyogZm91bmQgaXQgKi8KKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgbmV3bGlzdDsKKyAgICAgICAgICAgICAgYnl0ZSAqZDsKKyAgICAgICAgICAgICAgaW50IGxldmVsID0gMTsKKworICAgICAgICAgICAgICAvKiBMb29rIGZvciB0aGUgZW5kIG9mIHRoZSBsaXN0LiAgKi8KKyAgICAgICAgICAgICAgZm9yICggcCArPSBuOyBsZXZlbDsgcCsrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoICpwID09IFNUX0RBVEEgKQorICAgICAgICAgICAgICAgICAgICB7CisJCQltZW1jcHkgKCAmbiwgKytwLCBzaXplb2YgbiApOworCQkJcCArPSBzaXplb2YgbiArIG47CisJCQlwLS07IC8qIENvbXBlbnNhdGUgZm9yIGxhdGVyIGluY3JlbWVudC4gKi8KKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAqcCA9PSBTVF9PUEVOICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGxldmVsKys7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICggKnAgPT0gU1RfQ0xPU0UgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwtLTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAqcCA9PSBTVF9TVE9QICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIEJVRyAoKTsKKwkJICAgIH0KKwkJfQorICAgICAgICAgICAgICBuID0gcCAtIGhlYWQ7CisKKyAgICAgICAgICAgICAgbmV3bGlzdCA9IHh0cnltYWxsb2MgKCBzaXplb2YgKm5ld2xpc3QgKyBuICk7CisgICAgICAgICAgICAgIGlmICghbmV3bGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBObyB3YXkgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUsIHNvIHdlIGNhbiBvbmx5CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90IEZvdW5kLiAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkID0gbmV3bGlzdC0+ZDsKKyAgICAgICAgICAgICAgbWVtY3B5ICggZCwgaGVhZCwgbiApOyBkICs9IG47CisgICAgICAgICAgICAgICpkKysgPSBTVF9TVE9QOworICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplICggbmV3bGlzdCApOworCSAgICB9CisgICAgICAgICAgcCArPSBuOworCX0KKyAgICAgIGVsc2UgaWYgKCAqcCA9PSBTVF9EQVRBICkKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweSAoICZuLCArK3AsIHNpemVvZiBuICk7IHAgKz0gc2l6ZW9mIG47CisgICAgICAgICAgcCArPSBuOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgcCsrOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gbGlzdAorICovCitpbnQKK19nY3J5X3NleHBfbGVuZ3RoIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KQoreworICBjb25zdCBieXRlICpwOworICBEQVRBTEVOIG47CisgIGludCB0eXBlOworICBpbnQgbGVuZ3RoID0gMDsKKyAgaW50IGxldmVsID0gMDsKKworICBpZiAoIWxpc3QpCisgICAgcmV0dXJuIDA7CisKKyAgcCA9IGxpc3QtPmQ7CisgIHdoaWxlICgodHlwZT0qcCkgIT0gU1RfU1RPUCkKKyAgICB7CisgICAgICBwKys7CisgICAgICBpZiAodHlwZSA9PSBTVF9EQVRBKQorICAgICAgICB7CisgICAgICAgICAgbWVtY3B5ICgmbiwgcCwgc2l6ZW9mIG4pOworICAgICAgICAgIHAgKz0gc2l6ZW9mIG4gKyBuOworICAgICAgICAgIGlmIChsZXZlbCA9PSAxKQorICAgICAgICAgICAgbGVuZ3RoKys7CisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBTVF9PUEVOKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGxldmVsID09IDEpCisgICAgICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgICBsZXZlbCsrOworCX0KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gU1RfQ0xPU0UpCisgICAgICAgIHsKKyAgICAgICAgICBsZXZlbC0tOworCX0KKyAgICB9CisgIHJldHVybiBsZW5ndGg7Cit9CisKKworLyogUmV0dXJuIHRoZSBpbnRlcm5hbCBsZW5ndGhzIG9mZnNldCBvZiBMSVNULiAgVGhhdCBpcyB0aGUgc2l6ZSBvZgorICAgdGhlIGJ1ZmZlciBmcm9tIHRoZSBmaXJzdCBTVF9PUEVOLCB3aGljaCBpcyByZXR1cm5lZCBhdCBSX09GRiwgdG8KKyAgIHRoZSBjb3JyZXNwb25kaW5nIFNUX0NMT1NFIGluY2x1c2l2ZS4gICovCitzdGF0aWMgc2l6ZV90CitnZXRfaW50ZXJuYWxfYnVmZmVyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBzaXplX3QgKnJfb2ZmKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICBEQVRBTEVOIG47CisgIGludCB0eXBlOworICBpbnQgbGV2ZWwgPSAwOworCisgICpyX29mZiA9IDA7CisgIGlmIChsaXN0KQorICAgIHsKKyAgICAgIHAgPSBsaXN0LT5kOworICAgICAgd2hpbGUgKCAodHlwZT0qcCkgIT0gU1RfU1RPUCApCisgICAgICAgIHsKKyAgICAgICAgICBwKys7CisgICAgICAgICAgaWYgKHR5cGUgPT0gU1RfREFUQSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWVtY3B5ICgmbiwgcCwgc2l6ZW9mIG4pOworICAgICAgICAgICAgICBwICs9IHNpemVvZiBuICsgbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFNUX09QRU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghbGV2ZWwpCisgICAgICAgICAgICAgICAgKnJfb2ZmID0gKHAtMSkgLSBsaXN0LT5kOworICAgICAgICAgICAgICBsZXZlbCsrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCB0eXBlID09IFNUX0NMT1NFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbGV2ZWwtLTsKKyAgICAgICAgICAgICAgaWYgKCFsZXZlbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcCAtIGxpc3QtPmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiAwOyAvKiBOb3QgYSBwcm9wZXIgbGlzdC4gICovCit9CisKKworCisvKiBFeHRyYWN0IHRoZSBuLXRoIGVsZW1lbnQgb2YgdGhlIGdpdmVuIExJU1QuICBSZXR1cm5zIE5VTEwgZm9yCisgICBuby1zdWNoLWVsZW1lbnQsIGEgY29ycnVwdCBsaXN0LCBvciBtZW1vcnkgZmFpbHVyZS4gICovCitnY3J5X3NleHBfdAorX2djcnlfc2V4cF9udGggKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIpCit7CisgIGNvbnN0IGJ5dGUgKnA7CisgIERBVEFMRU4gbjsKKyAgZ2NyeV9zZXhwX3QgbmV3bGlzdDsKKyAgYnl0ZSAqZDsKKyAgaW50IGxldmVsID0gMDsKKworICBpZiAoIWxpc3QgfHwgbGlzdC0+ZFswXSAhPSBTVF9PUEVOKQorICAgIHJldHVybiBOVUxMOworICBwID0gbGlzdC0+ZDsKKworICB3aGlsZSAobnVtYmVyID4gMCkKKyAgICB7CisgICAgICBwKys7CisgICAgICBpZiAoKnAgPT0gU1RfREFUQSkKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweSAoJm4sICsrcCwgc2l6ZW9mIG4pOworICAgICAgICAgIHAgKz0gc2l6ZW9mIG4gKyBuOworICAgICAgICAgIHAtLTsKKyAgICAgICAgICBpZiAoIWxldmVsKQorICAgICAgICAgICAgbnVtYmVyLS07CisJfQorICAgICAgZWxzZSBpZiAoKnAgPT0gU1RfT1BFTikKKyAgICAgICAgeworICAgICAgICAgIGxldmVsKys7CisJfQorICAgICAgZWxzZSBpZiAoKnAgPT0gU1RfQ0xPU0UpCisgICAgICAgIHsKKyAgICAgICAgICBsZXZlbC0tOworICAgICAgICAgIGlmICggIWxldmVsICkKKyAgICAgICAgICAgIG51bWJlci0tOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09IFNUX1NUT1ApCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBwKys7CisKKyAgaWYgKCpwID09IFNUX0RBVEEpCisgICAgeworICAgICAgbWVtY3B5ICgmbiwgcCsxLCBzaXplb2Ygbik7CisgICAgICBuZXdsaXN0ID0geHRyeW1hbGxvYyAoc2l6ZW9mICpuZXdsaXN0ICsgMSArIDEgKyBzaXplb2YgbiArIG4gKyAxKTsKKyAgICAgIGlmICghbmV3bGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBkID0gbmV3bGlzdC0+ZDsKKyAgICAgICpkKysgPSBTVF9PUEVOOworICAgICAgbWVtY3B5IChkLCBwLCAxICsgc2l6ZW9mIG4gKyBuKTsKKyAgICAgIGQgKz0gMSArIHNpemVvZiBuICsgbjsKKyAgICAgICpkKysgPSBTVF9DTE9TRTsKKyAgICAgICpkID0gU1RfU1RPUDsKKyAgICB9CisgIGVsc2UgaWYgKCpwID09IFNUX09QRU4pCisgICAgeworICAgICAgY29uc3QgYnl0ZSAqaGVhZCA9IHA7CisKKyAgICAgIGxldmVsID0gMTsKKyAgICAgIGRvIHsKKyAgICAgICAgcCsrOworICAgICAgICBpZiAoKnAgPT0gU1RfREFUQSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkgKCZuLCArK3AsIHNpemVvZiBuKTsKKyAgICAgICAgICAgIHAgKz0gc2l6ZW9mIG4gKyBuOworICAgICAgICAgICAgcC0tOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnAgPT0gU1RfT1BFTikKKyAgICAgICAgICB7CisgICAgICAgICAgICBsZXZlbCsrOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnAgPT0gU1RfQ0xPU0UpCisgICAgICAgICAgeworICAgICAgICAgICAgbGV2ZWwtLTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCpwID09IFNUX1NUT1ApCisgICAgICAgICAgeworICAgICAgICAgICAgQlVHICgpOworICAgICAgICAgIH0KKyAgICAgIH0gd2hpbGUgKGxldmVsKTsKKyAgICAgIG4gPSBwICsgMSAtIGhlYWQ7CisKKyAgICAgIG5ld2xpc3QgPSB4dHJ5bWFsbG9jIChzaXplb2YgKm5ld2xpc3QgKyBuKTsKKyAgICAgIGlmICghbmV3bGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBkID0gbmV3bGlzdC0+ZDsKKyAgICAgIG1lbWNweSAoZCwgaGVhZCwgbik7CisgICAgICBkICs9IG47CisgICAgICAqZCsrID0gU1RfU1RPUDsKKyAgICB9CisgIGVsc2UKKyAgICBuZXdsaXN0ID0gTlVMTDsKKworICByZXR1cm4gbm9ybWFsaXplIChuZXdsaXN0KTsKK30KKworCitnY3J5X3NleHBfdAorX2djcnlfc2V4cF9jYXIgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QpCit7CisgIHJldHVybiBfZ2NyeV9zZXhwX250aCAobGlzdCwgMCk7Cit9CisKKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZyb20gdGhlIGNhci4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB2YWxpZCBhcworICAgbG9uZyBhcyB0aGUgbGlzdCBpcyBub3QgbW9kaWZpZWQuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitkb19zZXhwX250aF9kYXRhIChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyLCBzaXplX3QgKmRhdGFsZW4pCit7CisgIGNvbnN0IGJ5dGUgKnA7CisgIERBVEFMRU4gbjsKKyAgaW50IGxldmVsID0gMDsKKworICAqZGF0YWxlbiA9IDA7CisgIGlmICggIWxpc3QgKQorICAgIHJldHVybiBOVUxMOworCisgIHAgPSBsaXN0LT5kOworICBpZiAoICpwID09IFNUX09QRU4gKQorICAgIHArKzsJICAgICAvKiBZZXAsIGEgbGlzdC4gKi8KKyAgZWxzZSBpZiAobnVtYmVyKQorICAgIHJldHVybiBOVUxMOyAgICAgLyogTm90IGEgbGlzdCBidXQgTiA+IDAgcmVxdWVzdGVkLiAqLworCisgIC8qIFNraXAgb3ZlciBOIGVsZW1lbnRzLiAqLworICB3aGlsZSAobnVtYmVyID4gMCkKKyAgICB7CisgICAgICBpZiAoKnAgPT0gU1RfREFUQSkKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweSAoICZuLCArK3AsIHNpemVvZiBuICk7CisgICAgICAgICAgcCArPSBzaXplb2YgbiArIG47CisgICAgICAgICAgcC0tOworICAgICAgICAgIGlmICggIWxldmVsICkKKyAgICAgICAgICAgIG51bWJlci0tOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09IFNUX09QRU4pCisgICAgICAgIHsKKyAgICAgICAgICBsZXZlbCsrOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09IFNUX0NMT1NFKQorICAgICAgICB7CisgICAgICAgICAgbGV2ZWwtLTsKKyAgICAgICAgICBpZiAoICFsZXZlbCApCisgICAgICAgICAgICBudW1iZXItLTsKKwl9CisgICAgICBlbHNlIGlmICgqcCA9PSBTVF9TVE9QKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgcCsrOworICAgIH0KKworICAvKiBJZiB0aGlzIGlzIGRhdGEsIHJldHVybiBpdC4gICovCisgIGlmICgqcCA9PSBTVF9EQVRBKQorICAgIHsKKyAgICAgIG1lbWNweSAoICZuLCArK3AsIHNpemVvZiBuICk7CisgICAgICAqZGF0YWxlbiA9IG47CisgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKXAgKyBzaXplb2YgbjsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogR2V0IGRhdGEgZnJvbSB0aGUgY2FyLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzIHZhbGlkIGFzIGxvbmcgYXMgdGhlCisgICBsaXN0IGlzIG5vdCBtb2RpZmllZC4gICovCitjb25zdCBjaGFyICoKK19nY3J5X3NleHBfbnRoX2RhdGEgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsIHNpemVfdCAqZGF0YWxlbiApCit7CisgIHJldHVybiBkb19zZXhwX250aF9kYXRhIChsaXN0LCBudW1iZXIsIGRhdGFsZW4pOworfQorCisKKy8qIEdldCB0aGUgbnRoIGVsZW1lbnQgb2YgYSBsaXN0IHdoaWNoIG5lZWRzIHRvIGJlIGEgc2ltcGxlIG9iamVjdC4KKyAgIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIG1hbGxvY2VkIGJ1ZmZlciBhbmQgbmVlZHMgdG8gYmUgZnJlZWQgYnkKKyAgIHRoZSBjYWxsZXIuICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBnY3J5X3NleHBfbnRoX2RhdGEgYnV0CisgICB3aXRoIGFuIGFsbG9jYXRlZCByZXN1bHQuICovCit2b2lkICoKK19nY3J5X3NleHBfbnRoX2J1ZmZlciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwgc2l6ZV90ICpybGVuZ3RoKQoreworICBjb25zdCBjaGFyICpzOworICBzaXplX3QgbjsKKyAgY2hhciAqYnVmOworCisgICpybGVuZ3RoID0gMDsKKyAgcyA9IGRvX3NleHBfbnRoX2RhdGEgKGxpc3QsIG51bWJlciwgJm4pOworICBpZiAoIXMgfHwgIW4pCisgICAgcmV0dXJuIE5VTEw7CisgIGJ1ZiA9IHh0cnltYWxsb2MgKG4pOworICBpZiAoIWJ1ZikKKyAgICByZXR1cm4gTlVMTDsKKyAgbWVtY3B5IChidWYsIHMsIG4pOworICAqcmxlbmd0aCA9IG47CisgIHJldHVybiBidWY7Cit9CisKKworLyogR2V0IGEgc3RyaW5nIGZyb20gdGhlIGNhci4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIG1hbGxvY2VkIHN0cmluZworICAgYW5kIG5lZWRzIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworY2hhciAqCitfZ2NyeV9zZXhwX250aF9zdHJpbmcgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIpCit7CisgIGNvbnN0IGNoYXIgKnM7CisgIHNpemVfdCBuOworICBjaGFyICpidWY7CisKKyAgcyA9IGRvX3NleHBfbnRoX2RhdGEgKGxpc3QsIG51bWJlciwgJm4pOworICBpZiAoIXMgfHwgbiA8IDEgfHwgKG4rMSkgPCAxKQorICAgIHJldHVybiBOVUxMOworICBidWYgPSB4dHJ5bWFsbG9jIChuKzEpOworICBpZiAoIWJ1ZikKKyAgICByZXR1cm4gTlVMTDsKKyAgbWVtY3B5IChidWYsIHMsIG4pOworICBidWZbbl0gPSAwOworICByZXR1cm4gYnVmOworfQorCisKKy8qCisgKiBHZXQgYSBNUEkgZnJvbSB0aGUgY2FyCisgKi8KK2djcnlfbXBpX3QKK19nY3J5X3NleHBfbnRoX21waSAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlciwgaW50IG1waWZtdCkKK3sKKyAgc2l6ZV90IG47CisgIGdjcnlfbXBpX3QgYTsKKworICBpZiAobXBpZm10ID09IEdDUllNUElfRk1UX09QQVFVRSkKKyAgICB7CisgICAgICBjaGFyICpwOworCisgICAgICBwID0gX2djcnlfc2V4cF9udGhfYnVmZmVyIChsaXN0LCBudW1iZXIsICZuKTsKKyAgICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgIGEgPSBfZ2NyeV9pc19zZWN1cmUgKGxpc3QpPyBfZ2NyeV9tcGlfc25ldyAoMCkgOiBfZ2NyeV9tcGlfbmV3ICgwKTsKKyAgICAgIGlmIChhKQorICAgICAgICBtcGlfc2V0X29wYXF1ZSAoYSwgcCwgbio4KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeGZyZWUgKHApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnM7CisKKyAgICAgIGlmICghbXBpZm10KQorICAgICAgICBtcGlmbXQgPSBHQ1JZTVBJX0ZNVF9TVEQ7CisKKyAgICAgIHMgPSBkb19zZXhwX250aF9kYXRhIChsaXN0LCBudW1iZXIsICZuKTsKKyAgICAgIGlmICghcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgIGlmIChfZ2NyeV9tcGlfc2NhbiAoJmEsIG1waWZtdCwgcywgbiwgTlVMTCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gYTsKK30KKworCisvKioqKioqKioqKioqKioqKgorICogR2V0IHRoZSBDRFIKKyAqLworZ2NyeV9zZXhwX3QKK19nY3J5X3NleHBfY2RyKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QpCit7CisgIGNvbnN0IGJ5dGUgKnA7CisgIGNvbnN0IGJ5dGUgKmhlYWQ7CisgIERBVEFMRU4gbjsKKyAgZ2NyeV9zZXhwX3QgbmV3bGlzdDsKKyAgYnl0ZSAqZDsKKyAgaW50IGxldmVsID0gMDsKKyAgaW50IHNraXAgPSAxOworCisgIGlmICghbGlzdCB8fCBsaXN0LT5kWzBdICE9IFNUX09QRU4pCisgICAgcmV0dXJuIE5VTEw7CisgIHAgPSBsaXN0LT5kOworCisgIHdoaWxlIChza2lwID4gMCkKKyAgICB7CisgICAgICBwKys7CisgICAgICBpZiAoKnAgPT0gU1RfREFUQSkKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweSAoICZuLCArK3AsIHNpemVvZiBuICk7CisgICAgICAgICAgcCArPSBzaXplb2YgbiArIG47CisgICAgICAgICAgcC0tOworICAgICAgICAgIGlmICggIWxldmVsICkKKyAgICAgICAgICAgIHNraXAtLTsKKwl9CisgICAgICBlbHNlIGlmICgqcCA9PSBTVF9PUEVOKQorICAgICAgICB7CisgICAgICAgICAgbGV2ZWwrKzsKKwl9CisgICAgICBlbHNlIGlmICgqcCA9PSBTVF9DTE9TRSkKKyAgICAgICAgeworICAgICAgICAgIGxldmVsLS07CisgICAgICAgICAgaWYgKCAhbGV2ZWwgKQorICAgICAgICAgICAgc2tpcC0tOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09IFNUX1NUT1ApCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBwKys7CisKKyAgaGVhZCA9IHA7CisgIGxldmVsID0gMDsKKyAgZG8geworICAgIGlmICgqcCA9PSBTVF9EQVRBKQorICAgICAgeworICAgICAgICBtZW1jcHkgKCAmbiwgKytwLCBzaXplb2YgbiApOworICAgICAgICBwICs9IHNpemVvZiBuICsgbjsKKyAgICAgICAgcC0tOworICAgICAgfQorICAgIGVsc2UgaWYgKCpwID09IFNUX09QRU4pCisgICAgICB7CisgICAgICAgIGxldmVsKys7CisgICAgICB9CisgICAgZWxzZSBpZiAoKnAgPT0gU1RfQ0xPU0UpCisgICAgICB7CisgICAgICAgIGxldmVsLS07CisgICAgICB9CisgICAgZWxzZSBpZiAoKnAgPT0gU1RfU1RPUCkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgcCsrOworICB9IHdoaWxlIChsZXZlbCk7CisgIG4gPSBwIC0gaGVhZDsKKworICBuZXdsaXN0ID0geHRyeW1hbGxvYyAoc2l6ZW9mICpuZXdsaXN0ICsgbiArIDIpOworICBpZiAoIW5ld2xpc3QpCisgICAgcmV0dXJuIE5VTEw7CisgIGQgPSBuZXdsaXN0LT5kOworICAqZCsrID0gU1RfT1BFTjsKKyAgbWVtY3B5IChkLCBoZWFkLCBuKTsKKyAgZCArPSBuOworICAqZCsrID0gU1RfQ0xPU0U7CisgICpkKysgPSBTVF9TVE9QOworCisgIHJldHVybiBub3JtYWxpemUgKG5ld2xpc3QpOworfQorCisKK2djcnlfc2V4cF90CitfZ2NyeV9zZXhwX2NhZHIgKCBjb25zdCBnY3J5X3NleHBfdCBsaXN0ICkKK3sKKyAgZ2NyeV9zZXhwX3QgYSwgYjsKKworICBhID0gX2djcnlfc2V4cF9jZHIgKGxpc3QpOworICBiID0gX2djcnlfc2V4cF9jYXIgKGEpOworICBzZXhwX3JlbGVhc2UgKGEpOworICByZXR1cm4gYjsKK30KKworCitzdGF0aWMgR1BHX0VSUl9JTkxJTkUgaW50CitoZXh0b25pYmJsZSAoaW50IHMpCit7CisgIGlmIChzID49ICcwJyAmJiBzIDw9ICc5JykKKyAgICByZXR1cm4gcyAtICcwJzsKKyAgZWxzZSBpZiAocyA+PSAnQScgJiYgcyA8PSAnRicpCisgICAgcmV0dXJuIDEwICsgcyAtICdBJzsKKyAgZWxzZSBpZiAocyA+PSAnYScgJiYgcyA8PSAnZicpCisgICAgcmV0dXJuIDEwICsgcyAtICdhJzsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisKK3N0cnVjdCBtYWtlX3NwYWNlX2N0eAoreworICBnY3J5X3NleHBfdCBzZXhwOworICBzaXplX3QgYWxsb2NhdGVkOworICBieXRlICpwb3M7Cit9OworCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorbWFrZV9zcGFjZSAoIHN0cnVjdCBtYWtlX3NwYWNlX2N0eCAqYywgc2l6ZV90IG4gKQoreworICBzaXplX3QgdXNlZCA9IGMtPnBvcyAtIGMtPnNleHAtPmQ7CisKKyAgaWYgKCB1c2VkICsgbiArIHNpemVvZihEQVRBTEVOKSArIDEgPj0gYy0+YWxsb2NhdGVkICkKKyAgICB7CisgICAgICBnY3J5X3NleHBfdCBuZXdzZXhwOworICAgICAgYnl0ZSAqbmV3aGVhZDsKKyAgICAgIHNpemVfdCBuZXdzaXplOworCisgICAgICBuZXdzaXplID0gYy0+YWxsb2NhdGVkICsgMioobitzaXplb2YoREFUQUxFTikrMSk7CisgICAgICBpZiAobmV3c2l6ZSA8PSBjLT5hbGxvY2F0ZWQpCisgICAgICAgIHJldHVybiBHUEdfRVJSX1RPT19MQVJHRTsKKyAgICAgIG5ld3NleHAgPSB4dHJ5cmVhbGxvYyAoIGMtPnNleHAsIHNpemVvZiAqbmV3c2V4cCArIG5ld3NpemUgLSAxKTsKKyAgICAgIGlmICghbmV3c2V4cCkKKyAgICAgICAgcmV0dXJuIGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICBjLT5hbGxvY2F0ZWQgPSBuZXdzaXplOworICAgICAgbmV3aGVhZCA9IG5ld3NleHAtPmQ7CisgICAgICBjLT5wb3MgPSBuZXdoZWFkICsgdXNlZDsKKyAgICAgIGMtPnNleHAgPSBuZXdzZXhwOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworLyogVW5xdW90ZSBTVFJJTkcgb2YgTEVOR1RIIGFuZCBzdG9yZSBpdCBpbnRvIEJVRi4gIFRoZSBzdXJyb3VuZGluZworICAgcXVvdGVzIGFyZSBtdXN0IGFscmVhZHkgYmUgcmVtb3ZlZCBmcm9tIFNUUklORy4gIFdlIGFzc3VtZSB0aGF0IHRoZQorICAgcXVvdGVkIHN0cmluZyBpcyBzeW50YWNpbGxheSBjb3JyZWN0LiAgKi8KK3N0YXRpYyBzaXplX3QKK3VucXVvdGVfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgaW50IGVzYyA9IDA7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopc3RyaW5nOworICB1bnNpZ25lZCBjaGFyICpkID0gYnVmOworICBzaXplX3QgbiA9IGxlbmd0aDsKKworICBmb3IgKDsgbjsgbi0tLCBzKyspCisgICAgeworICAgICAgaWYgKGVzYykKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoKnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdiJzogICpkKysgPSAnXGInOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOiAgKmQrKyA9ICdcdCc7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAndic6ICAqZCsrID0gJ1x2JzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICduJzogICpkKysgPSAnXG4nOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOiAgKmQrKyA9ICdcZic7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAncic6ICAqZCsrID0gJ1xyJzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICciJzogICpkKysgPSAnXCInOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1wnJzogKmQrKyA9ICdcJyc7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXFwnOiAqZCsrID0gJ1xcJzsgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1xyJzogIC8qIGlnbm9yZSBDUlssTEZdICovCisgICAgICAgICAgICAgIGlmIChuPjEgJiYgc1sxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHMrKzsgbi0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1xuJzogIC8qIGlnbm9yZSBMRlssQ1JdICovCisgICAgICAgICAgICAgIGlmIChuPjEgJiYgc1sxXSA9PSAnXHInKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHMrKzsgbi0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3gnOiAvKiBoZXggdmFsdWUgKi8KKyAgICAgICAgICAgICAgaWYgKG4+MiAmJiBoZXhkaWdpdHAgKHMrMSkgJiYgaGV4ZGlnaXRwIChzKzIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHMrKzsgbi0tOworICAgICAgICAgICAgICAgICAgKmQrKyA9IHh0b2lfMiAocyk7CisgICAgICAgICAgICAgICAgICBzKys7IG4tLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBpZiAobj4yICYmIG9jdGRpZ2l0cCAocykgJiYgb2N0ZGlnaXRwIChzKzEpICYmIG9jdGRpZ2l0cCAocysyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqZCsrID0gKGF0b2lfMSAocykqNjQpICsgKGF0b2lfMSAocysxKSo4KSArIGF0b2lfMSAocysyKTsKKyAgICAgICAgICAgICAgICAgIHMgKz0gMjsKKyAgICAgICAgICAgICAgICAgIG4gLT0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworCSAgICB9CisgICAgICAgICAgZXNjID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiggKnMgPT0gJ1xcJyApCisgICAgICAgIGVzYyA9IDE7CisgICAgICBlbHNlCisgICAgICAgICpkKysgPSAqczsKKyAgICB9CisKKyAgcmV0dXJuIGQgLSBidWY7Cit9CisKKy8qKioqKioqKioqKioqKioqCisgKiBTY2FuIHRoZSBwcm92aWRlZCBidWZmZXIgYW5kIHJldHVybiB0aGUgUyBleHByZXNzaW9uIGluIG91ciBpbnRlcm5hbAorICogZm9ybWF0LiAgUmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBleHByZXNzaW9uLiAgSWYgZXJyb2ZmIGlzIG5vdCBOVUxMIGFuZAorICogYSBwYXJzaW5nIGVycm9yIGhhcyBvY2N1cnJlZCwgdGhlIG9mZnNldCBpbnRvIGJ1ZmZlciB3aWxsIGJlIHJldHVybmVkLgorICogSWYgQVJHRkxBRyBpcyB0cnVlLCB0aGUgZnVuY3Rpb24gc3VwcG9ydHMgc29tZSBwcmludGYgbGlrZQorICogZXhwcmVzc2lvbnMuCisgKiAgVGhlc2UgYXJlOgorICoJJW0gLSBNUEkKKyAqCSVzIC0gc3RyaW5nIChubyBhdXRvc3dpdGNoIHRvIHNlY3VyZSBhbGxvY2F0aW9uKQorICoJJWQgLSBpbnRlZ2VyIHN0b3JlZCBhcyBzdHJpbmcgKG5vIGF1dG9zd2l0Y2ggdG8gc2VjdXJlIGFsbG9jYXRpb24pCisgKiAgICAgICViIC0gbWVtb3J5IGJ1ZmZlcjsgdGhpcyB0YWtlcyBfdHdvXyBhcmd1bWVudHM6IGFuIGludGVnZXIgd2l0aCB0aGUKKyAqICAgICAgICAgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBhbmQgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiAgICAgICVTIC0gQ29weSBhbiBnY3J5X3NleHBfdCBoZXJlLiAgVGhlIFMtZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhCisgKiAgICAgICAgICAgcmVndWxhciBvbmUsIHN0YXJ0aW5nIHdpdGggYSBwYXJlbnRoZXNpcy4KKyAqICAgICAgICAgICAobm8gYXV0b3N3aXRjaCB0byBzZWN1cmUgYWxsb2NhdGlvbikKKyAqICBhbGwgb3RoZXIgZm9ybWF0IGVsZW1lbnRzIGFyZSBjdXJyZW50bHkgbm90IGRlZmluZWQgYW5kIHJldHVybiBhbiBlcnJvci4KKyAqICB0aGlzIGluY2x1ZGVzIHRoZSAiJSUiIHNlcXVlbmNlIGJlY2F1Y2UgdGhlIHBlcmNlbnQgc2lnbiBpcyBub3QgYW4KKyAqICBhbGxvd2VkIGNoYXJhY3Rlci4KKyAqIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzdG9yZSB0aGUgc2VjdXJlLU1QSXMgbm90IGluIHRoZSBzdHJpbmcKKyAqIGJ1dCBhcyByZWZlcmVuY2UgdG8gc29tZXdoZXJlIC0gdGhpcyBjYW4gaGVscCB1cyB0byBzYXZlIGh1Z2UgYW1vdW50cworICogb2Ygc2VjdXJlIG1lbW9yeS4gIFRoZSBwcm9ibGVtIGlzLCB0aGF0IGlmIG9ubHkgb25lIGVsZW1lbnQgaXMgc2VjdXJlLCBhbGwKKyAqIG90aGVyIGVsZW1lbnRzIGFyZSBhdXRvbWFnaWNhbHkgY29waWVkIHRvIHNlY3VyZSBtZW1vcnkgdG9vLCBzbyB0aGUgbW9zdAorICogY29tbW9uIG9wZXJhdGlvbiBnY3J5X3NleHBfY2RyX21waSgpIHdpbGwgYWx3YXlzIHJldHVybiBhIHNlY3VyZSBNUEkKKyAqIHJlZ2FyZGxlc3Mgd2hldGhlciBpdCBpcyBuZWVkZWQgb3Igbm90LgorICovCitzdGF0aWMgZ3BnX2Vycl9jb2RlX3QKK2RvX3ZzZXhwX3NzY2FuIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgYXJnZmxhZywKKyAgICAgICAgICAgICAgICB2b2lkICoqYXJnX2xpc3QsIHZhX2xpc3QgYXJnX3B0cikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IGVyciA9IDA7CisgIHN0YXRpYyBjb25zdCBjaGFyIHRva2VuY2hhcnNbXSA9CisgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAiMDEyMzQ1Njc4OS0uL186Kis9IjsKKyAgY29uc3QgY2hhciAqcDsKKyAgc2l6ZV90IG47CisgIGNvbnN0IGNoYXIgKmRpZ3B0ciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnF1b3RlZCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnRva2VucCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmhleGZtdCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmJhc2U2NCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmRpc3BoaW50ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqcGVyY2VudCA9IE5VTEw7CisgIGludCBoZXhjb3VudCA9IDA7CisgIGludCBxdW90ZWRfZXNjID0gMDsKKyAgaW50IGRhdGFsZW4gPSAwOworICBzaXplX3QgZHVtbXlfZXJyb2ZmOworICBzdHJ1Y3QgbWFrZV9zcGFjZV9jdHggYzsKKyAgaW50IGFyZ19jb3VudGVyID0gMDsKKyAgaW50IGxldmVsID0gMDsKKworICBpZiAoIWVycm9mZikKKyAgICBlcnJvZmYgPSAmZHVtbXlfZXJyb2ZmOworCisgIC8qIERlcGVuZGluZyBvbiB3aGV0aGVyIEFSR19MSVNUIGlzIG5vbi16ZXJvIG9yIG5vdCwgdGhpcyBtYWNybyBnaXZlcworICAgICB1cyB0aGUgbmV4dCBhcmd1bWVudCwgZWl0aGVyIGZyb20gdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QgYXMKKyAgICAgc3BlY2lmaWVkIGJ5IEFSR19QVFIgb3IgZnJvbSB0aGUgYXJndW1lbnQgYXJyYXkgQVJHX0xJU1QuICAqLworI2RlZmluZSBBUkdfTkVYVChzdG9yYWdlLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKCFhcmdfbGlzdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0b3JhZ2UgPSB2YV9hcmcgKGFyZ19wdHIsIHR5cGUpOyAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc3RvcmFnZSA9ICooKHR5cGUgKikgKGFyZ19saXN0W2FyZ19jb3VudGVyKytdKSk7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUgKDApCisKKyAgLyogVGhlIE1BS0VfU1BBQ0UgbWFjcm8gaXMgdXNlZCBiZWZvcmUgZWFjaCBzdG9yZSBvcGVyYXRpb24gdG8KKyAgICAgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guICBJdCByZXF1aXJlcyBhIGdsb2JhbAorICAgICBjb250ZXh0IG5hbWVkIEMgYW5kIGp1bXBzIG91dCB0byB0aGUgbGFiZWwgTEVBVkUgb24gZXJyb3IhIEl0CisgICAgIGFsc28gc2V0cyBFUlJPRkYgdXNpbmcgdGhlIHZhcmlhYmxlcyBCVUZGRVIgYW5kIFAuICAqLworI2RlZmluZSBNQUtFX1NQQUNFKG4pICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZ19lcnJfY29kZV90IF9tc19lcnIgPSBtYWtlX3NwYWNlICgmYywgKG4pKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNfZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBfbXNfZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxlYXZlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQorCisgIC8qIFRoZSBTVE9SRV9MRU4gbWFjcm8gaXMgdXNlZCB0byBzdG9yZSB0aGUgbGVuZ3RoIE4gYXQgYnVmZmVyIFAuICovCisjZGVmaW5lIFNUT1JFX0xFTihwLG4pIGRvIHsJCQkJCQkgICBcCisJCQkgICAgREFUQUxFTiBhc2hvcnQgPSAobik7CQkJICAgXAorCQkJICAgIG1lbWNweSAoIChwKSwgJmFzaG9ydCwgc2l6ZW9mKGFzaG9ydCkgKTsJICAgXAorCQkJICAgIChwKSArPSBzaXplb2YgKGFzaG9ydCk7CQkJICAgXAorCQkJfSB3aGlsZSAoMCkKKworICAvKiBXZSBhc3N1bWUgdGhhdCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdGFrZXMgbGVzcyBtZW1vcnkgdGhhbgorICAgICB0aGUgcHJvdmlkZWQgb25lLiAgSG93ZXZlciwgd2UgYWRkIHNwYWNlIGZvciBvbmUgZXh0cmEgZGF0YWxlbiBzbworICAgICB0aGF0IHRoZSBjb2RlIHdoaWNoIGRvZXMgdGhlIFNUX0NMT1NFIGNhbiB1c2UgTUFLRV9TUEFDRSAqLworICBjLmFsbG9jYXRlZCA9IGxlbmd0aCArIHNpemVvZihEQVRBTEVOKTsKKyAgaWYgKGJ1ZmZlciAmJiBsZW5ndGggJiYgX2djcnlfaXNfc2VjdXJlIChidWZmZXIpKQorICAgIGMuc2V4cCA9IHh0cnltYWxsb2Nfc2VjdXJlIChzaXplb2YgKmMuc2V4cCArIGMuYWxsb2NhdGVkIC0gMSk7CisgIGVsc2UKKyAgICBjLnNleHAgPSB4dHJ5bWFsbG9jIChzaXplb2YgKmMuc2V4cCArIGMuYWxsb2NhdGVkIC0gMSk7CisgIGlmICghYy5zZXhwKQorICAgIHsKKyAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICAqZXJyb2ZmID0gMDsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBjLnBvcyA9IGMuc2V4cC0+ZDsKKworICBmb3IgKHAgPSBidWZmZXIsIG4gPSBsZW5ndGg7IG47IHArKywgbi0tKQorICAgIHsKKyAgICAgIGlmICh0b2tlbnAgJiYgIWhleGZtdCkKKwl7CisJICBpZiAoc3RyY2hyICh0b2tlbmNoYXJzLCAqcCkpCisJICAgIGNvbnRpbnVlOworCSAgZWxzZQorCSAgICB7CisJICAgICAgZGF0YWxlbiA9IHAgLSB0b2tlbnA7CisJICAgICAgTUFLRV9TUEFDRSAoZGF0YWxlbik7CisJICAgICAgKmMucG9zKysgPSBTVF9EQVRBOworCSAgICAgIFNUT1JFX0xFTiAoYy5wb3MsIGRhdGFsZW4pOworCSAgICAgIG1lbWNweSAoYy5wb3MsIHRva2VucCwgZGF0YWxlbik7CisJICAgICAgYy5wb3MgKz0gZGF0YWxlbjsKKwkgICAgICB0b2tlbnAgPSBOVUxMOworCSAgICB9CisJfQorCisgICAgICBpZiAocXVvdGVkKQorCXsKKwkgIGlmIChxdW90ZWRfZXNjKQorCSAgICB7CisJICAgICAgc3dpdGNoICgqcCkKKwkJeworCQljYXNlICdiJzogY2FzZSAndCc6IGNhc2UgJ3YnOiBjYXNlICduJzogY2FzZSAnZic6CisJCWNhc2UgJ3InOiBjYXNlICciJzogY2FzZSAnXCcnOiBjYXNlICdcXCc6CisJCSAgcXVvdGVkX2VzYyA9IDA7CisJCSAgYnJlYWs7CisKKwkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkgIGlmICghKChuID4gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChwWzFdID49ICcwJykgJiYgKHBbMV0gPD0gJzcnKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBbMl0gPj0gJzAnKSAmJiAocFsyXSA8PSAnNycpKSkKKwkJICAgIHsKKwkJICAgICAgKmVycm9mZiA9IHAgLSBidWZmZXI7CisJCSAgICAgIC8qIEludmFsaWQgb2N0YWwgdmFsdWUuICAqLworCQkgICAgICBlcnIgPSBHUEdfRVJSX1NFWFBfQkFEX1FVT1RBVElPTjsKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxlYXZlOworCQkgICAgfQorCQkgIHAgKz0gMjsKKwkJICBuIC09IDI7CisJCSAgcXVvdGVkX2VzYyA9IDA7CisJCSAgYnJlYWs7CisKKwkJY2FzZSAneCc6CisJCSAgaWYgKCEoKG4gPiAyKSAmJiBoZXhkaWdpdHAgKHArMSkgJiYgaGV4ZGlnaXRwIChwKzIpKSkKKwkJICAgIHsKKwkJICAgICAgKmVycm9mZiA9IHAgLSBidWZmZXI7CisJCSAgICAgIC8qIEludmFsaWQgaGV4IHZhbHVlLiAgKi8KKwkJICAgICAgZXJyID0gR1BHX0VSUl9TRVhQX0JBRF9RVU9UQVRJT047CisgICAgICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKwkJICAgIH0KKwkJICBwICs9IDI7CisJCSAgbiAtPSAyOworCQkgIHF1b3RlZF9lc2MgPSAwOworCQkgIGJyZWFrOworCisJCWNhc2UgJ1xyJzoKKwkJICAvKiBpZ25vcmUgQ1JbLExGXSAqLworCQkgIGlmIChuICYmIChwWzFdID09ICdcbicpKQorCQkgICAgeworCQkgICAgICBwKys7CisJCSAgICAgIG4tLTsKKwkJICAgIH0KKwkJICBxdW90ZWRfZXNjID0gMDsKKwkJICBicmVhazsKKworCQljYXNlICdcbic6CisJCSAgLyogaWdub3JlIExGWyxDUl0gKi8KKwkJICBpZiAobiAmJiAocFsxXSA9PSAnXHInKSkKKwkJICAgIHsKKwkJICAgICAgcCsrOworCQkgICAgICBuLS07CisJCSAgICB9CisJCSAgcXVvdGVkX2VzYyA9IDA7CisJCSAgYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkJICAvKiBJbnZhbGlkIHF1b3RlZCBzdHJpbmcgZXNjYXBlLiAgKi8KKwkJICBlcnIgPSBHUEdfRVJSX1NFWFBfQkFEX1FVT1RBVElPTjsKKyAgICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoKnAgPT0gJ1xcJykKKwkgICAgcXVvdGVkX2VzYyA9IDE7CisJICBlbHNlIGlmICgqcCA9PSAnXCInKQorCSAgICB7CisJICAgICAgLyogS2VlcCBpdCBlYXN5IC0gd2Uga25vdyB0aGF0IHRoZSB1bnF1b3RlZCBzdHJpbmcgd2lsbAorCQkgbmV2ZXIgYmUgbGFyZ2VyLiAqLworCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNhdmU7CisJICAgICAgc2l6ZV90IGxlbjsKKworCSAgICAgIHF1b3RlZCsrOyAvKiBTa2lwIGxlYWRpbmcgcXVvdGUuICAqLworCSAgICAgIE1BS0VfU1BBQ0UgKHAgLSBxdW90ZWQpOworCSAgICAgICpjLnBvcysrID0gU1RfREFUQTsKKwkgICAgICBzYXZlID0gYy5wb3M7CisJICAgICAgU1RPUkVfTEVOIChjLnBvcywgMCk7IC8qIFdpbGwgYmUgZml4ZWQgdXAgbGF0ZXIuICAqLworCSAgICAgIGxlbiA9IHVucXVvdGVfc3RyaW5nIChxdW90ZWQsIHAgLSBxdW90ZWQsIGMucG9zKTsKKwkgICAgICBjLnBvcyArPSBsZW47CisJICAgICAgU1RPUkVfTEVOIChzYXZlLCBsZW4pOworCSAgICAgIHF1b3RlZCA9IE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChoZXhmbXQpCisJeworCSAgaWYgKGlzeGRpZ2l0ICgqcCkpCisJICAgIGhleGNvdW50Kys7CisJICBlbHNlIGlmICgqcCA9PSAnIycpCisJICAgIHsKKwkgICAgICBpZiAoKGhleGNvdW50ICYgMSkpCisJCXsKKwkJICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkJICBlcnIgPSBHUEdfRVJSX1NFWFBfT0REX0hFWF9OVU1CRVJTOworICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKwkJfQorCisJICAgICAgZGF0YWxlbiA9IGhleGNvdW50IC8gMjsKKwkgICAgICBNQUtFX1NQQUNFIChkYXRhbGVuKTsKKwkgICAgICAqYy5wb3MrKyA9IFNUX0RBVEE7CisJICAgICAgU1RPUkVfTEVOIChjLnBvcywgZGF0YWxlbik7CisJICAgICAgZm9yIChoZXhmbXQrKzsgaGV4Zm10IDwgcDsgaGV4Zm10KyspCisJCXsKKyAgICAgICAgICAgICAgICAgIGludCB0bXBjOworCisJCSAgaWYgKHdoaXRlc3BhY2VwIChoZXhmbXQpKQorCQkgICAgY29udGludWU7CisJCSAgdG1wYyA9IGhleHRvbmliYmxlICgqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWhleGZtdCk7CisgICAgICAgICAgICAgICAgICBmb3IgKGhleGZtdCsrOyBoZXhmbXQgPCBwICYmIHdoaXRlc3BhY2VwIChoZXhmbXQpOyBoZXhmbXQrKykKKwkJICAgIDsKKyAgICAgICAgICAgICAgICAgIGlmIChoZXhmbXQgPCBwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgdG1wYyAqPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICB0bXBjICs9IGhleHRvbmliYmxlICgqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWhleGZtdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICpjLnBvcysrID0gdG1wYzsKKwkJfQorCSAgICAgIGhleGZtdCA9IE5VTEw7CisJICAgIH0KKwkgIGVsc2UgaWYgKCF3aGl0ZXNwYWNlcCAocCkpCisJICAgIHsKKwkgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgICAgICBlcnIgPSBHUEdfRVJSX1NFWFBfQkFEX0hFWF9DSEFSOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoYmFzZTY0KQorCXsKKwkgIGlmICgqcCA9PSAnfCcpCisJICAgIGJhc2U2NCA9IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZGlncHRyKQorCXsKKwkgIGlmIChkaWdpdHAgKHApKQorCSAgICA7CisJICBlbHNlIGlmICgqcCA9PSAnOicpCisJICAgIHsKKwkgICAgICBkYXRhbGVuID0gYXRvaSAoZGlncHRyKTsgLyogRklYTUU6IGNoZWNrIGZvciBvdmVyZmxvdy4gICovCisJICAgICAgZGlncHRyID0gTlVMTDsKKwkgICAgICBpZiAoZGF0YWxlbiA+IG4gLSAxKQorCQl7CisJCSAgKmVycm9mZiA9IHAgLSBidWZmZXI7CisJCSAgLyogQnVmZmVyIHRvbyBzaG9ydC4gICovCisJCSAgZXJyID0gR1BHX0VSUl9TRVhQX1NUUklOR19UT09fTE9ORzsKKyAgICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisJCX0KKwkgICAgICAvKiBNYWtlIGEgbmV3IGxpc3QgZW50cnkuICAqLworCSAgICAgIE1BS0VfU1BBQ0UgKGRhdGFsZW4pOworCSAgICAgICpjLnBvcysrID0gU1RfREFUQTsKKwkgICAgICBTVE9SRV9MRU4gKGMucG9zLCBkYXRhbGVuKTsKKwkgICAgICBtZW1jcHkgKGMucG9zLCBwICsgMSwgZGF0YWxlbik7CisJICAgICAgYy5wb3MgKz0gZGF0YWxlbjsKKwkgICAgICBuIC09IGRhdGFsZW47CisJICAgICAgcCArPSBkYXRhbGVuOworCSAgICB9CisJICBlbHNlIGlmICgqcCA9PSAnXCInKQorCSAgICB7CisJICAgICAgZGlncHRyID0gTlVMTDsgLyogV2UgaWdub3JlIHRoZSBvcHRpb25hbCBsZW5ndGguICAqLworCSAgICAgIHF1b3RlZCA9IHA7CisJICAgICAgcXVvdGVkX2VzYyA9IDA7CisJICAgIH0KKwkgIGVsc2UgaWYgKCpwID09ICcjJykKKwkgICAgeworCSAgICAgIGRpZ3B0ciA9IE5VTEw7IC8qIFdlIGlnbm9yZSB0aGUgb3B0aW9uYWwgbGVuZ3RoLiAgKi8KKwkgICAgICBoZXhmbXQgPSBwOworCSAgICAgIGhleGNvdW50ID0gMDsKKwkgICAgfQorCSAgZWxzZSBpZiAoKnAgPT0gJ3wnKQorCSAgICB7CisJICAgICAgZGlncHRyID0gTlVMTDsgLyogV2UgaWdub3JlIHRoZSBvcHRpb25hbCBsZW5ndGguICAqLworCSAgICAgIGJhc2U2NCA9IHA7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICplcnJvZmYgPSBwIC0gYnVmZmVyOworCSAgICAgIGVyciA9IEdQR19FUlJfU0VYUF9JTlZfTEVOX1NQRUM7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChwZXJjZW50KQorCXsKKwkgIGlmICgqcCA9PSAnbScgfHwgKnAgPT0gJ00nKQorCSAgICB7CisJICAgICAgLyogSW5zZXJ0IGFuIE1QSS4gICovCisJICAgICAgZ2NyeV9tcGlfdCBtOworCSAgICAgIHNpemVfdCBubSA9IDA7CisgICAgICAgICAgICAgIGludCBtcGlmbXQgPSAqcCA9PSAnbSc/IEdDUllNUElfRk1UX1NURDogR0NSWU1QSV9GTVRfVVNHOworCisJICAgICAgQVJHX05FWFQgKG0sIGdjcnlfbXBpX3QpOworCisgICAgICAgICAgICAgIGlmIChtcGlfZ2V0X2ZsYWcgKG0sIEdDUllNUElfRkxBR19PUEFRVUUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHZvaWQgKm1wOworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzOworCisgICAgICAgICAgICAgICAgICBtcCA9IG1waV9nZXRfb3BhcXVlIChtLCAmbmJpdHMpOworICAgICAgICAgICAgICAgICAgbm0gPSAobmJpdHMrNykvODsKKyAgICAgICAgICAgICAgICAgIGlmIChtcCAmJiBubSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIE1BS0VfU1BBQ0UgKG5tKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9nY3J5X2lzX3NlY3VyZSAoYy5zZXhwLT5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtcGlfZ2V0X2ZsYWcgKG0sIEdDUllNUElfRkxBR19TRUNVUkUpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIHN3aXRjaCB0byBzZWN1cmUgYWxsb2NhdGlvbi4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfc2V4cF90IG5ld3NleHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKm5ld2hlYWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3c2V4cCA9IHh0cnltYWxsb2Nfc2VjdXJlIChzaXplb2YgKm5ld3NleHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGMuYWxsb2NhdGVkIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3c2V4cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBncGdfZXJyX2NvZGVfZnJvbV9lcnJubyAoZXJybm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2hlYWQgPSBuZXdzZXhwLT5kOworICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKG5ld2hlYWQsIGMuc2V4cC0+ZCwgKGMucG9zIC0gYy5zZXhwLT5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGMucG9zID0gbmV3aGVhZCArIChjLnBvcyAtIGMuc2V4cC0+ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHhmcmVlIChjLnNleHApOworICAgICAgICAgICAgICAgICAgICAgICAgICBjLnNleHAgPSBuZXdzZXhwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgKmMucG9zKysgPSBTVF9EQVRBOworICAgICAgICAgICAgICAgICAgICAgIFNUT1JFX0xFTiAoYy5wb3MsIG5tKTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKGMucG9zLCBtcCwgbm0pOworICAgICAgICAgICAgICAgICAgICAgIGMucG9zICs9IG5tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKF9nY3J5X21waV9wcmludCAobXBpZm10LCBOVUxMLCAwLCAmbm0sIG0pKQorICAgICAgICAgICAgICAgICAgICBCVUcgKCk7CisKKyAgICAgICAgICAgICAgICAgIE1BS0VfU1BBQ0UgKG5tKTsKKyAgICAgICAgICAgICAgICAgIGlmICghX2djcnlfaXNfc2VjdXJlIChjLnNleHAtPmQpCisgICAgICAgICAgICAgICAgICAgICAgJiYgbXBpX2dldF9mbGFnICggbSwgR0NSWU1QSV9GTEFHX1NFQ1VSRSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIHN3aXRjaCB0byBzZWN1cmUgYWxsb2NhdGlvbi4gICovCisgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3QgbmV3c2V4cDsKKyAgICAgICAgICAgICAgICAgICAgICBieXRlICpuZXdoZWFkOworCisgICAgICAgICAgICAgICAgICAgICAgbmV3c2V4cCA9IHh0cnltYWxsb2Nfc2VjdXJlIChzaXplb2YgKm5ld3NleHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYy5hbGxvY2F0ZWQgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld3NleHApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgbmV3aGVhZCA9IG5ld3NleHAtPmQ7CisgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChuZXdoZWFkLCBjLnNleHAtPmQsIChjLnBvcyAtIGMuc2V4cC0+ZCkpOworICAgICAgICAgICAgICAgICAgICAgIGMucG9zID0gbmV3aGVhZCArIChjLnBvcyAtIGMuc2V4cC0+ZCk7CisgICAgICAgICAgICAgICAgICAgICAgeGZyZWUgKGMuc2V4cCk7CisgICAgICAgICAgICAgICAgICAgICAgYy5zZXhwID0gbmV3c2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAqYy5wb3MrKyA9IFNUX0RBVEE7CisgICAgICAgICAgICAgICAgICBTVE9SRV9MRU4gKGMucG9zLCBubSk7CisgICAgICAgICAgICAgICAgICBpZiAoX2djcnlfbXBpX3ByaW50IChtcGlmbXQsIGMucG9zLCBubSwgJm5tLCBtKSkKKyAgICAgICAgICAgICAgICAgICAgQlVHICgpOworICAgICAgICAgICAgICAgICAgYy5wb3MgKz0gbm07CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJICBlbHNlIGlmICgqcCA9PSAncycpCisJICAgIHsKKwkgICAgICAvKiBJbnNlcnQgYW4gc3RyaW5nLiAgKi8KKwkgICAgICBjb25zdCBjaGFyICphc3RyOworCSAgICAgIHNpemVfdCBhbGVuOworCisJICAgICAgQVJHX05FWFQgKGFzdHIsIGNvbnN0IGNoYXIgKik7CisJICAgICAgYWxlbiA9IHN0cmxlbiAoYXN0cik7CisKKwkgICAgICBNQUtFX1NQQUNFIChhbGVuKTsKKwkgICAgICAqYy5wb3MrKyA9IFNUX0RBVEE7CisJICAgICAgU1RPUkVfTEVOIChjLnBvcywgYWxlbik7CisJICAgICAgbWVtY3B5IChjLnBvcywgYXN0ciwgYWxlbik7CisJICAgICAgYy5wb3MgKz0gYWxlbjsKKwkgICAgfQorCSAgZWxzZSBpZiAoKnAgPT0gJ2InKQorCSAgICB7CisJICAgICAgLyogSW5zZXJ0IGEgbWVtb3J5IGJ1ZmZlci4gICovCisJICAgICAgY29uc3QgY2hhciAqYXN0cjsKKwkgICAgICBpbnQgYWxlbjsKKworCSAgICAgIEFSR19ORVhUIChhbGVuLCBpbnQpOworCSAgICAgIEFSR19ORVhUIChhc3RyLCBjb25zdCBjaGFyICopOworCisJICAgICAgTUFLRV9TUEFDRSAoYWxlbik7CisJICAgICAgaWYgKGFsZW4KKyAgICAgICAgICAgICAgICAgICYmICFfZ2NyeV9pc19zZWN1cmUgKGMuc2V4cC0+ZCkKKwkJICAmJiBfZ2NyeV9pc19zZWN1cmUgKGFzdHIpKQorICAgICAgICAgICAgICB7CisJCSAgLyogV2UgaGF2ZSB0byBzd2l0Y2ggdG8gc2VjdXJlIGFsbG9jYXRpb24uICAqLworCQkgIGdjcnlfc2V4cF90IG5ld3NleHA7CisJCSAgYnl0ZSAqbmV3aGVhZDsKKworCQkgIG5ld3NleHAgPSB4dHJ5bWFsbG9jX3NlY3VyZSAoc2l6ZW9mICpuZXdzZXhwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYy5hbGxvY2F0ZWQgLSAxKTsKKyAgICAgICAgICAgICAgICAgIGlmICghbmV3c2V4cCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJfY29kZV9mcm9tX2Vycm5vIChlcnJubyk7CisgICAgICAgICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCQkgIG5ld2hlYWQgPSBuZXdzZXhwLT5kOworCQkgIG1lbWNweSAobmV3aGVhZCwgYy5zZXhwLT5kLCAoYy5wb3MgLSBjLnNleHAtPmQpKTsKKwkJICBjLnBvcyA9IG5ld2hlYWQgKyAoYy5wb3MgLSBjLnNleHAtPmQpOworCQkgIHhmcmVlIChjLnNleHApOworCQkgIGMuc2V4cCA9IG5ld3NleHA7CisJCX0KKworCSAgICAgICpjLnBvcysrID0gU1RfREFUQTsKKwkgICAgICBTVE9SRV9MRU4gKGMucG9zLCBhbGVuKTsKKwkgICAgICBtZW1jcHkgKGMucG9zLCBhc3RyLCBhbGVuKTsKKwkgICAgICBjLnBvcyArPSBhbGVuOworCSAgICB9CisJICBlbHNlIGlmICgqcCA9PSAnZCcpCisJICAgIHsKKwkgICAgICAvKiBJbnNlcnQgYW4gaW50ZWdlciBhcyBzdHJpbmcuICAqLworCSAgICAgIGludCBhaW50OworCSAgICAgIHNpemVfdCBhbGVuOworCSAgICAgIGNoYXIgYnVmWzM1XTsKKworCSAgICAgIEFSR19ORVhUIChhaW50LCBpbnQpOworCSAgICAgIHNwcmludGYgKGJ1ZiwgIiVkIiwgYWludCk7CisJICAgICAgYWxlbiA9IHN0cmxlbiAoYnVmKTsKKwkgICAgICBNQUtFX1NQQUNFIChhbGVuKTsKKwkgICAgICAqYy5wb3MrKyA9IFNUX0RBVEE7CisJICAgICAgU1RPUkVfTEVOIChjLnBvcywgYWxlbik7CisJICAgICAgbWVtY3B5IChjLnBvcywgYnVmLCBhbGVuKTsKKwkgICAgICBjLnBvcyArPSBhbGVuOworCSAgICB9CisJICBlbHNlIGlmICgqcCA9PSAndScpCisJICAgIHsKKwkgICAgICAvKiBJbnNlcnQgYW4gdW5zaWduZWQgaW50ZWdlciBhcyBzdHJpbmcuICAqLworCSAgICAgIHVuc2lnbmVkIGludCBhaW50OworCSAgICAgIHNpemVfdCBhbGVuOworCSAgICAgIGNoYXIgYnVmWzM1XTsKKworCSAgICAgIEFSR19ORVhUIChhaW50LCB1bnNpZ25lZCBpbnQpOworCSAgICAgIHNwcmludGYgKGJ1ZiwgIiV1IiwgYWludCk7CisJICAgICAgYWxlbiA9IHN0cmxlbiAoYnVmKTsKKwkgICAgICBNQUtFX1NQQUNFIChhbGVuKTsKKwkgICAgICAqYy5wb3MrKyA9IFNUX0RBVEE7CisJICAgICAgU1RPUkVfTEVOIChjLnBvcywgYWxlbik7CisJICAgICAgbWVtY3B5IChjLnBvcywgYnVmLCBhbGVuKTsKKwkgICAgICBjLnBvcyArPSBhbGVuOworCSAgICB9CisJICBlbHNlIGlmICgqcCA9PSAnUycpCisJICAgIHsKKwkgICAgICAvKiBJbnNlcnQgYSBnY3J5X3NleHBfdC4gICovCisJICAgICAgZ2NyeV9zZXhwX3QgYXNleHA7CisJICAgICAgc2l6ZV90IGFsZW4sIGFvZmY7CisKKwkgICAgICBBUkdfTkVYVCAoYXNleHAsIGdjcnlfc2V4cF90KTsKKyAgICAgICAgICAgICAgYWxlbiA9IGdldF9pbnRlcm5hbF9idWZmZXIgKGFzZXhwLCAmYW9mZik7CisgICAgICAgICAgICAgIGlmIChhbGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIE1BS0VfU1BBQ0UgKGFsZW4pOworICAgICAgICAgICAgICAgICAgbWVtY3B5IChjLnBvcywgYXNleHAtPmQgKyBhb2ZmLCBhbGVuKTsKKyAgICAgICAgICAgICAgICAgIGMucG9zICs9IGFsZW47CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgICAgICAvKiBJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXIuICAqLworCSAgICAgIGVyciA9IEdQR19FUlJfU0VYUF9JTlZfTEVOX1NQRUM7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisJICAgIH0KKwkgIHBlcmNlbnQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICcoJykKKwl7CisJICBpZiAoZGlzcGhpbnQpCisJICAgIHsKKwkgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgICAgICAvKiBPcGVuIGRpc3BsYXkgaGludC4gICovCisJICAgICAgZXJyID0gR1BHX0VSUl9TRVhQX1VOTUFUQ0hFRF9ESDsKKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKwkgICAgfQorCSAgTUFLRV9TUEFDRSAoMCk7CisJICAqYy5wb3MrKyA9IFNUX09QRU47CisJICBsZXZlbCsrOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICcpJykKKwl7CisJICAvKiBXYWxrIHVwLiAgKi8KKwkgIGlmIChkaXNwaGludCkKKwkgICAgeworCSAgICAgICplcnJvZmYgPSBwIC0gYnVmZmVyOworCSAgICAgIC8qIE9wZW4gZGlzcGxheSBoaW50LiAgKi8KKwkgICAgICBlcnIgPSBHUEdfRVJSX1NFWFBfVU5NQVRDSEVEX0RIOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworCSAgICB9CisJICBNQUtFX1NQQUNFICgwKTsKKwkgICpjLnBvcysrID0gU1RfQ0xPU0U7CisJICBsZXZlbC0tOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICdcIicpCisJeworCSAgcXVvdGVkID0gcDsKKwkgIHF1b3RlZF9lc2MgPSAwOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICcjJykKKwl7CisJICBoZXhmbXQgPSBwOworCSAgaGV4Y291bnQgPSAwOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICd8JykKKwliYXNlNjQgPSBwOworICAgICAgZWxzZSBpZiAoKnAgPT0gJ1snKQorCXsKKwkgIGlmIChkaXNwaGludCkKKwkgICAgeworCSAgICAgICplcnJvZmYgPSBwIC0gYnVmZmVyOworCSAgICAgIC8qIE9wZW4gZGlzcGxheSBoaW50LiAgKi8KKwkgICAgICBlcnIgPSBHUEdfRVJSX1NFWFBfTkVTVEVEX0RIOworICAgICAgICAgICAgICBnb3RvIGxlYXZlOworCSAgICB9CisJICBkaXNwaGludCA9IHA7CisJfQorICAgICAgZWxzZSBpZiAoKnAgPT0gJ10nKQorCXsKKwkgIGlmICghZGlzcGhpbnQpCisJICAgIHsKKwkgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgICAgICAvKiBPcGVuIGRpc3BsYXkgaGludC4gICovCisJICAgICAgZXJyID0gR1BHX0VSUl9TRVhQX1VOTUFUQ0hFRF9ESDsKKyAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKwkgICAgfQorCSAgZGlzcGhpbnQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UgaWYgKGRpZ2l0cCAocCkpCisJeworCSAgaWYgKCpwID09ICcwJykKKwkgICAgeworCSAgICAgIC8qIEEgbGVuZ3RoIG1heSBub3QgYmVnaW4gd2l0aCB6ZXJvLiAgKi8KKwkgICAgICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgICAgICBlcnIgPSBHUEdfRVJSX1NFWFBfWkVST19QUkVGSVg7CisgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisJICAgIH0KKwkgIGRpZ3B0ciA9IHA7CisJfQorICAgICAgZWxzZSBpZiAoc3RyY2hyICh0b2tlbmNoYXJzLCAqcCkpCisJdG9rZW5wID0gcDsKKyAgICAgIGVsc2UgaWYgKHdoaXRlc3BhY2VwIChwKSkKKwk7CisgICAgICBlbHNlIGlmICgqcCA9PSAneycpCisJeworCSAgLyogZml4bWU6IGhhbmRsZSByZXNjYW5uaW5nOiB3ZSBjYW4gZG8gdGhpcyBieSBzYXZpbmcgb3VyCisJICAgICBjdXJyZW50IHN0YXRlIGFuZCBzdGFydCBvdmVyIGF0IHArMSAtLSBIbW1tLiBBdCB0aGlzCisJICAgICBwb2ludCBoZXJlIHdlIGFyZSBpbiBhIHdlbGwgZGVmaW5lZCBzdGF0ZSwgc28gd2UgZG9uJ3QKKwkgICAgIG5lZWQgdG8gc2F2ZSBpdC4gIEdyZWF0LiAgKi8KKwkgICplcnJvZmYgPSBwIC0gYnVmZmVyOworCSAgZXJyID0gR1BHX0VSUl9TRVhQX1VORVhQRUNURURfUFVOQzsKKyAgICAgICAgICBnb3RvIGxlYXZlOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cmNociAoIiZcXCIsICpwKSkKKwl7CisJICAvKiBSZXNlcnZlZCBwdW5jdHVhdGlvbi4gICovCisJICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgIGVyciA9IEdQR19FUlJfU0VYUF9VTkVYUEVDVEVEX1BVTkM7CisgICAgICAgICAgZ290byBsZWF2ZTsKKwl9CisgICAgICBlbHNlIGlmIChhcmdmbGFnICYmICgqcCA9PSAnJScpKQorCXBlcmNlbnQgPSBwOworICAgICAgZWxzZQorCXsKKwkgIC8qIEJhZCBvciB1bmF2YWlsYWJsZS4gICovCisJICAqZXJyb2ZmID0gcCAtIGJ1ZmZlcjsKKwkgIGVyciA9IEdQR19FUlJfU0VYUF9CQURfQ0hBUkFDVEVSOworICAgICAgICAgIGdvdG8gbGVhdmU7CisJfQorICAgIH0KKyAgTUFLRV9TUEFDRSAoMCk7CisgICpjLnBvcysrID0gU1RfU1RPUDsKKworICBpZiAobGV2ZWwgJiYgIWVycikKKyAgICBlcnIgPSBHUEdfRVJSX1NFWFBfVU5NQVRDSEVEX1BBUkVOOworCisgbGVhdmU6CisgIGlmIChlcnIpCisgICAgeworICAgICAgLyogRXJyb3IgLT4gZGVhbGxvY2F0ZS4gICovCisgICAgICBpZiAoYy5zZXhwKQorICAgICAgICB7CisgICAgICAgICAgLyogRXh0cmEgcGFyYW5vaWQgd2lwZSBvbiBlcnJvci4gKi8KKyAgICAgICAgICBpZiAoX2djcnlfaXNfc2VjdXJlIChjLnNleHApKQorICAgICAgICAgICAgd2lwZW1lbW9yeSAoYy5zZXhwLCBzaXplb2YgKHN0cnVjdCBnY3J5X3NleHApICsgYy5hbGxvY2F0ZWQgLSAxKTsKKyAgICAgICAgICB4ZnJlZSAoYy5zZXhwKTsKKyAgICAgICAgfQorICAgICAgLyogVGhpcyBtaWdodCBiZSBleHBlY3RlZCBieSBleGlzdGluZyBjb2RlLi4uICAqLworICAgICAgKnJldHNleHAgPSBOVUxMOworICAgIH0KKyAgZWxzZQorICAgICpyZXRzZXhwID0gbm9ybWFsaXplIChjLnNleHApOworCisgIHJldHVybiBlcnI7CisjdW5kZWYgTUFLRV9TUEFDRQorI3VuZGVmIFNUT1JFX0xFTgorfQorCisKK3N0YXRpYyBncGdfZXJyX2NvZGVfdAorZG9fc2V4cF9zc2NhbiAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgYXJnZmxhZywKKyAgICAgICAgICAgICAgIHZvaWQgKiphcmdfbGlzdCwgLi4uKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgYXJnX2xpc3QpOworICByYyA9IGRvX3ZzZXhwX3NzY2FuIChyZXRzZXhwLCBlcnJvZmYsIGJ1ZmZlciwgbGVuZ3RoLCBhcmdmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICBhcmdfbGlzdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisKKyAgcmV0dXJuIHJjOworfQorCisKK2dwZ19lcnJfY29kZV90CitfZ2NyeV9zZXhwX2J1aWxkIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICBnY3J5X2Vycl9jb2RlX3QgcmM7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgcmMgPSBkb192c2V4cF9zc2NhbiAocmV0c2V4cCwgZXJyb2ZmLCBmb3JtYXQsIHN0cmxlbihmb3JtYXQpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKworICByZXR1cm4gcmM7Cit9CisKKworZ2NyeV9lcnJfY29kZV90CitfZ2NyeV9zZXhwX3ZidWlsZCAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdfcHRyKQoreworICByZXR1cm4gZG9fdnNleHBfc3NjYW4gKHJldHNleHAsIGVycm9mZiwgZm9ybWF0LCBzdHJsZW4oZm9ybWF0KSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBhcmdfcHRyKTsKK30KKworCisvKiBMaWtlIGdjcnlfc2V4cF9idWlsZCwgYnV0IHVzZXMgYW4gYXJyYXkgaW5zdGVhZCBvZiB2YXJpYWJsZQorICAgZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KK2djcnlfZXJyX2NvZGVfdAorX2djcnlfc2V4cF9idWlsZF9hcnJheSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2b2lkICoqYXJnX2xpc3QpCit7CisgIHJldHVybiBkb19zZXhwX3NzY2FuIChyZXRzZXhwLCBlcnJvZmYsIGZvcm1hdCwgc3RybGVuKGZvcm1hdCksIDEsIGFyZ19saXN0KTsKK30KKworCitnY3J5X2Vycl9jb2RlX3QKK19nY3J5X3NleHBfc3NjYW4gKGdjcnlfc2V4cF90ICpyZXRzZXhwLCBzaXplX3QgKmVycm9mZiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgcmV0dXJuIGRvX3NleHBfc3NjYW4gKHJldHNleHAsIGVycm9mZiwgYnVmZmVyLCBsZW5ndGgsIDAsIE5VTEwpOworfQorCisMCisvKiBGaWd1cmUgb3V0IGEgc3VpdGFibGUgZW5jb2RpbmcgZm9yIEJVRkZFUiBvZiBMRU5HVEguCisgICBSZXR1cm5zOiAwID0gQmluYXJ5CisgICAgICAgICAgICAxID0gU3RyaW5nIHBvc3NpYmxlCisgICAgICAgICAgICAyID0gVG9rZW4gcG9zc2libGUKKyovCitzdGF0aWMgaW50CitzdWl0YWJsZV9lbmNvZGluZyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworICBpbnQgbWF5YmVfdG9rZW4gPSAxOworCisgIGlmICghbGVuZ3RoKQorICAgIHJldHVybiAxOworCisgIGlmICgqYnVmZmVyICYgMHg4MCkKKyAgICByZXR1cm4gMDsgLyogSWYgdGhlIE1TQiBpcyBzZXQgd2UgYXNzdW1lIHRoYXQgYnVmZmVyIHJlcHJlc2VudHMgYQorICAgICAgICAgICAgICAgICBuZWdhdGl2ZSBudW1iZXIuICAqLworICBpZiAoISpidWZmZXIpCisgICAgcmV0dXJuIDA7IC8qIFN0YXJ0aW5nIHdpdGggYSB6ZXJvIGlzIHByZXR0eSBtdWNoIGEgYmluYXJ5IHN0cmluZy4gICovCisKKyAgZm9yIChzPWJ1ZmZlcjsgbGVuZ3RoOyBzKyssIGxlbmd0aC0tKQorICAgIHsKKyAgICAgIGlmICggKCpzIDwgMHgyMCB8fCAoKnMgPj0gMHg3ZiAmJiAqcyA8PSAweGEwKSkKKyAgICAgICAgICAgJiYgIXN0cmNociAoIlxiXHRcdlxuXGZcclwiXCdcXCIsICpzKSkKKyAgICAgICAgcmV0dXJuIDA7IC8qYmluYXJ5Ki8KKyAgICAgIGlmICggbWF5YmVfdG9rZW4KKyAgICAgICAgICAgJiYgIWFscGhhcCAocykgJiYgIWRpZ2l0cCAocykgICYmICFzdHJjaHIgKFRPS0VOX1NQRUNJQUxTLCAqcykpCisgICAgICAgIG1heWJlX3Rva2VuID0gMDsKKyAgICB9CisgIHMgPSBidWZmZXI7CisgIGlmICggbWF5YmVfdG9rZW4gJiYgIWRpZ2l0cCAocykgKQorICAgIHJldHVybiAyOworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50Citjb252ZXJ0X3RvX2hleCAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBjaGFyICpkZXN0KQoreworICBpbnQgaTsKKworICBpZiAoZGVzdCkKKyAgICB7CisgICAgICAqZGVzdCsrID0gJyMnOworICAgICAgZm9yIChpPTA7IGkgPCBsZW47IGkrKywgZGVzdCArPSAyICkKKyAgICAgICAgc3ByaW50ZiAoZGVzdCwgIiUwMlgiLCBzcmNbaV0pOworICAgICAgKmRlc3QrKyA9ICcjJzsKKyAgICB9CisgIHJldHVybiBsZW4qMisyOworfQorCitzdGF0aWMgaW50Citjb252ZXJ0X3RvX3N0cmluZyAoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc2l6ZV90IGxlbiwgY2hhciAqZGVzdCkKK3sKKyAgaWYgKGRlc3QpCisgICAgeworICAgICAgY2hhciAqcCA9IGRlc3Q7CisgICAgICAqcCsrID0gJ1wiJzsKKyAgICAgIGZvciAoOyBsZW47IGxlbi0tLCBzKysgKQorICAgICAgICB7CisgICAgICAgICAgc3dpdGNoICgqcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgJ1xiJzogKnArKyA9ICdcXCc7ICpwKysgPSAnYic7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1x0JzogKnArKyA9ICdcXCc7ICpwKysgPSAndCc7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1x2JzogKnArKyA9ICdcXCc7ICpwKysgPSAndic7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1xuJzogKnArKyA9ICdcXCc7ICpwKysgPSAnbic7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1xmJzogKnArKyA9ICdcXCc7ICpwKysgPSAnZic7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1xyJzogKnArKyA9ICdcXCc7ICpwKysgPSAncic7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1wiJzogKnArKyA9ICdcXCc7ICpwKysgPSAnXCInOyAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdcJyc6ICpwKysgPSAnXFwnOyAqcCsrID0gJ1wnJzsgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXFwnOiAqcCsrID0gJ1xcJzsgKnArKyA9ICdcXCc7ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmICggKCpzIDwgMHgyMCB8fCAoKnMgPj0gMHg3ZiAmJiAqcyA8PSAweGEwKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3ByaW50ZiAocCwgIlxceCUwMngiLCAqcyk7CisgICAgICAgICAgICAgICAgICBwICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnArKyA9ICpzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAqcCsrID0gJ1wiJzsKKyAgICAgIHJldHVybiBwIC0gZGVzdDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgY291bnQgPSAyOworICAgICAgZm9yICg7IGxlbjsgbGVuLS0sIHMrKyApCisgICAgICAgIHsKKyAgICAgICAgICBzd2l0Y2ggKCpzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnXGInOgorICAgICAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgY2FzZSAnXHYnOgorICAgICAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgY2FzZSAnXGYnOgorICAgICAgICAgICAgY2FzZSAnXHInOgorICAgICAgICAgICAgY2FzZSAnXCInOgorICAgICAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICAgICAgY2FzZSAnXFwnOiBjb3VudCArPSAyOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmICggKCpzIDwgMHgyMCB8fCAoKnMgPj0gMHg3ZiAmJiAqcyA8PSAweGEwKSkpCisgICAgICAgICAgICAgICAgY291bnQgKz0gNDsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHJldHVybiBjb3VudDsKKyAgICB9Cit9CisKKworCitzdGF0aWMgaW50Citjb252ZXJ0X3RvX3Rva2VuIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKmRlc3QpCit7CisgIGlmIChkZXN0KQorICAgIG1lbWNweSAoZGVzdCwgc3JjLCBsZW4pOworICByZXR1cm4gbGVuOworfQorCisKKy8qKioqKioqKioqKioqKioqCisgKiBQcmludCBTRVhQIHRvIGJ1ZmZlciB1c2luZyB0aGUgTU9ERS4gIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIFNFWFAgaW4gYnVmZmVyIG9yIDAgaWYgdGhlIGJ1ZmZlciBpcyB0b28gc2hvcnQgKFdlIGhhdmUgYXQgbGVhc3QgYW4KKyAqIGVtcHR5IGxpc3QgY29uc2lzdGluZyBvZiAyIGJ5dGVzKS4gIElmIGEgYnVmZmVyIG9mIE5VTEwgaXMgcHJvdmlkZWQsCisgKiB0aGUgcmVxdWlyZWQgbGVuZ3RoIGlzIHJldHVybmVkLgorICovCitzaXplX3QKK19nY3J5X3NleHBfc3ByaW50IChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBtYXhsZW5ndGggKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciBlbXB0eVszXSA9IHsgU1RfT1BFTiwgU1RfQ0xPU0UsIFNUX1NUT1AgfTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqczsKKyAgY2hhciAqZDsKKyAgREFUQUxFTiBuOworICBjaGFyIG51bWJ1ZlsyMF07CisgIHNpemVfdCBsZW4gPSAwOworICBpbnQgaSwgaW5kZW50ID0gMDsKKworICBzID0gbGlzdD8gbGlzdC0+ZCA6IGVtcHR5OworICBkID0gYnVmZmVyOworICB3aGlsZSAoICpzICE9IFNUX1NUT1AgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoICpzICkKKyAgICAgICAgeworICAgICAgICBjYXNlIFNUX09QRU46CisgICAgICAgICAgcysrOworICAgICAgICAgIGlmICggbW9kZSAhPSBHQ1JZU0VYUF9GTVRfQ0FOT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoaW5kZW50KQorICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICBsZW4gKz0gaW5kZW50OworICAgICAgICAgICAgfQorICAgICAgICAgIGxlbisrOworICAgICAgICAgIGlmICggYnVmZmVyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBsZW4gPj0gbWF4bGVuZ3RoICkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgaWYgKCBtb2RlICE9IEdDUllTRVhQX0ZNVF9DQU5PTiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKGluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICdcbic7CisgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IGluZGVudDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAqZCsrID0gJyAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgKmQrKyA9ICcoJzsKKwkgICAgfQorICAgICAgICAgIGluZGVudCsrOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUX0NMT1NFOgorICAgICAgICAgIHMrKzsKKyAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICBpZiAoIGJ1ZmZlciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggbGVuID49IG1heGxlbmd0aCApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICpkKysgPSAnKSc7CisJICAgIH0KKyAgICAgICAgICBpbmRlbnQtLTsKKyAgICAgICAgICBpZiAoKnMgIT0gU1RfT1BFTiAmJiAqcyAhPSBTVF9TVE9QICYmIG1vZGUgIT0gR0NSWVNFWFBfRk1UX0NBTk9OKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgbGVuICs9IGluZGVudDsKKyAgICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAobGVuID49IG1heGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAqZCsrID0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgaW5kZW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgICpkKysgPSAnICc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUX0RBVEE6CisgICAgICAgICAgcysrOworICAgICAgICAgIG1lbWNweSAoICZuLCBzLCBzaXplb2YgbiApOyBzICs9IHNpemVvZiBuOworICAgICAgICAgIGlmIChtb2RlID09IEdDUllTRVhQX0ZNVF9BRFZBTkNFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IHR5cGU7CisgICAgICAgICAgICAgIHNpemVfdCBubjsKKworICAgICAgICAgICAgICBzd2l0Y2ggKCAodHlwZT1zdWl0YWJsZV9lbmNvZGluZyAocywgbikpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG5uID0gY29udmVydF90b19zdHJpbmcgKHMsIG4sIE5VTEwpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG5uID0gY29udmVydF90b190b2tlbiAocywgbiwgTlVMTCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG5uID0gY29udmVydF90b19oZXggKHMsIG4sIE5VTEwpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGxlbiArPSBubjsKKyAgICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAobGVuID49IG1heGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBjb252ZXJ0X3RvX3N0cmluZyAocywgbiwgZCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGNvbnZlcnRfdG9fdG9rZW4gKHMsIG4sIGQpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogY29udmVydF90b19oZXggKHMsIG4sIGQpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZCArPSBubjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzW25dICE9IFNUX0NMT1NFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPj0gbWF4bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNwcmludGYgKG51bWJ1ZiwgIiV1OiIsICh1bnNpZ25lZCBpbnQpbiApOworICAgICAgICAgICAgICBsZW4gKz0gc3RybGVuIChudW1idWYpICsgbjsKKyAgICAgICAgICAgICAgaWYgKCBidWZmZXIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICggbGVuID49IG1heGxlbmd0aCApCisJCSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgIGQgPSBzdHBjcHkgKCBkLCBudW1idWYgKTsKKyAgICAgICAgICAgICAgICAgIG1lbWNweSAoIGQsIHMsIG4gKTsgZCArPSBuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzICs9IG47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgQlVHICgpOworCX0KKyAgICB9CisgIGlmICggbW9kZSAhPSBHQ1JZU0VYUF9GTVRfQ0FOT04gKQorICAgIHsKKyAgICAgIGxlbisrOworICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgIGlmICggbGVuID49IG1heGxlbmd0aCApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAqZCsrID0gJ1xuJzsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGJ1ZmZlcikKKyAgICB7CisgICAgICBpZiAoIGxlbiA+PSBtYXhsZW5ndGggKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICpkKysgPSAwOyAvKiBmb3IgY29udmVuaWVuY2Ugd2UgbWFrZSBhIEMgc3RyaW5nICovCisgICAgfQorICBlbHNlCisgICAgbGVuKys7IC8qIHdlIG5lZWQgb25lIGJ5dGUgbW9yZSBmb3IgdGhpcyAqLworCisgIHJldHVybiBsZW47Cit9CisKKworLyogU2NhbiBhIGNhbm9uaWNhbCBlbmNvZGVkIGJ1ZmZlciB3aXRoIGltcGxpY2l0IGxlbmd0aCB2YWx1ZXMgYW5kCisgICByZXR1cm4gdGhlIGFjdHVhbCBsZW5ndGggdGhpcyBTLWV4cHJlc3Npb24gdXNlcy4gIEZvciBhIHZhbGlkIFMtRXhwCisgICBpdCBzaG91bGQgbmV2ZXIgcmV0dXJuIDAuICBJZiBMRU5HVEggaXMgbm90IHplcm8sIHRoZSBtYXhpbXVtCisgICBsZW5ndGggdG8gc2NhbiBpcyBnaXZlbiAtIHRoaXMgY2FuIGJlIHVzZWQgZm9yIHN5bnRheCBjaGVja3Mgb2YKKyAgIGRhdGEgcGFzc2VkIGZyb20gb3V0c2lkZS4gZXJyb3Jjb2RlIGFuZCBlcnJvZmYgbWF5IGJvdGggYmUgcGFzc2VkIGFzCisgICBOVUxMLiAgKi8KK3NpemVfdAorX2djcnlfc2V4cF9jYW5vbl9sZW4gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmVycm9mZiwgZ2NyeV9lcnJfY29kZV90ICplcnJjb2RlKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaXNwaGludCA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBkYXRhbGVuID0gMDsKKyAgc2l6ZV90IGR1bW15X2Vycm9mZjsKKyAgZ2NyeV9lcnJfY29kZV90IGR1bW15X2VycmNvZGU7CisgIHNpemVfdCBjb3VudCA9IDA7CisgIGludCBsZXZlbCA9IDA7CisKKyAgaWYgKCFlcnJvZmYpCisgICAgZXJyb2ZmID0gJmR1bW15X2Vycm9mZjsKKyAgaWYgKCFlcnJjb2RlKQorICAgIGVycmNvZGUgPSAmZHVtbXlfZXJyY29kZTsKKworICAqZXJyY29kZSA9IEdQR19FUlJfTk9fRVJST1I7CisgICplcnJvZmYgPSAwOworICBpZiAoIWJ1ZmZlcikKKyAgICByZXR1cm4gMDsKKyAgaWYgKCpidWZmZXIgIT0gJygnKQorICAgIHsKKyAgICAgICplcnJjb2RlID0gR1BHX0VSUl9TRVhQX05PVF9DQU5PTklDQUw7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgZm9yIChwPWJ1ZmZlcjsgOyBwKyssIGNvdW50KysgKQorICAgIHsKKyAgICAgIGlmIChsZW5ndGggJiYgY291bnQgPj0gbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICplcnJjb2RlID0gR1BHX0VSUl9TRVhQX1NUUklOR19UT09fTE9ORzsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICBpZiAoZGF0YWxlbikKKyAgICAgICAgeworICAgICAgICAgIGlmICgqcCA9PSAnOicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChsZW5ndGggJiYgKGNvdW50K2RhdGFsZW4pID49IGxlbmd0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqZXJyb2ZmID0gY291bnQ7CisgICAgICAgICAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9TVFJJTkdfVE9PX0xPTkc7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNvdW50ICs9IGRhdGFsZW47CisgICAgICAgICAgICAgIHAgKz0gZGF0YWxlbjsKKyAgICAgICAgICAgICAgZGF0YWxlbiA9IDA7CisJICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChkaWdpdHAocCkpCisgICAgICAgICAgICBkYXRhbGVuID0gZGF0YWxlbioxMCArIGF0b2lfMShwKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplcnJvZmYgPSBjb3VudDsKKyAgICAgICAgICAgICAgKmVycmNvZGUgPSBHUEdfRVJSX1NFWFBfSU5WX0xFTl9TUEVDOworICAgICAgICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICcoJykKKyAgICAgICAgeworICAgICAgICAgIGlmIChkaXNwaGludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9VTk1BVENIRURfREg7CisgICAgICAgICAgICAgIHJldHVybiAwOworCSAgICB9CisgICAgICAgICAgbGV2ZWwrKzsKKwl9CisgICAgICBlbHNlIGlmICgqcCA9PSAnKScpCisgICAgICAgIHsgLyogd2FsayB1cCAqLworICAgICAgICAgIGlmICghbGV2ZWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplcnJvZmYgPSBjb3VudDsKKyAgICAgICAgICAgICAgKmVycmNvZGUgPSBHUEdfRVJSX1NFWFBfVU5NQVRDSEVEX1BBUkVOOworICAgICAgICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorICAgICAgICAgIGlmIChkaXNwaGludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9VTk1BVENIRURfREg7CisgICAgICAgICAgICAgIHJldHVybiAwOworCSAgICB9CisgICAgICAgICAgaWYgKCEtLWxldmVsKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7IC8qIHJlYWR5ICovCisJfQorICAgICAgZWxzZSBpZiAoKnAgPT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGRpc3BoaW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqZXJyb2ZmID0gY291bnQ7CisgICAgICAgICAgICAgICplcnJjb2RlID0gR1BHX0VSUl9TRVhQX05FU1RFRF9ESDsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgZGlzcGhpbnQgPSBwOworCX0KKyAgICAgIGVsc2UgaWYgKCpwID09ICddJykKKyAgICAgICAgeworICAgICAgICAgIGlmICggIWRpc3BoaW50ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9VTk1BVENIRURfREg7CisgICAgICAgICAgICAgIHJldHVybiAwOworCSAgICB9CisgICAgICAgICAgZGlzcGhpbnQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UgaWYgKGRpZ2l0cCAocCkgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCpwID09ICcwJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9aRVJPX1BSRUZJWDsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisJICAgIH0KKyAgICAgICAgICBkYXRhbGVuID0gYXRvaV8xIChwKTsKKwl9CisgICAgICBlbHNlIGlmICgqcCA9PSAnJicgfHwgKnAgPT0gJ1xcJykKKyAgICAgICAgeworICAgICAgICAgICplcnJvZmYgPSBjb3VudDsKKyAgICAgICAgICAqZXJyY29kZSA9IEdQR19FUlJfU0VYUF9VTkVYUEVDVEVEX1BVTkM7CisgICAgICAgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgKmVycm9mZiA9IGNvdW50OworICAgICAgICAgICplcnJjb2RlID0gR1BHX0VSUl9TRVhQX0JBRF9DSEFSQUNURVI7CisgICAgICAgICAgcmV0dXJuIDA7CisJfQorICAgIH0KK30KKworCisvKiBFeHRyYWN0IE1QSXMgZnJvbSBhbiBzLWV4cHJlc3Npb24gdXNpbmcgYSBsaXN0IG9mIHBhcmFtZXRlcnMuICBUaGUKKyAqIG5hbWVzIG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGdpdmVuIGJ5IHRoZSBzdHJpbmcgTElTVC4gIFNvbWUKKyAqIHNwZWNpYWwgY2hhcmFjdGVycyBtYXkgYmUgZ2l2ZW4gdG8gY29udHJvbCB0aGUgY29udmVyc2lvbjoKKyAqCisgKiAgICArIDo6IFN3aXRjaCB0byB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCAoZGVmYXVsdCkuCisgKiAgICAtIDo6IFN3aXRjaCB0byBzdGFuZGFyZCBzaWduZWQgZm9ybWF0LgorICogICAgLyA6OiBTd2l0Y2ggdG8gb3BhcXVlIGZvcm1hdC4KKyAqICAgICYgOjogU3dpdGNoIHRvIGJ1ZmZlciBkZXNjcmlwdG9yIG1vZGUgLSBzZWUgYmVsb3cuCisgKiAgICA/IDo6IFRoZSBwcmV2aW91cyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCisgKgorICogSW4gZ2VuZXJhbCBwYXJhbWV0ZXIgbmFtZXMgYXJlIHNpbmdsZSBsZXR0ZXJzLiAgVG8gdXNlIGEgc3RyaW5nIGZvcgorICogYSBwYXJhbWV0ZXIgbmFtZSwgZW5jbG9zZSB0aGUgbmFtZSBpbiBzaW5nbGUgcXVvdGVzLgorICoKKyAqIFVubGVzcyBpbiBnY3J5X2J1ZmZlcl90IG1vZGUgZm9yIGVhY2ggcGFyYW1ldGVyIG5hbWUgYSBwb2ludGVyIHRvCisgKiBhbiBNUEkgdmFyaWFibGUgaXMgZXhwZWN0ZWQgYW5kIGZpbmFsbHkgYSBOVUxMIGlzIGV4cGVjdGVkLgorICogRXhhbXBsZToKKyAqCisgKiAgIF9nY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoa2V5LCBOVUxMLCAibi94K2VkIiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXBpX24sICZtcGlfeCwgJm1waV9lLCBOVUxMKQorICoKKyAqIFRoaXMgc3RvcmVzIHRoZSBwYXJhbWV0ZXIgIk4iIGZyb20gS0VZIGFzIGFuIHVuc2lnbmVkIE1QSSBpbnRvCisgKiBNUElfTiwgdGhlIHBhcmFtZXRlciAiWCIgYXMgYW4gb3BhcXVlIE1QSSBpbnRvIE1QSV9YLCBhbmQgdGhlCisgKiBwYXJhbWV0ZXIgIkUiIGFnYWluIGFzIGFuIHVuc2lnbmVkIE1QSSBpbnRvIE1QSV9FLgorICoKKyAqIElmIGluIGJ1ZmZlciBkZXNjcmlwdG9yIG1vZGUgYSBwb2ludGVyIHRvIGdjcnlfYnVmZmVyX3QgZGVzY3JpcHRvcgorICogaXMgZXhwZWN0ZWQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYW4gTVBJLiAgVGhlIGNhbGxlciBtYXkgdXNlIHR3bworICogZGlmZmVyZW50IG9wZXJhdGlvbiBtb2RlczogSWYgdGhlIERBVEEgZmllbGQgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlcgorICogZGVzY3JpcHRvciBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIGEgbmV3IGJ1ZmZlciBhbmQgc3RvcmVzCisgKiBpdCBhdCBEQVRBOyB0aGUgb3RoZXIgZmllbGRzIGFyZSBzZXQgYWNjb3JkaW5nbHkgd2l0aCBPRkYgYmVpbmcgMC4KKyAqIElmIERBVEEgaXMgbm90IE5VTEwsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgREFUQSwgU0laRSwgYW5kIE9GRgorICogZGVzY3JpYmUgYSBidWZmZXIgd2hlcmUgdG8gYnV0IHRoZSBkYXRhOyBvbiByZXR1cm4gdGhlIExFTiBmaWVsZAorICogcmVjZWl2ZXMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdGhhdCBidWZmZXI7IGlmIHRoZSBidWZmZXIKKyAqIGlzIHRvbyBzbWFsbCwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHJldHVybnMgd2l0aCBhbiBlcnJvciBjb2RlCisgKiAoYW5kIExFTiBzZXQgdG8gMCkuCisgKgorICogUEFUSCBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdXNlZCB0byBsb2NhdGUgYSB0b2tlbi4gIFRoZSBleGNsYW1hdGlvbgorICogbWFyayBzZXBhcmF0ZWQgdG9rZW5zIGFyZSB1c2VkIHRvIHZpYSBnY3J5X3NleHBfZmluZF90b2tlbiB0byBmaW5kCisgKiBhIHN0YXJ0IHBvaW50IGluc2lkZSBTRVhQLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24gc3VjY2Vzcy4gIE9uIGVycm9yIGFuIGVycm9yIGNvZGUgaXMKKyAqIHJldHVybmVkIGFuZCB0aGUgcGFzc2VkIE1QSXMgYXJlIGVpdGhlciB1bmNoYW5nZWQgb3Igc2V0IHRvIE5VTEwuCisgKi8KK2dwZ19lcnJfY29kZV90CitfZ2NyeV9zZXhwX3ZleHRyYWN0X3BhcmFtIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGlzdCwgdmFfbGlzdCBhcmdfcHRyKQoreworICBncGdfZXJyX2NvZGVfdCByYzsKKyAgY29uc3QgY2hhciAqcywgKnMyOworICBnY3J5X21waV90ICphcnJheVsyMF07CisgIGNoYXIgYXJyYXlpc2Rlc2NbMjBdOworICBpbnQgaWR4OworICBnY3J5X3NleHBfdCBsMTsKKyAgaW50IG1vZGUgPSAnKyc7IC8qIERlZmF1bHQgdG8gR0NSWU1QSV9GTVRfVVNHLiAgKi8KKyAgZ2NyeV9zZXhwX3QgZnJlZXRoaXMgPSBOVUxMOworCisgIG1lbXNldCAoYXJyYXlpc2Rlc2MsIDAsIHNpemVvZiBhcnJheWlzZGVzYyk7CisKKyAgLyogRmlyc3QgY29weSBhbGwgdGhlIGFyZ3MgaW50byBhbiBhcnJheS4gIFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdAorICAgICB3ZSBhcmUgYWJsZSB0byByZWxlYXNlIGFscmVhZHkgYWxsb2NhdGVkIE1QSXMgaWYgbGF0ZXIgYW4gZXJyb3IKKyAgICAgd2FzIGZvdW5kLiAgKi8KKyAgZm9yIChzPWxpc3QsIGlkeD0wOyAqcyAmJiBpZHggPCBESU0gKGFycmF5KTsgcysrKQorICAgIHsKKyAgICAgIGlmICgqcyA9PSAnJicgfHwgKnMgPT0gJysnIHx8ICpzID09ICctJyB8fCAqcyA9PSAnLycgfHwgKnMgPT0gJz8nKQorICAgICAgICA7CisgICAgICBlbHNlIGlmICh3aGl0ZXNwYWNlcCAocykpCisgICAgICAgIDsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICgqcyA9PSAnXCcnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgIHMyID0gc3RyY2hyIChzLCAnXCcnKTsKKyAgICAgICAgICAgICAgaWYgKCFzMiB8fCBzMiA9PSBzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIENsb3NpbmcgcXVvdGUgbm90IGZvdW5kIG9yIGVtcHR5IHN0cmluZy4gICovCisgICAgICAgICAgICAgICAgICByZXR1cm4gR1BHX0VSUl9TWU5UQVg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzID0gczI7CisgICAgICAgICAgICB9CisgICAgICAgICAgYXJyYXlbaWR4XSA9IHZhX2FyZyAoYXJnX3B0ciwgZ2NyeV9tcGlfdCAqKTsKKyAgICAgICAgICBpZiAoIWFycmF5W2lkeF0pCisgICAgICAgICAgICByZXR1cm4gR1BHX0VSUl9NSVNTSU5HX1ZBTFVFOyAvKiBOVUxMIHBvaW50ZXIgZ2l2ZW4uICAqLworICAgICAgICAgIGlkeCsrOworICAgICAgICB9CisgICAgfQorICBpZiAoKnMpCisgICAgcmV0dXJuIEdQR19FUlJfTElNSVRfUkVBQ0hFRDsgIC8qIFRvbyBtYW55IGxpc3QgZWxlbWVudHMuICAqLworICBpZiAodmFfYXJnIChhcmdfcHRyLCBnY3J5X21waV90ICopKQorICAgIHJldHVybiBHUEdfRVJSX0lOVl9BUkc7ICAvKiBOb3QgZW5vdWdoIGxpc3QgZWxlbWVuZHMuICAqLworCisgIC8qIERyaWxsIGRvd24uICAqLworICB3aGlsZSAocGF0aCAmJiAqcGF0aCkKKyAgICB7CisgICAgICBzaXplX3QgbjsKKworICAgICAgcyA9IHN0cmNociAocGF0aCwgJyEnKTsKKyAgICAgIGlmIChzID09IHBhdGgpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IEdQR19FUlJfTk9UX0ZPVU5EOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgbiA9IHM/IHMgLSBwYXRoIDogMDsKKyAgICAgIGwxID0gX2djcnlfc2V4cF9maW5kX3Rva2VuIChzZXhwLCBwYXRoLCBuKTsKKyAgICAgIGlmICghbDEpCisgICAgICAgIHsKKyAgICAgICAgICByYyA9IEdQR19FUlJfTk9UX0ZPVU5EOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgc2V4cCA9IGwxOyBsMSA9IE5VTEw7CisgICAgICBzZXhwX3JlbGVhc2UgKGZyZWV0aGlzKTsKKyAgICAgIGZyZWV0aGlzID0gc2V4cDsKKyAgICAgIGlmIChuKQorICAgICAgICBwYXRoICs9IG4gKyAxOworICAgICAgZWxzZQorICAgICAgICBwYXRoID0gTlVMTDsKKyAgICB9CisKKworICAvKiBOb3cgZXh0cmFjdCBhbGwgcGFyYW1ldGVycy4gICovCisgIGZvciAocz1saXN0LCBpZHg9MDsgKnM7IHMrKykKKyAgICB7CisgICAgICBpZiAoKnMgPT0gJyYnIHx8ICpzID09ICcrJyB8fCAqcyA9PSAnLScgfHwgKnMgPT0gJy8nKQorICAgICAgICBtb2RlID0gKnM7CisgICAgICBlbHNlIGlmICh3aGl0ZXNwYWNlcCAocykpCisgICAgICAgIDsKKyAgICAgIGVsc2UgaWYgKCpzID09ICc/JykKKyAgICAgICAgOyAvKiBPbmx5IHVzZWQgdmlhIGxvb2thaGVhZC4gICovCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnMgPT0gJ1wnJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogRmluZCBjbG9zaW5nIHF1b3RlLCBmaW5kIHRva2VuLCBzZXQgUyB0byBjbG9zaW5nIHF1b3RlLiAgKi8KKyAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICBzMiA9IHN0cmNociAocywgJ1wnJyk7CisgICAgICAgICAgICAgIGlmICghczIgfHwgczIgPT0gcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBDbG9zaW5nIHF1b3RlIG5vdCBmb3VuZCBvciBlbXB0eSBzdHJpbmcuICAqLworICAgICAgICAgICAgICAgICAgcmMgPSBHUEdfRVJSX1NZTlRBWDsKKyAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGwxID0gX2djcnlfc2V4cF9maW5kX3Rva2VuIChzZXhwLCBzLCBzMiAtIHMpOworICAgICAgICAgICAgICBzID0gczI7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbDEgPSBfZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNleHAsIHMsIDEpOworCisgICAgICAgICAgaWYgKCFsMSAmJiBzWzFdID09ICc/JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogT3B0aW9uYWwgZWxlbWVudCBub3QgZm91bmQuICAqLworICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnJicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ2NyeV9idWZmZXJfdCAqc3BlYyA9IChnY3J5X2J1ZmZlcl90KilhcnJheVtpZHhdOworICAgICAgICAgICAgICAgICAgaWYgKCFzcGVjLT5kYXRhKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgc3BlYy0+c2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgc3BlYy0+b2ZmID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgc3BlYy0+bGVuID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqYXJyYXlbaWR4XSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIWwxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByYyA9IEdQR19FUlJfTk9fT0JKOyAgLyogTGlzdCBlbGVtZW50IG5vdCBmb3VuZC4gICovCisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnJicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ2NyeV9idWZmZXJfdCAqc3BlYyA9IChnY3J5X2J1ZmZlcl90KilhcnJheVtpZHhdOworCisgICAgICAgICAgICAgICAgICBpZiAoc3BlYy0+ZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBidWY7CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5idWY7CisKKyAgICAgICAgICAgICAgICAgICAgICBwYnVmID0gX2djcnlfc2V4cF9udGhfZGF0YSAobDEsIDEsICZuYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBidWYgfHwgIW5idWYpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gR1BHX0VSUl9JTlZfT0JKOworICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWMtPm9mZiArIG5idWYgPiBzcGVjLT5zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAoKGNoYXIqKXNwZWMtPmRhdGEgKyBzcGVjLT5vZmYsIHBidWYsIG5idWYpOworICAgICAgICAgICAgICAgICAgICAgIHNwZWMtPmxlbiA9IG5idWY7CisgICAgICAgICAgICAgICAgICAgICAgYXJyYXlpc2Rlc2NbaWR4XSA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHNwZWMtPmRhdGEgPSBfZ2NyeV9zZXhwX250aF9idWZmZXIgKGwxLCAxLCAmc3BlYy0+c2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGVjLT5kYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsgLyogT3Igb3V0IG9mIGNvcmUuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgc3BlYy0+bGVuID0gc3BlYy0+c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICBzcGVjLT5vZmYgPSAwOworICAgICAgICAgICAgICAgICAgICAgIGFycmF5aXNkZXNjW2lkeF0gPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09ICcvJykKKyAgICAgICAgICAgICAgICAqYXJyYXlbaWR4XSA9IF9nY3J5X3NleHBfbnRoX21waSAobDEsIDEsIEdDUllNUElfRk1UX09QQVFVRSk7CisgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJy0nKQorICAgICAgICAgICAgICAgICphcnJheVtpZHhdID0gX2djcnlfc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfU1REKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICphcnJheVtpZHhdID0gX2djcnlfc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgICAgICAgICAgc2V4cF9yZWxlYXNlIChsMSk7IGwxID0gTlVMTDsKKyAgICAgICAgICAgICAgaWYgKCEqYXJyYXlbaWR4XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICByYyA9IEdQR19FUlJfSU5WX09CSjsgIC8qIENvbnZlcnNpb24gZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgc2V4cF9yZWxlYXNlIChmcmVldGhpcyk7CisgIHJldHVybiAwOworCisgY2xlYW51cDoKKyAgc2V4cF9yZWxlYXNlIChmcmVldGhpcyk7CisgIHNleHBfcmVsZWFzZSAobDEpOworICB3aGlsZSAoaWR4LS0pCisgICAgeworICAgICAgaWYgKCFhcnJheWlzZGVzY1tpZHhdKQorICAgICAgICB7CisgICAgICAgICAgX2djcnlfbXBpX3JlbGVhc2UgKCphcnJheVtpZHhdKTsKKyAgICAgICAgICAqYXJyYXlbaWR4XSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFhcnJheWlzZGVzY1tpZHhdID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDYWxsZXIgcHJvdmlkZWQgYnVmZmVyLiAgKi8KKyAgICAgICAgICBnY3J5X2J1ZmZlcl90ICpzcGVjID0gKGdjcnlfYnVmZmVyX3QqKWFycmF5W2lkeF07CisgICAgICAgICAgc3BlYy0+bGVuID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogV2UgbWlnaHQgaGF2ZSBhbGxvY2F0ZWQgYSBidWZmZXIuICAqLworICAgICAgICAgIGdjcnlfYnVmZmVyX3QgKnNwZWMgPSAoZ2NyeV9idWZmZXJfdCopYXJyYXlbaWR4XTsKKyAgICAgICAgICB4ZnJlZSAoc3BlYy0+ZGF0YSk7CisgICAgICAgICAgc3BlYy0+ZGF0YSA9IE5VTEw7CisgICAgICAgICAgc3BlYy0+c2l6ZSA9IHNwZWMtPm9mZiA9IHNwZWMtPmxlbiA9IDA7CisgICAgICAgIH0KKyAgICAgfQorICByZXR1cm4gcmM7Cit9CisKK2dwZ19lcnJvcl90CitfZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpc3QsIC4uLikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGxpc3QpOworICByYyA9IF9nY3J5X3NleHBfdmV4dHJhY3RfcGFyYW0gKHNleHAsIHBhdGgsIGxpc3QsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICByZXR1cm4gZ3BnX2Vycm9yIChyYyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RkbWVtLmMgYi9zcmMvc3RkbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5ZGEzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGRtZW0uYwpAQCAtMCwwICsxLDI0MiBAQAorLyogc3RkbWVtLmMgIC0JcHJpdmF0ZSBtZW1vcnkgYWxsb2NhdG9yCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDIsIDIwMDUsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBEZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXJlZCBtZW1vcnkgbWFuYWdlbWVudCBpbiBMaWJnY3J5cHQ6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZXJdCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgLworICogICAgICAgICAgICAgICAgICAgZ2xvYmFsLmM6IFtNTSBlbnRyYW5jZSBwb2ludHNdICAgLS0tLS0+IFt1c2VyIGNhbGxiYWNrc10KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgLyAgICAgICAgXCAvCisgKgorICogICAgICBzdGRtZW0uYzogW25vbi1zZWN1cmUgaGFuZGxlcnNdIFtzZWN1cmUgaGFuZGxlcnNdCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgLyAgICAgICBcIC8KKyAqCisgKiAgICAgICAgICAgICAgICAgIHN0ZG1lbS5jOiBbIG1lbW9yeSBndWFyZCBdCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgLyAgICAgICBcIC8KKyAqCisgKiAgICAgICAgICAgbGliYzogWyBNTSBmdW5jdGlvbnMgXSAgICAgc2VjbWVtLmM6IFsgc2VjdXJlIE1NIGZ1bmN0aW9uc10KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZzEwbGliLmgiCisjaW5jbHVkZSAic3RkbWVtLmgiCisjaW5jbHVkZSAic2VjbWVtLmgiCisKKwwKKworI2RlZmluZSBNQUdJQ19OT1JfQllURSAweDU1CisjZGVmaW5lIE1BR0lDX1NFQ19CWVRFIDB4Y2MKKyNkZWZpbmUgTUFHSUNfRU5EX0JZVEUgMHhhYQorCisjaWYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gOAorI2RlZmluZSBFWFRSQV9BTElHTiA0CisjZWxzZQorI2RlZmluZSBFWFRSQV9BTElHTiAwCisjZW5kaWYKKworCitzdGF0aWMgaW50IHVzZV9tX2d1YXJkID0gMDsKKworLyoqKioqKioqKioqKioqKioKKyAqIFdhcm5pbmc6IE5ldmVyIHVzZSB0aGlzIGZ1bmN0aW9uIGFmdGVyIGFueSBvZiB0aGUgZnVuY3Rpb25zCisgKiBoZXJlIGhhdmUgYmVlbiB1c2VkLgorICovCit2b2lkCitfZ2NyeV9wcml2YXRlX2VuYWJsZV9tX2d1YXJkICh2b2lkKQoreworICB1c2VfbV9ndWFyZCA9IDE7Cit9CisKKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBvZiBzaXplIG4uCisgKiBSZXR1cm4gTlVMTCBpZiB3ZSBhcmUgb3V0IG9mIG1lbW9yeS4KKyAqLwordm9pZCAqCitfZ2NyeV9wcml2YXRlX21hbGxvYyAoc2l6ZV90IG4pCit7CisgIGlmICghbikKKyAgICB7CisgICAgICBncGdfZXJyX3NldF9lcnJubyAoRUlOVkFMKTsKKyAgICAgIHJldHVybiBOVUxMOyAvKiBBbGxvY2F0aW5nIDAgYnl0ZXMgaXMgdW5kZWZpbmVkIC0gd2UgYmV0dGVyIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgIGFuIGVycm9yIHRvIGRldGVjdCBzdWNoIGNvZGluZyBlcnJvcnMuICAqLworICAgIH0KKworICBpZiAodXNlX21fZ3VhcmQpCisgICAgeworICAgICAgY2hhciAqcDsKKworICAgICAgaWYgKCAhKHAgPSBtYWxsb2MgKG4gKyBFWFRSQV9BTElHTis1KSkgKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICgoYnl0ZSopcClbRVhUUkFfQUxJR04rMF0gPSBuOworICAgICAgKChieXRlKilwKVtFWFRSQV9BTElHTisxXSA9IG4gPj4gOCA7CisgICAgICAoKGJ5dGUqKXApW0VYVFJBX0FMSUdOKzJdID0gbiA+PiAxNiA7CisgICAgICAoKGJ5dGUqKXApW0VYVFJBX0FMSUdOKzNdID0gTUFHSUNfTk9SX0JZVEU7CisgICAgICBwWzQrRVhUUkFfQUxJR04rbl0gPSBNQUdJQ19FTkRfQllURTsKKyAgICAgIHJldHVybiBwK0VYVFJBX0FMSUdOKzQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIG1hbGxvYyggbiApOworICAgIH0KK30KKworCisvKgorICogQWxsb2NhdGUgbWVtb3J5IG9mIHNpemUgTiBmcm9tIHRoZSBzZWN1cmUgbWVtb3J5IHBvb2wuICBSZXR1cm4gTlVMTAorICogaWYgd2UgYXJlIG91dCBvZiBtZW1vcnkuCisgKi8KK3ZvaWQgKgorX2djcnlfcHJpdmF0ZV9tYWxsb2Nfc2VjdXJlIChzaXplX3QgbikKK3sKKyAgaWYgKCFuKQorICAgIHsKKyAgICAgIGdwZ19lcnJfc2V0X2Vycm5vIChFSU5WQUwpOworICAgICAgcmV0dXJuIE5VTEw7IC8qIEFsbG9jYXRpbmcgMCBieXRlcyBpcyB1bmRlZmluZWQgLSBiZXR0ZXIgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgdG8gZGV0ZWN0IHN1Y2ggY29kaW5nIGVycm9ycy4gICovCisgICAgfQorCisgIGlmICh1c2VfbV9ndWFyZCkKKyAgICB7CisgICAgICBjaGFyICpwOworCisgICAgICBpZiAoICEocCA9IF9nY3J5X3NlY21lbV9tYWxsb2MgKG4gK0VYVFJBX0FMSUdOKyA1KSkgKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICgoYnl0ZSopcClbRVhUUkFfQUxJR04rMF0gPSBuOworICAgICAgKChieXRlKilwKVtFWFRSQV9BTElHTisxXSA9IG4gPj4gOCA7CisgICAgICAoKGJ5dGUqKXApW0VYVFJBX0FMSUdOKzJdID0gbiA+PiAxNiA7CisgICAgICAoKGJ5dGUqKXApW0VYVFJBX0FMSUdOKzNdID0gTUFHSUNfU0VDX0JZVEU7CisgICAgICBwWzQrRVhUUkFfQUxJR04rbl0gPSBNQUdJQ19FTkRfQllURTsKKyAgICAgIHJldHVybiBwK0VYVFJBX0FMSUdOKzQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIF9nY3J5X3NlY21lbV9tYWxsb2MoIG4gKTsKKyAgICB9Cit9CisKKworLyoKKyAqIFJlYWxsb2MgYW5kIGNsZWFyIHRoZSBvbGQgc3BhY2UKKyAqIFJldHVybiBOVUxMIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5LgorICovCit2b2lkICoKK19nY3J5X3ByaXZhdGVfcmVhbGxvYyAoIHZvaWQgKmEsIHNpemVfdCBuICkKK3sKKyAgaWYgKHVzZV9tX2d1YXJkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBhOworICAgICAgY2hhciAqYjsKKyAgICAgIHNpemVfdCBsZW47CisKKyAgICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIF9nY3J5X3ByaXZhdGVfbWFsbG9jKG4pOworCisgICAgICBfZ2NyeV9wcml2YXRlX2NoZWNrX2hlYXAocCk7CisgICAgICBsZW4gID0gcFstNF07CisgICAgICBsZW4gfD0gcFstM10gPDwgODsKKyAgICAgIGxlbiB8PSBwWy0yXSA8PCAxNjsKKyAgICAgIGlmKCBsZW4gPj0gbiApIC8qIFdlIGRvbid0IHNocmluayBmb3Igbm93LiAqLworICAgICAgICByZXR1cm4gYTsKKyAgICAgIGlmIChwWy0xXSA9PSBNQUdJQ19TRUNfQllURSkKKyAgICAgICAgYiA9IF9nY3J5X3ByaXZhdGVfbWFsbG9jX3NlY3VyZShuKTsKKyAgICAgIGVsc2UKKyAgICAgICAgYiA9IF9nY3J5X3ByaXZhdGVfbWFsbG9jKG4pOworICAgICAgaWYgKCFiKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIG1lbWNweSAoYiwgYSwgbGVuKTsKKyAgICAgIG1lbXNldCAoYitsZW4sIDAsIG4tbGVuKTsKKyAgICAgIF9nY3J5X3ByaXZhdGVfZnJlZSAocCk7CisgICAgICByZXR1cm4gYjsKKyAgICB9CisgIGVsc2UgaWYgKCBfZ2NyeV9wcml2YXRlX2lzX3NlY3VyZShhKSApCisgICAgeworICAgICAgcmV0dXJuIF9nY3J5X3NlY21lbV9yZWFsbG9jKCBhLCBuICk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIHJlYWxsb2MoIGEsIG4gKTsKKyAgICB9Cit9CisKKwordm9pZAorX2djcnlfcHJpdmF0ZV9jaGVja19oZWFwIChjb25zdCB2b2lkICphKQoreworICBpZiAodXNlX21fZ3VhcmQpCisgICAgeworICAgICAgY29uc3QgYnl0ZSAqcCA9IGE7CisgICAgICBzaXplX3QgbGVuOworCisgICAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKworICAgICAgaWYgKCAhKHBbLTFdID09IE1BR0lDX05PUl9CWVRFIHx8IHBbLTFdID09IE1BR0lDX1NFQ19CWVRFKSApCisgICAgICAgIF9nY3J5X2xvZ19mYXRhbCAoIm1lbW9yeSBhdCAlcCBjb3JydXB0ZWQgKHVuZGVyZmxvdz0lMDJ4KVxuIiwgcCwgcFstMV0pOworICAgICAgbGVuICA9IHBbLTRdOworICAgICAgbGVuIHw9IHBbLTNdIDw8IDg7CisgICAgICBsZW4gfD0gcFstMl0gPDwgMTY7CisgICAgICBpZiAoIHBbbGVuXSAhPSBNQUdJQ19FTkRfQllURSApCisgICAgICAgIF9nY3J5X2xvZ19mYXRhbCAoIm1lbW9yeSBhdCAlcCBjb3JydXB0ZWQgKG92ZXJmbG93PSUwMngpXG4iLCBwLCBwWy0xXSk7CisgICAgfQorfQorCisKKy8qCisgKiBGcmVlIGEgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBieSB0aGlzIG9yIHRoZSBzZWNtZW0gbW9kdWxlCisgKi8KK3ZvaWQKK19nY3J5X3ByaXZhdGVfZnJlZSAodm9pZCAqYSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IGE7CisKKyAgaWYgKCFwKQorICAgIHJldHVybjsKKyAgaWYgKHVzZV9tX2d1YXJkICkKKyAgICB7CisgICAgICBfZ2NyeV9wcml2YXRlX2NoZWNrX2hlYXAocCk7CisgICAgICBpZiAoIF9nY3J5X3ByaXZhdGVfaXNfc2VjdXJlKGEpICkKKyAgICAgICAgX2djcnlfc2VjbWVtX2ZyZWUocC1FWFRSQV9BTElHTi00KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGZyZWUocC1FWFRSQV9BTElHTi00KTsKKwl9CisgICAgfQorICBlbHNlIGlmICggX2djcnlfcHJpdmF0ZV9pc19zZWN1cmUoYSkgKQorICAgIF9nY3J5X3NlY21lbV9mcmVlKHApOworICBlbHNlCisgICAgZnJlZShwKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9zdGRtZW0uaCBiL3NyYy9zdGRtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc2ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0ZG1lbS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIHN0ZG1lbS5oIC0gIGludGVybmFsIGRlZmluaXRpb25zIGZvciBzdGRtZW0KKyAqCUNvcHlyaWdodCAoQykgMjAwMCwgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBnZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2lmbmRlZiBHMTBfU1RETUVNX0gKKyNkZWZpbmUgRzEwX1NURE1FTV9IIDEKKwordm9pZCBfZ2NyeV9wcml2YXRlX2VuYWJsZV9tX2d1YXJkKHZvaWQpOworCit2b2lkICpfZ2NyeV9wcml2YXRlX21hbGxvYyAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3ByaXZhdGVfbWFsbG9jX3NlY3VyZSAoc2l6ZV90IG4pIF9HQ1JZX0dDQ19BVFRSX01BTExPQzsKK3ZvaWQgKl9nY3J5X3ByaXZhdGVfcmVhbGxvYyAodm9pZCAqYSwgc2l6ZV90IG4pOwordm9pZCBfZ2NyeV9wcml2YXRlX2NoZWNrX2hlYXAgKGNvbnN0IHZvaWQgKmEpOwordm9pZCBfZ2NyeV9wcml2YXRlX2ZyZWUgKHZvaWQgKmEpOworCisjZW5kaWYgLyogRzEwX1NURE1FTV9IICovCmRpZmYgLS1naXQgYS9zcmMvdHlwZXMuaCBiL3NyYy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGE2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdHlwZXMuaApAQCAtMCwwICsxLDEyOCBAQAorLyogdHlwZXMuaCAtIHNvbWUgY29tbW9uIHR5cGVkZWZzCisgKglDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZm5kZWYgR0NSWVBUX1RZUEVTX0gKKyNkZWZpbmUgR0NSWVBUX1RZUEVTX0gKKworCisvKiBUaGUgQUNfQ0hFQ0tfU0laRU9GKCkgaW4gY29uZmlndXJlIGZhaWxzIGZvciBzb21lIG1hY2hpbmVzLgorICogd2UgcHJvdmlkZSBzb21lIGZhbGxiYWNrIHZhbHVlcyBoZXJlICovCisjaWYgIVNJWkVPRl9VTlNJR05FRF9TSE9SVAorI3VuZGVmIFNJWkVPRl9VTlNJR05FRF9TSE9SVAorI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfU0hPUlQgMgorI2VuZGlmCisjaWYgIVNJWkVPRl9VTlNJR05FRF9JTlQKKyN1bmRlZiBTSVpFT0ZfVU5TSUdORURfSU5UCisjZGVmaW5lIFNJWkVPRl9VTlNJR05FRF9JTlQgNAorI2VuZGlmCisjaWYgIVNJWkVPRl9VTlNJR05FRF9MT05HCisjdW5kZWYgU0laRU9GX1VOU0lHTkVEX0xPTkcKKyNkZWZpbmUgU0laRU9GX1VOU0lHTkVEX0xPTkcgNAorI2VuZGlmCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisKKyNpZm5kZWYgSEFWRV9CWVRFX1RZUEVERUYKKyN1bmRlZiBieXRlCSAgICAvKiBtYXliZSB0aGVyZSBpcyBhIG1hY3JvIHdpdGggdGhpcyBuYW1lICovCisvKiBXaW5kb3dzIHR5cGVkZWZzIGJ5dGUgaW4gdGhlIHJwYyBoZWFkZXJzLiAgQXZvaWQgd2FybmluZyBhYm91dAorICAgZG91YmxlIGRlZmluaXRpb24uICAqLworI2lmICEoZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoY2JORFJDb250ZXh0KSkKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJ5dGU7CisjZW5kaWYKKyNkZWZpbmUgSEFWRV9CWVRFX1RZUEVERUYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVVNIT1JUX1RZUEVERUYKKyN1bmRlZiB1c2hvcnQgICAgIC8qIG1heWJlIHRoZXJlIGlzIGEgbWFjcm8gd2l0aCB0aGlzIG5hbWUgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CisjZGVmaW5lIEhBVkVfVVNIT1JUX1RZUEVERUYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVUxPTkdfVFlQRURFRgorI3VuZGVmIHVsb25nCSAgICAvKiBtYXliZSB0aGVyZSBpcyBhIG1hY3JvIHdpdGggdGhpcyBuYW1lICovCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKKyNkZWZpbmUgSEFWRV9VTE9OR19UWVBFREVGCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1UxNl9UWVBFREVGCisjdW5kZWYgdTE2CSAgICAvKiBtYXliZSB0aGVyZSBpcyBhIG1hY3JvIHdpdGggdGhpcyBuYW1lICovCisjaWYgU0laRU9GX1VOU0lHTkVEX0lOVCA9PSAyCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1MTY7CisjZWxpZiBTSVpFT0ZfVU5TSUdORURfU0hPUlQgPT0gMgorICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworI2Vsc2UKKyNlcnJvciBubyB0eXBlZGVmIGZvciB1MTYKKyNlbmRpZgorI2RlZmluZSBIQVZFX1UxNl9UWVBFREVGCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1UzMl9UWVBFREVGCisjdW5kZWYgdTMyCSAgICAvKiBtYXliZSB0aGVyZSBpcyBhIG1hY3JvIHdpdGggdGhpcyBuYW1lICovCisjaWYgU0laRU9GX1VOU0lHTkVEX0lOVCA9PSA0CisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworI2VsaWYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gNAorICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1MzI7CisjZWxzZQorI2Vycm9yIG5vIHR5cGVkZWYgZm9yIHUzMgorI2VuZGlmCisjZGVmaW5lIEhBVkVfVTMyX1RZUEVERUYKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKgorICogV2FybmluZzogU29tZSBzeXN0ZW1zIHNlZ2ZhdWx0IHdoZW4gdGhpcyB1NjQgdHlwZWRlZiBhbmQKKyAqIHRoZSBkdW1teSBjb2RlIGluIGNpcGhlci9tZC5jIGlzIG5vdCBhdmFpbGFibGUuICBFeGFtcGxlcyBhcmUKKyAqIFNvbGFyaXMgYW5kIElSSVguCisgKi8KKyNpZm5kZWYgSEFWRV9VNjRfVFlQRURFRgorI3VuZGVmIHU2NAkgICAgLyogbWF5YmUgdGhlcmUgaXMgYSBtYWNybyB3aXRoIHRoaXMgbmFtZSAqLworI2lmIFNJWkVPRl9VTlNJR05FRF9JTlQgPT0gOAorICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU2NDsKKyNkZWZpbmUgVTY0X0MoYykgKGMgIyMgVSkKKyNkZWZpbmUgSEFWRV9VNjRfVFlQRURFRgorI2VsaWYgU0laRU9GX1VOU0lHTkVEX0xPTkcgPT0gOAorICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NjQ7CisjZGVmaW5lIFU2NF9DKGMpIChjICMjIFVMKQorI2RlZmluZSBIQVZFX1U2NF9UWVBFREVGCisjZWxpZiBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HID09IDgKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisjZGVmaW5lIFU2NF9DKGMpIChjICMjIFVMTCkKKyNkZWZpbmUgSEFWRV9VNjRfVFlQRURFRgorI2VsaWYgU0laRU9GX1VJTlQ2NF9UID09IDgKKyAgICB0eXBlZGVmIHVpbnQ2NF90IHU2NDsKKyNkZWZpbmUgVTY0X0MoYykgKFVJTlQ2NF9DKGMpKQorI2RlZmluZSBIQVZFX1U2NF9UWVBFREVGCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIHsKKyAgICBpbnQgYTsKKyAgICBzaG9ydCBiOworICAgIGNoYXIgY1sxXTsKKyAgICBsb25nIGQ7CisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorICAgIHU2NCBlOworI2VuZGlmCisgICAgZmxvYXQgZjsKKyAgICBkb3VibGUgZzsKK30gUFJPUEVSTFlfQUxJR05FRF9UWVBFOworCisjZW5kaWYgLypHQ1JZUFRfVFlQRVNfSCovCmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbmluZm8ucmMuaW4gYi9zcmMvdmVyc2lvbmluZm8ucmMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5OTUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92ZXJzaW9uaW5mby5yYy5pbgpAQCAtMCwwICsxLDUxIEBACisvKiB2ZXJzaW9uaW5mby5yYy5pbiAtIGZvciBsaWJnY3J5cHQKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworICogdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgKiBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiBUaGlzIGZpbGUgaXMgcHJvY2Vzc2VkIGJ5IGNvbmZpZ3VyZSB0byBjcmVhdGUgdmVyc2lvbmluZm8ucmMgKi8KKworI2xpbmUgX19MSU5FX18gInZlcnNpb25pbmZvLnJjLmluIgorCisjaW5jbHVkZSA8YWZ4cmVzLmg+CisKKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gQEJVSUxEX0ZJTEVWRVJTSU9OQAorIFBST0RVQ1RWRVJTSU9OIEBCVUlMRF9GSUxFVkVSU0lPTkAKKyBGSUxFRkxBR1NNQVNLIDB4M2ZMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIDB4MjFMCisjZWxzZQorIEZJTEVGTEFHUyAweDIwTAorI2VuZGlmCisgRklMRU9TIDB4NDAwMDRMCisgRklMRVRZUEUgMHgxTAorIEZJTEVTVUJUWVBFIDB4MEwKK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwNDA5MDRiMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJQcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTHYyLjErKS5cMCIKKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJnMTAgQ29kZSBHbWJIXDAiCisgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkxpYmdjcnlwdCAtIFRoZSBHTlUgQ3J5cHRvIExpYnJhcnlcMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICJATElCR0NSWVBUX0xUX0NVUlJFTlRALkBMSUJHQ1JZUFRfTFRfQUdFQC5ATElCR0NSWVBUX0xUX1JFVklTSU9OQC5AQlVJTERfUkVWSVNJT05AXDAiCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYmdjcnlwdFwwIgorICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlwwIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZ2NyeXB0LmRsbFwwIgorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJsaWJnY3J5cHRcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICJAVkVSU0lPTkBcMCIKKyAgICAgICAgICAgIFZBTFVFICJTcGVjaWFsQnVpbGQiLCAiQEJVSUxEX1RJTUVTVEFNUEBcMCIKKyAgICAgICAgRU5ECisgICAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL3NyYy92aXNpYmlsaXR5LmMgYi9zcmMvdmlzaWJpbGl0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODk0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmlzaWJpbGl0eS5jCkBAIC0wLDAgKzEsMTUzMiBAQAorLyogdmlzaWJpbGl0eS5jIC0gV3JhcHBlciBmb3IgYWxsIHB1YmxpYyBmdW5jdGlvbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzICBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZSBfR0NSWV9JTkNMVURFRF9CWV9WSVNJQklMSVRZX0MKKyNpbmNsdWRlICJnMTBsaWIuaCIKKyNpbmNsdWRlICJjaXBoZXItcHJvdG8uaCIKKyNpbmNsdWRlICJjb250ZXh0LmgiCisjaW5jbHVkZSAibXBpLmgiCisKK2NvbnN0IGNoYXIgKgorZ2NyeV9zdHJlcnJvciAoZ2NyeV9lcnJvcl90IGVycikKK3sKKyAgcmV0dXJuIF9nY3J5X3N0cmVycm9yIChlcnIpOworfQorCitjb25zdCBjaGFyICoKK2djcnlfc3Ryc291cmNlIChnY3J5X2Vycm9yX3QgZXJyKQoreworICByZXR1cm4gX2djcnlfc3Ryc291cmNlIChlcnIpOworfQorCitnY3J5X2Vycl9jb2RlX3QKK2djcnlfZXJyX2NvZGVfZnJvbV9lcnJubyAoaW50IGVycikKK3sKKyAgcmV0dXJuIF9nY3J5X2Vycl9jb2RlX2Zyb21fZXJybm8gKGVycik7Cit9CisKK2ludAorZ2NyeV9lcnJfY29kZV90b19lcnJubyAoZ2NyeV9lcnJfY29kZV90IGNvZGUpCit7CisgIHJldHVybiBfZ2NyeV9lcnJfY29kZV90b19lcnJubyAoY29kZSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9lcnJfbWFrZV9mcm9tX2Vycm5vIChnY3J5X2Vycl9zb3VyY2VfdCBzb3VyY2UsIGludCBlcnIpCit7CisgIHJldHVybiBfZ2NyeV9lcnJfbWFrZV9mcm9tX2Vycm5vIChzb3VyY2UsIGVycik7Cit9CisKK2djcnlfZXJyX2NvZGVfdAorZ2NyeV9lcnJvcl9mcm9tX2Vycm5vIChpbnQgZXJyKQoreworICByZXR1cm4gX2djcnlfZXJyb3JfZnJvbV9lcnJubyAoZXJyKTsKK30KKworY29uc3QgY2hhciAqCitnY3J5X2NoZWNrX3ZlcnNpb24gKGNvbnN0IGNoYXIgKnJlcV92ZXJzaW9uKQoreworICByZXR1cm4gX2djcnlfY2hlY2tfdmVyc2lvbiAocmVxX3ZlcnNpb24pOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfY29udHJvbCAoZW51bSBnY3J5X2N0bF9jbWRzIGNtZCwgLi4uKQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGNtZCk7CisgIGVyciA9IGdwZ19lcnJvciAoX2djcnlfdmNvbnRyb2wgKGNtZCwgYXJnX3B0cikpOworICB2YV9lbmQoYXJnX3B0cik7CisgIHJldHVybiBlcnI7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9zZXhwX25ldyAoZ2NyeV9zZXhwX3QgKnJldHNleHAsCisgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICBpbnQgYXV0b2RldGVjdCkKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfc2V4cF9uZXcgKHJldHNleHAsIGJ1ZmZlciwgbGVuZ3RoLCBhdXRvZGV0ZWN0KSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9zZXhwX2NyZWF0ZSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsCisgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQgYXV0b2RldGVjdCwgdm9pZCAoKmZyZWVmbmMpICh2b2lkICopKQoreworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9zZXhwX2NyZWF0ZSAocmV0c2V4cCwgYnVmZmVyLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZGV0ZWN0LCBmcmVlZm5jKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9zZXhwX3NzY2FuIChnY3J5X3NleHBfdCAqcmV0c2V4cCwgc2l6ZV90ICplcnJvZmYsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfc2V4cF9zc2NhbiAocmV0c2V4cCwgZXJyb2ZmLCBidWZmZXIsIGxlbmd0aCkpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfc2V4cF9idWlsZCAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHJjID0gX2djcnlfc2V4cF92YnVpbGQgKHJldHNleHAsIGVycm9mZiwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgcmV0dXJuIGdwZ19lcnJvciAocmMpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfc2V4cF9idWlsZF9hcnJheSAoZ2NyeV9zZXhwX3QgKnJldHNleHAsIHNpemVfdCAqZXJyb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZvaWQgKiphcmdfbGlzdCkKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfc2V4cF9idWlsZF9hcnJheSAocmV0c2V4cCwgZXJyb2ZmLCBmb3JtYXQsIGFyZ19saXN0KSk7Cit9CisKK3ZvaWQKK2djcnlfc2V4cF9yZWxlYXNlIChnY3J5X3NleHBfdCBzZXhwKQoreworICBfZ2NyeV9zZXhwX3JlbGVhc2UgKHNleHApOworfQorCitzaXplX3QKK2djcnlfc2V4cF9jYW5vbl9sZW4gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZXJyb2ZmLCBnY3J5X2Vycm9yX3QgKmVycmNvZGUpCit7CisgIHNpemVfdCBuOworICBncGdfZXJyX2NvZGVfdCByYzsKKworICBuID0gX2djcnlfc2V4cF9jYW5vbl9sZW4gKGJ1ZmZlciwgbGVuZ3RoLCBlcnJvZmYsICZyYyk7CisgIGlmIChlcnJjb2RlKQorICAgICplcnJjb2RlID0gZ3BnX2Vycm9yIChyYyk7CisgIHJldHVybiBuOworfQorCitzaXplX3QKK2djcnlfc2V4cF9zcHJpbnQgKGdjcnlfc2V4cF90IHNleHAsIGludCBtb2RlLCB2b2lkICpidWZmZXIsIHNpemVfdCBtYXhsZW5ndGgpCit7CisgIHJldHVybiBfZ2NyeV9zZXhwX3NwcmludCAoc2V4cCwgbW9kZSwgYnVmZmVyLCBtYXhsZW5ndGgpOworfQorCit2b2lkCitnY3J5X3NleHBfZHVtcCAoY29uc3QgZ2NyeV9zZXhwX3QgYSkKK3sKKyAgX2djcnlfc2V4cF9kdW1wIChhKTsKK30KKworZ2NyeV9zZXhwX3QKK2djcnlfc2V4cF9jb25zIChjb25zdCBnY3J5X3NleHBfdCBhLCBjb25zdCBnY3J5X3NleHBfdCBiKQoreworICByZXR1cm4gX2djcnlfc2V4cF9jb25zIChhLCBiKTsKK30KKworZ2NyeV9zZXhwX3QKK2djcnlfc2V4cF9hbGlzdCAoY29uc3QgZ2NyeV9zZXhwX3QgKmFycmF5KQoreworICByZXR1cm4gX2djcnlfc2V4cF9hbGlzdCAoYXJyYXkpOworfQorCitnY3J5X3NleHBfdAorZ2NyeV9zZXhwX3ZsaXN0IChjb25zdCBnY3J5X3NleHBfdCBhLCAuLi4pCit7CisgIC8qIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBzZXhwLmMuICAqLworICAodm9pZClhOworICBCVUcgKCk7CisgIHJldHVybiBOVUxMOworfQorCitnY3J5X3NleHBfdAorZ2NyeV9zZXhwX2FwcGVuZCAoY29uc3QgZ2NyeV9zZXhwX3QgYSwgY29uc3QgZ2NyeV9zZXhwX3QgbikKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfYXBwZW5kIChhLCBuKTsKK30KKworZ2NyeV9zZXhwX3QKK2djcnlfc2V4cF9wcmVwZW5kIChjb25zdCBnY3J5X3NleHBfdCBhLCBjb25zdCBnY3J5X3NleHBfdCBuKQoreworICByZXR1cm4gX2djcnlfc2V4cF9wcmVwZW5kIChhLCBuKTsKK30KKworCitnY3J5X3NleHBfdAorZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGdjcnlfc2V4cF90IGxpc3QsIGNvbnN0IGNoYXIgKnRvaywgc2l6ZV90IHRva2xlbikKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfZmluZF90b2tlbiAobGlzdCwgdG9rLCB0b2tsZW4pOworfQorCitpbnQKK2djcnlfc2V4cF9sZW5ndGggKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QpCit7CisgIHJldHVybiBfZ2NyeV9zZXhwX2xlbmd0aCAobGlzdCk7Cit9CisKK2djcnlfc2V4cF90CitnY3J5X3NleHBfbnRoIChjb25zdCBnY3J5X3NleHBfdCBsaXN0LCBpbnQgbnVtYmVyKQoreworICByZXR1cm4gX2djcnlfc2V4cF9udGggKGxpc3QsIG51bWJlcik7Cit9CisKK2djcnlfc2V4cF90CitnY3J5X3NleHBfY2FyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KQoreworICByZXR1cm4gX2djcnlfc2V4cF9jYXIgKGxpc3QpOworfQorCitnY3J5X3NleHBfdAorZ2NyeV9zZXhwX2NkciAoY29uc3QgZ2NyeV9zZXhwX3QgbGlzdCkKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfY2RyIChsaXN0KTsKK30KKworZ2NyeV9zZXhwX3QKK2djcnlfc2V4cF9jYWRyIChjb25zdCBnY3J5X3NleHBfdCBsaXN0KQoreworICByZXR1cm4gX2djcnlfc2V4cF9jYWRyIChsaXN0KTsKK30KKworY29uc3QgY2hhciAqCitnY3J5X3NleHBfbnRoX2RhdGEgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsIHNpemVfdCAqZGF0YWxlbikKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfbnRoX2RhdGEgKGxpc3QsIG51bWJlciwgZGF0YWxlbik7Cit9CisKK3ZvaWQgKgorZ2NyeV9zZXhwX250aF9idWZmZXIgKGNvbnN0IGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsIHNpemVfdCAqcmxlbmd0aCkKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfbnRoX2J1ZmZlciAobGlzdCwgbnVtYmVyLCBybGVuZ3RoKTsKK30KKworY2hhciAqCitnY3J5X3NleHBfbnRoX3N0cmluZyAoZ2NyeV9zZXhwX3QgbGlzdCwgaW50IG51bWJlcikKK3sKKyAgcmV0dXJuIF9nY3J5X3NleHBfbnRoX3N0cmluZyAobGlzdCwgbnVtYmVyKTsKK30KKworZ2NyeV9tcGlfdAorZ2NyeV9zZXhwX250aF9tcGkgKGdjcnlfc2V4cF90IGxpc3QsIGludCBudW1iZXIsIGludCBtcGlmbXQpCit7CisgIHJldHVybiBfZ2NyeV9zZXhwX250aF9tcGkgKGxpc3QsIG51bWJlciwgbXBpZm10KTsKK30KKworZ3BnX2Vycm9yX3QKK2djcnlfc2V4cF9leHRyYWN0X3BhcmFtIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpc3QsIC4uLikKK3sKKyAgZ2NyeV9lcnJfY29kZV90IHJjOworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGxpc3QpOworICByYyA9IF9nY3J5X3NleHBfdmV4dHJhY3RfcGFyYW0gKHNleHAsIHBhdGgsIGxpc3QsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICByZXR1cm4gZ3BnX2Vycm9yIChyYyk7Cit9CisKKworDAorZ2NyeV9tcGlfdAorZ2NyeV9tcGlfbmV3ICh1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfbmV3IChuYml0cyk7Cit9CisKK2djcnlfbXBpX3QKK2djcnlfbXBpX3NuZXcgKHVuc2lnbmVkIGludCBuYml0cykKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9zbmV3IChuYml0cyk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX3JlbGVhc2UgKGdjcnlfbXBpX3QgYSkKK3sKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGEpOworfQorCitnY3J5X21waV90CitnY3J5X21waV9jb3B5IChjb25zdCBnY3J5X21waV90IGEpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfY29weSAoYSk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX3NuYXRjaCAoZ2NyeV9tcGlfdCB3LCBjb25zdCBnY3J5X21waV90IHUpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfc25hdGNoICh3LCB1KTsKK30KKworZ2NyeV9tcGlfdAorZ2NyeV9tcGlfc2V0IChnY3J5X21waV90IHcsIGNvbnN0IGdjcnlfbXBpX3QgdSkKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9zZXQgKHcsIHUpOworfQorCitnY3J5X21waV90CitnY3J5X21waV9zZXRfdWkgKGdjcnlfbXBpX3QgdywgdW5zaWduZWQgbG9uZyB1KQoreworICByZXR1cm4gX2djcnlfbXBpX3NldF91aSAodywgdSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tcGlfZ2V0X3VpIChnY3J5X21waV90IHcsIHVuc2lnbmVkIGxvbmcgKnUpCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X21waV9nZXRfdWkgKHcsIHUpKTsKK30KKwordm9pZAorZ2NyeV9tcGlfc3dhcCAoZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IGIpCit7CisgIF9nY3J5X21waV9zd2FwIChhLCBiKTsKK30KKworaW50CitnY3J5X21waV9pc19uZWcgKGdjcnlfbXBpX3QgYSkKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9pc19uZWcgKGEpOworfQorCit2b2lkCitnY3J5X21waV9uZWcgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1KQoreworICBfZ2NyeV9tcGlfbmVnICh3LCB1KTsKK30KKwordm9pZAorZ2NyeV9tcGlfYWJzIChnY3J5X21waV90IHcpCit7CisgIF9nY3J5X21waV9hYnMgKHcpOworfQorCitpbnQKK2djcnlfbXBpX2NtcCAoY29uc3QgZ2NyeV9tcGlfdCB1LCBjb25zdCBnY3J5X21waV90IHYpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfY21wICh1LCB2KTsKK30KKworaW50CitnY3J5X21waV9jbXBfdWkgKGNvbnN0IGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2KQoreworICByZXR1cm4gX2djcnlfbXBpX2NtcF91aSAodSwgdik7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tcGlfc2NhbiAoZ2NyeV9tcGlfdCAqcmV0X21waSwgZW51bSBnY3J5X21waV9mb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgc2l6ZV90ICpuc2Nhbm5lZCkKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbXBpX3NjYW4gKHJldF9tcGksIGZvcm1hdCwgYnVmZmVyLCBidWZsZW4sIG5zY2FubmVkKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tcGlfcHJpbnQgKGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgc2l6ZV90ICpud3JpdHRlbiwKKyAgICAgICAgICAgICAgICBjb25zdCBnY3J5X21waV90IGEpCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X21waV9wcmludCAoZm9ybWF0LCBidWZmZXIsIGJ1ZmxlbiwgbndyaXR0ZW4sIGEpKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X21waV9hcHJpbnQgKGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmJ1ZmZlciwgc2l6ZV90ICpud3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9tcGlfdCBhKQoreworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tcGlfYXByaW50IChmb3JtYXQsIGJ1ZmZlciwgbndyaXR0ZW4sIGEpKTsKK30KKwordm9pZAorZ2NyeV9tcGlfZHVtcCAoY29uc3QgZ2NyeV9tcGlfdCBhKQoreworICBfZ2NyeV9sb2dfcHJpbnRtcGkgKE5VTEwsIGEpOworfQorCit2b2lkCitnY3J5X21waV9hZGQgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpCit7CisgIF9nY3J5X21waV9hZGQgKHcsIHUsIHYpOworfQorCit2b2lkCitnY3J5X21waV9hZGRfdWkgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBsb25nIHYpCit7CisgIF9nY3J5X21waV9hZGRfdWkgKHcsIHUsIHYpOworfQorCit2b2lkCitnY3J5X21waV9hZGRtIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2LCBnY3J5X21waV90IG0pCit7CisgIF9nY3J5X21waV9hZGRtICh3LCB1LCB2LCBtKTsKK30KKwordm9pZAorZ2NyeV9tcGlfc3ViIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgZ2NyeV9tcGlfdCB2KQoreworICBfZ2NyeV9tcGlfc3ViICh3LCB1LCB2KTsKK30KKwordm9pZAorZ2NyeV9tcGlfc3ViX3VpIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyB2ICkKK3sKKyAgX2djcnlfbXBpX3N1Yl91aSAodywgdSwgdik7Cit9CisKK3ZvaWQKK2djcnlfbXBpX3N1Ym0gKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYsIGdjcnlfbXBpX3QgbSkKK3sKKyAgX2djcnlfbXBpX3N1Ym0gKHcsIHUsIHYsIG0pOworfQorCit2b2lkCitnY3J5X21waV9tdWwgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCBnY3J5X21waV90IHYpCit7CisgIF9nY3J5X21waV9tdWwgKHcsIHUsIHYpOworfQorCit2b2lkCitnY3J5X21waV9tdWxfdWkgKGdjcnlfbXBpX3QgdywgZ2NyeV9tcGlfdCB1LCB1bnNpZ25lZCBsb25nIHYgKQoreworICBfZ2NyeV9tcGlfbXVsX3VpICh3LCB1LCB2KTsKK30KKwordm9pZAorZ2NyeV9tcGlfbXVsbSAoZ2NyeV9tcGlfdCB3LCBnY3J5X21waV90IHUsIGdjcnlfbXBpX3QgdiwgZ2NyeV9tcGlfdCBtKQoreworICBfZ2NyeV9tcGlfbXVsbSAodywgdSwgdiwgbSk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX211bF8yZXhwIChnY3J5X21waV90IHcsIGdjcnlfbXBpX3QgdSwgdW5zaWduZWQgbG9uZyBjbnQpCit7CisgIF9nY3J5X21waV9tdWxfMmV4cCAodywgdSwgY250KTsKK30KKwordm9pZAorZ2NyeV9tcGlfZGl2IChnY3J5X21waV90IHEsIGdjcnlfbXBpX3QgciwKKyAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBkaXZpZGVuZCwgZ2NyeV9tcGlfdCBkaXZpc29yLCBpbnQgcm91bmQpCit7CisgIF9nY3J5X21waV9kaXYgKHEsIHIsIGRpdmlkZW5kLCBkaXZpc29yLCByb3VuZCk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX21vZCAoZ2NyeV9tcGlfdCByLCBnY3J5X21waV90IGRpdmlkZW5kLCBnY3J5X21waV90IGRpdmlzb3IpCit7CisgIF9nY3J5X21waV9tb2QgKHIsIGRpdmlkZW5kLCBkaXZpc29yKTsKK30KKwordm9pZAorZ2NyeV9tcGlfcG93bSAoZ2NyeV9tcGlfdCB3LCBjb25zdCBnY3J5X21waV90IGIsIGNvbnN0IGdjcnlfbXBpX3QgZSwKKyAgICAgICAgICAgICAgIGNvbnN0IGdjcnlfbXBpX3QgbSkKK3sKKyAgX2djcnlfbXBpX3Bvd20gKHcsIGIsIGUsIG0pOworfQorCitpbnQKK2djcnlfbXBpX2djZCAoZ2NyeV9tcGlfdCBnLCBnY3J5X21waV90IGEsIGdjcnlfbXBpX3QgYikKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9nY2QgKGcsIGEsIGIpOworfQorCitpbnQKK2djcnlfbXBpX2ludm0gKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCBnY3J5X21waV90IG0pCit7CisgIHJldHVybiBfZ2NyeV9tcGlfaW52bSAoeCwgYSwgbSk7Cit9CisKK2djcnlfbXBpX3BvaW50X3QKK2djcnlfbXBpX3BvaW50X25ldyAodW5zaWduZWQgaW50IG5iaXRzKQoreworICByZXR1cm4gX2djcnlfbXBpX3BvaW50X25ldyAobmJpdHMpOworfQorCit2b2lkCitnY3J5X21waV9wb2ludF9yZWxlYXNlIChnY3J5X21waV9wb2ludF90IHBvaW50KQoreworICBfZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAocG9pbnQpOworfQorCit2b2lkCitnY3J5X21waV9wb2ludF9nZXQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHosCisgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQpCit7CisgIF9nY3J5X21waV9wb2ludF9nZXQgKHgsIHksIHosIHBvaW50KTsKK30KKwordm9pZAorZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQpCit7CisgIF9nY3J5X21waV9wb2ludF9zbmF0Y2hfZ2V0ICh4LCB5LCB6LCBwb2ludCk7Cit9CisKK2djcnlfbXBpX3BvaW50X3QKK2djcnlfbXBpX3BvaW50X3NldCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IHksIGdjcnlfbXBpX3QgeikKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9wb2ludF9zZXQgKHBvaW50LCB4LCB5LCB6KTsKK30KKworZ2NyeV9tcGlfcG9pbnRfdAorZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCB5LCBnY3J5X21waV90IHopCit7CisgIHJldHVybiBfZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAocG9pbnQsIHgsIHksIHopOworfQorCitncGdfZXJyb3JfdAorZ2NyeV9tcGlfZWNfbmV3IChnY3J5X2N0eF90ICpyX2N0eCwKKyAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3Qga2V5cGFyYW0sIGNvbnN0IGNoYXIgKmN1cnZlbmFtZSkKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbXBpX2VjX25ldyAocl9jdHgsIGtleXBhcmFtLCBjdXJ2ZW5hbWUpKTsKK30KKworZ2NyeV9tcGlfdAorZ2NyeV9tcGlfZWNfZ2V0X21waSAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9jdHhfdCBjdHgsIGludCBjb3B5KQoreworICByZXR1cm4gX2djcnlfbXBpX2VjX2dldF9tcGkgKG5hbWUsIGN0eCwgY29weSk7Cit9CisKK2djcnlfbXBpX3BvaW50X3QKK2djcnlfbXBpX2VjX2dldF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9jdHhfdCBjdHgsIGludCBjb3B5KQoreworICByZXR1cm4gX2djcnlfbXBpX2VjX2dldF9wb2ludCAobmFtZSwgY3R4LCBjb3B5KTsKK30KKworZ3BnX2Vycm9yX3QKK2djcnlfbXBpX2VjX3NldF9tcGkgKGNvbnN0IGNoYXIgKm5hbWUsIGdjcnlfbXBpX3QgbmV3dmFsdWUsIGdjcnlfY3R4X3QgY3R4KQoreworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tcGlfZWNfc2V0X21waSAobmFtZSwgbmV3dmFsdWUsIGN0eCkpOworfQorCitncGdfZXJyb3JfdAorZ2NyeV9tcGlfZWNfc2V0X3BvaW50IChjb25zdCBjaGFyICpuYW1lLCBnY3J5X21waV9wb2ludF90IG5ld3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X21waV9lY19zZXRfcG9pbnQgKG5hbWUsIG5ld3ZhbHVlLCBjdHgpKTsKK30KKworaW50CitnY3J5X21waV9lY19nZXRfYWZmaW5lIChnY3J5X21waV90IHgsIGdjcnlfbXBpX3QgeSwgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KQoreworICByZXR1cm4gX2djcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpKTsKK30KKwordm9pZAorZ2NyeV9tcGlfZWNfZHVwIChnY3J5X21waV9wb2ludF90IHcsIGdjcnlfbXBpX3BvaW50X3QgdSwgZ2NyeV9jdHhfdCBjdHgpCit7CisgIF9nY3J5X21waV9lY19kdXBfcG9pbnQgKHcsIHUsIF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpKTsKK30KKwordm9pZAorZ2NyeV9tcGlfZWNfYWRkIChnY3J5X21waV9wb2ludF90IHcsCisgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3BvaW50X3QgdSwgZ2NyeV9tcGlfcG9pbnRfdCB2LCBnY3J5X2N0eF90IGN0eCkKK3sKKyAgX2djcnlfbXBpX2VjX2FkZF9wb2ludHMgKHcsIHUsIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfZ2NyeV9jdHhfZ2V0X3BvaW50ZXIgKGN0eCwgQ09OVEVYVF9UWVBFX0VDKSk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX2VjX211bCAoZ2NyeV9tcGlfcG9pbnRfdCB3LCBnY3J5X21waV90IG4sIGdjcnlfbXBpX3BvaW50X3QgdSwKKyAgICAgICAgICAgICAgICAgZ2NyeV9jdHhfdCBjdHgpCit7CisgIF9nY3J5X21waV9lY19tdWxfcG9pbnQgKHcsIG4sIHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpKTsKK30KKworaW50CitnY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwgZ2NyeV9jdHhfdCBjdHgpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfZWNfY3VydmVfcG9pbnQKKyAgICAocG9pbnQsIF9nY3J5X2N0eF9nZXRfcG9pbnRlciAoY3R4LCBDT05URVhUX1RZUEVfRUMpKTsKK30KKwordW5zaWduZWQgaW50CitnY3J5X21waV9nZXRfbmJpdHMgKGdjcnlfbXBpX3QgYSkKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9nZXRfbmJpdHMgKGEpOworfQorCitpbnQKK2djcnlfbXBpX3Rlc3RfYml0IChnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKQoreworICByZXR1cm4gX2djcnlfbXBpX3Rlc3RfYml0IChhLCBuKTsKK30KKwordm9pZAorZ2NyeV9tcGlfc2V0X2JpdCAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgX2djcnlfbXBpX3NldF9iaXQgKGEsIG4pOworfQorCit2b2lkCitnY3J5X21waV9jbGVhcl9iaXQgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50IG4pCit7CisgIF9nY3J5X21waV9jbGVhcl9iaXQgKGEsIG4pOworfQorCit2b2lkCitnY3J5X21waV9zZXRfaGlnaGJpdCAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgX2djcnlfbXBpX3NldF9oaWdoYml0IChhLCBuKTsKK30KKwordm9pZAorZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgX2djcnlfbXBpX2NsZWFyX2hpZ2hiaXQgKGEsIG4pOworfQorCit2b2lkCitnY3J5X21waV9yc2hpZnQgKGdjcnlfbXBpX3QgeCwgZ2NyeV9tcGlfdCBhLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgX2djcnlfbXBpX3JzaGlmdCAoeCwgYSwgbik7Cit9CisKK3ZvaWQKK2djcnlfbXBpX2xzaGlmdCAoZ2NyeV9tcGlfdCB4LCBnY3J5X21waV90IGEsIHVuc2lnbmVkIGludCBuKQoreworICBfZ2NyeV9tcGlfbHNoaWZ0ICh4LCBhLCBuKTsKK30KKworZ2NyeV9tcGlfdAorZ2NyeV9tcGlfc2V0X29wYXF1ZSAoZ2NyeV9tcGlfdCBhLCB2b2lkICpwLCB1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfc2V0X29wYXF1ZSAoYSwgcCwgbmJpdHMpOworfQorCitnY3J5X21waV90CitnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkgKGdjcnlfbXBpX3QgYSwgY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IG5iaXRzKQoreworICByZXR1cm4gX2djcnlfbXBpX3NldF9vcGFxdWVfY29weSAoYSwgcCwgbmJpdHMpOworfQorCit2b2lkICoKK2djcnlfbXBpX2dldF9vcGFxdWUgKGdjcnlfbXBpX3QgYSwgdW5zaWduZWQgaW50ICpuYml0cykKK3sKKyAgcmV0dXJuIF9nY3J5X21waV9nZXRfb3BhcXVlIChhLCBuYml0cyk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX3NldF9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKQoreworICBfZ2NyeV9tcGlfc2V0X2ZsYWcgKGEsIGZsYWcpOworfQorCit2b2lkCitnY3J5X21waV9jbGVhcl9mbGFnIChnY3J5X21waV90IGEsIGVudW0gZ2NyeV9tcGlfZmxhZyBmbGFnKQoreworICBfZ2NyeV9tcGlfY2xlYXJfZmxhZyAoYSwgZmxhZyk7Cit9CisKK2ludAorZ2NyeV9tcGlfZ2V0X2ZsYWcgKGdjcnlfbXBpX3QgYSwgZW51bSBnY3J5X21waV9mbGFnIGZsYWcpCit7CisgIHJldHVybiBfZ2NyeV9tcGlfZ2V0X2ZsYWcgKGEsIGZsYWcpOworfQorCitnY3J5X21waV90CitfZ2NyeV9tcGlfZ2V0X2NvbnN0IChpbnQgbm8pCit7CisgIHN3aXRjaCAobm8pCisgICAgeworICAgIGNhc2UgMTogcmV0dXJuIF9nY3J5X21waV9jb25zdCAoTVBJX0NfT05FKTsKKyAgICBjYXNlIDI6IHJldHVybiBfZ2NyeV9tcGlfY29uc3QgKE1QSV9DX1RXTyk7CisgICAgY2FzZSAzOiByZXR1cm4gX2djcnlfbXBpX2NvbnN0IChNUElfQ19USFJFRSk7CisgICAgY2FzZSA0OiByZXR1cm4gX2djcnlfbXBpX2NvbnN0IChNUElfQ19GT1VSKTsKKyAgICBjYXNlIDg6IHJldHVybiBfZ2NyeV9tcGlfY29uc3QgKE1QSV9DX0VJR0hUKTsKKyAgICBkZWZhdWx0OiBsb2dfYnVnKCJ1bnN1cHBvcnRlZCBHQ1JZTVBJX0NPTlNUXyBtYWNybyB1c2VkXG4iKTsKKyAgICB9Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfb3BlbiAoZ2NyeV9jaXBoZXJfaGRfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgaW50IGFsZ28sIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAqaGFuZGxlID0gTlVMTDsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX29wZW4gKGhhbmRsZSwgYWxnbywgbW9kZSwgZmxhZ3MpKTsKK30KKwordm9pZAorZ2NyeV9jaXBoZXJfY2xvc2UgKGdjcnlfY2lwaGVyX2hkX3QgaCkKK3sKKyAgX2djcnlfY2lwaGVyX2Nsb3NlIChoKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X2NpcGhlcl9zZXRrZXkgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKworICByZXR1cm4gZ2NyeV9lcnJvciAoX2djcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleSwga2V5bGVuKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfc2V0aXYgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIGNvbnN0IHZvaWQgKml2LCBzaXplX3QgaXZsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdjcnlfZXJyb3IgKF9nY3J5X2NpcGhlcl9zZXRpdiAoaGQsIGl2LCBpdmxlbikpOworfQorCitncGdfZXJyb3JfdAorZ2NyeV9jaXBoZXJfc2V0Y3RyIChnY3J5X2NpcGhlcl9oZF90IGhkLCBjb25zdCB2b2lkICpjdHIsIHNpemVfdCBjdHJsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdjcnlfZXJyb3IgKF9nY3J5X2NpcGhlcl9zZXRjdHIgKGhkLCBjdHIsIGN0cmxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYWJ1Ziwgc2l6ZV90IGFidWZsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoaGQsIGFidWYsIGFidWZsZW4pKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X2NpcGhlcl9nZXR0YWcgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIHZvaWQgKm91dHRhZywgc2l6ZV90IHRhZ2xlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9jaXBoZXJfZ2V0dGFnIChoZCwgb3V0dGFnLCB0YWdsZW4pKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X2NpcGhlcl9jaGVja3RhZyAoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgY29uc3Qgdm9pZCAqaW50YWcsIHNpemVfdCB0YWdsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2NoZWNrdGFnIChoZCwgaW50YWcsIHRhZ2xlbikpOworfQorCisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfY3RsIChnY3J5X2NpcGhlcl9oZF90IGgsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9jaXBoZXJfY3RsIChoLCBjbWQsIGJ1ZmZlciwgYnVmbGVuKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfaW5mbyAoZ2NyeV9jaXBoZXJfaGRfdCBoLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcykKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2luZm8gKGgsIHdoYXQsIGJ1ZmZlciwgbmJ5dGVzKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfYWxnb19pbmZvIChpbnQgYWxnbywgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2FsZ29faW5mbyAoYWxnbywgd2hhdCwgYnVmZmVyLCBuYnl0ZXMpKTsKK30KKworY29uc3QgY2hhciAqCitnY3J5X2NpcGhlcl9hbGdvX25hbWUgKGludCBhbGdvcml0aG0pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChhbGdvcml0aG0pOworfQorCitpbnQKK2djcnlfY2lwaGVyX21hcF9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICByZXR1cm4gX2djcnlfY2lwaGVyX21hcF9uYW1lIChuYW1lKTsKK30KKworaW50CitnY3J5X2NpcGhlcl9tb2RlX2Zyb21fb2lkIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCAoc3RyaW5nKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X2NpcGhlcl9lbmNyeXB0IChnY3J5X2NpcGhlcl9oZF90IGgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXQsIHNpemVfdCBvdXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBwbGFpbnRleHQgd2lsbCBuZXZlciBtYWtlIGl0IHRvIE9VVC4gKi8KKyAgICAgIGlmIChvdXQpCisgICAgICAgIG1lbXNldCAob3V0LCAweDQyLCBvdXRzaXplKTsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2VuY3J5cHQgKGgsIG91dCwgb3V0c2l6ZSwgaW4sIGlubGVuKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9jaXBoZXJfZGVjcnlwdCAoZ2NyeV9jaXBoZXJfaGRfdCBoLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0LCBzaXplX3Qgb3V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfY2lwaGVyX2RlY3J5cHQgKGgsIG91dCwgb3V0c2l6ZSwgaW4sIGlubGVuKSk7Cit9CisKK3NpemVfdAorZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIChpbnQgYWxnbykKK3sKKyAgcmV0dXJuIF9nY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4gKGFsZ28pOworfQorCitzaXplX3QKK2djcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbiAoaW50IGFsZ28pCit7CisgIHJldHVybiBfZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIChhbGdvKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X21hY19hbGdvX2luZm8gKGludCBhbGdvLCBpbnQgd2hhdCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKm5ieXRlcykKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tYWNfYWxnb19pbmZvIChhbGdvLCB3aGF0LCBidWZmZXIsIG5ieXRlcykpOworfQorCitjb25zdCBjaGFyICoKK2djcnlfbWFjX2FsZ29fbmFtZSAoaW50IGFsZ29yaXRobSkKK3sKKyAgcmV0dXJuIF9nY3J5X21hY19hbGdvX25hbWUgKGFsZ29yaXRobSk7Cit9CisKK2ludAorZ2NyeV9tYWNfbWFwX25hbWUgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIF9nY3J5X21hY19tYXBfbmFtZSAoc3RyaW5nKTsKK30KKwordW5zaWduZWQgaW50CitnY3J5X21hY19nZXRfYWxnb19tYWNsZW4gKGludCBhbGdvKQoreworICByZXR1cm4gX2djcnlfbWFjX2dldF9hbGdvX21hY2xlbiAoYWxnbyk7Cit9CisKK3Vuc2lnbmVkIGludAorZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuIChpbnQgYWxnbykKK3sKKyAgcmV0dXJuIF9nY3J5X21hY19nZXRfYWxnb19rZXlsZW4gKGFsZ28pOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWFjX29wZW4gKGdjcnlfbWFjX2hkX3QgKmhhbmRsZSwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncywKKwkgICAgICAgZ2NyeV9jdHhfdCBjdHgpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAqaGFuZGxlID0gTlVMTDsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWFjX29wZW4gKGhhbmRsZSwgYWxnbywgZmxhZ3MsIGN0eCkpOworfQorCit2b2lkCitnY3J5X21hY19jbG9zZSAoZ2NyeV9tYWNfaGRfdCBoZCkKK3sKKyAgX2djcnlfbWFjX2Nsb3NlIChoZCk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tYWNfc2V0a2V5IChnY3J5X21hY19oZF90IGhkLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWFjX3NldGtleSAoaGQsIGtleSwga2V5bGVuKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tYWNfc2V0aXYgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKml2LCBzaXplX3QgaXZsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWFjX3NldGl2IChoZCwgaXYsIGl2bGVuKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tYWNfd3JpdGUgKGdjcnlfbWFjX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tYWNfd3JpdGUgKGhkLCBidWYsIGJ1ZmxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWFjX3JlYWQgKGdjcnlfbWFjX2hkX3QgaGQsIHZvaWQgKm91dGJ1Ziwgc2l6ZV90ICpvdXRsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWFjX3JlYWQgKGhkLCBvdXRidWYsIG91dGxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWFjX3ZlcmlmeSAoZ2NyeV9tYWNfaGRfdCBoZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgcmV0dXJuIGdwZ19lcnJvciAoZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCkpOworCisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X21hY192ZXJpZnkgKGhkLCBidWYsIGJ1ZmxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWFjX2N0bCAoZ2NyeV9tYWNfaGRfdCBoLCBpbnQgY21kLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWFjX2N0bCAoaCwgY21kLCBidWZmZXIsIGJ1ZmxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcGtfZW5jcnlwdCAoZ2NyeV9zZXhwX3QgKnJlc3VsdCwgZ2NyeV9zZXhwX3QgZGF0YSwgZ2NyeV9zZXhwX3QgcGtleSkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgcmV0dXJuIGdwZ19lcnJvciAoZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCkpOworICAgIH0KKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfcGtfZW5jcnlwdCAocmVzdWx0LCBkYXRhLCBwa2V5KSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9wa19kZWNyeXB0IChnY3J5X3NleHBfdCAqcmVzdWx0LCBnY3J5X3NleHBfdCBkYXRhLCBnY3J5X3NleHBfdCBza2V5KQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisgICAgfQorICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9wa19kZWNyeXB0IChyZXN1bHQsIGRhdGEsIHNrZXkpKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X3BrX3NpZ24gKGdjcnlfc2V4cF90ICpyZXN1bHQsIGdjcnlfc2V4cF90IGRhdGEsIGdjcnlfc2V4cF90IHNrZXkpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3BrX3NpZ24gKHJlc3VsdCwgZGF0YSwgc2tleSkpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcGtfdmVyaWZ5IChnY3J5X3NleHBfdCBzaWd2YWwsIGdjcnlfc2V4cF90IGRhdGEsIGdjcnlfc2V4cF90IHBrZXkpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3BrX3ZlcmlmeSAoc2lndmFsLCBkYXRhLCBwa2V5KSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9wa190ZXN0a2V5IChnY3J5X3NleHBfdCBrZXkpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3BrX3Rlc3RrZXkgKGtleSkpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcGtfZ2Vua2V5IChnY3J5X3NleHBfdCAqcl9rZXksIGdjcnlfc2V4cF90IHNfcGFybXMpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAqcl9rZXkgPSBOVUxMOworICAgICAgcmV0dXJuIGdwZ19lcnJvciAoZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCkpOworICAgIH0KKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfcGtfZ2Vua2V5IChyX2tleSwgc19wYXJtcykpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcGtfY3RsIChpbnQgY21kLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3BrX2N0bCAoY21kLCBidWZmZXIsIGJ1ZmxlbikpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcGtfYWxnb19pbmZvIChpbnQgYWxnbywgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfcGtfYWxnb19pbmZvIChhbGdvLCB3aGF0LCBidWZmZXIsIG5ieXRlcykpOworfQorCitjb25zdCBjaGFyICoKK2djcnlfcGtfYWxnb19uYW1lIChpbnQgYWxnb3JpdGhtKQoreworICByZXR1cm4gX2djcnlfcGtfYWxnb19uYW1lIChhbGdvcml0aG0pOworfQorCitpbnQKK2djcnlfcGtfbWFwX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHJldHVybiBfZ2NyeV9wa19tYXBfbmFtZSAobmFtZSk7Cit9CisKK3Vuc2lnbmVkIGludAorZ2NyeV9wa19nZXRfbmJpdHMgKGdjcnlfc2V4cF90IGtleSkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiBfZ2NyeV9wa19nZXRfbmJpdHMgKGtleSk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKgorZ2NyeV9wa19nZXRfa2V5Z3JpcCAoZ2NyeV9zZXhwX3Qga2V5LCB1bnNpZ25lZCBjaGFyICphcnJheSkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICByZXR1cm4gX2djcnlfcGtfZ2V0X2tleWdyaXAgKGtleSwgYXJyYXkpOworfQorCitjb25zdCBjaGFyICoKK2djcnlfcGtfZ2V0X2N1cnZlIChnY3J5X3NleHBfdCBrZXksIGludCBpdGVyYXRvciwgdW5zaWduZWQgaW50ICpyX25iaXRzKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKHZvaWQpZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJldHVybiBfZ2NyeV9wa19nZXRfY3VydmUgKGtleSwgaXRlcmF0b3IsIHJfbmJpdHMpOworfQorCitnY3J5X3NleHBfdAorZ2NyeV9wa19nZXRfcGFyYW0gKGludCBhbGdvLCBjb25zdCBjaGFyICpuYW1lKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKHZvaWQpZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJldHVybiBfZ2NyeV9wa19nZXRfcGFyYW0gKGFsZ28sIG5hbWUpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcHVia2V5X2dldF9zZXhwIChnY3J5X3NleHBfdCAqcl9zZXhwLCBpbnQgbW9kZSwgZ2NyeV9jdHhfdCBjdHgpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAqcl9zZXhwID0gTlVMTDsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3B1YmtleV9nZXRfc2V4cCAocl9zZXhwLCBtb2RlLCBjdHgpKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X21kX29wZW4gKGdjcnlfbWRfaGRfdCAqaCwgaW50IGFsZ28sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICpoID0gTlVMTDsKKyAgICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgICB9CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWRfb3BlbiAoaCwgYWxnbywgZmxhZ3MpKTsKK30KKwordm9pZAorZ2NyeV9tZF9jbG9zZSAoZ2NyeV9tZF9oZF90IGhkKQoreworICBfZ2NyeV9tZF9jbG9zZSAoaGQpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWRfZW5hYmxlIChnY3J5X21kX2hkX3QgaGQsIGludCBhbGdvKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgcmV0dXJuIGdwZ19lcnJvciAoZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCkpOworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tZF9lbmFibGUgKGhkLCBhbGdvKSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tZF9jb3B5IChnY3J5X21kX2hkX3QgKmJoZCwgZ2NyeV9tZF9oZF90IGFoZCkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICpiaGQgPSBOVUxMOworICAgICAgcmV0dXJuIGdwZ19lcnJvciAoZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCkpOworICAgIH0KKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWRfY29weSAoYmhkLCBhaGQpKTsKK30KKwordm9pZAorZ2NyeV9tZF9yZXNldCAoZ2NyeV9tZF9oZF90IGhkKQoreworICBfZ2NyeV9tZF9yZXNldCAoaGQpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWRfY3RsIChnY3J5X21kX2hkX3QgaGQsIGludCBjbWQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWRfY3RsIChoZCwgY21kLCBidWZmZXIsIGJ1ZmxlbikpOworfQorCit2b2lkCitnY3J5X21kX3dyaXRlIChnY3J5X21kX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgX2djcnlfbWRfd3JpdGUgKGhkLCBidWZmZXIsIGxlbmd0aCk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKgorZ2NyeV9tZF9yZWFkIChnY3J5X21kX2hkX3QgaGQsIGludCBhbGdvKQoreworICByZXR1cm4gX2djcnlfbWRfcmVhZCAoaGQsIGFsZ28pOworfQorCit2b2lkCitnY3J5X21kX2hhc2hfYnVmZmVyIChpbnQgYWxnbywgdm9pZCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKHZvaWQpZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICBmaXBzX3NpZ25hbF9lcnJvciAoImNhbGxlZCBpbiBub24tb3BlcmF0aW9uYWwgc3RhdGUiKTsKKyAgICB9CisgIF9nY3J5X21kX2hhc2hfYnVmZmVyIChhbGdvLCBkaWdlc3QsIGJ1ZmZlciwgbGVuZ3RoKTsKK30KKworZ3BnX2Vycm9yX3QKK2djcnlfbWRfaGFzaF9idWZmZXJzIChpbnQgYWxnbywgdW5zaWduZWQgaW50IGZsYWdzLCB2b2lkICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NyeV9idWZmZXJfdCAqaW92LCBpbnQgaW92Y250KQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKHZvaWQpZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICBmaXBzX3NpZ25hbF9lcnJvciAoImNhbGxlZCBpbiBub24tb3BlcmF0aW9uYWwgc3RhdGUiKTsKKyAgICB9CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X21kX2hhc2hfYnVmZmVycyAoYWxnbywgZmxhZ3MsIGRpZ2VzdCwgaW92LCBpb3ZjbnQpKTsKK30KKworaW50CitnY3J5X21kX2dldF9hbGdvIChnY3J5X21kX2hkX3QgaGQpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAodm9pZClmaXBzX25vdF9vcGVyYXRpb25hbCAoKTsKKyAgICAgIGZpcHNfc2lnbmFsX2Vycm9yICgidXNlZCBpbiBub24tb3BlcmF0aW9uYWwgc3RhdGUiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIF9nY3J5X21kX2dldF9hbGdvIChoZCk7Cit9CisKK3Vuc2lnbmVkIGludAorZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChpbnQgYWxnbykKK3sKKyAgcmV0dXJuIF9nY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pOworfQorCitpbnQKK2djcnlfbWRfaXNfZW5hYmxlZCAoZ2NyeV9tZF9oZF90IGEsIGludCBhbGdvKQoreworICBpZiAoIWZpcHNfaXNfb3BlcmF0aW9uYWwgKCkpCisgICAgeworICAgICAgKHZvaWQpZmlwc19ub3Rfb3BlcmF0aW9uYWwgKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIF9nY3J5X21kX2lzX2VuYWJsZWQgKGEsIGFsZ28pOworfQorCitpbnQKK2djcnlfbWRfaXNfc2VjdXJlIChnY3J5X21kX2hkX3QgYSkKK3sKKyAgcmV0dXJuIF9nY3J5X21kX2lzX3NlY3VyZSAoYSk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9tZF9pbmZvIChnY3J5X21kX2hkX3QgaCwgaW50IHdoYXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICByZXR1cm4gZ3BnX2Vycm9yIChmaXBzX25vdF9vcGVyYXRpb25hbCAoKSk7CisKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWRfaW5mbyAoaCwgd2hhdCwgYnVmZmVyLCBuYnl0ZXMpKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X21kX2FsZ29faW5mbyAoaW50IGFsZ28sIGludCB3aGF0LCB2b2lkICpidWZmZXIsIHNpemVfdCAqbmJ5dGVzKQoreworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9tZF9hbGdvX2luZm8gKGFsZ28sIHdoYXQsIGJ1ZmZlciwgbmJ5dGVzKSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2NyeV9tZF9hbGdvX25hbWUgKGludCBhbGdvKQoreworICByZXR1cm4gX2djcnlfbWRfYWxnb19uYW1lIChhbGdvKTsKK30KKworaW50CitnY3J5X21kX21hcF9uYW1lIChjb25zdCBjaGFyKiBuYW1lKQoreworICByZXR1cm4gX2djcnlfbWRfbWFwX25hbWUgKG5hbWUpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfbWRfc2V0a2V5IChnY3J5X21kX2hkX3QgaGQsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbikKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfbWRfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pKTsKK30KKwordm9pZAorZ2NyeV9tZF9kZWJ1ZyAoZ2NyeV9tZF9oZF90IGhkLCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisgIF9nY3J5X21kX2RlYnVnIChoZCwgc3VmZml4KTsKK30KKworZ3BnX2Vycm9yX3QKK2djcnlfa2RmX2Rlcml2ZSAoY29uc3Qgdm9pZCAqcGFzc3BocmFzZSwgc2l6ZV90IHBhc3NwaHJhc2VsZW4sCisgICAgICAgICAgICAgICAgIGludCBhbGdvLCBpbnQgaGFzaGFsZ28sCisgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlzaXplLCB2b2lkICprZXlidWZmZXIpCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X2tkZl9kZXJpdmUgKHBhc3NwaHJhc2UsIHBhc3NwaHJhc2VsZW4sIGFsZ28sIGhhc2hhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0LCBzYWx0bGVuLCBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzaXplLCBrZXlidWZmZXIpKTsKK30KKwordm9pZAorZ2NyeV9yYW5kb21pemUgKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgZmlwc19zaWduYWxfZmF0YWxfZXJyb3IgKCJjYWxsZWQgaW4gbm9uLW9wZXJhdGlvbmFsIHN0YXRlIik7CisgICAgICBmaXBzX25vcmV0dXJuICgpOworICAgIH0KKyAgX2djcnlfcmFuZG9taXplIChidWZmZXIsIGxlbmd0aCwgbGV2ZWwpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcmFuZG9tX2FkZF9ieXRlcyAoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgcXVhbGl0eSkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHJldHVybiBncGdfZXJyb3IgKGZpcHNfbm90X29wZXJhdGlvbmFsICgpKTsKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfcmFuZG9tX2FkZF9ieXRlcyAoYnVmZmVyLCBsZW5ndGgsIHF1YWxpdHkpKTsKK30KKwordm9pZCAqCitnY3J5X3JhbmRvbV9ieXRlcyAoc2l6ZV90IG5ieXRlcywgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgZmlwc19zaWduYWxfZmF0YWxfZXJyb3IgKCJjYWxsZWQgaW4gbm9uLW9wZXJhdGlvbmFsIHN0YXRlIik7CisgICAgICBmaXBzX25vcmV0dXJuICgpOworICAgIH0KKworICByZXR1cm4gX2djcnlfcmFuZG9tX2J5dGVzIChuYnl0ZXMsbGV2ZWwpOworfQorCit2b2lkICoKK2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAoc2l6ZV90IG5ieXRlcywgZW51bSBnY3J5X3JhbmRvbV9sZXZlbCBsZXZlbCkKK3sKKyAgaWYgKCFmaXBzX2lzX29wZXJhdGlvbmFsICgpKQorICAgIHsKKyAgICAgICh2b2lkKWZpcHNfbm90X29wZXJhdGlvbmFsICgpOworICAgICAgZmlwc19zaWduYWxfZmF0YWxfZXJyb3IgKCJjYWxsZWQgaW4gbm9uLW9wZXJhdGlvbmFsIHN0YXRlIik7CisgICAgICBmaXBzX25vcmV0dXJuICgpOworICAgIH0KKworICByZXR1cm4gX2djcnlfcmFuZG9tX2J5dGVzX3NlY3VyZSAobmJ5dGVzLCBsZXZlbCk7Cit9CisKK3ZvaWQKK2djcnlfbXBpX3JhbmRvbWl6ZSAoZ2NyeV9tcGlfdCB3LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsIGVudW0gZ2NyeV9yYW5kb21fbGV2ZWwgbGV2ZWwpCit7CisgIF9nY3J5X21waV9yYW5kb21pemUgKHcsIG5iaXRzLCBsZXZlbCk7Cit9CisKK3ZvaWQKK2djcnlfY3JlYXRlX25vbmNlICh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIGlmICghZmlwc19pc19vcGVyYXRpb25hbCAoKSkKKyAgICB7CisgICAgICAodm9pZClmaXBzX25vdF9vcGVyYXRpb25hbCAoKTsKKyAgICAgIGZpcHNfc2lnbmFsX2ZhdGFsX2Vycm9yICgiY2FsbGVkIGluIG5vbi1vcGVyYXRpb25hbCBzdGF0ZSIpOworICAgICAgZmlwc19ub3JldHVybiAoKTsKKyAgICB9CisgIF9nY3J5X2NyZWF0ZV9ub25jZSAoYnVmZmVyLCBsZW5ndGgpOworfQorCitnY3J5X2Vycm9yX3QKK2djcnlfcHJpbWVfZ2VuZXJhdGUgKGdjcnlfbXBpX3QgKnByaW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByaW1lX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmFjdG9yX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90ICoqZmFjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgIGdjcnlfcHJpbWVfY2hlY2tfZnVuY190IGNiX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYl9hcmcsCisgICAgICAgICAgICAgICAgICAgICBnY3J5X3JhbmRvbV9sZXZlbF90IHJhbmRvbV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgcmV0dXJuIGdwZ19lcnJvciAoX2djcnlfcHJpbWVfZ2VuZXJhdGUgKHByaW1lLCBwcmltZV9iaXRzLCBmYWN0b3JfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnMsIGNiX2Z1bmMsIGNiX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9sZXZlbCwgZmxhZ3MpKTsKK30KKworZ2NyeV9lcnJvcl90CitnY3J5X3ByaW1lX2dyb3VwX2dlbmVyYXRvciAoZ2NyeV9tcGlfdCAqcl9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3QgcHJpbWUsIGdjcnlfbXBpX3QgKmZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfdCBzdGFydF9nKQoreworICByZXR1cm4gZ3BnX2Vycm9yIChfZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgKHJfZywgcHJpbWUsIGZhY3RvcnMsIHN0YXJ0X2cpKTsKK30KKwordm9pZAorZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMgKGdjcnlfbXBpX3QgKmZhY3RvcnMpCit7CisgIF9nY3J5X3ByaW1lX3JlbGVhc2VfZmFjdG9ycyAoZmFjdG9ycyk7Cit9CisKK2djcnlfZXJyb3JfdAorZ2NyeV9wcmltZV9jaGVjayAoZ2NyeV9tcGlfdCB4LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgIHJldHVybiBncGdfZXJyb3IgKF9nY3J5X3ByaW1lX2NoZWNrICh4LCBmbGFncykpOworfQorCit2b2lkCitnY3J5X2N0eF9yZWxlYXNlIChnY3J5X2N0eF90IGN0eCkKK3sKKyAgX2djcnlfY3R4X3JlbGVhc2UgKGN0eCk7Cit9CisKK3ZvaWQKK2djcnlfbG9nX2RlYnVnIChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICB2YV9zdGFydCggYXJnX3B0ciwgZm10ICkgOworICBfZ2NyeV9sb2d2IChHQ1JZX0xPR19ERUJVRywgZm10LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKwordm9pZAorZ2NyeV9sb2dfZGVidWdoZXggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgX2djcnlfbG9nX3ByaW50aGV4ICh0ZXh0LCBidWZmZXIsIGxlbmd0aCk7Cit9CisKK3ZvaWQKK2djcnlfbG9nX2RlYnVnbXBpIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X21waV90IG1waSkKK3sKKyAgX2djcnlfbG9nX3ByaW50bXBpICh0ZXh0LCBtcGkpOworfQorCit2b2lkCitnY3J5X2xvZ19kZWJ1Z3BudCAoY29uc3QgY2hhciAqdGV4dCwgbXBpX3BvaW50X3QgcG9pbnQsIGdjcnlfY3R4X3QgY3R4KQoreworICBtcGlfZWNfdCBlYyA9IGN0eD8gX2djcnlfY3R4X2dldF9wb2ludGVyIChjdHgsIENPTlRFWFRfVFlQRV9FQykgOiBOVUxMOworCisgIF9nY3J5X21waV9wb2ludF9sb2cgKHRleHQsIHBvaW50LCBlYyk7Cit9CisKK3ZvaWQKK2djcnlfbG9nX2RlYnVnc3hwIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X3NleHBfdCBzZXhwKQoreworICBfZ2NyeV9sb2dfcHJpbnRzeHAgKHRleHQsIHNleHApOworfQorCit2b2lkCitnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyIChnY3J5X2hhbmRsZXJfcHJvZ3Jlc3NfdCBjYiwgdm9pZCAqY2JfZGF0YSkKK3sKKyAgX2djcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIgKGNiLCBjYl9kYXRhKTsKK30KKwordm9pZAorZ2NyeV9zZXRfYWxsb2NhdGlvbl9oYW5kbGVyIChnY3J5X2hhbmRsZXJfYWxsb2NfdCBmdW5jX2FsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfYWxsb2NfdCBmdW5jX2FsbG9jX3NlY3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX3NlY3VyZV9jaGVja190IGZ1bmNfc2VjdXJlX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2hhbmRsZXJfcmVhbGxvY190IGZ1bmNfcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9oYW5kbGVyX2ZyZWVfdCBmdW5jX2ZyZWUpCit7CisgIF9nY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXIgKGZ1bmNfYWxsb2MsIGZ1bmNfYWxsb2Nfc2VjdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NlY3VyZV9jaGVjaywgZnVuY19yZWFsbG9jLCBmdW5jX2ZyZWUpOworfQorCit2b2lkCitnY3J5X3NldF9vdXRvZmNvcmVfaGFuZGxlciAoZ2NyeV9oYW5kbGVyX25vX21lbV90IGgsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgX2djcnlfc2V0X291dG9mY29yZV9oYW5kbGVyIChoLCBvcGFxdWUpOworfQorCit2b2lkCitnY3J5X3NldF9mYXRhbGVycm9yX2hhbmRsZXIgKGdjcnlfaGFuZGxlcl9lcnJvcl90IGZuYywgdm9pZCAqb3BhcXVlKQoreworICBfZ2NyeV9zZXRfZmF0YWxlcnJvcl9oYW5kbGVyIChmbmMsIG9wYXF1ZSk7Cit9CisKK3ZvaWQKK2djcnlfc2V0X2xvZ19oYW5kbGVyIChnY3J5X2hhbmRsZXJfbG9nX3QgZiwgdm9pZCAqb3BhcXVlKQoreworICBfZ2NyeV9zZXRfbG9nX2hhbmRsZXIgKGYsIG9wYXF1ZSk7Cit9CisKK3ZvaWQKK2djcnlfc2V0X2dldHRleHRfaGFuZGxlciAoY29uc3QgY2hhciAqKCpmKShjb25zdCBjaGFyKikpCit7CisgIF9nY3J5X3NldF9nZXR0ZXh0X2hhbmRsZXIgKGYpOworfQorCit2b2lkICoKK2djcnlfbWFsbG9jIChzaXplX3QgbikKK3sKKyAgcmV0dXJuIF9nY3J5X21hbGxvYyAobik7Cit9CisKK3ZvaWQgKgorZ2NyeV9jYWxsb2MgKHNpemVfdCBuLCBzaXplX3QgbSkKK3sKKyAgcmV0dXJuIF9nY3J5X2NhbGxvYyAobiwgbSk7Cit9CisKK3ZvaWQgKgorZ2NyeV9tYWxsb2Nfc2VjdXJlIChzaXplX3QgbikKK3sKKyAgcmV0dXJuIF9nY3J5X21hbGxvY19zZWN1cmUgKG4pOworfQorCit2b2lkICoKK2djcnlfY2FsbG9jX3NlY3VyZSAoc2l6ZV90IG4sIHNpemVfdCBtKQoreworICByZXR1cm4gX2djcnlfY2FsbG9jX3NlY3VyZSAobixtKTsKK30KKwordm9pZCAqCitnY3J5X3JlYWxsb2MgKHZvaWQgKmEsIHNpemVfdCBuKQoreworICByZXR1cm4gX2djcnlfcmVhbGxvYyAoYSwgbik7Cit9CisKK2NoYXIgKgorZ2NyeV9zdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIF9nY3J5X3N0cmR1cCAoc3RyaW5nKTsKK30KKwordm9pZCAqCitnY3J5X3htYWxsb2MgKHNpemVfdCBuKQoreworICByZXR1cm4gX2djcnlfeG1hbGxvYyAobik7Cit9CisKK3ZvaWQgKgorZ2NyeV94Y2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IG0pCit7CisgIHJldHVybiBfZ2NyeV94Y2FsbG9jIChuLCBtKTsKK30KKwordm9pZCAqCitnY3J5X3htYWxsb2Nfc2VjdXJlIChzaXplX3QgbikKK3sKKyAgcmV0dXJuIF9nY3J5X3htYWxsb2Nfc2VjdXJlIChuKTsKK30KKwordm9pZCAqCitnY3J5X3hjYWxsb2Nfc2VjdXJlIChzaXplX3Qgbiwgc2l6ZV90IG0pCit7CisgIHJldHVybiBfZ2NyeV94Y2FsbG9jX3NlY3VyZSAobiwgbSk7Cit9CisKK3ZvaWQgKgorZ2NyeV94cmVhbGxvYyAodm9pZCAqYSwgc2l6ZV90IG4pCit7CisgIHJldHVybiBfZ2NyeV94cmVhbGxvYyAoYSwgbik7Cit9CisKK2NoYXIgKgorZ2NyeV94c3RyZHVwIChjb25zdCBjaGFyICphKQoreworICByZXR1cm4gX2djcnlfeHN0cmR1cCAoYSk7Cit9CisKK3ZvaWQKK2djcnlfZnJlZSAodm9pZCAqYSkKK3sKKyAgX2djcnlfZnJlZSAoYSk7Cit9CisKK2ludAorZ2NyeV9pc19zZWN1cmUgKGNvbnN0IHZvaWQgKmEpCit7CisgIHJldHVybiBfZ2NyeV9pc19zZWN1cmUgKGEpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Zpc2liaWxpdHkuaCBiL3NyYy92aXNpYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyN2E0MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aXNpYmlsaXR5LmgKQEAgLTAsMCArMSw1MDMgQEAKKy8qIHZpc2liaWxpdHkuaCAtIFNldCB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorICogQ29weXJpZ2h0IChDKSAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHQ1JZX1ZJU0lCSUxJVFlfSAorI2RlZmluZSBHQ1JZX1ZJU0lCSUxJVFlfSAorCisvKiBSZWRlZmluZSBhbGwgcHVibGljIHN5bWJvbHMgd2l0aCBhbiB1bmRlcnNjb3JlIHVubGVzcyB3ZSBhbHJlYWR5CisgICB1c2UgdGhlIHVuZGVyc2NvcmUgcHJlZml4ZWQgdmVyc2lvbiBpbnRlcm5hbGx5LiAgKi8KKworCisvKiBJbmNsdWRlIHRoZSBtYWluIGhlYWRlciBoZXJlIHNvIHRoYXQgcHVibGljIHN5bWJvbHMgYXJlIG1hcHBlZCB0bworICAgdGhlIGludGVybmFsIHVuZGVyc2NvcmVkIG9uZXMuICAqLworI2lmZGVmIF9HQ1JZX0lOQ0xVREVEX0JZX1ZJU0lCSUxJVFlfQworICAvKiBXZSBuZWVkIHRvIHJlZGVjbGFyZSB0aGUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgd2l0aG91dCB0aGUKKyAgICAgZGVwcmVjYXRlZCBhdHRyaWJ1dGUuICAqLworIyBkZWZpbmUgR0NSWVBUX05PX0RFUFJFQ0FURUQKKyMgaW5jbHVkZSAiZ2NyeXB0LWludC5oIgorICAvKiBOb25lIGluIHRoaXMgdmVyc2lvbi4gICovCisjZWxzZQorIyBpbmNsdWRlICJnY3J5cHQtaW50LmgiCisjZW5kaWYKKworLyogUHJvdG90eXBlcyBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnV0IG5vdCByZWFkeSBmb3IgdXNlLiAgKi8KK2djcnlfZXJyX2NvZGVfdCBnY3J5X21kX2dldCAoZ2NyeV9tZF9oZF90IGhkLCBpbnQgYWxnbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKTsKKworCisvKiBPdXIgdXNlIG9mIHRoZSBFTEYgdmlzaWJpbGl0eSBmZWF0dXJlIHdvcmtzIGJ5IHBhc3NpbmcKKyAgIC1mdmlzaWJpbGl5PWhpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBieSBleHBsaWNpdGx5IG1hcmtpbmcKKyAgIGFsbCBleHBvcnRlZCBmdW5jdGlvbnMgYXMgdmlzaWJsZS4KKworICAgTk9URTogV2hlbiBhZGRpbmcgbmV3IGZ1bmN0aW9ucywgcGxlYXNlIG1ha2Ugc3VyZSB0byBhZGQgdGhlbSB0bworICAgICAgICAgbGliZ2NyeXB0LnZlcnMgYW5kIGxpYmdjcnlwdC5kZWYgYXMgd2VsbC4gICovCisKKyNpZmRlZiBfR0NSWV9JTkNMVURFRF9CWV9WSVNJQklMSVRZX0MKKworLyogQSBtYWNybyB0byBmbGFnIGEgZnVuY3Rpb24gYXMgdmlzaWJsZS4gICovCisjaWZkZWYgR0NSWV9VU0VfVklTSUJJTElUWQorIyBkZWZpbmUgTUFSS19WSVNJQkxFWChuYW1lKSBcCisgICAgZXh0ZXJuIF9fdHlwZW9mX18gKG5hbWUpIG5hbWUgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2Vsc2UKKyMgZGVmaW5lIE1BUktfVklTSUJMRVgobmFtZSkgLyogKi8KKyNlbmRpZgorCisKKy8qIE5vdyBtYXJrIGFsbCBzeW1ib2xzLiAgKi8KKworTUFSS19WSVNJQkxFWCAoZ2NyeV9jaGVja192ZXJzaW9uKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9jb250cm9sKQorCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NldF9hbGxvY2F0aW9uX2hhbmRsZXIpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NldF9mYXRhbGVycm9yX2hhbmRsZXIpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NldF9nZXR0ZXh0X2hhbmRsZXIpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NldF9sb2dfaGFuZGxlcikKK01BUktfVklTSUJMRVggKGdjcnlfc2V0X291dG9mY29yZV9oYW5kbGVyKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlcikKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9lcnJfY29kZV9mcm9tX2Vycm5vKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9lcnJfY29kZV90b19lcnJubykKK01BUktfVklTSUJMRVggKGdjcnlfZXJyX21ha2VfZnJvbV9lcnJubykKK01BUktfVklTSUJMRVggKGdjcnlfZXJyb3JfZnJvbV9lcnJubykKK01BUktfVklTSUJMRVggKGdjcnlfc3RyZXJyb3IpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3N0cnNvdXJjZSkKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9tYWxsb2MpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hbGxvY19zZWN1cmUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NhbGxvYykKK01BUktfVklTSUJMRVggKGdjcnlfY2FsbG9jX3NlY3VyZSkKK01BUktfVklTSUJMRVggKGdjcnlfcmVhbGxvYykKK01BUktfVklTSUJMRVggKGdjcnlfc3RyZHVwKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9pc19zZWN1cmUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3hjYWxsb2MpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3hjYWxsb2Nfc2VjdXJlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV94bWFsbG9jKQorTUFSS19WSVNJQkxFWCAoZ2NyeV94bWFsbG9jX3NlY3VyZSkKK01BUktfVklTSUJMRVggKGdjcnlfeHJlYWxsb2MpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3hzdHJkdXApCitNQVJLX1ZJU0lCTEVYIChnY3J5X2ZyZWUpCisKK01BUktfVklTSUJMRVggKGdjcnlfbWRfYWxnb19pbmZvKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tZF9hbGdvX25hbWUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21kX2Nsb3NlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tZF9jb3B5KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tZF9jdGwpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21kX2VuYWJsZSkKK01BUktfVklTSUJMRVggKGdjcnlfbWRfZ2V0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tZF9nZXRfYWxnbykKK01BUktfVklTSUJMRVggKGdjcnlfbWRfZ2V0X2FsZ29fZGxlbikKK01BUktfVklTSUJMRVggKGdjcnlfbWRfaGFzaF9idWZmZXIpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21kX2hhc2hfYnVmZmVycykKK01BUktfVklTSUJMRVggKGdjcnlfbWRfaW5mbykKK01BUktfVklTSUJMRVggKGdjcnlfbWRfaXNfZW5hYmxlZCkKK01BUktfVklTSUJMRVggKGdjcnlfbWRfaXNfc2VjdXJlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tZF9tYXBfbmFtZSkKK01BUktfVklTSUJMRVggKGdjcnlfbWRfb3BlbikKK01BUktfVklTSUJMRVggKGdjcnlfbWRfcmVhZCkKK01BUktfVklTSUJMRVggKGdjcnlfbWRfcmVzZXQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21kX3NldGtleSkKK01BUktfVklTSUJMRVggKGdjcnlfbWRfd3JpdGUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21kX2RlYnVnKQorCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9hbGdvX2luZm8pCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9hbGdvX25hbWUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9jbG9zZSkKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX3NldGtleSkKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX3NldGl2KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9jaXBoZXJfc2V0Y3RyKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9jaXBoZXJfY2hlY2t0YWcpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9nZXR0YWcpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9jdGwpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9kZWNyeXB0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9jaXBoZXJfZW5jcnlwdCkKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbikKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbikKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX2luZm8pCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9tYXBfbmFtZSkKK01BUktfVklTSUJMRVggKGdjcnlfY2lwaGVyX21vZGVfZnJvbV9vaWQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NpcGhlcl9vcGVuKQorCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hY19hbGdvX2luZm8pCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hY19hbGdvX25hbWUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hY19tYXBfbmFtZSkKK01BUktfVklTSUJMRVggKGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbikKK01BUktfVklTSUJMRVggKGdjcnlfbWFjX2dldF9hbGdvX2tleWxlbikKK01BUktfVklTSUJMRVggKGdjcnlfbWFjX29wZW4pCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hY19jbG9zZSkKK01BUktfVklTSUJMRVggKGdjcnlfbWFjX3NldGtleSkKK01BUktfVklTSUJMRVggKGdjcnlfbWFjX3NldGl2KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tYWNfd3JpdGUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21hY19yZWFkKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tYWNfdmVyaWZ5KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tYWNfY3RsKQorCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX2FsZ29faW5mbykKK01BUktfVklTSUJMRVggKGdjcnlfcGtfYWxnb19uYW1lKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wa19jdGwpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX2RlY3J5cHQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX2VuY3J5cHQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX2dlbmtleSkKK01BUktfVklTSUJMRVggKGdjcnlfcGtfZ2V0X2tleWdyaXApCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX2dldF9jdXJ2ZSkKK01BUktfVklTSUJMRVggKGdjcnlfcGtfZ2V0X3BhcmFtKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wa19nZXRfbmJpdHMpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3BrX21hcF9uYW1lKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wa19zaWduKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wa190ZXN0a2V5KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wa192ZXJpZnkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3B1YmtleV9nZXRfc2V4cCkKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9rZGZfZGVyaXZlKQorCitNQVJLX1ZJU0lCTEVYIChnY3J5X3ByaW1lX2NoZWNrKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wcmltZV9nZW5lcmF0ZSkKK01BUktfVklTSUJMRVggKGdjcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMpCisKK01BUktfVklTSUJMRVggKGdjcnlfcmFuZG9tX2FkZF9ieXRlcykKK01BUktfVklTSUJMRVggKGdjcnlfcmFuZG9tX2J5dGVzKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9yYW5kb21pemUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2NyZWF0ZV9ub25jZSkKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2FsaXN0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2FwcGVuZCkKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9idWlsZCkKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9idWlsZF9hcnJheSkKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9jYWRyKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2Nhbm9uX2xlbikKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9jYXIpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfY2RyKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2NvbnMpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfY3JlYXRlKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2R1bXApCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfZmluZF90b2tlbikKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9sZW5ndGgpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfbmV3KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX250aCkKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9udGhfYnVmZmVyKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX250aF9kYXRhKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX250aF9tcGkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfbnRoX3N0cmluZykKK01BUktfVklTSUJMRVggKGdjcnlfc2V4cF9wcmVwZW5kKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX3JlbGVhc2UpCitNQVJLX1ZJU0lCTEVYIChnY3J5X3NleHBfc3ByaW50KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX3NzY2FuKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX3ZsaXN0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0pCisKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2FicykKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2FkZCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2FkZF91aSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2FkZG0pCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9hcHJpbnQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9jbGVhcl9iaXQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9jbGVhcl9mbGFnKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2NtcCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2NtcF91aSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2NvcHkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9kaXYpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9kdW1wKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfZWNfYWRkKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfZWNfY3VydmVfcG9pbnQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9lY19kdXApCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9lY19nZXRfYWZmaW5lKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfZWNfbXVsKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfZWNfbmV3KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfZWNfZ2V0X21waSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2VjX2dldF9wb2ludCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2VjX3NldF9tcGkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9lY19zZXRfcG9pbnQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9nY2QpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9nZXRfZmxhZykKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2dldF9uYml0cykKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2dldF9vcGFxdWUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9pc19uZWcpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9pbnZtKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfbW9kKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfbXVsKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfbXVsXzJleHApCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9tdWxfdWkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9tdWxtKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfbmVnKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfbmV3KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcG9pbnRfZ2V0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcG9pbnRfbmV3KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3BvaW50X3NldCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcG93bSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3ByaW50KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcmFuZG9taXplKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfcmVsZWFzZSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3JzaGlmdCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX2xzaGlmdCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3NjYW4pCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zbmF0Y2gpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zZXQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zZXRfYml0KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfc2V0X2ZsYWcpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zZXRfaGlnaGJpdCkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3NldF9vcGFxdWUpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zZXRfdWkpCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV9zbmV3KQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfc3ViKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfc3ViX3VpKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9tcGlfc3VibSkKK01BUktfVklTSUJMRVggKGdjcnlfbXBpX3N3YXApCitNQVJLX1ZJU0lCTEVYIChnY3J5X21waV90ZXN0X2JpdCkKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9jdHhfcmVsZWFzZSkKKworTUFSS19WSVNJQkxFWCAoZ2NyeV9sb2dfZGVidWcpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2xvZ19kZWJ1Z2hleCkKK01BUktfVklTSUJMRVggKGdjcnlfbG9nX2RlYnVnbXBpKQorTUFSS19WSVNJQkxFWCAoZ2NyeV9sb2dfZGVidWdwbnQpCitNQVJLX1ZJU0lCTEVYIChnY3J5X2xvZ19kZWJ1Z3N4cCkKKworLyogRnVuY3Rpb25zIHVzZWQgdG8gaW1wbGVtZW50IG1hY3Jvcy4gICovCitNQVJLX1ZJU0lCTEVYIChfZ2NyeV9tcGlfZ2V0X2NvbnN0KQorCisKKyN1bmRlZiBNQVJLX1ZJU0lCTEVYCisKKyNlbHNlIC8qIV9HQ1JZX0lOQ0xVREVEX0JZX1ZJU0lCSUxJVFlfQyovCisKKy8qIFRvIGF2b2lkIGFjY2lkZW50YWwgdXNlIG9mIHRoZSBwdWJsaWMgZnVuY3Rpb25zIGluc2lkZSBMaWJnY3J5cHQsCisgICB3ZSByZWRlZmluZSB0aGVtIHRvIGNhdGNoIHN1Y2ggZXJyb3JzLiAgVGhlIHVzdWFsIGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gYSBwdWJsaWMgYW5kIGFuIGludGVybmFsIHZlcnNpb24gaXMgdGhhdCB0aGUgaW50ZXJuYWwKKyAgIHZlcnNpb24gdXNlIGdwZ19lcnJfY29kZV90IGFuZCB0aGUgcHVibGljIHZlcnNpb24gZ3BnX2Vycm9yX3QuICAqLworCisjZGVmaW5lIGdjcnlfY2hlY2tfdmVyc2lvbiAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfY29udHJvbCAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisKKyNkZWZpbmUgZ2NyeV9zZXRfYWxsb2NhdGlvbl9oYW5kbGVyIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9zZXRfZmF0YWxlcnJvcl9oYW5kbGVyIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9zZXRfZ2V0dGV4dF9oYW5kbGVyICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9zZXRfbG9nX2hhbmRsZXIgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9zZXRfb3V0b2Zjb3JlX2hhbmRsZXIgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKworI2RlZmluZSBnY3J5X2Vycl9jb2RlX2Zyb21fZXJybm8gICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X2Vycl9jb2RlX3RvX2Vycm5vICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X2Vycl9tYWtlX2Zyb21fZXJybm8gICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X2Vycm9yX2Zyb21fZXJybm8gICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3N0cmVycm9yICAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3N0cnNvdXJjZSAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorCisjZGVmaW5lIGdjcnlfbWFsbG9jICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWFsbG9jX3NlY3VyZSAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfY2FsbG9jICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfY2FsbG9jX3NlY3VyZSAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfcmVhbGxvYyAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc3RyZHVwICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeGNhbGxvYyAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeGNhbGxvY19zZWN1cmUgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeG1hbGxvYyAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeG1hbGxvY19zZWN1cmUgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeHJlYWxsb2MgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfeHN0cmR1cCAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfZnJlZSAgICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfaXNfc2VjdXJlICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisKKyNkZWZpbmUgZ2NyeV9jaXBoZXJfb3BlbiAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfY2xvc2UgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfc2V0a2V5ICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfc2V0aXYgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfc2V0Y3RyICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfYWxnb19pbmZvICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfY2hlY2t0YWcgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfZ2V0dGFnICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfY3RsICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfZGVjcnlwdCAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfZW5jcnlwdCAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfaW5mbyAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfbWFwX25hbWUgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jaXBoZXJfbW9kZV9mcm9tX29pZCAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKworI2RlZmluZSBnY3J5X3BrX2FsZ29faW5mbyAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2FsZ29fbmFtZSAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2N0bCAgICAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2RlY3J5cHQgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2VuY3J5cHQgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2dlbmtleSAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2dldF9rZXlncmlwICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2dldF9jdXJ2ZSAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2dldF9wYXJhbSAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX2dldF9uYml0cyAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX21hcF9uYW1lICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX3NpZ24gICAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX3Rlc3RrZXkgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3BrX3ZlcmlmeSAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X3B1YmtleV9nZXRfc2V4cCAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorCisjZGVmaW5lIGdjcnlfbWRfYWxnb19pbmZvICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfYWxnb19uYW1lICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfY2xvc2UgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfY29weSAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfY3RsICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfZW5hYmxlICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfZ2V0ICAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfZ2V0X2FsZ28gICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfaGFzaF9idWZmZXIgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfaGFzaF9idWZmZXJzICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfaW5mbyAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfaXNfZW5hYmxlZCAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfaXNfc2VjdXJlICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfbWFwX25hbWUgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfb3BlbiAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfcmVhZCAgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfcmVzZXQgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfc2V0a2V5ICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfd3JpdGUgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfbWRfZGVidWcgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisKKyNkZWZpbmUgZ2NyeV9tYWNfYWxnb19pbmZvICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfYWxnb19uYW1lICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfbWFwX25hbWUgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfZ2V0X2FsZ29fbWFjbGVuICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfb3BlbiAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfY2xvc2UgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfc2V0a2V5ICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfc2V0aXYgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfd3JpdGUgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfcmVhZCAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfdmVyaWZ5ICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tYWNfY3RsICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKworI2RlZmluZSBnY3J5X2tkZl9kZXJpdmUgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorCisjZGVmaW5lIGdjcnlfcHJpbWVfY2hlY2sgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfcHJpbWVfZ2VuZXJhdGUgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfcHJpbWVfZ3JvdXBfZ2VuZXJhdG9yICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfcHJpbWVfcmVsZWFzZV9mYWN0b3JzICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisKKyNkZWZpbmUgZ2NyeV9yYW5kb21fYWRkX2J5dGVzICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9yYW5kb21fYnl0ZXMgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9yYW5kb21fYnl0ZXNfc2VjdXJlICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9yYW5kb21pemUgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9jcmVhdGVfbm9uY2UgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKworI2RlZmluZSBnY3J5X2N0eF9yZWxlYXNlICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorCisjZGVmaW5lIGdjcnlfc2V4cF9hbGlzdCAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9hcHBlbmQgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9idWlsZCAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9idWlsZF9hcnJheSAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jYWRyICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jYW5vbl9sZW4gICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jYXIgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jZHIgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jb25zICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9jcmVhdGUgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9kdW1wICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9maW5kX3Rva2VuICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9sZW5ndGggICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9uZXcgICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9udGggICAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9udGhfYnVmZmVyICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9udGhfZGF0YSAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9udGhfbXBpICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9udGhfc3RyaW5nICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9wcmVwZW5kICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9yZWxlYXNlICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9zcHJpbnQgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9zc2NhbiAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF92bGlzdCAgICAgICAgICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisjZGVmaW5lIGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtICAgICBfZ2NyeV9VU0VfVEhFX1VOREVSU0NPUkVEX0ZVTkNUSU9OCisKKyNkZWZpbmUgZ2NyeV9tcGlfYWRkICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfYWRkX3VpICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfYWRkbSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfYXByaW50ICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY2xlYXJfYml0ICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY2xlYXJfZmxhZyAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY21wICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY21wX3VpICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfY29weSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZGl2ICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZHVtcCAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZ2NkICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZ2V0X2ZsYWcgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZ2V0X25iaXRzICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfZ2V0X29wYXF1ZSAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfaW52bSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbW9kICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbXVsICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbXVsXzJleHAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbXVsX3VpICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbXVsbSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbmV3ICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfZ2V0ICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfbmV3ICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfc2V0ICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcG93bSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcHJpbnQgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcmFuZG9taXplICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcmVsZWFzZSAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfcnNoaWZ0ICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfbHNoaWZ0ICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2NhbiAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0ICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0X2JpdCAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0X2ZsYWcgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0X2hpZ2hiaXQgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0X29wYXF1ZSAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc2V0X3VpICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc25hdGNoICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc25ldyAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc3ViICAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc3ViX3VpICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc3VibSAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfc3dhcCAgICAgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKyNkZWZpbmUgZ2NyeV9tcGlfdGVzdF9iaXQgICAgICAgICAgIF9nY3J5X1VTRV9USEVfVU5ERVJTQ09SRURfRlVOQ1RJT04KKworI2RlZmluZSBnY3J5X21waV9hYnMgICAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19hZGQgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19jdXJ2ZV9wb2ludCAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19kdXAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19nZXRfYWZmaW5lICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19nZXRfbXBpICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19nZXRfcG9pbnQgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19tdWwgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19uZXcgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19zZXRfbXBpICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9lY19zZXRfcG9pbnQgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9pc19uZWcgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9uZWcgICAgICAgICAgICAgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorI2RlZmluZSBnY3J5X21waV9zZXRfb3BhcXVlX2NvcHkgICAgX2djcnlfVVNFX1RIRV9VTkRFUlNDT1JFRF9GVU5DVElPTgorCisKKyNlbmRpZiAvKiFfR0NSWV9JTkNMVURFRF9CWV9WSVNJQklMSVRZX0MqLworCisjZW5kaWYgLypHQ1JZX1ZJU0lCSUxJVFlfSCovCmRpZmYgLS1naXQgYS90ZXN0cy9DaGFuZ2VMb2ctMjAxMSBiL3Rlc3RzL0NoYW5nZUxvZy0yMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZmIxY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9DaGFuZ2VMb2ctMjAxMQpAQCAtMCwwICsxLDk0NCBAQAorMjAxMS0xMi0wMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCU5COiBDaGFuZ2VMb2cgZmlsZXMgYXJlIG5vIGxvbmdlciBtYW51YWxseSBtYWludGFpbmVkLiAgU3RhcnRpbmcKKwlvbiBEZWNlbWJlciAxc3QsIDIwMTEgd2UgcHV0IGNoYW5nZSBpbmZvcm1hdGlvbiBvbmx5IGluIHRoZSBHSVQKKwljb21taXQgbG9nLCBhbmQgZ2VuZXJhdGUgYSB0b3AtbGV2ZWwgQ2hhbmdlTG9nIGZpbGUgZnJvbSBsb2dzIGF0CisJIm1ha2UgZGlzdCIuICBTZWUgZG9jL0hBQ0tJTkcgZm9yIGRldGFpbHMuCisKKzIwMTEtMTEtMTEgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CisKKwl0ZXN0czogYXZvaWQgd3JpdGUtYmV5b25kLWVuZC1vZi1oZWFwIGJ1ZmZlcgorCSogYmFzaWMuYyAoY2hlY2tfYnVsa19jaXBoZXJfbW9kZXMpOiBBbGxvY2F0ZSBvbmUgbW9yZSBieXRlIGluCisJZWFjaCBvZiB0aGUgdHdvIHRlc3QgYnVmZmVycy4gIE90aGVyd2lzZSwgcnVubmluZworCSJlbnYgLWkgTUFMTE9DX0NIRUNLXz0zIC4vYmFzaWMiIHdvdWxkIGFib3J0LgorCisyMDExLTA5LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByZWdpc3Rlci5jOiBSZW1vdmUuCisKKwkqIGFjLWRhdGEuYywgYWMtc2NoZW1lcy5jLCBhYy5jOiBSZW1vdmUuCisKKzIwMTEtMDYtMTMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmMgKGNoZWNrX3B1YmtleV9zaWduKTogUnVuIFBLQ1MxIHRlc3RzIG9ubHkgZm9yIFJTQS4KKwkoY2hlY2tfcHVia2V5X2NyeXB0KTogRGl0dG8uCisKKwkqIHBrY3MxdjItcHNzLmgsIHBrY3MxdjItb2FlcC5oLCBwa2NzMXYyLXYxNXMuaCwgcGtjczF2Mi12MTVjLmg6IE5ldy4KKwkqIHBrY3MxdjIuYzogKGNoZWNrX3BzcywgY2hlY2tfdjE1Y3J5cHQpOiBOZXcuCisJKGNoZWNrX3BzcywgY2hlY2tfcHNzKTogRmFjdG9yIHRlc3QgdmVjdG9yIHRhYmxlcyBvdXQuCisKKzIwMTEtMDYtMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmMgKGNoZWNrX3B1YmtleV9jcnlwdCk6IFJ1biBPQUVQIHRlc3RzIG9ubHkgZm9yIFJTQS4KKworMjAxMS0wNi0wOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcGtjczF2Mi5jOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgcGtjczF2Mi4KKworCSogYmFzaWMuYyAoY2hlY2tfcHVia2V5X3NpZ24pOiBBZGQgYSB0ZXN0IHVzaW5nIHJhbmRvbS1vdmVycmlkZS4KKwkoY2hlY2tfcHVia2V5X2NyeXB0KTogRGl0dG8uICBQcmludCBBTEdPIGluIHZlcmJvc2UgbW9kZS4KKwkoY2hlY2tfcHVia2V5X2dyaXApOiBTaWxlbmNlIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZy4KKworMjAxMS0wNi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAobWFpbik6IEFkZCBvcHRpb24gLS1kaWUuCisKKzIwMTEtMDUtMjcgIERhaWtpIFVlbm8gIDx1ZW5vQHVuaXh1c2VyLm9yZz4KKworCSogYmFzaWMuYyAoY2hlY2tfcHVia2V5X2NyeXB0KTogQWRkIHRlc3QgZGF0YSB3aXRoIGludmFsaWQgcGFkZGluZy4KKworMjAxMS0wNS0yNCAgRGFpa2kgVWVubyAgPHVlbm9AdW5peHVzZXIub3JnPgorCisJKiBiYXNpYy5jIChkb19jaGVja19vbmVfcHVia2V5KTogQWRkIG5ldyBhcmcgQUxHTyB0byB0ZWxsIHdoaWNoIFBLCisJYWxnb3JpdGhtIGlzIHVzZWQgZm9yIGNoZWNrX3B1YmtleV9zaWduLCBjaGVja19wdWJrZXlfY3J5cHQsCisJY2hlY2tfcHVia2V5X2dyaXAuCisJKGNoZWNrX3B1YmtleV9zaWduKTogQWRkIG5ldyBhcmcgQUxHTzsgc2tpcCB0ZXN0IGRhdGEgaWYgaXQgZG9lcworCW5vdCBtYXRjaCBBTEdPLgorCShjaGVja19wdWJrZXlfY3J5cHQpOiBBZGQgbmV3IGFyZyBBTEdPLgorCShjaGVja19wdWJrZXlfZ3JpcCk6IERpdHRvLgorCisyMDExLTA1LTE4ICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIGJhc2ljLmMgKGNoZWNrX3B1YmtleV9jcnlwdCk6IFJlbW92ZSB1bnVzZWQgInVucGFkIiBmbGFnLgorCisyMDExLTA1LTExICBEYWlraSBVZW5vICA8dWVub0B1bml4dXNlci5vcmc+CisKKwkqIGJhc2ljLmMgKGNoZWNrX3B1YmtleV9zaWduKTogQWRkIGFuIE9BRVAgZmxhZyBwYXJzaW5nIHRlc3QgY2FzZS4KKwkoY2hlY2tfcHVia2V5X2NyeXB0KTogTmV3LgorCShkb19jaGVja19vbmVfcHVia2V5KTogQ2FsbCBpdC4KKwkoY2hlY2tfb25lX3B1YmtleSk6IEZyZWUgU0tFWSBhbmQgUEtFWS4KKworMjAxMS0wNC0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAobWlzbWF0Y2gpOiBOZXcuCisJKGNoZWNrX2N0cl9jaXBoZXIpOiBSZW1vdmUgbGVuZ3RoIGVycm9yIGNvZGUgY2hlY2tzLiAgQWRkCisJdHJ1bmNhdGlvbiBhbmQgc3RyZWFtaW5nIGNoZWNrcy4KKworMjAxMS0wNC0wNCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSoga2V5Z3JpcC5jIChtYWluKTogQWRkIG9wdGlvbiAtLXJlcGV0aXRpb25zLgorCShjaGVjayk6IE1ha2UgdXNlIG9mIGl0LgorCisyMDExLTAzLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByYW5kb20uYyAocmVhZG4pOiBSZW1vdmUgdXNlZCB2YXIgUC4KKworMjAxMS0wMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogdmVyc2lvbi5jIChtYWluKTogRG8gYSB2ZXJiYXRpbSBjaGVjayBvZiB0aGUgdmVyc2lvbiBzdHJpbmcuCisJKiBiYXNpYy5jIChtYWluKTogRGl0dG8uICBCdXQgZGllIG9uIG1pc21hdGNoLgorCisJKiBiZW5jaG1hcmsuYyAobWRfYmVuY2gpOiBBbGxvdyBmb3IgdGhlIC0tYWxpZ25tZW50IG9wdGlvbi4KKwkobWFpbik6ICBBbGxvdyBhbGlnbm1lbnRzIGJldHdlZW4gMSBhbmQgMTYuCisKKzIwMTEtMDItMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJlbmNobWFyay5jIChtYWluKTogQWRkIG9wdGlvbiAtLWRpc2FibGUtaHdmLgorCisJKiBiYXNpYy5jIChESU0pOiBOZXcuCisJKGNoZWNrX2J1bGtfY2lwaGVyX21vZGVzKTogTmV3LgorCShtYWluKTogUnVuIG5ldyB0ZXN0LgorCisyMDExLTAyLTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYzogQWRkIG9wdGlvbiAtLWNpcGhlci13aXRoLWtleXNldHVwLgorCShjaXBoZXJfYmVuY2gpOiBJbXBsZW1lbnQgdGhpcyBvcHRpb24uCisKKzIwMTEtMDItMTQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJlbmNobWFyay5jOiBBZGQgb3B0aW9uIC0tYWxpZ25tZW50LgorCisyMDExLTAyLTAxICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBjdXJ2ZXMuYzogTmV3LgorCisyMDExLTAxLTA0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoTERBREQpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4gIFJlcG9ydGVkIGJ5CisJQW5kcmV5IEppdnNvdi4KKworMjAxMC0wNy0xOSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKExEQUREKTogQWRkIEdQR19FUlJPUl9MSUJTIHRvIGhlbHAgYSBuZXcgd2FubmFiZSBsZC4KKworMjAxMC0wNi0xMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogdC1tcGktYml0LmMgKG1waTJiaXRzdHJfbmx6KTogSGFuZGxlIGNhc2UgZm9yIExFTkdUSD09MC4KKworMjAxMC0wNC0xMiAgQnJhZCBIYXJkcyAgPGJyYWRoQGZyb2dtb3V0aC5uZXQ+ICAod2spCisKKwkqIGJhc2ljLmMgKGNoZWNrX2NiY19tYWNfY2lwaGVyKTogUHJpbnQgbW9yZSBpbmZvLgorCShtYWluKTogRmFjdG9yIHNvbWUgY29kZSBvdXQgdG8gLi4uCisJKGNoZWNrX2NpcGhlcl9tb2Rlcyk6IC4uIG5ldy4KKworMjAxMC0wNC0wNiAgQnJhZCBIYXJkcyAgPGJyYWRoQGZyb2dtb3V0aC5uZXQ+ICAod2spCisKKwkqIGFlc3dyYXAuYywgaG1hYy5jLCBiYXNpYy5jOiAgVHlwbyBmaXhlcy4KKworMjAxMC0wMy0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfZGlnZXN0cyk6IEFkZCB0ZXN0cyBmb3IgVElHRVIxIGFuZCBUSUdFUjIgZnJvbQorCXRoZSBORVNTSUUgcHJvamVjdC4KKworMjAxMC0wMS0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgW19HQ1JZUFRfSU5fTElCR0NSWVBUXTogSW5jbHVkZSBsaWJjb21wYXQuaC4KKwkoc3RhcnRfdGltZXIsIHN0b3BfdGltZXIpIFtfX01JTkdXMzJDRV9fXTogVXNlIEdldFRocmVhZFRpbWVzLgorCSogTWFrZWZpbGUuYW0gKExEQUREKTogQWRkIGxpYmNvbXBhdC4KKworMjAwOS0xMi0xMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfY3RyX2NpcGhlcik6IEFkZCBzb21lIHJldHVybiBjb2RlIGNoZWNrcy4KKworCSogYmVuY2htYXJrLmMgKGNpcGhlcl9iZW5jaCk6IE1lcmdlIFN0cmVhbSB3aXRoIEVDQiBjb2x1bW4uCisKKzIwMDktMTItMDkgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGFlc3dyYXAuYzogTmV3LgorCisyMDA5LTA3LTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAocHJvZ3Jlc3NfY2IpOiBOZXcuCisJKG1haW4pOiBBZGQgb3B0aW9uIC0tcHJvZ3Jlc3MuCisKKzIwMDktMDYtMDggIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJlbmNobWFyay5jIChjaXBoZXJfYmVuY2gpOiBDZW50ZXIgbGFiZWxzLiAgU3VnZ2VzdGVkIGJ5IEJyYWQgSGFyZHMuCisKKzIwMDktMDItMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNkcnYuYyAocHJpbnRfYnVmZmVyKTogUmVtb3ZlIHBhcmVucyBmcm9tIGluaXRpYWxpemVyIGZvcgorCWJldHRlciBwb3J0YWJpbGl0eS4gIFJlcG9ydGVkIGJ5IERhbiBGYW5kcmljaC4KKworMjAwOS0wMi0xMyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcnNhY3Z0LmMgKGNvbXB1dGVfbWlzc2luZyk6IEZpeCBkcW0xIGNvbXB1dGF0aW9uLiAgVGFrZSBjYXJlIG9mCisJb3BlbnBncCBmbGFnLgorCShtYWluKTogQWRkIG9wdGlvbiAtLW9wZW5wZ3AuCisKKzIwMDktMDItMTEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHJzYWN2dC5jOiBOZXcuCisKKzIwMDktMDEtMjIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNhdnNfdGVzdHMuc2g6IFBhc3Mgb3B0aW9uIC1EIHRvIGRyaXZlciBpZiByZXF1aXJlZC4KKworCSogZmlwc2Rydi5jIChydW5fZHNhX3NpZ24pOiBVc2UgaGFzaCBvZiB0aGUgZGF0YS4KKwkoZHNhX2dlbl93aXRoX3NlZWQpOiBOZXcuCisJKHJ1bl9kc2FfcHFnX2dlbik6IEFkZCBhcmdzIFNFRUQgYW5kIFNFRURMRU4gYW5kIHVzZSB0aGVtLgorCShtYWluKTogT3B0aWNhbGx5IHRha2UgYSBzZWVkIGZvciBkc2EtcGdxLWdlbi4KKwkoc3RhbmRhbG9uZV9tb2RlKTogTmV3LgorCShtYWluKTogQWRkIG9wdGlvbiAtLXN0YW5kYWxvbmUuCisJKHByaW50X2RzYV9kb21haW5fcGFyYW1ldGVycyk6IEltcGxlbWVudCBzdGFuZGFsb25lIG1vZGUuCisKKzIwMDktMDEtMjEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNkcnYuYyAocnVuX2RzYV92ZXJpZnkpOiBVc2UgZ2NyeV9tcGlfc2NhbiBhZ2Fpbi4KKwkocnVuX3JzYV9kZXJpdmUpOiBBbHNvIHByaW50IE4uCisKKwkqIGZpcHNkcnYuYyAocnVuX2RzYV92ZXJpZnkpOiBVc2UgaGFzaCBvZiB0aGUgZGF0YS4KKworCSogcHVia2V5LmMgKGdldF9kc2Ffa2V5X2ZpcHMxODZfd2l0aF9zZWVkX25ldyk6IE5ldy4KKwkoY2hlY2tfcnVuKTogQ2FsbCBpdC4KKworMjAwOC0xMi0xMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZmlwc2Rydi5jIChydW5fcnNhX2Rlcml2ZSk6IE5ldy4KKwkobWFpbik6IEFkZCBtb2RlIHJzYS1kZXJpdmUuCisKKzIwMDgtMTItMTAgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmMgKG1haW4pOiBDaGVjayBmb3IgZXJyb3IgYWZ0ZXIgcnVubmluZyBzZWxmLXRlc3QgaW4KKwlub24tZmlwcyBtb2RlLgorCisJKiBwdWJrZXkuYyAoZ2V0X2RzYV9rZXlfd2l0aF9kb21haW5fbmV3KTogTmV3LgorCShnZXRfZHNhX2tleV9maXBzMTg2X3dpdGhfZG9tYWluX25ldyk6IE5ldy4KKwkoY2hlY2tfcnVuKTogQ2FsbCB0aGVtLgorCisyMDA4LTEyLTA4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzZHJ2LmMgW1czMl06IEluY2x1ZGUgZmNudGwuaC4KKworMjAwOC0xMi0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKGdldF9kc2Ffa2V5X25ldyk6IEFkZCBhcmcgdHJhbnNpZW50X2tleS4KKwkoY2hlY2tfcnVuKTogVXNlIGl0LgorCisyMDA4LTEyLTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzZHJ2LmMgKHJ1bl9kc2FfcHFnX2dlbik6IEZhY29yIGNvZGUgb3V0IGludG8gLi4KKwkocHJpbnRfZHNhX2RvbWFpbl9wYXJhbWV0ZXJzLCBkc2FfZ2VuKTogLi4gdGhlc2UgdHdvIG5ldyBmdW5jdGlvbnMuCisJKHByaW50X3NleHAsIHJlYWRfc2V4cF9mcm9tX2ZpbGUpOiBOZXcuCisJKHJ1bl9kc2Ffc2lnbik6IE5ldy4KKwkocnVuX2RzYV92ZXJpZnkpOiBOZXcuCisKKzIwMDgtMTItMDIgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNkcnYuYzogQWxsIHN0YW5kYWxvbmUgYnVpbGQuCisKKwkqIG1waXRlc3RzLmMgKG1waV9wb3dtKTogTmV3LgorCisyMDA4LTExLTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzMTg2LWRzYS5jOiBOZXcuCisKKwkqIGZpcHNkcnYuYyAocHJpbnRfbXBpX2xpbmUsIHByaW50X2RhdGFfbGluZSk6IE5ldy4KKwkocnVuX2RzYV9wcWdfZ2VuKTogTmV3LgorCSh1c2FnZSk6IEFkZCBtb2RlIGRzYS1wcWctZ2VuLgorCisyMDA4LTExLTI1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYyAoZ2V0X2RzYV9rZXlfbmV3KTogTmV3LgorCisyMDA4LTExLTI0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiB0c2V4cC5jIChiYXNpYyk6IEFkZCB0ZXN0IGZvciBmb3JtYXQgY2hhcmFjdGVyIFMuCisKKwkqIHB1YmtleS5jIChjaGVja194OTMxX2Rlcml2ZWRfa2V5KTogTmV3LgorCShnZXRfa2V5c194OTMxX25ldyk6IE5ldy4KKwkoY2hlY2tfcnVuKTogQ2hlY2sgWDkuMzEgZ2VuZXJhdGVkIFJTQSBrZXkuCisKKzIwMDgtMTEtMDcgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNkcnYuYyAocnVuX2NpcGhlcl9tY3RfbG9vcCwgZ2V0X2N1cnJlbnRfaXYpOiBOZXcuCisJKHJlYWRfdGV4dGxpbmUsIHJlYWRfaGV4bGluZSwgc2tpcF90b19lbXB0eV9saW5lKTogTmV3LgorCShtYWluKTogTmV3IG9wdGlvbiAtLW1jdC1zZXJ2ZXIuCisJKiBjYXZzX2RyaXZlci5wbDogVXBkYXRlIGZyb20gdXBzdHJlYW0gYW5kIGFkanVzdCB0byBuZXcgZmlwc2Rydi4KKworMjAwOC0xMS0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZmlwc2Rydi5jIChydW5fZW5jcnlwdF9kZWNyeXB0KTogRGlzYWJsZSB3ZWFrIGtleSBkZXRlY3Rpb24uCisKKzIwMDgtMTAtMzEgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNkcnYuYyAocnVuX3JzYV9zaWduKTogQnVmZmVyIG5lZWRzIHRvIGJlIGxhcmdlciBmb3IgU0hBNTEyLgorCisyMDA4LTEwLTI3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzZHJ2LmMgKHJ1bl9lbmNyeXB0X2RlY3J5cHQpOiBNYWtlIElWX0JVRkZFUiBvcHRpb25hbC4KKwkobWFpbik6IERpdHRvLgorCSogY2F2c19kcml2ZXIucGw6IFJlbW92ZSB0aGUgLS1uby1maXBzIGZsYWdzLgorCShsaWJnY3J5cHRfZW5jZGVjKCQkJCQkKSk6IE1ha2UgSVYgb3B0aW9uYWwuCisJKGxpYmdjcnlwdF9zdGF0ZV9jaXBoZXIoJCQkJCQpKTogRGl0dG8uCisKKzIwMDgtMTAtMjQgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGJlbmNobWFyay5jIChtZF9iZW5jaCk6IERvIG5vdCB0ZXN0IE1ENSBpbiBmaXBzIG1vZGUuCisJKiBiYXNpYy5jIChjaGVja19kaWdlc3RzLCBjaGVja19obWFjKTogRGl0dG8uCisKKzIwMDgtMTAtMDYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGNhdnNfZHJpdmVyLnBsOiBOZXcgdmVyc2lvbiBmcm9tIHVwc3RyZWFtLgorCShsaWJnY3J5cHRfcnNhX3ZlcmlmeSgkJCQkKSk6IFBhc3MgcGtjczEuCisJKGxpYmdjcnlwdF9yc2Ffc2lnbigkJCQpKTogUGFzcyBwa2NzMSBhbmQgaGFzaCBhbGdvLgorCisJKiBmaXBzZHJ2LmMgKHJ1bl9yc2Ffc2lnbik6IEhhc2ggZGF0YSBpbiBwa2NzMSBtb2RlLgorCShydW5fcnNhX3ZlcmlmeSk6IERpdHRvLgorCShyZWFkX2tleV9maWxlKTogUmVuYW1lIHRvIHJlYWRfcHJpdmF0ZV9rZXlfZmlsZS4gIEZhY3RvciBwdWJsaWMKKwlrZXkgY29kZSBvdXQgdG8uLgorCShyZWFkX3B1YmxpY19rZXlfZmlsZSk6IC4uIG5ldy4KKworMjAwOC0xMC0wMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogZmlwc2Rydi5jIChwcmludF9idWZmZXIpOiBBZGQgYmFzZTY0IHByaW50aW5nIGNvZGUuCisJKGJhc2U2NF9kZWNvZGUsIHJlYWRfa2V5X2ZpbGUsIHBhcnNlX3RhZywgcmVhZF9zaWdfZmlsZSk6IE5ldy4KKwkocnVuX3JzYV9nZW4sIHJ1bl9yc2Ffc2lnbik6IE5ldy4KKwkobWFpbik6IEFkZCBtb2RlcyByc2EtZ2VuLCByc2Etc2lnbiBhbmQgcnNhLXZlcmlmeS4KKworCisyMDA4LTA5LTI5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBmaXBzZHJ2LmM6IE1lcmdlIGNvZGUgZnJvbSBmaXBzcm5nZHJ2LmMKKwkqIGZpcHNybmdkcnYuYzogUmVtb3ZlLgorCisyMDA4LTA5LTI2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbTogRGlzdHJpYnV0ZSBjYXZzX2RyaXZlci5wbC4KKwkqIGNhdnNfdGVzdHMuc2g6IE5ldy4KKwkqIGZpcHNkcnYuYzogTmV3LgorCisyMDA4LTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAobWFpbik6IERvIG5vdCBkaXNhYmxlIHNlY3VyZSBtZW1vcnkgaW4gRklQUyBtb2RlLgorCisyMDA4LTA5LTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jIChtYWluKTogRG8gbm90IGRpc2FibGUgc2VjdXJlIG1lbW9yeSBpbiBGSVBTIG1vZGUuCisKKzIwMDgtMDktMTYgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNybmdkcnYuYyAobWFpbik6IEJhaWwgb3V0IG9uIHdyaXRlIGVycm9yLiAgSW1wbGVtZW50IHZlcmJvc2UKKwlvcHRpb24uCisJKG1haW4pOiBVc2UgZmxhZyB0byBkaXNhYmxlIGR1cCBibG9jayBjaGVja3MuCisKKzIwMDgtMDktMTUgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIGZpcHNybmdkcnYuYzogTmV3LgorCisyMDA4LTA5LTA5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jIChtYWluKTogTmV3IG9wdGlvbiAtLXNlbGZ0ZXN0LgorCisyMDA4LTA4LTI5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBrZXlncmlwLmM6IFVwZGF0ZSB0byBhbHNvIGNoZWNrIEVDRFNBLgorCisyMDA4LTA4LTI4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByc2EtMTZrLmtleTogTmV3IHNhbXBsZSBrZXkuCisKKzIwMDgtMDgtMjcgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIHBrYmVuY2guYyAocmVhZF9maWxlKTogTmV3LgorCShwcm9jZXNzX2tleV9wYWlyX2ZpbGUpOiBSZXBsYWNlIG1tYXAgYnkgcmVhZF9maWxlLgorCShtYWluKTogQWRkIGEgLS1maXBzIG9wdGlvbi4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlLgorCShFWFRSQV9QUk9HUkFNUyk6IEFkZCBwa2JlbmNoLgorCisJKiBiYXNpYy5jIChtYWluKTogRXh0ZW5kZWQgRklQUyBzZWxmLXRlc3QgdGVzdC4KKworMjAwOC0wOC0yNiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoZ2V0X2tleXNfbmV3KTogVXNlIHRyYW5zaWVudC1rZXkgZmxhZy4KKwkqIGJlbmNobWFyay5jIChtYWluKTogRmlyc3QgY2hlY2sgb3B0aW9ucyB0aGVuIGRvIHRoZSBsaWJnY3J5cHQKKwlpbml0aWFsaXphdGlvbi4KKwkocnNhX2JlbmNoKTogVXNlIHRyYW5zaWVudC1rZXkgZmxhZyBpZiBub3QgaW4gZmlwcyBtb2RlLgorCisyMDA4LTA4LTIwICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiB0LW1waS1iaXQuYyAodGVzdF9sc2hpZnQpOiBOZXcuCisJKG1waTJiaXRzdHJfbmx6LCBsc2hpZnRiaXRzdHJpbmcpOiBOZXcuCisJKG1haW4pOiBSdW4gdGVzdC4KKworMjAwOC0wOC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAobWFpbik6IEFkZCBvcHRpb24gLS1maXBzLgorCisyMDA4LTA4LTE1ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiByZWdpc3Rlci5jIChtYWluKTogQ2hlY2sgZm9yIGZpcHMgbW9kZS4KKwkoY2hlY2tfcnVuKTogVGFrZSBjYXJlIG9mIGZpcHMgbW9kZS4KKworCSogYmFzaWMuYyAoY2hlY2tfY2JjX21hY19jaXBoZXIsIGNoZWNrX2NpcGhlcnMsIGNoZWNrX2RpZ2VzdHMpCisJKGNoZWNrX2htYWMsIGNoZWNrX3B1YmtleSk6IERvIG5vdCB0ZXN0IHVuYXZhbGFpYmxlIGFsZ29yaXRobXMgaW4KKwlmaXBzIG1vZGUuCisJKG1haW4pOiBDaGVjayBmb3IgZmlwcyBtb2RlLgorCisyMDA4LTA0LTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jIChjaGVja19vbmVfY2lwaGVyKTogQWxzbyBjaGVjayBpbi1wbGFjZSBlbmNyeXB0aW9uLgorCisyMDA4LTAzLTE3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAobWFpbik6IEFkZCBvcHRpb24gLS1jaXBoZXItcmVwZXRpdGlvbi4KKwkoY2lwaGVyX2JlbmNoKTogVXNlIGl0LgorCisyMDA4LTAzLTEyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAocnNhX2JlbmNoKTogQWRkIGFyZyBOT19CTElORElORy4KKwkobWFpbik6IEFkZCBvcHRpb24gLS1uby1ibGluZGluZy4KKworMjAwNy0xMi0wNSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcHVia2V5LmMgKHNhbXBsZV9wcml2YXRlX2tleV8xXzEsc2FtcGxlX3ByaXZhdGVfa2V5XzFfMik6IE5ldy4KKwkoZ2V0X2tleXNfc2FtcGxlKTogQWRkIGFyZyBTRUNSRVRfVkFSSUFOVC4KKwkoY2hlY2tfcnVuKTogQ2hlY2sgYWxsIHZhcmlhbnRzLiAgQWxzbyBjaGVjayBnY3J5X3BrX3Rlc3RrZXkuCisJKGNoZWNrX2tleXNfY3J5cHQpOiBBZGQgREVDUllQVF9GQUlMX0NPREUuCisJKGNoZWNrX2tleXMpOiBEaXR0by4KKworMjAwNy0xMS0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKG1haW4pOiBBZGQgb3B0aW9uZSAtLXZlcmJvc2UgYW5kIHJld29ya2VkIHRoZQorCW9wdGlvbiBwYXJzaW5nLgorCShyYW5kb21fYmVuY2gpOiBEdW1wIHJhbmRvbSBzdGF0cy4KKworMjAwNy0xMC0zMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKHN0YXJ0X3RpbWVyLCBzdG9wX3RpbWVyLCBlbGFwc2VkX3RpbWUpIFtXMzJdOiBGaXhlZC4KKworMjAwNy0wNi0yMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKHJzYV9iZW5jaCk6IE5ldy4KKwkobWFpbik6IE5ldyBjb21tYW5kICJyc2EiLgorCisyMDA3LTA1LTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERvIG5vdCBidWlsZCBwa2JlbmNoLmMKKworMjAwNy0wNS0wMiAgRGF2aWQgU2hhdyAgPGRzaGF3QGphYmJlcndvY2t5LmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfY2lwaGVycyk6IEFkZCBDYW1lbGxpYS4KKworMjAwNy0wNC0zMCAgRGF2aWQgU2hhdyAgPGRzaGF3QGphYmJlcndvY2t5LmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfY2lwaGVycyk6ICNpZiBvdXQgY2lwaGVycyB3ZSBkb24ndCBoYXZlLiAgQWRkCisJdGVzdCBmb3IgR0NSWV9DSVBIRVJfUkZDMjI2OF80MC4KKworMjAwNy0wNC0zMCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogdmVyc2lvbi5jOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgdmVyc2lvbi4KKworMjAwNy0wNC0zMCAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBiZW5jaG1hcmsuYyAoZWNjX2JlbmNoKTogUmVsZWFzZSBLRVlfU1BFQy4KKworMjAwNy0wNC0yOCAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBhYy1kYXRhLmMgKGNoZWNrX3J1bik6IERvbid0IGdpdmUgcmVkdW5kYW50IEdDUllfQUNfRkxBR19ERUFMTE9DCisJaW4gYWRkaXRpb24gdG8gR0NSWV9BQ19GTEFHX0NPUFkuICBEb24ndCByZWxlYXNlIExBQkVMMSBvciBNUEkwLAorCWFzIHRob3NlIGFyZSBkb25hdGVkIHRvIGxpYmdjcnlwdCwgYnV0IGRvIHJlbGVhc2UgTVBJMCBhbmQgTVBJMi4KKworMjAwNy0wNC0xMiAgTWFyY3VzIEJyaW5rbWFubiAgPG1hcmN1c0BnMTBjb2RlLmRlPgorCisJKiBhYy1zY2hlbWVzLmMgKHNjaGVtZV9zcGVjKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorCisJKiBhYy1zY2hlbWVzLmMgKHNjaGVtZV9zcGVjKTogUmVtb3ZlIGNvbnN0IHF1YWxpZmllciBmcm9tIG1lbWJlciBNLgorCShlc19jaGVjayk6IFJlbW92ZSBjb25zdCBxdWFsaWZpZXIgZnJvbSBDIGFuZCBNMi4KKworMjAwNy0wMy0yOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogcGtiZW5jaC5jIChnZW5lcmF0ZV9rZXkpOiBTdXBwb3J0IG5hbWVkIGN1cnZlcy4KKworCSogYmVuY2htYXJrLmMgKGRzYV9iZW5jaCk6IE5ldyBhcmdzIElURVJBVElPTlMgYW5kIFBSSU5UX0hFQURFUi4KKwkobWFpbik6IENhbGwgZHNhIGFuZCBlY2MgYmVuY2hzLgorCShzaG93X3NleHApOiBOZXcuCisKKwkqIE1ha2VmaWxlLmFtIChURVNUUyk6IE1vdmUgcGtiZW5jaCB0byBFWFRSQV9QUk9HUkFNUy4KKworMjAwNy0wMy0yMiAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKGRpZSk6IE5ldy4KKwkoZWNjX2JlbmNoKTogTmV3LgorCisJKiBwa2JlbmNoLmMgKG1haW4pOiBSZXdvcmtlZCB0byBwcm92aWRlIHByb3BlciBvcHRpb24gaGFuZGxpbmcuCisKKzIwMDctMDMtMTMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIG1waXRlc3RzLmM6IFJlZm9ybWF0dGVkIHRvIEdOVSBzdGFuZGFyZHMuCisJKG1haW4pOiBBZGQgb3B0aW9ucyAtLXZlcmJvc2UgYW5kIC0tZGVidWcgZm9yIGZ1dHVyZSB1c2UuCisKKzIwMDctMDMtMTMgIFdlcm5lciBEaXR0bWFubiA8V2VybmVyLkRpdHRtYW5uQHQtb25saW5lLmRlPiAgKHdrKQorCisJKiBtcGl0ZXN0cy5jOiBOZXcuCisKKzIwMDctMDItMjMgIFdlcm5lciBLb2NoICA8d2tAZzEwY29kZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChURVNUKTogUnVuIGJlbmNobWFyayBhcyBsYXN0LgorCisJKiBhYy1kYXRhLmMgKGNoZWNrX3NleHBfY29udmVyc2lvbik6IFByaW50IGxhYmVsIG9ubHkgaW4gdmVyYm9zZQorCW1vZGUuCisKKwkqIHB1YmtleS5jIChtYWluKTogUnVuIHRlc3QganVzdCAyIHRpbWVzIGluc3RlYWQgb2YgMTAuCisJKGdldF9lbGdfa2V5X25ldyk6IE5ldy4KKwkoY2hlY2tfcnVuKTogQWxzbyBydW4gdGVzdHMgd2l0aCBFbGdhbWFsIGtleXMuCisJKGNoZWNrX2tleXMpOiBOZXcgYXJnIE5CSVRTX0RBVEEuCisJKGdldF9lbGdfa2V5X25ldyk6IFVzZSBvbmx5IDQwMCBmb3IgdGhlIDUxMiBiaXQgRWxnYW1hbCB0ZXN0LgorCisJKiByYW5kb20uYzogTmV3LgorCisyMDA3LTAyLTIyICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jIChjaGVja19wdWJrZXlfc2lnbik6IEFsc28gdHJ5IHNpZ25pbmcgdXNpbmcgYW4gT0lELgorCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpIFtXMzJdOiBSZW1vdmVkIHBrYmVuY2ggZm9yIG5vdy4KKwkqIHBrYmVuY2guYyAoYmVuY2htYXJrKTogRml4ZWQgZm9yIFczMi4KKworMjAwNy0wMi0yMSAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogaG1hYy5jIChjaGVja19vbmVfbWFjKTogTWFrZSBwb2ludGVyIGFyZ3MgY29uc3QuCisJKiBiYXNpYy5jIChjaGVja19vbmVfbWQpOiBEaXR0by4KKwkoY2hlY2tfb25lX2htYWMpOiBEaXR0by4KKworCSoga2V5Z2VuLmMgKHByb2dyZXNzX2NiKTogRmlsdGVyIG91dCBsaW5lIGZlZWRzLgorCSogYmFzaWMuYyAocHJvZ3Jlc3NfaGFuZGxlcik6IERpdHRvLgorCisyMDA2LTEyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTLCBBTV9DUFBGTEFHUyk6IFNwbGl0dGVkIGFuZCBtZXJnZWQgd2l0aAorCU1vcml0eicgY2hhbmdlcy4KKwkoSU5DTFVERVMpOiBSZW1vdmVkLgorCisJKiBrZXlnZW4uYyAocHJvZ3Jlc3NfaGFuZGxlcik6IE5ldy4KKwkobWFpbik6IFVzZSBpdCBpbiB2ZXJib3NlIG1vZGUuCisKKzIwMDYtMTEtMDUgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkZWQgLUkkKHRvcF9idWlsZGRpcikvc3JjIHNvIHRoYXQgdGhlCisJbmV3IGdjcnlwdC5oIGlzIHVzZWQsIG5vdCB0aGUgb25lIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorCisyMDA2LTEwLTE3ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBrZXlnZW4uYyAoY2hlY2tfcnNhX2tleXMpOiBBbHNvIGNyZWF0ZSBhbiAxNTM2IGJpdCBEU0Ega2V5LgorCisyMDA2LTA4LTAzICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiB0LW1waS1iaXQuYzogTmV3LgorCisyMDA2LTA3LTA2ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAobWFpbik6IE5ldyBvcHRpb24gLS11c2UtcmFuZG9tLWRhZW1vbi4gIE5ldyBjb21tYW5kCisJc3Ryb25ncmFuZG9tLgorCShyYW5kb21fYmVuY2gpOiBOZXcgYXJnIFZFUllfU1RST05HLgorCisyMDA2LTAzLTE0ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAobWFpbik6IEFsbG93IGZvciBzZWVkIGZpbGUgYXJndW1lbnQgdG8gcmFuZG9tIGJlbmNoLgorCisJKiBiYXNpYy5jIChtYWluKTogVXNlIHByb2dyZXNzIGhhbmRsZXIgb25seSBpbiB2ZXJib3NlIG1vZGUuCisJKG1haW4pOiBTcGVlZCB1cCB0ZXN0IGtleSBnZW5lcmF0aW9uLgorCSogYWMtZGF0YS5jIChjaGVja19zZXhwX2NvbnZlcnNpb24sIGNoZWNrX3J1bik6IFRha2UgY2FyZSBvZiBWRVJCT1NFLgorCSogYWMuYyAobWFpbik6IERpdHRvLgorCSogcHVia2V5LmMgKG1haW4pOiBEaXR0by4KKwkqIHBrYmVuY2guYyAobWFpbik6IERpdHRvLgorCSoga2V5Z2VuLmMgKG1haW4pOiBEaXR0by4KKwkoY2hlY2tfcnNhX2tleXMpOiBQcmludCBrZXkgb25seSBpbiB2ZXJib3NlIG1vZGUuCisKKzIwMDYtMDMtMTAgIEJyYWQgSGFyZHMgIDxicmFkaEBmcm9nbW91dGgubmV0PiAgKHdrLCBwYXRjaCAyMDA2LTAyLTE4KQorCisJKiBiYXNpYy5jIChjaGVja19vbmVfaG1hYywgY2hlY2tfaG1hYyk6IE5ldy4KKworMjAwNi0wMy0wNyAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogYmVuY2htYXJrLmMgKGNpcGhlcl9iZW5jaCk6IEFkZCBPRkIgbW9kZS4KKworMjAwNi0wMS0xOCAgQnJhZCBIYXJkcyAgPGJyYWRoQGZyb2dtb3V0aC5uZXQ+ICh3ayAyMDA2LTAzLTA3KQorCisJKiBiYXNpYy5jOiBBZGRlZCB0ZXN0IGNhc2VzIGZvciBPRkIgYW5kIENGQiBtb2Rlcy4gRml4ZWQgc29tZQorCWNvbXBpbGVyIHdhcm5pbmdzIGZvciBzaWduZWRuZXNzLgorCisyMDA1LTExLTEyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMtZGF0YS5jOiBBZGRlZCB3YXkgbW9yZSB0ZXN0IGNhc2VzLgorCisyMDA1LTA5LTE1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkZWQga2V5Z3JpcC4KKwkqIGtleWdyaXAuYzogTmV3LgorCisyMDA1LTA5LTE5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAoZHNhX2JlbmNoKTogTmV3LgorCisyMDA1LTA4LTE5ICBXZXJuZXIgS29jaCAgPHdrQGcxMGNvZGUuY29tPgorCisJKiBobWFjLmMgKG1haW4pOiBBZGRlZCBhbGwgRklQUyB0ZXN0cy4KKworMjAwNS0wOC0xOCAgV2VybmVyIEtvY2ggIDx3a0BnMTBjb2RlLmNvbT4KKworCSogaG1hYy5jOiBOZXcuCisKKzIwMDUtMDQtMjIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiB0c2V4cC5jOiBJbmNsdWRlIDxjb25maWcuaD4gaW4gY2FzZSBIQVZFX0NPTkZJR19IIGlzIGRlZmluZWQ7CisJdGhhbmtzIHRvIEFsYmVydCBDaGluLgorCSogdGVzdGFwaS5jOiBMaWtld2lzZS4KKwkqIHJlZ2lzdGVyLmM6IExpa2V3aXNlLgorCSogcHVia2V5LmM6IExpa2V3aXNlLgorCSogcHJpbWUuYzogTGlrZXdpc2UuCisJKiBwa2JlbmNoLmM6IExpa2V3aXNlLgorCSoga2V5Z2VuLmM6IExpa2V3aXNlLgorCSogYmVuY2htYXJrLmM6IExpa2V3aXNlLgorCSogYmFzaWMuYzogTGlrZXdpc2UuCisJKiBhYy1zY2hlbWVzLmM6IExpa2V3aXNlLgorCSogYWMtZGF0YS5jOiBMaWtld2lzZS4KKwkqIGFjLmM6IExpa2V3aXNlLgorCisyMDA1LTA0LTE2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMtZGF0YS5jIChjaGVja19ydW4pOiBJbmNsdWRlIG5ldyB0ZXN0LgorCisyMDA1LTA0LTExICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfZGlnZXN0cyk6IEFkZCB0ZXN0cyBmb3IgV2hpcmxwb29sLgorCisyMDA1LTAzLTMwICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMtc2NoZW1lcy5jOiBOZXcgZmlsZS4KKwkqIGFjLWRhdGEuYzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGRlZCBhYy1zY2hlbWVzIGFuZCBhYy1kYXRhLgorCisyMDA0LTA5LTE1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcGtiZW5jaC5jOiBJbmNsdWRlIDx0aW1lLmg+LgorCisyMDA0LTA4LTI0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcGtiZW5jaC5jIChjb250ZXh0X2luaXQpOiBJbXByb3ZlIGdlbmVyYXRpb24gb2YgdGVzdCBkYXRhLgorCisyMDA0LTA4LTIzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkZWQ6IHBrYmVuY2guCisJKiBwa2JlbmNoLmM6IE5ldyBmaWxlLgorCisyMDA0LTAyLTI1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogTWFrZWZpbGUuYW0gKFRFU1QpOiBBZGQgYmVuY2htYXJrLgorCisJKiBiZW5jaG1hcmsuYyAobWRfYmVuY2gsIGNpcGhlcl9iZW5jaCk6IEFsbG93IE5VTEwgYXJnIHRvIHRvIHJ1bgorCXRlc3RzIGZvciBhbGwgYWxnb3JpdGhtcy4KKwkobWFpbik6IFJ1biBhbGwgdGVzdHMgYnkgZGVmYXVsdC4KKworMjAwNC0wMi0wMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHRzZXhwLmMgKGJhc2ljKTogTmV3IHBhc3MgdG8gY2hlY2sgc2VjdXJlIG1lbW9yeSBzd2l0Y2hpbmcuCisKKzIwMDQtMDEtMTIgIE1vcml0eiBTY2h1bHRlICA8bW9AZzEwY29kZS5jb20+CisKKwkqIGFjLmMgKGNoZWNrX29uZSk6IEFkanVzdCB0byBuZXcgYWMgQVBJLgorCisyMDAzLTExLTIyICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHVia2V5LmMgKGNoZWNrX2tleXNfY3J5cHQpOiBGaXhlZCBteSBsYXN0IHBhdGNoLgorCisyMDAzLTExLTExICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogdHNleHAuYyAoYmFzaWMpOiBBZGQgcGFzcyBzdHJ1Y3R1cmUgYW5kIGEgdGVzdCBmb3IgdGhlICViCisJZm9ybWF0LgorCisyMDAzLTExLTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogTWFrZWZpbGUuYW0gKG5vaW5zdF9QUk9HUkFNUyk6IFVzZSB0aGlzIHNvIHRoYXQgdGVzdCBwcm9ncmFtcworCWdldCBhbHdheXMgYnVpbGQuCisKKwkqIGtleWdlbi5jIChjaGVja19ub25jZSk6IE5ldy4KKwkobWFpbik6IEFkZCBhIGJhc2ljIGNoZWNrIGZvciB0aGUgbm9jZW4gZnVuY3Rpb24uCisKKzIwMDMtMTAtMzEgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBiYXNpYy5jIChjaGVja19hZXMxMjhfY2JjX2N0c19jaXBoZXIpOiBNYWtlIGl0IGEgcHJvdG90eXBlCisKKwkqIGFjLmMgKGNoZWNrX3J1bik6IENvbW1lbnQgdW51c2VkIHZhcmlhYmxlLgorCisyMDAzLTEwLTEwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHJpbWUuYyAoY2hlY2tfcHJpbWVzKTogR2VuZXJhdGUgYSBnZW5lcmF0b3IgYW5kIGF2b2lkIHByaW50aW5nCisJdW5sZXNzIGluIHZlcmJvc2UgbW9kZS4KKworMjAwMy0xMC0wNyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHRzZXhwLmMgKGNoZWNrX3NzY2FuKTogTmV3LgorCisyMDAzLTA5LTA0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogcHVia2V5LmMgKGNoZWNrX2tleXNfY3J5cHQpOiBGaXggZm9yIGNvbXBhdGliaWxpdHkgbW9kZS4KKworMjAwMy0wOS0wMiAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkZWQ6IHByaW1lLgorCisJKiBwcmltZS5jOiBOZXcgZmlsZS4KKworMjAwMy0wOC0yNyAgTW9yaXR6IFNjaHVsdGUgIDxtb0BnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfY2lwaGVycyk6IEFkZGVkOiBTZXJwZW50LgorCVdyaXRlIGJyYWNlcyBhcm91bmQgZmxhZ3MuCisKKzIwMDMtMDgtMDQgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBiZW5jaG1hcmsuYyAoZG9fcG93bSk6IEFkanVzdCBmb3IgbmV3IGdjcnlfbXBpX3NjYW4gaW50ZXJmYWNlLgorCisyMDAzLTA3LTIzICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYWMuYyAoa2V5X2NvcHkpOiBOZXcgZnVuY3Rpb24uLi4KKwkoY2hlY2tfb25lKTogLi4uIHVzZSBpdC4KKworMjAwMy0wNy0yMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmMgKGNoZWNrX2NpcGhlcnMpOiBVc2UgZ2NyeV9jaXBoZXJfbWFwX25hbWUuCisKKzIwMDMtMDctMTggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBhYy5jIChjaGVja19ydW4pOiBSZW5hbWVkIHRvIC4uLgorCShjaGVja19vbmUpOiAuLi4gdGhpcywgY2hhbmdlZCBjYWxsaW5nIGludGVyZmFjZS4KKwkoY2hlY2tfcnVuKTogTmV3IGZ1bmN0aW9uLgorCisJKiByZWdpc3Rlci5jOiBBZGp1c3QgZ2NyeV9jaXBoZXJfc3BlY190IHN0cnVjdHVyZS4KKworMjAwMy0wNy0xNCAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIHJlZ2lzdGVyLmM6IEFkanVzdCBjaXBoZXIgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUuCisKKwkqIGJlbmNobWFyay5jOiBOZXcgZmlsZS4KKwkqIHRlc3RhcGkuYzogTmV3IGZpbGUuCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9QUk9HUkFNUyk6IFNldCB0bzogYmVuY2htYXJrIHRlc3RhcGkuCisJKGNoZWNrX1BST0dSQU1TKTogU2V0IHRvOiAkKFRFU1RTKS4KKworMjAwMy0wNy0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGFjLmMsIGJhc2ljLmMsIGtleWdlbi5jLCByZWdpc3Rlci5jLCBzZXhwLmMsIHRzZXhwLmM6IFVzZWQKKwlnY3J5X2Vyciogd3JhcHBlcnMgZm9yIGxpYmdwZyBzeW1ib2xzLgorCisJKiBiYXNpYy5jIChjaGVja19jaXBoZXJzKTogQWRkZWQ6IEdDUllfQ0lQSEVSX1RXT0ZJU0gxMjguCisKKzIwMDMtMDctMDggIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoTElCUyk6IFJlbW92ZTogLWxwdGhyZWFkLgorCisJKiBiYXNpYy5jIChjaGVja19vbmVfY2lwaGVyKTogRml4IHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiAgVGhhbmtzCisJdG8gU2ltb24gSm9zZWZmc29uIDxqYXNAZXh0dW5kby5jb20+LgorCisyMDAzLTA3LTA3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkZWQ6IHJlZ2lzdGVyLgorCisyMDAzLTA3LTA1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcmVnaXN0ZXIuYyAoY2hlY2tfcnVuKTogQWRqdXN0ZWQgZm9yIG5ldyBnY3J5X2NpcGhlcl9yZWdpc3RlciBBUEkuCisKKzIwMDMtMDctMDIgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGRlZDogYWMuCisJKiBhYy5jOiBOZXcgZmlsZS4KKworMjAwMy0wNi0xOCAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGJhc2ljLmMgKGNoZWNrX2NiY19tYWNfY2lwaGVyKTogQWRqdXN0ZWQgZm9yIG5ldyBBUEkgb2YgZ2V0X2Jsa2xlbgorCWFuZCBnZXRfa2V5bGVuLgorCShjaGVja19jdHJfY2lwaGVyKTogRGl0dG8uCisJKGNoZWNrX29uZV9jaXBoZXIpOiBEaXR0by4KKwkoY2hlY2tfb25lX21kKTogQWRqdXN0ZWQgZm9yIG5ldyBBUEkgb2YgZ2NyeV9tZF9jb3B5LgorCisyMDAzLTA2LTE4ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogcmVnaXN0ZXIuYzogUmVwbGFjZSBvbGQgdHlwZSBHY3J5TW9kdWxlIHdpdGggbmV3ZXIgb25lOgorCWdjcnlfbW9kdWxlX3QuCisJQWRqdXN0ZWQgZm9yIG5ldyBBUEkuCisKKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGRlZDogQEdQR19FUlJPUl9DRkxBR1NALgorCisyMDAzLTA2LTE1ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoZ2V0X2tleXNfbmV3KTogTmV3IGZ1bmN0aW9uLgorCShkb19jaGVja19vbmVfcHVia2V5KTogTmV3IGZ1bmN0aW9uIC4uLgorCShjaGVja19vbmVfcHVia2V5KTogLi4uIHVzZSBpdC4KKwkocHJvZ3Jlc3NfaGFuZGxlcik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IFVzZSBnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyLgorCisyMDAzLTA2LTE0ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYzogUmVwbGFjZWQgY2FsbHMgdG8gZ2NyeV9zdHJlcnJvciB3aXRoIGNhbGxzIHRvCisJZ3BnX3N0cmVycm9yLgorCShjaGVja19vbmVfbWQpOiBBZGp1c3QgZm9yIG5ldyBnY3J5X21kX2NvcHkgQVBJLgorCisJKiB0c2V4cC5jOiBMaWtld2lzZS4KKwkqIGtleWdlbi5jOiBMaWtld2lzZS4KKworMjAwMy0wNi0xMiAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmM6IENoYW5nZWQgaGVyZSBhbmQgdGhlcmUsIHJlb3JnYW5pemVkIHB1YmtleSBjaGVja3MsCisJYWRkZWQgRFNBIGFuZCBFTEcga2V5cy4KKworMjAwMy0wNi0wOSAgTW9yaXR6IFNjaHVsdGUgIDxtb3JpdHpAZzEwY29kZS5jb20+CisKKwkqIGJhc2ljLmMsIGtleWdlbi5jLCBwdWJrZXkuYywgcmVnaXN0ZXIuYywgdHNleHAuYzogQ2hhbmdlZCB0byB1c2UKKwluZXcgQVBJLgorCisyMDAzLTA2LTAxICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogdHNleHAuYyAoY2Fub25fbGVuKTogQWRqdXN0IGZvciBuZXcgZ2NyeV9zZXhwX2Nhbm9uX2xlbiBBUEkuCisKKzIwMDMtMDUtMjYgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jICh2ZXJpZnlfb25lX3NpZ25hdHVyZSk6IEFkanVzdCBmb3IgbGliZ3BnLWVycm9yLgorCShjaGVja19wdWJrZXlfc2lnbik6IExpa2V3aXNlLgorCShjaGVja19wdWJrZXkpOiBMaWtld2lzZS4KKwkqIGJhc2ljLmMgKGNoZWNrX3B1YmtleV9zaWduKTogTGlrZXdpc2UuCisJKiB0c2V4cC5jIChjYW5vbl9sZW4pOiBMaWtld2lzZS4KKwkoYmFja19hbmRfZm9ydGhfb25lKTogTGlrZXdpc2UuCisKKzIwMDMtMDQtMjcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBwdWJrZXkuYzogQ2hhbmdlZCB0aGUgc2FtcGxlIHByaXZhdGUga2V5IHRvIGNvbnRhaW4gdGhlCisJaWRlbnRpZmllciBgb3BlbnBncC1yc2EnIGluc3RlYWQgb2YgYHJzYScuCisKKwkqIGJhc2ljLmMgKGNoZWNrX2RpZ2VzdHMpOiBFbmFibGVkL2ZpeGVkIHNvbWUgdGVzdHMgZm9yIFRJR0VSLgorCisyMDAzLTA0LTE3ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogUmVtb3ZlZCBgcmVnaXN0ZXInIGZvciBub3cuCisKKzIwMDMtMDQtMTcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBiYXNpYy5jIChjaGVja19kaWdlc3RzKTogSW5jbHVkZSBjaGVja3MgZm9yIFNIQTUxMiBhbmQgU0hBMzg0LgorCisyMDAzLTA0LTE2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfb25lX21kKTogQWxzbyB0ZXN0IG1kX2NvcHkuCisKKzIwMDMtMDQtMDcgIE1vcml0eiBTY2h1bHRlICA8bW9yaXR6QGcxMGNvZGUuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGRlZCByZWdpc3Rlci4KKworCSogcmVnaXN0ZXIuYzogTmV3IGZpbGUuCisKKzIwMDMtMDMtMzAgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfb25lX2NpcGhlcik6IE5ldy4gIFRlc3QgQ1RSLgorCShtYWluKTogQ2FsbCBpdC4KKwkoY2hlY2tfY2lwaGVycyk6IENoZWNrIENUUiBtb2RlLgorCisyMDAzLTAzLTI2ICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkZWQgcHVia2V5LgorCisJKiBwdWJrZXkuYzogTmV3IGZpbGUuCisKKzIwMDMtMDMtMjIgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfY2JjX21hY19jaXBoZXIpOiBOZXcuCisJKG1haW4pOiBVc2UgaXQuCisKKzIwMDMtMDMtMTkgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBrZXlnZW4uYyAoY2hlY2tfcnNhX2tleXMpOiBEb24ndCBleHBlY3QgYW4gZXhwb25lbnQgd2hlbiBhc2tpbmcKKwlmb3IgZT0wLgorCShjaGVja19nZW5lcmF0ZWRfcnNhX2tleSk6IEp1c3QgcHJpbnQgZXhwb25lbnQgaWYgRVhQRUNURURfRSBpcyAwLgorCisyMDAzLTAzLTAyICBNb3JpdHogU2NodWx0ZSAgPG1vcml0ekBnMTBjb2RlLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfb25lX2NpcGhlcik6IFVzZSBnY3J5X2NpcGhlcl9yZXNldCgpIGluc3RlYWQgb2YKKwlnY3J5X2NpcGhlcl9jbG9zZSgpLCBnY3J5X2NpcGhlcl9vcGVuIGFuZCBnY3J5X2NpcGhlcl9zZXRrZXkoKS4KKworMjAwMy0wMS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGtleWdlbi5jOiBOZXcuCisKKzIwMDMtMDEtMjAgIFNpbW9uIEpvc2Vmc3NvbiAgPGphc0BleHR1bmRvLmNvbT4KKworCSogYmFzaWMuYyAoY2hlY2tfZGlnZXN0cyk6IEFkZCBDUkMuCisJKGNoZWNrX29uZV9tZCk6IFByaW50IGNvbXB1dGVkIGFuZCBleHBlY3RlZCB2YWx1ZXMgb24gZXJyb3IuCisKKzIwMDMtMDEtMjAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBiYXNpYy5jIChjaGVja19vbmVfbWQpOiBLbHVkZ2UgdG8gY2hlY2sgYSBvbmUgbWlsbGlvbiAiYSIuCisJKGNoZWNrX2RpZ2VzdHMpOiBBZGQgY2hlY2tzIGZvciBTSEEtMjU2LgorCisyMDAzLTAxLTIwICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYmFzaWMuYyAoY2hlY2tfcHVia2V5KTogQ2hlY2sgdGhlIGtleWdyaXAgZm9yIHRoZSBzYW1wbGUga2V5LgorCisyMDAzLTAxLTE1ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYmFzaWMuYyAodmVyaWZ5X29uZV9zaWduYXR1cmUsY2hlY2tfcHVia2V5X3NpZ24pCisJKGNoZWNrX3B1YmtleSk6IE5ldy4KKwkobWFpbik6IENoZWNrIHB1YmxpYyBrZXkgZnVuY3Rpb25zLiBBZGQgYSAtLWRlYnVnIG9wdGlvbi4KKworMjAwMi0xMS0yMyAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIGJhc2ljLmMgKGNoZWNrX2RpZ2VzdHMpOiBBZGQgYW5vdGhlciB0ZXN0IGZvciBNRDQuICBCeSBTaW1vbgorCUpvc2Vmc3Nvbi4KKworMjAwMi0xMS0xMCAgU2ltb24gSm9zZWZzc29uICA8amFzQGV4dHVuZG8uY29tPgorCisJKiBiYXNpYy5jIChjaGVja19hZXMxMjhfY2JjX2N0c19jaXBoZXIpOiBOZXcgZnVuY3Rpb24uCisJKGNoZWNrX29uZV9jaXBoZXIpOiBBZGQgZmxhZ3MgcGFyYW1ldGVyLgorCShjaGVja19jaXBoZXJzKTogU3VwcG9ydCBmbGFncyBwYXJhbWV0ZXIuCisJKG1haW4pOiBDaGVjayBDVFMuCisKKzIwMDItMTEtMTAgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBiYXNpYy5jIChjaGVja19vbmVfbWQpOiBOZXcuICBCeSBTaW1vbiBKb3NlZnNzb24uCisJKGNoZWNrX2RpZ2VzdHMpOiBOZXcgdGVzdHMgZm9yIE1ENC4gIEJ5IFNpbW9uLgorCisyMDAyLTA4LTI2ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogYmFzaWMuYyAoY2hlY2tfY2lwaGVycyk6IENoZWNrIHNpbXBsZSBERVMuCisKKzIwMDItMDUtMTYgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiB0c2V4cC5jIChiYWNrX2FuZF9mb3J0aCk6IFZlcnkgbWluaW1hbCB0ZXN0IG9mIHRoZSBuZXcgZnVuY3Rpb25zLgorCisyMDAyLTA1LTE0ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCUNoYW5nZWQgbGljZW5zZSBvZiBhbGwgZmlsZXMgdG8gdGhlIExHUEwuCisKKzIwMDItMDUtMDIgIFdlcm5lciBLb2NoICA8d2tAZ251cGcub3JnPgorCisJKiBiYXNpYy5jOiBBZGQgb3B0aW9uIC0tdmVyYm9zZS4KKworMjAwMi0wMS0xMSAgV2VybmVyIEtvY2ggIDx3a0BnbnVwZy5vcmc+CisKKwkqIHRzZXhwLmMgKGNhbm9uX2xlbik6IEZpeGVkIHRlc3RzLgorCisyMDAxLTEyLTE4ICBXZXJuZXIgS29jaCAgPHdrQGdudXBnLm9yZz4KKworCSogdHNleHAuYzogTmV3LgorCisKKyBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwMywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0xvY2FsIFZhcmlhYmxlczoKK2J1ZmZlci1yZWFkLW9ubHk6IHQKK0VuZDoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKwordGVzdHNfYmluID0gXAorICAgICAgICB2ZXJzaW9uIG1waXRlc3RzIHRzZXhwIHQtY29udmVydCBcCisJdC1tcGktYml0IHQtbXBpLXBvaW50IGN1cnZlcyB0LWxvY2sgXAorCXByaW1lIGJhc2ljIGtleWdlbiBwdWJrZXkgaG1hYyBoYXNodGVzdCB0LWtkZiBrZXlncmlwIFwKKwlmaXBzMTg2LWRzYSBhZXN3cmFwIHBrY3MxdjIgcmFuZG9tIGRzYS1yZmM2OTc5IHQtZWQyNTUxOQorCit0ZXN0c19iaW5fbGFzdCA9IGJlbmNobWFyayBiZW5jaC1zbG9wZQorCit0ZXN0c19zaCA9CisKK3Rlc3RzX3NoX2xhc3QgPSBoYXNodGVzdC0yNTZnCisKK1RFU1RTID0gJCh0ZXN0c19iaW4pICQodGVzdHNfc2gpICQodGVzdHNfYmluX2xhc3QpICQodGVzdHNfc2hfbGFzdCkKKworIyBGb3JjZSBzZXF1ZW50aWFsIHJ1biBvZiBzb21lIHRlc3RzLgorYmVuY2gtc2xvcGUubG9nOiAgICBiZW5jaG1hcmsubG9nCitoYXNodGVzdC0yNTZnLmxvZzogIGJlbmNoLXNsb3BlLmxvZworCisKK1RFU1RTX0VOVklST05NRU5UID0gR0NSWVBUX0lOX1JFR1JFU1NJT05fVEVTVD0xCisKKworIyBOZWVkIHRvIGluY2x1ZGUgLi4vc3JjIGluIGFkZGl0aW9uIHRvIHRvcF9zcmNkaXIgYmVjYXVzZSBnY3J5cHQuaCBpcworIyBhIGJ1aWx0IGhlYWRlci4KK0FNX0NQUEZMQUdTID0gLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYworQU1fQ0ZMQUdTID0gJChHUEdfRVJST1JfQ0ZMQUdTKQorQU1fTERGTEFHUyA9IC1uby1pbnN0YWxsCisKK2RlZmF1bHRfbGRhZGQgPSBcCisJLi4vc3JjL2xpYmdjcnlwdC5sYSAkKERMX0xJQlMpIFwKKyAgICAgICAgLi4vY29tcGF0L2xpYmNvbXBhdC5sYSAkKEdQR19FUlJPUl9MSUJTKQorCitFWFRSQV9QUk9HUkFNUyA9IHRlc3RhcGkgcGtiZW5jaAorbm9pbnN0X1BST0dSQU1TID0gJCh0ZXN0c19iaW4pICQodGVzdHNfYmluX2xhc3QpIGZpcHNkcnYgcnNhY3Z0IGdlbmhhc2hkYXRhCitub2luc3RfSEVBREVSUyA9IHQtY29tbW9uLmgKKworRVhUUkFfRElTVCA9IFJFQURNRSByc2EtMTZrLmtleSBjYXZzX3Rlc3RzLnNoIGNhdnNfZHJpdmVyLnBsIFwKKwkgICAgIHBrY3MxdjItb2FlcC5oIHBrY3MxdjItcHNzLmggcGtjczF2Mi12MTVjLmggcGtjczF2Mi12MTVzLmggXAorCSAgICAgdC1lZDI1NTE5LmlucCBzdG9wd2F0Y2guaCBoYXNodGVzdC0yNTZnLmluCisKK0xEQUREID0gJChkZWZhdWx0X2xkYWRkKSAkKExJQlRIUkVBRCkKK3RfbG9ja19MREFERCA9ICQoZGVmYXVsdF9sZGFkZCkgJChMSUJNVUxUSVRIUkVBRCkKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmluIGIvdGVzdHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZGZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTY1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisjCisjIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19tYWtlX2RyeXJ1biA9IFwKKyAgeyBcCisgICAgYW1fX2RyeT1ubzsgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAorICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCisgICAgICAqKSBcCisgICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCisgICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAorICAgICAgICAgICAgKj0qfC0tKikgOzsgXAorICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCisgICAgICAgICAgZXNhYzsgXAorICAgICAgICBkb25lOzsgXAorICAgIGVzYWM7IFwKKyAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAorICB9Citwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitURVNUUyA9ICQoYW1fX0VYRUVYVF8xKSAkKGFtX19FWEVFWFRfMykgJChhbV9fRVhFRVhUXzIpIFwKKwkkKHRlc3RzX3NoX2xhc3QpCitFWFRSQV9QUk9HUkFNUyA9IHRlc3RhcGkkKEVYRUVYVCkgcGtiZW5jaCQoRVhFRVhUKQorbm9pbnN0X1BST0dSQU1TID0gJChhbV9fRVhFRVhUXzEpICQoYW1fX0VYRUVYVF8yKSBmaXBzZHJ2JChFWEVFWFQpIFwKKwlyc2FjdnQkKEVYRUVYVCkgZ2VuaGFzaGRhdGEkKEVYRUVYVCkKK3N1YmRpciA9IHRlc3RzCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvaGFzaHRlc3QtMjU2Zy5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvZ3BnLWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb2NrLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbm9leGVjc3RhY2subTQgJCh0b3Bfc3JjZGlyKS9tNC9vbmNlb25seS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zb2NrbGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3lzX3NvY2tldF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3RocmVhZGxpYi5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGhhc2h0ZXN0LTI1NmcKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fRVhFRVhUXzEgPSB2ZXJzaW9uJChFWEVFWFQpIG1waXRlc3RzJChFWEVFWFQpIHRzZXhwJChFWEVFWFQpIFwKKwl0LWNvbnZlcnQkKEVYRUVYVCkgdC1tcGktYml0JChFWEVFWFQpIHQtbXBpLXBvaW50JChFWEVFWFQpIFwKKwljdXJ2ZXMkKEVYRUVYVCkgdC1sb2NrJChFWEVFWFQpIHByaW1lJChFWEVFWFQpIGJhc2ljJChFWEVFWFQpIFwKKwlrZXlnZW4kKEVYRUVYVCkgcHVia2V5JChFWEVFWFQpIGhtYWMkKEVYRUVYVCkgXAorCWhhc2h0ZXN0JChFWEVFWFQpIHQta2RmJChFWEVFWFQpIGtleWdyaXAkKEVYRUVYVCkgXAorCWZpcHMxODYtZHNhJChFWEVFWFQpIGFlc3dyYXAkKEVYRUVYVCkgcGtjczF2MiQoRVhFRVhUKSBcCisJcmFuZG9tJChFWEVFWFQpIGRzYS1yZmM2OTc5JChFWEVFWFQpIHQtZWQyNTUxOSQoRVhFRVhUKQorYW1fX0VYRUVYVF8yID0gYmVuY2htYXJrJChFWEVFWFQpIGJlbmNoLXNsb3BlJChFWEVFWFQpCitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYWVzd3JhcF9TT1VSQ0VTID0gYWVzd3JhcC5jCithZXN3cmFwX09CSkVDVFMgPSBhZXN3cmFwLiQoT0JKRVhUKQorYWVzd3JhcF9MREFERCA9ICQoTERBREQpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYW1fX0RFUEVOREVOQ0lFU18yID0gLi4vc3JjL2xpYmdjcnlwdC5sYSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorCS4uL2NvbXBhdC9saWJjb21wYXQubGEgJChhbV9fREVQRU5ERU5DSUVTXzEpCithZXN3cmFwX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2Jhc2ljX1NPVVJDRVMgPSBiYXNpYy5jCitiYXNpY19PQkpFQ1RTID0gYmFzaWMuJChPQkpFWFQpCitiYXNpY19MREFERCA9ICQoTERBREQpCitiYXNpY19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitiZW5jaF9zbG9wZV9TT1VSQ0VTID0gYmVuY2gtc2xvcGUuYworYmVuY2hfc2xvcGVfT0JKRUNUUyA9IGJlbmNoLXNsb3BlLiQoT0JKRVhUKQorYmVuY2hfc2xvcGVfTERBREQgPSAkKExEQUREKQorYmVuY2hfc2xvcGVfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorYmVuY2htYXJrX1NPVVJDRVMgPSBiZW5jaG1hcmsuYworYmVuY2htYXJrX09CSkVDVFMgPSBiZW5jaG1hcmsuJChPQkpFWFQpCitiZW5jaG1hcmtfTERBREQgPSAkKExEQUREKQorYmVuY2htYXJrX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2N1cnZlc19TT1VSQ0VTID0gY3VydmVzLmMKK2N1cnZlc19PQkpFQ1RTID0gY3VydmVzLiQoT0JKRVhUKQorY3VydmVzX0xEQUREID0gJChMREFERCkKK2N1cnZlc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitkc2FfcmZjNjk3OV9TT1VSQ0VTID0gZHNhLXJmYzY5NzkuYworZHNhX3JmYzY5NzlfT0JKRUNUUyA9IGRzYS1yZmM2OTc5LiQoT0JKRVhUKQorZHNhX3JmYzY5NzlfTERBREQgPSAkKExEQUREKQorZHNhX3JmYzY5NzlfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorZmlwczE4Nl9kc2FfU09VUkNFUyA9IGZpcHMxODYtZHNhLmMKK2ZpcHMxODZfZHNhX09CSkVDVFMgPSBmaXBzMTg2LWRzYS4kKE9CSkVYVCkKK2ZpcHMxODZfZHNhX0xEQUREID0gJChMREFERCkKK2ZpcHMxODZfZHNhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2ZpcHNkcnZfU09VUkNFUyA9IGZpcHNkcnYuYworZmlwc2Rydl9PQkpFQ1RTID0gZmlwc2Rydi4kKE9CSkVYVCkKK2ZpcHNkcnZfTERBREQgPSAkKExEQUREKQorZmlwc2Rydl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitnZW5oYXNoZGF0YV9TT1VSQ0VTID0gZ2VuaGFzaGRhdGEuYworZ2VuaGFzaGRhdGFfT0JKRUNUUyA9IGdlbmhhc2hkYXRhLiQoT0JKRVhUKQorZ2VuaGFzaGRhdGFfTERBREQgPSAkKExEQUREKQorZ2VuaGFzaGRhdGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQoraGFzaHRlc3RfU09VUkNFUyA9IGhhc2h0ZXN0LmMKK2hhc2h0ZXN0X09CSkVDVFMgPSBoYXNodGVzdC4kKE9CSkVYVCkKK2hhc2h0ZXN0X0xEQUREID0gJChMREFERCkKK2hhc2h0ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2htYWNfU09VUkNFUyA9IGhtYWMuYworaG1hY19PQkpFQ1RTID0gaG1hYy4kKE9CSkVYVCkKK2htYWNfTERBREQgPSAkKExEQUREKQoraG1hY19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitrZXlnZW5fU09VUkNFUyA9IGtleWdlbi5jCitrZXlnZW5fT0JKRUNUUyA9IGtleWdlbi4kKE9CSkVYVCkKK2tleWdlbl9MREFERCA9ICQoTERBREQpCitrZXlnZW5fREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQora2V5Z3JpcF9TT1VSQ0VTID0ga2V5Z3JpcC5jCitrZXlncmlwX09CSkVDVFMgPSBrZXlncmlwLiQoT0JKRVhUKQora2V5Z3JpcF9MREFERCA9ICQoTERBREQpCitrZXlncmlwX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK21waXRlc3RzX1NPVVJDRVMgPSBtcGl0ZXN0cy5jCittcGl0ZXN0c19PQkpFQ1RTID0gbXBpdGVzdHMuJChPQkpFWFQpCittcGl0ZXN0c19MREFERCA9ICQoTERBREQpCittcGl0ZXN0c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitwa2JlbmNoX1NPVVJDRVMgPSBwa2JlbmNoLmMKK3BrYmVuY2hfT0JKRUNUUyA9IHBrYmVuY2guJChPQkpFWFQpCitwa2JlbmNoX0xEQUREID0gJChMREFERCkKK3BrYmVuY2hfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorcGtjczF2Ml9TT1VSQ0VTID0gcGtjczF2Mi5jCitwa2NzMXYyX09CSkVDVFMgPSBwa2NzMXYyLiQoT0JKRVhUKQorcGtjczF2Ml9MREFERCA9ICQoTERBREQpCitwa2NzMXYyX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3ByaW1lX1NPVVJDRVMgPSBwcmltZS5jCitwcmltZV9PQkpFQ1RTID0gcHJpbWUuJChPQkpFWFQpCitwcmltZV9MREFERCA9ICQoTERBREQpCitwcmltZV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCitwdWJrZXlfU09VUkNFUyA9IHB1YmtleS5jCitwdWJrZXlfT0JKRUNUUyA9IHB1YmtleS4kKE9CSkVYVCkKK3B1YmtleV9MREFERCA9ICQoTERBREQpCitwdWJrZXlfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorcmFuZG9tX1NPVVJDRVMgPSByYW5kb20uYworcmFuZG9tX09CSkVDVFMgPSByYW5kb20uJChPQkpFWFQpCityYW5kb21fTERBREQgPSAkKExEQUREKQorcmFuZG9tX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3JzYWN2dF9TT1VSQ0VTID0gcnNhY3Z0LmMKK3JzYWN2dF9PQkpFQ1RTID0gcnNhY3Z0LiQoT0JKRVhUKQorcnNhY3Z0X0xEQUREID0gJChMREFERCkKK3JzYWN2dF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCit0X2NvbnZlcnRfU09VUkNFUyA9IHQtY29udmVydC5jCit0X2NvbnZlcnRfT0JKRUNUUyA9IHQtY29udmVydC4kKE9CSkVYVCkKK3RfY29udmVydF9MREFERCA9ICQoTERBREQpCit0X2NvbnZlcnRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQordF9lZDI1NTE5X1NPVVJDRVMgPSB0LWVkMjU1MTkuYwordF9lZDI1NTE5X09CSkVDVFMgPSB0LWVkMjU1MTkuJChPQkpFWFQpCit0X2VkMjU1MTlfTERBREQgPSAkKExEQUREKQordF9lZDI1NTE5X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3Rfa2RmX1NPVVJDRVMgPSB0LWtkZi5jCit0X2tkZl9PQkpFQ1RTID0gdC1rZGYuJChPQkpFWFQpCit0X2tkZl9MREFERCA9ICQoTERBREQpCit0X2tkZl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCit0X2xvY2tfU09VUkNFUyA9IHQtbG9jay5jCit0X2xvY2tfT0JKRUNUUyA9IHQtbG9jay4kKE9CSkVYVCkKK3RfbG9ja19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCit0X21waV9iaXRfU09VUkNFUyA9IHQtbXBpLWJpdC5jCit0X21waV9iaXRfT0JKRUNUUyA9IHQtbXBpLWJpdC4kKE9CSkVYVCkKK3RfbXBpX2JpdF9MREFERCA9ICQoTERBREQpCit0X21waV9iaXRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQordF9tcGlfcG9pbnRfU09VUkNFUyA9IHQtbXBpLXBvaW50LmMKK3RfbXBpX3BvaW50X09CSkVDVFMgPSB0LW1waS1wb2ludC4kKE9CSkVYVCkKK3RfbXBpX3BvaW50X0xEQUREID0gJChMREFERCkKK3RfbXBpX3BvaW50X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3Rlc3RhcGlfU09VUkNFUyA9IHRlc3RhcGkuYwordGVzdGFwaV9PQkpFQ1RTID0gdGVzdGFwaS4kKE9CSkVYVCkKK3Rlc3RhcGlfTERBREQgPSAkKExEQUREKQordGVzdGFwaV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCit0c2V4cF9TT1VSQ0VTID0gdHNleHAuYwordHNleHBfT0JKRUNUUyA9IHRzZXhwLiQoT0JKRVhUKQordHNleHBfTERBREQgPSAkKExEQUREKQordHNleHBfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpICQoYW1fX0RFUEVOREVOQ0lFU18xKQordmVyc2lvbl9TT1VSQ0VTID0gdmVyc2lvbi5jCit2ZXJzaW9uX09CSkVDVFMgPSB2ZXJzaW9uLiQoT0JKRVhUKQordmVyc2lvbl9MREFERCA9ICQoTERBREQpCit2ZXJzaW9uX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSBhZXN3cmFwLmMgYmFzaWMuYyBiZW5jaC1zbG9wZS5jIGJlbmNobWFyay5jIGN1cnZlcy5jIFwKKwlkc2EtcmZjNjk3OS5jIGZpcHMxODYtZHNhLmMgZmlwc2Rydi5jIGdlbmhhc2hkYXRhLmMgaGFzaHRlc3QuYyBcCisJaG1hYy5jIGtleWdlbi5jIGtleWdyaXAuYyBtcGl0ZXN0cy5jIHBrYmVuY2guYyBwa2NzMXYyLmMgXAorCXByaW1lLmMgcHVia2V5LmMgcmFuZG9tLmMgcnNhY3Z0LmMgdC1jb252ZXJ0LmMgdC1lZDI1NTE5LmMgXAorCXQta2RmLmMgdC1sb2NrLmMgdC1tcGktYml0LmMgdC1tcGktcG9pbnQuYyB0ZXN0YXBpLmMgdHNleHAuYyBcCisJdmVyc2lvbi5jCitESVNUX1NPVVJDRVMgPSBhZXN3cmFwLmMgYmFzaWMuYyBiZW5jaC1zbG9wZS5jIGJlbmNobWFyay5jIGN1cnZlcy5jIFwKKwlkc2EtcmZjNjk3OS5jIGZpcHMxODYtZHNhLmMgZmlwc2Rydi5jIGdlbmhhc2hkYXRhLmMgaGFzaHRlc3QuYyBcCisJaG1hYy5jIGtleWdlbi5jIGtleWdyaXAuYyBtcGl0ZXN0cy5jIHBrYmVuY2guYyBwa2NzMXYyLmMgXAorCXByaW1lLmMgcHVia2V5LmMgcmFuZG9tLmMgcnNhY3Z0LmMgdC1jb252ZXJ0LmMgdC1lZDI1NTE5LmMgXAorCXQta2RmLmMgdC1sb2NrLmMgdC1tcGktYml0LmMgdC1tcGktcG9pbnQuYyB0ZXN0YXBpLmMgdHNleHAuYyBcCisJdmVyc2lvbi5jCithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYworSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCithbV9fdHR5X2NvbG9ycyA9IFwKK3JlZD07IGdybj07IGxnbj07IGJsdT07IHN0ZD0KK2FtX19FWEVFWFRfMyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0ZJTEVWRVJTSU9OID0gQEJVSUxEX0ZJTEVWRVJTSU9OQAorQlVJTERfUkVWSVNJT04gPSBAQlVJTERfUkVWSVNJT05ACitCVUlMRF9USU1FU1RBTVAgPSBAQlVJTERfVElNRVNUQU1QQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkFMTEJBQ0tfU09DS0xFTl9UID0gQEZBTExCQUNLX1NPQ0tMRU5fVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NSWVBUX0NJUEhFUlMgPSBAR0NSWVBUX0NJUEhFUlNACitHQ1JZUFRfRElHRVNUUyA9IEBHQ1JZUFRfRElHRVNUU0AKK0dDUllQVF9IV0ZfTU9EVUxFUyA9IEBHQ1JZUFRfSFdGX01PRFVMRVNACitHQ1JZUFRfS0RGUyA9IEBHQ1JZUFRfS0RGU0AKK0dDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitHQ1JZUFRfUkFORE9NID0gQEdDUllQVF9SQU5ET01ACitHUEdfRVJST1JfQ0ZMQUdTID0gQEdQR19FUlJPUl9DRkxBR1NACitHUEdfRVJST1JfQ09ORklHID0gQEdQR19FUlJPUl9DT05GSUdACitHUEdfRVJST1JfTElCUyA9IEBHUEdfRVJST1JfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0lOU0VSVF9TWVNfU0VMRUNUX0ggPSBASU5TRVJUX1NZU19TRUxFQ1RfSEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJHQ1JZUFRfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfQ0lQSEVSU0AKK0xJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT04gPSBATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKK0xJQkdDUllQVF9DT05GSUdfQ0ZMQUdTID0gQExJQkdDUllQVF9DT05GSUdfQ0ZMQUdTQAorTElCR0NSWVBUX0NPTkZJR19IT1NUID0gQExJQkdDUllQVF9DT05GSUdfSE9TVEAKK0xJQkdDUllQVF9DT05GSUdfTElCUyA9IEBMSUJHQ1JZUFRfQ09ORklHX0xJQlNACitMSUJHQ1JZUFRfRElHRVNUUyA9IEBMSUJHQ1JZUFRfRElHRVNUU0AKK0xJQkdDUllQVF9MVF9BR0UgPSBATElCR0NSWVBUX0xUX0FHRUAKK0xJQkdDUllQVF9MVF9DVVJSRU5UID0gQExJQkdDUllQVF9MVF9DVVJSRU5UQAorTElCR0NSWVBUX0xUX1JFVklTSU9OID0gQExJQkdDUllQVF9MVF9SRVZJU0lPTkAKK0xJQkdDUllQVF9QVUJLRVlfQ0lQSEVSUyA9IEBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACitMSUJHQ1JZUFRfVEhSRUFEX01PRFVMRVMgPSBATElCR0NSWVBUX1RIUkVBRF9NT0RVTEVTQAorTElCTVVMVElUSFJFQUQgPSBATElCTVVMVElUSFJFQURACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUSFJFQUQgPSBATElCVEhSRUFEQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJNVUxUSVRIUkVBRCA9IEBMVExJQk1VTFRJVEhSRUFEQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUTElCVEhSRUFEID0gQExUTElCVEhSRUFEQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK01QSV9TRkxBR1MgPSBATVBJX1NGTEFHU0AKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PRVhFQ1NUQUNLX0ZMQUdTID0gQE5PRVhFQ1NUQUNLX0ZMQUdTQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQVEhfQ0ZMQUdTID0gQFBUSF9DRkxBR1NACitQVEhfQ09ORklHID0gQFBUSF9DT05GSUdACitQVEhfTElCUyA9IEBQVEhfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitSQyA9IEBSQ0AKK1JVTl9MQVJHRV9EQVRBX1RFU1RTID0gQFJVTl9MQVJHRV9EQVRBX1RFU1RTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1NZU19TT0NLRVRfSCA9IEBTWVNfU09DS0VUX0hACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OX05VTUJFUiA9IEBWRVJTSU9OX05VTUJFUkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2VtYWNzX2xvY2FsX3ZhcnNfYmVnaW4gPSBAZW1hY3NfbG9jYWxfdmFyc19iZWdpbkAKK2VtYWNzX2xvY2FsX3ZhcnNfZW5kID0gQGVtYWNzX2xvY2FsX3ZhcnNfZW5kQAorZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHkgPSBAZW1hY3NfbG9jYWxfdmFyc19yZWFkX29ubHlACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0ZXN0c19iaW4gPSBcCisgICAgICAgIHZlcnNpb24gbXBpdGVzdHMgdHNleHAgdC1jb252ZXJ0IFwKKwl0LW1waS1iaXQgdC1tcGktcG9pbnQgY3VydmVzIHQtbG9jayBcCisJcHJpbWUgYmFzaWMga2V5Z2VuIHB1YmtleSBobWFjIGhhc2h0ZXN0IHQta2RmIGtleWdyaXAgXAorCWZpcHMxODYtZHNhIGFlc3dyYXAgcGtjczF2MiByYW5kb20gZHNhLXJmYzY5NzkgdC1lZDI1NTE5CisKK3Rlc3RzX2Jpbl9sYXN0ID0gYmVuY2htYXJrIGJlbmNoLXNsb3BlCit0ZXN0c19zaCA9IAordGVzdHNfc2hfbGFzdCA9IGhhc2h0ZXN0LTI1NmcKK1RFU1RTX0VOVklST05NRU5UID0gR0NSWVBUX0lOX1JFR1JFU1NJT05fVEVTVD0xCisKKyMgTmVlZCB0byBpbmNsdWRlIC4uL3NyYyBpbiBhZGRpdGlvbiB0byB0b3Bfc3JjZGlyIGJlY2F1c2UgZ2NyeXB0LmggaXMKKyMgYSBidWlsdCBoZWFkZXIuCitBTV9DUFBGTEFHUyA9IC1JLi4vc3JjIC1JJCh0b3Bfc3JjZGlyKS9zcmMKK0FNX0NGTEFHUyA9ICQoR1BHX0VSUk9SX0NGTEFHUykKK0FNX0xERkxBR1MgPSAtbm8taW5zdGFsbAorZGVmYXVsdF9sZGFkZCA9IFwKKwkuLi9zcmMvbGliZ2NyeXB0LmxhICQoRExfTElCUykgXAorICAgICAgICAuLi9jb21wYXQvbGliY29tcGF0LmxhICQoR1BHX0VSUk9SX0xJQlMpCisKK25vaW5zdF9IRUFERVJTID0gdC1jb21tb24uaAorRVhUUkFfRElTVCA9IFJFQURNRSByc2EtMTZrLmtleSBjYXZzX3Rlc3RzLnNoIGNhdnNfZHJpdmVyLnBsIFwKKwkgICAgIHBrY3MxdjItb2FlcC5oIHBrY3MxdjItcHNzLmggcGtjczF2Mi12MTVjLmggcGtjczF2Mi12MTVzLmggXAorCSAgICAgdC1lZDI1NTE5LmlucCBzdG9wd2F0Y2guaCBoYXNodGVzdC0yNTZnLmluCisKK0xEQUREID0gJChkZWZhdWx0X2xkYWRkKSAkKExJQlRIUkVBRCkKK3RfbG9ja19MREFERCA9ICQoZGVmYXVsdF9sZGFkZCkgJChMSUJNVUxUSVRIUkVBRCkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraGFzaHRlc3QtMjU2ZzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2hhc2h0ZXN0LTI1NmcuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithZXN3cmFwJChFWEVFWFQpOiAkKGFlc3dyYXBfT0JKRUNUUykgJChhZXN3cmFwX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hZXN3cmFwX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFlc3dyYXAkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoYWVzd3JhcF9PQkpFQ1RTKSAkKGFlc3dyYXBfTERBREQpICQoTElCUykKK2Jhc2ljJChFWEVFWFQpOiAkKGJhc2ljX09CSkVDVFMpICQoYmFzaWNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2Jhc2ljX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGJhc2ljJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGJhc2ljX09CSkVDVFMpICQoYmFzaWNfTERBREQpICQoTElCUykKK2JlbmNoLXNsb3BlJChFWEVFWFQpOiAkKGJlbmNoX3Nsb3BlX09CSkVDVFMpICQoYmVuY2hfc2xvcGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2JlbmNoX3Nsb3BlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGJlbmNoLXNsb3BlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGJlbmNoX3Nsb3BlX09CSkVDVFMpICQoYmVuY2hfc2xvcGVfTERBREQpICQoTElCUykKK2JlbmNobWFyayQoRVhFRVhUKTogJChiZW5jaG1hcmtfT0JKRUNUUykgJChiZW5jaG1hcmtfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2JlbmNobWFya19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBiZW5jaG1hcmskKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoYmVuY2htYXJrX09CSkVDVFMpICQoYmVuY2htYXJrX0xEQUREKSAkKExJQlMpCitjdXJ2ZXMkKEVYRUVYVCk6ICQoY3VydmVzX09CSkVDVFMpICQoY3VydmVzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9jdXJ2ZXNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY3VydmVzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGN1cnZlc19PQkpFQ1RTKSAkKGN1cnZlc19MREFERCkgJChMSUJTKQorZHNhLXJmYzY5NzkkKEVYRUVYVCk6ICQoZHNhX3JmYzY5NzlfT0JKRUNUUykgJChkc2FfcmZjNjk3OV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZHNhX3JmYzY5NzlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZHNhLXJmYzY5NzkkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZHNhX3JmYzY5NzlfT0JKRUNUUykgJChkc2FfcmZjNjk3OV9MREFERCkgJChMSUJTKQorZmlwczE4Ni1kc2EkKEVYRUVYVCk6ICQoZmlwczE4Nl9kc2FfT0JKRUNUUykgJChmaXBzMTg2X2RzYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZmlwczE4Nl9kc2FfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZmlwczE4Ni1kc2EkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZmlwczE4Nl9kc2FfT0JKRUNUUykgJChmaXBzMTg2X2RzYV9MREFERCkgJChMSUJTKQorZmlwc2RydiQoRVhFRVhUKTogJChmaXBzZHJ2X09CSkVDVFMpICQoZmlwc2Rydl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZmlwc2Rydl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBmaXBzZHJ2JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGZpcHNkcnZfT0JKRUNUUykgJChmaXBzZHJ2X0xEQUREKSAkKExJQlMpCitnZW5oYXNoZGF0YSQoRVhFRVhUKTogJChnZW5oYXNoZGF0YV9PQkpFQ1RTKSAkKGdlbmhhc2hkYXRhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nZW5oYXNoZGF0YV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnZW5oYXNoZGF0YSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnZW5oYXNoZGF0YV9PQkpFQ1RTKSAkKGdlbmhhc2hkYXRhX0xEQUREKSAkKExJQlMpCitoYXNodGVzdCQoRVhFRVhUKTogJChoYXNodGVzdF9PQkpFQ1RTKSAkKGhhc2h0ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9oYXNodGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBoYXNodGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChoYXNodGVzdF9PQkpFQ1RTKSAkKGhhc2h0ZXN0X0xEQUREKSAkKExJQlMpCitobWFjJChFWEVFWFQpOiAkKGhtYWNfT0JKRUNUUykgJChobWFjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9obWFjX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGhtYWMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoaG1hY19PQkpFQ1RTKSAkKGhtYWNfTERBREQpICQoTElCUykKK2tleWdlbiQoRVhFRVhUKTogJChrZXlnZW5fT0JKRUNUUykgJChrZXlnZW5fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2tleWdlbl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBrZXlnZW4kKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoa2V5Z2VuX09CSkVDVFMpICQoa2V5Z2VuX0xEQUREKSAkKExJQlMpCitrZXlncmlwJChFWEVFWFQpOiAkKGtleWdyaXBfT0JKRUNUUykgJChrZXlncmlwX0RFUEVOREVOQ0lFUykgJChFWFRSQV9rZXlncmlwX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGtleWdyaXAkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoa2V5Z3JpcF9PQkpFQ1RTKSAkKGtleWdyaXBfTERBREQpICQoTElCUykKK21waXRlc3RzJChFWEVFWFQpOiAkKG1waXRlc3RzX09CSkVDVFMpICQobXBpdGVzdHNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX21waXRlc3RzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG1waXRlc3RzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKG1waXRlc3RzX09CSkVDVFMpICQobXBpdGVzdHNfTERBREQpICQoTElCUykKK3BrYmVuY2gkKEVYRUVYVCk6ICQocGtiZW5jaF9PQkpFQ1RTKSAkKHBrYmVuY2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BrYmVuY2hfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcGtiZW5jaCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwa2JlbmNoX09CSkVDVFMpICQocGtiZW5jaF9MREFERCkgJChMSUJTKQorcGtjczF2MiQoRVhFRVhUKTogJChwa2NzMXYyX09CSkVDVFMpICQocGtjczF2Ml9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGtjczF2Ml9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwa2NzMXYyJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHBrY3MxdjJfT0JKRUNUUykgJChwa2NzMXYyX0xEQUREKSAkKExJQlMpCitwcmltZSQoRVhFRVhUKTogJChwcmltZV9PQkpFQ1RTKSAkKHByaW1lX0RFUEVOREVOQ0lFUykgJChFWFRSQV9wcmltZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwcmltZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwcmltZV9PQkpFQ1RTKSAkKHByaW1lX0xEQUREKSAkKExJQlMpCitwdWJrZXkkKEVYRUVYVCk6ICQocHVia2V5X09CSkVDVFMpICQocHVia2V5X0RFUEVOREVOQ0lFUykgJChFWFRSQV9wdWJrZXlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcHVia2V5JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHB1YmtleV9PQkpFQ1RTKSAkKHB1YmtleV9MREFERCkgJChMSUJTKQorcmFuZG9tJChFWEVFWFQpOiAkKHJhbmRvbV9PQkpFQ1RTKSAkKHJhbmRvbV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcmFuZG9tX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHJhbmRvbSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChyYW5kb21fT0JKRUNUUykgJChyYW5kb21fTERBREQpICQoTElCUykKK3JzYWN2dCQoRVhFRVhUKTogJChyc2FjdnRfT0JKRUNUUykgJChyc2FjdnRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3JzYWN2dF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiByc2FjdnQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQocnNhY3Z0X09CSkVDVFMpICQocnNhY3Z0X0xEQUREKSAkKExJQlMpCit0LWNvbnZlcnQkKEVYRUVYVCk6ICQodF9jb252ZXJ0X09CSkVDVFMpICQodF9jb252ZXJ0X0RFUEVOREVOQ0lFUykgJChFWFRSQV90X2NvbnZlcnRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdC1jb252ZXJ0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHRfY29udmVydF9PQkpFQ1RTKSAkKHRfY29udmVydF9MREFERCkgJChMSUJTKQordC1lZDI1NTE5JChFWEVFWFQpOiAkKHRfZWQyNTUxOV9PQkpFQ1RTKSAkKHRfZWQyNTUxOV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdF9lZDI1NTE5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHQtZWQyNTUxOSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJCh0X2VkMjU1MTlfT0JKRUNUUykgJCh0X2VkMjU1MTlfTERBREQpICQoTElCUykKK3Qta2RmJChFWEVFWFQpOiAkKHRfa2RmX09CSkVDVFMpICQodF9rZGZfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3Rfa2RmX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHQta2RmJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHRfa2RmX09CSkVDVFMpICQodF9rZGZfTERBREQpICQoTElCUykKK3QtbG9jayQoRVhFRVhUKTogJCh0X2xvY2tfT0JKRUNUUykgJCh0X2xvY2tfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3RfbG9ja19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0LWxvY2skKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQodF9sb2NrX09CSkVDVFMpICQodF9sb2NrX0xEQUREKSAkKExJQlMpCit0LW1waS1iaXQkKEVYRUVYVCk6ICQodF9tcGlfYml0X09CSkVDVFMpICQodF9tcGlfYml0X0RFUEVOREVOQ0lFUykgJChFWFRSQV90X21waV9iaXRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdC1tcGktYml0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHRfbXBpX2JpdF9PQkpFQ1RTKSAkKHRfbXBpX2JpdF9MREFERCkgJChMSUJTKQordC1tcGktcG9pbnQkKEVYRUVYVCk6ICQodF9tcGlfcG9pbnRfT0JKRUNUUykgJCh0X21waV9wb2ludF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdF9tcGlfcG9pbnRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdC1tcGktcG9pbnQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQodF9tcGlfcG9pbnRfT0JKRUNUUykgJCh0X21waV9wb2ludF9MREFERCkgJChMSUJTKQordGVzdGFwaSQoRVhFRVhUKTogJCh0ZXN0YXBpX09CSkVDVFMpICQodGVzdGFwaV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdGVzdGFwaV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0ZXN0YXBpJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHRlc3RhcGlfT0JKRUNUUykgJCh0ZXN0YXBpX0xEQUREKSAkKExJQlMpCit0c2V4cCQoRVhFRVhUKTogJCh0c2V4cF9PQkpFQ1RTKSAkKHRzZXhwX0RFUEVOREVOQ0lFUykgJChFWFRSQV90c2V4cF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0c2V4cCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJCh0c2V4cF9PQkpFQ1RTKSAkKHRzZXhwX0xEQUREKSAkKExJQlMpCit2ZXJzaW9uJChFWEVFWFQpOiAkKHZlcnNpb25fT0JKRUNUUykgJCh2ZXJzaW9uX0RFUEVOREVOQ0lFUykgJChFWFRSQV92ZXJzaW9uX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHZlcnNpb24kKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQodmVyc2lvbl9PQkpFQ1RTKSAkKHZlcnNpb25fTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Flc3dyYXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Jhc2ljLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iZW5jaC1zbG9wZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmVuY2htYXJrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJ2ZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RzYS1yZmM2OTc5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maXBzMTg2LWRzYS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlwc2Rydi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2VuaGFzaGRhdGEuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2hhc2h0ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9obWFjLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9rZXlnZW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2tleWdyaXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21waXRlc3RzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wa2JlbmNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wa2NzMXYyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcmltZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHVia2V5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYW5kb20uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JzYWN2dC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdC1jb252ZXJ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90LWVkMjU1MTkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Qta2RmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90LWxvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3QtbXBpLWJpdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdC1tcGktcG9pbnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rlc3RhcGkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RzZXhwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92ZXJzaW9uLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2NoZWNrLVRFU1RTOiAkKFRFU1RTKQorCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgXAorCXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKKwlsaXN0PScgJChURVNUUykgJzsgXAorCSQoYW1fX3R0eV9jb2xvcnMpOyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCisJICAgIGVsaWYgdGVzdCAtZiAkJHRzdDsgdGhlbiBkaXI9OyBcCisJICAgIGVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgJChURVNUU19FTlZJUk9OTUVOVCkgJCR7ZGlyfSQkdHN0OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhwYXNzPWBleHByICQkeHBhc3MgKyAxYDsgXAorCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsgXAorCQljb2w9JCRyZWQ7IHJlcz1YUEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWNvbD0kJGdybjsgcmVzPVBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbGlmIHRlc3QgJCQ/IC1uZSA3NzsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4ZmFpbD1gZXhwciAkJHhmYWlsICsgMWA7IFwKKwkJY29sPSQkbGduOyByZXM9WEZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsgXAorCQljb2w9JCRyZWQ7IHJlcz1GQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcD1gZXhwciAkJHNraXAgKyAxYDsgXAorCSAgICAgIGNvbD0kJGJsdTsgcmVzPVNLSVA7IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sfSQkcmVzJCR7c3RkfTogJCR0c3QiOyBcCisJICBkb25lOyBcCisJICBpZiB0ZXN0ICIkJGFsbCIgLWVxIDE7IHRoZW4gXAorCSAgICB0ZXN0cz0idGVzdCI7IFwKKwkgICAgQWxsPSIiOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdHM9InRlc3RzIjsgXAorCSAgICBBbGw9IkFsbCAiOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCR4ZmFpbCIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRBbGwkJGFsbCAkJHRlc3RzIHBhc3NlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4ZmFpbCIgLWVxIDE7IHRoZW4gZmFpbHVyZXM9ZmFpbHVyZTsgZWxzZSBmYWlsdXJlcz1mYWlsdXJlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBiZWhhdmVkIGFzIGV4cGVjdGVkICgkJHhmYWlsIGV4cGVjdGVkICQkZmFpbHVyZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZmFpbGVkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMTsgdGhlbiBwYXNzZXM9cGFzczsgZWxzZSBwYXNzZXM9cGFzc2VzOyBmaTsgXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgJCR0ZXN0cyBkaWQgbm90IGJlaGF2ZSBhcyBleHBlY3RlZCAoJCR4cGFzcyB1bmV4cGVjdGVkICQkcGFzc2VzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9IiQkYmFubmVyIjsgXAorCSAgc2tpcHBlZD0iIjsgXAorCSAgaWYgdGVzdCAiJCRza2lwIiAtbmUgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkc2tpcCIgLWVxIDE7IHRoZW4gXAorCSAgICAgIHNraXBwZWQ9IigkJHNraXAgdGVzdCB3YXMgbm90IHJ1bikiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXBwZWQ9IigkJHNraXAgdGVzdHMgd2VyZSBub3QgcnVuKSI7IFwKKwkgICAgZmk7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRza2lwcGVkIiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHNraXBwZWQiOyBcCisJICBmaTsgXAorCSAgcmVwb3J0PSIiOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDAgJiYgdGVzdCAtbiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiOyB0aGVuIFwKKwkgICAgcmVwb3J0PSJQbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHJlcG9ydCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRyZXBvcnQiOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPWBlY2hvICIkJGRhc2hlcyIgfCBzZWQgcy8uLz0vZ2A7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGNvbD0iJCRncm4iOyBcCisJICBlbHNlIFwKKwkgICAgY29sPSIkJHJlZCI7IFwKKwkgIGZpOyBcCisJICBlY2hvICIkJHtjb2x9JCRkYXNoZXMkJHtzdGR9IjsgXAorCSAgZWNobyAiJCR7Y29sfSQkYmFubmVyJCR7c3RkfSI7IFwKKwkgIHRlc3QgLXogIiQkc2tpcHBlZCIgfHwgZWNobyAiJCR7Y29sfSQkc2tpcHBlZCQke3N0ZH0iOyBcCisJICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCR7Y29sfSQkcmVwb3J0JCR7c3RkfSI7IFwKKwkgIGVjaG8gIiQke2NvbH0kJGRhc2hlcyQke3N0ZH0iOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIEZvcmNlIHNlcXVlbnRpYWwgcnVuIG9mIHNvbWUgdGVzdHMuCitiZW5jaC1zbG9wZS5sb2c6ICAgIGJlbmNobWFyay5sb2cKK2hhc2h0ZXN0LTI1NmcubG9nOiAgYmVuY2gtc2xvcGUubG9nCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL1JFQURNRSBiL3Rlc3RzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzI2ODkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUkVBRE1FCkBAIC0wLDAgKzEsOSBAQAorU29tZSBub3RlcyBhYm91dCB0aGUgdGVzdHMuCisKK3JzYS0xNmsua2V5IC0gQSAxNjM4NCBiaXQgUlNBIGtleSAocHVibGljIGFuZCBwcml2YXQpLCBjcmVhdGVkIDIwMDgtMDgtMjguCisgICAgICAgICAgICAgIEl0IHRvb2sgOTEgbWludXRlcyB0byBjcmVhdGUgaXQgb24gYSAxNTAwTWh6IFBlbnRpdW0gTS4KKyAgICAgICAgICAgICAgcGtwZW5jaCBzaG93ZWQgdGhlc2UgcmVzdWx0czoKKyAgICAgICAgICAgICAgICBlbmNyeXB0OiAgICA4MCBtcworICAgICAgICAgICAgICAgIGRlY3J5cHQ6IDE0MzcwIG1zCisgICAgICAgICAgICAgICAgICAgc2lnbjogMTQxMTAgbXMKKyAgICAgICAgICAgICAgICAgdmVyaWZ5OiAgICAzMCBtcwpkaWZmIC0tZ2l0IGEvdGVzdHMvYWVzd3JhcC5jIGIvdGVzdHMvYWVzd3JhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hZXN3cmFwLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qIGFlc3dyYXAuYyAtICBBRVNXUkFQIG1vZGUgcmVncmVzc2lvbiB0ZXN0cworICoJQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CisKK3N0YXRpYyB2b2lkCitmYWlsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBlcnJvcl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworCisKK3N0YXRpYyB2b2lkCitjaGVjayAoaW50IGFsZ28sCisgICAgICAgY29uc3Qgdm9pZCAqa2VrLCBzaXplX3Qga2VrbGVuLAorICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgIGNvbnN0IHZvaWQgKmV4cGVjdGVkLCBzaXplX3QgZXhwZWN0ZWRsZW4pCit7CisgIGdjcnlfZXJyb3JfdCBlcnI7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQ7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmWzMyKzhdOworICBzaXplX3Qgb3V0YnVmbGVuOworCisgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZCwgYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9BRVNXUkFQLCAwKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiZ2NyeV9jaXBoZXJfb3BlbiBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkLCBrZWssIGtla2xlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBvdXRidWZsZW4gPSBkYXRhbGVuICsgODsKKyAgaWYgKG91dGJ1ZmxlbiA+IHNpemVvZiBvdXRidWYpCisgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVEVSTkFMKTsKKyAgZWxzZQorICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkLCBvdXRidWYsIG91dGJ1ZmxlbiwgZGF0YSwgZGF0YWxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImdjcnlfY2lwaGVyX2VuY3J5cHQgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG91dGJ1ZmxlbiAhPSBleHBlY3RlZGxlbiB8fCBtZW1jbXAgKG91dGJ1ZiwgZXhwZWN0ZWQsIGV4cGVjdGVkbGVuKSkKKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworICAgICAgaW50IGk7CisKKyAgICAgIGZhaWwgKCJtaXNtYXRjaCBhdCBlbmNyeXB0aW9uIVxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjb21wdXRlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgb3V0YnVmbGVuOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiJTAyeCAiLCBvdXRidWZbaV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5leHBlY3RlZDogIik7CisgICAgICBmb3IgKHMgPSBleHBlY3RlZCwgaSA9IDA7IGkgPCBleHBlY3RlZGxlbjsgcysrLCBpKyspCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiUwMnggIiwgKnMpOworICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICB9CisKKworICBvdXRidWZsZW4gPSBleHBlY3RlZGxlbiAtIDg7CisgIGlmIChvdXRidWZsZW4gPiBzaXplb2Ygb3V0YnVmKQorICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9JTlRFUk5BTCk7CisgIGVsc2UKKyAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZCwgb3V0YnVmLCBvdXRidWZsZW4sIGV4cGVjdGVkLCBleHBlY3RlZGxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImdjcnlfY2lwaGVyX2RlY3J5cHQgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG91dGJ1ZmxlbiAhPSBkYXRhbGVuIHx8IG1lbWNtcCAob3V0YnVmLCBkYXRhLCBkYXRhbGVuKSkKKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworICAgICAgaW50IGk7CisKKyAgICAgIGZhaWwgKCJtaXNtYXRjaCBhdCBkZWNyeXB0aW9uIVxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjb21wdXRlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgb3V0YnVmbGVuOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiJTAyeCAiLCBvdXRidWZbaV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5leHBlY3RlZDogIik7CisgICAgICBmb3IgKHMgPSBkYXRhLCBpID0gMDsgaSA8IGRhdGFsZW47IHMrKywgaSsrKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlMDJ4ICIsICpzKTsKKyAgICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgICAgfQorCisgIC8qIE5vdyB0aGUgbGFzdCBzdGVwIGFnYWluIHdpdGggYSBrZXkgcmVzZXQuICovCisgIGdjcnlfY2lwaGVyX3Jlc2V0IChoZCk7CisKKyAgb3V0YnVmbGVuID0gZXhwZWN0ZWRsZW4gLSA4OworICBpZiAob3V0YnVmbGVuID4gc2l6ZW9mIG91dGJ1ZikKKyAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfSU5URVJOQUwpOworICBlbHNlCisgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dGJ1Ziwgb3V0YnVmbGVuLCBleHBlY3RlZCwgZXhwZWN0ZWRsZW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJnY3J5X2NpcGhlcl9kZWNyeXB0KDIpIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChvdXRidWZsZW4gIT0gZGF0YWxlbiB8fCBtZW1jbXAgKG91dGJ1ZiwgZGF0YSwgZGF0YWxlbikpCisgICAgZmFpbCAoIm1pc21hdGNoIGF0IGRlY3J5cHRpb24oMikhXG4iKTsKKworICAvKiBBbmQgb25jZSBvcmUgd2l0aG91dCBhIGtleSByZXNldC4gKi8KKyAgb3V0YnVmbGVuID0gZXhwZWN0ZWRsZW4gLSA4OworICBpZiAob3V0YnVmbGVuID4gc2l6ZW9mIG91dGJ1ZikKKyAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfSU5URVJOQUwpOworICBlbHNlCisgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dGJ1Ziwgb3V0YnVmbGVuLCBleHBlY3RlZCwgZXhwZWN0ZWRsZW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJnY3J5X2NpcGhlcl9kZWNyeXB0KDMpIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChvdXRidWZsZW4gIT0gZGF0YWxlbiB8fCBtZW1jbXAgKG91dGJ1ZiwgZGF0YSwgZGF0YWxlbikpCisgICAgZmFpbCAoIm1pc21hdGNoIGF0IGRlY3J5cHRpb24oMykhXG4iKTsKKworICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19hbGwgKHZvaWQpCit7CisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIjQuMSBXcmFwIDEyOCBiaXRzIG9mIEtleSBEYXRhIHdpdGggYSAxMjgtYml0IEtFS1xuIik7CisgIGNoZWNrCisgICAgKEdDUllfQ0lQSEVSX0FFUzEyOCwKKyAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQlx4MENceDBEXHgwRVx4MEYiLCAxNiwKKyAgICAgIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTlceEFBXHhCQlx4Q0NceEREXHhFRVx4RkYiLCAxNiwKKyAgICAgIlx4MUZceEE2XHg4Qlx4MEFceDgxXHgxMlx4QjRceDQ3XHhBRVx4RjNceDRCXHhEOFx4RkJceDVBXHg3Qlx4ODIiCisgICAgICJceDlEXHgzRVx4ODZceDIzXHg3MVx4RDJceENGXHhFNSIsIDI0KTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICI0LjIgV3JhcCAxMjggYml0cyBvZiBLZXkgRGF0YSB3aXRoIGEgMTkyLWJpdCBLRUtcbiIpOworICBjaGVjaworICAgIChHQ1JZX0NJUEhFUl9BRVMxOTIsCisgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGIgorICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciLCAyNCwKKyAgICAgIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTlceEFBXHhCQlx4Q0NceEREXHhFRVx4RkYiLCAxNiwKKyAgICAgIlx4OTZceDc3XHg4Qlx4MjVceEFFXHg2Q1x4QTRceDM1XHhGOVx4MkJceDVCXHg5N1x4QzBceDUwXHhBRVx4RDIiCisgICAgICJceDQ2XHg4QVx4QjhceEExXHg3QVx4RDhceDRFXHg1RCIsIDI0KTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICI0LjMgV3JhcCAxMjggYml0cyBvZiBLZXkgRGF0YSB3aXRoIGEgMjU2LWJpdCBLRUtcbiIpOworICBjaGVjaworICAgIChHQ1JZX0NJUEhFUl9BRVMyNTYsCisgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGIgorICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsIDMyLAorICAgICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzdceDg4XHg5OVx4QUFceEJCXHhDQ1x4RERceEVFXHhGRiIsIDE2LAorICAgICAiXHg2NFx4RThceEMzXHhGOVx4Q0VceDBGXHg1Qlx4QTJceDYzXHhFOVx4NzdceDc5XHgwNVx4ODFceDhBXHgyQSIKKyAgICAgIlx4OTNceEM4XHgxOVx4MUVceDdEXHg2RVx4OEFceEU3IiwgMjQpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIjQuNCBXcmFwIDE5MiBiaXRzIG9mIEtleSBEYXRhIHdpdGggYSAxOTItYml0IEtFS1xuIik7CisgIGNoZWNrCisgICAgKEdDUllfQ0lQSEVSX0FFUzE5MiwKKyAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQlx4MENceDBEXHgwRVx4MEYiCisgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIsIDI0LAorICAgICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzdceDg4XHg5OVx4QUFceEJCXHhDQ1x4RERceEVFXHhGRiIKKyAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwgMjQsCisgICAgICJceDAzXHgxRFx4MzNceDI2XHg0RVx4MTVceEQzXHgzMlx4NjhceEYyXHg0RVx4QzJceDYwXHg3NFx4M0VceERDIgorICAgICAiXHhFMVx4QzZceEM3XHhERFx4RUVceDcyXHg1QVx4OTNceDZCXHhBOFx4MTRceDkxXHg1Q1x4NjdceDYyXHhEMiIsIDMyKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICI0LjUgV3JhcCAxOTIgYml0cyBvZiBLZXkgRGF0YSB3aXRoIGEgMjU2LWJpdCBLRUtcbiIpOworICBjaGVjaworICAgIChHQ1JZX0NJUEhFUl9BRVMyNTYsCisgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGIgorICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsIDMyLAorICAgICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzdceDg4XHg5OVx4QUFceEJCXHhDQ1x4RERceEVFXHhGRiIKKyAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwgMjQsCisgICAgICJceEE4XHhGOVx4QkNceDE2XHgxMlx4QzZceDhCXHgzRlx4RjZceEU2XHhGNFx4RkJceEUzXHgwRVx4NzFceEU0IgorICAgICAiXHg3Nlx4OUNceDhCXHg4MFx4QTNceDJDXHhCOFx4OTVceDhDXHhENVx4RDFceDdEXHg2Qlx4MjVceDREXHhBMSIsIDMyKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICI0LjYgV3JhcCAyNTYgYml0cyBvZiBLZXkgRGF0YSB3aXRoIGEgMjU2LWJpdCBLRUtcbiIpOworICBjaGVjaworICAgIChHQ1JZX0NJUEhFUl9BRVMsCisgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGIgorICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsIDMyLAorICAgICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzdceDg4XHg5OVx4QUFceEJCXHhDQ1x4RERceEVFXHhGRiIKKyAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQlx4MENceDBEXHgwRVx4MEYiLCAzMiwKKyAgICAgIlx4MjhceEM5XHhGNFx4MDRceEM0XHhCOFx4MTBceEY0XHhDQlx4Q0NceEIzXHg1Q1x4RkJceDg3XHhGOFx4MjYiCisgICAgICJceDNGXHg1N1x4ODZceEUyXHhEOFx4MEVceEQzXHgyNlx4Q0JceEM3XHhGMFx4RTdceDFBXHg5OVx4RjRceDNCIgorICAgICAiXHhGQlx4OThceDhCXHg5Qlx4N0FceDAyXHhERFx4MjEiLCA0MCk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgZGVidWcgPSAwOworCisgIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS12ZXJib3NlIikpCisgICAgdmVyYm9zZSA9IDE7CisgIGVsc2UgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLWRlYnVnIikpCisgICAgdmVyYm9zZSA9IGRlYnVnID0gMTsKKworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisgIGNoZWNrX2FsbCAoKTsKKworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2Jhc2ljLmMgYi90ZXN0cy9iYXNpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YmU4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iYXNpYy5jCkBAIC0wLDAgKzEsNjE3MyBAQAorLyogYmFzaWMuYyAgLSAgYmFzaWMgcmVncmVzc2lvbiB0ZXN0cworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4LAorICogICAgICAgICAgICAgICAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCisjaWZuZGVmIERJTQorIyBkZWZpbmUgRElNKHYpCQkgICAgIChzaXplb2Yodikvc2l6ZW9mKCh2KVswXSkpCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB0ZXN0X3NwZWNfcHVia2V5X2tleQoreworICBjb25zdCBjaGFyICpzZWNyZXQ7CisgIGNvbnN0IGNoYXIgKnB1YmxpYzsKKyAgY29uc3QgY2hhciAqZ3JpcDsKK30KK3Rlc3Rfc3BlY19wdWJrZXlfa2V5X3Q7CisKK3R5cGVkZWYgc3RydWN0IHRlc3Rfc3BlY19wdWJrZXkKK3sKKyAgaW50IGlkOworICBpbnQgZmxhZ3M7CisgIHRlc3Rfc3BlY19wdWJrZXlfa2V5X3Qga2V5OworfQordGVzdF9zcGVjX3B1YmtleV90OworCisjZGVmaW5lIEZMQUdfQ1JZUFQgKDEgPDwgMCkKKyNkZWZpbmUgRkxBR19TSUdOICAoMSA8PCAxKQorI2RlZmluZSBGTEFHX0dSSVAgICgxIDw8IDIpCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CitzdGF0aWMgaW50IGluX2ZpcHNfbW9kZTsKK3N0YXRpYyBpbnQgZGllX29uX2Vycm9yOworCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKKyAgaWYgKGRpZV9vbl9lcnJvcikKKyAgICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK21pc21hdGNoIChjb25zdCB2b2lkICpleHBlY3RlZCwgc2l6ZV90IGV4cGVjdGVkbGVuLAorICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbXB1dGVkLCBzaXplX3QgY29tcHV0ZWRsZW4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiZXhwZWN0ZWQ6Iik7CisgIGZvciAocCA9IGV4cGVjdGVkOyBleHBlY3RlZGxlbjsgcCsrLCBleHBlY3RlZGxlbi0tKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAlMDJ4IiwgKnApOworICBmcHJpbnRmIChzdGRlcnIsICJcbmNvbXB1dGVkOiIpOworICBmb3IgKHAgPSBjb21wdXRlZDsgY29tcHV0ZWRsZW47IHArKywgY29tcHV0ZWRsZW4tLSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgJTAyeCIsICpwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworCitzdGF0aWMgdm9pZAorc2hvd19zZXhwIChjb25zdCBjaGFyICpwcmVmaXgsIGdjcnlfc2V4cF90IGEpCit7CisgIGNoYXIgKmJ1ZjsKKyAgc2l6ZV90IHNpemU7CisKKyAgaWYgKHByZWZpeCkKKyAgICBmcHV0cyAocHJlZml4LCBzdGRlcnIpOworICBzaXplID0gZ2NyeV9zZXhwX3NwcmludCAoYSwgR0NSWVNFWFBfRk1UX0FEVkFOQ0VELCBOVUxMLCAwKTsKKyAgYnVmID0gZ2NyeV94bWFsbG9jIChzaXplKTsKKworICBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIGJ1Ziwgc2l6ZSk7CisgIGZwcmludGYgKHN0ZGVyciwgIiUuKnMiLCAoaW50KXNpemUsIGJ1Zik7CisgIGdjcnlfZnJlZSAoYnVmKTsKK30KKworCisjZGVmaW5lIE1BWF9EQVRBX0xFTiAxMDAKKwordm9pZAorcHJvZ3Jlc3NfaGFuZGxlciAodm9pZCAqY2JfZGF0YSwgY29uc3QgY2hhciAqd2hhdCwgaW50IHByaW50Y2hhciwKKwkJICBpbnQgY3VycmVudCwgaW50IHRvdGFsKQoreworICAodm9pZCljYl9kYXRhOworICAodm9pZCl3aGF0OworICAodm9pZCljdXJyZW50OworICAodm9pZCl0b3RhbDsKKworICBpZiAocHJpbnRjaGFyID09ICdcbicpCisgICAgZnB1dHMgKCAiPExGPiIsIHN0ZG91dCk7CisgIGVsc2UKKyAgICBwdXRjaGFyIChwcmludGNoYXIpOworICBmZmx1c2ggKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19jYmNfbWFjX2NpcGhlciAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dgorICB7CisgICAgaW50IGFsZ287CisgICAgY2hhciBrZXlbTUFYX0RBVEFfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtNQVhfREFUQV9MRU5dOworICAgIHNpemVfdCBwbGFpbnRleHRsZW47CisgICAgY2hhciBtYWNbTUFYX0RBVEFfTEVOXTsKKyAgfQorICB0dltdID0KKyAgICB7CisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKwkiY2hpY2tlbiB0ZXJpeWFraSIsCisJIlRoaXMgaXMgYSBzYW1wbGUgcGxhaW50ZXh0IGZvciBDQkMgTUFDIG9mIHNpeHR5Zm91ciBieXRlcy4uLi4uLi4iLAorCTAsICJceDIzXHg4Zlx4NmRceGM3XHg1M1x4NmFceDYyXHg5N1x4MTFceGM0XHhhNVx4MTZceDQzXHhlYVx4YjBceGI2IiB9LAorICAgICAgeyBHQ1JZX0NJUEhFUl8zREVTLAorCSJhYmNkZWZnaEFCQ0RFRkdIMDEyMzQ1NjciLAorCSJUaGlzIGlzIGEgc2FtcGxlIHBsYWludGV4dCBmb3IgQ0JDIE1BQyBvZiBzaXh0eWZvdXIgYnl0ZXMuLi4uLi4uIiwKKwkwLCAiXHg1Y1x4MTFceGYwXHgwMVx4NDdceGJkXHgzZFx4M2EiIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0RFUywKKwkiYWJjZGVmZ2giLAorCSJUaGlzIGlzIGEgc2FtcGxlIHBsYWludGV4dCBmb3IgQ0JDIE1BQyBvZiBzaXh0eWZvdXIgYnl0ZXMuLi4uLi4uIiwKKwkwLCAiXHhmYVx4NGJceGRmXHg5ZFx4ZmFceGFiXHgwMVx4NzAiIH0KKyAgICB9OworICBnY3J5X2NpcGhlcl9oZF90IGhkOworICB1bnNpZ25lZCBjaGFyIG91dFtNQVhfREFUQV9MRU5dOworICBpbnQgaSwgYmxrbGVuLCBrZXlsZW47CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgU3RhcnRpbmcgQ0JDIE1BQyBjaGVja3MuXG4iKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh0dikgLyBzaXplb2YgKHR2WzBdKTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChnY3J5X2NpcGhlcl90ZXN0X2FsZ28gKHR2W2ldLmFsZ28pICYmIGluX2ZpcHNfbW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBhbGdvcml0aG0gJWQgbm90IGF2YWlsYWJsZSBpbiBmaXBzIG1vZGVcbiIsCisgICAgICAgICAgICAgICAgICAgICB0dltpXS5hbGdvKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGQsCisJCQkgICAgICB0dltpXS5hbGdvLAorCQkJICAgICAgR0NSWV9DSVBIRVJfTU9ERV9DQkMsIEdDUllfQ0lQSEVSX0NCQ19NQUMpOworICAgICAgaWYgKCFoZCkKKwl7CisJICBmYWlsICgiY2JjLW1hYyBhbGdvICVkLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsCisJCXR2W2ldLmFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisJICByZXR1cm47CisJfQorCisgICAgICBibGtsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4odHZbaV0uYWxnbyk7CisgICAgICBpZiAoIWJsa2xlbikKKwl7CisJICBmYWlsICgiY2JjLW1hYyBhbGdvICVkLCBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gZmFpbGVkXG4iLAorCQkgdHZbaV0uYWxnbyk7CisJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworCSAgcmV0dXJuOworCX0KKworICAgICAga2V5bGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuICh0dltpXS5hbGdvKTsKKyAgICAgIGlmICgha2V5bGVuKQorCXsKKwkgIGZhaWwgKCJjYmMtbWFjIGFsZ28gJWQsIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiBmYWlsZWRcbiIsCisJCXR2W2ldLmFsZ28pOworCSAgcmV0dXJuOworCX0KKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZCwgdHZbaV0ua2V5LCBrZXlsZW4pOworICAgICAgaWYgKGVycikKKwl7CisJICBmYWlsICgiY2JjLW1hYyBhbGdvICVkLCBnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKwkJdHZbaV0uYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKwkgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisJICByZXR1cm47CisJfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIE5VTEwsIDApOworICAgICAgaWYgKGVycikKKwl7CisJICBmYWlsICgiY2JjLW1hYyBhbGdvICVkLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorCQl0dltpXS5hbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGlmICh2ZXJib3NlKQorCWZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBDQkMgTUFDIGZvciAlcyBbJWldXG4iLAorCQkgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICh0dltpXS5hbGdvKSwKKwkJIHR2W2ldLmFsZ28pOworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGQsCisJCQkJIG91dCwgYmxrbGVuLAorCQkJCSB0dltpXS5wbGFpbnRleHQsCisJCQkJIHR2W2ldLnBsYWludGV4dGxlbiA/CisJCQkJIHR2W2ldLnBsYWludGV4dGxlbiA6CisJCQkJIHN0cmxlbiAoKGNoYXIqKXR2W2ldLnBsYWludGV4dCkpOworICAgICAgaWYgKGVycikKKwl7CisJICBmYWlsICgiY2JjLW1hYyBhbGdvICVkLCBnY3J5X2NpcGhlcl9lbmNyeXB0IGZhaWxlZDogJXNcbiIsCisJCXR2W2ldLmFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworCSAgcmV0dXJuOworCX0KKworI2lmIDAKKyAgICAgIHsKKwlpbnQgajsKKwlmb3IgKGogPSAwOyBqIDwgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuICh0dltpXS5hbGdvKTsgaisrKQorCSAgcHJpbnRmICgiXFx4JTAyeCIsIG91dFtqXSAmIDB4RkYpOworCXByaW50ZiAoIlxuIik7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYgKG1lbWNtcCAodHZbaV0ubWFjLCBvdXQsIGJsa2xlbikpCisJZmFpbCAoImNiYy1tYWMgYWxnbyAlZCwgZW5jcnlwdCBtaXNtYXRjaCBlbnRyeSAlZFxuIiwgdHZbaV0uYWxnbywgaSk7CisKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgfQorICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIENvbXBsZXRlZCBDQkMgTUFDIGNoZWNrcy5cbiIpOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfYWVzMTI4X2NiY19jdHNfY2lwaGVyICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgY2hhciBrZXlbMTI4IC8gOF0gPSAiY2hpY2tlbiB0ZXJpeWFraSI7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0KKyAgICAiSSB3b3VsZCBsaWtlIHRoZSBHZW5lcmFsIEdhdSdzIENoaWNrZW4sIHBsZWFzZSwgYW5kIHdvbnRvbiBzb3VwLiI7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHYKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgb3V0W01BWF9EQVRBX0xFTl07CisgICAgaW50IGlubGVuOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIHsgIlx4YzZceDM1XHgzNVx4NjhceGYyXHhiZlx4OGNceGI0XHhkOFx4YTVceDgwXHgzNlx4MmRceGE3XHhmZlx4N2YiCisJIlx4OTciLAorCTE3IH0sCisgICAgICB7ICJceGZjXHgwMFx4NzhceDNlXHgwZVx4ZmRceGIyXHhjMVx4ZDRceDQ1XHhkNFx4YzhceGVmXHhmN1x4ZWRceDIyIgorCSJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMFx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTUiLAorCTMxIH0sCisgICAgICB7ICJceDM5XHgzMVx4MjVceDIzXHhhN1x4ODZceDYyXHhkNVx4YmVceDdmXHhjYlx4Y2NceDk4XHhlYlx4ZjVceGE4IgorCSJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMFx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTVceDg0IiwKKwkzMiB9LAorICAgICAgeyAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzBceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1XHg4NCIKKwkiXHhiM1x4ZmZceGZkXHg5NFx4MGNceDE2XHhhMVx4OGNceDFiXHg1NVx4NDlceGQyXHhmOFx4MzhceDAyXHg5ZSIKKwkiXHgzOVx4MzFceDI1XHgyM1x4YTdceDg2XHg2Mlx4ZDVceGJlXHg3Zlx4Y2JceGNjXHg5OFx4ZWJceGY1IiwKKwk0NyB9LAorICAgICAgeyAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzBceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1XHg4NCIKKwkiXHg5ZFx4YWRceDhiXHhiYlx4OTZceGM0XHhjZFx4YzBceDNiXHhjMVx4MDNceGUxXHhhMVx4OTRceGJiXHhkOCIKKwkiXHgzOVx4MzFceDI1XHgyM1x4YTdceDg2XHg2Mlx4ZDVceGJlXHg3Zlx4Y2JceGNjXHg5OFx4ZWJceGY1XHhhOCIsCisJNDggfSwKKyAgICAgIHsgIlx4OTdceDY4XHg3Mlx4NjhceGQ2XHhlY1x4Y2NceGMwXHhjMFx4N2JceDI1XHhlMlx4NWVceGNmXHhlNVx4ODQiCisJIlx4MzlceDMxXHgyNVx4MjNceGE3XHg4Nlx4NjJceGQ1XHhiZVx4N2ZceGNiXHhjY1x4OThceGViXHhmNVx4YTgiCisJIlx4NDhceDA3XHhlZlx4ZThceDM2XHhlZVx4ODlceGE1XHgyNlx4NzNceDBkXHhiY1x4MmZceDdiXHhjOFx4NDAiCisJIlx4OWRceGFkXHg4Ylx4YmJceDk2XHhjNFx4Y2RceGMwXHgzYlx4YzFceDAzXHhlMVx4YTFceDk0XHhiYlx4ZDgiLAorCTY0IH0sCisgICAgfTsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZDsKKyAgdW5zaWduZWQgY2hhciBvdXRbTUFYX0RBVEFfTEVOXTsKKyAgaW50IGk7CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgU3RhcnRpbmcgQUVTMTI4IENCQyBDVFMgY2hlY2tzLlxuIik7CisgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZCwKKwkJCSAgR0NSWV9DSVBIRVJfQUVTLAorCQkJICBHQ1JZX0NJUEhFUl9NT0RFX0NCQywgR0NSWV9DSVBIRVJfQ0JDX0NUUyk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImFlcy1jYmMtY3RzLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleSwgMTI4IC8gOCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImFlcy1jYmMtY3RzLCBnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKwkgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHR2KSAvIHNpemVvZiAodHZbMF0pOyBpKyspCisgICAgeworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkLCBOVUxMLCAwKTsKKyAgICAgIGlmIChlcnIpCisJeworCSAgZmFpbCAoImFlcy1jYmMtY3RzLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorCQlncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGlmICh2ZXJib3NlKQorCWZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBlbmNyeXB0aW9uIGZvciBsZW5ndGggJWlcbiIsIHR2W2ldLmlubGVuKTsKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkLCBvdXQsIE1BWF9EQVRBX0xFTiwKKwkJCQkgcGxhaW50ZXh0LCB0dltpXS5pbmxlbik7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGZhaWwgKCJhZXMtY2JjLWN0cywgZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorCQlncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGlmIChtZW1jbXAgKHR2W2ldLm91dCwgb3V0LCB0dltpXS5pbmxlbikpCisJZmFpbCAoImFlcy1jYmMtY3RzLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5ICVkXG4iLCBpKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkLCBOVUxMLCAwKTsKKyAgICAgIGlmIChlcnIpCisJeworCSAgZmFpbCAoImFlcy1jYmMtY3RzLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorCQlncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBpZiAodmVyYm9zZSkKKwlmcHJpbnRmIChzdGRlcnIsICIgICAgY2hlY2tpbmcgZGVjcnlwdGlvbiBmb3IgbGVuZ3RoICVpXG4iLCB0dltpXS5pbmxlbik7CisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZCwgb3V0LCB0dltpXS5pbmxlbiwgTlVMTCwgMCk7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGZhaWwgKCJhZXMtY2JjLWN0cywgZ2NyeV9jaXBoZXJfZGVjcnlwdCBmYWlsZWQ6ICVzXG4iLAorCQlncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGlmIChtZW1jbXAgKHBsYWludGV4dCwgb3V0LCB0dltpXS5pbmxlbikpCisJZmFpbCAoImFlcy1jYmMtY3RzLCBkZWNyeXB0IG1pc21hdGNoIGVudHJ5ICVkXG4iLCBpKTsKKyAgICB9CisKKyAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgQUVTMTI4IENCQyBDVFMgY2hlY2tzLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19jdHJfY2lwaGVyICh2b2lkKQoreworICBzdGF0aWMgY29uc3Qgc3RydWN0IHR2CisgIHsKKyAgICBpbnQgYWxnbzsKKyAgICBjaGFyIGtleVtNQVhfREFUQV9MRU5dOworICAgIGNoYXIgY3RyW01BWF9EQVRBX0xFTl07CisgICAgc3RydWN0IGRhdGEKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtNQVhfREFUQV9MRU5dOworICAgICAgaW50IGlubGVuOworICAgICAgY2hhciBvdXRbTUFYX0RBVEFfTEVOXTsKKyAgICB9IGRhdGFbOF07CisgIH0gdHZbXSA9CisgICAgeworICAgICAgLyogaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOGEvc3A4MDAtMzhhLnBkZiAqLworICAgICAgewlHQ1JZX0NJUEhFUl9BRVMsCisJIlx4MmJceDdlXHgxNVx4MTZceDI4XHhhZVx4ZDJceGE2XHhhYlx4ZjdceDE1XHg4OFx4MDlceGNmXHg0Zlx4M2MiLAorCSJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIiwKKwl7IHsgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorCSAgICAxNiwKKwkgICAgIlx4ODdceDRkXHg2MVx4OTFceGI2XHgyMFx4ZTNceDI2XHgxYlx4ZWZceDY4XHg2NFx4OTlceDBkXHhiNlx4Y2UiIH0sCisJICB7ICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIiwKKwkgICAgMTYsCisJICAgICJceDk4XHgwNlx4ZjZceDZiXHg3OVx4NzBceGZkXHhmZlx4ODZceDE3XHgxOFx4N2JceGI5XHhmZlx4ZmRceGZmIiB9LAorCSAgeyAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIsCisJICAgIDE2LAorCSAgICAiXHg1YVx4ZTRceGRmXHgzZVx4ZGJceGQ1XHhkM1x4NWVceDViXHg0Zlx4MDlceDAyXHgwZFx4YjBceDNlXHhhYiIgfSwKKwkgIHsgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorCSAgICAxNiwKKwkgICAgIlx4MWVceDAzXHgxZFx4ZGFceDJmXHhiZVx4MDNceGQxXHg3OVx4MjFceDcwXHhhMFx4ZjNceDAwXHg5Y1x4ZWUiIH0sCisKKyAgICAgICAgICB7ICIiLCAwLCAiIiB9CisJfQorICAgICAgfSwKKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTMTkyLAorCSJceDhlXHg3M1x4YjBceGY3XHhkYVx4MGVceDY0XHg1Mlx4YzhceDEwXHhmM1x4MmIiCisJIlx4ODBceDkwXHg3OVx4ZTVceDYyXHhmOFx4ZWFceGQyXHg1Mlx4MmNceDZiXHg3YiIsCisJIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLAorCXsgeyAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisJICAgIDE2LAorCSAgICAiXHgxYVx4YmNceDkzXHgyNFx4MTdceDUyXHgxY1x4YTJceDRmXHgyYlx4MDRceDU5XHhmZVx4N2VceDZlXHgwYiIgfSwKKwkgIHsgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiLAorCSAgICAxNiwKKwkgICAgIlx4MDlceDAzXHgzOVx4ZWNceDBhXHhhNlx4ZmFceGVmXHhkNVx4Y2NceGMyXHhjNlx4ZjRceGNlXHg4ZVx4OTQiIH0sCisJICB7ICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMVx4ZTVceGZiXHhjMVx4MTlceDFhXHgwYVx4NTJceGVmIiwKKwkgICAgMTYsCisJICAgICJceDFlXHgzNlx4YjJceDZiXHhkMVx4ZWJceGM2XHg3MFx4ZDFceGJkXHgxZFx4NjZceDU2XHgyMFx4YWJceGY3IiB9LAorCSAgeyAiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTdceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisJICAgIDE2LAorCSAgICAiXHg0Zlx4NzhceGE3XHhmNlx4ZDJceDk4XHgwOVx4NThceDVhXHg5N1x4ZGFceGVjXHg1OFx4YzZceGIwXHg1MCIgfSwKKyAgICAgICAgICB7ICIiLCAwLCAiIiB9CisJfQorICAgICAgfSwKKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTMjU2LAorCSJceDYwXHgzZFx4ZWJceDEwXHgxNVx4Y2FceDcxXHhiZVx4MmJceDczXHhhZVx4ZjBceDg1XHg3ZFx4NzdceDgxIgorCSJceDFmXHgzNVx4MmNceDA3XHgzYlx4NjFceDA4XHhkN1x4MmRceDk4XHgxMFx4YTNceDA5XHgxNFx4ZGZceGY0IiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJeyB7ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKwkgICAgMTYsCisJICAgICJceDYwXHgxZVx4YzNceDEzXHg3N1x4NTdceDg5XHhhNVx4YjdceGE3XHhmNVx4MDRceGJiXHhmM1x4ZDJceDI4IiB9LAorCSAgeyAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWNceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIsCisJICAgIDE2LAorCSAgICAiXHhmNFx4NDNceGUzXHhjYVx4NGRceDYyXHhiNVx4OWFceGNhXHg4NFx4ZTlceDkwXHhjYVx4Y2FceGY1XHhjNSIgfSwKKwkgIHsgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiLAorCSAgICAxNiwKKwkgICAgIlx4MmJceDA5XHgzMFx4ZGFceGEyXHgzZFx4ZTlceDRjXHhlOFx4NzBceDE3XHhiYVx4MmRceDg0XHg5OFx4OGQiIH0sCisJICB7ICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxN1x4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKKwkgICAgMTYsCisJICAgICJceGRmXHhjOVx4YzVceDhkXHhiNlx4N2FceGFkXHhhNlx4MTNceGMyXHhkZFx4MDhceDQ1XHg3OVx4NDFceGE2IiB9LAorICAgICAgICAgIHsgIiIsIDAsICIiIH0KKwl9CisgICAgICB9LAorICAgICAgLyogU29tZSB0cnVuY2F0aW9uIHRlc3RzLiAgV2l0aCBhIHRydW5jYXRlZCBzZWNvbmQgYmxvY2sgYW5kCisgICAgICAgICBhbHNvIHdpdGggYSBzaW5nbGUgdHJ1bmNhdGVkIGJsb2NrLiAgKi8KKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTLAorCSJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJe3siXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisgICAgICAgICAgMTYsCisgICAgICAgICAgIlx4ODdceDRkXHg2MVx4OTFceGI2XHgyMFx4ZTNceDI2XHgxYlx4ZWZceDY4XHg2NFx4OTlceDBkXHhiNlx4Y2UiIH0sCisgICAgICAgICB7Ilx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZSIsCisgICAgICAgICAgMTUsCisgICAgICAgICAgIlx4OThceDA2XHhmNlx4NmJceDc5XHg3MFx4ZmRceGZmXHg4Nlx4MTdceDE4XHg3Ylx4YjlceGZmXHhmZCIgfSwKKyAgICAgICAgIHsiIiwgMCwgIiIgfQorCX0KKyAgICAgIH0sCisgICAgICB7CUdDUllfQ0lQSEVSX0FFUywKKwkiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisJIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLAorCXt7Ilx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorICAgICAgICAgIDE2LAorICAgICAgICAgICJceDg3XHg0ZFx4NjFceDkxXHhiNlx4MjBceGUzXHgyNlx4MWJceGVmXHg2OFx4NjRceDk5XHgwZFx4YjZceGNlIiB9LAorICAgICAgICAgeyJceGFlIiwKKyAgICAgICAgICAxLAorICAgICAgICAgICJceDk4IiB9LAorICAgICAgICAgeyIiLCAwLCAiIiB9CisJfQorICAgICAgfSwKKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTLAorCSJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJe3siXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3IiwKKyAgICAgICAgICAxNSwKKyAgICAgICAgICAiXHg4N1x4NGRceDYxXHg5MVx4YjZceDIwXHhlM1x4MjZceDFiXHhlZlx4NjhceDY0XHg5OVx4MGRceGI2IiB9LAorICAgICAgICAgeyIiLCAwLCAiIiB9CisJfQorICAgICAgfSwKKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTLAorCSJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJe3siXHg2YiIsCisgICAgICAgICAgMSwKKyAgICAgICAgICAiXHg4NyIgfSwKKyAgICAgICAgIHsiIiwgMCwgIiIgfQorCX0KKyAgICAgIH0sCisgICAgICAvKiBUZXN0cyB0byBzZWUgd2hldGhlciBpdCB3b3JrcyBjb3JyZWN0bHkgYXMgYSBzdHJlYW0gY2lwaGVyLiAgKi8KKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTLAorCSJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJe3siXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisgICAgICAgICAgMTYsCisgICAgICAgICAgIlx4ODdceDRkXHg2MVx4OTFceGI2XHgyMFx4ZTNceDI2XHgxYlx4ZWZceDY4XHg2NFx4OTlceDBkXHhiNlx4Y2UiIH0sCisgICAgICAgICB7Ilx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZSIsCisgICAgICAgICAgMTUsCisgICAgICAgICAgIlx4OThceDA2XHhmNlx4NmJceDc5XHg3MFx4ZmRceGZmXHg4Nlx4MTdceDE4XHg3Ylx4YjlceGZmXHhmZCIgfSwKKyAgICAgICAgIHsiXHg1MVx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiLAorICAgICAgICAgIDE3LAorICAgICAgICAgICJceGZmXHg1YVx4ZTRceGRmXHgzZVx4ZGJceGQ1XHhkM1x4NWVceDViXHg0Zlx4MDlceDAyXHgwZFx4YjBceDNlXHhhYiIgfSwKKyAgICAgICAgIHsiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTdceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisgICAgICAgICAgMTYsCisgICAgICAgICAgIlx4MWVceDAzXHgxZFx4ZGFceDJmXHhiZVx4MDNceGQxXHg3OVx4MjFceDcwXHhhMFx4ZjNceDAwXHg5Y1x4ZWUiIH0sCisKKyAgICAgICAgICB7ICIiLCAwLCAiIiB9CisJfQorICAgICAgfSwKKyAgICAgIHsJR0NSWV9DSVBIRVJfQUVTLAorCSJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsCisJe3siXHg2YiIsCisgICAgICAgICAgMSwKKyAgICAgICAgICAiXHg4NyIgfSwKKwkgeyJceGMxXHhiZSIsCisgICAgICAgICAgMiwKKyAgICAgICAgICAiXHg0ZFx4NjEiIH0sCisJIHsiXHhlMlx4MmVceDQwIiwKKyAgICAgICAgICAzLAorICAgICAgICAgICJceDkxXHhiNlx4MjAiIH0sCisJIHsiXHg5ZiIsCisgICAgICAgICAgMSwKKyAgICAgICAgICAiXHhlMyIgfSwKKwkgeyJceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorICAgICAgICAgIDksCisgICAgICAgICAgIlx4MjZceDFiXHhlZlx4NjhceDY0XHg5OVx4MGRceGI2XHhjZSIgfSwKKyAgICAgICAgIHsiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWNceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlIiwKKyAgICAgICAgICAxNSwKKyAgICAgICAgICAiXHg5OFx4MDZceGY2XHg2Ylx4NzlceDcwXHhmZFx4ZmZceDg2XHgxN1x4MThceDdiXHhiOVx4ZmZceGZkIiB9LAorICAgICAgICAgeyJceDUxXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiLAorICAgICAgICAgIDksCisgICAgICAgICAgIlx4ZmZceDVhXHhlNFx4ZGZceDNlXHhkYlx4ZDVceGQzXHg1ZSIgfSwKKworICAgICAgICAgIHsgIiIsIDAsICIiIH0KKwl9CisgICAgICB9LAorI2lmIFVTRV9DQVNUNQorICAgICAgLyogQSBzZWxmbWFkZSB0ZXN0IHZlY3RvciB1c2luZyBhbiA2NCBiaXQgYmxvY2sgY2lwaGVyLiAgKi8KKyAgICAgIHsJR0NSWV9DSVBIRVJfQ0FTVDUsCisJIlx4MmJceDdlXHgxNVx4MTZceDI4XHhhZVx4ZDJceGE2XHhhYlx4ZjdceDE1XHg4OFx4MDlceGNmXHg0Zlx4M2MiLAorCSJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjgiLAorICAgICAgICB7eyJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKyAgICAgICAgICAxNiwKKyAgICAgICAgICAiXHhlOFx4YTdceGFjXHg2OFx4Y2FceGNhXHhhMFx4MjBceDEwXHhjYlx4MWJceGNjXHg3OVx4MmNceGM0XHg0OCIgfSwKKyAgICAgICAgIHsiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWMiLAorICAgICAgICAgIDgsCisgICAgICAgICAgIlx4MTZceGU4XHg3Mlx4NzdceGIwXHg5OFx4MjlceDY4IiB9LAorICAgICAgICAgeyJceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIsCisgICAgICAgICAgOCwKKyAgICAgICAgICAiXHg5YVx4YjNceGE4XHgwM1x4M2JceGI0XHgxNFx4YmEiIH0sCisgICAgICAgICB7Ilx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHhhMVx4MDAiLAorICAgICAgICAgIDEwLAorICAgICAgICAgICJceDMxXHg1ZVx4ZDNceGZiXHgxYlx4OGRceGQxXHhmOVx4YjBceDgzIiB9LAorICAgICAgICAgeyAiIiwgMCwgIiIgfQorCX0KKyAgICAgIH0sCisjZW5kaWYgLypVU0VfQ0FTVDUqLworICAgICAgewkwLAorCSIiLAorCSIiLAorCXsKKyAgICAgICAgIHsiIiwgMCwgIiIgfQorCX0KKyAgICAgIH0KKyAgICB9OworICBnY3J5X2NpcGhlcl9oZF90IGhkZSwgaGRkOworICB1bnNpZ25lZCBjaGFyIG91dFtNQVhfREFUQV9MRU5dOworICBpbnQgaSwgaiwga2V5bGVuLCBibGtsZW47CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgU3RhcnRpbmcgQ1RSIGNpcGhlciBjaGVja3MuXG4iKTsKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodHYpIC8gc2l6ZW9mICh0dlswXSk7IGkrKykKKyAgICB7CisgICAgICBpZiAoIXR2W2ldLmFsZ28pCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgMCk7CisgICAgICBpZiAoIWVycikKKwllcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRkLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgMCk7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGZhaWwgKCJhZXMtY3RyLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisJICByZXR1cm47CisJfQorCisgICAgICBrZXlsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4odHZbaV0uYWxnbyk7CisgICAgICBpZiAoIWtleWxlbikKKwl7CisJICBmYWlsICgiYWVzLWN0ciwgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIGZhaWxlZFxuIik7CisJICByZXR1cm47CisJfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCBrZXlsZW4pOworICAgICAgaWYgKCFlcnIpCisJZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGQsIHR2W2ldLmtleSwga2V5bGVuKTsKKyAgICAgIGlmIChlcnIpCisJeworCSAgZmFpbCAoImFlcy1jdHIsIGdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorCQlncGdfc3RyZXJyb3IgKGVycikpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGJsa2xlbiA9IGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbih0dltpXS5hbGdvKTsKKyAgICAgIGlmICghYmxrbGVuKQorCXsKKwkgIGZhaWwgKCJhZXMtY3RyLCBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gZmFpbGVkXG4iKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGN0ciAoaGRlLCB0dltpXS5jdHIsIGJsa2xlbik7CisgICAgICBpZiAoIWVycikKKwllcnIgPSBnY3J5X2NpcGhlcl9zZXRjdHIgKGhkZCwgdHZbaV0uY3RyLCBibGtsZW4pOworICAgICAgaWYgKGVycikKKwl7CisJICBmYWlsICgiYWVzLWN0ciwgZ2NyeV9jaXBoZXJfc2V0Y3RyIGZhaWxlZDogJXNcbiIsCisJCWdwZ19zdHJlcnJvciAoZXJyKSk7CisJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKwkgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworCSAgcmV0dXJuOworCX0KKworICAgICAgaWYgKHZlcmJvc2UpCisJZnByaW50ZiAoc3RkZXJyLCAiICAgIGNoZWNraW5nIENUUiBtb2RlIGZvciAlcyBbJWldXG4iLAorCQkgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICh0dltpXS5hbGdvKSwKKwkJIHR2W2ldLmFsZ28pOworICAgICAgZm9yIChqID0gMDsgdHZbaV0uZGF0YVtqXS5pbmxlbjsgaisrKQorCXsKKwkgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0LCBNQVhfREFUQV9MRU4sCisJCQkJICAgICB0dltpXS5kYXRhW2pdLnBsYWludGV4dCwKKwkJCQkgICAgIHR2W2ldLmRhdGFbal0uaW5sZW4gPT0gLTEgPworCQkJCSAgICAgc3RybGVuICgoY2hhciopdHZbaV0uZGF0YVtqXS5wbGFpbnRleHQpIDoKKwkJCQkgICAgIHR2W2ldLmRhdGFbal0uaW5sZW4pOworCSAgaWYgKGVycikKKwkgICAgeworCSAgICAgIGZhaWwgKCJhZXMtY3RyLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisJCSAgICBpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworCSAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworCSAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCisJICBpZiAobWVtY21wICh0dltpXS5kYXRhW2pdLm91dCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1jdHIsIGVuY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQ6JWRcbiIsIGksIGopOworICAgICAgICAgICAgICBtaXNtYXRjaCAodHZbaV0uZGF0YVtqXS5vdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pOworICAgICAgICAgICAgfQorCisJICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZGQsIG91dCwgdHZbaV0uZGF0YVtqXS5pbmxlbiwgTlVMTCwgMCk7CisJICBpZiAoZXJyKQorCSAgICB7CisJICAgICAgZmFpbCAoImFlcy1jdHIsIGdjcnlfY2lwaGVyX2RlY3J5cHQgKCVkLCAlZCkgZmFpbGVkOiAlc1xuIiwKKwkJICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisJICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisJICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisKKwkgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ucGxhaW50ZXh0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiYWVzLWN0ciwgZGVjcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZFxuIiwgaSwgaik7CisgICAgICAgICAgICAgIG1pc21hdGNoICh0dltpXS5kYXRhW2pdLnBsYWludGV4dCwgdHZbaV0uZGF0YVtqXS5pbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgdHZbaV0uZGF0YVtqXS5pbmxlbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAvKiBOb3cgY2hlY2sgdGhhdCB3ZSBnZXQgdmFsaWQgcmV0dXJuIGNvZGVzIGJhY2sgZm9yIGdvb2QgYW5kCisgICAgICAgICBiYWQgaW5wdXRzLiAgKi8KKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0LCBNQVhfREFUQV9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJhZXMtY3RyLCBlbmNyeXB0aW9uIGZhaWxlZCBmb3IgdmFsaWQgaW5wdXQiKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNik7CisgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVCkKKyAgICAgICAgZmFpbCAoImFlcy1jdHIsIHRvbyBzaG9ydCBvdXRwdXQgYnVmZmVyIHJldHVybmVkIHdyb25nIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2KTsKKyAgICAgIGlmIChncGdfZXJyX2NvZGUgKGVycikgIT0gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUKQorICAgICAgICBmYWlsICgiYWVzLWN0ciwgMCBsZW5ndGggb3V0cHV0IGJ1ZmZlciByZXR1cm5lZCB3cm9uZyBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImFlcy1jdHIsIGNvcnJlY3QgbGVuZ3RoIG91dHB1dCBidWZmZXIgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgICAgICAvKiBBZ2Fpbiwgbm93IGZvciBkZWNyeXB0aW9uLiAgKi8KKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZSwgb3V0LCBNQVhfREFUQV9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJhZXMtY3RyLCBkZWNyeXB0aW9uIGZhaWxlZCBmb3IgdmFsaWQgaW5wdXQiKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGRlLCBvdXQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNik7CisgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfQlVGRkVSX1RPT19TSE9SVCkKKyAgICAgICAgZmFpbCAoImFlcy1jdHIsIHRvbyBzaG9ydCBvdXRwdXQgYnVmZmVyIHJldHVybmVkIHdyb25nIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGRlLCBvdXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2KTsKKyAgICAgIGlmIChncGdfZXJyX2NvZGUgKGVycikgIT0gR1BHX0VSUl9CVUZGRVJfVE9PX1NIT1JUKQorICAgICAgICBmYWlsICgiYWVzLWN0ciwgMCBsZW5ndGggb3V0cHV0IGJ1ZmZlciByZXR1cm5lZCB3cm9uZyBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZSwgb3V0LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImFlcy1jdHIsIGNvcnJlY3QgbGVuZ3RoIG91dHB1dCBidWZmZXIgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgIH0KKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgQ1RSIGNpcGhlciBjaGVja3MuXG4iKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX2NmYl9jaXBoZXIgKHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHYKKyAgeworICAgIGludCBhbGdvOworICAgIGNoYXIga2V5W01BWF9EQVRBX0xFTl07CisgICAgY2hhciBpdltNQVhfREFUQV9MRU5dOworICAgIHN0cnVjdCBkYXRhCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbTUFYX0RBVEFfTEVOXTsKKyAgICAgIGludCBpbmxlbjsKKyAgICAgIGNoYXIgb3V0W01BWF9EQVRBX0xFTl07CisgICAgfQorICAgIGRhdGFbTUFYX0RBVEFfTEVOXTsKKyAgfSB0dltdID0KKyAgICB7CisgICAgICAvKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4YS9zcDgwMC0zOGEucGRmICovCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKyAgICAgICAgIlx4MmJceDdlXHgxNVx4MTZceDI4XHhhZVx4ZDJceGE2XHhhYlx4ZjdceDE1XHg4OFx4MDlceGNmXHg0Zlx4M2MiLAorICAgICAgICAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisgICAgICAgIHsgeyAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDNiXHgzZlx4ZDlceDJlXHhiN1x4MmRceGFkXHgyMFx4MzNceDM0XHg0OVx4ZjhceGU4XHgzY1x4ZmJceDRhIiB9LAorICAgICAgICAgIHsgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHhjOFx4YTZceDQ1XHgzN1x4YTBceGIzXHhhOVx4M2ZceGNkXHhlM1x4Y2RceGFkXHg5Zlx4MWNceGU1XHg4YiJ9LAorICAgICAgICAgIHsgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHgyNlx4NzVceDFmXHg2N1x4YTNceGNiXHhiMVx4NDBceGIxXHg4MFx4OGNceGYxXHg4N1x4YTRceGY0XHhkZiIgfSwKKyAgICAgICAgICB7ICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxN1x4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4YzBceDRiXHgwNVx4MzVceDdjXHg1ZFx4MWNceDBlXHhlYVx4YzRceGM2XHg2Zlx4OWZceGY3XHhmMlx4ZTYiIH0sCisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUzE5MiwKKyAgICAgICAgIlx4OGVceDczXHhiMFx4ZjdceGRhXHgwZVx4NjRceDUyXHhjOFx4MTBceGYzXHgyYiIKKyAgICAgICAgIlx4ODBceDkwXHg3OVx4ZTVceDYyXHhmOFx4ZWFceGQyXHg1Mlx4MmNceDZiXHg3YiIsCisgICAgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKKyAgICAgICAgeyB7ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4Y2RceGM4XHgwZFx4NmZceGRkXHhmMVx4OGNceGFiXHgzNFx4YzJceDU5XHgwOVx4YzlceDlhXHg0MVx4NzQiIH0sCisgICAgICAgICAgeyAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWNceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDY3XHhjZVx4N2ZceDdmXHg4MVx4MTdceDM2XHgyMVx4OTZceDFhXHgyYlx4NzBceDE3XHgxZFx4M2RceDdhIiB9LAorICAgICAgICAgIHsgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHgyZVx4MWVceDhhXHgxZFx4ZDVceDliXHg4OFx4YjFceGM4XHhlNlx4MGZceGVkXHgxZVx4ZmFceGM0XHhjOSIgfSwKKyAgICAgICAgICB7ICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxN1x4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4YzBceDVmXHg5Zlx4OWNceGE5XHg4M1x4NGZceGEwXHg0Mlx4YWVceDhmXHhiYVx4NThceDRiXHgwOVx4ZmYiIH0sCisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUzI1NiwKKyAgICAgICAgIlx4NjBceDNkXHhlYlx4MTBceDE1XHhjYVx4NzFceGJlXHgyYlx4NzNceGFlXHhmMFx4ODVceDdkXHg3N1x4ODEiCisgICAgICAgICJceDFmXHgzNVx4MmNceDA3XHgzYlx4NjFceDA4XHhkN1x4MmRceDk4XHgxMFx4YTNceDA5XHgxNFx4ZGZceGY0IiwKKyAgICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorICAgICAgICB7IHsgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHhkY1x4N2VceDg0XHhiZlx4ZGFceDc5XHgxNlx4NGJceDdlXHhjZFx4ODRceDg2XHg5OFx4NWRceDM4XHg2MCIgfSwKKyAgICAgICAgICB7ICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4MzlceGZmXHhlZFx4MTRceDNiXHgyOFx4YjFceGM4XHgzMlx4MTFceDNjXHg2M1x4MzFceGU1XHg0MFx4N2IiIH0sCisgICAgICAgICAgeyAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceGRmXHgxMFx4MTNceDI0XHgxNVx4ZTVceDRiXHg5Mlx4YTFceDNlXHhkMFx4YThceDI2XHg3YVx4ZTJceGY5IiB9LAorICAgICAgICAgIHsgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHg3NVx4YTNceDg1XHg3NFx4MWFceGI5XHhjZVx4ZjhceDIwXHgzMVx4NjJceDNkXHg1NVx4YjFceGU0XHg3MSIgfQorICAgICAgICB9CisgICAgICB9CisgICAgfTsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZGUsIGhkZDsKKyAgdW5zaWduZWQgY2hhciBvdXRbTUFYX0RBVEFfTEVOXTsKKyAgaW50IGksIGosIGtleWxlbiwgYmxrbGVuOworICBnY3J5X2Vycm9yX3QgZXJyID0gMDsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFN0YXJ0aW5nIENGQiBjaGVja3MuXG4iKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh0dikgLyBzaXplb2YgKHR2WzBdKTsgaSsrKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgY2hlY2tpbmcgQ0ZCIG1vZGUgZm9yICVzIFslaV1cbiIsCisJCSBnY3J5X2NpcGhlcl9hbGdvX25hbWUgKHR2W2ldLmFsZ28pLAorCQkgdHZbaV0uYWxnbyk7CisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiwgMCk7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZCwgdHZbaV0uYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9DRkIsIDApOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJhZXMtY2ZiLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGtleWxlbiA9IGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbih0dltpXS5hbGdvKTsKKyAgICAgIGlmICgha2V5bGVuKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1jZmIsIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiBmYWlsZWRcbiIpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCBrZXlsZW4pOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRkLCB0dltpXS5rZXksIGtleWxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1jZmIsIGdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGJsa2xlbiA9IGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbih0dltpXS5hbGdvKTsKKyAgICAgIGlmICghYmxrbGVuKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1jZmIsIGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbiBmYWlsZWRcbiIpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRlLCB0dltpXS5pdiwgYmxrbGVuKTsKKyAgICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRkLCB0dltpXS5pdiwgYmxrbGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLWNmYiwgZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBmb3IgKGogPSAwOyB0dltpXS5kYXRhW2pdLmlubGVuOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9lbmNyeXB0IChoZGUsIG91dCwgTUFYX0RBVEFfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W2ldLmRhdGFbal0ucGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W2ldLmRhdGFbal0uaW5sZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJhZXMtY2ZiLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG1lbWNtcCAodHZbaV0uZGF0YVtqXS5vdXQsIG91dCwgdHZbaV0uZGF0YVtqXS5pbmxlbikpIHsKKyAgICAgICAgICAgIGZhaWwgKCJhZXMtY2ZiLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5ICVkOiVkXG4iLCBpLCBqKTsKKwkgIH0KKyAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZGQsIG91dCwgdHZbaV0uZGF0YVtqXS5pbmxlbiwgTlVMTCwgMCk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1jZmIsIGdjcnlfY2lwaGVyX2RlY3J5cHQgKCVkLCAlZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobWVtY21wICh0dltpXS5kYXRhW2pdLnBsYWludGV4dCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuKSkKKyAgICAgICAgICAgIGZhaWwgKCJhZXMtY2ZiLCBkZWNyeXB0IG1pc21hdGNoIGVudHJ5ICVkOiVkXG4iLCBpLCBqKTsKKyAgICAgICAgfQorCisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgIH0KKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgQ0ZCIGNoZWNrcy5cbiIpOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfb2ZiX2NpcGhlciAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dgorICB7CisgICAgaW50IGFsZ287CisgICAgY2hhciBrZXlbTUFYX0RBVEFfTEVOXTsKKyAgICBjaGFyIGl2W01BWF9EQVRBX0xFTl07CisgICAgc3RydWN0IGRhdGEKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtNQVhfREFUQV9MRU5dOworICAgICAgaW50IGlubGVuOworICAgICAgY2hhciBvdXRbTUFYX0RBVEFfTEVOXTsKKyAgICB9CisgICAgZGF0YVtNQVhfREFUQV9MRU5dOworICB9IHR2W10gPQorICAgIHsKKyAgICAgIC8qIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhhL3NwODAwLTM4YS5wZGYgKi8KKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKKyAgICAgICAgeyB7ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4M2JceDNmXHhkOVx4MmVceGI3XHgyZFx4YWRceDIwXHgzM1x4MzRceDQ5XHhmOFx4ZThceDNjXHhmYlx4NGEiIH0sCisgICAgICAgICAgeyAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWNceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDc3XHg4OVx4NTBceDhkXHgxNlx4OTFceDhmXHgwM1x4ZjVceDNjXHg1Mlx4ZGFceGM1XHg0ZVx4ZDhceDI1In0sCisgICAgICAgICAgeyAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDk3XHg0MFx4MDVceDFlXHg5Y1x4NWZceGVjXHhmNlx4NDNceDQ0XHhmN1x4YThceDIyXHg2MFx4ZWRceGNjIiB9LAorICAgICAgICAgIHsgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHgzMFx4NGNceDY1XHgyOFx4ZjZceDU5XHhjN1x4NzhceDY2XHhhNVx4MTBceGQ5XHhjMVx4ZDZceGFlXHg1ZSIgfSwKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTMTkyLAorICAgICAgICAiXHg4ZVx4NzNceGIwXHhmN1x4ZGFceDBlXHg2NFx4NTJceGM4XHgxMFx4ZjNceDJiIgorICAgICAgICAiXHg4MFx4OTBceDc5XHhlNVx4NjJceGY4XHhlYVx4ZDJceDUyXHgyY1x4NmJceDdiIiwKKyAgICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorICAgICAgICB7IHsgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHhjZFx4YzhceDBkXHg2Zlx4ZGRceGYxXHg4Y1x4YWJceDM0XHhjMlx4NTlceDA5XHhjOVx4OWFceDQxXHg3NCIgfSwKKyAgICAgICAgICB7ICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4ZmNceGMyXHg4Ylx4OGRceDRjXHg2M1x4ODNceDdjXHgwOVx4ZThceDE3XHgwMFx4YzFceDEwXHgwNFx4MDEiIH0sCisgICAgICAgICAgeyAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDhkXHg5YVx4OWFceGVhXHhjMFx4ZjZceDU5XHg2Zlx4NTVceDljXHg2ZFx4NGRceGFmXHg1OVx4YTVceGYyIiB9LAorICAgICAgICAgIHsgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHg2ZFx4OWZceDIwXHgwOFx4NTdceGNhXHg2Y1x4M2VceDljXHhhY1x4NTJceDRiXHhkOVx4YWNceGM5XHgyYSIgfSwKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTMjU2LAorICAgICAgICAiXHg2MFx4M2RceGViXHgxMFx4MTVceGNhXHg3MVx4YmVceDJiXHg3M1x4YWVceGYwXHg4NVx4N2RceDc3XHg4MSIKKyAgICAgICAgIlx4MWZceDM1XHgyY1x4MDdceDNiXHg2MVx4MDhceGQ3XHgyZFx4OThceDEwXHhhM1x4MDlceDE0XHhkZlx4ZjQiLAorICAgICAgICAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisgICAgICAgIHsgeyAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceGRjXHg3ZVx4ODRceGJmXHhkYVx4NzlceDE2XHg0Ylx4N2VceGNkXHg4NFx4ODZceDk4XHg1ZFx4MzhceDYwIiB9LAorICAgICAgICAgIHsgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiLAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICAiXHg0Zlx4ZWJceGRjXHg2N1x4NDBceGQyXHgwYlx4M2FceGM4XHg4Zlx4NmFceGQ4XHgyYVx4NGZceGIwXHg4ZCIgfSwKKyAgICAgICAgICB7ICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMVx4ZTVceGZiXHhjMVx4MTlceDFhXHgwYVx4NTJceGVmIiwKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgIlx4NzFceGFiXHg0N1x4YTBceDg2XHhlOFx4NmVceGVkXHhmM1x4OWRceDFjXHg1Ylx4YmFceDk3XHhjNFx4MDgiIH0sCisgICAgICAgICAgeyAiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTdceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgICJceDAxXHgyNlx4MTRceDFkXHg2N1x4ZjNceDdiXHhlOFx4NTNceDhmXHg1YVx4OGJceGU3XHg0MFx4ZTRceDg0IiB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworICBnY3J5X2NpcGhlcl9oZF90IGhkZSwgaGRkOworICB1bnNpZ25lZCBjaGFyIG91dFtNQVhfREFUQV9MRU5dOworICBpbnQgaSwgaiwga2V5bGVuLCBibGtsZW47CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgU3RhcnRpbmcgT0ZCIGNoZWNrcy5cbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHR2KSAvIHNpemVvZiAodHZbMF0pOyBpKyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBPRkIgbW9kZSBmb3IgJXMgWyVpXVxuIiwKKwkJIGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAodHZbaV0uYWxnbyksCisJCSB0dltpXS5hbGdvKTsKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZGUsIHR2W2ldLmFsZ28sIEdDUllfQ0lQSEVSX01PREVfT0ZCLCAwKTsKKyAgICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRkLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX09GQiwgMCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1vZmIsIGdjcnlfY2lwaGVyX29wZW4gZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAga2V5bGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuKHR2W2ldLmFsZ28pOworICAgICAgaWYgKCFrZXlsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRlLCB0dltpXS5rZXksIGtleWxlbik7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGQsIHR2W2ldLmtleSwga2V5bGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgYmxrbGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKHR2W2ldLmFsZ28pOworICAgICAgaWYgKCFibGtsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGUsIHR2W2ldLml2LCBibGtsZW4pOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGQsIHR2W2ldLml2LCBibGtsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJhZXMtb2ZiLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGZvciAoaiA9IDA7IHR2W2ldLmRhdGFbal0uaW5sZW47IGorKykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0LCBNQVhfREFUQV9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbaV0uZGF0YVtqXS5wbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbaV0uZGF0YVtqXS5pbmxlbik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1vZmIsIGdjcnlfY2lwaGVyX2VuY3J5cHQgKCVkLCAlZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobWVtY21wICh0dltpXS5kYXRhW2pdLm91dCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuKSkKKyAgICAgICAgICAgIGZhaWwgKCJhZXMtb2ZiLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5ICVkOiVkXG4iLCBpLCBqKTsKKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuLCBOVUxMLCAwKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfZGVjcnlwdCAoJWQsICVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ucGxhaW50ZXh0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgZmFpbCAoImFlcy1vZmIsIGRlY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQ6JWRcbiIsIGksIGopOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3Jlc2V0KGhkZSk7CisgICAgICBpZiAoIWVycikKKwllcnIgPSBnY3J5X2NpcGhlcl9yZXNldChoZGQpOworICAgICAgaWYgKGVycikKKwl7CisJICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfcmVzZXQgKCVkLCAlZCkgZmFpbGVkOiAlc1xuIiwKKwkJaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKwkgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworCSAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisJICByZXR1cm47CisJfQorCisgICAgICAvKiBnY3J5X2NpcGhlcl9yZXNldCBjbGVhcnMgdGhlIElWICovCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRlLCB0dltpXS5pdiwgYmxrbGVuKTsKKyAgICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRkLCB0dltpXS5pdiwgYmxrbGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAvKiB0aGlzIHRpbWUgd2UgZW5jcnlwdCBhbmQgZGVjcnlwdCBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKyAgICAgIGZvciAoaiA9IDA7IHR2W2ldLmRhdGFbal0uaW5sZW47IGorKykKKyAgICAgICAgeworCSAgaW50IGJ5dGVOdW07CisJICBmb3IgKGJ5dGVOdW0gPSAwOyBieXRlTnVtIDwgdHZbaV0uZGF0YVtqXS5pbmxlbjsgKytieXRlTnVtKQorCSAgICB7CisJICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXQrYnl0ZU51bSwgMSwKKwkJCQkJICh0dltpXS5kYXRhW2pdLnBsYWludGV4dCkgKyBieXRlTnVtLAorCQkJCQkgMSk7CisJICAgICAgaWYgKGVycikKKwkJeworCQkgIGZhaWwgKCJhZXMtb2ZiLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisJCQlpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworCQkgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworCQkgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworCQkgIHJldHVybjsKKwkJfQorCSAgICB9CisKKyAgICAgICAgICBpZiAobWVtY21wICh0dltpXS5kYXRhW2pdLm91dCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuKSkKKyAgICAgICAgICAgIGZhaWwgKCJhZXMtb2ZiLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5ICVkOiVkXG4iLCBpLCBqKTsKKworCSAgZm9yIChieXRlTnVtID0gMDsgYnl0ZU51bSA8IHR2W2ldLmRhdGFbal0uaW5sZW47ICsrYnl0ZU51bSkKKwkgICAgeworCSAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZCwgb3V0K2J5dGVOdW0sIDEsIE5VTEwsIDApOworCSAgICAgIGlmIChlcnIpCisJCXsKKwkJICBmYWlsICgiYWVzLW9mYiwgZ2NyeV9jaXBoZXJfZGVjcnlwdCAoJWQsICVkKSBmYWlsZWQ6ICVzXG4iLAorCQkJaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKwkJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKwkJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgfQorCisgICAgICAgICAgaWYgKG1lbWNtcCAodHZbaV0uZGF0YVtqXS5wbGFpbnRleHQsIG91dCwgdHZbaV0uZGF0YVtqXS5pbmxlbikpCisgICAgICAgICAgICBmYWlsICgiYWVzLW9mYiwgZGVjcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZFxuIiwgaSwgaik7CisgICAgICAgIH0KKworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICB9CisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgQ29tcGxldGVkIE9GQiBjaGVja3MuXG4iKTsKK30KKworc3RhdGljIHZvaWQKK19jaGVja19nY21fY2lwaGVyICh1bnNpZ25lZCBpbnQgc3RlcCkKK3sKKyAgc3RydWN0IHR2CisgIHsKKyAgICBpbnQgYWxnbzsKKyAgICBjaGFyIGtleVtNQVhfREFUQV9MRU5dOworICAgIGNoYXIgaXZbTUFYX0RBVEFfTEVOXTsKKyAgICBpbnQgaXZsZW47CisgICAgdW5zaWduZWQgY2hhciBhYWRbTUFYX0RBVEFfTEVOXTsKKyAgICBpbnQgYWFkbGVuOworICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W01BWF9EQVRBX0xFTl07CisgICAgaW50IGlubGVuOworICAgIGNoYXIgb3V0W01BWF9EQVRBX0xFTl07CisgICAgY2hhciB0YWdbTUFYX0RBVEFfTEVOXTsKKyAgfSB0dltdID0KKyAgICB7CisgICAgICAvKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9CQ00vZG9jdW1lbnRzL3Byb3Bvc2VkbW9kZXMvZ2NtL2djbS1yZXZpc2VkLXNwZWMucGRmICovCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKyAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgMTIsCisgICAgICAgICIiLCAwLAorICAgICAgICAiIiwKKyAgICAgICAgMCwKKyAgICAgICAgIiIsCisgICAgICAgICJceDU4XHhlMlx4ZmNceGNlXHhmYVx4N2VceDMwXHg2MVx4MzZceDdmXHgxZFx4NTdceGE0XHhlN1x4NDVceDVhIiB9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsCisgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsIDEyLAorICAgICAgICAiIiwgMCwKKyAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAxNiwKKyAgICAgICAgIlx4MDNceDg4XHhkYVx4Y2VceDYwXHhiNlx4YTNceDkyXHhmM1x4MjhceGMyXHhiOVx4NzFceGIyXHhmZVx4NzgiLAorICAgICAgICAiXHhhYlx4NmVceDQ3XHhkNFx4MmNceGVjXHgxM1x4YmRceGY1XHgzYVx4NjdceGIyXHgxMlx4NTdceGJkXHhkZiIgfSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLAorICAgICAgICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWNceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIsCisgICAgICAgICJceGNhXHhmZVx4YmFceGJlXHhmYVx4Y2VceGRiXHhhZFx4ZGVceGNhXHhmOFx4ODgiLCAxMiwKKyAgICAgICAgIiIsIDAsCisgICAgICAgICJceGQ5XHgzMVx4MzJceDI1XHhmOFx4ODRceDA2XHhlNVx4YTVceDU5XHgwOVx4YzVceGFmXHhmNVx4MjZceDlhIgorICAgICAgICAiXHg4Nlx4YTdceGE5XHg1M1x4MTVceDM0XHhmN1x4ZGFceDJlXHg0Y1x4MzBceDNkXHg4YVx4MzFceDhhXHg3MiIKKyAgICAgICAgIlx4MWNceDNjXHgwY1x4OTVceDk1XHg2OFx4MDlceDUzXHgyZlx4Y2ZceDBlXHgyNFx4NDlceGE2XHhiNVx4MjUiCisgICAgICAgICJceGIxXHg2YVx4ZWRceGY1XHhhYVx4MGRceGU2XHg1N1x4YmFceDYzXHg3Ylx4MzlceDFhXHhhZlx4ZDJceDU1IiwKKyAgICAgICAgNjQsCisgICAgICAgICJceDQyXHg4M1x4MWVceGMyXHgyMVx4NzdceDc0XHgyNFx4NGJceDcyXHgyMVx4YjdceDg0XHhkMFx4ZDRceDljIgorICAgICAgICAiXHhlM1x4YWFceDIxXHgyZlx4MmNceDAyXHhhNFx4ZTBceDM1XHhjMVx4N2VceDIzXHgyOVx4YWNceGExXHgyZSIKKyAgICAgICAgIlx4MjFceGQ1XHgxNFx4YjJceDU0XHg2Nlx4OTNceDFjXHg3ZFx4OGZceDZhXHg1YVx4YWNceDg0XHhhYVx4MDUiCisgICAgICAgICJceDFiXHhhM1x4MGJceDM5XHg2YVx4MGFceGFjXHg5N1x4M2RceDU4XHhlMFx4OTFceDQ3XHgzZlx4NTlceDg1IiwKKyAgICAgICAgIlx4NGRceDVjXHgyYVx4ZjNceDI3XHhjZFx4NjRceGE2XHgyY1x4ZjNceDVhXHhiZFx4MmJceGE2XHhmYVx4YjQiIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKyAgICAgICAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiLAorICAgICAgICAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWRceGRlXHhjYVx4ZjhceDg4IiwgMTIsCisgICAgICAgICJceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorICAgICAgICAiXHhhYlx4YWRceGRhXHhkMiIsIDIwLAorICAgICAgICAiXHhkOVx4MzFceDMyXHgyNVx4ZjhceDg0XHgwNlx4ZTVceGE1XHg1OVx4MDlceGM1XHhhZlx4ZjVceDI2XHg5YSIKKyAgICAgICAgIlx4ODZceGE3XHhhOVx4NTNceDE1XHgzNFx4ZjdceGRhXHgyZVx4NGNceDMwXHgzZFx4OGFceDMxXHg4YVx4NzIiCisgICAgICAgICJceDFjXHgzY1x4MGNceDk1XHg5NVx4NjhceDA5XHg1M1x4MmZceGNmXHgwZVx4MjRceDQ5XHhhNlx4YjVceDI1IgorICAgICAgICAiXHhiMVx4NmFceGVkXHhmNVx4YWFceDBkXHhlNlx4NTdceGJhXHg2M1x4N2JceDM5IiwKKyAgICAgICAgNjAsCisgICAgICAgICJceDQyXHg4M1x4MWVceGMyXHgyMVx4NzdceDc0XHgyNFx4NGJceDcyXHgyMVx4YjdceDg0XHhkMFx4ZDRceDljIgorICAgICAgICAiXHhlM1x4YWFceDIxXHgyZlx4MmNceDAyXHhhNFx4ZTBceDM1XHhjMVx4N2VceDIzXHgyOVx4YWNceGExXHgyZSIKKyAgICAgICAgIlx4MjFceGQ1XHgxNFx4YjJceDU0XHg2Nlx4OTNceDFjXHg3ZFx4OGZceDZhXHg1YVx4YWNceDg0XHhhYVx4MDUiCisgICAgICAgICJceDFiXHhhM1x4MGJceDM5XHg2YVx4MGFceGFjXHg5N1x4M2RceDU4XHhlMFx4OTFceDQ3XHgzZlx4NTlceDg1IiwKKyAgICAgICAgIlx4NWJceGM5XHg0Zlx4YmNceDMyXHgyMVx4YTVceGRiXHg5NFx4ZmFceGU5XHg1YVx4ZTdceDEyXHgxYVx4NDciIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKyAgICAgICAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiLAorICAgICAgICAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWQiLCA4LAorICAgICAgICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWZceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZiIKKyAgICAgICAgIlx4YWJceGFkXHhkYVx4ZDIiLCAyMCwKKyAgICAgICAgIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1XHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisgICAgICAgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYVx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorICAgICAgICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTNceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKyAgICAgICAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3XHhiYVx4NjNceDdiXHgzOSIsCisgICAgICAgIDYwLAorICAgICAgICAiXHg2MVx4MzVceDNiXHg0Y1x4MjhceDA2XHg5M1x4NGFceDc3XHg3Zlx4ZjVceDFmXHhhMlx4MmFceDQ3XHg1NSIKKyAgICAgICAgIlx4NjlceDliXHgyYVx4NzFceDRmXHhjZFx4YzZceGY4XHgzN1x4NjZceGU1XHhmOVx4N2JceDZjXHg3NFx4MjMiCisgICAgICAgICJceDczXHg4MFx4NjlceDAwXHhlNFx4OWZceDI0XHhiMlx4MmJceDA5XHg3NVx4NDRceGQ0XHg4OVx4NmJceDQyIgorICAgICAgICAiXHg0OVx4ODlceGI1XHhlMVx4ZWJceGFjXHgwZlx4MDdceGMyXHgzZlx4NDVceDk4IiwKKyAgICAgICAgIlx4MzZceDEyXHhkMlx4ZTdceDllXHgzYlx4MDdceDg1XHg1Nlx4MWJceGUxXHg0YVx4YWNceGEyXHhmY1x4Y2IiIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywKKyAgICAgICAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiLAorICAgICAgICAiXHg5M1x4MTNceDIyXHg1ZFx4ZjhceDg0XHgwNlx4ZTVceDU1XHg5MFx4OWNceDVhXHhmZlx4NTJceDY5XHhhYSIKKyAgICAgICAgIlx4NmFceDdhXHg5NVx4MzhceDUzXHg0Zlx4N2RceGExXHhlNFx4YzNceDAzXHhkMlx4YTNceDE4XHhhN1x4MjgiCisgICAgICAgICJceGMzXHhjMFx4YzlceDUxXHg1Nlx4ODBceDk1XHgzOVx4ZmNceGYwXHhlMlx4NDJceDlhXHg2Ylx4NTJceDU0IgorICAgICAgICAiXHgxNlx4YWVceGRiXHhmNVx4YTBceGRlXHg2YVx4NTdceGE2XHgzN1x4YjNceDliIiwgNjAsCisgICAgICAgICJceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorICAgICAgICAiXHhhYlx4YWRceGRhXHhkMiIsIDIwLAorICAgICAgICAiXHhkOVx4MzFceDMyXHgyNVx4ZjhceDg0XHgwNlx4ZTVceGE1XHg1OVx4MDlceGM1XHhhZlx4ZjVceDI2XHg5YSIKKyAgICAgICAgIlx4ODZceGE3XHhhOVx4NTNceDE1XHgzNFx4ZjdceGRhXHgyZVx4NGNceDMwXHgzZFx4OGFceDMxXHg4YVx4NzIiCisgICAgICAgICJceDFjXHgzY1x4MGNceDk1XHg5NVx4NjhceDA5XHg1M1x4MmZceGNmXHgwZVx4MjRceDQ5XHhhNlx4YjVceDI1IgorICAgICAgICAiXHhiMVx4NmFceGVkXHhmNVx4YWFceDBkXHhlNlx4NTdceGJhXHg2M1x4N2JceDM5IiwKKyAgICAgICAgNjAsCisgICAgICAgICJceDhjXHhlMlx4NDlceDk4XHg2Mlx4NTZceDE1XHhiNlx4MDNceGEwXHgzM1x4YWNceGExXHgzZlx4YjhceDk0IgorICAgICAgICAiXHhiZVx4OTFceDEyXHhhNVx4YzNceGEyXHgxMVx4YThceGJhXHgyNlx4MmFceDNjXHhjYVx4N2VceDJjXHhhNyIKKyAgICAgICAgIlx4MDFceGU0XHhhOVx4YTRceGZiXHhhNFx4M2NceDkwXHhjY1x4ZGNceGIyXHg4MVx4ZDRceDhjXHg3Y1x4NmYiCisgICAgICAgICJceGQ2XHgyOFx4NzVceGQyXHhhY1x4YTRceDE3XHgwM1x4NGNceDM0XHhhZVx4ZTUiLAorICAgICAgICAiXHg2MVx4OWNceGM1XHhhZVx4ZmZceGZlXHgwYlx4ZmFceDQ2XHgyYVx4ZjRceDNjXHgxNlx4OTlceGQwXHg1MCIgfSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTMTkyLAorICAgICAgICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWNceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIKKyAgICAgICAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIiwKKyAgICAgICAgIlx4OTNceDEzXHgyMlx4NWRceGY4XHg4NFx4MDZceGU1XHg1NVx4OTBceDljXHg1YVx4ZmZceDUyXHg2OVx4YWEiCisgICAgICAgICJceDZhXHg3YVx4OTVceDM4XHg1M1x4NGZceDdkXHhhMVx4ZTRceGMzXHgwM1x4ZDJceGEzXHgxOFx4YTdceDI4IgorICAgICAgICAiXHhjM1x4YzBceGM5XHg1MVx4NTZceDgwXHg5NVx4MzlceGZjXHhmMFx4ZTJceDQyXHg5YVx4NmJceDUyXHg1NCIKKyAgICAgICAgIlx4MTZceGFlXHhkYlx4ZjVceGEwXHhkZVx4NmFceDU3XHhhNlx4MzdceGIzXHg5YiIsIDYwLAorICAgICAgICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWZceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZiIKKyAgICAgICAgIlx4YWJceGFkXHhkYVx4ZDIiLCAyMCwKKyAgICAgICAgIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1XHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisgICAgICAgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYVx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorICAgICAgICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTNceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKyAgICAgICAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3XHhiYVx4NjNceDdiXHgzOSIsCisgICAgICAgIDYwLAorICAgICAgICAiXHhkMlx4N2VceDg4XHg2OFx4MWNceGUzXHgyNFx4M2NceDQ4XHgzMFx4MTZceDVhXHg4Zlx4ZGNceGY5XHhmZiIKKyAgICAgICAgIlx4MWRceGU5XHhhMVx4ZDhceGU2XHhiNFx4NDdceGVmXHg2ZVx4ZjdceGI3XHg5OFx4MjhceDY2XHg2ZVx4NDUiCisgICAgICAgICJceDgxXHhlN1x4OTBceDEyXHhhZlx4MzRceGRkXHhkOVx4ZTJceGYwXHgzN1x4NThceDliXHgyOVx4MmRceGIzIgorICAgICAgICAiXHhlNlx4N2NceDAzXHg2N1x4NDVceGZhXHgyMlx4ZTdceGU5XHhiN1x4MzdceDNiIiwKKyAgICAgICAgIlx4ZGNceGY1XHg2Nlx4ZmZceDI5XHgxY1x4MjVceGJiXHhiOFx4NTZceDhmXHhjM1x4ZDNceDc2XHhhNlx4ZDkiIH0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUzI1NiwKKyAgICAgICAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiCisgICAgICAgICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxY1x4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IiwKKyAgICAgICAgIlx4OTNceDEzXHgyMlx4NWRceGY4XHg4NFx4MDZceGU1XHg1NVx4OTBceDljXHg1YVx4ZmZceDUyXHg2OVx4YWEiCisgICAgICAgICJceDZhXHg3YVx4OTVceDM4XHg1M1x4NGZceDdkXHhhMVx4ZTRceGMzXHgwM1x4ZDJceGEzXHgxOFx4YTdceDI4IgorICAgICAgICAiXHhjM1x4YzBceGM5XHg1MVx4NTZceDgwXHg5NVx4MzlceGZjXHhmMFx4ZTJceDQyXHg5YVx4NmJceDUyXHg1NCIKKyAgICAgICAgIlx4MTZceGFlXHhkYlx4ZjVceGEwXHhkZVx4NmFceDU3XHhhNlx4MzdceGIzXHg5YiIsIDYwLAorICAgICAgICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWZceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZiIKKyAgICAgICAgIlx4YWJceGFkXHhkYVx4ZDIiLCAyMCwKKyAgICAgICAgIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1XHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisgICAgICAgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYVx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorICAgICAgICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTNceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKyAgICAgICAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3XHhiYVx4NjNceDdiXHgzOSIsCisgICAgICAgIDYwLAorICAgICAgICAiXHg1YVx4OGRceGVmXHgyZlx4MGNceDllXHg1M1x4ZjFceGY3XHg1ZFx4NzhceDUzXHg2NVx4OWVceDJhXHgyMCIKKyAgICAgICAgIlx4ZWVceGIyXHhiMlx4MmFceGFmXHhkZVx4NjRceDE5XHhhMFx4NThceGFiXHg0Zlx4NmZceDc0XHg2Ylx4ZjQiCisgICAgICAgICJceDBmXHhjMFx4YzNceGI3XHg4MFx4ZjJceDQ0XHg0NVx4MmRceGEzXHhlYlx4ZjFceGM1XHhkOFx4MmNceGRlIgorICAgICAgICAiXHhhMlx4NDFceDg5XHg5N1x4MjBceDBlXHhmOFx4MmVceDQ0XHhhZVx4N2VceDNmIiwKKyAgICAgICAgIlx4YTRceDRhXHg4Mlx4NjZceGVlXHgxY1x4OGVceGIwXHhjOFx4YjVceGQ0XHhjZlx4NWFceGU5XHhmMVx4OWEiIH0KKyAgICB9OworCisgIGdjcnlfY2lwaGVyX2hkX3QgaGRlLCBoZGQ7CisgIHVuc2lnbmVkIGNoYXIgb3V0W01BWF9EQVRBX0xFTl07CisgIHVuc2lnbmVkIGNoYXIgdGFnW0dDUllfR0NNX0JMT0NLX0xFTl07CisgIGludCBpLCBrZXlsZW47CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworICBzaXplX3QgcG9zLCBwb3NsZW47CisgIGludCBieXRlTnVtOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgU3RhcnRpbmcgR0NNIGNoZWNrcy5cbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHR2KSAvIHNpemVvZiAodHZbMF0pOyBpKyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBHQ00gbW9kZSBmb3IgJXMgWyVpXVxuIiwKKyAgICAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICh0dltpXS5hbGdvKSwKKyAgICAgICAgICAgICAgICAgdHZbaV0uYWxnbyk7CisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX0dDTSwgMCk7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZCwgdHZbaV0uYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9HQ00sIDApOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGtleWxlbiA9IGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbih0dltpXS5hbGdvKTsKKyAgICAgIGlmICgha2V5bGVuKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiBmYWlsZWRcbiIpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCBrZXlsZW4pOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRkLCB0dltpXS5rZXksIGtleWxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGUsIHR2W2ldLml2LCB0dltpXS5pdmxlbik7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZCwgdHZbaV0uaXYsIHR2W2ldLml2bGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLWdjbSwgZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IHR2W2ldLmFhZGxlbjsgcG9zICs9IHN0ZXApCisgICAgICAgIHsKKyAgICAgICAgICBwb3NsZW4gPSAocG9zICsgc3RlcCA8IHR2W2ldLmFhZGxlbikgPyBzdGVwIDogdHZbaV0uYWFkbGVuIC0gcG9zOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKGhkZSwgdHZbaV0uYWFkICsgcG9zLCBwb3NsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKCVkKSAoJWQ6JWQpIGZhaWxlZDogIgorICAgICAgICAgICAgICAgICAgICAiJXNcbiIsIGksIHBvcywgc3RlcCwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKGhkZCwgdHZbaV0uYWFkICsgcG9zLCBwb3NsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBkZSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKCVkKSAoJWQ6JWQpIGZhaWxlZDogIgorCSAgICAgICAgICAgICIlc1xuIiwgaSwgcG9zLCBzdGVwLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IHR2W2ldLmlubGVuOyBwb3MgKz0gc3RlcCkKKyAgICAgICAgeworICAgICAgICAgIHBvc2xlbiA9IChwb3MgKyBzdGVwIDwgdHZbaV0uaW5sZW4pID8gc3RlcCA6IHR2W2ldLmlubGVuIC0gcG9zOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXQgKyBwb3MsIHBvc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dltpXS5wbGFpbnRleHQgKyBwb3MsIHBvc2xlbik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2VuY3J5cHQgKCVkKSAoJWQ6JWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIHBvcywgc3RlcCwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKG1lbWNtcCAodHZbaV0ub3V0LCBvdXQsIHR2W2ldLmlubGVuKSkKKyAgICAgICAgZmFpbCAoImFlcy1nY20sIGVuY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQgKHN0ZXAgJWQpXG4iLCBpLCBzdGVwKTsKKworICAgICAgZm9yIChwb3MgPSAwOyBwb3MgPCB0dltpXS5pbmxlbjsgcG9zICs9IHN0ZXApCisgICAgICAgIHsKKyAgICAgICAgICBwb3NsZW4gPSAocG9zICsgc3RlcCA8IHR2W2ldLmlubGVuKSA/IHN0ZXAgOiB0dltpXS5pbmxlbiAtIHBvczsKKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZCwgb3V0ICsgcG9zLCBwb3NsZW4sIE5VTEwsIDApOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBnY3J5X2NpcGhlcl9kZWNyeXB0ICglZCkgKCVkOiVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCBwb3MsIHN0ZXAsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGlmIChtZW1jbXAgKHR2W2ldLnBsYWludGV4dCwgb3V0LCB0dltpXS5pbmxlbikpCisgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBkZWNyeXB0IG1pc21hdGNoIGVudHJ5ICVkIChzdGVwICVkKVxuIiwgaSwgc3RlcCk7CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2dldHRhZyAoaGRlLCBvdXQsIEdDUllfR0NNX0JMT0NLX0xFTik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2dldHRhZyglZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBpZiAobWVtY21wICh0dltpXS50YWcsIG91dCwgR0NSWV9HQ01fQkxPQ0tfTEVOKSkKKyAgICAgICAgZmFpbCAoImFlcy1nY20sIGVuY3J5cHQgdGFnIG1pc21hdGNoIGVudHJ5ICVkXG4iLCBpKTsKKworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9jaGVja3RhZyAoaGRkLCBvdXQsIEdDUllfR0NNX0JMT0NLX0xFTik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2NoZWNrdGFnKCVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGksIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3Jlc2V0KGhkZSk7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfcmVzZXQoaGRkKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLWdjbSwgZ2NyeV9jaXBoZXJfcmVzZXQgKCVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGksIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIC8qIGdjcnlfY2lwaGVyX3Jlc2V0IGNsZWFycyB0aGUgSVYgKi8KKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGUsIHR2W2ldLml2LCB0dltpXS5pdmxlbik7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZCwgdHZbaV0uaXYsIHR2W2ldLml2bGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiYWVzLWdjbSwgZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAvKiB0aGlzIHRpbWUgd2UgYXV0aGVudGljYXRlLCBlbmNyeXB0IGFuZCBkZWNyeXB0IG9uZSBieXRlIGF0IGEgdGltZSAqLworICAgICAgZm9yIChieXRlTnVtID0gMDsgYnl0ZU51bSA8IHR2W2ldLmFhZGxlbjsgKytieXRlTnVtKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKGhkZSwgdHZbaV0uYWFkICsgYnl0ZU51bSwgMSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoJWQpIChieXRlLWJ1ZikgZmFpbGVkOiAiCisgICAgICAgICAgICAgICAgICAgICIlc1xuIiwgaSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKGhkZCwgdHZbaV0uYWFkICsgYnl0ZU51bSwgMSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGRlIGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoJWQpIChieXRlLWJ1ZikgIgorCSAgICAgICAgICAgICJmYWlsZWQ6ICVzXG4iLCBpLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBmb3IgKGJ5dGVOdW0gPSAwOyBieXRlTnVtIDwgdHZbaV0uaW5sZW47ICsrYnl0ZU51bSkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0K2J5dGVOdW0sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR2W2ldLnBsYWludGV4dCkgKyBieXRlTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCkgKGJ5dGUtYnVmKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKG1lbWNtcCAodHZbaV0ub3V0LCBvdXQsIHR2W2ldLmlubGVuKSkKKyAgICAgICAgZmFpbCAoImFlcy1nY20sIGVuY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQsIChieXRlLWJ1ZilcbiIsIGkpOworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9nZXR0YWcgKGhkZSwgdGFnLCBHQ1JZX0dDTV9CTE9DS19MRU4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJhZXMtZ2NtLCBnY3J5X2NpcGhlcl9nZXR0YWcoJWQpIChieXRlLWJ1ZikgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBpZiAobWVtY21wICh0dltpXS50YWcsIHRhZywgR0NSWV9HQ01fQkxPQ0tfTEVOKSkKKyAgICAgICAgZmFpbCAoImFlcy1nY20sIGVuY3J5cHQgdGFnIG1pc21hdGNoIGVudHJ5ICVkLCAoYnl0ZS1idWYpXG4iLCBpKTsKKworICAgICAgZm9yIChieXRlTnVtID0gMDsgYnl0ZU51bSA8IHR2W2ldLmlubGVuOyArK2J5dGVOdW0pCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZGQsIG91dCtieXRlTnVtLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiYWVzLWdjbSwgZ2NyeV9jaXBoZXJfZGVjcnlwdCAoJWQpIChieXRlLWJ1ZikgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKG1lbWNtcCAodHZbaV0ucGxhaW50ZXh0LCBvdXQsIHR2W2ldLmlubGVuKSkKKyAgICAgICAgZmFpbCAoImFlcy1nY20sIGRlY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWRcbiIsIGkpOworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9jaGVja3RhZyAoaGRkLCB0YWcsIEdDUllfR0NNX0JMT0NLX0xFTik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFlcy1nY20sIGdjcnlfY2lwaGVyX2NoZWNrdGFnKCVkKSAoYnl0ZS1idWYpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgaSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICB9CisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgQ29tcGxldGVkIEdDTSBjaGVja3MuXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZ2NtX2NpcGhlciAodm9pZCkKK3sKKyAgLyogTGFyZ2UgYnVmZmVycywgbm8gc3BsaXR0aW5nLiAqLworICBfY2hlY2tfZ2NtX2NpcGhlcigweGZmZmZmZmZmKTsKKyAgLyogU3BsaXQgaW5wdXQgdG8gb25lIGJ5dGUgYnVmZmVycy4gKi8KKyAgX2NoZWNrX2djbV9jaXBoZXIoMSk7CisgIC8qIFNwbGl0IGlucHV0IHRvIDcgYnl0ZSBidWZmZXJzLiAqLworICBfY2hlY2tfZ2NtX2NpcGhlcig3KTsKKyAgLyogU3BsaXQgaW5wdXQgdG8gMTYgYnl0ZSBidWZmZXJzLiAqLworICBfY2hlY2tfZ2NtX2NpcGhlcigxNik7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2NjbV9jaXBoZXIgKHZvaWQpCit7CisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorICBzdGF0aWMgY29uc3Qgc3RydWN0IHR2CisgIHsKKyAgICBpbnQgYWxnbzsKKyAgICBpbnQga2V5bGVuOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBpbnQgbm9uY2VsZW47CisgICAgY29uc3QgY2hhciAqbm9uY2U7CisgICAgaW50IGFhZGxlbjsKKyAgICBjb25zdCBjaGFyICphYWQ7CisgICAgaW50IHBsYWlubGVuOworICAgIGNvbnN0IGNoYXIgKnBsYWludGV4dDsKKyAgICBpbnQgY2lwaGVybGVuOworICAgIGNvbnN0IGNoYXIgKmNpcGhlcnRleHQ7CisgIH0gdHZbXSA9CisgICAgeworICAgICAgLyogUkZDIDM2MTAgKi8KKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDNceDAyXHgwMVx4MDBceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjMsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFIiwKKyAgICAgICAgICAzMSwKKyAgICAgICAgICAiXHg1OFx4OENceDk3XHg5QVx4NjFceEM2XHg2M1x4RDJceEYwXHg2Nlx4RDBceEMyXHhDMFx4RjlceDg5XHg4MFx4NkRceDVGXHg2Qlx4NjFceERBXHhDM1x4ODRceDE3XHhFOFx4RDFceDJDXHhGRFx4RjlceDI2XHhFMCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzIgKi8KKyAgICAgICAgICAxNiwgIlx4QzBceEMxXHhDMlx4QzNceEM0XHhDNVx4QzZceEM3XHhDOFx4QzlceENBXHhDQlx4Q0NceENEXHhDRVx4Q0YiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MDBceDAwXHgwNFx4MDNceDAyXHgwMVx4QTBceEExXHhBMlx4QTNceEE0XHhBNSIsCisgICAgICAgICAgOCwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwKKyAgICAgICAgICAyNCwKKyAgICAgICAgICAiXHgwOFx4MDlceDBBXHgwQlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUVceDFGIiwKKyAgICAgICAgICAzMiwKKyAgICAgICAgICAiXHg3Mlx4QzlceDFBXHgzNlx4RTFceDM1XHhGOFx4Q0ZceDI5XHgxQ1x4QThceDk0XHgwOFx4NUNceDg3XHhFM1x4Q0NceDE1XHhDNFx4MzlceEM5XHhFNFx4M0FceDNCXHhBMFx4OTFceEQ1XHg2RVx4MTBceDQwXHgwOVx4MTYifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMzICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDVceDA0XHgwM1x4MDJceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjUsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRlx4MjAiLAorICAgICAgICAgIDMzLAorICAgICAgICAgICJceDUxXHhCMVx4RTVceEY0XHg0QVx4MTlceDdEXHgxRFx4QTRceDZCXHgwRlx4OEVceDJEXHgyOFx4MkFceEU4XHg3MVx4RThceDM4XHhCQlx4NjRceERBXHg4NVx4OTZceDU3XHg0QVx4REFceEE3XHg2Rlx4QkRceDlGXHhCMFx4QzUifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICM0ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDZceDA1XHgwNFx4MDNceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDEyLCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MEFceDBCIiwKKyAgICAgICAgICAxOSwKKyAgICAgICAgICAiXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRSIsCisgICAgICAgICAgMjcsCisgICAgICAgICAgIlx4QTJceDhDXHg2OFx4NjVceDkzXHg5QVx4OUFceDc5XHhGQVx4QUFceDVDXHg0Q1x4MkFceDlEXHg0QVx4OTFceENEXHhBQ1x4OENceDk2XHhDOFx4NjFceEI5XHhDOVx4RTZceDFFXHhGMSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzUgKi8KKyAgICAgICAgICAxNiwgIlx4QzBceEMxXHhDMlx4QzNceEM0XHhDNVx4QzZceEM3XHhDOFx4QzlceENBXHhDQlx4Q0NceENEXHhDRVx4Q0YiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MDBceDAwXHgwN1x4MDZceDA1XHgwNFx4QTBceEExXHhBMlx4QTNceEE0XHhBNSIsCisgICAgICAgICAgMTIsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEIiLAorICAgICAgICAgIDIwLAorICAgICAgICAgICJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsCisgICAgICAgICAgMjgsCisgICAgICAgICAgIlx4RENceEYxXHhGQlx4N0JceDVEXHg5RVx4MjNceEZCXHg5RFx4NEVceDEzXHgxMlx4NTNceDY1XHg4QVx4RDhceDZFXHhCRFx4Q0FceDNFXHg1MVx4RThceDNGXHgwN1x4N0RceDlDXHgyRFx4OTMifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICM2ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDhceDA3XHgwNlx4MDVceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDEyLCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MEFceDBCIiwKKyAgICAgICAgICAyMSwKKyAgICAgICAgICAiXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUZceDIwIiwKKyAgICAgICAgICAyOSwKKyAgICAgICAgICAiXHg2Rlx4QzFceEIwXHgxMVx4RjBceDA2XHg1Nlx4OEJceDUxXHg3MVx4QTRceDJEXHg5NVx4M0RceDQ2XHg5Qlx4MjVceDcwXHhBNFx4QkRceDg3XHg0MFx4NUFceDA0XHg0M1x4QUNceDkxXHhDQlx4OTQifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICM3ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDlceDA4XHgwN1x4MDZceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjMsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFIiwKKyAgICAgICAgICAzMywKKyAgICAgICAgICAiXHgwMVx4MzVceEQxXHhCMlx4QzlceDVGXHg0MVx4RDVceEQxXHhENFx4RkVceEMxXHg4NVx4RDFceDY2XHhCOFx4MDlceDRFXHg5OVx4OURceEZFXHhEOVx4NkNceDA0XHg4Q1x4NTZceDYwXHgyQ1x4OTdceEFDXHhCQlx4NzRceDkwIn0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywgLyogUGFja2V0IFZlY3RvciAjOCAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDBBXHgwOVx4MDhceDA3XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICA4LCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAorICAgICAgICAgIDI0LAorICAgICAgICAgICJceDA4XHgwOVx4MEFceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUYiLAorICAgICAgICAgIDM0LAorICAgICAgICAgICJceDdCXHg3NVx4MzlceDlBXHhDMFx4ODNceDFEXHhEMlx4RjBceEJCXHhEN1x4NThceDc5XHhBMlx4RkRceDhGXHg2Q1x4QUVceDZCXHg2Q1x4RDlceEI3XHhEQlx4MjRceEMxXHg3Qlx4NDRceDMzXHhGNFx4MzRceDk2XHgzRlx4MzRceEI0In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0FFUywgLyogUGFja2V0IFZlY3RvciAjOSAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDBCXHgwQVx4MDlceDA4XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICA4LCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAorICAgICAgICAgIDI1LAorICAgICAgICAgICJceDA4XHgwOVx4MEFceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUZceDIwIiwKKyAgICAgICAgICAzNSwKKyAgICAgICAgICAiXHg4Mlx4NTNceDFBXHg2MFx4Q0NceDI0XHg5NFx4NUFceDRCXHg4Mlx4NzlceDE4XHgxQVx4QjVceEM4XHg0RFx4RjJceDFDXHhFN1x4RjlceEI3XHgzRlx4NDJceEUxXHg5N1x4RUFceDlDXHgwN1x4RTVceDZCXHg1RVx4QjFceDdFXHg1Rlx4NEUifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxMCAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDBDXHgwQlx4MEFceDA5XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICAxMiwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQiIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUUiLAorICAgICAgICAgIDI5LAorICAgICAgICAgICJceDA3XHgzNFx4MjVceDk0XHgxNVx4NzdceDg1XHgxNVx4MkJceDA3XHg0MFx4OThceDMzXHgwQVx4QkJceDE0XHgxQlx4OTRceDdCXHg1Nlx4NkFceEE5XHg0MFx4NkJceDREXHg5OVx4OTlceDg4XHhERCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzExICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MERceDBDXHgwQlx4MEFceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDEyLCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MEFceDBCIiwKKyAgICAgICAgICAyMCwKKyAgICAgICAgICAiXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUYiLAorICAgICAgICAgIDMwLAorICAgICAgICAgICJceDY3XHg2Qlx4QjJceDAzXHg4MFx4QjBceEUzXHgwMVx4RThceEFCXHg3OVx4NTlceDBBXHgzOVx4NkRceEE3XHg4Qlx4ODNceDQ5XHgzNFx4RjVceDNBXHhBMlx4RTlceDEwXHg3QVx4OEJceDZDXHgwMlx4MkMifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxMiAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDBFXHgwRFx4MENceDBCXHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICAxMiwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQiIsCisgICAgICAgICAgMjEsCisgICAgICAgICAgIlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUVceDFGXHgyMCIsCisgICAgICAgICAgMzEsCisgICAgICAgICAgIlx4QzBceEZGXHhBMFx4RDZceEYwXHg1Qlx4REJceDY3XHhGMlx4NERceDQzXHhBNFx4MzNceDhEXHgyQVx4QTRceEJFXHhEN1x4QjJceDBFXHg0M1x4Q0RceDFBXHhBM1x4MTZceDYyXHhFN1x4QURceDY1XHhENlx4REIifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxMyAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHg0MVx4MkJceDRFXHhBOVx4Q0RceEJFXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICA4LCAiXHgwQlx4RTFceEE4XHg4Qlx4QUNceEUwXHgxOFx4QjEiLAorICAgICAgICAgIDIzLAorICAgICAgICAgICJceDA4XHhFOFx4Q0ZceDk3XHhEOFx4MjBceEVBXHgyNVx4ODRceDYwXHhFOVx4NkFceEQ5XHhDRlx4NTJceDg5XHgwNVx4NERceDg5XHg1Q1x4RUFceEM0XHg3QyIsCisgICAgICAgICAgMzEsCisgICAgICAgICAgIlx4NENceEI5XHg3Rlx4ODZceEEyXHhBNFx4NjhceDlBXHg4N1x4NzlceDQ3XHhBQlx4ODBceDkxXHhFRlx4NTNceDg2XHhBNlx4RkZceEJEXHhEMFx4ODBceEY4XHhFN1x4OENceEY3XHhDQlx4MENceEREXHhEN1x4QjMifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxNCAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHgzM1x4NTZceDhFXHhGN1x4QjJceDYzXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICA4LCAiXHg2M1x4MDFceDhGXHg3Nlx4RENceDhBXHgxQlx4Q0IiLAorICAgICAgICAgIDI0LAorICAgICAgICAgICJceDkwXHgyMFx4RUFceDZGXHg5MVx4QkRceEQ4XHg1QVx4RkFceDAwXHgzOVx4QkFceDRCXHhBRlx4RjlceEJGXHhCN1x4OUNceDcwXHgyOFx4OTRceDlDXHhEMFx4RUMiLAorICAgICAgICAgIDMyLAorICAgICAgICAgICJceDRDXHhDQlx4MUVceDdDXHhBOVx4ODFceEJFXHhGQVx4QTBceDcyXHg2Q1x4NTVceEQzXHg3OFx4MDZceDEyXHg5OFx4QzhceDVDXHg5Mlx4ODFceDRBXHhCQ1x4MzNceEM1XHgyRVx4RThceDFEXHg3RFx4NzdceEMwXHg4QSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzE1ICovCisgICAgICAgICAgMTYsICJceEQ3XHg4Mlx4OERceDEzXHhCMlx4QjBceEJEXHhDM1x4MjVceEE3XHg2Mlx4MzZceERGXHg5M1x4Q0NceDZCIiwKKyAgICAgICAgICAxMywgIlx4MDBceDEwXHgzRlx4RTRceDEzXHgzNlx4NzFceDNDXHg5Nlx4OTZceDc2XHg2Q1x4RkEiLAorICAgICAgICAgIDgsICJceEFBXHg2Q1x4RkFceDM2XHhDQVx4RThceDZCXHg0MCIsCisgICAgICAgICAgMjUsCisgICAgICAgICAgIlx4QjlceDE2XHhFMFx4RUFceENDXHgxQ1x4MDBceEQ3XHhEQ1x4RUNceDY4XHhFQ1x4MEJceDNCXHhCQlx4MUFceDAyXHhERVx4OEFceDJEXHgxQVx4QTNceDQ2XHgxM1x4MkUiLAorICAgICAgICAgIDMzLAorICAgICAgICAgICJceEIxXHhEMlx4M0FceDIyXHgyMFx4RERceEMwXHhBQ1x4OTBceDBEXHg5QVx4QTBceDNDXHg2MVx4RkNceEY0XHhBNVx4NTlceEE0XHg0MVx4NzdceDY3XHgwOFx4OTdceDA4XHhBN1x4NzZceDc5XHg2RVx4REJceDcyXHgzNVx4MDYifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxNiAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHg3Nlx4NENceDYzXHhCOFx4MDVceDhFXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICAxMiwgIlx4RDBceEQwXHg3M1x4NUNceDUzXHgxRVx4MUJceEVDXHhGMFx4NDlceEMyXHg0NCIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4MTJceERBXHhBQ1x4NTZceDMwXHhFRlx4QTVceDM5XHg2Rlx4NzdceDBDXHhFMVx4QTZceDZCXHgyMVx4RjdceEIyXHgxMFx4MUMiLAorICAgICAgICAgIDI3LAorICAgICAgICAgICJceDE0XHhEMlx4NTNceEMzXHg5Nlx4N0JceDcwXHg2MFx4OUJceDdDXHhCQlx4N0NceDQ5XHg5MVx4NjBceDI4XHgzMlx4NDVceDI2XHg5QVx4NkZceDQ5XHg5N1x4NUJceENBXHhERVx4QUYifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxNyAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHhGOFx4QjZceDc4XHgwOVx4NEVceDNCXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICAxMiwgIlx4NzdceEI2XHgwRlx4MDFceDFDXHgwM1x4RTFceDUyXHg1OFx4OTlceEJDXHhBRSIsCisgICAgICAgICAgMjAsCisgICAgICAgICAgIlx4RThceDhCXHg2QVx4NDZceEM3XHg4RFx4NjNceEU1XHgyRVx4QjhceEM1XHg0Nlx4RUZceEI1XHhERVx4NkZceDc1XHhFOVx4Q0NceDBEIiwKKyAgICAgICAgICAyOCwKKyAgICAgICAgICAiXHg1NVx4NDVceEZGXHgxQVx4MDhceDVFXHhFMlx4RUZceEJGXHg1Mlx4QjJceEUwXHg0Qlx4RUVceDFFXHgyM1x4MzZceEM3XHgzRVx4M0ZceDc2XHgyQ1x4MENceDc3XHg0NFx4RkVceDdFXHgzQyJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzE4ICovCisgICAgICAgICAgMTYsICJceEQ3XHg4Mlx4OERceDEzXHhCMlx4QjBceEJEXHhDM1x4MjVceEE3XHg2Mlx4MzZceERGXHg5M1x4Q0NceDZCIiwKKyAgICAgICAgICAxMywgIlx4MDBceEQ1XHg2MFx4OTFceDJEXHgzRlx4NzBceDNDXHg5Nlx4OTZceDc2XHg2Q1x4RkEiLAorICAgICAgICAgIDEyLCAiXHhDRFx4OTBceDQ0XHhEMlx4QjdceDFGXHhEQlx4ODFceDIwXHhFQVx4NjBceEMwIiwKKyAgICAgICAgICAyMSwKKyAgICAgICAgICAiXHg2NFx4MzVceEFDXHhCQVx4RkJceDExXHhBOFx4MkVceDJGXHgwN1x4MURceDdDXHhBNFx4QTVceEVCXHhEOVx4M0FceDgwXHgzQlx4QThceDdGIiwKKyAgICAgICAgICAyOSwKKyAgICAgICAgICAiXHgwMFx4OTdceDY5XHhFQ1x4QUJceERGXHg0OFx4NjJceDU1XHg5NFx4QzVceDkyXHg1MVx4RTZceDAzXHg1N1x4MjJceDY3XHg1RVx4MDRceEM4XHg0N1x4MDlceDlFXHg1QVx4RTBceDcwXHg0NVx4NTEifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMxOSAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHg0Mlx4RkZceEY4XHhGMVx4OTVceDFDXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICA4LCAiXHhEOFx4NUJceEM3XHhFNlx4OUZceDk0XHg0Rlx4QjgiLAorICAgICAgICAgIDIzLAorICAgICAgICAgICJceDhBXHgxOVx4QjlceDUwXHhCQ1x4RjdceDFBXHgwMVx4OEVceDVFXHg2N1x4MDFceEM5XHgxN1x4ODdceDY1XHg5OFx4MDlceEQ2XHg3RFx4QkVceEREXHgxOCIsCisgICAgICAgICAgMzMsCisgICAgICAgICAgIlx4QkNceDIxXHg4RFx4QUFceDk0XHg3NFx4MjdceEI2XHhEQlx4MzhceDZBXHg5OVx4QUNceDFBXHhFRlx4MjNceEFEXHhFMFx4QjVceDI5XHgzOVx4Q0JceDZBXHg2M1x4N0NceEY5XHhCRVx4QzJceDQwXHg4OFx4OTdceEM2XHhCQSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzIwICovCisgICAgICAgICAgMTYsICJceEQ3XHg4Mlx4OERceDEzXHhCMlx4QjBceEJEXHhDM1x4MjVceEE3XHg2Mlx4MzZceERGXHg5M1x4Q0NceDZCIiwKKyAgICAgICAgICAxMywgIlx4MDBceDkyXHgwRlx4NDBceEU1XHg2Q1x4RENceDNDXHg5Nlx4OTZceDc2XHg2Q1x4RkEiLAorICAgICAgICAgIDgsICJceDc0XHhBMFx4RUJceEM5XHgwNlx4OUZceDVCXHgzNyIsCisgICAgICAgICAgMjQsCisgICAgICAgICAgIlx4MTdceDYxXHg0M1x4M0NceDM3XHhDNVx4QTNceDVGXHhDMVx4RjNceDlGXHg0MFx4NjNceDAyXHhFQlx4OTBceDdDXHg2MVx4NjNceEJFXHgzOFx4QzlceDg0XHgzNyIsCisgICAgICAgICAgMzQsCisgICAgICAgICAgIlx4NThceDEwXHhFNlx4RkRceDI1XHg4N1x4NDBceDIyXHhFOFx4MDNceDYxXHhBNFx4NzhceEUzXHhFOVx4Q0ZceDQ4XHg0QVx4QjBceDRGXHg0NFx4N0VceEZGXHhGNlx4RjBceEE0XHg3N1x4Q0NceDJGXHhDOVx4QkZceDU0XHg4OVx4NDQifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMyMSAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHgyN1x4Q0FceDBDXHg3MVx4MjBceEJDXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICA4LCAiXHg0NFx4QTNceEFBXHgzQVx4QUVceDY0XHg3NVx4Q0EiLAorICAgICAgICAgIDI1LAorICAgICAgICAgICJceEE0XHgzNFx4QThceEU1XHg4NVx4MDBceEM2XHhFNFx4MTVceDMwXHg1M1x4ODhceDYyXHhENlx4ODZceEVBXHg5RVx4ODFceDMwXHgxQlx4NUFceEU0XHgyMlx4NkJceEZBIiwKKyAgICAgICAgICAzNSwKKyAgICAgICAgICAiXHhGMlx4QkVceEVEXHg3Qlx4QzVceDA5XHg4RVx4ODNceEZFXHhCNVx4QjNceDE2XHgwOFx4RjhceEUyXHg5Q1x4MzhceDgxXHg5QVx4ODlceEM4XHhFN1x4NzZceEYxXHg1NFx4NERceDQxXHg1MVx4QTRceEVEXHgzQVx4OEJceDg3XHhCOVx4Q0UifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMyMiAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHg1Qlx4OENceENCXHhDRFx4OUFceEY4XHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICAxMiwgIlx4RUNceDQ2XHhCQlx4NjNceEIwXHgyNVx4MjBceEMzXHgzQ1x4NDlceEZEXHg3MCIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4QjlceDZCXHg0OVx4RTJceDFEXHg2Mlx4MTdceDQxXHg2M1x4MjhceDc1XHhEQlx4N0ZceDZDXHg5Mlx4NDNceEQyXHhEN1x4QzIiLAorICAgICAgICAgIDI5LAorICAgICAgICAgICJceDMxXHhEN1x4NTBceEEwXHg5RFx4QTNceEVEXHg3Rlx4RERceEQ0XHg5QVx4MjBceDMyXHhBQVx4QkZceDE3XHhFQ1x4OEVceEJGXHg3RFx4MjJceEM4XHgwOFx4OENceDY2XHg2Qlx4RTVceEMxXHg5NyJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIC8qIFBhY2tldCBWZWN0b3IgIzIzICovCisgICAgICAgICAgMTYsICJceEQ3XHg4Mlx4OERceDEzXHhCMlx4QjBceEJEXHhDM1x4MjVceEE3XHg2Mlx4MzZceERGXHg5M1x4Q0NceDZCIiwKKyAgICAgICAgICAxMywgIlx4MDBceDNFXHhCRVx4OTRceDA0XHg0Qlx4OUFceDNDXHg5Nlx4OTZceDc2XHg2Q1x4RkEiLAorICAgICAgICAgIDEyLCAiXHg0N1x4QTZceDVBXHhDN1x4OEJceDNEXHg1OVx4NDJceDI3XHhFOFx4NUVceDcxIiwKKyAgICAgICAgICAyMCwKKyAgICAgICAgICAiXHhFMlx4RkNceEZCXHhCOFx4ODBceDQ0XHgyQ1x4NzNceDFCXHhGOVx4NTFceDY3XHhDOFx4RkZceEQ3XHg4OVx4NUVceDMzXHg3MFx4NzYiLAorICAgICAgICAgIDMwLAorICAgICAgICAgICJceEU4XHg4Mlx4RjFceERCXHhEM1x4OENceEUzXHhFRFx4QTdceEMyXHgzRlx4MDRceEREXHg2NVx4MDdceDFFXHhCNFx4MTNceDQyXHhBQ1x4REZceDdFXHgwMFx4RENceENFXHhDN1x4QUVceDUyXHg5OFx4N0QifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQUVTLCAvKiBQYWNrZXQgVmVjdG9yICMyNCAqLworICAgICAgICAgIDE2LCAiXHhEN1x4ODJceDhEXHgxM1x4QjJceEIwXHhCRFx4QzNceDI1XHhBN1x4NjJceDM2XHhERlx4OTNceENDXHg2QiIsCisgICAgICAgICAgMTMsICJceDAwXHg4RFx4NDlceDNCXHgzMFx4QUVceDhCXHgzQ1x4OTZceDk2XHg3Nlx4NkNceEZBIiwKKyAgICAgICAgICAxMiwgIlx4NkVceDM3XHhBNlx4RUZceDU0XHg2RFx4OTVceDVEXHgzNFx4QUJceDYwXHg1OSIsCisgICAgICAgICAgMjEsCisgICAgICAgICAgIlx4QUJceEYyXHgxQ1x4MEJceDAyXHhGRVx4QjhceDhGXHg4NVx4NkRceEY0XHhBM1x4NzNceDgxXHhCQ1x4RTNceENDXHgxMlx4ODVceDE3XHhENCIsCisgICAgICAgICAgMzEsCisgICAgICAgICAgIlx4RjNceDI5XHgwNVx4QjhceDhBXHg2NFx4MUJceDA0XHhCOVx4QzlceEZGXHhCNVx4OENceEMzXHg5MFx4OTBceDBGXHgzRFx4QTFceDJBXHhCMVx4NkRceENFXHg5RVx4ODJceEVGXHhBMVx4NkRceEE2XHgyMFx4NTkifSwKKyAgICAgIC8qIFJGQyA1NTI4ICovCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDNceDAyXHgwMVx4MDBceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjMsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFIiwKKyAgICAgICAgICAzMSwKKyAgICAgICAgICAiXHhCQVx4NzNceDcxXHg4NVx4RTdceDE5XHgzMVx4MDRceDkyXHhGM1x4OEFceDVGXHgxMlx4NTFceERBXHg1NVx4RkFceEZCXHhDOVx4NDlceDg0XHg4QVx4MERceEZDXHhBRVx4Q0VceDc0XHg2Qlx4M0RceEI5XHhBRCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMiAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDA0XHgwM1x4MDJceDAxXHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICA4LCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAorICAgICAgICAgIDI0LAorICAgICAgICAgICJceDA4XHgwOVx4MEFceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUYiLAorICAgICAgICAgIDMyLAorICAgICAgICAgICJceDVEXHgyNVx4NjRceEJGXHg4RVx4QUZceEUxXHhEOVx4OTVceDI2XHhFQ1x4MDFceDZEXHgxQlx4RjBceDQyXHg0Q1x4RkJceEQyXHhDRFx4NjJceDg0XHg4Rlx4MzNceDYwXHhCMlx4MjlceDVEXHhGMlx4NDJceDgzXHhFOCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMyAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDA1XHgwNFx4MDNceDAyXHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICA4LCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAorICAgICAgICAgIDI1LAorICAgICAgICAgICJceDA4XHgwOVx4MEFceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUZceDIwIiwKKyAgICAgICAgICAzMywKKyAgICAgICAgICAiXHg4MVx4RjZceDYzXHhENlx4QzdceDc4XHg3OFx4MTdceEY5XHgyMFx4MzZceDA4XHhCOVx4ODJceEFEXHgxNVx4RENceDJCXHhCRFx4ODdceEQ3XHg1Nlx4RjdceDkyXHgwNFx4RjVceDUxXHhENlx4NjhceDJGXHgyM1x4QUFceDQ2In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICM0ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDZceDA1XHgwNFx4MDNceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDEyLCAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MEFceDBCIiwKKyAgICAgICAgICAxOSwKKyAgICAgICAgICAiXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRSIsCisgICAgICAgICAgMjcsCisgICAgICAgICAgIlx4Q0FceEVGXHgxRVx4ODJceDcyXHgxMVx4QjBceDhGXHg3Qlx4RDlceDBGXHgwOFx4QzdceDcyXHg4OFx4QzBceDcwXHhBNFx4QTBceDhCXHgzQVx4OTNceDNBXHg2M1x4RTRceDk3XHhBMCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjNSAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDA3XHgwNlx4MDVceDA0XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICAxMiwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQiIsCisgICAgICAgICAgMjAsCisgICAgICAgICAgIlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUVceDFGIiwKKyAgICAgICAgICAyOCwKKyAgICAgICAgICAiXHgyQVx4RDNceEJBXHhEOVx4NEZceEM1XHgyRVx4OTJceEJFXHg0M1x4OEVceDgyXHg3Q1x4MTBceDIzXHhCOVx4NkFceDhBXHg3N1x4MjVceDhGXHhBMVx4N0JceEE3XHhGM1x4MzFceERCXHgwOSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjNiAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDA4XHgwN1x4MDZceDA1XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICAxMiwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQiIsCisgICAgICAgICAgMjEsCisgICAgICAgICAgIlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUVceDFGXHgyMCIsCisgICAgICAgICAgMjksCisgICAgICAgICAgIlx4RkVceEE1XHg0OFx4MEJceEE1XHgzRlx4QThceEQzXHhDM1x4NDRceDIyXHhBQVx4Q0VceDREXHhFNlx4N0ZceEZBXHgzQlx4QjdceDNCXHhBQlx4QUJceDM2XHhBMVx4RUVceDRGXHhFMFx4RkVceDI4In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICM3ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MDlceDA4XHgwN1x4MDZceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjMsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFIiwKKyAgICAgICAgICAzMywKKyAgICAgICAgICAiXHg1NFx4NTNceDIwXHgyNlx4RTVceDRDXHgxMVx4OUFceDhEXHgzNlx4RDlceEVDXHg2RVx4MUVceEQ5XHg3NFx4MTZceEM4XHg3MFx4OENceDRCXHg1Q1x4MkNceEFDXHhBRlx4QTNceEJDXHhDRlx4N0FceDRFXHhCRlx4OTVceDczIn0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICM4ICovCisgICAgICAgICAgMTYsICJceEMwXHhDMVx4QzJceEMzXHhDNFx4QzVceEM2XHhDN1x4QzhceEM5XHhDQVx4Q0JceENDXHhDRFx4Q0VceENGIiwKKyAgICAgICAgICAxMywgIlx4MDBceDAwXHgwMFx4MEFceDA5XHgwOFx4MDdceEEwXHhBMVx4QTJceEEzXHhBNFx4QTUiLAorICAgICAgICAgIDgsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCisgICAgICAgICAgMjQsCisgICAgICAgICAgIlx4MDhceDA5XHgwQVx4MEJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsCisgICAgICAgICAgMzQsCisgICAgICAgICAgIlx4OEFceEQxXHg5Qlx4MDBceDFBXHg4N1x4RDFceDQ4XHhGNFx4RDlceDJCXHhFRlx4MzRceDUyXHg1Q1x4Q0NceEUzXHhBNlx4M0NceDY1XHgxMlx4QTZceEY1XHg3NVx4NzNceDg4XHhFNFx4OTFceDNFXHhGMVx4NDdceDAxXHhGNFx4NDEifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjgsIC8qIFBhY2tldCBWZWN0b3IgIzkgKi8KKyAgICAgICAgICAxNiwgIlx4QzBceEMxXHhDMlx4QzNceEM0XHhDNVx4QzZceEM3XHhDOFx4QzlceENBXHhDQlx4Q0NceENEXHhDRVx4Q0YiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MDBceDAwXHgwQlx4MEFceDA5XHgwOFx4QTBceEExXHhBMlx4QTNceEE0XHhBNSIsCisgICAgICAgICAgOCwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwKKyAgICAgICAgICAyNSwKKyAgICAgICAgICAiXHgwOFx4MDlceDBBXHgwQlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUVceDFGXHgyMCIsCisgICAgICAgICAgMzUsCisgICAgICAgICAgIlx4NURceEIwXHg4RFx4NjJceDQwXHg3RVx4NkVceDMxXHhENlx4MEZceDlDXHhBMlx4QzZceDA0XHg3NFx4MjFceDlBXHhDMFx4QkVceDUwXHhDMFx4RDRceEE1XHg3N1x4ODdceDk0XHhENlx4RTJceDMwXHhDRFx4MjVceEM5XHhGRVx4QkZceDg3In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxMCAqLworICAgICAgICAgIDE2LCAiXHhDMFx4QzFceEMyXHhDM1x4QzRceEM1XHhDNlx4QzdceEM4XHhDOVx4Q0FceENCXHhDQ1x4Q0RceENFXHhDRiIsCisgICAgICAgICAgMTMsICJceDAwXHgwMFx4MDBceDBDXHgwQlx4MEFceDA5XHhBMFx4QTFceEEyXHhBM1x4QTRceEE1IiwKKyAgICAgICAgICAxMiwgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBBXHgwQiIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4MENceDBEXHgwRVx4MEZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxQVx4MUJceDFDXHgxRFx4MUUiLAorICAgICAgICAgIDI5LAorICAgICAgICAgICJceERCXHgxMVx4OENceENFXHhDMVx4QjhceDc2XHgxQ1x4ODdceDdDXHhEOFx4OTZceDNBXHg2N1x4RDZceEYzXHhCQlx4QkNceDVDXHhEMFx4OTJceDk5XHhFQlx4MTFceEYzXHgxMlx4RjJceDMyXHgzNyJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMTEgKi8KKyAgICAgICAgICAxNiwgIlx4QzBceEMxXHhDMlx4QzNceEM0XHhDNVx4QzZceEM3XHhDOFx4QzlceENBXHhDQlx4Q0NceENEXHhDRVx4Q0YiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MDBceDAwXHgwRFx4MENceDBCXHgwQVx4QTBceEExXHhBMlx4QTNceEE0XHhBNSIsCisgICAgICAgICAgMTIsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEIiLAorICAgICAgICAgIDIwLAorICAgICAgICAgICJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRiIsCisgICAgICAgICAgMzAsCisgICAgICAgICAgIlx4N0NceEM4XHgzRFx4OERceEM0XHg5MVx4MDNceDUyXHg1Qlx4NDhceDNEXHhDNVx4Q0FceDdFXHhBOVx4QUJceDgxXHgyQlx4NzBceDU2XHgwN1x4OURceEFGXHhGQVx4REFceDE2XHhDQ1x4Q0ZceDJDXHg0RSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMTIgKi8KKyAgICAgICAgICAxNiwgIlx4QzBceEMxXHhDMlx4QzNceEM0XHhDNVx4QzZceEM3XHhDOFx4QzlceENBXHhDQlx4Q0NceENEXHhDRVx4Q0YiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MDBceDAwXHgwRVx4MERceDBDXHgwQlx4QTBceEExXHhBMlx4QTNceEE0XHhBNSIsCisgICAgICAgICAgMTIsICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwQVx4MEIiLAorICAgICAgICAgIDIxLAorICAgICAgICAgICJceDBDXHgwRFx4MEVceDBGXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MUFceDFCXHgxQ1x4MURceDFFXHgxRlx4MjAiLAorICAgICAgICAgIDMxLAorICAgICAgICAgICJceDJDXHhEM1x4NUJceDg4XHgyMFx4RDJceDNFXHg3QVx4QTNceDUxXHhCMFx4RTlceDJGXHhDN1x4OTNceDY3XHgyM1x4OEJceDJDXHhDN1x4NDhceENCXHhCOVx4NENceDI5XHg0N1x4NzlceDNEXHg2NFx4QUZceDc1In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxMyAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHhBOVx4NzBceDExXHgwRVx4MTlceDI3XHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICA4LCAiXHg2Qlx4N0ZceDQ2XHg0NVx4MDdceEZBXHhFNFx4OTYiLAorICAgICAgICAgIDIzLAorICAgICAgICAgICJceEM2XHhCNVx4RjNceEU2XHhDQVx4MjNceDExXHhBRVx4RjdceDQ3XHgyQlx4MjBceDNFXHg3M1x4NUVceEE1XHg2MVx4QURceEIxXHg3RFx4NTZceEM1XHhBMyIsCisgICAgICAgICAgMzEsCisgICAgICAgICAgIlx4QTRceDM1XHhEN1x4MjdceDM0XHg4RFx4RERceDIyXHg5MFx4N0ZceDdFXHhCOFx4RjVceEZEXHhCQlx4NERceDkzXHg5RFx4QTZceDUyXHg0RFx4QjRceEY2XHg0NVx4NThceEMwXHgyRFx4MjVceEIxXHgyN1x4RUUifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjgsIC8qIFBhY2tldCBWZWN0b3IgIzE0ICovCisgICAgICAgICAgMTYsICJceEQ3XHg1Q1x4MjdceDc4XHgwN1x4OENceEE5XHgzRFx4OTdceDFGXHg5Nlx4RkRceEU3XHgyMFx4RjRceENEIiwKKyAgICAgICAgICAxMywgIlx4MDBceDgzXHhDRFx4OENceEUwXHhDQlx4NDJceEIxXHg2MFx4QjZceEEzXHgxQ1x4MUMiLAorICAgICAgICAgIDgsICJceDk4XHg2Nlx4MDVceEI0XHgzRFx4RjFceDVEXHhFNyIsCisgICAgICAgICAgMjQsCisgICAgICAgICAgIlx4MDFceEY2XHhDRVx4NjdceDY0XHhDNVx4NzRceDQ4XHgzQlx4QjBceDJFXHg2Qlx4QkZceDFFXHgwQVx4QkRceDI2XHhBMlx4MjVceDcyXHhCNFx4RDhceDBFXHhFNyIsCisgICAgICAgICAgMzIsCisgICAgICAgICAgIlx4OEFceEUwXHg1Mlx4NTBceDhGXHhCRVx4Q0FceDkzXHgyRVx4MzRceDZGXHgwNVx4RTBceERDXHgwRFx4RkJceENGXHg5M1x4OUVceEFGXHhGQVx4M0VceDU4XHg3Q1x4ODZceDdEXHg2RVx4MUNceDQ4XHg3MFx4MzhceDA2In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxNSAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHg1Rlx4NTRceDk1XHgwQlx4MThceEYyXHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICA4LCAiXHg0OFx4RjJceEU3XHhFMVx4QTdceDY3XHgxQVx4NTEiLAorICAgICAgICAgIDI1LAorICAgICAgICAgICJceENEXHhGMVx4RDhceDQwXHg2Rlx4QzJceEU5XHgwMVx4NDlceDUzXHg4OVx4NzBceDA1XHhGQlx4RkJceDhCXHhBNVx4NzJceDc2XHhGOVx4MjRceDA0XHg2MFx4OEVceDA4IiwKKyAgICAgICAgICAzMywKKyAgICAgICAgICAiXHgwOFx4QjZceDdFXHhFMlx4MUNceDhCXHhGMlx4NkVceDQ3XHgzRVx4NDBceDg1XHg5OVx4RTlceEMwXHg4M1x4NkRceDZBXHhGMFx4QkJceDE4XHhERlx4NTVceDQ2XHg2Q1x4QThceDA4XHg3OFx4QTdceDkwXHg0N1x4NkRceEU1In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxNiAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHhFQ1x4NjBceDA4XHg2M1x4MzFceDlBXHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICAxMiwgIlx4REVceDk3XHhERlx4M0JceDhDXHhCRFx4NkRceDhFXHg1MFx4MzBceERBXHg0QyIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4QjBceDA1XHhEQ1x4RkFceDBCXHg1OVx4MThceDE0XHgyNlx4QTlceDYxXHg2OFx4NUFceDk5XHgzRFx4OENceDQzXHgxOFx4NUIiLAorICAgICAgICAgIDI3LAorICAgICAgICAgICJceDYzXHhCN1x4OEJceDQ5XHg2N1x4QjFceDlFXHhEQlx4QjdceDMzXHhDRFx4MTFceDE0XHhGNlx4NEVceEIyXHgyNlx4MDhceDkzXHg2OFx4QzNceDU0XHg4Mlx4OERceDk1XHgwQ1x4QzUifSwKKyAgICAgIHsgR0NSWV9DSVBIRVJfQ0FNRUxMSUExMjgsIC8qIFBhY2tldCBWZWN0b3IgIzE3ICovCisgICAgICAgICAgMTYsICJceEQ3XHg1Q1x4MjdceDc4XHgwN1x4OENceEE5XHgzRFx4OTdceDFGXHg5Nlx4RkRceEU3XHgyMFx4RjRceENEIiwKKyAgICAgICAgICAxMywgIlx4MDBceDYwXHhDRlx4RjFceEEzXHgxRVx4QTFceEIxXHg2MFx4QjZceEEzXHgxQ1x4MUMiLAorICAgICAgICAgIDEyLCAiXHhBNVx4RUVceDkzXHhFNFx4NTdceERGXHgwNVx4NDZceDZFXHg3OFx4MkRceENGIiwKKyAgICAgICAgICAyMCwKKyAgICAgICAgICAiXHgyRVx4MjBceDIxXHgxMlx4OThceDEwXHg1Rlx4MTJceDlEXHg1RVx4RDlceDVCXHg5M1x4RjdceDJEXHgzMFx4QjJceEZBXHhDQ1x4RDciLAorICAgICAgICAgIDI4LAorICAgICAgICAgICJceDBCXHhDNlx4QkJceEUyXHhBOFx4QjlceDA5XHhGNFx4NjJceDlFXHhFNlx4RENceDE0XHg4RFx4QTRceDQ0XHgxMFx4RTFceDhBXHhGNFx4MzFceDQ3XHgzOFx4MzJceDc2XHhGNlx4NkFceDlGIn0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxOCAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHgwRlx4ODVceENEXHg5OVx4NUNceDk3XHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICAxMiwgIlx4MjRceEFBXHgxQlx4RjlceEE1XHhDRFx4ODdceDYxXHg4Mlx4QTJceDUwXHg3NCIsCisgICAgICAgICAgMjEsCisgICAgICAgICAgIlx4MjZceDQ1XHg5NFx4MUVceDc1XHg2M1x4MkRceDM0XHg5MVx4QUZceDBGXHhDMFx4QzlceDg3XHg2Q1x4M0JceEU0XHhBQVx4NzRceDY4XHhDOSIsCisgICAgICAgICAgMjksCisgICAgICAgICAgIlx4MjJceDJBXHhENlx4MzJceEZBXHgzMVx4RDZceEFGXHg5N1x4MENceDM0XHg1Rlx4N0VceDc3XHhDQVx4M0JceEQwXHhEQ1x4MjVceEIzXHg0MFx4QTFceEEzXHhEM1x4MUZceDhEXHg0Qlx4NDRceEI3In0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMxOSAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHhDMlx4OUJceDJDXHhBQVx4QzRceENEXHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICA4LCAiXHg2OVx4MTlceDQ2XHhCOVx4Q0FceDA3XHhCRVx4ODciLAorICAgICAgICAgIDIzLAorICAgICAgICAgICJceDA3XHgwMVx4MzVceEE2XHg0M1x4N0NceDlEXHhCMVx4MjBceENEXHg2MVx4RDhceEY2XHhDM1x4OUNceDNFXHhBMVx4MjVceEZEXHg5NVx4QTBceEQyXHgzRCIsCisgICAgICAgICAgMzMsCisgICAgICAgICAgIlx4MDVceEI4XHhFMVx4QjlceEM0XHg5Q1x4RkRceDU2XHhDRlx4MTNceDBBXHhBNlx4MjVceDFEXHhDMlx4RUNceEMwXHg2Q1x4Q0NceDUwXHg4Rlx4RTZceDk3XHhBMFx4MDZceDZEXHg1N1x4QzhceDRCXHhFQ1x4MThceDI3XHg2OCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMjAgKi8KKyAgICAgICAgICAxNiwgIlx4RDdceDVDXHgyN1x4NzhceDA3XHg4Q1x4QTlceDNEXHg5N1x4MUZceDk2XHhGRFx4RTdceDIwXHhGNFx4Q0QiLAorICAgICAgICAgIDEzLCAiXHgwMFx4MkNceDZCXHg3NVx4OTVceEVFXHg2Mlx4QjFceDYwXHhCNlx4QTNceDFDXHgxQyIsCisgICAgICAgICAgOCwgIlx4RDBceEM1XHg0RVx4Q0JceDg0XHg2Mlx4N0RceEM0IiwKKyAgICAgICAgICAyNCwKKyAgICAgICAgICAiXHhDOFx4QzBceDg4XHgwRVx4NkNceDYzXHg2RVx4MjBceDA5XHgzRFx4RDZceDU5XHg0Mlx4MTdceEQyXHhFMVx4ODhceDc3XHhEQlx4MjZceDRFXHg3MVx4QTVceENDIiwKKyAgICAgICAgICAzNCwKKyAgICAgICAgICAiXHg1NFx4Q0VceEI5XHg2OFx4REVceEUyXHgzNlx4MTFceDU3XHg1RVx4QzBceDAzXHhERlx4QUFceDFDXHhENFx4ODhceDQ5XHhCRFx4RjVceEFFXHgyRVx4REJceDZCXHg3Rlx4QTdceDc1XHhCMVx4NTBceEVEXHg0M1x4ODNceEM1XHhBOSJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMjEgKi8KKyAgICAgICAgICAxNiwgIlx4RDdceDVDXHgyN1x4NzhceDA3XHg4Q1x4QTlceDNEXHg5N1x4MUZceDk2XHhGRFx4RTdceDIwXHhGNFx4Q0QiLAorICAgICAgICAgIDEzLCAiXHgwMFx4QzVceDNDXHhENFx4QzJceEFBXHgyNFx4QjFceDYwXHhCNlx4QTNceDFDXHgxQyIsCisgICAgICAgICAgOCwgIlx4RTJceDg1XHhFMFx4RTRceDgwXHg4Q1x4REFceDNEIiwKKyAgICAgICAgICAyNSwKKyAgICAgICAgICAiXHhGN1x4NURceEFBXHgwN1x4MTBceEM0XHhFNlx4NDJceDk3XHg3OVx4NERceEMyXHhCN1x4RDJceEEyXHgwN1x4NTdceEIxXHhBQVx4NEVceDQ0XHg4MFx4MDJceEZGXHhBQiIsCisgICAgICAgICAgMzUsCisgICAgICAgICAgIlx4QjFceDQwXHg0NVx4NDZceEJGXHg2Nlx4NzJceDEwXHhDQVx4MjhceEUzXHgwOVx4QjNceDlCXHhENlx4Q0FceDdFXHg5Rlx4QzhceDI4XHg1Rlx4RTZceDk4XHhENFx4M0NceEQyXHgwQVx4MDJceEUwXHhCRFx4Q0FceEVEXHgyMFx4MTBceEQzIn0sCisgICAgICB7IEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LCAvKiBQYWNrZXQgVmVjdG9yICMyMiAqLworICAgICAgICAgIDE2LCAiXHhEN1x4NUNceDI3XHg3OFx4MDdceDhDXHhBOVx4M0RceDk3XHgxRlx4OTZceEZEXHhFN1x4MjBceEY0XHhDRCIsCisgICAgICAgICAgMTMsICJceDAwXHhCRVx4RTlceDI2XHg3Rlx4QkFceERDXHhCMVx4NjBceEI2XHhBM1x4MUNceDFDIiwKKyAgICAgICAgICAxMiwgIlx4NkNceEFFXHhGOVx4OTRceDExXHg0MVx4NTdceDBEXHg3Q1x4ODFceDM0XHgwNSIsCisgICAgICAgICAgMTksCisgICAgICAgICAgIlx4QzJceDM4XHg4Mlx4MkZceEFDXHg1Rlx4OThceEZGXHg5Mlx4OTRceDA1XHhCMFx4QURceDEyXHg3QVx4NEVceDQxXHg4NVx4NEUiLAorICAgICAgICAgIDI5LAorICAgICAgICAgICJceDk0XHhDOFx4OTVceDlDXHgxMVx4NTZceDlBXHgyOVx4NzhceDMxXHhBN1x4MjFceDAwXHg1OFx4NTdceEFCXHg2MVx4QjhceDdBXHgyRFx4RUFceDA5XHgzNlx4QjZceEVCXHg1Rlx4NjJceDVGXHg1RCJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMjMgKi8KKyAgICAgICAgICAxNiwgIlx4RDdceDVDXHgyN1x4NzhceDA3XHg4Q1x4QTlceDNEXHg5N1x4MUZceDk2XHhGRFx4RTdceDIwXHhGNFx4Q0QiLAorICAgICAgICAgIDEzLCAiXHgwMFx4REZceEE4XHhCMVx4MjRceDUwXHgwN1x4QjFceDYwXHhCNlx4QTNceDFDXHgxQyIsCisgICAgICAgICAgMTIsICJceDM2XHhBNVx4MkNceEYxXHg2Qlx4MTlceEEyXHgwM1x4N0FceEI3XHgwMVx4MUUiLAorICAgICAgICAgIDIwLAorICAgICAgICAgICJceDREXHhCRlx4M0VceDc3XHg0QVx4RDJceDQ1XHhFNVx4RDVceDg5XHgxRlx4OURceDFDXHgzMlx4QTBceEFFXHgwMlx4MkNceDg1XHhENyIsCisgICAgICAgICAgMzAsCisgICAgICAgICAgIlx4NThceDY5XHhFM1x4QUFceEQyXHg0NFx4N0NceDc0XHhFMFx4RkNceDA1XHhGOVx4QTRceEVBXHg3NFx4NTdceDdGXHg0RFx4RThceENBXHg4OVx4MjRceDc2XHg0Mlx4OTZceEFEXHgwNFx4MTFceDlDXHhFNyJ9LAorICAgICAgeyBHQ1JZX0NJUEhFUl9DQU1FTExJQTEyOCwgLyogUGFja2V0IFZlY3RvciAjMjQgKi8KKyAgICAgICAgICAxNiwgIlx4RDdceDVDXHgyN1x4NzhceDA3XHg4Q1x4QTlceDNEXHg5N1x4MUZceDk2XHhGRFx4RTdceDIwXHhGNFx4Q0QiLAorICAgICAgICAgIDEzLCAiXHgwMFx4M0JceDhGXHhEOFx4RDNceEE5XHgzN1x4QjFceDYwXHhCNlx4QTNceDFDXHgxQyIsCisgICAgICAgICAgMTIsICJceEE0XHhENFx4OTlceEY3XHg4NFx4MTlceDcyXHg4Q1x4MTlceDE3XHg4Qlx4MEMiLAorICAgICAgICAgIDIxLAorICAgICAgICAgICJceDlEXHhDOVx4RURceEFFXHgyRlx4RjVceERGXHg4Nlx4MzZceEU4XHhDNlx4REVceDBFXHhFRFx4NTVceEY3XHg4Nlx4N0VceDMzXHgzM1x4N0QiLAorICAgICAgICAgIDMxLAorICAgICAgICAgICJceDRCXHgxOVx4ODFceDU2XHgzOVx4M0JceDBGXHg3N1x4OTZceDA4XHg2QVx4QUZceEI0XHg1NFx4RjhceEMzXHhGMFx4MzRceENDXHhBOVx4NjZceDk0XHg1Rlx4MUZceENFXHhBN1x4RTFceDFCXHhFRVx4NkFceDJGIn0KKyAgICB9OworICBzdGF0aWMgY29uc3QgaW50IGN1dFtdID0geyAwLCAxLCA4LCAxMCwgMTYsIDE5LCAtMSB9OworICBnY3J5X2NpcGhlcl9oZF90IGhkZSwgaGRkOworICB1bnNpZ25lZCBjaGFyIG91dFtNQVhfREFUQV9MRU5dOworICB1NjQgY3RsX3BhcmFtc1szXTsKKyAgaW50IHNwbGl0LCBhYWRzcGxpdDsKKyAgc2l6ZV90IGosIGksIGtleWxlbiwgYmxrbGVuLCBhdXRobGVuOworICBnY3J5X2Vycm9yX3QgZXJyID0gMDsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFN0YXJ0aW5nIENDTSBjaGVja3MuXG4iKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh0dikgLyBzaXplb2YgKHR2WzBdKTsgaSsrKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgY2hlY2tpbmcgQ0NNIG1vZGUgZm9yICVzIFslaV1cbiIsCisgICAgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAodHZbaV0uYWxnbyksCisgICAgICAgICAgICAgICAgIHR2W2ldLmFsZ28pOworCisgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mIChjdXQpIC8gc2l6ZW9mIChjdXRbMF0pOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBzcGxpdCA9IGN1dFtqXSA8IDAgPyB0dltpXS5wbGFpbmxlbiA6IGN1dFtqXTsKKyAgICAgICAgICBpZiAodHZbaV0ucGxhaW5sZW4gPCBzcGxpdCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZSwgdHZbaV0uYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9DQ00sIDApOworICAgICAgICAgIGlmICghZXJyKQorICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZCwgdHZbaV0uYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9DQ00sIDApOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGtleWxlbiA9IGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbih0dltpXS5hbGdvKTsKKyAgICAgICAgICBpZiAoIWtleWxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20sIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCBrZXlsZW4pOworICAgICAgICAgIGlmICghZXJyKQorICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGQsIHR2W2ldLmtleSwga2V5bGVuKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiY2lwaGVyLWNjbSwgZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgYmxrbGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKHR2W2ldLmFsZ28pOworICAgICAgICAgIGlmICghYmxrbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiY2lwaGVyLWNjbSwgZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGUsIHR2W2ldLm5vbmNlLCB0dltpXS5ub25jZWxlbik7CisgICAgICAgICAgaWYgKCFlcnIpCisgICAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRkLCB0dltpXS5ub25jZSwgdHZbaV0ubm9uY2VsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGF1dGhsZW4gPSB0dltpXS5jaXBoZXJsZW4gLSB0dltpXS5wbGFpbmxlbjsKKyAgICAgICAgICBjdGxfcGFyYW1zWzBdID0gdHZbaV0ucGxhaW5sZW47IC8qIGVuY3J5cHRlZGxlbiAqLworICAgICAgICAgIGN0bF9wYXJhbXNbMV0gPSB0dltpXS5hYWRsZW47IC8qIGFhZGxlbiAqLworICAgICAgICAgIGN0bF9wYXJhbXNbMl0gPSBhdXRobGVuOyAvKiBhdXRodGFnbGVuICovCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfY3RsIChoZGUsIEdDUllDVExfU0VUX0NDTV9MRU5HVEhTLCBjdGxfcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bF9wYXJhbXMpKTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2N0bCAoaGRkLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgY3RsX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bF9wYXJhbXMpKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiY2lwaGVyLWNjbSwgZ2NyeV9jaXBoZXJfY3RsIEdDUllDVExfU0VUX0NDTV9MRU5HVEhTICIKKyAgICAgICAgICAgICAgICAgICAgImZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgYWFkc3BsaXQgPSBzcGxpdCA+IHR2W2ldLmFhZGxlbiA/IDAgOiBzcGxpdDsKKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoaGRlLCB0dltpXS5hYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dltpXS5hYWRsZW4gLSBhYWRzcGxpdCk7CisgICAgICAgICAgaWYgKCFlcnIpCisgICAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGhkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR2W2ldLmFhZFt0dltpXS5hYWRsZW4gLSBhYWRzcGxpdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhZHNwbGl0KTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoaGRkLCB0dltpXS5hYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W2ldLmFhZGxlbiAtIGFhZHNwbGl0KTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoaGRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHZbaV0uYWFkW3R2W2ldLmFhZGxlbiAtIGFhZHNwbGl0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFkc3BsaXQpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLCBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0LCBNQVhfREFUQV9MRU4sIHR2W2ldLnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dltpXS5wbGFpbmxlbiAtIHNwbGl0KTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgJm91dFt0dltpXS5wbGFpbmxlbiAtIHNwbGl0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9EQVRBX0xFTiAtICh0dltpXS5wbGFpbmxlbiAtIHNwbGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0dltpXS5wbGFpbnRleHRbdHZbaV0ucGxhaW5sZW4gLSBzcGxpdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20sIGdjcnlfY2lwaGVyX2VuY3J5cHQgKCVkOiVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2dldHRhZyAoaGRlLCAmb3V0W3R2W2ldLnBsYWlubGVuXSwgYXV0aGxlbik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20sIGdjcnlfY2lwaGVyX2dldHRhZyAoJWQ6JWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG1lbWNtcCAodHZbaV0uY2lwaGVydGV4dCwgb3V0LCB0dltpXS5jaXBoZXJsZW4pKQorICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20sIGVuY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQ6JWRcbiIsIGksIGopOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGRkLCBvdXQsIHR2W2ldLnBsYWlubGVuIC0gc3BsaXQsIE5VTEwsIDApOworICAgICAgICAgIGlmICghZXJyKQorICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGRkLCAmb3V0W3R2W2ldLnBsYWlubGVuIC0gc3BsaXRdLCBzcGxpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLCBnY3J5X2NpcGhlcl9kZWNyeXB0ICglZDolZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobWVtY21wICh0dltpXS5wbGFpbnRleHQsIG91dCwgdHZbaV0ucGxhaW5sZW4pKQorICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20sIGRlY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQ6JWRcbiIsIGksIGopOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfY2hlY2t0YWcgKGhkZCwgJm91dFt0dltpXS5wbGFpbmxlbl0sIGF1dGhsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLCBnY3J5X2NpcGhlcl9jaGVja3RhZyAoJWQ6JWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRkKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogTGFyZ2UgYnVmZmVyIHRlc3RzLiAgKi8KKworICAvKiBUZXN0IGVuY29kaW5nIG9mIGFhZGxlbiA+IDB4ZmVmZi4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrZXlbXT17MHg0MCwweDQxLDB4NDIsMHg0MywweDQ0LDB4NDUsMHg0NiwweDQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ4LDB4NDksMHg0YSwweDRiLDB4NGMsMHg0ZCwweDRlLDB4NGZ9OworICAgIHN0YXRpYyBjb25zdCBjaGFyIGl2W109ezB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTl9OworICAgIHN0YXRpYyBjb25zdCBjaGFyIHRhZ1tdPXsweDlDLDB4NzYsMHhFNywweDMzLDB4RDUsMHgxNSwweEIzLDB4NkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkEsMHg3NiwweDk1LDB4RjcsMHhGQiwweDkxfTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBzaXplX3QgZW5jbGVuID0gMHgyMDAwMDsKKyAgICBzaXplX3QgYWFkbGVuID0gMHgyMDAwMDsKKyAgICBzaXplX3QgdGFnbGVuID0gc2l6ZW9mKHRhZyk7CisKKyAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCBHQ1JZX0NJUEhFUl9BRVMsIEdDUllfQ0lQSEVSX01PREVfQ0NNLCAwKTsKKyAgICBpZiAoZXJyKQorICAgICAgeworICAgICAgICBmYWlsICgiY2lwaGVyLWNjbS1sYXJnZSwgZ2NyeV9jaXBoZXJfb3BlbiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwga2V5LCBzaXplb2YgKGtleSkpOworICAgIGlmIChlcnIpCisgICAgICB7CisgICAgICAgICBmYWlsICgiY2lwaGVyLWNjbS1sYXJnZSwgZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRlLCBpdiwgc2l6ZW9mIChpdikpOworICAgIGlmIChlcnIpCisgICAgICB7CisgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLWxhcmdlLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgY3RsX3BhcmFtc1swXSA9IGVuY2xlbjsgLyogZW5jcnlwdGVkbGVuICovCisgICAgY3RsX3BhcmFtc1sxXSA9IGFhZGxlbjsgLyogYWFkbGVuICovCisgICAgY3RsX3BhcmFtc1syXSA9IHRhZ2xlbjsgLyogYXV0aHRhZ2xlbiAqLworICAgIGVyciA9IGdjcnlfY2lwaGVyX2N0bCAoaGRlLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgY3RsX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGxfcGFyYW1zKSk7CisgICAgaWYgKGVycikKKyAgICAgIHsKKyAgICAgICAgZmFpbCAoImNpcGhlci1jY20tbGFyZ2UsIGdjcnlfY2lwaGVyX2N0bCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUyAiCisgICAgICAgICAgICAgICJmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgbWVtc2V0IChidWYsIDB4YWEsIHNpemVvZihidWYpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhYWRsZW47IGkgKz0gc2l6ZW9mKGJ1ZikpCisgICAgICB7CisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSAoaGRlLCBidWYsIHNpemVvZiAoYnVmKSk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgeworICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20tbGFyZ2UsIGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGVuY2xlbjsgaSArPSBzaXplb2YoYnVmKSkKKyAgICAgIHsKKyAgICAgICAgbWVtc2V0IChidWYsIDB4ZWUsIHNpemVvZihidWYpKTsKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBidWYsIHNpemVvZiAoYnVmKSwgTlVMTCwgMCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgeworICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20tbGFyZ2UsIGdjcnlfY2lwaGVyX2VuY3J5cHQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgIGVyciA9IGdjcnlfY2lwaGVyX2dldHRhZyAoaGRlLCBidWYsIHRhZ2xlbik7CisgICAgaWYgKGVycikKKyAgICAgIHsKKyAgICAgICAgZmFpbCAoImNpcGhlci1jY20tbGFyZ2UsIGdjcnlfY2lwaGVyX2dldHRhZyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgaWYgKG1lbWNtcCAoYnVmLCB0YWcsIHRhZ2xlbikgIT0gMCkKKyAgICAgIGZhaWwgKCJjaXBoZXItY2NtLWxhcmdlLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5XG4iKTsKKworICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICB9CisKKyNpZiAwCisgIC8qIFRlc3QgZW5jb2Rpbmcgb2YgYWFkbGVuID4gMHhmZmZmZmZmZi4gICovCisgIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrZXlbXT17MHg0MCwweDQxLDB4NDIsMHg0MywweDQ0LDB4NDUsMHg0NiwweDQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ4LDB4NDksMHg0YSwweDRiLDB4NGMsMHg0ZCwweDRlLDB4NGZ9OworICAgIHN0YXRpYyBjb25zdCBjaGFyIGl2W109ezB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTl9OworICAgIHN0YXRpYyBjb25zdCBjaGFyIHRhZ1tdPXsweDAxLDB4QjIsMHhDMywweDRBLDB4QTYsMHg2QSwweDA3LDB4NkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkMsMHhCRCwweEVBLDB4MTcsMHhEMywweDczLDB4RDcsMHhENH07CisgICAgY2hhciBidWZbMTAyNF07CisgICAgc2l6ZV90IGVuY2xlbiA9IChzaXplX3QpMHhmZmZmZmZmZiArIDEgKyAxMDI0OworICAgIHNpemVfdCBhYWRsZW4gPSAoc2l6ZV90KTB4ZmZmZmZmZmYgKyAxICsgMTAyNDsKKyAgICBzaXplX3QgdGFnbGVuID0gc2l6ZW9mKHRhZyk7CisKKyAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCBHQ1JZX0NJUEhFUl9BRVMsIEdDUllfQ0lQSEVSX01PREVfQ0NNLCAwKTsKKyAgICBpZiAoZXJyKQorICAgICAgeworICAgICAgICBmYWlsICgiY2lwaGVyLWNjbS1odWdlLCBnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRlLCBrZXksIHNpemVvZiAoa2V5KSk7CisgICAgaWYgKGVycikKKyAgICAgIHsKKyAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLWh1Z2UsIGdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZSwgaXYsIHNpemVvZiAoaXYpKTsKKyAgICBpZiAoZXJyKQorICAgICAgeworICAgICAgICBmYWlsICgiY2lwaGVyLWNjbS1odWdlLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgY3RsX3BhcmFtc1swXSA9IGVuY2xlbjsgLyogZW5jcnlwdGVkbGVuICovCisgICAgY3RsX3BhcmFtc1sxXSA9IGFhZGxlbjsgLyogYWFkbGVuICovCisgICAgY3RsX3BhcmFtc1syXSA9IHRhZ2xlbjsgLyogYXV0aHRhZ2xlbiAqLworICAgIGVyciA9IGdjcnlfY2lwaGVyX2N0bCAoaGRlLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgY3RsX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGxfcGFyYW1zKSk7CisgICAgaWYgKGVycikKKyAgICAgIHsKKyAgICAgICAgZmFpbCAoImNpcGhlci1jY20taHVnZSwgZ2NyeV9jaXBoZXJfY3RsIEdDUllDVExfU0VUX0NDTV9MRU5HVEhTIGZhaWxlZDoiCisgICAgICAgICAgICAgICIlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgIG1lbXNldCAoYnVmLCAweGFhLCBzaXplb2YoYnVmKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYWFkbGVuOyBpICs9IHNpemVvZihidWYpKQorICAgICAgeworICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGhkZSwgYnVmLCBzaXplb2YgKGJ1ZikpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZhaWwgKCJjaXBoZXItY2NtLWh1Z2UsIGdjcnlfY2lwaGVyX2F1dGhlbnRpY2F0ZSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGVuY2xlbjsgaSArPSBzaXplb2YoYnVmKSkKKyAgICAgIHsKKyAgICAgICAgbWVtc2V0IChidWYsIDB4ZWUsIHNpemVvZihidWYpKTsKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBidWYsIHNpemVvZiAoYnVmKSwgTlVMTCwgMCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgeworICAgICAgICAgICAgZmFpbCAoImNpcGhlci1jY20taHVnZSwgZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgZXJyID0gZ2NyeV9jaXBoZXJfZ2V0dGFnIChoZGUsIGJ1ZiwgdGFnbGVuKTsKKyAgICBpZiAoZXJyKQorICAgICAgeworICAgICAgICBmYWlsICgiY2lwaGVyLWNjbS1odWdlLCBnY3J5X2NpcGhlcl9nZXR0YWcgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgIGlmIChtZW1jbXAgKGJ1ZiwgdGFnLCB0YWdsZW4pICE9IDApCisgICAgICBmYWlsICgiY2lwaGVyLWNjbS1odWdlLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5XG4iKTsKKworICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOworICB9CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgQ0NNIGNoZWNrcy5cbiIpOworI2VuZGlmCisjZW5kaWYgLypIQVZFX1U2NF9UWVBFREVGKi8KK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfc3RyZWFtX2NpcGhlciAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dgorICB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgYWxnbzsKKyAgICBpbnQga2V5bGVuOworICAgIGludCBpdmxlbjsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgY29uc3QgY2hhciAqaXY7CisgICAgc3RydWN0IGRhdGEKKyAgICB7CisgICAgICBpbnQgaW5sZW47CisgICAgICBjb25zdCBjaGFyICpwbGFpbnRleHQ7CisgICAgICBjb25zdCBjaGFyICpvdXQ7CisgICAgfSBkYXRhW01BWF9EQVRBX0xFTl07CisgIH0gdHZbXSA9IHsKKyNpZmRlZiBVU0VfU0FMU0EyMAorICAgIHsKKyAgICAgICJTYWxzYTIwIDEyOCBiaXQsIHRlc3QgMSIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwLCAxNiwgOCwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceDREXHhGQVx4NUVceDQ4XHgxRFx4QTJceDNFXHhBMCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAgMTI4IGJpdCwgdGVzdCAyIiwKKyAgICAgIEdDUllfQ0lQSEVSX1NBTFNBMjAsIDE2LCA4LAorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgIlx4ODBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgIHsKKyAgICAgICAgeyA4LAorICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4QjZceDZDXHgxRVx4NDRceDQ2XHhERFx4OTVceDU3IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMCAxMjggYml0LCB0ZXN0IDMiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCwgMTYsIDgsCisgICAgICAiXHgwMFx4NTNceEE2XHhGOVx4NENceDlGXHhGMlx4NDVceDk4XHhFQlx4M0VceDkxXHhFNFx4MzdceDhBXHhERCIsCisgICAgICAiXHgwRFx4NzRceERCXHg0Mlx4QTlceDEwXHg3N1x4REUiLAorICAgICAgeworICAgICAgICB7IDgsCisgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAiXHgwNVx4RTFceEU3XHhCRVx4QjZceDk3XHhEOVx4OTkiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJTYWxzYTIwIDI1NiBiaXQsIHRlc3QgMSIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwLCAzMiwgOCwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgIHsKKyAgICAgICAgeyA4LAorICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4RTNceEJFXHg4Rlx4RERceDhCXHhFQ1x4QTJceEUzIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMCAyNTYgYml0LCB0ZXN0IDIiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCwgMzIsIDgsCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceDJBXHhCQVx4M0RceEM0XHg1Qlx4NDlceDQ3XHgwMCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAgMjU2IGJpdCwgZWNyeXB0IHZlcmlmaWVkLCBzZXQgNiwgdmVjdG9yIDAiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCwgMzIsIDgsCisgICAgICAiXHgwMFx4NTNceEE2XHhGOVx4NENceDlGXHhGMlx4NDVceDk4XHhFQlx4M0VceDkxXHhFNFx4MzdceDhBXHhERCIKKyAgICAgICJceDMwXHg4M1x4RDZceDI5XHg3Q1x4Q0ZceDIyXHg3NVx4QzhceDFCXHg2RVx4QzFceDE0XHg2N1x4QkFceDBEIiwKKyAgICAgICJceDBEXHg3NFx4REJceDQyXHhBOVx4MTBceDc3XHhERSIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceEY1XHhGQVx4RDVceDNGXHg3OVx4RjlceERGXHg1OCIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4RjVceEZBXHhENVx4M0ZceDc5XHhGOVx4REZceDU4XHhDNFx4QUVceEEwXHhEMFx4RURceDlBXHg5Nlx4MDEiCisgICAgICAgICAgIlx4RjJceDc4XHgxMVx4MkNceEE3XHgxOFx4MERceDU2XHg1Qlx4NDJceDBBXHg0OFx4MDFceDk2XHg3MFx4RUEiCisgICAgICAgICAgIlx4RjJceDRDXHhFNFx4OTNceEE4XHg2Mlx4NjNceEY2XHg3N1x4QjRceDZBXHhDRVx4MTlceDI0XHg3N1x4M0QiCisgICAgICAgICAgIlx4MkJceEIyXHg1NVx4NzFceEUxXHhBQVx4ODVceDkzXHg3NVx4OEZceEMzXHg4Mlx4QjFceDI4XHgwQlx4NzEiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJTYWxzYTIwLzEyIDEyOCBiaXQsIHRlc3QgMSIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwUjEyLCAxNiwgOCwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceEZDXHgyMFx4N0RceEJGXHhDN1x4NkNceDVFXHgxNyIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAvMTIgMTI4IGJpdCwgdGVzdCAyIiwKKyAgICAgIEdDUllfQ0lQSEVSX1NBTFNBMjBSMTIsIDE2LCA4LAorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgIlx4ODBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgIHsKKyAgICAgICAgeyA4LAorICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4MDhceDI4XHgzOVx4OUFceDZGXHhFRlx4MjBceERBIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMC8xMiAxMjggYml0LCB0ZXN0IDMiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwgMTYsIDgsCisgICAgICAiXHgwMFx4NTNceEE2XHhGOVx4NENceDlGXHhGMlx4NDVceDk4XHhFQlx4M0VceDkxXHhFNFx4MzdceDhBXHhERCIsCisgICAgICAiXHgwRFx4NzRceERCXHg0Mlx4QTlceDEwXHg3N1x4REUiLAorICAgICAgeworICAgICAgICB7IDgsCisgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAiXHhBRFx4OUVceDYwXHhFNlx4RDJceEEyXHg2NFx4QjgiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJTYWxzYTIwLzEyIDI1NiBiaXQsIHRlc3QgMSIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwUjEyLCAzMiwgOCwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgIHsKKyAgICAgICAgeyA4LAorICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4QUZceEU0XHgxMVx4RURceDFDXHg0RVx4MDdceEU0IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMC8xMiAyNTYgYml0LCB0ZXN0IDIiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwgMzIsIDgsCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICJceDgwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceDE3XHgyQ1x4NTFceDkyXHhDQlx4NkVceDY0XHg1QiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAvMTIgMjU2IGJpdCwgZWNyeXB0IHZlcmlmaWVkLCBzZXQgNiwgdmVjdG9yIDAiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwgMzIsIDgsCisgICAgICAiXHgwMFx4NTNceEE2XHhGOVx4NENceDlGXHhGMlx4NDVceDk4XHhFQlx4M0VceDkxXHhFNFx4MzdceDhBXHhERCIKKyAgICAgICJceDMwXHg4M1x4RDZceDI5XHg3Q1x4Q0ZceDIyXHg3NVx4QzhceDFCXHg2RVx4QzFceDE0XHg2N1x4QkFceDBEIiwKKyAgICAgICJceDBEXHg3NFx4REJceDQyXHhBOVx4MTBceDc3XHhERSIsCisgICAgICB7CisgICAgICAgIHsgOCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICJceDUyXHhFMlx4MENceEY4XHg3N1x4NUFceEU4XHg4MiIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NCwKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgIlx4NTJceEUyXHgwQ1x4RjhceDc3XHg1QVx4RThceDgyXHhGMlx4MDBceEMyXHg5OVx4OUZceEU0XHhCQVx4MzEiCisgICAgICAgICAgIlx4QTdceEExXHg4Rlx4MURceDVDXHg5N1x4MTZceDE5XHgxRFx4MTJceDMxXHg3NVx4RTFceDQ3XHhCRFx4NEUiCisgICAgICAgICAgIlx4OENceEE2XHhFRFx4MTZceDZDXHhFMFx4RkNceDhFXHg2NVx4QTVceENBXHg2MFx4ODRceDIwXHhGQ1x4NjUiCisgICAgICAgICAgIlx4NDRceEM5XHg3MFx4MEFceDBGXHgyMVx4MzhceEU4XHhDMVx4QTJceDg2XHhGQlx4OENceDFGXHhCRlx4QTAiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLypVU0VfU0FMU0EyMCovCisgIH07CisKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZGUsIGhkZDsKKyAgdW5zaWduZWQgY2hhciBvdXRbTUFYX0RBVEFfTEVOXTsKKyAgaW50IGksIGo7CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBTdGFydGluZyBzdHJlYW0gY2lwaGVyIGNoZWNrcy5cbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHR2KSAvIHNpemVvZiAodHZbMF0pOyBpKyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBzdHJlYW0gbW9kZSBmb3IgJXMgWyVpXSAoJXMpXG4iLAorCQkgZ2NyeV9jaXBoZXJfYWxnb19uYW1lICh0dltpXS5hbGdvKSwgdHZbaV0uYWxnbywgdHZbaV0ubmFtZSk7CisKKyAgICAgIGlmIChnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4odHZbaV0uYWxnbykgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJzdHJlYW0sIGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbjogYmFkIGJsb2NrIGxlbmd0aFxuIik7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkZSwgdHZbaV0uYWxnbywgR0NSWV9DSVBIRVJfTU9ERV9TVFJFQU0sIDApOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZGQsIHR2W2ldLmFsZ28sIEdDUllfQ0lQSEVSX01PREVfU1RSRUFNLCAwKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9vcGVuIGZvciBzdHJlYW0gbW9kZSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgLyogTm93IGxvb3Agb3ZlciBhbGwgdGhlIGRhdGEgc2FtcGxlcy4gICovCisgICAgICBmb3IgKGogPSAwOyB0dltpXS5kYXRhW2pdLmlubGVuOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCB0dltpXS5rZXlsZW4pOworICAgICAgICAgIGlmICghZXJyKQorICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGQsIHR2W2ldLmtleSwgdHZbaV0ua2V5bGVuKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZSwgdHZbaV0uaXYsIHR2W2ldLml2bGVuKTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGQsIHR2W2ldLml2LCB0dltpXS5pdmxlbik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoInN0cmVhbSwgZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXQsIE1BWF9EQVRBX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dltpXS5kYXRhW2pdLnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dltpXS5kYXRhW2pdLmlubGVuKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ub3V0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBlbmNyeXB0IG1pc21hdGNoIGVudHJ5ICVkOiVkXG4iLCBpLCBqKTsKKyAgICAgICAgICAgICAgbWlzbWF0Y2ggKHR2W2ldLmRhdGFbal0ub3V0LCB0dltpXS5kYXRhW2pdLmlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkZCwgb3V0LCB0dltpXS5kYXRhW2pdLmlubGVuLCBOVUxMLCAwKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9kZWNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGosIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ucGxhaW50ZXh0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgZmFpbCAoInN0cmVhbSwgZGVjcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZFxuIiwgaSwgaik7CisgICAgICAgIH0KKworCisgICAgICAvKiBUaGlzIHRpbWUgd2UgZW5jcnlwdCBhbmQgZGVjcnlwdCBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKyAgICAgIGZvciAoaiA9IDA7IHR2W2ldLmRhdGFbal0uaW5sZW47IGorKykKKyAgICAgICAgeworICAgICAgICAgIGludCBieXRlTnVtOworCisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGUsIHR2W2ldLmtleSwgdHZbaV0ua2V5bGVuKTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRkLCB0dltpXS5rZXksIHR2W2ldLmtleWxlbik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoInN0cmVhbSwgZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGUsIHR2W2ldLml2LCB0dltpXS5pdmxlbik7CisgICAgICAgICAgaWYgKCFlcnIpCisgICAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRkLCB0dltpXS5pdiwgdHZbaV0uaXZsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJzdHJlYW0sIGdjcnlfY2lwaGVyX3NldGl2IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGZvciAoYnl0ZU51bSA9IDA7IGJ5dGVOdW0gPCB0dltpXS5kYXRhW2pdLmlubGVuOyArK2J5dGVOdW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgb3V0K2J5dGVOdW0sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0dltpXS5kYXRhW2pdLnBsYWludGV4dCkgKyBieXRlTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKyAgICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ub3V0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgZmFpbCAoInN0cmVhbSwgZW5jcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZCAoYnl0ZS13aXNlKVxuIiwgaSwgaik7CisKKyAgICAgICAgICBmb3IgKGJ5dGVOdW0gPSAwOyBieXRlTnVtIDwgdHZbaV0uZGF0YVtqXS5pbmxlbjsgKytieXRlTnVtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZGQsIG91dCtieXRlTnVtLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmYWlsICgic3RyZWFtLCBnY3J5X2NpcGhlcl9kZWNyeXB0ICglZCwgJWQpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCBqLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ucGxhaW50ZXh0LCBvdXQsIHR2W2ldLmRhdGFbal0uaW5sZW4pKQorICAgICAgICAgICAgZmFpbCAoInN0cmVhbSwgZGVjcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZCAoYnl0ZS13aXNlKVxuIiwgaSwgaik7CisgICAgICAgIH0KKworICAgIG5leHQ6CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGRlKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICAgIH0KKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgc3RyZWFtIGNpcGhlciBjaGVja3MuXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfc3RyZWFtX2NpcGhlcl9sYXJnZV9ibG9jayAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dgorICB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgYWxnbzsKKyAgICBpbnQga2V5bGVuOworICAgIGludCBpdmxlbjsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgY29uc3QgY2hhciAqaXY7CisgICAgc3RydWN0IGRhdGEKKyAgICB7CisgICAgICBpbnQgb2Zmc2V0LCBsZW5ndGg7CisgICAgICBjb25zdCBjaGFyICpyZXN1bHQ7CisgICAgfSBkYXRhW01BWF9EQVRBX0xFTl07CisgIH0gdHZbXSA9IHsKKyNpZmRlZiBVU0VfU0FMU0EyMAorICAgIHsKKyAgICAgICJTYWxzYTIwIDI1NiBiaXQsIGVjcnlwdCB2ZXJpZmllZCwgc2V0IDYsIHZlY3RvciAwIiwKKyAgICAgIEdDUllfQ0lQSEVSX1NBTFNBMjAsIDMyLCA4LAorICAgICAgIlx4MDBceDUzXHhBNlx4RjlceDRDXHg5Rlx4RjJceDQ1XHg5OFx4RUJceDNFXHg5MVx4RTRceDM3XHg4QVx4REQiCisgICAgICAiXHgzMFx4ODNceEQ2XHgyOVx4N0NceENGXHgyMlx4NzVceEM4XHgxQlx4NkVceEMxXHgxNFx4NjdceEJBXHgwRCIsCisgICAgICAiXHgwRFx4NzRceERCXHg0Mlx4QTlceDEwXHg3N1x4REUiLAorICAgICAgeworICAgICAgICB7IDAsIDY0LAorICAgICAgICAgICJceEY1XHhGQVx4RDVceDNGXHg3OVx4RjlceERGXHg1OFx4QzRceEFFXHhBMFx4RDBceEVEXHg5QVx4OTZceDAxIgorICAgICAgICAgICJceEYyXHg3OFx4MTFceDJDXHhBN1x4MThceDBEXHg1Nlx4NUJceDQyXHgwQVx4NDhceDAxXHg5Nlx4NzBceEVBIgorICAgICAgICAgICJceEYyXHg0Q1x4RTRceDkzXHhBOFx4NjJceDYzXHhGNlx4NzdceEI0XHg2QVx4Q0VceDE5XHgyNFx4NzdceDNEIgorICAgICAgICAgICJceDJCXHhCMlx4NTVceDcxXHhFMVx4QUFceDg1XHg5M1x4NzVceDhGXHhDM1x4ODJceEIxXHgyOFx4MEJceDcxIgorICAgICAgICB9LAorICAgICAgICB7IDY1NDcyLCA2NCwKKyAgICAgICAgICJceEI3XHgwQ1x4NTBceDEzXHg5Q1x4NjNceDMzXHgyRVx4RjZceEU3XHg3QVx4QzVceDQzXHgzOFx4QTRceDA3IgorICAgICAgICAgIlx4OUJceDgyXHhCRVx4QzlceEY5XHhBNFx4MDNceERGXHhFQVx4ODJceDFCXHg4M1x4RjdceDg2XHgwN1x4OTEiCisgICAgICAgICAiXHg2NVx4MEVceEYxXHhCMlx4NDhceDlEXHgwNVx4OTBceEIxXHhERVx4NzdceDJFXHhFRFx4QTRceEUzXHhCQyIKKyAgICAgICAgICJceEQ2XHgwRlx4QTdceENFXHg5Q1x4RDZceDIzXHhEOVx4RDJceEZEXHg1N1x4NThceEI4XHg2NVx4M0VceDcwIgorICAgICAgICB9LAorICAgICAgICB7IDY1NTM2LCA2NCwKKyAgICAgICAgICJceDgxXHg1OFx4MkNceDY1XHhEN1x4NTZceDJCXHg4MFx4QUVceEMyXHhGMVx4QTZceDczXHhBOVx4RDBceDFDIgorICAgICAgICAgIlx4OUZceDg5XHgyQVx4MjNceEQ0XHg5MVx4OUZceDZBXHhCNFx4N0JceDkxXHg1NFx4RTBceDhFXHg2OVx4OUIiCisgICAgICAgICAiXHg0MVx4MTdceEQ3XHhDNlx4NjZceDQ3XHg3Qlx4NjBceEY4XHgzOVx4MTRceDgxXHg2OFx4MkZceDVEXHg5NSIKKyAgICAgICAgICJceEQ5XHg2Nlx4MjNceERCXHhDNFx4ODlceEQ4XHg4RFx4QUFceDY5XHg1Nlx4QjlceEYwXHg2NFx4NkJceDZFIgorICAgICAgICB9LAorICAgICAgICB7IDEzMTAwOCwgNjQsCisgICAgICAgICAiXHhBMVx4M0ZceEZBXHgxMlx4MDhceEY4XHhCRlx4NTBceDkwXHgwOFx4ODZceEZBXHhBQlx4NDBceEZEXHgxMCIKKyAgICAgICAgICJceEU4XHhDQVx4QTNceDA2XHhFNlx4M0RceEYzXHg5NVx4MzZceEExXHg1Nlx4NEZceEI3XHg2MFx4QjJceDQyIgorICAgICAgICAgIlx4QTlceEQ2XHhBNFx4NjJceDhDXHhEQ1x4ODdceDg3XHg2Mlx4ODNceDRFXHgyN1x4QTVceDQxXHhEQVx4MkEiCisgICAgICAgICAiXHg1RVx4M0JceDM0XHg0NVx4OThceDlDXHg3Nlx4RjZceDExXHhFMFx4RkVceEM2XHhEOVx4MUFceENBXHhDQyIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAgMjU2IGJpdCwgZWNyeXB0IHZlcmlmaWVkLCBzZXQgNiwgdmVjdG9yIDEiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMCwgMzIsIDgsCisgICAgICAiXHgwNVx4NThceEFCXHhGRVx4NTFceEE0XHhGN1x4NEFceDlEXHhGMFx4NDNceDk2XHhFOVx4M0NceDhGXHhFMiIKKyAgICAgICJceDM1XHg4OFx4REJceDJFXHg4MVx4RDRceDI3XHg3QVx4Q0RceDIwXHg3M1x4QzZceDE5XHg2Q1x4QkZceDEyIiwKKyAgICAgICJceDE2XHg3RFx4RTRceDRCXHhCMlx4MTlceDgwXHhFNyIsCisgICAgICB7CisgICAgICAgIHsgMCwgNjQsCisgICAgICAgICAgIlx4MzlceDQ0XHhGNlx4RENceDlGXHg4NVx4QjFceDI4XHgwOFx4MzhceDc5XHhGRFx4RjFceDkwXHhGN1x4REUiCisgICAgICAgICAgIlx4RTRceDA1XHgzQVx4MDdceEJDXHgwOVx4ODlceDZEXHg1MVx4RDBceDY5XHgwQlx4RDRceERBXHg0QVx4QzEiCisgICAgICAgICAgIlx4MDZceDJGXHgxRVx4NDdceEQzXHhEMFx4NzFceDZGXHg4MFx4QTlceEI0XHhEOFx4NUVceDZEXHg2MFx4ODUiCisgICAgICAgICAgIlx4RUVceDA2XHg5NFx4NzZceDAxXHhDOFx4NUZceDFBXHgyN1x4QTJceEY3XHg2RVx4NDVceEE2XHhBQVx4ODciCisgICAgICAgIH0sCisgICAgICAgIHsgNjU0NzIsIDY0LAorICAgICAgICAgICJceDM2XHhFMFx4M0JceDRCXHg1NFx4QjBceEIyXHhFMFx4NERceDA2XHg5RVx4NjlceDAwXHg4Mlx4QzhceEM1IgorICAgICAgICAgICJceDkyXHhERlx4NTZceEU2XHgzM1x4RjVceEQ4XHhDN1x4NjhceDJBXHgwMlx4QTZceDVFXHhDRFx4MTNceDcxIgorICAgICAgICAgICJceDhDXHhBNFx4MzVceDJBXHhBQ1x4Q0JceDBEXHhBMlx4MEVceEQ2XHhCQlx4QkFceDYyXHhFMVx4NzdceEYyIgorICAgICAgICAgICJceDEwXHhFM1x4NTZceDBFXHg2M1x4QkJceDgyXHgyQ1x4NDFceDU4XHhDQVx4QThceDA2XHhBOFx4OENceDgyIgorICAgICAgICB9LAorICAgICAgICB7IDY1NTM2LCA2NCwKKyAgICAgICAgICAiXHgxQlx4NzdceDlFXHg3QVx4OTFceDdDXHg4Q1x4MjZceDAzXHg5Rlx4RkJceDIzXHhDRlx4MEVceEY4XHhFMCIKKyAgICAgICAgICAiXHg4QVx4MUFceDEzXHhCNFx4M0FceENEXHhEOVx4NDBceDJDXHhGNVx4REZceDM4XHg1MFx4MTBceDk4XHhERiIKKyAgICAgICAgICAiXHhDOVx4NDVceEE2XHhDQ1x4NjlceEE2XHhBMVx4NzNceDY3XHhCQ1x4MDNceDQzXHgxQVx4ODZceEIzXHhFRCIKKyAgICAgICAgICAiXHgwNFx4QjBceDI0XHg1Qlx4NTZceDM3XHg5Qlx4RjlceDk3XHhFMlx4NThceDAwXHhBRFx4ODNceDdEXHg3RCIKKyAgICAgICAgfSwKKyAgICAgICAgeyAxMzEwMDgsIDY0LAorICAgICAgICAgICJceDdFXHhDNlx4REFceEU4XHgxQVx4MTBceDVFXHg2N1x4MTdceDJBXHgwQlx4OENceDRCXHhCRVx4N0RceDA2IgorICAgICAgICAgICJceEE3XHhBOFx4NzVceDlGXHg5MVx4NEZceEJFXHhCMVx4QUZceDYyXHhDOFx4QTVceDUyXHhFRlx4NEFceDRGIgorICAgICAgICAgICJceDU2XHg5Nlx4N0VceEEyXHg5Q1x4NzRceDcxXHhGNFx4NkZceDNCXHgwN1x4RjdceEEzXHg3NFx4NkVceDk1IgorICAgICAgICAgICJceDNEXHgzMVx4NThceDIxXHhCOFx4NUJceDZFXHg4Q1x4QjRceDAxXHgyMlx4QjlceDY2XHgzNVx4MzFceDNDIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMCAyNTYgYml0LCBlY3J5cHQgdmVyaWZpZWQsIHNldCA2LCB2ZWN0b3IgMiIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwLCAzMiwgOCwKKyAgICAgICJceDBBXHg1RFx4QjBceDAzXHg1Nlx4QTlceEZDXHg0Rlx4QTJceEY1XHg0OFx4OUJceEVFXHg0MVx4OTRceEU3IgorICAgICAgIlx4M0FceDhEXHhFMFx4MzNceDg2XHhEOVx4MkNceDdGXHhEMlx4MjVceDc4XHhDQlx4MUVceDcxXHhDNFx4MTciLAorICAgICAgIlx4MUZceDg2XHhFRFx4NTRceEJCXHgyMlx4ODlceEYwIiwKKyAgICAgIHsKKyAgICAgICAgeyAwLCA2NCwKKyAgICAgICAgICAiXHgzRlx4RThceDVEXHg1Qlx4QjFceDk2XHgwQVx4ODJceDQ4XHgwQlx4NUVceDZGXHg0RVx4OTZceDVBXHg0NCIKKyAgICAgICAgICAiXHg2MFx4RDdceEE1XHg0NVx4MDFceDY2XHg0Rlx4N0RceDYwXHhCNVx4NEJceDA2XHgxMFx4MEFceDM3XHhGRiIKKyAgICAgICAgICAiXHhEQ1x4RjZceEJEXHhFNVx4Q0VceDNGXHg0OFx4ODZceEJBXHg3N1x4RERceDVCXHg0NFx4RTlceDU2XHg0NCIKKyAgICAgICAgICAiXHhFNFx4MEFceDhBXHhDNlx4NThceDAxXHgxNVx4NURceEI5XHgwRlx4MDJceDUyXHgyQlx4NjRceDQwXHgyMyIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NTQ3MiwgNjQsCisgICAgICAgICAgIlx4QzhceEQ2XHhFNVx4NENceDI5XHhDQVx4MjBceDQwXHgxOFx4QThceDMwXHhFMlx4NjZceENFXHhFRVx4MEQiCisgICAgICAgICAgIlx4MDNceDdEXHhDNFx4N0VceDkyXHgxOVx4NDdceDMwXHgyQVx4Q0VceDQwXHhEMVx4QjlceDk2XHhBNlx4RDgiCisgICAgICAgICAgIlx4MEJceDU5XHg4Nlx4NzdceEYzXHgzNVx4MkZceDFEXHhBQVx4NkRceDk4XHg4OFx4RjhceDkxXHhBRFx4OTUiCisgICAgICAgICAgIlx4QTFceEMzXHgyRlx4RkVceEI3XHgxQlx4QjhceDYxXHhFOFx4QjBceDcwXHg1OFx4NTFceDUxXHg3MVx4QzkiCisgICAgICAgIH0sCisgICAgICAgIHsgNjU1MzYsIDY0LAorICAgICAgICAgICJceEI3XHg5Rlx4RDdceDc2XHg1NFx4MkJceDQ2XHgyMFx4RUZceENCXHg4OFx4NDRceDk1XHg5OVx4RjJceDM0IgorICAgICAgICAgICJceDAzXHhFN1x4NEFceDZFXHg5MVx4Q0FceENDXHg1MFx4QTBceDVBXHg4Rlx4OEZceDNDXHgwRFx4RUFceDhCIgorICAgICAgICAgICJceDAwXHhFMVx4QTVceEU2XHgwOFx4MUZceDU1XHgyNlx4QUVceDk3XHg1Qlx4M0JceEMwXHg0NVx4MEZceDFBIgorICAgICAgICAgICJceDBDXHg4Qlx4NjZceEY4XHgwOFx4RjFceDkwXHg0Qlx4OTdceDEzXHg2MVx4MTNceDdDXHg5M1x4MTVceDZGIgorICAgICAgICB9LAorICAgICAgICB7IDEzMTAwOCwgNjQsCisgICAgICAgICAgIlx4NzlceDk4XHgyMFx4NEZceEVEXHg3MFx4Q0VceDhFXHgwRFx4MDJceDdCXHgyMFx4NjZceDM1XHhDMFx4OEMiCisgICAgICAgICAgIlx4OEJceEM0XHg0M1x4NjJceDI2XHgwOFx4OTdceDBFXHg0MFx4RTNceEFFXHhERlx4M0NceEU3XHg5MFx4QUUiCisgICAgICAgICAgIlx4RURceEY4XHg5Rlx4OTJceDI2XHg3MVx4QjRceDUzXHg3OFx4RTJceENEXHgwM1x4RjZceEY2XHgyM1x4NTYiCisgICAgICAgICAgIlx4NTJceDlDXHg0MVx4NThceEI3XHhGRlx4NDFceEVFXHg4NVx4NEJceDEyXHgzNVx4MzdceDM5XHg4OFx4QzgiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJTYWxzYTIwIDI1NiBiaXQsIGVjcnlwdCB2ZXJpZmllZCwgc2V0IDYsIHZlY3RvciAzIiwKKyAgICAgIEdDUllfQ0lQSEVSX1NBTFNBMjAsIDMyLCA4LAorICAgICAgIlx4MEZceDYyXHhCNVx4MDhceDVCXHhBRVx4MDFceDU0XHhBN1x4RkFceDREXHhBMFx4RjNceDQ2XHg5OVx4RUMiCisgICAgICAiXHgzRlx4OTJceEU1XHgzOFx4OEJceERFXHgzMVx4ODRceEQ3XHgyQVx4N0RceEQwXHgyM1x4NzZceEM5XHgxQyIsCisgICAgICAiXHgyOFx4OEZceEY2XHg1RFx4QzRceDJCXHg5Mlx4RjkiLAorICAgICAgeworICAgICAgICB7IDAsIDY0LAorICAgICAgICAgICJceDVFXHg1RVx4NzFceEY5XHgwMVx4OTlceDM0XHgwM1x4MDRceEFCXHhCMlx4MkFceDM3XHhCNlx4NjJceDVCIgorICAgICAgICAgICJceEY4XHg4M1x4RkJceDg5XHhDRVx4M0JceDIxXHhGNVx4NEFceDEwXHhCOFx4MTBceDY2XHhFRlx4ODdceERBIgorICAgICAgICAgICJceDMwXHhCN1x4NzZceDk5XHhBQVx4NzNceDc5XHhEQVx4NTlceDVDXHg3N1x4RERceDU5XHg1NFx4MkRceEEyIgorICAgICAgICAgICJceDA4XHhFNVx4OTVceDRGXHg4OVx4RTRceDBFXHhCN1x4QUFceDgwXHhBOFx4NEFceDYxXHg3Nlx4NjZceDNGIgorICAgICAgICB9LAorICAgICAgICB7IDY1NDcyLCA2NCwKKyAgICAgICAgICAiXHgyRFx4QTJceDE3XHg0Qlx4RDFceDUwXHhBMVx4REZceEVDXHgxN1x4OTZceEU5XHgyMVx4RTlceEQ2XHhFMiIKKyAgICAgICAgICAiXHg0RVx4Q0ZceDAyXHgwOVx4QkNceEJFXHhBNFx4RjlceDgzXHg3MFx4RkNceEU2XHgyOVx4MDVceDZGXHg2NCIKKyAgICAgICAgICAiXHg5MVx4NzJceDgzXHg0M1x4NkVceDJEXHgzRlx4NDVceDU1XHg2Mlx4MjVceDMwXHg3RFx4NUNceEM1XHhBNSIKKyAgICAgICAgICAiXHg2NVx4MzJceDVEXHg4OVx4OTNceEIzXHg3Rlx4MTZceDU0XHgxOVx4NUNceDI0XHgwQlx4RjdceDVCXHgxNiIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NTUzNiwgNjQsCisgICAgICAgICAgIlx4QUJceEYzXHg5QVx4MjFceDBFXHhFRVx4ODlceDU5XHg4Qlx4NzFceDMzXHgzN1x4NzBceDU2XHhDMlx4RkUiCisgICAgICAgICAgIlx4RjRceDJEXHhBN1x4MzFceDMyXHg3NVx4NjNceEZCXHg2N1x4QzdceEJFXHhEQlx4MjdceEYzXHg4Q1x4N0MiCisgICAgICAgICAgIlx4NUFceDNGXHhDMlx4MThceDNBXHg0Q1x4NkJceDI3XHg3Rlx4OTBceDExXHg1Mlx4NDdceDJDXHg2Qlx4MkEiCisgICAgICAgICAgIlx4QkNceEY1XHhFM1x4NENceEJFXHgzMVx4NUVceDgxXHhGRFx4M0RceDE4XHgwQlx4NURceDY2XHhDQlx4NkMiCisgICAgICAgIH0sCisgICAgICAgIHsgMTMxMDA4LCA2NCwKKyAgICAgICAgICAiXHgxQlx4QThceDlEXHhCRFx4M0ZceDk4XHg4M1x4OTdceDI4XHhGNVx4NjdceDkxXHhENVx4QjdceENFXHgyMyIKKyAgICAgICAgICAiXHg1MFx4MzZceERFXHg4NFx4M0NceENDXHhBQlx4MDNceDkwXHhCOFx4QjVceDg2XHgyRlx4MUVceDQ1XHg5NiIKKyAgICAgICAgICAiXHhBRVx4OEFceDE2XHhGQlx4MjNceERBXHg5OVx4N0ZceDM3XHgxRlx4NEVceDBBXHhBQ1x4QzJceDZEXHhCOCIKKyAgICAgICAgICAiXHhFQlx4MzFceDRFXHhENFx4NzBceEIxXHhBRlx4NkJceDlGXHg4RFx4NjlceEREXHg3OVx4QTlceEQ3XHg1MCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAvMTIgMjU2IGJpdCwgZWNyeXB0IHZlcmlmaWVkLCBzZXQgNiwgdmVjdG9yIDAiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwgMzIsIDgsCisgICAgICAiXHgwMFx4NTNceEE2XHhGOVx4NENceDlGXHhGMlx4NDVceDk4XHhFQlx4M0VceDkxXHhFNFx4MzdceDhBXHhERCIKKyAgICAgICJceDMwXHg4M1x4RDZceDI5XHg3Q1x4Q0ZceDIyXHg3NVx4QzhceDFCXHg2RVx4QzFceDE0XHg2N1x4QkFceDBEIiwKKyAgICAgICJceDBEXHg3NFx4REJceDQyXHhBOVx4MTBceDc3XHhERSIsCisgICAgICB7CisgICAgICAgIHsgMCwgNjQsCisgICAgICAgICAgIlx4NTJceEUyXHgwQ1x4RjhceDc3XHg1QVx4RThceDgyXHhGMlx4MDBceEMyXHg5OVx4OUZceEU0XHhCQVx4MzEiCisgICAgICAgICAgIlx4QTdceEExXHg4Rlx4MURceDVDXHg5N1x4MTZceDE5XHgxRFx4MTJceDMxXHg3NVx4RTFceDQ3XHhCRFx4NEUiCisgICAgICAgICAgIlx4OENceEE2XHhFRFx4MTZceDZDXHhFMFx4RkNceDhFXHg2NVx4QTVceENBXHg2MFx4ODRceDIwXHhGQ1x4NjUiCisgICAgICAgICAgIlx4NDRceEM5XHg3MFx4MEFceDBGXHgyMVx4MzhceEU4XHhDMVx4QTJceDg2XHhGQlx4OENceDFGXHhCRlx4QTAiCisgICAgICAgIH0sCisgICAgICAgIHsgNjU0NzIsIDY0LAorICAgICAgICAgICJceDhGXHhCQ1x4OUZceEU4XHg2OVx4MUJceEQ0XHhGMFx4ODJceEI0XHg3Rlx4NTRceDA1XHhFRFx4RkJceEMxIgorICAgICAgICAgICJceDZGXHg0RFx4NUFceDEyXHhERFx4Q0JceDJEXHg3NVx4NEVceDhBXHg5OVx4OThceEQwXHhCMlx4MTlceDU1IgorICAgICAgICAgICJceDdEXHhGRVx4MjlceDg0XHhGNFx4QTFceEQyXHhERFx4QTdceDZCXHg5NVx4OTZceDkyXHg4Q1x4Q0VceDA1IgorICAgICAgICAgICJceDU2XHhGNVx4MDBceDY2XHhDRFx4NTlceDlFXHg0NFx4RUZceDVDXHgxNFx4QjJceDI2XHg2OFx4M0FceEVGIgorICAgICAgICB9LAorICAgICAgICB7IDY1NTM2LCA2NCwKKyAgICAgICAgICAiXHhCQ1x4QkRceDAxXHhERFx4MjhceDk2XHgxQ1x4QzdceEFEXHgzMFx4NDdceDM4XHg2Q1x4QkNceEM2XHg3QyIKKyAgICAgICAgICAiXHgxMFx4OERceDZBXHhGMVx4MTFceDY3XHhFNFx4MERceDdBXHhFMVx4QjJceEZDXHg0NVx4MThceEE4XHg2NyIKKyAgICAgICAgICAiXHhFRlx4RTRceDAyXHg2NVx4MURceDFEXHg4OFx4NTFceEM0XHhGRFx4MjNceDMwXHhDNVx4OTdceEIzXHg2QSIKKyAgICAgICAgICAiXHg0Nlx4RDVceDY4XHg5RVx4MDBceEZDXHg5Nlx4RkVceENGXHg5Q1x4RTNceEUyXHgyMVx4MURceDQ0XHhCRSIKKyAgICAgICAgfSwKKyAgICAgICAgeyAxMzEwMDgsIDY0LAorICAgICAgICAgICJceDkxXHg2Nlx4RjNceDFDXHhEOFx4NUJceDVCXHhCMVx4OEZceEM2XHgxNFx4RTVceDRFXHg0QVx4RDZceDdGIgorICAgICAgICAgICJceEI4XHg2NVx4OEVceDNCXHhGOVx4RkJceDE5XHhCN1x4QThceDJGXHgwRlx4RTdceERDXHg5MFx4MkRceEY1IgorICAgICAgICAgICJceDYzXHhDNlx4QUNceDRGXHg0NFx4NjdceDQ4XHhDNFx4QkNceDNFXHgxNFx4MDVceEUxXHgyNFx4ODJceDBEIgorICAgICAgICAgICJceEM0XHgwOVx4NDFceDk5XHg4Rlx4NDRceEE4XHgxMFx4RTdceDIyXHg3OFx4N0ZceENEXHg0N1x4NzhceDRDIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiU2Fsc2EyMC8xMiAyNTYgYml0LCBlY3J5cHQgdmVyaWZpZWQsIHNldCA2LCB2ZWN0b3IgMSIsCisgICAgICBHQ1JZX0NJUEhFUl9TQUxTQTIwUjEyLCAzMiwgOCwKKyAgICAgICJceDA1XHg1OFx4QUJceEZFXHg1MVx4QTRceEY3XHg0QVx4OURceEYwXHg0M1x4OTZceEU5XHgzQ1x4OEZceEUyIgorICAgICAgIlx4MzVceDg4XHhEQlx4MkVceDgxXHhENFx4MjdceDdBXHhDRFx4MjBceDczXHhDNlx4MTlceDZDXHhCRlx4MTIiLAorICAgICAgIlx4MTZceDdEXHhFNFx4NEJceEIyXHgxOVx4ODBceEU3IiwKKyAgICAgIHsKKyAgICAgICAgeyAwLCA2NCwKKyAgICAgICAgICAiXHhDMFx4NzVceDYwXHhCM1x4RTdceDc2XHhCNFx4NzFceEM1XHhFMlx4OTNceDE0XHgyNlx4Q0FceEYxXHhFRCIKKyAgICAgICAgICAiXHgzQVx4RTRceEI4XHg2N1x4MDhceDc2XHg4Mlx4Q0FceDlEXHhGRFx4QzJceEJBXHhFOFx4OTNceDUwXHhCRCIKKyAgICAgICAgICAiXHg4NFx4ODJceDFDXHhBRVx4RkZceDg1XHhBQVx4QzRceDlEXHg3NFx4MzVceEE3XHhEOVx4ODhceDkzXHg1MiIKKyAgICAgICAgICAiXHhGNVx4MjdceDlFXHgzNlx4MTJceDNGXHg0MVx4NzJceDhBXHgxNFx4RUZceDI2XHg5Rlx4Q0JceDk0XHg0QiIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NTQ3MiwgNjQsCisgICAgICAgICAgIlx4RUVceEQxXHhCQlx4NThceEY5XHgwQ1x4ODlceEUwXHg1Q1x4QzZceDhCXHgyRFx4QjZceDA1XHg1OFx4NDkiCisgICAgICAgICAgIlx4QjNceEQyXHhCMVx4ODdceEI3XHhGMFx4MkZceDlBXHgyNFx4Q0VceDM0XHgyQVx4RjBceEZDXHg0N1x4QTMiCisgICAgICAgICAgIlx4NzRceEJEXHg3NVx4OTBceEZCXHhGNFx4RkRceDlFXHhFNVx4OUJceDFBXHgzOFx4MUVceEJGXHhEMlx4MjkiCisgICAgICAgICAgIlx4QURceDJBXHgyOVx4MDFceEIzXHhGQlx4NjFceDA4XHgxMlx4OTBceDBCXHg5Mlx4MzBceEU2XHgyMlx4RTkiCisgICAgICAgIH0sCisgICAgICAgIHsgNjU1MzYsIDY0LAorICAgICAgICAgICJceDcwXHhGMFx4NDlceDNBXHgxQlx4NjJceDUzXHhDQ1x4NUVceEQzXHg0NVx4MEFceDMxXHhDRlx4MzdceDdEIgorICAgICAgICAgICJceDgzXHg0Qlx4QURceDIwXHg3Mlx4MzBceDI5XHgyN1x4Q0NceEQ4XHgzMFx4MTBceDRCXHhEM1x4MDVceEZGIgorICAgICAgICAgICJceDU5XHhEMlx4OTRceDE3XHhCMlx4MzJceDg4XHg0RVx4QzlceDU5XHgxOVx4NERceDYwXHg0N1x4QzNceEREIgorICAgICAgICAgICJceDY2XHg1Nlx4QzRceDdFXHgzMlx4MDBceDY0XHhFQlx4MDFceDQ0XHhGN1x4MzRceDFCXHhDM1x4RDZceDk3IgorICAgICAgICB9LAorICAgICAgICB7IDEzMTAwOCwgNjQsCisgICAgICAgICAgIlx4RDJceENDXHhGN1x4QzFceEFGXHgyQVx4QjRceDY2XHhFNlx4MjdceERCXHg0NFx4MDhceDQwXHg5Nlx4OUEiCisgICAgICAgICAgIlx4QkRceEFCXHg2OFx4RDhceDg2XHhBRVx4NkFceDM4XHhBMVx4M0ZceEVFXHgxN1x4NTBceENBXHg5N1x4QjUiCisgICAgICAgICAgIlx4RDNceDMxXHg1Qlx4ODRceDA4XHg0N1x4MjhceDg2XHgyRlx4QkNceEM3XHhENFx4QTlceDdDXHg3NVx4QzgiCisgICAgICAgICAgIlx4NjVceDVGXHhGOVx4RDZceEJCXHhDMlx4NjFceDg4XHg2M1x4NkZceDNFXHhERlx4RTFceDVDXHg3RFx4MzAiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJTYWxzYTIwLzEyIDI1NiBiaXQsIGVjcnlwdCB2ZXJpZmllZCwgc2V0IDYsIHZlY3RvciAyIiwKKyAgICAgIEdDUllfQ0lQSEVSX1NBTFNBMjBSMTIsIDMyLCA4LAorICAgICAgIlx4MEFceDVEXHhCMFx4MDNceDU2XHhBOVx4RkNceDRGXHhBMlx4RjVceDQ4XHg5Qlx4RUVceDQxXHg5NFx4RTciCisgICAgICAiXHgzQVx4OERceEUwXHgzM1x4ODZceEQ5XHgyQ1x4N0ZceEQyXHgyNVx4NzhceENCXHgxRVx4NzFceEM0XHgxNyIsCisgICAgICAiXHgxRlx4ODZceEVEXHg1NFx4QkJceDIyXHg4OVx4RjAiLAorICAgICAgeworICAgICAgICB7IDAsIDY0LAorICAgICAgICAgICJceDUxXHgyMlx4NTJceDkxXHgwMVx4OTBceEQxXHg1NFx4RDFceDREXHgwQlx4OTJceDMyXHhCOFx4ODRceDMxIgorICAgICAgICAgICJceDhDXHhDQlx4NDNceDgxXHg5Qlx4RDVceDQyXHgxOVx4MzJceEMwXHgzQVx4MTNceEYwXHg3Qlx4NDBceDEwIgorICAgICAgICAgICJceDgzXHhEN1x4ODlceDcyXHg1QVx4QTlceERBXHgwQlx4NDFceENCXHg2Mlx4MjRceDk0XHg1RVx4RENceEIwIgorICAgICAgICAgICJceEZCXHg2Rlx4RDdceEMyXHgzNFx4MjJceDM1XHhDOVx4NzBceEY2XHg0RVx4MTBceDFDXHgyNVx4NjhceDY0IgorICAgICAgICB9LAorICAgICAgICB7IDY1NDcyLCA2NCwKKyAgICAgICAgICAiXHg5N1x4OTZceDc0XHg1NVx4ODRceDBBXHg0QVx4RTVceEMxXHhDQVx4Q0VceDQ5XHgxNVx4MTlceDEzXHg4QSIKKyAgICAgICAgICAiXHhBM1x4NUVceDVGXHgwMlx4NDBceDdEXHg0QVx4MUZceEU1XHgwOFx4NkRceDM1XHhGM1x4NTVceDFFXHhGNCIKKyAgICAgICAgICAiXHg3N1x4RDlceDI4XHg5RFx4MTdceDIzXHg3OVx4N0NceDFBXHg0OVx4RUNceDI2XHg2Mlx4OUFceEZBXHhEQyIKKyAgICAgICAgICAiXHg1Nlx4QTBceDM4XHhBM1x4OENceDc1XHg4OFx4MUJceDYyXHgxN1x4RkRceDc0XHg2N1x4MjVceDU5XHgwOSIKKyAgICAgICAgfSwKKyAgICAgICAgeyA2NTUzNiwgNjQsCisgICAgICAgICAgIlx4MUJceEY4XHgyRVx4M0RceDVDXHg1NFx4REFceEFCXHhDRlx4ODRceDE1XHhGOFx4QTJceEExXHhBMlx4MkUiCisgICAgICAgICAgIlx4ODZceDg4XHgwNlx4MzNceDRGXHhGM1x4MTFceDM2XHgwNFx4NzRceDFDXHgxRFx4RjJceEI5XHg4NFx4MEYiCisgICAgICAgICAgIlx4ODdceERFXHhFRlx4QjBceDA3XHgyM1x4QThceEExXHhCMlx4NEFceDREXHhBMVx4N0VceENEXHhBRFx4MDAiCisgICAgICAgICAgIlx4MDFceEY5XHg3OVx4RERceEFFXHgyRFx4RjBceEM1XHhFMVx4RTVceDMyXHhDNFx4OEZceDhFXHgwRFx4MzQiCisgICAgICAgIH0sCisgICAgICAgIHsgMTMxMDA4LCA2NCwKKyAgICAgICAgICAiXHgwNlx4RDhceDRGXHg2QVx4NzFceDM0XHg4NFx4MjBceDMyXHg5Rlx4Q0RceDBDXHg0MVx4NzVceDlBXHhEMSIKKyAgICAgICAgICAiXHg4Rlx4OTlceDU3XHhBM1x4OEZceDIyXHg4OVx4M0JceEE1XHg1OFx4QzVceDA1XHgxMVx4OTdceDI4XHg1QyIKKyAgICAgICAgICAiXHg2Qlx4RTJceEZEXHg2Q1x4OTZceEE1XHhDNlx4NjJceEFGXHhEM1x4MTFceDc4XHhFN1x4MEZceDk2XHgwQSIKKyAgICAgICAgICAiXHhBQlx4M0ZceDQ3XHg5Nlx4MjNceEE0XHg0NFx4QjZceDgxXHg5MVx4RTRceEM1XHgyOFx4NDZceDkzXHg4OCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIlNhbHNhMjAvMTIgMjU2IGJpdCwgZWNyeXB0IHZlcmlmaWVkLCBzZXQgNiwgdmVjdG9yIDMiLAorICAgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwgMzIsIDgsCisgICAgICAiXHgwRlx4NjJceEI1XHgwOFx4NUJceEFFXHgwMVx4NTRceEE3XHhGQVx4NERceEEwXHhGM1x4NDZceDk5XHhFQyIKKyAgICAgICJceDNGXHg5Mlx4RTVceDM4XHg4Qlx4REVceDMxXHg4NFx4RDdceDJBXHg3RFx4RDBceDIzXHg3Nlx4QzlceDFDIiwKKyAgICAgICJceDI4XHg4Rlx4RjZceDVEXHhDNFx4MkJceDkyXHhGOSIsCisgICAgICB7CisgICAgICAgIHsgMCwgNjQsCisgICAgICAgICAgIlx4OTlceERCXHgzM1x4QURceDExXHhDRVx4MENceENCXHgzQlx4RkRceEJGXHg4RFx4MENceDE4XHgxNlx4MDQiCisgICAgICAgICAgIlx4NTJceEQwXHgxNFx4Q0RceEU5XHg4OVx4QjRceEM0XHgxMVx4QTVceDU5XHhGRlx4N0NceDIwXHhBMVx4NjkiCisgICAgICAgICAgIlx4RTZceERDXHg5OVx4MDlceEQ4XHgxNlx4QkVceENFXHhEQ1x4NDBceDYzXHhDRVx4MDdceENFXHhBOFx4MjgiCisgICAgICAgICAgIlx4RjRceDRCXHhGOVx4QjZceEM5XHhBMFx4QTBceEIyXHgwMFx4RTFceEI1XHgyQVx4RjRceDE4XHg1OVx4QzUiCisgICAgICAgIH0sCisgICAgICAgIHsgNjU0NzIsIDY0LAorICAgICAgICAgICJceDJGXHhGMlx4MDJceDY0XHhFRVx4QUZceDQ3XHhBQlx4N0RceDU3XHhDM1x4NjJceDI0XHg1M1x4NTRceDUxIgorICAgICAgICAgICJceDczXHg1QVx4QzhceDM2XHhEM1x4MkRceEQyXHg4QVx4RTZceDM2XHg0NVx4Q0VceDk1XHgyRlx4N0ZceERCIgorICAgICAgICAgICJceEU2XHg2OFx4OUNceDY5XHg1OVx4NzdceEIxXHhDN1x4NkVceDYwXHhERFx4NUJceDI3XHhBQ1x4QTRceDc2IgorICAgICAgICAgICJceEQyXHg2Mlx4MEZceERDXHg5M1x4MTNceEU4XHg0OFx4OUJceEE1XHg2QVx4NzBceEM5XHhGNFx4QzNceEE4IgorICAgICAgICB9LAorICAgICAgICB7IDY1NTM2LCA2NCwKKyAgICAgICAgICAiXHhFQlx4MzBceENEXHhBN1x4MjdceEMwXHhGOFx4QjdceEU0XHg1RFx4NUVceEYzXHgwRFx4QjdceENCXHhFMCIKKyAgICAgICAgICAiXHgyMVx4RjJceDI5XHgxRVx4NUZceDU2XHg5M1x4OERceDU2XHhGNlx4ODdceEI3XHgzN1x4QzNceEI0XHgyNyIKKyAgICAgICAgICAiXHg1NFx4NUNceDU2XHhBNlx4RDNceEEwXHhCRlx4MkJceDJGXHg0N1x4QjRceDg0XHg5M1x4RkFceEU0XHg1RSIKKyAgICAgICAgICAiXHhENVx4MENceDJFXHg5Qlx4QkVceDQ5XHhGRFx4OTJceEQ2XHg3Q1x4NzZceDQ5XHgwNVx4NUZceDA2XHhGRCIKKyAgICAgICAgfSwKKyAgICAgICAgeyAxMzEwMDgsIDY0LAorICAgICAgICAgICJceDBFXHhCRlx4NkNceEMzXHhDQlx4Q0JceEU3XHg0RVx4NkVceEU4XHgwN1x4NDdceDFCXHg0OVx4MkFceDY3IgorICAgICAgICAgICJceDM5XHhBNVx4MkZceDU3XHgxMVx4MzFceEEyXHg1MFx4QkNceERGXHhBMFx4NzZceEEyXHg2NVx4OTBceEQ3IgorICAgICAgICAgICJceEVEXHhFNlx4NzVceDFDXHgwM1x4MjZceEEwXHgyQ1x4QjFceDFDXHg1OFx4NzdceDM1XHg1Mlx4ODBceDRGIgorICAgICAgICAgICJceEQ4XHg2OFx4NjdceDE1XHgzNVx4NUNceDVBXHg1Q1x4QzVceDkxXHg5Nlx4M0FceDc1XHhFOVx4OTRceEI0IgorICAgICAgICB9CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qVVNFX1NBTFNBMjAqLworICB9OworCisKKyAgY2hhciB6ZXJvZXNbNTEyXTsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZGU7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgc2l6ZV90IGJ1ZmZlcnNpemU7CisgIHVuc2lnbmVkIGludCBuOworICBpbnQgaSwgajsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBTdGFydGluZyBsYXJnZSBibG9jayBzdHJlYW0gY2lwaGVyIGNoZWNrcy5cbiIpOworCisgIG1lbXNldCAoemVyb2VzLCAwLCA1MTIpOworCisgIGJ1ZmZlcnNpemUgPSAxMjggKiAxMDI0OworICBidWZmZXIgPSBnY3J5X3htYWxsb2MgKGJ1ZmZlcnNpemUrMTAyNCk7CisgIG1lbXNldCAoYnVmZmVyK2J1ZmZlcnNpemUsIDB4NWEsIDEwMjQpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHR2KSAvIHNpemVvZiAodHZbMF0pOyBpKyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBsYXJnZSBibG9jayBzdHJlYW0gZm9yICVzIFslaV0gKCVzKVxuIiwKKwkJIGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAodHZbaV0uYWxnbyksIHR2W2ldLmFsZ28sIHR2W2ldLm5hbWUpOworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCB0dltpXS5hbGdvLCBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTSwgMCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImxhcmdlIHN0cmVhbSwgZ2NyeV9jaXBoZXJfb3BlbiBmb3Igc3RyZWFtIG1vZGUgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRlLCB0dltpXS5rZXksIHR2W2ldLmtleWxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImxhcmdlIHN0cmVhbSwgZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnb3RvIG5leHQ7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkZSwgdHZbaV0uaXYsIHR2W2ldLml2bGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgibGFyZ2Ugc3RyZWFtLCBnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ290byBuZXh0OworICAgICAgICB9CisKKyAgICAgIGZvciAoaj0wLCBwPWJ1ZmZlcjsgaiA8IGJ1ZmZlcnNpemUvNTEyOyBqKyssIHAgKz0gNTEyKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBwLCA1MTIsIHplcm9lcywgNTEyKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgibGFyZ2Ugc3RyZWFtLCAiCisgICAgICAgICAgICAgICAgICAgICJnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCkgYmxvY2sgJWQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgaiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBmb3IgKGo9MCwgcD1idWZmZXIrYnVmZmVyc2l6ZTsgaiA8IDEwMjQ7IGorKywgcCsrKQorICAgICAgICBpZiAoKnAgIT0gMHg1YSkKKyAgICAgICAgICBkaWUgKCJsYXJnZSBzdHJlYW0sIGJ1ZmZlciBjb3JydXB0ZWQgYXQgaj0lZFxuIiwgaik7CisKKyAgICAgIC8qIE5vdyBsb29wIG92ZXIgYWxsIHRoZSBkYXRhIHNhbXBsZXMuICAqLworICAgICAgZm9yIChqID0gMDsgdHZbaV0uZGF0YVtqXS5sZW5ndGg7IGorKykKKyAgICAgICAgeworICAgICAgICAgIGFzc2VydCAodHZbaV0uZGF0YVtqXS5vZmZzZXQgKyB0dltpXS5kYXRhW2pdLmxlbmd0aCA8PSBidWZmZXJzaXplKTsKKworICAgICAgICAgIGlmIChtZW1jbXAgKHR2W2ldLmRhdGFbal0ucmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIHR2W2ldLmRhdGFbal0ub2Zmc2V0LCB0dltpXS5kYXRhW2pdLmxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJsYXJnZSBzdHJlYW0sIGVuY3J5cHQgbWlzbWF0Y2ggZW50cnkgJWQ6JWRcbiIsIGksIGopOworICAgICAgICAgICAgICBtaXNtYXRjaCAodHZbaV0uZGF0YVtqXS5yZXN1bHQsIHR2W2ldLmRhdGFbal0ubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICsgdHZbaV0uZGF0YVtqXS5vZmZzZXQsIHR2W2ldLmRhdGFbal0ubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKgorICAgICAgICogIExldCdzIGRvIHRoZSBzYW1lIHRoaW5nIGFnYWluIGJ1dCB1c2luZyBjaGFuZ2luZyBibG9jayBzaXplcy4KKyAgICAgICAqLworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZGUsIHR2W2ldLmtleSwgdHZbaV0ua2V5bGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgibGFyZ2Ugc3RyZWFtLCBnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRlLCB0dltpXS5pdiwgdHZbaV0uaXZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJsYXJnZSBzdHJlYW0sIGdjcnlfY2lwaGVyX3NldGl2IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnb3RvIG5leHQ7CisgICAgICAgIH0KKworICAgICAgZm9yIChuPTAsIHA9YnVmZmVyLCBqID0gMDsgbiA8IGJ1ZmZlcnNpemU7IG4gKz0gaiwgcCArPSBqKQorICAgICAgICB7CisgICAgICAgICAgc3dpdGNoIChqKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAgIDA6IGogPSAgIDE7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgICAxOiBqID0gIDY0OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIDY0OiBqPSAgMzg0OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzg0OiBqID0gIDYzOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIDYzOiBqID0gNTEyOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNTEyOiBqID0gIDMyOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIDMyOiBqID0gNTAzOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6ICBqID0gNTA5OyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIG4gKyBqID49IGJ1ZmZlcnNpemUgKQorICAgICAgICAgICAgaiA9IGJ1ZmZlcnNpemUgLSBuOworICAgICAgICAgIGFzc2VydCAoaiA8PSA1MTIpOworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkZSwgcCwgaiwgemVyb2VzLCBqKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgibGFyZ2Ugc3RyZWFtLCAiCisgICAgICAgICAgICAgICAgICAgICJnY3J5X2NpcGhlcl9lbmNyeXB0ICglZCkgb2Zmc2V0ICV1IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIG4sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZm9yIChqPTAsIHA9YnVmZmVyK2J1ZmZlcnNpemU7IGogPCAxMDI0OyBqKyssIHArKykKKyAgICAgICAgaWYgKCpwICE9IDB4NWEpCisgICAgICAgICAgZGllICgibGFyZ2Ugc3RyZWFtLCBidWZmZXIgY29ycnVwdGVkIGF0IGo9JWQgKGxpbmUgJWQpXG4iLAorICAgICAgICAgICAgICAgaiwgX19MSU5FX18pOworCisgICAgICAvKiBOb3cgbG9vcCBvdmVyIGFsbCB0aGUgZGF0YSBzYW1wbGVzLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IHR2W2ldLmRhdGFbal0ubGVuZ3RoOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnQgKHR2W2ldLmRhdGFbal0ub2Zmc2V0ICsgdHZbaV0uZGF0YVtqXS5sZW5ndGggPD0gYnVmZmVyc2l6ZSk7CisKKyAgICAgICAgICBpZiAobWVtY21wICh0dltpXS5kYXRhW2pdLnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyB0dltpXS5kYXRhW2pdLm9mZnNldCwgdHZbaV0uZGF0YVtqXS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgibGFyZ2Ugc3RyZWFtIHZhciwgZW5jcnlwdCBtaXNtYXRjaCBlbnRyeSAlZDolZFxuIiwgaSwgaik7CisgICAgICAgICAgICAgIG1pc21hdGNoICh0dltpXS5kYXRhW2pdLnJlc3VsdCwgdHZbaV0uZGF0YVtqXS5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyB0dltpXS5kYXRhW2pdLm9mZnNldCwgdHZbaV0uZGF0YVtqXS5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBuZXh0OgorICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgICAgfQorCisgIGdjcnlfZnJlZSAoYnVmZmVyKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBDb21wbGV0ZWQgbGFyZ2UgYmxvY2sgc3RyZWFtIGNpcGhlciBjaGVja3MuXG4iKTsKK30KKworCisKKy8qIENoZWNrIHRoYXQgb3VyIGJ1bGsgZW5jcnlwdGlvbiBmdWNudGlvbnMgd29yayBwcm9wZXJseS4gICovCitzdGF0aWMgdm9pZAorY2hlY2tfYnVsa19jaXBoZXJfbW9kZXMgKHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAgeworICAgIGludCBhbGdvOworICAgIGludCBtb2RlOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBpbnQgIGtleWxlbjsKKyAgICBjb25zdCBjaGFyICppdjsKKyAgICBpbnQgaXZsZW47CisgICAgY2hhciB0MV9oYXNoWzIwXTsKKyAgfSB0dltdID0geworICAgIHsgR0NSWV9DSVBIRVJfQUVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiwKKyAgICAgICJhYmNkZWZnaGlqa2xtbm9wIiwgMTYsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbMF0qLworICAgICAgeyAweDUzLCAweGRhLCAweDI3LCAweDNjLCAweDc4LCAweDNkLCAweDU0LCAweDY2LCAweDE5LCAweDYzLAorICAgICAgICAweGQ3LCAweGU2LCAweDIwLCAweDEwLCAweGNkLCAweGMwLCAweDVhLCAweDBiLCAweDA2LCAweGNjIH0KKyAgICB9LAorICAgIHsgR0NSWV9DSVBIRVJfQUVTMTkyLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiwKKyAgICAgICJhYmNkZWZnaGlqa2xtbm9wQUJDREVGRyIsIDI0LAorICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNiwKKy8qWzFdKi8KKyAgICAgIHsgMHhjNywgMHhiMSwgMHhkMCwgMHgwOSwgMHg5NSwgMHgwNCwgMHgzNCwgMHg2MSwgMHgyYiwgMHhkOSwKKyAgICAgICAgMHhjYiwgMHhiMywgMHhjNywgMHhjYiwgMHhlZiwgMHhlYSwgMHgxNiwgMHgxOSwgMHg5YiwgMHgzZSB9CisgICAgfSwKKyAgICB7IEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9DRkIsCisgICAgICAiYWJjZGVmZ2hpamtsbW5vcEFCQ0RFRkdISUpLTE1OT1AiLCAzMiwKKyAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYsCisvKlsyXSovCisgICAgICB7IDB4MzEsIDB4ZTEsIDB4MWYsIDB4NjMsIDB4NjUsIDB4NDcsIDB4OGMsIDB4M2YsIDB4NTMsIDB4ZGIsCisgICAgICAgIDB4ZDksIDB4NGQsIDB4OTEsIDB4MWQsIDB4MDIsIDB4OWMsIDB4MDUsIDB4MjUsIDB4NTgsIDB4MjkgfQorICAgIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9BRVMsIEdDUllfQ0lQSEVSX01PREVfQ0JDLAorICAgICAgImFiY2RlZmdoaWprbG1ub3AiLCAxNiwKKyAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYsCisvKlszXSovCisgICAgICB7IDB4ZGMsIDB4MGMsIDB4YzIsIDB4ZDksIDB4NmIsIDB4NDcsIDB4ZjksIDB4ZWIsIDB4MDYsIDB4YjQsCisgICAgICAgIDB4MmYsIDB4NmUsIDB4ZWMsIDB4NzIsIDB4YmYsIDB4NTUsIDB4MjYsIDB4N2YsIDB4YTksIDB4OTcgfQorICAgIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfQ0JDLAorICAgICAgImFiY2RlZmdoaWprbG1ub3BBQkNERUZHIiwgMjQsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbNF0qLworICAgICAgeyAweDJiLCAweDkwLCAweDliLCAweGU2LCAweDQwLCAweGFiLCAweDZlLCAweGMyLCAweGM1LCAweGIxLAorICAgICAgICAweDg3LCAweGY1LCAweDQzLCAweDg0LCAweDdiLCAweDA0LCAweDA2LCAweDQ3LCAweGQxLCAweDhmIH0KKyAgICB9LAorICAgIHsgR0NSWV9DSVBIRVJfQUVTMjU2LCBHQ1JZX0NJUEhFUl9NT0RFX0NCQywKKyAgICAgICJhYmNkZWZnaGlqa2xtbm9wQUJDREVGR0hJSktMTU5PUCIsIDMyLAorICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNiwKKy8qWzVdKi8KKyAgICAgIHsgMHhhYSwgMHhhOCwgMHhkZiwgMHgwMywgMHhiMCwgMHhiYSwgMHhjNCwgMHhlMywgMHhjMSwgMHgwMiwKKyAgICAgICAgMHgzOCwgMHgzMSwgMHg4ZCwgMHg4NiwgMHhjYiwgMHg0OSwgMHg2ZCwgMHhhZCwgMHhhZSwgMHgwMSB9CisgICAgfSwKKyAgICB7IEdDUllfQ0lQSEVSX0FFUywgR0NSWV9DSVBIRVJfTU9ERV9PRkIsCisgICAgICAiYWJjZGVmZ2hpamtsbW5vcCIsIDE2LAorICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNiwKKy8qWzZdKi8KKyAgICAgIHsgMHg2NSwgMHhmZSwgMHhkZSwgMHg0OCwgMHhkMCwgMHhhMSwgMHhhNiwgMHhmOSwgMHgyNCwgMHg2YiwKKyAgICAgICAgMHg1MiwgMHg1ZiwgMHgyMSwgMHg4YSwgMHg2ZiwgMHhjNywgMHg3MCwgMHgzYiwgMHhkOCwgMHg0YSB9CisgICAgfSwKKyAgICB7IEdDUllfQ0lQSEVSX0FFUzE5MiwgR0NSWV9DSVBIRVJfTU9ERV9PRkIsCisgICAgICAiYWJjZGVmZ2hpamtsbW5vcEFCQ0RFRkciLCAyNCwKKyAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYsCisvKls3XSovCisgICAgICB7IDB4NTksIDB4NWIsIDB4MDIsIDB4YTIsIDB4ODgsIDB4YzAsIDB4YmUsIDB4OTQsIDB4NDMsIDB4YWEsCisgICAgICAgIDB4MzksIDB4ZjYsIDB4YmQsIDB4Y2MsIDB4ODMsIDB4OTksIDB4ZWUsIDB4MDAsIDB4YTEsIDB4OTEgfQorICAgIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9BRVMyNTYsIEdDUllfQ0lQSEVSX01PREVfT0ZCLAorICAgICAgImFiY2RlZmdoaWprbG1ub3BBQkNERUZHSElKS0xNTk9QIiwgMzIsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbOF0qLworICAgICAgeyAweDM4LCAweDhjLCAweGUxLCAweGUyLCAweGJlLCAweDY3LCAweDYwLCAweGU4LCAweGViLCAweGNlLAorICAgICAgICAweGQwLCAweGM2LCAweGFhLCAweGQ2LCAweGY2LCAweDI2LCAweDE1LCAweDU2LCAweGQwLCAweDJiIH0KKyAgICB9LAorICAgIHsgR0NSWV9DSVBIRVJfQUVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwKKyAgICAgICJhYmNkZWZnaGlqa2xtbm9wIiwgMTYsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbOV0qLworICAgICAgeyAweDlhLCAweDQ4LCAweDk0LCAweGQ2LCAweDUwLCAweDQ2LCAweDgxLCAweGRiLCAweDY4LCAweDM0LAorICAgICAgICAweDNiLCAweGM1LCAweDllLCAweDY2LCAweDk0LCAweDgxLCAweDk4LCAweGEwLCAweGY5LCAweGZmIH0KKyAgICB9LAorICAgIHsgR0NSWV9DSVBIRVJfQUVTMTkyLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwKKyAgICAgICJhYmNkZWZnaGlqa2xtbm9wQUJDREVGRyIsIDI0LAorICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNiwKKy8qWzEwXSovCisgICAgICB7IDB4MmMsIDB4MmMsIDB4ZDMsIDB4NzUsIDB4ODEsIDB4MmEsIDB4NTksIDB4MDcsIDB4ZWIsIDB4MDgsCisgICAgICAgIDB4Y2UsIDB4MjgsIDB4NGMsIDB4MGMsIDB4NmEsIDB4YTgsIDB4OGYsIDB4YTMsIDB4OTgsIDB4N2UgfQorICAgIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9BRVMyNTYsIEdDUllfQ0lQSEVSX01PREVfQ1RSLAorICAgICAgImFiY2RlZmdoaWprbG1ub3BBQkNERUZHSElKS0xNTk9QIiwgMzIsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbMTFdKi8KKyAgICAgIHsgMHg2NCwgMHhjZSwgMHg3MywgMHgwMywgMHhjNywgMHg4OSwgMHg5OSwgMHgxZiwgMHhmMSwgMHhjZSwKKyAgICAgICAgMHhmZSwgMHhmYiwgMHhiOSwgMHg0MiwgMHgzMCwgMHhkZiwgMHhiYiwgMHg2OCwgMHg2ZiwgMHhkMyB9CisgICAgfSwKKyAgICB7IEdDUllfQ0lQSEVSX0FFUywgR0NSWV9DSVBIRVJfTU9ERV9FQ0IsCisgICAgICAiYWJjZGVmZ2hpamtsbW5vcCIsIDE2LAorICAgICAgIjEyMzQ1Njc4OTAxMjM0NTYiLCAxNiwKKy8qWzEyXSovCisgICAgICB7IDB4NTEsIDB4YWUsIDB4ZjUsIDB4YWMsIDB4MjIsIDB4YTAsIDB4YmEsIDB4MTEsIDB4YzUsIDB4YWEsCisgICAgICAgIDB4YjQsIDB4NzAsIDB4OTksIDB4Y2UsIDB4MTgsIDB4MDgsIDB4MTIsIDB4OWIsIDB4YjEsIDB4YzUgfQorICAgIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfRUNCLAorICAgICAgImFiY2RlZmdoaWprbG1ub3BBQkNERUZHIiwgMjQsCisgICAgICAiMTIzNDU2Nzg5MDEyMzQ1NiIsIDE2LAorLypbMTNdKi8KKyAgICAgIHsgMHg1NywgMHg5MSwgMHhlYSwgMHg0OCwgMHhkOCwgMHhiZiwgMHg5ZSwgMHhjMSwgMHhhZSwgMHgzMywKKyAgICAgICAgMHhiMywgMHhmZCwgMHhmNywgMHg3YSwgMHhlYiwgMHgzMCwgMHhiMSwgMHg2MiwgMHgwZCwgMHg4MiB9CisgICAgfSwKKyAgICB7IEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9FQ0IsCisgICAgICAiYWJjZGVmZ2hpamtsbW5vcEFCQ0RFRkdISUpLTE1OT1AiLCAzMiwKKyAgICAgICIxMjM0NTY3ODkwMTIzNDU2IiwgMTYsCisvKlsxNF0qLworICAgICAgeyAweDJkLCAweDcxLCAweDU0LCAweGI5LCAweGM1LCAweDI4LCAweDc2LCAweGZmLCAweDc2LCAweGI1LAorICAgICAgICAweDk5LCAweDM3LCAweDk5LCAweDlkLCAweGY3LCAweDEwLCAweDZkLCAweDg2LCAweDRmLCAweDNmIH0KKyAgICB9CisgIH07CisgIGdjcnlfY2lwaGVyX2hkX3QgaGRlID0gTlVMTDsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZGQgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpidWZmZXJfYmFzZSwgKm91dGJ1Zl9iYXNlOyAvKiBBbGxvY2F0ZWQgYnVmZmVycy4gICovCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKm91dGJ1ZjsgICAgICAgICAgIC8qIEFsaWduZWQgYnVmZmVycy4gICovCisgIHNpemVfdCBidWZsZW47CisgIHVuc2lnbmVkIGNoYXIgaGFzaFsyMF07CisgIGludCBpLCBqLCBrZXlsZW4sIGJsa2xlbjsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiU3RhcnRpbmcgYnVsayBjaXBoZXIgY2hlY2tzLlxuIik7CisKKyAgYnVmbGVuID0gMTYqMTAwOyAgLyogV2UgY2hlY2sgYSAxNjAwIGJ5dGUgYnVmZmVyLiAgKi8KKyAgYnVmZmVyX2Jhc2UgPSBnY3J5X3htYWxsb2MgKGJ1ZmxlbisxNik7CisgIGJ1ZmZlciA9IGJ1ZmZlcl9iYXNlICsgKDE2IC0gKChzaXplX3QpYnVmZmVyX2Jhc2UgJiAweDBmKSk7CisgIG91dGJ1Zl9iYXNlID0gZ2NyeV94bWFsbG9jIChidWZsZW4rMTYpOworICBvdXRidWYgPSBvdXRidWZfYmFzZSArICgxNiAtICgoc2l6ZV90KW91dGJ1Zl9iYXNlICYgMHgwZikpOworCisKKyAgZm9yIChpID0gMDsgaSA8IERJTSAodHYpOyBpKyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICBjaGVja2luZyBidWxrIGVuY3J5cHRpb24gZm9yICVzIFslaV0sIG1vZGUgJWRcbiIsCisJCSBnY3J5X2NpcGhlcl9hbGdvX25hbWUgKHR2W2ldLmFsZ28pLAorCQkgdHZbaV0uYWxnbywgdHZbaV0ubW9kZSk7CisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRlLCB0dltpXS5hbGdvLCB0dltpXS5tb2RlLCAwKTsKKyAgICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGRkLCB0dltpXS5hbGdvLCB0dltpXS5tb2RlLCAwKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZ2NyeV9jaXBoZXJfb3BlbiBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAga2V5bGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuKHR2W2ldLmFsZ28pOworICAgICAgaWYgKCFrZXlsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkZSwgdHZbaV0ua2V5LCB0dltpXS5rZXlsZW4pOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGRkLCB0dltpXS5rZXksIHR2W2ldLmtleWxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgYmxrbGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKHR2W2ldLmFsZ28pOworICAgICAgaWYgKCFibGtsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGRlLCB0dltpXS5pdiwgdHZbaV0uaXZsZW4pOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGl2IChoZGQsIHR2W2ldLml2LCAgdHZbaV0uaXZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgLyogRmlsbCB0aGUgYnVmZmVyIHdpdGggb3VyIHRlc3QgcGF0dGVybi4gICovCisgICAgICBmb3IgKGo9MDsgaiA8IGJ1ZmxlbjsgaisrKQorICAgICAgICBidWZmZXJbal0gPSAoKGogJiAweGZmKSBeICgoaiA+PiA4KSAmIDB4ZmYpKTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGRlLCBvdXRidWYsIGJ1ZmxlbiwgYnVmZmVyLCBidWZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJnY3J5X2NpcGhlcl9lbmNyeXB0IChhbGdvICVkLCBtb2RlICVkKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIHR2W2ldLmFsZ28sIHR2W2ldLm1vZGUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgfQorCisgICAgICBnY3J5X21kX2hhc2hfYnVmZmVyIChHQ1JZX01EX1NIQTEsIGhhc2gsIG91dGJ1ZiwgYnVmbGVuKTsKKyNpZiAwCisgICAgICBwcmludGYgKCIvKlslZF0qL1xuIiwgaSk7CisgICAgICBmcHV0cyAoIiAgICAgIHsiLCBzdGRvdXQpOworICAgICAgZm9yIChqPTA7IGogPCAyMDsgaisrKQorICAgICAgICBwcmludGYgKCIgMHglMDJ4JWMlcyIsIGhhc2hbal0sIGo9PTE5PyAnICc6JywnLCBqID09IDk/ICJcbiAgICAgICAiOiIiKTsKKyAgICAgIHB1dHMgKCJ9Iik7CisjZW5kaWYKKworICAgICAgaWYgKG1lbWNtcCAoaGFzaCwgdHZbaV0udDFfaGFzaCwgMjApKQorICAgICAgICBmYWlsICgiZW5jcnlwdCBtaXNtYXRjaCAoYWxnbyAlZCwgbW9kZSAlZClcbiIsCisgICAgICAgICAgICAgIHR2W2ldLmFsZ28sIHR2W2ldLm1vZGUpOworCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZGQsIG91dGJ1ZiwgYnVmbGVuLCBOVUxMLCAwKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZ2NyeV9jaXBoZXJfZGVjcnlwdCAoYWxnbyAlZCwgbW9kZSAlZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB0dltpXS5hbGdvLCB0dltpXS5tb2RlLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgaWYgKG1lbWNtcCAoYnVmZmVyLCBvdXRidWYsIGJ1ZmxlbikpCisgICAgICAgIGZhaWwgKCJkZWNyeXB0IG1pc21hdGNoIChhbGdvICVkLCBtb2RlICVkKVxuIiwKKyAgICAgICAgICAgICAgdHZbaV0uYWxnbywgdHZbaV0ubW9kZSk7CisKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGUpOyBoZGUgPSBOVUxMOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZCk7IGhkZCA9IE5VTEw7CisgICAgfQorCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkNvbXBsZXRlZCBidWxrIGNpcGhlciBjaGVja3MuXG4iKTsKKyBsZWF2ZToKKyAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkZSk7CisgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZGQpOworICBnY3J5X2ZyZWUgKGJ1ZmZlcl9iYXNlKTsKKyAgZ2NyeV9mcmVlIChvdXRidWZfYmFzZSk7Cit9CisKKworLyogVGhlIGNvcmUgb2YgdGhlIGNpcGhlciBjaGVjay4gIEluIGFkZGl0aW9uIHRvIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZAorICAgdG8gY2hlY2tfb25lX2NpcGhlciBpdCBhbHNvIHJlY2VpdmVzIHRoZSBLRVkgYW5kIHRoZSBwbGFpbiBkYXRhLgorICAgUEFTUyBpcyBwcmludGVkIHdpdGggZXJyb3IgbWVzc2FnZXMuICBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uCisgICBzdWNjZXNzLiAgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX29uZV9jaXBoZXJfY29yZSAoaW50IGFsZ28sIGludCBtb2RlLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90IG5rZXksCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWluLCBzaXplX3QgbnBsYWluLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmc2hpZnQsIGludCBwYXNzKQoreworICBnY3J5X2NpcGhlcl9oZF90IGhkOworICB1bnNpZ25lZCBjaGFyIGluX2J1ZmZlclsxMDQwKzFdLCBvdXRfYnVmZmVyWzEwNDArMV07CisgIHVuc2lnbmVkIGNoYXIgKmluLCAqb3V0OworICBpbnQga2V5bGVuOworICBnY3J5X2Vycm9yX3QgZXJyID0gMDsKKworICBhc3NlcnQgKG5rZXkgPT0gMzIpOworICBhc3NlcnQgKG5wbGFpbiA9PSAxMDQwKTsKKyAgYXNzZXJ0IChzaXplb2YoaW5fYnVmZmVyKSA9PSBucGxhaW4gKyAxKTsKKyAgYXNzZXJ0IChzaXplb2Yob3V0X2J1ZmZlcikgPT0gc2l6ZW9mKGluX2J1ZmZlcikpOworCisgIGlmICghYnVmc2hpZnQpCisgICAgeworICAgICAgaW4gPSBpbl9idWZmZXI7CisgICAgICBvdXQgPSBvdXRfYnVmZmVyOworICAgIH0KKyAgZWxzZSBpZiAoYnVmc2hpZnQgPT0gMSkKKyAgICB7CisgICAgICBpbiA9IGluX2J1ZmZlcisxOworICAgICAgb3V0ID0gb3V0X2J1ZmZlcjsKKyAgICB9CisgIGVsc2UgaWYgKGJ1ZnNoaWZ0ID09IDIpCisgICAgeworICAgICAgaW4gPSBpbl9idWZmZXIrMTsKKyAgICAgIG91dCA9IG91dF9idWZmZXIrMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbiA9IGluX2J1ZmZlcjsKKyAgICAgIG91dCA9IG91dF9idWZmZXIrMTsKKyAgICB9CisKKyAga2V5bGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIChhbGdvKTsKKyAgaWYgKCFrZXlsZW4pCisgICAgeworICAgICAgZmFpbCAoInBhc3MgJWQsIGFsZ28gJWQsIG1vZGUgJWQsIGdjcnlfY2lwaGVyX2dldF9hbGdvX2tleWxlbiBmYWlsZWRcbiIsCisJICAgIHBhc3MsIGFsZ28sIG1vZGUpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoa2V5bGVuIDwgNDAgLyA4IHx8IGtleWxlbiA+IDMyKQorICAgIHsKKyAgICAgIGZhaWwgKCJwYXNzICVkLCBhbGdvICVkLCBtb2RlICVkLCBrZXlsZW5ndGggcHJvYmxlbSAoJWQpXG4iLCBwYXNzLCBhbGdvLCBtb2RlLCBrZXlsZW4pOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGQsIGFsZ28sIG1vZGUsIGZsYWdzKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgicGFzcyAlZCwgYWxnbyAlZCwgbW9kZSAlZCwgZ2NyeV9jaXBoZXJfb3BlbiBmYWlsZWQ6ICVzXG4iLAorCSAgICBwYXNzLCBhbGdvLCBtb2RlLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRrZXkgKGhkLCBrZXksIGtleWxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoInBhc3MgJWQsIGFsZ28gJWQsIG1vZGUgJWQsIGdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorCSAgICBwYXNzLCBhbGdvLCBtb2RlLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGQsIG91dCwgbnBsYWluLCBwbGFpbiwgbnBsYWluKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgicGFzcyAlZCwgYWxnbyAlZCwgbW9kZSAlZCwgZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorCSAgICBwYXNzLCBhbGdvLCBtb2RlLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgZ2NyeV9jaXBoZXJfcmVzZXQgKGhkKTsKKworICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZCwgaW4sIG5wbGFpbiwgb3V0LCBucGxhaW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJwYXNzICVkLCBhbGdvICVkLCBtb2RlICVkLCBnY3J5X2NpcGhlcl9kZWNyeXB0IGZhaWxlZDogJXNcbiIsCisJICAgIHBhc3MsIGFsZ28sIG1vZGUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobWVtY21wIChwbGFpbiwgaW4sIG5wbGFpbikpCisgICAgZmFpbCAoInBhc3MgJWQsIGFsZ28gJWQsIG1vZGUgJWQsIGVuY3J5cHQtZGVjcnlwdCBtaXNtYXRjaFxuIiwKKyAgICAgICAgICBwYXNzLCBhbGdvLCBtb2RlKTsKKworICAvKiBBZ2FpbiwgdXNpbmcgaW4tcGxhY2UgZW5jcnlwdGlvbi4gICovCisgIGdjcnlfY2lwaGVyX3Jlc2V0IChoZCk7CisKKyAgbWVtY3B5IChvdXQsIHBsYWluLCBucGxhaW4pOworICBlcnIgPSBnY3J5X2NpcGhlcl9lbmNyeXB0IChoZCwgb3V0LCBucGxhaW4sIE5VTEwsIDApOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJwYXNzICVkLCBhbGdvICVkLCBtb2RlICVkLCBpbi1wbGFjZSwgZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6IgorICAgICAgICAgICAgIiAlc1xuIiwKKwkgICAgcGFzcywgYWxnbywgbW9kZSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGdjcnlfY2lwaGVyX3Jlc2V0IChoZCk7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dCwgbnBsYWluLCBOVUxMLCAwKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgicGFzcyAlZCwgYWxnbyAlZCwgbW9kZSAlZCwgaW4tcGxhY2UsIGdjcnlfY2lwaGVyX2RlY3J5cHQgZmFpbGVkOiIKKyAgICAgICAgICAgICIgJXNcbiIsCisJICAgIHBhc3MsIGFsZ28sIG1vZGUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobWVtY21wIChwbGFpbiwgb3V0LCBucGxhaW4pKQorICAgIGZhaWwgKCJwYXNzICVkLCBhbGdvICVkLCBtb2RlICVkLCBpbi1wbGFjZSwgZW5jcnlwdC1kZWNyeXB0IG1pc21hdGNoXG4iLAorICAgICAgICAgIHBhc3MsIGFsZ28sIG1vZGUpOworCisKKyAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKworICByZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkCitjaGVja19vbmVfY2lwaGVyIChpbnQgYWxnbywgaW50IG1vZGUsIGludCBmbGFncykKK3sKKyAgY2hhciBrZXlbMzIrMV07CisgIHVuc2lnbmVkIGNoYXIgcGxhaW5bMTA0MCsxXTsKKyAgaW50IGJ1ZnNoaWZ0LCBpOworCisgIGZvciAoYnVmc2hpZnQ9MDsgYnVmc2hpZnQgPCA0OyBidWZzaGlmdCsrKQorICAgIHsKKyAgICAgIC8qIFBhc3MgMDogU3RhbmRhcmQgdGVzdC4gICovCisgICAgICBtZW1jcHkgKGtleSwgIjAxMjM0NTY3ODlhYmNkZWYuLDsvW117fS09QUJDREVGIiwgMzIpOworICAgICAgbWVtY3B5IChwbGFpbiwgImZvb2JhcjQyRk9PQkFSMTciLCAxNik7CisgICAgICBmb3IgKGkgPSAxNjsgaSA8IDEwNDA7IGkgKz0gMTYpCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkgKCZwbGFpbltpXSwgJnBsYWluW2ktMTZdLCAxNik7CisgICAgICAgICAgaWYgKCErK3BsYWluW2krN10pCisgICAgICAgICAgICBwbGFpbltpKzZdKys7CisgICAgICAgICAgaWYgKCErK3BsYWluW2krMTVdKQorICAgICAgICAgICAgcGxhaW5baSsxNF0rKzsKKyAgICAgICAgfQorCisgICAgICBpZiAoY2hlY2tfb25lX2NpcGhlcl9jb3JlIChhbGdvLCBtb2RlLCBmbGFncywga2V5LCAzMiwgcGxhaW4sIDEwNDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaGlmdCwgMCsxMCpidWZzaGlmdCkpCisgICAgICAgIHJldHVybjsKKworICAgICAgLyogUGFzcyAxOiBLZXkgbm90IGFsaWduZWQuICAqLworICAgICAgbWVtbW92ZSAoa2V5KzEsIGtleSwgMzIpOworICAgICAgaWYgKGNoZWNrX29uZV9jaXBoZXJfY29yZSAoYWxnbywgbW9kZSwgZmxhZ3MsIGtleSsxLCAzMiwgcGxhaW4sIDEwNDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaGlmdCwgMSsxMCpidWZzaGlmdCkpCisgICAgICAgIHJldHVybjsKKworICAgICAgLyogUGFzcyAyOiBLZXkgbm90IGFsaWduZWQgYW5kIGRhdGEgbm90IGFsaWduZWQuICAqLworICAgICAgbWVtbW92ZSAocGxhaW4rMSwgcGxhaW4sIDEwNDApOworICAgICAgaWYgKGNoZWNrX29uZV9jaXBoZXJfY29yZSAoYWxnbywgbW9kZSwgZmxhZ3MsIGtleSsxLCAzMiwgcGxhaW4rMSwgMTA0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNoaWZ0LCAyKzEwKmJ1ZnNoaWZ0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgICAvKiBQYXNzIDM6IEtleSBhbGlnbmVkIGFuZCBkYXRhIG5vdCBhbGlnbmVkLiAgKi8KKyAgICAgIG1lbW1vdmUgKGtleSwga2V5KzEsIDMyKTsKKyAgICAgIGlmIChjaGVja19vbmVfY2lwaGVyX2NvcmUgKGFsZ28sIG1vZGUsIGZsYWdzLCBrZXksIDMyLCBwbGFpbisxLCAxMDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2hpZnQsIDMrMTAqYnVmc2hpZnQpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgIHJldHVybjsKK30KKworCisKK3N0YXRpYyB2b2lkCitjaGVja19jaXBoZXJzICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgaW50IGFsZ29zW10gPSB7CisjaWYgVVNFX0JMT1dGSVNICisgICAgR0NSWV9DSVBIRVJfQkxPV0ZJU0gsCisjZW5kaWYKKyNpZiBVU0VfREVTCisgICAgR0NSWV9DSVBIRVJfREVTLAorICAgIEdDUllfQ0lQSEVSXzNERVMsCisjZW5kaWYKKyNpZiBVU0VfQ0FTVDUKKyAgICBHQ1JZX0NJUEhFUl9DQVNUNSwKKyNlbmRpZgorI2lmIFVTRV9BRVMKKyAgICBHQ1JZX0NJUEhFUl9BRVMsCisgICAgR0NSWV9DSVBIRVJfQUVTMTkyLAorICAgIEdDUllfQ0lQSEVSX0FFUzI1NiwKKyNlbmRpZgorI2lmIFVTRV9UV09GSVNICisgICAgR0NSWV9DSVBIRVJfVFdPRklTSCwKKyAgICBHQ1JZX0NJUEhFUl9UV09GSVNIMTI4LAorI2VuZGlmCisjaWYgVVNFX1NFUlBFTlQKKyAgICBHQ1JZX0NJUEhFUl9TRVJQRU5UMTI4LAorICAgIEdDUllfQ0lQSEVSX1NFUlBFTlQxOTIsCisgICAgR0NSWV9DSVBIRVJfU0VSUEVOVDI1NiwKKyNlbmRpZgorI2lmIFVTRV9SRkMyMjY4CisgICAgR0NSWV9DSVBIRVJfUkZDMjI2OF80MCwKKyNlbmRpZgorI2lmIFVTRV9TRUVECisgICAgR0NSWV9DSVBIRVJfU0VFRCwKKyNlbmRpZgorI2lmIFVTRV9DQU1FTExJQQorICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTI4LAorICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMTkyLAorICAgIEdDUllfQ0lQSEVSX0NBTUVMTElBMjU2LAorI2VuZGlmCisjaWYgVVNFX0lERUEKKyAgICBHQ1JZX0NJUEhFUl9JREVBLAorI2VuZGlmCisjaWYgVVNFX0dPU1QyODE0NworICAgIEdDUllfQ0lQSEVSX0dPU1QyODE0NywKKyNlbmRpZgorICAgIDAKKyAgfTsKKyAgc3RhdGljIGNvbnN0IGludCBhbGdvczJbXSA9IHsKKyNpZiBVU0VfQVJDRk9VUgorICAgIEdDUllfQ0lQSEVSX0FSQ0ZPVVIsCisjZW5kaWYKKyNpZiBVU0VfU0FMU0EyMAorICAgIEdDUllfQ0lQSEVSX1NBTFNBMjAsCisgICAgR0NSWV9DSVBIRVJfU0FMU0EyMFIxMiwKKyNlbmRpZgorICAgIDAKKyAgfTsKKyAgaW50IGk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiU3RhcnRpbmcgQ2lwaGVyIGNoZWNrcy5cbiIpOworICBmb3IgKGkgPSAwOyBhbGdvc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChnY3J5X2NpcGhlcl90ZXN0X2FsZ28gKGFsZ29zW2ldKSAmJiBpbl9maXBzX21vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgYWxnb3JpdGhtICVkIG5vdCBhdmFpbGFibGUgaW4gZmlwcyBtb2RlXG4iLAorCQkgICAgIGFsZ29zW2ldKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHZlcmJvc2UpCisJZnByaW50ZiAoc3RkZXJyLCAiICBjaGVja2luZyAlcyBbJWldXG4iLAorCQkgZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChhbGdvc1tpXSksCisJCSBnY3J5X2NpcGhlcl9tYXBfbmFtZSAoZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChhbGdvc1tpXSkpKTsKKworICAgICAgY2hlY2tfb25lX2NpcGhlciAoYWxnb3NbaV0sIEdDUllfQ0lQSEVSX01PREVfRUNCLCAwKTsKKyAgICAgIGNoZWNrX29uZV9jaXBoZXIgKGFsZ29zW2ldLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiwgMCk7CisgICAgICBjaGVja19vbmVfY2lwaGVyIChhbGdvc1tpXSwgR0NSWV9DSVBIRVJfTU9ERV9PRkIsIDApOworICAgICAgY2hlY2tfb25lX2NpcGhlciAoYWxnb3NbaV0sIEdDUllfQ0lQSEVSX01PREVfQ0JDLCAwKTsKKyAgICAgIGNoZWNrX29uZV9jaXBoZXIgKGFsZ29zW2ldLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQywgR0NSWV9DSVBIRVJfQ0JDX0NUUyk7CisgICAgICBjaGVja19vbmVfY2lwaGVyIChhbGdvc1tpXSwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIDApOworICAgICAgaWYgKGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbiAoYWxnb3NbaV0pID09IEdDUllfR0NNX0JMT0NLX0xFTikKKyAgICAgICAgY2hlY2tfb25lX2NpcGhlciAoYWxnb3NbaV0sIEdDUllfQ0lQSEVSX01PREVfR0NNLCAwKTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgYWxnb3MyW2ldOyBpKyspCisgICAgeworICAgICAgaWYgKGdjcnlfY2lwaGVyX3Rlc3RfYWxnbyAoYWxnb3NbaV0pICYmIGluX2ZpcHNfbW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBhbGdvcml0aG0gJWQgbm90IGF2YWlsYWJsZSBpbiBmaXBzIG1vZGVcbiIsCisJCSAgICAgYWxnb3NbaV0pOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAodmVyYm9zZSkKKwlmcHJpbnRmIChzdGRlcnIsICIgIGNoZWNraW5nICVzXG4iLAorCQkgZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChhbGdvczJbaV0pKTsKKworICAgICAgY2hlY2tfb25lX2NpcGhlciAoYWxnb3MyW2ldLCBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTSwgMCk7CisgICAgfQorICAvKiB3ZSBoYXZlIG5vdyBydW4gYWxsIGNpcGhlcidzIHNlbGZ0ZXN0cyAqLworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkNvbXBsZXRlZCBDaXBoZXIgY2hlY2tzLlxuIik7CisKKyAgLyogVE9ETzogYWRkIHNvbWUgZXh0cmEgZW5jcnlwdGlvbiB0byB0ZXN0IHRoZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zICovCit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2NpcGhlcl9tb2Rlcyh2b2lkKQoreworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJTdGFydGluZyBDaXBoZXIgTW9kZSBjaGVja3MuXG4iKTsKKworICBjaGVja19hZXMxMjhfY2JjX2N0c19jaXBoZXIgKCk7CisgIGNoZWNrX2NiY19tYWNfY2lwaGVyICgpOworICBjaGVja19jdHJfY2lwaGVyICgpOworICBjaGVja19jZmJfY2lwaGVyICgpOworICBjaGVja19vZmJfY2lwaGVyICgpOworICBjaGVja19jY21fY2lwaGVyICgpOworICBjaGVja19nY21fY2lwaGVyICgpOworICBjaGVja19zdHJlYW1fY2lwaGVyICgpOworICBjaGVja19zdHJlYW1fY2lwaGVyX2xhcmdlX2Jsb2NrICgpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkNvbXBsZXRlZCBDaXBoZXIgTW9kZSBjaGVja3MuXG4iKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX29uZV9tZCAoaW50IGFsZ28sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sIGNvbnN0IGNoYXIgKmV4cGVjdCkKK3sKKyAgZ2NyeV9tZF9oZF90IGhkLCBoZDI7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBtZGxlbjsKKyAgaW50IGk7CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGVyciA9IGdjcnlfbWRfb3BlbiAoJmhkLCBhbGdvLCAwKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9vcGVuIGZhaWxlZDogJXNcbiIsIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG1kbGVuID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKyAgaWYgKG1kbGVuIDwgMSB8fCBtZGxlbiA+IDUwMCkKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9nZXRfYWxnb19kbGVuIGZhaWxlZDogJWRcbiIsIGFsZ28sIG1kbGVuKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCpkYXRhID09ICchJyAmJiAhZGF0YVsxXSkKKyAgICB7CQkJCS8qIGhhc2ggb25lIG1pbGxpb24gdGltZXMgYSAiYSIgKi8KKyAgICAgIGNoYXIgYWFhWzEwMDBdOworCisgICAgICAvKiBXcml0ZSBpbiBvZGQgc2l6ZSBjaHVua3Mgc28gdGhhdCB3ZSB0ZXN0IHRoZSBidWZmZXJpbmcuICAqLworICAgICAgbWVtc2V0IChhYWEsICdhJywgMTAwMCk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBnY3J5X21kX3dyaXRlIChoZCwgYWFhLCAxMDAwKTsKKyAgICB9CisgIGVsc2UKKyAgICBnY3J5X21kX3dyaXRlIChoZCwgZGF0YSwgbGVuKTsKKworICBlcnIgPSBnY3J5X21kX2NvcHkgKCZoZDIsIGhkKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9jb3B5IGZhaWxlZDogJXNcbiIsIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgfQorCisgIGdjcnlfbWRfY2xvc2UgKGhkKTsKKworICBwID0gZ2NyeV9tZF9yZWFkIChoZDIsIGFsZ28pOworCisgIGlmIChtZW1jbXAgKHAsIGV4cGVjdCwgbWRsZW4pKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNvbXB1dGVkOiAiKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQorCXByaW50ZiAoIiUwMnggIiwgcFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG5leHBlY3RlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIGV4cGVjdFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG4iKTsKKworICAgICAgZmFpbCAoImFsZ28gJWQsIGRpZ2VzdCBtaXNtYXRjaFxuIiwgYWxnbyk7CisgICAgfQorCisgIGdjcnlfbWRfY2xvc2UgKGhkMik7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX29uZV9tZF9tdWx0aSAoaW50IGFsZ28sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sIGNvbnN0IGNoYXIgKmV4cGVjdCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X2J1ZmZlcl90IGlvdlszXTsKKyAgaW50IGlvdmNudDsKKyAgY2hhciBkaWdlc3RbNjRdOworICBpbnQgbWRsZW47CisgIGludCBpOworCisgIG1kbGVuID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKyAgaWYgKG1kbGVuIDwgMSB8fCBtZGxlbiA+IDY0KQorICAgIHsKKyAgICAgIGZhaWwgKCJjaGVja19vbmVfbWRfbXVsdGk6IGFsZ28gJWQsIGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiBmYWlsZWQ6ICVkXG4iLAorICAgICAgICAgICAgYWxnbywgbWRsZW4pOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoKmRhdGEgPT0gJyEnICYmICFkYXRhWzFdKQorICAgIHJldHVybjsgIC8qIFdlIGNhbid0IGRvIHRoYXQgaGVyZS4gICovCisKKyAgbWVtc2V0IChpb3YsIDAsIHNpemVvZiBpb3YpOworCisgIGlvdlswXS5kYXRhID0gKHZvaWQqKWRhdGE7CisgIGlmIChsZW4pCisgICAgeworICAgICAgaW92WzBdLmxlbiA9IDE7CisgICAgICBsZW4tLTsKKyAgICAgIGRhdGErKzsKKyAgICB9CisgIGlvdmNudCA9IDE7CisgIGlmIChsZW4gPj0gNCkKKyAgICB7CisgICAgICBpb3ZbaW92Y250XS5kYXRhID0gKHZvaWQqKWRhdGE7CisgICAgICBpb3ZbaW92Y250XS5sZW4gPSA0OworICAgICAgaW92Y250Kys7CisgICAgICBkYXRhICs9IDQ7CisgICAgICBsZW4gIC09IDQ7CisgICAgfQorICBpb3ZbaW92Y250XS5kYXRhID0gKHZvaWQqKWRhdGE7CisgIGlvdltpb3ZjbnRdLmxlbiA9IGxlbjsKKyAgaW92Y250Kys7CisgIGFzc2VydCAoaW92Y250IDw9IERJTSAoaW92KSk7CisKKyAgZXJyID0gZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgKGFsZ28sIDAsIGRpZ2VzdCwgaW92LCBpb3ZjbnQpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJjaGVja19vbmVfbWRfbXVsdGk6IGFsZ28gJWQsIGdjcnlfaGFzaF9idWZmZXJzIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKG1lbWNtcCAoZGlnZXN0LCBleHBlY3QsIG1kbGVuKSkKKyAgICB7CisgICAgICBwcmludGYgKCJjb21wdXRlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIGRpZ2VzdFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG5leHBlY3RlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIGV4cGVjdFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG4iKTsKKworICAgICAgZmFpbCAoImNoZWNrX29uZV9tZF9tdWx0aTogYWxnbyAlZCwgZGlnZXN0IG1pc21hdGNoXG4iLCBhbGdvKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2RpZ2VzdHMgKHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxnb3MKKyAgeworICAgIGludCBtZDsKKyAgICBjb25zdCBjaGFyICpkYXRhOworICAgIGNvbnN0IGNoYXIgKmV4cGVjdDsKKyAgfSBhbGdvc1tdID0KKyAgICB7CisgICAgICB7IEdDUllfTURfTUQ0LCAiIiwKKwkiXHgzMVx4RDZceENGXHhFMFx4RDFceDZBXHhFOVx4MzFceEI3XHgzQ1x4NTlceEQ3XHhFMFx4QzBceDg5XHhDMCIgfSwKKyAgICAgIHsgR0NSWV9NRF9NRDQsICJhIiwKKwkiXHhiZFx4ZTVceDJjXHhiM1x4MWRceGUzXHgzZVx4NDZceDI0XHg1ZVx4MDVceGZiXHhkYlx4ZDZceGZiXHgyNCIgfSwKKyAgICAgIHsJR0NSWV9NRF9NRDQsICJtZXNzYWdlIGRpZ2VzdCIsCisJIlx4ZDlceDEzXHgwYVx4ODFceDY0XHg1NFx4OWZceGU4XHgxOFx4ODdceDQ4XHgwNlx4ZTFceGM3XHgwMVx4NGIiIH0sCisgICAgICB7CUdDUllfTURfTUQ1LCAiIiwKKwkiXHhENFx4MURceDhDXHhEOVx4OEZceDAwXHhCMlx4MDRceEU5XHg4MFx4MDlceDk4XHhFQ1x4RjhceDQyXHg3RSIgfSwKKyAgICAgIHsJR0NSWV9NRF9NRDUsICJhIiwKKwkiXHgwQ1x4QzFceDc1XHhCOVx4QzBceEYxXHhCNlx4QThceDMxXHhDM1x4OTlceEUyXHg2OVx4NzdceDI2XHg2MSIgfSwKKyAgICAgIHsgR0NSWV9NRF9NRDUsICJhYmMiLAorCSJceDkwXHgwMVx4NTBceDk4XHgzQ1x4RDJceDRGXHhCMFx4RDZceDk2XHgzRlx4N0RceDI4XHhFMVx4N0ZceDcyIiB9LAorICAgICAgeyBHQ1JZX01EX01ENSwgIm1lc3NhZ2UgZGlnZXN0IiwKKwkiXHhGOVx4NkJceDY5XHg3RFx4N0NceEI3XHg5M1x4OERceDUyXHg1QVx4MkZceDMxXHhBQVx4RjFceDYxXHhEMCIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEExLCAiYWJjIiwKKwkiXHhBOVx4OTlceDNFXHgzNlx4NDdceDA2XHg4MVx4NkFceEJBXHgzRSIKKwkiXHgyNVx4NzFceDc4XHg1MFx4QzJceDZDXHg5Q1x4RDBceEQ4XHg5RCIgfSwKKyAgICAgIHsJR0NSWV9NRF9TSEExLAorCSJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisJIlx4ODRceDk4XHgzRVx4NDRceDFDXHgzQlx4RDJceDZFXHhCQVx4QUUiCisJIlx4NEFceEExXHhGOVx4NTFceDI5XHhFNVx4RTVceDQ2XHg3MFx4RjEiIH0sCisgICAgICB7IEdDUllfTURfU0hBMSwgIiEiIC8qIGtsdWRnZSBmb3IgImEiKjEwMDAwMDAgKi8gLAorCSJceDM0XHhBQVx4OTdceDNDXHhENFx4QzRceERBXHhBNFx4RjZceDFFIgorCSJceEVCXHgyQlx4REJceEFEXHgyN1x4MzFceDY1XHgzNFx4MDFceDZGIiB9LAorICAgICAgLyogRnJvbSBSRkMzODc0ICovCisgICAgICB7CUdDUllfTURfU0hBMjI0LCAiYWJjIiwKKwkiXHgyM1x4MDlceDdkXHgyMlx4MzRceDA1XHhkOFx4MjJceDg2XHg0Mlx4YTRceDc3XHhiZFx4YTJceDU1XHhiMyIKKwkiXHgyYVx4YWRceGJjXHhlNFx4YmRceGEwXHhiM1x4ZjdceGUzXHg2Y1x4OWRceGE3IiB9LAorICAgICAgewlHQ1JZX01EX1NIQTIyNCwKKwkiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorCSJceDc1XHgzOFx4OGJceDE2XHg1MVx4MjdceDc2XHhjY1x4NWRceGJhXHg1ZFx4YTFceGZkXHg4OVx4MDFceDUwIgorCSJceGIwXHhjNlx4NDVceDVjXHhiNFx4ZjVceDhiXHgxOVx4NTJceDUyXHgyNVx4MjUiIH0sCisgICAgICB7CUdDUllfTURfU0hBMjI0LCAiISIsCisJIlx4MjBceDc5XHg0Nlx4NTVceDk4XHgwY1x4OTFceGQ4XHhiYlx4YjRceGMxXHhlYVx4OTdceDYxXHg4YVx4NGIiCisJIlx4ZjBceDNmXHg0Mlx4NThceDE5XHg0OFx4YjJceGVlXHg0ZVx4ZTdceGFkXHg2NyIgfSwKKyAgICAgIHsJR0NSWV9NRF9TSEEyNTYsICJhYmMiLAorCSJceGJhXHg3OFx4MTZceGJmXHg4Zlx4MDFceGNmXHhlYVx4NDFceDQxXHg0MFx4ZGVceDVkXHhhZVx4MjJceDIzIgorCSJceGIwXHgwM1x4NjFceGEzXHg5Nlx4MTdceDdhXHg5Y1x4YjRceDEwXHhmZlx4NjFceGYyXHgwMFx4MTVceGFkIiB9LAorICAgICAgewlHQ1JZX01EX1NIQTI1NiwKKwkiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorCSJceDI0XHg4ZFx4NmFceDYxXHhkMlx4MDZceDM4XHhiOFx4ZTVceGMwXHgyNlx4OTNceDBjXHgzZVx4NjBceDM5IgorCSJceGEzXHgzY1x4ZTRceDU5XHg2NFx4ZmZceDIxXHg2N1x4ZjZceGVjXHhlZFx4ZDRceDE5XHhkYlx4MDZceGMxIiB9LAorICAgICAgewlHQ1JZX01EX1NIQTI1NiwgIiEiLAorCSJceGNkXHhjN1x4NmVceDVjXHg5OVx4MTRceGZiXHg5Mlx4ODFceGExXHhjN1x4ZTJceDg0XHhkN1x4M2VceDY3IgorCSJceGYxXHg4MFx4OWFceDQ4XHhhNFx4OTdceDIwXHgwZVx4MDRceDZkXHgzOVx4Y2NceGM3XHgxMVx4MmNceGQwIiB9LAorICAgICAgewlHQ1JZX01EX1NIQTM4NCwgImFiYyIsCisJIlx4Y2JceDAwXHg3NVx4M2ZceDQ1XHhhM1x4NWVceDhiXHhiNVx4YTBceDNkXHg2OVx4OWFceGM2XHg1MFx4MDciCisJIlx4MjdceDJjXHgzMlx4YWJceDBlXHhkZVx4ZDFceDYzXHgxYVx4OGJceDYwXHg1YVx4NDNceGZmXHg1Ylx4ZWQiCisJIlx4ODBceDg2XHgwN1x4MmJceGExXHhlN1x4Y2NceDIzXHg1OFx4YmFceGVjXHhhMVx4MzRceGM4XHgyNVx4YTciIH0sCisgICAgICB7CUdDUllfTURfU0hBNTEyLCAiYWJjIiwKKwkiXHhERFx4QUZceDM1XHhBMVx4OTNceDYxXHg3QVx4QkFceENDXHg0MVx4NzNceDQ5XHhBRVx4MjBceDQxXHgzMSIKKwkiXHgxMlx4RTZceEZBXHg0RVx4ODlceEE5XHg3RVx4QTJceDBBXHg5RVx4RUVceEU2XHg0Qlx4NTVceEQzXHg5QSIKKwkiXHgyMVx4OTJceDk5XHgyQVx4MjdceDRGXHhDMVx4QThceDM2XHhCQVx4M0NceDIzXHhBM1x4RkVceEVCXHhCRCIKKwkiXHg0NVx4NERceDQ0XHgyM1x4NjRceDNDXHhFOFx4MEVceDJBXHg5QVx4QzlceDRGXHhBNVx4NENceEE0XHg5RiIgfSwKKyAgICAgIHsJR0NSWV9NRF9STUQxNjAsICIiLAorCSJceDljXHgxMVx4ODVceGE1XHhjNVx4ZTlceGZjXHg1NFx4NjFceDI4IgorCSJceDA4XHg5N1x4N2VceGU4XHhmNVx4NDhceGIyXHgyNVx4OGRceDMxIiB9LAorICAgICAgewlHQ1JZX01EX1JNRDE2MCwgImEiLAorCSJceDBiXHhkY1x4OWRceDJkXHgyNVx4NmJceDNlXHhlOVx4ZGFceGFlIgorCSJceDM0XHg3Ylx4ZTZceGY0XHhkY1x4ODNceDVhXHg0Nlx4N2ZceGZlIiB9LAorICAgICAgewlHQ1JZX01EX1JNRDE2MCwgImFiYyIsCisJIlx4OGVceGIyXHgwOFx4ZjdceGUwXHg1ZFx4OThceDdhXHg5Ylx4MDQiCisJIlx4NGFceDhlXHg5OFx4YzZceGIwXHg4N1x4ZjFceDVhXHgwYlx4ZmMiIH0sCisgICAgICB7CUdDUllfTURfUk1EMTYwLCAibWVzc2FnZSBkaWdlc3QiLAorCSJceDVkXHgwNlx4ODlceGVmXHg0OVx4ZDJceGZhXHhlNVx4NzJceGI4IgorCSJceDgxXHhiMVx4MjNceGE4XHg1Zlx4ZmFceDIxXHg1OVx4NWZceDM2IiB9LAorICAgICAgewlHQ1JZX01EX0NSQzMyLCAiIiwgIlx4MDBceDAwXHgwMFx4MDAiIH0sCisgICAgICB7CUdDUllfTURfQ1JDMzIsICJmb28iLCAiXHg4Y1x4NzNceDY1XHgyMSIgfSwKKyAgICAgIHsgR0NSWV9NRF9DUkMzMl9SRkMxNTEwLCAiIiwgIlx4MDBceDAwXHgwMFx4MDAiIH0sCisgICAgICB7CUdDUllfTURfQ1JDMzJfUkZDMTUxMCwgImZvbyIsICJceDczXHgzMlx4YmNceDMzIiB9LAorICAgICAgewlHQ1JZX01EX0NSQzMyX1JGQzE1MTAsICJ0ZXN0MDEyMzQ1Njc4OSIsICJceGI4XHgzZVx4ODhceGQ2IiB9LAorICAgICAgewlHQ1JZX01EX0NSQzMyX1JGQzE1MTAsICJNQVNTQUNIVlNFVFRTIElOU1RJVFZURSBPRiBURUNITk9MT0dZIiwKKwkiXHhlM1x4NDFceDgwXHhmNyIgfSwKKyNpZiAwCisgICAgICB7CUdDUllfTURfQ1JDMzJfUkZDMTUxMCwgIlx4ODBceDAwIiwgIlx4M2JceDgzXHg5OFx4NGIiIH0sCisgICAgICB7CUdDUllfTURfQ1JDMzJfUkZDMTUxMCwgIlx4MDBceDA4IiwgIlx4MGVceGRiXHg4OFx4MzIiIH0sCisgICAgICB7CUdDUllfTURfQ1JDMzJfUkZDMTUxMCwgIlx4MDBceDgwIiwgIlx4ZWRceGI4XHg4M1x4MjAiIH0sCisjZW5kaWYKKyAgICAgIHsJR0NSWV9NRF9DUkMzMl9SRkMxNTEwLCAiXHg4MCIsICJceGVkXHhiOFx4ODNceDIwIiB9LAorI2lmIDAKKyAgICAgIHsJR0NSWV9NRF9DUkMzMl9SRkMxNTEwLCAiXHg4MFx4MDBceDAwXHgwMCIsICJceGVkXHg1OVx4YjZceDNiIiB9LAorICAgICAgewlHQ1JZX01EX0NSQzMyX1JGQzE1MTAsICJceDAwXHgwMFx4MDBceDAxIiwgIlx4NzdceDA3XHgzMFx4OTYiIH0sCisjZW5kaWYKKyAgICAgIHsJR0NSWV9NRF9DUkMyNF9SRkMyNDQwLCAiIiwgIlx4YjdceDA0XHhjZSIgfSwKKyAgICAgIHsJR0NSWV9NRF9DUkMyNF9SRkMyNDQwLCAiZm9vIiwgIlx4NGZceGMyXHg1NSIgfSwKKworICAgICAgewlHQ1JZX01EX1RJR0VSLCAiIiwKKwkiXHgyNFx4RjBceDEzXHgwQ1x4NjNceEFDXHg5M1x4MzJceDE2XHgxNlx4NkVceDc2IgorCSJceEIxXHhCQlx4OTJceDVGXHhGM1x4NzNceERFXHgyRFx4NDlceDU4XHg0RVx4N0EiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIsICJhYmMiLAorCSJceEYyXHg1OFx4QzFceEU4XHg4NFx4MTRceEFCXHgyQVx4NTJceDdBXHhCNVx4NDEiCisJIlx4RkZceEM1XHhCOFx4QkZceDkzXHg1Rlx4N0JceDk1XHgxQ1x4MTNceDI5XHg1MSIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUiwgIlRpZ2VyIiwKKwkiXHg5Rlx4MDBceEY1XHg5OVx4MDdceDIzXHgwMFx4RERceDI3XHg2QVx4QkJceDM4IgorCSJceEM4XHhFQlx4NkRceEVDXHgzN1x4NzlceDBDXHgxMVx4NkZceDlEXHgyQlx4REYiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIsICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmciCisJImhpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky0iLAorCSJceDg3XHhGQlx4MkFceDkwXHg4M1x4ODVceDFDXHhGN1x4NDdceDBEXHgyQ1x4RjgiCisJIlx4MTBceEU2XHhERlx4OUVceEI1XHg4Nlx4NDRceDUwXHgzNFx4QTVceEEzXHg4NiIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUiwgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaPWFiY2RlZiIKKwkiZ2hpamtsbW5vcHFyc3R1dnd4eXorMDEyMzQ1Njc4OSIsCisJIlx4NDZceDdEXHhCOFx4MDhceDYzXHhFQlx4Q0VceDQ4XHg4RFx4RjFceENEXHgxMiIKKwkiXHg2MVx4NjVceDVEXHhFOVx4NTdceDg5XHg2NVx4NjVceDk3XHg1Rlx4OTFceDk3IiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSLCAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sICIKKwkiYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtIiwKKwkiXHgwQ1x4NDFceDBBXHgwNFx4MjlceDY4XHg4Nlx4OEFceDE2XHg3MVx4REFceDVBIgorCSJceDNGXHhEMlx4OUFceDcyXHg1RVx4QzFceEU0XHg1N1x4RDNceENEXHhCM1x4MDMiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIsICJUaWdlciAtIEEgRmFzdCBOZXcgSGFzaCBGdW5jdGlvbiwgIgorCSJieSBSb3NzIEFuZGVyc29uIGFuZCBFbGkgQmloYW0sIHByb2NlZWRpbmdzIG9mIEZhIgorCSJzdCBTb2Z0d2FyZSBFbmNyeXB0aW9uIDMsIENhbWJyaWRnZS4iLAorCSJceEVCXHhGNVx4OTFceEQ1XHhBRlx4QTZceDU1XHhDRVx4N0ZceDIyXHg4OVx4NEYiCisJIlx4RjhceDdGXHg1NFx4QUNceDg5XHhDOFx4MTFceEI2XHhCMFx4REFceDMxXHg5MyIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUiwgIlRpZ2VyIC0gQSBGYXN0IE5ldyBIYXNoIEZ1bmN0aW9uLCAiCisJImJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgcHJvY2VlZGluZ3Mgb2YgRmEiCisJInN0IFNvZnR3YXJlIEVuY3J5cHRpb24gMywgQ2FtYnJpZGdlLCAxOTk2LiIsCisJIlx4M0RceDlBXHhFQlx4MDNceEQxXHhCRFx4MUFceDYzXHg1N1x4QjJceDc3XHg0RCIKKwkiXHhGRFx4NkRceDVCXHgyNFx4RERceDY4XHgxNVx4MURceDUwXHgzOVx4NzRceEZDIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSLCAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaCIKKwkiaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstQUJDREVGR0hJSktMTU5PUFFSUyIKKwkiVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstIiwKKwkiXHgwMFx4QjhceDNFXHhCNFx4RTVceDM0XHg0MFx4QzVceDc2XHhBQ1x4NkFceEFFIgorCSJceEUwXHhBN1x4NDhceDU4XHgyNVx4RkRceDE1XHhFN1x4MEFceDU5XHhGRlx4RTQiIH0sCisKKyAgICAgIHsJR0NSWV9NRF9USUdFUjEsICIiLAorICAgICAgICAiXHgzMlx4OTNceEFDXHg2M1x4MENceDEzXHhGMFx4MjRceDVGXHg5Mlx4QkJceEIxIgorICAgICAgICAiXHg3Nlx4NkVceDE2XHgxNlx4N0FceDRFXHg1OFx4NDlceDJEXHhERVx4NzNceEYzIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMSwgImEiLAorCSJceDc3XHhCRVx4RkJceEVGXHgyRVx4N0VceEY4XHhBQlx4MkVceEM4XHhGOVx4M0IiCisgICAgICAgICJceEY1XHg4N1x4QTdceEZDXHg2MVx4M0VceDI0XHg3Rlx4NUZceDI0XHg3OFx4MDkiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIxLCAiYWJjIiwKKyAgICAgICAgIlx4MkFceEFCXHgxNFx4ODRceEU4XHhDMVx4NThceEYyXHhCRlx4QjhceEM1XHhGRiIKKyAgICAgICAgIlx4NDFceEI1XHg3QVx4NTJceDUxXHgyOVx4MTNceDFDXHg5NVx4N0JceDVGXHg5MyIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjEsICJtZXNzYWdlIGRpZ2VzdCIsCisJIlx4RDlceDgxXHhGOFx4Q0JceDc4XHgyMFx4MUFceDk1XHgwRFx4Q0ZceDMwXHg0OCIKKyAgICAgICAgIlx4NzVceDFFXHg0NFx4MUNceDUxXHg3Rlx4Q0FceDFBXHhBNVx4NUFceDI5XHhGNiIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjEsICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCisJIlx4MTdceDE0XHhBNFx4NzJceEVFXHhFNVx4N0RceDMwXHgwNFx4MDRceDEyXHhCRiIKKyAgICAgICAgIlx4Q0NceDU1XHgwM1x4MkFceDBCXHgxMVx4NjBceDJGXHhGM1x4N0JceEVFXHhFOSIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjEsCisgICAgICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisJIlx4MEZceDdCXHhGOVx4QTFceDlCXHg5Q1x4NThceEYyXHhCN1x4NjFceDBEXHhGNyIKKyAgICAgICAgIlx4RThceDRGXHgwQVx4QzNceEE3XHgxQ1x4NjNceDFFXHg3Qlx4NTNceEY3XHg4RSIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjEsCisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiAiMDEyMzQ1Njc4OSIsCisgICAgICAgICJceDhEXHhDRVx4QTZceDgwXHhBMVx4NzVceDgzXHhFRVx4NTBceDJCXHhBM1x4OEEiCisgICAgICAgICJceDNDXHgzNlx4ODZceDUxXHg4OVx4MEZceEZCXHhDQ1x4RENceDQ5XHhBOFx4Q0MiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIxLAorICAgICAgICAiMTIzNDU2Nzg5MCIgIjEyMzQ1Njc4OTAiICIxMjM0NTY3ODkwIiAiMTIzNDU2Nzg5MCIKKyAgICAgICAgIjEyMzQ1Njc4OTAiICIxMjM0NTY3ODkwIiAiMTIzNDU2Nzg5MCIgIjEyMzQ1Njc4OTAiLAorICAgICAgICAiXHgxQ1x4MTRceDc5XHg1NVx4MjlceEZEXHg5Rlx4MjBceDdBXHg5NVx4OEZceDg0IgorICAgICAgICAiXHhDNVx4MkZceDExXHhFOFx4ODdceEZBXHgwQ1x4QUJceERGXHhEOVx4MUJceEZEIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMSwgIiEiLAorCSJceDZEXHhCMFx4RTJceDcyXHg5Q1x4QkVceEFEXHg5M1x4RDdceDE1XHhDNlx4QTciCisgICAgICAgICJceEQzXHg2M1x4MDJceEU5XHhCM1x4Q0VceEUwXHhEMlx4QkNceDMxXHg0Qlx4NDEiIH0sCisKKyAgICAgIHsJR0NSWV9NRF9USUdFUjIsICIiLAorICAgICAgICAiXHg0NFx4NDFceEJFXHg3NVx4RjZceDAxXHg4N1x4NzNceEMyXHgwNlx4QzJceDI3IgorICAgICAgICAiXHg0NVx4MzdceDRCXHg5Mlx4NEFceEE4XHgzMVx4M0ZceEVGXHg5MVx4OUZceDQxIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMiwgImEiLAorICAgICAgICAiXHg2N1x4RTZceEFFXHg4RVx4OUVceDk2XHg4OVx4OTlceEY3XHgwQVx4MjNceEU3IgorICAgICAgICAiXHgyQVx4RUFceEE5XHgyNVx4MUNceEJDXHg3Q1x4NzhceEE3XHg5MVx4NjZceDM2IiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMiwgImFiYyIsCisgICAgICAgICJceEY2XHg4RFx4N0JceEM1XHhBRlx4NEJceDQzXHhBMFx4NkVceDA0XHg4RFx4NzgiCisgICAgICAgICJceDI5XHg1Nlx4MERceDRBXHg5NFx4MTVceDY1XHg4Qlx4QjBceEIxXHhGM1x4QkYiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIyLCAibWVzc2FnZSBkaWdlc3QiLAorICAgICAgICAiXHhFMlx4OTRceDE5XHhBMVx4QjVceEZBXHgyNVx4OURceEU4XHgwMFx4NUVceDdEIgorICAgICAgICAiXHhFN1x4NTBceDc4XHhFQVx4ODFceEE1XHg0Mlx4RUZceDI1XHg1Mlx4NDZceDJEIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMiwgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAgICAgIlx4RjVceEI2XHhCNlx4QTdceDhDXHg0MFx4NUNceDg1XHg0N1x4RTlceDFDXHhEOCIKKyAgICAgICAgIlx4NjJceDRDXHhCOFx4QkVceDgzXHhGQ1x4ODBceDRBXHg0N1x4NDRceDg4XHhGRCIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjIsCisgICAgICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICAgICJceEE2XHg3M1x4N0ZceDM5XHg5N1x4RThceEZCXHhCNlx4M0RceDIwXHhEMlx4REYiCisgICAgICAgICJceDg4XHhGOFx4NjNceDc2XHhCNVx4RkVceDJEXHg1Q1x4RTNceDY2XHg0Nlx4QTkiIH0sCisgICAgICB7CUdDUllfTURfVElHRVIyLAorICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgIjAxMjM0NTY3ODkiLAorICAgICAgICAiXHhFQVx4OUFceEI2XHgyMlx4OENceEVFXHg3Qlx4NTFceEI3XHg3NVx4NDRceEZDIgorICAgICAgICAiXHhBNlx4MDZceDZDXHg4Q1x4QkJceDVCXHhCQVx4RTZceDMxXHg5NVx4MDVceENEIiB9LAorICAgICAgewlHQ1JZX01EX1RJR0VSMiwKKyAgICAgICAgIjEyMzQ1Njc4OTAiICIxMjM0NTY3ODkwIiAiMTIzNDU2Nzg5MCIgIjEyMzQ1Njc4OTAiCisgICAgICAgICIxMjM0NTY3ODkwIiAiMTIzNDU2Nzg5MCIgIjEyMzQ1Njc4OTAiICIxMjM0NTY3ODkwIiwKKyAgICAgICAgIlx4RDhceDUyXHg3OFx4MTFceDUzXHgyOVx4RUJceEFBXHgwRVx4RUNceDg1XHhFQyIKKyAgICAgICAgIlx4RENceDUzXHg5Nlx4RkRceEE4XHhBQVx4M0FceDU4XHgyMFx4OTRceDJGXHhGRiIgfSwKKyAgICAgIHsJR0NSWV9NRF9USUdFUjIsICIhIiwKKyAgICAgICAgIlx4RTBceDY4XHgyOFx4MUZceDA2XHgwRlx4NTVceDE2XHgyOFx4Q0NceDU3XHgxNSIKKyAgICAgICAgIlx4QjlceEQwXHgyMlx4NjdceDk2XHg5MVx4NERceDQ1XHhGN1x4NzFceDdDXHhGNCIgfSwKKworICAgICAgeyBHQ1JZX01EX1dISVJMUE9PTCwgIiIsCisJIlx4MTlceEZBXHg2MVx4RDdceDU1XHgyMlx4QTRceDY2XHg5Qlx4NDRceEUzXHg5Q1x4MURceDJFXHgxN1x4MjYiCisJIlx4QzVceDMwXHgyM1x4MjFceDMwXHhENFx4MDdceEY4XHg5QVx4RkVceEUwXHg5Nlx4NDlceDk3XHhGN1x4QTciCisJIlx4M0VceDgzXHhCRVx4NjlceDhCXHgyOFx4OEZceEVCXHhDRlx4ODhceEUzXHhFMFx4M0NceDRGXHgwN1x4NTciCisJIlx4RUFceDg5XHg2NFx4RTVceDlCXHg2M1x4RDlceDM3XHgwOFx4QjFceDM4XHhDQ1x4NDJceEE2XHg2RVx4QjMiIH0sCisgICAgICB7IEdDUllfTURfV0hJUkxQT09MLCAiYSIsCisJIlx4OEFceENBXHgyNlx4MDJceDc5XHgyQVx4RUNceDZGXHgxMVx4QTZceDcyXHgwNlx4NTNceDFGXHhCN1x4RDciCisJIlx4RjBceERGXHhGNVx4OTRceDEzXHgxNFx4NUVceDY5XHg3M1x4QzRceDUwXHgwMVx4RDBceDA4XHg3Qlx4NDIiCisJIlx4RDFceDFCXHhDNlx4NDVceDQxXHgzQVx4RUZceEY2XHgzQVx4NDJceDM5XHgxQVx4MzlceDE0XHg1QVx4NTkiCisJIlx4MUFceDkyXHgyMFx4MERceDU2XHgwMVx4OTVceEU1XHgzQlx4NDdceDg1XHg4NFx4RkRceEFFXHgyM1x4MUEiIH0sCisgICAgICB7IEdDUllfTURfV0hJUkxQT09MLCAiYSIsCisJIlx4OEFceENBXHgyNlx4MDJceDc5XHgyQVx4RUNceDZGXHgxMVx4QTZceDcyXHgwNlx4NTNceDFGXHhCN1x4RDciCisJIlx4RjBceERGXHhGNVx4OTRceDEzXHgxNFx4NUVceDY5XHg3M1x4QzRceDUwXHgwMVx4RDBceDA4XHg3Qlx4NDIiCisJIlx4RDFceDFCXHhDNlx4NDVceDQxXHgzQVx4RUZceEY2XHgzQVx4NDJceDM5XHgxQVx4MzlceDE0XHg1QVx4NTkiCisJIlx4MUFceDkyXHgyMFx4MERceDU2XHgwMVx4OTVceEU1XHgzQlx4NDdceDg1XHg4NFx4RkRceEFFXHgyM1x4MUEiIH0sCisgICAgICB7IEdDUllfTURfV0hJUkxQT09MLAorCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCisJIlx4RENceDM3XHhFMFx4MDhceENGXHg5RVx4RTZceDlCXHhGMVx4MUZceDAwXHhFRFx4OUFceEJBXHgyNlx4OTAiCisJIlx4MURceEQ3XHhDMlx4OENceERFXHhDMFx4NjZceENDXHg2QVx4RjRceDJFXHg0MFx4RjhceDJGXHgzQVx4MUUiCisJIlx4MDhceEVCXHhBMlx4NjZceDI5XHgxMlx4OURceDhGXHhCN1x4Q0JceDU3XHgyMVx4MUJceDkyXHg4MVx4QTYiCisJIlx4NTVceDE3XHhDQ1x4ODdceDlEXHg3Qlx4OTZceDIxXHg0Mlx4QzZceDVGXHg1QVx4N0FceEYwXHgxNFx4NjciIH0sCisgICAgICB7IEdDUllfTURfV0hJUkxQT09MLAorICAgICAgICAiISIsCisgICAgICAgICJceDBDXHg5OVx4MDBceDVCXHhFQlx4NTdceEVGXHhGNVx4MEFceDdDXHhGMFx4MDVceDU2XHgwRFx4REZceDVEIgorICAgICAgICAiXHgyOVx4MDVceDdGXHhEOFx4NkJceDIwXHhCRlx4RDZceDJEXHhFQ1x4QTBceEYxXHhDQ1x4RUFceDRBXHhGNSIKKyAgICAgICAgIlx4MUZceEMxXHg1NFx4OTBceEVEXHhEQ1x4NDdceEFGXHgzMlx4QkJceDJCXHg2Nlx4QzNceDRGXHhGOVx4QUQiCisgICAgICAgICJceDhDXHg2MFx4MDhceEFEXHg2N1x4N0ZceDc3XHgxMlx4NjlceDUzXHhCMlx4MjZceEU0XHhFRFx4OEJceDAxIiB9LAorI2lmZGVmIFVTRV9HT1NUX1JfMzQxMV85NAorICAgICAgeyBHQ1JZX01EX0dPU1RSMzQxMV85NCwKKwkiVGhpcyBpcyBtZXNzYWdlLCBsZW5ndGg9MzIgYnl0ZXMiLAorCSJceEIxXHhDNFx4NjZceEQzXHg3NVx4MTlceEI4XHgyRVx4ODNceDE5XHg4MVx4OUZceEYzXHgyNVx4OTVceEUwIgorCSJceDQ3XHhBMlx4OENceEI2XHhGOFx4M0VceEZGXHgxQ1x4NjlceDE2XHhBOFx4MTVceEE2XHgzN1x4RkZceEZBIiB9LAorICAgICAgeyBHQ1JZX01EX0dPU1RSMzQxMV85NCwKKwkiU3VwcG9zZSB0aGUgb3JpZ2luYWwgbWVzc2FnZSBoYXMgbGVuZ3RoID0gNTAgYnl0ZXMiLAorCSJceDQ3XHgxQVx4QkFceDU3XHhBNlx4MEFceDc3XHgwRFx4M0FceDc2XHgxM1x4MDZceDM1XHhDMVx4RkJceEVBIgorCSJceDRFXHhGMVx4NERceEU1XHgxRlx4NzhceEI0XHhBRVx4NTdceEREXHg4OVx4M0JceDYyXHhGNVx4NTJceDA4IiB9LAorICAgICAgeyBHQ1JZX01EX0dPU1RSMzQxMV85NCwKKwkiIiwKKwkiXHhDRVx4ODVceEI5XHg5Q1x4QzRceDY3XHg1Mlx4RkZceEZFXHhFM1x4NUNceEFCXHg5QVx4N0JceDAyXHg3OCIKKwkiXHhBQlx4QjRceEMyXHhEMlx4MDVceDVDXHhGRlx4NjhceDVBXHhGNFx4OTFceDJDXHg0OVx4NDlceDBGXHg4RCIgfSwKKyAgICAgIHsgR0NSWV9NRF9HT1NUUjM0MTFfOTQsCisJIiEiLAorCSJceDVDXHgwMFx4Q0NceEMyXHg3M1x4NENceEREXHgzM1x4MzJceEQzXHhENFx4NzRceDk1XHg3Nlx4RTNceEMxIgorCSJceEE3XHhEQlx4QUZceDBFXHg3RVx4QTdceDRFXHg5Rlx4QTZceDAyXHg0MVx4M0NceDkwXHhBMVx4MjlceEZBIiB9LAorI2VuZGlmCisjaWZkZWYgVVNFX0dPU1RfUl8zNDExXzEyCisgICAgICB7IEdDUllfTURfU1RSSUJPRzUxMiwKKyAgICAgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIsCisgICAgICAgICJceDFiXHg1NFx4ZDBceDFhXHg0YVx4ZjVceGI5XHhkNVx4Y2NceDNkXHg4Nlx4ZDZceDhkXHgyOFx4NTRceDYyIgorICAgICAgICAiXHhiMVx4OWFceGJjXHgyNFx4NzVceDIyXHgyZlx4MzVceGMwXHg4NVx4MTJceDJiXHhlNFx4YmFceDFmXHhmYSIKKyAgICAgICAgIlx4MDBceGFkXHgzMFx4ZjhceDc2XHg3Ylx4M2FceDgyXHgzOFx4NGNceDY1XHg3NFx4ZjBceDI0XHhjM1x4MTEiCisgICAgICAgICJceGUyXHhhNFx4ODFceDMzXHgyYlx4MDhceGVmXHg3Zlx4NDFceDc5XHg3OFx4OTFceGMxXHg2NFx4NmZceDQ4IiB9LAorICAgICAgeyBHQ1JZX01EX1NUUklCT0cyNTYsCisgICAgICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIiLAorICAgICAgICAiXHg5ZFx4MTVceDFlXHhlZlx4ZDhceDU5XHgwYlx4ODlceGRhXHhhNlx4YmFceDZjXHhiN1x4NGFceGY5XHgyNyIKKyAgICAgICAgIlx4NWRceGQwXHg1MVx4MDJceDZiXHhiMVx4NDlceGE0XHg1Mlx4ZmRceDg0XHhlNVx4ZTVceDdiXHg1NVx4MDAiIH0sCisgICAgICB7IEdDUllfTURfU1RSSUJPRzUxMiwKKyAgICAgICAgIlx4ZDFceGU1XHgyMFx4ZTJceGU1XHhmMlx4ZjBceGU4XHgyY1x4MjBceGQxXHhmMlx4ZjBceGU4XHhlMVx4ZWUiCisgICAgICAgICJceGU2XHhlOFx4MjBceGUyXHhlZFx4ZjNceGY2XHhlOFx4MmNceDIwXHhlMlx4ZTVceGZlXHhmMlx4ZmFceDIwIgorICAgICAgICAiXHhmMVx4MjBceGVjXHhlZVx4ZjBceGZmXHgyMFx4ZjFceGYyXHhmMFx4ZTVceGViXHhlMFx4ZWNceGU4XHgyMCIKKyAgICAgICAgIlx4ZWRceGUwXHgyMFx4ZjVceGYwXHhlMFx4ZTFceGYwXHhmYlx4ZmZceDIwXHhlZlx4ZWJceGZhXHhlYVx4ZmIiCisgICAgICAgICJceDIwXHhjOFx4ZTNceGVlXHhmMFx4ZTVceGUyXHhmYiIsCisgICAgICAgICJceDFlXHg4OFx4ZTZceDIyXHgyNlx4YmZceGNhXHg2Zlx4OTlceDk0XHhmMVx4ZjJceGQ1XHgxNVx4NjlceGUwIgorICAgICAgICAiXHhkYVx4ZjhceDQ3XHg1YVx4M2JceDBmXHhlNlx4MWFceDUzXHgwMFx4ZWVceGU0XHg2ZFx4OTZceDEzXHg3NiIKKyAgICAgICAgIlx4MDNceDVmXHhlOFx4MzVceDQ5XHhhZFx4YTJceGI4XHg2Mlx4MGZceGNkXHg3Y1x4NDlceDZjXHhlNVx4YjMiCisgICAgICAgICJceDNmXHgwY1x4YjlceGRkXHhkY1x4MmJceDY0XHg2MFx4MTRceDNiXHgwM1x4ZGFceGJhXHhjOVx4ZmJceDI4IiB9LAorICAgICAgeyBHQ1JZX01EX1NUUklCT0cyNTYsCisgICAgICAgICJceGQxXHhlNVx4MjBceGUyXHhlNVx4ZjJceGYwXHhlOFx4MmNceDIwXHhkMVx4ZjJceGYwXHhlOFx4ZTFceGVlIgorICAgICAgICAiXHhlNlx4ZThceDIwXHhlMlx4ZWRceGYzXHhmNlx4ZThceDJjXHgyMFx4ZTJceGU1XHhmZVx4ZjJceGZhXHgyMCIKKyAgICAgICAgIlx4ZjFceDIwXHhlY1x4ZWVceGYwXHhmZlx4MjBceGYxXHhmMlx4ZjBceGU1XHhlYlx4ZTBceGVjXHhlOFx4MjAiCisgICAgICAgICJceGVkXHhlMFx4MjBceGY1XHhmMFx4ZTBceGUxXHhmMFx4ZmJceGZmXHgyMFx4ZWZceGViXHhmYVx4ZWFceGZiIgorICAgICAgICAiXHgyMFx4YzhceGUzXHhlZVx4ZjBceGU1XHhlMlx4ZmIiLAorICAgICAgICAiXHg5ZFx4ZDJceGZlXHg0ZVx4OTBceDQwXHg5ZVx4NWRceGE4XHg3Zlx4NTNceDk3XHg2ZFx4NzRceDA1XHhiMCIKKyAgICAgICAgIlx4YzBceGNhXHhjNlx4MjhceGZjXHg2Nlx4OWFceDc0XHgxZFx4NTBceDA2XHgzY1x4NTVceDdlXHg4Zlx4NTAiIH0sCisjZW5kaWYKKyAgICAgIHsJMCB9CisgICAgfTsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgaW50IGk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiU3RhcnRpbmcgaGFzaCBjaGVja3MuXG4iKTsKKworICBmb3IgKGkgPSAwOyBhbGdvc1tpXS5tZDsgaSsrKQorICAgIHsKKyAgICAgIGlmICgoZ2NyeV9tZF90ZXN0X2FsZ28gKGFsZ29zW2ldLm1kKSB8fCBhbGdvc1tpXS5tZCA9PSBHQ1JZX01EX01ENSkKKyAgICAgICAgICAmJiBpbl9maXBzX21vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgYWxnb3JpdGhtICVkIG5vdCBhdmFpbGFibGUgaW4gZmlwcyBtb2RlXG4iLAorCQkgICAgIGFsZ29zW2ldLm1kKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHZlcmJvc2UpCisJZnByaW50ZiAoc3RkZXJyLCAiICBjaGVja2luZyAlcyBbJWldIGZvciBsZW5ndGggJWRcbiIsCisJCSBnY3J5X21kX2FsZ29fbmFtZSAoYWxnb3NbaV0ubWQpLAorCQkgYWxnb3NbaV0ubWQsCisgICAgICAgICAgICAgICAgICFzdHJjbXAgKGFsZ29zW2ldLmRhdGEsICIhIik/CisgICAgICAgICAgICAgICAgIDEwMDAwMDAgOiAoaW50KXN0cmxlbihhbGdvc1tpXS5kYXRhKSk7CisKKyAgICAgIGNoZWNrX29uZV9tZCAoYWxnb3NbaV0ubWQsIGFsZ29zW2ldLmRhdGEsIHN0cmxlbiAoYWxnb3NbaV0uZGF0YSksCisJCSAgICBhbGdvc1tpXS5leHBlY3QpOworICAgICAgY2hlY2tfb25lX21kX211bHRpIChhbGdvc1tpXS5tZCwgYWxnb3NbaV0uZGF0YSwgc3RybGVuIChhbGdvc1tpXS5kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3NbaV0uZXhwZWN0KTsKKyAgICB9CisKKyAgLyogQ2hlY2sgdGhlIFdoaXJscG9vbCBidWcgZW11bGF0aW9uLiAgKi8KKyAgaWYgKCFnY3J5X21kX3Rlc3RfYWxnbyAoR0NSWV9NRF9XSElSTFBPT0wpICYmICFpbl9maXBzX21vZGUpCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0W10gPQorICAgICAgICAiXHgzNVx4MjhceGQ2XHg0Y1x4NTZceDJjXHg1NVx4MmVceDNiXHg5MVx4OTNceDk1XHg3Ylx4ZGRceGNjXHg2ZSIKKyAgICAgICAgIlx4NmZceGI3XHhiZlx4NzZceDIyXHg5Y1x4YzZceDIzXHhkYVx4M2VceDA5XHg5Ylx4MzZceGU4XHg2ZFx4NzYiCisgICAgICAgICJceDJmXHg5NFx4M2JceDBjXHg2M1x4YTBceGJhXHhhM1x4NGRceDY2XHg3MVx4ZTZceDVkXHgyNlx4NjdceDI4IgorICAgICAgICAiXHgzNlx4MWZceDBlXHgxYVx4NDBceGYwXHhjZVx4ODNceDUwXHg5MFx4MWZceGZhXHgzZlx4ZWRceDZmXHhmZCI7CisgICAgICBnY3J5X21kX2hkX3QgaGQ7CisgICAgICBpbnQgYWxnbyA9IEdDUllfTURfV0hJUkxQT09MOworICAgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIGludCBtZGxlbjsKKworICAgICAgZXJyID0gZ2NyeV9tZF9vcGVuICgmaGQsIEdDUllfTURfV0hJUkxQT09MLCBHQ1JZX01EX0ZMQUdfQlVHRU1VMSk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImFsZ28gJWQsIGdjcnlfbWRfb3BlbiBmYWlsZWQ6ICVzXG4iLCBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgIH0KKworICAgICAgbWRsZW4gPSBnY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pOworICAgICAgaWYgKG1kbGVuIDwgMSB8fCBtZGxlbiA+IDUwMCkKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJhbGdvICVkLCBnY3J5X21kX2dldF9hbGdvX2RsZW4gZmFpbGVkOiAlZFxuIiwgYWxnbywgbWRsZW4pOworICAgICAgICAgIGdjcnlfbWRfY2xvc2UgKGhkKTsKKyAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICB9CisKKyAgICAgIC8qIEhhc2ggNjIgYnllcyBpbiBjaHVua3MuICAqLworICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsICIxMjM0NTY3ODkwIiwgMTApOworICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyIiwKKyAgICAgICAgICAgICAgICAgICAgIDUyKTsKKworICAgICAgcCA9IGdjcnlfbWRfcmVhZCAoaGQsIGFsZ28pOworCisgICAgICBpZiAobWVtY21wIChwLCBleHBlY3QsIG1kbGVuKSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50ZiAoImNvbXB1dGVkOiAiKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKyAgICAgICAgICAgIHByaW50ZiAoIiUwMnggIiwgcFtpXSAmIDB4RkYpOworICAgICAgICAgIHByaW50ZiAoIlxuZXhwZWN0ZWQ6ICIpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQorICAgICAgICAgICAgcHJpbnRmICgiJTAyeCAiLCBleHBlY3RbaV0gJiAweEZGKTsKKyAgICAgICAgICBwcmludGYgKCJcbiIpOworCisgICAgICAgICAgZmFpbCAoImFsZ28gJWQsIGRpZ2VzdCBtaXNtYXRjaFxuIiwgYWxnbyk7CisgICAgICAgIH0KKworICAgICAgZ2NyeV9tZF9jbG9zZSAoaGQpOworICAgIH0KKworIGxlYXZlOgorICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJDb21wbGV0ZWQgaGFzaCBjaGVja3MuXG4iKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX29uZV9obWFjIChpbnQgYWxnbywgY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFsZW4sCisJCWNvbnN0IGNoYXIgKmtleSwgaW50IGtleWxlbiwgY29uc3QgY2hhciAqZXhwZWN0KQoreworICBnY3J5X21kX2hkX3QgaGQsIGhkMjsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IG1kbGVuOworICBpbnQgaTsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgZXJyID0gZ2NyeV9tZF9vcGVuICgmaGQsIGFsZ28sIEdDUllfTURfRkxBR19ITUFDKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9vcGVuIGZhaWxlZDogJXNcbiIsIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG1kbGVuID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKyAgaWYgKG1kbGVuIDwgMSB8fCBtZGxlbiA+IDUwMCkKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9nZXRfYWxnb19kbGVuIGZhaWxlZDogJWRcbiIsIGFsZ28sIG1kbGVuKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZ2NyeV9tZF9zZXRrZXkoIGhkLCBrZXksIGtleWxlbiApOworCisgIGdjcnlfbWRfd3JpdGUgKGhkLCBkYXRhLCBkYXRhbGVuKTsKKworICBlcnIgPSBnY3J5X21kX2NvcHkgKCZoZDIsIGhkKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tZF9jb3B5IGZhaWxlZDogJXNcbiIsIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgfQorCisgIGdjcnlfbWRfY2xvc2UgKGhkKTsKKworICBwID0gZ2NyeV9tZF9yZWFkIChoZDIsIGFsZ28pOworICBpZiAoIXApCisgICAgZmFpbCgiYWxnbyAlZCwgaG1hYyBnY3J5X21kX3JlYWQgZmFpbGVkXG4iLCBhbGdvKTsKKworICBpZiAobWVtY21wIChwLCBleHBlY3QsIG1kbGVuKSkKKyAgICB7CisgICAgICBwcmludGYgKCJjb21wdXRlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIHBbaV0gJiAweEZGKTsKKyAgICAgIHByaW50ZiAoIlxuZXhwZWN0ZWQ6ICIpOworICAgICAgZm9yIChpID0gMDsgaSA8IG1kbGVuOyBpKyspCisJcHJpbnRmICgiJTAyeCAiLCBleHBlY3RbaV0gJiAweEZGKTsKKyAgICAgIHByaW50ZiAoIlxuIik7CisKKyAgICAgIGZhaWwgKCJhbGdvICVkLCBkaWdlc3QgbWlzbWF0Y2hcbiIsIGFsZ28pOworICAgIH0KKworICBnY3J5X21kX2Nsb3NlIChoZDIpOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfaG1hYyAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCBhbGdvcworICB7CisgICAgaW50IG1kOworICAgIGNvbnN0IGNoYXIgKmRhdGE7CisgICAgY29uc3QgY2hhciAqa2V5OworICAgIGNvbnN0IGNoYXIgKmV4cGVjdDsKKyAgfSBhbGdvc1tdID0KKyAgICB7CisgICAgICB7IEdDUllfTURfTUQ1LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsICJKZWZlIiwKKwkiXHg3NVx4MGNceDc4XHgzZVx4NmFceGIwXHhiNVx4MDNceGVhXHhhOFx4NmVceDMxXHgwYVx4NWRceGI3XHgzOCIgfSwKKyAgICAgIHsgR0NSWV9NRF9NRDUsCisJIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIsCisJIlx4OTJceDk0XHg3Mlx4N2FceDM2XHgzOFx4YmJceDFjXHgxM1x4ZjRceDhlXHhmOFx4MTVceDhiXHhmY1x4OWQiIH0sCisgICAgICB7IEdDUllfTURfTUQ1LAorCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCSJceGRkXHhkZFx4ZGRceGRkXHhkZCIsCisJIlx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUEiLAorCSJceDU2XHhiZVx4MzRceDUyXHgxZFx4MTRceDRjXHg4OFx4ZGJceGI4XHhjN1x4MzNceGYwXHhlOFx4YjNceGY2IiB9LAorICAgICAgeyBHQ1JZX01EX01ENSwKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTkiLAorCSJceDY5XHg3ZVx4YWZceDBhXHhjYVx4M2FceDNhXHhlYVx4M2FceDc1XHgxNlx4NDdceDQ2XHhmZlx4YWFceDc5IiB9LAorICAgICAgeyBHQ1JZX01EX01ENSwgIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKKwkiXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIsCisJIlx4NTZceDQ2XHgxZVx4ZjJceDM0XHgyZVx4ZGNceDAwXHhmOVx4YmFceGI5XHg5NVx4NjlceDBlXHhmZFx4NGMiIH0sCisgICAgICB7IEdDUllfTURfTUQ1LCAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJIlx4YWFceGFhXHhhYVx4YWFceGFhIiwKKwkiXHg2Ylx4MWFceGI3XHhmZVx4NGJceGQ3XHhiZlx4OGZceDBiXHg2Mlx4ZTZceGNlXHg2MVx4YjlceGQwXHhjZCIgfSwKKyAgICAgIHsgR0NSWV9NRF9NRDUsCisJIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWEiLAorCSJceDZmXHg2M1x4MGZceGFkXHg2N1x4Y2RceGEwXHhlZVx4MWZceGIxXHhmNVx4NjJceGRiXHgzYVx4YTVceDNlIiwgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEyNTYsICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwgIkplZmUiLAorCSJceDViXHhkY1x4YzFceDQ2XHhiZlx4NjBceDc1XHg0ZVx4NmFceDA0XHgyNFx4MjZceDA4XHg5NVx4NzVceGM3XHg1YSIKKwkiXHgwMFx4M2ZceDA4XHg5ZFx4MjdceDM5XHg4M1x4OWRceGVjXHg1OFx4YjlceDY0XHhlY1x4MzhceDQzIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTI1NiwKKwkiSGkgVGhlcmUiLAorCSJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKwkiXHgwYlx4MGJceDBiIiwKKwkiXHhiMFx4MzRceDRjXHg2MVx4ZDhceGRiXHgzOFx4NTNceDVjXHhhOFx4YWZceGNlXHhhZlx4MGJceGYxXHgyYlx4ODgiCisJIlx4MWRceGMyXHgwMFx4YzlceDgzXHgzZFx4YTdceDI2XHhlOVx4MzdceDZjXHgyZVx4MzJceGNmXHhmNyIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEyNTYsCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKKwkiXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQSIKKwkiXHhBQVx4QUFceEFBXHhBQSIsCisJIlx4NzdceDNlXHhhOVx4MWVceDM2XHg4MFx4MGVceDQ2XHg4NVx4NGRceGI4XHhlYlx4ZDBceDkxXHg4MVx4YTciCisJIlx4MjlceDU5XHgwOVx4OGJceDNlXHhmOFx4YzFceDIyXHhkOVx4NjNceDU1XHgxNFx4Y2VceGQ1XHg2NVx4ZmUiIH0sCisgICAgICB7IEdDUllfTURfU0hBMjU2LAorCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCSJceGNkXHhjZFx4Y2RceGNkXHhjZCIsCisJIlx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOSIsCisJIlx4ODJceDU1XHg4YVx4MzhceDlhXHg0NFx4M2NceDBlXHhhNFx4Y2NceDgxXHg5OFx4OTlceGYyXHgwOCIKKwkiXHgzYVx4ODVceGYwXHhmYVx4YTNceGU1XHg3OFx4ZjhceDA3XHg3YVx4MmVceDNmXHhmNFx4NjdceDI5XHg2Nlx4NWIiIH0sCisgICAgICB7IEdDUllfTURfU0hBMjU2LAorCSJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWEiLAorCSJceDYwXHhlNFx4MzFceDU5XHgxZVx4ZTBceGI2XHg3Zlx4MGRceDhhXHgyNlx4YWFceGNiXHhmNVx4YjdceDdmIgorCSJceDhlXHgwYlx4YzZceDIxXHgzN1x4MjhceGM1XHgxNFx4MDVceDQ2XHgwNFx4MGZceDBlXHhlM1x4N2ZceDU0IiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTI1NiwKKwkiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWEiLAorCSJceDliXHgwOVx4ZmZceGE3XHgxYlx4OTRceDJmXHhjYlx4MjdceDYzXHg1Zlx4YmNceGQ1XHhiMFx4ZTlceDQ0IgorCSJceGJmXHhkY1x4NjNceDY0XHg0Zlx4MDdceDEzXHg5M1x4OGFceDdmXHg1MVx4NTNceDVjXHgzYVx4MzVceGUyIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTIyNCwgIndoYXQgZG8geWEgd2FudCBmb3Igbm90aGluZz8iLCAiSmVmZSIsCisJIlx4YTNceDBlXHgwMVx4MDlceDhiXHhjNlx4ZGJceGJmXHg0NVx4NjlceDBmXHgzYVx4N2VceDllXHg2ZFx4MGYiCisJIlx4OGJceGJlXHhhMlx4YTNceDllXHg2MVx4NDhceDAwXHg4Zlx4ZDBceDVlXHg0NCIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEyMjQsCisJIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisJIlx4MGJceDBiXHgwYiIsCisJIlx4ODlceDZmXHhiMVx4MTJceDhhXHhiYlx4ZGZceDE5XHg2OFx4MzJceDEwXHg3Y1x4ZDRceDlkXHhmM1x4M2ZceDQ3IgorCSJceGI0XHhiMVx4MTZceDk5XHgxMlx4YmFceDRmXHg1M1x4NjhceDRiXHgyMiIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEyMjQsCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKKwkiXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQSIKKwkiXHhBQVx4QUFceEFBXHhBQSIsCisJIlx4N2ZceGIzXHhjYlx4MzVceDg4XHhjNlx4YzFceGY2XHhmZlx4YTlceDY5XHg0ZFx4N2RceDZhXHhkMlx4NjQiCisJIlx4OTNceDY1XHhiMFx4YzFceGY2XHg1ZFx4NjlceGQxXHhlY1x4ODNceDMzXHhlYSIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEyMjQsCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkIiwKKwkiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCSJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKwkiXHg2Y1x4MTFceDUwXHg2OFx4NzRceDAxXHgzY1x4YWNceDZhXHgyYVx4YmNceDFiXHhiM1x4ODJceDYyIgorCSJceDdjXHhlY1x4NmFceDkwXHhkOFx4NmVceGZjXHgwMVx4MmRceGU3XHhhZlx4ZWNceDVhIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTIyNCwKKwkiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhIiwKKwkiXHg5NVx4ZTlceGEwXHhkYlx4OTZceDIwXHg5NVx4YWRceGFlXHhiZVx4OWJceDJkXHg2Zlx4MGRceGJjXHhlMiIKKwkiXHhkNFx4OTlceGYxXHgxMlx4ZjJceGQyXHhiN1x4MjdceDNmXHhhNlx4ODdceDBlIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTIyNCwKKwkiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCSJceGFhXHhhYVx4YWEiLAorCSJceDNhXHg4NVx4NDFceDY2XHhhY1x4NWRceDlmXHgwMlx4M2ZceDU0XHhkNVx4MTdceGQwXHhiM1x4OWRceGJkIgorCSJceDk0XHg2N1x4NzBceGRiXHg5Y1x4MmJceDk1XHhjOVx4ZjZceGY1XHg2NVx4ZDEiIH0sCisgICAgICB7IEdDUllfTURfU0hBMzg0LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsICJKZWZlIiwKKwkiXHhhZlx4NDVceGQyXHhlM1x4NzZceDQ4XHg0MFx4MzFceDYxXHg3Zlx4NzhceGQyXHhiNVx4OGFceDZiXHgxYiIKKwkiXHg5Y1x4N2VceGY0XHg2NFx4ZjVceGEwXHgxYlx4NDdceGU0XHgyZVx4YzNceDczXHg2M1x4MjJceDQ0XHg1ZSIKKwkiXHg4ZVx4MjJceDQwXHhjYVx4NWVceDY5XHhlMlx4YzdceDhiXHgzMlx4MzlceGVjXHhmYVx4YjJceDE2XHg0OSIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEzODQsCisJIkhpIFRoZXJlIiwKKwkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisJIlx4MGJceDBiXHgwYiIsCisJIlx4YWZceGQwXHgzOVx4NDRceGQ4XHg0OFx4OTVceDYyXHg2Ylx4MDhceDI1XHhmNFx4YWJceDQ2XHg5MFx4N2ZceDE1IgorCSJceGY5XHhkYVx4ZGJceGU0XHgxMFx4MWVceGM2XHg4Mlx4YWFceDAzXHg0Y1x4N2NceGViXHhjNVx4OWNceGZhXHhlYSIKKwkiXHg5ZVx4YTlceDA3XHg2ZVx4ZGVceDdmXHg0YVx4ZjFceDUyXHhlOFx4YjJceGZhXHg5Y1x4YjYiIH0sCisgICAgICB7IEdDUllfTURfU0hBMzg0LAorCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCSJceGRkXHhkZFx4ZGRceGRkXHhkZCIsCisJIlx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUEiCisJIlx4QUFceEFBXHhBQVx4QUEiLAorCSJceDg4XHgwNlx4MjZceDA4XHhkM1x4ZTZceGFkXHg4YVx4MGFceGEyXHhhY1x4ZTBceDE0XHhjOFx4YThceDZmIgorCSJceDBhXHhhNlx4MzVceGQ5XHg0N1x4YWNceDlmXHhlYlx4ZThceDNlXHhmNFx4ZTVceDU5XHg2Nlx4MTRceDRiIgorCSJceDJhXHg1YVx4YjNceDlkXHhjMVx4MzhceDE0XHhiOVx4NGVceDNhXHhiNlx4ZTFceDAxXHhhM1x4NGZceDI3IiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTM4NCwKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTkiLAorCSJceDNlXHg4YVx4NjlceGI3XHg3OFx4M2NceDI1XHg4NVx4MTlceDMzXHhhYlx4NjJceDkwXHhhZlx4NmNceGE3IgorCSJceDdhXHg5OVx4ODFceDQ4XHgwOFx4NTBceDAwXHg5Y1x4YzVceDU3XHg3Y1x4NmVceDFmXHg1N1x4M2JceDRlIgorCSJceDY4XHgwMVx4ZGRceDIzXHhjNFx4YTdceGQ2XHg3OVx4Y2NceGY4XHhhM1x4ODZceGM2XHg3NFx4Y2ZceGZiIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTM4NCwKKwkiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhIiwKKwkiXHg0ZVx4Y2VceDA4XHg0NFx4ODVceDgxXHgzZVx4OTBceDg4XHhkMlx4YzZceDNhXHgwNFx4MWJceGM1XHhiNCIKKwkiXHg0Zlx4OWVceGYxXHgwMVx4MmFceDJiXHg1OFx4OGZceDNjXHhkMVx4MWZceDA1XHgwM1x4M2FceGM0XHhjNiIKKwkiXHgwY1x4MmVceGY2XHhhYlx4NDBceDMwXHhmZVx4ODJceDk2XHgyNFx4OGRceGYxXHg2M1x4ZjRceDQ5XHg1MiIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEEzODQsCisJIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBkYXRhLiBUaGUga2V5IG5lZWRzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgdXNlZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhIiwKKwkiXHg2Nlx4MTdceDE3XHg4ZVx4OTRceDFmXHgwMlx4MGRceDM1XHgxZVx4MmZceDI1XHg0ZVx4OGZceGQzXHgyYyIKKwkiXHg2MFx4MjRceDIwXHhmZVx4YjBceGI4XHhmYlx4OWFceGRjXHhjZVx4YmJceDgyXHg0Nlx4MWVceDk5XHhjNSIKKwkiXHhhNlx4NzhceGNjXHgzMVx4ZTdceDk5XHgxN1x4NmRceDM4XHg2MFx4ZTZceDExXHgwY1x4NDZceDUyXHgzZSIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEE1MTIsICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwgIkplZmUiLAorCSJceDE2XHg0Ylx4N2FceDdiXHhmY1x4ZjhceDE5XHhlMlx4ZTNceDk1XHhmYlx4ZTdceDNiXHg1Nlx4ZTBceGEzIgorCSJceDg3XHhiZFx4NjRceDIyXHgyZVx4ODNceDFmXHhkNlx4MTBceDI3XHgwY1x4ZDdceGVhXHgyNVx4MDVceDU0IgorCSJceDk3XHg1OFx4YmZceDc1XHhjMFx4NWFceDk5XHg0YVx4NmRceDAzXHg0Zlx4NjVceGY4XHhmMFx4ZTZceGZkIgorCSJceGNhXHhlYVx4YjFceGEzXHg0ZFx4NGFceDZiXHg0Ylx4NjNceDZlXHgwN1x4MGFceDM4XHhiY1x4ZTdceDM3IiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTUxMiwKKwkiSGkgVGhlcmUiLAorCSJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKwkiXHgwYlx4MGJceDBiIiwKKwkiXHg4N1x4YWFceDdjXHhkZVx4YTVceGVmXHg2MVx4OWRceDRmXHhmMFx4YjRceDI0XHgxYVx4MWRceDZjXHhiMCIKKwkiXHgyM1x4NzlceGY0XHhlMlx4Y2VceDRlXHhjMlx4NzhceDdhXHhkMFx4YjNceDA1XHg0NVx4ZTFceDdjXHhkZSIKKwkiXHhkYVx4YThceDMzXHhiN1x4ZDZceGI4XHhhN1x4MDJceDAzXHg4Ylx4MjdceDRlXHhhZVx4YTNceGY0XHhlNCIKKwkiXHhiZVx4OWRceDkxXHg0ZVx4ZWJceDYxXHhmMVx4NzBceDJlXHg2OVx4NmNceDIwXHgzYVx4MTJceDY4XHg1NCIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEE1MTIsCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJIlx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKKwkiXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQSIKKwkiXHhBQVx4QUFceEFBXHhBQSIsCisJIlx4ZmFceDczXHhiMFx4MDhceDlkXHg1Nlx4YTJceDg0XHhlZlx4YjBceGYwXHg3NVx4NmNceDg5XHgwYlx4ZTkiCisJIlx4YjFceGI1XHhkYlx4ZGRceDhlXHhlOFx4MWFceDM2XHg1NVx4ZjhceDNlXHgzM1x4YjJceDI3XHg5ZFx4MzkiCisJIlx4YmZceDNlXHg4NFx4ODJceDc5XHhhN1x4MjJceGM4XHgwNlx4YjRceDg1XHhhNFx4N2VceDY3XHhjOFx4MDciCisJIlx4YjlceDQ2XHhhM1x4MzdceGJlXHhlOFx4OTRceDI2XHg3NFx4MjdceDg4XHg1OVx4ZTFceDMyXHg5Mlx4ZmIiICB9LAorICAgICAgeyBHQ1JZX01EX1NIQTUxMiwKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkiXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAorCSJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTkiLAorCSJceGIwXHhiYVx4NDZceDU2XHgzN1x4NDVceDhjXHg2OVx4OTBceGU1XHhhOFx4YzVceGY2XHgxZFx4NGFceGY3IgorCSJceGU1XHg3Nlx4ZDlceDdmXHhmOVx4NGJceDg3XHgyZFx4ZTdceDZmXHg4MFx4NTBceDM2XHgxZVx4ZTNceGRiIgorCSJceGE5XHgxY1x4YTVceGMxXHgxYVx4YTJceDVlXHhiNFx4ZDZceDc5XHgyN1x4NWNceGM1XHg3OFx4ODBceDYzIgorCSJceGE1XHhmMVx4OTdceDQxXHgxMlx4MGNceDRmXHgyZFx4ZTJceGFkXHhlYlx4ZWJceDEwXHhhMlx4OThceGRkIiB9LAorICAgICAgeyBHQ1JZX01EX1NIQTUxMiwKKwkiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhIiwKKwkiXHg4MFx4YjJceDQyXHg2M1x4YzdceGMxXHhhM1x4ZWJceGI3XHgxNFx4OTNceGMxXHhkZFx4N2JceGU4XHhiNCIKKwkiXHg5Ylx4NDZceGQxXHhmNFx4MWJceDRhXHhlZVx4YzFceDEyXHgxYlx4MDFceDM3XHg4M1x4ZjhceGYzXHg1MiIKKwkiXHg2Ylx4NTZceGQwXHgzN1x4ZTBceDVmXHgyNVx4OThceGJkXHgwZlx4ZDJceDIxXHg1ZFx4NmFceDFlXHg1MiIKKwkiXHg5NVx4ZTZceDRmXHg3M1x4ZjZceDNmXHgwYVx4ZWNceDhiXHg5MVx4NWFceDk4XHg1ZFx4NzhceDY1XHg5OCIgfSwKKyAgICAgIHsgR0NSWV9NRF9TSEE1MTIsCisJIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBkYXRhLiBUaGUga2V5IG5lZWRzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgdXNlZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uIiwKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkiXHhhYVx4YWFceGFhIiwKKwkiXHhlM1x4N2JceDZhXHg3N1x4NWRceGM4XHg3ZFx4YmFceGE0XHhkZlx4YTlceGY5XHg2ZVx4NWVceDNmXHhmZCIKKwkiXHhkZVx4YmRceDcxXHhmOFx4ODZceDcyXHg4OVx4ODZceDVkXHhmNVx4YTNceDJkXHgyMFx4Y2RceGM5XHg0NCIKKwkiXHhiNlx4MDJceDJjXHhhY1x4M2NceDQ5XHg4Mlx4YjFceDBkXHg1ZVx4ZWJceDU1XHhjM1x4ZTRceGRlXHgxNSIKKwkiXHgxM1x4NDZceDc2XHhmYlx4NmRceGUwXHg0NFx4NjBceDY1XHhjOVx4NzRceDQwXHhmYVx4OGNceDZhXHg1OCIgfSwKKyAgICAgIHsJMCB9LAorICAgIH07CisgIGludCBpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIlN0YXJ0aW5nIGhhc2hlZCBNQUMgY2hlY2tzLlxuIik7CisKKyAgZm9yIChpID0gMDsgYWxnb3NbaV0ubWQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoKGdjcnlfbWRfdGVzdF9hbGdvIChhbGdvc1tpXS5tZCkgfHwgYWxnb3NbaV0ubWQgPT0gR0NSWV9NRF9NRDUpCisgICAgICAgICAgJiYgaW5fZmlwc19tb2RlKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIGFsZ29yaXRobSAlZCBub3QgYXZhaWxhYmxlIGluIGZpcHMgbW9kZVxuIiwKKwkJICAgICBhbGdvc1tpXS5tZCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmICh2ZXJib3NlKQorCWZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgIiAgY2hlY2tpbmcgJXMgWyVpXSBmb3IgJWQgYnl0ZSBrZXkgYW5kICVkIGJ5dGUgZGF0YVxuIiwKKwkJIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvc1tpXS5tZCksCisJCSBhbGdvc1tpXS5tZCwKKwkJIChpbnQpc3RybGVuKGFsZ29zW2ldLmtleSksIChpbnQpc3RybGVuKGFsZ29zW2ldLmRhdGEpKTsKKworICAgICAgY2hlY2tfb25lX2htYWMgKGFsZ29zW2ldLm1kLCBhbGdvc1tpXS5kYXRhLCBzdHJsZW4gKGFsZ29zW2ldLmRhdGEpLAorCQkgICAgICBhbGdvc1tpXS5rZXksIHN0cmxlbihhbGdvc1tpXS5rZXkpLAorCQkgICAgICBhbGdvc1tpXS5leHBlY3QpOworICAgIH0KKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJDb21wbGV0ZWQgaGFzaGVkIE1BQyBjaGVja3MuXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfb25lX21hYyAoaW50IGFsZ28sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBkYXRhbGVuLAorCSAgICAgICBjb25zdCBjaGFyICprZXksIGludCBrZXlsZW4sIGNvbnN0IGNoYXIgKml2LCBpbnQgaXZsZW4sCisJICAgICAgIGNvbnN0IGNoYXIgKmV4cGVjdCwgaW50IHRlc3RfYnVmZmVyaW5nKQoreworICBnY3J5X21hY19oZF90IGhkOworICB1bnNpZ25lZCBjaGFyICpwOworICB1bnNpZ25lZCBpbnQgbWFjbGVuOworICBzaXplX3QgbWFjb3V0bGVuOworICBpbnQgaTsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IDA7CisKKyAgZXJyID0gZ2NyeV9tYWNfb3BlbiAoJmhkLCBhbGdvLCAwLCBOVUxMKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgZ2NyeV9tYWNfb3BlbiBmYWlsZWQ6ICVzXG4iLCBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBtYWNsZW4gPSBnY3J5X21hY19nZXRfYWxnb19tYWNsZW4gKGFsZ28pOworICBpZiAobWFjbGVuIDwgMSB8fCBtYWNsZW4gPiA1MDApCisgICAgeworICAgICAgZmFpbCAoImFsZ28gJWQsIGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbiBmYWlsZWQ6ICVkXG4iLCBhbGdvLCBtYWNsZW4pOworICAgICAgcmV0dXJuOworICAgIH0KKworICBwID0gbWFsbG9jKG1hY2xlbik7CisgIGlmICghcCkKKyAgICB7CisgICAgICBmYWlsICgiYWxnbyAlZCwgY291bGQgbm90IG1hbGxvYyAlZCBieXRlc1xuIiwgYWxnbywgbWFjbGVuKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9tYWNfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICBpZiAoZXJyKQorICAgIGZhaWwoImFsZ28gJWQsIG1hYyBnY3J5X21hY19zZXRrZXkgZmFpbGVkOiAlc1xuIiwgYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIG91dDsKKworICBpZiAoaXZsZW4gJiYgaXYpCisgICAgeworICAgICAgZXJyID0gZ2NyeV9tYWNfc2V0aXYgKGhkLCBpdiwgaXZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCgiYWxnbyAlZCwgbWFjIGdjcnlfbWFjX2l2a2V5IGZhaWxlZDogJXNcbiIsIGFsZ28sCisgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICBpZiAodGVzdF9idWZmZXJpbmcpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFsZW47IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfbWFjX3dyaXRlIChoZCwgJmRhdGFbaV0sIDEpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBmYWlsKCJhbGdvICVkLCBtYWMgZ2NyeV9tYWNfd3JpdGUgW2J1Zi1vZmZzZXQ6ICVkXSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICBhbGdvLCBpLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGVyciA9IGdjcnlfbWFjX3dyaXRlIChoZCwgZGF0YSwgZGF0YWxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsKCJhbGdvICVkLCBtYWMgZ2NyeV9tYWNfd3JpdGUgZmFpbGVkOiAlc1xuIiwgYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICBlcnIgPSBnY3J5X21hY192ZXJpZnkgKGhkLCBleHBlY3QsIG1hY2xlbik7CisgIGlmIChlcnIpCisgICAgZmFpbCgiYWxnbyAlZCwgbWFjIGdjcnlfbWFjX3ZlcmlmeSBmYWlsZWQ6ICVzXG4iLCBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICBpZiAoZXJyKQorICAgIGdvdG8gb3V0OworCisgIG1hY291dGxlbiA9IG1hY2xlbjsKKyAgZXJyID0gZ2NyeV9tYWNfcmVhZCAoaGQsIHAsICZtYWNvdXRsZW4pOworICBpZiAoZXJyKQorICAgIGZhaWwoImFsZ28gJWQsIG1hYyBnY3J5X21hY19yZWFkIGZhaWxlZDogJXNcbiIsIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGlmIChlcnIpCisgICAgZ290byBvdXQ7CisKKyAgaWYgKG1lbWNtcCAocCwgZXhwZWN0LCBtYWNsZW4pKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNvbXB1dGVkOiAiKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBtYWNsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIHBbaV0gJiAweEZGKTsKKyAgICAgIHByaW50ZiAoIlxuZXhwZWN0ZWQ6ICIpOworICAgICAgZm9yIChpID0gMDsgaSA8IG1hY2xlbjsgaSsrKQorCXByaW50ZiAoIiUwMnggIiwgZXhwZWN0W2ldICYgMHhGRik7CisgICAgICBwcmludGYgKCJcbiIpOworCisgICAgICBmYWlsICgiYWxnbyAlZCwgZGlnZXN0IG1pc21hdGNoXG4iLCBhbGdvKTsKKyAgICB9CisgIGlmIChlcnIpCisgICAgZ290byBvdXQ7CisKK291dDoKKyAgZnJlZSAocCk7CisgIGdjcnlfbWFjX2Nsb3NlIChoZCk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19tYWMgKHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxnb3MKKyAgeworICAgIGludCBhbGdvOworICAgIGNvbnN0IGNoYXIgKmRhdGE7CisgICAgY29uc3QgY2hhciAqa2V5OworICAgIGNvbnN0IGNoYXIgKmV4cGVjdDsKKyAgICBjb25zdCBjaGFyICppdjsKKyAgfSBhbGdvc1tdID0KKyAgICB7CisgICAgICB7IEdDUllfTUFDX0hNQUNfTUQ1LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsICJKZWZlIiwKKyAgICAgICAgIlx4NzVceDBjXHg3OFx4M2VceDZhXHhiMFx4YjVceDAzXHhlYVx4YThceDZlXHgzMVx4MGFceDVkXHhiN1x4MzgiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfTUQ1LAorICAgICAgICAiSGkgVGhlcmUiLAorICAgICAgICAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIsCisgICAgICAgICJceDkyXHg5NFx4NzJceDdhXHgzNlx4MzhceGJiXHgxY1x4MTNceGY0XHg4ZVx4ZjhceDE1XHg4Ylx4ZmNceDlkIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX01ENSwKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKKyAgICAgICAgIlx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUEiLAorICAgICAgICAiXHg1Nlx4YmVceDM0XHg1Mlx4MWRceDE0XHg0Y1x4ODhceGRiXHhiOFx4YzdceDMzXHhmMFx4ZThceGIzXHhmNiIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19NRDUsCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZCIsCisgICAgICAgICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisgICAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKyAgICAgICAgIlx4NjlceDdlXHhhZlx4MGFceGNhXHgzYVx4M2FceGVhXHgzYVx4NzVceDE2XHg0N1x4NDZceGZmXHhhYVx4NzkiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfTUQ1LCAiVGVzdCBXaXRoIFRydW5jYXRpb24iLAorICAgICAgICAiXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIsCisgICAgICAgICJceDU2XHg0Nlx4MWVceGYyXHgzNFx4MmVceGRjXHgwMFx4ZjlceGJhXHhiOVx4OTVceDY5XHgwZVx4ZmRceDRjIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX01ENSwgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIsCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYSIsCisgICAgICAgICJceDZiXHgxYVx4YjdceGZlXHg0Ylx4ZDdceGJmXHg4Zlx4MGJceDYyXHhlNlx4Y2VceDYxXHhiOVx4ZDBceGNkIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX01ENSwKKyAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiLAorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWEiLAorICAgICAgICAiXHg2Zlx4NjNceDBmXHhhZFx4NjdceGNkXHhhMFx4ZWVceDFmXHhiMVx4ZjVceDYyXHhkYlx4M2FceGE1XHgzZSIsIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMjU2LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsICJKZWZlIiwKKyAgICAgICAgIlx4NWJceGRjXHhjMVx4NDZceGJmXHg2MFx4NzVceDRlXHg2YVx4MDRceDI0XHgyNlx4MDhceDk1XHg3NVx4YzdceDVhIgorICAgICAgICAiXHgwMFx4M2ZceDA4XHg5ZFx4MjdceDM5XHg4M1x4OWRceGVjXHg1OFx4YjlceDY0XHhlY1x4MzhceDQzIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTI1NiwKKyAgICAgICAgIkhpIFRoZXJlIiwKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIgorICAgICAgICAiXHgwYlx4MGJceDBiIiwKKyAgICAgICAgIlx4YjBceDM0XHg0Y1x4NjFceGQ4XHhkYlx4MzhceDUzXHg1Y1x4YThceGFmXHhjZVx4YWZceDBiXHhmMVx4MmJceDg4IgorICAgICAgICAiXHgxZFx4YzJceDAwXHhjOVx4ODNceDNkXHhhN1x4MjZceGU5XHgzN1x4NmNceDJlXHgzMlx4Y2ZceGY3IiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTI1NiwKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKyAgICAgICAgIlx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKKyAgICAgICAgIlx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUEiCisgICAgICAgICJceEFBXHhBQVx4QUFceEFBIiwKKyAgICAgICAgIlx4NzdceDNlXHhhOVx4MWVceDM2XHg4MFx4MGVceDQ2XHg4NVx4NGRceGI4XHhlYlx4ZDBceDkxXHg4MVx4YTciCisgICAgICAgICJceDI5XHg1OVx4MDlceDhiXHgzZVx4ZjhceGMxXHgyMlx4ZDlceDYzXHg1NVx4MTRceGNlXHhkNVx4NjVceGZlIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTI1NiwKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKyAgICAgICAgIlx4Y2RceGNkXHhjZFx4Y2RceGNkIiwKKyAgICAgICAgIlx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKyAgICAgICAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTkiLAorICAgICAgICAiXHg4Mlx4NTVceDhhXHgzOFx4OWFceDQ0XHgzY1x4MGVceGE0XHhjY1x4ODFceDk4XHg5OVx4ZjJceDA4IgorICAgICAgICAiXHgzYVx4ODVceGYwXHhmYVx4YTNceGU1XHg3OFx4ZjhceDA3XHg3YVx4MmVceDNmXHhmNFx4NjdceDI5XHg2Nlx4NWIiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMjU2LAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgIlx4NjBceGU0XHgzMVx4NTlceDFlXHhlMFx4YjZceDdmXHgwZFx4OGFceDI2XHhhYVx4Y2JceGY1XHhiN1x4N2YiCisgICAgICAgICJceDhlXHgwYlx4YzZceDIxXHgzN1x4MjhceGM1XHgxNFx4MDVceDQ2XHgwNFx4MGZceDBlXHhlM1x4N2ZceDU0IiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTI1NiwKKyAgICAgICAgIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBkYXRhLiBUaGUga2V5IG5lZWRzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgdXNlZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uIiwKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgIlx4OWJceDA5XHhmZlx4YTdceDFiXHg5NFx4MmZceGNiXHgyN1x4NjNceDVmXHhiY1x4ZDVceGIwXHhlOVx4NDQiCisgICAgICAgICJceGJmXHhkY1x4NjNceDY0XHg0Zlx4MDdceDEzXHg5M1x4OGFceDdmXHg1MVx4NTNceDVjXHgzYVx4MzVceGUyIiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTIyNCwgIndoYXQgZG8geWEgd2FudCBmb3Igbm90aGluZz8iLCAiSmVmZSIsCisgICAgICAgICJceGEzXHgwZVx4MDFceDA5XHg4Ylx4YzZceGRiXHhiZlx4NDVceDY5XHgwZlx4M2FceDdlXHg5ZVx4NmRceDBmIgorICAgICAgICAiXHg4Ylx4YmVceGEyXHhhM1x4OWVceDYxXHg0OFx4MDBceDhmXHhkMFx4NWVceDQ0IiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTIyNCwKKyAgICAgICAgIkhpIFRoZXJlIiwKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIgorICAgICAgICAiXHgwYlx4MGJceDBiIiwKKyAgICAgICAgIlx4ODlceDZmXHhiMVx4MTJceDhhXHhiYlx4ZGZceDE5XHg2OFx4MzJceDEwXHg3Y1x4ZDRceDlkXHhmM1x4M2ZceDQ3IgorICAgICAgICAiXHhiNFx4YjFceDE2XHg5OVx4MTJceGJhXHg0Zlx4NTNceDY4XHg0Ylx4MjIiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMjI0LAorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorICAgICAgICAiXHhkZFx4ZGRceGRkXHhkZFx4ZGQiLAorICAgICAgICAiXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQSIKKyAgICAgICAgIlx4QUFceEFBXHhBQVx4QUEiLAorICAgICAgICAiXHg3Zlx4YjNceGNiXHgzNVx4ODhceGM2XHhjMVx4ZjZceGZmXHhhOVx4NjlceDRkXHg3ZFx4NmFceGQyXHg2NCIKKyAgICAgICAgIlx4OTNceDY1XHhiMFx4YzFceGY2XHg1ZFx4NjlceGQxXHhlY1x4ODNceDMzXHhlYSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEEyMjQsCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZCIsCisgICAgICAgICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisgICAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKyAgICAgICAgIlx4NmNceDExXHg1MFx4NjhceDc0XHgwMVx4M2NceGFjXHg2YVx4MmFceGJjXHgxYlx4YjNceDgyXHg2MiIKKyAgICAgICAgIlx4N2NceGVjXHg2YVx4OTBceGQ4XHg2ZVx4ZmNceDAxXHgyZFx4ZTdceGFmXHhlY1x4NWEiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMjI0LAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgIlx4OTVceGU5XHhhMFx4ZGJceDk2XHgyMFx4OTVceGFkXHhhZVx4YmVceDliXHgyZFx4NmZceDBkXHhiY1x4ZTIiCisgICAgICAgICJceGQ0XHg5OVx4ZjFceDEyXHhmMlx4ZDJceGI3XHgyN1x4M2ZceGE2XHg4N1x4MGUiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMjI0LAorICAgICAgICAiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorICAgICAgICAiXHgzYVx4ODVceDQxXHg2Nlx4YWNceDVkXHg5Zlx4MDJceDNmXHg1NFx4ZDVceDE3XHhkMFx4YjNceDlkXHhiZCIKKyAgICAgICAgIlx4OTRceDY3XHg3MFx4ZGJceDljXHgyYlx4OTVceGM5XHhmNlx4ZjVceDY1XHhkMSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEEzODQsICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwgIkplZmUiLAorICAgICAgICAiXHhhZlx4NDVceGQyXHhlM1x4NzZceDQ4XHg0MFx4MzFceDYxXHg3Zlx4NzhceGQyXHhiNVx4OGFceDZiXHgxYiIKKyAgICAgICAgIlx4OWNceDdlXHhmNFx4NjRceGY1XHhhMFx4MWJceDQ3XHhlNFx4MmVceGMzXHg3M1x4NjNceDIyXHg0NFx4NWUiCisgICAgICAgICJceDhlXHgyMlx4NDBceGNhXHg1ZVx4NjlceGUyXHhjN1x4OGJceDMyXHgzOVx4ZWNceGZhXHhiMlx4MTZceDQ5IiB9LAorICAgICAgeyBHQ1JZX01BQ19ITUFDX1NIQTM4NCwKKyAgICAgICAgIkhpIFRoZXJlIiwKKyAgICAgICAgIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIgorICAgICAgICAiXHgwYlx4MGJceDBiIiwKKyAgICAgICAgIlx4YWZceGQwXHgzOVx4NDRceGQ4XHg0OFx4OTVceDYyXHg2Ylx4MDhceDI1XHhmNFx4YWJceDQ2XHg5MFx4N2ZceDE1IgorICAgICAgICAiXHhmOVx4ZGFceGRiXHhlNFx4MTBceDFlXHhjNlx4ODJceGFhXHgwM1x4NGNceDdjXHhlYlx4YzVceDljXHhmYVx4ZWEiCisgICAgICAgICJceDllXHhhOVx4MDdceDZlXHhkZVx4N2ZceDRhXHhmMVx4NTJceGU4XHhiMlx4ZmFceDljXHhiNiIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEEzODQsCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZCIsCisgICAgICAgICJceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBIgorICAgICAgICAiXHhBQVx4QUFceEFBXHhBQSIsCisgICAgICAgICJceDg4XHgwNlx4MjZceDA4XHhkM1x4ZTZceGFkXHg4YVx4MGFceGEyXHhhY1x4ZTBceDE0XHhjOFx4YThceDZmIgorICAgICAgICAiXHgwYVx4YTZceDM1XHhkOVx4NDdceGFjXHg5Zlx4ZWJceGU4XHgzZVx4ZjRceGU1XHg1OVx4NjZceDE0XHg0YiIKKyAgICAgICAgIlx4MmFceDVhXHhiM1x4OWRceGMxXHgzOFx4MTRceGI5XHg0ZVx4M2FceGI2XHhlMVx4MDFceGEzXHg0Zlx4MjciIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMzg0LAorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorICAgICAgICAiXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAorICAgICAgICAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorICAgICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOSIsCisgICAgICAgICJceDNlXHg4YVx4NjlceGI3XHg3OFx4M2NceDI1XHg4NVx4MTlceDMzXHhhYlx4NjJceDkwXHhhZlx4NmNceGE3IgorICAgICAgICAiXHg3YVx4OTlceDgxXHg0OFx4MDhceDUwXHgwMFx4OWNceGM1XHg1N1x4N2NceDZlXHgxZlx4NTdceDNiXHg0ZSIKKyAgICAgICAgIlx4NjhceDAxXHhkZFx4MjNceGM0XHhhN1x4ZDZceDc5XHhjY1x4ZjhceGEzXHg4Nlx4YzZceDc0XHhjZlx4ZmIiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBMzg0LAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgIlx4NGVceGNlXHgwOFx4NDRceDg1XHg4MVx4M2VceDkwXHg4OFx4ZDJceGM2XHgzYVx4MDRceDFiXHhjNVx4YjQiCisgICAgICAgICJceDRmXHg5ZVx4ZjFceDAxXHgyYVx4MmJceDU4XHg4Zlx4M2NceGQxXHgxZlx4MDVceDAzXHgzYVx4YzRceGM2IgorICAgICAgICAiXHgwY1x4MmVceGY2XHhhYlx4NDBceDMwXHhmZVx4ODJceDk2XHgyNFx4OGRceGYxXHg2M1x4ZjRceDQ5XHg1MiIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEEzODQsCisgICAgICAgICJUaGlzIGlzIGEgdGVzdCB1c2luZyBhIGxhcmdlciB0aGFuIGJsb2NrLXNpemUga2V5IGFuZCBhIGxhcmdlciB0aGFuIGJsb2NrLXNpemUgZGF0YS4gVGhlIGtleSBuZWVkcyB0byBiZSBoYXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQgYnkgdGhlIEhNQUMgYWxnb3JpdGhtLiIsCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYSIsCisgICAgICAgICJceDY2XHgxN1x4MTdceDhlXHg5NFx4MWZceDAyXHgwZFx4MzVceDFlXHgyZlx4MjVceDRlXHg4Zlx4ZDNceDJjIgorICAgICAgICAiXHg2MFx4MjRceDIwXHhmZVx4YjBceGI4XHhmYlx4OWFceGRjXHhjZVx4YmJceDgyXHg0Nlx4MWVceDk5XHhjNSIKKyAgICAgICAgIlx4YTZceDc4XHhjY1x4MzFceGU3XHg5OVx4MTdceDZkXHgzOFx4NjBceGU2XHgxMVx4MGNceDQ2XHg1Mlx4M2UiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBNTEyLCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsICJKZWZlIiwKKyAgICAgICAgIlx4MTZceDRiXHg3YVx4N2JceGZjXHhmOFx4MTlceGUyXHhlM1x4OTVceGZiXHhlN1x4M2JceDU2XHhlMFx4YTMiCisgICAgICAgICJceDg3XHhiZFx4NjRceDIyXHgyZVx4ODNceDFmXHhkNlx4MTBceDI3XHgwY1x4ZDdceGVhXHgyNVx4MDVceDU0IgorICAgICAgICAiXHg5N1x4NThceGJmXHg3NVx4YzBceDVhXHg5OVx4NGFceDZkXHgwM1x4NGZceDY1XHhmOFx4ZjBceGU2XHhmZCIKKyAgICAgICAgIlx4Y2FceGVhXHhiMVx4YTNceDRkXHg0YVx4NmJceDRiXHg2M1x4NmVceDA3XHgwYVx4MzhceGJjXHhlN1x4MzciIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBNTEyLAorICAgICAgICAiSGkgVGhlcmUiLAorICAgICAgICAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisgICAgICAgICJceDBiXHgwYlx4MGIiLAorICAgICAgICAiXHg4N1x4YWFceDdjXHhkZVx4YTVceGVmXHg2MVx4OWRceDRmXHhmMFx4YjRceDI0XHgxYVx4MWRceDZjXHhiMCIKKyAgICAgICAgIlx4MjNceDc5XHhmNFx4ZTJceGNlXHg0ZVx4YzJceDc4XHg3YVx4ZDBceGIzXHgwNVx4NDVceGUxXHg3Y1x4ZGUiCisgICAgICAgICJceGRhXHhhOFx4MzNceGI3XHhkNlx4YjhceGE3XHgwMlx4MDNceDhiXHgyN1x4NGVceGFlXHhhM1x4ZjRceGU0IgorICAgICAgICAiXHhiZVx4OWRceDkxXHg0ZVx4ZWJceDYxXHhmMVx4NzBceDJlXHg2OVx4NmNceDIwXHgzYVx4MTJceDY4XHg1NCIgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEE1MTIsCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisgICAgICAgICJceGRkXHhkZFx4ZGRceGRkXHhkZCIsCisgICAgICAgICJceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBXHhBQVx4QUFceEFBIgorICAgICAgICAiXHhBQVx4QUFceEFBXHhBQSIsCisgICAgICAgICJceGZhXHg3M1x4YjBceDA4XHg5ZFx4NTZceGEyXHg4NFx4ZWZceGIwXHhmMFx4NzVceDZjXHg4OVx4MGJceGU5IgorICAgICAgICAiXHhiMVx4YjVceGRiXHhkZFx4OGVceGU4XHgxYVx4MzZceDU1XHhmOFx4M2VceDMzXHhiMlx4MjdceDlkXHgzOSIKKyAgICAgICAgIlx4YmZceDNlXHg4NFx4ODJceDc5XHhhN1x4MjJceGM4XHgwNlx4YjRceDg1XHhhNFx4N2VceDY3XHhjOFx4MDciCisgICAgICAgICJceGI5XHg0Nlx4YTNceDM3XHhiZVx4ZThceDk0XHgyNlx4NzRceDI3XHg4OFx4NTlceGUxXHgzMlx4OTJceGZiIiAgfSwKKyAgICAgIHsgR0NSWV9NQUNfSE1BQ19TSEE1MTIsCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisgICAgICAgICJceGNkXHhjZFx4Y2RceGNkXHhjZCIsCisgICAgICAgICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisgICAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKKyAgICAgICAgIlx4YjBceGJhXHg0Nlx4NTZceDM3XHg0NVx4OGNceDY5XHg5MFx4ZTVceGE4XHhjNVx4ZjZceDFkXHg0YVx4ZjciCisgICAgICAgICJceGU1XHg3Nlx4ZDlceDdmXHhmOVx4NGJceDg3XHgyZFx4ZTdceDZmXHg4MFx4NTBceDM2XHgxZVx4ZTNceGRiIgorICAgICAgICAiXHhhOVx4MWNceGE1XHhjMVx4MWFceGEyXHg1ZVx4YjRceGQ2XHg3OVx4MjdceDVjXHhjNVx4NzhceDgwXHg2MyIKKyAgICAgICAgIlx4YTVceGYxXHg5N1x4NDFceDEyXHgwY1x4NGZceDJkXHhlMlx4YWRceGViXHhlYlx4MTBceGEyXHg5OFx4ZGQiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBNTEyLAorICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhIiwKKyAgICAgICAgIlx4ODBceGIyXHg0Mlx4NjNceGM3XHhjMVx4YTNceGViXHhiN1x4MTRceDkzXHhjMVx4ZGRceDdiXHhlOFx4YjQiCisgICAgICAgICJceDliXHg0Nlx4ZDFceGY0XHgxYlx4NGFceGVlXHhjMVx4MTJceDFiXHgwMVx4MzdceDgzXHhmOFx4ZjNceDUyIgorICAgICAgICAiXHg2Ylx4NTZceGQwXHgzN1x4ZTBceDVmXHgyNVx4OThceGJkXHgwZlx4ZDJceDIxXHg1ZFx4NmFceDFlXHg1MiIKKyAgICAgICAgIlx4OTVceGU2XHg0Zlx4NzNceGY2XHgzZlx4MGFceGVjXHg4Ylx4OTFceDVhXHg5OFx4NWRceDc4XHg2NVx4OTgiIH0sCisgICAgICB7IEdDUllfTUFDX0hNQUNfU0hBNTEyLAorICAgICAgICAiVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGtleSBhbmQgYSBsYXJnZXIgdGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iLAorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisgICAgICAgICJceGFhXHhhYVx4YWEiLAorICAgICAgICAiXHhlM1x4N2JceDZhXHg3N1x4NWRceGM4XHg3ZFx4YmFceGE0XHhkZlx4YTlceGY5XHg2ZVx4NWVceDNmXHhmZCIKKyAgICAgICAgIlx4ZGVceGJkXHg3MVx4ZjhceDg2XHg3Mlx4ODlceDg2XHg1ZFx4ZjVceGEzXHgyZFx4MjBceGNkXHhjOVx4NDQiCisgICAgICAgICJceGI2XHgwMlx4MmNceGFjXHgzY1x4NDlceDgyXHhiMVx4MGRceDVlXHhlYlx4NTVceGMzXHhlNFx4ZGVceDE1IgorICAgICAgICAiXHgxM1x4NDZceDc2XHhmYlx4NmRceGUwXHg0NFx4NjBceDY1XHhjOVx4NzRceDQwXHhmYVx4OGNceDZhXHg1OCIgfSwKKyAgICAgIC8qIENNQUMgQUVTIGFuZCBERVMgdGVzdCB2ZWN0b3JzIGZyb20KKyAgICAgICAgIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTMwOTMwMjEyODE5L2h0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2FcCisgICAgICAgICB0aW9ucy9uaXN0cHVicy84MDAtMzhCL1VwZGF0ZWRfQ01BQ19FeGFtcGxlcy5wZGYgKi8KKyAgICAgIHsgR0NSWV9NQUNfQ01BQ19BRVMsCisgICAgICAgICIiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceGJiXHgxZFx4NjlceDI5XHhlOVx4NTlceDM3XHgyOFx4N2ZceGEzXHg3ZFx4MTJceDliXHg3NVx4NjdceDQ2IiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceDA3XHgwYVx4MTZceGI0XHg2Ylx4NGRceDQxXHg0NFx4ZjdceDliXHhkZFx4OWRceGQwXHg0YVx4MjhceDdjIiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorICAgICAgICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceGRmXHhhNlx4NjdceDQ3XHhkZVx4OWFceGU2XHgzMFx4MzBceGNhXHgzMlx4NjFceDE0XHg5N1x4YzhceDI3IiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorICAgICAgICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKyAgICAgICAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceDUxXHhmMFx4YmVceGJmXHg3ZVx4M2JceDlkXHg5Mlx4ZmNceDQ5XHg3NFx4MTdceDc5XHgzNlx4M2NceGZlIiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIiIsCisgICAgICAgICJceDhlXHg3M1x4YjBceGY3XHhkYVx4MGVceDY0XHg1Mlx4YzhceDEwXHhmM1x4MmJceDgwXHg5MFx4NzlceGU1IgorICAgICAgICAiXHg2Mlx4ZjhceGVhXHhkMlx4NTJceDJjXHg2Ylx4N2IiLAorICAgICAgICAiXHhkMVx4N2RceGRmXHg0Nlx4YWRceGFhXHhjZFx4ZTVceDMxXHhjYVx4YzRceDgzXHhkZVx4N2FceDkzXHg2NyIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ19BRVMsCisgICAgICAgICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKyAgICAgICAgIlx4OGVceDczXHhiMFx4ZjdceGRhXHgwZVx4NjRceDUyXHhjOFx4MTBceGYzXHgyYlx4ODBceDkwXHg3OVx4ZTUiCisgICAgICAgICJceDYyXHhmOFx4ZWFceGQyXHg1Mlx4MmNceDZiXHg3YiIsCisgICAgICAgICJceDllXHg5OVx4YTdceGJmXHgzMVx4ZTdceDEwXHg5MFx4MDZceDYyXHhmNlx4NWVceDYxXHg3Y1x4NTFceDg0IiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorICAgICAgICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiLAorICAgICAgICAiXHg4ZVx4NzNceGIwXHhmN1x4ZGFceDBlXHg2NFx4NTJceGM4XHgxMFx4ZjNceDJiXHg4MFx4OTBceDc5XHhlNSIKKyAgICAgICAgIlx4NjJceGY4XHhlYVx4ZDJceDUyXHgyY1x4NmJceDdiIiwKKyAgICAgICAgIlx4OGFceDFkXHhlNVx4YmVceDJlXHhiM1x4MWFceGFkXHgwOFx4OWFceDgyXHhlNlx4ZWVceDkwXHg4Ylx4MGUiIH0sCisgICAgICB7IEdDUllfTUFDX0NNQUNfQUVTLAorICAgICAgICAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIKKyAgICAgICAgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiCisgICAgICAgICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMVx4ZTVceGZiXHhjMVx4MTlceDFhXHgwYVx4NTJceGVmIgorICAgICAgICAiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTdceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisgICAgICAgICJceDhlXHg3M1x4YjBceGY3XHhkYVx4MGVceDY0XHg1Mlx4YzhceDEwXHhmM1x4MmJceDgwXHg5MFx4NzlceGU1IgorICAgICAgICAiXHg2Mlx4ZjhceGVhXHhkMlx4NTJceDJjXHg2Ylx4N2IiLAorICAgICAgICAiXHhhMVx4ZDVceGRmXHgwZVx4ZWRceDc5XHgwZlx4NzlceDRkXHg3N1x4NThceDk2XHg1OVx4ZjNceDlhXHgxMSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ19BRVMsCisgICAgICAgICIiLAorICAgICAgICAiXHg2MFx4M2RceGViXHgxMFx4MTVceGNhXHg3MVx4YmVceDJiXHg3M1x4YWVceGYwXHg4NVx4N2RceDc3XHg4MSIKKyAgICAgICAgIlx4MWZceDM1XHgyY1x4MDdceDNiXHg2MVx4MDhceGQ3XHgyZFx4OThceDEwXHhhM1x4MDlceDE0XHhkZlx4ZjQiLAorICAgICAgICAiXHgwMlx4ODlceDYyXHhmNlx4MWJceDdiXHhmOFx4OWVceGZjXHg2Ylx4NTVceDFmXHg0Nlx4NjdceGQ5XHg4MyIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ19BRVMsCisgICAgICAgICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIiwKKyAgICAgICAgIlx4NjBceDNkXHhlYlx4MTBceDE1XHhjYVx4NzFceGJlXHgyYlx4NzNceGFlXHhmMFx4ODVceDdkXHg3N1x4ODEiCisgICAgICAgICJceDFmXHgzNVx4MmNceDA3XHgzYlx4NjFceDA4XHhkN1x4MmRceDk4XHgxMFx4YTNceDA5XHgxNFx4ZGZceGY0IiwKKyAgICAgICAgIlx4MjhceGE3XHgwMlx4M2ZceDQ1XHgyZVx4OGZceDgyXHhiZFx4NGJceGYyXHg4ZFx4OGNceDM3XHhjM1x4NWMiIH0sCisgICAgICB7IEdDUllfTUFDX0NNQUNfQUVTLAorICAgICAgICAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIKKyAgICAgICAgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiCisgICAgICAgICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMSIsCisgICAgICAgICJceDYwXHgzZFx4ZWJceDEwXHgxNVx4Y2FceDcxXHhiZVx4MmJceDczXHhhZVx4ZjBceDg1XHg3ZFx4NzdceDgxIgorICAgICAgICAiXHgxZlx4MzVceDJjXHgwN1x4M2JceDYxXHgwOFx4ZDdceDJkXHg5OFx4MTBceGEzXHgwOVx4MTRceGRmXHhmNCIsCisgICAgICAgICJceGFhXHhmM1x4ZDhceGYxXHhkZVx4NTZceDQwXHhjMlx4MzJceGY1XHhiMVx4NjlceGI5XHhjOVx4MTFceGU2IiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0FFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorICAgICAgICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKyAgICAgICAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAiXHg2MFx4M2RceGViXHgxMFx4MTVceGNhXHg3MVx4YmVceDJiXHg3M1x4YWVceGYwXHg4NVx4N2RceDc3XHg4MSIKKyAgICAgICAgIlx4MWZceDM1XHgyY1x4MDdceDNiXHg2MVx4MDhceGQ3XHgyZFx4OThceDEwXHhhM1x4MDlceDE0XHhkZlx4ZjQiLAorICAgICAgICAiXHhlMVx4OTlceDIxXHg5MFx4NTRceDlmXHg2ZVx4ZDVceDY5XHg2YVx4MmNceDA1XHg2Y1x4MzFceDU0XHgxMCIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ18zREVTLAorICAgICAgICAiIiwKKyAgICAgICAgIlx4OGFceGE4XHgzYlx4ZjhceGNiXHhkYVx4MTBceDYyXHgwYlx4YzFceGJmXHgxOVx4ZmJceGI2XHhjZFx4NTgiCisgICAgICAgICJceGJjXHgzMVx4M2RceDRhXHgzN1x4MWNceGE4XHhiNSIsCisgICAgICAgICJceGI3XHhhNlx4ODhceGUxXHgyMlx4ZmZceGFmXHg5NSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ18zREVTLAorICAgICAgICAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTYiLAorICAgICAgICAiXHg4YVx4YThceDNiXHhmOFx4Y2JceGRhXHgxMFx4NjJceDBiXHhjMVx4YmZceDE5XHhmYlx4YjZceGNkXHg1OCIKKyAgICAgICAgIlx4YmNceDMxXHgzZFx4NGFceDM3XHgxY1x4YThceGI1IiwKKyAgICAgICAgIlx4OGVceDhmXHgyOVx4MzFceDM2XHgyOFx4MzdceDk3IiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDXzNERVMsCisgICAgICAgICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorICAgICAgICAiXHhhZVx4MmRceDhhXHg1NyIsCisgICAgICAgICJceDhhXHhhOFx4M2JceGY4XHhjYlx4ZGFceDEwXHg2Mlx4MGJceGMxXHhiZlx4MTlceGZiXHhiNlx4Y2RceDU4IgorICAgICAgICAiXHhiY1x4MzFceDNkXHg0YVx4MzdceDFjXHhhOFx4YjUiLAorICAgICAgICAiXHg3NFx4M2RceGRiXHhlMFx4Y2VceDJkXHhjMlx4ZWQiIH0sCisgICAgICB7IEdDUllfTUFDX0NNQUNfM0RFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIiwKKyAgICAgICAgIlx4OGFceGE4XHgzYlx4ZjhceGNiXHhkYVx4MTBceDYyXHgwYlx4YzFceGJmXHgxOVx4ZmJceGI2XHhjZFx4NTgiCisgICAgICAgICJceGJjXHgzMVx4M2RceDRhXHgzN1x4MWNceGE4XHhiNSIsCisgICAgICAgICJceDMzXHhlNlx4YjFceDA5XHgyNFx4MDBceGVhXHhlNSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ18zREVTLAorICAgICAgICAiIiwKKyAgICAgICAgIlx4NGNceGYxXHg1MVx4MzRceGEyXHg4NVx4MGRceGQ1XHg4YVx4M2RceDEwXHhiYVx4ODBceDU3XHgwZFx4MzgiCisgICAgICAgICJceDRjXHhmMVx4NTFceDM0XHhhMlx4ODVceDBkXHhkNSIsCisgICAgICAgICJceGJkXHgyZVx4YmZceDlhXHgzYlx4YTBceDAzXHg2MSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ18zREVTLAorICAgICAgICAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTYiLAorICAgICAgICAiXHg0Y1x4ZjFceDUxXHgzNFx4YTJceDg1XHgwZFx4ZDVceDhhXHgzZFx4MTBceGJhXHg4MFx4NTdceDBkXHgzOCIKKyAgICAgICAgIlx4NGNceGYxXHg1MVx4MzRceGEyXHg4NVx4MGRceGQ1IiwKKyAgICAgICAgIlx4NGZceGYyXHhhYlx4ODFceDNjXHg1M1x4Y2VceDgzIiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDXzNERVMsCisgICAgICAgICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorICAgICAgICAiXHhhZVx4MmRceDhhXHg1NyIsCisgICAgICAgICJceDRjXHhmMVx4NTFceDM0XHhhMlx4ODVceDBkXHhkNVx4OGFceDNkXHgxMFx4YmFceDgwXHg1N1x4MGRceDM4IgorICAgICAgICAiXHg0Y1x4ZjFceDUxXHgzNFx4YTJceDg1XHgwZFx4ZDUiLAorICAgICAgICAiXHg2Mlx4ZGRceDFiXHg0N1x4MTlceDAyXHhiZFx4NGUiIH0sCisgICAgICB7IEdDUllfTUFDX0NNQUNfM0RFUywKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIiwKKyAgICAgICAgIlx4NGNceGYxXHg1MVx4MzRceGEyXHg4NVx4MGRceGQ1XHg4YVx4M2RceDEwXHhiYVx4ODBceDU3XHgwZFx4MzgiCisgICAgICAgICJceDRjXHhmMVx4NTFceDM0XHhhMlx4ODVceDBkXHhkNSIsCisgICAgICAgICJceDMxXHhiMVx4ZTRceDMxXHhkYVx4YmNceDRlXHhiOCIgfSwKKyAgICAgIC8qIENNQUMgQ2FtZWxsaWEgdGVzdCB2ZWN0b3JzIGZyb20KKyAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtY21hYzk2YW5kMTI4LTA1ICovCisgICAgICB7IEdDUllfTUFDX0NNQUNfQ0FNRUxMSUEsCisgICAgICAgICIiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceGJhXHg5Mlx4NTdceDgyXHhhYVx4YTFceGY1XHhkOVx4YTBceDBmXHg4OVx4NjRceDgwXHg5NFx4ZmNceDcxIiB9LAorICAgICAgeyBHQ1JZX01BQ19DTUFDX0NBTUVMTElBLAorICAgICAgICAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTZceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIsCisgICAgICAgICJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKyAgICAgICAgIlx4NmRceDk2XHgyOFx4NTRceGEzXHhiOVx4ZmRceGE1XHg2ZFx4N2RceDQ1XHhhOVx4NWVceGUxXHg3OVx4OTMiIH0sCisgICAgICB7IEdDUllfTUFDX0NNQUNfQ0FNRUxMSUEsCisgICAgICAgICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5Nlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorICAgICAgICAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWNceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIKKyAgICAgICAgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExIiwKKyAgICAgICAgIlx4MmJceDdlXHgxNVx4MTZceDI4XHhhZVx4ZDJceGE2XHhhYlx4ZjdceDE1XHg4OFx4MDlceGNmXHg0Zlx4M2MiLAorICAgICAgICAiXHg1Y1x4MThceGQxXHgxOVx4Y2NceGQ2XHg3Nlx4NjFceDQ0XHhhY1x4MThceDY2XHgxM1x4MWRceDlmXHgyMiIgfSwKKyAgICAgIHsgR0NSWV9NQUNfQ01BQ19DQU1FTExJQSwKKyAgICAgICAgIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2XHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisgICAgICAgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5Y1x4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorICAgICAgICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTFceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKyAgICAgICAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3XHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorICAgICAgICAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTZceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisgICAgICAgICJceGMyXHg2OVx4OWFceDZlXHhiYVx4NTVceGNlXHg5ZFx4OTNceDlhXHg4YVx4NGVceDE5XHg0Nlx4NmVceGU5IiB9LAorICAgICAgLyogaHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUTS9jYXZwL2RvY3VtZW50cy9tYWMvZ2NtdGVzdHZlY3RvcnMuemlwICovCisgICAgICB7IEdDUllfTUFDX0dNQUNfQUVTLAorICAgICAgICAiIiwKKyAgICAgICAgIlx4MTFceDc1XHg0Y1x4ZDdceDJhXHhlY1x4MzBceDliXHhmNVx4MmZceDc2XHg4N1x4MjFceDJlXHg4OVx4NTciLAorICAgICAgICAiXHgyNVx4MDNceDI3XHhjNlx4NzRceGFhXHhmNFx4NzdceGFlXHhmMlx4NjdceDU3XHg0OFx4Y2ZceDY5XHg3MSIsCisgICAgICAgICJceDNjXHg4MVx4OWRceDlhXHg5Ylx4ZWRceDA4XHg3Nlx4MTVceDAzXHgwYlx4NjUiIH0sCisgICAgICB7IEdDUllfTUFDX0dNQUNfQUVTLAorICAgICAgICAiXHgyYlx4NjNceDI2XHg2NFx4MjlceDY3XHg0YVx4YjVceGUyXHhlYVx4ZmZceDYzXHg5Y1x4MjNceDE0XHg2NiIKKyAgICAgICAgIlx4MmZceDkyXHg1N1x4NGJceDI5XHg4Zlx4NTdceDdhXHhjZlx4N2RceDZmXHg5OVx4MWFceDg3XHg5Mlx4MWYiCisgICAgICAgICJceGMyXHgzMlx4ZWFceGZjXHhjN1x4YjFceDQ2XHg0OFx4OTZceDYzXHgyZFx4NmNceDhhXHhiZVx4ODhceGMyIgorICAgICAgICAiXHhjY1x4YTRceDA0XHhkYlx4ZjhceDdjXHgyMFx4NmFceDE5XHhkM1x4NzNceGVkXHg5OVx4NTBceDE3XHgzNCIKKyAgICAgICAgIlx4NjlceDEzXHg0ZFx4N2NceDE0XHhjMlx4ODRceDdkXHhmMlx4NGFceDg4XHhjMVx4YzVceDNiXHg0ZFx4ZTQiCisgICAgICAgICJceDlkXHhiM1x4NjZceDM5XHgyYlx4NmRceGM2XHg1MVx4MjdceDZlIiwKKyAgICAgICAgIlx4MGZceDNiXHgxN1x4ZGVceGFlXHg2Mlx4MTNceDY0XHg1NVx4NGFceGU1XHgzOVx4ZGJceDA5XHhkZVx4MTEiLAorICAgICAgICAiXHhmZlx4YjBceGJiXHg2ZFx4ZmNceDIzXHg1OFx4NzVceDRmXHgxN1x4NzhceDQ4XHg1Ylx4NTlceDY1XHg3ZiIsCisgICAgICAgICJceGE3XHhmNlx4MDdceDRjXHhkYVx4NTZceDFjXHhkMlx4YWFceDE1XHhiYVx4OGNceDJmXHhhNlx4MzlceDQyIgorICAgICAgICAiXHg1OVx4M2VceDdjXHhjZlx4NDVceGMyXHg5YVx4NTdceGRhXHhkOFx4YTZceGUyXHhlYVx4NjNceDU0XHhjZSIKKyAgICAgICAgIlx4OGFceGRlXHgzOVx4ZGRceGRlXHg0YVx4YzRceDViXHhiZFx4YzZceDYzXHhmMFx4YTVceDM3XHhjOVx4NDgiCisgICAgICAgICJceDE4XHgyM1x4NWFceDczXHhkOFx4YTBceDhiXHhkOFx4OThceGFiXHhkMFx4OTlceGUxXHg1Y1x4MDhceDhjIgorICAgICAgICAiXHg2ZVx4MjFceDE3XHg1YVx4ZjRceGU5XHhhNFx4OTlceDcwXHgxMlx4ODJceGVkXHgzMlx4ODFceDUwXHhhNiIKKyAgICAgICAgIlx4ZDlceDkwXHhlOFx4ZWNceDg3XHg4NVx4Y2VceDI2XHgxYlx4ZTFceGI4XHgzZlx4ZDhceDU5XHgxZVx4NTciCisgICAgICAgICJceDc2XHg1Zlx4M2RceGMxXHgxMVx4M2ZceGQwXHgyYVx4NDBceGY1XHgwMVx4NmFceGQwXHhkMFx4ZWRceGM0IgorICAgICAgICAiXHg5Mlx4OWFceDAyXHhlMFx4MTdceGIyXHhjNVx4ZjRceDE4XHhkMlx4OTZceGFiXHhkNlx4YzJceGVhXHgyZSIgfSwKKyAgICAgIHsgR0NSWV9NQUNfR01BQ19BRVMsCisgICAgICAgICJceDYxXHgxNFx4NjBceDExXHg5MFx4ZjZceGVmXHg1ZVx4NTlceDIzXHg1ZFx4YzBceDQyXHg4Y1x4MDlceGUzIgorICAgICAgICAiXHgyN1x4MGJceDE5XHhlYSIsCisgICAgICAgICJceDE1XHhhNFx4MTRceDQ2XHg2YVx4N2ZceDkwXHhlYVx4MzJceGJmXHhkN1x4ZjZceGU1XHg4Ylx4ZmFceDA2IgorICAgICAgICAiXHhlOVx4MDdceGZjXHg0MVx4NjZceDg5XHhkOVx4NjBceDM5XHg0NVx4ZDdceDk0XHg1NFx4ZDRceDIzXHgxNyIsCisgICAgICAgICJceDE5XHg2ZVx4MGVceDAxXHgwZlx4MDhceDU2XHhmOVx4ODJceGI0XHgwOFx4OTJceDQxXHhkNlx4MjRceDg0IiwKKyAgICAgICAgIlx4YWIiIH0sCisgICAgICB7IEdDUllfTUFDX0dNQUNfQUVTLAorICAgICAgICAiXHg4Ylx4NWNceDEyXHg0Ylx4ZWZceDZlXHgyZlx4MGZceGU0XHhkOFx4YzlceDVjXHhkNVx4ZmFceDRjXHhmMSIsCisgICAgICAgICJceDQxXHhjNVx4ZGFceDg2XHg2N1x4ZWZceDcyXHg1Mlx4MjBceGZmXHhlM1x4OWFceGUwXHhhY1x4NTlceDBhIgorICAgICAgICAiXHhjOVx4ZmNceGE3XHgyOVx4YWJceDYwXHhhZFx4YTAiLAorICAgICAgICAiXHgyMFx4NGJceGRiXHgxYlx4ZDZceDIxXHg1NFx4YmZceDA4XHg5Mlx4MmFceGFhXHg1NFx4ZWVceGQ3XHgwNSIsCisgICAgICAgICJceDA1XHhhZFx4MTNceGE1XHhlMlx4YzJceGFiXHg2Nlx4N2VceDFhXHg2Zlx4YmMiIH0sCisgICAgICB7IDAgfSwKKyAgICB9OworICBpbnQgaTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJTdGFydGluZyBNQUMgY2hlY2tzLlxuIik7CisKKyAgZm9yIChpID0gMDsgYWxnb3NbaV0uYWxnbzsgaSsrKQorICAgIHsKKyAgICAgIGlmICgoZ2NyeV9tYWNfdGVzdF9hbGdvIChhbGdvc1tpXS5hbGdvKQorCSAgIHx8IGFsZ29zW2ldLmFsZ28gPT0gR0NSWV9NQUNfSE1BQ19NRDUpICYmIGluX2ZpcHNfbW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBhbGdvcml0aG0gJWQgbm90IGF2YWlsYWJsZSBpbiBmaXBzIG1vZGVcbiIsCisJCSAgICAgYWxnb3NbaV0uYWxnbyk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmICh2ZXJib3NlKQorCWZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgIiAgY2hlY2tpbmcgJXMgWyVpXSBmb3IgJWQgYnl0ZSBrZXkgYW5kICVkIGJ5dGUgZGF0YVxuIiwKKwkJIGdjcnlfbWFjX2FsZ29fbmFtZSAoYWxnb3NbaV0uYWxnbyksCisJCSBhbGdvc1tpXS5hbGdvLAorCQkgKGludClzdHJsZW4oYWxnb3NbaV0ua2V5KSwgKGludClzdHJsZW4oYWxnb3NbaV0uZGF0YSkpOworCisgICAgICBjaGVja19vbmVfbWFjIChhbGdvc1tpXS5hbGdvLCBhbGdvc1tpXS5kYXRhLCBzdHJsZW4gKGFsZ29zW2ldLmRhdGEpLAorCQkgICAgIGFsZ29zW2ldLmtleSwgc3RybGVuKGFsZ29zW2ldLmtleSksIGFsZ29zW2ldLml2LAorCQkgICAgIGFsZ29zW2ldLml2ID8gc3RybGVuKGFsZ29zW2ldLml2KSA6IDAsCisJCSAgICAgYWxnb3NbaV0uZXhwZWN0LCAwKTsKKyAgICAgIGNoZWNrX29uZV9tYWMgKGFsZ29zW2ldLmFsZ28sIGFsZ29zW2ldLmRhdGEsIHN0cmxlbiAoYWxnb3NbaV0uZGF0YSksCisJCSAgICAgYWxnb3NbaV0ua2V5LCBzdHJsZW4oYWxnb3NbaV0ua2V5KSwgYWxnb3NbaV0uaXYsCisJCSAgICAgYWxnb3NbaV0uaXYgPyBzdHJsZW4oYWxnb3NbaV0uaXYpIDogMCwKKwkJICAgICBhbGdvc1tpXS5leHBlY3QsIDEpOworICAgIH0KKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJDb21wbGV0ZWQgTUFDIGNoZWNrcy5cbiIpOworfQorCisvKiBDaGVjayB0aGF0IHRoZSBzaWduYXR1cmUgU0lHIG1hdGNoZXMgdGhlIGhhc2ggSEFTSC4gUEtFWSBpcyB0aGUKKyAgIHB1YmxpYyBrZXkgdXNlZCBmb3IgdGhlIHZlcmlmaWNhdGlvbi4gQkFESEFTSCBpcyBhIGhhc2ggdmFsdWUgd2hpY2gKKyAgIHNob3VsZCByZXN1bHQgaW4gYSBiYWQgc2lnbmF0dXJlIHN0YXR1cy4gKi8KK3N0YXRpYyB2b2lkCit2ZXJpZnlfb25lX3NpZ25hdHVyZSAoZ2NyeV9zZXhwX3QgcGtleSwgZ2NyeV9zZXhwX3QgaGFzaCwKKwkJICAgICAgZ2NyeV9zZXhwX3QgYmFkaGFzaCwgZ2NyeV9zZXhwX3Qgc2lnKQoreworICBnY3J5X2Vycm9yX3QgcmM7CisKKyAgcmMgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBoYXNoLCBwa2V5KTsKKyAgaWYgKHJjKQorICAgIGZhaWwgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgYmFkaGFzaCwgcGtleSk7CisgIGlmIChnY3J5X2Vycl9jb2RlIChyYykgIT0gR1BHX0VSUl9CQURfU0lHTkFUVVJFKQorICAgIGZhaWwgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQgdG8gZGV0ZWN0IGEgYmFkIHNpZ25hdHVyZTogJXNcbiIsCisJICBncGdfc3RyZXJyb3IgKHJjKSk7Cit9CisKKworLyogVGVzdCB0aGUgcHVibGljIGtleSBzaWduIGZ1bmN0aW9uIHVzaW5nIHRoZSBwcml2YXRlIGtldCBTS0VZLiBQS0VZCisgICBpcyB1c2VkIGZvciB2ZXJpZmljYXRpb24uICovCitzdGF0aWMgdm9pZAorY2hlY2tfcHVia2V5X3NpZ24gKGludCBuLCBnY3J5X3NleHBfdCBza2V5LCBnY3J5X3NleHBfdCBwa2V5LCBpbnQgYWxnbykKK3sKKyAgZ2NyeV9lcnJvcl90IHJjOworICBnY3J5X3NleHBfdCBzaWcsIGJhZGhhc2gsIGhhc2g7CisgIGludCBkYXRhaWR4OworICBzdGF0aWMgY29uc3QgY2hhciBiYWRkYXRhW10gPQorICAgICIoZGF0YVxuIChmbGFncyBwa2NzMSlcbiIKKyAgICAiIChoYXNoIHNoYTEgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUFCQkNDRERFRUZGMTAyMDMwNDEjKSlcbiI7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAgeworICAgIGNvbnN0IGNoYXIgKmRhdGE7CisgICAgaW50IGFsZ287CisgICAgaW50IGV4cGVjdGVkX3JjOworICB9IGRhdGFzW10gPQorICAgIHsKKyAgICAgIHsgIihkYXRhXG4gKGZsYWdzIHBrY3MxKVxuIgorCSIgKGhhc2ggc2hhMSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQUJCQ0NEREVFRkYxMDIwMzA0MCMpKVxuIiwKKwlHQ1JZX1BLX1JTQSwKKwkwIH0sCisgICAgICB7ICIoZGF0YVxuIChmbGFncyBvYWVwKVxuIgorCSIgKGhhc2ggc2hhMSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQUJCQ0NEREVFRkYxMDIwMzA0MCMpKVxuIiwKKwkwLAorCUdQR19FUlJfQ09ORkxJQ1QgfSwKKyAgICAgIC8qIFRoaXMgdGVzdCBpcyB0byBzZWUgd2hldGhlciBoYXNoIGFsZ29yaXRobXMgbm90IGhhcmQgd2lyZWQgaW4KKyAgICAgICAgIHB1YmtleS5jIGFyZSBkZXRlY3RlZDogICovCisgICAgICB7ICIoZGF0YVxuIChmbGFncyBwa2NzMSlcbiIKKwkiIChoYXNoIG9pZC4xLjMuMTQuMy4yLjI5ICIKKyAgICAgICAgIiAgICAgICAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQUJCQ0NEREVFRkYxMDIwMzA0MCMpKVxuIiwKKwlHQ1JZX1BLX1JTQSwKKwkwIH0sCisgICAgICB7CSIoZGF0YVxuIChmbGFncyApXG4iCisJIiAoaGFzaCBzaGExICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBQkJDQ0RERUVGRjEwMjAzMDQwIykpXG4iLAorCTAsCisJR1BHX0VSUl9DT05GTElDVCB9LAorICAgICAgewkiKGRhdGFcbiAoZmxhZ3MgcGtjczEpXG4iCisJIiAoaGFzaCBmb28gIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUFCQkNDRERFRUZGMTAyMDMwNDAjKSlcbiIsCisJR0NSWV9QS19SU0EsCisJR1BHX0VSUl9ESUdFU1RfQUxHTyB9LAorICAgICAgewkiKGRhdGFcbiAoZmxhZ3MgKVxuIiAiICh2YWx1ZSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwkwLAorCTAgfSwKKyAgICAgIHsJIihkYXRhXG4gKGZsYWdzIClcbiIgIiAodmFsdWUgIzAwOTAyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwkwLAorCTAgfSwKKyAgICAgIHsgIihkYXRhXG4gKGZsYWdzIHJhdylcbiIgIiAodmFsdWUgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUEjKSlcbiIsCisJMCwKKwkwIH0sCisgICAgICB7CSIoZGF0YVxuIChmbGFncyBwa2NzMSlcbiIKKwkiICh2YWx1ZSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwlHQ1JZX1BLX1JTQSwKKwlHUEdfRVJSX0NPTkZMSUNUIH0sCisgICAgICB7ICIoZGF0YVxuIChmbGFncyByYXcgZm9vKVxuIgorCSIgKHZhbHVlICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBIykpXG4iLAorCTAsCisJR1BHX0VSUl9JTlZfRkxBRyB9LAorICAgICAgeyAiKGRhdGFcbiAoZmxhZ3MgcHNzKVxuIgorCSIgKGhhc2ggc2hhMSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQUJCQ0NEREVFRkYxMDIwMzA0MCMpKVxuIiwKKwlHQ1JZX1BLX1JTQSwKKwkwIH0sCisgICAgICB7ICIoZGF0YVxuIChmbGFncyBwc3MpXG4iCisJIiAoaGFzaCBzaGExICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBQkJDQ0RERUVGRjEwMjAzMDQwIylcbiIKKyAgICAgICAgIiAocmFuZG9tLW92ZXJyaWRlICM0MjUzNjQ3NTg3OTgwOTEyMjMzNDQ1NTY2Nzc4ODk5MDE5MjgzNzQ3IykpXG4iLAorCUdDUllfUEtfUlNBLAorCTAgfSwKKyAgICAgIHsgTlVMTCB9CisgICAgfTsKKworICByYyA9IGdjcnlfc2V4cF9zc2NhbiAoJmJhZGhhc2gsIE5VTEwsIGJhZGRhdGEsIHN0cmxlbiAoYmFkZGF0YSkpOworICBpZiAocmMpCisgICAgZGllICgiY29udmVydGluZyBkYXRhIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKworICBmb3IgKGRhdGFpZHggPSAwOyBkYXRhc1tkYXRhaWR4XS5kYXRhOyBkYXRhaWR4KyspCisgICAgeworICAgICAgaWYgKGRhdGFzW2RhdGFpZHhdLmFsZ28gJiYgZGF0YXNbZGF0YWlkeF0uYWxnbyAhPSBhbGdvKQorCWNvbnRpbnVlOworCisgICAgICBpZiAodmVyYm9zZSkKKwlmcHJpbnRmIChzdGRlcnIsICIgIHRlc3QgJWQsIHNpZ25hdHVyZSB0ZXN0ICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgIG4sIGRhdGFpZHgsIGdjcnlfcGtfYWxnb19uYW1lIChhbGdvKSk7CisKKyAgICAgIHJjID0gZ2NyeV9zZXhwX3NzY2FuICgmaGFzaCwgTlVMTCwgZGF0YXNbZGF0YWlkeF0uZGF0YSwKKwkJCSAgICBzdHJsZW4gKGRhdGFzW2RhdGFpZHhdLmRhdGEpKTsKKyAgICAgIGlmIChyYykKKwlkaWUgKCJjb252ZXJ0aW5nIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworCisgICAgICByYyA9IGdjcnlfcGtfc2lnbiAoJnNpZywgaGFzaCwgc2tleSk7CisgICAgICBpZiAoZ2NyeV9lcnJfY29kZSAocmMpICE9IGRhdGFzW2RhdGFpZHhdLmV4cGVjdGVkX3JjKQorCWZhaWwgKCJnY3J5X3BrX3NpZ24gZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworCisgICAgICBpZiAoIXJjKQorCXZlcmlmeV9vbmVfc2lnbmF0dXJlIChwa2V5LCBoYXNoLCBiYWRoYXNoLCBzaWcpOworCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2lnKTsKKyAgICAgIHNpZyA9IE5VTEw7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoaGFzaCk7CisgICAgICBoYXNoID0gTlVMTDsKKyAgICB9CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGJhZGhhc2gpOworfQorCisKKy8qIFRlc3QgdGhlIHB1YmxpYyBrZXkgc2lnbiBmdW5jdGlvbiB1c2luZyB0aGUgcHJpdmF0ZSBrZXQgU0tFWS4gUEtFWQorICAgaXMgdXNlZCBmb3IgdmVyaWZpY2F0aW9uLiAgVGhpcyB2YXJpYW50IGlzIG9ubHkgdXNlZCBmb3IgRUNEU0EuICAqLworc3RhdGljIHZvaWQKK2NoZWNrX3B1YmtleV9zaWduX2VjZHNhIChpbnQgbiwgZ2NyeV9zZXhwX3Qgc2tleSwgZ2NyeV9zZXhwX3QgcGtleSkKK3sKKyAgZ2NyeV9lcnJvcl90IHJjOworICBnY3J5X3NleHBfdCBzaWcsIGJhZGhhc2gsIGhhc2g7CisgIHVuc2lnbmVkIGludCBuYml0czsKKyAgaW50IGRhdGFpZHg7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAgeworICAgIHVuc2lnbmVkIGludCBuYml0czsKKyAgICBjb25zdCBjaGFyICpkYXRhOworICAgIGludCBleHBlY3RlZF9yYzsKKyAgICBjb25zdCBjaGFyICpiYWRkYXRhOworICAgIGludCBkdW1teTsKKyAgfSBkYXRhc1tdID0KKyAgICB7CisgICAgICB7IDE5MiwKKyAgICAgICAgIihkYXRhIChmbGFncyByYXcpXG4iCisgICAgICAgICIgKHZhbHVlICMwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMDEwMjAzMDQwNTA2MDcjKSkiLAorICAgICAgICAwLAorICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdylcbiIKKyAgICAgICAgIiAodmFsdWUgIzgwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAwMTAyMDMwNDA1MDYwNyMpKSIsCisgICAgICAgIDAKKyAgICAgIH0sCisgICAgICB7IDI1NiwKKyAgICAgICAgIihkYXRhIChmbGFncyByYXcpXG4iCisgICAgICAgICIgKHZhbHVlICMwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKyAgICAgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIiwKKyAgICAgICAgMCwKKyAgICAgICAgIihkYXRhIChmbGFncyByYXcpXG4iCisgICAgICAgICIgKHZhbHVlICM4MDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKyAgICAgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIiwKKyAgICAgICAgMAorICAgICAgfSwKKyAgICAgIHsgMjU2LAorICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdylcbiIKKyAgICAgICAgIiAoaGFzaCBzaGEyNTYgIzAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIgorICAgICAgICAvKiAqLyAgICAgICAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYjKSkiLAorICAgICAgICAwLAorICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdylcbiIKKyAgICAgICAgIiAoaGFzaCBzaGEyNTYgIzgwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIgorICAgICAgICAvKiAqLyAgICAgICAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYjKSkiLAorICAgICAgICAwCisgICAgICB9LAorICAgICAgeyAyNTYsCisgICAgICAgICIoZGF0YSAoZmxhZ3MgZ29zdClcbiIKKyAgICAgICAgIiAodmFsdWUgIzAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIgorICAgICAgICAvKiAqLyAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYjKSkiLAorICAgICAgICAwLAorICAgICAgICAiKGRhdGEgKGZsYWdzIGdvc3QpXG4iCisgICAgICAgICIgKHZhbHVlICM4MDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKyAgICAgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIiwKKyAgICAgICAgMAorICAgICAgfSwKKyAgICAgIHsgNTEyLAorICAgICAgICAiKGRhdGEgKGZsYWdzIGdvc3QpXG4iCisgICAgICAgICIgKHZhbHVlICMwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKyAgICAgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIgorICAgICAgICAvKiAqLyAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiCisgICAgICAgIC8qICovICAgICIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiMpKSIsCisgICAgICAgIDAsCisgICAgICAgICIoZGF0YSAoZmxhZ3MgZ29zdClcbiIKKyAgICAgICAgIiAodmFsdWUgIzgwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIgorICAgICAgICAvKiAqLyAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiCisgICAgICAgIC8qICovICAgICIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiIKKyAgICAgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIiwKKyAgICAgICAgMAorICAgICAgfSwKKyAgICAgIHsgMCwgTlVMTCB9CisgICAgfTsKKworICBuYml0cyA9IGdjcnlfcGtfZ2V0X25iaXRzIChza2V5KTsKKworICBmb3IgKGRhdGFpZHggPSAwOyBkYXRhc1tkYXRhaWR4XS5kYXRhOyBkYXRhaWR4KyspCisgICAgeworICAgICAgaWYgKGRhdGFzW2RhdGFpZHhdLm5iaXRzICE9IG5iaXRzKQorCWNvbnRpbnVlOworCisgICAgICBpZiAodmVyYm9zZSkKKwlmcHJpbnRmIChzdGRlcnIsICIgIHRlc3QgJWQsIHNpZ25hdHVyZSB0ZXN0ICVkICgldSBiaXQgZWNkc2EpXG4iLAorICAgICAgICAgICAgICAgICBuLCBkYXRhaWR4LCBuYml0cyk7CisKKyAgICAgIHJjID0gZ2NyeV9zZXhwX3NzY2FuICgmaGFzaCwgTlVMTCwgZGF0YXNbZGF0YWlkeF0uZGF0YSwKKwkJCSAgICBzdHJsZW4gKGRhdGFzW2RhdGFpZHhdLmRhdGEpKTsKKyAgICAgIGlmIChyYykKKwlkaWUgKCJjb252ZXJ0aW5nIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgcmMgPSBnY3J5X3NleHBfc3NjYW4gKCZiYWRoYXNoLCBOVUxMLCBkYXRhc1tkYXRhaWR4XS5iYWRkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoZGF0YXNbZGF0YWlkeF0uYmFkZGF0YSkpOworICAgICAgaWYgKHJjKQorICAgICAgICBkaWUgKCJjb252ZXJ0aW5nIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworCisgICAgICByYyA9IGdjcnlfcGtfc2lnbiAoJnNpZywgaGFzaCwgc2tleSk7CisgICAgICBpZiAoZ2NyeV9lcnJfY29kZSAocmMpICE9IGRhdGFzW2RhdGFpZHhdLmV4cGVjdGVkX3JjKQorCWZhaWwgKCJnY3J5X3BrX3NpZ24gZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworCisgICAgICBpZiAoIXJjICYmIHZlcmJvc2UgPiAxKQorICAgICAgICBzaG93X3NleHAgKCJFQ0RTQSBzaWduYXR1cmU6XG4iLCBzaWcpOworCisgICAgICBpZiAoIXJjKQorICAgICAgICB2ZXJpZnlfb25lX3NpZ25hdHVyZSAocGtleSwgaGFzaCwgYmFkaGFzaCwgc2lnKTsKKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICBzaWcgPSBOVUxMOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGJhZGhhc2gpOworICAgICAgYmFkaGFzaCA9IE5VTEw7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoaGFzaCk7CisgICAgICBoYXNoID0gTlVMTDsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3B1YmtleV9jcnlwdCAoaW50IG4sIGdjcnlfc2V4cF90IHNrZXksIGdjcnlfc2V4cF90IHBrZXksIGludCBhbGdvKQoreworICBnY3J5X2Vycm9yX3QgcmM7CisgIGdjcnlfc2V4cF90IHBsYWluID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgY2lwaCA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGRhdGEgPSBOVUxMOworICBpbnQgZGF0YWlkeDsKKyAgc3RhdGljIGNvbnN0IHN0cnVjdAorICB7CisgICAgaW50IGFsZ287ICAgIC8qIElmIG5vdCAwIHJ1biB0ZXN0IG9ubHkgaWYgQUxHTyBtYXRjaGVzLiAgKi8KKyAgICBjb25zdCBjaGFyICpkYXRhOworICAgIGNvbnN0IGNoYXIgKmhpbnQ7CisgICAgaW50IHVucGFkZGVkOworICAgIGludCBlbmNyeXB0X2V4cGVjdGVkX3JjOworICAgIGludCBkZWNyeXB0X2V4cGVjdGVkX3JjOworICAgIGludCBzcGVjaWFsOworICB9IGRhdGFzW10gPQorICAgIHsKKyAgICAgIHsJR0NSWV9QS19SU0EsCisgICAgICAgICIoZGF0YVxuIChmbGFncyBwa2NzMSlcbiIKKwkiICh2YWx1ZSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwlOVUxMLAorCTAsCisJMCwKKwkwIH0sCisgICAgICB7CUdDUllfUEtfUlNBLAorICAgICAgICAiKGRhdGFcbiAoZmxhZ3MgcGtjczEpXG4iCisJIiAodmFsdWUgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUEjKSlcbiIsCisJIihmbGFncyBwa2NzMSkiLAorCTEsCisJMCwKKwkwIH0sCisgICAgICB7IEdDUllfUEtfUlNBLAorICAgICAgICAiKGRhdGFcbiAoZmxhZ3Mgb2FlcClcbiIKKwkiICh2YWx1ZSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwkiKGZsYWdzIG9hZXApIiwKKwkxLAorCTAsCisJMCB9LAorICAgICAgeyBHQ1JZX1BLX1JTQSwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIG9hZXApXG4gKGhhc2gtYWxnbyBzaGExKVxuIgorCSIgKHZhbHVlICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBIykpXG4iLAorCSIoZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvIHNoYTEpIiwKKwkxLAorCTAsCisJMCB9LAorICAgICAgeyBHQ1JZX1BLX1JTQSwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIG9hZXApXG4gKGhhc2gtYWxnbyBzaGExKVxuIChsYWJlbCBcInRlc3RcIilcbiIKKwkiICh2YWx1ZSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQSMpKVxuIiwKKwkiKGZsYWdzIG9hZXApKGhhc2gtYWxnbyBzaGExKShsYWJlbCBcInRlc3RcIikiLAorCTEsCisJMCwKKwkwIH0sCisgICAgICB7IEdDUllfUEtfUlNBLAorICAgICAgICAiKGRhdGFcbiAoZmxhZ3Mgb2FlcClcbiAoaGFzaC1hbGdvIHNoYTEpXG4gKGxhYmVsIFwidGVzdFwiKVxuIgorCSIgKHZhbHVlICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBIylcbiIKKyAgICAgICAgIiAocmFuZG9tLW92ZXJyaWRlICM0MjUzNjQ3NTg3OTgwOTEyMjMzNDQ1NTY2Nzc4ODk5MDE5MjgzNzQ3IykpXG4iLAorCSIoZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvIHNoYTEpKGxhYmVsIFwidGVzdFwiKSIsCisJMSwKKwkwLAorCTAgfSwKKyAgICAgIHsJMCwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIClcbiIgIiAodmFsdWUgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUEjKSlcbiIsCisJTlVMTCwKKwkxLAorCTAsCisJMCB9LAorICAgICAgewkwLAorICAgICAgICAiKGRhdGFcbiAoZmxhZ3MgKVxuIiAiICh2YWx1ZSAjMDA5MDIyMzM0NDU1NjY3Nzg4OTkwMEFBIykpXG4iLAorCU5VTEwsCisJMSwKKwkwLAorCTAgfSwKKyAgICAgIHsgMCwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIHJhdylcbiIgIiAodmFsdWUgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUEjKSlcbiIsCisJTlVMTCwKKwkxLAorCTAsCisJMCB9LAorICAgICAgeyBHQ1JZX1BLX1JTQSwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIHBrY3MxKVxuIgorCSIgKGhhc2ggc2hhMSAjMTEyMjMzNDQ1NTY2Nzc4ODk5MDBBQUJCQ0NEREVFRkYxMDIwMzA0MCMpKVxuIiwKKwlOVUxMLAorCTAsCisJR1BHX0VSUl9DT05GTElDVCwKKwkwfSwKKyAgICAgIHsgMCwKKyAgICAgICAgIihkYXRhXG4gKGZsYWdzIHJhdyBmb28pXG4iCisJIiAoaGFzaCBzaGExICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBQkJDQ0RERUVGRjEwMjAzMDQwIykpXG4iLAorCU5VTEwsCisJMCwKKwlHUEdfRVJSX0lOVl9GTEFHLAorCTB9LAorICAgICAgeyAwLAorICAgICAgICAiKGRhdGFcbiAoZmxhZ3MgcmF3KVxuIgorCSIgKHZhbHVlICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBIykpXG4iLAorCSIoZmxhZ3Mgb2FlcCkiLAorCTEsCisJMCwKKwlHUEdfRVJSX0VOQ09ESU5HX1BST0JMRU0sIDEgfSwKKyAgICAgIHsgR0NSWV9QS19SU0EsCisgICAgICAgICIoZGF0YVxuIChmbGFncyBvYWVwKVxuIgorCSIgKHZhbHVlICMxMTIyMzM0NDU1NjY3Nzg4OTkwMEFBIykpXG4iLAorCSIoZmxhZ3MgcGtjczEpIiwKKwkxLAorCTAsCisJR1BHX0VSUl9FTkNPRElOR19QUk9CTEVNLCAxIH0sCisgICAgICB7CTAsCisgICAgICAgICIoZGF0YVxuIChmbGFncyBwc3MpXG4iCisJIiAodmFsdWUgIzExMjIzMzQ0NTU2Njc3ODg5OTAwQUEjKSlcbiIsCisJTlVMTCwKKwkwLAorCUdQR19FUlJfQ09ORkxJQ1QgfSwKKyAgICAgIHsgMCwgTlVMTCB9CisgICAgfTsKKworICAodm9pZCluOworCisgIGZvciAoZGF0YWlkeCA9IDA7IGRhdGFzW2RhdGFpZHhdLmRhdGE7IGRhdGFpZHgrKykKKyAgICB7CisgICAgICBpZiAoZGF0YXNbZGF0YWlkeF0uYWxnbyAmJiBkYXRhc1tkYXRhaWR4XS5hbGdvICE9IGFsZ28pCisJY29udGludWU7CisKKyAgICAgIGlmICh2ZXJib3NlKQorCWZwcmludGYgKHN0ZGVyciwgIiAgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHRlc3QgJWQgKGFsZ28gJWQpXG4iLAorICAgICAgICAgICAgICAgICBkYXRhaWR4LCBhbGdvKTsKKworICAgICAgcmMgPSBnY3J5X3NleHBfc3NjYW4gKCZkYXRhLCBOVUxMLCBkYXRhc1tkYXRhaWR4XS5kYXRhLAorCQkJICAgIHN0cmxlbiAoZGF0YXNbZGF0YWlkeF0uZGF0YSkpOworICAgICAgaWYgKHJjKQorCWRpZSAoImNvbnZlcnRpbmcgZGF0YSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisKKyAgICAgIHJjID0gZ2NyeV9wa19lbmNyeXB0ICgmY2lwaCwgZGF0YSwgcGtleSk7CisgICAgICBpZiAoZ2NyeV9lcnJfY29kZSAocmMpICE9IGRhdGFzW2RhdGFpZHhdLmVuY3J5cHRfZXhwZWN0ZWRfcmMpCisJZmFpbCAoImdjcnlfcGtfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisKKyAgICAgIGlmICghcmMpCisJeworICAgICAgICAgIGludCBleHBlY3RfbWlzbWF0Y2ggPSAwOworCisJICAvKiBJbnNlcnQgZGVjb2RpbmcgaGludCB0byBDSVBILiAqLworCSAgaWYgKGRhdGFzW2RhdGFpZHhdLmhpbnQpCisJICAgIHsKKwkgICAgICBzaXplX3QgaGludF9sZW4sIGxlbjsKKwkgICAgICBjaGFyICpoaW50LCAqYnVmOworCSAgICAgIGdjcnlfc2V4cF90IGxpc3Q7CisKKwkgICAgICAvKiBDb252ZXJ0IGRlY29kaW5nIGhpbnQgaW50byBjYW5vbmljYWwgc2V4cC4gKi8KKwkgICAgICBoaW50X2xlbiA9IGdjcnlfc2V4cF9uZXcgKCZsaXN0LCBkYXRhc1tkYXRhaWR4XS5oaW50LAorCQkJCQlzdHJsZW4gKGRhdGFzW2RhdGFpZHhdLmhpbnQpLCAxKTsKKwkgICAgICBoaW50X2xlbiA9IGdjcnlfc2V4cF9zcHJpbnQgKGxpc3QsIEdDUllTRVhQX0ZNVF9DQU5PTiwgTlVMTCwgMCk7CisJICAgICAgaGludCA9IGdjcnlfbWFsbG9jIChoaW50X2xlbik7CisJICAgICAgaWYgKCFoaW50KQorCQlkaWUgKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCSAgICAgIGhpbnRfbGVuID0gZ2NyeV9zZXhwX3NwcmludCAobGlzdCwgR0NSWVNFWFBfRk1UX0NBTk9OLCBoaW50LAorCQkJCQkgICBoaW50X2xlbik7CisJICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGxpc3QpOworCisJICAgICAgLyogQ29udmVydCBDSVBIIGludG8gY2Fub25pY2FsIHNleHAuICovCisJICAgICAgbGVuID0gZ2NyeV9zZXhwX3NwcmludCAoY2lwaCwgR0NSWVNFWFBfRk1UX0NBTk9OLCBOVUxMLCAwKTsKKwkgICAgICBidWYgPSBnY3J5X21hbGxvYyAobGVuICsgaGludF9sZW4pOworCSAgICAgIGlmICghYnVmKQorCQlkaWUgKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCSAgICAgIGxlbiA9IGdjcnlfc2V4cF9zcHJpbnQgKGNpcGgsIEdDUllTRVhQX0ZNVF9DQU5PTiwgYnVmLCBsZW4pOworCSAgICAgIC8qIGFzc2VydCAoIXN0cmNtcCAoYnVmLCAiKDc6ZW5jLXZhbCIsIDEwKSk7ICovCisKKwkgICAgICAvKiBDb3B5IGRlY29kaW5nIGhpbnQgaW50byBDSVBILiAqLworCSAgICAgIG1lbW1vdmUgKGJ1ZiArIDEwICsgaGludF9sZW4sIGJ1ZiArIDEwLCBsZW4gLSAxMCk7CisJICAgICAgbWVtY3B5IChidWYgKyAxMCwgaGludCwgaGludF9sZW4pOworCSAgICAgIGdjcnlfZnJlZSAoaGludCk7CisJICAgICAgZ2NyeV9zZXhwX25ldyAoJmxpc3QsIGJ1ZiwgbGVuICsgaGludF9sZW4sIDEpOworCSAgICAgIGdjcnlfZnJlZSAoYnVmKTsKKwkgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoY2lwaCk7CisJICAgICAgY2lwaCA9IGxpc3Q7CisJICAgIH0KKwkgIHJjID0gZ2NyeV9wa19kZWNyeXB0ICgmcGxhaW4sIGNpcGgsIHNrZXkpOworICAgICAgICAgIGlmICghcmMgJiYgZGF0YXNbZGF0YWlkeF0uc3BlY2lhbCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBJdCBtYXkgaGFwcGVuIHRoYXQgT0FFUCBmb3JtYXR0ZWQgZGF0YSB3aGljaCBpcworICAgICAgICAgICAgICAgICBkZWNyeXB0ZWQgYXMgcGtjcyMxIGRhdGEgcmV0dXJucyBhIHZhbGlkIHBrY3MjMQorICAgICAgICAgICAgICAgICBmcmFtZS4gIEhvd2V2ZXIsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIG5vdCBiZQorICAgICAgICAgICAgICAgICBpZGVudGljYWwgLSB0aHVzIHdlIGV4cGVjdCBhIG1pc21hdGNoIGFuZCB0ZXN0IGZ1cnRoZXIgb24KKyAgICAgICAgICAgICAgICAgd2hldGhlciB0aGlzIG1pc21hdGNoIGFjdHVhbGx5IGhhcHBlbmVkLiAgKi8KKyAgICAgICAgICAgICAgZXhwZWN0X21pc21hdGNoID0gMTsKKyAgICAgICAgICAgIH0KKwkgIGVsc2UgaWYgKGdjcnlfZXJyX2NvZGUgKHJjKSAhPSBkYXRhc1tkYXRhaWR4XS5kZWNyeXB0X2V4cGVjdGVkX3JjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaG93X3NleHAgKCIgIGRhdGE6XG4iLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoIiAgY2lwaDpcbiIsIGNpcGgpOworICAgICAgICAgICAgICAgICAgc2hvd19zZXhwICgiICAga2V5OlxuIiwgc2tleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19kZWNyeXB0IGZhaWxlZDogZXhwZWN0ZWQgJWQgKCVzKSwgZ290ICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGFzW2RhdGFpZHhdLmRlY3J5cHRfZXhwZWN0ZWRfcmMsCisgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZGF0YXNbZGF0YWlkeF0uZGVjcnlwdF9leHBlY3RlZF9yYyksCisgICAgICAgICAgICAgICAgICAgIHJjLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgICAgICAgICAgICB9CisKKwkgIGlmICghcmMgJiYgZGF0YXNbZGF0YWlkeF0udW5wYWRkZWQpCisJICAgIHsKKwkgICAgICBnY3J5X3NleHBfdCBwMSwgcDI7CisKKwkgICAgICBwMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChkYXRhLCAidmFsdWUiLCAwKTsKKwkgICAgICBwMiA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChwbGFpbiwgInZhbHVlIiwgMCk7CisJICAgICAgaWYgKHAxICYmIHAyKQorCQl7CisJCSAgY29uc3QgY2hhciAqczEsICpzMjsKKwkJICBzaXplX3QgbjEsIG4yOworCisJCSAgczEgPSBnY3J5X3NleHBfbnRoX2RhdGEgKHAxLCAxLCAmbjEpOworCQkgIHMyID0gZ2NyeV9zZXhwX250aF9kYXRhIChwMiwgMSwgJm4yKTsKKwkJICBpZiAobjEgIT0gbjIgfHwgbWVtY21wIChzMSwgczIsIG4xKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RfbWlzbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RfbWlzbWF0Y2ggPSAwOworICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgKCJnY3J5X3BrX2VuY3J5cHQvZ2NyeV9wa19kZWNyeXB0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkbyBub3Qgcm91bmR0cmlwXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCQl9CisKKyAgICAgICAgICAgICAgaWYgKGV4cGVjdF9taXNtYXRjaCkKKyAgICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19lbmNyeXB0L2djcnlfcGtfZGVjcnlwdCAiCisgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG1pc21hdGNoIGRpZCBub3QgaGFwcGVuXG4iKTsKKworCSAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwMSk7CisJICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHAyKTsKKwkgICAgfQorCX0KKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBsYWluKTsKKyAgICAgIHBsYWluID0gTlVMTDsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChjaXBoKTsKKyAgICAgIGNpcGggPSBOVUxMOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGRhdGEpOworICAgICAgZGF0YSA9IE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY2hlY2tfcHVia2V5X2dyaXAgKGludCBuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpncmlwLAorCQkgICBnY3J5X3NleHBfdCBza2V5LCBnY3J5X3NleHBfdCBwa2V5LCBpbnQgYWxnbykKK3sKKyAgdW5zaWduZWQgY2hhciBzZ3JpcFsyMF0sIHBncmlwWzIwXTsKKworICAodm9pZClhbGdvOworCisgIGlmICghZ2NyeV9wa19nZXRfa2V5Z3JpcCAoc2tleSwgc2dyaXApKQorICAgIGRpZSAoImdldCBrZXlncmlwIGZvciBwcml2YXRlIFJTQSBrZXkgZmFpbGVkXG4iKTsKKyAgaWYgKCFnY3J5X3BrX2dldF9rZXlncmlwIChwa2V5LCBwZ3JpcCkpCisgICAgZGllICgiWyVpXSBnZXQga2V5Z3JpcCBmb3IgcHVibGljIFJTQSBrZXkgZmFpbGVkXG4iLCBuKTsKKyAgaWYgKG1lbWNtcCAoc2dyaXAsIHBncmlwLCAyMCkpCisgICAgZmFpbCAoIlslaV0ga2V5Z3JpcHMgZG9uJ3QgbWF0Y2hcbiIsIG4pOworICBpZiAobWVtY21wIChzZ3JpcCwgZ3JpcCwgMjApKQorICAgIGZhaWwgKCJ3cm9uZyBrZXlncmlwIGZvciBSU0Ega2V5XG4iKTsKK30KKworc3RhdGljIHZvaWQKK2RvX2NoZWNrX29uZV9wdWJrZXkgKGludCBuLCBnY3J5X3NleHBfdCBza2V5LCBnY3J5X3NleHBfdCBwa2V5LAorCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmdyaXAsIGludCBhbGdvLCBpbnQgZmxhZ3MpCit7CisgaWYgKGZsYWdzICYgRkxBR19TSUdOKQorICAgeworICAgICBpZiAoYWxnbyA9PSBHQ1JZX1BLX0VDRFNBKQorICAgICAgIGNoZWNrX3B1YmtleV9zaWduX2VjZHNhIChuLCBza2V5LCBwa2V5KTsKKyAgICAgZWxzZQorICAgICAgIGNoZWNrX3B1YmtleV9zaWduIChuLCBza2V5LCBwa2V5LCBhbGdvKTsKKyAgIH0KKyBpZiAoZmxhZ3MgJiBGTEFHX0NSWVBUKQorICAgY2hlY2tfcHVia2V5X2NyeXB0IChuLCBza2V5LCBwa2V5LCBhbGdvKTsKKyBpZiAoZ3JpcCAmJiAoZmxhZ3MgJiBGTEFHX0dSSVApKQorICAgY2hlY2tfcHVia2V5X2dyaXAgKG4sIGdyaXAsIHNrZXksIHBrZXksIGFsZ28pOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfb25lX3B1YmtleSAoaW50IG4sIHRlc3Rfc3BlY19wdWJrZXlfdCBzcGVjKQoreworICBnY3J5X2Vycm9yX3QgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKyAgZ2NyeV9zZXhwX3Qgc2tleSwgcGtleTsKKworICBlcnIgPSBnY3J5X3NleHBfc3NjYW4gKCZza2V5LCBOVUxMLCBzcGVjLmtleS5zZWNyZXQsCisJCQkgc3RybGVuIChzcGVjLmtleS5zZWNyZXQpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gZ2NyeV9zZXhwX3NzY2FuICgmcGtleSwgTlVMTCwgc3BlYy5rZXkucHVibGljLAorCQkJICAgc3RybGVuIChzcGVjLmtleS5wdWJsaWMpKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJjb252ZXJ0aW5nIHNhbXBsZSBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBkb19jaGVja19vbmVfcHVia2V5IChuLCBza2V5LCBwa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopc3BlYy5rZXkuZ3JpcCwKKwkJICAgICAgIHNwZWMuaWQsIHNwZWMuZmxhZ3MpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChza2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworfQorCitzdGF0aWMgdm9pZAorZ2V0X2tleXNfbmV3IChnY3J5X3NleHBfdCAqcGtleSwgZ2NyeV9zZXhwX3QgKnNrZXkpCit7CisgIGdjcnlfc2V4cF90IGtleV9zcGVjLCBrZXksIHB1Yl9rZXksIHNlY19rZXk7CisgIGludCByYzsKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBnZW5lcmF0aW5nIFJTQSBrZXk6Iik7CisgIHJjID0gZ2NyeV9zZXhwX25ldyAoJmtleV9zcGVjLAorCQkgICAgICBpbl9maXBzX21vZGUgPyAiKGdlbmtleSAocnNhIChuYml0cyA0OjEwMjQpKSkiCisgICAgICAgICAgICAgICAgICAgICAgOiAiKGdlbmtleSAocnNhIChuYml0cyA0OjEwMjQpKHRyYW5zaWVudC1rZXkpKSkiLAorICAgICAgICAgICAgICAgICAgICAgIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlfc3BlYyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfc3BlYyk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIFJTQSBrZXk6ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghIHB1Yl9rZXkpCisgICAgZGllICgicHVibGljIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworCisgIHNlY19rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCEgc2VjX2tleSkKKyAgICBkaWUgKCJwcml2YXRlIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICAqcGtleSA9IHB1Yl9rZXk7CisgICpza2V5ID0gc2VjX2tleTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX29uZV9wdWJrZXlfbmV3IChpbnQgbikKK3sKKyAgZ2NyeV9zZXhwX3Qgc2tleSwgcGtleTsKKworICBnZXRfa2V5c19uZXcgKCZwa2V5LCAmc2tleSk7CisgIGRvX2NoZWNrX29uZV9wdWJrZXkgKG4sIHNrZXksIHBrZXksIE5VTEwsCisJCSAgICAgICBHQ1JZX1BLX1JTQSwgRkxBR19TSUdOIHwgRkxBR19DUllQVCk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNrZXkpOworfQorCisvKiBSdW4gYWxsIHRlc3RzIGZvciB0aGUgcHVibGljIGtleSBmdW5jdGlvbnMuICovCitzdGF0aWMgdm9pZAorY2hlY2tfcHVia2V5ICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgdGVzdF9zcGVjX3B1YmtleV90IHB1YmtleXNbXSA9IHsKKyAgeworICAgIEdDUllfUEtfUlNBLCBGTEFHX0NSWVBUIHwgRkxBR19TSUdOLAorICAgIHsKKyAgICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAgICIgKHJzYVxuIgorICAgICAgIiAgKG4gIzAwZTBjZTk2ZjkwYjZjOWUwMmYzOTIyYmVhZGE5M2ZlNTBhODc1ZWFjNmJjYzE4YmI5YTljZjJlODQ5NjVjYWEiCisgICAgICAiICAgICAgMmQxZmY5NWE3ZjU0MjQ2NWM2YzBjMTlkMjc2ZTQ1MjZjZTA0ODg2OGE3YTkxNGZkMzQzY2MzYTg3ZGQ3NDI5MSIKKyAgICAgICIgICAgICBmZmM1NjU1MDZkNWJiYjI1Y2JhYzZhMGUyZGQxZjhiY2FhYjBkNGEyOWMyZjM3Yzk1MGYzNjM0ODRiZjI2OWY3IgorICAgICAgIiAgICAgIDg5MTQ0MDQ2NGJhZjc5ODI3ZTAzYTM2ZTcwYjgxNDkzOGVlYmRjNjNlOTY0MjQ3YmU3NWRjNThiMDE0YjdlYTIiCisgICAgICAiICAgICAgNTEjKVxuIgorICAgICAgIiAgKGUgIzAxMDAwMSMpXG4iCisgICAgICAiICAoZCAjMDQ2MTI5RjI0ODlENzE1NzlCRTBBNzVGRTAyOUJENkNEQjU3NEVCRjU3RUE4QTVCMEZEQTk0MkNBQjk0M0IxMSIKKyAgICAgICIgICAgICA3RDdCQjk1RTVEMjg4NzVFMEY5RkM1RkNDMDZBNzJGNkQ1MDI0NjREQUJERUQ3OEVGNkI3MTYxNzdCODNENUJEIgorICAgICAgIiAgICAgIEM1NDNEQzVEM0ZFRDkzMkU1OUY1ODk3RTkyRTZGNThBMEYzMzQyNDEwNkEzQjZGQTJDQkY4Nzc1MTBFNEFDMjEiCisgICAgICAiICAgICAgQzNFRTQ3ODUxRTk3RDEyOTk2MjIyQUMzNTY2RDRDQ0IwQjgzRDE2NDA3NEFCRjdERTY1NUZDMjQ0NkRBMTc4MSIKKyAgICAgICIgICAgICAjKVxuIgorICAgICAgIiAgKHAgIzAwZTg2MWI3MDBlMTdlOGFmZTY4MzdlNzUxMmUzNWI2Y2ExMWQwYWU0N2Q4Yjg1MTYxYzY3YmFmNjQzNzcyMTMiCisgICAgICAiICAgICAgZmU1MmQ3NzJmMjAzNWIzY2E4MzBhZjQxZDhhNDEyMGUxYzFjNzBkMTJjYzIyZjAwZDI4ZDMxZGQ0OGE4ZDQyNCIKKyAgICAgICIgICAgICBmMSMpXG4iCisgICAgICAiICAocSAjMDBmN2E3Y2E1MzY3YzY2MWY4ZTYyZGYzNGYwZDA1YzEwYzg4ZTU0OTIzNDhkZDdiZGRjOTQyYzlhOGYzNjlmOSIKKyAgICAgICIgICAgICAzNWEwNzc4NWQyZGI4MDUyMTVlZDc4NmU0Mjg1ZGYxNjU4ZWVkM2NlODRmNDY5YjgxYjUwZDM1ODQwN2I0YWQzIgorICAgICAgIiAgICAgIDYxIylcbiIKKyAgICAgICIgICh1ICMzMDQ1NTlhOWVhZDU2ZDIzMDlkMjAzODExYTY0MWJiMWEwOTYyNmJjOGViMzZmZmZhMjNjOTY4ZWM1YmQ4OTFlIgorICAgICAgIiAgICAgIGViYmFmYzczYWU2NjZlMDFiYTdjODk5MGJhZTA2Y2MyYmJlMTBiNzVlNjlmY2FjYjM1M2E2NDczMDc5ZDhlOWIiCisgICAgICAiICAgICAgIykpKVxuIiwKKworICAgICAgIihwdWJsaWMta2V5XG4iCisgICAgICAiIChyc2FcbiIKKyAgICAgICIgIChuICMwMGUwY2U5NmY5MGI2YzllMDJmMzkyMmJlYWRhOTNmZTUwYTg3NWVhYzZiY2MxOGJiOWE5Y2YyZTg0OTY1Y2FhIgorICAgICAgIiAgICAgIDJkMWZmOTVhN2Y1NDI0NjVjNmMwYzE5ZDI3NmU0NTI2Y2UwNDg4NjhhN2E5MTRmZDM0M2NjM2E4N2RkNzQyOTEiCisgICAgICAiICAgICAgZmZjNTY1NTA2ZDViYmIyNWNiYWM2YTBlMmRkMWY4YmNhYWIwZDRhMjljMmYzN2M5NTBmMzYzNDg0YmYyNjlmNyIKKyAgICAgICIgICAgICA4OTE0NDA0NjRiYWY3OTgyN2UwM2EzNmU3MGI4MTQ5MzhlZWJkYzYzZTk2NDI0N2JlNzVkYzU4YjAxNGI3ZWEyIgorICAgICAgIiAgICAgIDUxIylcbiIKKyAgICAgICIgIChlICMwMTAwMDEjKSkpXG4iLAorCisgICAgICAiXHgzMlx4MTBceDBjXHgyN1x4MTdceDNlXHhmNlx4ZTlceGM0XHhlOSIKKyAgICAgICJceGEyXHg1ZFx4M2RceDY5XHhmOFx4NmRceDM3XHhhNFx4ZjlceDM5In0KKyAgfSwKKyAgeworICAgIEdDUllfUEtfRFNBLCBGTEFHX1NJR04sCisgICAgeworICAgICAgIihwcml2YXRlLWtleVxuIgorICAgICAgIiAoRFNBXG4iCisgICAgICAiICAocCAjMDBBRDdDMDAyNUJBMUExNUY3NzVGM0YyRDY3MzcxODM5MUQwMDQ1Njk3OEQzNDdCMzNEN0I0OUU3RjMyRURBQiIKKyAgICAgICIgICAgICA5NjI3Mzg5OUREOEIyQkI0NkNENkVDQTI2M0ZBRjA0QTI4OTAzNTAzRDU5MDYyQTg4NjVEMkFFOEFERkI1MTkxIgorICAgICAgIiAgICAgIENGMzZGRkI1NjJEMEUyRjU4MDk4MDFBMUY2NzVEQUU1OTY5OEE5RTAxRUZFOEQ3RENGQ0EwODRGNEM2RjVBNDQiCisgICAgICAiICAgICAgNDRENDk5QTA2RkZBRUE1RThFRjVFMDFGMkZEMjBBN0I3RUYzRjY5NjhBRkJBMUZCOEQ5MUYxNTU5RDUyRDg3NyIKKyAgICAgICIgICAgICA3QiMpXG4iCisgICAgICAiICAocSAjMDBFQjdCNTc1MUQyNUVCQkI3QkQ1OUQ5MjAzMTVGRDg0MEUxOUFFQkY5IylcbiIKKyAgICAgICIgIChnICMxNTc0MzYzMzg3RkRGRDFEREYzOEY0RkJFMTM1QkIyMEM3RUU0NzcyRkI5NEMzMzdBRjg2RUE4RTQ5NjY2NTAzIgorICAgICAgIiAgICAgIEFFMDRCNkJFODFBMkY4REQwOTUzMTFFMDIxN0FDQTY5OEExMUU2QzVEMzNDQ0RBRTcxNDk4RUQzNUQxMzk5MUUiCisgICAgICAiICAgICAgQjAyRjA5QUI0MEJEOEY0QzVFRDhDNzVEQTc3OUQwQUUxMDRCQzM0Qzk2MEIwMDIzNzcwNjhBQjRCNUExRjk4NCIKKyAgICAgICIgICAgICAzRkJBOTFGNTM3RjFCN0NBQzREOERENkQ4OUIwRDg2M0FGNzAyNUQ1NDlGOUM3NjVEMkZDMDdFRTIwOEY4RDE1IgorICAgICAgIiAgICAgICMpXG4iCisgICAgICAiICAoeSAjNjRCMTFFRjg4NzFCRTRBQjU3MkFBODEwRDVEM0NBMTFBNkNEQkM2MzdBODAxNDYwMkM3Mjk2MERCMTM1QkY0NiIKKyAgICAgICIgICAgICBBMTgxNkE3MjRDMzRGODczMzBGQzlFMTg3QzVENjY4OTdBMDQ1MzVDQzJBQzkxNjRBNzE1MEFCRkE4MTc5ODI3IgorICAgICAgIiAgICAgIDZFNDU4MzFBQjgxMUVFRTg0OEVCQjI0RDlGNUYyODgzQjZFNUREQzRDNjU5REVGOTQ0RENGRDgwQkY0RDBBMjAiCisgICAgICAiICAgICAgNDJDQUE3REMyODlGMEM1QTlEMTU1RjAyRDNENTUxREI3NDFBODE2OTVCNzRENEM4RjQ3N0Y5Qzc4MzhFQjBGQiIKKyAgICAgICIgICAgICAjKVxuIgorICAgICAgIiAgKHggIzExRDU0RTRBREJEMzAzNDE2MEYyQ0VENEI3Q0QyOTJBNEVCRjNFQzAjKSkpXG4iLAorCisgICAgICAiKHB1YmxpYy1rZXlcbiIKKyAgICAgICIgKERTQVxuIgorICAgICAgIiAgKHAgIzAwQUQ3QzAwMjVCQTFBMTVGNzc1RjNGMkQ2NzM3MTgzOTFEMDA0NTY5NzhEMzQ3QjMzRDdCNDlFN0YzMkVEQUIiCisgICAgICAiICAgICAgOTYyNzM4OTlERDhCMkJCNDZDRDZFQ0EyNjNGQUYwNEEyODkwMzUwM0Q1OTA2MkE4ODY1RDJBRThBREZCNTE5MSIKKyAgICAgICIgICAgICBDRjM2RkZCNTYyRDBFMkY1ODA5ODAxQTFGNjc1REFFNTk2OThBOUUwMUVGRThEN0RDRkNBMDg0RjRDNkY1QTQ0IgorICAgICAgIiAgICAgIDQ0RDQ5OUEwNkZGQUVBNUU4RUY1RTAxRjJGRDIwQTdCN0VGM0Y2OTY4QUZCQTFGQjhEOTFGMTU1OUQ1MkQ4NzciCisgICAgICAiICAgICAgN0IjKVxuIgorICAgICAgIiAgKHEgIzAwRUI3QjU3NTFEMjVFQkJCN0JENTlEOTIwMzE1RkQ4NDBFMTlBRUJGOSMpXG4iCisgICAgICAiICAoZyAjMTU3NDM2MzM4N0ZERkQxRERGMzhGNEZCRTEzNUJCMjBDN0VFNDc3MkZCOTRDMzM3QUY4NkVBOEU0OTY2NjUwMyIKKyAgICAgICIgICAgICBBRTA0QjZCRTgxQTJGOEREMDk1MzExRTAyMTdBQ0E2OThBMTFFNkM1RDMzQ0NEQUU3MTQ5OEVEMzVEMTM5OTFFIgorICAgICAgIiAgICAgIEIwMkYwOUFCNDBCRDhGNEM1RUQ4Qzc1REE3NzlEMEFFMTA0QkMzNEM5NjBCMDAyMzc3MDY4QUI0QjVBMUY5ODQiCisgICAgICAiICAgICAgM0ZCQTkxRjUzN0YxQjdDQUM0RDhERDZEODlCMEQ4NjNBRjcwMjVENTQ5RjlDNzY1RDJGQzA3RUUyMDhGOEQxNSIKKyAgICAgICIgICAgICAjKVxuIgorICAgICAgIiAgKHkgIzY0QjExRUY4ODcxQkU0QUI1NzJBQTgxMEQ1RDNDQTExQTZDREJDNjM3QTgwMTQ2MDJDNzI5NjBEQjEzNUJGNDYiCisgICAgICAiICAgICAgQTE4MTZBNzI0QzM0Rjg3MzMwRkM5RTE4N0M1RDY2ODk3QTA0NTM1Q0MyQUM5MTY0QTcxNTBBQkZBODE3OTgyNyIKKyAgICAgICIgICAgICA2RTQ1ODMxQUI4MTFFRUU4NDhFQkIyNEQ5RjVGMjg4M0I2RTVEREM0QzY1OURFRjk0NERDRkQ4MEJGNEQwQTIwIgorICAgICAgIiAgICAgIDQyQ0FBN0RDMjg5RjBDNUE5RDE1NUYwMkQzRDU1MURCNzQxQTgxNjk1Qjc0RDRDOEY0NzdGOUM3ODM4RUIwRkIiCisgICAgICAiICAgICAgIykpKVxuIiwKKworICAgICAgIlx4YzZceDM5XHg4M1x4MWFceDQzXHhlNVx4MDVceDVkXHhjNlx4ZDgiCisgICAgICAiXHg0YVx4YTZceGY5XHhlYlx4MjNceGJmXHhhOVx4MTJceDJkXHg1YiIgfQorICB9LAorICB7CisgICAgR0NSWV9QS19FTEcsIEZMQUdfU0lHTiB8IEZMQUdfQ1JZUFQsCisgICAgeworICAgICAgIihwcml2YXRlLWtleVxuIgorICAgICAgIiAoRUxHXG4iCisgICAgICAiICAocCAjMDBCOTNCOTMzODYzNzVGMDZDMkQzODU2MEYzQjlDNkQ2RDdCNzUwNkIyMEMxNzczRjczRjhERTU2RTZDRDY1RCIKKyAgICAgICIgICAgICBGNDhERkFBQTFFOTNGNTdBMjc4OUIxNjgzNjJBMEY3ODczMjA0OTlGMEIyNDYxRDNBNDI2ODc1N0E3QjI3NTE3IgorICAgICAgIiAgICAgIEI3RDIwMzY1NEEwQ0Q0ODRERUM2QUY2MEM4NUZFQjg0QUFDMzgyRUFGMjA0NzA2MUZFNURBQjgxQTIwQTA3OTciCisgICAgICAiICAgICAgNkU4NzM1OTg4OUJBRTNCMzYwMEVENzE4QkU2MUQ0RkM5OTNDQzgwOThBNzAzREQwREM5NDJFOTY1RThGMThEMiIKKyAgICAgICIgICAgICBBNyMpXG4iCisgICAgICAiICAoZyAjMDUjKVxuIgorICAgICAgIiAgKHkgIzcyREFCM0U4M0M5RjdERDlBOTMxRkRFQ0RDNjUyMkMwRDM2QTZGMEEwRkVDOTU1QzVBQzNDMDkxNzVCQkZGMkIiCisgICAgICAiICAgICAgRTU4OERCNTkzREMyRTQyMDIwMUJFQjNBQzE3NTM2OTE4NDE3QzQ5N0FDMEY4NjU3ODU1MzgwQzFGQ0YxMUM1QiIKKyAgICAgICIgICAgICBEMjBEQjRCRUU5QkRGOTE2NjQ4REU2RDZFNDE5RkE0NDZDNTEzQUFCODFDMzBDQjdCMzRENjAwNzYzN0JFNjc1IgorICAgICAgIiAgICAgIDU2Q0U2NDczRTlGOUVFOUI5RkFERDI3NUQwMDE1NjMzMzZGMjE4NkY0MjRERUM2MTk5QTBGNzU4RjZBMDBGRjQiCisgICAgICAiICAgICAgIylcbiIKKyAgICAgICIgICh4ICMwM0MyODkwMDA4N0IzOERBQkY0QTBBQjk4QUNFQTM5QkI2NzRENjU1NzA5NkMwMUQ3MkUzMUMxNkJERDMyMjE0IgorICAgICAgIiAgICAgICMpKSlcbiIsCisKKyAgICAgICIocHVibGljLWtleVxuIgorICAgICAgIiAoRUxHXG4iCisgICAgICAiICAocCAjMDBCOTNCOTMzODYzNzVGMDZDMkQzODU2MEYzQjlDNkQ2RDdCNzUwNkIyMEMxNzczRjczRjhERTU2RTZDRDY1RCIKKyAgICAgICIgICAgICBGNDhERkFBQTFFOTNGNTdBMjc4OUIxNjgzNjJBMEY3ODczMjA0OTlGMEIyNDYxRDNBNDI2ODc1N0E3QjI3NTE3IgorICAgICAgIiAgICAgIEI3RDIwMzY1NEEwQ0Q0ODRERUM2QUY2MEM4NUZFQjg0QUFDMzgyRUFGMjA0NzA2MUZFNURBQjgxQTIwQTA3OTciCisgICAgICAiICAgICAgNkU4NzM1OTg4OUJBRTNCMzYwMEVENzE4QkU2MUQ0RkM5OTNDQzgwOThBNzAzREQwREM5NDJFOTY1RThGMThEMiIKKyAgICAgICIgICAgICBBNyMpXG4iCisgICAgICAiICAoZyAjMDUjKVxuIgorICAgICAgIiAgKHkgIzcyREFCM0U4M0M5RjdERDlBOTMxRkRFQ0RDNjUyMkMwRDM2QTZGMEEwRkVDOTU1QzVBQzNDMDkxNzVCQkZGMkIiCisgICAgICAiICAgICAgRTU4OERCNTkzREMyRTQyMDIwMUJFQjNBQzE3NTM2OTE4NDE3QzQ5N0FDMEY4NjU3ODU1MzgwQzFGQ0YxMUM1QiIKKyAgICAgICIgICAgICBEMjBEQjRCRUU5QkRGOTE2NjQ4REU2RDZFNDE5RkE0NDZDNTEzQUFCODFDMzBDQjdCMzRENjAwNzYzN0JFNjc1IgorICAgICAgIiAgICAgIDU2Q0U2NDczRTlGOUVFOUI5RkFERDI3NUQwMDE1NjMzMzZGMjE4NkY0MjRERUM2MTk5QTBGNzU4RjZBMDBGRjQiCisgICAgICAiICAgICAgIykpKVxuIiwKKworICAgICAgIlx4YTdceDk5XHg2MVx4ZWJceDg4XHg4M1x4ZDJceGY0XHgwNVx4YzgiCisgICAgICAiXHg0Zlx4YmFceDA2XHhmOFx4NzhceDA5XHhiY1x4MWVceDIwXHhlNSIgfQorICB9LAorICB7IC8qIEVDRFNBIHRlc3QuICAqLworICAgIEdDUllfUEtfRUNEU0EsIEZMQUdfU0lHTiwKKyAgICB7CisgICAgICAiKHByaXZhdGUta2V5XG4iCisgICAgICAiIChlY2RzYVxuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMTkyKVxuIgorICAgICAgIiAgKHEgIzA0ODUzMjA5M0JBMDIzRjRENTVDMDQyNEZBM0FGOTM2N0UwNUYzMDlEQzM0Q0RDM0ZFIgorICAgICAgIiAgICAgICAgQzEzQ0E5RTYxN0M2Qzg0ODdCRkY2QTcyNkUzQzRGMjc3OTEzRDk3MTE3OTM5OTY2IylcbiIKKyAgICAgICIgIChkICMwMEQ0RUYyN0UzMkY4QUQ4RTJBMUM2RERFQkIxRDIzNUE2OUUzQ0VGOUJDRTkwMjczRCMpKSlcbiIsCisKKyAgICAgICIocHVibGljLWtleVxuIgorICAgICAgIiAoZWNkc2FcbiIKKyAgICAgICIgIChjdXJ2ZSBuaXN0cDE5MilcbiIKKyAgICAgICIgIChxICMwNDg1MzIwOTNCQTAyM0Y0RDU1QzA0MjRGQTNBRjkzNjdFMDVGMzA5REMzNENEQzNGRSIKKyAgICAgICIgICAgICAgIEMxM0NBOUU2MTdDNkM4NDg3QkZGNkE3MjZFM0M0RjI3NzkxM0Q5NzExNzkzOTk2NiMpKSlcbiIsCisKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiIH0KKyAgfSwKKyAgeyAvKiBFQ0RTQSB0ZXN0IHdpdGggdGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtIGdpdmVuIGFzICJlY2MiLiAgKi8KKyAgICBHQ1JZX1BLX0VDRFNBLCBGTEFHX1NJR04sCisgICAgeworICAgICAgIihwcml2YXRlLWtleVxuIgorICAgICAgIiAoZWNkc2FcbiIKKyAgICAgICIgIChjdXJ2ZSBuaXN0cDE5MilcbiIKKyAgICAgICIgIChxICMwNDg1MzIwOTNCQTAyM0Y0RDU1QzA0MjRGQTNBRjkzNjdFMDVGMzA5REMzNENEQzNGRSIKKyAgICAgICIgICAgICAgIEMxM0NBOUU2MTdDNkM4NDg3QkZGNkE3MjZFM0M0RjI3NzkxM0Q5NzExNzkzOTk2NiMpXG4iCisgICAgICAiICAoZCAjMDBENEVGMjdFMzJGOEFEOEUyQTFDNkRERUJCMUQyMzVBNjlFM0NFRjlCQ0U5MDI3M0QjKSkpXG4iLAorCisgICAgICAiKHB1YmxpYy1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMTkyKVxuIgorICAgICAgIiAgKHEgIzA0ODUzMjA5M0JBMDIzRjRENTVDMDQyNEZBM0FGOTM2N0UwNUYzMDlEQzM0Q0RDM0ZFIgorICAgICAgIiAgICAgICAgQzEzQ0E5RTYxN0M2Qzg0ODdCRkY2QTcyNkUzQzRGMjc3OTEzRDk3MTE3OTM5OTY2IykpKVxuIiwKKworICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgfQorICB9LAorICB7IC8qIEVDRFNBIHRlc3Qgd2l0aCB0aGUgcHJpdmF0ZSBrZXkgYWxnb3JpdGhtIGdpdmVuIGFzICJlY2MiLiAgKi8KKyAgICBHQ1JZX1BLX0VDRFNBLCBGTEFHX1NJR04sCisgICAgeworICAgICAgIihwcml2YXRlLWtleVxuIgorICAgICAgIiAoZWNjXG4iCisgICAgICAiICAoY3VydmUgbmlzdHAxOTIpXG4iCisgICAgICAiICAocSAjMDQ4NTMyMDkzQkEwMjNGNEQ1NUMwNDI0RkEzQUY5MzY3RTA1RjMwOURDMzRDREMzRkUiCisgICAgICAiICAgICAgICBDMTNDQTlFNjE3QzZDODQ4N0JGRjZBNzI2RTNDNEYyNzc5MTNEOTcxMTc5Mzk5NjYjKVxuIgorICAgICAgIiAgKGQgIzAwRDRFRjI3RTMyRjhBRDhFMkExQzZEREVCQjFEMjM1QTY5RTNDRUY5QkNFOTAyNzNEIykpKVxuIiwKKworICAgICAgIihwdWJsaWMta2V5XG4iCisgICAgICAiIChlY2RzYVxuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMTkyKVxuIgorICAgICAgIiAgKHEgIzA0ODUzMjA5M0JBMDIzRjRENTVDMDQyNEZBM0FGOTM2N0UwNUYzMDlEQzM0Q0RDM0ZFIgorICAgICAgIiAgICAgICAgQzEzQ0E5RTYxN0M2Qzg0ODdCRkY2QTcyNkUzQzRGMjc3OTEzRDk3MTE3OTM5OTY2IykpKVxuIiwKKworICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgfQorICB9LAorICB7IC8qIEVDRFNBIHRlc3Qgd2l0aCB0aGUga2V5IGFsZ29yaXRobXMgZ2l2ZW4gYXMgImVjYyIuICAqLworICAgIEdDUllfUEtfRUNEU0EsIEZMQUdfU0lHTiwKKyAgICB7CisgICAgICAiKHByaXZhdGUta2V5XG4iCisgICAgICAiIChlY2NcbiIKKyAgICAgICIgIChjdXJ2ZSBuaXN0cDE5MilcbiIKKyAgICAgICIgIChxICMwNDg1MzIwOTNCQTAyM0Y0RDU1QzA0MjRGQTNBRjkzNjdFMDVGMzA5REMzNENEQzNGRSIKKyAgICAgICIgICAgICAgIEMxM0NBOUU2MTdDNkM4NDg3QkZGNkE3MjZFM0M0RjI3NzkxM0Q5NzExNzkzOTk2NiMpXG4iCisgICAgICAiICAoZCAjMDBENEVGMjdFMzJGOEFEOEUyQTFDNkRERUJCMUQyMzVBNjlFM0NFRjlCQ0U5MDI3M0QjKSkpXG4iLAorCisgICAgICAiKHB1YmxpYy1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMTkyKVxuIgorICAgICAgIiAgKHEgIzA0ODUzMjA5M0JBMDIzRjRENTVDMDQyNEZBM0FGOTM2N0UwNUYzMDlEQzM0Q0RDM0ZFIgorICAgICAgIiAgICAgICAgQzEzQ0E5RTYxN0M2Qzg0ODdCRkY2QTcyNkUzQzRGMjc3OTEzRDk3MTE3OTM5OTY2IykpKVxuIiwKKworICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgfQorICB9LAorICB7IC8qIEVDRFNBIHRlc3QgMjU2IGJpdC4gICovCisgICAgR0NSWV9QS19FQ0RTQSwgRkxBR19TSUdOLAorICAgIHsKKyAgICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMjU2KVxuIgorICAgICAgIiAgKHEgIzA0RDRGNkE2NzM4RDlCOEQzQTcwNzVDMUU0RUU5NTAxNUZDMEM5QjdFNDI3MkQyQiIKKyAgICAgICIgICAgICBFQjY2NDREMzYwOUZDNzgxQjcxRjlBODA3MkY1OENCNjZBRTJGODlCQjEyNDUxODciCisgICAgICAiICAgICAgM0FCRjdEOTFGOUUxRkJGOTZCRjJGNzBFNzNBQUM5QTI4MyMpXG4iCisgICAgICAiICAoZCAjNUExRUYwMDM1MTE4RjE5RjMxMTBGQjgxODEzRDM1NDdCQ0UxRTVCQ0U3N0QxRjc0IgorICAgICAgIiAgICAgIDQ3MTVFMUQ1QkJFNzAzNzgjKSkpXG4iLAorCisgICAgICAiKHB1YmxpYy1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIG5pc3RwMjU2KVxuIgorICAgICAgIiAgKHEgIzA0RDRGNkE2NzM4RDlCOEQzQTcwNzVDMUU0RUU5NTAxNUZDMEM5QjdFNDI3MkQyQiIKKyAgICAgICIgICAgICBFQjY2NDREMzYwOUZDNzgxQjcxRjlBODA3MkY1OENCNjZBRTJGODlCQjEyNDUxODciCisgICAgICAiICAgICAgM0FCRjdEOTFGOUUxRkJGOTZCRjJGNzBFNzNBQUM5QTI4MyMpKSlcbiIsCisKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiIH0KKyAgfSwKKyAgeyAvKiBHT1NUIFIgMzQuMTAtMjAwMS8yMDEyIHRlc3QgMjU2IGJpdC4gICovCisgICAgR0NSWV9QS19FQ0RTQSwgRkxBR19TSUdOLAorICAgIHsKKyAgICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIEdPU1QyMDAxLXRlc3QpXG4iCisgICAgICAiICAocSAjMDQ3RjJCNDlFMjcwREI2RDkwRDg1OTVCRUM0NThCNTBDNTg1ODVCQTFENEU5Qjc4IgorICAgICAgIiAgICAgIDhGNjY4OURCRDhFNTZGRDgwQjI2RjFCNDg5RDY3MDFERDE4NUM4NDEzQTk3N0IzQyIKKyAgICAgICIgICAgICBCQkFGNjREMUM1OTNEMjY2MjdERkZCMTAxQTg3RkY3N0RBIylcbiIKKyAgICAgICIgIChkICM3QTkyOUFERTc4OUJCOUJFMTBFRDM1OUREMzlBNzJDMTFCNjA5NjFGNDkzOTdFRUUiCisgICAgICAiICAgICAgMUQxOUNFOTg5MUVDM0IyOCMpKSlcbiIsCisKKyAgICAgICIocHVibGljLWtleVxuIgorICAgICAgIiAoZWNjXG4iCisgICAgICAiICAoY3VydmUgR09TVDIwMDEtdGVzdClcbiIKKyAgICAgICIgIChxICMwNDdGMkI0OUUyNzBEQjZEOTBEODU5NUJFQzQ1OEI1MEM1ODU4NUJBMUQ0RTlCNzgiCisgICAgICAiICAgICAgOEY2Njg5REJEOEU1NkZEODBCMjZGMUI0ODlENjcwMUREMTg1Qzg0MTNBOTc3QjNDIgorICAgICAgIiAgICAgIEJCQUY2NEQxQzU5M0QyNjYyN0RGRkIxMDFBODdGRjc3REEjKSkpXG4iLAorCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiB9CisgIH0sCisgIHsgLyogR09TVCBSIDM0LjEwLTIwMTIgdGVzdCA1MTIgYml0LiAgKi8KKyAgICBHQ1JZX1BLX0VDRFNBLCBGTEFHX1NJR04sCisgICAgeworICAgICAgIihwcml2YXRlLWtleVxuIgorICAgICAgIiAoZWNjXG4iCisgICAgICAiICAoY3VydmUgR09TVDIwMTItdGVzdClcbiIKKyAgICAgICIgIChxICMwNDExNURDNUJDOTY3NjBDN0I0ODU5OEQ4QUI5RTc0MEQ0QzRBODVBNjVCRTMzQzEiCisgICAgICAiICAgICAgICA4MTVCNUMzMjBDODU0NjIxREQ1QTUxNTg1NkQxMzMxNEFGNjlCQzVCOTI0QzhCIgorICAgICAgIiAgICAgICAgNERERkY3NUM0NTQxNUMxRDlERDlERDMzNjEyQ0Q1MzBFRkUxMzdDN0M5MENENCIKKyAgICAgICIgICAgICAgIDBCMEY1NjIxREMzQUMxQjc1MUNGQTBFMjYzNEZBMDUwM0IzRDUyNjM5RjVEN0YiCisgICAgICAiICAgICAgICBCNzJBRkQ2MUVBMTk5NDQxRDk0M0ZGRTdGMEM3MEEyNzU5QTNDREI4NEMxMTRFIgorICAgICAgIiAgICAgICAgMUY5MzM5RkRGMjdGMzVFQ0E5MzY3N0JFRUMjKVxuIgorICAgICAgIiAgKGQgIzBCQTYwNDhBQURBRTI0MUJBNDA5MzZENDc3NTZEN0M5MzA5MUEwRTg1MTQ2Njk3MCIKKyAgICAgICIgICAgICAwRUU3NTA4RTUwOEIxMDIwNzJFODEyM0IyMjAwQTA1NjMzMjJEQUQyODI3RTI3MTQiCisgICAgICAiICAgICAgQTI2MzZCN0JGRDE4QUFERkM2Mjk2NzgyMUZBMThERDQjKSkpXG4iLAorCisgICAgICAiKHB1YmxpYy1rZXlcbiIKKyAgICAgICIgKGVjY1xuIgorICAgICAgIiAgKGN1cnZlIEdPU1QyMDAxLXRlc3QpXG4iCisgICAgICAiICAocSAjMDQxMTVEQzVCQzk2NzYwQzdCNDg1OThEOEFCOUU3NDBENEM0QTg1QTY1QkUzM0MxIgorICAgICAgIiAgICAgICAgODE1QjVDMzIwQzg1NDYyMURENUE1MTU4NTZEMTMzMTRBRjY5QkM1QjkyNEM4QiIKKyAgICAgICIgICAgICAgIDREREZGNzVDNDU0MTVDMUQ5REQ5REQzMzYxMkNENTMwRUZFMTM3QzdDOTBDRDQiCisgICAgICAiICAgICAgICAwQjBGNTYyMURDM0FDMUI3NTFDRkEwRTI2MzRGQTA1MDNCM0Q1MjYzOUY1RDdGIgorICAgICAgIiAgICAgICAgQjcyQUZENjFFQTE5OTQ0MUQ5NDNGRkU3RjBDNzBBMjc1OUEzQ0RCODRDMTE0RSIKKyAgICAgICIgICAgICAgIDFGOTMzOUZERjI3RjM1RUNBOTM2NzdCRUVDIykpKVxuIgorCisgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKyAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiB9CisgICAgfQorICB9OworICBpbnQgaTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJTdGFydGluZyBwdWJsaWMga2V5IGNoZWNrcy5cbiIpOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChwdWJrZXlzKSAvIHNpemVvZiAoKnB1YmtleXMpOyBpKyspCisgICAgaWYgKHB1YmtleXNbaV0uaWQpCisgICAgICB7CisgICAgICAgIGlmIChnY3J5X3BrX3Rlc3RfYWxnbyAocHVia2V5c1tpXS5pZCkgJiYgaW5fZmlwc19tb2RlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIGFsZ29yaXRobSAlZCBub3QgYXZhaWxhYmxlIGluIGZpcHMgbW9kZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHVia2V5c1tpXS5pZCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIGNoZWNrX29uZV9wdWJrZXkgKGksIHB1YmtleXNbaV0pOworICAgICAgfQorICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJDb21wbGV0ZWQgcHVibGljIGtleSBjaGVja3MuXG4iKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJTdGFydGluZyBhZGRpdGlvbmFsIHB1YmxpYyBrZXkgY2hlY2tzLlxuIik7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHB1YmtleXMpIC8gc2l6ZW9mICgqcHVia2V5cyk7IGkrKykKKyAgICBpZiAocHVia2V5c1tpXS5pZCkKKyAgICAgIHsKKyAgICAgICAgaWYgKGdjcnlfcGtfdGVzdF9hbGdvIChwdWJrZXlzW2ldLmlkKSAmJiBpbl9maXBzX21vZGUpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgYWxnb3JpdGhtICVkIG5vdCBhdmFpbGFibGUgaW4gZmlwcyBtb2RlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBwdWJrZXlzW2ldLmlkKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgY2hlY2tfb25lX3B1YmtleV9uZXcgKGkpOworICAgICAgfQorICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJDb21wbGV0ZWQgYWRkaXRpb25hbCBwdWJsaWMga2V5IGNoZWNrcy5cbiIpOworCit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGludCBsYXN0X2FyZ2MgPSAtMTsKKyAgaW50IGRlYnVnID0gMDsKKyAgaW50IHVzZV9maXBzID0gMDsKKyAgaW50IHNlbGZ0ZXN0X29ubHkgPSAwOworICBpbnQgcHVia2V5X29ubHkgPSAwOworICBpbnQgbG9vcCA9IDA7CisgIHVuc2lnbmVkIGludCBsb29wY291bnQgPSAwOworCisgIGlmIChhcmdjKQorICAgIHsgYXJnYy0tOyBhcmd2Kys7IH0KKworICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcmJvc2UiKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UrKzsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWRlYnVnIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlID0gZGVidWcgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZmlwcyIpKQorICAgICAgICB7CisgICAgICAgICAgdXNlX2ZpcHMgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tc2VsZnRlc3QiKSkKKyAgICAgICAgeworICAgICAgICAgIHNlbGZ0ZXN0X29ubHkgPSAxOworICAgICAgICAgIHZlcmJvc2UgKz0gMjsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXB1YmtleSIpKQorICAgICAgICB7CisgICAgICAgICAgcHVia2V5X29ubHkgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGllIikpCisgICAgICAgIHsKKyAgICAgICAgICBkaWVfb25fZXJyb3IgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tbG9vcCIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvb3AgPSBhdG9pICgqYXJndik7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfVkVSQk9TSVRZLCAoaW50KXZlcmJvc2UpOworCisgIGlmICh1c2VfZmlwcykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRk9SQ0VfRklQU19NT0RFLCAwKTsKKworICAvKiBDaGVjayB0aGF0IHdlIHRlc3QgZXhhY3RseSBvdXIgdmVyc2lvbiAtIGluY2x1ZGluZyB0aGUgcGF0Y2hsZXZlbC4gICovCisgIGlmIChzdHJjbXAgKEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKSkKKyAgICBkaWUgKCJ2ZXJzaW9uIG1pc21hdGNoOyBwZ209JXMsIGxpYnJhcnk9JXNcbiIsCisgICAgICAgICBHQ1JZUFRfVkVSU0lPTixnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKworICBpZiAoIGdjcnlfZmlwc19tb2RlX2FjdGl2ZSAoKSApCisgICAgaW5fZmlwc19tb2RlID0gMTsKKworICBpZiAoIWluX2ZpcHNfbW9kZSkKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworCisgIGlmICh2ZXJib3NlKQorICAgIGdjcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIgKHByb2dyZXNzX2hhbmRsZXIsIE5VTEwpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisgIC8qIE5vIHZhbHVhYmxlIGtleXMgYXJlIGNyZWF0ZSwgc28gd2UgY2FuIHNwZWVkIHVwIG91ciBSTkcuICovCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKworICBkbworICAgIHsKKyAgICAgIGlmIChwdWJrZXlfb25seSkKKyAgICAgICAgY2hlY2tfcHVia2V5ICgpOworICAgICAgZWxzZSBpZiAoIXNlbGZ0ZXN0X29ubHkpCisgICAgICAgIHsKKyAgICAgICAgICBjaGVja19jaXBoZXJzICgpOworICAgICAgICAgIGNoZWNrX2NpcGhlcl9tb2RlcyAoKTsKKyAgICAgICAgICBjaGVja19idWxrX2NpcGhlcl9tb2RlcyAoKTsKKyAgICAgICAgICBjaGVja19kaWdlc3RzICgpOworICAgICAgICAgIGNoZWNrX2htYWMgKCk7CisgICAgICAgICAgY2hlY2tfbWFjICgpOworICAgICAgICAgIGNoZWNrX3B1YmtleSAoKTsKKyAgICAgICAgfQorICAgICAgbG9vcGNvdW50Kys7CisgICAgICBpZiAobG9vcCkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlRlc3QgaXRlcmF0aW9uICV1IGNvbXBsZXRlZC5cbiIsIGxvb3Bjb3VudCk7CisgICAgICAgICAgaWYgKGxvb3AgIT0gLTEpCisgICAgICAgICAgICBsb29wLS07CisgICAgICAgIH0KKyAgICB9CisgIHdoaWxlIChsb29wKTsKKworICBpZiAoaW5fZmlwc19tb2RlICYmICFzZWxmdGVzdF9vbmx5KQorICAgIHsKKyAgICAgIC8qIElmIHdlIGFyZSBpbiBmaXBzIG1vZGUgZG8gc29tZSBtb3JlIHRlc3RzLiAqLworICAgICAgZ2NyeV9tZF9oZF90IG1kOworCisgICAgICAvKiBGaXJzdCB0cmlnZ2VyIGEgc2VsZi10ZXN0LiAgKi8KKyAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9GT1JDRV9GSVBTX01PREUsIDApOworICAgICAgaWYgKCFnY3J5X2NvbnRyb2wgKEdDUllDVExfT1BFUkFUSU9OQUxfUCwgMCkpCisgICAgICAgIGZhaWwgKCJub3QgaW4gb3BlcmF0aW9uYWwgc3RhdGUgYWZ0ZXIgc2VsZi10ZXN0XG4iKTsKKworICAgICAgLyogR2V0IHVzIGludG8gdGhlIGVycm9yIHN0YXRlLiAgKi8KKyAgICAgIGVyciA9IGdjcnlfbWRfb3BlbiAoJm1kLCBHQ1JZX01EX1NIQTEsIDApOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImZhaWxlZCB0byBvcGVuIFNIQS0xIGhhc2ggY29udGV4dDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X21kX2VuYWJsZSAobWQsIEdDUllfTURfU0hBMjU2KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZmFpbCAoImZhaWxlZCB0byBhZGQgU0hBLTI1NiBoYXNoIGNvbnRleHQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIGdjcnlfbWRfZ2V0X2FsZ28gaXMgb25seSBkZWZpbmVkIGZvciBhIGNvbnRleHQgd2l0aAorICAgICAgICAgICAgICAgICBqdXN0IG9uZSBkaWdlc3QgYWxnb3JpdGhtLiAgV2l0aCBvdXIgc2V0dXAgaXQgc2hvdWxkCisgICAgICAgICAgICAgICAgIHB1dCB0aGUgb2licmFyeSBpbnRvZXJyb3Igc3RhdGUuICAqLworICAgICAgICAgICAgICBmcHV0cyAoIk5vdGU6IFR3byBsaW5lcyB3aXRoIGVycm9yIG1lc3NhZ2VzIGZvbGxvdyAiCisgICAgICAgICAgICAgICAgICAgICAiLSB0aGlzIGlzIGV4cGVjdGVkXG4iLCBzdGRlcnIpOworICAgICAgICAgICAgICBnY3J5X21kX2dldF9hbGdvIChtZCk7CisgICAgICAgICAgICAgIGdjcnlfbWRfY2xvc2UgKG1kKTsKKyAgICAgICAgICAgICAgaWYgKGdjcnlfY29udHJvbCAoR0NSWUNUTF9PUEVSQVRJT05BTF9QLCAwKSkKKyAgICAgICAgICAgICAgICBmYWlsICgiZXhwZWN0ZWQgZXJyb3Igc3RhdGUgYnV0IHN0aWxsIGluIG9wZXJhdGlvbmFsIHN0YXRlXG4iKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIE5vdyBydW4gYSBzZWxmLXRlc3QgYW5kIHRvIGdldCBiYWNrIGludG8KKyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbmFsIHN0YXRlLiAgKi8KKyAgICAgICAgICAgICAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9GT1JDRV9GSVBTX01PREUsIDApOworICAgICAgICAgICAgICAgICAgaWYgKCFnY3J5X2NvbnRyb2wgKEdDUllDVExfT1BFUkFUSU9OQUxfUCwgMCkpCisgICAgICAgICAgICAgICAgICAgIGZhaWwgKCJkaWQgbm90IHJlYWNoIG9wZXJhdGlvbmFsIGFmdGVyIGVycm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBzZWxmLXRlc3RcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogSWYgaW4gc3RhbmRhcmQgbW9kZSwgcnVuIHNlbGZ0ZXN0cy4gICovCisgICAgICBpZiAoZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFTEZURVNULCAwKSkKKyAgICAgICAgZmFpbCAoInJ1bm5pbmcgc2VsZi10ZXN0IGZhaWxlZFxuIik7CisgICAgfQorCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIlxuQWxsIHRlc3RzIGNvbXBsZXRlZC4gRXJyb3JzOiAlaVxuIiwgZXJyb3JfY291bnQpOworCisgIGlmIChpbl9maXBzX21vZGUgJiYgIWdjcnlfZmlwc19tb2RlX2FjdGl2ZSAoKSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJGSVBTIG1vZGUgaXMgbm90IGFueW1vcmUgYWN0aXZlXG4iKTsKKworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDUwNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCkBAIC0wLDAgKzEsMTYyNCBAQAorLyogYmVuY2gtc2xvcGUuYyAtIGZvciBsaWJnY3J5cHQKKyAqIENvcHlyaWdodCAoQykgMjAxMyBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjIGluY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisjIGluY2x1ZGUgIi4uL2NvbXBhdC9saWJjb21wYXQuaCIKKyNlbHNlCisjIGluY2x1ZGUgPGdjcnlwdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgU1RSCisjZGVmaW5lIFNUUih2KSAjdgorI2RlZmluZSBTVFIyKHYpIFNUUih2KQorI2VuZGlmCisKKyNkZWZpbmUgUEdNICJiZW5jaC1zbG9wZSIKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBjc3ZfbW9kZTsKK3N0YXRpYyBpbnQgbnVtX21lYXN1cmVtZW50X3JlcGV0aXRpb25zOworCisvKiBDUFUgR2h6IHZhbHVlIHByb3ZpZGVkIGJ5IHVzZXIsIGFsbG93cyBjb25zdHJ1Y3RpbmcgY3ljbGVzL2J5dGUgYW5kIG90aGVyCisgICByZXN1bHRzLiAgKi8KK3N0YXRpYyBkb3VibGUgY3B1X2doeiA9IC0xOworCisvKiBXaGV0aGVyIHdlIGFyZSBydW5uaW5nIGFzIHBhcnQgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gICovCitzdGF0aWMgaW50IGluX3JlZ3Jlc3Npb25fdGVzdDsKKworLyogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBwcmludGVkIHNlY3Rpb24uICAqLworc3RhdGljIGNoYXIgKmN1cnJlbnRfc2VjdGlvbl9uYW1lOworLyogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBwcmludGVkIGFsZ29yaXRobS4gICovCitzdGF0aWMgY2hhciAqY3VycmVudF9hbGdvX25hbWU7CisvKiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHByaW50ZWQgbW9kZS4gICovCitzdGF0aWMgY2hhciAqY3VycmVudF9tb2RlX25hbWU7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZWZhdWx0IHBhcmFtZXRlcnMgZm9yIG1lYXN1cmVtZW50cy4gKi8KKworLyogU3RhcnQgYXQgc21hbGwgYnVmZmVyIHNpemUsIHRvIGdldCByZWFzb25hYmxlIHRpbWVyIGNhbGlicmF0aW9uIGZvciBmYXN0CisgKiBpbXBsZW1lbnRhdGlvbnMgKEFFUy1OSSBldGMpLiBTaXh0ZWVuIHNlbGVjdGVkIHRvIHN1cHBvcnQgdGhlIGxhcmdlc3QgYmxvY2sKKyAqIHNpemUgb2YgY3VycmVudCBzZXQgY2lwaGVyIGJsb2Nrcy4gKi8KKyNkZWZpbmUgQlVGX1NUQVJUX1NJWkUJCQkxNgorCisvKiBGcm9tIH4wIHRvIH40a2J5dGVzIGdpdmUgY29tcGFyYWJsZSByZXN1bHRzIHdpdGggcmVzdWx0cyBmcm9tIGFjYWRlbWlhCisgKiAoU1VQRVJDT1ApLiAqLworI2RlZmluZSBCVUZfRU5EX1NJWkUJCQkoQlVGX1NUQVJUX1NJWkUgKyA0MDk2KQorCisvKiBXaXRoIDEyOCBieXRlIHN0ZXBzLCB3ZSBnZXQgKDQwOTYpLzY0ID0gNjQgZGF0YSBwb2ludHMuICovCisjZGVmaW5lIEJVRl9TVEVQX1NJWkUJCQk2NAorCisvKiBOdW1iZXIgb2YgcmVwZWF0ZWQgbWVhc3VyZW1lbnRzIGF0IGVhY2ggZGF0YSBwb2ludC4gVGhlIG1lZGlhbiBvZiB0aGVzZQorICogbWVhc3VyZW1lbnRzIGlzIHNlbGVjdGVkIGFzIGRhdGEgcG9pbnQgZnVydGhlciBhbmFseXNpcy4gKi8KKyNkZWZpbmUgTlVNX01FQVNVUkVNRU5UX1JFUEVUSVRJT05TCTY0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhpZ2gtcmVzb2x1dGlvbiB0aW1lcnMuICovCisKKy8qIFRoaXMgYmVuY2htYXJraW5nIG1vZHVsZSBuZWVkcyBuZWVkcyBoaWdoIHJlc29sdXRpb24gdGltZXIuICAqLworI3VuZGVmIE5PX0dFVF9OU0VDX1RJTUUKKyNpZiBkZWZpbmVkKF9XSU4zMikKK3N0cnVjdCBuc2VjX3RpbWUKK3sKKyAgTEFSR0VfSU5URUdFUiBwZXJmX2NvdW50OworfTsKKworc3RhdGljIHZvaWQKK2dldF9uc2VjX3RpbWUgKHN0cnVjdCBuc2VjX3RpbWUgKnQpCit7CisgIEJPT0wgb2s7CisKKyAgb2sgPSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciAoJnQtPnBlcmZfY291bnQpOworICBhc3NlcnQgKG9rKTsKK30KKworc3RhdGljIGRvdWJsZQorZ2V0X3RpbWVfbnNlY19kaWZmIChzdHJ1Y3QgbnNlY190aW1lICpzdGFydCwgc3RydWN0IG5zZWNfdGltZSAqZW5kKQoreworICBzdGF0aWMgZG91YmxlIG5zZWNzX3Blcl9jb3VudCA9IDAuMDsKKyAgZG91YmxlIG5zZWNzOworCisgIGlmIChuc2Vjc19wZXJfY291bnQgPT0gMC4wKQorICAgIHsKKyAgICAgIExBUkdFX0lOVEVHRVIgcGVyZl9mcmVxOworICAgICAgQk9PTCBvazsKKworICAgICAgLyogR2V0IGNvdW50cyBwZXIgc2Vjb25kLiAqLworICAgICAgb2sgPSBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5ICgmcGVyZl9mcmVxKTsKKyAgICAgIGFzc2VydCAob2spOworCisgICAgICBuc2Vjc19wZXJfY291bnQgPSAxLjAgLyBwZXJmX2ZyZXEuUXVhZFBhcnQ7CisgICAgICBuc2Vjc19wZXJfY291bnQgKj0gMTAwMDAwMC4wICogMTAwMC4wOwkvKiBzZWMgPT4gbnNlYyAqLworCisgICAgICBhc3NlcnQgKG5zZWNzX3Blcl9jb3VudCA+IDAuMCk7CisgICAgfQorCisgIG5zZWNzID0gZW5kLT5wZXJmX2NvdW50LlF1YWRQYXJ0IC0gc3RhcnQtPnBlcmZfY291bnQuUXVhZFBhcnQ7CS8qIGNvdW50cyAqLworICBuc2VjcyAqPSBuc2Vjc19wZXJfY291bnQ7CS8qIGNvdW50cyAqIChuc2VjcyAvIGNvdW50KSA9PiBuc2VjcyAqLworCisgIHJldHVybiBuc2VjczsKK30KKyNlbGlmIGRlZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKQorc3RydWN0IG5zZWNfdGltZQoreworICBzdHJ1Y3QgdGltZXNwZWMgdHM7Cit9OworCitzdGF0aWMgdm9pZAorZ2V0X25zZWNfdGltZSAoc3RydWN0IG5zZWNfdGltZSAqdCkKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBjbG9ja19nZXR0aW1lIChDTE9DS19SRUFMVElNRSwgJnQtPnRzKTsKKyAgYXNzZXJ0IChlcnIgPT0gMCk7Cit9CisKK3N0YXRpYyBkb3VibGUKK2dldF90aW1lX25zZWNfZGlmZiAoc3RydWN0IG5zZWNfdGltZSAqc3RhcnQsIHN0cnVjdCBuc2VjX3RpbWUgKmVuZCkKK3sKKyAgZG91YmxlIG5zZWNzOworCisgIG5zZWNzID0gZW5kLT50cy50dl9zZWMgLSBzdGFydC0+dHMudHZfc2VjOworICBuc2VjcyAqPSAxMDAwMDAwLjAgKiAxMDAwLjA7CS8qIHNlYyA9PiBuc2VjICovCisKKyAgLyogVGhpcyB3YXkgd2UgZG9uJ3QgaGF2ZSB0byBjYXJlIGlmIHR2X25zZWMgdW5zaWduZWQgb3Igc2lnbmVkLiAqLworICBpZiAoZW5kLT50cy50dl9uc2VjID49IHN0YXJ0LT50cy50dl9uc2VjKQorICAgIG5zZWNzICs9IGVuZC0+dHMudHZfbnNlYyAtIHN0YXJ0LT50cy50dl9uc2VjOworICBlbHNlCisgICAgbnNlY3MgLT0gc3RhcnQtPnRzLnR2X25zZWMgLSBlbmQtPnRzLnR2X25zZWM7CisKKyAgcmV0dXJuIG5zZWNzOworfQorI2VsaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkKK3N0cnVjdCBuc2VjX3RpbWUKK3sKKyAgc3RydWN0IHRpbWV2YWwgdHY7Cit9OworCitzdGF0aWMgdm9pZAorZ2V0X25zZWNfdGltZSAoc3RydWN0IG5zZWNfdGltZSAqdCkKK3sKKyAgaW50IGVycjsKKworICBlcnIgPSBnZXR0aW1lb2ZkYXkgKCZ0LT50diwgTlVMTCk7CisgIGFzc2VydCAoZXJyID09IDApOworfQorCitzdGF0aWMgZG91YmxlCitnZXRfdGltZV9uc2VjX2RpZmYgKHN0cnVjdCBuc2VjX3RpbWUgKnN0YXJ0LCBzdHJ1Y3QgbnNlY190aW1lICplbmQpCit7CisgIGRvdWJsZSBuc2VjczsKKworICBuc2VjcyA9IGVuZC0+dHYudHZfc2VjIC0gc3RhcnQtPnR2LnR2X3NlYzsKKyAgbnNlY3MgKj0gMTAwMDAwMDsJCS8qIHNlYyA9PiDCtXNlYyAqLworCisgIC8qIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gY2FyZSBpZiB0dl91c2VjIHVuc2lnbmVkIG9yIHNpZ25lZC4gKi8KKyAgaWYgKGVuZC0+dHYudHZfdXNlYyA+PSBzdGFydC0+dHYudHZfdXNlYykKKyAgICBuc2VjcyArPSBlbmQtPnR2LnR2X3VzZWMgLSBzdGFydC0+dHYudHZfdXNlYzsKKyAgZWxzZQorICAgIG5zZWNzIC09IHN0YXJ0LT50di50dl91c2VjIC0gZW5kLT50di50dl91c2VjOworCisgIG5zZWNzICo9IDEwMDA7CQkvKiDCtXNlYyA9PiBuc2VjICovCisKKyAgcmV0dXJuIG5zZWNzOworfQorI2Vsc2UKKyNkZWZpbmUgTk9fR0VUX05TRUNfVElNRSAxCisjZW5kaWYKKworCisvKiBJZiBubyBoaWdoIHJlc29sdXRpb24gdGltZXIgZm91bmQsIHByb3ZpZGUgZHVtbXkgYmVuY2gtc2xvcGUuICAqLworI2lmZGVmIE5PX0dFVF9OU0VDX1RJTUUKKworCitpbnQKK21haW4gKHZvaWQpCit7CisgIC8qIE5vIG5zZWMgdGltZXIgPT4gU0tJUCB0ZXN0LiAqLworICByZXR1cm4gNzc7Cit9CisKKworI2Vsc2UgLyogIU5PX0dFVF9OU0VDX1RJTUUgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTbG9wZSBiZW5jaG1hcmtpbmcgZnJhbWV3b3JrLiAqLworCitzdHJ1Y3QgYmVuY2hfb2JqCit7CisgIGNvbnN0IHN0cnVjdCBiZW5jaF9vcHMgKm9wczsKKworICB1bnNpZ25lZCBpbnQgbnVtX21lYXN1cmVfcmVwZXRpdGlvbnM7CisgIHVuc2lnbmVkIGludCBtaW5fYnVmc2l6ZTsKKyAgdW5zaWduZWQgaW50IG1heF9idWZzaXplOworICB1bnNpZ25lZCBpbnQgc3RlcF9zaXplOworCisgIHZvaWQgKnByaXY7Cit9OworCit0eXBlZGVmIGludCAoKmNvbnN0IGJlbmNoX2luaXRpYWxpemVfdCkgKHN0cnVjdCBiZW5jaF9vYmogKiBvYmopOwordHlwZWRlZiB2b2lkICgqY29uc3QgYmVuY2hfZmluYWxpemVfdCkgKHN0cnVjdCBiZW5jaF9vYmogKiBvYmopOwordHlwZWRlZiB2b2lkICgqY29uc3QgYmVuY2hfZG9fcnVuX3QpIChzdHJ1Y3QgYmVuY2hfb2JqICogb2JqLCB2b2lkICpidWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGJ1Zmxlbik7CisKK3N0cnVjdCBiZW5jaF9vcHMKK3sKKyAgYmVuY2hfaW5pdGlhbGl6ZV90IGluaXRpYWxpemU7CisgIGJlbmNoX2ZpbmFsaXplX3QgZmluYWxpemU7CisgIGJlbmNoX2RvX3J1bl90IGRvX3J1bjsKK307CisKKworZG91YmxlCitnZXRfc2xvcGUgKGRvdWJsZSAoKmNvbnN0IGdldF94KSAodW5zaWduZWQgaW50IGlkeCwgdm9pZCAqcHJpdiksCisJICAgdm9pZCAqZ2V0X3hfcHJpdiwgZG91YmxlIHlfcG9pbnRzW10sIHVuc2lnbmVkIGludCBucG9pbnRzLAorCSAgIGRvdWJsZSAqb3ZlcmhlYWQpCit7CisgIGRvdWJsZSBzdW14LCBzdW15LCBzdW14Miwgc3VteTIsIHN1bXh5OworICB1bnNpZ25lZCBpbnQgaTsKKyAgZG91YmxlIGIsIGE7CisKKyAgc3VteCA9IHN1bXkgPSBzdW14MiA9IHN1bXkyID0gc3VteHkgPSAwOworCisgIGZvciAoaSA9IDA7IGkgPCBucG9pbnRzOyBpKyspCisgICAgeworICAgICAgZG91YmxlIHgsIHk7CisKKyAgICAgIHggPSBnZXRfeCAoaSwgZ2V0X3hfcHJpdik7CS8qIGJ5dGVzICovCisgICAgICB5ID0geV9wb2ludHNbaV07CQkvKiBuc2VjcyAqLworCisgICAgICBzdW14ICs9IHg7CisgICAgICBzdW15ICs9IHk7CisgICAgICBzdW14MiArPSB4ICogeDsKKyAgICAgIC8qc3VteTIgKz0geSAqIHk7Ki8KKyAgICAgIHN1bXh5ICs9IHggKiB5OworICAgIH0KKworICBiID0gKG5wb2ludHMgKiBzdW14eSAtIHN1bXggKiBzdW15KSAvIChucG9pbnRzICogc3VteDIgLSBzdW14ICogc3VteCk7CisgIGEgPSAoc3VteSAtIGIgKiBzdW14KSAvIG5wb2ludHM7CisKKyAgaWYgKG92ZXJoZWFkKQorICAgICpvdmVyaGVhZCA9IGE7CQkvKiBuc2VjcyAqLworCisgIHJldHVybiBiOwkJCS8qIG5zZWNzIHBlciBieXRlICovCit9CisKKworZG91YmxlCitnZXRfYmVuY2hfb2JqX3BvaW50X3ggKHVuc2lnbmVkIGludCBpZHgsIHZvaWQgKnByaXYpCit7CisgIHN0cnVjdCBiZW5jaF9vYmogKm9iaiA9IHByaXY7CisgIHJldHVybiAoZG91YmxlKSAob2JqLT5taW5fYnVmc2l6ZSArIChpZHggKiBvYmotPnN0ZXBfc2l6ZSkpOworfQorCisKK3Vuc2lnbmVkIGludAorZ2V0X251bV9tZWFzdXJlbWVudHMgKHN0cnVjdCBiZW5jaF9vYmogKm9iaikKK3sKKyAgdW5zaWduZWQgaW50IGJ1Zl9yYW5nZSA9IG9iai0+bWF4X2J1ZnNpemUgLSBvYmotPm1pbl9idWZzaXplOworICB1bnNpZ25lZCBpbnQgbnVtID0gYnVmX3JhbmdlIC8gb2JqLT5zdGVwX3NpemUgKyAxOworCisgIHdoaWxlIChvYmotPm1pbl9idWZzaXplICsgKG51bSAqIG9iai0+c3RlcF9zaXplKSA+IG9iai0+bWF4X2J1ZnNpemUpCisgICAgbnVtLS07CisKKyAgcmV0dXJuIG51bSArIDE7Cit9CisKKworc3RhdGljIGludAorZG91YmxlX2NtcCAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworICBjb25zdCBkb3VibGUgKmEsICpiOworCisgIGEgPSBfYTsKKyAgYiA9IF9iOworCisgIGlmICgqYSA+ICpiKQorICAgIHJldHVybiAxOworICBpZiAoKmEgPCAqYikKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAwOworfQorCisKK2RvdWJsZQorZG9fYmVuY2hfb2JqX21lYXN1cmVtZW50IChzdHJ1Y3QgYmVuY2hfb2JqICpvYmosIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwKKwkJCSAgZG91YmxlICptZWFzdXJlbWVudF9yYXcsCisJCQkgIHVuc2lnbmVkIGludCBsb29wX2l0ZXJhdGlvbnMpCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fcmVwZXRpdGlvbnMgPSBvYmotPm51bV9tZWFzdXJlX3JlcGV0aXRpb25zOworICBjb25zdCBiZW5jaF9kb19ydW5fdCBkb19ydW4gPSBvYmotPm9wcy0+ZG9fcnVuOworICBzdHJ1Y3QgbnNlY190aW1lIHN0YXJ0LCBlbmQ7CisgIHVuc2lnbmVkIGludCByZXAsIGxvb3A7CisgIGRvdWJsZSByZXM7CisKKyAgaWYgKG51bV9yZXBldGl0aW9ucyA8IDEgfHwgbG9vcF9pdGVyYXRpb25zIDwgMSkKKyAgICByZXR1cm4gMC4wOworCisgIGZvciAocmVwID0gMDsgcmVwIDwgbnVtX3JlcGV0aXRpb25zOyByZXArKykKKyAgICB7CisgICAgICBnZXRfbnNlY190aW1lICgmc3RhcnQpOworCisgICAgICBmb3IgKGxvb3AgPSAwOyBsb29wIDwgbG9vcF9pdGVyYXRpb25zOyBsb29wKyspCisJZG9fcnVuIChvYmosIGJ1ZmZlciwgYnVmbGVuKTsKKworICAgICAgZ2V0X25zZWNfdGltZSAoJmVuZCk7CisKKyAgICAgIG1lYXN1cmVtZW50X3Jhd1tyZXBdID0gZ2V0X3RpbWVfbnNlY19kaWZmICgmc3RhcnQsICZlbmQpOworICAgIH0KKworICAvKiBSZXR1cm4gbWVkaWFuIG9mIHJlcGVhdGVkIG1lYXN1cmVtZW50cy4gKi8KKyAgcXNvcnQgKG1lYXN1cmVtZW50X3JhdywgbnVtX3JlcGV0aXRpb25zLCBzaXplb2YgKG1lYXN1cmVtZW50X3Jhd1swXSksCisJIGRvdWJsZV9jbXApOworCisgIGlmIChudW1fcmVwZXRpdGlvbnMgJSAyID09IDEpCisgICAgcmV0dXJuIG1lYXN1cmVtZW50X3Jhd1tudW1fcmVwZXRpdGlvbnMgLyAyXTsKKworICByZXMgPSBtZWFzdXJlbWVudF9yYXdbbnVtX3JlcGV0aXRpb25zIC8gMl0KKyAgICArIG1lYXN1cmVtZW50X3Jhd1tudW1fcmVwZXRpdGlvbnMgLyAyIC0gMV07CisgIHJldHVybiByZXMgLyAyOworfQorCisKK3Vuc2lnbmVkIGludAorYWRqdXN0X2xvb3BfaXRlcmF0aW9uc190b190aW1lcl9hY2N1cmFjeSAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWZmZXIsCisJCQkJCSAgZG91YmxlICptZWFzdXJlbWVudF9yYXcpCit7CisgIGNvbnN0IGRvdWJsZSBpbmNyZWFzZV90aHJlcyA9IDMuMDsKKyAgZG91YmxlIHRtcCwgbnNlY3M7CisgIHVuc2lnbmVkIGludCBsb29wX2l0ZXJhdGlvbnM7CisgIHVuc2lnbmVkIGludCB0ZXN0X2J1ZnNpemU7CisKKyAgdGVzdF9idWZzaXplID0gb2JqLT5taW5fYnVmc2l6ZTsKKyAgaWYgKHRlc3RfYnVmc2l6ZSA9PSAwKQorICAgIHRlc3RfYnVmc2l6ZSArPSBvYmotPnN0ZXBfc2l6ZTsKKworICBsb29wX2l0ZXJhdGlvbnMgPSAwOworICBkbworICAgIHsKKyAgICAgIC8qIEluY3JlYXNlIGxvb3AgaXRlcmF0aW9ucyB1bnRpbCB3ZSBnZXQgb3RoZXIgcmVzdWx0cyB0aGFuIHplcm8uICAqLworICAgICAgbnNlY3MgPQorCWRvX2JlbmNoX29ial9tZWFzdXJlbWVudCAob2JqLCBidWZmZXIsIHRlc3RfYnVmc2l6ZSwKKwkJCQkgIG1lYXN1cmVtZW50X3JhdywgKytsb29wX2l0ZXJhdGlvbnMpOworICAgIH0KKyAgd2hpbGUgKG5zZWNzIDwgMS4wIC0gMC4xKTsKKyAgZG8KKyAgICB7CisgICAgICAvKiBJbmNyZWFzZSBsb29wIGl0ZXJhdGlvbnMgdW50aWwgd2UgZ2V0IHJlYXNvbmFibGUgaW5jcmVhc2UgZm9yIGVsYXBzZWQgdGltZS4gICovCisgICAgICB0bXAgPQorCWRvX2JlbmNoX29ial9tZWFzdXJlbWVudCAob2JqLCBidWZmZXIsIHRlc3RfYnVmc2l6ZSwKKwkJCQkgIG1lYXN1cmVtZW50X3JhdywgKytsb29wX2l0ZXJhdGlvbnMpOworICAgIH0KKyAgd2hpbGUgKHRtcCA8IG5zZWNzICogKGluY3JlYXNlX3RocmVzIC0gMC4xKSk7CisKKyAgcmV0dXJuIGxvb3BfaXRlcmF0aW9uczsKK30KKworCisvKiBCZW5jaG1hcmsgYW5kIHJldHVybiBsaW5lYXIgcmVncmVzc2lvbiBzbG9wZSBpbiBuYW5vc2Vjb25kcyBwZXIgYnl0ZS4gICovCitkb3VibGUKK2RvX3Nsb3BlX2JlbmNobWFyayAoc3RydWN0IGJlbmNoX29iaiAqb2JqKQoreworICB1bnNpZ25lZCBpbnQgbnVtX21lYXN1cmVtZW50czsKKyAgZG91YmxlICptZWFzdXJlbWVudHMgPSBOVUxMOworICBkb3VibGUgKm1lYXN1cmVtZW50X3JhdyA9IE5VTEw7CisgIGRvdWJsZSBzbG9wZSwgb3ZlcmhlYWQ7CisgIHVuc2lnbmVkIGludCBsb29wX2l0ZXJhdGlvbnMsIG1pZHgsIGk7CisgIHVuc2lnbmVkIGNoYXIgKnJlYWxfYnVmZmVyID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgY3VyX2J1ZnNpemU7CisgIGludCBlcnI7CisKKyAgZXJyID0gb2JqLT5vcHMtPmluaXRpYWxpemUgKG9iaik7CisgIGlmIChlcnIgPCAwKQorICAgIHJldHVybiAtMTsKKworICBudW1fbWVhc3VyZW1lbnRzID0gZ2V0X251bV9tZWFzdXJlbWVudHMgKG9iaik7CisgIG1lYXN1cmVtZW50cyA9IGNhbGxvYyAobnVtX21lYXN1cmVtZW50cywgc2l6ZW9mICgqbWVhc3VyZW1lbnRzKSk7CisgIGlmICghbWVhc3VyZW1lbnRzKQorICAgIGdvdG8gZXJyX2ZyZWU7CisKKyAgbWVhc3VyZW1lbnRfcmF3ID0KKyAgICBjYWxsb2MgKG9iai0+bnVtX21lYXN1cmVfcmVwZXRpdGlvbnMsIHNpemVvZiAoKm1lYXN1cmVtZW50X3JhdykpOworICBpZiAoIW1lYXN1cmVtZW50X3JhdykKKyAgICBnb3RvIGVycl9mcmVlOworCisgIGlmIChudW1fbWVhc3VyZW1lbnRzIDwgMSB8fCBvYmotPm51bV9tZWFzdXJlX3JlcGV0aXRpb25zIDwgMSB8fAorICAgICAgb2JqLT5tYXhfYnVmc2l6ZSA8IDEgfHwgb2JqLT5taW5fYnVmc2l6ZSA+IG9iai0+bWF4X2J1ZnNpemUpCisgICAgZ290byBlcnJfZnJlZTsKKworICByZWFsX2J1ZmZlciA9IG1hbGxvYyAob2JqLT5tYXhfYnVmc2l6ZSArIDEyOCk7CisgIGlmICghcmVhbF9idWZmZXIpCisgICAgZ290byBlcnJfZnJlZTsKKyAgLyogR2V0IGFsaWduZWQgYnVmZmVyICovCisgIGJ1ZmZlciA9IHJlYWxfYnVmZmVyOworICBidWZmZXIgKz0gMTI4IC0gKChyZWFsX2J1ZmZlciAtICh1bnNpZ25lZCBjaGFyICopIDApICYgKDEyOCAtIDEpKTsKKworICBmb3IgKGkgPSAwOyBpIDwgb2JqLT5tYXhfYnVmc2l6ZTsgaSsrKQorICAgIGJ1ZmZlcltpXSA9IDB4NTUgXiAoLWkpOworCisgIC8qIEFkanVzdCBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIHVwIHRvIHRpbWVyIGFjY3VyYWN5LiAgKi8KKyAgbG9vcF9pdGVyYXRpb25zID0gYWRqdXN0X2xvb3BfaXRlcmF0aW9uc190b190aW1lcl9hY2N1cmFjeSAob2JqLCBidWZmZXIsCisJCQkJCQkJICAgICAgbWVhc3VyZW1lbnRfcmF3KTsKKworICAvKiBQZXJmb3JtIG1lYXN1cmVtZW50cyAqLworICBmb3IgKG1pZHggPSAwLCBjdXJfYnVmc2l6ZSA9IG9iai0+bWluX2J1ZnNpemU7CisgICAgICAgY3VyX2J1ZnNpemUgPD0gb2JqLT5tYXhfYnVmc2l6ZTsgY3VyX2J1ZnNpemUgKz0gb2JqLT5zdGVwX3NpemUsIG1pZHgrKykKKyAgICB7CisgICAgICBtZWFzdXJlbWVudHNbbWlkeF0gPQorCWRvX2JlbmNoX29ial9tZWFzdXJlbWVudCAob2JqLCBidWZmZXIsIGN1cl9idWZzaXplLCBtZWFzdXJlbWVudF9yYXcsCisJCQkJICBsb29wX2l0ZXJhdGlvbnMpOworICAgICAgbWVhc3VyZW1lbnRzW21pZHhdIC89IGxvb3BfaXRlcmF0aW9uczsKKyAgICB9CisKKyAgYXNzZXJ0IChtaWR4ID09IG51bV9tZWFzdXJlbWVudHMpOworCisgIHNsb3BlID0KKyAgICBnZXRfc2xvcGUgKCZnZXRfYmVuY2hfb2JqX3BvaW50X3gsIG9iaiwgbWVhc3VyZW1lbnRzLCBudW1fbWVhc3VyZW1lbnRzLAorCSAgICAgICAmb3ZlcmhlYWQpOworCisgIGZyZWUgKG1lYXN1cmVtZW50X3Jhdyk7CisgIGZyZWUgKHJlYWxfYnVmZmVyKTsKKyAgb2JqLT5vcHMtPmZpbmFsaXplIChvYmopOworCisgIHJldHVybiBzbG9wZTsKKworZXJyX2ZyZWU6CisgIGlmIChtZWFzdXJlbWVudF9yYXcpCisgICAgZnJlZSAobWVhc3VyZW1lbnRfcmF3KTsKKyAgaWYgKG1lYXN1cmVtZW50cykKKyAgICBmcmVlIChtZWFzdXJlbWVudHMpOworICBpZiAocmVhbF9idWZmZXIpCisgICAgZnJlZSAocmVhbF9idWZmZXIpOworICBvYmotPm9wcy0+ZmluYWxpemUgKG9iaik7CisKKyAgcmV0dXJuIC0xOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByaW50aW5nIHJlc3VsdHMuICovCisKK3N0YXRpYyB2b2lkCitkb3VibGVfdG9fc3RyIChjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sIGRvdWJsZSB2YWx1ZSkKK3sKKyAgY29uc3QgY2hhciAqZm10OworCisgIGlmICh2YWx1ZSA8IDEuMCkKKyAgICBmbXQgPSAiJS4zZiI7CisgIGVsc2UgaWYgKHZhbHVlIDwgMTAwLjApCisgICAgZm10ID0gIiUuMmYiOworICBlbHNlCisgICAgZm10ID0gIiUuMWYiOworCisgIHNucHJpbnRmIChvdXQsIG91dGxlbiwgZm10LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9yZXN1bHRfY3N2IChkb3VibGUgbnNlY3NfcGVyX2J5dGUpCit7CisgIGRvdWJsZSBjeWNsZXNfcGVyX2J5dGUsIG1ieXRlc19wZXJfc2VjOworICBjaGFyIG5zZWNwYnl0ZV9idWZbMTZdOworICBjaGFyIG1icHNlY19idWZbMTZdOworICBjaGFyIGNwYnl0ZV9idWZbMTZdOworCisgICpjcGJ5dGVfYnVmID0gMDsKKworICBkb3VibGVfdG9fc3RyIChuc2VjcGJ5dGVfYnVmLCBzaXplb2YgKG5zZWNwYnl0ZV9idWYpLCBuc2Vjc19wZXJfYnl0ZSk7CisKKyAgLyogSWYgdXNlciBkaWRuJ3QgcHJvdmlkZSBDUFUgc3BlZWQsIHdlIGNhbm5vdCBzaG93IGN5Y2xlcy9ieXRlIHJlc3VsdHMuICAqLworICBpZiAoY3B1X2doeiA+IDAuMCkKKyAgICB7CisgICAgICBjeWNsZXNfcGVyX2J5dGUgPSBuc2Vjc19wZXJfYnl0ZSAqIGNwdV9naHo7CisgICAgICBkb3VibGVfdG9fc3RyIChjcGJ5dGVfYnVmLCBzaXplb2YgKGNwYnl0ZV9idWYpLCBjeWNsZXNfcGVyX2J5dGUpOworICAgIH0KKworICBtYnl0ZXNfcGVyX3NlYyA9CisgICAgKDEwMDAuMCAqIDEwMDAuMCAqIDEwMDAuMCkgLyAobnNlY3NfcGVyX2J5dGUgKiAxMDI0ICogMTAyNCk7CisgIGRvdWJsZV90b19zdHIgKG1icHNlY19idWYsIHNpemVvZiAobWJwc2VjX2J1ZiksIG1ieXRlc19wZXJfc2VjKTsKKworICAvKiBXZSBwcmludCB0d28gZW1wdHkgZmllbGRzIHRvIGFsbG93IGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLiAgKi8KKyAgcHJpbnRmICgiJXMsJXMsJXMsLCwlcyxucy9CLCVzLE1pQi9zLCVzLGMvQlxuIiwKKyAgICAgICAgICBjdXJyZW50X3NlY3Rpb25fbmFtZSwKKyAgICAgICAgICBjdXJyZW50X2FsZ29fbmFtZT8gY3VycmVudF9hbGdvX25hbWUgOiAiIiwKKyAgICAgICAgICBjdXJyZW50X21vZGVfbmFtZT8gY3VycmVudF9tb2RlX25hbWUgOiAiIiwKKyAgICAgICAgICBuc2VjcGJ5dGVfYnVmLAorICAgICAgICAgIG1icHNlY19idWYsCisgICAgICAgICAgY3BieXRlX2J1Zik7CisKK30KKworc3RhdGljIHZvaWQKK2JlbmNoX3ByaW50X3Jlc3VsdF9zdGQgKGRvdWJsZSBuc2Vjc19wZXJfYnl0ZSkKK3sKKyAgZG91YmxlIGN5Y2xlc19wZXJfYnl0ZSwgbWJ5dGVzX3Blcl9zZWM7CisgIGNoYXIgbnNlY3BieXRlX2J1ZlsxNl07CisgIGNoYXIgbWJwc2VjX2J1ZlsxNl07CisgIGNoYXIgY3BieXRlX2J1ZlsxNl07CisKKyAgc3RyY3B5IChjcGJ5dGVfYnVmLCAiLSIpOworCisgIGRvdWJsZV90b19zdHIgKG5zZWNwYnl0ZV9idWYsIHNpemVvZiAobnNlY3BieXRlX2J1ZiksIG5zZWNzX3Blcl9ieXRlKTsKKworICAvKiBJZiB1c2VyIGRpZG4ndCBwcm92aWRlIENQVSBzcGVlZCwgd2UgY2Fubm90IHNob3cgY3ljbGVzL2J5dGUgcmVzdWx0cy4gICovCisgIGlmIChjcHVfZ2h6ID4gMC4wKQorICAgIHsKKyAgICAgIGN5Y2xlc19wZXJfYnl0ZSA9IG5zZWNzX3Blcl9ieXRlICogY3B1X2doejsKKyAgICAgIGRvdWJsZV90b19zdHIgKGNwYnl0ZV9idWYsIHNpemVvZiAoY3BieXRlX2J1ZiksIGN5Y2xlc19wZXJfYnl0ZSk7CisgICAgfQorCisgIG1ieXRlc19wZXJfc2VjID0KKyAgICAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKSAvIChuc2Vjc19wZXJfYnl0ZSAqIDEwMjQgKiAxMDI0KTsKKyAgZG91YmxlX3RvX3N0ciAobWJwc2VjX2J1Ziwgc2l6ZW9mIChtYnBzZWNfYnVmKSwgbWJ5dGVzX3Blcl9zZWMpOworCisgIHN0cm5jYXQgKG5zZWNwYnl0ZV9idWYsICIgbnMvQiIsIHNpemVvZiAobnNlY3BieXRlX2J1ZikgLSAxKTsKKyAgc3RybmNhdCAobWJwc2VjX2J1ZiwgIiBNaUIvcyIsIHNpemVvZiAobWJwc2VjX2J1ZikgLSAxKTsKKyAgc3RybmNhdCAoY3BieXRlX2J1ZiwgIiBjL0IiLCBzaXplb2YgKGNwYnl0ZV9idWYpIC0gMSk7CisKKyAgcHJpbnRmICgiJTE0cyAlMTVzICUxM3NcbiIsIG5zZWNwYnl0ZV9idWYsIG1icHNlY19idWYsIGNwYnl0ZV9idWYpOworfQorCitzdGF0aWMgdm9pZAorYmVuY2hfcHJpbnRfcmVzdWx0IChkb3VibGUgbnNlY3NfcGVyX2J5dGUpCit7CisgIGlmIChjc3ZfbW9kZSkKKyAgICBiZW5jaF9wcmludF9yZXN1bHRfY3N2IChuc2Vjc19wZXJfYnl0ZSk7CisgIGVsc2UKKyAgICBiZW5jaF9wcmludF9yZXN1bHRfc3RkIChuc2Vjc19wZXJfYnl0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9zZWN0aW9uIChjb25zdCBjaGFyICpzZWN0aW9uX25hbWUsIGNvbnN0IGNoYXIgKnByaW50X25hbWUpCit7CisgIGlmIChjc3ZfbW9kZSkKKyAgICB7CisgICAgICBnY3J5X2ZyZWUgKGN1cnJlbnRfc2VjdGlvbl9uYW1lKTsKKyAgICAgIGN1cnJlbnRfc2VjdGlvbl9uYW1lID0gZ2NyeV94c3RyZHVwIChzZWN0aW9uX25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHByaW50ZiAoIiVzOlxuIiwgcHJpbnRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9oZWFkZXIgKGludCBhbGdvX3dpZHRoLCBjb25zdCBjaGFyICphbGdvX25hbWUpCit7CisgIGlmIChjc3ZfbW9kZSkKKyAgICB7CisgICAgICBnY3J5X2ZyZWUgKGN1cnJlbnRfYWxnb19uYW1lKTsKKyAgICAgIGN1cnJlbnRfYWxnb19uYW1lID0gZ2NyeV94c3RyZHVwIChhbGdvX25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChhbGdvX3dpZHRoIDwgMCkKKyAgICAgICAgcHJpbnRmICgiICUtKnMgfCAiLCAtYWxnb193aWR0aCwgYWxnb19uYW1lKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcHJpbnRmICgiICUtKnMgfCAiLCBhbGdvX3dpZHRoLCBhbGdvX25hbWUpOworICAgICAgcHJpbnRmICgiJTE0cyAlMTVzICUxM3NcbiIsICJuYW5vc2Vjcy9ieXRlIiwgIm1lYmlieXRlcy9zZWMiLAorICAgICAgICAgICAgICAiY3ljbGVzL2J5dGUiKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9hbGdvIChpbnQgYWxnb193aWR0aCwgY29uc3QgY2hhciAqYWxnb19uYW1lKQoreworICBpZiAoY3N2X21vZGUpCisgICAgeworICAgICAgZ2NyeV9mcmVlIChjdXJyZW50X2FsZ29fbmFtZSk7CisgICAgICBjdXJyZW50X2FsZ29fbmFtZSA9IGdjcnlfeHN0cmR1cCAoYWxnb19uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoYWxnb193aWR0aCA8IDApCisgICAgICAgIHByaW50ZiAoIiAlLSpzIHwgIiwgLWFsZ29fd2lkdGgsIGFsZ29fbmFtZSk7CisgICAgICBlbHNlCisgICAgICAgIHByaW50ZiAoIiAlLSpzIHwgIiwgYWxnb193aWR0aCwgYWxnb19uYW1lKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9tb2RlIChpbnQgd2lkdGgsIGNvbnN0IGNoYXIgKm1vZGVfbmFtZSkKK3sKKyAgaWYgKGNzdl9tb2RlKQorICAgIHsKKyAgICAgIGdjcnlfZnJlZSAoY3VycmVudF9tb2RlX25hbWUpOworICAgICAgY3VycmVudF9tb2RlX25hbWUgPSBnY3J5X3hzdHJkdXAgKG1vZGVfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHdpZHRoIDwgMCkKKyAgICAgICAgcHJpbnRmICgiICUtKnMgfCAiLCAtd2lkdGgsIG1vZGVfbmFtZSk7CisgICAgICBlbHNlCisgICAgICAgIHByaW50ZiAoIiAlKnMgfCAiLCB3aWR0aCwgbW9kZV9uYW1lKTsKKyAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9wcmludF9mb290ZXIgKGludCBhbGdvX3dpZHRoKQoreworICBpZiAoIWNzdl9tb2RlKQorICAgIHByaW50ZiAoIiAlLSpzID1cbiIsIGFsZ29fd2lkdGgsICIiKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENpcGhlciBiZW5jaG1hcmtzLiAqLworCitzdHJ1Y3QgYmVuY2hfY2lwaGVyX21vZGUKK3sKKyAgaW50IG1vZGU7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHN0cnVjdCBiZW5jaF9vcHMgKm9wczsKKworICBpbnQgYWxnbzsKK307CisKKworc3RhdGljIGludAorYmVuY2hfZW5jcnlwdF9pbml0IChzdHJ1Y3QgYmVuY2hfb2JqICpvYmopCit7CisgIHN0cnVjdCBiZW5jaF9jaXBoZXJfbW9kZSAqbW9kZSA9IG9iai0+cHJpdjsKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZDsKKyAgaW50IGVyciwga2V5bGVuOworCisgIG9iai0+bWluX2J1ZnNpemUgPSBCVUZfU1RBUlRfU0laRTsKKyAgb2JqLT5tYXhfYnVmc2l6ZSA9IEJVRl9FTkRfU0laRTsKKyAgb2JqLT5zdGVwX3NpemUgPSBCVUZfU1RFUF9TSVpFOworICBvYmotPm51bV9tZWFzdXJlX3JlcGV0aXRpb25zID0gbnVtX21lYXN1cmVtZW50X3JlcGV0aXRpb25zOworCisgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZCwgbW9kZS0+YWxnbywgbW9kZS0+bW9kZSwgMCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZXJyb3Igb3BlbmluZyBjaXBoZXIgYCVzJ1xuIiwKKwkgICAgICAgZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChtb2RlLT5hbGdvKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAga2V5bGVuID0gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fa2V5bGVuIChtb2RlLT5hbGdvKTsKKyAgaWYgKGtleWxlbikKKyAgICB7CisgICAgICBjaGFyIGtleVtrZXlsZW5dOworICAgICAgaW50IGk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlsZW47IGkrKykKKwlrZXlbaV0gPSAweDMzIF4gKDExIC0gaSk7CisKKyAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleSwga2V5bGVuKTsKKyAgICAgIGlmIChlcnIpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXNcbiIsCisJCSAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisJICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworCSAgZXhpdCAoMSk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGZhaWxlZCB0byBnZXQga2V5IGxlbmd0aCBmb3IgYWxnb3JpdGhtIGAlcydcbiIsCisJICAgICAgIGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAobW9kZS0+YWxnbykpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBvYmotPnByaXYgPSBoZDsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JlbmNoX2VuY3J5cHRfZnJlZSAoc3RydWN0IGJlbmNoX29iaiAqb2JqKQoreworICBnY3J5X2NpcGhlcl9oZF90IGhkID0gb2JqLT5wcml2OworCisgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9lbmNyeXB0X2RvX2JlbmNoIChzdHJ1Y3QgYmVuY2hfb2JqICpvYmosIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZCA9IG9iai0+cHJpdjsKKyAgaW50IGVycjsKKworICBlcnIgPSBnY3J5X2NpcGhlcl9lbmNyeXB0IChoZCwgYnVmLCBidWZsZW4sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBnY3J5X2NpcGhlcl9lbmNyeXB0IGZhaWxlZDogJXNcbiIsCisJICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYmVuY2hfZGVjcnlwdF9kb19iZW5jaCAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQgPSBvYmotPnByaXY7CisgIGludCBlcnI7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorCSAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KK30KKworc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgZW5jcnlwdF9vcHMgPSB7CisgICZiZW5jaF9lbmNyeXB0X2luaXQsCisgICZiZW5jaF9lbmNyeXB0X2ZyZWUsCisgICZiZW5jaF9lbmNyeXB0X2RvX2JlbmNoCit9OworCitzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBkZWNyeXB0X29wcyA9IHsKKyAgJmJlbmNoX2VuY3J5cHRfaW5pdCwKKyAgJmJlbmNoX2VuY3J5cHRfZnJlZSwKKyAgJmJlbmNoX2RlY3J5cHRfZG9fYmVuY2gKK307CisKKworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKK3N0YXRpYyB2b2lkCitiZW5jaF9jY21fZW5jcnlwdF9kb19iZW5jaCAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQgPSBvYmotPnByaXY7CisgIGludCBlcnI7CisgIGNoYXIgdGFnWzhdOworICBjaGFyIG5vbmNlWzExXSA9IHsgMHg4MCwgMHgwMSwgfTsKKyAgdTY0IHBhcmFtc1szXTsKKworICBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIG5vbmNlLCBzaXplb2YgKG5vbmNlKSk7CisKKyAgLyogU2V0IENDTSBsZW5ndGhzICovCisgIHBhcmFtc1swXSA9IGJ1ZmxlbjsKKyAgcGFyYW1zWzFdID0gMDsJCS8qYWFkbGVuICovCisgIHBhcmFtc1syXSA9IHNpemVvZiAodGFnKTsKKyAgZXJyID0KKyAgICBnY3J5X2NpcGhlcl9jdGwgKGhkLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgcGFyYW1zLCBzaXplb2YgKHBhcmFtcykpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2N0bCBmYWlsZWQ6ICVzXG4iLAorCSAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9lbmNyeXB0IChoZCwgYnVmLCBidWZsZW4sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBnY3J5X2NpcGhlcl9lbmNyeXB0IGZhaWxlZDogJXNcbiIsCisJICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGVyciA9IGdjcnlfY2lwaGVyX2dldHRhZyAoaGQsIHRhZywgc2l6ZW9mICh0YWcpKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBnY3J5X2NpcGhlcl9nZXR0YWcgZmFpbGVkOiAlc1xuIiwKKwkgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICBleGl0ICgxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9jY21fZGVjcnlwdF9kb19iZW5jaCAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQgPSBvYmotPnByaXY7CisgIGludCBlcnI7CisgIGNoYXIgdGFnWzhdID0geyAwLCB9OworICBjaGFyIG5vbmNlWzExXSA9IHsgMHg4MCwgMHgwMSwgfTsKKyAgdTY0IHBhcmFtc1szXTsKKworICBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIG5vbmNlLCBzaXplb2YgKG5vbmNlKSk7CisKKyAgLyogU2V0IENDTSBsZW5ndGhzICovCisgIHBhcmFtc1swXSA9IGJ1ZmxlbjsKKyAgcGFyYW1zWzFdID0gMDsJCS8qYWFkbGVuICovCisgIHBhcmFtc1syXSA9IHNpemVvZiAodGFnKTsKKyAgZXJyID0KKyAgICBnY3J5X2NpcGhlcl9jdGwgKGhkLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgcGFyYW1zLCBzaXplb2YgKHBhcmFtcykpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2N0bCBmYWlsZWQ6ICVzXG4iLAorCSAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9kZWNyeXB0IChoZCwgYnVmLCBidWZsZW4sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBnY3J5X2NpcGhlcl9lbmNyeXB0IGZhaWxlZDogJXNcbiIsCisJICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGVyciA9IGdjcnlfY2lwaGVyX2NoZWNrdGFnIChoZCwgdGFnLCBzaXplb2YgKHRhZykpOworICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfQ0hFQ0tTVU0pCisgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX05PX0VSUk9SKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBnY3J5X2NpcGhlcl9nZXR0YWcgZmFpbGVkOiAlc1xuIiwKKwkgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICBleGl0ICgxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9jY21fYXV0aGVudGljYXRlX2RvX2JlbmNoIChzdHJ1Y3QgYmVuY2hfb2JqICpvYmosIHZvaWQgKmJ1ZiwKKwkJCQkgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgZ2NyeV9jaXBoZXJfaGRfdCBoZCA9IG9iai0+cHJpdjsKKyAgaW50IGVycjsKKyAgY2hhciB0YWdbOF0gPSB7IDAsIH07CisgIGNoYXIgbm9uY2VbMTFdID0geyAweDgwLCAweDAxLCB9OworICB1NjQgcGFyYW1zWzNdOworICBjaGFyIGRhdGEgPSAweGZmOworCisgIGdjcnlfY2lwaGVyX3NldGl2IChoZCwgbm9uY2UsIHNpemVvZiAobm9uY2UpKTsKKworICAvKiBTZXQgQ0NNIGxlbmd0aHMgKi8KKyAgcGFyYW1zWzBdID0gc2l6ZW9mIChkYXRhKTsJLypkYXRhbGVuICovCisgIHBhcmFtc1sxXSA9IGJ1ZmxlbjsJCS8qYWFkbGVuICovCisgIHBhcmFtc1syXSA9IHNpemVvZiAodGFnKTsKKyAgZXJyID0KKyAgICBnY3J5X2NpcGhlcl9jdGwgKGhkLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgcGFyYW1zLCBzaXplb2YgKHBhcmFtcykpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2N0bCBmYWlsZWQ6ICVzXG4iLAorCSAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGhkLCBidWYsIGJ1Zmxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlIGZhaWxlZDogJXNcbiIsCisJICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkLCAmZGF0YSwgc2l6ZW9mIChkYXRhKSwgJmRhdGEsIHNpemVvZiAoZGF0YSkpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2VuY3J5cHQgZmFpbGVkOiAlc1xuIiwKKwkgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZ2V0dGFnIChoZCwgdGFnLCBzaXplb2YgKHRhZykpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2dldHRhZyBmYWlsZWQ6ICVzXG4iLAorCSAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KK30KKworc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgY2NtX2VuY3J5cHRfb3BzID0geworICAmYmVuY2hfZW5jcnlwdF9pbml0LAorICAmYmVuY2hfZW5jcnlwdF9mcmVlLAorICAmYmVuY2hfY2NtX2VuY3J5cHRfZG9fYmVuY2gKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIGNjbV9kZWNyeXB0X29wcyA9IHsKKyAgJmJlbmNoX2VuY3J5cHRfaW5pdCwKKyAgJmJlbmNoX2VuY3J5cHRfZnJlZSwKKyAgJmJlbmNoX2NjbV9kZWNyeXB0X2RvX2JlbmNoCit9OworCitzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBjY21fYXV0aGVudGljYXRlX29wcyA9IHsKKyAgJmJlbmNoX2VuY3J5cHRfaW5pdCwKKyAgJmJlbmNoX2VuY3J5cHRfZnJlZSwKKyAgJmJlbmNoX2NjbV9hdXRoZW50aWNhdGVfZG9fYmVuY2gKK307CisjZW5kaWYgLypIQVZFX1U2NF9UWVBFREVGKi8KKworCitzdGF0aWMgdm9pZAorYmVuY2hfZ2NtX2VuY3J5cHRfZG9fYmVuY2ggKHN0cnVjdCBiZW5jaF9vYmogKm9iaiwgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBnY3J5X2NpcGhlcl9oZF90IGhkID0gb2JqLT5wcml2OworICBpbnQgZXJyOworICBjaGFyIHRhZ1sxNl07CisgIGNoYXIgbm9uY2VbMTJdID0geyAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLAorICAgICAgICAgICAgICAgICAgICAgMHhkYiwgMHhhZCwgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCwgfTsKKworICBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIG5vbmNlLCBzaXplb2YgKG5vbmNlKSk7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGQsIGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9nZXR0YWcgKGhkLCB0YWcsIHNpemVvZiAodGFnKSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfZ2V0dGFnIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYmVuY2hfZ2NtX2RlY3J5cHRfZG9fYmVuY2ggKHN0cnVjdCBiZW5jaF9vYmogKm9iaiwgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBnY3J5X2NpcGhlcl9oZF90IGhkID0gb2JqLT5wcml2OworICBpbnQgZXJyOworICBjaGFyIHRhZ1sxNl0gPSB7IDAsIH07CisgIGNoYXIgbm9uY2VbMTJdID0geyAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLAorICAgICAgICAgICAgICAgICAgICAgMHhkYiwgMHhhZCwgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCwgfTsKKworICBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIG5vbmNlLCBzaXplb2YgKG5vbmNlKSk7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X2NpcGhlcl9jaGVja3RhZyAoaGQsIHRhZywgc2l6ZW9mICh0YWcpKTsKKyAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSA9PSBHUEdfRVJSX0NIRUNLU1VNKQorICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT19FUlJPUik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfZ2V0dGFnIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYmVuY2hfZ2NtX2F1dGhlbnRpY2F0ZV9kb19iZW5jaCAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWYsCisgICAgICAgICAgIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQgPSBvYmotPnByaXY7CisgIGludCBlcnI7CisgIGNoYXIgdGFnWzE2XSA9IHsgMCwgfTsKKyAgY2hhciBub25jZVsxMl0gPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsCisgICAgICAgICAgICAgICAgICAgICAweGRiLCAweGFkLCAweGRlLCAweGNhLCAweGY4LCAweDg4LCB9OworICBjaGFyIGRhdGEgPSAweGZmOworCisgIGdjcnlfY2lwaGVyX3NldGl2IChoZCwgbm9uY2UsIHNpemVvZiAobm9uY2UpKTsKKworICBlcnIgPSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUgKGhkLCBidWYsIGJ1Zmxlbik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkLCAmZGF0YSwgc2l6ZW9mIChkYXRhKSwgJmRhdGEsIHNpemVvZiAoZGF0YSkpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2VuY3J5cHQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfZ2V0dGFnIChoZCwgdGFnLCBzaXplb2YgKHRhZykpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGdjcnlfY2lwaGVyX2dldHRhZyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KK30KKworc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgZ2NtX2VuY3J5cHRfb3BzID0geworICAmYmVuY2hfZW5jcnlwdF9pbml0LAorICAmYmVuY2hfZW5jcnlwdF9mcmVlLAorICAmYmVuY2hfZ2NtX2VuY3J5cHRfZG9fYmVuY2gKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIGdjbV9kZWNyeXB0X29wcyA9IHsKKyAgJmJlbmNoX2VuY3J5cHRfaW5pdCwKKyAgJmJlbmNoX2VuY3J5cHRfZnJlZSwKKyAgJmJlbmNoX2djbV9kZWNyeXB0X2RvX2JlbmNoCit9OworCitzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBnY21fYXV0aGVudGljYXRlX29wcyA9IHsKKyAgJmJlbmNoX2VuY3J5cHRfaW5pdCwKKyAgJmJlbmNoX2VuY3J5cHRfZnJlZSwKKyAgJmJlbmNoX2djbV9hdXRoZW50aWNhdGVfZG9fYmVuY2gKK307CisKKworc3RhdGljIHN0cnVjdCBiZW5jaF9jaXBoZXJfbW9kZSBjaXBoZXJfbW9kZXNbXSA9IHsKKyAge0dDUllfQ0lQSEVSX01PREVfRUNCLCAiRUNCIGVuYyIsICZlbmNyeXB0X29wc30sCisgIHtHQ1JZX0NJUEhFUl9NT0RFX0VDQiwgIkVDQiBkZWMiLCAmZGVjcnlwdF9vcHN9LAorICB7R0NSWV9DSVBIRVJfTU9ERV9DQkMsICJDQkMgZW5jIiwgJmVuY3J5cHRfb3BzfSwKKyAge0dDUllfQ0lQSEVSX01PREVfQ0JDLCAiQ0JDIGRlYyIsICZkZWNyeXB0X29wc30sCisgIHtHQ1JZX0NJUEhFUl9NT0RFX0NGQiwgIkNGQiBlbmMiLCAmZW5jcnlwdF9vcHN9LAorICB7R0NSWV9DSVBIRVJfTU9ERV9DRkIsICJDRkIgZGVjIiwgJmRlY3J5cHRfb3BzfSwKKyAge0dDUllfQ0lQSEVSX01PREVfT0ZCLCAiT0ZCIGVuYyIsICZlbmNyeXB0X29wc30sCisgIHtHQ1JZX0NJUEhFUl9NT0RFX09GQiwgIk9GQiBkZWMiLCAmZGVjcnlwdF9vcHN9LAorICB7R0NSWV9DSVBIRVJfTU9ERV9DVFIsICJDVFIgZW5jIiwgJmVuY3J5cHRfb3BzfSwKKyAge0dDUllfQ0lQSEVSX01PREVfQ1RSLCAiQ1RSIGRlYyIsICZkZWNyeXB0X29wc30sCisjaWZkZWYgSEFWRV9VNjRfVFlQRURFRgorICB7R0NSWV9DSVBIRVJfTU9ERV9DQ00sICJDQ00gZW5jIiwgJmNjbV9lbmNyeXB0X29wc30sCisgIHtHQ1JZX0NJUEhFUl9NT0RFX0NDTSwgIkNDTSBkZWMiLCAmY2NtX2RlY3J5cHRfb3BzfSwKKyAge0dDUllfQ0lQSEVSX01PREVfQ0NNLCAiQ0NNIGF1dGgiLCAmY2NtX2F1dGhlbnRpY2F0ZV9vcHN9LAorI2VuZGlmCisgIHtHQ1JZX0NJUEhFUl9NT0RFX0dDTSwgIkdDTSBlbmMiLCAmZ2NtX2VuY3J5cHRfb3BzfSwKKyAge0dDUllfQ0lQSEVSX01PREVfR0NNLCAiR0NNIGRlYyIsICZnY21fZGVjcnlwdF9vcHN9LAorICB7R0NSWV9DSVBIRVJfTU9ERV9HQ00sICJHQ00gYXV0aCIsICZnY21fYXV0aGVudGljYXRlX29wc30sCisgIHswfSwKK307CisKKworc3RhdGljIHZvaWQKK2NpcGhlcl9iZW5jaF9vbmUgKGludCBhbGdvLCBzdHJ1Y3QgYmVuY2hfY2lwaGVyX21vZGUgKnBtb2RlKQoreworICBzdHJ1Y3QgYmVuY2hfY2lwaGVyX21vZGUgbW9kZSA9ICpwbW9kZTsKKyAgc3RydWN0IGJlbmNoX29iaiBvYmogPSB7IDAgfTsKKyAgZG91YmxlIHJlc3VsdDsKKyAgdW5zaWduZWQgaW50IGJsa2xlbjsKKworICBtb2RlLmFsZ28gPSBhbGdvOworCisgIC8qIENoZWNrIGlmIHRoaXMgbW9kZSBpcyBvayAqLworICBibGtsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGFsZ28pOworICBpZiAoIWJsa2xlbikKKyAgICByZXR1cm47CisKKyAgLyogU3RyZWFtIGNpcGhlcj8gT25seSB0ZXN0IHdpdGggRUNCLiAqLworICBpZiAoYmxrbGVuID09IDEgJiYgbW9kZS5tb2RlICE9IEdDUllfQ0lQSEVSX01PREVfRUNCKQorICAgIHJldHVybjsKKyAgaWYgKGJsa2xlbiA9PSAxICYmIG1vZGUubW9kZSA9PSBHQ1JZX0NJUEhFUl9NT0RFX0VDQikKKyAgICB7CisgICAgICBtb2RlLm1vZGUgPSBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTTsKKyAgICAgIG1vZGUubmFtZSA9IG1vZGUub3BzID09ICZlbmNyeXB0X29wcyA/ICJTVFJFQU0gZW5jIiA6ICJTVFJFQU0gZGVjIjsKKyAgICB9CisKKyAgLyogQ0NNIGhhcyByZXN0cmljdGlvbnMgZm9yIGJsb2NrLXNpemUgKi8KKyAgaWYgKG1vZGUubW9kZSA9PSBHQ1JZX0NJUEhFUl9NT0RFX0NDTSAmJiBibGtsZW4gIT0gR0NSWV9DQ01fQkxPQ0tfTEVOKQorICAgIHJldHVybjsKKworICAvKiBDQ00gaGFzIHJlc3RyaWN0aW9ucyBmb3IgYmxvY2stc2l6ZSAqLworICBpZiAobW9kZS5tb2RlID09IEdDUllfQ0lQSEVSX01PREVfR0NNICYmIGJsa2xlbiAhPSBHQ1JZX0dDTV9CTE9DS19MRU4pCisgICAgcmV0dXJuOworCisgIGJlbmNoX3ByaW50X21vZGUgKDE0LCBtb2RlLm5hbWUpOworCisgIG9iai5vcHMgPSBtb2RlLm9wczsKKyAgb2JqLnByaXYgPSAmbW9kZTsKKworICByZXN1bHQgPSBkb19zbG9wZV9iZW5jaG1hcmsgKCZvYmopOworCisgIGJlbmNoX3ByaW50X3Jlc3VsdCAocmVzdWx0KTsKK30KKworCitzdGF0aWMgdm9pZAorX2NpcGhlcl9iZW5jaCAoaW50IGFsZ28pCit7CisgIGNvbnN0IGNoYXIgKmFsZ29uYW1lOworICBpbnQgaTsKKworICBhbGdvbmFtZSA9IGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAoYWxnbyk7CisKKyAgYmVuY2hfcHJpbnRfaGVhZGVyICgxNCwgYWxnb25hbWUpOworCisgIGZvciAoaSA9IDA7IGNpcGhlcl9tb2Rlc1tpXS5tb2RlOyBpKyspCisgICAgY2lwaGVyX2JlbmNoX29uZSAoYWxnbywgJmNpcGhlcl9tb2Rlc1tpXSk7CisKKyAgYmVuY2hfcHJpbnRfZm9vdGVyICgxNCk7Cit9CisKKwordm9pZAorY2lwaGVyX2JlbmNoIChjaGFyICoqYXJndiwgaW50IGFyZ2MpCit7CisgIGludCBpLCBhbGdvOworCisgIGJlbmNoX3ByaW50X3NlY3Rpb24gKCJjaXBoZXIiLCAiQ2lwaGVyIik7CisKKyAgaWYgKGFyZ3YgJiYgYXJnYykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkgIGFsZ28gPSBnY3J5X2NpcGhlcl9tYXBfbmFtZSAoYXJndltpXSk7CisJICBpZiAoYWxnbykKKwkgICAgX2NpcGhlcl9iZW5jaCAoYWxnbyk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaSA9IDE7IGkgPCA0MDA7IGkrKykKKwlpZiAoIWdjcnlfY2lwaGVyX3Rlc3RfYWxnbyAoaSkpCisJICBfY2lwaGVyX2JlbmNoIChpKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhhc2ggYmVuY2htYXJrcy4gKi8KKworc3RydWN0IGJlbmNoX2hhc2hfbW9kZQoreworICBjb25zdCBjaGFyICpuYW1lOworICBzdHJ1Y3QgYmVuY2hfb3BzICpvcHM7CisKKyAgaW50IGFsZ287Cit9OworCisKK3N0YXRpYyBpbnQKK2JlbmNoX2hhc2hfaW5pdCAoc3RydWN0IGJlbmNoX29iaiAqb2JqKQoreworICBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlICptb2RlID0gb2JqLT5wcml2OworICBnY3J5X21kX2hkX3QgaGQ7CisgIGludCBlcnI7CisKKyAgb2JqLT5taW5fYnVmc2l6ZSA9IEJVRl9TVEFSVF9TSVpFOworICBvYmotPm1heF9idWZzaXplID0gQlVGX0VORF9TSVpFOworICBvYmotPnN0ZXBfc2l6ZSA9IEJVRl9TVEVQX1NJWkU7CisgIG9iai0+bnVtX21lYXN1cmVfcmVwZXRpdGlvbnMgPSBudW1fbWVhc3VyZW1lbnRfcmVwZXRpdGlvbnM7CisKKyAgZXJyID0gZ2NyeV9tZF9vcGVuICgmaGQsIG1vZGUtPmFsZ28sIDApOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGVycm9yIG9wZW5pbmcgaGFzaCBgJXMnXG4iLAorCSAgICAgICBnY3J5X21kX2FsZ29fbmFtZSAobW9kZS0+YWxnbykpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIG9iai0+cHJpdiA9IGhkOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYmVuY2hfaGFzaF9mcmVlIChzdHJ1Y3QgYmVuY2hfb2JqICpvYmopCit7CisgIGdjcnlfbWRfaGRfdCBoZCA9IG9iai0+cHJpdjsKKworICBnY3J5X21kX2Nsb3NlIChoZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZW5jaF9oYXNoX2RvX2JlbmNoIChzdHJ1Y3QgYmVuY2hfb2JqICpvYmosIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgZ2NyeV9tZF9oZF90IGhkID0gb2JqLT5wcml2OworCisgIGdjcnlfbWRfcmVzZXQgKGhkKTsKKyAgZ2NyeV9tZF93cml0ZSAoaGQsIGJ1ZiwgYnVmbGVuKTsKKyAgZ2NyeV9tZF9maW5hbCAoaGQpOworfQorCitzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBoYXNoX29wcyA9IHsKKyAgJmJlbmNoX2hhc2hfaW5pdCwKKyAgJmJlbmNoX2hhc2hfZnJlZSwKKyAgJmJlbmNoX2hhc2hfZG9fYmVuY2gKK307CisKKworc3RhdGljIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgaGFzaF9tb2Rlc1tdID0geworICB7IiIsICZoYXNoX29wc30sCisgIHswfSwKK307CisKKworc3RhdGljIHZvaWQKK2hhc2hfYmVuY2hfb25lIChpbnQgYWxnbywgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSAqcG1vZGUpCit7CisgIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgbW9kZSA9ICpwbW9kZTsKKyAgc3RydWN0IGJlbmNoX29iaiBvYmogPSB7IDAgfTsKKyAgZG91YmxlIHJlc3VsdDsKKworICBtb2RlLmFsZ28gPSBhbGdvOworCisgIGlmIChtb2RlLm5hbWVbMF0gPT0gJ1wwJykKKyAgICBiZW5jaF9wcmludF9hbGdvICgtMTQsIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSk7CisgIGVsc2UKKyAgICBiZW5jaF9wcmludF9hbGdvICgxNCwgbW9kZS5uYW1lKTsKKworICBvYmoub3BzID0gbW9kZS5vcHM7CisgIG9iai5wcml2ID0gJm1vZGU7CisKKyAgcmVzdWx0ID0gZG9fc2xvcGVfYmVuY2htYXJrICgmb2JqKTsKKworICBiZW5jaF9wcmludF9yZXN1bHQgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfaGFzaF9iZW5jaCAoaW50IGFsZ28pCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGhhc2hfbW9kZXNbaV0ubmFtZTsgaSsrKQorICAgIGhhc2hfYmVuY2hfb25lIChhbGdvLCAmaGFzaF9tb2Rlc1tpXSk7Cit9CisKK3ZvaWQKK2hhc2hfYmVuY2ggKGNoYXIgKiphcmd2LCBpbnQgYXJnYykKK3sKKyAgaW50IGksIGFsZ287CisKKyAgYmVuY2hfcHJpbnRfc2VjdGlvbiAoImhhc2giLCAiSGFzaCIpOworICBiZW5jaF9wcmludF9oZWFkZXIgKDE0LCAiIik7CisKKyAgaWYgKGFyZ3YgJiYgYXJnYykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCXsKKwkgIGFsZ28gPSBnY3J5X21kX21hcF9uYW1lIChhcmd2W2ldKTsKKwkgIGlmIChhbGdvKQorCSAgICBfaGFzaF9iZW5jaCAoYWxnbyk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaSA9IDE7IGkgPCA0MDA7IGkrKykKKwlpZiAoIWdjcnlfbWRfdGVzdF9hbGdvIChpKSkKKwkgIF9oYXNoX2JlbmNoIChpKTsKKyAgICB9CisKKyAgYmVuY2hfcHJpbnRfZm9vdGVyICgxNCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNQUMgYmVuY2htYXJrcy4gKi8KKworc3RydWN0IGJlbmNoX21hY19tb2RlCit7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHN0cnVjdCBiZW5jaF9vcHMgKm9wczsKKworICBpbnQgYWxnbzsKK307CisKKworc3RhdGljIGludAorYmVuY2hfbWFjX2luaXQgKHN0cnVjdCBiZW5jaF9vYmogKm9iaikKK3sKKyAgc3RydWN0IGJlbmNoX21hY19tb2RlICptb2RlID0gb2JqLT5wcml2OworICBnY3J5X21hY19oZF90IGhkOworICBpbnQgZXJyOworICB1bnNpZ25lZCBpbnQga2V5bGVuOworICB2b2lkICprZXk7CisKKyAgb2JqLT5taW5fYnVmc2l6ZSA9IEJVRl9TVEFSVF9TSVpFOworICBvYmotPm1heF9idWZzaXplID0gQlVGX0VORF9TSVpFOworICBvYmotPnN0ZXBfc2l6ZSA9IEJVRl9TVEVQX1NJWkU7CisgIG9iai0+bnVtX21lYXN1cmVfcmVwZXRpdGlvbnMgPSBudW1fbWVhc3VyZW1lbnRfcmVwZXRpdGlvbnM7CisKKyAga2V5bGVuID0gZ2NyeV9tYWNfZ2V0X2FsZ29fa2V5bGVuIChtb2RlLT5hbGdvKTsKKyAgaWYgKGtleWxlbiA9PSAwKQorICAgIGtleWxlbiA9IDMyOworICBrZXkgPSBtYWxsb2MgKGtleWxlbik7CisgIGlmICgha2V5KQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGNvdWxkbid0IGFsbG9jYXRlICVkIGJ5dGVzXG4iLCBrZXlsZW4pOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBtZW1zZXQoa2V5LCA0Miwga2V5bGVuKTsKKworICBlcnIgPSBnY3J5X21hY19vcGVuICgmaGQsIG1vZGUtPmFsZ28sIDAsIE5VTEwpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGVycm9yIG9wZW5pbmcgbWFjIGAlcydcbiIsCisJICAgICAgIGdjcnlfbWFjX2FsZ29fbmFtZSAobW9kZS0+YWxnbykpOworICAgICAgZnJlZSAoa2V5KTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBlcnIgPSBnY3J5X21hY19zZXRrZXkgKGhkLCBrZXksIGtleWxlbik7CisgIGZyZWUgKGtleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZXJyb3Igc2V0dGluZyBrZXkgZm9yIG1hYyBgJXMnXG4iLAorCSAgICAgICBnY3J5X21hY19hbGdvX25hbWUgKG1vZGUtPmFsZ28pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBvYmotPnByaXYgPSBoZDsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JlbmNoX21hY19mcmVlIChzdHJ1Y3QgYmVuY2hfb2JqICpvYmopCit7CisgIGdjcnlfbWFjX2hkX3QgaGQgPSBvYmotPnByaXY7CisKKyAgZ2NyeV9tYWNfY2xvc2UgKGhkKTsKK30KKworc3RhdGljIHZvaWQKK2JlbmNoX21hY19kb19iZW5jaCAoc3RydWN0IGJlbmNoX29iaiAqb2JqLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGdjcnlfbWFjX2hkX3QgaGQgPSBvYmotPnByaXY7CisgIHNpemVfdCBiczsKKyAgY2hhciBiOworCisgIGdjcnlfbWFjX3Jlc2V0IChoZCk7CisgIGdjcnlfbWFjX3dyaXRlIChoZCwgYnVmLCBidWZsZW4pOworICBicyA9IHNpemVvZihiKTsKKyAgZ2NyeV9tYWNfcmVhZCAoaGQsICZiLCAmYnMpOworfQorCitzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBtYWNfb3BzID0geworICAmYmVuY2hfbWFjX2luaXQsCisgICZiZW5jaF9tYWNfZnJlZSwKKyAgJmJlbmNoX21hY19kb19iZW5jaAorfTsKKworCitzdGF0aWMgc3RydWN0IGJlbmNoX21hY19tb2RlIG1hY19tb2Rlc1tdID0geworICB7IiIsICZtYWNfb3BzfSwKKyAgezB9LAorfTsKKworCitzdGF0aWMgdm9pZAorbWFjX2JlbmNoX29uZSAoaW50IGFsZ28sIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSAqcG1vZGUpCit7CisgIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtb2RlID0gKnBtb2RlOworICBzdHJ1Y3QgYmVuY2hfb2JqIG9iaiA9IHsgMCB9OworICBkb3VibGUgcmVzdWx0OworCisgIG1vZGUuYWxnbyA9IGFsZ287CisKKyAgaWYgKG1vZGUubmFtZVswXSA9PSAnXDAnKQorICAgIGJlbmNoX3ByaW50X2FsZ28gKC0xOCwgZ2NyeV9tYWNfYWxnb19uYW1lIChhbGdvKSk7CisgIGVsc2UKKyAgICBiZW5jaF9wcmludF9hbGdvICgxOCwgbW9kZS5uYW1lKTsKKworICBvYmoub3BzID0gbW9kZS5vcHM7CisgIG9iai5wcml2ID0gJm1vZGU7CisKKyAgcmVzdWx0ID0gZG9fc2xvcGVfYmVuY2htYXJrICgmb2JqKTsKKworICBiZW5jaF9wcmludF9yZXN1bHQgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfbWFjX2JlbmNoIChpbnQgYWxnbykKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgbWFjX21vZGVzW2ldLm5hbWU7IGkrKykKKyAgICBtYWNfYmVuY2hfb25lIChhbGdvLCAmbWFjX21vZGVzW2ldKTsKK30KKwordm9pZAorbWFjX2JlbmNoIChjaGFyICoqYXJndiwgaW50IGFyZ2MpCit7CisgIGludCBpLCBhbGdvOworCisgIGJlbmNoX3ByaW50X3NlY3Rpb24gKCJtYWMiLCAiTUFDIik7CisgIGJlbmNoX3ByaW50X2hlYWRlciAoMTgsICIiKTsKKworICBpZiAoYXJndiAmJiBhcmdjKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJeworCSAgYWxnbyA9IGdjcnlfbWFjX21hcF9uYW1lIChhcmd2W2ldKTsKKwkgIGlmIChhbGdvKQorCSAgICBfbWFjX2JlbmNoIChhbGdvKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChpID0gMTsgaSA8IDUwMDsgaSsrKQorCWlmICghZ2NyeV9tYWNfdGVzdF9hbGdvIChpKSkKKwkgIF9tYWNfYmVuY2ggKGkpOworICAgIH0KKworICBiZW5jaF9wcmludF9mb290ZXIgKDE4KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTWFpbiBwcm9ncmFtLiAqLworCit2b2lkCitwcmludF9oZWxwICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgY2hhciAqaGVscF9saW5lc1tdID0geworICAgICJ1c2FnZTogYmVuY2gtc2xvcGUgW29wdGlvbnNdIFtoYXNofG1hY3xjaXBoZXIgW2FsZ29uYW1lc11dIiwKKyAgICAiIiwKKyAgICAiIG9wdGlvbnM6IiwKKyAgICAiICAgLS1jcHUtbWh6IDxtaHo+ICAgICAgICAgICBTZXQgQ1BVIHNwZWVkIGZvciBjYWxjdWxhdGluZyBjeWNsZXMiLAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBieXRlcyByZXN1bHRzLiIsCisgICAgIiAgIC0tZGlzYWJsZS1od2YgPGZlYXR1cmVzPiAgRGlzYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZmVhdHVyZShzKSIsCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJlbmNobWFya2luZy4iLAorICAgICIgICAtLXJlcGV0aXRpb25zIDxuPiAgICAgICAgIFVzZSBOIHJlcGV0aXRpb25zIChkZWZhdWx0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFIyKE5VTV9NRUFTVVJFTUVOVF9SRVBFVElUSU9OUykgIikiLAorICAgICIgICAtLWNzdiAgICAgICAgICAgICAgICAgICAgIFVzZSBDU1Ygb3V0cHV0IGZvcm1hdCIsCisgICAgTlVMTAorICB9OworICBjb25zdCBjaGFyICoqbGluZTsKKworICBmb3IgKGxpbmUgPSBoZWxwX2xpbmVzOyAqbGluZTsgbGluZSsrKQorICAgIGZwcmludGYgKHN0ZG91dCwgIiVzXG4iLCAqbGluZSk7Cit9CisKKworLyogV2FybSB1cCBDUFUuICAqLworc3RhdGljIHZvaWQKK3dhcm1fdXBfY3B1ICh2b2lkKQoreworICBzdHJ1Y3QgbnNlY190aW1lIHN0YXJ0LCBlbmQ7CisKKyAgZ2V0X25zZWNfdGltZSAoJnN0YXJ0KTsKKyAgZG8KKyAgICB7CisgICAgICBnZXRfbnNlY190aW1lICgmZW5kKTsKKyAgICB9CisgIHdoaWxlIChnZXRfdGltZV9uc2VjX2RpZmYgKCZzdGFydCwgJmVuZCkgPCAxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGludCBkZWJ1ZyA9IDA7CisKKyAgaWYgKGFyZ2MpCisgICAgeworICAgICAgYXJnYy0tOworICAgICAgYXJndisrOworICAgIH0KKworICAvKiBXZSBza2lwIHRoaXMgdGVzdCBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgdGVzdCBzdWl0ZSAobm8gYXJncworICAgICBhbmQgc3JjZGlyIGRlZmluZWQpIGFuZCBHQ1JZUFRfTk9fQkVOQ0hNQVJLUyBpcyBzZXQuICAqLworICBpZiAoIWFyZ2MgJiYgZ2V0ZW52ICgic3JjZGlyIikgJiYgZ2V0ZW52ICgiR0NSWVBUX05PX0JFTkNITUFSS1MiKSkKKyAgICBleGl0ICg3Nyk7CisKKyAgaWYgKGdldGVudiAoIkdDUllQVF9JTl9SRUdSRVNTSU9OX1RFU1QiKSkKKyAgICB7CisgICAgICBpbl9yZWdyZXNzaW9uX3Rlc3QgPSAxOworICAgICAgbnVtX21lYXN1cmVtZW50X3JlcGV0aXRpb25zID0gMjsKKyAgICB9CisgIGVsc2UKKyAgICBudW1fbWVhc3VyZW1lbnRfcmVwZXRpdGlvbnMgPSBOVU1fTUVBU1VSRU1FTlRfUkVQRVRJVElPTlM7CisKKyAgd2hpbGUgKGFyZ2MgJiYgbGFzdF9hcmdjICE9IGFyZ2MpCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKwl7CisJICBhcmdjLS07CisJICBhcmd2Kys7CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorCXsKKwkgIHByaW50X2hlbHAgKCk7CisJICBleGl0ICgwKTsKKwl9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorCXsKKwkgIHZlcmJvc2UrKzsKKwkgIGFyZ2MtLTsKKwkgIGFyZ3YrKzsKKwl9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVidWciKSkKKwl7CisJICB2ZXJib3NlICs9IDI7CisJICBkZWJ1ZysrOworCSAgYXJnYy0tOworCSAgYXJndisrOworCX0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1jc3YiKSkKKwl7CisJICBjc3ZfbW9kZSA9IDE7CisJICBhcmdjLS07CisJICBhcmd2Kys7CisJfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWRpc2FibGUtaHdmIikpCisJeworCSAgYXJnYy0tOworCSAgYXJndisrOworCSAgaWYgKGFyZ2MpCisJICAgIHsKKwkgICAgICBpZiAoZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfSFdGLCAqYXJndiwgTlVMTCkpCisJCWZwcmludGYgKHN0ZGVyciwKKwkJCSBQR00KKwkJCSAiOiB1bmtub3duIGhhcmR3YXJlIGZlYXR1cmUgYCVzJyAtIG9wdGlvbiBpZ25vcmVkXG4iLAorCQkJICphcmd2KTsKKwkgICAgICBhcmdjLS07CisJICAgICAgYXJndisrOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWNwdS1taHoiKSkKKwl7CisJICBhcmdjLS07CisJICBhcmd2Kys7CisJICBpZiAoYXJnYykKKwkgICAgeworCSAgICAgIGNwdV9naHogPSBhdG9mICgqYXJndik7CisJICAgICAgY3B1X2doeiAvPSAxMDAwOwkvKiBNaHogPT4gR2h6ICovCisKKwkgICAgICBhcmdjLS07CisJICAgICAgYXJndisrOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXJlcGV0aXRpb25zIikpCisJeworCSAgYXJnYy0tOworCSAgYXJndisrOworCSAgaWYgKGFyZ2MpCisJICAgIHsKKwkgICAgICBudW1fbWVhc3VyZW1lbnRfcmVwZXRpdGlvbnMgPSBhdG9mICgqYXJndik7CisgICAgICAgICAgICAgIGlmIChudW1fbWVhc3VyZW1lbnRfcmVwZXRpdGlvbnMgPCAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHTQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogdmFsdWUgZm9yIC0tcmVwZXRpdGlvbnMgdG9vIHNtYWxsIC0gdXNpbmcgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVU1fTUVBU1VSRU1FTlRfUkVQRVRJVElPTlMpOworICAgICAgICAgICAgICAgICAgbnVtX21lYXN1cmVtZW50X3JlcGV0aXRpb25zID0gTlVNX01FQVNVUkVNRU5UX1JFUEVUSVRJT05TOworICAgICAgICAgICAgICAgIH0KKwkgICAgICBhcmdjLS07CisJICAgICAgYXJndisrOworCSAgICB9CisJfQorICAgIH0KKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1ZFUkJPU0lUWSwgKGludCkgdmVyYm9zZSk7CisKKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiB2ZXJzaW9uIG1pc21hdGNoOyBwZ209JXMsIGxpYnJhcnk9JXNcbiIsCisJICAgICAgIEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKworICBpZiAoaW5fcmVncmVzc2lvbl90ZXN0KQorICAgIGZwdXRzICgiTm90ZTogIiBQR00gIiBydW5uaW5nIGluIHF1aWNrIHJlZ3Jlc3Npb24gdGVzdCBtb2RlLlxuIiwgc3Rkb3V0KTsKKworICBpZiAoIWFyZ2MpCisgICAgeworICAgICAgd2FybV91cF9jcHUgKCk7CisgICAgICBoYXNoX2JlbmNoIChOVUxMLCAwKTsKKyAgICAgIG1hY19iZW5jaCAoTlVMTCwgMCk7CisgICAgICBjaXBoZXJfYmVuY2ggKE5VTEwsIDApOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJoYXNoIikpCisgICAgeworICAgICAgYXJnYy0tOworICAgICAgYXJndisrOworCisgICAgICB3YXJtX3VwX2NwdSAoKTsKKyAgICAgIGhhc2hfYmVuY2ggKChhcmdjID09IDApID8gTlVMTCA6IGFyZ3YsIGFyZ2MpOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJtYWMiKSkKKyAgICB7CisgICAgICBhcmdjLS07CisgICAgICBhcmd2Kys7CisKKyAgICAgIHdhcm1fdXBfY3B1ICgpOworICAgICAgbWFjX2JlbmNoICgoYXJnYyA9PSAwKSA/IE5VTEwgOiBhcmd2LCBhcmdjKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiY2lwaGVyIikpCisgICAgeworICAgICAgYXJnYy0tOworICAgICAgYXJndisrOworCisgICAgICB3YXJtX3VwX2NwdSAoKTsKKyAgICAgIGNpcGhlcl9iZW5jaCAoKGFyZ2MgPT0gMCkgPyBOVUxMIDogYXJndiwgYXJnYyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogdW5rbm93biBhcmd1bWVudDogJXNcbiIsICphcmd2KTsKKyAgICAgIHByaW50X2hlbHAgKCk7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogIU5PX0dFVF9OU0VDX1RJTUUgKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFyay5jIGIvdGVzdHMvYmVuY2htYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmYzA4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JlbmNobWFyay5jCkBAIC0wLDAgKzEsMTU3NiBAQAorLyogYmVuY2htYXJrLmMgLSBmb3IgbGliZ2NyeXB0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgZ2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyMgaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKyMgaW5jbHVkZSAiLi4vY29tcGF0L2xpYmNvbXBhdC5oIgorI2Vsc2UKKyMgaW5jbHVkZSA8Z2NyeXB0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInN0b3B3YXRjaC5oIgorCisKKyNkZWZpbmUgUEdNICJiZW5jaG1hcmsiCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworLyogRG8gZW5jcnlwdGlvbiB0ZXN0cyB3aXRoIGxhcmdlIGJ1ZmZlcnMuICAqLworc3RhdGljIGludCBsYXJnZV9idWZmZXJzOworCisvKiBOdW1iZXIgb2YgY2lwaGVyIHJlcGV0aXRpb25zLiAgKi8KK3N0YXRpYyBpbnQgY2lwaGVyX3JlcGV0aXRpb25zOworCisvKiBOdW1iZXIgb2YgaGFzaCByZXBldGl0aW9ucy4gICovCitzdGF0aWMgaW50IGhhc2hfcmVwZXRpdGlvbnM7CisKKy8qIE51bWJlciBvZiBoYXNoIHJlcGV0aXRpb25zLiAgKi8KK3N0YXRpYyBpbnQgbWFjX3JlcGV0aXRpb25zOworCisvKiBBbGlnbm1lbnQgb2YgdGhlIGJ1ZmZlcnMuICAqLworc3RhdGljIGludCBidWZmZXJfYWxpZ25tZW50OworCisvKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGtleXNldHVwIGluIHRoZSBjaXBoZXIgdGltaW5ncy4gICovCitzdGF0aWMgaW50IGNpcGhlcl93aXRoX2tleXNldHVwOworCisvKiBXaGV0aGVyIGZpcHMgbW9kZSB3YXMgYWN0aXZlIGF0IHN0YXJ0dXAuICAqLworc3RhdGljIGludCBpbl9maXBzX21vZGU7CisKKy8qIFdoZXRoZXIgd2UgYXJlIHJ1bm5pbmcgYXMgcGFydCBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLiAgKi8KK3N0YXRpYyBpbnQgaW5fcmVncmVzc2lvbl90ZXN0OworCisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wcml2YXRlX2RzYV9rZXlfMTAyNFtdID0KKyIocHJpdmF0ZS1rZXlcbiIKKyIgIChkc2FcbiIKKyIgICAocCAjMDBBMTI2MjAyRDU5MjIxNEM1QThGNjAxNkUyQzNGNDI1NjA1MkFDQjFDQjE3RDg4RTY0QjEyOTNGQUYwOEY1RTQ2ODUiCisgICAgICAgIjAzRTZGNjgzNjZCMzI2QTU2Mjg0MzcwRUIyMTAzRTkyRDgzNDZBMTYzRTQ0QTA4RkRDNDIyQUM4RTlFNDQyNjg1NTdBIgorICAgICAgICI4NTM1MzlBNkFGMzkzNTNBNTlDRTVFNzhGRDk4QjU3RDBGM0UzQTdFQkM4QTI1NkFDOUE3NzVCQTU5Njg5RjMwMDRCRiIKKyAgICAgICAiQzMwMzU3MzBDNEMwQzUxNjI2QzVEN0Y1ODUyNjM3RUM1ODlCQjI5REFCNDZDMTYxNTcyRTRCIylcbiIKKyIgICAocSAjMDBERUI1QTI5NjQyMTg4NzE3OUVDQTE3NjI4ODRERTJBRjgxODVBRkM1IylcbiIKKyIgICAoZyAjMzk1OEIzNEFFNzc0NzE5NEVDQkQzMTJGOEZFRThDQkUzOTE4RTk0REY5RkQxMUUyOTEyRTU2MzE4RjMzQkRDMzg2MjIiCisgICAgICAgIkIxOERERkYzOTMwNzRCQ0E4QkFBQ0Y1MERGMjdBRUU1MjlGM0U4QUVFQ0U1NUMzOThEQUIzQTVFMDRDMkVBMTQyMzEyIgorICAgICAgICJGQUNBMkZFN0YwQTg4ODg0RjhEQUMzOTc5RUU2NzU5OEY5QTM4M0IyQTIzMjVGMDM1Qzc5NkYzNTJBNUMzQ0RGMkNCMyIKKyAgICAgICAiODVBRDI0RUM1MkE2RTU1MjQ3RTFCQjM3RDI2MEY3OUU2MTdEMkE0NDQ2NDE1QjZBRDc5QSMpXG4iCisiICAgKHkgIzUxOUU5RkU5QUIwNTQ1QTY3MjRFNzQ2MDNCN0IwNEU0OERDMTQzN0UwMjg0QTExRUE2MDVBN0JBOEFCMUNGMzU0RkQ0IgorICAgICAgICJFQ0M5Mzg4MEFDMjkzMzkxQzY5QjU1OEFEODRFN0FBRkE4OEYxMUQwMjhDRjNBMzc4RjI0MUQ2QjA1NkE5MEM1ODhGNiIKKyAgICAgICAiNjZGNjhEMjcyNjJCNERBODQ2NTdEMTUwNTdEMzcxQkNFQzFGNjUwNDAzMjUwN0Q1Qjg4MUU0NUZDOTNBMUI5NzMxNTUiCisgICAgICAgIkQ5MUM1NzIxOUQwOTBDM0FDRDc1RTdDMkI5RjExNzZBMjA4QUMwM0Q2QzEyQUMyOEEyNzEjKVxuIgorIiAgICh4ICM0MTg2RjhBNThDNURGNDZDNUJDRkM3MDA2QkVFQkYwNUU5M0MwQ0E3IylcbiIKKyIpKVxuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX3B1YmxpY19kc2Ffa2V5XzEwMjRbXSA9CisiKHB1YmxpYy1rZXlcbiIKKyIgIChkc2FcbiIKKyIgICAocCAjMDBBMTI2MjAyRDU5MjIxNEM1QThGNjAxNkUyQzNGNDI1NjA1MkFDQjFDQjE3RDg4RTY0QjEyOTNGQUYwOEY1RTQ2ODUiCisgICAgICAgIjAzRTZGNjgzNjZCMzI2QTU2Mjg0MzcwRUIyMTAzRTkyRDgzNDZBMTYzRTQ0QTA4RkRDNDIyQUM4RTlFNDQyNjg1NTdBIgorICAgICAgICI4NTM1MzlBNkFGMzkzNTNBNTlDRTVFNzhGRDk4QjU3RDBGM0UzQTdFQkM4QTI1NkFDOUE3NzVCQTU5Njg5RjMwMDRCRiIKKyAgICAgICAiQzMwMzU3MzBDNEMwQzUxNjI2QzVEN0Y1ODUyNjM3RUM1ODlCQjI5REFCNDZDMTYxNTcyRTRCIylcbiIKKyIgICAocSAjMDBERUI1QTI5NjQyMTg4NzE3OUVDQTE3NjI4ODRERTJBRjgxODVBRkM1IylcbiIKKyIgICAoZyAjMzk1OEIzNEFFNzc0NzE5NEVDQkQzMTJGOEZFRThDQkUzOTE4RTk0REY5RkQxMUUyOTEyRTU2MzE4RjMzQkRDMzg2MjIiCisgICAgICAgIkIxOERERkYzOTMwNzRCQ0E4QkFBQ0Y1MERGMjdBRUU1MjlGM0U4QUVFQ0U1NUMzOThEQUIzQTVFMDRDMkVBMTQyMzEyIgorICAgICAgICJGQUNBMkZFN0YwQTg4ODg0RjhEQUMzOTc5RUU2NzU5OEY5QTM4M0IyQTIzMjVGMDM1Qzc5NkYzNTJBNUMzQ0RGMkNCMyIKKyAgICAgICAiODVBRDI0RUM1MkE2RTU1MjQ3RTFCQjM3RDI2MEY3OUU2MTdEMkE0NDQ2NDE1QjZBRDc5QSMpXG4iCisiICAgKHkgIzUxOUU5RkU5QUIwNTQ1QTY3MjRFNzQ2MDNCN0IwNEU0OERDMTQzN0UwMjg0QTExRUE2MDVBN0JBOEFCMUNGMzU0RkQ0IgorICAgICAgICJFQ0M5Mzg4MEFDMjkzMzkxQzY5QjU1OEFEODRFN0FBRkE4OEYxMUQwMjhDRjNBMzc4RjI0MUQ2QjA1NkE5MEM1ODhGNiIKKyAgICAgICAiNjZGNjhEMjcyNjJCNERBODQ2NTdEMTUwNTdEMzcxQkNFQzFGNjUwNDAzMjUwN0Q1Qjg4MUU0NUZDOTNBMUI5NzMxNTUiCisgICAgICAgIkQ5MUM1NzIxOUQwOTBDM0FDRDc1RTdDMkI5RjExNzZBMjA4QUMwM0Q2QzEyQUMyOEEyNzEjKVxuIgorIikpXG4iOworCisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wcml2YXRlX2RzYV9rZXlfMjA0OFtdID0KKyIocHJpdmF0ZS1rZXlcbiIKKyIgIChkc2FcbiIKKyIgICAocCAjMDBCNTQ2MzY2NzM5NjJCNjRGN0RDMjNDNzFBQ0VGNkU3MzMxNzk2RjYwNzU2MEIxOTRERkNDMENBMzcwRTg1OEEzNjUiCisgICAgICAgIkE0MTMxNTJGQjZFQjhDNjY0QkQxNzFBQzMxNkZFNUIzODFDRDA4NEQwNzM3NzU3MTU5OTg4MEEwNjhFRjEzODJEODVDIgorICAgICAgICIzMDhCNEU5REVBQzEyRDY2REU1QzRBODI2RUJFQjVFRDk0QTYyRTczMDFFMTg5MjdFODkwNTg5QTJGMjMwMjcyQTE1MCIKKyAgICAgICAiQzExOEJDM0RDMjk2NUFFMEQwNUJFNEY2NUM2MTM3QjJCQTdFREFCQjE5MkMzMDcwRDIwMkMxMEFBM0Y1MzQ1NzQ5NzAiCisgICAgICAgIjcxNDU0REI4QTczRERCNjUxMUE1QkE5OEVGMTQ1MEZEOTBERTVCQUFGQzlGRDNBQzIyRUJFQTYxMkREMDc1QkI3NDA1IgorICAgICAgICJENTY4NjZEMTI1RTMzOTgyQzA0NjgwOEY3Q0VCQThFNUMwQjlGMTlBNkZFNDUxNDYxNjYwQTFDQkE5RUY2ODg5MTE3OSIKKyAgICAgICAiMDI1NkE1NzNEM0I4RjM1QTVDN0EwQzZDMzFGMkRCOTBFMjVBMjY4NDUyNTJBRDlFNDg1RUYyRDMzOUU3QjU4OTBDRDQiCisgICAgICAgIjJGOUM5RjMxNUVENDA5MTcxRUMzNUNBMDRDQzA2QjI3NTU3N0IzIylcbiIKKyIgICAocSAjMDBEQTY3OTg5MTY3RkRBQzRBRTNERjkyNDdBNzE2ODU5QTMwQzBDRjlDNUE2REJBMDFFQUJBMzQ4MSMpXG4iCisiICAgKGcgIzQ4RTM1REE1ODRBMDg5RDA1MTQyQUE2MzYwM0ZEQjAwRDEzMUIwN0EwNzgxRTJENUE4Rjk2MTREMkIzM0QzRTQwQTc4IgorICAgICAgICI5OEE5RTEwQ0RCQjYxMkNGMDkzRjk1QTNFMTBEMDk1NjY3MjZGMkMxMjgyMzgzNkIyRDlDRDk3NEJCNjk1NjY1RjNCMyIKKyAgICAgICAiNUQyMTlBOTcyNEI4N0YzODBCRDUyMDdFREEwQUUzOEM3OUU4RjE4MTIyQzNGNzZFNENFQjBBQkVEMzI1MDkxNDk4N0YiCisgICAgICAgIkIzMEQ0QjlFMTlDMDRDMjhBNUQ0RjQ1NTYwQUY1ODZGNkExQjQxNzUxRUFEOTBBRTdGMDQ0RjRFMkE0QTUwQzFGNTA4IgorICAgICAgICI0RkMyMDI0NjNGNDc4RjY3OEI5QTE5MzkyRjBEMjk2MUM1MzkxQzU0NkVGMzY1MzY4QkI0NjQxMEM5QzFDRUU5NkU5RiIKKyAgICAgICAiMEM5NTM1NzBDMkVEMDYzMjhCMTFDOTBFODZFNTdDQUE3RkE1QUJBQTI3OEUyMkE0QzhDMDhFMTZFRTU5RjQ4NEVDNDQiCisgICAgICAgIjJDRjU1NTM1QkFBMkM2QkVBODgzM0E1NTUzNzJCRUZFMUU2NjVEM0M3REFFRjU4MDYxRDUxMzYzMzFFRjRFQjYxQkMzIgorICAgICAgICI2RUU0NDI1QTU1M0FGODg4NUZFQTE1QTg4MTM1QkUxMzM1MjAjKVxuIgorIiAgICh5ICM2NkUwRDFBNjlENjYzNDY2RjhGRUYyQjdDMDg3OERBQzkzQzM2QTJGQjJDMDVFMDMwNkE1M0I5MjYwMjFENEI5MkExQyIKKyAgICAgICAiMkZBNjg2MDA2MUU4OEU3OENCQkJBNDlCMEUxMjcwMEYwN0RCRjg2RjcyQ0VCMjkyN0VEQUMwQzdFMzk2OUMzQTQ3QkIiCisgICAgICAgIjRFMEFFOTNEOEJCMzMxM0U5M0NDN0E3MkRGRUVFNDQyRUZCQzgxQjNCMkFFQzlEOERDQkUyMTIyMEZCNzYwMjAxRDc5IgorICAgICAgICIzMjhDNDFDNzczODY2NTg3QTQ0QjY5NTQ3NjdEMDIyQTg4MDcyOTAwRTk2NDA4OUQ5QjE3MTMzNjAzMDU2Qzk4NUM0RiIKKyAgICAgICAiOEEwQjY0OEYyOTdGOEQyQzNDQjQzRTQzNzFEQzYwMDJCNUIxMkNDQzA4NUJEQjJDRkM1MDc0QTA1ODc1NjYxODdFRTMiCisgICAgICAgIkUxMUEyQTQ1OUJEOTQ3MjYyNDhCQjhENkNDNjI5MzhFMTFFMjg0QzJDMTgzNTc2RkJCNTE3NDlFQjIzOEM0MzYwOTIzIgorICAgICAgICI3OUMwOENFMUM4Q0Q3N0VCNTc0MDRDRTlCNDc0NDM5NUFDRjcyMTQ4NzQ1MEJBREUzMjIwNTc2RjJGODE2MjQ4QjBBNyIKKyAgICAgICAiMTRBMjY0MzMwQUVDQ0IyNERFMkExMTA3ODQ3QjIzNDkwODk3IylcbiIKKyIgICAoeCAjNDc3QkQxNDY3NkUyMjU2M0M1QUJBNjgwMjVDRUJBMkE0OEQ0ODVGNUIyRDRBRDRDMEVCQkQ2RDAjKVxuIgorIikpXG4iOworCisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wdWJsaWNfZHNhX2tleV8yMDQ4W10gPQorIihwdWJsaWMta2V5XG4iCisiICAoZHNhXG4iCisiICAgKHAgIzAwQjU0NjM2NjczOTYyQjY0RjdEQzIzQzcxQUNFRjZFNzMzMTc5NkY2MDc1NjBCMTk0REZDQzBDQTM3MEU4NThBMzY1IgorICAgICAgICJBNDEzMTUyRkI2RUI4QzY2NEJEMTcxQUMzMTZGRTVCMzgxQ0QwODREMDczNzc1NzE1OTk4ODBBMDY4RUYxMzgyRDg1QyIKKyAgICAgICAiMzA4QjRFOURFQUMxMkQ2NkRFNUM0QTgyNkVCRUI1RUQ5NEE2MkU3MzAxRTE4OTI3RTg5MDU4OUEyRjIzMDI3MkExNTAiCisgICAgICAgIkMxMThCQzNEQzI5NjVBRTBEMDVCRTRGNjVDNjEzN0IyQkE3RURBQkIxOTJDMzA3MEQyMDJDMTBBQTNGNTM0NTc0OTcwIgorICAgICAgICI3MTQ1NERCOEE3M0REQjY1MTFBNUJBOThFRjE0NTBGRDkwREU1QkFBRkM5RkQzQUMyMkVCRUE2MTJERDA3NUJCNzQwNSIKKyAgICAgICAiRDU2ODY2RDEyNUUzMzk4MkMwNDY4MDhGN0NFQkE4RTVDMEI5RjE5QTZGRTQ1MTQ2MTY2MEExQ0JBOUVGNjg4OTExNzkiCisgICAgICAgIjAyNTZBNTczRDNCOEYzNUE1QzdBMEM2QzMxRjJEQjkwRTI1QTI2ODQ1MjUyQUQ5RTQ4NUVGMkQzMzlFN0I1ODkwQ0Q0IgorICAgICAgICIyRjlDOUYzMTVFRDQwOTE3MUVDMzVDQTA0Q0MwNkIyNzU1NzdCMyMpXG4iCisiICAgKHEgIzAwREE2Nzk4OTE2N0ZEQUM0QUUzREY5MjQ3QTcxNjg1OUEzMEMwQ0Y5QzVBNkRCQTAxRUFCQTM0ODEjKVxuIgorIiAgIChnICM0OEUzNURBNTg0QTA4OUQwNTE0MkFBNjM2MDNGREIwMEQxMzFCMDdBMDc4MUUyRDVBOEY5NjE0RDJCMzNEM0U0MEE3OCIKKyAgICAgICAiOThBOUUxMENEQkI2MTJDRjA5M0Y5NUEzRTEwRDA5NTY2NzI2RjJDMTI4MjM4MzZCMkQ5Q0Q5NzRCQjY5NTY2NUYzQjMiCisgICAgICAgIjVEMjE5QTk3MjRCODdGMzgwQkQ1MjA3RURBMEFFMzhDNzlFOEYxODEyMkMzRjc2RTRDRUIwQUJFRDMyNTA5MTQ5ODdGIgorICAgICAgICJCMzBENEI5RTE5QzA0QzI4QTVENEY0NTU2MEFGNTg2RjZBMUI0MTc1MUVBRDkwQUU3RjA0NEY0RTJBNEE1MEMxRjUwOCIKKyAgICAgICAiNEZDMjAyNDYzRjQ3OEY2NzhCOUExOTM5MkYwRDI5NjFDNTM5MUM1NDZFRjM2NTM2OEJCNDY0MTBDOUMxQ0VFOTZFOUYiCisgICAgICAgIjBDOTUzNTcwQzJFRDA2MzI4QjExQzkwRTg2RTU3Q0FBN0ZBNUFCQUEyNzhFMjJBNEM4QzA4RTE2RUU1OUY0ODRFQzQ0IgorICAgICAgICIyQ0Y1NTUzNUJBQTJDNkJFQTg4MzNBNTU1MzcyQkVGRTFFNjY1RDNDN0RBRUY1ODA2MUQ1MTM2MzMxRUY0RUI2MUJDMyIKKyAgICAgICAiNkVFNDQyNUE1NTNBRjg4ODVGRUExNUE4ODEzNUJFMTMzNTIwIylcbiIKKyIgICAoeSAjNjZFMEQxQTY5RDY2MzQ2NkY4RkVGMkI3QzA4NzhEQUM5M0MzNkEyRkIyQzA1RTAzMDZBNTNCOTI2MDIxRDRCOTJBMUMiCisgICAgICAgIjJGQTY4NjAwNjFFODhFNzhDQkJCQTQ5QjBFMTI3MDBGMDdEQkY4NkY3MkNFQjI5MjdFREFDMEM3RTM5NjlDM0E0N0JCIgorICAgICAgICI0RTBBRTkzRDhCQjMzMTNFOTNDQzdBNzJERkVFRTQ0MkVGQkM4MUIzQjJBRUM5RDhEQ0JFMjEyMjBGQjc2MDIwMUQ3OSIKKyAgICAgICAiMzI4QzQxQzc3Mzg2NjU4N0E0NEI2OTU0NzY3RDAyMkE4ODA3MjkwMEU5NjQwODlEOUIxNzEzMzYwMzA1NkM5ODVDNEYiCisgICAgICAgIjhBMEI2NDhGMjk3RjhEMkMzQ0I0M0U0MzcxREM2MDAyQjVCMTJDQ0MwODVCREIyQ0ZDNTA3NEEwNTg3NTY2MTg3RUUzIgorICAgICAgICJFMTFBMkE0NTlCRDk0NzI2MjQ4QkI4RDZDQzYyOTM4RTExRTI4NEMyQzE4MzU3NkZCQjUxNzQ5RUIyMzhDNDM2MDkyMyIKKyAgICAgICAiNzlDMDhDRTFDOENENzdFQjU3NDA0Q0U5QjQ3NDQzOTVBQ0Y3MjE0ODc0NTBCQURFMzIyMDU3NkYyRjgxNjI0OEIwQTciCisgICAgICAgIjE0QTI2NDMzMEFFQ0NCMjRERTJBMTEwNzg0N0IyMzQ5MDg5NyMpXG4iCisiKSlcbiI7CisKKworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX3ByaXZhdGVfZHNhX2tleV8zMDcyW10gPQorIihwcml2YXRlLWtleVxuIgorIiAgKGRzYVxuIgorIiAgIChwICMwMEJBNzNFMTQ4QUVBNUU4QjY0ODc4QUY1QkU3MTJCODMwMkI5NjcxQzVGM0VFQjc3MjJBOUQwRDk4NjhEMDQ4QzkzOCIKKyAgICAgICAiODc3QzkxQzMzNUM3ODE5MjkyRTY5QzdEMzQyNjRGMTU3OEUzMkVDMkRBODQwOERGNzVEMEVCNzZFMEQzMDMwQjg0QjUiCisgICAgICAgIjYyRDhFRjkzQUI1M0JBQjZCOEE1REU0NjRGNUNBODdBRUE0M0JEQ0YwRkIwQjc4MTVBQTMxMTRDRkM4NEZEOTE2QTgzIgorICAgICAgICJCM0Q1RkQ3ODM5MDE4OTMzMjIzMkU5RDAzN0QyMTUzMTNGRDAwMkZGNDZDMDQ4QjY2NzAzRjg3RkFFMDkyQUFBMDk4OCIKKyAgICAgICAiQUM3NDUzMzZFQkU2NzJBMDFERURCRDUyMzk1NzgzNTc5QjY3Q0YzQUUxRDZGMTYwMkNDQ0IxMjE1NEZBMEUwMEFFNDYiCisgICAgICAgIjBEOUIyODlDRjcwOTE5NDYyNUJDQjkxOUIxMTAzOERFRkM1MEFEQkJBMjBDM0YzMjAwNzhFNEU5NTI5QjRGNjg0OEUyIgorICAgICAgICJBQjVFNjI3OERCOTYxRkUyMjZGMkVFQkQyMDFFMDcxQzQ4QzVCRUY5OEI0RDlCRUU0MkMxQzcxMDJEODkzRUJGODkwMiIKKyAgICAgICAiRDdBOTEyNjYzNDBBRkQ2Q0UxRDA5RTUyMjgyRkZGNUI5N0VBRkEzODg2QTNGQ0Y4NEZGNzZEMUUwNjUzOEQwRDhFNjAiCisgICAgICAgIkIzMzMyMTQ1Nzg1RTA3RDI5QTU5NjUzODJERTM0NzBEMUQ4ODg0NDdGQTlDMDBBMjM3MzM3OEZDM0ZBN0I5RjdEMTdFIgorICAgICAgICI5NUE2QTVBRTEzOTdCRTQ2RDk3NkVGMkM5NkU4OTkxM0FDNEEwOTM1MUNBNjYxQkY2RjY3RTMwNDA3REE4NDY5NDZDNyIKKyAgICAgICAiNjJEOUJBQTZCNzc4MjUwOTdEM0U3Qjg4NjQ1NkJCMzJFM0U3NDUxNkJGM0ZEOTNENzFCMjU3QUE4RjcyM0UwMUNFMzMiCisgICAgICAgIjgwMTUzNTNEMzc3OEIwMkI4OTJBRjcjKVxuIgorIiAgIChxICMwMEJGRjNGM0NDMThGQTAxOEE1QjgxNTVBODY5NUUxRTQ5Mzk2NjBENUU0NzU5MzIyQzM5RDUwRjNCOTNFNUY2OEIjKVxuIgorIiAgIChnICM2Q0NGRDgyMTlGNUZDRThFRjJCRUYzMjYyOTI5Nzg3MTQwODQ3RTM4Njc0QjFFRjhEQjIwMjU1RTIxMkNCNjMzMEVDNCIKKyAgICAgICAiREZFOEEyNkFCN0VDQzU3NjBERUI5QkJGNTlBMkIyODIxRDUxMEYxODY4MTcyMjIyODY3NTU4QjhEMjA0RTg4OUM0NzQiCisgICAgICAgIjdDQTMwRkJGOUQ4Q0Y0MUFFNUQ1QkQ4NDUxNzQ2NDExMDE1OTM4NDlGRjMzM0U2QzkzQTY1NTA5MzFCMkI5RDU2Qjk4IgorICAgICAgICI5Q0FCMDE3MjlEOUQ3MzZGQTZEMjRBNzREMkRERTFFOUU2NDhEMTQxNDczRTQ0M0RENkJCRjBCM0NBQjY0RjlGRTRGQyIKKyAgICAgICAiMTM0QjJFQjU3NDM3Nzg5Rjc1Qzc0NERGMUZBNjdGQThBNjQ2MDNFNTQ0MUJDN0VDRTI5RTAwQkRGMjYyQkRDODFFOEMiCisgICAgICAgIjczMzBBMThBNDEyREUzOEU3NTQ2RDM0MkI4OUEwQUY2NzVBODlFNkJFRjAwNTQwRUIxMDdBMkZFNzRFQTQwMkIwRDg5IgorICAgICAgICJGNUMwMjkxOERFRUVBRjhCODczN0FDODY2QjA5QjUwODEwQUI4RDg2Njg4MzRBMUI5RTFFNTM4NjZFMkIwQTkyNkZBQiIKKyAgICAgICAiMTIwQTBDREU1QjM3MTVGRkZFNkFDRDFBQjczNTg4RENDMUVDNENFOTM5MkZFNTdGOEQxRDM1ODExMjAwQ0IwN0EwRTYiCisgICAgICAgIjM3NEUyQzRCMEFFQjdFM0QwNzdCODU0NUMwRTQzOERDQzBGMUFFODFFMTg2OTMwRTk5RUJDNUI5MUI3N0U5MjgwM0UwIgorICAgICAgICIyMTYwMjg4Nzg1MUE0RkZEQjNBNzg5NkFDNjU1QTA5MDEyMThDMTIxQzVDQkIwOTMxRTdENUVBQzI0M0YzNzcxMUI1RiIKKyAgICAgICAiRDVBNjJCMUIzOEE4M0YwM0Q4RjY3MDNEOEI5OERGMzY3RkM4QTc2OTkwMzM1RjYyMTczQTUzOTE4MzZGMEYyNDEzRUMiCisgICAgICAgIjQ5OTdBRjlFQjU1QzY2NjBCMDFBIylcbiIKKyIgICAoeSAjMjMyMEIyMjQzNEM1REI4MzJCNEVDMjY3Q0M1MkU3OERENUNDRkE5MTFFOEYwODA0RTdFN0YzMkIxODZCMkQ0MTY3QUUiCisgICAgICAgIjRBQTY4Njk4MjJFNzY0MDA0OTJENkExOTNCMDUzNTMyMkM3MkIwQjdBQTRBODdFMzMwNDRGREM4NEJFMjRDNjRBMDUzIgorICAgICAgICJBMzc2NTVFRTlFQUJEQ0RDMUZERjYzRjNGMUM2NzdDRUI0MTU5NURGN0RFRkU5MTc4RDg1QTNENjIxQjRFNDc3NTQ5MiIKKyAgICAgICAiOEMwQTU4RDI0NThEMDZGOTU2MkU0REUyRkU2MTI5QTY0MDYzQTk5RTg4RTU0NDg1Qjk3NDg0QTI4MTg4QzREMzNGMTUiCisgICAgICAgIkREQzkwM0I2Q0VBMDEzNUUzRTNEMjdCNEVBMzkzMTk2OTYzMDVDRTkzRDdCQTdCRTAwMzY3REJFM0FBRjQzNDkxRTcxIgorICAgICAgICJDQkYyNTQ3NDRBNTU2N0Y1RDcwMDkwRDYxMzlFMEM5OTAyMzk2MjdCM0ExQzVCMjBCNkY5RjYzNzRCOEQ4RDhBODk5NyIKKyAgICAgICAiNDM3MjY1QkUxRTNCNDgxMEQ0QjA5MjU0NDAwREUyODdBMERGRkJBRUYzMzlFNDhENDIyQjFENDFBMzdFNjQyQkMwMjYiCisgICAgICAgIjczMzE0NzAxQzhGQTk3OTI4NDVDMTI5MzUxQTg3QTk0NUEwM0U2Qzg5NTg2MEU1MUQ2RkI4QjczNDBBOTREMUE4QTdCIgorICAgICAgICJGQTg1QUM4M0I0QjE0RTczQUI4NkNCOTZDMjM2QzhCRkIwOTc4QjYxQjIzNjdBN0ZFNEY3ODkxMDcwRjU2Qzc4RDVERCIKKyAgICAgICAiRjU1NzZCRkU1QkU0RjMzM0E0RTI2NjRFNzk1MjhCMzI5NDkwN0FBREQ2M0Y0RjJFN0FBODE0N0I5MjhEOENENjk3NjUiCisgICAgICAgIjNEQjk4QzQyOTdDQjY3ODA0NkVENTVDMERCRTYwQkY3MTQyQzU5NDYwM0U0RDcwNURDM0QxNzI3MEY5RjA4NkVDNTYxIgorICAgICAgICIyNzAzRDUxOEQ4RDQ5RkYwRUJFNiMpXG4iCisiICAgKHggIzAwQTlGRkZDODhFNjdENkY3QjgxMEUyOTFDMDUwQkFGRUE3RkM0QTc1RThEMkYxNkNGRUQzNDE2RkQ3NzYwNzIzMiMpXG4iCisiKSlcbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wdWJsaWNfZHNhX2tleV8zMDcyW10gPQorIihwdWJsaWMta2V5XG4iCisiICAoZHNhXG4iCisiICAgKHAgIzAwQkE3M0UxNDhBRUE1RThCNjQ4NzhBRjVCRTcxMkI4MzAyQjk2NzFDNUYzRUVCNzcyMkE5RDBEOTg2OEQwNDhDOTM4IgorICAgICAgICI4NzdDOTFDMzM1Qzc4MTkyOTJFNjlDN0QzNDI2NEYxNTc4RTMyRUMyREE4NDA4REY3NUQwRUI3NkUwRDMwMzBCODRCNSIKKyAgICAgICAiNjJEOEVGOTNBQjUzQkFCNkI4QTVERTQ2NEY1Q0E4N0FFQTQzQkRDRjBGQjBCNzgxNUFBMzExNENGQzg0RkQ5MTZBODMiCisgICAgICAgIkIzRDVGRDc4MzkwMTg5MzMyMjMyRTlEMDM3RDIxNTMxM0ZEMDAyRkY0NkMwNDhCNjY3MDNGODdGQUUwOTJBQUEwOTg4IgorICAgICAgICJBQzc0NTMzNkVCRTY3MkEwMURFREJENTIzOTU3ODM1NzlCNjdDRjNBRTFENkYxNjAyQ0NDQjEyMTU0RkEwRTAwQUU0NiIKKyAgICAgICAiMEQ5QjI4OUNGNzA5MTk0NjI1QkNCOTE5QjExMDM4REVGQzUwQURCQkEyMEMzRjMyMDA3OEU0RTk1MjlCNEY2ODQ4RTIiCisgICAgICAgIkFCNUU2Mjc4REI5NjFGRTIyNkYyRUVCRDIwMUUwNzFDNDhDNUJFRjk4QjREOUJFRTQyQzFDNzEwMkQ4OTNFQkY4OTAyIgorICAgICAgICJEN0E5MTI2NjM0MEFGRDZDRTFEMDlFNTIyODJGRkY1Qjk3RUFGQTM4ODZBM0ZDRjg0RkY3NkQxRTA2NTM4RDBEOEU2MCIKKyAgICAgICAiQjMzMzIxNDU3ODVFMDdEMjlBNTk2NTM4MkRFMzQ3MEQxRDg4ODQ0N0ZBOUMwMEEyMzczMzc4RkMzRkE3QjlGN0QxN0UiCisgICAgICAgIjk1QTZBNUFFMTM5N0JFNDZEOTc2RUYyQzk2RTg5OTEzQUM0QTA5MzUxQ0E2NjFCRjZGNjdFMzA0MDdEQTg0Njk0NkM3IgorICAgICAgICI2MkQ5QkFBNkI3NzgyNTA5N0QzRTdCODg2NDU2QkIzMkUzRTc0NTE2QkYzRkQ5M0Q3MUIyNTdBQThGNzIzRTAxQ0UzMyIKKyAgICAgICAiODAxNTM1M0QzNzc4QjAyQjg5MkFGNyMpXG4iCisiICAgKHEgIzAwQkZGM0YzQ0MxOEZBMDE4QTVCODE1NUE4Njk1RTFFNDkzOTY2MEQ1RTQ3NTkzMjJDMzlENTBGM0I5M0U1RjY4QiMpXG4iCisiICAgKGcgIzZDQ0ZEODIxOUY1RkNFOEVGMkJFRjMyNjI5Mjk3ODcxNDA4NDdFMzg2NzRCMUVGOERCMjAyNTVFMjEyQ0I2MzMwRUM0IgorICAgICAgICJERkU4QTI2QUI3RUNDNTc2MERFQjlCQkY1OUEyQjI4MjFENTEwRjE4NjgxNzIyMjI4Njc1NThCOEQyMDRFODg5QzQ3NCIKKyAgICAgICAiN0NBMzBGQkY5RDhDRjQxQUU1RDVCRDg0NTE3NDY0MTEwMTU5Mzg0OUZGMzMzRTZDOTNBNjU1MDkzMUIyQjlENTZCOTgiCisgICAgICAgIjlDQUIwMTcyOUQ5RDczNkZBNkQyNEE3NEQyRERFMUU5RTY0OEQxNDE0NzNFNDQzREQ2QkJGMEIzQ0FCNjRGOUZFNEZDIgorICAgICAgICIxMzRCMkVCNTc0Mzc3ODlGNzVDNzQ0REYxRkE2N0ZBOEE2NDYwM0U1NDQxQkM3RUNFMjlFMDBCREYyNjJCREM4MUU4QyIKKyAgICAgICAiNzMzMEExOEE0MTJERTM4RTc1NDZEMzQyQjg5QTBBRjY3NUE4OUU2QkVGMDA1NDBFQjEwN0EyRkU3NEVBNDAyQjBEODkiCisgICAgICAgIkY1QzAyOTE4REVFRUFGOEI4NzM3QUM4NjZCMDlCNTA4MTBBQjhEODY2ODgzNEExQjlFMUU1Mzg2NkUyQjBBOTI2RkFCIgorICAgICAgICIxMjBBMENERTVCMzcxNUZGRkU2QUNEMUFCNzM1ODhEQ0MxRUM0Q0U5MzkyRkU1N0Y4RDFEMzU4MTEyMDBDQjA3QTBFNiIKKyAgICAgICAiMzc0RTJDNEIwQUVCN0UzRDA3N0I4NTQ1QzBFNDM4RENDMEYxQUU4MUUxODY5MzBFOTlFQkM1QjkxQjc3RTkyODAzRTAiCisgICAgICAgIjIxNjAyODg3ODUxQTRGRkRCM0E3ODk2QUM2NTVBMDkwMTIxOEMxMjFDNUNCQjA5MzFFN0Q1RUFDMjQzRjM3NzExQjVGIgorICAgICAgICJENUE2MkIxQjM4QTgzRjAzRDhGNjcwM0Q4Qjk4REYzNjdGQzhBNzY5OTAzMzVGNjIxNzNBNTM5MTgzNkYwRjI0MTNFQyIKKyAgICAgICAiNDk5N0FGOUVCNTVDNjY2MEIwMUEjKVxuIgorIiAgICh5ICMyMzIwQjIyNDM0QzVEQjgzMkI0RUMyNjdDQzUyRTc4REQ1Q0NGQTkxMUU4RjA4MDRFN0U3RjMyQjE4NkIyRDQxNjdBRSIKKyAgICAgICAiNEFBNjg2OTgyMkU3NjQwMDQ5MkQ2QTE5M0IwNTM1MzIyQzcyQjBCN0FBNEE4N0UzMzA0NEZEQzg0QkUyNEM2NEEwNTMiCisgICAgICAgIkEzNzY1NUVFOUVBQkRDREMxRkRGNjNGM0YxQzY3N0NFQjQxNTk1REY3REVGRTkxNzhEODVBM0Q2MjFCNEU0Nzc1NDkyIgorICAgICAgICI4QzBBNThEMjQ1OEQwNkY5NTYyRTRERTJGRTYxMjlBNjQwNjNBOTlFODhFNTQ0ODVCOTc0ODRBMjgxODhDNEQzM0YxNSIKKyAgICAgICAiRERDOTAzQjZDRUEwMTM1RTNFM0QyN0I0RUEzOTMxOTY5NjMwNUNFOTNEN0JBN0JFMDAzNjdEQkUzQUFGNDM0OTFFNzEiCisgICAgICAgIkNCRjI1NDc0NEE1NTY3RjVENzAwOTBENjEzOUUwQzk5MDIzOTYyN0IzQTFDNUIyMEI2RjlGNjM3NEI4RDhEOEE4OTk3IgorICAgICAgICI0MzcyNjVCRTFFM0I0ODEwRDRCMDkyNTQ0MDBERTI4N0EwREZGQkFFRjMzOUU0OEQ0MjJCMUQ0MUEzN0U2NDJCQzAyNiIKKyAgICAgICAiNzMzMTQ3MDFDOEZBOTc5Mjg0NUMxMjkzNTFBODdBOTQ1QTAzRTZDODk1ODYwRTUxRDZGQjhCNzM0MEE5NEQxQThBN0IiCisgICAgICAgIkZBODVBQzgzQjRCMTRFNzNBQjg2Q0I5NkMyMzZDOEJGQjA5NzhCNjFCMjM2N0E3RkU0Rjc4OTEwNzBGNTZDNzhENUREIgorICAgICAgICJGNTU3NkJGRTVCRTRGMzMzQTRFMjY2NEU3OTUyOEIzMjk0OTA3QUFERDYzRjRGMkU3QUE4MTQ3QjkyOEQ4Q0Q2OTc2NSIKKyAgICAgICAiM0RCOThDNDI5N0NCNjc4MDQ2RUQ1NUMwREJFNjBCRjcxNDJDNTk0NjAzRTRENzA1REMzRDE3MjcwRjlGMDg2RUM1NjEiCisgICAgICAgIjI3MDNENTE4RDhENDlGRjBFQkU2IylcbiIKKyIpKVxuIjsKKworCisjZGVmaW5lIERJTSh2KQkJICAgICAoc2l6ZW9mKHYpL3NpemVvZigodilbMF0pKQorI2RlZmluZSBESU1vZih0eXBlLG1lbWJlcikgICBESU0oKCh0eXBlICopMCktPm1lbWJlcikKKyNkZWZpbmUgQlVHKCkgZG8ge2ZwcmludGYgKCBzdGRlcnIsICJPb29wcyBhdCAlczolZFxuIiwgX19GSUxFX18gLCBfX0xJTkVfXyApO1wKKwkJICBleGl0KDIpO30gd2hpbGUoMCkKKworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICBwdXRjaGFyICgnXG4nKTsKKyAgZnB1dHMgKCBQR00gIjogIiwgc3RkZXJyKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyICk7CisgIHZhX2VuZChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK3Nob3dfc2V4cCAoY29uc3QgY2hhciAqcHJlZml4LCBnY3J5X3NleHBfdCBhKQoreworICBjaGFyICpidWY7CisgIHNpemVfdCBzaXplOworCisgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBtYWxsb2MgKHNpemUpOworICBpZiAoIWJ1ZikKKyAgICBkaWUgKCJvdXQgb2YgY29yZVxuIik7CisKKyAgZ2NyeV9zZXhwX3NwcmludCAoYSwgR0NSWVNFWFBfRk1UX0FEVkFOQ0VELCBidWYsIHNpemUpOworICBmcHJpbnRmIChzdGRlcnIsICIlLipzIiwgKGludClzaXplLCBidWYpOworfQorCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzc19jYiAodm9pZCAqY2JfZGF0YSwgY29uc3QgY2hhciAqd2hhdCwgaW50IHByaW50Y2hhciwKKyAgICAgICAgICAgICBpbnQgY3VycmVudCwgaW50IHRvdGFsKQoreworICAodm9pZCljYl9kYXRhOworCisgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IHByb2dyZXNzICglcyAlYyAlZCAlZClcbiIsCisgICAgICAgICAgIHdoYXQsIHByaW50Y2hhciwgY3VycmVudCwgdG90YWwpOworICBmZmx1c2ggKHN0ZGVycik7Cit9CisKKworc3RhdGljIHZvaWQKK3JhbmRvbV9iZW5jaCAoaW50IHZlcnlfc3Ryb25nKQoreworICBjaGFyIGJ1ZlsxMjhdOworICBpbnQgaTsKKworICBwcmludGYgKCIlLTEwcyIsICJyYW5kb20iKTsKKworICBpZiAoIXZlcnlfc3Ryb25nKQorICAgIHsKKyAgICAgIHN0YXJ0X3RpbWVyICgpOworICAgICAgZm9yIChpPTA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgZ2NyeV9yYW5kb21pemUgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICAgIH0KKworICBzdGFydF90aW1lciAoKTsKKyAgZm9yIChpPTA7IGkgPCAxMDA7IGkrKykKKyAgICBnY3J5X3JhbmRvbWl6ZSAoYnVmLCA4LAorICAgICAgICAgICAgICAgICAgICB2ZXJ5X3N0cm9uZz8gR0NSWV9WRVJZX1NUUk9OR19SQU5ET006R0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgc3RvcF90aW1lciAoKTsKKyAgcHJpbnRmICgiICVzIiwgZWxhcHNlZF90aW1lICgpKTsKKworICBwdXRjaGFyICgnXG4nKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RVTVBfUkFORE9NX1NUQVRTKTsKK30KKworCisKK3N0YXRpYyB2b2lkCittZF9iZW5jaCAoIGNvbnN0IGNoYXIgKmFsZ29uYW1lICkKK3sKKyAgaW50IGFsZ287CisgIGdjcnlfbWRfaGRfdCBoZDsKKyAgaW50IGksIGosIHJlcGNvdW50OworICBjaGFyIGJ1Zl9iYXNlWzEwMDArMTVdOworICBzaXplX3QgYnVmc2l6ZSA9IDEwMDA7CisgIGNoYXIgKmJ1ZjsKKyAgY2hhciAqbGFyZ2VidWZfYmFzZTsKKyAgY2hhciAqbGFyZ2VidWY7CisgIGNoYXIgZGlnZXN0WzUxMi84XTsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisKKyAgaWYgKCFhbGdvbmFtZSkKKyAgICB7CisgICAgICBmb3IgKGk9MTsgaSA8IDQwMDsgaSsrKQorICAgICAgICBpZiAoaW5fZmlwc19tb2RlICYmIGkgPT0gR0NSWV9NRF9NRDUpCisgICAgICAgICAgOyAvKiBEb24ndCB1c2UgTUQ1IGluIGZpcHMgbW9kZS4gICovCisgICAgICAgIGVsc2UgaWYgKCAhZ2NyeV9tZF90ZXN0X2FsZ28gKGkpICkKKyAgICAgICAgICBtZF9iZW5jaCAoZ2NyeV9tZF9hbGdvX25hbWUgKGkpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYnVmID0gYnVmX2Jhc2UgKyAoKDE2IC0gKChzaXplX3QpYnVmX2Jhc2UgJiAweDBmKSkgJSBidWZmZXJfYWxpZ25tZW50KTsKKworICBhbGdvID0gZ2NyeV9tZF9tYXBfbmFtZSAoYWxnb25hbWUpOworICBpZiAoIWFsZ28pCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogaW52YWxpZCBoYXNoIGFsZ29yaXRobSBgJXMnXG4iLCBhbGdvbmFtZSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9tZF9vcGVuICgmaGQsIGFsZ28sIDApOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGVycm9yIG9wZW5pbmcgaGFzaCBhbGdvcml0aG0gYCVzJ1xuIiwgYWxnb25hbWUpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGZvciAoaT0wOyBpIDwgYnVmc2l6ZTsgaSsrKQorICAgIGJ1ZltpXSA9IGk7CisKKyAgcHJpbnRmICgiJS0xMnMiLCBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbykpOworCisgIHN0YXJ0X3RpbWVyICgpOworICBmb3IgKHJlcGNvdW50PTA7IHJlcGNvdW50IDwgaGFzaF9yZXBldGl0aW9uczsgcmVwY291bnQrKykKKyAgICBmb3IgKGk9MDsgaSA8IDEwMDA7IGkrKykKKyAgICAgIGdjcnlfbWRfd3JpdGUgKGhkLCBidWYsIGJ1ZnNpemUpOworICBnY3J5X21kX2ZpbmFsIChoZCk7CisgIHN0b3BfdGltZXIgKCk7CisgIHByaW50ZiAoIiAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisgIGZmbHVzaCAoc3Rkb3V0KTsKKworICBnY3J5X21kX3Jlc2V0IChoZCk7CisgIHN0YXJ0X3RpbWVyICgpOworICBmb3IgKHJlcGNvdW50PTA7IHJlcGNvdW50IDwgaGFzaF9yZXBldGl0aW9uczsgcmVwY291bnQrKykKKyAgICBmb3IgKGk9MDsgaSA8IDEwMDAwOyBpKyspCisgICAgICBnY3J5X21kX3dyaXRlIChoZCwgYnVmLCBidWZzaXplLzEwKTsKKyAgZ2NyeV9tZF9maW5hbCAoaGQpOworICBzdG9wX3RpbWVyICgpOworICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgZ2NyeV9tZF9yZXNldCAoaGQpOworICBzdGFydF90aW1lciAoKTsKKyAgZm9yIChyZXBjb3VudD0wOyByZXBjb3VudCA8IGhhc2hfcmVwZXRpdGlvbnM7IHJlcGNvdW50KyspCisgICAgZm9yIChpPTA7IGkgPCAxMDAwMDAwOyBpKyspCisgICAgICBnY3J5X21kX3dyaXRlIChoZCwgYnVmLCAxKTsKKyAgZ2NyeV9tZF9maW5hbCAoaGQpOworICBzdG9wX3RpbWVyICgpOworICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgc3RhcnRfdGltZXIgKCk7CisgIGZvciAocmVwY291bnQ9MDsgcmVwY291bnQgPCBoYXNoX3JlcGV0aXRpb25zOyByZXBjb3VudCsrKQorICAgIGZvciAoaT0wOyBpIDwgMTAwMDsgaSsrKQorICAgICAgZm9yIChqPTA7IGogPCBidWZzaXplOyBqKyspCisgICAgICAgIGdjcnlfbWRfcHV0YyAoaGQsIGJ1ZltqXSk7CisgIGdjcnlfbWRfZmluYWwgKGhkKTsKKyAgc3RvcF90aW1lciAoKTsKKyAgcHJpbnRmICgiICVzIiwgZWxhcHNlZF90aW1lICgpKTsKKyAgZmZsdXNoIChzdGRvdXQpOworCisgIGdjcnlfbWRfY2xvc2UgKGhkKTsKKworICAvKiBOb3cgMTAwIGhhc2ggb3BlcmF0aW9ucyBvbiAxMDAwMCBieXRlcyB1c2luZyB0aGUgZmFzdCBmdW5jdGlvbi4KKyAgICAgV2UgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHNvIHRoYXQgYWxsIG1lbW9yeSBwYWdlcyBhcmUgY29tbWl0dGVkCisgICAgIGFuZCB3ZSBoYXZlIHJlcGVhdGFibGUgdmFsdWVzLiAgKi8KKyAgaWYgKGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiAoYWxnbykgPiBzaXplb2YgZGlnZXN0KQorICAgIGRpZSAoImRpZ2VzdCBidWZmZXIgdG9vIHNob3J0XG4iKTsKKworICBsYXJnZWJ1Zl9iYXNlID0gbWFsbG9jICgxMDAwMCsxNSk7CisgIGlmICghbGFyZ2VidWZfYmFzZSkKKyAgICBkaWUgKCJvdXQgb2YgY29yZVxuIik7CisgIGxhcmdlYnVmID0gKGxhcmdlYnVmX2Jhc2UKKyAgICAgICAgICAgICAgKyAoKDE2IC0gKChzaXplX3QpbGFyZ2VidWZfYmFzZSAmIDB4MGYpKSAlIGJ1ZmZlcl9hbGlnbm1lbnQpKTsKKworICBmb3IgKGk9MDsgaSA8IDEwMDAwOyBpKyspCisgICAgbGFyZ2VidWZbaV0gPSBpOworICBzdGFydF90aW1lciAoKTsKKyAgZm9yIChyZXBjb3VudD0wOyByZXBjb3VudCA8IGhhc2hfcmVwZXRpdGlvbnM7IHJlcGNvdW50KyspCisgICAgZm9yIChpPTA7IGkgPCAxMDA7IGkrKykKKyAgICAgIGdjcnlfbWRfaGFzaF9idWZmZXIgKGFsZ28sIGRpZ2VzdCwgbGFyZ2VidWYsIDEwMDAwKTsKKyAgc3RvcF90aW1lciAoKTsKKyAgcHJpbnRmICgiICVzIiwgZWxhcHNlZF90aW1lICgpKTsKKyAgZnJlZSAobGFyZ2VidWZfYmFzZSk7CisKKyAgcHV0Y2hhciAoJ1xuJyk7CisgIGZmbHVzaCAoc3Rkb3V0KTsKK30KKworCisKK3N0YXRpYyB2b2lkCittYWNfYmVuY2ggKCBjb25zdCBjaGFyICphbGdvbmFtZSApCit7CisgIGludCBhbGdvOworICBnY3J5X21hY19oZF90IGhkOworICBpbnQgc3RlcCwgcG9zLCBqLCBpLCByZXBjb3VudDsKKyAgY2hhciBidWZfYmFzZVsxMDAwKzE1XTsKKyAgc2l6ZV90IGJ1ZnNpemUgPSAxMDAwOworICBjaGFyICpidWY7CisgIGNoYXIgbWFjWzNdWzUxMl07CisgIGNoYXIga2V5WzUxMl07CisgIHVuc2lnbmVkIGludCBtYWNsZW4sIGtleWxlbjsKKyAgc2l6ZV90IG1hY291dGxlbjsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisKKyAgaWYgKCFhbGdvbmFtZSkKKyAgICB7CisgICAgICBmb3IgKGk9MTsgaSA8IDUwMDsgaSsrKQorICAgICAgICBpZiAoaW5fZmlwc19tb2RlICYmIGkgPT0gR0NSWV9NQUNfSE1BQ19NRDUpCisgICAgICAgICAgOyAvKiBEb24ndCB1c2UgTUQ1IGluIGZpcHMgbW9kZS4gICovCisgICAgICAgIGVsc2UgaWYgKCAhZ2NyeV9tYWNfdGVzdF9hbGdvIChpKSApCisgICAgICAgICAgbWFjX2JlbmNoIChnY3J5X21hY19hbGdvX25hbWUgKGkpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYnVmID0gYnVmX2Jhc2UgKyAoKDE2IC0gKChzaXplX3QpYnVmX2Jhc2UgJiAweDBmKSkgJSBidWZmZXJfYWxpZ25tZW50KTsKKworICBhbGdvID0gZ2NyeV9tYWNfbWFwX25hbWUgKGFsZ29uYW1lKTsKKyAgaWYgKCFhbGdvKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGludmFsaWQgaGFzaCBhbGdvcml0aG0gYCVzJ1xuIiwgYWxnb25hbWUpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIG1hY2xlbiA9IGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbiAoYWxnbyk7CisgIGlmIChtYWNsZW4gPiBzaXplb2YobWFjKSkKKyAgICBtYWNsZW4gPSBzaXplb2YobWFjKTsKKworICBrZXlsZW4gPSBnY3J5X21hY19nZXRfYWxnb19rZXlsZW4gKGFsZ28pOworICBpZiAoa2V5bGVuID09IDApCisgICAga2V5bGVuID0gMzI7CisgIGlmIChrZXlsZW4gPiBzaXplb2Yoa2V5KSkKKyAgICBrZXlsZW4gPSBzaXplb2Yoa2V5KTsKKyAgZm9yIChpPTA7IGkgPCBrZXlsZW47IGkrKykKKyAgICBrZXlbaV0gPSAoa2V5bGVuIC0gaSkgXiAweDU0OworCisgIGVyciA9IGdjcnlfbWFjX29wZW4gKCZoZCwgYWxnbywgMCwgTlVMTCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogZXJyb3Igb3BlbmluZyBtYWMgYWxnb3JpdGhtIGAlcyc6ICVzXG4iLCBhbGdvbmFtZSwKKyAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZXJyID0gZ2NyeV9tYWNfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGVycm9yIHNldHRpbmcga2V5IGZvciBtYWMgYWxnb3JpdGhtIGAlcyc6ICVzXG4iLAorICAgICAgICAgICAgICAgYWxnb25hbWUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZm9yIChpPTA7IGkgPCBidWZzaXplOyBpKyspCisgICAgYnVmW2ldID0gaTsKKworICBwcmludGYgKCIlLTIwcyIsIGdjcnlfbWFjX2FsZ29fbmFtZSAoYWxnbykpOworCisgIHN0YXJ0X3RpbWVyICgpOworICBmb3IgKHJlcGNvdW50PTA7IHJlcGNvdW50IDwgbWFjX3JlcGV0aXRpb25zOyByZXBjb3VudCsrKQorICAgIGZvciAoaT0wOyBpIDwgMTAwMDsgaSsrKQorICAgICAgZ2NyeV9tYWNfd3JpdGUgKGhkLCBidWYsIGJ1ZnNpemUpOworICBtYWNvdXRsZW4gPSBtYWNsZW47CisgIGdjcnlfbWFjX3JlYWQgKGhkLCBtYWNbMF0sICZtYWNvdXRsZW4pOworICBzdG9wX3RpbWVyICgpOworICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgZ2NyeV9tYWNfcmVzZXQgKGhkKTsKKyAgc3RhcnRfdGltZXIgKCk7CisgIGZvciAocmVwY291bnQ9MDsgcmVwY291bnQgPCBtYWNfcmVwZXRpdGlvbnM7IHJlcGNvdW50KyspCisgICAgZm9yIChpPTA7IGkgPCAxMDAwOyBpKyspCisgICAgICBmb3IgKHN0ZXA9YnVmc2l6ZS8xMCwgcG9zPTAsIGo9MDsgaiA8IDEwOyBqKyssIHBvcys9c3RlcCkKKyAgICAgICAgZ2NyeV9tYWNfd3JpdGUgKGhkLCAmYnVmW3Bvc10sIHN0ZXApOworICBtYWNvdXRsZW4gPSBtYWNsZW47CisgIGdjcnlfbWFjX3JlYWQgKGhkLCBtYWNbMV0sICZtYWNvdXRsZW4pOworICBzdG9wX3RpbWVyICgpOworICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgZ2NyeV9tYWNfcmVzZXQgKGhkKTsKKyAgc3RhcnRfdGltZXIgKCk7CisgIGZvciAocmVwY291bnQ9MDsgcmVwY291bnQgPCBtYWNfcmVwZXRpdGlvbnM7IHJlcGNvdW50KyspCisgICAgZm9yIChpPTA7IGkgPCAxMDAwOyBpKyspCisgICAgICBmb3IgKHN0ZXA9YnVmc2l6ZS8xMDAsIHBvcz0wLCBqPTA7IGogPCAxMDA7IGorKywgcG9zKz1zdGVwKQorICAgICAgICBnY3J5X21hY193cml0ZSAoaGQsICZidWZbcG9zXSwgc3RlcCk7CisgIG1hY291dGxlbiA9IG1hY2xlbjsKKyAgZ2NyeV9tYWNfcmVhZCAoaGQsIG1hY1syXSwgJm1hY291dGxlbik7CisgIHN0b3BfdGltZXIgKCk7CisgIHByaW50ZiAoIiAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisgIGZmbHVzaCAoc3Rkb3V0KTsKKworICBnY3J5X21hY19jbG9zZSAoaGQpOworCisgIGZvciAoaT0xOyBpIDwgMzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChtZW1jbXAobWFjW2ktMV0sIG1hY1tpXSwgbWFjbGVuKSkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IG1hYyBtaXNtYXRjaCB3aXRoIGFsZ29yaXRobSBgJXMnXG4iLAorICAgICAgICAgICAgICAgICAgIGFsZ29uYW1lKTsKKyAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgIHB1dGNoYXIgKCdcbicpOworICBmZmx1c2ggKHN0ZG91dCk7Cit9CisKKworI2lmZGVmIEhBVkVfVTY0X1RZUEVERUYKK3N0YXRpYyB2b2lkIGNjbV9hZWFkX2luaXQoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgc2l6ZV90IGJ1ZmxlbiwgaW50IGF1dGhsZW4pCit7CisgIGNvbnN0IGludCBfTCA9IDQ7CisgIGNvbnN0IGludCBub25jZWxlbiA9IDE1IC0gX0w7CisgIGNoYXIgbm9uY2Vbbm9uY2VsZW5dOworICB1NjQgcGFyYW1zWzNdOworICBnY3J5X2Vycm9yX3QgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKworICBtZW1zZXQgKG5vbmNlLCAweDMzLCBub25jZWxlbik7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkLCBub25jZSwgbm9uY2VsZW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImdjcnlfY2lwaGVyX3NldGl2IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBwYXJhbXNbMF0gPSBidWZsZW47IC8qIGVuY3J5cHRlZGxlbiAqLworICBwYXJhbXNbMV0gPSAwOyAvKiBhYWRsZW4gKi8KKyAgcGFyYW1zWzJdID0gYXV0aGxlbjsgLyogYXV0aHRhZ2xlbiAqLworICBlcnIgPSBnY3J5X2NpcGhlcl9jdGwgKGhkLCBHQ1JZQ1RMX1NFVF9DQ01fTEVOR1RIUywgcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZ2NyeV9jaXBoZXJfc2V0aXYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorfQorI2VuZGlmCisKKworc3RhdGljIHZvaWQKK2NpcGhlcl9iZW5jaCAoIGNvbnN0IGNoYXIgKmFsZ29uYW1lICkKK3sKKyAgc3RhdGljIGludCBoZWFkZXJfcHJpbnRlZDsKKyAgaW50IGFsZ287CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQ7CisgIGludCBpOworICBpbnQga2V5bGVuLCBibGtsZW47CisgIGNoYXIga2V5WzEyOF07CisgIGNoYXIgKm91dGJ1ZiwgKmJ1ZjsKKyAgY2hhciAqcmF3X291dGJ1ZiwgKnJhd19idWY7CisgIHNpemVfdCBhbGxvY2F0ZWRfYnVmbGVuLCBidWZsZW47CisgIGludCByZXBldGl0aW9uczsKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgaW50IG1vZGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgYmxvY2tlZDsKKyAgICB2b2lkICgqIGNvbnN0IGFlYWRfaW5pdCkoZ2NyeV9jaXBoZXJfaGRfdCBoZCwgc2l6ZV90IGJ1ZmxlbiwgaW50IGF1dGhsZW4pOworICAgIGludCByZXFfYmxvY2tzaXplOworICAgIGludCBhdXRobGVuOworICB9IG1vZGVzW10gPSB7CisgICAgeyBHQ1JZX0NJUEhFUl9NT0RFX0VDQiwgIiAgIEVDQi9TdHJlYW0iLCAxIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9NT0RFX0NCQywgIiAgICAgIENCQyIsIDEgfSwKKyAgICB7IEdDUllfQ0lQSEVSX01PREVfQ0ZCLCAiICAgICAgQ0ZCIiwgMCB9LAorICAgIHsgR0NSWV9DSVBIRVJfTU9ERV9PRkIsICIgICAgICBPRkIiLCAwIH0sCisgICAgeyBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgIiAgICAgIENUUiIsIDAgfSwKKyNpZmRlZiBIQVZFX1U2NF9UWVBFREVGCisgICAgeyBHQ1JZX0NJUEhFUl9NT0RFX0NDTSwgIiAgICAgIENDTSIsIDAsCisgICAgICBjY21fYWVhZF9pbml0LCBHQ1JZX0NDTV9CTE9DS19MRU4sIDggfSwKKyNlbmRpZgorICAgIHsgR0NSWV9DSVBIRVJfTU9ERV9HQ00sICIgICAgICBHQ00iLCAwLAorICAgICAgTlVMTCwgR0NSWV9HQ01fQkxPQ0tfTEVOLCBHQ1JZX0dDTV9CTE9DS19MRU4gfSwKKyAgICB7IEdDUllfQ0lQSEVSX01PREVfU1RSRUFNLCAiIiwgMCB9LAorICAgIHswfQorICB9OworICBpbnQgbW9kZWlkeDsKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisKKworICBpZiAoIWFsZ29uYW1lKQorICAgIHsKKyAgICAgIGZvciAoaT0xOyBpIDwgNDAwOyBpKyspCisgICAgICAgIGlmICggIWdjcnlfY2lwaGVyX3Rlc3RfYWxnbyAoaSkgKQorICAgICAgICAgIGNpcGhlcl9iZW5jaCAoZ2NyeV9jaXBoZXJfYWxnb19uYW1lIChpKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChsYXJnZV9idWZmZXJzKQorICAgIHsKKyAgICAgIGFsbG9jYXRlZF9idWZsZW4gPSAxMDI0ICogMTAwOworICAgICAgcmVwZXRpdGlvbnMgPSAxMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBhbGxvY2F0ZWRfYnVmbGVuID0gMTAyNDsKKyAgICAgIHJlcGV0aXRpb25zID0gMTAwMDsKKyAgICB9CisgIHJlcGV0aXRpb25zICo9IGNpcGhlcl9yZXBldGl0aW9uczsKKworICByYXdfYnVmID0gZ2NyeV94Y2FsbG9jIChhbGxvY2F0ZWRfYnVmbGVuKzE1LCAxKTsKKyAgYnVmID0gKHJhd19idWYKKyAgICAgICAgICsgKCgxNiAtICgoc2l6ZV90KXJhd19idWYgJiAweDBmKSkgJSBidWZmZXJfYWxpZ25tZW50KSk7CisgIG91dGJ1ZiA9IHJhd19vdXRidWYgPSBnY3J5X3htYWxsb2MgKGFsbG9jYXRlZF9idWZsZW4rMTUpOworICBvdXRidWYgPSAocmF3X291dGJ1ZgorICAgICAgICAgICAgKyAoKDE2IC0gKChzaXplX3QpcmF3X291dGJ1ZiAmIDB4MGYpKSAlIGJ1ZmZlcl9hbGlnbm1lbnQpKTsKKworICBpZiAoIWhlYWRlcl9wcmludGVkKQorICAgIHsKKyAgICAgIGlmIChjaXBoZXJfcmVwZXRpdGlvbnMgIT0gMSkKKyAgICAgICAgcHJpbnRmICgiUnVubmluZyBlYWNoIHRlc3QgJWQgdGltZXMuXG4iLCBjaXBoZXJfcmVwZXRpdGlvbnMpOworICAgICAgcHJpbnRmICgiJS0xMnMiLCAiIik7CisgICAgICBmb3IgKG1vZGVpZHg9MDsgbW9kZXNbbW9kZWlkeF0ubW9kZTsgbW9kZWlkeCsrKQorICAgICAgICBpZiAoKm1vZGVzW21vZGVpZHhdLm5hbWUpCisgICAgICAgICAgcHJpbnRmICgiICUtMTVzIiwgbW9kZXNbbW9kZWlkeF0ubmFtZSApOworICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICBwcmludGYgKCIlLTEycyIsICIiKTsKKyAgICAgIGZvciAobW9kZWlkeD0wOyBtb2Rlc1ttb2RlaWR4XS5tb2RlOyBtb2RlaWR4KyspCisgICAgICAgIGlmICgqbW9kZXNbbW9kZWlkeF0ubmFtZSkKKyAgICAgICAgICBwcmludGYgKCIgLS0tLS0tLS0tLS0tLS0tIiApOworICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICBoZWFkZXJfcHJpbnRlZCA9IDE7CisgICAgfQorCisgIGFsZ28gPSBnY3J5X2NpcGhlcl9tYXBfbmFtZSAoYWxnb25hbWUpOworICBpZiAoIWFsZ28pCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogaW52YWxpZCBjaXBoZXIgYWxnb3JpdGhtIGAlcydcbiIsIGFsZ29uYW1lKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBrZXlsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4gKGFsZ28pOworICBpZiAoIWtleWxlbikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBmYWlsZWQgdG8gZ2V0IGtleSBsZW5ndGggZm9yIGFsZ29yaXRobSBgJXMnXG4iLAorCSAgICAgICBhbGdvbmFtZSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIGlmICgga2V5bGVuID4gc2l6ZW9mIGtleSApCisgICAgeworICAgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBhbGdvICVkLCBrZXlsZW5ndGggcHJvYmxlbSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICBhbGdvLCBrZXlsZW4gKTsKKyAgICAgICAgZXhpdCAoMSk7CisgICAgfQorICBmb3IgKGk9MDsgaSA8IGtleWxlbjsgaSsrKQorICAgIGtleVtpXSA9IGkgKyAoY2xvY2sgKCkgJiAweGZmKTsKKworICBibGtsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGFsZ28pOworICBpZiAoIWJsa2xlbikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBmYWlsZWQgdG8gZ2V0IGJsb2NrIGxlbmd0aCBmb3IgYWxnb3JpdGhtIGAlcydcbiIsCisJICAgICAgIGFsZ29uYW1lKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBwcmludGYgKCIlLTEycyIsIGdjcnlfY2lwaGVyX2FsZ29fbmFtZSAoYWxnbykpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgZm9yIChtb2RlaWR4PTA7IG1vZGVzW21vZGVpZHhdLm1vZGU7IG1vZGVpZHgrKykKKyAgICB7CisgICAgICBpZiAoKGJsa2xlbiA+IDEgJiYgbW9kZXNbbW9kZWlkeF0ubW9kZSA9PSBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICAgICAgICB8fCAoYmxrbGVuID09IDEgJiYgbW9kZXNbbW9kZWlkeF0ubW9kZSAhPSBHQ1JZX0NJUEhFUl9NT0RFX1NUUkVBTSkpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAobW9kZXNbbW9kZWlkeF0ucmVxX2Jsb2Nrc2l6ZSA+IDAKKyAgICAgICAgICAmJiBibGtsZW4gIT0gbW9kZXNbbW9kZWlkeF0ucmVxX2Jsb2Nrc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50ZiAoIiAlN3MgJTdzIiwgIi0iLCAiLSIgKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICBmb3IgKGk9MDsgaSA8IHNpemVvZiBidWY7IGkrKykKKyAgICAgICAgYnVmW2ldID0gaTsKKworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfb3BlbiAoJmhkLCBhbGdvLCBtb2Rlc1ttb2RlaWR4XS5tb2RlLCAwKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBlcnJvciBvcGVuaW5nIGNpcGhlciBgJXMnXG4iLCBhbGdvbmFtZSk7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKworICAgICAgaWYgKCFjaXBoZXJfd2l0aF9rZXlzZXR1cCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleSwga2V5bGVuKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgYnVmbGVuID0gYWxsb2NhdGVkX2J1ZmxlbjsKKyAgICAgIGlmIChtb2Rlc1ttb2RlaWR4XS5ibG9ja2VkKQorICAgICAgICBidWZsZW4gPSAoYnVmbGVuIC8gYmxrbGVuKSAqIGJsa2xlbjsKKworICAgICAgc3RhcnRfdGltZXIgKCk7CisgICAgICBmb3IgKGk9ZXJyPTA7ICFlcnIgJiYgaSA8IHJlcGV0aXRpb25zOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoY2lwaGVyX3dpdGhfa2V5c2V0dXApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleSwga2V5bGVuKTsKKyAgICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChtb2Rlc1ttb2RlaWR4XS5hZWFkX2luaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICgqbW9kZXNbbW9kZWlkeF0uYWVhZF9pbml0KSAoaGQsIGJ1ZmxlbiwgbW9kZXNbbW9kZWlkeF0uYXV0aGxlbik7CisgICAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQgKGhkLCBvdXRidWYsIGJ1ZmxlbiwgYnVmLCBidWZsZW4pOworICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9nZXR0YWcgKGhkLCBvdXRidWYsIG1vZGVzW21vZGVpZHhdLmF1dGhsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGQsIG91dGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHN0b3BfdGltZXIgKCk7CisKKyAgICAgIHByaW50ZiAoIiAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImdjcnlfY2lwaGVyX2VuY3J5cHQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikgKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9vcGVuICgmaGQsIGFsZ28sIG1vZGVzW21vZGVpZHhdLm1vZGUsIDApOworICAgICAgaWYgKGVycikKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGVycm9yIG9wZW5pbmcgY2lwaGVyIGAlcycvbiIsIGFsZ29uYW1lKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorCisgICAgICBpZiAoIWNpcGhlcl93aXRoX2tleXNldHVwKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9jbG9zZSAoaGQpOworICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgIGZvciAoaT1lcnI9MDsgIWVyciAmJiBpIDwgcmVwZXRpdGlvbnM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChjaXBoZXJfd2l0aF9rZXlzZXR1cCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlIChoZCk7CisgICAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKG1vZGVzW21vZGVpZHhdLmFlYWRfaW5pdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKCptb2Rlc1ttb2RlaWR4XS5hZWFkX2luaXQpIChoZCwgYnVmbGVuLCBtb2Rlc1ttb2RlaWR4XS5hdXRobGVuKTsKKyAgICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2NoZWNrdGFnIChoZCwgb3V0YnVmLCBtb2Rlc1ttb2RlaWR4XS5hdXRobGVuKTsKKyAgICAgICAgICAgICAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSA9PSBHUEdfRVJSX0NIRUNLU1VNKQorICAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT19FUlJPUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dGJ1ZiwgYnVmbGVuLCBidWYsIGJ1Zmxlbik7CisgICAgICAgIH0KKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICAgICAgZmZsdXNoIChzdGRvdXQpOworICAgICAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJnY3J5X2NpcGhlcl9kZWNyeXB0IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpICk7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgcHV0Y2hhciAoJ1xuJyk7CisgIGdjcnlfZnJlZSAocmF3X2J1Zik7CisgIGdjcnlfZnJlZSAocmF3X291dGJ1Zik7Cit9CisKKworCitzdGF0aWMgdm9pZAorcnNhX2JlbmNoIChpbnQgaXRlcmF0aW9ucywgaW50IHByaW50X2hlYWRlciwgaW50IG5vX2JsaW5kaW5nKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGludCBwX3NpemVzW10gPSB7IDEwMjQsIDIwNDgsIDMwNzIsIDQwOTYgfTsKKyAgaW50IHRlc3RubzsKKworICBpZiAocHJpbnRfaGVhZGVyKQorICAgIHByaW50ZiAoIkFsZ29yaXRobSAgICAgICAgIGdlbmVyYXRlICU0ZCpzaWduICU0ZCp2ZXJpZnlcbiIKKyAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisgICAgICAgICAgICBpdGVyYXRpb25zLCBpdGVyYXRpb25zICk7CisgIGZvciAodGVzdG5vPTA7IHRlc3RubyA8IERJTSAocF9zaXplcyk7IHRlc3RubysrKQorICAgIHsKKyAgICAgIGdjcnlfc2V4cF90IGtleV9zcGVjLCBrZXlfcGFpciwgcHViX2tleSwgc2VjX2tleTsKKyAgICAgIGdjcnlfbXBpX3QgeDsKKyAgICAgIGdjcnlfc2V4cF90IGRhdGE7CisgICAgICBnY3J5X3NleHBfdCBzaWcgPSBOVUxMOworICAgICAgaW50IGNvdW50OworCisgICAgICBwcmludGYgKCJSU0EgJTNkIGJpdCAgICAiLCBwX3NpemVzW3Rlc3Rub10pOworICAgICAgZmZsdXNoIChzdGRvdXQpOworCisgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9maXBzX21vZGVfYWN0aXZlICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIihnZW5rZXkgKFJTQSAobmJpdHMgJWQpKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIihnZW5rZXkgKFJTQSAobmJpdHMgJWQpKHRyYW5zaWVudC1rZXkpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3NpemVzW3Rlc3Rub10pOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY3JlYXRpbmcgUy1leHByZXNzaW9uIGZhaWxlZDogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKGVycikpOworCisgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgIGVyciA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5X3BhaXIsIGtleV9zcGVjKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoImNyZWF0aW5nICVkIGJpdCBSU0Ega2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgcF9zaXplc1t0ZXN0bm9dLCBnY3J5X3N0cmVycm9yIChlcnIpKTsKKworICAgICAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXlfcGFpciwgInB1YmxpYy1rZXkiLCAwKTsKKyAgICAgIGlmICghIHB1Yl9rZXkpCisgICAgICAgIGRpZSAoInB1YmxpYyBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKyAgICAgIHNlY19rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5X3BhaXIsICJwcml2YXRlLWtleSIsIDApOworICAgICAgaWYgKCEgc2VjX2tleSkKKyAgICAgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfcGFpcik7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5X3NwZWMpOworCisgICAgICBzdG9wX3RpbWVyICgpOworICAgICAgcHJpbnRmICgiICAgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICAgICAgZmZsdXNoIChzdGRvdXQpOworCisgICAgICB4ID0gZ2NyeV9tcGlfbmV3IChwX3NpemVzW3Rlc3Rub10pOworICAgICAgZ2NyeV9tcGlfcmFuZG9taXplICh4LCBwX3NpemVzW3Rlc3Rub10tOCwgR0NSWV9XRUFLX1JBTkRPTSk7CisgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZkYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdykgKHZhbHVlICVtKSkiLCB4KTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29udmVydGluZyBkYXRhIGZhaWxlZDogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKGVycikpOworCisgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgIGZvciAoY291bnQ9MDsgY291bnQgPCBpdGVyYXRpb25zOyBjb3VudCsrKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgZXJyID0gZ2NyeV9wa19zaWduICgmc2lnLCBkYXRhLCBzZWNfa2V5KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZGllICgic2lnbmluZyBmYWlsZWQgKCVkKTogJXNcbiIsIGNvdW50LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICB9CisgICAgICBzdG9wX3RpbWVyICgpOworICAgICAgcHJpbnRmICgiICAgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICAgICAgZmZsdXNoIChzdGRvdXQpOworCisgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgIGZvciAoY291bnQ9MDsgY291bnQgPCBpdGVyYXRpb25zOyBjb3VudCsrKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgZGF0YSwgcHViX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNlY2tleTpcbiIsIHNlY19rZXkpOworICAgICAgICAgICAgICBzaG93X3NleHAgKCJkYXRhOlxuIiwgZGF0YSk7CisgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZzpcbiIsIHNpZyk7CisgICAgICAgICAgICAgIGRpZSAoInZlcmlmeSBmYWlsZWQgKCVkKTogJXNcbiIsIGNvdW50LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBzdG9wX3RpbWVyICgpOworICAgICAgcHJpbnRmICgiICAgICAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisKKyAgICAgIGlmIChub19ibGluZGluZykKKyAgICAgICAgeworICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgICB4ID0gZ2NyeV9tcGlfbmV3IChwX3NpemVzW3Rlc3Rub10pOworICAgICAgICAgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoeCwgcF9zaXplc1t0ZXN0bm9dLTgsIEdDUllfV0VBS19SQU5ET00pOworICAgICAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmRhdGEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIG5vLWJsaW5kaW5nKSAodmFsdWUgJW0pKSIsIHgpOworICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb252ZXJ0aW5nIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgICAgICBmb3IgKGNvdW50PTA7IGNvdW50IDwgaXRlcmF0aW9uczsgY291bnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgICAgIGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgZGF0YSwgc2VjX2tleSk7CisgICAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgZGllICgic2lnbmluZyBmYWlsZWQgKCVkKTogJXNcbiIsIGNvdW50LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgfQorICAgICAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICAgICAgcHJpbnRmICgiICAgJXMiLCBlbGFwc2VkX3RpbWUgKCkpOworICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgfQorCisgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoZGF0YSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2VjX2tleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocHViX2tleSk7CisgICAgfQorfQorCisKKworc3RhdGljIHZvaWQKK2RzYV9iZW5jaCAoaW50IGl0ZXJhdGlvbnMsIGludCBwcmludF9oZWFkZXIpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3QgcHViX2tleVszXSwgc2VjX2tleVszXTsKKyAgaW50IHBfc2l6ZXNbM10gPSB7IDEwMjQsIDIwNDgsIDMwNzIgfTsKKyAgaW50IHFfc2l6ZXNbM10gPSB7IDE2MCwgMjI0LCAyNTYgfTsKKyAgZ2NyeV9zZXhwX3QgZGF0YTsKKyAgZ2NyeV9zZXhwX3Qgc2lnID0gTlVMTDsKKyAgaW50IGksIGo7CisKKyAgZXJyID0gZ2NyeV9zZXhwX3NzY2FuIChwdWJfa2V5KzAsIE5VTEwsIHNhbXBsZV9wdWJsaWNfZHNhX2tleV8xMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3B1YmxpY19kc2Ffa2V5XzEwMjQpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gZ2NyeV9zZXhwX3NzY2FuIChzZWNfa2V5KzAsIE5VTEwsIHNhbXBsZV9wcml2YXRlX2RzYV9rZXlfMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3ByaXZhdGVfZHNhX2tleV8xMDI0KSk7CisgIGlmICghZXJyKQorICAgIGVyciA9IGdjcnlfc2V4cF9zc2NhbiAocHViX2tleSsxLCBOVUxMLCBzYW1wbGVfcHVibGljX2RzYV9rZXlfMjA0OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3B1YmxpY19kc2Ffa2V5XzIwNDgpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gZ2NyeV9zZXhwX3NzY2FuIChzZWNfa2V5KzEsIE5VTEwsIHNhbXBsZV9wcml2YXRlX2RzYV9rZXlfMjA0OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3ByaXZhdGVfZHNhX2tleV8yMDQ4KSk7CisgIGlmICghZXJyKQorICAgIGVyciA9IGdjcnlfc2V4cF9zc2NhbiAocHViX2tleSsyLCBOVUxMLCBzYW1wbGVfcHVibGljX2RzYV9rZXlfMzA3MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3B1YmxpY19kc2Ffa2V5XzMwNzIpKTsKKyAgaWYgKCFlcnIpCisgICAgZXJyID0gZ2NyeV9zZXhwX3NzY2FuIChzZWNfa2V5KzIsIE5VTEwsIHNhbXBsZV9wcml2YXRlX2RzYV9rZXlfMzA3MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoc2FtcGxlX3ByaXZhdGVfZHNhX2tleV8zMDcyKSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogY29udmVydGluZyBzYW1wbGUga2V5cyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgaWYgKHByaW50X2hlYWRlcikKKyAgICBwcmludGYgKCJBbGdvcml0aG0gICAgICAgICBnZW5lcmF0ZSAlNGQqc2lnbiAlNGQqdmVyaWZ5XG4iCisgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorICAgICAgICAgICAgaXRlcmF0aW9ucywgaXRlcmF0aW9ucyApOworICBmb3IgKGk9MDsgaSA8IERJTSAocV9zaXplcyk7IGkrKykKKyAgICB7CisgICAgICBnY3J5X21waV90IHg7CisKKyAgICAgIHggPSBnY3J5X21waV9uZXcgKHFfc2l6ZXNbaV0pOworICAgICAgZ2NyeV9tcGlfcmFuZG9taXplICh4LCBxX3NpemVzW2ldLCBHQ1JZX1dFQUtfUkFORE9NKTsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmRhdGEsIE5VTEwsICIoZGF0YSAoZmxhZ3MgcmF3KSAodmFsdWUgJW0pKSIsIHgpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoeCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogY29udmVydGluZyBkYXRhIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKworICAgICAgcHJpbnRmICgiRFNBICVkLyVkICAgICAgICAgICAgIC0iLCBwX3NpemVzW2ldLCBxX3NpemVzW2ldKTsKKyAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKworICAgICAgc3RhcnRfdGltZXIgKCk7CisgICAgICBmb3IgKGo9MDsgaiA8IGl0ZXJhdGlvbnM7IGorKykKKyAgICAgICAgeworICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzaWcpOworICAgICAgICAgIGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgZGF0YSwgc2VjX2tleVtpXSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IHNpZ25pbmcgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgICAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisgICAgICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgICAgIHN0YXJ0X3RpbWVyICgpOworICAgICAgZm9yIChqPTA7IGogPCBpdGVyYXRpb25zOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBkYXRhLCBwdWJfa2V5W2ldKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogdmVyaWZ5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBzdG9wX3RpbWVyICgpOworICAgICAgcHJpbnRmICgiICAgICAlc1xuIiwgZWxhcHNlZF90aW1lICgpKTsKKyAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoZGF0YSk7CisgICAgICBzaWcgPSBOVUxMOworICAgIH0KKworCisgIGZvciAoaT0wOyBpIDwgRElNIChxX3NpemVzKTsgaSsrKQorICAgIHsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5W2ldKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwdWJfa2V5W2ldKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK2VjY19iZW5jaCAoaW50IGl0ZXJhdGlvbnMsIGludCBwcmludF9oZWFkZXIpCit7CisjaWYgVVNFX0VDQworICBncGdfZXJyb3JfdCBlcnI7CisgIGNvbnN0IGNoYXIgKnBfc2l6ZXNbXSA9IHsgIjE5MiIsICIyMjQiLCAiMjU2IiwgIjM4NCIsICI1MjEiLCAiRWQyNTUxOSIsCisgICAgICAgICAgICAgICJnb3N0MjU2IiwgImdvc3Q1MTIiIH07CisgIGludCB0ZXN0bm87CisKKyAgaWYgKHByaW50X2hlYWRlcikKKyAgICBwcmludGYgKCJBbGdvcml0aG0gICAgICAgICBnZW5lcmF0ZSAlNGQqc2lnbiAlNGQqdmVyaWZ5XG4iCisgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorICAgICAgICAgICAgaXRlcmF0aW9ucywgaXRlcmF0aW9ucyApOworICBmb3IgKHRlc3Rubz0wOyB0ZXN0bm8gPCBESU0gKHBfc2l6ZXMpOyB0ZXN0bm8rKykKKyAgICB7CisgICAgICBnY3J5X3NleHBfdCBrZXlfc3BlYywga2V5X3BhaXIsIHB1Yl9rZXksIHNlY19rZXk7CisgICAgICBnY3J5X21waV90IHg7CisgICAgICBnY3J5X3NleHBfdCBkYXRhOworICAgICAgZ2NyeV9zZXhwX3Qgc2lnID0gTlVMTDsKKyAgICAgIGludCBjb3VudDsKKyAgICAgIGludCBwX3NpemU7CisgICAgICBpbnQgaXNfZWQyNTUxOTsKKyAgICAgIGludCBpc19nb3N0OworCisgICAgICBpc19lZDI1NTE5ID0gIXN0cmNtcCAocF9zaXplc1t0ZXN0bm9dLCAiRWQyNTUxOSIpOworICAgICAgaXNfZ29zdCA9ICFzdHJuY21wIChwX3NpemVzW3Rlc3Rub10sICJnb3N0IiwgNCk7CisgICAgICBpZiAoaXNfZWQyNTUxOSkKKyAgICAgICAgeworICAgICAgICAgIHBfc2l6ZSA9IDI1NjsKKyAgICAgICAgICBwcmludGYgKCJFZERTQSBFZDI1NTE5ICIpOworICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoaXNfZ29zdCkKKyAgICAgICAgeworICAgICAgICAgIHBfc2l6ZSA9IGF0b2kgKHBfc2l6ZXNbdGVzdG5vXSArIDQpOworICAgICAgICAgIHByaW50ZiAoIkdPU1QgICUzZCBiaXQgIiwgcF9zaXplKTsKKyAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHBfc2l6ZSA9IGF0b2kgKHBfc2l6ZXNbdGVzdG5vXSk7CisgICAgICAgICAgcHJpbnRmICgiRUNEU0EgJTNkIGJpdCAiLCBwX3NpemUpOworICAgICAgICB9CisgICAgICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgICAgIGlmIChpc19lZDI1NTE5KQorICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleSAoZWNkc2EgKGN1cnZlIFwiRWQyNTUxOVwiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGZsYWdzIGVkZHNhKSkpIik7CisgICAgICBlbHNlIGlmIChpc19nb3N0KQorICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleSAoZWNkc2EgKGN1cnZlICVzKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3NpemUgPT0gMjU2ID8gIkdPU1QyMDAxLXRlc3QiIDogIkdPU1QyMDEyLXRlc3QiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgma2V5X3NwZWMsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihnZW5rZXkgKEVDRFNBIChuYml0cyAlZCkpKSIsIHBfc2l6ZSk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJjcmVhdGluZyBTLWV4cHJlc3Npb24gZmFpbGVkOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgIHN0YXJ0X3RpbWVyICgpOworICAgICAgZXJyID0gZ2NyeV9wa19nZW5rZXkgKCZrZXlfcGFpciwga2V5X3NwZWMpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY3JlYXRpbmcgJWQgYml0IEVDQyBrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICBwX3NpemUsIGdjcnlfc3RyZXJyb3IgKGVycikpOworICAgICAgaWYgKHZlcmJvc2UgPiAyKQorICAgICAgICBzaG93X3NleHAgKCJFQ0Mga2V5OlxuIiwga2V5X3BhaXIpOworCisgICAgICBwdWJfa2V5ID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleV9wYWlyLCAicHVibGljLWtleSIsIDApOworICAgICAgaWYgKCEgcHViX2tleSkKKyAgICAgICAgZGllICgicHVibGljIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworICAgICAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXlfcGFpciwgInByaXZhdGUta2V5IiwgMCk7CisgICAgICBpZiAoISBzZWNfa2V5KQorICAgICAgICBkaWUgKCJwcml2YXRlIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9wYWlyKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfc3BlYyk7CisKKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgICAgICVzIiwgZWxhcHNlZF90aW1lICgpKTsKKyAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKworICAgICAgeCA9IGdjcnlfbXBpX25ldyAocF9zaXplKTsKKyAgICAgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoeCwgcF9zaXplLCBHQ1JZX1dFQUtfUkFORE9NKTsKKyAgICAgIGlmIChpc19lZDI1NTE5KQorICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZkYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgZWRkc2EpKGhhc2gtYWxnbyBzaGE1MTIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHZhbHVlICVtKSkiLCB4KTsKKyAgICAgIGVsc2UgaWYgKGlzX2dvc3QpCisgICAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmRhdGEsIE5VTEwsICIoZGF0YSAoZmxhZ3MgZ29zdCkgKHZhbHVlICVtKSkiLCB4KTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmZGF0YSwgTlVMTCwgIihkYXRhIChmbGFncyByYXcpICh2YWx1ZSAlbSkpIiwgeCk7CisgICAgICBnY3J5X21waV9yZWxlYXNlICh4KTsKKworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29udmVydGluZyBkYXRhIGZhaWxlZDogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKGVycikpOworCisgICAgICBzdGFydF90aW1lciAoKTsKKyAgICAgIGZvciAoY291bnQ9MDsgY291bnQgPCBpdGVyYXRpb25zOyBjb3VudCsrKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgZXJyID0gZ2NyeV9wa19zaWduICgmc2lnLCBkYXRhLCBzZWNfa2V5KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICAgICAgICAgICAgICAgICAgc2hvd19zZXhwICgic2lnbmluZyBrZXk6XG4iLCBzZWNfa2V5KTsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZ25lZCBkYXRhOlxuIiwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkaWUgKCJzaWduaW5nIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgICAlcyIsIGVsYXBzZWRfdGltZSAoKSk7CisgICAgICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgICAgIHN0YXJ0X3RpbWVyICgpOworICAgICAgZm9yIChjb3VudD0wOyBjb3VudCA8IGl0ZXJhdGlvbnM7IGNvdW50KyspCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBkYXRhLCBwdWJfa2V5KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgic2Vja2V5OlxuIiwgc2VjX2tleSk7CisgICAgICAgICAgICAgIHNob3dfc2V4cCAoImRhdGE6XG4iLCBkYXRhKTsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgic2lnOlxuIiwgc2lnKTsKKyAgICAgICAgICAgICAgZGllICgidmVyaWZ5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHN0b3BfdGltZXIgKCk7CisgICAgICBwcmludGYgKCIgICAgICVzXG4iLCBlbGFwc2VkX3RpbWUgKCkpOworICAgICAgZmZsdXNoIChzdGRvdXQpOworCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2lnKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChkYXRhKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5KTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwdWJfa2V5KTsKKyAgICB9CisjZW5kaWYgLypVU0VfRUNDKi8KK30KKworCisKK3N0YXRpYyB2b2lkCitkb19wb3dtICggY29uc3QgY2hhciAqbl9zdHIsIGNvbnN0IGNoYXIgKmVfc3RyLCBjb25zdCBjaGFyICptX3N0cikKK3sKKyAgZ2NyeV9tcGlfdCBlLCBuLCBtc2csIGNpcDsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgaW50IGk7CisKKyAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJm4sIEdDUllNUElfRk1UX0hFWCwgbl9zdHIsIDAsIDApOworICBpZiAoZXJyKSBCVUcgKCk7CisgIGVyciA9IGdjcnlfbXBpX3NjYW4gKCZlLCBHQ1JZTVBJX0ZNVF9IRVgsIGVfc3RyLCAwLCAwKTsKKyAgaWYgKGVycikgQlVHICgpOworICBlcnIgPSBnY3J5X21waV9zY2FuICgmbXNnLCBHQ1JZTVBJX0ZNVF9IRVgsIG1fc3RyLCAwLCAwKTsKKyAgaWYgKGVycikgQlVHICgpOworCisgIGNpcCA9IGdjcnlfbXBpX25ldyAoMCk7CisKKyAgc3RhcnRfdGltZXIgKCk7CisgIGZvciAoaT0wOyBpIDwgMTAwMDsgaSsrKQorICAgIGdjcnlfbXBpX3Bvd20gKGNpcCwgbXNnLCBlLCBuKTsKKyAgc3RvcF90aW1lciAoKTsKKyAgcHJpbnRmICgiICVzIiwgZWxhcHNlZF90aW1lICgpKTsgZmZsdXNoIChzdGRvdXQpOworLyogICAgeyAqLworLyogICAgICBjaGFyICpidWY7ICovCisKKy8qICAgICAgaWYgKGdjcnlfbXBpX2FwcmludCAoR0NSWU1QSV9GTVRfSEVYLCAodm9pZCoqKSZidWYsIE5VTEwsIGNpcCkpICovCisvKiAgICAgICAgQlVHICgpOyAqLworLyogICAgICBwcmludGYgKCJyZXN1bHQ6ICVzXG4iLCBidWYpOyAqLworLyogICAgICBnY3J5X2ZyZWUgKGJ1Zik7ICovCisvKiAgICB9ICovCisgIGdjcnlfbXBpX3JlbGVhc2UgKGNpcCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG1zZyk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG4pOworICBnY3J5X21waV9yZWxlYXNlIChlKTsKK30KKworCitzdGF0aWMgdm9pZAorbXBpX2JlbmNoICh2b2lkKQoreworICBwcmludGYgKCIlLTEwcyIsICJwb3dtIik7IGZmbHVzaCAoc3Rkb3V0KTsKKworICBkb19wb3dtICgKKyIyMEE5NDQxN0Q0RDVFRjJCMkRBOTkxNjVDN0RDODdEQURCMzk3OUI3Mjk2MUFGOTBEMDlENTlCQTI0Q0I5QTEwMTY2RkRDQ0M5QzY1OUYyQjk2MjZFQzIzRjNGQTQyNUY1NjRBMDcyQkE5NDFCMDNGQTgxNzY3Q0MyODlFNCIsCisgICAgICAgICAgICIyOSIsCisiQjg3MDE4N0EzMjNGMUVDRDVCOEEwQjQyNDk1MDczMzVBMUM0Q0U4Mzk0RjM4RkQ3NkIwOEM3OEE0MkM1OEY2RUExMzZBQ0Y5MERGRTg2MDM2OTdCMTY5NEEzRDgxMTE0RDYxMTdBQzE4MTE5NzlDNTFDNEREMDEzRDUyRjgiCisgICAgICAgICAgICk7CisgIGRvX3Bvd20gKAorICAgICAgICAgICAiMjBBOTQ0MTdENEQ1RUYyQjJEQTk5MTY1QzdEQzg3REFEQjM5NzlCNzI5NjFBRjkwRDA5RDU5QkEyNENCOUExMDE2NkZEQ0NDOUM2NTlGMkI5NjI2RUMyM0YzRkE0MjVGNTY0QTA3MkJBOTQxQjAzRkE4MTc2N0NDMjg5RTQxMDcxRjAyNDY4NzlBNDQyNjU4RkJEMThDMTc3MTU3MUU3MDczRUVFQjIxNjBCQTBDQkZCMzQwNEQ2MjcwNjlBNkNGQkQ1Mzg2N0FEMkQ5RDQwMjMxNjQ4MDAwNzg3QjVDODQxNzZCNDMzNjE0NDY0NEFFNzFBNDAzQ0E0MDcxNiIsCisgICAgICAgICAgICIyOSIsCisgICAgICAgICAgICJCODcwMTg3QTMyM0YxRUNENUI4QTBCNDI0OTUwNzMzNUExQzRDRTgzOTRGMzhGRDc2QjA4Qzc4QTQyQzU4RjZFQTEzNkFDRjkwREZFODYwMzY5N0IxNjk0QTNEODExMTRENjExN0FDMTgxMTk3OUM1MUM0REQwMTNENTJGOEZDNEVFNEJCNDQ2QjgzRTQ4QUJFRDdEQjgxQ0JGNUU4MURFNDc1OUU4RDY4QUM5ODU4NDZEOTk5Rjk2QjBEOEE4MEU1QzY5RDI3MkM3NjZBQjhBMjNCNDBENTBBNEZBODg5RkJDMkJEMjYyNDIyMkQ4RUIyOTdGNEJBRUY4NTkzODQ3IgorICAgICAgICAgICApOworICBkb19wb3dtICgKKyAgICAgICAgICAgIjIwQTk0NDE3RDRENUVGMkIyREE5OTE2NUM3REM4N0RBREIzOTc5QjcyOTYxQUY5MEQwOUQ1OUJBMjRDQjlBMTAxNjZGRENDQzlDNjU5RjJCOTYyNkVDMjNGM0ZBNDI1RjU2NEEwNzJCQTk0MUIwM0ZBODE3NjdDQzI4OUU0MTA3MUYwMjQ2ODc5QTQ0MjY1OEZCRDE4QzE3NzE1NzFFNzA3M0VFRUIyMTYwQkEwQ0JGQjM0MDRENjI3MDY5QTZDRkJENTM4NjdBRDJEOUQ0MDIzMTY0ODAwMDc4N0I1Qzg0MTc2QjQzMzYxNDQ2NDRBRTcxQTQwM0NBNDA3MTYyMEE5NDQxN0Q0RDVFRjJCMkRBOTkxNjVDN0RDODdEQURCMzk3OUI3Mjk2MUFGOTBEMDlENTlCQTI0Q0I5QTEwMTY2RkRDQ0M5QzY1OUYyQjk2MjZFQzIzRjNGQTQyNUY1NjRBMDcyQkE5NDFCMDNGQTgxNzY3Q0MyODlFNDEwNzFGMDI0Njg3OUE0NDI2NThGQkQxOEMxNzcxNTcxRTcwNzNFRUVCMjE2MEJBMENCRkIzNDA0RDYyNzA2OUE2Q0ZCRDUzODY3QUQyRDlENDAyMzE2NDgwMDA3ODdCNUM4NDE3NkI0MzM2MTQ0NjQ0QUU3MUE0MDNDQTQwNzE2IiwKKyAgICAgICAgICAgIjI5IiwKKyAgICAgICAgICAgIkI4NzAxODdBMzIzRjFFQ0Q1QjhBMEI0MjQ5NTA3MzM1QTFDNENFODM5NEYzOEZENzZCMDhDNzhBNDJDNThGNkVBMTM2QUNGOTBERkU4NjAzNjk3QjE2OTRBM0Q4MTExNEQ2MTE3QUMxODExOTc5QzUxQzRERDAxM0Q1MkY4RkM0RUU0QkI0NDZCODNFNDhBQkVEN0RCODFDQkY1RTgxREU0NzU5RThENjhBQzk4NTg0NkQ5OTlGOTZCMEQ4QTgwRTVDNjlEMjcyQzc2NkFCOEEyM0I0MEQ1MEE0RkE4ODlGQkMyQkQyNjI0MjIyRDhFQjI5N0Y0QkFFRjg1OTM4NDdCODcwMTg3QTMyM0YxRUNENUI4QTBCNDI0OTUwNzMzNUExQzRDRTgzOTRGMzhGRDc2QjA4Qzc4QTQyQzU4RjZFQTEzNkFDRjkwREZFODYwMzY5N0IxNjk0QTNEODExMTRENjExN0FDMTgxMTk3OUM1MUM0REQwMTNENTJGOEZDNEVFNEJCNDQ2QjgzRTQ4QUJFRDdEQjgxQ0JGNUU4MURFNDc1OUU4RDY4QUM5ODU4NDZEOTk5Rjk2QjBEOEE4MEU1QzY5RDI3MkM3NjZBQjhBMjNCNDBENTBBNEZBODg5RkJDMkJEMjYyNDIyMkQ4RUIyOTdGNEJBRUY4NTkzODQ3IgorICAgICAgICAgICApOworCisgIHB1dGNoYXIgKCdcbicpOworCisKK30KKworCitpbnQKK21haW4oIGludCBhcmdjLCBjaGFyICoqYXJndiApCit7CisgIGludCBsYXN0X2FyZ2MgPSAtMTsKKyAgaW50IG5vX2JsaW5kaW5nID0gMDsKKyAgaW50IHVzZV9yYW5kb21fZGFlbW9uID0gMDsKKyAgaW50IHVzZV9zZWNtZW0gPSAwOworICBpbnQgd2l0aF9wcm9ncmVzcyA9IDA7CisgIGludCBkZWJ1ZyA9IDA7CisgIGludCBwa19jb3VudCA9IDEwMDsKKworICBidWZmZXJfYWxpZ25tZW50ID0gMTsKKworICBpZiAoYXJnYykKKyAgICB7IGFyZ2MtLTsgYXJndisrOyB9CisKKyAgLyogV2Ugc2tpcCB0aGlzIHRlc3QgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIHRlc3Qgc3VpdGUgKG5vIGFyZ3MKKyAgICAgYW5kIHNyY2RpciBkZWZpbmVkKSBhbmQgR0NSWVBUX05PX0JFTkNITUFSS1MgaXMgc2V0LiAgKi8KKyAgaWYgKCFhcmdjICYmIGdldGVudiAoInNyY2RpciIpICYmIGdldGVudiAoIkdDUllQVF9OT19CRU5DSE1BUktTIikpCisgICAgZXhpdCAoNzcpOworCisgIGlmIChnZXRlbnYgKCJHQ1JZUFRfSU5fUkVHUkVTU0lPTl9URVNUIikpCisgICAgeworICAgICAgaW5fcmVncmVzc2lvbl90ZXN0ID0gMTsKKyAgICAgIHBrX2NvdW50ID0gMTA7CisgICAgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorICAgICAgICB7CisgICAgICAgICAgZnB1dHMgKCJ1c2FnZTogYmVuY2htYXJrICIKKyAgICAgICAgICAgICAgICAgIlttZHxtYWN8Y2lwaGVyfHJhbmRvbXxtcGl8cnNhfGRzYXxlY2MgW2FsZ29uYW1lc11dXG4iLAorICAgICAgICAgICAgICAgICBzdGRvdXQpOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSsrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVidWciKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UgKz0gMjsKKyAgICAgICAgICBkZWJ1ZysrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdXNlLXJhbmRvbS1kYWVtb24iKSkKKyAgICAgICAgeworICAgICAgICAgIHVzZV9yYW5kb21fZGFlbW9uID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXVzZS1zZWNtZW0iKSkKKyAgICAgICAgeworICAgICAgICAgIHVzZV9zZWNtZW0gPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tcHJlZmVyLXN0YW5kYXJkLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyBpcyBhbnl3YXkgdGhlIGRlZmF1bHQsIGJ1dCB3ZSBtYXkgd2FudCB0byB1c2UgaXQgZm9yCisgICAgICAgICAgICAgZGVidWdnaW5nLiAqLworICAgICAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFLCBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXByZWZlci1maXBzLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfRklQUyk7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wcmVmZXItc3lzdGVtLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfU1lTVEVNKTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLW5vLWJsaW5kaW5nIikpCisgICAgICAgIHsKKyAgICAgICAgICBub19ibGluZGluZyA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1sYXJnZS1idWZmZXJzIikpCisgICAgICAgIHsKKyAgICAgICAgICBsYXJnZV9idWZmZXJzID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWNpcGhlci1yZXBldGl0aW9ucyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNpcGhlcl9yZXBldGl0aW9ucyA9IGF0b2koKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWNpcGhlci13aXRoLWtleXNldHVwIikpCisgICAgICAgIHsKKyAgICAgICAgICBjaXBoZXJfd2l0aF9rZXlzZXR1cCA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1oYXNoLXJlcGV0aXRpb25zIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaGFzaF9yZXBldGl0aW9ucyA9IGF0b2koKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLW1hYy1yZXBldGl0aW9ucyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1hY19yZXBldGl0aW9ucyA9IGF0b2koKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXBrLWNvdW50IikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcGtfY291bnQgPSBhdG9pKCphcmd2KTsKKyAgICAgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1hbGlnbm1lbnQiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmIChhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBidWZmZXJfYWxpZ25tZW50ID0gYXRvaSgqYXJndik7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGlzYWJsZS1od2YiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmIChhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfSFdGLCAqYXJndiwgTlVMTCkpCisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogdW5rbm93biBoYXJkd2FyZSBmZWF0dXJlIGAlcyciCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAtIG9wdGlvbiBpZ25vcmVkXG4iLCAqYXJndik7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZmlwcyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgLyogVGhpcyBjb21tYW5kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgZ2NyeV9jaGVja192ZXJzaW9uLiAgKi8KKyAgICAgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRk9SQ0VfRklQU19NT0RFLCAwKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXByb2dyZXNzIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICB3aXRoX3Byb2dyZXNzID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoYnVmZmVyX2FsaWdubWVudCA8IDEgfHwgYnVmZmVyX2FsaWdubWVudCA+IDE2KQorICAgIGRpZSAoInZhbHVlIGZvciAtLWFsaWdubWVudCBtdXN0IGJlIGluIHRoZSByYW5nZSAxIHRvIDE2XG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1ZFUkJPU0lUWSwgKGludCl2ZXJib3NlKTsKKworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IHZlcnNpb24gbWlzbWF0Y2g7IHBnbT0lcywgbGlicmFyeT0lc1xuIiwKKyAgICAgICAgICAgICAgIEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUgLCAwKTsKKworICBpZiAoZ2NyeV9maXBzX21vZGVfYWN0aXZlICgpKQorICAgIGluX2ZpcHNfbW9kZSA9IDE7CisgIGVsc2UgaWYgKCF1c2Vfc2VjbWVtKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisKKyAgaWYgKHVzZV9yYW5kb21fZGFlbW9uKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9VU0VfUkFORE9NX0RBRU1PTiwgMSk7CisKKyAgaWYgKHdpdGhfcHJvZ3Jlc3MpCisgICAgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAocHJvZ3Jlc3NfY2IsIE5VTEwpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgaWYgKGNpcGhlcl9yZXBldGl0aW9ucyA8IDEpCisgICAgY2lwaGVyX3JlcGV0aXRpb25zID0gMTsKKyAgaWYgKGhhc2hfcmVwZXRpdGlvbnMgPCAxKQorICAgIGhhc2hfcmVwZXRpdGlvbnMgPSAxOworICBpZiAobWFjX3JlcGV0aXRpb25zIDwgMSkKKyAgICBtYWNfcmVwZXRpdGlvbnMgPSAxOworCisgIGlmIChpbl9yZWdyZXNzaW9uX3Rlc3QpCisgICAgZnB1dHMgKCJOb3RlOiAiIFBHTSAiIHJ1bm5pbmcgaW4gcXVpY2sgcmVncmVzc2lvbiB0ZXN0IG1vZGUuXG4iLCBzdGRvdXQpOworCisgIGlmICggIWFyZ2MgKQorICAgIHsKKyAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKyAgICAgIG1kX2JlbmNoIChOVUxMKTsKKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgbWFjX2JlbmNoIChOVUxMKTsKKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgY2lwaGVyX2JlbmNoIChOVUxMKTsKKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgcnNhX2JlbmNoIChwa19jb3VudCwgMSwgbm9fYmxpbmRpbmcpOworICAgICAgZHNhX2JlbmNoIChwa19jb3VudCwgMCk7CisgICAgICBlY2NfYmVuY2ggKHBrX2NvdW50LCAwKTsKKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgbXBpX2JlbmNoICgpOworICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICByYW5kb21fYmVuY2ggKDApOworICAgIH0KKyAgZWxzZSBpZiAoICFzdHJjbXAgKCphcmd2LCAicmFuZG9tIikgfHwgIXN0cmNtcCAoKmFyZ3YsICJzdHJvbmdyYW5kb20iKSkKKyAgICB7CisgICAgICBpZiAoYXJnYyA9PSAxKQorICAgICAgICByYW5kb21fYmVuY2ggKCgqKmFyZ3YgPT0gJ3MnKSk7CisgICAgICBlbHNlIGlmIChhcmdjID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1JBTkRPTV9TRUVEX0ZJTEUsIGFyZ3ZbMV0pOworICAgICAgICAgIHJhbmRvbV9iZW5jaCAoKCoqYXJndiA9PSAncycpKTsKKyAgICAgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfVVBEQVRFX1JBTkRPTV9TRUVEX0ZJTEUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGZwdXRzICgidXNhZ2U6IGJlbmNobWFyayBbc3Ryb25nXXJhbmRvbSBbc2VlZGZpbGVdXG4iLCBzdGRvdXQpOworICAgIH0KKyAgZWxzZSBpZiAoICFzdHJjbXAgKCphcmd2LCAibWQiKSkKKyAgICB7CisgICAgICBpZiAoYXJnYyA9PSAxKQorICAgICAgICBtZF9iZW5jaCAoTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIGZvciAoYXJnYy0tLCBhcmd2Kys7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKQorICAgICAgICAgIG1kX2JlbmNoICggKmFyZ3YgKTsKKyAgICB9CisgIGVsc2UgaWYgKCAhc3RyY21wICgqYXJndiwgIm1hYyIpKQorICAgIHsKKyAgICAgIGlmIChhcmdjID09IDEpCisgICAgICAgIG1hY19iZW5jaCAoTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIGZvciAoYXJnYy0tLCBhcmd2Kys7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKQorICAgICAgICAgIG1hY19iZW5jaCAoICphcmd2ICk7CisgICAgfQorICBlbHNlIGlmICggIXN0cmNtcCAoKmFyZ3YsICJjaXBoZXIiKSkKKyAgICB7CisgICAgICBpZiAoYXJnYyA9PSAxKQorICAgICAgICBjaXBoZXJfYmVuY2ggKE5VTEwpOworICAgICAgZWxzZQorICAgICAgICBmb3IgKGFyZ2MtLSwgYXJndisrOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykKKyAgICAgICAgICBjaXBoZXJfYmVuY2ggKCAqYXJndiApOworICAgIH0KKyAgZWxzZSBpZiAoICFzdHJjbXAgKCphcmd2LCAibXBpIikpCisgICAgeworICAgICAgICBtcGlfYmVuY2ggKCk7CisgICAgfQorICBlbHNlIGlmICggIXN0cmNtcCAoKmFyZ3YsICJyc2EiKSkKKyAgICB7CisgICAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKyAgICAgICAgcnNhX2JlbmNoIChwa19jb3VudCwgMSwgbm9fYmxpbmRpbmcpOworICAgIH0KKyAgZWxzZSBpZiAoICFzdHJjbXAgKCphcmd2LCAiZHNhIikpCisgICAgeworICAgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgICAgICAgIGRzYV9iZW5jaCAocGtfY291bnQsIDEpOworICAgIH0KKyAgZWxzZSBpZiAoICFzdHJjbXAgKCphcmd2LCAiZWNjIikpCisgICAgeworICAgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgICAgICAgIGVjY19iZW5jaCAocGtfY291bnQsIDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IGJhZCBhcmd1bWVudHNcbiIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisKKyAgaWYgKGluX2ZpcHNfbW9kZSAmJiAhZ2NyeV9maXBzX21vZGVfYWN0aXZlICgpKQorICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IEZJUFMgbW9kZSBpcyBub3QgYW55bW9yZSBhY3RpdmVcbiIpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2F2c19kcml2ZXIucGwgYi90ZXN0cy9jYXZzX2RyaXZlci5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOTVlOWIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2F2c19kcml2ZXIucGwKQEAgLTAsMCArMSwyMjQzIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjICRJZDogY2F2c19kcml2ZXIucGwgMTQ5NyAyMDA5LTAxLTIyIDE0OjAxOjI5WiBzbXVlbGxlciAkCisjCisjIENBVlMgdGVzdCBkcml2ZXIgKGJhc2VkIG9uIHRoZSBPcGVuU1NMIGRyaXZlcikKKyMgV3JpdHRlbiBieTogU3RlcGhhbiBNw7xsbGVyIDxzbUBhdHNlYy5jb20+CisjIENvcHlyaWdodCAoYykgYXRzZWMgaW5mb3JtYXRpb24gc2VjdXJpdHkgY29ycG9yYXRpb24KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorIworIyAgICBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorIyAgICBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKyMgICAgT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworIyAgICBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorIyAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisjICAgIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKyMgICAgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisjICAgIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorIworIyAgICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKyMgICAgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorIyAgICBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorIyAgICBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKyMgICAgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorIyAgICBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKyMgICAgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKyMgICAgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisjICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyMKKyMKKyMgdGVzdCBleGVjdXRpb24gaW5zdHJ1Y3Rpb246CisjIDEuIGdldCB0aGUgcmVxdWVzdCBmaWxlcyBmcm9tIHRoZSBsYWIKKyMgMi4gY2FsbCBlYWNoIHJlcXVlc3QgZmlsZSBmcm9tIDEuIHdpdGggdGhpcyBwcm9ncmFtOgorIwkkMCA8RklMRT4ucmVwCisjIDMuIHNlbmQgdGhlIHJlc3VsdGluZyBmaWxlIDxGSUxFPi5yc3AgdG8gdGhlIGxhYgorIworIworIyBUZXN0IHNob3VsZCBiZSBlYXNpbHkgYWRvcHRhYmxlIHRvIG90aGVyIGltcGxlbWVudGF0aW9ucworIyBTZWUgdGhlIGZpcnN0IGZ1bmN0aW9ucyBmb3IgdGhpcyB0YXNrCisjCisjIEZvbGxvd2luZyB0ZXN0cyBhcmUgY292ZXJlZCAob3RoZXJzIG1heSBhbHNvIGJlIGNvdmVyZWQKKyMgYnV0IGhhdmUgbm90IGJlZW4gdGVzdGVkKQorIworIyBBRVMKKyMJW0NCQ3xDRkIxMjh8RUNCfE9GQl1HRlNib3hbMTI4fDE5MnwyNTZdCisjCVtDQkN8Q0ZCMTI4fEVDQnxPRkJdTUNUWzEyOHwxOTJ8MjU2XQorIwlbQ0JDfENGQjEyOHxFQ0J8T0ZCXVZhcktleVsxMjh8MTkyfDI1Nl0KKyMJW0NCQ3xDRkIxMjh8RUNCfE9GQl1LZXlTYm94WzEyOHwxOTJ8MjU2XQorIwlbQ0JDfENGQjEyOHxFQ0J8T0ZCXU1NVFsxMjh8MTkyfDI1Nl0KKyMJW0NCQ3xDRkIxMjh8RUNCfE9GQl1WYXJUeHRbMTI4fDE5MnwyNTZdCisjCisjIFJTQQorIwlTaWdHZW5bMTV8UlNBXQorIwlTaWdWZXIxNQorIwkoU2lnVmVyUlNBIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBPcGVuU1NMIGFzIFg5LjMxIHBhZGRpbmcKKyMJCWlzIG5vdCBkb25lIHRocm91Z2ggb3BlbnNzbCBkZ3N0KQorIwlLZXlHZW4gUlNBIFg5LjMxCisjCisjIFNIQQorIwlTSEFbMXwyMjR8MjU2fDM4NHw1MTJdU2hvcnRNc2cKKyMJU0hBWzF8MjI0fDI1NnwzODR8NTEyXUxvbmdNc2cKKyMJU0hBWzF8MjI0fDI1NnwzODR8NTEyXU1vbnRlCisjCisjIEhNQUMgKFNIQSAtIGNhdmVhdDogd2Ugb25seSBzdXBwb3J0IGhhc2ggb3V0cHV0IGVxdWFsIHRvIHRoZSBibG9jayBzaXplIG9mCisjIAlvZiB0aGUgaGFzaCAtIHdlIGRvIG5vdCBzdXBwb3J0IHRydW5jYXRpb24gb2YgdGhlIGhhc2g7IHRvIHN1cHBvcnQKKyMgCXRoYXQsIHdlIGZpcnN0IG5lZWQgdG8gZGVjaXBoZXIgdGhlIEhNQUMucmVxIGZpbGUgLSBzZWUgaG1hY19rYXQoKSApCisjIAlITUFDCisjCisjIFRERVMKKyMJVFtDQkN8Q0ZCPz98RUNCfE9GQl1Nb250ZVsxfDJ8M10KKyMJVFtDQkN8Q0ZCPz98RUNCfE9GQl1wZXJtb3AKKyMJVFtDQkN8Q0ZCPz98RUNCfE9GQl1NTVRbMXwyfDNdCisjCVRbQ0JDfENGQj8/fEVDQnxPRkJdc3VidGFiCisjCVRbQ0JDfENGQj8/fEVDQnxPRkJddmFya2V5CisjCVRbQ0JDfENGQj8/fEVDQnxPRkJdaW52cGVybQorIwlUW0NCQ3xDRkI/P3xFQ0J8T0ZCXXZhcnRleHQKKyMKKyMgQU5TSSBYOS4zMSBSTkcKKyMgCUFOU0k5MzFfQUVTMTI4TUNUCisjIAlBTlNJOTMxX0FFUzEyOFZTVAorIworIyBEU0EKKyMgCVBRR0dlbgorIyAJU2lnR2VuCisjIAlTaWdWZXIKKyMKKyMgUkM0IChhdHNlYyBkZXZlbG9wZWQgdGVzdHMpCisjIAlSQzRLZXlCRAorIyAJUkM0TUNUCisjIAlSQzRQbHRCRAorIyAJUkM0UkVHVAorIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElQQzo6T3BlbjI7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgTUlNRTo6QmFzZTY0OworCisjIENvbnRhaW5zIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucworbXkgJW9wdDsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIENlbnRyYWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB0aGUgZXh0ZXJuYWwgY2lwaGVycyAjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPbmx5IHRoZXNlIGludGVyZmFjZSByb3V0aW5lcyBzaG91bGQgYmUgY2hhbmdlZCBpbiBjYXNlIG9mCisjIHBvcnRpbmcgdG8gYSBuZXcgY2lwaGVyIGxpYnJhcnkKKyMKKyMgRm9yIHBvcnRpbmcgdG8gYSBuZXcgbGlicmFyeSwgY3JlYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucworIyBhbmQgdGhlbiBhZGQgcG9pbnRlcnMgdG8gdGhlIHJlc3BlY3RpdmUgaW1wbGVtZW50YXRpb24gb2YgZWFjaAorIyBmdW5jdGlvbiB0byB0aGUgZ2l2ZW4gdmFyaWFibGVzLgorCisjIGNvbW1vbiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcm91dGluZQorIyAkMSBrZXkgaW4gaGV4IGZvcm0gKHBsZWFzZSBub3RlIGZvciAzREVTOiBldmVuIHdoZW4gZWRlMyBmb3IgdGhyZWUKKyMgICAgaW5kZXBlbmRlbnQgY2lwaGVycyBpcyBnaXZlbiB3aXRoIHRoZSBjaXBoZXIgc3BlY2lmaWNhdGlvbiwgd2UgaGFuZCBpbgorIyAgICBlaXRoZXIgb25lIGtleSBmb3IgazEgPSBrMiA9IGszLCB0d28ga2V5cyB3aGljaCBhcmUgY29uY2F0aW5hdGVkIGZvcgorIyAgICBrMSA9IGszLCBrMiBpbmRlcGVuZGVudCwgb3IgdGhyZWUga2V5cyB3aGljaCBhcmUgY29uY2F0aW5hdGVkIGZvcgorIyAgICBrMSwgazIsIGszIGluZGVwZW5kZW50KQorIyAkMiBpdiBpbiBoZXggZm9ybQorIyAkMyBjaXBoZXIgLSB0aGUgY2lwaGVyIHN0cmluZyBpcyBkZWZpbmVkIGFzIHNwZWNpZmllZCBpbiB0aGUgb3BlbnNzbAorIyAgICBlbmMoMXNzbCkgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIG9wdGlvbiAiLWNpcGhlcm5hbWUiCisjICAgIChlLmcuIGFlcy0xMjgtY2JjIG9yIGRlcy1lZGUzLWNiYykKKyMgJDQgZW5jcnlwdD0xL2RlY3J5cHQ9MAorIyAkNSBkZS9lbmNyeXB0ZWQgZGF0YSBpbiBoZXggZm9ybQorIyByZXR1cm4gZW4vZGVjcnlwdGVkIGRhdGEgaW4gaGV4IGZvcm0KK215ICRlbmNkZWM7CisKKyMKKyMgRGVyaXZlIGFuIFJTQSBrZXkgZnJvbSB0aGUgZ2l2ZW4gWDkuMzEgcGFyYW1ldGVycy4KKyMgJDE6IG1vZHVsdXMgc2l6ZQorIyAkMjogRSAgIGluIGhleCBmb3JtCisjICQzOiBYcDEgaW4gaGV4IGZvcm0KKyMgJDQ6IFhwMiBpbiBoZXggZm9ybQorIyAkNTogWHAgIGluIGhleCBmb3JtCisjICQ2OiBYcTEgaW4gaGV4IGZvcm0KKyMgJDc6IFhxMiBpbiBoZXggZm9ybQorIyAkODogWHEgIGluIGhleCBmb3JtCisjIHJldHVybjogc3RyaW5nIHdpdGggdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGluIGhleCBmb3JtYXQsIHdoZXJlIGVhY2ggdmFsdWUKKyMgICAgICAgIGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBwcmV2aW91cyB3aXRoIGEgXG4gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyMgICAgICAgICBQXG4KKyMgICAgICAgICBRXG4KKyMgICAgICAgICBOXG4KKyMgICAgICAgICBEXG4KK215ICRyc2FfZGVyaXZlOworCisjIFNpZ24gYSBtZXNzYWdlIHdpdGggUlNBCisjICQxOiBkYXRhIHRvIGJlIHNpZ25lZCBpbiBoZXggZm9ybQorIyAkMjogSGFzaCBhbGdvCisjICQzOiBLZXkgZmlsZSBpbiBQRU0gZm9ybWF0IHdpdGggdGhlIHByaXZhdGUga2V5CisjIHJldHVybjogZGlnZXN0IGluIGhleCBmb3JtYXQKK215ICRyc2Ffc2lnbjsKKworIyBWZXJpZnkgYSBtZXNzYWdlIHdpdGggUlNBCisjICQxOiBkYXRhIHRvIGJlIHZlcmlmaWVkIGluIGhleCBmb3JtCisjICQyOiBoYXNoIGFsZ28KKyMgJDM6IGZpbGUgaG9sZGluZyB0aGUgcHVibGljIFJTQSBrZXkgaW4gUEVNIGZvcm1hdAorIyAkNDogZmlsZSBob2xkaW5nIHRoZSBzaWduYXR1cmUgaW4gYmluYXJ5IGZvcm0KKyMgcmV0dXJuOiAxID09IHZlcmlmaWVkIC8gMCA9PSBub3QgdmVyaWZpZWQKK215ICRyc2FfdmVyaWZ5OworCisjIGdlbmVyYXRlIGEgbmV3IHByaXZhdGUgUlNBIGtleSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyMgCWV4cG9uZW50IGlzIDY1NTM3CisjCVBFTSBmb3JtYXQKKyMgJDEga2V5IHNpemUgaW4gYml0CisjICQyIGtleWZpbGUgbmFtZQorIyByZXR1cm46IG5vdGhpbmcsIGJ1dCBmaWxlIGNyZWF0ZWQKK215ICRnZW5fcnNha2V5OworCisjIENyZWF0aW5nIGEgaGFzaAorIyAkMTogUGxhaW50ZXh0IGluIGhleCBmb3JtCisjICQyOiBoYXNoIHR5cGUgaW4gdGhlIGZvcm0gZG9jdW1lbnRlZCBpbiBvcGVuc3NsJ3MgZGdzdCgxc3NsKSAtIGUuZy4KKyMgICAgIHNoYTEsIHNoYTIyNCwgc2hhMjU2LCBzaGEzODQsIHNoYTUxMgorIyByZXR1cm46IGhhc2ggaW4gaGV4IGZvcm0KK215ICRoYXNoOworCisjIHN1cHBseWluZyB0aGUgY2FsbCB0byB0aGUgZXh0ZXJuYWwgY2lwaGVyIGltcGxlbWVudGF0aW9uCisjIHRoYXQgaXMgYmVpbmcgdXNlZCB0byBrZWVwIFNURElOIGFuZCBTVERPVVQgb3BlbgorIyB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGNoYWluaW5nCisjICQxOiBjaXBoZXIKKyMgJDI6IDE9ZW5jcnlwdGlvbiwgMD1kZWNyeXB0aW9uCisjICQzOiBidWZmZXJzaXplIG5lZWRlZCBmb3Igb3BlbnNzbAorIyAkNDogZW5jcnlwdGlvbiBrZXkgaW4gYmluYXJ5IGZvcm0KKyMgJDU6IElWIGluIGJpbmFyeSBmb3JtCisjIHJldHVybjogY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgdGhlIGFwcGxpY2F0aW9uCitteSAkc3RhdGVfY2lwaGVyOworIyB0aGUgb25seSBkaWZmZXJlbmNlIG9mIHRoZSBERVMgdmVyc2lvbiBpcyB0aGF0IGl0IGltcGxlbWVudHMgdGhlIGlubmVyIGxvb3AKKyMgb2YgdGhlIFRERVMgdGVzdHMKK215ICRzdGF0ZV9jaXBoZXJfZGVzOworCisjIHN1cHBseWluZyB0aGUgY2FsbCB0byB0aGUgZXh0ZXJuYWwgY2lwaGVyIGltcGxlbWVudGF0aW9uCisjIHRoYXQgaXMgYmVpbmcgdXNlZCB0byBrZWVwIFNURElOIGFuZCBTVERPVVQgb3BlbgorIyB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgdGhlIFJORyB3aXRoIGl0cyBzZWVkCisjCisjIGlucHV0IGhvbGRzIHNlZWQgdmFsdWVzCisjICQxOiBjaXBoZXIga2V5IGluIGhleCBmb3JtYXQKKyMgJDI6IERUIHZhbHVlIGluIGhleCBmb3JtYXQKKyMgJDM6IFYgdmFsdWUgaW4gaGV4IGZvcm1hdAorIworIyByZXR1cm46IGNvbW1hbmQgbGluZSB0byBleGVjdXRlIHRoZSBhcHBsaWNhdGlvbgorIworIyB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciByYW5kb20gdmFsdWVzIG9uIFNURE9VVCAtIHRoZSBzY3JpcHQKKyMgcmVhZHMgMTI4IGJpdHMgcmVwZWF0ZWRseSB3aGVyZSB0aGUgc3RhdGUgb2YgdGhlIFJORyBtdXN0IGJlIHJldGFpbmVkCisjIGJldHdlZW4gdGhlIHJlYWRzLiBUaGUgb3V0cHV0IG9mIHRoZSBSTkcgb24gU1RET1VUIGlzIGFzc3VtZWQgdG8gYmUgYmluYXJ5LgorbXkgJHN0YXRlX3JuZzsKKworIyBHZW5lcmF0ZSBhbiBITUFDIGJhc2VkIG9uIFNIQXgKKyMgJDE6IEtleSB0byBiZSB1c2VkIGZvciB0aGUgSE1BQyBpbiBoZXggZm9ybWF0CisjICQyOiBsZW5ndGggb2YgdGhlIGhhc2ggdG8gYmUgY2FsY3VsYXRlZCBpbiBiaXRzCisjICQzOiBNZXNzYWdlIGZvciB3aGljaCB0aGUgSE1BQyBzaGFsbCBiZSBjYWxjdWxhdGVkIGluIGhleCBmb3JtYXQKKyMgJDQ6IGhhc2ggdHlwZSAoMSAtIFNIQTEsIDIyNCAtIFNIQTIyNCwgYW5kIHNvIG9uKQorIyByZXR1cm46IGNhbGN1bGF0ZWQgSE1BQyBpbiBoZXggZm9ybWF0CitteSAkaG1hYzsKKworIworIyBHZW5lcmF0ZSB0aGUgUCwgUSwgRywgU2VlZCwgY291bnRlciwgaCAodmFsdWUgdXNlZCB0byBnZW5lcmF0ZSBnKSB2YWx1ZXMKKyMgZm9yIERTQQorIyAkMTogbW9kdWx1cyBzaXplCisjIHJldHVybjogc3RyaW5nIHdpdGggdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGluIGhleCBmb3JtYXQsIHdoZXJlIGVhY2ggdmFsdWUKKyMgCSAgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIHdpdGggYSBcbiBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorIyAgICAgICAgIFBcbgorIyAgICAgICAgIFFcbgorIyAgICAgICAgIEdcbgorIyAgICAgICAgIFNlZWRcbgorIyAgICAgICAgIGNvdW50ZXJcbgorIyAgICAgICAgIGgKK215ICRkc2FfcHFnZ2VuOworCisjCisjIEdlbmVyYXRlIGFuIERTQSBwdWJsaWMga2V5IGZyb20gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnM6CisjICQxOiBOYW1lIG9mIGZpbGUgdG8gY3JlYXRlCisjICQyOiBQIGluIGhleCBmb3JtCisjICQzOiBRIGluIGhleCBmb3JtCisjICQ0OiBHIGluIGhleCBmb3JtCisjICQ1OiBZIGluIGhleCBmb3JtCitteSAkZHNhX2dlbnB1YmtleTsKKworIyBWZXJpZnkgYSBtZXNzYWdlIHdpdGggRFNBCisjICQxOiBkYXRhIHRvIGJlIHZlcmlmaWVkIGluIGhleCBmb3JtCisjICQyOiBmaWxlIGhvbGRpbmcgdGhlIHB1YmxpYyBEU0Ega2V5IGluIFBFTSBmb3JtYXQKKyMgJDM6IFIgdmFsdWUgb2YgdGhlIHNpZ25hdHVyZQorIyAkNDogUyB2YWx1ZSBvZiB0aGUgc2lnbmF0dXJlCisjIHJldHVybjogMSA9PSB2ZXJpZmllZCAvIDAgPT0gbm90IHZlcmlmaWVkCitteSAkZHNhX3ZlcmlmeTsKKworIyBnZW5lcmF0ZSBhIG5ldyBEU0Ega2V5IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorIwlQRU0gZm9ybWF0CisjICQxIGtleWZpbGUgbmFtZQorIyByZXR1cm46IGZpbGUgY3JlYXRlZCwgaGFzaCB3aXRoIGtleXMgb2YgUCwgUSwgRyBpbiBoZXggZm9ybWF0CitteSAkZ2VuX2RzYWtleTsKKworIyBTaWduIGEgbWVzc2FnZSB3aXRoIERTQQorIyAkMTogZGF0YSB0byBiZSBzaWduZWQgaW4gaGV4IGZvcm0KKyMgJDI6IEtleSBmaWxlIGluIFBFTSBmb3JtYXQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkKKyMgcmV0dXJuOiBoYXNoIG9mIGRpZ2VzdCBpbmZvcm1hdGlvbiBpbiBoZXggZm9ybWF0IHdpdGggWSwgUiwgUyBhcyBrZXlzCitteSAkZHNhX3NpZ247CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIE9wZW5TU0wgaW50ZXJmYWNlIGZ1bmN0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIG9wZW5zc2xfZW5jZGVjKCQkJCQkKSB7CisJbXkgJGtleT1zaGlmdDsKKwlteSAkaXY9c2hpZnQ7CisJbXkgJGNpcGhlcj1zaGlmdDsKKwlteSAkZW5jID0gKHNoaWZ0KSA/ICItZSIgOiAiLWQiOworCW15ICRkYXRhPXNoaWZ0OworCisJIyBXZSBvbmx5IGludm9rZSB0aGUgZHJpdmVyIHdpdGggdGhlIElWIHBhcmFtZXRlciwgaWYgd2UgaGF2ZQorCSMgYW4gSVYsIG90aGVyd2lzZSwgd2Ugc2tpcCBpdAorCSRpdiA9ICItaXYgJGl2IiBpZiAoJGl2KTsKKworCSRkYXRhPWhleDJiaW4oJGRhdGEpOworCW15ICRwcm9ncmFtPSJvcGVuc3NsIGVuYyAtJGNpcGhlciAtbm9wYWQgLW5vc2FsdCAtSyAka2V5ICRlbmMgJGl2IjsKKwkkcHJvZ3JhbSA9ICJyYzQgLWsgJGtleSIgaWYgJG9wdHsnUid9OyAjZm9yIEFSQ0ZPVVIsIG5vIElWIG11c3QgYmUgZ2l2ZW4KKwkkZGF0YT1waXBlX3Rocm91Z2hfcHJvZ3JhbSgkZGF0YSwkcHJvZ3JhbSk7CisJcmV0dXJuIGJpbjJoZXgoJGRhdGEpOworfQorCitzdWIgb3BlbnNzbF9yc2Ffc2lnbigkJCQpIHsKKwlteSAkZGF0YSA9IHNoaWZ0OworCW15ICRjaXBoZXIgPSBzaGlmdDsKKwlteSAka2V5ZmlsZSA9IHNoaWZ0OworCisJJGRhdGE9aGV4MmJpbigkZGF0YSk7CisJZGllICJBUkNGT1VSIG5vdCBhdmFpbGFibGUgZm9yIFJTQSIgaWYgJG9wdHsnUid9OworCSRkYXRhPXBpcGVfdGhyb3VnaF9wcm9ncmFtKCRkYXRhLAorCQkib3BlbnNzbCBkZ3N0IC0kY2lwaGVyIC1iaW5hcnkgLXNpZ24gJGtleWZpbGUiKTsKKwlyZXR1cm4gYmluMmhleCgkZGF0YSk7Cit9CisKK3N1YiBvcGVuc3NsX3JzYV92ZXJpZnkoJCQkJCkgeworCW15ICRkYXRhID0gc2hpZnQ7CisJbXkgJGNpcGhlciA9IHNoaWZ0OworCW15ICRrZXlmaWxlID0gc2hpZnQ7CisJbXkgJHNpZ2ZpbGUgPSBzaGlmdDsKKworCSRkYXRhID0gaGV4MmJpbigkZGF0YSk7CisJZGllICJBUkNGT1VSIG5vdCBhdmFpbGFibGUgZm9yIFJTQSIgaWYgJG9wdHsnUid9OworCSRkYXRhID0gcGlwZV90aHJvdWdoX3Byb2dyYW0oJGRhdGEsCisJCSJvcGVuc3NsIGRnc3QgLSRjaXBoZXIgLWJpbmFyeSAtdmVyaWZ5ICRrZXlmaWxlIC1zaWduYXR1cmUgJHNpZ2ZpbGUiKTsKKworCSMgUGFyc2UgdGhyb3VnaCB0aGUgT3BlblNTTCBvdXRwdXQgaW5mb3JtYXRpb24KKwlyZXR1cm4gKCRkYXRhID1+IC9PSy8pOworfQorCitzdWIgb3BlbnNzbF9nZW5fcnNha2V5KCQkKSB7CisJbXkgJGtleWxlbiA9IHNoaWZ0OworCW15ICRmaWxlID0gc2hpZnQ7CisKKwlkaWUgIkFSQ0ZPVVIgbm90IGF2YWlsYWJsZSBmb3IgUlNBIiBpZiAkb3B0eydSJ307CisJIyBnZW5lcmF0aW5nIG9mIGEga2V5IHdpdGggZXhwb25lbnQgMHgxMDAwMQorCW15IEBhcmdzID0gKCJvcGVuc3NsIiwgImdlbnJzYSIsICItRjQiLCAiLW91dCIsICIkZmlsZSIsICIka2V5bGVuIik7CisgICAgICAgIHN5c3RlbShAYXJncykgPT0gMAorCQlvciBkaWUgInN5c3RlbSBAYXJncyBmYWlsZWQ6ICQ/IjsKKwlkaWUgInN5c3RlbSBAYXJncyBmYWlsZWQ6IGZpbGUgJGZpbGUgbm90IGNyZWF0ZWQiIGlmICghIC1mICRmaWxlKTsKK30KKworc3ViIG9wZW5zc2xfaGFzaCgkJCkgeworCW15ICRwdCA9IHNoaWZ0OworCW15ICRjaXBoZXIgPSBzaGlmdDsKKworCWRpZSAiQVJDRk9VUiBub3QgYXZhaWxhYmxlIGZvciBoYXNoZXMiIGlmICRvcHR7J1InfTsKKwlteSAkaGFzaCA9IGhleDJiaW4oJHB0KTsKKwkjYmluMmhleCBub3QgbmVlZGVkIGFzIHRoZSAnLWhleCcgYWxyZWFkeSBjb252ZXJ0cyBpdAorCXJldHVybiBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkaGFzaCwgIm9wZW5zc2wgZGdzdCAtJGNpcGhlciAtaGV4Iik7Cit9CisKK3N1YiBvcGVuc3NsX3N0YXRlX2NpcGhlcigkJCQkJCkgeworCW15ICRjaXBoZXIgPSBzaGlmdDsKKwlteSAkZW5jZGVjID0gc2hpZnQ7CisJbXkgJGJ1ZnNpemUgPSBzaGlmdDsKKwlteSAka2V5ID0gc2hpZnQ7CisJbXkgJGl2ID0gc2hpZnQ7CisKKwlteSAkZW5jID0gJGVuY2RlYyA/ICItZSI6ICItZCI7CisKKwkjIFdlIG9ubHkgaW52b2tlIHRoZSBkcml2ZXIgd2l0aCB0aGUgSVYgcGFyYW1ldGVyLCBpZiB3ZSBoYXZlCisJIyBhbiBJViwgb3RoZXJ3aXNlLCB3ZSBza2lwIGl0CisJJGl2ID0gIi1pdiAiLmJpbjJoZXgoJGl2KSBpZiAoJGl2KTsKKworCW15ICRvdXQgPSAib3BlbnNzbCBlbmMgLSckY2lwaGVyJyAkZW5jIC1ub3BhZCAtbm9zYWx0IC1idWZzaXplICRidWZzaXplIC1LICIuYmluMmhleCgka2V5KS4iICRpdiI7CisJI2ZvciBBUkNGT1VSLCBubyBJViBtdXN0IGJlIGdpdmVuCisJJG91dCA9ICJyYzQgLWsgIiAuIGJpbjJoZXgoJGtleSkgaWYgJG9wdHsnUid9OworCXJldHVybiAkb3V0OworfQorCisjIyMjIyMgRW5kIG9mIE9wZW5TU0wgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uICMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIGxpYmdjcnlwdCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBsaWJnY3J5cHRfZW5jZGVjKCQkJCQkKSB7CisJbXkgJGtleT1zaGlmdDsKKwlteSAkaXY9c2hpZnQ7CisJbXkgJGNpcGhlcj1zaGlmdDsKKwlteSAkZW5jID0gKHNoaWZ0KSA/ICJlbmNyeXB0IiA6ICJkZWNyeXB0IjsKKwlteSAkZGF0YT1zaGlmdDsKKworCSMgV2Ugb25seSBpbnZva2UgdGhlIGRyaXZlciB3aXRoIHRoZSBJViBwYXJhbWV0ZXIsIGlmIHdlIGhhdmUKKwkjIGFuIElWLCBvdGhlcndpc2UsIHdlIHNraXAgaXQKKwkkaXYgPSAiLS1pdiAkaXYiIGlmICgkaXYpOworCisJbXkgJHByb2dyYW09ImZpcHNkcnYgLS1rZXkgJGtleSAkaXYgLS1hbGdvICRjaXBoZXIgJGVuYyI7CisKKwlyZXR1cm4gcGlwZV90aHJvdWdoX3Byb2dyYW0oJGRhdGEsJHByb2dyYW0pOworCit9CisKK3N1YiBsaWJnY3J5cHRfcnNhX2Rlcml2ZSgkJCQkJCQkJCkgeworCW15ICRuICAgPSBzaGlmdDsKKwlteSAkZSAgID0gc2hpZnQ7CisJbXkgJHhwMSA9IHNoaWZ0OworCW15ICR4cDIgPSBzaGlmdDsKKwlteSAkeHAgID0gc2hpZnQ7CisJbXkgJHhxMSA9IHNoaWZ0OworCW15ICR4cTIgPSBzaGlmdDsKKwlteSAkeHEgID0gc2hpZnQ7CisJbXkgJHNleHA7CisJbXkgQHRtcDsKKworCSRuID0gc3ByaW50ZiAoIiV1IiwgJG4pOworCSRlID0gc3ByaW50ZiAoIiV1IiwgaGV4KCRlKSk7CisJJHNleHAgPSAiKGdlbmtleShyc2EobmJpdHMgIiAuIHNwcmludGYgKCIldTolcyIsIGxlbmd0aCgkbiksICRuKSAuICIpIgorCQkuICIocnNhLXVzZS1lICIgLiBzcHJpbnRmICgiJXU6JXMiLCBsZW5ndGgoJGUpLCAkZSkgLiAiKSIKKwkJLiAiKGRlcml2ZS1wYXJtcyIKKwkJLiAiKFhwMSAjJHhwMSMpIgorCQkuICIoWHAyICMkeHAyIykiCisJCS4gIihYcCAgIyR4cCMpIgorCQkuICIoWHExICMkeHExIykiCisJCS4gIihYcTIgIyR4cTIjKSIKKwkJLiAiKFhxICAjJHhxIykpKSlcbiI7CisKKwlyZXR1cm4gcGlwZV90aHJvdWdoX3Byb2dyYW0oJHNleHAsICJmaXBzZHJ2IHJzYS1kZXJpdmUiKTsKK30KKworCitzdWIgbGliZ2NyeXB0X3JzYV9zaWduKCQkJCkgeworCW15ICRkYXRhID0gc2hpZnQ7CisJbXkgJGhhc2hhbGdvID0gc2hpZnQ7CisJbXkgJGtleWZpbGUgPSBzaGlmdDsKKworCWRpZSAiQVJDRk9VUiBub3QgYXZhaWxhYmxlIGZvciBSU0EiIGlmICRvcHR7J1InfTsKKworCXJldHVybiBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkZGF0YSwKKwkJImZpcHNkcnYgLS1wa2NzMSAtLWFsZ28gJGhhc2hhbGdvIC0ta2V5ICRrZXlmaWxlIHJzYS1zaWduIik7Cit9CisKK3N1YiBsaWJnY3J5cHRfcnNhX3ZlcmlmeSgkJCQkKSB7CisJbXkgJGRhdGEgPSBzaGlmdDsKKwlteSAkaGFzaGFsZ28gPSBzaGlmdDsKKwlteSAka2V5ZmlsZSA9IHNoaWZ0OworCW15ICRzaWdmaWxlID0gc2hpZnQ7CisKKwlkaWUgIkFSQ0ZPVVIgbm90IGF2YWlsYWJsZSBmb3IgUlNBIiBpZiAkb3B0eydSJ307CisJJGRhdGEgPSBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkZGF0YSwKKwkJImZpcHNkcnYgLS1wa2NzMSAtLWFsZ28gJGhhc2hhbGdvIC0ta2V5ICRrZXlmaWxlIC0tc2lnbmF0dXJlICRzaWdmaWxlIHJzYS12ZXJpZnkiKTsKKworCSMgUGFyc2UgdGhyb3VnaCB0aGUgb3V0cHV0IGluZm9ybWF0aW9uCisJcmV0dXJuICgkZGF0YSA9fiAvR09PRCBzaWduYXR1cmUvKTsKK30KKworc3ViIGxpYmdjcnlwdF9nZW5fcnNha2V5KCQkKSB7CisJbXkgJGtleWxlbiA9IHNoaWZ0OworCW15ICRmaWxlID0gc2hpZnQ7CisKKwlkaWUgIkFSQ0ZPVVIgbm90IGF2YWlsYWJsZSBmb3IgUlNBIiBpZiAkb3B0eydSJ307CisJbXkgQGFyZ3MgPSAoImZpcHNkcnYgLS1rZXlzaXplICRrZXlsZW4gcnNhLWdlbiA+ICRmaWxlIik7CisJc3lzdGVtKEBhcmdzKSA9PSAwCisJCW9yIGRpZSAic3lzdGVtIEBhcmdzIGZhaWxlZDogJD8iOworCWRpZSAic3lzdGVtIEBhcmdzIGZhaWxlZDogZmlsZSAkZmlsZSBub3QgY3JlYXRlZCIgaWYgKCEgLWYgJGZpbGUpOworfQorCitzdWIgbGliZ2NyeXB0X2hhc2goJCQpIHsKKwlteSAkcHQgPSBzaGlmdDsKKwlteSAkaGFzaGFsZ28gPSBzaGlmdDsKKworCW15ICRwcm9ncmFtID0gImZpcHNkcnYgLS1hbGdvICRoYXNoYWxnbyBkaWdlc3QiOworCWRpZSAiQVJDRk9VUiBub3QgYXZhaWxhYmxlIGZvciBoYXNoZXMiIGlmICRvcHR7J1InfTsKKworCXJldHVybiBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkcHQsICRwcm9ncmFtKTsKK30KKworc3ViIGxpYmdjcnlwdF9zdGF0ZV9jaXBoZXIoJCQkJCQpIHsKKwlteSAkY2lwaGVyID0gc2hpZnQ7CisJbXkgJGVuYyA9IChzaGlmdCkgPyAiZW5jcnlwdCI6ICJkZWNyeXB0IjsKKwlteSAkYnVmc2l6ZSA9IHNoaWZ0OworCW15ICRrZXkgPSBzaGlmdDsKKwlteSAkaXYgPSBzaGlmdDsKKworCSMgV2Ugb25seSBpbnZva2UgdGhlIGRyaXZlciB3aXRoIHRoZSBJViBwYXJhbWV0ZXIsIGlmIHdlIGhhdmUKKwkjIGFuIElWLCBvdGhlcndpc2UsIHdlIHNraXAgaXQKKwkkaXYgPSAiLS1pdiAiLmJpbjJoZXgoJGl2KSBpZiAoJGl2KTsKKworCW15ICRwcm9ncmFtPSJmaXBzZHJ2IC0tYmluYXJ5IC0ta2V5ICIuYmluMmhleCgka2V5KS4iICRpdiAtLWFsZ28gJyRjaXBoZXInIC0tY2h1bmsgJyRidWZzaXplJyAkZW5jIjsKKworCXJldHVybiAkcHJvZ3JhbTsKK30KKworc3ViIGxpYmdjcnlwdF9zdGF0ZV9jaXBoZXJfZGVzKCQkJCQkKSB7CisJbXkgJGNpcGhlciA9IHNoaWZ0OworCW15ICRlbmMgPSAoc2hpZnQpID8gImVuY3J5cHQiOiAiZGVjcnlwdCI7CisJbXkgJGJ1ZnNpemUgPSBzaGlmdDsKKwlteSAka2V5ID0gc2hpZnQ7CisJbXkgJGl2ID0gc2hpZnQ7CisKKwkjIFdlIG9ubHkgaW52b2tlIHRoZSBkcml2ZXIgd2l0aCB0aGUgSVYgcGFyYW1ldGVyLCBpZiB3ZSBoYXZlCisJIyBhbiBJViwgb3RoZXJ3aXNlLCB3ZSBza2lwIGl0CisJJGl2ID0gIi0taXYgIi5iaW4yaGV4KCRpdikgaWYgKCRpdik7CisKKwlteSAkcHJvZ3JhbT0iZmlwc2RydiAtLWFsZ28gJyRjaXBoZXInIC0tbWN0LXNlcnZlciAkZW5jIjsKKworCXJldHVybiAkcHJvZ3JhbTsKK30KKworc3ViIGxpYmdjcnlwdF9zdGF0ZV9ybmcoJCQkKSB7CisJbXkgJGtleSA9IHNoaWZ0OworCW15ICRkdCA9IHNoaWZ0OworCW15ICR2ID0gc2hpZnQ7CisKKwlyZXR1cm4gImZpcHNkcnYgLS1iaW5hcnkgLS1sb29wIC0ta2V5ICRrZXkgLS1pdiAkdiAtLWR0ICRkdCByYW5kb20iOworfQorCitzdWIgbGliZ2NyeXB0X2htYWMoJCQkJCkgeworCW15ICRrZXkgPSBzaGlmdDsKKwlteSAkbWFjbGVuID0gc2hpZnQ7CisJbXkgJG1zZyA9IHNoaWZ0OworCW15ICRoYXNodHlwZSA9IHNoaWZ0OworCisJbXkgJHByb2dyYW0gPSAiZmlwc2RydiAtLWtleSAka2V5IC0tYWxnbyAkaGFzaHR5cGUgaG1hYy1zaGEiOworCXJldHVybiBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkbXNnLCAkcHJvZ3JhbSk7Cit9CisKK3N1YiBsaWJnY3J5cHRfZHNhX3BxZ2dlbigkKSB7CisJbXkgJG1vZCA9IHNoaWZ0OworCisJbXkgJHByb2dyYW0gPSAiZmlwc2RydiAtLWtleXNpemUgJG1vZCBkc2EtcHFnLWdlbiI7CisJcmV0dXJuIHBpcGVfdGhyb3VnaF9wcm9ncmFtKCIiLCAkcHJvZ3JhbSk7Cit9CisKK3N1YiBsaWJnY3J5cHRfZ2VuX2RzYWtleSgkKSB7CisJbXkgJGZpbGUgPSBzaGlmdDsKKworCW15ICRwcm9ncmFtID0gImZpcHNkcnYgLS1rZXlzaXplIDEwMjQgLS1rZXkgJGZpbGUgZHNhLWdlbiI7CisJbXkgJHRtcDsKKwlteSAlcmV0OworCisJZGllICJBUkNGT1VSIG5vdCBhdmFpbGFibGUgZm9yIERTQSIgaWYgJG9wdHsnUid9OworCisJJHRtcCA9IHBpcGVfdGhyb3VnaF9wcm9ncmFtKCIiLCAkcHJvZ3JhbSk7CisJZGllICJkc2Ega2V5IGdlbiBmYWlsZWQ6IGZpbGUgJGZpbGUgbm90IGNyZWF0ZWQiIGlmICghIC1mICRmaWxlKTsKKworCUByZXR7J1AnLCAnUScsICdHJywgJ1NlZWQnLCAnYycsICdIJ30gPSBzcGxpdCgvXG4vLCAkdG1wKTsKKwlyZXR1cm4gJXJldDsKK30KKworc3ViIGxpYmdjcnlwdF9kc2FfZ2VucHVia2V5KCQkJCQkKSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJHAgPSBzaGlmdDsKKwlteSAkcSA9IHNoaWZ0OworCW15ICRnID0gc2hpZnQ7CisJbXkgJHkgPSBzaGlmdDsKKworCW15ICRzZXhwOworCisJJHNleHAgPSAiKHB1YmxpYy1rZXkoZHNhKHAgIyRwIykocSAjJHEjKShnICMkZyMpKHkgIyR5IykpKSI7CisKKwlvcGVuKEZILCAiPiIsICRmaWxlbmFtZSkgb3IgZGllOworCXByaW50IEZIICRzZXhwOworCWNsb3NlIEZIOworfQorCitzdWIgbGliZ2NyeXB0X2RzYV9zaWduKCQkKSB7CisJbXkgJGRhdGEgPSBzaGlmdDsKKwlteSAka2V5ZmlsZSA9IHNoaWZ0OworCW15ICR0bXA7CisJbXkgJXJldDsKKworCWRpZSAiQVJDRk9VUiBub3QgYXZhaWxhYmxlIGZvciBEU0EiIGlmICRvcHR7J1InfTsKKworCSR0bXAgPSBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkZGF0YSwgImZpcHNkcnYgLS1rZXkgJGtleWZpbGUgZHNhLXNpZ24iKTsKKwlAcmV0eydZJywgJ1InLCAnUyd9ID0gc3BsaXQoL1xuLywgJHRtcCk7CisJcmV0dXJuICVyZXQ7Cit9CisKK3N1YiBsaWJnY3J5cHRfZHNhX3ZlcmlmeSgkJCQkKSB7CisJbXkgJGRhdGEgPSBzaGlmdDsKKwlteSAka2V5ZmlsZSA9IHNoaWZ0OworCW15ICRyID0gc2hpZnQ7CisJbXkgJHMgPSBzaGlmdDsKKworCW15ICRyZXQ7CisKKwlkaWUgIkFSQ0ZPVVIgbm90IGF2YWlsYWJsZSBmb3IgRFNBIiBpZiAkb3B0eydSJ307CisKKwlteSAkc2lnZmlsZSA9ICIka2V5ZmlsZS5zaWciOworCW9wZW4oRkgsICI+JHNpZ2ZpbGUiKSBvciBkaWUgIkNhbm5vdCBjcmVhdGUgZmlsZSAkc2lnZmlsZTogJD8iOworCXByaW50IEZIICIoc2lnLXZhbChkc2EociAjJHIjKShzICMkcyMpKSkiOworCWNsb3NlIEZIOworCisJJHJldCA9IHBpcGVfdGhyb3VnaF9wcm9ncmFtKCRkYXRhLAorCQkiZmlwc2RydiAtLWtleSAka2V5ZmlsZSAtLXNpZ25hdHVyZSAkc2lnZmlsZSBkc2EtdmVyaWZ5Iik7CisJdW5saW5rICgkc2lnZmlsZSk7CisJIyBQYXJzZSB0aHJvdWdoIHRoZSBvdXRwdXQgaW5mb3JtYXRpb24KKwlyZXR1cm4gKCRyZXQgPX4gL0dPT0Qgc2lnbmF0dXJlLyk7Cit9CisKKyMjIyMjIyMjIyBFbmQgb2YgbGliZ2NyeXB0IGltcGxlbWVudGF0aW9uICMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIFZlbmRvcjEgaW50ZXJmYWNlIGZ1bmN0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgdmVuZG9yMV9lbmNkZWMoJCQkJCQpIHsKKwlteSAka2V5PXNoaWZ0OworCW15ICRpdj1zaGlmdDsKKwlteSAkY2lwaGVyPXNoaWZ0OworCW15ICRlbmMgPSAoc2hpZnQpID8gImVuY3J5cHQiIDogImRlY3J5cHQiOworCW15ICRkYXRhPXNoaWZ0OworCisJJGRhdGE9aGV4MmJpbigkZGF0YSk7CisJbXkgJHByb2dyYW0gPSAiLi9hZXMgJGVuYyAka2V5IjsKKwkkZGF0YT1waXBlX3Rocm91Z2hfcHJvZ3JhbSgkZGF0YSwkcHJvZ3JhbSk7CisJcmV0dXJuIGJpbjJoZXgoJGRhdGEpOworfQorCitzdWIgdmVuZG9yMV9zdGF0ZV9jaXBoZXIoJCQkJCQpIHsKKwlteSAkY2lwaGVyID0gc2hpZnQ7CisJbXkgJGVuY2RlYyA9IHNoaWZ0OworCW15ICRidWZzaXplID0gc2hpZnQ7CisJbXkgJGtleSA9IHNoaWZ0OworCW15ICRpdiA9IHNoaWZ0OworCisJJGtleSA9IGJpbjJoZXgoJGtleSk7CisJbXkgJGVuYyA9ICRlbmNkZWMgPyAiZW5jcnlwdCI6ICJkZWNyeXB0IjsKKwlteSAkb3V0ID0gIi4vYWVzICRlbmMgJGtleSAkYnVmc2l6ZSI7CisJcmV0dXJuICRvdXQ7Cit9CisKKyMjIyMjIE5vIG90aGVyIGludGVyZmFjZSBmdW5jdGlvbnMgYmVsb3cgdGhpcyBwb2ludCAjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmFsIGhlbHBlciByb3V0aW5lcworCisjIEV4ZWN1dGluZyBhIHByb2dyYW0gYnkgZmVlZGluZyBTVERJTiBhbmQgcmV0cmlldmluZworIyBTVERPVVQKKyMgJDE6IGRhdGEgc3RyaW5nIHRvIGJlIHBpcGVkIHRvIHRoZSBhcHAgb24gU1RESU4KKyMgcmVzdDogcHJvZ3JhbSBhbmQgYXJncworIyByZXR1cm5zOiBTVERPVVQgb2YgcHJvZ3JhbSBhcyBzdHJpbmcKK3N1YiBwaXBlX3Rocm91Z2hfcHJvZ3JhbSgkQCkgeworCW15ICRpbiA9IHNoaWZ0OworCW15IEBhcmdzID0gQF87CisKKwlteSAoJENPLCAkQ0kpOworCW15ICRwaWQgPSBvcGVuMigkQ08sICRDSSwgQGFyZ3MpOworCisJbXkgJG91dCA9ICIiOworCW15ICRsZW4gPSBsZW5ndGgoJGluKTsKKwlteSAkZmlyc3QgPSAxOworCXdoaWxlICgxKSB7CisJCW15ICRyaW4gPSAiIjsKKwkJbXkgJHdpbiA9ICIiOworCQkjIE91dHB1dCBvZiBwcm9nIGlzIEZEIHRoYXQgd2UgcmVhZAorCQl2ZWMoJHJpbixmaWxlbm8oJENPKSwxKSA9IDE7CisJCSMgSW5wdXQgb2YgcHJvZyBpcyBGRCB0aGF0IHdlIHdyaXRlCisJCSMgY2hlY2sgZm9yICRmaXJzdCBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBjYW4gaGF2ZSBOVUxMIGlucHV0CisJCSMgdGhhdCBpcyB0byBiZSB3cml0dGVuIHRvIHRoZSBhcHAKKwkJaWYgKCAkbGVuID4gMCB8fCAkZmlyc3QpIHsKKwkJCSh2ZWMoJHdpbixmaWxlbm8oJENJKSwxKSA9IDEpOworCQkJJGZpcnN0PTA7CisJCX0KKwkJIyBMZXQgdXMgd2FpdCBmb3IgMTAwbXMKKwkJbXkgJG5mb3VuZCA9IHNlbGVjdChteSAkcm91dD0kcmluLCBteSAkd291dD0kd2luLCB1bmRlZiwgMC4xKTsKKwkJaWYgKCAkd291dCApIHsKKwkJCW15ICR3cml0dGVuID0gc3lzd3JpdGUoJENJLCAkaW4sICRsZW4pOworCQkJZGllICJicm9rZW4gcGlwZSIgaWYgIWRlZmluZWQgJHdyaXR0ZW47CisJCQkkbGVuIC09ICR3cml0dGVuOworCQkJc3Vic3RyKCRpbiwgMCwgJHdyaXR0ZW4pID0gIiI7CisJCQlpZiAoJGxlbiA8PSAwKSB7CisJCQkJY2xvc2UgJENJIG9yIGRpZSAiYnJva2VuIHBpcGU6ICQhIjsKKwkJCX0KKwkJfQorCQlpZiAoICRyb3V0ICkgeworCQkJbXkgJHRtcF9vdXQgPSAiIjsKKwkJCW15ICRieXRlc19yZWFkID0gc3lzcmVhZCgkQ08sICR0bXBfb3V0LCA0MDk2KTsKKwkJCSRvdXQgLj0gJHRtcF9vdXQ7CisJCQlsYXN0IGlmICgkYnl0ZXNfcmVhZCA9PSAwKTsKKwkJfQorCX0KKwljbG9zZSAkQ08gb3IgZGllICJicm9rZW4gcGlwZTogJCEiOworCXdhaXRwaWQgJHBpZCwgMDsKKworCXJldHVybiAkb3V0OworfQorCisjCisjIGNvbnZlcnQgQVNDSUkgaGV4IHRvIGJpbmFyeSBpbnB1dAorIyAkMSBBU0NJSSBoZXgKKyMgcmV0dXJuIGJpbmFyeSByZXByZXNlbnRhdGlvbgorc3ViIGhleDJiaW4oJCkgeworCW15ICRpbiA9IHNoaWZ0OworCW15ICRsZW4gPSBsZW5ndGgoJGluKTsKKwkkbGVuID0gMCBpZiAoJGluIGVxICIwMCIpOworCXJldHVybiBwYWNrKCJIJGxlbiIsICIkaW4iKTsKK30KKworIworIyBjb252ZXJ0IGJpbmFyeSBpbnB1dCB0byBBU0NJSSBoZXgKKyMgJDEgYmluYXJ5IHZhbHVlCisjIHJldHVybiBBU0NJSSBoZXggcmVwcmVzZW50YXRpb24KK3N1YiBiaW4yaGV4KCQpIHsKKwlteSAkaW4gPSBzaGlmdDsKKwlteSAkbGVuID0gbGVuZ3RoKCRpbikqMjsKKwlyZXR1cm4gdW5wYWNrKCJIJGxlbiIsICIkaW4iKTsKK30KKworIyAkMTogYmluYXJ5IGJ5dGUgKGNoYXJhY3RlcikKKyMgcmV0dXJuczogYmluYXJ5IGJ5dGUgd2l0aCBvZGQgcGFyaXR5IHVzaW5nIGxvdyBiaXQgYXMgcGFyaXR5IGJpdAorc3ViIG9kZF9wYXIoJCkgeworCW15ICRpbiA9IG9yZChzaGlmdCk7CisJbXkgJG9kZF9jb3VudD0wOworCWZvcihteSAkaT0xOyAkaTw4OyAkaSsrKSB7CisJCSRvZGRfY291bnQrKyBpZiAoJGluICYgKDE8PCRpKSk7CisJfQorCisJbXkgJG91dCA9ICRpbjsKKwlpZiAoJG9kZF9jb3VudCAmIDEpIHsgIyBjaGVjayBpZiBwYXJpdHkgaXMgYWxyZWFkeSBvZGQKKwkJJG91dCAmPSB+MTsgIyBjbGVhciB0aGUgbG93IGJpdAorCX0gZWxzZSB7CisJCSRvdXQgfD0gMTsgIyBzZXQgdGhlIGxvdyBiaXQKKwl9CisKKwlyZXR1cm4gY2hyKCRvdXQpOworfQorCisjIERFUyBrZXlzIHVzZXMgb25seSB0aGUgNyBoaWdoIGJpdHMgb2YgYSBieXRlLCB0aGUgOHRoIGxvdyBiaXQKKyMgaXMgdGhlIHBhcml0eSBiaXQKKyMgYXMgdGhlIG5ldyBrZXkgaXMgY2FsY3VsYXRlZCBmcm9tIG9sZGtleSBYT1IgY2lwaGVyIGluIHRoZSBNQ1QgdGVzdCwKKyMgdGhlIHBhcml0eSBpcyBub3QgcmVhbGx5IGNoZWNrZWQgYW5kIG5lZWRzIHRvIGJlIHNldCB0byBtYXRjaAorIyBleHBlY3RhdGlvbiAoT3BlblNTTCBkb2VzIG5vdCByZWFsbHkgY2FyZSwgYnV0IHRoZSBGSVBTCisjIHRlc3QgcmVzdWx0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGtleSBoYXMgdGhlIGFwcHJvcHJpYXRlIHBhcml0eSkKKyMgJDE6IGFyYml0cmFyeSBiaW5hcnkgc3RyaW5nCisjIHJldHVybnM6IHN0cmluZyB3aXRoIG9kZCBwYXJpdHkgc2V0IGluIGxvdyBiaXQgb2YgZWFjaCBieXRlCitzdWIgZml4X2tleV9wYXJpdHkoJCkgeworCW15ICRpbiA9IHNoaWZ0OworCW15ICRvdXQgPSAiIjsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBsZW5ndGgoJGluKTsgJGkrKykgeworCQkkb3V0IC49IG9kZF9wYXIoc3Vic3RyKCRpbiwgJGksIDEpKTsKKwl9CisKKwlyZXR1cm4gJG91dDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBERVIvUEVNIHV0aWxpdHkgZnVuY3Rpb25zCisjIENmLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+YXJpZWwvc3NsZWF5L2xheW1hbi5odG1sCisKKyMgQ29udmVydCB1bnNpZ25lZCBpbnRlZ2VyIHRvIGJhc2UyNTYgYmlnaW50IGJ5dGVzCisjICQxIGludGVnZXIKKyMgcmV0dXJucyBiYXNlMjU2IG9jdGV0IHN0cmluZworc3ViIGludF9iYXNlMjU2X3Vuc2lnbmVkKCQpIHsKKwlteSAkbiA9IHNoaWZ0OworCisJbXkgJG91dCA9IGNocigkbiAmIDI1NSk7CisJd2hpbGUgKCRuPj49OCkgeworCQkkb3V0ID0gY2hyKCRuICYgMjU1KSAuICRvdXQ7CisJfQorCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgQ29udmVydCBzaWduZWQgaW50ZWdlciB0byBiYXNlMjU2IGJpZ2ludCBieXRlcworIyAkMSBpbnRlZ2VyCisjIHJldHVybnMgYmFzZTI1NiBvY3RldCBzdHJpbmcKK3N1YiBpbnRfYmFzZTI1Nl9zaWduZWQoJCkgeworCW15ICRuID0gc2hpZnQ7CisJbXkgJG5lZ2F0aXZlID0gKCRuIDwgMCk7CisKKwlpZiAoJG5lZ2F0aXZlKSB7CisJCSRuID0gLSRuLTE7CisJfQorCisJbXkgJG91dCA9IGludF9iYXNlMjU2X3Vuc2lnbmVkKCRuKTsKKworCWlmIChvcmQoc3Vic3RyKCRvdXQsIDAsIDEpKSAmIDEyOCkgeworCQkjIGl0J3Mgc3VwcG9zZWQgdG8gYmUgcG9zaXRpdmUgYnV0IGhhcyBzaWduIGJpdCBzZXQsCisJCSMgYWRkIGEgbGVhZGluZyB6ZXJvCisJCSRvdXQgPSBjaHIoMCkgLiAkb3V0OworCX0KKworCWlmICgkbmVnYXRpdmUpIHsKKwkJbXkgJG5lZyA9IGNocigyNTUpIHggbGVuZ3RoKCRvdXQpOworCQkkb3V0IF49ICRuZWc7CisJfQorCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgTGVuZ3RoIGhlYWRlciBmb3Igc3BlY2lmaWVkIERFUiBvYmplY3QgbGVuZ3RoCisjICQxIGxlbmd0aCBhcyBpbnRlZ2VyCisjIHJldHVybiBvY3RldCBlbmNvZGluZyBmb3IgbGVuZ3RoCitzdWIgZGVyX2xlbigkKSB7CisJbXkgJGxlbiA9IHNoaWZ0OworCisJaWYgKCRsZW4gPD0gMTI3KSB7CisJCXJldHVybiBjaHIoJGxlbik7CisJfSBlbHNlIHsKKwkJbXkgJGJsZW4gPSBpbnRfYmFzZTI1Nl91bnNpZ25lZCgkbGVuKTsKKworCQlyZXR1cm4gY2hyKDEyOCB8IGxlbmd0aCgkYmxlbikpIC4gJGJsZW47CisJfQorfQorCisjIFByZXBlbmQgbGVuZ3RoIGhlYWRlciB0byBvYmplY3QKKyMgJDEgb2JqZWN0IGFzIG9jdGV0IHNlcXVlbmNlCisjIHJldHVybiBsZW5ndGggaGVhZGVyIGZvciBvYmplY3QgZm9sbG93ZWQgYnkgb2JqZWN0IGFzIG9jdGV0cworc3ViIGRlcl9sZW5fb2JqKCQpIHsKKwlteSAkeCA9IHNoaWZ0OworCisJcmV0dXJuIGRlcl9sZW4obGVuZ3RoKCR4KSkgLiAkeDsKK30KKworIyBERVIgc2VxdWVuY2UKKyMgJCogb2JqZWN0cworIyByZXR1cm5zIERFUiBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBvYmplY3RzIHBhc3NlZCBhcyBhcmd1bWVudHMKK3N1YiBkZXJfc2VxIHsKKwlteSAkc2VxID0gam9pbigiIiwgQF8pOworCXJldHVybiBjaHIoMHgzMCkgLiBkZXJfbGVuX29iaigkc2VxKTsKK30KKworIyBERVIgYml0c3RyaW5nCisjICQxIGlucHV0IG9jdGV0cyAobXVzdCBiZSBmdWxsIG9jdGV0cywgZnJhY3Rpb25hbCBvY3RldHMgbm90IHN1cHBvcnRlZCkKKyMgcmV0dXJucyBpbnB1dCBlbmNhcHN1bGF0ZWQgYXMgYml0c3RyaW5nCitzdWIgZGVyX2JpdHN0cmluZygkKSB7CisJbXkgJHggPSBzaGlmdDsKKworCSR4ID0gY2hyKDApIC4gJHg7CisKKwlyZXR1cm4gY2hyKDB4MDMpIC4gZGVyX2xlbl9vYmooJHgpOworfQorCisjIGJhc2UtMTI4LWVuY29kZWQgaW50ZWdlciwgdXNlZCBmb3Igb2JqZWN0IG51bWJlcnMuCisjICQxIGludGVnZXIKKyMgcmV0dXJucyBvY3RldCBzZXF1ZW5jZQorc3ViIGRlcl9iYXNlMTI4KCQpIHsKKwlteSAkbiA9IHNoaWZ0OworCisJbXkgJG91dCA9IGNocigkbiAmIDEyNyk7CisKKwl3aGlsZSAoJG4+Pj03KSB7CisJCSRvdXQgPSBjaHIoMTI4IHwgKCRuICYgMTI3KSkgLiAkb3V0OworCX0KKworCXJldHVybiAkb3V0OworfQorCisjIEdlbmVyYXRpbmcgdGhlIFBFTSBjZXJ0aWZpY2F0ZSBzdHJpbmcKKyMgKGJhc2UtNjQtZW5jb2RlZCBERVIgc3RyaW5nKQorIyAkMSBERVIgc3RyaW5nCisjIHJldHVybnMgb2N0ZXQgc2VxdWVuY2UKK3N1YiBwZW1fY2VydCgkKSB7CisJbXkgJG4gPSBzaGlmdDsKKworCW15ICRvdXQgPSAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbiI7CisJJG91dCAuPSBlbmNvZGVfYmFzZTY0KCRuKTsKKwkkb3V0IC49ICItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiI7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyBERVIgb2JqZWN0IGlkZW50aWZpZXIKKyMgJCogc2VxdWVuY2Ugb2YgaWQgbnVtYmVycworIyByZXR1cm5zIG9jdGV0cworc3ViIGRlcl9vYmplY3RpZCB7CisJbXkgJHYxID0gc2hpZnQ7CisJbXkgJHYyID0gc2hpZnQ7CisKKwlteSAkb3V0ID0gY2hyKDQwKiR2MSArICR2MikgLiBqb2luKCIiLCBtYXAgeyBkZXJfYmFzZTEyOCgkXykgfSBAXyk7CisKKwlyZXR1cm4gY2hyKDB4MDYpIC4gZGVyX2xlbl9vYmooJG91dCk7Cit9CisKKyMgREVSIHNpZ25lZCBpbnRlZ2VyCisjICQxIG51bWJlciBhcyBvY3RldCBzdHJpbmcgKGJhc2UgMjU2IHJlcHJlc2VudGF0aW9uLCBoaWdoIGJ5dGUgZmlyc3QpCisjIHJldHVybnMgbnVtYmVyIGluIERFUiBpbnRlZ2VyIGVuY29kaW5nCitzdWIgZGVyX2JpZ2ludCgkKSB7CisJbXkgJHggPSBzaGlmdDsKKworCXJldHVybiBjaHIoMHgwMikgLiBkZXJfbGVuX29iaigkeCk7Cit9CisKKyMgREVSIHBvc2l0aXZlIGludGVnZXIgd2l0aCBsZWFkaW5nIHplcm9lcyBzdHJpcHBlZAorIyAkMSBudW1iZXIgYXMgb2N0ZXQgc3RyaW5nIChiYXNlIDI1NiByZXByZXNlbnRhdGlvbiwgaGlnaCBieXRlIGZpcnN0KQorIyByZXR1cm5zIG51bWJlciBpbiBERVIgaW50ZWdlciBlbmNvZGluZworc3ViIGRlcl9wb3NfYmlnaW50KCQpIHsKKwlteSAkeCA9IHNoaWZ0OworCisJIyBzdHJpcCBsZWFkaW5nIHplcm8gZGlnaXRzCisJJHggPX4gcy9eW1wwXSsvLzsKKworCSMgbmVlZCB0byBwcmVwZW5kIGEgemVybyBpZiBoaWdoIGJpdCBzZXQsIHNpbmNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZQorCSMgaW50ZXJwcmV0ZWQgYXMgYSBuZWdhdGl2ZSBudW1iZXIuIEFsc28gbmVlZGVkIGZvciBudW1iZXIgMC4KKwlpZiAoIWxlbmd0aCgkeCkgfHwgb3JkKHN1YnN0cigkeCwgMCwgMSkpID49IDEyOCkgeworCQkkeCA9IGNocigwKSAuICR4OworCX0KKworCXJldHVybiBkZXJfYmlnaW50KCR4KTsKK30KKworIyAkMSBudW1iZXIgYXMgc2lnbmVkIGludGVnZXIKKyMgcmV0dXJucyBudW1iZXIgYXMgc2lnbmVkIERFUiBpbnRlZ2VyIGVuY29kaW5nCitzdWIgZGVyX2ludCgkKSB7CisJbXkgJG4gPSBzaGlmdDsKKworCXJldHVybiBkZXJfYmlnaW50KGludF9iYXNlMjU2X3NpZ25lZCgkbikpOworfQorCisjIHRoZSBOVUxMIG9iamVjdCBjb25zdGFudAorc3ViIGRlcl9udWxsKCkgeworCXJldHVybiBjaHIoMHgwNSkgLiBjaHIoMHgwMCk7Cit9CisKKyMgVW5pdCB0ZXN0IGhlbHBlcgorIyAkMSBjYWxjdWxhdGVkIHJlc3VsdAorIyAkMiBleHBlY3RlZCByZXN1bHQKKyMgbm8gcmV0dXJuIHZhbHVlLCBkaWVzIGlmIHJlc3VsdHMgZGlmZmVyLCBzaG93aW5nIGNhbGxlcidzIGxpbmUgbnVtYmVyCitzdWIgZGVyX3Rlc3QoJCQpIHsKKwlteSAkYWN0dWFsID0gYmluMmhleChzaGlmdCk7CisJbXkgJGV4cGVjdGVkID0gc2hpZnQ7CisKKwlteSBAY2FsbGVyID0gY2FsbGVyOworCSRhY3R1YWwgZXEgJGV4cGVjdGVkIG9yIGRpZSAiRXJyb3I6bGluZSAkY2FsbGVyWzJdOmFzc2VydGlvbiBmYWlsZWQ6ICIKKwkJLiIkYWN0dWFsICE9ICRleHBlY3RlZFxuIjsKK30KKworIyBVbml0IHRlc3RpbmcgZm9yIHRoZSBERVIgZW5jb2RpbmcgZnVuY3Rpb25zCisjIEV4YW1wbGVzIGZyb20gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvfmFyaWVsL3NzbGVheS9sYXltYW4uaHRtbAorIyBObyBpbnB1dCwgbm8gb3V0cHV0LiBEaWVzIGlmIHVuaXQgdGVzdHMgZmFpbC4KK3N1YiBkZXJfdW5pdF90ZXN0IHsKKwkjIyB1bmNvbW1lbnQgdGhlc2UgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgdGVzdCBmcmFtZXdvcmsKKwkjcHJpbnQgU1RERVJSICJVbml0IHRlc3QgcnVubmluZ1xuIjsKKwkjZGVyX3Rlc3QgY2hyKDApLCAiNDIiOworCisJZGVyX3Rlc3QgZGVyX251bGwsICIwNTAwIjsKKworCSMgbGVuZ3RoIGJ5dGVzCisJZGVyX3Rlc3QgZGVyX2xlbigxKSwgIjAxIjsKKwlkZXJfdGVzdCBkZXJfbGVuKDEyNyksICI3ZiI7CisJZGVyX3Rlc3QgZGVyX2xlbigxMjgpLCAiODE4MCI7CisJZGVyX3Rlc3QgZGVyX2xlbigyNTYpLCAiODIwMTAwIjsKKwlkZXJfdGVzdCBkZXJfbGVuKDY1NTM2KSwgIjgzMDEwMDAwIjsKKworCSMgYmlnaW50CisJZGVyX3Rlc3QgZGVyX2JpZ2ludChjaHIoMCkpLCAiMDIwMTAwIjsKKwlkZXJfdGVzdCBkZXJfYmlnaW50KGNocigxMjgpKSwgIjAyMDE4MCI7ICMgLTEyOAorCWRlcl90ZXN0IGRlcl9wb3NfYmlnaW50KGNocigxMjgpKSwgIjAyMDIwMDgwIjsgIyArMTI4CisJZGVyX3Rlc3QgZGVyX3Bvc19iaWdpbnQoY2hyKDApLmNocigwKS5jaHIoMSkpLCAiMDIwMTAxIjsKKwlkZXJfdGVzdCBkZXJfcG9zX2JpZ2ludChjaHIoMCkpLCAiMDIwMTAwIjsKKworCSMgaW50ZWdlcnMgKHRlc3RzIGJhc2UyNTYgY29udmVyc2lvbikKKwlkZXJfdGVzdCBkZXJfaW50KCAgICAgMCksICIwMjAxMDAiOworCWRlcl90ZXN0IGRlcl9pbnQoICAgMTI3KSwgIjAyMDE3ZiI7CisJZGVyX3Rlc3QgZGVyX2ludCggICAxMjgpLCAiMDIwMjAwODAiOworCWRlcl90ZXN0IGRlcl9pbnQoICAgMjU2KSwgIjAyMDIwMTAwIjsKKwlkZXJfdGVzdCBkZXJfaW50KCAgICAtMSksICIwMjAxZmYiOworCWRlcl90ZXN0IGRlcl9pbnQoICAtMTI4KSwgIjAyMDE4MCI7CisJZGVyX3Rlc3QgZGVyX2ludCggIC0xMjkpLCAiMDIwMmZmN2YiOworCWRlcl90ZXN0IGRlcl9pbnQoLTY1NTM2KSwgIjAyMDNmZjAwMDAiOworCWRlcl90ZXN0IGRlcl9pbnQoLTY1NTM3KSwgIjAyMDNmZWZmZmYiOworCisJIyBvYmplY3QgZW5jb2RpbmcsICJSU0EgU2VjdXJpdHkiCisJZGVyX3Rlc3QgZGVyX2Jhc2UxMjgoODQwKSwgIjg2NDgiOworCWRlcl90ZXN0IGRlcl9vYmplY3RpZCgxLCAyLCA4NDAsIDExMzU0OSksICIwNjA2MmE4NjQ4ODZmNzBkIjsKKworCSMgQ29tYmluYXRpb25zCisJZGVyX3Rlc3QgZGVyX2JpdHN0cmluZygiQUJDRCIpLCAiMDMwNTAwNDE0MjQzNDQiOworCWRlcl90ZXN0IGRlcl9iaXRzdHJpbmcoZGVyX251bGwpLCAiMDMwMzAwMDUwMCI7CisJZGVyX3Rlc3QgZGVyX3NlcShkZXJfaW50KDApLCBkZXJfbnVsbCksICIzMDA1MDIwMTAwMDUwMCI7CisKKwkjIFRoZSBiaWcgcGljdHVyZQorCWRlcl90ZXN0IGRlcl9zZXEoZGVyX3NlcShkZXJfb2JqZWN0aWQoMSwgMiwgODQwLCAxMTM1NDkpLCBkZXJfbnVsbCksCisJICAgICAgICAgICAgICAgICBkZXJfYml0c3RyaW5nKGRlcl9zZXEoZGVyX3Bvc19iaWdpbnQoY2hyKDUpKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJfcG9zX2JpZ2ludChjaHIoMykpKSkpLAorCSAgICAgICAgICIzMDE3MzAwYTA2MDYyYTg2NDg4NmY3MGQwNTAwMDMwOTAwMzAwNjAyMDEwNTAyMDEwMyI7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3BlblNTTCBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgd29ya2Fyb3VuZHMKKworIyMgRm9ybWF0IG9mIGFuIFJTQSBwdWJsaWMga2V5OgorIyAgICAwOmQ9MCAgaGw9MyBsPSAxNTkgY29uczogU0VRVUVOQ0UKKyMgICAgMzpkPTEgIGhsPTIgbD0gIDEzIGNvbnM6ICBTRVFVRU5DRQorIyAgICA1OmQ9MiAgaGw9MiBsPSAgIDkgcHJpbTogICBPQkpFQ1QgICAgICAgICAgICA6cnNhRW5jcnlwdGlvbgorIyAgIDE2OmQ9MiAgaGw9MiBsPSAgIDAgcHJpbTogICBOVUxMCisjICAgMTg6ZD0xICBobD0zIGw9IDE0MSBwcmltOiAgQklUIFNUUklORworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgc2VxdWVuY2U6IElOVEVHRVIgKG4pLCBJTlRFR0VSIChlKSBdCisKKyMgZ2VuZXJhdGUgUlNBIHB1YiBrZXkgaW4gUEVNIGZvcm1hdAorIyAkMTogZmlsZW5hbWUgd2hlcmUgUEVNIGtleSBpcyB0byBiZSBzdG9yZWQKKyMgJDI6IG4gb2YgdGhlIFJTQSBrZXkgaW4gaGV4CisjICQzOiBlIG9mIHRoZSBSU0Ega2V5IGluIGhleAorIyByZXR1cm46IG5vdGhpbmcsIGJ1dCBmaWxlIGNyZWF0ZWQKK3N1YiBnZW5fcHVicnNha2V5KCQkJCkgeworCW15ICRmaWxlbmFtZT1zaGlmdDsKKwlteSAkbiA9IHNoaWZ0OworCW15ICRlID0gc2hpZnQ7CisKKwkjIG1ha2Ugc3VyZSB0aGUgREVSIGVuY29kZXIgd29ya3MgOy0pCisJZGVyX3VuaXRfdGVzdCgpOworCisJIyBnZW5lcmF0ZSBERVIgZW5jb2Rpbmcgb2YgdGhlIHB1YmxpYyBrZXkKKworCW15ICRyc2FFbmNyeXB0aW9uID0gZGVyX29iamVjdGlkKDEsIDIsIDg0MCwgMTEzNTQ5LCAxLCAxLCAxKTsKKworCW15ICRkZXIgPSBkZXJfc2VxKGRlcl9zZXEoJHJzYUVuY3J5cHRpb24sIGRlcl9udWxsKSwKKwkgICAgICAgICAgICAgICAgICBkZXJfYml0c3RyaW5nKGRlcl9zZXEoZGVyX3Bvc19iaWdpbnQoaGV4MmJpbigkbikpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJfcG9zX2JpZ2ludChoZXgyYmluKCRlKSkpKSk7CisKKwlvcGVuKEZILCAiPiIsICRmaWxlbmFtZSkgb3IgZGllOworCXByaW50IEZIIHBlbV9jZXJ0KCRkZXIpOworCWNsb3NlIEZIOworCit9CisKKyMgZ2VuZXJhdGUgUlNBIHB1YiBrZXkgaW4gUEVNIGZvcm1hdAorIworIyBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgIm9wZW5zc2wgYXNuMXBhcnNlIC1nZW5jb25mIiB3aGljaCB3YXMgYWRkZWQKKyMgaW4gb3BlbnNzbCAwLjkuOC4gSXQgaXMgbm90IGF2YWlsYWJsZSBpbiBvbGRlciBvcGVuc3NsIHZlcnNpb25zLgorIworIyAkMTogZmlsZW5hbWUgd2hlcmUgUEVNIGtleSBpcyB0byBiZSBzdG9yZWQKKyMgJDI6IG4gb2YgdGhlIFJTQSBrZXkgaW4gaGV4CisjICQzOiBlIG9mIHRoZSBSU0Ega2V5IGluIGhleAorIyByZXR1cm46IG5vdGhpbmcsIGJ1dCBmaWxlIGNyZWF0ZWQKK3N1YiBnZW5fcHVicnNha2V5X3VzaW5nX29wZW5zc2woJCQkKSB7CisJbXkgJGZpbGVuYW1lPXNoaWZ0OworCW15ICRuID0gc2hpZnQ7CisJbXkgJGUgPSBzaGlmdDsKKworCW15ICRhc24xID0gImFzbjE9U0VRVUVOQ0U6cHVia2V5aW5mbworCitbcHVia2V5aW5mb10KK2FsZ29yaXRobT1TRVFVRU5DRTpyc2FfYWxnCitwdWJrZXk9QklUV1JBUCxTRVFVRU5DRTpyc2FwdWJrZXkKKworW3JzYV9hbGddCithbGdvcml0aG09T0lEOnJzYUVuY3J5cHRpb24KK3BhcmFtZXRlcj1OVUxMCisKK1tyc2FwdWJrZXldCituPUlOVEVHRVI6MHgkbgorCitlPUlOVEVHRVI6MHgkZSI7CisKKwlvcGVuKEZILCAiPiRmaWxlbmFtZS5jbmYiKSBvciBkaWUgIkNhbm5vdCBjcmVhdGUgZmlsZSAkZmlsZW5hbWUuY25mOiAkPyI7CisJcHJpbnQgRkggJGFzbjE7CisJY2xvc2UgRkg7CisJbXkgQGFyZ3MgPSAoIm9wZW5zc2wiLCAiYXNuMXBhcnNlIiwgIi1nZW5jb25mIiwgIiRmaWxlbmFtZS5jbmYiLCAiLW5vb3V0IiwgIi1vdXQiLCAiJGZpbGVuYW1lLmRlciIpOworCXN5c3RlbShAYXJncykgPT0gMCBvciBkaWUgInN5c3RlbSBAYXJncyBmYWlsZWQ6ICQ/IjsKKwlAYXJncyA9ICgib3BlbnNzbCIsICJyc2EiLCAiLWluZm9ybSIsICJERVIiLCAiLWluIiwgIiRmaWxlbmFtZS5kZXIiLAorCQkgIi1vdXRmb3JtIiwgIlBFTSIsICItcHViaW4iLCAiLXB1Ym91dCIsICItb3V0IiwgIiRmaWxlbmFtZSIpOworCXN5c3RlbShAYXJncykgPT0gMCBvciBkaWUgInN5c3RlbSBAYXJncyBmYWlsZWQ6ICQ/IjsKKwlkaWUgIlJTQSBQRU0gZm9ybWF0dGVkIGtleSBmaWxlICRmaWxlbmFtZSB3YXMgbm90IGNyZWF0ZWQiCisJCWlmICghIC1mICRmaWxlbmFtZSk7CisKKwl1bmxpbmsoIiRmaWxlbmFtZS5jbmYiKTsKKwl1bmxpbmsoIiRmaWxlbmFtZS5kZXIiKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCBjYXNlcworCisjIFRoaXMgaXMgdGhlIEtub3duIEFuc3dlciBUZXN0CisjICQxOiB0aGUgc3RyaW5nIHRoYXQgd2UgaGF2ZSB0byBwdXQgaW4gZnJvbnQgb2YgdGhlIGtleQorIyAgICAgd2hlbiBwcmludGluZyB0aGUga2V5CisjICQyOiBjcnlwdG8ga2V5MSBpbiBoZXggZm9ybQorIyAkMzogY3J5cHRvIGtleTIgaW4gaGV4IGZvcm0gKFRERVMsIHVuZGVmIG90aGVyd2lzZSkKKyMgJDQ6IGNyeXB0byBrZXkzIGluIGhleCBmb3JtIChUREVTLCB1bmRlZiBvdGhlcndpc2UpCisjICQ1OiBJViBpbiBoZXggZm9ybQorIyAkNjogUGxhaW50ZXh0IChlbmM9MSkgb3IgQ2lwaGVydGV4dCAoZW5jPTApIGluIGhleCBmb3JtCisjICQ3OiBjaXBoZXIKKyMgJDg6IGVuY3J5cHQ9MS9kZWNyeXB0PTAKKyMgcmV0dXJuOiBzdHJpbmcgZm9ybWF0dGVkIGFzIGV4cGVjdGVkIGJ5IENBVlMKK3N1YiBrYXQoJCQkJCQkJCQpIHsKKwlteSAka2V5dHlwZSA9IHNoaWZ0OworCW15ICRrZXkxID0gc2hpZnQ7CisJbXkgJGtleTIgPSBzaGlmdDsKKwlteSAka2V5MyA9IHNoaWZ0OworCW15ICRpdiA9IHNoaWZ0OworCW15ICRwdCA9IHNoaWZ0OworCW15ICRjaXBoZXIgPSBzaGlmdDsKKwlteSAkZW5jID0gc2hpZnQ7CisKKwlteSAkb3V0ID0gIiI7CisKKwkkb3V0IC49ICIka2V5dHlwZSA9ICRrZXkxXG4iOworCisJIyB0aGlzIGlzIHRoZSBjb25jYXJkaW5hdGlvbiBvZiB0aGUga2V5cyBmb3IgM0RFUworCWlmIChkZWZpbmVkKCRrZXkyKSkgeworCQkkb3V0IC49ICJLRVkyID0gJGtleTJcbiI7CisJCSRrZXkxID0gJGtleTEgLiAka2V5MjsKKwl9CisJaWYgKGRlZmluZWQoJGtleTMpKSB7CisJCSRvdXQgLj0gIktFWTMgPSAka2V5M1xuIjsKKwkJJGtleTE9ICRrZXkxIC4gJGtleTM7CisJfQorCisJJG91dCAuPSAiSVYgPSAkaXZcbiIgaWYgKGRlZmluZWQoJGl2KSAmJiAkaXYgbmUgIiIpOworCWlmICgkZW5jKSB7CisJCSRvdXQgLj0gIlBMQUlOVEVYVCA9ICRwdFxuIjsKKwkJJG91dCAuPSAiQ0lQSEVSVEVYVCA9ICIgLiAmJGVuY2RlYygka2V5MSwgJGl2LCAkY2lwaGVyLCAxLCAkcHQpIC4gIlxuIjsKKwl9IGVsc2UgeworCQkkb3V0IC49ICJDSVBIRVJURVhUID0gJHB0XG4iOworCQkkb3V0IC49ICJQTEFJTlRFWFQgPSAiIC4gJiRlbmNkZWMoJGtleTEsICRpdiwgJGNpcGhlciwgMCwgJHB0KSAuICJcbiI7CisJfQorCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgVGhpcyBpcyB0aGUgS25vd24gQW5zd2VyIFRlc3QgZm9yIEhhc2hlcworIyAkMTogUGxhaW50ZXh0IGluIGhleCBmb3JtCisjICQyOiBoYXNoCisjICQzOiBoYXNoIGxlbmd0aCAodW5kZWYgaWYgbm90IGFwcGxpY2FibGUpCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgaGFzaF9rYXQoJCQkKSB7CisJbXkgJHB0ID0gc2hpZnQ7CisJbXkgJGNpcGhlciA9IHNoaWZ0OworCW15ICRsZW4gPSBzaGlmdDsKKworCW15ICRvdXQgPSAiIjsKKwkkb3V0IC49ICJMZW4gPSAkbGVuXG4iIGlmIChkZWZpbmVkKCRsZW4pKTsKKwkkb3V0IC49ICJNc2cgPSAkcHRcbiI7CisKKwkkcHQgPSAiIiBpZighJGxlbik7CisJJG91dCAuPSAiTUQgPSAiIC4gJiRoYXNoKCRwdCwgJGNpcGhlcikgLiAiXG4iOworCXJldHVybiAkb3V0OworfQorCisjIEtub3duIEFuc3dlciBUZXN0IGZvciBITUFDIGhhc2gKKyMgJDE6IGtleSBsZW5ndGggaW4gYnl0ZXMKKyMgJDI6IE1BQyBsZW5ndGggaW4gYnl0ZXMKKyMgJDM6IGtleSBmb3IgSE1BQyBpbiBoZXggZm9ybQorIyAkNDogbWVzc2FnZSB0byBiZSBoYXNoZWQKKyMgcmV0dXJuOiBzdHJpbmcgZm9ybWF0dGVkIGFzIGV4cGVjdGVkIGJ5IENBVlMKK3N1YiBobWFjX2thdCgkJCQkKSB7CisJbXkgJGtsZW4gPSBzaGlmdDsKKwlteSAkdGxlbiA9IHNoaWZ0OworCW15ICRrZXkgID0gc2hpZnQ7CisJbXkgJG1zZyAgPSBzaGlmdDsKKworCSMgWFhYIHRoaXMgaXMgYSBoYWNrIC0gd2UgbmVlZCB0byBkZWNpcGhlciB0aGUgSE1BQyBSRVEgZmlsZXMgaW4gYSBtb3JlCisJIyBzYW5lIHdheQorCSMKKwkjIFRoaXMgaXMgYSBjb252ZXJzaW9uIHRhYmxlIGZyb20gdGhlIGV4cGVjdGVkIGhhc2ggb3V0cHV0IHNpemUKKwkjIHRvIHRoZSBhc3N1bWVkIGhhc2ggdHlwZSAtIHdlIG9ubHkgZGVmaW5lIGhlcmUgdGhlIGJsb2NrIHNpemUgb2YKKwkjIHRoZSB1bmRlcmx5aW5nIGhhc2hlcyBhbmQgZG8gbm90IGFsbG93IGFueSB0cnVuY2F0aW9uCisJbXkgJWhhc2h0eXBlID0gKAorCQkyMCA9PiAxLAorCQkyOCA9PiAyMjQsCisJCTMyID0+IDI1NiwKKwkJNDggPT4gMzg0LAorCQk2NCA9PiA1MTIKKwkpOworCisJZGllICJIYXNoIG91dHB1dCBzaXplICR0bGVuIGlzIG5vdCBzdXBwb3J0ZWQhIgorCQlpZighZGVmaW5lZCgkaGFzaHR5cGV7JHRsZW59KSk7CisKKwlteSAkb3V0ID0gIiI7CisJJG91dCAuPSAiS2xlbiA9ICRrbGVuXG4iOworCSRvdXQgLj0gIlRsZW4gPSAkdGxlblxuIjsKKwkkb3V0IC49ICJLZXkgPSAka2V5XG4iOworCSRvdXQgLj0gIk1zZyA9ICRtc2dcbiI7CisJJG91dCAuPSAiTWFjID0gIiAuICYkaG1hYygka2V5LCAkdGxlbiwgJG1zZywgJGhhc2h0eXBleyR0bGVufSkgLiAiXG4iOworCisJcmV0dXJuICRvdXQ7Cit9CisKKworIyBDaXBoZXIgTW9udGUgQ2FybG8gVGVzdGluZworIyAkMTogdGhlIHN0cmluZyB0aGF0IHdlIGhhdmUgdG8gcHV0IGluIGZyb250IG9mIHRoZSBrZXkKKyMgICAgIHdoZW4gcHJpbnRpbmcgdGhlIGtleQorIyAkMjogY3J5cHRvIGtleTEgaW4gaGV4IGZvcm0KKyMgJDM6IGNyeXB0byBrZXkyIGluIGhleCBmb3JtIChUREVTLCB1bmRlZiBvdGhlcndpc2UpCisjICQ0OiBjcnlwdG8ga2V5MyBpbiBoZXggZm9ybSAoVERFUywgdW5kZWYgb3RoZXJ3aXNlKQorIyAkNTogSVYgaW4gaGV4IGZvcm0KKyMgJDY6IFBsYWludGV4dCAoZW5jPTEpIG9yIENpcGhlcnRleHQgKGVuYz0wKSBpbiBoZXggZm9ybQorIyAkNzogY2lwaGVyCisjICQ4OiBlbmNyeXB0PTEvZGVjcnlwdD0wCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgY3J5cHRvX21jdCgkJCQkJCQkJCkgeworCW15ICRrZXl0eXBlID0gc2hpZnQ7CisgICAgICAgIG15ICRrZXkxID0gaGV4MmJpbihzaGlmdCk7CisgICAgICAgIG15ICRrZXkyID0gc2hpZnQ7CisgICAgICAgIG15ICRrZXkzID0gc2hpZnQ7CisgICAgICAgIG15ICRpdiA9IGhleDJiaW4oc2hpZnQpOworICAgICAgICBteSAkc291cmNlX2RhdGEgPSBoZXgyYmluKHNoaWZ0KTsKKwlteSAkY2lwaGVyID0gc2hpZnQ7CisgICAgICAgIG15ICRlbmMgPSBzaGlmdDsKKworCW15ICRvdXQgPSAiIjsKKworCSRrZXkyID0gaGV4MmJpbigka2V5MikgaWYgKGRlZmluZWQoJGtleTIpKTsKKwkka2V5MyA9IGhleDJiaW4oJGtleTMpIGlmIChkZWZpbmVkKCRrZXkzKSk7CisgICAgICAgIG15ICRidWZzaXplID0gbGVuZ3RoKCRzb3VyY2VfZGF0YSk7CisKKwkjIGZvciBBRVM6IG91dGVyIGxvb3AgMC05OSwgaW5uZXIgMC05OTkgYmFzZWQgb24gRklQUyBjb21wbGlhbmNlIHRlc3RzCisJIyBmb3IgUkM0OiBvdXRlciBsb29wIDAtOTksIGlubmVyIDAtOTk5IGJhc2VkIG9uIGF0c2VjIGNvbXBsaWFuY2UgdGVzdHMKKwkjIGZvciBERVM6IG91dGVyIGxvb3AgMC0zOTksIGlubmVyIDAtOTk5OSBiYXNlZCBvbiBGSVBTIGNvbXBsaWFuY2UgdGVzdHMKKwlteSAkY2lwaCA9IHN1YnN0cigkY2lwaGVyLDAsMyk7CisJbXkgJG9sb29wPTEwMDsKKwlteSAkaWxvb3A9MTAwMDsKKwlpZiAoJGNpcGggPX4gL2Rlcy8pIHskb2xvb3A9NDAwOyRpbG9vcD0xMDAwMDt9CisKKyAgICAgICAgZm9yIChteSAkaT0wOyAkaTwkb2xvb3A7ICsrJGkpIHsKKwkJJG91dCAuPSAiQ09VTlQgPSAkaVxuIjsKKwkJaWYgKGRlZmluZWQoJGtleTIpKSB7CisJCQkkb3V0IC49ICIka2V5dHlwZSA9ICIuIGJpbjJoZXgoJGtleTEpLiAiXG4iOworCQkJJG91dCAuPSAiS0VZMiA9ICIuIGJpbjJoZXgoJGtleTIpLiAiXG4iOworCQkJJGtleTEgPSAka2V5MSAuICRrZXkyOworCQl9IGVsc2UgeworCQkJJG91dCAuPSAiJGtleXR5cGUgPSAiLiBiaW4yaGV4KCRrZXkxKS4gIlxuIjsKKwkJfQorCQlpZihkZWZpbmVkKCRrZXkzKSkgeworCQkJJG91dCAuPSAiS0VZMyA9ICIuIGJpbjJoZXgoJGtleTMpLiAiXG4iOworCQkJJGtleTEgPSAka2V5MSAuICRrZXkzOworCQl9CisgICAgICAgIAlteSAka2V5bGVuID0gbGVuZ3RoKCRrZXkxKTsKKworICAgICAgICAgICAgICAgICRvdXQgLj0gIklWID0gIi4gYmluMmhleCgkaXYpIC4gIlxuIgorCQkJaWYgKGRlZmluZWQoJGl2KSAmJiAkaXYgbmUgIiIpOworCisgICAgICAgICAgICAgICAgaWYgKCRlbmMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgLj0gIlBMQUlOVEVYVCA9ICIuIGJpbjJoZXgoJHNvdXJjZV9kYXRhKS4gIlxuIjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAiQ0lQSEVSVEVYVCA9ICIuIGJpbjJoZXgoJHNvdXJjZV9kYXRhKS4gIlxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXkgKCRDTywgJENJKTsKKwkJbXkgJGNpcGhlcl9pbXAgPSAmJHN0YXRlX2NpcGhlcigkY2lwaGVyLCAkZW5jLCAkYnVmc2l6ZSwgJGtleTEsICRpdik7CisJCSRjaXBoZXJfaW1wID0gJiRzdGF0ZV9jaXBoZXJfZGVzKCRjaXBoZXIsICRlbmMsICRidWZzaXplLCAka2V5MSwgJGl2KSBpZigkY2lwaGVyID1+IC9kZXMvKTsKKyAgICAgICAgICAgICAgICBteSAkcGlkID0gb3BlbjIoJENPLCAkQ0ksICRjaXBoZXJfaW1wKTsKKworICAgICAgICAgICAgICAgIG15ICRjYWxjX2RhdGEgPSAkaXY7ICMgQ1Rbal0KKyAgICAgICAgICAgICAgICBteSAkb2xkX2NhbGNfZGF0YTsgIyBDVFtqLTFdCisgICAgICAgICAgICAgICAgbXkgJG9sZF9vbGRfY2FsY19kYXRhOyAjIENUW2otMl0KKwkJbXkgJG5leHRfc291cmNlOworCisJCSMgVERFUyBpbm5lciBsb29wIGltcGxlbWVudHMgbG9naWMgd2l0aGluIGRyaXZlcgorCQlpZiAoJGNpcGhlciA9fiAvZGVzLykgeworCQkJIyBOZWVkIHRvIHByb3ZpZGUgYSBkdW1teSBJViBpbiBjYXNlIG9mIEVDQiBtb2RlLgorCQkJbXkgJGl2X2FyZyA9IChkZWZpbmVkKCRpdikgJiYgJGl2IG5lICIiKQorCQkJCQk/IGJpbjJoZXgoJGl2KQorCQkJCQk6ICIwMCJ4KGxlbmd0aCgkc291cmNlX2RhdGEpKTsKKwkJCXByaW50ICRDSSAiMVxuIgorCQkJCSAgLiRpbG9vcC4iXG4iCisJCQkJICAuYmluMmhleCgka2V5MSkuIlxuIgorCQkJCSAgLiRpdl9hcmcuIlxuIgorCQkJCSAgLmJpbjJoZXgoJHNvdXJjZV9kYXRhKS4iXG5cbiIgb3IgZGllOworCQkJY2hvbXAobXkgJGxpbmUgPSA8JENPPik7CisJCQkkY2FsY19kYXRhID0gaGV4MmJpbigkbGluZSk7CisJCQljaG9tcCgkbGluZSA9IDwkQ08+KTsKKwkJCSRvbGRfY2FsY19kYXRhID0gaGV4MmJpbigkbGluZSk7CisJCQljaG9tcCgkbGluZSA9IDwkQ08+KTsKKwkJCSRvbGRfb2xkX2NhbGNfZGF0YSA9IGhleDJiaW4oJGxpbmUpOworCQkJY2hvbXAoJGxpbmUgPSA8JENPPik7CisJCQkkaXYgPSBoZXgyYmluKCRsaW5lKSBpZiAoZGVmaW5lZCgkaXYpICYmICRpdiBuZSAiIik7CisJCQljaG9tcCgkbGluZSA9IDwkQ08+KTsKKwkJCSRuZXh0X3NvdXJjZSA9IGhleDJiaW4oJGxpbmUpOworCQkJIyBTa2lwIG92ZXIgZW1wdHkgbGluZS4KKwkJCSRsaW5lID0gPCRDTz47CisJCX0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGZvciAobXkgJGogPSAwOyAkaiA8ICRpbG9vcDsgKyskaikgeworCQkJCSRvbGRfb2xkX2NhbGNfZGF0YSA9ICRvbGRfY2FsY19kYXRhOworICAgICAgICAgICAgICAgIAkgICAgICAgICRvbGRfY2FsY19kYXRhID0gJGNhbGNfZGF0YTsKKworCQkJCSNwcmludCBTVERFUlIgInNvdXJjZV9kYXRhPSIsIGJpbjJoZXgoJHNvdXJjZV9kYXRhKSwgIlxuIjsKKwkJCQlzeXN3cml0ZSAkQ0ksICRzb3VyY2VfZGF0YSBvciBkaWUgJCE7CisJCQkJbXkgJGxlbiA9IHN5c3JlYWQgJENPLCAkY2FsY19kYXRhLCAkYnVmc2l6ZTsKKworCQkJCSNwcmludCBTVERFUlIgImxlbj0kbGVuLCBidWZzaXplPSRidWZzaXplXG4iOworCQkJCWRpZSBpZiAkbGVuIG5lICRidWZzaXplOworCQkJCSNwcmludCBTVERFUlIgImNhbGNfZGF0YT0iLCBiaW4yaGV4KCRjYWxjX2RhdGEpLCAiXG4iOworCisJCQkJaWYgKCAoISRlbmMgJiYgJGNpcGggPX4gL2Rlcy8pIHx8CisJCQkJICAgICAkY2lwaCA9fiAvcmM0LyB8fAorCQkJCSAgICAgJGNpcGhlciA9fiAvZWNiLyApIHsKKwkJCQkJI1RERVMgaW4gZGVjcnlwdGlvbiBtb2RlLCBSQzQgYW5kIEVDQiBtb2RlCisJCQkJCSNoYXZlIGEgc3BlY2lhbCBydWxlCisJCQkJCSRzb3VyY2VfZGF0YSA9ICRjYWxjX2RhdGE7CisJCQkJfSBlbHNlIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgJHNvdXJjZV9kYXRhID0gJG9sZF9jYWxjX2RhdGE7CisJCQkJfQorCSAgICAgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgICAgICAgICBjbG9zZSAkQ087CisgICAgICAgICAgICAgICAgY2xvc2UgJENJOworICAgICAgICAgICAgICAgIHdhaXRwaWQgJHBpZCwgMDsKKworICAgICAgICAgICAgICAgIGlmICgkZW5jKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICJDSVBIRVJURVhUID0gIi4gYmluMmhleCgkY2FsY19kYXRhKS4gIlxuXG4iOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICJQTEFJTlRFWFQgPSAiLiBiaW4yaGV4KCRjYWxjX2RhdGEpLiAiXG5cbiI7CisgICAgICAgICAgICAgICAgfQorCisJCWlmICggJGNpcGggPX4gL2Flcy8gKSB7CisJICAgICAgICAgICAgICAgICRrZXkxIF49IHN1YnN0cigkb2xkX2NhbGNfZGF0YSAuICRjYWxjX2RhdGEsIC0ka2V5bGVuKTsKKwkJCSNwcmludCBTVERFUlIgYmluMmhleCgka2V5MSkuIlxuIjsKKwkJfSBlbHNpZiAoICRjaXBoID1+IC9kZXMvICkgeworCQkJZGllICJXcm9uZyBrZXlsZW4gJGtleWxlbiIgaWYgKCRrZXlsZW4gIT0gMjQpOworCisJCQkjICRua2V5IG5lZWRlZCBhcyAka2V5IGhvbGRzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQorCQkJIyBvbGQga2V5IGF0bQorCQkJbXkgJG5rZXkgPSBmaXhfa2V5X3Bhcml0eShzdWJzdHIoJGtleTEsMCw4KSBeICRjYWxjX2RhdGEpOworCQkJI3ByaW50IFNUREVSUiAiS0VZMSA9ICIuIGJpbjJoZXgoJG5rZXkpLiJcbiI7CisJCQlpZiAoc3Vic3RyKCRrZXkxLDAsOCkgbmUgc3Vic3RyKCRrZXkxLDgsOCkpIHsKKwkJCQkjcHJpbnQgU1RERVJSICJLRVkyIHJlY2FsYzogS0VZMT09S0VZMywgS0VZMiBpbmRlcC4gb3IgYWxsIEtFWXMgYXJlIGluZGVwLlxuIjsKKwkJCQkka2V5MiA9IGZpeF9rZXlfcGFyaXR5KChzdWJzdHIoJGtleTEsOCw4KSBeICRvbGRfY2FsY19kYXRhKSk7CisJCQl9IGVsc2UgeworCQkJCSNwcmludCBTVERFUlIgIktFWTIgcmVjYWxjOiBLRVkxPT1LRVkyPT1LRVkzXG4iOworCQkJCSRrZXkyID0gZml4X2tleV9wYXJpdHkoKHN1YnN0cigka2V5MSw4LDgpIF4gJGNhbGNfZGF0YSkpOworCQkJfQorCQkJI3ByaW50IFNUREVSUiAiS0VZMiA9ICIuIGJpbjJoZXgoJGtleTIpLiJcbiI7CisJCQlpZiAoIHN1YnN0cigka2V5MSwwLDgpIGVxIHN1YnN0cigka2V5MSwxNikpIHsKKwkJCQkjcHJpbnQgU1RERVJSICJLRVkzIHJlY2FsYzogS0VZMT09S0VZMj09S0VZMyBvciBLRVkxPT1LRVkzLCBLRVkyIGluZGVwLlxuIjsKKwkJCQkka2V5MyA9IGZpeF9rZXlfcGFyaXR5KChzdWJzdHIoJGtleTEsMTYpIF4gJGNhbGNfZGF0YSkpOworCQkJfSBlbHNlIHsKKwkJCQkjcHJpbnQgU1RERVJSICJLRVkzIHJlY2FsYzogYWxsIEtFWXMgYXJlIGluZGVwZW5kZW50XG4iOworCQkJCSRrZXkzID0gZml4X2tleV9wYXJpdHkoKHN1YnN0cigka2V5MSwxNikgXiAkb2xkX29sZF9jYWxjX2RhdGEpKTsKKwkJCX0KKwkJCSNwcmludCBTVERFUlIgIktFWTMgPSAiLiBiaW4yaGV4KCRrZXkzKS4iXG4iOworCisJCQkjIHJlc2V0IHRoZSBmaXJzdCBrZXkgLSBjb25jYXJkaW5hdGlvbiBoYXBwZW5zIGF0CisJCQkjIGJlZ2lubmluZyBvZiBsb29wCisJCQkka2V5MT0kbmtleTsKKwkJfSBlbHNpZiAoJGNpcGggPX4gL3JjNC8gKSB7CisJCQkka2V5MSBePSBzdWJzdHIoJGNhbGNfZGF0YSwgMCwgMTYpOworCQkJI3ByaW50IFNUREVSUiBiaW4yaGV4KCRrZXkxKS4iXG4iOworCQl9IGVsc2UgeworCQkJZGllICJUZXN0IGxpbWl0YXRpb246IGNpcGhlciAnJGNpcGhlcicgbm90IHN1cHBvcnRlZCBpbiBNb250ZSBDYXJsbyB0ZXN0aW5nIjsKKwkJfQorCisJCWlmICgkY2lwaGVyID1+IC9kZXMtZWRlMy1vZmIvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkc291cmNlX2RhdGEgPSAkc291cmNlX2RhdGEgXiAkbmV4dF9zb3VyY2U7CisJCX0gZWxzaWYgKCEkZW5jICYmICRjaXBoZXIgPX4gL2Rlcy1lZGUzLWNmYi8pIHsKKwkJCSNUREVTIGRlY3J5cHRpb24gQ0ZCIGhhcyBhIHNwZWNpYWwgcnVsZQorCQkJJHNvdXJjZV9kYXRhID0gJG5leHRfc291cmNlOworCQl9IGVsc2lmICggJGNpcGggPX4gL3JjNC8gfHwgJGNpcGhlciBlcSAiZGVzLWVkZTMiIHx8ICRjaXBoZXIgPX4gL2VjYi8pIHsKKwkJCSNObyByZXNldHRpbmcgb2YgSVYgYXMgdGhlIElWIGlzIGFsbCB6ZXJvIHNldCBpbml0aWFsbHkgKGkuZS4gbm8gSVYpCisJCQkkc291cmNlX2RhdGEgPSAkY2FsY19kYXRhOworCQl9IGVsc2lmICghICRlbmMgJiYgJGNpcGggPX4gL2Rlcy8gKSB7CisJCQkjVERFUyBpbiBkZWNyeXB0aW9uIG1vZGUgaGFzIGEgc3BlY2lhbCBydWxlCisJCQkkaXYgPSAkb2xkX2NhbGNfZGF0YTsKKwkJCSRzb3VyY2VfZGF0YSA9ICRjYWxjX2RhdGE7CisJCX0gZWxzZSB7CisJICAgICAgICAgICAgICAgICRpdiA9ICRjYWxjX2RhdGE7CisJCQkkc291cmNlX2RhdGEgPSAkb2xkX2NhbGNfZGF0YTsKKwkJfQorICAgICAgICB9CisKKwlyZXR1cm4gJG91dDsKK30KKworIyBIYXNoIE1vbnRlIENhcmxvIFRlc3RpbmcKKyMgJDE6IFBsYWludGV4dCBpbiBoZXggZm9ybQorIyAkMjogaGFzaAorIyByZXR1cm46IHN0cmluZyBmb3JtYXR0ZWQgYXMgZXhwZWN0ZWQgYnkgQ0FWUworc3ViIGhhc2hfbWN0KCQkKSB7CisJbXkgJHB0ID0gc2hpZnQ7CisJbXkgJGNpcGhlciA9IHNoaWZ0OworCisJbXkgJG91dCA9ICIiOworCisJJG91dCAuPSAiU2VlZCA9ICRwdFxuXG4iOworCisgICAgICAgIGZvciAobXkgJGo9MDsgJGo8MTAwOyArKyRqKSB7CisJCSRvdXQgLj0gIkNPVU5UID0gJGpcbiI7CisJCW15ICRtZDA9JHB0OworCQlteSAkbWQxPSRwdDsKKwkJbXkgJG1kMj0kcHQ7CisgICAgICAgIAlmb3IgKG15ICRpPTA7ICRpPDEwMDA7ICsrJGkpIHsKKwkJCSNwcmludCBTVERFUlIgIm91dGVyIGxvb3AgJGo7IGlubmVyIGxvb3AgJGlcbiI7CisJCQlteSAkbWk9ICRtZDAgLiAkbWQxIC4gJG1kMjsKKwkJCSRtZDA9JG1kMTsKKwkJCSRtZDE9JG1kMjsKKwkJCSRtZDIgPSAmJGhhc2goJG1pLCAkY2lwaGVyKTsKKwkJCSRtZDIgPX4gcy9cbi8vOworCQl9CisgICAgICAgICAgICAgICAgJG91dCAuPSAiTUQgPSAkbWQyXG5cbiI7CisJCSRwdD0kbWQyOworCX0KKworCXJldHVybiAkb3V0OworfQorCisjIFJTQSBTaWdHZW4gdGVzdAorIyAkMTogTWVzc2FnZSB0byBiZSBzaWduZWQgaW4gaGV4IGZvcm0KKyMgJDI6IEhhc2ggYWxnb3JpdGhtCisjICQzOiBmaWxlIG5hbWUgd2l0aCBSU0Ega2V5IGluIFBFTSBmb3JtCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgcnNhX3NpZ2dlbigkJCQpIHsKKwlteSAkZGF0YSA9IHNoaWZ0OworCW15ICRjaXBoZXIgPSBzaGlmdDsKKwlteSAka2V5ZmlsZSA9IHNoaWZ0OworCisJbXkgJG91dCA9ICIiOworCisJJG91dCAuPSAiU0hBQWxnID0gJGNpcGhlclxuIjsKKwkkb3V0IC49ICJNc2cgPSAkZGF0YVxuIjsKKwkkb3V0IC49ICJTID0gIiAuICYkcnNhX3NpZ24oJGRhdGEsIGxjKCRjaXBoZXIpLCAka2V5ZmlsZSkgLiAiXG4iOworCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgUlNBIFNpZ1ZlciB0ZXN0CisjICQxOiBNZXNzYWdlIHRvIGJlIHZlcmlmaWVkIGluIGhleCBmb3JtCisjICQyOiBIYXNoIGFsZ29yaXRtCisjICQzOiBTaWduYXR1cmUgb2YgbWVzc2FnZSBpbiBoZXggZm9ybQorIyAkNDogbiBvZiB0aGUgUlNBIGtleSBpbiBoZXggaW4gaGV4IGZvcm0KKyMgJDU6IGUgb2YgdGhlIFJTQSBrZXkgaW4gaGV4IGluIGhleCBmb3JtCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgcnNhX3NpZ3ZlcigkJCQkJCkgeworCW15ICRkYXRhID0gc2hpZnQ7CisJbXkgJGNpcGhlciA9IHNoaWZ0OworCW15ICRzaWduYXR1cmUgPSBzaGlmdDsKKwlteSAkbiA9IHNoaWZ0OworCW15ICRlID0gc2hpZnQ7CisKKwlteSAkb3V0ID0gIiI7CisKKwkkb3V0IC49ICJTSEFBbGcgPSAkY2lwaGVyXG4iOworCSRvdXQgLj0gImUgPSAkZVxuIjsKKwkkb3V0IC49ICJNc2cgPSAkZGF0YVxuIjsKKwkkb3V0IC49ICJTID0gJHNpZ25hdHVyZVxuIjsKKworCSMgWFhYIG1heWJlIGEgc2VjdXJlIHRlbXAgZmlsZSBuYW1lIGlzIGJldHRlciBoZXJlCisJIyBidXQgc2luY2UgaXQgaXMgbm90IHJ1biBvbiBhIHNlY3VyaXR5IHNlbnNpdGl2ZQorCSMgc3lzdGVtLCBJIGhvcGUgdGhhdCB0aGlzIGlzIGZpbmUKKwlteSAka2V5ZmlsZSA9ICJyc2Ffc2lndmVyLnRtcC4kJCI7CisJZ2VuX3B1YnJzYWtleSgka2V5ZmlsZSwgJG4sICRlKTsKKworCW15ICRzaWdmaWxlID0gIiRrZXlmaWxlLnNpZyI7CisJb3BlbihGSCwgIj4kc2lnZmlsZSIpIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBmaWxlICRzaWdmaWxlOiAkPyI7CisJcHJpbnQgRkggaGV4MmJpbigkc2lnbmF0dXJlKTsKKwljbG9zZSBGSDsKKworCSRvdXQgLj0gIlJlc3VsdCA9ICIgLiAoJiRyc2FfdmVyaWZ5KCRkYXRhLCBsYygkY2lwaGVyKSwgJGtleWZpbGUsICRzaWdmaWxlKSA/ICJQXG4iIDogIkZcbiIpOworCisJdW5saW5rKCRrZXlmaWxlKTsKKwl1bmxpbmsoJHNpZ2ZpbGUpOworCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgUlNBIFg5LjMxIGtleSBnZW5lcmF0aW9uIHRlc3QKKyMgJDEgbW9kdWx1cyBzaXplCisjICQyIGUKKyMgJDMgeHAxCisjICQ0IHhwMgorIyAkNSBYcAorIyAkNiB4cTEKKyMgJDcgeHEyCisjICQ4IFhxCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgcnNhX2tleWdlbigkJCQkJCQkJCkgeworCW15ICRtb2R1bHVzID0gc2hpZnQ7CisJbXkgJGUgPSBzaGlmdDsKKwlteSAkeHAxID0gc2hpZnQ7CisJbXkgJHhwMiA9IHNoaWZ0OworCW15ICRYcCA9IHNoaWZ0OworCW15ICR4cTEgPSBzaGlmdDsKKwlteSAkeHEyID0gc2hpZnQ7CisJbXkgJFhxID0gc2hpZnQ7CisKKwlteSAkb3V0ID0gIiI7CisKKwlteSAkcmV0ID0gJiRyc2FfZGVyaXZlKCRtb2R1bHVzLCAkZSwgJHhwMSwgJHhwMiwgJFhwLCAkeHExLCAkeHEyLCAkWHEpOworCisJbXkgKCRQLCAkUSwgJE4sICREKSA9IHNwbGl0KC9cbi8sICRyZXQpOworCisJJG91dCAuPSAiZSA9ICRlXG4iOworCSRvdXQgLj0gInhwMSA9ICR4cDFcbiI7CisJJG91dCAuPSAieHAyID0gJHhwMlxuIjsKKwkkb3V0IC49ICJYcCA9ICRYcFxuIjsKKwkkb3V0IC49ICJwID0gJFBcbiI7CisJJG91dCAuPSAieHExID0gJHhxMVxuIjsKKwkkb3V0IC49ICJ4cTIgPSAkeHEyXG4iOworCSRvdXQgLj0gIlhxID0gJFhxXG4iOworCSRvdXQgLj0gInEgPSAkUVxuIjsKKwkkb3V0IC49ICJuID0gJE5cbiI7CisJJG91dCAuPSAiZCA9ICREXG5cbiI7CisKKwlyZXR1cm4gJG91dDsKKworfQorCisjIFg5LjMxIFJORyB0ZXN0CisjICQxIGtleSBmb3IgdGhlIEFFUyBjaXBoZXIKKyMgJDIgRFQgdmFsdWUKKyMgJDMgViB2YWx1ZQorIyAkNCB0eXBlICgiVlNUIiwgIk1DVCIpCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgcm5neDkzMSgkJCQkKSB7CisJbXkgJGtleT1zaGlmdDsKKwlteSAkZHQ9c2hpZnQ7CisJbXkgJHY9c2hpZnQ7CisJbXkgJHR5cGU9c2hpZnQ7CisKKwlteSAkb3V0ID0gIktleSA9ICRrZXlcbiI7CisJJG91dCAgIC49ICJEVCA9ICRkdFxuIjsKKwkkb3V0ICAgLj0gIlYgPSAkdlxuIjsKKworCW15ICRjb3VudCA9IDE7CisJJGNvdW50ID0gMTAwMDAgaWYgKCR0eXBlIGVxICJNQ1QiKTsKKworCW15ICRybmRfdmFsID0gIiI7CisKKwkjIHdlIHJlYWQgMTYgYnl0ZXMgZnJvbSBSTkcKKwlteSAkYnVmc2l6ZSA9IDE2OworCisJbXkgKCRDTywgJENJKTsKKwlteSAkcm5nX2ltcCA9ICYkc3RhdGVfcm5nKCRrZXksICRkdCwgJHYpOworCW15ICRwaWQgPSBvcGVuMigkQ08sICRDSSwgJHJuZ19pbXApOworCWZvciAobXkgJGkgPSAwOyAkaSA8ICRjb3VudDsgKyskaSkgeworCQlteSAkbGVuID0gc3lzcmVhZCAkQ08sICRybmRfdmFsLCAkYnVmc2l6ZTsKKwkJI3ByaW50IFNUREVSUiAibGVuPSRsZW4sIGJ1ZnNpemU9JGJ1ZnNpemVcbiI7CisJCWRpZSAibGVuPSRsZW4gIT0gYnVmc2l6ZT0kYnVmc2l6ZSIgaWYgJGxlbiBuZSAkYnVmc2l6ZTsKKwkJI3ByaW50IFNUREVSUiAiY2FsY19kYXRhPSIsIGJpbjJoZXgoJHJuZF92YWwpLCAiXG4iOworCX0KKwljbG9zZSAkQ087CisJY2xvc2UgJENJOworCXdhaXRwaWQgJHBpZCwgMDsKKworCSRvdXQgLj0gIlIgPSAiIC4gYmluMmhleCgkcm5kX3ZhbCkgLiAiXG5cbiI7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyBEU0EgUFFHR2VuIHRlc3QKKyMgJDEgbW9kdWx1cyBzaXplCisjICQyIG51bWJlciBvZiByb3VuZHMgdG8gcGVyZm9ybSB0aGUgdGVzdAorIyByZXR1cm46IHN0cmluZyBmb3JtYXR0ZWQgYXMgZXhwZWN0ZWQgYnkgQ0FWUworc3ViIGRzYV9wcWdnZW5fZHJpdmVyKCQkKSB7CisJbXkgJG1vZCA9IHNoaWZ0OworCW15ICRyb3VuZHMgPSBzaGlmdDsKKworCW15ICRvdXQgPSAiIjsKKwlmb3IobXkgJGk9MDsgJGk8JHJvdW5kczsgJGkrKykgeworCQlteSAkcmV0ID0gJiRkc2FfcHFnZ2VuKCRtb2QpOworCQlteSAoJFAsICRRLCAkRywgJFNlZWQsICRjLCAkSCkgPSBzcGxpdCgvXG4vLCAkcmV0KTsKKwkJZGllICJSZXR1cm4gdmFsdWUgZG9lcyBub3QgY29udGFpbiBhbGwgZXhwZWN0ZWQgdmFsdWVzIG9mIFAsIFEsIEcsIFNlZWQsIGMsIEggZm9yIGRzYV9wcWdnZW4iCisJCQlpZiAoIWRlZmluZWQoJFApIHx8ICFkZWZpbmVkKCRRKSB8fCAhZGVmaW5lZCgkRykgfHwKKwkJCSAgICAhZGVmaW5lZCgkU2VlZCkgfHwgIWRlZmluZWQoJGMpIHx8ICFkZWZpbmVkKCRIKSk7CisKKwkJIyBub3cgY2hhbmdlIHRoZSBjb3VudGVyIHRvIGRlY2ltYWwgYXMgQ0FWUyB3YW50cyBkZWNpbWFsCisJCSMgY291bnRlciB2YWx1ZSBhbHRob3VnaCBhbGwgb3RoZXIgaXMgSEVYCisJCSRjID0gaGV4KCRjKTsKKworCQkkb3V0IC49ICJQID0gJFBcbiI7CisJCSRvdXQgLj0gIlEgPSAkUVxuIjsKKwkJJG91dCAuPSAiRyA9ICRHXG4iOworCQkkb3V0IC49ICJTZWVkID0gJFNlZWRcbiI7CisJCSRvdXQgLj0gImMgPSAkY1xuIjsKKwkJJG91dCAuPSAiSCA9ICRIXG5cbiI7CisJfQorCisJcmV0dXJuICRvdXQ7Cit9CisKKworIyBEU0EgU2lnR2VuIHRlc3QKKyMgJDE6IE1lc3NhZ2UgdG8gYmUgc2lnbmVkIGluIGhleCBmb3JtCisjICQyOiBmaWxlIG5hbWUgd2l0aCBEU0Ega2V5IGluIFBFTSBmb3JtCisjIHJldHVybjogc3RyaW5nIGZvcm1hdHRlZCBhcyBleHBlY3RlZCBieSBDQVZTCitzdWIgZHNhX3NpZ2dlbigkJCkgeworCW15ICRkYXRhID0gc2hpZnQ7CisJbXkgJGtleWZpbGUgPSBzaGlmdDsKKworCW15ICRvdXQgPSAiIjsKKworCW15ICVyZXQgPSAmJGRzYV9zaWduKCRkYXRhLCAka2V5ZmlsZSk7CisKKwkkb3V0IC49ICJNc2cgPSAkZGF0YVxuIjsKKwkkb3V0IC49ICJZID0gIiAuICRyZXR7J1knfSAuICJcbiI7CisJJG91dCAuPSAiUiA9ICIgLiAkcmV0eydSJ30gLiAiXG4iOworCSRvdXQgLj0gIlMgPSAiIC4gJHJldHsnUyd9IC4gIlxuIjsKKworCXJldHVybiAkb3V0OworfQorCisKKyMgRFNBIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KKyMgJDEgbW9kdWx1cworIyAkMiBQCisjICQzIFEKKyMgJDQgRworIyAkNSBZIC0gcHVibGljIGtleQorIyAkNiByCisjICQ3IHMKKyMgJDggbWVzc2FnZSB0byBiZSB2ZXJpZmllZAorIyByZXR1cm46IHN0cmluZyBmb3JtYXR0ZWQgYXMgZXhwZWN0ZWQgYnkgQ0FWUworc3ViIGRzYV9zaWd2ZXIoJCQkJCQkJCQpIHsKKwlteSAkbW9kdWx1cyA9IHNoaWZ0OworCW15ICRwID0gc2hpZnQ7CisJbXkgJHEgPSBzaGlmdDsKKwlteSAkZyA9IHNoaWZ0OworCW15ICR5ID0gc2hpZnQ7CisJbXkgJHIgPSBzaGlmdDsKKwlteSAkcyA9IHNoaWZ0OworCW15ICRtc2cgPSBzaGlmdDsKKworCW15ICRvdXQgPSAiIjsKKworCSNQUUcgYXJlIGFscmVhZHkgcHJpbnRlZCAtIGRvIG5vdCBwcmludCB0aGVtIGhlcmUKKworCSRvdXQgLj0gIk1zZyA9ICRtc2dcbiI7CisJJG91dCAuPSAiWSA9ICR5XG4iOworCSRvdXQgLj0gIlIgPSAkclxuIjsKKwkkb3V0IC49ICJTID0gJHNcbiI7CisKKwkjIFhYWCBtYXliZSBhIHNlY3VyZSB0ZW1wIGZpbGUgbmFtZSBpcyBiZXR0ZXIgaGVyZQorCSMgYnV0IHNpbmNlIGl0IGlzIG5vdCBydW4gb24gYSBzZWN1cml0eSBzZW5zaXRpdmUKKwkjIHN5c3RlbSwgSSBob3BlIHRoYXQgdGhpcyBpcyBmaW5lCisJbXkgJGtleWZpbGUgPSAiZHNhX3NpZ3Zlci50bXAuJCQiOworCSYkZHNhX2dlbnB1YmtleSgka2V5ZmlsZSwgJHAsICRxLCAkZywgJHkpOworCisJJG91dCAuPSAiUmVzdWx0ID0gIiAuICgmJGRzYV92ZXJpZnkoJG1zZywgJGtleWZpbGUsICRyLCAkcykgPyAiUFxuIiA6ICJGXG4iKTsKKworCXVubGluaygka2V5ZmlsZSk7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFyc2VyIG9mIGlucHV0IGZpbGUgYW5kIGdlbmVyYXRvciBvZiByZXN1bHQgZmlsZQorIworCitzdWIgdXNhZ2UoKSB7CisKKwlwcmludCBTVERFUlIgIlVzYWdlOgorJDAgWy1SXSBbLURdIFstSSBuYW1lXSA8Q0FWUy10ZXN0IHZlY3RvciBmaWxlPgorCistUglleGVjdXRpb24gb2YgQVJDRk9VUiBpbnN0ZWFkIG9mIE9wZW5TU0wKKy1JIE5BTUUJVXNlIGludGVyZmFjZSBzdHlsZSBOQU1FOgorCQlvcGVuc3NsICAgICBPcGVuU1NMIChkZWZhdWx0KQorCQlsaWJnY3J5cHQgICBMaWJnY3J5cHQKKy1ECVNpZ0dlbiBhbmQgU2lnVmVyIGFyZSBleGVjdXRlZCB3aXRoIERTQQorCVBsZWFzZSBub3RlIHRoYXQgdGhlIERTQSBDQVZTIHZlY3RvcnMgZG8gbm90IGFsbG93IGRpc3Rpbmd1aXNoaW5nCisJdGhlbSBmcm9tIHRoZSBSU0EgdmVjdG9ycy4gQXMgdGhlIFJTQSB0ZXN0IGlzIHRoZSBkZWZhdWx0LCB5b3UgaGF2ZQorCXRvIHN1cHBseSB0aGlzIG9wdGlvbiB0byBhcHBseSB0aGUgRFNBIGxvZ2ljIjsKK30KKworIyBQYXJzZXIgb2YgQ0FWUyB0ZXN0IHZlY3RvciBmaWxlCisjICQxOiBUZXN0IHZlY3RvciBmaWxlCisjICQyOiBPdXRwdXQgZmlsZSBmb3IgdGVzdCByZXN1bHRzCisjIHJldHVybjogbm90aGluZworc3ViIHBhcnNlKCQkKSB7CisJbXkgJGluZmlsZSA9IHNoaWZ0OworCW15ICRvdXRmaWxlID0gc2hpZnQ7CisKKwlteSAkb3V0ID0gIiI7CisKKwkjIHRoaXMgaXMgbXkgY2lwaGVyL2hhc2ggdHlwZQorCW15ICRjaXBoZXIgPSAiIjsKKworCSMgVGVzdCB0eXBlCisJIyAxIC0gY2lwaGVyIGtub3duIGFuc3dlciB0ZXN0CisJIyAyIC0gY2lwaGVyIE1vbnRlIENhcmxvIHRlc3QKKwkjIDMgLSBoYXNoIGtub3duIGFuc3dlciB0ZXN0CisJIyA0IC0gaGFzaCBNb250ZSBDYXJsbyB0ZXN0CisJIyA1IC0gUlNBIHNpZ25hdHVyZSBnZW5lcmF0aW9uCisJIyA2IC0gUlNBIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KKwlteSAkdHQgPSAwOworCisJIyBWYXJpYWJsZXMgZm9yIHRlc3RzCisJbXkgJGtleXR5cGUgPSAiIjsgIyB3ZSBjYW4gaGF2ZSAiS0VZIiwgIktFWXMiLCAiS0VZMSIKKwlteSAka2V5MSA9ICIiOworCW15ICRrZXkyID0gdW5kZWY7ICN1bmRlZiBuZWVkZWQgZm9yIGFsbG93aW5nCisJbXkgJGtleTMgPSB1bmRlZjsgI3RoZSB1c2Ugb2YgdGhlbSBhcyBpbnB1dCB2YXJpYWJsZXMKKwlteSAkcHQgPSAiIjsKKwlteSAkZW5jID0gMTsKKwlteSAkaXYgPSAiIjsKKwlteSAkbGVuID0gdW5kZWY7ICNzZWUga2V5MnwzCisJbXkgJG4gPSAiIjsKKwlteSAkZSA9ICIiOworCW15ICRzaWduYXR1cmUgPSAiIjsKKwlteSAkcnNhX2tleWZpbGUgPSAiIjsKKwlteSAkZHNhX2tleWZpbGUgPSAiIjsKKwlteSAkZHQgPSAiIjsKKwlteSAkdiA9ICIiOworCW15ICRrbGVuID0gIiI7CisJbXkgJHRsZW4gPSAiIjsKKwlteSAkbW9kdWx1cyA9ICIiOworCW15ICRjYXBpdGFsX24gPSAwOworCW15ICRjYXBpdGFsX3AgPSAiIjsKKwlteSAkY2FwaXRhbF9xID0gIiI7CisJbXkgJGNhcGl0YWxfZyA9ICIiOworCW15ICRjYXBpdGFsX3kgPSAiIjsKKwlteSAkY2FwaXRhbF9yID0gIiI7CisJbXkgJHhwMSA9ICIiOworCW15ICR4cDIgPSAiIjsKKwlteSAkWHAgPSAiIjsKKwlteSAkeHExID0gIiI7CisJbXkgJHhxMiA9ICIiOworCW15ICRYcSA9ICIiOworCisJbXkgJG1vZGUgPSAiIjsKKworCW9wZW4oSU4sICI8JGluZmlsZSIpOworCXdoaWxlKDxJTj4pIHsKKworCQlteSAkbGluZSA9ICRfOworCQljaG9tcCgkbGluZSk7CisJCSRsaW5lID1+IHMvXHIvLzsKKworCQlteSAka2V5bGVuID0gIiI7CisKKwkJIyBNb2RlIGFuZCB0eXBlIGNoZWNrCisJCSMgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBwYXJzZWQgbGluZQorCQkjICcjIEFFU1ZTIE1DVCB0ZXN0IGRhdGEgZm9yIENCQycKKwkJIyAnIyBUREVTIE11bHRpIGJsb2NrIE1lc3NhZ2UgVGVzdCBmb3IgQ0JDJworCQkjICcjIElOVkVSU0UgUEVSTVVUQVRJT04gLSBLQVQgZm9yIENCQycKKwkJIyAnIyBTVUJTVElUVVRJT04gVEFCTEUgLSBLQVQgZm9yIENCQycKKwkJIyAnIyBUREVTIE1vbnRlIENhcmxvIChNb2RlcykgVGVzdCBmb3IgQ0JDJworCQkjICcjICAiU0hBLTEgTW9udGUiIGluZm9ybWF0aW9uIGZvciAiSUJNUkhFTDUiJworCQkjICcjICJTaWdWZXIgUEtDUyMxIFZlciAxLjUiIGluZm9ybWF0aW9uIGZvciAiSUJNUkhFTDUiJworCQkjICcjICJTaWdHZW4gUEtDUyMxIFZlciAxLjUiIGluZm9ybWF0aW9uIGZvciAiSUJNUkhFTDUiJworCQkjICcjUkM0VlMgTUNUIHRlc3QgZGF0YScKKworCQkjIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHVzZXIgc3BlY2lmaWVkICdmb3IgIlBST0RVQ1QiJyBzdHJpbmdzCisJCW15ICR0bXBsaW5lID0gJGxpbmU7CisJCSR0bXBsaW5lID1+IHMvIGZvciAiLioiLy87CisKKwkJIyMjIyMgRXh0cmFjdCBjaXBoZXIKKwkJIyBYWFggdGhlcmUgbWF5IGJlIG1vcmUgLSB0byBiZSBhZGRlZAorCQlpZiAoJHRtcGxpbmUgPX4gL14jLiooQ0JDfEVDQnxPRkJ8Q0ZCfFNIQS18U2lnR2VufFNpZ1ZlcnxSQzRWU3xBTlNJIFg5XC4zMXxIYXNoIHNpemVzIHRlc3RlZHxQUUdHZW58S2V5R2VuIFJTQSkvKSB7CisJCQlpZiAoJHRtcGxpbmUgICAgPX4gL0NCQy8pICAgeyAkbW9kZT0iY2JjIjsgfQorCQkJZWxzaWYgKCR0bXBsaW5lID1+IC9FQ0IvKSAgIHsgJG1vZGU9ImVjYiI7IH0KKwkJCWVsc2lmICgkdG1wbGluZSA9fiAvT0ZCLykgICB7ICRtb2RlPSJvZmIiOyB9CisJCQllbHNpZiAoJHRtcGxpbmUgPX4gL0NGQi8pICAgeyAkbW9kZT0iY2ZiIjsgfQorCQkJI3dlIGRvIG5vdCBuZWVkIG1vZGUgYXMgdGhlIGNpcGhlciBpcyBhbHJlYWR5IGNsZWFyCisJCQllbHNpZiAoJHRtcGxpbmUgPX4gL1NIQS0xLykgeyAkY2lwaGVyPSJzaGExIjsgfQorCQkJZWxzaWYgKCR0bXBsaW5lID1+IC9TSEEtMjI0LykgeyAkY2lwaGVyPSJzaGEyMjQiOyB9CisJCQllbHNpZiAoJHRtcGxpbmUgPX4gL1NIQS0yNTYvKSB7ICRjaXBoZXI9InNoYTI1NiI7IH0KKwkJCWVsc2lmICgkdG1wbGluZSA9fiAvU0hBLTM4NC8pIHsgJGNpcGhlcj0ic2hhMzg0IjsgfQorCQkJZWxzaWYgKCR0bXBsaW5lID1+IC9TSEEtNTEyLykgeyAkY2lwaGVyPSJzaGE1MTIiOyB9CisJCQkjd2UgZG8gbm90IG5lZWQgbW9kZSBhcyB0aGUgY2lwaGVyIGlzIGFscmVhZHkgY2xlYXIKKwkJCWVsc2lmICgkdG1wbGluZSA9fiAvUkM0VlMvKSB7ICRjaXBoZXI9InJjNCI7IH0KKwkJCWVsc2lmICgkdG1wbGluZSA9fiAvU2lnR2VufFNpZ1Zlci8pIHsKKwkJCQlkaWUgIkVycm9yOiBYOS4zMSBpcyBub3Qgc3VwcG9ydGVkIgorCQkJCQlpZiAoJHRtcGxpbmUgPX4gL1g5Lyk7CisJCQkJJGNpcGhlcj0ic2hhMSI7ICNwbGFjZSBob2xkZXIgLSBtaWdodCBiZSBvdmVyd3JpdHRlbiBsYXRlcgorCQkJfQorCisJCQlpZiAoJHRtcGxpbmUgPX4gL14jLipBRVNWUy8pIHsKKwkJCQkjIEFFUyBjaXBoZXIgKHBhcnQgb2YgaXQpCisJCQkJJGNpcGhlcj0iYWVzIjsKKwkJCX0KKwkJCWlmICgkdG1wbGluZSA9fiAvXiMuKihUREVTfEtBVCkvKSB7CisJCQkJIyBUREVTIGNpcGhlciAoZnVsbCBkZWZpbml0aW9uKQorCQkJCSMgdGhlIEZJUFMtMTQwIHRlc3QgZ2VuZXJhdG9yIHRvb2wgZG9lcyBub3QgcHJvZHVjZQorCQkJCSMgbWFjaGluZSByZWFkYWJsZSBvdXRwdXQhCisJCQkJaWYgKCRtb2RlIGVxICJjYmMiKSB7ICRjaXBoZXI9ImRlcy1lZGUzLWNiYyI7IH0KKwkJCQlpZiAoJG1vZGUgZXEgImVjYiIpIHsgJGNpcGhlcj0iZGVzLWVkZTMiOyB9CisJCQkJaWYgKCRtb2RlIGVxICJvZmIiKSB7ICRjaXBoZXI9ImRlcy1lZGUzLW9mYiI7IH0KKwkJCQlpZiAoJG1vZGUgZXEgImNmYiIpIHsgJGNpcGhlcj0iZGVzLWVkZTMtY2ZiIjsgfQorCQkJfQorCisJCQkjIGNoZWNrIGZvciBSTkcKKwkJCWlmICgkdG1wbGluZSA9fiAvQU5TSSBYOVwuMzEvKSB7CisJCQkJIyBjaGFuZ2UgdGhlIHRtcGxpbmUgdG8gYWRkIHRoZSB0eXBlIG9mIHRoZQorCQkJCSMgdGVzdCB3aGljaCBpcyBPTkxZIHZpc2libGUgZnJvbSB0aGUgZmlsZQorCQkJCSMgbmFtZSA6LSgKKwkJCQlpZiAoJGluZmlsZSA9fiAvTUNUXC5yZXEvKSB7CisJCQkJCSR0bXBsaW5lIC49ICIgTUNUIjsKKwkJCQl9IGVsc2lmICgkaW5maWxlID1+IC9WU1RcLnJlcS8pIHsKKwkJCQkJJHRtcGxpbmUgLj0gIiBWU1QiOworCQkJCX0gZWxzZSB7CisJCQkJCWRpZSAiVW5leHBlY3RlZCBjaXBoZXIgdHlwZSB3aXRoICRpbmZpbGUiOworCQkJCX0KKwkJCX0KKworCQkJaWYgKCR0dCA9PSAwKSB7CisJCQkjIyMjIyBJZGVudGlmeSB0aGUgdGVzdCB0eXBlCisJCQkJaWYgKCR0bXBsaW5lID1+IC9LZXlHZW4gUlNBIFwoWDlcLjMxXCkvKSB7CisJCQkJCSR0dCA9IDEzOworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiByc2FfZGVyaXZlIGZvciBSU0Ega2V5IGdlbmVyYXRpb24gbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRyc2FfZGVyaXZlKSk7CisJCQkJfSBlbHNpZiAoJHRtcGxpbmUgPX4gL1NpZ1Zlci8gJiYgJG9wdHsnRCd9ICkgeworCQkJCQkkdHQgPSAxMjsKKwkJCQkJZGllICJJbnRlcmZhY2UgZnVuY3Rpb24gZHNhX3ZlcmlmeSBvciBkc2FfZ2VucHVia2V5IGZvciBEU0EgdmVyaWZpY2F0aW9uIG5vdCBkZWZpbmVkIGZvciB0ZXN0ZWQgbGlicmFyeSIKKwkJCQkJCWlmICghZGVmaW5lZCgkZHNhX3ZlcmlmeSkgfHwgIWRlZmluZWQoJGRzYV9nZW5wdWJrZXkpKTsKKwkJCQl9IGVsc2lmICgkdG1wbGluZSA9fiAvU2lnR2VuLyAmJiAkb3B0eydEJ30pIHsKKwkJCQkJJHR0ID0gMTE7CisJCQkJCWRpZSAiSW50ZXJmYWNlIGZ1bmN0aW9uIGRzYV9zaWduIG9yIGdlbl9kc2FrZXkgZm9yIERTQSBzaWduIG5vdCBkZWZpbmVkIGZvciB0ZXN0ZWQgbGlicmFyeSIKKwkJCQkJCWlmICghZGVmaW5lZCgkZHNhX3NpZ24pIHx8ICFkZWZpbmVkKCRnZW5fcnNha2V5KSk7CisJCQkJfSBlbHNpZiAoJHRtcGxpbmUgPX4gL1BRR0dlbi8pIHsKKwkJCQkJJHR0ID0gMTA7CisJCQkJCWRpZSAiSW50ZXJmYWNlIGZ1bmN0aW9uIGZvciBEU0EgUFFHR2VuIHRlc3Rpbmcgbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRkc2FfcHFnZ2VuKSk7CisJCQkJfSBlbHNpZiAoJHRtcGxpbmUgPX4gL0hhc2ggc2l6ZXMgdGVzdGVkLykgeworCQkJCQkkdHQgPSA5OworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiBobWFjIGZvciBITUFDIHRlc3Rpbmcgbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRobWFjKSk7CisJCQkJfSBlbHNpZiAoJHRtcGxpbmUgPX4gL0FOU0kgWDlcLjMxLyAmJiAkdG1wbGluZSA9fiAvTUNULykgeworCQkJCQkkdHQgPSA4OworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiBzdGF0ZV9ybmcgZm9yIFJORyBNQ1Qgbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRzdGF0ZV9ybmcpKTsKKwkJCQl9IGVsc2lmICgkdG1wbGluZSA9fiAvQU5TSSBYOVwuMzEvICYmICR0bXBsaW5lID1+IC9WU1QvKSB7CisJCQkJCSR0dCA9IDc7CisJCQkJCWRpZSAiSW50ZXJmYWNlIGZ1bmN0aW9uIHN0YXRlX3JuZyBmb3IgUk5HIEtBVCBub3QgZGVmaW5lZCBmb3IgdGVzdGVkIGxpYnJhcnkiCisJCQkJCQlpZiAoIWRlZmluZWQoJHN0YXRlX3JuZykpOworCQkJCX0gZWxzaWYgKCR0bXBsaW5lID1+IC9TaWdWZXIvICkgeworCQkJCQkkdHQgPSA2OworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiByc2FfdmVyaWZ5IG9yIGdlbl9yc2FrZXkgZm9yIFJTQSB2ZXJpZmljYXRpb24gbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRyc2FfdmVyaWZ5KSB8fCAhZGVmaW5lZCgkZ2VuX3JzYWtleSkpOworCQkJCX0gZWxzaWYgKCR0bXBsaW5lID1+IC9TaWdHZW4vICkgeworCQkJCQkkdHQgPSA1OworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiByc2Ffc2lnbiBvciBnZW5fcnNha2V5IGZvciBSU0Egc2lnbiBub3QgZGVmaW5lZCBmb3IgdGVzdGVkIGxpYnJhcnkiCisJCQkJCQlpZiAoIWRlZmluZWQoJHJzYV9zaWduKSB8fCAhZGVmaW5lZCgkZ2VuX3JzYWtleSkpOworCQkJCX0gZWxzaWYgKCR0bXBsaW5lID1+IC9Nb250ZXxNQ1R8Q2FybG8vICYmICRjaXBoZXIgPX4gL15zaGEvKSB7CisJCQkJCSR0dCA9IDQ7CisJCQkJCWRpZSAiSW50ZXJmYWNlIGZ1bmN0aW9uIGhhc2ggZm9yIEhhc2hpbmcgbm90IGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRoYXNoKSk7CisJCQkJfSBlbHNpZiAoJHRtcGxpbmUgPX4gL01vbnRlfE1DVHxDYXJsby8pIHsKKwkJCQkJJHR0ID0gMjsKKwkJCQkJZGllICJJbnRlcmZhY2UgZnVuY3Rpb24gc3RhdGVfY2lwaGVyIGZvciBTdGF0ZWZ1bCBDaXBoZXIgb3BlcmF0aW9uIGRlZmluZWQgZm9yIHRlc3RlZCBsaWJyYXJ5IgorCQkJCQkJaWYgKCFkZWZpbmVkKCRzdGF0ZV9jaXBoZXIpIHx8ICFkZWZpbmVkKCRzdGF0ZV9jaXBoZXJfZGVzKSk7CisJCQkJfSBlbHNpZiAoJGNpcGhlciA9fiAvXnNoYS8pIHsKKwkJCQkJJHR0ID0gMzsKKwkJCQkJZGllICJJbnRlcmZhY2UgZnVuY3Rpb24gaGFzaCBmb3IgSGFzaGluZyBub3QgZGVmaW5lZCBmb3IgdGVzdGVkIGxpYnJhcnkiCisJCQkJCQlpZiAoIWRlZmluZWQoJGhhc2gpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkkdHQgPSAxOworCQkJCQlkaWUgIkludGVyZmFjZSBmdW5jdGlvbiBlbmNkZWMgZm9yIEVuY3J5cHRpb24vRGVjcnlwdGlvbiBub3QgZGVmaW5lZCBmb3IgdGVzdGVkIGxpYnJhcnkiCisJCQkJCQlpZiAoIWRlZmluZWQoJGVuY2RlYykpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCSMgVGhpcyBpcyBuZWVkZWQgYXMgQVJDRk9VUiBkb2VzIG5vdCBvcGVyYXRlIHdpdGggYW4gSVYKKwkJJGl2ID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiBpZiAoJGNpcGhlciBlcSAicmM0IgorCQkJCQkJCSAgICAgJiYgJGl2IGVxICIiICk7CisKKwkJIyB3ZSBhcmUgbm93IGxvb2tpbmcgZm9yIHRoZSBzdHJpbmcKKwkJIyAnIyBLZXkgTGVuZ3RoIDogMjU2JworCQkjIGZvdW5kIGluIEFFUworCQlpZiAoJHRtcGxpbmUgPX4gL14jIEtleSBMZW5ndGguKj8oMTI4fDE5MnwyNTYpLykgeworCQkJaWYgKCRjaXBoZXIgZXEgImFlcyIpIHsKKwkJCQkkY2lwaGVyPSIkY2lwaGVyLSQxLSRtb2RlIjsKKwkJCX0gZWxzZSB7CisJCQkJZGllICJFcnJvcjogS2V5IGxlbmd0aCAkMSBnaXZlbiBmb3IgY2lwaGVyICRjaXBoZXIgd2hpY2ggaXMgdW5leHBlY3RlZCI7CisJCQl9CisJCX0KKworCQkjIEdldCB0aGUgdGVzdCBkYXRhCisJCWlmICgkbGluZSA9fiAvXihLRVl8S0VZMXxLZXkpXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gY2lwaGVycyBhbmQgUk5HCisJCQlkaWUgIktFWSBzZWVuIHR3aWNlIC0gaW5wdXQgZmlsZSBjcmFwIiBpZiAoJGtleTEgbmUgIiIpOworCQkJJGtleXR5cGU9JDE7CisJCQkka2V5MT0kMjsKKwkJCSRrZXkxID1+IHMvXHMvL2c7ICNyZXBsYWNlIHBvdGVudGlhbCB3aGl0ZSBzcGFjZXMKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL14oS0VZcylccyo9XHMqKC4qKS8pIHsgIyBmb3VuZCBpbiBjaXBoZXJzIGFuZCBSTkcKKwkJCWRpZSAiS0VZIHNlZW4gdHdpY2UgLSBpbnB1dCBmaWxlIGNyYXAiIGlmICgka2V5MSBuZSAiIik7CisJCQkka2V5dHlwZT0kMTsKKwkJCSRrZXkxPSQyOworCQkJJGtleTEgPX4gcy9ccy8vZzsgI3JlcGxhY2UgcG90ZW50aWFsIHdoaXRlIHNwYWNlcworCQkJJGtleTIgPSAka2V5MTsKKwkJCSRrZXkzID0gJGtleTE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eS0VZMlxzKj1ccyooLiopLykgeyAjIGZvdW5kIGluIFRERVMKKwkJCWRpZSAiRmlyc3Qga2V5IG5vdCBzZXQsIGJ1dCBnb3QgYWxyZWFkeSBzZWNvbmQga2V5IC0gaW5wdXQgZmlsZSBjcmFwIiBpZiAoJGtleTEgZXEgIiIpOworCQkJZGllICJLRVkyIHNlZW4gdHdpY2UgLSBpbnB1dCBmaWxlIGNyYXAiIGlmIChkZWZpbmVkKCRrZXkyKSk7CisJCQkka2V5Mj0kMTsKKwkJCSRrZXkyID1+IHMvXHMvL2c7ICNyZXBsYWNlIHBvdGVudGlhbCB3aGl0ZSBzcGFjZXMKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15LRVkzXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gVERFUworCQkJZGllICJTZWNvbmQga2V5IG5vdCBzZXQsIGJ1dCBnb3QgYWxyZWFkeSB0aGlyZCBrZXkgLSBpbnB1dCBmaWxlIGNyYXAiIGlmICgka2V5MiBlcSAiIik7CisJCQlkaWUgIktFWTMgc2VlbiB0d2ljZSAtIGlucHV0IGZpbGUgY3JhcCIgaWYgKGRlZmluZWQoJGtleTMpKTsKKwkJCSRrZXkzPSQxOworCQkJJGtleTMgPX4gcy9ccy8vZzsgI3JlcGxhY2UgcG90ZW50aWFsIHdoaXRlIHNwYWNlcworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXklWXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gY2lwaGVycworCQkJZGllICJJViBzZWVuIHR3aWNlIC0gaW5wdXQgZmlsZSBjcmFwIiBpZiAoJGl2IG5lICIiKTsKKwkJCSRpdj0kMTsKKwkJCSRpdiA9fiBzL1xzLy9nOyAjcmVwbGFjZSBwb3RlbnRpYWwgd2hpdGUgc3BhY2VzCisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eUExBSU5URVhUXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gY2lwaGVycworCQkJaWYgKCAkMSAhfiAvXD8vICkgeyAjb25seSB1c2UgaXQgaWYgdGhlcmUgaXMgdmFsaWQgaGV4IGRhdGEKKwkJCQlkaWUgIlBMQUlOVEVYVC9DSVBIRVJURVhUIHNlZW4gdHdpY2UgLSBpbnB1dCBmaWxlIGNyYXAiIGlmICgkcHQgbmUgIiIpOworCQkJCSRwdD0kMTsKKwkJCQkkcHQgPX4gcy9ccy8vZzsgI3JlcGxhY2UgcG90ZW50aWFsIHdoaXRlIHNwYWNlcworCQkJCSRlbmM9MTsKKwkJCX0KKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15DSVBIRVJURVhUXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gY2lwaGVycworCQkJaWYgKCAkMSAhfiAvXD8vICkgeyAjb25seSB1c2UgaXQgaWYgdGhlcmUgaXMgdmFsaWQgaGV4IGRhdGEKKwkJCQlkaWUgIlBMQUlOVEVYVC9DSVBIRVJURVhUIHNlZW4gdHdpY2UgLSBpbnB1dCBmaWxlIGNyYXAiIGlmICgkcHQgbmUgIiIpOworCQkJCSRwdD0kMTsKKwkJCQkkcHQgPX4gcy9ccy8vZzsgI3JlcGxhY2UgcG90ZW50aWFsIHdoaXRlIHNwYWNlcworCQkJCSRlbmM9MDsKKwkJCX0KKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15MZW5ccyo9XHMqKC4qKS8pIHsgIyBmb3VuZCBpbiBoYXNocworCQkJJGxlbj0kMTsKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL14oTXNnfFNlZWQpXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gaGFzaHMKKwkJCWRpZSAiTXNnL1NlZWQgc2VlbiB0d2ljZSAtIGlucHV0IGZpbGUgY3JhcCIgaWYgKCRwdCBuZSAiIik7CisJCQkkcHQ9JDI7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eXFttb2Rccyo9XHMqKC4qKVxdJC8pIHsgIyBmb3VuZCBpbiBSU0EgcmVxdWVzdHMKKwkJCSRtb2R1bHVzID0gJDE7CisJCQkkb3V0IC49ICRsaW5lIC4gIlxuXG4iOyAjIHByaW50IGl0CisJCQkjIGdlbmVyYXRlIHRoZSBwcml2YXRlIGtleSB3aXRoIGdpdmVuIGJpdCBsZW5ndGggbm93CisJCQkjIGFzIHdlIGhhdmUgdGhlIHJlcXVpcmVkIGtleSBsZW5ndGggaW4gYml0CisJCQlpZiAoJHR0ID09IDExKSB7CisJCQkJJGRzYV9rZXlmaWxlID0gImRzYV9zaWdnZW4udG1wLiQkIjsKKwkJCQlteSAlcHFnID0gJiRnZW5fZHNha2V5KCRkc2Ffa2V5ZmlsZSk7CisJCQkJJG91dCAuPSAiUCA9ICIgLiAkcHFneydQJ30gLiAiXG4iOworCQkJCSRvdXQgLj0gIlEgPSAiIC4gJHBxZ3snUSd9IC4gIlxuIjsKKwkJCQkkb3V0IC49ICJHID0gIiAuICRwcWd7J0cnfSAuICJcbiI7CisJCQl9IGVsc2lmICggJHR0ID09IDUgKSB7CisJCQkJIyBYWFggbWF5YmUgYSBzZWN1cmUgdGVtcCBmaWxlIG5hbWUgaXMgYmV0dGVyIGhlcmUKKwkJCQkjIGJ1dCBzaW5jZSBpdCBpcyBub3QgcnVuIG9uIGEgc2VjdXJpdHkgc2Vuc2l0aXZlCisJCQkJIyBzeXN0ZW0sIEkgaG9wZSB0aGF0IHRoaXMgaXMgZmluZQorCQkJCSRyc2Ffa2V5ZmlsZSA9ICJyc2Ffc2lnZ2VuLnRtcC4kJCI7CisJCQkJJiRnZW5fcnNha2V5KCRtb2R1bHVzLCAkcnNhX2tleWZpbGUpOworCQkJCW15ICRtb2R1bHVzID0gcGlwZV90aHJvdWdoX3Byb2dyYW0oIiIsICJvcGVuc3NsIHJzYSAtcHVib3V0IC1tb2R1bHVzIC1pbiAkcnNhX2tleWZpbGUiKTsKKwkJCQkkbW9kdWx1cyA9fiBzL01vZHVsdXM9KC4qPylccygufFxzKSovJDEvOworCQkJCSRvdXQgLj0gIm4gPSAkbW9kdWx1c1xuIjsKKwkgICAgICAgIAkgICAgICAgICRvdXQgLj0gIlxuZSA9IDEwMDAxXG4iCisJCQl9CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eU0hBQWxnXHMqPVxzKiguKikvKSB7ICNmb3VuZCBpbiBSU0EgcmVxdWVzdHMKKwkJCSRjaXBoZXI9JDE7CisJCX0KKwkJZWxzaWYoJGxpbmUgPX4gL15uXHMqPVxzKiguKikvKSB7ICMgZm91bmQgaW4gUlNBIHJlcXVlc3RzCisJCQkkb3V0IC49ICRsaW5lIC4gIlxuIjsKKwkJCSRuPSQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXmVccyo9XHMqKC4qKS8pIHsgIyBmb3VuZCBpbiBSU0EgcmVxdWVzdHMKKwkJCSRlPSQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXlNccyo9XHMqKC4qKS8pIHsgIyBmb3VuZCBpbiBSU0EgcmVxdWVzdHMKKwkJCWRpZSAiUyBzZWVuIHR3aWNlIC0gaW5wdXQgZmlsZSBjcmFwIiBpZiAoJHNpZ25hdHVyZSBuZSAiIik7CisJCQkkc2lnbmF0dXJlPSQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXkRUXHMqPVxzKiguKikvKSB7ICMgWDkuMzEgUk5HIHJlcXVlc3RzCisJCQlkaWUgIkRUIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkZHQgbmUgIiIpOworCQkJJGR0PSQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXlZccyo9XHMqKC4qKS8pIHsgIyBYOS4zMSBSTkcgcmVxdWVzdHMKKwkJCWRpZSAiViBzZWVuIHR3aWNlIC0gY2hlY2sgaW5wdXQgZmlsZSIKKwkJCQlpZiAoJHYgbmUgIiIpOworCQkJJHY9JDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eS2xlblxzKj1ccyooLiopLykgeyAjIEhNQUMgcmVxdWVzdHMKKwkJCWRpZSAiS2xlbiBzZWVuIHR3aWNlIC0gY2hlY2sgaW5wdXQgZmlsZSIKKwkJCQlpZiAoJGtsZW4gbmUgIiIpOworCQkJJGtsZW49JDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eVGxlblxzKj1ccyooLiopLykgeyAjIEhNQUMgUk5HIHJlcXVlc3RzCisJCQlkaWUgIlRsZW4gc2VlbiB0d2ljZSAtIGNoZWNrIGlucHV0IGZpbGUiCisJCQkJaWYgKCR0bGVuIG5lICIiKTsKKwkJCSR0bGVuPSQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXk5ccyo9XHMqKC4qKS8pIHsgI0RTQSBQUUdHZW4KKwkJCWRpZSAiTiBzZWVuIHR3aWNlIC0gY2hlY2sgaW5wdXQgZmlsZSIKKwkJCQlpZiAoJGNhcGl0YWxfbik7CisJCQkkY2FwaXRhbF9uID0gJDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eUFxzKj1ccyooLiopLykgeyAjRFNBIFNpZ1ZlcgorCQkJZGllICJQIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkY2FwaXRhbF9wKTsKKwkJCSRjYXBpdGFsX3AgPSAkMTsKKwkJCSRvdXQgLj0gJGxpbmUgLiAiXG4iOyAjIHByaW50IGl0CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eUVxzKj1ccyooLiopLykgeyAjRFNBIFNpZ1ZlcgorCQkJZGllICJRIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkY2FwaXRhbF9xKTsKKwkJCSRjYXBpdGFsX3EgPSAkMTsKKwkJCSRvdXQgLj0gJGxpbmUgLiAiXG4iOyAjIHByaW50IGl0CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eR1xzKj1ccyooLiopLykgeyAjRFNBIFNpZ1ZlcgorCQkJZGllICJHIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkY2FwaXRhbF9nKTsKKwkJCSRjYXBpdGFsX2cgPSAkMTsKKwkJCSRvdXQgLj0gJGxpbmUgLiAiXG4iOyAjIHByaW50IGl0CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eWVxzKj1ccyooLiopLykgeyAjRFNBIFNpZ1ZlcgorCQkJZGllICJZIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkY2FwaXRhbF95KTsKKwkJCSRjYXBpdGFsX3kgPSAkMTsKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15SXHMqPVxzKiguKikvKSB7ICNEU0EgU2lnVmVyCisJCQlkaWUgIlIgc2VlbiB0d2ljZSAtIGNoZWNrIGlucHV0IGZpbGUiCisJCQkJaWYgKCRjYXBpdGFsX3IpOworCQkJJGNhcGl0YWxfciA9ICQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXnhwMVxzKj1ccyooLiopLykgeyAjUlNBIGtleSBnZW4KKwkJCWRpZSAieHAxIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkeHAxKTsKKwkJCSR4cDEgPSAkMTsKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL154cDJccyo9XHMqKC4qKS8pIHsgI1JTQSBrZXkgZ2VuCisJCQlkaWUgInhwMiBzZWVuIHR3aWNlIC0gY2hlY2sgaW5wdXQgZmlsZSIKKwkJCQlpZiAoJHhwMik7CisJCQkkeHAyID0gJDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eWHBccyo9XHMqKC4qKS8pIHsgI1JTQSBrZXkgZ2VuCisJCQlkaWUgIlhwIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkWHApOworCQkJJFhwID0gJDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eeHExXHMqPVxzKiguKikvKSB7ICNSU0Ega2V5IGdlbgorCQkJZGllICJ4cTEgc2VlbiB0d2ljZSAtIGNoZWNrIGlucHV0IGZpbGUiCisJCQkJaWYgKCR4cTEpOworCQkJJHhxMSA9ICQxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXnhxMlxzKj1ccyooLiopLykgeyAjUlNBIGtleSBnZW4KKwkJCWRpZSAieHEyIHNlZW4gdHdpY2UgLSBjaGVjayBpbnB1dCBmaWxlIgorCQkJCWlmICgkeHEyKTsKKwkJCSR4cTIgPSAkMTsKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15YcVxzKj1ccyooLiopLykgeyAjUlNBIGtleSBnZW4KKwkJCWRpZSAiWHEgc2VlbiB0d2ljZSAtIGNoZWNrIGlucHV0IGZpbGUiCisJCQkJaWYgKCRYcSk7CisJCQkkWHEgPSAkMTsKKwkJfQorCQllbHNlIHsKKwkJCSRvdXQgLj0gJGxpbmUgLiAiXG4iOworCQl9CisKKwkJIyBjYWxsIHRlc3RzIGlmIGFsbCBpbnB1dCBkYXRhIGlzIHRoZXJlCisJCWlmICgkdHQgPT0gMSkgeworIAkJCWlmICgka2V5MSBuZSAiIiAmJiAkcHQgbmUgIiIgJiYgJGNpcGhlciBuZSAiIikgeworCQkJCSRvdXQgLj0ga2F0KCRrZXl0eXBlLCAka2V5MSwgJGtleTIsICRrZXkzLCAkaXYsICRwdCwgJGNpcGhlciwgJGVuYyk7CisJCQkJJGtleXR5cGUgPSAiIjsKKwkJCQkka2V5MSA9ICIiOworCQkJCSRrZXkyID0gdW5kZWY7CisJCQkJJGtleTMgPSB1bmRlZjsKKwkJCQkkaXYgPSAiIjsKKwkJCQkkcHQgPSAiIjsKKwkJCX0KKwkJfQorCQllbHNpZiAoJHR0ID09IDIpIHsKKwkJCWlmICgka2V5MSBuZSAiIiAmJiAkcHQgbmUgIiIgJiYgJGNpcGhlciBuZSAiIikgeworCQkJCSRvdXQgLj0gY3J5cHRvX21jdCgka2V5dHlwZSwgJGtleTEsICRrZXkyLCAka2V5MywgJGl2LCAkcHQsICRjaXBoZXIsICRlbmMpOworCQkJCSRrZXl0eXBlID0gIiI7CisJCQkJJGtleTEgPSAiIjsKKwkJCQkka2V5MiA9IHVuZGVmOworCQkJCSRrZXkzID0gdW5kZWY7CisJCQkJJGl2ID0gIiI7CisJCQkJJHB0ID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSAzKSB7CisJCQlpZiAoJHB0IG5lICIiICYmICRjaXBoZXIgbmUgIiIpIHsKKwkJCQkkb3V0IC49IGhhc2hfa2F0KCRwdCwgJGNpcGhlciwgJGxlbik7CisJCQkJJHB0ID0gIiI7CisJCQkJJGxlbiA9IHVuZGVmOworCQkJfQorCQl9CisJCWVsc2lmICgkdHQgPT0gNCkgeworCQkJaWYgKCRwdCBuZSAiIiAmJiAkY2lwaGVyIG5lICIiKSB7CisJCQkJJG91dCAuPSBoYXNoX21jdCgkcHQsICRjaXBoZXIpOworCQkJCSRwdCA9ICIiOworCQkJfQorCQl9CisJCWVsc2lmICgkdHQgPT0gNSkgeworCQkJaWYgKCRwdCBuZSAiIiAmJiAkY2lwaGVyIG5lICIiICYmICRyc2Ffa2V5ZmlsZSBuZSAiIikgeworCQkJCSRvdXQgLj0gcnNhX3NpZ2dlbigkcHQsICRjaXBoZXIsICRyc2Ffa2V5ZmlsZSk7CisJCQkJJHB0ID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSA2KSB7CisJCQlpZiAoJHB0IG5lICIiICYmICRjaXBoZXIgbmUgIiIgJiYgJHNpZ25hdHVyZSBuZSAiIiAmJiAkbiBuZSAiIiAmJiAkZSBuZSAiIikgeworCQkJCSRvdXQgLj0gcnNhX3NpZ3ZlcigkcHQsICRjaXBoZXIsICRzaWduYXR1cmUsICRuLCAkZSk7CisJCQkJJHB0ID0gIiI7CisJCQkJJHNpZ25hdHVyZSA9ICIiOworCQkJfQorCQl9CisJCWVsc2lmICgkdHQgPT0gNyApIHsKKwkJCWlmICgka2V5MSBuZSAiIiAmJiAkZHQgbmUgIiIgJiYgJHYgbmUgIiIpIHsKKwkJCQkkb3V0IC49IHJuZ3g5MzEoJGtleTEsICRkdCwgJHYsICJWU1QiKTsKKwkJCQkka2V5MSA9ICIiOworCQkJCSRkdCA9ICIiOworCQkJCSR2ID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSA4ICkgeworCQkJaWYgKCRrZXkxIG5lICIiICYmICRkdCBuZSAiIiAmJiAkdiBuZSAiIikgeworCQkJCSRvdXQgLj0gcm5neDkzMSgka2V5MSwgJGR0LCAkdiwgIk1DVCIpOworCQkJCSRrZXkxID0gIiI7CisJCQkJJGR0ID0gIiI7CisJCQkJJHYgPSAiIjsKKwkJCX0KKwkJfQorCQllbHNpZiAoJHR0ID09IDkpIHsKKwkJCWlmICgka2xlbiBuZSAiIiAmJiAkdGxlbiBuZSAiIiAmJiAka2V5MSBuZSAiIiAmJiAkcHQgbmUgIiIpIHsKKwkJCQkkb3V0IC49IGhtYWNfa2F0KCRrbGVuLCAkdGxlbiwgJGtleTEsICRwdCk7CisJCQkJJGtleTEgPSAiIjsKKwkJCQkkdGxlbiA9ICIiOworCQkJCSRrbGVuID0gIiI7CisJCQkJJHB0ID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSAxMCkgeworCQkJaWYgKCRtb2R1bHVzIG5lICIiICYmICRjYXBpdGFsX24gPiAwKSB7CisJCQkJJG91dCAuPSBkc2FfcHFnZ2VuX2RyaXZlcigkbW9kdWx1cywgJGNhcGl0YWxfbik7CisJCQkJIyRtb2QgaXMgbm90IHJlc2V0dGVkCisJCQkJJGNhcGl0YWxfbiA9IDA7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSAxMSkgeworCQkJaWYgKCRwdCBuZSAiIiAmJiAkZHNhX2tleWZpbGUgbmUgIiIpIHsKKwkJCQkkb3V0IC49IGRzYV9zaWdnZW4oJHB0LCAkZHNhX2tleWZpbGUpOworCQkJCSRwdCA9ICIiOworCQkJfQorCQl9CisJCWVsc2lmICgkdHQgPT0gMTIpIHsKKwkJCWlmICgkbW9kdWx1cyBuZSAiIiAmJgorCQkJICAgICRjYXBpdGFsX3AgbmUgIiIgJiYKKwkJCSAgICAkY2FwaXRhbF9xIG5lICIiICYmCisJCQkgICAgJGNhcGl0YWxfZyBuZSAiIiAmJgorCQkJICAgICRjYXBpdGFsX3kgbmUgIiIgJiYKKwkJCSAgICAkY2FwaXRhbF9yIG5lICIiICYmCisJCQkgICAgJHNpZ25hdHVyZSBuZSAiIiAmJgorCQkJICAgICRwdCBuZSAiIikgeworCQkJCSRvdXQgLj0gZHNhX3NpZ3ZlcigkbW9kdWx1cywKKwkJCQkJIAkgICAkY2FwaXRhbF9wLAorCQkJCQkJICAgJGNhcGl0YWxfcSwKKwkJCQkJCSAgICRjYXBpdGFsX2csCisJCQkJCQkgICAkY2FwaXRhbF95LAorCQkJCQkJICAgJGNhcGl0YWxfciwKKwkJCQkJCSAgICRzaWduYXR1cmUsCisJCQkJCQkgICAkcHQpOworCisJCQkJIyBXZSBkbyBub3QgY2xlYXIgdGhlIGRvbWFpbiB2YWx1ZXMgUFFHIGFuZAorCQkJCSMgdGhlIG1vZHVsdXMgdmFsdWUgYXMgdGhleQorCQkJCSMgYXJlIHNwZWNpZmllZCBvbmx5IG9uY2UgaW4gYSBmaWxlCisJCQkJIyBhbmQgd2UgZG8gbm90IG5lZWQgdG8gcHJpbnQgdGhlbSBhcyB0aGV5CisJCQkJIyBhcmUgYWxyZWFkeSBwcmludGVkIGFib3ZlCisJCQkJJGNhcGl0YWxfeSA9ICIiOworCQkJCSRjYXBpdGFsX3IgPSAiIjsKKwkJCQkkc2lnbmF0dXJlID0gIiI7CisJCQkJJHB0ID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA9PSAxMykgeworCQkJaWYoJG1vZHVsdXMgbmUgIiIgJiYKKwkJCSAgICRlIG5lICIiICYmCisJCQkgICAkeHAxIG5lICIiICYmCisJCQkgICAkeHAyIG5lICIiICYmCisJCQkgICAkWHAgbmUgIiIgJiYKKwkJCSAgICR4cTEgbmUgIiIgJiYKKwkJCSAgICR4cTIgbmUgIiIgJiYKKwkJCSAgICRYcSBuZSAiIikgeworCQkJCSRvdXQgLj0gcnNhX2tleWdlbigkbW9kdWx1cywKKwkJCQkJCSAgICRlLAorCQkJCQkJICAgJHhwMSwKKwkJCQkJCSAgICR4cDIsCisJCQkJCQkgICAkWHAsCisJCQkJCQkgICAkeHExLAorCQkJCQkJICAgJHhxMiwKKwkJCQkJCSAgICRYcSk7CisJCQkJJGUgPSAiIjsKKwkJCQkkeHAxID0gIiI7CisJCQkJJHhwMiA9ICIiOworCQkJCSRYcCA9ICIiOworCQkJCSR4cTEgPSAiIjsKKwkJCQkkeHEyID0gIiI7CisJCQkJJFhxID0gIiI7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0dCA+IDApIHsKKwkJCWRpZSAiVGVzdCBjYXNlICR0dCBub3QgZGVmaW5lZCI7CisJCX0KKwl9CisKKwljbG9zZSBJTjsKKwkkb3V0ID1+IHMvXG4vXHJcbi9nOyAjIG1ha2UgaXQgYSBkb3MgZmlsZQorCW9wZW4oT1VULCAiPiRvdXRmaWxlIikgb3IgZGllICJDYW5ub3QgY3JlYXRlIG91dHB1dCBmaWxlICRvdXRmaWxlOiAkPyI7CisJcHJpbnQgT1VUICRvdXQ7CisJY2xvc2UgT1VUOworCit9CisKKyMgU2lnbmFsaGFuZGxlcgorc3ViIGNsZWFudXAoKSB7CisJdW5saW5rKCJyc2Ffc2lnZ2VuLnRtcC4kJCIpOworCXVubGluaygicnNhX3NpZ3Zlci50bXAuJCQiKTsKKwl1bmxpbmsoInJzYV9zaWd2ZXIudG1wLiQkLnNpZyIpOworCXVubGluaygicnNhX3NpZ3Zlci50bXAuJCQuZGVyIik7CisJdW5saW5rKCJyc2Ffc2lndmVyLnRtcC4kJC5jbmYiKTsKKwl1bmxpbmsoImRzYV9zaWdnZW4udG1wLiQkIik7CisJdW5saW5rKCJkc2Ffc2lndmVyLnRtcC4kJCIpOworCXVubGluaygiZHNhX3NpZ3Zlci50bXAuJCQuc2lnIik7CisJZXhpdDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIGxldCB1cyBwcmV0ZW5kIHRvIGJlIEMgOi0pCitzdWIgbWFpbigpIHsKKworCXVzYWdlKCkgdW5sZXNzIEBBUkdWOworCisJZ2V0b3B0cygiRFJJOiIsIFwlb3B0KSBvciBkaWUgImJhZCBvcHRpb24iOworCisJIyMjIyMgU2V0IGxpYnJhcnkKKworCWlmICggISBkZWZpbmVkICRvcHR7J0knfSB8fCAkb3B0eydJJ30gZXEgJ29wZW5zc2wnICkgeworCQlwcmludCBTVERFUlIgIlVzaW5nIE9wZW5TU0wgaW50ZXJmYWNlIGZ1bmN0aW9uc1xuIjsKKwkJJGVuY2RlYyA9CVwmb3BlbnNzbF9lbmNkZWM7CisJCSRyc2Ffc2lnbiA9CVwmb3BlbnNzbF9yc2Ffc2lnbjsKKwkJJHJzYV92ZXJpZnkgPQlcJm9wZW5zc2xfcnNhX3ZlcmlmeTsKKwkJJGdlbl9yc2FrZXkgPQlcJm9wZW5zc2xfZ2VuX3JzYWtleTsKKwkJJGhhc2ggPQkJXCZvcGVuc3NsX2hhc2g7CisJCSRzdGF0ZV9jaXBoZXIgPQlcJm9wZW5zc2xfc3RhdGVfY2lwaGVyOworCX0gZWxzaWYgKCAkb3B0eydJJ30gZXEgJ2xpYmdjcnlwdCcgKSB7CisJCXByaW50IFNUREVSUiAiVXNpbmcgbGliZ2NyeXB0IGludGVyZmFjZSBmdW5jdGlvbnNcbiI7CisJCSRlbmNkZWMgPQlcJmxpYmdjcnlwdF9lbmNkZWM7CisJCSRyc2Ffc2lnbiA9CVwmbGliZ2NyeXB0X3JzYV9zaWduOworCQkkcnNhX3ZlcmlmeSA9CVwmbGliZ2NyeXB0X3JzYV92ZXJpZnk7CisJCSRnZW5fcnNha2V5ID0JXCZsaWJnY3J5cHRfZ2VuX3JzYWtleTsKKwkJJHJzYV9kZXJpdmUgPSAJXCZsaWJnY3J5cHRfcnNhX2Rlcml2ZTsKKwkJJGhhc2ggPQkJXCZsaWJnY3J5cHRfaGFzaDsKKwkJJHN0YXRlX2NpcGhlciA9CVwmbGliZ2NyeXB0X3N0YXRlX2NpcGhlcjsKKwkJJHN0YXRlX2NpcGhlcl9kZXMgPQlcJmxpYmdjcnlwdF9zdGF0ZV9jaXBoZXJfZGVzOworCQkkc3RhdGVfcm5nID0JXCZsaWJnY3J5cHRfc3RhdGVfcm5nOworCQkkaG1hYyA9CQlcJmxpYmdjcnlwdF9obWFjOworCQkkZHNhX3BxZ2dlbiA9IAlcJmxpYmdjcnlwdF9kc2FfcHFnZ2VuOworCQkkZ2VuX2RzYWtleSA9ICAgXCZsaWJnY3J5cHRfZ2VuX2RzYWtleTsKKwkJJGRzYV9zaWduID0gICAgIFwmbGliZ2NyeXB0X2RzYV9zaWduOworCQkkZHNhX3ZlcmlmeSA9ICAgXCZsaWJnY3J5cHRfZHNhX3ZlcmlmeTsKKwkJJGRzYV9nZW5wdWJrZXkgPSBcJmxpYmdjcnlwdF9kc2FfZ2VucHVia2V5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRpZSAiSW52YWxpZCBpbnRlcmZhY2Ugb3B0aW9uIGdpdmVuIjsKKyAgICAgICAgfQorCisJbXkgJGluZmlsZT0kQVJHVlswXTsKKwlkaWUgIkVycm9yOiBUZXN0IHZlY3RvciBmaWxlICRpbmZpbGUgbm90IGZvdW5kIiBpZiAoISAtZiAkaW5maWxlKTsKKworCW15ICRvdXRmaWxlID0gJGluZmlsZTsKKwkjIGxldCB1cyBhZGQgLnJzcCByZWdhcmRsZXNzIHdoZXRoZXIgd2UgY291bGQgc3RyaXAgLnJlcQorCSRvdXRmaWxlID1+IHMvXC5yZXEkLy87CisJaWYgKCRvcHR7J1InfSkgeworCQkkb3V0ZmlsZSAuPSAiLnJjNCI7CisJfSBlbHNlIHsKKwkJJG91dGZpbGUgLj0gIi5yc3AiOworCX0KKwlpZiAoLWYgJG91dGZpbGUpIHsKKwkJZGllICJPdXRwdXQgZmlsZSAkb3V0ZmlsZSBjb3VsZCBub3QgYmUgcmVtb3ZlZDogJD8iCisJCQl1bmxlc3MgdW5saW5rKCRvdXRmaWxlKTsKKwl9CisJcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIHRlc3RzIGZyb20gc291cmNlIGZpbGUgJGluZmlsZSB3aXRoIHJlc3VsdHMgc3RvcmVkIGluIGRlc3RpbmF0aW9uIGZpbGUgJG91dGZpbGVcbiI7CisKKwkjU2lnbmFsIGhhbmRsZXIKKwkkU0lHe0hVUH0gPSBcJmNsZWFudXA7CisJJFNJR3tJTlR9ID0gXCZjbGVhbnVwOworCSRTSUd7UVVJVH0gPSBcJmNsZWFudXA7CisJJFNJR3tURVJNfSA9IFwmY2xlYW51cDsKKworCSMgRG8gdGhlIGpvYgorCXBhcnNlKCRpbmZpbGUsICRvdXRmaWxlKTsKKworCWNsZWFudXAoKTsKKworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENhbGwgaXQKK21haW4oKTsKKzE7CmRpZmYgLS1naXQgYS90ZXN0cy9jYXZzX3Rlc3RzLnNoIGIvdGVzdHMvY2F2c190ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDg0OTliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2F2c190ZXN0cy5zaApAQCAtMCwwICsxLDEzNSBAQAorIyEvYmluL3NoCisjIFJ1biBGSVBTIENBVlMgdGVzdHMKKyMgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjCisjIEluc3RydWN0aW9uczoKKyMKKyMgMS4gQ2QgdG8gdGhlIGxpYmdjcnlwdC90ZXN0cyBkaXJlY3RvcnkKKyMKKyMgMi4gVW5wYWNrIHRoZSB0ZXN0IHZlY3RvciB0YXJiYWxsIGludG8gc3ViZGlyZWN0b3J5IG5hbWVkICJjYXZzIi4KKyMgICAgQW4gZXhhbXBsZSBkaXJlY3RvcnkgbGF5b3V0IGFmdGVyIHVucGFja2luZyBtaWdodCBiZToKKyMgICAgICBsaWJnY3J5cHQvdGVzdHMvY2F2cy9BRVMvcmVxL0NCQ0dGU2JveDEyOC5yZXEKKyMgICAgICBsaWJnY3J5cHQvdGVzdHMvY2F2cy9BRVMvcmVxL0NGQjEyOE1DVDEyOC5yZXEKKyMKKyMgICAgTm90ZSB0aGF0IGJlbG93IHRoZSAiY2F2cyIgZGlyZWN0b3J5IHRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZQorIyAgICBkaXJlY3RvcnkgcGFydCBuYW1lZCAicmVxIi4gIEZ1cnRoZXIgYXZvaWQgZGlyZWN0b3J5IHBhcnQKKyMgICAgbmFtZXMgInJlc3AiLgorIworIyAzLiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgbGliZ2NyeXB0L3Rlc3RzIGRpcmVjdG9yeToKKyMgICAgICAuL2NhdnNfdGVzdHMuc2gKKyMKKyMgNC4gU2VuZCB0aGUgcmVzdWx0IGZpbGUgY2F2cy9DQVZTX3Jlc3VsdHMtKi56aXAgdG8gdGhlIHRlc3RpbmcgbGFiLgorIworCisjIFN0b3Agc2NyaXB0IGlmIHNvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbnMuCitzZXQgLWUKKworIyBBIGdsb2JhbCBmbGFnIHRvIGtlZXAgdHJhY2sgb2YgZXJyb3JzLgorZXJyb3JzX3NlZW5fZmlsZT0iJChwd2QpLy4jY2F2c190ZXN0LmVycm9yc19zZWVuLnRtcCIKK1sgLWYgIiRlcnJvcnNfc2Vlbl9maWxlIiBdICYmIHJtICIkZXJyb3JzX3NlZW5fZmlsZSIKK2NvbnRpbnVlX21vZGU9bm8KK1sgIiQxIiA9ICItLWNvbnRpbnVlIiBdICYmIGNvbnRpbnVlX21vZGU9eWVzCisKKworIyBGdW5jdGlvbiB0byBydW4gb25lIHRlc3QuCisjIFRoZSBhcmd1bWVudCBpcyB0aGUgcmVxdWVzdCBmaWxlIG5hbWUuCitmdW5jdGlvbiBydW5fb25lX3Rlc3QgKCkgeworICAgIGxvY2FsIHJlcWZpbGU9IiQxIgorICAgIGxvY2FsIHJzcGZpbGUKKyAgICBsb2NhbCB0bXByc3BmaWxlCisgICAgbG9jYWwgcmVzcGRpcgorICAgIGxvY2FsIGRmbGFnPSIiCisKKyAgICB0bXByc3BmaWxlPSQoZWNobyAiJHJlcWZpbGUiIHwgc2VkICdzLC5yZXEkLC5yc3AsJykKKyAgICByc3BmaWxlPSQoZWNobyAiJHRtcHJzcGZpbGUiIHwgc2VkICdzLC9yZXEvLC9yZXNwLywnICkKKyAgICByZXNwZGlyPSQoZGlybmFtZSAiJHJzcGZpbGUiKQorICAgIFsgLWYgIiR0bXByc3BmaWxlIiBdICYmIHJtICIkdG1wcnNwZmlsZSIKKyAgICBbIC1kICIkcmVzcGRpciIgXSB8fCBta2RpciAiJHJlc3BkaXIiCisgICAgWyAtZiAiJHJzcGZpbGUiIF0gJiYgIHJtICIkcnNwZmlsZSIKKworICAgIGlmIGVjaG8gIiRyZXFmaWxlIiB8IGdyZXAgJy9EU0EvcmVxLycgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBkZmxhZz0iLUQiCisgICAgZmkKKworICAgIGlmIC4vY2F2c19kcml2ZXIucGwgLUkgbGliZ2NyeXB0ICRkZmxhZyAiJHJlcWZpbGUiOyB0aGVuCisgICAgICBpZiBbIC1mICIkdG1wcnNwZmlsZSIgXTsgdGhlbgorICAgICAgICAgIG12ICIkdG1wcnNwZmlsZSIgIiRyc3BmaWxlIgorICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gImZhaWxlZCB0ZXN0OiAkcmVxZmlsZSIgPiYyCisgICAgICAgICAgOiA+IiRlcnJvcnNfc2Vlbl9maWxlIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGVjaG8gImZhaWxlZCB0ZXN0OiAkcmVxZmlsZSByYz0kPyIgPiYyCisgICAgICAgIDogPiIkZXJyb3JzX3NlZW5fZmlsZSIKKyAgICBmaQorfQorCisKKworIyBTYXZlIGRhdGUgYW5kIHN5c3RlbSBhcmNoaXRlY3VyZSB0byBjb25zdHJ1Y3QgdGhlIG91dHB1dCBhcmNoaXZlIG5hbWUKK0RBVEU9JChkYXRlICslWSVtJWQpCitBUkNIPSQoYXJjaCB8fCBlY2hvIHVua25vd24pCityZXN1bHRfZmlsZT0iQ0FWU19yZXN1bHRzLSRBUkNILSREQVRFLnppcCIKKworZm9yIGYgaW4gZmlwc2RydiBjYXZzX2RyaXZlci5wbDsgZG8KKyAgICBpZiBbICEgLWYgIi4vJGYiIF07IHRoZW4KKyAgICAgIGVjaG8gInJlcXVpcmVkIHByb2dyYW0gXCIkZlwiIG1pc3NpbmcgaW4gY3VycmVudCBkaXJlY3RvcnkiID4mMgorICAgICAgZXhpdCAyCisgICAgZmkKK2RvbmUKK2lmIFsgISAtZCBjYXZzIF07IHRoZW4KKyAgICBlY2hvICJyZXF1aXJlZCBkaXJlY3RvcnkgXCJjYXZzXCIgbWlzc2luZyBiZWxvdyBjdXJyZW50IGRpcmVjdG9yeSIgPiYyCisgICAgZXhpdCAyCitmaQoraWYgWyAhIHppcCAtaCA+L2Rldi9udWxsIDI+JjEgXTsgdGhlbgorICAgIGVjaG8gInJlcXVpcmVkIHByb2dyYW0gXCJ6aXBcIiBpcyBub3QgaW5zdGFsbGVkIG9uIHRoaXMgc3lzdGVtIiA+JjIKKyAgICBleGl0IDIKK2ZpCisKKyMgU2V0IHRoZSBQQVRIIHRvIHRoaXMgZGlyZWN0b3J5IHNvIHRoYXQgdGhlIHBlcmwgc2NyaXB0IGlzIGFibGUgdG8KKyMgZmluZCB0aGUgdGVzdCBkcml2ZXJzLgorUEFUSD0uOiRQQVRICisKKyMgQ2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYW55IHN0YWxlIHJlc3BvbnNlIGZpbGVzCitmaW5kIGNhdnMgLXR5cGUgZiAtbmFtZSAiKi5yc3AiIHwgKCB3aGlsZSByZWFkIGYgOyBkbworICAgIGVjaG8gIlN0YWxlIHJlc3BvbnNlIGZpbGU6ICRmIiA+JjIKKyAgICBhbnk9eWVzCitkb25lCitpZiBbICIkYW55IiA9ICJ5ZXMiIF07IHRoZW4KKyAgICBlY2hvICJTdGFsZSByZXNwb25zZSBmaWxlcyBmb3VuZCIgPiYyCisgICAgaWYgWyAiJGNvbnRpbnVlX21vZGUiICE9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICBlY2hvICJ1c2Ugb3B0aW9uIC0tY29udGludWUgaWYgdGhhdCBpcyBub3QgYSBwcm9ibGVtIiA+JjIKKyAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKykgfHwgZXhpdCAxCisKKworIyBGaW5kIGFsbCB0ZXN0IGZpbGVzIGFuZCBydW4gdGhlIHRlc3RzLgorZmluZCBjYXZzIC10eXBlIGYgLW5hbWUgIioucmVxIiB8IHdoaWxlIHJlYWQgZiA7IGRvCisgICAgZWNobyAiUnVubmluZyB0ZXN0IGZpbGUgJGYiID4mMgorICAgIHJ1bl9vbmVfdGVzdCAiJGYiCisgICAgaWYgWyAtZiAiJGVycm9yc19zZWVuX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgYnJlYWs7CisgICAgZmkKK2RvbmUKKworaWYgWyAtZiAiJGVycm9yc19zZWVuX2ZpbGUiIF07IHRoZW4KKyAgICBybSAiJGVycm9yc19zZWVuX2ZpbGUiCisgICAgZWNobyAiRXJyb3IgZW5jb3VudGVyZWQgLSBub3QgcGFja2luZyB1cCByZXNwb25zZSBmaWxlIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gIlBhY2tpbmcgdXAgYWxsIHJlc3BvbnNlIGZpbGVzIiA+JjIKK2NkIGNhdnMKK2ZpbmQgLiAtdHlwZSBmIC1uYW1lICIqcnNwIiAtcHJpbnQgfCB6aXAgLUAgIiRyZXN1bHRfZmlsZSIKKworZWNobyAiUmVzdWx0IGZpbGUgaXM6IGNhdnMvJHJlc3VsdF9maWxlIiA+JjIKZGlmZiAtLWdpdCBhL3Rlc3RzL2N1cnZlcy5jIGIvdGVzdHMvY3VydmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4NjkzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2N1cnZlcy5jCkBAIC0wLDAgKzEsMjEwIEBACisvKiBjdXJ2ZXMuYyAtICBFQ0MgY3VydmVzIHJlZ3Jlc3Npb24gdGVzdHMKKyAqCUNvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCisvKiBOdW1iZXIgb2YgY3VydmVzIGRlZmluZWQgaW4gLi4vY2lwZ2VyL2VjYy5jICovCisjZGVmaW5lIE5fQ1VSVkVTIDE1CisKKy8qIEEgcmVhbCB3b3JsZCBzYW1wbGUgcHVibGljIGtleS4gICovCitzdGF0aWMgY2hhciBjb25zdCBzYW1wbGVfa2V5XzFbXSA9CisiKHB1YmxpYy1rZXlcbiIKKyIgKGVjZHNhXG4iCisiICAocCAjMDBGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIylcbiIKKyIgIChhICMwMEZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkMjKVxuIgorIiAgKGIgIzVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1NTc2OTg4NkJDNjUxRDA2QjBDQzUzQjBGNjNCQ0UzQzNFMjdEMjYwNEIjKVxuIgorIiAgKGcgIzA0NkIxN0QxRjJFMTJDNDI0N0Y4QkNFNkU1NjNBNDQwRjI3NzAzN0Q4MTJERUIzM0EwRjRBMTM5NDVEODk4QzI5NiIKKyAgICAgICAgIjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMzNTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjUjKVxuIgorIiAgKG4gIzAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZCQ0U2RkFBREE3MTc5RTg0RjNCOUNBQzJGQzYzMjU1MSMpXG4iCisiICAocSAjMDQ0MkI5MjcyNDIyMzc2MzlBMzZDRTkyMjFCMzQwREIxQTlBQjc2REYyRkUzRTE3MTI3N0Y2QTQwMjNERUQxNDZFRSIKKyAgICAgICI4NjUyNUUzOENDRUNGRjNGQjhEMTUyQ0M2MzM0RjcwRDIzQTUyNTE3NUMxQkNCRERFNkUwMjNCMjIyODc3MEUjKVxuIgorIiAgKSkiOworc3RhdGljIGNoYXIgY29uc3Qgc2FtcGxlX2tleV8xX2N1cnZlW10gPSAiTklTVCBQLTI1NiI7CitzdGF0aWMgdW5zaWduZWQgaW50IHNhbXBsZV9rZXlfMV9uYml0cyA9IDI1NjsKKworLyogQSBtYWRlIHVwIHNhbXBsZSBwdWJsaWMga2V5LiAgKi8KK3N0YXRpYyBjaGFyIGNvbnN0IHNhbXBsZV9rZXlfMltdID0KKyIocHVibGljLWtleVxuIgorIiAoZWNkaFxuIgorIiAgKHAgIzAwZTk1ZTRhNWY3MzcwNTlkYzYwZGZjN2FkOTViM2Q4MTM5NTE1NjIwZiMpXG4iCisiICAoYSAjMzQwZTdiZTJhMjgwZWI3NGUyYmU2MWJhZGE3NDVkOTdlOGY3YzMwMCMpXG4iCisiICAoYiAjMWU1ODlhODU5NTQyMzQxMjEzNGZhYTJkYmRlYzk1YzhkODY3NWU1OCMpXG4iCisiICAoZyAjMDRiZWQ1YWYxNmVhM2Y2YTRmNjI5MzhjNDYzMWViNWFmN2JkYmNkYmMzIgorICAgICAgICAiMTY2N2NiNDc3YTFhOGVjMzM4Zjk0NzQxNjY5Yzk3NjMxNmRhNjMyMSMpXG4iCisiICAobiAjMDBlOTVlNGE1ZjczNzA1OWRjNjBkZjU5OTFkNDUwMjk0MDllNjBmYzA5IylcbiIKKyIgIChxICMwNDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEiCisgICAgICAgICIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIylcbiIKKyIgICkpIjsKK3N0YXRpYyBjaGFyIGNvbnN0IHNhbXBsZV9rZXlfMl9jdXJ2ZVtdID0gImJyYWlucG9vbFAxNjByMSI7CitzdGF0aWMgdW5zaWduZWQgaW50IHNhbXBsZV9rZXlfMl9uYml0cyA9IDE2MDsKKworCisvKiBQcm9ncmFtIG9wdGlvbiBmbGFncy4gICovCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2xpc3RfY3VydmVzICh2b2lkKQoreworICBpbnQgaWR4OworICBjb25zdCBjaGFyICpuYW1lOworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisKKyAgZm9yIChpZHg9MDsgKG5hbWUgPSBnY3J5X3BrX2dldF9jdXJ2ZSAoTlVMTCwgaWR4LCAmbmJpdHMpKTsgaWR4KyspCisgICAgeworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50ZiAoIiVzIC0gJXUgYml0c1xuIiwgbmFtZSwgbmJpdHMpOworICAgIH0KKyAgaWYgKGlkeCAhPSBOX0NVUlZFUykKKyAgICBmYWlsICgiZXhwZWN0ZWQgJWQgY3VydmVzIGJ1dCBnb3QgJWRcbiIsIE5fQ1VSVkVTLCBpZHgpOworICBpZiAoZ2NyeV9wa19nZXRfY3VydmUgKE5VTEwsIC0xLCBOVUxMKSkKKyAgICBmYWlsICgiY3VydmUgaXRlcmF0aW9uIGZhaWxlZFxuIik7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX21hdGNoaW5nICh2b2lkKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IGtleTsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgaW50IG5iaXRzOworCisgIGVyciA9IGdjcnlfc2V4cF9uZXcgKCZrZXksIHNhbXBsZV9rZXlfMSwgMCwgMSk7CisgIGlmIChlcnIpCisgICAgZGllICgicGFyc2luZyBzLWV4cHJlc3Npb24gc3RyaW5nIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIG5hbWUgPSBnY3J5X3BrX2dldF9jdXJ2ZSAoa2V5LCAwLCAmbmJpdHMpOworICBpZiAoIW5hbWUpCisgICAgZmFpbCAoImN1cnZlIG5hbWUgbm90IGZvdW5kIGZvciBzYW1wbGVfa2V5XzFcbiIpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsIHNhbXBsZV9rZXlfMV9jdXJ2ZSkpCisgICAgZmFpbCAoImV4cGVjdGVkIGN1cnZlIG5hbWUgJXMgYnV0IGdvdCAlcyBmb3Igc2FtcGxlX2tleV8xXG4iLAorICAgICAgICAgIHNhbXBsZV9rZXlfMV9jdXJ2ZSwgbmFtZSk7CisgIGVsc2UgaWYgKG5iaXRzICE9IHNhbXBsZV9rZXlfMV9uYml0cykKKyAgICBmYWlsICgiZXhwZWN0ZWQgY3VydmUgc2l6ZSAldSBidXQgZ290ICV1IGZvciBzYW1wbGVfa2V5XzFcbiIsCisgICAgICAgICAgc2FtcGxlX2tleV8xX25iaXRzLCBuYml0cyk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisKKyAgZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleSwgc2FtcGxlX2tleV8yLCAwLCAxKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJwYXJzaW5nIHMtZXhwcmVzc2lvbiBzdHJpbmcgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgbmFtZSA9IGdjcnlfcGtfZ2V0X2N1cnZlIChrZXksIDAsICZuYml0cyk7CisgIGlmICghbmFtZSkKKyAgICBmYWlsICgiY3VydmUgbmFtZSBub3QgZm91bmQgZm9yIHNhbXBsZV9rZXlfMlxuIik7CisgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgc2FtcGxlX2tleV8yX2N1cnZlKSkKKyAgICBmYWlsICgiZXhwZWN0ZWQgY3VydmUgbmFtZSAlcyBidXQgZ290ICVzIGZvciBzYW1wbGVfa2V5XzJcbiIsCisgICAgICAgICAgc2FtcGxlX2tleV8yX2N1cnZlLCBuYW1lKTsKKyAgZWxzZSBpZiAobmJpdHMgIT0gc2FtcGxlX2tleV8yX25iaXRzKQorICAgIGZhaWwgKCJleHBlY3RlZCBjdXJ2ZSBzaXplICV1IGJ1dCBnb3QgJXUgZm9yIHNhbXBsZV9rZXlfMlxuIiwKKyAgICAgICAgICBzYW1wbGVfa2V5XzJfbmJpdHMsIG5iaXRzKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZ2V0X3BhcmFtcyAodm9pZCkKK3sKKyAgZ2NyeV9zZXhwX3QgcGFyYW07CisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgcGFyYW0gPSBnY3J5X3BrX2dldF9wYXJhbSAoR0NSWV9QS19FQ0RTQSwgc2FtcGxlX2tleV8xX2N1cnZlKTsKKyAgaWYgKCFwYXJhbSkKKyAgICBmYWlsICgiZXJyb3IgZ2VycmluZyBwYXJhbWV0ZXJzIGZvciBgJXMnXG4iLCBzYW1wbGVfa2V5XzFfY3VydmUpOworCisgIG5hbWUgPSBnY3J5X3BrX2dldF9jdXJ2ZSAocGFyYW0sIDAsIE5VTEwpOworICBpZiAoIW5hbWUpCisgICAgZmFpbCAoImdldF9wYXJhbTogY3VydmUgbmFtZSBub3QgZm91bmQgZm9yIHNhbXBsZV9rZXlfMVxuIik7CisgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgc2FtcGxlX2tleV8xX2N1cnZlKSkKKyAgICBmYWlsICgiZ2V0X3BhcmFtOiBleHBlY3RlZCBjdXJ2ZSBuYW1lICVzIGJ1dCBnb3QgJXMgZm9yIHNhbXBsZV9rZXlfMVxuIiwKKyAgICAgICAgICBzYW1wbGVfa2V5XzFfY3VydmUsIG5hbWUpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChwYXJhbSk7CisKKworICBwYXJhbSA9IGdjcnlfcGtfZ2V0X3BhcmFtIChHQ1JZX1BLX0VDRFNBLCBzYW1wbGVfa2V5XzJfY3VydmUpOworICBpZiAoIXBhcmFtKQorICAgIGZhaWwgKCJlcnJvciBnZXJyaW5nIHBhcmFtZXRlcnMgZm9yIGAlcydcbiIsIHNhbXBsZV9rZXlfMl9jdXJ2ZSk7CisKKyAgbmFtZSA9IGdjcnlfcGtfZ2V0X2N1cnZlIChwYXJhbSwgMCwgTlVMTCk7CisgIGlmICghbmFtZSkKKyAgICBmYWlsICgiZ2V0X3BhcmFtOiBjdXJ2ZSBuYW1lIG5vdCBmb3VuZCBmb3Igc2FtcGxlX2tleV8yXG4iKTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCBzYW1wbGVfa2V5XzJfY3VydmUpKQorICAgIGZhaWwgKCJnZXRfcGFyYW06IGV4cGVjdGVkIGN1cnZlIG5hbWUgJXMgYnV0IGdvdCAlcyBmb3Igc2FtcGxlX2tleV8yXG4iLAorICAgICAgICAgIHNhbXBsZV9rZXlfMl9jdXJ2ZSwgbmFtZSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBhcmFtKTsKK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS1kZWJ1ZyIpKQorICAgIHZlcmJvc2UgPSBkZWJ1ZyA9IDE7CisKKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICBkaWUgKCJ2ZXJzaW9uIG1pc21hdGNoXG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworICBsaXN0X2N1cnZlcyAoKTsKKyAgY2hlY2tfbWF0Y2hpbmcgKCk7CisgIGNoZWNrX2dldF9wYXJhbXMgKCk7CisKKyAgcmV0dXJuIGVycm9yX2NvdW50ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kc2EtcmZjNjk3OS5jIGIvdGVzdHMvZHNhLXJmYzY5NzkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNkZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZHNhLXJmYzY5NzkuYwpAQCAtMCwwICsxLDEwMzAgQEAKKy8qIGRzYS1yZmM2OTc5LmMgLSBUZXN0IGZvciBEZXRlcm1pbmlzdGljIERTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyMgaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKyNlbHNlCisjIGluY2x1ZGUgPGdjcnlwdC5oPgorI2VuZGlmCisKKworI2RlZmluZSBteV9pc2FzY2lpKGMpICghKChjKSAmIDB4ODApKQorI2RlZmluZSBkaWdpdHAocCkgICAoKihwKSA+PSAnMCcgJiYgKihwKSA8PSAnOScpCisjZGVmaW5lIGhleGRpZ2l0cChhKSAoZGlnaXRwIChhKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnQScgJiYgKihhKSA8PSAnRicpICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ2EnICYmICooYSkgPD0gJ2YnKSkKKyNkZWZpbmUgeHRvaV8xKHApICAgKCoocCkgPD0gJzknPyAoKihwKS0gJzAnKTogXAorICAgICAgICAgICAgICAgICAgICAgKihwKSA8PSAnRic/ICgqKHApLSdBJysxMCk6KCoocCktJ2EnKzEwKSkKKyNkZWZpbmUgeHRvaV8yKHApICAgKCh4dG9pXzEocCkgKiAxNikgKyB4dG9pXzEoKHApKzEpKQorI2RlZmluZSBESU0odikJCSAgICAgKHNpemVvZih2KS9zaXplb2YoKHYpWzBdKSkKKyNkZWZpbmUgRElNb2YodHlwZSxtZW1iZXIpICAgRElNKCgodHlwZSAqKTApLT5tZW1iZXIpCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CisKK3N0YXRpYyB2b2lkCitpbmZvIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3NleHAgKGNvbnN0IGNoYXIgKnByZWZpeCwgZ2NyeV9zZXhwX3QgYSkKK3sKKyAgY2hhciAqYnVmOworICBzaXplX3Qgc2l6ZTsKKworICBpZiAocHJlZml4KQorICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2RhdGFfZnJvbV9oZXggKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IGdjcnlfeG1hbGxvYyAoc3RybGVuKHN0cmluZykvMisxKTsKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChzPXN0cmluZzsgKnM7IHMgKz0yICkKKyAgICB7CisgICAgICBpZiAoIWhleGRpZ2l0cCAocykgfHwgIWhleGRpZ2l0cCAocysxKSkKKyAgICAgICAgZGllICgiZXJyb3IgcGFyc2luZyBoZXggc3RyaW5nIGAlcydcbiIsIHN0cmluZyk7CisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbbGVuZ3RoKytdID0geHRvaV8yIChzKTsKKyAgICB9CisgICpyX2xlbmd0aCA9IGxlbmd0aDsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitzdGF0aWMgdm9pZAorZXh0cmFjdF9jbXBfZGF0YSAoZ2NyeV9zZXhwX3Qgc2V4cCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZXhwZWN0ZWQpCit7CisgIGdjcnlfc2V4cF90IGwxOworICBjb25zdCB2b2lkICphOworICBzaXplX3QgYWxlbjsKKyAgdm9pZCAqYjsKKyAgc2l6ZV90IGJsZW47CisKKyAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc2V4cCwgbmFtZSwgMCk7CisgIGEgPSBnY3J5X3NleHBfbnRoX2RhdGEgKGwxLCAxLCAmYWxlbik7CisgIGIgPSBkYXRhX2Zyb21faGV4IChleHBlY3RlZCwgJmJsZW4pOworICBpZiAoIWEpCisgICAgZmFpbCAoInBhcmFtZXRlciBcIiVzXCIgbWlzc2luZyBpbiBrZXlcbiIsIG5hbWUpOworICBlbHNlIGlmICggYWxlbiAhPSBibGVuIHx8IG1lbWNtcCAoYSwgYiwgYWxlbikgKQorICAgIHsKKyAgICAgIGZhaWwgKCJwYXJhbWV0ZXIgXCIlc1wiIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHZhbHVlXG4iLCBuYW1lKTsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICB7CisgICAgICAgICAgaW5mbyAoImV4cGVjdGVkOiAlc1xuIiwgZXhwZWN0ZWQpOworICAgICAgICAgIHNob3dfc2V4cCAoInNleHA6ICIsIHNleHApOworICAgICAgICB9CisgICAgfQorICBnY3J5X2ZyZWUgKGIpOworICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworfQorCisKKy8qIFRoZXNlIHRlc3QgdmVjdG9ycyBhcmUgZnJvbSBSRkMgNjk3OS4gICovCitzdGF0aWMgdm9pZAorY2hlY2tfZHNhX3JmYzY5NzkgKHZvaWQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqa2V5OworICB9IGtleXNbXSA9IHsKKyAgICB7CisgICAgICAiRFNBLCAxMDI0IGJpdHMiLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKERTQSIKKyAgICAgICIgKHAgIzg2RjVDQTAzRENGRUIyMjUwNjNGRjgzMEEwQzc2OUI5REQ5RDYxNTNBRDkxRDdDRTI3Rjc4N0M0MzI3OEI0NDciCisgICAgICAiICAgICBFNjUzM0I4NkIxOEJFRDZFOEE0OEI3ODRBMTRDMjUyQzVCRTBEQkY2MEI4NkQ2Mzg1QkQyRjEyRkI3NjNFRDg4IgorICAgICAgIiAgICAgNzNBQkZEM0Y1QkEyRTBBOEMwQTU5MDgyRUFDMDU2OTM1RTUyOURBRjdDNjEwNDY3ODk5Qzc3QURFREZDODQ2QyIKKyAgICAgICIgICAgIDg4MTg3MEI3QjE5QjJCNThGOUJFMDUyMUExNzAwMkUzQkRENkI4NjY4NUVFOTBCM0Q5QTFCMDJCNzgyQjE3NzkjKSIKKyAgICAgICIgKHEgIzk5NkY5NjdGNkM4RTM4OEQ5RTI4RDAxRTIwNUZCQTk1N0E1Njk4QjEjKSIKKyAgICAgICIgKGcgIzA3QjBGOTI1NDYxNTBCNjI1MTRCQjc3MUUyQTBDMENFMzg3RjAzQkRBNkM1NkI1MDUyMDlGRjI1RkQzQzEzM0QiCisgICAgICAiICAgICA4OUJCQ0Q5N0U5MDRFMDkxMTREOUE3REVGREVBREZDOTA3OEVBNTQ0RDJFNDAxQUVFQ0M0MEJCOUZCQkY3OEZEIgorICAgICAgIiAgICAgODc5OTVBMTBBMUMyN0NCNzc4OUI1OTRCQTdFRkI1QzQzMjZBOUZFNTlBMDcwRTEzNkRCNzcxNzU0NjRBRENBNCIKKyAgICAgICIgICAgIDE3QkU1RENFMkY0MEQxMEE0NkEzQTM5NDNGMjZBQjdGRDlDMDM5OEZGOEM3NkVFMEE1NjgyNkE4QTg4RjFEQkQjKSIKKyAgICAgICIgKHggIzQxMTYwMkNCMTlBNkNDQzM0NDk0RDc5RDk4RUYxRTdFRDVBRjI1RjcjKSIKKyAgICAgICIgKHkgIzVERjVFMDFERUQzMUQwMjk3RTI3NEUxNjkxQzE5MkZFNTg2OEZFRjlFMTlBODQ3NzY0NTRCMTAwQ0YxNkY2NTMiCisgICAgICAiICAgICA5MjE5NUEzOEI5MDUyM0UyNTQyRUU2MTg3MUMwNDQwQ0I4N0MzMjJGQzRCNEQyRUM1RTFFN0VDNzY2RTFCRThEIgorICAgICAgIiAgICAgNENFOTM1NDM3REMxMUMzQzhGRDQyNjMzODkzM0VCRkU3MzlDQjM0NjVGNEQzNjY4QzVFNDczNTA4MjUzQjFFNiIKKyAgICAgICIgICAgIDgyRjY1Q0JEQzRGQUU5M0MyRUEyMTIzOTBFNTQ5MDVBODZFMjIyMzE3MEI0NEVBQTdEQTVERDlGRkNGQjdGM0IjKSIKKyAgICAgICIgKSkiCisgICAgfSwKKyAgICB7CisgICAgICAiRFNBLCAyMDQ4IGJpdHMiLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKERTQSIKKyAgICAgICIgKHAgIzlEQjZGQjU5NTFCNjZCQjZGRTFFMTQwRjFEMkNFNTUwMjM3NDE2MUZENjUzOERGMTY0ODIxODY0MkYwQjVDNDgiCisgICAgICAiICAgICBDOEY3QTQxQUFERkExODczMjRCODc2NzRGQTE4MjJCMDBGMUVDRjgxMzY5NDNEN0M1NTc1NzI2NEU1QTFBNDRGIgorICAgICAgIiAgICAgRkUwMTJFOTkzNkUwMEMxRDNFOTMxMEIwMUM3RDE3OTgwNUQzMDU4QjJBOUY0QkI2Rjk3MTZCRkU2MTE3QzZCNSIKKyAgICAgICIgICAgIEIzQ0M0RDlCRTM0MTEwNEFENEE4MEFENkM5NEUwMDVGNEI5OTNFMTRGMDkxRUI1MTc0M0JGMzMwNTBDMzhERTIiCisgICAgICAiICAgICAzNTU2N0UxQjM0QzNENkE1QzBDRUFBMUEwRjM2ODIxM0MzRDE5ODQzRDBCNEIwOURDQjlGQzcyRDM5QzhERTQxIgorICAgICAgIiAgICAgRjFCRjE0RDRCQjQ1NjNDQTI4MzcxNjIxQ0FEMzMyNEI2QTJEMzkyMTQ1QkVCRkFDNzQ4ODA1MjM2RjVDQTJGRSIKKyAgICAgICIgICAgIDkyQjg3MUNEOEY5QzM2RDMyOTJCNTUwOUNBOENBQTc3QTJBREZDN0JGRDc3RERBNkY3MTEyNUE3NDU2RkVBMTUiCisgICAgICAiICAgICAzRTQzMzI1NkEyMjYxQzZBMDZFRDM2OTM3OTdFNzk5NUZBRDVBQUJCQ0ZCRTNFREEyNzQxRTM3NTQwNEFFMjVCIykiCisgICAgICAiIChxICNGMkMzMTE5Mzc0Q0U3NkM5MzU2OTkwQjQ2NTM3NEExN0YyM0Y5RUQzNTA4OUJEOTY5RjYxQzZEREU5OTk4QzFGIykiCisgICAgICAiIChnICM1QzdGRjZCMDZGOEYxNDNGRTgyODg0MzM0OTNFNDc2OUM0RDk4OEFDRTVCRTI1QTBFMjQ4MDk2NzA3MTZDNjEzIgorICAgICAgIiAgICAgRDdCMENFRTY5MzJGOEZBQTdDNDREMkNCMjQ1MjNEQTUzRkJFNEY2RUMzNTk1ODkyRDFBQTU4QzQzMjhBMDZDNCIKKyAgICAgICIgICAgIDZBMTU2NjJFN0VBQTcwM0ExREVDRjhCQkIyRDA1REJFMkVCOTU2QzE0MkEzMzg2NjFEMTA0NjFDMEQxMzU0NzIiCisgICAgICAiICAgICAwODUwNTdGMzQ5NDMwOUZGQTczQzYxMUY3OEIzMkFEQkI1NzQwQzM2MUM5RjM1QkU5MDk5N0RCMjAxNEUyRUY1IgorICAgICAgIiAgICAgQUE2MTc4MkY1MkFCRUI4QkQ2NDMyQzRERDA5N0JDNTQyM0IyODVEQUZCNjBEQzM2NEU4MTYxRjRBMkEzNUFDQSIKKyAgICAgICIgICAgIDNBMTBCMUM0RDIwM0NDNzZBNDcwQTMzQUZEQ0JERDkyOTU5ODU5QUJEOEI1NkUxNzI1MjUyRDc4RUFDNjZFNzEiCisgICAgICAiICAgICBCQTlBRTNGMUREMjQ4NzE5OTg3NDM5M0NENEQ4MzIxODY4MDA2NTQ3NjBFMUUzNEMwOUU0RDE1NTE3OUY5RUMwIgorICAgICAgIiAgICAgREM0NDczRjk5NkJEQ0U2RUVEMUNBQkVEOEI2RjExNkY3QUQ5Q0Y1MDVERjBGOTk4RTM0QUIyNzUxNEIwRkZFNyMpIgorICAgICAgIiAoeCAjNjlDNzU0OEMyMUQwREZFQTZCOUE1MUM5RUFENEUyN0MzM0QzQjNGMTgwMzE2RTVCQ0FCOTJDOTMzRjBFNERCQyMpIgorICAgICAgIiAoeSAjNjY3MDk4QzY1NDQyNkM3OEQ3RjgyMDFFQUM2QzIwM0VGMDMwRDQzNjA1MDMyQzJGMUZBOTM3RTUyMzdEQkQ5NCIKKyAgICAgICIgICAgIDlGMzRBMEEyNTY0RkUxMjZEQzhCNzE1QzUxNDE4MDJDRTA5NzlDODI0NjQ2M0M0MEU2QjZCREFBMjUxM0ZBNjEiCisgICAgICAiICAgICAxNzI4NzE2QzJFNEZENTNCQzk1Qjg5RTY5OTQ5RDk2NTEyRTg3M0I5QzhGOERGRDQ5OUNDMzEyODgyNTYxQURFIgorICAgICAgIiAgICAgQ0IzMUY2NThFOTM0QzBDMTk3RjJDNEQ5NkIwNUNCQUQ2NzM4MUU3Qjc2ODg5MUU0REEzODQzRDI0RDk0Q0RGQiIKKyAgICAgICIgICAgIDUxMjZFOUI4QkYyMUU4MzU4RUUwRTBBMzBFRjEzRkQ2QTY2NEMwRENFMzczMUY3RkI0OUE0ODQ1QTRGRDgyNTQiCisgICAgICAiICAgICA2ODc5NzJBMkQzODI1OTlDOUJBQzRFMEVENzk5ODE5MzA3ODkxMzAzMjU1ODEzNDk3NjQxMEI4OUQyQzE3MUQxIgorICAgICAgIiAgICAgMjNBQzM1RkQ5NzcyMTk1OTdBQTdEMTVDMUE5QTQyOEU1OTE5NEY3NUM3MjFFQkNCQ0ZBRTQ0Njk2QTQ5OUFGQSIKKyAgICAgICIgICAgIDc0RTA0Mjk5RjEzMjAyNjYwMTYzOENCODdBQjc5MTkwRDRBMDk4NjMxNURBOEVFQzY1NjFDOTM4OTk2QkVBREYjKSIKKyAgICAgICIgKSkiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKGVjZHNhIgorICAgICAgIiAoY3VydmUgXCJOSVNUIFAtMTkyXCIpIgorICAgICAgIiAocSAjMDRBQzJDNzdGNTI5RjkxNjg5RkVBMEVBNUVGRUM3RjIxMEQ4RUVBMEI5RTA0N0VENTYiCisgICAgICAiICAgICAgIDNCQzcyM0U1NzY3MEJENDg4N0VCQzczMkM1MjMwNjNEMEE3Qzk1N0JDOTdDMUM0MyMpIgorICAgICAgIiAoZCAjNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IykiCisgICAgICAiICkpIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyMjQgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICIocHJpdmF0ZS1rZXkiCisgICAgICAiIChlY2RzYSIKKyAgICAgICIgKGN1cnZlIFwiTklTVCBQLTIyNFwiKSIKKyAgICAgICIgKHEgIzA0IgorICAgICAgIiAgICAgMDBDRjA4REE1QUQ3MTlFNDI3MDdGQTQzMTI5MkRFQTExMjQ0RDY0RkM1MTYxMEQ5NEIxMzBENkMiCisgICAgICAiICAgICBFRUFCNkYzREVCRTQ1NUUzREJGODU0MTZGNzAzMENCRDk0RjM0RjJENkYyMzJDNjlGM0MxMzg1QSMpIgorICAgICAgIiAoZCAjRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEjKSIKKyAgICAgICIgKSkiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDI1NiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKGVjZHNhIgorICAgICAgIiAoY3VydmUgXCJOSVNUIFAtMjU2XCIpIgorICAgICAgIiAocSAjMDQiCisgICAgICAiICAgICA2MEZFRDRCQTI1NUE5RDMxQzk2MUVCNzRDNjM1NkQ2OEMwNDlCODkyM0I2MUZBNkNFNjY5NjIyRTYwRjI5RkI2IgorICAgICAgIiAgICAgNzkwM0ZFMTAwOEI4QkM5OUE0MUFFOUU5NTYyOEJDNjRGMkYxQjIwQzJEN0U5RjUxNzdBM0MyOTRENDQ2MjI5OSMpIgorICAgICAgIiAoZCAjQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSMpIgorICAgICAgIiApKSIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMzg0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiKHByaXZhdGUta2V5IgorICAgICAgIiAoZWNkc2EiCisgICAgICAiIChjdXJ2ZSBcIk5JU1QgUC0zODRcIikiCisgICAgICAiIChxICMwNCIKKyAgICAgICIgICAgIEVDM0E0RTQxNUI0RTE5QTQ1Njg2MTgwMjlGNDI3RkE1REE5QThCQzRBRTkyRTAyRTA2QUFFNTI4NkIzMDBDNjQiCisgICAgICAiICAgICBERUY4RjBFQTkwNTU4NjYwNjRBMjU0NTE1NDgwQkMxMyIKKyAgICAgICIgICAgIDgwMTVEOUI3MkQ3RDU3MjQ0RUE4RUY5QUMwQzYyMTg5NjcwOEE1OTM2N0Y5REZCOUY1NENBODRCM0YxQzlEQjEiCisgICAgICAiICAgICAyODhCMjMxQzNBRTBENEZFNzM0NEZEMjUzMzI2NDcyMCMpIgorICAgICAgIiAoZCAjNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEOCIKKyAgICAgICIgICAgIDk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IykiCisgICAgICAiICkpIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICIocHJpdmF0ZS1rZXkiCisgICAgICAiIChlY2RzYSIKKyAgICAgICIgKGN1cnZlIFwiTklTVCBQLTUyMVwiKSIKKyAgICAgICIgKHEgIzA0IgorICAgICAgIiAgICAgMDE4OTQ1NTBEMDc4NTkzMkUwMEVBQTIzQjY5NEYyMTNGOEMzMTIxRjg2REM5N0EwNEU1QTcxNjdEQjRFNUJDRCIKKyAgICAgICIgICAgIDM3MTEyM0Q0NkU0NURCNkI1RDUzNzBBN0YyMEZCNjMzMTU1RDM4RkZBMTZEMkJENzYxRENBQzQ3NEI5QTJGNTAiCisgICAgICAiICAgICAyM0E0IgorICAgICAgIiAgICAgMDA0OTMxMDFDOTYyQ0Q0RDJGRERGNzgyMjg1RTY0NTg0MTM5QzJGOTFCNDdGODdGRjgyMzU0RDY2MzBGNzQ2QSIKKyAgICAgICIgICAgIDI4QTBEQjI1NzQxQjVCMzRBODI4MDA4QjIyQUNDMjNGOTI0RkFBRkJENEQzM0Y4MUVBNjY5NTZERkVBQTJCRkQiCisgICAgICAiICAgICBGQ0Y1IykiCisgICAgICAiIChkICNGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NSIKKyAgICAgICIgICAgIENBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgiCisgICAgICAiICAgICAzNTM4IykiCisgICAgICAiICkpIgorICAgIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICprZXluYW1lOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqaGFzaG5hbWU7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBjb25zdCBjaGFyICprLCAqciwgKnM7CisgIH0gdGVzdHNbXSA9IHsKKyAgICB7CisgICAgICAiRFNBLCAxMDI0IGJpdHMiLAorICAgICAgIldpdGggU0hBLTEsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGExIiwgInNhbXBsZSIsCisgICAgICAiN0JEQjZCMEZGNzU2RTFCQjVENTM1ODNFRjk3OTA4MkY5QUQ1QkQ1QiIsCisgICAgICAiMkUxQTBDMjU2MkIyOTEyQ0FBRjg5MTg2RkIwRjQyMDAxNTg1REE1NSIsCisgICAgICAiMjlFRkI2QjBBRkYyRDdBNjhFQjcwQ0EzMTMwMjIyNTNCOUE4OERGNSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtMjI0LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMjI0IiwgInNhbXBsZSIsCisgICAgICAiNTYyMDk3QzA2NzgyRDYwQzMwMzdCQTdCRTEwNDc3NDM0NDY4NzY0OSIsCisgICAgICAiNEJDM0I2ODZBRUE3MDE0NTg1NjgxNEE2RjFCQjUzMzQ2RjAyMTAxRSIsCisgICAgICAiNDEwNjk3QjkyMjk1RDk5NEQyMUVERDJGNEFEQTg1NTY2RjZGOTRDMSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtMjU2LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMjU2IiwgInNhbXBsZSIsCisgICAgICAiNTE5QkEwNTQ2RDBDMzkyMDJBN0QzNEQ3REZBNUU3NjBCMzE4QkNGQiIsCisgICAgICAiODFGMkY1ODUwQkU1QkMxMjNDNDNGNzFBMzAzM0U5Mzg0NjExQzU0NSIsCisgICAgICAiNENERDkxNEI2NUVCNkM2NkE4QUFBRDI3Mjk5QkVFNkIwMzVGNUU4OSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtMzg0LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMzg0IiwgInNhbXBsZSIsCisgICAgICAiOTU4OTdDRDdCQkI5NDRBQTkzMkRCQzU3OUMxQzA5RUI2RkNGQzU5NSIsCisgICAgICAiMDdGMjEwODU1N0VFMEUzOTIxQkMxNzc0RjFDQTlCNDEwQjRDRTY1QSIsCisgICAgICAiNTRERjcwNDU2Qzg2RkFDMTBGQUI0N0MxOTQ5QUI4M0YyQzZGNzU5NSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtNTEyLCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhNTEyIiwgInNhbXBsZSIsCisgICAgICAiMDlFQ0U3Q0EyN0QwRjVBNERENEU1NTZDOURGMUQyMUQyODEwNEY4QiIsCisgICAgICAiMTZDMzQ5MUY5QjhDM0ZCQkRENUU3QTdCNjY3MDU3RjBEOEVFOEUxQiIsCisgICAgICAiMDJDMzZBMTI3QTdCODlFREJCNzJFNEZGQkM3MURBQkM3RDRGQzY5QyIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtMSwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGExIiwgInRlc3QiLAorICAgICAgIjVDODQyREY0RjlFMzQ0RUUwOUYwNTY4MzhCNDJDN0ExN0Y0QTY0MzMiLAorICAgICAgIjQyQUIyMDUyRkQ0M0UxMjNGMDYwN0YxMTUwNTJBNjdEQ0Q5QzVDNzciLAorICAgICAgIjE4MzkxNkIwMjMwRDQ1Qjk5MzE0OTFENEM2QjBCRDJGQjRBQUYwODgiCisgICAgfSwKKyAgICB7CisgICAgICAiRFNBLCAxMDI0IGJpdHMiLAorICAgICAgIldpdGggU0hBLTIyNCwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEyMjQiLCAidGVzdCIsCisgICAgICAiNDU5OEI4RUZDMUE1M0JDOEFFQ0Q1OEQxQUJCQjBDMEM3MUU2NzI5NyIsCisgICAgICAiNjg2OEU5OTY0RTM2QzE2ODlGNjAzN0Y5MUYyOEQ1RjJDMzA2MTBGMiIsCisgICAgICAiNDlDRUMzQUNEQzgzMDE4QzVCRDI2NzRFQ0FBRDM1QjhDRDIyOTQwRiIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDEwMjQgYml0cyIsCisgICAgICAiV2l0aCBTSEEtMjU2LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTI1NiIsICJ0ZXN0IiwKKyAgICAgICI1QTY3NTkyRTgxMjhFMDNBNDE3QjA0ODQ0MTBGQjcyQzBCNjMwRTFBIiwKKyAgICAgICIyMjUxOEMxMjcyOTlCMEY2RkRDOTg3MkIyODJCOUU3MEQwNzkwODEyIiwKKyAgICAgICI2ODM3RUMxOEYxNTBENTVERTk1QjVFMjlCRTdBRjVEMDFFNEZFMTYwIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMTAyNCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0zODQsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMzg0IiwgInRlc3QiLAorICAgICAgIjIyMDE1NkI3NjFGNkNBNUU2QzlGMUI5Q0Y5QzI0QkUyNUY5OENEODkiLAorICAgICAgIjg1NENGOTI5QjU4RDczQzNDQkZEQzQyMUU4RDU0MzBDRDZEQjVFNjYiLAorICAgICAgIjkxRDBFMEY1M0UyMkY4OThEMTU4MzgwNjc2QTg3MUExNTdDREE2MjIiCisgICAgfSwKKyAgICB7CisgICAgICAiRFNBLCAxMDI0IGJpdHMiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGE1MTIiLCAidGVzdCIsCisgICAgICAiNjVEMkMyRUVCMTc1RTM3MEYyOEM3NUJGQ0RDMDI4RDIyQzdEQkU5QyIsCisgICAgICAiOEVBNDdFNDc1QkE4QUM2RjJEODIxREEzQkQyMTJEMTFBM0RFQjlBMCIsCisgICAgICAiN0M2NzBDN0FENzJCNkMwNTBDMTA5RTE3OTAwMDgwOTcxMjU0MzNFOCIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDIwNDggYml0cyIsCisgICAgICAiV2l0aCBTSEEtMSwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTEiLCAic2FtcGxlIiwKKyAgICAgICI4ODhGQTZGNzczOEE0MUJEQzk4NDY0NjZBQkRCODE3NEMwMzM4MjUwQUU1MENFOTU1Q0ExNjIzMEY5Q0JENTNFIiwKKyAgICAgICIzQTFCMkRCRDc0ODlENkVEN0U2MDhGRDAzNkM4M0FGMzk2RTI5MERCRDYwMjQwOEU4Njc3REFBQkQ2RTc0NDVBIiwKKyAgICAgICJEMjZGQ0JBMTlGQTNFMzA1OEZGQzAyQ0ExNTk2Q0RCQjZFMEQyMENCMzdCMDYwNTRGN0UzNkRFRDBDREJCQ0NGIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyMjQiLCAic2FtcGxlIiwKKyAgICAgICJCQzM3Mjk2NzcwMjA4MkUxQUE0RkNFODkyMjA5RjcxQUU0QUQyNUE2REZEODY5MzM0RTZGMTUzQkQwQzREODA2IiwKKyAgICAgICJEQzlGNERFQURBOEQ4RkY1ODhFOThGRUQwQUI2OTBGRkNFODU4REM4Qzc5Mzc2NDUwRUI2Qjc2QzI0NTM3RTJDIiwKKyAgICAgICJBNjVBOUMzQkM3QkFCRTI4NkIxOTVENURBNjg2MTZEQThENDdGQTAwOTdGMzZERDE5RjUxNzMyN0RDODQ4Q0VDIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0yNTYsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyNTYiLCAic2FtcGxlIiwKKyAgICAgICI4OTI2QTI3QzQwNDg0MjE2RjA1MkY0NDI3Q0ZENTY0NzMzOEI3QjM5MzlCQzY1NzNBRjQzMzM1NjlENTk3QzUyIiwKKyAgICAgICJFQUNFOEJEQkJFMzUzQzQzMkE3OTVEOUVDNTU2QzZEMDIxRjdBMDNGNDJDMzZFOUJDODdFNEFDNzkzMkNDODA5IiwKKyAgICAgICI3MDgxRTE3NTQ1NUY5MjQ3QjgxMkI3NDU4M0U5RTk0RjlFQTc5QkQ2NDBEQzk2MjUzM0IwNjgwNzkzQTM4RDUzIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0zODQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEzODQiLCAic2FtcGxlIiwKKyAgICAgICJDMzQ1RDVBQjNEQTBBNUJDQjdFQzhGOEZCN0E3RTk2MDY5RTAzQjIwNjM3MUVGN0Q4M0UzOTA2OEVDNTY0OTIwIiwKKyAgICAgICJCMkRBOTQ1RTkxODU4ODM0RkQ5QkY2MTZFQkFDMTUxRURCQzRCNDVEMjdEMERENEE3RjZBMjI3MzlGNDVDMDBCIiwKKyAgICAgICIxOTA0OEI2M0Q5RkQ2QkNBMUQ5QkFFMzY2NEUxQkNCOTdGNzI3NkMzMDYxMzA5NjlGNjNGMzhGQTgzMTkwMjFCIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS01MTIsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGE1MTIiLCAic2FtcGxlIiwKKyAgICAgICI1QTEyOTk0NDMxNzg1NDg1QjNGNUYwNjcyMjE1MTc3OTFCODVBNTk3QjdBOTQzNjk5NUM4OUVEMDM3NDY2OEZDIiwKKyAgICAgICIyMDE2RUQwOTJEQzVGQjY2OUI4RUZCM0QxRjMxQTkxRUVDQjE5OTg3OUJFMENGNzhGMDJCQTA2MkNCNEM5NDJFIiwKKyAgICAgICJEMEM3NkY4NEI1RjA5MUUxNDE1NzJBNjM5QTRGQjhDMjMwODA3RUVBN0Q1NUM4QTE1NEEyMjQ0MDBBRkYyMzUxIgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0xLCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTEiLCAidGVzdCIsCisgICAgICAiNkVFQTQ4NkY5RDQxQTAzN0IyQzY0MEJDNTY0NTY5NEZGOEZGNEI5OEQwNjZBMjVGNzZCRTY0MUNDQjI0QkE0RiIsCisgICAgICAiQzE4MjcwQTkzQ0ZDNjA2M0Y1N0E0REZBODYwMjRGNzAwRDk4MEU0Q0Y0RTJDQjY1QTUwNDM5NzI3M0Q5OEVBMCIsCisgICAgICAiNDE0RjIyRTVGMzFBOEI2RDMzMjk1Qzc1MzlDMUMxQkEzQTYxNjBEN0Q2OEQ1MEFDMEQzQTVCRUFDMjg4NEZBQSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDIwNDggYml0cyIsCisgICAgICAiV2l0aCBTSEEtMjI0LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTIyNCIsICJ0ZXN0IiwKKyAgICAgICIwNkJENEMwNUVENzQ3MTkxMDYyMjNCRTMzRjJEOTVEQTZCM0I1NDFEQUQ3QkZCRDdBQzUwODIxM0I2REE2NjcwIiwKKyAgICAgICIyNzJBQkEzMTU3MkY2Q0M1NUUzMEJGNjE2QjdBMjY1MzEyMDE4REQzMjVCRTAzMUJFMENDODJBQTE3ODcwRUEzIiwKKyAgICAgICJFOUNDMjg2QTUyQ0NFMjAxNTg2NzIyRDM2RDFFOTE3RUI5NkE0RUJEQjQ3OTMyRjk1NzZBQzY0NUIzQTYwODA2IgorICAgIH0sCisgICAgeworICAgICAgIkRTQSwgMjA0OCBiaXRzIiwKKyAgICAgICJXaXRoIFNIQS0yNTYsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMjU2IiwgInRlc3QiLAorICAgICAgIjFENkNFNkREQTFDNUQzNzMwNzgzOUNEMDNBQjBBNUNCQjE4RTYwRDgwMDkzN0Q2N0RGQjQ0NzlBQUM4REVBRDciLAorICAgICAgIjgxOTAwMTJBMTk2OUY5OTU3RDU2RkNDQUFEMjIzMTg2RjQyMzM5OEQ1OEVGNUIzQ0VGRDVBNDE0NkE0NDc2RjAiLAorICAgICAgIjc0NTJBNTNGNzA3NUQ0MTdCNEIwMTNCMjc4RDFCQjhCQkQyMTg2M0Y1RTdCMUNFRTY3OUNGMjE4OEUxQUIxOUUiCisgICAgfSwKKyAgICB7CisgICAgICAiRFNBLCAyMDQ4IGJpdHMiLAorICAgICAgIldpdGggU0hBLTM4NCwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEzODQiLCAidGVzdCIsCisgICAgICAiMjA2RTYxRjczREJFMUIyREM4QkU3MzZCMjJCMDc5RTlEQUNEOTc0REIwMEVFQkJDNUI2NENBRDM5Q0Y5RjkxQyIsCisgICAgICAiMjM5RTY2RERCRThGOEMyMzBBM0QwNzFENjAxQjZGRkJERkI1OTAxRjk0RDQ0NEM2QUY1NkY3MzJCRUI5NTRCRSIsCisgICAgICAiNkJENzM3NTEzRDVFNzJGRTg1RDFDNzUwRTBGNzM5MjFGRTI5OUI5NDVBQUQxQzgwMkYxNUMyNkE0M0QzNDk2MSIKKyAgICB9LAorICAgIHsKKyAgICAgICJEU0EsIDIwNDggYml0cyIsCisgICAgICAiV2l0aCBTSEEtNTEyLCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTUxMiIsICJ0ZXN0IiwKKyAgICAgICJBRkYxNjUxRTRDRDYwMzZENTdBQThCMkEwNUNDRjFBOUQ1QTQwMTY2MzQwRUNCQkRDNTVCRTEwQjU2OEFBMEFBIiwKKyAgICAgICI4OUVDNEJCMTQwMEVDQ0ZGOEU3RDlBQTUxNUNEMURFNzgwM0YyREFGRjA5NjkzRUU3RkQxMzUzRTkwQTY4MzA3IiwKKyAgICAgICJDOUYwQkRBQkNDMEQ4ODBCQjEzN0E5OTRDQzdGMzk4MENFOTFDQzEwRkFGNTI5RkM0NjU2NUIxNUNFQTg1NEUxIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAxOTIgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0xLCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMSIsICJzYW1wbGUiLAorICAgICAgIjM3RDdDQTAwRDJDN0IwRTVFNDEyQUMwM0JENDRCQTgzN0ZERDVCMjhDRDNCMDAyMSIsCisgICAgICAiOThDNkJEMTJCMjNFQUY1RTJBMjA0NTEzMjA4NkJFM0VCOEVCRDYyQUJGNjY5OEZGIiwKKyAgICAgICI1N0EyMkIwN0RFQTk1MzBGOERFOTQ3MUIxREM2NjI0NDcyRThFMjg0NEJDMjVCNjQiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTIyNCwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTIyNCIsICJzYW1wbGUiLAorICAgICAgIjQzODE1MjZCM0ZDMUU3MTI4RjIwMkUxOTQ1MDU1OTJGMDFENUZGNEM1QUYwMTVEOCIsCisgICAgICAiQTFGMDBEQUQ5N0FFRUM5MUM5NTU4NUYzNjIwMEM2NUYzQzAxODEyQUE2MDM3OEY1IiwKKyAgICAgICJFMDdFQzEzMDRDN0M2QzlERUJCRTk4MEI5NjkyNjY4RjgxRDRERTc5MjJBMEY5N0EiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTI1NiwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTI1NiIsICJzYW1wbGUiLAorICAgICAgIjMyQjFCNkQ3RDQyQTA1Q0I0NDkwNjU3MjdBODQ4MDRGQjFBM0UzNEQ4RjI2MTQ5NiIsCisgICAgICAiNEIwQjhDRTk4QTkyODY2QTI4MjBFMjBBQTZCNzVCNTYzODJFMEY5QkZENUVDQjU1IiwKKyAgICAgICJDQ0RCMDA2OTI2RUE5NTY1Q0JBREM4NDA4MjlEOEMzODRFMDZERTFGMUUzODFCODUiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTM4NCwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTM4NCIsICJzYW1wbGUiLAorICAgICAgIjQ3MzAwMDVDNEZDQjAxODM0QzA2M0E3QjY3NjAwOTZEQkUyODRCODI1MkVGNDMxMSIsCisgICAgICAiREE2M0JGMEI5QUJDRjk0OEZCQjFFOTE2N0YxMzYxNDVGN0EyMDQyNkRDQzI4N0Q1IiwKKyAgICAgICJDM0FBMkM5NjA5NzJCRDdBMjAwM0E1N0UxQzRDNzdGMDU3OEY4QUU5NUUzMUVDNUUiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTUxMiIsICJzYW1wbGUiLAorICAgICAgIkEyQUM3QUIwNTVFNEYyMDY5MkQ0OTIwOTU0NEMyMDNBN0QxRjJDMEJGQkM3NURCMSIsCisgICAgICAiNEQ2MEM1QUIxOTk2QkQ4NDgzNDNCMzFDMDA4NTAyMDVFMkVBNjkyMkRBQzJFNEI4IiwKKyAgICAgICIzRjZFODM3NDQ4RjAyN0ExQkY0QjM0RTc5NkUzMkE4MTFDQkI0MDUwOTA4RDhGNjciCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTEsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMSIsICJ0ZXN0IiwKKyAgICAgICJEOUNGOUMzRDMyOTdEMzI2MDc3M0ExREE3NDE4REI1NTM3QUI4REQ5M0RFN0ZBMjUiLAorICAgICAgIjBGMjE0MUEwRUJCQzQ0RDJFMUFGOTBBNTBFQkNGQ0U1RTE5N0IzQjdENERFMDM2RCIsCisgICAgICAiRUIxOEJDOUUxRjNENzM4NzUwMENCOTlDRjVGN0MxNTcwNzBBODk2MUUzODcwMEI3IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAxOTIgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMjI0IiwgInRlc3QiLAorICAgICAgIkY1REM4MDVGNzZFRjg1MTgwMDcwMENDRTgyRTdCOThEODkxMUI3RDUxMDA1OUZCRSIsCisgICAgICAiNjk0NUExQzFEMUIyMjA2QjgxNDU1NDhGNjMzQkI2MUNFRjA0ODkxQkFGMjZFRDM0IiwKKyAgICAgICJCN0ZCN0ZERkMzMzlDMEI5QkQ2MUE5RjVBOEVBRjlCRTU4RkM1Q0JBMkNCMTUyOTMiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDE5MiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTI1NiwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEyNTYiLCAidGVzdCIsCisgICAgICAiNUM0Q0U4OUNGNTZEOUU3Qzc3Qzg1ODUzMzlCMDA2Qjk3QjVGMDY4MEI0MzA2QzZDIiwKKyAgICAgICIzQTcxOEJEOEI0OTI2QzNCNTJFRTZCQkU2N0VGNzlCMThDQjZFQjYyQjFBRDk3QUUiLAorICAgICAgIjU2NjJFNjg0OEE0QTE5QjFGMUFFMkY3MkFDRDRCOEJCRTUwRjFFQUM2NUQ5MTI0RiIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMTkyIGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMzg0LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTM4NCIsICJ0ZXN0IiwKKyAgICAgICI1QUZFRkI1RDMzOTMyNjFCODI4REI2QzkxRkJDNjhDMjMwNzI3QjAzMEM5NzU2OTMiLAorICAgICAgIkIyMzRCNjBCNERCNzVBNzMzRTE5MjgwQTdBNjAzNEJENkIxRUU4OEFGNTMzMjM2NyIsCisgICAgICAiNzk5NDA5MEIyRDU5QkI3ODJCRTU3RTc0QTQ0QzlBMUM3MDA0MTNGOEFCRUZFNzdBIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAxOTIgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS01MTIsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhNTEyIiwgInRlc3QiLAorICAgICAgIjA3NTg3NTNBNTI1NDc1OUM3Q0ZCQUQyRTJEOUIwNzkyRUVFNDQxMzZDOTQ4MDUyNyIsCisgICAgICAiRkU0RjRBRTg2QTU4QjY1MDc5NDY3MTU5MzRGRTJEOEZGOUQ5NUI2QjA5OEZFNzM5IiwKKyAgICAgICI3NENGNTYwNUM5OEZCQTBFMUVGMzRENEI1QTE1NzdBN0RDRjU5NDU3Q0FFNTIyOTAiCisgICAgfSwKKworCisKKyAgICB7CisgICAgICAiRUNEU0EsIDIyNCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTEsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGExIiwgInNhbXBsZSIsCisgICAgICAiN0VFRkFERDkxMTEwRDhERTZDMkM0NzA4MzEzODdDNTBEMzM1N0Y3RjRENDc3MDU0QjhCNDI2QkMiLAorICAgICAgIjIyMjI2RjlENDBBOTZFMTlDNEEzMDFDRTVCNzRCMTE1MzAzQzBGM0E0RkQzMEZDMjU3RkI1N0FDIiwKKyAgICAgICI2NkQxQ0REODNFM0FGNzU2MDVERDZFMkZFRkYxOTZEMzBBQTdFRDdBMkVERjdBRjQ3NTQwM0Q2OSIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMjI0LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMjI0IiwgInNhbXBsZSIsCisgICAgICAiQzFEMUYyRjEwODgxMDg4MzAxODgwNTA2ODA1RkVCNDgyNUZFMDlBQ0I2ODE2QzM2OTkxQUEwNkQiLAorICAgICAgIjFDREZFNjY2MkRERTFFNEExRUM0Q0RFREY2QTFGNUEyRkI3RkJEOTE0NUMxMjExM0U2QUJGRDNFIiwKKyAgICAgICJBNjY5NEZENzcxOEEyMTA1M0YyMjVEM0Y0NjE5N0NBNjk5RDQ1MDA2QzA2Rjg3MTgwOEY0M0VCQyIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMjU2LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMjU2IiwgInNhbXBsZSIsCisgICAgICAiQUQzMDI5RTAyNzhGODA2NDNERTMzOTE3Q0U2OTA4QzcwQThGRjUwQTQxMUYwNkU0MURFREZDREMiLAorICAgICAgIjYxQUEzREEwMTBFOEU4NDA2QzY1NkJDNDc3QTdBNzE4OTg5NUU3RTg0MENERkU4RkY0MjMwN0JBIiwKKyAgICAgICJCQzgxNDA1MERBQjVEMjM3NzA4Nzk0OTRGOUUwQTY4MERDMUFGNzE2MTk5MUJERTY5MkIxMDEwMSIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMzg0LCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMzg0IiwgInNhbXBsZSIsCisgICAgICAiNTJCNDBGNUE5RDNEMTMwNDBGNDk0RTgzRDM5MDZDNjA3OUYyOTk4MTAzNUM3QkQ1MUU1Q0FDNDAiLAorICAgICAgIjBCMTE1RTVFMzZGMEY5RUM4MUYxMzI1QTU5NTI4NzhENzQ1RTE5RDdCQjNFQUJGQUJBNzdFOTUzIiwKKyAgICAgICI4MzBGMzRDQ0RGRTgyNkNDRkRDODFFQjQxMjk3NzJFMjBFMTIyMzQ4QTJCQkQ4ODlBMUIxQUYxRCIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtNTEyLCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhNTEyIiwgInNhbXBsZSIsCisgICAgICAiOURCMTAzRkZFREVERjlDRkRCQTA1MTg0RjkyNTQwMEMxNjUzQjg1MDFCQUI4OUNFQTBGQkVDMTQiLAorICAgICAgIjA3NEJEMUQ5NzlENUYzMkJGOTU4RERDNjFFNEZCNDg3MkFEQ0FGRUIyMjU2NDk3Q0RBQzMwMzk3IiwKKyAgICAgICJBNENFQ0ExOTZDM0Q1QTFGRjMxMDI3QjMzMTg1REM4RUU0M0YyODhCMjFBQjM0MkU1RDhFQjA4NCIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMSwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGExIiwgInRlc3QiLAorICAgICAgIjI1MTkxNzhGODJDM0YwRTRGODdFRDU4ODNBNEUxMTRFNUI3QTZFMzc0MDQzRDhFRkQzMjlDMjUzIiwKKyAgICAgICJERUFBNjQ2RUMyQUYyRUE4QUQ1M0VENjZCMkUyRERBQTQ5QTEyRUZEODM1NjU2MTQ1MUYzRTIxQyIsCisgICAgICAiOTU5ODc3OTZGNkNGMjA2MkFCODEzNTI3MURFNTZBRTU1MzY2QzA0NUY2RDk1OTNGNTM3ODdCRDIiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDIyNCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTIyNCwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEyMjQiLCAidGVzdCIsCisgICAgICAiREY4QjM4RDQwRENBM0UwNzdEMEFDNTIwQkY1NkI2RDU2NTEzNEQ5QjVGMkVBRTBEMzQ5MDA1MjQiLAorICAgICAgIkM0NDFDRThFMjYxREVENjM0RTRDRjg0OTEwRTRDNUQxRDIyQzVDRjNCNzMyQkIyMDREQkVGMDE5IiwKKyAgICAgICI5MDJGNDI4NDdBNjNCREM1RjYwNDZBREExMTQ5NTMxMjBGOTk0NDJENzY1MTAxNTBGMzcyQTNGNCIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjI0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMjU2LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTI1NiIsICJ0ZXN0IiwKKyAgICAgICJGRjg2RjU3OTI0REEyNDhENkU0NEU4MTU0RUI2OUYwQUUyQUVCQUVFOTkzMUQwQjVBOTY5RjkwNCIsCisgICAgICAiQUQwNERERTg3Qjg0NzQ3QTI0M0E2MzFFQTQ3QTFCQTZEMUZBQTA1OTE0OUFEMjQ0MERFNkZCQTYiLAorICAgICAgIjE3OEQ0OUIxQUU5MEUzRDhCNjI5QkUzREI1NjgzOTE1RjRFOEM5OUZERjZFNjY2Q0YzN0FEQ0ZEIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyMjQgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0zODQsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMzg0IiwgInRlc3QiLAorICAgICAgIjcwNDY3NDJCODM5NDc4QzFCNUJEMzFEQjJFODYyQUQ4NjhFMUE0NUM4NjM1ODVCNUYyMkJEQzJEIiwKKyAgICAgICIzODlCOTI2ODJFMzk5QjI2NTE4QTk1NTA2QjUyQzAzQkM5Mzc5QTlEQURGMzM5MUEyMUZCMEVBNCIsCisgICAgICAiNDE0QTcxOEVEMzI0OUZGNkRCQzVCNTBDMjdGNzFGMDFGMDcwOTQ0REEyMkFCMUY3OEY1NTlBQUIiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDIyNCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGE1MTIiLCAidGVzdCIsCisgICAgICAiRTM5QzJBQTRFQTZCRTIzMDZDNzIxMjZENDBFRDc3QkY5NzM5QkI0RDZFRjJCQkIxRENCNjE2OUQiLAorICAgICAgIjA0OUYwNTA0NzdDNUFERDg1OENBQzU2MjA4Mzk0QjVBNTVCQUVCQkU4ODdGREY3NjUwNDdDMTdDIiwKKyAgICAgICIwNzdFQjEzRTcwMDU5MjlDRUZBM0NEMDQwM0M3Q0RDQzA3N0FERjRFNDRGM0M0MUIyRjYwRUNGRiIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjU2IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMSwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTEiLCAic2FtcGxlIiwKKyAgICAgICI4ODI5MDVGMTIyN0ZENjIwRkJGMkFCRjIxMjQ0RjBCQTgzRDBEQzNBOTEwM0RCQkVFNDNBMUZCODU4MTA5REI0IiwKKyAgICAgICI2MTM0MEM4OEMzQUFFQkVCNEY2RDY2N0Y2NzJDQTk3NTlBNkNDQUE5RkE4ODExMzEzMDM5RUU0QTM1NDcxRDMyIiwKKyAgICAgICI2RDdGMTQ3REFDMDg5NDQxQkIyRTJGRThGN0EzRkEyNjRCOUM0NzUwOThGRENGNkUwMEQ3Qzk5NkUxQjhCN0VCIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyMjQiLCAic2FtcGxlIiwKKyAgICAgICIxMDNGOTBFRTlEQzUyRTVFN0ZCNTEzMkI3MDMzQzYzMDY2RDE5NDMyMTQ5MTg2MjA1OTk2N0M3MTU5ODVENDczIiwKKyAgICAgICI1M0IyRkZGNUQxNzUyQjJDNjg5REYyNTdDMDRDNDBBNTg3RkFCQUJCM0Y2RkMyNzAyRjEzNDNBRjdDQTlBQTNGIiwKKyAgICAgICJCOUFGQjY0RkRDMDNEQzFBMTMxQzdEMjM4NkQxMUUzNDlGMDcwQUE0MzJBNEFDQzkxOEJFQTk4OEJGNzVDNzRDIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yNTYsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyNTYiLCAic2FtcGxlIiwKKyAgICAgICJBNkUzQzU3REQwMUFCRTkwMDg2NTM4Mzk4MzU1REQ0QzNCMTdBQTg3MzM4MkIwRjI0RDYxMjk0OTNEOEFBRDYwIiwKKyAgICAgICJFRkQ0OEIyQUFDQjZBOEZEMTE0MEREOUNENDVFODFENjlEMkM4NzdCNTZBQUY5OTFDMzREMEVBODRFQUYzNzE2IiwKKyAgICAgICJGN0NCMUM5NDJENjU3QzQxRDQzNkM3QTFCNkUyOUY2NUYzRTkwMERCQjlBRkY0MDY0REM0QUIyRjg0M0FDREE4IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0zODQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEzODQiLCAic2FtcGxlIiwKKyAgICAgICIwOUY2MzRCMTg4Q0VGRDk4RTdFQzg4QjFBQTk4NTJENzM0RDBCQzI3MkY3RDJBNDdERUNDNkVCRUIzNzVBQUQ0IiwKKyAgICAgICIwRUFGRUEwMzlCMjBFOUI0MjMwOUZCMUQ4OUUyMTMwNTdDQkY5NzNEQzBDRkM4RjEyOUVERERDODAwRUY3NzE5IiwKKyAgICAgICI0ODYxRjA0OTFFNjk5OEI5NDU1MTkzRTM0RTdCMEQyODREREQ3MTQ5QTc0Qjk1QjkyNjFGMTNBQkRFOTQwOTU0IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS01MTIsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGE1MTIiLCAic2FtcGxlIiwKKyAgICAgICI1RkE4MUM2MzEwOUJBREI4OEMxRjM2N0I0N0RBNjA2REEyOENBRDY5QUEyMkM0RkU2QUQ3REY3M0E3MTczQUE1IiwKKyAgICAgICI4NDk2QTYwQjVFOUI0N0M4MjU0ODg4MjdFMDQ5NUIwRTNGQTEwOUVDNDU2OEZEM0Y4RDEwOTc2NzhFQjk3RjAwIiwKKyAgICAgICIyMzYyQUIxQURCRTJCOEFERjlDQjlFREFCNzQwRUE2MDQ5QzAyODExNEYyNDYwRjk2NTU0RjYxRkFFMzMwMkZFIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0xLCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTEiLCAidGVzdCIsCisgICAgICAiOEM5NTIwMjY3QzU1RDZCOTgwREY3NDFFNTZCNEFERUUxMTREODRGQkZBMkU2MjEzNzk1NDE2NDAyODYzMkEyRSIsCisgICAgICAiMENCQ0M4NkZENkFCRDFEOTlFNzAzRTFFQzUwMDY5RUU1QzBCNEJBNEI5QUM2MEU0MDlFOEVDNTkxMEQ4MUE4OSIsCisgICAgICAiMDFCOUQ3QjczREZBQTYwRDU2NTFFQzQ1OTFBMDEzNkY4NzY1M0UwRkQ3ODBDM0IxQkM4NzJGRkRFQUU0NzlCMSIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjU2IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMjI0LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTIyNCIsICJ0ZXN0IiwKKyAgICAgICI2NjlGNDQyNkYyNjg4QjhCRTBEQjNBNkJEMTk4OUJEQUVGRkY4NEI2NDlFRUI4NEYzREQyNjA4MEY2NjdGQUE3IiwKKyAgICAgICJDMzdFREI2RjBBRTc5RDQ3QzNDMjdFOTYyRkEyNjlCQjRGNDQxNzcwMzU3RTExNEVFNTExRjY2MkVDMzRBNjkyIiwKKyAgICAgICJDODIwMDUzQTA1NzkxRTUyMUZDQUFENjA0MkQ0MEFFQTFENkIxQTU0MDEzODU1OEY0N0QwNzE5ODAwRTE4RjJEIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAyNTYgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yNTYsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMjU2IiwgInRlc3QiLAorICAgICAgIkQxNkI2QUU4MjdGMTcxNzVFMDQwODcxQTFDN0VDMzUwMDE5MkM0QzkyNjc3MzM2RUMyNTM3QUNBRUUwMDA4RTAiLAorICAgICAgIkYxQUJCMDIzNTE4MzUxQ0Q3MUQ4ODE1NjdCMUVBNjYzRUQzRUZDRjZDNTEzMkIzNTRGMjhEM0IwQjdEMzgzNjciLAorICAgICAgIjAxOUY0MTEzNzQyQTJCMTRCRDI1OTI2QjQ5QzY0OTE1NUYyNjdFNjBEMzgxNEI0QzBDQzg0MjUwRTQ2RjAwODMiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDI1NiBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTM4NCwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEzODQiLCAidGVzdCIsCisgICAgICAiMTZBRUZGQTM1NzI2MEIwNEIxREQxOTk2OTM5NjA3NDAwNjZDMUE4RjNFOEVERDc5MDcwQUE5MTREMzYxQjNCOCIsCisgICAgICAiODM5MTBFOEI0OEJCMEM3NDI0NEVCREY3RjA3QTFDNTQxM0Q2MTQ3MkJEOTQxRUYzOTIwRTYyM0ZCQ0NFQkVCNiIsCisgICAgICAiOEREQkVDNTRDRjhDRDU4NzQ4ODM4NDFENzEyMTQyQTU2QThEMEYyMThGNTAwM0NCMDI5NkI2QjUwOTYxOUYyQyIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMjU2IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtNTEyLCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTUxMiIsICJ0ZXN0IiwKKyAgICAgICI2OTE1RDExNjMyQUNBM0M0MEQ1RDUxQzA4REFGOUM1NTU5MzM4MTk1NDg3ODQ0ODBFOTM0OTkwMDBEOUYwQjdGIiwKKyAgICAgICI0NjFEOTNGMzFCNjU0MDg5NDc4OEZEMjA2QzA3Q0ZBMENDMzVGNDZGQTNDOTE4MTZGRkYxMDQwQUQxNTgxQTA0IiwKKyAgICAgICIzOUFGOUYxNURFMERCOEQ5N0U3MjcxOUM3NDgyMEQzMDRDRTUyMjZFMzJERURBRTY3NTE5RTg0MEQxMTk0RTU1IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAzODQgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0xLCBtZXNzYWdlID0gXCJzYW1wbGVcIiIsCisgICAgICAic2hhMSIsICJzYW1wbGUiLAorICAgICAgIjQ0NzFFRjc1MThCQjJDN0MyMEY2MkVBRTFDMzg3QUQwQzVFOEU0NzA5OTVEQjRBQ0Y2OTQ0NjZFNkFCMDk2NjMiCisgICAgICAiMEYyOUU1OTM4RDI1MTA2QzNDMzQwMDQ1QTJEQjAxQTciLAorICAgICAgIkVDNzQ4RDgzOTI0M0Q2RkJFRjRGQzVDNDg1OUE3REZGRDdGM0FCRERGNzIwMTQ1NDBDMTZENzMzMDk4MzRGQTMiCisgICAgICAiN0I5QkEwMDI4OTlGNkZEQTNBNEE5Mzg2NzkwRDRFQjIiLAorICAgICAgIkEzQkNGQTk0N0JFRUY0NzMyQkYyNDdBQzE3RjcxNjc2Q0IzMUE4NDdCOUZGMENCQzlDOUVENEMxQTVCM0ZBQ0YiCisgICAgICAiMjZGNDlDQTAzMUQ0ODU3NTcwQ0NCNUNBNDQyNEE0NDMiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTIyNCwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTIyNCIsICJzYW1wbGUiLAorICAgICAgIkE0RTREMkYwRTcyOUVCNzg2QjMxRkMyMEFENUQ4NDlFMzA0NDUwRTBBRThFM0UzNDExMzRBNUMxQUZBMDNDQUIiCisgICAgICAiODA4M0VFNEUzQzQ1QjA2QTU4OTlFQTU2QzUxQjU4NzkiLAorICAgICAgIjQyMzU2RTc2QjU1QTZEOUI0NjMxQzg2NTQ0NURCRTU0RTA1NkQzQjM0MzE3NjZEMDUwOTI0NDc5M0MzRjkzNjYiCisgICAgICAiNDUwRjc2RUUzREU0M0Y1QTEyNTMzM0E2QkUwNjAxMjIiLAorICAgICAgIjlEQTBDODE3ODcwNjQwMjFFNzhERjY1OEYyRkJCMEIwNDJCRjMwNDY2NURCNzIxRjA3N0E0Mjk4QjA5NUU0ODMiCisgICAgICAiNEMwODJDMDNEODMwMjhFRkJGOTNBM0MyMzk0MENBOEQiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTI1NiwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTI1NiIsICJzYW1wbGUiLAorICAgICAgIjE4MEFFOUY5QUVDNTQzOEE0NEJDMTU5QTFGQ0IyNzdDN0JFNTRGQTIwRTdDRjQwNEI0OTA2NTBBOEFDQzQxNEUiCisgICAgICAiMzc1NTcyMzQyODYzQzg5OUY5RjJFREY5NzQ3QTlCNjAiLAorICAgICAgIjIxQjEzRDFFMDEzQzdGQTEzOTJEMDNDNUY5OUFGOEIzMEM1NzBDNkY5OEQ0RUE4RTM1NEI2M0EyMUQzREFBMzMiCisgICAgICAiQkRFMUU4ODhFNjMzNTVEOTJGQTJCM0MzNkQ4RkIyQ0QiLAorICAgICAgIkYzQUE0NDNGQjEwNzc0NUJGNEJENzdDQjM4OTE2NzQ2MzIwNjhBMTBDQTY3RTNENDVEQjIyNjZGQTdEMUZFRUIiCisgICAgICAiRUZEQzYzRUNDRDFBQzQyRUMwQ0I4NjY4QTRGQTBBQjAiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTM4NCwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTM4NCIsICJzYW1wbGUiLAorICAgICAgIjk0RUQ5MTBEMUEwOTlEQUQzMjU0RTkyNDJBRTg1QUJERTRCQTE1MTY4RUFGMENBODdBNTU1RkQ1NkQxMEZCQ0EiCisgICAgICAiMjkwN0UzRTgzQkE5NTM2ODYyM0I4QzQ2ODY5MTVDRjkiLAorICAgICAgIjk0RURCQjkyQTVFQ0I4QUFENDczNkU1NkM2OTE5MTZCM0Y4ODE0MDY2NkNFOUZBNzNENjRDNEVBOTVBRDEzM0MiCisgICAgICAiODFBNjQ4MTUyRTQ0QUNGOTZFMzZERDFFODBGQUJFNDYiLAorICAgICAgIjk5RUY0QUVCMTVGMTc4Q0VBMUZFNDBEQjI2MDMxMzhGMTMwRTc0MEExOTYyNDUyNjIwM0I2MzUxRDBBM0E5NEYiCisgICAgICAiQTMyOUMxNDU3ODZFNjc5RTdCODJDNzFBMzg2MjhBQzgiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTUxMiIsICJzYW1wbGUiLAorICAgICAgIjkyRkMzQzcxODNBODgzRTI0MjE2RDExNDFGMUE4OTc2QzVCMERENzk3REZBNTk3RTNEN0IzMjE5OEJEMzUzMzEiCisgICAgICAiQTRFOTY2NTMyNTkzQTUyOTgwRDBFM0FBQTVFMTBFQzMiLAorICAgICAgIkVEMDk1OUQ1ODgwQUIyRDg2OUFFN0Y2QzI5MTVDNkQ2MEY5NjUwN0Y5Q0IzRTA0N0MwMDQ2ODYxREE0QTc5OUMiCisgICAgICAiRkUzMEYzNUNDOTAwMDU2RDdDOTlDRDc4ODI0MzM3MDkiLAorICAgICAgIjUxMkM4Q0NFRUUzODkwQTg0MDU4Q0UxRTIyREJDMjE5OEY0MjMyM0NFOEFDQTkxMzUzMjlGMDNDMDY4RTUxMTIiCisgICAgICAiREM3Q0MzRUYzNDQ2REVGQ0VCMDFBNDVDMjY2N0ZERDUiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTEsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMSIsICJ0ZXN0IiwKKyAgICAgICI2NkNDMkM4RjREMzAzRkM5NjJFNUZGNkEyN0JENzlGODRFQzgxMkREQUU1OENGNTI0M0I2NEE0QUQ4MDk0RDQ3IgorICAgICAgIkVDMzcyN0YzQTNDMTg2QzE1MDU0NDkyRTMwNjk4NDk3IiwKKyAgICAgICI0QkMzNUQzQTUwRUY0RTMwNTc2RjU4Q0Q5NkNFNkJGNjM4MDI1RUU2MjQwMDRBMUY3Nzg5QThCOEU0M0QwNjc4IgorICAgICAgIkFDRDlEMjk4NzZEQUY0NjYzODY0NUY3RjQwNEIxMUM3IiwKKyAgICAgICJENUE2MzI2QzQ5NEVEM0ZGNjE0NzAzODc4OTYxQzBGREU3QjJDMjc4RjlBNjVGRDhDNEI3MTg2MjAxQTI5OTE2IgorICAgICAgIjk1QkExQzg0NTQxMzI3RTk2NkZBN0I1MEY3MzgyMjgyIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAzODQgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMjI0IiwgInRlc3QiLAorICAgICAgIjE4RkEzOURCOTVBQTVGNTYxRjMwRkEzNTkxREM1OUMwRkEzNjUzQTgwREFGRkEwQjQ4RDFBNEM2REZDQkZGNkUiCisgICAgICAiM0QzM0JFNERDNUVCODg4NkE4RUNEMDkzRjI5MzU3MjYiLAorICAgICAgIkU4QzlEMEI2RUE3MkEwRTc4MzdGRUExRDE0QTFBOTU1N0YyOUZBQTQ1RDNFN0VFODg4RkM1QkY5NTRCNUU2MjQiCisgICAgICAiNjRBOUE4MTdDNDdGRjc4QjhDMTEwNjZCMjQwODBFNzIiLAorICAgICAgIjA3MDQxRDRBN0EwMzc5QUM3MjMyRkY3MkU2Rjc3QjZEREI4RjA5QjE2Q0NFMEVDMzI4NkIyQkQ0M0ZBOEM2MTQiCisgICAgICAiMUM1M0VBNUFCRUYwRDgyMzEwNzdBMDQ1NDBBOTZCNjYiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDM4NCBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTI1NiwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGEyNTYiLCAidGVzdCIsCisgICAgICAiMENGQUMzNzU4NzUzMjM0N0RDMzM4OUZEQzk4Mjg2QkJBOEM3MzgwNzI4NUIxODRDODNFNjJFMjZDNDAxQzBGQSIKKyAgICAgICJBNDhERDA3MEJBNzk5MjFBMzQ1N0FCRkYyRDYzMEFENyIsCisgICAgICAiNkQ2REVGQUM5QUI2NERBQkFGRTM2QzZCRjUxMDM1MkE0Q0MyNzAwMTI2MzYzOEU1QjE2RDlCQjUxRDQ1MTU1OSIKKyAgICAgICJGOTE4RUVEQUYyMjkzQkU1QjQ3NUNDOEYwMTg4NjM2QiIsCisgICAgICAiMkQ0NkYzQkVDQkNDNTIzRDVGMUExMjU2QkYwQzlCMDI0RDg3OUJBOUU4MzgxNDRDOEJBNkJBRUI0QjUzQjQ3RCIKKyAgICAgICI1MUFCMzczRjk4NDVDMDUxNEVFRkIxNDAyNDc4NzI2NSIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgMzg0IGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMzg0LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTM4NCIsICJ0ZXN0IiwKKyAgICAgICIwMTVFRTQ2QTVCRjg4NzczRUQ5MTIzQTVBQjA4MDc5NjJEMTkzNzE5NTAzQzUyN0IwMzFCNEMyRDIyNTA5MkFEIgorICAgICAgIkE3MUY0QTQ1OUJDMERBOThBREI5NTgzN0RCODMxMkVBIiwKKyAgICAgICI4MjAzQjYzRDNDODUzRThENzcyMjdGQjM3N0JDRjdCN0I3NzJFOTc4OTJBODBGMzZBQjc3NUQ1MDlEN0E1RkVCIgorICAgICAgIjA1NDJBN0YwODEyOTk4REE4RjFERDNDQTNDRjAyM0RCIiwKKyAgICAgICJEREQwNzYwNDQ4RDQyRDhBNDNBRjQ1QUY4MzZGQ0U0REU4QkUwNkI0ODVFOUI2MUI4MjdDMkYxMzE3MzkyM0UwIgorICAgICAgIjZBNzM5RjA0MDY0OUE2NjdCRjNCODI4MjQ2QkFBNUE1IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCAzODQgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS01MTIsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhNTEyIiwgInRlc3QiLAorICAgICAgIjM3ODBDNEY2N0NCMTU1MThCNkFDQUUzNEM5RjgzNTY4RDJFMTJFNDdERUFCNkM1MEE0RTRFRTUzMTlEMUU4Q0UiCisgICAgICAiMEUyQ0M4QTEzNjAzNkRDNEI5QzAwRTY4ODhGNjZCNkMiLAorICAgICAgIkEwRDVEMDkwQzk5ODBGQUYzQzJDRTU3QjdBRTk1MUQzMTk3N0REMTFDNzc1RDMxNEFGNTVGNzZDNjc2NDQ3RDAiCisgICAgICAiNkZCNjQ5NUNEMjFCNEI2RTM0MEZDMjM2NTg0RkIyNzciLAorICAgICAgIjk3Njk4NEU1OUI0Qzc3QjBFOEU0NDYwRENBM0Q5RjIwRTA3QjlCQjFGNjNCRUVGQUY1NzZGNkIyRThCMjI0NjMiCisgICAgICAiNEEyMDkyQ0QzNzkyRTAxNTlBRDlDRUUzNzY1OUM3MzYiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDUyMSBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTEsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGExIiwgInNhbXBsZSIsCisgICAgICAiMDA4OUMwNzFCNDE5RTFDMjgyMDk2MjMyMTc4NzI1ODQ2OTUxMTk1OEU4MDU4MkU5NUQ4Mzc4RTBDMkNDREIzQ0IiCisgICAgICAiNDJCRURFNDJGNTBFM0ZBM0M3MUY1QTc2NzI0MjgxRDMxRDlDODlGMEY5MUZDMUJFNDkxOERCMUMwM0E1ODM4RCIKKyAgICAgICIwRjkiLAorICAgICAgIjM0M0I2RUM0NTcyODk3NUVBNUNCQTY2NTlCQkI2MDYyQTVGRjg5RUVBNThCRTNDODBCNjE5RjMyMkM4NzkxMCIKKyAgICAgICJGRTA5MkY3RDQ1QkIwRjhFRUUwMUVEM0YyMEJBQkVDMDc5RDIwMkFFNjc3QjI0M0FCNDBCNTQzMUQ0OTdDNTVEIgorICAgICAgIjc1RCIsCisgICAgICAiRTdCMEU2NzVBOUIyNDQxM0Q0NDhCOENDMTE5RDJCRjdCMkQyREYwMzI3NDFDMDk2NjM0RDZENjVEMERCRTNEIgorICAgICAgIjU2OTQ2MjVGQjlFODEwNEQzQjg0MkMxQjBFMkQwQjk4QkVBMTkzNDFFODY3NkFFRjY2QUU0RUJBM0Q1NDc1RDUiCisgICAgICAiRDE2IgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyMjQiLCAic2FtcGxlIiwKKyAgICAgICIxMjE0MTVFQzJDRDc3MjYzMzBBNjFGN0YzRkE1REUxNEJFOTQzNjAxOUM0REI4Q0I0MDQxRjNCNTRDRjMxQkUwIgorICAgICAgIjQ5M0VFM0Y0MjdGQjkwNjM5M0Q4OTVBMTlDOTUyM0YzQTFENTRCQjg3MDJCRDRBQTlDOTlEQUIyNTk3QjkyMTEiCisgICAgICAiM0YzIiwKKyAgICAgICIwMTc3NjMzMUNGQ0RGOTI3RDY2NkUwMzJFMDBDRjc3NjE4N0JDOUZERDhFNjlEMERBQkI0MTA5RkZFMUI1RTJBMyIKKyAgICAgICIwNzE1RjRDQzkyM0E0QTVFOTREMjUwM0U5QUNGRUQ5Mjg1N0I3RjMxRDcxNTJFMEY4QzAwQzE1RkYzRDg3RTJFIgorICAgICAgIkQyRSIsCisgICAgICAiNTBDQjUyNjU0MTdGRTIzMjBCQkI1QTEyMkI4RTFBMzJCRDY5OTA4OTg1MTEyOEUzNjBFNjIwQTMwQzdFMTdCIgorICAgICAgIkE0MUE2NjZBRjEyNkNFMTAwRTU3OTlCMTUzQjYwNTI4RDUzMDBEMDg0ODlDQTkxNzhGQjYxMEEyMDA2QzI1NEIiCisgICAgICAiNDFGIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yNTYsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEyNTYiLCAic2FtcGxlIiwKKyAgICAgICIwRURGMzhBRkNBQUVDQUI0MzgzMzU4QjM0RDY3QzlGMjIxNkM4MzgyQUFFQTQ0QTNEQUQ1RkRDOUMzMjU3NTc2IgorICAgICAgIjE3OTNGRUYyNEVCMEZDMjc2REZDNEY2RTNFQzQ3Njc1MkYwNDNDRjAxNDE1Mzg3NDcwQkNCRDg2NzhFRDJDN0UiCisgICAgICAiMUEwIiwKKyAgICAgICIwMTUxMUJCNEQ2NzUxMTRGRTI2NkZDNDM3MkI4NzY4MkJBRUNDMDFEM0NDNjJDRjIzMDNDOTJCMzUyNjAxMjY1OSIKKyAgICAgICJEMTY4NzZFMjVDN0MxRTU3NjQ4RjIzQjczNTY0RDY3RjYxQzZGMTRENTI3RDU0OTcyODEwNDIxRTdEODc1ODlFIgorICAgICAgIjFBNyIsCisgICAgICAiNEExNzExNDNBODMxNjNENkRGNDYwQUFGNjE1MjI2OTVGMjA3QTU4Qjk1QzA2NDREODdFNTJBQTFBMzQ3OTE2IgorICAgICAgIkU0RjdBNzI5MzBCMUJDMDZEQkUyMkNFM0Y1ODI2NEFGRDIzNzA0Q0JCNjNCMjlCOTMxRjdERTZDOUQ5NDlBN0UiCisgICAgICAiQ0ZDIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0zODQsIG1lc3NhZ2UgPSBcInNhbXBsZVwiIiwKKyAgICAgICJzaGEzODQiLCAic2FtcGxlIiwKKyAgICAgICIxNTQ2QTEwOEJDMjNBMTVENkYyMTg3MkY3REVENjYxRkE4NDMxRERCRDkyMkQwRENEQjc3Q0M4NzhDODU1M0ZGIgorICAgICAgIkFEMDY0Qzk1QTkyMEE3NTBBQzkxMzdFNTI3MzkwRDJEOTJGMTUzRTY2MTk2OTY2RUE1NTREOUFERkNCMTA5QzQiCisgICAgICAiMjExIiwKKyAgICAgICIwMUVBODQyQTBFMTdEMkRFNEY5MkMxNTMxNUM2M0RERjcyNjg1QzE4MTk1QzJCQjk1RTU3MkI5QzUxMzZDQTRCNCIKKyAgICAgICJCNTc2QUQ3MTJBNTJCRTk3MzA2MjdEMTYwNTRCQTQwQ0MwQjhEM0ZGMDM1QjEyQUU3NTE2ODM5N0Y1RDUwQzY3IgorICAgICAgIjQ1MSIsCisgICAgICAiMDFGMjFBM0NFRTA2NkUxOTYxMDI1RkIwNDhCRDVGRTJCNzkyNEQwQ0Q3OTdCQUJFMEE4M0I2NkYxRTM1RUVBRjUiCisgICAgICAiRkRFMTQzRkE4NURDMzk0QTdERUU3NjY1MjMzOTM3ODQ0ODRCREYzRTAwMTE0QTFDODU3Q0RFMUFBMjAzREI2NSIKKyAgICAgICJENjEiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDUyMSBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwic2FtcGxlXCIiLAorICAgICAgInNoYTUxMiIsICJzYW1wbGUiLAorICAgICAgIjFEQUUyRUEwNzFGODExMERDMjY4ODJENEQ1RUFFMDYyMUEzMjU2RkM4ODQ3RkI5MDIyRTJCN0QyOEU2RjEwMTkiCisgICAgICAiOEIxNTc0RkREMDNBOTA1M0MwOEExODU0QTE2OEFBNUE1NzQ3MEVDOTdERDVDRTA5MDEyNEVGNTJBMkY3RUNCRiIKKyAgICAgICJGRDMiLAorICAgICAgIkMzMjhGQUZDQkQ3OURENzc4NTAzNzBDNDYzMjVEOTg3Q0I1MjU1NjlGQjYzQzVEM0JDNTM5NTBFNkQ0QzVGMSIKKyAgICAgICI3NEUyNUExRUU5MDE3QjVENDUwNjA2QUREMTUyQjUzNDkzMUQ3RDRFODQ1NUNDOTFGOUIxNUJGMDVFQzM2RTM3IgorICAgICAgIjdGQSIsCisgICAgICAiNjE3Q0NFN0NGNTA2NDgwNkM0NjdGNjc4RDNCNDA4MEQ2RjFDQzUwQUYyNkNBMjA5NDE3MzA4MjgxQjY4QUYyIgorICAgICAgIjgyNjIzRUFBNjNFNUI1QzA3MjNEOEI4QzM3RkYwNzc3QjFBMjBGOENDQjFEQ0NDNDM5OTdGMUVFMEU0NERBNEEiCisgICAgICAiNjdBIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0xLCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTEiLCAidGVzdCIsCisgICAgICAiMEJCOUYyQkY0RkUxMDM4Q0NGNERBQkQ3MTM5QTU2RjZGRDhCQjEzODY1NjFCRDNDNkE0RkM4MThCMjBERjVERCIKKyAgICAgICJCQTgwNzk1QTk0NzEwN0ExQUI5RDEyREFBNjE1QjFBREU0RjdBOURDMDVFOEU2MzExMTUwRjQ3RjVDNTdDRThCIgorICAgICAgIjIyMiIsCisgICAgICAiMDEzQkFEOUYyOUFCRTIwREUzN0VCRUI4MjNDMjUyQ0EwRjYzMzYxMjg0MDE1QTNCRjQzMEE0NkFBQTgwQjg3QjAiCisgICAgICAiNjkzRjA2OTRCRDg4QUZFNEU2NjFGQzMzQjA5NENEM0I3OTYzQkVENUE3MjdFRDhCRDZBM0EyMDJBQkUwMDlEMCIKKyAgICAgICIzNjciLAorICAgICAgIjAxRTlCQjgxRkY3OTQ0Q0E0MDlBRDEzOERCQkVFMjI4RTFBRkNDMEM4OTBGQzc4RUM4NjA0NjM5Q0IwREJEQzkwIgorICAgICAgIkY3MTdBOTlFQUQ5RDI3Mjg1NUQwMDE2MkVFOTUyNzU2N0RENkE5MkNCRDYyOTgwNUMwNDQ1MjgyQkJDOTE2NzkiCisgICAgICAiN0ZGIgorICAgIH0sCisgICAgeworICAgICAgIkVDRFNBLCA1MjEgYml0cyAocHJpbWUgZmllbGQpIiwKKyAgICAgICJXaXRoIFNIQS0yMjQsIG1lc3NhZ2UgPSBcInRlc3RcIiIsCisgICAgICAic2hhMjI0IiwgInRlc3QiLAorICAgICAgIjA0MEQwOUZDRjNDOEE1RjYyQ0Y0RkIyMjNDQkJCMkI5OTM3RjZCMDU3N0MyNzAyMEE5OTYwMkMyNUEwMTEzNjkiCisgICAgICAiODdFNDUyOTg4NzgxNDg0RURCQkNGMUM0N0U1NTRFN0ZDOTAxQkMzMDg1RTUyMDZEOUY2MTlDRkYwN0U3M0Q2RiIKKyAgICAgICI3MDYiLAorICAgICAgIjAxQzdFRDkwMkUxMjNFNjgxNTU0NjA2NUEyQzRBRjk3N0IyMkFBOEVBRERCNjhCMkMxMTEwRTdFQTQ0RDQyMDg2IgorICAgICAgIkJGRTRBMzRCNjdEREMwRTE3RTk2NTM2RTM1ODIxOUIyM0E3MDZDNkE2RTE2QkE3N0I2NUUxQzU5NUQ0M0NBRTEiCisgICAgICAiN0ZCIiwKKyAgICAgICIwMTc3MzM2Njc2MzA0RkNCMzQzQ0UwMjhCMzhFN0I0RkJBNzZDMUMxQjI3N0RBMThDQUQyQTg0NzhCMkE5QTlGNSIKKyAgICAgICJCRUMwRjNCQTA0RjM1REIzRTQyNjM1NjlFQzZBQURFOEM5Mjc0NkU0QzgyRjgyOTlBRTFCOEYxNzM5RjhGRDUxIgorICAgICAgIjlBNCIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgNTIxIGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMjU2LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTI1NiIsICJ0ZXN0IiwKKyAgICAgICIwMURFNzQ5NTVFRkFBQkM0QzRGMTdGOEU4NEQ4ODFEMTMxMEI1MzkyRDc3MDAyNzVGODJGMTQ1QzYxRTg0Mzg0IgorICAgICAgIjFBRjA5MDM1QkY3QTYyMTBGNUE0MzFBNkE5RTgxQzkzMjMzNTRBOUU2OTEzNUQ0NEVCRDJGQ0FBNzczMUI5MDkiCisgICAgICAiMjU4IiwKKyAgICAgICIwRTg3MUM0QTE0Rjk5M0M2QzczNjk1MDE5MDBDNEJDMUU5QzdCMEI0QkE0NEUwNDg2OEIzMEI0MUQ4MDcxMDQiCisgICAgICAiMkVCMjhDNEMyNTA0MTFEMENFMDhDRDE5N0U0MTg4RUE0ODc2RjI3OUY5MEIzRDhENzRBM0M3NkU2RjFFNDY1NiIKKyAgICAgICJBQTgiLAorICAgICAgIkNENTJEQkFBMzNCMDYzQzNBNkNEODA1OEExRkIwQTQ2QTQ3NTRCMDM0RkNDNjQ0NzY2Q0ExNERBOENBNUNBOSIKKyAgICAgICJGREUwMEU4OEMxQUQ2MENDQkE3NTkwMjUyOTkwNzlEN0E0MjdFQzNDQzVCNjE5QkZCQzgyOEU3NzY5QkNENjk0IgorICAgICAgIkU4NiIKKyAgICB9LAorICAgIHsKKyAgICAgICJFQ0RTQSwgNTIxIGJpdHMgKHByaW1lIGZpZWxkKSIsCisgICAgICAiV2l0aCBTSEEtMzg0LCBtZXNzYWdlID0gXCJ0ZXN0XCIiLAorICAgICAgInNoYTM4NCIsICJ0ZXN0IiwKKyAgICAgICIxRjFGQzRBMzQ5QTdEQTlBOUUxMTZCRkREMDU1REMwOEU3ODI1MkZGOEUyM0FDMjc2QUM4OEIxNzcwQUUwQjVEIgorICAgICAgIkNFQjFFRDE0QTQ5MTZCNzY5QTUyM0NFMUU5MEJBMjI4NDZBRjExREY4QjMwMEMzODgxOEY3MTNEQUREODVERTAiCisgICAgICAiQzg4IiwKKyAgICAgICIwMTRCRUUyMUExOEI2RDhCM0M5M0ZBQjA4RDQzRTczOTcwNzk1MzI0NEZEQkU5MjRGQTkyNkQ3NjY2OUU3QUM4QyIKKyAgICAgICI4OURGNjJFRDg5NzVDMkQ4Mzk3QTY1QTQ5RENDMDlGNkIwQUM2MjI3Mjc0MTkyNEQ0NzkzNTRENzRGRjYwNzU1IgorICAgICAgIjc4QyIsCisgICAgICAiMDEzMzMzMDg2NUMwNjdBMEVBRjcyMzYyQTY1RTJEN0JDNEU0NjFFOEM4OTk1QzNCNjIyNkEyMUJEMUFBNzhGMEUiCisgICAgICAiRDk0RkU1MzZBMERDQTM1NTM0RjBDRDE1MTBDNDE1MjVEMTYzRkU5RDc0RDEzNDg4MUUzNTE0MUVENUU4RTk1QiIKKyAgICAgICI5NzkiCisgICAgfSwKKyAgICB7CisgICAgICAiRUNEU0EsIDUyMSBiaXRzIChwcmltZSBmaWVsZCkiLAorICAgICAgIldpdGggU0hBLTUxMiwgbWVzc2FnZSA9IFwidGVzdFwiIiwKKyAgICAgICJzaGE1MTIiLCAidGVzdCIsCisgICAgICAiMTYyMDA4MTMwMjBFQzk4Njg2M0JFREZDMUIxMjFGNjA1QzEyMTU2NDUwMThBRUExQTdCMjE1QTU2NERFOUVCMSIKKyAgICAgICJCMzhBNjdBQTExMjhCODBDRTM5MUM0RkI3MTE4NzY1NEFBQTM0MzEwMjdCRkM3RjM5NTc2NkNBOTg4Qzk2NERDIgorICAgICAgIjU2RCIsCisgICAgICAiMDEzRTk5MDIwQUJGNUNFRTc1MjVEMTZCNjlCMjI5NjUyQUI2QkRGMkFGRkNBRUYzODc3M0I0QjdEMDg3MjVGMTAiCisgICAgICAiQ0RCOTM0ODJGRENDNTRFRENFRTkxRUNBNDE2NkIyQTdDNjI2NUVGMENFMkJENzA1MUI3Q0VGOTQ1QkFCRDQ3RSIKKyAgICAgICJFNkQiLAorICAgICAgIjAxRkJEMDAxM0M2NzRBQTc5Q0IzOTg0OTUyNzkxNkNFMzAxQzY2RUE3Q0U4QjgwNjgyNzg2QUQ2MEY5OEY3RTc4IgorICAgICAgIkExOUNBNjlFRkY1QzU3NDAwRTNCM0EwQUQ2NkNFMDk3ODIxNEQxM0JBRjRFOUFDNjA3NTJGN0IxNTVFMkRFNEQiCisgICAgICAiQ0UzIgorICAgIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworICBncGdfZXJyb3JfdCBlcnI7CisgIGludCB0bm8sIGksIGhhc2hhbGdvOworICBnY3J5X3NleHBfdCBzZWNrZXksIGRhdGEsIHNpZzsKKyAgdW5zaWduZWQgY2hhciBkaWdlc3RbNjRdOworICBpbnQgZGlnZXN0bGVuOworCisgIGZvciAodG5vID0gMDsgdGVzdHNbdG5vXS5rZXluYW1lOyB0bm8rKykKKyAgICB7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgaW5mbyAoIlRlc3QgJWQ6ICVzLiAlcy5cbiIsIHRubywgdGVzdHNbdG5vXS5rZXluYW1lLCB0ZXN0c1t0bm9dLm5hbWUpOworCisgICAgICB7CisgICAgICAgIGZvciAoaT0wOyBrZXlzW2ldLm5hbWU7IGkrKykKKyAgICAgICAgICBpZiAoIXN0cmNtcCAodGVzdHNbdG5vXS5rZXluYW1lLCBrZXlzW2ldLm5hbWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgha2V5c1tpXS5uYW1lKQorICAgICAgICAgIGRpZSAoIktleSAnJXMnIHVzZWQgYnkgdGVzdCAnJXMnIG5vdCBmb3VuZFxuIiwKKyAgICAgICAgICAgICAgIHRlc3RzW3Rub10ua2V5bmFtZSwgdGVzdHNbdG5vXS5uYW1lKTsKKworICAgICAgICBlcnIgPSBnY3J5X3NleHBfbmV3ICgmc2Vja2V5LCBrZXlzW2ldLmtleSwgMCwgMSk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgZGllICgicmVhZGluZyBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIH0KKworICAgICAgaGFzaGFsZ28gPSBnY3J5X21kX21hcF9uYW1lICh0ZXN0c1t0bm9dLmhhc2huYW1lKTsKKyAgICAgIGlmICghaGFzaGFsZ28pCisgICAgICAgIGRpZSAoImhhc2ggd2l0aCBuYW1lICclcycgaXMgbm90IHN1cHBvcnRlZFxuIiwgdGVzdHNbdG5vXS5oYXNobmFtZSk7CisKKyAgICAgIGRpZ2VzdGxlbiA9IGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiAoaGFzaGFsZ28pOworICAgICAgaWYgKGRpZ2VzdGxlbiA+IHNpemVvZiBkaWdlc3QpCisgICAgICAgIGRpZSAoImludGVybmFsIGVycm9yOiBkaWdlc3QgZG9lcyBub3QgZml0IGludG8gb3VyIGJ1ZmZlclxuIik7CisKKyAgICAgIGdjcnlfbWRfaGFzaF9idWZmZXIgKGhhc2hhbGdvLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t0bm9dLm1lc3NhZ2UsIHN0cmxlbiAodGVzdHNbdG5vXS5tZXNzYWdlKSk7CisKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmRhdGEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKGZsYWdzIHJmYzY5NzkpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIChoYXNoICVzICViKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t0bm9dLmhhc2huYW1lLCBkaWdlc3RsZW4sIGRpZ2VzdCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJidWlsZGluZyBkYXRhIHNleHAgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZXJyID0gZ2NyeV9wa19zaWduICgmc2lnLCBkYXRhLCBzZWNrZXkpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoInNpZ25pbmcgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZXh0cmFjdF9jbXBfZGF0YSAoc2lnLCAiciIsIHRlc3RzW3Rub10ucik7CisgICAgICBleHRyYWN0X2NtcF9kYXRhIChzaWcsICJzIiwgdGVzdHNbdG5vXS5zKTsKKworICAgICAgZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgZGF0YSwgc2Vja2V5KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJ2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoZGF0YSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2Vja2V5KTsKKyAgICB9Cit9CisKKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS1kZWJ1ZyIpKQorICAgIHsKKyAgICAgIHZlcmJvc2UgPSAyOworICAgICAgZGVidWcgPSAxOworICAgIH0KKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICAvKiBDaGVjayB0aGF0IHdlIHRlc3QgZXhhY3RseSBvdXIgdmVyc2lvbiAtIGluY2x1ZGluZyB0aGUgcGF0Y2hsZXZlbC4gICovCisgIGlmIChzdHJjbXAgKEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKSkKKyAgICBkaWUgKCJ2ZXJzaW9uIG1pc21hdGNoOyBwZ209JXMsIGxpYnJhcnk9JXNcbiIsCisgICAgICAgICBHQ1JZUFRfVkVSU0lPTixnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfREVCVUdfRkxBR1MsIDF1LCAwKTsKKyAgLyogTm8gdmFsdWFibGUga2V5cyBhcmUgY3JlYXRlLCBzbyB3ZSBjYW4gc3BlZWQgdXAgb3VyIFJORy4gKi8KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET00sIDApOworCisgIGNoZWNrX2RzYV9yZmM2OTc5ICgpOworCisgIHJldHVybiBlcnJvcl9jb3VudCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlwczE4Ni1kc2EuYyBiL3Rlc3RzL2ZpcHMxODYtZHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMThhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZpcHMxODYtZHNhLmMKQEAgLTAsMCArMSw0NjUgQEAKKy8qIGZpcHMxODYtZHNhLmMgLSBGSVBTIDE4NiBEU0EgdGVzdHMKKyAqCUNvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyMgaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKyNlbHNlCisjIGluY2x1ZGUgPGdjcnlwdC5oPgorI2VuZGlmCisKKworI2RlZmluZSBteV9pc2FzY2lpKGMpICghKChjKSAmIDB4ODApKQorI2RlZmluZSBkaWdpdHAocCkgICAoKihwKSA+PSAnMCcgJiYgKihwKSA8PSAnOScpCisjZGVmaW5lIGhleGRpZ2l0cChhKSAoZGlnaXRwIChhKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnQScgJiYgKihhKSA8PSAnRicpICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ2EnICYmICooYSkgPD0gJ2YnKSkKKyNkZWZpbmUgeHRvaV8xKHApICAgKCoocCkgPD0gJzknPyAoKihwKS0gJzAnKTogXAorICAgICAgICAgICAgICAgICAgICAgKihwKSA8PSAnRic/ICgqKHApLSdBJysxMCk6KCoocCktJ2EnKzEwKSkKKyNkZWZpbmUgeHRvaV8yKHApICAgKCh4dG9pXzEocCkgKiAxNikgKyB4dG9pXzEoKHApKzEpKQorI2RlZmluZSBESU0odikJCSAgICAgKHNpemVvZih2KS9zaXplb2YoKHYpWzBdKSkKKyNkZWZpbmUgRElNb2YodHlwZSxtZW1iZXIpICAgRElNKCgodHlwZSAqKTApLT5tZW1iZXIpCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CisKK3N0YXRpYyB2b2lkCitpbmZvIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3NleHAgKGNvbnN0IGNoYXIgKnByZWZpeCwgZ2NyeV9zZXhwX3QgYSkKK3sKKyAgY2hhciAqYnVmOworICBzaXplX3Qgc2l6ZTsKKworICBpZiAocHJlZml4KQorICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCitzdGF0aWMgZ2NyeV9tcGlfdAorbXBpX2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9tcGlfdCBhOworCisgIGVyciA9IGdjcnlfbXBpX3NjYW4gKCZhLCBHQ1JZTVBJX0ZNVF9IRVgsIHN0cmluZywgMCwgTlVMTCk7CisgIGlmIChlcnIpCisgICAgZGllICgiZXJyb3IgY29udmVydGluZyBzdHJpbmcgdG8gbXBpOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgcmV0dXJuIGE7Cit9CisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2RhdGFfZnJvbV9oZXggKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IGdjcnlfeG1hbGxvYyAoc3RybGVuKHN0cmluZykvMisxKTsKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChzPXN0cmluZzsgKnM7IHMgKz0yICkKKyAgICB7CisgICAgICBpZiAoIWhleGRpZ2l0cCAocykgfHwgIWhleGRpZ2l0cCAocysxKSkKKyAgICAgICAgZGllICgiZXJyb3IgcGFyc2luZyBoZXggc3RyaW5nIGAlcydcbiIsIHN0cmluZyk7CisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbbGVuZ3RoKytdID0geHRvaV8yIChzKTsKKyAgICB9CisgICpyX2xlbmd0aCA9IGxlbmd0aDsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitzdGF0aWMgdm9pZAorZXh0cmFjdF9jbXBfbXBpIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpleHBlY3RlZCkKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGdjcnlfbXBpX3QgYSwgYjsKKworICBsMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzZXhwLCBuYW1lLCAwKTsKKyAgYSA9IGdjcnlfc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgYiA9IG1waV9mcm9tX3N0cmluZyAoZXhwZWN0ZWQpOworICBpZiAoIWEpCisgICAgZmFpbCAoInBhcmFtZXRlciBcIiVzXCIgbWlzc2luZyBpbiBrZXlcbiIsIG5hbWUpOworICBlbHNlIGlmICggZ2NyeV9tcGlfY21wIChhLCBiKSApCisgICAgZmFpbCAoInBhcmFtZXRlciBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWVcbiIsIG5hbWUpOworICBnY3J5X21waV9yZWxlYXNlIChiKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoYSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2V4dHJhY3RfY21wX2RhdGEgKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKQoreworICBnY3J5X3NleHBfdCBsMTsKKyAgY29uc3Qgdm9pZCAqYTsKKyAgc2l6ZV90IGFsZW47CisgIHZvaWQgKmI7CisgIHNpemVfdCBibGVuOworCisgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNleHAsIG5hbWUsIDApOworICBhID0gZ2NyeV9zZXhwX250aF9kYXRhIChsMSwgMSwgJmFsZW4pOworICBiID0gZGF0YV9mcm9tX2hleCAoZXhwZWN0ZWQsICZibGVuKTsKKyAgaWYgKCFhKQorICAgIGZhaWwgKCJwYXJhbWV0ZXIgXCIlc1wiIG1pc3NpbmcgaW4ga2V5XG4iLCBuYW1lKTsKKyAgZWxzZSBpZiAoIGFsZW4gIT0gYmxlbiB8fCBtZW1jbXAgKGEsIGIsIGFsZW4pICkKKyAgICBmYWlsICgicGFyYW1ldGVyIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB2YWx1ZVxuIiwgbmFtZSk7CisgIGdjcnlfZnJlZSAoYik7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7Cit9CisKK3N0YXRpYyB2b2lkCitleHRyYWN0X2NtcF9pbnQgKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBleHBlY3RlZCkKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGNoYXIgKmE7CisKKyAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc2V4cCwgbmFtZSwgMCk7CisgIGEgPSBnY3J5X3NleHBfbnRoX3N0cmluZyAobDEsIDEpOworICBpZiAoIWEpCisgICAgZmFpbCAoInBhcmFtZXRlciBcIiVzXCIgbWlzc2luZyBpbiBrZXlcbiIsIG5hbWUpOworICBlbHNlIGlmICggc3RydG91bCAoYSwgTlVMTCwgMTApICE9IGV4cGVjdGVkICkKKyAgICBmYWlsICgicGFyYW1ldGVyIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB2YWx1ZVxuIiwgbmFtZSk7CisgIGdjcnlfZnJlZSAoYSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2RzYV9nZW5fMTg2XzIgKHZvaWQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGludCBuYml0czsKKyAgICBjb25zdCBjaGFyICpwLCAqcSwgKmc7CisgICAgY29uc3QgY2hhciAqc2VlZDsKKyAgICBpbnQgY291bnRlcjsKKyAgICBjb25zdCBjaGFyICpoOworICB9IHRibFtdID0geworICAgIC8qIFRoZXNlIHRlc3RzIGFyZSBmcm9tIEZJUFMgMTg2LTIsIEIuMy4xLiAgKi8KKyAgICB7CisgICAgICAxMDI0LAorICAgICAgImQzYWVkMTg3NjA1NGRiODMxZDBjMTM0OGZiYjFhZGE3MjUwN2U1ZmJmOWE2MmNiZDQ3YTYzYWViNzg1OWQ2OTIxIgorICAgICAgIjRhZGViOTE0NmE2ZWMzZjQzNTIwZjBmZDhlMzEyNWRkOGJiYzVkODc0MDVkMWFjNWY4MjA3M2NkNzYyYTNmOGQ3IgorICAgICAgIjc0MzIyNjU3YzlkYTg4YTdkMmYwZTFhOWNlYjg0YTM5Y2I0MDg3NjE3OWU2YTc2ZTQwMDQ5OGRlNGJiOTM3OWIwIgorICAgICAgIjVmNWZlYjdiOTFlYjhmZWE5N2VlMTdhOTU1YTBhOGEzNzU4N2EyNzJjNDcxOWQ2ZmViNmI1NGJhNGFiNjkiLAorICAgICAgIjljOTE2ZDEyMWRlOWEwM2Y3MWZiMjFiYzJlMWMwZDExNmYwNjVhNGYiLAorICAgICAgIjgxNTdjNWY2OGNhNDBiM2RlZDExYzM1MzMyN2FiOWI4YWYzZTE4NmRkMmU4ZGFkZTk4NzYxYTA5OTZkZGE5OWFiIgorICAgICAgIjAyNTBkMzQwOTA2M2FkOTllZmFlNDhiMTBjNmFiMmJiYTNlYTlhNjdiMTJiOTExYTM3MmEyYmJhMjYwMTc2ZmFkIgorICAgICAgImI0YjkzMjQ3ZDk3MTJhYWQxM2FhNzAyMTZjNTVkYTk4NThmN2EyOThkZWI2NzBhNDAzZWIxZTdjOTFiODQ3ZjFlIgorICAgICAgImNjZmJkMTRiZDgwNmZkNDJjZjQ1ZGJiNjljZDZkNmI0M2FkZDJhNzhmN2QxNjkyOGVhYTA0NDU4ZGVhNDQiLAorICAgICAgIjBjYjE5OTBjMWZkMzYyNjA1NWQ3YTAwOTZmOGZhOTk4MDczOTk4NzEiLAorICAgICAgOTgsCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiIKKyAgICB9LAorICAgIHsKKyAgICAgIDEwMjQsCisgICAgICAiZjVjNzMzMDQwODAzNTMzNTdkZTFiNTk2NzU5N2MyN2Q2NWY3MGFhMmZlOWI2YWVkMWQwYWZjMmI0OTlhZGYyMmYiCisgICAgICAiOGUzNzkzNzA5NmQ4ODU0OGFjMzZjNGEwNjdmODM1M2M3ZmVkNzNmOTZmMGQ2ODhiMTliMDYyNGFlZGJhZTVkYmIiCisgICAgICAiMGVlODgzNWE0YzI2OTI4OGMwZTFkNjk0NzllNzAxZWUyNjZiYjc2N2FmMzlkNzQ4ZmU3ZDZhZmM3M2ZkZjQ0YmUiCisgICAgICAiM2ViNmU2NjFlNTk5NjcwMDYxMjAzZTc1ZmM4YjNkYmQ1OWU0MGI1NGYzNThkMDA5NzAxM2EwZjM4NjdmOSIsCisgICAgICAiZjg3NTExNjZjZjRmNmYzYjA3YzA4MWZkMmE5MDcxZjIzY2ExOTg4ZCIsCisgICAgICAiMWUyODhhNDQyZTAyNDYxYzQxOGVkNjdhNjZkMjRjYWNiZWI4OTM2ZmJkZTYyZmY5OTVmNWZkNTY5ZGVlNmJlNjIiCisgICAgICAiNGU0ZjBmOWY4YzgwOTNmNWQxOTJhYjNiM2Y5YWUzZjI2NjVkOTVkMjdmYjEwZTM4MmY0NWNkMzU2ZTdmNGViN2EiCisgICAgICAiNjY1ZGI0MzIxMTNlZDA2NDc4ZjkzYjdjZjE4OGVjN2ExZWU5N2FlYzhmOTFlYTdiZmNlYWY4YjZlN2U1YTM0OWMiCisgICAgICAiNGFkMzIyNTM2MmVmNDQwYzU3Y2JjNmU2OWRmMTViNjY5OWNhYWM4NWY3MzM1NTUwNzVmMDQ3ODFiMmIzMyIsCisgICAgICAiMzRiMzUyMGQ0NWQyNDBhODg2MWI4MmM4YjYxZmZhMTZlNjdiNWNjZSIsCisgICAgICA2MjIsCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiIsCisgICAgfSwKKyAgICB7CisgICAgICAxMDI0LAorICAgICAgImM2YzZmNGY0ZWVkOTI3ZmIxYzNiMGM4MTAxMDk2N2U1MzA2NThlNmY5Njk4ZWJlMDU4YjRmNDdiMmRjOGZjYmM3IgorICAgICAgImI2OTI5NmI5ZThiNmNmNTU2ODExODFmZTcyNDkyNjY4MDYxYjI2MmIwMDQ2YTBkNDA5OTAyZTI2OWIwY2I2OWE0IgorICAgICAgIjU1ZWQxYTA4NmNhZjQxOTI3ZjU5MTJiZjBlMGNiYzQ1ZWU4MWE0Zjk4YmY2MTQ2ZjYxNjhhMjI4YWVjODBlOWNjIgorICAgICAgIjExNjJkNmY2YWE0MTJlZmU4MmQ0ZjE4Yjk1ZTM0YWI3OTBkYWFjNWJkN2FlZjBiMjJmYTA4YmE1ZGJhYWQiLAorICAgICAgImQzMmIyOWYwNjVjMTM5NGEzMDQ5MGI2ZmNiZjgxMmEzMmE4NjM0YWIiLAorICAgICAgIjA2Zjk3M2M4NzllMmU4OTM0NWQwYWMwNGY5YzM0YWQ2OWI5ZWZmMTY4MGYxOGQxYzhmM2UxNTk2YzJlOGZhOGUxIgorICAgICAgImVjZWY2ODMwNDA5ZTkwMTJkNDc4OGJlZjZlYzc0MTRkMDljOTgxYjQ3Yzk0MWI3N2YzOWRmYzQ5Y2FmZjVlNzE0IgorICAgICAgImM5N2FiZTI1YTdhOGI1ZDFmZTg4NzAwYmI5NmVmZjkxY2NhNjRkNTM3MDBhMjhiMTE0NmQ4MWJhZDEyMTJkMjMxIgorICAgICAgIjgwMTU0Yzk1YTAxZjVhZWViYjU1M2E4MzY1YzM4YTVlYmUwNTUzOWI1MTczNDIzMzc3NmNlOWFmZjk4YjIiLAorICAgICAgImI2ZWM3NTBkYTJmODI0Y2I0MmM1ZjdlMjhjODEzNTBkOTdmNzUxMjUiLAorICAgICAgMTg1LAorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIiLAorICAgIH0sCisgICAgeworICAgICAgMTAyNCwKKyAgICAgICJiODI3YTlkYzkyMjFhNmVkMWJlYzdiNjRkNjEyMzJhYWNiMjgxMmY4ODhiMGEwYjNhOTUwMzNkN2EyMmU3N2QwYiIKKyAgICAgICJmZjIzYmZlZWQwZmIxMjgxYjIxYjhmZjc0MjFmMGM3MjdkMWZiOGFhMmI4NDNkNjg4NWYwNjdlNzYzZjgzZDQxZiIKKyAgICAgICJkODAwYWIxNWE3ZTJiMTJmNzFlYzIwNThlZTdiZDYyY2Q3MmMyNjk4OWIyNzJlNTE5Nzg1ZGE1N2JmYTFmOTc0YiIKKyAgICAgICJjNjUyZTFhMmQ2Y2ZiNjg0NzdkZTU2MzVmZDAxOWIzN2FkZDY1NmNmZjBiODAyNTU4YjMxYjZkMjg1MWU1IiwKKyAgICAgICJkZTgyMmMwMzQ0NWI3N2NlYzRhZDNhNmZiMGNhMzlmZjk3MDU5ZGRmIiwKKyAgICAgICI2NWE5ZTJkNDNhMzc4ZDcwNjM4MTMxMDQ1ODY4NjhjYWNmMmZjY2Q1MWFlYzFlMGI2YWY4YmEzZTY2ZGVlNjM3MSIKKyAgICAgICI2ODEyNTRjM2ZiNWUzOTI5ZDY1ZTNjNGJjZDIwYWJkNGRkYzdjZjgxNTYyM2UxN2I5ZmM5MmYwMmI4ZDQ0Mjc4YiIKKyAgICAgICI4NDg0ODBmZmQxOTMxMDRjZjU2MTI2Mzk1MTFlNDViZDI0NzcwOGZmNjAyOGJkMzgyNGY4ODQ0YzI2M2I0NmM2OSIKKyAgICAgICIxZjIwNzZmOGNkMTNjNWQwYmU5NWYxZjJhMWExN2FiMWY3ZTViYzczNTAwYmFjMjdkNTdiNDczYmE5NzQ4IiwKKyAgICAgICJjZDIyMjFkZDczODE1YTc1MjI0ZTlmZGU3ZmFmNTI4MjliODFhYzdhIiwKKyAgICAgIDYyLAorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIiLAorICAgIH0sCisgICAgeworICAgICAgMTAyNCwKKyAgICAgICI4OThhOGQ5M2UyOTVjOGVmMmZmZDQ2OTc2MjI1YTE1NDM2NDA2NDBkMTU1YTU3NmZhZmEwYmUzMjEzNjE2NTgwMyIKKyAgICAgICJiYTJlZmYyNzgyYTJiZTc1Y2M5ZWM2NWRiNmJkMzIzOGNjYTY5NWIzYTVhMTQ3MjZhMmEzMTQ3NzVjMzc3ZDg5MSIKKyAgICAgICIzNTRiM2RlNmM4OWU3MTRhMDU1OTljYTA0MTMyYzk4N2Y4ODlmNzJjNGZlMjk4Y2NiMzFmNzExYzAzYjA3ZTFkOSIKKyAgICAgICI4ZDcyYWY1OTA3NTRjZjM4NDczOThiNjBjZWNkNTVhNDYxMTY5MmIzMDg4MDk1NjBhODM4ODA0MDRjMjI3IiwKKyAgICAgICJjNmQ3ODY2NDNkMmFjZmM2YjhkNTc2ODYzZmRhOGNmYmZiZDVlMDNmIiwKKyAgICAgICIyZmQzOGI4ZDIxYzU4ZThmYjUzMTVhMTc3YjhkNWRjNGM0NTBkNTc0ZTY5MzQ4YjdiOWRhMzY3YzI2ZTcyNDM4ZCIKKyAgICAgICJhZjgzNzJlN2YwYmVlODRlZjVkY2JiYzM3MjcxOTRhMjIyODQzMTE5MmYxNzc5YmUyNDgzN2YyMmEwZTE0ZDEwZCIKKyAgICAgICI1MzQ0ZGExYjhiNDAzZGY5ZjliMjY1NTA5NWIzZDBmNjc0MThlZDZjZDk4OWYzNWFhNDIzMmU0YjcwMDE3NjRmYiIKKyAgICAgICJlODVkNmIyYzcxNjk4MGYxMzI3MmZjNDI3MWFjMWUyMzRmN2UyNGMwMjNjZmMyZDJkYzBhYTFlOWFmMmZiIiwKKyAgICAgICI3MzQ4M2U2OTc1OTk4NzFhZjk4M2EyODFlM2FmYTIyZTBlZDg2YjY4IiwKKyAgICAgIDI3MiwKKyAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyIiwKKyAgICB9LAorCisgICAgLyogVGhlc2UgdGVzdHMgYXJlIGdlbmVyYXRlZCBieSB0aGUgT3BlblNTTCBGSVBTIHZlcnNpb24uICAqLworICAgIHsKKyAgICAgIDEwMjQsCisgICAgICAiQTQwNDM2MzkwM0ZEQ0U4NjgzOUJDRkQ5NTNBQUQyREEyQjBFNzBDQUVEM0I1RkY1RDY4RjE1QTFDNEJCMEE3OTNDIgorICAgICAgIkE5RDU4RkM5NTY4MDRDNTkwMURFMEFGOTlGMzQ1RUQxQTg2MTdDNjg3ODY0QkFDMDQ0QjdDM0MzRTczMkEyQjI1NSIKKyAgICAgICJFQzk4NkFBNzZFQThDQjBFMDgxNUIzRTBFNjA1NjUwQUY3RDgwNThFRTdFOEVCQ0RFRkZEQUI4MTAwRDNGQzEwMzMiCisgICAgICAiMTFCQTNBQjIzMkVGMDZCQjc0QkE5QTk0OUVDMEM3RUQzMjRDMTlCMjAyRjRBQjcyNUJCQjQwODBDOSIsCisgICAgICAiQzY0Mzk0NkNFQTg3NDhFMTJENDMwQzQ4REIwMzhGOTE2NTgxNDM4OSIsCisgICAgICAiNTlCN0U3QkEwMDMzQ0NFOEU2ODM3MTczNDIwRkJCMzgyQTc4NEQ0MTU0QTNDMTY2MDQzRjVBNjhDQjkyOTQ1RDE2IgorICAgICAgIjg5MkQ0Q0M1NTg1RjJEMjhDNzgwRTc1QTZDMjBBMzc5RTJCNTgzMDRDMUU1RkMwRDhDMTVFNEU4OUM0NDk4QzhCQyIKKyAgICAgICJCOTBGQjM2RUQ4REMwNDg5QjlEMEJDMDlFQzQ0MTFGQjBCRkFERjI1NDg1RUVBQjY3MDBCRTBBQ0Y1QzQ0QTZFRDciCisgICAgICAiNDRBMDE1MzgyRkY5QjhEQTdFQUEwMERFQTEzNUZBREM1OTIxMkRCQkZGQzE1MzczMzZGQTRCNzIyNSIsCisgICAgICAiMDI3MDhhYjM2ZTNmMGJmZDY3ZWMzYjhiZDg4MjlkMDNiODRmNTZiZCIsCisgICAgICA1MCwKKyAgICAgICIwMiIKKyAgICB9LAorICAgIHsKKyAgICAgIDEwMjQsCisgICAgICAiOUM2NjQwMzNEQjhCMjAzRDgyNkY4OTZEMjI5M0M2MkVGOTM1MUQ1Q0ZEMEY0QzBBRDdFRkRBNEREQzdGMTU5ODciCisgICAgICAiNkEzQzY4Q0FCMjU4NkI0NEZEMUJENERFRjdBMTc5MDVEODhEMzIxREQ3N0M0RTE3MjBEODQ4Q0EyMUQ3OUY5QjMiCisgICAgICAiRDhGNTM3MzM4RTA5QjQ0RTlGNDgxRThEQTNDNTY1NjlGNjMxNDY1OTZBMDUwRUY4RkFFRThBQ0EzMkM2NjY0NTAiCisgICAgICAiMDRGNjc1Qzg4MDZFQjQwMjVCMEE1RUNDMzlDRTg5OTgzRUE0MEExODNBN0NGNTIwOEJBOTU4MDQ1QUJENSIsCisgICAgICAiQUQwRDhDQkEzNjlBRjZDRDBEMkJBQzBCNENGQ0FGMEExRjlCQ0RGNyIsCisgICAgICAiNzRENzE3RjcwOTJBMkFGNzI1RkRENkMyNTYxRDFEQkU1QUVFNDAyMDNDNjM4QkE4QjlGNDkwMDM4NTc4NzM3MDEiCisgICAgICAiOTVBNDRFNTE1QzRFOEIzNDRGNUNEQzdGNEE2RDM4MDk3Q0Q1NzY3NUU3NjQzQUI5NzAwNjkyQzY5RjBBOTlCMEUiCisgICAgICAiMDM5RkREREZDQThDRUI2MDdCREI0QURGMjgzNERFMTY5MEY1ODIzRkM4MTk5RkI4RjZGMjlFNUE1ODNCNjc4NkEiCisgICAgICAiQzE0QzdFNjcxMDZDM0IzMDU2OENCQjkzODNGODkyODdENTc4MTU5Nzc4RUIxODIxNjc5OUQxNkQ0NjQ5OCIsCisgICAgICAiNjQ4MWExMmE1MDM4NDg4OGVlODRiNjEwMjRmN2M5YzY4NWQ2YWM5NiIsCisgICAgICAyODksCisgICAgICAiMDIiCisgICAgfSwKKyAgICB7CisgICAgICAxMDI0LAorCisgICAgICAiQjBERkI2MDJFQjg0NjJCMURDOEMyMjE0QTUyQjU4N0QzRTY4NDJDQ0YxQzM4RDBGN0M3Rjk2N0VEMzBDRjY4MjgiCisgICAgICAiMUUyNjc1QjNCQUI1OTQ3NTVGQjE2MzRFNjZCNEMyMzkzNkYwNzI1QTM1OEY4REZGM0MzMDdFMjYwMUZENjZENjMiCisgICAgICAiNUIxNzI3MDQ1MEM1MEJEMkJFQzI5RTBFOUE0NzFERjFDMTVCMDE5MTUxNzk1MjI2OEEyNzYzRDRCRDI4Qjg1MDMiCisgICAgICAiQjMzOTk2ODYyNzJCNzZCMTEyMjdGNjkzRDc4MzMxMDVFRjcwQzIyODlDMzE5NENGNDUyNzAyNEIyNzJERiIsCisgICAgICAiRUE2NDlDMDQ5MTFGQUI1QTQxNDQwMjg3QTUxN0VGNzUyQTQwMzU0QiIsCisgICAgICAiODhDNUE0NTYzRUNCOTQ5NzYzRTBCNjk2Q0QwNEIyMTMyMTM2MEY1NEMwRUU3QjIzRTJDRURDMzBFOUU0ODYxNjIiCisgICAgICAiMDFCRkIxNjE5RTdDNTRCNjUzRDFGODkwQzUwRTA0QjI5MjA1RjVFM0UyRjkzQTEzQjA3NTFBRjI1NDkxQzUxOTQiCisgICAgICAiOTNDMDlEREY2QjlDMTczQjM4NDZERkIwRTdBNUM4NzBCQkZDNzg0MTkyNjBDOTBFMjAzMTU0MTA2OTFDODMyNkMiCisgICAgICAiODU4RDcwNjNFNzkyMUYzRjYwMTE1OEU5MTJDN0VFNDg3RkYyNTkyMDJCRUVCMTBGNkQ5RTk5MTkwRjY5NiIsCisgICAgICAiNWJmOWQxN2JjNjJmYmJmM2Q1NjljOTJiZDQ1MDU1ODZiMmU1ZWYxYSIsCisgICAgICA2MjYsCisgICAgICAiMDIiCisgICAgfSwKKyAgICB7CisgICAgICAxMDI0LAorICAgICAgIkY3ODNDMDhEN0Y5NDYzRTQ4QkE4Nzg5MzgwNUM0QjM0QjYzQzg1REY3RUJERDlFQkVFOTREQjRBRjRFNEE0MTVDIgorICAgICAgIkYwRjM3OTNBRTU1MDk2QkExMTk5NTk4Nzk4RkE4NDAzQjI4REVEN0Y3QzdBRkQ1NEZENTM1ODYxQTAxNTBFRjREIgorICAgICAgIjU4NzE0NjVCMTM4MzdDQ0Y0NkJFQjBBMjJGOEQzOERDN0Q2QUUwRTE0QTM4NDVGRDBDMDI3Q0ZBOTc3OTFCOTc3IgorICAgICAgIkNFMjgwOEJBRDlCNDNDRTY5MzkwQzBGNDAwMTYwNTY3MjJEODJDMEQ3QjFCMjc0MTNEMDI2QTM5RDdEQUQiLAorICAgICAgIkE0MEQ5RUU0NTZBRUQ0QzhBNjUzRkRCNDdCNjYyOUMwQjg0M0ZFOEYiLAorICAgICAgIkRGODc2MjYzRTIxRjI2M0FFNkRBNTc0MDlCRDUxN0RDRUFEQjkyMTYwNDhGMDY2RDZCNTg4NjdGOEU1OUE1RUVFIgorICAgICAgIjcwMDI4M0E5NDZDMTQ1NTUzNDYxODk3OUJFNkMyMjc2NzNDMUI4MDM5MTAyNjJCRDkzQkM5NEQ1MDg5ODUwNjE0IgorICAgICAgIkYzRTI5QUI2NEU4Qzk4OUE3RTNFMjhGRTY3MEZGQTNFRTIxREVFRUMxQUIwQjYwRTFEOEUyQUEzOTY2M0JBREQ3IgorICAgICAgIjJDOUY5NTdEN0YzRDRGMTdEOUZEQUQwNTBFQjM3M0E2REVGRDA5RjVEQTc1MkVBRkUwNDY4MzZFMTRCNjciLAorICAgICAgIjhhOWE1NzcwNmY2OWY0ZjU2NjI1MmNkZjZkNWNiZmRmMjAyMDE1MGIiLAorICAgICAgMzk3LAorICAgICAgIjAyIgorICAgIH0sCisgICAgeworICAgICAgMTAyNCwKKyAgICAgICJENDBFNEY2NDYxRTE0NTg1OUNDRjYwRkQ1Nzk2Mjg0MEJENzVGRkYxMkMyMkY3NjYyNkY1NjY4NDIyNTJBRDA2OCIKKyAgICAgICIyOTc0NUYwMTQ3MDU2MzU0RjZDMDE2Q0YxMjc2MkIwRTMzMTc4NzkyNUI4MTI4Q0Y1QUY4MUY5QjE3NkE1MTkzNCIKKyAgICAgICI5NkQ3OTI0MzBGRjgzQzdCNzlCRDU5NUJEQTEwNzg3QjM0NjAwNzg3RkE1NTJFRkUzNjYyRjM3Qjk5QUFEM0YzQSIKKyAgICAgICIwOTM3MzI2ODBBMDEzNDUxOTJBMTlCRUNDRTZCRjVENDk4RTQ0RUQ2QkVENUIwQkE3MkFBRDQ5RTgyNzZCIiwKKyAgICAgICJEMTJGMUJEMEFBNzhCOTkyNDdGRDlGMThFQUZFRTVDMTM2Njg2RUE1IiwKKyAgICAgICI0NjhFQkQyMEM5OTQ0OUMxRTQ0MEU2RjhFNDUyQzZBNkJDNzU1MUM1NTVGRTVFOTQ5OTZFMjBDRkQ0REEzQjlDQyIKKyAgICAgICI1ODQ5OUQ2Q0MyMzc0Q0NGOUMzOTI3MTVBNTM3REUxMENGQ0E4QTZBMzdBRkJEMTg3Q0Y2Qjg4RDI2ODgxRTVGNSIKKyAgICAgICI3NTIxRDlEMkM5QkJBNTFFN0I4N0IwNzBCQkU3M0Y1QzVGRTMxRTc1MkNBRjg4MTgzNTE2RDg1MDNCQUFDMTE1OSIKKyAgICAgICI5MjhFRjUwREVFNTJEOTZGMzk2QjkzRkI0MTM4RDc4NjQ2NEMzMTU0MDFBODUzRTU3QzlBMEY5RDI1ODM5IiwKKyAgICAgICIzMGIzNTk5OTQ0YTkxNGEzMzBhM2Y0OWQxMWVjODhmNTU1NDIyYWVmIiwKKyAgICAgIDY3OCwKKyAgICAgICIwMiIKKyAgICB9CisgIH07CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IHRubzsKKyAgZ2NyeV9zZXhwX3Qga2V5X3NwZWMsIGtleSwgcHViX2tleSwgc2VjX2tleSwgc2VlZF92YWx1ZXM7CisgIGdjcnlfc2V4cF90IGwxOworCisgIGZvciAodG5vID0gMDsgdG5vIDwgRElNICh0YmwpOyB0bm8rKykKKyAgICB7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgaW5mbyAoImdlbmVyYXRpbmcgRklQUyAxODYtMiB0ZXN0IGtleSAlZFxuIiwgdG5vKTsKKworICAgICAgeworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBzaXplX3QgZGF0YWxlbjsKKworICAgICAgICBkYXRhID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10uc2VlZCwgJmRhdGFsZW4pOworICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleSAoZHNhIChuYml0cyAlZCkodXNlLWZpcHMxODYtMikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihkZXJpdmUtcGFybXMoc2VlZCAlYikpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibFt0bm9dLm5iaXRzLCAoaW50KWRhdGFsZW4sIGRhdGEpOworICAgICAgICBnY3J5X2ZyZWUgKGRhdGEpOworICAgICAgfQorICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uICVkOiAlc1xuIiwgdG5vLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgICAgICBlcnIgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5X3NwZWMpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9zcGVjKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZXJyb3IgZ2VuZXJhdGluZyBrZXkgJWQ6ICVzXG4iLCB0bm8sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgaWYgKHZlcmJvc2UgPiAxKQorICAgICAgICBzaG93X3NleHAgKCJnZW5lcmF0ZWQga2V5OlxuIiwga2V5KTsKKworICAgICAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgICAgICBpZiAoIXB1Yl9rZXkpCisgICAgICAgIGZhaWwgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleSAlZFxuIiwgdG5vKTsKKworICAgICAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICAgICAgaWYgKCFzZWNfa2V5KQorICAgICAgICBmYWlsICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5ICVkXG4iLCB0bm8pOworCisgICAgICBsMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJtaXNjLWtleS1pbmZvIiwgMCk7CisgICAgICBpZiAoIWwxKQorICAgICAgICBmYWlsICgibWlzY19rZXlfaW5mbyBwYXJ0IG1pc3NpbmcgaW4ga2V5ICVkXG4iLCB0bm8pOworICAgICAgc2VlZF92YWx1ZXMgPSBnY3J5X3NleHBfZmluZF90b2tlbiAobDEsICJzZWVkLXZhbHVlcyIsIDApOworICAgICAgaWYgKCFzZWVkX3ZhbHVlcykKKyAgICAgICAgZmFpbCAoInNlZWQtdmFsdWVzIHBhcnQgbWlzc2luZyBpbiBrZXkgJWRcbiIsIHRubyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworCisgICAgICBleHRyYWN0X2NtcF9tcGkgKHNlY19rZXksICJwIiwgdGJsW3Rub10ucCk7CisgICAgICBleHRyYWN0X2NtcF9tcGkgKHNlY19rZXksICJxIiwgdGJsW3Rub10ucSk7CisgICAgICBleHRyYWN0X2NtcF9tcGkgKHNlY19rZXksICJnIiwgdGJsW3Rub10uZyk7CisKKyAgICAgIGV4dHJhY3RfY21wX2RhdGEgKHNlZWRfdmFsdWVzLCAic2VlZCIsIHRibFt0bm9dLnNlZWQpOworICAgICAgZXh0cmFjdF9jbXBfaW50IChzZWVkX3ZhbHVlcywgImNvdW50ZXIiLCB0YmxbdG5vXS5jb3VudGVyKTsKKyAgICAgIGV4dHJhY3RfY21wX21waSAoc2VlZF92YWx1ZXMsICJoIiwgdGJsW3Rub10uaCk7CisKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWVkX3ZhbHVlcyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2VjX2tleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocHViX2tleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgICB9Cit9CisKKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS1kZWJ1ZyIpKQorICAgIHsKKyAgICAgIHZlcmJvc2UgPSAyOworICAgICAgZGVidWcgPSAxOworICAgIH0KKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoIjEuNC40IikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisgIC8qIE5vIHZhbHVhYmxlIGtleXMgYXJlIGNyZWF0ZSwgc28gd2UgY2FuIHNwZWVkIHVwIG91ciBSTkcuICovCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKworCisgIGNoZWNrX2RzYV9nZW5fMTg2XzIgKCk7CisKKworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpcHNkcnYuYyBiL3Rlc3RzL2ZpcHNkcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWYyZGRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZmlwc2Rydi5jCkBAIC0wLDAgKzEsMjUyNSBAQAorLyogZmlwc2Rydi5jICAtICBBIGRyaXZlciB0byBoZWxwIHdpdGggRklQUyBDQVZTIHRlc3RzLgorICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisKKyAgIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEhBVkVfVzMyX1NZU1RFTQorIyBpbmNsdWRlIDxmY250bC5oPiAvKiBXZSBuZWVkIHNldG1vZGUoKS4gICovCisjZWxzZQorIyBpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyMgaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKyNlbHNlCisjIGluY2x1ZGUgPGdjcnlwdC5oPgorIyBkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImRldm51bGxAZXhhbXBsZS5vcmciCisjIGRlZmluZSBQQUNLQUdFX1ZFUlNJT04gIltidWlsZCBvbiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiXSIKKyNlbmRpZgorCisKKyNkZWZpbmUgUEdNICJmaXBzZHJ2IgorCisjZGVmaW5lIG15X2lzYXNjaWkoYykgKCEoKGMpICYgMHg4MCkpCisjZGVmaW5lIGRpZ2l0cChwKSAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpIChkaWdpdHAgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdBJyAmJiAqKGEpIDw9ICdGJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorI2RlZmluZSB4dG9pXzEocCkgICAoKihwKSA8PSAnOSc/ICgqKHApLSAnMCcpOiBcCisgICAgICAgICAgICAgICAgICAgICAqKHApIDw9ICdGJz8gKCoocCktJ0EnKzEwKTooKihwKS0nYScrMTApKQorI2RlZmluZSB4dG9pXzIocCkgICAoKHh0b2lfMShwKSAqIDE2KSArIHh0b2lfMSgocCkrMSkpCisjZGVmaW5lIERJTSh2KSAgICAgICAgICAgICAgIChzaXplb2Yodikvc2l6ZW9mKCh2KVswXSkpCisjZGVmaW5lIERJTW9mKHR5cGUsbWVtYmVyKSAgIERJTSgoKHR5cGUgKikwKS0+bWVtYmVyKQorCisKKyNkZWZpbmUgUFJJVl9DVExfSU5JVF9FWFRSTkdfVEVTVCAgIDU4CisjZGVmaW5lIFBSSVZfQ1RMX1JVTl9FWFRSTkdfVEVTVCAgICA1OQorI2RlZmluZSBQUklWX0NUTF9ERUlOSVRfRVhUUk5HX1RFU1QgNjAKKyNkZWZpbmUgUFJJVl9DVExfRElTQUJMRV9XRUFLX0tFWSAgIDYxCisjZGVmaW5lIFBSSVZfQ1RMX0dFVF9JTlBVVF9WRUNUT1IgICA2MgorCisKKy8qIFZlcmJvc2UgbW9kZSBmbGFnLiAgKi8KK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworLyogQmluYXJ5IGlucHV0IGZsYWcuICAqLworc3RhdGljIGludCBiaW5hcnlfaW5wdXQ7CisKKy8qIEJpbmFyeSBvdXRwdXQgZmxhZy4gICovCitzdGF0aWMgaW50IGJpbmFyeV9vdXRwdXQ7CisKKy8qIEJhc2U2NCBvdXRwdXQgZmxhZy4gICovCitzdGF0aWMgaW50IGJhc2U2NF9vdXRwdXQ7CisKKy8qIFdlIG5lZWQgdG8ga25vdyB3aGV0aGVyIHdlIGFyZSBpbiBsb29wX21vZGUuICAqLworc3RhdGljIGludCBsb29wX21vZGU7CisKKy8qIElmIHRydWUgc29tZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIHRvIHByaW50IHRoZSBvdXRwdXQgaW4gdGhlIENBVlMKKyAgIHJlc3BvbnNlIGZpbGUgZm9ybWF0LiAgKi8KK3N0YXRpYyBpbnQgc3RhbmRhbG9uZV9tb2RlOworCisKKy8qIEFTTi4xIGNsYXNzZXMuICAqLworZW51bQoreworICBVTklWRVJTQUwgPSAwLAorICBBUFBMSUNBVElPTiA9IDEsCisgIEFTTkNPTlRFWFQgPSAyLAorICBQUklWQVRFID0gMworfTsKKworCisvKiBBU04uMSB0YWdzLiAgKi8KK2VudW0KK3sKKyAgVEFHX05PTkUgPSAwLAorICBUQUdfQk9PTEVBTiA9IDEsCisgIFRBR19JTlRFR0VSID0gMiwKKyAgVEFHX0JJVF9TVFJJTkcgPSAzLAorICBUQUdfT0NURVRfU1RSSU5HID0gNCwKKyAgVEFHX05VTEwgPSA1LAorICBUQUdfT0JKRUNUX0lEID0gNiwKKyAgVEFHX09CSkVDVF9ERVNDUklQVE9SID0gNywKKyAgVEFHX0VYVEVSTkFMID0gOCwKKyAgVEFHX1JFQUwgPSA5LAorICBUQUdfRU5VTUVSQVRFRCA9IDEwLAorICBUQUdfRU1CRURERURfUERWID0gMTEsCisgIFRBR19VVEY4X1NUUklORyA9IDEyLAorICBUQUdfUkVBTFRJVkVfT0lEID0gMTMsCisgIFRBR19TRVFVRU5DRSA9IDE2LAorICBUQUdfU0VUID0gMTcsCisgIFRBR19OVU1FUklDX1NUUklORyA9IDE4LAorICBUQUdfUFJJTlRBQkxFX1NUUklORyA9IDE5LAorICBUQUdfVEVMRVRFWF9TVFJJTkcgPSAyMCwKKyAgVEFHX1ZJREVPVEVYX1NUUklORyA9IDIxLAorICBUQUdfSUE1X1NUUklORyA9IDIyLAorICBUQUdfVVRDX1RJTUUgPSAyMywKKyAgVEFHX0dFTkVSQUxJWkVEX1RJTUUgPSAyNCwKKyAgVEFHX0dSQVBISUNfU1RSSU5HID0gMjUsCisgIFRBR19WSVNJQkxFX1NUUklORyA9IDI2LAorICBUQUdfR0VORVJBTF9TVFJJTkcgPSAyNywKKyAgVEFHX1VOSVZFUlNBTF9TVFJJTkcgPSAyOCwKKyAgVEFHX0NIQVJBQ1RFUl9TVFJJTkcgPSAyOSwKKyAgVEFHX0JNUF9TVFJJTkcgPSAzMAorfTsKKworLyogQVNOLjEgUGFyc2VyIG9iamVjdC4gICovCitzdHJ1Y3QgdGFnX2luZm8KK3sKKyAgaW50IGNsYXNzOyAgICAgICAgICAgICAvKiBPYmplY3QgY2xhc3MuICAqLworICB1bnNpZ25lZCBsb25nIHRhZzsgICAgIC8qIFRoZSB0YWcgb2YgdGhlIG9iamVjdC4gICovCisgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOyAgLyogTGVuZ3RoIG9mIHRoZSB2YWx1ZXMuICAqLworICBpbnQgbmhkcjsgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgaGVhZGVyIChUTCkuICAqLworICB1bnNpZ25lZCBpbnQgbmRlZjoxOyAgIC8qIFRoZSBvYmplY3QgaGFzIGFuIGluZGVmaW5pdGUgbGVuZ3RoLiAgKi8KKyAgdW5zaWduZWQgaW50IGNvbnM6MTsgICAvKiBUaGlzIGlzIGEgY29uc3RydWN0ZWQgb2JqZWN0LiAgKi8KK307CisKKworCisvKiBQcmludCBhIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQgdGhlIHByb2Nlc3Mgd2l0aCBhbiBlcnJvciBjb2RlLiAgKi8KK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIGZwdXRzIChQR00gIjogIiwgc3RkZXJyKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK3Nob3doZXggKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmZmVyOworCisgIGlmIChwcmVmaXgpCisgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogJXM6ICIsIHByZWZpeCk7CisgIHdoaWxlIChsZW5ndGgtLSApCisgICAgZnByaW50ZiAoc3RkZXJyLCAiJTAyWCIsICpwKyspOworICBpZiAocHJlZml4KQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7Cit9CisKKy8qIHN0YXRpYyB2b2lkICovCisvKiBzaG93X3NleHAgKGNvbnN0IGNoYXIgKnByZWZpeCwgZ2NyeV9zZXhwX3QgYSkgKi8KKy8qIHsgKi8KKy8qICAgY2hhciAqYnVmOyAqLworLyogICBzaXplX3Qgc2l6ZTsgKi8KKworLyogICBpZiAocHJlZml4KSAqLworLyogICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7ICovCisvKiAgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOyAqLworLyogICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOyAqLworCisvKiAgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsgKi8KKy8qICAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsgKi8KKy8qICAgZ2NyeV9mcmVlIChidWYpOyAqLworLyogfSAqLworCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgc3RvcmUgdGhhdCBhdCBCVUZGRVIuICBCVUZGRVIgbmVlZHMgdG8gYmUgb2YKKyAgIExFTkdUSCBieXRlcy4gIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhhdCB0aGUgU1RSSU5HIHdpbGwgY29udmVydAorICAgZXhhY3RseSB0byBMRU5HVEggYnl0ZXMuIFRoZSBzdHJpbmcgaXMgZGVsaW1pdGVkIGJ5IGVpdGhlciBlbmQgb2YKKyAgIHN0cmluZyBvciBhIHdoaXRlIHNwYWNlIGNoYXJhY3Rlci4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIC0xIG9uCisgICBlcnJvciBvciB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJzZWQgc3RyaW5nLiAgKi8KK3N0YXRpYyBpbnQKK2hleDJiaW4gKGNvbnN0IGNoYXIgKnN0cmluZywgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBpbnQgaTsKKyAgY29uc3QgY2hhciAqcyA9IHN0cmluZzsKKworICBmb3IgKGk9MDsgaSA8IGxlbmd0aDsgKQorICAgIHsKKyAgICAgIGlmICghaGV4ZGlnaXRwIChzKSB8fCAhaGV4ZGlnaXRwIChzKzEpKQorICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAvKiBJbnZhbGlkIGhleCBkaWdpdHMuICovCisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbaSsrXSA9IHh0b2lfMiAocyk7CisgICAgICBzICs9IDI7CisgICAgfQorICBpZiAoKnMgJiYgKCFteV9pc2FzY2lpICgqcykgfHwgIWlzc3BhY2UgKCpzKSkgKQorICAgIHJldHVybiAtMTsgICAgICAgICAgICAgLyogTm90IGZvbGxvd2VkIGJ5IE51bCBvciB3aGl0ZSBzcGFjZS4gICovCisgIGlmIChpICE9IGxlbmd0aCkKKyAgICByZXR1cm4gLTE7ICAgICAgICAgICAgIC8qIE5vdCBvZiBleHBlY3RlZCBsZW5ndGguICAqLworICBpZiAoKnMpCisgICAgcysrOyAvKiBTa2lwIHRoZSBkZWxpbWl0ZXIuICovCisgIHJldHVybiBzIC0gc3RyaW5nOworfQorCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2hleDJidWZmZXIgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IGdjcnlfeG1hbGxvYyAoc3RybGVuKHN0cmluZykvMisxKTsKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChzPXN0cmluZzsgKnM7IHMgKz0yICkKKyAgICB7CisgICAgICBpZiAoIWhleGRpZ2l0cCAocykgfHwgIWhleGRpZ2l0cCAocysxKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAvKiBJbnZhbGlkIGhleCBkaWdpdHMuICovCisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbbGVuZ3RoKytdID0geHRvaV8yIChzKTsKKyAgICB9CisgICpyX2xlbmd0aCA9IGxlbmd0aDsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitzdGF0aWMgY2hhciAqCityZWFkX3RleHRsaW5lIChGSUxFICpmcCkKK3sKKyAgY2hhciBsaW5lWzI1Nl07CisgIGNoYXIgKnA7CisgIGludCBhbnkgPSAwOworCisgIC8qIFJlYWQgbGluZSBidXQgc2tpcCBvdmVyIGluaXRpYWwgZW1wdHkgbGluZXMuICAqLworICBkbworICAgIHsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWZnZXRzIChsaW5lLCBzaXplb2YgbGluZSwgZnApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZmVvZiAoZnApKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICBkaWUgKCJlcnJvciByZWFkaW5nIGlucHV0IGxpbmU6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBwID0gc3RyY2hyIChsaW5lLCAnXG4nKTsKKyAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICpwID0gMDsKKyAgICAgICAgICBwID0gbGluZSArICgqbGluZT8gKHN0cmxlbiAobGluZSktMSk6MCk7CisgICAgICAgICAgZm9yICggO3AgPiBsaW5lOyBwLS0pCisgICAgICAgICAgICBpZiAobXlfaXNhc2NpaSAoKnApICYmIGlzc3BhY2UgKCpwKSkKKyAgICAgICAgICAgICAgKnAgPSAwOworICAgICAgICB9CisgICAgICB3aGlsZSAoIWFueSAmJiAhKmxpbmUpOworICAgICAgYW55ID0gMTsKKyAgICB9CisgIHdoaWxlICgqbGluZSA9PSAnIycpOyAgLyogQWx3YXlzIHNraXAgY29tbWVudCBsaW5lcy4gICovCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiByZWNlaXZlZCBsaW5lOiAlc1xuIiwgbGluZSk7CisgIHJldHVybiBnY3J5X3hzdHJkdXAgKGxpbmUpOworfQorCitzdGF0aWMgY2hhciAqCityZWFkX2hleGxpbmUgKEZJTEUgKmZwLCBzaXplX3QgKnJldGxlbikKK3sKKyAgY2hhciAqbGluZSwgKnA7CisKKyAgbGluZSA9IHJlYWRfdGV4dGxpbmUgKGZwKTsKKyAgaWYgKCFsaW5lKQorICAgIHJldHVybiBOVUxMOworICBwID0gaGV4MmJ1ZmZlciAobGluZSwgcmV0bGVuKTsKKyAgaWYgKCFwKQorICAgIGRpZSAoImVycm9yIGRlY29kaW5nIGhleCBzdHJpbmcgb24gaW5wdXRcbiIpOworICBnY3J5X2ZyZWUgKGxpbmUpOworICByZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQKK3NraXBfdG9fZW1wdHlfbGluZSAoRklMRSAqZnApCit7CisgIGNoYXIgbGluZVsyNTZdOworICBjaGFyICpwOworCisgIGRvCisgICAgeworICAgICAgaWYgKCFmZ2V0cyAobGluZSwgc2l6ZW9mIGxpbmUsIGZwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChmZW9mIChmcCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgZGllICgiZXJyb3IgcmVhZGluZyBpbnB1dCBsaW5lOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgIHAgPSBzdHJjaHIgKGxpbmUsICdcbicpOworICAgICAgaWYgKHApCisgICAgICAgICpwID0wOworICAgIH0KKyAgd2hpbGUgKCpsaW5lKTsKK30KKworCisKKy8qIFJlYWQgYSBmaWxlIGZyb20gc3RyZWFtIEZQIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIGFuZCByZXR1cm4KKyAgIHRoYXQgYnVmZmVyLiAgVGhlIHZhbGlkIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGlzIHN0b3JlZCBhdCBSX0xFTkdUSC4KKyAgIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLiAgSWYgZGVjb2RlIGlzIHNldCwgdGhlIGZpbGUgaXMgYXNzdW1lZCB0bworICAgYmUgaGV4IGVuY29kZWQgYW5kIHRoZSBkZWNvZGVkIGNvbnRlbnQgaXMgcmV0dXJuZWQuICovCitzdGF0aWMgdm9pZCAqCityZWFkX2ZpbGUgKEZJTEUgKmZwLCBpbnQgZGVjb2RlLCBzaXplX3QgKnJfbGVuZ3RoKQoreworICBjaGFyICpidWZmZXI7CisgIHNpemVfdCBidWZsZW47CisgIHNpemVfdCBucmVhZCwgYnVmc2l6ZSA9IDA7CisKKyAgKnJfbGVuZ3RoID0gMDsKKyNkZWZpbmUgTkNIVU5LIDgxOTIKKyNpZmRlZiBIQVZFX0RPU0lTSF9TWVNURU0KKyAgc2V0bW9kZSAoZmlsZW5vKGZwKSwgT19CSU5BUlkpOworI2VuZGlmCisgIGJ1ZmZlciA9IE5VTEw7CisgIGJ1ZmxlbiA9IDA7CisgIGRvCisgICAgeworICAgICAgYnVmc2l6ZSArPSBOQ0hVTks7CisgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgYnVmZmVyID0gZ2NyeV94bWFsbG9jIChidWZzaXplKTsKKyAgICAgIGVsc2UKKyAgICAgICAgYnVmZmVyID0gZ2NyeV94cmVhbGxvYyAoYnVmZmVyLCBidWZzaXplKTsKKworICAgICAgbnJlYWQgPSBmcmVhZCAoYnVmZmVyICsgYnVmbGVuLCAxLCBOQ0hVTkssIGZwKTsKKyAgICAgIGlmIChucmVhZCA8IE5DSFVOSyAmJiBmZXJyb3IgKGZwKSkKKyAgICAgICAgeworICAgICAgICAgIGdjcnlfZnJlZSAoYnVmZmVyKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgYnVmbGVuICs9IG5yZWFkOworICAgIH0KKyAgd2hpbGUgKG5yZWFkID09IE5DSFVOSyk7CisjdW5kZWYgTkNIVU5LCisgIGlmIChkZWNvZGUpCisgICAgeworICAgICAgY29uc3QgY2hhciAqczsKKyAgICAgIGNoYXIgKnA7CisKKyAgICAgIGZvciAocz1idWZmZXIscD1idWZmZXIsbnJlYWQ9MDsgbnJlYWQrMSA8IGJ1ZmxlbjsgcyArPSAyLCBucmVhZCArPTIgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFoZXhkaWdpdHAgKHMpIHx8ICFoZXhkaWdpdHAgKHMrMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdjcnlfZnJlZSAoYnVmZmVyKTsKKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAvKiBJbnZhbGlkIGhleCBkaWdpdHMuICovCisgICAgICAgICAgICB9CisgICAgICAgICAgKih1bnNpZ25lZCBjaGFyKilwKysgPSB4dG9pXzIgKHMpOworICAgICAgICB9CisgICAgICBpZiAobnJlYWQgIT0gYnVmbGVuKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9mcmVlIChidWZmZXIpOworICAgICAgICAgIHJldHVybiBOVUxMOyAgLyogT2RkIG51bWJlciBvZiBoZXggZGlnaXRzLiAqLworICAgICAgICB9CisgICAgICBidWZsZW4gPSBwIC0gYnVmZmVyOworICAgIH0KKworICAqcl9sZW5ndGggPSBidWZsZW47CisgIHJldHVybiBidWZmZXI7Cit9CisKKy8qIERvIGluLXBsYWNlIGRlY29kaW5nIG9mIGJhc2UtNjQgZGF0YSBvZiBMRU5HVEggaW4gQlVGRkVSLiAgUmV0dXJucworICAgdGhlIG5ldyBsZW5ndGggb2YgdGhlIGJ1ZmZlci4gIERpZXMgb24gZXJyb3IuICAqLworc3RhdGljIHNpemVfdAorYmFzZTY0X2RlY29kZSAoY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBhc2N0b2JpblsxMjhdID0KKyAgICB7CisgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDNlLCAweGZmLCAweGZmLCAweGZmLCAweDNmLAorICAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHhmZiwgMHhmZiwKKyAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsCisgICAgICAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLAorICAgICAgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAgIDB4ZmYsIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsCisgICAgICAweDI1LCAweDI2LCAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLAorICAgICAgMHgzMSwgMHgzMiwgMHgzMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorICAgIH07CisKKyAgaW50IGlkeCA9IDA7CisgIHVuc2lnbmVkIGNoYXIgdmFsID0gMDsKKyAgaW50IGMgPSAwOworICBjaGFyICpkLCAqczsKKyAgaW50IGxmc2VlbiA9IDE7CisKKyAgLyogRmluZCBCRUdJTiBsaW5lLiAgKi8KKyAgZm9yIChzPWJ1ZmZlcjsgbGVuZ3RoOyBsZW5ndGgtLSwgcysrKQorICAgIHsKKyAgICAgIGlmIChsZnNlZW4gJiYgKnMgPT0gJy0nICYmIGxlbmd0aCA+IDExICYmICFtZW1jbXAgKHMsICItLS0tLUJFR0lOICIsIDExKSkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoOyBsZW5ndGggJiYgKnMgIT0gJ1xuJzsgbGVuZ3RoLS0sIHMrKykKKyAgICAgICAgICAgIDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgbGZzZWVuID0gKCpzID09ICdcbicpOworICAgIH0KKworICAvKiBEZWNvZGUgdW50aWwgcGFkIGNoYXJhY3RlciBvciBFTkQgbGluZS4gICovCisgIGZvciAoZD1idWZmZXI7IGxlbmd0aDsgbGVuZ3RoLS0sIHMrKykKKyAgICB7CisgICAgICBpZiAobGZzZWVuICYmICpzID09ICctJyAmJiBsZW5ndGggPiA5ICYmICFtZW1jbXAgKHMsICItLS0tLUVORCAiLCA5KSkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoKGxmc2VlbiA9ICgqcyA9PSAnXG4nKSkgfHwgKnMgPT0gJyAnIHx8ICpzID09ICdccicgfHwgKnMgPT0gJ1x0JykKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAoKnMgPT0gJz0nKQorICAgICAgICB7CisgICAgICAgICAgLyogUGFkIGNoYXJhY3Rlcjogc3RvcCAqLworICAgICAgICAgIGlmIChpZHggPT0gMSkKKyAgICAgICAgICAgICpkKysgPSB2YWw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgaWYgKCAoKnMgJiAweDgwKSB8fCAoYyA9IGFzY3RvYmluWyoodW5zaWduZWQgY2hhciAqKXNdKSA9PSAweGZmKQorICAgICAgICBkaWUgKCJpbnZhbGlkIGJhc2U2NCBjaGFyYWN0ZXIgJTAyWCBhdCBwb3MgJWQgZGV0ZWN0ZWRcbiIsCisgICAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyKilzLCAoaW50KShzLWJ1ZmZlcikpOworCisgICAgICBzd2l0Y2ggKGlkeCkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgdmFsID0gYyA8PCAyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgdmFsIHw9IChjPj40KSYzOworICAgICAgICAgICpkKysgPSB2YWw7CisgICAgICAgICAgdmFsID0gKGM8PDQpJjB4ZjA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICB2YWwgfD0gKGM+PjIpJjE1OworICAgICAgICAgICpkKysgPSB2YWw7CisgICAgICAgICAgdmFsID0gKGM8PDYpJjB4YzA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICB2YWwgfD0gYyYweDNmOworICAgICAgICAgICpkKysgPSB2YWw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlkeCA9IChpZHgrMSkgJSA0OworICAgIH0KKworICByZXR1cm4gZCAtIGJ1ZmZlcjsKK30KKworCisvKiBQYXJzZSB0aGUgYnVmZmVyIGF0IHRoZSBhZGRyZXNzIEJVRkZFUiB3aGljaCBjb25zaXN0cyBvZiB0aGUgbnVtYmVyCisgICBvZiBvY3RldHMgYXMgc3RvcmVkIGF0IEJVRkxFTi4gIFJldHVybiB0aGUgdGFnIGFuZCB0aGUgbGVuZ3RoIHBhcnQKKyAgIGZyb20gdGhlIFRMViB0cmlwbGV0LiAgVXBkYXRlIEJVRkZFUiBhbmQgQlVGTEVOIG9uIHN1Y2Nlc3MuICBDaGVja3MKKyAgIHRoYXQgdGhlIGVuY29kZWQgbGVuZ3RoIGRvZXMgbm90IGV4aGF1c3QgdGhlIGxlbmd0aCBvZiB0aGUgcHJvdmlkZWQKKyAgIGJ1ZmZlci4gKi8KK3N0YXRpYyBpbnQKK3BhcnNlX3RhZyAodW5zaWduZWQgY2hhciBjb25zdCAqKmJ1ZmZlciwgc2l6ZV90ICpidWZsZW4sIHN0cnVjdCB0YWdfaW5mbyAqdGkpCit7CisgIGludCBjOworICB1bnNpZ25lZCBsb25nIHRhZzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmID0gKmJ1ZmZlcjsKKyAgc2l6ZV90IGxlbmd0aCA9ICpidWZsZW47CisKKyAgdGktPmxlbmd0aCA9IDA7CisgIHRpLT5uZGVmID0gMDsKKyAgdGktPm5oZHIgPSAwOworCisgIC8qIEdldCB0aGUgdGFnICovCisgIGlmICghbGVuZ3RoKQorICAgIHJldHVybiAtMTsgLyogUHJlbWF0dXJlIEVPRi4gICovCisgIGMgPSAqYnVmKys7IGxlbmd0aC0tOworICB0aS0+bmhkcisrOworCisgIHRpLT5jbGFzcyA9IChjICYgMHhjMCkgPj4gNjsKKyAgdGktPmNvbnMgID0gISEoYyAmIDB4MjApOworICB0YWcgICAgICAgPSAoYyAmIDB4MWYpOworCisgIGlmICh0YWcgPT0gMHgxZikKKyAgICB7CisgICAgICB0YWcgPSAwOworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIHRhZyA8PD0gNzsKKyAgICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogUHJlbWF0dXJlIEVPRi4gICovCisgICAgICAgICAgYyA9ICpidWYrKzsgbGVuZ3RoLS07CisgICAgICAgICAgdGktPm5oZHIrKzsKKyAgICAgICAgICB0YWcgfD0gKGMgJiAweDdmKTsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCAoYyAmIDB4ODApICk7CisgICAgfQorICB0aS0+dGFnID0gdGFnOworCisgIC8qIEdldCB0aGUgbGVuZ3RoICovCisgIGlmICghbGVuZ3RoKQorICAgIHJldHVybiAtMTsgLyogUHJlbWF0dXJlIEVPRi4gKi8KKyAgYyA9ICpidWYrKzsgbGVuZ3RoLS07CisgIHRpLT5uaGRyKys7CisKKyAgaWYgKCAhKGMgJiAweDgwKSApCisgICAgdGktPmxlbmd0aCA9IGM7CisgIGVsc2UgaWYgKGMgPT0gMHg4MCkKKyAgICB0aS0+bmRlZiA9IDE7CisgIGVsc2UgaWYgKGMgPT0gMHhmZikKKyAgICByZXR1cm4gLTE7IC8qIEZvcmJpZGRlbiBsZW5ndGggdmFsdWUuICAqLworICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBsZW4gPSAwOworICAgICAgaW50IGNvdW50ID0gYyAmIDB4N2Y7CisKKyAgICAgIGZvciAoOyBjb3VudDsgY291bnQtLSkKKyAgICAgICAgeworICAgICAgICAgIGxlbiA8PD0gODsKKyAgICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogUHJlbWF0dXJlIEVPRi4gICovCisgICAgICAgICAgYyA9ICpidWYrKzsgbGVuZ3RoLS07CisgICAgICAgICAgdGktPm5oZHIrKzsKKyAgICAgICAgICBsZW4gfD0gKGMgJiAweGZmKTsKKyAgICAgICAgfQorICAgICAgdGktPmxlbmd0aCA9IGxlbjsKKyAgICB9CisKKyAgaWYgKHRpLT5jbGFzcyA9PSBVTklWRVJTQUwgJiYgIXRpLT50YWcpCisgICAgdGktPmxlbmd0aCA9IDA7CisKKyAgaWYgKHRpLT5sZW5ndGggPiBsZW5ndGgpCisgICAgcmV0dXJuIC0xOyAvKiBEYXRhIGxhcmdlciB0aGFuIGJ1ZmZlci4gICovCisKKyAgKmJ1ZmZlciA9IGJ1ZjsKKyAgKmJ1ZmxlbiA9IGxlbmd0aDsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogUmVhZCB0aGUgZmlsZSBGTkFNRSBhc3N1bWluZyBpdCBpcyBhIFBFTSBlbmNvZGVkIHByaXZhdGUga2V5IGZpbGUKKyAgIGFuZCByZXR1cm4gYW4gUy1leHByZXNzaW9uLiAgV2l0aCBTSE9XIHNldCwgdGhlIGtleSBwYXJhbWV0ZXJzIGFyZQorICAgcHJpbnRlZC4gICovCitzdGF0aWMgZ2NyeV9zZXhwX3QKK3JlYWRfcHJpdmF0ZV9rZXlfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUsIGludCBzaG93KQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICBGSUxFICpmcDsKKyAgY2hhciAqYnVmZmVyOworICBzaXplX3QgYnVmbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkZXI7CisgIHNpemVfdCBkZXJsZW47CisgIHN0cnVjdCB0YWdfaW5mbyB0aTsKKyAgZ2NyeV9tcGlfdCBrZXlwYXJtc1s4XTsKKyAgaW50IG5fa2V5cGFybXMgPSA4OworICBpbnQgaWR4OworICBnY3J5X3NleHBfdCBzX2tleTsKKworICBmcCA9IGZvcGVuIChmbmFtZSwgYmluYXJ5X2lucHV0PyJyYiI6InIiKTsKKyAgaWYgKCFmcCkKKyAgICBkaWUgKCJjYW4ndCBvcGVuIGAlcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGJ1ZmZlciA9IHJlYWRfZmlsZSAoZnAsIDAsICZidWZsZW4pOworICBpZiAoIWJ1ZmZlcikKKyAgICBkaWUgKCJlcnJvciByZWFkaW5nIGAlcydcbiIsIGZuYW1lKTsKKyAgZmNsb3NlIChmcCk7CisKKyAgYnVmbGVuID0gYmFzZTY0X2RlY29kZSAoYnVmZmVyLCBidWZsZW4pOworCisgIC8qIFBhcnNlIHRoZSBBU04uMSBzdHJ1Y3R1cmUuICAqLworICBkZXIgPSAoY29uc3QgdW5zaWduZWQgY2hhciopYnVmZmVyOworICBkZXJsZW4gPSBidWZsZW47CisgIGlmICggcGFyc2VfdGFnICgmZGVyLCAmZGVybGVuLCAmdGkpCisgICAgICAgfHwgdGkudGFnICE9IFRBR19TRVFVRU5DRSB8fCB0aS5jbGFzcyB8fCAhdGkuY29ucyB8fCB0aS5uZGVmKQorICAgIGdvdG8gYmFkX2FzbjE7CisgIGlmICggcGFyc2VfdGFnICgmZGVyLCAmZGVybGVuLCAmdGkpCisgICAgICAgfHwgdGkudGFnICE9IFRBR19JTlRFR0VSIHx8IHRpLmNsYXNzIHx8IHRpLmNvbnMgfHwgdGkubmRlZikKKyAgICBnb3RvIGJhZF9hc24xOworICBpZiAodGkubGVuZ3RoICE9IDEgfHwgKmRlcikKKyAgICBnb3RvIGJhZF9hc24xOyAgLyogVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnRlZ2VyIGlzIG5vIDAuICovCisgIGRlciArPSB0aS5sZW5ndGg7IGRlcmxlbiAtPSB0aS5sZW5ndGg7CisKKyAgZm9yIChpZHg9MDsgaWR4IDwgbl9rZXlwYXJtczsgaWR4KyspCisgICAgeworICAgICAgaWYgKCBwYXJzZV90YWcgKCZkZXIsICZkZXJsZW4sICZ0aSkKKyAgICAgICAgICAgfHwgdGkudGFnICE9IFRBR19JTlRFR0VSIHx8IHRpLmNsYXNzIHx8IHRpLmNvbnMgfHwgdGkubmRlZikKKyAgICAgICAgZ290byBiYWRfYXNuMTsKKyAgICAgIGlmIChzaG93KQorICAgICAgICB7CisgICAgICAgICAgY2hhciBwcmVmaXhbMl07CisKKyAgICAgICAgICBwcmVmaXhbMF0gPSBpZHggPCA4PyAibmVkcHExMnUiW2lkeF0gOiAnPyc7CisgICAgICAgICAgcHJlZml4WzFdID0gMDsKKyAgICAgICAgICBzaG93aGV4IChwcmVmaXgsIGRlciwgdGkubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoa2V5cGFybXMraWR4LCBHQ1JZTVBJX0ZNVF9VU0csIGRlciwgdGkubGVuZ3RoLE5VTEwpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiZXJyb3Igc2Nhbm5pbmcgUlNBIHBhcmFtZXRlciAlZDogJXNcbiIsIGlkeCwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGRlciArPSB0aS5sZW5ndGg7IGRlcmxlbiAtPSB0aS5sZW5ndGg7CisgICAgfQorICBpZiAoaWR4ICE9IG5fa2V5cGFybXMpCisgICAgZGllICgibm90IGVub3VnaCBSU0Ega2V5IHBhcmFtZXRlcnNcbiIpOworCisgIGdjcnlfZnJlZSAoYnVmZmVyKTsKKworICAvKiBDb252ZXJ0IGZyb20gT3BlblNTTCBwYXJhbWV0ZXIgb3JkZXJpbmcgdG8gdGhlIE9wZW5QR1Agb3JkZXIuICovCisgIC8qIEZpcnN0IGNoZWNrIHRoYXQgcCA8IHE7IGlmIG5vdCBzd2FwIHAgYW5kIHEgYW5kIHJlY29tcHV0ZSB1LiAgKi8KKyAgaWYgKGdjcnlfbXBpX2NtcCAoa2V5cGFybXNbM10sIGtleXBhcm1zWzRdKSA+IDApCisgICAgeworICAgICAgZ2NyeV9tcGlfc3dhcCAoa2V5cGFybXNbM10sIGtleXBhcm1zWzRdKTsKKyAgICAgIGdjcnlfbXBpX2ludm0gKGtleXBhcm1zWzddLCBrZXlwYXJtc1szXSwga2V5cGFybXNbNF0pOworICAgIH0KKworICAvKiBCdWlsZCB0aGUgUy1leHByZXNzaW9uLiAgKi8KKyAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc19rZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIihwcml2YXRlLWtleShyc2EobiVtKShlJW0pIgorICAgICAgICAgICAgICAgICAgICAgICAgIC8qKi8gICAgICAgICAgICAiKGQlbSkocCVtKShxJW0pKHUlbSkpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAga2V5cGFybXNbMF0sIGtleXBhcm1zWzFdLCBrZXlwYXJtc1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrZXlwYXJtc1szXSwga2V5cGFybXNbNF0sIGtleXBhcm1zWzddICk7CisgIGlmIChlcnIpCisgICAgZGllICgiZXJyb3IgYnVpbGRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBmb3IgKGlkeD0wOyBpZHggPCBuX2tleXBhcm1zOyBpZHgrKykKKyAgICBnY3J5X21waV9yZWxlYXNlIChrZXlwYXJtc1tpZHhdKTsKKworICByZXR1cm4gc19rZXk7CisKKyBiYWRfYXNuMToKKyAgZGllICgiaW52YWxpZCBBU04uMSBzdHJ1Y3R1cmUgaW4gYCVzJ1xuIiwgZm5hbWUpOworICByZXR1cm4gTlVMTDsgLypOT1RSRUFDSEVEKi8KK30KKworCisvKiBSZWFkIHRoZSBmaWxlIEZOQU1FIGFzc3VtaW5nIGl0IGlzIGEgUEVNIGVuY29kZWQgcHVibGljIGtleSBmaWxlCisgICBhbmQgcmV0dXJuIGFuIFMtZXhwcmVzc2lvbi4gIFdpdGggU0hPVyBzZXQsIHRoZSBrZXkgcGFyYW1ldGVycyBhcmUKKyAgIHByaW50ZWQuICAqLworc3RhdGljIGdjcnlfc2V4cF90CityZWFkX3B1YmxpY19rZXlfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUsIGludCBzaG93KQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICBGSUxFICpmcDsKKyAgY2hhciAqYnVmZmVyOworICBzaXplX3QgYnVmbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkZXI7CisgIHNpemVfdCBkZXJsZW47CisgIHN0cnVjdCB0YWdfaW5mbyB0aTsKKyAgZ2NyeV9tcGlfdCBrZXlwYXJtc1syXTsKKyAgaW50IG5fa2V5cGFybXMgPSAyOworICBpbnQgaWR4OworICBnY3J5X3NleHBfdCBzX2tleTsKKworICBmcCA9IGZvcGVuIChmbmFtZSwgYmluYXJ5X2lucHV0PyJyYiI6InIiKTsKKyAgaWYgKCFmcCkKKyAgICBkaWUgKCJjYW4ndCBvcGVuIGAlcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGJ1ZmZlciA9IHJlYWRfZmlsZSAoZnAsIDAsICZidWZsZW4pOworICBpZiAoIWJ1ZmZlcikKKyAgICBkaWUgKCJlcnJvciByZWFkaW5nIGAlcydcbiIsIGZuYW1lKTsKKyAgZmNsb3NlIChmcCk7CisKKyAgYnVmbGVuID0gYmFzZTY0X2RlY29kZSAoYnVmZmVyLCBidWZsZW4pOworCisgIC8qIFBhcnNlIHRoZSBBU04uMSBzdHJ1Y3R1cmUuICAqLworICBkZXIgPSAoY29uc3QgdW5zaWduZWQgY2hhciopYnVmZmVyOworICBkZXJsZW4gPSBidWZsZW47CisgIGlmICggcGFyc2VfdGFnICgmZGVyLCAmZGVybGVuLCAmdGkpCisgICAgICAgfHwgdGkudGFnICE9IFRBR19TRVFVRU5DRSB8fCB0aS5jbGFzcyB8fCAhdGkuY29ucyB8fCB0aS5uZGVmKQorICAgIGdvdG8gYmFkX2FzbjE7CisgIGlmICggcGFyc2VfdGFnICgmZGVyLCAmZGVybGVuLCAmdGkpCisgICAgICAgfHwgdGkudGFnICE9IFRBR19TRVFVRU5DRSB8fCB0aS5jbGFzcyB8fCAhdGkuY29ucyB8fCB0aS5uZGVmKQorICAgIGdvdG8gYmFkX2FzbjE7CisgIC8qIFdlIHNraXAgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBrZXkgcGFyYW1ldGVycyBhbmQgYXNzdW1lIGl0IGlzIFJTQS4gICovCisgIGRlciArPSB0aS5sZW5ndGg7IGRlcmxlbiAtPSB0aS5sZW5ndGg7CisKKyAgaWYgKCBwYXJzZV90YWcgKCZkZXIsICZkZXJsZW4sICZ0aSkKKyAgICAgICB8fCB0aS50YWcgIT0gVEFHX0JJVF9TVFJJTkcgfHwgdGkuY2xhc3MgfHwgdGkuY29ucyB8fCB0aS5uZGVmKQorICAgIGdvdG8gYmFkX2FzbjE7CisgIGlmICh0aS5sZW5ndGggPCAxIHx8ICpkZXIpCisgICAgZ290byBiYWRfYXNuMTsgIC8qIFRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgbmVlZHMgdG8gYmUgMC4gKi8KKyAgZGVyICs9IDE7IGRlcmxlbiAtPSAxOworCisgIC8qIFBhcnNlIHRoZSBCSVQgc3RyaW5nLiAgKi8KKyAgaWYgKCBwYXJzZV90YWcgKCZkZXIsICZkZXJsZW4sICZ0aSkKKyAgICAgICB8fCB0aS50YWcgIT0gVEFHX1NFUVVFTkNFIHx8IHRpLmNsYXNzIHx8ICF0aS5jb25zIHx8IHRpLm5kZWYpCisgICAgZ290byBiYWRfYXNuMTsKKworICBmb3IgKGlkeD0wOyBpZHggPCBuX2tleXBhcm1zOyBpZHgrKykKKyAgICB7CisgICAgICBpZiAoIHBhcnNlX3RhZyAoJmRlciwgJmRlcmxlbiwgJnRpKQorICAgICAgICAgICB8fCB0aS50YWcgIT0gVEFHX0lOVEVHRVIgfHwgdGkuY2xhc3MgfHwgdGkuY29ucyB8fCB0aS5uZGVmKQorICAgICAgICBnb3RvIGJhZF9hc24xOworICAgICAgaWYgKHNob3cpCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyIHByZWZpeFsyXTsKKworICAgICAgICAgIHByZWZpeFswXSA9IGlkeCA8IDI/ICJuZSJbaWR4XSA6ICc/JzsKKyAgICAgICAgICBwcmVmaXhbMV0gPSAwOworICAgICAgICAgIHNob3doZXggKHByZWZpeCwgZGVyLCB0aS5sZW5ndGgpOworICAgICAgICB9CisgICAgICBlcnIgPSBnY3J5X21waV9zY2FuIChrZXlwYXJtcytpZHgsIEdDUllNUElfRk1UX1VTRywgZGVyLCB0aS5sZW5ndGgsTlVMTCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJlcnJvciBzY2FubmluZyBSU0EgcGFyYW1ldGVyICVkOiAlc1xuIiwgaWR4LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZGVyICs9IHRpLmxlbmd0aDsgZGVybGVuIC09IHRpLmxlbmd0aDsKKyAgICB9CisgIGlmIChpZHggIT0gbl9rZXlwYXJtcykKKyAgICBkaWUgKCJub3QgZW5vdWdoIFJTQSBrZXkgcGFyYW1ldGVyc1xuIik7CisKKyAgZ2NyeV9mcmVlIChidWZmZXIpOworCisgIC8qIEJ1aWxkIHRoZSBTLWV4cHJlc3Npb24uICAqLworICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX2tleSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKHB1YmxpYy1rZXkocnNhKG4lbSkoZSVtKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrZXlwYXJtc1swXSwga2V5cGFybXNbMV0gKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJlcnJvciBidWlsZGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGZvciAoaWR4PTA7IGlkeCA8IG5fa2V5cGFybXM7IGlkeCsrKQorICAgIGdjcnlfbXBpX3JlbGVhc2UgKGtleXBhcm1zW2lkeF0pOworCisgIHJldHVybiBzX2tleTsKKworIGJhZF9hc24xOgorICBkaWUgKCJpbnZhbGlkIEFTTi4xIHN0cnVjdHVyZSBpbiBgJXMnXG4iLCBmbmFtZSk7CisgIHJldHVybiBOVUxMOyAvKk5PVFJFQUNIRUQqLworfQorCisKKworLyogUmVhZCB0aGUgZmlsZSBGTkFNRSBhc3N1bWluZyBpdCBpcyBhIGJpbmFyeSBzaWduYXR1cmUgcmVzdWx0IGFuZAorICAgcmV0dXJuIGFuIGFuIFMtZXhwcmVzc2lvbiBzdWl0YWJsZSBmb3IgZ2NyeV9wa192ZXJpZnkuICAqLworc3RhdGljIGdjcnlfc2V4cF90CityZWFkX3NpZ19maWxlIChjb25zdCBjaGFyICpmbmFtZSkKK3sKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgRklMRSAqZnA7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgc2l6ZV90IGJ1ZmxlbjsKKyAgZ2NyeV9tcGlfdCB0bXBtcGk7CisgIGdjcnlfc2V4cF90IHNfc2lnOworCisgIGZwID0gZm9wZW4gKGZuYW1lLCAicmIiKTsKKyAgaWYgKCFmcCkKKyAgICBkaWUgKCJjYW4ndCBvcGVuIGAlcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGJ1ZmZlciA9IHJlYWRfZmlsZSAoZnAsIDAsICZidWZsZW4pOworICBpZiAoIWJ1ZmZlcikKKyAgICBkaWUgKCJlcnJvciByZWFkaW5nIGAlcydcbiIsIGZuYW1lKTsKKyAgZmNsb3NlIChmcCk7CisKKyAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJnRtcG1waSwgR0NSWU1QSV9GTVRfVVNHLCBidWZmZXIsIGJ1ZmxlbiwgTlVMTCk7CisgIGlmICghZXJyKQorICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNfc2lnLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzaWctdmFsKHJzYShzICVtKSkpIiwgdG1wbXBpKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJlcnJvciBidWlsZGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICBnY3J5X21waV9yZWxlYXNlICh0bXBtcGkpOworICBnY3J5X2ZyZWUgKGJ1ZmZlcik7CisKKyAgcmV0dXJuIHNfc2lnOworfQorCisKKy8qIFJlYWQgYW4gUy1leHByZXNzaW9uIGZyb20gRk5BTUUuICAqLworc3RhdGljIGdjcnlfc2V4cF90CityZWFkX3NleHBfZnJvbV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkKK3sKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgRklMRSAqZnA7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgc2l6ZV90IGJ1ZmxlbjsKKyAgZ2NyeV9zZXhwX3Qgc2V4cDsKKworICBmcCA9IGZvcGVuIChmbmFtZSwgInJiIik7CisgIGlmICghZnApCisgICAgZGllICgiY2FuJ3Qgb3BlbiBgJXMnOiAlc1xuIiwgZm5hbWUsIHN0cmVycm9yIChlcnJubykpOworICBidWZmZXIgPSByZWFkX2ZpbGUgKGZwLCAwLCAmYnVmbGVuKTsKKyAgaWYgKCFidWZmZXIpCisgICAgZGllICgiZXJyb3IgcmVhZGluZyBgJXMnXG4iLCBmbmFtZSk7CisgIGZjbG9zZSAoZnApOworICBpZiAoIWJ1ZmxlbikKKyAgICBkaWUgKCJlcnJvcjogZmlsZSBgJXMnIGlzIGVtcHR5XG4iLCBmbmFtZSk7CisKKyAgZXJyID0gZ2NyeV9zZXhwX2NyZWF0ZSAoJnNleHAsIGJ1ZmZlciwgYnVmbGVuLCAxLCBnY3J5X2ZyZWUpOworICBpZiAoZXJyKQorICAgIGRpZSAoImVycm9yIHBhcnNpbmcgYCVzJzogJXNcbiIsIGZuYW1lLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIHJldHVybiBzZXhwOworfQorCisKK3N0YXRpYyB2b2lkCitwcmludF9idWZmZXIgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgaW50IHdyaXRlcnIgPSAwOworCisgIGlmIChiYXNlNjRfb3V0cHV0KQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJpbnRvYXNjWzY0KzFdID0KKyAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAgICAgICIwMTIzNDU2Nzg5Ky8iOworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaW5idWZbNF07CisgICAgICBjaGFyIG91dGJ1Zls0XTsKKyAgICAgIGludCBpZHgsIHF1YWRzOworCisgICAgICBpZHggPSBxdWFkcyA9IDA7CisgICAgICBmb3IgKHAgPSBidWZmZXI7IGxlbmd0aDsgcCsrLCBsZW5ndGgtLSkKKyAgICAgICAgeworICAgICAgICAgIGluYnVmW2lkeCsrXSA9ICpwOworICAgICAgICAgIGlmIChpZHggPiAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBvdXRidWZbMF0gPSBiaW50b2FzY1soKmluYnVmPj4yKSYwNzddOworICAgICAgICAgICAgICBvdXRidWZbMV0gPSBiaW50b2FzY1soKCgqaW5idWY8PDQpJjA2MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoKGluYnVmWzFdID4+IDQpJjAxNykpJjA3N107CisgICAgICAgICAgICAgIG91dGJ1ZlsyXSA9IGJpbnRvYXNjWygoKGluYnVmWzFdPDwyKSYwNzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KChpbmJ1ZlsyXT4+NikmMDMpKSYwNzddOworICAgICAgICAgICAgICBvdXRidWZbM10gPSBiaW50b2FzY1tpbmJ1ZlsyXSYwNzddOworICAgICAgICAgICAgICBpZiAoZndyaXRlIChvdXRidWYsIDQsIDEsIHN0ZG91dCkgIT0gMSkKKyAgICAgICAgICAgICAgICB3cml0ZXJyID0gMTsKKyAgICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgICAgICAgaWYgKCsrcXVhZHMgPj0gKDY0LzQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChmd3JpdGUgKCJcbiIsIDEsIDEsIHN0ZG91dCkgIT0gMSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyciA9IDE7CisgICAgICAgICAgICAgICAgICBxdWFkcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAoaWR4KQorICAgICAgICB7CisgICAgICAgICAgb3V0YnVmWzBdID0gYmludG9hc2NbKCppbmJ1Zj4+MikmMDc3XTsKKyAgICAgICAgICBpZiAoaWR4ID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG91dGJ1ZlsxXSA9IGJpbnRvYXNjWygoKmluYnVmPDw0KSYwNjApJjA3N107CisgICAgICAgICAgICAgIG91dGJ1ZlsyXSA9IG91dGJ1ZlszXSA9ICc9JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG91dGJ1ZlsxXSA9IGJpbnRvYXNjWygoKCppbmJ1Zjw8NCkmMDYwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCgoaW5idWZbMV0+PjQpJjAxNykpJjA3N107CisgICAgICAgICAgICAgIG91dGJ1ZlsyXSA9IGJpbnRvYXNjWygoaW5idWZbMV08PDIpJjA3NCkmMDc3XTsKKyAgICAgICAgICAgICAgb3V0YnVmWzNdID0gJz0nOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChmd3JpdGUgKG91dGJ1ZiwgNCwgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICAgICAgd3JpdGVyciA9IDE7CisgICAgICAgICAgcXVhZHMrKzsKKyAgICAgICAgfQorICAgICAgaWYgKHF1YWRzICYmIGZ3cml0ZSAoIlxuIiwgMSwgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICB3cml0ZXJyID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKGJpbmFyeV9vdXRwdXQpCisgICAgeworICAgICAgaWYgKGZ3cml0ZSAoYnVmZmVyLCBsZW5ndGgsIDEsIHN0ZG91dCkgIT0gMSkKKyAgICAgICAgd3JpdGVycisrOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWZmZXI7CisKKyAgICAgIGlmICh2ZXJib3NlID4gMSkKKyAgICAgICAgc2hvd2hleCAoInNlbnQgbGluZSIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiAhZmVycm9yIChzdGRvdXQpICkKKyAgICAgICAgcHJpbnRmICgiJTAyWCIsICpwKyspOworICAgICAgaWYgKGZlcnJvciAoc3Rkb3V0KSkKKyAgICAgICAgd3JpdGVycisrOworICAgIH0KKyAgaWYgKCF3cml0ZXJyICYmIGZmbHVzaCAoc3Rkb3V0KSA9PSBFT0YpCisgICAgd3JpdGVycisrOworICBpZiAod3JpdGVycikKKyAgICB7CisjaWZuZGVmIEhBVkVfVzMyX1NZU1RFTQorICAgICAgaWYgKGxvb3BfbW9kZSAmJiBlcnJubyA9PSBFUElQRSkKKyAgICAgICAgbG9vcF9tb2RlID0gMDsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBkaWUgKCJ3cml0aW5nIG91dHB1dCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICB9Cit9CisKKworLyogUHJpbnQgYW4gTVBJIG9uIGEgbGluZS4gICovCitzdGF0aWMgdm9pZAorcHJpbnRfbXBpX2xpbmUgKGdjcnlfbXBpX3QgYSwgaW50IG5vX2x6KQoreworICB1bnNpZ25lZCBjaGFyICpidWYsICpwOworICBnY3J5X2Vycm9yX3QgZXJyOworICBpbnQgd3JpdGVyciA9IDA7CisKKyAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9IRVgsICZidWYsIE5VTEwsIGEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbXBpX2FwcmludCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIHAgPSBidWY7CisgIGlmIChub19seiAmJiBwWzBdID09ICcwJyAmJiBwWzFdID09ICcwJyAmJiBwWzJdKQorICAgIHAgKz0gMjsKKworICBwcmludGYgKCIlc1xuIiwgcCk7CisgIGlmIChmZXJyb3IgKHN0ZG91dCkpCisgICAgd3JpdGVycisrOworICBpZiAoIXdyaXRlcnIgJiYgZmZsdXNoIChzdGRvdXQpID09IEVPRikKKyAgICB3cml0ZXJyKys7CisgIGlmICh3cml0ZXJyKQorICAgIGRpZSAoIndyaXRpbmcgb3V0cHV0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICBnY3J5X2ZyZWUgKGJ1Zik7Cit9CisKKworLyogUHJpbnQgc29tZSBkYXRhIG9uIGhleCBmb3JtYXQgb24gYSBsaW5lLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF9kYXRhX2xpbmUgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gZGF0YTsKKyAgaW50IHdyaXRlcnIgPSAwOworCisgIHdoaWxlIChkYXRhICYmIGRhdGFsZW4tLSAmJiAhZmVycm9yIChzdGRvdXQpICkKKyAgICBwcmludGYgKCIlMDJYIiwgKnArKyk7CisgIHB1dGNoYXIgKCdcbicpOworICBpZiAoZmVycm9yIChzdGRvdXQpKQorICAgIHdyaXRlcnIrKzsKKyAgaWYgKCF3cml0ZXJyICYmIGZmbHVzaCAoc3Rkb3V0KSA9PSBFT0YpCisgICAgd3JpdGVycisrOworICBpZiAod3JpdGVycikKKyAgICBkaWUgKCJ3cml0aW5nIG91dHB1dCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKK30KKworLyogUHJpbnQgdGhlIFMtZXhwcmVzc2lvbiBBIHRvIHRoZSBzdHJlYW0gRlAuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3NleHAgKGdjcnlfc2V4cF90IGEsIEZJTEUgKmZwKQoreworICBjaGFyICpidWY7CisgIHNpemVfdCBzaXplOworCisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOworICBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIGJ1Ziwgc2l6ZSk7CisgIGlmIChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwgZnApICE9IDEpCisgICAgZGllICgiZXJyb3Igd3JpdGluZyB0byBzdHJlYW06ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCisKKworCitzdGF0aWMgZ2NyeV9lcnJvcl90Citpbml0X2V4dGVybmFsX3JuZ190ZXN0ICh2b2lkICoqcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2VlZCwgc2l6ZV90IHNlZWRsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmR0LCBzaXplX3QgZHRsZW4pCit7CisgIHJldHVybiBnY3J5X2NvbnRyb2wgKFBSSVZfQ1RMX0lOSVRfRVhUUk5HX1RFU1QsCisgICAgICAgICAgICAgICAgICAgICAgIHJfY29udGV4dCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzZWVkLCBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBkdCwgZHRsZW4pOworfQorCitzdGF0aWMgZ2NyeV9lcnJvcl90CitydW5fZXh0ZXJuYWxfcm5nX3Rlc3QgKHZvaWQgKmNvbnRleHQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIGdjcnlfY29udHJvbCAoUFJJVl9DVExfUlVOX0VYVFJOR19URVNULCBjb250ZXh0LCBidWZmZXIsIGJ1Zmxlbik7Cit9CisKK3N0YXRpYyB2b2lkCitkZWluaXRfZXh0ZXJuYWxfcm5nX3Rlc3QgKHZvaWQgKmNvbnRleHQpCit7CisgIGdjcnlfY29udHJvbCAoUFJJVl9DVExfREVJTklUX0VYVFJOR19URVNULCBjb250ZXh0KTsKK30KKworCisvKiBHaXZlbiBhbiBPcGVuU1NMIGNpcGhlciBuYW1lIE5BTUUsIHJldHVybiB0aGUgTGliZ2NyeXB0IGFsZ2lyaXRobQorICAgaWRlbnRpZmllZCBhbmQgc3RvcmUgdGhlIGxpYmdjcnlwdCBtb2RlIGF0IFJfTU9ERS4gIFJldHVybnMgMCBvbgorICAgZXJyb3IuICAqLworc3RhdGljIGludAorbWFwX29wZW5zc2xfY2lwaGVyX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqcl9tb2RlKQoreworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCBhbGdvOworICAgIGludCBtb2RlOworICB9IHRhYmxlW10gPQorICAgIHsKKyAgICAgIHsgImJmLWNiYyIsICAgICAgIEdDUllfQ0lQSEVSX0JMT1dGSVNILCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiYmYiLCAgICAgICAgICAgR0NSWV9DSVBIRVJfQkxPV0ZJU0gsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgICB7ICJiZi1jZmIiLCAgICAgICBHQ1JZX0NJUEhFUl9CTE9XRklTSCwgR0NSWV9DSVBIRVJfTU9ERV9DRkIgfSwKKyAgICAgIHsgImJmLWVjYiIsICAgICAgIEdDUllfQ0lQSEVSX0JMT1dGSVNILCBHQ1JZX0NJUEhFUl9NT0RFX0VDQiB9LAorICAgICAgeyAiYmYtb2ZiIiwgICAgICAgR0NSWV9DSVBIRVJfQkxPV0ZJU0gsIEdDUllfQ0lQSEVSX01PREVfT0ZCIH0sCisKKyAgICAgIHsgImNhc3QtY2JjIiwgICAgIEdDUllfQ0lQSEVSX0NBU1Q1LCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiY2FzdCIsICAgICAgICAgR0NSWV9DSVBIRVJfQ0FTVDUsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgICB7ICJjYXN0NS1jYmMiLCAgICBHQ1JZX0NJUEhFUl9DQVNUNSwgR0NSWV9DSVBIRVJfTU9ERV9DQkMgfSwKKyAgICAgIHsgImNhc3Q1LWNmYiIsICAgIEdDUllfQ0lQSEVSX0NBU1Q1LCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiB9LAorICAgICAgeyAiY2FzdDUtZWNiIiwgICAgR0NSWV9DSVBIRVJfQ0FTVDUsIEdDUllfQ0lQSEVSX01PREVfRUNCIH0sCisgICAgICB7ICJjYXN0NS1vZmIiLCAgICBHQ1JZX0NJUEhFUl9DQVNUNSwgR0NSWV9DSVBIRVJfTU9ERV9PRkIgfSwKKworICAgICAgeyAiZGVzLWNiYyIsICAgICAgR0NSWV9DSVBIRVJfREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiZGVzIiwgICAgICAgICAgR0NSWV9DSVBIRVJfREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiZGVzLWNmYiIsICAgICAgR0NSWV9DSVBIRVJfREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiB9LAorICAgICAgeyAiZGVzLW9mYiIsICAgICAgR0NSWV9DSVBIRVJfREVTLCBHQ1JZX0NJUEhFUl9NT0RFX09GQiB9LAorICAgICAgeyAiZGVzLWVjYiIsICAgICAgR0NSWV9DSVBIRVJfREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0VDQiB9LAorCisgICAgICB7ICJkZXMtZWRlMy1jYmMiLCBHQ1JZX0NJUEhFUl8zREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiZGVzLWVkZTMiLCAgICAgR0NSWV9DSVBIRVJfM0RFUywgR0NSWV9DSVBIRVJfTU9ERV9FQ0IgfSwKKyAgICAgIHsgImRlczMiLCAgICAgICAgIEdDUllfQ0lQSEVSXzNERVMsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgICB7ICJkZXMtZWRlMy1jZmIiLCBHQ1JZX0NJUEhFUl8zREVTLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiB9LAorICAgICAgeyAiZGVzLWVkZTMtb2ZiIiwgR0NSWV9DSVBIRVJfM0RFUywgR0NSWV9DSVBIRVJfTU9ERV9PRkIgfSwKKworICAgICAgeyAicmM0IiwgICAgICAgICAgR0NSWV9DSVBIRVJfQVJDRk9VUiwgR0NSWV9DSVBIRVJfTU9ERV9TVFJFQU0gfSwKKworICAgICAgeyAiYWVzLTEyOC1jYmMiLCAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiYWVzLTEyOCIsICAgICAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NCQyB9LAorICAgICAgeyAiYWVzLTEyOC1jZmIiLCAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NGQiB9LAorICAgICAgeyAiYWVzLTEyOC1lY2IiLCAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0VDQiB9LAorICAgICAgeyAiYWVzLTEyOC1vZmIiLCAgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX09GQiB9LAorCisgICAgICB7ICJhZXMtMTkyLWNiYyIsICBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgICB7ICJhZXMtMTkyIiwgICAgICBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfQ0JDIH0sCisgICAgICB7ICJhZXMtMTkyLWNmYiIsICBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfQ0ZCIH0sCisgICAgICB7ICJhZXMtMTkyLWVjYiIsICBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfRUNCIH0sCisgICAgICB7ICJhZXMtMTkyLW9mYiIsICBHQ1JZX0NJUEhFUl9BRVMxOTIsIEdDUllfQ0lQSEVSX01PREVfT0ZCIH0sCisKKyAgICAgIHsgImFlcy0yNTYtY2JjIiwgIEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9DQkMgfSwKKyAgICAgIHsgImFlcy0yNTYiLCAgICAgIEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9DQkMgfSwKKyAgICAgIHsgImFlcy0yNTYtY2ZiIiwgIEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9DRkIgfSwKKyAgICAgIHsgImFlcy0yNTYtZWNiIiwgIEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9FQ0IgfSwKKyAgICAgIHsgImFlcy0yNTYtb2ZiIiwgIEdDUllfQ0lQSEVSX0FFUzI1NiwgR0NSWV9DSVBIRVJfTU9ERV9PRkIgfSwKKworICAgICAgeyBOVUxMLCAwICwgMCB9CisgICAgfTsKKyAgaW50IGlkeDsKKworICBmb3IgKGlkeD0wOyB0YWJsZVtpZHhdLm5hbWU7IGlkeCsrKQorICAgIGlmICghc3RyY21wIChuYW1lLCB0YWJsZVtpZHhdLm5hbWUpKQorICAgICAgeworICAgICAgICAqcl9tb2RlID0gdGFibGVbaWR4XS5tb2RlOworICAgICAgICByZXR1cm4gdGFibGVbaWR4XS5hbGdvOworICAgICAgfQorICAqcl9tb2RlID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKKworDAorLyogUnVuIGFuIGVuY3J5cHQgb3IgZGVjcnlwdGlvbiBvcGVyYXRpb25zLiAgSWYgREFUQSBpcyBOVUxMIHRoZQorICAgZnVuY3Rpb24gcmVhZHMgaXRzIGlucHV0IGluIGNodW5rcyBvZiBzaXplIERBVEFMRU4gZnJvbSBmcCBhbmQKKyAgIHByb2Nlc3NlcyBpdCBhbmQgd3JpdGVzIGl0IG91dCB1bnRpbCBFT0YuICAqLworc3RhdGljIHZvaWQKK3J1bl9lbmNyeXB0X2RlY3J5cHQgKGludCBlbmNyeXB0X21vZGUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgY2lwaGVyX2FsZ28sIGludCBjaXBoZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKml2X2J1ZmZlciwgc2l6ZV90IGl2X2J1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleV9idWZmZXIsIHNpemVfdCBrZXlfYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sIEZJTEUgKmZwKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQ7CisgIHZvaWQgKm91dGJ1ZjsKKyAgc2l6ZV90IG91dGJ1ZmxlbjsKKyAgdm9pZCAqaW5idWY7CisgIHNpemVfdCBpbmJ1ZmxlbjsKKyAgc2l6ZV90IGJsb2NrbGVuOworCisgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZCwgY2lwaGVyX2FsZ28sIGNpcGhlcl9tb2RlLCAwKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZCBmb3IgYWxnbyAlZCwgbW9kZSAlZDogJXNcbiIsCisgICAgICAgICBjaXBoZXJfYWxnbywgY2lwaGVyX21vZGUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgYmxvY2tsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGNpcGhlcl9hbGdvKTsKKyAgYXNzZXJ0IChibG9ja2xlbik7CisKKyAgZ2NyeV9jaXBoZXJfY3RsIChoZCwgUFJJVl9DVExfRElTQUJMRV9XRUFLX0tFWSwgTlVMTCwgMCk7CisKKyAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0a2V5IChoZCwga2V5X2J1ZmZlciwga2V5X2J1Zmxlbik7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZCB3aXRoIGtleWxlbiAldTogJXNcbiIsCisgICAgICAgICAodW5zaWduZWQgaW50KWtleV9idWZsZW4sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgaWYgKGl2X2J1ZmZlcikKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9zZXRpdiAoaGQsIGl2X2J1ZmZlciwgaXZfYnVmbGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoImdjcnlfY2lwaGVyX3NldGl2IGZhaWxlZCB3aXRoIGl2bGVuICV1OiAlc1xuIiwKKyAgICAgICAgICAgICAodW5zaWduZWQgaW50KWl2X2J1ZmxlbiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICB9CisKKyAgaW5idWYgPSBkYXRhPyBOVUxMIDogZ2NyeV94bWFsbG9jIChkYXRhbGVuKTsKKyAgb3V0YnVmbGVuID0gZGF0YWxlbjsKKyAgb3V0YnVmID0gZ2NyeV94bWFsbG9jIChvdXRidWZsZW4gPCBibG9ja2xlbj8gYmxvY2tsZW46b3V0YnVmbGVuKTsKKworICBkbworICAgIHsKKyAgICAgIGlmIChpbmJ1ZikKKyAgICAgICAgeworICAgICAgICAgIGludCBucmVhZCA9IGZyZWFkIChpbmJ1ZiwgMSwgZGF0YWxlbiwgZnApOworICAgICAgICAgIGlmIChucmVhZCA8IChpbnQpZGF0YWxlbiAmJiBmZXJyb3IgKGZwKSkKKyAgICAgICAgICAgIGRpZSAoImVycm9yIHJlYWRpbmcgaW5wdXRcbiIpOworICAgICAgICAgIGRhdGEgPSBpbmJ1ZjsKKyAgICAgICAgICBpbmJ1ZmxlbiA9IG5yZWFkOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGluYnVmbGVuID0gZGF0YWxlbjsKKworICAgICAgaWYgKGVuY3J5cHRfbW9kZSkKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCAoaGQsIG91dGJ1Ziwgb3V0YnVmbGVuLCBkYXRhLCBpbmJ1Zmxlbik7CisgICAgICBlbHNlCisgICAgICAgIGVyciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQgKGhkLCBvdXRidWYsIG91dGJ1ZmxlbiwgZGF0YSwgaW5idWZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiZ2NyeV9jaXBoZXJfJXNjcnlwdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgIGVuY3J5cHRfbW9kZT8gImVuIjoiZGUiLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgICAgICBwcmludF9idWZmZXIgKG91dGJ1Ziwgb3V0YnVmbGVuKTsKKyAgICB9CisgIHdoaWxlIChpbmJ1Zik7CisKKyAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKKyAgZ2NyeV9mcmVlIChvdXRidWYpOworICBnY3J5X2ZyZWUgKGluYnVmKTsKK30KKworCitzdGF0aWMgdm9pZAorZ2V0X2N1cnJlbnRfaXYgKGdjcnlfY2lwaGVyX2hkX3QgaGQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgdW5zaWduZWQgY2hhciB0bXBbMTddOworCisgIGlmIChnY3J5X2NpcGhlcl9jdGwgKGhkLCBQUklWX0NUTF9HRVRfSU5QVVRfVkVDVE9SLCB0bXAsIHNpemVvZiB0bXApKQorICAgIGRpZSAoImVycm9yIGdldHRpbmcgY3VycmVudCBpbnB1dCB2ZWN0b3JcbiIpOworICBpZiAoYnVmbGVuID4gKnRtcCkKKyAgICBkaWUgKCJidWZmZXIgdG9vIHNob3J0IHRvIHN0b3JlIHRoZSBjdXJyZW50IGlucHV0IHZlY3RvclxuIik7CisgIG1lbWNweSAoYnVmZmVyLCB0bXArMSwgKnRtcCk7Cit9CisKKy8qIFJ1biB0aGUgaW5uZXIgbG9vcCBvZiB0aGUgQ0FWUyBtb250ZSBjYXJsbyB0ZXN0LiAgKi8KK3N0YXRpYyB2b2lkCitydW5fY2lwaGVyX21jdF9sb29wIChpbnQgZW5jcnlwdF9tb2RlLCBpbnQgY2lwaGVyX2FsZ28sIGludCBjaXBoZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKml2X2J1ZmZlciwgc2l6ZV90IGl2X2J1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleV9idWZmZXIsIHNpemVfdCBrZXlfYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sIGludCBpdGVyYXRpb25zKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfY2lwaGVyX2hkX3QgaGQ7CisgIHNpemVfdCBibG9ja2xlbjsKKyAgaW50IGNvdW50OworICBjaGFyIGlucHV0WzE2XTsKKyAgY2hhciBvdXRwdXRbMTZdOworICBjaGFyIGxhc3Rfb3V0cHV0WzE2XTsKKyAgY2hhciBsYXN0X2xhc3Rfb3V0cHV0WzE2XTsKKyAgY2hhciBsYXN0X2l2WzE2XTsKKworCisgIGVyciA9IGdjcnlfY2lwaGVyX29wZW4gKCZoZCwgY2lwaGVyX2FsZ28sIGNpcGhlcl9tb2RlLCAwKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X2NpcGhlcl9vcGVuIGZhaWxlZCBmb3IgYWxnbyAlZCwgbW9kZSAlZDogJXNcbiIsCisgICAgICAgICBjaXBoZXJfYWxnbywgY2lwaGVyX21vZGUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgYmxvY2tsZW4gPSBnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4gKGNpcGhlcl9hbGdvKTsKKyAgaWYgKCFibG9ja2xlbiB8fCBibG9ja2xlbiA+IHNpemVvZiBvdXRwdXQpCisgICAgZGllICgiaW52YWxpZCBibG9jayBsZW5ndGggJWRcbiIsIGJsb2NrbGVuKTsKKworCisgIGdjcnlfY2lwaGVyX2N0bCAoaGQsIFBSSVZfQ1RMX0RJU0FCTEVfV0VBS19LRVksIE5VTEwsIDApOworCisgIGVyciA9IGdjcnlfY2lwaGVyX3NldGtleSAoaGQsIGtleV9idWZmZXIsIGtleV9idWZsZW4pOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQgd2l0aCBrZXlsZW4gJXU6ICVzXG4iLAorICAgICAgICAgKHVuc2lnbmVkIGludClrZXlfYnVmbGVuLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmIChpdl9idWZmZXIpCisgICAgeworICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfc2V0aXYgKGhkLCBpdl9idWZmZXIsIGl2X2J1Zmxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJnY3J5X2NpcGhlcl9zZXRpdiBmYWlsZWQgd2l0aCBpdmxlbiAldTogJXNcbiIsCisgICAgICAgICAgICAgKHVuc2lnbmVkIGludClpdl9idWZsZW4sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgfQorCisgIGlmIChkYXRhbGVuICE9IGJsb2NrbGVuKQorICAgIGRpZSAoImxlbmd0aCBvZiBpbnB1dCAoJXUpIGRvZXMgbm90IG1hdGNoIGJsb2NrIGxlbmd0aCAoJXUpXG4iLAorICAgICAgICAgKHVuc2lnbmVkIGludClkYXRhbGVuLCAodW5zaWduZWQgaW50KWJsb2NrbGVuKTsKKyAgbWVtY3B5IChpbnB1dCwgZGF0YSwgZGF0YWxlbik7CisgIG1lbXNldCAob3V0cHV0LCAwLCBzaXplb2Ygb3V0cHV0KTsKKyAgZm9yIChjb3VudD0wOyBjb3VudCA8IGl0ZXJhdGlvbnM7IGNvdW50KyspCisgICAgeworICAgICAgbWVtY3B5IChsYXN0X2xhc3Rfb3V0cHV0LCBsYXN0X291dHB1dCwgc2l6ZW9mIGxhc3Rfb3V0cHV0KTsKKyAgICAgIG1lbWNweSAobGFzdF9vdXRwdXQsIG91dHB1dCwgc2l6ZW9mIG91dHB1dCk7CisKKyAgICAgIGdldF9jdXJyZW50X2l2IChoZCwgbGFzdF9pdiwgYmxvY2tsZW4pOworCisgICAgICBpZiAoZW5jcnlwdF9tb2RlKQorICAgICAgICBlcnIgPSBnY3J5X2NpcGhlcl9lbmNyeXB0IChoZCwgb3V0cHV0LCBibG9ja2xlbiwgaW5wdXQsIGJsb2NrbGVuKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCAoaGQsIG91dHB1dCwgYmxvY2tsZW4sIGlucHV0LCBibG9ja2xlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJnY3J5X2NpcGhlcl8lc2NyeXB0IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgZW5jcnlwdF9tb2RlPyAiZW4iOiJkZSIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKworICAgICAgaWYgKGVuY3J5cHRfbW9kZSAmJiAoY2lwaGVyX21vZGUgPT0gR0NSWV9DSVBIRVJfTU9ERV9DRkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNpcGhlcl9tb2RlID09IEdDUllfQ0lQSEVSX01PREVfQ0JDKSkKKyAgICAgICAgbWVtY3B5IChpbnB1dCwgbGFzdF9pdiwgYmxvY2tsZW4pOworICAgICAgZWxzZSBpZiAoY2lwaGVyX21vZGUgPT0gR0NSWV9DSVBIRVJfTU9ERV9PRkIpCisgICAgICAgIG1lbWNweSAoaW5wdXQsIGxhc3RfaXYsIGJsb2NrbGVuKTsKKyAgICAgIGVsc2UgaWYgKCFlbmNyeXB0X21vZGUgJiYgY2lwaGVyX21vZGUgPT0gR0NSWV9DSVBIRVJfTU9ERV9DRkIpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSZWNvbnN0cnVjdCB0aGUgb3V0cHV0IHZlY3Rvci4gICovCisgICAgICAgICAgaW50IGk7CisgICAgICAgICAgZm9yIChpPTA7IGkgPCBibG9ja2xlbjsgaSsrKQorICAgICAgICAgICAgaW5wdXRbaV0gXj0gb3V0cHV0W2ldOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG1lbWNweSAoaW5wdXQsIG91dHB1dCwgYmxvY2tsZW4pOworICAgIH0KKworICBwcmludF9idWZmZXIgKG91dHB1dCwgYmxvY2tsZW4pOworICBwdXRjaGFyICgnXG4nKTsKKyAgcHJpbnRfYnVmZmVyIChsYXN0X291dHB1dCwgYmxvY2tsZW4pOworICBwdXRjaGFyICgnXG4nKTsKKyAgcHJpbnRfYnVmZmVyIChsYXN0X2xhc3Rfb3V0cHV0LCBibG9ja2xlbik7CisgIHB1dGNoYXIgKCdcbicpOworICBnZXRfY3VycmVudF9pdiAoaGQsIGxhc3RfaXYsIGJsb2NrbGVuKTsKKyAgcHJpbnRfYnVmZmVyIChsYXN0X2l2LCBibG9ja2xlbik7IC8qIExhc3Qgb3V0cHV0IHZlY3Rvci4gICovCisgIHB1dGNoYXIgKCdcbicpOworICBwcmludF9idWZmZXIgKGlucHV0LCBibG9ja2xlbik7ICAgLyogTmV4dCBpbnB1dCB0ZXh0LiAqLworICBwdXRjaGFyICgnXG4nKTsKKyAgaWYgKHZlcmJvc2UgPiAxKQorICAgIHNob3doZXggKCJzZW50IGxpbmUiLCAiIiwgMCk7CisgIHB1dGNoYXIgKCdcbicpOworICBmZmx1c2ggKHN0ZG91dCk7CisKKyAgZ2NyeV9jaXBoZXJfY2xvc2UgKGhkKTsKK30KKworCisMCisvKiBSdW4gYSBkaWdlc3Qgb3BlcmF0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCitydW5fZGlnZXN0IChpbnQgZGlnZXN0X2FsZ28sICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X21kX2hkX3QgaGQ7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKyAgdW5zaWduZWQgaW50IGRpZ2VzdGxlbjsKKworICBlcnIgPSBnY3J5X21kX29wZW4gKCZoZCwgZGlnZXN0X2FsZ28sIDApOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbWRfb3BlbiBmYWlsZWQgZm9yIGFsZ28gJWQ6ICVzXG4iLAorICAgICAgICAgZGlnZXN0X2FsZ28sICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGdjcnlfbWRfd3JpdGUgKGhkLCBkYXRhLCBkYXRhbGVuKTsKKyAgZGlnZXN0ID0gZ2NyeV9tZF9yZWFkIChoZCwgZGlnZXN0X2FsZ28pOworICBkaWdlc3RsZW4gPSBnY3J5X21kX2dldF9hbGdvX2RsZW4gKGRpZ2VzdF9hbGdvKTsKKyAgcHJpbnRfYnVmZmVyIChkaWdlc3QsIGRpZ2VzdGxlbik7CisgIGdjcnlfbWRfY2xvc2UgKGhkKTsKK30KKworDAorLyogUnVuIGEgSE1BQyBvcGVyYXRpb24uICAqLworc3RhdGljIHZvaWQKK3J1bl9obWFjIChpbnQgZGlnZXN0X2FsZ28sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X21kX2hkX3QgaGQ7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKyAgdW5zaWduZWQgaW50IGRpZ2VzdGxlbjsKKworICBlcnIgPSBnY3J5X21kX29wZW4gKCZoZCwgZGlnZXN0X2FsZ28sIEdDUllfTURfRkxBR19ITUFDKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X21kX29wZW4gZmFpbGVkIGZvciBITUFDIGFsZ28gJWQ6ICVzXG4iLAorICAgICAgICAgZGlnZXN0X2FsZ28sICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGdjcnlfbWRfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbWRfc2V0a2V5IGZhaWxlZCBmb3IgSE1BQyBhbGdvICVkOiAlc1xuIiwKKyAgICAgICAgIGRpZ2VzdF9hbGdvLCAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X21kX3dyaXRlIChoZCwgZGF0YSwgZGF0YWxlbik7CisgIGRpZ2VzdCA9IGdjcnlfbWRfcmVhZCAoaGQsIGRpZ2VzdF9hbGdvKTsKKyAgZGlnZXN0bGVuID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChkaWdlc3RfYWxnbyk7CisgIHByaW50X2J1ZmZlciAoZGlnZXN0LCBkaWdlc3RsZW4pOworICBnY3J5X21kX2Nsb3NlIChoZCk7Cit9CisKKworDAorLyogRGVyaXZlIGFuIFJTQSBrZXkgdXNpbmcgdGhlIFMtZXhwcmVzc2lvbiBpbiAoREFUQSxEQVRBTEVOKS4gIFRoaXMKKyAgIFMtZXhwcmVzc2lvbiBpcyB1c2VkIGRpcmVjdGx5IGFzIGlucHV0IHRvIGdjcnlfcGtfZ2Vua2V5LiAgVGhlCisgICByZXN1bHQgaXMgcHJpbnRlZCB0byBzdGRvdXQgd2l0aCBvbmUgcGFyYW1ldGVyIHBlciBsaW5lIGluIGhleAorICAgZm9ybWF0IGFuZCBpbiB0aGlzIG9yZGVyOiBwLCBxLCBuLCBkLiAgKi8KK3N0YXRpYyB2b2lkCitydW5fcnNhX2Rlcml2ZSAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qgc19rZXlzcGVjLCBzX2tleSwgc190b3AsIGwxOworICBnY3J5X21waV90IG1waTsKKyAgY29uc3QgY2hhciAqcGFybWxpc3Q7CisgIGludCBpZHg7CisKKyAgaWYgKCFkYXRhbGVuKQorICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT19EQVRBKTsKKyAgZWxzZQorICAgIGVyciA9IGdjcnlfc2V4cF9uZXcgKCZzX2tleXNwZWMsIGRhdGEsIGRhdGFsZW4sIDEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfc2V4cF9uZXcgZmFpbGVkIGZvciBSU0Ega2V5IGRlcml2ZTogJXNcbiIsCisgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGVyciA9IGdjcnlfcGtfZ2Vua2V5ICgmc19rZXksIHNfa2V5c3BlYyk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9wa19nZW5rZXkgZmFpbGVkIGZvciBSU0E6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX2tleXNwZWMpOworCisgIC8qIFAgYW5kIFEgbWlnaHQgaGF2ZSBiZWVuIHN3YXBwZWQgYnV0IHdlIG5lZWQgdG8gdG8gcmV0dXJuIHRoZW0gaW4KKyAgICAgdGhlIHByb3BlciBvcmRlci4gIEJ1aWxkIHRoZSBwYXJhbWV0ZXIgbGlzdCBhY2NvcmRpbmdseS4gICovCisgIHBhcm1saXN0ID0gInBxbmQiOworICBzX3RvcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX2tleSwgIm1pc2Mta2V5LWluZm8iLCAwKTsKKyAgaWYgKHNfdG9wKQorICAgIHsKKyAgICAgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNfdG9wLCAicC1xLXN3YXBwZWQiLCAwKTsKKyAgICAgIGlmIChsMSkKKyAgICAgICAgcGFybWxpc3QgPSAicXBuZCI7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfdG9wKTsKKyAgICB9CisKKyAgLyogUGFyc2UgYW5kIHByaW50IHRoZSBwYXJhbWV0ZXJzLiAgKi8KKyAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc19rZXksICJwcml2YXRlLWtleSIsIDApOworICBzX3RvcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChsMSwgInJzYSIsIDApOworICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICBpZiAoIXNfdG9wKQorICAgIGRpZSAoInByaXZhdGUta2V5IHBhcnQgbm90IGZvdW5kIGluIHJlc3VsdFxuIik7CisKKyAgZm9yIChpZHg9MDsgcGFybWxpc3RbaWR4XTsgaWR4KyspCisgICAgeworICAgICAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc190b3AsIHBhcm1saXN0K2lkeCwgMSk7CisgICAgICBtcGkgPSBnY3J5X3NleHBfbnRoX21waSAobDEsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICAgICAgaWYgKCFtcGkpCisgICAgICAgIGRpZSAoInBhcmFtZXRlciAlYyBtaXNzaW5nIGluIHByaXZhdGUta2V5XG4iLCBwYXJtbGlzdFtpZHhdKTsKKyAgICAgIHByaW50X21waV9saW5lIChtcGksIDEpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAobXBpKTsKKyAgICB9CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfdG9wKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfa2V5KTsKK30KKworCisMCitzdGF0aWMgc2l6ZV90Citjb21wdXRlX3RhZ19sZW5ndGggKHNpemVfdCBuKQoreworICBpbnQgbmVlZGVkID0gMDsKKworICBpZiAobiA8IDEyOCkKKyAgICBuZWVkZWQgKz0gMjsgLyogVGFnIGFuZCBvbmUgbGVuZ3RoIGJ5dGUuICAqLworICBlbHNlIGlmIChuIDwgMjU2KQorICAgIG5lZWRlZCArPSAzOyAvKiBUYWcsIG51bWJlciBvZiBsZW5ndGggYnl0ZXMsIDEgbGVuZ3RoIGJ5dGUuICAqLworICBlbHNlIGlmIChuIDwgNjU1MzYpCisgICAgbmVlZGVkICs9IDQ7IC8qIFRhZywgbnVtYmVyIG9mIGxlbmd0aCBieXRlcywgMiBsZW5ndGggYnl0ZXMuICAqLworICBlbHNlCisgICAgZGllICgiREVSIG9iamVjdCB0b28gbG9uZyB0byBlbmNvZGVcbiIpOworCisgIHJldHVybiBuZWVkZWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICoKK3N0b3JlX3RhZ19sZW5ndGggKHVuc2lnbmVkIGNoYXIgKnAsIGludCB0YWcsIHNpemVfdCBuKQoreworICBpZiAodGFnID09IFRBR19TRVFVRU5DRSkKKyAgICB0YWcgfD0gMHgyMDsgLyogY29uc3RydWN0ZWQgKi8KKworICAqcCsrID0gdGFnOworICBpZiAobiA8IDEyOCkKKyAgICAqcCsrID0gbjsKKyAgZWxzZSBpZiAobiA8IDI1NikKKyAgICB7CisgICAgICAqcCsrID0gMHg4MTsKKyAgICAgICpwKysgPSBuOworICAgIH0KKyAgZWxzZSBpZiAobiA8IDY1NTM2KQorICAgIHsKKyAgICAgICpwKysgPSAweDgyOworICAgICAgKnArKyA9IG4gPj4gODsKKyAgICAgICpwKysgPSBuOworICAgIH0KKworICByZXR1cm4gcDsKK30KKworCisvKiBHZW5lcmF0ZSBhbiBSU0Ega2V5IG9mIHNpemUgS0VZU0laRSB1c2luZyB0aGUgcHVibGljIGV4cG9uZW50CisgICBQVUJFWFAgYW5kIHByaW50IGl0IHRvIHN0ZG91dCBpbiB0aGUgT3BlblNTTCBmb3JtYXQuICBUaGUgZm9ybWF0CisgICBpczoKKworICAgICAgIFNFUVVFTkNFIHsKKyAgICAgICAgIElOVEVHRVIgKDApICAtLSBVbmtub3duIGNvbnN0YW50LgorICAgICAgICAgSU5URUdFUiAgICAgIC0tIG4KKyAgICAgICAgIElOVEVHRVIgICAgICAtLSBlCisgICAgICAgICBJTlRFR0VSICAgICAgLS0gZAorICAgICAgICAgSU5URUdFUiAgICAgIC0tIHAKKyAgICAgICAgIElOVEVHRVIgICAgICAtLSBxICAgICAgKHdpdGggcCA8IHEpCisgICAgICAgICBJTlRFR0VSICAgICAgLS0gZG1wMSA9IGQgbW9kIChwLTEpCisgICAgICAgICBJTlRFR0VSICAgICAgLS0gZG1xMSA9IGQgbW9kIChxLTEpCisgICAgICAgICBJTlRFR0VSICAgICAgLS0gdSAgICA9IHBeey0xfSBtb2QgcQorICAgICAgIH0KKworKi8KK3N0YXRpYyB2b2lkCitydW5fcnNhX2dlbiAoaW50IGtleXNpemUsIGludCBwdWJleHApCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qga2V5c3BlYywga2V5LCBsMTsKKyAgY29uc3QgY2hhciBrZXllbGVtc1tdID0gIm5lZHBxLi51IjsKKyAgZ2NyeV9tcGlfdCBrZXlwYXJtc1s4XTsKKyAgc2l6ZV90ICAgICBrZXlwYXJtc2xlbls4XTsKKyAgaW50IGlkeDsKKyAgc2l6ZV90IGRlcmxlbiwgbmVlZGVkLCBuOworICB1bnNpZ25lZCBjaGFyICpkZXJidWYsICpkZXI7CisKKyAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgma2V5c3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleSAocnNhIChuYml0cyAlZCkocnNhLXVzZS1lICVkKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzaXplLCBwdWJleHApOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfc2V4cF9idWlsZCBmYWlsZWQgZm9yIFJTQSBrZXkgZ2VuZXJhdGlvbjogJXNcbiIsCisgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGVyciA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlzcGVjKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X3BrX2dlbmtleSBmYWlsZWQgZm9yIFJTQTogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXNwZWMpOworCisgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleSwgInByaXZhdGUta2V5IiwgMCk7CisgIGlmICghbDEpCisgICAgZGllICgicHJpdmF0ZSBrZXkgbm90IGZvdW5kIGluIGdlbmtleSByZXN1bHRcbiIpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAga2V5ID0gbDE7CisKKyAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicnNhIiwgMCk7CisgIGlmICghbDEpCisgICAgZGllICgicmV0dXJuZWQgcHJpdmF0ZSBrZXkgbm90IGZvcm1lZCBhcyBleHBlY3RlZFxuIik7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBrZXkgPSBsMTsKKworICAvKiBFeHRyYWN0IHRoZSBwYXJhbWV0ZXJzIGZyb20gdGhlIFMtZXhwcmVzc2lvbiBhbmQgc3RvcmUgdGhlbSBpbiBhCisgICAgIHdlbGwgZGVmaW5lZCBvcmRlciBpbiBLRVlQQVJNUy4gICovCisgIGZvciAoaWR4PTA7IGlkeCA8IERJTShrZXlwYXJtcyk7IGlkeCsrKQorICAgIHsKKyAgICAgIGlmIChrZXllbGVtc1tpZHhdID09ICcuJykKKyAgICAgICAgeworICAgICAgICAgIGtleXBhcm1zW2lkeF0gPSBnY3J5X21waV9uZXcgKDApOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBsMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksIGtleWVsZW1zK2lkeCwgMSk7CisgICAgICBpZiAoIWwxKQorICAgICAgICBkaWUgKCJubyAlYyBwYXJhbWV0ZXIgaW4gcmV0dXJuZWQgcHJpdmF0ZSBrZXlcbiIsIGtleWVsZW1zW2lkeF0pOworICAgICAga2V5cGFybXNbaWR4XSA9IGdjcnlfc2V4cF9udGhfbXBpIChsMSwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgIGlmICgha2V5cGFybXNbaWR4XSkKKyAgICAgICAgZGllICgibm8gdmFsdWUgZm9yICVjIHBhcmFtZXRlciBpbiByZXR1cm5lZCBwcml2YXRlIGtleVxuIiwKKyAgICAgICAgICAgICBrZXllbGVtc1tpZHhdKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7CisgICAgfQorCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworCisgIC8qIENoZWNrIHRoYXQgcCA8IHE7IGlmIG5vdCBzd2FwIHAgYW5kIHEgYW5kIHJlY29tcHV0ZSB1LiAgKi8KKyAgaWYgKGdjcnlfbXBpX2NtcCAoa2V5cGFybXNbM10sIGtleXBhcm1zWzRdKSA+IDApCisgICAgeworICAgICAgZ2NyeV9tcGlfc3dhcCAoa2V5cGFybXNbM10sIGtleXBhcm1zWzRdKTsKKyAgICAgIGdjcnlfbXBpX2ludm0gKGtleXBhcm1zWzddLCBrZXlwYXJtc1szXSwga2V5cGFybXNbNF0pOworICAgIH0KKworICAvKiBDb21wdXRlIHRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAqLworICBnY3J5X21waV9zdWJfdWkgKGtleXBhcm1zWzVdLCBrZXlwYXJtc1szXSwgMSk7CisgIGdjcnlfbXBpX21vZCAoa2V5cGFybXNbNV0sIGtleXBhcm1zWzJdLCBrZXlwYXJtc1s1XSk7CisgIGdjcnlfbXBpX3N1Yl91aSAoa2V5cGFybXNbNl0sIGtleXBhcm1zWzRdLCAxKTsKKyAgZ2NyeV9tcGlfbW9kIChrZXlwYXJtc1s2XSwga2V5cGFybXNbMl0sIGtleXBhcm1zWzZdKTsKKworICAvKiBDb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGluZy4gICovCisgIG5lZWRlZCA9IGNvbXB1dGVfdGFnX2xlbmd0aCAoMSkgKyAxOworICBmb3IgKGlkeD0wOyBpZHggPCBESU0oa2V5cGFybXMpOyBpZHgrKykKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X21waV9wcmludCAoR0NSWU1QSV9GTVRfU1RELCBOVUxMLCAwLCAmbiwga2V5cGFybXNbaWR4XSk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJlcnJvciBmb3JtYXR0aW5nIHBhcmFtZXRlcjogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBrZXlwYXJtc2xlbltpZHhdID0gbjsKKyAgICAgIG5lZWRlZCArPSBjb21wdXRlX3RhZ19sZW5ndGggKG4pICsgbjsKKyAgICB9CisKKyAgLyogU3RvcmUgdGhlIGtleSBwYXJhbWV0ZXJzLiAqLworICBkZXJsZW4gPSBjb21wdXRlX3RhZ19sZW5ndGggKG5lZWRlZCkgKyBuZWVkZWQ7CisgIGRlciA9IGRlcmJ1ZiA9IGdjcnlfeG1hbGxvYyAoZGVybGVuKTsKKworICBkZXIgPSBzdG9yZV90YWdfbGVuZ3RoIChkZXIsIFRBR19TRVFVRU5DRSwgbmVlZGVkKTsKKyAgZGVyID0gc3RvcmVfdGFnX2xlbmd0aCAoZGVyLCBUQUdfSU5URUdFUiwgMSk7CisgICpkZXIrKyA9IDA7CisgIGZvciAoaWR4PTA7IGlkeCA8IERJTShrZXlwYXJtcyk7IGlkeCsrKQorICAgIHsKKyAgICAgIGRlciA9IHN0b3JlX3RhZ19sZW5ndGggKGRlciwgVEFHX0lOVEVHRVIsIGtleXBhcm1zbGVuW2lkeF0pOworICAgICAgZXJyID0gZ2NyeV9tcGlfcHJpbnQgKEdDUllNUElfRk1UX1NURCwgZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cGFybXNsZW5baWR4XSwgTlVMTCwga2V5cGFybXNbaWR4XSk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJlcnJvciBmb3JtYXR0aW5nIHBhcmFtZXRlcjogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBkZXIgKz0ga2V5cGFybXNsZW5baWR4XTsKKyAgICB9CisKKyAgLyogUHJpbnQgdGhlIHN0dWZmLiAgKi8KKyAgZm9yIChpZHg9MDsgaWR4IDwgRElNKGtleXBhcm1zKTsgaWR4KyspCisgICAgZ2NyeV9tcGlfcmVsZWFzZSAoa2V5cGFybXNbaWR4XSk7CisKKyAgYXNzZXJ0IChkZXIgLSBkZXJidWYgPT0gZGVybGVuKTsKKworICBpZiAoYmFzZTY0X291dHB1dCkKKyAgICBwdXRzICgiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLSIpOworICBwcmludF9idWZmZXIgKGRlcmJ1ZiwgZGVybGVuKTsKKyAgaWYgKGJhc2U2NF9vdXRwdXQpCisgICAgcHV0cyAoIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tIik7CisKKyAgZ2NyeV9mcmVlIChkZXJidWYpOworfQorCisKKwwKKy8qIFNpZ24gREFUQSBvZiBsZW5ndGggREFUQUxFTiB1c2luZyB0aGUga2V5IHRha2VuIGZyb20gdGhlIFBFTQorICAgZW5jb2RlZCBLRVlGSUxFIGFuZCB0aGUgaGFzaCBhbGdvcml0aG0gSEFTSEFMR08uICAqLworc3RhdGljIHZvaWQKK3J1bl9yc2Ffc2lnbiAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgIGludCBoYXNoYWxnbywgaW50IHBrY3MxLCBjb25zdCBjaGFyICprZXlmaWxlKQorCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qgc19kYXRhLCBzX2tleSwgc19zaWcsIHNfdG1wOworICBnY3J5X21waV90IHNpZ19tcGkgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpvdXRidWY7CisgIHNpemVfdCBvdXRsZW47CisKKy8qICAgc2hvd2hleCAoIkQiLCBkYXRhLCBkYXRhbGVuKTsgKi8KKyAgaWYgKHBrY3MxKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2NF07CisgICAgICB1bnNpZ25lZCBpbnQgaGFzaHNpemU7CisKKyAgICAgIGhhc2hzaXplID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChoYXNoYWxnbyk7CisgICAgICBpZiAoIWhhc2hzaXplIHx8IGhhc2hzaXplID4gc2l6ZW9mIGhhc2gpCisgICAgICAgIGRpZSAoImRpZ2VzdCB0b28gbG9uZyBmb3IgYnVmZmVyIG9yIHVua25vd24gaGFzaCBhbGdvcml0aG1cbiIpOworICAgICAgZ2NyeV9tZF9oYXNoX2J1ZmZlciAoaGFzaGFsZ28sIGhhc2gsIGRhdGEsIGRhdGFsZW4pOworICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc19kYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIHBrY3MxKShoYXNoICVzICViKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21kX2FsZ29fbmFtZSAoaGFzaGFsZ28pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWhhc2hzaXplLCBoYXNoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnY3J5X21waV90IHRtcDsKKworICAgICAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJnRtcCwgR0NSWU1QSV9GTVRfVVNHLCBkYXRhLCBkYXRhbGVuLE5VTEwpOworICAgICAgaWYgKCFlcnIpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX2RhdGEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdykodmFsdWUgJW0pKSIsIHRtcCk7CisgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAodG1wKTsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X3NleHBfYnVpbGQgZmFpbGVkIGZvciBSU0EgZGF0YSBpbnB1dDogJXNcbiIsCisgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIHNfa2V5ID0gcmVhZF9wcml2YXRlX2tleV9maWxlIChrZXlmaWxlLCAwKTsKKworICBlcnIgPSBnY3J5X3BrX3NpZ24gKCZzX3NpZywgc19kYXRhLCBzX2tleSk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHJlYWRfcHJpdmF0ZV9rZXlfZmlsZSAoa2V5ZmlsZSwgMSkpOworICAgICAgZGllICgiZ2NyeV9wa19zaWduZWQgZmFpbGVkIChkYXRhbGVuPSVkLGtleWZpbGU9JXMpOiAlc1xuIiwKKyAgICAgICAgICAgKGludClkYXRhbGVuLCBrZXlmaWxlLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgIH0KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfZGF0YSk7CisKKyAgc190bXAgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc19zaWcsICJzaWctdmFsIiwgMCk7CisgIGlmIChzX3RtcCkKKyAgICB7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICAgICAgc19zaWcgPSBzX3RtcDsKKyAgICAgIHNfdG1wID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNfc2lnLCAicnNhIiwgMCk7CisgICAgICBpZiAoc190bXApCisgICAgICAgIHsKKyAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICAgICAgICAgIHNfc2lnID0gc190bXA7CisgICAgICAgICAgc190bXAgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc19zaWcsICJzIiwgMCk7CisgICAgICAgICAgaWYgKHNfdG1wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICAgICAgICAgICAgICBzX3NpZyA9IHNfdG1wOworICAgICAgICAgICAgICBzaWdfbXBpID0gZ2NyeV9zZXhwX250aF9tcGkgKHNfc2lnLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworCisgIGlmICghc2lnX21waSkKKyAgICBkaWUgKCJubyB2YWx1ZSBpbiByZXR1cm5lZCBTLWV4cHJlc3Npb25cbiIpOworICBlcnIgPSBnY3J5X21waV9hcHJpbnQgKEdDUllNUElfRk1UX1NURCwgJm91dGJ1ZiwgJm91dGxlbiwgc2lnX21waSk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9tcGlfYXByaW50IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHNpZ19tcGkpOworCisgIHByaW50X2J1ZmZlciAob3V0YnVmLCBvdXRsZW4pOworICBnY3J5X2ZyZWUgKG91dGJ1Zik7Cit9CisKKworDAorLyogVmVyaWZ5IERBVEEgb2YgbGVuZ3RoIERBVEFMRU4gdXNpbmcgdGhlIHB1YmxpYyBrZXkgdGFrZW4gZnJvbSB0aGUKKyAgIFBFTSBlbmNvZGVkIEtFWUZJTEUgYW5kIHRoZSBoYXNoIGFsZ29yaXRobSBIQVNIQUxHTyBhZ2FpbnN0IHRoZQorICAgYmluYXJ5IHNpZ25hdHVyZSBpbiBTSUdGSUxFLiAgKi8KK3N0YXRpYyB2b2lkCitydW5fcnNhX3ZlcmlmeSAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sIGludCBoYXNoYWxnbywgaW50IHBrY3MxLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleWZpbGUsIGNvbnN0IGNoYXIgKnNpZ2ZpbGUpCisKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBzX2RhdGEsIHNfa2V5LCBzX3NpZzsKKworICBpZiAocGtjczEpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBoYXNoWzY0XTsKKyAgICAgIHVuc2lnbmVkIGludCBoYXNoc2l6ZTsKKworICAgICAgaGFzaHNpemUgPSBnY3J5X21kX2dldF9hbGdvX2RsZW4gKGhhc2hhbGdvKTsKKyAgICAgIGlmICghaGFzaHNpemUgfHwgaGFzaHNpemUgPiBzaXplb2YgaGFzaCkKKyAgICAgICAgZGllICgiZGlnZXN0IHRvbyBsb25nIGZvciBidWZmZXIgb3IgdW5rbm93biBoYXNoIGFsZ29yaXRobVxuIik7CisgICAgICBnY3J5X21kX2hhc2hfYnVmZmVyIChoYXNoYWxnbywgaGFzaCwgZGF0YSwgZGF0YWxlbik7CisgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX2RhdGEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgcGtjczEpKGhhc2ggJXMgJWIpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfbWRfYWxnb19uYW1lIChoYXNoYWxnbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpaGFzaHNpemUsIGhhc2gpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjcnlfbXBpX3QgdG1wOworCisgICAgICBlcnIgPSBnY3J5X21waV9zY2FuICgmdG1wLCBHQ1JZTVBJX0ZNVF9VU0csIGRhdGEsIGRhdGFsZW4sTlVMTCk7CisgICAgICBpZiAoIWVycikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNfZGF0YSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgcmF3KSh2YWx1ZSAlbSkpIiwgdG1wKTsKKyAgICAgICAgICBnY3J5X21waV9yZWxlYXNlICh0bXApOworICAgICAgICB9CisgICAgfQorICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfc2V4cF9idWlsZCBmYWlsZWQgZm9yIFJTQSBkYXRhIGlucHV0OiAlc1xuIiwKKyAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgc19rZXkgPSByZWFkX3B1YmxpY19rZXlfZmlsZSAoa2V5ZmlsZSwgMCk7CisKKyAgc19zaWcgPSByZWFkX3NpZ19maWxlIChzaWdmaWxlKTsKKworICBlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc19zaWcsIHNfZGF0YSwgc19rZXkpOworICBpZiAoIWVycikKKyAgICBwdXRzICgiR09PRCBzaWduYXR1cmUiKTsKKyAgZWxzZSBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfQkFEX1NJR05BVFVSRSkKKyAgICBwdXRzICgiQkFEIHNpZ25hdHVyZSIpOworICBlbHNlCisgICAgcHJpbnRmICgiRVJST1IgKCVzKVxuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc19rZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc19kYXRhKTsKK30KKworCisMCisvKiBHZW5lcmF0ZSBhIERTQSBrZXkgb2Ygc2l6ZSBLRVlTSVpFIGFuZCByZXR1cm4gdGhlIGNvbXBsZXRlCisgICBTLWV4cHJlc3Npb24uICAqLworc3RhdGljIGdjcnlfc2V4cF90Citkc2FfZ2VuIChpbnQga2V5c2l6ZSkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBrZXlzcGVjLCBrZXk7CisKKyAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgma2V5c3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleSAoZHNhIChuYml0cyAlZCkodXNlLWZpcHMxODYtMikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAga2V5c2l6ZSk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9zZXhwX2J1aWxkIGZhaWxlZCBmb3IgRFNBIGtleSBnZW5lcmF0aW9uOiAlc1xuIiwKKyAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZXJyID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleXNwZWMpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfcGtfZ2Vua2V5IGZhaWxlZCBmb3IgRFNBOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5c3BlYyk7CisKKyAgcmV0dXJuIGtleTsKK30KKworCisvKiBHZW5lcmF0ZSBhIERTQSBrZXkgb2Ygc2l6ZSBLRVlTSVpFIGFuZCByZXR1cm4gdGhlIGNvbXBsZXRlCisgICBTLWV4cHJlc3Npb24uICAqLworc3RhdGljIGdjcnlfc2V4cF90Citkc2FfZ2VuX3dpdGhfc2VlZCAoaW50IGtleXNpemUsIGNvbnN0IHZvaWQgKnNlZWQsIHNpemVfdCBzZWVkbGVuKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IGtleXNwZWMsIGtleTsKKworICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlzcGVjLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgIChkc2EiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAobmJpdHMgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgKHVzZS1maXBzMTg2LTIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgKGRlcml2ZS1wYXJtcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgKHNlZWQgJWIpKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzaXplLCAoaW50KXNlZWRsZW4sIHNlZWQpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfc2V4cF9idWlsZCBmYWlsZWQgZm9yIERTQSBrZXkgZ2VuZXJhdGlvbjogJXNcbiIsCisgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGVyciA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlzcGVjKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X3BrX2dlbmtleSBmYWlsZWQgZm9yIERTQTogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXNwZWMpOworCisgIHJldHVybiBrZXk7Cit9CisKKworLyogUHJpbnQgdGhlIGRvbWFpbiBwYXJhbWV0ZXIgYXMgd2VsbCBhcyB0aGUgZGVyaXZlIGluZm9ybWF0aW9uLiAgS0VZCisgICBpcyB0aGUgY29tcGxldGUga2V5IGFzIHJldHVybmVkIGJ5IGRzYV9nZW4uICBXZSBwcmludCB0byBzdGRvdXQKKyAgIHdpdGggb25lIHBhcmFtZXRlciBwZXIgbGluZSBpbiBoZXggZm9ybWF0IHVzaW5nIHRoaXMgb3JkZXI6IHAsIHEsCisgICBnLCBzZWVkLCBjb3VudGVyLCBoLiAqLworc3RhdGljIHZvaWQKK3ByaW50X2RzYV9kb21haW5fcGFyYW1ldGVycyAoZ2NyeV9zZXhwX3Qga2V5KQoreworICBnY3J5X3NleHBfdCBsMSwgbDI7CisgIGdjcnlfbXBpX3QgbXBpOworICBpbnQgaWR4OworICBjb25zdCB2b2lkICpkYXRhOworICBzaXplX3QgZGF0YWxlbjsKKyAgY2hhciAqc3RyaW5nOworCisgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleSwgInB1YmxpYy1rZXkiLCAwKTsKKyAgaWYgKCFsMSkKKyAgICBkaWUgKCJwdWJsaWMga2V5IG5vdCBmb3VuZCBpbiBnZW5rZXkgcmVzdWx0XG4iKTsKKworICBsMiA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChsMSwgImRzYSIsIDApOworICBpZiAoIWwyKQorICAgIGRpZSAoInJldHVybmVkIHB1YmxpYyBrZXkgbm90IGZvcm1lZCBhcyBleHBlY3RlZFxuIik7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7CisgIGwxID0gbDI7CisKKyAgLyogRXh0cmFjdCB0aGUgcGFyYW1ldGVycyBmcm9tIHRoZSBTLWV4cHJlc3Npb24gYW5kIHByaW50IHRoZW0gdG8gc3Rkb3V0LiAgKi8KKyAgZm9yIChpZHg9MDsgInBxZyJbaWR4XTsgaWR4KyspCisgICAgeworICAgICAgbDIgPSBnY3J5X3NleHBfZmluZF90b2tlbiAobDEsICJwcWciK2lkeCwgMSk7CisgICAgICBpZiAoIWwyKQorICAgICAgICBkaWUgKCJubyAlYyBwYXJhbWV0ZXIgaW4gcmV0dXJuZWQgcHVibGljIGtleVxuIiwgInBxZyJbaWR4XSk7CisgICAgICBtcGkgPSBnY3J5X3NleHBfbnRoX21waSAobDIsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICBpZiAoIW1waSkKKyAgICAgICAgZGllICgibm8gdmFsdWUgZm9yICVjIHBhcmFtZXRlciBpbiByZXR1cm5lZCBwdWJsaWMga2V5XG4iLCJwcWciW2lkeF0pOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwyKTsKKyAgICAgIGlmIChzdGFuZGFsb25lX21vZGUpCisgICAgICAgIHByaW50ZiAoIiVjID0gIiwgIlBRRyJbaWR4XSk7CisgICAgICBwcmludF9tcGlfbGluZSAobXBpLCAxKTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG1waSk7CisgICAgfQorICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworCisgIC8qIEV4dHJhY3QgdGhlIHNlZWQgdmFsdWVzLiAgKi8KKyAgbDEgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAibWlzYy1rZXktaW5mbyIsIDApOworICBpZiAoIWwxKQorICAgIGRpZSAoIm1pc2Mta2V5LWluZm8gbm90IGZvdW5kIGluIGdlbmtleSByZXN1bHRcbiIpOworCisgIGwyID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGwxLCAic2VlZC12YWx1ZXMiLCAwKTsKKyAgaWYgKCFsMikKKyAgICBkaWUgKCJubyBzZWVkLXZhbHVlcyBpbiByZXR1cm5lZCBrZXlcbiIpOworICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICBsMSA9IGwyOworCisgIGwyID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGwxLCAic2VlZCIsIDApOworICBpZiAoIWwyKQorICAgIGRpZSAoIm5vIHNlZWQgdmFsdWUgaW4gcmV0dXJuZWQga2V5XG4iKTsKKyAgZGF0YSA9IGdjcnlfc2V4cF9udGhfZGF0YSAobDIsIDEsICZkYXRhbGVuKTsKKyAgaWYgKCFkYXRhKQorICAgIGRpZSAoIm5vIHNlZWQgdmFsdWUgaW4gcmV0dXJuZWQga2V5XG4iKTsKKyAgaWYgKHN0YW5kYWxvbmVfbW9kZSkKKyAgICBwcmludGYgKCJTZWVkID0gIik7CisgIHByaW50X2RhdGFfbGluZSAoZGF0YSwgZGF0YWxlbik7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMik7CisKKyAgbDIgPSBnY3J5X3NleHBfZmluZF90b2tlbiAobDEsICJjb3VudGVyIiwgMCk7CisgIGlmICghbDIpCisgICAgZGllICgibm8gY291bnRlciB2YWx1ZSBpbiByZXR1cm5lZCBrZXlcbiIpOworICBzdHJpbmcgPSBnY3J5X3NleHBfbnRoX3N0cmluZyAobDIsIDEpOworICBpZiAoIXN0cmluZykKKyAgICBkaWUgKCJubyBjb3VudGVyIHZhbHVlIGluIHJldHVybmVkIGtleVxuIik7CisgIGlmIChzdGFuZGFsb25lX21vZGUpCisgICAgcHJpbnRmICgiYyA9ICVsZFxuIiwgc3RydG91bCAoc3RyaW5nLCBOVUxMLCAxMCkpOworICBlbHNlCisgICAgcHJpbnRmICgiJWxYXG4iLCBzdHJ0b3VsIChzdHJpbmcsIE5VTEwsIDEwKSk7CisgIGdjcnlfZnJlZSAoc3RyaW5nKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwyKTsKKworICBsMiA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChsMSwgImgiLCAwKTsKKyAgaWYgKCFsMikKKyAgICBkaWUgKCJubyBuIHZhbHVlIGluIHJldHVybmVkIGtleVxuIik7CisgIG1waSA9IGdjcnlfc2V4cF9udGhfbXBpIChsMiwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgaWYgKCFtcGkpCisgICAgZGllICgibm8gaCB2YWx1ZSBpbiByZXR1cm5lZCBrZXlcbiIpOworICBpZiAoc3RhbmRhbG9uZV9tb2RlKQorICAgIHByaW50ZiAoIkggPSAiKTsKKyAgcHJpbnRfbXBpX2xpbmUgKG1waSwgMSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG1waSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMik7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwxKTsKK30KKworCisvKiBHZW5lcmF0ZSBEU0EgZG9tYWluIHBhcmFtZXRlcnMgZm9yIGEgbW9kdWx1cyBzaXplIG9mIEtFWVNJWkUuICBUaGUKKyAgIHJlc3VsdCBpcyBwcmludGVkIHRvIHN0ZG91dCB3aXRoIG9uZSBwYXJhbWV0ZXIgcGVyIGxpbmUgaW4gaGV4CisgICBmb3JtYXQgYW5kIGluIHRoaXMgb3JkZXI6IHAsIHEsIGcsIHNlZWQsIGNvdW50ZXIsIGguICBJZiBTRUVEIGlzCisgICBub3QgTlVMTCB0aGlzIHNlZWQgdmFsdWUgd2lsbCBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGlvbi4gICovCitzdGF0aWMgdm9pZAorcnVuX2RzYV9wcWdfZ2VuIChpbnQga2V5c2l6ZSwgY29uc3Qgdm9pZCAqc2VlZCwgc2l6ZV90IHNlZWRsZW4pCit7CisgIGdjcnlfc2V4cF90IGtleTsKKworICBpZiAoc2VlZCkKKyAgICBrZXkgPSBkc2FfZ2VuX3dpdGhfc2VlZCAoa2V5c2l6ZSwgc2VlZCwgc2VlZGxlbik7CisgIGVsc2UKKyAgICBrZXkgPSBkc2FfZ2VuIChrZXlzaXplKTsKKyAgcHJpbnRfZHNhX2RvbWFpbl9wYXJhbWV0ZXJzIChrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKK30KKworCisvKiBHZW5lcmF0ZSBhIERTQSBrZXkgb2Ygc2l6ZSBvZiBLRVlTSVpFIGFuZCB3cml0ZSB0aGUgcHJpdmF0ZSBrZXkgdG8KKyAgIEZJTEVOQU1FLiAgQWxzbyB3cml0ZSB0aGUgcGFyYW1ldGVycyB0byBzdGRvdXQgaW4gdGhlIHNhbWUgd2F5IGFzCisgICBydW5fZHNhX3BxZ19nZW4uICAqLworc3RhdGljIHZvaWQKK3J1bl9kc2FfZ2VuIChpbnQga2V5c2l6ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgIGdjcnlfc2V4cF90IGtleSwgcHJpdmF0ZV9rZXk7CisgIEZJTEUgKmZwOworCisgIGtleSA9IGRzYV9nZW4gKGtleXNpemUpOworICBwcml2YXRlX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXByaXZhdGVfa2V5KQorICAgIGRpZSAoInByaXZhdGUga2V5IG5vdCBmb3VuZCBpbiBnZW5rZXkgcmVzdWx0XG4iKTsKKyAgcHJpbnRfZHNhX2RvbWFpbl9wYXJhbWV0ZXJzIChrZXkpOworCisgIGZwID0gZm9wZW4gKGZpbGVuYW1lLCAid2IiKTsKKyAgaWYgKCFmcCkKKyAgICBkaWUgKCJjYW4ndCBjcmVhdGUgYCVzJzogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgcHJpbnRfc2V4cCAocHJpdmF0ZV9rZXksIGZwKTsKKyAgZmNsb3NlIChmcCk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHByaXZhdGVfa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7Cit9CisKKworDAorLyogU2lnbiBEQVRBIG9mIGxlbmd0aCBEQVRBTEVOIHVzaW5nIHRoZSBrZXkgdGFrZW4gZnJvbSB0aGUgUy1leHByZXNzaW9uCisgICBlbmNvZGVkIEtFWUZJTEUuICovCitzdGF0aWMgdm9pZAorcnVuX2RzYV9zaWduIChjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbiwgY29uc3QgY2hhciAqa2V5ZmlsZSkKKworeworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IHNfZGF0YSwgc19rZXksIHNfc2lnLCBzX3RtcCwgc190bXAyOworICBjaGFyIGhhc2hbMjBdOworICBnY3J5X21waV90IHRtcG1waTsKKworICBnY3J5X21kX2hhc2hfYnVmZmVyIChHQ1JZX01EX1NIQTEsIGhhc2gsIGRhdGEsIGRhdGFsZW4pOworICBlcnIgPSBnY3J5X21waV9zY2FuICgmdG1wbXBpLCBHQ1JZTVBJX0ZNVF9VU0csIGhhc2gsIDIwLCBOVUxMKTsKKyAgaWYgKCFlcnIpCisgICAgeworICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc19kYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIHJhdykodmFsdWUgJW0pKSIsIHRtcG1waSk7CisgICAgICBnY3J5X21waV9yZWxlYXNlICh0bXBtcGkpOworICAgIH0KKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X3NleHBfYnVpbGQgZmFpbGVkIGZvciBEU0EgZGF0YSBpbnB1dDogJXNcbiIsCisgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworCisgIHNfa2V5ID0gcmVhZF9zZXhwX2Zyb21fZmlsZSAoa2V5ZmlsZSk7CisKKyAgZXJyID0gZ2NyeV9wa19zaWduICgmc19zaWcsIHNfZGF0YSwgc19rZXkpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChyZWFkX3ByaXZhdGVfa2V5X2ZpbGUgKGtleWZpbGUsIDEpKTsKKyAgICAgIGRpZSAoImdjcnlfcGtfc2lnbmVkIGZhaWxlZCAoZGF0YWxlbj0lZCxrZXlmaWxlPSVzKTogJXNcbiIsCisgICAgICAgICAgIChpbnQpZGF0YWxlbiwga2V5ZmlsZSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICB9CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX2RhdGEpOworCisgIC8qIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBZIHBhcmFtZXRlciBmaXJzdC4gICovCisgIHNfdG1wID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNfa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCFzX3RtcCkKKyAgICBkaWUgKCJwcml2YXRlIGtleSBwYXJ0IG5vdCBmb3VuZCBpbiBwcm92aWRlZCBrZXlcbiIpOworCisgIHNfdG1wMiA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3RtcCwgImRzYSIsIDApOworICBpZiAoIXNfdG1wMikKKyAgICBkaWUgKCJwcml2YXRlIGtleSBwYXJ0IGlzIG5vdCBhIERTQSBrZXlcbiIpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc190bXApOworCisgIHNfdG1wID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNfdG1wMiwgInkiLCAwKTsKKyAgdG1wbXBpID0gZ2NyeV9zZXhwX250aF9tcGkgKHNfdG1wLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICBpZiAoIXRtcG1waSkKKyAgICBkaWUgKCJubyB5IHBhcmFtZXRlciBpbiBEU0Ega2V5XG4iKTsKKyAgcHJpbnRfbXBpX2xpbmUgKHRtcG1waSwgMSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHRtcG1waSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX3RtcCk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfa2V5KTsKKworCisgIC8qIE5vdyByZXR1cm4gdGhlIGFjdHVhbCBzaWduYXR1cmUuICAqLworICBzX3RtcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3NpZywgInNpZy12YWwiLCAwKTsKKyAgaWYgKCFzX3RtcCkKKyAgICBkaWUgKCJubyBzaWctdmFsIGVsZW1lbnQgaW4gcmV0dXJuZWQgUy1leHByZXNzaW9uXG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICBzX3NpZyA9IHNfdG1wOworICBzX3RtcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3NpZywgImRzYSIsIDApOworICBpZiAoIXNfdG1wKQorICAgIGRpZSAoIm5vIGRzYSBlbGVtZW50IGluIHJldHVybmVkIFMtZXhwcmVzc2lvblxuIik7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfc2lnKTsKKyAgc19zaWcgPSBzX3RtcDsKKworICBzX3RtcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3NpZywgInIiLCAwKTsKKyAgdG1wbXBpID0gZ2NyeV9zZXhwX250aF9tcGkgKHNfdG1wLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICBpZiAoIXRtcG1waSkKKyAgICBkaWUgKCJubyByIHBhcmFtZXRlciBpbiByZXR1cm5lZCBTLWV4cHJlc3Npb25cbiIpOworICBwcmludF9tcGlfbGluZSAodG1wbXBpLCAxKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAodG1wbXBpKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfdG1wKTsKKworICBzX3RtcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3NpZywgInMiLCAwKTsKKyAgdG1wbXBpID0gZ2NyeV9zZXhwX250aF9tcGkgKHNfdG1wLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICBpZiAoIXRtcG1waSkKKyAgICBkaWUgKCJubyBzIHBhcmFtZXRlciBpbiByZXR1cm5lZCBTLWV4cHJlc3Npb25cbiIpOworICBwcmludF9tcGlfbGluZSAodG1wbXBpLCAxKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAodG1wbXBpKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfdG1wKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworfQorCisKKwwKKy8qIFZlcmlmeSBEQVRBIG9mIGxlbmd0aCBEQVRBTEVOIHVzaW5nIHRoZSBwdWJsaWMga2V5IHRha2VuIGZyb20gdGhlCisgICBTLWV4cHJlc3Npb24gaW4gS0VZRklMRSBhZ2FpbnN0IHRoZSBTLWV4cHJlc3Npb24gZm9ybWF0dGVkCisgICBzaWduYXR1cmUgaW4gU0lHRklMRS4gICovCitzdGF0aWMgdm9pZAorcnVuX2RzYV92ZXJpZnkgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleWZpbGUsIGNvbnN0IGNoYXIgKnNpZ2ZpbGUpCisKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBzX2RhdGEsIHNfa2V5LCBzX3NpZzsKKyAgY2hhciBoYXNoWzIwXTsKKyAgZ2NyeV9tcGlfdCB0bXBtcGk7CisKKyAgZ2NyeV9tZF9oYXNoX2J1ZmZlciAoR0NSWV9NRF9TSEExLCBoYXNoLCBkYXRhLCBkYXRhbGVuKTsKKyAgLyogTm90ZSB0aGF0IHdlIGNhbid0IHNpbXBseSB1c2UgJWIgd2l0aCBIQVNIIHRvIGJ1aWxkIHRoZQorICAgICBTLWV4cHJlc3Npb24sIGJlY2F1c2UgdGhhdCBtaWdodCB5aWVsZCBhIG5lZ2F0aXZlIHZhbHVlLiAgKi8KKyAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJnRtcG1waSwgR0NSWU1QSV9GTVRfVVNHLCBoYXNoLCAyMCwgTlVMTCk7CisgIGlmICghZXJyKQorICAgIHsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNfZGF0YSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihkYXRhIChmbGFncyByYXcpKHZhbHVlICVtKSkiLCB0bXBtcGkpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAodG1wbXBpKTsKKyAgICB9CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9zZXhwX2J1aWxkIGZhaWxlZCBmb3IgRFNBIGRhdGEgaW5wdXQ6ICVzXG4iLAorICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBzX2tleSA9IHJlYWRfc2V4cF9mcm9tX2ZpbGUgKGtleWZpbGUpOworICBzX3NpZyA9IHJlYWRfc2V4cF9mcm9tX2ZpbGUgKHNpZ2ZpbGUpOworCisgIGVyciA9IGdjcnlfcGtfdmVyaWZ5IChzX3NpZywgc19kYXRhLCBzX2tleSk7CisgIGlmICghZXJyKQorICAgIHB1dHMgKCJHT09EIHNpZ25hdHVyZSIpOworICBlbHNlIGlmIChncGdfZXJyX2NvZGUgKGVycikgPT0gR1BHX0VSUl9CQURfU0lHTkFUVVJFKQorICAgIHB1dHMgKCJCQUQgc2lnbmF0dXJlIik7CisgIGVsc2UKKyAgICBwcmludGYgKCJFUlJPUiAoJXMpXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX3NpZyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX2tleSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX2RhdGEpOworfQorCisKKworDAorc3RhdGljIHZvaWQKK3VzYWdlIChpbnQgc2hvd19oZWxwKQoreworICBpZiAoIXNob3dfaGVscCkKKyAgICB7CisgICAgICBmcHV0cyAoInVzYWdlOiAiIFBHTQorICAgICAgICAgICAgICIgW09QVElPTl0gW0ZJTEVdICh0cnkgLS1oZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uKVxuIiwgc3RkZXJyKTsKKyAgICAgIGV4aXQgKDIpOworICAgIH0KKyAgZnB1dHMKKyAgICAoIlVzYWdlOiAiIFBHTSAiIFtPUFRJT05TXSBNT0RFIFtGSUxFXVxuIgorICAgICAiUnVuIGEgY3J5cHRvIG9wZXJhdGlvbiB1c2luZyBoZXggZW5jb2RlZCBpbnB1dCBhbmQgb3V0cHV0LlxuIgorICAgICAiTU9ERTpcbiIKKyAgICAgIiAgZW5jcnlwdCwgZGVjcnlwdCwgZGlnZXN0LCByYW5kb20sIGhtYWMtc2hhLFxuIgorICAgICAiICByc2Ete2Rlcml2ZSxnZW4sc2lnbix2ZXJpZnl9LCBkc2Ete3BxZy1nZW4sZ2VuLHNpZ24sdmVyaWZ5fVxuIgorICAgICAiT1BUSU9OUzpcbiIKKyAgICAgIiAgLS12ZXJib3NlICAgICAgICBQcmludCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4iCisgICAgICIgIC0tYmluYXJ5ICAgICAgICAgSW5wdXQgYW5kIG91dHB1dCBpcyBpbiBiaW5hcnkgZm9ybVxuIgorICAgICAiICAtLW5vLWZpcHMgICAgICAgIERvIG5vdCBmb3JjZSBGSVBTIG1vZGVcbiIKKyAgICAgIiAgLS1rZXkgS0VZICAgICAgICBVc2UgdGhlIGhleCBlbmNvZGVkIEtFWVxuIgorICAgICAiICAtLWl2IElWICAgICAgICAgIFVzZSB0aGUgaGV4IGVuY29kZWQgSVZcbiIKKyAgICAgIiAgLS1kdCBEVCAgICAgICAgICBVc2UgdGhlIGhleCBlbmNvZGVkIERUIGZvciB0aGUgUk5HXG4iCisgICAgICIgIC0tYWxnbyBOQU1FICAgICAgVXNlIGFsZ29yaXRobSBOQU1FXG4iCisgICAgICIgIC0ta2V5c2l6ZSBOICAgICAgVXNlIGEga2V5c2l6ZSBvZiBOIGJpdHNcbiIKKyAgICAgIiAgLS1zaWduYXR1cmUgTkFNRSBUYWtlIHNpZ25hdHVyZSBmcm9tIGZpbGUgTkFNRVxuIgorICAgICAiICAtLWNodW5rIE4gICAgICAgIFJlYWQgaW4gY2h1bmtzIG9mIE4gYnl0ZXMgKGltcGxpZXMgLS1iaW5hcnkpXG4iCisgICAgICIgIC0tcGtjczEgICAgICAgICAgVXNlIFBLQ1MjMSBlbmNvZGluZ1xuIgorICAgICAiICAtLW1jdC1zZXJ2ZXIgICAgIFJ1biBhIG1vbnRlIGNhcmxvIHRlc3Qgc2VydmVyXG4iCisgICAgICIgIC0tbG9vcCAgICAgICAgICAgRW5hYmxlIHJhbmRvbSBsb29wIG1vZGVcbiIKKyAgICAgIiAgLS1wcm9ncmVzcyAgICAgICBQcmludCBwb2dyZXNzIGluZGljYXRvcnNcbiIKKyAgICAgIiAgLS1oZWxwICAgICAgICAgICBQcmludCB0aGlzIHRleHRcbiIKKyAgICAgIldpdGggbm8gRklMRSwgb3Igd2hlbiBGSUxFIGlzIC0sIHJlYWQgc3RhbmRhcmQgaW5wdXQuXG4iCisgICAgICJSZXBvcnQgYnVncyB0byAiIFBBQ0tBR0VfQlVHUkVQT1JUICIuXG4iICwgc3Rkb3V0KTsKKyAgZXhpdCAoMCk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IG5vX2ZpcHMgPSAwOworICBpbnQgcHJvZ3Jlc3MgPSAwOworICBpbnQgdXNlX3BrY3MxID0gMDsKKyAgY29uc3QgY2hhciAqbW9kZV9zdHJpbmc7CisgIGNvbnN0IGNoYXIgKmtleV9zdHJpbmcgPSBOVUxMOworICBjb25zdCBjaGFyICppdl9zdHJpbmcgPSBOVUxMOworICBjb25zdCBjaGFyICpkdF9zdHJpbmcgPSBOVUxMOworICBjb25zdCBjaGFyICphbGdvX3N0cmluZyA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmtleXNpemVfc3RyaW5nID0gTlVMTDsKKyAgY29uc3QgY2hhciAqc2lnbmF0dXJlX3N0cmluZyA9IE5VTEw7CisgIEZJTEUgKmlucHV0OworICB2b2lkICpkYXRhOworICBzaXplX3QgZGF0YWxlbjsKKyAgc2l6ZV90IGNodW5rc2l6ZSA9IDA7CisgIGludCBtY3Rfc2VydmVyID0gMDsKKworCisgIGlmIChhcmdjKQorICAgIHsgYXJnYy0tOyBhcmd2Kys7IH0KKworICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgeworICAgICAgICAgIHVzYWdlICgxKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcnNpb24iKSkKKyAgICAgICAgeworICAgICAgICAgIGZwdXRzIChQR00gIiAoTGliZ2NyeXB0KSAiIFBBQ0tBR0VfVkVSU0lPTiAiXG4iLCBzdGRvdXQpOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSsrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tYmluYXJ5IikpCisgICAgICAgIHsKKyAgICAgICAgICBiaW5hcnlfaW5wdXQgPSBiaW5hcnlfb3V0cHV0ID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLW5vLWZpcHMiKSkKKyAgICAgICAgeworICAgICAgICAgIG5vX2ZpcHMrKzsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWxvb3AiKSkKKyAgICAgICAgeworICAgICAgICAgIGxvb3BfbW9kZSA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wcm9ncmVzcyIpKQorICAgICAgICB7CisgICAgICAgICAgcHJvZ3Jlc3MgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0ta2V5IikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoIWFyZ2MpCisgICAgICAgICAgICB1c2FnZSAoMCk7CisgICAgICAgICAga2V5X3N0cmluZyA9ICphcmd2OworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taXYiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmICghYXJnYykKKyAgICAgICAgICAgIHVzYWdlICgwKTsKKyAgICAgICAgICBpdl9zdHJpbmcgPSAqYXJndjsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWR0IikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoIWFyZ2MpCisgICAgICAgICAgICB1c2FnZSAoMCk7CisgICAgICAgICAgZHRfc3RyaW5nID0gKmFyZ3Y7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1hbGdvIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoIWFyZ2MpCisgICAgICAgICAgICB1c2FnZSAoMCk7CisgICAgICAgICAgYWxnb19zdHJpbmcgPSAqYXJndjsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWtleXNpemUiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmICghYXJnYykKKyAgICAgICAgICAgIHVzYWdlICgwKTsKKyAgICAgICAgICBrZXlzaXplX3N0cmluZyA9ICphcmd2OworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tc2lnbmF0dXJlIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoIWFyZ2MpCisgICAgICAgICAgICB1c2FnZSAoMCk7CisgICAgICAgICAgc2lnbmF0dXJlX3N0cmluZyA9ICphcmd2OworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tY2h1bmsiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmICghYXJnYykKKyAgICAgICAgICAgIHVzYWdlICgwKTsKKyAgICAgICAgICBjaHVua3NpemUgPSBhdG9pICgqYXJndik7CisgICAgICAgICAgYmluYXJ5X2lucHV0ID0gYmluYXJ5X291dHB1dCA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wa2NzMSIpKQorICAgICAgICB7CisgICAgICAgICAgdXNlX3BrY3MxID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLW1jdC1zZXJ2ZXIiKSkKKyAgICAgICAgeworICAgICAgICAgIG1jdF9zZXJ2ZXIgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tc3RhbmRhbG9uZSIpKQorICAgICAgICB7CisgICAgICAgICAgc3RhbmRhbG9uZV9tb2RlID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIWFyZ2MgfHwgYXJnYyA+IDIpCisgICAgdXNhZ2UgKDApOworICBtb2RlX3N0cmluZyA9ICphcmd2OworCisgIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgInJzYS1kZXJpdmUiKSkKKyAgICBiaW5hcnlfaW5wdXQgPSAxOworCisgIGlmIChhcmdjID09IDIgJiYgc3RyY21wIChhcmd2WzFdLCAiLSIpKQorICAgIHsKKyAgICAgIGlucHV0ID0gZm9wZW4gKGFyZ3ZbMV0sIGJpbmFyeV9pbnB1dD8gInJiIjoiciIpOworICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgZGllICgiY2FuJ3Qgb3BlbiBgJXMnOiAlc1xuIiwgYXJndlsxXSwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgfQorICBlbHNlCisgICAgaW5wdXQgPSBzdGRpbjsKKworI2lmbmRlZiBIQVZFX1czMl9TWVNURU0KKyAgaWYgKGxvb3BfbW9kZSkKKyAgICBzaWduYWwgKFNJR1BJUEUsIFNJR19JR04pOworI2VuZGlmCisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogc3RhcnRlZCAobW9kZT0lcylcbiIsIG1vZGVfc3RyaW5nKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1ZFUkJPU0lUWSwgKGludCl2ZXJib3NlKTsKKyAgaWYgKCFub19maXBzKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9GT1JDRV9GSVBTX01PREUsIDApOworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoIjEuNC4zIikpCisgICAgZGllICgiTGliZ2NyeXB0IGlzIG5vdCBzdWZmaWNpZW50IGVub3VnaFxuIik7CisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6IHVzaW5nIExpYmdjcnlwdCAlc1xuIiwgZ2NyeV9jaGVja192ZXJzaW9uIChOVUxMKSk7CisgIGlmIChub19maXBzKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgLyogTW9zdCBvcGVyYXRpb25zIG5lZWQgc29tZSBpbnB1dCBkYXRhLiAgKi8KKyAgaWYgKCFjaHVua3NpemUKKyAgICAgICYmICFtY3Rfc2VydmVyCisgICAgICAmJiBzdHJjbXAgKG1vZGVfc3RyaW5nLCAicmFuZG9tIikKKyAgICAgICYmIHN0cmNtcCAobW9kZV9zdHJpbmcsICJyc2EtZ2VuIikKKyAgICAgICYmIHN0cmNtcCAobW9kZV9zdHJpbmcsICJkc2EtZ2VuIikgKQorICAgIHsKKyAgICAgIGRhdGEgPSByZWFkX2ZpbGUgKGlucHV0LCAhYmluYXJ5X2lucHV0LCAmZGF0YWxlbik7CisgICAgICBpZiAoIWRhdGEpCisgICAgICAgIGRpZSAoImVycm9yIHJlYWRpbmclcyBpbnB1dFxuIiwgYmluYXJ5X2lucHV0PyIiOiIgYW5kIGRlY29kaW5nIik7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogJXUgYnl0ZXMgb2YgaW5wdXQgZGF0YVxuIiwKKyAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClkYXRhbGVuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBkYXRhID0gTlVMTDsKKyAgICAgIGRhdGFsZW4gPSAwOworICAgIH0KKworCisgIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgImVuY3J5cHQiKSB8fCAhc3RyY21wIChtb2RlX3N0cmluZywgImRlY3J5cHQiKSkKKyAgICB7CisgICAgICBpbnQgY2lwaGVyX2FsZ28sIGNpcGhlcl9tb2RlOworICAgICAgdm9pZCAgKml2X2J1ZmZlciA9IE5VTEw7CisgICAgICB2b2lkICprZXlfYnVmZmVyID0gTlVMTDsKKyAgICAgIHNpemVfdCBpdl9idWZsZW4sICBrZXlfYnVmbGVuOworCisgICAgICBpZiAoIWFsZ29fc3RyaW5nKQorICAgICAgICBkaWUgKCJvcHRpb24gLS1hbGdvIGlzIHJlcXVpcmVkIGluIHRoaXMgbW9kZVxuIik7CisgICAgICBjaXBoZXJfYWxnbyA9IG1hcF9vcGVuc3NsX2NpcGhlcl9uYW1lIChhbGdvX3N0cmluZywgJmNpcGhlcl9tb2RlKTsKKyAgICAgIGlmICghY2lwaGVyX2FsZ28pCisgICAgICAgIGRpZSAoImNpcGhlciBhbGdvcml0aG0gYCVzJyBpcyBub3Qgc3VwcG9ydGVkXG4iLCBhbGdvX3N0cmluZyk7CisgICAgICBpZiAobWN0X3NlcnZlcikKKyAgICAgICAgeworICAgICAgICAgIGludCBpdGVyYXRpb25zOworCisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2NyeV9mcmVlIChrZXlfYnVmZmVyKTsga2V5X2J1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgIGdjcnlfZnJlZSAoaXZfYnVmZmVyKTsgaXZfYnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgICAgZ2NyeV9mcmVlIChkYXRhKTsgZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgIGlmICghKGtleV9idWZmZXIgPSByZWFkX3RleHRsaW5lIChpbnB1dCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChmZW9mIChpbnB1dCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGllICgibm8gdmVyc2lvbiBpbmZvIGluIGlucHV0XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChhdG9pIChrZXlfYnVmZmVyKSAhPSAxKQorICAgICAgICAgICAgICAgIGRpZSAoInVuc3VwcG9ydGVkIGlucHV0IHZlcnNpb24gJXNcbiIsIGtleV9idWZmZXIpOworICAgICAgICAgICAgICBnY3J5X2ZyZWUgKGtleV9idWZmZXIpOworICAgICAgICAgICAgICBpZiAoIShrZXlfYnVmZmVyID0gcmVhZF90ZXh0bGluZSAoaW5wdXQpKSkKKyAgICAgICAgICAgICAgICBkaWUgKCJubyBpdGVyYXRpb24gY291bnQgaW4gaW5wdXRcbiIpOworICAgICAgICAgICAgICBpdGVyYXRpb25zID0gYXRvaSAoa2V5X2J1ZmZlcik7CisgICAgICAgICAgICAgIGdjcnlfZnJlZSAoa2V5X2J1ZmZlcik7CisgICAgICAgICAgICAgIGlmICghKGtleV9idWZmZXIgPSByZWFkX2hleGxpbmUgKGlucHV0LCAma2V5X2J1ZmxlbikpKQorICAgICAgICAgICAgICAgIGRpZSAoIm5vIGtleSBpbiBpbnB1dFxuIik7CisgICAgICAgICAgICAgIGlmICghKGl2X2J1ZmZlciA9IHJlYWRfaGV4bGluZSAoaW5wdXQsICZpdl9idWZsZW4pKSkKKyAgICAgICAgICAgICAgICBkaWUgKCJubyBJViBpbiBpbnB1dFxuIik7CisgICAgICAgICAgICAgIGlmICghKGRhdGEgPSByZWFkX2hleGxpbmUgKGlucHV0LCAmZGF0YWxlbikpKQorICAgICAgICAgICAgICAgIGRpZSAoIm5vIGRhdGEgaW4gaW5wdXRcbiIpOworICAgICAgICAgICAgICBza2lwX3RvX2VtcHR5X2xpbmUgKGlucHV0KTsKKworICAgICAgICAgICAgICBydW5fY2lwaGVyX21jdF9sb29wICgoKm1vZGVfc3RyaW5nID09ICdlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9hbGdvLCBjaXBoZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfYnVmZmVyLCBpdl9idWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9idWZmZXIsIGtleV9idWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGFsZW4sIGl0ZXJhdGlvbnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoY2lwaGVyX21vZGUgIT0gR0NSWV9DSVBIRVJfTU9ERV9FQ0IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghaXZfc3RyaW5nKQorICAgICAgICAgICAgICAgIGRpZSAoIm9wdGlvbiAtLWl2IGlzIHJlcXVpcmVkIGluIHRoaXMgbW9kZVxuIik7CisgICAgICAgICAgICAgIGl2X2J1ZmZlciA9IGhleDJidWZmZXIgKGl2X3N0cmluZywgJml2X2J1Zmxlbik7CisgICAgICAgICAgICAgIGlmICghaXZfYnVmZmVyKQorICAgICAgICAgICAgICAgIGRpZSAoImludmFsaWQgdmFsdWUgZm9yIElWXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGl2X2J1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgIGl2X2J1ZmxlbiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFrZXlfc3RyaW5nKQorICAgICAgICAgICAgZGllICgib3B0aW9uIC0ta2V5IGlzIHJlcXVpcmVkIGluIHRoaXMgbW9kZVxuIik7CisgICAgICAgICAga2V5X2J1ZmZlciA9IGhleDJidWZmZXIgKGtleV9zdHJpbmcsICZrZXlfYnVmbGVuKTsKKyAgICAgICAgICBpZiAoIWtleV9idWZmZXIpCisgICAgICAgICAgICBkaWUgKCJpbnZhbGlkIHZhbHVlIGZvciBLRVlcbiIpOworCisgICAgICAgICAgcnVuX2VuY3J5cHRfZGVjcnlwdCAoKCptb2RlX3N0cmluZyA9PSAnZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9hbGdvLCBjaXBoZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9idWZmZXIsIGl2X2J1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfYnVmZmVyLCBrZXlfYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGE/IGRhdGFsZW46Y2h1bmtzaXplLCBpbnB1dCk7CisgICAgICAgIH0KKyAgICAgIGdjcnlfZnJlZSAoa2V5X2J1ZmZlcik7CisgICAgICBnY3J5X2ZyZWUgKGl2X2J1ZmZlcik7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgImRpZ2VzdCIpKQorICAgIHsKKyAgICAgIGludCBhbGdvOworCisgICAgICBpZiAoIWFsZ29fc3RyaW5nKQorICAgICAgICBkaWUgKCJvcHRpb24gLS1hbGdvIGlzIHJlcXVpcmVkIGluIHRoaXMgbW9kZVxuIik7CisgICAgICBhbGdvID0gZ2NyeV9tZF9tYXBfbmFtZSAoYWxnb19zdHJpbmcpOworICAgICAgaWYgKCFhbGdvKQorICAgICAgICBkaWUgKCJkaWdlc3QgYWxnb3JpdGhtIGAlcycgaXMgbm90IHN1cHBvcnRlZFxuIiwgYWxnb19zdHJpbmcpOworICAgICAgaWYgKCFkYXRhKQorICAgICAgICBkaWUgKCJubyBkYXRhIGF2YWlsYWJsZSAoZG8gbm90IHVzZSAtLWNodW5rKVxuIik7CisKKyAgICAgIHJ1bl9kaWdlc3QgKGFsZ28sIGRhdGEsIGRhdGFsZW4pOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAobW9kZV9zdHJpbmcsICJyYW5kb20iKSkKKyAgICB7CisgICAgICB2b2lkICpjb250ZXh0OworICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworICAgICAgdW5zaWduZWQgY2hhciBzZWVkWzE2XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZHRbMTZdOworICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTZdOworICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKworICAgICAgaWYgKGhleDJiaW4gKGtleV9zdHJpbmcsIGtleSwgMTYpIDwgMCApCisgICAgICAgIGRpZSAoInZhbHVlIGZvciAtLWtleSBhcmUgbm90IDMyIGhleCBkaWdpdHNcbiIpOworICAgICAgaWYgKGhleDJiaW4gKGl2X3N0cmluZywgc2VlZCwgMTYpIDwgMCApCisgICAgICAgIGRpZSAoInZhbHVlIGZvciAtLWl2IGFyZSBub3QgMzIgaGV4IGRpZ2l0c1xuIik7CisgICAgICBpZiAoaGV4MmJpbiAoZHRfc3RyaW5nLCBkdCwgMTYpIDwgMCApCisgICAgICAgIGRpZSAoInZhbHVlIGZvciAtLWR0IGFyZSBub3QgMzIgaGV4IGRpZ2l0c1xuIik7CisKKyAgICAgIC8qIFRoZSBmbGFnIHZhbHVlIDEgZGlzYWJsZXMgdGhlIGR1cCBjaGVjaywgc28gdGhhdCB0aGUgUk5HCisgICAgICAgICByZXR1cm5zIGFsbCBnZW5lcmF0ZWQgZGF0YS4gICovCisgICAgICBlcnIgPSBpbml0X2V4dGVybmFsX3JuZ190ZXN0ICgmY29udGV4dCwgMSwga2V5LCAxNiwgc2VlZCwgMTYsIGR0LCAxNik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJpbml0IGV4dGVybmFsIFJORyB0ZXN0IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBydW5fZXh0ZXJuYWxfcm5nX3Rlc3QgKGNvbnRleHQsIGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlcik7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIGRpZSAoInJ1bm5pbmcgZXh0ZXJuYWwgUk5HIHRlc3QgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBwcmludF9idWZmZXIgKGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlcik7CisgICAgICAgICAgaWYgKHByb2dyZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoISgrK2NvdW50ICUgMTAwMCkpCisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogJWx1IHJhbmRvbSBieXRlcyBzbyBmYXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KWNvdW50ICogc2l6ZW9mIGJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHdoaWxlIChsb29wX21vZGUpOworCisgICAgICBpZiAocHJvZ3Jlc3MpCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6ICVsdSByYW5kb20gYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KWNvdW50ICogc2l6ZW9mIGJ1ZmZlcik7CisKKyAgICAgIGRlaW5pdF9leHRlcm5hbF9ybmdfdGVzdCAoY29udGV4dCk7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgImhtYWMtc2hhIikpCisgICAgeworICAgICAgaW50IGFsZ287CisgICAgICB2b2lkICAqa2V5X2J1ZmZlcjsKKyAgICAgIHNpemVfdCBrZXlfYnVmbGVuOworCisgICAgICBpZiAoIWRhdGEpCisgICAgICAgIGRpZSAoIm5vIGRhdGEgYXZhaWxhYmxlIChkbyBub3QgdXNlIC0tY2h1bmspXG4iKTsKKyAgICAgIGlmICghYWxnb19zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWFsZ28gaXMgcmVxdWlyZWQgaW4gdGhpcyBtb2RlXG4iKTsKKyAgICAgIHN3aXRjaCAoYXRvaSAoYWxnb19zdHJpbmcpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMTogICBhbGdvID0gR0NSWV9NRF9TSEExOyBicmVhazsKKyAgICAgICAgY2FzZSAyMjQ6IGFsZ28gPSBHQ1JZX01EX1NIQTIyNDsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OiBhbGdvID0gR0NSWV9NRF9TSEEyNTY7IGJyZWFrOworICAgICAgICBjYXNlIDM4NDogYWxnbyA9IEdDUllfTURfU0hBMzg0OyBicmVhazsKKyAgICAgICAgY2FzZSA1MTI6IGFsZ28gPSBHQ1JZX01EX1NIQTUxMjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICBhbGdvID0gMDsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmICghYWxnbykKKyAgICAgICAgZGllICgibm8gZGlnZXN0IGFsZ29yaXRobSBmb3VuZCBmb3IgaG1hYyB0eXBlIGAlcydcbiIsIGFsZ29fc3RyaW5nKTsKKyAgICAgIGlmICgha2V5X3N0cmluZykKKyAgICAgICAgZGllICgib3B0aW9uIC0ta2V5IGlzIHJlcXVpcmVkIGluIHRoaXMgbW9kZVxuIik7CisgICAgICBrZXlfYnVmZmVyID0gaGV4MmJ1ZmZlciAoa2V5X3N0cmluZywgJmtleV9idWZsZW4pOworICAgICAgaWYgKCFrZXlfYnVmZmVyKQorICAgICAgICBkaWUgKCJpbnZhbGlkIHZhbHVlIGZvciBLRVlcbiIpOworCisgICAgICBydW5faG1hYyAoYWxnbywga2V5X2J1ZmZlciwga2V5X2J1ZmxlbiwgZGF0YSwgZGF0YWxlbik7CisKKyAgICAgIGdjcnlfZnJlZSAoa2V5X2J1ZmZlcik7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgInJzYS1kZXJpdmUiKSkKKyAgICB7CisgICAgICBpZiAoIWRhdGEpCisgICAgICAgIGRpZSAoIm5vIGRhdGEgYXZhaWxhYmxlIChkbyBub3QgdXNlIC0tY2h1bmspXG4iKTsKKyAgICAgIHJ1bl9yc2FfZGVyaXZlIChkYXRhLCBkYXRhbGVuKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG1vZGVfc3RyaW5nLCAicnNhLWdlbiIpKQorICAgIHsKKyAgICAgIGludCBrZXlzaXplOworCisgICAgICBpZiAoIWJpbmFyeV9vdXRwdXQpCisgICAgICAgIGJhc2U2NF9vdXRwdXQgPSAxOworCisgICAgICBrZXlzaXplID0ga2V5c2l6ZV9zdHJpbmc/IGF0b2kgKGtleXNpemVfc3RyaW5nKSA6IDA7CisgICAgICBpZiAoa2V5c2l6ZSA8IDEyOCB8fCBrZXlzaXplID4gMTYzODQpCisgICAgICAgIGRpZSAoImludmFsaWQga2V5c2l6ZSBzcGVjaWZpZWQ7IG5lZWRzIHRvIGJlIDEyOCAuLiAxNjM4NFxuIik7CisgICAgICBydW5fcnNhX2dlbiAoa2V5c2l6ZSwgNjU1MzcpOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAobW9kZV9zdHJpbmcsICJyc2Etc2lnbiIpKQorICAgIHsKKyAgICAgIGludCBhbGdvOworCisgICAgICBpZiAoIWtleV9zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgaWYgKGFjY2VzcyAoa2V5X3N0cmluZywgUl9PSykpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBuZWVkcyB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGtleWZpbGVcbiIpOworICAgICAgaWYgKCFhbGdvX3N0cmluZykKKyAgICAgICAgZGllICgib3B0aW9uIC0tYWxnbyBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgYWxnbyA9IGdjcnlfbWRfbWFwX25hbWUgKGFsZ29fc3RyaW5nKTsKKyAgICAgIGlmICghYWxnbykKKyAgICAgICAgZGllICgiZGlnZXN0IGFsZ29yaXRobSBgJXMnIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIGFsZ29fc3RyaW5nKTsKKyAgICAgIGlmICghZGF0YSkKKyAgICAgICAgZGllICgibm8gZGF0YSBhdmFpbGFibGUgKGRvIG5vdCB1c2UgLS1jaHVuaylcbiIpOworCisgICAgICBydW5fcnNhX3NpZ24gKGRhdGEsIGRhdGFsZW4sIGFsZ28sIHVzZV9wa2NzMSwga2V5X3N0cmluZyk7CisKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG1vZGVfc3RyaW5nLCAicnNhLXZlcmlmeSIpKQorICAgIHsKKyAgICAgIGludCBhbGdvOworCisgICAgICBpZiAoIWtleV9zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgaWYgKGFjY2VzcyAoa2V5X3N0cmluZywgUl9PSykpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBuZWVkcyB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGtleWZpbGVcbiIpOworICAgICAgaWYgKCFhbGdvX3N0cmluZykKKyAgICAgICAgZGllICgib3B0aW9uIC0tYWxnbyBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgYWxnbyA9IGdjcnlfbWRfbWFwX25hbWUgKGFsZ29fc3RyaW5nKTsKKyAgICAgIGlmICghYWxnbykKKyAgICAgICAgZGllICgiZGlnZXN0IGFsZ29yaXRobSBgJXMnIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIGFsZ29fc3RyaW5nKTsKKyAgICAgIGlmICghZGF0YSkKKyAgICAgICAgZGllICgibm8gZGF0YSBhdmFpbGFibGUgKGRvIG5vdCB1c2UgLS1jaHVuaylcbiIpOworICAgICAgaWYgKCFzaWduYXR1cmVfc3RyaW5nKQorICAgICAgICBkaWUgKCJvcHRpb24gLS1zaWduYXR1cmUgaXMgcmVxdWlyZWQgaW4gdGhpcyBtb2RlXG4iKTsKKyAgICAgIGlmIChhY2Nlc3MgKHNpZ25hdHVyZV9zdHJpbmcsIFJfT0spKQorICAgICAgICBkaWUgKCJvcHRpb24gLS1zaWduYXR1cmUgbmVlZHMgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBmaWxlXG4iKTsKKworICAgICAgcnVuX3JzYV92ZXJpZnkgKGRhdGEsIGRhdGFsZW4sIGFsZ28sIHVzZV9wa2NzMSwga2V5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfc3RyaW5nKTsKKworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAobW9kZV9zdHJpbmcsICJkc2EtcHFnLWdlbiIpKQorICAgIHsKKyAgICAgIGludCBrZXlzaXplOworCisgICAgICBrZXlzaXplID0ga2V5c2l6ZV9zdHJpbmc/IGF0b2kgKGtleXNpemVfc3RyaW5nKSA6IDA7CisgICAgICBpZiAoa2V5c2l6ZSA8IDEwMjQgfHwga2V5c2l6ZSA+IDMwNzIpCisgICAgICAgIGRpZSAoImludmFsaWQga2V5c2l6ZSBzcGVjaWZpZWQ7IG5lZWRzIHRvIGJlIDEwMjQgLi4gMzA3MlxuIik7CisgICAgICBydW5fZHNhX3BxZ19nZW4gKGtleXNpemUsIGRhdGFsZW4/IGRhdGE6TlVMTCwgZGF0YWxlbik7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgImRzYS1nZW4iKSkKKyAgICB7CisgICAgICBpbnQga2V5c2l6ZTsKKworICAgICAga2V5c2l6ZSA9IGtleXNpemVfc3RyaW5nPyBhdG9pIChrZXlzaXplX3N0cmluZykgOiAwOworICAgICAgaWYgKGtleXNpemUgPCAxMDI0IHx8IGtleXNpemUgPiAzMDcyKQorICAgICAgICBkaWUgKCJpbnZhbGlkIGtleXNpemUgc3BlY2lmaWVkOyBuZWVkcyB0byBiZSAxMDI0IC4uIDMwNzJcbiIpOworICAgICAgaWYgKCFrZXlfc3RyaW5nKQorICAgICAgICBkaWUgKCJvcHRpb24gLS1rZXkgaXMgcmVxdWlyZWQgaW4gdGhpcyBtb2RlXG4iKTsKKyAgICAgIHJ1bl9kc2FfZ2VuIChrZXlzaXplLCBrZXlfc3RyaW5nKTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKG1vZGVfc3RyaW5nLCAiZHNhLXNpZ24iKSkKKyAgICB7CisgICAgICBpZiAoIWtleV9zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgaWYgKGFjY2VzcyAoa2V5X3N0cmluZywgUl9PSykpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBuZWVkcyB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGtleWZpbGVcbiIpOworICAgICAgaWYgKCFkYXRhKQorICAgICAgICBkaWUgKCJubyBkYXRhIGF2YWlsYWJsZSAoZG8gbm90IHVzZSAtLWNodW5rKVxuIik7CisKKyAgICAgIHJ1bl9kc2Ffc2lnbiAoZGF0YSwgZGF0YWxlbiwga2V5X3N0cmluZyk7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0cmluZywgImRzYS12ZXJpZnkiKSkKKyAgICB7CisgICAgICBpZiAoIWtleV9zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgaWYgKGFjY2VzcyAoa2V5X3N0cmluZywgUl9PSykpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLWtleSBuZWVkcyB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGtleWZpbGVcbiIpOworICAgICAgaWYgKCFkYXRhKQorICAgICAgICBkaWUgKCJubyBkYXRhIGF2YWlsYWJsZSAoZG8gbm90IHVzZSAtLWNodW5rKVxuIik7CisgICAgICBpZiAoIXNpZ25hdHVyZV9zdHJpbmcpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLXNpZ25hdHVyZSBpcyByZXF1aXJlZCBpbiB0aGlzIG1vZGVcbiIpOworICAgICAgaWYgKGFjY2VzcyAoc2lnbmF0dXJlX3N0cmluZywgUl9PSykpCisgICAgICAgIGRpZSAoIm9wdGlvbiAtLXNpZ25hdHVyZSBuZWVkcyB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGZpbGVcbiIpOworCisgICAgICBydW5fZHNhX3ZlcmlmeSAoZGF0YSwgZGF0YWxlbiwga2V5X3N0cmluZywgc2lnbmF0dXJlX3N0cmluZyk7CisgICAgfQorICBlbHNlCisgICAgdXNhZ2UgKDApOworCisgIGdjcnlfZnJlZSAoZGF0YSk7CisKKyAgLyogQmVjYXVzZSBMaWJnY3J5cHQgZG9lcyBub3QgZW5mb3JjZSBGSVBTIG1vZGUgaW4gYWxsIGNhc2VzIHdlIGxldAorICAgICB0aGUgcHJvY2VzcyBkaWUgaWYgTGliZ2NyeXB0IGlzIG5vdCBhbnltb3JlIGluIEZJUFMgbW9kZSBhZnRlcgorICAgICB0aGUgYWN0dWFsIG9wZXJhdGlvbi4gICovCisgIGlmICghbm9fZmlwcyAmJiAhZ2NyeV9maXBzX21vZGVfYWN0aXZlICgpKQorICAgIGRpZSAoIkZJUFMgbW9kZSBpcyBub3QgYW55bW9yZSBhY3RpdmVcbiIpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwdXRzIChQR00gIjogcmVhZHlcbiIsIHN0ZGVycik7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9nZW5oYXNoZGF0YS5jIGIvdGVzdHMvZ2VuaGFzaGRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZjNDliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ2VuaGFzaGRhdGEuYwpAQCAtMCwwICsxLDE3MSBAQAorLyogZ2VuaGFzaGRhdGEuYyAtIENyZWF0ZSBkYXRhIGZvciBoYXNoIHRlc3RzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKiBSZXN1bHRzOgorCiskICBmb3IgaSBpbiAtNjQgLTEgMCAxIDY0OyBkbyAuL2dlbmhhc2hkYXRhIC0tZ2lncyAyNTYgLS1ieXRlcyAkaXxzaGExc3VtO2RvbmUKKzkyZmM1MTg1MGM3Yjc1MGU2ZTc3NGI3NWYyOTRmNjk3OWQ0MDU5ZjAgIC0KKzRiZGRlZWI0YzA4NjgzZjAyZDQ5NDRkOTNkYmNiMDJlYmFiNTAxMzQgIC0KKzcxYjkyM2FmZGUxYzhjMDQwODg0YzcyM2EyZTMzMzViMzMzZTY0YzYgIC0KKzJkOTlmOWI1Yjg2ZTljOWM5MzcxMDRmNDI0MmJkNmI4YmMwOTI3ZWYgIC0KK2E2MGRhYmU4ZDc0OWY3OThiN2VjM2E2ODRjYzNlYWI0ODc0NTE0ODIgIC0KKworJCBmb3IgaSBpbiAtNjQgLTEgMCAxIDY0OyBkbyAuL2dlbmhhc2hkYXRhIC0tZ2lncyAyNTYgLS1ieXRlcyAkaXxzaGEyMjRzdW07ZG9uZQorYjU2NzJiNTRkMjQ4MGE1Njg4YTJkYzcyN2ExYWQ0ZGI3YTgxZWYzMWNlODk5OWUwYmJhZWZmZGMgIC0KKzgxNGVhNzE1OTQ3M2U2ZmZjMWM2NGI5MDAyNmE1NDJlMTNhYzY5ODBmN2YzY2EzYzQ1ODJhOWI4ICAtCis5ZWMwZTE4Mjk0NTVkYjg2NTBlYzdhOGIwNjkxMjE5NmY5N2E3MzU4YmMzYTczYzc5OTExY2Q0ZSAgLQorZTU3OGQ1ZDUyMzMyMDg3NjU2NWJiYmM4OTI1MTFhNDg1NDI3Y2FlZTZkZDc1NGQ1N2UzZTU4YzIgIC0KK2ZmMDQ2NGRmMjQ4Y2QyOThiNjM3NjViYzRmODdmMjFlMjVjOTNjNjU3ZmRmMzY1NmQzYzg3OGU1ICAtCisKKyQgZm9yIGkgaW4gLTY0IC0xIDAgMSA2NDsgZG8gLi9nZW5oYXNoZGF0YSAtLWdpZ3MgMjU2IC0tYnl0ZXMgJGl8c2hhMjU2c3VtO2RvbmUKKzg3YTk4MjhkM2RlNzhkNTVkMjUyMzQxZGIyYTYyMjkwOGM0ZTBjZWFlZTk5NjFlY2Y5NzY4NzAwZmM3OTllYzggIC0KKzgyM2JmOTVmNjRlZjA0YTRhNzc1NzljMzg3NjBiMWQ0MDFiNTZiZjNhOGU2NjRiZGY1NmNhMTVhZmI0NjhhMDMgIC0KKzJkMDcyMzg3OGNiMmMzZDVjNTlkZmFkOTEwY2RiODU3ZjQ0MzBhNmJhMmE3ZDY4NzkzOGQ3YTIwZTYzZGRlNDcgIC0KKzVhMmUyMWIxZTc5Y2Q4NjZhY2Y1M2EyYTE4Y2E3NmJkNGUwMmM0YjAxYmY0NjI3MzU0MTcxODI0YzgxMmQ5NWYgIC0KKzM0NDQ0ODA4YWY4ZTlkOTk1ZTY3ZjllMTU1ZWQ5NGJmNTVmMTk1YTUxZGMxZDhhOTg5ZTZiY2Y5NTUxMWM4YTIgIC0KKworCiskIGZvciBpIGluIC02NCAtMSAwIDEgNjQ7IGRvIC4vZ2VuaGFzaGRhdGEgLS1naWdzIDI1NiAtLWJ5dGVzICRpfHNoYTUxMnN1bTtkb25lCitlMDFiZjgxNDA4NzRiZjI0MGU4NDI2Y2IyYmNiYzM3N2NiZWQyZTYwMzczMzQxMTY2MzcxNDllMWNkOGNkNDYyIFwKKzk2ODI4YjcxZjMyYjlmMDAyNzcxZDRjYjUxMTcyY2U1NzhiNzNiNzkzOTIyMWU0ZGY2NTVlY2QwODYwMWU2NTUgIC0KKzQ5MTdmZjk0NTE0YjE3NTc3MDVjMjg5ZmRjM2U3ZDZmZmNjZTU3NzFiMjBhZTIzN2ViYzAzZDJlYzllYjQzNWYgXAorYjdjZTlmMGUyNzI3MmJlOGNjZWQ3N2E1ZWRhZTFhMDFhMGFkNjJiMGE0NDE2OWQ4OGJiZWU0NTQ3NGExNzczNCAgLQorMWUyOGU4YjNjNzlmMmY0N2RhMTFmM2MwYjdkYTRlNzk4MWU3ZDkzMmRiNmQxN2Q1MjhhMzFlMTkxOTIyZWRkYSBcCis4ZmM0YmIyZGYxMGVhODc2MjMyZGI1YTFjNjA2YmM0MTg4NmU4YjJjNTcwYTNlNzIxMjIxZjYwYzhjN2RjNGFiICAtCiswMjdkMzMyNGRkMWNmMTI3NzcwY2ViNTM2ODFmNGM3MDkzN2M5YmNhNGUzYWNkNWZkNzZjYjI2NmM3ZDQ1MjdkIFwKKzU4MTQwMjkwYTE4MjJlOGQ2MGM0ZDNhZTk3MjVmYjkyMzE4MzIzMGQ2ZGZkMmQ3ZDczYzBkNzRhNDc1N2YzNGEgIC0KKzQ5OTIwNzA0ZWE5ZDZlZTE5ZjA3NDJkNmM4NjgxMTBmYTNlZGE4YWMwOWYwMjZlOWVmMjJjYzczMWFmNTMwMjAgXAorZGU0MGVlZGVmNjZjYjFhZmQ5NGM2MWUyODVmYTkzMjdlMDEzMzZlODA0OTAzNzQwYTkxNDVhYjFmMDY1YzJkNSAgLQorCisqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIFBHTSAiZ2VuaGFzaGRhdGEiCisKK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHIgOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQgKSA7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0ciApOworICB2YV9lbmQoYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgIGV4aXQgKDEpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworICBpbnQgZ2lncyA9IDA7CisgIGludCBieXRlcyA9IDA7CisgIGNoYXIgcGF0dGVyblsxMDI0XTsKKyAgaW50IGksIGc7CisKKyAgaWYgKGFyZ2MpCisgICAgeyBhcmdjLS07IGFyZ3YrKzsgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorICAgICAgICB7CisgICAgICAgICAgZnB1dHMgKCJ1c2FnZTogIiBQR00gIiBbb3B0aW9uc11cbiIKKyAgICAgICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAgICAgICIgIC0tZ2lncyAgTiAgICAgRW1pdCBOIEdpQiBvZiB0ZXN0IGJ5dGVzXG4iCisgICAgICAgICAgICAgICAgICIgIC0tYnl0ZXMgRElGRiAgU3RvcCBESUZGIGJ5dGVzIGVhcmxpZXIgb3IgbGF0ZXJcbiIsCisgICAgICAgICAgICAgICAgIHN0ZG91dCk7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1naWdzIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBpZiAoYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2lncyA9IGF0b2kgKCphcmd2KTsKKyAgICAgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1ieXRlcyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJ5dGVzID0gYXRvaSAoKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cm5jbXAgKCphcmd2LCAiLS0iLCAyKSkKKyAgICAgICAgZGllICgidW5rbm93biBvcHRpb24gJyVzJyIsICphcmd2KTsKKyAgICB9CisKKyAgaWYgKGdpZ3MgPCAwIHx8IGdpZ3MgPiAxMDI0KjEwMjQpCisgICAgZGllICgidmFsdWUgZm9yIC0tZ2lncyBtdXN0IGJlIGluIHRoZSByYW5nZSAwIHRvICVkIiwgMTAyNCoxMDI0KTsKKyAgaWYgKGJ5dGVzIDwgLTEwMjQgfHwgYnl0ZXMgPiAxMDI0KQorICAgICAgZGllICgidmFsdWUgZm9yIC0tYnl0ZXMgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgLTEwMjQgdG8gMTAyNCIpOworICBpZiAoc2l6ZW9mIHBhdHRlcm4gIT0gMTAyNCkKKyAgICBkaWUgKCJpbnRlcm5hbCBlcnJvciIpOworCisgIGlmIChhcmdjID4gMSkKKyAgICBkaWUgKCJhcmd1bWVudHMgYXJlIG5vdCBleHBlY3RlZCIpOworCisgIG1lbXNldCAocGF0dGVybiwgJ2EnLCBzaXplb2YgcGF0dGVybik7CisKKyAgZm9yIChnPTA7IGcgPCBnaWdzOyBnKyspCisgICAgeworICAgICAgaWYgKGcgKyAxID09IGdpZ3MgJiYgYnl0ZXMgPCAwKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjQqMTAyMzsgaSsrKQorICAgICAgICAgICAgaWYgKGZ3cml0ZSAocGF0dGVybiwgc2l6ZW9mIHBhdHRlcm4sIDEsIHN0ZG91dCkgIT0gMSkKKyAgICAgICAgICAgICAgZGllICgid3JpdGluZyB0byBzdGRvdXQgZmFpbGVkOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDIzOyBpKyspCisgICAgICAgICAgICBpZiAoZndyaXRlIChwYXR0ZXJuLCBzaXplb2YgcGF0dGVybiwgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICAgICAgICBkaWUgKCJ3cml0aW5nIHRvIHN0ZG91dCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgaWYgKGZ3cml0ZSAocGF0dGVybiwgc2l6ZW9mIHBhdHRlcm4gKyBieXRlcywgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICAgICAgZGllICgid3JpdGluZyB0byBzdGRvdXQgZmFpbGVkOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNCoxMDI0OyBpKyspCisgICAgICAgICAgICBpZiAoZndyaXRlIChwYXR0ZXJuLCBzaXplb2YgcGF0dGVybiwgMSwgc3Rkb3V0KSAhPSAxKQorICAgICAgICAgICAgICBkaWUgKCJ3cml0aW5nIHRvIHN0ZG91dCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChieXRlcyA+IDApCisgICAgaWYgKGZ3cml0ZSAocGF0dGVybiwgYnl0ZXMsIDEsIHN0ZG91dCkgIT0gMSkKKyAgICAgIGRpZSAoIndyaXRpbmcgdG8gc3Rkb3V0IGZhaWxlZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgaWYgKGZmbHVzaCAoc3Rkb3V0KSkKKyAgICBkaWUgKCJ3cml0aW5nIHRvIHN0ZG91dCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9oYXNodGVzdC0yNTZnLmluIGIvdGVzdHMvaGFzaHRlc3QtMjU2Zy5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODk3YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGFzaHRlc3QtMjU2Zy5pbgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCithbGdvcz0iU0hBMSBTSEEyNTYgU0hBNTEyIgorCit0ZXN0ICJAUlVOX0xBUkdFX0RBVEFfVEVTVFNAIiA9IHllcyB8fCBleGl0IDc3CitlY2hvICIgICAgICBub3cgcnVubmluZyAyNTYgR2lCIHRlc3RzIGZvciAkYWxnb3MgLSB0aGlzIHRha2VzIGxvb29uZyIKK2V4ZWMgLi9oYXNodGVzdCAtLWdpZ3MgMjU2ICRhbGdvcwpkaWZmIC0tZ2l0IGEvdGVzdHMvaGFzaHRlc3QuYyBiL3Rlc3RzL2hhc2h0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiY2UwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hhc2h0ZXN0LmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qIGhhc2h0ZXN0LmMgLSBDaGVjayB0aGUgaGFzaCBmdWNudGlvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKKyNpbmNsdWRlICJzdG9wd2F0Y2guaCIKKworI2RlZmluZSBQR00gImhhc2h0ZXN0IgorCisjZGVmaW5lIG15X2lzYXNjaWkoYykgKCEoKGMpICYgMHg4MCkpCisjZGVmaW5lIGRpZ2l0cChwKSAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpIChkaWdpdHAgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdBJyAmJiAqKGEpIDw9ICdGJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorI2RlZmluZSB4dG9pXzEocCkgICAoKihwKSA8PSAnOSc/ICgqKHApLSAnMCcpOiBcCisgICAgICAgICAgICAgICAgICAgICAqKHApIDw9ICdGJz8gKCoocCktJ0EnKzEwKTooKihwKS0nYScrMTApKQorI2RlZmluZSB4dG9pXzIocCkgICAoKHh0b2lfMShwKSAqIDE2KSArIHh0b2lfMSgocCkrMSkpCisjZGVmaW5lIHhtYWxsb2MoYSkgICAgZ2NyeV94bWFsbG9jICgoYSkpCisjZGVmaW5lIHhjYWxsb2MoYSxiKSAgZ2NyeV94Y2FsbG9jICgoYSksKGIpKQorI2RlZmluZSB4c3RyZHVwKGEpICAgIGdjcnlfeHN0cmR1cCAoKGEpKQorI2RlZmluZSB4ZnJlZShhKSAgICAgIGdjcnlfZnJlZSAoKGEpKQorI2RlZmluZSBwYXNzKCkgICAgICAgIGRvIHsgOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBlcnJvcl9jb3VudDsKK3N0YXRpYyBpbnQgbWlzc2luZ190ZXN0X3ZlY3RvcnM7CisKK3N0YXRpYyBzdHJ1Y3QgeworICBpbnQgYWxnbzsKKyAgaW50IGdpZ3M7CisgIGludCBieXRlczsKKyAgY29uc3QgY2hhciAqaGV4OworfSB0ZXN0dmVjdG9yc1tdID0geworICB7IEdDUllfTURfU0hBMSwgMjU2LCAtNjQsICI5MmZjNTE4NTBjN2I3NTBlNmU3NzRiNzVmMjk0ZjY5NzlkNDA1OWYwIiB9LAorICB7IEdDUllfTURfU0hBMSwgMjU2LCAgLTEsICI0YmRkZWViNGMwODY4M2YwMmQ0OTQ0ZDkzZGJjYjAyZWJhYjUwMTM0IiB9LAorICB7IEdDUllfTURfU0hBMSwgMjU2LCAgLTAsICI3MWI5MjNhZmRlMWM4YzA0MDg4NGM3MjNhMmUzMzM1YjMzM2U2NGM2IiB9LAorICB7IEdDUllfTURfU0hBMSwgMjU2LCAgIDEsICIyZDk5ZjliNWI4NmU5YzljOTM3MTA0ZjQyNDJiZDZiOGJjMDkyN2VmIiB9LAorICB7IEdDUllfTURfU0hBMSwgMjU2LCAgNjQsICJhNjBkYWJlOGQ3NDlmNzk4YjdlYzNhNjg0Y2MzZWFiNDg3NDUxNDgyIiB9LAorCisgIHsgR0NSWV9NRF9TSEEyMjQsIDI1NiwgLTY0LAorICAgICJiNTY3MmI1NGQyNDgwYTU2ODhhMmRjNzI3YTFhZDRkYjdhODFlZjMxY2U4OTk5ZTBiYmFlZmZkYyIgfSwKKyAgeyBHQ1JZX01EX1NIQTIyNCwgMjU2LCAgLTEsCisgICAgIjgxNGVhNzE1OTQ3M2U2ZmZjMWM2NGI5MDAyNmE1NDJlMTNhYzY5ODBmN2YzY2EzYzQ1ODJhOWI4IiB9LAorICB7IEdDUllfTURfU0hBMjI0LCAyNTYsICAgMCwKKyAgICAiOWVjMGUxODI5NDU1ZGI4NjUwZWM3YThiMDY5MTIxOTZmOTdhNzM1OGJjM2E3M2M3OTkxMWNkNGUiIH0sCisgIHsgR0NSWV9NRF9TSEEyMjQsIDI1NiwgICAxLAorICAgICJlNTc4ZDVkNTIzMzIwODc2NTY1YmJiYzg5MjUxMWE0ODU0MjdjYWVlNmRkNzU0ZDU3ZTNlNThjMiIgfSwKKyAgeyBHQ1JZX01EX1NIQTIyNCwgMjU2LCAgNjQsCisgICAgImZmMDQ2NGRmMjQ4Y2QyOThiNjM3NjViYzRmODdmMjFlMjVjOTNjNjU3ZmRmMzY1NmQzYzg3OGU1IiB9LAorCisgIHsgR0NSWV9NRF9TSEEyNTYsIDI1NiwgLTY0LAorICAgICI4N2E5ODI4ZDNkZTc4ZDU1ZDI1MjM0MWRiMmE2MjI5MDhjNGUwY2VhZWU5OTYxZWNmOTc2ODcwMGZjNzk5ZWM4IiB9LAorICB7IEdDUllfTURfU0hBMjU2LCAyNTYsICAtMSwKKyAgICAiODIzYmY5NWY2NGVmMDRhNGE3NzU3OWMzODc2MGIxZDQwMWI1NmJmM2E4ZTY2NGJkZjU2Y2ExNWFmYjQ2OGEwMyIgfSwKKyAgeyBHQ1JZX01EX1NIQTI1NiwgMjU2LCAgIDAsCisgICAgIjJkMDcyMzg3OGNiMmMzZDVjNTlkZmFkOTEwY2RiODU3ZjQ0MzBhNmJhMmE3ZDY4NzkzOGQ3YTIwZTYzZGRlNDciIH0sCisgIHsgR0NSWV9NRF9TSEEyNTYsIDI1NiwgICAxLAorICAgICI1YTJlMjFiMWU3OWNkODY2YWNmNTNhMmExOGNhNzZiZDRlMDJjNGIwMWJmNDYyNzM1NDE3MTgyNGM4MTJkOTVmIiB9LAorICB7IEdDUllfTURfU0hBMjU2LCAyNTYsICA2NCwKKyAgICAiMzQ0NDQ4MDhhZjhlOWQ5OTVlNjdmOWUxNTVlZDk0YmY1NWYxOTVhNTFkYzFkOGE5ODllNmJjZjk1NTExYzhhMiIgfSwKKworICB7IEdDUllfTURfU0hBNTEyLCAyNTYsIC02NCwKKyAgICAiZTAxYmY4MTQwODc0YmYyNDBlODQyNmNiMmJjYmMzNzdjYmVkMmU2MDM3MzM0MTE2NjM3MTQ5ZTFjZDhjZDQ2MiIKKyAgICAiOTY4MjhiNzFmMzJiOWYwMDI3NzFkNGNiNTExNzJjZTU3OGI3M2I3OTM5MjIxZTRkZjY1NWVjZDA4NjAxZTY1NSIgfSwKKyAgeyBHQ1JZX01EX1NIQTUxMiwgMjU2LCAgLTEsCisgICAgIjQ5MTdmZjk0NTE0YjE3NTc3MDVjMjg5ZmRjM2U3ZDZmZmNjZTU3NzFiMjBhZTIzN2ViYzAzZDJlYzllYjQzNWYiCisgICAgImI3Y2U5ZjBlMjcyNzJiZThjY2VkNzdhNWVkYWUxYTAxYTBhZDYyYjBhNDQxNjlkODhiYmVlNDU0NzRhMTc3MzQiIH0sCisgIHsgR0NSWV9NRF9TSEE1MTIsIDI1NiwgICAwLAorICAgICIxZTI4ZThiM2M3OWYyZjQ3ZGExMWYzYzBiN2RhNGU3OTgxZTdkOTMyZGI2ZDE3ZDUyOGEzMWUxOTE5MjJlZGRhIgorICAgICI4ZmM0YmIyZGYxMGVhODc2MjMyZGI1YTFjNjA2YmM0MTg4NmU4YjJjNTcwYTNlNzIxMjIxZjYwYzhjN2RjNGFiIiB9LAorICB7IEdDUllfTURfU0hBNTEyLCAyNTYsICAgMSwKKyAgICAiMDI3ZDMzMjRkZDFjZjEyNzc3MGNlYjUzNjgxZjRjNzA5MzdjOWJjYTRlM2FjZDVmZDc2Y2IyNjZjN2Q0NTI3ZCIKKyAgICAiNTgxNDAyOTBhMTgyMmU4ZDYwYzRkM2FlOTcyNWZiOTIzMTgzMjMwZDZkZmQyZDdkNzNjMGQ3NGE0NzU3ZjM0YSIgfSwKKyAgeyBHQ1JZX01EX1NIQTUxMiwgMjU2LCAgNjQsCisgICAgIjQ5OTIwNzA0ZWE5ZDZlZTE5ZjA3NDJkNmM4NjgxMTBmYTNlZGE4YWMwOWYwMjZlOWVmMjJjYzczMWFmNTMwMjAiCisgICAgImRlNDBlZWRlZjY2Y2IxYWZkOTRjNjFlMjg1ZmE5MzI3ZTAxMzM2ZTgwNDkwMzc0MGE5MTQ1YWIxZjA2NWMyZDUiIH0sCisKKyAgeyAwIH0KK307CisKKworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIgKTsKKyAgdmFfZW5kKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgLyogaWYgKHdoZXJlc3RyKSAqLworICAvKiAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7ICovCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBlcnJvcl9jb3VudCsrOworICBpZiAoZXJyb3JfY291bnQgPj0gNTApCisgICAgZGllICgic3RvcHBlZCBhZnRlciA1MCBlcnJvcnMuIik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93IChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworCitzdGF0aWMgdm9pZAorc2hvd2hleCAoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworCisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKworICBmb3IgKHM9YnVmZmVyOyBidWZsZW47IGJ1Zmxlbi0tLCBzKyspCisgICAgZnByaW50ZiAoc3RkZXJyLCAiJTAyeCIsICpzKTsKKyAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKK30KKworCitzdGF0aWMgdm9pZAorc2hvd19ub3RlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGlmICghdmVyYm9zZSAmJiBnZXRlbnYgKCJzcmNkaXIiKSkKKyAgICBmcHV0cyAoIiAgICAgICIsIHN0ZGVycik7ICAvKiBUbyBhbGlnbiBhYm92ZSAiUEFTUzogIi4gICovCisgIGVsc2UKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgIHZhX2VuZCAoYXJnX3B0cik7Cit9CisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2hleDJidWZmZXIgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IHhtYWxsb2MgKHN0cmxlbihzdHJpbmcpLzIrMSk7CisgIGxlbmd0aCA9IDA7CisgIGZvciAocz1zdHJpbmc7ICpzOyBzICs9MiApCisgICAgeworICAgICAgaWYgKCFoZXhkaWdpdHAgKHMpIHx8ICFoZXhkaWdpdHAgKHMrMSkpCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgLyogSW52YWxpZCBoZXggZGlnaXRzLiAqLworICAgICAgKCh1bnNpZ25lZCBjaGFyKilidWZmZXIpW2xlbmd0aCsrXSA9IHh0b2lfMiAocyk7CisgICAgfQorICAqcl9sZW5ndGggPSBsZW5ndGg7CisgIHJldHVybiBidWZmZXI7Cit9CisKKworc3RhdGljIHZvaWQKK3J1bl9zZWxmdGVzdCAoaW50IGFsZ28pCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgc2l6ZV90IG47CisKKyAgbiA9IDE7CisgIGVyciA9IGdjcnlfbWRfYWxnb19pbmZvIChhbGdvLCBHQ1JZQ1RMX1NFTEZURVNULCBOVUxMLCAmbik7CisgIGlmIChlcnIgJiYgZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEKQorICAgIGZhaWwgKCJleHRlbmRlZCBzZWxmdGVzdCBmb3IgJXMgKCVkKSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbyksIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGVsc2UgaWYgKGVyciAmJiB2ZXJib3NlKQorICAgIHNob3cgKCJleHRlbmRlZCBzZWxmdGVzdCBmb3IgJXMgKCVkKSBub3QgaW1wbGVtZW50ZWQiLAorICAgICAgICAgIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSwgYWxnbyk7CisgIGVsc2UgaWYgKHZlcmJvc2UpCisgICAgc2hvdyAoImV4dGVuZGVkIHNlbGZ0ZXN0IGZvciAlcyAoJWQpIHBhc3NlZCIsCisgICAgICAgICAgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pLCBhbGdvKTsKK30KKworLyogQ29tcGFyZSBESUdFU1Qgb2YgbGVuZ3RoIERJR0VTVExFTiBnZW5lcmF0ZWQgdXNpbmcgQUxHTyBhbmQgR0lHUworICAgcGx1cyBCWVRFUyB3aXRoIHRoZSB0ZXN0IHZlY3RvciBhbmQgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUKKyAgIGRvbid0IG1hdGNoLiAgUmV0dXJuIDAgb24gbWF0Y2guICAqLworc3RhdGljIGludAorY21wX2RpZ2VzdCAoY29uc3QgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBzaXplX3QgZGlnZXN0bGVuLAorICAgICAgICAgICAgaW50IGFsZ28sIGludCBnaWdzLCBpbnQgYnl0ZXMpCit7CisgIGludCBpZHg7CisgIHVuc2lnbmVkIGNoYXIgKnR2X2RpZ2VzdDsKKyAgc2l6ZV90IHR2X2RpZ2VzdGxlbiA9IDA7CisKKyAgZm9yIChpZHg9MDsgdGVzdHZlY3RvcnNbaWR4XS5hbGdvOyBpZHgrKykKKyAgICB7CisgICAgICBpZiAodGVzdHZlY3RvcnNbaWR4XS5hbGdvID09IGFsZ28KKyAgICAgICAgICAmJiB0ZXN0dmVjdG9yc1tpZHhdLmdpZ3MgPT0gZ2lncworICAgICAgICAgICYmIHRlc3R2ZWN0b3JzW2lkeF0uYnl0ZXMgPT0gYnl0ZXMpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgaWYgKCF0ZXN0dmVjdG9yc1tpZHhdLmFsZ28pCisgICAgeworICAgICAgc2hvdyAoIiVkIEdpQiAlKzNkICUtMTBzIHdhcm5pbmc6ICVzIiwKKyAgICAgICAgICAgIGdpZ3MsIGJ5dGVzLCBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbyksICJubyB0ZXN0IHZlY3RvciIpOworICAgICAgbWlzc2luZ190ZXN0X3ZlY3RvcnMrKzsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICB0dl9kaWdlc3QgPSBoZXgyYnVmZmVyICh0ZXN0dmVjdG9yc1tpZHhdLmhleCwgJnR2X2RpZ2VzdGxlbik7CisgIGlmICh0dl9kaWdlc3RsZW4gIT0gZGlnZXN0bGVuKSAvKiBPb29wcy4gICovCisgICAgeworICAgICAgZmFpbCAoIiVkIEdpQiAlKzNkICUtMTBzIGVycm9yOiAlcyIsCisgICAgICAgICAgICBnaWdzLCBieXRlcywgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pLCAiZGlnZXN0IGxlbmd0aCBtaXNtYXRjaCIpOworICAgICAgeGZyZWUgKHR2X2RpZ2VzdCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGlmIChtZW1jbXAgKHR2X2RpZ2VzdCwgZGlnZXN0LCB0dl9kaWdlc3RsZW4pKQorICAgIHsKKyAgICAgIGZhaWwgKCIlZCBHaUIgJSszZCAlLTEwcyBlcnJvcjogJXMiLAorICAgICAgICAgICAgZ2lncywgYnl0ZXMsIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSwgIm1pc21hdGNoIik7CisgICAgICB4ZnJlZSAodHZfZGlnZXN0KTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgeGZyZWUgKHR2X2RpZ2VzdCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK3J1bl9sb25ndGVzdCAoaW50IGFsZ28sIGludCBnaWdzKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfbWRfaGRfdCBoZDsKKyAgZ2NyeV9tZF9oZF90IGhkX3ByZSA9IE5VTEw7CisgIGdjcnlfbWRfaGRfdCBoZF9wcmUyID0gTlVMTDsKKyAgZ2NyeV9tZF9oZF90IGhkX3Bvc3QgPSBOVUxMOworICBnY3J5X21kX2hkX3QgaGRfcG9zdDIgPSBOVUxMOworICBjaGFyIHBhdHRlcm5bMTAyNF07CisgIGludCBpLCBnOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIHVuc2lnbmVkIGludCBkaWdlc3RsZW47CisKKyAgbWVtc2V0IChwYXR0ZXJuLCAnYScsIHNpemVvZiBwYXR0ZXJuKTsKKworICBlcnIgPSBnY3J5X21kX29wZW4gKCZoZCwgYWxnbywgMCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImdjcnlfbWRfb3BlbiBmYWlsZWQgZm9yICVzICglZCk6ICVzIiwKKyAgICAgICAgICAgIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSwgYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZGlnZXN0bGVuID0gZ2NyeV9tZF9nZXRfYWxnb19kbGVuIChhbGdvKTsKKworCisgIGZvciAoZz0wOyBnIDwgZ2lnczsgZysrKQorICAgIHsKKyAgICAgIGlmIChnID09IGdpZ3MgLSAxKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjQqMTAyMzsgaSsrKQorICAgICAgICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsIHBhdHRlcm4sIHNpemVvZiBwYXR0ZXJuKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyMzsgaSsrKQorICAgICAgICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsIHBhdHRlcm4sIHNpemVvZiBwYXR0ZXJuKTsKKyAgICAgICAgICBlcnIgPSBnY3J5X21kX2NvcHkgKCZoZF9wcmUsIGhkKTsKKyAgICAgICAgICBpZiAoIWVycikKKyAgICAgICAgICAgIGVyciA9IGdjcnlfbWRfY29weSAoJmhkX3ByZTIsIGhkKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZGllICgiZ2NyeV9tZF9jb3B5IGZhaWxlZCBmb3IgJXMgKCVkKTogJXMiLAorICAgICAgICAgICAgICAgICBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbyksIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsIHBhdHRlcm4sIHNpemVvZiBwYXR0ZXJuKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjQqMTAyNDsgaSsrKQorICAgICAgICAgICAgZ2NyeV9tZF93cml0ZSAoaGQsIHBhdHRlcm4sIHNpemVvZiBwYXR0ZXJuKTsKKyAgICAgICAgfQorICAgICAgaWYgKGcgJiYgIShnICUgMTYpKQorICAgICAgICBzaG93X25vdGUgKCIlZCBHaUIgc28gZmFyIGhhc2hlZCB3aXRoICVzIiwgZywgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pKTsKKyAgICB9CisgIGlmIChnID49IDE2KQorICAgIHNob3dfbm90ZSAoIiVkIEdpQiBoYXNoZWQgd2l0aCAlcyIsIGcsIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSk7CisKKyAgZXJyID0gZ2NyeV9tZF9jb3B5ICgmaGRfcG9zdCwgaGQpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbWRfY29weSBmYWlsZWQgZm9yICVzICglZCk6ICVzIiwKKyAgICAgICAgIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSwgYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgZXJyID0gZ2NyeV9tZF9jb3B5ICgmaGRfcG9zdDIsIGhkKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X21kX2NvcHkgZmFpbGVkIGZvciAlcyAoJWQpOiAlcyIsCisgICAgICAgICBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbyksIGFsZ28sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9tZF93cml0ZSAoaGRfcHJlMiwgcGF0dGVybiwgc2l6ZW9mIHBhdHRlcm4gLSA2NCk7CisgIGdjcnlfbWRfd3JpdGUgKGhkX3ByZSwgcGF0dGVybiwgc2l6ZW9mIHBhdHRlcm4gLSAxKTsKKyAgZ2NyeV9tZF93cml0ZSAoaGRfcG9zdCwgcGF0dGVybiwgMSk7CisgIGdjcnlfbWRfd3JpdGUgKGhkX3Bvc3QyLCBwYXR0ZXJuLCA2NCk7CisKKyAgZGlnZXN0ID0gZ2NyeV9tZF9yZWFkIChoZF9wcmUyLCBhbGdvKTsKKyAgaWYgKGNtcF9kaWdlc3QgKGRpZ2VzdCwgZGlnZXN0bGVuLCBhbGdvLCBnaWdzLCAtNjQpIHx8IHZlcmJvc2UpCisgICAgc2hvd2hleCAoZGlnZXN0LCBkaWdlc3RsZW4sICIlZCBHaUIgJSszZCAlLTEwcyAiLAorICAgICAgICAgICAgIGdpZ3MsIC02NCwgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pKTsKKyAgZGlnZXN0ID0gZ2NyeV9tZF9yZWFkIChoZF9wcmUsIGFsZ28pOworICBpZiAoY21wX2RpZ2VzdCAoZGlnZXN0LCBkaWdlc3RsZW4sIGFsZ28sIGdpZ3MsIC0xKSB8fCB2ZXJib3NlKQorICAgIHNob3doZXggKGRpZ2VzdCwgZGlnZXN0bGVuLCAiJWQgR2lCICUrM2QgJS0xMHMgIiwKKyAgICAgICAgICAgICBnaWdzLCAtMSwgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pKTsKKyAgZGlnZXN0ID0gZ2NyeV9tZF9yZWFkIChoZCwgYWxnbyk7CisgIGlmIChjbXBfZGlnZXN0IChkaWdlc3QsIGRpZ2VzdGxlbiwgYWxnbywgZ2lncywgMCkgfHwgdmVyYm9zZSkKKyAgICBzaG93aGV4IChkaWdlc3QsIGRpZ2VzdGxlbiwgIiVkIEdpQiAlKzNkICUtMTBzICIsCisgICAgICAgICAgICAgZ2lncywgMCwgZ2NyeV9tZF9hbGdvX25hbWUgKGFsZ28pKTsKKyAgZGlnZXN0ID0gZ2NyeV9tZF9yZWFkIChoZF9wb3N0LCBhbGdvKTsKKyAgaWYgKGNtcF9kaWdlc3QgKGRpZ2VzdCwgZGlnZXN0bGVuLCBhbGdvLCBnaWdzLCAxKSB8fCB2ZXJib3NlKQorICAgIHNob3doZXggKGRpZ2VzdCwgZGlnZXN0bGVuLCAiJWQgR2lCICUrM2QgJS0xMHMgIiwKKyAgICAgICAgICAgICBnaWdzLCAxLCBnY3J5X21kX2FsZ29fbmFtZSAoYWxnbykpOworICBkaWdlc3QgPSBnY3J5X21kX3JlYWQgKGhkX3Bvc3QyLCBhbGdvKTsKKyAgaWYgKGNtcF9kaWdlc3QgKGRpZ2VzdCwgZGlnZXN0bGVuLCBhbGdvLCBnaWdzLCA2NCkgfHwgdmVyYm9zZSkKKyAgICBzaG93aGV4IChkaWdlc3QsIGRpZ2VzdGxlbiwgIiVkIEdpQiAlKzNkICUtMTBzICIsCisgICAgICAgICAgICAgZ2lncywgNjQsIGdjcnlfbWRfYWxnb19uYW1lIChhbGdvKSk7CisKKyAgZ2NyeV9tZF9jbG9zZSAoaGQpOworICBnY3J5X21kX2Nsb3NlIChoZF9wcmUpOworICBnY3J5X21kX2Nsb3NlIChoZF9wcmUyKTsKKyAgZ2NyeV9tZF9jbG9zZSAoaGRfcG9zdCk7CisgIGdjcnlfbWRfY2xvc2UgKGhkX3Bvc3QyKTsKK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworICBpbnQgZ2lncyA9IDA7CisgIGludCBhbGdvID0gMDsKKyAgaW50IGlkeDsKKworICBpZiAoYXJnYykKKyAgICB7IGFyZ2MtLTsgYXJndisrOyB9CisKKyAgd2hpbGUgKGFyZ2MgJiYgbGFzdF9hcmdjICE9IGFyZ2MgKQorICAgIHsKKyAgICAgIGxhc3RfYXJnYyA9IGFyZ2M7CisgICAgICBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1oZWxwIikpCisgICAgICAgIHsKKyAgICAgICAgICBmcHV0cyAoInVzYWdlOiAiIFBHTSAiIFtvcHRpb25zXSBbYWxnb3NdXG4iCisgICAgICAgICAgICAgICAgICJPcHRpb25zOlxuIgorICAgICAgICAgICAgICAgICAiICAtLXZlcmJvc2UgICAgICAgcHJpbnQgdGltaW5ncyBldGMuXG4iCisgICAgICAgICAgICAgICAgICIgIC0tZGVidWcgICAgICAgICBmbHlzd2F0dGVyXG4iCisgICAgICAgICAgICAgICAgICIgIC0tZ2lncyBOICAgICAgICBSdW4gYSB0ZXN0IG9uIE4gR2lCXG4iLAorICAgICAgICAgICAgICAgICBzdGRvdXQpOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSsrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVidWciKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UgKz0gMjsKKyAgICAgICAgICBkZWJ1ZysrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZ2lncyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdpZ3MgPSBhdG9pICgqYXJndik7CisgICAgICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RybmNtcCAoKmFyZ3YsICItLSIsIDIpKQorICAgICAgICBkaWUgKCJ1bmtub3duIG9wdGlvbiAnJXMnIiwgKmFyZ3YpOworICAgIH0KKworICBpZiAoZ2lncyA8IDAgfHwgZ2lncyA+IDEwMjQqMTAyNCkKKyAgICBkaWUgKCJ2YWx1ZSBmb3IgLS1naWdzIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgdG8gJWQiLCAxMDI0KjEwMjQpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSAsIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgLyogQSBxdWljayBjaGVjayB0aGF0IGFsbCBnaXZlbiBhbGdvcml0aG1zIGFyZSB2YWxpZC4gICovCisgIGZvciAoaWR4PTA7IGlkeCA8IGFyZ2M7IGlkeCsrKQorICAgIHsKKyAgICAgIGFsZ28gPSBnY3J5X21kX21hcF9uYW1lIChhcmd2W2lkeF0pOworICAgICAgaWYgKCFhbGdvKQorICAgICAgICBmYWlsICgiaW52YWxpZCBhbGdvcml0aG0gJyVzJyIsIGFyZ3ZbaWR4XSk7CisgICAgfQorICBpZiAoZXJyb3JfY291bnQpCisgICAgZXhpdCAoMSk7CisKKyAgLyogU3RhcnQgY2hlY2tpbmcuICAqLworICBzdGFydF90aW1lciAoKTsKKyAgaWYgKCFhcmdjKQorICAgIHsKKyAgICAgIGZvciAoYWxnbz0xOyBhbGdvIDwgNDAwOyBhbGdvKyspCisgICAgICAgIGlmICghZ2NyeV9tZF90ZXN0X2FsZ28gKGFsZ28pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2lncykKKyAgICAgICAgICAgICAgcnVuX3NlbGZ0ZXN0IChhbGdvKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcnVuX2xvbmd0ZXN0IChhbGdvLCBnaWdzKTsKKyAgICAgICAgICB9CisgICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaWR4PTA7IGlkeCA8IGFyZ2M7IGlkeCsrKQorICAgICAgICB7CisgICAgICAgICAgYWxnbyA9IGdjcnlfbWRfbWFwX25hbWUgKGFyZ3ZbaWR4XSk7CisgICAgICAgICAgaWYgKCFhbGdvKQorICAgICAgICAgICAgZGllICgiaW52YWxpZCBhbGdvcml0aG0gJyVzJyIsIGFyZ3ZbaWR4XSk7CisKKyAgICAgICAgICBpZiAoIWdpZ3MpCisgICAgICAgICAgICBydW5fc2VsZnRlc3QgKGFsZ28pOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJ1bl9sb25ndGVzdCAoYWxnbywgZ2lncyk7CisgICAgICAgIH0KKyAgICB9CisgIHN0b3BfdGltZXIgKCk7CisKKyAgaWYgKG1pc3NpbmdfdGVzdF92ZWN0b3JzKQorICAgIGZhaWwgKCJTb21lIHRlc3QgdmVjdG9ycyBhcmUgbWlzc2luZyIpOworCisgIGlmICh2ZXJib3NlKQorICAgIHNob3cgKCJBbGwgdGVzdHMgY29tcGxldGVkIGluICVzLiAgRXJyb3JzOiAlZFxuIiwKKyAgICAgICAgICBlbGFwc2VkX3RpbWUgKCksIGVycm9yX2NvdW50KTsKKyAgcmV0dXJuICEhZXJyb3JfY291bnQ7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9obWFjLmMgYi90ZXN0cy9obWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYzk0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2htYWMuYwpAQCAtMCwwICsxLDIyOSBAQAorLyogaG1hYy5jIC0gIEhNQUMgcmVncmVzc2lvbiB0ZXN0cworICoJQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CisKK3N0YXRpYyB2b2lkCitmYWlsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBlcnJvcl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworCisKK3N0YXRpYyB2b2lkCitjaGVja19vbmVfbWFjIChpbnQgYWxnbywKKyAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXhwZWN0KQoreworICBnY3J5X21kX2hkX3QgaGQ7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBtZGxlbjsKKyAgaW50IGk7CisgIGdjcnlfZXJyb3JfdCBlcnIgPSAwOworCisgIGVyciA9IGdjcnlfbWRfb3BlbiAoJmhkLCBhbGdvLCBHQ1JZX01EX0ZMQUdfSE1BQyk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImFsZ28gJWQsIGdjcnlfbWRfb3BlbiBmYWlsZWQ6ICVzXG4iLCBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBtZGxlbiA9IGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiAoYWxnbyk7CisgIGlmIChtZGxlbiA8IDEgfHwgbWRsZW4gPiA1MDApCisgICAgeworICAgICAgZmFpbCAoImFsZ28gJWQsIGdjcnlfbWRfZ2V0X2FsZ29fZGxlbiBmYWlsZWQ6ICVkXG4iLCBhbGdvLCBtZGxlbik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGVyciA9IGdjcnlfbWRfc2V0a2V5IChoZCwga2V5LCBrZXlsZW4pOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJhbGdvICVkLCBnY3J5X21kX3NldGtleSBmYWlsZWQ6ICVzXG4iLCBhbGdvLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBnY3J5X21kX3dyaXRlIChoZCwgZGF0YSwgZGF0YWxlbik7CisKKyAgcCA9IGdjcnlfbWRfcmVhZCAoaGQsIDApOworCisgIGlmIChtZW1jbXAgKHAsIGV4cGVjdCwgbWRsZW4pKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNvbXB1dGVkOiAiKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQorCXByaW50ZiAoIiUwMnggIiwgcFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG5leHBlY3RlZDogIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIGV4cGVjdFtpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG4iKTsKKworICAgICAgZmFpbCAoImFsZ28gJWQsIE1BQyBkb2VzIG5vdCBtYXRjaFxuIiwgYWxnbyk7CisgICAgfQorCisgIGdjcnlfbWRfY2xvc2UgKGhkKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX2htYWMgKHZvaWQpCit7CisgIHVuc2lnbmVkIGNoYXIga2V5WzEyOF07CisgIGludCBpLCBqOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgImNoZWNraW5nIEZJUFMtMTk4YSwgQS4xXG4iKTsKKyAgZm9yIChpPTA7IGkgPCA2NDsgaSsrKQorICAgIGtleVtpXSA9IGk7CisgIGNoZWNrX29uZV9tYWMgKEdDUllfTURfU0hBMSwga2V5LCA2NCwgIlNhbXBsZSAjMSIsIDksCisgICAgICAgICAgICAgICAgICJceDRmXHg0Y1x4YTNceGQ1XHhkNlx4OGJceGE3XHhjY1x4MGFceDEyIgorICAgICAgICAgICAgICAgICAiXHgwOFx4YzlceGM2XHgxZVx4OWNceDVkXHhhMFx4NDBceDNjXHgwYSIpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgImNoZWNraW5nIEZJUFMtMTk4YSwgQS4yXG4iKTsKKyAgZm9yIChpPTAsIGo9MHgzMDsgaSA8IDIwOyBpKyspCisgICAga2V5W2ldID0gaisrOworICBjaGVja19vbmVfbWFjIChHQ1JZX01EX1NIQTEsIGtleSwgMjAsICJTYW1wbGUgIzIiLCA5LAorICAgICAgICAgICAgICAgICAiXHgwOVx4MjJceGQzXHg0MFx4NWZceGFhXHgzZFx4MTlceDRmXHg4MiIKKyAgICAgICAgICAgICAgICAgIlx4YTRceDU4XHgzMFx4NzNceDdkXHg1Y1x4YzZceGM3XHg1ZFx4MjQiKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJjaGVja2luZyBGSVBTLTE5OGEsIEEuM1xuIik7CisgIGZvciAoaT0wLCBqPTB4NTA7IGkgPCAxMDA7IGkrKykKKyAgICBrZXlbaV0gPSBqKys7CisgIGNoZWNrX29uZV9tYWMgKEdDUllfTURfU0hBMSwga2V5LCAxMDAsICJTYW1wbGUgIzMiLCA5LAorICAgICAgICAgICAgICAgICAiXHhiY1x4ZjRceDFlXHhhYlx4OGJceGIyXHhkOFx4MDJceGYzXHhkMCIKKyAgICAgICAgICAgICAgICAgIlx4NWNceGFmXHg3Y1x4YjBceDkyXHhlY1x4ZjhceGQxXHhhM1x4YWEiKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJjaGVja2luZyBGSVBTLTE5OGEsIEEuNFxuIik7CisgIGZvciAoaT0wLCBqPTB4NzA7IGkgPCA0OTsgaSsrKQorICAgIGtleVtpXSA9IGorKzsKKyAgY2hlY2tfb25lX21hYyAoR0NSWV9NRF9TSEExLCBrZXksIDQ5LCAiU2FtcGxlICM0IiwgOSwKKyAgICAgICAgICAgICAgICAgIlx4OWVceGE4XHg4Nlx4ZWZceGUyXHg2OFx4ZGJceGVjXHhjZVx4NDIiCisgICAgICAgICAgICAgICAgICJceDBjXHg3NVx4MjRceGRmXHgzMlx4ZTBceDc1XHgxYVx4MmFceDI2Iik7CisKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfaG1hY19tdWx0aSAodm9pZCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICB1bnNpZ25lZCBjaGFyIGtleVsxMjhdOworICBjb25zdCBjaGFyIG1zZ1tdID0gIlNhbXBsZSAjMSI7CisgIGNvbnN0IGNoYXIgbWFjW10gPSAoIlx4NGZceDRjXHhhM1x4ZDVceGQ2XHg4Ylx4YTdceGNjXHgwYVx4MTIiCisgICAgICAgICAgICAgICAgICAgICAgIlx4MDhceGM5XHhjNlx4MWVceDljXHg1ZFx4YTBceDQwXHgzY1x4MGEiKTsKKyAgZ2NyeV9idWZmZXJfdCBpb3ZbNF07CisgIGNoYXIgZGlnZXN0WzY0XTsKKyAgaW50IGk7CisgIGludCBhbGdvOworICBpbnQgbWFjbGVuOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgImNoZWNraW5nIEhNQUMgdXNpbmcgbXVsdGlwbGUgYnVmZmVyc1xuIik7CisgIGZvciAoaT0wOyBpIDwgNjQ7IGkrKykKKyAgICBrZXlbaV0gPSBpOworCisgIG1lbXNldCAoaW92LCAwLCBzaXplb2YgaW92KTsKKyAgaW92WzBdLmRhdGEgPSBrZXk7CisgIGlvdlswXS5sZW4gPSA2NDsKKyAgaW92WzFdLmRhdGEgPSAodm9pZCopbXNnOworICBpb3ZbMV0ub2ZmID0gMDsKKyAgaW92WzFdLmxlbiA9IDM7CisgIGlvdlsyXS5kYXRhID0gKHZvaWQqKW1zZzsKKyAgaW92WzJdLm9mZiA9IDM7CisgIGlvdlsyXS5sZW4gPSAxOworICBpb3ZbM10uZGF0YSA9ICh2b2lkKiltc2c7CisgIGlvdlszXS5vZmYgPSA0OworICBpb3ZbM10ubGVuID0gNTsKKworICBhbGdvID0gR0NSWV9NRF9TSEExOworICBtYWNsZW4gPSBnY3J5X21kX2dldF9hbGdvX2RsZW4gKGFsZ28pOworICBlcnIgPSBnY3J5X21kX2hhc2hfYnVmZmVycyAoYWxnbywgR0NSWV9NRF9GTEFHX0hNQUMsIGRpZ2VzdCwgaW92LCA0KTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBmYWlsICgiZ2NyeV9tZF9oYXNoX2J1ZmZlcnMgZmFpbGVkOiAlc1xuIiwgYWxnbywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG1lbWNtcCAoZGlnZXN0LCBtYWMsIG1hY2xlbikpCisgICAgeworICAgICAgcHJpbnRmICgiY29tcHV0ZWQ6ICIpOworICAgICAgZm9yIChpID0gMDsgaSA8IG1hY2xlbjsgaSsrKQorCXByaW50ZiAoIiUwMnggIiwgZGlnZXN0W2ldICYgMHhGRik7CisgICAgICBwcmludGYgKCJcbmV4cGVjdGVkOiAiKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBtYWNsZW47IGkrKykKKwlwcmludGYgKCIlMDJ4ICIsIG1hY1tpXSAmIDB4RkYpOworICAgICAgcHJpbnRmICgiXG4iKTsKKworICAgICAgZmFpbCAoImdjcnlfbWRfaGFzaF9idWZmZXJzLCBhbGdvICVkLCBNQUMgZG9lcyBub3QgbWF0Y2hcbiIsIGFsZ28pOworICAgIH0KK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS1kZWJ1ZyIpKQorICAgIHZlcmJvc2UgPSBkZWJ1ZyA9IDE7CisKKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICBkaWUgKCJ2ZXJzaW9uIG1pc21hdGNoXG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworICBjaGVja19obWFjICgpOworICBjaGVja19obWFjX211bHRpICgpOworCisgIHJldHVybiBlcnJvcl9jb3VudCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMva2V5Z2VuLmMgYi90ZXN0cy9rZXlnZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWZmOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva2V5Z2VuLmMKQEAgLTAsMCArMSw1OTAgQEAKKy8qIGtleWdlbi5jICAtICBrZXkgZ2VuZXJhdGlvbiByZWdyZXNzaW9uIHRlc3RzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKKworI2RlZmluZSBQR00gImtleWdlbiIKKworI2RlZmluZSB4bWFsbG9jKGEpICAgIGdjcnlfeG1hbGxvYyAoKGEpKQorI2RlZmluZSB4Y2FsbG9jKGEsYikgIGdjcnlfeGNhbGxvYyAoKGEpLChiKSkKKyNkZWZpbmUgeHN0cmR1cChhKSAgICBnY3J5X3hzdHJkdXAgKChhKSkKKyNkZWZpbmUgeGZyZWUoYSkgICAgICBnY3J5X2ZyZWUgKChhKSkKKyNkZWZpbmUgcGFzcygpICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCkKKworCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBlcnJvcl9jb3VudDsKKworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIgKTsKKyAgdmFfZW5kKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgLyogaWYgKHdoZXJlc3RyKSAqLworICAvKiAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7ICovCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBlcnJvcl9jb3VudCsrOworICBpZiAoZXJyb3JfY291bnQgPj0gNTApCisgICAgZGllICgic3RvcHBlZCBhZnRlciA1MCBlcnJvcnMuIik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93IChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworCisvKiBzdGF0aWMgdm9pZCAqLworLyogc2hvd19ub3RlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgKi8KKy8qIHsgKi8KKy8qICAgdmFfbGlzdCBhcmdfcHRyOyAqLworCisvKiAgIGlmICghdmVyYm9zZSAmJiBnZXRlbnYgKCJzcmNkaXIiKSkgKi8KKy8qICAgICBmcHV0cyAoIiAgICAgICIsIHN0ZGVycik7ICAvXCogVG8gYWxpZ24gYWJvdmUgIlBBU1M6ICIuICAqXC8gKi8KKy8qICAgZWxzZSAqLworLyogICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOyAqLworLyogICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsgKi8KKy8qICAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsgKi8KKy8qICAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpICovCisvKiAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsgKi8KKy8qICAgdmFfZW5kIChhcmdfcHRyKTsgKi8KKy8qIH0gKi8KKworCitzdGF0aWMgdm9pZAorc2hvd19zZXhwIChjb25zdCBjaGFyICpwcmVmaXgsIGdjcnlfc2V4cF90IGEpCit7CisgIGNoYXIgKmJ1ZjsKKyAgc2l6ZV90IHNpemU7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIGlmIChwcmVmaXgpCisgICAgZnB1dHMgKHByZWZpeCwgc3RkZXJyKTsKKyAgc2l6ZSA9IGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgTlVMTCwgMCk7CisgIGJ1ZiA9IHhtYWxsb2MgKHNpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCisKK3N0YXRpYyB2b2lkCitzaG93X21waSAoY29uc3QgY2hhciAqcHJlZml4LCBnY3J5X21waV90IGEpCit7CisgIGNoYXIgKmJ1ZjsKKyAgdm9pZCAqYnVmYWRkciA9ICZidWY7CisgIGdjcnlfZXJyb3JfdCByYzsKKworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgaWYgKHByZWZpeCkKKyAgICBmcHV0cyAocHJlZml4LCBzdGRlcnIpOworICByYyA9IGdjcnlfbXBpX2FwcmludCAoR0NSWU1QSV9GTVRfSEVYLCBidWZhZGRyLCBOVUxMLCBhKTsKKyAgaWYgKHJjKQorICAgIGZwcmludGYgKHN0ZGVyciwgIltlcnJvciBwcmludGluZyBudW1iZXI6ICVzXVxuIiwgIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBidWYpOworICAgICAgZ2NyeV9mcmVlIChidWYpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZ2VuZXJhdGVkX3JzYV9rZXkgKGdjcnlfc2V4cF90IGtleSwgdW5zaWduZWQgbG9uZyBleHBlY3RlZF9lKQoreworICBnY3J5X3NleHBfdCBza2V5LCBwa2V5LCBsaXN0OworCisgIHBrZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHVibGljLWtleSIsIDApOworICBpZiAoIXBrZXkpCisgICAgZmFpbCAoInB1YmxpYyBwYXJ0IG1pc3NpbmcgaW4gcmV0dXJuIHZhbHVlXG4iKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGdjcnlfbXBpX3QgZSA9IE5VTEw7CisKKyAgICAgIGxpc3QgPSBnY3J5X3NleHBfZmluZF90b2tlbiAocGtleSwgImUiLCAwKTsKKyAgICAgIGlmICghbGlzdCB8fCAhKGU9Z2NyeV9zZXhwX250aF9tcGkgKGxpc3QsIDEsIDApKSApCisgICAgICAgIGZhaWwgKCJwdWJsaWMgZXhwb25lbnQgbm90IGZvdW5kXG4iKTsKKyAgICAgIGVsc2UgaWYgKCFleHBlY3RlZF9lKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBzaG93X21waSAoInB1YmxpYyBleHBvbmVudDogIiwgZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBnY3J5X21waV9jbXBfdWkgKGUsIGV4cGVjdGVkX2UpKQorICAgICAgICB7CisgICAgICAgICAgc2hvd19tcGkgKCJwdWJsaWMgZXhwb25lbnQ6ICIsIGUpOworICAgICAgICAgIGZhaWwgKCJwdWJsaWMgZXhwb25lbnQgaXMgbm90ICVsdVxuIiwgZXhwZWN0ZWRfZSk7CisgICAgICAgIH0KKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChsaXN0KTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKGUpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICAgIH0KKworICBza2V5ID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleSwgInByaXZhdGUta2V5IiwgMCk7CisgIGlmICghc2tleSkKKyAgICBmYWlsICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4gcmV0dXJuIHZhbHVlXG4iKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCByYyA9IGdjcnlfcGtfdGVzdGtleSAoc2tleSk7CisgICAgICBpZiAocmMpCisgICAgICAgIGZhaWwgKCJnY3J5X3BrX3Rlc3RrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNrZXkpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfcnNhX2tleXMgKHZvaWQpCit7CisgIGdjcnlfc2V4cF90IGtleXBhcm0sIGtleTsKKyAgaW50IHJjOworCisgIGlmICh2ZXJib3NlKQorICAgIHNob3cgKCJjcmVhdGluZyAxMDI0IGJpdCBSU0Ega2V5XG4iKTsKKyAgcmMgPSBnY3J5X3NleHBfbmV3ICgma2V5cGFybSwKKyAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgKHJzYVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgIChuYml0cyA0OjEwMjQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiApKSIsIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlwYXJtKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXBhcm0pOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBSU0Ega2V5OiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiMTAyNCBiaXQgUlNBIGtleTpcbiIsIGtleSk7CisgIGNoZWNrX2dlbmVyYXRlZF9yc2Ffa2V5IChrZXksIDY1NTM3KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisKKworICBpZiAodmVyYm9zZSkKKyAgICBzaG93ICgiY3JlYXRpbmcgNTEyIGJpdCBSU0Ega2V5IHdpdGggZT0yNTdcbiIpOworICByYyA9IGdjcnlfc2V4cF9uZXcgKCZrZXlwYXJtLAorICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAocnNhXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgKG5iaXRzIDM6NTEyKVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgIChyc2EtdXNlLWUgMzoyNTcpXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiApKSIsIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlwYXJtKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXBhcm0pOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBSU0Ega2V5OiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworCisgIGNoZWNrX2dlbmVyYXRlZF9yc2Ffa2V5IChrZXksIDI1Nyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworCisgIGlmICh2ZXJib3NlKQorICAgIHNob3cgKCJjcmVhdGluZyA1MTIgYml0IFJTQSBrZXkgd2l0aCBkZWZhdWx0IGVcbiIpOworICByYyA9IGdjcnlfc2V4cF9uZXcgKCZrZXlwYXJtLAorICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAocnNhXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgKG5iaXRzIDM6NTEyKVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgIChyc2EtdXNlLWUgMTowKVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgKSkiLCAwLCAxKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbjogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgcmMgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5cGFybSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlwYXJtKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgUlNBIGtleTogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKworICBjaGVja19nZW5lcmF0ZWRfcnNhX2tleSAoa2V5LCAwKTsgLyogV2UgZG9uJ3QgZXhwZWN0IGEgY29uc3RhbnQgZXhwb25lbnQuICovCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19lbGdfa2V5cyAodm9pZCkKK3sKKyAgZ2NyeV9zZXhwX3Qga2V5cGFybSwga2V5OworICBpbnQgcmM7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgc2hvdyAoImNyZWF0aW5nIDEwMjQgYml0IEVsZ2FtYWwga2V5XG4iKTsKKyAgcmMgPSBnY3J5X3NleHBfbmV3ICgma2V5cGFybSwKKyAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgKGVsZ1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgIChuYml0cyA0OjEwMjQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiApKSIsIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlwYXJtKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXBhcm0pOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBFbGdhbWFsIGtleTogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgaWYgKHZlcmJvc2UgPiAxKQorICAgIHNob3dfc2V4cCAoIjEwMjQgYml0IEVsZ2FtYWwga2V5OlxuIiwga2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2RzYV9rZXlzICh2b2lkKQoreworICBnY3J5X3NleHBfdCBrZXlwYXJtLCBrZXk7CisgIGludCByYzsKKyAgaW50IGk7CisKKyAgLyogQ2hlY2sgdGhhdCBEU0EgZ2VuZXJhdGlvbiB3b3JrcyBhbmQgdGhhdCBpdCBjYW4gZ3JvayB0aGUgcWJpdHMKKyAgICAgYXJndW1lbnQuICovCisgIGlmICh2ZXJib3NlKQorICAgIHNob3cgKCJjcmVhdGluZyA1IDEwMjQgYml0IERTQSBrZXlzXG4iKTsKKyAgZm9yIChpPTA7IGkgPCA1OyBpKyspCisgICAgeworICAgICAgcmMgPSBnY3J5X3NleHBfbmV3ICgma2V5cGFybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIihnZW5rZXlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoZHNhXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgIChuYml0cyA0OjEwMjQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgKSkiLCAwLCAxKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgcmMgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5cGFybSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5cGFybSk7CisgICAgICBpZiAocmMpCisgICAgICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgRFNBIGtleTogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgICAgIGlmICghaSAmJiB2ZXJib3NlID4gMSkKKyAgICAgICAgc2hvd19zZXhwICgiMTAyNCBiaXQgRFNBIGtleTpcbiIsIGtleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgICB9CisKKyAgaWYgKHZlcmJvc2UpCisgICAgc2hvdyAoImNyZWF0aW5nIDE1MzYgYml0IERTQSBrZXlcbiIpOworICByYyA9IGdjcnlfc2V4cF9uZXcgKCZrZXlwYXJtLAorICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAoZHNhXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgKG5iaXRzIDQ6MTUzNilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAocWJpdHMgMzoyMjQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiApKSIsIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlwYXJtKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXBhcm0pOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBEU0Ega2V5OiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiMTUzNiBiaXQgRFNBIGtleTpcbiIsIGtleSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19nZW5lcmF0ZWRfZWNjX2tleSAoZ2NyeV9zZXhwX3Qga2V5KQoreworICBnY3J5X3NleHBfdCBza2V5LCBwa2V5OworCisgIHBrZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHVibGljLWtleSIsIDApOworICBpZiAoIXBrZXkpCisgICAgZmFpbCAoInB1YmxpYyBwYXJ0IG1pc3NpbmcgaW4gcmV0dXJuIHZhbHVlXG4iKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEZpeG1lOiBDaGVjayBtb3JlIHN0dWZmLiAgKi8KKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgICB9CisKKyAgc2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNrZXkpCisgICAgZmFpbCAoInByaXZhdGUgcGFydCBtaXNzaW5nIGluIHJldHVybiB2YWx1ZVxuIik7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgcmMgPSBnY3J5X3BrX3Rlc3RrZXkgKHNrZXkpOworICAgICAgaWYgKHJjKQorICAgICAgICBmYWlsICgiZ2NyeV9wa190ZXN0a2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChza2V5KTsKKyAgICB9CisKKyAgLyogRmluYWxseSBjaGVjayB0aGF0IGdjcnlfcGtfdGVzdGtleSBhbHNvIHdvcmtzIG9uIHRoZSBlbnRpcmUKKyAgICAgUy1leHByZXNzaW9uLiAgKi8KKyAgeworICAgIGludCByYyA9IGdjcnlfcGtfdGVzdGtleSAoa2V5KTsKKyAgICBpZiAocmMpCisgICAgICBmYWlsICgiZ2NyeV9wa190ZXN0a2V5IGZhaWxlZCBvbiBrZXkgcGFpcjogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgfQorfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19lY2Nfa2V5cyAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqY3VydmVzW10gPSB7ICJOSVNUIFAtNTIxIiwgIk5JU1QgUC0zODQiLCAiTklTVCBQLTI1NiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWQyNTUxOSIsIE5VTEwgfTsKKyAgaW50IHRlc3RubzsKKyAgZ2NyeV9zZXhwX3Qga2V5cGFybSwga2V5OworICBpbnQgcmM7CisKKyAgZm9yICh0ZXN0bm89MDsgY3VydmVzW3Rlc3Rub107IHRlc3RubysrKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBzaG93ICgiY3JlYXRpbmcgRUNDIGtleSB1c2luZyBjdXJ2ZSAlc1xuIiwgY3VydmVzW3Rlc3Rub10pOworICAgICAgaWYgKCFzdHJjbXAgKGN1cnZlc1t0ZXN0bm9dLCAiRWQyNTUxOSIpKQorICAgICAgICByYyA9IGdjcnlfc2V4cF9idWlsZCAoJmtleXBhcm0sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleShlY2MoY3VydmUgJXMpKGZsYWdzIHBhcmFtIGVkZHNhKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlc1t0ZXN0bm9dKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlwYXJtLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihnZW5rZXkoZWNjKGN1cnZlICVzKShmbGFncyBwYXJhbSkpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZXNbdGVzdG5vXSk7CisgICAgICBpZiAocmMpCisgICAgICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbjogJXNcbiIsIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgICAgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleXBhcm0pOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleXBhcm0pOworICAgICAgaWYgKHJjKQorICAgICAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIEVDQyBrZXkgdXNpbmcgY3VydmUgJXM6ICVzXG4iLAorICAgICAgICAgICAgIGN1cnZlc1t0ZXN0bm9dLCBncGdfc3RyZXJyb3IgKHJjKSk7CisKKyAgICAgIGlmICh2ZXJib3NlID4gMSkKKyAgICAgICAgc2hvd19zZXhwICgiRUNDIGtleTpcbiIsIGtleSk7CisKKyAgICAgIGNoZWNrX2dlbmVyYXRlZF9lY2Nfa2V5IChrZXkpOworCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgICB9CisKKyAgaWYgKHZlcmJvc2UpCisgICAgc2hvdyAoImNyZWF0aW5nIEVDQyBrZXkgdXNpbmcgY3VydmUgRWQyNTUxOSBmb3IgRUNEU0FcbiIpOworICByYyA9IGdjcnlfc2V4cF9idWlsZCAoJmtleXBhcm0sIE5VTEwsICIoZ2Vua2V5KGVjYyhjdXJ2ZSBFZDI1NTE5KSkpIik7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBjcmVhdGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleXBhcm0pOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5cGFybSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIEVDQyBrZXkgdXNpbmcgY3VydmUgRWQyNTUxOSBmb3IgRUNEU0E6ICVzXG4iLAorICAgICAgICAgZ3BnX3N0cmVycm9yIChyYykpOworCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBzaG93X3NleHAgKCJFQ0Mga2V5OlxuIiwga2V5KTsKKworICBjaGVja19nZW5lcmF0ZWRfZWNjX2tleSAoa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgc2hvdyAoImNyZWF0aW5nIEVDQyBrZXkgdXNpbmcgY3VydmUgRWQyNTUxOSBmb3IgRUNEU0EgKG5vY29tcClcbiIpOworICByYyA9IGdjcnlfc2V4cF9idWlsZCAoJmtleXBhcm0sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAiKGdlbmtleShlY2MoY3VydmUgRWQyNTUxOSkoZmxhZ3Mgbm9jb21wKSkpIik7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBjcmVhdGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleXBhcm0pOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5cGFybSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIEVDQyBrZXkgdXNpbmcgY3VydmUgRWQyNTUxOSBmb3IgRUNEU0EiCisgICAgICAgICAiIChub2NvbXApOiAlc1xuIiwKKyAgICAgICAgIGdwZ19zdHJlcnJvciAocmMpKTsKKworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiRUNDIGtleTpcbiIsIGtleSk7CisKKyAgY2hlY2tfZ2VuZXJhdGVkX2VjY19rZXkgKGtleSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX25vbmNlICh2b2lkKQoreworICBjaGFyIGFbMzJdLCBiWzMyXTsKKyAgaW50IGksajsKKyAgaW50IG9vcHM9MDsKKworICBpZiAodmVyYm9zZSkKKyAgICBzaG93ICgiY2hlY2tpbmcgZ2NyeV9jcmVhdGVfbm9uY2VcbiIpOworCisgIGdjcnlfY3JlYXRlX25vbmNlIChhLCBzaXplb2YgYSk7CisgIGZvciAoaT0wOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBnY3J5X2NyZWF0ZV9ub25jZSAoYiwgc2l6ZW9mIGIpOworICAgICAgaWYgKCFtZW1jbXAgKGEsIGIsIHNpemVvZiBhKSkKKyAgICAgICAgZGllICgiaWRlbnRpY2FsIG5vbmNlIGZvdW5kXG4iKTsKKyAgICB9CisgIGZvciAoaT0wOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBnY3J5X2NyZWF0ZV9ub25jZSAoYSwgc2l6ZW9mIGEpOworICAgICAgaWYgKCFtZW1jbXAgKGEsIGIsIHNpemVvZiBhKSkKKyAgICAgICAgZGllICgiaWRlbnRpY2FsIG5vbmNlIGZvdW5kXG4iKTsKKyAgICB9CisKKyBhZ2FpbjoKKyAgZm9yIChpPTEsaj0wOyBpIDwgc2l6ZW9mIGE7IGkrKykKKyAgICBpZiAoYVswXSA9PSBhW2ldKQorICAgICAgaisrOworICBpZiAoaisxID09IHNpemVvZiAoYSkpCisgICAgeworICAgICAgaWYgKG9vcHMpCisgICAgICAgIGRpZSAoImltcG9zc2libGUgbm9uY2UgZm91bmRcbiIpOworICAgICAgb29wcysrOworICAgICAgZ2NyeV9jcmVhdGVfbm9uY2UgKGEsIHNpemVvZiBhKTsKKyAgICAgIGdvdG8gYWdhaW47CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzc19jYiAodm9pZCAqY2JfZGF0YSwgY29uc3QgY2hhciAqd2hhdCwgaW50IHByaW50Y2hhciwKKwkJICBpbnQgY3VycmVudCwgaW50IHRvdGFsKQoreworICAodm9pZCljYl9kYXRhOworICAodm9pZCl3aGF0OworICAodm9pZCljdXJyZW50OworICAodm9pZCl0b3RhbDsKKworICBpZiAocHJpbnRjaGFyID09ICdcbicpCisgICAgZnB1dHMgKCAiPExGPiIsIHN0ZG91dCk7CisgIGVsc2UKKyAgICBwdXRjaGFyIChwcmludGNoYXIpOworICBmZmx1c2ggKHN0ZG91dCk7Cit9CisKKworc3RhdGljIHZvaWQKK3VzYWdlIChpbnQgbW9kZSkKK3sKKyAgZnB1dHMgKCJ1c2FnZTogIiBQR00gIiBbb3B0aW9uc10gW3tyc2F8ZWxnfGRzYXxlY2N8bm9uY2V9XVxuIgorICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAiICAtLXZlcmJvc2UgICAgICAgYmUgdmVyYm9zZVxuIgorICAgICAgICAgIiAgLS1kZWJ1ZyAgICAgICAgIGZseXN3YXR0ZXJcbiIKKyAgICAgICAgICIgIC0tcHJvZ3Jlc3MgICAgICBwcmludCBwcm9ncmVzcyBpbmRpY2F0b3JzXG4iLAorICAgICAgICAgbW9kZT8gc3RkZXJyIDogc3Rkb3V0KTsKKyAgaWYgKG1vZGUpCisgICAgZXhpdCAoMSk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGludCB3aXRoX3Byb2dyZXNzID0gMDsKKworICBpZiAoYXJnYykKKyAgICB7IGFyZ2MtLTsgYXJndisrOyB9CisKKyAgd2hpbGUgKGFyZ2MgJiYgbGFzdF9hcmdjICE9IGFyZ2MgKQorICAgIHsKKyAgICAgIGxhc3RfYXJnYyA9IGFyZ2M7CisgICAgICBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1oZWxwIikpCisgICAgICAgIHsKKyAgICAgICAgICB1c2FnZSAoMCk7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJib3NlIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlKys7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1kZWJ1ZyIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSArPSAyOworICAgICAgICAgIGRlYnVnKys7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wcm9ncmVzcyIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgd2l0aF9wcm9ncmVzcyA9IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJuY21wICgqYXJndiwgIi0tIiwgMikpCisgICAgICAgIGRpZSAoInVua25vd24gb3B0aW9uICclcyciLCAqYXJndik7CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOworICAgIH0KKworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUgLCAwKTsKKyAgLyogTm8gdmFsdWFibGUga2V5cyBhcmUgY3JlYXRlLCBzbyB3ZSBjYW4gc3BlZWQgdXAgb3VyIFJORy4gKi8KKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET00sIDApOworICBpZiAod2l0aF9wcm9ncmVzcykKKyAgICBnY3J5X3NldF9wcm9ncmVzc19oYW5kbGVyIChwcm9ncmVzc19jYiwgTlVMTCk7CisKKyAgaWYgKCFhcmdjKQorICAgIHsKKyAgICAgIGNoZWNrX3JzYV9rZXlzICgpOworICAgICAgY2hlY2tfZWxnX2tleXMgKCk7CisgICAgICBjaGVja19kc2Ffa2V5cyAoKTsKKyAgICAgIGNoZWNrX2VjY19rZXlzICgpOworICAgICAgY2hlY2tfbm9uY2UgKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKQorICAgICAgICBpZiAoIXN0cmNtcCAoKmFyZ3YsICJyc2EiKSkKKyAgICAgICAgICBjaGVja19yc2Ffa2V5cyAoKTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJlbGciKSkKKyAgICAgICAgICBjaGVja19lbGdfa2V5cyAoKTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJkc2EiKSkKKyAgICAgICAgICBjaGVja19kc2Ffa2V5cyAoKTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJlY2MiKSkKKyAgICAgICAgICBjaGVja19lY2Nfa2V5cyAoKTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICJub25jZSIpKQorICAgICAgICAgIGNoZWNrX25vbmNlICgpOworICAgICAgICBlbHNlCisgICAgICAgICAgdXNhZ2UgKDEpOworICAgIH0KKworICByZXR1cm4gZXJyb3JfY291bnQ/IDE6MDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2tleWdyaXAuYyBiL3Rlc3RzL2tleWdyaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA5MzVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva2V5Z3JpcC5jCkBAIC0wLDAgKzEsMzAzIEBACisvKiBrZXlncmlwLmMgLSB2ZXJpZmllcyB0aGF0IGtleWdyaXBzIGFyZSBjYWxjdWxhdGVkIGFzIGV4cGVjdGVkCisgKglDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IHJlcGV0aXRpb25zOworCisMCisKK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIGV4aXQgKDEpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfaGV4IChjb25zdCBjaGFyICp0ZXh0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgIGZwdXRzICh0ZXh0LCBzdGRvdXQpOworICBmb3IgKDsgbjsgbi0tLCBwKyspCisgICAgcHJpbnRmICgiJTAyWCIsICpwKTsKKyAgcHV0Y2hhciAoJ1xuJyk7Cit9CisKKworDAorCitzdGF0aWMgc3RydWN0Cit7CisgIGludCBhbGdvOworICBjb25zdCBjaGFyICprZXk7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ3JpcFsyMF07Cit9IGtleV9ncmlwc1tdID0KKyAgeworICAgIHsKKyAgICAgIEdDUllfUEtfUlNBLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKHJzYSIKKyAgICAgICIgIChuICMwMEI2QjUwOTU5NkE5RUNBQkM5MzkyMTJGODkxRTY1NkE2MjZCQTA3REE4NTIxQTlDQUQ0QzA4RTY0MEMwNDA1MkZCQjg3RjQyNEVGMUEwMjc1QTQ4QTkyOTlBQzlEQjY5QUJFM0QwMTI0RTZDNzU2QjFGN0RGQjlCODQyRDYyNTFBRUE2RUU4NTM5MDQ5NUNBREE3M0Q2NzE1MzdGQ0U1ODUwQTkzMkYzMkJBQjYwQUIxQUMxRjg1MkMxRjgzQzYyNUU3QTdENzBDREE5RUYxNkQ1QzhFNDc3MzlENzdERjU5MjYxQUJFODQ1NDgwN0ZGNDQxRTE0M0ZCRDM3Rjg1NDUjKSIKKyAgICAgICIgIChlICMwMTAwMDEjKSIKKyAgICAgICIgIChkICMwNzdBRDNERTI4NDI0NUY0ODA2QTFCODJCNzlFNjE2RkJERTgyMUM4MkQ2OTFBNjU2NjVFNTdCNUZBRDNGMzRFNjdGNDAxRTdCRDJFMjg2OTlFODlEOUM0OTZDRjgyMTk0NUFFODNBQzdBMTIzMTE3NkExOTZCQTYwMjdFNzdEODU3ODkwNTVENTA0MDRBN0EyQTk1QjE1MTJGOTFGMTkwQkJBRUY3MzBFRDU1MEQyMjdENTEyRjg5QzBDREIzMUFDMDZGQTlBMTk1MDNEREY2QjY2RDBCNDJCOTY5MUJGRDYxNDBFQzE3MjBGRkM0OEFFMDBDMzQ3OTZEQzg5OUU1IykiCisgICAgICAiICAocCAjMDBENTg2Qzc4RTVGMUI0QkYyRTdDRDdBMDRDQTA5MTkxMTcwNkYxOTc4OEI5M0U0NEVFMjBBQUY0NjJFODM2M0U5OEE3MjI1M0VEODQ1Q0NCRjI0ODFCQjM1MUU4NTU3Qzg1QkNGRkYwREFCREJGRjhFMjZBNzlBMDkzODA5NkYyNyMpIgorICAgICAgIiAgKHEgIzAwREIwQ0RGNjBGMjZGMkEyOTZDODhENkJGOUY4RTVCRTQ1QzBEREQ3MTNDOTZDQzczRUJDQjQ4QjA2MTc0MDk0M0YyMUQyQTkzRDZFNDJBNzIxMUU3RjAyQTk1RENFRDZDMzkwQTY3QUQyMUVDRjczOUFFOEEwQ0E0NkZGMkVCQjMjKSIKKyAgICAgICIgICh1ICMzMzE0OTE5NUYxNjkxMkRCMjBBNDhEMDIwREJDM0I5RTM4ODFCMzlENzIyQkY3OTM3OEY2MzQwRjQzMTQ4QTZFOUZDNUY1M0UyODUzQjczODdCQTQ0NDNCQTUzQTUyRkNBODE3M0RFNkU4NUI0MkY5NzgzRDRBNzgxN0QwNjgwQiMpKSkiLAorICAgICAgIlx4MzJceENGXHhGQVx4ODVceEIxXHg3OVx4MUZceEJCXHgyNlx4MTRceEU5XHgxQVx4RkRceEYzXHhBRlx4RTNceDMyXHgwOFx4MkVceDI1IgorICAgIH0sCisgICAgeworICAgICAgR0NSWV9QS19EU0EsCisgICAgICAiIChwdWJsaWMta2V5IgorICAgICAgIiAoZHNhIgorICAgICAgIiAgKHAgIzAwODRFNEM2MjZFMTYwMDU3NzBCRDk1MDlBQkY3MzU0NDkyRTg1QjhDMDA2MEVGQUFBRUM2MTdGNzI1QjU5MkZBQTU5REY1NDYwNTc1RjQxMDIyNzc2QTk3MThDRTYyRURENTQyQUI3M0M3NzIwODY5RUJEQkM4MzREMTc0QURDRDcxMzY4MjdERjUxRTI2MTM1NDVBMjVDQTU3M0JDNTAyQTYxQjgwOTAwMEI2RTM1RjVFQjdGRDZGMThDMzU2NzhDMjNFQTFDMzYzOEZCOUNGREJBMjgwMEVFMUI2MkY0MUE0NDc5REU4MjRGMjgzNDY2NkZCRjhEQzVCNTNDMjYxNyMpIgorICAgICAgIiAgKHEgIzAwQjBFNkY3MTAwNTEwMDJBOUY0MjVEOThBNjc3QjE4RTBFNUIwMzhBQiMpIgorICAgICAgIiAgKGcgIzQ0MzcwQ0VFMEZFODYwOTk5NDE4M0RCRkVCQTdFRUE5N0Q0NjY4MzhCQ0Y2NUVGRjUwNkUzNTYxNkRBOTNGQTRFNTcyQTJGMDg4ODZCNzQ5NzdCQzAwQ0E4Q0QzREJFQTdBRUI3REI4Q0JCMTgwRTY5NzVFMEQyQ0E3NkUwMjNFNkRFOUY4Q0NEODgyNkVCQTJGNzJCODUxNjUzMkY2MDAxREVGRkFFNzZBQTVFNTlFMEZBMzNEQkEzOTk5QjRFOTJEMTcwMzA5OENERURDQzQxNkNGMDA4ODAxOTY0MDg0Q0RFMTk4MDEzMkIyQjc4Q0I0Q0U5QzE1QTU1OTUyOEIjKSIKKyAgICAgICIgICh5ICMzRDVERDE0QUZBMkJGMjRBNzkxRTI4NUI5MDIzMjIxM0QwRTNCQTc0QUIxMTA5RTc2OEFFRDE5NjM5QTMyMkY4NEJCN0Q5NTlFMkJBOTJFRjczREU0QzdGMzgxQUE5RjQwNTNDRkEzQ0Q0NTI3RUY5MDQzRTMwNEU1Qjk1RUQwQTNBNUE5RDU5MEFBNjQxQzEzREIyQjZFMzJCOUI5NjRBNkEyQzczMEREM0VBN0M4RTEzRjdBMTQwQUZGMUE5MUNFMzc1RTlCOUI5NjAzODQ3NzlEQzRFQTE4MEZBMUY4MjdDNTIyODhGMzY2QzA3NzBBMjIwRjUwRDZEOEZENkY2IykpKSIsCisgICAgICAiXHgwNFx4QTNceDRGXHhBMFx4MkJceDAzXHg5NFx4RDdceDMyXHhBRFx4RDVceDlCXHg1MFx4QUZceERCXHg1RFx4NTdceDIyXHhBNlx4MTAiCisKKyAgICB9LAorICAgIHsKKyAgICAgIEdDUllfUEtfRFNBLAorICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICIgKGRzYSIKKyAgICAgICIgIChwICMwMDg0RTRDNjI2RTE2MDA1NzcwQkQ5NTA5QUJGNzM1NDQ5MkU4NUI4QzAwNjBFRkFBQUVDNjE3RjcyNUI1OTJGQUE1OURGNTQ2MDU3NUY0MTAyMjc3NkE5NzE4Q0U2MkVERDU0MkFCNzNDNzcyMDg2OUVCREJDODM0RDE3NEFEQ0Q3MTM2ODI3REY1MUUyNjEzNTQ1QTI1Q0E1NzNCQzUwMkE2MUI4MDkwMDBCNkUzNUY1RUI3RkQ2RjE4QzM1Njc4QzIzRUExQzM2MzhGQjlDRkRCQTI4MDBFRTFCNjJGNDFBNDQ3OURFODI0RjI4MzQ2NjZGQkY4REM1QjUzQzI2MTcjKSIKKyAgICAgICIgIChxICMwMEIwRTZGNzEwMDUxMDAyQTlGNDI1RDk4QTY3N0IxOEUwRTVCMDM4QUIjKSIKKyAgICAgICIgIChnICM0NDM3MENFRTBGRTg2MDk5OTQxODNEQkZFQkE3RUVBOTdENDY2ODM4QkNGNjVFRkY1MDZFMzU2MTZEQTkzRkE0RTU3MkEyRjA4ODg2Qjc0OTc3QkMwMENBOENEM0RCRUE3QUVCN0RCOENCQjE4MEU2OTc1RTBEMkNBNzZFMDIzRTZERTlGOENDRDg4MjZFQkEyRjcyQjg1MTY1MzJGNjAwMURFRkZBRTc2QUE1RTU5RTBGQTMzREJBMzk5OUI0RTkyRDE3MDMwOThDREVEQ0M0MTZDRjAwODgwMTk2NDA4NENERTE5ODAxMzJCMkI3OENCNENFOUMxNUE1NTk1MjhCIykiCisgICAgICAiICAoeSAjM0Q1REQxNEFGQTJCRjI0QTc5MUUyODVCOTAyMzIyMTNEMEUzQkE3NEFCMTEwOUU3NjhBRUQxOTYzOUEzMjJGODRCQjdEOTU5RTJCQTkyRUY3M0RFNEM3RjM4MUFBOUY0MDUzQ0ZBM0NENDUyN0VGOTA0M0UzMDRFNUI5NUVEMEEzQTVBOUQ1OTBBQTY0MUMxM0RCMkI2RTMyQjlCOTY0QTZBMkM3MzBERDNFQTdDOEUxM0Y3QTE0MEFGRjFBOTFDRTM3NUU5QjlCOTYwMzg0Nzc5REM0RUExODBGQTFGODI3QzUyMjg4RjM2NkMwNzcwQTIyMEY1MEQ2RDhGRDZGNiMpIgorICAgICAgIiAgKHggIzAwODdGOUU5MUJGQkNDMTE2M0RFNzFFRDg2RDU1NzcwOEUzMkY4QURERSMpKSkiLAorICAgICAgIlx4MDRceEEzXHg0Rlx4QTBceDJCXHgwM1x4OTRceEQ3XHgzMlx4QURceEQ1XHg5Qlx4NTBceEFGXHhEQlx4NURceDU3XHgyMlx4QTZceDEwIgorICAgIH0sCisgICAgeworICAgICAgR0NSWV9QS19FQ0RTQSwKKyAgICAgICIocHVibGljLWtleSIKKyAgICAgICIgKGVjZHNhKGZsYWdzIHBhcmFtKSIKKyAgICAgICIgKHAgIzAwRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiMpIgorICAgICAgIiAoYSAjMDBGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDIykiCisgICAgICAiIChiICM1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCIykiCisgICAgICAiIChnICMwNDZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTY0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1IykiCisgICAgICAiIChuICMwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTEjKSIKKyAgICAgICIgKHEgIzA0QzhBNENFQzJFOUE5QkM4RTE3MzUzMUE2N0IwODQwREYzNDVDMzJFMjYxQURENzgwRTZEODNENTZFRkFERkQ1REU4NzJGOEI4NTQ4MTlCNTk1NDNDRTBCN0Y4MjIzMzA0NjRGQkM0RTYzMjREQUREQ0Q5RDA1OTU1NEY2M0IzNDQjKSkpIiwKKyAgICAgICJceEU2XHhERlx4OTRceDJEXHhCRFx4OENceDc3XHgwNVx4QTNceEREXHg0MVx4NkVceEZDXHgwNFx4MDFceERCXHgzMVx4MEVceDk5XHhCNiIKKyAgICB9LAorICAgIHsKKyAgICAgIEdDUllfUEtfRUNEU0EsCisgICAgICAiKHB1YmxpYy1rZXkiCisgICAgICAiIChlY2RzYShmbGFncyBwYXJhbSkiCisgICAgICAiIChwICMwMEZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYjKSIKKyAgICAgICIgKGN1cnZlIFwiTklTVCBQLTI1NlwiKSIKKyAgICAgICIgKGIgIzVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1NTc2OTg4NkJDNjUxRDA2QjBDQzUzQjBGNjNCQ0UzQzNFMjdEMjYwNEIjKSIKKyAgICAgICIgKGcgIzA0NkIxN0QxRjJFMTJDNDI0N0Y4QkNFNkU1NjNBNDQwRjI3NzAzN0Q4MTJERUIzM0EwRjRBMTM5NDVEODk4QzI5NjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMzNTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjUjKSIKKyAgICAgICIgKG4gIzAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZCQ0U2RkFBREE3MTc5RTg0RjNCOUNBQzJGQzYzMjU1MSMpIgorICAgICAgIiAocSAjMDRDOEE0Q0VDMkU5QTlCQzhFMTczNTMxQTY3QjA4NDBERjM0NUMzMkUyNjFBREQ3ODBFNkQ4M0Q1NkVGQURGRDVERTg3MkY4Qjg1NDgxOUI1OTU0M0NFMEI3RjgyMjMzMDQ2NEZCQzRFNjMyNERBRERDRDlEMDU5NTU0RjYzQjM0NCMpKSkiLAorICAgICAgIlx4RTZceERGXHg5NFx4MkRceEJEXHg4Q1x4NzdceDA1XHhBM1x4RERceDQxXHg2RVx4RkNceDA0XHgwMVx4REJceDMxXHgwRVx4OTlceEI2IgorICAgIH0sCisgICAgeworICAgICAgR0NSWV9QS19FQ0RTQSwKKyAgICAgICIocHVibGljLWtleSIKKyAgICAgICIgKGVjZHNhIgorICAgICAgIiAocCAjMDBGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIykiCisgICAgICAiIChjdXJ2ZSBcIk5JU1QgUC0yNTZcIikiCisgICAgICAiIChiICM1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCIykiCisgICAgICAiIChnICMwNDZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTY0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1IykiCisgICAgICAiIChuICMwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTEjKSIKKyAgICAgICIgKHEgIzA0QzhBNENFQzJFOUE5QkM4RTE3MzUzMUE2N0IwODQwREYzNDVDMzJFMjYxQURENzgwRTZEODNENTZFRkFERkQ1REU4NzJGOEI4NTQ4MTlCNTk1NDNDRTBCN0Y4MjIzMzA0NjRGQkM0RTYzMjREQUREQ0Q5RDA1OTU1NEY2M0IzNDQjKSkpIiwKKyAgICAgICJceEU2XHhERlx4OTRceDJEXHhCRFx4OENceDc3XHgwNVx4QTNceEREXHg0MVx4NkVceEZDXHgwNFx4MDFceERCXHgzMVx4MEVceDk5XHhCNiIKKyAgICB9LAorICAgIHsKKyAgICAgIEdDUllfUEtfRUNEU0EsCisgICAgICAiKHB1YmxpYy1rZXkiCisgICAgICAiIChlY2RzYSIKKyAgICAgICIgKGN1cnZlIHNlY3AyNTZyMSkiCisgICAgICAiIChxICMwNEM4QTRDRUMyRTlBOUJDOEUxNzM1MzFBNjdCMDg0MERGMzQ1QzMyRTI2MUFERDc4MEU2RDgzRDU2RUZBREZENURFODcyRjhCODU0ODE5QjU5NTQzQ0UwQjdGODIyMzMwNDY0RkJDNEU2MzI0REFERENEOUQwNTk1NTRGNjNCMzQ0IykpKSIsCisgICAgICAiXHhFNlx4REZceDk0XHgyRFx4QkRceDhDXHg3N1x4MDVceEEzXHhERFx4NDFceDZFXHhGQ1x4MDRceDAxXHhEQlx4MzFceDBFXHg5OVx4QjYiCisgICAgfSwKKyAgICB7CisgICAgICBHQ1JZX1BLX0VDQywKKyAgICAgICIocHVibGljLWtleSIKKyAgICAgICIgKGVjYyIKKyAgICAgICIgKGN1cnZlIHNlY3AyNTZyMSkiCisgICAgICAiIChxICMwNEM4QTRDRUMyRTlBOUJDOEUxNzM1MzFBNjdCMDg0MERGMzQ1QzMyRTI2MUFERDc4MEU2RDgzRDU2RUZBREZENURFODcyRjhCODU0ODE5QjU5NTQzQ0UwQjdGODIyMzMwNDY0RkJDNEU2MzI0REFERENEOUQwNTk1NTRGNjNCMzQ0IykpKSIsCisgICAgICAiXHhFNlx4REZceDk0XHgyRFx4QkRceDhDXHg3N1x4MDVceEEzXHhERFx4NDFceDZFXHhGQ1x4MDRceDAxXHhEQlx4MzFceDBFXHg5OVx4QjYiCisgICAgfSwKKyAgICB7IC8qIEVkMjU1MTkgc3RhbmRhcmQgKi8KKyAgICAgIEdDUllfUEtfRUNDLAorICAgICAgIihwdWJsaWMta2V5IgorICAgICAgIiAoZWNjIgorICAgICAgIiAoY3VydmUgRWQyNTUxOSkiCisgICAgICAiIChxICMwNCIKKyAgICAgICIgICAgIDFDQzY2MjkyNkU3RUZGNDk4MkI3RkI4QjkyOEU2MUNENzRDQ0REODUyNzdDQzU3MTk2QzNBRDIwQjYxMTA4NUYiCisgICAgICAiICAgICA0N0JEMjQ4NDI5MDVDMDQ5MjU3NjczQjNGNTI0OTUyNEUwQTQxRkFBMTdCMjVCODE4RDBGOTdFNjI1RjFBMUQwIykiCisgICAgICAiICAgICApKSIsCisgICAgICAiXHgwQ1x4Q0FceEIyXHhGRFx4NDhceDlBXHgzM1x4NDBceDJDXHhFOCIKKyAgICAgICJceEUwXHg0QVx4MUZceEIyXHg0NVx4RUFceDgwXHgzRFx4MEFceEYxIgorICAgIH0sCisgICAgeyAvKiBFZDI1NTE5K0VkRFNBICovCisgICAgICBHQ1JZX1BLX0VDQywKKyAgICAgICIocHVibGljLWtleSIKKyAgICAgICIgKGVjYyIKKyAgICAgICIgKGN1cnZlIEVkMjU1MTkpKGZsYWdzIGVkZHNhKSIKKyAgICAgICIgKHEgIzc3M0U3Mjg0OEMxRkQ1Rjk2NTJCMjlFMkU3QUY3OTU3MUEwNDk5MEU5NkYyMDE2QkY0RTBFQzE4OTBDMkI3REIjKSIKKyAgICAgICIgKSkiLAorICAgICAgIlx4OURceEI2XHhDNlx4NEFceDM4XHg4M1x4MEZceDQ5XHg2MFx4NzAiCisgICAgICAiXHgxN1x4ODlceDQ3XHg1NVx4MjBceEJFXHg4Q1x4ODJceDFGXHg0NyIKKyAgICB9LAorICAgIHsgLyogRWQyNTUxOStFZERTQSAgKHNhbWUgYnV0IHVuY29tcHJlc3NlZCkqLworICAgICAgR0NSWV9QS19FQ0MsCisgICAgICAiKHB1YmxpYy1rZXkiCisgICAgICAiIChlY2MiCisgICAgICAiIChjdXJ2ZSBFZDI1NTE5KShmbGFncyBlZGRzYSkiCisgICAgICAiIChxICMwNCIKKyAgICAgICIgICAgIDYyOWFkMjM3ZDFlZDA0ZGNkNGFiZTE3MTFkZDY5OWExY2Y1MWIxNTg0YzRkZTdhNGVmOGI4YTY0MDE4MGIyNmYiCisgICAgICAiICAgICA1YmI3YzI5MDE4ZWNlMGY0NmIwMWYyOTYwZTk5MDQxYTU3NzlhZmU3ZTIyOTJiNjVmOWQ1MWY4Yzg0NzIzZTc3IykiCisgICAgICAiICkpIiwKKyAgICAgICJceDlEXHhCNlx4QzZceDRBXHgzOFx4ODNceDBGXHg0OVx4NjBceDcwIgorICAgICAgIlx4MTdceDg5XHg0N1x4NTVceDIwXHhCRVx4OENceDgyXHgxRlx4NDciCisgICAgfQorICB9OworCisKK3N0YXRpYyB2b2lkCitjaGVjayAodm9pZCkKK3sKKyAgdW5zaWduZWQgY2hhciBidWZbMjBdOworICB1bnNpZ25lZCBjaGFyICpyZXQ7CisgIGdjcnlfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IHNleHA7CisgIHVuc2lnbmVkIGludCBpOworICBpbnQgcmVwbjsKKworICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZiAoa2V5X2dyaXBzKSAvIHNpemVvZiAoKmtleV9ncmlwcykpOyBpKyspCisgICAgeworICAgICAgaWYgKGdjcnlfcGtfdGVzdF9hbGdvIChrZXlfZ3JpcHNbaV0uYWxnbykpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImFsZ28gJWQgbm90IGF2YWlsYWJsZTsgdGVzdCBza2lwcGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAga2V5X2dyaXBzW2ldLmFsZ28pOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBlcnIgPSBnY3J5X3NleHBfc3NjYW4gKCZzZXhwLCBOVUxMLCBrZXlfZ3JpcHNbaV0ua2V5LAorCQkJICAgICBzdHJsZW4gKGtleV9ncmlwc1tpXS5rZXkpKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoInNjYW5uaW5nIGRhdGEgJWQgZmFpbGVkOiAlc1xuIiwgaSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAgICAgZm9yIChyZXBuPTA7IHJlcG4gPCByZXBldGl0aW9uczsgcmVwbisrKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gZ2NyeV9wa19nZXRfa2V5Z3JpcCAoc2V4cCwgYnVmKTsKKyAgICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgIGRpZSAoImdjcnlfcGtfZ2V0X2tleWdyaXAgZmFpbGVkIGZvciAlZFxuIiwgaSk7CisKKyAgICAgICAgICBpZiAoIG1lbWNtcCAoa2V5X2dyaXBzW2ldLmdyaXAsIGJ1Ziwgc2l6ZW9mIChidWYpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHByaW50X2hleCAoImtleWdyaXA6ICIsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisgICAgICAgICAgICAgIGRpZSAoImtleWdyaXAgZm9yICVkIGRvZXMgbm90IG1hdGNoXG4iLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisgICAgfQorfQorCisMCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzc19oYW5kbGVyICh2b2lkICpjYl9kYXRhLCBjb25zdCBjaGFyICp3aGF0LCBpbnQgcHJpbnRjaGFyLAorCQkgIGludCBjdXJyZW50LCBpbnQgdG90YWwpCit7CisgICh2b2lkKWNiX2RhdGE7CisgICh2b2lkKXdoYXQ7CisgICh2b2lkKWN1cnJlbnQ7CisgICh2b2lkKXRvdGFsOworCisgIHB1dGNoYXIgKHByaW50Y2hhcik7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGludCBkZWJ1ZyA9IDA7CisKKyAgaWYgKGFyZ2MpCisgICAgeyBhcmdjLS07IGFyZ3YrKzsgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1kZWJ1ZyIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgICAgZGVidWcgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tcmVwZXRpdGlvbnMiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGlmIChhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXBldGl0aW9ucyA9IGF0b2koKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBpZiAocmVwZXRpdGlvbnMgPCAxKQorICAgIHJlcGV0aXRpb25zID0gMTsKKworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworCisgIGdjcnlfc2V0X3Byb2dyZXNzX2hhbmRsZXIgKHByb2dyZXNzX2hhbmRsZXIsIE5VTEwpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisKKyAgY2hlY2sgKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tcGl0ZXN0cy5jIGIvdGVzdHMvbXBpdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzVhY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbXBpdGVzdHMuYwpAQCAtMCwwICsxLDU3OSBAQAorLyogbXBpdGVzdHMuYyAgLSAgYmFzaWMgbXBpIHRlc3RzCisgKglDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmZGVmIF9HQ1JZUFRfSU5fTElCR0NSWVBUCisjIGluY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisjZWxzZQorIyBpbmNsdWRlIDxnY3J5cHQuaD4KKyNlbmRpZgorCisjZGVmaW5lIFBHTSAibXBpdGVzdHMiCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCisKK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHIgOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpIDsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyICk7CisgIHZhX2VuZChhcmdfcHRyKTsKKyAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBlcnJvcl9jb3VudCsrOworICBpZiAoZXJyb3JfY291bnQgPj0gNTApCisgICAgZGllICgic3RvcHBlZCBhZnRlciA1MCBlcnJvcnMuIik7Cit9CisKKworLyogU2V0IHVwIHNvbWUgdGVzdCBwYXR0ZXJucyAqLworCisvKiA0OCBieXRlcyB3aXRoIHZhbHVlIDE6IHRoaXMgcmVzdWx0cyBpbiA4IGxpbWJzIGZvciA2NGJpdCBsaW1icywgMTZsaW1iIGZvciAzMiBiaXQgbGltYnMgKi8KK3Vuc2lnbmVkIGNoYXIgb25lc1tdID0geworICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxCit9OworCisvKiA0OCBieXRlcyB3aXRoIHZhbHVlIDI6IHRoaXMgcmVzdWx0cyBpbiA4IGxpbWJzIGZvciA2NGJpdCBsaW1icywgMTZsaW1iIGZvciAzMiBiaXQgbGltYnMgKi8KK3Vuc2lnbmVkIGNoYXIgdHdvc1tdID0geworICAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAorICAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAorICAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyCit9OworCisvKiA0OCBieXRlcyB3aXRoIHZhbHVlIDM6IHRoaXMgcmVzdWx0cyBpbiA4IGxpbWJzIGZvciA2NGJpdCBsaW1icywgMTZsaW1iIGZvciAzMiBiaXQgbGltYnMgKi8KK3Vuc2lnbmVkIGNoYXIgdGhyZWVzW10gPSB7CisgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCisgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCisgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMKK307CisKKy8qIDQ4IGJ5dGVzIHdpdGggdmFsdWUgMHg4MDogdGhpcyByZXN1bHRzIGluIDggbGltYnMgZm9yIDY0Yml0IGxpbWJzLCAxNmxpbWIgZm9yIDMyIGJpdCBsaW1icyAqLwordW5zaWduZWQgY2hhciBlaWdodGllc1tdID0geworICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAorICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAorICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwCit9OworCisvKiA0OCBieXRlcyB3aXRoIHZhbHVlIDB4ZmY6IHRoaXMgcmVzdWx0cyBpbiA4IGxpbWJzIGZvciA2NGJpdCBsaW1icywgMTZsaW1iIGZvciAzMiBiaXQgbGltYnMgKi8KK3Vuc2lnbmVkIGNoYXIgbWFueWZmW10gPSB7CisgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKK307CisKKworc3RhdGljIGludAordGVzdF9jb25zdF9hbmRfaW1tdXRhYmxlICh2b2lkKQoreworICBnY3J5X21waV90IG9uZSwgc2Vjb25kX29uZTsKKworICBvbmUgPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDEpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKG9uZSwgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSkKKyAgICAgIHx8IGdjcnlfbXBpX2dldF9mbGFnIChvbmUsIEdDUllNUElfRkxBR19DT05TVCkpCisgICAgZGllICgiaW1tdXRhYmxlIG9yIGNvbnN0IGZsYWcgaW5pdGlhbGx5IHNldFxuIik7CisKKyAgc2Vjb25kX29uZSA9IGdjcnlfbXBpX2NvcHkgKG9uZSk7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoc2Vjb25kX29uZSwgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSkpCisgICAgZGllICgiaW1tdXRhYmxlIGZsYWcgc2V0IGFmdGVyIGNvcHlcbiIpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKHNlY29uZF9vbmUsIEdDUllNUElfRkxBR19DT05TVCkpCisgICAgZGllICgiY29uc3QgZmxhZyBzZXQgYWZ0ZXIgY29weVxuIik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHNlY29uZF9vbmUpOworCisgIGdjcnlfbXBpX3NldF9mbGFnIChvbmUsIEdDUllNUElfRkxBR19JTU1VVEFCTEUpOworICBpZiAoIWdjcnlfbXBpX2dldF9mbGFnIChvbmUsIEdDUllNUElfRkxBR19JTU1VVEFCTEUpKQorICAgIGRpZSAoImZhaWxlZCB0byBzZXQgaW1tdXRhYmxlIGZsYWdcbiIpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKG9uZSwgR0NSWU1QSV9GTEFHX0NPTlNUKSkKKyAgICBkaWUgKCJjb25zdCBmbGFnIHVuZXhwZWN0bHkgc2V0XG4iKTsKKworICBzZWNvbmRfb25lID0gZ2NyeV9tcGlfY29weSAob25lKTsKKyAgaWYgKGdjcnlfbXBpX2dldF9mbGFnIChzZWNvbmRfb25lLCBHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFKSkKKyAgICBkaWUgKCJpbW11dGFibGUgZmxhZyBub3QgY2xlYXJlZCBhZnRlciBjb3B5XG4iKTsKKyAgaWYgKGdjcnlfbXBpX2dldF9mbGFnIChzZWNvbmRfb25lLCBHQ1JZTVBJX0ZMQUdfQ09OU1QpKQorICAgIGRpZSAoImNvbnN0IGZsYWcgdW5leHBlY3RseSBzZXQgYWZ0ZXIgY29weVxuIik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHNlY29uZF9vbmUpOworCisgIGdjcnlfbXBpX2NsZWFyX2ZsYWcgKG9uZSwgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSk7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAob25lLCBHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFKSkKKyAgICBkaWUgKCJmYWlsZWQgdG8gY2xlYXIgaW1tdXRhYmxlIGZsYWdcbiIpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKG9uZSwgR0NSWU1QSV9GTEFHX0NPTlNUKSkKKyAgICBkaWUgKCJjb25zdCBmbGFnIHVuZXhwZWN0bHkgc2V0XG4iKTsKKworICBnY3J5X21waV9zZXRfZmxhZyAob25lLCBHQ1JZTVBJX0ZMQUdfQ09OU1QpOworICBpZiAoIWdjcnlfbXBpX2dldF9mbGFnIChvbmUsIEdDUllNUElfRkxBR19DT05TVCkpCisgICAgZGllICgiZmFpbGVkIHRvIHNldCBjb25zdCBmbGFnXG4iKTsKKyAgaWYgKCFnY3J5X21waV9nZXRfZmxhZyAob25lLCBHQ1JZTVBJX0ZMQUdfSU1NVVRBQkxFKSkKKyAgICBkaWUgKCJmYWlsZWQgdG8gc2V0IGltbXV0YWJsZSBmbGFnIHdpdGggY29uc3QgZmxhZ1xuIik7CisKKyAgc2Vjb25kX29uZSA9IGdjcnlfbXBpX2NvcHkgKG9uZSk7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoc2Vjb25kX29uZSwgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSkpCisgICAgZGllICgiaW1tdXRhYmxlIGZsYWcgbm90IGNsZWFyZWQgYWZ0ZXIgY29weVxuIik7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoc2Vjb25kX29uZSwgR0NSWU1QSV9GTEFHX0NPTlNUKSkKKyAgICBkaWUgKCJjb25zdCBmbGFnIG5vdCBjbGVhcmVkIGFmdGVyIGNvcHlcbiIpOworICBnY3J5X21waV9yZWxlYXNlIChzZWNvbmRfb25lKTsKKworICBnY3J5X21waV9jbGVhcl9mbGFnIChvbmUsIEdDUllNUElfRkxBR19JTU1VVEFCTEUpOworICBpZiAoIWdjcnlfbXBpX2dldF9mbGFnIChvbmUsIEdDUllNUElfRkxBR19JTU1VVEFCTEUpKQorICAgIGRpZSAoImNsZWFyaW5nIGltbXV0YWJsZSBmbGFnIG5vdCBpZ25vcmVkIGZvciBhIGNvbnN0YW50IE1QSVxuIik7CisgIGlmICghZ2NyeV9tcGlfZ2V0X2ZsYWcgKG9uZSwgR0NSWU1QSV9GTEFHX0NPTlNUKSkKKyAgICBkaWUgKCJjb25zdCBmbGFnIHVuZXhwZWN0bHkgY2xlYXJlZFxuIik7CisKKworICBzZWNvbmRfb25lID0gZ2NyeV9tcGlfc2V0IChOVUxMLCBHQ1JZTVBJX0NPTlNUX09ORSk7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoc2Vjb25kX29uZSwgR0NSWU1QSV9GTEFHX0lNTVVUQUJMRSkpCisgICAgZGllICgiaW1tdXRhYmxlIGZsYWcgbm90IGNsZWFyZWQgYnkgbXBpX3NldCAoTlVMTCx4KVxuIik7CisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoc2Vjb25kX29uZSwgR0NSWU1QSV9GTEFHX0NPTlNUKSkKKyAgICBkaWUgKCJjb25zdCBmbGFnIG5vdCBjbGVhcmVkIGJ5IG1waV9zZXQgKE5VTEwseClcbiIpOworICBnY3J5X21waV9yZWxlYXNlIChzZWNvbmRfb25lKTsKKworICBzZWNvbmRfb25lID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCA0Mik7CisgIGdjcnlfbXBpX3NldCAoc2Vjb25kX29uZSwgR0NSWU1QSV9DT05TVF9PTkUpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKHNlY29uZF9vbmUsIEdDUllNUElfRkxBR19JTU1VVEFCTEUpKQorICAgIGRpZSAoImltbXV0YWJsZSBmbGFnIG5vdCBjbGVhcmVkIGFmdGVyIG1waV9zZXQgKGEseClcbiIpOworICBpZiAoZ2NyeV9tcGlfZ2V0X2ZsYWcgKHNlY29uZF9vbmUsIEdDUllNUElfRkxBR19DT05TVCkpCisgICAgZGllICgiY29uc3QgZmxhZyBub3QgY2xlYXJlZCBtcGlfc2V0IChhLHgpXG4iKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoc2Vjb25kX29uZSk7CisKKworICAvKiBEdWUgdG8gdGhlIHRoZSBjb25zdGFudCBmbGFnIHRoZSByZWxlYXNlIGJlbG93IHNob3VsZCBiZSBhIE5PUAorICAgICBhbmQgd2lsbCBsZWFrIG1lbW9yeS4gICovCisgIGdjcnlfbXBpX3JlbGVhc2UgKG9uZSk7CisgIHJldHVybiAxOworfQorCisKK3N0YXRpYyB2b2lkCit0ZXN0X29wYXF1ZSAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfdCBhOworICBjaGFyICpwOworICB1bnNpZ25lZCBpbnQgbmJpdHM7CisKKyAgcCA9IGdjcnlfeHN0cmR1cCAoIlRoaXMgaXMgYSB0ZXN0IGJ1ZmZlciIpOworICBhID0gZ2NyeV9tcGlfc2V0X29wYXF1ZSAoTlVMTCwgcCwgMjEqOCsxKTsgLyogKGEgbm9uIGJ5dGUgYWxpZ25lZCBsZW5ndGgpICovCisKKyAgaWYgKCFnY3J5X21waV9nZXRfZmxhZyAoYSwgR0NSWU1QSV9GTEFHX09QQVFVRSkpCisgICAgZGllICgib3BhcXVlIGZsYWcgbm90IHNldFxuIik7CisKKyAgcCA9IGdjcnlfbXBpX2dldF9vcGFxdWUgKGEsICZuYml0cyk7CisgIGlmICghcCkKKyAgICBkaWUgKCJnY3J5X21waV9nZXRfb3BhcXVlIHJldHVybmVkIE5VTExcbiIpOworICBpZiAobmJpdHMgIT0gMjEqOCsxKQorICAgIGRpZSAoImdjcnlfbXBpX2dldF9vcGFxdWUgcmV0dXJuZWQgYSBjaGFuZ2VkIGJpdCBzaXplXG4iKTsKKyAgaWYgKHN0cmNtcCAocCwgIlRoaXMgaXMgYSB0ZXN0IGJ1ZmZlciIpKQorICAgIGRpZSAoImdjcnlfbXBpX2dldF9vcGFxdWUgcmV0dXJuZWQgYSBjaGFuZ2VkIGJ1ZmZlclxuIik7CisKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfbG9nX2RlYnVnbXBpICgibXBpIiwgYSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworCisgIHAgPSBnY3J5X3hzdHJkdXAgKCJUaGlzIGlzIGEgdGVzdCBidWZmZXIiKTsKKyAgYSA9IGdjcnlfbXBpX3NldF9vcGFxdWVfY29weSAoTlVMTCwgcCwgMjEqOCsxKTsKKyAgZ2NyeV9mcmVlIChwKTsKKworICBpZiAoIWdjcnlfbXBpX2dldF9mbGFnIChhLCBHQ1JZTVBJX0ZMQUdfT1BBUVVFKSkKKyAgICBkaWUgKCJvcGFxdWUgZmxhZyBub3Qgc2V0XG4iKTsKKworICBwID0gZ2NyeV9tcGlfZ2V0X29wYXF1ZSAoYSwgJm5iaXRzKTsKKyAgaWYgKCFwKQorICAgIGRpZSAoImdjcnlfbXBpX2dldF9vcGFxdWUgcmV0dXJuZWQgTlVMTFxuIik7CisgIGlmIChuYml0cyAhPSAyMSo4KzEpCisgICAgZGllICgiZ2NyeV9tcGlfZ2V0X29wYXF1ZSByZXR1cm5lZCBhIGNoYW5nZWQgYml0IHNpemVcbiIpOworICBpZiAoc3RyY21wIChwLCAiVGhpcyBpcyBhIHRlc3QgYnVmZmVyIikpCisgICAgZGllICgiZ2NyeV9tcGlfZ2V0X29wYXF1ZSByZXR1cm5lZCBhIGNoYW5nZWQgYnVmZmVyXG4iKTsKKworICBpZiAoZGVidWcpCisgICAgZ2NyeV9sb2dfZGVidWdtcGkgKCJtcGkiLCBhKTsKKworICBnY3J5X21waV9yZWxlYXNlIChhKTsKK30KKworCitzdGF0aWMgdm9pZAordGVzdF9jbXAgKHZvaWQpCit7CisgIGdwZ19lcnJvcl90IHJjOworICBnY3J5X21waV90IHplcm8sIHplcm8yOworICBnY3J5X21waV90IG9uZTsKKyAgZ2NyeV9tcGlfdCB0d287CisgIGdjcnlfbXBpX3QgYWxsX29uZXM7CisgIGdjcnlfbXBpX3Qgb3BhMSwgb3BhMjsKKyAgZ2NyeV9tcGlfdCBvcGExcywgb3BhMnM7CisgIGdjcnlfbXBpX3Qgb3BhMCwgb3BhMDI7CisKKyAgemVybyA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHplcm8yPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDApOworICBvbmUgID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCAxKTsKKyAgdHdvICA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMik7CisgIHJjID0gZ2NyeV9tcGlfc2NhbiAoJmFsbF9vbmVzLCBHQ1JZTVBJX0ZNVF9VU0csIG9uZXMsIHNpemVvZihvbmVzKSwgTlVMTCk7CisgIGlmIChyYykKKyAgICBkaWUgKCJzY2FubmluZyBudW1iZXIgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisgIG9wYTAgID0gZ2NyeV9tcGlfc2V0X29wYXF1ZSAoTlVMTCwgZ2NyeV94c3RyZHVwICgiYSIpLCAwKTsKKyAgb3BhMDIgPSBnY3J5X21waV9zZXRfb3BhcXVlIChOVUxMLCBnY3J5X3hzdHJkdXAgKCJiIiksIDApOworICBvcGExICA9IGdjcnlfbXBpX3NldF9vcGFxdWUgKE5VTEwsIGdjcnlfeHN0cmR1cCAoImFhYWFhYWFhYWFhYWFhYWEiKSwgMTYqOCk7CisgIG9wYTFzID0gZ2NyeV9tcGlfc2V0X29wYXF1ZSAoTlVMTCwgZ2NyeV94c3RyZHVwICgiYSIpLCAxKjgpOworICBvcGEyICA9IGdjcnlfbXBpX3NldF9vcGFxdWUgKE5VTEwsIGdjcnlfeHN0cmR1cCAoImJiYmJiYmJiYmJiYmJiYmIiKSwgMTYqOCk7CisgIG9wYTJzID0gZ2NyeV9tcGlfc2V0X29wYXF1ZSAoTlVMTCwgZ2NyeV94c3RyZHVwICgiYiIpLCAxKjgpOworCisKKyAgLyogU2luZ2xlIGxpbWIgdGVzdCB3aXRoIGNtcF91aSAqLworICBpZiAoZ2NyeV9tcGlfY21wX3VpICh6ZXJvLCAwKSkKKyAgICBmYWlsICgibXBpX2NtcF91aSBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wX3VpICh6ZXJvLCAxKSA8IDApKQorICAgIGZhaWwgKCJtcGlfY21wX3VpIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXBfdWkgKHplcm8sICgtMSkpIDwgMCkpCisgICAgZmFpbCAoIm1waV9jbXBfdWkgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAodHdvLCAyKSkKKyAgICBmYWlsICgibXBpX2NtcF91aSBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wX3VpICh0d28sIDMpIDwgMCkpCisgICAgZmFpbCAoIm1waV9jbXBfdWkgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisgIGlmICghKGdjcnlfbXBpX2NtcF91aSAodHdvLCAxKSA+IDApKQorICAgIGZhaWwgKCJtcGlfY21wX3VpIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworCisgIC8qIE11bHRpIGxpbWIgdGVzdHMgd2l0aCBjbXBfdWkuICAqLworICBpZiAoIShnY3J5X21waV9jbXBfdWkgKGFsbF9vbmVzLCAwKSA+IDApKQorICAgIGZhaWwgKCJtcGlfY21wX3VpIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXBfdWkgKGFsbF9vbmVzLCAoLTEpKSA+IDApKQorICAgIGZhaWwgKCJtcGlfY21wX3VpIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworCisgIC8qIFNpbmdsZSBsaW1iIHRlc3Qgd2l0aCBjbXAgKi8KKyAgaWYgKGdjcnlfbXBpX2NtcCAoemVybywgemVybzIpKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXAgKHplcm8sIG9uZSkgPCAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvbmUsIHplcm8pID4gMCkpCisgICAgZmFpbCAoIm1waV9jbXAgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisKKyAgZ2NyeV9tcGlfbmVnIChvbmUsIG9uZSk7CisgIGlmICghKGdjcnlfbXBpX2NtcCAoemVybywgb25lKSA+IDApKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXAgKG9uZSwgemVybykgPCAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvbmUsIHR3bykgPCAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgZ2NyeV9tcGlfbmVnIChvbmUsIG9uZSk7CisKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvbmUsIHR3bykgPCAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wICh0d28sIG9uZSkgPiAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvbmUsIGFsbF9vbmVzKSA8IDApKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworCisgIC8qIFRlc3RzIHdpdGggb3BhcXVlIHZhbHVlcy4gICovCisgIGlmICghKGdjcnlfbXBpX2NtcCAob3BhMSwgb25lKSA8IDApKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXAgKG9uZSwgb3BhMSkgPiAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvcGEwLCBvcGEwMikgPT0gMCkpCisgICAgZmFpbCAoIm1waV9jbXAgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisgIGlmICghKGdjcnlfbXBpX2NtcCAob3BhMXMsIG9wYTEpIDwgMCkpCisgICAgZmFpbCAoIm1waV9jbXAgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisgIGlmICghKGdjcnlfbXBpX2NtcCAob3BhMiwgb3BhMXMpID4gMCkpCisgICAgZmFpbCAoIm1waV9jbXAgZmFpbGVkIGF0IGxpbmUgJWQiLCBfX0xJTkVfXyk7CisgIGlmICghKGdjcnlfbXBpX2NtcCAob3BhMSwgb3BhMikgPCAwKSkKKyAgICBmYWlsICgibXBpX2NtcCBmYWlsZWQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsKKyAgaWYgKCEoZ2NyeV9tcGlfY21wIChvcGEyLCBvcGExKSA+IDApKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworICBpZiAoIShnY3J5X21waV9jbXAgKG9wYTEsIG9wYTEpID09IDApKQorICAgIGZhaWwgKCJtcGlfY21wIGZhaWxlZCBhdCBsaW5lICVkIiwgX19MSU5FX18pOworCisKKyAgZ2NyeV9tcGlfcmVsZWFzZShvcGEycyk7CisgIGdjcnlfbXBpX3JlbGVhc2Uob3BhMik7CisgIGdjcnlfbXBpX3JlbGVhc2Uob3BhMXMpOworICBnY3J5X21waV9yZWxlYXNlKG9wYTEpOworICBnY3J5X21waV9yZWxlYXNlKG9wYTAyKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShvcGEwKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShhbGxfb25lcyk7CisgIGdjcnlfbXBpX3JlbGVhc2UodHdvKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShvbmUpOworICBnY3J5X21waV9yZWxlYXNlKHplcm8yKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSh6ZXJvKTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X2FkZCAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfdCBvbmU7CisgIGdjcnlfbXBpX3QgdHdvOworICBnY3J5X21waV90IGZmOworICBnY3J5X21waV90IHJlc3VsdDsKKyAgdW5zaWduZWQgY2hhciogcGM7CisKKyAgZ2NyeV9tcGlfc2Nhbigmb25lLCBHQ1JZTVBJX0ZNVF9VU0csIG9uZXMsIHNpemVvZihvbmVzKSwgTlVMTCk7CisgIGdjcnlfbXBpX3NjYW4oJnR3bywgR0NSWU1QSV9GTVRfVVNHLCB0d29zLCBzaXplb2YodHdvcyksIE5VTEwpOworICBnY3J5X21waV9zY2FuKCZmZiwgR0NSWU1QSV9GTVRfVVNHLCBtYW55ZmYsIHNpemVvZihtYW55ZmYpLCBOVUxMKTsKKyAgcmVzdWx0ID0gZ2NyeV9tcGlfbmV3KDApOworCisgIGdjcnlfbXBpX2FkZChyZXN1bHQsIG9uZSwgdHdvKTsKKyAgZ2NyeV9tcGlfYXByaW50KEdDUllNUElfRk1UX0hFWCwgJnBjLCBOVUxMLCByZXN1bHQpOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9sb2dfZGVidWcgKCJSZXN1bHQgb2Ygb25lIHBsdXMgdHdvOlxuJXNcbiIsIHBjKTsKKyAgZ2NyeV9mcmVlKHBjKTsKKworICBnY3J5X21waV9hZGQocmVzdWx0LCBmZiwgb25lKTsKKyAgZ2NyeV9tcGlfYXByaW50KEdDUllNUElfRk1UX0hFWCwgJnBjLCBOVUxMLCByZXN1bHQpOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9sb2dfZGVidWcgKCJSZXN1bHQgb2YgZmYgcGx1cyBvbmU6XG4lc1xuIiwgcGMpOworICBnY3J5X2ZyZWUocGMpOworCisgIGdjcnlfbXBpX3JlbGVhc2Uob25lKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSh0d28pOworICBnY3J5X21waV9yZWxlYXNlKGZmKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShyZXN1bHQpOworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X3N1YiAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfdCBvbmU7CisgIGdjcnlfbXBpX3QgdHdvOworICBnY3J5X21waV90IHJlc3VsdDsKKyAgdW5zaWduZWQgY2hhciogcGM7CisKKyAgZ2NyeV9tcGlfc2Nhbigmb25lLCBHQ1JZTVBJX0ZNVF9VU0csIG9uZXMsIHNpemVvZihvbmVzKSwgTlVMTCk7CisgIGdjcnlfbXBpX3NjYW4oJnR3bywgR0NSWU1QSV9GTVRfVVNHLCB0d29zLCBzaXplb2YodHdvcyksIE5VTEwpOworICByZXN1bHQgPSBnY3J5X21waV9uZXcoMCk7CisgIGdjcnlfbXBpX3N1YihyZXN1bHQsIHR3bywgb25lKTsKKworICBnY3J5X21waV9hcHJpbnQoR0NSWU1QSV9GTVRfSEVYLCAmcGMsIE5VTEwsIHJlc3VsdCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2xvZ19kZWJ1ZyAoIlJlc3VsdCBvZiB0d28gbWludXMgb25lOlxuJXNcbiIsIHBjKTsKKyAgZ2NyeV9mcmVlKHBjKTsKKworICBnY3J5X21waV9yZWxlYXNlKG9uZSk7CisgIGdjcnlfbXBpX3JlbGVhc2UodHdvKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShyZXN1bHQpOworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X211bCAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfdCB0d287CisgIGdjcnlfbXBpX3QgdGhyZWU7CisgIGdjcnlfbXBpX3QgcmVzdWx0OworICB1bnNpZ25lZCBjaGFyKiBwYzsKKworICBnY3J5X21waV9zY2FuKCZ0d28sIEdDUllNUElfRk1UX1VTRywgdHdvcywgc2l6ZW9mKHR3b3MpLCBOVUxMKTsKKyAgZ2NyeV9tcGlfc2NhbigmdGhyZWUsIEdDUllNUElfRk1UX1VTRywgdGhyZWVzLCBzaXplb2YodGhyZWVzKSwgTlVMTCk7CisgIHJlc3VsdCA9IGdjcnlfbXBpX25ldygwKTsKKyAgZ2NyeV9tcGlfbXVsKHJlc3VsdCwgdHdvLCB0aHJlZSk7CisKKyAgZ2NyeV9tcGlfYXByaW50KEdDUllNUElfRk1UX0hFWCwgJnBjLCBOVUxMLCByZXN1bHQpOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9sb2dfZGVidWcgKCJSZXN1bHQgb2YgdHdvIG11bCB0aHJlZTpcbiVzXG4iLCBwYyk7CisgIGdjcnlfZnJlZShwYyk7CisKKyAgZ2NyeV9tcGlfcmVsZWFzZSh0d28pOworICBnY3J5X21waV9yZWxlYXNlKHRocmVlKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZShyZXN1bHQpOworICByZXR1cm4gMTsKK30KKworCisvKiBXaGF0IHdlIHRlc3QgaGVyZSBpcyB0aGF0IHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgYXJncyBhbmQgdGhhdAorICAgdXNpbmcgdGhuZSBzYW1lIG1waSBmb3Igc2V2ZXJhbCBhcmdzIHdvcmtzLiAgKi8KK3N0YXRpYyBpbnQKK3Rlc3RfcG93bSAodm9pZCkKK3sKKyAgaW50IGJfaW50ID0gMTc7CisgIGludCBlX2ludCA9IDM7CisgIGludCBtX2ludCA9IDE5OworICBnY3J5X21waV90IGJhc2UgPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIGJfaW50KTsKKyAgZ2NyeV9tcGlfdCBleHAgPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIGVfaW50KTsKKyAgZ2NyeV9tcGlfdCBtb2QgPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIG1faW50KTsKKyAgZ2NyeV9tcGlfdCByZXMgPSBnY3J5X21waV9uZXcgKDApOworCisgIGdjcnlfbXBpX3Bvd20gKHJlcywgYmFzZSwgZXhwLCBtb2QpOworICBpZiAoZ2NyeV9tcGlfY21wX3VpIChiYXNlLCBiX2ludCkpCisgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgYmFzZSBhdCAlZFxuIiwgX19MSU5FX18pOworICBpZiAoZ2NyeV9tcGlfY21wX3VpIChleHAsIGVfaW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd21fdWkgZmFpbGVkIGZvciBleHAgYXQgJWRcbiIsIF9fTElORV9fKTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAobW9kLCBtX2ludCkpCisgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgbW9kIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogQ2hlY2sgdXNpbmcgYmFzZSBmb3IgdGhlIHJlc3VsdC4gICovCisgIGdjcnlfbXBpX3NldF91aSAoYmFzZSwgYl9pbnQpOworICBnY3J5X21waV9zZXRfdWkgKGV4cCwgZV9pbnQpOworICBnY3J5X21waV9zZXRfdWkobW9kLCBtX2ludCk7CisgIGdjcnlfbXBpX3Bvd20gKGJhc2UsIGJhc2UsIGV4cCwgbW9kKTsKKyAgaWYgKGdjcnlfbXBpX2NtcCAocmVzLCBiYXNlKSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKGV4cCwgZV9pbnQpKQorICAgIGRpZSAoInRlc3RfcG93bV91aSBmYWlsZWQgZm9yIGV4cCBhdCAlZFxuIiwgX19MSU5FX18pOworICBpZiAoZ2NyeV9tcGlfY21wX3VpIChtb2QsIG1faW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGZvciBtb2QgYXQgJWRcbiIsIF9fTElORV9fKTsKKworICAvKiBDaGVjayB1c2luZyBleHAgZm9yIHRoZSByZXN1bHQuICAqLworICBnY3J5X21waV9zZXRfdWkgKGJhc2UsIGJfaW50KTsKKyAgZ2NyeV9tcGlfc2V0X3VpIChleHAsIGVfaW50KTsKKyAgZ2NyeV9tcGlfc2V0X3VpKG1vZCwgbV9pbnQpOworICBnY3J5X21waV9wb3dtIChleHAsIGJhc2UsIGV4cCwgbW9kKTsKKyAgaWYgKGdjcnlfbXBpX2NtcCAocmVzLCBleHApKQorICAgIGRpZSAoInRlc3RfcG93bSBmYWlsZWQgYXQgJWRcbiIsIF9fTElORV9fKTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAoYmFzZSwgYl9pbnQpKQorICAgIGRpZSAoInRlc3RfcG93bSBmYWlsZWQgZm9yIGJhc2UgYXQgJWRcbiIsIF9fTElORV9fKTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAobW9kLCBtX2ludCkpCisgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgbW9kIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogQ2hlY2sgdXNpbmcgbW9kIGZvciB0aGUgcmVzdWx0LiAgKi8KKyAgZ2NyeV9tcGlfc2V0X3VpIChiYXNlLCBiX2ludCk7CisgIGdjcnlfbXBpX3NldF91aSAoZXhwLCBlX2ludCk7CisgIGdjcnlfbXBpX3NldF91aShtb2QsIG1faW50KTsKKyAgZ2NyeV9tcGlfcG93bSAobW9kLCBiYXNlLCBleHAsIG1vZCk7CisgIGlmIChnY3J5X21waV9jbXAgKHJlcywgbW9kKSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKGJhc2UsIGJfaW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGZvciBiYXNlIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKGV4cCwgZV9pbnQpKQorICAgIGRpZSAoInRlc3RfcG93bV91aSBmYWlsZWQgZm9yIGV4cCBhdCAlZFxuIiwgX19MSU5FX18pOworCisgIC8qIE5vdyBjaGVjayBiYXNlIF4gYmFzZSBtb2QgbW9kLiAgKi8KKyAgZ2NyeV9tcGlfc2V0X3VpIChiYXNlLCBiX2ludCk7CisgIGdjcnlfbXBpX3NldF91aShtb2QsIG1faW50KTsKKyAgZ2NyeV9tcGlfcG93bSAocmVzLCBiYXNlLCBiYXNlLCBtb2QpOworICBpZiAoZ2NyeV9tcGlfY21wX3VpIChiYXNlLCBiX2ludCkpCisgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgYmFzZSBhdCAlZFxuIiwgX19MSU5FX18pOworICBpZiAoZ2NyeV9tcGlfY21wX3VpIChtb2QsIG1faW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGZvciBtb2QgYXQgJWRcbiIsIF9fTElORV9fKTsKKworICAvKiBDaGVjayBiYXNlIF4gYmFzZSBtb2QgbW9kIHdpdGggYmFzZSBhcyByZXN1bHQuICAqLworICBnY3J5X21waV9zZXRfdWkgKGJhc2UsIGJfaW50KTsKKyAgZ2NyeV9tcGlfc2V0X3VpKG1vZCwgbV9pbnQpOworICBnY3J5X21waV9wb3dtIChiYXNlLCBiYXNlLCBiYXNlLCBtb2QpOworICBpZiAoZ2NyeV9tcGlfY21wIChyZXMsIGJhc2UpKQorICAgIGRpZSAoInRlc3RfcG93bSBmYWlsZWQgYXQgJWRcbiIsIF9fTElORV9fKTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAobW9kLCBtX2ludCkpCisgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgbW9kIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogQ2hlY2sgYmFzZSBeIGJhc2UgbW9kIG1vZCB3aXRoIG1vZCBhcyByZXN1bHQuICAqLworICBnY3J5X21waV9zZXRfdWkgKGJhc2UsIGJfaW50KTsKKyAgZ2NyeV9tcGlfc2V0X3VpKG1vZCwgbV9pbnQpOworICBnY3J5X21waV9wb3dtIChtb2QsIGJhc2UsIGJhc2UsIG1vZCk7CisgIGlmIChnY3J5X21waV9jbXAgKHJlcywgbW9kKSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKGJhc2UsIGJfaW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGZvciBiYXNlIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogTm93IGNoZWNrIGJhc2UgXiBiYXNlIG1vZCBiYXNlLiAgKi8KKyAgZ2NyeV9tcGlfc2V0X3VpIChiYXNlLCBiX2ludCk7CisgIGdjcnlfbXBpX3Bvd20gKHJlcywgYmFzZSwgYmFzZSwgYmFzZSk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKGJhc2UsIGJfaW50KSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGZvciBiYXNlIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogQ2hlY2sgYmFzZSBeIGJhc2UgbW9kIGJhc2Ugd2l0aCBiYXNlIGFzIHJlc3VsdC4gICovCisgIGdjcnlfbXBpX3NldF91aSAoYmFzZSwgYl9pbnQpOworICBnY3J5X21waV9wb3dtIChiYXNlLCBiYXNlLCBiYXNlLCBiYXNlKTsKKyAgaWYgKGdjcnlfbXBpX2NtcCAocmVzLCBiYXNlKSkKKyAgICBkaWUgKCJ0ZXN0X3Bvd20gZmFpbGVkIGF0ICVkXG4iLCBfX0xJTkVfXyk7CisKKyAgLyogQ2hlY2sgZm9yIGEgY2FzZTogYmFzZSBpcyBuZWdhdGl2ZSBhbmQgZXhwbyBpcyBldmVuLiAgKi8KKyAgZ2NyeV9tcGlfc2V0X3VpIChiYXNlLCBiX2ludCk7CisgIGdjcnlfbXBpX25lZyAoYmFzZSwgYmFzZSk7CisgIGdjcnlfbXBpX3NldF91aSAoZXhwLCBlX2ludCAqIDIpOworICBnY3J5X21waV9zZXRfdWkobW9kLCBtX2ludCk7CisgIGdjcnlfbXBpX3Bvd20gKHJlcywgYmFzZSwgZXhwLCBtb2QpOworICAvKiBSZXN1bHQgc2hvdWxkIGJlIHBvc2l0aXZlIGFuZCBpdCdzIDcgPSAoLTE3KV42IG1vZCAxOS4gICovCisgIGlmIChnY3J5X21waV9pc19uZWcgKHJlcykgfHwgZ2NyeV9tcGlfY21wX3VpIChyZXMsIDcpKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiaXNfbmVnOiAlZFxuIiwgZ2NyeV9tcGlfaXNfbmVnIChyZXMpKTsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtcGk6ICIpOworICAgICAgICAgIGdjcnlfbXBpX2R1bXAgKHJlcyk7CisgICAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgfQorICAgICAgZGllICgidGVzdF9wb3dtIGZhaWxlZCBmb3IgbmVnYXRpdmUgYmFzZSBhdCAlZFxuIiwgX19MSU5FX18pOworICAgIH0KKworICBnY3J5X21waV9yZWxlYXNlIChiYXNlKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoZXhwKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAobW9kKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocmVzKTsKKyAgLyogRml4bWU6IFdlIHNob3VsZCBhZGQgdGhlIHJlc3Qgb2YgdGhlIGNhc2VzIG9mIGNvdXJzZS4gICovCisKKworCisgIHJldHVybiAxOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLXZlcmJvc2UiKSkKKyAgICB2ZXJib3NlID0gMTsKKyAgZWxzZSBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSkKKyAgICB2ZXJib3NlID0gZGVidWcgPSAxOworCisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgeworICAgICAgZnB1dHMgKCJ2ZXJzaW9uIG1pc21hdGNoXG4iLCBzdGRlcnIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBnY3J5X2NvbnRyb2woR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSk7CisKKyAgdGVzdF9jb25zdF9hbmRfaW1tdXRhYmxlICgpOworICB0ZXN0X29wYXF1ZSAoKTsKKyAgdGVzdF9jbXAgKCk7CisgIHRlc3RfYWRkICgpOworICB0ZXN0X3N1YiAoKTsKKyAgdGVzdF9tdWwgKCk7CisgIHRlc3RfcG93bSAoKTsKKworICByZXR1cm4gISFlcnJvcl9jb3VudDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3BrYmVuY2guYyBiL3Rlc3RzL3BrYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTE5MmYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGtiZW5jaC5jCkBAIC0wLDAgKzEsNTE0IEBACisvKiBwa2JlbmNoLmMgLSBQdWJrZXkgbWVuY2htYXJraW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZm5kZWYgSEFWRV9XMzJfU1lTVEVNCisjIGluY2x1ZGUgPHN5cy90aW1lcy5oPgorI2VuZGlmIC8qSEFWRV9XMzJfU1lTVEVNKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIFBHTSAicGtiZW5jaCIKKworCitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBlcnJvcl9jb3VudDsKKworCit0eXBlZGVmIHN0cnVjdCBjb250ZXh0Cit7CisgIGdjcnlfc2V4cF90IGtleV9zZWNyZXQ7CisgIGdjcnlfc2V4cF90IGtleV9wdWJsaWM7CisgIGdjcnlfc2V4cF90IGRhdGE7CisgIGdjcnlfc2V4cF90IGRhdGFfZW5jcnlwdGVkOworICBnY3J5X3NleHBfdCBkYXRhX3NpZ25lZDsKK30gKmNvbnRleHRfdDsKKwordHlwZWRlZiBpbnQgKCp3b3JrX3QpIChjb250ZXh0X3QgY29udGV4dCwgdW5zaWduZWQgaW50IGZpbmFsKTsKKworCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBmcHV0cyAoIFBHTSAiOiAiLCBzdGRlcnIpOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBwdXRjaGFyICgnXG4nKTsKKyAgZnB1dHMgKCBQR00gIjogIiwgc3RkZXJyKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIGV4aXQgKDEpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19zZXhwIChjb25zdCBjaGFyICpwcmVmaXgsIGdjcnlfc2V4cF90IGEpCit7CisgIGNoYXIgKmJ1ZjsKKyAgc2l6ZV90IHNpemU7CisKKyAgZnB1dHMgKHByZWZpeCwgc3RkZXJyKTsKKyAgc2l6ZSA9IGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgTlVMTCwgMCk7CisgIGJ1ZiA9IGdjcnlfeG1hbGxvYyAoc2l6ZSk7CisKKyAgZ2NyeV9zZXhwX3NwcmludCAoYSwgR0NSWVNFWFBfRk1UX0FEVkFOQ0VELCBidWYsIHNpemUpOworICBmcHJpbnRmIChzdGRlcnIsICIlLipzIiwgKGludClzaXplLCBidWYpOworICBnY3J5X2ZyZWUgKGJ1Zik7Cit9CisKKworc3RhdGljIHZvaWQgKgorcmVhZF9maWxlIChjb25zdCBjaGFyICpmbmFtZSwgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgRklMRSAqZnA7CisgIHN0cnVjdCBzdGF0IHN0OworICBjaGFyICpidWY7CisgIHNpemVfdCBidWZsZW47CisKKyAgZnAgPSBmb3BlbiAoZm5hbWUsICJyYiIpOworICBpZiAoIWZwKQorICAgIHsKKyAgICAgIGZhaWwgKCJjYW4ndCBvcGVuIGAlcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGZzdGF0IChmaWxlbm8oZnApLCAmc3QpKQorICAgIHsKKyAgICAgIGZhaWwgKCJjYW4ndCBzdGF0IGAlcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBmY2xvc2UgKGZwKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBidWZsZW4gPSBzdC5zdF9zaXplOworICBidWYgPSBnY3J5X3htYWxsb2MgKGJ1ZmxlbisxKTsKKyAgaWYgKGZyZWFkIChidWYsIGJ1ZmxlbiwgMSwgZnApICE9IDEpCisgICAgeworICAgICAgZmFpbCAoImVycm9yIHJlYWRpbmcgYCVzJzogJXNcbiIsIGZuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGZjbG9zZSAoZnApOworICAgICAgZ2NyeV9mcmVlIChidWYpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBmY2xvc2UgKGZwKTsKKworICBpZiAocl9sZW5ndGgpCisgICAgKnJfbGVuZ3RoID0gYnVmbGVuOworICByZXR1cm4gYnVmOworfQorCisKKworc3RhdGljIHZvaWQKK2JlbmNobWFyayAod29ya190IHdvcmtlciwgY29udGV4dF90IGNvbnRleHQpCit7CisgIGNsb2NrX3QgdGltZXJfc3RhcnQsIHRpbWVyX3N0b3A7CisgIHVuc2lnbmVkIGludCBsb29wID0gMTA7CisgIHVuc2lnbmVkIGludCBpID0gMDsKKyAgc3RydWN0IHRtcyB0aW1lcjsKKyAgaW50IHJldCA9IDA7CisKKyNpZmRlZiBIQVZFX1czMl9TWVNURU0KKyAgdGltZXJfc3RhcnQgPSBjbG9jayAoKTsKKyNlbHNlCisgIHRpbWVzICgmdGltZXIpOworICB0aW1lcl9zdGFydCA9IHRpbWVyLnRtc191dGltZTsKKyNlbmRpZgorICBmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKQorICAgIHsKKyAgICAgIHJldCA9ICgqd29ya2VyKSAoY29udGV4dCwgKGkgKyAxKSA9PSBsb29wKTsKKyAgICAgIGlmICghIHJldCkKKwlicmVhazsKKyAgICB9CisjaWZkZWYgSEFWRV9XMzJfU1lTVEVNCisgIHRpbWVyX3N0b3AgPSBjbG9jayAoKTsKKyNlbHNlCisgIHRpbWVzICgmdGltZXIpOworICB0aW1lcl9zdG9wID0gdGltZXIudG1zX3V0aW1lOworI2VuZGlmCisKKyAgaWYgKHJldCkKKyAgICBwcmludGYgKCIlLjBmIG1zXG4iLAorCSAgICAoKChkb3VibGUpICgodGltZXJfc3RvcCAtIHRpbWVyX3N0YXJ0KSAvIGxvb3ApKSAvIENMT0NLU19QRVJfU0VDKQorCSAgICAqIDEwMDAwMDAwKTsKKyAgZWxzZQorICAgIHByaW50ZiAoIltza2lwcGVkXVxuIik7Cit9CisKK3N0YXRpYyBpbnQKK3dvcmtfZW5jcnlwdCAoY29udGV4dF90IGNvbnRleHQsIHVuc2lnbmVkIGludCBmaW5hbCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgIGdjcnlfc2V4cF90IGRhdGFfZW5jcnlwdGVkID0gTlVMTDsKKyAgaW50IHJldCA9IDE7CisKKyAgZXJyID0gZ2NyeV9wa19lbmNyeXB0ICgmZGF0YV9lbmNyeXB0ZWQsCisJCQkgY29udGV4dC0+ZGF0YSwgY29udGV4dC0+a2V5X3B1YmxpYyk7CisgIGlmIChncGdfZXJyX2NvZGUgKGVycikgPT0gR1BHX0VSUl9OT1RfSU1QTEVNRU5URUQpCisgICAgeworICAgICAgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKyAgICAgIHJldCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0ICghIGVycik7CisKKyAgICAgIGlmIChmaW5hbCkKKwljb250ZXh0LT5kYXRhX2VuY3J5cHRlZCA9IGRhdGFfZW5jcnlwdGVkOworICAgICAgZWxzZQorCWdjcnlfc2V4cF9yZWxlYXNlIChkYXRhX2VuY3J5cHRlZCk7CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3dvcmtfZGVjcnlwdCAoY29udGV4dF90IGNvbnRleHQsIHVuc2lnbmVkIGludCBmaW5hbCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgIGludCByZXQgPSAxOworCisgIGlmICghIGNvbnRleHQtPmRhdGFfZW5jcnlwdGVkKQorICAgIHJldCA9IDA7CisgIGVsc2UKKyAgICB7CisgICAgICBnY3J5X3NleHBfdCBkYXRhX2RlY3J5cHRlZCA9IE5VTEw7CisKKyAgICAgIGVyciA9IGdjcnlfcGtfZGVjcnlwdCAoJmRhdGFfZGVjcnlwdGVkLAorCQkJICAgICBjb250ZXh0LT5kYXRhX2VuY3J5cHRlZCwKKwkJCSAgICAgY29udGV4dC0+a2V5X3NlY3JldCk7CisgICAgICBhc3NlcnQgKCEgZXJyKTsKKyAgICAgIGlmIChmaW5hbCkKKwl7CisJICBnY3J5X3NleHBfcmVsZWFzZSAoY29udGV4dC0+ZGF0YV9lbmNyeXB0ZWQpOworCSAgY29udGV4dC0+ZGF0YV9lbmNyeXB0ZWQgPSBOVUxMOworCX0KKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChkYXRhX2RlY3J5cHRlZCk7CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3dvcmtfc2lnbiAoY29udGV4dF90IGNvbnRleHQsIHVuc2lnbmVkIGludCBmaW5hbCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgIGdjcnlfc2V4cF90IGRhdGFfc2lnbmVkID0gTlVMTDsKKyAgaW50IHJldCA9IDE7CisKKyAgZXJyID0gZ2NyeV9wa19zaWduICgmZGF0YV9zaWduZWQsCisJCSAgICAgIGNvbnRleHQtPmRhdGEsIGNvbnRleHQtPmtleV9zZWNyZXQpOworICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfTk9UX0lNUExFTUVOVEVEKQorICAgIHsKKyAgICAgIGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgICAgICByZXQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAoZXJyKQorICAgIHsKKyAgICAgIGZhaWwgKCJwa19zaWduIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmaW5hbCkKKwljb250ZXh0LT5kYXRhX3NpZ25lZCA9IGRhdGFfc2lnbmVkOworICAgICAgZWxzZQorCWdjcnlfc2V4cF9yZWxlYXNlIChkYXRhX3NpZ25lZCk7CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3dvcmtfdmVyaWZ5IChjb250ZXh0X3QgY29udGV4dCwgdW5zaWduZWQgaW50IGZpbmFsKQoreworICBnY3J5X2Vycm9yX3QgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKyAgaW50IHJldCA9IDE7CisKKyAgaWYgKCFjb250ZXh0LT5kYXRhX3NpZ25lZCkKKyAgICByZXR1cm4gMDsKKworICBlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoY29udGV4dC0+ZGF0YV9zaWduZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+a2V5X3B1YmxpYyk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgc2hvd19zZXhwICgiZGF0YV9zaWduZWQ6XG4iLCBjb250ZXh0LT5kYXRhX3NpZ25lZCk7CisgICAgICBzaG93X3NleHAgKCJkYXRhOlxuIiwgY29udGV4dC0+ZGF0YSk7CisgICAgICBmYWlsICgicGtfdmVyaWZ5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICByZXQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAoZmluYWwpCisgICAgeworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGNvbnRleHQtPmRhdGFfc2lnbmVkKTsKKyAgICAgIGNvbnRleHQtPmRhdGFfc2lnbmVkID0gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfa2V5X3BhaXIgKGNvbnRleHRfdCBjb250ZXh0KQoreworICBzdHJ1Y3QKKyAgeworICAgIHdvcmtfdCB3b3JrZXI7CisgICAgY29uc3QgY2hhciAqaWRlbnRpZmllcjsKKyAgfSB3b3JrZXJfZnVuY3Rpb25zW10gPSB7IHsgd29ya19lbmNyeXB0LCAiZW5jcnlwdCIgfSwKKwkJCSAgIHsgd29ya19kZWNyeXB0LCAiZGVjcnlwdCIgfSwKKwkJCSAgIHsgd29ya19zaWduLCAgICAic2lnbiIgICAgfSwKKwkJCSAgIHsgd29ya192ZXJpZnksICAidmVyaWZ5IiAgfSB9OworICB1bnNpZ25lZCBpbnQgaSA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IChzaXplb2YgKHdvcmtlcl9mdW5jdGlvbnMpIC8gc2l6ZW9mICgqd29ya2VyX2Z1bmN0aW9ucykpOyBpKyspCisgICAgeworICAgICAgcHJpbnRmICgiJXM6ICIsIHdvcmtlcl9mdW5jdGlvbnNbaV0uaWRlbnRpZmllcik7CisgICAgICBiZW5jaG1hcmsgKHdvcmtlcl9mdW5jdGlvbnNbaV0ud29ya2VyLCBjb250ZXh0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X2luaXQgKGNvbnRleHRfdCBjb250ZXh0LCBnY3J5X3NleHBfdCBrZXlfc2VjcmV0LCBnY3J5X3NleHBfdCBrZXlfcHVibGljKQoreworICBnY3J5X2Vycm9yX3QgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKyAgdW5zaWduZWQgaW50IGtleV9zaXplID0gMDsKKyAgZ2NyeV9tcGlfdCBkYXRhID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3QgZGF0YV9zZXhwID0gTlVMTDsKKworICBrZXlfc2l6ZSA9IGdjcnlfcGtfZ2V0X25iaXRzIChrZXlfc2VjcmV0KTsKKyAgYXNzZXJ0IChrZXlfc2l6ZSk7CisKKyAgZGF0YSA9IGdjcnlfbXBpX25ldyAoa2V5X3NpemUpOworICBhc3NlcnQgKGRhdGEpOworCisgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoZGF0YSwga2V5X3NpemUsIEdDUllfU1RST05HX1JBTkRPTSk7CisgIGdjcnlfbXBpX2NsZWFyX2JpdCAoZGF0YSwga2V5X3NpemUgLSAxKTsKKyAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmZGF0YV9zZXhwLCBOVUxMLAorCQkJICIoZGF0YSAoZmxhZ3MgcmF3KSAodmFsdWUgJW0pKSIsCisJCQkgZGF0YSk7CisgIGFzc2VydCAoISBlcnIpOworICBnY3J5X21waV9yZWxlYXNlIChkYXRhKTsKKworICBjb250ZXh0LT5rZXlfc2VjcmV0ID0ga2V5X3NlY3JldDsKKyAgY29udGV4dC0+a2V5X3B1YmxpYyA9IGtleV9wdWJsaWM7CisgIGNvbnRleHQtPmRhdGEgPSBkYXRhX3NleHA7CisgIGNvbnRleHQtPmRhdGFfZW5jcnlwdGVkID0gTlVMTDsKKyAgY29udGV4dC0+ZGF0YV9zaWduZWQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9kZXN0cm95IChjb250ZXh0X3QgY29udGV4dCkKK3sKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGNvbnRleHQtPmtleV9zZWNyZXQpOworICBnY3J5X3NleHBfcmVsZWFzZSAoY29udGV4dC0+a2V5X3B1YmxpYyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChjb250ZXh0LT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfa2V5X3BhaXJfZmlsZSAoY29uc3QgY2hhciAqa2V5X3BhaXJfZmlsZSkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgIHZvaWQgKmtleV9wYWlyX2J1ZmZlciA9IE5VTEw7CisgIGdjcnlfc2V4cF90IGtleV9wYWlyX3NleHAgPSBOVUxMOworICBnY3J5X3NleHBfdCBrZXlfc2VjcmV0X3NleHAgPSBOVUxMOworICBnY3J5X3NleHBfdCBrZXlfcHVibGljX3NleHAgPSBOVUxMOworICBzdHJ1Y3QgY29udGV4dCBjb250ZXh0ID0geyBOVUxMIH07CisgIHNpemVfdCBmaWxlX2xlbmd0aDsKKworICBrZXlfcGFpcl9idWZmZXIgPSByZWFkX2ZpbGUgKGtleV9wYWlyX2ZpbGUsICZmaWxlX2xlbmd0aCk7CisgIGlmICgha2V5X3BhaXJfYnVmZmVyKQorICAgIGRpZSAoImZhaWxlZCB0byBvcGVuIGAlcydcbiIsIGtleV9wYWlyX2ZpbGUpOworCisgIGVyciA9IGdjcnlfc2V4cF9zc2NhbiAoJmtleV9wYWlyX3NleHAsIE5VTEwsCisJCQkga2V5X3BhaXJfYnVmZmVyLCBmaWxlX2xlbmd0aCk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9zZXhwX3NzY2FuIGZhaWxlZFxuIik7CisKKyAga2V5X3NlY3JldF9zZXhwID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleV9wYWlyX3NleHAsICJwcml2YXRlLWtleSIsIDApOworICBhc3NlcnQgKGtleV9zZWNyZXRfc2V4cCk7CisgIGtleV9wdWJsaWNfc2V4cCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXlfcGFpcl9zZXhwLCAicHVibGljLWtleSIsIDApOworICBhc3NlcnQgKGtleV9wdWJsaWNfc2V4cCk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9wYWlyX3NleHApOworCisgIGNvbnRleHRfaW5pdCAoJmNvbnRleHQsIGtleV9zZWNyZXRfc2V4cCwga2V5X3B1YmxpY19zZXhwKTsKKworICBwcmludGYgKCJLZXkgZmlsZTogJXNcbiIsIGtleV9wYWlyX2ZpbGUpOworICBwcm9jZXNzX2tleV9wYWlyICgmY29udGV4dCk7CisgIHByaW50ZiAoIlxuIik7CisKKyAgY29udGV4dF9kZXN0cm95ICgmY29udGV4dCk7CisgIGdjcnlfZnJlZSAoa2V5X3BhaXJfYnVmZmVyKTsKK30KKworCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVfa2V5IChjb25zdCBjaGFyICphbGdvcml0aG0sIGNvbnN0IGNoYXIgKmtleV9zaXplKQoreworICBnY3J5X2Vycm9yX3QgZXJyID0gR1BHX0VSUl9OT19FUlJPUjsKKyAgc2l6ZV90IGtleV9wYWlyX2J1ZmZlcl9zaXplID0gMDsKKyAgY2hhciAqa2V5X3BhaXJfYnVmZmVyID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3Qga2V5X3NwZWMgPSBOVUxMOworICBnY3J5X3NleHBfdCBrZXlfcGFpciA9IE5VTEw7CisKKyAgaWYgKGlzZGlnaXQgKCh1bnNpZ25lZCBpbnQpKmtleV9zaXplKSkKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5ICglcyAobmJpdHMgJXMpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtLCBrZXlfc2l6ZSk7CisgIGVsc2UKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZrZXlfc3BlYywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZ2Vua2V5ICglcyAoY3VydmUgJXMpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtLCBrZXlfc2l6ZSk7CisgIGlmIChlcnIpCisgICAgZGllICgic2V4cF9idWlsZCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGVyciA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5X3BhaXIsIGtleV9zcGVjKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBzaG93X3NleHAgKCJyZXF1ZXN0OlxuIiwga2V5X3NwZWMpOworICAgICAgZGllICgicGtfZ2Vua2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgfQorCisgIGtleV9wYWlyX2J1ZmZlcl9zaXplID0gZ2NyeV9zZXhwX3NwcmludCAoa2V5X3BhaXIsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwKKwkJCQkJICAgTlVMTCwgMCk7CisgIGtleV9wYWlyX2J1ZmZlciA9IGdjcnlfeG1hbGxvYyAoa2V5X3BhaXJfYnVmZmVyX3NpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGtleV9wYWlyLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsCisJCSAgICBrZXlfcGFpcl9idWZmZXIsIGtleV9wYWlyX2J1ZmZlcl9zaXplKTsKKworICBwcmludGYgKCIlLipzIiwgKGludClrZXlfcGFpcl9idWZmZXJfc2l6ZSwga2V5X3BhaXJfYnVmZmVyKTsKKyAgZ2NyeV9mcmVlIChrZXlfcGFpcl9idWZmZXIpOworfQorCisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBsYXN0X2FyZ2MgPSAtMTsKKyAgaW50IGdlbmtleV9tb2RlID0gMDsKKyAgaW50IGZpcHNfbW9kZSA9IDA7CisKKyAgaWYgKGFyZ2MpCisgICAgeyBhcmdjLS07IGFyZ3YrKzsgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorICAgICAgICB7CisgICAgICAgICAgcHV0cyAoIlVzYWdlOiAiIFBHTSAiIFtPUFRJT05TXSBbRklMRVNdXG4iCisgICAgICAgICAgICAgICAgIlZhcmlvdXMgcHVibGljIGtleSB0ZXN0czpcblxuIgorICAgICAgICAgICAgICAgICIgIERlZmF1bHQgaXMgdG8gcHJvY2VzcyBhbGwgZ2l2ZW4ga2V5IGZpbGVzXG5cbiIKKyAgICAgICAgICAgICAgICAiICAtLWdlbmtleSBBTEdPTkFNRSBTSVpFICBHZW5lcmF0ZSBhIHB1YmxpYyBrZXlcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgIiAgLS12ZXJib3NlICAgIGVuYWJsZSBleHRyYSBpbmZvcm1hdGlvbmFsIG91dHB1dFxuIgorICAgICAgICAgICAgICAgICIgIC0tZGVidWcgICAgICBlbmFibGUgYWRkaXRpb25hbCBkZWJ1ZyBvdXRwdXRcbiIKKyAgICAgICAgICAgICAgICAiICAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcblxuIik7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJib3NlIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlKys7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1kZWJ1ZyIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSA9IGRlYnVnID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWdlbmtleSIpKQorICAgICAgICB7CisgICAgICAgICAgZ2Vua2V5X21vZGUgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZmlwcyIpKQorICAgICAgICB7CisgICAgICAgICAgZmlwc19tb2RlID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgIH0KKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1ZFUkJPU0lUWSwgKGludCl2ZXJib3NlKTsKKworICBpZiAoZmlwc19tb2RlKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9GT1JDRV9GSVBTX01PREUsIDApOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogdmVyc2lvbiBtaXNtYXRjaFxuIik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgaWYgKGdlbmtleV9tb2RlKQorICAgIHsKKyAgICAgIC8qIE5vIHZhbHVhYmxlIGtleXMgYXJlIGNyZWF0ZSwgc28gd2UgY2FuIHNwZWVkIHVwIG91ciBSTkcuICovCisgICAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgICAgfQorICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworCisKKyAgaWYgKGdlbmtleV9tb2RlICYmIGFyZ2MgPT0gMikKKyAgICB7CisgICAgICBnZW5lcmF0ZV9rZXkgKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworICAgIH0KKyAgZWxzZSBpZiAoIWdlbmtleV9tb2RlICYmIGFyZ2MpCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJcHJvY2Vzc19rZXlfcGFpcl9maWxlIChhcmd2W2ldKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogIiBQR00KKyAgICAgICAgICAgICAgICIgW09QVElPTlNdIFtGSUxFU10gKHRyeSAtLWhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24pXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3BrY3MxdjItb2FlcC5oIGIvdGVzdHMvcGtjczF2Mi1vYWVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmODY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BrY3MxdjItb2FlcC5oCkBAIC0wLDAgKzEsNzgxIEBACisvKiBwa2NzMXYyLW9hZXAuaCAtIE9BRVAgdGVzdCB2ZWN0b3IgdGFibGUKKyAqIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyAqIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorICogaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogTWFudWFsbHkgY3JlYXRlZCBmcm9tIHRoZSBPQUVQIGZpbGUgaW4KKyAgIGZ0cDovL2Z0cC5yc2FzZWN1cml0eS5jb20vcHViL3BrY3MvcGtjcy0xL3BrY3MtMXYyLTFkMi12ZWMuemlwCisgKi8KKworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpkZXNjOworICAgIGNvbnN0IGNoYXIgKm4sICplLCAqZDsKKyAgICBzdHJ1Y3QgeworICAgICAgY29uc3QgY2hhciAqZGVzYzsKKyAgICAgIGNvbnN0IGNoYXIgKm1lc2c7CisgICAgICBjb25zdCBjaGFyICpzZWVkOworICAgICAgY29uc3QgY2hhciAqZW5jcjsKKyAgICB9IG1bNl07CisgIH0gdGJsW10gPSB7CisgICAgeworICAgICAgIkV4YW1wbGUgMTogQSAxMDI0LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWIiCisgICAgICAiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MiIKKyAgICAgICJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0IgorICAgICAgIjhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiNTMzMzljZmRiNzlmYzg0NjZhNjU1YzczMTZhY2E4NWM1NWZkOGY2ZGQ4OThmZGFmMTE5NTE3ZWY0ZjUyZThmZCIKKyAgICAgICI4ZTI1OGRmOTNmZWUxODBmYTBlNGFiMjk2OTNjZDgzYjE1MmE1NTNkNGFjNGQxODEyYjhiOWZhNWFmMGU3ZjU1IgorICAgICAgImZlNzMwNGRmNDE1NzA5MjZmMzMxMWYxNWM0ZDY1YTczMmM0ODMxMTZlZTNkM2QyZDBhZjM1NDlhZDliZjdjYmYiCisgICAgICAiYjc4YWQ4ODRmODRkNWJlYjA0NzI0ZGM3MzY5YjMxZGVmMzdkMGNmNTM5ZTljZmNkZDNkZTY1MzcyOWVhZDVkMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDEuMSIsCisgICAgICAgICAgIjY2MjgxOTRlMTIwNzNkYjAzYmE5NGNkYTllZjk1MzIzOTdkNTBkYmE3OWI5ODcwMDRhZmVmZTM0IiwKKyAgICAgICAgICAiMThiNzc2ZWEyMTA2OWQ2OTc3NmEzM2U5NmJhZDQ4ZTFkZGEwYTVlZiIsCisgICAgICAgICAgIjM1NGZlNjdiNGExMjZkNWQzNWZlMzZjNzc3NzkxYTNmN2JhMTNkZWY0ODRlMmQzOTA4YWZmNzIyZmFkNDY4ZmIiCisgICAgICAgICAgIjIxNjk2ZGU5NWQwYmU5MTFjMmQzMTc0ZjhhZmNjMjAxMDM1ZjdiNmQ4ZTY5NDAyZGU1NDUxNjE4YzIxYTUzNWYiCisgICAgICAgICAgImE5ZDdiZmM1YjhkZDlmYzI0M2Y4Y2Y5MjdkYjMxMzIyZDZlODgxZWFhOTFhOTk2MTcwZTY1N2EwNWEyNjY0MjYiCisgICAgICAgICAgImQ5OGM4ODAwM2Y4NDc3YzEyMjcwOTRhMGQ5ZmExZThjNDAyNDMwOWNlMWVjY2NiNTIxMDAzNWQ0N2FjNzJlOGEiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMS4yIiwKKyAgICAgICAgICAiNzUwYzQwNDdmNTQ3ZThlNDE0MTE4NTY1MjMyOThhYzliYWUyNDVlZmFmMTM5N2ZiZTU2ZjlkZDUiLAorICAgICAgICAgICIwY2M3NDJjZTRhOWI3ZjMyZjk1MWJjYjI1MWVmZDkyNWZlNGZlMzVmIiwKKyAgICAgICAgICAiNjQwZGIxYWNjNThlMDU2OGZlNTQwN2U1ZjliNzAxZGZmOGMzYzkxZTcxNmM1MzZmYzdmY2VjNmNiNWI3MWMxMSIKKyAgICAgICAgICAiNjU5ODhkNGEyNzllMTU3N2Q3MzBmYzdhMjk5MzJlM2YwMGM4MTUxNTIzNmQ4ZDhlMzEwMTdhN2EwOWRmNDM1MiIKKyAgICAgICAgICAiZDkwNGNkZWI3OWFhNTgzYWRjYzMxZWE2OThhNGMwNTI4M2RhYmE5MDg5YmU1NDkxZjY3YzFhNGVlNDhkYzc0YiIKKyAgICAgICAgICAiYmJlNjY0M2FlZjg0NjY3OWI0Y2IzOTVhMzUyZDVlZDExNTkxMmRmNjk2ZmZlMDcwMjkzMjk0NmQ3MTQ5MmI0NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAxLjMiLAorICAgICAgICAgICJkOTRhZTA4MzJlNjQ0NWNlNDIzMzFjYjA2ZDUzMWE4MmIxZGI0YmFhZDMwZjc0NmRjOTE2ZGYyNGQ0ZTNjMjQ1IgorICAgICAgICAgICIxZmZmNTlhNjQyM2ViMGUxZDAyZDRmZTY0NmNmNjk5ZGZkODE4YzZlOTdiMDUxIiwKKyAgICAgICAgICAiMjUxNGRmNDY5NTc1NWE2N2IyODhlYWY0OTA1YzM2ZWVjNjZmZDJmZCIsCisgICAgICAgICAgIjQyMzczNmVkMDM1ZjYwMjZhZjI3NmMzNWMwYjM3NDFiMzY1ZTVmNzZjYTA5MWI0ZThjMjllMmYwYmVmZWU2MDMiCisgICAgICAgICAgIjU5NWFhODMyMmQ2MDJkMmU2MjVlOTVlYjgxYjJmMWM5NzI0ZTgyMmVjYTc2ZGI4NjE4Y2YwOWM1MzQzNTAzYTQiCisgICAgICAgICAgIjM2MDgzNWI1OTAzYmM2MzdlMzg3OWZiMDVlMGVmMzI2ODVkNWFlYzUwNjdjZDdjYzk2ZmU0YjI2NzBiNmVhYzMiCisgICAgICAgICAgIjA2NmIxZmNmNTY4NmI2ODU4OWFhZmI3ZDYyOWIwMmQ4Zjg2MjVjYTM4MzM2MjRkNDgwMGZiMDgxYjFjZjk0ZWIiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMS40IiwKKyAgICAgICAgICAiNTJlNjUwZDk4ZTdmMmEwNDhiNGY4Njg1MjE1M2I5N2UwMWRkMzE2ZjM0NmExOWY2N2E4NSIsCisgICAgICAgICAgImM0NDM1YTNlMWExOGE2OGI2ODIwNDM2MjkwYTM3Y2VmYjg1ZGIzZmIiLAorICAgICAgICAgICI0NWVhZDRjYTU1MWU2NjJjOTgwMGYxYWNhODI4M2IwNTI1ZTZhYmFlMzBiZTRiNGFiYTc2MmZhNDBmZDNkMzhlIgorICAgICAgICAgICIyMmFiZWZjNjk3OTRmNmViYmJjMDVkZGJiMTEyMTYyNDdkMmY0MTJmZDBmYmE4N2M2ZTNhY2Q4ODg4MTM2NDZmIgorICAgICAgICAgICJkMGU0OGU3ODUyMDRmOWMzZjczZDZkODIzOTU2MjcyMmRkZGQ4NzcxZmVjNDhiODNhMzFlZTZmNTkyYzRjZmQ0IgorICAgICAgICAgICJiYzg4MTc0ZjNiMTNhMTEyYWFlM2I5ZjdiODBlMGZjNmY3MjU1YmE4ODBkYzdkODAyMWUyMmFkNmE4NWYwNzU1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDEuNSIsCisgICAgICAgICAgIjhkYTg5ZmQ5ZTVmOTc0YTI5ZmVmZmI0NjJiNDkxODBmNmNmOWU4MDIiLAorICAgICAgICAgICJiMzE4YzQyZGYzYmUwZjgzZmVhODIzZjVhN2I0N2VkNWU0MjVhM2I1IiwKKyAgICAgICAgICAiMzZmNmUzNGQ5NGE4ZDM0ZGFhY2JhMzNhMjEzOWQwMGFkODVhOTM0NWE4NjA1MWU3MzA3MTYyMDA1NmI5MjBlMiIKKyAgICAgICAgICAiMTkwMDU4NTVhMjEzYTBmMjM4OTdjZGNkNzMxYjQ1MjU3Yzc3N2ZlOTA4MjAyYmVmZGQwYjU4Mzg2YjEyNDRlYSIKKyAgICAgICAgICAiMGNmNTM5YTA1ZDVkMTAzMjlkYTQ0ZTEzMDMwZmQ3NjBkY2Q2NDRjZmVmMjA5NGQxOTEwZDNmNDMzZTFjN2M2ZCIKKyAgICAgICAgICAiZDE4YmMxZjJkZjdmNjQzZDY2MmZiOWRkMzdlYWQ5MDU5MTkwZjRmYTY2Y2EzOWU4NjljNGViNDQ5Y2JkYzQzOSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAxLjYiLAorICAgICAgICAgICIyNjUyMTA1MDg0NDI3MSIsCisgICAgICAgICAgImU0ZWMwOTgyYzIzMzZmM2E2NzdmNmEzNTYxNzRlYjBjZTg4N2FiYzIiLAorICAgICAgICAgICI0MmNlZTI2MTdiMWVjZWE0ZGIzZjQ4MjkzODZmYmQ2MWRhZmJmMDM4ZTE4MGQ4MzdjOTYzNjZkZjI0YzA5N2I0IgorICAgICAgICAgICJhYjBmYWM2YmRmNTkwZDgyMWM5ZjEwNjQyZTY4MWFkMDViOGQ3OGIzNzhjMGY0NmNlMmZhZDYzZjc0ZTBhZDNkIgorICAgICAgICAgICJmMDZiMDc1ZDdlYjVmNTYzNmY4ZDQwM2I5MDU5Y2E3NjFiNWM2MmJiNTJhYTQ1MDAyZWE3MGJhYWNlMDhkZWQyIgorICAgICAgICAgICI0M2I5ZDhjYmQ2MmE2OGFkZTI2NTgzMmI1NjU2NGU0M2E2ZmE0MmVkMTk5YTA5OTc2OTc0MmRmMTUzOWU4MjU1IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSAyOiBBIDEwMjUtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZSIKKyAgICAgICI0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkIgorICAgICAgIjBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDUiCisgICAgICAiNWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZiIKKyAgICAgICI0NSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwODIzZjIwZmFkYjVkYTg5MDg4YTlkMDA4OTNlMjFmYTRhMWIxMWZiYzkzYzY0YTNiZTBiYWFlYTk3ZmIzYjkzIgorICAgICAgImMzZmY3MTM3MDRjMTljOTYzYzFkMTA3YWFlOTkwNTQ3MzlmNzllMDJlMTg2ZGU4NmY4N2E2ZGRlZmVhNmQ4Y2MiCisgICAgICAiZDFkM2M4MWE0N2JmYTcyNTViZTIwNjAxYTRhNGIyZjA4YTE2N2I1ZTI3OWQ3MTViMWI0NTViZGQ3ZWFiMjQ1OSIKKyAgICAgICI0MWQ5NzY4YjlhY2VmYjNjY2RhNTk1MmRhM2NlZTcyNTI1YjQ1MDE2NjNhOGVlMTVjOWU5OTJkOTI0NjJmZTM5IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMi4xIiwKKyAgICAgICAgICAiOGZmMDBjYWE2MDVjNzAyODMwNjM0ZDlhNmMzZDQyYzY1MmI1OGNmMWQ5MmZlYzU3MGJlZWU3IiwKKyAgICAgICAgICAiOGM0MDdiNWVjMjg5OWU1MDk5YzUzZThjZTc5M2JmOTRlNzFiMTc4MiIsCisgICAgICAgICAgIjAxODFhZjg5MjJiOWZjYjRkNzlkOTJlYmUxOTgxNTk5MmZjMGMxNDM5ZDhiY2Q0OTEzOThhMGY0YWQzYTMyOWEiCisgICAgICAgICAgIjViZDkzODU1NjBkYjUzMjY4M2M4YjdkYTA0ZTRiMTJhZWQ2YWFjZGY0NzFjMzRjOWNkYTg5MWFkZGNjMmRmMzQiCisgICAgICAgICAgIjU2NjUzYWE2MzgyZTlhZTU5YjU0NDU1MjU3ZWIwOTlkNTYyYmJlMTA0NTNmMmI2ZDEzYzU5YzAyZTEwZjFmOGEiCisgICAgICAgICAgImJiNWRhMGQwNTcwOTMyZGFjZjJkMDkwMWRiNzI5ZDBmZWZjYzA1NGU3MDk2OGVhNTQwYzgxYjA0YmNhZWZlNzIiCisgICAgICAgICAgIjBlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDIuMiIsCisgICAgICAgICAgIjJkIiwKKyAgICAgICAgICAiYjYwMGNmM2MyZTUwNmQ3ZjE2Nzc4YzkxMGQzYThiMDAzZWVlNjFkNSIsCisgICAgICAgICAgIjAxODc1OWZmMWRmNjNiMjc5MjQxMDU2MjMxNDQxNmE4YWVhZjJhYzYzNGI0NmY5NDBhYjgyZDY0ZGJmMTY1ZWUiCisgICAgICAgICAgImUzMzAxMWRhNzQ5ZDRiYWI2ZTJmY2QxODEyOWM5ZTQ5Mjc3ZDg0NTMxMTJiNDI5YTIyMmE4NDcxYjA3MDk5MzkiCisgICAgICAgICAgIjk4ZTc1ODg2MWM0ZDNmNmQ3NDlkOTFjNDI5MGQzMzJjN2E0YWIzZjdlYTM1ZmYzYTA3ZDQ5N2M5NTVmZjBmZmMiCisgICAgICAgICAgIjk1MDA2YjYyYzZkMjk2ODEwZDliZmFiMDI0MTk2Yzc5MzQwMTJjMmRmOTc4ZWYyOTlhYmEyMzk5NDBjYmExMDIiCisgICAgICAgICAgIjQ1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDIuMyIsCisgICAgICAgICAgIjc0ZmM4OGM1MWJjOTBmNzdhZjlkNWU5YTRhNzAxMzNkNGI0ZTBiMzRkYTNjMzdjN2VmOGUiLAorICAgICAgICAgICJhNzM3NjhhZWVhYTkxZjlkOGMxZWQ2ZjlkMmI2MzQ2N2YwN2NjYWUzIiwKKyAgICAgICAgICAiMDE4ODAyYmFiMDRjNjAzMjVlODFjNDk2MjMxMWYyYmU3YzJhZGNlOTMwNDFhMDA3MTljODhmOTU3NTc1ZjJjNyIKKyAgICAgICAgICAiOWYxYjdiYzhjZWQxMTVjNzA2YjMxMWMwOGEyZDk4NmNhM2I2YTkzMzZiMTQ3YzI5YzZmMjI5NDA5ZGRlYzY1MSIKKyAgICAgICAgICAiYmQxZmRkNWEwYjdmNjEwYzk5MzdmZGI0YTNhNzYyMzY0YjhiMzIwNmI0ZWE0ODVmZDA5OGQwOGY2M2Q0YWE4YiIKKyAgICAgICAgICAiYjI2OTdkMDI3Yjc1MGMzMmQ3Zjc0ZWFmNTE4MGQyZTliNjZiMTdjYjJmYTU1NTIzYmMyODBkYTEwZDE0YmUyMCIKKyAgICAgICAgICAiNTMiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMi40IiwKKyAgICAgICAgICAiYTdlYjJhNTAzNjkzMWQyN2Q0ZTg5MTMyNmQ5OTY5MmZmYWRkYTliZjdlZmQzZTM0ZTYyMmM0YWRjMDg1ZjcyMSIKKyAgICAgICAgICAiZGZlODg1MDcyYzc4YTIwM2IxNTE3MzliZTU0MGZhOGMxNTNhMTBmMDBhIiwKKyAgICAgICAgICAiOWE3YjNiMGU3MDhiZDk2ZjgxOTBlY2FiNGZiOWIyYjM4MDVhODE1NiIsCisgICAgICAgICAgIjAwYTQ1NzhjYmMxNzYzMThhNjM4ZmJhN2QwMWRmMTU3NDZhZjQ0ZDRmNmNkOTZkN2U3YzQ5NWNiZjQyNWIwOWMiCisgICAgICAgICAgIjY0OWQzMmJmODg2ZGE0OGZiYWY5ODlhMjExNzE4N2NhZmIxZmI1ODAzMTc2OTBlM2NjZDQ0NjkyMGI3YWY4MmIiCisgICAgICAgICAgIjMxZGI1ODA0ZDg3ZDAxNTE0YWNiZmE5MTU2ZTc4MmY4NjdmNmJlZDk0NDllMGU5YTJjMDliY2VjYzZhYTA4NzYiCisgICAgICAgICAgIjM2OTY1ZTM0YjNlYzc2NmYyZmUyZTQzMDE4YTJmZGRlYjE0MDYxNmEwZTlkODJlNTMzMTAyNGVlMDY1MmZjNzYiCisgICAgICAgICAgIjQxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDIuNSIsCisgICAgICAgICAgIjJlZjJiMDY2Zjg1NGMzM2YzYmRjYmI1OTk0YTQzNWU3M2Q2YzZjIiwKKyAgICAgICAgICAiZWIzY2ViYmM0YWRjMTZiYjQ4ZTg4YzhhZWMwZTM0YWY3ZjQyN2ZkMyIsCisgICAgICAgICAgIjAwZWJjNWY1ZmRhNzdjZmRhZDNjODM2NDFhOTAyNWU3N2Q3MmQ4YTZmYjMzYTgxMGY1OTUwZjhkNzRjNzNlOGQiCisgICAgICAgICAgIjkzMWU4NjM0ZDg2YWIxMjQ2MjU2YWUwN2I2MDA1YjcxYjdmMmZiOTgzNTEyMTgzMzFjZTY5YjhmZmJkYzlkYTAiCisgICAgICAgICAgIjhiYmM5YzcwNGY4NzZkZWI5ZGY5ZmMyZWMwNjVjYWQ4N2Y5MDkwYjA3YWNjMTdhYTdmOTk3YjI3YWNhNDg4MDYiCisgICAgICAgICAgImU4OTdmNzcxZDk1MTQxZmU0NTI2ZDhhNTMwMWI2Nzg2MjdlZmFiNzA3ZmQ0MGZiZWJkNmU3OTJhMjU2MTNlN2EiCisgICAgICAgICAgImVjIiwKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAyLjYiLAorICAgICAgICAgICI4YTdmYjM0NGM4YjZjYjJjZjJlZjFmNjQzZjlhMzIxOGY2ZTE5YmJhODljMCIsCisgICAgICAgICAgIjRjNDVjZjRkNTdjOThlM2Q2ZDIwOTVhZGM1MWM0ODllYjUwZGZmODQiLAorICAgICAgICAgICIwMTA4MzllYzIwYzI3YjkwNTJlNTViZWZiOWI3N2U2ZmMyNmU5MDc1ZDdhNTQzNzhjNjQ2YWJkZjUxZTQ0NWJkIgorICAgICAgICAgICI1NzE1ZGU4MTc4OWY1NmYxODAzZDkxNzA3NjRhOWU5M2NiNzg3OTg2OTQwMjNlZTczOTNjZTA0YmM1ZDhmOGM1IgorICAgICAgICAgICJhNTJjMTcxZDQzODM3ZTNhY2E2MmY2MDllYjBhYTVmZmIwOTYwZWYwNDE5OGRkNzU0ZjU3ZjdmYmU2YWJmNzY1IgorICAgICAgICAgICJjZjExOGI0Y2E0NDNiMjNiNWFhYjI2NmY5NTIzMjZhYzQ1ODExMDA2NDQzMjVmOGI3MjFhY2Q1ZDA0ZmYxNGVmIgorICAgICAgICAgICIzYSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkV4YW1wbGUgMzogQSAxMDI2LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDAiCisgICAgICAiNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjNyIKKyAgICAgICJjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiIgorICAgICAgImZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDMiCisgICAgICAiZTkiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMTViNDhhNWI1NjgzYTk0NjcwZTIzYjU3MThmODE0ZmEwZTEzZjg1MDM4ZjUwNzExMTgyY2JhNjE1MTA1ODFmMyIKKyAgICAgICJkMjJjN2UyMzJlZjkzN2UyMmU1NTFkNjhiODZlMmY4Y2IxYWFkOGJlMmU0ODhmNWRmN2VmZDI3OWUzZjU2OGQ0IgorICAgICAgImVhZjM2ZjgwY2Y3MTQxYWNlNjBmY2M5MTEzZmI2YzRhODQxZmQ1MGJiYzdjNTEyZmZjYmVmZjIxNDg3YWE4MTEiCisgICAgICAiZWIzY2E4YzYyMDA1MzQ2YTg2ZGU4NmJmYTFkOGE5NDhmZDNmMzQ4YzIyZWFhZGYzMzNjM2NlNmNlMTMyMDhmZCIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDMuMSIsCisgICAgICAgICAgIjA4NzgyMGI1NjllOGZhOGQiLAorICAgICAgICAgICI4Y2VkNmIxOTYyOTA4MDU3OTBlOTA5MDc0MDE1ZTZhMjBiMGM0ODk0IiwKKyAgICAgICAgICAiMDI2YTA0ODVkOTZhZWJkOTZiNDM4MjA4NTA5OWI5NjJlNmEyYmRlYzNkOTBjOGRiNjI1ZTE0MzcyZGU4NWUyZCIKKyAgICAgICAgICAiNWI3YmFhYjY1YzhmYWY5MWJiNTUwNGZiNDk1YWZjZTVjOTg4YjNmNmE1MmUyMGUxZDZjYmQzNTY2YzVjZDFmMiIKKyAgICAgICAgICAiYjgzMThiYjU0MmNjMGVhMjVjNGFhYjk5MzJhZmEyMDc2MGVhZGRlYzc4NDM5NmEwN2VhMGVmMjRkNGU2ZjRkMyIKKyAgICAgICAgICAiN2U1MDUyYTdhMzFlMTQ2YWE0ODBhMTExYmJlOTI2NDAxMzA3ZTAwZjQxMDAzMzg0MmI2ZDgyZmU1Y2U0ZGZhZSIKKyAgICAgICAgICAiODAiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMy4yIiwKKyAgICAgICAgICAiNDY1M2FjYWYxNzE5NjBiMDFmNTJhN2JlNjNhM2FiMjFkYzM2OGVjNDNiNTBkODJlYzM3ODFlMDQiLAorICAgICAgICAgICJiNDI5MWQ2NTY3NTUwODQ4Y2MxNTY5NjdjODA5YmFhYjZjYTUwN2YwIiwKKyAgICAgICAgICAiMDI0ZGI4OWM3ODAyOTg5YmUwNzgzODQ3ODYzMDg0OTQxYmYyMDlkNzYxOTg3ZTM4Zjk3Y2I1ZjZmMWJjODhkYSIKKyAgICAgICAgICAiNzJhNTBiNzNlYmFmMTFjODc5YzRmOTVkZjM3Yjg1MGI4ZjY1ZDc2MjJlMjViMWI4ODllODBmZTgwYmFjYTIwNiIKKyAgICAgICAgICAiOWQ2ZTBlMWQ4Mjk5NTNmYzQ1OTA2OWRlOThlYTk3OThiNDUxZTU1N2U5OWFiZjhmZTNkOWNjZjkwOTZlYmJmMyIKKyAgICAgICAgICAiZTUyNTVkM2I0ZTFjNmQyZWNhZGYwNjdhMzU5ZWVhODY0MDVhY2Q0N2Q1ZTE2NTUxN2NjYWZkNDdkNmRiZWU0YiIKKyAgICAgICAgICAiZjUiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMy4zIiwKKyAgICAgICAgICAiZDk0Y2QwZTA4ZmE0MDRlZDg5IiwKKyAgICAgICAgICAiY2U4OTI4ZjYwNTk1NTgyNTQwMDhiYWRkOTc5NGZhZGNkMmZkMWY2NSIsCisgICAgICAgICAgIjAyMzliY2U2ODEwMzI0NDE1Mjg4NzdkNmQxYzhiYjI4YWEzYmM5N2YxZGY1ODQ1NjM2MTg5OTU3OTc2ODM4NDQiCisgICAgICAgICAgImNhODY2NjQ3MzJmNGJlZDdhMGFhYjA4M2FhYWJmYjcyMzhmNTgyZTMwOTU4YzIwMjRlNDRlNTcwNDNiOTc5NTAiCisgICAgICAgICAgImZkNTQzZGE5NzdjOTBjZGRlNTMzN2Q2MTg0NDJmOTllNjBkNzc4M2FiNTljZTZkZDlkNjljNDdhZDFlOTYyYmUiCisgICAgICAgICAgImMyMmQwNTg5NWNmZjhkM2Y2NGVkNTI2MWQ5MmIyNjc4NTEwMzkzNDg0OTkwYmEzZjdmMDY4MThhZTZmZmNlOGEiCisgICAgICAgICAgIjNhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDMuNCIsCisgICAgICAgICAgIjZjYzY0MWI2YjYxZTZmOTYzOTc0ZGFkMjNhOTAxMzI4NGVmMSIsCisgICAgICAgICAgIjZlMjk3OWY1MmQ2ODE0YTU3ZDgzYjA5MDA1NDg4OGYxMTlhNWI5YTMiLAorICAgICAgICAgICIwMjk5NGM2MmFmZDc2ZjQ5OGJhMWZkMmNmNjQyODU3ZmNhODFmNDM3M2NiMDhmMWNiYWVlNmYwMjVjM2I1MTJiIgorICAgICAgICAgICI0MmMzZTg3NzkxMTM0NzY2NDgwMzlkYmUwNDkzZjkyNDYyOTJmYWMyODk1MDYwMGU3YzBmMzJlZGY5YzgxYjlkIgorICAgICAgICAgICJlYzQ1YzNiZGUwY2M4ZDg4NDc1OTAxNjk5MDdiN2RjNTk5MWNlYjI5YmIwNzE0ZDYxM2Q5NmRmMGYxMmVjNWQ4IgorICAgICAgICAgICJkMzUwN2M4ZWU3YWU3OGRkODNmMjE2ZmE2MWRlMTAwMzYzYWNhNDhhN2U5MTRhZTlmNDJkZGZiZTk0M2IwOWQ5IgorICAgICAgICAgICJhMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAzLjUiLAorICAgICAgICAgICJkZjUxNTE4MzJiNjFmNGYyNTg5MWZiNDE3MmYzMjhkMmVkZGY4MzcxZmZjZmRiZTk5NzkzOTI5NWYzMGVjYTY5IgorICAgICAgICAgICIxODAxN2NmZGExMTUzYmY3YTZhZjg3NTkzMjIzIiwKKyAgICAgICAgICAiMmQ3NjBiZmUzOGM1OWRlMzRjZGM4YjhjNzhhMzhlNjYyODRhMmQyNyIsCisgICAgICAgICAgIjAxNjIwNDJmZjY5Njk1OTJhNjE2NzAzMTgxMWEyMzk4MzRjZTYzOGFiZjU0ZmVjOGI5OTQ3ODEyMmFmZTJlZTYiCisgICAgICAgICAgIjdmOGM1YjE4YjAzMzk4MDViZmRiYzVhNGU2NzIwYjM3YzU5Y2ZiYTk0MjQ2NGM1OTdmZjUzMmExMTk4MjE1NDUiCisgICAgICAgICAgImZkMmU1OWIxMTRlNjFkYWY3MTgyMDUyOWY1MDI5Y2Y1MjQ5NTQzMjdjMzRlYzVlNmY1YmE3ZWZjYzRkZTk0M2EiCisgICAgICAgICAgImI4YWQ0ZWQ3ODdiMTQ1NDMyOWY3MGRiNzk4YTNhOGY0ZDkyZjgyNzRlMmIyOTQ4YWRlNjI3Y2U4ZWUzM2U0M2MiCisgICAgICAgICAgIjYwIiwKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAzLjYiLAorICAgICAgICAgICIzYzNiYWQ4OTNjNTQ0YTZkNTIwYWIwMjIzMTkxODhjOGQ1MDRiN2E3ODhiODUwOTAzYjg1OTcyZWFhMTg1NTJlIgorICAgICAgICAgICIxMTM0YTdhZDYwOTg4MjYyNTRmZjdhYjY3MmIzZDhlYjMxNThmYWM2ZDRjYmFlZjEiLAorICAgICAgICAgICJmMTc0Nzc5YzVmZDNjZmUwMDdiYWRjYjdhMzZjOWI1NWJmY2ZiZjBlIiwKKyAgICAgICAgICAiMDAxMTIwNTFlNzVkMDY0OTQzYmM0NDc4MDc1ZTQzNDgyZmQ1OWNlZTA2NzlkZTY4OTNlZWMzYTk0M2RhYTQ5MCIKKyAgICAgICAgICAiYjk2OTFjOTNkZmMwNDY0YjY2MjNiOWYzZGJkM2U3MDA4MzI2NGYwMzRiMzc0Zjc0MTY0ZTFhMDA3NjM3MjVlNSIKKyAgICAgICAgICAiNzQ3NDRiYTBiOWRiODM0MzRmMzFkZjk2ZjZlMmEyNmY2ZDhlYmEzNDhiZDQ2ODZjMjIzOGFjMDdjMzdhYWMzNyIKKyAgICAgICAgICAiODVkMWM3ZWVhMmY4MTlmZDkxNDkxNzk4ZWQ4ZTljZWY1ZTQzYjc4MWIwZTAyNzZlMzdjNDNmZjk0OTJkMDA1NyIKKyAgICAgICAgICAiMzAiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDQ6IEEgMTAyNy1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzIgorICAgICAgImQwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjIiCisgICAgICAiNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZCIKKyAgICAgICJkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwIgorICAgICAgIjM5IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA0MTFmZmNhM2I3Y2E1ZTllOWJlN2ZlMzhhODUxMDVlMzUzODk2ZGIwNWM1Nzk2YWVjZDJhNzI1MTYxZWIzNjUiCisgICAgICAiMWM4NjI5YTliODYyYjkwNGQ3YjBjN2IzN2Y4Y2I1YTFjMmI1NDAwMTAxOGEwMGExZWIyY2FmZTRlZTRlOTQ5MiIKKyAgICAgICJjMzQ4YmMyYmVkYWI0YjllYmJmMDY0ZThlZmYzMjJiOTAwOWY4ZWVjNjUzOTA1ZjQwZGY4OGEzY2RjNDlkNDU2IgorICAgICAgIjdmNzU2MjdkNDFhY2E2MjQxMjliNDZhMGI3YzY5OGU1ZTY1ZjJiN2JhMTAyYzc0OWExMDEzNWI2NTQwZDA0MDEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA0LjEiLAorICAgICAgICAgICI0YTg2NjA5NTM0ZWU0MzRhNmNiY2EzZjdlOTYyZTc2ZDQ1NWUzMjY0YzE5ZjYwNWY2ZTVmZjYxMzdjNjVjNTZkIgorICAgICAgICAgICI3ZmIzNDRjZDUyYmM5MzM3NGYzZDE2NmM5ZjBjNmY5YzUwNmJhZDE5MzMwOTcyZDIiLAorICAgICAgICAgICIxY2FjMTljZTk5M2RlZjU1Zjk4MjAzZjY4NTI4OTZjOTVjY2NhMWYzIiwKKyAgICAgICAgICAiMDRjY2UxOTYxNDg0NWUwOTQxNTJhM2ZlMThlNTRlMzMzMGM0NGU1ZWZiYzY0YWUxNjg4NmNiMTg2OTAxNGNjNSIKKyAgICAgICAgICAiNzgxYjFmOGY5ZTA0NTM4NGQwMTEyYTEzNWNhMGQxMmU5Yzg4YThlNDA2MzQxNmRlYWFlMzg0NGY2MGQ2ZTk2ZiIKKyAgICAgICAgICAiZTE1NTE0NWY0NTI1YjlhMzQ0MzFjYTM3NjYxODBmNzBlMTVhNWU1ZDhlOGIxYTUxNmZmODcwNjA5ZjEzZjg5NiIKKyAgICAgICAgICAiOTM1Y2VkMTg4Mjc5YTU4ZWQxM2QwNzExNDI3N2Q3NWM2NTY4NjA3ZTBhYjA5MmZkODAzYTIyM2U0YThlZTBiMSIKKyAgICAgICAgICAiYTgiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNC4yIiwKKyAgICAgICAgICAiYjBhZGM0ZjNmZTExZGE1OWNlOTkyNzczZDkwNTk5NDNjMDMwNDY0OTdlZTlkOWY5YTA2ZGYxMTY2ZGI0NmQ5OCIKKyAgICAgICAgICAiZjU4ZDI3ZWMwNzRjMDJlZWU2Y2JlMjQ0OWM4YjlmYzUwODBjNWMzZjQ0MzMwOTI1MTJlYzQ2YWE3OTM3NDNjOCIsCisgICAgICAgICAgImY1NDVkNTg5NzU4NWUzZGI3MWFhMGNiOGRhNzZjNTFkMDMyYWU5NjMiLAorICAgICAgICAgICIwMDk3YjY5OGM2MTY1NjQ1YjMwMzQ4NmZiZjVhMmE0NDc5YzBlZTg1ODg5YjU0MWE2ZjBiODU4ZDZiNjU5N2IxIgorICAgICAgICAgICIzYjg1NGViNGY4MzlhZjAzMzk5YTgwZDc5YmRhNjU3OGM4NDFmOTBkNjQ1NzE1YjI4MGQzNzE0Mzk5MmRkMTg2IgorICAgICAgICAgICJjODBiOTQ5Yjc3NWNhZTk3MzcwZTRlYzk3NDQzMTM2YzZkYTQ4NGU5NzBmZmRiMTMyM2EyMDg0NzgyMWQzYjE4IgorICAgICAgICAgICIzODFkZTEzYmI0OWFhZWE2NjUzMGM0YTRiODI3MWYzZWFlMTcyY2QzNjZlMDdlNjYzNmYxMDE5ZDJhMjhhZWQxIgorICAgICAgICAgICI1ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA0LjMiLAorICAgICAgICAgICJiZjZkNDJlNzAxNzA3YjFkMDIwNmIwYzhiNDVhMWM3MjY0MWZmMTI4ODkyMTlhODJiZGVhOTY1YjVlNzlhOTZiIgorICAgICAgICAgICIwZDAxNjNlZDlkNTc4ZWM5YWRhMjBmMmZiY2YxZWEzYzQwODlkODM0MTliYTgxYjBjNjBmMzYwNmRhOTkiLAorICAgICAgICAgICJhZDk5N2ZlZWY3MzBkNmVhN2JlNjBkMGRjNTJlNzJlYWNiZmRkMjc1IiwKKyAgICAgICAgICAiMDMwMWY5MzVlOWM0N2FiY2I0OGFjYmJlMDk4OTVkOWY1OTcxYWYxNDgzOWRhNGZmOTU0MTdlZTQ1M2QxZmQ3NyIKKyAgICAgICAgICAiMzE5MDcyYmI3Mjk3ZTFiNTVkNzU2MWNkOWQxYmIyNGMxYTlhMzdjNjE5ODY0MzA4MjQyODA0ODc5ZDg2ZWJkMCIKKyAgICAgICAgICAiMDFkY2U1MTgzOTc1ZTE1MDY5ODliNzBlNWE4MzQzNDE1NGQ1Y2JmZDZhMjQ3ODdlNjBlYjBjNjU4ZDJhYzE5MyIKKyAgICAgICAgICAiMzAyZDExOTJjNmU2MjJkNGExMmFkNGI1MzkyM2JjYTI0NmRmMzFjNjM5NWUzNzcwMmM2YTc4YWUwODFmYjlkMCIKKyAgICAgICAgICAiNjUiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNC40IiwKKyAgICAgICAgICAiZmIyZWYxMTJmNWU3NjZlYjk0MDE5Mjk3OTM0Nzk0ZjdiZTJmNmZjMWM1OGUiLAorICAgICAgICAgICIxMzY0NTRkZjU3MzBmNzNjODA3YTdlNDBkOGMxYTMxMmFjNWI5ZGQzIiwKKyAgICAgICAgICAiMDJkMTEwYWQzMGFmYjcyN2JlYjY5MWRkMGNmMTdkMGFmMWExZTdmYTBjYzA0MGVjMWE0YmEyNmE0MmM1OWQwYSIKKyAgICAgICAgICAiNzk2YTJlMjJjOGYzNTdjY2M5OGI2NTE5YWNlYjY4MmU5NDVlNjJjYjczNDYxNGE1Mjk0MDdjZDQ1MmJlZTNlNCIKKyAgICAgICAgICAiNGZlY2U4NDIzY2MxOWU1NTU0OGI4Yjk5NGI4NDljN2VjZGU0OTMzZTc2MDM3ZTFkMGNlNDQyNzViMDg3MTBjNiIKKyAgICAgICAgICAiOGU0MzAxMzBiOTI5NzMwZWQ3N2UwOWIwMTU2NDJjNTU5M2YwNGU0ZmZiOTQxMDc5ODEwMmE4ZTk2ZmZkZmUxMSIKKyAgICAgICAgICAiZTQiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNC41IiwKKyAgICAgICAgICAiMjhjY2Q0NDdiYjllODUxNjZkYWJiOWU1YjdkMWFkYWRjNGI5ZDM5ZjIwNGU5NmQ1ZTQ0MGNlOWFkOTI4YmMxYyIKKyAgICAgICAgICAiMjI4NCIsCisgICAgICAgICAgImJjYTgwNTdmODI0YjJlYTI1N2YyODYxNDA3ZWVmNjNkMzMyMDg2ODEiLAorICAgICAgICAgICIwMGRiYjhhNzQzOWQ5MGVmZDkxOWEzNzdjNTRmYWU4ZmUxMWVjNThjM2I4NTgzNjJlMjNhZDFiOGE0NDMxMDc5IgorICAgICAgICAgICI5MDY2Yjk5MzQ3YWE1MjU2OTFkMmFkYzU4ZDliMDZlMzRmMjg4YzE3MDM5MGM1ZjBlMTFjMGFhMzY0NTk1OWYxIgorICAgICAgICAgICI4ZWU3OWU4ZjJiZThkN2FjNWMyM2QwNjFmMThkZDc0YjhjNWYyYTU4ZmNiNWViMGM1NGY5OWYwMWE4MzI0NzU2IgorICAgICAgICAgICI4MjkyNTM2NTgzMzQwOTQ4ZDdhOGM5N2M0YWNkMWU5OGQxZTI5ZGMzMjBlOTdhMjYwNTMyYThhYTdhNzU4YTFlIgorICAgICAgICAgICJjMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA0LjYiLAorICAgICAgICAgICJmMjIyNDI3NTFlYzZiMSIsCisgICAgICAgICAgIjJlN2UxZTE3ZjY0N2I1ZGRkMDMzZTE1NDcyZjkwZjY4MTJmM2FjNGUiLAorICAgICAgICAgICIwMGE1ZmZhNDc2OGM4YmJlY2FlZTJkYjc3ZThmMmVlYzk5NTk1OTMzNTQ1NTIwODM1ZTViYTdkYjk0OTNkM2UxIgorICAgICAgICAgICI3Y2RkZWZlNmE1ZjU2NzYyNDQ3MTkwOGRiNGUyZDgzYTBmYmVlNjA2MDhmYzg0MDQ5NTAzYjIyMzRhMDdkYzgzIgorICAgICAgICAgICJiMjdiMjI4NDdhZDg5MjBmZjQyZjY3NGVmNzliNzYyODBiMDAyMzNkMmI1MWI4Y2IyNzAzYTlkNDJiZmJjODI1IgorICAgICAgICAgICIwYzk2ZWMzMmMwNTFlNTdmMWI0YmE1MjhkYjg5YzM3ZTRjNTRlMjdlNmU2NGFjNjk2MzVhZTg4N2Q5NTQxNjE5IgorICAgICAgICAgICJhOSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkV4YW1wbGUgNTogQSAxMDI4LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTciCisgICAgICAiNmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OCIKKyAgICAgICJkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwIgorICAgICAgIjMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGUiCisgICAgICAiZDkiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMDI1NmViNGNiYTcwNjdmMmQyYmU1NDBkY2RmZjQ1ODJhMzZiN2QzMWQxYzkwOTliYjIxNGI3OTg0ODQ2NmEyNiIKKyAgICAgICI4ZjgwZjU4YTQ5YWMwNGMwZTM2NDg5MzRhMDIwNmMwNDUzN2MxOWIyMzY2NDNhNjA4MjczMjE0NGRmNzVmYTIxIgorICAgICAgIjc1ODhmNzk0NjgyYmU4OTE2ODI3NmRjNzI2YzVjMGNiZGI4NGQzMWJiZjI2ZDBhNDNhZjQ5NTcxN2Y3ZDUyOGEiCisgICAgICAiY2ZlZTM0MTU2MWY2ZmYzY2FlMDVjNTc4Zjg0NzBkOTY4MmY5YzBkMDcyZjlmNjA2OGI1NmQ1ODgwZjY4MmJlMiIKKyAgICAgICJjNSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDUuMSIsCisgICAgICAgICAgImFmNzFhOTAxZTNhNjFkMzEzMmYwZmMxZmRiNDc0ZjllYTY1NzkyNTdmZmMyNGQxNjQxNzAxNDViM2RiZGU4IiwKKyAgICAgICAgICAiNDRjOTJlMjgzZjc3Yjk0OTljNjAzZDk2MzY2MGM4N2QyZjkzOTQ2MSIsCisgICAgICAgICAgIjAzNjA0NmE0YTQ3ZDllZDNiYTlhODkxMzljMTA1MDM4ZWI3NDkyYjA1YTVkNjhiZmQ1M2FjY2ZmNDU5N2Y3YTYiCisgICAgICAgICAgIjg2NTFiNDdiNGE0NjI3ZDkyN2U0ODVlZWQ3YjQ1NjY0MjBlOGI0MDk4NzllNWQ2MDZlYWUyNTFkMjJhNWRmNzkiCisgICAgICAgICAgICAiOWY3OTIwYmZjMTE3Yjk5MjU3MmE1M2IxMjYzMTQ2YmNlYTAzMzg1Y2M1ZTg1M2M5YTEwMWM4YzNlMWJkYTMxYSIKKyAgICAgICAgICAiNTE5ODA3NDk2YzZjYjVlNWVmYjQwODgyM2EzNTJiOGZhMDY2MWZiNjY0ZWZhZGQ1OTNkZWI5OWZmZjVlZDAwMCIKKyAgICAgICAgICAiZTUiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNS4yIiwKKyAgICAgICAgICAiYTNiODQ0YTA4MjM5YThhYzQxNjA1YWYxN2E2Y2ZkYTRkMzUwMTM2NTg1OTAzYTQxN2E3OTI2ODc2MDUxOWE0YiIKKyAgICAgICAgICAiNGFjMzMwM2VjNzNmMGY4N2NmYjMyMzk5IiwKKyAgICAgICAgICAiY2IyOGY1ODYwNjU5ZmNlZWU0OWMzZWVhZmNlNjI1YTcwODAzYmQzMiIsCisgICAgICAgICAgIjAzZDZlYjY1NGVkY2U2MTViYzU5ZjQ1NTI2NWVkNGU1YTE4MjIzY2JiOWJlNGU0MDY5YjQ3MzgwNGQ1ZGU5NmYiCisgICAgICAgICAgIjU0ZGNhYWE2MDNkMDQ5YzVkOTRhYTE0NzBkZmNkMjI1NDA2NmI3YzdiNjFmZjFmNmY2NzcwZTMyMTVjNTEzOTkiCisgICAgICAgICAgImZkNGUzNGVjNTA4MmJjNDhmMDg5ODQwYWQwNDM1NGFlNjZkYzBmMWJkMThlNDYxYTMzY2MxMjU4YjQ0M2EyODMiCisgICAgICAgICAgIjdhNmRmMjY3NTlhYTIzMDIzMzQ5ODZmODczODBjOWNjOWQ1M2JlOWY5OTYwNWQyYzlhOTdkYTdiMDkxNWE0YTciCisgICAgICAgICAgImFkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDUuMyIsCisgICAgICAgICAgIjMwOGIwZWNiZDJjNzZjYjc3ZmM2ZjcwYzVlZGQyMzNmZDJmMjA5MjlkNjI5ZjAyNjk1M2JiNjJhOGY0YTNhMzEiCisgICAgICAgICAgIjRiZGUxOTVkZTg1YjVmODE2ZGEyYWFiMDc0ZDI2Y2I2YWNkZGYzMjNhZTNiOWM2NzhhYzNjZjEyZmJkZGU3IiwKKyAgICAgICAgICAiMjI4NWY0MGQ3NzA0ODJmOWE5ZWZhMmM3MmNiM2FjNTU3MTZkYzBjYSIsCisgICAgICAgICAgIjA3NzA5NTIxODE2NDlmOWY5ZjA3ZmY2MjZmZjNhMjJjMzVjNDYyNDQzZDkwNWQ0NTZhOWZkMGJmZjQzY2FjMmMiCisgICAgICAgICAgImE3YTlmNTU0ZTk0NzhiOWFjYzNhYzgzOGIwMjA0MGZmZDNlMTg0N2RlMmU0MjUzOTI5ZjlkZDllZTQwNDQzMjUiCisgICAgICAgICAgImE5YjA1Y2FiYjgwOGIyZWU4NDBkMzRlMTVkMTA1YTNmMWY3YjI3Njk1YTFhMDdhMmQ3M2ZlMDhlY2FhYTNjOWMiCisgICAgICAgICAgIjlkNGQ1YTg5ZmY4OTBkNTQ3MjdkN2FlNDBjMGVjMWE4ZGQ4NjE2NWQ4ZWUyYzYzNjgxNDEwMTZhNDhiNTViNjkiCisgICAgICAgICAgIjY3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDUuNCIsCisgICAgICAgICAgIjE1YzViOWVlMTE4NSIsCisgICAgICAgICAgIjQ5ZmE0NWQzYTc4ZGQxMGRmZDU3NzM5OWQxZWIwMGFmN2VlZDU1MTMiLAorICAgICAgICAgICIwODEyYjc2NzY4ZWJjYjY0MmQwNDAyNThlNWY0NDQxYTAxODUyMWJkOTY2ODdlNmM1ZTg5OWZjZDZjMTc1ODhmIgorICAgICAgICAgICJmNTlhODJjYzhhZTAzYTRiNDViMzEyOTlhZjE3ODhjMzI5ZjdkY2QyODVmOGNmNGNlZDgyNjA2Yjk3NjEyNjcxIgorICAgICAgICAgICJhNDViZWRjYTEzMzQ0MjE0NGQxNjE3ZDExNGY4MDI4NTdmMGY5ZDczOTc1MWM1N2EzZjllZTQwMDkxMmM2MWUyIgorICAgICAgICAgICJlNjk5MmJlMDMxYTQzZGQ0OGZhNmJhMTRlZWY3YzQyMmI1ZWRjNGU3YWZhMDRmZGQzOGY0MDJkMWM4YmI3MTlhIgorICAgICAgICAgICJiZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA1LjUiLAorICAgICAgICAgICIyMTAyNmU2ODAwYzdmYTcyOGZjYWFiYTBkMTk2YWUyOGQ3YTJhYzRmZmQ4YWJjZTc5NGYwOTg1ZjYwYzhhNjczIgorICAgICAgICAgICI3Mjc3MzY1ZDNmZWExMWRiODkyM2EyMDI5YSIsCisgICAgICAgICAgImYwMjg3NDEzMjM0Y2M1MDM0NzI0YTA5NGM0NTg2Yjg3YWZmMTMzZmMiLAorICAgICAgICAgICIwN2I2MGUxNGVjOTU0YmZkMjllNjBkMDA0N2U3ODlmNTFkNTcxODZjNjM1ODk5MDMzMDY3OTNjZWQzZjY4MjQxIgorICAgICAgICAgICJjNzQzNTI5YWJhNmE2Mzc0ZjkyZTE5ZTAxNjNlZmEzMzY5N2UxOTZmNzY2MWRmYWFhNDdhYWM2YmRlNWU1MWRlIgorICAgICAgICAgICJiNTA3YzcyYzU4OWEyY2ExNjkzZDk2YjE0NjAzODEyNDliMmNkYjllYWM0NDc2OWYyNDg5YzVkM2QyZjk5ZjBlIgorICAgICAgICAgICJlM2M3ZWU1YmY2NGE1YWM3OWM0MmJkNDMzZjE0OWJlOGNiNTk1NDgzNjE2NDA1OTU1MTNjOTdhZjdiYzI1MDk3IgorICAgICAgICAgICIyMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA1LjYiLAorICAgICAgICAgICI1NDFlMzdiNjhiNmM4ODcyYjg0YzAyIiwKKyAgICAgICAgICAiZDlmYmE0NWM5NmYyMWU2ZTI2ZDI5ZWIyY2RjYjY1ODViZTljYjM0MSIsCisgICAgICAgICAgIjA4YzM2ZDRkZGEzMzQyM2IyZWQ2ODMwZDg1ZjY0MTFiYTFkY2Y0NzBhMWZhZTBlYmVmZWU3YzA4OWYyNTZjZWYiCisgICAgICAgICAgIjc0Y2I5NmVhNjljMzhmNjBmMzlhYmVlNDQxMjliY2I0YzkyZGU3Zjc5NzYyM2IyMDA3NGUzZDljMjg5OTcwMWUiCisgICAgICAgICAgImQ5MDcxZTFlZmEwYmRkODRkNGMzZTUxMzAzMDJkOGYwMjQwYmFiYTRiODRhNzFjYzAzMmYyMjM1YTVmZjBmYWUiCisgICAgICAgICAgIjI3N2MzZThmOTExMmJlZjQ0YzlhZTIwZDE3NWZjOWE0MDU4YmZjOTMwYmEzMWIwMmUyZTRmNDQ0NDgzNzEwZjIiCisgICAgICAgICAgIjRhIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSA2OiBBIDEwMjktYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNiIKKyAgICAgICI2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyIgorICAgICAgImEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQiCisgICAgICAiMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMiIKKyAgICAgICJhZiIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwMjk1ZWNhMzU2MDYxODM2OTU1OWNlY2QzMDNhYTljZmRhZmMxZDlmMDY5NTlkZjc1ZmZlZjkyOWFhODk2OTYxIgorICAgICAgImJjZDE5MGRjNjk5N2VkYTdmNTk2M2U3MjRkMDdiNGRjMTFmMzA2NWU1YWU5N2Q5NjgzNTExMjI4MGI5MDg0YmIiCisgICAgICAiMTRmMmEyMWViZDRlODg5ZDQxYjljNDEzMmVjMTk1NmZjYWI4YmIyZmVkMDU3NTg4NDkzNjUyMmM1ZmY3ZDMzMiIKKyAgICAgICI2MTkwNDgyNGU3Y2FkZWU0ZTBiYjM3MmQyNDU3Y2Y3OGUyYmQxMjg2MjI4ZmY4M2YxMDczMWNlNjNjOTBjZmYzIgorICAgICAgImY5IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNi4xIiwKKyAgICAgICAgICAiNDA0NmNhOGJhYTMzNDdjYTI3ZjQ5ZTBkODFmOWNjMWQ3MWJlOWJhNTE3ZDQiLAorICAgICAgICAgICJkZDBmNmNmZTQxNWU4OGU1YTQ2OWE1MWZiYmE2ZGZkNDBhZGI0Mzg0IiwKKyAgICAgICAgICAiMDYzMGVlYmNkMjg1NmMyNGY3OTg4MDZlNDFmOWU2NzM0NWVkYTljZWRhMzg2YWNjOWZhY2FlYTFlZWVkMDZhYyIKKyAgICAgICAgICAiZTU4MzcwOTcxOGQ5ZDE2OWZhZGY0MTRkNWM3NmY5Mjk5NjgzM2VmMzA1Yjc1YjFlNGI5NWY2NjJhMjBmYWVkYyIKKyAgICAgICAgICAiM2JhZTBjNDgyN2E4YmY4YTg4ZWRiZDU3ZWMyMDNhMjdhODQxZjAyZTQzYTYxNWJhYjFhOGNhYzA3MDFkZTM0ZCIKKyAgICAgICAgICAiZWJkZWY2MmEwODgwODliNTVlYzM2ZWE3NTIyZmQzZWM4ZDA2YjZhMDczZTZkZjgzMzE1M2JjMGFlZmQ5M2JkMSIKKyAgICAgICAgICAiYTMiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNi4yIiwKKyAgICAgICAgICAiNWNjNzJjNjAyMzFkZjAzYjNkNDBmOWI1NzkzMWJjMzExMDlmOTcyNTI3ZjI4YjE5ZTc0ODBjNzI4OGNiM2M5MiIKKyAgICAgICAgICAiYjIyNTEyMjE0ZTRiZTZjOTE0NzkyZGRhYmRmNTdmYWE4YWE3IiwKKyAgICAgICAgICAiOGQxNGJkOTQ2YTEzNTExNDhmNWNhZTJlZDlhMGM2NTNlODVlYmQ4NSIsCisgICAgICAgICAgIjBlYmMzNzM3NjE3M2E0ZmQyZjg5Y2M1NWMyY2E2MmIyNmIxMWQ1MWMzYzdjZTQ5ZTg4NDVmNzRlNzYwNzMxN2MiCisgICAgICAgICAgIjQzNmJjOGQyM2I5NjY3ZGZlYjlkMDg3MjM0YjQ3YmM2ODM3MTc1YWU1YzA1NTlmNmI4MWQ3ZDIyNDE2ZDNlNTAiCisgICAgICAgICAgImY0YWM1MzNkOGYwODEyZjJkYjllNzkxZmU5Yzc3NWFjOGI2YWQwZjUzNWFkOWNlYjIzYTRhMDIwMTRjNThhYjMiCisgICAgICAgICAgImY4ZDMxNjE0OTlhMjYwZjM5MzQ4ZTcxNGFlMmExZDM0NDMyMDhmZDhiNzIyY2NmZGZiMzkzZTk4MDExZjk5ZTYiCisgICAgICAgICAgIjNmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDYuMyIsCisgICAgICAgICAgImIyMGU2NTEzMDMwOTJmNGJjY2I0MzA3MGMwZjg2ZDIzMDQ5MzYyZWQ5NjY0MmZjNTYzMmMyN2RiNGE1MmUzZDgiCisgICAgICAgICAgIjMxZjJhYjA2OGIyM2IxNDk4NzljMDAyZjZiZjNmZWVlOTc1OTExMTI1NjJjIiwKKyAgICAgICAgICAiNmMwNzViYzQ1NTIwZjE2NWMwYmY1ZWE0YzVkZjE5MWJjOWVmMGU0NCIsCisgICAgICAgICAgIjBhOThiZjEwOTM2MTkzOTQ0MzZjZjY4ZDhmMzhlMmYxNThmZGU4ZWE1NGYzNDM1ZjIzOWI4ZDA2YjgzMjE4NDQiCisgICAgICAgICAgIjIwMjQ3NmFlZWQ5NjAwOTQ5MjQ4MGNlM2E4ZDcwNTQ5OGM0YzhjNjhmMDE1MDFkYzgxZGI2MDhmNjAwODczNTAiCisgICAgICAgICAgImM4YzNiMGJkMmU5ZWY2YTgxNDU4YjdjODAxYjg5ZjJlNGZlOTlkNDkwMGJhNmE0YjVlNWE5NmQ4NjVkYzY3NmMiCisgICAgICAgICAgIjc3NTU5Mjg3OTQxMzBkNjI4MGE4MTYwYTE5MGYyZGYzZWE3Y2Y5YWEwMjcxZDg4ZTllNjkwNWVjZjFjNTE1MmQiCisgICAgICAgICAgIjY1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDYuNCIsCisgICAgICAgICAgIjY4NGUzMDM4YzVjMDQxZjciLAorICAgICAgICAgICIzYmJjM2JkNjYzN2RmZTEyODQ2OTAxMDI5YmY1YjBjMDcxMDM0MzljIiwKKyAgICAgICAgICAiMDA4ZTdhNjdjYWNmYjVjNGUyNGJlYzdkZWUxNDkxMTdmMTk1OThjZThjNDU4MDhmZWY4OGM2MDhmZjljZDZlNiIKKyAgICAgICAgICAiOTUyNjNiOWEzYzBhZDRiOGJhNGM5NTIzOGU5NmE4NDIyYjg1MzU2MjljOGQ1MzgyMzc0NDc5YWQxM2ZhMzk5NyIKKyAgICAgICAgICAiNGIyNDJmOWE3NTllZWFmOWM4M2FkNWE4Y2ExODk0MGEwMTYyYmE3NTU4NzZkZjI2M2Y0YmQ1MGM2NTI1YzU2MCIKKyAgICAgICAgICAiOTAyNjdjMWYwZTA5Y2UwODk5YTBjZjM1OWU4ODEyMGFiZDliZjg5MzQ0NWIzY2FlNzdkMzYwNzM1OWFlOWE1MiIKKyAgICAgICAgICAiZjgiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNi41IiwKKyAgICAgICAgICAiMzI0ODhjYjI2MmQwNDFkNmU0ZGQzNWY5ODdiZjNjYTY5NmRiMWYwNmFjMjlhNDQ2OTMiLAorICAgICAgICAgICJiNDZiNDE4OTNlOGJlZjMyNmY2NzU5MzgzYTgzMDcxZGFlN2ZjYWJjIiwKKyAgICAgICAgICAiMDAwMDM0NzQ0MTZjN2I2OGJkZjk2MWMzODU3Mzc5NDRkN2YxZjQwY2IzOTUzNDNjNjkzY2MwYjRmZTYzYjMxZiIKKyAgICAgICAgICAiZWRmMWVhZWVhYzljY2MwNjc4YjMxZGMzMmUwOTc3NDg5NTE0YzRmMDkwODVmNjI5OGE5NjUzZjAxYWVhNDA0NSIKKyAgICAgICAgICAiZmY1ODJlZTg4N2JlMjZhZTU3NWI3M2VlZjdmMzc3NDkyMWUzNzVhM2QxOWFkZGEwY2EzMWFhMTg0OTg4N2MxZiIKKyAgICAgICAgICAiNDJjYWM5Njc3ZjdhMmY0ZTkyM2Y2ZTVhODY4YjM4YzA4NGVmMTg3NTk0ZGM5ZjdmMDQ4ZmVhMmUwMjk1NTM4NCIKKyAgICAgICAgICAiYWIiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNi42IiwKKyAgICAgICAgICAiNTBiYTE0YmU4NDYyNzIwMjc5YzMwNmJhIiwKKyAgICAgICAgICAiMGEyNDAzMzEyYTQxZTNkNTJmMDYwZmJjMTNhNjdkZTVjZjc2MDlhNyIsCisgICAgICAgICAgIjBhMDI2ZGRhNWZjODc4NWY3YmQ5YmY3NTMyN2I2M2U4NWUyYzBmZGVlNWRhZGI2NWViZGNhYzlhZTFkZTk1YzkiCisgICAgICAgICAgIjJjNjcyYWI0MzNhYTdhOGU2OWNlNmE2ZDg4OTdmYWM0YWM0YTU0ZGU4NDFhZTVlNWJiY2U3Njg3ODc5ZDc5NjMiCisgICAgICAgICAgIjRjZWE3YTMwNjg0MDY1YzcxNGQ1MjQwOWI5MjgyNTZiYmY1M2VhYmNkNTIzMWViNzI1OTUwNDUzNzM5OWJkMjkiCisgICAgICAgICAgIjE2NGI3MjZkMzNhNDZkYTcwMTM2MGE0MTY4YTA5MWNjYWI3MmQ0NGE2MmZlZDI0NmMwZmZlYTViMTM0OGFiNTQiCisgICAgICAgICAgIjcwIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSA3OiBBIDEwMzAtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNyIKKyAgICAgICIzMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxIgorICAgICAgIjE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDMiCisgICAgICAiZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMyIKKyAgICAgICI3MyIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwNzBjZmNmZjJmZWI4Mjc2ZTI3NDMyYzQ1ZGZlZTQ4ZjQ5Yjc5MTdkNjUzMGUxZjBjYTM0NjBmMzJlMDI3NjE3IgorICAgICAgIjQ0ODdjNTZlMjJhNDVkMjUwMGQ3Nzc1NDk1MjE5ZDdkMTY1YTljZjNiZDkyYzMyYWY5YTk4ZDhkYzljYzI5NjgiCisgICAgICAiMDBhZGM5NGEwYTU0ZmI0MGYzNDI5MWJmODRlZThlYTEyYjZmMTA5MzU5YzZkMzU0MmE1MGY5Yzc2N2Y1Y2ZmZiIKKyAgICAgICIwNWE2ODFjMmU2NTZmYjc3Y2FhYWRiNGJlOTQ2OGQ4YWJjZDRkZjk4ZjU4ZTg2ZDIwNTNmYTEzNDlmNzQ4ZTIxIgorICAgICAgImIxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNy4xIiwKKyAgICAgICAgICAiNDdhYWU5MDkiLAorICAgICAgICAgICI0M2RkMDlhMDdmZjRjYWM3MWNhYTQ2MzJlZTVlMWMxZGFlZTRjZDhmIiwKKyAgICAgICAgICAiMTY4OGU0Y2U3Nzk0YmJhNmNiNzAxNDE2OWVjZDU1OWNlZGUyYTMwYjU2YTUyYjY4ZDlmZTE4Y2YxOTczZWY5NyIKKyAgICAgICAgICAiYjJhMDMxNTM5NTFjNzU1ZjYyOTRhYTQ5YWRiZGI1NTg0NWFiNjg3NWZiMzk4NmM5M2VjZjkyNzk2Mjg0MGQyOCIKKyAgICAgICAgICAiMmY5ZTU0Y2U4YjY5MGY3YzBjYjhiYmQ3MzQ0MGQ5NTcxZDFiMTZjZDkyNjBmOWVhYjQ3ODNjYzQ4MmU1MjIzZCIKKyAgICAgICAgICAiYzYwOTczODcxNzgzZWMyN2IwYWUwZmQ0NzczMmNiYzI4NmExNzNmYzkyYjAwZmI0YmE2ODI0NjQ3Y2Q5M2M4NSIKKyAgICAgICAgICAiYzEiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNy4yIiwKKyAgICAgICAgICAiMWQ5YjJlMjIyM2Q5YmMxM2JmYjlmMTYyY2U3MzVkYjQ4YmE3YzY4ZjY4MjJhMGExYTdiNmFlMTY1ODM0ZTciLAorICAgICAgICAgICIzYTljM2NlYzdiODRmOWJkM2FkZWNiYzY3M2VjOTlkNTRiMjJiYzliIiwKKyAgICAgICAgICAiMTA1MmVkMzk3YjJlMDFlMWQwZWUxYzUwYmYyNDM2M2Y5NWU1MDRmNGEwMzQzNGEwOGZkODIyNTc0ZWQ2Yjk3MyIKKyAgICAgICAgICAiNmVkYmI1ZjM5MGRiMTAzMjE0NzlhOGExMzkzNTBlMmJkNDk3N2MzNzc4ZWYzMzFmM2U3OGFlMTE4YjI2ODQ1MSIKKyAgICAgICAgICAiZjIwYTJmMDFkNDcxZjVkNTNjNTY2OTM3MTcxYjJkYmMyZDRiZGU0NTlhNTc5OWYwMzcyZDY1NzQyMzliMjMyMyIKKyAgICAgICAgICAiZDI0NWQwYmI4MWMyODZiNjNjODlhMzYxMDE3MzM3ZTQ5MDJmODhhNDY3ZjRjN2YyNDRiZmQ1YWI0NjQzN2ZmMyIKKyAgICAgICAgICAiYjYiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgNy4zIiwKKyAgICAgICAgICAiZDk3NmZjIiwKKyAgICAgICAgICAiNzZhNzVlNWI2MTU3YTU1NmNmODg4NGJiMmU0NWMyOTNkZDU0NWNmNSIsCisgICAgICAgICAgIjIxNTVjZDg0M2ZmMjRhNGVlOGJhZGI3Njk0MjYwMDI4YTQ5MDgxM2JhOGIzNjlhNGNiZjEwNmVjMTQ4ZTUyOTgiCisgICAgICAgICAgIjcwN2Y1OTY1YmU3ZDEwMWMxMDQ5ZWE4NTg0YzI0Y2Q2MzQ1NWFkOWMxMDRkNjg2MjgyZDNmYjgwM2E0YzExYzEiCisgICAgICAgICAgImMyZTliOTFjNzE3ODgwMWQxYjY2NDBmMDAzZjU3MjhkZjAwN2I4YTRjY2M5MmJjZTA1ZTQxYTI3Mjc4ZDdjODUiCisgICAgICAgICAgIjAxOGM1MjQxNDMxM2E1MDc3Nzg5MDAxZDRmMDE5MTBiNzJhYWQwNWQyMjBhYTE0YTU4NzMzYTc0ODliYzU0NTUiCisgICAgICAgICAgIjZiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDcuNCIsCisgICAgICAgICAgImQ0NzM4NjIzZGYyMjNhYTQzODQzZGY4NDY3NTM0YzQxZDAxM2UwYzgwM2M2MjRlMjYzNjY2YjIzOWJkZTQwYTUiCisgICAgICAgICAgImYyOWFlYjhkZTc5ZTNkYWE2MWRkMDM3MGY0OWJkNGIwMTM4MzRiOTgyMTJhZWY2YjFjNWVlMzczYjNjYiIsCisgICAgICAgICAgIjc4NjYzMTRhNmFkNmYyYjI1MGEzNTk0MWRiMjhmNTg2NGI1ODU4NTkiLAorICAgICAgICAgICIwYWIxNGMzNzNhZWI3ZDQzMjhkMGFhYWQ4YzA5NGQ4OGI5ZWIwOThiOTVmMjEwNTRhMjkwODI1MjJiZTdjMjdhIgorICAgICAgICAgICIzMTI4NzhiNjM3OTE3ZTNkODE5ZTZjM2M1NjhkYjVkODQzODAyYjA2ZDUxZDllOThhMmJlMGJmNDBjMDMxNDIzIgorICAgICAgICAgICJiMDBlZGZiZmY4MzIwZWZiOTE3MWJkMjA0NDY1M2E0Y2I5YzUxMjJmNmM2NWU4M2NkYTJlYzNjMTI2MDI3YTljIgorICAgICAgICAgICIxYTU2YmE4NzRkMGZlYTIzZjM4MGI4MmNmMjQwYjhjZjU0MDAwNDc1OGM0Yzc3ZDkzNDE1N2E3NGYzZmMxMmJmIgorICAgICAgICAgICJhYyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA3LjUiLAorICAgICAgICAgICJiYjQ3MjMxY2E1ZWExZDNhZDQ2Yzk5MzQ1ZDlhOGE2MSIsCisgICAgICAgICAgImIyMTY2ZWQ0NzJkNThkYjEwY2FiMmM2YjAwMGNjY2YxMGE3ZGM1MDkiLAorICAgICAgICAgICIwMjgzODdhMzE4Mjc3NDM0Nzk4YjRkOTdmNDYwMDY4ZGY1Mjk4ZmFiYTUwNDFiYTExNzYxYTFjYjczMTZiMjQxIgorICAgICAgICAgICI4NDExNGVjNTAwMjU3ZTI1ODllZDNiNjA3YTFlYmJlOTdhNmNjMmUwMmJmMWI2ODFmNDIzMTJhMzNiN2E3N2Q4IgorICAgICAgICAgICJlNzg1NWM0YTZkZTAzZTNjMDQ2NDNmNzg2YjkxYTI2NGEwZDY4MDVlMmNlYTkxZTY4MTc3ZWI3YTY0ZDkyNTVlIgorICAgICAgICAgICI0ZjI3ZTcxM2I3Y2NlYzAwZGMyMDBlYmQyMWMyZWEyYmI4OTBmZWFlNDk0MmRmOTQxZGMzZjk3ODkwZWQzNDc0IgorICAgICAgICAgICI3OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA3LjYiLAorICAgICAgICAgICIyMTg0ODI3MDk1ZDM1YzNmODZmNjAwZThlNTk3NTQwMTMyOTYiLAorICAgICAgICAgICI1MjY3M2JkZTJjYTE2NmMyYWE0NjEzMWFjMWRjODA4ZDY3ZDdkM2IxIiwKKyAgICAgICAgICAiMTRjNjc4YTk0YWQ2MDUyNWVmMzllOTU5YjJmM2JhNWMwOTdhOTRmZjkxMmI2N2RiYWNlODA1MzVjMTg3YWJkNCIKKyAgICAgICAgICAiN2QwNzU0MjBiMTg3MjE1MmJiYTA4ZjdmYzMxZjMxM2JiZjkyNzNjOTEyZmM0YzAxNDlhOWIwY2ZiNzk4MDdlMyIKKyAgICAgICAgICAiNDZlYjMzMjA2OTYxMWJlYzBmZjliY2QxNjhmMWY3YzMzZTc3MzEzY2VhNDU0Yjk0ZTI1NDllZWNmMDAyZTJhYyIKKyAgICAgICAgICAiZjdmNmYyZDI4NDVkNGZlMGFhYjJlNWE5MmRkZjY4YzQ4MGFlMTEyNDc5MzVkMWY2MjU3NDg0MjIxNmFlNjc0MSIKKyAgICAgICAgICAiMTUiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDg6IEEgMTAzMS1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjIgorICAgICAgImE5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIiCisgICAgICAiMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MyIKKyAgICAgICIxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmIgorICAgICAgImY3IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjBmN2QxZTllNWFhYTI1ZmQxM2U0YTA2NjNhZTE0NGUwZDE1ZjVjZDE4YmNkYjA5ZGYyY2M3ZTY0ZTNjNWU5MTUiCisgICAgICAiYWQ2MjY0NTMwNDE2MWQwOThjNzE1YmI3YWI4YmQwMWQwN2VhZjNmZWQ3YzdlZDA4YWYyYThhNjJlZjQ0YWIxNiIKKyAgICAgICJiMzIwZTE0YWY3MmE0OGY5NmFmZTI2MmEwYWU0Y2Y2NWU2MzVlOTEwNzkwY2Q0ZWU1Y2VhNzY4YTRiMjYzOWY3IgorICAgICAgImU2ZjY3N2IzZjBiYjZiZTMyYjc1NzQ3ZDg5MDkwMzZmMDI2NGY1OGQ0MDFjZGJhMTMxNzE2MTU3YTc1ZWNmNjMiCisgICAgICAiMzEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA4LjEiLAorICAgICAgICAgICIwNTBiNzU1ZTVlNjg4MGY3YjllOWQ2OTJhNzRjMzdhYWU0NDliMzFiZmVhNmRlZmY4Mzc0N2E4OTdmNmMyYzgyIgorICAgICAgICAgICI1YmIxYWRiZjg1MGEzYzk2OTk0YjVkZTViMzNjYmM3ZDRhMTc5MTNhNzk2NyIsCisgICAgICAgICAgIjc3MDZmZmNhMWVjZmIxZWJlZTJhNTVlNWM2ZTI0Y2QyNzk3YTQxMjUiLAorICAgICAgICAgICIwOWIzNjgzZDhhMmViMGZiMjk1YjYyZWQxZmI5MjkwYjcxNDQ1N2I3ODI1MzE5ZjQ2NDc4NzJhZjg4OWIzMDQwIgorICAgICAgICAgICI5NDcyMDIwYWQxMjkxMmJmMTliMTFkNDgxOWY0OTYxNDgyNGZmZDg0ZDA5YzBhMTdlN2QxNzMwOWQxMjkxOTc5IgorICAgICAgICAgICIwNDEwYWEyOTk1Njk5ZjZhODZkYmUzMjQyYjVhY2MyM2FmNDU2OTEwODBkNmIxYWU4MTBmYjNlMzA1NzA4N2YwIgorICAgICAgICAgICI5NzAwOTJjZTAwYmU5NTYyZmY0MDUzYjYyNjJjZTBjYWE5M2UxMzcyM2QyZTNhNWJhMDc1ZDQ1ZjBkNjFiNTRiIgorICAgICAgICAgICI2MSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA4LjIiLAorICAgICAgICAgICI0ZWI2OGRjZDkzY2E5YjE5ZGYxMTFiZDQzNjA4ZjU1NzAyNmZlNGFhMWQ1Y2ZhYzIyN2EzZWI1YWI5NTQ4YzE4IgorICAgICAgICAgICJhMDZkZGVkMjNmODE4MjU5ODZiMmZjZDcxMTA5ZWNlZjdlZmY4ODg3M2YwNzVjMmFhMGM0NjlmNjljOTJiYyIsCisgICAgICAgICAgImEzNzE3ZGExNDNiNGRjZmZiYzc0MjY2NWE4ZmE5NTA1ODU1NDgzNDMiLAorICAgICAgICAgICIyZWNmMTVjOTdjNWExNWIxNDc2YWU5ODZiMzcxYjU3YTI0Mjg0ZjRhMTYyYThkMGM4MTgyZTc5MDVlNzkyMjU2IgorICAgICAgICAgICJmMTgxMmJhNWY4M2YxZjdhMTMwZTQyZGNjMDIyMzI4NDRlZGMxNGEzMWE2OGVlOTdhZTU2NGEzODNhMzQxMTY1IgorICAgICAgICAgICI2NDI0YzVmNjJkZGI2NDYwOTNjMzY3YmUxZmNkYTQyNmNmMDBhMDZkOGFjYjdlNTc3NzZmYmJkODU1YWMzZGY1IgorICAgICAgICAgICIwNmZjMTZiMWQ3YzNmMjExMGYzZDgwNjhlOTFlMTg2MzYzODMxYzg0MDk2ODBkOGRhOWVjZDhjZjFmYTIwZWUzIgorICAgICAgICAgICI5ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA4LjMiLAorICAgICAgICAgICI4NjA0YWM1NjMyOGMxYWI1YWQ5MTc4NjEiLAorICAgICAgICAgICJlZTA2MjA5MDczY2NhMDI2YmIyNjRlNTE4NWJmOGM2OGI3NzM5Zjg2IiwKKyAgICAgICAgICAiNGJjODkxMzBhNWIyZGFiYjdjMmZjZjkwZWI1ZDBlYWY5ZTY4MWI3MTQ2YTM4ZjMxNzNhM2Q5Y2ZlYzUyZWE5ZSIKKyAgICAgICAgICAiMGE0MTkzMmU2NDhhOWQ2OTM0NGM1MGRhNzYzZjUxYTAzYzk1NzYyMTMxZTgwNTIyNTRkY2QyMjQ4Y2JhNDBmZCIKKyAgICAgICAgICAiMzE2Njc3ODZjZTA1YTJiN2I1MzFhYzlkYWM5ZWQ1ODRhNTliNjc3YzFhOGFlZDhjNWQxNWQ2OGMwNTU2OWUyYiIKKyAgICAgICAgICAiZTc4MGJmN2RiNjM4ZmQyYmZkMmE4NWFiMjc2ODYwZjM3NzczMzhmY2E5ODlmZmQ3NDNkMTNlZTA4ZTBjYTk4OSIKKyAgICAgICAgICAiM2YiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgOC40IiwKKyAgICAgICAgICAiZmRkYTVmYmY2ZWMzNjFhOWQ5YTRhYzY4YWYyMTZhMDY4NmY0MzhiMWUwZTVjMzZiOTU1Zjc0ZTEwN2YzOWMwZCIKKyAgICAgICAgICAiZGRjYyIsCisgICAgICAgICAgIjk5MGFkNTczZGM0OGE5NzMyMzViNmQ4MjU0MzYxOGYyZTk1NTEwNWQiLAorICAgICAgICAgICIyZTQ1Njg0N2Q4ZmMzNmZmMDE0N2Q2OTkzNTk0YjkzOTcyMjdkNTc3NzUyYzc5ZDBmOTA0ZmNiMDM5ZDRkODEyIgorICAgICAgICAgICJmZWE2MDVhN2I1NzRkZDgyY2E3ODZmOTM3NTIzNDg0MzhlZTlmNWI1NDU0OTg1ZDVmMGUxNjk5ZTNlN2FkMTc1IgorICAgICAgICAgICJhMzJlMTVmMDNkZWIwNDJhYjlmZTFkZDlkYjFiYjg2ZjhjMDg5Y2NiNDVlN2VmMGM1ZWU3Y2E5YjcyOTBjYTZiIgorICAgICAgICAgICIxNWJlZDQ3MDM5Nzg4YThhOTNmZjgzZTBlOGQ2MjQ0YzcxMDA2MzYyZGVlZjY5YjZmNDE2ZmIzYzY4NDM4M2ZiIgorICAgICAgICAgICJkMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA4LjUiLAorICAgICAgICAgICI0YTVmNDkxNGJlZTI1ZGUzYzY5MzQxZGUwNyIsCisgICAgICAgICAgImVjYzYzYjI4ZjA3NTZmMjJmNTJhYzhlNmVjMTI1MWE2ZWMzMDQ3MTgiLAorICAgICAgICAgICIxZmI5MzU2ZmQ1YzRiMTc5NmRiMmViZjdkMGQzOTNjYzgxMGFkZjYxNDVkZWZjMmZjZTcxNGY3OWQ5MzgwMGQ1IgorICAgICAgICAgICJlMmFjMjExZWE4YmJlY2NhNGI2NTRiOTRjM2IxOGIzMGRkNTc2Y2UzNGRjOTU0MzZlZjU3YTA5NDE1NjQ1OTIzIgorICAgICAgICAgICIzNTlhNWQ3YjQxNzFlZjIyYzI0NjcwZjFiMjI5ZDM2MDNlOTFmNzY2NzFiN2RmOTdlNzMxN2M5NzczNDQ3NmQ1IgorICAgICAgICAgICJmM2QxN2QyMWNmODJiNWJhOWY4M2RmMmU1ODhkMzY5ODRmZDFiNTg0NDY4YmQyM2IyZTg3NWYzMmY2ODk1M2Y3IgorICAgICAgICAgICJiMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSA4LjYiLAorICAgICAgICAgICI4ZTA3ZDY2ZjdiODgwYTcyNTYzYWJjZDNmMzUwOTJiYzMzNDA5ZmI3Zjg4ZjI0NzJiZSIsCisgICAgICAgICAgIjM5MjVjNzFiMzYyZDQwYTBhNmRlNDIxNDU1NzliYTFlN2RkNDU5ZmMiLAorICAgICAgICAgICIzYWZkOWM2NjAwMTQ3YjIxNzk4ZDgxOGM2NTVhMGY0YzkyMTJkYjI2ZDBiMGRmZGMyYTc1OTRjY2IzZDIyZjViIgorICAgICAgICAgICJmMWQ3YzNlMTEyY2Q3M2ZjN2Q1MDljN2E4YmFmZGQzYzI3NGQxMzk5MDA5Zjk2MDllYzRiZTY0NzdlNDUzZjA3IgorICAgICAgICAgICI1YWEzM2RiMzgyODcwYzFjMzQwOWFlZjM5MmQ3Mzg2YWUzYTY5NmI5OWE5NGI0ZGEwNTg5NDQ3ZTk1NWQxNmM5IgorICAgICAgICAgICI4YjE3NjAyYTU5YmQ3MzYyNzlmY2Q4ZmIyODBjNDQ2MmQ1OTBiZmE5YmYxM2ZlZDU3MGVhZmRlOTczMzBhMmMyIgorICAgICAgICAgICIxMCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkV4YW1wbGUgOTogQSAxNTM2LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMiCisgICAgICAiMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MCIKKyAgICAgICIyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyIgorICAgICAgImViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmEiCisgICAgICAiYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MSIKKyAgICAgICIwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjE5OGMxNDFlMjM3MTVhOTJiY2NmNmExMTlhNWJjMTEzODk0NjhkMjgxMWY1NDhkNzI3ZTE3YjRhYjBlYjk4NmQiCisgICAgICAiNmYyMTFlZmI1M2I3MWY3Y2NiZWE4N2VlNjljNzVlZTYxNTAwOGM1MzMyZGViNTJiZjM5MGFiZGZiZmUzN2Q3MiIKKyAgICAgICIwNTM2ODE1OWIyNjM4YzFkZTMyNmUyMWQyMjI1MWYwZmI1ODQ4YjNiZjE1MDA1ZDJhNzQzMzBmMGFmZTkxNmVlIgorICAgICAgIjYyY2NjMTM0NGQxZDgzYTcwOWU2MDY3NjI3Mzg0MGY3ZjM3NzQyNGE1ZTBhNGRhNzVmMDFiMzFmZjc2ODE5Y2YiCisgICAgICAiOWNiZmRkMjE1MjQzYzM5MTdjMDNlZjM4MTk5MzEyZTU2N2IzYmY3YWVkM2FiNDU3ZjM3MWVmOGExNDIzZjQ1YiIKKyAgICAgICI2OGM2ZTI4MmVjMTExYmJhMjgzM2I5ODdmZDY5ZmFkODNiYzFiOGM2MTNjNWUxZWExNmMxMWVkMTI1ZWE3ZWMxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJPQUVQIEV4YW1wbGUgOS4xIiwKKyAgICAgICAgICAiZjczNWZkNTViYTkyNTkyYzNiNTJiOGY5YzRmNjlhYWExY2JlZjhmZTg4YWRkMDk1NTk1NDEyNDY3ZjljZjRlYyIKKyAgICAgICAgICAiMGI4OTZjNTllZGExNjIxMGU3NTQ5YzhhYmIxMGNkYmMyMWExMmVjOWI2YjViOGZkMmYxMDM5OWViNiIsCisgICAgICAgICAgIjhlYzk2NWYxMzRhM2VjOTkzMWU5MmExY2EwZGM4MTY5ZDVlYTcwNWMiLAorICAgICAgICAgICIyNjdiY2QxMThhY2FiMWZjOGJhODFjODVkNzMwMDNjYjg2MTBmYTU1YzFkOTdkYThkNDhhN2M3ZjA2ODk2YTRkIgorICAgICAgICAgICJiNzUxYWEyODQyNTViOWQzNmFkNjVmMzc2NTNkODI5ZjFiMzdmOTdiODAwMTk0MjU0NWIyZmMyYzU1YTczNzZjIgorICAgICAgICAgICJhN2ExYmU0YjE3NjBjOGUwNWEzM2U1YWEyNTI2YjhkOThlMzE3MDg4ZTc4MzRjNzU1YjJhNTliMTI2MzFhMTgyIgorICAgICAgICAgICJjMDVkNWQ0M2FiMTc3OTI2NGY4NDU2ZjUxNWNlNTdkZmRmNTEyZDU0OTNkYWI3YjczMzhkYzRiN2Q3OGRiOWMwIgorICAgICAgICAgICI5MWFjM2JhZjUzN2E2OWZjN2Y1NDlkOTc5ZjBlZmY5YTk0ZmRhNDE2OWJkNGQxZDE5YTY5Yzk5ZTMzYzNiNTU0IgorICAgICAgICAgICI5MGQ1MDFiMzliMWVkYWUxMThmZjY3OTNhMTUzMjYxNTg0ZDNhNWYzOWY2ZTY4MmUzZDE3YzhjZDEyNjFmYTcyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDkuMiIsCisgICAgICAgICAgIjgxYjkwNjYwNTAxNWE2M2FhYmU0MmRkZjExZTE5Nzg5MTJmNTQwNGM3NDc0YjI2ZGNlM2VkNDgyYmY5NjFlY2MiCisgICAgICAgICAgIjgxOGJmNDIwYzU0NjU5IiwKKyAgICAgICAgICAiZWNiMWI4YjI1ZmE1MGNkYWIwOGU1NjA0Mjg2N2Y0YWY1ODI2ZDE2YyIsCisgICAgICAgICAgIjkzYWM5ZjA2NzFlYzI5YWNiYjQ0NGVmZmMxYTU3NDEzNTFkNjBmZGIwZTM5M2ZiZjc1NGFjZjBkZTQ5NzYxYTEiCisgICAgICAgICAgIjQ4NDFkZjc3NzJlOWJjODI3NzM5NjZhMTU4NGM0ZDcyYmFlYTAwMTE4ZjgzZjM1Y2NhNmU1MzdjYmQ0ZDgxMWYiCisgICAgICAgICAgIjU1ODNiMjk3ODNkOGE2ZDk0Y2QzMWJlNzBkNmY1MjZjMTBmZjA5YzZmYTdjZTA2OTc5NWEzZmNkMDUxMWZkNWYiCisgICAgICAgICAgImNiNTY0YmNjODBlYTljNzhmMzhiODAwMTI1MzlkOGE0ZGRmNmZlODFlOWNkZGI3ZjUwZGJiYmJjYzdlNWQ4NjAiCisgICAgICAgICAgIjk3Y2NmNGVjNDkxODlmYjhiZjMxOGJlNmQ1YTA3MTVkNTE2YjQ5YWYxOTEyNThjZDMyZGM4MzNjZTZlYjQ2NzMiCisgICAgICAgICAgImMwM2ExOWJiYWNlODhjYzU0ODk1ZjYzNmNjMGMxZWM4OTA5NmQxMWNlMjM1YTI2NWNhMTc2NDIzMmE2ODlhZTgiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgOS4zIiwKKyAgICAgICAgICAiZmQzMjY0MjlkZjliODkwZTA5YjU0YjE4YjhmMzRmMWUyNCIsCisgICAgICAgICAgImU4OWJiMDMyYzZjZTYyMmNiZGI1M2JjOTQ2NjAxNGVhNzdmNzc3YzAiLAorICAgICAgICAgICI4MWViZGQ5NTA1NGIwYzgyMmVmOWFkNzY5M2Y1YTg3YWRmYjRiNGM0Y2U3MGRmMmRmODRlZDQ5YzA0ZGE1OGJhIgorICAgICAgICAgICI1ZmMyMGExOWUxYTZlOGI3YTM5MDBiMjI3OTZkYzRlODY5ZWU2YjQyNzkyZDE1YThlY2ViNTZjMDljNjk5MTRlIgorICAgICAgICAgICI4MTNjZWE4ZjY5MzFlNGI4ZWQ2ZjQyMWFmMjk4ZDU5NWM5N2Y0Nzg5YzdjYWE2MTJjN2VmMzYwOTg0YzIxYjkzIgorICAgICAgICAgICJlZGM1NDAxMDY4YjVhZjRjNzhhODc3MWI5ODRkNTNiOGVhOGFkZjJmNmE3ZDRhMGJhNzZjNzVlMWRkOWY2NThmIgorICAgICAgICAgICIyMGRlZDRhNDYwNzFkNDZkNzc5MWI1NjgwM2Q4ZmVhN2YwYjBmOGU0MWFlM2YwOTM4M2E2Zjk1ODVmZTc3NTNlIgorICAgICAgICAgICJhYWZmZDJiZjk0NTYzMTA4YmVlY2MyMDdiYmI1MzVmNWZjYzcwNWYwZGRlOWY3MDhjNjJmNDlhOWM5MDM3MWQzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDkuNCIsCisgICAgICAgICAgImYxNDU5YjVmMGM5MmYwMWEwZjcyM2EyZTU2NjI0ODRkOGY4YzBhMjBmYzI5ZGFkNmFjZDQzYmI1ZjNlZmZkZjQiCisgICAgICAgICAgImUxYjYzZTA3ZmRmZTY2MjhkMGQ3NGNhMTliZjJkNjllNGEwYWJmODZkMjkzOTI1YTc5Njc3MmY4MDg4ZSIsCisgICAgICAgICAgIjYwNmYzYjk5YzBiOWNjZDc3MWVhYTI5ZWEwZTRjODg0ZjMxODljY2MiLAorICAgICAgICAgICJiY2MzNWY5NGNkZTY2Y2IxMTM2NjI1ZDYyNWI5NDQzMmEzNWIyMmYzZDJmYTExYTYxM2ZmMGZjYTViZDU3Zjg3IgorICAgICAgICAgICJiOTAyY2NkYzFjZDBhZWJjYjA3MTVlZTg2OWQxZDFmZTM5NWY2NzkzMDAzZjVlY2E0NjUwNTljODg2NjBkNDQ2IgorICAgICAgICAgICJmZjVmMDgxODU1MjAyMjU1N2UzOGMwOGE2N2VhZDk5MTI2MjI1NGYxMDY4Mjk3NWVjNTYzOTc3Njg1MzdmNDk3IgorICAgICAgICAgICI3YWY2ZDVmNmFhY2ViN2ZiMjVkZWM1OTM3MjMwMjMxZmQ4OTc4YWY0OTExOWEyOWYyOWU0MjRhYjgyNzJiNDc1IgorICAgICAgICAgICI2Mjc5MmQ1Yzk0Zjc3NGI4ODI5ZDBiMGQ5ZjFhOGM5ZWRkZjM3NTc0ZDVmYTI0OGVlZmE5YzUyNzFmYzVlYzI1IgorICAgICAgICAgICI3OWM4MWJkZDYxYjQxMGZhNjFmZTM2ZTQyNDIyMWMxMTNhZGRiMjc1NjY0YzgwMWQzNGNhOGM2MzUxZTRhODU4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDkuNSIsCisgICAgICAgICAgIjUzZTZlOGM3MjlkNmY5YzMxOWRkMzE3ZTc0YjBkYjhlNGNjY2EyNWYzYzgzMDU3NDZlMTM3YWM2M2E2M2VmMzciCisgICAgICAgICAgIjM5ZTdiNTk1YWJiOTZlOGQ1NWU1NGY3YmQ0MWFiNDMzMzc4ZmZiOTExZCIsCisgICAgICAgICAgImZjYmM0MjE0MDJlOWVjYWJjNjA4MmFmYTQwYmE1ZjI2NTIyYzg0MGUiLAorICAgICAgICAgICIyMzJhZmJjOTI3ZmEwOGMyZjZhMjdiODdkNGE1Y2IwOWMwN2RjMjZmYWU3M2Q3M2E5MDU1ODgzOWY0ZmQ2NmQyIgorICAgICAgICAgICI4MWI4N2VjNzM0YmNlMjM3YmExNjY2OThlZDgyOTEwNmE3ZGU2OTQyY2Q2Y2RjZTc4ZmVkOGQyZTRkODE0MjhlIgorICAgICAgICAgICI2NjQ5MGQwMzYyNjRjZWY5MmFmOTQxZDNlMzUwNTVmZTM5ODFlMTRkMjljYmI5YTRmNjc0NzMwNjNiYWVjNzlhIgorICAgICAgICAgICIxMTc5ZjVhMTdjOWMxODMyZjI4MzhmZDdkNWU1OWJiOTY1OWQ1NmRjZThhMDE5ZWRlZjFiYjNhY2NjNjk3Y2M2IgorICAgICAgICAgICJjYzdhNzc4ZjYwYTA2NGM3ZjZmNWQ1MjljNjIxMDI2MmUwMDNkZTU4M2U4MWUzMTY3Yjg5OTcxZmI4YzBlMTVkIgorICAgICAgICAgICI0NGZmZmVmODliNTNkOGQ2NGRkNzk3ZDE1OWI1NmQyYjA4ZWE1MzA3ZWExMmMyNDFiZDU4ZDRlZTI3OGExZjJlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDkuNiIsCisgICAgICAgICAgImI2YjI4ZWEyMTk4ZDBjMTAwOGJjNjQiLAorICAgICAgICAgICIyM2FhZGUwZTFlMDhiYjliOWE3OGQyMzAyYTUyZjljMjFiMmUxYmEyIiwKKyAgICAgICAgICAiNDM4Y2M3ZGMwOGE2OGRhMjQ5ZTQyNTA1Zjg1NzNiYTYwZTJjMjc3M2Q1YjI5MGY0Y2Y5ZGZmNzE4ZTg0MjA4MSIKKyAgICAgICAgICAiYzM4M2U2NzAyNGEwZjI5NTk0ZWE5ODdiOWQyNWU0YjczOGYyODU5NzBkMTk1YWJiM2E4YzgwNTRlM2Q3OWQ2YiIKKyAgICAgICAgICAiOWM5YTgzMjdiYTU5NmYxMjU5ZTI3MTI2Njc0NzY2OTA3ZDhkNTgyZmYzYTg0NzYxNTQ5MjlhZGIxZTZkMTIzNSIKKyAgICAgICAgICAiYjJjY2I0ZWM4ZjY2M2JhOWNjNjcwYTkyYmViZDg1M2M4ZGJmNjljNjQzNmQwMTZmNjFhZGQ4MzZlOTQ3MzI0NSIKKyAgICAgICAgICAiMDQzNDIwN2Y5ZmQ0YzQzZGVjMmExMmE5NThlZmEwMWVmZTI2Njk4OTliNWU2MDRjMjU1YzU1ZmI3MTY2ZGU1NSIKKyAgICAgICAgICAiODllMzY5NTk3YmIwOTE2OGMwNmRkNWRiMTc3ZTA2YTE3NDBlYjJkNWM4MmZhZWNhNmQ5MmZjZWU5OTMxYmE5ZiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkV4YW1wbGUgMTA6IEEgMjA0OC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4IgorICAgICAgImRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjUiCisgICAgICAiNDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZiIKKyAgICAgICJhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwIgorICAgICAgIjMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDAiCisgICAgICAiYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZiIKKyAgICAgICJhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4IgorICAgICAgImQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMDU2YjA0MjE2ZmU1ZjM1NGFjNzcyNTBhNGI2YjBjODUyNWE4NWM1OWIwYmQ4MGM1NjQ1MGEyMmQ1ZjQzOGU1OSIKKyAgICAgICI2YTMzM2FhODc1ZTI5MWRkNDNmNDhjYjg4YjlkNWZjMGQ0OTlmOWZjZDFjMzk3ZjlhZmMwNzBjZDllMzk4YzhkIgorICAgICAgIjE5ZTYxZGI3Yzc0MTBhNmIyNjc1ZGZiZjVkMzQ1YjgwNGQyMDFhZGQ1MDJkNWNlMmRmY2IwOTFjZTk5OTdiYmUiCisgICAgICAiYmU1NzMwNmYzODNlNGQ1ODgxMDNmMDM2ZjdlODVkMTkzNGQxNTJhMzIzZTRhOGRiNDUxZDZmNGE1YjFiMGYxMCIKKyAgICAgICIyY2MxNTBlMDJmZWVlMmI4OGRlYTRhZDRjMWJhY2NiMjRkODQwNzJkMTRlMWQyNGE2NzcxZjc0MDhlZTMwNTY0IgorICAgICAgImZiODZkNDM5M2EzNGJjZjBiNzg4NTAxZDE5MzMwM2YxM2EyMjg0YjAwMWYwZjY0OWVhZjc5MzI4ZDRhYzVjNDMiCisgICAgICAiMGFiNDQxNDkyMGE5NDYwZWQxYjdiYzQwZWM2NTNlODc2ZDA5YWJjNTA5YWU0NWI1MjUxOTAxMTZhMGMyNjEwMSIKKyAgICAgICI4NDgyOTg1MDljMWMzYmYzYTQ4M2U3Mjc0MDU0ZTE1ZTk3MDc1MDM2ZTk4OWY2MDkzMjgwN2I1MjU3NzUxZTc5IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMTAuMSIsCisgICAgICAgICAgIjhiYmE2YmY4MmE2YzBmODZkNWYxNzU2ZTk3OTU2ODcwYjA4OTUzYjA2YjRlYjIwNWJjMTY5NGVlIiwKKyAgICAgICAgICAiNDdlMWFiNzExOWZlZTU2Yzk1ZWU1ZWFhZDg2ZjQwZDBhYTYzYmQzMyIsCisgICAgICAgICAgIjUzZWE1ZGMwOGNkMjYwZmIzYjg1ODU2NzI4N2ZhOTE1NTJjMzBiMmZlYmZiYTIxM2YwYWU4NzcwMmQwNjhkMTkiCisgICAgICAgICAgImJhYjA3ZmU1NzQ1MjNkZmI0MjEzOWQ2OGMzYzVhZmVlZTBiZmU0Y2I3OTY5Y2JmMzgyYjgwNGQ2ZTYxMzk2MTQiCisgICAgICAgICAgIjRlMmQwZTYwNzQxZjg5OTNjMzAxNGI1OGI5YjE5NTdhOGJhYmNkMjNhZjg1NGY0YzM1NmZiMTY2MmFhNzJiZmMiCisgICAgICAgICAgImM3ZTU4NjU1OWRjNDI4MGQxNjBjMTI2Nzg1YTcyM2ViZWViZWZmNzFmMTE1OTQ0NDBhYWVmODdkMTA3OTNhODciCisgICAgICAgICAgIjc0YTIzOWQ0YTA0Yzg3ZmUxNDY3YjlkYWY4NTIwOGVjNmM3MjU1Nzk0YTk2Y2MyOTE0MmY5YThiZDQxOGUzYzEiCisgICAgICAgICAgImZkNjczNDRiMGNkMDgyOWRmM2IyYmVjNjAyNTMxOTYyOTNjNmIzNGQzZjc1ZDMyZjIxM2RkNDVjNjI3M2Q1MDUiCisgICAgICAgICAgImFkZjRjY2VkMTA1N2NiNzU4ZmMyNmFlZWZhNDQxMjU1ZWQ0ZTY0YzE5OWVlMDc1ZTdmMTY2NDYxODJmZGI0NjQiCisgICAgICAgICAgIjczOWI2OGFiNWRhZmYwZTYzZTk1NTIwMTY4MjRmMDU0YmY0ZDNjOGM5MGE5N2JiNmI2NTUzMjg0ZWI0MjlmY2MiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMTAuMiIsCisgICAgICAgICAgImU2YWQxODFmMDUzYjU4YTkwNGYyNDU3NTEwMzczZTU3IiwKKyAgICAgICAgICAiNmQxN2Y1YjRjMWZmYWMzNTFkMTk1YmY3YjA5ZDA5ZjA5YTQwNzljZiIsCisgICAgICAgICAgImEyYjFhNDMwYTlkNjU3ZTJmYTFjMmJiNWVkNDNmZmIyNWMwNWEzMDhmZTkwOTNjMDEwMzE3OTVmNTg3NDQwMDEiCisgICAgICAgICAgIjEwODI4YWU1OGZiOWI1ODFjZTlkZGRkM2U1NDlhZTA0YTA5ODU0NTliZGU2YzYyNjU5NGU3YjA1ZGM0Mjc4YjIiCisgICAgICAgICAgImExNDY1YzEzNjg0MDg4MjNjODVlOTZkYzY2YzNhMzA5ODNjNjM5NjY0ZmM0NTY5YTM3ZmUyMWU1YTE5NWI1NzciCisgICAgICAgICAgIjZlZWQyZGY4ZDhkMzYxYWY2ODZlNzUwMjI5YmJkNjYzZjE2MTg2OGE1MDYxNWUwYzMzN2JlYzBjYTM1ZmVjMGIiCisgICAgICAgICAgImIxOWMzNmViMmUwYmJjYzA1ODJmYTFkOTNhYWNkYjA2MTA2M2Y1OWYyY2UxZWU0MzYwNWU1ZDg5ZWNhMTgzZDIiCisgICAgICAgICAgImFjZGZlOWY4MTAxMTAyMmFkM2I0M2EzZGQ0MTdkYWM5NGI0ZTExZWE4MWIxOTI5NjZlOTY2YjE4MjA4MmU3MTkiCisgICAgICAgICAgIjY0NjA3YjRmODAwMmYzNjI5OTg0NGExMWYyYWUwZmFlYWMyZWFlNzBmOGY0Zjk4MDg4YWNkY2QwYWM1NTZlOWYiCisgICAgICAgICAgImNjYzUxMTUyMTkwOGZhZDI2ZjA0YzY0MjAxNDUwMzA1Nzc4NzU4YjA1MzhiZjhiNWJiMTQ0YTgyOGU2Mjk3OTUiCisgICAgICAgIH0seworICAgICAgICAgICJPQUVQIEV4YW1wbGUgMTAuMyIsCisgICAgICAgICAgIjUxMGEyY2Y2MGU4NjZmYTIzNDA1NTNjOTRlYTM5ZmJjMjU2MzExZTgzZTk0NDU0YjQxMjQiLAorICAgICAgICAgICIzODUzODc1MTRkZWNjYzdjNzQwZGQ4Y2RmOWRhZWU0OWExY2JmZDU0IiwKKyAgICAgICAgICAiOTg4NmMzZTY3NjRhOGI5YTg0ZTg0MTQ4ZWJkOGMzYjFhYTgwNTAzODFhNzhmNjY4NzE0YzE2ZDljZmQyYTZlZCIKKyAgICAgICAgICAiYzU2OTc5YzUzNWQ5ZGVlM2I0NGI4NWMxOGJlODkyODk5MjM3MTcxMTQ3MjIxNmQ5NWRkYTk4ZDJlZTgzNDdjOSIKKyAgICAgICAgICAiYjE0ZGZmZGZmODRhYTQ4ZDI1YWMwNmY3ZDdlNjUzOThhYzk2N2IxY2U5MDkyNWY2N2RjZTA0OWI3ZjgxMmRiMCIKKyAgICAgICAgICAiNzQyOTk3YTc0ZDQ0ZmU4MWRiZTBlN2EzZmVhZjJlNWM0MGFmODg4ZDU1MGRkYmJlM2JjMjA2NTdhMjk1NDNmOCIKKyAgICAgICAgICAiZmMyOTEzYjliZDFhNjFiMmFiMjI1NmVjNDA5YmJkN2RjMGQxNzcxN2VhMjVjNDNmNDJlZDI3ZGY4NzM4YmY0YSIKKyAgICAgICAgICAiZmM2NzY2ZmY3YWZmMDg1OTU1NWVlMjgzOTIwZjRjOGE2M2M0YTczNDBjYmFmZGRjMzM5ZWNkYjRiMDUxNTAwMiIKKyAgICAgICAgICAiZjk2YzkzMmI1Yjc5MTY3YWY2OTljMGFkM2ZjY2ZkZjBmNDRlODVhNzAyNjJiZjJlMThmZTM0Yjg1MDU4OTk3NSIKKyAgICAgICAgICAiZTg2N2ZmOTY5ZDQ4ZWFiZjIxMjI3MTU0NmNkYzA1YTY5ZWNiNTI2ZTUyODcwYzgzNmYzMDdiZDc5ODc4MGVkZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAxMC40IiwKKyAgICAgICAgICAiYmNkZDE5MGRhM2I3ZDMwMGRmOWEwNmUyMmNhYWUyYTc1ZjEwYzkxZmY2NjdiN2MxNmJkZThiNTMwNjRhMjY0OSIKKyAgICAgICAgICAiYTk0MDQ1YzkiLAorICAgICAgICAgICI1Y2FjYTZhMGY3NjQxNjFhOTY4NGY4NWQ5MmI2ZTBlZjM3Y2E4YjY1IiwKKyAgICAgICAgICAiNjMxOGU5ZmI1YzBkMDVlNTMwN2UxNjgzNDM2ZTkwMzI5M2FjNDY0MjM1OGFhYTIyM2Q3MTYzMDEzYWJhODdlMiIKKyAgICAgICAgICAiZGZkYThlNjBjNjg2MGUyOWExZTkyNjg2MTYzZWEwYjkxNzVmMzI5Y2EzYjEzMWExZWRkM2E3Nzc1OWE4Yjk3YiIKKyAgICAgICAgICAiYWQ2YTRmOGY0Mzk2ZjI4Y2Y2ZjM5Y2E1ODExMmU0ODE2MGQ2ZTIwM2RhYTU4NTZmM2FjYTVmZmVkNTc3YWY0OSIKKyAgICAgICAgICAiOTQwOGUzZGZkMjMzZTNlNjA0ZGJlMzRhOWM0YzkwODJkZTY1NTI3Y2FjNjMzMWQyOWRjODBlMDUwOGEwZmE3MSIKKyAgICAgICAgICAiMjJlN2YzMjlmNmNjYTVjZmEzNGQ0ZDFkYTQxNzgwNTQ1N2UwMDhiZWM1NDllNDc4ZmY5ZTEyYTc2M2M0NzdkMSIKKyAgICAgICAgICAiNWJiYjc4ZjViNjliZDU3ODMwZmMyYzRlZDY4NmQ3OWJjNzJhOTVkODVmODgxMzRjNmIwYWZlNTZhOGNjZmJjOCIKKyAgICAgICAgICAiNTU4MjhiYjMzOWJkMTc5MDljZjFkNzBkZTMzMzVhZTA3MDM5MDkzZTYwNmQ2NTUzNjVkZTY1NTBiODcyY2Q2ZCIKKyAgICAgICAgICAiZTFkNDQwZWUwMzFiNjE5NDVmNjI5YWQ4YTM1M2IwZDQwOTM5ZTk2YTNjNDUwZDJhOGQ1ZWVlOWY2NzgwOTNjOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIk9BRVAgRXhhbXBsZSAxMC41IiwKKyAgICAgICAgICAiYTdkZDZjN2RjMjRiNDZmOWRkNWYxZTkxYWRhNGMzYjNkZjk0N2U4NzcyMzJhOSIsCisgICAgICAgICAgIjk1YmNhOWUzODU5ODk0YjNkZDg2OWZhN2VjZDViYmM2NDAxYmYzZTQiLAorICAgICAgICAgICI3NTI5MDg3MmNjZmQ0YTQ1MDU2NjBkNjUxZjU2ZGE2ZGFhMDljYTEzMDFkODkwNjMyZjZhOTkyZjNkNTY1Y2VlIgorICAgICAgICAgICI0NjRhZmRlZDQwZWQzYjViZTkzNTY3MTRlYTVhYTc2NTVmNGExMzY2YzJmMTdjNzI4ZjZmMmM1YTVkMWY4ZTI4IgorICAgICAgICAgICI0MjliYzRlNmY4ZjJjZmY4ZGE4ZGMwZTBhOTgwOGU0NWZkMDllYTJmYTQwY2IyYjZjZTZmZmZmNWMwZTE1OWQxIgorICAgICAgICAgICIxYjY4ZDkwYTg1ZjdiODRlMTAzYjA5ZTY4MjY2NjQ4MGM2NTc1MDVjMDkyOTI1OTQ2OGEzMTQ3ODZkNzRlYWIxIgorICAgICAgICAgICIzMTU3M2NmMjM0YmY1N2RiN2Q5ZTY2Y2M2NzQ4MTkyZTAwMmRjMGRlZWE5MzA1ODVmMDgzMWZkY2Q5YmMzM2Q1IgorICAgICAgICAgICIxZjc5ZWQyZmZjMTZiY2Y0ZDU5ODEyZmNlYmNhYTNmOTA2OWIwZTQ0NTY4NmQ2NDRjMjVjY2Y2M2I0NTZlZTVmIgorICAgICAgICAgICJhNmZmZTk2ZjE5Y2RmNzUxZmVkOWVhZjM1OTU3NzU0ZGJmNGJmZWE1MjE2YWExODQ0ZGM1MDdjYjJkMDgwZTcyIgorICAgICAgICAgICIyZWJhMTUwMzA4YzJiNWZmMTE5MzYyMGYxNzY2ZWNmNDQ4MWJhZmI5NDNiZDI5Mjg3N2YyMTM2Y2E0OTRhYmEwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiT0FFUCBFeGFtcGxlIDEwLjYiLAorICAgICAgICAgICJlYWYxYTczYTFiMGM0NjA5NTM3ZGU2OWNkOTIyOGJiY2ZiOWE4Y2E4YzZjM2VmYWYwNTZmZTRhN2Y0NjM0ZWQwIgorICAgICAgICAgICIwYjdjMzllYzY5MjJkN2I4ZWEyYzA0ZWJhYyIsCisgICAgICAgICAgIjlmNDdkZGY0MmU5N2VlYTg1NmE5YmRiYzcxNGViM2FjMjJmNmViMzIiLAorICAgICAgICAgICIyZDIwN2E3MzQzMmE4ZmI0YzAzMDUxYjNmNzNiMjhhNjE3NjQwOThkZmEzNGM0N2EyMDk5NWY4MTE1YWE2ODE2IgorICAgICAgICAgICI2NzliNTU3ZTgyZGJlZTU4NDkwOGM2ZTY5NzgyZDdkZWIzNGRiZDY1YWYwNjNkNTdmY2E3NmE1ZmQwNjk0OTJmIgorICAgICAgICAgICJkNjA2OGQ5OTg0ZDIwOTM1MDU2NWE2MmU1Yzc3ZjIzMDM4YzEyY2IxMGM2NjM0NzA5YjU0N2M0NmY2YjRhNzA5IgorICAgICAgICAgICJiZDg1Y2ExMjJkNzQ0NjVlZjk3NzYyYzI5NzYzZTA2ZGJjN2E5ZTczOGM3OGJmY2EwMTAyZGM1ZTc5ZDY1Yjk3IgorICAgICAgICAgICIzZjI4MjQwY2FhYjJlMTYxYTc4YjU3ZDI2MjQ1N2VkODE5NWQ1M2UzYzdhZTlkYTAyMTg4M2M2ZGI3YzI0YWZkIgorICAgICAgICAgICJkMjMyMmVhYzk3MmFkM2MzNTRjNWZjZWYxZTE0NmMzYTAyOTBmYjY3YWRmMDA3MDY2ZTAwNDI4ZDJjZWMxOGNlIgorICAgICAgICAgICI1OGY5MzI4Njk4ZGVmZWY0YjJlYjVlYzc2OTE4ZmRlMWMxOThjYmIzOGI3YWZjNjc2MjZhOWFlZmVjNDMyMmJmIgorICAgICAgICAgICJkOTBkMjU2MzQ4MWM5YTIyMWY3OGM4MjcyYzgyZDFiNjJhYjkxNGUxYzY5ZjZhZjZlZjMwY2E1MjYwZGI0YTQ2IgorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvcGtjczF2Mi1wc3MuaCBiL3Rlc3RzL3BrY3MxdjItcHNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNzg1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BrY3MxdjItcHNzLmgKQEAgLTAsMCArMSw5NjggQEAKKy8qIHBrY3MxdjItcHNzLmggLSBQU1MgdGVzdCB2ZWN0b3IgdGFibGUKKyAqIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKyAqIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorICogaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogTWFudWFsbHkgY3JlYXRlZCBmcm9tIHRoZSBQU1MgZmlsZSBpbgorICAgZnRwOi8vZnRwLnJzYXNlY3VyaXR5LmNvbS9wdWIvcGtjcy9wa2NzLTEvcGtjcy0xdjItMWQyLXZlYy56aXAKKyAqLworCisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmRlc2M7CisgICAgY29uc3QgY2hhciAqbiwgKmUsICpkOworICAgIHN0cnVjdCB7CisgICAgICBjb25zdCBjaGFyICpkZXNjOworICAgICAgY29uc3QgY2hhciAqbWVzZzsKKyAgICAgIGNvbnN0IGNoYXIgKnNhbHQ7CisgICAgICBjb25zdCBjaGFyICpzaWduOworICAgIH0gbVs2XTsKKyAgfSB0YmxbXSA9CisgIHsKKyAgICB7CisgICAgICAiRXhhbXBsZSAxOiBBIDEwMjQtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MSIKKyAgICAgICJkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmIgorICAgICAgImQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEiCisgICAgICAiMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIzM2E1MDQyYTkwYjI3ZDRmNTQ1MWNhOWJiYmQwYjQ0NzcxYTEwMWFmODg0MzQwYWVmOTg4NWYyYTRiYmU5MmU4IgorICAgICAgIjk0YTcyNGFjM2M1NjhjOGY5Nzg1M2FkMDdjMDI2NmM4YzZhM2NhMDkyOWYxZThmMTEyMzE4ODQ0MjlmYzRkOWEiCisgICAgICAiZTU1ZmVlODk2YTEwY2U3MDdjM2VkN2U3MzRlNDQ3MjdhMzk1NzQ1MDFhNTMyNjgzMTA5YzJhYmFjYWJhMjgzYyIKKyAgICAgICIzMWI0YmQyZjUzYzNlZTM3ZTM1MmNlZTM0ZjllNTAzYmQ4MGMwNjIyYWQ3OWM2ZGNlZTg4MzU0N2M2YTNiMzI1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQU1MgRXhhbXBsZSAxLjEiLAorICAgICAgICAgICJjZGM4N2RhMjIzZDc4NmRmM2I0NWUwYmJiYzcyMTMyNmQxZWUyYWY4MDZjYzMxNTQ3NWNjNmYwZDljNjZlMWI2IgorICAgICAgICAgICIyMzcxZDQ1Y2UyMzkyZTFhYzkyODQ0YzMxMDEwMmYxNTZhMGQ4ZDUyYzFmNGM0MGJhM2FhNjUwOTU3ODZjYjc2IgorICAgICAgICAgICI5NzU3YTY1NjNiYTk1OGZlZDBiY2M5ODRlOGI1MTdhM2Q1ZjUxNWIyM2I4YTQxZTc0YWE4Njc2OTNmOTBkZmIwIgorICAgICAgICAgICI2MWE2ZTg2ZGZhYWVlNjQ0NzJjMDBlNWYyMDk0NTcyOWNiZWJlNzdmMDZjZTc4ZTA4ZjQwOThmYmE0MWY5ZDYxIgorICAgICAgICAgICI5M2MwMzE3ZThiNjBkNGI2MDg0YWNiNDJkMjllMzgwOGEzYmMzNzJkODVlMzMxMTcwZmNiZjdjYzcyZDBiNzFjIgorICAgICAgICAgICIyOTY2NDhiM2E0ZDEwZjQxNjI5NWQwODA3YWE2MjVjYWIyNzQ0ZmQ5ZWE4ZmQyMjNjNDI1MzcwMjk4MjhiZDE2IgorICAgICAgICAgICJiZTAyNTQ2ZjEzMGZkMmUzM2I5MzZkMjY3NmUwOGFlZDFiNzMzMThiNzUwYTAxNjdkMCIsCisgICAgICAgICAgImRlZTk1OWM3ZTA2NDExMzYxNDIwZmY4MDE4NWVkNTdmM2U2Nzc2YWYiLAorICAgICAgICAgICI5MDc0MzA4ZmI1OThlOTcwMWIyMjk0Mzg4ZTUyZjk3MWZhYWMyYjYwYTUxNDVhZjE4NWRmNTI4N2I1ZWQyODg3IgorICAgICAgICAgICJlNTdjZTdmZDQ0ZGM4NjM0ZTQwN2M4ZTBlNDM2MGJjMjI2ZjNlYzIyN2Y5ZDllNTQ2MzhlOGQzMWY1MDUxMjE1IgorICAgICAgICAgICJkZjZlYmI5YzJmOTU3OWFhNzc1OThhMzhmOTE0YjViOWMxYmQ4M2M0ZTJmOWYzODJhMGQwYWEzNTQyZmZlZTY1IgorICAgICAgICAgICI5ODRhNjAxYmM2OWViMjhkZWIyN2RjYTEyYzgyYzJkNGMzZjY2Y2Q1MDBmMWZmMmI5OTRkOGE0ZTMwY2JiMzNjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgMS4yIiwKKyAgICAgICAgICAiODUxMzg0Y2RmZTgxOWMyMmVkNmM0Y2NiMzBkYWViNWNmMDU5YmM4ZTExNjZiN2UzNTMwYzRjMjMzZTJiNWY4ZiIKKyAgICAgICAgICAiNzFhMWNjYTU4MmQ0M2VjYzcyYjFiY2ExNmRmYzcwMTMyMjZiOWUiLAorICAgICAgICAgICJlZjI4NjlmYTQwYzM0NmNiMTgzZGFiM2Q3YmZmYzk4ZmQ1NmRmNDJkIiwKKyAgICAgICAgICAiM2VmN2Y0NmU4MzFiZjkyYjMyMjc0MTQyYTU4NWZmY2VmYmRjYTdiMzJhZTkwZDEwZmIwZjBjNzI5OTg0ZjA0ZSIKKyAgICAgICAgICAiZjI5YTlkZjA3ODA3NzVjZTQzNzM5Yjk3ODM4MzkwZGIwYTU1MDVlNjNkZTkyNzAyOGQ5ZDI5YjIxOWNhMmM0NSIKKyAgICAgICAgICAiMTc4MzI1NThhNTVkNjk0YTZkMjViOWRhYjY2MDAzYzRjY2NkOTA3ODAyMTkzYmU1MTcwZDI2MTQ3ZDM3YjkzNSIKKyAgICAgICAgICAiOTAyNDFiZTUxYzI1MDU1ZjQ3ZWY2Mjc1MmNmYmUyMTQxOGZhZmU5OGMyMmM0ZDRkNDc3MjRmZGI1NjY5ZTg0MyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDEuMyIsCisgICAgICAgICAgImE0YjE1OTk0MTc2MWM0MGM2YTgyZjJiODBkMWI5NGY1YWEyNjU0ZmQxN2UxMmQ1ODg4NjQ2NzliNTRjZDA0ZWYiCisgICAgICAgICAgIjhiZDAzMDEyYmU4ZGMzN2Y0YjgzYWY3OTYzZmFmZjBkZmEyMjU0Nzc0MzdjNDgwMTdmZjJiZTgxOTFjZjM5NTUiCisgICAgICAgICAgImZjMDczNTZlYWIzZjMyMmY3ZjYyMGUyMWQyNTRlNWRiNDMyNDI3OWZlMDY3ZTA5MTBlMmU4MWNhMmNhYjMxYzciCisgICAgICAgICAgIjQ1ZTY3YTU0MDU4ZWI1MGQ5OTNjZGI5ZWQwYjRkMDI5YzA2ZDIxYTk0Y2E2NjFjM2NlMjdmYWUxZDZjYjIwZjQiCisgICAgICAgICAgIjU2NGQ2NmNlNDc2NzU4M2QwZTVmMDYwMjE1YjU5MDE3YmU4NWVhODQ4OTM5MTI3YmQ4YzljNGQ0N2I1MTA1NmMiCisgICAgICAgICAgIjAzMWNmMzM2ZjE3Yzk5ODBmM2I4ZjViOWI2ODc4ZThiNzk3YWE0M2I4ODI2ODQzMzNlMTc4OTNmZTljYWE2YWEiCisgICAgICAgICAgIjI5OWY3ZWQxYTE4ZWUyYzU0ODY0YjdiMmI5OWI3MjYxOGZiMDI1NzRkMTM5ZWY1MGYwMTljOWVlZjQxNjk3MTMiCisgICAgICAgICAgIjM4ZTdkNDcwIiwKKyAgICAgICAgICAiNzEwYjljNDc0N2Q4MDBkNGRlODdmMTJhZmRjZTZkZjE4MTA3Y2M3NyIsCisgICAgICAgICAgIjY2NjAyNmZiYTcxYmQzZTdjZjEzMTU3Y2MyYzUxYThlNGFhNjg0YWY5Nzc4ZjkxODQ5ZjM0MzM1ZDE0MWMwMDEiCisgICAgICAgICAgIjU0YzQxOTc2MjFmOTYyNGE2NzViNWFiYzIyZWU3ZDViYWFmZmFhZTFjOWJhY2EyY2MzNzNiM2YzM2U3OGU2MTQiCisgICAgICAgICAgIjNjMzk1YTkxYWE3ZmFjYTY2NGViNzMzYWZkMTRkODgyNzI1OWQ5OWE3NTUwZmFjYTUwMWVmMmIwNGUzM2MyM2EiCisgICAgICAgICAgImE1MWY0YjllODI4MmVmZGI3MjhjYzBhYjA5NDA1YTkxNjA3YzYzNjk5NjFiYzgyNzBkMmQ0ZjM5ZmNlNjEyYjEiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAxLjQiLAorICAgICAgICAgICJiYzY1Njc0N2ZhOWVhZmIzZjAiLAorICAgICAgICAgICIwNTZmMDA5ODVkZTE0ZDhlZjVjZWE5ZTgyZjhjMjdiZWY3MjAzMzVlIiwKKyAgICAgICAgICAiNDYwOTc5M2IyM2U5ZDA5MzYyZGMyMWJiNDdkYTBiNGYzYTc2MjI2NDlhNDdkNDY0MDE5YjlhZWFmZTUzMzU5YyIKKyAgICAgICAgICAiMTc4YzkxY2Q1OGJhNmJjYjc4YmUwMzQ2YTdiYzYzN2Y0Yjg3M2Q0YmFiMzhlZTY2MWYxOTk2MzRjNTQ3YTFhZCIKKyAgICAgICAgICAiODQ0MmUwM2RhMDE1YjEzNmU1NDNmN2FiMDdjMGMxM2U0MjI1YjhkZThjY2UyNWQ0ZjZlYjg0MDBmODFmN2UxOCIKKyAgICAgICAgICAiMzNiN2VlNmUzMzRkMzcwOTY0Y2E3OWZkYjg3MmI0ZDc1MjIzYjVlZWIwODEwMTU5MWZiNTMyZDE1NWE2ZGU4NyIsCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAxLjUiLAorICAgICAgICAgICJiNDU1ODE1NDdlNTQyNzc3MGM3NjhlOGI4MmI3NTU2NGUwZWE0ZTljMzI1OTRkNmJmZjcwNjU0NGRlMGE4Nzc2IgorICAgICAgICAgICJjN2E4MGI0NTc2NTUwZWVlMWIyYWNhYmM3ZThiN2QzZWY3YmI1YjAzZTQ2MmMxMTA0N2VhZGQwMDYyOWFlNTc1IgorICAgICAgICAgICI0ODBhYzE0NzBmZTA0NmYxM2EyYmY1YWYxNzkyMWRjNGIwYWE4YjAyYmVlNjMzNDkxMTY1MWQ3Zjg1MjVkMTBmIgorICAgICAgICAgICIzMmI1MWQzM2JlNTIwZDNkZGY1YTcwOTk1NWEzZGZlNzgyODNiOWUwYWI1NDA0NmQxNTBjMTc3ZjAzN2ZkY2NjIgorICAgICAgICAgICI1YmU0ZWE1ZjY4YjVlNWEzOGM5ZDdlZGNjY2M0OTc1ZjQ1NWE2OTA5YjQiLAorICAgICAgICAgICI4MGU3MGZmODZhMDhkZTNlYzYwOTcyYjM5YjRmYmZkY2VhNjdhZThlIiwKKyAgICAgICAgICAiMWQyYWFkMjIxY2E0ZDMxZGRmMTM1MDkyMzkwMTkzOThlM2QxNGIzMmRjMzRkYzVhZjRhZWFlYTNjMDk1YWY3MyIKKyAgICAgICAgICAiNDc5Y2YwYTQ1ZTU2Mjk2MzVhNTNhMDE4Mzc3NjE1YjE2Y2I5YjEzYjNlMDlkNjcxZWI3MWUzODdiODU0NWM1OSIKKyAgICAgICAgICAiNjBkYTVhNjQ3NzZlNzY4ZTgyYjJjOTM1ODNiZjEwNGMzZmRiMjM1MTJiN2I0ZTg5ZjYzM2RkMDA2M2E1MzBkYiIKKyAgICAgICAgICAiNDUyNGIwMWMzZjM4NGMwOTMxMGUzMTVhNzlkY2QzZDY4NDAyMmE3ZjMxYzg2NWE2NjRlMzE2OTc4Yjc1OWZhZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDEuNiIsCisgICAgICAgICAgIjEwYWFlOWEwYWIwYjU5NWQwODQxMjA3YjcwMGQ0OGQ3NWZhZWRkZTNiNzc1Y2Q2YjRjYzg4YWUwNmU0Njk0ZWMiCisgICAgICAgICAgIjc0YmExOGY4NTIwZDRmNWVhNjljYmJlN2NjMmJlYmE0M2VmZGMxMDIxNWFjNGViMzJkYzMwMmExZjUzZGM2YzQiCisgICAgICAgICAgIjM1MjI2N2U3OTM2Y2ZlYmY3YzhkNjcwMzU3ODRhMzkwOWZhODU5YzdiN2I1OWI4ZTM5YzVjMjM0OWYxODg2YjciCisgICAgICAgICAgIjA1YTMwMjY3ZDQwMmY3NDg2YWI0ZjU4Y2FkNWQ2OWFkYjE3YWI4Y2QwY2UxY2FmNTAyNWFmNGFlMjRiMWZiODciCisgICAgICAgICAgIjk0YzYwNzBjYzA5YTUxZTJmOTkxMTMxMWUzODc3ZDAwNDRjNzFjNTdhOTkzMzk1MDA4ODA2YjcyM2FjMzgzNzMiCisgICAgICAgICAgImQzOTU0ODE4MTg1MjhjMWU3MDUzNzM5MjgyMDUzNTI5NTEwZTkzNWNkMGZhNzdiOGZhNTNjYzJkNDc0YmQ0ZmIiCisgICAgICAgICAgIjNjYzVjNjcyZDZmZmRjOTBhMDBmOTg0ODcxMmM0YmNmZTQ2YzYwNTczNjU5YjExZTY0NTdlODYxZjBmNjA0YjYiCisgICAgICAgICAgIjEzOGQxNDRmOGNlNGUyZGE3MyIsCisgICAgICAgICAgImE4YWI2OWRkODAxZjAwNzRjMmExZmM2MDY0OTgzNmM2MTZkOTk2ODEiLAorICAgICAgICAgICIyYTM0ZjYxMjVlMWY2YjBiZjk3MWU4NGZiZDQxYzYzMmJlOGYyYzJhY2U3ZGU4YjY5MjZlMzFmZjkzZTlhZjk4IgorICAgICAgICAgICI3ZmJjMDZlNTFlOWJlMTRmNTE5OGY5MWYzZjk1M2JkNjdkYTYwYTlkZjU5NzY0YzNkYzBmZTA4ZTFjYmVmMGI3IgorICAgICAgICAgICI1Zjg2OGQxMGFkM2ZiYTc0OWZlZjU5ZmI2ZGFjNDZhMGQ2ZTUwNDM2OTMzMTU4NmY1OGU0NjI4ZjM5YWEyNzg5IgorICAgICAgICAgICI4MjU0M2JjMGVlYjUzN2RjNjE5NTgwMTliMzk0ZmIyNzNmMjE1ODU4YTBhMDFhYzRkNjUwYjk1NWM2N2Y0YzU4IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSAyOiBBIDEwMjUtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZSIKKyAgICAgICJkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjIgorICAgICAgIjdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDciCisgICAgICAiMmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzMyIKKyAgICAgICJjOSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwMjdkMTQ3ZTQ2NzMwNTczNzdmZDFlYTIwMTU2NTc3MjE3NmE3ZGMzODM1OGQzNzYwNDU2ODVhMmU3ODdjMjNjIgorICAgICAgIjE1NTc2YmMxNmI5ZjQ0NDQwMmQ2YmZjNWQ5OGEzZTg4ZWExM2VmNjdjMzUzZWNhMGMwZGRiYTkyNTViZDdiOGIiCisgICAgICAiYjUwYTY0NGFmZGZkMWRkNTE2OTViMjUyZDIyZTczMThkMWI2Njg3YTFjMTBmZjc1NTQ1ZjNkYjBmZTYwMmQ1ZiIKKyAgICAgICIyYjdmMjk0ZTM2MDFlYWI3YjlkMWNlY2Q3NjdmNjQ2OTJlM2U1MzZjYTI4NDZjYjBjMmRkNDg2YTM5ZmE3NWIxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQU1MgRXhhbXBsZSAyLjEiLAorICAgICAgICAgICJkYWJhMDMyMDY2MjYzZmFlZGI2NTk4NDgxMTUyNzhhNTJjNDRmYWEzYTc2ZjM3NTE1ZWQzMzYzMjEwNzJjNDBhIgorICAgICAgICAgICI5ZDliNTNiYzA1MDE0MDc4YWRmNTIwODc1MTQ2YWFlNzBmZjA2MDIyNmRjYjdiMWYxZmMyN2U5MzYwIiwKKyAgICAgICAgICAiNTdiZjE2MGJjYjAyYmIxZGM3MjgwY2YwNDU4NTMwYjdkMjgzMmZmNyIsCisgICAgICAgICAgIjAxNGM1YmE1MzM4MzI4Y2NjNmU3YTkwYmYxYzBhYjNmZDYwNmZmNDc5NmQzYzEyZTRiNjM5ZWQ5MTM2YTVmZWMiCisgICAgICAgICAgIjZjMTZkODg4NGJkZDk5Y2ZkYzUyMTQ1NmIwNzQyYjczNjg2OGNmOTBkZTA5OWFkYjhkNWZmZDFkZWZmMzliYTQiCisgICAgICAgICAgIjAwN2FiNzQ2Y2VmZGIyMmQ3ZGYwZTIyNWY1NDYyN2RjNjU0NjYxMzE3MjFiOTBhZjQ0NTM2M2E4MzU4YjlmNjAiCisgICAgICAgICAgIjc2NDJmNzhmYWIwYWIwZjQzYjcxNjhkNjRiYWU3MGQ4ODI3ODQ4ZDhlZjFlNDIxYzU3NTRkZGY0MmMyNTg5YjUiCisgICAgICAgICAgImIzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgMi4yIiwKKyAgICAgICAgICAiZTRmODYwMWE4YTZkYTFiZTM0NDQ3YzA5NTljMDU4NTcwYzM2NjhjZmQ1MWRkNWY5Y2NkNmFkNDQxMWZlODIxMyIKKyAgICAgICAgICAiNDg2ZDc4YTZjNDlmOTNlZmMyY2EyMjg4Y2ViYzJiOWI2MGJkMDRiMWUyMjBkODZlM2Q0ODQ4ZDcwOWQwMzJkMSIKKyAgICAgICAgICAiZThjNmEwNzBjNmFmOWE0OTlmY2Y5NTM1NGIxNGJhNjEyN2M3MzlkZTFiYjBmZDE2NDMxZTQ2OTM4YWVjMGNmOCIKKyAgICAgICAgICAiYWQ5ZWI3MmU4MzJhNzAzNWRlOWI3ODA3YmRjMGVkOGI2OGViMGY1YWMyMjE2YmU0MGNlOTIwYzBkYjBlZGRkMyIKKyAgICAgICAgICAiODYwZWQ3ODhlZmFjY2FjYTUwMmQ4ZjJiZDZkMWE3YzFmNDFmZjQ2ZjE2ODFjOGYxZjgxOGU5YzRmNmQ5MWEwYyIKKyAgICAgICAgICAiNzgwM2NjYzYzZDc2YTY1NDRkODQzZTA4NGUzNjNiOGFjYzU1YWE1MzE3MzNlZGI1ZGVlNWI1MTk2ZTlmMDNlOCIKKyAgICAgICAgICAiYjczMWIzNzc2NDI4ZDllNDU3ZmUzZmJjYjNkYjcyNzQ0NDJkNzg1ODkwZTljYjA4NTRiNjQ0NGRhY2U3OTFkNyIKKyAgICAgICAgICAiMjczZGUxODg5NzE5MzM4YTc3ZmUiLAorICAgICAgICAgICI3ZjZkZDM1OWU2MDRlNjA4NzBlODk4ZTQ3YjE5YmYyZTVhN2IyYTkwIiwKKyAgICAgICAgICAiMDEwOTkxNjU2Y2NhMTgyYjdmMjlkMmRiYzAwN2U3YWUwZmVjMTU4ZWI2NzU5Y2I5YzQ1YzVmZjg3Yzc2MzVkZCIKKyAgICAgICAgICAiNDZkMTUwODgyZjRkZTFlOWFlNjVlN2Y3ZDkwMThmNjgzNjk1NGE0N2MwYTgxYThhNmI2ZjgzZjI5NDRkNjA4MSIKKyAgICAgICAgICAiYjFhYTdjNzU5YjI1NGIyYzM0YjY5MWRhNjdjYzAyMjZlMjBiMmYxOGI0MjIxMjc2MWRjZDRiOTA4YTYyYjM3MSIKKyAgICAgICAgICAiYjU5MThjNTc0MmFmNGI1MzdlMjk2OTE3Njc0ZmI5MTQxOTQ3NjE2MjFjYzE5YTQxZjZmYjk1M2ZiY2JiNjQ5ZCIKKyAgICAgICAgICAiZWEiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAyLjMiLAorICAgICAgICAgICI1MmExZDk2YzhhYzM5ZTQxZTQ1NTgwOTgwMWI5MjdhNWI0NDVjMTBkOTAyYTBkY2QzODUwZDIyYTY2ZDJiYjA3IgorICAgICAgICAgICIwM2U2N2Q1ODY3MTE0NTk1YWFiZjVhN2FlYjVhOGY4NzAzNGJiYjMwZTEzY2ZkNDgxN2E5YmU3NjIzMDAyMzYwIgorICAgICAgICAgICI2ZDAyODZhM2ZhZjhhNGQyMmI3MjhlYzUxODA3OWY5ZTY0NTI2ZTNhMGNjNzk0MWFhMzM4YzQzNzk5N2M2ODBjIgorICAgICAgICAgICJjYWM2N2M2NmJmYTEiLAorICAgICAgICAgICJmY2E4NjIwNjhiY2UyMjQ2NzI0YjcwOGEwNTE5ZGExN2U2NDg2ODhjIiwKKyAgICAgICAgICAiMDA3ZjAwMzAwMThmNTNjZGM3MWYyM2QwMzY1OWZkZTU0ZDQyNDFmNzU4YTc1MGI0MmYxODVmODc1Nzg1MjBjMyIKKyAgICAgICAgICAiMDc0MmFmZDg0MzU5YjZlNmU4ZDNlZDk1OWRjNmZlNDg2YmVkYzhlMmNmMDAxZjYzYTdhYmUxNjI1NmExYjg0ZCIKKyAgICAgICAgICAiZjBkMjQ5ZmMwNWQzMTk0Y2U1ZjA5MTI3NDJkYmJmODBkZDE3NGY2YzUxZjZiYWQ3ZjE2Y2YzMzY0ZWJhMDk1YSIKKyAgICAgICAgICAiMDYyNjdkYzM3OTM4MDNhYzc1MjZhZWJlMGE0NzVkMzhiOGMyMjQ3YWI1MWM0ODk4ZGY3MDQ3ZGM2YWRmNTJjNiIKKyAgICAgICAgICAiYzQiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAyLjQiLAorICAgICAgICAgICJhNzE4MmM4M2FjMThiZTY1NzBhMTA2YWE5ZDVjNGUzZGJiZDRhZmFlYjBjNjBjNGEyM2UxOTY5ZDc5ZmYiLAorICAgICAgICAgICI4MDcwZWYyZGU5NDVjMDIzODc2ODRiYTBkMzMwOTY3MzIyMzVkNDQwIiwKKyAgICAgICAgICAiMDA5Y2QyZjRlZGJlMjNlMTIzNDZhZThjNzZkZDlhZDMyMzBhNjIwNzYxNDFmMTZjMTUyYmExODUxM2E0OGVmNiIKKyAgICAgICAgICAiZjAxMGUwZTM3ZmQzZGYxMGExZWM2MjlhMGNiNWEzYjVkMjg5MzAwNzI5OGMzMDkzNmE5NTkwM2I2YmE4NTU1NSIKKyAgICAgICAgICAiZDllYzM2NzNhMDYxMDhmZDYyYTJmZGE1NmQxY2UyZTg1YzRkYjZiMjRhODFjYTNiNDk2YzM2ZDRmZDA2ZWI3YyIKKyAgICAgICAgICAiOTE2NmQ4ZTk0ODc3YzQyYmVhNjIyYjNiZmU5MjUxZmRjMjFkOGQ1MzcxYmFkYWQ3OGE0ODgyMTQ3OTYzMzViNCIKKyAgICAgICAgICAiMGIiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAyLjUiLAorICAgICAgICAgICI4NmE4M2Q0YTcyZWU5MzJhNGY1NjMwYWY2NTc5YTM4NmI3OGZlODg5OTllMGFiZDJkNDkwMzRhNGJmYzg1NGRkIgorICAgICAgICAgICI5NGYxMDk0ZTJlOGNkN2ExNzlkMTk1ODhlNGFlZmMxYjFiZDI1ZTk1ZTNkZDQ2MWYiLAorICAgICAgICAgICIxNzYzOWE0ZTg4ZDcyMmM0ZmNhMjRkMDc5YThiMjljMzI0MzNiMGM5IiwKKyAgICAgICAgICAiMDBlYzQzMDgyNDkzMWViZDNiYWE0MzAzNGRhZTk4YmE2NDZiOGMzNjAxM2QxNjcxYzNjZjFjZjgyNjBjMzc0YiIKKyAgICAgICAgICAiMTlmOGUxY2M4ZDk2NTAxMjQwNWU3ZTliZjczNzg2MTJkZmNjODVmY2UxMmNkYTExZjk1MGJkMGJhODg3Njc0MCIKKyAgICAgICAgICAiNDM2YzFkMjU5NWE2NGExYjMyZWZjZmI3NGEyMWM4NzNiM2NjMzNhYWY0ZTNkYzM5NTNkZTY3ZjA2NzRjMDQ1MyIKKyAgICAgICAgICAiYjRmZDlmNjA0NDA2ZDQ0MWI4MTYwOThjYjEwNmZlMzQ3MmJjMjUxZjgxNWY1OWRiMmU0Mzc4YTNhZGRjMTgxZSIKKyAgICAgICAgICAiY2YiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAyLjYiLAorCisgICAgICAgICAgIjA0OWY5MTU0ZDg3MWFjNGE3YzdhYjQ1MzI1YmE3NTQ1YTFlZDA4ZjcwNTI1YjI2NjdjZjEiLAorICAgICAgICAgICIzNzgxMGRlZjEwNTVlZDkyMmIwNjNkZjc5OGRlNWQwYWFiZjg4NmVlIiwKKyAgICAgICAgICAiMDA0NzViMTY0OGY4MTRhOGRjMGFiZGMzN2I1NTI3ZjU0M2I2NjZiYjZlMzlkMzBlNWI0OWQzYjg3NmRjY2M1OCIKKyAgICAgICAgICAiZWFjMTRlMzJhMmQ1NWMyNjE2MDE0NDU2YWQyZjI0NmZjOGUzZDU2MGRhM2RkZjM3OWExYzBiZDIwMGYxMDIyMSIKKyAgICAgICAgICAiZGYwNzhjMjE5YTE1MWJjOGQ0ZWM5ZDJmYzI1NjQ0Njc4MTEwMTRlZjE1ZDhlYTAxYzJlYmJmZjhjMmM4ZWZhYiIKKyAgICAgICAgICAiMzgwOTZlNTVmY2JlMzI4NWM3YWE1NTg4NTEyNTRmYWZmYTkyYzFjNzJiNzg3NTg2NjNlZjQ1ODI4NDMxMzlkNyIKKyAgICAgICAgICAiYTYiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDM6IEEgMTAyNi1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3IgorICAgICAgIjRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDkiCisgICAgICAiODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YyIKKyAgICAgICI4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0IgorICAgICAgIjQzIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjY1MTQ1MTczM2I1NmRlNWFjMGE2ODlhNGFlYjZlNjg5NGE2OTAxNGUwNzZjODhkZDdhNjY3ZWFiMzIzMmJiY2MiCisgICAgICAiZDJmYzQ0YmEyZmE5YzMxZGI0NmYyMWVkZDFmZGIyM2M1YzEyOGE1ZGE1YmFiOTFlN2Y5NTJiNjc3NTljN2NmZiIKKyAgICAgICI3MDU0MTVhYzlmYTA5MDdjN2NhNjE3OGY2NjhmYjk0OGQ4NjlkYTRjYzNiNzM1NmY0MDA4ZGZkNTQ0OWQzMmVlIgorICAgICAgIjAyZDlhNDc3ZWI2OWZjMjkyNjZlNWQ5MDcwNTEyMzc1YTUwZmJiY2MyN2UyMzhhZDk4NDI1ZjZlYmJmODg5OTEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDMuMSIsCisgICAgICAgICAgIjU5NGIzNzMzM2JiYjJjODQ1MjRhODdjMWEwMWY3NWZjZWMwZTMyNTZmMTA4ZTM4ZGNhMzZkNzBkMDA1NyIsCisgICAgICAgICAgImYzMWFkNmM4Y2Y4OWRmNzhlZDc3ZmVhY2JjYzJmOGIwYThlNGNmYWEiLAorICAgICAgICAgICIwMDg4YjEzNWZiMTc5NGI2Yjk2YzRhM2U2NzgxOTdmOGNhYzUyYjY0YjJmZTkwN2Q2ZjI3ZGU3NjExMjQ5NjRhIgorICAgICAgICAgICI5OWEwMWE4ODI3NDBlY2ZhZWQ2YzAxYTQ3NDY0YmIwNTE4MjMxM2MwMTMzOGE4Y2QwOTcyMTRjZDY4Y2ExMDNiIgorICAgICAgICAgICJkNTdkM2JjOWU4MTYyMTNlNjFkNzg0ZjE4MjQ2N2FiZjhhMDFjZjI1M2U5OWExNTZlYWE4ZTNlMWY5MGUzYzZlIgorICAgICAgICAgICI0ZTNhYTJkODNlZDAzNDViODlmYWZjOWMyNjA3N2MxNGI2YWM1MTQ1NGZhMjZlNDQ2ZTNhMmYxNTNiMmIxNjc5IgorICAgICAgICAgICI3ZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDMuMiIsCisgICAgICAgICAgIjhiNzY5NTI4ODg0YTBkMWZmZDA5MGNmMTAyOTkzZTc5NmRhZGNmYmRkZDM4ZTQ0ZmY2MzI0Y2E0NTEiLAorICAgICAgICAgICJmY2Y5ZjBlMWYxOTlhM2QxZDBkYTY4MWM1Yjg2MDZmYzY0MjkzOWY3IiwKKyAgICAgICAgICAiMDJhNWYwYTg1OGEwODY0YTRmNjUwMTdhN2Q2OTQ1NGYzZjk3M2EyOTk5ODM5YjdiYmM0OGJmNzg2NDExNjkxNyIKKyAgICAgICAgICAiOTU1NmY1OTVmYTQxZjZmZjE4ZTI4NmMyNzgzMDc5YmMwOTEwZWU5Y2MzNGY0OWJhNjgxMTI0ZjkyM2RmYTg4ZiIKKyAgICAgICAgICAiNDI2MTQxYTM2OGE1ZjVhOTMwYzYyOGMyYzNjMjAwZTE4YTc2NDQ3MjFhMGNiZWM2ZGQzZjYyNzliZGUzZThmMiIKKyAgICAgICAgICAiYmU1ZTJkNGVlNTZmOTdlN2NlYWYzMzA1NGJlNzA0MmJkOTFhNjNiYjA5Zjg5N2JkNDFlODExOTdkZWU5OWIxMSIKKyAgICAgICAgICAiYWYiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAzLjMiLAorICAgICAgICAgICIxYWJkYmE0ODljNWFkYTJmOTk1ZWQxNmYxOWQ1YTk0ZDllNmVjMzRhOGQ4NGY4NDU1N2QyNmU1ZWY5YjAyYjIyIgorICAgICAgICAgICI4ODdlM2Y5YTRiNjkwYWQxMTQ5MjA5YzIwYzYxNDMxZjBjMDE3YzM2YzI2NTdiMzVkN2IwN2QzZjVhZDg3MDg1IgorICAgICAgICAgICIwN2E5YzFiODMxZGY4MzVhNTZmODMxMDcxODE0ZWE1ZDNkOGQ4ZjZhZGU0MGNiYTM4YjQyZGI3YTJkM2Q3YTI5IgorICAgICAgICAgICJjOGYwYTc5YTc4MzhjZjU4YTk3NTdmYTJmZTRjNDBkZjliYWExOTNiZmM2ZjkyYjEyM2FkNTdiMDdhY2UzZTZhIgorICAgICAgICAgICJjMDY4YzlmMTA2YWZkOWVlYjAzYjRmMzdjMjVkYmZiY2ZiMzA3MWY2Zjk3NzE3NjZkMDcyZjNiYjA3MGFmNjYwIgorICAgICAgICAgICI1NTMyOTczYWUyNTA1MSIsCisgICAgICAgICAgIjk4NmU3YzQzZGJiNjcxYmQ0MWI5YTdmNGI2YWZjODBlODA1ZjI0MjMiLAorICAgICAgICAgICIwMjQ0YmNkMWM4YzE2OTU1NzM2YzgwM2JlNDAxMjcyZTE4Y2I5OTA4MTFiMTRmNzJkYjk2NDEyNGQ1ZmE3NjA2IgorICAgICAgICAgICI0OWNiYjU3YWZiODc1NWRiYjYyYmY1MWY0NjZjZjIzYTBhMTYwNzU3NmU5ODNkNzc4ZmNlZmZhOTJkZjc1NDhhIgorICAgICAgICAgICJlYThlYTRlY2FkMmMyOWRkOWY5NWJjMDdmZTkxZWNmOGJlZTI1NWJmZTg3NjJmZDc2OTBhYTliZmE0ZmEwODQ5IgorICAgICAgICAgICJlZjcyOGMyYzQyYzQ1MzIzNjQ1MjJkZjJhYjdmOWY4YTAzYjYzZjdhNDk5MTc1ODI4NjY4ZjVlZjVhMjllMzgwIgorICAgICAgICAgICIyYyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDMuNCIsCisgICAgICAgICAgIjhmYjQzMWY1ZWU3OTJiNmMyYWM3ZGI1M2NjNDI4NjU1YWViMzJkMDNmNGU4ODljNWMyNWRlNjgzYzQ2MWI1M2EiCisgICAgICAgICAgImNmODlmOWY4ZDNhYWJkZjZiOWYwYzJhMWRlMTJlMTViNDllZGIzOTE5YTY1MmZlOTQ5MWMyNWE3ZmNlMWY3MjIiCisgICAgICAgICAgImMyNTQzNjA4YjY5ZGMzNzVlYyIsCisgICAgICAgICAgImY4MzEyZDljOGVlYTEzZWMwYTRjN2I5ODEyMGM4NzUwOTA4N2M0NzgiLAorICAgICAgICAgICIwMTk2ZjEyYTAwNWI5ODEyOWM4ZGYxM2M0Y2IxNmY4YWE4ODdkM2M0MGQ5NmRmM2E4OGU3NTMyZWYzOWNkOTkyIgorICAgICAgICAgICJmMjczYWJjMzcwYmMxYmU2ZjA5N2NmZWJiZjAxMThmZDllZjRiOTI3MTU1ZjNkZjIyYjkwNGQ5MDcwMmQxZjdiIgorICAgICAgICAgICJhN2E1MmJlZDhiODk0MmY0MTJjZDdiZDY3NmM5ZDE4ZTE3MDM5MWRjZDM0NWMwNmE3MzA5NjRiM2YzMGJjY2UwIgorICAgICAgICAgICJiYjIwYmExMDZmOWFiMGVlYjM5Y2Y4YTY2MDdmNzVjMDM0N2YwYWY3OWYxNmFmYTA4MWQyYzkyZDFlZTZmODM2IgorICAgICAgICAgICJiOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDMuNSIsCisgICAgICAgICAgImZlZjQxNjFkZmFhZjljNTI5NTA1MWRmYzFmZjM4MTBjOGM5ZWMyZTg2NmY3MDc1NDIyYzhlYzQyMTZhOWM0ZmYiCisgICAgICAgICAgIjQ5NDI3ZDQ4M2NhZTEwYzg1MzRhNDFiMmZkMTVmZWUwNjk2MGVjNmZiM2Y3YTdlOTRhMmY4YTJlM2U0M2RjNGEiCisgICAgICAgICAgIjQwNTc2YzMwOTdhYzk1M2IxZGU4NmYwYjRlZDM2ZDY0NGYyM2FlMTQ0MjU1Mjk2MjI0NjRjYTBjYmYwYjE3NDEiCisgICAgICAgICAgIjM0NzIzODE1N2ZhYjU5ZTRkZTU1MjQwOTZkNjJiYWVjNjNhYzY0IiwKKyAgICAgICAgICAiNTAzMjdlZmVjNjI5MmY5ODAxOWZjNjdhMmE2NjM4NTYzZTliNmUyZCIsCisgICAgICAgICAgIjAyMWVjYTNhYjQ4OTIyNjRlYzIyNDExYTc1MmQ5MjIyMTA3NmQ0ZTAxYzBlNmYwZGRlOWFmZDI2YmE1YWNmNmQiCisgICAgICAgICAgIjczOWVmOTg3NTQ1ZDE2NjgzZTU2NzRjOWU3MGYxZGU2NDlkN2U2MWQ0OGQwY2FlYjRmYjRkOGIyNGZiYTg0YTYiCisgICAgICAgICAgImUzMTA4ZmVlN2QwNzA1OTczMjY2YWM1MjRiNGFkMjgwZjdhZTE3ZGM1OWQ5NmQzMzUxNTg2YjVhM2JkYjg5NWQiCisgICAgICAgICAgIjFlMWY3ODIwYWM2MTM1ZDg3NTM0ODA5OTgzODJiYTMyYjczNDk1NTk2MDhjMzg3NDUyOTBhODVlZjRlOWY5YmQiCisgICAgICAgICAgIjgzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgMy42IiwKKyAgICAgICAgICAiZWZkMjM3YmIwOThhNDQzYWVlYjJiZjZjM2Y4YzgxYjhjMDFiN2ZjYjNmZWIiLAorICAgICAgICAgICJiMGRlM2ZjMjViNjVmNWFmOTZiMWQ1Y2MzYjI3ZDBjNjA1MzA4N2IzIiwKKyAgICAgICAgICAiMDEyZmFmZWM4NjJmNTZlOWU5MmY2MGFiMGM3NzgyNGY0Mjk5YTBjYTczNGVkMjZlMDY0NGQ1ZDIyMmM3ZjBiZCIKKyAgICAgICAgICAiZTAzOTY0ZjhlNzBhNWNiNjVlZDQ0ZTQ0ZDU2YWUwZWRmMWZmODZjYTAzMmNjNWRkNDQwNGRiYjc2YWI4NTQ1OCIKKyAgICAgICAgICAiNmM0NGVlZDgzMzZkMDhkNDU3Y2U2YzAzNjkzYjQ1YzBmMWVmZWY5MzYyNGI5NWI4ZWMxNjljNjE2ZDIwZTU1MyIKKyAgICAgICAgICAiOGViYzBiNjczN2E2ZjgyYjRiYzA1NzA5MjRmYzZiMzU3NTlhMzM0ODQyNjI3OWY4YjNkNzc0NGUyZDIyMjQyNiIKKyAgICAgICAgICAiY2UiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDQ6IEEgMTAyNy1iaXQgUlNBIGtleSBwYWlyIiwKKworICAgICAgIjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIiCisgICAgICAiMWI2MmE2ZWMxZGEzYzMxMWQ3NWVkNTBlMGFiNWZmZjNmZDMzOGFjYzNhYThhNGU3N2VlMjYzNjlhY2I4MWJhOSIKKyAgICAgICIwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjIgorICAgICAgImU1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzciCisgICAgICAiMDUiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiZmEwNDFmOGNkOTY5N2NlZWQzOGVjOGNhYTI3NTUyM2I0ZGQ3MmIwOWEzMDFkMzU0MWQ3MmY1ZDMxYzA1Y2JjZSIKKyAgICAgICIyZDY5ODNiMzYxODNhZjEwNjkwYmQ0NmM0NjEzMWUzNTc4OTQzMWE1NTY3NzFkZDAwNDliNTc0NjFiZjA2MGMxIgorICAgICAgImY2ODQ3MmU4YTY3YzI1ZjM1N2U1YjZiNDczOGZhNTQxYTczMDM0NmI0YTA3NjQ5YTJkZmE4MDZhNjljOTc1YjYiCisgICAgICAiYWJhNjQ2NzhhY2M3ZjU5MTNlODljNjIyZjJkOGFiYjFlM2UzMjU1NGUzOWRmOTRiYTYwYzAwMmUzODdkOTAxMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNC4xIiwKKyAgICAgICAgICAiOWZiMDNiODI3YzgyMTdkOSIsCisgICAgICAgICAgImVkN2M5OGM5NWYzMDk3NGZiZTRmYmRkY2YwZjI4ZDYwMjFjMGU5MWQiLAorICAgICAgICAgICIwMzIzZDViN2JmMjBiYTQ1MzkyODlhZTQ1MmFlNDI5NzA4MGZlZmY0NTE4NDIzZmY0ODExYTgxNzgzN2U3ZDgyIgorICAgICAgICAgICJmMTgzNmNkZmFiNTQ1MTRmZjA4ODdiZGRlZWJmNDBiZjk5YjA0N2FiYzNlY2ZhNmEzN2EzZWYwMGY0YTBjNGE4IgorICAgICAgICAgICI4YWFlMDkwNGI3NDVjODQ2YzQxMDdlODc5NzcyM2U4YWM4MTBkOWUzZDk1ZGZhMzBmZjQ5NjZmNGQ3NWQxMzc2IgorICAgICAgICAgICI4ZDIwODU3ZjJiMTQwNmYyNjRjZmU3NWUyN2Q3NjUyZjRiNWVkMzU3NWYyOGE3MDJmOGM0ZWQ5Y2Y5YjJkNDQ5IgorICAgICAgICAgICI0OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDQuMiIsCisgICAgICAgICAgIjBjYTJhZDc3Nzk3ZWNlODZkZTViZjc2ODc1MGRkYjVlZDZhMzExNmFkOTliYmQxN2VkZjdmNzgyZjBkYjFjZDAiCisgICAgICAgICAgIjViMGY2Nzc0NjhjNWVhNDIwZGMxMTZiMTBlODBkMTEwZGUyYjA0NjFlYTE0YTM4YmU2ODYyMDM5MmU3ZTg5M2MiCisgICAgICAgICAgImI0ZWE5MzkzZmI4ODZjMjBmZjc5MDY0MjMwNWJmMzAyMDAzODkyZTU0ZGY5ZjY2NzUwOWRjNTM5MjBkZjU4M2YiCisgICAgICAgICAgIjUwYTNkZDYxYWJiNmZhYjc1ZDYwMDM3N2UzODNlNmFjYTY3MTBlZWVhMjcxNTZlMDY3NTJjOTRjZTI1YWU5OWYiCisgICAgICAgICAgImNiZjg1OTJkYmUyZDdlMjc0NTNjYjQ0ZGUwNzEwMGViYjFhMmExOTgxMWE0NzhhZGJlYWIyNzBmOTRlOGZlMzYiCisgICAgICAgICAgIjlkOTBiM2NhNjEyZjlmIiwKKyAgICAgICAgICAiMjJkNzFkNTQzNjNhNDIxN2FhNTUxMTNmMDU5YjMzODRlM2U1N2U0NCIsCisgICAgICAgICAgIjA0OWQwMTg1ODQ1YTI2NGQyOGZlYjFlNjllZGFlYzA5MDYwOWU4ZTQ2ZDkzYWJiMzgzNzFjZTUxZjRhYTY1YTUiCisgICAgICAgICAgIjk5YmRhYWE4MWQyNGZiYTY2YTA4YTExNmNiNjQ0ZjNmMWU2NTNkOTVjODlkYjhiYmQ1ZGFhYzI3MDljODk4NDAiCisgICAgICAgICAgIjAwMTc4NDEwYTdjNmFhODY2N2RkYzM4Yzc0MWY3MTBlYzg2NjVhYTkwNTJiZTkyOWQ0ZTNiMTY3ODJjMTY2MjEiCisgICAgICAgICAgIjE0YzU0MTRiYjAzNTM0NTVjMzkyZmMyOGYzZGI1OTA1NGI1ZjM2NWM0OWUxZDE1NmY4NzZlZTEwY2I0ZmQ3MDUiCisgICAgICAgICAgIjk4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNC4zIiwKKyAgICAgICAgICAiMjg4MDYyYWZjMDhmY2RiN2M1Zjg2NTBiMjk4MzczMDA0NjFkZDU2NzZjMTdhMjBhM2M4ZmI1MTQ4OTQ5ZTNmNyIKKyAgICAgICAgICAiM2Q2NmIzYWU4MmM3MjQwZTI3YzViM2VjNDMyOGVlN2Q2ZGRmNmE2YTBjOWI1YjE1YmNkYTE5NmE5ZDBjNzZiMSIKKyAgICAgICAgICAiMTlkNTM0ZDg1YWJkMTIzOTYyZDU4M2I3NmNlOWQxODBiY2UxY2EiLAorICAgICAgICAgICI0YWY4NzBmYmM2NTE2MDEyY2E5MTZjNzBiYTg2MmFjN2U4MjQzNjE3IiwKKyAgICAgICAgICAiMDNmYmM0MTBhMmNlZDU5NTAwZmI5OWY5ZTJhZjI3ODFhZGE3NGUxMzE0NTYyNDYwMjc4MmUyOTk0ODEzZWVmYyIKKyAgICAgICAgICAiYTA1MTllY2QyNTNiODU1ZmI2MjZhOTBkNzcxZWFlMDI4YjBjNDdhMTk5Y2JkOWY4ZTMyNjk3MzRhZjQxNjM1OSIKKyAgICAgICAgICAiOTA5MDcxM2EzZmE5MTBmYTA5NjA2NTI3MjE0MzJiOTcxMDM2YTcxODFhMmJjMGNhYjQzYjBiNTk4YmM2MjE3NCIKKyAgICAgICAgICAiNjFkN2RiMzA1ZmY3ZTk1NGM1YjViYjIzMWMzOWU3OTFhZjZiY2ZhNzZiMTQ3YjA4MTMyMWY3MjY0MTQ4MmEyYSIKKyAgICAgICAgICAiYWQiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA0LjQiLAorICAgICAgICAgICI2ZjRmOWFiOTUwMTE5OWNlZjU1YzZjZjQwOGZlN2IzNmM1NTdjNDlkNDIwYTQ3NjNkMjQ2M2M4YWQ0NGIzY2ZjIgorICAgICAgICAgICI1YmUyNzQyYzBlN2Q5YjBmNjYwOGYwOGM3ZjQ3YjY5M2VlIiwKKyAgICAgICAgICAiNDBkMmUxODBmYWUxZWFjNDM5YzE5MGI1NmMyYzBlMTRkZGY5YTIyNiIsCisgICAgICAgICAgIjA0ODY2NDRiYzY2YmY3NWQyODMzNWE2MTc5YjEwODUxZjQzZjA5YmRlZDlmYWMxYWYzMzI1MmJiOTk1M2JhNDIiCisgICAgICAgICAgIjk4Y2Q2NDY2YjI3NTM5YTcwYWRhYTNmODliM2RiM2M3NGFiNjM1ZDEyMmY0ZWU3Y2U1NTdhNjFlNTliODJmZmIiCisgICAgICAgICAgIjc4NjYzMGU1ZjlkYjUzYzc3ZDlhMGMxMmZhYjU5NThkNGMyY2U3ZGFhODA3Y2Q4OWJhMmNjN2ZjZDAyZmY0NzAiCisgICAgICAgICAgImNhNjdiMjI5ZmNjZTgxNGM4NTJjNzNjYzkzYmVhMzViZTY4NDU5Y2U0NzhlOWQ0NjU1ZDEyMWM4NDcyZjM3MWQiCisgICAgICAgICAgIjRmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNC41IiwKKyAgICAgICAgICAiZTE3ZDIwMzg1ZDUwMTk1NTgyM2MzZjY2NjI1NGMxZDNkZDM2YWQ1MTY4YjhmMThkMjg2ZmRjZjY3YTdkYWQ5NCIKKyAgICAgICAgICAiMDk3MDg1ZmFiN2VkODZmZTIxNDJhMjg3NzE3MTc5OTdlZjFhN2EwODg4NGVmYzM5MzU2ZDc2MDc3YWFmODI0NSIKKyAgICAgICAgICAiOWE3ZmFkNDU4NDg4NzVmMjgxOWIwOTg5MzdmZTkyM2JjYzlkYzQ0MmQ3MmQ3NTRkODEyMDI1MDkwYzliYzAzZCIKKyAgICAgICAgICAiYjMwODBjMTM4ZGQ2M2IzNTVkMGI0Yjg1ZDY2ODhhYzE5ZjRkZTE1MDg0YTBiYTRlMzczYjkzZWY0YTU1NTA5NiIKKyAgICAgICAgICAiNjkxOTE1ZGMyM2MwMGU5NTRjZGViMjBhNDdjZDU1ZDE2YzNkODY4MWQ0NmVkN2YyZWQ1ZWE0Mjc5NWJlMTdiYSIKKyAgICAgICAgICAiZWQyNWYwZjRkMTEzYjM2MzZhZGRkNTg1ZjE2YThiNWFlYzBjOGZhOWM1ZjAzY2JmM2I5YjczIiwKKyAgICAgICAgICAiMjQ5N2RjMmI0NjE1ZGZhZTVhNjYzZDQ5ZmZkNTZiZjdlZmMxMTMwNCIsCisgICAgICAgICAgIjAyMmE4MDA0NTM1MzkwNGNiMzBjYmI1NDJkN2Q0OTkwNDIxYTZlZWMxNmE4MDI5YTg0MjJhZGZkMjJkNmFmZjgiCisgICAgICAgICAgImM0Y2MwMjk0YWYxMTBhMGMwNjdlYzg2YTdkMzY0MTM0NDU5YmIxYWU4ZmY4MzZkNWE4YTI1Nzk4NDA5OTZiMzIiCisgICAgICAgICAgIjBiMTlmMTNhMTNmYWQzNzhkOTMxYTY1NjI1ZGFlMjczOWYwYzUzNjcwYjM1ZDlkM2NiYWMwOGU3MzNlNGVjMmIiCisgICAgICAgICAgIjgzYWY0YjkxOTZkNjNlN2M0ZmYxZGRlYWUyYTEyMjc5MWExMjViZmVhOGRlYjBkZThjY2YxZjRmZmFmNmU2ZmIiCisgICAgICAgICAgIjBhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNC42IiwKKyAgICAgICAgICAiYWZiYzE5ZDQ3OTI0OTAxOGZkZjRlMDlmNjE4NzI2NDQwNDk1ZGUxMWRkZWVlMzg4NzJkNzc1ZmNlYTc0YTIzOCIKKyAgICAgICAgICAiOTZiNTM0M2M5YzM4ZDQ2YWYwZGJhMjI0ZDA0NzU4MGNjNjBhNjVlOTM5MWNmOWI1OWIzNmE4NjA1OThkNGU4MiIKKyAgICAgICAgICAiMTY3MjJmOTkzYjkxY2ZhZTg3YmMyNTVhZjg5YTZhMTk5YmNhNGEzOTFlYWRiYzNhMjQ5MDNjMGJkNjY3MzY4ZiIKKyAgICAgICAgICAiNmJlNzhlM2ZlYWJmYjRmZmQ0NjMxMjI3NjM3NDBmZmJiZWZlYWI5YTI1NTY0YmM1ZDFjMjRjOTNlNDIyZjc1MCIKKyAgICAgICAgICAiNzNlMmFkNzJiZjQ1YjEwZGYwMGI1MmExNDcxMjhlNzNmZWUzM2ZhM2YwNTc3ZDc3ZjgwZmJjMmRmMWJlZDMxMyIKKyAgICAgICAgICAiMjkwYzEyNzc3ZjUwIiwKKyAgICAgICAgICAiYTMzNGRiNmZhZWJmMTEwODFhMDRmODdjMmQ2MjFjZGVjNzkzMGI5YiIsCisgICAgICAgICAgIjAwOTM4ZGNiNmQ1ODMwNDYwNjVmNjljNzhkYTdhMWYxNzU3MDY2YTdmYTc1MTI1YTlkMjkyOWYwYjc5YTYwYjYiCisgICAgICAgICAgIjI3YjA4MmYxMWY1YjE5NmYyOGViOWRhYTZmMjFjMDVlNTE0MGY2YWVmMTczN2QyMDIzMDc1YzA1ZWNmMDRhMDIiCisgICAgICAgICAgIjhjNjg2YTJhYjNlN2Q1YTA2NjRmMjk1Y2UxMjk5NWU4OTA5MDhiNmFkMjFmMDgzOWViNjViNzAzOTNhN2I1YWYiCisgICAgICAgICAgImQ5ODcxZGUwY2FhMGNlZGVjNWI4MTk2MjY3NTYyMDlkMTNhYjFlN2JiOTU0NmEyNmZmMzdlOWE1MWFmOWZkNTYiCisgICAgICAgICAgIjJlIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSA1OiBBIDEwMjgtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MSIKKyAgICAgICI2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3IgorICAgICAgIjQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWEiCisgICAgICAiN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNSIKKyAgICAgICIwNyIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwM2NlMDhiMTA0ZmZmMzk2YTk3OWJkM2U0ZTQ2OTI1YjYzMTlkZGI2M2FjYmNmZDgxOWYxN2QxNmI4MDc3YjNhIgorICAgICAgIjg3MTAxZmYzNGI3N2ZlNDhiOGIyMDVhOTZlOTE1MWJhOGVjZWE2NGQwY2NlN2IyM2MzZTZhNmI4MzA1OGJjNDkiCisgICAgICAiZGFlODE2YWU3MzZkYjVhNDcwOGUyYWQ0MzUyMzJiNTY3ZjkwOTZjZTU5ZmYyODA2MWU3OWFiMWMwMmQ3MTdlNiIKKyAgICAgICJiMjNjZWE2ZGI4ZWI1MTkyZmE3YzFlYWIyMjdkYmE3NDYyMWM0NTYwMTg5NmVlZjEzNzkyYzg0NDBiZWIxNWFhIgorICAgICAgImMxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQU1MgRXhhbXBsZSA1LjEiLAorICAgICAgICAgICIzMGM3ZDU1NzQ1OGI0MzZkZWNmZGMxNGQwNmNiN2I5NmIwNjcxOGM0OGQ3ZGU1NzQ4MmE4NjhhZTdmMDY1ODcwIgorICAgICAgICAgICJhNjIxNjUwNmQxMWI3NzkzMjNkZmRmMDQ2Y2Y1Nzc1MTI5MTM0YjRkNTY4OWU0ZDljMGNlMWUxMmQ3ZDRiMDZjIgorICAgICAgICAgICJiNWZjNTgyMGRlY2ZhNDFiYWY1OWJmMjU3YjMyZjAyNWI3Njc5YjQ0NWI5NDk5YzkyNTU1MTQ1ODg1OTkyZjFiIgorICAgICAgICAgICI3NmY4NDg5MWVlNGQzYmUwZjUxNTBmZDU5MDFlM2E0YzhlZDQzZmQzNmI2MWQwMjJlNjVhZDUwMDhkYmYzMzI5IgorICAgICAgICAgICIzYzIyYmZiZmQwNzMyMWYwZjFkNWZhOWZkZjAwMTRjMmZjYjAzNThhYWQwZTM1NGIwZDI5IiwKKyAgICAgICAgICAiMDgxYjIzM2I0MzU2Nzc1MGJkNmU3OGYzOTZhODhiOWY2YTQ0NTE1MSIsCisgICAgICAgICAgIjBiYTM3M2Y3NmUwOTIxYjcwYThmYmZlNjIyZjBiZjc3YjI4YTNkYjk4ZTM2MTA1MWMzZDdjYjkyYWQwNDUyOTEiCisgICAgICAgICAgIjVhNGRlOWMwMTcyMmY2ODIzZWViNmFkZjdlMGNhODI5MGY1ZGUzZTU0OTg5MGFjMmEzYzU5NTBhYjIxN2JhNTgiCisgICAgICAgICAgIjU5MDg5NDk1MmRlOTZmOGRmMTExYjI1NzUyMTVkYTZjMTYxNTkwYzc0NWJlNjEyNDc2ZWU1NzhlZDM4NGFiMzMiCisgICAgICAgICAgImUzZWNlOTc0ODFhMjUyZjVjNzlhOThiNTUzMmFlMDBjZGQ2MmYyZWNjMGNkMWJhZWZlODBkODBiOTYyMTkzZWMiCisgICAgICAgICAgIjFkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNS4yIiwKKyAgICAgICAgICAiZTdiMzJlMTU1NmVhMWIyNzk1MDQ2YWM2OTczOWQyMmFjODk2NmJmMTFjMTE2ZjYxNGIxNjY3NDBlOTZiOTA2NSIKKyAgICAgICAgICAiM2U1NzUwOTQ1ZmNmNzcyMTg2YzAzNzkwYTA3ZmRhMzIzZTFhNjE5MTZiMDZlZTIxNTdkYjNkZmY4MGQ2N2Q1ZSIKKyAgICAgICAgICAiMzlhNTNhZTI2OGM4ZjA5ZWQ5OWE3MzIwMDViMGJjNmEwNGFmNGUwOGQ1N2EwMGU3MjAxYjMwNjBlZmFhZGI3MyIKKyAgICAgICAgICAiMTEzYmZjMDg3ZmQ4MzcwOTNhYTI1MjM1YjhjMTQ5ZjU2MjE1ZjAzMWMyNGFkNWJkZTdmMjk5NjBkZjdkNTI0MCIKKyAgICAgICAgICAiNzBmNzQ0OWM2Zjc4NTA4NGJlMWEwZjczMzA0N2YzMzZmOTE1NDczODY3NDU0N2RiMDJhOWY0NGRmYzZlNjAzMCIKKyAgICAgICAgICAiMTA4MWUxY2U5OTg0N2YzYjViNjAxZmYwNmI0ZDU3NzZhOTc0MGI5YWEwZDM0MDU4ZmQzYjkwNmU0Zjc4NTlkZiIKKyAgICAgICAgICAiYjA3ZDcxNzNlNWU2ZjYzNTBhZGFjMjFmMjdiMjMwNzQ2OSIsCisgICAgICAgICAgImJkMGNlMTk1NDlkMDcwMDEyMGNiZTUxMDc3ZGJiYmIwMGE4ZDhiMDkiLAorICAgICAgICAgICIwODE4MGRlODI1ZTRiOGIwMTRhMzJkYThiYTc2MTU1NTkyMTIwNGYyZjkwZDVmMjRiNzEyOTA4ZmY4NGYzZTIyIgorICAgICAgICAgICIwYWQxNzk5N2MwZGQ2ZTcwNjYzMGJhM2U4NGFkZDRkNWU3YWIwMDRlNTgwNzRiNTQ5NzA5NTY1ZDQzYWQ5ZTk3IgorICAgICAgICAgICJiNWE3YTFhMjllODViOWY5MGY0YWFmY2RmNTgzMjFkZThjNTk3NGVmOWFiZjJkNTI2ZjMzYzBmMmY4MmU5NWQxIgorICAgICAgICAgICI1OGVhNmI4MWYxNzM2ZGI4ZDFhZjNkNmFjNmE4M2IzMmQxOGJhZTBmZjFiMmZlMjdkZTRjNzZlZDhjNzk4MGEzIgorICAgICAgICAgICI0ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDUuMyIsCisgICAgICAgICAgIjhkODM5NmUzNjUwN2ZlMWVmNmExOTAxNzU0OGUwYzcxNjY3NGMyZmVjMjMzYWRiMmY3NzU2NjVlYzQxZjJiZDAiCisgICAgICAgICAgImJhMzk2YjA2MWE5ZGFhN2U4NjZmN2MyM2ZkMzUzMTk1NDMwMGEzNDJmOTI0NTM1ZWExNDk4YzQ4ZjZjODc5OTMiCisgICAgICAgICAgIjI4NjVmYzAyMDAwYzUyODcyM2I3YWQwMzM1NzQ1YjUxMjA5YTBhZmVkOTMyYWY4ZjA4ODdjMjE5MDA0ZDJhYmQiCisgICAgICAgICAgIjg5NGVhOTI1NTllZTMxOThhZjNhNzM0ZmU5Yjk2MzhjMjYzYTcyOGFkOTVhNWFlOGNlM2ViMTU4MzlmM2FhNzgiCisgICAgICAgICAgIjUyYmIzOTA3MDZlNzc2MGU0M2E3MTI5MWEyZTNmODI3MjM3ZGVkYTg1MTg3NGM1MTc2NjVmNTQ1ZjI3MjM4ZGYiCisgICAgICAgICAgIjg2NTU3ZjM3NWQwOWNjZDhiZDE1ZDhjY2Y2MWY1ZDc4Y2E1YzdmNWNkZTc4MmU2YmY1ZDAwNTcwNTZkNGJhZDkiCisgICAgICAgICAgIjhiM2QyZjk1NzVlODI0YWI3YTMzZmY1N2IwYWMxMDBhYjBkNmVhZDdhYTBiNTBmNmU0ZDNlNWVjMGI5NjZiIiwKKyAgICAgICAgICAiODE1Nzc5YTkxYjNhOGJkMDQ5YmYyYWViOTIwMTQyNzcyMjIyYzljYSIsCisgICAgICAgICAgIjA1ZTBmZGJkZjZmNzU2ZWY3MzMxODVjY2ZhOGNlZDJlYjZkMDI5ZDlkNTZlMzU1NjFiNWRiOGU3MDI1N2VlNmYiCisgICAgICAgICAgImQwMTlkMmYwYmJmNjY5ZmU5Yjk4MjFlNzhkZjZkNDFlMzE2MDhkNTgyODBmMzE4ZWUzNGY1NTk5NDFjOGRmMTMiCisgICAgICAgICAgIjI4NzU3NGJhYzAwMGI3ZTU4ZGM0ZjQxNGJhNDlmYjEyN2Y5ZDBmODkzNjYzOGM3NmU4NTM1NmM5OTRmNzk3NTAiCisgICAgICAgICAgImY3ZmEzY2Y0ZmQ0ODJkZjc1ZTNmYjk5NzhjZDA2MWY3YWJiMTc1NzJlNmU2M2UwYmRlMTJjYmRjZjE4YzY4YjkiCisgICAgICAgICAgIjc5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNS40IiwKKyAgICAgICAgICAiMzI4YzY1OWUwYTY0Mzc0MzNjY2ViNzNjMTQiLAorICAgICAgICAgICI5YWVjNGE3NDgwZDViYmM0MjkyMGQ3Y2EyMzVkYjY3NDk4OWM5YWFjIiwKKyAgICAgICAgICAiMGJjOTg5ODUzYmMyZWE4Njg3MzI3MWNlMTgzYTkyM2FiNjVlOGE1MzEwMGU2ZGY1ZDg3YTI0YzQxOTRlYjc5NyIKKyAgICAgICAgICAiODEzZWUyYTE4N2MwOTdkZDg3MmQ1OTFkYTYwYzU2ODYwNWRkN2U3NDJkNWFmNGUzM2IxMTY3OGNjYjYzOTAzMiIKKyAgICAgICAgICAiMDRhM2QwODBiMDkwMmM4OWFiYTg4NjhmMDA5YzBmMWMwY2I4NTgxMGJiZGQyOTEyMWFiYjg0NzFmZjJkMzllNCIKKyAgICAgICAgICAiOWZkOTJkNTZjNjU1YzhlMDM3YWQxOGZhZmJkYzkyYzk1ODYzZjdmNjFlYTllZmEyOGZlYTQwMTM2OWQxOWRhZSIKKyAgICAgICAgICAiYTEiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA1LjUiLAorICAgICAgICAgICJmMzdiOTYyMzc5YTQ3ZDQxNWEzNzZlZWM4OTczMTUwYmNiMzRlZGQ1YWI2NTQwNDFiNjE0MzA1NjBjMjE0NDU4IgorICAgICAgICAgICIyYmExMzNjODY3ZDg1MmQ2YjhlMjMzMjE5MDEzMDJlY2I0NWIwOWVjODhiMTUyNzE3OGZhMDQzMjYzZjMwNjdkIgorICAgICAgICAgICI5ZmZlOTczMDMyYTk5ZjRjYjA4YWQyYzdlMGEyNDU2Y2RkNTdhN2RmNTZmZTYwNTM1MjdhNWFlYjY3ZDdlNTUyIgorICAgICAgICAgICIwNjNjMWNhOTdiMWJlZmZhN2IzOWU5OTdjYWYyNzg3OGVhMGY2MmNiZWJjOGMyMWRmNGM4ODlhMjAyODUxZTk0IgorICAgICAgICAgICI5MDg4NDkwYzI0OWI2ZTlhY2YxZDgwNjNmNWJlMjM0Mzk4OWJmOTVjNGRhMDFhMmJlNzhiNGFiNmIzNzgwMTViIgorICAgICAgICAgICJjMzc5NTdmNzY5NDhiNWU1OGU0NDBjMjg0NTNkNDBkN2NmZDU3ZTdkNjkwNjAwNDc0YWI1ZTc1OTczYjFlYTBjIgorICAgICAgICAgICI1ZjFlNDVkMTQxOTBhZmUyZjRlYjZkM2JkZjcxZjFkMmY4YmIxNTZhMWMyOTVkMDRhYWViOWQ2ODlkY2U3OWVkIgorICAgICAgICAgICI2MmJjNDQzZSIsCisgICAgICAgICAgImUyMGMxZTk4Nzg1MTJjMzk5NzBmNTgzNzVlMTU0OWE2OGI2NGYzMWQiLAorICAgICAgICAgICIwYWVmYTk0M2I2OThiOTYwOWVkZjg5OGFkMjI3NDRhYzI4ZGMyMzk0OTdjZWEzNjljYmJkODRmNjVjOTVjMGFkIgorICAgICAgICAgICI3NzZiNTk0NzQwMTY0YjU5YTczOWM2ZmY3YzJmMDdjN2MwNzdhODZkOTUyMzhmZTUxZTFmY2YzMzU3NGE0YWUwIgorICAgICAgICAgICI2ODRiNDJhM2Y2YmY2NzdkOTE4MjBjYTg5ODc0NDY3YjJjMjNhZGQ3Nzk2OWM4MDcxNzQzMGQwZWZjMWQzNjk1IgorICAgICAgICAgICI4OTJjZTg1NWNiN2Y3MDExNjMwZjRkZjI2ZGVmOGRkZjM2ZmMyMzkwNWY1N2ZhNjI0M2E0ODVjNzcwZDU2ODFmIgorICAgICAgICAgICJjZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDUuNiIsCisgICAgICAgICAgImM2MTAzYzMzMGMxZWY3MThjMTQxZTQ3YjhmYTg1OWJlNGQ1Yjk2MjU5ZTdkMTQyMDcwZWNkNDg1ODM5ZGJhNWEiCisgICAgICAgICAgIjgzNjljMTdjMTExNDAzNWU1MzJkMTk1Yzc0ZjQ0YTA0NzZhMmQzZThhNGRhMjEwMDE2Y2FjZWQwZTM2N2NiODYiCisgICAgICAgICAgIjc3MTBhNGI1YWEyZGYyYjhlNWRhZjVmZGM2NDc4MDdkNGQ1ZWJiNmM1NmI5NzYzY2NkYWU0ZGVhMzMwOGViMGEiCisgICAgICAgICAgImMyYTg5NTAxY2IyMDlkMjYzOWZhNWJmODdjZTc5MDc0N2QzY2IyZDI5NWU4NDU2NGYyZjYzNzgyNGYwYzEzMDIiCisgICAgICAgICAgIjgxMjliMGFhNGE0MjJkMTYyMjgyIiwKKyAgICAgICAgICAiMjMyOTFlNGEzMzA3ZThiYmI3NzY2MjNhYjM0ZTRhNWY0Y2M4YThkYiIsCisgICAgICAgICAgIjAyODAyZGNjZmE4ZGZhZjUyNzliZjBiNGEyOWJhMWIxNTc2MTFmYWVhYWY0MTliODkxOWQxNTk0MTkwMGMxMzMiCisgICAgICAgICAgIjllN2U5MmU2ZmFlNTYyYzUzZTZjYzhlODQxMDRiMTEwYmNlMDNhZDE4NTI1ZTNjNDlhMGVhZGFkNWQzZjI4ZjIiCisgICAgICAgICAgIjQ0YThlZDg5ZWRiYWZiYjY4NjI3N2NmYThhZTkwOTcxNGQ2YjI4ZjRiZjhlMjkzYWEwNGM0MWVmZTdjMGE4MTIiCisgICAgICAgICAgIjY2ZDVjMDYxZTI1NzViZTAzMmFhNDY0Njc0ZmY3MTYyNjIxOWJkNzRjYzQ1ZjBlN2VkNGUzZmY5NmVlZTc1OGUiCisgICAgICAgICAgIjhmIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSA2OiBBIDEwMjktYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MSIKKyAgICAgICJmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4IgorICAgICAgImFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGIiCisgICAgICAiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OCIKKyAgICAgICJkMSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwM2I2NjRlZTNiNzU2NjcyM2ZjNmVhZjI4YWJiNDMwYTM5ODBmMTEyNmM4MWRlOGFkNzA5ZWFiMzlhYzlkY2QwIgorICAgICAgImIxNTUwYjM3MjlkODcwNjhlOTUyMDA5ZGY1NDQ1MzRjMWY1MDgyOWE3OGY0NTkxZWI4ZmQ1NzE0MDQyNmE2YmIiCisgICAgICAiMDQwNWI2YTZmNTFhNTdkOTI2N2I3YmJjNjUzMzkxYTY5OWEyYTkwZGFjOGFlMjI2YmNjNjBmYThjZDkzNGM3MyIKKyAgICAgICJjN2IwM2IxZjZiODE4MTU4NjMxODM4YTg2MTJlNmU2ZWE5MmJlMjRmODMyNGZhZjViMWZkODU4NzIyNTI2N2JhIgorICAgICAgIjZmIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQU1MgRXhhbXBsZSA2LjEiLAorICAgICAgICAgICIwYTIwYjc3NGFkZGMyZmE1MTI0NWVkN2NiOWRhNjA5ZTUwY2FjNjYzNmE1MjU0M2Y5NzQ1OGVlZDczNDBmOGQ1IgorICAgICAgICAgICIzZmZjNjQ5MThmOTQ5MDc4ZWUwM2VmNjBkNDJiNWZlYzI0NjA1MGJkNTUwNWNkOGNiNTk3YmFkM2M0ZTcxM2IwIgorICAgICAgICAgICJlZjMwNjQ0ZTc2YWRhYmIwZGUwMWExNTYxZWZiMjU1MTU4Yzc0ZmM4MDFlNmU5MTllNTgxYjQ2ZjBmMGRkZDA4IgorICAgICAgICAgICJlNGYzNGM3ODEwYjVlZDgzMThmOTFkN2M4YyIsCisgICAgICAgICAgIjViNGVhMmVmNjI5Y2MyMmYzYjUzOGUwMTY5MDRiNDdiMWU0MGJmZDUiLAorICAgICAgICAgICIwNGMwY2ZhY2VjMDRlNWJhZGJlY2UxNTlhNWExMTAzZjY5YjNmMzJiYTU5M2NiNGNjNGIxYjdhYjQ1NTkxNmE5IgorICAgICAgICAgICI2YTI3Y2QyNjc4ZWEwZjQ2YmEzN2Y3ZmM5Yzg2MzI1ZjI5NzMzYjM4OWYxZDk3ZjQzZTcyMDFjMGYzNDhmYzQ1IgorICAgICAgICAgICJmZTQyODkyMzM1MzYyZWVlMDE4YjViMTYxZjJmOTM5MzAzMTIyNWM3MTMwMTJhNTc2YmM4OGUyMzA1MjQ4OTg2IgorICAgICAgICAgICI4ZDkwMTBjYmYwMzNlY2M1NjhlOGJjMTUyYmRjNTlkNTYwZTQxMjkxOTE1ZDI4NTY1MjA4ZTIyYWVlYzllZjg1IgorICAgICAgICAgICJkMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDYuMiIsCisgICAgICAgICAgIjJhYWZmNjYzMWY2MjFjZTYxNTc2MGE5ZWJjZTk0YmIzMzMwNzdhZDg2NDg4Yzg2MWQ0Yjc2ZDI5YzFmNDg3NDYiCisgICAgICAgICAgImM2MTFhZTFlMDNjZWQ0NDQ1ZDdjZmExZmU1ZjYyZTFiM2YwODQ1MmJkZTNiNmVmODE5NzNiYWZiYjU3Zjk3YmMiCisgICAgICAgICAgImVlZjg3Mzk4NTM5NWI4MjYwNTg5YWE4OGNiN2RiNTBhYjQ2OTI2MmU1NTFiZGNkOWE1NmYyNzVhMGFjNGZlNDgiCisgICAgICAgICAgIjQ3MDBjMzVmM2RiZjJiNDY5ZWRlODY0NzQxYjg2ZmE1OTE3MmEzNjBiYTk1YTAyZTEzOWJlNTBkZGZiN2NmMGIiCisgICAgICAgICAgIjQyZmFlYWJiZmJiYWE4NmE0NDk3Njk5YzRmMmRmZDViMDg0MDZhZjdlMTQxNDQ0MjdjMjUzZWMwZWZhMjBlYWYiCisgICAgICAgICAgIjlhOGJlOGNkNDljZTFmMWJjNGU5M2U2MTljZjJhYThlZDRmYjM5YmM4NTkwZDBmN2I5NjQ4OGY3MzE3YWM5YWIiCisgICAgICAgICAgImY3YmVlNGUzYTBlNzE1IiwKKyAgICAgICAgICAiODMxNDZhOWU3ODI3MjJjMjhiMDE0Zjk4YjQyNjdiZGEyYWM5NTA0ZiIsCisgICAgICAgICAgIjBhMjMxNDI1MGNmNTJiNmU0ZTkwOGRlNWIzNTY0NmJjYWEyNDM2MWRhODE2MGZiMGY5MjU3NTkwYWIzYWNlNDIiCisgICAgICAgICAgImIwZGMzZTc3YWQyZGI3YzIwM2EyMGJkOTUyZmJiNTZiMTU2NzA0NmVjZmFhOTMzZDdiMTAwMGMzZGU5ZmYwNWIiCisgICAgICAgICAgIjdkOTg5YmE0NmZkNDNiYzRjMmQwYTM5ODZiN2ZmYTEzNDcxZDM3ZWI1YjQ3ZDY0NzA3YmQyOTBjZmQ2YTlmMzkiCisgICAgICAgICAgIjNhZDA4ZWMxZTNiZDcxYmI1NzkyNjE1MDM1Y2RhZjJkODkyOWFlZDNiZTA5ODM3OTM3N2U3NzdjZTc5YWFhNDciCisgICAgICAgICAgIjczIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNi4zIiwKKyAgICAgICAgICAiMGY2MTk1ZDA0YTZlNmZjN2UyYzk2MDBkYmY4NDBjMzllYThkNGQ2MjRmZDUzNTA3MDE2YjBlMjY4NThhNWUwYSIKKyAgICAgICAgICAiZWNkN2FkYTU0M2FlNWMwYWIzYTYyNTk5Y2JhMGE1NGU2YmY0NDZlMjYyZjk4OTk3OGY5ZGRmNWU5YTQxIiwKKyAgICAgICAgICAiYTg3YjhhZWQwN2Q3YjhlMmRhZjE0ZGRjYTRhYzY4YzRkMGFhYmZmOCIsCisgICAgICAgICAgIjA4NmRmNmI1MDAwOThjMTIwZjI0ZmY4NDIzZjcyN2Q5YzYxYTVjOTAwN2QzYjZhMzFjZTdjZjhmM2NiZWMxYTIiCisgICAgICAgICAgIjZiYjIwZTJiZDRhMDQ2NzkzMjk5ZTAzZTM3YTIxYjQwMTk0ZmIwNDVmOTBiMThiZjIwYTQ3OTkyY2NkNzk5Y2YiCisgICAgICAgICAgIjljMDU5YzI5OWMwNTI2ODU0OTU0YWFkZThhNmFkOWQ5N2VjOTFhMTE0NTM4M2Y0MjQ2OGIyMzFmNGQ3MmYyMzciCisgICAgICAgICAgIjA2ZDk4NTNjM2ZhNDNjZThhY2U4YmZlNzQ4NDk4N2ExZWM2YTE2YzhkYWY4MWY3YzhiZjQyNzc0NzA3YTlkZjQiCisgICAgICAgICAgIjU2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNi40IiwKKyAgICAgICAgICAiMzM3ZDI1ZmU5ODEwZWJjYTBkZTRkNDY1OGQzY2ViOGUwZmU0YzA2NmFiYTNiY2M0OGIxMDVkM2JmN2UwMjU3ZCIKKyAgICAgICAgICAiNDRmZWNlYTY1OTZmNGQwYzU5YTA4NDAyODMzNjc4ZjcwNjIwZjkxMzhkZmViN2RlZDkwNWU0YTZkNWYwNWM0NyIKKyAgICAgICAgICAiM2Q1NTkzNjY1MmUyYTVkZjQzYzBjZmRhN2JhY2FmMzA4N2Y0NTI0YjA2Y2Y0MjE1N2QwMTUzOTczOWY3ZmRkZSIKKyAgICAgICAgICAiYzlkNTgxMjVkZjMxYTMyZWFiMDZjMTliNzFmMWQ1YmYiLAorICAgICAgICAgICJhMzc5MzJmOGE3NDk0YTk0MmQ2Zjc2NzQzOGU3MjRkNmQwYzBlZjE4IiwKKyAgICAgICAgICAiMGI1YjExYWQ1NDk4NjNmZmE5YzUxYTE0YTExMDZjMmE3MmNjOGI2NDZlNWM3MjYyNTA5Nzg2MTA1YTk4NDc3NiIKKyAgICAgICAgICAiNTM0Y2E5YjU0YzFjYzY0YmYyZDVhNDRmZDdlOGE2OWRiNjk5ZDVlYTUyMDg3YTQ3NDhmZDJhYmMxYWZlZDFlNSIKKyAgICAgICAgICAiZDZmN2M4OTAyNTUzMGJkYWEyMjEzZDdlMDMwZmE1NWRmNmYzNGJjZjFjZTQ2ZDJlZGY0ZTNhZTRmM2IwMTg5MSIKKyAgICAgICAgICAiYTA2OGM5ZTNhNDRiYmM0MzEzM2VkYWQ2ZWNiOWYzNTQwMGM0MjUyYTU3NjJkNjU3NDRiOTljYjlmNGM1NTkzMiIKKyAgICAgICAgICAiOWYiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA2LjUiLAorICAgICAgICAgICI4NGVjNTAyYjA3MmU4Mjg3Nzg5ZDhmOTIzNTgyOWVhM2IxODdhZmQ0ZDRjNzg1NjExYmRhNWY5ZWIzY2I5NjcxIgorICAgICAgICAgICI3ZWZhNzAwNzIyN2YxYzA4Y2JjYjk3MmU2NjcyMzVlMGZiN2Q0MzFhNjU3MDMyNmQyZWNjZTM1YWRiMzczZGM3IgorICAgICAgICAgICI1M2IzYmU1ZjgyOWI4OTE3NTQ5MzE5M2ZhYjE2YmFkYjQxMzcxYjNhYWMwYWU2NzAwNzZmMjRiZWY0MjBjMTM1IgorICAgICAgICAgICJhZGQ3Y2VlOGQzNWZiYzk0NGQ3OWZhZmI5ZTMwN2ExM2IwZjU1NmNiNjU0YTA2Zjk3M2VkMjI2NzIzMzAxOTdlIgorICAgICAgICAgICJmNWE3NDhiZjgyNmE1ZGIyMzgzYTI1MzY0YjY4NmI5MzcyYmIyMzM5YWViMWFjOWU5ODg5MzI3ZDAxNmYxNjcwIgorICAgICAgICAgICI3NzZkYjA2MjAxYWRiZGNhZjhhNWUzYjc0ZTEwOGI3MyIsCisgICAgICAgICAgIjdiNzkwYzFkNjJmN2I4NGU5NGRmNmFmMjg5MTdjZjU3MTAxODExMGUiLAorICAgICAgICAgICIwMmQ3MWZhOWI1M2U0NjU0ZmVmYjdmMDgzODVjZjZiMGFlM2E4MTc5NDJlYmY2NmMzNWFjNjdmMGIwNjk5NTJhIgorICAgICAgICAgICIzY2U5YzdlMWYxYjAyZTQ4MGE5NTAwODM2ZGU1ZDY0Y2RiN2VjZGUwNDU0MmY3YTc5OTg4Nzg3ZTI0YzJiYTA1IgorICAgICAgICAgICJmNWZkNDgyYzAyM2VkNWMzMGUwNDgzOWRjNDRiZWQyYTNhM2E0ZmVlMDExMTNjODkxYTQ3ZDMyZWI4MDI1YzI4IgorICAgICAgICAgICJjYjA1MGI1Y2RiNTc2YzcwZmU3NmVmNTIzNDA1YzA4NDE3ZmFmMzUwYjAzN2E0M2MzNzkzMzlmY2IxOGQzYTM1IgorICAgICAgICAgICI2YiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDYuNiIsCisgICAgICAgICAgIjk5MDZkODlmOTdhOWZkZWRkM2NjZDgyNGRiNjg3MzI2ZjMwZjAwYWEyNWE3ZmNhMmFmY2IzYjBmODZjZDQxZTciCisgICAgICAgICAgIjNmMGU4ZmY3ZDJkODNmNTllMjhlZDMxYTVhMGQ1NTE1MjMzNzRkZTIyZTRjN2U4ZmY1NjhiMzg2ZWUzZGM0MTEiCisgICAgICAgICAgIjYzZjEwYmY2N2JiMDA2MjYxYzkwODJmOWFmOTBiZjFkOTA0OWE2YjlmYWU3MWM3Zjg0ZmJlNmU1NWYwMjc4OWQiCisgICAgICAgICAgImU3NzRmMjMwZjExNTAyNmE0YjRlOTZjNTViMDRhOTVkYTNhYWNiYjJjZWNlOGY4MTc2NGExZjFjOTk1MTU0MTEiCisgICAgICAgICAgIjA4N2NmN2QzNGFlZGVkMDkzMmMxODMiLAorICAgICAgICAgICJmYmJlMDU5MDI1YjY5Yjg5ZmIxNGFlMjI4OWU3YWFhZmU2MGMwZmNkIiwKKyAgICAgICAgICAiMGE0MGExNmUyZmUyYjM4ZDFkZjkwNTQ2MTY3Y2Y5NDY5YzllM2MzNjgxYTM0NDJiNGIyYzJmNTgxZGViMzg1YyIKKyAgICAgICAgICAiZTk5ZmM2MTg4YmIwMmE4NDFkNTZlNzZkMzAxODkxZTI0NTYwNTUwZmNjMmEyNmI1NWY0Y2NiMjZkODM3ZDM1MCIKKyAgICAgICAgICAiYTE1NGJjYWNhODM5MmQ5OGZhNjc5NTllOTcyN2I3OGNhZDAzMjY5ZjU2OTY4ZmM1NmI2OGJkNjc5OTI2ZDgzYyIKKyAgICAgICAgICAiYzljYjIxNTU1MDY0NWNjZGEzMWM3NjBmZjM1ODg4OTQzZDJkOGExZDM1MWU4MWU1ZDA3Yjg2MTgyZTc1MTA4MSIKKyAgICAgICAgICAiZWYiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDc6IEEgMTAzMC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxIgorICAgICAgIjhhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQiCisgICAgICAiNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZCIKKyAgICAgICIxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhIgorICAgICAgImIzIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjNiZWQ5OTkwNTJkOTU3YmMwNmQ2NTFlZWY2ZTNhOTgwOTRiMTYyMWJkMzhiNTQ0OWJkNmM0YWVhM2RlN2UwODQiCisgICAgICAiNjc5YTQ0ODRkZWQyNWJlMGYwODI2Y2YzMzc3ODI1NDE0YjE0ZDRkNjFkYjE0ZGU2MjZmYmI4MGU1ZjRmYWVjOSIKKyAgICAgICI1NmY5YTBhMmQyNGY5OTU3NjM4MGYwODRlYjYyZTQ2YTU3ZDU1NDI3OGI1MzU2MjYxOTNjZTAyMDYwNTc1ZWI2IgorICAgICAgIjZjNTc5OGQzNmY2YzVkNDBmYjAwZDgwOWI0MmE3MzEwMmMxYzc0ZWU5NWJkNzE0MjBmZmZlZjYzMThiNTJjMjkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDcuMSIsCisgICAgICAgICAgIjllYWQwZTAxOTQ1NjQwNjc0ZWI0MWNhZDQzNWUyMzc0ZWFlZmE4YWQ3MTk3ZDk3OTEzYzQ0OTU3ZDhkODNmNDAiCisgICAgICAgICAgImQ3NmVlNjBlMzliZjljMGY5ZWFmMzAyMTQyMWEwNzRkMWFkZTk2MmM2ZTlkM2RjM2JiMTc0ZmU0ZGZlNjUyYjAiCisgICAgICAgICAgIjkxMTU0OTViOGZkMjc5NDE3NDAyMGEwNjAyYjVjYTUxODQ4Y2ZjOTZjZTVlYjU3ZmMwYTJhZGMxZGRhMzZhN2MiCisgICAgICAgICAgImM0NTI2NDFhMTQ5MTFiMzdlNDViZmExMWRhYTVjN2VjZGI3NGY2ZDAxMDBkMWQzZTM5ZTc1MjgwMGUyMDMzOTciCisgICAgICAgICAgImRlMDIzMzA3N2I5YTg4ODU1NTM3ZmFlOTI3ZjkyNDM4MGQ3ODBmOThlMThkY2ZmMzljNWVhNzQxYjE3ZDZmZGQiCisgICAgICAgICAgIjE4ODViYzlkNTgxNDgyZDc3MWNlYjU2MmQ3OGE4YmY4OGYwYzc1YjExMzYzZTVlMzZjZDQ3OWNlYjA1NDVmOWQiCisgICAgICAgICAgImE4NDIwM2UwZTZlNTA4Mzc1Y2M5ZTg0NGI4OGI3YWM3YTBhMjAxZWEwZjFiZWU5YTJjNTc3OTIwY2EwMmMwMWIiCisgICAgICAgICAgIjlkODMyMGU5NzRhNTZmNGVmYjU3NjNiOTYyNTVhYmJmODAzN2JmMTgwMmNmMDE4ZjU2Mzc5NDkzZTU2OWE5IiwKKyAgICAgICAgICAiYjc4NjdhNTk5NThjYjU0MzI4Zjg3NzVlNjU0NmVjMDZkMjdlYWE1MCIsCisgICAgICAgICAgIjE4N2YzOTA3MjNjODkwMjU5MWYwMTU0YmFlNmQ0ZWNiZmZlMDY3ZjBlOGI3OTU0NzZlYTRmNGQ1MWNjYzgxMDUiCisgICAgICAgICAgIjIwYmIzY2E5YmNhN2QwYjFmMmVhOGExN2Q4NzNmYTI3NTcwYWNkNjQyZTM4MDg1NjFjYjllOTc1Y2NmZDgwYjIiCisgICAgICAgICAgIjNkYzU3NzFjZGIzMzA2YTVmMjMxNTlkYWNiZDNhYTJkYjkzZDQ2ZDc2NmUwOWVkMTVkOTAwYWQ4OTdhOGQyNzQiCisgICAgICAgICAgImRjMjZiNDdlOTk0YTI3ZTk3ZTIyNjhhNzY2NTMzYWU0YjVlNDJhMmZjYWY3NTVjMWM0Nzk0YjI5NGM2MDU1NTgiCisgICAgICAgICAgIjIzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNy4yIiwKKyAgICAgICAgICAiOGQ4MGQyZDA4ZGJkMTljMTU0ZGYzZjE0NjczYTE0YmQwMzczNTIzMWYyNGU4NmJmMTUzZDBlNjllNzRjYmZmNyIKKyAgICAgICAgICAiYjE4MzZlNjY0ZGU4M2Y2ODAxMjQzNzBmYzBmOTZjOWI2NWMwN2EzNjZiNjQ0YzRhYjMiLAorICAgICAgICAgICIwYzA5NTgyMjY2ZGYwODYzMTA4MjFiYTdlMThkZjY0ZGZlZTZkZTA5IiwKKyAgICAgICAgICAiMTBmZDg5NzY4YTYwYTY3Nzg4YWJiNTg1NmE3ODdjODU2MWYzZWRjZjlhODNlODk4ZjdkYzg3YWI4Y2NlNzk0MiIKKyAgICAgICAgICAiOWI0M2U1NjkwNjk0MWE4ODYxOTRmMTM3ZTU5MWZlN2MzMzk1NTUzNjFmYmJlMWYyNGZlYjJkNGJjZGI4MDYwMSIKKyAgICAgICAgICAiZjMwOTZiYzkxMzJkZWVhNjBhZTEzMDgyZjQ0ZjlhZDQxY2Q2Mjg5MzZhNGQ1MTE3NmU0MmZjNTljYjc2ZGI4MSIKKyAgICAgICAgICAiNWNlNWFiNGRiOTlhMTA0YWFmZWE2OGY1ZDMzMDMyOWViZjI1OGQ0ZWRlMTYwNjRiZDFkMDAzOTNkNWUxNTcwZSIKKyAgICAgICAgICAiYjgiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA3LjMiLAorICAgICAgICAgICI4MDg0MDVjZGZjMWE1OGI5YmIwMzk3YzcyMDcyMmE4MWZmZmI3NjI3OGYzMzU5MTdlZjljNDczODE0YjNlMDE2IgorICAgICAgICAgICJiYTI5NzNjZDI3NjVmOGYzZjgyZDZjYzM4YWE3Zjg1NTE4MjdmZThkMWUzODg0YjdlNjFjOTQ2ODNiOGY4MmYxIgorICAgICAgICAgICI4NDNiZGFlMjI1N2VlZWM5ODEyYWQ0YzJjZjI4M2MzNGUwYjBhZTBmZTNjYjk5MGNmODhmMmVmOSIsCisgICAgICAgICAgIjI4MDM5ZGNmZTEwNmQzYjgyOTY2MTEyNThjNGE1NjY1MWM5ZTkyZGQiLAorICAgICAgICAgICIyYjMxZmRlOTk4NTliOTc3YWEwOTU4NmQ4ZTI3NDY2MmIyNWEyYTY0MDY0MGI0NTdmNTk0MDUxY2IxZTdmN2E5IgorICAgICAgICAgICIxMTg2NTQ1NTI0MjkyNmNmODhmZTgwZGZhM2E3NWJhOTY4OTg0NGExMWU2MzRhODJiMDc1YWZiZDY5YzEyYTBkIgorICAgICAgICAgICJmOWQyNWY4NGFkNDk0NWRmM2RjOGZlOTBjM2NlZmRmMjZlOTVmMDUzNDMwNGI1YmRiYTIwZDNlNTY0MGEyZWJmIgorICAgICAgICAgICJiODk4YWFjMzVhZTQwZjI2ZmNlNTU2M2MyZjlmMjRmMzA0MmFmNzZmM2M3MDcyZDY4N2JiZmI5NTlhODg0NjBhIgorICAgICAgICAgICJmMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDcuNCIsCisgICAgICAgICAgImYzMzdiOWJhZDkzN2RlMjJhMWEwNTJkZmYxMTEzNGE4Y2UyNjk3NjIwMjk4MTkzOWI5MWUwNzE1YWU1ZTYwOTYiCisgICAgICAgICAgIjQ5ZGExYWRmY2VmM2Y0Y2NhNTliMjM4MzYwZTdkMWU0OTZjN2JmNGIyMDRiNWFjZmY5YmJkNjE2NmExZDg3YTMiCisgICAgICAgICAgIjZlZjIyNDczNzM3NTEwMzlmOGE4MDBiODM5OTgwN2IzYTg1ZjQ0ODkzNDk3YzBkMDVmYjcwMTdiODIyMjgxNTIiCisgICAgICAgICAgImRlNmYyNWU2MTE2ZGNjNzUwM2M3ODZjODc1YzI4ZjNhYTYwN2U5NGFiMGYxOTg2M2FiMWI1MDczNzcwYjBjZDUiCisgICAgICAgICAgImY1MzNhY2RlMzBjNmZiOTUzY2YzZGE2ODAyNjRlMzBmYzExYmZmOWExOWJmZmFiNDc3OWI2MjIzYzNmYjNmZTAiCisgICAgICAgICAgImY3MWFiYWRlNGViN2MwOWM0MWUyNGMyMmQyM2ZhMTQ4ZTZhMTczZmViNjM5ODRkMWJjNmVlM2EwMmQ5MTViNzUiCisgICAgICAgICAgIjJjZWFmOTJhMzAxNWVjZWIzOGNhNTg2YzY4MDFiMzdjMzRjZWZiMmNmZjI1ZWEyM2MwODY2MmRjYWIyNmE3YTkiCisgICAgICAgICAgIjNhMjg1ZDA1ZDMwNDRjIiwKKyAgICAgICAgICAiYTc3ODIxZWJiYmVmMjQ2MjhlNGUxMmUxZDBlYTk2ZGUzOThmN2IwZiIsCisgICAgICAgICAgIjMyYzdjYTM4ZmYyNjk0OWExNTAwMGM0YmEwNGIyYjEzYjM1YTM4MTBlNTY4MTg0ZDdlY2FiYWExNjZiN2ZmYWIiCisgICAgICAgICAgImRkZjJiNmNmNGJhMDcxMjQ5MjM3OTBmMmU1YjFhNWJlMDQwYWVhMzZmZTEzMmVjMTMwZTFmMTA1Njc5ODJkMTciCisgICAgICAgICAgImFjM2U4OWI4ZDI2YzMwOTQwMzRlNzYyZDJlMDMxMjY0ZjAxMTcwYmVlY2IzZDE0MzllMDU4NDZmMjU0NTgzNjciCisgICAgICAgICAgImE3ZDljMDIwNjA0NDQ2NzI2NzFlNjRlODc3ODY0NTU5Y2ExOWIyMDc0ZDU4OGEyODFiNTgwNGQyMzc3MmZiYmUiCisgICAgICAgICAgIjE5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgNy41IiwKKyAgICAgICAgICAiNDUwMTNjZWJhZmQ5NjBiMjU1NDc2YThlMjU5OGI5YWEzMmVmYmU2ZGMxZjM0ZjRhNDk4ZDhjZjVhMmI0NTQ4ZCIKKyAgICAgICAgICAiMDhjNTVkNWY5NWY3YmNjOTYxOTE2MzA1NmYyZDU4YjUyZmEwMzIiLAorICAgICAgICAgICI5ZDVhZDhlYjQ1MjEzNGI2NWRjM2E5OGI2YTczYjVmNzQxNjA5Y2Q2IiwKKyAgICAgICAgICAiMDdlYjY1MWQ3NWYxYjUyYmMyNjNiMmUxOTgzMzZlOTlmYmViYzRmMzMyMDQ5YTkyMmExMDgxNTYwN2VlMmQ5OCIKKyAgICAgICAgICAiOWRiM2E0NDk1YjdkY2NkMzhmNThhMjExZmI3ZTE5MzE3MWEzZDg5MTEzMjQzN2ViY2E0NGYzMThiMjgwNTA5ZSIKKyAgICAgICAgICAiNTJiNWZhOThmY2NlODIwNWQ5Njk3YzhlZTRiN2ZmNTlkNGM1OWM3OTAzOGExOTcwYmQyYTBkNDUxZWNkYzVlZiIKKyAgICAgICAgICAiMTFkOTk3OWM5ZDM1ZjhjNzBhNjE2MzcxNzYwNzg5MGQ1ODZhN2M2ZGMwMWM3OWY4NmE4ZjI4ZTg1MjM1ZjhjMiIKKyAgICAgICAgICAiZjEiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA3LjYiLAorICAgICAgICAgICIyMzU4MDk3MDg2Yzg5OTMyM2U3NWQ5YzkwZDBjMDlmMTJkOWQ1NGVkZmJkZjcwYTljMmViNWEwNGQ4ZjM2YjliIgorICAgICAgICAgICIyYmRmMmFhYmUwYTViZGExOTY4OTM3ZjlkNmViZDNiNmIyNTdlZmIzMTM2ZDQxMzFmOWFjYjU5Yjg1ZTI2MDJjIgorICAgICAgICAgICIyYTNmY2RjODM1NDk0YTFmNGU1ZWMxOGIyMjZjODAyMzJiMzZhNzVhNDVmZGYwOWE3ZWE5ZTk4ZWZiZGUxNDUwIgorICAgICAgICAgICJkMTE5NGJmMTJlMTVhNGM1ZjllYjVjMGJjZTUyNjllMGMzYjI4Y2ZhYjY1NWQ4MWE2MWEyMGI0YmUyZjU0NDU5IgorICAgICAgICAgICJiYjI1YTBkYjk0YzUyMjE4YmUxMDlhNzQyNmRlODMwMTQ0MjQ3ODlhYWE5MGU1MDU2ZTYzMmE2OTgxMTVlMjgyIgorICAgICAgICAgICJjMWE1NjQxMGYyNmMyMDcyZjE5MzQ4MWE5ZGNkODgwNTcyMDA1ZTY0ZjQwODJlY2YiLAorICAgICAgICAgICIzZjJlZmM1OTU4ODBhN2Q0N2ZjZjNjYmEwNDk4M2VhNTRjNGI3M2ZiIiwKKyAgICAgICAgICAiMThkYTNjZGNmZTc5YmZiNzdmZDljMzJmMzc3YWQzOTkxNDZmMGE4ZTgxMDYyMDIzMzI3MWE2ZTNlZDMyNDg5MCIKKyAgICAgICAgICAiM2Y1Y2RjOTJkYzc5YjU1ZDNlMTE2MTVhYTA1NmE3OTU4NTM3OTJhMzk5OGMzNDljYTVjNDU3ZThjYTdkMjlkNyIKKyAgICAgICAgICAiOTZhYTI0ZjgzNDkxNzA5YmVmY2ZiMTUxMGVhNTEzYzkyODI5YTNmMDBiMTA0ZjY1NTYzNGYzMjA3NTJlMTMwZSIKKyAgICAgICAgICAiYzBjY2Y2NzU0ZmY4OTNkYjMwMjkzMmJiMDI1ZWI2MGU4NzgyMjU5OGZjNjE5ZTBlOTgxNzM3YTlhNGM0MTUyZCIKKyAgICAgICAgICAiMzMiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDg6IEEgMTAzMS1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmIgorICAgICAgImJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTIiCisgICAgICAiZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYSIKKyAgICAgICJkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczIgorICAgICAgIjNmIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjZjNjZmZmU5ODk4MGMzOGZjZGVhYjUxNTk4OTg4MzYxNjVmNGI0YjgxN2M0ZjZhOGQ0ODZlZTRlYTkxMzBmZTkiCisgICAgICAiYjkwOTJiZDEzNmQxODRmOTVmNTA0YTYwN2VhYzU2NTg0NmQyZmRkNjU5N2E4OTY3YzczOTZlZjk1YTZlZWViYiIKKyAgICAgICI0NTc4YTY0Mzk2NmRjYTRkOGVlM2RlODQyZGU2MzI3OWM2MTgxNTljMWFiNTRhODk0MzdiNmE2MTIwZTQ5MzBhIgorICAgICAgImZiNTJhNGJhNmNlZDhhNDk0N2FjNjRiMzBhMzQ5N2NiZTcwMWMyZDYyNjZkNTE3MjE5YWQwZWM2ZDM0N2RiZTkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDguMSIsCisgICAgICAgICAgIjgxMzMyZjRiZTYyOTQ4NDE1ZWExZDg5OTc5MmVlYWNmNmM2ZTFkYjFkYThiZTEzYjVjZWE0MWRiMmZlZDQ2NzAiCisgICAgICAgICAgIjkyZTFmZjM5ODkxNGM3MTQyNTk3NzVmNTk1Zjg1NDdmNzM1NjkyYTU3NWU2OTIzYWY3OGYyMmM2OTk3ZGRiOTAiCisgICAgICAgICAgImZiNmY3MmQ3YmIwZGQ1NzQ0YTMxZGVjZDNkYzM2ODU4NDk4MzZlZDM0YWVjNTk2MzA0YWQxMTg0M2M0Zjg4NDgiCisgICAgICAgICAgIjlmMjA5NzM1ZjVmYjdmZGFmN2NlYzhhZGRjNTgxODE2OGY4ODBhY2JmNDkwZDUxMDA1YjdhOGU4NGU0M2U1NDIiCisgICAgICAgICAgIjg3OTc3NTcxZGQ5OWVlYTRiMTYxZWIyZGYxZjUxMDhmMTJhNDE0MmE4MzMyMmVkYjA1YTc1NDg3YTM0MzVjOWEiCisgICAgICAgICAgIjc4Y2U1M2VkOTNiYzU1MDg1N2Q3YTlmYiIsCisgICAgICAgICAgIjFkNjU0OTFkNzljODY0YjM3MzAwOWJlNmY2ZjI0NjdiYWM0Yzc4ZmEiLAorICAgICAgICAgICIwMjYyYWMyNTRiZmE3N2YzYzFhY2EyMmM1MTc5ZjhmMDQwNDIyYjNjNWJhZmQ0MGE4ZjIxY2YwZmE1YTY2N2NjIgorICAgICAgICAgICJkNTk5M2Q0MmRiYWZiNDA5YzUyMGUyNWZjZTJiMWVlMWU3MTY1NzdmMWVmYTE3ZjNkYTI4MDUyZjQwZjA0MTliIgorICAgICAgICAgICIyMzEwNmQ3ODQ1YWFmMDExMjViNjk4ZTdhNGRmZTkyZDM5NjdiYjAwYzRkMGQzNWJhMzU1MmFiOWE4YjNlZWYwIgorICAgICAgICAgICI3YzdmZWNkYmM1NDI0YWM0ZGIxZTIwY2IzN2QwYjI3NDQ3Njk5NDBlYTkwN2UxN2ZiYmNhNjczYjIwNTIyMzgwIgorICAgICAgICAgICJjNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDguMiIsCisgICAgICAgICAgImUyZjk2ZWFmMGUwNWU3YmEzMjZlY2NhMGJhN2ZkMmY3YzAyMzU2ZjNjZWRlOWQwZmFhYmY0ZmNjOGU2MGE5NzMiCisgICAgICAgICAgImU1NTk1ZmQ5ZWEwOCIsCisgICAgICAgICAgIjQzNWMwOThhYTk5MDllYjIzNzdmMTI0OGIwOTFiNjg5ODdmZjE4MzgiLAorICAgICAgICAgICIyNzA3YjlhZDUxMTVjNThjOTRlOTMyZThlYzBhMjgwZjU2MzM5ZTQ0YTFiNThkNGRkY2ZmMmYzMTJlNWYzNGRjIgorICAgICAgICAgICJmZTM5ZTg5YzZhOTRkY2VlODZkYmJkYWU1Yjc5YmE0ZTA4MTlhOWU3YmZkOWQ5ODJlN2VlNmM4NmVlNjgzOTZlIgorICAgICAgICAgICI4YjNhMTRjOWM4ZjM0YjE3OGViNzQxZjlkM2YxMjExMDliZjVjODE3MmZhZGEyZTc2OGY5ZWExNDMzMDMyYzAwIgorICAgICAgICAgICI0YThhYTA3ZWI5OTAwMDBhNDhkYzk0YzhiYWM4YWFiZTJiMDliMWFhNDZjMGEyYWEwZTEyZjYzZmJiYTc3NWJhIgorICAgICAgICAgICI3ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDguMyIsCisgICAgICAgICAgImUzNWM2ZWQ5OGY2NGE2ZDVhNjQ4ZmNhYjhhZGIxNjMzMWRiMzJlNWQxNWM3NGE0MGVkZjk0YzNkYzRhNGRlNzkiCisgICAgICAgICAgIjJkMTkwODg5ZjIwZjFlMjRlZDEyMDU0YTZiMjg3OThmY2I0MmQxYzU0ODc2OWI3MzRjOTYzNzMxNDIwOTJhZWQiCisgICAgICAgICAgIjI3NzYwM2Y0NzM4ZGY0ZGMxNDQ2NTg2ZDBlYzY0ZGE0ZmI2MDUzNmRiMmFlMTdmYzdlM2MwNGJiZmJiYmQ5MDciCisgICAgICAgICAgImJmMTE3YzA4NjM2ZmExNmY5NWY1MWE2MjE2OTM0ZDNlMzRmODUwMzBmMTdiYmJjNWJhNjkxNDQwNThhZmYwODEiCisgICAgICAgICAgImUwYjE5Y2YwM2MxNzE5NWM1ZTg4OGJhNThmNmZlMGEwMmU1YzNiZGE5NzE5YTciLAorICAgICAgICAgICJjNmViYmU3NmRmMGM0YWVhMzJjNDc0MTc1YjJmMTM2ODYyZDA0NTI5IiwKKyAgICAgICAgICAiMmFkMjA1MDlkNzhjZjI2ZDFiNmM0MDYxNDYwODZlNGIwYzkxYTkxYzJiZDE2NGM4N2I5NjZiOGZhYTQyYWEwYyIKKyAgICAgICAgICAiYTQ0NjAyMjMyM2JhNGIxYTFiODk3MDZkN2Y0YzNiZTU3ZDdiNjk3MDJkMTY4YWI1OTU1ZWUyOTAzNTZiOGM0YSIKKyAgICAgICAgICAiMjllZDQ2N2Q1NDdlYzIzY2JhZGYyODZjY2I1ODYzYzY2NzlkYTQ2N2ZjOTMyNGExNTFjN2VjNTVhYWM2ZGI0MCIKKyAgICAgICAgICAiODRmODI3MjY4MjVjZmUxYWE0MjFiYzY0MDQ5ZmI0MmYyMzE0OGY5YzI1YjJkYzMwMDQzN2MzOGQ0MjhhYTc1ZiIKKyAgICAgICAgICAiOTYiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA4LjQiLAorICAgICAgICAgICJkYmM1Zjc1MGE3YTE0YmUyYjkzZTgzOGQxOGQxNGE4Njk1ZTUyZThhZGQ5YzBhYzczM2I4ZjU2ZDI3NDdlNTI5IgorICAgICAgICAgICJhMGNjYTUzMmRkNDliOTAyYWVmZWQ1MTQ0NDdmOWU4MWQxNjE5NWMyODUzODY4Y2I5YjMwZjdkMGQ0OTVjNjlkIgorICAgICAgICAgICIwMWI1YzVkNTBiMjcwNDVkYjM4NjZjMjMyNGE0NGExMTBiMTcxNzc0NmRlNDU3ZDFjOGM0NWMzY2QyYTkyOTcwIgorICAgICAgICAgICJjM2Q1OTYzMjA1NWQ0Yzk4YTQxZDZlOTllMmEzZGRkNWY3Zjk5NzlhYjNjZDE4ZjM3NTA1ZDI1MTQxZGUyYTFiIgorICAgICAgICAgICJmZjE3YjNhN2RjZTk0MTllY2MzODVjZjExZDcyODQwZjE5OTUzZmQwNTA5MjUxZjZjYWZkZTI4OTNkMGU3NWM3IgorICAgICAgICAgICI4MWJhN2E1MDEyY2E0MDFhNGZhOTllMDRiM2MzMjQ5ZjkyNmQ1YWZlODJjYzg3ZGFiMjJjM2MxYjEwNWRlNDhlIgorICAgICAgICAgICIzNGFjZTljOTEyNGU1OTU5N2FjN2ViZjgiLAorICAgICAgICAgICIwMjFmZGNjNmViYjVlMTliMWNiMTZlOWM2N2YyNzY4MTY1N2ZlMjBhIiwKKyAgICAgICAgICAiMWUyNGU2ZTU4NjI4ZTUxNzUwNDRhOWViNmQ4MzdkNDhhZjEyNjBiMDUyMGU4NzMyN2RlNzg5N2VlNGQ1YjlmMCIKKyAgICAgICAgICAiZGYwYmUzZTA5ZWQ0ZGVhOGMxNDU0ZmYzNDIzYmIwOGUxNzkzMjQ1YTlkZjhiZjZhYjM5NjhjOGVkZGMzYjUzMiIKKyAgICAgICAgICAiODU3MWM3N2YwOTFjYzU3ODU3NjkxMmRmZWJkMTY0YjlkZTU0NTRmZTBiZTFjMWY2Mzg1YjMyODM2MGNlNjdlYyIKKyAgICAgICAgICAiN2EwNWY2ZTMwZWI0NWMxN2M0OGFjNzAwNDFkMmNhYjY3ZjBhMmFlN2FhZmRjYzhkMjQ1ZWEzNDQyYTYzMDBjYyIKKyAgICAgICAgICAiYzciCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA4LjUiLAorICAgICAgICAgICIwNGRjMjUxYmU3MmU4OGU1NzIzNDg1YjYzODNhNjM3ZTJmZWZlMDc2NjBjNTE5YTU2MGI4YmMxOGJkZWRiODZlIgorICAgICAgICAgICJhZTIzNjRlYTUzYmE5ZGNhNmViM2QyZTdkNmI4MDZhZjQyYjNlODdmMjkxYjRhODg4MWQ1YmY1NzJjYzlhODVlIgorICAgICAgICAgICIxOWM4NmFjYjI4ZjA5OGY5ZGEwMzgzYzU2NmQzYzBmNThjZmQ4ZjM5NWRjZjYwMmU1Y2Q0MGU4YzcxODNmNzE0IgorICAgICAgICAgICI5OTZlMjI5N2VmIiwKKyAgICAgICAgICAiYzU1OGQ3MTY3Y2JiNDUwOGFkYTA0Mjk3MWU3MWIxMzc3ZWVhNDI2OSIsCisgICAgICAgICAgIjMzMzQxYmEzNTc2YTEzMGE1MGUyYTVjZjg2NzkyMjQzODhkNTY5M2Y1YWNjYzIzNWFjOTVhZGQ2OGU1ZWIxZWUiCisgICAgICAgICAgImMzMTY2NmQwY2E3YTFjZGE2ZjcwYTFhYTc2MmMwNTc1MmE1MTk1MGNkYjhhZjNjNTM3OWYxOGNmZTZiNWJjNTUiCisgICAgICAgICAgImE0NjQ4MjI2YTE1ZTkxMmVmMTlhZDc3YWRlZWE5MTFkNjdjZmVmZDY5YmE0M2ZhNDExOTEzNWZmNjQyMTE3YmEiCisgICAgICAgICAgIjk4NWE3ZTAxMDAzMjVlOTUxOWYxY2E2YTkyMTZiZGEwNTViNTc4NTAxNTI5MTEyNWU5MGRjZDA3YTJjYTk2NzMiCisgICAgICAgICAgImVlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgOC42IiwKKyAgICAgICAgICAiMGVhMzdkZjlhNmZlYTRhOGI2MTAzNzNjMjRjZjM5MGMyMGZhNmUyMTM1YzQwMGM4YTM0ZjVjMTgzYTdlOGVhNCIKKyAgICAgICAgICAiYzlhZTA5MGVkMzE3NTlmNDJkYzc3NzE5Y2NhNDAwZWNkY2M1MTdhY2ZjN2FjNjkwMjY3NWIyZWYzMGM1MDk2NiIKKyAgICAgICAgICAiNWYzMzIxNDgyZmM2OWE5ZmI1NzBkMTVlMDFjODQ1ZDBkOGU1MGQyYTI0Y2JmMWNmMGU3MTQ5NzVhNWRiN2IxOCIKKyAgICAgICAgICAiZDllOWU5Y2I5MWI1Y2IxNjg2OTA2MGVkMThiN2I1NjI0NTUwM2YwY2FmOTAzNTJiOGRlODFjYjVhMWQ5YzYzMyIKKyAgICAgICAgICAiNjA5MmYwY2QiLAorICAgICAgICAgICI3NmZkNGU2NGZkYzk4ZWI5MjdhMDQwM2UzNWEwODRlNzZiYTlmOTJhIiwKKyAgICAgICAgICAiMWVkMWQ4NDhmYjFlZGI0NDEyOWJkOWIzNTQ3OTVhZjk3YTA2OWE3YTAwZDAxNTEwNDg1OTNlMGM3MmMzNTE3ZiIKKyAgICAgICAgICAiZjlmZjJhNDFkMGNiNWEwYWM4NjBkNzM2YTE5OTcwNGY3Y2I2YTUzOTg2YTg4YmJkOGFiY2MwMDc2YTJjZTg0NyIKKyAgICAgICAgICAiODgwMDMxNTI1ZDQ0OWRhMmFjNzgzNTYzNzRjNTM2ZTM0M2ZhYTdjYmE0MmE1YWFhNjUwNjA4Nzc5MWMwNmE4ZSIKKyAgICAgICAgICAiOTg5MzM1YWVkMTliZmFiMmQ1ZTY3ZTI3ZmIwYzI4NzVhZjg5NmMyMWI2ZThlNzMwOWQwNGU0ZjY3MjdlNjk0NiIKKyAgICAgICAgICAiM2UiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJFeGFtcGxlIDk6IEEgMTUzNi1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViIgorICAgICAgIjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgiCisgICAgICAiMzUyNjkxYzUyNGY2ZGQ4ZTZjMjlkMjI0Y2YyNDY5NzNhZWM4NmM1YmY2YjE0MDFhODUwZDFiOWFkMWJiOGNiYyIKKyAgICAgICJlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0IgorICAgICAgIjgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDIiCisgICAgICAiNzM1N2UxZDMwZTQ2MzEzOTgxNWM2ZmQ0ZmQ1YWM1YjgxNzJhNDUyMzBlY2I2MzE4YTA0ZjE0NTVkODRlNWE4YiIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICI2YTdmZDg0ZmI4NWZhZDA3M2IzNDQwNmRiNzRmOGQ2MWE2YWJjMTIxOTZhOTYxZGQ3OTU2NWU5ZGE2ZTUxODdiIgorICAgICAgImNlMmQ5ODAyNTBmNzM1OTU3NTM1OTI3MGQ5MTU5MGJiMGU0MjdjNzE0NjBiNTVkNTE0MTBiMTkxYmNmMzA5ZmUiCisgICAgICAiYTEzMWE5MmM4ZTcwMjczOGZhNzE5ZjFlMDA0MWY1MmU0MGU5MWYyMjlmNGQ5NmExZTZmMTcyZTE1NTk2YjQ1MSIKKyAgICAgICIwYTZkYWVjMjYxMDVmMmJlYmM1MzMxNmI4N2JkZjIxMzExNjY2MDcwZThkZmVlNjlkNTJjNzFhOTc2Y2FhZTc5IgorICAgICAgImM3MmI2OGQyODU4MGRjNjg2ZDlmNTEyOWQyMjVmODJiM2Q2MTU1MTNhODgyYjNkYjkxNDE2YjQ4Y2UwODg4ODIiCisgICAgICAiMTNlMzdlZWI5YWY4MDBkODFjYWIzMjhjZTQyMDY4OTkwM2MwMGM3YjVmZDMxYjc1NTAzYTZkNDE5Njg0ZDYyOSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgOS4xIiwKKyAgICAgICAgICAiYTg4ZTI2NTg1NWU5ZDdjYTM2YzY4Nzk1ZjBiMzFiNTkxY2Q2NTg3YzcxZDA2MGEwYjNmN2YzZWFlZjQzNzk1OSIKKyAgICAgICAgICAiMjIwMjhiYzJiNmFkNDY3Y2ZjMmQ3ZjY1OWM1Mzg1YWE3MGJhMzY3MmNkZGU0Y2ZlNDk3MGNjNzkwNDYwMWIyNyIKKyAgICAgICAgICAiODg3MmJmNTEzMjFjNGE5NzJmM2M5NTU3MGYzNDQ1ZDRmNTc5ODBlMGYyMGRmNTQ4NDZlNmE1MmM2NjhmMTI4OCIKKyAgICAgICAgICAiYzAzZjk1MDA2ZWEzMmY1NjJkNDBkNTJhZjlmZWIzMmYwZmEwNmRiNjViNTg4YTIzN2IzNGU1OTJkNTVjZjk3OSIKKyAgICAgICAgICAiZjkwM2E2NDJlZjY0ZDJlZDU0MmFhOGM3N2RjMWRkNzYyZjQ1YTU5MzAzZWQ3NWU1NDFjYTI3MWUyYjYwY2E3MCIKKyAgICAgICAgICAiOWU0NGZhMDY2MTEzMWU4ZDVkNDE2M2ZkOGQzOTg1NjZjZTI2ZGU4NzMwZTcyZjljY2E3Mzc2NDFjMjQ0MTU5NCIKKyAgICAgICAgICAiMjA2MzcwMjhkZjBhMTgwNzlkNjIwOGVhOGI0NzExYTJjNzUwZjUiLAorICAgICAgICAgICJjMGE0MjUzMTNkZjhkNzU2NGJkMjQzNGQzMTE1MjNkNTI1N2VlZDgwIiwKKyAgICAgICAgICAiNTg2MTA3MjI2YzNjZTAxM2E3YzhmMDRkMWE2YTI5NTliYjRiOGUyMDViYTQzYTI3YjUwZjEyNDExMWJjMzVlZiIKKyAgICAgICAgICAiNTg5YjAzOWY1OTMyMTg3Y2I2OTZkN2Q5YTMyYzBjMzgzMDBhNWNkZGE0ODM0YjYyZDJlYjI0MGFmMzNmNzlkMSIKKyAgICAgICAgICAiM2RmYmYwOTViZjU5OWUwZDk2ODY5NDhjMTk2NDc0N2I2N2U4OWM5YWJhNWNkODUwMTYyMzZmNTY2Y2M1ODAyYyIKKyAgICAgICAgICAiYjEzZWFkNTFiYzdjYTZiZWYzYjk0ZGNiZGJiMWQ1NzA0Njk3NzFkZjBlMDBiMWE4YTA2Nzc3NDcyZDIzMTYyNyIKKyAgICAgICAgICAiOWVkYWU4NjQ3NDY2OGQ0ZTFlZmZmOTVmMWRlNjFjNjAyMGRhMzJhZTkyYmJmMTY1MjBmZWYzY2Y0ZDg4ZjYxMSIKKyAgICAgICAgICAiMjFmMjRiYmQ5ZmU5MWI1OWNhZjEyMzViMmE5M2ZmODFmYzQwM2FkZGY0ZWJkZWE4NDkzNGE5Y2RhZjhlMWE5ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDkuMiIsCisgICAgICAgICAgImM4YzljNmFmMDRhY2RhNDE0ZDIyN2VmMjNlMDgyMGMzNzMyYzUwMGRjODcyNzVlOTViMGQwOTU0MTM5OTNjMjYiCisgICAgICAgICAgIjU4YmMxZDk4ODU4MWJhODc5YzJkMjAxZjE0Y2I4OGNlZDE1M2EwMTk2OWE3YmYwYTdiZTc5Yzg0YzE0ODZiYzEiCisgICAgICAgICAgIjJiM2ZhNmM1OTg3MWI2ODI3YzhjZTI1M2NhNWZlZmE4YThjNjkwYmYzMjZlOGUzN2NkYjk2ZDkwYTgyZWJhYjYiCisgICAgICAgICAgIjlmODYzNTBlMTgyMmU4YmQ1MzZhMmUiLAorICAgICAgICAgICJiMzA3YzQzYjQ4NTBhOGRhYzJmMTVmMzJlMzc4MzllZjhjNWMwZTkxIiwKKyAgICAgICAgICAiODBiNmQ2NDMyNTUyMDlmMGE0NTY3NjM4OTdhYzllZDI1OWQ0NTliNDljMjg4N2U1ODgyZWNiNDQzNGNmZDY2ZCIKKyAgICAgICAgICAiZDdlMTY5OTM3NTM4MWU1MWNkN2Y1NTRmMmMyNzE3MDRiMzk5ZDQyYjRiZTI1NDBhMGVjYTYxOTUxZjU1MjY3ZiIKKyAgICAgICAgICAiN2MyODc4YzEyMjg0MmRhZGIyOGIwMWJkNWY4YzAyNWY3ZTIyODQxOGE2NzNjMDNkNmJjMGM3MzZkMGEyOTU0NiIKKyAgICAgICAgICAiYmQ2N2Y3ODZkOWQ2OTJjY2VhNzc4ZDcxZDk4YzIwNjNiN2E3MTA5MjE4N2E0ZDM1YWYxMDgxMTFkODNlODNlYSIKKyAgICAgICAgICAiZTQ2YzQ2YWEzNDI3N2UwNjA0NDU4OTkwMzc4OGYxZDVlN2NlZTI1ZmI0ODVlOTI5NDkxMTg4MTRkNmYyYzNlZSIKKyAgICAgICAgICAiMzYxNDg5MDE2ZjMyN2ZiNWJjNTE3ZWI1MDQ3MGJmZmExYWZhNWY0Y2U5YWEwY2U1YjhlZTE5YmY1NTAxYjk1OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDkuMyIsCisgICAgICAgICAgIjBhZmFkNDJjY2Q0ZmM2MDY1NGE1NTAwMmQyMjhmNTJhNGE1ZmUwM2I4YmJiMDhjYTgyZGFjYTU1OGI0NGRiZTEiCisgICAgICAgICAgIjI2NmU1MGMwZTc0NWEzNmQ5ZDI5MDRlMzQwOGFiY2QxZmQ1Njk5OTQwNjNmNGE3NWNjNzJmMmZlZTJhMGNkODkiCisgICAgICAgICAgIjNhNDNhZjFjNWI4YjQ4N2RmMGE3MTYxMDAyNGU0ZjZkZGY5ZjI4YWQwODEzYzFhYWI5MWJjYjNjOTA2NGQ1ZmYiCisgICAgICAgICAgIjc0MmRlZmZlYTY1NzA5NDEzOTM2OWU1ZWE2ZjRhOTYzMTlhNWNjODIyNDE0NWI1NDUwNjI3NThmZWZkMWZlMzQiCisgICAgICAgICAgIjA5YWUxNjkyNTljNmNkZmQ2YjVmMjk1OGUzMTRmYWVjYmU2OWQyY2FjZTU4ZWU1NTE3OWFiOWIzZTZkMWVjYzEiCisgICAgICAgICAgIjRhNTU3YzVmZWJlOTg4NTk1MjY0ZmM1ZGExYzU3MTQ2MmVjYTc5OGExOGExYTQ5NDBjZGFiNGEzZTkyMDA5Y2MiCisgICAgICAgICAgImQ0MmUxZTk0N2IxMzE0ZTMyMjM4YTJkZWNlN2QyM2E4OWI1YjMwYzc1MWZkMGE0YTQzMGQyYzU0ODU5NCIsCisgICAgICAgICAgIjlhMmIwMDdlODA5NzhiYmIxOTJjMzU0ZWI3ZGE5YWVkZmM3NGRiZjUiLAorICAgICAgICAgICI0ODQ0MDhmMzg5OGNkNWY1MzQ4M2Y4MDgxOWVmYmYyNzA4YzM0ZDI3YThiMmE2ZmFlOGIzMjJmOTI0MDIzN2Y5IgorICAgICAgICAgICI4MTgxN2FjYTE4NDZmMTA4NGRhYTZkN2MwNzk1ZjZlNWJmMWFmNTljMzhlMTg1ODQzN2NlMWY3ZWM0MTliOThjIgorICAgICAgICAgICI4NzM2YWRmNmRkOWEwMGIxODA2ZDJiZDNhZDBhNzM3NzVlMDVmNTJkZmVmM2E1OWFiNGIwODE0M2YwZGYwNWNkIgorICAgICAgICAgICIxYWQ5ZDA0YmVjZWNhNmRhYTRhMjEyOTgwM2UyMDBjYmM3Nzc4N2NhZjRjMWQwNjYzYTZjNTk4N2I2MDU5NTIwIgorICAgICAgICAgICIxOTc4MmNhZjJlYzE0MjZkNjhmYjk0ZWQxZDRiZTgxNmE3ZWQwODFiNzdlNmFiMzMwYjNmZmMwNzM4MjBmZWNkIgorICAgICAgICAgICJlMzcyN2ZjYmUyOTVlZTYxYTA1MGEzNDM2NTg2MzdjM2ZkNjU5Y2ZiNjM3MzZkZTMyZDlmOTBkM2MyZjYzZWNhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgOS40IiwKKyAgICAgICAgICAiMWRmZDQzYjQ2YzkzZGI4MjYyOWJkYWUyYmQwYTEyYjg4MmVhMDRjM2I0NjVmNWNmOTMwMjNmMDEwNTk2MjZkYiIKKyAgICAgICAgICAiYmU5OWYyNmJiMWJlOTQ5ZGRkZDE2ZGM3ZjNkZWJiMTlhMTk0NjI3ZjBiMjI0NDM0ZGY3ZDg3MDBlOWU5OGIwNiIKKyAgICAgICAgICAiZTM2MGMxMmZkYmUzZDE5ZjUxYzk2ODRlYjkwODllY2JiMGEyZjA0NTAzOTlkM2Y1OWVhYzcyOTQwODVkMDQ0ZiIKKyAgICAgICAgICAiNTM5M2M2Y2U3Mzc0MjNkOGI4NmM0MTUzNzBkMzg5ZTMwYjlmMGEzYzAyZDI1ZDAwODJlOGFkNmYzZjFlZjI0YSIKKyAgICAgICAgICAiNDVjM2NmODJiMzgzMzY3MDYzYTRkNDYxM2U0MjY0ZjAxYjJkYWMyZTVhYTQyMDQzZjhmYjVmNjlmYTg3MWQxNCIKKyAgICAgICAgICAiZmIyNzNlNzY3YTUzMWM0MGYwMmYzNDNiYzJmYjQ1YTBjN2UwZjZiZTI1NjE5MjNhNzcyMTFkNjZhNmUyZGJiNCIKKyAgICAgICAgICAiM2MzNjYzNTBiZWFlMjJkYTNhYzJjMWY1MDc3MDk2ZmNiNWM0YmYyNTVmNzU3NDM1MWFlMGIxZTFmMDM2MzI4MSIKKyAgICAgICAgICAiN2MwODU2ZDRhOGJhOTdhZmJkYzhiODU4NTU0MDJiYzU2OTI2ZmNlYzIwOWY5ZWE4IiwKKyAgICAgICAgICAiNzBmMzgyYmRkZjRkNWQyZGQ4OGIzYmM3YjczMDhiZTYzMmI4NDA0NSIsCisgICAgICAgICAgIjg0ZWJlYjQ4MWJlNTk4NDViNDY0NjhiYWZiNDcxYzAxMTJlMDJiMjM1ZDg0YjVkOTExY2JkMTkyNmVlNTA3NGEiCisgICAgICAgICAgImUwNDI0NDk1Y2IyMGU4MjMwOGI4ZWJiNjVmNDE5YTAzZmI0MGU3MmI3ODk4MWQ4OGFhZDE0MzA1MzY4NTE3MmMiCisgICAgICAgICAgIjk3YjI5YzhiN2JmMGFlNzNiNWIyMjYzYzQwM2RhMGVkMmY4MGZmNzQ1MGFmNzgyOGViOGI4NmYwMDI4YmQyYTgiCisgICAgICAgICAgImIxNzZhNGQyMjhjY2NlYTE4Mzk0ZjIzOGIwOWZmNzU4Y2MwMGJjMDQzMDExNTIzNTU3NDJmMjgyYjU0ZTY2M2EiCisgICAgICAgICAgIjkxOWU3MDlkOGRhMjRhZGU1NTAwYTdiOWFhNTAyMjZlMGNhNTI5MjNlNmMyZDg2MGVjNTBmZjQ4MGZhNTc0NzciCisgICAgICAgICAgImU4MmIwNTY1ZjQzNzlmNzljNzcyZDVjMmRhODBhZjlmYmYzMjVlY2U2ZmMyMGIwMDk2MTYxNGJlZTg5YTE4M2UiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSA5LjUiLAorICAgICAgICAgICIxYmRjNmU3Yzk4ZmI4Y2Y1NGU5YjA5N2I2NmE4MzFlOWNmZTUyZDlkNDg4ODQ0OGVlNGIwOTc4MDkzYmExZDdkIgorICAgICAgICAgICI3M2FlNzhiM2E2MmJhNGFkOTVjZDI4OWNjYjllMDA1MjI2YmIzZDE3OGJjY2FhODIxZmIwNDRhNGUyMWVlOTc2IgorICAgICAgICAgICI5NmMxNGQwNjc4Yzk0YzJkYWU5M2IwYWQ3MzkyMjIxODU1M2RhYTdlNDRlYmU1NzcyNWE3YTQ1Y2M3MmI5YjIxIgorICAgICAgICAgICIzOGE2YjE3YzhkYjQxMWNlODI3OWVlMTI0MWFmZjBhOGJlYzZmNzdmODdlZGIwYzY5Y2IyNzIzNmUzNDM1YTgwIgorICAgICAgICAgICIwYjE5MmU0ZjExZTUxOWUzZmUzMGZjMzBlYWNjY2E0ZmJiNDE3NjkwMjliZjcwOGU4MTdhOWU2ODM4MDViZTY3IgorICAgICAgICAgICJmYTEwMDk4NDY4M2I3NDgzOGUzYmNmZmE3OTM2NmVlZDFkNDgxYzc2NzI5MTE4ODM4ZjMxYmE4YTA0OGE5M2MxIgorICAgICAgICAgICJiZTQ0MjQ1OThlOGRmNjMyOGI3YTc3ODgwYTNmOWM3ZTJlOGRmY2E4ZWI1YTI2ZmI4NmJkYzU1NmQ0MmJiZTAxIgorICAgICAgICAgICJkOWZhNmVkODA2NDY0OTFjOTM0MSIsCisgICAgICAgICAgImQ2ODkyNTdhODZlZmZhNjgyMTJjNWUwYzYxOWVjYTI5NWZiOTFiNjciLAorICAgICAgICAgICI4MjEwMmRmOGNiOTFlNzE3OTkxOWEwNGQyNmQzMzVkNjRmYmMyZjg3MmM0NDgzMzk0MzI0MWRlODQ1NDgxMDI3IgorICAgICAgICAgICI0Y2RmM2RiNWY0MmQ0MjNkYjE1MmFmNzEzNWY3MDE0MjBlMzliNDk0YTY3Y2JmZDE5ZjkxMTlkYTIzM2EyM2RhIgorICAgICAgICAgICI1YzY0MzliNWJhMGQyYmMzNzNlZWUzNTA3MDAxMzc4ZDRhNDA3Mzg1NmI3ZmUyYWJhMGI1ZWU5M2IyN2Y0YWZlIgorICAgICAgICAgICJjN2Q0ZDEyMDkyMWM4M2Y2MDY3NjViMDJjMTllNGQ2YTFhM2I5NWZhNGM0MjI5NTFiZTRmNTIxMzEwNzdlZjE3IgorICAgICAgICAgICIxNzk3MjljZGRmYmRiNTY5NTBkYmFjZWVmZTc4Y2IxNjY0MGEwOTllYTU2ZDI0Mzg5ZWVmMTBmOGZlY2IzMWJhIgorICAgICAgICAgICIzZWEzYjIyN2MwYTg2Njk4YmI4OWUzZTkzNjM5MDViZjIyNzc3YjJhM2FhNTIxYjY1YjRjZWY3NmQ4M2JkZTRjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgOS42IiwKKyAgICAgICAgICAiODhjN2E5ZjEzNjA0MDFkOTBlNTNiMTAxYjYxYzUzMjVjM2M3NWRiMWI0MTFmYmViOGU4MzBiNzVlOTZiNTY2NyIKKyAgICAgICAgICAiMGFkMjQ1NDA0ZTE2NzkzNTQ0ZWUzNTRiYzYxM2E5MGNjOTg0ODcxNWE3M2RiNTg5M2U3ZjZkMjc5ODE1YzBjMSIKKyAgICAgICAgICAiZGU4M2VmOGUyOTU2ZTNhNTZlZDI2YTg4OGQ3YTljZGNkMDQyZjRiMTZiN2ZhNTFlZjFhMDU3MzY2MmQxNmEzMCIKKyAgICAgICAgICAiMmQwZWM1YjI4NWQyZTAzYWQ5NjUyOWM4N2IzZDM3NGRiMzcyZDk1YjI0NDNkMDYxYjZiMWEzNTBiYTg3ODA3ZSIKKyAgICAgICAgICAiZDA4M2FmZDFlYjA1YzNmNTJmNGViYTVlZDIyMjc3MTRmZGI1MGI5ZDlkOWRkNjgxNGY2MmY2MjcyZmNkNWNkYiIKKyAgICAgICAgICAiY2U3YTllZjc5NyIsCisgICAgICAgICAgImMyNWYxM2JmNjdkMDgxNjcxYTA0ODFhMWYxODIwZDYxM2JiYTIyNzYiLAorICAgICAgICAgICJhN2ZkYjBkMjU5MTY1Y2EyYzg4ZDAwYmJmMTAyOGE4NjdkMzM3Njk5ZDA2MTE5M2IxN2E5NjQ4ZTE0Y2NiYmFhIgorICAgICAgICAgICJkZWFjYWFjZGVjODE1ZTc1NzEyOTRlYmI4YTExN2FmMjA1ZmEwNzhiNDdiMDcxMmMxOTllM2FkMDUxMzVjNTA0IgorICAgICAgICAgICJjMjRiODE3MDUxMTU3NDA4MDI0ODc5OTJmZmQ1MTFkNGFmYzZiODU0NDkxZWIzZjBkZDUyMzEzOTU0MmZmMTVjIgorICAgICAgICAgICIzMTAxZWU4NTU0MzUxN2M2YTNjNzk0MTdjNjdlMmRkOWFhNzQxZTlhMjliMDZkY2I1OTNjMjMzNmIzNjcwYWUzIgorICAgICAgICAgICJhZmJhYzdjM2U3NmUyMTU0NzNlODY2ZTMzOGNhMjQ0ZGUwMGI2MjYyNGQ2Yjk0MjY4MjJjZWFlOWY4Y2M0NjA4IgorICAgICAgICAgICI5NWY0MTI1MDA3M2ZkNDVjNWExZTdiNDI1YzIwNGE0MjNhNjk5MTU5ZjY5MDNlNzEwYjM3YTdiYjJiYzgwNDlmIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiRXhhbXBsZSAxMDogQSAyMDQ4LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTUiCisgICAgICAiN2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZCIKKyAgICAgICJjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlIgorICAgICAgIjRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEiCisgICAgICAiMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYSIKKyAgICAgICI0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3IgorICAgICAgIjBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAiCisgICAgICAiMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIyZDJmZjU2N2IzZmU3NGUwNjE5MWI3ZmRlZDZkZTExMjI5MGM2NzA2OTI0MzBkNTk2OTE4NDA0N2RhMjM0Yzk2IgorICAgICAgIjkzZGVlZDE2NzNlZDQyOTUzOWM5NjlkMzcyYzA0ZDZiNDdlMGY1YjhjZWUwODQzZTVjMjI4MzVkYmQzYjA1YTAiCisgICAgICAiOTk3OTg0YWU2MDU4YjExYmM0OTA3Y2JmNjdlZDg0ZmE5YWUyNTJkZmIwZDBjZDQ5ZTYxOGUzNWRmZGZlNTliYyIKKyAgICAgICJhM2RkZDY2YzMzY2ViYmM3N2FkNDQxYWE2OTVlMTNlMzI0YjUxOGYwMWM2MGY1YTg1Yzk5NGFkMTc5ZjJhNmI1IgorICAgICAgImZiZTkzNDAyYjExNzY3YmUwMWJmMDczNDQ0ZDZiYTFkZDJiY2E1YmQwNzRkNGE1ZmFlMzUzMWFkMTMwM2Q4NGIiCisgICAgICAiMzBkODk3MzE4Y2JiYmEwNGUwM2MyZTY2ZGU2ZDkxZjgyZjk2ZWExZDRiYjU0YTVhYWUxMDJkNTk0NjU3ZjVjOSIKKyAgICAgICI3ODk1NTM1MTJiMjk2ZGVhMjlkODAyMzE5NjM1N2UzZTNhNmU5NThmMzllM2MyMzQ0MDM4ZWE2MDRiMzFlZGM2IgorICAgICAgImYwZjdmZjZlNzE4MWE1N2M5MjgyNmEyNjhmODY3NjhlOTZmODc4NTYyZmM3MWQ4NWQ2OWU0NDg2MTJmNzA0OGYiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDEwLjEiLAorICAgICAgICAgICI4ODMxNzdlNTEyNmI5YmUyZDlhOTY4MDMyN2Q1MzcwYzZmMjY4NjFmNTgyMGM0M2RhNjdhM2FkNjA5IiwKKyAgICAgICAgICAiMDRlMjE1ZWU2ZmY5MzRiOWRhNzBkNzczMGM4NzM0YWJmY2VjZGU4OSIsCisgICAgICAgICAgIjgyYzJiMTYwMDkzYjhhYTNjMGY3NTIyYjE5Zjg3MzU0MDY2Yzc3ODQ3YWJmMmE5ZmNlNTQyZDBlODRlOTIwYzUiCisgICAgICAgICAgImFmYjQ5ZmZkZmRhY2UxNjU2MGVlOTRhMTM2OTYwMTE0OGViYWQ3YTBlMTUxY2YxNjMzMTc5MWE1NzI3ZDA1ZjIiCisgICAgICAgICAgIjFlNzRlN2ViODExNDQwMjA2OTM1ZDc0NDc2NWExNWU3OWYwMTVjYjY2YzUzMmM4N2E2YTA1OTYxYzhiZmFkNzQiCisgICAgICAgICAgIjFhOWE2NjU3MDIyODk0MzkzZTcyMjM3Mzk3OTZjMDJhNzc0NTVkMGY1NTViMGVjMDFkZGYyNTliNjIwN2ZkMGYiCisgICAgICAgICAgImQ1NzYxNGNlZjFhNTU3M2JhYWZmNGVjMDAwNjk5NTE2NTliODVmMjQzMDBhMjUxNjBjYTg1MjJkYzZlNjcyN2UiCisgICAgICAgICAgIjU3ZDAxOWQ3ZTYzNjI5YjhmZTVlODllMjVjYzE1YmViM2E2NDc1Nzc1NTkyOTkyODBiOWIyOGY3OWIwNDA5MDAiCisgICAgICAgICAgIjBiZTI1YmJkOTY0MDhiYTNiNDNjYzQ4NjE4NGRkMWM4ZTYyNTUzZmExYWY0MDQwZjYwNjYzZGU3ZjVlNDljMDQiCisgICAgICAgICAgIjM4OGUyNTdmMWNlODljOTVkYWI0OGEzMTVkOWI2NmIxYjc2MjgyMzM4NzZmZjIzODUyMzBkMDcwZDA3ZTE2NjYiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAxMC4yIiwKKyAgICAgICAgICAiZGQ2NzBhMDE0NjU4NjhhZGM5M2YyNjEzMTk1N2E1MGM1MmZiNzc3Y2RiYWEzMDg5MmM5ZTEyMzYxMTY0ZWMxMyIKKyAgICAgICAgICAiOTc5ZDQzMDQ4MTE4ZTQ0NDVkYjg3YmVlNThkZDk4N2IzNDI1ZDAyMDcxZDhkYmFlODA3MDhiMDM5ZGJiNjRkYiIKKyAgICAgICAgICAiZDFkZTU2NTdkOWZlZDBjMTE4YTU0MTQzNzQyZTBmZjNjODdmNzRlNDU4NTc2NDdhZjNmNzllYjBhMTRjOWQ3NSIKKyAgICAgICAgICAiZWE5YTFhMDRiN2NmNDc4YTg5N2E3MDhmZDk4OGY0OGU4MDFlZGIwYjcwMzlkZjhjMjNiYjNjNTZmNGU4MjFhYyIsCisgICAgICAgICAgIjhiMmJkZDRiNDBmYWY1NDVjNzc4ZGRmOWJjMWE0OWNiNTdmOWI3MWIiLAorICAgICAgICAgICIxNGFlMzVkOWRkMDZiYTkyZjdmM2I4OTc5NzhhZWQ3Y2Q0YmY1ZmYwYjU4NWE0MGJkNDZjZTFiNDJjZDI3MDMwIgorICAgICAgICAgICI1M2JiOTA0NGQ2NGU4MTNkOGY5NmRiMmRkNzAwN2QxMDExOGY2ZjhmODQ5NjA5N2FkNzVlMWZmNjkyMzQxYjI4IgorICAgICAgICAgICI5MmFkNTVhNjMzYTFjNTVlN2YwYTBhZDU5YTBlMjAzYTViODI3OGFlYzU0ZGQ4NjIyZTI4MzFkODcxNzRmOGNhIgorICAgICAgICAgICJmZjQzZWU2YzQ2NDQ1MzQ1ZDg0YTU5NjU5YmZiOTJlY2Q0YzgxODY2ODY5NWYzNDcwNmY2NjgyOGE4OTk1OTYzIgorICAgICAgICAgICI3ZjJiZjNlMzI1MWMyNGJkYmE0ZDRiNzY0OWRhMDAyMjIxOGIxMTljODRlNzlhNjUyN2VjNWI4YTVmODYxYzE1IgorICAgICAgICAgICI5OTUyZTIzZWMwNWUxZTcxNzM0NmZhZWZlOGIxNjg2ODI1YmQyYjI2MmZiMjUzMTA2NmMwZGUwOWFjZGUyZTQyIgorICAgICAgICAgICIzMTY5MDcyOGI1ZDg1ZTExNWEyZjZiOTJiNzljMjVhYmM5YmQ5Mzk5ZmY4YmNmODI1YTUyZWExZjU2ZWE3NmRkIgorICAgICAgICAgICIyNmY0M2JhYWZhMThiZmE5MmE1MDRjYmQzNTY5OWUyNmQxZGNjNWEyODg3Mzg1ZjNjNjMyMzJmMDZmMzI0NGMzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgMTAuMyIsCisgICAgICAgICAgIjQ4YjJiNmE1N2E2M2M4NGNlYTg1OWQ2NWM2NjgyODRiMDhkOTZiZGNhYWJlMjUyZGIwZTRhOTZjYjFiYWM2MDEiCisgICAgICAgICAgIjkzNDFkYjZmYmVmYjhkMTA2YjBlOTBlZGE2YmNjNmM2MjYyZjM3ZTdlYTljN2U1ZDIyNmJkN2RmODVlYzVlNzEiCisgICAgICAgICAgImVmZmYyZjU0YzVkYjU3N2ZmNzI5ZmY5MWI4NDI0OTFkZTI3NDFkMGM2MzE2MDdkZjU4NmI5MDViMjNiOTFhZjEiCisgICAgICAgICAgIjNkYTEyMzA0YmY4M2VjYThhNzNlODcxZmY5ZGIiLAorICAgICAgICAgICI0ZTk2ZmMxYjM5OGY5MmI0NDY3MTAxMGMwZGMzZWZkNmUyMGMyZDczIiwKKyAgICAgICAgICAiNmUzZTRkN2I2YjE1ZDJmYjQ2MDEzYjg5MDBhYTViYmIzOTM5Y2YyYzA5NTcxNzk4NzA0MjAyNmVlNjJjNzRjNSIKKyAgICAgICAgICAiNGNmZmQ1ZDdkNTdlZmJiZjk1MGEwZjVjNTc0ZmEwOWQzZmMxYzlmNTEzYjA1YjRmZjUwZGQ4ZGY3ZWRmYTIwMSIKKyAgICAgICAgICAiMDI4NTRjMzVlNTkyMTgwMTE5YTcwY2U1YjA4NTE4MmFhMDJkOWVhMmFhOTBkMWRmMDNmMmRhYWU4ODViYTJmNSIKKyAgICAgICAgICAiZDA1YWZkYWM5NzQ3NmYwNmI5M2I1YmM5NGExYTgwYWE5MTE2YzRkNjE1ZjMzM2IwOTg4OTJiMjVmZmFjZTI2NiIKKyAgICAgICAgICAiZjVkYjVhNWEzYmNjMTBhODI0ZWQ1NWFhZDM1YjcyNzgzNGZiOGMwN2RhMjhmY2Y0MTZhNWQ5YjIyMjRmMWY4YiIKKyAgICAgICAgICAiNDQyYjM2ZjkxZTQ1NmZkZWEyZDdjZmUzMzY3MjY4ZGUwMzA3YTRjNzRlOTI0MTU5ZWQzMzM5M2Q1ZTA2NTU1MyIKKyAgICAgICAgICAiMWM3NzMyN2I4OTgyMWJkZWRmODgwMTYxYzc4Y2Q0MTk2YjU0MTlmN2FjYzNmMTNlNWViZjE2MWI2ZTdjNjcyNCIKKyAgICAgICAgICAiNzE2Y2EzM2I4NWMyZTI1NjQwMTkyYWMyODU5NjUxZDUwYmRlN2ViOTc2ZTUxY2VjODI4Yjk4YjY1NjNiODZiYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBTUyBFeGFtcGxlIDEwLjQiLAorICAgICAgICAgICIwYjg3NzdjN2Y4MzliYWYwYTY0YmJiZGJjNWNlNzk3NTVjNTdhMjA1Yjg0NWMxNzRlMmQyZTkwNTQ2YTA4OWM0IgorICAgICAgICAgICJlNmVjOGFkZmZhMjNhN2VhOTdiYWU2YjY1ZDc4MmI4MmRiNWQyYjVhNTZkMjJhMjlhMDVlN2M0NDMzZTJiODJhIgorICAgICAgICAgICI2MjFhYmJhOTBhZGQwNWNlMzkzZmM0OGE4NDA1NDI0NTFhIiwKKyAgICAgICAgICAiYzdjZDY5OGQ4NGI2NTEyOGQ4ODM1ZTNhOGIxZWIwZTAxY2I1NDFlYyIsCisgICAgICAgICAgIjM0MDQ3ZmY5NmM0ZGMwZGM5MGIyZDRmZjU5YTFhMzYxYTQ3NTRiMjU1ZDJlZTBhZjdkOGJmODdjOWJjOWU3ZGQiCisgICAgICAgICAgImVlZGUzMzkzNGM2M2NhMWMwZTNkMjYyY2IxNDVlZjkzMmExZjJjMGE5OTdhYTZhMzRmOGVhZWU3NDc3ZDgyY2MiCisgICAgICAgICAgImYwOTA5NWE2YjhhY2FkMzhkNGVlYzlmYjdlYWI3YWQwMmRhMWQxMWQ4ZTU0YzE4MjVlNTViZjU4YzJhMjMyMzQiCisgICAgICAgICAgImI5MDJiZTEyNGY5ZTkwMzhhOGY2OGZhNDVkYWI3MmY2NmUwOTQ1YmYxZDhiYWNjOTA0NGM2ZjA3MDk4YzlmY2UiCisgICAgICAgICAgImM1OGEzYWFiMTAwYzgwNTE3ODE1NWYwMzBhMTI0YzQ1MGU1YWNiZGE0N2QwZTRmMTBiODBhMjNmODAzZTc3NGQiCisgICAgICAgICAgIjAyM2IwMDE1YzIwYjlmOWJiZTdjOTEyOTYzMzhkNWVjYjQ3MWNhZmIwMzIwMDdiNjdhNjBiZTVmNjk1MDRhOWYiCisgICAgICAgICAgIjAxYWJiM2NiNDY3YjI2MGUyYmNlODYwYmU4ZDk1YmY5MmMwYzhlMTQ5NmVkMWU1Mjg1OTNhNGFiYjZkZjQ2MmQiCisgICAgICAgICAgImRlOGEwOTY4ZGZmZTQ2ODMxMTY4NTdhMjMyZjVlYmY2Yzg1YmUyMzg3NDVhZDBmMzhmNzY3YTVmZGJmNDg2ZmIiCisgICAgICAgIH0seworICAgICAgICAgICJQU1MgRXhhbXBsZSAxMC41IiwKKyAgICAgICAgICAiZjEwMzZlMDA4ZTcxZTk2NGRhZGM5MjE5ZWQzMGUxN2YwNmI0YjY4YTk1NWMxNmIzMTJiMWVkZGYwMjhiNzQ5NyIKKyAgICAgICAgICAiNmJlZDZiM2Y2YTYzZDRlNzc4NTkyNDNjOWNjY2RjOTgwMTY1MjNhYmIwMjQ4M2IzNTU5MWMzM2FhZDgxMjEzYiIKKyAgICAgICAgICAiYjdjN2JiMWE0NzBhYWJjMTBkNDQyNTZjNGQ0NTU5ZDkxNiIsCisgICAgICAgICAgImVmYThiZmY5NjIxMmIyZjRhM2YzNzFhMTBkNTc0MTUyNjU1ZjVkZmIiLAorICAgICAgICAgICI3ZTA5MzVlYTE4ZjRkNmMxZDE3Y2U4MmViMmIzODM2YzU1YjM4NDU4OWNlMTlkZmU3NDMzNjNhYzk5NDhkMWYzIgorICAgICAgICAgICI0NmI3YmZkZGZlOTJlZmQ3OGFkYjIxZmFlZmM4OWFkZTQyYjEwZjM3NDAwM2ZlMTIyZTY3NDI5YTFjYjhjYmQxIgorICAgICAgICAgICJmOGQ5MDE0NTY0YzQ0ZDEyMDExNmY0OTkwZjFhNmUzODc3NGMxOTRiZDFiODIxMzI4NmIwNzdiMDQ5OWQyZTdiIgorICAgICAgICAgICIzZjQzNGFiMTIyODljNTU2Njg0ZGVlZDc4MTMxOTM0YmIzZGQ2NTM3MjM2ZjdjNmYzZGNiMDlkNDc2YmUwNzcyIgorICAgICAgICAgICIxZTM3ZTFjZWVkOWIyZjdiNDA2ODg3YmQ1MzE1NzMwNWUxYzhiNGY4NGQ3MzNiYzFlMTg2ZmUwNmNjNTliNmVkIgorICAgICAgICAgICJiOGY0YmQ3ZmZlZmRmNGY3YmE5Y2ZiOWQ1NzA2ODliNWExYTQxMDlhNzQ2YTY5MDg5M2RiMzc5OTI1NWEwY2I5IgorICAgICAgICAgICIyMTVkMmQxY2Q0OTA1OTBlOTUyZThjODc4NmFhMDAxMTI2NTI1MjQ3MGMwNDFkZmJjM2VlYzdjM2NiZjcxYzI0IgorICAgICAgICAgICI4NjlkMTE1YzBjYjRhOTU2ZjU2ZDUzMGI4MGFiNTg5YWNmZWZjNjkwNzUxZGRmMzZlOGQzODNmODNjZWRkMmNjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUFNTIEV4YW1wbGUgMTAuNiIsCisgICAgICAgICAgIjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjUiCisgICAgICAgICAgIjU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTIiCisgICAgICAgICAgImM5MTZkOTQ2MDhmYTdkOTdiYTZhMjkxNWI2ODhmMjAzMjNkNGU5ZDk2ODAxZDg5YTcyYWI1ODkyZGMyMTE3YzAiCisgICAgICAgICAgIjc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzciCisgICAgICAgICAgIjhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWYiCisgICAgICAgICAgImI4YWZkNyIsCisgICAgICAgICAgImFkOGIxNTIzNzAzNjQ2MjI0YjY2MGI1NTA4ODU5MTdjYTJkMWRmMjgiLAorICAgICAgICAgICI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5IgorICAgICAgICAgICJiOTc3OGQ5NzA3NThjY2IyNjA3MWMyMjA5ZmZiZDYxMjViZTJlOTZlYTgxYjY3Y2I5YjkzMDgyMzlmZGExN2Y3IgorICAgICAgICAgICJiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjIgorICAgICAgICAgICI0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxIgorICAgICAgICAgICI4ZWYzMjMyZGNhOWY0ZDJhMGY1MTY2ZWM1OWM0MjM5NmQ2YzExZGJjMTIxNWE1NmZhMTcxNjlkYjk1NzUzNDNlIgorICAgICAgICAgICJmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4IgorICAgICAgICAgICI4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5IgorICAgICAgICAgICJlMjk4YzdiYmNlMmVlZTc4MmExOTVhYTY2ZmUyZDA3MzJiMjVlNTk1ZjU3ZDNlMDYxYjFmYzNlNDA2M2JmOThmIgorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvcGtjczF2Mi12MTVjLmggYi90ZXN0cy9wa2NzMXYyLXYxNWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmM3YjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGtjczF2Mi12MTVjLmgKQEAgLTAsMCArMSwzOTE5IEBACisvKiBwa2NzMXYyLXYxNWMuaCAtIHBrY3MjMSB2MS41IGNyeXB0IHRlc3QgdmVjdG9yIHRhYmxlCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisgKiB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyAqIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qIE1hbnVhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZmlsZQorICAgZnRwOi8vZnRwLnJzYS5jb20vcHViL3JzYWxhYnMvdG1wL3BrY3MxdjE1Y3J5cHQtdmVjdG9ycy50eHQgLgorICovCisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmRlc2M7CisgICAgY29uc3QgY2hhciAqbiwgKmUsICpkOworICAgIHN0cnVjdCB7CisgICAgICBjb25zdCBjaGFyICpkZXNjOworICAgICAgY29uc3QgY2hhciAqbWVzZzsKKyAgICAgIGNvbnN0IGNoYXIgKnNlZWQ7CisgICAgICBjb25zdCBjaGFyICplbmNyOworICAgIH0gbVsyMF07CisgIH0gdGJsW10gPQorICB7CisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiIgorICAgICAgImM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzIiCisgICAgICAiZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNCIKKyAgICAgICI4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjUzMzM5Y2ZkYjc5ZmM4NDY2YTY1NWM3MzE2YWNhODVjNTVmZDhmNmRkODk4ZmRhZjExOTUxN2VmNGY1MmU4ZmQiCisgICAgICAiOGUyNThkZjkzZmVlMTgwZmEwZTRhYjI5NjkzY2Q4M2IxNTJhNTUzZDRhYzRkMTgxMmI4YjlmYTVhZjBlN2Y1NSIKKyAgICAgICJmZTczMDRkZjQxNTcwOTI2ZjMzMTFmMTVjNGQ2NWE3MzJjNDgzMTE2ZWUzZDNkMmQwYWYzNTQ5YWQ5YmY3Y2JmIgorICAgICAgImI3OGFkODg0Zjg0ZDViZWIwNDcyNGRjNzM2OWIzMWRlZjM3ZDBjZjUzOWU5Y2ZjZGQzZGU2NTM3MjllYWQ1ZDEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjEiLAorICAgICAgICAgICI2NjI4MTk0ZTEyMDczZGIwM2JhOTRjZGE5ZWY5NTMyMzk3ZDUwZGJhNzliOTg3MDA0YWZlZmUzNCIsCisgICAgICAgICAgIjAxNzM0MWFlMzg3NWQ1Zjg3MTAxZjhjYzRmYTliOWJjMTU2YmIwNDYyOGZjY2RiMmY0ZjExZTkwNWJkM2ExNTUiCisgICAgICAgICAgImQzNzZmNTkzYmQ3MzA0MjEwODc0ZWJhMDhhNWUyMmJjY2NiNGM5ZDM4ODJhOTNhNTRkYjAyMmY1MDNkMTYzMzgiCisgICAgICAgICAgImI2YjdjZTE2ZGM3ZjRiYmY5YTk2YjU5NzcyZDY2MDZlOTc0N2M3NjQ5YmY5ZTA4M2RiOTgxODg0YTk1NGFiM2MiCisgICAgICAgICAgIjZmIiwKKyAgICAgICAgICAiNTBiNGMxNDEzNmJkMTk4YzJmM2MzZWQyNDNmY2UwMzZlMTY4ZDU2NTE3OTg0YTI2M2NkNjY0OTJiODA4MDRmMSIKKyAgICAgICAgICAiNjlkMjEwZjJiOWJkZmI0OGIxMmY5ZWEwNTAwOWM3N2RhMjU3Y2M2MDBjY2VmZTNhNjI4Mzc4OWQ4ZWEwZTYwNyIKKyAgICAgICAgICAiYWM1OGUyNjkwZWM0ZWJjMTAxNDZlOGNiYWE1ZWQ0ZDVjY2U2ZmU3YjBmZjllZmMxZWFiYjU2NGRiZjQ5ODI4NSIKKyAgICAgICAgICAiZjQ0OWVlNjFkZDdiNDJlZTViNTg5MmNiOTA2MDFmMzBjZGEwN2JmMjY0ODkzMTBiY2QyM2I1MjhjZWFiM2MzMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjIiLAorICAgICAgICAgICI3NTBjNDA0N2Y1NDdlOGU0MTQxMTg1NjUyMzI5OGFjOWJhZTI0NWVmYWYxMzk3ZmJlNTZmOWRkNSIsCisgICAgICAgICAgImFjNDcyOGE4NDI4YzFlNTIyNDcxYThkZjczNWE4ZTkyOTJhZjBkNTViY2I3M2ExMmFjMzJjMjY0ZjM4ODFjN2MiCisgICAgICAgICAgIjhhNzEwZjcwZmViMTA0ODVjODM3MGY3ODFmZmZkMDIxODE2ZjA1ODczOTc2NmRhMGE5YzlkYjBlYWU3ZTlhMjUiCisgICAgICAgICAgImI2YzQzMzE4ZDBjYWFjMjM2NTIyY2EzMTBmMTdmYzUyYWQ0MjI5YzgzYTI0ZTllNTQ1ZWIzNWU5ODI2ZDU1OWYiCisgICAgICAgICAgIjU3IiwKKyAgICAgICAgICAiNjg0MmU1ZTJjYzAwNDFkNmIwYzgxYTU2MmMzOWE2MTczNzlhNTE1Y2FiNzRhYmNiMjYxOWM3NzQwYTU0MWQ5NSIKKyAgICAgICAgICAiNTVkZDkxNjU5NzViZjhhM2ViZDBkMDQ1NjY2MWRmYjFhNjg2MWJhMjMzMjI2OTkzMGUwZGI1MTRmY2EwNzMzZSIKKyAgICAgICAgICAiZWI5YzQwNTcxM2ViMWY5ZDc2ODAzM2VkMjkzZTFlMDgxYTEyNWYzMmRkYjllYTUyZWRiZTI3NWM0YWY2MGY4YSIKKyAgICAgICAgICAiN2JmODMyYmQyMjc1NjFjMjA4ZGMwMDMxYTg0YjUwMTJjOWRkOWY3NDQ1OWRjYjA3MGJkYmUxM2NmYThjMmQ1MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjMiLAorICAgICAgICAgICJkOTRhZTA4MzJlNjQ0NWNlNDIzMzFjYjA2ZDUzMWE4MmIxZGI0YmFhZDMwZjc0NmRjOTE2ZGYyNGQ0ZTNjMjQ1IgorICAgICAgICAgICIxZmZmNTlhNjQyM2ViMGUxZDAyZDRmZTY0NmNmNjk5ZGZkODE4YzZlOTdiMDUxIiwKKyAgICAgICAgICAiZGQyZDYwYTVlMDA4ZWJlMWQwYmU2ZjYwZGJjNDNmMjk2MmVmNTBiZmRlNTQyYmJiZTk4ZmVkZDFmZWFjMDU3ZSIKKyAgICAgICAgICAiNzcxY2YxNWZjNjMyYzhkYjI3MmUyOGQyOWI1NzkzZWE2YWI4MDYyMThjNTM4MjM5YjkzYTkzNWU2NWQyNDQxNiIKKyAgICAgICAgICAiZWM2YzZlOTlhZTA0IiwKKyAgICAgICAgICAiNzA5YzdkMmQ0NTk4Yzk2MDY1YjY1ODhkYTJmODlmYTg3ZjA2MmQ3MjQxZWY2NTk1ODk4ZjYzN2FkYTU3ZWFlOSIKKyAgICAgICAgICAiMDE3M2YwZmI0YmY2YTkxZWJkOTY1MDY5MDdjODUzZGFjZjIwODQ5NGJlOTRkMzEzYTA0MTg1ZDQ3NGE5MDc0MSIKKyAgICAgICAgICAiMmVmZmMzZTAyNGQwN2U0ZDA5YWEyNDVmYmNiMTMwMjE5YmZhNWRlMDJkNGY3ZTJlYzllNjJlOGFkMzJkZWU1ZiIKKyAgICAgICAgICAiZjRkOGU0Y2ZlY2JjNTAzM2ExYzJjNjFjNTIzM2FlMTYxOTJhNDgxZDAwNzViZmM3Y2UwMjgyMTJjZDI3YmViZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjQiLAorICAgICAgICAgICI1MmU2NTBkOThlN2YyYTA0OGI0Zjg2ODUyMTUzYjk3ZTAxZGQzMTZmMzQ2YTE5ZjY3YTg1IiwKKyAgICAgICAgICAiMjYyOWE3YWFjMGMzOTA1ZTgzMWViNjAyMzg4YzU0NWFmNTU0Yjk2YjJhZTUxNTMyZTljY2RiODk3MmVmMzBiNiIKKyAgICAgICAgICAiNGEyZjk4YzY5NTI5N2EwMWM1ODEyYTJjNDAxNTgyZjM3YjE0NGEzZTkwZTU5ZDgxYjY5MDM5YzY0Yjg0NGIwMiIKKyAgICAgICAgICAiOGMxMDVjOGU2ODM2MTVhZmI2NThiNmM0ZDlmMzgyMzhhNzYzMDFiYjE0NDQ5MTEzYjY5ZGUxMjYwNDVlMjZmMSIKKyAgICAgICAgICAiM2VlNmQ3IiwKKyAgICAgICAgICAiNTRkZGI3ODQyNjhlYWRiMzk1NWJkOWY5NDk4ODQyNTk1YWQyOWZmOGE2NjdmZWI0MWY2ZjUzMGNiNjBiYzkyNiIKKyAgICAgICAgICAiYWM2YzcxYzc3MmY4MDNkMDIyYjQxY2E1NzIwNDIyM2IyN2NhNzllYzViNzI2NTJjYTlhZmJmNDBkYzJmNmEwZSIKKyAgICAgICAgICAiMTNiY2Q2MGQzN2Y3OTUwNGIwZmZjYzAxY2Y1MzQyZDZkMzRhYzZmMWYyZjlmMmY0ODc0NjI1YjlmZGJiN2RkYSIKKyAgICAgICAgICAiMmVjODdkZjBjZjg3MjU5Nzk4ZGY4NmEwNmJkNWFlZjczNTRiOGNiMWNiMTM3NTc1ZjRjZmJjNDYyODFiYjMzMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjUiLAorICAgICAgICAgICI4ZGE4OWZkOWU1Zjk3NGEyOWZlZmZiNDYyYjQ5MTgwZjZjZjllODAyIiwKKyAgICAgICAgICAiYzNjYTg0NjAwZjM1Yzg2NTVmYzdjNjRjNzVjNTg3Mzg1M2QzYWE4YTk0MjZhNTFiNjNkN2U3NWRjZjZjYWU5NyIKKyAgICAgICAgICAiYTQyNTNmYmE4NzFkNmY5Njg5OTcxOTliZjAxYjZhNGQzNDI4Y2U0Yzk2ZDFjNDg3YjI4MzBjYjllMzVkNjQwNSIKKyAgICAgICAgICAiNTYyMzY5OWFiNDk3OWEwMjU4NGI5MmU2YmEzOWU3NTcyODQwNzlhYmYxMzNhN2RhNTRlNTQyNTIxN2EyMTBmNiIKKyAgICAgICAgICAiN2MxODI2OWI1MTFmNjFmOGM1IiwKKyAgICAgICAgICAiYTg1NTQ4MDEzYmQwZTIwZWUwZWJkMzZmYjc0ODk3N2Y5ODU4NDZkNzYxMGVlZDI0YzM2Y2Q4MzAzM2RkMmFhNCIKKyAgICAgICAgICAiNTgwYmQxNTMzNTIwOWRjZjc4MmVlMjZjNDhjMzA2NDRiMGI1Y2M4NmM4Y2QxNjVhZTIxZWFkZjU3ODA0MTg2NyIKKyAgICAgICAgICAiNzYwNzAzMTg3NWUyMjFlY2RmM2IxMDU3MzE2ZjNmMTJhNDdkNWRhNDBjNDE1MzliNjM2NDMwZGEyZTU0MjE5MCIKKyAgICAgICAgICAiMTE5ZTQyOWM1M2MyMjI2Zjk1OWIxOWNjZjQ4YTNkMjQwMjE3YzRkZTcwZDcwNzJhN2UwZDk1YjYxNmQxMTVhOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjYiLAorICAgICAgICAgICIyNjUyMTA1MDg0NDI3MSIsCisgICAgICAgICAgIjNjNmEwNDcxZGFmMDBiN2MyZWZjOWVlODgwNDE2NTRmODc2MjkwMDdjMTI0MzIyMjExYTVmNGVhM2M1ODIzODUiCisgICAgICAgICAgIjdiYzhmYzdlMjFjOTQ1NDhiMGVlYmRjZmY3OTE2MGUxMTI0NjFlNDA1MDkxMTBjZmRjNGYwZjEzYzdmYjkyMWEiCisgICAgICAgICAgImJhYzhkZmFhYzIxYWNiMGY3YjhhMTNhNGI1Y2NhNTIzZDVjN2RkZjcwNTIzZWI1NzBjNTliNmM3YWU5NzY3ZTQiCisgICAgICAgICAgImVjOWE2M2QxMTM2ZDEwMjMxYjQwMWUyMGU3NDEwMjg0ODM0ODAxN2ExNjE2IiwKKyAgICAgICAgICAiNWU1MTQzNjMyODdkZTliMzgwMDQ4Y2M0NDM1ZDUzMjk0YWQ1OTQxYzU1MWE5N2UxM2MxNmRjMTM5OGRlNjEwZCIKKyAgICAgICAgICAiYzczMzdiYzZiZGU1NzhlOWU5ZjU2YWYxNDQ1NGYyZTgzMWJlZWYzMjMxYTg1MDY4ZThmZWY3MmM4OWUxZGYxYyIKKyAgICAgICAgICAiOTk0MzBhNjBmNmQ5NDI4OWNmYmE4N2IyYjQzMmE0MGI4OGRiNjFkYWUwODhmOWVkNGUyODRhMjE2M2FmNjViZiIKKyAgICAgICAgICAiMmI0MzU1OWE1ZGEyYWVjNWJiOGY0M2Y5MmMxYjA0YTUxNDZhNjViNmUwMTliNGNkZDI5NDBjMzVkOTY0NWIyZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjciLAorICAgICAgICAgICI4YTg0N2RkOWUyIiwKKyAgICAgICAgICAiYTEzZGZmOGE0OGU4MDQ5NGFlNjZlNmJhOWYxNzlhMDEwZDllNmQ0MDMxODc5NjdmOTlmZGQ5MGVmOTBlMGE5NCIKKyAgICAgICAgICAiMDczZmYwZTRkMGU2NjY0ZmYzNzNiNTA5OTUzZTA0ZWY3NzgzYmUwZmI0NmM4YTlmYzBlZDhjMWYzM2NiNGQwZCIKKyAgICAgICAgICAiMmYxZDBkNWNkYmExNGRjYTUwOGNhMWQ3M2QyMDgwMTg2MzliYzhlMTY1ODYyM2RlMWU1YmEzZjA1ZWQwOTE0ZCIKKyAgICAgICAgICAiMmY5NjkwMmYyNTIwMzMyZDg0OTJkMzczNGFjZGViYmRmNDNlNTBhNDNlN2FhODcyIiwKKyAgICAgICAgICAiODI3YTY3ZTgxNTc4MWM0ZDRlMmIyZTE2OWQ4MGNhZTkzNjY4NzJhNzkyYWZiZjNjMGNkNTFjZTI4YzcwZTg2ZCIKKyAgICAgICAgICAiNDFlYmI5NzUyZjNmOTJkYmE1MWFkYmI2ODUxYjFmNzg0NTYxYThmMTk3MjA4ZmRlMDI5NzBiMzhmMmE5NzQyMiIKKyAgICAgICAgICAiZWM3ZjRmYzhhMTA2NzVhOWRiZGUxMDllZWQwY2UwNjUyNzcwM2VlMDViNjU3ZDM0MDhmN2ZkZGIxZWVjY2ZmYSIKKyAgICAgICAgICAiZTE2YjFkYTEwNzMwN2EyY2YyNTZmYTYwZTgxNTIxNzJkZTlmOTUyN2ZlOTIwYTkwMWQ5M2M0ZjRkNTdlNTQ2ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjgiLAorICAgICAgICAgICIzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyIgorICAgICAgICAgICJkZjAzMWJhMGUwZTgyZGQyZjNlNWQzMWU0ZWEyNTdiMTViIiwKKyAgICAgICAgICAiMjE5OTc0YTA4N2YwYTI4MTkzZTY0OWEwNGFlOWQ4NGNmMmM4YTlhNDZjZGZkOGYxYWM2MmM3ZTBmMjBmNGUyNyIKKyAgICAgICAgICAiMDMwYzcyYjIwYTVkYjcyNWI0YTg2ODNkZjU1NTZlZTc5NDdmYTBhNzY2MWI2ZDk5ZGNiNzllNDk0ZjQ2NzNmMCIKKyAgICAgICAgICAiNzNhMDQxZGQ5MDdjODczMjRlODYyNWRkIiwKKyAgICAgICAgICAiMWE2ZGY1NzU5OTg0ZjJjNDExOTM1NWM1ZGIzNWM4YTQ3ODE2NGQ1ZTVlZTc3YjQ5OTFmMTA0YmE5MWI5ODcwZiIKKyAgICAgICAgICAiMTU5MWJlMWYxOWY1NWE4MDUxYTYyYzBlNTk0OTNkZjZmMDBmZTUwZWY3M2E2Y2YwYzQzNTQxZjUzMjBkYWI3YiIKKyAgICAgICAgICAiMmZjNjdjOTMyMjVjY2NkNmQ1MDM0N2FhOTY5YWQ4N2JkM2Q4MjA4MTQ1NGZlYWQ4MTBkYzFhYjhjMjE3ODFmNyIKKyAgICAgICAgICAiNjEyZTY0MDY3MjliMzIyZTA0YjE2MjRmODUzODk4NTY1OWFlMzRkOTkzMWUwMTlmNzYyYzc5N2Q1Y2JmYTMyZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjkiLAorICAgICAgICAgICI5N2UwYjYzNmJmZGRiOGUxYzhhOWNmNWIzMDVjZWYzYThmNDdmOWE4YjMzNDRmMTM1NWZhM2RiYWI2N2JiOTcyIgorICAgICAgICAgICIxMCIsCisgICAgICAgICAgImMxZjg5YmNkYzU2MDQwZDVlNjYzYjc0YmZkZTIzOTdiNTg0NjA4Y2RmMzJkNWE1ODQ0NzI0YWM3ZTU5OGE4NmUiCisgICAgICAgICAgImY3MTE0YjFiZTA4NzMwY2IxMGY2NjFmYmZiODYwOWY3YzZjMzc0NDJhMWIxMWUwNGE2MTFmZjhjYTVjZTlhZmMiCisgICAgICAgICAgIjFlYjNhYWE5MmM5ZjI4YmFlMjIwNDQwNTc4OTkwMjI2MDc4Mzc4YzQ5MzQxMTM3NGM1M2UzZGRjIiwKKyAgICAgICAgICAiODczY2M0ZGNhNDI3OTcyYjYzYzZjYzhhYzExY2NjMzNjOTU5ZjdmY2ZlNGI0NWJiZDQ3YjI5ZDljOTg4YzAxYSIKKyAgICAgICAgICAiOTZiYzFlYWUwZWY5YjE5NDhkY2UyY2M5ZjBhYTkxN2U4NmE2YzExZjhkYTNkYTI5ZGY5MDU5MDFmMTkxOGE3NiIKKyAgICAgICAgICAiMTY4ZGUxMTc1ZTI3MzUxMjhjMDk3Mjk5ZDY2ZWE1Y2NmOWI5NWIzNjkyZWViZmM2ZWExMWJjMzcwOTFiNzk1ZiIKKyAgICAgICAgICAiMTg4MDNkNzBlNzk1NThlMTI1MTYyMzBmZWQ1NTE1ZTUxYjQ1YWU4NmNlZmU0N2I5Mzc5MGU0OTk0ZGM0MWUwNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjEwIiwKKyAgICAgICAgICAiODJiNTA3NWJmYzg4ZjQwMDY1NzZhYTgwYTAwMDdhNzQ1MTE4NGQ0Zjc2MGNmOTI0MjgwNDIyMmIwZTA3MjZmNSIKKyAgICAgICAgICAiNTUwMzBlNGU2YjAxZjc5M2IwOTcwMTgxMjc4MjRhM2U0MDI0NTdkODQ5NWZjMCIsCisgICAgICAgICAgImQ1NWUzZDQ4OTdlOWQ4NjUwMTRjYjE1ZDNlZTNmOWZiZDI5YzkyZTVjMjM3ZGNhZTQ2NjcyYTQ2M2VhYWE0ZjciCisgICAgICAgICAgImRkMDk4NjFlOTQ2YWM2NWI4NTYyNTA2MzkzYjg1MTkyYWQ0MWZiMGM0OGM4YzA1Mjk4MWJkZGNkNWYxZmM4YjEiCisgICAgICAgICAgIjM5Y2Q0N2NhY2ZmYyIsCisgICAgICAgICAgIjJlODNjM2QyODgwMTVhNWY1MDNkM2U1ZGU3ZDJhZDkxMDY1NDVlZjk3ZDYzZTRkMDZhNWEwZDlkYmMyOWY2YmEiCisgICAgICAgICAgImZiOTNhNTE3M2ZhNTA2M2E2OTM5ZGJhNmM3YTQyOGMzNWU3ZGJlNmE5NTkzZmU1ZWM0YzE5ODc4ODkzZjMxMzciCisgICAgICAgICAgIjA5Yzg3NjAyNzI2Y2IzMjU1YmU3NWFkYzdmMmYyN2U2ZGI5MWMzYTM0M2VhZmYxYzI4ZDlkNWY3Y2I2NTc0ZTYiCisgICAgICAgICAgIjMxMDY5MDAzY2RjZmEwNzc0M2E3MzQwZDU4ODM5ZTcwOGJmMzZhZjYzNDJkYjhkZmE0MWZlYWRhZmM2OTUzYWMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMS4xMSIsCisgICAgICAgICAgIjM2NDhjMzZmODUxZjUyZjIzMjg3NzkwOTE5ODVhM2M4MTJlMThhNzA1NWQwOTBiYmYwMzI0YzEzNzkzYmI4MjIiCisgICAgICAgICAgIjFhNTciLAorICAgICAgICAgICJjMTI3NzE4NWMzNTk1NWNhZWRmZGY5ZGU1NWQ1ZDk1YTM5OGQ1OGY1ZjMzMzE5MWZjMDI5NDVlZmRmYWRmYjZkIgorICAgICAgICAgICJiMDVlZTJhMmQzNDE4M2VkZjg5YTFhNGRjY2M0NjU5MWIzNTMyYmE3MDM5MzYyYzc1ZGYxOTRlYzEwNjQ0OGFmIgorICAgICAgICAgICJiN2Y2YmZiMjgwN2UzODNlMTU5OTU0MjU1ZTgyN2NiOWRhZGM4ZDliN2U2OGExYWEwOTc2MzUiLAorICAgICAgICAgICI4ODYyZjE5NzNmZWZlMGFmMDJkOTZjYzQ1ODMzNGRlZDZjMDJkOGQ3ZWFmNTkzNzc5YzVkMzg2YzRlNDlmNzY4IgorICAgICAgICAgICJmMTMwYjQ4N2IzYzkxZTMyM2E0NzdlNGMxMTBhMzM0MWZmNDZlZWUzN2M3NzNlNWMwYWM4MzliYzU1Y2MwYzA3IgorICAgICAgICAgICIwY2FjMDFjZDQ1MTgzY2ZlZTZiODhiZmI4MjM2MWQzNTYwMTk3Y2RlYWI0MmU1Yzc1NWQyMzc5NzFhODhkYWY2IgorICAgICAgICAgICIxMGNiMzk1MjYxNGIzNjQwNTZjZDQ5MTQyMGVmZmUzYTBiOGNlMzFmMmUzZTQ5Y2FkNmYzYjA2NDBmNDQ5MWRlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEuMTIiLAorICAgICAgICAgICI5NGY3OGNmNDVjNTNmYzQ2ZTdlYjFiMjY2MThhMjllOTQ4NTAxMmMxIiwKKyAgICAgICAgICAiZTZkZTllOWI5MDIyYTU1ZjU2MTIxZDVhYzAwYWE2ZGYyOTljOGEzNjk0MjJlNzU0Mjk1NmI2ZGEyZTBkY2RlZSIKKyAgICAgICAgICAiOTY4ZGIwN2Q5OTVhN2JiODc2ZjdmOGNkNjZiMmY1NDJjMDUzMDhmNzQ5ODNhM2Y4MzYwYzZiODk0N2Y4N2Q2MCIKKyAgICAgICAgICAiOGIwMzFhMmM2OGRkZTE0NzFhZTQ5NmFlOWIxNmUyYTgxMTgxZWI2ZmMyZjY1YmFhYWRkYTY0MjJhOTM0MzFmNiIKKyAgICAgICAgICAiZjNiMDdiNWI0NmEzY2Y4OTQ4IiwKKyAgICAgICAgICAiM2M2ZDNiNDNkMjNhZGI3OWQ2OTcyMzM4MDhiMDc0NDg3Njk3ZjMzNWZkOTljZGU4NjU0MTFmYjE4MjI4OTI1NiIKKyAgICAgICAgICAiMWZkYzI0YThiOGJiMmM0ZjY1M2M0ZDE1NmM3N2E3NWRlMzE2MDBiNTcwOWU4ZDUwNmU5OGUxZDM3M2NiZGEwMSIKKyAgICAgICAgICAiZjRkOWZlYjAyOTcxOThjYWQwY2EyYTdlM2IxZTYzOTAzYjEwNDNjZTc5NDk0YzU3NTRmN2Y5MGZjMWYwNzNhNiIKKyAgICAgICAgICAiMTk5MjllZjEyNjM5NGIwNjI0ZjNiOGJhNmQ1NjQ1ZTk5MGU3YzAxMzJjZTIxMjMxNDZmZDljYWRmNzQ1ZWM2MSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjEzIiwKKyAgICAgICAgICAiNzc5ZDFlYjg0ZmEyODRjMzdkMjlkNWUxNzlkMDAzMDZiNDEzYzQ0YTgwMGEwNzdlNTk4NTNmNjMwNWY5MmU1OSIKKyAgICAgICAgICAiZmI3ZjgxIiwKKyAgICAgICAgICAiYzNlNmQxOGJkYTk3NzgyY2E3ODFmYTc2ZDk3YTZjOTRkODU0ZDE0MTk5YjRlYTdkODJjNWJjYmJlNmNkYWFiNSIKKyAgICAgICAgICAiMjU1NzQ3NDQzYzU5YmY4Yzc3ZWNkYWE2NGFlN2NlNjFlMmM3MzAwMTMyYjc1NGU5MTYyZjdjZGU3NThmNDgwYSIKKyAgICAgICAgICAiZTU4OGNmZDQ0YTk0NmQ2NGUyNzIwYTJkMTc1MjU1NDUyMjA0ODQ4MzgxMThhZDZlNmI1NCIsCisgICAgICAgICAgIjcyMmNhOTI1NjZjNzNjYzg1ZDE5Y2UzZmFhMTRjYjJlNzk4NDlmMjA1MDkyZDE1ODkyODIzMTNjMDQyN2YwNjciCisgICAgICAgICAgIjc5OGFmYWUzZTNmMGE1NjFmMzk5MzQ2ZTlkMTA3ZGEwNGFmNDRiMGM2ZjA0NGFkZWZlMDk3YTBjZDE0YTQ3YTkiCisgICAgICAgICAgIjljZDk4MTlhOTg0MTM3MDYzMDdjYmQwZGEwMTY5NzQ2OWVmZjcxZDMxNDQxNjM5NDkzZmJlZDhlZWUxYmEzOWYiCisgICAgICAgICAgImRkMDdmYzBlYTA4MjMwMTg2MTc5ZjkwZTdlZjEzYzYxZWU1NmYxNjdmYzJmNmIxNTc5M2UxYTMyMjRmZmEyOWUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMS4xNCIsCisgICAgICAgICAgIjg4IiwKKyAgICAgICAgICAiYzAxNjlkNzZlNGVhNDU0NTQxMGRkZjY2NDZjMWJhN2RkMjcyZDdjMzQ5OGJhNmIwODA0YjQyNjEzMGE4MGZiZiIKKyAgICAgICAgICAiZmY0YmI3YjVmNTU5YjBhOTA5MGU0YWQ5YjlmNDE2YTZkZmRjMTUwMWIxYmE0Njg3N2IxYTk2ZmE4NDkxZGNmZCIKKyAgICAgICAgICAiZGU1MGViZWVkMjRkM2Y5ODk2MjQxMzM0NmVkNGEzMzkzZTIzNWI3N2JjMWVkNjc0NjhlY2UyNzkyYTJmZDNhOCIKKyAgICAgICAgICAiMzQ4ZmM1NTA5YjU5MDZmMjg4NTYxNWRmOGMxNDYxMzc3YTc0MWQ1OTUyZmIzNmVhYzAyMDFlMjciLAorICAgICAgICAgICI0ZWQ3ZDEyOTFhMDMzNjY1NGQ1Y2EyYjFmOWQyMGNiMmRhNzIyNmY3MTE2YjkzMDk4ODQzOWI0NDYzOTgxMTA0IgorICAgICAgICAgICJiZDYzYzJjZTJiNzdkNjI2YjMxMDljOTMxNDAzYWM1YjQ5YjQyNDdjNGY2OTY3YjhjMGRiMDYzYzk5OTVhZjlkIgorICAgICAgICAgICIzNjU0MDY1MDkzOGIwMWY5MzkwNmY5ODM4OTA3ZWQ1OTM2YWJiMzQzYjBlMjU1MDlhMWQyZDRjNWM4Yjk1ODA2IgorICAgICAgICAgICI1MGRhMmNlMTFmYTNjZjNlNjQwNzIzZWFjYmVlODdmYWQzZWUzNTk1OGI0NTA3NWRmNzgxYzQxMzQ2NmFmMTM5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEuMTUiLAorICAgICAgICAgICJhMmRjMDg3Nzc4ZDU0MzQwOGU4OTczZjEzNjMxNTllZGI4ZjA3ODNjNDU3MDg5MDcyZGNlNjZkMzEwMmJiNGZhIgorICAgICAgICAgICJlNjBhYTYwZTQxOTMzYzQ4YTFiZTM5NTNlYzJmODA0YzBjYzk2YyIsCisgICAgICAgICAgIjE4MTEyMDE0MDY1MzI5ZDA0YmZiMGNmNTQ0ZGQzOGQ3YmVmMTU0OWI0YTQ5YTE2Nzc2ZGRhNzRkMGE3ZWRjNDkiCisgICAgICAgICAgIjY3YjQyNDBjMzcxNDJmYTNmNjYzOWMyNjk2Y2Q3ZDRiMThhMTFlMmZiNTQwODFmMmRlNWJkN2JkMTVjZGRhOTIiCisgICAgICAgICAgImM5NGMzYTQ3MTg3YjVmZjQzYjUzIiwKKyAgICAgICAgICAiNzExNTE5MGEyMTA0ODhmMDRmYTBjMDBjOTNhNDY4YTgwMzBiN2I5ZmMxMDAyMGQ4MzEwYmNiMDFhNWM4ZGRhMSIKKyAgICAgICAgICAiZDA2Y2UyNDFkYzc3NWI0M2U2ZjEzYjE5YWJmY2JmMzYxNmU4NGYxMDdjOWVkODBkMWI4NmJmODdjOThjMmI2MiIKKyAgICAgICAgICAiOWZmYWRhYTZlYzAxZjRlNjc1NTU4ZWY1MjYwNmVhZjEyNjA2OGZhNzUzNGRkMTNiOTIwZDIzODE2OTVhZDc3NSIKKyAgICAgICAgICAiZmZmMGJiN2NlYzQ2OTA5MDFkNmYxZTE3MzZiODJjZmUzYTBjMjI0ZDE4ZjEyOTE1ZmRjOTVjMTgzOTdjMzU3MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjE2IiwKKyAgICAgICAgICAiMTEwYmYyYjFkMGRkODEyZjJhNWEyMWYzNDA0ZmEyZjJjNDU0YzQ0MzJmZGZhNzBmMWIwZjIzZWM2OWMxMDIzNyIKKyAgICAgICAgICAiNzNhNzNhYmEiLAorICAgICAgICAgICIxN2I4NWY3NjUzZmYwZWY1ZGU3ZjI1Njk2Y2Q0OTAyM2FkOGVhYzk0OGE4M2UyMjQ1OGVjZDVkMTBhNDM4NjZkIgorICAgICAgICAgICJjNzkxNTU1ZTY0ZjA3OGMzOGM3NTJiNmU5YzZlZWViMzM5ZWVjOTEwMTZkMjU4ODg2ZDAxMjc3NWFkNjQzNjAyIgorICAgICAgICAgICJhMGYwZDE3OTM0NTRhMDYwOTQ3MTE2MjI4ODIyMzk1MDgyNmVkOGUyMDI1ZGE5YTRlOSIsCisgICAgICAgICAgIjVkMGYyZmQ4NWU2ZjlkOWU0MzJmYWQ4NjBmZGM0OTk2OTYyNGZmNGZhMDcxNWQzNjFlOWYwMGIwNWIzYWEwYmEiCisgICAgICAgICAgIjllYjI3YmFlNjEwZWZkZTExNDNjYmM5MzNiNTJkZWE3MDE4NzYwYmIyNTFiZTBlMWUzMGNkMWM1OTkxYWVmNzQiCisgICAgICAgICAgIjRkYjgyZjE2NmI5MDYzZWZiN2UzMzg0MGEyNTY5MDA1NjU0YjE0MGUxMTVmYTU2YzMwNDA2ZTQ1NjU2ZTgxOTkiCisgICAgICAgICAgImFmMzk0ZjYzODYzNDZkNWYxYTMwMGI5NWJhNDhmYzA4NzNkNjE4ZDY5MmJiMDI1YmYxNWU5ZDIzMmM2NDFhZGEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMS4xNyIsCisgICAgICAgICAgImQ5ZDkzNzEzMWZmMTk0MGE4NmJmNzEzOWI0ODExNDM2NDE5NWI0MDA1MjIyYThiYmJjMjYxYTdmMmUyMTJiOGQiCisgICAgICAgICAgImQwMzVlNTNmOTE0NGY1NjEwYjRjZWMzMmVhMDFiZGE5ZDNjODBjZjI5NDY0ZjgwZjVmNTY1NmM4IiwKKyAgICAgICAgICAiMzMwNWUxZGE2MGU1ODY3M2ZjNDZjZDMzYmUyYTY2ZDNhMTAyYzNkYjE2MWVmNDhjMGQ2MGVmMjUwMzFiNDAxNCIKKyAgICAgICAgICAiMTY3ODI2MjQ2YWE1MjhhM2EzZTViMGFiOTUwNzhkODQwMWQ5MjkwMzU5NWFmYzFhYTg1NGU2MDQ0ZTVlYjVmNSIKKyAgICAgICAgICAiYmUiLAorICAgICAgICAgICIwZTEyMTY3NDg5ZjBiYWVmY2FkNjM5MzRiYzE1OWYxYmJkOWU5YjI4N2U1MDBmNDkwOTIzYzE2YTg1NTY0YTFkIgorICAgICAgICAgICJhNjM2NTkzNzVmMjJhZjdiYTQ5Nzk4ZTE1NzhjZjMxNWZhZTNlOWVkNTY5OWM2OTFlM2MxZDBiYjQ2ZGE0OTJkIgorICAgICAgICAgICIwMTM0OWU5MzI5NTkzZDQzODFkMDc0YTBhNTMxZGY5MjFiMzEzMTZmN2UyYjRmZTkxNTM0NzI4MzI0MjMzNWYwIgorICAgICAgICAgICJiMGIyMzE5MmM3MjEwMmYyYzYzNjI0YjFlNzg5NjU0NTBlODIzMGQ0ODc3ZTQ2MTdiMDNkNDQ4MzEzOThkZGJmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEuMTgiLAorICAgICAgICAgICI4MWIzNGFlYjhhZmI4YTNmIiwKKyAgICAgICAgICAiMDJmNzQ4MzQyZDAxMGZiNTZhNmY2OWYyMWY4YzZhNjMxNjc5YzhjNGI4ZjZmZWI1MjVjZjhlNzJmZGE4ZWY4ZCIKKyAgICAgICAgICAiZjY2MjMxMjhjMGZlNzRiYzU5MGNhYTM0ZjFlZWQxYWQyZDYxNDJkY2M1YmNhZTg0ZWYzMTM3NjJmMmU0ZTcwMyIKKyAgICAgICAgICAiMDNkMjA5YzhkOTU3N2E3Yzg0M2QyYjkxNzJlZDRlZmUyYWQ2Mjk2MTRiOTlhOTFhNGNjODMyNWJhMzI0MTE2ZSIKKyAgICAgICAgICAiY2YwYzVlMjkwOTQ5MzhhZTQ5ODk4NGY0ZjRjYmIxNjIzODg2ZTAzOTczIiwKKyAgICAgICAgICAiNDNiMjc2YzdkMzY4ZWEyMWM2ODA3MTE2Y2RlODYwODI5OGYyNDAwMjA3MmQ3NzZlNTZlNjJjMzU3MmJmYjk5ZCIKKyAgICAgICAgICAiYTRjNTZlOTM4YTQ3ZGMwNzVmYTFmZjdhNjE4ZmI1ZmFlZDNlZTM3YjkxZGZjMzkxNTM0OTVhZWJhOWRmNmQ0NSIKKyAgICAgICAgICAiZGY5NGIwZThhOGFkMmRiMzdhOWZlNDZkMGZkZjE1NDIzMWZkNmYzMjIxNDc0ZThmNWMxOTFmZGI4NTM4ZTFhNiIKKyAgICAgICAgICAiMDNlNTk4OTdlMTUwZmFmOTViNjVkYTE0MDY2N2VkYjE5ODA5ZWI0YTE2YWNkMDFlY2M2MDRiZGE1N2YyMGVmMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxLjE5IiwKKyAgICAgICAgICAiN2JmOWZhZDg4OWRlNzNlZDg3M2QiLAorICAgICAgICAgICJmYTVkYWQ0NWE0YmI1ZTc0YzRjZjJlMjEzZWQ0MGFhOTYxNzU5OGQxMWQ0OWFlMWMzMmQ3OTRlMDljZDBlNWM3IgorICAgICAgICAgICJhYWFlODFiOTU1NGRkZTMxMDhkNjBhOWE4MmY0MmNjNmMyYTY4OWY0NjBmZjFkNTNhZDg1YmY4MzgzMTFlNzU4IgorICAgICAgICAgICI5ZTE5Njc5NTdiNTE1NjdhYTBkMzNhZmEzNzUyY2RlNmM1NjYxZDRmMjdhZWQzZGY1MjkwNWYxY2YyMjUzMzA0IgorICAgICAgICAgICI2MThlMDc4NjA0MWU3MGI0ZGNiYWM4YzEwOGJhMzRhYzM5MzlmNCIsCisgICAgICAgICAgIjYxYzI1NTBlMGIzNmE2Nzk3ZmY4NjQ5MzgwMWIxMTQ2ZDg5MDU5NDk4MzUyZTRjMjYyMjc1YjE0MDRiMTMzMTUiCisgICAgICAgICAgImU5NTZiYjNkMzEyMTg1YjUyMWIzYzcwOGU5ZDk1NDAyMTcxOWEwNTlkOTg0NzI0YzUzYzA0ZjVhZDI3NGJlZjkiCisgICAgICAgICAgImZmMGE3OTUwYjJmZGVjYzUyOTBjZDVmM2JjMjY1MjRjZDEzNDIwNDgxODRiMGUyY2RmOTQwNmE0NTNhMmVmOWYiCisgICAgICAgICAgIjNiYjIzYzRlN2MxYzhiMjk1MmEwMjAyYmNjMjM4MjQ3ZWEzMjdiOGMwNzAwYzgwMDNmZDYzNGVjMWVkOWJmMzAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMS4yMCIsCisgICAgICAgICAgImI2YTM1MDliYjNiOWIwYjU3Y2Q1OGRlNDA5ZDk1MzIwMWEwNDJmOTQ5MmRjMWQ3ZTM0YTdkMDk0MWExYTFiIiwKKyAgICAgICAgICAiM2E5ZTE1MDY1Nzg2YjNlMDFkODI2Yjg2MmE4ZjcwMmI1Y2FjOGMxNjYyZWU3ZDE1ZmYzMjNjZGZlNzFlYmY0YSIKKyAgICAgICAgICAiZDFiMWYzYTZiY2JkZDRiMDAxMDg3N2VjYWMwOTFmNjE1OTA4ZTJiZTQwMGJiMGM0OThlMzU1ZDU3MWZkMTA4OSIKKyAgICAgICAgICAiNWI4ZWU5YzNhOWMzMWU0YjExMDM4OWMzZDVjNDZlYmY3NmIzYjM1YWQxZjQ3OTFiNmQyMDk3ZjEwOWYyIiwKKyAgICAgICAgICAiNmI0YjZkN2JhYmZlNGQ2NDE3YWNhZGZiNzg1NzJlN2M4N2UzZmUxYmQ1OGVlZmIwZDRiMTI3OWM3YjdjODMyNiIKKyAgICAgICAgICAiYTY4YmIyODc5NWUwOWY5YjFjZTJlMjRhNTM5ZjRiMGQ5M2IyOTI3NGNlY2Y3Y2Q5ZjBiNzMyYWViZWRhOTExMSIKKyAgICAgICAgICAiYmRmZTI1ZTI2OGE4OGUzNDIyZTI5YjUyYmQ0YjdhMDU0N2RiOGZlMTJhNmZjZjFhM2MwNmEwMDJiZjg3MGEyZiIKKyAgICAgICAgICAiYWJiN2M0NTdlNGJiY2UzZTMxNmY3MjMyNDQ5Zjg3YTlkNzAyYjEyZDE5YmRlN2Y5NTkwZjk0NjdiMDZiZDU4YSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICI5OGI3MDU4MmNhODA4ZmQxZDM1MDk1NjJhMGVmMzA1YWY2ZDk4NzU0NDNiMzViZGYyNGQ1MzYzNTNlM2YxMjI4IgorICAgICAgImRjZDEyYTc4NTY4MzU2YzZmZjMyM2FiZjcyYWMxY2RiZmU3MTJmYjQ5ZmU1OTRhNWEyMTc1ZDQ4YjY3MzI1MzgiCisgICAgICAiZDhkZjM3Y2I5NzBiZTRhNWI1NjJjM2YyOThkYjlkZGY3NTYwNzg3NzkxOGNjZWQxZDBkMWYzNzczMzhjMGQzZCIKKyAgICAgICIzMjA3Nzk3ZTg2MmM2NWQxMTQzOWU1ODgxNzc1MjdhN2RlZDkxOTcxYWRjZjkxZTJlODM0ZTM3ZjA1YTczNjU1IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA2MTRhNzg2MDUyZDI4NGNkOTA2YThlNDEzZjc2MjJjMDUwZjM1NDljMDI2NTg5ZWEyNzc1MGUwYmVkOTQxMGUiCisgICAgICAiNWE3ODgzYTFlNjAzZjVjNTE3YWQzNmQ0OWZhYWM1YmQ2NmJjYjgwMzBmYThkMzA5ZTM1MWRkZDc4MmQ4NDNkZiIKKyAgICAgICI5NzU2ODBhZTczZWVhOWFhYjI4OWI3NTcyMDVkYWRiOGZkZmI5ODllYzhkYjhlNzA5NWY1MWYyNDUyOWY1NjM3IgorICAgICAgImFhNjY5MzMxZTI1NjlmOGI4NTRhYmVjZWM5OWFhMjY0YzNkYTdjYzY4NjZmMGMwZTFmYjg0Njk4NDg1ODFjNzMiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjEiLAorICAgICAgICAgICJlOWE3NzFlMGE2NWYyODcwOGU4M2Q1ZTZjYzg5OGE0MWQ3IiwKKyAgICAgICAgICAiMTY4ZTNlYjU4MDliMDg3MGUxZjI0ODdlMWJlNzdhMTc2YjM0NzE2ZGUxNDFiYTRjOTA1OWRhOTBlNWU1MWEzNiIKKyAgICAgICAgICAiOTRlODU4ZmVkMTBiOTI2YzAyNTIzOTgwYTg5MDlkYTk5NmM2NDMzM2VhNjc2Nzg3YmNlNjc3ZjExZmRhNzdkYiIKKyAgICAgICAgICAiYjFhOTUxNmVkZGE5YjEyOTRmYzJlNDUwNTIyMjg4ZTkzMGJlN2ZhNzI5YjI1MGUzYWFjNTIwNTExZTk1MTZhYSIKKyAgICAgICAgICAiODYzYWY2YmMwNzVjYmRiZmY0MzA0NjcwIiwKKyAgICAgICAgICAiNzFjMmI4ZmIzODE5ZjEzNGMyMjQ3YzZiYWJiNGNmYmUxN2Q3YjI2NDNmODdhY2U1YzU3MTI3N2JlMTkwOGVmMyIKKyAgICAgICAgICAiYTUyODhlMzQzODRlNDYwYTcwMzg2ZTdlYTFkMTlkM2RjYTFjZTE1YmE5MzIzOWE4Y2RkYTE4ZTMxN2ZlMDc5NiIKKyAgICAgICAgICAiODBjZTdlNmFjNmQ5YmRhZjg2Y2I5YWViZjFjZjQ2Y2QxMGVmNmE2ODhiMGNiMmNlNzY1ZGQwYjMyNTIwNDIzOSIKKyAgICAgICAgICAiNjZlZWUxYWEwNWM2YzI4YzZmMzUyNGZiNjg2YjVmYjE1ODUzNjU5ZTU4M2FjNDM3MjE5ZGVmOGVkYzU4YmUyZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjIiLAorICAgICAgICAgICI2NjRiZjA1ZDYxMmJhZjYxNTI0YzYwOGVkYTM2ZmM2ZWEyYzkzYzE0MzE1MzIyMWJjZmQ2YmEwY2ZiYmQ2YjY0IgorICAgICAgICAgICIxNDQ3ZTQ3ODhiMGE0NjJjYjViM2Y5ZmFmYzlhNzUiLAorICAgICAgICAgICJlN2YwYTI3OTE4Y2FkOTE1ZGEyODExMzY1OWZmYjVkZmEwYjUxYjI0ZDVhNzFjMjAyN2Y4ZTRkOTQwOWU4YzY0IgorICAgICAgICAgICI3MmYwYzU0YjVjMDg4NThkYTYzZDRiODE3MmIwN2RjZjhjNWE3ZThmOWU5MGYwMTdjMjRiNDRkMTZiNjcwYmRjIgorICAgICAgICAgICI5NjAzMGM4MzUzYTI4MzliYTRjMDc1ZDI0YzIwIiwKKyAgICAgICAgICAiMDY4NjkwMTgxM2RiMDUzYWM3MDhlM2ZjZWM2YmFlMDM2MDA4OGZkMzQ0ZTlkN2VhMTE4YmIzZjUzNzUzMTQyNSIKKyAgICAgICAgICAiMWU2MDY3MzdmNTgyNGIzNjI4ZjY2NTAzNDhmNmFiNTUzYjI3N2RhMDE1NDRkMDU2NzNiYWVkZjQ1NWNjMDMzMiIKKyAgICAgICAgICAiZjYxM2Y2NTQ3OGZjZmUwNjY3MzRjNDY1NThiYzIzM2I0YjZmNTI0MWU0ZjRhYzUzZmMxOGM1NTM4NGM4ZmQ5NiIKKyAgICAgICAgICAiMTgzZjBiYjU1MTVlODkzMTE0ZjljNjFjY2MxMWZjMTk4M2RlNzQ0NjkyNjRkYmRiYjBjNzQ5MTc0ZWNkZmJlMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjMiLAorICAgICAgICAgICI1ZTc2ZTY2ZWQ1NzU0MWZjMjNkMzU5ZjRhZGJmM2Y1NjgyMDFkM2M2ZjBlMDI2YWFhNTY3NjM1NmNjOTg2NmYxIgorICAgICAgICAgICI3NTVkZTk4Y2IzOWYyMzZkYWZhOWU2YmM3OTRiNzQ0M2I1M2EyZDg1IiwKKyAgICAgICAgICAiNWM2NTY4YjZlMzNiYzEzYWQyZGNkNjAxMmQxN2RhODFiMTNkYmQ2MmFhZTQwYTY0YWY5N2UyMTllNzVkYzE4MSIKKyAgICAgICAgICAiMTI2MDc3ZDEyMGRkYTE5ZDYzMTJjZjFlOTg3MWMxMTVmMDg2N2ZlNjYyZDc4YTQwMzE5NzZiZGRlZjY4ZjUyYiIKKyAgICAgICAgICAiNjg5OTU4NjdjZDgwOTUwNWRkIiwKKyAgICAgICAgICAiMTllNzk5NjZmZjFmYmMxMDA3M2RlNzNkZjNhNTMxNjM3ODc0ZTQ3ZGY2MzkyNTZjNTFkMGJiYTkzNTYxMGI0NiIKKyAgICAgICAgICAiMzRmOWU1YjQ2ODliZDkyMTczNWIzMjIzNmVmY2M2ZTdjYzQ5YTllMDZhMjVhYzk2NTliN2ZlODI5Y2IzZThiMCIKKyAgICAgICAgICAiMWYxMDMxNzk0MjIzNjU3NDFiNzZjODM0MjE0OWNlZGM3NmViMGFkMDE4ZWQ0MjM1ZmJkNTI0ZmQ4N2M5NTQ5YSIKKyAgICAgICAgICAiYjMzZmYyM2VlNGY4MjAwZWZhMzMwMjdlOWRlZWM2MGZhYzAxM2QxZTU2ZTZlMzMzZDQ5M2E0YTk0NjBmZTU4YSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjQiLAorICAgICAgICAgICI1YjE5NTA0OGViOTBlYjQ3OTMiLAorICAgICAgICAgICJiYmJkNDk1NTBlZDFlYTFiNmJjNzIwNmNlMGIwMDNhNjMyYTUyYjBiYWM1ZjMyNzEwYjM5ZmE2NGIzNTU2YWQ2IgorICAgICAgICAgICJmNmM4MmJkOWQ1MzFiMzA3NDY5ZTg2M2Y1NGI1ZmUyMTgzMDU2OTU0ZjJhOTY3ZTRkYzJiMzI2ZTQxZGRkZjc0IgorICAgICAgICAgICIzYTc2NGY3ZTgyODg2ODI5YThmYWIyNzcyYTM0OTc3MDZiOTUzOGE5Zjg0Mjk2YzgyZDliYWZjMjljMzlkNDY4IgorICAgICAgICAgICI0Zjc1ZmY2YmIxYzEyZTM5YmI4MDU2YWYyZDI0MzQ0YjJjYWU0NjI5IiwKKyAgICAgICAgICAiNDJjOWNiNjgyMWI1NWRhZTMwZDkwMDI1NzUzMTEyZTZlZTAyZjRhZDZmMGY1YjNjYzQ5NTJhMTI3YzhhMTZmNiIKKyAgICAgICAgICAiNjQ3OWI4MTQ0ZjNjZjI5ZDg0ZTQzZDY3ZDY3NzEyYzdmNWI3NmRhMmM2NmJhMGU5MGNkNGIxZmMxYzFiM2YxNyIKKyAgICAgICAgICAiYTM5MmU3MDQwODI4OGFmNjliNTBmZThhNTBiMzI5NmEwZGFiZDdjOGRjMzk4NGExOTQwNjg4YmU3MDk4MjUxNiIKKyAgICAgICAgICAiMjAyNTZjYzIxYjdjNzZlZDI5ZDg2ZmY3YzAxZWMyODdkZjQ3MzhiZTM0NjliMzBhM2Y4ZmI3YmU4M2Q5MzYxYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjUiLAorICAgICAgICAgICI2NjBiYmQ0MDA2OWNjNjdiYWRlNDFhMDllY2Y0M2NjNDUxM2Y3YzdjYzAyZGRlOTcyZDJiMWYyOTI5NWUwOWI5IgorICAgICAgICAgICI5MTBjNTllZGJhMGVkMmRkZjExYTZkNDE2OTM1MWY5NzI0MDczMzUyOGY5MWIyNjhmYWE3YWY5MDZlIiwKKyAgICAgICAgICAiMzA3ZjYxYjE4M2E4ZGNmOTE1NWFiMjM1ZTYxZmI1NmJhMmI4Nzk1ZGM0MjM1Mzg1ZThhY2YzNjZkMjUyMzNiNCIKKyAgICAgICAgICAiNzBlMDVkNzAxMWI2ZmM1MzJmMGE2NThhZDEzYWZkMjkwYzZmMzBlMjc5NWVlM2QzOWRiZGM4MGY1NjBlY2UyZiIsCisgICAgICAgICAgIjA0OWIyNjA1MGEzYWJlZjgzZWMyNzc2MTExZTNiNzJmYjlhMmQ2YTgwMTA1NWQ2YjVlMGRhNGU5NWNjZjJlYmQiCisgICAgICAgICAgIjBhNzg2YTk3MjFhYTc5MjViZjE1YmViNjI3MTNhMzEzODc3ZGQ4NWQyNjU4YjIwOGU4OGU2NDQ1ZmMzNTAxOWIiCisgICAgICAgICAgIjBjYWQ2YmY0ZDA2ZTJjYTVmMTE5NDllZWVlN2VlNDdmMWQ1YjRjODgyNDFmNTBlNGQ2ZWRmMDE4M2Q0ZmEzNWEiCisgICAgICAgICAgIjM3MWZjNDA3MzY0ZjJkY2FhNGNkYWVjZWZjZWE2ZGZhYzFkNTEzZjkwNWU3NDc5NDQ3NDRiYjY0NTc2YmExYzgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi42IiwKKyAgICAgICAgICAiODFjYjBhOTc2OThmODIzYjU2YjQ1ZiIsCisgICAgICAgICAgIjkzOGM4ZGZkYTA4Yjg5MDU1YjY4YWYwMTFmMjQ2Y2VjMWY5M2EyNzcxZGE5N2RiYTIwOTU0YzkwMDkxMjI4NWUiCisgICAgICAgICAgIjVkYjE4N2IyOWUzMjcyZTk5ZTY5NGUxMjE0MTcyNTI4NDUzMDg0MDY0ZTVjNjBmMDFlNzg2ZmM1ZDBkOWFmMDYiCisgICAgICAgICAgIjM5YTQ5OGM1N2FkZTkzNzc2MGFlNTE3NDg0YWZkNzAyNWVhMGQ1NWE2MmIxMWY5YWFiN2ZhNWRkZDA5M2U1ZWEiCisgICAgICAgICAgImJhZDYxYjY3YTI5NWE3NzViZTk2YzZiNzZlYzNmZTQ3Mjk1MCIsCisgICAgICAgICAgIjdmYjhmMzM1ZWVkYzRhZjZhZjQ0MDczZGExOTY0NTdkMDQ2MTQ1MDMwMTQ3Zjg0MjBmYzc5YmQ1ODk3NzRhNzMiCisgICAgICAgICAgIjBhNmQ5NGZiN2VmYWRjNWFlZWE3YzA3MGYxODkyNDkxMjVlMTY2YzZkMzAxMjllY2YyYzQ4MjJhNTA0OTZiYzIiCisgICAgICAgICAgImYyMWU3OWFjNTdkYmZiZGQ3MWE2OGI1OGQ5MDUxYjQ4MGJmNDc3NDhhMTNkZmI2NzNlYWVkNzcxMGE0NjhmZTciCisgICAgICAgICAgIjJmN2Q3NGU2ZjRhMjg5NDQwNDNhNTJkOTMwZGU2OGRiY2I2ZWU3ZmI4YjY5NjQwNTQxZTNlZDViNzU0ZTY1ZmUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi43IiwKKyAgICAgICAgICAiMDVmNzgzNTYyM2M4Y2ZhYWU0ODJhOTEwODViOTdmNmI5NTkyOGJiOTc0YWNhZDAyMzY0YWFmMTMxN2VkNTNjOSIKKyAgICAgICAgICAiZGIyZmZiYzhhM2NiM2EwMGY0NGRhY2VmNzgiLAorICAgICAgICAgICI4MGM4M2QyNTQ3YmU0MWJhZjIzMjFiZDMwYTlhYjc3NDljNWVlYmI1YTFmZmYwYjMxZDZiZGIwYWQxNmRkMGMwIgorICAgICAgICAgICJmYjNlYzE1N2U3OGIwOTg2NjAyMDQxY2RlODg5NTdhNTUzMjllM2UyY2ZlODVhNTk0NDc0OTQ1ZWZhMzMzNTg1IgorICAgICAgICAgICJmZmZkNDFlYmI4ZTdjNTE4YzNjOTI1OWFlYThkZTYzNSIsCisgICAgICAgICAgIjg3ZjljZTA1ZjBhYzljMDVlNDVmYjdiYjU1NWE3YTE4YTljZGM1NWY1NDRhNTQyMTAxZTlhNzFjZDIwMzY2ODIiCisgICAgICAgICAgIjBlN2ZmNmRjYTM0Njc1MjI5ZDg2ZTRmYjU4NzFmOTMxMGIxMmJiNzRlMjg2MThkNmQ2NTg2NTg3ZjY2YWNjODkiCisgICAgICAgICAgIjY4YTgzY2Q4MDdmNGQyMTI5NzczMWQ3YzIyYzE0NTk5ZTc1NzE5ZmQyMzA1MmI4YWE2NWI3ZTljNWMwMjAwMzgiCisgICAgICAgICAgIjJkMzVkNTYwZjJkMzNkZDA0OWUwNmFjODI3Y2JkZDlhZjU4MWE2YjI2ZGI2MWQ0M2Q3MTI0YjM0NzIxZGYxNDIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi44IiwKKyAgICAgICAgICAiZTJlMGY2YjMyOGQ5YmJlOWZkNjZjZDg3OTg3YzExNjBlZDIzN2IxYzdjNjU2YTg5ZmIxZjIxZDcwOTQwM2IwNCIKKyAgICAgICAgICAiMTBmOGU0ZTEyZWI5NjkwYWViZWIzODA3MzE5YTkzNjU2NGY2NjcxN2E3MWM0ODYyY2NjNTZlIiwKKyAgICAgICAgICAiY2YxOGU2MDhiMTU2MTQ1YzQ0ZGUzMTQ5NjZjYmNjNjY3NGE0NWFlMGRmOTAwNDA2ZTQwZDNkZmMzMjJmMzk0MCIKKyAgICAgICAgICAiNGNlZWI2ZGM1OGY4MDFiYmYyYWM0ZjQ3ODQxYWJkNzk2MTc5ZDA4MjRmM2JmNTUxOGQ3OGNjNjZhZDhkZmJlZCIKKyAgICAgICAgICAiYjExNyIsCisgICAgICAgICAgIjE0MDFhYTIxZWM2ZWJhYTdlM2E5ZjcxM2M4NmI1MDhlMzc1ZjZjMTI1YjI5NjI2ZWJkMzQ5ZjY0ZTIwZmE0OGEiCisgICAgICAgICAgIjFiMDY4NDc5ZmZmMzMwMjJmNjZmODZlOTdkOWM1ZWRkOTAyNmUzMTgzY2UwODY0MTU3MDY1OTM1MmY4N2E2MTgiCisgICAgICAgICAgIjkxZjNkODZhM2QyNDVmMDI0NWUzOWQ5OTg5MmM2N2ZhMmJlZDhlMzc1NDhkZTIzZGVmZGQxZTQzZDVkN2UzZDkiCisgICAgICAgICAgImEzYzIyY2U2YTM2OGQ4NGM1YWZhMWNjNWJmNDliNjhmZTVjMjVhMzI2YjBlZWM1ZTQ0YzVlMmZmNWEzNTlkZDEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi45IiwKKyAgICAgICAgICAiYzY5NTc4ZWEwM2UyNjliMWI5MTYzM2E3MmY5ZmI0ZDEwYyIsCisgICAgICAgICAgImUwYTFhOWJhZTMwYTdhYzY2Y2FiM2Q4NjQzM2MxY2E1ZThhYzJiNzRlNDgzY2E3ZjM0NTk3NzE2ZWUxNjE4OTAiCisgICAgICAgICAgIjZjOTc3NzJmMjg4NmY0NmQ3ODMxMjFiN2ZlMWI4ZmE1ZmJlYzA5YzA2OGU1NjM1Yzg5ZTZhMGE5YWNjZjJiMTIiCisgICAgICAgICAgImM2NDcwNmI2YWU5YTVhNzRhYmI4M2Y2NGUxM2E4YzUzZjkyNjc2MDQ2NmI2NDVlMjhlOWFkNjQ2MWFlN2I4OWQiCisgICAgICAgICAgIjVlZmNjZjdkODkxNDlhYTJlNjlmMGQyNSIsCisgICAgICAgICAgIjc4Zjg3ZDZiMDY3NjFiZDdlNzE3ZTBjNWViNDBlMWZiODA4OTljN2JlNDAxN2MyZWZiMDc1OTc4ZWUzOGQwZjkiCisgICAgICAgICAgIjVlOTgwM2RjZDQwZmVlOTc5MmM2MWQ0YTJkODVkYWJkZWE5NmNhMjlmM2NhMWU4YmNmODE3NjU1ZDBjMDk0NzQiCisgICAgICAgICAgImQ5ODA5NGViNmE3ZWYwMzMzZDY5NzFjOTM4MzZmZTAyMzJmNzE4NDYzZGM5NTQxODUzNDYzYmMxY2YwMzY3N2UiCisgICAgICAgICAgIjc4NmVlNTJlNzI3MWMzYzExYWMwMDU1M2M2NzUyNzA3ZTBkZjkyODBjNGYyYjdkMTlmZDZmM2Q4YmJjYzdiZTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi4xMCIsCisgICAgICAgICAgIjc2NzJjZmMyN2E0MWQ1MDFhYTRjNDFiYWFiZjQ1MjVhN2M0NTVmYzgiLAorICAgICAgICAgICI0Y2VlYTFhODk0NjRhNWQyZjg5ZTA3ODk1M2NhZjc3NjM2NTg5OGE1YmQ1ZThlNDQ4YzY1ZGEyNmZmOTg5MDBjIgorICAgICAgICAgICJkMDgwNjFlZjQ0NmM2OWI0OGRjNDYwOWVkODY1NGE2NDZkNzA4MjYyY2I4NDA5YWMyN2M0YTQ5YWRmZWQ0N2E4IgorICAgICAgICAgICI1YWQ0MjllZDc1MDc3NTc4ZTRjMjczYzYxZTJjM2I0NmJlYjQ3MmYwYTM0NWEwNWQ2MWE3ZWFhYWQ4YTYzZTBiIgorICAgICAgICAgICIzZDQ5NTJmMjdjNDA4MTMyOWUiLAorICAgICAgICAgICIyNTJiMTQxMzNmMWRiMjUwMTMyOTM1MDFlMzU2NTM0ZjI2YWZlMzM0Njg4ZTY4ZDc5MTgzM2EwZDgyNTYwNTcwIgorICAgICAgICAgICJiYmIzY2UyYjE2ZDhiNWY3Zjg5ZTdlYmM3Y2Y5YzI5NGFiMzQxNmI3YzIxMTg3NzA3ZmU1ZTc5OTJlNzIwZmY5IgorICAgICAgICAgICI1OGRhYTQwZjVhZDQ1YmM3NDc0Nzk2MzlhNTM3ZmUwYTRhNzVmY2ZiNDVhNTNmMDE3M2FmYzBmM2NjOTEwYjg2IgorICAgICAgICAgICJhZTMxMzc2MjhkOTBmZjY3NWFlMWFlMzFlMTY0MDUzN2VhMWE3Y2NjZmI3M2Y4YmU1YWVjYTAzYmFiMTkzYmIwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDIuMTEiLAorICAgICAgICAgICJhMTZhZDhmMmUwOTMyMzQyZWQyMWUxMzc3N2Y0NjUyYTM1NTBkZGI0MzY4YjVlYTcxYzY2ZGJjM2JiZmViN2RiIiwKKyAgICAgICAgICAiNTU4ODRjODMwZDRhODBiNzlmMDg5ZGE3NGRjMjVhZTBjNDgyNDYyMTQ1ZTFkMDk1MjNkYTNjOTM0NGJiOTdiMCIKKyAgICAgICAgICAiNTJmYmRjMTU0M2RmYjUzY2YyMzc4MjU5Njg3YzdiMWIzNWNhZjJmOTE5OTllZDRhY2UzOWFmMTBkNmJlZDBmYSIKKyAgICAgICAgICAiMjI0NDRjMTI5ZDkwNzQxY2ZjZGE5MDE5OGUyNzgyZmIwM2JkY2M3Y2ZhZmQ4OWRiNmZiMGZlZDIyNCIsCisgICAgICAgICAgIjA4MzI2YWZmNmQwM2NjNGUyNjEwZGQ1MzZhZjdmMjFkNzYyMjdkODI3ZDUyODBkOGI4M2FiOWViMzBlMDc2OWMiCisgICAgICAgICAgImZhMDJiNWMxMzUyYmY0ZDE3MGNlYjY2ZjhiZTY5ODc4NGUxYTZjMjAzZmE1YWI5MDA3YTZmN2ZjMjA2NTIwNGIiCisgICAgICAgICAgIjk4MmZhNTYxZmJiMzYxYWYyYjhlZWE0MmFiM2ZlYzBlZDA4NjIyZTVmMjg5ODA1Mjc1MzgwYjY5MzQyYTk2ZjciCisgICAgICAgICAgIjZhOTkwNDg3Njg5MGQ5MmYyNDAwMjAzMjM1MWQ4YTFjYmMzZDI3YjI0NjQ4MjFiYmZiZmJiOWE2Nzg1MTk2MTAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi4xMiIsCisgICAgICAgICAgIjRhIiwKKyAgICAgICAgICAiOGFhMGNlZDE3ZjA5YWRhZTYxMGE0NjAzMGRhZDQwMzExYmYxNDY5YzI3Mzc0MTFlNDBmOTIzOTY3NTFkZDU2NiIKKyAgICAgICAgICAiMzdjOTU4ZGJjNThhMTdmZGJkZGRkYmJmNzk3NTE4Nzg5OGJlMWFhNjNjNWVlZTVmOWExOTAyOTgwZjU5NTE4NCIKKyAgICAgICAgICAiYjliNWI0NjViOTJlMjBmN2FlOGI1YTVjZWU3ZjNiNTdkOTk3YTA2YTcwMmQyMzgzNTBhOTI2OThlZjI3NWRmZiIKKyAgICAgICAgICAiNTI3N2JkMmM5OTk2NDc0MDVhZGJlNGZiM2YxYmU3NWUxNTlhNGM0MzgzMTNiN2ZkOGFjYTlkZWEiLAorICAgICAgICAgICI0YzRlNWFiNjJkMGM5NjdhYjgyOTIxNDI5ZmZlNTBkMjI0MGU3ZTBhMTg3NTQ4ODc1NWJiN2ZmNjE1YThjOTlhIgorICAgICAgICAgICJiYzM3YjJlNDcxNDdhOTI3ZDdiOThjMzBkYjI0ZGE4Y2QzNWUxM2Q3YjcxNDE0ZDAzMmJkMGMzY2UzOGI4OWIxIgorICAgICAgICAgICIxYjJjM2Y5ZDgzMDgxNjcxNmEyZThjY2Q4Yzc5ZTljNzQ5MzFhN2I4YThkYjEzMTI4Y2U0MGIyMTU5ZTQ5OGRhIgorICAgICAgICAgICI5OGYyYWEzNTJmMjM4NTMxMDZiNjYxZDg4ZWQwNmZmNjZhNTZlNzU2NTk3MjIwYmQxMDE1ODE1M2NlNWMwMjYzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDIuMTMiLAorICAgICAgICAgICJiZmZjNDIwODczZjVhZjVkZDIzYmIwIiwKKyAgICAgICAgICAiZGQzMWNjZDQ3ZDRlMzEwMmRmMGZjNTliMWI4NDc3YWYzYTc4YzJmYTljOGVjYjRmMGIzYmRlMjM1MDA0MzY1NSIKKyAgICAgICAgICAiMDM2NDY2NWY4MWMwMzU2YWJjMGI3OGU5NzMxOTExMTQwMjc1Yzg2NmY3NWFkMGNiYmM4OGFkNmI1ZDRkYTUyZCIKKyAgICAgICAgICAiMDhlMjJlZTUzOWI1OGU5MmM2MTk2Mzg3ZTIyMWEwODczOTZjYmU1N2VjNTYwM2Y2MTYyNjI3OTgzZWZmODJkZSIKKyAgICAgICAgICAiMDQ4YmRjMWI1ZWRiYjVkNGVhODRmNTAyMjRiZDg4YTkwNWRhIiwKKyAgICAgICAgICAiMGRhMmQ2ZjdiY2I1MGE0NzJlZGEyNDYwOWRhNjc3MjhlNTNjOTg4MGFhNWZiNmZiZTYwZDgzYzExZTZiYjNjZiIKKyAgICAgICAgICAiZGIxN2QxNGRiY2U4ZWM1NWM3M2FiMDE0M2U5YjI3NTZiYjY5NjhlNWFmMWFlZGNmNmE4MGMyNmQ0OTBlNDcxOCIKKyAgICAgICAgICAiN2VhNWQ4Y2QyZmFjYjgxY2U2NGE3MjNjNDBmMGJhNGM2OTNlMWIxMTQzZGYxNWE0MjA5MTcwOWFiNGM3Y2Q5ZCIKKyAgICAgICAgICAiNDcwNzllY2Q2OGY2YTE5NjQ0OGE0NDY3OWEwNDE0MTA0MThmMTFhMWUxYmNlNzhlNzcyNjA0YTJmMjc3ODE5NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjE0IiwKKyAgICAgICAgICAiMWE5Yjg3MjkyMTBhODQ3MWZjNWNkNzA5ZjJlZGQzMjQwMTUwMjQ0YmVjOTZhOTJmZjgwN2UzYjMwZDI5NWQzYyIKKyAgICAgICAgICAiMzQ1YzA0NGYyZTk1NjAzNyIsCisgICAgICAgICAgIjU4NzhjOTFiMTY2ZTkwYzM0ZTZlNjY1NjhjMTUxZjRkNDQ0MzQwYjVmMWQ3MzA1MmNjNTYzM2VhMmU0N2FjZWQiCisgICAgICAgICAgIjdiMTc4YTY0ZmIwOWE1YWQwODQ2YWVlNDExNmQ2NzgwZWU3NWViMjA4NTE2Njg4MjBjZGVjMGYyYzQ5NmU0YzIiCisgICAgICAgICAgIjg4ZDgyNzljMWM1ZDRlYzAwZDk4MGMyNzJlODcwNTE4NDg2ZGNhZWE4NSIsCisgICAgICAgICAgIjM3MDBhYzM2MmNmNjBlMTYzOTQ3YTE5OGQwMGYzYjNiMjZlMDNlZTJmYjc4MmI0Mjg4YjhjMWRlNzZlOWU4OTkiCisgICAgICAgICAgIjQ2Yzk4MDdjNTZlMDljN2I1MmJlMDA3OGFjZjY5Mjk2NGFjYjk3ZDFmYTVjZWI1Nzc2YTFkNTU2YjRiYzlkYjAiCisgICAgICAgICAgIjBiZGEyNTIzN2E3NTFiN2MyMjliNmI1N2Y3ZmY3NTFjMTJkMWYyMmE0ZmIwZTkwYjYzZDA0MmQ5NDk5ZTBmN2UiCisgICAgICAgICAgImZlYWRkM2M1ODhmMmM3NDNhMTJjNTY3YzgxNTc4ZGJlZWJmZDM3NzRkYTM0YWQwOWVlYmU5MDE3ODkwMjE0YjUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi4xNSIsCisgICAgICAgICAgImE2ZDBlOGMxZWE0YWI0ZWNjODk1N2Q2MjI4MTU3OTY3NWE2NDhkNjJiN2YyMmIyYjA4ZDEzMTNmNDA2ZjEzN2UiCisgICAgICAgICAgIjk5NDI2NzM1Y2RiOTM3MmZlY2ExZWU3ODQ2M2ZhNWRlOWNkZDg0NzU2YzY4YmQxZDkyYmE5NjVmNTA2NDEwYjEiLAorICAgICAgICAgICIxYzI1YzliODMyMTY5YTFmZGI2YzE0OGU0N2U2NmMzY2M4MjE0MWU2MTFhNmYzMGNjOTBjNTA0OWU4YzUwMmIzIgorICAgICAgICAgICIxY2FkYzc2MjM5YjdiZGFmOTNmYTk3MzQzZTdlZTU1MWJjNTJmZGI1ZWM5ZTQwMGFmMDVkYmVhY2RhIiwKKyAgICAgICAgICAiMDBlOGIyZmM3NmRmYjRhNmNjNDM2NGRlOGY2ODNjM2ZjZDBhOWVjZmJkNGE1YTcyMjRmNDlhZTliNGYzYjVjZCIKKyAgICAgICAgICAiYzcxY2JiOGM2NmZkMzVmM2QxOGVjYTk4OTY3YmQ0MDA1ZGY3OTE1MjQxNmZkNDdlNTYyYzU1ZWRjNmQ2MTIxMiIKKyAgICAgICAgICAiMjg2ZWY5NzViY2M4MDI2OTI1OTI2NTM5MDA5NzNjNzJlMDFhNjkzYjA1ZmMyZDU4NTZlYWVmN2FjMDhmZjVlYyIKKyAgICAgICAgICAiZDUzMWUyYzJjZTkyNzc0NWExMTY1YTUxYWE2Njk4YTFmZmNiODdmODFlZjY1MTBiY2FmOWNiNzYxZTllMWYwZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjE2IiwKKyAgICAgICAgICAiZjM0MDViMjE4ZjNlYzYwM2E5ODA2OTAwOTljMmNmNWNiZTBiMmIwNTk2NzljNDZiN2U0OGY2ZmRjNGRhNDA5MiIKKyAgICAgICAgICAiZDgzMWM4YjUyYjJjYzc5YmQyYmJmNmU5ZjU3YjRlOGNhYTk0YjU4MWY5ZjIzMTI2MWYwZTJiYmJmNTNkYmIiLAorICAgICAgICAgICJmNDcwN2Y1ODY0MmI1NGNiZjgwYTliNTA0OGE2ZWMwYmQzNWQwOTU3MTZkYjEyMDYwY2JmNTA1ODVmYjkyMzc5IgorICAgICAgICAgICI4MTA1MmY3YmIxNTgzY2Q4N2JjOGJmYjU1YjczM2U4OTBlYjljMDhlZjBlODgwZTliYTBkNTBlYzk1NDEiLAorICAgICAgICAgICI2ZDlkMzkxOThiNWZjYjEzMmQ5MzE1MTE0OWQ3NTk5MTAyNGFjMjJlYjZlYjJkYzdjNjA1OGY2NDg3NTY0NTEwIgorICAgICAgICAgICIyYjk1MjU0ZTI1ZTlmMGFlNDUwNmQ0M2M2MDFjMTg4YTMxNGY0YmI0ZTAzOGM4MTUzOTQxNmUxMDVlODA5N2ZiIgorICAgICAgICAgICI2OTVhYWIzNmZlZjUxNmU2YTMzZjM2ZjdmOTVhZDFmZjE1ODg5MDI1YjFiMmU4MWUxYmYzYjJkZTViYTkxODdjIgorICAgICAgICAgICJhOTZjZWJhOWZjZWNlZjljNTNlNDk0MzQ4NjE4NTk2N2NmN2E2NDc3YzMyOWYwMGVhNjk1NTI1YmNhOTlmMmM3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDIuMTciLAorICAgICAgICAgICI2YWZhZGJlM2RhNjhkOTAyODViYjhmMWUyMTI5ZmZlYmIxYzY1Yjk1ODhkNmMyYzA0MDI0YzIzOGIyMGM2NWQyIgorICAgICAgICAgICJhY2E1ZTM4Mjc2MDAwYTBlNmEwZDA1MzdlZmVlZjZkM2UzZDk0ZmI5IiwKKyAgICAgICAgICAiZWUxNzZlYTNjZmQ0OTBiNmMwNDlkMmU3NGM5MGMwZWU3NDY4NTIwMzQ5Yjg1MTY1M2RiMDU4YTFjM2U5NTZlMCIKKyAgICAgICAgICAiODg1ZjI2MWI2ZTcxY2YxZTYyM2QzYjlkMWQ1NmZhMTM2N2U0N2ZmMzc0YWQzOTMwOWZmYTJlNjcxMTI4ZDVhYiIKKyAgICAgICAgICAiYjRhNjFhNWIwZGMyZGIyYzA4IiwKKyAgICAgICAgICAiNjcyZmU5NTE1OWE5ODkzZjM0OThiNjE2YzE3YjU5ZGE3MWRhODAyZmViZjdjZDM4MTEwNjE0YTFiMjVkOTZhYSIKKyAgICAgICAgICAiOGE3NGFhYWEyYTBmMDAwZWY4YWNhM2I0MWFkMTYxYjYyNjMzZjI0MTMxOWMzM2U0ZWNiNzcwNmFiM2FkYzZhMyIKKyAgICAgICAgICAiZWZlYTIyNDMwZjNmNWM5YzRjZTU0MDRlYjhlNzVhMTA5MzY5YzBhYTBiN2RkNzEzYmQ4Yjc3Y2NhNWY3NGJjYSIKKyAgICAgICAgICAiNWJjNTU1Njk2YjY4ZTExNzJkYjQwMjUwMWRjZDI2NDk2ODVkYjBmZDg4Yzg4MzYwZGFjYzY1MDlmZmE4ZGZjMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAyLjE4IiwKKyAgICAgICAgICAiNmQ5ZjliNGJiMTIzYmE5MDk1NTNhNzU3M2E5NzFmNjRiNzI1MjRjZmViMDQyZGUzOTIxNWY2NTBkYjYxMmQ2NiIKKyAgICAgICAgICAiZDdhZTg2MDVkMDQ0MTk1NDYyNWZhOTgxMjIzMzBlOTIiLAorICAgICAgICAgICI3ZmY4Njg1YWVjZjM0MDI2MTM5MGFkMDc0MjczMGNiNjM5MjgzMDE0YWIzNzczNTU2YzY5N2Y5N2VmNjIxYTRkIgorICAgICAgICAgICJjYmY4ZWM2ZWRlYzUwZDhlYzk1OTBhZGJhZjIzNTFkZGZhMGU1MmVhNmVkMThlYjZjMzc4ZjM4MDg1YWU1ZWU0IgorICAgICAgICAgICJjYzQ4YzE4OTFiYTQ3YjIwMTBkNWQ0MzUzOSIsCisgICAgICAgICAgIjhkMzA2NTVjZjE1YmYxMGE0Njk3ODdjNmExMGU3OTI1NGZmMGJkMTE5MzhiYzYwYTgxYTc1OGQ5M2NmMmEwMzAiCisgICAgICAgICAgIjI0NTlmYzJmMGQ3NzAwYjg2ZGQ2ZWQ2MTgzODNiNDRiNDU4NzA0Y2ExMTkyOGU1MDRmMDI4ZWZlNTAzNzE3MmMiCisgICAgICAgICAgIjNlNTFiODM3YmU2MTU2ZGU2YTA5YzU1NTk3YmU3NGM5N2NhYTFkZWJmMzE0Y2Q5NGI5MWI5Zjk0Y2JmNzY0MGYiCisgICAgICAgICAgIjg2YzI2ZDFkNmEwYjEwNDYyOGI1ODcxMTRhYTMxZDk5ZjY5Y2Y5NTczNzkzMmMwY2I1MzMzMzc0ZGVhMDdmYWMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMi4xOSIsCisgICAgICAgICAgIjMzY2NjYjU5N2RlOTVjZWRiOGI2NTdmY2Q4Zjg4ODg2ZGEwNGM3NTc5MzUzMTQiLAorICAgICAgICAgICI1MzQyZjQ2ODQzOTFjZDc0ZjUyODJkYjgzMTQxZmZmNjc4ZjIzYTNlYTY1MmUwZDQyN2ZiNmFkOTc2YzVhNzEwIgorICAgICAgICAgICJhNjM3OTU3NzcxODk0N2FjNzI3YjRkNThhMGIwYmQyMDdhZTM3M2E4Yjk5YWM4ZTI1MWViMDI0NThhOWVkYzM5IgorICAgICAgICAgICI1MmZiMjg0MjZkMThmZGExOGE4MDJiYmYwYTBiOGIyY2YyNWNhM2EwMjJmNzc4YzdmNDdmYzUzMGQwYjdhNWJjIgorICAgICAgICAgICI4NDZlZWE5MTgwZjIiLAorICAgICAgICAgICI4YzRhNjNkMDczMWUyZTcxZWI0NjE1MTg5YTk2OGIzZTRhMjQyODU2YjIwOTAyNDUyMzhiNjY0NTk3OGYxZWU4IgorICAgICAgICAgICJkNzk4MTEwNjJlYmQyZDFmM2Q1MjNhZTYwMGUwZTVhNmU0MDVjNGU0YjVhMTZlOGRmYjQ5MjQzMDRiMGQxZmY0IgorICAgICAgICAgICJkNjQxYmY5ODdmYzZkNDFkM2ViN2NkYzUzMTM0ZDAwNjljZGI1YWZlZjdmOGY5Y2FjMGVlNTIzMGI2Zjg4NjIyIgorICAgICAgICAgICJhODRkZTUyYWQ2Zjc1MDQ3ODQzNzA2Y2E5Njk3NDJjNThkYTc3MjYyZmYxZjEyOGE2NjRlNTFjZDYzNWU3MTE1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDIuMjAiLAorICAgICAgICAgICIxOWQ2IiwKKyAgICAgICAgICAiZWFhY2I1NzhhZWFiZjY5ZDRlYWVlYjM2ZDA0Y2Q4YTIyZThmZDdhMjVmMDQ0M2ExMWU0ZTA4YjNmZmFjMWUwNSIKKyAgICAgICAgICAiNDIxYTg3NmNjYTkxMzE4MjUwYmVmYWZmZWY5YjI3NDlkYzQwMmZhZDRmZGI3YzFiNjZhYTVlMDg5ZmY5OWY4YiIKKyAgICAgICAgICAiMzAwY2RjNDZmNDhmNTY0OGM5NDA4YjVmOGIzZjVhMTJlNjUwNTBkY2JjMGQ1MzQzZDYzZDU4MDgxOTIxNjUyZCIKKyAgICAgICAgICAiNWJjODJkZDNkNzBlMDc1ZDMyZDgwMmMyOTc2NDc4ZmM5ZjA5OTNkZDA4NTljOTBlMjI4ZTg3IiwKKyAgICAgICAgICAiNjEzYmJhNWMxOTBhZDc3MmUwOGMyOTA3NmUyZTllNWYxMmVmYzkyOTJlM2I1Y2VlNTJjMjY5N2ZiN2I2MDdkYyIKKyAgICAgICAgICAiNzJlODI1NzhlOGI3NTNiYWNhZGYyM2I0NzcyNTIxM2RiODlmODg3M2ZhNzliOTE0YTRiNTE2MWVmZDllMTVjZiIKKyAgICAgICAgICAiYThkZDFlZmZlODlmODk0N2E2ZjM4MjZkYzZiZjUzYmVjYTM2NWI5MzgxMTg0NTYyYTc5ZTIxY2EwZTY4ZWJmMCIKKyAgICAgICAgICAiYWI4MmFlNzYyYjI4YzE0MzY1MTUyYWUwZjU0ZjJlOWQxNDQzOWE4NDZiMzgzZjVlMmM1NWVmYTcwMDg1OTdiNSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJiOTMwOTZkMDI2MWVmZTAwMGIzZDE3MDRmNTA0MzE2MGFiZDNlYjU2NmM2MWU1M2M3NmM0MDFlMmI2NTUyMWJjIgorICAgICAgIjEyZDQ4MTIxNTE4M2U4ZjQ2YzJjYThkMDBhZGE1ZGZkMDRkY2Y3Y2YzNmNjNTgxMTA1ZDk5ZDJhN2RkOTRiNTYiCisgICAgICAiNzYwYTY1NjRmZWU1ZThhYWViMDYwN2UxNDUxOTYyMTBhMzFiN2VkOGRkMmFmMzJkMjlkMmJhZDZmMTVmZmE1YSIKKyAgICAgICIxMWRjNzM1Y2MzNjIxOTAyMWVlOGQxZWVlZDM0NjM5YjVhOTFhYzZhOTI2NzRlMTgzOTcwYzU5ZDViMTk2ZDRiIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjAxMDdlYTYxYWRlY2E1ZTkwMDdjNTkxMzRhN2QzOGZjN2FmMzEwM2FkMmM0YTJiZWUzOTcwOGJlZmM4M2RjNzkiCisgICAgICAiYjcwZGM5NzU5MmRiNmRmNzBmYjNjNDljMjUzNWZjZmQ5ZmMyY2U3YjA1NTM5MmUzZWViM2U3OTc5M2NjMWI2MCIKKyAgICAgICIxNTNmNGEwYmZmMjZiZTY2N2JiY2RiYmY2ZTMyYWZhNmZkMTQ4MzdmM2M3OWJlNDRjYjFjNjM4ZmZhNWM2YjE3IgorICAgICAgIjcwOWE5NmUxMjcwMzBiYjExMTZkZWNmZGU1MmJiMDQwODQyYTk0ZDJlNjc0ZjExNzUxZWNiOTAzZWUxMDQ4NDUiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjEiLAorICAgICAgICAgICI0NGU1NmFhNzdiZDkzNWFjNTlhOWJkMzIzNzgzZTEyNzQyIiwKKyAgICAgICAgICAiOTJlZWY2MTlmMDRmNTIwMjhmNGNjM2U1MjQxZjBhYTA5MjFiNGQxODNjMWY1YmQ2OGQ4NmZiZTllN2I3ZDBiYiIKKyAgICAgICAgICAiMTA0ZWQxY2FlMDdhYzdkODBiZmQ5YzFjZWZmOGRjZGExZGNjNjkzMGY0YzU1MTM3MzQ2YmZkNjhjMTlkODc5NyIKKyAgICAgICAgICAiMmY3ZjM0Y2JhZTU2NjMyNjBmZWI3OWY3NjAyMjFjZDY3YmUwNjZkNWFmMGYwNzNjMGYyYzQzOWU4YmNiNzQ2MyIKKyAgICAgICAgICAiZWRlNDRjOGIxNTBlYmFmMzI5ODcyNmMzIiwKKyAgICAgICAgICAiMTU5MWQxY2UwZmFkNjZkODZmZDQyZWZkYjMxZTlhMDI4YTMxNTdmYjA5MTRiMjQ3ZWIzZDIyZDc2Zjk3NjliMCIKKyAgICAgICAgICAiZTE5ZjZjMDY0Y2ExYjk4OTA2MzllZTZlMzdiNzA5MjI0ZDZiNThlYmI2NTVhZTRiNjllZDRjZDc1ZDgxMjkyMSIKKyAgICAgICAgICAiMTdjMDY5MzBkNDJhYzRkNDJlYTczNTE0MjE4ZjQ5ZWEwN2NhOTc0MzY3MDk2ODNkNjdhOGU5ZTgwOGRhNjlhNSIKKyAgICAgICAgICAiMGI3MzljNDJlYjBkZWI5NGEzNDk4ZmM1NDUwZWI2OWFjZTIzNzY3NjYxZmVkZjM0MTgzYTFiNmY0MjVkZDZhMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjIiLAorICAgICAgICAgICJhNzU3MzgyOTFmYWQ1NDEzOTU3ZmEzYjlmM2IyY2FhYzlmNWEiLAorICAgICAgICAgICIzYTE5MWFhZjQ1ZWQ0YzI1ODkyMDVkOWNmNmEzMGYwNzcwMGUzOGJlMDYyNTYyNDMwMThkMjNjNjg0ZGFlY2U3IgorICAgICAgICAgICJlODY3ZTM5ZDc2YzZiNmYwMzU0M2ZjMTVhZjgxYmY4NGY5NjRlYWYzYTk1YTRiODA4NjI4ZmQ1MTU1Mzg5OWY4IgorICAgICAgICAgICIxMWMwOGM2MjYwOWM1MTRjZmExZGJiNzhkNWE1YjMzY2MwYjg1N2ZjYjFlZWNjNTMxYjEzMjYzNDQzOTA1OWY1IgorICAgICAgICAgICI1YTczM2UxNDZlMWNhMWViNWE5N2Y0IiwKKyAgICAgICAgICAiNzBhYWY3MjQzOTZjMWFjNTBlZGJiZmU4MzQxYjA4N2JhMGZmZTI4NzYwNWE4YzNhOGNjZjg1YWIyZWQyZmUyMiIKKyAgICAgICAgICAiMTU5ZDYyYWEwMjc0NzZlYmJmMDc3MDAyNmQyZDNiMGMwZDc3MzRmYWFhYThkMTVlMmNlNTFjODU1MzVjMjZiNCIKKyAgICAgICAgICAiMTUwYWQ2MzQ2ZTNiZmQzOGRiNWRhY2Y3NTJlNzVkNzUzMTQwNTRkMTY3YTk2ZDgxOWYzNDM4YTdiZWM0NDY3ZiIKKyAgICAgICAgICAiYzU2MGE2OTQ0Njk0ODVlOGU3OGU0N2U0ZTgyNzdjYTdkM2ZkMmFkOTRhMzA0NjRjMjQ1Nzg1NDcyNWM2MTYxNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjMiLAorICAgICAgICAgICI4NzMxMmY3ODdkZTA2NTk3NTBkNjAyYWMxMTAyIiwKKyAgICAgICAgICAiYTIyOWUzZThlZjFjYWE2NmNhZjBkOGFjZDhkNjZiOWU0MWNjNzcxZjI2ZTIwZjEyZWNjNmUyYWEzODQ1NTEzZCIKKyAgICAgICAgICAiZDEzNGY3YzZlNTc0ZjQxYjIxNWQxZDExMTc1NmRhZjk3MWNjZjM5Y2NkY2U3ODE2MTlkNzk3MjBkZjkxOGQzMyIKKyAgICAgICAgICAiOWM4MjZkYzA0OWIzOTA5MTdjMTdiYTBmYjEzMDJmZmYxMTBhMTRkZDIzODQ5MDI3NDFmOTEyYjI2YTFhZGJlMCIKKyAgICAgICAgICAiZWQxZThmZDk4OTcxMGI0MDNkMjdjNGUwMThmYjliIiwKKyAgICAgICAgICAiMDMzODQ2ZDc2NjRjOGY5MjYyNTdjN2ZkMzI2NDQ4NDc5MmFjN2Y5YmM4NzU4YTdhMTZhYmI4OWZhM2NjYzRkMSIKKyAgICAgICAgICAiM2ExZWVkODhhZjczMjNiYzNjNzRlMjNmZGFiNTAzODE4OTRjODYyNmRmZDBhYzg1ODlkNDYyMzRkM2MzNWYxOCIKKyAgICAgICAgICAiOTk4MTc5NDQ4NDMxZGM4MTZmYjYzZTU1Y2YyNmQ3NGE5ZDJhMDkzMjY3M2NiNGJlYjgyOWNkN2Q0OTUwODg0OCIKKyAgICAgICAgICAiYzZkMGMwMGQ1YzcwZjdmYjQ3Njc3MGU0MDMxOTIzN2M3ODZiZjRlMjZjNDhkMmNmZDk2ZWUzNjJiZjI5MjgyNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjQiLAorICAgICAgICAgICI5YTJiY2E3NWUzMjY0OTc3N2I5ZjEzZWMzMGZlMTZiYjhhYjQ2ZDZkNWUwYzY0NjNhNzNkOGMzNjYzYWRhYmM3IgorICAgICAgICAgICIyM2JkZTcyYTUwNzY1ZTdiMzAwZWY2YjU2MWRlZTg4NDg0ODgwZTRkNjEyYyIsCisgICAgICAgICAgIjhiZmFlOTIyMmY3NWEwNjk5OGVkNmQ5YjE0OWU4OTA1Y2ZjOGRiMDU1YTBlMzJhY2VkZjgyNGQyZjZiNWI0MmIiCisgICAgICAgICAgIjNhZWFjNmE3MTA0ZTE0NGQ1ZTQ4MzQyODBlMzY0NDVhYjg1MGYzYTZkZTE2NGMyYzc5MGZlN2Q5ZDdiYzdmOWIiCisgICAgICAgICAgImRiZTI1MjE3ZGEyZGVkIiwKKyAgICAgICAgICAiNmVjNWY1NTljOGEzMjBkOTBkMWViNWVmMDkxYzRkMTI1NWEyNGE2OTE5NDEwZWIxZGY2NWE5N2IzMGNkZDdmYSIKKyAgICAgICAgICAiZTE4ZTY1MTJhMDI3ZTk3NjcwNGI0ZmEwNDQzNzQzOTNkNTAxZTJiYTQ2MTg2MjAwZWYwZGRkZjE5Yzc1Nzc1OCIKKyAgICAgICAgICAiZTQ2Nzk0MzBiY2Q5ZmQxMTllYTI0M2IzNDlkY2Y4MWMzNDMyZDMxZmJhOTExZWM2ZmM2ODZlYWFkZmY2YjlmZCIKKyAgICAgICAgICAiZjUzYWE0Yzg1YTQ5YTIyYTA1MWM1ZjE4MDdmMzA4M2IxYjNlNjExN2I0ZWYxMjA4ZGUwYTgwMDFkYzI5MWM0ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjUiLAorICAgICAgICAgICJkZmQ2M2U2ZWM2MWUwNzI3NWI4ZTM3Y2M2MzY5ZTFmM2VjMGJmYzU3YTI5OGI5MDVhZTVkMDc3NGUwZjUyMmU2IgorICAgICAgICAgICI3NTljN2QxMTZmOGU4ZWZlNjk0NTBmYTdhODM4OWY4MSIsCisgICAgICAgICAgImM0MjIzNzdiODk4NjRiMGRmMzhiNGY5YzE1Zjk4YTA1OTY1NWUxYzliMGM3MDk2MzVjYTYwNjQ5ZDhkMjQ3NWUiCisgICAgICAgICAgImUxNmNiMTI3ZjY3NjM5MTI5NjRlMTk4NGQ2ZGFhZDRkNmFiZDA0YjA0NjE4YjMyZTUzMjViYTk1ZWI1ZTc2ZGIiCisgICAgICAgICAgImQ0NmQ5ZmI1OWRmMDdhMDgxZTk1NmNiMDczIiwKKyAgICAgICAgICAiOWUwNmNkOTFhNDRhOWFkZWE2YTc5ODAzZDNlNmJiYWIxN2RiMTA2MmI2NTEwYmVkNDAwNzU1NjY3NDk1NDRjMCIKKyAgICAgICAgICAiM2Q3YTc4YjEzN2IwZGMxZTY2MjYzMjFmZWRhZmMyMGRjZGJmNzA4MGY3ZjViZGQ1Njc0NGNlOTk5Zjc2NzA1YyIKKyAgICAgICAgICAiNGY1ZTZmYTE1ZjQ2YzVhZTUwODA5MGRiYmM4NWZiODY4OTljOTU3ODYwOGRmZDc3OGFhNGE3OWQzZDczNjM1NCIKKyAgICAgICAgICAiY2NmYmZhMmM4NmYyOWE3YTU4NDUzZDc1N2ZkNTIyZjc4NDA4ZDk5MTZiMWJkMDY1NGJmZmU2ZTA2NmJhZWI1MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjYiLAorICAgICAgICAgICI1ZDkxZmJjMWE3YmE3OTkzOWI4OWEyNDA4Y2NlOGVkNGJiMjY2NmRkZmUwOWQ5MTkyMWEwYWE2OTA5NmE5NTY5IgorICAgICAgICAgICI5MmMyMWMiLAorICAgICAgICAgICJhZjA3ZmVhMzIxZWFhMjY3YWY3ZjA5ODA2ZjllYThiNGNmMTM1ZWQ2ZjE0MzJkNTFiMjhmOTI0NDg3MDljMmVlIgorICAgICAgICAgICI4YWVkN2Y3M2I2MjgyY2JmZDM3ZjgyZGJhODcyM2U1ZTVlMGE4MWY1OTBmODJlMmZhODRjM2JjMDBjOWI5ZjkxIgorICAgICAgICAgICJhYTU1M2I4YjJjMDc0YmZlY2FjMmY1NTIzN2Y0Y2I3MDU0M2FiYTQ5OTQ2OGNmNjg0NGMzIiwKKyAgICAgICAgICAiNzYwNTBlMjI2NDIyMGUxMDA1MmM0OWI5NmNjODQxMWUzOTZhN2E2ZTRhZWRiMDZiNDhmZGIwNzFkZTgzOWI0MCIKKyAgICAgICAgICAiMWNhYzBjNDY4ZGU4ZDFlZDBiNTY4Y2U2OTBlODAzN2FmNWRlZjZiM2QyZGJjN2I1ZjJmYWRlMzU2YzI2Y2ZmYyIKKyAgICAgICAgICAiZGQzMzQwMzNlYTJjOTk3NzkyZDkzMGE3MjY0NjEyNWMwZWU4NmE0ZGQ4NDNjODI0YzdhNTJhYzk4OGM5MmU2YyIKKyAgICAgICAgICAiNjliNTgwNzYxYzQ5ODgxZjI5ZGQ4YTc2ZGE3OTNmNDMyZTdkNWRjNzMxYTI1ZTViYjUwMjU4ZDAyNzM5NWZiZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjciLAorICAgICAgICAgICIwNGVkZDgzYzY1NjU2YTAxIiwKKyAgICAgICAgICAiODhmOWEyNzE5N2Y5ZjI1N2ZhODFjMGUzMDU5MGI3M2U5ZTExYzc2YmM4OWUwODUzNmI0YjY0YTI1MDZhZWIzMyIKKyAgICAgICAgICAiYjQ1MDc0NzMwODA5YTA1YzQ1YjliYzk1NzE3MzY5Y2Y5MmMxYmY5ODZlNTNiYTExMjM4MzMwZmRjNGUwNWVhMSIKKyAgICAgICAgICAiMDczMzRhYjMxMTA2YWViZDljNmMyOWU1MDFhNTdkOTk3YzAxYmJjMTAxMGJkNTJmMDUzOGI5NTE1OWYzOTEzMiIKKyAgICAgICAgICAiMGRlNmRiMjNkODE2MmNmMTQ2NTg0YzZlMDc2YzRlYWU4NjIwNzJlYjViIiwKKyAgICAgICAgICAiNzkxYjM3OTE0OGE4M2EwMzRkMzEyYTgyYmJiMzdiMTExYjQwYmNmNmEzMzdmZGUyODliMDhlMDcyZTQ0MDMxOSIKKyAgICAgICAgICAiNzNmZjlkMGMyN2Y3MGQ2NGE4ZWFmYzZlYjVmOGViNGU1MmUyYzQxOTdlY2ZhNTQ1ZWQ2M2FlOWExMjgzNzlkMyIKKyAgICAgICAgICAiZjU2MmExOGZlM2FkMTQwNTI3NjdmMDU0MWI5MDE2ODE4NWNiYjc4ZGI2MDM4MWMwOTJiYzIzZTFhYTA1YjQwOCIKKyAgICAgICAgICAiOTJmOWExMTZlNjI1Y2IxNDhiNTYwNzQyY2MxMjc4YzRkMjFhNGE3ZDM3ZjY5ODJhZWUyN2YyYTRjMGM1NzNkMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjgiLAorICAgICAgICAgICIzZjdlZWE3ODFiNzdkODVmZTM3MWIzZTkzNzNlN2I2OTIxN2QzMTUwYTAyZDg5NThkZSIsCisgICAgICAgICAgIjQ5OTljNjRjYmZhMzg1MjRhZGNhYjY2ZjY0NDU0ZDM2ZmJmY2IyOTg2ZTFmYTQ3NTNhMGUwMzg4OWZmMDZlZTEiCisgICAgICAgICAgIjYwMGVlZTIzYmU1M2E5NzQ0MmI0MmM2OTYyMTg2NjYzMmU0YTZiNmExYzcxMDU3MzI2MWQ3MWYzOGFiZjllNTIiCisgICAgICAgICAgIjQ5ZGRjOGUxYjc3YjNmMTI2YmEwODgxNWM0ZmU2MzMxNGY5YjllOGU3YTQwYzdmYzcyODYyNTIwZWQ0OWQ0MTIiCisgICAgICAgICAgIjU5YWIyZTBjIiwKKyAgICAgICAgICAiNzRmZDhiOTg1NmQ3NTc2ZTBmMTI4N2UwZTkwODVhMzgwMWU2YjY3NzRkYjczMzU0MWRlYmQzOWU3MmNmYTgyOSIKKyAgICAgICAgICAiMWZlYzI3MDE4YzlmNTMwNWE0NGNjYjVhM2NiNTkxZmVkMmU2YTFkMWQ4NWNhYWE3NGRjMjM3NTlkNjY2NWE0NSIKKyAgICAgICAgICAiNzBhNjM3ZjNhYjMwNGI3NjYxMzEzYjk2NzEzYzdiN2U0OTc3MzEzM2RkNWQ0ZWY5ZDI5YTFhZjcxMjAwMTUwMiIKKyAgICAgICAgICAiOGRhYWIzZGYwNDJjNTYyNjIwYWE0OWQyYzAxNDQxNGRmYjE1NzdkNzE5YTk1ODgyNjQ3MTJkZTNiZjRhNzY3OSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjkiLAorICAgICAgICAgICJhMzg1MDhkOTQ2MGM2M2Y0MTU4MWE4ODY5YTc1ODI0YjE0ZjVjNjUwMzIyOTk5ZGM0MTEzNTBkMGQ0ZTg2MjRmIgorICAgICAgICAgICJmMDljZWIwMGQzYmVkYzVkNzYyYTQwYzkzOTgwMDQiLAorICAgICAgICAgICI2YTBhMjg4YTFlNjc0MzBjNjY2YWViZWE0NGI1ODJhOTA5NjljYzAxZTkwYWFlMTA1M2NlNTVlZWI5ODc5YmNjIgorICAgICAgICAgICI2MjI1MzkxNWU5MjJmMTA5NjY2N2JkYTAyYTE0ZTcwNzQ3YjM1OTM1MjRjMjg0ODU0N2QyMTE0ZDFkMGNkY2I5IgorICAgICAgICAgICI3ZWI0ZGY0NTViYmFjOWIwY2MyOTA4MzliNzNhIiwKKyAgICAgICAgICAiYTY3NzU3ODA4ZjVhYmRjODFlZGI3ZjY5MmY5ZmI4NTJmMWExNjYxYzRhMDA5ODA1YzQ0YjIxNmNkM2IxMzIyYiIKKyAgICAgICAgICAiYmIyNWQxNDU4ZTMxYjBmMDdkNjU1MDU3NTljNGI0MTQ3ZjIzY2JlZTJhZjRhMWE1OTM4YTA2OGNlOWM1MzIzZiIKKyAgICAgICAgICAiZjUzZjRiMzkyZTEyNTBkMDM3YjMxZTYyODFkY2RmYjk2YmY0YmZlYWExNDdmMDk2Yzc4NGM5MmY0YWM1NzA5MSIKKyAgICAgICAgICAiMTIyODAyNTAyOWMzYjUyMzMwM2ZlODIyN2U4YjJjYzBlZjE1NzAxNGNiNjczMWFhYzA5YmZlNmZmYTE4ZWFmNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjEwIiwKKyAgICAgICAgICAiZjc4NDA1MjM2YTllYjU1N2FhY2VjNjAwN2RiYzRjMGVkZTc4ZWQxMmIwNGM4Mjg4OGE4MmMyMTMiLAorICAgICAgICAgICI4NmYwNzIzYjMxNjhlMmFlYWNlOWVjMmU5NWZkYTZlNmQ2ZmM4ZDYyOTQ1NTY1NjYzOTlkNzMxMWU3OTlmYWE5IgorICAgICAgICAgICJiMWVlMWYwMzJhYjJlNTM0YTkxZmJjZDA3YzhhN2QwNGE5YjQ4NWYzMWUwNzIzZmQyOWViMjE4ODA2OWQ5YmJkIgorICAgICAgICAgICI3NjI5ZGM2ZTNmYzg5YmU2MDRiY2YwMGM1MmZhOGUxZDZjNjI1NTVmZDFmNjBjZWMwMmQ0ZDk2MWQ4MjhkYWJjIgorICAgICAgICAgICI0YSIsCisgICAgICAgICAgIjZlOGQyZmIwYjJlZWY4MmZjMTEwY2VlMGE5ZDM4NDJmMmEwNThhMjQ0MDdmYTExYmE5MDVkMWFhNTBlOGNjMTIiCisgICAgICAgICAgImRlY2MwNzNkYmQwOGE4YzcwNTE4ZWYyNWRiOTZmZGEyNDExY2NhMDg3Mjg3ODg5NTZmNzNkZmExMjBlMGVhNjAiCisgICAgICAgICAgIjViZmZjOTNiNDNhNDQxYTQzZDBlYWEzZmYwNzNlNjk4MmVlZjUyOTYzOTA2MDdlMjVhNTg4YTM5ODI1NWJhMDAiCisgICAgICAgICAgIjVhNDg1ZTZlNzMyZTNhMTkyMGNkNDNhMzkwZmI2NmQ1NDI4ZGZkNjI4OTc0YjhhZmYyZjA2MDJkYTU3OGQ2MjUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMy4xMSIsCisgICAgICAgICAgIjU2MWQyN2MxZDNmNmQ1ZDFhNjQzYWE0N2U1NWQ3OGViMDBmMzJkNDI4OTZhMzRlMGMxZDcxYmMzYTU0NTdjOTIiCisgICAgICAgICAgIjA1YmVkMTNiOTg0YzUyNTkiLAorICAgICAgICAgICI5ODE3NmUxZDY3YTI0NjJmNWRjMWJmYTZlMDc1OTU0MjEwNGFjMTQ4MTFkMzE4NzkzODI1MDQ1NWM2NWU0YWFhIgorICAgICAgICAgICI3NjMyYmQyZDFkNzUyZTFmMzRjNTNjYWIyNjc2NzZhNzhjMTBjOTk4ZTc3M2ZkOGZmZTM1Yzg2N2M0NDNiZWY3IgorICAgICAgICAgICI5ODY1YWEyZGEyOTE1YTg1YzcwMjYzMjM2OTNlNDU0ZDhhYjMyYTc3MTUiLAorICAgICAgICAgICIwYmMwNDc4M2M2OTI0NDdhM2RlNjFmNTNiNzJmN2FhNDEwMzE2ZGQ1MDlhNmY0OWUzYWJhNTZhZDFmZjg2ZWJlIgorICAgICAgICAgICI5ZTYzNjZlMTdlNTE0NTAwNzZiZWEzNzFkNGM2ODljZDYxNDk1Y2Q4ZmEyOWMwZTg3YjZkYmZhOGUzODZjMmU4IgorICAgICAgICAgICIyMGU0Yzc0MmE0ODdlODliMjc1YTIxODZlMjM4NDBiZTljMDI1MjdiYTcxN2U5ZTYwYjViZjQxNzcxMWRmMzRkIgorICAgICAgICAgICI3YjhlMmQxMmJjZWI4NTkzODVmYTAwMWQ0YjRiZmZiYmMwZWRlZmJkNDAwMjQxODQ2OGM1NjZmZGY2YjgzNTA5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDMuMTIiLAorICAgICAgICAgICJlYjVmOGMwZGM5ZDkwMTA2MWI4MmFlZmY4ZDY3ZDhiZmZjMGMwNDdlY2M0YWEzNDZiMjNiZGJhNjJhODdlOWRjIgorICAgICAgICAgICI3NzBiMTE2OTVmYmYxOTAyZjI0YjY2Y2VhYiIsCisgICAgICAgICAgIjc0ODI3NzBmM2NmNTdlZGI4MTQwZWJjMzNhMDI4MjQ1ZWUwNjQ4NTIwNjg5YTUwZTMzZjVmNDY3ZjZkMWU0MzIiCisgICAgICAgICAgIjRlMWM1MGM4OTllNWFkMmM0NmM5N2Y4MTIwZDFjNzIyMzlkNmE4MmQ4ZjhlYmM4MGI5NzNlZWE4YzU0NTY5MjkiCisgICAgICAgICAgIjUwNDUxNGI0YjE1NjYyODQ0ZjI5NTA2MmYyMWViZDkyIiwKKyAgICAgICAgICAiYjg0MDQzNTRhMzgxYjdjMmFiZTVmNzI4MjVmM2QzMTViZGFjZTZjM2NmYmQ4OGI4OTc2ODYxMjAwNTE5N2M2MSIKKyAgICAgICAgICAiNjYzODgzZjJjMjU3NGY5OTVlYTZmOTRlYjM0ZjI3Njg2MmIzM2Y1OGE4ODM5MjIzNzA2YmUxYzFmZjQ3MjMwNSIKKyAgICAgICAgICAiZjExYmE5NTYyYTBlYjAxMmYxYWFmODVjMjJlODhmMmZkZmVhZmY4NjMzZDNjZmViNWY3NjRmNDIyODkyMGRlMyIKKyAgICAgICAgICAiMGM2YmRlMmNiNGU4ZjAzZDkwZWQ1NDhmNjQ4NTAwMzUxYTVmNDFkZjc0YWQ2NWU4YzNiZWU5NTA1YTdkNzBlMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjEzIiwKKyAgICAgICAgICAiNWE3ZjBlYWViYWU0OWNmNTdjNDc1YTZkYTY3OTQzYTdkMzA0NmUzZjdjN2Q1MGIwOWE4MDk4YjU0NDY5Mzk2OCIKKyAgICAgICAgICAiOTNjZmMwYjJmMDhmNmMyYmZmMjM1MDUxNTc1ZTZlNTYiLAorICAgICAgICAgICJmYjA4NDg4NmRiMzc5OGQyYjViYjM1YTNiMWQzYWY0ZmRmYzA0NTZjYmM3OTdiOTY0MGQ4YzQ0YTBlMDM0ZTQwIgorICAgICAgICAgICIzNzJiMzRmYzdjMWU4YjY2MDExYjRlY2RmYWVjNmVlNGNkYzgyOGNiMWFiNDkxMjc0YWMxZTM5ZjY3NTg3YTU1IgorICAgICAgICAgICI0NzY3MDliNDAyM2ZjNTY5Y2JlOGI0ZmQ0YiIsCisgICAgICAgICAgIjA3Nzg0ZWNiOGNjNWJhMDJkMjA3YmFiMDU1YzBlNTVkMTBhOWI5NDI3MGNjYTI1MGVlNzVmYTFiNWFlMTkwYjMiCisgICAgICAgICAgIjNiOTY5NmViMmVjOTcyYjI2YTBlOTQyM2FmMTZhYTM3ODkxNzYyNzYwNjBhNzY0MDAzMjExMTc0ODI5NjM0MDMiCisgICAgICAgICAgIjRmOTcxMmM5MTcxMDE3ZjJmYjIxM2YyNWMxNDZjMjY1MWY4OTQ0MGNhNTM2ZTUzM2UzMDVjYzZiMDExMzM5OGYiCisgICAgICAgICAgIjYxYjQ2M2IwNzNlMWJlMDUwNzNlOWQ2NGJjYWVlYTU0NDRiODIwYzZhYmYzNDY1NDMwZmY0ZGU0YThiYzBlNzUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMy4xNCIsCisgICAgICAgICAgImY5MWM3MWFmNWFlYWNhZTE3OWUxNmU4N2M5MDIzYmE5NGQ4NGQ3NTE2Y2VjNmMzOTg5ODAxZmIzZTdhZGQwNjQiCisgICAgICAgICAgImJkZGY5MjhiNTAwMDk0MGJiZGU1MzlkNjIzMzc5YyIsCisgICAgICAgICAgImRlYjI2MDI1OGJlMmM4NTMzNTIxNTdiMDY1MjZiMTQzYmExMzNjNGY0OWJmM2RmMmMwNTBlY2IyYzljYTMyNTMiCisgICAgICAgICAgIjExYjNjM2UzZDg4ZGY2YzI0YTg5NGVhYjYzNzQ1YjYyNTNlM2M0NmJjYTE3MWEyNmE0ZjJmYzBhYjYyYjhhMmUiCisgICAgICAgICAgIjYzYTAxOGViNDcwMThjYWI5NTFmNTlmMDIwM2EiLAorICAgICAgICAgICIwZGZmZmY1MTk3MTBjOWVhZGM1MzNiMTA4YTRjMjk3NGZlNTMxODkxYTM0MTA3YTY3NDI3OTM1YmE3MjBjZGM2IgorICAgICAgICAgICJmNmVlMDI5YTFiMDM2ODYxZGIxNDA0YzU4NjQ5OTA1NDFmYTI0MjEzMDFhN2IyNDhjYjExZjM2NWI2YTRhYTk0IgorICAgICAgICAgICI2ZjIyMzFjYmIxNDczMmIwMWFhNGE2MGJjYmU1MjBlYzZjMzg1M2E2OTU4YTkzYzViNjhiODVkNGJjM2Q4NDE1IgorICAgICAgICAgICJlZjhiMWQ0ZjYzMDM4ZjRkOTQyY2E2YmM3YTM4MjUxZjE1YTRlMzNiMTg5YzI1MGJjZmJjMDMxNTZlNGY5MjExIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDMuMTUiLAorICAgICAgICAgICIwNzkwYzA4MWYzNjFjOTViNTlkNTI3ZDNjYjUwNzEwZTY2ZTI3MjU5NTAxMDI1ZWQzZjIwZjMwYyIsCisgICAgICAgICAgImZjZmMyZDU2Y2I5MjZkOTA1ZGIzNmUxZTJlZmYxZmJiNzVkNjUzNTE3ZjU5ZTg2ZjcxYmM0YmM1NTcyNmYwODgiCisgICAgICAgICAgImI4MjE2MjQ0ODNiM2UyOWFjMjFhNDliZDg1OTEzNDkwOGU2YzBlYzFhMGRjODA3OTkzMDE0NDEyMGQxZjZiZjkiCisgICAgICAgICAgIjNiYzYyN2I5OTk2OWIyYWZlMjFhN2RlMTBkOTZmNmVmNDNjNTY3YjVlMjM4Mzg1Y2MxMWE1YTJhMTNlMTc4NTUiCisgICAgICAgICAgIjhiIiwKKyAgICAgICAgICAiN2YwZTZiMzQyZDZhMTM1NDY2YmU0MTczMzgxYWMwNGFiYWFiN2UxNGZkY2Y1MTAxODk4N2U5Njk2NzE2OWFlYSIKKyAgICAgICAgICAiOTc3ODAzZWJiMzI0MmFlOWFkYjQ2ZmY1MTEyMDkzNGIzOTIxNDYzMWIwM2Y1YWY1YmRlYTFjYWNkMzI4YWRkYyIKKyAgICAgICAgICAiZDQwYTNhMjk5NjZiZjk4YmQ3YzhjNmZkMGY0ZThiOTcyZTJkYTEwYzZjYzU1MjA1ODY3ZjM5MDRlZDYwZjViNSIKKyAgICAgICAgICAiYmVkZjdjM2IzYzdkZDVmMzg3NTQ4ZjQwMDU2NzAyZWE3MjAxNzZkY2UyMDZkNDEzZDc0MjNmOTQzZmNkZjYzOSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjE2IiwKKyAgICAgICAgICAiOTNjNDFhMWFkZGE4ZjY5MzYwZjQxYTU4ZWNhMGI1NWVjYjM3YTZhOTAwZmJjN2RhY2Q5Y2EzOTljMjNkMzE3MiIKKyAgICAgICAgICAiNjE1Mzc3YWMwY2M2YjBlZDQzYmY1OTdmMjFjZDI1OWQ4ZjgwODg3YjE1OWQ5NmQ2NjE2MWQ1NTg5Yjk1ZjFmZSIsCisgICAgICAgICAgIjk5MWEyYTdjMDYxYzIzYThlYmM5NDg5YWJjMWI0YTY0YTVkNGU4MzhkOWZjYmE0Mjg4YzAxZmVhZDY2ZDU5ZjQiCisgICAgICAgICAgIjk2MzZlNGE4ZDc1MjRjYjg5ZDdhZGM3YWYzZjYxYWU2YjM5YjU4OGZiNzdlYjcwMjIzNjJmZmQyNmIiLAorICAgICAgICAgICI3ZTU0YTQzMmY1MjVjNTIzMzNhYmUzYmI0NTQ4N2UwMzlhZjk0ZGQzZWZjMzU4NDRkZDhlODM1ZWUxMDA2MTc4IgorICAgICAgICAgICJlMjRkY2QxOWZjMDc2NjdiNGEzNGYzYmQ3NzFkMDlhN2UyOWY4Y2ExN2U4OGQwMjliOTBkZGI1ZjI4MTNiZTk5IgorICAgICAgICAgICIwMDBkNTlmNTQzMmM0NjZhODQyODc1NzcyMDRiZjc2NTk3MzkyNzY5OTgzMDU3NDc2NjdmYWZkODAyOWNkY2JiIgorICAgICAgICAgICI1OTE4MzkzYzJjZmNlNGQ4NGE5MjIwZWEzZTM4MTk3MjUzMzZmMjVmZWU4ZTA4NWRlYmVkMzMzMmQ1ZGRmMWVlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDMuMTciLAorICAgICAgICAgICI5ZTJhN2IzNzc0YjExZTYyYjY0OTBiNTY1MWEwYzE4ZTA5MmU5ZmFiOGIyMjg0YWU0NjQzYmVjMzZiMjY1ZTViIgorICAgICAgICAgICJhM2M1MWFjMzg1YjJjNzNkMjIwYjJkYzJlMTBiMGQ2OTBmNjc5NDVhMGM0MmIzYmQwOWQwYThhNyIsCisgICAgICAgICAgImExOGJmYjc0ZjZkZWJjZWRjZmI0N2M3ZDVkYmYxMDZlNzc0ZDdlZjY2MzhlYzM4MjE4NjljZDJlZDYyZGQ1MzIiCisgICAgICAgICAgIjVmNGU1NzMzYjhiZmQ1ZmFmYzQzZTQxNjRlNzhkNDM4OTk0ZDg1MzM3ZDdmMGQzOGYwZWEzYmEzN2Y0ZjQxYjYiCisgICAgICAgICAgImE3IiwKKyAgICAgICAgICAiMThjODhhZWUyNTM2ZDk0MmY3NjIyYTY0NGZhZDZmZWNkMzMyMjhjN2FlYTBjYWRhMGU1MzFmNGNjYmYxYzFmMiIKKyAgICAgICAgICAiNjljYzk1ODYyOWE0M2I5NzUyZmNhZjJiZjk1M2VjOWY3ZWY0YmIwZTYyZDEyOGUwY2Y0YmFiZTkyYzZkOTI4NCIKKyAgICAgICAgICAiOWU5ODM4ZGQ4OGUyYjQ2OGJkY2VmYzA0YTllNGNiNTVlMmE1MThjYTI1OWY5ZTgxYTQ5ZjI4ZGYzNDc2MWY5ZCIKKyAgICAgICAgICAiZWEyZTcwNTk1NjYyNjI2Y2Y5NmFjMDVhN2M4YjEwMzMzM2U5MDZlMTMyNjM5YjY1YTc2NmY0MDkyYzhjYTA3OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjE4IiwKKyAgICAgICAgICAiMGFjNTJkNDAwMWYyNWMyYzlkYjkxY2U1MGJkZGYwZDU5MTllMTk5NjJlODNiMDdjYjc5YWRiMDA0MzZlMTM2NiIKKyAgICAgICAgICAiYjBhYThmM2ZkMWVlNzk2YjIzYzhiYzU2MGNjZmE0YmNiZGIxZjg0MDRkZDZmNzU1MTUyMGQ3ZDllMiIsCisgICAgICAgICAgIjIyZmZkY2ZlYzZmMDZiMWJiZDE0NTM5NzcwNDNhMzRlZGRmODU5NGRhMDIyMTMwOTE0OTc1NTQyZjJmMDBlOTgiCisgICAgICAgICAgImYzMWUwZGQwYzQ4ZjdlZTVmMDlkNmE1MjcxMjFhZDIzMzcxYzZjZDBlMDc5MGViNzMwOGJiYjA4OTZkZDU5MGQiLAorICAgICAgICAgICJiMjY5NTdjNTYyMjk0ZGUxZjM5MzI0YjFjZDgwM2NmYzM5ZmNlZTJkM2M5ZDEzNzlmOGExMTIwNzlkNjk0MzY4IgorICAgICAgICAgICJmNTU1MDNjMjA5NGQ5ODhhOGE1YjVhYzU0OWJlMWNmNTUzMTYwNDVkZjViNmY2MzNhNGVmMWUxZjAxOWJhMWI1IgorICAgICAgICAgICI0MmJmMGE4N2ZhM2U1Y2EzZjZiNjFjYzg1NjYxMjhhMGZhNDE4YjA4MjVjOTBlYzJmMWVjNzRlNTg3Y2Q4MDU3IgorICAgICAgICAgICJkOTUyOTY3YWM0NTIxY2NkYmY2MzI2ZjM1MDkzMDA5MzgyNmQyZWZhMDU4ZWQ2NDQxNTM3NGRiMzIwNDg4NWNhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDMuMTkiLAorICAgICAgICAgICJhODAwMzQ2MmY4MDZiN2Y2NjFmYjY2NDYzMiIsCisgICAgICAgICAgImM3NDNmNGE2ZGEwM2FiMmRlNWE3MzFjYjg4ZDhjYTliNjFjNzMxOWE1ZjhiZjlkMjM3ODc3YTA1ZDBmMzY4YzMiCisgICAgICAgICAgIjYwOGEwNTJhYzZjZTEzNzMxNzk1NDc1NTQyZWExNmE4NjI5MTNkMDQzMmYwOGJkOGM4YjZmZjgxOTU2OTFmZWUiCisgICAgICAgICAgIjVlZDE0MmZiOWVjYTk0Njc1MjRiZDNiNWZhNWE0YWM2MTQzYjBkMzgyNTBhZTYyMWQ0Mzk5MDljYmUzYTZiNWMiCisgICAgICAgICAgIjAxZmJlYTJkN2EzZjFhZTQxZDYxZmRkNjQ3NjQxNDlmIiwKKyAgICAgICAgICAiYjczOGUxYzQyOWY4ZmMwNjgyZmFhZGM4Y2E4N2VkOGYxNmRmOTMwZmFmNDNiMTk5MWFhYzcxZDg4ZjI2NGMwZCIKKyAgICAgICAgICAiODI5YWMwM2QyM2MyNWZjNWYzZTg1ZGQzMDJjYjdiMTUzM2U2OGMyNDE2YzUxYTc5YmJjYzdjMjliMDdlMmUwZSIKKyAgICAgICAgICAiMjNjNmYyZGYwZDA3ODE5MTdlYmExYTU3MDg2MjhlZWQ4YTE1YjNiMTg0YWY3MDBkMGRhYmIxNGRmNjBiMDliYSIKKyAgICAgICAgICAiZDIxMjdkZjE4MGY0ZDZmNzI5NjU4NzYwZDYzM2M3Nzc1YTdiNTk2ZDA5ZDkwMzQ5MWYyMTA5NmMzNGMzOTUzYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAzLjIwIiwKKyAgICAgICAgICAiZWYzMiIsCisgICAgICAgICAgIjQzOTljYjA0NGE2MDA3NmQxOGNjYjM0ZThiMDc4YzgxOGVhNzdmNjNiMGE0M2FiZGVjYzU3NzgxOTNhOGJiYmEiCisgICAgICAgICAgIjVkNTZkMGZjNGU4MmEyMTE1MTZiYmRlZjQ0ZTdmNGU3ZmViYmUxZTE5MjNjOTk5YTdlOTYxY2Q2ZWUxYzQxNmEiCisgICAgICAgICAgIjg1OTZlMjRiNjM4M2E0Njk5MzVmMzNkMTU2ZmQ1YmNmZGJkNDI3NDYwZDQ4NjY4MzA2MWU0MTA1ZjM1YjVlNzUiCisgICAgICAgICAgIjIzMjAxNTVjN2Y2OWFkOGViNDAyY2MxMTA2ZTAyODlhOWI0OTY1ODIzZTdhNTFjZmU0ZDI2ZCIsCisgICAgICAgICAgIjEzMWI2MjVlODZlNmNkMWUwOGFjZjE5NWQ5M2NkM2EwZGM4YmE5ZTJkY2Q2ZmM5OTZiZTIxNzI0YWYxNzkwYjYiCisgICAgICAgICAgIjg4ZDc5ZDNlYTlhOTUwOThjYWJiZThhNWQ0ODU5MmU0NzQ2YjBlZDJhZjdjYWY4OWI3YjYxNTJlMzgyNGQ5MTUiCisgICAgICAgICAgIjg5ZWVlYzMzNzVjNzFhODk5NzQ4NzAzYWNjMWU4ZDFkZTQ3MWVhNzUyODA0MGI3OTVmMjk5ZTY2OGNlYzlmNWEiCisgICAgICAgICAgImYzZWI0OGY5OGMwZDg1MjA2Nzc3M2UxMDFmYTI0YWViNmI0MDRkYWZiNDJlN2E2M2IwNGE2NmJkMGU5ZjljOTQiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJBIDEwMjQtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiZTlmMjVlNDgxNDBiNWRjZjQ2OTllMzAzN2ZhODM0ZjBjNzhiMTY3MzVmZjc5ZjZiMThhZTYwYjUxODQ4ZDMwNiIKKyAgICAgICI5OWVjNjQ2ZDg1N2YxNTc3MGUyYzdhMGMwYzkwMGZiNjA0MGI1ZjM0NDg0ZTljZjVjZWRhMjNkNWIyNTBlZjkzIgorICAgICAgIjI4NmYwMTFlOWE1YmY5ZTU0MmU1YzlmNDQyZGU1NDU4ZTIzZTQxZDFkOWNkOWYwY2UxY2YyMDA4ZDNlYTRkODAiCisgICAgICAiMzJlODU0Y2ZmY2RmNWY2OThkMTMxNmUwMjljNDg4ZmNiYjJiZTI5YTRlN2JmYjhlNmU4MWQzNDIxMjNlZTc1YiIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICI0NTQ1ODg2ODQ0NTMyNzQ4NjA0OWUxYmZkZmY1NjExM2E4YWE0NTEwMGRhYjA3NGZkMTYzOTRlYzFhOTAzOWI4IgorICAgICAgIjFiMmNiNTgxZmU4NGU2NDhiNWYwMzI4NTRkZDRmYzY5ZjM2MWEwYTM5ZDAzNzYxMzhjZDdlN2MzNzc4NGUyYTIiCisgICAgICAiZjlkNGYyNjY4NGNjNWNjOWY1MTJiYTYyMTVlYmQyMzJmOWFhM2RhNDY5ZGI0M2RhMWMwNjQ2ZTc1YjMzYWFjNSIKKyAgICAgICI3MDA4MWI1YjJlOTZlYWI3NTQ2YWNmOTMxNzg1YWEyZmQxODI0Y2JlMmM1ZjliZjU2MzM0ZWMxNTY2ZDFjZjQ1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNC4xIiwKKyAgICAgICAgICAiY2EyNDcyMWM4OGUwNDc3NGY0MTViNGM0NmNhMGZjMjZkNWJiNTNhYWZiMTk5MmY2ZGU3ODVjNzYzYSIsCisgICAgICAgICAgImZjN2Y4NWMxMzg2ZGM0M2MzYTI4NDZlNGRhZTRkOTU0ODA1NDQ1OWRhMjMxODJmOTg0MDc5YjA3MWZkYjVlNmQiCisgICAgICAgICAgIjlkMGZhMGIyMmUzZGU2MzZlZTViMjUzYTQyZjk1ZWVkNDQyMjk1NmM3MGY0OGRmZWNmMGU1NTViMDUxNTdiMTUiCisgICAgICAgICAgIjZhNTVjOGJjNjU4Y2QzYjUzOTdmYWI3OGQ3MTE1NjRlODljN2U2MjQ4YWEwNmFkMTA1YzQwYzMxYzRiMTk5N2QiLAorICAgICAgICAgICJlMzk1ZmYxZmE1NTJmYzJlNzljNGE1MzU1OGRmMTQwMGY4NzA0ZWIzNmNmN2NiMDUxYmFiOTMxNTBhYzYzOTZhIgorICAgICAgICAgICJkZDYzNjY5YjA0MjQ4YjlkYjM2YTljOTRmNTE5OGM2ZTVkOWExN2Q0NzRlZGIyMDM0NWZkNmE3OGI1MWRlODE2IgorICAgICAgICAgICI2ZTk4Y2FiNWI2ZDE2NTY4YjQxYThlOTNlNDgzODg2NWQ0YmQ5YzUxY2RlOGRmYmVlZWE1ODgyYjA5ZGM3MGJjIgorICAgICAgICAgICI5ZmU3NDliNWQyNGJiN2NhNTExZGIyYzJiODI5YTdjOTE0NmM3NzRlYjBiZDdhYWZkYzVjMzhkM2Q3Y2Q1ODI3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMiIsCisgICAgICAgICAgIjI1YzdiYzRjYjI0M2FjMWYwNzQwODY5Y2QyNmJhODI2ZjM1NWQ0NzdjNGFhNmNiZTU0M2FkZGVhODQ0NDQ0ZjQiCisgICAgICAgICAgIjFjMzU5MmJiM2RhN2Q0MjEiLAorICAgICAgICAgICIyNzJiZTNmYmNjNzYxNDk5NmYxYWMwZTBhNWUyNjkwNjIzYmIwYjY5NzBmY2RlMGI2ZjQ1NThlZTYyMzQyNmZhIgorICAgICAgICAgICI2MGFkZDZjNWE4YTEwZDRhMzc1MTUwMTUzNmZlOGE0NWM1NDJmNjI3ZjQyMjlmYTEyNDU3YzExMzMxMTM3MjA1IgorICAgICAgICAgICI1NTJiMDE0YzkxYjFjNGUwOWU0NTk2NzgzNDBhNzRjMjg1ZTI2YWVmYjkiLAorICAgICAgICAgICI3NjUwZDZmODFhZWY1YzBlMzIwZWM3N2ZjODliN2MzZTYxODM4NTBkMTBjOThhZDdlOWZlZWE0N2UzOGNmYjM3IgorICAgICAgICAgICJhMDI1ZGI0MjFmYjZkMDA1ODA5ZTM4YmIzYzUxOTUxZGE5ZDk0MzNiYTdlZmIxN2RlN2Q4ZmUzZTliOWNlNDU1IgorICAgICAgICAgICI1Mzc0ZWE2NjNhMWI1ZGE0YTA5MjI5NGNlOTY2OTg1NjU1ZTJkZGQyMGQ3ZGUzYWEzNTM3MDU4Y2ZkN2U3YTdiIgorICAgICAgICAgICI5N2ZjZGQ5ODUzNzkyYmE4M2ZjYzg5MDc0YThkMGYzY2VmZGY5ODViOWU3OGFlYmZiMDU5NjczNjRmMjQxMWNkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMyIsCisgICAgICAgICAgImNmMDA3ZWJkMjNkYTA2OTcxYWY3OWFhNjM0ZDVkMjU1MDViZDUyMjkiLAorICAgICAgICAgICI5Y2Y3MjM3ZTI4YTg2ZTQxOGQ2NjRmZTNiZTdhZTMwZWViOTU1YTNmNzEwMmIyN2Q1ZmEwOTY3NDljN2ZjMjA2IgorICAgICAgICAgICI0Yzg4MGJmM2QzMGVhYTk4MWZjZTM5ODZhOTEwZmVlYWUxODRjMDEwMjUwNDhiYTY3OTQ4OTZmY2NmZjc0YTU5IgorICAgICAgICAgICI0MmY5NjJmM2UzNjM3MWY2YjM1NTE4Mjk0MzRhZDhkMDBhMmM1OTdjZjZkNDUxZWFjZTg4ODY4NTM4YTQ4MGY2IgorICAgICAgICAgICI4Y2U2OGZjNjg1NmViYjU3ZGMiLAorICAgICAgICAgICJiNjMyNTJhZjJlOGVhMjcxZTcwNmZkNjgzZDBmOGMxMGIzZjRhMzQ1YzRmNWI2Nzg1YmE5MzI5ZjQ0NjI0M2M2IgorICAgICAgICAgICJmMzY5ZTMwZWE4ZmIxMTA4NGRiOTc5ODhlOWMzODc0YjM0ZDZmZDA4NzE3ZDllODEwZTljMjI0MzYwMzQ2YmVjIgorICAgICAgICAgICJjZDNlMGU1M2QxMGIxZWQ0NThlNjRmM2ZiMDkyZjQ4Y2I2NmFlMDNiNjRmNmFhOWM2M2JkMjc5ZmFlNGMzM2Y0IgorICAgICAgICAgICIyYTlkNzNiYjM5MTE4ZWI4N2QyNTEyYjlkOTM2YTI3ZWQyZTQ0OTYwN2RiZjBlM2UyMjNhNTM5NTI2MzU1OTljIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuNCIsCisgICAgICAgICAgImVmZGE3OWU5YzMzNmMyMzRmZjM3YjRmNThmZGJkMzFhZjM2NzViM2QyYjEwNWVhZmJlYWQ0YmJiZmZmNTRlNjgiCisgICAgICAgICAgIjZhYjUiLAorICAgICAgICAgICIzMGMyMDk0M2YxYmZjNDIzNjFkNGQyMmY1MWE4ZDc4NmNiMmQwZGQ1ZmY3ZDcwNWIzMDI4NjAxODExMjkzZGJlIgorICAgICAgICAgICI1ZDcyYzM1NTk3MTBjZTBhZTk1ZDJmMTZiMjM5YTRhYzg0NDU1MzdkNDg4ZTNlNmQyY2Y1YjdhNjRjMDZjMzc1IgorICAgICAgICAgICI2ZTExNjA2NzYzNjMzZWRiZGRiZjI2YmVlNjUxMTg0MmQyNzUyZGNkODg4OTZjYjg1NThhODciLAorICAgICAgICAgICJiYjkxYjJmNmY0MzMxZDY0ZDA3MzZhMmVhNjAzMjlhYTE2YzJlZDdhNGQ1Y2E4ZDc4NGU2MzA0Y2U0ODQ0YzcxIgorICAgICAgICAgICI1OGY4MjJkMmFmMjljODkwOTc3ZDc1YTkzNWU0M2Q5M2I1YmUxMGMxZDQ0ZmEwMGNlMjhlNzVmNTI3YmQ4NGEzIgorICAgICAgICAgICJiZTVhZjViZWU5NDU2N2M1NWUxNWVlM2U5MzQyNmFkOGQ1MGYwNjRjNTc5M2NhMzhjNDNhNzBjNWY1NjA3NDBiIgorICAgICAgICAgICIxNmVlYTE2YjdmMTM0MTVmNzUxYjNmZGI4NzdhODgyOTMzMjFmNTBmZmZhNmYxMjQ5NDk2YzJiMDI3YTIxOGVkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuNSIsCisgICAgICAgICAgIjRhMDFmYzEzYzFkODZmZTdiMmZkYzc5MmY1MjgwZjg3NWFkYzVhZTk5ZmY5MTFkMDJjOGMwMDNkMzliYmVlNTQiCisgICAgICAgICAgImI4NTFlZmEzNGI0MTMxYmU1MjBkODEwMGVmNjJjMjVhNGI1MTdlOWIiLAorICAgICAgICAgICJiZTZiYTVkMTFkZjFiZmNiMmI4NDY3NzFiNmM5ZGZjOTMzNGRhODZjNGI3YzI1NDM5MzE4ZThiYThlNDc0OTJiIgorICAgICAgICAgICJjZDUxMWJkNGNhZTE2NzdkMzEyY2EyMmE5NDU3Y2M4MWQ5MGU0ZDUyNGJhMjI2NWYwZmJjYTE4ZTNjM2Y0ODJkIgorICAgICAgICAgICJjYWE3ODgzMzIyMzkzNDZkNmYiLAorICAgICAgICAgICIxNmJmY2ZiNDJkMjhiOWQxNjI3MGNkMTM4ZGMzY2E2NDQyOTU2YTQxODI1ZWQwMjMwYjcxMDkxNjEzMzMzYTllIgorICAgICAgICAgICI3YzUyY2U4Y2M0YjBiZjI5MTA3OTQxYTBkNzJjYzM0YWZkMDA0OGJiZjRjNzE2YzczYWE5YjBjNzhkMzdjMTkzIgorICAgICAgICAgICI3MTllYmUwM2E5MzE3NDUzYjU1M2Q0ZjViMzg1ZDE0MWZjM2IwZWQxOWI5NmRjMzUwZGZkNGQxMmUzZGQwM2ZmIgorICAgICAgICAgICIxODM5ZDQ3ODJjNmRmZDVmZGY1OTcxZjNkZGIwZTMxMmE5MTYwNmYzMTM3MzAyMGRiM2E3NmQwNGZkNmQ2NWQ2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuNiIsCisgICAgICAgICAgIjdhYjA2ZTE5NjkyMmMwIiwKKyAgICAgICAgICAiZGUwZDYwMzNjMWU5NmI1ZmQ4MzEyMTRmMzBkODFiOGZkOWEyNjkzZTVlOGEzNmVhZmZkMDM5ZTc0NzNjMjhlZSIKKyAgICAgICAgICAiNDNhMzkxNmM3OGM5YTExMjk1OGE5NGNlNjcxY2NjNDBkOTdlZDQxODdhM2ZmZmEwZGMxMjlkODhhOGI4YzQ5NiIKKyAgICAgICAgICAiNmVhMzk0YTkxMDg5NjEyNWY1NGRhZmJiM2IxN2I5ZmExMGM0ODIyMDA5NjQ5MGM2Zjc1YmUyNTE4M2U5OTg0ZCIKKyAgICAgICAgICAiZjVlNGQ3ZWJmOTQ3NWQxMWVhMzkzMzVhYzcyZjkzZDMzM2JkNzQyMjE5NDIiLAorICAgICAgICAgICI1NDE4MjNmOTA1NTc2ZGExNDJlMjY1ZDg5MDQ1YWI2NjIwZmQxYTc0Yzk1MzNhZGE0YmM3YjQzZDk1NjI5YTMxIgorICAgICAgICAgICIxODZmNGU4OTg5MjA4M2QyNTQ5YjBlNjM4YmRmYzBkMjdlMTRlYzE4YzQ1Y2EzNTg2MWRmZTYxMmEzYTFlZGFhIgorICAgICAgICAgICJmYzcyZmI0NjgxYTk5ZWE2ZTY0OGJlODk2MmYxNTYxZTc1MGQxNDQ5ZjIzZjQzMGFmOTMwNzIyNTU0NGQ4YThiIgorICAgICAgICAgICI4OTY1YWY1ZGQxOGNiNzg5NTNjZTZkMTZkODVlYjIxMWFmMGM2NDY4YTJhZjlmNzJlNzg2NjFiMGZjYWE0ODE1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuNyIsCisgICAgICAgICAgIjlhZGE5YzEwYjhhZTIyIiwKKyAgICAgICAgICAiY2MyMzQzNzI0YWM1MGVlNTQ3MDhmYzVmZDAzZjA5YTFjYzEyMjJhNDRiY2Q0NDAzODc3YzZiZGU4NmJmNDNlNCIKKyAgICAgICAgICAiMmMxMDg0ZjZlZmZmMjBmYWMwYWNjMzFlY2ExN2M3MzhkNDY4Njg3MzY1NTJmZDJmN2U5M2I4MjIyNTYxMDU0ZSIKKyAgICAgICAgICAiNmRhZGMzMTU2MDRlYWY4Zjc3ZjA1ZGQ4NTgzYTkzYmYwM2NiOWNjMjEzOWJjNDE5YmIxMGU5YjIwMWIyYTdlMSIKKyAgICAgICAgICAiOGIwMzc5MGNjODNlZDYwNWQ2ZDU2NjMzMDUzNDcxMzljNzVlMWFlMmE1NmEiLAorICAgICAgICAgICI5ZjU0ZDBkZWEwNWE1ZDAwNzIyMzViYzQ2NzkzY2ZjNDdiMDA2ZGFhYWMwMjQxYzdlNjZkMzMzZTIzYzNjZjk3IgorICAgICAgICAgICI2M2I2MWQ5ZWVhZGRkODNmNWQ3ZjBhYTk3ZDE2Yzc2OTkyNTVjZjdlNDg3MmI2YTAwNzk1NjJkMjYwN2Q2NDQwIgorICAgICAgICAgICJkN2VkMzdjNjcxM2NlOTY2NDNhNDQxZjgzOTU1NjRkMjZhZGVhNTgyM2E0OTQyZGE0YWI4ZTQ3YmVkNTg4MWI5IgorICAgICAgICAgICJkMTg0MDU3OTU3ZGY2NTM5ZTQzNmRhMzVlMzBhMjUzYWYxMmQ1NDFkNGIwZWY4M2M1ZWYzYzEzNWFiOTU5NDlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuOCIsCisgICAgICAgICAgImQ4MTI2ZjRhODg3ODk3ODI5MzExNzY1MWIzMGU3OTIyZDE0YWNmIiwKKyAgICAgICAgICAiYWRmOWIwYTkxNTJmMGU2ZWM2ZjQzOTU5NzFhZDQwM2YwMmU3ZmE5OGY4MTU1NjBhZmFmZmE3Y2FkNWI0NDc0YiIKKyAgICAgICAgICAiNmVjZTY1ZWRhYmUyN2VjMjRhMGFhNDczZWQ3NWE2MWY1YzI0OTBhNTM2YjFhNGRmN2IwMzQxNzczN2M1MzRlMSIKKyAgICAgICAgICAiZDQ1YmY3MjY5NDM4NmJlZTgyMGM0OGRiZDE4MzE3YmQ2MTdjMDRiNmE0MTdlMzBlZWQ3OTU4OGRjMjNmZDRkYiIKKyAgICAgICAgICAiYTEzNzQ0YjRiMmFhNWFmODBhOGEiLAorICAgICAgICAgICIzYjJiODVlZGZjZDdjN2MyN2JkZWRlZTFjMjhhYjYxODdhYmYxYzk2ZDk0NTMwMDc5MmNmOGFmMTk3YzJmOWEzIgorICAgICAgICAgICI5MWI0OGI4MzMyY2ZkZTdlNGM3ZGMzNGM0MjMwMjk1NjkyY2VmZGE1ZWZiMjU3MzU0OTJiOWZmNzg0YzdiYWU3IgorICAgICAgICAgICIzNTExYzYxOGUzYWE3YmM4N2JjMzEzZjI2NzA5YThlYTRhZDczYTM0OWFiOWU1YWQ4MjZjOTZhZDBlY2E5N2UzIgorICAgICAgICAgICIxMzI4NmJjY2JmOGUzM2M5MWYwMzY4MzliOTk0OGI0ZWIwYzM4ZTIxM2VmNDdmNzc2NjFhMjdmOGNmZTQ5OTAzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuOSIsCisgICAgICAgICAgImY1ZGYwMWFmZTZhOTIyNTE4YjNmNGI4MGNkNGZjYTczYjk3YmFiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIiCisgICAgICAgICAgIjMyZTJkYTAwOTAxYzI5NGJmMjIzNTBjZTQ5MGQwOTlmNjQyYjUzNzU2MTJkYjYzYmExZjIiLAorICAgICAgICAgICI2YmYyODEwZGI4ZmIyNjkzOTg0MTJkYmI4ODA2MDI4MmQ0NWZiZTk2MjczMzdlNTQzNDI2MWE1ZGJjMTkzYWQ2IgorICAgICAgICAgICIxOGMxMWY3YmRlYzFkZTI1MDVmODYwMzdmYzE4NTFiZjZmYjQ5ZDIzNjA2MjczNDc0OTllZmM5OGUyOTIwNWRhIgorICAgICAgICAgICI5MDZkMzIiLAorICAgICAgICAgICI0MDEyZmNjNWNmYjk3OGRlZjg4ZmI4ZjgxNzRhYTViNGEzMDc3NWFjNDU1OWYwYjJmM2QzYjQzODliODI4YTc5IgorICAgICAgICAgICJkMTQwMjUxMGM5YTAzMzdkNDg5ZDExODJhYjMxYzgzOGFjN2M4MGI3NDg2MDlhMmFhNTM3ZGE3YWNjM2E0YTdhIgorICAgICAgICAgICIzMWQyYWQyNTJiZmQ1OTI4MGIzZDE4MTNhMjZmOTNjNTllZThjNWVlNjg4NzE4ZjQyNzgzOTNmZWNlMzIzYTlkIgorICAgICAgICAgICJmZjgzMzc1NWU4OWFjOGVlMWZhMjkwNGJmMjRjZGY0ZjAxZTZlYWVkYjZhOGVmMDFmNDA3YmVmMzMwOWYwMzM5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMTAiLAorICAgICAgICAgICJhMzgyM2ZhZiIsCisgICAgICAgICAgIjk0ZjY3MGZkODJmNjkxMzI3NWVlYTRjNjcxMTZjYWFhYmQzMzU3OGNmODRkMjI2MzY0MzhhNmZkN2VjZmVlZmMiCisgICAgICAgICAgIjBiMTg3ZGVjZjc5Mzg5MWM2ZTRjZmM1MmI1NjdkODcyYmZmYmVlMGE2NzQ3MmExYTQ4YzBmMWJhNTk4YWQ4MjUiCisgICAgICAgICAgIjg5MDFjNTZhNTU5MmYxNDExNDdlODEzMzlkNzQ3ZTA2MzJkZWYwMGQzZGJlZTk1YzRlNDMyMWNjMjViNTMxMTQiCisgICAgICAgICAgIjQ3YTMwMmM1MzQ5MjljZjdlNTM0ZjlhZTY3ZjQxZTAxZTIyYTNkN2NlNDFiM2IzMTM1IiwKKyAgICAgICAgICAiN2I2MDI1NDJiNjRmMGExZTBlYzJhYTAxY2JlZDM3N2UzMzFlYTNmZjg2ZjM1NmZiN2E1ODgzNzY0YmU0Y2JmNyIKKyAgICAgICAgICAiZDA3NTRjNTgyOTY0MzEzNmYyNTcyMzM2YTIzZjE1NDExZDgzODUxNGExNDM4NzI0YWQ3NDA5ZThlYzhmZTI2MyIKKyAgICAgICAgICAiNDFhZWVhNTY2ODM0NWQwZDgyM2ZiNWMyMWRmNDU5ZThiZjdjMTViODBiMDcyZTVmOGE4NDY1YTQ0YWE5ZDA5ZCIKKyAgICAgICAgICAiODI1YzAzMTVhMGVjZDJkNjQ5NzAyYjEwOWJlOGZlMzVlYjIyODQzYTIwZTdmZDg3NGYxYzZiNDZhODBiNjhkZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA0LjExIiwKKyAgICAgICAgICAiNzViOWE0YTBiYjJkNDY0M2U0NzhmNjU0ZjJjYzFhOGMxYmI0NjcxOTc2MGQ0NTQxYThhNzMzZjMzYjcxM2QzMiIKKyAgICAgICAgICAiYzYwYmZkMzVmMTYxNzQ4MzQ4NDdlODgxMmNiZDdmMDZjZTcyODlmMzcyYzU4MjMwZjJiMDAxNDU5YjVkIiwKKyAgICAgICAgICAiNDlhNzNkZWI5M2UzZjFiZWFhYWQzYTE5OWE3MDU2OWUwOTlhZmFjYWY3YTc1ZmM0Y2U2NDhmYTgyZWFmMmEwZiIKKyAgICAgICAgICAiZTQxMWQyNjRmZTQ1Zjc0NTI1YzkxZjNjNzUxMDE3ZjgwYTAyYmFiZmYzNTc5OTYyNmYyYjhkZGI5ZjM2OTEiLAorICAgICAgICAgICJlNWFlZTcwZGU4NjI3MjNjNTE3M2RmZmJmNjkyNmMzZDMzMTZkNTkwOWNmNWExZDY2M2U2ODBhYjJiYjU3NmUzIgorICAgICAgICAgICI1YjkzZmQ0MzI3NDNhMThlOGRiNGZhYTMzMmY0NDY2OGEzZDE5ZTVlNjk1NzMyZjg0YmJkODZkMGRkZWQ3NjY1IgorICAgICAgICAgICJiNzBiOTc2MzJlYWJlMjM2NGNhZmVmN2I3NGRjZDFiZmJkNjI1ZTJiYmJmNjY1NGNjMDI2NjE4MWFjMGE3NTdjIgorICAgICAgICAgICIzZmJhYmQ0MzBhZTg2MzcxZWI1NmFmNjEwZjc3Y2YyZmZmNmUyNDhmOGM1NzkxNjBiOTFkY2VjYzBkMjAyYjUwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMTIiLAorICAgICAgICAgICIxNTA2ZWIzNDkxNzg1YWE3MjEwNmJmNmM4NWQwMTAwMjA0NmQxYzE2ZDQzNWRkNGU3YzRiN2U4ZTkwZGRkZjE2IgorICAgICAgICAgICIzMzJmOTRmNGI4MzVkMGU0YWQ1NWQ4M2E4MWIzNWM1NGI2NzlkM2NmIiwKKyAgICAgICAgICAiZjY2ZTZhODQ3NTg0NDA4NmUyODQ3NzIyOTc0NjgwMWQ0MzUwZDlhZDA3NjhmM2MzZDhmYWE4MTA3ZDk1ZmIyMCIKKyAgICAgICAgICAiNWU0YmE4YzY0YjczOGU1NGU1YWMwZGZlYWI5OTZkNjExMjVjMjY3OTgwNzI1OWJjOWU0N2Q4YmRkMmMwNDA5NSIKKyAgICAgICAgICAiMDU0NDhiYmY4NzJiZjY2NDdhIiwKKyAgICAgICAgICAiZDFmYTM5NTJjYzYxNDVmZjc3MWI2YzVhNjgyNzViYmMyMmQwMDM5MjAzNjYxNzM3NWYwYzJiZWMzZTI4ODU4MyIKKyAgICAgICAgICAiZWNmZGM2ZGY2YTgyOGRlMzdmNzdjNTU2YThjYmM0ZDQ0MzM2ZThkMmUzMDU4N2UzMzE1ODczMTdlOTdiMDVhMyIKKyAgICAgICAgICAiZmQ3ODAyNWIyZDQ5NmIzYmJlZWI2YzcyNWQ5ZWE1NjFhNzMyMjg4MjMzZDY4Yjc5NDk3ZmIwYjZmZWUwYTZiNiIKKyAgICAgICAgICAiOGFjMzEzNjYxYjRiNjU0NzM5ZjkxOGY2ZmQzYmZmYzE3YzFkZjQxZjAxNDQ5NWQ1NWY5NTkwMTQ3YjgyZDE1ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA0LjEzIiwKKyAgICAgICAgICAiOWUzZSIsCisgICAgICAgICAgIjliM2RkZjE3Y2Q3NGU3NmM2OWI1Y2EzYTAxMGEwZTBmYmQxNzA1ZDY5YzMwNzQzNTNiZTdkM2MwYzIwNWYwOTkiCisgICAgICAgICAgImM3YTgxMGI3YTFhZGUwOWY1YTAzNmJiNzY5ZWZmNTNhNTNkNGM2Zjg3MTUyOTIyZDlhN2I4NmVkZWJhMzcyMzciCisgICAgICAgICAgImQ3ZjE3MzRkOWQ5NzM5MzgzZjQ4ODBhZjNhZDY4ODg3ZTBmZTdjODdhMTc0ZmIzMjM4YjFlNTFlYWQyYTg0MzQiCisgICAgICAgICAgIjQwYzJiMjdmMjJkZGE0MjI4ZGNlNzBmOTFjOThkNDcxYTg3NDRkMjc2NTU1Nzk1ODgxMDI0NCIsCisgICAgICAgICAgIjQyMTI2YjQ5MmExZTdjYzAzMzk1YjJhYzcwMzNjZjZhNjczNmIxMmU3NjgyNWExNzNiOWUwMTFhZThiZmVkNDQiCisgICAgICAgICAgImZlY2I4ZDlmNThjY2UxOTkxMWZlNDJkNDU1ZTI0OTIwMDkzMmE5YjY4ZmUyZTQxOWJjNjM5YzExNzhkMTFmZmIiCisgICAgICAgICAgImRiZDk5NTVkNDU5ZjVlY2ZlMDkwMjAwOThlMjk3YjhlOTE0ODVlOTRiZjExZTdiZjc3ZWRmNWEyNzAxMWM4MmIiCisgICAgICAgICAgIjkyNzM2NWExMmM5Yzc3YzdlNDliYjdmZTJmNjEzMzM5ZGUzZjUxMjA4Nzc5NTM4NmNhNTg1YTcwMjQ3ODI3OTAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNC4xNCIsCisgICAgICAgICAgIjcwYWE3OGE0ZDM3Zjc0YzE4MWFhMjc0MDdmMmY5ZmU2NjNhOTFiMTZiZTliZWE2ZmM2MTI4ODdmIiwKKyAgICAgICAgICAiZDBmZDE2YzBmMGQ3OTA5YTM4ODYxNzA4MTFlNDRmMjRmYWRmOTRmZjE3MDM5YTU2ODRhMDliMjRlMTkzM2ZhMCIKKyAgICAgICAgICAiYzQ3MTUxNjM1ZDc1N2I3M2MyM2ZmMzkxMDFjYmUyNTI5YTYzYTdmM2EwMTk1YjZlNDc1MTA3MTFkZTE3MWExNiIKKyAgICAgICAgICAiNTZjOWVhYjNjZjgyZDFjNjUyMjZiNThmZDBmZTU4ZWMzMTk2MjQ3ZjM0YjFhMDU1MjcwMmRjMDM3NTEyYzY4MSIKKyAgICAgICAgICAiMDQiLAorICAgICAgICAgICI5NTM2ZDQ3ZTFkNjg3ZjFmMjQ5OTZjYjQ2Y2U5NDZhZTU0ZDRhMTQ5YjM0YjViYzM0NDQzYTIwMTUxODM4N2Y0IgorICAgICAgICAgICJiNjM4MTgzN2NiN2U0YjBhNDQ3NTEzNzA0MmYxNDQ4YzFlYTQxNTE1ZWYzMWMyZmNiZjYyZTdlOTU4NjdiNjc0IgorICAgICAgICAgICJhYzIzMGFlZDljN2Q4ZDYxYzUyNzUyYjJmYzJhMGJiYWZjNzdiMzFjNTE0OTMwZGU5ODIzYjQzOGI2ZmFhYTQwIgorICAgICAgICAgICJkMjU1MzEwMzNjNjY0ODNmYTAwMjNhZjIxZGE2NGZjYzhiYjhjNWQ1MmQzZjZjNDM4MGYxZDYwOGQ4YzAxMThmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMTUiLAorICAgICAgICAgICIwMTE2YTQ2MTc3NzNiNmRkYjIxOTE2MWM0ZmQwNzE5MzdiYmIwNzE1Y2M2MjdjMTdiOGU3NTI4MGQ5OWNkZDQxIgorICAgICAgICAgICI2ZWE1Y2RmYTA5MDZiOWFmMGEyMGNkNDc3ZmRjYWQxNDE1YTE5YTlkMWI5NmZkYzNjMGVkYjkiLAorICAgICAgICAgICI4NmIxNTg2MDliZmEwOGE4ZWRlNGVmM2YyM2UxMmViNTBkMjQ1NTc0MjY0ZDc2NGQ4NzEyNjdkYjhhOTUyNGVhIgorICAgICAgICAgICIzZmEyZTM4NDVmZmMyOTFiZGE5ODk5ODliZjcxNWFhMmIwOGM0OTc5OGE4MTlmNjg1OGQ5ZmEzNWY5NGRmM2M3IgorICAgICAgICAgICJlMDg2IiwKKyAgICAgICAgICAiNzRhM2RmMzg1ZDIwODc3YmNhOWRiY2ViY2EyZTUzMmM2YWJlOTU2MmQ2ODE3YmUxNmUxMThhNjBmNGFiMGExYSIKKyAgICAgICAgICAiYzBhODQ2NjY1M2E4ZjgxNzBlMzVmY2UxNGI0NDljZDU5ZjU1OGUwMjBhODk4ODk0YmQyYTcxNzU1OGU2NjUwZiIKKyAgICAgICAgICAiM2ExMjg1NzBkOGMxNjlhNzc0NjY2M2MxZDdlZjYyMTQ1ZjRiNzVjNWZlYjYzODZmZGI4NTMzOTRjNjU5YTkxYSIKKyAgICAgICAgICAiYTJhYWUwM2JlZjkxMTNkZDQ5MjhmZjI4YjM4MDkyN2FkMWJhNGU4YTM3ZWRkMTcyZWZlOGU5ZWFiYjYxNGQ4MyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA0LjE2IiwKKyAgICAgICAgICAiMTVjNWZjYzc1NDdkNjM3NjFmNmFmMWYyNmVlZDliZTgxMzRmOWY5MjEyN2U3NmIwM2EzM2E5N2I5YmUzZjc4YiIKKyAgICAgICAgICAiMmUyMmZjN2M4NTA2OTlhMTVjMGUwZWNlYmUyYTcxODA1ZjAyNGI5Mzg4YTNiZGIyYjM2MGQ2OWM1YzBjNDYiLAorICAgICAgICAgICI1YjRmMTdhOWRlOTE3MzdhN2ZlODU0ZThhMTc2YmU1YTBhMTZmYzEwNDJjYjg3MGNjMDE4OTJmY2QzOGVhNzViIgorICAgICAgICAgICIwNzNjMGZmYTAxNGY5NmEzNThlM2FhNWU3M2VhZjhhOTFmY2U3NTQ3MGJkZTY0ZTg3YWI4OTFiYTNiZjIiLAorICAgICAgICAgICI3MzYyZDczOThkMGMyNTFmODM1ODE3ZTQ3OTM3YTkyNTU4MzZjYTAyMzA0NTdmZjYwOGIwNzhkNTA5MzFhODgwIgorICAgICAgICAgICIzM2VhNzY1MDgxMTI2NWY4ZTI2OGI1MzMxNWQ4NDM4ZTUyYTZhNGIxYjM4OTVkMzBjM2RhZTExYTNiOGVhOGMzIgorICAgICAgICAgICIwZjA1ZTlkNzFkZWY0NmQ0NTExMTkyYTEwZjU0MjE4ZDM5MzZjYjE3OTgzYTFlN2FmZjE4MTg4OTM5Yjk0NjkyIgorICAgICAgICAgICI3NjQ5YjBmYzRmN2JiZmNiZmMxNGUxYzBlY2EwN2QwMGM5MDNkYjc4MTY5YzUwZWYwYTM4ZjFkYTE5YWU0NDU5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMTciLAorICAgICAgICAgICI3Y2FkMThmMTc1MTM4NzQyMjg1ZTkwMzVkMTNhZDQxZmMzYTg1MjEwZTE1NDRlMjRkZWEzZmNmZTY2IiwKKyAgICAgICAgICAiOWEwNmNhMTBmY2M2NjEwZTc3ZGZmOTBkZDE3NmY4MmUzZjk2ZTRhOWQ3YWI4NzJjNzQ4ZWQ0MjJmMzRiMzM0OCIKKyAgICAgICAgICAiNjE5NDQwZjBhYWEyMmE2Njk4NTFkYWM4ODk0YThlZmEzNGVhMmMyZGE1ZTk1ODY5ZTBhZGMwMDVhNDliYTQ1OCIKKyAgICAgICAgICAiMThjYWE0NzQxMTVjMzQ0OTk2NmE4NWM0MThmY2FhOGY0NTYzMGVmZTBiMWI0ZDNkNjliZTFiYzAwNjhhYTc5OSIsCisgICAgICAgICAgIjFlZmFkNDE0NDZiOTFmZGFkZDhiODA2MTlmNjgyNzM2NjhiNzU4NWZkOTFmMzQ0OWVjODVjMjQyZDA4NDllNGEiCisgICAgICAgICAgIjUzYTU5NzdiNjFhYTQwZDEyY2M0ODVlYzdlNGZmMjBmOTg4NjkxY2I5ZDczYWY0NmVhMzc2YWZjNjliYTIyMzMiCisgICAgICAgICAgIjg2ZTlmMTVkMDMyNjk3ZGE3NWUyZjk1MmJlMmFmMDYyZTgyNDZjZjc0OWI4OWM0Y2JjZDY0ZTIzZjg4MmJiNTUiCisgICAgICAgICAgIjNjM2NlMzA1MjAzNjIyYjVhNzM5NzczNWE2MzRhYWIwZDE3ZWY5YjU1NTlkZGQzNGY0ODcyYjU2ZTc5ODZlZmMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNC4xOCIsCisgICAgICAgICAgImZkOThjMzhiZTMxOTMwNzBiNWM0MzM0YjExYzI1YjMzNGE0NCIsCisgICAgICAgICAgImYzNTc5MTExMDNlOTg3ZDFhOWYxNWNjMmU1MmY0MjM5MGUwZmFhNTAwMmM0ZjE3ZDQwYTRhZjUwZjMxYTIzMTciCisgICAgICAgICAgIjUwZTdhZjYxZDlhZmRmOWNhYTM4NjFhMjBkYzcyMTg5NTg2MWZiMTE4ZTA4OGQzMjE4ZTZmYjM1NTZiMTYyZDYiCisgICAgICAgICAgImJkNjc5MTFkYmM5NDIxOTg0MjY1ODI3MmE1ZDQ5YmY1YWJiNGEwODc5NDk1YzVlNmU2ODYyODU5MjlhNTVhMzYiCisgICAgICAgICAgIjhmNTI0YzE0YTQwYjBjNjEzODBkMGUiLAorICAgICAgICAgICJkZWFlMTgzYjU2YzNmYjM4NDFlYTU3NDIzNGFjZDMwYWZmMDBkMDA1MWY1NzgwMzc1OGE0NzE0YWJjYmVkY2RhIgorICAgICAgICAgICI4YmQxYTQ4YTk4MDE1M2RmODk2YjEzNzZhYTRiNDU5NTgwMTNkNjE5YmU3ZWFmZjZjMWE2NzVlMjkyZWZjM2Y0IgorICAgICAgICAgICIzOTNkZGJkZWFiNDdlODkwYTc4Y2VmNjkwMDI0NDk1Nzg3NDg5MDZjMTAyMWI4OTFiOTQzZDgxOGQzYTYxZTY3IgorICAgICAgICAgICJhMzE1NjEyZDRjYjFjZjE5N2NlNWRmYWJlZmRhZWI1OTBiOGU4YzczNjg1ZTc0N2U1OWEzOTVjODQ1YzVkMGMzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDQuMTkiLAorICAgICAgICAgICI5NjUzZDc5NDY5ZjA1ZDQwMTk2NWE5NWNlODc0ZmEyMjVlYzQ3OTc0ZThkMDY4NDFjMTNiNDc4NWUwMGQ1NDdmIgorICAgICAgICAgICI5ZDMxNDRjMzg3OWU2Y2NkYWY3ODdhZWZjMmY4NDUyYTRhM2M4ODRlMzhlZSIsCisgICAgICAgICAgIjg1NWQ2ZDE1MTJlNTQzYTQ1ZDNhOWFhOTY4NWQ1ZGZkYTcwNDc5YmEzOTUyNjM2NDE0MWJiNjM2Mjc0NTg5ODUiCisgICAgICAgICAgIjcxMjAwMTIyZjRiYzgyYzYyMjQzNDVjNjlkM2VmNTQyZjEyM2JkZTMwMTViNjBjNGMwZmZiOThkNjMwMTMxYWUiCisgICAgICAgICAgImU4MWZlNGEwYjAxNTM4IiwKKyAgICAgICAgICAiNjljYTYyZTI5YTViZGI0YjA0ZTI0MDE2MjEyYzI1OTE0MGE2MGNmYTgxZWI2NjkzYmZmYWZjOWY2MDBkY2UxMCIKKyAgICAgICAgICAiODIyYTAwN2I2YWRlOTNmYWNkYTFiMmIxNjViNTU3NzYwZjBhNjc1YWM5YmNiMjA2Yjk2NGZiOTBjZjZhMmNmOSIKKyAgICAgICAgICAiOWYxODZiMzZkMmViOTkxZDgyNTNhMDc1NGY5Y2MyZDcyZGU1NDlhYmFlOTA5NGY1YTg2Y2UxZGI0OTRkYmI2ZSIKKyAgICAgICAgICAiNTE2Mjg2NzE1YjNkZDQwNTU5YjMxMDdiOTUyNGI3MjlhYzY1NGNmYjQwZjlhYjM1ZDAzNGUwMjcxOTdjYmMzNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA0LjIwIiwKKyAgICAgICAgICAiMGJkZjNmY2U4ZTQ4N2RiMjJkMDc2MGFiNzExNTg2Y2E4ZTQ1OWMzOTRmZjhiMWExODY3MDY3YTkzMTUxOTlhOCIKKyAgICAgICAgICAiMDEyNDc0YjBmOTBkY2M4N2NiIiwKKyAgICAgICAgICAiYzliNzhkY2U5ZGZkN2YwNDA0ZmY5ODJlMDZiNTk2NTBiYWZlMzFlYTE5YmMxZjJlMWYzOTg5ZjRjZWZjZTQ2ZiIKKyAgICAgICAgICAiYzY1MjQyM2RiM2M5OWQ5MmE4ZmI1OGYzZWUzOTNkNTU1Yjc2ODQ4ODlhNGJmODE1YTEzZTNiOWJmMjQzNzE0MCIKKyAgICAgICAgICAiNjZiOTA3NTg5MDY3NTA0N2YxN2U5MzViZGNmMGU2NmZjZmUzOWJjZiIsCisgICAgICAgICAgIjQzYWQzZTYyNWZiMTcyMTU1NzhiZWYyZjQ2NWZhYTcyYWU2OTQzODMzNjlmZjdhYTE1MTIwMWEzZjI1OWM4ZDgiCisgICAgICAgICAgImNlOGMxNmJkMjU1MjIxNDlmNjY2ZThkNjkyYTA3OTVlYTcxNTY5ZDI4ODFmOTcwNzA4NWQzZjU5YmRmYTI4NzMiCisgICAgICAgICAgIjY2ZDdmNWEzZjc2ZWE1ZGMxMDlmY2IwMzMwMmRhMGI3ODY5OTcxM2UwZDMwMDk1ODRmOTcxNzZjMWI5YmE2M2UiCisgICAgICAgICAgIjgwY2ZhOGZkNGMwMTNkNzRiNWZhZGU4NDcyZDUyYzExZTJlOTM2ODFiYTE5ZDM1M2QzMWNlNmZhM2MwYWI2MGQiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJBIDEwMjQtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiYWIyOWQ0OWNkYzkyNWM2OWNhZTc1MjkyZmMwMzYyMDM3M2M2ZmIzNmQzYzI0OWRkNWJiNTBmODgxYTRjOTM4OSIKKyAgICAgICJhZmU3M2U4YzU2YjhkNjY3YTVlYWYyYjU3MTRhZGFmNGNhYTAwNmE0OWFjNGJkNGI5MWQ1NDVjZjNjMTAwMDlkIgorICAgICAgIjMxOGE5ZGUwZjNiYmQ4Mzg0ZThjN2U5NmNhMTU5NWUzMmE3MDQxZDE2OGNhYTczNDQzYjg4NWJmN2Y2MTRhZTEiCisgICAgICAiMjEyZTNiNWFkZGEyOWRmYWQ1MDFiOGIxYTgxYzNmNDhhNDU2ZTEzM2FkNTJkYTJhYmNlNWQ2ZTc4MmYyNzVjOSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIwNzdiYjI3MzMyMzQ4NmVjNGMyNWVkNjcwNjM0MWFhOGE2N2FlYzU4NDMwZDUzM2ZlNTg2YzZiOTRmNTcwYTNiIgorICAgICAgIjQyOTBjNDVjMGJkZDk0NjgxZjI5YTRiNzU4OGVlYTgwMzljY2ExYzViODBiODI3MDI3OWRkMGE5YzUwOTM5MTEiCisgICAgICAiOTNlM2Q1YzI1YzEwNzVjNGExZDNkYzMyNzQwNjZkYWI4MTdmYjUxYjE2YmMyNjdlZDlhOTk4MGZmYmMwOTI4NSIKKyAgICAgICJkOTdmMTEyZjE1MjY5NWU2ZTA5Y2FlNzJiYjU1MDY2Y2I5ZGJkMDk4YTc1Y2ViNDdiNDYyNzIwMDVjNmJkMjE1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4xIiwKKyAgICAgICAgICAiNWRjOWY4YjEyZGM4MTJhMDlhYTRiMDZkZmNiNTdlMWQyZThkMWM3ZDJjMDc2YjI1ZDVjMThlZGJjMDQ2YmQ2MyIKKyAgICAgICAgICAiYzdjYTRhNTk5ZjE4ZGUyNmYzYmU3MzhjYzI4ZDE2NjcyYzAwNmU0ZDljIiwKKyAgICAgICAgICAiNDNkNjA1YTU3NDBhOTcwYjMyMzcyN2FmMzUyYTFiZDQ4ZGU2OWQ5NTA1ZTIyYzJmYWQwMzBjM2I4NGI2ZGVhMiIKKyAgICAgICAgICAiZDIyZjkxNjQwNmE3NjkzY2Y1MDZjMmQyNTE4ODZmMDIyMDNlM2Y3NjU1YTMwYTY4MzdhZjhhOGNiZWM3YjVjOSIKKyAgICAgICAgICAiMmZjMDRjOGMxOGRmZTlkMyIsCisgICAgICAgICAgIjIxNWEzNWY0YzA0MzViMDdlZDVkMmM0YjY4NjViYzI4MWNlYTcwNTBjZmVhN2E3ZTg2ZTAzZjhhY2IyOGI1OGQiCisgICAgICAgICAgImJlZTY1NDU4OTE5Y2VhYTVhMzNlZGQ5ODIwMWVhNmU3NjMyZDc2MjJkNWE1MWQzNWEzNWZlZGU4NmVmMjAzZWUiCisgICAgICAgICAgImY2ZWIzNDc1ZWM4ZjE5ZTY5YzBlZDUyYzA1ZGQ3ZDU5ZTM1M2Y1MmI2NzEwYWY0MDI2NjU1NTA0MTA3ZGRiODYiCisgICAgICAgICAgImY5NTdlNmMwNmJhNjdiMWY0ZmM5ZjEyMWUxNWY4MjczNjcwOWQyZGU4ZDc3NDMyZGYwOGRjY2QyYTBjYzc3MDQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4yIiwKKyAgICAgICAgICAiZDc3NDA3ZDhmNjlmODBkYzA4ZWJhNWY0MjYyODJkZTciLAorICAgICAgICAgICJiODI5Yzc4OWJlMzgxY2Q1OWRlMjE0ODlkYmExNDFlMGJkMWZhOGEzYzM4MjZkNTljNmQxMTBlN2RmNzI0MmJhIgorICAgICAgICAgICI5OGM0N2E0MzkyYzdmMmFjMWM2ZTlkYWUyMmI5ZWI3NGE3NjQzNjA4OGJkMGJhNmUxOTkxZTE5ZTNhZjc5Y2YzIgorICAgICAgICAgICJmN2RlZmI2YTExNjE4MDI1MzRiYTBlN2VkMTY1MzQ5Mzg4NzJlY2E2NzcwNThhYzczNDY3ZDQ5ZWQxMTI1YjUwIgorICAgICAgICAgICJkZmU1ZDZkNjVhNWQyNDUzOTliNmJmMWJmMSIsCisgICAgICAgICAgIjJkNDgwNmNmYWZlNGFmMzZiZDAyZjYyZDZhNDNiMDBiNDE2ZjcwOGU5Njg1YjE3YWM4ZTNhNGQ4YzI5MTgwOTMiCisgICAgICAgICAgIjA1NzY5ZDc4OThmNmZjODU5MTdiYTJmZDhlNTg5ZmY3YThiYjg0YmI3YzEyMjAyZWQyNzllMDY0MDlhNWMwYTciCisgICAgICAgICAgImQzMjRiYzQ2YWU0ZjkyODJjOTAyM2QzZGZiM2E3OTE1ZGVmYzE2NGIzZjA4MjY2YWNmMTI0MWY4MjYyNDk4MTUiCisgICAgICAgICAgIjA3NDE0ZTU2Mjk3ODM1MWRjOGI3YTc5ZWY1MzE0MDIxMDFhOGQzZDNlYWEzNTM5YmJmNjJhYWQ5OWEzYmIxMWUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4zIiwKKyAgICAgICAgICAiMjM4YSIsCisgICAgICAgICAgImE1ODgxYWNmZjM1MjlmMjUxYjFiOWM2MTljZTlmOWRmOTFlMGEwM2RkODg5MTYzNjQ2ODcxYTYyNzIwN2VlZjEiCisgICAgICAgICAgIjQ3NjgwYzMyZjQ1MGE3NzZlMTlmNTRlYzA1NWRjNjhiMDRiZDRkODkzNzZkZjNlYWZhNmZjYWY2MGViODMxODQiCisgICAgICAgICAgIjM5MTBiNjI1YjY0ZjI1ZDkyOTlhZmMzMDZhMjM3NjUzODA0NTUxOTRiNzVkYzAxMzVkMjdjM2I3ZDcyZGY5MDgiCisgICAgICAgICAgIjc3NWM3ZTkwYmVmYzBjNWFkZjc0YTE2OWVkNTg2OGYzZDYzNDMyN2EwNTc4MTg5MjU0NDU0MyIsCisgICAgICAgICAgIjc3MTBlZWE4NjU3ZGZkMTU2NTE2NjU2MmRmMGUyZTg0MGVjM2UzZGVkYzBiODAyYmIwMjEzZTQ3YTVjZTk3ZjQiCisgICAgICAgICAgImI4NWJhOWJhMTQxOTc3MzYzZDhmNTRiMDZkNTc4ZDViMmE5NmU5NjljZmE5MTVkZjIxOWYwMDJhODVkMDMyNTciCisgICAgICAgICAgIjA0N2IzMTE2YTFjNGRkYWY3OTFkOTM5ODJkMWI5ZmZhMjQzMTg2ZTllMmIxOWVmMDc0MWNlOThkZTJhNGExNTgiCisgICAgICAgICAgIjZlNTAxMmM0ODFkZTIzYTBlZmY4ODJmZDYyMzgzOGQyMDExZjRmNjM3MzhhZmZkN2VmYjhjNTBmNDZhNmMyMGUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS40IiwKKyAgICAgICAgICAiMjVhMjdlYjFiMjFmMTBjZjlkNTcxYzMzMDU2MTBiOTdmMGRhZWUzOTkwNWM2NTk0YmZiZjQ1MmE5YTAwZDllOCIKKyAgICAgICAgICAiMmIiLAorICAgICAgICAgICIyNTA0NjE4MDExYzY3M2RiM2M0MTIyNzlkYzhhZDE2NWFiN2I2NDczYWUxOTVlOGQ2ZDQxMjE0OTE4MTk4YjM0IgorICAgICAgICAgICI1MWE2NTA4ZDYxMzhjZWRjNTE4ZDgwMTJiYTBlYzc5YjM4NmFmOGZhNDBiMDM0NzhiYmYyYmEwNjVlNTgyZDYxIgorICAgICAgICAgICI5NWNjYmUxNThmMTE3ODFlYWViMWIxNzIwYjcyZDliNTIxMjdkZWI5NTUxNzExZTg4N2RiZDBiOCIsCisgICAgICAgICAgIjM1NzJiZGVhMjMwNWUxNzg1Yzc1NGRlNzQ0YzRmYTNmYTJjYjc1NzE2MGU1Y2IzOWEzMTQ5N2UxNDg1YmJkN2MiCisgICAgICAgICAgIjA4OTljNTM1ODViMmJiYmJkOTkwODFiNDE2ZWZjNjg1NzhkYjc4ZTBlY2QwOGRhN2EzOTUzZTM4NmJiMjVjMTIiCisgICAgICAgICAgImJiYjg3Yzc4OTQ0MjgzYThjODAxODdiNDUwOGRhYmJjNzY5N2Y0M2E4YWU3OGEzM2ZlYmIxNWYzY2Q1ODFjODAiCisgICAgICAgICAgImQ0OWI5NzFiY2JkNDhlNDQxNDJmNThjMmM5MWFkYjFhZTE0NWFhOWE4M2IzYzU4MTVhYTFhOGZmOGRkMjMxZmUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS41IiwKKyAgICAgICAgICAiNTljZjBiNmI1MGVhIiwKKyAgICAgICAgICAiMmJmMTkxNjBkZjY5ODg5MzViZDI0NjEwNmI4OTA5ZGQ3YmIzZTUxNjkwZGY4NGQ3NmU0ZDMxYWM4MjEwNDQ1NiIKKyAgICAgICAgICAiMzQ2YjRjM2M5YmE3YjVlOWU2OGVlMjA4NmM4NDczYzY4MzAyZTI1OTlhYmY2YjMxY2ViM2Y3ODFhZDZiNTY4OSIKKyAgICAgICAgICAiODZmMjFjZDZkNzU1MzI4ZmI4M2FmZDU1NDg1MDFkMDcwYWMyZGQ4ZjVjZGZiNjJjZWY1NDVlODE1ZmUzODJiYyIKKyAgICAgICAgICAiMGM2N2I2NzZlNTQ1NmViYjlhYjY3ZGY0Nzc0MGM2YTQzZGUzZjlhMjQ3N2E5YiIsCisgICAgICAgICAgIjJlZDU5MWZkNGIzNTdlOTRmNDgxYmE4NGZmNGViZTdhZTQzMTA1NGU1Y2Q5OGE5OTU4OTY0OGU2MTZjZDY4ZTAiCisgICAgICAgICAgImQ0NzI0ZmE4YTZjNTk5Njg2YmZlZTE3NDdhZDA3N2RiZWRhZDQ1ZjEyNDRkN2Y4ZTAwZGEzYTNhMDZkMjMxMzIiCisgICAgICAgICAgImQzMTcxZDc0NGVmMTRlMWU5N2NkZGExMDliZDJlNTU2YTVmYzdiYmM2MDlhN2ZmMjRjZmFiZWY0YjU2Y2JiYjciCisgICAgICAgICAgIjBlMDUwNjUzYjY5ODQ4ZDcxMTMwNzVhNWRlYmU3YTQ2ODIxNWY4ZGMwOGU3ZWY4NGZkNTU3NzhjZDViNTk2ZTUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS42IiwKKyAgICAgICAgICAiZTk0NDUyZjUwYTVlZGJlNjc1NzNhYjIyMzA5ZmEyMWJhYmM2ZDIyNTIwZTZlODNiZjcyZTdhZmE2ZDcxZTIwMiIKKyAgICAgICAgICAiOTZkYWVhZjU0YTYwYzgwMzYzMDQ4NzlhMjEzMWQxNzg3ODBlMzQ4ZWUwMTIwYjk5N2MiLAorICAgICAgICAgICJjNTMwNDQzYTE2ZWZkOGQ2ZDcyYWI0NDQzZjhkYjI0NDkxZGU5OWQ1YWFiZTUxODhiM2Y2MWRjMDQ4M2I3ZWUwIgorICAgICAgICAgICIwYjFjMTMyNTliOGFlMjQwOWYxYWU2MmQ5OTMwYzExYTRkZGVmM2U4MzU4MjkzODg5M2Y5YWM2NjhmNzljNjRjIgorICAgICAgICAgICI3ZjVkNzk2ZCIsCisgICAgICAgICAgIjBlZWU5MGM3MDgxODIyMWFlMjcwNGJiZTM4ZDY4ZjhlMTU0YzZlZTdhZGU1M2UyYTFmNGQxZGJhYWM5OGM1NzUiCisgICAgICAgICAgIjkxZWJiNmM2MzhiY2I2OGUxODE0MzViNzAwMDFiYWQxODAxOTJiZmRhMDU3MzJjMDVlN2ZiNWFmMjJhYTg5ZDIiCisgICAgICAgICAgImE4ZmY4MGNmOWYwODYyZjA0YzA1Y2FjYTNkMmEzYTViMDc3OTk0NmM2ZGRmYTA0Y2Q3OWZhMTY0ZDYwMmYxYjciCisgICAgICAgICAgImRlNWM5NWJlODVlOTYwODQ2N2UyNWMyOWQwMzVjNDY2MDkwNjI2OWY2ZGMwMGE0NzJiMDQ0NmVhNTZlNzJhNTkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS43IiwKKyAgICAgICAgICAiMWNiZmEwZTdiMWExMGMxM2Q3NTA3N2IxY2JkODAzMTBjZDI0MTAzNDBkNWY1MzcyOTM0NjRhNjc4MWE5Y2MzMCIKKyAgICAgICAgICAiMmNiNTM4MGVkOTI2N2IzZWIyM2NkYjEzIiwKKyAgICAgICAgICAiZDM2YjdlMTc5OTA1OWQxZWQxMzQ3YjBiZjgyNDdjNmJlNTE4N2Q4ZjE1MjE5ZTNjYjY2ZWM2MmUxYWM0MWZmNyIKKyAgICAgICAgICAiZWQzNTdlZDdjYTAzODRlMzFkMzk5NDg1NjFmYzE2Y2JkOTZiN2U3MDQyNzllNTcyYmY1NjRlMDZjM2EzNDAxYSIKKyAgICAgICAgICAiMjcxNGRkNTFkNzIxNWJlYmExYzY2MTU0ZjYwZGQwY2Q0ZCIsCisgICAgICAgICAgIjljMDNkYzAxMzNhNmU2YWFiYTkyMDU5YmRmNWE2Y2MxYjE0NGI5MGQyYTk0YTQ4ZTdiM2NiOTBiMGJiNmY2MjQiCisgICAgICAgICAgImM3YjFkMTcyMzMxZTQzMjNkMDhkMmU4ZTA5OTUzMmRjYjNiMmE4N2NhNDIwNzQ5ZmM2MzQ1YzBkODZlOWFiY2EiCisgICAgICAgICAgIjcxYWYwOWEwOTI5ZWRlZWVkZTgzZTcyMjQ0MjAzYjJiZjQ1Y2ViMTg3ZTlkYjNjN2QzYWQwNWIyM2I1OTYyNGMiCisgICAgICAgICAgIjI0NjY5NmNmYzc1ODA2MzkxNDAyZTQ0NGUzOTc0OTY5ODhlMWUxZjQyYzZhZGVkMzBjZGM5Mzc5MzdmMzAwNTQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS44IiwKKyAgICAgICAgICAiZTE3MmE2YjhiNDk2ZjA3NzczOGI3NGY2ZDhiMjkyZGRhNjA3ZjJhZGJmYjM3MmJlMzdlZTAwMDg4OGJlYTMxZiIKKyAgICAgICAgICAiOTljYmExY2YzOTMyZTRiZTM3MTdjOWUxNjg5MDFhMzJkMWI4MjBiZTRmYjAxMzc1MjdhMjQ4MTg3N2ZlMDFlZSIsCisgICAgICAgICAgIjg0MGNlMTNiYmM5NjE3ZGM5ZjNmMjZiMTQ3MzAxYTZmNDYzMDBkNzc4MWE1ZDk4MTE2MmY4NjkyODczNzFmMWQiCisgICAgICAgICAgIjU5NTg3NjRmYjAwYjA1NTM3MGVjNzExYmJhNTI4M2ZjYjAwYjgzYmMwMjE3NWVhMTAxN2JjYzgzNTMiLAorICAgICAgICAgICI5OTNlMzk2ZmI1N2IyZWE2YTFhM2ZjZWQ5YTY5ZDM2MWNiYjYyNjViMjY1MDNjMTc1Zjg0YzYxYTQxZWEzZTFjIgorICAgICAgICAgICJlNGZiYjYyZTAxZDY0MjBlMjJmZWYxZDllMjhhNTg4M2UyZWFjODJlMDVmMzU4ZWE3NWY3N2RhNDg5N2I2YjY0IgorICAgICAgICAgICI5YWE0NzQyODM5NDE5M2RkZWM2NDhjM2E3ZmI4MWNmY2Y0YjUxY2UzZWJiYTc4YWVkY2E3YmI5MTdiMzViM2UyIgorICAgICAgICAgICIyYWViMjAxY2VhOTY1OTJlNTBlMGQyODQxZTdkMmNlMGQ2OWZmMzAzOWRjMDFlOTY0YTk3N2EwMTc2ODNiMzg3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDUuOSIsCisgICAgICAgICAgImM4ZjBlYTIzZTA2NjExZTRmZDI3YjYxZGI3OTIwYzU1ZjNjMGEyMjIxMjg4MzhlNGNkYjA2MmUxNzZiMjFmYzIiCisgICAgICAgICAgIjMyNTM1NThjNWQ0MGRlMmRmZDYyMGZiN2NkZjEzOTljMmFmOGZjNzdjYTMzMzUiLAorICAgICAgICAgICIxNjRkNzdiNWQyNmFlNmQ3YWJlN2NhZWQ2MjVkODdjMjExY2M1MDlhZDAxNzJjMjA4MzNkOGY5OGNhZTM4YTJjIgorICAgICAgICAgICIzNzBlZjIxZDQwOTZkYTg0MWRiZWVlOTQ4ZWM2MzQwM2NhYmQ0YTVmNzFhY2U0OTM2NGFhN2RlMjBmMzJjOTg4IgorICAgICAgICAgICIzMzdhMTE1ZjgzNDYiLAorICAgICAgICAgICI3YThmMTVlZWY1MTBhZGU4ZDVjMzE3ZjkwNjRhZDdkYWU2YzkzZTdjZjE1NmE3MzcyMjAyMzI1OGY4YjU3NDQ3IgorICAgICAgICAgICIzNDcwMDAzNGEzZGU2ZjEzN2FmNmU5MDA0NmQ4NmU5YjkwNTkwZmE1YTY1MGNlZjRmZGI0ZDMzNjAyMzNhZjg2IgorICAgICAgICAgICJmNGE3YTIzYzI0M2QxOTUxYzY2NmI2NzNjMzNjN2RlYzRmNTFhY2UzNGI4MDVjMGE5ZTY3ZTIwOWNjN2Y5ZWQ2IgorICAgICAgICAgICI5YjhmNWViNWM1NTNlMGYxNWMxMDMwNGJmNTZkN2JlMTcxZjMxY2NlODhmMzdkMWZiNGEyYTAwNDE4ODk3NTc2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDUuMTAiLAorICAgICAgICAgICIxOWRiMjQyMjA1YzAzZDdmYTk5MzVkOWUwNGZhNmVjZjM4YTUxZWE5OThhYzhlNGJhY2E2Y2RmZDZhMGFjZTFkIgorICAgICAgICAgICJmMzY3ZTczZDIzYzI0MGFmNzZiNjJlOWZlOTIxNWZlOTQzIiwKKyAgICAgICAgICAiYmU0OTUyMDU1NTY5NTZmYWUyYTIyZWE3MGNlMTAyZGUwNjZjOWU1ODk1OTYwNjIxNzQ4NGE1YjE1MDM2ZmZhMSIKKyAgICAgICAgICAiZDQ2MTIzOWRkNDdiNGYzODFjZWE3MTUxNmUyZGIwZmMzNjlkNzJiNDQwNjk2NTEyYTk3Mjg4ZjA2ZmMwYmNlYiIKKyAgICAgICAgICAiOTY4Mjg2ZTk5NWUwMmQyMThkOWMyNjYyIiwKKyAgICAgICAgICAiNTUxMmIzOTk5YjMwYzljMTQ0MGU1OTc1OTMxZDU1ZjIxZTllYjQyMmI2MmRhZmNkYWI1ZDUwMDNhNzVlYjEyNCIKKyAgICAgICAgICAiODE5OTg2MzYxOTEzMzYxZGZjNDZhYzI5YWFiYThlMWFhMDJlMWJhNDQ0NjcxNjJkMjBmNjNhZDE3MGZlMGQ4NyIKKyAgICAgICAgICAiYTUzZDkzYzY0ZTAyNmIxMmJlNmJjMmI4ZWIwZTU3YzAzOWViNjBmMzJjNGI1MjcwMzVmNzAzYTdhODM3NGJkNyIKKyAgICAgICAgICAiZmFhN2I1NDA0YTNjNWFhZGI3OTJlMjVmZjkyODc2YjIzZGQzYTc0MjJjNDUyNjZjNmQ5ODZlZWM1MzM0YjliYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA1LjExIiwKKyAgICAgICAgICAiNDlhNzYxZjhjMThlZjkyMzYyZDZhYmIyNGMwN2ZjNzI4MjU1ODQyNDUzNjk0ZTE3NjA1ODk5ZjQzN2IzMWFjOSIKKyAgICAgICAgICAiOGRiNTE2IiwKKyAgICAgICAgICAiZDhjZDg1ZWRmYTBhODRkMDc2YTlmOGIyZjkzZGFhZWJhOWFlMzc0MzgxZWE0ZjhjZWFiYzE0ZjYyYTRlZDc2MyIKKyAgICAgICAgICAiOGMxZTM5Njc1N2RlM2FlMmI3ZWZhM2ExN2M5YTU1ODZkYTg0YTVlNTBlY2RlZDYxMDg3ZmE2ZjBjZTkzODI4NyIKKyAgICAgICAgICAiOTk4YWMxYjliYzMzMjFhN2VkMTYwZDI4NjcwNGUwNTI2ZWNlN2IzMGI0NjgxNDY0OWZlYyIsCisgICAgICAgICAgIjliNDc4MjY4NDA2MjEyY2EwNTMwZjQzMWJkYjI2MzcyNjE1MDg0Y2E0ODhkYTQzNDUxZDI1YTIyYjM1YWM2ZmMiCisgICAgICAgICAgIjYxZTM3MDc0YTVjMjJiYzFjNzAxZGIxOTMyYjhjNTU3Yjg0ODdjZWE1NjYwNTBlNDhhZDZlMDM3NmY4ZGI0MTkiCisgICAgICAgICAgIjhjNGQyN2RiMmU2YjI4YzI1YWVkODM3ZWY0Nzc0MmQ1ZWI4ZWIxZDhiNDMyYzlkNTczY2Q0Yjg2ZmRmMzJjNTIiCisgICAgICAgICAgImEzZDBmNmNmOTJjZjNjZDk1MTk2NzdhNThiMWQxZDk5NGZjMWM5MDU3YWMxMDZlODE2MDQ1OTI2YjQ1YjAwZTUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4xMiIsCisgICAgICAgICAgIjg0ZTgyOGY3MTVmMjI4YTYwMjY1IiwKKyAgICAgICAgICAiZjdmMjc1YTg1M2Q0ZTEyNmQ3ZDBjMzhlZjcwM2YzZmJkYTdhOTUyMDc4OGQ3YTgxYTMxYjA1MzBkNDNmZTZjOSIKKyAgICAgICAgICAiNGIxYjFiYjEwODUxMjA5ZGIyNmFjNGI4ODhhZWNlZWE3NzEzODI0YzI5MzhiNGM2NDMxYjJiMDNjNjkzYWI3YiIKKyAgICAgICAgICAiNTQ2MzE1NDE1NDZhYzQwMzk0Nzk4NTQ4ZmJiYTk1ODgyZDkxYTE3YzI3ZTdkZDUzMDI2Yzk2NzkxZWU1NWYyNCIKKyAgICAgICAgICAiN2Q3Zjg5OGZlYWIzNzA5YTEzMmE3ODI2NjZhMTRkMGRmMWE4NGUiLAorICAgICAgICAgICI0ZTNmZTk2ZThmOTZlNWIzYzYxMWNhZGI5NmVkNTEwNDIwOThlY2M1NDdiZTdiODhmOGRlYTc2NWFlMTRlODM1IgorICAgICAgICAgICIwY2ZlMzlkY2IxYzFkNmU0MTc5Y2E0MDRkNTM4NGQ4N2IwNjY1MDc1ZWVkN2RhN2FhZjcxMDA4ZTI0NjdkNzBiIgorICAgICAgICAgICJmZmY2MjNiNDU5NGI2ZGZmZjkwZTNkODQ4NWY5NDE4OTQ4NmNhMGNhOWU3MjJiMmE3NzdlMjViNTgyZjdhZDRlIgorICAgICAgICAgICJjNTEwM2FkNzY3ODU5YWM1OWExYjhjNWMxOTcxMzAxNzQ4ZmNjMjY0ZjZjOTI5MzY0YThkOWFmNDIyNTVjMGY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDUuMTMiLAorICAgICAgICAgICJjNDc5N2U4YTZmMjY5YmYyNWQ0Y2I0ZWMzZmE0NmY4ZjExZTZiMzY5ZmJkYWVjMWU1MTk3ODM1OGQ0NmYzY2YzIgorICAgICAgICAgICJiODQyOTE3ZDk2N2FhOWQzMGIxODM0NTM5MzdhNjgyNjU2YjI3YiIsCisgICAgICAgICAgIjE3Nzc0MjE5N2YwNDExNDQzYmQ4N2UyOGVhODhkNTRiNGYyYzdhYjFkY2FlZDgxYTU2ZjhkNzg3OTExMjQ0NTQiCisgICAgICAgICAgIjAyODUwNGQzMjJlMWRlMzQ2MDQ3YTQ5MzkzM2U4NzYyOGNlMDhiMDZjMDE3MDgyZGNjZDM4YjQ4OTQ2NTE0ZWEiCisgICAgICAgICAgIjM3N2MyZGZjNzUyYWRjMjRmYjU3IiwKKyAgICAgICAgICAiNzk4NGMzYmFkODZhNTQ3OTkwZTA0NzVhNDg0ZjhkYmE1ZDRkY2ViMGQzZTNmY2UwNzFkNmY4NzE3NmI3Y2JlNiIKKyAgICAgICAgICAiZjgxMTJkODFkN2NkYWFkNzdlZDBkNTc4OGU2NWY4YmY1ZjBjMmFkMGRmMDdjY2RmNTRiMmRhY2VmYzE5YmE2NSIKKyAgICAgICAgICAiMjAxY2NmZDM2MWQxODZiN2Q5ZTI2OWFhMWU2YWQyYzcyYmQyM2Y1ODA4NGZkYmMzYmM2MGUxN2EzM2UzYzU1YSIKKyAgICAgICAgICAiOTVlYjBjMzhhMDgxYmMwZDM5ODFkYjI2YTcyMTJkNmY2OTFiMzM2ZGFjNDZiNjRhZTIyNTM4YTdiMDA4N2YyNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA1LjE0IiwKKyAgICAgICAgICAiYTVlOWRlYjFjMjBmOTgyZDViN2Q0Yjg3ZDc5OTQ2MWYwNTNkOTE5ZSIsCisgICAgICAgICAgIjU5NzU5Y2Y1ZjgzOGQ5NTI0OTNkMGY0MjgxZTNlYTBmZTIxNjk3MWMwYTJlMjQ1NGI5NmM4YTExYjRjNjkxMjciCisgICAgICAgICAgIjE1OTAyNGRiNmVjNWMzMzY0MGQxMjAyOTU4OTlmNjY2NmM5NDE3YjIwMmE4NmMyNmVmZDdjNjEzNGM5MmZkODYiCisgICAgICAgICAgImI4MzIzZDE3NGE2MjUzNDg4MTM4MmQ3YzZjOWUxYjhjMWU5NWRhZjIxMGMzZTliYTQzZTU4ODc5ZjM0ZjJmYTciCisgICAgICAgICAgIjFlZjZhZTRiNjhkNjQxNDdiZSIsCisgICAgICAgICAgIjcwYWMxMDJkMDcxZTNkOTAyMjgxODM2MjE2ZTA4MTI5MGJiNWRmY2Q1NjY4ZDExZGFlZmEwYWIwNjQ1OTlkMGYiCisgICAgICAgICAgIjkxNGI0NzI5NjEzNzViYmY1ZjJhNjY2ZmFlMGY2YTI1YmFmZDQ0ZjY2NWMxN2MxNDRkYzRkNGNjMGE1ZDViYTUiCisgICAgICAgICAgIjVjNDdhNGNkZTk1OWIzMmJhYTUyMzJhMDdmYmY5Mzc4YzljNTNjYTJiMzc3ODFjOTNhMWNjOGQ2NTI5NDc4YTEiCisgICAgICAgICAgImM2NzMwMzRkZGE3ZmYzMzU2MDc4NmE0NjRmNWI0YTU1OWM2MjZhZTI5NWJjOTFkMGVlZDkzNzVmNDllM2U0YWEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4xNSIsCisgICAgICAgICAgIjczOWZhNzZkYmQxMjczMDNiN2FiZjkzZTFkN2JhNzI5NzU1ZDZjODExYjVlOTMzNTVlMGMwMTFmNzQ0NjRjN2QiCisgICAgICAgICAgImI0NzkxOTNjM2ZiNzM4MGE2MmEwYzAwNmEyZDFkYzQ5YTc2NmFmNjNmYmE0NTI3Y2QxNTc1MDZkNjJjMjFhIiwKKyAgICAgICAgICAiYTBiNGRhZmYzZTI2Y2ViYjNlNGUzYTQzZGIzNmM0NjZmYjhjZTYwNWIyNWFmNGM5ZGE3NDRiNjJkNDFmOWU2MiIKKyAgICAgICAgICAiYzIyODVjMzkwZDYwZDE4ZTNkN2U2NzViNGFjMzE5NjcyNDQ1MTk0NmJjMWNjZjJhOWI1NjJjNDUzM2M5IiwKKyAgICAgICAgICAiMmI3OTgwOTFiM2EzOTE1MzNkNjJkYzBlNDE3YmE2ZGVkYTAwNWJmYzMwYWI3ZGM4MmU4ZjliY2M3NDE3YmNiMCIKKyAgICAgICAgICAiMDQzNDhjNmQwMGU1MzdkMjcyMmI4NDM4NjE0ODkyNDVhYjBkNTFmMjExNDQ3ZGFjMzNhM2Y5ZGQ2ZjNjYTY2YiIKKyAgICAgICAgICAiYmZhMGQxYWRmOThiYzkwOTk1MTU5MjY5NzZiOTI1OGFhYjYzMjA0YWQ4OTE2NWM4N2JiZWZkOGQ5ODg1MzRiMyIKKyAgICAgICAgICAiNzQwN2RmN2Q0M2FkMzkxZWVkOTk4MjQ3MjhlZmMzYTUzM2I3ODliNDdlOGFhNzEyMTYxNzQ3NGYzMzI1YzUxYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA1LjE2IiwKKyAgICAgICAgICAiNWE0NGI1NDdiZGExOWVjY2ExZGM3YmMwNDU1MDIwNWY2NmM1ZGUwYWNiIiwKKyAgICAgICAgICAiMmY1NDg1ZDI1ZmU1Y2U0MGFlNjJhMTEyOTc2Y2I0YTUzOWI3NGQ5NmVmOGJlODczMzI1ZTIwNGJiM2Y4NjYwNyIKKyAgICAgICAgICAiYTE2YTJjMmFiNTBmNjk3ODA5ZWQwMzAxNzI3MGVmMjBhMTAyYzQzYTJjNGMzYmU2YWI3YThhZTJkY2I1Njk4NCIKKyAgICAgICAgICAiZDVlMDY1NTI0NTkzZWI3MDcwODM0Y2U1NTNmMTc1NjkyMGJiY2JiZTRmYjI2ZDM1ZDRhZGNiNTlkZjUyNDYzNSIKKyAgICAgICAgICAiNmZmMTJlN2FhOWVlNmRlZiIsCisgICAgICAgICAgIjYyZDE0ODlhNDAzYTkwZmFhYzY3N2FiYzE3NGFhNzI0M2JjNzUxYTk2NDY5NWY2YzMyYjM5ZGUwMThmZTQ2NDMiCisgICAgICAgICAgIjQ0MjBlYTc2NTliZTJjNDEwYmM1NmM0ZTNlN2ExYjE2NzdmZGY0YWRmYjIzMjRmMDQxZWRkNTc5MGM0Y2RmYWIiCisgICAgICAgICAgIjM2NTVlMDdlNDFmZTlkNzMyOTIxNTFiMGRkNWI5NmZjODRhNmIyMGY2ZjNiYzBmNjBlYWVhOGQ4MjkxN2IyMTAiCisgICAgICAgICAgIjgzMDU1OTQwZmMwMmVlM2UxN2MzNzhiZDRkODUwNmQwOGVjNDVmMzNkZTU3ODBmMDFiZDMxOGE5YTE2Nzg3YWQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4xNyIsCisgICAgICAgICAgIjE2ODAyZDgwM2MiLAorICAgICAgICAgICIwMmYwZTc2MmMzMzkxN2JmNmE0ZGYxMWZhMjg0NzM1NDdhNWFiMDc2N2RkM2E2MWE4ZDA1Y2MxZTZmOTgzNDVhIgorICAgICAgICAgICJmMWEwMGU0MmY2MmJkOGVjY2FjYmQzN2Y0Y2NiODA5ZTllMDU1ZjczZDMzNzVhNjA0MWQ5NzgyY2NkODVkNTlkIgorICAgICAgICAgICIxNGY0M2U1Yzk0MTAyNTdiOTA2ZTQxY2M4Yjk3MzU0N2QwNjIyYmQyMWRiMjlhOTEzOGQzYjFiZWRlMzhjZTVjIgorICAgICAgICAgICI5NGM0ZTFkMmEwYTg0MDBiNDViYWNkNDI2OTc5N2MzODVhYTMwNjZlNjU4MDcyOTkiLAorICAgICAgICAgICI3NTNiOWNlZTcwZDQxODFmOTU2Mzg3ODBkYjdhMDRmOWIxMmVhMzhlNWRhZWU0ZjI4OTRjMDI2NzNhNTNmNDg1IgorICAgICAgICAgICIzMDc0NmZmMjg1OGI3ODdlZmNiNDJkNDVlNTMxYmVhMWM4ZGFlOTQ4NzcxNTNiOTU2YWM3YjI4NzQ2ZWUyMWM2IgorICAgICAgICAgICIzMWJmOWEzYmE3OWQyYmE4MTMyMWI3OTYwM2IxZDAxYTRlOTA5ZWQ1YTI3Y2JmMjdjOTU3NzgzZDNmNzk1MGUwIgorICAgICAgICAgICIxZGQ4ZjQ0N2YxMGVjZWQzNmYyZDE5MzU4NmY1Y2MxN2ZiNjIyYTA1ZmFhMWZiNWNkMmFhMDY0YzA4NjdiMWNhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDUuMTgiLAorICAgICAgICAgICJkNmQwZjYwMzg1OTc5Y2E1MDZmYzgzMzQyMWJjZDIyZGE2YTA2YThmMzcwYTdmMDJmZWY0N2MxY2IyMTk5ZjI2IgorICAgICAgICAgICI0NWM3NTQ5MGZiZjc4OWFkNTI0NzA0ZGE4YTI3NjZjNiIsCisgICAgICAgICAgImEwM2MwNTY3MmVmZTIzYjQ0YjI2Yzc5M2U3MDUzYTc3MDQ4YmEyZGJiNGI1M2FlOTc1MTg1NGU3YWRkN2Q2N2MiCisgICAgICAgICAgIjEyY2JkMTZjMGIxOTM0ZDJjMjNlNzdjZGNjODljZTFkNDVjNzYxMTU4YWE4NjEzMTcxYTczOTAxYWMxZjYxYzYiCisgICAgICAgICAgIjU3MDU1MzNkM2U2MzliNTdhMjQ4OTI5MTc5IiwKKyAgICAgICAgICAiMDA3OGRjNDhhNjYxNTg5OTJhYWE2OGZjM2NjYzYyOGY5MmE3MDhkMGIxZDQzODM3MjA4ZDUzNGJjM2Y5YmUxYyIKKyAgICAgICAgICAiMTQxMmVkMGY5ZjdiZWY0OTQzMGRjOWU5OThmNzUyZTA3NDc3NjhiNGFlMzgxNDQ2OTZjMDAzZDZkMjVlYTFhNiIKKyAgICAgICAgICAiY2E2YWVjOTI0YTlmNGQ5YjU3NWE4ZjEzNmJiYTI5YmYzMWMxM2I3MDUwYmQ1NWQxMDAwZDQzM2RhYTZjZjEwYiIKKyAgICAgICAgICAiNDkxMTZjODA2MzEwN2ZkM2E1YmRmNjE1NDVjNWQ4NjNmNmE3ODg4MTc4NmNjOGRjMzc2ZDM2YzkxMTM2ODIyNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA1LjE5IiwKKyAgICAgICAgICAiYjAzODFjYWMwNGYzMTAxNTA0OTY4ZjI2ZDY1NTQ3NDUzODNiZDE3MWQzNjE1NmRkMzY4MGIzZGI2ZmFkN2Y3NyIKKyAgICAgICAgICAiMWY3ZCIsCisgICAgICAgICAgImNjNTQ4YTY3NzdjZGU5NTNjMTVhNzFmYzQ5N2MwYzM2MTdiMWJiMDU2YjAzMjg4ZDlhNTQ4YjY5M2JiNDMwOGIiCisgICAgICAgICAgIjY3YzFkYWMzOGJiOWI4YzljYzg5NmFjMjQ0YTllMzBkMTMyNDMwZjRjZWFlNTc5MDM0M2RiY2UzOGQwNTZmMjciCisgICAgICAgICAgImI4NmJkZDlkMzJhODE3MWYzYjNjYzJmZDE0MjI2NWFjOWE2OGRjMzUzNjI3MzM5Y2Q4ODMwMyIsCisgICAgICAgICAgIjQ1NmY3YzNlM2JlODVmZjdiZGQ2YjViMjUwYmZiODFjZDZmYmIxODZkMjVlMGMxYzUyNTlkNjc4ODc5M2M1NDEiCisgICAgICAgICAgImVkYWNiNGVjZGVkYjhhODkyOTAxMzRhNjA2ZjQ2YTgxOTkxYzEzYjEyMGUzMzA1NmJjMGZjN2U5N2IzNDJkMGYiCisgICAgICAgICAgIjIwMDUxODEzZGRlNDVlMGI1OTZhN2RjZDY5MDQ5MDNiOGZjMDc2YTZlMjRiM2FkODAxMzQxNmQ5ZmQxODQ4MzAiCisgICAgICAgICAgIjU1NGFkNTRkNTU0OGJjYWRkYWY1OTIwYTAyNDk1NTg4NzgyNWRkMzcxYWU0ZWY5MDA2OWE0ZjMxMWM1YTE3MjkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNS4yMCIsCisgICAgICAgICAgImU1IiwKKyAgICAgICAgICAiZmUwYmM3YWNiNTZjZTE0YjRlMmY1NWZiYTBlMmIxNzE1NDkwN2JlOTRjZTQ4NWM2OTg0ZDYxZjY3YzA0YTc0MCIKKyAgICAgICAgICAiYTI4ZDYwOTRhZWFlMzNiM2VhMGQ1ODE4M2UxZWM3ZjYwMWIyYWI4MjBmYjhhN2ZmYWMwYjRmOTYwZTFiNGFjYiIKKyAgICAgICAgICAiZTU3Y2RjMzViMjI1YzQ5N2ZjYWNhMDMwMTlhMjk1YjNlNjZkYTk2ZjUzNzljY2QxZGE0NDQ3OWE0ZjIxMzVlMSIKKyAgICAgICAgICAiMDYzZDcxYTI4MmMxZTY2ZmRiZDVkOTUzZjU3MThjMjUzOWQwMGNlNDliNDUxODIwNDU0ZDJkNDkiLAorICAgICAgICAgICI1YzUzMzY3N2ExZGNiMzYzOTVkYTlhNmQzNDc3YmZiZjcxNTEyYzZhOTMzZDA0MWNhMzEzNDRlMWNiZTFlNTU1IgorICAgICAgICAgICI4OGExMTQ2ZTNkZWM0NjEwZWZhYzQxYjVmODAyNjYwMjY2NTJiM2Q3YWE1OTQyNzRkOWQ5MjBkMzNhYTBhZDliIgorICAgICAgICAgICI0ZWM1OWFhODgwNzEyYTFkMWMzNjhhNDU3ZjM1Yzc0Mzg4YjA0MmYyNDk4ZTlmNGJkNDVhMjZmMzIxZGQ5ZWIzIgorICAgICAgICAgICIzM2VmODBhZmUzYWY5ZjcyOWNhMThmNDJjODhhNzE3Mzg1OGM1NDIwNjZmOGEyNTJjY2YwZmVhZmU2YjVhOTI0IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI0LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImRkY2FkNmEzOGIzNzA0Y2JlMDZiYjFiNTFkMTE2MjU4NDk3OGE0MjkxZmI2NzNiNGVhMzBlZDhiNTFhNGJmMjYiCisgICAgICAiMWRjOWYwZjQ2OWNlOTk4OGEwODlmMDg0MzY2NDY0YTE4MGNmZDcxNzEwNjlhNmY2MzZkNzVmMjM0MDFiMzBjZiIKKyAgICAgICI0M2FkY2Y4NzBlY2QyNDU4MmY0ZGEyOTUyMjkxNTFkZGNmYzdjOTkxODZiMjQ1ODg1Y2I2MzE5NmM0YTU3MjZmIgorICAgICAgIjIwN2VlMzYwYWYzYWQ4YzQ4Mzg1YTRlMDg0MWQ3ZDg1MWQ1NDU0NWRlNzY3ZDhmOTk5ZGMxN2ViMGM1NzExODkiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiNWU0OGUwM2RkZGVjYTFhOTU5ZDllZTRkYTNmMWMzZjBlYzJhZDBmZTdhNzBjMTc3NjMyNzMxOTQ0YzNjZDBkNSIKKyAgICAgICI4ZjRjNGQ5NjU5NzQ2ZTY4NWE3NmM5M2MyYjMzM2E2NDNkYjIxZDI5YmNkYzZkMTFiNWY2OTA4NzE3YjU3NzY1IgorICAgICAgIjk5ZmYzMDg4YjIwMTRmZmM1MWYxOGQ5MzIyMjRmMTA1OWIyMjM5ZWE1NjQ0ZTgwNjlhNWNjNDMxYWVmNjA3MzgiCisgICAgICAiMGFhOTI0YzE1OGFiY2JkZDk3NTFmNTRlNjc3OWM0ZWMyMzIxNjhiMDAxNGY0YzhiNDk3YmU5NDlhZWU2NTc1MSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMSIsCisgICAgICAgICAgImEzZTE1Mjc1ZmIzM2FlYzM3YmQzZGQ1ODJlMTlmNWQzOGI5ZDBkIiwKKyAgICAgICAgICAiNzhkYWE2MWMwN2Y5NDFiNGI0NDBlNzM4MzM4ZDA2Y2MxNTdhMDE1NzRhNzJmYTc4ZDM2M2RjZTk5NDA5MDQyMiIKKyAgICAgICAgICAiMGE3MTMyMzU2OTk2ZjA3YzAxZDU0ZWU1NGZhMzJjNWZhYTFiOTBkMjQzMGM4MGEyMzIxN2UwNmJiMWM4MDQzZCIKKyAgICAgICAgICAiNjFmZmExOGFhMWQxOGUxNWU0MzBhYTEyMWNkZmY0M2ZhYjJiYjBkZWJmNzNlM2Q1YTc1YjQ2ZjkwZGY3M2Q2NSIKKyAgICAgICAgICAiNmJiMDY2YWMxYzc2OGZhMzgzZTQiLAorICAgICAgICAgICI5YmYxZGNmYzY1NGNhN2EyM2Q4MGExMmMwOWMyNTlkMDRiYWUwN2U4MzFmNjA5ZTlmMDM1ZDM1NjQxNGVkMTA2IgorICAgICAgICAgICJmOWI0NjIzNWZhM2RhOTFhMzJiOGZkYzhmYjg4MzBjOTY1MjNkY2FhOWIyNTM4ZmMwMTAyZGMwZjdhNWZhZTg2IgorICAgICAgICAgICIzNWIzYjEyMzE0YzM5MDU1ZmFhY2ZiZTAwYTE1MTYzNDI0MTQ4Y2M5ZTBmMGFiNDJkZjA5MDIzYzA1MmE0NmFlIgorICAgICAgICAgICIzZjg2YTE4ZGNjNTM4MGNlMzkwNjJlMzYyMzc1ZDNhNWY5ZTNiMzRhNWRhMjVjZjBkZTljYzE5YzRkMDRmNjNmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMiIsCisgICAgICAgICAgIjQ0M2FiMDNjNDYwNGRiZDhiZjgwMDZhZWNjMmFhOGRlNjRhMTU1YjRmOTBjZGIwODU5OTg2ZDVjYTM2MDY2MDMiCisgICAgICAgICAgIjU5ODA4YzU5YmQ5YzJkZTc3NWZjMTg1MjAyMjRiNjY5YzMyNSIsCisgICAgICAgICAgIjNhNmE2MDg5ZjcyN2RkMTY5Mjk3YTU3OWZjYWY4ZWE3ZjhlMTJkNTQyN2YxZjc5MDFhOTAyMmEyMWUyZDgyZDIiCisgICAgICAgICAgImYwOGU2M2JhY2EyNjdiNjUzYWFmODlkZTIzMmJhM2QzOTJkMWNiNDlkZDc2YjM4OGIyZGFkZmIwMDk0ZmRhOTciCisgICAgICAgICAgIjE4ZjE3ODM3MzhkMThmYTdhYWE2MjkiLAorICAgICAgICAgICI1YTBhZTBkZTI4ZmQzM2NjOTgwMWJmNGRkMzA2NzEyMzc0NTM2M2NhY2U0ZGQ4YjdiOGI4MTFkNjQ4MmY1OTEyIgorICAgICAgICAgICIwYzBkNjUzZWVlODZhNjFhMDEyYTE4MGVjNWQxN2U5OTE0NmQwY2NhMGE1ODdjODVjZjAxZGM3YWRkODQyMzBkIgorICAgICAgICAgICI5MTgwYmRkZjVhNzcxOWY2OWQxZmM0ODFhZjZmNDdkYjhjYmQ0ZWUxODcxYTU3M2ZjODc2N2NlOGJlZWRiNWM3IgorICAgICAgICAgICIzZmE5M2YwYzUzODA0YWZlMmU3NmNjZWJiODdjYmEwMGNkYWM5NGRlNDBlMmIwYmVhYThlMmU0MTU4Yzc3ODUwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMyIsCisgICAgICAgICAgImQxYmEzMGU4OGNkZGEzM2QyYjQxODk2ZjQzZGYwODFlZWYyMGNhZjc4ZDdjMWI5NzBjNmE2MTcyZTgzODM5ZGMiCisgICAgICAgICAgIjQzZDRiZTI5ZjlhNzcyYmE0MTU5NzM4YmM2MTMyOTY4NjE4ZGM3MTk3YzBlZGM1N2ExIiwKKyAgICAgICAgICAiOWJiNjJiZjlhNzUxZmU0MTgxNjY0MzY4OThlZGU4MzVjZmFlZTJmNTBlZmNhZDYwOTQyZjJmYjJkYTFhMjAzOCIKKyAgICAgICAgICAiMDNmMGJlODBiZWIxN2ZmYWQwZGFiMjE4YjEyODAyN2YzNDk3YTRmOGQ0MWFiOWExYmUyNjRlOTZiNDQ1NDg3NiIKKyAgICAgICAgICAiN2JlOGQ0YTciLAorICAgICAgICAgICI4MTE5MWM1NDc1MjczZGU2NmE0MWJmNTYwNGYzMmI1OGI3NTlhMTRlNzQyNmM3NDZkZTRiNTNiYWY3ODBiYmE0IgorICAgICAgICAgICIyYjQyZTkyNzhhYTk0NTI3ZjBlZWJmODU1ZjQ2MmQ2ZmJiMjk3OGE0NjUzMDM3ZDhiNDQ4ZTFiODA3YTE4MzFkIgorICAgICAgICAgICJiYzUzMjJkMDY2OTg0ZWVjMjgxMTRmYjcyMDFjNzk2YjU3M2FkY2M1Y2M5MjdmM2E1ODk3YjIwMDU1NjRlZjFhIgorICAgICAgICAgICIyYzAxNjdmNTQzNjU1MTE4MzRhYzZmNDk1OGI4MzE4ZDA5ZTY3ODU0ZDYzMWNhNTI4MDc2ODZhYjcwNWQ3MWEzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuNCIsCisgICAgICAgICAgImE1NGJjMjI3OGI1Njc2ODVjOWI1Njg1NGU0YzFjNDA2ZDkxNjE3NDdjNjgxMzQ4MDE2M2VlM2FmMjNiMjFlZDEiCisgICAgICAgICAgIjk5ODNlMGY0MmJmYzkzMjVjYjVjODJlMWE0N2I4ZiIsCisgICAgICAgICAgImNjYmE1ZmE1Yzk0ZTc5ODMyYWIwNDZjOTc3NzQ5NWIxNjNiZDNhZjIxNzU5MGZlYzVhYzQ4YzYyNzg2YTI3ZjMiCisgICAgICAgICAgIjcwZDI4NTk5NTVlNDVhZmIyYjc5ZjEyZGU0MTYxMTQ1YmU2MmFjMTNhMDNiZjQ4MTk1ZmI5ZTVhMThiODJkZWIiCisgICAgICAgICAgImJmM2RkZmM4MDgyNWQ1OTNmY2Q0MDJlNzRlZWYiLAorICAgICAgICAgICIzZGU0YzNlMDU5MzU3YjhhNTQ4MzdlYTE1OTYyY2ZlMjAwN2M1ZWE4OTg1YzkzNTE5MTY0YTY4OWI3NTViNjFjIgorICAgICAgICAgICI4YmQyNzM5NjlkMzMzYzRiY2Q5YjA2MDM1M2MzN2JhZjEzZWI0MjJmMWNiOTc3NTZlNmI0OTQ2YWRmZTFhZjc1IgorICAgICAgICAgICJlOWZlMmQ5NWI0YjEzZGExNzMyYmQ4YjhiZTExOTcwMjc5MTk1MzBjMzQ3ZjNkZDEwMzllMzQ4YTUzYjExNmY5IgorICAgICAgICAgICJmOGZlODkzNmE4NGFjYzM5ZjJlMDY5NTZiNjc4ZDIwZmRmOTUxNzA3MmUwMmY1NzA3OGZkYzA0NjU5NDAwYzVjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuNSIsCisgICAgICAgICAgImYzYzAwYjAwOWU1ZTA4YTYzYmUxZTQwMDM1Y2RhY2E1MDExY2M3MDFjZjdlZWJjYjk5ZjBmZmUxN2NmZDBhNGIiCisgICAgICAgICAgImY3YmVmZDJkZDUzNmFjOTQ2ZGI3OTdmZGJjNjc5Y2JlNjhmMWEyZjM2MjU5YzU1OGYwNGQiLAorICAgICAgICAgICJlMjJkNWU0M2IxZWJhMWFjMGNlNjVjMzI3MDUxMGUwZjEzYzk0ZTk2MjRlZTUyNTY1OWVmNGQ1NzM3ODgyMGM5IgorICAgICAgICAgICIzNTIyOWIzMDk5YWEyYjIzNTA2MTRmOGNjNDI5NTgxNWEyYzllZGIyZDljNTljNzNkMWFhOTAwYzIxMzRjMGE3IgorICAgICAgICAgICJkMDkwOWMiLAorICAgICAgICAgICI1MzNlNjdhMmJjNWIzZjAxMzQyZDhjYjhkOTI1ZDczYjRkYjM0Y2I2NzVkYTkwMzkyMjZhOThlNGQ4MTNjNjIwIgorICAgICAgICAgICIxMTA5OTBhOGU2YWNiYTUwZmQwNGYzMzA3ZGViYWYyMGQ0ZjM3NGNmNmRlMGQ5YjIxZDg2ZTI2NjA3OWNmMmYxIgorICAgICAgICAgICI4YjQ1MDMyMDhhMjE1ZGUyYjExY2NhOWUzNDY0ZmM1YWMxZGQ3ZTk2YjJmYzA0MDllNDJmNDZhNTA2MTJhNmIyIgorICAgICAgICAgICIwNjFlZDE2MTlhN2ZlNDY3OTZlZDhmNTIwNjlhNWJmYzg0MDhkNTU4ZjUyYTAzMzMyZWU4ZWRkZWY4Zjc0NWQ5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuNiIsCisgICAgICAgICAgImFhZmU1YjI3MTExMWVmYjg3OTJmNWFhOTIzODMwNzI5NzZiNzJhMGEyNzJmOTBjNTI0NjFmODhhZmIxYmI2YjciCisgICAgICAgICAgImVjMjYzODFjNjU3NmE0MTA4N2EwMzk4MDlkMTRmNjExNjA2NzU5NGViYiIsCisgICAgICAgICAgIjc1MGVmMDg2OWY4Yzc1N2VmNDMxNTc4YjQ1YTZlNzQxYmQxZDk2MGVmYzM3ODliMTBkMmJkZTI3MzgxODA3NGUiCisgICAgICAgICAgImJmZTVmYWFlMTBhYzI0NGY4OWY2YzAyZGU1ZDFhZGFlZmM3YThmZDI0ZDdiYzM3NmZkNjVkMzVlMzk1MDhjNDIiCisgICAgICAgICAgIjM2YWNiZTJkNWNhNzY5NGIiLAorICAgICAgICAgICIzNDRkNDMzNzYxMmIyMmRkNDAyYmUzNzllNmIyNjUwYjUxOWVmMzdiN2FiNDg1ODE5NDUyZDE2N2MxYjIxNWRiIgorICAgICAgICAgICJkM2ZiMjRmOWIyZjkyOTg2NjljYjFhZWUxNDFhN2Q4OTAxNjQyMDQzMTExZmMzOGIzZjQwZWYwYjdmZmQ3ZGY3IgorICAgICAgICAgICI2YzJkOTJlMzI5NDExYzc1ZTBmMTcyODViYjZiYjgyNjg4MTI4ZWQ5YmI5NTFjYWVkZDdkMDY3ZWRkMGIxM2U4IgorICAgICAgICAgICIyNzVhYzg4NjI1ZDk3Y2U4ZDIwYjY5YjM1NzM4YjJmNDcyNmUyOTg0YjhkZmE4NjY5NWFhZTg4ZDllMTc2ZGY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuNyIsCisgICAgICAgICAgImExMjI0ZGY5YWFiNjU4Nzg0NWIyYTM5M2E1YTg3NmMxN2Q5NTlkNTM1YjU0MTlkNDEyYTlhNTMxYmI0MzdlMWQiCisgICAgICAgICAgImFjMWI1NDZkNjIiLAorICAgICAgICAgICI3NjFkYzRmNTFiYzg1MThkNjI3YzQ1YjNlOTgxOGI4NTQyYTA2ZmZlMTcyYmUzYWY1Y2U3YTkwNTNmZTU0ZTY5IgorICAgICAgICAgICI3MDEyNDk3MzM3NGRmY2MxZjQ5ZmNmZmU5NTdhYWU4YzljM2IxMzBmNDYwNWQyYzNlZmEyOTMyYWQwODNkZWM1IgorICAgICAgICAgICI4ZTcwZDRmNjkyNmM4MGI1ZDQ4OTFhMWE1NTllZGIwY2FmZmFjYWQ3NWViMjY0ODMiLAorICAgICAgICAgICI3ODVmNmFhYWI0ZDJmMzE4ZDRhZjM3YjZlMDA3NGVkNWE0MTk0ZmE2MDVhN2VjODdkMDVhMDdmMzM0OWI1YjkyIgorICAgICAgICAgICJmNWZjNDc5MGVhYjEzNzg2Y2JmMDM1Yzc4ZmZjZjEzNDRkMWYzZWNkYWFlMDE2NzIyMjJlNmQ0YTk2NTU1OWUyIgorICAgICAgICAgICJjMDgyOTFjYjFkNGMyZDRlNjhmZjhlZTcxNTIzZjZkZGFlYzUwYTRhYjIyZWRjYTI0NzM2NGM5MmQ4NzM5OWU4IgorICAgICAgICAgICJhNzFkZjc0MzZiNjJkOGJhOGFkMjAyOTRjYmM2MGRjYWUwMzA1Yzc5NzNmN2ZjYjRhNWNiZWQxNTcxM2E3YTE2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuOCIsCisgICAgICAgICAgIjFlMGUzZjY1MGMzMmRiYjJmNjkxNmYzNmYxMzViY2FlODgxZDU0NTUwNzQwMmQ2YWZkM2Q1YjNiZDgzODVhNTAiCisgICAgICAgICAgImI0ZmFkNmY3ODk0OWZkZTYyMTY0ZWQ3Njg5ZTVmOWE0IiwKKyAgICAgICAgICAiZWVhOTBhNTRkMDE2ZGE3ZThmMDg3NmE3MzNiMGYyYTA2ZjkwYTczYzFhM2NkNjM5YjZjZmE5MDZjZTA4ZWY3OCIKKyAgICAgICAgICAiOGJiNmZlYTc0ZjIyZWI5MWE2YWIzMjg0Y2RmYzFlNzJlNjNlNzhkMThhNjRkNjdmOWQxYTI5MTk0OWVkMmUzMiIKKyAgICAgICAgICAiM2U5MWRjMDMzODc2ZWVlYjA5ZmZhNzFmNTkiLAorICAgICAgICAgICI2YmJkYWUyMGY5ODliZmFhNWQ2NWRhZGNkNjFhODZiNjYzMDdhMDYwMmZiNTUxYTczODA2MTIyZGIxODhlYzFkIgorICAgICAgICAgICI0MWU4NGRhYTJjYzdkNmJlNTQxZTEyMjg4ODA5YTE3ZTA4NWYyY2FmYThhZTEzNjcwZTBmMzM2NWExNDcxY2IzIgorICAgICAgICAgICIxNTdjMDZlMGY2M2I4MjAwZjMxNjBjMTYzZmRlN2M5MDFlZjMyNmU1NzAwYzlmNWUwN2ZlMDE5ODgxMGZhODBjIgorICAgICAgICAgICI4YzVkYzUzYTUwYmNlMjU0ZjdkMTk5MDFjZjZjYmI2MDM0MTNlNDFmOTAzMGU3MzljOGJhOTY0OTk3ODQ3NDk5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuOSIsCisgICAgICAgICAgIjczZGRmMGExNGQ1N2JhNjViNGY2OTNhYzc2MWUyMDJiMWU1Yjg1N2M4YjM0MDRlMTQxODVkZmE4YWFmMDQ5ODkiLAorICAgICAgICAgICJmZDQzM2Q3YjAxNzZiNzMxZDc4MGRkNmM1ODUxYjgyZjE3NmQ2MmI4MGQ5NmFlYjYzMWQ3ZmI4YWM1YmU1NWFjIgorICAgICAgICAgICIyMTdmNGUwOGJjN2VjZjgxZjhlM2Y1ZGRhYWNkYzZjMjE3OGRmNzgxODgyMzk3NTMzYTYzOGU2MmYwNzRhYzQ4IgorICAgICAgICAgICI4ZjRjMTJhYTU3YmUyZWNlNWJiNmU5MDk2Y2Q5MjI1OWE0NWIwYjAzMmYxMDE0MzFhMjhiODY0MGZiIiwKKyAgICAgICAgICAiYWU5N2ZmNDM0ZTlhNWVlNDg3NzYxZGIzNTY5MDBiMDYzNzM3NDY1YmU1MDU4ZGMwM2EyOGEzMjJlNWMwZTA5MSIKKyAgICAgICAgICAiYjc5OWJmNjU5NDU1Y2ZiZTA1NDI3YWM0ZDA0NDA1ZTU2ZWUwNGUwNjNhMjM3M2RiY2I5YjRmYTE2ZTQzMDc5NCIKKyAgICAgICAgICAiNmE0OWIzNTYzNDUyMGQ0MTZmNjVjM2MzMjJlZGM1NDY3MTU2OTEyOGEyYTE1MmE3NmZlNDQ0YzQzMGFhNmYwMyIKKyAgICAgICAgICAiYzQxMjljNmUyMTMxNzU1ZDc2NGNlYzRhMTQ4NmE4MWJhOGEzMTY4ZDE2ZTc0ZGNhOGU3N2JiZmQ2N2VhMzcyYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA2LjEwIiwKKyAgICAgICAgICAiZWYzZTc2OThlN2Q5Y2M4NjNiNDY2YmIyODg1NTZlNGFjMjUyODJlMDk0ZmI1YjU3YzE3NjE3YmI5OCIsCisgICAgICAgICAgImRiOTBhNzU4MGQ4ZDQyOWUyMmJkN2VhNWM3YjRjZDBjNjVhZDBlMmUyN2Y1MzM0MWJjMjNhOGIxMzU4YTc2YTAiCisgICAgICAgICAgImI1ZTk0ZmM1YjQyYTlmNzU2Y2M2M2I5ZDYyM2Y1NTE3NjdmYmM2ZjcxMTRlNDBiYTczNjFmZDMyZDZmOGQ3NzIiCisgICAgICAgICAgIjM0Mzc0MzZkZjcyNGIxMzI3YWFlZjdiOTU3NTYyNzY4ZjhmYWRkNTc4NjJiYTBiMzE0MDk2YTNiMzg3NzBlMzEiLAorICAgICAgICAgICI0M2Y4Y2NjZWE4MTJkMzM4NWY0M2ZhODM3Y2I1ZTZmYTU5MGYxYWZmYjg2MmQyY2FjY2M2ZDhlOGJiNWQ1YzBkIgorICAgICAgICAgICI1MGZmYjlmOGY4MDk4OTAwYzEyZTc3MmE4NDdiMzc4MTU3NzgyYjBhOTA0MGY3YTYxNmMyZWIwNThlNDRkNGE3IgorICAgICAgICAgICJlMjBiNDg1YWMyOWY0MGQ2OGUwM2MzOWRkYzhkYWU3ZTdlMDllMjhmOWRkMjE5MGYzYTlmMzU3NGIyZjYzNDAwIgorICAgICAgICAgICIxNTQ0MzYzYzg2MWZlMjdmN2EzOTIzNjY5MmZlMzU4MjE0MGIyMTcyY2U2NDdlZWQ0MTc2ODVjNmUxZGI4NTZjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMTEiLAorICAgICAgICAgICJmODY5MTg0NzRmODgxNjk3MTExYmRkZGMxZjAwNjEzZWIyYzNkOWMxNzg3NjY4MzUzZWJiMDJiMzIwYTMyNiIsCisgICAgICAgICAgImNiN2Q5OWRhOWIxMWVhNTdmNjQwNTU0MzQ0N2RkMTVmYjVjY2EwYTEwZjNiNjliNGQyMzMwOWVmZjI3NTBjNDgiCisgICAgICAgICAgIjZjYTY1NTMyNWI1NWEzMjdmZmU4YmQ2ZGNhOTliYzhlZmI1YmMyOTQyZWMwMzllMjg0MjVlNGE1NmEwN2QzODAiCisgICAgICAgICAgIjEyZjEwZDIxNWEyMmQ2Mzc2ODU5NDNkMzY0NzI1MzAxZGQ0MGUyMTcyMjhhYjc5MTU5ODk5ODgzNmJiZiIsCisgICAgICAgICAgIjJhNDA4NzgwYWQ1MTRlNTY3MWZlMWRmYzM2N2Q3YWE0NjVmYzM0NjlmMWMxNTJhZWUxODE0NWUwZjVmMDc1OWYiCisgICAgICAgICAgIjQ0NjliNDNkNTUxMjNmNWRjOWZmYzYxN2YyM2ZhNDliNzg5NjAyMTk2NjBlYzYyMjc0ZDZjNTliYTMxNDYwYmQiCisgICAgICAgICAgIjEwOTQxZWJiNWUwNTY5NDE1MWM1N2I1Yjk1ODhjYWYwOWY0NTUwMjBhNTRlOTc3YzNjYzAyN2RhZTMxZjJjZTQiCisgICAgICAgICAgIjQyMTcwMjNlMTBhZGI2ZjJkOGFhMGY4MDg0ZmM0NTg2MDU4MDNmZDQ0YjIxYWJjMjdiZGI4ZDRjNTYxNzg0Y2YiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNi4xMiIsCisgICAgICAgICAgIjZhNDBiYjYwNzA4YzVhOTkyZWNmZGM3ZWU1M2Y1NDA4NGQxOWFmZmQ0ZDIxIiwKKyAgICAgICAgICAiYzNmNGZhY2E1NmMxZmYwN2QxYWQxMDM3MDdkMWI2NjgyMDQ3YjRkOWQ2MjQ2YzJlNWM0YjBjZTY1NTNkNTUzMSIKKyAgICAgICAgICAiM2Y4ZjM4YWVlNWU0ZDgwNzNhNTVkMjRhZDc5NmM0Yjc2MTI2YzhhYTYxYzQ2YTRlZTg1ZmE5MDU3YTUyNmNkMCIKKyAgICAgICAgICAiYWEyNDVlNTgyOGYyMTgxYjRhNjQ3OTg2ODc0OGU3NDc5ZjQwMzQ1MzNjMGYzZTFlYjQzNWZhNDdkNTNiNThlNCIKKyAgICAgICAgICAiMmM5NjE3YmY3ZTc3N2UiLAorICAgICAgICAgICJjNDY0MTFjNzExNmZlNmY0NmYxY2EwZjc0YzYwODFhNTVkZjQxZDJjMGI4ZmM1ZDM4ZmFhMzQwYjVlY2Y3MTgzIgorICAgICAgICAgICJmODVmODhjNGZiMjhhYzVmYjFmMThhZWJmY2ZjMTBiZmRkM2ExOTAwMmM2YjUyMjQxNDkyNzA0YjZmZTYzZDYxIgorICAgICAgICAgICJhNzMwMTBjMTQ5ZmY2MzAzMjgzZTk5NzhjZDg0NTQwNGZhMDZiOGM2OThhYWVhOGY4NjEzNjFkODg2YjJjMGYwIgorICAgICAgICAgICIxYjQ3YTFhOWEzZGQ5MDNmOGE1OGFlZDY2YWZjODVlOWI3MWVmYzNmNTVhMTIxNjY3NDE2YTMwMDAwMTMxM2U4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMTMiLAorICAgICAgICAgICIzMjUyZmU5OTYyMDk3NGUwNzdkNmViNTU3NSIsCisgICAgICAgICAgImJmMDY5YjRiY2YxNTQ0OGJjMzllNDVmNDQyNmFhZDBkNWQ4MmI3NGU5M2FlMWNkZDcxZjcxYmI5YmViOWIyM2QiCisgICAgICAgICAgIjU5NzMyZjljOGJjNjM0M2QxMzAyMzFkZTE4ZjdjODlmYzJmNDIyMTg5Y2Q5MjdlNTA5YjEzMTk3YWE1NmQ4MWEiCisgICAgICAgICAgIjczNzZmODMzM2U0NzQyNDQ4Y2M4OTJkZTQwNDQ5NzJjN2Y2N2RjYmU4NTQ0YTkwZWVjNTllNzk1YWU1OTY0MDgiCisgICAgICAgICAgIjM5MmFmNTc3NmRhMGQ2Y2IyOWM3ZTBhNzg2ODEzMGE3IiwKKyAgICAgICAgICAiNzY1M2NiZmY1ODY4OTJjZGQyNThiZmU2YmFlYmQ5OTE0NWViMWIyMjg5NGUxYTc2NGQwMmIyYmE5OTU5NTJhMCIKKyAgICAgICAgICAiMTI1ODIwOGRlMWEwMWQ4ZThjYmI1Y2RhZjBkNjAzNjk0Zjg4MjU1ZTgwOTA5N2I3MGU5ZDc5ZTYyYmQ1YzBkOCIKKyAgICAgICAgICAiMzZkY2MyOWRkMTliMDVhMTYwMjY5MDQyMDViNjBjNDUwM2Q0ZmJlOTkzMzg1NWU4NjgwMmM3NTQyOGQ5YTYzNCIKKyAgICAgICAgICAiNzMwMzE2NzYzMmQzM2M1ZDllY2M4YWUyNDkzYjU4YzM2YjJhNjU1M2E3YjllMmIxMzU4YWUyOGRhZDUwMjgwZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA2LjE0IiwKKyAgICAgICAgICAiZGM5NCIsCisgICAgICAgICAgIjA1ZTgwNWJmZmJkMWI3NGQxYTVhODM4ZDg1NzE2N2I0YzdkNDBhNmNkM2U2OGYzMWJlNDY5M2I5OGNlYzZkNzUiCisgICAgICAgICAgIjg5NDkxOWFiMTg1NzJjNzU4MjJlNzVlOWRlZDcyZGEwNjc5NzgzYTc3MjE4MTRlMTk5MTYwYjc1MDdmNjdmNGUiCisgICAgICAgICAgImRlNTg3Yzg4YmU3NjgxNWM1MGIyNjFkZjMwOGIzMTQzMjM3MzBjMWUwNzNhYTcyOTk4Y2MyZjhlMGE4YTViZDYiCisgICAgICAgICAgIjViZjkzNGFjYThhNjQ4NTllMjVmMDJjNWEyNzEzOTQxYzhjOGU2MjcyMDg0NmRmYjUxYzJmZiIsCisgICAgICAgICAgIjZhZGRlMjQ0ZjA2MzhjNWFiNzQ1ZmZiYWI1YWJlMWZlODAwYjBlZWUxNTM1NTBjNDhjMzZmNDI0OWY5ZDVkMzYiCisgICAgICAgICAgImI0N2IyOGNjZGE3MWE3ZGQ4MzJlNjQzNWFkMGViODVlZjc1NTZiYjg0YmY5NWE1OWNjYzljMjA3NTFlZDNlMWEiCisgICAgICAgICAgImQwZGUxMDI5OTRhNzEyYzUxNDAxNDY5MmE2N2YxZDg3Y2EyZTRmZWYyOWVjODNlMDFlMjlhZDBjOTc4YWNjYTQiCisgICAgICAgICAgImQ1YzUwMjc0NWE2YzUwMGRmMjAwMDRiYzliZjE2ZjVmY2M2OWJmNTI3MDllMzFjZjZhMmI5ZmU2MjRkOWEzNjQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNi4xNSIsCisgICAgICAgICAgIjRmYWU2Y2YzN2U5ZDVmNTkiLAorICAgICAgICAgICJlN2Y5ZWQ0YTBjM2E2NDY2NjkwMzliZDAxZjI0OWYzMmJlYTFlNjU3NmMyMWQ0NTE4OWQwZjg5MWNmNGFmZDYyIgorICAgICAgICAgICIzMjA4M2EzMjFlZDJkMzRkMDcwOTg0ZjVlOTQ1NzgzOWIyZWJjMWUwM2EyYzBkOGRkNzA5NzMxZTk1YjJlNjk0IgorICAgICAgICAgICIxY2EwOTA3MTg3YWZmZGNmNWE4N2Y1Y2JlYWQyZjkwNTJjMzhkMGVlNTRlMWYxMjhmZmMzMzdkZTQ1NjZhNTkyIgorICAgICAgICAgICI1ZTFlOTQ3YWVmNTA4ODFjYmRhZWQ5OWIxYmJjMWFmNTEzMjMyYzBmZjQiLAorICAgICAgICAgICI0NmU2NzA1ZWIxMjUyZGViZjhlYzY3MmM0ZmRlYWY2OTg4MjY4NDU5Zjk5NTg5YmJkMzA1NDEzM2Q0ODNhYmUxIgorICAgICAgICAgICJlMjdjYWFiMGE3ZjAyMjFiMWI2N2ExNGViZjQ1MTI2ZTYwMTM0OGIwNDM0NDA2ZGEzYThjNzZkNGYxZTNmMWEwIgorICAgICAgICAgICJlMDZkMGRiODIzZGE1MTE3YjkyYTQwYjZmMzlmNTdlNDgzYTdkYTM2ZTk5YjY3N2JiM2Y3NmU2YzVkYjAzZjNjIgorICAgICAgICAgICJlNDQ1MDRlYmQ0NWU5ZjE0ZmUwZjYxM2EyZWI3OTU0N2FiNTc4YzU4NmQzYjY1NGEwNmZlMWVmMzdhMjIxMDY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMTYiLAorICAgICAgICAgICJjZGZkZmRhYWJjYTM3NjdlNzBiYmM1ZTlhYmY2IiwKKyAgICAgICAgICAiYWM3NzdmNjcyOTlkZTRjMWM0YzU3NGYzMWY2NzRmNmZhYWJkZTAzMWY4ZWMzM2U4MjY3NmViMzJhOTNmNjU3OSIKKyAgICAgICAgICAiYWFjM2U5NTkzNTlmYzU3M2VlNWMwZTNlMDc3NjUzZWZmOWQ1ZjhkYjRiMWU3YWNhZGIwNTk5NzE1MzFmNDliMCIKKyAgICAgICAgICAiN2M5M2ViOWZkZWRjZjA5MDNhN2Q1MGI0Nzk2NzZmY2RlODc0MGFmYmQ3ZDM3YzNhMjEwMjQxMmJkZTFkM2E4MiIKKyAgICAgICAgICAiNDQxNTZhZDgwODlkNDVkZmRjOTFjZGU2YzNhMTU5IiwKKyAgICAgICAgICAiNTEzYzc2MWViMTkyOWFmZjc5NzdhOWZmMGU2MWI3YTFkNTExYzhjYjI1MzkyNDMzMjQyNTU2OWEwN2UyMjljYiIKKyAgICAgICAgICAiMzkwMTcxNTM5MGY3ZGUzN2JkMzYyYzk2ZmMwYjBkNzk4MTBjMWU4YjE1ZTEzYjAwMzI3MzQ3NzhjZjk2NGU2ZiIKKyAgICAgICAgICAiNmQxN2ZjNDFjNzg2NzY3MmIyNTQwZjU2OWQwYTQ2MGE4MGZhZDU2YjVmMDU0YWI4ZTQ5ZTQwOWU5ZTBiODYxMyIKKyAgICAgICAgICAiY2IzZGEyMGMzNWMzZTFiYjk5YjdlY2FiN2EwMGZjMWZjMjM3MGY5YzgwODU2N2RmODliZTJlZGRiZGI2YjExMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA2LjE3IiwKKyAgICAgICAgICAiYjgyMGMzMmU3MzdkYWEyMzRmMjliYTkwNjQ3ZmMzYmYwYThlIiwKKyAgICAgICAgICAiZjVjYWY4ZmViNDJkZjdiNmIzODlmNTA1OTlhNGVjMjBlNjE5Y2EyMmQyYmZjOTFiYzdmMTRhZTlmMTIyOWUwNyIKKyAgICAgICAgICAiYzg4OGVkNTdhYTZhZDNjMTA0MTA0NGM1MWFmYjU1MjE3YjBjYWEyMzM0YWQ3OWY0N2FiYmY5YjQyMDgzMzNiNyIKKyAgICAgICAgICAiMmI0YmE0YmI1ZmQwMzc5ODFkZDgwMTcwYzgwMzYwYzE0ZDVhZjUxZTVmODJhYmY1MWZkMzZmMDIxODY3YTZlYyIKKyAgICAgICAgICAiMDk3YmMzMzkyMmFjZWFkOWUzMzU1OCIsCisgICAgICAgICAgIjNlMjMyNTE4NDFkYjJlMjA3YTI3MTAxZjEzMjkxOTFhYjdmYTZhNzAxYTUyNjI2MTQ4MjM1M2ExYTIyMWVmYTkiCisgICAgICAgICAgImQzYTlkNDU5Y2QyYTJkODY2ODkwOGI3ODNiYjA5Yzg3OWEyMTdmMWU0MDBmOTViMjE3YjA0MGE1M2UzNDFjMTciCisgICAgICAgICAgImI5M2QzYzNkNjU0NjBjNWM3ZjJiNGQ3OWEzNGI1YTk2MTE3YWEzNjc1MWQ5ZWFmMjMzYjAzZjY4ZGJhNmE0NTciCisgICAgICAgICAgIjFiOTA3MTc3ZjgyODMzNmU4MjVhOTIyNjFiNjIzNjM5YmVjOThkM2EwOWY4NzJjMmVjNTkxYjRjMzgzYTY5YzciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNi4xOCIsCisgICAgICAgICAgIjYwNmJiZDYxMzcxNWRkY2Q5MmM3YjZkZjA0YjM2MDcyZjAxMTYyZDAwODc2NjMxMmNhNjk3N2RkM2EwNmViOTUiCisgICAgICAgICAgImUxYmFjN2JjMWJjNjYwMmM5ZWU2NDQiLAorICAgICAgICAgICI1MTNhNWM5NTY4ZTg5YjlhNTNkNWFmNzE2ZTU1ZmIzNDBmOGEzOTIzNzBlODg4YTgwY2FlZGE1MDJlN2Y5ZGZjIgorICAgICAgICAgICIxNzUxOTVhNTBlNDcwNzEzOTZkNmVjNTU0ZWI3MmYxODNiZTE4ZjNiZjRlYzczYjMwNTkyZmFlZjJmYjUxNGRlIgorICAgICAgICAgICJiZWZjYzY1YzhkMjNjNGFkMjU5NDU2YzFlODBiMzYwYWQ0NTkiLAorICAgICAgICAgICI0NzIxYTIzOTQwMTg4NzMwZjVkZWFjODUwMDJlMzgzMWIxNDlhZTU3YWZjNjk3MzVhMDQ1ZWUzZmMzNTM2NDcyIgorICAgICAgICAgICJmYzgzM2MyN2M4N2VhYjZmYzkwNWUzNjc5NjFiMzEyNDk4NjM2YmU2Yzc3YWE4MGI4ZGEyZjVkOTQ4YWFhNzdiIgorICAgICAgICAgICI1ZmFiNzI0YmJmNjRlZTg5ZDI4MWVlZDQ3YjIxMmMzMjk1MjY2NTc3ZjRmZDkzYTIyMjM5ZGVlNTQwYzk0MDBmIgorICAgICAgICAgICJlNTZkN2FlZjUxZGYzNmE4OWFlOTJmOTI2ZjU1ODMzMWU0MWJmZGZlZmUzNTc1OGI5M2NlMTE0MGFjOWI2YTU0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDYuMTkiLAorICAgICAgICAgICIxZDgyZGVmOGM1OTI4NzUwMDhhNWY4OWU3ZWI2NGUyNTJlZGRlOWRkYjg4MWQzNzM2MjMxN2Y2ZTZlNmU5OTNjIgorICAgICAgICAgICI2MDIzM2IwZiIsCisgICAgICAgICAgIjg3NWUwNzVlZjFiMDU0YjU4NDFlMDg0NTBkNzhlYjU0YTU1Yzg4YjZkMDE4MTNjMTA3YTA5Yjc0NTQzYjNmOWYiCisgICAgICAgICAgImUxYjdjOTAyMTFjNjJlYTczMzgxMjBkNGFlMGY3M2JhODJjMDFkMjhmODE5NGIzYTM5NmJkZjUwZjk0MTNhN2YiCisgICAgICAgICAgImIwM2JlMjI1ZmUwNTQ1ZGI4MGNkZjBmNjEwYTk1ZmQ5MDM3NmUwMzllMzgzMWZmOTllIiwKKyAgICAgICAgICAiOGZiNTQ2MjYzYzFkMTg3NWM3NDNmNTJmMDI2N2IyZjJmZTY4OGQyNTQyMDIxMDQ5ZjUzNDg5Y2U3YzM1OTEzMCIKKyAgICAgICAgICAiZjhlMTFlM2M0NjFjNWU4NjNlNGRjMTlmMDdhMTNhNGMxYTg4MjI0YjI2YzVjMGNiZTIwMjAyNDVkOTFlMWI4MyIKKyAgICAgICAgICAiNDI0MjUyNTJmNTNmYzQwZTRiMTRmYTAyYmJkNzQ3MzdkNDAyMmNjNTRmZTM4ZjBkMjdkOGZlYTUwZjJmZGQ4NCIKKyAgICAgICAgICAiNjVkNGYzMmY4YWMwM2VlMDA2YmU2MjMzZTRkMWEzYzE2ZWIxNDRiNWQ4YmU3MjlhZDMwNGY4MjM2MWUwN2NmYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA2LjIwIiwKKyAgICAgICAgICAiOGE4YTNlYWJkY2E3Y2FiMGNjMjk2YTI5MWVhOGE5M2RhNGQyZDJhMTk2ZmYyZjhkMTgxZmVlMWYiLAorICAgICAgICAgICIyZTQ3MzZlNDI5NmFiNDY2MThiMWVmMzRkYTI2Nzc2ZTkyZWY2NmY3Y2QxNzRlZjk0NzY5NzI0MjIzYTc2NWI0IgorICAgICAgICAgICJlYmVmMDhhODhmZWRiZTI3MDU2MGU1ZjY3NDM3Y2Y0OWQ1N2VhNjYyMGFjYTU5ODk4YWZkNTJjZGVmMzBhOGIwIgorICAgICAgICAgICJkOTg1NWU1ZGZiZTM0N2RlNzdjNGMwMjgwYjBmMWZkNDRkNGZlNjg5MDZiZThhNGYxMmM1MzMwODdiZjViY2VhIgorICAgICAgICAgICJmYiIsCisgICAgICAgICAgIjAzZjNlNGJhMDM0ODMxYTBlMzBhNGEzMzQ0Y2VhZDYxYjI4YjQzYmUzMTUzMmMyZDc2Mzc1MzliOTAxMzgzN2UiCisgICAgICAgICAgImRjYjFmMjE2ZDMyZmRmYWU3MzMyMzY3NGEyODE0NTY1ZGJmMjllNzEyZDE4YzQzNzM5NjRkZjYwYzkzOTlmZGEiCisgICAgICAgICAgIjU0MTRhMGViNDViZGU4NjYxYTg5MDkxMjk1YTFlZjcxNjE2YTNjZDE0NWU5YjMxOGI2NTFhZjE3NWQ0ZWMzNTAiCisgICAgICAgICAgIjFkNWViNzYzZThkMzVhMmI3Mjc0NmUwMjBiNGJhNTk5NzM4MzRiMjE1MDAyNmI0MzJiMTc5YTlhZTgxNzJiN2IiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJBIDEwMjUtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMDE3MDkzNDFkMmVjMDgwNGE3NDAzNGU4ZmE3Mjg2NDI5ODNkMTY1MGQ3NDZlNDQ5YzllZTQwNzlhYTE1ZTUxZiIKKyAgICAgICIxZmMxMzQyNDJlNTI0YjBkM2QwZGJmNWE1MTIxOTM5YjEyNWZjYzg2M2U1MTQxNjBiNjM0ZTM3YWE2OTg5NDc3IgorICAgICAgIjZjN2QzM2UxZTdjNjE5NTIxZGU0ODJhMGFlYTQ1YzNjNmFiYzNmMzNlMjVkODZmZmExMzkzMzI1NjU5YmYyZDQiCisgICAgICAiMDk4ZGYxNjliNDA3MjE4NzY2MGUyNzc3MDAxOTliN2EzZTM0ODRiMzg0NWY2ZmJmMzE5ODY1N2RmOGNiZjNhOCIKKyAgICAgICIxYiIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICI2ZmViZjc5ODEyMWU5OTMzMjQ5NzJjOGMyOGNjYzY1YTJlNmFhMTVmY2RlMjMyZGEwM2U0NDY0ZGI0ZGE1ZmFhIgorICAgICAgIjI3ZTQyYTdjN2E3NmQ5ZWQ0OTQ4NmIyN2E5ZDc4NWM2N2Q5YWMwYzUxOWFkOGRhZGE2YmZkMTE1ZDdjZDc1YjkiCisgICAgICAiOWM0YjU5Yzc2OTgzYTcwMTViMGRhNjk3M2M2OWZhOTUwODEwYWUyNzY4ZDk3NTg4OTAwNTYyZTg2YTZkZjdjNyIKKyAgICAgICIxNGI4NDRiMWUwNDY2ODZhNWFmYzY2N2IxMzU3M2E1NWJlOWI1YjM4Yjk5YmQzY2Y1NGU0MzQ0YTJmMmQwZTIxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4xIiwKKyAgICAgICAgICAiZGE1MDlkY2U0NWUyNDcwMDM3OWJmZTVhYTFhODFjMjQ3MDZjMTg0MmQ5YjEzZTdhMmUwYTE1ZDNhNGFmOGU2ZCIKKyAgICAgICAgICAiMDg2MTJkY2FhMTVkNDYwZWNlODcyOTg4ZTNlOTBmYjI3ZTVjYTVjMTBmYTFmYWNkY2IwZSIsCisgICAgICAgICAgIjgwOGMyMDQ2ZmI1MDVjMzc2OTVjOGRjMzVjMzhmOWY5OTA1YWI0OGEyYjhhMTQ2ZThlOGVkYTMzODVjZWQ5NWEiCisgICAgICAgICAgIjMxM2IyZGM2ZWI0MTgzNjdmZWVmZjc5YTAyYWQ3NDY0NmRmN2E1ZDg3MDU0YWNkZGFmMzRlYWZkNWMxZGI1OGUiCisgICAgICAgICAgIjVkZWMwNDgxIiwKKyAgICAgICAgICAiMDBmYzNkMGFhYWYyNmNkZjI1YTFhOGRmY2I3MTcwMGZiNjVlMmFiNTU1MWFlNWY0MTliMmQyZjk0Y2VmMDE3MyIKKyAgICAgICAgICAiMDJiMDBhYmQ5ZTZjNmVmYWU5NDQ3NGQxOGU2OGRhMGE3YzE3ZWYyYzVmY2M4OTA3MWQzYjA3MTIxYjljMDFlMyIKKyAgICAgICAgICAiMGZmMDUzNjYzZjYxZjg5ZmRiYzQ5YmRjZjhlNjcxNjY5NDQzOTE5ZDQxMzQyODQ1ZTNlOTllNDZhOGEzYjQ4ZSIKKyAgICAgICAgICAiMjM5OGE4OGU1YjQ1ZDk5YTE3ZGQxZjIxMmVkYWJjYmNkMzAwYTg0ZDM5OGVmNTc5MzViZGFlOTU5ZTYwNTRlNyIKKyAgICAgICAgICAiM2EiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4yIiwKKyAgICAgICAgICAiY2UwYTc5NDc0OTg3NDE2MGU1ZDJlNGZmIiwKKyAgICAgICAgICAiZjRiMmM5ZjMxMWMxZmQ0MWQ0Nzk0NGI1MGUxNzU1ZDRlYWM1ZWU2NTA4N2M5ZmM2ZDJmMDc1YjczOGM2NDkyNiIKKyAgICAgICAgICAiZWFmN2Q0MzE2YmNkYjYzNjU0ZDU0MjBkYTYxZTAyNDVmMTk1YjllODI0YWEwYjA2Yzg4Nzk5YjEyN2ZlOWIwMyIKKyAgICAgICAgICAiNmRmMzYxNzVjMGE2YmQ4MGU0ZTBhZjZlYmMyZjQyNzBiMDRjZTMwYjlmYTI3ZjA0MzU4NjBmY2NmNDBiM2RjNyIKKyAgICAgICAgICAiZWFlZmZkYmFiOWUxNzY2NjE5YmIwMTZjMTc5MDI2NjNjYjI0IiwKKyAgICAgICAgICAiMDEwY2Y3NGJlYmMyNjM2ZDJjNDlkOWM2MjJiZDc2Y2MwYjFkMDJlYmI1MmZkZmFlYzAxYzRhYzFlNzU2MDcxYSIKKyAgICAgICAgICAiOGVmNzZlMTIyYTRjNjJjNmJhMzI2NWZhNGM5MDU2MjZkMTEzZDU5ZGI3OWFkNjVmODY0MGIzYzQzNDRkNzM0MCIKKyAgICAgICAgICAiYzE2ZTM4ZGViMTg5ZTNhMWIxMWVhYWIwYjI2MDZhN2Y4MmY1OTQ2ZDQxOWFjZWJiYmIzYTkzN2Q0MWUyOWIzMyIKKyAgICAgICAgICAiZWRkM2FkMTVmMWU3NzcwZmNmYzMwYWUwNmFhMDFiY2QwM2Q1ZGZiMTYyZjg3YTE4Mzk2NzU1M2MyNTAyY2I1ZiIKKyAgICAgICAgICAiZmUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4zIiwKKyAgICAgICAgICAiNDFkNiIsCisgICAgICAgICAgIjU1NmU1OWIyYzE4OTU4NzUwOGUyMDg5MmZhNTYwMmQyNDlmYmZiNzFhMTA5MDVlZDVhZjdiNzliZTg3MTExYTAiCisgICAgICAgICAgImM2OWFkZGIxOWVlZjMxNmQ3YzBiMjE4MTc5OTBkYzNlZDhjNzZjYjIzZTgzMGUxN2MwZjQzODczMTU5ZmFiN2MiCisgICAgICAgICAgIjVjNGE2Y2YyMTljYjFkYzVjNWRhNDU1M2EzZTBiZjE4M2I4ZTExMmI2MWY2OTJhN2RkZjAwNGJkYmZkY2M4ZDYiCisgICAgICAgICAgIjY1OWMzZGQ4MGNiMjNhYWJlOGM2ZmRmMjY3NWQwNzNiNjYyMzEyZTRhY2NkZTkxYzEyMjVlNmQxIiwKKyAgICAgICAgICAiMDAyYTEwMDQ5NTU5NjY1NTMwNGJkZGY5MDk3Zjc4ZDlkZGI1ZWI0MjliNjY2MzVhNThhMjk4ZjE5MjhlZWQ2MSIKKyAgICAgICAgICAiNTM0ZjgwYjRlYTA1ZWUzOWIwMmE2NDU2NmY2YzQ1NmUzYjU4NmU3Y2I0M2E4ODk0MGVlMTI5MzQwZjU3OGU1NiIKKyAgICAgICAgICAiZTcyZDhiMjc4MzM2MTAwNmQ5NzEyOWFiZWYwMmNmMWMxOTEyZTE3ZjBjZDFkNzFjMGIzMjhkMGI0OGE0YWM3YSIKKyAgICAgICAgICAiZWNlM2MwMDVhNjE5MGVhYzIyYzE5OTEwNDExNTlhMmFkMWRiMDg5NjAxNWM0ZmYxZDdiMzU0NDdjZmMxMGEyNCIKKyAgICAgICAgICAiYmUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy40IiwKKyAgICAgICAgICAiMGJiNGFiYzdkYzZjYTQyMzVjMjllZDBhMmNiNjNmZDE0MTM0MWUyYzRjOTAxZTZkYzk1ZGE5ZjAwMTBmYTJlMCIKKyAgICAgICAgICAiMjJjY2ZlOGFkZmRiNmVjZjRkODlmNTc5YTEwYTUxNzBiZTE4YzQ2YTI0MWNhN2VlZDEwN2NhZmU0YTlkIiwKKyAgICAgICAgICAiYmI4MGJlNzgwMmRkOGJmNWZiNWIxYjg2Mzk2NjU0ZjQ3MzlmNWQ0MzUxZjE5Y2UzMWI3MmMyMTBhZWExYTJlZCIKKyAgICAgICAgICAiMjE0MmQ4ZDZmN2FlMzc0ZjA2MTMzYTMxNWM2MjY0ZGE2NWNlZjIzM2VkM2RjYzgxNTlkNzZjM2ExN2YzNmQwYyIsCisgICAgICAgICAgIjAwNmYxYjZjMWZiMzdhZTVjOGMwMjQ0NDlhYmMzODQwZThlNTA5NzE0M2VlZDE2YmVhZjY3YjZjN2E0ODI0YWMiCisgICAgICAgICAgIjM4YjZmOGMzNTNiNjQ1YzhjZWE0ZmFiMDljMDJmYTZjMzI1YTUwNzQzOGI5NjQ1ZWM4MjMwMDg2YjMxNWUzNGUiCisgICAgICAgICAgIjdhNTZhZGIwZWNkODlmZDA3Yjk4NzM5YzI0ZGI2ZmUxMWZmMmU1YWQzODMxOGVjMzFkZjJlZDI1MDhkZWJjYTciCisgICAgICAgICAgImE2N2UyNDAxOTZhYTlhY2Q4MDMyOWY0YzQzNDNjMTBiNzI2OTlmOWQ2YjViYzI0Mzk5NWIwOWM0NmRkM2Q4MDMiCisgICAgICAgICAgImNlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuNSIsCisgICAgICAgICAgImVkMjZlYzIwMmQ1ZTY5NzQwZGEzNDg4NDA2YmJiZCIsCisgICAgICAgICAgImYyZmQwOGNjMGRiOWE1NWFiZmViZDkyZTJhOWQ3NTg3MmFiN2RmZmIwYjRkYTEzNjA2ZTE1Mjc1OWY4NjZmMjIiCisgICAgICAgICAgImViODcyOWZiOGM5YTVjNDViYTJmNGFjYWU0MzE1OWE3YWQzY2Y3OGU4MWZkMDk1NDkwOWIxZjBlNzA4OWNhODYiCisgICAgICAgICAgImE0NTg4ZDhjODdhMWE2MWYxYTQ4Mzk4MjM2ZGVmOWI0OTc1ZTI1NDk1NzNmNjBhZGI1ZTg2MWI3YzNiMmRmZWIiCisgICAgICAgICAgIjgxMGQxM2UyOTdhNmNkM2YyYWZlY2IwZTRmMTQ3YyIsCisgICAgICAgICAgIjAwOTMzYzU4YTUwYzcwMTUwZGEwODIzYTdjMWUzNjdkMzZlNTIxM2Y2NmEzMDA1MGZkZWQ3MmQ1NzU1YjVmOWMiCisgICAgICAgICAgIjI0MDUwYjQxMTRmNTM1MDk5ODhiNjI1NDIwY2ZkMDBhYzFjOGNkODQ0ODljYTI2Yjc0M2ZiNDdkMWI2NGQwYTgiCisgICAgICAgICAgIjgwOGVlMzIxMjdjNzcxMjI0YTBkZDVhNTY0ZTYzNmFkZDczYmNmZjdiNDczZTlhMTJiN2Q0NjRkN2RkNGE3NTIiCisgICAgICAgICAgIjA0ODY2MWE4YjA3NGI5ZmExNTA2ZmVmNjAzZGQ5NmQxMTk5NmE3ZDllNzQ4NzlmOTliYjJkOTFjMzdhYWIxMzUiCisgICAgICAgICAgIjcyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuNiIsCisgICAgICAgICAgImRjMjg1YTI2Mzk1OTM5ZTc5OTcyMDRjNzFhOTMyZjc5NWI0ZGU0MDFlOTZmMzRlMTg5MzYzMjM3ZTljZmRhZGMiCisgICAgICAgICAgIjYxIiwKKyAgICAgICAgICAiZDgwYmZjYzI5MWNlNTE4Y2UwYmI2YWU5MzRkZmQ4NTY1OGIyMzlmYjQ1MzljYmUwNWRhMTI2YTg5OGI3ZjM2NCIKKyAgICAgICAgICAiODg3YzBkZGZiMWVhZWExZDVhOTBkZTc2OTU2NjVjNTU4MjJhMTE3MmNiNWJlOGExMTJkMjhjODYwMmM1MTNiZSIKKyAgICAgICAgICAiNDhjMjkyZjA1OTcyZTY3MTFhNDRjYmM3MjgxNzE1MDk0YjQ5MGZkZTI5MTY1YTZiNmI3ZDk5ZGJlZCIsCisgICAgICAgICAgIjAxNTdlN2I1NGEzNDFiOGRmOGJkOWI5OWZjMmU2YzU4ZDg4NmZjNzllNzQ0MmE5ZTc2ZDBkNjdlNDg1OGM0YWIiCisgICAgICAgICAgImYwZWQyNWMzM2RmNjJlMmFhZGEzOTlkZmVhZGM3ZmY2ODkyOGU2YjkwMDcxMDJkZGY4MDlmNTkwOGVlZmMxMGYiCisgICAgICAgICAgIjJhNzM3MTA2MDkyMzFmNWQ0NWUwMGFkZGExMzRiNjAyZGQwZWVlMGY2NzIyNDk0YjdlNGY3YjQwNTc3MmM4MzEiCisgICAgICAgICAgImI2MzcyOWJlMGYxYzRiNmQyYTU0MmMxNTY1YzdkZjIzMWQ5ZTg5MmU1ODZhMThlYzU0Mzc3Mzc2ZGI3N2Y4MTMiCisgICAgICAgICAgIjg0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuNyIsCisgICAgICAgICAgIjQ2NDdkODQxYzVhMGI5OTczYTkxNDU0ZGQxYTA1ZWMwZTU3NTAzZWQ5OTY3MmFjMDAyZGZlZTc3N2Y3ZmE1MDYiCisgICAgICAgICAgImZiNDFiMmVjOGI4ZDJjZGI5YmVmMDEzM2JkNWUzYTdkMGM0MzQ0YjI4ZmE4ZGIiLAorICAgICAgICAgICJmNTI3YTE0ZTJlMDZlNzNmMWMyNDVkMTkwZDAyY2NlZDAxMWU0Njg0ODdhY2ZhNWUwYmNlMzk3ODZiNDZhOWE4IgorICAgICAgICAgICJjNzUxYThiNDQwNmNjZmExZmM1YjdhYjliYWRhN2I0YWQ0NTI0NjdlNTBiN2ZjNDEzMThlZGM3M2RjMmQ4NGEyIgorICAgICAgICAgICI4YTA4MWZhMTc5MDViYyIsCisgICAgICAgICAgIjAwNGUwM2NhYTk0ODFkN2Y5Njc4MjA3YzE3YjY4MjJhNWY2OTE3ZWQwMWViNDAyZTdmMjMwMTM1YTEyM2NkOWIiCisgICAgICAgICAgIjZkZTNiZWMzYjliZjMzOGFkZWY4MDc2ZmI3NjUyZmM3ZTNhMzczZmMxNjIyZjFkYzY3OWQ0MTVjMzIwMDAyNmQiCisgICAgICAgICAgIjhhOGE1MGY4ZGI2YTU4M2Y2NjY5MjlkMDMxOGViZjkxZDk1OTEyZmMwNjEwMmQ5YmU4NzUyNWE3MzZiNWFmMjEiCisgICAgICAgICAgImUxNmRlM2VmYWE2NmU5Y2Y0MWNhNzM0ODIzMjNkZGU4MGVlYzMwODU4MWE0NGNhM2FhYmY3NmRkNDgxZGU2NTIiCisgICAgICAgICAgIjlhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuOCIsCisgICAgICAgICAgImJhMTBkNDdhOWY2MjQyODEiLAorICAgICAgICAgICIzNzlmZGNmYTVkOGM2MTM3YzM2YmFkMTQzZmQ5YjFmN2U4OTRmYTBlOWFjMGZiOWNlYzYwZTg2YzgyNTM5NzVkIgorICAgICAgICAgICI4ZTc4NzQyMTA4NDk1ZTU5NGFkMDg5OGZkMDRjOTFlNDAxZTdjODgwODlhODdiNGE0YTgyZTgzNGNkMzc3N2E3IgorICAgICAgICAgICJkM2Y4MGU2NDg2ODEyZDRhYjBkMzM3MjMxNjJiY2JjN2UwODFhOTlkM2Y5YjVjM2JhNDRiMTliZGY4ODRhNDYyIgorICAgICAgICAgICI2ZmQ3ZGVmNzY3NDA1N2JlYTA4MmUwMGRiNGI3NjFhZDc1M2FiNTk4NWE5NCIsCisgICAgICAgICAgIjAwYzQ5NjVlMjk2M2Q3YmM1YjEwNDRkOGZjNzVlYjMzODJjZWRkOTkwNzQxOTc5MmVmYzg4YzkyYjFkNWMzOTAiCisgICAgICAgICAgImZhYjE5MDAxMWM1MThhYzljZTQ1YzFiOGU3Mjc2YmZmYzdjN2UwNWMyNTM3MDg5MTM3YTk4ZGY2ZTBjNjkyMDIiCisgICAgICAgICAgIjBlZDY1NGFmODMzMzliYWIxMTkyNzE3N2YyZjUyMzIyNmI0ZmU2NGI5OWMxNzI5ZjZjOTIyOTA2YmMxNmQzMWYiCisgICAgICAgICAgIjBjOTRkYzJlYTQxMzgxMGQ1NTk0MGM5N2FmZGQ0ODI5ZmJmMTYxOGE4YzlkZTg5ZGMyNDAwNmU3ZTQyMWE1OGQiCisgICAgICAgICAgIjM4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuOSIsCisgICAgICAgICAgImVmYzc0ODlmZWM3NzllMDUyZTM3OWMxYWQ5MDQ1OTAzYjY4NDJhOWNhNDFiNDhiZGRjZTU4MDgwYTVlZGVjNjMiCisgICAgICAgICAgImYzNmVlMTE1NjBmZCIsCisgICAgICAgICAgImM4ZWNiYTYyNzIxNGM0MTRkN2MzZmRkMzE2YzJkODJhOTg1MzU3MjhiOWE5Mzc2ZjY5YTk1M2Q3Y2QxY2VhZDciCisgICAgICAgICAgIjEwNTNkYmUwMTQwYzdmMDJiZDcxZTAxMzdmZWEyOWNkNGMyMWE1OGJkZWM2NjY0MDk5MGQyOGMxMGI3MDE3NTkiCisgICAgICAgICAgIjNjMWQxMWZlOWFiZWJkNzEyNGUxZDk4NTYzMWU5NGU5ZTUxMjQxMjYwZjllZjFmMSIsCisgICAgICAgICAgIjAwMzIxODRlZjI4OGZhMGFhYTBjMmMxYTE5ZTdjMjlmODFjNzAxMmY0NTI5ZWI5ZWViNTM2ODFmNjI0N2Y4ZDQiCisgICAgICAgICAgIjM1NjkxMzQ1YTUxNDhhMmM4NzdiMmIxODkyNmJhZTlkZTViMzE3YmFjMGU5MDJjOTYwMjVlZWMyZjllYWJkMGYiCisgICAgICAgICAgIjllODg4NmVmOTUxOWM4MjQ5ZmViODM0NjY1YzEwMTBkYjc2MjRmNDg3ZTE2MWY4OWY2YWUwMDE4YzFmNGUwYWIiCisgICAgICAgICAgIjU0NzJmN2YwOTkzNTYxY2Q1OTg1ZjM4M2QwNDlkZDgzMmI4MmM4Mzc0OGIyMjgxYmZiOTlkOWQ1MDA4ZGM4MDciCisgICAgICAgICAgImRlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuMTAiLAorICAgICAgICAgICI1YjI2NGZmODhkZWZkM2MyOTk5OTNkODExMjlhNmU1ZGQyYjU3YiIsCisgICAgICAgICAgIjBiZTdhYjViMjk3MDQ4NDNjMWMwZDdlNGVmNWU5M2YzYmE3MTdkYjc4MTVhZjU3MmUzYTlhYjNmOTliMWFjOWEiCisgICAgICAgICAgIjIyYjkyZDliNDNkYTJiOTk2NWM3OTc3MDU3MTczYzAzNTczZjMyNDgwYTkyNzAxOWFmZmYwZTBlMzRlNDA5NWUiCisgICAgICAgICAgIjRhNGQzOTJkY2QxYmQ5ZjI3ZDMyZmRlNzE1OWYwMjNjODMwODllODhhNzFmMjQzMzY0OGVmOGM4NDA0NWI5YzMiCisgICAgICAgICAgIjZkOGU1ZjZlZmYwMzRiOTFiNzAyMzQiLAorICAgICAgICAgICIwMDRjNjUyOTM1NTZmMmZkMTVhYjkwZWIyMmUwNzUzM2IzZGMxNzMzNGY1ZWVkMjdhMzk5MzE4MGM1NmM4ZTNkIgorICAgICAgICAgICI4ZjUxZWViMjc1OTVmODc4ZDIzNjY1YmEzYWIwZTcyOGE1YWVmNzIzNGY2MDM2YjAyM2Y4NzFjMmQ2NTUyYTE4IgorICAgICAgICAgICJhZDVhMjViZWM1NWJjNzZiZWU2MzgzNDYxMjgxZDM5YTMwZjZkNjYwOTJlMGNmZjY5MjMyNjhmYzA0M2NkZjc0IgorICAgICAgICAgICI3ZThkNTQ4OTUwNGU3ZGIzMGE3YmQ5MWEyYmZjNmMxYjM0MTQ0MDU3MDE3NTNkNWI4NWZmNzM1MjAxMmQ1NWU5IgorICAgICAgICAgICIyMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA3LjExIiwKKyAgICAgICAgICAiNzJlMjA5MDBlNWJjYzIzY2Y4NzllZDM1MzE4ODlhMWVkNWFhM2Q1Yzc5MmUzNGUzYjEyNjkwZDlhYzI0MDNkMCIKKyAgICAgICAgICAiZjZmNzhmNTkyMyIsCisgICAgICAgICAgIjExNjI3NWU5YmUxYmQ0ZTZmMjAzZmZlNGYwYWI5YTMyNzM4NDEwZTkyM2U4Mzk3MWVlOWE2Yjk5MmM2NTBhMDMiCisgICAgICAgICAgIjFmOTQwZjZlZjMzZDYxNTBkZmY4YjM5ZGNmMjI1MGQ1NjY1YzA0MjczYjJiZTJkZWM5OTcxMmJiYzAxMmY3NWEiCisgICAgICAgICAgIjMxYjMwYmEwNmZmOWViZTNiODlmNThhNjhmMjY4NWUzMzhmZjZjYjhkNDE4MWE4YTE0IiwKKyAgICAgICAgICAiMDAyMTRhODNiZTQ1M2E3NWJjZGE5NDMzYTdiOTUxNDMzNDM5OTgzMDcyMDcxY2M4MjExMmI3Nzc0MmJlMGMzOCIKKyAgICAgICAgICAiMjI2Y2EzYzZmMzhkNTViOWNhM2YwOGM4NzkzNzg5Nzk2ZTZjZGU2NzM3NmQ2NzNmNWVjNTdkYWNjMzc0YzRjMyIKKyAgICAgICAgICAiMTczNDQ0ZGQ4YTYzNzZkZThmOWRkYzMxYTRjMDYwZDc3MmYwMmViNzQ5NTEyZGNkMDQwMjMxMTc1ZDBiNjk0MiIKKyAgICAgICAgICAiYTk0N2IyYzgyZjdjMTllMmNlODc1MDAwYWY4NDI3NGNiZTJhZGJmMmZiZmI1MzdjY2JlMmZiZDA3Mjg3MTM3OCIKKyAgICAgICAgICAiNzUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4xMiIsCisgICAgICAgICAgIjE2YjExMGUyOTA5YjExYjBjZjM2YjA1MmM2ZjM5MzZhMmNhMTNmYzNhNSIsCisgICAgICAgICAgImMyYmY5ZTRmYjFlZDcwY2EyMTJkMTVlZThlYjNjZDY2MGViNjVjNTI3OGUwM2EzYjEwZWIxMmIyNTMzNGE0NzIiCisgICAgICAgICAgIjhiOTQ5OTIwMTIyZmI5OTJiZjJjZTQzMDEwM2Q3NGFiNzRlNmQ2ZTc2MmI4NWQ2ZWY5YmViN2Q3MjU5OGYyOTMiCisgICAgICAgICAgImE0MzU2MmU5MDY4OTU0MTExMTUxMWQzMTRhOWM0NjAyMjM3NmFkMDU1ZDU0Y2VkNmFjMWYzNmU5OGMyYjI1YTAiCisgICAgICAgICAgImFjZGU2NGRjZjY1MjJjM2QyMiIsCisgICAgICAgICAgIjAxNmFhOTVhMDgyMzgyYzEwYzA0NTMxMGZlZmVjYzhkMTdkYmYyMTZkOGVkYzA0YmRhY2Q0ZjUyNGRlNDg1YjciCisgICAgICAgICAgImZlOGEyNmYxNGNhYmQyOTdlN2YwM2IzYzg1MDg2YTE2MTQ3ZDVmNjE5MzkxOWJiOTVhNTNjMTQ2Yzc4NGMwMGIiCisgICAgICAgICAgIjUzMzJlMDE4ZjY0M2NmOTU4NzI0Y2QwODA3NWViNjRjYTU2ODBjMjdjNzA1ZDQwZDg4YjlkN2Y0MjZiNzM2ZTMiCisgICAgICAgICAgImM1ZjYzOTRlYTY4M2I2NWMyMzczYTZmY2ViMTRmMmVhODUxY2E4ZTAwMGUyNGRjOGY3ZTdjODFiMWQ0ZTcyMGMiCisgICAgICAgICAgIjM2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuMTMiLAorICAgICAgICAgICIzYzg2MGEyOGZhZThkYTJhYzBkOWEzMzk4OTk3N2ZmYTA0IiwKKyAgICAgICAgICAiN2M5Njk5OTA2YzlmMTY2NTEyNWMwYjEwNjczZjNkYWQ5OGM5MWE0ZmYwZmFhYTY0N2RiNTU0ZmQ2MjI3ZWY1MCIKKyAgICAgICAgICAiOTA5Yzk3YjcwNjA5MmJlMjEwZGIyYzI0YmE5ZThlNmE4N2Y5ZGRkOWYzZjQ5MTI5MTAyOWFjNmVlNDZlMDhkMCIKKyAgICAgICAgICAiZDdhNTNjNDYyZGI0ZjBmZDFjYzIzZWM4ZjU1ZWRhMDdmNGNhMGQzZTNjZDM3NjIyODU1YjRkYjA4ZjY0YmUzZSIKKyAgICAgICAgICAiMjZjM2U5Nzg3NTE3MTI5NGVhZGY4NmZjZDYiLAorICAgICAgICAgICIwMTBjMWUwNGE4NThjNjE1ZWU5Njk1ZjY0YWIyZGI5OTgwNmRhNDgyZDJiNDYwMjkzYzQ2ZGM3YjcxN2E1OTc2IgorICAgICAgICAgICJhM2M3ZTM2ZDhkNDdhODRhMzRkNjNjZGZjYTJjMWUzODQ1MjU3M2VkNDRjM2EwNDA0MDVlY2YzZmJmMzY4MzQxIgorICAgICAgICAgICJjNGExZmM5MDgzYThmNTUyOTM2N2I5OWNiODlmYzVhMDhiOGYzNDc1YTBkNTVlM2U0MmNjY2JlYjIwZDA0YTE5IgorICAgICAgICAgICI5N2VlZGE0ZTNjYzllOTkyZDIzN2VjN2QzMmZlMjU4NDVhYjAyNGQ1ODgyODA1ZWQ1MmYxMGVkN2QyNWQ2MmQwIgorICAgICAgICAgICJhZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA3LjE0IiwKKyAgICAgICAgICAiNGVkZjRhZDM0NDBmMTdiMTBkMjZhZmNkZjRlNDQ0ZDJhYTYxYTE5NzU1YTYyMTA3OTgzZjAxMjJmYjJhIiwKKyAgICAgICAgICAiZTAyMDA5MzkzOWI0MTg5ZTkzNGNiNjJkMjdjYTVlOTcxOTY1MmMxMzdmYzQ5ZTcyMWM0YWI5ZTlmMzk4YjBhNiIKKyAgICAgICAgICAiMTJkZThhOGE4OTk5YWYwZGJjMWNlYTBiNjE2M2RhNDI2MTIzMjgxNGVkOTJlYjIxNjBjZjRiMjZkMDU1MWIxYiIKKyAgICAgICAgICAiZGQ5MTlkNDk0NzkzNzg2ZTFiODZmNzlkNjQxNjYxMmEyODIyNjEzNjNkNmM5YjdhMGQ5MmFkMTc1OGVhYWQ1MSIsCisgICAgICAgICAgIjAwOGNmOWIzZjNlNzYwOTBkMTAxMTc0ZWNkOTdkMTBiZmY2ZGU0ZDQ2NDQwMDAzZmMwZDQyOGYxOWI4NTU4ZjMiCisgICAgICAgICAgIjEzNzRhNWZhMjgzZDAzZDRkZDQzZjkzYTRkOWYxNGNhMDA2OGRjMmNmM2UyNTQzN2IwNWFiMWQ0MDYyMWVlYmQiCisgICAgICAgICAgIjg0MTZmNTgyOGFlN2M2Y2ZkMjk3YjQ1MThmNzk5NDJiOTE0MzIzMjg0ZTI5NzZhNTRkM2NkOTExNjMzYTMwN2UiCisgICAgICAgICAgImRhZjFlZGI2NzQ5ODQ2NmIzZTk4OTE2Zjk5MDRmNGEwZWE5Yjg3YTk4MzQ0ZjA3MzgzM2VkZjliMmI1Mzk0Y2YiCisgICAgICAgICAgImQ3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuMTUiLAorICAgICAgICAgICI4YTZkNTNiMGFkYTE4NTRlMjMxMzY5MWFhYjIzMDYzZGUxMzFiYzM2Yzc2NCIsCisgICAgICAgICAgIjI2ODU0NThhZWJmYmQ2MDc0ZWJlYjBmYzBjYzQ5MjFjMjczZThjMGE4ODE1NTE1MDJlNGMyOTlmMzM0ZGQ1NjciCisgICAgICAgICAgImY1MTY3NWIwZmYzMGYyYzQ4MjYzMjAwMzY0OTk2Njk5ZjliMTcyYWZmZWMwZTc5ZTVjNTIzZDFlNzc5ZWMwNmQiCisgICAgICAgICAgImVjZDQ3NmE1NzQzMDc4MWUyZGM4MWYyNWQ2MGQzYTczOTc2NTc5YTJmMDFmMDc1ODRjZjhlNWZiM2ViZDhkNWEiCisgICAgICAgICAgIjkzMmQ1N2FhOGExODBhYWEiLAorICAgICAgICAgICIwMTNhM2QzMmVlYzczNWViZGExM2Y4YmU3NjAyYTA0NzVjZjNjZjI4NWI0Mjg2YWQ5M2Q2MTJjM2FkOTE3MjQ4IgorICAgICAgICAgICI4MDlkMWM0YzE4MGIzNjcwMTVjYzY2YzRkOGU3ODY3Mzg0MTY4Y2Y0Y2I3MTliZDU5MzM1NTM1NWNkZDdkNzUzIgorICAgICAgICAgICIwYzgwYzg2Nzc0NWY5NjYxYzZjMzNiY2I5N2YyY2Y3NWE0YzI3YzNjYmJkYmJlN2VhZjRmODIzNGYyMTJlMzA1IgorICAgICAgICAgICI4MjU2ZDQ0MzlhOWY5NzgxZGY0OGVmZGIwMjM1NjhmOTRhZTQ1OTQ2NTRhMGY5YmFmNmVhMzBiN2Q4ZDk0ODBhIgorICAgICAgICAgICJkMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA3LjE2IiwKKyAgICAgICAgICAiMjBmMDIwNDRlNjNhYzkyZWI5ZmFmMWEwY2UzNWJhNzIwOSIsCisgICAgICAgICAgIjJkZTFmY2MxMTdmODIxZjFkZWE3OTRiNWVlYjMxM2Y0MjllMDBiOTc2YjUzNDE5ZDNkMDNlY2FhMWI1MDc2ODgiCisgICAgICAgICAgIjc3ZThiN2ZiZDZjMzYzMDQ3ZTE1YzI1NTc5M2IzY2JlMGY1ODg0ZjBhNTExMjU0ZDMxYmZiMjM3NDEwMjNjMWYiCisgICAgICAgICAgIjg4MWZlMDE2YTEyZWVmMWI4YWYyMmI5MzY4MjA3ZTdiMTYzOWY3MjcxZGViZTNjOGRmNTI5M2VlYzNhMDMyZjEiCisgICAgICAgICAgImNlNTU5YzBhMDQ3NzFiYmY4ODk4OTQ3Y2E0IiwKKyAgICAgICAgICAiMDE3MDA2ZTg2ZjZjNTg1OGZlNWFkZTBkY2JmYTljY2QxMWMwMmQ0ZTdkMGRlNmMxNThhZGY5ZWVmMTAxMDdlNyIKKyAgICAgICAgICAiYTRjMzZiZDNkOTI5ZWE2YTQ3NmVjZmEwYjZlY2QwNTE0OWI1MTIxNTk1NDg5M2ExYWIyNjY5YzA0MmRhODNlOCIKKyAgICAgICAgICAiYzgxOGIwMGFlNzM0ZGU1ZjllMGI5N2JhMWZlM2U5YzQ2YWU5ODE2YjYzYjE1YzJkY2M2MWNiM2I4YjJjMjNkZCIKKyAgICAgICAgICAiYjk5ZmNkNTRlOTU1NjA5MThiOWEwZmEzYzRiNjI3M2QxYjI4YTIxM2UxMjBiNGYyNDI4Njk2NWViZWU5NGZmOCIKKyAgICAgICAgICAiOTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4xNyIsCisgICAgICAgICAgImQzODgzYiIsCisgICAgICAgICAgIjVjYTNiYmY5OTJkN2FlMzU5NGM2MDVjMzljM2U5NzkwMjVjY2IwYTM1YzZlZjBmYTU3NGE5OGJlMDVlZjdjMzIiCisgICAgICAgICAgIjhhMTlhMjc3NWJhMDZmMmRkMWUwZmY2ZjBmMWY2YTNiMjBmYmRhMjE2MmQwOTI0ZmY1NWI3MGViZmUyYjE2ZDQiCisgICAgICAgICAgImZmNmFlZjhkNDdlYmU1OTYzOGU1ODEwZmZkYjU4ZGIwNWY0ZDliNGEzYTQyM2Y5NjdmZTU3OWY4NzM3ODM2OWQiCisgICAgICAgICAgIjVjNWMwN2U1ZTNjYjVkZGRmMzg5NjIxMTgwMjcwYTIxZTAxMDc4Yzg5YWZiYWIxODllODdmNyIsCisgICAgICAgICAgIjAxNmY1NTA1Zjc0ZmYxMTA0ZGExZjhhNTJlNTBiZmUyOWM5OTg3MTBjNTdkZTQ0MDk4YTk1NzllN2EzMzEzYjYiCisgICAgICAgICAgIjI5NjAzMTAyZjA4ZDJkOTExZjkxN2E5Yzk2NjI2MDhjOTdhMWVhMzcxNzM0ZjY3Y2JmNzAwM2Q5M2M0YzMxNGMiCisgICAgICAgICAgIjNhMGU3N2YzNjU4ZmE0ZDA3MjI1NjJjNGUxM2U4NWE3YzhkMGQ5ZDRmYmY3MTI1ODg0YmE2MmFkMjg1OWI0ZDkiCisgICAgICAgICAgIjYxMzZmN2EyNDU1NDY5Y2ViNjBiNjNiYTg0NzRlNjE2MGM4MzE3OTIxYTA3YjRiNjQzNmYzNzZjNWY5ODI1N2IiCisgICAgICAgICAgIjE3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDcuMTgiLAorICAgICAgICAgICIwNmEyYWU4MmE0ODUzMjA3YzlmOTc1IiwKKyAgICAgICAgICAiZTJjMzM2MzNkNTQ3NTRhZGRkMjRjODVjMzJkMjhhZDg3MGYxNjAzZDQ0NDQ2MGEwM2FhY2FkN2RjYjgwOTYwMSIKKyAgICAgICAgICAiNTZiYmIyNTljYWQzNDZiZTkwYzBkNGYzZmIxOGFjNmU5ZDVhOWFlMmE1YWI5OGExZjg0YjhlNzBjNzFkMGNjYyIKKyAgICAgICAgICAiMGExYTJhYTM5OTcwZDljODNiNGIwYzI1YWVhNDNhNWE1ZGVhZGY5ZGM2MTFiOTZkMTEzMzRlZjk0MzA5MDM4OSIKKyAgICAgICAgICAiYThkM2M2NmNmMzE4NzdhYTJjZGZmMTExOTk0MzI3OGFkZGZmNWUiLAorICAgICAgICAgICIwMTIyNDEwZTc2NWIyYzllOTBiZGFjYmNmZjFiY2E4YWU2NGJlOTljZjAxMzI5NzQ4NTcyMTc2ODM3MGMzNmY4IgorICAgICAgICAgICJjMGQ5ZGI4ZDc5Mzc2MjU0YjljNjkxNTI3MjBlMDVjYWVmZDRjZTdlYWUwOGIzZGZlM2VhYTkxYzQ2MDJlZmYzIgorICAgICAgICAgICI4ZTRkODFiY2QzNzg3YTE0ZDYyMmRiYjc5Y2U4NjQ0YzRmZDFkMmU0MWY3YzFjOTcyNzk2MTE3NDBmYzUwMDAwIgorICAgICAgICAgICIzMTc4YjM3YmJkODFjNWE1ODI5YjVjMTRiZjQ1OWM0MjM4YjAzYmVlZjczZTQ5OGY4NjVmNmNhNzlhOWVkNjBmIgorICAgICAgICAgICI2NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA3LjE5IiwKKyAgICAgICAgICAiYWQ4YjExYTkyN2RlIiwKKyAgICAgICAgICAiNWVjYWNmZjYzYTc5MzhlOTk4MDY4YTJmNGJhNmJjYzEwMjBlMWYyOGM3MzRlNDM0ZTg4NjNjNDhlNmRmZmFlMiIKKyAgICAgICAgICAiOGQxODUyNzI3ZmZhN2YyZWZhM2RlNzAxM2I4MTJhMDJiMjE3MWEwZjk0MGIzNmQ5MjhkYmRiOTYwYTZiMjIwMyIKKyAgICAgICAgICAiMGM4OTM3ODljYmZkZWE5NzM1ZTlhZDEwOTRhNjg0NjFjMmViNmY3MThiZTQ3NGQ5M2E1MTkzMGUzY2RhMDJjMiIKKyAgICAgICAgICAiMWY2MzYzOTE0ZTdlZGE1NDg0MDM3YTc2YWRjNTMzMTJlYjlkYmJlNDVlMjNhMTRiIiwKKyAgICAgICAgICAiMDExZmE0M2Y1ZjRmYmI5ODMwMTE4MTRkNGFmNTQ1NTIxZGYwYjU5ZTliNmZmZDcxMzMzYjhmOWJiYWFhMGZjZCIKKyAgICAgICAgICAiYzE0MjFjZTRiZjMxYmY5OTU5ZmRjNmIwOWI0ZjQyNTFkZGVlZTgyMTBmYzNhNTJmZTdjNzFhODc2ZTZkZGUxZCIKKyAgICAgICAgICAiZmI1OWE0ZGFiMjdkMzRmZGNlNWJiZmM2ZWQ2MjNlODk5NjdmYjZmZTczMTYyMDE1MjgyYzVmNDUwMTM4ZjI1MCIKKyAgICAgICAgICAiNGFiNjFjMWYxMmQyNjQ5ZDgxNWQ2ZTgxMzg0MzhmOGE4MDQ2YzRlODQwY2I3MTg1OThlMWU0YTlmYzI1YTk0NSIKKyAgICAgICAgICAiNjQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgNy4yMCIsCisgICAgICAgICAgImJlZTI5NDM2YzJhMGRlMTZmNjYwNDI5MTcwMDdmYjUxMzBmM2MxYWE3ZGYyYzdjM2JkOTlmYmMxYjQxM2FmNGYiCisgICAgICAgICAgIjk2YTY1YjBlNTQzZWM2YTUwYmU4M2E5ZiIsCisgICAgICAgICAgIjIzOTFhNjg0MjVkZDhmMGI4M2M5YjM2MTI0NjdhNzc5Y2Y5MmY1ZmY5NjExYzAxNDkzYmNiZWY4NjVlMTViYmEiCisgICAgICAgICAgIjVlOGZjZjc0YmViOWVhMjU3M2E5ZmNlNTQxNjRkMDZiYWE4YjZkZjM2N2NjNGM2YTExNGFhMDM0NmM0NTRhMmEiCisgICAgICAgICAgIjllNjA1MzU5MThkMzY2MGM2NjQ4NGVkOTUzNzI3YTljOWEyNSIsCisgICAgICAgICAgIjAwOTg5ZGRiZDI4ZDYwOTVhZGE2ODgxZTI4MzQxY2U3YTBhMWNhNmJmN2YzMWY3NzJmOTEwNDkzYWZkYmEyZDYiCisgICAgICAgICAgIjM1OWQ1MGI5ODMzZjgzZDBhYjg3MTNhYmU4ZTIxMDJhMjdhYjJhNjAxZmI3N2I5YTI1ZDZhMGFmZjQwY2ZkY2YiCisgICAgICAgICAgIjllMTJjNDI4NDNlYmFkMzI4MzI0YTcxOWYyOWU4ZDc5ZWE5ZTVkMGQ5ODg2OTU3MzYwMzRkYjVmZWE3M2RkMzYiCisgICAgICAgICAgIjAwMTM2ZjU3YTM5OGZlMzUyYjI3OGM2MGNiNzRlYzk4YWQ1N2EzZTFkOGM0NDc4Y2E2MTc5ZjRkMDQyNmYwZjQiCisgICAgICAgICAgIjIwIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI2LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjAyNTJlOTViYjExYmExZTFjN2M5NWI2ODUzZjhkZTBiZmUyYjY0MDNhYzFiZGU4MTlkOTE4OTA3NzQ3YjAxOTkiCisgICAgICAiZmFkYjgwNTljMjVhYWYxYWM1NjVhNzQ5MjlkMDE1YTIwMWY4OTdhOWJhZmU3NTQxNjg5NTViMzU1YmIwMDljZSIKKyAgICAgICIxNjE0OTMxMjI4M2MzOWNlZTIyMGQwZjA4NThiMTM4MTJlODZhN2Q0ZTUzODhiN2VhZTVhY2E3Yzg4NmE3NmQzIgorICAgICAgImIxZTZkZDY3OTI2OGE4MjMxMWUyODIwMzE4Y2I4ZjBmN2U4NWYwZTY2OTJlYjBkZWRmMzA4ODFjYWY3MzE1ZDIiCisgICAgICAiN2QiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMDEwNGM4NWZkNWQ4ZDc5MzJhMjk4NWM0Y2I3ZTllMTNhMmM0ZjE5MDNjOGI3MGYzZGY5NzEyZmFlZTIwMTdiOSIKKyAgICAgICIyMDgyYzUxNjUzYzBiZGRlOWRlNjZjMzkwMWI3YzIyYmU0ZjI0Y2M1NmRmZmFhNzVkNDNiMThhMmUwYzBkZmUzIgorICAgICAgIjcyNmIxOThjYWEwYzk2NjUyNjNhOTM3OTZhMjdkMzI5ODQ0NjVmNGI0YWZmY2EwZDkyZjRlNTFhMzdlNDFhYjEiCisgICAgICAiNTUwNzY2ZDVjYTdlOTBkNGRlOTA5YmJkNzk0ZThiYzUyYjc0OTlhNzNlNDY4YWI0NDIxM2NiM2EzYjU0NTJkMiIKKyAgICAgICJmZiIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMSIsCisgICAgICAgICAgImY3MjYzN2FlYzI4ZDJiNmViZjhmNzNkNzQ4NzVkZjAxY2QxMjI0OGYwMDIwNjA4ZTYxYzczZDFhMDFmOTcyZjciCisgICAgICAgICAgIjRkZWUiLAorICAgICAgICAgICJjYzIwNzdhMjQwMDFmM2UzODY5Njk0ZTRmZTI3NzJiZjkzOGY3NjI3NjY3YjYyZDU5MGY5ZWU0ZmNmZmZiYmI0IgorICAgICAgICAgICI3YWZkNWZlZDZhMTgwODQ0YTkxMjFhMzJlZDdjYmM1NmNkMjg3MGEyZDY5NmI5NDNkNmZkZTk3NjdjMWI5NjQ4IgorICAgICAgICAgICI2MTZjMzJlZDZjNDAwZDQyM2RkNGFiNzIxNmFmYWRhMDI4NDAyZWIyYTFjM2ViY2MyNDVhZmM3ZiIsCisgICAgICAgICAgIjAwNzI1NzVkM2IxMWM1ZmZkNmFlMjRmMzUzZmY3NDk5MjdiNGFlNWRmNDYzZjcwYzVmM2VmNTQ5NmIwZDE0NWUiCisgICAgICAgICAgImIyYjhhNTNjMjhkNTNlZmU4YmY5ZjI3YjJlZjRjZWVhNDgzMTA1NzdjM2QyYjRiOTQ5YTEyZTNkZjNmNTY3NzYiCisgICAgICAgICAgIjgyODgxODQ1MmQ4MWJkNDVhZjE1OGM4N2JiNTc3NDViOGExMGZjMWE5MmEwZWE1NWM4NTEzOWY4NDJmNzNmMWQiCisgICAgICAgICAgIjYxM2I5YTk2NGFmOGVkNzIwZDBlMDg0N2Y3YWU1YjMwNWMwNWYxMmNiYzRjOWMxNjg0YWNmOTAyOTcwZDgyMDkiCisgICAgICAgICAgIjQ5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMiIsCisgICAgICAgICAgIjJhOGUzZWU3ZWFjNmIyMmVjNjU4YWQ0NGQ2NjZjOGNkM2Y1N2VjZWEyOTliNWNiN2JmOWEzNzNkZmE2Njk3MmYiCisgICAgICAgICAgIjEzZTVmM2EzMDBlODBlNmRiZjc0MTU2ODBkMGQyNDkwMWFkNmIxNDBiMDAwYWFiODUzNTFmOTJmIiwKKyAgICAgICAgICAiZmIxOTIwOWQ4YTI5YWZhZmJjMDUzYWMxZjMyMGJhNjBmYzFmZTEwNGFhNzgzOWM4NGM5YjNlYWExOGE4Zjk0MyIKKyAgICAgICAgICAiYmIyMTlmNTljYzE2N2EzODRiYWM3YmQzNjU4MjRlMTAzNjMxYjk3YmI5YTZkMTE4ZjRmMGE5NTFmYTQ3OGEwNSIKKyAgICAgICAgICAiZWEwOSIsCisgICAgICAgICAgIjAyMWI1NDY0NjU3MWE5YTkzZjBiMGEwMzgyZTU0MGE4YzM5NzRjYjMxYzg3ZWJmMTdiM2JhNjJhMWM5NTIxYzUiCisgICAgICAgICAgIjBkN2Y5MDcwMmUxM2FlMGUyMjI2MzgzNGU3NjQ2MDM1MTU5NDQ1YTA4NzdkOWE0ZjViMTYxNzdmN2ZlMDUyYmIiCisgICAgICAgICAgImQwMjNkMDgxODk0ZjJkOTdjYWMyNDUyMDc2Y2ExMTkxYTE3MWE0OGZhMWNiYmJjM2YwZjZmM2JjMWE0NDc4NDAiCisgICAgICAgICAgIjNhNWE0ODhmZWJiM2E0MTM4MDE2M2Q5NDJjOTc3YmI4ZWNkMjg2NmM1ZjVkOTE5ZWQyMGMwZGIzZWUzMWVmMmYiCisgICAgICAgICAgIjUxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMyIsCisgICAgICAgICAgImQ5OWI0ZjEwZDlmMzJlMTJlY2ZhZTI2MzBiMjJhYzAyNmFmOTY0YjljNzE1ZDIwNyIsCisgICAgICAgICAgImUwYWY4YjdlYWIzNmE2ZWUzMTZkNzgxMzY3ZjA5ZWExMWUzMWZkYzFlZjJjZjljOTdjMzc5ZWFhY2Y2ODcyYTgiCisgICAgICAgICAgIjIxM2NiZTRjZTJlMjljNzc4YjM1OTU0MDEwMDYzZjE3NzZhYjViMTcyZGE2MjRiNDA2YTFjNThlMGI1NzRhMDMiCisgICAgICAgICAgImIxYjFiMmNkN2QzYTllNTAzNWE5YTk3MzA1OGYwNDk3NjUyZDJmNzNiMWRjOGY0ODdjMDljZmU3MWQ4ZmY4ZjEiCisgICAgICAgICAgIjQ1OGM3OTBlZTBjNSIsCisgICAgICAgICAgIjAxMDIzYmJlODU1N2MyNjMwYTI2MjI0NmRiN2FiYzU0MDM0Mzg4NzAzOGY2NGM2NDFmZDc0ZWU4NzRhZTk2NzAiCisgICAgICAgICAgImZiMjg2MmQ0MjQ3MDNkYTIwYmU0ZjQ4YjIzOWNkMDYwNDM4MTlkOGY2MTUxNDRlMmIxZjAwYzhmODg0OTJlNjIiCisgICAgICAgICAgImY2ZTA3MzE2Zjg0OTA1MzUzYjBiMTg4MGVkNzdkYTJiNjJkM2E5M2JiNzBmZjZhNTAwNzkzOGI5NzNiNGNkNWEiCisgICAgICAgICAgImJmZWUwY2YxM2Y1ZDRhYjIxNjAxMDI2ODVjYWM4MDgxODM0Zjk1NTU4MDZiYjMyMmQwZGM1YjhhMmJmMTI4NDUiCisgICAgICAgICAgIjYyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguNCIsCisgICAgICAgICAgImNhZWNhOGU1OWI4MTBjZjc1MTEyZjdlZDA0N2E0NjY5MmNhMGI3YTg2ZTE4NDFkNzE5IiwKKyAgICAgICAgICAiNzYxZjY4NjRkY2ViYzk1YTc3OWJjMGIxNmE5NTg2NmMzM2RjOGRjYWNlNjFjZDdiZjkwMTcyZDk5YWE0NTdkYiIKKyAgICAgICAgICAiNmQ5MDg4N2Q4NGM0NzM4ZDI1Y2RmMGU4OTU2OWFlNDdkMzA3M2VjNDQ2ZWVlZGQ1MmQ1NzIwOGJkYjY5NDU1NyIKKyAgICAgICAgICAiMDM0NjU3YTcwMzc4NDkzN2JhNjk0ZDQyNTEyMTM4NTMyYjhhZDFkOTg2ZmU0NzMxOGIyODIzZGU4MmNlMjc2ZiIKKyAgICAgICAgICAiYTZmMGQzYzhlZiIsCisgICAgICAgICAgIjAxMWMwYzAzZjdiNmUxYzFhODQxMTc0MGE2ZTViNDczYzI4ZDYyMjExNzZjOWQ0ZjY4MDI0Y2E1N2NkYTI3M2EiCisgICAgICAgICAgImY1NTQ3NDAzNjA5OTBhMWI3NGRlMzRiY2VhMTAzYzJkMGMzNjU3NjAwMjA4MGIzMGJkMjhmMDc2ZmI3NWZjOWIiCisgICAgICAgICAgImViOWUwNWQxOTg5YTMxMWQxMmMxZjI4ZmQ2OTM5MmFkNGJlNTJjZTM4OWRlYzExZWJhOTQ2YmUwNTk5MWRhN2YiCisgICAgICAgICAgImQ4ODdhOGQ4NzY4ZGU3MzZiOTA1YmY0YmRiZTg4Yjg1ZGZjM2IyNWFlYTMwZmU5MGRmMWQyMmQ4YThkNjE1NjUiCisgICAgICAgICAgIjFjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguNSIsCisgICAgICAgICAgIjEwMTIxMjg1NmU2MGNkMjcyZmIxNjljZjYyY2Y0N2YxYmM1MGVmOWYxZmNmZDIxNDgxNmM4MDdmMTg0YTkwM2YiCisgICAgICAgICAgIjE2ZjBlODA5YWNmNWUwIiwKKyAgICAgICAgICAiNjA0M2M4ZGY2YTdmNGFiODNlMzE5N2U4Y2QwMjI1ZGMzODY2YjVkOGU2OTkzYzJjYzViODc2MzUxZWUzM2M3MSIKKyAgICAgICAgICAiYzFhNGNjZGNlNDVmM2U5ZGM3YjdlNTFiNTJlZWJlMGUyNzBlNzE2MjA3Y2ExNDAzZTEzZTcyM2NlNzNmMTA0NSIKKyAgICAgICAgICAiNWVkYmRlODViMDgyOTA1MmVkYWZlNTZlOWEyMjAyNGQ0MDY4MzcxZDM2YzkxZiIsCisgICAgICAgICAgIjAwMDVjNWNmZjg5YjkzM2Q4YjY1MjNiMzU5MDZiYjNhNzExYTBmN2Y1MDNmOTIxNDc0NjY1OTg1MDM5MTI3MzAiCisgICAgICAgICAgIjNiMDAxMWU3YTQyYjQxYzMzYmQyMGRiMzFiMTU2MGM5YjUyMjIwODljZGNmNTNiODJjOTVmOGMxYWRjZDhiNzgiCisgICAgICAgICAgIjNmZDRiNDhhNDU0MDIwNjY4ZTBiNjI1MjBlNTI1ODUyMDlkYjUyOWYzODcwODY0OWQ4ZTA2NDg5MGIyMjhmYjMiCisgICAgICAgICAgImMxOTgxYjJhZWYzYTU0NjVjZWIxMzAyMWViZTA4ZDAyZTMzYWEyZGMzYzM5Mjg0ZWY3YTg1OGRjY2ViMjhmZmEiCisgICAgICAgICAgIjI4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguNiIsCisgICAgICAgICAgIjZmMDNiNTcyNTIzMGRlN2Y5OTYzNjk4ZWRiNzk3NWVjZTgiLAorICAgICAgICAgICJhMzBlZTVhZWFiNTkzMTAzM2VmYjcwYWZiYzJkM2QxMWE2MzM4NGNiOGNiMzNhOGZjYWU2MTQ2Njg0ZTYzZjBjIgorICAgICAgICAgICJjMzJlODlhN2U0ZWE0MzMyN2JmMDM1NjY5NTQzMTkyODg2ZGVjM2ZiNGUyZDA4MTFlZmE5YWVjNTEwOWUzMWI2IgorICAgICAgICAgICJhMDU2ZTUzZTMxN2Y2YTkwNGIxM2E3MzU2ZjVlN2FlNjBiOTcyMTVlZDE0ODE3ZDI4Zjc0YjE2NDBiMWYyZTQyIgorICAgICAgICAgICJlZjBkMzhjYTM1YTM1NGEwYWZlZmE4MDNhNCIsCisgICAgICAgICAgIjAwMTBiZDJiMzU2ZjllYWJjMjJmN2U2OGY3MmY2MTc1ZjlhYjlkZWRhOTY0MjNiNzRiMTFkZTgyYzYwN2ExMzgiCisgICAgICAgICAgIjg2M2UxNzk2NmMwN2Y1NmNkZTllZDZiYzQyMmVkOWZlYWExZjY1MzY3Y2NmOTFjZDRjOTE1OGE3NDk1NzFhMGUiCisgICAgICAgICAgIjlmOTYwN2NiNDhjZDAwYTQ0OGRlMDM2NDkxMDZjZTBjMjQwNmFhNTBhYTEyMTcxNzhjZGIwNjgwMWM3MGE4OWEiCisgICAgICAgICAgIjdhMWE4MzA2OGU2OGRiOTVkMjRjYTNkYjMzYTdlNWU0M2E2ODE1MjI3NGJiYmY0MDA2ZDlmYjY5ZjA1MTRjYzkiCisgICAgICAgICAgImUyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguNyIsCisgICAgICAgICAgIjg3OTkxMzA0NTQ2MWJjMGVhYyIsCisgICAgICAgICAgImMzYzZhMjRhYzM0MGE0YTNmZjNiMmMzMDJiNTZlYjgzOTFiYmQ5NWZhZmI2NjQ3ODM4NDQzOGFiZDhiNDVkMTMiCisgICAgICAgICAgIjJiMjY5OTA5YjE4Nzg0MGE2ODQ0YWQzOTlmYTgxMzcyMDVlMDJjY2FlNzc3NWNlNjY2MjEyMGUxNTRiN2JmZDMiCisgICAgICAgICAgIjBlOGVhNGQzNGE3ZGI2YTIzNDg4YTVkYWVhMzgwODViZWQ1Njc4MGNmZjg3MjcxMjVmMWFkNWY5ZDVhMGJjM2IiCisgICAgICAgICAgImU1ODBiYzRmYTA2ODI2N2IyN2RlMzgzYzU1YzdmYzE3NjRjODZhYzIxYSIsCisgICAgICAgICAgIjAxZDIxZWNlMzNmNDQwYzcyYTExMWQ2MmVmNDg2Yzc3YzZjODkwY2Q4MWE0ZWIwNTMyYWQyYzBlYzc2OGRkMWQiCisgICAgICAgICAgImU1YjIxMTJmZGYwNGUyODdhOTViOTUwYjFmY2E1YWU2OTNjZjBlOGFjYzkzNmYzNzQ3MTRkZTc0OTU5MDhjMjkiCisgICAgICAgICAgIjE1YTcwNzIxM2FjM2RiZGFiYWQ4MWI0YmExY2I1MGI5NWY5MzE0NTMxZmVjODMzZjA4MjFjMDRiNTc0MGQ3M2IiCisgICAgICAgICAgIjhjZjFmOWUzZDdhYmM5NzQ0OTI2MTM4ZmIwMTVjMGYwNTZjYzRiYTJmMzE2MzczNGRiNDQzZWJkNjg4NThjNGYiCisgICAgICAgICAgImE2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguOCIsCisgICAgICAgICAgIjViIiwKKyAgICAgICAgICAiNDJiOTk5ZmIxNjNhNmZmYTY3YTliYzRlNmJhMTJmODFiMWQ1NmU1NGJmMDg2NjM5N2ZkMzE0ZWIwY2Y5N2YxMyIKKyAgICAgICAgICAiYjc4MDRmNzY4ZmJhNTQwNjIxZjA1Y2QzNzI2NGQ4ZThmNTgyMjhmYjZhYjMwZWY1NGUzMGZhOGNmY2I1YTg3ZSIKKyAgICAgICAgICAiMTQ4ZmJhYmY4NTg4NmFiMWYwZDUyNTQ5MmY1NmM2NDdmNzIyOWIyYmYzOTRhMGNlYWJiZDM3YzkzZTZkYTgwOSIKKyAgICAgICAgICAiN2U4MjcyN2IzZDUzZThjMmFkMWY3NzEzZTM0ZWQxM2JhNTllMGE5MTRkYjA2ZmFhZTQ5Y2IzNzk5NiIsCisgICAgICAgICAgIjAwOTBlNTM1NTk0NzkwMmJjM2ZiNTgwYTg0NzcwOTAzYTM5NTViM2RkNzE5MWM5MjhmNzQwN2JhNzQ3MjY1ZGMiCisgICAgICAgICAgIjhjYmMxZDIyZjkzNzcyNzJiMWE4YzM1YzIzOGYwNGExMTkzN2QxYjQzNTRmNjQzNzk1ZTk4NmRlZTJlNDBhNDAiCisgICAgICAgICAgIjY3NDFiMDIxZmRmMDVjNGJhMTE1NjJlODNlOWYyODU5MmUwYTc5MTRmZTg4YjJjMGZlN2E1ZWVhZjUwMGY3ZTkiCisgICAgICAgICAgIjhhNWJhOTU0Zjc1MDc3YmM4ZjY1OWYyMWJiMjIwMzMxNGJlMGQ2ZDIxZTYzMjBjMDVlNmUyZDU1Nzk3OTIyNmIiCisgICAgICAgICAgIjgwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguOSIsCisgICAgICAgICAgImY2MzUyOTkwMTMyNGEyMGZlNWU5MjU4YWRhMmY5NTM3YjAxZjU4MzliNDQ1OTdlMzI5M2ExMjI1Y2EzYTJhZGYiCisgICAgICAgICAgIjY4NGE3MmE3OTNjNjljNTZhZjJkMzQ5OGQzMmEwOTJlOTE0YiIsCisgICAgICAgICAgIjdiZmE4NTk3YTQzNGNkYWRmZTE1NjMxNDQ0OTUxM2Q3NmMxMDVkZjFiZmM0OGM0ZDA3NmFiZmMwNWI1ZGRhNzIiCisgICAgICAgICAgImUwZGQxNWY5ZmU4MmE5OTU1YmQ1NmQzMzQzZTdjNmYyNWE2MDc0MTIwN2U3M2EyZDEwYmI5NWQxZDcyOWEyMjciCisgICAgICAgICAgIjkzZTZjNDU1ZTkxNjIzNWE4MTE2OTRkYiIsCisgICAgICAgICAgIjAwYWRmNDc4NzQ2N2VhYzJlYTYxZmU3ZWY4MmZkODdjMmRhNTg5OWYzMDMwMmJiYzExMjc4NmQyZmIxMWMxNDIiCisgICAgICAgICAgImYzZjFkOGNmMzcxNjBkMmU0YTQzOTgzZmZiZDM5M2E0MWI1OTllZTZhMjdlMjQ2NDI1NTAyZDQ2OTAyMDJmZTUiCisgICAgICAgICAgImY4ZWUxYmM2YzFkNWQxNmJlMjNiOTczYWVkZjdmOTExMWJkOGIxNDI4NDQyNjVmZDkzNTc3YTQzYzNhY2M2ZTIiCisgICAgICAgICAgImFmMjA4OWQ5ZDJmM2YzMWE1YzI0N2E3YjY4MzE1YmFlMjVkNWFlODE0MGE1MWZmYzAwOTcxMDdlYzE2MjBhYjMiCisgICAgICAgICAgImI1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMTAiLAorICAgICAgICAgICJjNmQxNGIwNDcxNDVmMzE3NzgxZGQ3MzgyZGMwYTk3MjU3ZDU1NGJiNTM1MzllZTlhMjkyZTdkYTVjYjY0MjZmIiwKKyAgICAgICAgICAiMDFmZjM4ZDVkZWQ2YzQzZGMxZGM1YzI3YTdlNDgxM2Y0NDhmNDVjOTZlZGY0YmQ5M2U5NmZhZGE5YmM4ZWM1YiIKKyAgICAgICAgICAiNDM0ZjA2MTlhMzhlMDQzNTZlMDYyNzg1NTE0MDdiN2YzN2U0MmQ5MTQ1NjIwYTgxOTgxODUwYTQ5ZTI4NTExNyIKKyAgICAgICAgICAiMmQyMzBiMzc4MjQxMTBmOGZmZGI4NDc3OTQ2MzlkMjY1MGNiZWQzNjI2MDEwNWYxZjEyOTZlNTJhN2Q0IiwKKyAgICAgICAgICAiMDA1ZWRjOTM5Nzg5Y2ZiZmFhZmYyODJiYWY5NzAxZDYxZjlkYmVlNmYyZDIwNmNmYWI3NzU3NjFmNDJjYjI3NCIKKyAgICAgICAgICAiZWNiYTMxYzdjZDJmZTYwMzFhYmEwYjg0ZDQ2MjdkMzAzN2UzMWNlN2UxNTYyM2JhN2NiNzY5MDI1MWMwNjMyNyIKKyAgICAgICAgICAiYTQzMTM3MTI5OGRmMjkyMTk1YjY0NTExNjJkMmRhOTJhNzA3OGUyZDA3YzlmNTZhMDcwNjhhOWEzZTE3M2U0YSIKKyAgICAgICAgICAiYWUyNWE1ZDFjNjhlNjgyMDhjYjUyNTNhMGE1M2FhNmUyZWY2YzI5NWQxNTE2NTY5Yjg2MmNiOTJjYTgyM2NjYiIKKyAgICAgICAgICAiYWIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOC4xMSIsCisgICAgICAgICAgImMxMTY1M2U4MTBiNTNlNjUxMWYxMzMyM2ZlNTIyNmExNzBjMjFmNmRhYTQ0MjlkOTY4ZWZkYTA1MjlkN2I2ZTEiCisgICAgICAgICAgIjBkY2VkODBjNmI2MzAxZGVkMjJmNTI5MTFjMGY3ZmY0NTM1YmQ1ZTIwZmY1MzU4OGNkM2RlNjY0OGFjMDJkIiwKKyAgICAgICAgICAiODVmYTdjNmNlOTZkMGE4YTFmYmE3NTA0NzE3Y2NiZTEzNzEzODA5Mzk1NmVmZjA2M2ZjMmVmZDRhNDZkN2RjNyIKKyAgICAgICAgICAiNGU5MGYxZGE5ZTQzZGJhOTEyOWYxNGVjNTU5YTRkMmQ2YzVhMTljYmYzYTY4YzYyZDA5ODM0NTJhOWVlMGMiLAorICAgICAgICAgICIwMWIwOGQ0OTgzMTNhN2Q3NGEwNTUzMTRlYjQzMTViYTAyODc2MGRhZDQxMTE0ZDU5NDJkNjNiZjhkMjdiZTNmIgorICAgICAgICAgICI0OWNjZDk0YWNmOWQzYWEyMmQwOWI5OWJmOTc0MDliY2YzMzIxM2MwOTk2NzA3ODY4MjAzYTlhYjI3NzA4ZDNmIgorICAgICAgICAgICJmZjY5Yjg5ZDAyZTM2ZTAxMjFhMTE5YjhkNGQ5YmZkNGZlOGIxNjhmZDdjMTJhMjQzZjdhMDAwYjM5YmY4ZDU2IgorICAgICAgICAgICI0ODE3MjQyMDgwMjNiYjYwN2IzMDUwNWRkMTc0MmY4NzlmMTZjMTBjZTQ5MGQzNGE2ODBkMjdhYzM5NjA3ZGEyIgorICAgICAgICAgICI0ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA4LjEyIiwKKyAgICAgICAgICAiMDk1Yjc3Yzk0ZGMxYjE4Nzg4ZTQwMGU2OTE2YTRiNGNmZDczYWNlMGRmOWEzYWMxMzFiZGY5YWQwYTEyZGI3NiIKKyAgICAgICAgICAiNmRlYjIyNTM1OWQ5MDFjZDU2ZWQ4OGNkYTNkMzI4NTY1NDAyIiwKKyAgICAgICAgICAiYTM0YTY4MDU1NTcxMDljMjYxZGRkZjVmODVkMzcxYWU2NTIwZjQ1YWRmNDY5NjAxYjVjMzU5ZmVjNzQ0Y2IyYSIKKyAgICAgICAgICAiYWU4MDk4M2M3MzJkYjZjNTQ1ZGY1NWUwMjA4YWNmYmJmMWMyYzVlNzk5ODhmMzRlY2Q2ZTViYjRiNTI1YzFiOCIKKyAgICAgICAgICAiYmNiMDcwZDBkODQyNDhiMWY4ZTc0ODBlIiwKKyAgICAgICAgICAiMDAzOTU2MzZhODI2NjdkY2YwMGQ1ZGJkZDg1NDEyMDY5NDhkNDkzNjg5MTdlYzBlMDBmZDdhYzVjYThiZjQ0ZSIKKyAgICAgICAgICAiYzU4Mzc4Mzg2ZTU5NGJjMDY1YTlhNjNjZjJhMzU1YTYwOGI2ZjBiYWNiYTU2MDA4YmJhNDcyMmE3YzQ3MDU0NSIKKyAgICAgICAgICAiYTIwZjM4Nzg1M2Q0NjAzMTNiMmU4NjRlMTdiMjMzZTU5NjM1NDEzMmFmMTczYjRkMDQ0OTI2NDc3OTAyNjJkMyIKKyAgICAgICAgICAiYTQzZjg0MjczNzg4Mzc0NjZiMDY3M2E4MTUyN2U2YmUxMDQ1ODAzMjZmZWM4NGJhMzcxZWE2MTA5MWZhNDAzMyIKKyAgICAgICAgICAiYTQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOC4xMyIsCisgICAgICAgICAgIjM4IiwKKyAgICAgICAgICAiNTQ3YzkxNzUxOTA1ZDVhMjg0YWMzZmU0MzJjYmUwMzA1NWIyODUwNjU4OTYxMTBlYTM2ZDA1YTE0MDA4M2NlMyIKKyAgICAgICAgICAiOTU1ZmE4Mjg0MWVhZjZkYjRhNTBkMTJjMDc0ZjQ1YTY4OGI1NTc2ZDZlNjE2ODA3NTQwYWMxMTc1ODVjNWJjMyIKKyAgICAgICAgICAiYmU1MjYwNzI3Y2RmMTIzYzc3NGRiNDBjZmYyOTcwODg2MjQ4NTNlNDY5NTEzNmI5MzExNjE1MTdhN2I5YjVkZCIKKyAgICAgICAgICAiY2Q5ZDMyZGUzZGZlM2VlMmVhNjg4Y2Y3YmY4ODJjY2Y3YjljNDhkNWUxOWVmZmE2NTA0YTQyNjIwYiIsCisgICAgICAgICAgIjAwODllMzlkY2ZkZjkxNjkzZGVmZTM5ZDEyYmIyNWY4MGE3NjhkNDQxYjQ4MWQ2YTc1NDg2OTUwNDI0ODBjZDQiCisgICAgICAgICAgImEwYmE5NzgzZDVjNWJkMzg4OTZkY2UwNmFjYjE3N2E0YWM1OTY4ZTY1NWE3YWFmNTBkNjk0YTY0OTcxM2I3YTQiCisgICAgICAgICAgImJkZDE0YzgxOWY4M2IyMDQ3ZGUyMTk1ZjczMDM2NjU0NTNhOGExMTE1ZTViNDhhYzBlOWE2NWVkZGIzMTg5NTEiCisgICAgICAgICAgIjdiMDQ2ZmNiYzJkMTQzODE3NzZhNzdmYjQ2OGUxMTI5M2M3OGM4Mzc0YzhmNDY2MDM1MWFjMmIyYzc4NDVhMjUiCisgICAgICAgICAgImZlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMTQiLAorICAgICAgICAgICI4MDY0NmIzYzRkZjBlYjc5MWJkYTBjY2M0ZDk3ZDgxZWE4ZjZmNzRlYjI0NWUyYzdjMzQ4ZmQ3ZmI5OTAxNmE5IgorICAgICAgICAgICJkNDBhNjA1YWM3NDJiMjdhZDI0OCIsCisgICAgICAgICAgIjExYjhlNzk4ZDdhMTQyZDA4MmUwNTk4YThjYjRmOGMyYWE4NzVkNWI2NTE3OGM0ZWU2N2E1Y2I4NDFkMWNkYTMiCisgICAgICAgICAgIjA0MzFkMDIwZGYyODgwZDc5MzU4MTVkNTlkOTFiOTk5M2U1M2FjMzQxYzk3Mjg2MWVhYTI2Njk3Y2YxMGNhOGIiCisgICAgICAgICAgIjI3OTRiNDUzMDNiZTAzNDg5ZWJlMDc0ZDhmMjM5ODU0YzNhNjA2ZmIiLAorICAgICAgICAgICIwMWYxZTVhM2RiZDgyNDc1MmQyZmJhM2MzMjQyZTlkOTk2ZTYyNzQzMGQ0OTNlMWI0NDZhMmRiY2Q4NmE0ODA5IgorICAgICAgICAgICIzZTM3YTJlMTI4YjI4YzQ5ZDJkMTcyYmY1YTk3N2MzNjliYWE5ZmZiODM5YmQyZmRmMDBiZDMwZmY1MjI4YjU3IgorICAgICAgICAgICI2Yjk0ZTZkOGVjZjk0NDI0N2FkYWQwMTlmMjFkMDZmYmU0MThkM2E2ZDU0Y2RmMTEzZThkMTRmNmVhMDZkOGRiIgorICAgICAgICAgICI3OTY0OTNiY2IxODk2ZmM0ZjNmMzAzODZjNWM4YmFiNzAzN2M4NzlhZmVhNDdjOGZiN2EzYzViNTBiMjkxODY2IgorICAgICAgICAgICJiOSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA4LjE1IiwKKyAgICAgICAgICAiNmI2MzFjN2MzNWVhNzVhMWIwIiwKKyAgICAgICAgICAiM2U0MjQwYzNlMDllYTc4MzU1MzU4Y2RhNjEyOTUzNDczMGY0OGE5YzlhMWE1MjEzMjg0YmZkMDc3MTIxNmFkNCIKKyAgICAgICAgICAiY2EyMzNkOTkzZWU2MzU3ZjRiMWIxMmE2YmFhMTc3NDMxMzRhODU3ZmQ3NjlhOGJjNzhkNjFmYjE0ZmVhMDUyMiIKKyAgICAgICAgICAiMWRjZjVhZWIxYWZmZDQwZDhiYzY5NDVjMzAxMDQ1YjY4NmM2MTFmYTQzN2UzMGNhMGZhYjVhNGNkZWY1MjA1YiIKKyAgICAgICAgICAiYWY5OTI2YzYwN2JlOTYzN2IxNTA3ZjUwODNlOTQwY2NmYTJmYjM4NjE5IiwKKyAgICAgICAgICAiMDA0N2NiOWE5MTk4ZDk4M2IzMjIyNGNmMjdmYzcyOTliYmQ0YWUwNzc4YTgzZmM1OWM0NzQ1ZmE5OWU5MTdiYiIKKyAgICAgICAgICAiNzRmOGJkNGVmMTNmMTQwY2E5YjcyZTJhYTE3NGNlZWEyNjQ4OTRlMjE1ZjQxYzM2ZDRlNmYzNDZmNjliNGY4NSIKKyAgICAgICAgICAiNTA1YzU0Y2Q0NjI1OWM3MTJlMzBjNDkyOTRiYWRiMWM0NzE2ODUxZjJiNzVlMzk2MTJjZDU0NjZiYTU2ZTNmMyIKKyAgICAgICAgICAiMTU5OWMyZGNlMjNkMDRjOTNhNjQ0MDIyMjdkZjQwYjUxNGM3NGQwYWEzNmUxZTg2NThlMjkyNzdiMzA1YWYzNSIKKyAgICAgICAgICAiMTUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOC4xNiIsCisgICAgICAgICAgIjQwMDg1NWRhNTRhNmQxZmU1ZmI1OGE3M2QyYTVlNTU4Mzg3MGZiZDUyNWQyZjU3MmFkYjU5NjMwMDZkMGExMzMiCisgICAgICAgICAgIjliZWE4ODlkNmQ0NmE0Mzc2MmY1MTNiYjdjYzAzNjIyYmY4NTkyNDRkNiIsCisgICAgICAgICAgIjQ5NmU1MGJhYjVlZjE4ZjIyYzNmNjJiOTIxMTQ4ZDM2YzEwMWFkMGE5YTIwMzg2NzU4MDhjZThiNjJmOGE2YTAiCisgICAgICAgICAgImJhOGQ5MTA1ZjkyZWQ4YTAyYjMxMmYzMjRmM2ZkMzkxOTJiZDQxNTM3ODRmYjU1OTA1YzNiNjY5MzA3YmFkYTgiCisgICAgICAgICAgIjI3YWZhMWI1Y2IzZGMxMWRjNCIsCisgICAgICAgICAgIjAwZDNhODVkZWM5N2QzNDQ4OGVlMzNjNjU4YmExODhlNjRjYjU3ODM3ZDJlZGRiY2JhOGVlNTJmMTNmMWU0ZmUiCisgICAgICAgICAgIjliZWMyZjkyZTcyMTA5ODdlMWMzZmUzNDVkNDAxOTc3MGIwNzc0OTQ1MWIwNGQ2NzMwZDUzYTkxMDE1YjI1N2UiCisgICAgICAgICAgIjgxMGRhZTBhMGMxMTZhNGYyMjQ1MTRlZGJkMzliMmM2NWUxNTJkM2I5Nzg5ZGRhNGYwZDQ1YmY5ODMyZDI3OWQiCisgICAgICAgICAgIjM0MzEwNjJiNGRlMWIwNjc3ZWY1OWM2YzMzMjc2OGVjZGEzYWE2YmNkMTBmNzBiZDA2MDMwYTc2NjVlZDNmMjAiCisgICAgICAgICAgIjc5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMTciLAorICAgICAgICAgICJiODdlZGI0NTVhN2U4NTUzOWY5MjhlZGFlOTA5ZmJmOGY3YTE5OWMwM2E5NGE5YTQ1YWNhYjI1ZWZhZWVjYzI2IgorICAgICAgICAgICIyOTc0Y2FlMGJiNzIyNDNhOTljNjQ3MjA3OWYxOTczOCIsCisgICAgICAgICAgIjAzNWUzMTU5NGE1NjY1NjA1Yjg0ZmVjOTNhZGY5MjU4NTA4NTFkZjdiMzk0ZTliYmVjYmU0ZDcyYzkyZjI3MDMiCisgICAgICAgICAgImI2ZDYwODk2ZTAwNTRjNTljYWZhNWUwZDI4NmM4MTJiMjNlNTM3ODg1ZTRjMzQzOGE3NzJhMTYxMGFlOWZhZTkiCisgICAgICAgICAgIjE4ZTM0ZDQ5OTJjN2YyNjNmM2U4ZTJmOTgwYjgiLAorICAgICAgICAgICIwMjFjOGM5NTlhZWM0NzI5Njg4NzY4OTMwZDY3ZTIwMjk5ZGQ0NzkwMmRiMDc5ZjIzOWI4YzI4OGIwYTcwNDQ3IgorICAgICAgICAgICJjNzE5NmI4NDkxMmVhYTViYzNhZmY2YmE2MzBjMmVhYTNmY2JiMjRiZTQ2MzgzNjUzMTI1MGJkNGM0ZjJhMWRhIgorICAgICAgICAgICI2OGM4YmY0ZjQwY2Y1Yzk4YjY4NWViZWNhNGQwM2U3NmIzMzRhZjBiMWIzNDQ4OGI1ODJlMjkzNTI1MzU3MmY3IgorICAgICAgICAgICJmY2ZhYTgzNTQ0ZTdmZDUyZWY0NThhY2NjYjE5MzAxYTRkZGQ1MDUxNmYxNmE1ZmI3OGYzOTU5OTAwZGJjY2ExIgorICAgICAgICAgICJmMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA4LjE4IiwKKyAgICAgICAgICAiMzAyYWM4MGUzMGM2NTUzZTkzNTlkZjg1YjFlMjRhMTZjODYyYTIwZmY0ZmQ5ZDVmMTQ2YmUyODFkYzMwNjZhZSIKKyAgICAgICAgICAiYjhmYTAwYjUyYTk5IiwKKyAgICAgICAgICAiMzI2Yzk5MzU4YzRlNWZhNGQyYzA0M2YwMmY5MjcwNWY3OTFjZjcxMmJjMDEwNDViNGNmMzQ5YjQyYWU1YWNmYSIKKyAgICAgICAgICAiYzM3ODM4MTFiYmYwN2YzNGJkNmM4NTE5NTVjYmE0YThiMmE3ZDEzOWE3OGJjNGQ4OGUzYTg4ZTZjNGNmNDk0ZSIKKyAgICAgICAgICAiNmE0YTUyMzU0MTQ1ZTExODgzY2I1Yzc4YjU3MmYzMGE1MWVkMjNmMjU2NGI2OTYwIiwKKyAgICAgICAgICAiMDIwMzI5ODdjY2Y3NWE2Mzg2MjQxNzgwNjRkYmE0YjcyYmU1MzllMDdlY2RmNTMwMDM1NmNjNDNkNzI5ZmUzNCIKKyAgICAgICAgICAiZmIzNWJiYmY1YTMyMTcyY2UzOWVhMWZiNDdkMzhlNDk3YTAzYjYwMWVlYWZkYWFmOTlhMzRmZDcyMTE4NGFmMiIKKyAgICAgICAgICAiZTE4ZTgzZDA1MGE0MTA4YjE1ZTVlM2EyN2UwZTYzNmRmOGQ5NGY5ODE2NThlYmRlY2RhYjBkZWZjYzBkYWYzYSIKKyAgICAgICAgICAiYzlhMjdiM2YyMmEwNTQxZDM1MDAyNzUyZTljYzRmYjI1ODJmYWUyNTExYTEzMmVjNWMyMjhhODg3MmJkYmFkNiIKKyAgICAgICAgICAiODciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOC4xOSIsCisgICAgICAgICAgIjAwYjM4MjAxNzQ2ZGNhZjQwMzQ4YWY1N2JhZDcyNTcwY2FmNWEyODU1ZmVjNmM0MmVlMjJkY2ZlNjRjOTk3ZWMiCisgICAgICAgICAgIjYyYTVjOTc1NjI0YmJkMWY4ZWM5MTYiLAorICAgICAgICAgICI5MzkxMDVjMDA0YzAxYWE5ZjQ3NDQ2ZDNjY2Y1MzBlOWIyMTc0YzUwYWViY2EwYTk1Y2I3YTRkODM5NTRlZmI4IgorICAgICAgICAgICIwMzllNTkxYzE5NzFkNzc2Y2VjNzYxMTI5MjA2ZGI3YWQzZGQ4NzE2NjgyNTVhNTU1MGFjNGU5NDhiZTA1YzE2IgorICAgICAgICAgICIyMjIwZGNlZmVjMTNmZjFmZDhhNWE3Zjc4YmY3MTViNDlkMDNiYSIsCisgICAgICAgICAgIjAxMmJhODdkYzAzYTFhMzhiZmVkZjEyMWVkODcyMjgyN2JkOTdkZDYzZmRkZmRkNTkwNTBjNTNjNWU3YjQ5ZmIiCisgICAgICAgICAgIjdhZTYwMzg0ODc4MjBlZmQ1ZmI5NzE0MzgxY2U4ZGFlYjU2ZDEzNTBiZmM2N2RmMDkxYmVhMmFjZGZmZGU5MjkiCisgICAgICAgICAgIjJhYjEyOTFjYzk3NTFkOWUzOWE4MjZmMDU0YWQxZjMzYTJiNzk0ZGE1MGVmODA2NzI5MTdlMGIzODE0MDQ1ZDIiCisgICAgICAgICAgIjNkZjQ1ZGJhM2ZkYzZmMDlhYjBhMDE4YjA2MGFhOWZhZmMzYTVkMTlkNWViNjQzMTBiZDYwMmE5OTExZGNiN2YiCisgICAgICAgICAgIjI0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDguMjAiLAorICAgICAgICAgICJiYTI4MzM2NjA0NzZkODczMTUwNzY2OWY1MDI5OGMyYzY4ZDQ0YzUzZTNkMGE4MDM3ODZlIiwKKyAgICAgICAgICAiODZjZThlOTJhZDg4YjE0NjJhMTcxYWYyOGI0ZTk5MDg4YzA0OThhMjliNGNhNWU2NmY2NGY4NmFkZWM3Zjk2NCIKKyAgICAgICAgICAiZThlYjgyNTdjNWMwMWNkYTE2NWUwZjc1MTFkYjE0N2MxMGJjMDc1MTVmMDRmMDVmNTJkMmJjODkyMjgzNTdjNiIKKyAgICAgICAgICAiNjFiNDNmNDNkNTQyZGJlNzc4MzQwOTFjN2NlNzBiMTgyZTE5YmM5MzZjMzA2ODRhODMxZTJjM2I4YTRhNzQ0NiIKKyAgICAgICAgICAiM2YwYzlmMWIiLAorICAgICAgICAgICIwMTEyYWMyODk4YTI1YzEzMjg3OTFmYzk2YTgyYjcyOTE4YjUxYTY2OGM1NDBiY2ZmYzhlMGIzYWFmZTIwNWVlIgorICAgICAgICAgICI4NzFmNWViNzZhZDExNmQzMDRjYzA0NDJiZGIxYWY1YjlhNjM0NTgyN2U2NzhlNDBlMzNmYzg1OGVmNmM0NTZiIgorICAgICAgICAgICJlNDM2NTJiYjJlYmMzOTY0YjRiZjRhOTNhOGVlZWY4NDA0YWVmMWEwNDQ0MTVhMTU2ZjdjZmQ3OTk1YWMyNWU3IgorICAgICAgICAgICJiMDMwMjY2OThlMTQ0ODllZmNjMWFlOTI5NjU4YmI2NjNkZTBhYzQ0YTdhNTVjYWEwYjBiMjAzNGMyYWFlYzEzIgorICAgICAgICAgICI0ZSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNy1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwNjhlZjBiMjc0MTU3ZDdiNWVjNzI5MDM4NjU5NTYxODNlMGUzNDYyZWNkMjIxMTRjYWQ0YzdiYWFjOTRjN2MyIgorICAgICAgImM1ZTZjYmRmYTJhYmZlYWY4ZDIzMTgyZTljMDg4MTVkMTAwZDhlOGY2MjFkM2NkNGFmYmI5OTg1OTY2ZmQ2YTQiCisgICAgICAiMTgyYjU5OTA4OGEzNWQ3N2ZlMDE3OGFjZjc1MzFjNzBkODk2ZmY3ODhlZGM4MjA2MDU0MGVmZWZkOWYzYzI0ZCIKKyAgICAgICI1YmU2OWFmN2YyZjQ0NDg1YjE5MTE4YTQ2ODgxNGZjNTEzZTNhMWNlZDY3NzkxZjkwMzZlZWU1NmZhOWUyMDYwIgorICAgICAgIjJiIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjcxOTQwYmU2Nzk3YmIzMjg1ZWJkYzIwY2M5Mjc1ZjVkNzc1NTg4ZTlhZjZmNjg3YTJlMzlkMmMxOTExMTEwNzYiCisgICAgICAiOTVkZGVkZTM5MWQyMTk2YjI5NTgxZGYzMTU0YTM3MTJmYTZmY2RmODViYjRmZDQ4NjQxZjA3MWZmZGIxZGUwOCIKKyAgICAgICJhMWQ1OTIxY2ExMGU2OGRjMDQxMzEzYzliYmNiODA4MWJkYjVkNDYwNDIyN2NiZTU3ODA3NDE2NTc0ZDFhMzhkIgorICAgICAgImEwYjIzNDRiYjIxNWI0MTgyYjEwNmIyYjUzNGE4ZDMyMDZmMmQ3ZDMwM2I4ZGQ1YmNlMjkyYWJmNzVjZDc2NDkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjEiLAorICAgICAgICAgICI5NmFkM2JhNGQyOWJkZDM1MjViYmM1ZDAyZTg4YzAxMzNmZmRlYTQwOTQ3NGRiMzRkZjczM2NhNTljM2EyMzJmIgorICAgICAgICAgICI2YTY0YzIxNDNjYTEzMWE3ZjE4ZDAwNWJiM2FhNmNhMWVhYmVhYTEzNmJlYzM3ZGIxMTFkNGQ4ZjYxIiwKKyAgICAgICAgICAiMTBlOWY1MDkzY2VjODcyZWRiMTYxNjJiNmJiZDUyMTJmNjEwMWE3MWQ1MWRjMTQyMGNhZGQxZDU1MGZhZjlhZiIKKyAgICAgICAgICAiNDBmNTczZDNlM2FiNjg5MWQ4YTg4MmVmMDY1NmJjMzAwNjJhMDViMWNjMjc3YTExYzliYTJlZmQ1MTAzYzU2ZSIKKyAgICAgICAgICAiMjMiLAorICAgICAgICAgICIwNGRlYzAxYmJmOGUwYzIyOTZkOWY1YmMyZDJiYTg5NTM0M2VjMzBlYzU0NDEzNTc2ZDgwODRiOTMxNDNjZmEyIgorICAgICAgICAgICJkMjAzM2JmNGMyYzJlMDNmNWIwMjU5ZWRmMTRhOGYzZTExNjk4NTc3NjUyYTJhYjlmNTFhYjAxODdjYzc1MTc1IgorICAgICAgICAgICJjODZkZmM5YTQ1YjFlNGViOGI1NDQ3YTk0YWI5YjUxNzdhMDQwNGJhNDllNTdmODNjOTNmN2ZlMmRlMjQxODQ1IgorICAgICAgICAgICJmNTgxZjY0MjEyNDM3ZTBjMDRmZjM0ZWExZGVlNmRkMjhmNmZmMzM2NzIzNTQ0MTM3NGYwZjJlZjcxYTljZGFlIgorICAgICAgICAgICI5ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjIiLAorICAgICAgICAgICI3ZjkyYWJiNmU1MmVkNWQ0MjA4NDllZDZjY2FiMzZjM2QwODQ5MjU1NDMxZTE5M2Q2N2JkOTQ0YjZjMGZjZWZiIgorICAgICAgICAgICI3NzI5Y2Y1YTMxIiwKKyAgICAgICAgICAiY2VhOTY4YmU3OGFiNWZhYWMyMjdkYzNjNmZjOWNlZDQ5Zjg1MWVkNThiMDhkNWNhMzc1NDI4NDg5YWZiZWYzYiIKKyAgICAgICAgICAiZjVlZDgzNzQ2ZDk1OWEwYTU2ZTlhYzY2ZmYyZTdjOGI4YzNhZGE5N2ZhMTVkZDdmOTkxMzQxNzQ3MDcwY2NhZCIKKyAgICAgICAgICAiNjU0MmJkN2Y0YjMzZjU1NjA0NDU4YjkxMDNhZTEzZGM4OWI0ZTYyY2NiZjg0ZmY3M2IiLAorICAgICAgICAgICIwMjVhMWU2NWViMzdmNGIzMjhjYzMxYjAxNzI0ZjgzYzI2ZWQ4ZDE4YTY1MTY1MjEzYmEwZWZmN2FlNzY3ZWU2IgorICAgICAgICAgICIwYjk5Mjc3NjFhMDY5NGI1YzNiYjY0YjdlMDM5OTZhMzU2OGQ2ZmQxYWM2YjdhOGI3MTk3NWJiMDcxNmQ5NDVjIgorICAgICAgICAgICIwMmQ0NzM2ODk2NmZmZmIxZDQ0OWZjNmVkNzNlMmQxOTgzMWI4NmQxODc2NzUxMjkzNjY5ZTc3ZDZlMTJhMGYwIgorICAgICAgICAgICJjOTYyZGZjZDQwMGZiODNjZTgyNjA3MTYzMTdhZDVmZGUyMTg0OWFhNmY2OGU3MGNlMGI1YjMxMTQyODk4YWQxIgorICAgICAgICAgICJhMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjMiLAorICAgICAgICAgICJmNWI1MzViNjNkNTM1ZTIxMzc3MzJjMzAxMzM3Yzk1M2VhMmVkZDU4YTc4YzIwMjU4MzJkY2E5ZDZiY2RhZDg3IgorICAgICAgICAgICJjOTk3YzkwNjgzNmIyYmY5NWM4M2YwM2Y3YWZhMjkwMTM0NmQ2NzRhYTY5YTFiNDdmNmI5MTZmZDRiIiwKKyAgICAgICAgICAiYzg5ZWZkYjIzNGUwMWEyZjA3NzYyOTU3ZThjMGE0ZjkxYWJhZTZkNGYzNjBlODlhN2M0ODZjNTU0OWYzZDBhZCIKKyAgICAgICAgICAiNzU3NzdmMGNjZDk3YTA5NzVlOTg0NGQ5ODY4NzAyNzZjOTgyNWY1ZDFlZWYzZDFiNDg3YWJjZDE5YjUxMmQwOCIKKyAgICAgICAgICAiYmUiLAorICAgICAgICAgICIwMzlhMWNlOGMwOTE2MjUxYTAxZTVmYjY2MTVkMmUxMTk4MmY0ZmFlN2Q0NmRmMjFkYWEyOThmMmM3NDYxMWI1IgorICAgICAgICAgICI1ODE2Y2MyN2ZhMzcyNzlhYWY1OTAyZWNiNmM4MzlmYTkwMGNmM2FmODZmZjQwYTQ0N2RjNDAyMjM1ZjkwNjY3IgorICAgICAgICAgICI5MTIzZjNjZDM4MTkwNGYzM2VlZTM1M2FjOTBkNWY3ZjIwM2E2ZWE4OTEzNTFhZGIxMTYwMWJkOWQ2YjBhMDI0IgorICAgICAgICAgICIzMzNhMjQ1NWJlMWNhNjJlZDgyY2YzN2NmOGRlNGUyMzkyZGQ1NGU3NzUwMzNjNTY5OTBiYWU1YzQzOTFiNjY1IgorICAgICAgICAgICIzYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjQiLAorICAgICAgICAgICJhN2NmMjk4MjAzNDdhNTJhYjljYzQyMDRiYjZhYzFiZDdmZDkwYTc1OGExNTZkZmE5Y2U3MTkyN2U3NGVlMjE1IgorICAgICAgICAgICI5ODcwOGNmNjljZmQ3OTg1NzQyZjUwMjdmZmE3MTAiLAorICAgICAgICAgICIxMDlmMGQ2Y2EwZTEzZjUwNGMwN2Q4NGE1YmJlNDNlZDZhOTRhY2JhZmFiMDQ4ODkzNjA1ZDM0MWM1ZDI4ZDg1IgorICAgICAgICAgICI0NGMzZmQyODQzNTBmMmMyMmQxZjM2N2RmYjliNmE2NzUxZDA2YWFlYjE3YzNjMGExMDExYWUzOGZiYTRlNDZkIgorICAgICAgICAgICI0ZTQ0YzQ4Mjg3OWViYTA2NDQzNzQ4NzFiNWM1M2IiLAorICAgICAgICAgICIwNDQ4YzM5Y2M0NTdkNmNjYzMwYjBkNzZmZjVhMTMyZTAwYzc1ZDUzMzY0NmI4NDQwYjEzY2U3MzBlMWI3YWQ4IgorICAgICAgICAgICIzYmIyYmE0YTA4MmJiNWEzM2NmNDE0NjZlMDY3ZmNmMTZjNmEyOWYxODc5Zjc3ZTliMGRiZjNlYzA4MDU3NWJlIgorICAgICAgICAgICJiYWMwYzU2NzZiYWVlMDAyZDU3M2QxYmNjOGE3MGZlZDJhYjY3OTQzZWZjOWJjMTMxMzllNWQ4ZGRlMmNiMzBlIgorICAgICAgICAgICIxYjkzNGY1MGNmNmM0NTczOTIzZjczOThkZTY2NzBjYzI2MzQxZjNlMzVhNDE5MzYxZTU5ZjYwODk4ZjI2OTJiIgorICAgICAgICAgICI5NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjUiLAorICAgICAgICAgICJiODAzYzdlZjVmOWE5YmQ1ODQwMSIsCisgICAgICAgICAgIjhlNzc1OGVkNGQxYmE0ZGNlMDg4OTI2YzEwYjJmM2Q0YzFlMjY3MWFlNzJlNjU5ZjcyMWZmN2JlNmZjMDM1ZTMiCisgICAgICAgICAgIjg1ZDUxMmQwN2EzOGRjY2ExZWI4MzFmZWY5MDYxMDA0NDRlZTk5NWNiMDdiYzI2YTVkYzkyYjI3MmE3NGE5MmQiCisgICAgICAgICAgIjIxNDk3MzI1MjJkNTM5NDM0ZmE0ZDAzYjA3Y2Y5Njk5OTU4YzE5ODkxZDFkNTkwNmFhMzZkMGE4ZDA2YzZmYzgiCisgICAgICAgICAgIjdhNDU1MWJmMTg1OGJkZmVkNWY4ODZjYzhkMzFlZTRjMTY0ZTk4MWQiLAorICAgICAgICAgICIwNGI2MmQ0ZDRiOWMxYzNlMDUxMzA5Nzk1YzY5MjQ4YWVkMzg5ZGUyNGE2Yzc5NTM4YTJkNTFkNWQwMzcxOWE4IgorICAgICAgICAgICJhNTI4NzUwZDVkMjU0YTFiOTE0MDk2ZGI5NmQ4M2QyZDlhYWEyYTE2NWJiMTM0NmU0NGMzNTcyNzU2YzM4ZDUyIgorICAgICAgICAgICJmOGQzMDdjMDRlMWVmZWU1ODQ3ODIyMzE3YWI0NjkzNDViODZjN2I4NWI1NDE1NDFjOTkyYWJlYTk4ZDEwOGE3IgorICAgICAgICAgICJkZmM3MDkxYzMwYzY2ODVhZjBlMzNkMDQ2NmFjZTRjY2NjYjM0ZTViMjY2ZDNkNmI5NDdiYzdjMGFlMzRkNWUyIgorICAgICAgICAgICI2NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjYiLAorICAgICAgICAgICI2MTdlYTllNGE1NmM0ZWMxZDNkN2ZkN2YzMjgxYWU3ZmE5MzJiMmEwYTZjZjU1ZWI2MDQ4MTQ1NjgxYjM1ODhlIgorICAgICAgICAgICJkZjcwMTI2OWY4OWZlNjRhYTE0YWQ4ZGYwZDQ2Nzk2MTMxIiwKKyAgICAgICAgICAiNjRkN2ViZDA0ODUwZWI2ZjdhZTFhZjQ4MTIwYTgwMTMwZjMyZWRiNTAzNjk2NDBiMjIyYjhkNjNlZmY2NTcxMiIKKyAgICAgICAgICAiNzBkY2FiMzE3NmQwMjQ3MjI4ZGNkMWMzZjNjZmQ1MTMzMWI3NTZhODY1MmExNGRkYWFiOTkzOTZiOTE5OWE3MyIKKyAgICAgICAgICAiODc1MGQ2OWVmY2QzNzdmMTg0YWUxOWI1YTkiLAorICAgICAgICAgICIwMmRmZTcyOTU4NTk1ODgxZDgwNzU2NmQzZTM2MDdjMDIyZTQ2MWZlMWRiZWQzY2M2ZDYzZGVkY2I3MTkwZjA2IgorICAgICAgICAgICJjN2QyNGI0ZjAzMjY0Y2FmYmI3NDgyZWMyOGI5YmE0ODlkMDMxMTVhZjU4ZmRlNDc1ZWRhNThiZjAxNTVjZGYxIgorICAgICAgICAgICJhZjE2ZGYyMDZiY2QxMjU3MDRjM2UzMTVhZDNkOTU0NGI5ZTJjMmZlYTgxMGNlNDg0NTU2ZDI5ZTA3YWRiZjBmIgorICAgICAgICAgICJmNDYxY2NiY2Y2NjJiZDc0OTU5YTQzN2Q0YzgwMTFjZWFkYTU1MDJhZjc2NzZkOWExNTIxZTMxODlkYWZkZTAwIgorICAgICAgICAgICJkZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjciLAorICAgICAgICAgICJjOTFmMmM5OGM3NWIyZmQ0Y2Q4ZDVjN2ZmMmU3NjliMTJmMjhmMzEzZmJhY2I1MWI1ZTUwMTRkZmNlOWQ2MzVlIgorICAgICAgICAgICI3YzZiMmQ4OGFmNWVhYzMwZDE2MmI4ZGRjMjJlZDhiYzdiZWU1MDZiZmJmMzFlNTFiYTQ4ZjQyNiIsCisgICAgICAgICAgIjZjNDQ1OTYxZjg2ZmEyOThkNzY0N2MyMjI0ZDk1YmMxMjdkYWZjYmQ1YjkwMjFlYzdlOWViZGU5NmY1ZDdhNzYiCisgICAgICAgICAgImY0ZWVkMGFjOTIyYTZlOTNlYjNiNGMzYzQzZjhhNTdlMTgyOTRlMWE1MTczYjBmN2UyZGQyYzRlNTc3YTRiZWMiCisgICAgICAgICAgImU3MTQiLAorICAgICAgICAgICIwM2E4ODVhYWY3YjdkOTRmZGFlMzRiNDFjMzc0MTc2NmE0MDljMWVlMDIzMmIxYzUzZTVmNmM1YWE1NGFjMWVmIgorICAgICAgICAgICIwZTViZjk5YjlmN2RmM2U5YjAwY2VkOTQ3NmVlMWFkYjhmYzU3MTY4OTFmNTRkNDVjZWRhNzBiOWRiM2I4ZmFkIgorICAgICAgICAgICIyNWU3Nzc5NWFmMTQ4MWVjNDkyMTg0YzQ5ZTlkZjgyM2VlNjQ2NjQxMGY2NTAxM2NlM2M1NzkxNjYzNWRhODMwIgorICAgICAgICAgICI2NzdmOTMyYmRhYmFiNWMwYTIwOGQ3ZjQzNjdhN2VhYmE3NWIwNDVkMjVhY2ZkYjQxNWZlZTA1MjE5YTU4NDIzIgorICAgICAgICAgICI3YSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjgiLAorICAgICAgICAgICI3YjFjMzE1MWEzOGQzMmVjN2I4MmM0OGMwMDBhYTQ4MWRlNDE4ZTgwM2I2NzNkMmU5YTBmYzNkNWU5NzRhZGNkIgorICAgICAgICAgICJjZWJkM2MyYThmNDExNDIxMThhNTVlODdkMDRiYmFkNWIzNjQyNSIsCisgICAgICAgICAgImIwZjViZTliM2YyMzdjYzVhZmNhNWE5OWZjY2I3N2I2ZWZkODY4OTQ3Zjk4NTU0ZmJlY2VhY2ZhODg0YzE1MTUiCisgICAgICAgICAgIjM5ZDdjZjQyM2U3MjYwMzFiZmViOGRkMmQ0ZjMwMWRhNmJkZmNhZDZlNTgxNjU4MmFkZGNlMTBkODVkNWVlMWQiCisgICAgICAgICAgIjA0NDZmMzczYjk1ZWUxNjBiY2YwMzUiLAorICAgICAgICAgICIwNjZjMzAwOWRjNmNiYWM3YjhiZDUxNDFjNTVjZjg2YTNkNzk2OWQ1ODU0NTJlM2E2NjU0MGY5NDAyZGJhMjE1IgorICAgICAgICAgICJlM2ZiM2EyNzdmMGQzMzk2YzhjMDA4YWYxOTkxM2UzZDkxZTQwZjg2NzYwNmI1YmY1NDMwNGMwNDcxZGFkZDY0IgorICAgICAgICAgICIwNGI2N2E0ODU3YmY1MjI0NmMwZDYwMTgyM2RkMDM4MGM2NjA5ZGFjYjkyZGI2MDJlNTU3NjRhZTQ2NTBkZjFhIgorICAgICAgICAgICJkYmI0Yjk1ZmE1YWY0YmNkMTEyMWYxM2MwYTczMjNhZGE4YzYwZGUzZDA4MTcyOWQxOTdmOWNmOGUyN2NkZTgwIgorICAgICAgICAgICJiMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjkiLAorICAgICAgICAgICJiMjkzYzZmNmQwNWQxZjM4YjU2MWVhM2QwZDBhZDZhMmFmODMwOWJiOWFkZWZhNzc4ZmQ2YmI5ZmZmM2UwMTBjIgorICAgICAgICAgICI0MDRjNTMzOTk3Y2NmZWQ3ZTE5MTdhNjY5MjYxY2ZjY2E0ZTM3MDI5OTkxZDJkZTliMjk5IiwKKyAgICAgICAgICAiODdiZDJmNmJiNDgyNDU1OTFkNjVmMDIzYTY1YjYzYmJiYTg0MTk3OTJjMDE0MTA5MmIxZGIxYmU1M2U4YzliNCIKKyAgICAgICAgICAiZGY5NWYwYWQ1NWI5NmU1ZTU3NjE1ZDIxNGI0OTc3ODcwYTI3MmY3MjMxNjZjNjIwNDU3NjVlNmI0YTczYTdjOSIKKyAgICAgICAgICAiZWJlMTFkMjQiLAorICAgICAgICAgICIwMzEwNGVjNmM0YWI5ZGFjYWU0MjdmYjEwNjk5YmNhZTAwM2RhNTZmNmQwNzUwOTU4NzE0NWI3MzNlZGI1MzIzIgorICAgICAgICAgICI5YTZmNDIyMjg2ODM5Y2FjMDY0YWRmZWVlNWRjODk3ODBjZGRhZGNjODA3MjE5ZDZhOTdiODVjMTNmMjc5MzdkIgorICAgICAgICAgICI3MDMyN2Y4MmNjMzZhNWRhOGU0NTYzNzdmY2EyM2FlZTUxNGUwNDRhYmYxZjY2YzNlN2JkZWJjMmNmZjYyOGJkIgorICAgICAgICAgICI1MjRhMDk2NmUyNjM4ZDI4MzNiZmEzNDNlYmM3NDFmNzZiNWI3MGExMTM2ZjRhYmM2MDI4NjRhMmFkNDNhNzkxIgorICAgICAgICAgICJiZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjEwIiwKKyAgICAgICAgICAiMDgzOGY0YTU5MiIsCisgICAgICAgICAgIjg5YzU4OThjNmMzZGM2Y2JkYjFhY2IyODA1ZGY1Mzk4ZjBiMzM1OGExOGU1ZTYzYzE0ZDIwYzk4ZDIxZDlmZDgiCisgICAgICAgICAgImIyZWNjOWEwZTgzZGFmMGMwNjkyNjhiYmU4NmZlZWE1MWM5Mzc5MWI2OGU1ZDkzYjc0NWZlYWY2YWRjNDJiODMiCisgICAgICAgICAgImMzMDljOWNkM2RmZTFjMDYxNTNhYjg4MDg1NTYxODk4OTBiZTA1M2E5MjU0ODhkMDI5ZmU1MDQwZTNlN2Q1ZDUiCisgICAgICAgICAgIjMxYjMyZWI5ZDJmNGVlYTIyMTExYjM4YTY1NTNmMDBlZGQyMzY1NTc1YmI5NDlmMzYzIiwKKyAgICAgICAgICAiMDE0ZjI3OTdkZGU4ZDQ2MDE4ZmYyM2Q4OWJlMmUzYWUwNDZlZWQzMTk3Yzg3OWM2MGUyNmYzZDI0MDA4NjZlYiIKKyAgICAgICAgICAiNTBkN2I0NWY2YjAxYWU5Y2EwMDY4NDdlZmJlOWFiY2M5YmMzZTM1NjkwMDcyYjY4ZGI5ZWNkOTI2ZDk0NWY3OCIKKyAgICAgICAgICAiN2IyN2MzNzUzYmY5NmIyZDQ5OTgzMDg0MTQyYzQyYTEyNjFhZmY3YjE3ZmY0YjIwZGU5YmZmYTU4NjI0YWIzNyIKKyAgICAgICAgICAiMWQ0Y2UyZjk2NDY5YThlMTAzOGQ1NzIwYjgxY2YwNDJkYzc4YmZkYTlhM2NjYjYxNjA4MTJkZGVhMTU4YmQyZiIKKyAgICAgICAgICAiNWMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOS4xMSIsCisgICAgICAgICAgIjEyMzgwYzVlODBiYjk1YmJjODg1NzM1N2ZlZmQxN2JmOWU1MDk2MjdkMjhjZGZjZDEyYmIxMzE2NjFiMzQyZGYiCisgICAgICAgICAgImE2Y2E2NzJlMTNhODg1MWZjZTE5YjFhOGNhZjBlMzNjZDZlZjUzOGEwNWZhNTQyNjlhMTM3OGU3IiwKKyAgICAgICAgICAiODgwMzMxZWJlOTFhYjZjZTE2ODRkOWFmNWQ5NzdlYjQyNmNhNzE1NmUwYjZmNDMzNmM2ZTA5MzNkNmZhNDg3OCIKKyAgICAgICAgICAiMmMwYWM5NjlmM2RkZTYxZDhmZDc0YzQ3ZmU5ZTMwNjE3MTBkMjQ1YjFkMzgxMTA0Mjg2MGMxZjQ4ZDJiOGZmZCIKKyAgICAgICAgICAiODA5ZSIsCisgICAgICAgICAgIjA0NmM1NDVmZjQ5NmMyMWY2OTAxMjcyNDU0MThjYzVmYjE4ZjA5MTAyZTdhY2E4N2UyNmUyMDgyZmMxNmY2MmYiCisgICAgICAgICAgImU5ZjQyYTcyMjI3MWE3OWVhZWU5NjI1YTdlNjMyYzE5MzY0MDRjZWM2MjExZDgyMzg2M2JhMDJjNmIwYTgzMTkiCisgICAgICAgICAgIjU4YjRlZDhmYzYyNWEyZTUyYTA1NGY4ZjE4MWYxMzBmOGJjNGIxZGZiZDQ0YjcwYTM1YjM1ZTljN2Y0YWM1NWUiCisgICAgICAgICAgImU1ZTJjYjA2OGI3NTg2MzliMmNkNjQzZGJmYTgyZTJkOTcyMGU0ODlmNWM4MjFkOGViZGMxMzY4YTlkMzQ2OGEiCisgICAgICAgICAgIjM3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDkuMTIiLAorICAgICAgICAgICJlZWUxZTQ1ZDE4YjE0N2MyNjlhNjBhOWM2NDIwMThlZDZjZDExNTdjZDBjZTJiMjk2OGRmYTRiNDk3ZmM0MGIyIgorICAgICAgICAgICIyNGJkODYxZTI1MzUxMjJiIiwKKyAgICAgICAgICAiNWM1MTNlNTE0NDUyYjE0YWVlMzNiNjE3NjBiODU4YzUzNTdjN2Q3ZjIwZTRhMzdjN2VlZmU0MTljYWUzZmQxNiIKKyAgICAgICAgICAiZjlkODNlNWVjZGUxOWVlNjMyODVkZGNlNjY4MGVlOTQ2NGZlODM3NTZlOTAzMWQ2Mzc5ZTZhNmIzODRjZTI3NyIKKyAgICAgICAgICAiYmM2NDJjZWQ4M2IyOWNmNzRiNzJjZWZmZjUzMDcxMDRlMTgzZGUyY2U2YTEiLAorICAgICAgICAgICIwM2E4NjQ4M2NiYjcyYzE1ZjVhNjkzMmIwMTJmNDBjNGIxNzMzMzNiMjY4NmY0OTg0YmE2NmUyNGM3Y2Y0NDQxIgorICAgICAgICAgICIyM2JhMmVhNjY2YTE3NTVkMDkzNTdiZWVhNDM3OWNlM2NkYjBhNzdhNmVlM2I3Y2E2MGRiNjgyNDE3ZjcxNjNkIgorICAgICAgICAgICI3ZDNhYzczNTI4MTFiYjk0YzViNzcxZjNkM2ZkYTc3M2U1Y2ViYzhiYzY2MDExNTViM2Y0ZTRiNGNhODVkOWJhIgorICAgICAgICAgICJiOGVjMjU4Y2VjZmY0NDMzYzkyZThmODYzZDk2ZmNjNzk0Mjk0OThhOWUxNzkwMzMwYmM0ODdjMDEwZDc5OTI0IgorICAgICAgICAgICI1ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjEzIiwKKyAgICAgICAgICAiNTUwOWE1YzFhYzU0ODlkY2I3NjVmMzdjZWJiZTdkODFjZjAyNzZiMWYyY2ZmOTVkMjc0YmJkMDQiLAorICAgICAgICAgICI3NmU4MWE1MTM3MWZiNTA3NDExNDFkY2IzMWQ1MWQxYzQ2MWZjYzAyNmFlYTg1MjAxNWQ0Njg3NDBiNDUyMzQwIgorICAgICAgICAgICI1Zjk1YmE4NzliMDg2OWJmMDMxYTYwNjU0ZmM0ZTU2OGMxOTU3Y2U0ZTQyYTM1MGE5NWJmOGNiMmE4YjVmZGU2IgorICAgICAgICAgICJkY2ZkMjUwNWMwMzdhMjllZGU2ODljNTNkODMyMTllNzNlNjQwODE3YmY4YWZjOWFiMDA0ZWNhZWM4NDNlNGZlIgorICAgICAgICAgICI0ZTM4IiwKKyAgICAgICAgICAiMDI1NWRlMjgwYjcxYWZlZmFmYTIwZjI0MWUwODFiN2VjNmMxNjJkZGRhMTg4NGZhOWY4MjVjNGNlNzYzNmVmYiIKKyAgICAgICAgICAiYzExYjg0YTZlYmVhMzU4OTI1NzFhYzllNmIxYWQ4NDczZmE1NzNjODgzYzlmMjE1YTE5NTgwYzNlYTMwMmY4OCIKKyAgICAgICAgICAiZjQ0ZjQ4ZTRkOTVjMzQ0MGQ0OTMxZjE3NjZhMWZlN2U3OTBlNWQzOGU4NWQxZjYzODUwYTNjNzA3YWQ4OTc3YiIKKyAgICAgICAgICAiODhjMzhjYjllZDk4MzQ1Y2QzNTBjM2RkNDUzMDlmYzgxY2I0NjI3NmU0YWQ2NDdmYTg0YzE0MTI1ZWZkNjdkOCIKKyAgICAgICAgICAiYmEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOS4xNCIsCisgICAgICAgICAgIjAyNTM4MWE1NWM4ZTQ4N2Q3ZjRmZjdjMzZjZmIzNzUwMDdkMTlmOTM3MTEzNmUyYjNkZjQ0MjVlZWVlZTVkNzkiCisgICAgICAgICAgImMzNTI2MWZiYjRlYTY4YmQ5MWU4ZWRhYmEyMzI5ZTI5MzE1MzA2YzdkNzE4MzMxNTViODgiLAorICAgICAgICAgICJhYTMxMGY2MmRhOTBkYTRhMjAyOGIzODEzOTljYjdlMGVkM2JiNTEwNTc1YzliZDBmNjM4MjE1YmFmNzgwOGUzIgorICAgICAgICAgICIyNDVlYWYzOGI3NmUyNjUyMjkwYjdjYzYyMDkwN2NkYTBjYjdhZjA3M2MxMjJmZjgzZGFhZTE5ODZiNDNlYzFhIgorICAgICAgICAgICIxNDgyZGJhNiIsCisgICAgICAgICAgIjA0OWJmYWM2NDEwYjc3ODAzOTdhNDlmYjg4OTNiMjRkOTAzYjM2MDBmMzNjNzgyYzE0NzViNWQyNGI0ZjRlODgiCisgICAgICAgICAgImZkMTEyNGVmMDY0NWYzZDM5MWVkMzEwMDZkZDFiN2MyNjQxMjhkMGRiOWFhMGQ2NWEwOWZmYmUyOWE5NGNjYTMiCisgICAgICAgICAgIjU4ZGE2NGJkMWI3MmZmNTU4ODg4MDgxMDViZTA5MWFlMjNlYTNmMzQ3NTA1MTc5ZWNjYjI0MTBkODlkZWNiNjIiCisgICAgICAgICAgIjMzMGYzNmM3NDQyNjJlYjJiMDc4YjQyNTRiY2RjZWNlMjExY2YwNTc0YTI0NjhlMmExZTAxOGJjMzFmNTAyMjIiCisgICAgICAgICAgIjM1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDkuMTUiLAorICAgICAgICAgICIwNzNjNDM2N2JhZmQ0ODEwZDc3MDQ0NjBjNzgzZDM1MGY3Y2NkMDk5NDcyZjc5ZjdmZGYyM2VmMGNmYWFjY2FiIgorICAgICAgICAgICI5NTcxZGY1M2ZkZTQiLAorICAgICAgICAgICJmOTVhMzk5NmRlZjFjYWZjMWE0YTBiMzQxNDZiNzNkZTZiNWE5MmNiODEyZTIwYjIwYzEyMmEyNTFlNmIyMmUwIgorICAgICAgICAgICI0NjljOThkYjEyOGQ0M2NlZmNkZDgwYzdmZjM2OTk4MDE2YTg5MmE4YjYzNGIzNmI5YjBjZTg3ZWE4MGI1ZGQ5IgorICAgICAgICAgICJmZDdhMDgyOTE0ZTczYjgzYTM4NDFkZTUxYjcxYjFhNmI3ZWY3ZGU0ZTRiODhlZGMiLAorICAgICAgICAgICIwMmRlZTQ4YjBmOTk1M2VlMTJjNzE4YjMwM2IwYzg5ZDYxNTBlYmJlODNhZDYyNGUxMTdlM2YyNzA0YTBiMTdhIgorICAgICAgICAgICIyZWJlZTgzODUyNTZmMGU2NDI4MGZiMDZjM2IxNDZjMDk5YWYyM2E5ZjI0NzkzMzkzNzgxYTU1NWFjNGVhMmQ4IgorICAgICAgICAgICI4ZDc4NWQ4Y2RiNmU3YTJmODk1MmQyNTAzY2NmOTAxZjEyMzlmNmY3YjFhY2Q0NDEyMWMzNjVmZGFlMzcwNzQ2IgorICAgICAgICAgICJkZTQ1MjZlN2M2NTYwZjg3NTQ2ZWQ1NzdjZjk3OThiZWY0N2U0OTIwNjU1MDljNDkyMTJkMzcwZGVhMDUyMmQ3IgorICAgICAgICAgICI5NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjE2IiwKKyAgICAgICAgICAiYmFiMjBiOWE2YTUzMmU2ZjhhZjA3OGIzYTE4NWUwYWE4NmU2MTY4MWJkMWJkNzc1MDQ0YTJjOTU4ZDYxZWRjMiIKKyAgICAgICAgICAiNTE2MDdjZDlmMzExNDhmNWE5MTEiLAorICAgICAgICAgICIzNzZjZjAxODE0M2IwY2U2NzAyMTY4NGNiYjM2ZTRhZmUyZmY5ZGUxOGJjN2YwMmJlZDg2M2JmMWJjMzQ2NjMxIgorICAgICAgICAgICI5ZTcyMGZlZWYxOWQzOGUyNmJjYTdlOTlkNDA5NmE5ZWVkOGRlNWJmMjAzZmM3ZGQ5Yzg0ODVkZmE1YjY5MDc1IgorICAgICAgICAgICJlZjBjYzAzN2ZjZGZiNTVhMGM5MjhjZGFjMGNiYTA0OTdlYjYwZTNmIiwKKyAgICAgICAgICAiMDQ4ZGQ3NTA5OTE4NDMwZWRhYmMwMTQ2OGRiN2UyODdhNzM4MWU0MjhiNWZjOTNjZThkZWZkN2Y0OWQ1ZTkzNCIKKyAgICAgICAgICAiMTUzMDQzZDEzN2FjYTlmN2I5NzU3N2I3MGRjMDE2ODBmMmRiYTkxZTkzMmI1M2FjZjJhN2YzMzQ4ZjU2NTRiMiIKKyAgICAgICAgICAiY2ZjZmU3NWQ0OGYwZmE0NTAwZDFiYTVkMjkyNDdmZjE0MmQ2Yjk4MGUxMWI5ZGJhNjg4M2Y3M2JiODU1YTI0YyIKKyAgICAgICAgICAiYzRlYjkwNjgyMzZkYWEwZjJmOTM0NThkNzI3MjZjMmQ4ZTMxMjU5YWNkM2E3ZmRlYjZmZWI1YzZkMmVkMTc4ZCIKKyAgICAgICAgICAiZGIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgOS4xNyIsCisgICAgICAgICAgIjE5YjFmNGNkM2RiZGYwNWIzZDVmMTY4MDg1NmM1YTc0NGY1MTYyYjUyMGJmY2RmYzk4ODdkZDkyYmU5ZDhjYjYiCisgICAgICAgICAgIjI1YzcyNWFkNzVmNGYyY2FhNWVmNTFmYWNhNzFiNWU2NmY4NGYyZmM2ZjY3OGFjZTgwOWQ3NmI4NDJlYWZlIiwKKyAgICAgICAgICAiNzhhNzE4ODI4NTNkODVhZjE2NWNjMGIyMmZmZGM4ODczZGY0OWUyZDZjYzBhZDBiMGE5OTViNGEyNTljODY3ZCIKKyAgICAgICAgICAiYzFhYWI2NDI4YTViOGU5ZjNiZTg3ZDg3ZjllNmVhYzU1MGY0ZGYxMTM2OGU3ZjZjZmQ3ZDBlNDc2YTQ1OWIiLAorICAgICAgICAgICIwNjJhNzhkYjVjYTY5YTMwNDgxMDc4OTQ5M2RiOGNkNjQ0ZmIyOTRlMTdmZDM2NDUzMmI4ZWMxN2NlM2ZkYTcwIgorICAgICAgICAgICI0NzY0NjU2MjRhNjBhNmVjZGJkNWQ5NzI0MGM4ZDg5ZGVhYzExZGMzMGQ3Yjg1MTQ0MTQwOGVkZDY0Mjg4MWEwIgorICAgICAgICAgICIxMTJiNjJmOGNmZGUzNGQ5YzExMzg1YzI5MTg5YmYzODkzYTZhYmFjZTA0YTEwYWE2ODBjZDNhNmVlMDAyYzMwIgorICAgICAgICAgICI3MDM1ZDIzOTlhMmE2MGI1YTdmMWNhYWYwNTg0ZDEwZmQwNmQ2ZWZkNTYxMTRjMDVlNDNkNDJkODM0ZjAzZTNmIgorICAgICAgICAgICJlOSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjE4IiwKKyAgICAgICAgICAiOGNiNzNiYzQ3ODUwYzE3ZmViZDM0ZmY0YjczMjNiNTA1MzAzMGI5NjIyMTQwM2NkZWY0NWRlYzY1YmE2MGVhMyIsCisgICAgICAgICAgImVkNjQ3ODYxNDg4MWViZTNmZGQ2ZDllZTA1ZjI3NjVmYzhhM2VhYTU4MDMxMjM1YWY5NmY4NmU3ZjJjODEzZWMiCisgICAgICAgICAgIjA0ODA2NjFkMWMyYjRkZWY3NDJiMmU0MTQxOWRmMjg4M2VkNTg2NzljYjlhZGFlNGRlYzRjZjc3ZjhiYzI5NDEiCisgICAgICAgICAgImQwMzNmODg3N2E5MDZkZGM4OGQ2ZGQzYzUzOTZhZGFhYzAzZWIyYTcwOTRjMGZkZjBhNDRhNmI5MjNhYiIsCisgICAgICAgICAgIjAzOTc4ZDRlZmZjNmQ2MmYyMzJiZjQ2YjQyOTBjNTAxMWQ3MzI4MGFiMGU4MGFiOWQ2MDUwYTg1MmE2Njc5ZTAiCisgICAgICAgICAgIjE3ZTE3MGQ5ZTcxNTZjOGRjYmQ0NmNkZWRhNzBmZjlhNTUxNjhiOWZkYzAzNjViOGFhYmI5MDlhYWQ0MGQ1OTUiCisgICAgICAgICAgImM5MGI5ZjAwYzFlMDBhZDZmMDFkNTQ0MzA3YjI1NGVhZjQyNTVkZTYyYmZkOGE1ZjdlNzlkY2ZjNzQ0NWNlYzYiCisgICAgICAgICAgIjNkZjBjMmJkMGFkOTZjYjcwMjQyYjMwYjMyNDIwNzg4MTZiNThiMGE5ZmZhMTZmMWQ4NjMxNWY4YTFjYjJmOGYiCisgICAgICAgICAgIjZiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDkuMTkiLAorICAgICAgICAgICI4ZWE1NTY0M2RmZTdjYmUwNzVjMTdiOTNjNmJhNmI1YTc0ZWE4ZDFhYmFiOWM3MjhhZTViMDA4NjZjNjI4ODBkIgorICAgICAgICAgICIzYzAwMDUyMDM3Y2Y4MDJkMmNmMmE4ZTFiZWE1OGM3YmE2MDQ3NzRkNGY4MGJjMDQiLAorICAgICAgICAgICJhZjlkOWQzMTJlMjI1NzBmYmM0YmM4NWE0NDVlZDhkODk5NjYwZWQyNGNmMDMwMTUzMzk0NmU1Y2I5NDcxYTI3IgorICAgICAgICAgICJjNTEwY2QxNzU1OTFkMjNkMzYzZGM0ZTNlNjljN2JiNDY1NTE3YTRjZDFkMWNlNDEzZTEwMTZhZWFmZDU1ZDJjIgorICAgICAgICAgICJiOWRlYmNmZTRiMWQiLAorICAgICAgICAgICIwNTg3MTExOTE2YmI0MmY4NDc1NzY5MWVmZWRlN2ViNzc5NmE1Y2Y4ODdjMzdjYTlmNjFiNDUxZmIxYmFkZTM4IgorICAgICAgICAgICI5Y2ZjNWZkYzIxOTg0MWJiNDFkYTgyNzQ1MjcyNWZjODJiNGQxYWRlNTY5Y2VlYzgwNTc5ZWRiMWI0YjE1YjQ2IgorICAgICAgICAgICJhZDdkNDViMjQ1OTg4MDIzZWEwZGZjYjM3NDRhNjkyZWI5YWNhODVmMjExMDEwYWZiMWU5ODk0Zjg1NGE1ZTM0IgorICAgICAgICAgICJmZTg5YWEwNTE5NjhhM2IyMzYyYzE1MGM2ZDk3MGVkZDgyYjllMmQxM2IzOGMzYzI5NTZkOTE1MDA4ODY0MWQ1IgorICAgICAgICAgICIzMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSA5LjIwIiwKKyAgICAgICAgICAiNTI1Y2ZmYTMiLAorICAgICAgICAgICIwYzk5MzA0Y2M2MjYzZDFlZTI0NDZlMjQ4YzI3MTEyYzhmOTZkYTgyNTE1ZjA2ZjgxMjM5OGE4ODgxMWYzOWZiIgorICAgICAgICAgICIwNTYyMDVjNDRkNmJkNDg1NWE2MmMyMWM2MDFiODhmODAyMzRlMjMyNDFmNzE2MzIyZDgwNTRhODRhMWZjM2M4IgorICAgICAgICAgICI0NmRlZmI2MTc2N2NjNGQ4MTZmYTdiMzc0N2Y4NzI5YmYzMzcyYWMyYzIyOWQwNTJmNDViYzQyZmMzODA1MGRjIgorICAgICAgICAgICJhM2YyNjMyZTYwMDdiNjA4NTNiN2UwY2NiM2RhYTQ5NGU1NTMzNWZkMDRmMTNkNWZhZGE3IiwKKyAgICAgICAgICAiMDYzZTQ1MDhlNTMxMmI1YzM4Njk0ZGU4MmE3MWVkYTMxMmU5YWVkMDViYzE0M2QzMzhmN2YyMjgxMmQ5M2MyOCIKKyAgICAgICAgICAiNjUxMjZhOWIzYTQyYzNjYTE5ZWRiMzQ2MDFjMGIyOGE3NTY2M2IxOGYyMzlmNWFkY2FhNGU5ZmE5ZjYxMTgwNCIKKyAgICAgICAgICAiNzI2ZmExMjk2MmJiYTMyMzBjYjg4NmQ2Njc4MmE0N2VhOTUwMmE4MzcxZTc1NzNiYjZiMDI2NmMzMzY0NmJkZiIKKyAgICAgICAgICAiNTNmOGRlMzY4ZWYyMDViMTFhODViYWYyMWRhZjNjZTdhMjU5OWYwMDhiOTk0NWVlYjE4NmVjMTkyYzU0MGFjMiIKKyAgICAgICAgICAiM2MiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJBIDEwMjgtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiMGI1MmNiNmI1YzNiOWVjNWFhYWQ4OTRlNTE3N2Y3ZjQ1YjhkMzNkY2JiZTk2YTViMjZmMzAwNzJiZjE1NzNhNiIKKyAgICAgICJjNDFmYjBhOTdhZTFlNTJlZDhjMjVjNjJiOThiZjU5ZGU3YjY4YWI5OGMyZDhiOTNjNDk0MjcyM2NjNGJhZWQyIgorICAgICAgImIzOTNjMDdiMmIxMTkwOWM3MzJkZjdjMWRjYmI0MzNhODM5ZDQ2ZjQyOGU5ZGRjOGQzNWZkMzNlZWQyOTgxODAiCisgICAgICAiZjc1ZjJkNWM5ZmU4NTM0ZjAzNDdmODY4NWMyOGM0MzdlYTViODExYTI4NmU4MTBjNjk3YTg4Y2Q3ZTQ1MzY0YyIKKyAgICAgICIxZiIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICI0NWNjMTQxN2IyNmZjZTNlOWZkMzEwODliMWEzY2NjNDZmOGZmMjFlYWMyZTFkNjdjMGFlMjAxNTJkYzUwZDFjIgorICAgICAgImU3Y2U2ZjI2NDA0ZTJlNjQ5NWI5NzdiZjEzZjlhNDA1YjI0NTgwZDYzOTNhODUyMjU0OTZlNGFiYzQ5ZWJlZmYiCisgICAgICAiZGU3MGNmMjY3NjY4NjZmMjc2ZTE1YjQ5MmFmODAzM2YxYmFjN2Y2NmI3MWEzYmFmNTcxZmZjY2MwMzhhNDg4NiIKKyAgICAgICI5Mzk0Y2NhM2ZhMDA0OTg1YjQzNGE1MTUxNzg3N2VhZTk3YTM4NDk0N2YwMWE3MmNmNGIyMDE5M2RkMjc2NDgxIiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuMSIsCisgICAgICAgICAgIjU5MjJkMDlmZGY2NTIyODAyZmJjZjdhMjhlYzNkOWZhZGY2MDcyMDNhMzFiZDBkYTk2M2FhMDMxNWYzNWUxYTAiCisgICAgICAgICAgImEzNzRkNDg3ZGQwODYyYTZmNmJlYzkzMmI3ZGIiLAorICAgICAgICAgICI2MTM5NWEwZmExMmUxZWMyZmZlYTJhODg5MDY1M2U4ZjM3OGRjNDZjZTJiOGFhNGEwYTFjNTY3YjMwZTU5YzNhIgorICAgICAgICAgICIzM2E2Njg5ODk3MTRmYzNkNDVhYzg4NjMyN2UzNmMzNDVkYTg1OGY5MDNkMWU2MDY3NDAzMTRjYjgwOGQ4NmFiIgorICAgICAgICAgICJjMzFiNDliMzViM2YyMGUzNzkyOWRjYzg1OWQ1OTE0MSIsCisgICAgICAgICAgIjA0MzllN2RkMDlhZjYxYzBlZTI1ZjNlNWMyOTUxZGE0OWQzZmQ3MDhiMjk3YTMwNTVmZjk5ODNhOWVhNTM4YjgiCisgICAgICAgICAgIjNkNTlkYWJkYjg1ZGFmODJhZTdiYjE5NzhlN2RhMmE2ZGMwNTg3ZWY5YzczMmVlNjg4MzczZmJjYmZhMmRhY2YiCisgICAgICAgICAgImY5YjNjMTJmNzA0ZWUxNGY4MzI0YmQ0Y2M2YmY5ZGNkM2YwNTMzYzNiMTFhMGQzOGRiY2M3YmI3ZWY5YTcyMjkiCisgICAgICAgICAgIjZiNmMxM2RjNDJkN2VjMTdmODUxYTUxNjEyYzc0OTRjNjM2OGE3ZmJlYzkzZDIyZThmOWI3MmJkYzA0NDlmYjQiCisgICAgICAgICAgIjMwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjIiLAorICAgICAgICAgICI1ZmJhZDQzYTkxMGEyOTBlNTA1NWQ1MTRlNzFjOGVhYmYxZjkzMzIwZWJkMGRhOGY5MGQxNDZhOGYzZGQ1YzFhIgorICAgICAgICAgICIyYzcyMGI5MzIxMWU0ODI5MzQxNDlmMWQyMWI5NzhmNDhhMGJiOGU0Y2NhM2Y1ZDQ1ZDNmM2UzYmE4ZTEiLAorICAgICAgICAgICIyMTA0NTI2MTgwNGJmNzU0YmNiOGJmMzQ5OGIxYWQxMGFmZjMzZGExZjIyNWVkYTU2NDY1OTA0NThiMjA3MDlmIgorICAgICAgICAgICJjOGQwYjQ5ODkwN2E4MzY0Y2UxYzQzNmI2YjFlNzMxODFjODZjNjc3YWY0NWMxN2Y5ZTRhZjM3NTljYWQyNDg3IiwKKyAgICAgICAgICAiMDI5ZjY0YWMzMzAxMzQwMDdmNzdmNzJjMzdmNDE3N2MyNGQ2NjBiZTRlYmFjMTg2OGFkMTFmOWUzMDUxYjhjZCIKKyAgICAgICAgICAiNzdjNDY5MTE5OWFjNDkxOWRiMmVkMzYzNzQwZDJkZGUzMjkxZjEwZDkyNjhlN2M3ZGUzN2VhNDIxZWJiMWZhZCIKKyAgICAgICAgICAiNjUyOWYyOTIxOTJhOTY4MGJhOTYzZWRhOTM3NDAzN2FiOTUyOWE0ODZmMzVjYmQyOWUwOWVhOThhNTA0NWQ5ZSIKKyAgICAgICAgICAiMTZiYjg3NzAxNTVkNzBhZmQyMTdhMTQ2ODYyNzQ5ZWMxYWQxNTljZjZlNmE2M2RmMTQyYjgyNDZkODQ0YTczNyIKKyAgICAgICAgICAiMmQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuMyIsCisgICAgICAgICAgIjIyYmJjNjE2ZWM2ZWYzNTczMTU2YjQxNzYxYWMzYmRiNTdiZDliNzAzNmVkYzlhNjk3ODg3NWUyYTYxNGNkZTMiCisgICAgICAgICAgImVmZWRhZmQzODg5YTVkYmRjYzVmYWQ5ZTliZWNmOGE4YmI4MDMzZmY5MWRmZWQ2MDRiZjhjNmU5YmJjNyIsCisgICAgICAgICAgIjNiNDdkMmNhOTU1NGIzNGY5NDI5NTc4ZDRmZGVjNWQ5NmVjYTg5YjY4MTcyZDFkYjEzNTZiM2RhN2E2OWYxNTgiCisgICAgICAgICAgIjRkNGM4NDZiMTg0MzJmMDJmMjU5Y2FkYzI0ZTE1NGZmMTVmODA2ZjI1MzQzNTAwZTEzYjViZTQzYzdiNWFlN2UiLAorICAgICAgICAgICIwMGM0ZTZjMTBjMjU1ZTRiZWIyYjMxYzE2NTY4NDZiOTdjYTIzYTNiYTMyYWIxOWM2NDg1MjAxMTNkNzAzNGRmIgorICAgICAgICAgICJhNDZiMGNkMjNkNzM5OWE5M2NiMDJmMWViYTk0ODMxOGUzNzkxYzMwNmEyZWI5YzBjNTZkOGY3ZTgzMjUwZjgzIgorICAgICAgICAgICJhZDQ5MmZhZGY3ODMxNzY5ZjAyZTE4MjQzNDc0NDVkMDQxOWI5OGI4ZTc5NTQ1NjUzMjMwMGI5MmQ2ZTQ1NWI1IgorICAgICAgICAgICJhNGViYTg1M2Q2Zjc0NTkyOTBhYjAyMzE5OTQ4NTNhOGMwN2U1NGY1OWM2MjQ1MzcwODAyODlmOTMxNDNlYmM2IgorICAgICAgICAgICI2MSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC40IiwKKyAgICAgICAgICAiMzE2Y2M0NDUwYTUzNzAzYzA1OGM5MDFmNTA3ZDdhZDBjYjYzOTZjNTUxZDRmMDYxODJhYmQzYTQzYWFjYmFiYiIKKyAgICAgICAgICAiMzE1OWMwMjZiM2U3ZGJjMTYwZjQxOTUzMzE3ZTBmMjA4MDhjIiwKKyAgICAgICAgICAiYzFlY2IxMTY0YjNlNjYyM2YwZDliOWM1ZWJmOTllNzg4YjdiZDk0ZWI3NDM3NGY2MWVkMzE0MzA0Y2FmNDZmOCIKKyAgICAgICAgICAiNGEzZmVhMWJhMGU0N2ZjOGJlNDE5N2QxZDJjZDQxNDFjYjlhNjE1ZDg5YzRiZDkxMTBjYTZhYzlhNTYwZjA3NiIKKyAgICAgICAgICAiZWJlNjliNzRhMTBmZTljY2RiNzZkYWJkIiwKKyAgICAgICAgICAiMDYxNmI4YmM3NzJjNTU2NGQ0NTFiMTI4ZDliMTM2NGM5ZTMzYjZlNTU4ZWM2N2YyMTA1Yzk4MDAxMTdkMGI3MyIKKyAgICAgICAgICAiY2NhYjlkYjUxZDk2N2E5ZDY2MzIyY2JjNWEwMTc0NmU0NzMxZGQ3ZDA0ZTYzNmU2NGQzNWYyYzg2Y2EzOWQyNiIKKyAgICAgICAgICAiMTQ5MjE3NmI4ZGFiZGIxMzRiZTk0YmU1MWI2YzAyM2EwZDU1ZmNjMWYwNGM5NGM4NmQ0NzdkYjQwM2IwNGZiNiIKKyAgICAgICAgICAiYzAyODUwNTcyNDc5Mzg0MGNiZjQ2OGFhYWE5MWJjNTRlMGQ2NDc3Y2U2NDhjZWRkMTI3NmYyYWQyZDRkNDIzYiIKKyAgICAgICAgICAiNmMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuNSIsCisgICAgICAgICAgImQ1NGVhMzdjYmZiZGI4MTgzYjNiNTQ3ZjZkZjJkNWQ2M2M0MTViMWM0NGVkNjM5M2M2OTdiNGQ5M2E5N2ZhMGQiCisgICAgICAgICAgIjJmNGQzMDBhNjhlOThmN2ZkMDQ2MDcwMWQxNTc5ZDk2ODM2MTJiIiwKKyAgICAgICAgICAiZDFjZWIwYzA3MmQ2ODg4ZmE5MWE3NTdjYmY1MGQ2Njk3NmJiYjcyZTYxOTQ2MjYxNGQ1ZGVjMGZjMGJiY2FiYiIKKyAgICAgICAgICAiMDcwNzg5YzJiMDg5NTA5MWI4ZmE5YzdlNzVhYjIwYjg5NzU4Zjk3ZmQwNDdiYzQ0YTU2OGEyNjEyZDBkNTAxZCIKKyAgICAgICAgICAiMTVkNGZiODJlNzc1Mjg3OTY5NDlmMyIsCisgICAgICAgICAgIjAzYzEzOGM3OTE5OWIwYjE3MDBiYWIyZTYzZTFkMmEwMDMxZWY2MDJmN2RkZjFlZDNhMTYxYTVlNzBmMTY0NTEiCisgICAgICAgICAgImRhYTEwMWY3NGNkZDY1NDdhN2M2NTJjNzMyOWJiMTczN2ZiMTRjMWNjMGMwYzNlNzYxMmFlMjBlZTAyMWFiMjEiCisgICAgICAgICAgImQ3MGJmOTUxN2I0ZDMzYTlkODA5NjEyZTdmNDI2ODg1Yjc5YjMxMmUyNjZlNDJiMjAyYjU3MWM2NmY5YTEwN2IiCisgICAgICAgICAgIjhmZDdjNTZjMDUwYThlMWViMTg5NTZkYjA2YTAyMDlkZDE2ZWYyZDkwNTI0ZGI4NzkxN2YzNDAwNmJlNmIxNWEiCisgICAgICAgICAgIjEzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjYiLAorICAgICAgICAgICJmNjRiMjUxMWNiZTNjYzY1ODEiLAorICAgICAgICAgICJkYWNhMTk2M2NiM2RlNTI0NTc3OWU5NjQ3N2ZmZGEyNzdmNGI5MjNmYTlhOGQ5Mzg1ZDUyMzE2OTIzM2Y1ODc5IgorICAgICAgICAgICJhM2M5ZmM3YTM4ZTFiMjA4YzMyZGU0MGJiZTFkYTA3NzQ3MWU2MWM4YjliNzA5M2M0MWIwYTY1Yzk5NjQzMmQ2IgorICAgICAgICAgICI0NTUyMTE4NGE2NmFmY2I5NmYwN2E4ZjhlZWJiNmVmODE3ZTAyN2VlMmYzNzk1NDUyMzllZjZmOWMxZDBkODYwIgorICAgICAgICAgICJlODIxNDRlYzcxNTk3ZjI0NmE4M2NjZjY2MGVhNGM3MGVlMWRmMDE0ZWYiLAorICAgICAgICAgICIwNTA4ZWQ4NDVjOTYyMzhlM2EwN2U4ZWMwMjdmN2IwOThhODNmMDNlYWMxZmVjNDI2ZjRkNjAwNWI2MGQwNzM1IgorICAgICAgICAgICJkYjA1MzcwODJmMjNiNzUwZjZkYjU0ODgyMTQxODFlMTE0Y2YxZjcyMDc0MTljYTI5Mzc1MGFhNzY2ZmE3YTViIgorICAgICAgICAgICI5YmUwMGUzNzI5MmMyMzIzMWM2YWIzYmUyZGVkZWVkMzIxYjBmOWNkODMyYzVlZGI0MTY3N2MxYWI5ODNlN2UzIgorICAgICAgICAgICJlYmM4YjUxOTkzODIxZDc2ZGYyYWMyMjk4ZDhiODBhYjE3YzM4YjM4NTNmMThmZTMwOWNjN2JmN2M0YTJjMjdkIgorICAgICAgICAgICI2MyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC43IiwKKyAgICAgICAgICAiODUyNjQ5MDE1MjA2ZTJhNDA5Nzg3NmY4YWJiOWI4NDYiLAorICAgICAgICAgICIwMzRmZTM0ZTIwZTYwNmE4ZGM3Y2JjZDBkNmFiM2UwNzk3YzVkYzRlZDc4NjhlZGM3OTU5ODkzZTU4MTM3ZDI2IgorICAgICAgICAgICIzMmIyYzVhMjlhODEzNWMyNGFmNjk5YjU5ZDY4MTAzYTFmNDIzMzkzZTM4ODZlM2ZhODU0ZTM5NzIxNTAxOTQxIgorICAgICAgICAgICIzYWYwYjBkNGZiMWJkNjliZDQ5MzRkNGQxZTJlOWYzYjllN2M0NmQ0OTg0ZmU5ZTdhMzdhYjJmMWM3OGIwYjhkIgorICAgICAgICAgICI5Y2Q4ZmFiYjNkMThkNGM1MDZlMmZkM2Y4NWFlIiwKKyAgICAgICAgICAiMDE2ZmJmMmE3ZDM2ODA3MWNjN2JlNTk0NDkzNTRiOWRlMDVhODVlMWJiOTdiMjUxNGI1MmI4ZDFmM2UyNjk5NCIKKyAgICAgICAgICAiZTEyY2ZlZGE1OWUwNThhMmYzYzg3OTIzNTBjMDY4NDE3Zjk5NDQxYmZlNzQxN2UwYjUzMTZlMTYzYmE4ZDFmOSIKKyAgICAgICAgICAiZTMyYzU5YTQ0NDk4ODJmNDdhZDliMjRmNjg3NmQ0NzhkM2Y1YjdkMjc1MzU3M2UzZjY5N2JmNjRjN2IzYWMyMiIKKyAgICAgICAgICAiMjhjZTY5ZTc1ZThlMTRhYjkzZjIxOTc4MDU5YTE0M2I4NzdjNmRkNDIxYjZlMjBiMDczNWE1MzYwNTU1MmFiMCIKKyAgICAgICAgICAiYTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuOCIsCisgICAgICAgICAgImY0ZmI1MGJlYWJlY2JhNzdlNzFkZDhkMTZjOTc1YTg2ZjYxOWVhN2RiZjQxOTY5YTI0YmFlMmI4NDJjMjY5ZTAiCisgICAgICAgICAgImI0ZDZhMjllODI5ZGJlMmU0OTc5OWM5ZWQ5NzFhMzAzMzVlNmVkOWJmMzlkMTI0YmUwZjgiLAorICAgICAgICAgICI5ZGJkOTJkYWVlYjgyYmRlODE2YzU5M2Y3MDZiMTU5MjU2ODUyMmJjYTA3OTdmOWU4MTFkZDlkYzBlODk2ZTk4IgorICAgICAgICAgICI0YTRhOWFjZTc3ZGVmNWE5MjUwZGI3OTU4MWFmMzNmYjZkZTI0MjdkMWFmNmE1ZjY5MjlmYThiNjdiYWQwMjNmIgorICAgICAgICAgICIwNGIzZmZkMiIsCisgICAgICAgICAgIjAyOTJlZGZiYWMzOGUyMjI0NTQ1YWY4Mjg2MjMyNzYzYmNiMThiYWUxMzcwOTc5OWUzNTA3NzU4ZDAxNDFhYzIiCisgICAgICAgICAgIjk3NmYzMGI4NTQ2N2Q3ODNhYmY2ZmM3MWRmNjE5ZTFhNTllNjIzNGYyN2I2MzJmZWFhYmZkOTg1MzM3NzM1NGQiCisgICAgICAgICAgIjkzM2VmNGVjNTk5NGMwZDUwZDk1MmUwZWNlMGJlMWJlNGQzOGYxMWY2NmU3YzNkYTg4YzgzYjRiZWRjYzA2MmUiCisgICAgICAgICAgIjA5ZjlhZjk1ZWFjYWMwMDk5YzUyNWYyNDFlYTdkNTY1ZTFiNzY4Y2I5NzA4ZjNiY2Q1OTE3N2I2NzY2YTM3MzQiCisgICAgICAgICAgIjg4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjkiLAorICAgICAgICAgICI3NjkxM2U4NDhmYjdiOWZhY2E5MWJhZjRmNDQyMDEwNmE5NGQ2Y2UyNWQxNDk3ZmM0ZTdmODU5NjU0Nzk1ZDdmIgorICAgICAgICAgICIyNDM5OWYzYTEyMDhhZjAyOGU2MTY3OGE2ZDE5YTE4NjQwYjRkNTBmNzU1NTg2MDAiLAorICAgICAgICAgICI5Y2VlYWEyNjA5YmE5MGViNjFlNGY3NDljNGNkYTAxYWVhMjM2ODgxNzYyZGZjMTUwZDk3YzExZWI2NDQwY2IwIgorICAgICAgICAgICI1N2U1M2MzZmQ5YjM5ZTU2MGE0NmU5ZDNmYTNhZjNmZWU1ZWUyZDAyZmE0MjQ5YWY5OTk4ZjUzZWQwNGRiMDEwIgorICAgICAgICAgICJlOTZkOGEwMWZmNmIiLAorICAgICAgICAgICIwMTk2MzA4OWMzNDNlZDg4YjU2ZDZhY2ZlZmJjNjU1YTM3Y2NmZDk2MjAzZjIxODc2NDY5NWFkMzEwYzBiMjY2IgorICAgICAgICAgICI2NWVlNzQ1ZWIwMTBmYzgzYmU4YzIwNjQ1YzQzNDdkY2Q5NDQ2NTVkOWZlNmNkOTg3N2RjNzBlNWMxODhjZmM5IgorICAgICAgICAgICJhNjZlNzFkYTc0NWNkM2UxYTdiN2Y1YTFiMjViNGZjMTQ3MGFkZmJmN2Q4ZTQ1ZmIxMDdjNWFlYjUwZWE4YjU2IgorICAgICAgICAgICJlMDRjYTU1YjliNjUyYWQ4MzRkOWM5NjU3N2I2NDJlZjMzZjE2NGQ0OTMxZmI4OWUwYzhjNmJmOTE3MDhmZGE2IgorICAgICAgICAgICJkYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC4xMCIsCisgICAgICAgICAgImMzMzlmODU3ZTRkMDIzMWZhMzdjMDZmMDk1NmI0ZDUzYTZjNThlMDYxMGQ4ZGE0MzE3ZGM4NDExZDNhMGY4OTgiCisgICAgICAgICAgIjQ5Yjk0ZThkN2NjZGIwYzdkNTMzMGMyNSIsCisgICAgICAgICAgIjI0OTA4MTZhYzk2OTc2Y2E3MjVlYjQ5OGUyZmYwNDBhZmUzZDY0MTdkMzJlNGZmYmQ5ZmM5ZTNmYTY4Y2U4NDkiCisgICAgICAgICAgImM4ODFiZTM3OWYxNzUwNGI5N2UxZTBkMjJkMzJmZjhkZmU3NmJiNDU0OWY3MTNiNWI4ZDg3MGVkMzY1OWRkZDMiCisgICAgICAgICAgIjk4NGI2ZmIzOWY2ZWJkZGMxMTc3YWQ2OThkOTA0NDM5NjhhYiIsCisgICAgICAgICAgIjAwYjVmYjdiMWU5ZDcxZGY4YjE2YzYzYTFhNDk2ZTZmN2JmNzcyODY0Y2I0MTE1NTJiNTBlMGI3ZjE1ZTQ1OTciCisgICAgICAgICAgIjE2ZjU2NDYyNDM2ODc2MzNhOTEwNmMzNDZjOGM2YjdjZmFjNzUwYjQ1NjZiMWI4OGFhYzBhY2I5MTZjMDdhNzgiCisgICAgICAgICAgIjBiZTA2ZGY3OTc1Y2NkOGI3MjYwNzg2ODdhOGVhNWQzOTAzZTA0YWIxZDIzZGM5YjFlZDM2MDAwYzliYmMzZGMiCisgICAgICAgICAgIjgxNjFlOTQ4M2ExOGFiYjg2NDFlYmIxZmRkMDI2NmMwODRiZjBiZDA5Y2M5NGVlYmI5MjgzYzVhNWY3NGUzNjAiCisgICAgICAgICAgIjEzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjExIiwKKyAgICAgICAgICAiNDc1ODY1YTU3YmRiOTFhZGRmNzc3Y2M5ZDBhMTdhNzFhOWY5NzEwYTkzMWJkMGMzMTQ5YjIzOTFhMzUzIiwKKyAgICAgICAgICAiNTYyZjc5NzA5NDZhYzRjZjA1ZWRmYjI2MzQxNjdlMTRkNjY1OGQyNGNkYWVmNzViNDA3YzkwMDQ4MThlZmE3NSIKKyAgICAgICAgICAiZDE2NDVlODE1MmQxZmM4MGQ2OTlkZmU5OWEyN2E3ZGY5OTdhOGE2NjQ3NWFhZmNlNDE5NTk4ZTJhMTkxOTlmYyIKKyAgICAgICAgICAiMjA1M2UzYWNkZDA3ZmVjOGJhNjFmMmIwM2VmYzdkZWVkODE1Y2RhODk1MmUyMWUzYzBiOWE5MzUyYWIzNmY1ZSIsCisgICAgICAgICAgIjAzZTI2OGQ3ZDE4MGQwM2M3Y2JjODUwN2VkMWY4MzBlZDM3YTc5OTU3MTJkN2Q5MTU3MzIyNDNkZTY4NWQ1YmQiCisgICAgICAgICAgIjk5YTE0YThlODZhNjdjZGQ2MGRjZDkwYzMzOTIxMDgzNWE0NmNlYWMxOTM2YWIzYWE5YzM4MTg4MmQ3Njk0YTgiCisgICAgICAgICAgIjM4M2Q2ODk4ZTI3MzQ0YmQxNTZmZTkyODJjNzEzMjI2MjVkNjhkMzA3MGVmZjAxYWM4ZDU5NWY2NDg2ZDc5YjciCisgICAgICAgICAgIjg4ZTM2OTEyZmQzY2NmMjg0ZWRkNWZjZWUyNDA5ZGNhN2Q0ZjI5Y2MxODJhNzg0NzhiZDNlYTIzNjIxMTI1MTAiCisgICAgICAgICAgImE1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjEyIiwKKyAgICAgICAgICAiOWUxZTUzZjk4NjU5OWRhODk4ZDU2ZGMxYzc1NTZmZWZjYWEzMzk1ZDg0NTBkNTJiM2JhNyIsCisgICAgICAgICAgIjBiMTc2M2NjMzQwZTZlMzk3ODYyNmEwNmQ2ZWZjNDBkZWQ3M2RiNTM1YTgyMmVjMDRjOTkyNGQ5ZWM0MGQzODUiCisgICAgICAgICAgIjIwMTVkN2UxMDI5YzEzOTNhZGNmMDE1MDMwOGFjYjI3M2MzNjM1NjgyOGE0NzdmY2Y5YTI5YWNhYjkwOTM1NzAiCisgICAgICAgICAgIjQyNTAyNmRhYzE0ZGE2Y2QzMDRjZGFhNTRjOWE0YzVhOTk0ZWQ2OGE1Y2VhYzdlMDgxZGVjNDY0NmUyMzdlNDciCisgICAgICAgICAgIjFlNTI1ZWY4IiwKKyAgICAgICAgICAiMDZkNTE5YTczMGVhNWY1NDlmZTE5ZTMwMWJhNTE1MmQxMDNhM2VhZDNmODlhYjM1MTZmZjdiMzQ0YzRmNzJhMSIKKyAgICAgICAgICAiYzI2YWE5MGQ1YTAxYTJhNjUxOTNkM2NmNjM0MWU1OWEzMWZkMmQ3ZGZlNDM1YzA5ODRkMWJiZTgxMTMyMDEwZiIKKyAgICAgICAgICAiNDM1OGVlYmZlODNmYWYyNDFlN2YzNWFmOThiN2M3YWI5MWU0ZjBlOGEzMmEyZjU3ZjA3ZjQ5ZDVjMjFmMWUxMyIKKyAgICAgICAgICAiODBiYTBlMTc5YTM4ZDNhMmNhNDY0ZmMxNGQyYjc0YTAzYTg4ODRhYTg1N2I2NjAxNDcwMmIxYmM0ZTdjYzVlMSIKKyAgICAgICAgICAiZWIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuMTMiLAorICAgICAgICAgICIxYWUzMWUwY2JlNDQ5N2JhNDNjNWQxNWY1MzVmZTAxODg0MWM3MzE0NTc2N2E2YTRjOCIsCisgICAgICAgICAgIjhmZjBmYWE3YTJiNGZmNTUzY2NiYjIwZmYzMTBhYzVlMGVhOTI4MTg1NjJlYzlhMDYwNjRmNWRlNzk4NmI0ZjYiCisgICAgICAgICAgImM5YWVhMmI5ZjAxMTQyMzhlNWE0OTlhOGFlMjBlYWU0MDIxZmNkZDhmMDYwYzk5M2E5YmY2NDJkYTAyNTY3MzkiCisgICAgICAgICAgIjMzNDgwOGUzODhlMWRhODIzNzI3OGJmNGY0N2UwNTAxNWE4Yjg4YzU0MjBjZWJjOGJiMzdlZTQzNTI4MzdhZjciCisgICAgICAgICAgIjY0NzAxODQxOTciLAorICAgICAgICAgICIwNGEyMTBmNzZjMGY4NDkzOTkwOTUzNTg5ODg2ZjYyYzFjNDgyNTAxMmFmNDRiZGNmMmM5OWIzMmE3MGExN2Y3IgorICAgICAgICAgICI2NGEzYTk3YjJiMDQ3ZTM5ZDgwY2RlMTU0ZWJlZDVkMjgxM2VlODRhYzljOGQ2ZWM2YTk2ZjQwMmRiYjMyNmQ1IgorICAgICAgICAgICJhNmU5YzBmNzg3YzE1ZTk4MjNjNTA4YjMyMzVmM2EwMDhkZGRjZGRiMDc5ZTgwZmY1MGZlMzcyNTRhMGNjNDY4IgorICAgICAgICAgICIyOTdlZTMzMjUzYTc0YzFlMDM3MDI2MDU2OTU4YWQwNzc4ZTBhYTEyNTBkZjFjMTQ4NTdjYjBkNzFhYTY5MzdlIgorICAgICAgICAgICIzMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC4xNCIsCisgICAgICAgICAgImE2ZTNkMTA3MDMyMWQ4ZmY3NmI4NWM3MDkzZmFhMDQyODMiLAorICAgICAgICAgICJkMTYwYjEyYzc2NjIyYzNkMzRkODU1ODdlNmU4MWNmMDU0NjE4YTM0NmI2NzUyZDUzNjlhNzFjNDkyMzU3YTEzIgorICAgICAgICAgICI0YjdmNjdmMzM0YTRmM2IzMjhiYWE5ZjAwNzE4NDdkMGRhZmRhYzIyNWQ3YjdmMDcxNjE4ZWE4NjgxZmNkMmQyIgorICAgICAgICAgICIzMDVjMmY2NDYzMWU2MjMxODVmYzA5OTZlNjFjODRmNDE4MGM2MzdiZjZlYTJkMDYwMzc1ZjE2YTY1ZTViMWUyIgorICAgICAgICAgICJiODY1Mjg1ZGEzZDhmYjFiNmE2MGVhMzZlMSIsCisgICAgICAgICAgIjBhNzAwM2I1ODYxYTg1YThmNzJmMTk5ZGM2NWMxN2ZjNThhOTI0YmNjNDA4MTllMjhjOTU4M2U4MjEwMzhjMDAiCisgICAgICAgICAgIjA1MzY1ZTkwOWVlZTRmMzI2NmY1OWE4NGUzMjViMWJlYTlkMjgxYjQ4MjNmMmZjZTQ0MTUzZjAzMTcwZmFkY2IiCisgICAgICAgICAgIjE2YTI3OWIyYzk1ODdmNmI3OWVmZmM1NWEzYzQzNGUwYmM1ZGFmZTlkNDAzMjY0OGFhZTdlNGVkMWQ3ZjE0MWIiCisgICAgICAgICAgImZlNzIyNjgzZmEzMmM4OWRkZDY3M2MzZjBjMDNjODU0NTk4OTBhYjdmYmMxZDlhODE0YmZlOWIwZDEyYWIxN2YiCisgICAgICAgICAgIjUxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjE1IiwKKyAgICAgICAgICAiZDBiYzg5MDM5YmExOWVlNTBhNzM4Mjk4NGU0MjhhZWQ4ODYxNGY3ODk4MTMwMTg5MTZlMmU3ZWIwZGI4M2RhMiIKKyAgICAgICAgICAiOGVjMjNjMDRhMGMyZjc2YSIsCisgICAgICAgICAgImM2NGQxMGE0YjUyZjQ5MGFiNjJhNjAzOGIzMmIyM2M2M2ExYzg1OTcwZDkzNDUxNDgzOTRjZDM1Y2ZkNmY2YjEiCisgICAgICAgICAgIjU5MGZjZThjNjc1YmVlZjg3Y2QwMzQ1ZTVjYWRlODk1MDk0NTU2NTQyNmI2YjI4MzAzYjBiMDM5MzI5OGNkZDkiCisgICAgICAgICAgIjVjODgxZmEwNjUzM2NhOWQyZDI3MTRkMGYxMzc4NWE2MWIzYTE3YTc4MTQwIiwKKyAgICAgICAgICAiMDA4YjE5NzU1OGNhNGNlNTkwMTQ1OGFiZDhlOGZkNTJkOTg5OTYwZjAxYzIxNmVmYjU4MWY4NjExNDhkMWEyYiIKKyAgICAgICAgICAiNDRlYjBiN2MxNWRkYzM0NWRjODNmOTAzN2RkYjhmZTJlYWEyY2JlZDliMWMxZWVlYWViODY1YmQyOWY0NGVlMSIKKyAgICAgICAgICAiNDc4Yzk1ZTlmYmY0NDQ4MjhlZWRjYmMwMTcwMjAwZGUzNTQ5YjIyYzExZTRiNDMzNzk4YjlkNjNiYjQ5ZjBiMCIKKyAgICAgICAgICAiMmRhZjU2NThjZWVkZWFhOTNjMGZhZWI5NDQ2NTM4YmE5MmViMTdjODVkYjVlZWEyMDRiYTJmNDljM2NlNjViZiIKKyAgICAgICAgICAiMTMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuMTYiLAorICAgICAgICAgICJjZTBhNGE1OTM5ZjZhYTI2M2JiZjhlMWU1ZTk0MzEwMzU2YWJhNTc1NTljNDFiMzk0NDI3NzBiNjFmNmIzYzliIgorICAgICAgICAgICI1ZmU3MjdmMzE5NTIyODA4ZDU4MDE5IiwKKyAgICAgICAgICAiMjdjY2UyZDQzYzcxMzE4ZWQ0ZmM4YzBiZGI5Yjc5MTM1MzE5OWYzZDg5ZmMxMmFjNDdmZGI2ZDg4YjQ0YzY1NCIKKyAgICAgICAgICAiNWU5ZWVlZDlmNGM2ODUxNWQ0ZjUzMGI4MTM3ZDc3NDU3MTNiYWQwZWJiNzA1MjIzMWY2YjRjZWQxODdhZWNkMSIKKyAgICAgICAgICAiZTdhMTY5ZDg2Y2JkMTNkNTBiNzhiZTI3YzY1NDVkODE5MmUwZWMiLAorICAgICAgICAgICIwYWQzYWU3ZTVhOTg2NTJjMWJmMzQ1YzQ5MTkwM2Y1NTE3YzYxMWFjMzEwMDA1ODc3ZmE5MWFiY2VlNjQ4NWYyIgorICAgICAgICAgICI3NzhhYmYwYTZjNzM4Nzg3Mzc2MzliMjY3MmZkZDAwYTM5NjVkN2QzZDhkNzY4OGU3N2I1NDU5ZTE0NWVjZTY0IgorICAgICAgICAgICJhOWE1MmMzNzk3ZjM2MTA3YzkzNjhiZGY3OTkwZjNmYjZjNWNmZjU5ZjRmOGEzZDQ5MDkzZGZmZTc0MDZjOTEwIgorICAgICAgICAgICJhYTU3MjMyMjhkYWU1YTliMjlhNGNjNDc2OWFmOGJkNWZkNmVjZTg4NThhMjlkYjFiMTljMDgxYmYwZDZiMGRjIgorICAgICAgICAgICI3OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC4xNyIsCisgICAgICAgICAgIjAzYmZiMjU5YmQ5MjQ2ZGUzZjcxYzMxMzljNzI4NTc0YjQ0ZDk3YWQ1N2JiZGQ2NzAxOTQ5NWMyYTIwMDQxMzkiCisgICAgICAgICAgIjI2MzRlMzFhYWQ2M2Y2M2IiLAorICAgICAgICAgICI1ZmE0YmJiNzBlMWY5ZWNiNWViMjE0N2JmNDU5ZDFkMDY0NDNmMDI1YzA4ZTM2NGNjYzFiMTYwYzE2NDE2ZmIxIgorICAgICAgICAgICI3NGI0NGI5NTM2MzhhOTY4OGM1ZWEyZDA2MDE3MWYzMDU0ZjNjYTNmZTAxM2I5ZTMxODhlZTM5ZGE5MWY4MDE2IgorICAgICAgICAgICJkNGI3MzMxODc5MzUxZjMyMmFlNTI5ODY0ZDkwNzQwOThhYTI1MTZiNDRjYSIsCisgICAgICAgICAgIjAxNzhlM2EwMTdlZDJmYzExOGJiMmUwMzI4YmViMjhhOThjODUzYjllNWE1ZjgzMDgwYzBmMTAxN2ZkY2E4MzciCisgICAgICAgICAgIjkyMDc3MjJjMjU3MzdhODkxNWUwZWI3MmM1MjI4NWU4OGY2MTMwYTFjZjU2YWQxZDk2Y2EyY2U0YjcxZWMzNjgiCisgICAgICAgICAgIjk0N2JkMDcxZjgzNjU5MTBjNzkyNTc1YjhjZDZmZDI3ZTUyM2U4NTk2NWRkYTkyMjgyZDVkZmQxYzA2NGVhYWIiCisgICAgICAgICAgIjZhYmVhYzY1ZTE2YWUwNGYwZDQwYjNiYjY4NDEwYjkyNzRkZmVlYTMyYTQzZjk0MDgzYzEwNzgwMzUzZjQzZTQiCisgICAgICAgICAgIjNjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEwLjE4IiwKKyAgICAgICAgICAiMTYyY2NhOWVkNDcwOGRkMTAzNDBlMTk0YzM1YzBhNWZhNDlhNWMzYjViMjQ3MTcxMjAzY2E0OGE3OWU1MmRmZiIKKyAgICAgICAgICAiNDBmMmJjYTk5YSIsCisgICAgICAgICAgIjRkNzNmZmNkYzI2OTQzYTg3MDc4MjM0NzhkYTMxYWFjMDEyNzRiMTcxN2M1MGM2YWQwYzYyZWUyYmNkNTU3OTUiCisgICAgICAgICAgIjJlZjEzZjE1ZmZhZjY2YmI0ZjQ1Mzk5OTExYzZkNjVhZDE4NzU3MmJjMWViYTBkMjg2Y2M0NWFhNDkzMmU3M2UiCisgICAgICAgICAgIjQ3MGM1ZGM4MjkzOTA0MDI1Yzg2M2ZiYzk2MjIzNzA0OTBjOTFjODc0MGIwOTRkOGYwIiwKKyAgICAgICAgICAiMDQyYmNlMGRmY2VjYTlmZjA1YTZlM2Y3NGE2YTcwY2RjYmUwZGVjODFlZGRjODhlNDY3ZjQ3YmI3NjBkYTQ0YyIKKyAgICAgICAgICAiNzk0ZDNjZGNhYjkzOTI0OWY4NDlkMWQ0Mzk1NjY0MWIwYjc5YzY4NjFjNWY3MTViOWQ4ZDhiZTlmMDc2NmFkYiIKKyAgICAgICAgICAiM2YxOGFmN2RiMzZhZDk1ZmZjZDdlMGZhYzE2Mjg1MjNlOGY2OWFkZWI3ZmY1MDk0YTJiNWJmOTJiOWQwZWZiMSIKKyAgICAgICAgICAiMTE4Yjg1MzkyNjI1ZmQ1NmY4OGZhYTBhMTZkNTQ3MzBmYmM1Y2FmMTY2ODJlOWU0MWI3ZTc5ZDIwMjJmN2NjZiIKKyAgICAgICAgICAiOTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTAuMTkiLAorICAgICAgICAgICI4ZTFiNTJjYjRlMDA3NzI3YzRiNWY2NWQ3ODQ3ZjM0OTE2ODkxZWY5YzczYWQxOGNmMjcxZjg5ZjE4MmM2OTNlIgorICAgICAgICAgICI1Mjg5ZGMzMWRhYmMzNGNmN2Y0NGZiZGU1NzllNjQ1MTY5ZWNiYTZlNGU4NzdmN2RlZjQ0IiwKKyAgICAgICAgICAiYmExNDc0OGU2ZGE3YjZhYzE4MzMzMjMyOTVhZGI1NDIyZGJkMTllMmVjNzJkZmQwYWFmZDdiZDA3YmZiOTdlNyIKKyAgICAgICAgICAiZGIxMDhhM2VhYWRjZmY2N2I2N2VjN2U0YzY3MDA0YzE3ODM0NmExMjVkZDNiNmNhNTUyMzcwNTk0ZjdmNDJjYiIKKyAgICAgICAgICAiMzM0YjQ0ODUiLAorICAgICAgICAgICIwOTRiNDAzMGUzMGM4YjQ2MmVjYTAwZjE2YmIxNzAxOWQxZWEzMTI1ZjFjNjRjNjcxY2IwMGQ0NmUzYWQ4Nzg0IgorICAgICAgICAgICIyODUyYjIwMTQ5NmVlMmIzZDU0MjI4OTNhODBjNjZhMzBkYTJjOWYxYTMyYWQ0ZDRlNzczNzc0M2NhMWI3OGVmIgorICAgICAgICAgICI3ZDRhNjNjNWUxZTBiZTdlNTE4OGNjZTk0Mjk1Njk3NGZmZDQ4MWU2NDc4MzQ0MjMwYzM3ZGE1YjI1ZjZiNTk5IgorICAgICAgICAgICJhNTlhMDU4MGYxYTAwMGMyNTk1NGYzYTQ2M2YyODk1ZjMyYjA1Y2MwODgyMWIxYTAyMzYwOWYxOGNhN2Q0NDljIgorICAgICAgICAgICJiNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMC4yMCIsCisgICAgICAgICAgIjgyZmY2MmFmZmFkODAwMzA5NGNjNjUzNSIsCisgICAgICAgICAgIjFjN2YyMWZkMDIwOTc5MDc0MDVlYWE3N2FlNzI4ODY1NzIxZDkzODZmNWFhYmMyZTBhOTVmM2VkYjA1ZDQ2ZTIiCisgICAgICAgICAgIjMzNzkzYmExYTM4OGU0YjBkZGEwMGNjMzJiOTQ4YWMyNjVhZTZhMmJmMmMzOTBhNGRjY2UxMTBkNWU4NjY0NDciCisgICAgICAgICAgIjI4ZjUzNzgxMzY0NzZjZjcxZGM3YmFhYzUwY2M0MWMyMDE0OGRkMzdkNWY3MGE4MTJhMjk0ZTI0MmRlODAzYjQiCisgICAgICAgICAgIjhiNjM0MGY0MjhkM2M5YmNhOTZmNzY2ZmM0ZjQ0MTY3ZTA0YSIsCisgICAgICAgICAgIjAwMzAzYzM1MmUxZmRkMmFmOGE4ZTNhMTY5YjVkYWM1NDM0NWNhYTMzNWE3MWEzN2U5MzhiZjk4NDcwODg2NTYiCisgICAgICAgICAgIjg0MThhZTk4ZDBhYWRmZTc5ZDBjNjUxYjNmNTE2ZTcwZjEwMTc0ZmU2MzIyY2QzNzZkYTAyZjIyNmQxNWIzNmEiCisgICAgICAgICAgImJmNmQxY2JkYWI2ZGQ1NjU0ZDk5MjVmNzI1M2NlOTkxNTEyYTQ0ZTlmYTE1MjcxMmQ3YjhkYjdmMTgzMzc1ODAiCisgICAgICAgICAgImZlNTFkYzMyYTA1ODJjZTI2MDUzZjFiOTQ5Mjg2OWI5YzQ3ZGY5MjgzOWMwNTAyZjJkYjRjYzRkMGIyMDRmNmYiCisgICAgICAgICAgImQxIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI5LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjExNjU0Nzk0ZjQ2NDlhOTdhYzg3ZWY2Nzk0ZjZhNmZmYjVjZGFiODcwMmMyMzI1NGZkZTAzNGYzMTI5YWFkODIiCisgICAgICAiNWNmM2MwY2MzODgwYTk2ZmI2NGU0OGQ3NTk1ZWRlMDZjMzFkMGFjYmQxZjhlZjljZDFmOWY2ZjAwYjI0YmE1MyIKKyAgICAgICI0NWFiYTE0NmQ0MWM1NjNiYWVjZTNiMjUyM2RmNmE5ZjQzMDE4YTVmMDg2OWI2ZWM5OTM0Njk4ODZiNWQyMzE3IgorICAgICAgImQ1OWNmZmQ0ZWRlOTQ2NmEwM2Y2ZGZlYzE3NWNhZDVhODU0NDMwOTVjNzMwYjk4YmJmYTA0ODliOTFiYjI3MzkiCisgICAgICAiOWQiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMWQ0YzRjNmUxM2RhYjI4NDZjZTY4NWQwYzQ5MzUyNWJiMGFkMzU2MjU5NmRiOWFkMTY5NDVkNDQ1Y2U2N2M1NCIKKyAgICAgICJlOTM4ZjY1NDU0MmIwOTM0NDgwMjkxYWMyMWFlZDA5OGU4NWFkNmZlYzZkMGZlMTU0YzNjMzQyYjE2OTk5YThjIgorICAgICAgImVjZTdmYWY5OTBiN2M4Y2U4N2I2NmZlMzI3ZmIzNTJlZDAxMTMyM2QyYjgxOWEzNmNhYmVjYzVhYWU3MjMwZDMiCisgICAgICAiZjhlMDAyNDVhZjM1YWY4MDg4NjJlNTRkOTI1NjA3ZWU4YjU4ZTZhOWYzYWQ4ZmE3MjhmY2UyNjg1NmMzNjdiMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjEiLAorICAgICAgICAgICI0ZWE4ZGZkYTNhOWMyNjcwY2E5YjgwZmE4OTcxMGEiLAorICAgICAgICAgICI5NjA2NDIxYjk3M2FiNGJhMmFlMjJmZjUzODcwN2Q3ZDRlNTYzZThmMDVmMjBiYzMzODFmZjQ1YjBjMjkxOWExIgorICAgICAgICAgICJiMzQ2YjA3NjAzNWFlNzc0YjMyYWY4ZWU1NjZjNzNlMjA5NDk2ODRlNDQ3NDgwZGZhMzRkYmIwYzIyNjY2MTUwIgorICAgICAgICAgICI5MDlhNTllMWJiMjJkMDk1YWJlNTAyNWE3NmQ2MGVjMTAxYzc4MGU4M2EwZmYxNTk0NjVjM2U3YWMwMjEyYmIzIgorICAgICAgICAgICI4YjJmMWUwZTZlMGI1NGQzNWY0Yzc2MDRjMmQwOTMiLAorICAgICAgICAgICIwOWJiY2Q4YjYzYjI5Y2U5NTIyNmVjMWQ1MTkxMmFmMzk3ODlmY2U1ZTc3ZTdiZTY3ODk2YzJjNGU0YzQzNzZmIgorICAgICAgICAgICJhNDI4ZWM1ZDhhNDk3YWNjYTllMDgyMWUxZjZkZTEwNjc4MTljNDhhNTE2ZjA2OTFjYmVhY2JiMTlkMWJhNTA5IgorICAgICAgICAgICJmMDRmYzAxMzM2ZDkwZjczOTZiNDNhYTJmMmI1MTUwYzI4YTQ1ZjM1YTlkZTFhMjk3M2VhMTAyODY3OTQ5NDBhIgorICAgICAgICAgICJiNzlmMTI5ZTMxOGNmOTdhNWZkNzJiMDQ1YjQ2NmQ2NjZlNWRlMGI3MTRmMjEyYTBiOTA1MmEwYzkxNDQ4ZTUyIgorICAgICAgICAgICIwZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMS4yIiwKKyAgICAgICAgICAiYzZlMjU3ZjNhMWIzNWJiZGM1Y2Y0MjBiZDc2NTRjNTJiMjUyZGYzMmM1NzBkNDI4ZTYzZWEyIiwKKyAgICAgICAgICAiNzdiYmQ3MmI3YjhmZDI4NTAyZWNmNzlmZDFjOGFmOGViZmUyNDQzMjcwOTNiODI0Nzk1ZTk1YzBiNDM2ZWI0MSIKKyAgICAgICAgICAiZTVmMGYyYWVjNDMzNjNhYTJjMDhmYzMzZjI4N2U2NTM4MDQwZTQyODBkYmE0NzIzZTUzMjkyZTBhNjdiMjFlZiIKKyAgICAgICAgICAiNzc3MDc5ODViNzJiMmVjYWRlMjgwYTYxZmE3M2Q3M2RiYjJmZGIxN2Y3NzVmNDVmYTE3NWI3N2NiMTA2N2Q2ZiIKKyAgICAgICAgICAiOTNhNDM3IiwKKyAgICAgICAgICAiMGQyMTQ5NWM0OTI4YzI2YTkyYzE2YTkwN2YwODMzMzVhZGU4ZWIwYzIwYjBiNDVmZTBlMDhlZjM5YWUyNGVjMCIKKyAgICAgICAgICAiYjUwNTdlNjA3OGRkN2ExYjlkMTAyYzI0ODE4NTU3ZTkwYjgzZmZkYTE0ZjNjYzM3M2M4NGMxMDVjZWVlNzFiYyIKKyAgICAgICAgICAiNzMxYTdmMzU3MWJkN2JiYmExZDRmMjNmZjRkZjBhODRmMzEyOTkwZmY3NzFmZjExOGYwNWJjZmEyMjJmMTFjMSIKKyAgICAgICAgICAiZWEwMWY2YTQ2OGNhNWE4NzUwODA0MDk4Zjg0NmE4NjQzMGVhMjNlOWYwN2UyMzQ4NDYxZWYwMGJhNjI1MzRmYyIKKyAgICAgICAgICAiZTciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMyIsCisgICAgICAgICAgIjJkMzA3ZjQ0ZGRmZjljNDUzNWEwNmVkYTAxNGExOTEzMDRmYjNmYThlM2EyYmU4OGJiM2I3YmU5OWY5NGQxMzMiCisgICAgICAgICAgIjljMjE5YTUxZmY1Y2FkZGE5MyIsCisgICAgICAgICAgIjVmYWIyNDJkZDlmMjkyNGIyMGQzNzhhODg3YjVkZTIxZDE5NTc2OWMzYjUzNzFjMDBmNGMzZjFiNjMyNjhiMDEiCisgICAgICAgICAgIjBjMzFmMzJiYjg3YzlhNTIyOWUwZDkzMDVmNWZjODNiODkzNGI5OThkOGNlZGY5MTZmN2E0ZDcyNjhmZTNiZTUiCisgICAgICAgICAgIjEyMzVmOGJlYWM4MDBkNGZmZmNhNmZmZGRiMjlkYTRmYTFjNzc2OWQ1MSIsCisgICAgICAgICAgIjBmYWZiNjFjMzcxNmM3OTY2OWZjZDE2NDUyNDZhMGQzYjA3NWIyOGI3MzgyMjAxNWE4Y2FkYzg4YTIyYjdkYTUiCisgICAgICAgICAgIjM5NDNlMjU0NGRlMzk2YmVlZWQzYjBhOTg5YWQyMGE3M2RkY2QxOTFlOGFhNWNhZWI2ZTkwODhhNGEzYWU4NDAiCisgICAgICAgICAgIjY3ZjkxOThlOTI0YTljZmUxNDUwYjAxOGE2YjY5ZGQyMzc1OGU5MjUxYzc2Y2NlYWU4NDBkYTJjYzYyNTE3MzkiCisgICAgICAgICAgImUyM2I5YTQyYjYzNDQ2ZWNhMGQ2MTU5OWExNDZiNzQxZmQ0MzUxMWM3MzY2M2E5MjNlMzc1N2YxOGExNzFjM2IiCisgICAgICAgICAgIjEyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjQiLAorICAgICAgICAgICIxZjAzMzM4ODU1NGJlYmZhYTAxYyIsCisgICAgICAgICAgIjlkODE1NzU2NzQ2NjNiM2Q4NzdkNGIwYWE0ZmRjNjA1NDcwYWJjNTUwYjUzNTI3MmM4MjM3MDE4ODY3YzUwMjIiCisgICAgICAgICAgImNhZmU2YTRhYzgzNzM3ZTk5YzZlYmFmZTY5Y2FhN2ZkY2E3MDI3YzhmYmM0MzdlYzUyMzJjZTJlMjUyOWEwZjciCisgICAgICAgICAgIjAzZTIwMWY3ZTUxMDMyMzViYTY1YTY0Nzk0ZjE5MGVmNDI1NDkzYjY0OGVkMjRhMjE5N2QwYWIwNGQ4MWM3YjMiCisgICAgICAgICAgIjM1YTJkYWZkNmI1OWM5NDNhMDliNDhlYWMzNWUzNTU5NjI5MWY1ZjciLAorICAgICAgICAgICIwMDFiZGYzMzkzMzQyYzM4MTNlZTNiODcwN2VhZjU0NjQ3YmFkZTRjNzE4YTRiNjQ1NDc4MTJlMDEwYzJiNzQ2IgorICAgICAgICAgICJjODhjZGFmZGMzMTZmMDM2OWE2YzQzMGFlN2U2YzUwZjA1ZDU0NWMzZjc5OGRlYjFkOWE1YmI2OWM1OTEzOTMzIgorICAgICAgICAgICJjMmQ3NzkyZmFlOWQ0MmFkNzY0OTRkYzlhM2UyN2MyMTFkYjRlZjE5ODUxODdhNmM0ZDI4MWM0NzcyMTc3NGE3IgorICAgICAgICAgICJhMTFjMTIxOGQ0ZGQyNjdiNTc0ODU4NzdhYTc1MWY2YzI4MTlmODFiNTA1NGEyOGEyNmE1M2RmM2VhMzQ4MmIzIgorICAgICAgICAgICI0MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMS41IiwKKyAgICAgICAgICAiZjcxYmM3Mzc0YmQ1OWMzNzc3NTk3NmYzMzUyNDRhMzY4NDNjNTllNzQ4OWFkMjhiMWE4MjJkMmQ3ZDBiOWE2ZiIKKyAgICAgICAgICAiZTlhYzViZjQzNjgyZDYzZDYzNmVmNiIsCisgICAgICAgICAgImExZmY5ODQ0YTczZWM0YjNiZWZiMWE4NjAzNTJjZjliNzVmYzY2ZmY0NzlhMmRlZDU5OTg4NDVhNzk3NzNhOGMiCisgICAgICAgICAgIjYyMDZhMzY0MzZjODgwYTU1ZTE4NzExODM1NDU2ZDkxNDU0YjViYTEzMjA3OGYyMDM3ZmJkYTcyODYyNTFiYWQiCisgICAgICAgICAgImQxMmQwYTk3ODFhZjNmNTg5N2NkOTQ3YjFlMTQyNWY5NzA1NTA5IiwKKyAgICAgICAgICAiMDkzZmI2ODUyNmNlYWQwMTBhNTRkMTE2Y2Q3ZDYwMzUwOTliZjFhYmZmZTkzMzFkZTM2NDg2ZjA1M2E4MDI5OCIKKyAgICAgICAgICAiZTRhYmZhYjQwZDNiMDNhM2U3ZTkyNTU5NzMzOGYxNzAzYjA0NTM1YTljODdjNjU4MzZmMTYxMTFhYWU4ODllNiIKKyAgICAgICAgICAiYzhkOTBhMjQwN2Q0NDFhMWMyYTMxMWNiZDk0NjExYTQyZTkzYzczYTNkMjE0ODNmYWRiOGY0ZTI0NmQwODlmMSIKKyAgICAgICAgICAiY2ZkNzA4NTJiNGRjNzc4YTYwZDE1MmQzZmNhNzVmZDYwNjY3MDRlOTMzYmY5OWY1YmI3N2FmYzlhOWNiM2I4YyIKKyAgICAgICAgICAiYjUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuNiIsCisgICAgICAgICAgIjQ2ODc4M2Q0ZWFjODgxMzQzMjA0ODU0N2NlMjQxZjcyZGIxYzg1Y2U0YWRiZTNlZTJjIiwKKyAgICAgICAgICAiYzZlMzI2MzBlZDkwZDBhZmIxNjhjMDhiNzUyMjU5ZWY0YjllODExNzYyZjdjZjRjNTM1Y2I0YTBhMDRiMWQ0MyIKKyAgICAgICAgICAiNjU0ZWQ0ZmFkZmM3ZGRiYzNhYWQwMzE0MDc4YjIyNmM0ZjNlOTc4NDQ1N2M5MWM3NzY4YzVjMzdiNzYwMDg5MyIKKyAgICAgICAgICAiMmU4ZDA0NTc4NTA1NzNjZTZiNDFhNDNjZGRhOTcwMDMxODM2ODQwZTRlNjBhMzQ4N2I0N2ExODVjODZmOGExNiIKKyAgICAgICAgICAiZjZmMjIxZDBhMCIsCisgICAgICAgICAgIjAxNzFhMTJiMDBjZmQxMDk2NzRlNWJmN2Y4NDM0N2ZkYTNmZTRhOGVhMmY0OGUwZDZiNmQ5NGI0OWZkN2JkZmIiCisgICAgICAgICAgIjI2ZTMyNDAwYTcxMjUxYWI4NDIyMDY5MjFkODM3MjNhODllYTA5OTMwMDI1OTIwZTNlZjhhODg3ZDJiYzI0MTUiCisgICAgICAgICAgImE3ZjFlZDM3YmE4YTVkMDNlZjkyNmFjZWY2MTE5MDAwMWM1ZWEwZjhjZDkyMDIwY2Q4OTY2N2U5ZWE1ZjdmMmIiCisgICAgICAgICAgIjE1Mzc4YTIxMGI4YWU5MTQ4MTkwOThkYTFjYmVjOWM1NDNhMjYzMzAwZjk5NGZiMGI0OTI4NTcxNDAxYzIwMmIiCisgICAgICAgICAgImQ2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjciLAorICAgICAgICAgICJhZjYzMWQ3NmM5N2ZkOTk1ZTQ5NGFhOWI0YmQ3NThjNWM2NzJjNWU0MTU4ZjNhYWY4NzRiIiwKKyAgICAgICAgICAiNDA2ZTFlMjNmOTkyYmIwNzYyMTI1Y2E0NjNiZDBmMmVmZGYxYmZjYjA4MmE4ZGY1MDZhZjVmNzI3MGMzOWZkZSIKKyAgICAgICAgICAiMDFkOWVlZDMyMjY2NjFkYjIyYTljNDA0YjdkNzY1ZmEzODRmOWFkNGY1MWI5MzY5ZDc0YjBlMzc3MDY2MzFiYyIKKyAgICAgICAgICAiNjUzNmY2NTU1ZWM3ZmRlYmQzNDhlZjNjZjVmOGE4NzdmNjA2NDM3YzI3OGNiODE2M2FkMzQ5Mzg0YmFhZTMyZiIKKyAgICAgICAgICAiMzFiNjg2ZTAiLAorICAgICAgICAgICIwMWZmOGZlNzlhZjMxOGQ3NTZmMjg0MDgzYjUxYjQzYjY2YWFlODNjNmFhOTFhOTk5MzRiNGRlODRiZDVmZDI0IgorICAgICAgICAgICJmYThkMDdjNzU1MTQ3NDY2NWU2MjM2MGE2NTk4NGU2N2E0ODU2YzNkYmQyYzc1ZjI0NmUyMjIyMmU5ZjRiOTY5IgorICAgICAgICAgICI1MTY3MjZlZDI4N2Y0MjNhNjc0NzgyMWZiYmI3ZmExNzYyMzVjODUwYTg2MWYyOTlmNzM5NGMyYzQzMDdiMTAyIgorICAgICAgICAgICI1OTA5NDBmZWQxMjA2YWQ1OWI5ZGQ2NDQ0ZTFlMTk2ZTk0NzMyNTIyNGZmYWNhMDY5ZTljZGY4YzYyMDI2OTA3IgorICAgICAgICAgICI3ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMS44IiwKKyAgICAgICAgICAiNzNjYjUzOTA4MmZiMDZkY2FlM2MyMDY4ZTk4OWU3YzBkOGZmZjBmYjM0MGI2ZGU4MGQwYmE1ZDFlMDA2NGYyMiIKKyAgICAgICAgICAiMTM5MjhhNGJhZjIwYTgwMzQ4YWYzY2RlOWRlNjNmODg2ZDYzZTU2YTNlMzJjZDhlIiwKKyAgICAgICAgICAiMjhlMmE5N2M3ZTllMDMzYjQ5YWFkY2VlOGZkYzA3ZWRmZGZkYjk1MDM1NGI3MDhjZTVkZjg0OGQxYjUxYWEyZiIKKyAgICAgICAgICAiNGFmZjk5NzQxNjAxODE0MjI5NDdiMTMzNzY0YzVhNDAwNjU3MDQ2YTQ5MzYzZmZkZjFmOTNjYTQ4YjNlNTI5MyIKKyAgICAgICAgICAiN2UxZjM4ZmI1MGZiIiwKKyAgICAgICAgICAiMGM3MmU2OTU0OGMzNGVjYWYyNDhiMmRjNmJiNjQzODdmNGYzMzUwZjY2OGU1OTAxMzU2MDgwOGM0MTNmYTgzNSIKKyAgICAgICAgICAiZmQzNjBlMDRlNDc0N2EwMDMxYzhhNjRhOWQ3YTA3YjM2M2ZhZDI5M2I3MDNhN2RjOTkwZjgwNmZiOTBlMzkxMiIKKyAgICAgICAgICAiMjFhMTE2ZGYxMDhmNTQ2ZWFlNTE3MTZiYTA0NTAxYWI3NzdiMGMyYTE3NzEyZjcxZTQwNjI3NWYwMTczNzdjZiIKKyAgICAgICAgICAiMjQ4OGM0MzVlZjZjNmU3YzQ1Y2RiOThmMjQ0NzdjZWQxODBlYjNlZmM4NzAzZTk2MzgyNmJmYjM0NGYxNmViNCIKKyAgICAgICAgICAiYTEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuOSIsCisgICAgICAgICAgImYyZjk4NWI4MDMxMjczY2I1ZmM4OWEzMWRkZWI0YzY3YTRlNGYzOGMwOWQzMDI4NzQyMDliMzljNjliNzFmODQiCisgICAgICAgICAgIjk1ODg4NjhmYTVmOCIsCisgICAgICAgICAgImMxMjA0NDZmNWJkZGEwNmM2MzczOGYxODE1NTU5NWY2MmJjMjY1NjcyODRjMzUwMzY1OTFjZDVkNzUzZTRlZjciCisgICAgICAgICAgIjkwMGRmZjMzYmZkZDNiMTA4YzEwMmQwODk4ODBjN2I2OWQ4NmU5Y2UzZDY4OGNkYTE1NmZkNmE5OTIzMTA1OGMiCisgICAgICAgICAgImMzMTgzMzk2MzgwOTQ2ZThhOTY5YTdmY2JlOWVkYzk1OWEwZTUwNDUzMmJhYjhlYSIsCisgICAgICAgICAgIjEwZTBiYzE0YmExNjAxMjY5OGNjNzZjYjgyMDQ1ZTJiZmRiY2IyYjExOGYxODMwNjc5NTlkNzEzN2ZkNTBmYTgiCisgICAgICAgICAgIjhmZTRmOWNlY2Y2NjMxYTk5Y2NjYWI3NmNkYjc3NDRiYWJkMDZiMmJlZGZiY2E3NzI0ZGFmZDkxZTZkZmE4OGIiCisgICAgICAgICAgImVhMmI0NGE4Y2JiMDYyMTliMTVjMmFlNzY4NzJmYWQyODhlODQzOGFjZDM5NWNlNWNiZTI4YTcxMmI2N2Y1NjEiCisgICAgICAgICAgImExNzg2ZDc1MzQzZWQ5YWQwZDBhNWViNmZhZWQwN2IwNmFlZjAzMzE4ZmYxYWZlNDcyZGI0ZWUzZTIxZWMxMjkiCisgICAgICAgICAgIjMzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjEwIiwKKyAgICAgICAgICAiMzk4NzJjZmQ2Y2Y3NGI0Y2NjMWE3MGQ5NzNiMzE4OTlhNjdhZWVkZWU1ZDY3MWUwNWJkNjAxMTJlNjQ1MTJiYiIKKyAgICAgICAgICAiZTQzYmI4NDAiLAorICAgICAgICAgICI2OGFjM2Y5Njk3Yjc1MDc1NGZhNzUzMmU0MTYxYzEyMDE4ZTAzM2E2MDI1MWM4ZGNhODM4NzgxNmY0MjM3OWFiIgorICAgICAgICAgICI5NzhlMTU1NzhhZTJlOTRjMTc3NjQ4OGIwY2ZkZmYxODZmYTZkNzk4ODhmODE2OWVlNDQ5ZWFkZGM4ZTdmNWE2IgorICAgICAgICAgICI1OGQwOTk3YTkzNGY1ODZlMzFmNzQ3MzBiZTYwM2YxZWU2MmZhNmMwOGIwYmZmYWU2Yjg4IiwKKyAgICAgICAgICAiMDliNzcwMDdmMTVkNjU5ZWZjY2FjYTY2YzFlN2Q5NjJlMDQ3YTFlMTQ5ZTUyZGNjMGUxYWRjOWUxODNiZjczYiIKKyAgICAgICAgICAiNWYyMzQ4ZDM0MzI4MjQxYjQwN2Y2MTgyMmY2ZDU3ZTFhYmIzMjJkMzAyZjQ1MzBkMmNiOWE0MWEyNzcwMjM4YSIKKyAgICAgICAgICAiMWJkZjg3NWVkZDc5NzgxMGQ5MDRlOTdhNGQ3YzUxNTEzMmQ2YWJiZjNhNGE0MDc0ODZkZDAwNGVhMzhhZmY4ZCIKKyAgICAgICAgICAiNGVkMzgyNWZlMTMxNDJmMTM2ZmQxZDcxM2U4MGUwY2YyMjU3NjliNDE5Y2NhNTRjMTU2ZTU0NjY4YjMwNmI1ZiIKKyAgICAgICAgICAiMmEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMTEiLAorICAgICAgICAgICI3NGQ1NmJmOGQ5YzE4MGRjMDk5MzcxYTVhZjcyIiwKKyAgICAgICAgICAiMzM3ODcwZjA0NzljZjEyODNhMGM4N2M5YzRhZjU0YmE4Zjg1MDY0NGQ1OWEyMDI1MjYzZDJiZGM0OWJmYTY2MyIKKyAgICAgICAgICAiNmU3NTE4Zjk0YjZhYjE4Zjg1YjE5MzIxMjA5Yjc2OWYwYzE5NzVkMWQ1YWRhMDZmZDJhNzZjODI0NTBlNGUwOSIKKyAgICAgICAgICAiY2RhZGI3ODMyZmZiOGFlN2RjYjQ3NDEwYjI4NzgwNGRkZGM3NDkzZDYxMGE4MTM5OWI2ZGY2ZGY1ZWYxNTIwOSIKKyAgICAgICAgICAiMjk4NGZlMjc3NmE0ZjkzMDU0NmJlMWRjMTgzMTNjMTQiLAorICAgICAgICAgICIwNzYxZWJhYWQ4ZmYxYzNkYmU3MTBmNjBlM2JlOWYyODlmYjI3YTZiNTM3Nzc1NWI3MWZiMzg0YzVmYWNiMTYwIgorICAgICAgICAgICIzYzk1M2UxZTJjYTExZTc4NDMyNWFlNDJmMzIxYWU1YzU4NjQ4Yzg0ZjUyNGRmOWRlOWY5M2ZiNGIwYzJlMDk3IgorICAgICAgICAgICI5N2ZmMmQxMTQwNzA3M2I5NWE3ODZkZjUxYTQzZjc5OTgyZDg2YzQ5ZmI5ZTUwMTRiMWI3Njg3NjBhNTEzMDI2IgorICAgICAgICAgICI2ZDA2OTkzMDZhOTA0ZWQyZGZlMjAxMzhkNTMxYzVkYzRiYmY0ZGNjZjEwMjQ5YTZlMmIzNTVmN2NjYjMyNmE0IgorICAgICAgICAgICI4YSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMS4xMiIsCisgICAgICAgICAgIjYxMTA2M2I1ZGExMjNjZTIxMjk2MTdkZjM4NTk5NTU3Yjk1ZDFiMDVlNmI2NmJjZDQ5YWZlOTgzMWEwNDIxYTUiCisgICAgICAgICAgImJlNGU0OCIsCisgICAgICAgICAgIjEwZjlkZjMwZWM5Nzc3ZmNhYjVhOTI0ZGVkMzZmZGZkNmUxZjM4MTQ0OWFkOTlkMjBhZWEwZTM5NzJlYTYwNGUiCisgICAgICAgICAgImEyMjc1MGQwNjAxZDEwYTM3N2RhZDFhOTRmOWIwMjczNDA5NDgxMjM4MjczOThiYjIyYjE0NDVmNzFjNTA1YzYiCisgICAgICAgICAgIjIzYWFmNTE2Y2Q5ZmIzZTk3N2Y3NzhjZmRkM2E1ZDI4YzIyOTllNGIyYWJkOWY5OGM0MzU1YSIsCisgICAgICAgICAgIjA3ZjJkNThiYzQxNjM5OTRkNzZmNDkxZWRkNjk3NDNjNDVkZGEwYzM4Y2NiMDc2OWRlOWNmOWY0ZmQwMDU1ZDMiCisgICAgICAgICAgIjBhMGNmMDAyODAwZDc2ZWQ4YzEyY2JkMzZhZjA1MWE5ZDczMzdiMjliYzc3NGRjM2M0MDEyYmY1YzI4YWVhZDgiCisgICAgICAgICAgImMzZTAzNmFhNDEzOThhOGIwZmU5OTFjMGJmNjZiNTM0MWM5OWQ5Mzc3ZDk0NzA0YWQ0OTBhOWY4NzQ2ZmM1Y2UiCisgICAgICAgICAgImY3MjZlMTk2ZjM0MWY5M2ExZjFlYWUyYzEzZTAwY2ZkMjIwNjJmOGViM2RhOWRhZmI5NWExZTdiODFiMWZkYjYiCisgICAgICAgICAgIjU2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjEzIiwKKyAgICAgICAgICAiODA3NjRmNzg1ZmQ0MTc2ZTE2NDFlMTI5YTM1YTliMzFiM2E4OWE3NTY3YWQ2YzFmMGQ2NWVjOGFmOTVmYzE2ZSIKKyAgICAgICAgICAiMTUyODE0MDkiLAorICAgICAgICAgICIyMDM2ZDA5OGE2ZTkzNWY5YTQxMTIwMWQyYmNiNjI5Zjc5MGE5NGRiMmVjNjk4Njc0MzNiMTc2MWQ3YzY5NTRiIgorICAgICAgICAgICJlOTFhOWZjNzE5MTkwZTEwODYxM2NkNTg0Y2JiOTc3Njg3MDQ2OTI0YmNhNmIyZmUxYTU0YmY3NmFjZjc3YjM2IgorICAgICAgICAgICI4YzM5NjUwZjZkMGE0OThkYmRlZGFlM2Y0YzIxMDQwYThhZWQ2MzRkZTRlZDhhZjEzNDZlIiwKKyAgICAgICAgICAiMDQ5YzYxNDQ0ZTkyNDc3MmY5NGE3OTVjY2Q5OWViMmZlNDMwOTk3YjkxYjQyZGU2MTYzNjI5YWI5OGQyNWE3MSIKKyAgICAgICAgICAiZTdmOTY4ODZhNTdlOTc5ZDljOTRjOTYyMjA5YzFmNzEyYzcwNTcxYTgxZjM3N2VhZjc0ZTgwZTcwNzIyZTFiZSIKKyAgICAgICAgICAiM2QxMzM3YzUwNDVmNzk3YmQ1N2RmMmY1YWU1ZWYzM2FlNTc5ZTkzYjM4ZmIyNTBkZjBjMmJjNTliMzNhNzQ4NiIKKyAgICAgICAgICAiN2I4ZjNkZmU1YmE3ODVkNzI4Yjg5ZDk2YjMwMDJiYzAwNTRkYjViYjBkODRmZGE0NWRiNGExZjI2MjhhYjExMiIKKyAgICAgICAgICAiMzAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMTQiLAorICAgICAgICAgICIwYWJjMmJjNWZjZDA0MDE4OWY4NDIyZjFjYTA0NTAyMWRhOTUiLAorICAgICAgICAgICJlNDczMmU0OTkwNjk5ZmQ3NDc0MGM4NTJhZThkNGQ3MDdmYmQ3OTQ2MGY4ODc0MDk4NGFlNTNmZmI5ZmMzOTYyIgorICAgICAgICAgICI2ODNlYWQwZDE0MDRmNTMxNTFkMWFlZTgwZmNkNmExZmY2NWZjODhlZjA4ZmQ3NmQ5ZmRjYThmOWUzYWM3ZDhkIgorICAgICAgICAgICI4MmI4MmVjZTc4OWM2NmM1NDAyMjgwYjNlNTY4MTAxY2UyYTJhN2IyYjJmMWU5NjUxOWNmYjQxZTYwNDkzZDc2IgorICAgICAgICAgICI4ZWI1Yjk2Y2NjNDliYjBmNmVjNzExZmQiLAorICAgICAgICAgICIwM2Q4YWU2MDRmOTI5NTMxNzNjNzdhMDFmZmEwOTBhYTBlMzdhMzhhNDdjOTcyMTljMGI5Zjg2NGQzNDg3NDZhIgorICAgICAgICAgICJmN2Y0YTYzMjExMjljNjA0NmE5OTRjZWQxY2NmMzMyNGRhOTM3MTUzODg4ZGQ2YzY3MDE5YTdjYWE3NjU1YTM2IgorICAgICAgICAgICI0MjgzOGVkZmEwZTJlZDhkYzI1YzE0YmZmOGJmZjU2NWM3MThmOGI2YzkyMDU2YzliYmU4ZDkzMDgzNzBjN2NkIgorICAgICAgICAgICI3NWEwNGUxMWI2ZTI1YWE2YzNjMmNkZGQxNzJhNGI2YWVlZjA0ZmI4MzViNjg2MzdjZjBjYTBiOWE5MTFiOGI4IgorICAgICAgICAgICI3NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMS4xNSIsCisgICAgICAgICAgIjhmOTgzNWVmYjY5Y2NhOGMwN2JmZWY0ZDhmNTM1ZDBjYmRhNTM2N2JiZDQxMDgwYSIsCisgICAgICAgICAgIjMyZDRiZTA3ZTZjN2ZiODFkNTIwOGMyNTAxYzVkZjdjNTZkMTk4NmRjNmQ2MzExMGFkMjFkODFlNTdjZTExM2YiCisgICAgICAgICAgIjNkYmJmZWJlMGY4MGMwMTZiNzE5ZTlkNWMzZDlhM2JiYmIyZjM1YmU5NWQ0NTYyMjJiNTFjM2Q2NWIzODhlN2EiCisgICAgICAgICAgImRhZjZiOWNlYWUxZmQ0NmE2ZTA1Y2ExYmIxOTljMjdiYWNkYzhiNWZkMTRmMDM1MWFlYjNmZGQ2ZGMxZDkzZjMiCisgICAgICAgICAgImI1MzE1NmVmYTNjNiIsCisgICAgICAgICAgIjBlNDdhZDRkOTJkMTlhMWViY2FjYmY4NzVkODAxOTI3ZDRmZTVhZmFmNjZlZDgwMTVjNTU5YjU2NmE5ZjNjYmYiCisgICAgICAgICAgIjBhYmU4YTc2ZmU3MzI0ZjYyOGMyZTRmMzQ1ODRhNTBmZjc3ZTgyMmE1NDExOGVmYTliYWU5ZDBmYTUwMjk0YzYiCisgICAgICAgICAgIjE4MGJhZjNhOGIwYzdlNDUzYTc0MzdhYjFhMTljYzAwMzA3YThjNmFlZDk1YzMxNWIyNGI0NzkwMDcyNDU2YzkiCisgICAgICAgICAgIjQ0NjA5OTVkYmIxZmU1YTEyYjRjZjQ0NTQyOTZmNzQwMDI4M2NlZmRjZTZiMDBjYzgwNDlkZDVkZDhjYjJhZjMiCisgICAgICAgICAgIjZmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDExLjE2IiwKKyAgICAgICAgICAiNmRmYmQ5M2IwMDc4ZDQ5YWU0ZmUxZTI0Y2NhOTdkMGE5YWZmZDdiZWUwNjJhZWQyOWRlZjBiMWMwYjNhZWZhZCIKKyAgICAgICAgICAiODExZDZlN2FjZThiNDlkNzI0MmE5ZmU2ZTIzYzIyIiwKKyAgICAgICAgICAiMzE5ZjljZGEyYzkzMzg4ZWJlMWE1MGU3NmM5Mzk3NTU5ZGNhZjE0ZmUxMDM1MmFhNTExZGM1YmFhNjRkYzE1MiIKKyAgICAgICAgICAiZmNjNzljYmIyM2Q0ZTY5YjEyYjlmMjdhNzkwOTE1OTg4N2JiMDQxMjlhZDYzNTE2ODEzMzg2Mzc0ZjMxODkyZCIKKyAgICAgICAgICAiNGNkYzRmZTYzOTY5YjViZmRkYzY2N2Y5NDY4OTdkIiwKKyAgICAgICAgICAiMDFjNWNlODM2YmUyMjA4YTNkODE0ZTdlNjBjMjc2NzRhY2I3Y2QzZTMxYzAyNGQ5ZDM4ZmMyMjk1M2FhZmU3MyIKKyAgICAgICAgICAiYWY1MjQwNDM0ZGNmNTRhMzg4OTkyZWFjMzZlYzg0NjRkOWEwNDJhYzU4ZDE4YTcwMzk4YjhhNzczZTY2NjliYiIKKyAgICAgICAgICAiM2Q3NmVlYWNkZjFmZDE1MjQ3NDA5OWJmYTY2MmE0ODFkYmFiNGNhNDY3MTQ5NTg3NDVlMmI3ODMyYTU5Y2NiMCIKKyAgICAgICAgICAiMDUzNjQ5YjdlMDk1MDc0MzMzM2Y1ZmNkNmY2NTE5N2RkY2I0ZTFiYzEyYTY2ZThlOTJhODY1OWZhZWU1NzEzMSIKKyAgICAgICAgICAiZTIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMTciLAorICAgICAgICAgICJlNTg3OWZmY2UwYjYyOWI4ODU3YzE5NWNmNWQwOWY3YjkzYmZmMWY3YTlmMmQ4YTQ1YTU2M2JiYmU5ZTYyZCIsCisgICAgICAgICAgImJhY2UyY2VhMGJmZWMyNWEyZDM0ZDcyOTkyYzJiOGVhMGFlYTE3YjdhM2E4YmVkNjBkMWJiNTEwMTMzNDdiMmQiCisgICAgICAgICAgIjAzNmE3NWE0ZWMzZWIyYzE3ODhkNDRhOWUxYzVjODhkMDQxZTgyYWY4NzgxNTVkZGM3ZDgxYjNlMjdjZGRkMjAiCisgICAgICAgICAgIjQwOWRiZGRhNGE2NGJmODMxMWE3YjdlYjc3Mjk5MzEyNjYxYTZlMzdkZjM1MDJmODZhMjI0OTJiZWZhY2Y0IiwKKyAgICAgICAgICAiMDFlNGZhZWJjYWI4OWQ3YmFhM2UwMzkzZjcxNjg0YjBhZTUzZGY4ZWI5ODczZTY1YTcxNmVjMmY0MTc0MWY4YiIKKyAgICAgICAgICAiNzgxNmQyZTE5N2Q5NzZmZDUzYThlZTdmOTI0YmY0YmZkNDEwNDJlMTY0NDVlOTA2MGI1NWEwYjZkYzE2YWFmMyIKKyAgICAgICAgICAiMDY0NDkxZDE4OTI4MjIzOTUwMzkzMzI4YzE0N2RiZDAzNTMxZWMwMTJkOGM1Mjc1MDJlN2ViM2RjYTUwOWI3ZCIKKyAgICAgICAgICAiZTE2OTk1OTI0NjA3YzhiMjhhMmJkYTliY2IyYzc3ODE0NjFjNzY2NjNiODg3Yjk2NDNlMjMxN2YwZWExZDFiYiIKKyAgICAgICAgICAiMTQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMTgiLAorICAgICAgICAgICIwYTJlMjQxMzBlOGE5ZDI4ZGZjYjlkZjk3NjVmNDY4M2U5ZGE3ODQyNWEyODE5OTgwNmE5M2IzMjJlZmE4ODQ5IgorICAgICAgICAgICIzYWMzNzI1MmMyOWEyNjRmM2U4NWFlNTY1MzhlODA4ZGM1NTY0MmE0ODg1ZjA1NDY0MGY2OWM4OTgxZmUiLAorICAgICAgICAgICIyMDQzMWVmMzFmY2UxOTkzOWRhNTQ1YTA4NTMwMTEyZGIwZmEwNzEzOGRkODZkYjFjYzY1ZTJiMDNmYzJiZTYwIgorICAgICAgICAgICI3YzNlNjAzOGViYjc4OTE3NTViMjMxMjlmYjk2OWE3ZmUxMDYxMGYyZWJjM2YwNzdiMmM4ZjQ2MDFlMDlhYjRjIiwKKyAgICAgICAgICAiMGMxNGI3ZDMyZDNkNGNlMmIwOGVlNDRmNTE2YWVlMjk5MGI2MzA1MjQwYjI1ZDIzMzRhYTMxNzUyYWVmMjgwMiIKKyAgICAgICAgICAiMTYzOWY3NmE0YzQ3MTk1NjliMzAwNTJkNGJkMDhiM2EwN2YyM2JlNjg2MjM3ZTQ4MWU2N2JmM2Y1YTAxYWRkNyIKKyAgICAgICAgICAiNTZkYTc3MmM3ZGMxM2QzMjI5OGI5YmJjM2QzM2U2ZGY4MmQ4NWMwODlkMzQ3NjAwNDk3YThiOGVhNGRlNjhhYiIKKyAgICAgICAgICAiYjkwZTVjNmFlYjI2OWE5N2JlNDI2Y2VmYWNkZWJiY2MwYzFmMmM0MDliYmM3YzcyZDkwYmRiNDI2YjEzY2NjMSIKKyAgICAgICAgICAiOWEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMTkiLAorICAgICAgICAgICI3ZWZjNjI3YmE1ZmEyODI1YWFlMGNhOTQwMzBlNzA0NzA4ZDM1ZjkyMjM5ODI2YjQyZTJkNGRiYmU0MDJhYjdkIgorICAgICAgICAgICIxOTZhN2Y1NDg4MGNmMmM1YTRkMGZjZTUzYTIwYTMyYjY4MzBlNjJkY2QwMGRiY2JmMzNiNWMwYzcwNDQwMSIsCisgICAgICAgICAgImYwNDk3OTE5YzE0MmYzYTk4ZWY1NWJjZDU5ODgyMzRmZGM4YWViZjczNmQ0N2FmOTcwOTBhN2E5ZGRlMGE3MzUiCisgICAgICAgICAgIjA5ZjljZDQxMzYyNmJiOGJhNzY3YzlkNjM4NDkxYzI4NmU2N2JmMjJkNjcwZDU2YjI0YzE1YmFkNzAzNTFlIiwKKyAgICAgICAgICAiMDFkYmNlM2IzZjg0YjJkYTA2YjE2N2UyMDY2NDlkNDI0YTQyYjhlOWVhNTQ1M2ExNmI1ZmM2YzJlOWNiMTdlZCIKKyAgICAgICAgICAiYTFlZmZlNGU3ODM2YTVlNThmOTllNTMxNTMwYjQwMTcxZTRiNTFmYzBiOTJkZTMwMzEzMDA5MzZkMjU5NWUzOSIKKyAgICAgICAgICAiMTAwOWUyZTUzYzMyZjc1OTYwNGE2ZGJhZDljOTcwOTAwZmE2ZTQxYTM1MDgzZjc4N2I5YmYzYmViY2VhYTFhNyIKKyAgICAgICAgICAiNzE4NDFiNWU2ZTRjOGI1MDk2MjkwMDdiNDY3ZTNjZWM4YTFkMDMyM2MzYzVkYmMzNGQ4ZDQxMjVhMzk4YzlkNSIKKyAgICAgICAgICAiM2QiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTEuMjAiLAorICAgICAgICAgICI1OTNkM2ZjZDA1YWNlZTMwMjk4MTVlMWU3NmE4OTAiLAorICAgICAgICAgICIxMjM1ZWUzZTdhOWRmNTk2N2ZlOThkOTcxMGZmZGQ1ZjdlYjIyZGMwNzE0N2FmNDM2ZmUyMGFhNTI2YmYwYjk0IgorICAgICAgICAgICIxOTBjYWJiNTIxM2RlOThhMjNmNWVmMjc1MDIyYTJmNzNlNjBlOWVmZTJjMDM0YzU1Y2ViMjZhYTgwNmNkZWQ2IgorICAgICAgICAgICI3MzlkZGIyY2JkM2VjM2I1NTUyMDRhNzk4NDY1YzM3YzY3NTcxOTU2ODZhM2VhM2M1NjU3YzM2MGEwMTU4ZDk5IgorICAgICAgICAgICIyZDRmZWJmYTA0MjllZWI3YzkyYTQ2ODQzNGM1YjciLAorICAgICAgICAgICIwZjY5OTg4MWExNTI0NjE4YmMyNWQ0ZTUxNGUyMDczMDY4ZWE3ZDM1Mzg0YmFmZDQ2ZmMyODJlMWQ4NTUxMTllIgorICAgICAgICAgICJlOTY5ZjIxMWM3MTg0YTA3MDMwNjQ3ZmM0MDk5MGVjZjJlYTQwNTIyODY1ZDkxNzc4YTYyN2VjYThlNTBjMmJiIgorICAgICAgICAgICI5NzYwYjA0NWRhYWYxMjc3YTRmYTk4MzU3NmNhOGNmYWQ3NjA4MzI5YzE4ODE1ODgwMTdkNjM3MjJiNzBlOThiIgorICAgICAgICAgICJlNTI0ZTAwMzM5OTU5ODI1NzNkMzM4NzA3OGM4YjdjMWM1ZjlhZWYyNjRhMDQ4NDY4NGIzNDI2NjQzNzM3ZDM0IgorICAgICAgICAgICJiYiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAzMC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIyNjFmZTAyODQ0NTljMmZhNmYwNTU0NmJlZDU4NWUxZWUwYTEzMGI3MWMyYjhhNmZiYjNiZGM3NTc4N2IyNjU1IgorICAgICAgImQwZWQ0ZTMyNWI1NGM3YjM3MWE2ZmNmMmI2Nzg4Mjc3YTUwZDQ3MDViYTIzYzU5NjI4NWRhN2UzYzkzMDRhNDEiCisgICAgICAiZTdjYzQ4OGI0NDkyMmY3YmUyYjQ3YzE2MzE5ZTMzNzQ1MTE3M2Q0MGIxZWE0ODFkMWE5YzExMjliMWZlYjdkMCIKKyAgICAgICI5ZjY3NDk3YWViOTg5NDhmMWFiZjNiNzc4NmJkM2I4NzA0NzE4N2M4ZjM3MDE1NjgyYjNmMmRlNTBlMDc4ZThkIgorICAgICAgIjBmIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA1ZGY3NjgzNzJjYzBhNjRkM2MyMTQxODMwMjQyMzEzOWY0Nzk1NzNlNTBiNWMwOWI2ZTNiZTIzZmJjOWFhMWEiCisgICAgICAiNzZkMzI3OTlhMDQ3NzYxZmZjMjEwNzk0NDgxNzAxMDRjY2E1ZTJhMTRjZTQ1N2QwMGQ4MDdkNDJjNzZhNTVmNiIKKyAgICAgICIxNjg3NGJhN2Y3ZWFhMWNlNjNjYmYxMzJkZWIwODFhYWQyZmQ4MGQxMjRjNGRhODZlYzZjMDIwZThjYTgyZGNkIgorICAgICAgImNkMzU1NGU2OWJiMTk4NzIyNjJhNTAzMWFiNWRiN2NjOGM5MjU5YTE0NmQ1OGIxZGI5NGNjN2U3NTYyNTNkNWEiCisgICAgICAiYTEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi4xIiwKKyAgICAgICAgICAiN2RlNjljZDkyMjhiYmNmYjlhOGNhOGM2YzNlZmFmMDU2ZmU0YTdmNCIsCisgICAgICAgICAgIjMzZDYyY2Q2Njc4MjNmYmYxM2Q1OTJhZTRkMDJhMjM3MGQxZDk5ZGIwNmM3MjU0MjVlMGQxMmZjYjQ4MzRlZjkiCisgICAgICAgICAgImU1NDk5ZDYwN2U4YWFlZmViYTgxOTY0OWZiM2Q2MWM3MDVmNWU5YTNhMmY4OTYyNzYxODlhMzIwMGQyZmFmZjciCisgICAgICAgICAgIjc2NzllMDU2MzQ5YTViOWI3YjQ0NDliNjc1Y2Q0OGI2OTgwOTMyYzJjZmM0NmJmODlhNzczNGY2OGRkOWY0ZmUiCisgICAgICAgICAgIjc3ZTFkOWNmMWYzMWIyMWM0YzYxIiwKKyAgICAgICAgICAiMDRjYWVmZmNkNTFjM2ZjOTIzNjM0Njc3NGRhMGNmYTc3ZTllNjQ2NWY2NDM3ZmY0NmQ5ZmE0NThiMzYyMzQxMiIKKyAgICAgICAgICAiYzMxMDMwMDlmYmZlMjAzMTk2ZGY3Mjk2MjZlMGVlM2FmYjZiMTBhNWFjZDcyZTg0MjgxZDlkOWJjYmEzZTBlZiIKKyAgICAgICAgICAiNzdkZDg0ZjNkYjE5MmQzMWI1YjY2NmY3NmM5MzgxMDY4MTM3M2JhYTU4ZTZkYWRiMDFmYTVjNjVlYzg5ZmE1MSIKKyAgICAgICAgICAiY2MyNDc0NjExYjlhN2NiMDBlODYyZmQzZDQ5YjFjZDMxYWZjMmRiNDQ5ZTA5ZGFlMmQwYTdkNGRmMGJjMzIwYiIKKyAgICAgICAgICAiNWEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuMiIsCisgICAgICAgICAgIjk3ZWVhODU2YTliZGJjNzE0ZWIzYWMyMmY2ZWIzMjcxOTY2OWM0MmY5NDMwYzU4OTUwYzY0YzBkYWJmZjNhOWUiCisgICAgICAgICAgIjIwNDM0MTZjNjdjYWFhYWI3YzY4Y2NiM2NhOTlhMyIsCisgICAgICAgICAgIjlmMTQxMjYxY2VjNGYyYzUyZjk2OTEyNWEzNmYxNDEwMjcwODgyNTBkMzZiMTc0MjFjZDA5NjE0NzYxOTA2NDYiCisgICAgICAgICAgIjhhZmFiNzYyMmMwZDAyMTkzNjkxNzQ0NzkxZTBkMzViNmJjOWYzMzc3ZTEwYjI4NTZjOGVkOTE5OWM4OWY0YTQiCisgICAgICAgICAgIjE2MTNkM2M0MGNjYTM3M2E3Y2M2M2M1MjYwZmU1YSIsCisgICAgICAgICAgIjBkMjZhMDVkZTkzYjcwN2I4NTQwZmRjMTk4ODlkMmQxZTc5MzcxNTdkMzJkMzAzYzUyOGRlMzVlNTUzZjk0MjAiCisgICAgICAgICAgIjI4NzQ0YWY2YTA0MDJlY2EwZmNmNWE4NTI2MWFkNDc1ZDg3MTBjYzlmOGIxMWJhMmM2ZGFmMWQ2NzI2OTBjNjgiCisgICAgICAgICAgImVkMTFlMDM1ZTljNjYwZWNlMWQ4MGNkYWI4MDBlYWQzYzZlMDc4NjE3YTFiMGQyNzNkZWRkOGQ2NTc0OTE2NmIiCisgICAgICAgICAgImQwNzc3NGZiNGMxNDg2YWE4YTBhZGY1OTVkYmMzZDEwZmZhZWYxODM4NDk4YTY3NTU1Yzc3YjZlZDk4M2Q1YjkiCisgICAgICAgICAgImRlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjMiLAorICAgICAgICAgICI4ZTNlNzcyZjM5IiwKKyAgICAgICAgICAiOWViNzMxZmE2ZDhkNWI3NTgxZjhmYWQyYzgyMjViYzk2ODM0YWY2MWRiM2Q0MDlkZDU2MzA0YWUyM2VhNjI2OSIKKyAgICAgICAgICAiNjNhNGQ4MDQ0MGMyNGU0MzFlNDE5NzYwOTAzYWM0NGJmZTQxYTc1MDgxYTU0NjJiYWU2NTQ3YzBlN2EwNmU5MSIKKyAgICAgICAgICAiNjBkZjljMDFmYTZjNTM1NGM4MzMxOGRiNjU2ZGVlMGE0Mzc3ODdmYTQ2Mzk0ZTU1MmVhNTMzMTU1OWI0MDE3YiIKKyAgICAgICAgICAiYjZhMGUxZDZmYzhhNjViNDVkYTBjNDVkODg5NTQ4NjFjZDZlN2E0MTdlMDM3YjFiMDUiLAorICAgICAgICAgICIyNDRhODYzNDUxOWFmNDlmNTY5YjY5ODZhYjQ3Nzk2NGE2YjI5MjBkODQzYTFkOTdlZmQ3ZmVmODNlODFiYWRhIgorICAgICAgICAgICI0YzRiNTYyOTYxZWY0ZTFmYzMzMzQ2NGI5MjZiZDc0YjA3YWQ1MGM2NWI2ODE2ODNkMzg5ZmU0MWQ2ZDIxM2I2IgorICAgICAgICAgICI0NjlmMTgyYjE0YjQ2MmQ3MmMxY2UzOTI4Y2E4MDZkOTY2YjUyZDQyZDBiZmQ2MGM5ZDA0OTE0ZDUwODM3Y2RhIgorICAgICAgICAgICJlMDliMzMwZTM3Mjc0NGRjZTE3ZjE4ZTk0ZDcxMWM4YjU4ZWE0NDlmMTQ0OWQzNjlmYWVmNTE0NjgzZDMwMTYwIgorICAgICAgICAgICI3OSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi40IiwKKyAgICAgICAgICAiZGNmYWU3NzE4YzI0N2M0MGY5YTJhM2MzNTM1YzUwOTI4MGM4NzNjMyIsCisgICAgICAgICAgImI5M2JiZWE2YzE4NTNmMTUzYjVlMDFlN2U0ZTVkMGM2M2Q5ZGZiMjQ1ZmM2Y2Y2NDA0M2Q3YTkyMjBiMGI4MWEiCisgICAgICAgICAgImMyYWY2NTZiOTk3MTRiYTQzMGUwYTM5Njk1ZDI1ZmYyNjliMGI5Yjg2NWZjNGQ0ZWVlNWUwN2E1YjViZTM1NDMiCisgICAgICAgICAgIjgyYWFhNDE0YmM2MjA4NTQ1Yzg2Y2UwMjM4OGMwN2IzNzZmYjAyOThjMzdkMWFjMzllYTE4OWIwYWRmNzgwZjYiCisgICAgICAgICAgImU4MzBiY2U5MTdiNTBhZGI3YTMxIiwKKyAgICAgICAgICAiMGM0MTIwNTJkNGVmNGFiNTFiMmY2MjM3MDVmMDdmNDFmYWQ2NGRhZmZkYmE2MjQ0ZWZkNDdmNTE5ZGUyZTcxYSIKKyAgICAgICAgICAiMDFhNmM1N2QxZjI4YjZiZjdiNWM4ZGJiOWZlN2IxNDliMGViYWE1MzU5NjE5OTM3NmRmNDkwMzIzZDI1YzIxNyIKKyAgICAgICAgICAiYmM3MWJlMzdmMTgxMDM1Y2Y0NTdlYjVjMDZkNmEzZGVkM2Q2NmQ1YjM1ZjA2MTgxYmY5NGQwZWMxM2VjNDQ3YyIKKyAgICAgICAgICAiNzA4MjMzNDkxYzU1NGY5ZTk5MWY2YmNiOGI3OGQzM2M5YzM2OTU1YjhkY2U1MTc5ZmY4YmM1OTI0NGY2Njc5MCIKKyAgICAgICAgICAiODciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuNSIsCisgICAgICAgICAgImQ3MWRkODdhMTM5OTFhMGRhMmM3NGE1OGIwNDg1NjM0YjNlMDRmZWM5ZTNmMWNmMjYwNGE5M2JlZDc5Njk2ZmEiCisgICAgICAgICAgIjYzNzhlYjFiYTBlNWQyMDQ3MGE0IiwKKyAgICAgICAgICAiMDk5MDU5OTI1OGU5N2EyZWJmYmUxMDk3NzIyNWM0MTY3NjJlOTVkMjU1M2E4MDFmNzI2Y2MyNDliY2RmMzIyMSIKKyAgICAgICAgICAiMzI1ODU3MTlmYzEyMzk5YWNkNzI1NGFlNzdkYTM0M2ZlMmE5YTNhY2IxMWMxNGUyMTRlMmQ4NWE3NjcwOGMzZSIKKyAgICAgICAgICAiNzIxNzNkYTVkOTkwNThlMGM4NzA5ZWRmMjhjMzY5Mzg3NjlmMWYyMiIsCisgICAgICAgICAgIjBmZjljY2U3YjY5ZDdmY2E0OGQ3YzRmNmNjZmYyNDhjM2RiODhiZjFiNzg1MmNkOWQ4NTI1YzNiNDFlNDRhOWIiCisgICAgICAgICAgIjU0MGYyMDhmZmJiOGM4NWJmYTg5MGFjMDJlOTk0OTU5ZDZiMDdmNjQ4MTQwNzg1NTZmOGVjNjBkYjM1N2FjZWEiCisgICAgICAgICAgImY4MzkxMTVmYWQ0MWY4OTE4ZDY5YzIxYTNhZmZlZjZlYjE0YTVkMmNkMDY0NWNkNzA2YjU4MTQzMzk0YTI3MzUiCisgICAgICAgICAgIjM2ODJlM2JhYTE5ODAwMmUxNjgwZjI4ZjM0YmUwODlhNTc4NGFjZTVjYTZiMTEwODk5ZGZiOTU4MmYyZTRiMmEiCisgICAgICAgICAgIjQwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjYiLAorICAgICAgICAgICI1ZTRiMTU4ZjhkY2JjZGQ3ZTMwODM4NWI0MDE5MGY1ZGVmOGNmMzMwNWZjNDlkZTYzYzllMzViNDAyMzZhZWUxIgorICAgICAgICAgICJmNDU2MjA1YTUyNjdhMmFhN2Q4OGNiMmMxMWFmN2YyODk5ZDAxZGExYjJjNzQ2NmZmZWY3IiwKKyAgICAgICAgICAiYTUyMmY5ODA4ZDljMDFkOGZmNzk3NzVmN2IyMjA5OGZjNWZlMzI1NGUxYjA0ZWIxY2I4NTBlMTBlMmM1MDY1ZSIKKyAgICAgICAgICAiMjMyNzRkYzBhMDU1ODc0MzZkYTM3NTU5MzM1ZmU3MDkzZmE1ZTdhMmE5YzlhNGRjYWYyMzUxNzlkMGU5OGZhMyIKKyAgICAgICAgICAiM2UzNGI2MTYiLAorICAgICAgICAgICIxYzBlODZhNjM2NmJlYjFlMTJkNmJjZmE2YWQ0OTQwNmM4YjdlNDhkMWQ1YmU0NWNiZDgzMTk0OTg3NDk2ZmFhIgorICAgICAgICAgICIzZTIxOTI3ZWM2NjJmNTAyYWMzZjkxYTRiNGI5MWQxNjBjMTk4NmE1ZWQwOTI3NjY4ODNiODU1NWUzYzkzMTRiIgorICAgICAgICAgICI0NGJhMzM4M2RiMjg3NDIzYWY5MWI0MTM5MThjMDgwMmM3Nzc4ZTQ2YzI5NmRjOWYwNGNkYjhiMDZhZGM3YzUzIgorICAgICAgICAgICJkODU5ZjQ0MmNjYmQ1ZmZhYjVhZjc1MmI5NzliZjUyM2E0MGExZDA4ZDc2MDYzZmZiM2Q1Y2ZjODJmMTVlYmQ2IgorICAgICAgICAgICJkNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi43IiwKKyAgICAgICAgICAiMzU5YmE1MDc1NmE4MDMzMDQwOWQzZjIzNmEzNDBiOTBmNDJmNzMyYTg3NzExZmUyMjM1MmQ0YzgyNTBkNDU0NyIKKyAgICAgICAgICAiNWUzMmI5NTg4M2UxNjA5NzU1YTEzY2RmYzFiZjM5NGM1YzY3MzY5ZWNhMWY5YTMzZThiYSIsCisgICAgICAgICAgImY5ZWJkZGFjOWRlMTcwOWEwNmJmNmJiZGRmNTg5NGUyM2I5NjJiYTBjMDY0YmZjZDdjYzU3NjYwM2IwYTFhMWYiCisgICAgICAgICAgImYzNWQ2NDVlZTg3YWM2ZjgyMWE2YTE1MWU2YmJiMDViZjNlMDVjZDlhNmUyY2Q5YzZjZjU1M2JmYjA3YmQyZmQiCisgICAgICAgICAgImEwNDBkZmI2IiwKKyAgICAgICAgICAiMDgzMzYwZTY0OTA1OWQwMDY1OGRiYTIxZjJkZjI4YTI3NjRjNDU4OWY3YTc3ZDVhZjk5NTc5YThhYjQ0ODBjOCIKKyAgICAgICAgICAiMjZhNzdjMmZiNzk1NGY0ZjMxZmUxZDllYjFiZjQwZTgwOTU3N2YzOTMwMWFkM2FiOTViMzgxNmM5MGVjM2YxYyIKKyAgICAgICAgICAiZDYyOWM0Mzk2MTc0YmVkOWZlMWUwZjQ3NjgyM2U1M2I0MWQxMzViNDlhMDJiMDBlZmZjNzYxZWM5MDk0MjNhZiIKKyAgICAgICAgICAiMTU4NTUyMzdiNzdlZTA3ZGYyNWFiNGU4NTg0NjdkNGNjZmU4MDg0MzI0MWJiZjg4ZWI0Zjg1M2VmNGI0M2JhMyIKKyAgICAgICAgICAiYWMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuOCIsCisgICAgICAgICAgImE5ZjM5ZjhiYTA2NDY2MjUwYzI2NWRmMGNhNDY1NzBhMTYwMTEyY2YzOGZkNzQ1OTk5IiwKKyAgICAgICAgICAiODhiM2MyOGJkMzk5OWE4NjBiOGRlNzc1OTM1YjhlZDc4ZmEyZjI3YzI2OGIyNDNhMDI0NWFmODY3MjI1NDcxOSIKKyAgICAgICAgICAiZjIzYTRiN2ZlZGMwMGQ1NGUxMmU5ZDcwMWY2NDY5OTQyNGI2Yjg3ZDE0ZDk2NzZlZmE5NTliZTIxYTA0YjY0MyIKKyAgICAgICAgICAiNWQyNTEwMDNkZDE1M2Q3ZDA4ZmYyOGQ5M2E5MzIwZGMxYmJjM2RiMzk3YTU0ODk0ZjIwNTc5ZjkzZTRlYWQ2NSIKKyAgICAgICAgICAiYzMxYTQwN2ViNCIsCisgICAgICAgICAgIjE5ODM5NjUwYjkyNWYxZjk2ZDYxMWU0ZGJiOTE0OTkzNTQ1YzY3MzkwYzMyOTM1ZmJmODIyNTlkYWQxMGYyMzciCisgICAgICAgICAgIjMwZWI0OGYzNDIwMDQ2NWEyMDM4NzI3N2UyYjk2MWUwODMxOGQyMDc3NDQ3YzkxMDkyNzFlNGRlZDhmZjNkYzQiCisgICAgICAgICAgImYzNzllZWU0NTVhZTk2MDgxYTFhZTI0Yjk2Y2E3MzBhNjJmN2FjYzVhNWVhNTIyOGUzYTQ4ZWE2NzQxY2IzMGUiCisgICAgICAgICAgIjgyOWQ1NTA5Y2NjNmMyODdjNzI5MWYzYTFkODlkNjI2YmM5ODE1NzdkZTUyYTExZjEyYWUyMTQzZDNiMGI1MmYiCisgICAgICAgICAgIjg2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjkiLAorICAgICAgICAgICI2OCIsCisgICAgICAgICAgIjUzOGIwOTVlNGYyYWQ2NzczMDY4NzQyMTkxNTI0MjI1MWQwN2Y2NjFlZGFjN2ZlNzllMzFkNmMzNDVhZmY1OWQiCisgICAgICAgICAgImYzODhjNzE4MmZmZjBjMDQyN2I1OTkzNWM2OTFkYWI4YmM0MmJlNDdkNzY5MTE4ODBkOTE3Yjg2MjcxOGI0YzEiCisgICAgICAgICAgImMxODg4ZDQyMjBiOWY4MjMxYWNkZjEyZDliODUxODZiZTA5NTBjMWFmZjg0Y2QwZmUzNjU4NmE1MGU3ZTA0YjEiCisgICAgICAgICAgIjcyY2E5Yzg1OWUyZGVkNmI4ZWE1NzlkZDVlNmVlZTc3MmNjYWE2YjRhNWQ4YWIxNzMxYTgzNWQ2YTgiLAorICAgICAgICAgICIxZTg2OGFkYjBlNjUzMjgwNjA0ZThkM2JjNGQ5Njk4NGEyMGFhMDlkNDgwYjRkZmZhYzYyYmE3OGNiYjdlZWQwIgorICAgICAgICAgICI2NDVhNmQ5NGQ5ZDJmMmQxZTkxN2MxNDZiNDFmYWEzZDFkMmMxOTAxMDUzNjhmYjQ4NDA2YTFkMjQyNmFmM2RjIgorICAgICAgICAgICJjODViZDAyZDVjMjZjODk3Y2NiMjJlNTc1OTEyNjQxYTE4OGVmNGFjNDdhMGE5ZmU5YWEyNzA2ZDhlMTA2MWY1IgorICAgICAgICAgICJkOTMwNjNmNDkwMTcwMDNiMjMwOWNhN2Q4ZDM2NzAzYmZkZGEzZjdmNDNkZjE1OGExNWJiMjIxMzlhYWUxNTEwIgorICAgICAgICAgICI3NyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi4xMCIsCisgICAgICAgICAgIjM1NjU4N2U2YzZjMGI0NmMyNDQ1ZTAxODYzNTI3NmFiODQ1ZmQxMDc2ZDEwN2YiLAorICAgICAgICAgICJlNWQzM2U0ZDkzYzcwODQ0ZWU0YTAxNjU1NjI0MmQwOGU4ZTYyZjFhN2Y3OTQ3NzllMjIzZWU5ZGZiMjMxYzNhIgorICAgICAgICAgICI1MjBmMjk3ZTUwNzNlNGY5MmY1MzVjZjE0NDU1N2Y5NGVlMWUxZTVjYzZiZjRjMGMwYzhlNWVkNDBkMDY2MzU2IgorICAgICAgICAgICIwNmY3NTRjYzJkZDgzZmUwMmM1NzZjY2QyYjgzNWZkMGY1M2E5OTA4M2Y0ZDE1YmZlOTI2ODg5OWVmMDlmZjVmIgorICAgICAgICAgICIyZjNjZWM5ZjliOGE3ZSIsCisgICAgICAgICAgIjE1ZDM2NGE0NDk5YjMwYTVmNzhiNmQ3ZDRmNjY3YTFmNzZkNzE1MTU4ZjI4MDExOWIwNTVlMWYyNjYzZmM3OTYiCisgICAgICAgICAgImUzM2MwZWI2NGUzNGE4ZGFkYTVjODE3NTQyNTdhOGJkZjBlZDgxMTVmNjA3YjdjOWNjYTQ4MWY3NDUyMGI2ZDkiCisgICAgICAgICAgImFjOThmNWU3MmMyYmFmM2NiYjZiZDliYWVhNWQ3NTg2MGNiZGFlMzQwM2ZkNWMzNzk2NGFhZTY0MzY2YWIwOWIiCisgICAgICAgICAgImM5YzY3Mjc2OTUxNDQ4MTkzYmI0YjFhZmEyNzA3OWMzNDE3MGEyNjk1NjUxMGQ0NDI3NjQyMjk5MDg0MjBmZTgiCisgICAgICAgICAgIjBhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjExIiwKKyAgICAgICAgICAiZTE1MzI3NmE2ODc5Njc4ZmVlMTk4OTQ4MjhkNjI2MmVhMzlhZDA1NGM4OWVkY2IyM2Y3MmRjZGExYjAwNzNjMiIKKyAgICAgICAgICAiODc2MjAyMThkOTJkMGViMzBjNjJhZmJmMmI0NWRmNjJkMDY2NjVmODA1MjViNjcyN2Y5NWUzNDIyOWU2ODJhOCIsCisgICAgICAgICAgIjJhZDcxNDJmY2ZhM2JkYmViNzU1YjJjNWI1Y2YxM2U2OTY5ZWI3M2I3YTA2YmMyOWJjYWQ3ZTc1MzBhNTkwMjMiCisgICAgICAgICAgIjBmNmE0M2ZjMDNkNmMzYTljNjQxZTUzYTQxNzdkNTc1MDI5MWVjNmQ0YjMzZjg3MTY2OGFkODU2OTA3NyIsCisgICAgICAgICAgIjE3OGU0OTc3MGE0YzhmZmI3ZjY1ZjM4MmNkYjU3NmU2MDhlOTc1YzQzNzEzMzkxMDJiOTUyYTFlNzFjYmNiOTEiCisgICAgICAgICAgImZkY2QwYzBlZDVhODVmYmQyNjNkYTZhNzRlNDkxZmIwNGI2MGE1OTYxZDhlNmFjNzI0ZWM4YTgxNjFjMjJhZTMiCisgICAgICAgICAgIjEwNDA3ZjU5ZjdlNjAyZGE0OGFhMmRhZDY4M2U4OGRiMWQ4NDI5NWUwZmJhNWZmMmY2NzNkZjMyODU0ZDAxYjciCisgICAgICAgICAgIjFhODk0NjBmZjBlNmUxYmU5OGFlYmZhMjI3ZTM5N2VhY2M4YjIzMTc0MTQ3YzQ0ZTE2MjAxZWM2YmFiZDE2NWIiCisgICAgICAgICAgImE0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjEyIiwKKyAgICAgICAgICAiZmE0ZWI5MzFhN2UyMDkwZjMxZWRiMWZmN2Q4MzYxIiwKKyAgICAgICAgICAiNDM3ZmExNTFmNDM0MDVkYjIyNDIyY2IzNWQxYzU3NjExNjFjYjlhNzhhYmNiNmYwNmRjNGU3YTg2OTQ4MWY0MCIKKyAgICAgICAgICAiYjIxYWUxZDMzZTA3NWM0ODVjZDg1MDFhM2NhYTYwMTgzMjViN2Y4NTBkNGQ4ZjZkY2ZkMmFmZmUxOWQzZTZjNyIKKyAgICAgICAgICAiMDg3NGU3MTAxMTE0ZjBmYmI5ODIyNTgxYmFlNmJhMmJhMWU3NDk4ODgxYTVkYzViYjg4NTI3MzhhODJmYjA2ZCIKKyAgICAgICAgICAiMTUyN2I0MzM0NDg3YjMyNDAxM2UzMmJjZjE3YmFiIiwKKyAgICAgICAgICAiMjI2ZDc3NjcwMGM1ZTFkZGI5OTk0YjMyOTFmMWQzMzRiNjlkZDg2MzA2NWZhODM0MjFlMDFkNTIwNmVjMmNkYiIKKyAgICAgICAgICAiODk5MGNmNzg5NzMxMDlkYzlmMTI2YjYwMzNkNmQ1ZDY5MThlYzg1MGQ2OWM3MTNjYjViYmUzMmVlNTllNDQ1YiIKKyAgICAgICAgICAiY2I0ZTUwYzZmMTY0NDM0ZDJhNmNhNjM5NjlhMjliMjUwMzY0MTViMGY3Y2IyMWI0ZjhiMzRhOGQ5Yjc0NjUzZiIKKyAgICAgICAgICAiZmY0ZjVkYjlkMWE2YjUxNTJhNjQ0ODM2YjY4YjhlZGU5ZGM1YTE2OWRjNjBkYzVmYWM0NjhmMjQyNzg0NTgxMCIKKyAgICAgICAgICAiNjIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuMTMiLAorICAgICAgICAgICI1ODgxMTVlNTM3MDllYjE1YTMzNzRjMjUzMjllODgzODI2ZTMyMTNmMzdhMWI3YTY1ZGUxMmRmMjMxNzJmMTdmIgorICAgICAgICAgICJhNDk2ZmY0OTJiMDkxNzNiYTBjNmY1OGMyOTNkNDdmMTQ4IiwKKyAgICAgICAgICAiMDc4MTg1ZTA4M2NiYjA2ZmUxYTc0OTc0MzUxNWYzYTBiNGIyNmY4NTNiMTBlNTY4ZTg3MDgyY2U0NDQxMmNhNiIKKyAgICAgICAgICAiN2U1OTg4OGNjYzBmNTAzMTAxNTIxYWNhYmZkOThmYjdiNWMxMWQ4YTk0MWJhMDNjNDk1YWEwM2UxMzUyMmY0OCIKKyAgICAgICAgICAiN2Y2ZTE2MTZiZWMyMDcyYjM5OTZmYWVlMjkiLAorICAgICAgICAgICIwZTdlNTBhN2IyNDdiMDI5N2RlYzY1Yzk1MjNmNjdjYWI2YjUyYTAyNWY1MzMyMGU5NDg2Y2QyMDc0MTBjYWRjIgorICAgICAgICAgICI3NGU0YjAzZmMwNmJiZWQ1OThiMDIyYjYzYjM3NzYyYTY1ZmQzNTFjYjI3MjdmM2Q4MDM1YTRjZGJhOWM2YTMxIgorICAgICAgICAgICJlNGVkNmJlYjRmZWQzMTM0ZWI2M2RmY2VhYjRmNWYyNDU5ZTU5ZmNhMDE3NDc1OGFhYjM3NTNiNWMxOTNjODFlIgorICAgICAgICAgICIxMTQ5MGY5N2I2MjJiNzNmYTczZjhlYWU3ZGE4MzkzNDg0YjgyOTc5NzFhM2U5MjMxMjljZTQzNTdiNjQ1Y2M2IgorICAgICAgICAgICIzOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi4xNCIsCisgICAgICAgICAgIjIwZjFjZmFhNjM2N2M3YzM5YjU0YTAiLAorICAgICAgICAgICI0YTFjN2I3MGY3ODNiYTBkNWEyNmQ0NjQ1Y2YwNWZhNjEwZjViZTAxNzdmZGRlOWYyYzM0NTA1N2RiNDI0NDU3IgorICAgICAgICAgICJmYWE0MzBjOTQyNGE1NGY3ZTU1ZmNmZWU2ZmFlYTQyNDRjMDM5Nzc0ODFlZGZjYmIyODg4MzdjNmE0OGRiZDcyIgorICAgICAgICAgICI5NjY3N2EyNGUwNmNjOWQ4NWU2ODhjMTQwOTBmYTI4MzBmZjQ5Njc5MzNlYWYwZGI2OTRiNmFlNDAyY2FmOWMyIgorICAgICAgICAgICJiZWZmMDRhNTJhMmY4NDdmZTQwZjRmZmJkZjNkNThiN2M0ZmRhOCIsCisgICAgICAgICAgIjFlNTI4NDIwYmNiYmE3ZDU5YzZjNDBkNDQ2ZDFhYTk1NmFmZjAzMDUzNjViNGQ3Y2U5ODEwZjIyYzM0ZjA5YTUiCisgICAgICAgICAgIjU1ZTVmZmJlNTE3NTAzN2Y5MDNlYWE2YzQwNTYzNjM2ZDM4MWY0NTMyNWI1ZTYxYTJjNzA1MTEyNTU2NDAyYTciCisgICAgICAgICAgImRjYmU4NmNmYTU0YTZlNmE1MDM3OGQwNWUyMWM5NWNjNmM0NWZmZGQwNTE3Zjc3YTM2YjIyNGQxNzAwYTFmM2UiCisgICAgICAgICAgImJiODFkMzY3OGE2NmUxNDUzNGE4MGE1OThiZDcxNzI2ZmUzMjJlNzM5YzE3ZWJhNTA4ZGE4YTAzMWEyN2Y2YmIiCisgICAgICAgICAgIjI4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjE1IiwKKyAgICAgICAgICAiNzM2MGNkYjZjMTU5OTZiMDYwMzMxZTlmMmEzNjg5OTVjMDY0YWRkYTU2NTU5NTI3NzgyYzE3MGM2OTFiYjNiZCIKKyAgICAgICAgICAiM2IiLAorICAgICAgICAgICI1OGRkODBmNGZkYzVjOTVkZDllYjU2YWM4MGEwMmQ1M2U4Y2MyZWZiM2NiYWM2NzI3ZDc1YjFlN2IzNWUwNTQyIgorICAgICAgICAgICIxOTQzM2FmNWFhZTE5OGZkNjJmMmVjZDJhYjhlMjYzODc3YjVjOTFlZDUxM2UyMzU0OTdhNjMxOTJkYjlhOWJjIgorICAgICAgICAgICJiM2JjYTk3YWU5YmZjZWRmOTM1NjQ0YjJkM2JjMjBlMDJhZTVlNzQyNGU4MTJhMjk0OTYxNmI4MjAxIiwKKyAgICAgICAgICAiMjAzYmNkZTFiNDEyZTNjZWEyNWI4NjMwYjIwOGY5NzhhYjIyYzFkYTgxMjUwNzZlMTBmZjkxZDdiY2ZhZWZkNyIKKyAgICAgICAgICAiZGNkODM5MTY1NWM4ODZlOGE5NDVhN2Y1N2E3NGNlMmRjMGU4ZWM3ZmRiMTdjZjE5NTc4MGQzY2U4MGUwZGRlNyIKKyAgICAgICAgICAiNjM5YzY3NzIwNWI4ZjllY2VhMTE1NDY4OTc3YmRlYTM1MDBiMjM5ZmNlMGQ3YTk0YmU2ZGUzMzNlYTdlY2MyMiIKKyAgICAgICAgICAiYzA3ZTY1ZDBlYmQ2NWEzOTBhMTg1ZjE4MTc4OWU3Y2E4YzFhYzJmY2E4MjhiYjhkMjgyMjdlMzhjOTg4OWNlMCIKKyAgICAgICAgICAiMDgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuMTYiLAorICAgICAgICAgICIzMTliODI5NGJkZjA3Y2Q0MDY4NWU4ODAwOWZhN2IzZjEyOTAxNjBlZjMzMDY3YWRkNWVmNGQ4MGZkIiwKKyAgICAgICAgICAiNGUwN2Q3Zjk2M2JlMjRlZTZkOGJkNGRkOTVlOWUzMzM0OTMwZTAzZTY1OGQyOTZiYjc5NTQ4NmQ3MjRlMDc0MSIKKyAgICAgICAgICAiZGQ1MDczNDdhNWI1N2I3OWM5MGQzYzkwYzFhZWE3MTYxOTA5MWFjYzgxOThiNTUxMjJkYTUwOTk1ODJlMGRiNyIKKyAgICAgICAgICAiZGEzY2JkM2NmZDg1Mjk4ZjMxNTU0ZTI5Y2JjYmExMTk5Y2U0NzAxNjNjYTAzMzdjYzQxNGFkMzI3NjcwODExMSIKKyAgICAgICAgICAiZDYiLAorICAgICAgICAgICIwNGZjN2JiNmZiNjQxOTYxMmI2ZWY1NGIzY2EwMGE4NzQ2NTE5NWMzN2Y3Zjk0MGMyMzNlY2IxZDRhNTA1ZDNjIgorICAgICAgICAgICI1NmVkMjNlMDllMDNmMTQ1NGYwNGI1NmY2ZGEyNWQwYTZmY2FiMGM0MDA4NzRhZTk4MDZlZTE4NzgwYjc1YzZjIgorICAgICAgICAgICJhNTY2MjllNTc3ZThlN2I1ZDJmYzJjNDQwYjk4MDAxOTViNTg1MTFiYzNhNzk1NDQxMmM4ZjI3M2NjMGU5ZDk3IgorICAgICAgICAgICIxYWJiZGRkNzAyOGU2Zjg0ODc2YTMwNThhNDU0ZmUyZjMzYzc1ZTNkZDA2MmYxMTljZDNlY2E4MTA2YjZiZmJlIgorICAgICAgICAgICJhNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMi4xNyIsCisgICAgICAgICAgIjc5YzY4MmEyYjk3OWZlNWM5NjMyYWYxODMxYzJhYWNmMGM2YmY1NjY4ODViZjUyNTYyNTAiLAorICAgICAgICAgICI1YzJhOTU2ZDRiNWYwNmY3NTA4MzVhYjhiMjljZjdjNjQxZDc5M2M1NTZlMTJhYWJhOTU2ZGZkZTQ2MzJkNWU1IgorICAgICAgICAgICIwMmQ1OTA0MTc4M2FmZDFkYTdiMmUyZDI0ZTIyZDY0NDc4MzViZjZkNzdjNmVlYmMwZDJkNjRlN2VkMmMxNDE3IgorICAgICAgICAgICIxOGFkODY4N2M1OTdiNzcxOGYzOGJmMWEzMzE2ZWRlZmY2YjcyZTI4NTE4Mjg4MDdiY2ZmYTliOGUxYTg1MmYzIgorICAgICAgICAgICJmYWE4MDdmNiIsCisgICAgICAgICAgIjI1MWQ0ODU2YjdhNzU4MGQ1Mzg4MDE2MjI4MWJiNGU0MWJkZWIyYTg3ZGRiZDVhZTFiMzA3ZDQ0NDhiZTFmMTEiCisgICAgICAgICAgIjY5NWZmNzIyYzQzMjQxNWQwYzc0YmFhM2ZjMGRkNTExNjZhYzg2NWIzMTBjNGY1Yzg3MDc5ODYyNTRjODk2MDQiCisgICAgICAgICAgImNjZGFiY2U2YzY5MjQ0NjYyMTg5OGI0ZjVhMDhiY2RmNjQ2MmU1MThlZTNhZWI3NWUyNmQ4ZjYzYTA2ZmNiYjMiCisgICAgICAgICAgImRmMDk4Y2VlYmIwZmQyZjYzN2UzYTc5MzdmNGQxOWUzYTE5MjRjMTYwODJlZGMzMzNjYjZkZTM3NjM3MjQ2ZTQiCisgICAgICAgICAgIjk4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjE4IiwKKyAgICAgICAgICAiMWUwZDE4MDdhMmJkNDk2YmIwY2JhODQxYzc3MTU4YmZhNWY4YWE3N2QwNTY3NWM2NGE1ZWIxODU2NTkxZDM0OCIKKyAgICAgICAgICAiNTRmODY1OTI1YjM3MWI2ODZhYWFiNDQ1OThiNGExNmFiNmI3OTM0NGQzYzIzZjdkNWJmMTczYjg0MmQ3OGMiLAorICAgICAgICAgICJkYmFmYTUzMzJmMGI1NTI3OTY2MzZkOGEwOTI4YjdkODdkOWNlZTNkNGJlNmEzMWM3N2UxNGUwZTVkZmRkNDAzIgorICAgICAgICAgICJlZmI5OGZhMzM4ODE2ZTEyNjJjMDY0OTZmZGU5ZDU1N2MwMGNjMGRkMzVmYzMzYWNjZDc5YTMxNTA2OTBlYiIsCisgICAgICAgICAgIjFiMmVjZWE1ZmE5MDAzZmFiNjU1OTg1N2M2ZDk0Zjk1NzAwM2Y0ZTQxYzA5NDU2NDgwNGZlNjk2MzllNTQwYjYiCisgICAgICAgICAgIjhmMjYzZmFhZWNhMTk5Njk3YTQ4ODU4YjhhMGZjZWE0OTEwNTdkZjJmYjhiMzVkMDkzZDg5NGFlYzE3YzVjZGUiCisgICAgICAgICAgIjVkZmQ4ZjMzNTEyYmNjNjZjZGU3NmRhMDczMzY5ODVhOTc0MzViNmVmZWU0ZWUwOWQzYTI4YWZmMzRjZTZhZTgiCisgICAgICAgICAgIjc1MGRhNDFlMTZjYTQ3ZTkzODgxOGU0NGE5YjQxZmU5MWE2YTgwMWQzNTVlZThkNjYwZTI3ZTRmZTJjZTdmMzIiCisgICAgICAgICAgIjViIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEyLjE5IiwKKyAgICAgICAgICAiMWMxMDVkNWViZWEzNjY0NmE5NzI4NGMxN2E4NmM0IiwKKyAgICAgICAgICAiYzZmODAzNDBhNjU1N2UwNzUzYTk1NzNmZTRmNTIxNDk3N2VmZGIwODJhNTBlYjVkNWM1MTdkNDY3MjlmZDJhMyIKKyAgICAgICAgICAiNGFmN2NlZTFhYTQ2Yjc5ZDQ3ZTI1ZDgzMDkwYWViNGY1MDIyOThjMDMxMzcyNGZhYjU0ZTU0YmViYjQ4ZDZjZCIKKyAgICAgICAgICAiOWJlYmRkY2JlZTBmMDc1Mzc3MjdkNjVjNTBlN2Q0Y2MwYzZkMTlmYzQ4MGJhNTc4NjcyNjJjZjJlZWRkOWNmYSIKKyAgICAgICAgICAiYmE2MDdkNjU4Mjg3ZWJhNDJiNDY5OTQ0Y2NiNjEyIiwKKyAgICAgICAgICAiMDViMjNkYzBjNjJkOTBjMTc3MWViYTM3OGU0MzE3OWQ3Y2E2YWY1MTVlMjYxOWFlNGQ3YzhmYzhiZGEzNzhjYiIKKyAgICAgICAgICAiZjdhMWRiYmExYTE0ZjQ5NGM0ZTBkNzEzMzg3OTdjN2VlMDZlMWE3OWU5ZmYyODU2ZmJmNzRmZTZmMWE3Y2E2ZSIKKyAgICAgICAgICAiNWI5Y2EyODNjNGM5N2U2MWNmOWY0MDczZTAzMmNhMjdkNjliMWI0ZWViZWE3N2NjOTVhOTI4MWYyNmI2NGEwNSIKKyAgICAgICAgICAiYTkzOTQ0YzgyYzVhMTM0MjhlY2UyMWZiNDQwMWFkNDI2ZTdhYzFmMDViZmY4NGIzNDdjZGM0ZGJlNTJlNjc4YSIKKyAgICAgICAgICAiZWQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTIuMjAiLAorICAgICAgICAgICJmMTA0MDJmMDAyMDVjNTI3NTdlZDZlOWQiLAorICAgICAgICAgICJlMmFlZTdmY2Y0M2NlZGUwNzU1MmEyZGZlNWI1YTllZjgwODI3NmQ4ZjEwZWIzZjliYzUwZjFiZDk0MGFhYWU2IgorICAgICAgICAgICIzNGM5ZDhhMDc4OGQ0NGQ0MWU4YTVjNjAzNjQ5ZWZlYTgzMDMzMjMxNTE2YzY5ZDMzZTEyZjFmNWQzZjBhYzFmIgorICAgICAgICAgICJjMjNhOWIzZjVkYTRlMGVmNmU0NTUwY2I0M2ZkZmYwMmIyNWRhYzg2MjcyZDY2ZGI1OWNkZDYzNWY5YzBkZDBkIgorICAgICAgICAgICJhYTA4NTc5MTBjMTU4ODFiMTYwZDcwZWE1MzQwNWFhOTU5ZjQiLAorICAgICAgICAgICIwYjk2NTYzMTc4MzJhOTQwYzc5NWJiYTU4ZGFhMTU5YTRmNzMzZTgyNmNlNTVhNGVjNTY0MzNjNTE2ODQ0NDRjIgorICAgICAgICAgICI3OGUyZTJmY2IzN2Y4NWFkODc3OTE2NTIyZDhhMzVhNDNmNTNjNTk1MTdhODE4ZTUyMWUxOTgyYTUwOTFiZjJjIgorICAgICAgICAgICI2OGIwMGVlNDlhYmQ5MGRkNzc2YzAyZjY0ZjM0ZjY4MGE4OGVlZTA1ZWMwODg4OTJiYzBhOTU1NWIzZjIwYzhiIgorICAgICAgICAgICJlZTU3OWMwZGRkZTE1MTFhMThhZjk4YmMxZDljZjkwYjgxYmYxMzJhYmQ1ODk3MGIzZTg0ZDgxNGUyN2QwMjViIgorICAgICAgICAgICI3MyIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAzMS1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICI1NTVkYzJiYWYwNDFiN2YwOWEwNDc4NDIzYWViY2I1ZjQ5Yjk1ZGJlMTU3MGU5YTU0MjEyOGQzMzIyODc4NjZhIgorICAgICAgImM0Y2M2M2U3NmY4ZTNhZWYyMmM5NzUzYTU0NTE5OTk0MjQ1MjQxOGE2N2QxYTIyMzBkZGI2ZjQyMjJjNjYzZDMiCisgICAgICAiOGU4MDA1MGVlYjY3OTU2ZWM1ZjU0OTk0YTBiZWE2OTVmYTU5ZmFkZjJkY2ZlN2FjYjU0ZWQ5ZGEzZDBiZWIxMiIKKyAgICAgICIyYzhhNjkxYjBiYjUxYWU2NWE3NzRkNzViMWIzNDljYjY4YzUxN2NiZDM4NmFlNDgyZjA1ZWU0NjAzZWNmMjk1IgorICAgICAgIjVkIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA1OTc4N2JiMDEyM2ZjZWQ5OGQ5MzQxYjdhOGE5OTllZGI1MDc2MzA4ZTZkMDAxMTIwM2JlMGRkZjlhNDExMGQiCisgICAgICAiMGI2OTJjMWUyYmYzOTAyZWJjMDNhMDU3M2FkMGMxOTNhZmIxNjdiM2FlNGI1MDI4YTVhZWJiMjIwNGVmMjNmOCIKKyAgICAgICJlNTgzNjBiZTk0ODQ5NTFlMzQ3MTExNzYwNjJlNTNlM2Y2Mzg3NGZjOWUzNTkxYTlkOTA2OGFhNWU2YzhjN2E5IgorICAgICAgImFiMDhlOTc5MjQ3MDA2NmQ3MWEwN2MzNDMzZGQ3MDNhNDJhNmIzYTliMWJmZmIzMTQ5NDk4ZGNmZjhiMzU3NTYiCisgICAgICAiZWQiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy4xIiwKKyAgICAgICAgICAiN2JjODFkODE0NmUzNTkiLAorICAgICAgICAgICI3NjY1NWU0YWQ4ZmI5OTM0ZDE4NDdjYzkwYzAyNDczYzU3MmI1ZmRmZDE2NGE5NzBhM2NkOTZiYzhjZDc5NmFjIgorICAgICAgICAgICI4MDJjNTAyODIyOTBlYWQ0Yzc3YWE1Y2MyYTdlMzQzNDE4YzlkZjQ3ZWZiODg3ODZhZjRjYzhkMTgyMWM1MDA3IgorICAgICAgICAgICIzOTA5ZTg0ZjdiNDUxYWY0YTMyYWVlNmM3Y2M4OTdlZWY3NjYwZTFjNGM1MzVkMTAwMzlkM2FhMjAzNWM5ODUxIgorICAgICAgICAgICIwMTI1ZWM1ZjJhMmU5ZGFjNjM5NTg5ZmY4YmIzOWYwNzQzOGRlZmI3ZDEzMzc3IiwKKyAgICAgICAgICAiMTQ2ZDY1MTJkZmRmZmJjMDJkNWQ1NGJmZjNlMDM2YTM1YjRjMmFhOTQ0ZDZmNjcyNDc5MzMwNjUzNzA4MWJkMSIKKyAgICAgICAgICAiMWVlNTY4YTRlOTcxOWYxZTMxZjJkMTRlMThjMmRhNjI0NDcwYzViMGZmYWIzOTdmOTIzMWI2ZWY0NjM0ZjYzYSIKKyAgICAgICAgICAiMTgyODVkZjM0MTQ1MTdhNTFmOTM1ODZkNjZiMDNjYWIxZTc4YTRlYjk0MWI5ZDNkN2Y5MjAzYjU5ZTFjYjNiYiIKKyAgICAgICAgICAiNDg2NGI2NDZkYzE3YTA2NDExZWJkNWZmMDMzNzIwNTg4ODFiNGEyNGIyNGY0YzJkY2Q1Y2I0NGMyZWVhYmU2ZiIKKyAgICAgICAgICAiNzIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuMiIsCisgICAgICAgICAgIjY4NmE4MTBhMDMxZDgwNjFlNDFhNzc2YTdkZmJkYjNhZjYyNmZlOTc2OWRlZWVhNDYwYmEyODY3YWNmMDNkOWYiCisgICAgICAgICAgIjkyNGQzMjFlOGE4ZjQyNWMyODUxOTI5ODY3YTMyNmFlMjc1YjQ5ZDIiLAorICAgICAgICAgICJmNzliNDlmNmE2YmUzZTY4ODg0YzgwZGZlMWU4NTAxZTU0NGNhNzgyMjM4ODQzZDQxOTc2NDExMjI1MGVkYzFiIgorICAgICAgICAgICI2OWM3ZDFjMzU4N2ZkYzc1OTg3YzYyY2I0YzMzYmI4MTIwMmY3MmRiYTdlZWUyNGJmY2Y4OWQ0ZGFlMTUwYzA3IgorICAgICAgICAgICIyNzI0NThmYjAxYjZjZDI3MDkyNSIsCisgICAgICAgICAgIjA4OGE0N2YxMWNiMTM0ZGVjNGI1MDg3NzI1ZThhNWJkMDRmN2ZlNTgyYTY5OTE0ZjY4M2VlNmRlN2MzMjRmZWQiCisgICAgICAgICAgIjdlMDdmNTcwMDVjMGUwZGY3NTAwZTM3MGE0MmVmZDZmZTViMjkwMTk5NTE5YjE5ODA2YjZlNjkxNjk4YWZkOTUiCisgICAgICAgICAgIjE3ZDc4MGRhMGJlYmY3MGEyNmQ2NWM1YjY0ZTM0MGE2NDA1ZTg4OTU1NWRmYTBhOTJjNDI5YWU5YzNlYzg4ZTgiCisgICAgICAgICAgIjg4ZWVkYTA0NWU0MTBlM2E5ZTYxOTlhYjM5ZWIxYWM4NjRlMjI4YzJjYzFiNjRlMzM2MTY5NWI1YWExMTNkYzUiCisgICAgICAgICAgImE3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjMiLAorICAgICAgICAgICIxODU0NGFhZDI0YWIwNzVkM2EiLAorICAgICAgICAgICIyMzIwNGI4YWQ5NDU3NWY2ZTJmNDZjNzk3YmI4NzNhYTNmNDYxYWNkMDVlN2RiNzg0NmEyMzE1NzU5MmQ1MmU5IgorICAgICAgICAgICJhOWE3MDQzODE5YzQ4ODk2Mjc1ZWQ5ZGYwYjFlNTQwNDkzYzA3N2VhMTU0MTlhZmE4N2RjMzVmOWZkZjdhYjhhIgorICAgICAgICAgICJhZjQ3ZWVlMWQzM2VjYzI4OTUwNjQ1ZjFiNjkxMzgyZDg3NTQxZWQwNjQwNjkzMGM3ZWUxMTA5YWE1Y2E3NWE0IgorICAgICAgICAgICI5MDkzNGVhOGQzYjJhMDRiYTE1MjFiZTA5MmM4NjhmN2VhNWJlMzc4ZWEiLAorICAgICAgICAgICIzNGQ2ZTU0NmQ2OWUyNzA2Y2RmYzZkOWU3NDE4ZjhiZTAzZTQ1NzU2YThiMTliNjBjMjFkMjczNDIwYWE3ZDVlIgorICAgICAgICAgICJiYmJmNDYwZWY0Yzg0ZjZkNDc3N2U2YmYyMDNmZjkxODVmZDU3ZGM3MjNiNThmMzVjMWU5YjVmZmY0N2NmOTVhIgorICAgICAgICAgICJlNTY5YTVjYjY0ZGQ5Y2I4ZDY0MDdjMGJhNWVmZDE0OGYxOGI1Njk2YjA0N2RhYWFhMjc3ZWQ4ZDQ1Mjg2MTRlIgorICAgICAgICAgICJlM2RhNTIzODcxMzJiN2E5Y2NmZTA3M2JlNTAzMzJjOWUyODM3MzUzYzY3ZGFhMGZkZmVmYzNiNjUyY2Y3ZDc5IgorICAgICAgICAgICJmZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy40IiwKKyAgICAgICAgICAiZDkwZmEzOGYiLAorICAgICAgICAgICIzZTA5ZjY1MDZmN2Y3MTkxNDdhZTIxZTM5NDUzYWUwYjQxNjA5OGRhMTAzYWY4NGMwZjdjZWZhZTUwMDE5OWM5IgorICAgICAgICAgICI4NTU5NjdhODMwMGExYTdmOGQyY2MxM2I5MTcyN2VlYmQ5M2NmNzdkM2ZhY2IxOWU4M2E4NDBlYjU4M2JjZWE2IgorICAgICAgICAgICJjNjExM2E5YzZmNmYxZmI1YTBiMzMyNTU5YTZiNDMxNTQ3NDU3Y2RhMWQzZGNlZTM0MWQxNzFjNjJlOTVlN2VhIgorICAgICAgICAgICJhZTE2YWUwZWFmMWMxZmU4MTBmYmIwYjcxMzhjZmEzZDY2YzYzODUwZjM4MWU0OWEyZGFkIiwKKyAgICAgICAgICAiMjcxMzNmNDM3OTFiMzkyMjdjOGU5NTRlMWNhYTgzMGZhNjU5OTVmOGE5Zjg4ZTBkMWY3NTY3ODVlZDVjOGM3OCIKKyAgICAgICAgICAiNTRmYjFhOWRjNGE5NWZhNDRkYmRmMGYyODU5OWM0NzI4NDkzNzk3NTBhNmExYmNiNDJjYWZiNWJiZmUwOGM2NSIKKyAgICAgICAgICAiMTA2ZGM4NDBjYmVjOGVlMmNiNWEyMDZjODExOGFhMDYxZGE0ZDIxZDFiNWM0NjExN2Y3N2M4OTZiYzcxY2VlMiIKKyAgICAgICAgICAiZjg3NTdhZmY1Y2IyYjNjMzQ3NzQ1NThlOGI4MmVkYjRlZjliZjJkNGYyY2E0ZmM1OTdmYWI0MGEyZDc0ZTUyMyIKKyAgICAgICAgICAiM2EiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuNSIsCisgICAgICAgICAgImZjYmRkMDI0OGRmODU3YWYxNzViNDM5Njg3NWMwMDZkNTExNGNjMTExNjQyODAwNDM4MDhhYTc5ODg2YzRjYWEiCisgICAgICAgICAgIjI5MTE3YmYzY2U0NWE5YmU1NTA3YzZiOGJmMGQzMCIsCisgICAgICAgICAgIjJjOWQxNDU3YmE0NDUwZGY0MDIxZTRlNTExODNmNzk1ZDA5MWMwN2Y2YWUwZGQ5NjJkNTcyOGM1NGI3ZmMzYzciCisgICAgICAgICAgIjcyZDc5ZDdiZWNlMWJiMGM5OTZjOWFjMDdmOTk1NGRkYTc2ODdiZWM4NmJjZGIzMTQwYjI0NWJiNWUwMTI3NWIiCisgICAgICAgICAgIjM4ZDFmMjUyMzM1ZTM2YzY4YzBlNThmNGNlMTE3ZSIsCisgICAgICAgICAgIjJjZWRkZWYyMDI2OTFhYWU0MjcxODUyYTg5ODNkZTdjMjE0Y2VlMDBkYmUxYTE1ODg0ZjRjM2MxZGU3YTNlYTAiCisgICAgICAgICAgIjFlY2NmNDdhZTg2YzI2OTMyNGFlNTIzNzczMzdiNmNhODJlODVkNTUzZmJiMmVlNWY5NzdkYzY2NGUxNDJmMWIiCisgICAgICAgICAgIjU0NTM4ZmFmODVjYWMyN2MyOWYyZWQwYzQwNDI2NzMzNWQ0OGVhNDBlOGEzZGRkODk2YmJiM2UwZWRmMGUxNmYiCisgICAgICAgICAgIjllODk0NDY4M2I4Y2ZiYWFiNWVhZjIyNTMwZjE1OGM0ODgwYmMzZTQ2MGMwNmEyNDAzNDIyMTBhYTg3Yjc5MDkiCisgICAgICAgICAgIjY4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjYiLAorICAgICAgICAgICIyNWYyYTMwNmVhYmU2ZTNhMTgzMGRjOTM2YmZhNDFjZGViYjg4MDA1MTc1ZGY0YTNjOWM0NjQyMzAxNDU2MTExIgorICAgICAgICAgICI1YWE4IiwKKyAgICAgICAgICAiY2I4ZTBmZjQxYmFiMDFhMTQyZjk2ZTdkN2NkMzkyODIwYTgyYTE3MzY2NzRiOTIxMzVlZjMzMDg5Njg4ZGQzMCIKKyAgICAgICAgICAiYjJjMmY3YmExMTFhZjc4ZDNmNzZhMzdmNjY3ZGIzOTc1ZmNlNjRlYzlhZmIwOTY4NTA3ZjdiMzEwOTdlYWFlNCIKKyAgICAgICAgICAiODgxYjM2MjQwNjU2MTZjYTA5MGMyMDRjMWZhNGJlMTM0ODUwZWE1ZTkwZmVjZGM4NDViOWQ4MzkiLAorICAgICAgICAgICI0YzdhYzgxMjQ1ZTdkNGRlM2M0ZGJmYjMxNWM0NjgzNDFjYmYyMjg3NTczNWM1ZjgwNTkwNTA1ODUzMDY4ZDZiIgorICAgICAgICAgICJlNzAzOWIxY2VlNmQwN2VjYjc2NjljNDJmNmI5MmYyYTcxZjY0NWY3MmNiYWZmNzYzNDE2MzdkMmYxZDZiMWZlIgorICAgICAgICAgICJjZWIwN2YyMWUxNGM3MGZiNzdiYzdmODdiMDMxYzJjOGYyYWRhNGVjNDNlOTEyNjgyYzJmNDk2MzllNzU3MTU3IgorICAgICAgICAgICIxODc3ZmM0ODFjYmYyNjk4YjM3MzE1YmQ0YjkzMDc4M2Y0Nzk0NTY0MmI3ZDgxNWUwNDMyZDQ1ZGQxZDBkM2IyIgorICAgICAgICAgICJhNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy43IiwKKyAgICAgICAgICAiYTBkYWFiNGY5ZmUwNGEyYTUxYmYwODMyNzAxMTVkMGQwNmRjMjkyMWNmOGRkMTNmNWNmZjI2MDRiYzU1MWVmZCIKKyAgICAgICAgICAiOTgzZDliMjViNzI3NGYzY2NiMGFkY2MxMWIxYTM5NTRhYjlkYjQiLAorICAgICAgICAgICJjODFkMWMwMmYwNmU3ZmZkNmUwM2I4MWI3MTkzYWFiZGFjNTY2M2FiMTQyNWE2N2QxYTI5NTA4ODVmNWQxYzRiIgorICAgICAgICAgICI3MjVlMjA5ZGNiY2U5ZjdiZjI5Njc1MjM0MmYxODRmZWEwNmE3ZDZjYjJiZDM5YjJhMzE4MDc1MTY0YTJlNzYxIgorICAgICAgICAgICJiNzAyNzAyYjAxOTI0NmMxZTUwZTZlIiwKKyAgICAgICAgICAiMDZjMDZjOTc1ZmM2YjljMjYwZDNkODgxM2I1NzE0MjQ4YmViMzk5YjdkNjhmY2FjMjUwMzM4Y2FjNTRjNDA3MiIKKyAgICAgICAgICAiOTU5ZjYyMDM4NDQ0ZTllNjY2YmFiNWY5MzYwNjcwNDdiY2FmNGJhNGVkNjhjNmM4MTg1NzQ2MjkzMjU2ZTdjNyIKKyAgICAgICAgICAiMjQxNjY1ODE1NGRlYzA2N2Y0MjUwZGM2YjI5YmJhYzE4ZTgyMWU0OWE0YzliMTYzODMxZjdiYjM4MzkyMzI2YyIKKyAgICAgICAgICAiNmI0Njg1NDY0ZmU0ZjAyNmM5YWU0ZGJjNTg0OTQ3N2I0YzI2MGFhNGFjMDJkMjFhMjY0MDIwZjEwY2ExMWI0YiIKKyAgICAgICAgICAiMGUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuOCIsCisgICAgICAgICAgIjc0M2NkZGIzNjFjMGJiMzI0NzY0OTVhZDVkYzYzYTJiY2U1ZmJhYzFjOGMyMDM5MzY5MzI2N2Q4NDNmMjhiOGMiCisgICAgICAgICAgImYzZWExM2UzNzRlMDlkMGFhM2Y3YWU1ZDhmNzJkOGU2Y2I5ZGJkIiwKKyAgICAgICAgICAiZjcyZWQyZDA2OWI4YWU1MDI3MDQ2ZTAzMjdiOTg3ODQ1ODA5YjRlODE2Yzg4NjU4MjRmYzRhMjMwMWI0NTY4MCIKKyAgICAgICAgICAiMmIxODljYmI0M2YwNDgzMmFjMjVjODQ4ZDc0ZmJlMWQ2MjVhYTk4YWUwNWViNjI1NDc3NjFjNzhiODE3NjFjMyIKKyAgICAgICAgICAiMDNmOTNkZjNmYzBmZWEzYzVhN2JiMSIsCisgICAgICAgICAgIjM4M2ViYmYxNTllMWQwYTIxYzc0ZWI2MWUzNjQzY2I2MzFiZTE4YzdhMmE1NGUyNDg5MzM1ODdkMzQ1ZTk5NTIiCisgICAgICAgICAgIjcyNDY2ZGMxYmQ2MTNhZGRiNGNkN2JhNTAxOTJmYzJkODk0ZDdmZGFmNzgzNjNiMDc5ZDk5ODAxOWYxNjQyMzEiCisgICAgICAgICAgImNjMmQ3NTJkYjc2YTlmOWQwYzUyMDRiZmIwZjk5MzA1NTMwOTZiNWI3NjgwYjA4OTRmYjk5YzExNDI1YzY3ZDYiCisgICAgICAgICAgIjVkOTY1ZTM1MTI4ZTE1NDc0NmIzZmVkOGQwMTY5OTMwNzBhNzBlMDdlYmViZTA2ZjJmNGU5NzZjOWE2M2ZiZTMiCisgICAgICAgICAgIjIwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjkiLAorICAgICAgICAgICJlNTMxOTJmZWJjZDM2OTU4YmQwODAzZjJlYTBhZmRiZmRmOTkzYjU4YTllNGVlNzBkZjk1YjA2ZDRlN2Q3NGI2IgorICAgICAgICAgICI3NDViODdmNTgxZjM0MmY4YWVmOWFlNGMzMTgyYzQxOTliNjU1MWZlMThmOGQzYjlmZmU0IiwKKyAgICAgICAgICAiYWQ5ODJmYTcyOWYyN2ZjZThhNjc0OTAzZWNhYzY5NGRkMzM0MTNjNzhlMzQyOGFlZWQ0NjlmODRkOTU3NWM2ZCIKKyAgICAgICAgICAiYTI3NTI5ZjJjMTRiNTNiNzU4ZDIwZmI2YjI0N2M4MjljNWZiMWExNmFmNTUwNzlhNzA3M2NjYTA1NjI1OTYyYiIKKyAgICAgICAgICAiNmQxYTZiZWYiLAorICAgICAgICAgICIyMjFkODhhODZjOWVkMzdhYTA5Y2Y1NzI1NDk3ODJlNThjYThkNDg1MWYwMTZhY2YyODllZThiZjIzNzkwYjFhIgorICAgICAgICAgICI4ZjE0OGMxNjU1MDhiYzNmZGIxZWY5YzkwMTE2Mjc0MjdjNWYzMmU1Y2FiODUwY2I2YmMwYmMwNGExMWRhMmYwIgorICAgICAgICAgICIxODEzZjM0MTQxN2IzZTYzMmJjYWUwMDI5NzdkNjRmZmM5NjJjN2ZhNzU3MmY1NmQyNjE3ZTJhNTJkM2VmOTE3IgorICAgICAgICAgICJjNDRhMzNiNzE1ODJhZmYxMzkwYjdjNzc0ZDYwN2M4ZDU3OGY3YmM5MGIzNTgwZDc3YjAzNzMxOTE0NzdiYzE0IgorICAgICAgICAgICIyNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy4xMCIsCisgICAgICAgICAgImQwZWI0ODBlMjc0NTc3OWM4YTMwZmU4MjBhZWY1NmQ0Y2UzOWVmODRlYTQwYzdkZjBjIiwKKyAgICAgICAgICAiNDY1ZjkxZTNmMDdjYjcyMjgzYmMyYmJlNTI4YjlhYjM2ODE2NTRmZTIwYjYxYTMzZjEyM2FkZTUyZTgzMmZmYSIKKyAgICAgICAgICAiOGExYjc0YTQ0NDNjYzg5Mjk1YTIxYTJhYWM5ODc0ZGEwYTU2NzlkMThjYjVjNGNkNjkwYmQwYTIwY2JkOWU5YSIKKyAgICAgICAgICAiYTA3MmFhODcxMzQ0OGY5NWU1ZDZhNmU2MjRkNWI5MDg1Y2ZjZWNiNzk5MmYxMGVhMmRhNmQ2MjZlYmU1NDNkOCIKKyAgICAgICAgICAiNzAyMjM2ZWU2YyIsCisgICAgICAgICAgIjA2ZjNmOGM3MGQwZmM0ZTc0NDczZTY4ZmQyM2NjOWRmMWVkZDQyMzViNDI4Yjc3MmEwODNiNDFjMzQ1MTYyNWEiCisgICAgICAgICAgIjZmMTVkZWE0YmYzMTNiZjRmMDNmZGM0ZmU5ZjZhMjA3MWFjNjlhYTNmMGZjNDE1N2VmYzYyMWY5NTk0MDYxZjYiCisgICAgICAgICAgImMxOTgwNmJkNWQ3NTlhZDAyM2NhZDE0OGU0NDdkMjU5YjYyYmY3MzQyNTkxYmU4M2JhZWM3NzcxNGNmZTJiOTAiCisgICAgICAgICAgIjFmMzY5YWVhNjgwMjQ4YmFiZjA2ODcxMGNiYjk3MDQ4NGYzMjRhMjM1MjUzYTMxZTAyMjUzNGFiZWM3YjM5OTYiCisgICAgICAgICAgIjA2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjExIiwKKyAgICAgICAgICAiMWM0Mjk3ZjZkZmMwN2ZmZTU3NTlhYTFlYWE1Yjc5Mzc4YWZjZGQxYTlhMzNhMjEzM2EzOWFjIiwKKyAgICAgICAgICAiYTdhZjJhODYwMWU0MDhjMzE4ZmQxZTBmODI0NDViNTA5NTQ0ZDVlYzk3YTc5NThmNTk0YjIwNTRjNTA5ZjdlZiIKKyAgICAgICAgICAiZmRkNDE2MzA2YjJiMmM5MWI1YTYzN2ExNTY4MjBkNjAxYTIzZmZkYjMxZmIzNWQzMDVhYTkzNzQ1NzhlZWZiOCIKKyAgICAgICAgICAiMTAyZThiNzI0NDE5MWY0ZWM3NGFhMjZhMGI3ZGIzNmNhYjQ0OTk5YzgxYjM2MTU3MDE2YjU1ODkwNmU1ZDcwOCIKKyAgICAgICAgICAiOGQ1MTMyIiwKKyAgICAgICAgICAiM2NkZjJkYzY3YTRhYTUzMWNmYTE0MjgwMDhiZDA1NDRhYmJkMDMyOTIyZGNjMjQzNmRhMGI1ZDdlZjlhNzAxNyIKKyAgICAgICAgICAiZTYxOTNhOGJhZjM4YzU4ZTkxOTYyZDY1YTM3NWYwOGMxZDU1NTc5Y2Y5NGE3OTVjOWM3MGI2ZTQyZTE2NDNjZSIKKyAgICAgICAgICAiZjU0MGRjZTFlOTg2ZGQ5OTg4ODdiNjk1NTI0NDRiNmRlOTNiYTdkNWY3NjQ4MzU0YmZjYjcwMjEzOWVkMzk1NCIKKyAgICAgICAgICAiOTQ3ZDdiMTgwYjZjMDJiY2FkODI0M2EwYWIyN2NhNjY1Mjc2MjkxYjQ2Y2MzMThkYTliNWY2MGEwNGFmZmViYyIKKyAgICAgICAgICAiYjAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuMTIiLAorICAgICAgICAgICIwMDkyN2ZjYTdmNWVjNzZmNTQ4ZGQ0ODI2M2UzMzliZSIsCisgICAgICAgICAgImRlYmMyYzFmMjJkOTMyZmZjYjg5N2NmMTBhZTYyYzNlMDUxZTNmNzg0NjNhZTY3ZDk1NjFjZjFhNzNkNTVjNGIiCisgICAgICAgICAgIjE0YWNhNmMyMWQ4M2JhZjk3NmNkOGJmMjQ2YzIyOTc4NjFhNmIxZTljOWVmMzA4MWM1MWM0YjY4N2M2N2I1ZGQiCisgICAgICAgICAgIjBmZTBmNzU1M2Y3MzhjMmM4YTVmODFkMTI2OGEwYzJkNGE0NjFkNjM1YjBlNTlkMjNiYTQxN2FiYjgwNDVlOWMiCisgICAgICAgICAgIjEwZDY2YjBlYzg5MmY5NTNjNmYyMTFmMDJmZjAiLAorICAgICAgICAgICI0OWI5MjA4OWI1MmFiNzhjMzNiNWJiMzAzMmNmNzAyNDk0NGFjNjhlMTM5ZDJkNTYwNjhjN2EyNjJhNTNlNzgwIgorICAgICAgICAgICI5ZmI1YjAxNTY1Y2M2NTYxZDcxMzMwNDY4NzUyMzBhYzIxNzU2NDcyOTZjZjJiNDg0N2UxMmI3MzYzMTk3MjUzIgorICAgICAgICAgICIyMWJlYTI2NDc1N2RlMGViNDk4ODcyZDg5YTRkN2NlNGExYmRiNzMzNWRhZWE3OGJhMTk2ZmQ1MGQ5MDM4MmU2IgorICAgICAgICAgICJkNjJmOGRmN2FlNjg1YTFkZmM4NDllMTE5OTdkZWU4ODYwZDEwZjcwN2IwZDM1MzY1YTgxMjQzMDczMWU3YTUwIgorICAgICAgICAgICI4ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy4xMyIsCisgICAgICAgICAgIjhiNmRmMmQ2ZGE2MzFhYzhkNTU1NmEyNjk3NTQyOGZjNGQyMGVmNWI0YTFmMDY4ZWQyZTUiLAorICAgICAgICAgICJmZjJjMDY5ODg1MmQxYjBhZTNjNWM1YzliZTI2ZTgzYzkwNDQ4NDJjMTYwN2Y1ZjQwODZhNmQ2Y2YxMDhhZGNhIgorICAgICAgICAgICI2MWVhZjY2NTQwMGQ3Y2ZmMmEzYWRhZGZhZmQ4MGM2NDk1NmRhMmQ3ZDdjMTM1YWJmNWEwZDE3NjA2MjU1NmViIgorICAgICAgICAgICI0ZDhiNzViOTVjZDExZWE5YzA0NDJmODQ2ZjAzN2RhODc3MjkwMmJmZmNkZTY1NTllMWI1OWU2MGM2ZDBmOTg5IgorICAgICAgICAgICI2YmE1YzNjNCIsCisgICAgICAgICAgIjQxNTI3NjY5ODAzMzM5ZWJkOGYyZDFjYzE4NmM3ZThlYmI4MGNmNGI5NDlkOGEyODQzNjUzMjlmM2NlNDZlYmQiCisgICAgICAgICAgImFjMGE5NjlmNjc2MTkwMGNmZTM0MmJjODRjN2Q2OTUxYWNjZjQ1MjgwYmFmMjRhMGNiYjI0MmE5NDIxOGVmOWYiCisgICAgICAgICAgImQzNzFiMWUwMDgyNDYyNjIwNzBiZjU1NGVkNTcwMDdiOTczOTc5MTYzNTg2MWQ4NmM2NWIxYTgyNTZmNDI1ZjkiCisgICAgICAgICAgImYzYWU1MTllMWIxYmRjNTg3NWI4NzhkZGNmYzE0NzBmZWVmMmFlZWIwMTRiN2UzM2VmYjlmNGRkMDc4M2QxNzEiCisgICAgICAgICAgIjIzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjE0IiwKKyAgICAgICAgICAiZWEwMzk2NjliY2Q3YThjZGNlYWI1ODU1OTFiNTYzNjFlOTBiZGEwZWE0NDAxMDQ5NjRlODg5ZWNlMThhZWIwNCIKKyAgICAgICAgICAiY2UwYWI1YjFjY2IyMzBhZTAzMjU1YTM5IiwKKyAgICAgICAgICAiMjA0ZmFlYjMxMzk2NWNjMWExOGZhZjEwMzlmZGRlNjgxYmM0M2IyMjNlMjhiYzQ3MWM1MDQyM2RhMGJkNzk3ZCIKKyAgICAgICAgICAiNmE4YzczOGM1NDAzM2M4ZTU1OWVhMmQxMGMzYjc5YjgwZTJlZmRlY2ZlODkxY2VhMmVjYjM0NTFhMWE4ZTJlYyIKKyAgICAgICAgICAiMmY0NDdiNzk4ZDdkZTU2NDFiZGE0YWE5OTBiMzAxZTFkZGU3IiwKKyAgICAgICAgICAiNGNhMWM4NWNlM2M2MjBkNDI5OTFjZjQxNzMzZWFkMjZhMDkzMTExODVmZmZlNThmNDEyODhmNmQwYmI2ODQ1YiIKKyAgICAgICAgICAiMmQ1YWNmMWFhMDZjNzhkNzFmNzY5Mzk2YTk0MzQyMDNlMzhiYjAxZmQ4OGViMjNlNmJjNTFiYTBjNWYzZWViMyIKKyAgICAgICAgICAiMjcxM2NhZDRkMDg3ODA1MDYxYWI0NzNhMTU2N2U3OWJiZjRlYWU0OTM2ZjE4ZDAyMDViMzc0NmExN2UwNjQ4YyIKKyAgICAgICAgICAiNTIyMjNkZDlmOTk5NzI4MWI1MzVhYjJmYjNjZmYwM2NhODkwZjcxMGFhODhmZDJkMGYzOTJmZjRhODhkMzExYSIKKyAgICAgICAgICAiYTEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuMTUiLAorICAgICAgICAgICIwZjQ2MmJlYmM2IiwKKyAgICAgICAgICAiNGVhZTVkNTQ5MmQ5NDRmZmRiMDQyYWQ5NTAxNjgxYWRiM2ViNmFiNTI4YjZlODEzNTM1NWI2MjNhYjU1YTc0MCIKKyAgICAgICAgICAiODdiMTlmYzU5Yjg1MzRkYTlhODhkYTI5ZjY2ZjcxZjk0NTJhZWRlMGUzZTkzOTA3NzA5YzM0NDk1NjcyODU3NCIKKyAgICAgICAgICAiYjY2ZmI5YTZmMzM4M2Q1OGEwMTM2Zjk0YzRlZDg2Y2E5ZGQzOGJmZjA3MGZjYzJkZWYyOWJkZDZmYzk4NTk3MCIKKyAgICAgICAgICAiOTY3ZjAyZmQ2ZjkzMDFjZDU2ZDA0OGE0NDJkNzAyNDA5YTk4YTEzMmFiNmJlZGQ0ZmUiLAorICAgICAgICAgICIyOTM2OWViMDBhM2Y4Nzg0MzhjOTM4ZjlkN2JkYTM4NTZjNDVhNmQ3N2MxNzg4NTExYjk4MmM1OGY2M2RiZWEzIgorICAgICAgICAgICIzZTYzYWUxZDQ1YzJkZjZiYTgwZjBkZTk5NzU5MmUxZjhhM2IzYTA5ZWQ3NjA2NTE0NTNlMTA5OTc4Y2ZkZTNhIgorICAgICAgICAgICI2MDBhNzRmYWE4YTkxYjdjNzI0Zjk3M2NiODBiOTY4MzVmMDUwYjdkYzA5ZDJmMTU3NDc2YzViNzA1MWY5NGQ5IgorICAgICAgICAgICJjMGYzMTdlMWYxODhlMzA5ODA3OTViMDk2Y2Y5YmJjZWI1NjM2YjNkYjk4NzA1NGE1NjA4NzUyMjc1OTYyOTk3IgorICAgICAgICAgICJlNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy4xNiIsCisgICAgICAgICAgIjUxNGQzYjM4MDAyMmIzNzgyZThhNzdkNzdiZjI0YWZkZjkyZjMzOTc0NzRkYWUwZDRiZDZlNGZhMzFjYTYwODMiCisgICAgICAgICAgImRmNDk2YjM2NjI2ZTdmOGUxYzkxOWY5ZjJlIiwKKyAgICAgICAgICAiZDRkM2E5ZThmYmViMWRjNjA3YjRkZDc4ODdiYTI1YzNkMGJkODEzNDg0YmQ1Mzc2ZGM4M2VmYjU4ZWM1YjI1NiIKKyAgICAgICAgICAiMmNiNDRmOTg1ZTU5ZjUwYjlhZGUzYzY2NzE2Y2M2ZjQyZTUxYzYwYTJmNGQ4ZDc1YmZiOWI4MjQxMDVkMWVlMSIKKyAgICAgICAgICAiNTgzNWY1ZjVmMjU0ZmM2ZjY4MGVlZTBiODVhZjU0N2MxNyIsCisgICAgICAgICAgIjE5ZmIzOTFhMzEwMDg3YmMzZDA4NzkxZmQ1OTk5NGJlODAxMmRmZmQ3NmEwMmFkYmQ0NzljYzBjMTU1NjYwNWQiCisgICAgICAgICAgIjRkYTJhMzQ2MWM3YzcxYTg1ZWQ4Y2Y4NWUwOGY0NWRhZGU1MThjMDBhZjA5ZjQ5M2VlOGE1NTQ2ZmZiZWZiMDUiCisgICAgICAgICAgIjNjY2EyZWVmMDY4NDc2M2NmNzgwZjJlMDk3YmQ4ZTVjMmVhODRjYjFhOGI4Zjg0OTZjYzkxODE2N2Y2NTZjZGMiCisgICAgICAgICAgIjllMWQzYjJhMjMzOGI2NGM2MWU5MGVjYzI3NGExMjEwZTNkYjU3ODNhZTNjMDBhYmQzNzQ4YTgxMGZkOTE0OTEiCisgICAgICAgICAgIjE0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjE3IiwKKyAgICAgICAgICAiZmJhMTYzMTdiMDkzMDgzZTM3MjBhYTA2NDgxN2U3NGNhNzUxYTUxNzg3NGI2OTI2NTBjNDE0N2YxMTlmNjg5MCIKKyAgICAgICAgICAiNzAyY2Y4YjE0ZjBjMTg4MjIxMmQ3MjQwNmMzYTQ1ZDdkOWZmYTQzMTI0MTBhNiIsCisgICAgICAgICAgIjljYzlhNGJmOGNjMjc1YTZiOWIxMzUxMDMxOTExMDkxN2FkODUzMjRjNWE0MzQ1ZTU4ZjFmYTQ3Mjc1ZWU1OTIiCisgICAgICAgICAgIjE1NjlkY2JjYmQ3MjM2NzBjZjRhMjRlYmNkNTdmNTdlOTk4YzRiYmQ0YTk1Njc5ZDYwYmFhMGFiZTg3OTY2OGEiCisgICAgICAgICAgIjJjYjZlZDBmYjk0ZTRhIiwKKyAgICAgICAgICAiNGM0MWI5Y2JjYzZmYTg3ZjIzZjE3YTM2ZDA1MWU3NzgwYTA3MDY1NmNhZTdiZWJhMTRmYTkxYzU1NWI4NTg4ZSIKKyAgICAgICAgICAiODgwOWU3ZDMzNTRlN2VmNWUwZmFlZmUxY2YzOTJlNmZkYWQ0MDQ0YWVmMDhlMzNlNmZjMjAxYzU0N2ZkYmRmNyIKKyAgICAgICAgICAiYzczZDNiZTA5NmVkMjUzZjlkZjRhZjUyZTEzYjlhMTkyNWFhNzM5M2E2NDI5NTMwMjA5MjAxZTU1YjIwZTUxZCIKKyAgICAgICAgICAiNTAwNWQwNmI1ODM1M2JmYWZjZWVjMzdkNjBlMWNhMGQ5ZGRkZDg2ODBiZDBhNWQ2OTJlNzRmMmRiZGZjZTI2NiIKKyAgICAgICAgICAiMDIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTMuMTgiLAorICAgICAgICAgICI1ZmZlODJlMDMzNTQ0MjQ1Yjg0OTYyZDM5MjdjMmZhNTk5NzJlZjU5YzIzN2EzODZhNTFiZDBiYTFmMmMxZjhlIgorICAgICAgICAgICI0NWI0NmEwNWFkOTdkYjQ5ZDNhY2M2MzQ0ZjFlZGFkZjY1NjRjMjhjZTEiLAorICAgICAgICAgICJjYzIzNTliZmQwZDU3YmNlYmYwNzViODdhNTg1YTliZGU2NTkzZWIyNDk2MWVmZjE5ODdlNzM1NjA1ZDRlMzBlIgorICAgICAgICAgICI5NzE5MzdmNmYzZjViZTUyNzhmZDQ3NmRjNjYwZWUwNzMwY2QwN2U1ZDFmNDIwMDlhMzMzMzEyZDkzMjhmM2IwIgorICAgICAgICAgICIwODVjNDA3NWJjNzA5YTEwZjEiLAorICAgICAgICAgICIwNThiNTBlMGJjYTZiOTM0YzAxYmY3YzMzYmI2MTViNzIyZWE0MTgwN2E3ZDJjN2NiM2Q0MzhlMjhkYmUzMzNlIgorICAgICAgICAgICJkNmQ4Mzc0NzdhZjg0YmIwMDZiYmIxMGIzNjk0NGYxNWQ0ZjZkMjhiNWVkMjQ5ZDU2OTBjMDgzN2ExNmUxNTdiIgorICAgICAgICAgICJhODgwMjI3NDEwMWNkNDRlN2ZlZDcyYTc1OTgxYzk3NTY2YmM3MGU1NTU5NzAyYmY1YjYyZmIwOWIyMTM2MDU2IgorICAgICAgICAgICI3M2FhZWJiN2ZlOWIxYWU2ZDgwNDAzYTIwMTMzODAzZTFlZDIzNTBiOGUxNWZmMDE5YTcwMGYyYWJlODdkNmU3IgorICAgICAgICAgICIzMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxMy4xOSIsCisgICAgICAgICAgIjIyNjMzY2MzZmU3YTdiNGYwMGZhOTk5YzRmZTBkODgyYzMxYmRjMGQ2NzBjMGNjM2QyODg5NjFmYmU2MzcyZTAiCisgICAgICAgICAgImU1MzI0NjQyYzdiMWZhODUyZTFiNGY2OTZmMTJmNTU4NjYiLAorICAgICAgICAgICIzZWRmY2FmNDg4NzFkMjkxZDViN2Y3NzIzZDkyZDk1MTUxNTJiNmJmNTJiODIzNjk5YzU4OGY3NWYzNGUzNzk1IgorICAgICAgICAgICI1NTBkMDc4MTE4ZTI4NmM5NmU5MDA3YWVlMTU0ZjU3Y2U3ZjFkNDYwMzk0NzNhNGEzN2E5YjU5MGEzN2VlYTU5IgorICAgICAgICAgICI5NDdmZTg1ODdjOTU2OTg4YmNiMTc0ZTk3YyIsCisgICAgICAgICAgIjNkZWJiYzZjZmIwZWVkODcxNjZiY2NkNTRjNzU5N2FkMzZjYTBhYzk2Y2YxNjY3NmUxODc0YmY1ZjEwYTBlYzYiCisgICAgICAgICAgIjljM2JlMjI1OTY3OGVlYTYzYTE4MDhkOTA2NjVmZmNlOWFmMDgyN2VlNjI5ZWRkNjU5NDM0MzdmOGNhMGE2NzEiCisgICAgICAgICAgIjE3MmM1MjFjYzBkMWRkMDFlMjJmMjBhNmM3OWM0MjdhZGE4ODU2MDAwYzRlMDM1ZDljNWVmMmUxMDVmMmM5ZjYiCisgICAgICAgICAgIjQ1N2Q5ZWU5NWI0M2JjNGJlMzI5NGEwZWUxZDVjODMzYWU5MTA3OGFlZDA5ZTc5MmJiNDJjMjVlMDBiMDg3ZTUiCisgICAgICAgICAgIjYxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDEzLjIwIiwKKyAgICAgICAgICAiNTUyYjM4NGM1ZTUxNzRmNTFmMzgwZDhiNTNlM2M4OTdiNDhjNjY5YTljMmQxMTk4NWI4NjU0ZGU3Zjc2ZDk2MiIKKyAgICAgICAgICAiMzk2YTM3Yjk1MzQxZjk5ZGVjZTRhZmQ3MWQzYzg0ZTEyODdiMGYwZjg2ZWVmZmNmZDk3YmExODhlMzc5OWUiLAorICAgICAgICAgICIyZTJmM2UzZjQ2ZDQ3NDBjYjI2Y2JjNjVhYWUyYWZlNDlkMGJlNjY2MzlkMGRiMTBkZmQ2YWY2MDY0NDZmM2I3IgorICAgICAgICAgICJkZTk4MjEyZjg2MTc0YmRmYTViMmUyMzU4NTA3NDUzYzIwYWRhNjlhNGZmZTBhMzVlMTJlZmJhYjNiYjQ0YyIsCisgICAgICAgICAgIjE0OTI5MWVlYjUzNmZjMDcwM2Y3YmRmMWYwMzFhNDMwY2M4M2FkYzQzZTA5Njg2NDkxMjY2OTM0ZWYzN2VhZWEiCisgICAgICAgICAgImIxMWJjN2YzOTE0OWFiMzM0MzY2OTQ1OTM2NzNjY2M2MzkwYjUyOWU2NGQzNDJlOWYyMWQxNzZkYTIxZmE2NWEiCisgICAgICAgICAgImJkNTdlZWM2MGRkZWM3ZDFhMDkzZGJhMzc2NDQ1ZjFiY2ZlNWE2YWFjZTlmMTM0MmFmMzlkYjhhZDQ4NWJhMjIiCisgICAgICAgICAgIjJkMzkxMjYyMjhmYWVlYjQ5YmIzYjI3MWZkMzhlMTE1MjVkODAzMTU0ZTc0MDg0Yjc1YzNkYmNkZmYyZTNkMTAiCisgICAgICAgICAgIjQyIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxNTM2LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImJlMGNhMDFmOWMxNzIxNjZmOTEyMzkxZTVkNThkZGMzMGQ1ZGQwMjc5YTQ5YmIzMTJhMzFlNGM4YTY2YTUyZmIiCisgICAgICAiNGU4YjY3NDJmYWFjYjIyNGMzMDM5ZjFlMTk4ZjMzMjNiODg4YmEwZTM1YmI5NGM1MTFiZDIyYjg4NjQwNWE3MSIKKyAgICAgICI1ZTQwOWRlM2JjZWI0ZmM5OTExYjBlOWMzYjFlNDJlMjU3ZDViYmVhMDcyMmI1ZDVkZDM1Mzc1NjlkYzc1NjA2IgorICAgICAgIjQ2YTc1MGI4N2VhYTZmM2E0MDVhOTRiZjJhZGE3MmI1MGE0YjAxODdiYjlkMDBlYzQ1MWQ1MGE2YTkxYTFlMmEiCisgICAgICAiOTExOTJhN2ZkNzU2YjkwMDE0MWZlODhmOTZlMjA4MGRmZGQ4MDE2NmE3YmY2N2UzNzE0NGQwOWUzYWY4OTk3NCIKKyAgICAgICJlNTdjNzJiMDNhMmI4OGZkMjk5NTI1MmFjZTRmMzBlMmU0N2MyODE4MDU3MjQwNTM2YjU4ZGI0MjA3NTA5ZTU5IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgImYzN2QyOGQ2MWYyODk5YTVjMGUwYTA3NDlkMTM4OTM4N2M2NGM4YzM1OGE5NzFkYWQxM2NmZjg1YzU5YTYyZGQiCisgICAgICAiYTdiYmMwZjdlNWJkYzY1ZGZmOWRlOWM3NDU0MDQ2MzE3NTgxNDgxNjhkZmU2YWMwYTI4NzZhNTYwNTNiYWIyYSIKKyAgICAgICIyYTlmZjI3Mjc5NGRkNWQ4MTM5ZWVkMTBiY2ZiNGRmMzMwMjBkNTllMzA0OGZkMmYwYzQzMTQyNjE0NWUzNmExIgorICAgICAgImQwYTZiZmNlNDQ0M2VmM2M3ZTMxZDRhOTJmYjg1MTdhNDlmNzg4YzNiNGUxMzczOTVhNGJlZWVhNjNlMGUwYWQiCisgICAgICAiYzMyMjRmOTgwOTI1MDM3ZGY2ZjViMjZjMDA3MjM5YjRmMDFmOGE5YTYxZWEwYjUxMTliYzlkNTQ5NmE5NWI2MCIKKyAgICAgICJlYTc2NmNjYmFkZTAzN2UzNDAzMjRmMjVmMDJlNzI0NWMyMzZlYWU0MzY3YTY0NjhhN2EwOTM4ZDg1YzBhMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjEiLAorICAgICAgICAgICIyYmQ2ZTNjMWRlZmRkZDVhNDMiLAorICAgICAgICAgICJlNzg0ZDUyNTAzZTYyOTFmMjU4ZTQ0MmRiNTc3Zjk5MTYzODJhMGQxNGM3YjlkY2NiZGI2MDdhZjAxZjAyNThmIgorICAgICAgICAgICJkYzk3MjM5N2RhMTIzOWQ0NDQ5YTU4Mjg2ZWNlMjAwOGY3MThmNjkwY2VlNzNhMDI3ZmFiZjg0YmRmN2FjZTQ1IgorICAgICAgICAgICJmN2VkMmQ3NzMyNGNiZWU5MGVjYzZmMWU3Yjg2Y2MyOTM1YTQ3YmExNTY2NTBiNDJmYzcxYWFkMDcwOTlhMjdlIgorICAgICAgICAgICI5N2ZlNWEzZjI1ZmUxMzQ4ZTQ0MjM5MTIxMmE1Y2YxYjQ0NWExZTcwMTkxZmZhOGZjYWRlNjM1ZDJlNDQ2NWY1IgorICAgICAgICAgICJmOTEzYzUzZTMzYjU5MTUyY2Q4YTE0OTc4NGYyN2Q4MzE4MjhhZjJkNjY2YTVjMzA5YjU2ZDA3MTljZmQ4MDczIgorICAgICAgICAgICI0MDY5YTIzZTA5MmQ4MzE1Mzk5Zjk1YzQwYWQ3ZmQwYmI1Zjk0Mzc3IiwKKyAgICAgICAgICAiODVlZjNlNDc3Njc3YmY3NjA3MWEyN2JiYzczOTU3MTVjYjM1MDc5NmU0NGYxYjUyYTA4ZTkwNWUwOGZmMTI1NiIKKyAgICAgICAgICAiNzA1YTliZjAxNTJlODcyYmRjNzRiYjFmMmZjODYzMWVmODgxMmQxNjk0NmEzMGI1OGY0NDY0ZDZlN2IyNDUwYiIKKyAgICAgICAgICAiZTQ1YjQ4Y2NmZjVkOGVjZjdhMDBiMWI3OGZjOGZhNTQ3MTNkZDY5NmExNGFjYjY4MDBjMGQzYjY5YTBiNDQ0MyIKKyAgICAgICAgICAiNzdmYTMwM2E3ZDY2ZGI0OTI3OTE4YTRiZmIwZmQ0OTNiZmFhMDE2YWViZmY5OTUzMzBhNmRjYjYyMTVkZDNiZCIKKyAgICAgICAgICAiYjM1ZDdjZDYxY2NmMGU5Y2NjYmY1MWU5ZWE2NThlYTMxZDEyNDM0NDRjNGI3MmZmZjAxYWM5M2YyOGViN2Y2NyIKKyAgICAgICAgICAiYzE4MzJlNTY4ZWQ3MmZkOTU3ZDViNGZkMmYwMGI2MDIzMTcxYjg1YWIwY2FhMTAzMGVkM2UzZWRjOTUwMzE0NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC4yIiwKKyAgICAgICAgICAiMTA0NzM1ZDlhZDcyNjA0NjQ3M2RmNGIxM2IyZjVmYTI4NWMzZDIzM2VjZDQ2MTcwNTgyZGQyMjhjZGVlNDY0ZCIKKyAgICAgICAgICAiYTUwOTVlMjA4Y2Y4ZmJjYTA1Mzg4YiIsCisgICAgICAgICAgImRjNmE2MzFlMjk3NTQ1ZDJmNmZlOWM2OWE1ZDMwNmExMDkxNmQ3ZTdlZjBkYzk1M2YyMWI2YTA0MTQzMWVjOGIiCisgICAgICAgICAgImE1Y2UxYzEzODc0M2ZhYWM1NDk3ZDY5OWYyZmYxZDRhNDRhM2UwNjM3Y2M1ZTVlNjM4Y2Q3MzY3N2QwOWFmZWUiCisgICAgICAgICAgIjNlYzlmZTgwNTI5NDdhNzMzMzRjMzI3MDQ3Mjg1NmYzMDcyNDNhYzU4YmY4NjM4MDc0NjY3ZDdmN2MxOGUzYWIiCisgICAgICAgICAgIjMyN2VhM2ZjNzg5MWYxYzU4YWI0N2U0ZmZhNmU3ZDkwMTFhMzNkOWI0MGEyZDc4OWVlNDIyMTI1NjIzMGNhOGEiCisgICAgICAgICAgIjYxODExYjA5NzJjZmQ5ODYwMTc1MjYxODFkMjRlZWJiMzJjYyIsCisgICAgICAgICAgIjkyMWQyYjAyNmQ2YjdlMjIyMDFkZTc3ZmJmNjc5OTkwZjlhZmY0ZWE3ZmU3Y2U0NTAyMjE1ZjllN2FhNDE4YjgiCisgICAgICAgICAgIjVmNzJlYWRiNmI2OTQyYmIwOGEwOGJlN2RhNjYxOWFhNWYxZDJmZjk2MWM5ZGMyYzM0MWFlMzJhMjU0ZmRlYWIiCisgICAgICAgICAgImEyZjY0NTBhYzQ0NzRiNjI3NGYwYzM0NmYyNmRhNGVkNTU1YThjOTUxMTg5ZGM4MzY5ZjM0ZDc2ZDgzN2Q2ZjMiCisgICAgICAgICAgIjhhOTUxOGE2MjcxYzViNTYzNDYyMjVhNWFiOGRhNjAzMmE1OTMwZmQ1Yjc3NzI5ZGU2MzJlMTc1MmZjNzJhMGMiCisgICAgICAgICAgIjM0YWVjZTI1NjU3YjI4MWJlODkzMmM1NjUwYzk4MmZhMTQ1ZmRlMGJjZGQ0OGE3M2FhMDI4OGI0ZGU0NjExMzMiCisgICAgICAgICAgImYyN2Q1MWUzODYwMTZhNzI3MjZhOWVkZTFkMzJkZmM3ZTZmOTc4MGMwNGViNzBmZmZmYzI2ODgyOTU2NjczMzMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuMyIsCisgICAgICAgICAgIjMxN2U2ZjVlMTc1MDBmZTk0ZmRmZjI4NGJiZTUwMzAxMDQ0ZDE0MjJkM2NhNzAwNTk4IiwKKyAgICAgICAgICAiNDY2ZDUzYzhkMGJiOWVkNDYwY2FhNjNkNzliZmI4NzdiYzRlYTM0NWNhYjQzNTdlNjM5YTk1ZGNhZTM3OWRkYyIKKyAgICAgICAgICAiZWE1ZDY0ZmVlOTlmYjZmNzVmZjI0ZWI3NGQ0NDAzNDRkMTQ3ZTQzMzE0YTBmODlmOGI5NjE0ODIxNTM2OGViOCIKKyAgICAgICAgICAiNjUxZjZkM2NhMGQwOGQwYjRjNzNlNmQxYTc2ODQwOTgyNmQ0M2MyZjgxZjMwODQwNjA1YzQzZDBmZTY3MWQzZiIKKyAgICAgICAgICAiMDI0YzcwZDBiODk5MjNjZjkwNGUzOTk3OTk2MmNkNTE1YzE2NzQyOTJhYTMwZGFjNzAwZGI0ZWI3ZTYzZDU2ZiIKKyAgICAgICAgICAiZGYwOGMyMjQ3MGYyNDM4NjE5NDVkMDBmYTRlMjc5OTAyMTJjZmVkNDI4NWRmMWVkZGE0YjBhZWM5MTM1NTlmNSIKKyAgICAgICAgICAiOWQxMjU1OTAiLAorICAgICAgICAgICIxNDFmY2E2OGRkMmU0ZDFkZTUwODZkYmI3ODVmZjQ3ZDgxZTM5YzMxMWQ5MTdhOTkzOWE2ZmY1YjEzNDM5Y2E5IgorICAgICAgICAgICI1NmM5NzQyYmNmZTQ1MGI1YmQwMzViNTQxZmFiMzA3ZjI0ZmJmYjNmOGI5MDIxNWI1NjA0Njc2ZTU2OTZmM2JhIgorICAgICAgICAgICI5NWZkYjhkMDkwYTZjMjRhMjlkOTkwZmJmZjFkYTIwMjgxNDI1NThmMGFkNzUzNDNjNzJmMzg4MjNkYjc2NjdiIgorICAgICAgICAgICIwNWUxNmI1MTkyYjkzMzYwMDdmNzU4MTA2YzMyOGJkNDc2MTE4ZGY4MmFkMDc1NDhhNzI2OTIxZmIyZTE5MmI0IgorICAgICAgICAgICIzYzhjMzBjYzliODQzNDYzMGUyN2ZkOGIyM2VmOGQ4ZjIyYmU3ZjczYWVjZGNiMmIxZWM1NTM5ZDVmYmIyY2ZmIgorICAgICAgICAgICI5ZWQ1ZTdmMTliNDkxODNkMjIxZGZkNTM3ZDRmMzcwMzJlZjMyZjYzYjZmZjc0ZWUyNGEwOTZjZjQ1NTkyNzA5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjQiLAorICAgICAgICAgICI5MDk2M2RkYWIzNzg5MWU3Mjg4YjUzYmU1ZDlkYzU2N2IxYTA3YTE1NjZjMmFmZGRkNzcyNzMyNGJhIiwKKyAgICAgICAgICAiYTQ5ZjEyMTUxNzViYTA0YzI3NGFiYzA1MWYwYzE3YTA4YTYzNjQ4OTQzZGIyZThjNzYyMmJjYmIxZGNjNTY3ZSIKKyAgICAgICAgICAiYmU2YWRkOGM0NDQ4MTZjOWQ0MzZlZTkzY2VmZTIzZWM0MWRkZmNiMGE0MDNiYjZkYmZmMGFlNWQ2ZmNkZDc2NCIKKyAgICAgICAgICAiZGFjMWE3MmE0ODRmMzY0NzFmNGYzYmQ3MjViMmRiNWFmYTZhY2Y1MzBlNGU0ZTg2YjRmZGE4NzgyMDQ3ODcxYyIKKyAgICAgICAgICAiYjA1NWFkNjhjODQxZGU1NDVhNTU0MGM4Y2MxMmU3ZTNmMTU4MTRhMDAzOWE4MTAzNGJkZTljNjhhZTIyODVlNiIKKyAgICAgICAgICAiMTZiN2I1NTU1Zjk4YzYxM2NlMmVmNjY2YTAyMjQ2NWM2MzY3ZDBiZGE0MGMxMmU5NDFmNjk5OGExNGEyYjVlMyIsCisgICAgICAgICAgIjhhZDViZjc4MjMyYWEzNmZiNzgzNTgzZTcxYmMxMzkzMDM3ZDEzZTc3NDU0YTlkYzExMTE0MzRlNzVkZDgwMjAiCisgICAgICAgICAgIjQ2YmFiNDIwMjU0MjBjNjM5NjFlYTAwNjI2NTdjYTUwNjVkZWI2NTNhYzc4ZWI2NDk4Y2YxNGQxNzA0Y2VjNTkiCisgICAgICAgICAgIjExNjk2MDhkYjAxZmM5M2QwZDY4ZTYyODAxYjQ2NWEzODdhOWM3MmY3ZWIzNWIwYmE1M2E1ZWZhOThjOWYwY2IiCisgICAgICAgICAgIjdjN2NiYTE4MDRjZDcwMWQwMjk3YjY2MDA1YWUyNWVjM2I2Y2Q0Y2YzMTk0YTNmYTY1ZDk4YzRiOTUzMzMwNzkiCisgICAgICAgICAgIjBlZmRlNzRmYTI3NWQyYTc5ZDMzMTBhNWJjYzJjODFjOTFmYzI1NTYyY2E5MzlmOGQ5YzE3NWVkZjRiMDc2NzMiCisgICAgICAgICAgImQ1MzkyNGUyN2IxNTUyODgxYzEwODMxOTIzNzE1ZDE0OWYxZjMxOWUzOGU5MWRmYTU2NmM1NDUzYmFjYzE0OGIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuNSIsCisgICAgICAgICAgIjNkODEwMjFmZjY0NzMzMzdlMDRiOTIiLAorICAgICAgICAgICI5YjcwMjk3MzEzNzdlODI2OTdmYTU2YjA4NmNlNDlkM2M0YjE1NDlkZTgxZTNlOTllMTZjZDk3MjI5N2E1NjBmIgorICAgICAgICAgICJmNDgzZjJlZjViNzFiMDBmYzY4NDc0NGYyMjRlODU3ZTZkNzIzOWYxNTZkN2I2MTAyZjIzMDRmOGE1NTA1MGIzIgorICAgICAgICAgICI3NTZjNTQ4ZjZlYTI2ZWE2ZjczOTRkMmJiMzc5MzMzNTg0ZTNiNDgxZDA3M2MwYTU4YTBhZDc4N2FkYjQ4MGUxIgorICAgICAgICAgICJmMjBhMWE1OTBlMDMxZTZiMmJiN2YzNmE5MzYxMGRkZjcwODNhNTA3NjhjOTk4NjIzZjZlNjQzNzZhMjliNGE0IgorICAgICAgICAgICIxODAzMmQyNzM5YmQ0ZTc0N2RkZmM3N2ZlM2NmMjc5M2EyOWJjNzY3YmZhY2M3MTNlNWYxMGU1MzFiNGM3MTg5IgorICAgICAgICAgICI5N2I5YmI2YjY1MTVlMDcxMTMyODg5NzQ3ZTU0NmIxMzQ2OGQiLAorICAgICAgICAgICIxYjg4NGIwNjdkMGJiMTU5N2Y1ZmFiOTMzMDk1NzU1YTUzMGQ5ZDA0ZTI3NTRhNTc5N2ZmZmY1ZWY5Y2VmMTg5IgorICAgICAgICAgICI1NDk5OTgyMzAwNTAzYjNmZWJjYmFhMDlkMzZiN2RhY2MzMGRmM2M4NjhmMDFhNWYxN2VkNGE3MmE4NWI2YWRjIgorICAgICAgICAgICI4MGEyNmExYjgxOTc2YjM5M2NiYTliMGM4MmNiMWUyYzU4M2FiNmYzMTRlZGEyOWE0MzMyMjFiNmUzZWQ1MzUxIgorICAgICAgICAgICI1Mzc0YmJjZDJiOTZmNWNiNWJkNTgxNWQxYTVkY2JmMDgwZDJkMzdjYjk2YzRkOTYxZGM0N2UxMzBkYjdiOGQwIgorICAgICAgICAgICIxODJlMzM2OWRlZjRjMGY2YzQyYzZjMjA1MzFhZjFhMTkwMzZkZWYwOGQ0YmFjYTcxYjk5YWYzYzRlMWVkNTI3IgorICAgICAgICAgICJkNTFmMzdkMGVlMWVhMmM4YjhlYmY0ZmQ1Mjc5ODUxZGMzMjBlNzQyMDA4ZTA0MDQ0ZDBkYTA2NDM2NjEzZDFiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjYiLAorICAgICAgICAgICI1Yzc0NWRkNGE4YzU5MjkzNGVkMTVlMjJmYTlkZWM0YTRkYzIwYTlmIiwKKyAgICAgICAgICAiMGU2YWJiODI5YTNiMTZkMDhiMGJkNDNlYjk1Yzc5MWFmMmEzMzkxMmVhODMzZWU2ODkzZWQ1YWQzZWU3NDRjOCIKKyAgICAgICAgICAiYjJkZDI4ZmNlZTgwOGQzZjAxNDk1ODI1YmUwZmU2MzczMjA3YTg3OGQ0YTUyNWVhNzJjZmIwYmI1OGEyNjc3NiIKKyAgICAgICAgICAiZmIzOWVlYmQzMzVmMDRjZjcxODZiZTYxYzU2MzVkOTVlNTYwZWRkZmQ0NWRkODZhNGU2NzBkMzM1NjhkODNkMiIKKyAgICAgICAgICAiY2EyMDNlZDI4ZDkwZTQ4YjA2NGQwOWE3NWY4MjhkZWFjZDViMzdlZmNmNzg0ZmIxMWIxN2Q2ZDlmMjMxNTIyNCIKKyAgICAgICAgICAiZjhlNzYzNzkxYmFjNmNmNDZlMWMyM2IwYjAyNTJjMTllZGYwNDBkMzVmNTkyNTUzMjY1Yjg4NmIyOWNhNTZlYiIKKyAgICAgICAgICAiYzUzODYzNzE0MTRkODJhMzQwIiwKKyAgICAgICAgICAiMmIwYTQzYjNjZGM5OWQ2Y2ZjNzRkYTJhODZlY2Q3ZDU3NjI0NzVkMTQzZTU0ODZmYTljYmViYmYyN2Q4ZTQxNCIKKyAgICAgICAgICAiMWVmNzJiNmQ0ZjEzZjY2NGIzZDJlOWVjMzIyMjdjMWFkNWI3NmMwZDFiZWZiZDY1ODk2OGM3ZGIxNDk1MjM4MiIKKyAgICAgICAgICAiNDliY2Q5NWU3NTQwMjU0ZTY1NzQ5ODIzYjhhMzRiZjZhMTQxMDcyMWRmMzRmM2M4ZDU3OWYzNmFlZDllMGJhYyIKKyAgICAgICAgICAiMjMxZTU0YzI3Zjc2NzMxOTdkMTlmNTFjZTZhY2JiY2I3YjFhNTVlMzhlZGViZWVkMzQ2MTA3M2U4MGM3OWE0ZiIKKyAgICAgICAgICAiYzMwOTMxMzA2OTZiZmZmMmJiY2I3NDkwNWYyZDM0NDQzMzgwNTdmZGZhY2JjNGRiODE5MzViMjllOTllNTVjYyIKKyAgICAgICAgICAiYzFkNDhkODllOWRjNGE2M2EwMTFhNjIzMzJjZjU3MDI2MmEwNjM1OWNjMzZjMDVhNmZlMThhZmI3ODMyYjMyZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC43IiwKKyAgICAgICAgICAiYjBlNzdmNDJjMWExZTNmNDE1NTcyM2E5MGRiODhlYjE1M2NiM2QzYTI4ZWRkZjI1OWM0NzA1NmE0NzBjOTE1ZSIKKyAgICAgICAgICAiYzk1NWY4MzE4OWY3MWFlYWNkZDU1YzMzNWYiLAorICAgICAgICAgICJmYjM2MDExMDVjYWE5YTJmZGQ2ZGQ2YzU3NDZmNGZjYWZlZjQ0MWJjYjBmYjhhMmNjMDNkMGI1NzM0OWY5MzIxIgorICAgICAgICAgICJhZjlkOTk4NGU2NGUyZWM0ODVjOWFkNzU1ZjE0MGMwYjY2ZGIxY2ZjMjY2OTFjMjY3NzMxZDFhM2FmZTY4NzIwIgorICAgICAgICAgICIyYTk2NzdlNDJlODQ0ZDQ3N2I3NWJjYmI4Yzk3ZDk5ZmNmNzJiM2ZiNmQzNDlmYTljNDc2NjE5MTQ3MjE3YTA0IgorICAgICAgICAgICJkYzA2YWEzYzNjMTc2NDk1MzgwY2I5MmMwYTdlMDk3YjRiNGM1ZmZlMDQ2MzFhYjFkMWJmZWEwMzY3ODY1MGM4IgorICAgICAgICAgICI1YzE3MGZhNGExZDY0YTRjMTM1ZTYxNDgxNDkwYjYyYiIsCisgICAgICAgICAgImE0YmRkNDkyZmVjNzljM2E3OTA5M2E0NDMzNDI3MmQ5ZDE3ZjU0M2QwMjAyYzM5ZTQwOGJmYjM5MzY2YmUyZGUiCisgICAgICAgICAgIjYxZGY1MGFjNDU4Y2FlZGRlZmZiNjllMjEzY2E5MmI3NDk1MzY2MzQ3ZWRlNzMzZmYzOTlhZWM3OTZjM2MzYjEiCisgICAgICAgICAgImRmMzQ5ZjAxMWRhMDFmZWU3ZDIxYzFjMjYxODQzZGU4ODIwODU2MGMwZTg5ODRiOTUyMjNlYTM3MzFkYjkxYzUiCisgICAgICAgICAgIjkzN2E3OWIwZGI5Mzg3NTkxY2UzMmVjN2Y1ODNlNjAwZjUyNDQ0ZGZhNzY3MWNlODI3Mzg5OGZiYmNhM2E0YWEiCisgICAgICAgICAgIjY4MzJjYmIzNTQzYWJlOTY0N2U1ZjhjMTM3NzI4MjUyY2U1NDQwZmNlMTBlNGQ0ZWY3NWQ1NmI4MTRkNTE5NjQiCisgICAgICAgICAgIjQ0NDE0MTFjMTBhMmExNGMzNTA0NzI4MjdjOTllYTNlZTVmZGEzODgwZjM0MWRjYThkM2QzYTRlNWUwNWJhNDIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuOCIsCisgICAgICAgICAgImI4N2YwNGIzMzUwZTEyNjNkYWEzZjk0MDVlNmZkM2QyNWQ4ZWZhMTMyNTU2YTQ5NTcxZjU3MDhhNDI1MjdhZjMiCisgICAgICAgICAgIjFkYjAxZWRmNzk4MjBmOTMyNjY0NWZiMSIsCisgICAgICAgICAgImVjOGQwMTRkNmViOGQwMjM5YTk3NzNiZGQzMjBiZmIzZjJlZThmYzI3ZDVmZGQ5MWYzZjM5MDVkYzhhNGM1ZmYiCisgICAgICAgICAgIjEzNTI5YWVlZTQ2MTg1NGNjY2Q0ZTA5YjYyNGFmYTY0N2E3YzA0ODE0ZWIxZTU3YmExNGRmNGM3OTViNDJlODQiCisgICAgICAgICAgImM0ZDA4NjI5MjQ1ZGFjYmJlZDI3Mzk5YTcyNWE5NDhmM2JhMmY4YjY0ZDI2MDJkZDBkNWY1NWNiMjNlYWFmZmIiCisgICAgICAgICAgIjNhNjY1MDhlNGE2ODlhZDllZWU2NDRlNmEyNmQ0MzhmMzY2M2ZlYTliZDAzMTJiYjBlN2U1YTZkZWUwNGJiZTgiCisgICAgICAgICAgImEwNzQ1YTczZDVhYzg5ZmFhMDk2YTUyZWQzMDQ2ZDc3ZGUiLAorICAgICAgICAgICI3NzVkYzMyNGZlOWQ1ZTA1YWQwMTUwMTNkNjVmMGViYTBkY2Q1MmZmOWRmYzE3OTVlYTkzZDBmNDMzNTc5ODk2IgorICAgICAgICAgICI4NmZlM2Y4YjA0NjIyM2JiYTVjNzg0OWFjYWMzMTIzNTQzNDMyNjE2YzMxMDNhYzJiYThkYjBhMWQyOTk0MGJiIgorICAgICAgICAgICJhMjYyNDcwZTVlNTNiZTYwZTBlYjcyNGQwN2NkOTEyYWVmYmI4N2ZiNTE5ODBlOWUxYWMxOTRkYTMxOTI5NTQxIgorICAgICAgICAgICJjYTQzMjI0YjE1MmJlNmYyZGY2YzVmMDQ0MmI0ZjRkMmNjMmZiMDI3MzlkNDg1YTAxMTYyYmM4ZGJiYWQxNDc2IgorICAgICAgICAgICJlYjA2ZTI0NWFiMzZjNGM3MmQzZjM2MDdkMDUwODRhMGY2YjcyZGM4YmFjMzQ2YmQxOTA5MWIwMmY1OTgyYzkxIgorICAgICAgICAgICI0NTdjN2IxMGY0NDcyYjU3MTg0NTI0MjE0YjIzODI1YjU5ZjQzNGNjNDhhMmI4NTRjYWI1MGZmNzllNTkwOTFjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjkiLAorICAgICAgICAgICJlMTk1YTAzNmE1MzBlMWMyYTlkN2ExMDMzNThkYzJiZDI1YjEwMWJmNzA0NDUwYWI4ZTUwNjJjYjYzZGY1NjEwIgorICAgICAgICAgICIzNSIsCisgICAgICAgICAgIjBlZjg4MWRlZmM0NWFkM2YzZTU4YjExMDVlNDliNDIzYWI4OTEyNGE2NWI1MmNmZDgxY2ZkNTQyYjkxZTdjNGMiCisgICAgICAgICAgIjFhNjA3MWEyY2YxMmI0ODI3ZWQ1ZDE5Y2JhZjhmZWVhNTRiYjNkNzM4NTdlZTg3YzcxNWM3MWI5ZWQxYzA3YzMiCisgICAgICAgICAgImFmZDkwZmNlNDA0NDhiYjU3ZTM1MjRkMDM4ODA5ODM5ZTM2YTRmNTU0NGMzZTE4MWU4YzJlMjkzY2Q1NzU0YzgiCisgICAgICAgICAgIjY1NzRhZGU2ZGZjZTBhYjM0YTgwYjRkNDhhOWQ0MmU3MTE1ZDhjYmNiMWZhMjhjOGEyNjUwMWRiN2QwYmI0OTYiCisgICAgICAgICAgImQwMWRkNjkyNjVhMDI2ZTFhOTdlOWQzYTFhNjVhOGFhOGVjMmRmMDYzNGU2ZjI2NTFlZjQzNTQwIiwKKyAgICAgICAgICAiMWFkNzdhMDA3Y2E0MzdhYmQwMTU5ZWQ0YjBiNjgxNTQxNmY5ZjA5ZDFiMTIxNWZiN2NmZjExNTI5NzYwMWE4OCIKKyAgICAgICAgICAiMzBmMjA5MTc4NjM1NjM4NTNlZDc4ZTljM2Q3YmE0Yzk3YTA1Y2YxOWRkMzI5MjQ4NDcxYTQ3MDNhNDY1MTc4YiIKKyAgICAgICAgICAiODVkNGVjZDU0MjI0MTI5OGMyZmVjZDQxM2UyM2E3MGM4YTVkNDdjMjBlMzFjMmRhYmUzYzgyYTk1NDUwMjcyNyIKKyAgICAgICAgICAiNDlhZTJlYmI4OTk4NWQwMGI2M2RlZGQ5NTk2ZDA1MTZkMTJhNzhjMzc0YjdlZGRjN2RjZWU4ZTRmZGQxNmMxZCIKKyAgICAgICAgICAiZmFiZmY3ZmZkNGMxZmQ2MWNlMDRiZThlNDk3NWM1Y2Q3MWUyY2IwZTU0MWI4NDYxYmI4MWZiMjhjY2U3NzM2NSIKKyAgICAgICAgICAiM2U4YjE2YjI4YThjMjA3NDI4ODk1ZjI4NTM1NTg3YTVjOTlkNDZiYTRkZjlhZTA4NTAxODUxM2Q2OWFiYTNmNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC4xMCIsCisgICAgICAgICAgIjA0MmEzOTIyYWE4NzFlZWEwZDc4NDIyY2U3ODU2NmFiYmI1YjA4YzJkZGYxZWUzMGNmIiwKKyAgICAgICAgICAiNWFlODUxMTRiMDAyN2EyM2M3MmJkYjQ2YWU3YmI4ODdiZWM1YmFkN2E5ODg0ZTkzZjZmNGZkMGJjOTM4YmM3MiIKKyAgICAgICAgICAiNDEwY2NlOTZhMTRmNGRlMTk5MTk3NzM1MDUxZWZjZGNjMTk2ZjNhZGJmYWEwNjNjYjNmN2EyMzRjNmNmOTlkNyIKKyAgICAgICAgICAiMGZiYjdlMzViNmFlYzY2NDE0NjY5MzkxZTNjYmU3MjFlYzk5MWExZTVkZmJiMDM4ZjI3MDM2ODU5Mzc0OWIyMCIKKyAgICAgICAgICAiOGQwODlhYWVlMmVmMzVjM2RhZjYyMzhiNWZlNDJkMTNkZGU0MDdkZjE0ZjJkNjE4Yzk3OWM5N2QyZGUwMjkzMyIKKyAgICAgICAgICAiYjU3ZmU4ODEyMjA0ODYyYjJmMWRlZTk4M2YyNGMyYzU5NmVhNjY4ZTYzN2QwYTZhZTZkYzUyNjUyNzY5OTRlNyIKKyAgICAgICAgICAiZTRmMDJiNmUiLAorICAgICAgICAgICIxMjQ0ZGU4ODBlMGY3ODUyZTk5Njk1OWQ3NjJmY2FkOTE1NjVhNGQwYWQzYmM1Mjc1MGQ0YTA0NDBmMGI1YzY1IgorICAgICAgICAgICIxYWEwZTZmNDkyMDYxYjJjODYyNGM1MmVkZTY4NThmYTI1MThhZThlOGIxMTY1NThiMmM4MDc2YzE3YWU3ODNkIgorICAgICAgICAgICI4ZGIyNWYwZDhmYjFmMjc1OGE4MmFiOTcxZmE3MjgzZWYwNzQ5YTM3YmUyODkzZjg5NDM3ZmI4ZWE5MDA3MmI1IgorICAgICAgICAgICI4NTVhMjYwOGZjNTQyZjVkMmUwY2I1NDNmNGZhYzUyOGY5NDM1MmQwMTY0MGZjMmM1MzFiNzk4MTBjMDA3NzdiIgorICAgICAgICAgICJjOWUxMGRkOWVhOTk5NmU3NDA4N2ZhZGNiNzFhYTE0MzAwNjc2NTcxNjE0ODgyOTQzZjRhNTYxNDEyYzA1NDY3IgorICAgICAgICAgICJkY2E2NmNhNDlmODIyOTM1MTgyM2RiOGE2YjlmODAzZDcwOWMxMTg3ZWQ3NDEwY2Y5MTAwMTU1OTVjZWFiNjNlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjExIiwKKyAgICAgICAgICAiZjMxZDNkMGMzMGZkNjVkN2I5OGI3MDk5NDQ3ODJlMjA1MjVjYTdjMWY0MmQ1ZDAzYTBmNmQyNzU5ZGYxOTE5ZSIKKyAgICAgICAgICAiZWE4MmY4MGYxMDAwZmQ1Y2Y4NTlkZjU5ODcxYmFjODJkZDkwNzZjZiIsCisgICAgICAgICAgIjA0NGJjMzc3ZTg1ODlmYTVhZjFjMTczNDdkNTBlMGNiYmY5MDE1NzZmMjQxZGU2OTBjODgxNmMxMjljZDlmMmYiCisgICAgICAgICAgImIwODMxYTAxN2JlYzMwYjgyYjY4ZjY5ODMxMWFmNmUwNzc3MmJjZDg5OGZhMGMyN2Y2MmFmZGU4OTU4OTc3ODQiCisgICAgICAgICAgIjQ2MjU1NTJkOWJjYjVhODFhYTNkNzQxNWIyNDJhMDNiMTJmYzFkM2ZlMmQyY2U2ZTVmNzFjNGE0YTRjN2NhODMiCisgICAgICAgICAgImUwNjU2ZjUwMDJhYzM2ZDhkMDJiNjlhZTY1NzM0NDk4ZjEzMTk1MmNlYTQ4MWZhMmMyOTY1YjZlZjA1MTdlZGUiCisgICAgICAgICAgIjUwZGRiMDliM2VhNzAyNmQwNiIsCisgICAgICAgICAgIjg2ZjY2ZjBjMjUwNTg1MDY1OTQzZGUyZjcxMWZhZTRmZjI2MjcwMGUwZDMzMDZhMjRjOTQzMGY4N2NmZDkzZGUiCisgICAgICAgICAgImY0YzM0NDdjYzcyMTBmZDk0YTE0MzM2MmY0Zjk0NWM2ZGJlMjgwYmRlZjVkMTRmNzVlYjdiYjMxMzIwYmNiZDAiCisgICAgICAgICAgImQ4OGYwY2NmMmM5NWE3NGNiNDU4YzYyNzJiNThiZjc0MzA5M2M0YmJhMmQ3YmVlOWVhMmRkMzBjZjcyZmUyOTMiCisgICAgICAgICAgImM5MGM5NzQzMGEwNDdiMTcyNjYzOTFjNTFmNWMzOThiYTNkZjhjYjc0YmEzZTM3MmY5NTU1Y2NjOTdkNmRiNzYiCisgICAgICAgICAgIjE0ZWEwNmQ1YzQ4YzFjNjAwNjEzM2QwZTlkNjk5NTc5OTM4NTkyMGFkOGFmYzNkZWFkZjYzMWNlY2M1NTljYWYiCisgICAgICAgICAgImY0OTViMDhkNjgzZmIyMmFhNjk3ZDcxYzY5NmU0NmIxYmY0ZmQ3NmI4ZDBiMzlmMTc5YmY2Njg0MWJiYjk3MDciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuMTIiLAorICAgICAgICAgICI2YTM1NTU1NzlkYWQwMzk0MzU0M2ZmNzRlMTc0N2MyNTdhODNkMzUyOTRjMjUzOTM4M2UyMzVkZTY5IiwKKyAgICAgICAgICAiNWQ5MjQzNGVkYmQ0ZjViZDI3MTk3MTcxZjg1M2NlYjcyNjMwMzA4M2FkNDU2N2ExZDdjNjEwNGQxOTJiOWJjYyIKKyAgICAgICAgICAiZGZkMGRhZWRhMjc0ZTVjZGZiM2QwYzVkMTljOTY4MjU4MWVjN2FkYzFhODdlMDgxNTE0MTVkNWE5YWRjMWFmNCIKKyAgICAgICAgICAiNTBiMWJhODhkMGVmMzJhYzJkMWY4YWUzNDU5NTI4MTQ3NTNhZjM4ZTEyNjM1Y2ZmOGMwOTIxNTliNGU3NWRlZSIKKyAgICAgICAgICAiYTE5ODNlZDNkMmQ5ZWMyZmU3YjlhMmUxNmExNDFlODE4Yjg0Y2Q5YjcxYzEyOWE4YjNjNmRiNjIwMjMyZGMwMyIKKyAgICAgICAgICAiYTI0MDFmNzMxZmY4YTYzZGE0NThhN2Q4Nzg5MDU2MjVhZWUxZmMwOTRkZmIwN2I0NTc1YTdmMGFhZDIzM2U4MiIsCisgICAgICAgICAgIjkzMTAyNzJkMTI0YmM1Y2RiNzIxODg5ODQwYWE3NzE1ZTc2NzMyMTcwMGNiMzliMmI4YTVhODJhZTNmMDJlYjkiCisgICAgICAgICAgIjY3ZThkYjQ2ODQzYmMxYmY2MmVkOGJkMmFiZTgxNDM0NDk3Zjk5MDA2NDAyNTM5ODJkMzcyYjJiZjdjMWIwOWIiCisgICAgICAgICAgImQ1MDE5Njc0YTgzNGZiYmRmZjM1NjhhMjgyNGFlZDRhODA0OGQyYjg2MTM2Mjc3NWJkNWYwZDYzYjM0ODM2M2QiCisgICAgICAgICAgIjEzNzg2OTFmNWRkMWQ3OTYxMDc0ZWQ5NWZjOTAwN2JkNWY1YzI5MjNjMTdjNDI5MDRlMmJmOWQyNDg3NzlmZGYiCisgICAgICAgICAgImIyMDM5NzM4NDFhMTEyOTBjN2U5ZTkzNTZkNGVhYjE3MGU0MzFiZmU0NTRhODgwMTBkOWFmZjMzNzAwY2VlNTUiCisgICAgICAgICAgImM3MDRjODJhN2ZmYjE1ZTI1M2VmODRmNDAxOWUxMjQzOGY3YzczODZkYzUzNWIxOWNhODZhZjcxZDQ3NzYwOGUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuMTMiLAorICAgICAgICAgICJjYjc5YWY1YWVhZmRmMmJhZDIxZGZlNjI5MjY2NDJjYmE4MDRlYzdmZDBlYTVkNTQwOGFjZTllZGZmMjhlN2U4IgorICAgICAgICAgICJkZmZmNmRmMzgzYWYxNDQwMjE0NjA0NzZjMGM4MmMiLAorICAgICAgICAgICI1ZmNlYTI1N2NmYTkyYzg0ZjBiODkzN2QxNzNmYWVjZjc1MDNhYjE2MmUwYmFlZWY3ZTRjNTExZjNlMzJhMzI0IgorICAgICAgICAgICJlZDQwZTI0MmE4NTJiYTU3ODk1YjdjZmU0ZDYxNzk2MWUwMzZmNjYzZTAyMjhhMjljZDFhOTVhY2FjMDhhMjU1IgorICAgICAgICAgICIyNmQxZWJmZjBhYjNmMDMzZWRiZjFhZTI3NmE4ZDIzNjczNmNjN2FmNTFiNWQyYmRjODNkY2M3ZDdkM2JmNWI4IgorICAgICAgICAgICIyMmFmMmVmZmVkN2VmY2I2MTdlMDgzZTUxYmU5OTRhZWQ2NTY5YjIzODNiOTQxYWVlNTk0YzdiMDEyZTY3NTFjIgorICAgICAgICAgICIzN2I3YTU0ZTJhMTkxODI0YTEzMGQ1NWNmODQ1IiwKKyAgICAgICAgICAiMTFmYTgxOWQzYTYzODgwNGVlZjFkOTU2MGExMWY1MjMwYTBiYWRmZDY2ZWI2ODRlN2Q2OWRmYTI4OThjOGUwYiIKKyAgICAgICAgICAiNmUwNGFmOGVmYzcwNjEwODFlYzU5ZTQ1ODU3NjQyZThiMjAwNDFhZjUwOGQ5ZDRlMjg4MjIwZjlmZDM4OWRlOCIKKyAgICAgICAgICAiYjI5MTI0Y2U3NDdlYjY4ZTJlYWE4YzhmNmZiNDkzZjYxMWFjMDliNzIzMDk1ZDA3ZWVkOTI0ZjZhYjhlMDlmZiIKKyAgICAgICAgICAiOTNjNTUxNmQxZjBlYmY2MmM1ZjAyMmY1YmI0ZjRjYjViOGY1ZDQ4N2ExN2RmN2QwMTJkNzA0MzU3YWJmMTc0OCIKKyAgICAgICAgICAiNjdjZTQwY2RjNTUwMTFiMDcxMzliZWE0NWNhMGU1ODE3ODBkZTY1NDE3Y2M4MzVmZjI2OTg0ZmQwZmViYTE4NyIKKyAgICAgICAgICAiNjljMzk0YTJlNDg1MDIzZTMxZDNiMGE4ODhhN2IxNGM3ODFkZDg1YmFiNDA4Njc0ZjVmNTdlNGI3NjNkODQzNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC4xNCIsCisgICAgICAgICAgImQxNjIzM2ZjNzc1YzMxOWYxNTdhYTIwMDQ3NmNkNmVkNjRhMWVhIiwKKyAgICAgICAgICAiYmIzM2IyMmI1ZjQ2Nzk0YmU4M2U2YWZmMzRhMGU0MTFkMWYzZjRiOGRhZjliNTg1ODcyNGVmZmRiOTY5Yzk1NSIKKyAgICAgICAgICAiMjVjNjJkYzQ0YmIyYjA4MzM4NjAwMzA1NGJiZDM2NjZiNzgyODI2MDZmZTZlYTE3MjczMWJlZTExNjcyZDYwMSIKKyAgICAgICAgICAiZGUzMjQyM2Q4M2Y0NjNjYzI5MzBmNWZiNzlkYTE1MzRjNDE1Yzk2NTgyNzU2NTk0YTk5OWIyMjYzNTQyNDhhMCIKKyAgICAgICAgICAiOWYxNDFjYWVjZjg4ODM5MDc4Zjc3ZjQwYmQ0ODUxMzQ5YzFmYzc1ZTFlY2U2ZmQ2OTY2YmM5YzlkNWVjMTIwOSIKKyAgICAgICAgICAiNmVkNTA0MzU0Njg1OWU0Zjk1N2QzMTg4ZTFkOTA2MGI1OWMxZjdmNjJlZmJmZTgyNWRkYTQ1MzUzZTZmZDRmYSIKKyAgICAgICAgICAiYmFjOTgzZjk0NGY0YzJjNzljYmIiLAorICAgICAgICAgICIxMGMyMGMwYzcxYjExYmJlY2UxNGM4MTQ4M2RjZmE3MzBjMjNkNGRkNjFiODc1NWIzOTk0OWRmZDRhM2M1MDMzIgorICAgICAgICAgICIyMTYwZWVjNmY3NzEwZTA5YzdhOTdhZjkzZjcwNDRiOTJmNDFkMDlmYTNlNmM2Y2UxZjY0MTE0ODRlZDQ3NTQwIgorICAgICAgICAgICJhMWI1OWUyM2MxOTMzNGI2NmQ2ODIwYzJkNDRkYjBmNmFhZjg1YWEyN2Y1M2E0MWY4NTZiZjZhNTkxMzY1OTg2IgorICAgICAgICAgICI5YmE0YWJkZGVjYmU4NzQxM2FjOTViZTY0MDA5NTkzYjVjYTJkMDc4M2ExNmY2MDg2NjU3NTUyNDUzOTNmYzE0IgorICAgICAgICAgICI0ZmUzZWE1ZTlhYWM5ZjFmOTkxYTkyODUzOGI0Njk5N2QzMDYzY2MxYTY5YWRjMTkyYTQwYzc2ZjkyZDQ3YTA1IgorICAgICAgICAgICI4MGUzYzAyMTIwMDIzZWNlNzAzMjgwN2I3YzA5MTM0M2FhODczZjZhNGRkZGU0M2ZiMmRjYzM3OWFlZWVmNjU0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjE1IiwKKyAgICAgICAgICAiZDJmM2MyZTZmNDNiMGZjOWZjMjI5M2I4NDU4OGU2NjExNSIsCisgICAgICAgICAgImI5ODE2NDg5NTI1Y2QwMjYxNTZmYjRlOGE0YThmMzRhZWE4YTNhYTFhNjM0Y2NjYjMyNTg5MThmZTg1Y2I4ZDQiCisgICAgICAgICAgImFhMDJhNTI4NTJhODk0MWQzZWE2YzA0OGI1OGNjNmM3NTY4NTY3NTYyNWU1ZTRkZDdkZjkzYjhhY2VjMDc5NjciCisgICAgICAgICAgIjBiNDlmM2RjNmUwNzYzZWQ0YzhlMmQwZWU5YjVjYTViYjYyZGUwMDY5MTk4MzhlNGI2OWJhMTA1ZDRjNWE0Y2MiCisgICAgICAgICAgIjZkY2E2N2IxMjE5M2EwMzJiNjkyNzM5NjQ0Y2NjZjcyM2Y5ZjY5ZTQ4Yjk0YzBiZGNlNWFhMzVmNzVkYzUzOTIiCisgICAgICAgICAgIjdiODFlMzQyY2U3MmM2YjY1Y2Y3NWVhZWNhYzVmZTBkZWE5Mzg4NWJhNDIwYWY5OTMyZDg0Y2E0YjUwZTA3ZTMiCisgICAgICAgICAgIjI4ZWM1ZjgxNmQyZDg2OTZiMjBkZjc1ZiIsCisgICAgICAgICAgIjgwZjFkZjI1ZjM2ZjMxNGI5ODJjOWM4YWFmYzBiOGExYTJmMTc0YWJiMjk4MDg2OWMyOWQxOWJlMWQyZDkzYjQiCisgICAgICAgICAgImZiNDI5OTkwNmMzNTdmZGQ0MGU4OWExOTU0OTJhOTc5NzY2MWYwNWQzODcxZDFiZDBhNWM0NWQ4ZjliMGZlZTUiCisgICAgICAgICAgIjY1YjAwMDRmZjVhZmM1YTZmODlhZDYwM2U4MjI4MzU3MGJkYjRjNmUwY2ZjMzEzZTRlNjY1YTk0MzRiMzJmY2MiCisgICAgICAgICAgIjc3M2Q2ZWRhYmNlODVmZTdjODBmMDMzMDJhODRlMjA4YjViZDBhYWQ5MWNlNjJmYjhjMmJmNTRiYTY2ZjdlOGQiCisgICAgICAgICAgIjAwMjE5MjE2MjkyMGE0NmUzNmRlYTU2NjFmZGQ3NTgxNTM1NjQwNzRiODU1OWY4ODkzNjI0MmZjMDk5ODE0OGYiCisgICAgICAgICAgIjE5ZWI1MGZjMTFmYjI0YTdlZDhjODM0OTY1OGZlOWQzMWU2Mjc0ZDQ1ZDZmMmI2MDliYjVjY2QxN2UyODRjOTkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuMTYiLAorICAgICAgICAgICIyMWVlNTgxMmUzMjQ2ZGFiOWMzYzI1OWIyMTM3ZDY1Zjk4YTA1ZTU3NDA0NjVjYTIyYzY5MzQ5NzAwYTQyY2JlIgorICAgICAgICAgICI0ZmZiMzkzZmUyODE5OTMzOWM1MTAzMWNkM2IyMmYyZjBhODMiLAorICAgICAgICAgICJlOWRlNWJkMzU1ZTZhZmYxOWZhMTFhMmQwZDNlZGMzZjY0NjliZDNjNzU3MjA2ZDY2YjNmMDk5MDhmZjYxOGFmIgorICAgICAgICAgICI0ODAxYWM3N2I1MmNkZTAzZDRhZTc0OWQwMjE1NWU1YzcwZmM5OTVmNDg3NjcyZDI4MDYzNTg1NWRiNGI2NGEyIgorICAgICAgICAgICIyNjA5YjBjMTYwNjcxNjNjNTE5MDQyMDU3Y2IzNjcxMmM3YzJmZWZlZDExZjczYzI4YmRiOWQyNWYwNjM2YTRjIgorICAgICAgICAgICJhYTExMjY5ZTVmZTY1YTJiMTc1Njg2YTE1ZjFlNDhkMjhkMzQ1ZGQ5YTFiMjkwMGEyNGY5ZGRkYTNkZjNhNjlmIgorICAgICAgICAgICJmYjljZjUwNDVhYzRhMTkzYWU5MDJmIiwKKyAgICAgICAgICAiN2Q4YzUzMWQ0ZDM1NDllMGJkMmVlMTYyYjY4MjUzOWRhNjE3MjJiODhlY2Y4YzdkZjZkNmI4MWZlZjUwMThiYyIKKyAgICAgICAgICAiNGVhMTBhN2UxYTRlYWEwMjE1ZDliM2NkZjQxMzQ3OTI5ZWFjMjc0OGViZDc3OTk0NWM5YmM0NjFkYzUxZjQ4ZCIKKyAgICAgICAgICAiZjY1Mjc1NTNmMDcwMzdlNTMzY2ViMTM0OGE0NmE3ZWE3OTdkODVhMjZhOWY0NGM1ODg2OTk5NmVmMTE0NjliYyIKKyAgICAgICAgICAiYzEwYjc1NmMwMmQ1YzBlNjE4ODM2ODVjYzM3ZDc1OGRmZGU0YzliNzM1NGUzYjRmMzE2Y2E3ZjdmZGU2NTljMyIKKyAgICAgICAgICAiZmQ1ZTMzMmUxYjYzOTJhMjkyOWUxMzE3NjZjZTliYTFkOTcxYWQyNDZmM2RmMDIyNDMzODYzOGJiNjUzNDU4YyIKKyAgICAgICAgICAiZDRiNTI2ZDk2MTc0NGRhZmVjZDU5OThhZDcyYWVkM2MzNDU5OWY3YTQwOThlM2QyZGY5ZDEzYTIxY2UyMzcwYyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC4xNyIsCisgICAgICAgICAgImEwMzRhNmMxNjZjZjBiMjVkMmRkZTUzYWY0YjgzM2I0NzhjNmIwZDJmYjBjZWYxMzdmYmY1YzI3MTI3MDY0OTEiCisgICAgICAgICAgIjIzN2Y3YjI4NmQxMjExZDU3MzEwZjhhNzYyYjFiM2JmZTE5YzlhNGIxNmQzZTBhOCIsCisgICAgICAgICAgImQ4NDQxNzk3MjI4NzEzMGEyNGE2MDZmNTgzMjk3YWM5MTE1MjhhZGNkYmJkN2RlMTRhNWI0ODliNjc4NmY5ZjYiCisgICAgICAgICAgImY3ZTBiNzNiYWI1MzhlYjZjNDVmZjM0YmQ1ZGM0M2VhZThkOGM0M2Y3MTY1MTZhNjBkYTI0NzUzNmY2MzRiZTAiCisgICAgICAgICAgIjY1ZDk0ZTdmOTJhZGY1MmE5NjdlZTA1ZmQ5YWZkNzMyMzMzZjk5YWQwNTgyOTdiMjhmOGVjNmZlZmY4MDI4NDQiCisgICAgICAgICAgImEwMDk3ZGY5MWE5NzcwMmM0ODNhYTFjNzg5MmM3ZDQzYjZiOTFjZDRkODVkM2VkMmYxZTk1NTM5NTcwNmMzYjMiCisgICAgICAgICAgIjM5YmFmMmEwZTAiLAorICAgICAgICAgICI5MDRlMDQwNzIzYWI5Nzg4YTVlZDAzNTJlYjk2YzdmM2Q3MDdjZjBkYmMyNThjNTFkY2Y2MjQzNDA2ZjBjNzQyIgorICAgICAgICAgICJjNmNkZjIwNzY3MTMyYzA5NWU2YzgyYTUwMjViZTdiNDEzNGQ4ZmE0ZGUxODdmOGVjZjEyZmRkM2JlYWJkYjA2IgorICAgICAgICAgICIxNThhZWY0NmMzZmVkMmQxODMzNDA2ZWNhN2E2OWViMmQyMDhhMmY2ZjQ0MGQ1NGY2YmU1ZGQ1NjQ3MDllZGE4IgorICAgICAgICAgICIxMmFjMDYyOWE5NGM3ZjhhZWU3OGJlYWY5ZTkzNzhjOGRkOWM2MjAzNzRiYmFjYTM5NDE4NTlkZDcwMmY2ZjdiIgorICAgICAgICAgICIyNWEyMzg0NTllZTg5NzU5ZGU5NDIyYjViYjZkMjg1NzE2NmNhMjEyMGU2MzQ3NzRhMGQxZDQyZWI4ZDk0ODE1IgorICAgICAgICAgICJhMTA0NGJlYThiZmIwMmRhNTg2MmNkOWE3NDVmMTU5MjQ3OGM2ZjU3YmZkMTNhNWZkZjRiOGZhYWU4YTRiZmM0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE0LjE4IiwKKyAgICAgICAgICAiOGZjNjM5NGNkNmUxNzUzM2QxZmY4ZWJiZjNlMWFlYWVhMzMwZWQ5ZjVhNmUxZWZiODM0NTQyOTRjNmNlMjRmNiIKKyAgICAgICAgICAiOTA0YTBlIiwKKyAgICAgICAgICAiYmUxYzE4MDJkYjQ0NjgyZTU4YzYxZmUzODc1N2VhMGUzODRlYmFkZDc5NTk0ODRiMzhiYjIzNTc1NWM0NjE3NyIKKyAgICAgICAgICAiZTY3MTc2OWYzNjU3M2Q3Y2IwZWU3ZTgyMDg3YjU4NGI1OGJiMzAwNTMwMzM2OGM2NTkwYWQ5ZjI4ODJjZmE3NCIKKyAgICAgICAgICAiMGQ1MWRjNTVlYjBjNzkwZjViYjZiNmEzYmQ3MWY4YjIxNDZiYjllODAzNGMzNWI3Y2FiY2JlMTA5MzZmZmM1ZiIKKyAgICAgICAgICAiMGE4ZDdiMzA0NzZhYjkxNjg1YWVkOGZhOTU4ZTczYzFlZWEzMDQ0YzU2YjRiODcwZGE4OTM3MWE5M2I4OTY1MiIKKyAgICAgICAgICAiNzliNTViYjkyY2MzMTZjMjNlZjA5NzUzNTFjNzQ5ODE3ZGI1ZGNkODZiOTRhZGY2MDNiZCIsCisgICAgICAgICAgImI4M2M3MThjZTVjNmFiMWU0MGZmYTU2NzBhYzE2NjY2NGQzYTY4MzNjYjNiZGVmNDYyNzk0YTI1ZDUzZTE3MDQiCisgICAgICAgICAgIjYwMDY4NThlNjNmODhhYjk1ZDA0ZjRmYjY3NzRmNzAwNWRiYjJlMjJkNTE5MzYwZDVlMTMzOGFkMTUzMDhmNmMiCisgICAgICAgICAgIjY0MTI1NDk1NjcwMDdlMDIxY2IyMzdlZDRhZjVlZWYzYmNmOWI3MzE1OTlmNzI1M2NlYmE4MzA0ZjRlZThjMzQiCisgICAgICAgICAgIjMzMzlkMGEwNjRlYjc3ZjFlOTNmZDFjYzdiYTVmYzNiYjgxODRjZWQwZTg2OTdhYzQ3Yjc0NjIwYzQ5NGVhYjUiCisgICAgICAgICAgIjg2ZWQ5ZmU3NmUwN2U0YmQyYTJkMWI5NTU5NWI2OWM2NDY3N2E4ODM1ZDU2YWM2MzlkZjhmNjQzMjQxYjNlMmMiCisgICAgICAgICAgIjQ2ODhkMmFkZjIyOGRlMmRhOWJiMGEzNjM0MzhlNzUxYjUyNTBkZWFlMzA1YTM5MDVlN2UwNzdhNGU4Yzc0NjYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTQuMTkiLAorICAgICAgICAgICI4OWExMmQyMmJmODc3ZDQ0MGEyZTAzYWVhOTMyZWI1MTgzMzc5YjNjOGI5MGJlZThmZWQ2ZmM2ZGFmYjBjZjA1IgorICAgICAgICAgICIyNyIsCisgICAgICAgICAgIjYwNzI4OTVlNDc4MGM4Zjc3ZTBiMTk1ZmM5ZjVkYjc4MzNmN2I2ZjVjODFjMWQzMGNiZTllODBjY2IzODY2MDYiCisgICAgICAgICAgIjlmOGRiNjk2M2FkNDZkNTI5NDJhNWE3M2Y2YTMyN2E5NGVkMTE5ZGZjZTRjMzc2NTg0MzcxM2I2MTlmOWM0MzgiCisgICAgICAgICAgIjMyMDNkNTVlMmFiNjFkYTg5NjFhODEwMzdmMTExOGE3ODI5N2ViMzY2YTFjNTFkOWY5NDY2YjcxNWJiNjI5OTkiCisgICAgICAgICAgImUwYTlkNmUwMjUwMWQ0N2Y5N2RiNDA5ZTM4ODZlMTM2NmMzZWZmMmJhNzkwZTI2MjQzMjI3YWExNTg4MDgyYmMiCisgICAgICAgICAgImU2ZDVjZGUzZWE3ZWZiZjE1YzZjN2RmYTU0NTQ3MmZhOWU5Mzk1NmE0NTUxZDVhNzdjYTAwZTI2IiwKKyAgICAgICAgICAiYjdhY2JiY2ZmMGZhOWZjYTZmMGJiZGU1YTJmMGExZTZhMGFiYWRiMzJjODllMzE3MjU1YmQxOGQxMmUxYTYwYiIKKyAgICAgICAgICAiM2UwMDJjMWQ2OTM1NjQ0ODMyOWE0OWI1YmQyNDE5MTBmYTBjZTAzYjNlNjhhNTkwNTA3NTk5MzkxZWQxNTM5NyIKKyAgICAgICAgICAiOTIyOTNmZWYxMzE3NGRhY2VhNmQyYTA1YjM5ZjY4NDgyOGE1ZDZkMjE3Zjg0Yjc4MmM4ZmM5ODQzY2FmNmFlYiIKKyAgICAgICAgICAiMTc4ZjBlMmM2YmQyYTBlNmY3YjgwOTI5NjExN2NjOGE2YmY3MzczNTg0NjQyNGFkZWJhMWFiMzExNDVmY2EzYiIKKyAgICAgICAgICAiOGFmNzY4YzlkMGEyOGUwOWQ1OGFkNDk2NDIzMTA4ZjA4Y2FhYzE3NGFjZDFmM2FjNDM0ODY5NjFjNWM5MGUxZSIKKyAgICAgICAgICAiZmI4OWJkZGI3YmIzOWY0Y2EzYWY1NzEyZjU1M2FmNTk0Y2Q1ZDM2NDEzMjkxNDI2MTAwN2FhMWQ1ZjIxNmI4ZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNC4yMCIsCisgICAgICAgICAgIjA5ZDY5NDhjZTFjMWYyNGM2ZDUyOWNiYzVkNmQ2YzFiZWFhYjU2OTViMzBjYWFiNzQ0OTY5YmY3ZjlkYmQyODMiCisgICAgICAgICAgIjMzNWU5OGE5YmNkNjVkYWQyYjRmMGUzY2VjODkwYjA1ZTY3ZmU5NzgyM2Q0IiwKKyAgICAgICAgICAiZWRlZDYyYTY1MGY3ZGUzYjEyODAyMjlkNWZiMWM0NDA4ZTgyZGZlMDMxN2U2NDMwZmNmNDcxYjFlMjhkYThjZiIKKyAgICAgICAgICAiNmI0YmY0YzVkMDMxZTNlZTY4OGI2NDA3NzJhYTUwMDhlNTg2M2M3MDdhNDAyMmMzMjlhNjY2NGU3MTEwMTIwNiIKKyAgICAgICAgICAiYjU0ZGI1NDA2ZTdmYTljODIyNmY0MjkzMTExOTYyMGNhMzBkZTdkMDNiZTE0Mzk0MGNiYjRkMWE5Yzg2ZTk4NiIKKyAgICAgICAgICAiM2M5ODdiZmYwNzAyM2RlMTk4NjRmNzMzZGEwYzg5YmQwMzlmMTlmNGQ4ZWQ2MTZmN2M2ZTk0OTQxODViNjA0YSIKKyAgICAgICAgICAiMWE3YmY3NDkwZmQwZDgiLAorICAgICAgICAgICI3YWRkYjA1Y2JmMGIxN2FhNTA4YTBiMTcwYzRjNWFlZTg0Y2UwNjY1MGQwOGM5OTY2ZDk1ZDMwNzFhOWE4ZjNhIgorICAgICAgICAgICI5M2Y5NmE4NzUzOTliNDc4YzI1NmQwNDE1ZTc0ODQ5NTk4MjExZjlmOWQwYjg5MzY3YmFhYWYxNzRiN2YxM2Q4IgorICAgICAgICAgICI0OTBiYWFhNzQwOTYxZjUyZDdlMzUzYzUwNDgxOGEwMDBiMDM2NzRkOWNlNDkzZGMzYTRlZTkxNjEzMDFmNjFkIgorICAgICAgICAgICJlNTIxYWVmM2Y2ZDQxZDgyZTFjNWRjZTAyZTYzNmU3NzQwYTE4M2Y4MDIzYWQyNjE0OTQxZDliMTYxY2RiZGY0IgorICAgICAgICAgICI4ZjhhNTYyYzhmZmU0NGY1N2E3NDZmMjYzOWU1ZTgzYmNmZDM5MmQyM2UxZmI0YThkODVlM2JhNWUxY2I5YzBlIgorICAgICAgICAgICI1M2YwZDkxYjAxY2VjMGYwZWY5ZGZlM2YyYjMwNjViZDU1YjcyZmIxNzA2MGFiZTg4MzBhY2EwMDQ0NjRmZTdkIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAyMDQ4LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImRjZmExMGZmYTc0NjY1YWVlZjg3MDk3NGVhOTliMmNlNTQ1NDdjNjdmNDJhYWE2ZGQwMWEyZWQzMWZkMmMyNDIiCisgICAgICAiYWY1ZDk2MGIxZjg5NmVmYmEzNTQzZDY1NTRiN2IxMjY4N2E1YzY4ODU2OGYzMmUwMjZjNTMyZDI1OTkzYjk3YSIKKyAgICAgICI3YzI4NDJlYzJiOGUxMjM1ZWVlMjQxNGQyNTgwNmM2ZmJhZTQzODk1NGViYTlkMjc1NWRmZmVlYjFiNDc3MDA5IgorICAgICAgIjU3ODE1YThhMjMzZjk3YjFhMmM3MTRiM2UyYmUyZTQyZDhiZTMwYjE5NjE1ODJlYTk5NDg5MTBlMGM3OTdjNTAiCisgICAgICAiZmM0YmI0NTVmMGZjNDVlNWUzNGU2Mzk2YWM1YjJkNDYyMzkzNjVjN2YzZGFhZjA5MDk0MDBkNjFjZjllMGNhOCIKKyAgICAgICIwODNlYWYzMzVhNmZjZWI2ODYzYzFjYzBjZjVhMTcxYWZmMzVkOTdlY2I2MGVmMjUxYzdlYzJjOGE1ODgzNjFkIgorICAgICAgImM0MTI2NmE0YjdlZDM4YjAyNmNlMGQ1Mzc4NjQ0OWRiYjExYTA2ZWEzM2NjZjFlY2E1NzUyMDFlZDFhYTQ3M2UiCisgICAgICAiZDExODdlYzFkOGE3NDRlYTM0NWJlZDdlYTAwZWU0ZTgxYmJhNDY0ODYwMWRkNTM3ZGM5MTAxNWQzMWYwYzJjMSIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIyMTk1MDg1MWNkZjI1MzIwMzE4YjMwNWFmYTBmMzcxZjA3YWU1YTQ0YjMxNGViZDcyOWY1ZGNiMTVkYTdmYTM5IgorICAgICAgIjQ3YWNkZDkxNWRhZWQ1NzRiZDE2ZGY4OGJmODVmNjEwNjBiMzg3MTcyZmFlNmUwMTI2MmIzODY0YzJkM2MyMmYiCisgICAgICAiOTRlMDRhODE1OTQyMmI0ZWQyNzljNDhhNGM5ZDc2N2Q0OTY2MDcxYTViYmY1ZDA0M2UxNmZmNDZlYzFiYTA3MSIKKyAgICAgICI2ZjAwYmJjOTdiZmY1ZDU2OTNlMjE0ZTk5Yzk3MjFmMTJiM2VjNjI4MmFlMmE0ODU3MjFiOTZkZGNmNzQwM2ZhIgorICAgICAgIjAzN2QwYzU3YWI0NjNjNDQ4ZGU1Y2MxMjI2NWFkZDg4NmQzMTFlYThkOGE1OTAzZmE1NmM1ZjFjOWNmMmViMTEiCisgICAgICAiY2I2NTdhMWE3ZDNlNDEzNTJkYzNlNjg2ODk4YzRjZTQzMDVlOGI2MzhlMWIwOGEyYTg2Y2M5ZWI5ODY2ZjM0OSIKKyAgICAgICI5YWM3N2I2MTM2YjgxY2IyNzZkNjE0Y2ZlYjdiNmVkM2YzYmM3NzVlNDZjMDAwNjZlYmVlZTJjZmY3MTY2YjU3IgorICAgICAgIjUyMDU5ODk0N2ZmNjIxMDMyMGIyODhmYjRmMmMzZjhmZTk3YjI3OTQxNGViZjcyMDMwMDBhMTlmYzA0MjQ4NzUiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS4xIiwKKyAgICAgICAgICAiMmFhY2VjODZmNDIzZGQ5MjVlYzE1ODgyMmE3NDhjYmU2YzMxYTAiLAorICAgICAgICAgICJjYzRiODdmNjc0NDk3YmIwZTMzZDllMmE0YTgwNzBiN2Q3OGI1ZmQyYzRiNGY2ZWJhY2NkNGVlNTA1YjcxZmNhIgorICAgICAgICAgICJmZTIxNTYzMzdkZGYyN2I0NzVhZjMzZjZjMzQwNWI4ZTNjMGMyMDZlYzI4MTI5MjJmY2Q4YTM2NjFiODYxOWJiIgorICAgICAgICAgICJjMTgyZjgwN2YzYTEwNzJlNjJjYTJiZjFmYThiOTQ0ZTU4YTBlMjAzZGJiNzUzZjlmMWI2ZWY2MjdlYmVlNTk4IgorICAgICAgICAgICI5NjdiMzg3YTVmOTYzNmQ4YjY0MWIzODk4NGIxY2EwMzdlM2FhZWFhMTcxMGY1MTYyNWVhODVmOGZiOWE2ZTAyIgorICAgICAgICAgICI5ZTY0NTc1ODE0ZDUzMGZjMTQ2YjM0NDVhYzQyMDFiNGU0MDhhZGY2NTVmNjc4NDNkODg3MWNhY2U1ZDkwNmQ3IgorICAgICAgICAgICJmYzAzOGZlYTg4NWI5NmZiOGViMWE3MjFjNmMxNGFiYmViNzhmYjRjNzk4YTE5NTg5OTU5ODk4NDU1YTMxNjg0IgorICAgICAgICAgICIzYzZjZDk5ZWY1OGMyYjBiNDliOGFiNDE5MWI0MDJhNTRjOTI5NzMxMGNkMjI0YjE3ZjIxNDE2NzcyNWM0OGZjIgorICAgICAgICAgICJjNjFiYzQ3Y2ZhY2NmMTVlYjNiMCIsCisgICAgICAgICAgIjYwNDJlNzQ1NTg5YWYwM2FmODc1MjBmOTNjNDVkOGMzNTk4NWFkYTExNjFhMzdkODIyZTlmOTQ2MGZjNzVmY2YiCisgICAgICAgICAgIjAxNzlkODQ5MWI4ZjVkMWU0ZGU4Y2ViMzFlMDdjNDg2NWM1YTNlZmRiYmI2OWE4ODAzYjg5ZWU2NWE0MzBhNTgiCisgICAgICAgICAgIjA5YzcwNzU2OTE1MGI1ODBiYjY4NmE5NGM1NTQxYzQ2YWRjZDgyNzk2MGNlMjQ0ZmY2ODgzODdkMTYxNmU4NWIiCisgICAgICAgICAgIjRkMTc4MGM2NDgzNjA2Y2Y5MjRiNTRmMDgwY2Y0MTU0ZTY2ODI5YmY2ZTUzMjQ4MTA0OGVjNDFmYWRjMDdkNzUiCisgICAgICAgICAgIjViYjM0YmIyODE0NTIxOWNiMzBkNDdkMGQ2MTg3MDkxODBlOTAzMDNmZjllZjA5MDE4YmVkM2RhNzU3NjFkYTciCisgICAgICAgICAgIjk0ODExZjk2YmM5ZThkN2M0YmExYjU5NDZiZGEwYmQzMTNmYWVjNGM5OTNlZDI3NDhlZWQ4Y2NlNGJkYjUyMGIiCisgICAgICAgICAgImE3ZGIxNjVmOWZlNTZhYTg0NTRkNmZmMzM4NzRmZWVlYmYyOWRlMmRmNWI3ZjAwYWExZDlmYjA3M2ZjNDA2N2IiCisgICAgICAgICAgIjU4ZGM1MDYyNGUxMjdmNzExZGRlMmNjMmNmZGFiNDkxOWNjZjI4YzgzNjYwZGZjMjI3YjBmNTAwZWMxZjkwNGYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuMiIsCisgICAgICAgICAgIjVjOGJmMmFjYWIwOGJmZmVmYTY0ODA5NTJiMjRkYWE1MDE5ZDEyNWZlZSIsCisgICAgICAgICAgIjVlMTYzMDcwZWZkZGI3OWY0NzY0ZjhhODFkNDQ0NjBiNWM0MDBiZWM3MDM3NTIyOTIwZjc3Mjk1OWZkNGNmM2EiCisgICAgICAgICAgImVmMmYxNDQ1NGRjZDllODYyNTEyY2E2OWRiODM2OGE0Y2Q4ZDFhNDRkYTU5NWQ2YjQzOTM5MWM5MzE0NmIxMjMiCisgICAgICAgICAgImYxODYwODNjNGI2NDQ3YmY3ZTIwODE1MTQ2YWM3NTQ5ZWZiNjc0NjBlOGZmMWIyYmJhNWM5NWE1MWVmODEzZDUiCisgICAgICAgICAgImRjNGU2YzM4OTJiYzRmNDM5Yzk5MTE3ZWQwNmMxNGE2YzU0MGZkNGM2NWQxOTVkOGM2MWVhNzc5NjgzOGU1YTUiCisgICAgICAgICAgImRmYWYxMWQwNzEzYzE5MWU4YTBiODA4MGY3YTc3ZTcwM2FiMzY2MjJmMWM2NDhiNzY1NDM1YjkwMjc5NzE4MTEiCisgICAgICAgICAgImIxMTUyZDk3MmZiNzZhYTg5MjA1MDMzZDk1NzgxODdhZTYzNDg4ZmRhM2M4NmIyZjI4ZTc3OWFjNGM4OWNkMjUiCisgICAgICAgICAgIjIwMTdkMWE5OTU4YTUyYzViODdlYzFiZjljYmRmN2RlMGU5N2M1OGJhMTFiYTNhMzM3MDVmM2Y0OTk1ODlhM2EiCisgICAgICAgICAgIjcyZTJjMGZjNWIxNmZjYTIiLAorICAgICAgICAgICI0NGU2NzFlMDNiYjY2NzgwZWMwNTg2ZDU2ZjhmNmE0OTQxNWFkNGJiY2UyMjZkNzVkNzBmMDZjZTI5ZGVlYTdkIgorICAgICAgICAgICJhMWFmYTgyODdlNDQzNjNjNTEwZjM0ZWI4YmYzMWNhMjQ3Mjk1OTI2OWMxOGRmMDkzNmZmMTJjNjE2NmY0ZjQ1IgorICAgICAgICAgICI5NmNiMWNhZWM0MWRlZGE4YzUwOTk5YmY0Yzk0NGQyMTM3NWIzNjc1MzE5MWI0Y2I3Y2FhMWI0M2U5MTE2Y2JmIgorICAgICAgICAgICIxZGE4YjIwMWQyOTdhNGQwOGJiMGU1YmRjODk1MzI3MGY3YzI4MDk2NzhjNDRiZWE3NWU4MWZhYzIyZDI3MTA2IgorICAgICAgICAgICIzMDJiYjY5ZGEwNzRiNmVmYTY2ODhjZjgzNWM4MGJmNWU0NTUzNTI4ZWNlMGI3YzFiNzdiNjY2ZWEzNDUyM2VjIgorICAgICAgICAgICIxZmNiM2UyNTA1NGUwYmI4ZTRiYTAyN2U1YzIxYmY3YTUxNDNiZjA0MWNlOWNjYmNmYWZhODc4MDgyZmU0MWY3IgorICAgICAgICAgICI4YzcwYmY0ZTUzY2Y0ODdjMWFhZGIwMTkxNWNlZGRlOGNkOWZiODRlZmQ5ODFhYzk4Y2Q1N2E4MjU2ZDRlOWUyIgorICAgICAgICAgICJkMDg2MmRhYjA0NTRkM2ZmNGZiOTg1MjY0YTQ2OTk1YWIwNjhhNzRlZGM3ZWQ4YWVmZjVmYTMwZjNhN2Q3NTk0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjMiLAorICAgICAgICAgICJlMjAwNGIzMTA3Mzk5ODJjZmE5ZTk1NDUzYSIsCisgICAgICAgICAgImU5M2U2NDEyMzM3YWI3YjBmMWI1Njk4MDFhM2MxNjRhNmYyM2UzYzI3YzdjNTVhOGM1YWM5ZWFmMzE4ODU1ZjgiCisgICAgICAgICAgIjMyOGI1ZDdhYjRjYjg2MTlhMDBlOTk0MWNjYWE5NDg1NzA1MjcxODI2MTc0NDNjMWQyMWU0YTZlMjFiM2Y2ZDQiCisgICAgICAgICAgImY2OThhNjFhZTAyOTE3MmNmNGRhMDM5ZDkxNTg1YTg3ZGFkMTI4YzJmYWM1NTMxYjJmNDVkY2VmOWI5ZmMzMzEiCisgICAgICAgICAgImM4MDQ0ODg1Mjg4NDdjOTA4NzVkMTkwNzVmZmZiMDA1NzYzZDg4ZTA4MTQ3NjY5MjI4YTlhYWQwMTYyNWJjNjEiCisgICAgICAgICAgIjExMmNjN2I3NzJmMzIxZDQzM2Q0ZjI2OTc4MjA5ZDBlNzk2NzZhZjNiOGE3NGI5NzNmNTJhYjkxOTA4NWYzNTIiCisgICAgICAgICAgIjM1NWY4NTZhYTQwZmZhYmNlNTQzZDRlNzZkNDU0ODkyOTg5Y2IzODNmM2U2NmJiYjBlOGZlZWJmZjdjNmE1NGUiCisgICAgICAgICAgImYyNjI1ZmM0MDUwZTZmODdhMzIzMTMyYTRlNjcxMjY4ZmI4M2NmZjJkODIyNTFiNzljYmUzMmRhYThlNTUzMjAiCisgICAgICAgICAgIjJmZTg4NzIyNjFmNjBkNWJiNTExZjJmYTJmMTQyMWEzIiwKKyAgICAgICAgICAiMmJiZjZiMGM1Y2YyMGVmMmY2YzVhMGFhNDg0NTRmODUwYWE1ZjZiYmViMDMwZGI0ZTJiZWMxMWZiMjAwZjAxZSIKKyAgICAgICAgICAiNGVhZWYwNDRkODE0MzMzMzMzOGU1ZTY2MzgwMDg3NjYwZWQwMTczYTc2ODIxMjg1Njc3ZTM3MWYyOGVjNDUwMCIKKyAgICAgICAgICAiZjRkNTlmYWJhYjIwNzNlNzM0MzY1ZmM2YjA5NGVlMGFkYmNlYWNjZmUyNDk4OGNlNjE1ZDYwNWZjMzQwOGMwMyIKKyAgICAgICAgICAiYmUyMjFjOTkzZjYxYWE3MjRmYzg3MTRhOGE0YTE4MTVmOWU5YTk5ODgyYWE0Njg4M2U3MDQ3NGUzMzI5Yjk5MSIKKyAgICAgICAgICAiZTZkNTNkYzZiNTAwODYxOTkyMzQzYTZkYTg5YThiZDZmMzdmMzRlNWRlZWVmODBlN2Q1NmI5M2E0NTE3NjA2NiIKKyAgICAgICAgICAiMzY1MGZhNDU1ZDU1NDE4OTlhNzZhYWQxYzYyNzVlYzgyYzQ2MDcxMjI2NTliNTA4Y2I1ZGMwMjZhY2Y5M2ZhMCIKKyAgICAgICAgICAiMWE1ZmNhM2Q4MWMxYmIyMGE1YTVjZjM1N2EyM2M5NTY4OGVhNDJlYjFlZjJjOWQ0NmFlMzdmOGNiZTYxNWMyMCIKKyAgICAgICAgICAiODRkOTg5Yjg5MmYwMTY3YjIzYmUzMzYyZmFjZTgwOGQ2YTVlYjg5NjE5NDQwOGRiN2MwMTYzOWM1ODYyMzA0YyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS40IiwKKyAgICAgICAgICAiZGI2YWYxMjkyMzA1Mjc4YzViMzM4M2Y4YTQxZDZjODM1MjIxMTRjOTg4ODU1MDc0MDY1YjIzZjlmZWFlOGVhNCIKKyAgICAgICAgICAiMzFmZDVkYTM2ZjliYWJmOWRjNjFkZjJlMzkyMzQ3ODMwNDczMzhlYzRmIiwKKyAgICAgICAgICAiY2I4NTFmYjI3NmE3NDkxY2QzZWZlNGQzMzk1MDE2YzFlYzJiMTUwOTRhMWVjNmQ5MzBkNGNhMjFiNDIwZjg0NyIKKyAgICAgICAgICAiZmY2ODY4ZjAxNGQyMDlmZjgwN2U4YjFmNzE2NzBiMzI1MDk0YzBmNmUzMmY4NGY3NjgyMjIyMDJiMjFiZTM2YSIKKyAgICAgICAgICAiMjg2YjMwZTA4MmVmM2JiYTY0N2NlYmVlYWZlMzEwNjk0NDE4ZDcwYTY3OWViMjAxMDc4MGRkMGU5NjU1M2M0MyIKKyAgICAgICAgICAiY2JjNmQwMGVhYzIyYWE3MWYyNDgyMWM0ZDZjMTc3OGU3ODZjZDhjN2JmMmNiYmYyMTRlMjAzZTJlZjJmMzMzNSIKKyAgICAgICAgICAiNzhjZjFhOTQ3ZTI3ZTU5OTk2MjkwY2JjZDZjYTNmOGY5NmJhNjdlMGUzNDEzMGNmZGY4NmVmNDhlNjdjOTBiOCIKKyAgICAgICAgICAiYjcyZTZmNDI1NTAxN2RhMmQxZjNhZWRkN2ZiMWQ5ZGU0MmVmYzAzN2FiZTY2MTZlYmRhOGQwYjQwYmQ3ODBjYiIKKyAgICAgICAgICAiZGI2OGNlNTQzMThmZGFmZCIsCisgICAgICAgICAgImM5OWE5YWI2N2NhZDBjNDFlYzg0N2JjMjc0NjdmZGY1YmY2MWVkNmQwNGM2NWY3ZDlkZDhiYjcwMDdhOGE5YjgiCisgICAgICAgICAgIjNhM2MzOGE5Y2I5MjVlM2U3YjNjNDA3ZDY0NjY5MzE1YjM1NDQ5ZTc1NDI4YWU5NjE5MTRiMGI5MTAyM2U3ODMiCisgICAgICAgICAgIjE5MWY5NTQxYjY3ODY1OTcxYzk1YjBiZTE4OTMxZWIxYzg0N2MyNmEyOTgzYzA1ODRlYjIxN2M5OWM3MDVmNWEiCisgICAgICAgICAgImQ4Y2JiMDlmOTliMDZiZGY3YmQxMjYyOGFlMzY2N2MxMmM3MjI3ZDk2ZmY5YzEwOGRjZTMyMjUxMDZmNjJmOWEiCisgICAgICAgICAgIjRhM2E4MTE3YTk5MmYyODhjM2I1OTc5MTA5ODc4ZmNkNTljNjc5NmIxOTk4NDgyZWE4MmYzMDFjOTM5MTgzYjIiCisgICAgICAgICAgImRkNDc4ODA0NDg2NzhhY2JhMTJkN2JjOGE1NTJlYjMyNzYzNGU5MmQwY2RjZjcxZWZmYjY2NmFkOTAyZDllMjYiCisgICAgICAgICAgImFkMTg2MGUyOTI4MWQwMmZiMGM1NDkzYmY3NGFjMDJjOTQ0MDQzNmUwZDc1MzIyODkyNzc3ZDMyNWVjODQ1MmQiCisgICAgICAgICAgImU3NThjYzZhNWNiYjAyZDM0MWY0NWM5YWM4ZWRmMTUwZGFkNzE1ODJkYzc3OTU4YTg1NDRiMGI1NThlZTJhMGIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuNSIsCisgICAgICAgICAgImU3OTllNGViYzg2OTMxOWVlMjI1ODAiLAorICAgICAgICAgICIzYTA3NTdjYjQ5YTNmZTZhZTgwZDM3NDIwNjhiNWM4MDY4YjhjNTg4NTQyMDAxMTA5M2MyMjA5OWVkYWFkYjQ5IgorICAgICAgICAgICIxZjIyNmY4NTYwNjYxNjNhYjUxMDVlNzg3OWM3NDkxYzE4MzU5ODVkYzQ5NDIxMGVmNzhiYWQ0ODE2ZDliNjk0IgorICAgICAgICAgICJjOWM4YmU0NjZhNGQxNzhhN2RkZWNiY2U1MzY1NDAwZDY4MjFiNmU5YWUwZTAzYmI2OWFkYzRlYzczNGFmZGNkIgorICAgICAgICAgICJlYTZkYzBjNDg1OTZjNDhiMjczNWVmNzBmMzczNGMxODZkMDMxODM3OGQyYmY4MDk5Njg4NjcyZmEzODU5MWRhIgorICAgICAgICAgICI0YWU2ZmMxMTJiNzI3ZWM4MTk4NGRmN2I1NmM5ODQ0ZTI1YjBmY2Q4MWQyYmU3ZDE4ZDAxNjQ2YTZkOWZlMjI1IgorICAgICAgICAgICJkMzY5N2MzNGVkMmUzMzZjYzAzNzNkYWEyOGQ4ODJlNDk3NzU3YjBhNjUxMDg2MmVhYzEwZDNiMjRhZGIyNTJmIgorICAgICAgICAgICIzMGQ0MzRlMzBhNjM3NjQ2OWQ4MGI5NTcxMTE2MTc3OGRmMzU4ODliM2FjZmIxZjY1M2VhNjMwNzJmMzVhM2M4IgorICAgICAgICAgICI5ZjZiYTUyYWZiYmRjMjhmMjNkMzhmNGQ0ZTc5ZmMzOTdjMTAiLAorICAgICAgICAgICIzYTNlNzI1YzZlNGJiMDA2MTI2OTYxOGNiYjhhNjI2N2Q5NTU4M2FiYWEwM2Q4ZGY4NWE0ZjZhNWNjMzU5YmYxIgorICAgICAgICAgICIxNTI2MGRkYjcwYWU3YzY2YmI4ZDg3ZDYzMzFmZjFiMGI1NGJlNTY0OGU4M2U4M2E5MWM1NGNmMzcxNDk2ZWU1IgorICAgICAgICAgICJjYTAyNzNiMTlmNzAwMzcwYzJjOGNkZjQyODEzMzhhNmU3MmY2NjMyNDE2OGVhOGNkYmM2NGM2MDliYTk2NzkxIgorICAgICAgICAgICJjNzkxYjVhYzg0MDA5OTJhOGM2NmZiMDlmNGUzMTMwNzQ5MTJhZjBjYjc0MTVmYjIxNWViOTdmYWViYmVmMWE0IgorICAgICAgICAgICI0NzIzOWE5MWRiNGEzNGZjYTRkODQzNDYyNTllZTBhMWRhZGQxMGI3ZjAxZmM4YzUzZTQyMGY4OGNkZmEwY2JjIgorICAgICAgICAgICJmNjJiZTQ0YjhhNzk0MDg2NGZmODEzN2VkYjEyMmFjMmRhZTU0MTBhNDdjZjA3NjJlMjBmMjA4NmNiZjY2ZmY0IgorICAgICAgICAgICJkMWE5ZjcyNzBmMDA5Y2IyZTA3ZDkwMjBiNDhhNzZkMjQxMDhlOTk4OWJmOTA0ZTRhNzFkZGI5MTc0MGFkN2U1IgorICAgICAgICAgICJkMWI2OGVjNjRlM2U2NmNkMGU4OTdkY2M2NjU3MzllYmFjNDUxOTkzZjAyY2M1YmZjNjNhNjAyZjU1ODM4MWRhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjYiLAorICAgICAgICAgICIwOTk3MTJiODI2YmE2N2NmOTI5MjI1YmQ2MTJlYzA2NWQ0NTFlZGUyMzFjOGQ1YzIwNDA0ZDQ3MGU3OWE3YTFmIgorICAgICAgICAgICIyNDZlM2VlY2RjYzc1ZjA4NTMyOWY4ZjE3YjgxZDEzMDMwMGZjM2I5ZjA5M2EyIiwKKyAgICAgICAgICAiODFjZDY0Yzg0ZDc3NjVmYzYwZTRkZTNiYTliNGRkMjFkZGZiNzRmZTJkZmI3Y2Y2MTlkYmE0Y2JjYzE3NmVkOSIKKyAgICAgICAgICAiNGU2ZjM3ZWQxYTk3ZTNiZmQzNjM2NWQyNjQ0ZDNiNmVlNmM3NzEwOWZhMTg0MTJlZTdjZGRkM2JlOGQ0YmRlZSIKKyAgICAgICAgICAiOTRjMDk2ZjA3MmNhYjZmMTg4NmUzYTg0YTdmZGI1YWZmM2RkODNmN2U1YzViNDliYjFiMzhmOGZhYTc1MjUzMSIKKyAgICAgICAgICAiZDg5Yzg4MzkzZTllYjhmNTdlZGM1YjlmZTZlZDJiYzk1ZDI3MmNhOTk1ZjdlMjU5YjAwODMyZDk4Yjg3MjMxMiIKKyAgICAgICAgICAiY2JlZjhhMDQ4ZjZlYjc5MTk3ODRhZWQzZDMxZWI0YjEyZmQ4MDc2MGExMzRjOWQ2YzMzNGMyZGQzZGZkZjQ5NyIKKyAgICAgICAgICAiNWNmMWI1MWU4NzEyMmI5NzMzMzM0NDk2MDhmZmJiMmNmMzBhMDJiYzQ2ZWEyNDdiNDUzOWIxODYwN2JkNDdkMyIKKyAgICAgICAgICAiY2RmMDg3NzIxNGJhIiwKKyAgICAgICAgICAiNzg2YjNmNTk5ZDFiNzQzZTIzNTgyNjI0ZmEyYzk0YTM2ZmI2YmQzM2ZkZGQ1NzY0MDhjYzg1NGFkN2NmNjY3ZiIKKyAgICAgICAgICAiMTczODBhZjIwYjBiNzMwYzZiZTk4YzAxODA3NmI5YjUwNDFkYWYyZWViMDI1NDY5MzAwYWE0MzY0MzM1YmUyNiIKKyAgICAgICAgICAiN2QzM2IwNmI0YTdhNzk3YTNjMGFhNWZkM2Y5MTZhNTVkYzI3NGMwYTI0ODdmMTI1ZjlkYTgyNTk2ZjQzNGM3ZiIKKyAgICAgICAgICAiYmFjN2VjZTJlZjZjODNlMDM0OGJmNGYyYzA4MzA1MDc1NWI1NmE5YzYzNDdmMzljNzZiMGUwZWVkYzYxNTQxMCIKKyAgICAgICAgICAiMjVjMjNhYTE4NTVjMGIyMmI0NDZmZTFlYzVmMTExMmM1YTdmYzI4NWVmZGM4NDIwZWMwMWEzYTdjMzNmNzM1YiIKKyAgICAgICAgICAiNDU1NTA5MmE5ZThkZTE2ZjNmN2Q0NjlmODhjZDc1YzAxYzdmMmU3ZDU0NmExYjllN2Y0OTg0ZmEyOWEyY2M4MCIKKyAgICAgICAgICAiZDMxMGY5ZDc4MThkZjZkOWFkNmNjMjA1Mzc0ZDUyZThlMTczOTBiZGU3MmYyNWI3MTJhNDI2OWYyM2FlYjI0MSIKKyAgICAgICAgICAiYTY2NmU5NjQ5NmNkODRiODMzZmI1M2QwNTcxZjdhYzJkMTk2NGI4ZjJhN2UxMzMzNmQ5YTdlMDMwNDFkY2ZjYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS43IiwKKyAgICAgICAgICAiNWYyYTVjN2Y5M2U3MTRlZWNhYjNhNTVhNjljNzlhM2NiYzE1YmQxOWRmMjc5ODlhOWJhYjU5ZmJiZWE5ZmZjYyIKKyAgICAgICAgICAiNjYzYmY4ZTFlNzQwN2RjMjczIiwKKyAgICAgICAgICAiZTAxOTYwODI2ZDFhNjlmNjg0YzljMGI4NWQ4NGRjYTU4MTFjODlhMmMwNzQyZjMzYTJhZDE5OWZiNjU3YTFhYSIKKyAgICAgICAgICAiOTgxMzYwMWQyOTkzNmE0M2Q5YjllYjRkMzI4OWNkN2QzNzA2YWI4NmI0ZDY2YWRhYTdlMGExMzQ1MWIyZWRiMiIKKyAgICAgICAgICAiYmM3NzEwOTExMTBjZGFkZDdlZTJlNmFhZWEyYjM1Y2ZhZTRjZTNiMWRhMTgxNjY4NGM4OWMwYjNmYjJmODc3OSIKKyAgICAgICAgICAiYjI1Y2UwYzEyZDQyYjFkM2QzMGI4ZjIwYmViODk5OTE2ZTRmZDBhMTU4ODYzNzE5MmUwNTI4Y2U2ZWE1NGM4ZSIKKyAgICAgICAgICAiYjc1NGZkN2ZmMDAzMjU4MWE5NTA1OTk4ZTY5ZTE0ZjA3MmJmOTVkZmVmZjAxNGRmOTllZDc4NTNiOTgyZTg4OSIKKyAgICAgICAgICAiNDEyOWExZDI3YzUzZWFhYTIzNGM4ZDE0YTdmZmM1ZjVlMjE4N2NlZjc5ZWJmNTJiM2Q2YzA2NjU4OTViZmI4NyIKKyAgICAgICAgICAiZTRiZDYxMGUzNThmMzUyNmRhMDU5MmM5ZTUwMmI3MmI3NmU0NjU2NiIsCisgICAgICAgICAgIjc3ZDkwNzE4MWNjM2IxYmIxOTgxZThjYjIyZjdhZDc1Zjg4MmUyNmFmZDI4MWI2NGRiNzBjODRjNmE1MGZlNzQiCisgICAgICAgICAgIjI0OWUyMmZiZWU5MGUzMGQwYjcwYWUyZjdlMTJhY2RkZjY3OGYwMGQyMjdlNTM2MTU0MjY2MjQzMDI2OWZlZWEiCisgICAgICAgICAgIjM0MTI0NzkyYWZiM2Y4N2IzMGY5NTBmNGVkZjIyYzQ0MDRjOTY4OGRlYzM4ZWEwYjk5Y2IzZGMzODRiZDg4ZmEiCisgICAgICAgICAgIjMxODNkN2UwN2EyMDU0ZDczZWE1MWQ0Mjg2YmIzOWRhZTNhZTZkMGI5NjUxZjFlYTQ4OGY4MDVmMmEyMTZlYTIiCisgICAgICAgICAgIjFhNTY3NmI5N2QxYjExZDNiNDAzNmNlMTY3ZmVmNjRlMGViYTQxOWFmNjczOTgzZmM2ZWUwMWM2MzdiMTY0ZTUiCisgICAgICAgICAgImFhYWNjOTlhZGVlOWY0N2QyMTkyNTQ2OTZjOGZjZWVjNmM3NGFjNGUzOTA1MWUxNTI2OTQwMTczODI2NGYwY2EiCisgICAgICAgICAgIjViZjEyMmM1NWM5ZTVkZDg0N2IxZDU3NzRlNzQwOGMzNjg0YWE5NzRiMGJhYWY0MGVkYzIyYTAzNTdhZjcyYzgiCisgICAgICAgICAgIjE2Y2Y3MzFmY2I2Mzk2NTM2MDY5OWYyNjk5OTdiODQ4MGYzMGE2YjVkNTdlMTJhNWNjNTRlYzBjODA1ZmRjZjYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuOCIsCisgICAgICAgICAgIjU1NjEzOTU5M2VlZThiNmU4NyIsCisgICAgICAgICAgIjJkZTJhNTcyMjRmNWY1YjEyZTIyM2ViNWY4MmI5ZjQ3MjQ5ZDI1NTU5Mzc5MTM2ZWFmMThlMmY2YzgzM2UzZjAiCisgICAgICAgICAgIjFiZGVlYTljMzAzYmQ5Njc3YzJhODU3MTdkNTkzYTI4MDJhZWNiYzZiM2I3MWYyYzc5MDNmZjY5MGUzZjNjNDkiCisgICAgICAgICAgIjU3ZGQ3NGNjOWMyYTY4ZGMxZDMxOWMxZTE3ODdiYmI3ZjBlNmU1MWUzOWE1YmFkYmJhOWZkNDY3NjYxOTc0MzEiCisgICAgICAgICAgIjJiNTU3YWYxODk1MjU0OWY2ZWJhOWRmNDlmNzBlYWIzNjg5ZjlmYThmYmVhMWM5N2UxYmIyZjA5M2U2YWNhOWMiCisgICAgICAgICAgIjM4MGVkYzU0NmExOWM0NGY5MWY2ZGNhYTI4OWJkMTE0ZmVhMWIwMzZmOTliMWE1N2Y4NjE0M2Q4Njc1YmQwN2QiCisgICAgICAgICAgIjRkZWFiYzlkNTEwYzYxNzA5OTQ0OWNjY2VkNWM0NTA3Yjc5ZTg1MWVmZWIxOGQwNmIxOTk4MTBiYjZiM2NiZTQiCisgICAgICAgICAgIjEyNzNiYWE3MzUxNjAyZTVmOTUyMTNmOTY5NTVhZDVmZGQzYTIwNTJkYmM3NWZjZjYwYWEyMjQ3ZjJkNGU2MDMiCisgICAgICAgICAgImRhNDUzNzBkZTFjMWRhNjg3ZTI2OGVlNDQ2NjdmOTRkYWQxM2JjOWIiLAorICAgICAgICAgICI0YWNlNTRhNzUyZjU1NmUzNmVhYmIxMTk0ODk1ODQxMjE0MGM4MGMzMWI2MWRjNDBmODFhNmIxMjE3YTAxY2UwIgorICAgICAgICAgICI2N2FiMzdmNTNkZjRjNzdkOWVhOWMyZDc5NTBjOGNkNDk3MDBiOGNkMjRkNGU3OGY3ZmEzNDYyOTYyY2JmZGU2IgorICAgICAgICAgICJkMDJmYjBlNTAzNjU2NDkzMjUwNWFlMWM4NTFhYTZkMWQ4NGVmZDA0ZDU3OGFkNjgyNzNhMzZhOGFlMjNkMTQ1IgorICAgICAgICAgICIyZjk0YTkzNzg4MTc3MTNlNzY0YTA5MTc0NTI2MjliNWRjNzViNTdiMGQ1ZTZhNzI4YzgzNjkxMTcyZDJjZDk1IgorICAgICAgICAgICJmOGJhZDA3ZGI0NjhlYmY1NDViN2YzZjJjODYzYjZlMjBjNjdjNDc2OWRlZDAzOTFhMzM2ZjNhNWQ4N2UyNGZjIgorICAgICAgICAgICJmOTFhYWY3NzRiZWU3N2E3ODlhNTkwODAwOWM3YTU1ZWFjOTJhZjRjM2Q0NjFlN2I0MDYxNmNlODA2MTk0YmZjIgorICAgICAgICAgICIyMDc0YzNmNGYxMzU1OTcwMGIyNzA4YTBiNzU1Nzg5NjcwYTM2MjZhMTQ2Mzg4MTFiYjE4ZTE1YjEwMjVjM2I5IgorICAgICAgICAgICJiZWYxMTExNzZiYzFmMjQ2OWVhOTlhYWQyMDg2MDU3M2Q2YzZhMWZlNDBkYjUxZTM2ZmUzMzgwMDEwMWJkYTIwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjkiLAorICAgICAgICAgICI5YTEzOTY2MjJkMDY2YzEwNTYwODU4YzJjNGNkNWMwNDQ0OWUyYjk1NTBjNWJjOTI5Mzc2MWE5MTA0NDExZGExIgorICAgICAgICAgICI4YTU3ZDliNmE5OTczMzNjZGJjZTc3ZTlmZGJlNmJiODMxIiwKKyAgICAgICAgICAiZjE3ODYxYWNmZmIyNGNhY2VkOTBiYTM4YWE3ZWEwZjJlNTRlZWFhNjJhZTY2NDk4ZjNjMjhmOTk2YmNlZTI1MyIKKyAgICAgICAgICAiYmVlODE5OWUzZWI4MGQ2MjdmZWViNmUwYjM5NDkwZWRmNzZkMTZhMmEwYmMyMDA5MzI1MmE5ZDdmMWY5Mzg4YiIKKyAgICAgICAgICAiMDYxOTQ0ODUyYWZiZTczY2U0MTNhM2ZjYTUyMWI5NDc0ZTY3ODEyOTQ2NGQ5MWI4MmJjYWE1OWY1NmVjZmIxMiIKKyAgICAgICAgICAiNGY2MWY1MDQ2NzEzMDEwNWIyY2JjNjk0M2I5NTM2OTVjZmNkMjBjOWI2ZWY1M2YzZjIxMDMzMWQzOTMyZGMwMSIKKyAgICAgICAgICAiMGM3MzU5MjkwOTZiMmU2OGZmMTY2NjRiMGI5MGEwZmExYmU0NjA1Nzg1OTJiMGNiNGQ2Y2E0NWVhMDZiZGUzZSIKKyAgICAgICAgICAiOGExZWJmZWY3MGQ4M2VmNzliM2E3NGRiMDYwZmMwMjAzYjc0ODA3ZjQwNzAwMWY0YjRkOTllYzUxNThlOGU3ZSIKKyAgICAgICAgICAiNGIxMDJhNTE1ZGU5NWQyYjcwZmUxZmI0IiwKKyAgICAgICAgICAiMTAwZWNlNjM0NTI1ZDQ2N2Y2ZDRhNmI2NmVkZTFjYzIzN2Y2MWZiMmI2NzAyM2E4M2RjNDU2YjkyY2RhMTgzZSIKKyAgICAgICAgICAiZDY2MjBmZTU3ZDVhNjczMzJjNzcyMzNhYzFlODcyNWIzNmY4ZTFiMTA4NDEyY2E2ZmIzNWRjZDRkODE2NzdhMiIKKyAgICAgICAgICAiYjMwZDVlYWYyNWUwYjkxOTFiMzhmN2VlZjgzZjkxMjFhODA4NDM4YzkyYWIwM2Y1MjA4MDdiYzlhODk0NzA1ZSIKKyAgICAgICAgICAiYWY0ZWVkMDY2ODIzYTY3YWEyYTU1OTljZDk1ZTU4ZGE3YzA5NDgzNmQyYWZlYmEzOWRkMDA5YTY0YWRlMDMwNSIKKyAgICAgICAgICAiMzM3NmYwMjkzNmNmM2Y1NmJmNjRjMWYzYmRjMDdjNDVhOTViOWZjZDkzOTZjZDlhOGQ0MWJjYzU2NDI0OTM3YSIKKyAgICAgICAgICAiMTM3MWIzODQ3YzkwNWI5YWI1ODQwMjM5M2Q0MDQ2ZTRhMDE1YzE0NzA4Zjc0Y2U3NzkwZWJhOGFmNzkyMDcyNCIKKyAgICAgICAgICAiNDBiY2FmYjE0YzBmODEwODk3MTE4N2M4MGY0NjNhMWZmZjI1ODY0NmVhMTZlNTFjNmVlMzYxYjY2MWExNGYwNyIKKyAgICAgICAgICAiY2Q0ZjVhODJjNzA5ZjQ5NGYxZGYwZjgwM2I2ZjY0YTcyZmI5YzQ1MGZmZTI2OGZjYWI0ODdkNGQ2MzAxM2U0MSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS4xMCIsCisgICAgICAgICAgImIzODI0ZmI1NDVhODNmODJlZjgyMjMxMTgyODRjNTQ1NmJhYjYwMGFkZjc5ZjUwNzMzYjY2NjhmYmM1MTVkYTUiCisgICAgICAgICAgIjk2MzE2MmE2ZDdkN2U5NmZmOTFhZmYxMmViM2U5MzExZTIyMWU3MGJjMCIsCisgICAgICAgICAgImI4MjY4ZTRiY2U3ZTUzZjJlOGJlOThiMTkyZDYzYWQwNjU0NGE4MGQ2ZTYyZDYzMjQ4NmUxNWU1NzViYTcwNmUiCisgICAgICAgICAgIjNlNzY4OTMwZGM4ZTQxMWY4ZWViMGI2ZThmMDYwNjI5ZGE4YTI0MjM2OGU0NzljY2IzMzE2OTcwNzBiNGIzNTIiCisgICAgICAgICAgIjRlNjkxNjkyNzZiYWIwYTk0NTE0Y2NkNjYwNzAyNTI4ZWQyMGI1ZDFkZjA3Nzc5YTYyYzY1Njg2ZTdkNjY4NDYiCisgICAgICAgICAgIjZmZmM3NDhlYjM0MzQ0Y2E2ZjMwNWNkYTNkYzNlOGYwMWM0M2VhOTE3OWRhNDYyMTQ3ZjRkM2VjOTJmODg4YjciCisgICAgICAgICAgImVlYWE0MTBlMTJjODZkODk0MmM3ZDAxMmY0NWM2MWZmYTZlMmI3OGY4NDNlOWE3NWQ5NjczMjE0ZDU1OGNhZjAiCisgICAgICAgICAgIjFiNDVmOTM2ODZlZWRhNTQ3OWRiODA1Mjc5MjU1OWNjMjM2YTRhMWVlNjVkM2NhNjBlMDlhM2MxODRkNGIzOTUiCisgICAgICAgICAgImQ3MGI4ZWY4OGQ3ODA5MWEiLAorICAgICAgICAgICJjMGU5OGQ1MDg5NGFkYTg0OWZjZTg5ODNmNmY4OTU3NDAzNGQ2Y2YzYjgzNTJiZmM1MDcyNGE3MDNkZDRmNDJmIgorICAgICAgICAgICI0MDA2YWUwMDhhZDk3MjMzY2VmNmYxNmNlMWI0MjNmNTJjNmI2NzdlZjAwNTEzMWJhOTg3Zjk4YzcyMmZhYTQ5IgorICAgICAgICAgICI0MmVjY2UyYzk5NjYzNzQwYTFhMWU5ODEyMGZhZWQ5N2ZkMDNmZjM2ZmU3Mzc1OGU3MGRmMTdmMzFmMWYzOTQxIgorICAgICAgICAgICI4MTJkMzRjYWU2YzM5ZGU3ODdlZjU3MDRiYzM5YzkyMGVhNWIwZWIxODMzZTgzYjQ1Nzk0ZmRlMGZmMDAwNWM2IgorICAgICAgICAgICIyNzMzYzcwYTI5NmNhMGJkNDdmMDY1NTAzZGRjZTJkNjQ5ZGUxYzMyOGRkZjYwMzJhMzNmYWQ0NmJhMDQxZGMwIgorICAgICAgICAgICJhOTk0YmYwZjU2YTQ2NWYxNjI1ZmNiODFjZTAxZmEyOTlmYzJiM2M4MDkzOWViZTZhNjczODI2ZTJiMmYxMmVjIgorICAgICAgICAgICJkZGE1MDM1Yzk1MDkzMTJkZDE5ZjEwYzM1YzhhOGIwZGE2M2MwODUxOTcwMDZhOWJlMjM2MTA4ZWI5ODc5MWIyIgorICAgICAgICAgICI2ZTI4MDhiNWNjZDVhY2VjNzM4YmNhMDI1YjI0MTgyZWY0YWI5Y2NjYjE3MWE2OWZiNDIzYTQ2ZTAzN2E0ZDBhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjExIiwKKyAgICAgICAgICAiYTNhN2RhMWJlZGIyY2E5OWZjZGViN2E0NmQ2MzNlY2EzNTA2MmRmMjg5NmI2OTU5MDdhN2Y5NzFkMmNjNTBiNiIKKyAgICAgICAgICAiZTNkMmEzNjdkMTZlNzI3ZjU2OTdjMCIsCisgICAgICAgICAgImYwMThhOWIxM2ZiZTU2MGJmZTk1NTJlZDhhODYwNmJlZWE5MDA1NWVkM2Y2MmJiMmFmMDdmNjkyY2I2MGFjZmIiCisgICAgICAgICAgIjZkNTkwN2Q2MGUwYTU5N2E1NGNhZWFmODQ0OTExY2RjODc0ZmFmOTU2OTUzYTI3ZDMwMGU5YjcxNWIxMDRkZjMiCisgICAgICAgICAgImMyMzJjM2M5NjM4MmNmNWI1ZjNkMDdiMjMwYjUyNWJiMzMwZTMxOWQxYTdjODJkMTUzYWY4MTdlZjExY2Y3MmUiCisgICAgICAgICAgIjc2ZGQ1MGIwZDdlNTU2MjI2NWM4MzQ1ZGE4MjlmNTYwZDZhNTRlNmYxZTI4OGEzZGMyMTc2ZDE5YTY4YTBiMWMiCisgICAgICAgICAgIjVjOTJiMTZiOGJiMjllNGQwMWRmYmQwYjE4MDc5YmQ0MGNmY2Q1MjMzNWIzYTE4YmM0ZWU5MjQ0NzYwZWI0OTQiCisgICAgICAgICAgImY1YmU1YjE5NzE4ODZjYTJiZWVjZTBhMzk0NGZmZjhiZTZiNDJkOTZlMWMyYzcyZTRlOTBmODdlZDEzNjE1NDYiCisgICAgICAgICAgIjdjZmM5MWMyNmViMzhhN2FmOWY1NjY4NjkzMWE0NzI2ZGEwNCIsCisgICAgICAgICAgIjI1MTc3YmZlMTI2MTliNDRmNGE0ZmU3Y2I3NmRlOTNkNGVkNGEwNWEzMWU1YmU4Y2M0ZTU2MDY2MWRlOWEzNGEiCisgICAgICAgICAgImUzMTdjYzAyZmY2MzEwNjcwODMyOGJkM2Y3ODc2M2FiM2U1NzY1MmM2M2YxMDVmNzk3MWQyZDhkNzAxZTYyOTciCisgICAgICAgICAgImE3OWM3ODdiN2NjZDYyYTUzYjM5ZDljMDM5NDZlNjZmNDg4YTkyZThlMTdkYzZlY2IwZjY1YmYwMWUzYWZmZWUiCisgICAgICAgICAgIjk5NzY4NzMxMWJlMGU5NDVhZGQ2M2ZhM2Y0MDAzODJjYjhmZmQ4OTE1NzU0MDE4Y2M3NWU4MjgyMjZiNTAzOWMiCisgICAgICAgICAgImQ5YzU3ZmM2ZDk5Y2JlOGVhNGEzZDI5Y2JkMDlkNTRkOTVjYzA3MzRjMjM1NDRmOGUxZmJjNzQ5M2UwNmQxNmMiCisgICAgICAgICAgIjBhMGFjMTUzMGQyMWYwMzM3ZTI2MmZkOWQyN2ZjYzRhZmViNTc0ZDY2ODY2ZDRjYTg0Y2ZkNmUwYWYyYmI5NzciCisgICAgICAgICAgImE1ZDk5YTViMGIzNzQ0MDQyZDMzMmI5MzZiYmRkODY5ZTVmMmM4ODNiNDAwYWM4YmMwNjgzZTY3OTA2MzQyOWQiCisgICAgICAgICAgIjk4ZDQ5NGYzMTgwNGQ2NWJiM2M5NzRhYTcyZTY2NTdkNGMxNjM4YzY3OWM4MWExNjQ1M2Y2YjBiYWEzZjA1MTciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuMTIiLAorICAgICAgICAgICI0OWY2ZjhhNGE4NmE4YWEwOTc2M2FhYzg1NTcyYjBlN2VlNzc2YWVmZjhhODI5MDAwNzc2ZmZhNiIsCisgICAgICAgICAgIjZkYjZhODI3YWMyYTVlMDYxNmMwZjQ0M2IyMzQ1OGUxNzVhY2Y5YTNiMjU1ZjVjODUyNWU3MjUzNDI0ZmFhOTEiCisgICAgICAgICAgIjM4MDU0YzNkYmFhNDcxZjI3ZmU4NTVjMWMwY2VjMzYyNTk3YTFhMWU2ZWI0ZjI5OGFjM2ViNzM0ZDMxZmYwZWYiCisgICAgICAgICAgIjEwMDhjMGUwMmI5YjA2ZTI5MzE1ZmMwOTRhN2VkMjZiMTFlYTU1MjcwYTNkY2I2NzA2ZjQ2YTk0NTBiZjgzMTIiCisgICAgICAgICAgIjg4MTA2NTEzMDI0OGQyNjQ0NzY2YTc5OTY2ZWZkYWRiYWFmNTc1ZWY0ZGQzNWE5MzdmZjBiZmJmM2Q5NTYxYzciCisgICAgICAgICAgIjU0NDA5YmU3Yjg4NDdhNjA4ZDc5MWZiOTg3ZWVkNDZhZmViMGRiMWNhOTc1YzA1ZjYxNTcwZGQwNzA5ODVmMTMiCisgICAgICAgICAgImU0ZTBlZDdhOGNiMzkxY2U0ZDQyMDgzMmI0NWE4YjdlOWY5MDg4NGU2MTE4OThmNDcyYTBhYzQ2YzU3YWE3ZjgiCisgICAgICAgICAgIjQ2OGFhMTlkOWM3YjMxMmYxMzQzMjI5OTAzOTM4ODFkMzJhYTE0NjhmNmU1ZjhlYjg1YTJjM2MyZGFlZDkyYjkiCisgICAgICAgICAgIjNjIiwKKyAgICAgICAgICAiMGZmOTVmNGEyYTA3MThkNjczZjkyMDJjODA5ZjEwNDUxMDFmNTJiOWRiYTc3Mjg4ZmUyODhjYjI3N2M0ZGJhYSIKKyAgICAgICAgICAiMzVkYjkzMjdlY2VlYzM3NjVhZTAzM2UwYjZiNzc3YjIyY2E2YmU2NjIwMDNlYWZhMmJmYmRhNjA2ZmQ4Y2VlNyIKKyAgICAgICAgICAiZWVlMDZjNmEwMGM5NDVhNjU1NmM2MGIwMDg2OWY5OTk5NzFhOGM1N2FmZTFkZGVlN2E3NTc3MDQ3YTBkYjkwZiIKKyAgICAgICAgICAiNjJjZDI0N2E4ODdmMzIyN2VmNmRhOTA3YTc1YmNmZjE5YWEzMGM5MDhmNTgzNWVmMTAxMDBhZGM3ZjZhZDZmYiIKKyAgICAgICAgICAiMzE5OTc5MGIzZjRkNmFkMTlhMGRmNTAyN2ZkYjhmODQ2NjA0ZTAyZGFmMzM1NWQ5NTY0MDc3NzlhZjE1NWFjZiIKKyAgICAgICAgICAiYTVhMzJlNmQ2MTc0ZGM5MDEzMWRiZDdhYmU1ODVkZDc1OWZhM2NiN2U5ZjcyMTQ1M2YzZTM1NGZlN2JlMGIxMSIKKyAgICAgICAgICAiOGVmNWI4Nzk0MmI1ZmVkNGMzMGQ3YTA4ZmUyNDY0ZWI3OWEzZGViYWIzN2I2ZDNhMGFiMzE1NzdkZTdlOTMyMiIKKyAgICAgICAgICAiOWI0OWQxZThmZDU2MzJkMDI2ZDgzZWUwNmFhNzg1MzRjZWUzMDgxYjIyMmVjNGNkOTQ4OGNjZGU0ZTE1MjkwNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS4xMyIsCisgICAgICAgICAgIjEyOTc1ZGI3M2QiLAorICAgICAgICAgICI2YTRiNGZiODA1ODA3MjcyOTY1YmZmMmY0YzgwMGY5NjRmYTNhZWI5ZmI0MzNiNDBjOGFjYzU5OGI0ODQwMjk4IgorICAgICAgICAgICI5M2EyMTljOTUzMjEzNGMwNmFjODQyNWMyOGE1ZjA2M2MyODQyMDBhMDQ1NjQzNDg5NzE2NTE2YTk4N2JmODFiIgorICAgICAgICAgICJhMTg2ZjRjZWI4ZDhkOWRjMWQ3M2YyMjY3ZmQxOTg4ZDZhMmZmZDY4Y2QzNjY5ZGUyYjA0NzAwOTQzZDBkNDQ0IgorICAgICAgICAgICJhZTNkYThmMDU5NGU2MjYxZTVmZmY2MDdmMDRkZjMxZTNkOWM5MTIyZDc2ZmI5MGYzZjgyYzM5MzI1M2I3NTIwIgorICAgICAgICAgICIxNjViZDFmMzE5YWIzYjg3NWVjYzZhYjNlZDAyNDdkMDM3NzBmOGQ2NDcxZDY5Y2QxM2VlMjU3YzFmYzhiMzBmIgorICAgICAgICAgICIxOWI5M2ZlNGYyZmM5YzIxNDkyODEzZDFmYzg1MmFmNzBjZGM2Mzg0ZDJhZTU1YjkxZTM5YWU2YzNiMTlmZDFhIgorICAgICAgICAgICI3ZGVhZjcxOGMwNWQ1NzgwOTU5NmEyODhmYzlhZWZiODE1YWVhMjlmYWY2NzgzYzAwNTM1ZmQ3MWQ2MjU0OTQwIgorICAgICAgICAgICJiNzYyZjUwNzI2MWYyMDliYzhiYTk0NzliYjNmNWQ2NDY0MjMxOWNjMzE4Njg1OWMiLAorICAgICAgICAgICIyNzE1ZDZlYjUzYWVlNmQ0YmRkZDNiZTliNjYzMTQ0YTQxMGQwMzgxNzc5Zjc5OWRjYTg4MDc5MmFiNDMxYWY5IgorICAgICAgICAgICI5ODlkZWIxNzM2OWRjNjc0MzhhZGQ4MmJkZjBhNTlkZDNiYzI3ODAxMDI1OGM3ZGY4NzY5ODRmZjUyNzY3OGJmIgorICAgICAgICAgICI5YjM0YzA3NzQzYjVkMjJmNGYzMGNiNWQ3ZDhhNmNmZDUwNTgyNGYyZTA5NDAyNGZiMDQzMzBmNjZkYTdjYmMwIgorICAgICAgICAgICIxZDVlY2M4ZGZjYTFjYTllNTA5MWI5ZDljOGUzOGQwYWMzOTMxZGU1ZDFmZGM4MzM3Mzg0ODJhN2ZkMTUyYzFkIgorICAgICAgICAgICIyNGU2OWVhMDFkZDNlMWZhNzcyMzU0YTYwN2Q2MmM2MGI1NjFkYzVjY2IwMTJiNzEyZjVjMmRhMTg5MmMzMTIwIgorICAgICAgICAgICJlZjk5MGQ3NDYxMWRkZDM1NjZhZjFhY2Q4YjQ4NTAwNjFjOTEyOGY4MmFkMTEyZGE5ZjY4YWM4ODM5M2Y5YTVjIgorICAgICAgICAgICIyYzEwMjBhYTc3ZTliNjJlMmQxZTk4NWZlZjg2NGNjMWFlYjQ1MWFjODM5YzcyMGNiOTczZTdiNWRmMjRhOThjIgorICAgICAgICAgICJjYjZlNjc3MjY2MjlhMzY2ZmVhM2Y5YTk1MjFkYWExOWIwNDQzMGU4MTBmMmM0NWE1N2Q0MjUzYmVkYjkxZGEwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjE0IiwKKyAgICAgICAgICAiOGRlMGY1YTQxM2E3Zjc4NjM5NmYwOWE0NWU1ZTc3NGYzYzYwOWNlNmYxYjQ5MGRkZTIyMmIzMjJkNTM0MGU5YiIKKyAgICAgICAgICAiMTA1NTgxZjRjNWJlNDRlYWJiM2QxYjIzZjg0NSIsCisgICAgICAgICAgImY4NzFhODk3YWVlODQ1YzNiYjgyNjk5MGI3MzFkMjc3N2NmNDc2YjVjZmM1NTk2ZGYzYTUyM2JhNjk3OWM3YTQiCisgICAgICAgICAgIjUxNzlkYTVmZDYwZjgxMGJmNDE0YzU0ZTE4MmYyNjAxNzIwZmZlOGE1MGQ3ZDlkMTFlNTY0MzE4ZTkwMjZmMDciCisgICAgICAgICAgImM1YWFhMTNlZjg5MTI4M2E5NjYzYzFlM2QyN2I5MzgxN2QwMWE1NmZjZTMzZDUxNjliZmVhNjJhOGVlNmMzNzAiCisgICAgICAgICAgImEzYWE4YzcxOTRkOWQzNTNkMDk4MTY2MWZlODU4MTYyNTBlMDMyNGVhZTFiODQ3ZmM3MzI5MTkxNjBkMDFlMTEiCisgICAgICAgICAgIjkyYWMxNmJlMGViOGU5OTVlNDg2NDAyNzZhMmRiN2I4N2Y4NGIzZmFjMDRjZTg2MmYwMjIzODYyM2Y2MmI5MmEiCisgICAgICAgICAgIjJlMzI3YjAxYjhjN2I5ZTVlYzg3MDU1YzZjYjdiNTU2NTFhYjVhYzk4OTgzM2IwMzRmOGJlMDExNmYyOGIxZTgiCisgICAgICAgICAgIjg2YTJjZWQxMjMyOThlYjAwNDA3NWE2YjViNzFiMSIsCisgICAgICAgICAgImQzNjdhY2E4ZDRmMTc0MTRlOWJmMDlhZDgxMWQ3OGRiMGU4NTBjNDVjOGY5ZDcwMjQ0NzVkM2U1NmUzY2JmYmUiCisgICAgICAgICAgIjZlZThhYmJmZDc3NDU4MjY0MTdjYzhlZDUyZjU0ZTAwYTkyZjgxN2VmOTgzZTk4ZDEwMGExZjk5MGRiMWUyOTAiCisgICAgICAgICAgImE4NTE2ZDYwOWJiMzJlNTAyYTc3ZTExZjc2MjAwYjAwMjU3NjVlOWJkMjg1OWJhOTRhNjk2MzMzYTVlYmUyZWIiCisgICAgICAgICAgIjI1YmE5ZDE5MDA3ZjY0MzYwY2MwNzVjYWQ3ZjA5OTUwZTRiN2FmY2JhYzM2ZTZlY2IwMTdjZjRhMWYyNWE0ZDIiCisgICAgICAgICAgImI5NTFiYjg1ZTgxY2IyYjRlYjZmNDVjZGQ0MDBkMmFjNGUyMTY5ODk2ZDk0MTU4MjQ0OWNlMzBmNjljMTdjYjQiCisgICAgICAgICAgIjQ5MzIxZjY1ZTQ0ZGYzMDM4Nzg2Mjc2MjEzNTFmNTJlNWEwNzUyZTNiNWViMTI2MzYxNjk3ZjUzY2YyNDY2MTYiCisgICAgICAgICAgIjVjM2ZiZDY2MmI4Mzc1ODBiNzZkNDU5ZmYwNDQ5N2U1ZmUxYjNjZDE4YzRkNThmZmVkYWJkZDA0YThjMTA4ZDgiCisgICAgICAgICAgIjU5YjY1Mjk4NjM5YzNhZjgwY2Q5NGUyMzg3YTg2OTQ0MDllZjllMGI3OGI2ZjQ2NzM5MGJlMTA4NTc5YzliMmMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuMTUiLAorICAgICAgICAgICI5ZTc4YzgyYmZkMGYyM2QzOTFlNzYwMDE2NDAxOWFhZDI4ZjU5YjE0MTU0NDA0ZDllOTY2MTMzYzEwM2ZjMzdjIiwKKyAgICAgICAgICAiYmI0MjI0N2RiMjQwYmFjYWNiY2JlOGM2OGNiMGY3MGU0NjBhNDk3M2RhZTY1Njk5MzU4ZmVmODI3MGQ2NWMzZCIKKyAgICAgICAgICAiMGM0NTVhMzc5YzU2M2M1OTdiMjhmNGZmYTA3MGUwZWMxZWJiOWVkNDI3ZmU4OWFiY2Q0NzkzYzQyMmMzMzg4NyIKKyAgICAgICAgICAiOGM4YjE0NWI0NmM0ZjcxMzc4YTBmZDdkNTA1M2I4Njc5OGJjMDJkOTMyOTNmZWQ4NDdmMThmZTA2MTU5MDc0YSIKKyAgICAgICAgICAiYzE4OWQ5NTYyMzIwNzRkYjZkZGNmOTk0MWE3MGYyOGI2MGU0ODMzOTVhMmQyMTAxNTRiNjJhYmFiODc1MGY1YSIKKyAgICAgICAgICAiZWJmMWFjZWZlMjA1NmY1YWJkMmYwZTBlYzQ5NGFmYTgyZmM1OWJiMzU3ZjExNmE5NGVjMWNkMDYwM2I1MmZlNSIKKyAgICAgICAgICAiNmQzMWE0M2I4N2FhNjM3Nzg4YzcyNGNiNmY4ODM3M2M5MmY2MDcxMWJmM2YzNTk0ZTIzZGVlMmZlY2VkZmU2ZiIKKyAgICAgICAgICAiNWZjODg2ZTk2YWVlN2M3NDY4MjJlNTZjYmE3ZWJkYWEyYTkyMTBlYTgxOThlNGMyMmRlOTI5ODk0NSIsCisgICAgICAgICAgIjgxOGRjYmJhOThjMzQ2NzkzYzc5ZDRiYjc4NWFhNjQwMTkxYjA1Zjg4MzVmZjczOTc0NDQzYmNlMzU3YTI2OWQiCisgICAgICAgICAgIjQ0NjQ2ZThjNzkxMDJkY2UyMjkyMzk3OGEzOTQxZWJjYjk5MDRmYzFiYjFmYjQzZjExMjc1ZTcxZWI3YTg0ZDIiCisgICAgICAgICAgIjc0YmUxMDRiMDBhZjkyMjVlMmE0ZjdmNWEwNDhhYmI2NmNiYWI2NTI1ZDFiMTE1ZGE4YzBiYjA4ZGVlYWVjN2YiCisgICAgICAgICAgIjgwZWI2YzM5NTA0ZGM0ZWIzODE1NGNlNGI2OTFiNDA2OTMxOWIyOTNjMjVkYzMwYjhmYjM4YmNhMTUzZTJmYTYiCisgICAgICAgICAgIjFiMzM3NmRkYzNjNTNhNTc5MzIxZDkxMGExNzFmYzQyYWFmMTcwNTBlZDZkMzExYTdkZjViOWE1Y2YzYTk4ZmQiCisgICAgICAgICAgIjY5YWE4NWFjMjM0NmMxNmZhMDNiMWU1M2QxMDNkNmY1YTA0YjBkOWQzZjE4ODM1MzFlMmY2MzQxZmQ5MWJkNjMiCisgICAgICAgICAgImE1YWE5OTNiNmVkYjk5OTJlNWRiMTdhN2JlNTU1ZWFmYTNiYmFiMzIwODZlOTJiOGI3OTEwNjY5NjhlMDBmOGEiCisgICAgICAgICAgIjE3NzE2MTQ0MGNlNTM4NTc5Nzg5YzI5MTJlYmQ3YWQwMTliZTI5Mzc2Y2FkZWVjMjk5MjEwN2M5ZGIwNzYwNDkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuMTYiLAorICAgICAgICAgICI2ZDcyMDhiMmZmYjAxYWQyMzYwYzQ2MDlmM2JhZDMxNTc5YzhkNDAwNWNjOTYwMTQyZTJiNjk2YjI2ZTk0ZjJkIgorICAgICAgICAgICI5OTk4MGJhZDM4NDEwNWIxODk5NTU3YWY4OTA1MjUiLAorICAgICAgICAgICI3MmFlNDk5NzE4MjhiYTU0MjNhYjk2M2NkYjE4ZjRiZGZkYmM3NDczY2Y3MGZiNzcyMTM0NDFmMWQ0NDZhZTQ4IgorICAgICAgICAgICIxMDkzMDNhMjYwYzA5MWFiNTE5OWQ5NjRlNjIxNjNjMjQ2NTcyNDcxNzNjYjA1MTFiOWNiYjE2MzQ1OWM5NTZmIgorICAgICAgICAgICI5YzBiMTg4M2I2OTFiNWU0ZWFlMDRmMGFmMjRlYTMyOGM2ZGU4ODJjZWJjNGY4OWE1NjM3MzI4MmQ2MGFmMmJhIgorICAgICAgICAgICI5NjdlMjU3YWM0MDFhMzdmOTQ0MWMxMWYyZTBlNDIxYjJkMTUxZWIyNDNhOTdlYWU1YWFhODZjZDM4ZGY0M2MyIgorICAgICAgICAgICI2YTFkNmUzYjEyYzEzZmEzNTk3Yjg1YmJhYTEzMDk0NTJjN2U5YjMyNWQ4YzczZmE3OTljNTc1NjUyNzM3YjkyIgorICAgICAgICAgICJhMjQ3ZDIzYzRjNzAxMjQwYzUzZGNmZTJlYTY5N2FmNjFjMDcyZmE3NmJkYjA1MmE1OGM5MTllNjllYzU3YjM5IgorICAgICAgICAgICJhMmE2YzQ3ZDc3MGVkZTY3MTBmYzdiZGRlNjAxIiwKKyAgICAgICAgICAiNGI1NmRjZDMwNGJkYzdmMGNjYjcwZDJjNTg2ZjUyNzQ2MDFlZTYwNTM2YmIyMTgwNjE2NzEzNTBkNmQzYWUyZSIKKyAgICAgICAgICAiMjg0ZjA3YjVlZDYzMDE3OTI2OTQxMzEyMmI5ODM3NjA5MGY3YTRhNGY2NDM0YWY3M2FjNDBjN2FmNGI2ZDdhMyIKKyAgICAgICAgICAiZTMxNDcwMmFiOWI4NWUwODczMWRhMGQxMmVkM2YwMDcwYjBkMjA5NTA1M2IzZjBkMDlkNmMyY2Q4Zjk4YmFkZSIKKyAgICAgICAgICAiZDkxMTQ4YzM1YjdiMzNjNTQzNjUzY2NjMzJkODM2ZjVmN2YyZWUzOWNhYmQwYmQ4OWRkOWE0YTk0ZTkxMmI0YyIKKyAgICAgICAgICAiYTk3ZjE4NTFkMDE3NDUxZjYwOTZhY2JmMjBhNjVlYzVhMjlmMDhmODEzNWM3MzE4YTIyMTZkMWI3ZDEwMzc5NSIKKyAgICAgICAgICAiYzdlYzhlZTU3YTc5MjgwZjlhODQ0YmQ2YWI3MTI4ODIwZTFmYjVlODI1NTRmZWMwMmE3OGFhOGQzZmQ2YTEzZSIKKyAgICAgICAgICAiMGZhZDBlY2VlN2FiNjExZGU0YjBhMDQ4MWY0MmI4ZDBiNTVjYjg4MTNkMWNhNmUyNjE1Y2Y1YWU4YWU4NmQwYiIKKyAgICAgICAgICAiNWQ0Njk1NTA3NTQ5ZjdhMzczNjZhNDQ1ZmI1NWI3YzRiNmI1OGVhNjk5ZGJlNWRkYzgxOTNlMmJmM2Q1Yjg0MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IEVuY3J5cHRpb24gRXhhbXBsZSAxNS4xNyIsCisgICAgICAgICAgIjdkZWI2ZDQwNDE0ODIzMmM0ODIxNjM0ZDNkZjliYyIsCisgICAgICAgICAgImU2ZjgzYzhjOTkzZTYwMTVhZjQzMDQwOTY4NGU2MjdmM2Q5Yjg0YWQwNTU1YzZhNmMwOTExM2E3MTI0NzJhYmIiCisgICAgICAgICAgIjM2ZjYxMTkyMzI2Y2Y4NDA4MmFhYmQxZWM5NWY0ZDFhOTJkOTEwN2UzMDYxMGM4ZDI3NTk1NTZkNWQ2MTQ3NWMiCisgICAgICAgICAgImEzZjNjYmQ5NDlmYWMyMjAzYzQyM2Q1NmMyNzU1OGU2MTE4ZmFhMGY2ZjY4NGFkYTEzYzMxNTNmNmQyNTUzMzgiCisgICAgICAgICAgImJmZjczNGU5NWY2MGFkMjkxOWFiZjI4ODE1ZDNjYzBiMWVmZDM4NWQwZDQ1ODFiMGVlODQ5NGYyYmJlMjk5NTkiCisgICAgICAgICAgIjkxYWMxZWE4MTU0MGNiN2U4ODU2NjhlNWE1MmVjYTkwNTdlZDlhMWZiMjNmZGY4M2I1NzU1MTM1OGMyM2NkNDMiCisgICAgICAgICAgImNlMGU3YTMzYzcyNTY2Yjg4ZmU1OTM0M2YxODcyNDQ2ZDMyYzQ0YjM5OTBhYTRkYjNlZTU5MzQyNGM4ZTA5NDYiCisgICAgICAgICAgImQyNjFlMzI3MGVmNDA3NmJiMzVkZjNjM2M2ZGE0YmJlNDIzZjU5MWI1YzkzYmE1NmM1Y2YwMWQ0ZjBhOTQwOTYiCisgICAgICAgICAgIjcxMDlkMzliOTM5ZGYyODI1MzJlNTQ4MzEwOGIiLAorICAgICAgICAgICJhYTZlNmU0YWY2ODkyNjRkNjFiZmE4ZjUwODZkODI3OWRkYzIyODljNTU0MWFmNDUzNTE5YzQ0Yjk1ZWFlNmExIgorICAgICAgICAgICI1ZTdlN2JkMTVmZDMxYTRmYWQ1ZjdjODU5MDVlZmNhMjI2OTMwZDY3ZGFmNTU4YjcxNWIyMWYzNjI4ZjYxYTNiIgorICAgICAgICAgICIwNDJjMWEzOGY5YWYzYWRhODJlYzQ0ODhjOGFkZTVmMWRhODFlMWE4YWI5MGUxYjMxMmRjZGE4MzVmOWU5MjVmIgorICAgICAgICAgICIyZTcyNDYzZmE4MzNhMDhiOTMyNTNmZGZlOGNmNGU1ZjNjZmE5MTEwNzcxOWE2YTk0NjlhY2Q3MTI1YWU2N2IyIgorICAgICAgICAgICJiZDc1ODU3YzU5YmUwYWJlOTg0MDc0ZTI5NTQ3OGFmMjc0MGUyNTg5NGU1NmE2MjUwZWY3MzYyMTk0MTM4MTAzIgorICAgICAgICAgICI3NDNjYTk1NDQ3MzNkMjUwNTU3MWJlZTAwZjE3OGEyY2ZhMzhlMWY4ZjIyZmIyMzkzMGQ2YTc1ZGQxN2M2ODlhIgorICAgICAgICAgICI0NzZkODcxNTMxODU5NTEwOGZjY2U4OTVlMzQ0OWVjYTk3YTdkZGJhZTNlNmQ2ZjBlMzVlNjY2ZDZmYmQ3ODc4IgorICAgICAgICAgICI0OGY4NjgxMzM3YjFkNGM1MjM4YjFjMjRkZTc3YTdlNjc1ZTdhZWQ4ZGMxM2RkOWViMTA2ODc5ODUxN2MwYjZlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjE4IiwKKyAgICAgICAgICAiMDMxZmMzYTNlYWE0MmIwZDlmNmQ3ZGQ1OTkzZDYxODljYmIyZTBlOTZmYWEzM2Q2MWYzMTdiNmIzYzAwIiwKKyAgICAgICAgICAiMTZhYjY0ODVjYWMwMzk3MTE0ODgwZTZmNzJiYzFmMWVmMzRiYTI3ZDFjNDMzZDc3ZjMzNzJiMWZkNWIyMWJhNSIKKyAgICAgICAgICAiN2E1MDVjZDhmMzViNzUyNDJjZjFiNzZkMzgxYzY4MzQyNDAxZWVlZmM4NDI1M2EyZGUxYTE5MTNlNDM4NzczYiIKKyAgICAgICAgICAiN2JjYjMxY2JhYjI1OGY3MjZhYzkzNGE4NzEyNjk2OWFkYjdmNzY4YzFiYWI4NzU0YTEzYTNjY2JiYTZmM2RkOCIKKyAgICAgICAgICAiZDBlYzZhN2M2ZDY4N2QwNDk1YjZlMjJjOWFlNzY3YWZjOWQ5NGYyZTQ1YTEwNjEzM2M0MmM3OWI1MmMyNmFkNCIKKyAgICAgICAgICAiYjY3YmQ4ZWNlNTVlODQzMjVjYTZmNDljOGU5NTMxZjVmNmI5Y2FjMzVjOTMzZWViZTNiOWExMWI5YmIxYzllYSIKKyAgICAgICAgICAiOGNlNmQyMjg1ZGE5MDhlNTkxOTc4MmI1YjMwOGZlNDc4ZDk4ZTQ5YWVhNTQzYmY4Y2ExYjIyZWRmNDNmZGJmNiIKKyAgICAgICAgICAiYWYzMWNjOGNkNGZiN2RlMmQ4MTlhZmE1NDgzZWFjZGQ1NmQ3Nzg3YmM4YmIxNjIyMzg0MDQ5YmMzMDlhNjYiLAorICAgICAgICAgICI2MWM3NTQ3NjMwNDNiNTg0ZTRhODU0NmI3OWYwYTNlMmUwZjNiM2UyZGI2Yzk0YWQ4MTdlOTI4MWY0ODVjMDgyIgorICAgICAgICAgICIwOGZlZDRmNGQ3ZDBhNzhjNmMzMTFhMDdjNzViOWJiZTg1MDRmNGI3YTY5Mjk5MDIxNmRlMTI1ODVjMDA5YWU1IgorICAgICAgICAgICI4YzI2ZjA4NTA3MWYzOTVlNWFmODkyNWYzOTMzZjZkOWY0MTJkNDI1NTQ2NDU0ZTgwMGI3ZTNhYWM3OGI3YTA4IgorICAgICAgICAgICJiOTJlNzk4YmI4MzRlYmVhZGM0YjRhNjM1NmFmMWNhMDliZjU4Njc0NWY2MTZkNTE3NDhjYzdhMzdiNDhjYjEwIgorICAgICAgICAgICI5NzdlMzAzYmJlMTBiZjI3YzY5YmRmZjBiYTVjYWI4ZjYyZDA1ODdhMDlkNmUwMjI4MjMyMzNjOGM3YWE0MTg3IgorICAgICAgICAgICIyMjIzZWQxNWE3NGFjY2IwZjFmODIyZjI0ZDc1OTRlZDk5MjVhMWM2YzBjMGY5YWQwZTA3MWViNmI1ZWJlMWJhIgorICAgICAgICAgICJiNmJhM2I2ZDk5YTMxNjUyMDQ3ZjQ2OTI2MGJlZTg3MTBlMzcwZjA0ZWQ3MDc1OTM5MzdhMDhkZDgyMjY0OTkyIgorICAgICAgICAgICIzMTFmNGFmOTg4NGNmOGFkMzRhZmI5ZjY3NTk5M2M4YWJmNDE1MTk4MzlmNzZmYTFlOTMxYmRhZTFkMDhhNjM0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgRW5jcnlwdGlvbiBFeGFtcGxlIDE1LjE5IiwKKyAgICAgICAgICAiYzljOTNhZmVhOTk3YjFlZTM2ZmE3MjcyMDM1NGM3MDQ2NDliYzZlZjQ0ZjUxODdjNmMyODU0MmI5YWU5NTVhNyIKKyAgICAgICAgICAiMTkzZmZmZWM4NjdiYjYyZTIxOWU2OCIsCisgICAgICAgICAgIjUyZDRjM2JmMGM3NzJjMDJkM2JiNzExZDdmMTQ2ZDhjNDk3NmY4MzA4MWJlNDk1M2Q0YWZlYjA3OGU1NDEyYTMiCisgICAgICAgICAgIjJjM2RjNzM3YjU5YmM0NTRjM2RlOTNhMWFlZDA3YzFiYTY0ZDFkZTQzNjgwMTRkMDRmNjQ0MDU1NmE0YTE2OTciCisgICAgICAgICAgIjlkMDgwM2NjMjkyMmRhOTdlZDY3NjE5MDEyZjhmN2QzYjFhNDU1ODRiMDk0NmFmNmRiZDRhMDg1N2Q0YzJkYjkiCisgICAgICAgICAgIjlhMTdiYmQyN2FjZDlhNjJlNjdmODg3OWRiZWYyN2YxMDQ2YTg2N2U2OTk1MTYyYjJhMWExY2NjZGNlYWY0NWIiCisgICAgICAgICAgImUxMzM3ZTVmYThmODVlZGFhZGY3NTA4ZDU4ZjMyNmFhN2NmMzAxZjQ0MWJhNTU4YjYwZTBmYWM2ZTBkMTk5MjAiCisgICAgICAgICAgIjYxYTBhNDY5YmUwMjE2MjY4OTBlZTg3ZTY4MTM5YmQ1MTlhZTc3M2UzZWM0ODFiN2YyYjM3NzMzMWY1MmYyZTMiCisgICAgICAgICAgIjg2ODg0Zjc2NTcyM2UyNmNkNGE4ZDk2ODYxNGM5YzMzZGNkYiIsCisgICAgICAgICAgImQwNjg2NzAyMmEwZmFmNTczZDYyY2MyNGE2ZTA2YTQ0Y2QzZDgzZWFjNWQwODA5ZWJmOTEzMDQ1NjhjYjFiMjciCisgICAgICAgICAgIjU2MWJiMjkyZTg3NzZlMjE2ZDFkMDIzZTc1M2MxMjRiNTE4NjdiOTRkYzYwODk0ZDYyYzdkYWU1ZmExYTlmYWYiCisgICAgICAgICAgIjAzNzZlMTc1OGNiNmFkYzcxNDE3ZTgzMTAyNTI4ZjIzZjRjNWU1YjUwMzYyYTM5ZTJhYTk3NjhiMTA2MjA4NmYiCisgICAgICAgICAgImE4YzUzZmYxYzM5YTBlZTAzZDM4M2QyNGJmNDkwNzIyYjc4NmRhZWM5MDhjZDcxNTFlMTg1ZGRkMTc4ODI2NzgiCisgICAgICAgICAgIjAyN2UzNjhiMDUxMmNmOTg0MTNmM2U1OTZmYTNkYjRlYzE5NmFlNWZmNTI0YTgyNjZkNzYwZTAwNTE0MzNkMTgiCisgICAgICAgICAgIjk4ZmZjMjMwZTk2YTJmMGJmZGYyYjI0NDI5YWRmYTkxOGFiYTFhNDUwZjc2NzgzNDcyMzAxMjkzODQ4YmQ4MmQiCisgICAgICAgICAgIjVhMzM4NDMxZDZjYjFjMTA2ZGM3NDFkMjM0YmY1YTgwZGJkMzI1ZGE2NGEzOTRhMDA2NWYyMjAyOGQwZmRjNWEiCisgICAgICAgICAgImRmMGQwZGUyOWYyMmZiOGMyYTQxMzMxZmUxZmNiNjE1ODllMGVjNzUwMGVkODQ0MmQ2MTg0NmRmNmNjYTQ2Y2MiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBFbmNyeXB0aW9uIEV4YW1wbGUgMTUuMjAiLAorICAgICAgICAgICI2OWI3NjQ0ODU1ZjkxZDFjNjFjODQ5OGU0YmExYmE0ZDg0NWJhODgyYjE3MyIsCisgICAgICAgICAgImIyMmZjN2RlODVjNWY3NWEyZjMyYWYxYmZiY2Q1Nzg5NzE1Njg3ZGUwNmU2NmQwNjRhZTNlYjhkZmIwN2EyNTciCisgICAgICAgICAgIjViZTBlOWU2ZjI5ZjUwZDczOTZkMDc4YjM2ZWY4MDJmNzUxYTc3Y2M5MmQ3NjE0YzkxZGQyNzk5MzFmY2UwMDciCisgICAgICAgICAgImViZjkxNWEwZjE0ZTMxMmNlOTFmZTVhYTZmYjM3NDUxNjE0ZmUzN2M3M2ZjNmY2ZDZmOGU1Mjc4OWI1ZDg4ZTgiCisgICAgICAgICAgIjZiZWIxNjMzZjVkZGQ1YzA3MGYxNGZkM2NmZWU5N2RkNGE2NDNkMzVkNDVkZDliZjM0ZGY4YzMxMGI0ODU5MmUiCisgICAgICAgICAgIjk0NjgzMWIzNGVmM2MwYjkxNmYxN2NiMGFjYjJjZmMxYzI1ZDAzMDlhY2MxMTI0ZjI2NWMxYTgzZWQ4ODVjODciCisgICAgICAgICAgImZhODI2ZmRhNTcxMGI1NGUxNmVjMGY0NDhjZGI3ZWUwNTgwZmY3Mzg2NTMwZWE0NjFlMDQyYTBiNzc0MmM0NjEiCisgICAgICAgICAgIjk3NmJiNWEzODBhZGJjYjAwMTA2ZjI2NzFiNmNjZTRmNzI2Nzc1MmY4MDY2ODA0Mjc4MzUwYjAxNzUzZTMxYjMiCisgICAgICAgICAgIjhlY2NmYmU5MDU2OWY2IiwKKyAgICAgICAgICAiYWI0MjY3OTcyYzc3OTY4MzkzODhkNGFkODdkZWQ3NGJiNjUzZTlhNzA1MGUyODJlODIxOTI4NzU2ODlmNzBlZSIKKyAgICAgICAgICAiMWRhMThhMWY3MzIyMDkyY2QyOWZkMDAxMTk5MjJhNmRlMTI2MDE5ODBhYTlmYTZlNjE5ZTI3NzVlODdhZGFlMyIKKyAgICAgICAgICAiMTY5NWMxMzA0ZTc3ZjUyY2NlMDE2NjY1ZjIyNjdjMjA3NjI2NDNjNjAwM2MwMTZkODQ4MDQ0M2M3MDFkZjZjMSIKKyAgICAgICAgICAiZDhkNjU1NTQ5NjAwZWU0NTViNzBlNDczMzE5YjBkNDQ0NWUwYjc1NTJhMWY4MDhlODhmMzI2NDg0MjczNWFlNiIKKyAgICAgICAgICAiMWRmMDMyNWVkMDM2OTBkNmQ1ZDY5M2FkMWZlZDIyNjY4NDUwMzc5ZGI1MzIzZGMwMWM4OWFmZmFlMzY5YjljMyIKKyAgICAgICAgICAiMDFjMzE5YzM3ZGRmNTFlZGY0NmUwOWIyMWU1ZGU5MTQ4M2U4ZTNjYjIxZWViNzA1N2JjMmViZGMzYWFhM2Q2NSIKKyAgICAgICAgICAiMDBjOTJmOTliMTdiMzE4MGJiYTA0N2Q3NjA3Mzc3NjMzNmIxNWQwNTRkNzlhNDQwY2M1ZTk4NWVhNTQzZmNhYSIKKyAgICAgICAgICAiMjVkYjFkZDg5MmI3MWJiNzRhNWNmNjgyNjNkOGZkNThmMWE0OGU2YzJmY2I4YzBiNzFhMjUxY2ZjMWEyMDE1NyIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3BrY3MxdjItdjE1cy5oIGIvdGVzdHMvcGtjczF2Mi12MTVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyM2FhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BrY3MxdjItdjE1cy5oCkBAIC0wLDAgKzEsMzY2MCBAQAorLyogcGtjczF2Mi12MTVzLmggLSBwa2NzIzEgdjEuNSBzaWduIHRlc3QgdmVjdG9yIHRhYmxlCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisgKiB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKyAqIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qIE1hbnVhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZmlsZQorICAgZnRwOi8vZnRwLnJzYS5jb20vcHViL3JzYWxhYnMvdG1wL3BrY3MxdjE1c2lnbi12ZWN0b3JzLnR4dCAuCisgKi8KKyAgc3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZGVzYzsKKyAgICBjb25zdCBjaGFyICpuLCAqZSwgKmQ7CisgICAgc3RydWN0IHsKKyAgICAgIGNvbnN0IGNoYXIgKmRlc2M7CisgICAgICBjb25zdCBjaGFyICptZXNnOworICAgICAgY29uc3QgY2hhciAqc2lnbjsKKyAgICB9IG1bMjBdOworICB9IHRibFtdID0KKyAgeworICAgIHsKKyAgICAgICJBIDEwMjQtYml0IFJTQSBrZXkgcGFpciIsCisgICAgICAiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MSIKKyAgICAgICJkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmIgorICAgICAgImQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEiCisgICAgICAiMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyIsCisgICAgICAiMDEwMDAxIiwKKyAgICAgICIzM2E1MDQyYTkwYjI3ZDRmNTQ1MWNhOWJiYmQwYjQ0NzcxYTEwMWFmODg0MzQwYWVmOTg4NWYyYTRiYmU5MmU4IgorICAgICAgIjk0YTcyNGFjM2M1NjhjOGY5Nzg1M2FkMDdjMDI2NmM4YzZhM2NhMDkyOWYxZThmMTEyMzE4ODQ0MjlmYzRkOWEiCisgICAgICAiZTU1ZmVlODk2YTEwY2U3MDdjM2VkN2U3MzRlNDQ3MjdhMzk1NzQ1MDFhNTMyNjgzMTA5YzJhYmFjYWJhMjgzYyIKKyAgICAgICIzMWI0YmQyZjUzYzNlZTM3ZTM1MmNlZTM0ZjllNTAzYmQ4MGMwNjIyYWQ3OWM2ZGNlZTg4MzU0N2M2YTNiMzI1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjEiLAorICAgICAgICAgICJjZGM4N2RhMjIzZDc4NmRmM2I0NWUwYmJiYzcyMTMyNmQxZWUyYWY4MDZjYzMxNTQ3NWNjNmYwZDljNjZlMWI2IgorICAgICAgICAgICIyMzcxZDQ1Y2UyMzkyZTFhYzkyODQ0YzMxMDEwMmYxNTZhMGQ4ZDUyYzFmNGM0MGJhM2FhNjUwOTU3ODZjYjc2IgorICAgICAgICAgICI5NzU3YTY1NjNiYTk1OGZlZDBiY2M5ODRlOGI1MTdhM2Q1ZjUxNWIyM2I4YTQxZTc0YWE4Njc2OTNmOTBkZmIwIgorICAgICAgICAgICI2MWE2ZTg2ZGZhYWVlNjQ0NzJjMDBlNWYyMDk0NTcyOWNiZWJlNzdmMDZjZTc4ZTA4ZjQwOThmYmE0MWY5ZDYxIgorICAgICAgICAgICI5M2MwMzE3ZThiNjBkNGI2MDg0YWNiNDJkMjllMzgwOGEzYmMzNzJkODVlMzMxMTcwZmNiZjdjYzcyZDBiNzFjIgorICAgICAgICAgICIyOTY2NDhiM2E0ZDEwZjQxNjI5NWQwODA3YWE2MjVjYWIyNzQ0ZmQ5ZWE4ZmQyMjNjNDI1MzcwMjk4MjhiZDE2IgorICAgICAgICAgICJiZTAyNTQ2ZjEzMGZkMmUzM2I5MzZkMjY3NmUwOGFlZDFiNzMzMThiNzUwYTAxNjdkMCIsCisgICAgICAgICAgIjZiYzNhMDY2NTY4NDI5MzBhMjQ3ZTMwZDU4NjRiNGQ4MTkyMzZiYTdjNjg5NjU4NjJhZDdkYmM0ZTI0YWYyOGUiCisgICAgICAgICAgIjg2YmI1MzFmMDMzNThiZTVmYjc0Nzc3YzYwODZmODUwY2FlZjg5M2YwZDZmY2MyZDBjOTFlYzAxMzY5M2I0ZWEiCisgICAgICAgICAgIjAwYjgwY2Q0OWFhYzRlY2I1Zjg5MTFhZmU1MzlhZGE0YThmMzgyM2QxZDEzZTQ3MmQxNDkwNTQ3YzY1OWM3NjEiCisgICAgICAgICAgIjdmM2QyNDA4N2RkYjZmMmI3MjA5NjE2N2ZjMDk3Y2FiMThlOWE0NThmY2I2MzRjZGNlOGVlMzU4OTRjNDg0ZDciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjIiLAorICAgICAgICAgICI4NTEzODRjZGZlODE5YzIyZWQ2YzRjY2IzMGRhZWI1Y2YwNTliYzhlMTE2NmI3ZTM1MzBjNGMyMzNlMmI1ZjhmIgorICAgICAgICAgICI3MWExY2NhNTgyZDQzZWNjNzJiMWJjYTE2ZGZjNzAxMzIyNmI5ZSIsCisgICAgICAgICAgIjg0ZmQyY2U3MzRlYzFkYTgyOGQwZjE1YmY0OWE4NzA3YzE1ZDA1OTQ4MTM2ZGU1MzdhM2RiNDIxMzg0MTY3YzgiCisgICAgICAgICAgIjZmYWUwMjI1ODdlZTllMTM3ZGFlZTc1NDczODI2MjkzMmQyNzFjNzQ0YzZkM2ExODlhZDQzMTFiZGIwMjA0OTIiCisgICAgICAgICAgImUzMjJmYmRkYzQwNDA2ZWE4NjBkNGU4ZWEyYTQwODRhYTk4Yjk2MjJhNDQ2NzU2ZmRiNzQwZGRiM2Q5MWRiNzYiCisgICAgICAgICAgIjcwZTIxMTY2MWJiZjg3MDliMTFjMDhhNzA3NzE0MjJkMWExMmRlZjI5ZjA2ODhhMTkyYWViZDg5ZTBmODk2ZjgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjMiLAorICAgICAgICAgICJhNGIxNTk5NDE3NjFjNDBjNmE4MmYyYjgwZDFiOTRmNWFhMjY1NGZkMTdlMTJkNTg4ODY0Njc5YjU0Y2QwNGVmIgorICAgICAgICAgICI4YmQwMzAxMmJlOGRjMzdmNGI4M2FmNzk2M2ZhZmYwZGZhMjI1NDc3NDM3YzQ4MDE3ZmYyYmU4MTkxY2YzOTU1IgorICAgICAgICAgICJmYzA3MzU2ZWFiM2YzMjJmN2Y2MjBlMjFkMjU0ZTVkYjQzMjQyNzlmZTA2N2UwOTEwZTJlODFjYTJjYWIzMWM3IgorICAgICAgICAgICI0NWU2N2E1NDA1OGViNTBkOTkzY2RiOWVkMGI0ZDAyOWMwNmQyMWE5NGNhNjYxYzNjZTI3ZmFlMWQ2Y2IyMGY0IgorICAgICAgICAgICI1NjRkNjZjZTQ3Njc1ODNkMGU1ZjA2MDIxNWI1OTAxN2JlODVlYTg0ODkzOTEyN2JkOGM5YzRkNDdiNTEwNTZjIgorICAgICAgICAgICIwMzFjZjMzNmYxN2M5OTgwZjNiOGY1YjliNjg3OGU4Yjc5N2FhNDNiODgyNjg0MzMzZTE3ODkzZmU5Y2FhNmFhIgorICAgICAgICAgICIyOTlmN2VkMWExOGVlMmM1NDg2NGI3YjJiOTliNzI2MThmYjAyNTc0ZDEzOWVmNTBmMDE5YzllZWY0MTY5NzEzIgorICAgICAgICAgICIzOGU3ZDQ3MCIsCisgICAgICAgICAgIjBiMWYyZTUxODBlNWM3YjRiNWU2NzI5MjlmNjY0YzQ4OTZlNTBjMzUxMzRiNmRlNGQ1YTkzNDI1MmEzYTI0NWYiCisgICAgICAgICAgImY0ODM0MDkyMGUxMDM0YjdkNWE1YjUyNGViMGUxY2YxMmJlZmVmNDliMjdiNzMyZDJjMTllMWM0MzIxN2Q2ZTEiCisgICAgICAgICAgIjQxNzM4MTExMWExZDM2ZGU2Mzc1Y2Y0NTViM2M5ODEyNjM5ZGJjMjc2MDBjNzUxOTk0ZmI2MTc5OWVjZjdkYTYiCisgICAgICAgICAgImJjZjUxNTQwYWZkMDE3NGRiNDAzMzE4ODU1NjY3NWIxZDc2MzM2MGFmNDZmZWVjYTViNjBmODgyODI5ZWU3YjIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjQiLAorICAgICAgICAgICJiYzY1Njc0N2ZhOWVhZmIzZjAiLAorICAgICAgICAgICI0NTYwN2FkNjExY2Y1NzQ3YTQxYWM5NGQwZmZlYzg3OGJkYWY2M2Y2YjU3YTRiMDg4YmYzNmUzNGUxMDlmODQwIgorICAgICAgICAgICJmMjRiNzQyYWRhMTYxMDJkYWJmOTUxY2JjNDRmODk4MmU5NGVkNGNkMDk0NDhkMjBlYzBlZmE3MzU0NWY4MGI2IgorICAgICAgICAgICI1NDA2YmVkNjE5NGE2MWMzNDBiNGFkMTU2OGNiYjc1ODUxMDQ5ZjExYWYxNzM0OTY0MDc2ZTAyMDI5YWVlMjAwIgorICAgICAgICAgICJlNDBlODBiZTBmNDM2MWY2OTg0MWM0ZjkyYTQ0NTBhMjI4NmQ0MzI4OWI0MDU1NTRjNTRkMjVjNmVjYjU4NGY0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMS41IiwKKyAgICAgICAgICAiYjQ1NTgxNTQ3ZTU0Mjc3NzBjNzY4ZThiODJiNzU1NjRlMGVhNGU5YzMyNTk0ZDZiZmY3MDY1NDRkZTBhODc3NiIKKyAgICAgICAgICAiYzdhODBiNDU3NjU1MGVlZTFiMmFjYWJjN2U4YjdkM2VmN2JiNWIwM2U0NjJjMTEwNDdlYWRkMDA2MjlhZTU3NSIKKyAgICAgICAgICAiNDgwYWMxNDcwZmUwNDZmMTNhMmJmNWFmMTc5MjFkYzRiMGFhOGIwMmJlZTYzMzQ5MTE2NTFkN2Y4NTI1ZDEwZiIKKyAgICAgICAgICAiMzJiNTFkMzNiZTUyMGQzZGRmNWE3MDk5NTVhM2RmZTc4MjgzYjllMGFiNTQwNDZkMTUwYzE3N2YwMzdmZGNjYyIKKyAgICAgICAgICAiNWJlNGVhNWY2OGI1ZTVhMzhjOWQ3ZWRjY2NjNDk3NWY0NTVhNjkwOWI0IiwKKyAgICAgICAgICAiNTRiZTlkOTA4Nzc1MTVmNDUwMjc5YzE1YjVmNjFhZDZmMTVlY2M5NWYxOGNiZWQ4MmI2NWIxNjY3YTU3NTgwOSIKKyAgICAgICAgICAiNTg3OTk0NjY4MDQ0ZjNiYzJhZTdmODg0NTAxZjY0ZjBiNDNmNTg4Y2ZhMjA1YTZhYjcwNDMyOGMyZDRhYjkyYSIKKyAgICAgICAgICAiN2FlMTM0NDA2MTRkM2UwODVmNDAxZGE5YWQyOGUyMTA1ZTRhMGVkYjY4MWE2NDI0ZGYwNDczODhjZTA1MWVlOSIKKyAgICAgICAgICAiZGY3YmMyMTYzZmUzNDc1MjBhZDUxY2NkNTE4MDY0MzgzZTc0MWFjYWQzY2JkYzJjYjVhN2M2OGU4Njg0NjRjMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEuNiIsCisgICAgICAgICAgIjEwYWFlOWEwYWIwYjU5NWQwODQxMjA3YjcwMGQ0OGQ3NWZhZWRkZTNiNzc1Y2Q2YjRjYzg4YWUwNmU0Njk0ZWMiCisgICAgICAgICAgIjc0YmExOGY4NTIwZDRmNWVhNjljYmJlN2NjMmJlYmE0M2VmZGMxMDIxNWFjNGViMzJkYzMwMmExZjUzZGM2YzQiCisgICAgICAgICAgIjM1MjI2N2U3OTM2Y2ZlYmY3YzhkNjcwMzU3ODRhMzkwOWZhODU5YzdiN2I1OWI4ZTM5YzVjMjM0OWYxODg2YjciCisgICAgICAgICAgIjA1YTMwMjY3ZDQwMmY3NDg2YWI0ZjU4Y2FkNWQ2OWFkYjE3YWI4Y2QwY2UxY2FmNTAyNWFmNGFlMjRiMWZiODciCisgICAgICAgICAgIjk0YzYwNzBjYzA5YTUxZTJmOTkxMTMxMWUzODc3ZDAwNDRjNzFjNTdhOTkzMzk1MDA4ODA2YjcyM2FjMzgzNzMiCisgICAgICAgICAgImQzOTU0ODE4MTg1MjhjMWU3MDUzNzM5MjgyMDUzNTI5NTEwZTkzNWNkMGZhNzdiOGZhNTNjYzJkNDc0YmQ0ZmIiCisgICAgICAgICAgIjNjYzVjNjcyZDZmZmRjOTBhMDBmOTg0ODcxMmM0YmNmZTQ2YzYwNTczNjU5YjExZTY0NTdlODYxZjBmNjA0YjYiCisgICAgICAgICAgIjEzOGQxNDRmOGNlNGUyZGE3MyIsCisgICAgICAgICAgIjBlNmZmNjNhODU2YjljYmQ1ZGJlNDIzMTgzMTIyMDQ3ZGQzOWQ2Zjc2ZDFiMjMxMGU1NDZmZTllZTczYjMzZWYiCisgICAgICAgICAgImE3Yzc4Zjk0NzQ0NTVjOWU1Yjg4Y2IzODNhYWZjMzY5ODY2OGU3YjdhNTlhOWNiYjViMDg5N2I2YzVhZmI3ZjgiCisgICAgICAgICAgImJhYzRiOTI0ZTk4ZDc2MGExNWZjNDNkMjgxNGFiMmQ1MTg3Zjc5YmVkOTkxNWE5MzM5N2ViYzIyYTc2Nzc1MDYiCisgICAgICAgICAgImEwMmUwNzZkM2ZmZGMwNDQxZGJkNGRiMDA0NTNkYzI4ZDgzMGUwNTczZjc3YjgxN2I1MDVjMzhiNGE0YmI1ZDAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjciLAorICAgICAgICAgICJlZmI1ZGExYjRkMWU2ZDlhNWRmZjkyZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhIgorICAgICAgICAgICJkM2I3NWVhZTc0YTU4MGU5ODI3YWJkNmViN2EwMDJjYjU0MTFmNTI2Njc5Nzc2OGZiOGU5NWFlNDBlM2U4YjM0IgorICAgICAgICAgICI2NmY1YWIxNWQ2OTU1Mzk1MjkzOWVjMjNlNjFkNTg0OTdmYWM3NmFhMWMwYmI1YTNjYjRhNTQzODM1ODdjN2JiIgorICAgICAgICAgICI3OGQxM2VlZmRhMjA1NDQzZTZjZTQzNjU4MDJkZjU1YzY0NzEzNDk3OTg0ZTdjYTk2NzIyYjNlZGY4NGQ1NiIsCisgICAgICAgICAgIjgzODVkNTg1MzNhOTk1ZjcyZGYyNjJiNzBmNDBiMzkxZGRmNTE1ZjQ2NGI5ZDJjYzJkNjYzOThmYzA1Njg5ZDgiCisgICAgICAgICAgIjExNjMyOTQ2ZDYyZWFiZGNhN2EzMWZjZjZjZDZjOTgxZDI4YmJjMjkwODNlNGE2ZDViMmIzNzhjYTRlNTQwZjAiCisgICAgICAgICAgIjYwYjk2ZDUzYWQyNjkzZjgyMTc4Yjk0ZTJlMmY4NmI5YWNjZmEwMjAyNTEwN2UwNjJhYjcwODAxNzU2ODQ1MDEiCisgICAgICAgICAgIjAyOGY2NzY0NjFkODFjMDA4ZmU0NzUwNjcxNjQ5OTcwODc4ZmMxNzVjZjk4ZTk2YjJlY2JmNjg3NGQ3N2RhY2IiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjgiLAorICAgICAgICAgICI1M2JiNThjZTQyZjE5ODQ5NDA1NTI2NTcyMzNiMTQ5NjlhZjM2NWMwYTU2MWE0MTMyYWYxOGFmMzk0MzIyODBlIgorICAgICAgICAgICIzZTQzNzA4MjQzNGIxOTIzMTgzNzE4NGYwMmNmMmIyZTcyNmJlYmY3NGQ3YWUzMjU2ZDhiNzJmM2VhZmRiMTM0IgorICAgICAgICAgICJkMzNkZTA2ZjI5OTFkMjk5ZDU5ZjU0NjhkNDNiOTk1OGQ2YTk2OGY1OTY5ZWRiYmM2ZTcxODVjYmM3MTZjN2M5IgorICAgICAgICAgICI0NWRhZmE5Y2M3MWRkZmFhYTAxMDk0YTQ1MmRkZjVlMjQwNzMyMDQwMGJmMDVlYTk3MjljYWZiZjA2MDBlNzg4IgorICAgICAgICAgICIwN2VmOTQ2MmUzZmRlMzJlZDdkOTgxYTU2ZjQ3NTFlZjY0ZmI0NTQ5OTEwZWNjOTExZDcyODA1M2IzOTk0MzAwIgorICAgICAgICAgICI0NzQwZTZmNTgyMWZlOGQ3NWMwNjE3YmYyYzZiMjRiYmZjMzQwMTNmYzk1ZjBkZWRmNWJhMjk3ZjUwNGZiODMzIgorICAgICAgICAgICJkYTJhNDM2ZDFkOGZmMWNjNTE5M2UyYTY0Mzg5ZmNlZDkxOGU3ZmViNjcxNjMzMGY2NjgwMWRiOTQ5NzU0OWNmIgorICAgICAgICAgICIxZDNiZDk3Y2YxYmM2MjU1IiwKKyAgICAgICAgICAiOGUxZjNkMjZlYzdjNmJiYjhjNTRjNWQyNWYzMTIwNTg3ODAzYWY2ZDNjMmI5OWEzN2NlZDZhMzY1N2Q0YWU1NCIKKyAgICAgICAgICAiMjY2ZjYzZmZmZGU2NjBjODY2ZDY1ZDBhYjA1ODllMWQxMmQ5Y2U2MDU0YjA1Yzg2NjhhZTEyNzE3MWNjYWFlNyIKKyAgICAgICAgICAiZjFjZDQwOTY3N2Y1MjE1N2I2MTIzYWIyMjdmMjdhMDA5NjZkMTQzOWI0MmEzMjE2OWQxMDcwMzk0MDI2ZmM4YiIKKyAgICAgICAgICAiYzkzNTQ1YjFhYzI1MmQwZjdkYTc1MWMwMmUzM2E0NzgzMWZiZDcxNTE0YzJiYmJkM2FkYjY3NDBjMGZkNjhhZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEuOSIsCisgICAgICAgICAgIjI3Y2FkYzY5ODQ1MDk0NWYyMDRlYzNjZjhjNmNiZDhjZWI0Y2MwY2JlMzEyMjc0ZmE5NmIwNGRlYWM4NTUxNjAiCisgICAgICAgICAgImMwZTA0ZTRhYzVkMzgyMTBjMjdjIiwKKyAgICAgICAgICAiN2I2M2Y5MjIzMzU2ZjM1ZjYxMTdmNjhjOGY4MjIwMDM0ZmMyMzg0YWI1ZGM2OTA0MTQxZjEzOTMxNGQ2ZWU4OSIKKyAgICAgICAgICAiZjU0ZWM2ZmZkMThjNDEzYTIzYzU5MzFjN2ZiYjEzYzU1NWNjZmQ1OTBlMGVhYTg1M2M4Yzk0ZDI1MjBjZDQyNSIKKyAgICAgICAgICAiMGQ5YTA1YTE5M2I2NWRjNzQ5YjgyNDc4YWYwMTU2ZWUxZGU1NWRkYWQzM2VjMWYwMDk5Y2FkNmM4OTFhMzYxNyIKKyAgICAgICAgICAiYzczOTNkMDVmYmZiYmIwMDUyOGEwMDFkZjBiMjA0ZWJkZjFhMzQxMDkwZGVhODlmODcwYTg3NzQ1ODQyN2Y3YiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEuMTAiLAorICAgICAgICAgICI3MTY0MDdlOTAxYjllZjkyZDc2MWIwMTNmZDEzZWI3YWQ3MmFlZCIsCisgICAgICAgICAgIjJhMjJkYmUzNzc0ZDViMjk3MjAxYjU1YTBmMTdmNDJkY2U2M2I3ODQ1Y2IzMjVjZmU5NTFkMGJhZGI1YzVhMTQiCisgICAgICAgICAgIjQ3MjE0M2Q4OTZjODZjYzMzOWY4MzY3MTE2NDIxNWFiYzk3ODYyZjIxNTE2NTRlNzVhM2IzNTdjMzczMTFiM2QiCisgICAgICAgICAgIjcyNjhjYWI1NDAyMDJlMjNiZWU1MjczNmYyY2Q4NmNjZTBjN2RiZGU5NWUxYzYwMGE0NzM5NWRjNWViMGE0NzIiCisgICAgICAgICAgIjE1M2ZiYzRmYjIxYjY0M2UwYzA0YWUxNGRkMzdlOTdlNjE3YTc1NjdjODk2NTIyMTk3ODEwMDFiYTZmODMyOTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjExIiwKKyAgICAgICAgICAiNDZjMjRlNDEwMzAwMTYyOWM3MTJkZDRjZThkNzQ3ZWU1OTVkNmM3NDRjY2M0ZjcxMzQ3ZDliOGFiZjQ5ZDFiOCIKKyAgICAgICAgICAiZmIyZWY5MWI5NWRjODk5ZDRjMGUzZDI5OTdlNjM4ZjRjZjNmNjhlMDQ5OGRlNWFhYmQxM2YwZGZlMDJmZjI2YiIKKyAgICAgICAgICAiYTQzNzkxMDRlNzhmZmE5NWZmYmQxNTA2N2VmOGNiZDdlYjc4NjBmZWNjNzFhYmUxM2Q1YzcyMGE2Njg1MWYyZCIKKyAgICAgICAgICAiZWZkNGU3OTUwNTRkN2JlYzAyNGJiNDIyYTQ2YTczNjhiNTZkOTViNDdhZWJhZmJlYWRkNjEyODEyNTkzYTcwZCIKKyAgICAgICAgICAiYjlmOTZkNDUxZWUxNWVkYjI5OTMwOGQ3NzdmNGJiNjhlZDMzNzdjMzIxNTZiNDFiN2E5YzkyYTE0YzhiODExNCIKKyAgICAgICAgICAiNDM5OWM1NmE1YTQzMmY0Zjc3MGFhOTdkYTg0MTVkMGJkYTJlODEzMjA2MDMxZTcwNjIwMDMxYzg4MWQ2MTZiZiIKKyAgICAgICAgICAiZmQ1ZjAzYmYxNDdjMWU3Mzc2NmMyNjI0NjIwOCIsCisgICAgICAgICAgIjEyMjM1YjBiNDA2MTI2ZDlkMjYwZDQ0N2U5MjNhMTEwNTFmYjI0MzA3OWY0NDZmZDczYTcwMTgxZDUzNjM0ZDciCisgICAgICAgICAgImEwOTY4ZTRlZTI3Nzc3ZWRhNjNmNmU0YTNhOTFhZDU5ODU5OThhNDg0OGRhNTljZTY5N2IyNGJiMzMyZmEyYWQiCisgICAgICAgICAgIjljZTQ2MmNhNGFmZmRjMjFkYWI5MDhlOGNlMTVhZjZlYjkxMDViMWFiY2YzOTE0MmFhMTdiMzRjNGMwOTIzODYiCisgICAgICAgICAgImE3YWJiZmUwMjhhZmRiZWJjMTRmMmNlMjZmYmVlNWVkZWNhMTE1MDJkMzlhNmI3NDAzMTU0ODQzZDk4YTYyYTciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjEyIiwKKyAgICAgICAgICAiYmM5OWE5MzJhYTE2ZDYyMmJmZmY3OWM1MGI0YzQyMzU4NjczMjYxMTI5ZTI4ZDZhOTE4ZmYxYjBmMWM0ZjQ2YSIKKyAgICAgICAgICAiZDhhZmE5OGIwY2EwZjU2Zjk2Nzk3NWIwYTI5YmU4ODJlOTNiNmNkM2ZjMzNlMWZhZWY3MmU1MmIyYWUwYTNmMSIKKyAgICAgICAgICAiMjAyNDUwNmUyNTY5MGU5MDJlNzgyOTgyMTQ1NTU2NTMyMjg0Y2Y1MDU3ODk3MzhmNGRhMzFmYTEzMzNkM2FmOCIKKyAgICAgICAgICAiNjJiMmJhNmI2Y2U3YWI0Y2NlNmFiYSIsCisgICAgICAgICAgIjg3MmVjNWFkNGYxODQ2MjU2ZjE3ZTk5MzZhYzUwZTQzZTk5NjNlYThjMWU3NmYxNTg3OWI3ODc0ZDc3ZDEyMmEiCisgICAgICAgICAgIjYwOWRjOGM1NjExNDViOTRiZjRmZmRmZmRlYjE3ZTZlNzZmZmM2YzEwYzA3NDdmNWUzN2E5ZjQzNGY1NjA5ZTciCisgICAgICAgICAgIjlkYTUyNTAyMTVhNDU3YWZkZjEyYzY1MDdjYzE1NTFmNTRhMjgwMTA1OTU4MjZhMmM5Yjk3ZmEwYWE4NTFjYzYiCisgICAgICAgICAgIjhiNzA1ZDdhMDZkNzIwYmEwMjdlNGExYzBiMDE5NTAwZmI2M2I3ODA3MTY4NGRjZmE5NzcyNzAwYjk4MmRjNjYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjEzIiwKKyAgICAgICAgICAiNzMxZTE3MmFjMDYzOTkyYzViMTFiYTE3MGRmYjIzYmIwMDBkNDdiYTE5NTMyOWNmMjc4MDYxMDM3MzgxNTE0YyIKKyAgICAgICAgICAiMTQ2MDY0YzUyODVkYjEzMGRkNWJhZTk4Yjc3MjIyNTk1MGVhYjA1ZDNlYTk5NmY2ZmZmYjlhOGM4NjIyOTEzZiIKKyAgICAgICAgICAiMjc5OTE0Yzg5YWRhNGYzZGQ3NzY2NmE4NjhiZmNiZmYyYjk1YjdkYWY0NTNkNGUyYzlkNzViZWVlN2Y4ZTcwOSIKKyAgICAgICAgICAiMDVlNDA2NmE0ZjczYWVjYzY3Zjk1NmFhNWEzMjkyYjg0ODhjOTE3ZDMxN2NmZGM4NjI1M2U2OTAzODFlMTVhYiIsCisgICAgICAgICAgIjc2MjA0ZWFjYzFkNjNlYzFkNmFkNWJkMDY5MmUxYTJmNjg2ZGY2ZTY0Y2E5NDVjNzdhODI0ZGUyMTJlZmE2ZDkiCisgICAgICAgICAgIjc4MmQ4MWI0NTkxNDAzZmY0MDIwNjIwMjk4YzA3ZWJkM2E4YTYxYzViZjRkYWQ2MmNiZmM0YWU2YTAzOTM3YmUiCisgICAgICAgICAgIjRiNDlhMjE2ZDU3MGZjNmU4MTg3MjkzNzg3NmUyN2JkMTljZjYwMWVmZmMzMGRkY2E1NzNjOWQ1NmNkNDU2OWIiCisgICAgICAgICAgImRiNDg1MWM0NTBjNDJjYjIxZTczOGNkZDYxMDI3YjhiZTVlOWI0MTBmYzQ2YWEzZjI5ZTRiZTllNjQ0NTEzNDYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjE0IiwKKyAgICAgICAgICAiMDIxMTM4MjY4M2E3NGQ4ZDJhMmNiNmEwNjU1MDU2M2JlMWMyNmNhNjI4MjFlNGZmMTYzYjcyMDQ2NGZjM2EyOCIKKyAgICAgICAgICAiZDkxYmVkZGRjNjI3NDlhNTUzOGVhZjQxZmJlMGM4MmE3N2UwNmFkOTkzODNjOWU5ODVmZmI4YTkzZmQ0ZDdjNSIKKyAgICAgICAgICAiOGRiNTFhZDkxYmE0NjFkNjlhOGZkN2RkYWJlMjQ5Njc1N2EwYzQ5MTIyYzFhNzlhODVjYzA1NTNlODIxNGQwMyIKKyAgICAgICAgICAiNmRmZTAxODVlZmEwZDA1ODYwYzYxMmZhMDg4MmM4MmQyNDZlNTgzMGE2NzM1NWRmZjE4YTJjMzZiNzMyZjk4OCIKKyAgICAgICAgICAiY2ZlZGM1NjIyNjRjNjI1NGI0MGZjYWJiOTdiNzYwOTQ3NTY4ZGNkNmExN2NkYTZlZTg4NTViZGRiYWI5MzcwMiIKKyAgICAgICAgICAiNDcxYWEwY2ZiMWJlZDJlMTMxMThlYmExMTc1YjczYzk2MjUzYzEwOGQwYjJhYmEwNWFiOGUxN2U4NDM5MmUyMCIKKyAgICAgICAgICAiMDg1ZjQ3NDA0ZDgzNjU1MjdkYzNmYjhmMmJiNDhhNTAwMzhlNzEzNjFjY2Y5NzM0MDciLAorICAgICAgICAgICI1MjU1MDA5MTgzMzFmMTA0MmVhZTBjNWMyMDU0YWE3ZjkyZGViMjY5OTFiNTc5NjYzNGYyMjlkYWY5YjQ5ZWIyIgorICAgICAgICAgICIwNTRkODczMTlmM2NmYTliNDY2YmQwNzVlZjY2OTlhZWE0YmQ0YTE5NWExYzUyOTY4YjVlMmI3NWUwOTJkODQ2IgorICAgICAgICAgICJlYTFiNWNjMjc5MDVhOGUxZDVlNWRlMGVkZmRiMjEzOTFlYmI5NTE4NjRlYmQ5ZjBiMGVjMzViNjU0Mjg3MTM2IgorICAgICAgICAgICIwYTMxN2I3ZWYxM2FlMDZhZjY4NGUzOGUyMWIxZTE5YmM3Mjk4ZTVkNmZlMDAxM2ExNjRiZmEyNWQzZTczMTNkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMS4xNSIsCisgICAgICAgICAgImZjNmI3MDBkMjI1ODMzODhhYjJmOGRhZmNhZjFhMDU2MjA2OTgwMjBkYTRiYWU0NGRhZmJkMDg3N2I1MDEyNTAiCisgICAgICAgICAgIjZkYzMxODFkNWM2NmJmMDIzZjM0OGI0MWZkOWY5NDc5NWFiOTY0NTJhNDIxOWYyZDM5ZDcyYWYzNTljZjE5NTYiCisgICAgICAgICAgIjUxYzciLAorICAgICAgICAgICI0NDUyYTZjYzI2MjZiMDFlOTVhYjMwNmRmMGQwY2M3NDg0ZmJhYjNjMjJlOTcwMzI4MzU2N2Y2NmVhZGMyNDhkIgorICAgICAgICAgICJiZGE1OGZjZTdkZDBjNzBjY2UzZjE1MGZjYTRiMzY5ZGZmM2I2MjM3ZTJiMTYyODFhYjU1YjUzZmIxMzA4OWM4IgorICAgICAgICAgICI1Y2QyNjUwNTZiM2Q2MmE4OGJmYzIxMzViMTY3OTFmN2ZiY2FiOWZkMmRjMzNiZWNiNjE3YmU0MTlkMmMwNDYxIgorICAgICAgICAgICI0MmE0ZDQ3YjMzODMxNDU1MmVkZDRiNmZlOWNlMTEwNGVjZWM0YTk5NThkNzMzMWU5MzBmYzA5YmYwOGE2ZTY0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMS4xNiIsCisgICAgICAgICAgIjEzYmEwODZkNzA5Y2ZhNWZlZGFhNTU3YTg5MTgxYTYxNDBmMjMwMGVkNmQ3YzNmZWJiNmNmNjhhYmViY2JjNjciCisgICAgICAgICAgIjhmMmJjYTNkYzIzMzAyOTVlZWM0NWJiMWM0MDc1ZjNhZGE5ODdlYWU4OGIzOWM1MTYwNmNiODA0MjllNjQ5ZDkiCisgICAgICAgICAgIjhhY2M4NDQxYjFmODg5N2RiODZjNWE0Y2UwYWJmMjhiMWI4MWRjYTM2Njc2OTdiODUwNjk2Yjc0YTVlYmQ4NWQiCisgICAgICAgICAgImVjNTZjOTBmOGFiZTUxM2VmYTg1Nzg1MzcyMGJlMzE5NjA3OTIxYmNhOTQ3NTIyY2Q4ZmFjOGNhY2U1YjgyN2MiCisgICAgICAgICAgIjNlNWExMjllN2VlNTdmNmI4NDkzMmYxNDE0MWFjNDI3NGU4Y2JiNDZlNjkxMmIwZDNlMjE3N2Q0OTlkMTg0MGMiCisgICAgICAgICAgImQ0N2Q0ZDdhZTBiNGNkYzRkMyIsCisgICAgICAgICAgIjFmM2I1YTg3ZGI3MmEyYzk3YmIzZWZmMmE2NWEzMDEyNjhlYWNkODlmNDJhYmMxMDk4YzFmMmRlNzdiMDgzMmEiCisgICAgICAgICAgIjY1ZDc4MTVmZWIzNTA3MDA2M2YyMjFiYjM0NTNiZDQzNDM4NmM5YTNmZGUxOGUzY2ExNjg3ZmI2NDllODZjNTEiCisgICAgICAgICAgImQ2NTg2MTlkZGU1ZGViYjg2ZmUxNTQ5MWZmNzdhYjc0ODM3M2YxYmU1MDg4ODBkNjZlYTgxZTg3MGU5MWNkZjEiCisgICAgICAgICAgIjcwNDg3NWMxN2YwYjEwMTAzMTg4YmM2NGVlZjVhMzU1MWI0MTRjNzMzNjcwMjE1YjFhMjI3MDI1NjI1ODFhYjEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxLjE3IiwKKyAgICAgICAgICAiZWIxZTU5MzUiLAorICAgICAgICAgICIzNzBjYjk4MzlhZTYwNzRmODRiMmFjZDZlNmY2Yjc5MjFiNGI1MjM0NjM3NTdmNjQ0NjcxNjE0MGM0ZTZjMGU3IgorICAgICAgICAgICI1YmVjNmFkMDE5N2ViZmE4NmJmNDZkMDk0ZjVmNmNkMzZkY2EzYTVjYzczYzhiYmI3MGUyYzdjOWFiNWQ5NjRlIgorICAgICAgICAgICJjOGUzZGZkZTQ4MWI0YTFiZWZmZDAxYjRhZDE1YjMxYWU3YWViYjliNzAzNDRhOTQxMTA4MzE2NWZkZjljMzc1IgorICAgICAgICAgICI0YmJiOGI5NGRkMzRiZDQ4MTNkZmFkYTFmNjkzN2RlNDI2N2Q1NTk3Y2EwOWEzMWU4M2Q3ZjFhNzlkZDE5YjVlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMS4xOCIsCisgICAgICAgICAgIjYzNDZiMTUzZTg4OWM4MjI4MjA5NjMwMDcxYzhhNTc3ODNmMzY4NzYwYjhlYjkwOGNmYzJiMjc2IiwKKyAgICAgICAgICAiMjQ3OWM5NzVjNWIxYWU0YzRlOTQwZjQ3M2E5MDQ1YjhiZjViMGJmY2E3OGVjMjlhMzhkZmJlZGM4YTc0OWI3YSIKKyAgICAgICAgICAiMjY5MmY3YzUyZDViYzdjODMxYzcyMzIzNzJhMDBmZWQzYjZiNDllNzYwZWM5OWUwNzRmZjJlZWFkNTEzNGU4MyIKKyAgICAgICAgICAiMDU3MjVkZmEzOTIxMmI4NGJkNGI4ZDgwYmM4YmMxN2E1MTI4MjNhM2JlYjE4ZmMwOGU0NWVkMTljMjZjODE3NyIKKyAgICAgICAgICAiMDdkNjdmYjA1ODMyZWYxZjEyYTMzZTkwY2Q5M2I4YTc4MDMxOWUyOTYzY2EyNWEyYWY3YjA5YWQ4ZjU5NWMyMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEuMTkiLAorICAgICAgICAgICI2NDcwMmRiOWY4MjVhMGYzYWJjMzYxOTc0NjU5ZjVlOWQzMGMzYWE0ZjU2ZmVhYzY5MDUwYzcyOTA1ZTc3ZmUwIgorICAgICAgICAgICJjMjJmODhhMzc4YzIxZmNmNDVmZThhNWM3MTczMDIwOTM5MjkiLAorICAgICAgICAgICIxNTJmMzQ1MWM4NThkNjk1OTRlNjU2N2RmYjMxMjkxYzFlZTc4NjBiOWQxNWViZDVhNWVkZDI3NmFjM2U2ZjdhIgorICAgICAgICAgICI4ZDE0ODBlNDJiMzM4MWQyYmUwMjNhY2Y3ZWJiZGIyOGRlM2QyMTYzYWU0NDI1OWM2ZGY5OGMzMzVkMDQ1YjYxIgorICAgICAgICAgICJkYWM5ZGJhOWRiYmI0ZTZhYjRhMDgzY2Q3NmI1ODBjYmU0NzIyMDZhMWE5ZmQ2MDY4MGNlZWExYTU3MGEyOWIwIgorICAgICAgICAgICI4ODFjNzc1ZWFlZjU1MjVkNmQyZjM0NGMyODgzN2QwYWNhNDIyYmJiMGYxYWJhOGY2ODYxYWUxOGJkNzNmZTQ0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMS4yMCIsCisgICAgICAgICAgIjk0MTkyMWRlNGExYzljMTYxOGQ2ZjNjYTNjMTc5ZjZlMjliYWU2ZGRmOWE2YTU2NGY5MjllM2NlODJjZjMyNjUiCisgICAgICAgICAgImQ3ODM3ZDVlNjkyYmU4ZGNjOWU4NmMiLAorICAgICAgICAgICI3MDc2YzI4N2ZjNmZmZjJiMjA1Mzc0MzVlNWEzMTA3Y2U0ZGExMDcxNjE4NmQwMTUzOTQxM2U2MDlkMjdkMWRhIgorICAgICAgICAgICI2ZmQ5NTJjNjFmNGJhYjkxYzA0NWZhNGY4NjgzZWNjNGY4ZGRlNzQyMjdmNzczY2ZmM2Q5NmRiODQ3MThjNDk0IgorICAgICAgICAgICI0YjA2YWZmZWJhOTRiNzI1ZjFiMDdkMzkyOGIyNDkwYTg1YzJmMWFiZjQ5MmE5MTc3YTdjZDJlYTBjOTY2ODc1IgorICAgICAgICAgICI2ZjgyNWJiZWM5MDBmYThhYzM4MjRlMTE0Mzg3ZWY1NzM3ODBjYTMzNDg4MjM4N2I5NGU1YWFkN2EyN2EyOGRjIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI0LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImFjMTNkOWZkYWU3YjczMzViNjljZDk4NTY3ZTk2NDdkOTliZjM3M2E5ZTA1Y2UzNDM1ZDY2NDY1ZjMyOGI3ZjciCisgICAgICAiMzM0Yjc5MmFlZTdlZmEwNDRlYmM0YzdhMzBiMjFhNWQ3YTg5Y2RiM2EzMGRmY2Q5ZmVlOTk5NWUwOTQxNWVkYyIKKyAgICAgICIwYmY5ZTViNGMzZjc0ZmY1M2ZiNGQyOTQ0MWJmMWI3ZWQ2Y2JkZDRhNDdmOTI1MjI2OWUxNjQ2ZjZjMWFlZTA1IgorICAgICAgIjE0ZTkzZjZjYjlkZjcxZDA2YzA2MGEyMTA0YjQ3YjcyNjBhYzM3YzEwNjg2MWRjNzhjYTVhMjVmYWE5Y2IyZTMiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMDQ4NGNjZWZhZDdhNGU2ZjM1YTk2ZWM4ZTMwZWFjZjVlMzY4YjMxMTk1ZmViZjA4N2RmNTcwNTM4MTBjMmJiMCIKKyAgICAgICI5MTI3NDUzYTRjNjMwNzNiYmZiOTkwMjQ5MTRjY2MwNjcyNjY1NjAxODZhMWEyNjczMzFiN2Q0YzhiZGZhYzk2IgorICAgICAgImZkYTlmM2Y3MGJlYzRlZWFiY2U3Y2Q1MjE5MzQzYzJlNDkxY2NlODI3ZTQ0ZWUyMzBlNGY2OTU4OWU1NzVhZTkiCisgICAgICAiMDYzMDMwNDQyYTMxYzgyY2RlMzBkYzljNzljZjY0ZTdhMDk3NWU3NWUxNmVhNDU4MTU0ODhiNDU1MjU2ZWViMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4xIiwKKyAgICAgICAgICAiZTFjMGY5OGQ1M2Y4ZjhiMTQxOTA1N2Q1YjliMTBiMDdmZWVhZWMzMmMwNDYzYTRkNjgzODJmNTMxYmExZDZjZiIKKyAgICAgICAgICAiZTRlZDM4YTI2OTRhMzRiOWM4MDVhZGYwNzJmZmJjZWJlMjFkOGQ0YjVjMGU4YzMzNDUyZGQ4ZjljOWJmNDVkMSIKKyAgICAgICAgICAiZTYzMzc1MTEzMzU4ODIyOWQyOTNjNjQ5NmI3Yzk4M2MyYzcyYmQyMWQzMzkyNzJkNzgyOGIwZDA5ZDAxMGJiYSIKKyAgICAgICAgICAiZDMxOGQ5OThmNzA0Nzk2NzMzOGFjZWZkMDFlODc0YWNlNWY4NmQyYTYwZjNiM2NhZTEzZmM1YzY2NTA4Y2ZiNyIKKyAgICAgICAgICAiMjM3OGZkZDZjOGRlMjQ5NzY1MTAzY2U4ZmU3Y2QzM2FkMGVmMTY4NmZlYjI1ZTZhMzVmYjY0ZTA5NmE0IiwKKyAgICAgICAgICAiNjRhYzA5Mzk3MWY4ZjA5NmE0YzFkNGE1NDM2NjJhMmU1YTEyODFjOTUwOTg3ZGU4OTg3MDdmMDI5YzE1OWJkOCIKKyAgICAgICAgICAiMzJjYWM1NWQ5MTM2ZTBlOWI0YTgwYmY2ZjIxYjY4Y2Y5NzcwYTYzNDlhZTUxZTdmMDlkYmRhOWQ1OWM0NTgzNyIKKyAgICAgICAgICAiMzc0NzJkNGQ2NTMyYzcxNzdlZTk4MTA4ZDJjZjQyY2QwODVhYmI0OTIyZWIyOWQ5NmYzZDBmNmIxZDBkNDNjNyIKKyAgICAgICAgICAiMzljY2YxYmE2NTE2NzVlMTk2OGI1MDdkNTE5MDJmMzhjZGVjMGI2MTMyNzI5MDQ1MzI1ZmMxZmI4ZmQ1NThlOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuMiIsCisgICAgICAgICAgImMxMTE0NjRlMDAyZTRlYzYxOGE4ZTI2M2RiY2NhOTFmYjE4YTAwYTE4YjQ0MGM0YjU1OTdiZWU3ZGIyYWVkYTgiCisgICAgICAgICAgIjMxZTYyMWZjYWM4ZGQ4MWNlZTM1MDMyNDJiMzNiMGRhYTk4N2ZlMmY1NDkzYWQyZDA2YTE1MDA3NTkwMDQwY2UiCisgICAgICAgICAgIjNjMjI3NzY0MmZkMjdmM2YyNTVlM2Q5OGQ4OWRmYWViODZiZTM0ZTBiOGZiYjkzNWZiOTI4NTYwZmEyOTJkMjYiCisgICAgICAgICAgIjM0NjI1YTUwN2RkNTgwYTg5MTI0YjkyMTI5M2U4ZGZlZGRjMjgxZDc5ZWIzYTU2OWQ1OWUwZGI4MDEzZTUzZjciCisgICAgICAgICAgImQ0YzJmOTZlNWYyZWMyN2ZkOGRkYjAxODI1ZDE3ZmNhNDA2ZGFhNjIyNGM3NjA2ZDJjOTE1MjgyMDk2YTc4MDUiCisgICAgICAgICAgIjVhNDk2MjE1MzdiNGYwMjVhNmU1YjIxMjliYzhjMWE0MDciLAorICAgICAgICAgICI2ZTdlYWFkODA0OTQ1ZWIwNDY3MGRkODY3NmI3MDU3ZDAzYWMzZTIyNjQ2NWIxZmI4NDAzZTZhZTc5ODNlMGE0IgorICAgICAgICAgICI2YTg5YTRlYjMyYmRjOGU3YWU1YTUzZDQ4YWE2NGJjOWMzZGJjOGNmOWNkNmRjNmE2OGZjZWFlOWUyOWY0NzQ1IgorICAgICAgICAgICJmYTQ5ZTE4ZDE4NGRjNWQyNmM0ZmViMzUxZmI0YjIyOGM0YzE4Y2FiZGJkZTg2MDE3MjRhZTM4MDNkYjMwNWYyIgorICAgICAgICAgICJhMDc2ZmE4YTU3ZjQ2MTBiOGE2ZTBlZDQzNTc1YmU1ZDViZmMxNjMwNDc5ZGYzYmNiYzUxNTE3N2FmZTQ5OTRhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4zIiwKKyAgICAgICAgICAiMjliODViMTRiMmRhOTQ3YTRjM2FkMWU1OTM3ZGExOTJjNjA1MDg2NWFmOTUwNGE1NDQ1MzcwZTQzZDNhOGRhNSIKKyAgICAgICAgICAiZDM1NWZkNTg3NjZiMjU0M2FjNmY5MzEwODc4M2MxM2ZmMjhiMmJlNTYwODNmMDI5ODIzOWUwZWU5NjgxZWU0NyIKKyAgICAgICAgICAiYzYiLAorICAgICAgICAgICI4MGIzOGNlNzM1MTI2Yzg1NDVkOTFkMThlYzkwMzc2NTRkNDZlNGYzYzUxYTZiODYxOGUxNWY3MmNkMjA3NTAwIgorICAgICAgICAgICJhNDcwMDE3NTc3ZDBhOGM1NWEyYmEzMzQzODNmMWY4ZDk5ZmNlMjQ2MGIzMjk3YmMwMzdlZjY0YWM0YTMwOThjIgorICAgICAgICAgICI2YWFhMjRhNGQwMTQ0YWYxMDJkMGRkYTE3ZTA3ZGM2OTU5MjM5MzJlNTY4YWRhMDBkYzRmN2RiZmJjZGVjNDNjIgorICAgICAgICAgICJjOTA4Mzg4MDE3ZDJlZWYwNGU2MGRmZTRkNTczNDBmYWI5MTZlMmI4MTEyNDRjYjFlNGE1NTIzODZmZTNlZDRjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi40IiwKKyAgICAgICAgICAiZDNiN2FhZDM3YTQ4OTBlMDM2NWI4NmM3ZGE5NDkxZTczY2RmNTU1ZDFiMDJiNDUxODE2ZGM1MmY5NjMwZDU5MCIKKyAgICAgICAgICAiZGU4M2E1YzkzOTYxMDEyNTIyZGZmNmRiYmI5Y2RiMGU3MWFlNTE0MDE5NjRhZjE4OTBlODkzMjVkYmQ2MjZmMiIKKyAgICAgICAgICAiZGEwMTM0NThlMzllZWNhNTgzZTg5ZTRjMDhlNWQ0MTJiZTQ5ODQ5NTg4NmUwNTUxY2ZlNzQyYjhiNSIsCisgICAgICAgICAgIjlkOGE4ODg5YTMxMWI0ODZjYmUyMjI1NzAzZjVkNGFlMmE1NGMyYmNhYWFkMDZmZTc2NDhiOWUyZDg1ZWRkYTEiCisgICAgICAgICAgImEwN2Q4NTZkNmFlOWJkNWNjMWU1MTUzMjY2ZWM3ZjFlMWRmM2Q5MjljYzQ0NzAwZmFjOTI2NDU4NDE0YzI4NDEiCisgICAgICAgICAgImRhODMzMjhlODFlMGI5ZDZjMzg4NWU3NjczNzBhZDVjZjFmNTc2ZDlkY2UzNDhjYWVjNWU2NDQzZTBhZWI3YzMiCisgICAgICAgICAgImY3MmI3ZGQyNTM2NjcwMjNiOWE0NzdhYjM0ZGY4ZjIwNjdlMjI1YWRjYjczZWUxMWUxNTllYjY0OTE0N2Q2MDIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAyLjUiLAorICAgICAgICAgICJmNjU4MTg4YzhmOWRlNjBiNWU5OWEyOWY1MmQzYjg4OTIwMWIzMGQ0NjRjM2I3Mjc5MmEzMDIwOTVkYzFlNzdkIgorICAgICAgICAgICI0NWU5NGY1ZGFiNzNkYmIzMTM1NDM4NTdmZjkxZGJmNDczZGZjMTQ1ZDczYmQ1MDYyMDc1ZDE5MmEzZmJmNGExIgorICAgICAgICAgICIzM2U3ZTU2OGRmMjBiOGNmZjc3YjNhZjY4N2FhMjI1NTllYzEiLAorICAgICAgICAgICIwYTk1YTQ0ZjYyNzRlNzRjZWM0NTE3OTZhZjU2ODhkNGJlMDEwODkzZmFhZTI3ZDQ5MGY0NzcxYjAwM2Y3MDQ2IgorICAgICAgICAgICJjY2NkNDE5ZmM4MTlkNzMzMTk1NWY0MWVhYzkzMzlmNTQ2YzU4NGE4YjQyYTVhYzYzMjkwNTgzZmYzZWI2YjI5IgorICAgICAgICAgICJjYWRjNzU0YWU1OGQ1YTU2MzdiNjYwOTc5NmU4MDU1MTczZmYyMGE5Y2NlNDkyZmQ3ODM3NDY4NjE1ZTg0MTA4IgorICAgICAgICAgICI4N2YwYjRhNTlmZjI1MmE4MjU5Nzc2YzhmZmRhYTY3Yzg3ZGZmODk4M2FlNjc5ZDFkZTIyZWExNThkNDhmNjhiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi42IiwKKyAgICAgICAgICAiMzFhZTVmODNhMGZiM2FjOTI1NWZmYTQzNWY3MGUyYWI2NTU1NjZlNWZiOGI3OGI4MDJjMTg3Y2ZmMWM1ZTQwZiIKKyAgICAgICAgICAiZWQwNjk3OGM1ZDU5NzZlYjRjYTc3NTgwNjM5OWE2ZmM0ZGI1MGMxZjg4NjYxYmE2OGFiYzIxZmIyY2NkNTM3ZiIKKyAgICAgICAgICAiNTAxOGYzNmVkMWY3ZDQ1MzgzZmQ0NjllNzdiYWIzZThhOTVkZmExYjk0MWU0MzBkZGVjNTUyZGNkODJmNWQxMCIKKyAgICAgICAgICAiZDI5Y2QxMGEyMmQxN2NlMjQyNTkyOGZmNWQwNzEwZGNlN2Q5ZjgzYjEyZTA0YzFhMDE1OWMyNzE3NmUwNGFjYyIsCisgICAgICAgICAgIjNmMTFlYTczOWYzMjljOWQ0MDA0NjAzNGI2YzBjZmNlYjQ5YmMzMjAxYTVmMjVlYWY1MDE1YWVkZWQwMjE4OWMiCisgICAgICAgICAgImUwYjBjZmRlMTkxMjViZDI4OGI3ZDBjMDYyMzIxYTViZGMyY2ZhNDIyNmY1MTA0YTFmYmFlYmJlN2Y3MmY1ZjciCisgICAgICAgICAgIjkyN2UxZWFlMjZmZGM1YmE5MmYyZDNmODY5ZWJjMzJkOTAxOGRkMDRlZGU4NmRlNWM0NTRmMWY3YTFiMmUyZDEiCisgICAgICAgICAgIjk0MGFhY2FlMjc3OTYzNTVmZTE4YWM4MDk3NTM1MzkyOWFjNmE4Mzg0NThiNWQ5ZGM3NTc2ZTM4ODdlZTdiY2EiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAyLjciLAorICAgICAgICAgICI5NmZmOTlmMTUwNjBjOTczYTY1YjY5YThiNWI2M2FkYjMzMjUzMjBkYTkzNzI5NzU4NGFkNGZhZDVjM2M3NDY5IgorICAgICAgICAgICIwMTllOWNmNzJhY2IzMTVmMWU0OTE5MjdiYmExOTQ4NzU1ODIzZWIwN2UzZjIwYWNkZjc4NjUzY2FlNDUwZTQ3IgorICAgICAgICAgICJiYzU0YmFmOGNhMTE2N2E1MDUwODQ0ZTAyMjIyMGVlNjY1OGE4ZGRkOTU2MzJlOWFkYzFhNmMxNDM3OWMxYzVhIgorICAgICAgICAgICJlNWEwY2U1ZGM0MDIwODA5NjIyYWZkZWNmODFmMThhNTFlMjg2NjZkMDJiMWRjZGEwYTI3YjhjM2QyYzI3YjJjIgorICAgICAgICAgICIwN2IzODAyMjAwMDE3YTdjMTI0YTQzMzdjYzRiNmVhMmFlYTc1YzY4YjQ0MGUzNzk0N2UzNjE5YmNmZWUwNTViIgorICAgICAgICAgICJiMmVkYWJjNDI0NDkwN2UwNDgzZGQzYTE3ZDhlZGZmM2E2NTAyOTNmZDRhYmY1YzQ1ZDFhNWI2YzU0MDJiYTJiIgorICAgICAgICAgICI4MWI3YjBlMGM5NWVlOTQ5YjJhMjM4YzE5OTU2MjA2YzEyNGUwY2Q5YzI0NjIwYjM2YTgzYmY5M2I5NmVmMjA0IgorICAgICAgICAgICJiZGU1MzE2YzFmNTMyN2MwYTYyMWVjY2UyMDkzYzA2NTJkZGYzMjE3NjhkNzQ1MDJmMTkwODUyOTYyOWJhYjY4IiwKKyAgICAgICAgICAiMTgzZjg1M2QwZDAzNjIxODcwZTNiYTU4Njg1MGM1ZWE1OWZjNGU5YWNmMzc5NGI5YWQ1OWExYmI4MDE4MWU3NyIKKyAgICAgICAgICAiYjExMWQ2NjQ4NjQ3ZTEzOWEzOWVjMDRmODYxODc0OTFlNzdiNGQ3NWMwNjA3OTViZjcyNzA4NDZkMzk2ZTBiZiIKKyAgICAgICAgICAiZWE4MzE1Nzk1ZTc5ZDc2YTkxOWVhNzZiMDZlZWMxM2JhZjRjZThhZmUxZTM0YmMyMjQ1N2Q3Yjc5OTJlMDg0MiIKKyAgICAgICAgICAiZWZhZGUxNzliMGFlZGFjY2ZiZTJkMjNkM2ViMzE0ZTFkZTkxYzg3MWI5ZGI1YWJmZmIxNzQ3N2ZiYTIzM2EwNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuOCIsCisgICAgICAgICAgIjNhMTc2Yzc5M2E1NDZlMmQyNzZmYjhmZmMzMjgxNjNiNDk0OTk3YTUzMDJhYWUyZTUwNDVhMmEyMDY4N2VhNmQiCisgICAgICAgICAgIjFmMTgxYzZhYmZlNjA5MGM4ZGM0MDI1NmRiM2RlMDgzMjI2NDdmYjc5NWJiYTE3MTNmYjU3ZTMzZDUzZTBlMTMiCisgICAgICAgICAgImJlZGFjNmE2NThhZDRhYjQ5MTIyMzg4MTE5OGRmMjkzNjdmYWFkZThiZTlmY2FhNGU0ODNmN2I3ZjNkYzdjYmIiCisgICAgICAgICAgImY5N2ExN2FhZDg4YzI2Y2ZjNjQxMGY5NDViNTRmYzUzZGI1NWFjODAzZDhiNzM2OTFiMTQ4NDg0N2Q3ZjNiN2UiCisgICAgICAgICAgIjkzOTRlNTVmMGE1MWZlNjFhZTg0NTIzYzk0YjIyZTgyMzk2ZGI2Y2ZhY2I3MmUwZWU0OTRhYTBmMWZhNTkzMTIiCisgICAgICAgICAgIjU0NDNhZTE1NTVhNmE5MzNmYWNlMDA3NDc5MWRjMmMyOTI0MmViIiwKKyAgICAgICAgICAiNDEzYzkyMjNhMmU5YjEyMmNkODcyNTc3ZTUyZjMxM2Q0MWRhYzc5YTI2Y2IxMDMzZGEwYjZmY2M0YjQ4MjEwNyIKKyAgICAgICAgICAiNzQ0YmY0OTBmYTc5OGRjY2QwY2JkMTE4ZWYzOWMwZjU1OWQ4N2I4OTMzNWRiMDliZTc3MDBmYjA5ZmRiZDM0MCIKKyAgICAgICAgICAiNDBhMDBiZTVjYTQyODgzNDc3YjA2ZTRlMTBhN2NiMTE3NjhmY2IwMmMzNGZiMTA2ZTUyMjg2MGQxMDY5MzkwNiIKKyAgICAgICAgICAiMjYwZjQzZDkwNjEyOTkwMzkzYThmZmFjOWZkNzBjYTM3ODI5MTExZWViYTZmM2RlZTU0ZWYxYzE2MjY4YjMzZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuOSIsCisgICAgICAgICAgIjA2OGE5OTFiMzJiNjc2YzY0Yjg5OGM2N2UxMTM3MjgyYjQzNzExYjBkMDY3MWMyNDdkOWY3YzQ4ZjUwNDNlNGYiCisgICAgICAgICAgImMyMDZkYzY1YWY4OTA2ZjI1MmYwMjQ1MjA1ZWEwODQzMjNkNDI3NmJlNWFhMGZjNWFmOWMzZjM0YjJmZDY2MzQiCisgICAgICAgICAgImRmNTcyZmMzMTNkMjczYjUzZTllMzZiOTQ2ZTdlNjcyZjk4ZDg1N2Q3ZWRkZDNkZDA0MzkzMTMyZjQ2MWYyMmMiCisgICAgICAgICAgIjk5MDAyNjE2NmYzODViZTE1OTVjN2YyM2Y4OWZmNTdlMDVhN2JlMjg1ZDEwNTYxNTQ4NWYzNTZhYmFiMWZmMmEiCisgICAgICAgICAgImI5MjdkNjA5OTUyYTYyN2U0NjhjYTc1OTBhY2I1MjEzZjQzMTM5ZjhlMmM5ZDRkMTdjNmJkNzkxNGU1M2YwMmYiCisgICAgICAgICAgImQxOWExMzFmZjQ5Y2QyNWVkZThmNDE4YTg4NTMwYTgyMzk4ODdmMGZjNzk3ZWRiNTA0NjQ3OTY0YmYzMWNhYWYiCisgICAgICAgICAgIjA4MGQ1ODE3YTAiLAorICAgICAgICAgICI1NzVkYTllOWJlZmNhMTgyOTU0NmU4MjkzODE1MDAxMTMyMDMwZTc0OWNhNTEwODhmMTY4YmQxNTBiMTM5NGM3IgorICAgICAgICAgICJhY2Q1OTc4YmNhMDNmN2I5ZDkyYTI5YjhlMjg1NmIwZGEwN2YwYmIxNWMwYjMzZTA1NDg3OTkxYWQ5N2E4MTJkIgorICAgICAgICAgICJjOTA0YWFmMGZkMWUzODdlZjFjMjcwYzY4NjhkM2VlMWM2MTE1NzdiYzRkMDdmZjQ1NmIyNDM5ODMyOTA4YTNkIgorICAgICAgICAgICJjYzRmYzA5OTA0NzJmZGEzY2M2MTExOTMwYjk5Nzk1ZDYwYzBlMzc4ODhlODdjZTAwYmJmM2MxY2YzMDdmOWUxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4xMCIsCisgICAgICAgICAgImQ2ODM5ZWU2ZDA3NDUwMzI3ZTA5YTAzZTFlYzI4MGUxYzhkMTE1MDBkYzM5MGE0OWE5Yzk4Mjg3NDljM2U5YTQiCisgICAgICAgICAgImJlZTJiYTU3NmY2ZDEyMTdhOGU3ODU0YTkwN2VlYjkzZGZmZjkyMzA4YWQwZDk0ZTJiMzgxZjkyYjBlODRhNDciCisgICAgICAgICAgIjFiZjFmMzdhNjhlOTY1ZjY1ODU5ZDFmZGZkNmZlYTg0NDA3OWM0MDM3MGRjZWFlMiIsCisgICAgICAgICAgImE3YzVmNmQwZGU5Y2Y4ZjQxNzM3ZjIzYWUzZThjZjYwOWFlYmNmMjJkNWRlMTIxM2Q5NTczY2I5NDQwM2Y4OWMiCisgICAgICAgICAgIjBmNzA4OGZmZmM2MTEwNmZhNjA5YzczNzFhOGQ3ZTFiY2QyMjFiYzFhZDk0OTEyZmFiZjJmZmMwMmY4NDg0NTYiCisgICAgICAgICAgIjRjMjI1YzA2OWJmYzZkYTlmM2Y5ZjQ5NzRlMDhlMWZlNTZmNzQ4ZmY3OTA1OTc5MDZhOTU0ZTM4Mzc0M2EzN2UiCisgICAgICAgICAgIjU3NWZlZjA3NGYwNjBmM2RkMTViNWVlMGY5NGRiYTY5ZDg2Yzk5MjIzZmE5YzNhNjFhOGNiMmFmMmZhYjFlMDQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAyLjExIiwKKyAgICAgICAgICAiMzM4NDljNjdkZjlhNmZmYWMzZGE5MGE4Y2QzMTczMWEwMjk3YjlkNjAxMGEwMzMyMGY4ODQ1MDM1ZmMzNDMwOSIKKyAgICAgICAgICAiYWQiLAorICAgICAgICAgICIxYjg3MDUxZjE1OTFjOGFlN2VlM2NiMjQyNjcwMzlhNzI4NDA1ZGJmMjMxY2FmMjFmMzI0N2YwNTg1OGIyYTUxIgorICAgICAgICAgICI2NTBiODFiYzUzNzc4NjVlNGMxZThmZDAzNjQxNTJhMTZiYzU4ZjdkMmFjMDFjYTY3OWNjNDlkZDA0ODkwM2Q1IgorICAgICAgICAgICI1YWQwNWYxMDJjNzRiMzYwMWYyNWFkMzA2MjQwMjVjMzBiNmYwZjc5MTFmYzIyNDU4ZTVkNDM1ZjM4OGUzZmJjIgorICAgICAgICAgICI0OTVmYTBjNjEwYzEyOThmODIxZGE1Mzg0MDNhOTMzNjRkMmVhYmYxZTNiMzJmODExMGE3ZTAzZTM3MmVjYmM1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4xMiIsCisgICAgICAgICAgImIzZGFiYWNhMjA1OWE3MGUyNWNiZGRmNGFhNTkyNTk5NTc1NGFjZTQzYzVkNjAzNjQwNDg5YWY0OGZlYTZlZGMiCisgICAgICAgICAgIjRlMTljYmVlYTJjMGRiNjJhZTBhMTA0YzcyZTRjZDU2Y2I1MzJmNGZlNTc3YjM2YTgxOThiNDg3OWQ3ZmY4MDQiCisgICAgICAgICAgIjI2OTBmNjYyNzczZjNkNjM5M2YyNTg5OGQyIiwKKyAgICAgICAgICAiMjZmMTM3NzAyNjNmYzViZGJlYWRmODhmYjRkZDMwN2EzODk1OWIxNmYzZGY5NDZhZGU4NjRiMWU3ZTkxNGQzNiIKKyAgICAgICAgICAiNGViZjlhZGZkODZhNzAwMjJkYzYxYjQzZmIxZmRmODY5Njk3OGUyZDFmNmEyZGVmZWU3NWFkYWE2OWEzOTUzMiIKKyAgICAgICAgICAiMDc0MDUwYmU3MDhlYWYwMzFkNWZhZTBmZmUyNDViYTRmZjNjNWUzNDBhZjVkZmVjNmE0Y2NlMGUxODg3NmNmYyIKKyAgICAgICAgICAiMTM2NmVlZWRkZmNlMGY4MzViMzhlODE4ODFiMWZjNTgzMjkzMGZjNzliMDhmMWZiMzRmYjIyNDIzM2Y0YzQ2OCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuMTMiLAorICAgICAgICAgICIwOTkxMTJmYWU3NDA4ODhjZWFhYzcwNTRkNTk3MzUxZDc5ZTE1OWE5NThkODEyMTU3OGU1MmM4MzdkYjM1NDNjIgorICAgICAgICAgICJmYTZmOGU3ZjFkYmQyYTYxOTc4NjQ1YTRkMzg1YjliYjFjNjBiZmIxMWJiM2M4NzUyYWUzMWY5OTZkYmI1MjYyIgorICAgICAgICAgICI4ZjkzZDUyNjk0ZjE4MmU2OTAzNWE1ZTU1N2VjNzE4MjYyZjQwM2RmNTIxMWY3M2M2ZGUwZDU1YTBiYTciLAorICAgICAgICAgICI4ZDhjOGYzYTg2ZjQ5ZWRiZDEyNWM4M2ViZjZkNTJlNzY1MTYxNTAxNDgyMTU0NTk4YzI4M2FiZTk0MDI3Nzg3IgorICAgICAgICAgICIyYjAwZDA3NzdjMmU2OTdiNzg4M2NjMzIxZTE1MWM4MDExNmY5ZmNkMTc3YWM0YzdkZWRkZjAzY2ExYjJjNTkzIgorICAgICAgICAgICIzMWRjMWM4ZTk0N2YxZWIyYWFlZThjYzk0MWRkYzVmMzc0YTYzZDZjOTkzOGVjZDhlODhjYmNlYzU4OTI5Y2ZmIgorICAgICAgICAgICJkZGVmMGJhMjE3NTg4NWE4MGRjNGNkOTJkNmI3OWQ5YzZhODE2OTZlMTZmOWE4M2ExMGNhOGVmYWYxOTc1ZjU1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4xNCIsCisgICAgICAgICAgImFhMTdlNmJiZDZkYjE5ZTU0YmVlMWE3ZjBlZGNjYWNlYWI2MzVkNzYyOGZjYWExOGVjZmFmYzQwMWNiM2ZlYjUiCisgICAgICAgICAgIjFmOWEzNzMxZjM4MDJjYmVhODFjNzMzMDI4Yzk1ODRiNmI3OGUyMDU1OTU0Y2Y5MTA0ZGFhNjc3YWE0MGJlOWIiCisgICAgICAgICAgIjdjNjViMDdhYzRhOGJmMjVjMTE0OWUwNTQ3MzVjZjNjZTMzMmQ0MjliYzczODAyNDQ1ZGZiMzY4OGJiODE5NDgiCisgICAgICAgICAgImI1N2UyNzZhZjMyNDYyZjdhZDgwNGQ1MGM5M2JjN2U5ZWY3NTM3Njk1YTI3MWFmNzJlNGJkNDdjZTVmYTlkNjIiCisgICAgICAgICAgImYyZGFjMDMzMzYyM2Y0OWViOWQ2ZDc4MDM0ZWQxZGY2ZTEyYmZkMDQyNjFiYmU1Y2UwNDBlMDNlYmUyNThkMmQiCisgICAgICAgICAgIjA1MmExMmFkNGUzYmYyNTMwNDIzMDFjNzY0NThlZDkxMGM1ZmZhNzA1Yzc0N2FkOGNhMGMxYzYyMjhkYTJjOTciCisgICAgICAgICAgImUxMzgiLAorICAgICAgICAgICI2NDRlYTA3NjIxNGRiZGRkMzAwNTVkN2M1NjE4OTIyNzliNDZiYWIxZTEyMjUzNDI0YzI4ZjQ0OWUxNzI2NDZhIgorICAgICAgICAgICJmMzQ5OGM3YWZjYmZmNzY4ZTA0NmE3YzJlM2Q5YzBlNzEyOGY4NzdiOTIxOTVhYTJiYjlmMWNmYmRmZDE1YmI2IgorICAgICAgICAgICI1ZmJkMjNlZmIyOTRmYmIxMWEzYzY2MDU2ZDYwNjM4NTNiYjIzYzI3NDY2NWExM2VmNGYzYzEyZjU5MjFhNDE5IgorICAgICAgICAgICJlOTQ5YjMwYzBiYzBkNzdkNmIyODY5MWQyMzY0ZDk1YmY2OGJlOGQ1OTc4ZWYxYmM5ODUyYTRmMDY2MDQ0NzRhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMi4xNSIsCisgICAgICAgICAgIjI4MjQ5YzM4N2EwNjE0NDBlOTg2MzhlMWVkNzhhNDg2NTEzMGU1NzUzM2Q3ODkxMDhjNjNlMTVmZDgwMTliYWQiCisgICAgICAgICAgIjJjZDFhNzU1MmJkOGFmZDIwNmQ5NzhlYjFmMmNmM2YyM2FmYzRiMzRlNmRkN2Y2OWMxZmRmNGZlYzI1MjY4ZDEiCisgICAgICAgICAgIjg2NTU1MTk0NDkyMjkwNmRjZTZkYzQ0MWY5NGE0NjZiZjgzOTFhZDgyYmY1OTQwZTQ0NzExMGYxZDE1ZGUxMjkiCisgICAgICAgICAgIjMxMjlmYjQ0MjRhMTcxNzUxOWQ2ZDQyOGQ2NmI3YTEwOTE0MmFjYzkxNWYxZWFjOTZkZWYyYzMyOTBiMDFkMDUiCisgICAgICAgICAgIjk5MGJmODAyM2E2YTY0NzEyZjYzMTM3YThlIiwKKyAgICAgICAgICAiNTcwMjA2MDY2OWVkNDdiYmNhMTFiOTE2NjgyODllYTNmNWU3NDZhZDJlMzg2ZGQxYmMyYThiYWIxNzQ2YmEyYSIKKyAgICAgICAgICAiNjRiZjE1YjNmYzJlYzhiMGNjOTlkODU0ZmEzMjExYzk1NWM0NTVkN2ZmMmUxZWUyMzlmNTRmMzg2YTQyYmIyNSIKKyAgICAgICAgICAiNDBhODc1OGYzMjk3ZTU1MmRlMWViZThlYWM3MGYzNTQ4Nzk0MmJiYWRhZDViZDk1NzM5MGZmMTc5M2FmM2QzMCIKKyAgICAgICAgICAiZDkzNmI2Zjc5YjQ0YTliNjNjZWU2MmQ1NTg0ZGEzYTFmY2ZmYTViNmZlZWVjMTFjZDYzYjE4MGYwYmZjNWI2YiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuMTYiLAorICAgICAgICAgICJlNDkxYTE1NmZkYmEzMTZhMmEyMGExMmVlYTUwYmU3NzRlYzlhYWJlYjFjMzk4ZTkwOGJlYTMyOTY4MjE3ZWE0IgorICAgICAgICAgICIxZTk2NmRiNzI3MmYwZWZhMzdjOTBhZTRlOWYzODYyMWE2MjdhOWQxMmM4YjRlODA2MGM1NDVjNTYwNTllOWU0IgorICAgICAgICAgICI4YTdmMTY4MTM2NzI0NzMzNTgxOWJhMTI3ZTY1OTMxZTFkOWZiNzBkZmRkZjRjOTk1NmE1YjA0YzUyYmNmOGNiIgorICAgICAgICAgICJkZmNkZjIyOTE5NjRkYWZhY2E3ZWU3MGU4MGEyNzU5Y2VjNzM1ZDAxYWNhOGZmODk0YjY4OWI5Mzc4M2RhODkzIgorICAgICAgICAgICI5YzYyMDlkZDY4M2M2MCIsCisgICAgICAgICAgIjlmMjA1YmE5MGRmMmQ0MDE0OTI2NDgxZjliM2Y0NWE4OWQyM2VjZDg0ZjVmMTZlNjczMzRjNGNhZjNmM2I5YzIiCisgICAgICAgICAgIjAxYTc5OGQ0ZWVjNTYyNzY1OTg4MjMxODBlMDc4ZDBhZWY0ZjhmYmEwYjI1YzFmZGEzZTMzNjU0YzQ3NGE5YzEiCisgICAgICAgICAgIjFhMjNiMDg3MTA5MTNkZmY3NjU2ZjBlN2VlMjJjYzQ0Yzk5OWMwOTVhNjUxNGE5ZDJmYzBjYTRlZjIwOGRlMGQiCisgICAgICAgICAgIjkyOTNiMGM1NjA4YmFlZDEwNzRhMGNmZDU3Yjk5ZWY4Y2VhYmZkMzQ3MmI3ZGIzYWI5NjA2ZDEzZjliYjQzOWEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAyLjE3IiwKKyAgICAgICAgICAiMDZhZGQ3NWFiNjg5ZGUwNjc3NDRlNjlhMmViZDRiOTBmYTkzODMwMDNjZDA1ZmY1MzZjYmYyOTRjZDIxNWYwOSIKKyAgICAgICAgICAiMjNiN2ZjOTAwNGYwYWExODUyNzFhMWQwMDYxZmQwZTk3NzdhZDFlYzBjNzE1OTFmNTc4YmY3YjhlNWExIiwKKyAgICAgICAgICAiNDUxNDIxMGU1NDFkNWJhZDdkZDYwYWU1NDliOTQzYWNjNDRmMjEzOTBkZjViNjEzMTg0NTVhMTc2MTBkZjViNyIKKyAgICAgICAgICAiNGQ4NGFlZDIzMmYxN2U1OWQ5MWRkMjY1OTkyMmY4MTJkYmQ0OTY4MTY5MDM4NGI5NTRlOWFkZmI5YjFhOTY4YyIKKyAgICAgICAgICAiMGNiZmY3NjNlY2VlZDYyNzUwYzU5MTY0YjVlMDgwYThmZWYzZDU1YmZlMmFjZmFkMjc1MmE2YTg0NTlmYTFmYSIKKyAgICAgICAgICAiYjQ5YWQzNzhjNjk2NGIyM2VlOTdmZDEwMzQ2MTBjNWNjMTRjNjFlMGViZmIxNzExZjhhZGU5NmZlNjU1N2IzOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuMTgiLAorICAgICAgICAgICIzMTFjODg4MDA1MzVkMWI0ZTliYzc4NjUxODMxYTNlOTY3ZTc0YjU4MjhlMDE0MTE1ZmJlNWY2MDljZTg2NWZlIgorICAgICAgICAgICJkMjQxOTcwZjg3MmVjOGYyM2RjMmJmNjE2YjgwMjBlNDQ1NjRmOTM0ZGNiZjcyMzg2MTcwMDc0ZDkyMGJhODk1IgorICAgICAgICAgICJkMzNkZGYyNzkzNjlmMjM2YTE5YWNkNGZlYjJiIiwKKyAgICAgICAgICAiODk0NjYzZTYzZWMxOWY1NjIwM2Y0YTQ0NmI1ZTJiNTE3NGM4MTRhNTRjYmVhMmM4ZTI5OGY5OWIzNGM0YmJjMiIKKyAgICAgICAgICAiYzhiMTc3YmE5ODU3ZDgxYzg1NDQzNmJkOTlhZjU4YzA5ZGRlNWFjYWQyZDY0MTUwNDNmYjQwZTc4NDc1ZWY3NCIKKyAgICAgICAgICAiMDEyZTRkNGY3NWIyZTk1ODg1Yzg1MWEyM2I0YTI1NTQ5M2YzMGMxNzJlYWUwMWQ0NzkxMGZhYmQyNjlmNTc5NCIKKyAgICAgICAgICAiMGJhNDQzNTA2YzA1MjJiZjcyOGEyNTdhYzEwNzNiZGY5OWI0Mjk1NmRiMDAyYTMwYTU0ZGJkYWYyODRkOGY2OSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDIuMTkiLAorICAgICAgICAgICJiMjY1YTk3NzdmYWFmMTU4YTgwOGFhZTcwODVhODNlNzA3OWNlZjgwZDVmYzlkN2NkYzk2M2VjOSIsCisgICAgICAgICAgIjI4MWU4OGNlMTkwZTk4NjI5MDM0MzZhODZiYTQzNzI3MTY0NDljYzBjZThkNTU0ZjcwMmQ3MjUyYTA2NzYwYWYiCisgICAgICAgICAgIjQyMTIxZGQwOWJmNmVhMTNmMGViMjUyZWNjNzY0MjEwNjFmNTc0NGJkOGUzMmM1YThjNGZjMWY5NTIxYjNmNWMiCisgICAgICAgICAgIjI5MTQ2ZGQwNTkxMjkxYWNiZGM1YjYzYjU1MWQyMjhhZTUzODk1YjE5N2U2ZTI3YTcwNjhhYTMxMDNiNzBjZmIiCisgICAgICAgICAgIjMwZjQxNTg0NWM3ZTUyODdmMTExNGU0Y2RmYjQwMWVkNTE5ODY0Y2Y2MWJjNDY5YzY2Njk5YjI5NjBhMGFmZjIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAyLjIwIiwKKyAgICAgICAgICAiN2M0MzllN2FiOTkwY2RlZjk1NmM0MjM5NDc5YjQ5ZGE4NDJmOGI3Njc2NWE3YWQ0ODk3YmMxNmM2MWVkM2QwOSIKKyAgICAgICAgICAiODA1ZDc2ZThhNWJlOGI1NzhiOTUxZjQ1NDVkZjkyYThhNTM3YmEzZTJjMTNkY2UwYTAwM2U3YjYyNDllMzJiZSIKKyAgICAgICAgICAiOTQxZjIxY2RhNzI1YjgwNDA3YmUxZTI4YmI5ZTM5MzczODMyNTM1NmVjMjE3NDFkNWM4NmYzYzJiNGY3Yjk0NyIKKyAgICAgICAgICAiYWZkNTZiMmQzYWVjIiwKKyAgICAgICAgICAiNmFmYWQ3N2EwNTZkMDcyOTA1ODZlOTEzODA5YTA0MzdkMzlhYjMwNzMyNDUxMmIyZjViYzJiYWY1ODBiZjQ1NSIKKyAgICAgICAgICAiNDNlYjA0ZmY4M2U5NjNhNmQ3ZjMzZTlkZmZjMWZjZjQyNDQ4YzVmY2ZhNDcyNzE5YzY1MWY4MWYzYzYyMjI5OCIKKyAgICAgICAgICAiM2QzODkxN2UyOWI0ODQ4NTg3OWNlYmIwYTYxZDM4OWUyMzhjOWM3MWMzNjhlZGU0MDgzYTk0NjI5N2Y3MTkwYiIKKyAgICAgICAgICAiNGNlZjg2N2U5Y2NkYThmOWZmYzYxOTg0ZmNmMDVkNGZiYWZlMTA3ZGFjZjViMWRjOGUyYjE0OTViMjQ0ZjhlNyIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJiNWQ3MDdiNzkyZTA1NmY3MmZkNzZkOGRhODg5YTUzY2U0ZDhlYmFhMDgyYWVlYjIzMDMyZTNjNWQ4ZWJjNGMxIgorICAgICAgIjU1NjEzMTliZThkZmUxODg5OTFhODk1MWQ0YjIzYTUxZThhOTM4MmM4MDVlNGNmZDQ5MGViYmNlYWEyMDgwMmEiCisgICAgICAiZDY4M2IwNWExMDBmMjk5ODVmMDExYzNjOGE0NDI2MjU1MmQ4M2Q5YTFiN2MyNzMxNWUxNDRhZDhkZjVjYmU4YiIKKyAgICAgICJjNjQwMGZkOWNiZTc2Yjc0MjFkNzA4YWE2NGYwNDBiYWUwN2I3YmQ2ZjkyMjE4ZjlhNzI5Mjg0Y2M1OThjZGQxIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjQ1MTc5MmI1OTQ0N2NjOTM3OGE4YTRkNjQ1ZmIyMmZmNGJiZjA2NzA2MTUxMWFjODM2ZGIyNzQzYTYyNDEzNmIiCisgICAgICAiMTg2YjY5NDNhMWNjZWI2ZjkxMjkwZDkzM2JiYjhhYzA1M2E0NzQ5NTI4MjM2Y2EyNzJjZjc3ZDlkMzM3YWQyYSIKKyAgICAgICJiMzZhODdhOTE1M2M1ZTE2NzE2ZTA5YmEwYmVhYTY0YjMxMjUyNmQ0YThjMmRjNjhmZTA5ZTM3ZTUwNzRhMDkwIgorICAgICAgIjlkM2YwNGFiNzM5MDhhOTgwZGVjMWRhN2ViNDUwNWE0OGJjYWQzYjYwZDAxNjA4NDU4NjRhNjUxMWZmNTU5YTciLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDMuMSIsCisgICAgICAgICAgIjk4NmU3YzQzZGJiNjcxYmQ0MWI5YTdmNGI2YWZjODBlODA1ZjI0MjM0ODhmYjQzMWY1ZWU3OTJiNmMyYWM3ZGIiCisgICAgICAgICAgIjUzY2M0Mjg2NTVhZWIzMmQwM2Y0ZTg4OWM1YzI1ZGU2ODNjNDYxYjUzYWNmODlmOWY4ZDNhYWJkZjZiOWYwYzIiCisgICAgICAgICAgImExZGUxMmUxNWI0OWVkYjM5MTlhNjUyZmU5NDkxYzI1YTdmYyIsCisgICAgICAgICAgIjYyNzVlODczOTdlMzA5MmFhYjM2OThiYjFiNWNmMjRiOGNkNzcxMmJlY2FjMzVlMzIyMDNkNTQzMTRlNTQ3MGUiCisgICAgICAgICAgImE5YWFiYzg2NTdmNTY0MzRlNWFmOWZhZTc3OGZmNjA0NWMyMGUyZTFlZjdjYmRmODhmMDA3NWYzM2VhOTkyNzciCisgICAgICAgICAgIjdjYjdlOTJmN2RhMThhMGZmZDAwYWE0NjcxZWQ2MzkxMWZlOWU5MmZiNGE3NmU3N2RjNmUwYTkxNjU3NjcxNmMiCisgICAgICAgICAgIjE1ZWFlZjA4OWE3MWEwYWVhMzViZWQ5NDQ3YTZjMTdmMmFhZGI3MjdmZDQyZjBhY2M4MjQ2MjM4MWQ5ZmEyZWYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjIiLAorICAgICAgICAgICI0YzdiOTgxMjBjODc1MDkwODdjNDc4IiwKKyAgICAgICAgICAiNTllNWNiZTczMzFiOTJlMGNiOGY2ODllYWViYjMwZjJiMzM0YTc0NmE2NTcwNTU5MTJmZjFjOTI3NjBiMGI4NSIKKyAgICAgICAgICAiYmM0MjgyZjMxODRiOWE4MTRmNDQzN2Y4MjVhZTA3ZDM1NmJhYzY5ZTU0MGM5MDk0MmM3ZjdlNmZmNDRmZTU3NCIKKyAgICAgICAgICAiZjEyMTI1MGFkMjMwZjRiNTBjNzgzMTFlNGZkM2M5ZTI2NWY1MTdjZTMyOTdjM2UxZGRkYjVjODY5YzY5OGY0NCIKKyAgICAgICAgICAiYWY1MjVlNzM2NDAxYTgxYjQ1OWYxOThhZDE4MDhjY2Q5MjlkNDkwNDc0Y2FmNzAwNWY5MTBkYWNkZTIxYjA3NyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDMuMyIsCisgICAgICAgICAgIjY2ZjcwNzU0MjJjOGVjNDIxNmE5YzRmZjQ5NDI3ZDQ4M2NhZTEwYzg1MzRhNDFiMmZkMTVmZWUwNjk2MGVjNmYiCisgICAgICAgICAgImIzZjdhN2U5NGEyZjhhMmUzZTQzZGM0YTQwNTc2YzMwOTdhYzk1M2IxZGU4NmYwYjRlZDM2ZDY0NGYyM2FlMTQiCisgICAgICAgICAgIjQyNTUyOTYyMjQ2NGNhMGNiZjBiMTc0MTM0NzIzODE1N2ZhYjU5ZTRkZTU1MjQwOTZkNjJiYWVjNjNhYzY0NTAiCisgICAgICAgICAgIjMyN2VmZWM2MjkyZjk4MDE5ZmM2N2EyYTY2Mzg1NjNlOWI2ZTJkMTVlZmQyMzdiYjA5OGE0NDNhZWViMmJmNmMiCisgICAgICAgICAgIjNmOGM4MWI4YzAxYjdmY2IzZmViYjBkZTNmYzI1YjY1ZjVhZjk2YjFkNWNjM2IyN2QwYzYwNTMwODdiMzk2ODAiCisgICAgICAgICAgImU0OTJhNGFiMjM2NzQ3MTE2OWU1MjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTgiCisgICAgICAgICAgIjkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2N2QwMGIiCisgICAgICAgICAgIjI1YjgxYjA5YjU2MjAzODU2NCIsCisgICAgICAgICAgIjU5OWU2OWMxNTRlNGZlNjZiMzZhNjkwNDkyZmFlYmIyYmJlNzM0ZTA0MTVkOWYzY2Y3ZTM3ODI4ZjUzZTYxMTMiCisgICAgICAgICAgIjA0NDkxNzNhMzM0NjBjNmI0YzhkYzdkNjgxY2E2ZjRkYWYxY2I4MTZkNDBhYTkwODJlZTE5MzdiZTRiYzZhMDkiCisgICAgICAgICAgImM2ZGU3OThjODI4NmZjZDJhMmIyMTk2YzU5OTk0YzkzN2YzNzEzMDc1MjYxMmM2YmZmNmRiYjUzZTA2NDdmODgiCisgICAgICAgICAgIjU4YmMzODM4NjQwMjFlNmQ1NjY4MTkyMDI0OTI5NzgyMjI0NmEwZjUyOGFhYjNlZDE4NWVlYmNlOTE5Y2Y4M2UiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjQiLAorICAgICAgICAgICJkOTM0NDQyOGZhOGE1OGY4ZmE3YjQ0M2U1MWZjOWI1MWUzN2E3MDIxMGRiOGJkMWRlN2Y4Njc1ZDg0NzlmZjY1IgorICAgICAgICAgICI3Y2E3Mjk1NWIyM2M2ZjRhMDkxNjM3OWE0ZWRlZTFmMjZjODVlMDUyOTAyMTFlZWIyNTgzMmIwOWNiZTVlYWVkIgorICAgICAgICAgICIzZTM5NjViMDVhNTJmYjViMTY0OTExODJjNTkxM2NiMTgyNTc0OGU4MWFkMDE0ZjEzZDI5NmRjMTY5NTcwODJiIgorICAgICAgICAgICIxYjgzYjRiZTUwYTBmOTU5YzllN2YzYWE4MDc3OTcyZTJiOTNjMmVmZmQ5ZjMwODYyNWI4Y2E3ZjU0ZDdiNjk2IgorICAgICAgICAgICI0ODc5MDQ0N2FjOTFmNzk4NWU1MTBkZjcwZDZlYmMzNTcyYzIwNWU2IiwKKyAgICAgICAgICAiMmMwNjAxNjVmY2M1NjU1YzA2NTdjOGZlMDhlMDViZGM4Y2Q3N2MxZmVjYjZkMThiODkzODExYzk5ZGQwOTFlMCIKKyAgICAgICAgICAiZDg1MDZkY2NiNDllMzNkYWFmZjZkYTk2N2I5OWUzNDRjYjE3ZmEzYzk2MzEyOTliMzU4OTgxOGIzN2VkOWQ1ZCIKKyAgICAgICAgICAiNzg5NGU0YTY5ZGRiMjQ4MzJlMWE4ODYwMDE0ZWU1ZTVlYjk1M2U4YjM1NDg0YmE0ZmVjOWMzMDMzYWUyZTExOCIKKyAgICAgICAgICAiOWFmNzk0YTcyZTQyNjcyMTViZmU0NThmMGZjZTZiMzdhNTU0OWVmODA1NDNkMGQ0MWE4N2IyYzZlNGQ4NGNiNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDMuNSIsCisgICAgICAgICAgIjhjNjcwMmRhYWY1OGY2YTQ3NWZhZDJjN2E0YmIxNTZhNTcwNjQyNTU3N2Q1ZTMwYzZhNmJkMzY2OWZkMDMwYWYiCisgICAgICAgICAgImQ3ODlmYWEzZDAxMDE4ZDQ1ZGIyYTA0N2Y1MmNiNGY2M2RlYTM2MDk0MmFmZTQ3NjI2NDIwNmQ5ODNhZDM4MzYiCisgICAgICAgICAgImUxNTVjNTZiMmVjYzA4NzYzYWZiOWZkNTFkMTk5OTBlZmMzMzYzZjY1N2UyODVlMDM1MjFlOGNhZDAxZDJjOTMiCisgICAgICAgICAgIjVhMTgzYWUyM2YwZWU4NzEwMDg2YTg1YjlmYWQ0ZTdmMmIwOTQ1MmViYzQwM2NlMGMwZTU3NTVhN2IyZjMzZjQiCisgICAgICAgICAgImRlZjBkYjcxYzk3OTMxZmY5MDRhODEzMTk5ODRiZGM1MTY2ZjZiOTIwYzk3ZWU3NGZiN2U4OTBmNDkwYzkwZGUiCisgICAgICAgICAgIjMwY2FjOTc2YjcxNzIzZTJmODZlOWRlMWQ1MDNhNDFiYzgxZDUzY2NiZWY4YWM0MDUzNTdkOWRmZGYzMDY0NjYiCisgICAgICAgICAgImI0MjY5NTgwMjEyZTlkNzEzMiIsCisgICAgICAgICAgIjBkODlmY2Y4NDRhOWRjMjIzZDVmNjM4ZGNjM2E1OTc4NzE2ZjI2MjhiOGE4M2FiMzNlNmUyNTVmZjhhYTAxNTciCisgICAgICAgICAgIjhjMTRlMzg5N2RhNDVhZWZkNjNmYTg3Y2YzNWUyNDRiZjQ4MjhlY2QyMTk1MGYzMDg1YTM2NjIxYzlkYTFiYmUiCisgICAgICAgICAgIjdlYTYyNzMxYzY4ZDRkZTBhMzc2ZTIyZGFjMmY1NDhjZDRiYTRhNTQyZTcxMGY1NWNlODVhOWMxOTU5M2MwOGMiCisgICAgICAgICAgIjg3ZDI5NmQ2MzU4N2IzZmUyYzVkMTE2NWVlMjc3NDRjNzVkOGY0ZjE0MzcxNjM3YzBjMGE0NDYyNzYyODk1ODMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjYiLAorICAgICAgICAgICI1NmY0ZmZkMTI3OWRjZmU1NjJhOWRkZDQxZWNkZjYwYTNmZjU4MjQ2YmZhZjk1NjVjZjY3NGIwYjkwNzVmNDBlIgorICAgICAgICAgICJlYWMwOGYwYjg5NjY2MThhMTk2YjEyMjhlYmNlOTNmYzlkZDc5YmQ0NjNlYTdkMmM5NzRkMmMyZjUzOWVhZmIxIgorICAgICAgICAgICJiMmJjMWVhMzRkNzRmNzIwZTExOTM0MmZmNzEzMTIyNWFhOWFkYTg5NGI3NmIyZWNiMTJmMmY0MDI4NDRiNDQyIgorICAgICAgICAgICI1Y2Y4ZjFhMzliMGE5YzgzYjQ1YjAzY2ZjMGQxNWZkMzE0ZDZhYmY1MzJiOGVkZmNmMjM2NTE0YjJlNDU4Njk3IgorICAgICAgICAgICI4NmZlZmUyN2Y1NGQ2NjZlZTUyNGU0YjljMDUzYmUzOTc1MDE1ODI5OTFmYTJkODAyYzdkMWIxNzhiMjNlOWI2IgorICAgICAgICAgICJlY2U2ZmQyZWYwMTMyYzA2MDFhODZmMDc2OGJhZGM1OWM1Y2MzM2YyNGRlZDU1NGFlNTFhZTNlYzIzZjlkZDA4IgorICAgICAgICAgICI5ZTMyNGE2ODIxZjYxNTdmMTI4NDQyYWM1ODA3NjU4YWQzNDAyNmI4ZmNmZGE2ZGM3ZjAyYTkzYzE2NmVjOTQ1IgorICAgICAgICAgICJlZSIsCisgICAgICAgICAgIjBkZWIzOTdiZjJjZmY5NzlkNDcxOWM2NDhiMGEzNTI1MzUxZjVlMDg0MDVjYTI2MTRhODNlNTZhY2U4NmY1NTIiCisgICAgICAgICAgImU0MWJiOTI4ZGU1MGYwYmMwZmUzMWEyZWYyYWQ3OTlmZDNjZjQ3NDJiMTEzMWEzN2JkMDhmMmExM2NhY2RhNjciCisgICAgICAgICAgImY0OTVjOWYxYTllZjY0ODU3MDcyMzI5ZjAwY2M0YzAxMjIzNTU5OWE4M2ZjNDU5NGZlZDkyMzAzNDkwMWVkYzIiCisgICAgICAgICAgIjdkNWYwNTc5OTgzNDkzNWNhYmUyNjRmZmMxOTY2MzcxNGQ4YzNkZThlOTYxOWZkMjg0MmQyMjk4ZjdhNzJjOTkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjciLAorICAgICAgICAgICIwZTc5YWM5YzljMDM5NmQ5NjlmYjNmN2NjOTk0N2IwNzhiYWM0OTNiMDM1MmM4ZTBjZGU1NDYzZWE1YzExODRmIgorICAgICAgICAgICJkNTJhMWZiNzQ4MTkzYzE0N2E3NDgwMGQyNGY3NTFiYTkzNWUxOWM5MTE1ZWRmMDcyMjg4MzMwYmYzODNmNDk1IgorICAgICAgICAgICIyOTZiZTFhYTRhNTA5NWI5NTczYmNiZGIyMjhhNDMxMzEyMzc4NjVkMjZkZmJmY2ZlZjA3OGYzNTlmOWE5NTYyIgorICAgICAgICAgICJlMjViNjk2Mzg1ZTEyODEzZmZmYmM4ZDUyOTgxOWE5MTQ1MWQzM2E1MDcyNjM5MmU0ZmVmMjk0MThjY2EyYzczIgorICAgICAgICAgICJhMDY4ZTYwZWFlMzE4NDcwMzMxYTBmMWRiNGJiYjYzNzE3M2JlODBmZWEwM2M4MmMxNWQwMDE5MzM2MmQzYTE4IgorICAgICAgICAgICJhZDllMmY2ODA1MDBkNzI2NWIxNTU3MDMzYTUyMDk3N2Q4MTBmYyIsCisgICAgICAgICAgIjczM2I3ZmVhMTIwY2E1ZjAzNTlhODkwNTc1MGM0OWMzNjNkODg0ZjU2YzJiN2E3MjlmYWQ3YmZmNDQ1YTFlNTQiCisgICAgICAgICAgIjc5ODk0MTc0NTM5M2UxNzY3NzEyYWM0YjlkZDI2ODM4ODhkOWU2OGI5MDVkYmFiODc5MjE4NTE4NDg3MjczODYiCisgICAgICAgICAgIjAyZWFmNGE4MGY0NTk1Zjc4ZmQ0YTQ2MTBiZjgyMjBiODZhMjg4NWZkYTI0ZTE5OTY0MjhjY2QxNWYyMDA4ZTAiCisgICAgICAgICAgIjY4NTFiMmVlYWRjM2RjOGUwMzAxMmY5YmRiM2NlMDU3NWRkYzNhZGM3YzU5MDg0OThiNjlhNzk3YmE1ODI5YzciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjgiLAorICAgICAgICAgICIyMmViN2RiYTczMzA3YzdjNTJhMDdjZWQ4OWRiOGJjNTM5NGFlZDIyNzJmN2U4MWE3NGY0YzAyZDE0IiwKKyAgICAgICAgICAiOWVhNDYwMGExYTY1NDlmZDM5NzVmNjQ5OGEwNGQ2OWY5NmZhZDBlOGU2ZmViY2ZiZTAxYzJmODMxNzBiYzc0ZSIKKyAgICAgICAgICAiYjkxZjJlMzM1MzM4ZDU4M2U4ODVhYWM2MTQyNGM5YjI2NmMzZDJkOThlNzk3N2ZmZTQ5NWY5YzFhNmVlNWVmNCIKKyAgICAgICAgICAiMWE0Y2M3NDc4YzI0YjMxNmM3ZDlmNmRiYWE2NWE0Y2FkZWYxODFjYTk0NmY5YjkyMTg0ZmFlY2E4YTEzMTZhZSIKKyAgICAgICAgICAiYWI1Y2QzODc4YzZkZjA3NGY5MDYwYjlkYjY2ZGVjZTlhOTM2N2Q3NTQ5MDM1YWM2YmYxOTYyMzY1ZTFmZDNmYyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDMuOSIsCisgICAgICAgICAgImY2ODAiLAorICAgICAgICAgICI1MTYzOTA2MWZhN2I3Y2Q1ZGY2NGIzMGEzOTRjY2Y3ZTI0MjY5NzJhYTFkY2Y1ZDQ1ZWI4ZWMyY2Q5MGI5YjE5IgorICAgICAgICAgICI2ODkyYmU1ZmEwM2M0M2YzYzM3MjNhZTMxMzBkNjE1MWIzM2E2MzdjZmM1MGJhMzUyNmE3Mzk2Y2Y4NDc5YzUwIgorICAgICAgICAgICI4YzE4MTE4MTBkNjhiMzg4MGFmNmU2NGIxNmJkNzA3OWJlOWMwMDM5Mjk1MTIyNjE4OThmYTU3YzA2ZmY3ZTFkIgorICAgICAgICAgICI4MDM5ZmE5OTNmZDIwNTZhYzcwMTliOGRiY2YyNTMwZDUzODBlNjAxYTRhMTg3MWI4NmMyMGJjMWM0ODljNWYzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMy4xMCIsCisgICAgICAgICAgIjY1MGU2NGVkMWRhODhiY2Y4YWUyNzUyMmJlMWQ1Yzk5MTlmMjA5OWRkNjMyNDU1ZjY2ZDlhZmU4YmFmNDZjYzgiCisgICAgICAgICAgImExOTg0MDliMDkyOGRkODcyMjYyODRkNjY5YmYwMWJjZWM0NDM3NmNiMGU5YmRjNjg2YWNhYThiNDYzNDg2MDgiCisgICAgICAgICAgIjU5OTRjYWZiNWE4Y2ZjMzNkNDljZWVmNDc5ZmM2ZTA0ZjhlZWY2MzdlYjY4Y2I1NzgxOGQ1Zjk3NzBhYzUyM2UiCisgICAgICAgICAgImQ1YjAxNjM4MzY3ZmY0N2YiLAorICAgICAgICAgICI1MDNlMDU2NjFkNjgxZWNhNTc0ZTAyMzBhZjJkYWE4NzdiOTA1MTZlNWUxOTcyOGM5MTc2OGQ2ZWVmZWUwMDFiIgorICAgICAgICAgICIzNTQxOWM1ZmNiNTYxMWQ2MGU3ZWNiZTNjOTVlNWM4OGJhOTM0NjA3MDRmMTY5NGFlODA0NDRlYjk3MThhMDhiIgorICAgICAgICAgICI2Njg2ZmFkODZlNTI1OTkwYzNjMWE2NmM4YzUzYWEzMWFlZDhjYmM0MGZkNTRmNWZmOGExMzQ3NDlkNzlkMzhmIgorICAgICAgICAgICJiYjBkNTg0NDI2NzhmZjJmNzBjNmM1MGYyNTQ3MmE3MmQ2MzIwNWU3ODI0MjNkZjQwYjZjNDNkZTAzYTE4ZjhiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMy4xMSIsCisgICAgICAgICAgIjU3ZjhhYzZhOWU0NjhiN2YxZjc0NWRmZmUzOWU5Y2JmOTAyNGEwZmYzNmUwMjI4MzkyYmU2YjI5OTQyOTE3NzYiCisgICAgICAgICAgImI4OWMwYTRiMWZhODZiMmVjOGJiN2MzZTY0ZjU1ODVhZmE3NyIsCisgICAgICAgICAgIjkwYmUxNmI0MDhiMzg1NzM5NTM5YjNiOWEyOWI5NGM3MjkzODVmNzlkZDRhNzk4MTFlNmY2N2M4MGVkMzU5ZTUiCisgICAgICAgICAgImY0YjJhMTljMjIyYTgyYjNkNmQ2MmE5MDNmYjE4MGMxZjQzY2IzZmUwNmEyNTBiY2IwZTdjNjg4NjY1YzgzNjgiCisgICAgICAgICAgImExMWFiMTE2MGFkYjc0MDI5MTM1MmIzODM4YjY5MjNhNGEzN2FkMDYwNDBhNTM1OTIwZGMwZjEwNTc5ZWNmNDgiCisgICAgICAgICAgIjFjZDQ0MTM3MTdkN2Q0ZDk2MGFhNzUxYTc0M2UyZjdjNjE2ZTU0MmVlNjVmYmJmZTI0NjYwZTEwMWRhYTJiZGQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjEyIiwKKyAgICAgICAgICAiODBlZjAxYWFjYzViZmIwZGI0OGM2ZGUzZDgxNDk1YjljMjMxMWEzODkzODlmMjNiNzBjMDI0ZGE0NDc4YmZhYiIKKyAgICAgICAgICAiMmJmZTRlNTQ2ZjEzZmZmZGI5NjM4OTRlYzZkYWRiM2QyYjBlZTMzN2YxMTYzMTA1OGVhYzg2MDllNWExNTU0YSIKKyAgICAgICAgICAiZjc5N2E5ZjlhYjQ3OGMyZDViOTE4OGM4MjUiLAorICAgICAgICAgICI0NGMzZjUxZGNjNmZiMmI0ZTcwZjUzN2Y1NDY0YzYzMjBhZDQyZTIxMjhmYWRmZDlhN2U5MzdjZDY1ZGNiZjM1IgorICAgICAgICAgICJhYzY2Y2ZmYWZkMzkyODM5NjZmMmYxNWRlNTI3NzIzNTUwNzE1YTMxMDQyOTQ1ZTIwMGNjNWM4NmZhYmE1ZWM4IgorICAgICAgICAgICJhYmFmNTA5YzBjY2Q2NGQ5OWRlZGM3NmUzY2VhYThjNDQ3MTc5MzM3ZjRhMDc3N2IxMTUyNmU0NzJhY2Q0MTNiIgorICAgICAgICAgICI0YWM3YzMwM2NkY2Q4NGNhZmMwMjUyNDNlZjAwNmY3OWRkYWY1NWMxNWNjNGE4ZjE1ZWEyYzg3ZjA1NzczODE0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMy4xMyIsCisgICAgICAgICAgImFjMTc5NTkxNTUyODNiMGM3Y2ZmNTE1YzMzMTVkODliZGZlOTU4N2NjMDAxMjBkM2FiMzFiYjc2MDdiZGIzMDEiCisgICAgICAgICAgImNhZWFmNWUxNWY1YTZmNThjOWM1NjhmZmIzZDIzNDAyNTE2ZmZlMjMwYzY5ODFhODFjMTc4YThhMThjYTMzMGIiCisgICAgICAgICAgImI4ZWNhZmI0ODFiMjQ5YjQ2NmE4Y2Y3OGI3MGQ5ZTc4YTEzOWE4OGY0ODRjY2U3YzIwMzViMmU4OWQ0OTNiZGUiCisgICAgICAgICAgIjg4NWUxY2RlNDJjYjFhOTQ0OWZmNTcwZGNmOWUzM2M1Y2M3N2IyNTliZWUyODMwNTM5NjgwMmVkYzE2ZmM1YTgiCisgICAgICAgICAgImUxMGI1NmRhMmRhNzg2YjVmYjZjODEyYjJlMTc1YjY5NmIxYTlhOTZmYzcyMmE0MzIxNDY0NTBmMDdhNjQ4ZWYiCisgICAgICAgICAgIjNjY2Y5OTZlZjMwODFmYTViYjQyMjFjOTEzYmEyMjI4OTcwYzliMGVhNTI2NmJmZiIsCisgICAgICAgICAgIjQ4NDU4YzcyZjA2N2RkOWFiNzIwZWYxNjBjZjMxODRiYjk4MDFlMjZkNjE0YTg4OWE4MzU4NDQxMDdhYzAxNjUiCisgICAgICAgICAgIjBiMTE4NGEwMGJjYWE3YWYxZmY3ZGUzYTJlZjJlN2NlYjViMjVjM2I1ZDViY2IyOTg2NTkzNDMyNDc0OGM2OGYiCisgICAgICAgICAgIjA3ZGUxNzRlMTc4MGE3MGZhMjRkNmEzYTlmN2E0MWI4MTkzN2M0OTg0YjJjYmUwNmIzZDdiNDRjZGFlOWNiZDQiCisgICAgICAgICAgIjE2MzJkMDA5NDNjM2I1NzNiMWFhMjkxMjc1MGE5YWViMDdmMTEwMTMwYmEzNjFkY2Y4ZjUzNjc5MGQ2MDc4NDciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjE0IiwKKyAgICAgICAgICAiOTkwOThmNzdmNmVkMzVjMDhmYWIzZmE5Nzg4NjkzNjcxYTU4MDBkYzMwM2M5Y2NlNDI0NjE2ZmEwYzdlZTg4OCIKKyAgICAgICAgICAiODY4NzY3NGNhODhhYjIyYTVmZjJkMTJlMmIzODhiMDk0ZmZkN2RiZjlhMDkyN2E5NjIxNzE3MTUxZTA4ZWNiOCIKKyAgICAgICAgICAiYWRlMTU1OWY0YjQ4ZTIzZDMxY2Y1N2NkMzg4NGRmZTJiM2U0YjI2MGU4OTYwMjk0MDc5Njk0OTYwMjZjNzRhMiIKKyAgICAgICAgICAiMTg5MGQ5YTlhZmQyY2JiOGYyODMwYTU2NmFlZDI0ZjAxNjE5NzQwMWE4Y2QyMmM4MmZiOGIyMjg5MTg0NTgyNCIKKyAgICAgICAgICAiMGEyM2QxMDE4NWViZTc3MmRjMTliY2ZlM2U0NDkyMmZlNzMyMDljMWVlMDA0MDA3OWZiMDNiODI3YzgyMTdkOSIKKyAgICAgICAgICAiZWQ3Yzk4Yzk1ZjMwOTc0ZmJlNGZiZGRjZjBmMjhkNjAyMWMwZTkxZGE2MGNhMmFkNzc3OTdlY2U4NmRlNWJmNyIKKyAgICAgICAgICAiNjg3NTBkZGI1ZWQ2YTMxMTZhZDk5YmJkMTdlZGY3Zjc4MmYwZGIxY2QwNWIwZjY3NzQ2OGM1ZWE0MjBkYzExNiIKKyAgICAgICAgICAiYjEwZTgwZDExMGRlMmIwNCIsCisgICAgICAgICAgImI0NmFlODY2MTM5MTg5YjZiMTcxYTc2MjA1ZmI5Y2UwNDFiNDAyOThlNWJhOTJjMmU5Y2MwYmJmYmI0YTc2NDIiCisgICAgICAgICAgIjVkZTZjZTEzMDIxYWUxYTRhOTQyMjk5Zjk4ZmY4OWY1NTJmNDNhOTA3M2RlNjRmNDljMmNhMzYyMGQwOWQ3ZTYiCisgICAgICAgICAgImUzZmUyODIyMWU5MzY4OTg3ZTExMGNkNjA2NzEwNmM0ZGIzMWEwMzg5MDIzNjc5NmM4NDI1MmY1NmM5NTAzNGEiCisgICAgICAgICAgIjAxYzVmZTk4MWU4MWI2NTQ4NTVhYWYyNzQ3NTAxMTU1NzIwYzIxOTNmM2ExZDEwZjQ5ZmVlOTBjNTJmZWU5ZTQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjE1IiwKKyAgICAgICAgICAiZmY3OTA2NDIzMDViZjMwMjAwMzg5MmU1NGRmOWY2Njc1MDlkYzUzOTIwZGY1ODNmNTBhM2RkNjFhYmI2ZmFiNyIKKyAgICAgICAgICAiNWQiLAorICAgICAgICAgICIwNzU2MzI0NzczNGYzYzNkN2EzMTAyYmNiNDViYjU2ODE1NjhlZDEwZjJlYzQ1OWU0NjllMWE5ZTM0MDlhMTM5IgorICAgICAgICAgICJmYjE1MWI5OGQzZjNiNjJkYWFhYzhiOGY4OTE2ZGY4NWQ2ZGZhOWFiNzYwZGYxZTE1YWM4OTA0NGU1NzljZjQ3IgorICAgICAgICAgICJhMWFmNmNkNmVjNzA0Y2VkOWIwMzRjNmFhYTkwZDBlNzBlMDg1MjE0MGU3NTQxZjJlZmJlMmNmMTkwYjk1ODk0IgorICAgICAgICAgICIxZWM4YjU5NzRmOWM0NDRkMjZjMzQzMTZjOTIxNmI2NTk1ZTY1NmJjNmM3ODQ0ZmFjMTZjNTE1MjYwOTI4ZTc4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMy4xNiIsCisgICAgICAgICAgImU5OWZjYmY4NTkyZGJlMmQ3ZTI3NDUzY2I0NGRlMDcxMDBlYmIxYTJhMTk4MTFhNDc4YWRiZWFiMjcwZjk0ZTgiCisgICAgICAgICAgImZlMzY5ZDkwYjNjYTYxMmY5ZjIyZDcxZDU0MzYzYTQyMTdhYTU1MTEzZjA1OWIzMzg0ZTNlNTdlNDQ1MjI4ODAiCisgICAgICAgICAgIjYyYWZjMDhmY2RiN2M1Zjg2NTBiMjk4MzczMDA0NjFkZDU2NzZjMTdhMjBhM2M4ZmI1MTQ4OSIsCisgICAgICAgICAgIjIyNzQ2NDM2MTY0ZTYzOTM3ODcxYzFkNDdkOGUzZTcwYzllNTJkMTExNzMxNmJiMTU0Y2Q1NTJlODM2ZjJhM2YiCisgICAgICAgICAgImJlNmQ4OWQ2MDc0YjUxYjAxNTljMjZjMjhkZjc1ZTNkN2NmYjdjZjAwMmY2NWQxZWU1MjFlZGMyYzNhNjVjNTIiCisgICAgICAgICAgIjZjOThjN2MwMjVmYThiYjYzMTQ3MDkxNmQzMDFiOGY3ODA5ZGRkOTE5ZGVkMzFhMGQ0NjY4M2VjNWJiNDQxNzAiCisgICAgICAgICAgIjYxNmVhYmNkOTcwMjA1ZWQ3NjAyMDJkMGQ4N2E2NTc5NTkwOGIyOGQzMjZmOTM2MjEzZjI5ZmViNTk3NzM0OTEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjE3IiwKKyAgICAgICAgICAiNmE2YTBjOWI1YjE1YmNkYTE5NmE5ZDBjNzZiMTE5ZDUzNGQ4NWFiZDEyMzk2MmQ1ODNiNzZjZTlkMTgwYmNlMSIKKyAgICAgICAgICAiY2E0YWY4NzBmYmM2NTE2MDEyY2E5MTZjNzBiYTg2MmFjN2U4MjQzNjE3MzA2ZjRmOWFiOTUwMTE5OWNlZjU1YyIKKyAgICAgICAgICAiNmNmNDA4ZmU3YjM2YzU1N2M0OWQ0MjBhNDc2M2QyNDYzYzhhZDQ0YjNjZmM1YmUyNzQyYzBlN2Q5YjBmNjYwOCIKKyAgICAgICAgICAiZjA4YzdmNDdiNjkzZWU0MGQyZTE4MGZhZTFlYWM0MzljMTkwYjU2YzJjMGUxNGRkZjlhMjI2YmFlMTdkMjAzOCIKKyAgICAgICAgICAiNWQ1MDE5NTU4MjNjM2Y2NjYyNTRjMWQzZGQzNmFkNTE2OGI4ZjE4ZDI4NmZkY2Y2N2E3ZGFkOTQwOTcwODVmYSIKKyAgICAgICAgICAiYjdlZDg2ZmUyMTQyYTI4NzcxNzE3OTk3ZWYxYTdhMDg4ODRlZmMzOTM1NmQ3NjA3N2FhZjgyNDU5YTdmYWQ0NSIKKyAgICAgICAgICAiODQ4ODc1ZjI4MTliMDk4OTM3ZmU5MjNiY2M5ZGM0NDJkNzJkNzU0ZDgxMjAyNTA5MGM5YmMwM2RiMzA4MGMxMyIsCisgICAgICAgICAgIjQxOTMyMmZhY2FjZTc2ZjJkNWUyZmJjMTlhYWI4NmM3MThhMjgwNjRmMWQ3YjRjNjYyZjA0NzRhODc3N2E5NTkiCisgICAgICAgICAgImJkNjU2OTUzOGMxNjA4MWMwZjUyNjk4YjJmMDAxNzMwYzAzYjlhM2QyNjk0NzM3NGM5NjFmZGVkYTExNWI2YjciCisgICAgICAgICAgImRhZjY2NTE4ZjFmZTgyMGY2N2MzZmYxMmYwYmMzZjExMDFlMzkxMWM0MzkwNmIwYTEyN2U1MGJlMDE0MGM1ZWYiCisgICAgICAgICAgImM0MzVlMjk1N2I0NDJlNjBhZDUyNWFkNzBhYzllZjYxYzNkNjRmMGU1NjZjYmMxZjlkNTFiYWUxZDQ3MjcxZGEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAzLjE4IiwKKyAgICAgICAgICAiM2I5M2VmNGE1NTUwOTY2OTE5MTVkYzIzYzAwZTk1NGNkZWIyMGE0N2NkNTVkMTZjM2Q4NjgxZDQ2ZWQ3ZjJlZCIKKyAgICAgICAgICAiNWVhNDI3OTViZTE3YmFlZDI1ZjBmNGQxMTNiMzYzNmFkZGQ1ODVmMTZhOGI1YWVjIiwKKyAgICAgICAgICAiYWUyMTFmNGY3N2RhMWJlNmFmOWM5ZWE3MDRkYmFjNGIzZjNlMjcwZDJmYWNmMzY1MWQ3ODdkMGViZjU5YTc5YSIKKyAgICAgICAgICAiMzk2MTJkYTEyZDU3YzRhYzhhYmM3MjhlMWRhM2YwMWExNTIwZmM5YjMyY2IwZmZlMDA4YzgwNjk5MjhmODNlMSIKKyAgICAgICAgICAiMzU5MGE3OGI4MTdlODE5ZmJmMmZkMDU4OTNlY2U1YjE0MTg2ZDkwMWM3NjhlMzQyZGM1NDcyMjM0NWFlOGFhOCIKKyAgICAgICAgICAiNzM4ZDRkNTk3MGM1MDg1NDcyYmQ5ODk5ZmEwMDQyY2YxNGJjZWRmZmRiYzBlZjUwODE5MDc1ODQyZmMzNmJiOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDMuMTkiLAorICAgICAgICAgICI0OWZmZDU2YmY3ZWZjMTEzMDRhNWFmYmMxOWQ0NzkyNDkwMThmZGY0ZTA5ZjYxODcyNjQ0MDQ5NWRlMTFkZGVlIgorICAgICAgICAgICJlMzg4NzJkNzc1ZmNlYTc0YTIzODk2YjUzNDNjOWMzOGQ0NmFmMGRiYTIyNGQwNDc1ODBjYzYwYTY1ZTkiLAorICAgICAgICAgICI2OGZiMGJkNTE5YmY2Zjk2ZTA3NmFmMjkwMTJmM2MzYTExMzdjMDk4OGRlN2I2ZmNlZGY0ZjUxYmRmZWU2NDViIgorICAgICAgICAgICI4OTdmMTc3MDllMDVjYWEwYjExMzUwMGQ5MDRkYzA2MDBkMTdhOWZmOGViMDJlMWVmYzljNDY3YTI0MDAzZWY4IgorICAgICAgICAgICIxZTcyNzQ2N2M0N2RkNjU2MzU2ZDcwMzcyYTE1ZWE4ODQxMjE2MzRiMDE1ZDI5NTExZjI4OTU1NTc3OTkwNzlkIgorICAgICAgICAgICIwM2M2ZDRkZTI1OWIzYjM2MmI4MDQ5MmQ4MWJjOWZlODU0NDQ2M2VjMDMwYmI1YzljNzNjMzI3NGUzZWQxMjIyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMy4yMCIsCisgICAgICAgICAgImJjMjU1YWY4OWE2YTE5OWJjYTRhMzkxZWFkYmMzYTI0OTAzYzBiZDY2NzM2OGY2YmU3OGUzZmVhYmZiNGZmZDQiCisgICAgICAgICAgIjYzMTIyNzYzNzQwZmZiYmVmZWFiOWEyNTU2NGJjNWQxYzI0YzkzZTQyMmY3NTA3M2UyYWQ3MmJmNDViMTBkZjAiCisgICAgICAgICAgIjBiNTJhMTQ3MTI4ZTczZmVlMzNmYTNmMDU3N2Q3N2Y4MGZiYzJkZjFiZWQzMTMyOTBjMTI3NzdmNTBhMzM0ZGIiCisgICAgICAgICAgIjZmYWViZjExMDgxYTA0Zjg3YzJkNjIxY2RlYzc5MzBiOWIxODNhOTkwNDc1ZGNiYjljYzdmMzQ1YTNiNTU4MDMiCisgICAgICAgICAgIjAzMGNmMDM2MWE1ZDgwODEiLAorICAgICAgICAgICI0MWY2NTJkZjc5ZmRkMjZkZTk1YzdhOThmYTg1ODcxM2ZiNTY2ZDhiMzk5MjhlNzE3NjRiMmJlYjE5ODQwM2UwIgorICAgICAgICAgICIzYjdlMDZkYzk2MGM1MDUxNTdiZGY0MDU5MmM0ZDc3NTAzZmI3MmE0ZTAwNTVmOTc0ZmU5Mzk0NDhkYTM2OGY1IgorICAgICAgICAgICIzYmQyZWZlMjZlNmY5YTI1NGIzZTg3MzJhYWQ4MTY4N2IzNjFlMjFhNDBjZjNlNWU5MjM4OWEyYjQ4OWMwNWM1IgorICAgICAgICAgICI5N2YwZTE2NGUyNjc3MDkzNzIwMDQzMjcxNjM1NjJkZDhhMGFkYmJkZmUzYmM2MTZiZDA4NDI5Njg0YzIwYzY5IgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI0LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImQxMzFlMDkyNDMzNzBkZDJjZDU0MjVjOGQwMzBmOTlhZGIxMDViMTQ3YjhhM2QwMDY3YzYxNjQ0M2I3ZDRiOTYiCisgICAgICAiODIzOGUwNmRiYjVmMjAyOGU4NTM1NzRiN2MxNGJlMTA4M2MxZTU3ZTEzMmMxZGY0YTNhMjcxMzI2M2ZhZGUxMiIKKyAgICAgICJmNzExNGY0MzY5YmJmMDU2MjA1NTQ4NDEzMzFlZDgxMTAwNTA1MjE5MjU3MmNlYjQ4ZDY2MjQwN2ZkMzA4MWNmIgorICAgICAgImFiOGI0OGM3ZTkyZDNjNGEyNmE5NjQ1YTM4ZTZkZWU4OGJiMDA3NTk3NWE0ZGFkOTY0NmIyMTYwMzg0MGFmNWYiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiNTZiNTMxYmJlZTE4MzdhNjk0NmNiODZjOGZiZTdjZjZlZWFkY2NkMmE0OTIxYmNlYmIzNGEzYWUwYzZhNTY5NiIKKyAgICAgICIzZmNiOGI1YTcwM2I3MTdkMDMyZWU4MTNlNThlNDM2OTVjZjM1NTQ3Zjg3MjY0YzgyZGJhZmFlODQ0MDA4YjYyIgorICAgICAgImQ5MTIyZTlkZTg5NTg1NjBjOGRiYjAwNzcyN2U3MTM5ZTBhOTgyZTA3NTg4MTQxMTNkZTU0YmEwYTQ1NTE3NTEiCisgICAgICAiZmNhMGZjYjEyZDhkZTMwZDc4YjhiMTEyOThhN2Y3OGYwYjA4OGYxNjg3MDUzYzg0YTU3NjJmNjJhNGJkMDVjMSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC4xIiwKKyAgICAgICAgICAiMmM5MzZiZjYxMzNhOTY5M2YxNDZlZTVhMWE5MWMyZjE2OWIyZTY0NGE1MThlODVhNzVmNmU0M2I1NjBkNGE3MiIKKyAgICAgICAgICAiZjM4YzY0Zjg0YzA1MjQwZThiNGU1NTc4NjE2M2U3Mjc2MjY1YmEyMTNiYTkzZGVlMWIyZTEwMjEzNWE5ODliNiIKKyAgICAgICAgICAiMjQ4ZTg4MzI3ZTMwMDM2MWE3NGYyZTliYzQxZjJhMzc2ODNmMWExYTE1ZjlkZDQ3MmUxMThlMWM0YjNlZGU1OCIKKyAgICAgICAgICAiZGQ3MGYzYmFjYzI1MmUwYzY1NGIwZjdhNmU0MWE5Mjg3NTEwZWZhMDNiYzkyZTgwNWU1YjJjOTEzZjUxZTI1YyIKKyAgICAgICAgICAiN2Y4NTg2NDBjYWZhYzlkM2M5MTc2ODY1MDdmYTk0Zjg4NjZmODY5YTRlNWE2YTNkNGY5ZDk3ZWQ4MTM3ZjQxNCIKKyAgICAgICAgICAiZDE0NDdhODZlZWY5ZTE0OTY5OTRhZDJkYTU5NyIsCisgICAgICAgICAgIjllOTNmN2FjYzUwZmIzYTBiMTI0M2RjMzM4YzhjY2IxMmJjYWI0YWE0NTA0NDBiNjMwNmM4MWI1MGI4Zjk1YTkiCisgICAgICAgICAgIjM2ZGQxNjYzMzBjNjk5YjI4NTgwZGExYmUyNzU2MTY0MDJkYTg1YmZkOGVlZmNkNjk5MzU4N2U2MDkyODY1ZDgiCisgICAgICAgICAgIjI1M2IwNDA4MWQ1NzJmMjYyNzU5ZjU1NmRmYjkxMWU4ZDk0ZTkyZTU1YWY2ZDU4OTgwMThmZjMzZTVmNmIxZjkiCisgICAgICAgICAgIjkwMTk5NmU5MmZhZjMzNmUyZGNjZTNhYjBhOTNkYjkzMmU5NDJjYzY0NzhkNmNjMmZiNjYwODExOTEwY2NkMTciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjIiLAorICAgICAgICAgICI5NDMyM2Y3YzM4Yjk5NWNjNmJkODVkNDc5ZjhkZTJkZWMxZWYyZTg0YjFmZWVmZWNmMzkxNTBiNWQ5ZjJjYjE1IgorICAgICAgICAgICI4NWFjMGQ3MTlhYjM0OGJkYzk3NTBkZGI4ZTMyNzZkYjg5ODE4NzM1YmQ2MjMxNDEzY2JjYTJkZTk0MWI1NWU4IgorICAgICAgICAgICJjZmExYWIxMzJjYzc4YWE0ZjJiNTFmZDY1NzhlZTJlMDMyZTkwZTM0MDgwZjBmOGUzZGIxNGQxYjU2ZjNkMDc3IgorICAgICAgICAgICJmMjlkYmMwMjE2YTQxMzQ0OTk4YzBmZTFhYjQxMjI0N2RmMjFlNzRlYzIyZjVkYjAxNDhlY2FmNDczZWVlY2NjIgorICAgICAgICAgICIxNGZmOWU0NWQ1OGMyZTYyYjVmZTZhNTAxYWI5NmZkN2M1ZWRkZWYxNGFhODkyNjY2OTJlIiwKKyAgICAgICAgICAiMDk0MDJhNDM1NmJlNzM0NDliNDY5ZTM2MzFlMWIwMjMwN2M1Y2FjMmNlMTUyOGQ3ODRmYWI5MjZkZmY1MWY4NiIKKyAgICAgICAgICAiMjQxYjlkNjZmNzlkNmQ4ZWVlZWIyNDlkNzZmYTlmMTY2ZmY5YThjNmEzOWU4MzJkNWQxNGI5ZDdlYzVhM2RjMiIKKyAgICAgICAgICAiOGYwMWViYjA2ZTM5ZDU5ZTg0NjFiOTU1YjJhN2Y1YjFmMjA0YjA0Y2M2Y2M2MjY0NjE2MWFjMWMyYmY1YmFiNSIKKyAgICAgICAgICAiMGYwNjhjOTA4ZDI4ZGU1ZWFlZjdlOGViZmNhYmIwOWI3ZDc1ZDgzNTQwZGQ0YjM1NGQxMzFkODZmMDc3MDcxNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMyIsCisgICAgICAgICAgIjBlMjMzYjI1NDliZGQyMWJhNTE0ODBkYThlM2RjZWY0ZGIyMGUwZGNjMDVlZTIzNzM1MWVkYmM5YTUzYzUyZjYiCisgICAgICAgICAgIjc0ZDEwNWZlYzA5MzlkMzY5OTY0N2VmYzFlMjVjYjRlOWIxYWI3NTJhYjZmZTI4ODY5ZmY3M2YyM2UwMWVlZjgiCisgICAgICAgICAgIjY3NGM1MzVjNGM5MzM1Zjc5OGYxZGVlY2Q0ODlkMDZkYzg4ZmQ2YmMxZDQ5OTZlZmY3MmI0MzllM2MwMTRkZDEiCisgICAgICAgICAgIjRjYmYxNzcxNWMxNTg5NDNkZTJlNmY5NzFjMzQ5OTg3YTFiMzk1ZDY4MmMzYjBjMTdiNjZjZDNjYTQxMDYwYjUiCisgICAgICAgICAgIjcxMTFlMjI4MzE0YjJkMzRiNWU0NGU1NWYxYzExYzMxYTZlYjgwYjVmODJkOTZiZDRhMTciLAorICAgICAgICAgICJkMDc1YmUwNmNiZDYyMjNlODcxYjBmMzM2MmE3OTdkZTI4MmRhNWM0MDMyM2YzN2MyY2MzNzQ2NWExYTg2MzY4IgorICAgICAgICAgICJkZGNmYTZkYWExMzU4NjZjMzIwM2QwNDcyMjYwYjI5YzNjOWIxYjg4OTQwODVkNTQ3YzVlYjkzMTQyNGYyNDE0IgorICAgICAgICAgICIwYTVjYmExNTNiZGVkNGI5Y2U3ZGFlZGM2NDVkMzk4MGM1ZjU4M2Y3NjcxMWM2N2IxOTNhNTIxMmYyYTkzNTRhIgorICAgICAgICAgICI2Nzk2YWYwOTA4MjA5MTMxMzRlY2YzMDViZWZiNjUzMmNkNDhkNDExM2EwZWM0ODY5YTBhNTY1NWRiZGM3MjU5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC40IiwKKyAgICAgICAgICAiZDQ3YzBmNWM5MjJlNGY4MDllOWNlZWQyMDdmMTI0YTVhY2RlMzdmYTE0NjM4ZThmYmQwYTcyZmU0NTI2MjE5NSIKKyAgICAgICAgICAiOGUzNzY4MmM2ZmYyODNmM2Q1MWRhMTUyYWExZjYzNzRjZDI3ZDJhNGE1MzMwNTM5MTZkZmYxYzA3YmE5MzYzMSIKKyAgICAgICAgICAiNzQ4MTY5NjM2MDY5MDQ1OGQ4ZDFlNWQ2NmMzNWY5Yzk5YTUwNTVkOWY3Y2ZlNzYwNWNjYTU3ZWFjMzM1YWRlMiIKKyAgICAgICAgICAiZWZmNmI1YWE2MjdkNWIiLAorICAgICAgICAgICIxMTg2MGJmNGQ3NDUxOWZmOGNmY2NlM2QzM2UzYWFiZGY3NzE0MGExNTYzNmIyNjc4ZGY5NjczMTQ0YzI0MWIwIgorICAgICAgICAgICJhOTlhMGEzN2YyOTJjYWQ1MWRmMGI2M2IxNGY4YWIxN2UzZmExNTU4Nzc5MGZiMDYyYjVmMjY2YzE2NmIyY2E3IgorICAgICAgICAgICI1MTU3YTBmOWUxYTVjOGVjMjZiOTE5OWQwNzE4Nzc5OTgwNmExZGU5ODcxNWZiZTUyNzU3YTcwMzc3M2M5MThhIgorICAgICAgICAgICIwMDBjMjExYTc4MjI4NTI1Y2I1MmViNDQxYjI2OWIzZjMzMDUwZWQxOTM1YWMwZTg1OTYzMTlhZTgwYzc1Yjg0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC41IiwKKyAgICAgICAgICAiYmViZDlkZGVhM2FiZjlmOGViNTg1NTk3NjZmOGIzYWI4MzUzNTIzOGM0M2RjZDgxYTI5NDkzMDNhOTVmMDU1YSIKKyAgICAgICAgICAiODM0MGNlZWUxNjE1ZTU4ZGYxZTAxNGM3NTUyZDc2OWY4ODQxYmEwOTk3NWNlZmU3ZTQ4ZGZjNmEyNjQ5ZTgyMCIKKyAgICAgICAgICAiMDNlN2JmNDIwZTcwMTAxYjMyN2Q5MTcwZjczZThkODg3Y2QyOThmNTNkYzFiZmM4ODJjZjBlZmNmYWQ2ZTg2YSIKKyAgICAgICAgICAiMGU3ZjkwOTRjNGYyNmM0NjkyMWUwOSIsCisgICAgICAgICAgIjg0YTI2ZmJlNjcwMTBhYTFlZjJkNmM3OTI2MzIzOWI5NzhmNGU4OTNkZDFlYzZmMDdkMjMxN2YxNTFhMmExYjMiCisgICAgICAgICAgIjIzZTUwNWY5NDUwYzM3ZGY2YjFiZjNlMjRmMzhiNjM2YmY3NzRlOTY3NDFmZmFhNzY5Y2ZkN2E4YTZiM2E1ZWYiCisgICAgICAgICAgImFiYTIzYWFiM2E0MzdhMjI1YmQ5NDE4NmU5MWQzOTJiZWQyZWFkOGE3OGYzODFmNDA5NDljZjFmM2QyNzI0NTgiCisgICAgICAgICAgIjFmMjU3MDRiZGY2NjA4ZGQxMTllMzZkODdkMDM1NWU2NzA2YzhhNTI1OWZkNjBjOGRmMTNiYzYyYWE5ZmQ1N2EiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjYiLAorICAgICAgICAgICI5ZDE5OGUyYzZlMTJmNzRhOWEwODFiY2Y3MGZjMDQxNjhhNDllMDljNWZhYWEwMTFlOWEwOWUyYzQzZWUyY2QzIgorICAgICAgICAgICI5YmIyZjdlNTY4MmRlYWIxZmExMTFlNDFhMzE5NGEyMGE4NmRhNTUxMDE4MjRkM2Q3OGE3ZTMyZGIyYjYwYWE3IgorICAgICAgICAgICI3Mzc3MGI1NzM5MDdiNDA5YTI1OTJjODNmMzQ3ZmViYjJkNWM4NWU5MjU1ZDZkYzEyYWFhMzM1YWRmYmI1ZGM4IgorICAgICAgICAgICI2MmQ3ODYxOTUzZTI2ODdkNTMwM2I2ODZmZmY5NjM0ZWU0ZDE1Y2JjYzI5ZjdhMzUwNWE3M2RlYjZmOWUzODhlIgorICAgICAgICAgICI5Njg1ZmZmNGQ1NDUwZjFlMzI3NTM1OWEyYjk5NDQwYzY3MzlmNWI5MWViZDE0ZWY3OGFlNzNjMWE2MTkxMWY1IgorICAgICAgICAgICJhZTNhMmI5MTQ5Njc0OTE3Mjc4MTgwNjVlZTAxMGRmNDlkNWExNmVkOGRjZWU4NDhhZTA5NDhhMjUyNGVhYzdjIgorICAgICAgICAgICI0ZmY5MDk2Y2VkNjEzNTc2NDJjNWUwZjgwNjgwYWZmZmNlMGJhN2ViNTk1ODk5NDk1MjZmZjUxMjM1Y2RjNzJkIgorICAgICAgICAgICI0N2EyN2IzOWI4ZDRhYzg0OWMzYmMwNGZhODM2Y2YxODRiYWUwYzgzNDE1OTU2IiwKKyAgICAgICAgICAiMzhlZjI0NWI5NDBkOTM5NzBhNTAzYmY0M2UyOGUxN2I4YWZmMDgzY2NiZTFlOWM0OGU0ZDgwZjUxNmMyN2QwOCIKKyAgICAgICAgICAiNWNhMmE0ZTU3MzIzNmEyNDk0ZDliOTk3ZjgxMjQ4NDgxMmY2NjUyNWQwNmMwYTBiYjIxMzBjMTVkNmNlMThiMiIKKyAgICAgICAgICAiMmYzY2VlNTcwOTdmYzBkNTU4YWZkOWFmMjdmMTUxZjg0MzZmYmM4N2Q2YmU2MTQyNjQ3YTE3ZTA0ZGY2ZGVjNyIKKyAgICAgICAgICAiMGE5NWM3ZGFhODRlZGU5NGNjYjQzZTFkMmMzN2I5NDU4MTczMTBkMTRhMjJiNWI5YWU2MTE0NDhlZTQxYmM3MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuNyIsCisgICAgICAgICAgIjhlOGJhODQzNmZlMzEwNGI3Y2UyYTRlZmMzNmM4NTdkNDllODQ5YzAwODVmYzY1N2JhYTAzMzE3OTNiM2YzNmMiCisgICAgICAgICAgIjdjZTczOGI2MTMwYmZhYzc1ZTUwMTFmMzJhYTNkMSIsCisgICAgICAgICAgIjc4NDQ2OTlmMWM0ZjI5NmU1MDI2MWYxNTI2ZTBkZDg0ZjAxYzgyY2I4NWZhMjQ2MDllYjAzMzU4NzUyYzZjZjUiCisgICAgICAgICAgIjk5OTRkODRlMTJmNDZhNzIwMGNmNWFkOTdjMDhkZDRmZmM0NDY1N2RiNTcyMTRjZDFmNGVlZDZiNzdkMjM5ZmIiCisgICAgICAgICAgIjU4MjE2OTg4YzVlNWJjNzM1YTRmZGZmNDA4ZWI5ZjEyNzlkNjViYmFmNmE2ODE5MjQ0MTgzNDllNjJmZjVlNTgiCisgICAgICAgICAgIjE1ZWFlYTU5MmQ5MGQxZWVmNTU2ZmNkNGQ1YjRiODljNmM3MDczOWQ2ZjBkM2QwYmQxNmE1MGYxZTAwMjRlOTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjgiLAorICAgICAgICAgICI1ODVmYTZhN2Y3N2E0YjZlYmE1NjkwZTczZTcxMjhiNzJlNjc3Y2RiM2FhYTg2MjllZDYxZjJlZTYzYWYxYTcxIgorICAgICAgICAgICJiYTg3MTM2YTUyZGIxYTMzMjFmY2ZlYjI0OGJmMmU1Y2Y1YzYzOTU3MWQ1ODk1YWRmMWZiMDYxN2VkMTQwYTJhIgorICAgICAgICAgICIwZDk4MzdjM2MxZDg0NTBjMjg5ZDMzYmM5NjIzNzlkNzNlMzA4N2YyYjdlZTZlYWRkNjY1MDE0OGMwNDJiNmZmIgorICAgICAgICAgICIwNDQ4MjE5NmM3MThmZGMwY2U1NzljZWI2MmE4MWU1ODQzNzNlYjkzNzU0MGM0MjZiNTU2NmE5ZjQwN2NmY2NmIgorICAgICAgICAgICJiYzRiNzUzNjk0YWYwZGY0Y2Q2YWE5ZjE2NTQ2YTYzMzk0YTBmNjU3NzM3MTM0M2ZmZGRiNjUxYTYyYTNhNThlIgorICAgICAgICAgICJkZGVjNjdhMjljY2FlODk2NTYzYzYzZTNjOTBkNTRkOTEzNThhZGYxOTRlNmFhYjFmOSIsCisgICAgICAgICAgIjY4OTMzNTFjNzM5MTVmYWM0N2M5NjJjYzYwMTdjYTc0YTViNWVlNGNiMWJiNWExMGFkYTJhNDMxNThhMjI2MWUiCisgICAgICAgICAgImIyN2I4NjZkYjM5ZDM1OTBiNGY4ZDIwZWU2N2NiMWE1Nzg5NDYzMTUwZDgzOTM0MzIzMjU0M2M4MjY1MDUxMDEiCisgICAgICAgICAgImUxZDI1NzA0MjZhYjlmZWZkNjViYTg0ZmFhZWM3MzFmMjczNzRhYjEwMTkxYzk2MDgzMTY5M2YyOWE4NTRjMzgiCisgICAgICAgICAgIjEyODU5OWY3Mjg3NzQ5YjBiNDhiZjdlOWRmZGFlZGM4NGVlY2UwNzE0MDQ1ODQ3MzBjZWNjZTBkNWNmMDA1Y2MiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjkiLAorICAgICAgICAgICI3ODNjMThiMTFmIiwKKyAgICAgICAgICAiMTMyZmRmYjg0MTkzZGZiNzlmZGZlNmJhYmMyZWZkMzliMjZhYTIwOTY4YTA3YzBlNDE1NjBlZTRkZmNkNGZjYSIKKyAgICAgICAgICAiNzkxNzQ5MGYyNGU4ZGY4NGY0ZTAxMTVhM2U2MzI3M2U3YTNiMTI4YWJiYmQxN2I4YWE1YTA2YmExNTVlY2IyMyIKKyAgICAgICAgICAiMGZlNzk3MjYwNDc5OTU3MDEwZTQ0YmE1NzUyOTJlYzNmMTUxYWJmNDhlOTEwM2U1NTE0MmVjNjdhNDEzNGRkOCIKKyAgICAgICAgICAiZjM4ZWM2NTlmOWE3ODlmZDAzNDFjZWYyYmJjZjlmNTI5YjkzMjE4ZmMzZTQzYTc2Njk2OWQxYmY4Nzg4NDgwNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMTAiLAorICAgICAgICAgICI5NmRjOThiMGViODRmNTU5NDgzMDdhZGRlY2NiZTc2NDM5Y2EzNjU4YmMzNjM1OTYyNGM4ZmUyZmEwOWM1MmU0IgorICAgICAgICAgICI3YWNkYzMyYTE1NmQ5MDc2ODI0MTBhODU2N2FiY2FmZGM2ZDhiYjUzMjUzNTllYzc1ZmZkYjczZWUwYTk1MTVhIgorICAgICAgICAgICI0ZGRmOWEzMWU1ZDUxOTQ2MDM3NDI4MGFkYTMwZGU3ZGQ1MzRkZWFhNTciLAorICAgICAgICAgICI4ZmI0M2RjOGYwNmYyYmE0OGYxOWJlNWIxYTA5MzEyMTNhOTkwYWVkOWM5ZmVkMWRlNWQ2ZjM1YTJhNzgyZjBhIgorICAgICAgICAgICIxOThmZjYzODhkOTZlOWQ1OWI4OGU5NzgyMmYzNDlmZjQxNjRlZWE1MGE2MjkzNWM2MWNiYzc2ZTNkZjc1ZjY4IgorICAgICAgICAgICI0ZDk2MjQ3NWU1NjM1OTY0OTZjOTg4MGE0OGVkOTc4YTYzMTVhMzQ1NTcxNzkxY2IyZGRjODhkYWJlNDE4Nzk4IgorICAgICAgICAgICJhNmE0NDFjNDdhZmJiMWNkMTUyMTNlY2EzYjExMTVlYzhmNThmODc3YmU4ZmJkMzhmNGZkYWVmOTM5ZjUyNjQwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC4xMSIsCisgICAgICAgICAgIjM3MjAwMTU5OWQ5OTMwYzdkNTU3NDU4YjQzNmRlY2ZkYzE0ZDA2Y2I3Yjk2YjA2NzE4YzQ4ZDdkZTU3NDgyYTgiCisgICAgICAgICAgIjY4YWU3ZjA2NTg3MGE2MjE2NTA2ZDExYjc3OTMyM2RmZGYwNDZjZjU3NzUxMjkxMzRiNGQ1Njg5ZTRkOWMwY2UiCisgICAgICAgICAgIjFlMTJkN2Q0YjA2Y2I1ZmM1ODIwZGVjZmE0MWJhZjU5YmYyNTdiMzJmMDI1Yjc2NzliNDQ1Yjk0OTljOTI1NTUiCisgICAgICAgICAgIjE0NTg4NTk5MmYxYjc2Zjg0ODkxZWU0ZDNiZTBmNTE1MGZkNTkwIiwKKyAgICAgICAgICAiYTg5N2M3Zjk3MmUxMTc0OWUxZTdjMTU1Y2U5NDYyYWE3ZTFjYzBhOTc5YzEyNzI5Nzk1MTI2Y2I4YzBlYTUwMiIKKyAgICAgICAgICAiMjFjNDI2ZjFiYjA2YzFjYWY3YzUxYWMyZmJkOTRkNjg4ZGE2N2RkZjNlZjY2NjA2ZTk4OWExNmRlMWY5MmIxNyIKKyAgICAgICAgICAiNzA2Zjg4ZTg3ZDlmMTQ2OWEwMDVjOWZkNzY3ODhlZThjNGE3ZjAxMjA5ZTI4Yjg2ZjY3NDg4MWFmNTdkYjZjMyIKKyAgICAgICAgICAiNDI5YjZmYjQ1Njk4YmY1ZDMwMDdmNjFjN2Q0NDExNzhhZDEyNDNhNDliMmFhNjAyOWJmZTkwMmQyNmU0MjM3NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMTIiLAorICAgICAgICAgICJiZmJmZDA3MzIxZjBmMWQ1ZmE5ZmRmMDAxNGMyZmNiMDM1OGFhZDBlMzU0YjBkMjkwODFiMjMzYjQzNTY3NzUwIgorICAgICAgICAgICJiZDZlNzgiLAorICAgICAgICAgICJjMjRkMzEwNDk0MDlhYTE2ZDNmOTcyZWY4Yjc1OTVlYWEwMDc4MzNlMmJjZGM3NTA0ODUyZjI1MDVmYmExZmMxIgorICAgICAgICAgICI1ZjE5YTBlYWRkZTgzMzVjNzMwNmZjM2Y1MTY2MWRhNTIwZWNjOGRiN2Y0NzM4ODVjYWJkZTkzZjBjZWJmMWRmIgorICAgICAgICAgICI5ZThhODIzNzBiMDBhMDQzYWQ2MzJjZGNjNzhmM2ZhYzFkOGEzNzU3ZmM4ZTUyNDFiZmVkNTVjNDk2MDRhYzE5IgorICAgICAgICAgICJhYmRhYzBjOWM0MGRhMzczYzE1ZjNjMWJjYzk3M2ZmYjRmOGI3YjViNTUzYWUwNzVlMWIxYmRkZGQyM2Q3ZDJhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC4xMyIsCisgICAgICAgICAgImM2OTczOWQyMmFjODk2NmJmMTFjMTE2ZjYxNGIxNjY3NDBlOTZiOTA2NTNlNTc1MDk0NWZjZjc3MjE4NmMwMzciCisgICAgICAgICAgIjkwYTA3ZmRhMzIzZTFhNjE5MTZiMDZlZTIxNTdkYjNkZmY4MGQ2N2Q1ZTM5YTUzYWUyNjhjOGYwOWVkOTlhNzMiCisgICAgICAgICAgIjIwMDViMGJjNmEwNGFmNGUwOGQ1N2EwMGU3MjAxYjMwNjBlZmFhZGI3MzExM2JmYzA4N2ZkODM3MDkzYWEyNTIiCisgICAgICAgICAgIjM1YjhjMTQ5ZjU2MjE1ZjAzMWMyNGEiLAorICAgICAgICAgICJkMDZkMzIyNjBkYTJkYjQ4MTA0ZmJkYzI0ZTE2YTY1YjQ4NzM3ZDQzY2UyNDM3MDQwNDJhYWQ2YzAzZmRlNWEzIgorICAgICAgICAgICJkYzBmMmNjNmUzYWQ2OGMzYzYyZWFiZmExZjdiMWNhYjAwOWQxMTc1YWZmNzdiZTU4ZmIxMmE0ZTU4MTI3ZmVkIgorICAgICAgICAgICI2M2VhM2RmNDQxODFiZGEzOGM3NzNjODNiOWU4MDRiYjNkYjc5NjMyNjNkZjMwZTkyYzRjMjcxOTU2ZTdlODEwIgorICAgICAgICAgICI0NTJjMTVlMDZlOTM5NjY2ZGYwYzgzMzQwMzMwOTZjMDdkZWEwNWI0NGViYjE0MjQ5MmU3NjY5MTMxZWJjZjJjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC4xNCIsCisgICAgICAgICAgIjczMzA0N2YzMzZmOTE1NDczODY3NDU0N2RiMDJhOWY0IiwKKyAgICAgICAgICAiYzExM2MwNDY1Yzg0Y2JmYjBmYTFiZGJjNTRjM2UxMDY4Y2EyM2U2OWI4MzkxOTA5YzM5MDBmZTViNGU3ZTNmMCIKKyAgICAgICAgICAiMzRjOWE5ODhhM2RkYzNjMzgxNzU2YTFlMWEyN2MxZWNmYjNhNzBlMWVlMGU5MjA0MThhYzRhYjZkOTUzMmI4ZCIKKyAgICAgICAgICAiMDk1OWE2NTNiNGM1MDg2NzA2NjM0NjJiMmUxMzU4MTZiNjk0YTZiOWI0NjhhMjlmMzhkZTUzYmZjZGRmOTdlMCIKKyAgICAgICAgICAiM2Q4ZGQyNGY5NzI2MzNhNDljZjNlYWFlMWQ2OTYyOTQzODYwZGQyNTQzNDAwODZiMTAzNTdiODBjMWNmYmYzMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMTUiLAorICAgICAgICAgICJhOTc0MGI5YWEwZDM0MDU4ZmQzYjkwNmU0Zjc4NTlkZmIwN2Q3MTczZTVlNmY2MzUwYWRhYzIxZjI3YjIzMDc0IgorICAgICAgICAgICI2OWJkMGNlMTk1NDlkMDcwMDEyMGNiZTUxMDc3ZGJiYmIwMGE4ZDhiMDlkZThkODM5NmUzNjUwN2ZlMWVmNmExIgorICAgICAgICAgICI5MDE3NTQ4ZTBjNzE2Njc0YzJmZWMyMzNhZGIyZjc3NTY2NWVjNDFmMmJkMGJhMzk2YjA2MWE5ZGFhN2U4NjZmIgorICAgICAgICAgICI3YzIzZmQzNTMxOTU0MzAwYTM0MmY5MjQ1MzVlYTE0OThjNDhmNmM4Nzk5MzI4IiwKKyAgICAgICAgICAiNGZiZDRmYjIzNzA0ZjQxNDlhZGEzMjdmYTUzMzg4NTI2YTA3ZGQ0M2Q5MTVmY2JkYTlhMTNiYjJhMzczOGY0YSIKKyAgICAgICAgICAiZGIxYzNkYjI2YWI2OTA0ODgwNWE4MGM4MTYwNWM5NmQ2OGY4NDE4MDJmNWFiYjAyMDU3YjYxMWZlMmYzOTQ3MSIKKyAgICAgICAgICAiNjI2NWU1NDUyNTJjMjMwY2U0NzRhZmYwYmJkNGZmMWYzODA4NDk2MDM2YTQ5NDhjYTdhMTEwZmYyNmM2MzhjNSIKKyAgICAgICAgICAiMGYzMjE1YjI4YTA5ZjIzYWY2Zjg0Y2RjODk3ODk4ZDBmZDIyM2IxMzQ4MWZlODkyYjFhNThiYTJlNGIzNjg1YiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMTYiLAorICAgICAgICAgICJhZjhmMDg4N2MyMTkwMDRkMmFiZDg5NGVhOTI1NTllZTMxOThhZjNhNzM0ZmU5Yjk2MzhjMjYzYTcyOGFkOTVhIgorICAgICAgICAgICI1YWU4Y2UzZWIxNTgzOWYzYWE3ODUyYmIzOTA3MDZlNzc2MGU0MyIsCisgICAgICAgICAgIjMyN2VjOWQwYmU3YWFiN2JjOTU5ZDQwMjI3ZTFkMDA0ODFmYzA0MDExZmUwOGZkNTQ0OWI5MGMwZjA1NGUwZDYiCisgICAgICAgICAgIjU5YjkyNmNjODEyOTIxYzIwYTU2M2M0YWJlNGY4MjVkNmI1ZWVmNTdiM2UyZDY1ZDIwYTgwMTNhNTBkZDVjOTMiCisgICAgICAgICAgIjIzOGNmMDQ5ZjJmZjBjN2ViZWI4ZThjYWY3MmU0NmU3Y2Y4YTBjM2Y0OTI1NjE2YjFiYzE4MjZmZmNiMGJkYTYiCisgICAgICAgICAgIjBiYmViZWRmZDRjNjBmMjc4OGQxNjY2ZmI4NDUxMTg1MzY0NmMyZGQ0NjY4NTFmYWM4NWJlMGVkNWFjZTVmZTIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjE3IiwKKyAgICAgICAgICAiMzhkZjg2NTU3ZjM3NWQwOWNjZDhiZDE1ZDhjY2Y2MWY1ZDc4Y2E1YzdmNWNkZTc4MmU2YmY1ZDAwNTcwNTZkNCIKKyAgICAgICAgICAiYmFkOThiM2QyZjk1NzVlODI0YWI3YTMzZmY1N2IwYWMxMDBhYjBkNmVhZDdhYTBiNTBmNmU0ZDNlNWVjMGI5NiIKKyAgICAgICAgICAiNmI4MTU3NzlhOTFiM2E4YmQwNDliZjJhZWI5MjAxNDI3NzIyMjJjOWNhMGMzMjhjNjU5ZTBhNjQzNzQzM2NjZSIKKyAgICAgICAgICAiYjczYzE0OWFlYzRhNzQ4MGQ1YmJjNDI5MjBkN2NhMjM1ZGI2NzQiLAorICAgICAgICAgICIzMDQ2MDU1YzJiOGVmN2ZhOTJjOGE5ZTM5NTk4NWJkNDYwZmI2YjQ3OTg2NTUzOTQ0ZDIxMDQ1MTE5ZjdlNzYxIgorICAgICAgICAgICI3ZTAzZmU4MDg3MGFjNmFhYmY2M2IwOTZjYWQ1Y2NlN2Y1MDY5NTNhN2Y2OTNmZTEzN2FkZmI5N2NkNDU4MTI4IgorICAgICAgICAgICJhZTk1YzQ3Y2E5NDhkYWNmMjQwMzZhZGVhYTQ4ZjI5YTQ2OWZiNTEzMTkxZTA1YWNmNzllNjdhNzkzYTNhZjVlIgorICAgICAgICAgICI0ZjljNmQwZDAxZmRkMGUwY2Q0Mjk2YWQzZGEyY2E4OWE1MGVlZGNkOWY3Yjg3N2QyYWUxZDU4ZDk4ZGNkNzhmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNC4xOCIsCisgICAgICAgICAgImNiMzRlZGQ1YWI2NTQwNDFiNjE0MzA1NiIsCisgICAgICAgICAgIjFkZGY0OGJhNTM1MWJlZDA3OTVmNTViMzA2YWExYzZlZDgzNmY1OTJiYTkzY2YwYzQ2YjdjMjczNzA5ZDM2YjgiCisgICAgICAgICAgImRmZjAyYWJkYjFhNzY4ZDFjNzExNGE4NmE0NTc0OTZkYTU3OWU0ZDgxOWY3MmExOTJlMjk4YmUyMTUyZjdjZjMiCisgICAgICAgICAgIjlkMWUzMDgyN2QwMjgyY2NmMzRkYzg4ODlmMWMyZjU5NzA5MzBkOTczNTA0MmY4YTVhNzEyMjYzMTY1ZDZlNmMiCisgICAgICAgICAgIjUwMzVlMmU0YTUwZTg2M2MwNjc5OWUzYzg5Y2NiNWNiMGU3MGIzYzk5YzA4NDAzMDY3N2E3Yzk3OTA3YTE3MjQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA0LjE5IiwKKyAgICAgICAgICAiNWIwOWVjODhiMTUyNzE3OGZhMDQzMjYzZjMwNjdkOWZmZTk3MzAzMmE5OWY0Y2IwOGFkMmM3ZTBhMjQ1NmNkZCIKKyAgICAgICAgICAiNTdhN2RmNTZmZTYwNTM1MjdhNWFlYjY3ZDdlNTUyMDYzYzFjYTk3YjFiZWZmYTdiMzllOTk3Y2FmMjc4NzhlYSIKKyAgICAgICAgICAiMGY2MmNiZWJjOGMyMWRmNGM4ODlhMjAyODUxZTk0OTA4ODQ5MGMyNDliNmU5YWNmMWQ4MDYzZjViZTIzNDM5OCIKKyAgICAgICAgICAiOWJmOTVjNGRhMDFhMmJlNzhiNGFiNmIzNzgwMTViYzM3OTU3Zjc2OTQ4YjVlNThlNDQwYzI4NDUzZDQwZDdjZiIKKyAgICAgICAgICAiZDU3ZTdkNjkwNjAwNDc0YWI1ZTc1OTczYjFlYTBjNWYxZTQ1ZDE0MTkwYWZlMmY0ZWI2ZDNiZGY3MWYxZDJmOCIKKyAgICAgICAgICAiYmIxNTZhMWMyOTVkMDRhYWViOWQ2ODlkY2U3OWVkNjJiYzQ0M2VlMjBjIiwKKyAgICAgICAgICAiYWY1NmZjMzI5NzM5ZTJmNzc1NGI2Y2EyNTE2NGE2ZmE1OGY2ODVkZGI3NDJiNDg0MWQ3M2E1ZTJjNGM0NTM0MyIKKyAgICAgICAgICAiYjc0ZGZkMmYwZDM3MGVkZGRkMzZhMDE3NTY0YThkM2FkNDAyZTJhMzQxYzk3MjA2MmMyMzgxNGEwMDEzMWUxNyIKKyAgICAgICAgICAiYjFkZWM3YjRjNTdjNWJmMWQ0ZmE3OTIyMjkzN2E0ZGM1YzAwMjM1Zjg1M2RkMjNkYzk3NTdmMzM1Yzg1YzIwNyIKKyAgICAgICAgICAiZWIwNzRkNGJjYzI0M2VkYWE3ODMxYjgzMTM1NjU1ZTIyNzdlZjI5ZTdhZWJmMzRhMGY3YjIzNGEyODY1MGEzMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDQuMjAiLAorICAgICAgICAgICIzYzMzMGMxZWY3MThjMTQxZTQ3YjhmYTg1OWJlNGQ1Yjk2IiwKKyAgICAgICAgICAiMGIxMDIyZGMzOGUyMTdmZDNiMGU3ZWYxOWRmY2I0YjQ1NjM2NjI0MDk4MzA5NWY2ZGI5NjU4MzFhNzBmMGY4ZSIKKyAgICAgICAgICAiMjBlMmRkMmFjMjMxY2MzNzkwNDVjMjczNjVlNzNhNTM3MTliYjZmMDExYzNmODYzNmI2NDk5NGNhNDgwNjAyZiIKKyAgICAgICAgICAiYjNiNGYwZTIyNzRiNThiMzYzZTBkMzA4YjUyOGUxNTg1OWE5MWRjZjk5YmZmZWZiYzgwNTIyNDFiOTc0MTkyZSIKKyAgICAgICAgICAiNjM2MjE4ZjM5ODMzMmRhZmU4MjU5Y2E1ZjVjY2ZhNTRjOWIzMmIyNzM1YWYwNzI0ZjQwYjVhNWQ2MTIxYTQwZCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJjNTVmZmJkZDZhMjc1M2JjMDJhZjIwYWUxOGVhMGRhZjIzMGJiNmY4Nzk1ZDA1ZWZlY2M4MTViYWVjZTIyYjM4IgorICAgICAgIjc5OTk1ZjZkOTc2NGMxZGY4Zjk3ODUxMzgxNjg2MjY2YjgwOTJmYjYwMTE4OThhNzY3MDdhNGQxZDViZGEwOGQiCisgICAgICAiMjQ2YzY4N2E4YmJhZmE2Mzk4YWM5ZWEyNzI2ODIzNzE0YTBjMzkzNGNhNmU1ZjhjZTMzOTg3YjUzNDg1N2VhOSIKKyAgICAgICJmODVjYzRlMTlhMWQyMTgzZTBlNGM4YWE1NWNiMjI3YjBlNTZjZWIyYjYyYjMwZWZjNzg4NjRiMmY5ZmI5MjQ5IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA3ZTNmYTcxYjM5OGI2ZTQ0MTQ3MzcwYjNlYmJiY2E4NGZjMjVjMjIzYWQ3ZDkzMGVhNGE2NTczZmY5YzViMTUiCisgICAgICAiZmFlNjgyYzYyMmQzNDg1Y2UzYTRhZjExNDQ4ZjIzYmZlZjgzOGU4MGJjMzI3Yjg3ZDViYTljODAzNzA3NDlhZiIKKyAgICAgICJjOGMxYzAxNzU0NmZjNmI2NTkzMWI3NTljYTQzNDFmYTVlNWUxMGIyNDA4N2U2ZTJjMGY0ZGJiNzkwNjk1Mjk5IgorICAgICAgIjljYmQ5MGQyNDM1ZmNhY2M5YzgyZTQ4ZmRmMjRlNDk1Y2ZmMzBhZDQxOWU3MTIzZTNhYzk0MjI3MmUxYWJhYjEiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuMSIsCisgICAgICAgICAgImVhZTlhNDBiZmYxODNmNDExNDczMmU3YjNiYTU1NmY0Y2UyODhkYWE4M2UzZmYyMzYxMTI0NGE3YTA5MDFmMTEiCisgICAgICAgICAgIjdkODZjMDljMzNhNTIzMmJkMzIwZmEzN2EyMzhhOGFhNjJkZDIxYWJiZmFjZGI5M2ZhMWM0NGNjNTVhYzYxYmUiCisgICAgICAgICAgImEyNGE2YTM0Y2M2NDc2NzUzODM3ZTE2ZmFjZDgyZWI0OWUxYzU3Yzk1OGZiYmZmNTY4ODg3Y2Y4MmVlYmU5NjEiCisgICAgICAgICAgImU1ODBlMDY0ZGI5Y2JlYzNiNTNkZjFmMjcxOTllNDlhMDRjYmU1OWM2OWEyNjVjZmFjOGNlNGY5MWNhOTVkNTIiCisgICAgICAgICAgImIxMTQ1YzhiOWY0NDQwYjM5YzE4NTA5NGJlMTg0ODc0ZGE1OTcxZDdkNzYzZmUwN2NlMTZlNTdmMWU1MGQyMjgiCisgICAgICAgICAgIjY1MDRiNDgxZTJjNjg1YmM5ZDljMDE0OTNmZDNhNmQ4YmI5YjJlOTZiZmRlYjZjOTI5MTRjYSIsCisgICAgICAgICAgIjQ0Y2ViNDQyMjQyYmFlMDg1OTk0ZWFkMDdiNzA5NTQzZWEyMzk1YTZlOGQ0NjQ3M2Q3MGRmMzRhOTU1NWFhNTYiCisgICAgICAgICAgIjdmNGRhMTM4ZTk2M2ZlOTI4NmE4NGZiN2M1Y2Y4MjAwMDM1OTA0YjUwYzMyNDAzY2FlNTE3YmZhN2ZjYThhNjYiCisgICAgICAgICAgImZjZmQ2MzJhZjc0N2M0OWNkZmIwYjlhZWUzNTIyOGI3ZGM0YzIxMDAzOTY5YjBhMDEzZWRlMTI5MmI2NWQxMGEiCisgICAgICAgICAgIjUwYzkwMjYzZmIwYmY0ZjRiODM3NjY0MWIwM2UxZmFmYjg4M2YwMzhmNDMyM2RmZTViZWFjNDY4ZGVlYTk5YzMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjIiLAorICAgICAgICAgICI5ZGU1Y2E0Njc0ODU2MWEwYjkyOGIyNjBhOTVhM2VkOTIwYWRjOGQ1ZWViOTI3MWRjNzFiYzE0ZjY5Y2NkNjMxIgorICAgICAgICAgICIxZDE4NmE3NzlmNWViOGRiMTdjNjkwZDY4NjdjZjMzNjliYmZmMTVmYWJiM2NkMmNmZGQ2ZjdkNzUyODZmZjJkIgorICAgICAgICAgICIyNDk5YzVhYmI0OGVkNTRmZDRkODQ5YTkxODBlMTEwZTBhNTNhNzIxMzk4MjkyMTEwZmU4YmUyNiIsCisgICAgICAgICAgIjQ0NWZmNWI2ODc5ZjhjZTc1Mzk1MDE2ZjA0OTVmMTMxMzViMTc5ZTczYTNjYWViMzMwZTNjZGE3ZjMxZjFkY2IiCisgICAgICAgICAgImE3YWE4MmUyNjhjOTM1ZTlkNzAxNGUwYjBkY2VhNjljN2I5NjhhZGIxNzQyNGE2NGRmZDFlMmJjNTcwN2Y5MjAiCisgICAgICAgICAgImZjMGM4M2NjNjNkZmM3NGI5NjNlNjgyYjQ2YTIyYWMyNTZhYzZiZTU3MDljMDdjZmNjM2Q0ZWJhM2ExZDYxYWIiCisgICAgICAgICAgIjE1ZjFiYWRiMGE0OWZiNWNmMDlhMWY3NDgxYTNhYWVhZjdjMjU3NTQwMzc3YWVhN2I1NDQxN2E2MDljNzZmNGMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjMiLAorICAgICAgICAgICIxODNiYTFhMzgxMWQ2MjVjYTlkYTFiYmFhZWRjNzYxOTIwMTJmY2I2NzRiYjllNzdkOGYzNzcwOGQyNDBkMzQ5IgorICAgICAgICAgICJlMDU3OTc0MTZmZWIyNGUzMDE4YzdhMjA1ZDA1OWRlOGUwYWUwNWE4ZDdlMDllYWZlZWI5ZjA2ZGU1ZDQyODdhIgorICAgICAgICAgICJiYmVmMDU5YmM1ODZiMjFjODJkNjRhZWNlOGQ3NDI4YWZjZDdiMjJmYzVkMTY4YmMwNzZiNjE1ZjAyNzMzY2I2IgorICAgICAgICAgICIzMTI1YzhmMzZkNWNiODA5Y2U4MDY1MDgyMzk4YjM4ODVhODkxOTU3MGM0NzhhMDcyZjU5NjYxNWQ3OGYwMTM2IgorICAgICAgICAgICJkMTFiZTMyYjNmZTBmNGZiZTNjN2RhNWQ4MTM0MTkxMDE3N2U0OGIxYmJhYzI3NmMxMmVlODE1NDY1ZGM2N2Q0IgorICAgICAgICAgICI1MzI0ZjkwNWFhY2E0ODM4ZDgxZjc0MzE0NjNlODllYjhiOTUzNjU4NjkzNmFmYjQyY2I0N2JkOGMzMTgyOWQzIgorICAgICAgICAgICIxZWMxZWUyOWY5MWNjYzZkZjljZDFiMGI5Yjg2NDZiNjAyNjdmZDdlY2VhZTkyYzBhZTllMGNlNWZmNmY3ZTBiIgorICAgICAgICAgICJmNzU2YTliOGZmYzljNjE2IiwKKyAgICAgICAgICAiYWI0Yjc4OTY0YzJhMzVkMzI4NTVlMGVmY2VkMzRiZjgwMjE5YjU4YzQ4OGVhMzc1YjFmMzI3MTY2YTUxMzVlNSIKKyAgICAgICAgICAiZGE5OTQ1YzI4NzI5N2EzZDkzMmU1NzI3NDZmMDIyNzQ4Yjg1NTg1YTBhYmQ5MTg2ZjRhYzM1ZWRjODUwZDJmZCIKKyAgICAgICAgICAiODgwNWI5ZTlmNTFhNWFkY2I5NWUxYWMxNzI5ZTU3Yjg1MzMxYzFlZDE1YzNkMGNmYWUzM2Y2MWMxMTliNTVjOSIKKyAgICAgICAgICAiNWUzNDRiNzJmMmI0ZjhlN2U4ZmFjN2EzM2U1YjhiMjc2YTYwODhhN2ZhYmY0ZmExNzIzNTdmYjZlM2Y0NGE5NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuNCIsCisgICAgICAgICAgIjg3MDdkY2RiNDlkMjgzYTIzYTliZDZmZjg3YWZmODM0ZjA2ZmY3ZjQ3YjBlNWY1N2ZmMWEwZDk5NWJiYTljZGQiCisgICAgICAgICAgIjVlYTAxYjQyYjI1ZDZmZjE3YTBkYzEwNjA1Y2Y0NTJhY2E3M2JlNTRlZDVlMGNlMjE1NjZhZmNjMTc5MTJhYmUiCisgICAgICAgICAgIjE4ZGZhY2QxYmMwM2UzZTI4ODJhNGJiM2E0ZjM5ZWVhZjk2M2Q3YzM1ZTZiYTg1OGIxMzc2YTA3NTE2MGM2Y2YiCisgICAgICAgICAgImFlZDVlOGM1MmU0NTExMzIzNDcyMTliZDg4ODkzZWViZTM1NjU5YTBlZTRkOTRmOTRkMDM1YjdhODY4NmZmYjQiCisgICAgICAgICAgIjE2ZWI5OWZiMmFhYTgxMjM2YjA1YWM0NjQ1OTI1ZjJjMmJjMTllYmU4OWE2M2YyZjQ1MWQwYjEzYjJmZWYwNjEiCisgICAgICAgICAgImU1MzBhMzQ5YmFmM2IyMzU2NDIyYjA5NWZkOWYxOTI5OTNhYjk5YzlmOTIyNmVmOWE3YjNjZmIzNjU4MjA4NTkiCisgICAgICAgICAgIjI5Yzg3NmI1ZTlkN2M2YWNhYzdiYjAyNzUyMzRlNDFlZDM1MWM4MzhiN2EzMWEiLAorICAgICAgICAgICIxNzUzOTg4YjM5ZGM3NDVkZjk2OTFhZjllZTY5Y2FkYTczYTk4NzdjY2ExMmY2ZDQwNjI3ZGNlZDc2MjIxNDdlIgorICAgICAgICAgICJjOTAxYTViNDYzZTdlZjliMzdmYmQ2OTI3ODVhYTIyYTQ2NWRmNDAzYWY5MmEyOWY3OTVkNDBhODNmYTk2NGI4IgorICAgICAgICAgICI1YTdlYzA1YTNjZGFlM2Y4YmM4YTYxYTc5ZGM4NDJlMWQzNzdiYzVlMWQ0NmFkYWFhODY2YmUyODJjNmUyMzg4IgorICAgICAgICAgICIxNzM2NDRmNDA2MjdiY2Y4YTA5NzRhNGJlOGZjYzQ4YWVlN2U4MjU5Zjg2OGEyYmQ3ODlhOTA4OTkyMDU2ZTU1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS41IiwKKyAgICAgICAgICAiYWM5ZmEzZjYzZGYwNjhlOTBkNjkyZWNjZmE3ZDg3OTY0OTFhY2E3OTViOTg1OGE0NTUxODYyMzIyOWFmMjhiMSIKKyAgICAgICAgICAiM2E1MDJkOGNiM2I5NTA5MjUwNTg4MmViOTk0ZGU3NDY1OTYyNTY5OGEwMDUwNDE3OTQwZDhiZmEyOGEzZjkzZCIKKyAgICAgICAgICAiMTQ5ZmY4YjBiYjM5MjZmNjE4ZWY5MTk2NmY0ZDM5YmRiYTVhMDUxN2RkZWJiMTZkMmJjNGI0ZTMzYTdkNjE5YyIKKyAgICAgICAgICAiOTVhMzNjZjVmNTcyZGJlMDdmYWI0YWE2N2ZiM2YzOWFhMjk4MWEzZGMwY2FlZTY0NzU4ZWE4OThlYmNlMTBiZiIKKyAgICAgICAgICAiM2FhNGZjODQ0OWU4ZTBjZjdlODhiMTg4MjM4YzIwNjhlZmFjZWJmZWVmNDA3M2E2NTRhNThhMzA5OWQwMzZhZSIKKyAgICAgICAgICAiZWUyZDgxODI5OGQ0YWIzOTIzOGVkYzQ1OWE5ZmQzNTc3ZTlmNWJmYzAzNjhhYTY1N2FlZWRhMWVlYjhhZTdmNSIKKyAgICAgICAgICAiYWMxZWFmM2IxYzk1ODE3ZGRlMmVjMWE1OWZjYjVlZjI3Y2MzNGZiNzUzMzFkYTdhNDk5NjkyNWFjM2FkMTdiYiIKKyAgICAgICAgICAiYzNkYWZlNmE5YzY0NGUzMDk4ZWZmZWY4ZmVhNWNjMGQ1ZjBjMDQ4ZTEwODgiLAorICAgICAgICAgICIxMWUxYTgyOGYwMGE5ODdlMDNkNjJlMmE1MzZjMjk3ZGRhYzAyMmUwNjNlZTBkZTRlNDY5NWRlZDFmZGIyMjA5IgorICAgICAgICAgICIwMGEzYWMzZjg3ZDFiZTc1Zjk1OWMyOGI1NzhhNDNiMjU2NjQzY2RmZmY5MjE1OTVmZGZiZWFmNDEwYzJhZWQ5IgorICAgICAgICAgICJlNWU0N2UxZDE1MWFlMjhjNzY5OWFlZTIyNWE2NDViYzQyYjNiZWI1MmYwODM4N2VjNTU0ZDAyMDRkMjgzYzNiIgorICAgICAgICAgICJjY2JjY2EyMTZlZGFkOTRlYzY0ZjljMjBiMzQwNmFiNzhhNmM0YTRkYWUzZmE2MTdhMDBjNmFiMmY4ZTI0NzYyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS42IiwKKyAgICAgICAgICAiMTU3NDY5NzM0NGU5ODY4NWNkNmU2NWU0Njc4M2YwYjUiLAorICAgICAgICAgICIzYjdkNjdkMTNjZDNjMGZkMzA1YWQ0MDRkOGEzZGNkZTRhNDUxNzljMmQwYjg3MTE1ZDZkMDYwYzI0OWI4N2YzIgorICAgICAgICAgICI5ZTQ2M2I3NjRiNDIwN2M0OGE3NGNmY2UyNTMxZTgxODNkM2QwMTI1ODVjZTU3MzlkMTYyYzRlYTIyMzI0NDAyIgorICAgICAgICAgICJlYTJlNmVhZmI4YTU3M2ZjZmY0MDE1Yzk1YzQ1ZTRjYTdhYzUxYWUzYTA2ZjQyMWU2MDZkNjgzZjVlMTIyYjU1IgorICAgICAgICAgICI3OTE0OGE5YzQ2NmFkZWIwMjQyOGY0ODk2YTg2ZGY2M2JlNTg3ZGRkN2E2YThkZTcxNzZiZTRlN2ZmNGFhYTk5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS43IiwKKyAgICAgICAgICAiYmU0NmJlOGJkZDg1NDNkMzcwYmJiN2FjODM5ZjVlNjQ1M2YzMGNkODc1MmE0YjkyNjczMmM1OWU2MTA5MDQ0YiIKKyAgICAgICAgICAiZTNhMDc1NmM3MDI1YTIzMjgwZGYyZWQ3NjZiYTM5YWJiMjBiOTQ0YzA2NWZlMTQ4N2RlYTMxYjQ3MDhhNjg5YSIKKyAgICAgICAgICAiNTBiMjhkNTQyOTk0Y2JiYjNhNWJiOTQ2MGVlN2E5YzE1MzhiZGE3NTFhNTI4Yjc2NzBmOTE1NzhkNjY3M2UwOCIKKyAgICAgICAgICAiYWJjY2RmNWY0ZDhjMWViZWNmY2FjNzVjYzQyZGJiYjhjZGUzYzFiNDc0YjU1NmIzMmJiODQ4ZmMzMjdiYTZlMyIKKyAgICAgICAgICAiY2Y1Zjc3YjFlYmMwNGExOWYzYzhjMzliNmI4NDc3ODRlYWEzMjVhMmI2ZjMiLAorICAgICAgICAgICI5MWRlMmY5MDMyNDdiMmQxM2FiZTkzZGRkOTZkZmFlZjFiNGQxNzJiMDkwOTU4ZjBjYzM0ZmE5MjgzNWFkNjBjIgorICAgICAgICAgICI0NGI0MjdmZTAzMWNhZGJmOTJmZjFjZDAzODQxNDRjOWI1ZjI4ZjY0NWM2M2U4ZDcxNmJjZWMyZTA0M2JjMzk2IgorICAgICAgICAgICI1NjY0MTc4NWMyNmJhMzZiYTJhMTA5ZTM2NDRlYmZkOTYyZDdhMzE2OTE2YjNmMTM2NjIwMTNjYzBmMzdhZDhmIgorICAgICAgICAgICI5ZTBkOWVjOGI0YzhhZDVjNzUzMmNmYTA0NGFlZGM3Mzc4Nzc5NGMyOTg3OTdjOGE3ZTE0NDllYWQ2MTUwZGVkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS44IiwKKyAgICAgICAgICAiMGI3ZTA2NjNlNzE1ZWEzOGJjOTMwZWM5ZDhlMmEwMjlhYTFhNGM5NWU3YjIwMDQ3YWUxNTQ0ZDViMmQ4NDc2ZiIKKyAgICAgICAgICAiYzgwNTUzOWZiMGVmYWI3ZDVmZjEyYzM2ZDc2YTc5N2I3NWMwYjUzZmE5MjY1NDczZGFiNjgwYzI1NWQ1N2U5OSIKKyAgICAgICAgICAiYjZkOWZlMDhjZjFhNTczNDkxZTIxOTc4ZmFlOTUzOWNjMDU4ODQ2MzNhMWRkNWNiMjE1MzZmZDQyZGRkNzMxYyIKKyAgICAgICAgICAiYTc2YzM0NTc4MTNjZTFiYjU5YzIxZGQzMWJmMmFlM2JmZDdkMjBjNmM3MTJhOWRkNDM5NTFmMWIxOThkZWFmNyIKKyAgICAgICAgICAiNDEwOGVhZDIyOTI2ZDJiMDE5MWU1OWQ1ZjY3OWFkOTdjNzFlZGM2OWRlOTc5ODdlNTQzZTg3YTk2YTlmZWU3NyIKKyAgICAgICAgICAiZTNmMGVhOTU3YmQ0NmEiLAorICAgICAgICAgICI0ODUxMDk4YTg1ZTcwZGEzMzM5MmE5ZTkwYjM0NzZhNDhiYTBlMzJjZDZhZDNkYzFkZDkxZGE1N2U4OGRmYmM3IgorICAgICAgICAgICJiNjU3NGIwOGU4NzE2MDgwZTE1ZGY0MDU3OWM1NzA1ZDViZWY1ODRiMDhiMjYzZGJjNGYwZDE1OTU2ZmYxMTI1IgorICAgICAgICAgICJjNDhmODk1OTFlYmM5NDFkOWZlOGY5YTc4MGM4MmVhMzJiZjNlZmExNmNhYmJlZTU4MGZkNmI5NTc0MDgwZjY5IgorICAgICAgICAgICIwN2ZlYWZmODFkNDhjNDlhNmRlMjI0ODQ4MGYxZDg1MjM5ZTlhNDE4ZGQ1MzEwZGVmNzc2ZTA4ZjUwOWExNDc4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS45IiwKKyAgICAgICAgICAiMTM0MjMzYmFjZmExNmRjODRkOGZhNGJkYmI0NzkzZDFkYWMwN2Q2MDU0YmQwODM5NjFkYTY4Njc5Y2EzNzUzMyIKKyAgICAgICAgICAiNGYwOTIwYjlkZmI4YTY4ZWQ3N2YyN2ZkOTIxOTI4MTM2MWUwOWZhNjA4NGY5NmU2OTg4NWI0N2VhNzc1YWYwNiIKKyAgICAgICAgICAiNzcyZDY2MTJkNGQxNmY0YTVjYzRjZDBkMWViMjNiN2ExZjA5NTY0Yjg0MmVhMDdjYmRkZTYwNDUzYTJhYTRhYiIKKyAgICAgICAgICAiNjlkZGZlYjViMTNlOWYwOGNkMDcyZTViNzFjZWQzMzRlYTcwNGM3NDlmZjQ3MjdlYmUxMmMwMjkwZTAwYTg0MSIKKyAgICAgICAgICAiZDc0YjA2NTVjZmQ4MDY1ZDI4MjBmZGY4ZmRjMWJkNDU1ODgxODA4YmZmMGVjNzI3NjA3NDc1YmYwYjJiYzg5MyIKKyAgICAgICAgICAiNTk1ODMyOWI3NzhlZmNlNTYwZmMyNmMzYmI2ZTJkYzlhZWYxOGY5NjlmYmE2NDc0NWVkNGQ4NWIxNDc1N2JiOCIKKyAgICAgICAgICAiMzNlYWRiOWM1Y2IwZWFlZDA4ZDMwYjk1MTUwMDVhM2U4ODA5MWZjNWNkMmYzNmFkOTU1YjdjNmYyYjE5YmJhMyIKKyAgICAgICAgICAiNzRmZCIsCisgICAgICAgICAgIjNlMzdiNDJkYmVjMTI5ZGI4MWM1ZTJhMjIyZjMxZTgxYjkzN2ZmMDIyNDk1MTgxODM3MzAzNzhiNGMwOTJhYTciCisgICAgICAgICAgImYzYjIzNDU5NjExYTgyNGZjNTI3NTQ0MjFhMjdjY2U5MThiNjJhYTdiNDQ2MzhhMGMwODI3OTgwNTJhNTg4NDYiCisgICAgICAgICAgIjY4ODI1MTA2OTBhYzc3MzAyMzI4MDI0NmM4OTBmZjFmNjIyNzA0OWU2NjhiYzlkNmU0ODliNjk0NGEzNGU4ZjkiCisgICAgICAgICAgIjMwMDJiYmIwMGQ3NTJiNTc3Y2UzNTI1MzAwODJiZWNkMzA5YjBkYWNjZDFkNjhkMDZlMWRmNzEyMjFjNjIyNjkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjEwIiwKKyAgICAgICAgICAiMzVkYTNkMDIzNGJkNzRmY2Q3NmU4ZTY5NTI4ZjY1MWI4ODI3MWNiZjE2Mjg2OTM4YzJjNGEzN2Q0MTFkZThmNiIKKyAgICAgICAgICAiNzU3OGViOGIzZDIwYThmZDdkY2RlN2I2NTZmZTk2YTY4MDg3MzIyOGVkMGY5YTYyMGYxNTA1NDQyMzcyZjliMiIKKyAgICAgICAgICAiYjQxNjg0OTg3MjM0OTBmODExZjMxMTFmNWY3NzM4NjM0N2I0ODIyZWQ5ZDZiNTUzODM5MjIxNWNiNmM0ODY1YiIKKyAgICAgICAgICAiYjdiNWI3ZTI4NDJlZWEwZTkwMDFjYTBjZGY1ZDZiIiwKKyAgICAgICAgICAiMTJmZjJhYjVmYzgzZDY0OTU5N2M0N2JmZjMyOWI3ZjQ2MWRiYmJkYTAxZmI2YmFkMjY1NDNlNGRiY2Q2MGM1ZSIKKyAgICAgICAgICAiMmNkZWJmYjExMjc4NGE5NjRlMjdmMmEyZTdmZDA3ZWMzOTBhYWIxNDk0MzcwMzU4YTc1YjVlMWZhNGYxYWQ1MiIKKyAgICAgICAgICAiMDJlNmQ1NDZjMGYzMTVlODZmYWZmMWQyNWI5NDcyODJkYTMyZWFiNTZjMjJmMDZjOGE5ZDMyYWVmMjgxZDZmMCIKKyAgICAgICAgICAiYWE1NWQ3YWQzYmNkZmRiMjA5YTE2ZWY0NWNjNmY5NjgyZWFlOTYzY2JiMjEzYWRiN2ZhZDFiZWY0OWMwNzA0ZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuMTEiLAorICAgICAgICAgICI3NWZkYjA3MjczZjc1NGQxMTE2Zjk5N2FmMmQxMWE1MTJiOTRlOWUwNDgwMWIzZmM3MzkxMzBiNzQ3YjRiZTg3IgorICAgICAgICAgICI0NGQ3ZTdmOGEyOTdhMDg5ZDkwNTBjNWY1NGY4YTM5YWEzZjIiLAorICAgICAgICAgICIwN2ZmYzFiN2ExMGRkYWJhOTYwNWYwYTNkOTNjOGE1ZTRjMGI3NzU4NjEzOTA1MDczMWQ5Y2M5YjNjODNkMmI3IgorICAgICAgICAgICIzZmFmOWE0ZTI0ZDFjOGJiMGQ2MjNkZjEwZmM4NDA3ZDE1MTQ0OGZhNDNlZTY1ODFlN2IwYWM4MGQxNGFkZmE0IgorICAgICAgICAgICJmNmQyN2E3NjY3NTBiMjMxY2JjMWM1Y2ZkNjJkZjFiOTcyN2Q4Yjg3NDE0NjlmNjhlNTBhOWIzYmM3YWRlMTM3IgorICAgICAgICAgICJkYjA2NzQ3NjAzNzQyODU2ZDVlN2RkYjRlMTZhNWI0OWQ3MzY1ZGIyNzYzYmY1ZmRlYTA4M2Q4MWZhYzkyZDg3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS4xMiIsCisgICAgICAgICAgIjk2YzlmYWNlZmJhMmVkMzNlZDhiN2IzZDhiNmRmMjhmMmZhYjBkY2RkN2EzY2Q3YTdkZWRhMjU0NWVkNDQ3MGUiCisgICAgICAgICAgImQyNWI0NmQyMTY2ZWViYjdlMTQ3MTAxNzgzYjY0NWJhYzYyNjY0Yjg3MjcwMDlmMzVkMWVhNWZkYTVlN2MyOGQiCisgICAgICAgICAgIjZhZjZmZTkyMDQ2Y2E3MjRjYWI4NDI1YTUyYTA4NWY5YWM5MDgzZDRkNjkwYmJkZGRmZDBhODJkOTQ4ZjcwZDYiCisgICAgICAgICAgIjg1ZTI2YmI5ZjUyNzQwOGFiYzg0N2JmZjEyMDJkZWRmNmQyZmFjNmNmMzY4MmE1MTZiYTcyZjRmZTk3YjkwNDYiCisgICAgICAgICAgIjZhZjZlNTQzMTIzMTY1YjhhNjgzY2FiYTJmYTIzYTg2YWMwNjIxMzA2NWUxZWQ5YjRmNDlhZjRmZmY2ZDQ2YjMiCisgICAgICAgICAgIjZkMTMzZDhkYTJkZDI5ZDU1ZjlmMzIyYzQwNzg1ZGRjMjFjNDI2YzVlMGE2N2Q0MTRmNWFiOTcxYzQ0NjBmZjkiCisgICAgICAgICAgImIxMTQzMDVhOGFlN2U3Yjk1YzczMDM0ZThlOTNjMDM1MjlkZDUwYzk0ZjA3NjI3OTc3NWE1YTNhODBjNWQyNDgiCisgICAgICAgICAgIjZhMmQ1MTA4NDhiZGM5Yjg1MmFjMWQzMmNlYjdjMDQxYTA4ZjJmOGU2MiIsCisgICAgICAgICAgIjQ2ZDAzZmFlYzRhNzIzMTg2MjFlZjRkMGMxYmNhNzFhMmFlZWE3YTgxZGY4ZmViYjhiYTNmYjM1NDBkNzJkMTUiCisgICAgICAgICAgIjM0Yjk4MjY5MTZlODlmMjdkMzI1Njc2Y2NmNWEwYWExNjExMmRiMmQ5MzAzZTBlYmNlNGI4NTU4N2M1NWFjYTAiCisgICAgICAgICAgIjY4NTBkZTg0ZGVjMjEzZDExMzc0MDRhNWRlZTZjYTg4ZDkxYWUyOGI3YjUzNmM5MDIwMmJjNzcyNmRhNTA0MmEiCisgICAgICAgICAgIjg1MDhkM2IxM2NmYmFhZGNlZTEyNzhkMzVkMzAzYWNmZWU2ZTA3NDE5MDQ5MTFhNWYxODgxMGFkZDNlN2I4ZjYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjEzIiwKKyAgICAgICAgICAiYzRiNGM5OTY2ZTU2ZjQwYWZmNDcwODEzMWNkMzcxNDQyMTM0M2VkZTcwYzRkNDZkYjZlZmJlMWIxOWE5ZTNjMiIKKyAgICAgICAgICAiZTU4MTA2MDA4YTk4Mzg1OWNmOTQyYTMxOTc3NDY5NWEwYzk4YTk2M2UyZmU5ZDkzNzliYyIsCisgICAgICAgICAgImIxNmIxMGYyYmQ3ZWEwZjc2YTllZDJmZmNmM2VjMTBlZGNiODI0NjBmZTU1ODJhNzc2NGMwYzUwNTZlY2ZiMDkiCisgICAgICAgICAgIjcyMDY0OGQ1ZjE5YjNkZWFmMmFjYzk4NjQ2MGU3MTE0MjYxNTgzYTVmNGE5OTBlOTIyZmViNWI0Nzg5NzM0ZmQiCisgICAgICAgICAgImNjZTE1ZGRjODdjYWMzZjZjN2M5ZTllMjE5MjMxNWYwODQxZjQzZWE4NmRlYTlhOTM4MDUwOGIwNmM5Y2E1ZTkiCisgICAgICAgICAgImQ0YTY1MWQwMTIxNjYyN2M0NjZiZjBkNmFlNzQ0YmYzMGZkNzkxYTgyMTAzMzlmNTA1N2ZmODVjZWI4NGYxOTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjE0IiwKKyAgICAgICAgICAiYjgzOGE1ZDg4ODk1MGYxYjhlNGQ5NDdiYmE1MWFmZjliYjYwYjgzZDA5ZWQ5ZDk3OTY3YTc2OTU1ZWQxZGRmMCIKKyAgICAgICAgICAiNDgxNTIwYmNmNGYwOGJlYmJmODk5Y2M3YzNlZjBjMDRkNTAwMWIxZTJlODQ1ZmFmYzU4MzMwMGM5OGFjYTdhMCIKKyAgICAgICAgICAiM2U5MGE0MzRkZTc3ZmVmNzIwZGEzNjYzZjIxOTk4MjA4YTk0Zjg5NDc2N2QzZWQ4MTM5NmI3ZWZiMjg2ZTBmZiIKKyAgICAgICAgICAiN2RiNmVhOGZkYjRlNzI4MzQ2MDBmZTVmN2YxNTBhMDFiMWQ0YTA4YjVlYzllZTFmYmMxMDAxZDEyZDUyMzZkYiIKKyAgICAgICAgICAiZjA3MjdlN2VhMzYwNzhmM2ViYWM1MDQ2Yjc2NWI0ZTIzY2RjZWZkMTE1ZDYyYTUwMzQ0ZGJiZDc0MjhkNDhmZiIKKyAgICAgICAgICAiYzk0YjExZTIxYyIsCisgICAgICAgICAgImIxNTY4MWVlZjI5NmE2NmI5ZmNkNjYzMGY4OWM1NTgyNmEzODllMGMyZDNkNDc2YTBmOGExZTA4Y2JjYWNjNjYiCisgICAgICAgICAgIjAyYzcxNDQzOGYzMmYzNGUwMmMzNmU1YzBmMTY4YWIwMjg5MTdlOTA1MGZiYzg1MGYwY2Y2NWQ1ZWVkYjNiNTQiCisgICAgICAgICAgImJlNTQ5NWJiZjBmYWVlYjMyYmJlNWE4Zjg3YmJhY2RkMjU4NWZiOTA3YjEzMTg1YjAyNjE1NjYzZDIwMTFlZjIiCisgICAgICAgICAgIjNkMGFiMDRkYWQxZmZhNjc5YjUzMTUyYzljNDJiODQ2Mzk2ODRlYWVhZjY0NGU0ZmM2ZmYyZWM3ZDQ3YmE1YWMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA1LjE1IiwKKyAgICAgICAgICAiOWZkNTM5YzhhZDg2NDkyNGVlYzFkNjU1YzA3ZDFmMjgyNzBjZGIzMjZiNTcyYzQ2NjdlY2E2NDg4YzAzMzY1NyIKKyAgICAgICAgICAiZmYyOTI1NGI5MWYzMjE2ZTFjYWM5Nzk3NTNmMjIzYjE3OWVhNWY5ZWZjMjM2ZDQwMWQxYjlhM2MyMGViMmFmYyIKKyAgICAgICAgICAiOWJmY2ZkMDc5MmFjYzViMDBjOTgyOGE2NDUiLAorICAgICAgICAgICIzOGJmZGZkMzI3MmU0OGNmZWU2OGNlYjkxMzA0ZWI5MWVlMjVlNDgzNDAxZjMwZmUxMmQ1ZTQzNTE4ZTRiNzcxIgorICAgICAgICAgICIxNGExMmM4Yzc5OTJhZWU3ZDJlNzc0ZmZmOTFkOGZkMWNiN2M2YTJhZGY3OWI3YzhhYjkzZTgzNzRkYjc0YzI2IgorICAgICAgICAgICI5MDljNjU5YTk3Yzc2YTIyMmRmNGZjOGM3ZWY1MTk5MDgwZWFhZTJkMDMxY2E3NTFjNTAxMzI4OWRiNGVhZDc3IgorICAgICAgICAgICJiMjhiNzZhNGM0OTZhZDBlYjQyMmZjYTg4ZmM2ODRlNDJhZWE4OGZkMzNjMjU2NzUxYmEwNjY4MzRlNzdhMWUyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS4xNiIsCisgICAgICAgICAgIjFkZTgwNzQwOWQwYTYxYjAzMjJkZmVkNDk5ZThjMzMyNDFlYzg5Y2Q3ZDlmYzUiLAorICAgICAgICAgICI4YjY2NjRmODY5ZDc1NWM1ZDNlNmRmOTkyMmUyMjdjMTEwOTE4YTZmYmQ4OGMxYTJlMTI4OTUyM2FkYmJkOGFhIgorICAgICAgICAgICI0MzFkMDc4Njg1M2FiNTk2ZGQ1YjAwMTI0M2I1NGEyY2IxMGMzMTY2YmYwMDIzMzhmY2EyMDM0NWFlZGUxYjIyIgorICAgICAgICAgICJlYTFmYTNkMjQxYzg2Yzc2YmZjMDJmNGZjZWFlMTJjOGE5ZDdlNDRhZDYxNzE2NjVlODhmMTI4NTIyZGQ1MzVhIgorICAgICAgICAgICI5ZDY1MDA4ZjZhNzMyZDQwYWYyMDRlMjIwZjFmYWNkOTQyZTA5ZDE1MDk5ZmRjNTFiM2ExNDI2Y2IyZGQzMjkzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNS4xNyIsCisgICAgICAgICAgIjRiMmJjYjI2NzlhMTRjM2M0YzA2OWVkMDg5YTY1YWJhMjlmMjJiNjE3OGMwIiwKKyAgICAgICAgICAiMWM0NzgyOGVhNTNmYjY0MzZlOTU5NmIwY2U0N2Q5ZjM4YjVkZWIwYjE5N2MxYmM0NzRlMmU4MjI2NTcwY2MxYiIKKyAgICAgICAgICAiNzJmMjM5MzEyYWU3YzNjNjM4MmUxZDhjZGE3ZDRmMTJmZWJhZDcwYWZhZTVhY2JmMjQyOGFiYzA0NDIxYmI0ZSIKKyAgICAgICAgICAiMWU1OTkwMTExYjlhYzgzYzYyNDM1YzIxYWEyNWZkOWI0OTA3NTg1NDExZDI1M2JhOWI4Nzc4ZjYyNDA1M2Q0NiIKKyAgICAgICAgICAiZmU5NWQ3ZTIyY2EzOTM4MWM3NzkyZWZmNDY0MzhmYmMxNjVlZDc2MjljMmZjMWNlZjFiMzRkNzc3NjhhMjA1NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuMTgiLAorICAgICAgICAgICJlZjQ2YWU1MWUwMTU4Y2QwZWY5Yzc4ZDcxZTAwMTU2N2Q2NmFlM2M1ZTlhNjRmMjQ1NzE1YzdjMmFkOGVlYTBmIgorICAgICAgICAgICI5ZDMyMDAyMzA3MmZkYjBmYjg2YTQ1MjE3ZmQ3MTJjYzgwZTViOTQxNDdjNDVmZTAwYjY5MmNjZGExMTAyNTk4IgorICAgICAgICAgICI0MWIyYzdlNWMzZGNmZjU5NTZmMmE1OTZjZGE2OGViNzdmNGM4NTkwZDczNmI4ZmQ2MDY2NzczZWY2Zjk1YTM4IgorICAgICAgICAgICJjZDM4NGU5NDgzYTg5ZGMyYjZjMmU4NzQ1Yzk1YzEyZmE2NzJhMWJlY2ZiNjNlYWM5YjU1M2VkYThkMjkzNzU0IgorICAgICAgICAgICJlYzM5NDdlYWMwMjI4ZGUyNjMxNGI1OWI2Njk5NGNjNjBlODM2MGU3NWQzODc2Mjk4ZjhmOGE3ZDE0MWRhMDY0IgorICAgICAgICAgICJlNWNhMDI2YTk3M2UyOGYyNTQ3MzhjZWU2NjljNzIxYjAzNGNiNWY4ZTI0NGRhZGQ3Y2QxZTE1OWQ0NTFkNGJmIgorICAgICAgICAgICI2NTgwZjNlNjljZGMwMjcxMzgyZThkYzE0YmM3MzNhZjM4OTkyYzFjZDg4MmM3YjE1MGQyM2EwNjdiOWJjZjNjIgorICAgICAgICAgICJjZGFiNmIwZmJhMTMyYjRjMTQ0N2M4N2MzOTNmIiwKKyAgICAgICAgICAiOGMxZGUxNWFiODZjYmY1YmQ5MzE3Y2UyYjhmYzgyZjU3MjJkYjY5NjFjOWY1NTUxNDBmNzhlYmRhMjRlM2Y1MSIKKyAgICAgICAgICAiZmQ3MzAxYzFlNGZlMTJiNjk1N2MzMDE0NGZhMWUxMjcyNzQ2MDNkYzAyMDUxMTMwYjI1Mzg1ZmM4NjQ2ZWU5NiIKKyAgICAgICAgICAiYTc0NTUwZDJkNjNmODU4MTg1YmI5ODQ2NTJhMzQzMWQ1MzNkYTYwMTQ2MjJhNjRlMDY5MTY2MmE0ZjdjOWQ1OCIKKyAgICAgICAgICAiMzE5YmEzZjg1ZjE5MTgyNDc1ZTE1MDliYmYyMTNhZjAxMDEwYjRiOWY4MmU2NDc1MTFmYzk3YzZiN2M5N2U4ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuMTkiLAorICAgICAgICAgICJmODdiYjEyZGFhYWQ2MmM4NjRhYzNkNDQ0ZDUxNGVlYzZlNTliNjdjZDA4MjBkZmNiZGY4NTFlYTczODkxZjU4IgorICAgICAgICAgICJhOGJlNmU4NDNlZTg3NzNlNGRjMWM3ZDc0MmRhODJmZjE2YzEwMTFiOTk1NjZiOWYzZmQxN2Q2OGQ1YWM5OWNlIgorICAgICAgICAgICJmNWEzYTBmNzUzMTg3NjlkYzAxM2JiMDU1YmUxMzA1NmRmNDlhODM5YjgzOTUyNTEzOTliMjdhMGJiMzFjNTU0IgorICAgICAgICAgICJhZWRmM2Q5Yzc0ODJiNjYyMGM1ZDdjNjkxNGE1NjRkYjA0YTAwMDA0NTY5OWVlMWU1MDg4YTViNjhkODE0ZWZlIgorICAgICAgICAgICI5ZDEzMGRjMzRlMmJkOTc4NTExMzljNzM0NjA3NjViMWYyNjU0Njg2ZmVkZTljOWIzZTkyNDA5ZGIyZDQyYTMyIgorICAgICAgICAgICJiYTllMjBiY2FlYjJjNGY5ZmY5YjBlODM0Yjc0OTJhMmIxZDhjNjVjOGJhNDk4MzQyYWU3ZDFkOWZlNzQwNWMyIiwKKyAgICAgICAgICAiMjA3YTM0OGNkZjY4NGFhOGUxYTRhZjdiN2MyNTI3MDdjZTZmMWY5ZGIyMjkxZjJhOTVhMDcxNWQ5YzdmYzUxYSIKKyAgICAgICAgICAiYTIzMDExMGI1YjUxOGE5YzhmOTU4ZGQyMGM3NTI0ZDViNjUxMDZkNzQyMWJhOWZjZmI3ODkxNzg0MTJjMzY0MCIKKyAgICAgICAgICAiZjU0MGI4MWJiMzE4OTdkMjY0NWVjNzlkOGU1OTc1MDQ4ZTQ1MjI2MWExYzIwMDljZmVlZTA3MTVhMDFiZWVmZCIKKyAgICAgICAgICAiNzVlNzA0YjJhNmYwZjBhZTdlYTM2YzUzY2ZlMzZmNTdmMDM0ZTM4NTQ0OGZjYWFiMDhkY2ZmNDc3ZDM2ZmYxNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDUuMjAiLAorICAgICAgICAgICI0YzRiIiwKKyAgICAgICAgICAiMWNiNjg4MTI4M2RjZDE4NjNiYTc5ZGZiMjIzNTFiYzlhOGUwMzU4YjJmOGExZGUzZjkwNjVkOGNhODU5MzE0YSIKKyAgICAgICAgICAiZTExMjEzYTJjYzg3YjJmNjMyZWZhNjdkMjEwM2YzODIwMGI5MTkzZWI4ZDQ5OTgyMDk5YWZjNzQ0MjhmNGI0MSIKKyAgICAgICAgICAiMzE2ZjQ4NzhiM2Y2MDBiYzJmYjMwNDU4Y2M5YzJhMDM0YTA2OGU5OGQ1N2FlNzljZTNlMmZjODRiNmE3NDVmMCIKKyAgICAgICAgICAiMzdhNWRlYTJiOWRhNGU4ZGI0YWRhNjlmYjgyZDIwYTQxYmI4NDMwNzkzZWVmOTJhNGZkNjE4NmQxNzk2NjNjYiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJkNjMxMTQ1N2UxY2FmMTIyNDQzNjY5Nzk4M2M4NmRkMzM4MjA1ODYyZDJhMTA1YmFmNzEwMzQyOGZkODM1M2ExIgorICAgICAgIjliN2JhNDIyOGY3OGI0N2Y3OTA3MzU3MDM0YzUyZDg1OTdkYTJiNWQxM2RjNTM1YjgzNmM3NDEzMGEzNjQ4OTEiCisgICAgICAiOGQ0YTdhODM5OTBjMmUyODgxNmFlYzBmY2EwMWQxMDVjNmM2NTJlYzU3MzNkMDFmMDA1OGIyZGY1YWU2NzMzMyIKKyAgICAgICI0MDVhM2E1YjEyMjBhMjZhYzNkMTQyZjJiNGQ4MzdlYjczODZhNDBhNzRjYzNkMWU0ZmJjNjRmZDdkYTYzYzQxIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjVlYTYxMTc3NDQyZjg5OWViYWM1ZDA5NjAxYzVlZmMyMDY2YjQ0YTM2NmIwMDBmODNkNzRjYjk3ZDE2ZWQ2ZTUiCisgICAgICAiZjJlZjBmZjhiNWFkODExNTUzNDVmYzM3MzkxYTY4YTM0MDE3MDg1Mjc5MTQ0MzQxOGQzMWJmOTkyYTRhMTI4NiIKKyAgICAgICI2ZmU5ZmZjY2RlYmJiYmE2MzdlZTg4N2I3MTZjYWE5MmUyNDljZWQ2NTdlZWQ3MWY1Y2NkZDkxNjNmMzI2OTUyIgorICAgICAgIjVkNzg5ZjRiMzNjNDhhOTU3NjQ0MzZlYzMyNWU4Njg5NjkxYzI3MmQ5MGJkODg4ODk4NTEzNzJmYjhkY2I5IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjEiLAorICAgICAgICAgICI4Zjc1MGU2NTk1MWI1ZGU3NTgxNGIwYjc2NjMwZGM5ZjFjNjI1M2EwNTkwZWFjYjU1MTJhOGE0ZTFhOGJlODUyIgorICAgICAgICAgICI1ZDM2OTQxZmE5ZDA5MmY2YmI0NDIyYWE4YzBhZDY0MjNlYTI4YzEwY2FhNmU5NTRiNzk1NjlkNDRjODYwZjFjIgorICAgICAgICAgICI2NTgxZWIxN2E3NTQzZTdiZjdmZSIsCisgICAgICAgICAgImIxOGI1ZWM4OGQ0ZTI0YzkxNGI2NjVmZjlhMmM3NWY0ZTkxOTM3ZGY4YzE5OTU1OTQzZTQ1MWFkZGYzNDg0ZTQiCisgICAgICAgICAgIjk3OTc4ZDI2ZGEyMzFhZjE0ZDljMjkyN2VkMjEwYWZiZjlkZWUzMzI2N2FhNDU2ODQ2NDllODZmYjIyNWEwNTMiCisgICAgICAgICAgImI1NDU1MjkwYzMyMGUzZjY0MDYyM2M3NWNhNDIzNzIxZjI4MGI4ODc0NDI0OTdmMzJhOTBkNzhmNjQ0NDA0NzciCisgICAgICAgICAgImFkMDkyN2M3YmEwMWM0NGRhOWQ1YzI4M2E0MzhiZTBkYzU4MGEwMDUyOGZjNjVlMjA0ZDQyYTJkNGUyOTEzYzEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjIiLAorICAgICAgICAgICJiZGJmM2IzNjQwNzNmZTA0OGZiYWU1NWUzY2RlNjY4ZTg0Zjc1M2FiZmM3MTBiOGNkYjdiNmMwY2Y4MmRkNWI2IgorICAgICAgICAgICI3NGQyMWUyYjNlMzZiMWIwMzYwZGY4YmY3ZTYyMjdjOTJlMTVmM2Q3ODQiLAorICAgICAgICAgICI2NmFjZjA0M2JjNmFhZTgxYTRkNTJiNGU4YzQwMTI4YjI1YzZkMTBhOGM2OThjODNhZWQ3MWU4ZjM1ODM4OThiIgorICAgICAgICAgICJlOGY0YzliZWE0YjYzMTkwZTIxNTI2Y2FmODNhYjE0YTRmOGJlYmU4MTNhNWFiZWI5NTk1NjdiYjJmMDZjNWYxIgorICAgICAgICAgICIxZTQ2NGI1Y2RmN2IyYTEzMmQ0MjZkZGJlY2Y1ODU5MDBhMGQ4MDkyY2E1MmI2ZGMwYWJjMzVmMTQwOTQ2OTg5IgorICAgICAgICAgICI0NmUxY2QwZWNkNmJkNDFlMmM2Zjk2M2VlODljODIxOTNlY2M1ZmQ0NzYzMGQzNGFkMTZjYTI0NzllYWYwNjJkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4zIiwKKyAgICAgICAgICAiM2M1Yzc0YmM4ZmFlODA3YWU1OGJkMjEzZTYyNzJhYTM4NTc5MzE1NzVjMmFhMmJlNGJjYWU0ZDc5YWUwODdiNiIKKyAgICAgICAgICAiYjg2ZjkxNWRmOGMwOTZjMTIyZWRmYmRjNzk3ZjlkNzBiOTc2MTM5N2ZjZTNkM2UwYjhhNmYyNTZkYmM2NjA1YiIKKyAgICAgICAgICAiYTk0OGQ1ZmJlNmY1MjQ1YzAyOTVjZTVkZDczYmY3NDM2NTE3ZjdjNDIyMmQyY2ZkODU0MmU3YTEwMGNmMDUxMyIKKyAgICAgICAgICAiMDRhMWFiNmZlMDA1ZGEwNzdiNjI4NzhmZDBiNzQxZTYyNzFlMGQzNDZiMjA3MjNiN2UwMGIzYjgxOTRlMWE0NiIKKyAgICAgICAgICAiMGM2YmYyNTYwMDc2ODI5MGMxZGNhYTJmNDFiOTQxYTY0ZmQ5MDIxNGQ1MTY2ZDc4YWFiYmFmN2U0MWQyNGZmNiIKKyAgICAgICAgICAiMzZjOTc2MmZkODkyMTk5ZDJjZmQ5ZGVkYTUwMDUxZTAwMWI5ZmQzZTVlMjIyN2FlY2IxNWMxYjMxMzcxYjM1YSIKKyAgICAgICAgICAiNzhiM2I4Yjc2MzYzNzZmMTM0NTYyYjRlNTJmNDUxYjc0MWExOWFjOTMyNTY5ZmYzMDQxZmFmMTIyNzlmOTAiLAorICAgICAgICAgICI1ZTg5N2Y4NzliYTQ2ZjY3MTEyY2Q3YzdjNmZiMjczN2FkNzkzYTg3Mjg3OTA1MmE4ODQ1N2FmNWU5ZDU5OTU5IgorICAgICAgICAgICJhODQ4MTM0YTY4MjRkZTNhNjc0ZjcyYTkwNjg3OWU5NWJlMGVkODdlYTlmOTc0YTdhMDdiYTlhZGJlYzJmYmZhIgorICAgICAgICAgICIwMjk0Mzc4YjE0ZTczNWY1NWY0MDNjYTA1MzA4NGY1MWQzZDM0MmQ4YWY5YzY0YjRkMTU0YWQ5YWEzYzZiY2FhIgorICAgICAgICAgICJjZTFmMWJiZTYyZWViNWQwZTZjNGMwMzA5M2MyYWYwZjA3ODg4YjhiYmVmYTc5NDAwMzIzMTMzZjc3NmEzMjEzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi40IiwKKyAgICAgICAgICAiNDI1NjQ2NjUwZDZiMzc5ZTE2ZTE1YmYzODUzZGRjOWQ0NDRmNDQ1MzVjNDkzYTM3MDNiMDAxNjNhZjM0NzZkZiIKKyAgICAgICAgICAiMzcyYTViMjhmMzM0YzA4NjAzMTNlODEzNmRlNjA4MjkxYjMzNzgzODFiOWUyMWViZWYyNDgyNWQxMiIsCisgICAgICAgICAgImE2YTBjYjAyNDgxYWYyNDhhYmFlODljZGY0MTYxZjY3NzZkNDcxMDhmMThlYzZlODQzN2MyMjRhMTRmNDUyYWQiCisgICAgICAgICAgImExMzY1MjBmMGZlMDEwYTczNDVhZjE5NzFhMDJlNGJjZjhjOThiMjZjNWI4YzYwMDNkZTRkMmI0MDcyZDhkZWYiCisgICAgICAgICAgIjFlMTkyM2Q5Y2NlMGE2NzUxNDFkMzc4NzNlNTk0OGVhNmM4YTc4MGVkMmE1ZWNjMmJhOWE4MTIwNmM3ZWNjYzgiCisgICAgICAgICAgIjBlYWMwMjZkYjdkNzYwMjIzYWEyMzg3YTE4MmU5OGQ2NmYxZTIzZGZlYWYzNTE1Y2VlNGZhMWFiZDQ2NGI3NjgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjUiLAorICAgICAgICAgICJmNDdkODdiZmQ0ODhhZjViMjRkYjM0YWQwYzEzMWVmY2ExMGNkZDFhYWVmZmJlNmUzNjQ4NDcyMmVkNjgwOWIxIgorICAgICAgICAgICJkNTdhMTgzYmEwM2Q1ZTQwNWQxMjU2YjI1MDVlY2I4NGRiMzVkZmE5NGRlODVkYzJhMTU4OGI2ZTgzMTI0Y2Y4IgorICAgICAgICAgICI2YzVlOTE2Njg2MGQ0ZGQ0NzE3MDQzMmIwOGFlNmE2ZTMwODcxMDg2ZmEiLAorICAgICAgICAgICI2YzAwOGZmMGUxMjhmY2VjMjY1ZjM3OWViMDgzZGI1MDYyNGEyNzk4ZjkzMzY3YzZkMTZlNWQ5NWE5ODlmNGYxIgorICAgICAgICAgICJlZWQwY2M0Y2Q4NjFjNmE1MjRmMmI5ZmEzMGU4ODZmMTQ3Nzc0MWQ3ZWE4YTYwZGYxNDBhZWNmM2E2Y2NmMDA0IgorICAgICAgICAgICIzZGFiOTJjYmU3Mjk1M2NiMWMxODQxZTA1OTE4ZWNlZDViMGY2OTRhZjlhOThlYzdmNGUyMjg2ZDIzM2RmZDM1IgorICAgICAgICAgICIxMzJhMGI1ODRiZjBlMGRjYmYwNTExOWNlMmUzYTRkODEzY2YwMjhmZWM0OGMzNGExODgxZWJiNTMxY2E0ODliIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi42IiwKKyAgICAgICAgICAiMDMxODc4ZDU4OGVlIiwKKyAgICAgICAgICAiY2MxNTRlMWFmNzEzZjJmOTVlMTZmNDExMTc1ZDk4MzZhZDZkOGJiZGM4Zjk4Y2YwNWNmYTAwNTgyMzVkMWZkZCIKKyAgICAgICAgICAiZTA0MDgyNzY0YzI5ZGNkY2M1OWViZTI2NTc4YmY5ZThhZDZhNWFhODZiOWQ2MjkxNGI0Y2Y2OTZhOGVjMmRhOCIKKyAgICAgICAgICAiNzlmOGZhNDIzMTQ2MzEzMmVhZDdiYjNiZTc1MGFlMGM1NjI4YTM5NmI3MGFkZmEyN2I0MDM0MjNiMTAwMThmOSIKKyAgICAgICAgICAiZDI0ZmVhMzM3MDMwMTQ3ZmJmYWExNWQ0NzUzMmM5MjU3YzJjN2Y1NDFiNWI5NzRkMTVkZDFlM2ZkMmUyMGE2OSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDYuNyIsCisgICAgICAgICAgIjI3MjYzODUyZWFhOTYwYmY3NjcxODc2ZmM3OTAwZjg5OGVhODJlYjJiMGZjNDE4NTY1ZmRhZTYyZjdkOWVjNGMiCisgICAgICAgICAgImUyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0NDAiCisgICAgICAgICAgIjExNWQzZTViM2RlYjFiYTFiZDkwY2ExMjg2ZmQxMDBjYWY5YmU0ODVhNDRhMzg0NTAwNTcxODEwNGJiZGZjNWUiCisgICAgICAgICAgIjc4MWE5ZTM3ZDY3YWZmZTU1NmRjYTEwZjhlZmEzOWY5Y2I2MzkyYTcyZTNmMjgyNTgxMWEyYzA1YWY4NGFmOWIiCisgICAgICAgICAgImU3ZjM3MWRiZDQxMDZkOWYiLAorICAgICAgICAgICI5NDc5OGQxNzk0NzhiZmUwNmQ5NmEzNGFjOTliYzlkNWRlMzVkYzQ2OTdhYzNmNzBlOWIzNGM5NWUyMmIxYzMwIgorICAgICAgICAgICJkMTQyNmJlMzUwOGU2MjJjMWExOGFiM2M0NjcyZmUzZGUzNDBlYjUxMGZiOTg3YjUzYWU5M2E1OWFmNmIwMGJiIgorICAgICAgICAgICJhZWUwZTgyNzA4ZTZjNmFlODJjODQ1NTMyNDAxNzgzNmRiMTc2NjBkMDY5ZDgwMjcxZTFlYTk5ODExNjNiMTRiIgorICAgICAgICAgICI2Njg3NmRmZDEyOGYwOWNkMmUzZDZhMzZiNzNjM2I0MGFkOGUxMzI0ODQ5MDI5YzhiOGUzYzg4OTRlYmZhMTk0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi44IiwKKyAgICAgICAgICAiYTRmYjIxMDNkMGJlMjkwZTk5NjAxNmE0Mzk0NjJlNmJiZGIwNzI0ZDg2Y2Q1MTg1OTEzM2NhM2QzOWRhYjc3ZCIKKyAgICAgICAgICAiYTIwNjlkODI4MzU4OTYzODdjY2YzZGY1Y2RkN2E1NzkzZjIyM2YzZDkyM2VhNDYzNTEzNTMxYWRhNjY3YWJmZSIKKyAgICAgICAgICAiZjc1Mzk4YzdhNGJjNmVmYWRkNGVkZWVmMzVhYjhmNTQwMWUwZGFmN2MyZmNhMWNkYmJlZWQzYmNkZDA5MzNmZiIKKyAgICAgICAgICAiM2VlNGM1ZTI4OGFiZGYyMTllMzZhM2VlNmYyMTA4NDFhMDNjOWUzZTRkYWMxODEyMjQ4MmVmODVmNDlmZGFjZCIKKyAgICAgICAgICAiYzUwMmQyNzlmMTU3N2JlNzdhNGUwMGI3YzdmMTdiYTVkYTZiMjhjMDFhMDdhODYzZGZiMjFjMTU2ZGEzMjAwMSIKKyAgICAgICAgICAiZjUzZDdlYTNmY2I4Yzk1NTRmMDc1NDU5YTY3Y2MzYzRlNjlhNmEzNzE3ODc4NzQ2M2NlYmNhZWRhNjQ5MGE4ZiIKKyAgICAgICAgICAiODBiMzkyZGVmOWYyMmE0ZiIsCisgICAgICAgICAgIjcyNjY3MGM5NTEwYjU4MzU0YzhhZjMyYjQxZGI4ZjY5MjEwN2MwYzg3NmU1NTI3M2E4MjBhMGMzMGQzOTI0NDYiCisgICAgICAgICAgIjBmYTViYzMzZGZlMTlkNzJlNTYzNDkyODJhODBmYjEyYThmYTllYTRhNWRhNjljNTgyZDdjNjQxMjJhOGE3OTEiCisgICAgICAgICAgImIzMjEyYzM5ZTAyODI2NWI4NDU0ZGY3MTViYTMwYjAwM2QxMjkxNjljZjEyNTExYzBkM2U3YWFlY2VmMzc5MmMiCisgICAgICAgICAgImYxODU2NDRjZjgwZTQ0ODE0N2IxYTc5NjFhZjM4NDQxN2QxODJjNmY4NTUyNDZkYWQ1Yjg5M2Q5YTc2ODBlYmMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjkiLAorICAgICAgICAgICJlNTUwNmUwNGIxOTE4NDEwNzY4NTg3MjVhOWZkZDhmOTc0NWYyNDJlOTk0OTRhNDIzZjgwMzY3NDc0MjcxZGNlIgorICAgICAgICAgICI5NWE5OWEyZjcxMTM0ZjM5ZmIzZjJlNDdjNmEwYjJmYjZmNjE1YjBkZWU2ZGYzM2IyOGY4YjBkNDFlOTJkMTQyIgorICAgICAgICAgICJiMTQ2ZThjZGU5YjExZDZlYzFkMzdkNzFmZDgyYjcxOWNlMWFkZGI4MjFjYTRjYWZiZDJhYTRmMWU2MTFhMjU5IgorICAgICAgICAgICJlNWYwNWI1MzFmYTExZTNiNjcxYjdhNWIxMGI0YzgxNTZjMjViMGE1OWVjNmUxNThmNmQzNDZkODQ4MDRmY2Y5IgorICAgICAgICAgICIyYTcyNzY4ZjRlYmM5MzVlZWU1Y2ZlYzdmNmU2ZTgzY2JlMTU4YTEzMjc1ZTg0MTgzYTk0ZDcyNGIwZTk2Njk2IiwKKyAgICAgICAgICAiMzQyMjBlZGFmZDRhYzg4NGI5ZDAwZmJiZmI3MWE0YTZjNGQ0YjcxYzE5ODQyMjA1MDc5OWQwYzBmZDU0ZTkwOSIKKyAgICAgICAgICAiYTRjYWQyMjk4ZmFhYjMzNDdhMGFmMGQyN2Q1MzAxYTg4NjAwOWNmNWM2ZjEyNWRmYzExMzFhY2UzODhiYjIxNCIKKyAgICAgICAgICAiYzI4NDQ0MjBjMDIzZGJjOGI0YTk2NjExYjNiMzkzYWNjMzgzOTQ5MGZjNGVlMmQzNjliOGMzYzg3NjU3MjI4MyIKKyAgICAgICAgICAiZWYzNGQ3MGM2NDAzZWY5ZTJlODdhMjc2YjIzNTcyZWQ4MmUyNDAyMjY3YzI3MzdmNzViYjRhMjdkM2NmMTZkMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDYuMTAiLAorICAgICAgICAgICI4ZmM5Y2ZhNzIxZGZhMDliYTA3MjllZjkxODllNTQyN2IzZTczOGM1YWUzOGEyNjU3ZjdjN2UzMTRhNDljYWViIgorICAgICAgICAgICJhMGZjOWQ0NTQwZjVmOGQ2YzA0NzUzNjAwZWY2YjljMzM5NjU0MGY4NmMxMTc1YjYwYmY0MGUzZDhjODQ1MTM1IgorICAgICAgICAgICI1ZTEzNzRmNDMwNDNjMGM2YWE0MWQzNzk2YmQ4Mjc5YjNjMzA2MmIzNzQ5OTZiN2VhZWRkNGRiMGFlZThjOTRiIgorICAgICAgICAgICI5M2IxNzFmYzQxMWQ0ZGZjMzcyOGQwMjMxNTU4Y2ZjOGZhNDVmOTUxYjM1YzlkNDYxMjE4YTY1MGM3MDJjZWE5IgorICAgICAgICAgICIzYmIzZmExNDM2ZWQ0NDVjOTUyNDlkYzIyMDU0NzEwMWI5YTkzZWIwMTRjZDg0M2ZmMzljZTRjOTZmODJhMzlmIgorICAgICAgICAgICI4NjNhNGMyZTFmYTkiLAorICAgICAgICAgICJhMjZlN2RiZDVkZmUwOGM3MmJkODBkNWUyNjY4ZDVkNzJhYmIxYTBjMDQyMGZmMGVhODZhOWM3NjA4YzQ3MGUxIgorICAgICAgICAgICJjM2Y3MmViZjQ0NWQxMjE4NzE4MTQxNTU1OGRkMDNlYmU0MDdhYTA2YjUxNjQ3YmFmZTBjODVmM2QzYjhkY2U5IgorICAgICAgICAgICIwY2ViZjBhMGVlY2JhYzEyMjhlNzg1ODIwYzRmOTA5ZDJlZjM5MmYwMzExNzU2MWVjMzhlYjBkODhiMDIzMjcyIgorICAgICAgICAgICJhNDI4NjM1MTYyMGYyMTA0M2NjYWY3NTAzNjg0MDAyOTU3ZWY3OWJjZmY5ZDFjMjAxYzQyZTA5NjBiZDk2OTc5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4xMSIsCisgICAgICAgICAgIjk2MWZlMzRhMjEyY2IwZTZmNmRjZGVjZjFhNGNiN2IyMTQzOTBhNzdmNDRkM2EzYjNlZTJiMTJmMWYwZWUzMTQiCisgICAgICAgICAgIjJlOWVhZjcwODk1NWVjODM3ZWExZDBkMjk1NGU2Y2U5NTBmMzRjODczMDU0OGYyZTA5NWQ1ZGJiOTM4YjE5MGIiCisgICAgICAgICAgIjczOGJmZjgxNzE5MzAyYjY3OThiNzY4YjBiYmRkMmUyYjk2NzJkODkxNDA1Yzc3MWE3NzkwMmZkNTQyNzQyNWEiCisgICAgICAgICAgImYwNGUyMWI5MWM1ZjM5MzcyMDQxZTQ5NGQ5YmU2MmRlY2UzMWJkOGEyNjJmNmRkYjg0OWYwNjhhYTk5ZjdkNjIiCisgICAgICAgICAgIjYyZTE4NGFiOWNiMTYyMjQ0N2Q2MmZmNjcxMDkyMDMwNzA3MWMyNzJiZTBiYjM3ZjBlZWY2NDVmOTllYWI1MWIiCisgICAgICAgICAgIjBiY2JiYjY0ODdkOGQyYjQ5ZjNmMjNlMGFhOTE4Yzg5YWM4NTU2NTNlMWNjYzAwNTkxNTgwZTBjZTFlMzg3NzkiCisgICAgICAgICAgImMwNGJlN2RmMWM2NjYzYWNkOTkzN2U0NzJiM2ViNmQ0YjcwYTA4MGRlOGUwMzU0OGY1MTI0NWJlN2NlMGI4NmQiCisgICAgICAgICAgImVlYzE3NmUwMGU1NGJkNjNiZDViYjAyZmM5NTQiLAorICAgICAgICAgICI5OGFjNDc3MzU5MTU5ZTkzZTFiMzM2ZWUwNTYwNmQ0MmI3ZTEyNTBkMTI5NTYwYzBkMDk1ZjhmOGVhM2MwNDc0IgorICAgICAgICAgICIzMmE5OWMxZWM0YmM4ODdkN2YwN2Y2MWRmMTZmMGMwOWY3MTViNzA1Mzg4YmI4YTYxMTg3MzQ2ZThkN2IwN2VhIgorICAgICAgICAgICJiMmZjMDVkYjg5ZTAzMDA5NDRhZTM3NzNlNDRjYjkyYzVjZjBmNGZiZTAxYTA1YWQ3OWJmYWEyNDdmODNlZDFlIgorICAgICAgICAgICJkYTQ4YmFhZmQxZTE4MDA3OGNhOGQzMjFkNTBiNDI1Nzg3ZjAxMjQzYTQ5MzM3NGU4NGY1Y2Q1NmI3NTNkN2FjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4xMiIsCisgICAgICAgICAgIjk2ZmYwYTVlY2FjOTUxMTZiZDczNDM3OTVhZjgzYzg3ZWQ5ZjgzNDVkMDNmNmYzMjJmMjk1NDkzZjQwYjE5YmEiCisgICAgICAgICAgIjhmZmUyYzg5OGM3YjIwNjYyMWY3MmUwMmM3ZjBmMDBmOWYxYzUyM2Q3M2QzMzVhMjZjZWRkYzczOThiN2NhMjAiCisgICAgICAgICAgIjA5Y2FjYmIxODI4M2I3NmIyODE1ZDFlOTAxMDAwOTZlOTViODg1MzBmMWM0OGMzOTYxYzQzNWJjZTAyODlmZjYiCisgICAgICAgICAgIjJlMjFiZjRkM2VjODk5Yzg3ZTE0YzhlYWQ3OTIyZTc5NWUzZTZmNDE4MGMwODk5ZWEwIiwKKyAgICAgICAgICAiN2M3YjAxNTdmNmE1MDkwOTUxMDk2MzI4MmYwMDExMWVlYTcwMTkzNzU0ZTQyN2EwMmIzNDZmZWI2ODJmNGM3MSIKKyAgICAgICAgICAiODdiYjM4MWQzMWQyM2I5NDc2ODg0MzI0NWFhZDUzNjFmY2E0MmQ4YjI4NGM4ZDkyZTZmYjk5MmZhNzcxMmZhNSIKKyAgICAgICAgICAiYTkzMTU1ZGYwMjBkMzAwYTNiZjg5ODg2NjY4Y2YzN2JkMTNiNTUwYWRiMmQyYTg2YzY5ZGFhYWNkYzUwMzBkYyIKKyAgICAgICAgICAiODQzNDNjOGI0OTM0ZjAzY2RjMGVlZjBmNmMxZWE3ZWMwOTYyMDA3OTAzYjQ0ODIxN2RlOTNiNzUwNzU0OWIyZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDYuMTMiLAorICAgICAgICAgICIzMmExMmUwYzY3MGVkMjE1YWU1NDQ5YTA5MTdhZTk1ZTIzZGI4MDNhZDI4YTE4NDJlZGZhOTBiYzQwNWRkODlhIgorICAgICAgICAgICIxYjQ2OGFjZWJkMDhmZTljNjkzZDhmYjEwNWU4MjIyZWI1N2Y3OWU0YjIyNzAwZTA3ZjI3NmQ0YWVjYzdhMTVmIgorICAgICAgICAgICJiNzQ3MzMwNjU2MjdiODc5YjAxNmVlZDRhYjRhMWMiLAorICAgICAgICAgICI4NWI5MGViODI2NTE0YTBlYzBmYzFiZGMzNDg2YThkYzhiMGYyNjNlZmU1N2NmMTc1MGE0MmE2YjViOTk3MjY0IgorICAgICAgICAgICJmYTYxNzg2NDgzN2U2MzlmNDVkOTIwNTg0MWNkYzEzNGFiZWFjZjZlZTBlY2RhMDliOThkNzY5ZjUxZjM5NDdhIgorICAgICAgICAgICIzMzU4N2ZmMGM4ZGQwMWI3ZjZiMjRhMmZiZjI5YzlmZmY3MzdlZWU1NmFkYTJjZWI3NDZiMDI1ZDk1NjUyMmQ5IgorICAgICAgICAgICIyMGQxMmRkZDEzZGJhMDhiMjBlMWVlZTEzYThiMjU4MGU1OTJjMzRlMzkzMzM3NjYxMTVhMjNiOWQwMGUyYTQyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4xNCIsCisgICAgICAgICAgImJiZGE3M2NiZTJiZmY3ZmY1MzYyZWJlOTMyYzBhMGRkNjhhYzg0ZWU5OThmYmY1OWEyYTkyNjU1MjAzMjMxNjMiCisgICAgICAgICAgImIzMGQ5ZTcwMDhiOTRiMGMwZWJjNWY2YzRjOTczYzEzZmYxNTNkMzE2OTBjM2M5NWFiMjMxZjBjOWVjOTk4ZmIiCisgICAgICAgICAgImZjYWRjMjhiMmQ3ZjA2NTA3ZTE3ZDIxZTgyZGEiLAorICAgICAgICAgICIyNmY5NTJiNjU3ZmRiOWExMWRjODQzNzkwYzlkMmE2YTUxYzk3NjEwMWVmYjgyZDA1MzYwNjc2MmFiYTMzYWY2IgorICAgICAgICAgICIyODBiZGUzODE1ZTA4NzRkNjA3ODc1Mzg0MmU1YjFjOTBjZjc5OTEyMjBmY2ZhNjIyODQ5NDM2OTBjMzAxZTlmIgorICAgICAgICAgICJjNmU0NzlhZjY4Yjk2OTQ3ODViZTQwZDQ2OTg2YTYyYTEyMWFhOWFkMGRlOTY5NTIxZjFjYjhlN2M0YmQ3MGM3IgorICAgICAgICAgICJjOGNkN2E5ZDEzNTRlN2QwYWEwZDg1ZDZkN2FhMDBlNDY0OTAyNmQ2ZjA3MGY4YjNjMjdjOTg1NTZiZWFhNGMwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4xNSIsCisgICAgICAgICAgIjJjMzI1ZGRhZjY1MjZhMWVhMzUxOGVlNWU1NDA3ZjAzOTBlMGViYWFhNWY0NzJhMWU5YWI0NmY3NDZkNzFiYTIiCisgICAgICAgICAgImUyMTdmYWE4MTc5OWJmMzU4Zjk1ZTk4MzA4MjcwYjE4YTAwMTk5MjlhMjg4ZDBjOTU2ZTBiZjE3YzUxOThjZWIiCisgICAgICAgICAgIjJjZDlmZTQwZDcwMmE0NGU1NjQ1ZWNhNWI0MzlhYmNhN2IyYzZmOTVhY2MzYzJjMzY1MTk1Yzc5NWU5MWQ2M2IiCisgICAgICAgICAgIjNjMDkzMzI0NGZmMTI1NjNhZjY2MjJhNDBjNzQxNWRiNjBhNzhkY2EwMjYwMjUxNDM5NTM4ZDM4YWEzODI4OWQiCisgICAgICAgICAgIjkyODg4NmFiMTI4NzM2YTZhODczOWMxNDU1YzQ4NDlmMmQ1NDU2NDUzNzkzIiwKKyAgICAgICAgICAiNmQxZjIwM2RjM2ZmYTdhMzM0ZDMxYjlhNzVlMDEyNTgxYjhkNjJiMmJmNzM4MDBiZTUxZDAyNjUzMzk5ODMxOCIKKyAgICAgICAgICAiYzBjYWM5MmEwMmQ0NmQ3NTliZjgwYTQxZGFhMGE2YTI5ZjRmYTBiYjYwNjY0Y2FjYWRlMjRhNjVjYjQ3NjUxMSIKKyAgICAgICAgICAiMDliZWVjODIzMTkxOTUyNWQxNDczMjY4NzQ1NTc4ZGI5ZTMwNjQxMDhhZTQ2YTQ4NzBmMTgwNjY3ODliMDM2NiIKKyAgICAgICAgICAiYTdkMGNlMzdlMDMwYjU4OTQ2ZWM4YzFhMTQxMTU0ZGIwZTI2MWJlZjhiYWYyZTlmNjVmY2QxNmI3ZDU3OTdiNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDYuMTYiLAorICAgICAgICAgICIyOTg1ZThiNTUwODEyZmI2NmMxOGY4MGU2ZjA5MmE5NDVkMDkxNTgzODYxYjYyNWQxZSIsCisgICAgICAgICAgIjJlODQzMDEzY2Q1ZTc5NWUyMTY2YzhlOTFiMDZjMzEzMWRjM2E1ZTEyMTM2ZDcxNjBmZmQxMWJiZWZjZjZhYjYiCisgICAgICAgICAgIjQwZTA1ZDc2ZTBjNjFlZDMwNmY2MDg2YmJiNTY3Y2E4N2U0MGM2OTI0ZDVjODRhNmNlMjhhODM5NTBiZDRiODQiCisgICAgICAgICAgImUyN2ZjNTA2OWZkMDYyNGQ1MGVhYzI0YTk0MTFiNWY3Njc4NWQ5ZGI1ZGEzMGY0MjU2OTViMDE5Yjg0Y2RiYjgiCisgICAgICAgICAgIjI1YmQ0NmU3MzUyZTA4ZjExNGM4N2IwNjZmZTQzZDEwNTZhMmM2MTBjZWE3ZTNkM2RjOThiZjQ0OTdlYjRmMTMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjE3IiwKKyAgICAgICAgICAiNzc3ODhlODM4YjgzNGU4ZjRkMDQ1YWE4OTRiOTBhYmI4NTk0MGNmYzU4ZDc3MjVlN2YzNzNkYTU1NDcxMzdjNiIKKyAgICAgICAgICAiMGJlYTc1MWUwMTQyYmY5YTZmNDY0OWFlYjU0NmVkNTYwY2M0ZWExNTYyZDRhNWZhM2ViMWIxMTQ3N2EzMDUxZSIKKyAgICAgICAgICAiMjRjNjA2YjhhNzFjMWE3NzRiZGNmMWE1MzEwZmVkNTU1OTIzNzMwZmE4YWY0YzE1ODAwZDM2MmIzN2FkZjE0ZiIKKyAgICAgICAgICAiN2FmY2U3OGVmYTZiZDg5MzU2M2VmZTBiM2I4MjhlYmQ0OTlmMTJhMmZlMzMyYmZlNDZkY2JiMzE0YmJkYmY2OSIKKyAgICAgICAgICAiMDg3ZTJhNjY1ZGYxMTA4MzVkZTU1ZDYxZTVjMjAyNWZkOGRiIiwKKyAgICAgICAgICAiOGU1ZjMzNTNjNDljYmJiMmVhNjk2YWJiNTc0MGJhZTAxNWVmZmQ5NTBkNTYwNzEzNzYwNWExMDBjNGE1M2YxYiIKKyAgICAgICAgICAiOTUxNzZjYWYzNDlmNGZkNTg4YWVkZGRjZjUwNjBjY2I3MjQ3OGNmYjA5ODU2MmYzNGQ4ZjhlYmE0NDZhMzg0NyIKKyAgICAgICAgICAiNTY1YTdiODk1NWFkOWUwYzZlYjY3MDk5ZTFhNDZjM2ViMmQ0OWQ5MDkwYWU1ZjYzZThhMDhiNmU4ZjIxZjAwMyIKKyAgICAgICAgICAiZTQ1MWQyNTBmZmM1YTc5MGQ2NmEwZTJlM2UyOGE2MzM5ZmU5MWQxMTI5MjFmNTVkMTIzMDMwNmZhZDVjMDE5MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDYuMTgiLAorICAgICAgICAgICIxZDU5OWQ3NjJjZDU0ZGY3MGYxYTA5ODNiYzNlYTJiYmNhNmZjYmJkMTYyNjAzYmE4MTU2MTA3N2ZkOTI4NDkyIgorICAgICAgICAgICI1Y2YxZjFiMDhiZWExZTcwYmM1OTVkZjBiMzQzYjgzYjljZjNkNjM0Zjk1ZTM3ZThkMWM1ODVmYWIxOTkiLAorICAgICAgICAgICI3MTc0OTdhNGU2MGRiZmZhMTk2ZWZmNzU4ZTkwMWNlMWZlNmUyYmM3ZTFkNTNhM2RjZjYyMjU2NzFhZjE0NmM1IgorICAgICAgICAgICJkZWUyMDBhODE0ZjQ4OThkMTZhOWI1ZjUwOGRjOWZkZTRkNjQwNzBlNTVhZTNiMWZkZjc5MTlmNDJiN2NmZmI3IgorICAgICAgICAgICJlOTI4YzRjYWViNTUyZGM2ZmQwODE4MzRiMmRjMmZlZDA3ZTdlNjI3ZDM0YjM5MTBjYTcxM2JmNDE1NGVmZjk5IgorICAgICAgICAgICI5NjU3MzYxNTE4ZmNlNWE4ZjY0MmRjOWExOGE2NmVkZTIyMTkwZjYwYWFmOTU4ZDYyNDZiMDBhMDMyYzM5ODQxIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNi4xOSIsCisgICAgICAgICAgImRhNTEwMDg2NjBiNjNiODc2N2U2NWYxMmM2MzA4ZWMxOGVkOTU3NWE0MjZiYzVmYmU2NjAxMGVjM2YwMTE3NWYiCisgICAgICAgICAgImZhNTc0MWVhY2NkZGIwMmZjZTdiMmVmNzc4NDQ0MGQ3MmQzNzUyMjAzZjUzNGU1MmZjZjYyNmE4YzU5NjUxM2YiCisgICAgICAgICAgIjQxOTA2NGJiYmFmZGU3ZjhkNjVmMzBkN2NhNjg3MTg5NzBkZTcxZmM4YzBlZWQ0ZGEwMGE0ZTFhYjU0MTAyZDkiCisgICAgICAgICAgImQxNjViZDdjNTRhZjVjMzFjMTVjMDViY2E1NWI2ZmRkMTkxMDg2YTUzZTUyOTZmNDg0YzM0N2Q4ZmI5NDVhMTAiCisgICAgICAgICAgImM0OTQ0OTc1MjczMmY2MmYzNGMzMjUxNTU4ODY1MTEzNzkxOTI4NWEyYzhlZjdiNGFhMGU2OTBiMGI2NTQzN2YiCisgICAgICAgICAgImY4ZDU2ZmM5NWRjYmMzZTc4ZCIsCisgICAgICAgICAgIjMyNjc3MjI4ZmYwOGM2NmZkMDNiYjMxZjBkZmU4OTAxNTNiMzQ0NmI1N2ViODRlZjM5NTYyMDhmNzJhMDdjODciCisgICAgICAgICAgIjY3ZTZiZjA5ZjAzOGJjZjdmNzM1ZWUyNGExZjY0MGExODk4ZDQwOWViNTNhYmRiNjkzOTQyNzM0NTY5YWY3MWEiCisgICAgICAgICAgIjRjZDk5YTY1MjBiYWNhNWQ0Mjg2YjE5OWNjNjc2MjhlMmZjYWQyOTZhMzBlY2E0OTllYjg4MDUwN2Y2YTM3NDQiCisgICAgICAgICAgIjBiNjFjMTI4NGM0MDNjNDEzMjFiOTkwNTNmNWQ2OTcyOGQ1Yjk3MzU3NmNmMDQ3NDgzMzNkODA4ZDVlNjhhOGYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA2LjIwIiwKKyAgICAgICAgICAiOGNkMmRhZDJhNWQ1ZjlmYWEwN2UyNGE5NmU4NmY5YjBhYzhiNDAyMjJhYzlmYjhhOGExNTcyN2NmMmY1M2U2OCIKKyAgICAgICAgICAiNGFmNGFiZGM5ODY4YTcyNTNiMjViMDk2YmQ3MDFmNDZhOTQzIiwKKyAgICAgICAgICAiOGYwMzIyZWIyYzU0MDUyNDg1YTY0NTQ5YWRmZjJhMzYzMWRiNjU3NmZjMGNhZmI1NTE2OTdkYzUzNTZmMDJlMCIKKyAgICAgICAgICAiOTNjYjY5MTczYTdlODM1NWEwZGFkZWJmYTUzY2IyOTA3ZjAwMmRiM2EzZTM4N2RhMDU3YjdjNzM1NTE2NDM4NCIKKyAgICAgICAgICAiM2VmNTc0NDgxZjgwNzQxNTE3N2U0YjM0YzI1YmQ1NWY0YzAyZmEwYWRlYTNhOTU4MDQ2NWYzNThjMDA1OTZiNSIKKyAgICAgICAgICAiY2MwNjJkNTg5MjMwM2UxYWNjMTEzYzNiNGJjNzRkNDJlODU4MDI5MDc4NDgyYTFiMjM0YTYyNWIwNDI4NDQwNiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNS1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwMTY5MzRjZGZmNDg1MGI2MDAyY2MwZjBmNDAxMGEzMmM2NTVlNWNmNmU3Yzg5OTM3ZmQ3NTVlZjZhYmUzNzlkIgorICAgICAgImFkZGU3MGNjMjE3NzUxZjE0Y2JhNmQ5MGZlNTJkYzBhZjU4YjI1MmYyNmJmNzJkYTU3OWZkYWY1N2RkZDZjZDYiCisgICAgICAiMDIxODc5OTQ5YTAyNzZiNDQzM2ZmMDFlZmNjY2YzNWExMWU3Yzc3YjM4YzE4Y2NhOTRhZTAxMmQwZjM3MDQyMSIKKyAgICAgICI0OTFjNTJhZDE1YWM3NmIxMmVjZDIxOGY1MmU3NTc4NjZlMDg5ZGQ4YWRiYjQ4ZTliYTg5NDMzNmM1NzVjNDA2IgorICAgICAgIjU1IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjBkMTcxOWU1YmQ0NzZkODdjN2VjYzMxZWI4YWI0MjVkNGZlNGM4ZjVjN2FlMjMwYTEwNDc1NTNmZmI1MzlmZDMiCisgICAgICAiODU1YWY1YTQzYjJkZGQ0ZTk1YTJiMzBkNDA3YWE4ODE1OWJiYWQyYTg3M2Q4MDkzYjQ4YTRiY2UyMGFkOTkyNiIKKyAgICAgICIyNTNlZDMzOWFjM2I1NDNmYzc0Mjk2OTUzMzhkYjBiYzFkYzM2ODZjZmQxMzliYjViMjg3MzZiYzE2NjBhOTUzIgorICAgICAgIjQ4ZmM5MWMzMjVkMDNhN2ZiMjE2ZDJkOWNkOTM2NGRlNGVlN2QyMTE5YzNiMGZiYmE4YTcxZjBkM2Y1YWI5YjkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMSIsCisgICAgICAgICAgIjM1Mzk5OTdhZTcwOWZlMzJjMTAzNmExMzI3NTdmMmExNjY3YTkxY2M4M2JlNzMzYWFkYTFiZGQyMTc5MjRjOWEiCisgICAgICAgICAgIjJjOWZlZDFmZWNmNjFkMWNmNzlkYWU5YTgzZjhhZTNmNGQwNTFiMzRmYmI1NTljYmZkYTQ5MmYxZDgzYjhiZWIiCisgICAgICAgICAgImEwNDVkNGFlMWM4ZmVhMTViNzU3N2ExYjhhM2Y1NWJhYzE3MjdlZGNhN2Y4ZjUyY2I0YmE2MWNhZjFmYThmOGYiCisgICAgICAgICAgImQ5YWFjNzc5MDk1Y2E4NGM3OTkxNTI5ZmI4MDY5OWQwZDQ2ODhkZmRiMTQyZWQ2MWE5NWI4OWNlMzMwNmJmOTciCisgICAgICAgICAgIjgwZTFiOTFiODQ4YzhkMjAwMzk3MGU1MjcwMmExZjYxMmUyZjQwMTdjZmUwYTkxZGI5ZTQ2ZGI5ZGMiLAorICAgICAgICAgICIwMDA4MGY3NzBhMmQxZjZhYmY1ZjIyMWY2MmUxNjZhYmQ3OWQwNmM3YjlhODc4ZDYxYjgwZmM0ZDViYTI5MGIyIgorICAgICAgICAgICIzYWJhYWI1MThmMDk0NDdlNDVhZWU2ZjNiZDA2MTAyNDQ0MzZhNDczMDE2MGU2YTY3MjExMGMwMWFlYjU2MjRiIgorICAgICAgICAgICI3MThkYzdjMDg2MWU1ODZiYThiNjBhMjlkNmE1NzU1Y2QyY2M1MDg1OTljNmUyOGQ3MzU1YjI3ZTQwYjc0MGM2IgorICAgICAgICAgICJmYmJiYjFhOTE4MjNiMWMxMjQyYmE2OTNkNDUyNjk1MTQ3ZGJiMjNlYTg5Y2JmMTFlYjhiMDdlYzNhMDI3YjBmIgorICAgICAgICAgICIxNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMiIsCisgICAgICAgICAgIjMxODAwODg3M2M0Y2ZlYTcxMjVlYTZmZDUyMTVkZmQ5OGQ1YzVlNzMzMjNmMDNmMjE1YzY5YzhmMmJiMTk4M2IiCisgICAgICAgICAgIjU5ZGZhNmU5OWFkZDMwNjk2NmYzMTEwYzE2MWNhMjI2MjRiODgwNzAyNjViOGYzZjlkNWRmNzI5OTFlNzllNWIiCisgICAgICAgICAgIjE4OWFhM2Q5Y2Q5YjIwNDdjZmE2MWQwMTIzNGIyMzNkMzZhYzRiOTZlZDA4MTY0ODg3NzQ5MGZhNGE4MGVjNGMiCisgICAgICAgICAgImJiZDlkMmUwMDYyYzM5ZTE4NTNhMGMzODM0NGJhODU4YmQxZDk5NWY2Y2FhMjhiZjkwNDAyNjI2OGE5OTcyMTEiCisgICAgICAgICAgIjQzYzg2YTQzNDNiYWY4OWI2ZDU1MDc2NDI1MWZiMDdkMTY3YjRjNGIxYjcwZjk5ZWY1ZmU1MGU2MmU1NDEzZmMiCisgICAgICAgICAgImNlMGY5OTU5YzJhMzc4YzQxZDZmNDIzNjE3OGIxNGI4OTE5ZGIxZDAiLAorICAgICAgICAgICIwMDZkNTQ3ZGE0ZWRjYjEwMzMxNWNiOGU0YjY2OWJlZTk2YWEyMTU2MjM1Y2E1YzNlMzFiMjRhMTVhMTM5MmU0IgorICAgICAgICAgICI5NDA0N2ZlZGNiNzA4MTkwN2M1NjE3YThhYTE4ZDEwMWIwNTMyYTM2MzI0NTE5MjNjNDhhNzViMGVjMjE3NmNiIgorICAgICAgICAgICI5OGU1Y2U1MTU4OGJjZjg2OGUyOWQ1ZDk2OTRmMDBhZTJjOTI0ZTczZDJlNmRkMTQ0ZDI0ZmE0NWQwMTIwNmEzIgorICAgICAgICAgICJmNWQ5MzY0MTNjY2JiNzRiMGUyZDA0N2Q4MmI2MDBiODlkNTE1OTRmY2U3ZGU2YmJkOTViOTdmY2ZlYzU5OGM0IgorICAgICAgICAgICJlYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMyIsCisgICAgICAgICAgIjdmODNiM2UwNTRjMDI0ODI1MDc4ZGQ5ZjA0MGUxZDA5MDU4MjAwYzk3NTdiNzZmYjM3MmI4YjUyNjZiOWRjMjYiCisgICAgICAgICAgIjllYzc1NjlkMDAiLAorICAgICAgICAgICIwMTM0ZWUyMTUxNTFlNTMyNTBmNWEwMDE2YWNjZTM3MDFlMmE1OGRkYWFkNmNjMzY5ZGYwZGNkOTM0NmEyYjUzIgorICAgICAgICAgICIwZmUzNzE1YWZlZmYxZTliY2I3MjA4MzFjMTI1NTg5NzBhOWUwMzg5NjAwNGYyODdhZGI4MjFmMzE3Y2Y2MzkzIgorICAgICAgICAgICIwMGNhZTZlOTA5ZTkxZWQyYTNlYWNiOTk1MmE3Y2M1NDk0NzY1MjY0MjQ3OTUxZDI4YzE2YWYwM2UyNGI4MGVlIgorICAgICAgICAgICIzMmIwYjYyZWRmMTBkNzAwOTE5MjcxMzVmMDVhODg5ZjJmNjA1NmI5NWNkZGFjZTQ3YzY5Zjk3MzA4YzBkZjJlIgorICAgICAgICAgICJiYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuNCIsCisgICAgICAgICAgIjE3ZWJjMTUwMDdiYjVlNGFmOTE3MjAxYzNiYTM4NDkyNjU4OWMzMTU5YTg5ZDFhYmQ0YzJjOTg2ZmJhMDM3OWUiCisgICAgICAgICAgIjhhZjEyOTc1YzVkMDMxZDFiZmMxNWNhOTE3MzZmMDdiMTc2NmQ4YjhhNzJkYjEwYzI2OGM5OGZkN2FhMTFlMjkiCisgICAgICAgICAgIjk5ZjA2ZDg2MTI3Y2M4ODljZjE1MGRjYzczOGY2YWI4YmFhZTk0M2NjNjA2ZGQ0ZDllY2U3MDFhNGE3YjEwMWUiCisgICAgICAgICAgIjM1MWRlZTIwYjE1ZWJjNTUyNTZkYjNjZTQ2YTZiZDUwNjExMjViNjJiOTk1ZTk3MGQxNmY3YzlhOGZjMTU3ZmYiCisgICAgICAgICAgIjY4Y2VjN2U2MGY2MDhmNjYyNmRkMzk1MjhiMjQwOWFhMmZmOTMyZmMxMTliMmE3YTgxNzcyYTU3NmIzZDUwYTAiCisgICAgICAgICAgImQyODdhN2ZhMmRiODdkMmI5MmUxYzk2MWE3MGNhYTQ0ZDg4MTM3Yjk1MGUxMDA3MTFhOTg1NGFkZmFmYjQ5NGQiCisgICAgICAgICAgIjM0ZTI4NjA2YTI3YyIsCisgICAgICAgICAgIjAxMDVkYWRjOTljNTliNWUzYWM1NTRiMWI1ZTc0ODBlNWMwYTYyYzdhYmFlZmRhY2Y0NDI2ZWNjZmU2ODZiOGEiCisgICAgICAgICAgImFhMWNhNGY1MWViYWJmZmE3N2Q5OTgwM2U3ZWU4ZDIwZDEyMDRhYWQ4YzY3Mzg1ZDA3NDRjODU0ZGUyZjk5N2EiCisgICAgICAgICAgIjU2YWFhZTA0Y2VjYzY1NjUzNWMxNmJiMjE0NWQxODAxODEyNTk0YTgwMTNiMGViNTRlN2JmNjVkMzg0MjAwNTQiCisgICAgICAgICAgImVjNDZkYWM3MWExMjUyMDhiMzAyMjE0YTdjOWIzYTkyY2E5YmY3MzczOWM3NjYzMDlhZjgwM2VkZGU3YzU0ZDIiCisgICAgICAgICAgIjQ2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy41IiwKKyAgICAgICAgICAiNmE1MmJhMTkwZTQ0Y2EwZjEwNzAwMjEwNDg3NjJmM2U3OWVkNTFjOTRmNmRjMWE5ZjFlZDc4MzUyZWYzNzlhYSIKKyAgICAgICAgICAiNDliM2E5Mzg3ZTNjYTdhMTk2ZjEwNWRjYWIxODUwNmYyOTRhNjkiLAorICAgICAgICAgICIwMDBiNzBlNjAxYzVlYzU4Njg0ZTA5MThiYTdhNTM5ZTlkMmRkMjliMDFhM2Y0NTNjYWQ0YTlhNDBlNTBmNWRiIgorICAgICAgICAgICJkZjcyYzExMDUyZjIwYmU0NGE1ZDM4NTFiMDFmZDA5ZDljOTIwODQ3MGYwYTRhOTUwMzVlOTg5ZWVkN2Q2YjA2IgorICAgICAgICAgICIyZTEzZjQ5OTViZjA5MzBiNGEzZDliOGE5ZWQ3NWUzMzg4NmU0YjE5NGFiNWNjZDZiNDEyOTU5Y2I0ZjU0OThiIgorICAgICAgICAgICJkMzJmNjY4NTQ2YmUyYzAwN2FlOGRlNWQ5ODk3N2I5NGIxN2UxMjYzODg0YjU0ZTc4NGIzOGZjMTEyYjhjYmRkIgorICAgICAgICAgICI1NiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuNiIsCisgICAgICAgICAgImJiZTBiOWRlMmI1ZTlkY2QzMTY3NDI5NDNmOTIxOWIyNGY2NmEzOGY5ZGU3MDk0NjRmYTU0OTVkNzk0YTYzN2IiCisgICAgICAgICAgIjllYmMwNjc3NjJkYTdhNmVlZmYwOThmYTQ0ZjNjYzM2ZjJjY2VmNjdmZDQ2YzU5ZTI0NzM4YzgxMGM2OWVkZGMiCisgICAgICAgICAgImQ5MGNjN2Q3MWE0YzNlNjkzYmNhYTI4YTUzM2Q5MDRiNDFjZWQzMzk5YjRjNzY0N2U1ZWM0YjNhZDkwMzg3MGYiCisgICAgICAgICAgIjViNWY4ZDZhOGQ4MTI4YWUyMzgxY2VjODZjNGQ4NWI3OGE0NTFlMWVhOTdlMzM5M2ZmZTk5N2U1NDZiMDljOGMiCisgICAgICAgICAgImY4MjI1MmIzM2Y3NDVmZWVkNDEzMzIwNjUxOGUyYjg4MDMxOWRjZGY5MTA2NzE4YWZiMDE2YzUxNGIzODA1MzIiCisgICAgICAgICAgIjY1YmM5ODc5MTAwZTQ3YjAzZWJhMDM2OGYwOWUyOTIzYWM2ZjQwYTA0Yjc1MDU0Y2Q1MDViYmM4OTY1ZDY0OWEiCisgICAgICAgICAgIjFiYWU3YmI2NjQzY2I3NDE5NWU5MWM1MWY0MTgzZGIyZDczOGNlNjAzNTUwZDYzNGU2ZGQ0ZjI3ZjRkYWFjNjEiCisgICAgICAgICAgIjU2Y2ZhN2UyNDY4YjVkNmFlYjc4MjkwOSIsCisgICAgICAgICAgIjAwYzJlMDc0ZGZiY2QwZTczYWMwMDIxYWViOTkzMzEwNmIyMDFiOTNjMTdhN2JmOTMzNTZkMjkxZmI0YWFlYjMiCisgICAgICAgICAgImQxMzE2MzAwYThkZTdiMDdlM2Q3NzliY2MyOTllNTJiNmNiMDMwODgwMTZkYWViODQxMzgyZWIzNDM1ZjJlMDMiCisgICAgICAgICAgImViZjIyZGMwODZmYjIwZWJlNTNhYzU0NTkwMjQ5NzYzYTI2NTVhYTdlYjBlN2QzODY0OTM2YjM0MDA2YTZjNGYiCisgICAgICAgICAgImEwMmQ5Y2ExMDRhZGFkYTZhYTAxYjk3N2I2ZGVmMjc1MDYwOGE3OGYzZWQ4M2FkNzEyYTdhMWIwZmJkZTdjN2MiCisgICAgICAgICAgIjhkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy43IiwKKyAgICAgICAgICAiODNhNDhiZmY4ODZkMWQ2OGYyOTIwYTBlY2ZmMjk4MzIxYTk2ZjVjYWRjZGZkOGJlMTZiNTBkMzRkNjdkOTRjZCIKKyAgICAgICAgICAiYjFhMWJmYTBlYWUyNDY5OWI2NjNjN2JhM2EwOGEzOTBmNzIyNTg4NDg1Njc5NGQxODBjNTQ2Y2FjMDZlNDExOCIsCisgICAgICAgICAgIjAxMmU4MWJkMzg2MzUwNjViZjY1NTQzMzZiMDBkMTA2MTgzMzA1NTNlMGU4MDg3OGFhZDM1NWYwMGQ1OTQwZDgiCisgICAgICAgICAgImJhNDUwMWM1YzQ5ZjEwMTZkNWYwZTZhNzNhNGQ5Zjg3NDBkMmNmYzI1ZWEyNDhkZjNmN2IxYWU4ZmNkMjZiZDUiCisgICAgICAgICAgIjYyZTBmNmViNzc3ZjQ2ZDc1NzMwNjlkYjg5MDdjMDIxYjY0NWQzYjI0MDU4NDc1MTk5YTkxYjU1NzJkOGFjODciCisgICAgICAgICAgImY4M2VlNmFmNWNmOWUxNzFhODU4ZjYwZDJiODE0MGY1MmRhZWQ2ODQ0MjIyOGI0ZmZmZDhkZTQwMDc4ZDNkZTgiCisgICAgICAgICAgImNiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy44IiwKKyAgICAgICAgICAiMTgiLAorICAgICAgICAgICIwMGYyYzI5OTAyNGFiN2JkMjUyYzY5NDZiZWExMGRjMDUzOTczODk4YmQ1ZjBlM2M5NDYwZTZmZTA5ZDdkMTkxIgorICAgICAgICAgICJlNzFiZjc5ZDQzNmNhYTg0ZTk4NmJlM2ZjMDk4MTljMDgwZTU2YTA4NWNmNDI0NDE0YWYzZmM3MDA3Y2YxYWMzIgorICAgICAgICAgICI2ZjFjZjg2MzU3ODBiNTU2OGQ3MzRhZDZkODFhMmJhOGViMTg4YjI5NDY2OWQ4NzFjYTQwZTYwOGYwZWQzM2Q1IgorICAgICAgICAgICI2OTBjYzYxNTcwYzViODQ3ZWJkYmRjZGM0ZmE3OGY0MjllZmNlMTNjNjc0N2U1NGQ2ZjI2MWIwNDU1ZDZkZDY1IgorICAgICAgICAgICJjMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuOSIsCisgICAgICAgICAgIjA0YTZlMjRiOTNjMmU1ZjZiNGJiZTA1ZjVmYjBhZmEwNDJkMjA0ZmUzMzc4ZDM2NWMyZjI4OGI2YThkYWQ3ZWYiCisgICAgICAgICAgImU0NWQxNTNlZWY0MGNhY2MiLAorICAgICAgICAgICIwMGVjYzg5NWZiZDk0N2UyZGZjNDdjMDNiYTJlOTkzZDFhMTQzYTdhNmFkNjNhOTE2ZWQ1NDQ4M2NlMjYzODlmIgorICAgICAgICAgICI4OWQ1ODBmNGVkYmRkMGIzN2UwOGNhYWE1YTBjMWU1MjZlMWU5YTFhOGMwZGM5Y2Y1MGVkNzdkZTI2NzY0NjBkIgorICAgICAgICAgICIyODhkY2U1NjVmMTI4YTI2NmVhMjliNGVjYzMyOWE5NGNjMjUyMzk2ZGM1MGQ1YzBhMTNkODA5MzgxZmFkODhhIgorICAgICAgICAgICIwNzg5YWQ0ZjU2YWE3N2U1NDRlYzI1NzBhZjk5MThiN2Y3NDFiNDg2Y2E1MGIzMzg0YWQxMTI0MDYwNTkxNjg1IgorICAgICAgICAgICJhMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMTAiLAorICAgICAgICAgICI5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDE2IgorICAgICAgICAgICI5ZjE2ZmU1MWM0YzA4YTY0OTRiNTAwNzM2MjIwOTFhMzgyMmVhNTdjMzI4YmQ5YjY5ZDI0NjVhMjEyMmFmMTc4IgorICAgICAgICAgICJiZjZiMWJlMzA3ZWU0YzMxNDc5ZmZkOWY0ZDExZjMzZWEyMGI3YWVjZTgxMmNhYjRlZWRkNDY5OTMxNTFkNTY4IgorICAgICAgICAgICJmZjY0YTE2NzA0YTU1ZDk1MGFiNzc5MWFhMjNiMjZhMGE4YWY4ODBmNmY4MDU2YmRkMjA2ODM4YjQ0YzYwN2I2IgorICAgICAgICAgICI2MWI0ZjFkYzM2MjEwNjVmZGVkM2RiNmY5ZTNmMmRjOGY0MDBlZmUzYzJhZmE2YzAyNzk5NDA1NzZiYjA1ZTM5IgorICAgICAgICAgICI4MDRiZDM1MDVmNGJkMjgyNTI5MThiMjhlNzRlMDU4ZjI0ZjI3ZWYwZGIzZDBkY2Y5ZWIyOWQ0MWZmYzExMDA3IgorICAgICAgICAgICJjZTg2Yjk4MmU4OWMwMzc1YmQ5OTc2YTVhZjEzMWE2MTRkMjgwOGJhMjUwNzlkOTc3ZjBiMjM5Nzk2YmE2YjFiIgorICAgICAgICAgICJjZDVlODU1ZDk2IiwKKyAgICAgICAgICAiMDE1NjYyZTMwZTc5MGUzNzg2ODM4MWI0ZjY3N2EyYWVkNmIyYWNjNTY0NDkxNzMxODI0OTEwZWQ4MGFkYzQ3NyIKKyAgICAgICAgICAiMTU5Yzg4NjE4Y2M3ZDBiZWIwNDliMWFhZTc0YjE3MjFlOTBiYTdmN2IwZWEyNmJmMzNhZDA0Zjg2ZmYzMTQzOCIKKyAgICAgICAgICAiOTdiZjBkNGViNDVlYjdkZWI1NDQxMWJhOTY4MGFhYjEzYWRiZmNmMThhZjQ2Yjg3ZmNiMTQ2MWMyNjIwNmE5NSIKKyAgICAgICAgICAiM2JjM2NkYmIzMWUyOTZlYTA5MDI0YmM1YzdiNjJkZTZjNjljMTRiZmNmZWI1NjM5MWE5ZWY1OGNkODA1ZWI2MyIKKyAgICAgICAgICAiMWYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA3LjExIiwKKyAgICAgICAgICAiNzFjN2IxOGI0YWE4ZWE1Mzg5YWQ3ODQ5MjMyODY1YmUyYTkzZTM0N2ExNjhkMjVjNmM2ZWEyNDM5YzFjYzgwYiIKKyAgICAgICAgICAiYjBiNzIyM2JlOWM4OTM3MTIyODQ1YmIwYTM5YzAyNWM0Mzc1OWRlZmU2ZTRlOGViM2JhYWI0ZjFlYmRjYTJjOCIKKyAgICAgICAgICAiYWQxMmE0NjVhMzBmOGE2NTI1YjEyMGVmNmFhZWM5YmRkYjQ1Y2Q0MmMwMTUwYzQwN2IwNDhlZGY2NTE5OTQ5MiIKKyAgICAgICAgICAiZjIwN2NhMDFhYWE1NTQzYWYzOGVlOThkNTNiZDEwZDhlZWJjM2I2NDk3N2U3NTc1MWQ3NDUwZGRiMWMwZTFmYyIKKyAgICAgICAgICAiMjRkYTE3MTg4MTFmYmU5YjBhYmZjM2NhMzFlNjk5NWZjNzM0OTA3M2UyMTdiMzdlMjNjNWYxN2E4YjdhM2YwMCIKKyAgICAgICAgICAiNDg2YTM3MDJiOTUxMGQ2ZjA1MWIyNzYxNzE2ZTMyYzYyYmI1OTM5YjJmYjExYWNiMWM4MyIsCisgICAgICAgICAgIjAxM2FiNjNhYjE4MzM1M2EyMzVmYjg5M2FiNGMzNWQ2NDA5YzIxODQ5ZGNmY2RhM2JmZGExNDI5ZmVlNzQyYTciCisgICAgICAgICAgImQ4MTYwZmQzYzgzYjM4NTNhMzMzZjk1MTUzOWJiNTc3MWY0ZDBmZTEzYWRlYjY0ZTQwMzBiOTJlOGIwODEzZWIiCisgICAgICAgICAgIjUyYjFhYTMzYmQ5NGM1YjhiYzFiYmNjZGY2YzFkZjBiYTY3MDcxN2MwY2Y2ZmQ0ODViZTJmZTllMTY4MTNiZTgiCisgICAgICAgICAgImNkZDU4MGU2MTA4NjY3NWUzMTgzMWM5MjRhNDFkNDY3MWE5NWQ4MzVlM2ZjYTQ5NWU4ODY1OGQxZTU3MGU2MjgiCisgICAgICAgICAgImM3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4xMiIsCisgICAgICAgICAgIjBiZWIxOWI1NjI5MjhjMjcxYmI3MDYxODllNDNjZmE1N2JlNzZiMmY3YTgzZTAyYWEyY2NiMDM3YzBmNGY3ZjciCisgICAgICAgICAgIjMxNjJkNmMyNmY3MGRlOTcxODIxZTdiOTY2NWNiOTMxYmIwZWFjODIwYmY4NTk5ODRkYjRiZWVmZWY0YWI4OGUiCisgICAgICAgICAgIjkxNjMxYzBjZDMxZGI3ZjkzNThhNWFhMWRmZjI0MDZiNDVmOWJkY2JlZjIwZDU1YzI4MmJhZTVjZmI2MTA2MDIiCisgICAgICAgICAgIjNiNTYzM2MwNTFhZjE3ZTcyOWJiMDdjOWFmNmRkMiIsCisgICAgICAgICAgIjAwZDYzZGE0ZDVkM2UyMjg0YTE5MmE2YTlkYTNmMWE3ZDNmY2MxNjRiOWZjM2RmZDc0NTJiMDJmZWQ2ZWYxYmUiCisgICAgICAgICAgIjVhZDJhNzY5ZWM5YzM2MDU5YjcxOTExY2NmN2FiNzFjZTMwOTg3ZWM0N2JiZjU1ZTZkNDYzMGQ2MjM0MmIzMTUiCisgICAgICAgICAgIjUwNDhlZTBiZjQzZDI0ZmU2OWFiZGFjMTJmNzk0YjY3OThiZDFhN2NiNDg5YTY0Y2UwODIyNTRjM2Q5MmY0NzUiCisgICAgICAgICAgIjU2NmI1NjQwMGQ5NjIwY2RmZDYzZmMxN2MxOTNjNDI1ZDdlZGU5NDFmNzZkYTFlMzQ1YWYwZTJhOGI4ODQ0YzciCisgICAgICAgICAgIjQwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4xMyIsCisgICAgICAgICAgIjAyODdhYmUyNjcwYTQ1Zjg3NzkwNDhmNSIsCisgICAgICAgICAgIjAwNDJmNDE0NzgyZGY2NWQ5MzQ3YmYxY2FkNTM0ODUzNzQ2Y2MwYjg1M2MxYzUyNmY5MTcxNDQ1ZmNmYWE0OTkiCisgICAgICAgICAgIjFhNzBmNWE4NDQ1YmNmNDExNGYwN2ZjODM1NGM4NGE5M2I5NDM3MzNkMzkzN2E1OTg4M2I4OTZjZTY1ZmRiMTYiCisgICAgICAgICAgIjViMWUzMDU1Mzc0Y2UyNDJlMTI2OGMxNjQxY2M0NDNiYjllN2RhN2Y3MWYzZTdmNjMxM2YyMzllNjIwMGU3OWEiCisgICAgICAgICAgIjFiZTNlYWQ2YzM2ZTk0MWYyNDQ2MGJhYTU3ZGY2MzllNTdkYWIzZWZmOWU3N2I4N2FmMzU1YjgzZGFlNzdjYmUiCisgICAgICAgICAgIjA2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4xNCIsCisgICAgICAgICAgIjNmNDk1NDJjMGU5ZjUwOTMyYzBkNDUzZGM5NTMyMGFmMjFkZDJiZDE3MjljMjlmNGYwOGM3MDk0NGMyY2M3NWQiCisgICAgICAgICAgImU5MTY2YjRmZDIzMGFhOTM3MDJjNWYyYzNkOWMyOTlhMzU5MTAyNTcwMDMzNTQwZWI4MjhjYWQ3NWE1Nzc2ZDIiCisgICAgICAgICAgImU4Y2I0NTYxNDFhNmZhOTdiYzRlNmU2MmQzZGYwODI5ODJhNGQ5OGMyZGU0NDFlNTllOTMxMiIsCisgICAgICAgICAgIjAxNWMzOTkzY2VlYmQ4ZGJhNDVhMzY4ZGQ0MDVhZjhhNTNiOTNlODI3MDE5Zjk5NGU0ZWQ3ODJjMzkxMWI5YjUiCisgICAgICAgICAgIjgwZDU0MjI0MjY5Yjc5OTdmMTc0OTYzMGU1MmYyMjFmYWZhYjk2NDFjNzgxZTcwNDRkMzI1NmUyZTQ0ZTE0MzciCisgICAgICAgICAgIjkxNzIzMjY5NDUxOGJhOWU3MTM4ZGE0N2ZlNTM0MzI5YjhjOTY4OWUyNzg1YzAyYjYwM2RkMTYwZDM3MzM2YTIiCisgICAgICAgICAgImIwNWJlMDQ3ODI2NTlhYzBlOTY3MWZlOTMyZWE4MDkxZDYxMzE4YjJiMjAxYmRhNzlhZjZjMGM0NDQ2OTM4ZTMiCisgICAgICAgICAgImY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4xNSIsCisgICAgICAgICAgImQwZGJjOTZjZjliZmIxZTNjZDZkZTJlYWEwOGQ2ZDc5NWJlZDgxODdjZWIwODU2NTgwZTRiMTQyYjlhZTYwYTAiCisgICAgICAgICAgIjk4Y2Q0Mjk4NGU4ZGJmMWQwNWEwYzBhYjgzNTE1NDhmMGExMzY0NmYzMzM5MGIyYmIwYzg2NGIzOTdjZjEzMzciCisgICAgICAgICAgIjFmOGIyZjY3NWE4MmU0NmJmMTZjNGFmYzYwNWVlM2U1YTE0NjljYWM1MWZhNzM0YjQ0NjVkNGMxM2Q1YjJkZDEiCisgICAgICAgICAgIjJlZWRhNTRlN2QwODFjZDllM2VhYWY5ZTU3ZGI0MjIwMjBhMGI1YTVlYzI4Y2E0Mzk3N2E1ZDY3NmZmYWI2MmYiCisgICAgICAgICAgIjc4MTA3MTkzNTk0MTU5Y2ViZmJkODYyNjk4MTlhMGYzNDFhMGY0MTI4NGRkMGE3M2NhODAxNGQyZTBiODAxNzkiCisgICAgICAgICAgImM2MzgwYjQwM2FmYmIxMWI0MmRiMzQ5YmFmZDc1NzBmYmVjYmQxNGJkMGMyMWFkNjQxNjg3YTZhYzMyOTI1ZjciCisgICAgICAgICAgIjAzMWEyNGE2NTY4YWI5ZTI4N2ViODA3NTQxMTBkZmJhNjg4YTU5NjMyNWJjYWM0YTM5Y2U4Yjg0YTQiLAorICAgICAgICAgICIwMDhjYzgyZDY0NTU5ZGUwMDQwZjU1NDExOTlhZWZmMzk5OWZlMmYwODZmMTU3ZmY1MWYyMjIwZGIzNDU1MTlhIgorICAgICAgICAgICJhMTE0YjAxNzYyZTcwYmM5NjU4M2JiMzhiMjJiM2Y4N2JlYWIzMmUyM2EzZGViZGI4YTU5NTQyOWZmMTJmYWQ0IgorICAgICAgICAgICI5NWQ3NGUyMjBlNGY3ZGNhMjIyNzI4NDM4OTllODEwNGM2OWE1OTY0MmY2ZmE4MjU4OTBmZTgxMzJhMGY3OTk0IgorICAgICAgICAgICIwMjUzZTUwMDdmYjExNzdhNWJmNDE4MDY3ZWRkYzhkMzJjNWU1OTM1YmYzMzhmMWM2OTBlZmM4MDExZGM4Yzg0IgorICAgICAgICAgICIyZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMTYiLAorICAgICAgICAgICI3ZGYwMjM2ZTg3MWE3MWMzMTc5MGViNWYwMTFjOTExYzI3YzYwMzczYjhkYzllYmIxM2FjODVhY2NiM2JjYmQzIgorICAgICAgICAgICJiNDc0Zjk3ODg2MmRkODQyMDJhYjIwYjMzNDczOTQyNWUxYjc5ZTBiYjhiNGJjNDdkYzcxNTNmNTdhZGEwNDEyIgorICAgICAgICAgICI0NDdiZjVhNWU2NjczNDE5YmFhZDY1M2U1ZjVjMzllMmVmN2NmZTdlZjQ3NzhhYjk5OGNhZjk3Y2UxNmM1ODMzIgorICAgICAgICAgICIyNzcyZGRkZjgyNmYxZWVjMWFmM2RiODBlMzEzNzVkNjY4MGFhMjU0YjRhYjZlZjlhM2VjMGUwNDAzZTRiNTgzIgorICAgICAgICAgICJkMzcxZGRkOTZkZDU3YjJjNjFhNmU0MDEyNTFhMWE2MzBkMWRkY2RkODRkOTBkODJmYWY1YTAxOGQyYTg4ZTI2IgorICAgICAgICAgICI1ODU1ZTlkN2NhMzZjNjg3OTVmMGIzMWI1OTFjZDY1ODdjNzFkMDYwYTBiM2Y3ZjNlYWVmNDM3OTU5MjIwMjhiIgorICAgICAgICAgICJjMmI2YWQ0NjdjZmMyZDdmNjU5YzUzODVhYTcwYmEzNjcyY2RkZTRjZmU0OTcwY2M3OTA0NjAxYjI3ODg3MmJmIgorICAgICAgICAgICI1MTMyMWM0YTk3MmYiLAorICAgICAgICAgICIwMTQ1NWUzYmIyOWNiY2E4ODM5YjlmNTQ0ZDUxNDcyZWJjZmQyNWMyOTIyN2M0NjU1ZDVmN2ViYmQ4M2M0OGU3IgorICAgICAgICAgICI2NDNlN2I1OTRkNmY3Y2Q1ZjZiZjlhNDBiMDVjNGEwNWNiZWUxZmQ2NTlkM2NlZGUzZTdjYWQ2MWU2ZmRmOGYwIgorICAgICAgICAgICJlNGZkZWYwODEyYTg1MzkwOGYwZjk5Y2E3ZTM4OGViYzE5ZTg3NDc2NWIxMTY0MGYxZWUxZTk4ZjU0OTUzZGU2IgorICAgICAgICAgICIxNzZmMTU4MjAzNzAxN2M4Mzg2MDlhNTdhMTJhY2JhZmE2YTU2NTQ3ZjU3ZDYyZGJlODc2NjllZGMwZmUzYmFhIgorICAgICAgICAgICJkYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDcuMTciLAorICAgICAgICAgICIxMjg4YzAzZjk1MDA2ZWEzMmY1NjJkNDBkNTJhZjlmZWIzMmYwZmEwNmRiNjViNTg4YTIzN2IzNGU1OTJkNTVjIgorICAgICAgICAgICJmOTc5ZjkwM2E2NDJlZjY0ZDJlZDU0MmFhOGM3N2RjMWRkNzYyZjQ1YTU5MzAzZWQ3NWU1NDFjYTI3MWUyYjYwIgorICAgICAgICAgICJjYTcwOWU0NGZhMDY2MTEzMWU4ZDVkNDE2M2ZkOGQzOTg1NjZjZTI2ZGU4NzMwZTcyZjljY2E3Mzc2NDFjMjQ0IgorICAgICAgICAgICIxNTk0MjA2MzcwMjhkZjBhMTgwNzlkNjIwOGVhOGI0NzExYTJjNzUwZjVjMGE0MjUzMTNkZjhkNzU2NGJkMjQzIgorICAgICAgICAgICI0ZDMxMTUyM2Q1MjU3ZWVkODA2YWM4YzljNmFmMDRhYyIsCisgICAgICAgICAgIjAwNmJlYmI5NmYwZTI4MmYxYjRkMDNlNmM1NjUwNWI5Mzc3OGRhOWY0OTM2NTBlOGFhZWI2NWNmZTYyODUwMDQiCisgICAgICAgICAgIjJmNzVhYmU2ZTZlYWZlYjlhNzBhYmQyMWViNWRiYTczY2JiODdjMTI5ODBhYWNkZjE2NzE2YjE5OThjOTQ5OWMiCisgICAgICAgICAgImU0MzljNTRhYWI0ZDE5Y2U3MjdiNzg3NWE0MWEzZDMwODE0ZTUwOGRhYTI2ZWI3MGFhYmJkMGRjYWVjYzRkNGIiCisgICAgICAgICAgIjUxNjk4MDcxNTExZWIzMWIyMTBlNjZkY2JjN2ZjMGI4YzYyMzE0ZGFlYTY5ZDQ3YWUyNzgxMDBkZWI1MTQwOTIiCisgICAgICAgICAgIjAwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4xOCIsCisgICAgICAgICAgIjU0MTM5OTNjMjY1OGJjMWQ5ODg1IiwKKyAgICAgICAgICAiMDBiYmViMmNhMGJkNjRjYjg5NjAzNzViMDhhOTQ4MGU2OWMwOWZkMzgyZGVhMmY5NDA4OWIxNTMzYTA4NTFmYSIKKyAgICAgICAgICAiMGNiZDBlYWRlZmNhOGM3MGI3NzA3OTdhZDA4OWU4NDBkMmZlMWE4ZmI4NTQ5ZjMyOTA1ODNiYmI4MWQzZWUyYiIKKyAgICAgICAgICAiMWM0OGYxZWE3NTFiZjMyZjk1OTBiZTNhZmRiNzc0NWUxNjZlMGIzMjJjMDgzMTI0ZTY0NTgzOTQ4MmQwODEyNiIKKyAgICAgICAgICAiMjJkMzFhYjE4NzdhOWJiNDFiOGRhYWQ4NjhmMzBlNzUwNzgzMmFjMzQxMDExMjEzM2FhMTdiMmQ0NzZkNDc2ZCIKKyAgICAgICAgICAiODkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA3LjE5IiwKKyAgICAgICAgICAiOWM4NGMxNDg2YmMxMmIzZmE2YzU5ODcxYjY4MjdjOGNlMjUzY2E1ZmVmYThhOGM2OTBiZjMyNmU4ZTM3Y2RiOSIKKyAgICAgICAgICAiNmQ5MGE4MmViYWI2OWY4NjM1MGUxODIyZThiZDUzNmEyZWIzMDdjNDNiNDg1MGE4ZGFjMmYxNWYzMmUzNzgzOSIKKyAgICAgICAgICAiZWY4YzVjMGU5MWRkMGFmYWQ0MmNjZDRmYzYwNjU0YTU1MDAyZDIyOGY1MmE0YTVmZTAzYjhiYmIwOGNhODJkYSIKKyAgICAgICAgICAiY2E1NThiNDRkYmUxMjY2ZTUwYzBlNzQ1YTM2ZDlkMjkwNGUzNDA4YWJjZDFmZDU2OTk5NDA2M2Y0YTc1Y2M3MiIKKyAgICAgICAgICAiZjJmZWUyYTBjZDg5M2E0M2FmMWM1YjhiNDg3ZGYwYTcxNjEwMDI0ZTRmNmRkZjlmMjhhZDA4MTNjMWFhYjkxYiIKKyAgICAgICAgICAiY2IzYzkwNjRkNWZmNzQyZGVmZmVhNjU3MDk0MTM5MzY5ZTVlYTZmNGE5NjMxOWE1Y2M4MjI0MTQ1YjU0NTA2MiIKKyAgICAgICAgICAiNzU4ZmVmZDFmZTM0MDlhZTE2OTI1OWM2Y2RmZDZiNWYyOTU4ZTMxNGZhZWNiZTY5ZDJjYWNlNThlZTU1MTc5YSIKKyAgICAgICAgICAiYjliM2U2ZDFlY2MxNGE1NSIsCisgICAgICAgICAgIjAwZTZiZTk2ZTE4ZGNlYmY4Mzg4YmE4MmVjNmYyNzEwNWJjMjc4NzE1OTVlMDE3MDVhMmI5N2ExZjRkNzg4MzgiCisgICAgICAgICAgIjM1MmIwZTdjMGEyYzYyN2E2ZmYzN2RiMTY5YTlhNDY0OGFkMjdhZjA2NTMzYTRmMDQxZDRjODIwYWJmNGZiNTIiCisgICAgICAgICAgIjY0NjQwODE0MzRkZjM2Nzg4NTAzYzY1YWY3NjJhYTIxOWZiNzZhOTFjYmI0MGUxNDkyYTljYjc3MzY5YmI0Y2MiCisgICAgICAgICAgImExOTM0ZTM4NTNkZTZjODZhNWRjMTE0OGVkZWViM2IwMDMwNDE0ZmUzMDgzYWQ3MmZlMjk1YzI5YjVlYTliNjYiCisgICAgICAgICAgIjYwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgNy4yMCIsCisgICAgICAgICAgIjk0MGNkYWI0YTNlOTIwMDljY2Q0MmUxZTk0N2IxMzE0ZTMyMjM4YTJkZWNlN2QyM2E4OWI1YjMwYzc1MWZkMGEiCisgICAgICAgICAgIjRhNDMwZDJjNTQ4NTk0OWEyYjAwN2U4MDk3OGJiYjE5MmMzNTRlYjdkYTlhZWRmYzc0ZGJmNWY3MWRmZDQzYjQiCisgICAgICAgICAgIjZjOTNkYjgyNjI5YmRhZTJiZDBhMTJiODgyZWEwNGMzYjQ2NWY1Y2Y5MzAyM2YwMTA1OTYyNmRiYmU5OWYyNmIiCisgICAgICAgICAgImIxYmU5NDlkZGRkMTZkYzdmM2RlYmIxOWExOTQ2MjdmMGIyMjQ0MzRkZjdkODcwMGU5ZTk4YjA2ZTM2MGMxMmYiCisgICAgICAgICAgImRiZTNkMTlmNTFjOTY4NGViOTA4OWVjYmIwYTJmMDQ1MDM5OWQzZjU5ZWFjNzI5NDA4NWQwNDRmNTM5M2M2Y2UiCisgICAgICAgICAgIjczNzQyM2Q4YjgiLAorICAgICAgICAgICIwMDgwZTJjMzRmZDRhYjRkMWQ3MDFlYTNmMDg1NzYzYWNhZmZjOWZkM2VkOTE4ZDA0YmZmZWUxOTMxNjI0ODk4IgorICAgICAgICAgICJjNzhmODk0MWJkMmE1OWNlYjViODQwZjAxMTQ1MTZjZTQxMWZhZTc1MmIxYjhhMjIxZmZjYTdhNjg3NjZjNjk3IgorICAgICAgICAgICJjNTBhM2Q4OGQ4ZDAyZmZjMTI0MWQ4NGJiN2E3MjI3ZjNkMDUxNDllMTUxMTEyNzdhMTM2YTViOGRkOTZkZDRiIgorICAgICAgICAgICIyMjVjNWY0OWNkZjYwNzFkYmY3MTkzNWM3YTZmMWUyZTlhZjMwMjFjMGQ1OGE5YjgxYzliZGU2MWZhNDcyYzA3IgorICAgICAgICAgICJhNiIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNi1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwMzMzMTI2NDg4ZjdhMjkxNTEzMmUzMGQ1ZTk3ZjZlZDdiYmI2N2I2MTk4NTAwOGVhZWEyYTVkYWZiOTZhNDQ4IgorICAgICAgImFiNzVjZTNkNmU2OGE2MjY1ZTdjMjQ1Njg0OTk5MzI0YzgxZTBiYTYzODk4NjNmZWI0ODhiM2YyNTVkMGQ2MTkiCisgICAgICAiYzE5MDQwYjc0YzE4OWYwYzlhZjRiMGQ1YTU1YTU0NGMwOTBjZDYxNTJjOTBhNmYyNTUwZDdkMmE2YjZkMzQ3ZCIKKyAgICAgICI1YjFiOWRmYjFkZTQ0MDNjNzk2NjIzZDcwM2JmOWRiNDQzYmY2NzAyNjgzYjhkMmE5YzYxZTkzNjhhYzQyNWE1IgorICAgICAgIjgxIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjAxNGEyYjE1ZGZhODgzMWRiNGVmYTA1YjE5NTA4NGI3NDI3MzRlZTEzNmY0NDgzZjNiZTI1MDlkMmY2MTkwMjMiCisgICAgICAiYzMwYTFmZjJkZjc4Y2JkMTE3YjE0ZjJjOTkxMzE3MWY3MjkzYjlmYTZkNDFmMGJkMTFhNTMxNzQ3NDY3NTQ4NiIKKyAgICAgICJkN2YwYWVjMGE3NzhiYTkyMGU4MWY1NjRkMTU5MzBjZGRlZTdlMmIwNmFkOGFkYjYxMjc1MWY0ZTM4NGQ2ZjNmIgorICAgICAgImEwYTY2MzlmZDYyZWRmODZmNTJjOWZlMDc3NjI5MTgzMjE4M2QzNTliNzM0MzI2MGM5NGUxMjVmNGFiOGJmNDMiCisgICAgICAiNjkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMSIsCisgICAgICAgICAgIjlhMjgyMGYzYjkwMjlhYmMxODY1ZWIwNmZlNjFiOGQzOTdiNjU1NzJkNjAwNjFjYWE3NGU2MzU2OTMxZTI1NmIiCisgICAgICAgICAgIjg5NzEyZDE4NjY4NGI0ZGUxZTE0YzllYmZlZjE2ZTQwZDk5ZDEwOTQzOTZjNTYxYzg4MzE3N2U1MTI2YjliZTIiCisgICAgICAgICAgImQ5YTk2ODAzMjdkNTM3MGM2ZjI2ODYxZjU4MjBjNDNkYTY3YTNhZDYwOTA0ZTIxNWVlNmZmOTM0YjlkYTcwZDciCisgICAgICAgICAgIjczMGM4NzM0YWJmY2VjZGU4OTdmZGQ2NzBhMDE0NjU4NjhhZGM5M2YyNjEzMTk1N2E1MGM1MmZiNzc3Y2RiYWEiCisgICAgICAgICAgIjMwODkyYzllMTIzNjExNjRlYzEzOTc5ZDQzMDQ4MTE4ZTQ0NDVkYjg3YmVlNThkZDk4N2IzNDI1ZDAyMDcxZDgiCisgICAgICAgICAgImRiYWU4MDcwOGIwMzlkYmI2NGRiZDFkZTU2NTdkOWZlZDBjMTE4YTU0MSIsCisgICAgICAgICAgIjAzMjJkMDBmYzFkOTY2OTRmMzZlYWVkMjMwOTA1NmYzZWExYzFjYzIyYjEzYjY1ZTc5MTE4ZDIwMmM0MmQxNjEiCisgICAgICAgICAgIjMwOTkzODA1MDlkYTc0MzViYjU3OTIxNmZkNTc2NTA2Njg0MmUzNTZhNjQxNmZjODQyYTI0YTllYTFiYzZhOTAiCisgICAgICAgICAgIjk4MDUyM2I0MjhlMzk5YmJkNmZjZGMyY2I3NzFkYWYwMDM3YTJkZThjNzY0OWJkNTMzMTdkZTBlMzdjMzE0YmEiCisgICAgICAgICAgImIwYzQzN2JiZDc5OGRmYjk2NTUwNmMzNDhiNzQyZjEzOGVmMWQxYTIwM2UwNTFlMzRiZGQzYTMwZTBmY2UxYWMiCisgICAgICAgICAgIjQzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4yIiwKKyAgICAgICAgICAiZWE5YTFhMDRiN2NmNDc4YTg5N2E3MDhmZDk4OGY0OGU4MDFlZGIwYjcwMzlkZjhjMjNiYjNjNTZmNGU4MjFhYyIKKyAgICAgICAgICAiOGIyYmRkNGI0MGZhZjU0NWM3NzhkZGY5YmMxYTQ5Y2I1N2Y5YjcxYjZkNDhiMmI2YTU3YTYzYzg0Y2VhODU5ZCIKKyAgICAgICAgICAiNjVjNjY4Mjg0YjA4ZDk2YmRjYWFiZTI1MmRiMGU0YTk2Y2IxYmFjNjAxOTM0MWRiNmZiZWZiOGQxMDZiMGU5MCIKKyAgICAgICAgICAiZWRhNmJjYzZjNjI2MmYzN2U3ZWE5YzdlNWQyMjZiZDdkZjg1ZWM1ZTcxZWYiLAorICAgICAgICAgICIwMjY4NDQwOTM5OTk2YWU1Y2JkYWZkYmNhODZhN2M0MjhhMDRiNTc4ZmUyZGJlNTEyNmE4MmZhZjJiZWNmZjA5IgorICAgICAgICAgICI5YWM2MGNiODFiMTE3ZjFlYmY0MjA0ZmU0MzcwNTQ4ZDVkMmM0NjgwNjM2ODJkYTg3ZGM4MDE3OWJiM2JiYTg1IgorICAgICAgICAgICJhMTQ4YWUyZGU3ZGNiNDk0ZjQ3NjIyMWRmODIxOWQ0YWFlMWU0NWFmNjVkZTMzNGExYTZkYzE0NTUyODZhZTA5IgorICAgICAgICAgICJjZjI2NzI1ODg1ZTc3NDgwOTk3MmQ3ODE5ODA1ZmZmNWE4Yzg5ZDM3Mzc2NDUwNzM5MjQ5ZjU3ZWIxNTFiNzFkIgorICAgICAgICAgICJjMCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMyIsCisgICAgICAgICAgIjA3ZGY1ODZiOTA1YjIzYjkxYWYxM2RhMTIzMDRiZjgzZWNhOGE3M2U4NzFmZjkiLAorICAgICAgICAgICIwMWJmZDkxNWZmNzc4MGYxNGNjYzU1YmQwMzA2YjNhZWRhNWI1YjU5NTVhODI2ZDQ1MjZiMGJjNzY2MTU0ZmE4IgorICAgICAgICAgICJkYTU5NTYwNTc4Y2NkNDg4MmZlOTcwOTJmYmM3MzZmZGE3M2NlZWZkMTAzODk0MDYzZTkzZTIyYTdiNWM0NGY3IgorICAgICAgICAgICJhODVlM2JkYjk2NzE5YTA5Mzc0MzAzYzkxZWQ3ZTIyNzQ5ZmUzYzRkNmI5NjY5OWQ1MDdjNTBhZGNmYmRmYzEzIgorICAgICAgICAgICIxZDZiNWYyY2YxODMwZTMxZWFiZTM5YWViNTE3OTY5Yzk0YTgxY2ZlZmU2NzMxYWEyY2RmZmUyOGM4YWY3MTQwIgorICAgICAgICAgICJmNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguNCIsCisgICAgICAgICAgIjUwMGI4Nzc3YzdmODM5YmFmMGE2NGJiYmRiYzVjZTc5NzU1YzU3YTIwNWI4NDVjMTc0ZTJkMmU5MDU0NmEwODkiCisgICAgICAgICAgImM0ZTZlYzhhZGZmYTIzYTdlYTk3YmFlNmI2NWQ3ODJiODJkYjVkMmI1YTU2ZDIyYTI5YTA1ZTdjNDQzM2UyYjgiCisgICAgICAgICAgIjJhNjIxYWJiYTkwYWRkMDVjZTM5M2ZjNDhhODQwNTQyNDUxYWM3Y2Q2OThkODRiNjUxMjhkODgzNWUzYThiMWUiCisgICAgICAgICAgImIwZTAxY2I1NDFlYzUwZjEwMzZlMDA4ZTcxZTk2NGRhZGM5MjE5ZWQiLAorICAgICAgICAgICIwMDdhZTBjZmQ3ZjRjNmFkMWZmODRiNGE2MDZiYTFjNDc5OGMyZTQ5OWIwNDViNTY3ZDMyNjM0ZmQ5NTVmMjY4IgorICAgICAgICAgICIyNjBhYjY1OWJmNWJlOTllMDgyNmViMzg3MGU4ZjYyZjVhM2NlNzU4ZTZkMTU2YzMyOTliNDMxY2Q5ZGZjNjU4IgorICAgICAgICAgICIzN2VlOTQyMjBkOTUyMzUxMTQ4Nzk5YmU5ZmNhZjliZTI2NGRhZWJlYmEyYmU4NjYwNTIwMWVmOWEwZDk4ZjU4IgorICAgICAgICAgICJlYzYzOGFiZmM0ZjI3ODQ4ZjVkNDc5ZDMzNGFjYzJhOTdmZGQyZDMyN2VjNGM3ZGRjNWE4YWJkNTY2ZGUzNWQxIgorICAgICAgICAgICI0ZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguNSIsCisgICAgICAgICAgIjZiM2Y2YTYzZDRlNzc4NTkyNDNjOWNjY2RjOTgwMTY1MjNhYmIwMjQ4M2IzNTU5MWMzM2FhZDgxMjEzYmI3YzciCisgICAgICAgICAgImJiMWE0NzBhYWJjMTBkNDQyNTZjNGQ0NTU5ZDkxNmVmYThiZmY5NjIxMmIyZjRhM2YzNzFhMTBkNTc0MTUyNjUiCisgICAgICAgICAgIjVmNWRmYmEyMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTciCisgICAgICAgICAgIjk4MDA4NWI1NTVhZWJhYjc2MjY0YWUyYTNhYjkzYzJkMTI5ODExOTFkZGFjNmZiNTk0OWViMzZhZWUzYzVkYTkiCisgICAgICAgICAgIjQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTIiCisgICAgICAgICAgImRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzAiCisgICAgICAgICAgIjRmOTE5MzM3OGE4ZjVjNGMzYjhjYjRkZDZkMWNjNjlkMzBlY2NhNmVhYTUxZTM2YTA1NzMwZTllMzQyZTg1NWIiCisgICAgICAgICAgImFmMDk5ZGVmYjhhZmQ3YWQ4YjE1MjM3MDM2NDYiLAorICAgICAgICAgICIwMTkyMWYyMmY0NzFhMDhhZjgxOWE5NTJlMTgzNjhjZTE1ZjliMDY0ZWIxZDAwYjEyODk5NzgwMjQ0ZmU4YzQ0IgorICAgICAgICAgICIyNGIyMWY2NDM1MGI5MjI2ZmU5NWZmNTRmMTE0Mzk4MzliZmI1NGY5MzljOTE0OTVlNGYwMjc5MDE4OTcyNzNjIgorICAgICAgICAgICJmYTI5NWE1NzE1MWY0ZTkxMWRjMTAyYTc3ZDk1OGI2MjI3MjRjMGZkM2EzNGIzYjdiZWZiOGI4Y2QwNjY2ZTgxIgorICAgICAgICAgICI1ZDBjMDdmMmVjYjdjNGRkMmY0MmI3ZjQwOTEzMTJlM2Q3YjJkZjI2Nzg4N2UwYWNhNzBiNTQxYzRjMWVlYTE2IgorICAgICAgICAgICJiNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguNiIsCisgICAgICAgICAgIjkzMjlhNTgwOTBkZThiZTU3YzQyIiwKKyAgICAgICAgICAiMDE1Y2UyNGE2ZjJiMzczYTE5OTk3YmIyMGMxOGFjNjU5ZjFlZGMwZjI1YzllNWJmNzZkNTY5OTk2NTIwYzI4MCIKKyAgICAgICAgICAiZWZkY2YxNWUyZDYzY2FhZmY2Yzc3YWUwMzg5NzAzN2EwNjE1Zjk4MzhjNTIxMDRlOTcyNTE4ZTI5MGZhYzM4ZiIKKyAgICAgICAgICAiNjMyNDc1MzBiNGNmNjFjNmVjZTM0MjliNTMwNzgxY2YzNDk2NGYzMmFlNTBmMTA5MzQ2MzgzODZkM2I0ZGY3NiIKKyAgICAgICAgICAiMWM1OTdkNGFhN2ZlY2EyNjZjMjdmOGNlNjZhZGUxYmUyNjU5Y2UxNDJiYTVmOTM1ODgzYzdlOGM5Yjg5NTdhYiIKKyAgICAgICAgICAiZjIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA4LjciLAorICAgICAgICAgICI2YWNlMGYxZTFkYzYzZTM5NGEwNjFmNTIyYTU0MmZiZTcxMjAyNTRlMzZlOWY2NWQxOTU3Yzk1NjI4NzgyY2IwIgorICAgICAgICAgICIzNjhmM2MxM2RhZDY1NjcxNzljMWVhMjRmZTgzNWEyNjYzODVlNDY4ODMxN2I4MmIwYzNmZTYzY2YyZDUyZjA0IgorICAgICAgICAgICJhZThhMzhhNTc1NTliYjk1ZDllYmQ1ZmU4YTlhZmUxNDc5OTA5ZWI5OWUwZDNlZjNmMzEyZTBhNGFiYjc2NmM3IgorICAgICAgICAgICJlMjEzMWE1ZmZiNDgzMTgzZmJiNDIyMzRkMzJlNTgxZjU5NTA2NWM0ODk4MjYxZWNkMGFlNTcyYzIyMWMyNThkIgorICAgICAgICAgICJlOTUwYTQwODAxZWY3OTZkNGRkMDA0MDY0NWZjNTM0ZDhlNzg1ODIzNDgzOGVkMTJjNjg3NDBjMTRlMzcxNjEzIgorICAgICAgICAgICJmMDA0NjE3NmJiYjBmNDNkOTk3NTE5YzQwYzY3MTQ5NmZmMzUwYTNmZGY0MjljYzIyZjQ2NGY0MzVmNmIyOWU3IgorICAgICAgICAgICJlMWMzMGViZDUwNTkyN2Q0YTA5NjU4N2ZjMzhkM2Q2NDk0MzkxZSIsCisgICAgICAgICAgIjAyNzNiYTJjNTAyYjNmMjk4NGM1NDhkOWY3ZDZjOWIzZDdmZDQ2MDg3OGM4NGQ2YmUzM2IyODEwNmUxNWZjMjIiCisgICAgICAgICAgIjE3ZWZmNzQxY2RjMjY2ODM0YmVhYTg2ZGE0MDVmM2NhZTYwNmNjNjFmMjU0N2JiOTIyOTIwMzQ1ZmU4ZmJiNWUiCisgICAgICAgICAgIjdiNmFiZjkxZWFlOGM0MjY2MDY0NTAyNWNjN2ZjMDdhNTM0Yjc2ZDM3ODc1ZTNmNDBkNTI3MGMxMGVmNDZjN2YiCisgICAgICAgICAgImU0NWFmYWJjZmZhZTJhOWM5NDExYmQwNGQ2MWQ0YzBlNWZmYzAyMmNiMzZhNjRiN2MzYThjODliZmRlNDM2YmEiCisgICAgICAgICAgImZkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC44IiwKKyAgICAgICAgICAiZmRjYzBmMWU1ZGNiZTUwMTZhNmIwZjhjMjhmNWIzMzFmZjU4MjgzNzEzOGRiZjYyZWY3ZmY2MWJjMWEzNTM5NiIKKyAgICAgICAgICAiYzkyZTNkNTQ4ZDM5OWUzNTBhM2M2YmMyZmRiNWRhOTRiOTg2YTRjZTZkZWUxMDRlOWYyNzRiMTUyNTU4YmZhNyIKKyAgICAgICAgICAiMjJjY2ZkZGEzYjI2YjlmOGU1MTUyNWYzODEwMzRjNTFmZGM5Zjc5MTJhYzkyN2QxYTcwOGNjMmRiYmNkN2JhNiIKKyAgICAgICAgICAiYzAzMWIwMTFjYmE4ZTJkZjhmYzliODgzNjRlZTk2NWYyNDI3MGU0MzQ4NjIzMjUzY2I5ZTU5ZDZmNzk0MDkwOSIKKyAgICAgICAgICAiOTRhN2E0YzkzMDAyNzBiNTdmMjQzOWViYmJhNDY1ODQ2N2FmZGI3ZmU4NmI0ZjFhYWQxZDNkM2IyZiIsCisgICAgICAgICAgIjAwYTdjNDUwYjMwYjJlY2IxOWJiNzA5YTkyMzFjYmZhOWYwZDYxNjk3YTI2YjkwYTk2ZDkxYzI0YzRkYTcwZDciCisgICAgICAgICAgImIwMGI1OTIzYzhlMTJkNDEwOTRiNzA1ZDUwYzc3OGJiZGFjZWM2NjBkNWMxNWRmZmQzYTI0NzhmZDkzMzcwODAiCisgICAgICAgICAgImRjYTE2YjljMTNlNjIzM2I4MjkyYjJmZGNjMjllOWJmM2IyMWE3MTg3OGYzNGVmNWViN2NkNTBhZDQxMjAzNzIiCisgICAgICAgICAgIjVhMGYxYzY2M2Y3MzQyZWM3YzNkZjNkNWFhNTFkMDU4ZGZjY2NlNWZlNjlkMzYzYjQyODQzMjA4NzllODZkNTgiCisgICAgICAgICAgImI1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC45IiwKKyAgICAgICAgICAiMmQxZmNkMTc2NmY3ZDQ1ZjI5NTk0ZjlkNGY3NDM5NDFhZTkxMmE5NzkxMWZmYzNkNjVkY2Q5NjU2MDEwNzczYiIKKyAgICAgICAgICAiYjAyMjRiYTZkZjExMWIxYzEzNjgzODRmMjQ5MmZjNGZhNzI4MGMwNjY1MTRhZTg0Zjc2MTQ1NjNkOTA1MmNhOSIKKyAgICAgICAgICAiNGVmNDQ2YTMxYjQ2M2JkNmMyNTA1NjgwNTA4OGMxZDMxYWJhZmY1MjE1ZjdhOGY4OWU3YjY0ZjIiLAorICAgICAgICAgICIwMmMwZTA3MWU4MzY5MGRjMTRkOWEzN2Q2MWUwYWZjMjdkZjk3ODAzOWRhNjAxY2EyY2VjMWRlYzhmMGQxN2QyIgorICAgICAgICAgICJmZmM0NTBlNjc4MzgwYTAyNWE0MWM3NDYxMThmNTgzNjQyNTJhMTIyNTM5ZWNjYmJiNGFiM2Q4ZDM3N2JkYmI5IgorICAgICAgICAgICIxMWM1OGE0Y2I5NDYyZjM2ZGMzODkyNDg1MDFiZDA4ZjQ4ZTM1MzNiODI1OTFhMmEyMGNmNjJkZjVmNWExZjg0IgorICAgICAgICAgICJlYTMwMGNiMzk0NTcxMzcxNDFhZDhjZDFkMTg1YWJiMTdiYTVkMDNiZTM0OGMwNjc5N2IwOTU1OGYwMzMxYzI0IgorICAgICAgICAgICJiOSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMTAiLAorICAgICAgICAgICI0ZjQ2OWFiNzljYjg5M2E1M2MwZWUzODE1YThiYzA4N2ViNzRlYTM2NjE1YmRkYzMzM2RlZTA1ZmM3MjY2NWFhIgorICAgICAgICAgICI2ZDBiZDU5ZTQ3MjI5ODI5ODM0YjFmOTFjOWNkODFjZTI4ZDY4ZjE0ODI1YTM0NWYzYTRmMzhhMDFiMmRhZTU5IgorICAgICAgICAgICIxMDA3NjRhYWI5OTBhODUwYjExYzEzZDVkZmU0MTlmMWQ5MjBkMDBjZjEzYmY0MzBlNGNhODI4Nzk4OWJlZWJlIgorICAgICAgICAgICJkYTNlNWQ0MDM2MDI4YzhlZjk1NDZlMzUwMTUwZDE5NmYwMDU2MGJhZTE0NzIyOTllN2Y0MjkxZDU0NDYyOWM0IgorICAgICAgICAgICJmNjUyZTM1Y2RlNGY4MDNlMWIzY2EzMzgwOTUxNWVmMjNkMjU0YjhlNjUyMDJhMTRhNDExYjFiYzMxNWM1ZmZhIgorICAgICAgICAgICJlY2I4MjExMTk3ODA5ZGNiNWNlZDY4MmMwOWY2N2U0MWQxNjAyYyIsCisgICAgICAgICAgIjAxNzEyOTY0ZWE5YWI5NzAyOTViODFiMGZiZDgzNTdlNTRiOTM2ZWU4NzcyZDhhZTljOTYxMjcxNmZjYzJmY2IiCisgICAgICAgICAgIjc4NGNhOWFiZWVlYmI4ZmNiNjg5ODIxNjFjYzc0ZTQwYzdjMDIyNDdjMGQwMGUwM2JjOGUxYTcwNTFiODdjOTAiCisgICAgICAgICAgImRkN2QzZGZjOTVlMGIzYzg4ZTdhMGYzN2YzMGUxYmQ1ZmU4YjZlZWU0NjVhMGIzNGNiNTljNjRlYmRiNTdkNmYiCisgICAgICAgICAgIjVmZGZmMmU3MGJiMTljNjBkOTg4ZWE5NTZjZGNkZDFiZTU2MmYyNmZiMzdjMzRkYTUyYTlmOTExYjk5NzQzODEiCisgICAgICAgICAgIjJjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xMSIsCisgICAgICAgICAgIjUyYmI3NmM5ZWEyNjVkNmZhZDEwODM3MmZmYWIyNTAzYmIyMGQzOGQzN2RmMTk5MjU0YTJmNmRlMGM0ZmNhN2EiCisgICAgICAgICAgIjczMDMzNiIsCisgICAgICAgICAgIjAxMGM1NTM0MjM2MDIyNjAxNThhMTcxMzNiNWQzMGVmZTk4ZTlhZWIzNTNiYWIzMzcxZTQ5MWNkYmViZDM1MGEiCisgICAgICAgICAgIjBhNDcwYjlkYmZkMTg5MzM1MTFmMGQwZTM2OTRhOGFjNGJmM2Y1YjZlYjliZjcxYzIzZDk0YzJlNjRiZWI3YjciCisgICAgICAgICAgImM3MjI1MmNhODI3YmQwYzA1NjdiYThhMTBhNmQzYjdlMTg3YjBmZDhlOWU5NWQ0ZmU0ODBmMjUwZGM3ZjAzNDIiCisgICAgICAgICAgIjI5MGU5YTdkMzI3MDNhNzIxM2M2NTIxM2FkZWQ0NTU3NTQ3ODFmM2RiNzNlNzllM2QxYmE2YWY3ZjY5MGZlODEiCisgICAgICAgICAgIjczIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xMiIsCisgICAgICAgICAgIjVmNTk3YTE5Y2JmNTE0MzBkM2M2YTI0N2E1MjM1NDA3Mzg2Y2FlZDBhMjk0ZjNmNDFmM2YzNzgyNTBkNGM1YTIiCisgICAgICAgICAgImM5OTI3NWY5NTU0NGNjYzFkNzdlNWMxNTFhZjEzZWQ2MGJlNTIyZWI4Y2FiZWQ4OWE5YjQ1YjA5NjU0NjAwZjkiCisgICAgICAgICAgImZjNzUxZThiMTJlNjdlNTIiLAorICAgICAgICAgICIwMDNiZDRhYTkwODFmZTdlOWY2OWEyNjlmZWM4YzhhNzM2NzBjMDM3ZTg1YTFmMzZmY2FkNzRlNWI1MmQ3MTBhIgorICAgICAgICAgICI1YTE4YmEwOTViOTgxMGNjNjkzN2JjNzYzNDA5NTFlN2ZlZDc1YjMyNmQwYTNiMGYyNmMyOWNkNWViNjQxNWJiIgorICAgICAgICAgICJmN2UyZGQ2MGFkZjZhMGU2MTMwMmRjYzY2MGNjZTkxMDQwOGI0Zjk5YTQ0MGFlMmFkNmMzMDc3MmMyOWE5ZTdiIgorICAgICAgICAgICIzMjgwZTJlMjkzOWFiYTBiNTRhYjAyMmFhMzI5NTAyMjcxOGNkM2I3ODdiMTEzNzk5MGZiZWJlZmFjZWM4Y2I3IgorICAgICAgICAgICI0OSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMTMiLAorICAgICAgICAgICI4NDBjYzkwMGNiNGIyY2I2N2EzMDRhOWIwMjgyNmRiMGQ2NjczNjkyMmU3ODcwMTNkNmJmMjE0ZGY1NzlmZjBjIgorICAgICAgICAgICJmNDgyMWY5YiIsCisgICAgICAgICAgIjAxM2I2YzA4MGY2ODkzOTUwNWUxODdhNDk0ODJjNzkxMjc4ZGEzYWQ0YTc0N2M0ZjAxNzkxYjkyNDgwNWI2ODIiCisgICAgICAgICAgImY2NDliYmQ4MGRiYTEyZmJiZTU5NDBmMTdmMjdlNzVkNDI2NzdjNGNjY2RmZmQwMDQ4NzcyZTM2OTM0YzY5MTIiCisgICAgICAgICAgIjEyOGZmOTAzYWZlYTVlMWNhOGZlOTQyNGZjOTc5YjIxODc5ODc2OThhNWM1YTc1ZTdkNzA3MGEyYTY3NDg1MmIiCisgICAgICAgICAgImQ4MDViZjEzYmJkMTI5NmJmZjEzMTBhNmQ2ZWQ0NWZkZjg2NzJkNTI0MWU3NGNkNGM0MTk4NmU0MzYyNTUwMGMiCisgICAgICAgICAgIjIzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xNCIsCisgICAgICAgICAgImM2NDE3MTk0MTMzYjVmOGVhNjNkOTU1ODFjODk2ZjViOWVmM2Q4N2NmNjZjMDI5MTY0MGYzNTBhMzI1YjQ5MTEiCisgICAgICAgICAgIjUyZTlkMTQzMGQ2ODcwMzQ2ZTQ2OGU3MTk5NDVkNGUzNjVkMDAxMDc1ZmE5NzBmMmE5ODcwYTFjNjU0MzRiYTEiCisgICAgICAgICAgIjcwMDI0MTJhY2M0Y2M3NGQyOGIyZGVlMjliMzZlMzk3YjY4YzVkNTljZjY3N2MyOWFlZTc5M2E5MzAwYjdiZjQiCisgICAgICAgICAgImM2NzNiM2UwYjYwM2EzNjExY2E5MDI0NGZmMDg3ODc1YzUxNjg4NTdjYjkyYTk1YWFhNjFkZmYzYzIxMmRjNjIiCisgICAgICAgICAgIjA2ZjE3MTQ3YzQ0Yjk1MDdkNWM4OTA3NThiYjM1YmI3MmEyYTVlOWQ0ZGIyNjVlNTM3M2E1YjM0MDI5MDRmMGYiCisgICAgICAgICAgIjFhMTIwNWQ1YmNjNTkwMjVkMzIyMGE1ZGUxYjE4MmE4NGQzMDQxMmI4NDI2ZDQ2OTMyMzIxYjU3ZWY3MjY0MGEiCisgICAgICAgICAgImRkMmNlZWJmNWJlOTY4NDM2YmNkMTIxNjkwNzg4NDgyMzI5M2IwMTBlYzI4ZjBkOSIsCisgICAgICAgICAgIjAxNjA0N2NhYWQ2YzQ3YmYyN2QwY2NmYTAzNDEwMTdlNTY1ZTAyOGNmMjZjOGU2NjBmNzllMDkxZjM1MGNlYjIiCisgICAgICAgICAgImFhY2Y5MmY3ZDAxZDM3M2Y3MTU1MTE5YzA3MjkxN2YyNGYwMWJmNzQ3YmUyZGNkYzQxZDFiZTU4ODUzNWMyZDYiCisgICAgICAgICAgImFjMTcwNGM1ZmIxNmY2ZTVkYzRiYmM4NDUzZjUyMWRiNzMxZWJhNzg5OGU2ZTUyMTJiODBjZTlkYTBmMTU2MjgiCisgICAgICAgICAgIjE4OTk5ODMxMzUwM2RmZDQ0ZTNkNjlkZTliYTljYjVlYjMyYWM0MWNiOGUzNjIxYmExZDI5MWQwYzVkYTI0OWYiCisgICAgICAgICAgIjE1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xNSIsCisgICAgICAgICAgImE2NDJmMGY3MGI0YmQzYjU0YmUyMjAxMTlhN2Y3OSIsCisgICAgICAgICAgIjAwYTAzMzZlNjM2NzUyN2JiZjEzYjBhOTMzYjYzMWM3MmNiMzNlYWJiYzI5MmEwZjhmNzU1NTBjMjIzMGZlODIiCisgICAgICAgICAgIjU3ZjJhZjc2ZDU0M2NjZDEwN2RkMmM4Nzc4ZDNhYzhhN2I1YmI0YWNmYTU3ZjJhZjZhMjMxNDk1MjM1YTUxZGEiCisgICAgICAgICAgImRkYjA4M2UzNzNiNzc3YTk1Y2Y5YzRhOWI2YmU3NzUxYjY1ZmViNjIzYWIzMzQ0MzM2NTRiMTIxMGY3Zjc4MmIiCisgICAgICAgICAgIjE3MjVjNmJhNGZmZDIwZDE3ZWQ0YjZlYzRhM2FmNjRiZDI3MzQ3NTViNzczOWVlYmY0MThmMDlkM2FmZjI4OWQiCisgICAgICAgICAgIjEzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xNiIsCisgICAgICAgICAgImNhMTZlNDNkOWM4MmQ5ZDMwYzhmY2I0MDIyOTMzY2ZmYzdkNzRjYWEwZGY0ODYzNTA5MzE4ZWRhYmE0ZTBkNTEiCisgICAgICAgICAgIjk5Nzc5YzAzNTA0YWZmYTI3ZDg3MTkxYjZiZjY4NmE4NGQ5NzlhMmZkZDViOGE0YzQ5MzIxNDQ1YzZmNzVkMjUiCisgICAgICAgICAgIjIzNTkxN2FkYmVlMmE1Y2ZmOGE5N2FlZjc4YzAwOTIyMTAxMWQ4M2MwZjlkMzcxNjA4NzVhZjczNjc3MThiMTAiCisgICAgICAgICAgImVlYzNiNDI5OTBlNjQzZjYzNzA3Y2ZiYjMwYTdmYTc0YWIxNmE3ZWJmMWM4MzhjM2IyMjYzN2I2M2NjZGNiNmUiCisgICAgICAgICAgImIzNGM2MmViYTllOTQ4YzdhYzkwMzBmMDYzNzcyOWQzZTI3ODBhZTZiZTRkMmZhZjM0NmMxMTYzZDNmOTgyNDgiCisgICAgICAgICAgIjE5M2E3NjM5OWZiNzg0Y2FjZjY4ZmIzM2M3NGJhYmM5ZGRiNjI3NTIwYzBjNjExMjM0NjQ2OGNmMjBhOGUwMmMiCisgICAgICAgICAgImM5YTliZDI3OTEwZTgzMjk3Yjg1ZTg1NzMyNGEwMTAwZjVjZGQ1OTMxYjZhNmRlMDVmOTQ4MzNhYTg2MTBhM2EiCisgICAgICAgICAgIjRiMDhhNWEzOTM1MyIsCisgICAgICAgICAgIjAyNDg1OTIzM2ZiOWRiN2NkMTQxZjRiODc3NmExZDgzZTEwM2RiM2FjOTQyODlkMzZlZjQwZjVlNmU2M2MzMTIiCisgICAgICAgICAgIjEyYWZkZGRkMTY4OGMyYzFjOGQ0ZGIwNDcxOWUxYzZlOGRiZjdkNjBiZTI1ZjFkNjg4ODdmZGFkZGEzZDExMmUiCisgICAgICAgICAgIjNkMGQyNGMwY2RkNzk4OGE1NWM3MTAyOTQwMDgyZDFhYzMxZmIzZWZhYmU3YzI4OGNiNGVlNzJhOTkyYWM5NmQiCisgICAgICAgICAgIjFlZGQ3OGVjNzI4MjczOTcwYTc5Njk5NWMzZTJhMzg1ODFlMjI4MDMyNThlYjRjZDlkYTIwNDBmYWY3NDFjNTQiCisgICAgICAgICAgIjJhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOC4xNyIsCisgICAgICAgICAgIjNiYWE3ZTlhZGEyMTQzZjg0ODgyNWQyMjkzNjcwNGQxYzk5N2IyZGE3Njc2OWM5ODZmYTE1MmI4OThhZWIxMWMiCisgICAgICAgICAgIjEwYjk0NTc5NzY0ZjlkYzkzMzY1MmE4MTAzNjcwNDc2OTU4ZDU5ODY3YWIyNGE5NzEyODQwNTZlOTljNjQ4YjciCisgICAgICAgICAgIjdlN2E2NTM2NDQ4NzBmZTRjN2NlZjM3ZjkwMDE2MDQ4NzJhZGVkZTE2YWFjZWQ4YWE1ZGY0MjA1MzMwNGU0ZDEiCisgICAgICAgICAgIjcxMTIwZDdhYjNjZTgxYTRkMWEyNzQ5OGQxMzgwMThmNjYyMWJkZmMxZDUzZTdmM2MxYTVhYTVkNjJiMDlhNTUiCisgICAgICAgICAgIjRhNTZmMWVkNGYzODVhMDc2OGVhYTJkYTBjOWY1NjM3MDM0YzJlZWY1OGNjMzUxNzhiYzJhNjI3MmNmNTI5YjYiCisgICAgICAgICAgIjVhZGYiLAorICAgICAgICAgICIwMWU2M2I4NmQwYzE1OTk5MDkzZDQ0MjhhZjdjNmRlNjQ4MDc0NWQ4MTllNDI5NjIzZjQ3MmI0NWRlNjFhYTU2IgorICAgICAgICAgICI3YjYwZDk5NDc5MmEwZDExNjU4MDU1OThmNGUyMWZlNjEzOTk5YTk2MjI1ZDBiYmE5OGY5Y2ZiZWU4M2FmNTg1IgorICAgICAgICAgICJmYTA3ODQzOWE3NDI1MTVhZTIxOGVjMzFmOGQ1MDhmMjliMGU1ODc1ZmNhOGYwNGYxMWExYzgyZjJiYjBhZTUyIgorICAgICAgICAgICI4ZmRhZDNjYTUwNzViYjNmNDFiYjU3ODMzNDgxMzNmYmE4YTBiM2FkOTUxYTFhNjQ5Y2EwZjk3NThiMjBjODcwIgorICAgICAgICAgICJmZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMTgiLAorICAgICAgICAgICI3ZWIzYzk4ZTQ2ZmQxYjVjOWZmMWIxMWJlMTYxOWI1NjYwNTdmMjZjNTVlMjg4ZjQ4NDRjY2Q1MGJhYTkxYjAzIgorICAgICAgICAgICI4ZDYwOTU4MzZmNzcxZmMxYzQyNWZiNTMzZWYyYjFkYzRhM2U5NDliYjk5NTI1YzI4ZmU4YTNlOTMxNzhmM2EwIgorICAgICAgICAgICJhYzk3ZmQ1ZGFhODFiNTkyODYxODhlMTdiNDRiMzc3MWJjYTg1NWQ4NWYzYzRkMjg2ZjEwNjgxMGY0ZTUyMmVhIgorICAgICAgICAgICIwNTgzNGYxMWEzMWU4OWMzNTk5MGM1MWIwODBjMDNhNjYxZTNkNGExYjk3YTJjMjc5NDBmNWIyZTQxMmI2OTllIgorICAgICAgICAgICJhNjEwZTg5OTZhZTY3MTVhYjZlMjA5NjliNmFhNTRjYzcyMzE5ZGZlZTYzYmQyY2FjZmQwNjA4ZDQwZTJiNDAzIgorICAgICAgICAgICI5NWZlNTVkZGE1YmVhM2IwZjliOTRiNWFhZGMwOThkZDU2OGRhMzk1ZGIyZDQ0ZTQiLAorICAgICAgICAgICIwMTVjZmFkOTZlNGI1N2Q5Y2JiNTc4Yzc5MDc0YTJiYTg2OWMwNjAyODg2OGM1YTNmY2Y0YTVlMzYxODMxYmQ4IgorICAgICAgICAgICJjMDJjMjViMTJiOTAyMzRjOGVhNDgyMmZiNjVlODJkMDkxYTkwZjg5YjZjMTE1NmU0YjQ0ZDc4ZDMyYTY0NzM3IgorICAgICAgICAgICJkNjE1ODdjMGNlM2Y0YjM0M2U3MWY4ZjdhODRjNmY4ZmM4YWVmOGY0NjRjOGIzNTllNGZiMThhZGM2OTljNWEwIgorICAgICAgICAgICI3NjQ1Mzc1NTkzMGM1ZjZmYTcwNzFmOGZlY2I4NjMxYWE0MTRmNTA4MzUwMzhiZTdhYjA1YTRiMDUwZjNmNTZlIgorICAgICAgICAgICI4NiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMTkiLAorICAgICAgICAgICI2YTQ1ZWUwYjdlYTgwMzY4YjJjNDI5YWYyODgxNTNmNDU2Y2M2NjMyMTdhOGZmY2QyYWEwNWM1ZDMyMmRiNzU3IgorICAgICAgICAgICI1NmNkYmMwZjY4NDE0MWZlNmJjYWUxODliZjI0ZGUxYzhlZGQ1YjExMzY0NGE0NTAwZDBkNGZmNTgwMDgzNjQwIgorICAgICAgICAgICJlMTJhMmM5NWRlNjllOTU5NmJmYjFkNDQzNjU3ODZlMTY3ZDAyNWQ4OWVhMmY4ZDEzYTBlNjQ3N2YxM2I4NWJiIgorICAgICAgICAgICJkY2YxNjA3NzRiMTgyNThjYTBiZWMwYmQ3YmYxMzkxMWIzODk2YjQ4ODlmYTNkZTA0YWIyNmJkNjgyYjRhYjQzIgorICAgICAgICAgICI3YzBjMTdmMzUzYTIzYTQzZTkyZTIwZTdmODIwNjk0ZTQwM2FhYmRkNWQxOTZlOTM4OTViNDc5MjU1ZGY0MDMwIgorICAgICAgICAgICJhZDhjZTNhNTNkMTU3M2JlMjI2ZDgxYWExOGU0ODU4OTU3YTJkMGEzMzU5YzJlN2EiLAorICAgICAgICAgICIwMTY0ZjBkYmNkZDk1MjExODZhMjgwODRhM2YzYWU2YWFjYjY1OTZiODU2ZThhYWIyZTcyYTdmMjMzZDYyZDJkIgorICAgICAgICAgICIzZWYxOTZkMzc4N2U0YjA0NTczMWRhOWM2MTUwYWQ5ZDVmOTE4YzZiMDZjOTJhMTFhMGJmZDVlZmNjYjdiMDNhIgorICAgICAgICAgICIwMTA3MjQxNDM5ZDM0ZDMxM2QzNWIzNmEwZDhjYTA4MTNjMzYyM2IyYmQ3OGYyZTNhOTcxOTk2NDhkYTM1ODA2IgorICAgICAgICAgICJmZmM1OGVlZDMzYWM5ZmNmNzk1MzhmYTg4OTE1YjFhNTc1ODU3OGI5YTJkYjAxMzgwNGJmMzJlN2E1NmRjNzI0IgorICAgICAgICAgICIzNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDguMjAiLAorICAgICAgICAgICI5MmE0YjRiY2UzZGFhMGE3YTY0YjcyYWQ4NzFmM2FhOGVhYjVhYzQwMTFhYWFlYTJjZWViYTg5Mjc3YzY0MzI5IgorICAgICAgICAgICI1NzI2MjZjOTU2ODg0ZjQ4NTRmODYxM2QyMjUxOGIxNGYwMzhmY2FmOWU2OGUxMzAwMmZiMGEwMGE3OGNjMmVhIgorICAgICAgICAgICI1MTQ0ZmMxMzExNzZkNWU1ZDY3ZTEwNmE5OTg3OWMiLAorICAgICAgICAgICIwMTI0ZmQ4YjJhY2YyMjM3ZmM3MWEyZWU5N2UyNmE0ZGFiN2RlYTgyOWUxNWJlYjJmOGE3Mzc5MWEwYmExNTJkIgorICAgICAgICAgICJhNWIwNmFkZjM0MWQ3NDA5ZThkM2QzMTc1YjUxMDEzNDMyNWEzNTMyOTdhOGQ2ZDY2YzA5NzAwMzIyZWVjNWUzIgorICAgICAgICAgICIzZjYyNDg2YTIxMTEzMGQ3NGM3MGRkOTI1ZGY4NjAyYWUzYzRjNmNjYWY5M2NjOWE5NzBkMWU4NTMyNjBlZWM2IgorICAgICAgICAgICI5NDgxYzVmMTMzN2U5ZGQzYWVkYTg4ZDg4Mjk5YmUwODA5NWI3MTVhNWIyMTY2ZTYxN2M5MjY3MjJjZWRkNmVmIgorICAgICAgICAgICIzNCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAyNy1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICIwNWYzNzQzNDg4MjYxYzZmMDYyNWU0MzJmYTZlYjg3ZmIxMmIyNjIxODI5MGJmZTM5NmJhNzZlYTQyNjEzMjJmIgorICAgICAgIjgxNDNlNGI0ZWJjZDVkMmFlMTliMGY5ZDhkY2QyZmM3ZTY4MjMyMDhhNzUxODMzZDNiNGU4ZTM4N2MzOWY4ZWQiCisgICAgICAiNmJiYzlmZGFlYzMyZDNlYTlhYmJmZjU3NDcyM2YzZjEyMjk5OTA5NjNlYTRmZDlmYjU0NGY2NDI5MGFhMmVhNyIKKyAgICAgICJkYTYzMTE5MWEyMGRiYzk0MjNiNDYxMjMzYjkzNzI0OWYyZjRlYTEwOTI4ZmFlMmE2ZmU2NjRmMTJjMDkyM2VkIgorICAgICAgIjExIiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjAxNGNjMzI2MzI1MmY4YzRmYjc3Y2Q1N2ExNDIwYzA0YzA0MzI3OGEwYzQ1ZTdkNDIzNzk0OTNlMzQwZjljZjEiCisgICAgICAiYTk2Zjk2MDYzYWI3NTlkMTYzMDQwNmFlMjg2YTE4MzRiNmQxZGI3MWVlNzIyYzkzNzQ1ZmRkNGFkMzNmYWE3MiIKKyAgICAgICJkODkzNTFkYTY5MWE3ZDBhNzFkMmM1NWM1Nzk3ZDJjY2IzYjQ2MjYyMDhiYzVmNWM4NGZlNDMyZjY2NGRjMzBlIgorICAgICAgImRlMDk2M2U2NTg0NTJiMmFkNWVmYTQ5MzVhMTIyZjQ2MWQxZWFiODQxYzhhZTBlNmU4MmZjMWZlZTg1ZDE4MWMiCisgICAgICAiYmQiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDkuMSIsCisgICAgICAgICAgIjgyZTVjNWFhZTY0ZTYwOGIyNzUwNGI5MWRiIiwKKyAgICAgICAgICAiMDE0NTgyZGFlOTM1ZTZiMmFlZmY3ZDcyNTA4OWRhYjA1OGM2NzhiMmVlMjhiY2Q0NDRhNzJiZGZhYzMxNDYzZSIKKyAgICAgICAgICAiMThlOTRkN2I1ZWNjODRhNDMxNjk2YTFjZGQ3OWY5YzA4YzMzZTFkNGIzMjJkZDI3N2I1MDNhZTZlNGY5YzMxNSIKKyAgICAgICAgICAiMzA1YjQzNzJmZTQ1ZmU0YTdlYmJmYzRhZTU5MGZhM2M1MjBiZjgyODE1OGY3ODIwMjk5ZjA5YjEzNGVkZTExNyIKKyAgICAgICAgICAiYjY3MmExZWFjMmYwNTBjMDQ0YjI1NWNhOGQ0NTUyZDRiNWYzZjU3Yjg3MzRkYjI0NzQ1MDA3NDRhNTMzNzUwMCIKKyAgICAgICAgICAiNWUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjIiLAorICAgICAgICAgICI3N2UwZmJkY2Q2ZTA0OThmYzU2ODRmZjEzZDRjOWY1Yjc4MGU3N2UyNDY0NjM3ZmY2NmVhYTJkN2Q5YzNkZWZiIgorICAgICAgICAgICI5YjBlM2EzODM3NzNkYjk3YTRmYjQ5MWJlYjIxMTRmZGVhMmMyYTQ4MGZmYzIxOWI3OTZhZDgwNWQ1NGZiZWMxIgorICAgICAgICAgICI3ZGNiMzRiMWRhMTc5NmNiOWNkNWYyNDE2YWI1ZTc2NmY4ZTAwNjkxOGViZWMxODIyOTk4YTI4ZmZmYTYyMzBjIgorICAgICAgICAgICIwNzg3MjZmYmEyZTRhN2IwIiwKKyAgICAgICAgICAiMDU5MzI3Y2VlNzI2ZmZiNjAzZThhOWZjZDU3NGFiYTljYmRmYzM2YzBhYTY2ZmNmZTM1NTVjZjJlZjM1ODJkMyIKKyAgICAgICAgICAiMjIwZGY5ZDZiZjhhNzhlM2ZmZjBjMTI5YjNhYmIzZGM3MTIxMTJhMjA1NmJjYTA4NjM2NTU0YzFhYzU3ZGY4NyIKKyAgICAgICAgICAiZjM2NjQxNTI2ODhjNmFjNzJlNmI4OGY1NjM3Y2Q3M2YxNjY5ODljODI5MDlmYjY3YmMxZmEyZTJkNTIzZTUxYyIKKyAgICAgICAgICAiOTE4ZjJiYmVjMWQ3NTIwMmFmMjQwYTYxY2QyZGNjNTU1Y2FlYWU5YTY4NTcwZDc3ODEwY2YxZGY4MTIzZmY0MSIKKyAgICAgICAgICAiYzAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjMiLAorICAgICAgICAgICIwZGZhNWJhYTFjZGRiODM0NzA3YTVmOGNjNmVjZTU3MWE3YTdmY2E1Njc2MzYyZDJiMjM3NDFhOTU3MGFlMjYzIgorICAgICAgICAgICI4ZjZiMWMyMzg5ODUzNjc1Y2NjNmNjMWI0YzZkYWUyM2NkYTcxYWI5NmI1YTJmMjIxNDU3NTA0MzNlMmQ2YmE0IgorICAgICAgICAgICIyNzZhYzFmZjlhNDhhZmM5ZjMxMmY0MTMzNzg1Y2E1YWYzNzQ2Njc0MzE5YTY3NTdhMTY0ZTM0ZDE0OThiZDU1IgorICAgICAgICAgICIzMDkwMmUzMjE4NTVlM2JlZDQwODgxZjAwNTQyMjU2YWEyMWE0MmZjIiwKKyAgICAgICAgICAiMDFkMTk1NDE2OWFmNTg5OTNlMTQ3NzJhOTRmMTliYzQ3OTI0Y2NkYjJlOTBlZTQzMzZmYjZlMDg0OThhZjRkYSIKKyAgICAgICAgICAiMjY1MWEyYjc4MzZjMzEzYTU3Yzg2MWI1NTE4NGVjM2IxNWZhYzgxNDUzNTFiZWM1YTcyNzBhM2FhODY5NGRiNCIKKyAgICAgICAgICAiZTlhOTJjYjkzMjdiYjdhNGY3YjcwZDI0NGVhZjllYmZhOWVkZmQ0ZDU0NzgyZjNmOTcyNjI2OTViOTdkNDE2ZSIKKyAgICAgICAgICAiNTI3YmU0ZWEyZGVmZmU2ZWI1ZTA2Y2RhNmYwYTdlNDE2Njc3YWMwZmQ2ZjgxOTVkNGNlMjg5NzBkMmNhNDExYSIKKyAgICAgICAgICAiMmIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjQiLAorICAgICAgICAgICIxNjdlNzk1NjhjNzczNjY5MGMzYmVkYmJjOGQ0MjRlYjUzNmExMjg1NWE2MGNkYjEwZjk0YmExMTIzMTdlOTE3IgorICAgICAgICAgICJhMWI3ZDZmY2ZhYTM0MzhkNjhlZTA5ZmQ0NyIsCisgICAgICAgICAgIjAyOWEyYjkwODYxNGVkN2E1ZmFiNzJmMmExYzhlNTQ4YjZmOGI4YjQ1Yjc1ODFmZDI0NTFmZTQ1YTYyMmZhMGYiCisgICAgICAgICAgIjA4ZGQwYmEyZThmM2M0MTcyMDFlYTAyNzc5MTAxODRmMzc2ZGE4MDNmYTcyYzUwZDM5YmUyODgyNTI2ZDFlODUiCisgICAgICAgICAgImRmOWFiMTc5NzU3NjRhY2ZiMjA3MzY2ZjZjZDJjOGIxMzZhOTk5ZGFhZjQ4ZjFjMDhhOWVhMWYwODQyNWMyMWIiCisgICAgICAgICAgIjY1NDE4MGRhNGFkZjEwOWI0YmM1YjgxN2RkNjdiZjdkYWFiNGEzODQwMzRhYjRhZGU2OTQ4OThjZmMyNzJhYjYiCisgICAgICAgICAgIjUzIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS41IiwKKyAgICAgICAgICAiMGQwM2Y3MTI4NGYyZTQ4MzI0MmQ5MjNmZDFlMTUzYmMxNjBmMGNkYzJjMGI3NmYxYmMyY2Y3ZDFiZTljY2M3ZiIKKyAgICAgICAgICAiYWZhNmFmYzM5MDM0MDE4NDA5Y2NmZDE2MjhhNzBiMzU4MzMzYmQ5NmVlZDNhZGYzMTQyYjE3NjBiZjhhOWJiMSIKKyAgICAgICAgICAiOWVhMjQ3M2EyZWQ4NWM5MWNkNWYwYTVmMmQ0NjMyZDYxNzY0MTlmYTFkOGNjODhiNjcwODQ3NzcxMWVhNDk1OCIKKyAgICAgICAgICAiYTgzOTAxZmVmMjg0ZjVhNmM1MDI3OThjOGJkMGEzNTBmMmVhODNlZDE4MWViOTcwZDMwYjc4MTM0YzhlMWQ2NCIKKyAgICAgICAgICAiZjBkMTQ5NWI3MDE3MjQ1ZmE2OWJkNTc0MjdmNzQ5MjBiYTBlZWRlOWNiYTM0ZWIyMjI3NmIwZjI3NDEzYmEzZiIKKyAgICAgICAgICAiMGRhOGViZGVkYjliMGM4MDBlNDQ0ODFkMDFlNmJiYjBkZmViZjlhMTVlZjZhNzAyMGIyYzU1ZWUwMjc5MTE3OSIKKyAgICAgICAgICAiNmY2NmY0M2RkODQ2MDIxZjhkNmY3ZTAxYmI4MDJiYWMwOWZkZTliOTA0YmVjZjk5OTBlNjg0ZTY1NjlhY2FlYiIKKyAgICAgICAgICAiM2NjNjRkY2Y1ZCIsCisgICAgICAgICAgIjA0MjI3OTFmZTdiNDNlMWYzMTlhZTY3ZDkxOGM1OTg3ZTYzOTM2ODFhMTg2MWMxZTcxZGQ2ZmNlMTkyMzcxMGQiCisgICAgICAgICAgImJjZWQ0MzAxZmRjZDRhYWQ4ZjRmYzI3ZGZhMDJhOTRkOTFiZDk2MjAwYWVkOGIzYzVhOTZlZmVlN2QxMWFmOTAiCisgICAgICAgICAgIjg3ZmI4MTkwNWM1ZGYyYzI0ZWQ3ZWQ2M2Q1ZmMyMmJhYmQ2YjllM2I1N2NkMjU0MTlhNzgxN2U5MzYxNmU5MzQiCisgICAgICAgICAgIjU0Yjk1ODUzZmU1MjA0YjU4YzA5OGI0NmRlMGIzZjAxZjU4Mjc2MzI0OGMyOTBiOWU4MDk2OTY1MjQ0MmE0ZDgiCisgICAgICAgICAgImU1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS42IiwKKyAgICAgICAgICAiNGFjYTk2M2YxNGFjZjZhNzljNTEwODFlZjI1NzE2NjY3MWUzYjQ1ZmVlMzEyNDA3YmEzY2Y2ZDcxMWFiYTFhZSIKKyAgICAgICAgICAiMjVhNGE4YmE0NTQ4MTlhMzkxMmEzMTJlOTkwZjFmYTc0Y2JjYjcyNzc3ZjFjN2M2NjNhMmQxY2RiMmM1YzAwNyIKKyAgICAgICAgICAiNGQ0NTE2ZjQ4NzE3ZGUxNDAzZThmZjdkMGY5ZGU3YzdjODUxZjNlMzUxMTY4YmE2YzQxNGJlZDVkNDJiYWU1MiIKKyAgICAgICAgICAiN2I3MjRjZWI4MzRkNzliYWNmNzAyYzU2YTYyM2MxNjg4MDg3ZGM5ZGU5NTM4ZWE3YzdjNzYxY2QyZmQ1NzhmMCIKKyAgICAgICAgICAiZGMzZjU1MmZmYmQ0YWZjN2Y0ZWM3MTIyZmRlYzFhM2EyYjEwNGQ1MzJkYjgxY2I5MTQxODU0ZDU3ZGNmNTRiNyIKKyAgICAgICAgICAiNTYwMWE5MDVmYWVkYTY1YzJhN2E3YmMyYjAyOWFkMTJkZDdhNmFkMWI0MGJlMDQwMjhiNGI1YjYzNzMwZWY5OCIKKyAgICAgICAgICAiNDQ3M2YwYzQ4MjE0ODk5M2MzNmI0NGU1NGJlOWE1ZjIzNGU3NDMyOTJhMTJhMzRiZjJmZjczYjdmNzk4IiwKKyAgICAgICAgICAiMDQyNjQzYzAzYWRhNzI0ZTJkYmIxOWNjMDdhZDBlNzUyMjI4YjlkMzZmNjUzYzZhOWMwYzI5MzU2Y2Y0YzNmMSIKKyAgICAgICAgICAiY2ExOTM3NzZkNWZlZjQzZmM1NTQxNzcxNjY2OWRlOWFiMmFkZGQzZWE4OGE5MGFlOTM5YTVlYjExMDEzZTIyOCIKKyAgICAgICAgICAiYWUwODE2ZWVmYTRkZDQyYzZjMDhjODc4YmQ1OGI0OTA0MDI5NmE4NjNiZmQxMTI4NWY4YmJkMzE1YmUxNmQyZCIKKyAgICAgICAgICAiNjVkN2Y1ZTVmMjZhYTk3MTQ3Zjk1ZjVlZTM2Zjk4OWFhODk2ZDdmOWYxYjMwNTFmODI0MjQ0ZjkwNTk2NzIzZCIKKyAgICAgICAgICAiMTEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjciLAorICAgICAgICAgICJhNzVhNDU4MCIsCisgICAgICAgICAgIjAwNGZlNGM1ZDkxNDNjODUxZTQ2MTY3Y2MxODE1NzVjMDc1ZTY5Yjk4MWY5YzEwM2Y5ZDliMDExZmY4YjI5YmEiCisgICAgICAgICAgIjU1YTQzMTg3Y2U4Nzc3OTk2MzE3YTAzYzlkOTBhZmMxODkwYTlhZGVlYzhlYWMwODdmOTliODE1ZTZlYjJiODciCisgICAgICAgICAgIjFkY2RkYzgwOTIyNDlkOGY1MTNjNmM1NjA5ZmRhZTJjZmM2YmYwMWZjYjgwMjVhNGY3OWJmMTJhYThlMTA5ODIiCisgICAgICAgICAgIjlhMGJiMzhhMDlkMWEzOTM2NWUwNDA1NjUyZGFlNDUxZTVjMzI5OGY0NzA0MDU5OGVjZDcwZTRiNDAzMzg5YmMiCisgICAgICAgICAgImQ1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS44IiwKKyAgICAgICAgICAiN2NmYzAwYTY0M2FlOTk3OTY4MDFlZTNjZWJlMmNiYjFhNmJlMWNhYzE1YzY0OGQ0YmEzMzAxMjkzODcxYTk5ZiIKKyAgICAgICAgICAiN2NiMTQzYzEyOGM3N2Y5NjMxMWZlNDNhMzkwMWRmMmMyYTVjNDA0YmU4MzE0Njk3ZTA5YjJlODBhYWM2YWMzOSIKKyAgICAgICAgICAiOTcxYmJlMGRiYzI2NjczZjMxOTU5ZjIzOGVhZmQxNTAxMmU0OTY3ZDMzNTUxODkyYTNkMzY1MWZlNDQ2OWIyZCIKKyAgICAgICAgICAiYmE0NTU3ZGY4OTNhYjZiOTRmMTMyNWMzYTEiLAorICAgICAgICAgICIwNTk4NWE0Y2NlZDBlOGZkYzU4OTI0ZWRiYTllNDAwZTY3NDgyMTRmOGQwYjgzYWFmYTIwMzUwYmJmMGU2ODc2IgorICAgICAgICAgICJjYTVhOWFmMzk3MGRkNjNiZTY4NGY5OTM2ZGIyODJmZjhiNTNjZjVmMWJiMWNiZjQ0NzMzMDFmMzcyZDk5NDhhIgorICAgICAgICAgICJmOTM5MWIyMDAyYjJiZTNlNDVmZjI0YTJkODk5YWU4YjUyYjY3MWIwNGJhYjQ2MDEwNmJlZGNmYWMwMTM5NTlhIgorICAgICAgICAgICI0ODE4OTU5ODQyN2ZiOTU3MTU5YTZkMzI5YzE5ZjM2Y2E3NTM4MWI5MzUwZDM0Mzg5YzE2ZTE4MGE4NTFlNDU3IgorICAgICAgICAgICJjZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDkuOSIsCisgICAgICAgICAgIjNkOTBkZTcyMzU1MTU5NDkyNDVmNDkwMzY4YzFmNDkzODNlNDRjMWRiNTFkZDUzODViZGZmNWJkMzQ0NTBlNjMiCisgICAgICAgICAgImNlNDIxNTBiNDQxZWY5ZWJjNzI5YTkwMzM0NTNmMGE5Mzk5ZmY2ODYxZjUwNjViNjY2NmRjMjBiMjg3MjAzNDIiCisgICAgICAgICAgIjhlNzJiZGY0Y2I3NDhhYzhkNGE1NWY0M2QyMjM1ZTBhYjJlYzJjZjJiMDZhMDE1ZjQxZTM1MTY4YWM3ZTNjNTYiCisgICAgICAgICAgIjhmMmYxNmVmNTcyOGIyYmU5NTI0OTE5ZDM2NzZkNjhmNTM3ZWZlZjI5YTA1YWY5N2NmZWQ3Y2U5ZWM0NWMxMmYiCisgICAgICAgICAgIjE2NWU0ZDdhNGZlNzJiOTllYWJmODMzMTZjZGYyYmQxNjQ0YjgyZmExM2U0ZmZjNDQ5ZTc2ZDQ0YzM4NzY5NjMiCisgICAgICAgICAgIjUxNDc4YjFhMGY4NTk2MTVkYTkwNWYyMGU2OGIyNDU2NWM4NzNmODM0ZTU5MzQ1ODUxOGFkZTQxYzE0MjgxNzQiCisgICAgICAgICAgImRhMGM0NzY2M2E3NjAwYzY1MDI1MDE1ZTA5YzEiLAorICAgICAgICAgICIwMDk4MTNiMmZkYzUxYmZmODhkZWRiZWNhM2IxNGFlNThiYzdlNzE0YzFkOTJkNzQyNmU0OTQ0ZWY5M2VmOWNlIgorICAgICAgICAgICI2ZDEwZGM5ODllYWZlNzM0OGQwYTk1Zjk5ZjU2OTQ4ZjcyNjAyYWM1ZTg2MTRmNmIzOGU2OGRhNzlmNDhlMjc2IgorICAgICAgICAgICI4ZWRhNTg2NGNmZjI1NDUxMzdmM2NmNGQ4MWE1YWViODliMjEwNzI2NzRjYWViYTAwMDcxMDBjMDdlZjRkY2JiIgorICAgICAgICAgICJkMDVhZmJhZDllOGIzMGQ3NDZlYTM2MGQ2Y2Y4NzVkMTBhNjdhNTdmNGI1ZGY0MTIxZDcyOTdhNGJkY2UxMjhjIgorICAgICAgICAgICJiNSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDkuMTAiLAorICAgICAgICAgICIyMGU2YTNmZTE2YjUyMWIzYzFlNmFlOTkzZWM2ZTg0OWE5YzExZjIwNDJhMmQ0Y2U4OWNmMGY5OWUxYjRiOTQ3IgorICAgICAgICAgICIxZGE5YTE3MzBkYTg4NTFmYzVhYjNjMDkyMjA1NWYwMDM3NThiMjM1YzI4ZGU0MDg4MDY2M2ZjZDgwMTQwNzE4IgorICAgICAgICAgICIxNWRkMDY0OTRhNTQ3Y2NlYzMzNDhlMTJkNTM4ZDVkZmI0OGY4MDdiNTllOWI3Y2Q4MWYzOTFjMDJjMDE2Y2Q5IgorICAgICAgICAgICJjMWE4NGY5YzU5NTE3OWQ4ZjIwMDI0MmE1NjY4MTgyY2YyY2JhM2I5ZmI2ZWFkNDUxZDZkMjdkOWM3MzYxNTI1IgorICAgICAgICAgICJkNjg4YjU1MjMzZmY0NTI5MWNjMDc0MDJkMjkyZGUwYmU4M2QxNjQ2YzQzYzI4ODgxZmQ0NTU0OWIxNGQxMjYxIgorICAgICAgICAgICJiMTJmMTIwNDM4Mjc2YzZiM2Y5OGY1NWJjZjE3ODBiYzFhOTFlYjExZDAyMjllMWQ3ODY4ZDdmZWU0OWQ2YjkxIgorICAgICAgICAgICI2OGUyNGRlMWNiNGYwZjIyZTY3Y2JiMTU2OTIwNDExMzAyNzI5NGIzN2VjN2ZhZTU4YmM2NGU4MjVlYWE0ZDU2IgorICAgICAgICAgICI5NGQwMDU4ZjJjZDRjN2QyMTQxOGRhM2MwMzA3ZmEyZjA0OTJlOGIzNzc1OGQzZWE0MGE0ZTMwZjYwIiwKKyAgICAgICAgICAiMDFmMDJiM2Y4MzkxMjNhZmYyYTNmNDNkYTVhYWEwYjZiYmI2MGMwNDM3ODJmNDk2MmE3YjlmMDI1Yzk0OGUzNCIKKyAgICAgICAgICAiMzIyZTk4ZGUzNzAzZTNiYjQ1YTcwNmEyYmIwNTA5YmVkOWY0MTA1MjhjODgxYWI5YTFkYzAxOTcwNjhjMzcyOCIKKyAgICAgICAgICAiYzM3MTZkODM4MWQ5Zjg2NzgwZmU3OGE2NDM0YjcyZjUxZTY5Y2QzMmE3MjEzY2NlYTc0M2IzM2MzYzk2ZWIwMCIKKyAgICAgICAgICAiNDJmYjk4YTcwYzJlNTJmYzE3OGFiMmNiOWZmOGJkZGRjMTA0NmIwOGUwNDdiYWRkZDY1YTQ1YTRlNjUzMzlkNyIKKyAgICAgICAgICAiMjUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjExIiwKKyAgICAgICAgICAiNmViNDlmOGFiYzViNDk0ODcyMGE3ZjQyZjc0MDg0NzgwMDIyZTBlOWY5ZjY4ODg2ZDlmMzRlN2Y3ZjhhYzE1NCIKKyAgICAgICAgICAiZGJlMTljOTFiOGVkMzhlYzAzNmI2MTQyMTJjYTM1Zjc5ZWQ4NzQ1NzllMjQ4NWRhYzgyMDVkMGU1NmI0YjRjMCIKKyAgICAgICAgICAiMDAwYThhNzVhNmQ0OTdmYzUxMTkxMTFhNDBkYjUxM2RmNjYxOTY1NWI1OGExMTZmYWJlZTA4MmJmYTc5MzczZCIKKyAgICAgICAgICAiOTE3NjU2ODcxMDExMjQxODg3ZjQ0MjYwOGJkMWViMWQ5NWQxNzY4MDY1ZmE2MzMyNGZhYjI3MzZmOTIyNzA1YyIKKyAgICAgICAgICAiZjI4OWZkZTkyNjc0MzM4NTkyMDdhOGJjZjEyZDE3ODYxY2ZkMDYyYjg4ZGY3ODg3MGQ1YTVlOTExMzFiNjMiLAorICAgICAgICAgICIwMmEyZmEzMjcxNzc5NjcxMGI1MmIwNTE5MDZjZGI5ODE1YjJkMDM2NmMwNzBhNzhmZjcyZDQ1OTQyZDdhZGRlIgorICAgICAgICAgICJhZTdlZGM3M2NhOTMwMWYxZjlmYWU2OGEwYmQ0YjFkZjA1YTlhNjcxZjhhNWI3ZDQ1Y2QxMWZkYzBmMGJhMDlkIgorICAgICAgICAgICIyNWNlYzNiNjMwM2Q5YTY2NmM3NjMyNjQ5NmVhMzFhZTM4ODZhMGMzYjdkMjI3NjJlZWEyNzg5MzRiOTZhNGY5IgorICAgICAgICAgICIwYTUwMWFkMzA4OGY3MDJlMTQ3NjNjZTMzODQ2ZTJmZGJlNmQ2NjFjYjgyZTZkOTg5ZGYzYzVhYzhmZTQwYTg1IgorICAgICAgICAgICI2MiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDkuMTIiLAorICAgICAgICAgICI0NWNmZWMxMzJlZTU5M2YwYzNmMzgxM2QzY2I0NDllNmU1ZTYxZDEzZGU1MjlhZTNlNzFjOTk4ZWE0NTYzNTljIgorICAgICAgICAgICJlNjZiODIwNDViN2FjNzk3ZmU5Njk4NWRlYWJjNTEyMjUzMGIyZTI5ZWZjOTc1ZWU5NjAzYjRmOTZmM2ZmNGU1IgorICAgICAgICAgICI5YjBlMzVhOWFkOTJmMmI4Njc3OTRkOGUiLAorICAgICAgICAgICIwMzliZTQ4ZjEzM2FlN2YwYjE5ZWRkYjIxMzU2MDk3M2EzZTJhMTE0NmM3OTQyZjgyNjRiYmE1YWQwMDg2OTJkIgorICAgICAgICAgICIxMTM4MDFmYzI3NzhhN2UzM2E5ZTExNWVhNjMyZTUwMTg4Yzg3YjY5ZThkNGQ4Y2NhNDhhYmY5ZjI1MWVmYzAwIgorICAgICAgICAgICIxN2I5OWVkZWU1NjZkY2RjMGJjNThkYmY2ZDY3YmY4NjNkYjhhODlhYmRmMTJhNzdmMWI3MGRlNDM5ZDE3NmYyIgorICAgICAgICAgICJlYWFkYTU0NjRjNzlhNTg0MjcwY2E1MTRmNDhmMWRhZTg2NzhlY2YxYWMyOTZkMDdjNDY4OThiYWQ0MWFjYjE5IgorICAgICAgICAgICI5ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDkuMTMiLAorICAgICAgICAgICIyMjUxMjk4NzE1N2NmOWI5YWI0ZTUzMzdiMDk4OTFkNjNjZWMzNzQzYzBmN2JjOWQxODJlIiwKKyAgICAgICAgICAiMDJjNzc1N2Y5OTkzZWY4YzZkNjBhM2Y1YWJlZGNlYTUzNWRmZjU1YWI5ZjRmNjJkMTI1NGJmMjYxZGQ2YTJlZSIKKyAgICAgICAgICAiNTJkYTYzNDlmNDdiOWIyODlmMWQwZWEzZTBmZjA4ZjQ1NWZhNTQ4NTY1OGU0MjE3ZjQ0MGMwOGI5MGFlNGM2YyIKKyAgICAgICAgICAiYzI1Njk3Y2I4MzM1MzFkYmI0NzQwMzI1NDMxMDBiNWY5MmI2NzgxOTVkZGJmYjFiNTljNTliZTdjODNkZDgxNyIKKyAgICAgICAgICAiNDVjZDRlNzA5YTBlM2Y3OThlYWQ1YmY4NjYyZGE2NWMxMDU3Y2MwODJkOTA1MDUwYzQ2NTk1OGI1NTVkNzdiOCIKKyAgICAgICAgICAiYjEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjE0IiwKKyAgICAgICAgICAiYWU0OGNkODNmNGExZjk0ZTE3MTkyMTk2OTBjOGM2ZjY3MzdhYmQxNWUwZDA4ZTdmYzJlYTBkMzE1YjQ1YmVjMiIKKyAgICAgICAgICAiNDZlODQ1YmYxNzYwYzg2YzNmODJkODRiMWU5ZDY4ZGNjYzAxZDlhN2QwN2VjYzZiZmJlZWQ4M2Q3YWQwM2E2ZCIKKyAgICAgICAgICAiNTY2YTg5YmM2NDQyMWU3ZWI0N2U1MmMwMjM4NjU4ZDVlNGM1NTk3ZjEyNWFmYzZjODMzYzYzY2Q2Zjk3ZjlkZCIKKyAgICAgICAgICAiNWNjZThhMjYzODgwN2NlOGE1ODNkYTAzMmJlYzgxYTM4Y2QyOTlhOWM3OGU4MjU0ZjI4ODUxNjQxMzUyNWZkOSIKKyAgICAgICAgICAiNGE5ZTBhOTVjNjU2ZDczY2Q1MmE0ZGNjN2RkMDk0N2Y0YTAwNWVhZWRjY2ZkMDNiYjE3MTVjMzUxY2YwNTljZCIKKyAgICAgICAgICAiNTIyYzdmNTM4YzE2MjhlNzJhMDU2NDRlOGZmZjUwOTI2ZmE4NjgyYTY3NTM3ODZmMmFhMjYxMGFiZmFhOTViZiIKKyAgICAgICAgICAiOTlhZjE1NjE3MTUxZDBiZDBmYzQ2ZmMzYjI5Y2JlZTFlNjYzYjkyMzEzNmI1ZTE5OTI4MzlmMGJhNTJlNDRmYyIKKyAgICAgICAgICAiY2JkOWYzMjBlZGUyMGY1NWE0MjM3NzBlNTczYTlmYjJiMzZkYzhmMTg0IiwKKyAgICAgICAgICAiMDBmYmE5ZjZmOTU5YjE3MGIwOTQ2ZGNiZGI5OGRjOGU4NDc5YzY2OWFkYmE2YzU0NjM2YTJkYzdkN2Y3MDMzZCIKKyAgICAgICAgICAiMzUwNDA1ZDcxN2YyZDYzZGFlNjVjMjRiMzdkYjFkYzNlOWY2MTc0M2FmMWNlNmRlMjQ2N2QxODVhZWYwOGQyYiIKKyAgICAgICAgICAiZjg2NWYwNzViYWE2YTI5YzU4MDY2MWRjZDRhNDhmMjFmZjRlN2IwMzllZWYxZTFlMjBiYTgwY2YyMGVhYjZlYyIKKyAgICAgICAgICAiZGU2MGZhNWQzNzY3YTMwZTZhZDQxNDQ3MTNjYTQ5ZmMwMzgwOTlhZjUzNmMwZDVmNTVjNGNiMTUzMzUzODFiZSIKKyAgICAgICAgICAiYTAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjE1IiwKKyAgICAgICAgICAiMmM4YTAwN2I2MDMwNTZkMzMxODdiZjUyY2VmNjE2MWFhNWY1ZjUzMzdmYzM1OWQ0NjM0NDcyMWQ5NDVmYmM0ZCIKKyAgICAgICAgICAiMjQwZDMwNjIwYjI5NmMzOTc3Y2Y0NWMyNDdlYjJjMzYzOTQwNzk5ODNmMDNhZDgyMzk5YzRiMjg2YzQ4MTY1OSIKKyAgICAgICAgICAiMTBiMzQ4Yjk1ZWYzOWM0M2JmYmViMzU2NmQxZDFlZWE1YTQyN2Y0Y2IxNjgxZjJhN2M0MDFmM2YwZDZkOWVlNyIKKyAgICAgICAgICAiOTkzYmU1ZWM1ZDM0YTc1NTQxZTlmOGRjN2M2MDY5YTg5NzdjOWY5MzZlZGJlNDFhNGVmNzg1YTNlZjdiYTA1MSIKKyAgICAgICAgICAiODk5MDA5ZWQ2MTJhMjI4ZjkwMzE2N2E5MzRlZWU2OWI0Zjg3MzZjMjk1MTFjNmJkYzYxZWVlOTYwOGE5OTExYiIKKyAgICAgICAgICAiYmE1MjgzOWJlOTlmOTFkMmVmODViOGNmMTBjMWQ2MzUwODA4MjliYTc5OTFmZTJlZjgyZTJiYWUyNzA4MTQwNiIKKyAgICAgICAgICAiZTg5YmFiNzVjM2VkMTllODdhNGFkYjcyZWMyNjIxZjNmMjU4NWIzOGNiYjM2YjNjMGQ0MDVmZmNhN2E2ZmIwMiIKKyAgICAgICAgICAiMjQ0MjA3OTRjYmQ4ZDc4MzE4MDFjODgxZTE2NSIsCisgICAgICAgICAgIjA0MTA0N2UyNDJiNjQ0ODc0MWYyOGE0YzhiMmRmZWNhY2MwZmY2NjE5ZTk1NmE2YTZiMTBjZGQwMWVlZGQyMDEiCisgICAgICAgICAgImM4MGUwZmJmN2M1YmVmNTJhN2FhOTkwMGE4NTkzOTRiNDdlODNkMDhiNWUxZGEwM2EzMzU1NDAwMGNjZTE3YzEiCisgICAgICAgICAgImQ4NjIyOWEzYTIwMzUwZDExNjQzYTc1OGMxMTZiOGZiZjcyNjYwZGY0Yzg2ZWY4YzFmYzQ1NDRjM2FlMWQxZmMiCisgICAgICAgICAgIjNjZTlmMjYzZjYyZTgwMDdjZDdmZjdlYThkNTBhMDgyODM4OWZmNDMxZmM1YzU2MjgxNmQzZDI0YjYwNzIxMWQiCisgICAgICAgICAgIjI5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS4xNiIsCisgICAgICAgICAgIjdiMTVkMWE3OWM3YWQyZDEyZjc1ZGE1N2QxNGE4ZWI3MWZkZDRjNGVmZjUyNDM3NDFhY2RlMjNjZTZkYWQzMDgiCisgICAgICAgICAgImM4MWQ1ZDU4MGZmOWMzZjg5M2ZmMTI0ZmU0NThiMzE4ODRkYWY3ZmM0NDY2ZDcwMGRjNDkzZjFjN2E3ZGJmNjIiCisgICAgICAgICAgIjI0MWIxN2U3MzYyM2ZhMTc4MTRhYjRkMmM5MjQ1YmU4M2JiM2NjNWY5NDQ0YjE1MjE3YjI0NDFmNDU5YzAwYjgiCisgICAgICAgICAgIjJlNTg2ODlhMTFkZDVjNTlmYTM5NWQxYTZmOWIyYzI1Y2M4NDk5OTI3YWI5YTQ5ODI4NTMzNjUyY2VlMjMyMzIiCisgICAgICAgICAgIjk3MmQ2NTY5ZWU1NjQ0Nzg2NmYxMGViYWQ1NGVhM2YwNjEzMjBjNmQzZmVmY2UzNDU1MmI2MjY2OTY3YjA1NzgiCisgICAgICAgICAgImQ2YzQ1NWI5YWMyNDY2MzYxNzEyZTdkMDViZDMzMzJlYzEzMGQ0NWM2YTQ5NzYxNjJjNzk3YWQxMzYzZjQ5NjkiCisgICAgICAgICAgImU0YWUzZGVkNmUzNmVhMmNkN2ZiMzU2NjA5YmUwMzFhNzliMjk0IiwKKyAgICAgICAgICAiMDMwMjUyOTBiNDQ2MmY5YWI3OWZkZmFhN2IxZDUzYTRkMTI3OTZjODVhYWMyOGRlYWMyMTI3YzgyNTJjMmE2MiIKKyAgICAgICAgICAiMzk1YThiODE5ZGZjZWViZjY4ZGQ0ZGJmYzg3YzFjZjNkMDE3YTUzYTI2NDA5MjUwNmJiNmZjOTUyOGU2Zjg3NiIKKyAgICAgICAgICAiNzg3MzZjYTU2YTE0YTFhYTI2NzdhOGI4NGY1ZTAzZmEyYzBjZTQ3ODViMjZiYTkyZTc1ZmJkYzE2ZDhkNGM3ZiIKKyAgICAgICAgICAiYjBiYzM5YTg4ZTEzMmUxZTA1YWQwMGYxMmYwNzI3MDYzNDNmNWViM2RhYjUxMTJlM2JiZTc2ZWQwYmJjN2JkZiIKKyAgICAgICAgICAiY2YiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjE3IiwKKyAgICAgICAgICAiN2E3NjQ0MDAxZjgwMTNjNTBmZDcxN2IyNDQ2NTQ3N2FiYzM0YmE5YzFlNTNhZDc2MzI2NDVhNmVmN2M4ZTY0ZSIKKyAgICAgICAgICAiOGVjYjdiY2E1YjRmMDliNTJmNGRkNDhmOGJiM2RkMzM4Yzc4MTgyY2U4NmU4YmZiMWM2OGE4NzZmNzMyMTY2MyIKKyAgICAgICAgICAiMDZhOGVhOGMwZDdjMjFmZjI2ZmFhZjRhYjQ1NTEwMzYxOTUwYzc2Zjk1YzI3MzBiOWQzZTRkNmQ4NWVhMjU1OCIKKyAgICAgICAgICAiNGFjOTY3YTAyYjFlMGEyNiIsCisgICAgICAgICAgIjAzYjJhY2NmZWZmMDYzYmQxNzVlZjhhZTBjYjg1YmRiODAwZGRjMjc3NzZmOGQzZGM3ZTIxZDE5OWJiOGQ2NWYiCisgICAgICAgICAgIjViMjQyZTc5ZDQ1ZWNkY2ZmMDJlODAzZjU2ODFmZjA0NGE0M2I1NWE5YWFjYjFlYWYxNjc4NDgzOGIxZDVhMmIiCisgICAgICAgICAgIjdjMWEzNjRkYzQwNTMxMWE2NTU1MDU3ZWM3M2YwYThmNGUwZmZjYTQyMzAyMmNhNmFkNzQ0NjliYmQ1NTU3YmYiCisgICAgICAgICAgImExY2Y0Yjk1NjM2ZjUzNDUzN2VmZjJmYjE2YWY1ZTY0NzE4MjRhZmUyMTY3OTE4Yzg5YWRlMDFkNTJhZWE3MzkiCisgICAgICAgICAgIjlkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS4xOCIsCisgICAgICAgICAgIjEyZDIyNGZjMTBhMGZjNDA5NTNhYjZkNzAxYzQxNmMzYTgyMzc3MmJlYWZhIiwKKyAgICAgICAgICAiMDMyY2I1YzhkNjEyOTBiNzY2ZTY0OThhYTYwMTQ5NGQ5ZjA2NmYyN2E0N2EyODcwZjM2Nzg5NDMyOTFhYjIyZCIKKyAgICAgICAgICAiM2M0NWMwNzZlNTYwODE5ZDMzZjg4OWY4Y2ZhYjJkZjZjNjNjMGNlMWVkNWNlYjUxNTQ3MDc3YzA4Mjc4MTg3YSIKKyAgICAgICAgICAiODI3MmZlYzdkZTk1NTRjZGM5MTZjYTcyZjJjNDUxNDNmMmNmMzI0M2M0YmQyMDBjNmU5OTNmMGRiNWI3MWQ0ZiIKKyAgICAgICAgICAiNjM3NzFlMjQ5YjE5Yjk5N2E2ZTVhOTE5Y2ExMDBjOTBmZWE2YTJkNGRjNjg4MWMzYTBlMWMxMzU1MzgzY2ZiYiIKKyAgICAgICAgICAiNGIiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSA5LjE5IiwKKyAgICAgICAgICAiZTBkNGUyYTVlOThhNTEyMzdkYTUwODVkY2YwOThhZTJjMDViNGUxNjkyNTRlZTZkZGExNjIxMGU0YTNmZTgxYyIKKyAgICAgICAgICAiNzI1NmVhZWZmMjhjMGM2M2Q4NTRiNzg0MWExMzZjNDM2MGIyMTVkY2EwNTg3NDhhNGJmYTgyNTg2ODA0MjgyMSIKKyAgICAgICAgICAiOTkyYTRlZDVhN2Q1OGY4MDEyMjA3NTQ5YmU4Y2M5Y2VjYzg1MDFiOWY4MDI4MzBmODY1ODQ1Y2UyZTMzOWJlYyIKKyAgICAgICAgICAiMjgwNTk2MTFhMWEwMGI1NTM1YzNjNjE1ZTlkMmExMzk1OWYxMDE1YzhiYWQyZDc1M2E1OWE2MTQzYjNhMzA1OCIKKyAgICAgICAgICAiZWY3MjI1NjBmZmUxYzE4NDg3Yzc0MWRhZDYxZjA3YTE1NjQyZTcyNmFkMThhOTg0ODc1ZTY4YzYyZWViZWRjZiIKKyAgICAgICAgICAiOTQ2ZjEzYjg5M2IyODA4Zjc4ZjkyOTQ4MDdkNzc0Njg1NDk0ZTZiODkwNDBlZWU2ZGUxYmE3MThiYTJlMDgyYyIKKyAgICAgICAgICAiM2Q1ZWYxN2MxMDI4Y2Q2NiIsCisgICAgICAgICAgIjAzZTc4M2JiNTNkYmI2N2NmMjE5NWZjMWE1N2Y0Yjc0Yzk4MjAzYjFmM2Q2MTVmZWI5MjBlNGFiZTgzNzU4MzQiCisgICAgICAgICAgIjY3MmY0YjhmNTVmZWYyYWNhOGI1ZDQwYWVmZTRlZmJkYWFjM2U4MjEwOGQwN2YyZjFjZjhjMGQ0ZGZmODFiMzkiCisgICAgICAgICAgIjY2ZWM2OWJlNTExN2FjMWFhNjExOGU0NjBiOTJkODhmY2RkOTRkMDhlYmFhNTM2MmU1OWQ1MjAwNGI0MzM2OTUiCisgICAgICAgICAgIjE0MzdkYTBmNTFkNjNlNTA1NjE1YjRiNzU1NTQwODBiOTQ4OTdmZWYyOTNhMzRjNDA0MDBjNGY5OWFhMWRlZmUiCisgICAgICAgICAgIjM1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgOS4yMCIsCisgICAgICAgICAgIjY0YjNiYTQwOTgwM2M5Yjk2MGMxYzQ5NjJmNTEyNzFiYzg5YTQwYmQ0MDVjZTViY2RjODg1MWQ5N2M5YmU1ZTUiCisgICAgICAgICAgImI3NDY0ZTUwZDk5YjZjZjhhZGY4ZmY4MzJiNzM3ZGU4YjZmZjFhYmViODlkYmFlOTNhOTA2Mzk0ODc4MDZiMDUiCisgICAgICAgICAgIjk2Y2QzMTY4NjBmNjhmMDAyN2EzNTAzZTE1ODk2N2FmZGZmNDY5MDc2ODE3ZmM3ZGEzMjIzY2NhMWU2YzQ4OTciCisgICAgICAgICAgIjNiNTcwZTBiZjc0YmI4YjM5NjU0MzcyYjdhMWQ2ZiIsCisgICAgICAgICAgIjAwZDIwMGViYTBiNjUyMmFmYjQyMGViZjE2NDg4YzUzMDM1MmM0MmRkZTgxZTc2NGMwY2FkYjQzODI4Y2I5OTgiCisgICAgICAgICAgImQwYTYwYjIzYjViNjk1OGEwMGZjMjU1M2UyMzVlODU3NGU0ZDRmZWM5ZTY2OGRiYTQwZGU2NjYxYWJlMTNmY2IiCisgICAgICAgICAgIjg0YzFhZDE1YzRiMGNjMGM2ZjRmMGY4Mzc3ODdjNDMyNWYwNDVkNjFlZTJjOTk3MmIwMWYzMjEyNjU0ZWM0MjYiCisgICAgICAgICAgIjYyNTY3ZmFhYzQwZTljMGEyODE1OGEyYTZjMzFmMDFhODQ5MTI2ZGY5ZTk2Y2I4MjA5YmViNTgxZDY4NDZiYjUiCisgICAgICAgICAgImFiIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI4LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjBkNWZiOTlmZGVkZjQyNTZlMjhkNGI0MWQ3MDdmYzI3NjMzZTg5OTUxNWY0ZGFiZjZiNDYyNzEwYWMxMTI1ODEiCisgICAgICAiZmE3M2ZhODM2OTU4MmM5ZmQ0NTI1YTcwMTYxODk5ZGY2MzI1ODQ5ZTVjNDM0OTNlMTMzNTRlMjcwOTU1YTQzZSIKKyAgICAgICIzODM1YjU5OThlZDQyYTU3NWJiZjY4OGQ2OWVjMzY2ZDJiYTZmMDUwNGMxZWUxN2RjNTliN2VhMGI0NjQwY2JlIgorICAgICAgImNkOGJkNzk2MmJlODU2NmYwZWJkNjU1NzQzNjU2YTI5MTI4NWUwMzdiYmZhODY1NTgwMWJkMDMxNGY0NjRjNTYiCisgICAgICAiOTEiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiZTc2ZjQyYjQ3NDAyZDVlMGY5NjQ2NDkyNWFiNGIzYmM2ODk0MzAwZWU0ODZmYjcwY2VkNDkxZjJkMWIzNjc4MCIKKyAgICAgICI4NGMxYzJjYjk2OTU2OGE1Zjc3ZGFiY2Q0MDkzMzkzN2E4NjdmOTM0ZmIyYWVhYWU2ZDc4Njc5OGUwZDA0YTEwIgorICAgICAgIjZmNTQ1ZTQxYTljOTM4MzNkODFmZDRkNzUzNTMxNzljYjBiY2E0NWU3OWFhYzk0MTM0NjRiMDM2N2YzMWFjNWEiCisgICAgICAiY2E1NjZmMjIxNGJmNTE0NmE5NDg0Yjg3ZTQyYmRhYzJiMDFhOTk2NzAzNTA2YmUwNzc0OWFhMGZiZWIzYjIyOSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTAuMSIsCisgICAgICAgICAgImIyZDU4ODUwOWMyZWFjZGEyODFlNzY3MWNiYTJmY2E5MTRlZjczYTNhZWE5MjAyMDQzZWFkNmI3MjEyNWMxYjAiCisgICAgICAgICAgImQ1Y2MxNTQxNDYyMGQ1NzNkN2FiMGIzYThhYjY2YTkyZGY4NzBiNzViMWM0ZDY4ZWE3MDU2YmUwNDE5ZWEyNTMiCisgICAgICAgICAgImU2YjA4YjEyOWUwZjY0ZjEwYWJmODJlMTY3ZjhlM2U5MjgyZTdiZjcxYjA0M2JhYTJiYTJkODc1NmQ0NmI2ZDMiCisgICAgICAgICAgIjZlOTczNDE1ZjRmOGMwZWI0M2ZjNjA0Y2VkNDkzZGMwNDZhMjVhMTE5YmQxNTgxZGJiNTk3YzNlNjdjMmZkZGMiCisgICAgICAgICAgIjM5NmRmNWQyM2I3YmE4MGJkMmUzMTI5MGJmYzI2MjI1ZTAwOTU1YTk4ZDkxMTkxMWEzOTk2NzZmYmIiLAorICAgICAgICAgICIwNzlhN2I5MTZmNjc0MTE3ZjFkODc3ZjQ5MzQzMjU2ODQxNDhkNWQwYjBkNWMyYzYxNTZhMTExNTliYzBiZDMwIgorICAgICAgICAgICJkMGE3MzUzNGRjOTQ0NWViZTIwNmQ2MDc1ZWI0ZWE3YTdjMDQzMmJkNDRiODNjZmFlNDY4NWE5ZWI5YTk3Y2JiIgorICAgICAgICAgICJmYTRlODJmNzFkYjUxYWZhMGQyN2NmMjdmMDYwOWJiM2Y4ODA2NDEzMjQ3ZDVkNDk1NGY3ODlhMTAxYmYzOTIxIgorICAgICAgICAgICI3MjhiNDg3ZTg1ZmEzZmQ0ZGNkNzJkMDQ0NDhlNDJkM2VjMDVjYzQ3NWQ3NGNiZjc2NWMzNGUzZWMxNGNjYTUwIgorICAgICAgICAgICI0MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjIiLAorICAgICAgICAgICJjYTI1MThhNWEyMjRiMjNkNDIwNWQ4ZGQ3ZWIwNGNiZGNkMGNjYjgyYmM4Nzk2MWQ4NTlkNjYwMGIxYWMzZTI1IgorICAgICAgICAgICJhOTQwN2I2YzA2NTAyN2MwNDA4MWY0NDVhMjMwYWI5MzA4ZTc1NWYzM2E3NTk3NzNiZTZiOTY5ZTBlYTc3NGFhIgorICAgICAgICAgICI2ZTMzNGZiNjA0MTg0Mjc1ZjM2YTAzMWRhZWE2NTE4Njk3Nzk1YmQ2YTdkNjY5N2I0MDZkYTJjZWNlMTVkYzExIgorICAgICAgICAgICIzZDg1NDQ5ODg1NjExMzFkNGZjNmY2ZTNjNTgwZDgwNjgwN2RmMmM2ODU2NTA5NTQyZTRlZDM5ZDM0NmViYTE1IgorICAgICAgICAgICI5NzZhOGZkMDFkNzk0MWIwMTY1NjA2Yzc2MTc2NjQ5YTE2MTAwNWEwIiwKKyAgICAgICAgICAiMDBiZWI5MjFjZTc0ODk4MTlkMmY4NWM3ODgzOWEyN2Q3ZTE5ZWEwYTc2NGFjNTMxMDFlODZmMzE3MGE3NmUzMSIKKyAgICAgICAgICAiOGE3ZWU4OWIxZjVlMjNlN2UyZGI5NjY2ZWI0MzkxYjI3OTJhNTc2N2VlMzU5YjVjNzFlMjc0NzkxMGM4MmM2MCIKKyAgICAgICAgICAiODNkNmQzNDgyOWI5NmZhNWEyZWMwZjYyZjFiY2RhNWQ3OGY4ZGMzYzY1MGI5NGUzMmIzODYwZGE1ZmM1YjE3ZiIKKyAgICAgICAgICAiYmY2ODdlYzAwNzVhOWM3M2RjMWU5OGQxZjM2YWFlYzQ0OTNmNzg5MWUzYWIwOGUyMDQyZDhiMWU0NjJlOGM0YyIKKyAgICAgICAgICAiMzMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4zIiwKKyAgICAgICAgICAiZDQzM2QxNWIyZDYxYjg2YWM4ZWMwZGFlYmE2NWUxMWRlZDNjMzg4NDI1MjVlNGI3YzhlNDUzYjBmNTUzY2I0ZSIKKyAgICAgICAgICAiYjg3NWE2OWQ3ODE2ZjU0Yzg3NzkzZTNhYmI3OWZjNTUxMTM1MzdiNDc2Mjk2NWNmZWU1ODZlMGExNzk5Nzg1MSIKKyAgICAgICAgICAiZTNkYzllYWY2ZjFjOWMyZTk4Yzk2MTNlM2JiZWEwMTNmZjU4NjE2YjJhYjA1YWIzMjRhOWM1ZmY0YzVlZmRkOSIKKyAgICAgICAgICAiOTBkZDk3ZDkxNjkzYzFlYmQ0YzA5YzczMjExNmM4ZGZjM2VjNTE1YzIwNTMyY2JhN2U0NzU4YzY4YTY5Y2ZhMCIKKyAgICAgICAgICAiYWMzMTg2IiwKKyAgICAgICAgICAiMDNhZTNiZTFjNzQ0NmFkM2VmZDhiYWU2MWIzZDMyZDNlZjE1MjQ4MmIxYmZlZTMxMmZlOWU2YmVlZWFiOGNiZCIKKyAgICAgICAgICAiMDhmNGM4ZjljZjA2N2RlYWI2YmFjN2MwZmVjZDg3YmJhYmM3ZjY3OThjNzdlZjFjM2ZkOGJjYTI4Y2Y5ZWNlNiIKKyAgICAgICAgICAiNTY3OTVmNjBiMzc4NzVlYWJlZjgyMTUzYTEyYmM3ZmRlM2ZiYzllNWUxNDhmNGUxNmNiNzJhNzczZDlkZDAyMyIKKyAgICAgICAgICAiMTdmNzBiMzM5MTQwMDgwNWU4NWU3YTIzNTY3YjM0YWE2NWEzNWY3NDQxNzBhZmZjYjMyMzM3MWFkMmFiOWYxZSIKKyAgICAgICAgICAiNGQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC40IiwKKyAgICAgICAgICAiN2QwZjViZDc5MDBmMWU2NTY1NGU2YzdlZWIwNjRjYjgyOGYzNTVkNmRlOWJmMGQzNDc4M2ZmY2JlODBhYjFiOCIKKyAgICAgICAgICAiYWUwN2I3ZjFlM2Y1YTMyMGRkOWI4Yjc2YmUwZTk3NzJkZTE5YThkMyIsCisgICAgICAgICAgIjA5ZTdhNTMwNDE3MWRhNjM4YmU3NjAxZmJmZjZlNDk1MzZmMzM2NjA4MjI1M2FiYzFkYjVkMWI2NTQ5M2RhNTkiCisgICAgICAgICAgIjVlYzkzYzM3ZjU4OTBiNWY0NzE1YmQ1ZTgwYzBiYmM1YzYzYjc0YWYyZTYwNDM5MTMyZDI1MjEzNzUwYmMxZGUiCisgICAgICAgICAgIjMwMmUzZThiODNkYWQyZGUwZGZmYzRmYWFiNDA1NmRkN2M0MDVlMDRkNTk0MjQ1MzY1OWQ0OTBmM2MzZGFhN2QiCisgICAgICAgICAgIjNmMTE3MDExODE2YjU2NTkwMTA0ZGU3ZjljMDUyMzczZTJkZGU0MTQ0OTA0MjdhNTg5NjQ0OTNmZjQ1ZjA4YTYiCisgICAgICAgICAgImU4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTAuNSIsCisgICAgICAgICAgImQ5NmFhMDkxYzE2MGI1NTJiMTZkZjA2NThmYTgiLAorICAgICAgICAgICIwYjY5NzU0ZWQ2ZDdhN2QyZDg1YjJjN2EzMDZjNzhkNjNkMGZmYTQzOGY0M2JlZWMzYTAyODZjZTU3ZTdlMGY4IgorICAgICAgICAgICI1Y2E0MzBlNjM5MDhjMGZhNTg0YmEyNTA1ZjhjOTQ2NTZlYzAyNDk0YmIwMzJmOTIwYzRiNmI4Yzk0M2U2YmU5IgorICAgICAgICAgICIyZjU3OGFhOGNjZGZhYWMwYTU0YjhhOWMwZGY1NDgyNzFmODk3M2M5ZmZhMmEyMGM4NDc2MmU5MDE3ZTc0NTJlIgorICAgICAgICAgICI1ZDc0ZGE2OTBmNzVjMDk5YWI5MWUyYTc5NjNiYzUzN2Y5YzI0Y2NjM2M0MThjNmU5ODU4NjFkOTNkYWFiMmU2IgorICAgICAgICAgICIxMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjYiLAorICAgICAgICAgICI1NmYwNDg2NDVhNDlmYTAxNDFmNGQ2NzRhYWZjZjJmZmZhODNmOWI0NTJmMWZlZWQ0MzA1N2NhYzI3Njc1ZWExIgorICAgICAgICAgICJhMTQxZDg3ZjkyZjljZWJmNmVlNGY3OGY4ZWQ0YzNhMjlkZWI3Mjk3NDdiNGY5OGU0Yzc1OTBhYWE4ZDU2ZGJjIgorICAgICAgICAgICI2MWQzOGNiNTYyMjIyNmY2OGU0M2Y5YzRmNGMwMzk5OGFlZTkwOTM0Mzk1YmM4NDBjODZkY2M4ODc0Nzc2ZjQzIgorICAgICAgICAgICIwMzlmNTZhODlkMjRiZGM0YjMwNWRmMDllNWNhMGMwNTEyYWQ2ZDE1NzE5MTlhM2RiM2E2YmQ5OGI3ODIwYWRhIgorICAgICAgICAgICIwODY5ZDIyNWE0MDQwMjdhY2I2ZDc2N2ZjMzE0ZGIzNzdlOGQxZGI2ZWYwYWYyOTQ1NGRiMmJkNGMxY2VlMDEzIgorICAgICAgICAgICJhNTk3NDM0ODZkMzIzMjk1ODNjZjgwMTEzY2RhYTEwZTRmMmNlYTZjNGY5ZmM2ZTRlMjcxNmVkZTg1NzI3YzNhIgorICAgICAgICAgICJmZDQzNDk0NjA5Nzc3NjMwZWUzMzYzN2VhMzVjOWI0ZjY4OGU0OTJjM2M2NDBkIiwKKyAgICAgICAgICAiMDY2NmVmNzFlMmM4YTFlYjFjNDY0MDNmZDIzZTUyMTg4M2FkYTFiOWJjNWZiZDM1M2JiYjNjM2RmYjU3MGFjMSIKKyAgICAgICAgICAiYzcyMWZhZjNmNTk3MzJmMjEzMzc3MzgwMzk3OTQ4NDYyZmQyMGEzZjBlNWUwODkxYTZiMDdjMzFiMzYwYWFhOSIKKyAgICAgICAgICAiNjVlMmYwOTMwZWIzNDFlZTc3ZWM0MzkwNjVjMGFhZDkxNzg3YWI2ZDJlNmNkZWRkZjU1NDgxNjUxYWViYmY5ZCIKKyAgICAgICAgICAiMTFkNTRiYzExMzI2MTgzZWJmZjQ5YmQ0MGJkZjc2ZDdlZjY5YjY3ZWEzOTY4ZmE4NDkwMzJmYjgyNGI2ZGQ2YSIKKyAgICAgICAgICAiZTMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC43IiwKKyAgICAgICAgICAiNzlkYTg5ZTM1NWQ1NTFhMGUwMzFmNGZiNzFhYjZmNDE0NGM0NzYyZTA3ZDA2NDE0MzNjYjVlYzg2MTM0OTYzZiIKKyAgICAgICAgICAiN2QyYzRkYzdiZWI1YzZkNDYxNTdjNmM0ZTE0YTRiOWM3YTJjMGQ0NjBmMWZjMDYyZWExYjRmOTg3NGQ1YjFjMiIKKyAgICAgICAgICAiOWFlMmYyYTViMzkwNjJlNDEyMTJlNjVjODVjMjhlNzY3NTg5OTY1ZDE3MTBhZDViYzc2ZmE1YTY3MjlhMDZmZCIKKyAgICAgICAgICAiNDk2ZTJlMDk5N2U1NzMzN2JkNTE2ZTZiYzc5YmU5ZTA3MGFhN2I4NmMyZGRmMTRmOTQ5ODVmZTE1ODJhMjkyYyIKKyAgICAgICAgICAiZDEzOTM0YjNjMzhkZmU1OTc3ZWQxZDlmOGFkMzI0YzBkYzA3ZTU4NTNjN2U0ODkwYmZiZGMxYTAxZWNkNzJjNSIKKyAgICAgICAgICAiZmY2OGEwMmYxZSIsCisgICAgICAgICAgIjBhMDY4MmY3NDJlNzQzZTFjN2RhYmFhYzYxOGE3ODZmMjhlZDEzYTY1ODdhZGZjMzNjOTgyOWQ3NTJjMTNlZjIiCisgICAgICAgICAgIjdhMDBjN2U2ZDQ1ZTI3MTcxYTU4NDE3NzFkNzg2OThjNmNjNjY3NzhiOGMwOTMzOGUzNWI5YjZmNTljMDY0Y2UiCisgICAgICAgICAgImIzZWIyMGNlOTA5YTVjNmNlYWFlYmJlOTNlODZjN2M1ZmY0YTM5MTdmMTI2ODE5NjMyY2Y5NmZhYjFkMzkxNzMiCisgICAgICAgICAgImE3YWU3ZmMyZmY1YzBmYjQwOTA1MzVkYWRiNThkODdkMGRhM2RiMzJlY2VjMTM3MThiM2FjNWMzMGJhODAyZTMiCisgICAgICAgICAgIjhiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTAuOCIsCisgICAgICAgICAgImU2OWFjOTQzM2U2YzI4YWM1M2Y4MDM0YTg2OGRhOTg4M2UzMTllODJlNmJjMmU0OTQ1NWU2ZTRmMDk4YjUzZjIiCisgICAgICAgICAgIjg3YTg1OGRhMWQ4NzZhOWE1YTZhOWZjMTRmZDI0MjM4Y2Q0ZTRiNTczMTA3N2E0ZGJkZDUwMzhhOWJjMWY1ZGUiCisgICAgICAgICAgImY0M2ZlYzc3ZjY3ZWIwNjJmYWVmZWY3ZDA0MjkyMzhiMjVkMDMxODU3ODk2NjIzYTNmMWQzN2JmIiwKKyAgICAgICAgICAiMDhhMDIwZTQyMDk4NzhmMWU2MzdhZDU5ZGFhZjgzNWRhZjRjYTY2NDg0NDc5NGMxYzY0OGYwZTIyMzNkYmE3NSIKKyAgICAgICAgICAiNDhiZDE2MWYwYzBhMTgyNGQ3NjIwMzFhNDE3NTcyODQyZjhlNjQ0YWE5M2Y5ZDkxZGQ3NzA5ZTE2YTQyOWNjMSIKKyAgICAgICAgICAiNDM5MDNlZjRmODM3YTQ1ODM5NmJjYWMyNDA5MmIwMTcyNGM2ZmUzZGQxYWQyNDNmM2Y3MGI1YWU2ZmFhMDlmMyIKKyAgICAgICAgICAiNzBjYWE1MTIxMDRiOTE3NjA2MGRmMmJmMTIxY2JjZTkxOThlYzJmZTQ1YTU5ZWJkZGM0Njc1MzJiNWFmYjliMiIKKyAgICAgICAgICAiMzUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC45IiwKKyAgICAgICAgICAiNDVlMDkwNTZhMjhlNGIyZTdjMTFmNjVlNjg4YTFlM2MzM2YwZTUyYzlhMDM2YzA5ZDgxZGU1YTZkYWI1OGQ0ZCIKKyAgICAgICAgICAiNTVjZjQxMWI1M2FkNjQ2ZTgzYTM0YjBjMDhjMjIxYWUwMzc2YWI3NmE3OWQxZmVlNjcxYTU4NDQyMDU2NGY4ZSIKKyAgICAgICAgICAiODUyZWI2ZjJkNDI3YWVlMGEwOTZkZDcyZGJlODUwN2M2NzdmOGFhMDBlYjdjMjVkZmIwYTQ5ZGQ4OGE2Yzc4NCIKKyAgICAgICAgICAiNzZiODAwMTFiNjgyOGIzYWFmNDY0Nzc5NDQyMmJhNmJkNjNiN2FiMGU3ZGFmYmQzNmY2YzQxZGVhMDNkNzMyMiIKKyAgICAgICAgICAiMzU2NDk2OTQ2MGQ5Mjg1NDBiNzM5MjU3ZTcwYmI2OGQ1YzY1M2MzNzk2OTQ1ODk1IiwKKyAgICAgICAgICAiMDg3MTdkNTA4NmE2NDUzYmRlZmY3N2Q0YzJiODU2ZTNiYTk5MGJhYmY2OTcwMWRmNmNhMGEzYjNhODFiNTU2OSIKKyAgICAgICAgICAiN2QzMTg4OWQxMDBkNjg5NWM5N2YwYTU2YjQ3MTY4Yzk4ZGE2MmU1OWVjNzlkN2FlYWIyZjlhNTcwNzQ2OTg4YSIKKyAgICAgICAgICAiMjZmNDIzNTc2YzcwM2ZkODQxYWU1MWM5YzIyOWEyZTljMjVmZTk0YzViNmNlMmZhNjQ1NDEyYmVlNjU5ZmFmNiIKKyAgICAgICAgICAiMDlhMzJlYjJjMDViZWVhYmFhNGY1OGNhYWMzMTMzZTVlYWFhMjczNDRkMzBlZWNhMjJjNmViZDhkOWUzNDQ0MSIKKyAgICAgICAgICAiMGUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xMCIsCisgICAgICAgICAgImI4MWM4YmM0YWMxZmQ5NzFiMjFmMDI3ZTA2ZjRkODdiMzRkNTc2OWQyM2M4NTk5ZDFmMTU3YjA4YTdmOTJlMzQiCisgICAgICAgICAgIjE5ZmVjNGM4YzFiMzRjYTQ2M2M3NjhiNzJlMDdmOWRhYmMzY2JiZGQ4YjU2MTdjYzI1Mjg3NTAwMmExYTEzOTIiCisgICAgICAgICAgImFmMGZhZmMwOGM3MjExNzU4ZjNjMDQyMDUwYWQ3MzFiNjM2YzBlODMxOTFhNzlkZTVhYTJjYjk0ZGM4YjBiZGQiCisgICAgICAgICAgImU3NWRiN2QwYzhiYWZiNDIyM2QzNDdiMDI0YjNkOWM2YjIzOTYxOWI1ZDhiNjM0NmVhODZmYjhmMjRjNTg0ZGMiCisgICAgICAgICAgIjFhNDc3OTFjYjdjOGM3ZWJmMWVkNDM4Yjg4IiwKKyAgICAgICAgICAiMDFiOWY0MzM5NGM3Y2I4ODViZmRjYzNjODQ5NjIyMjNlOGFhYTk0YzZjOWI3OTA1NDAxZDI0ZjBkYzQ0M2IyZSIKKyAgICAgICAgICAiOGQ4NDBlMjhhOTVmYTIyZTFhZTM2ZmZlMDg5NjZmMzhkMzg3MTRjZjY4ZGE4ZGIyMzc2NGI4OGM0YmIyYmU0ZiIKKyAgICAgICAgICAiZDNkYTljY2QxYjUwNjk0MmFhOWQ3M2ZjMDkzODJkYzMzMDgzMTQ3MDZlNmNlMjdmMDA3NjFmM2M5YmQ1NGZhMCIKKyAgICAgICAgICAiZTMxYzk2NzE5YWZiZjA3NjNlMzVjYWQ4ODliNzJlMTNiZDEyYjc2ZDZmMjAyMGZhZjYxZGQzZDcwODIyOGRmMCIKKyAgICAgICAgICAiNmQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xMSIsCisgICAgICAgICAgImQwMzIyODgzZTU5ODE2M2Q3MjIwMzZkYTNlNjMyYWE2NTU5N2FjYmNkMWY0NzYwMzEwOTY5NmY5YjM5ZmRjIiwKKyAgICAgICAgICAiMDc4ZDE3YWI4ZTZmZjBiZTUwYjM1MzllYjAzYWU4ZjA5MDNiN2EwNzc0ODE3ODFmYjBiMWYwOWVkY2Y3Nzg4NiIKKyAgICAgICAgICAiMzEyYWQ2YzA2MDI3NGYwYzM4OWMxNjMxNDA0MGM4ZDdkOTkwOWNiNzVkZjE4YzgyZDYyZGQzNGViNTljNmE4NyIKKyAgICAgICAgICAiZDNjNDZhN2VmNzQ3NGE1ZTQ0N2Y3NzQ0YTZhOTJmNTk5MGVhZWM3YmZiMDA4NDRkNjg0ZDMwN2RkYjQ5ODE4OSIKKyAgICAgICAgICAiNDE0OWU3NTJiZmJlMmU3NzA1N2RhNzYwNTQ2OWFmN2ZmYjY3MjdhOTk4MWI5NDM5Y2FhNWQ4MGU2YWUzYjNkNiIKKyAgICAgICAgICAiNTEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xMiIsCisgICAgICAgICAgImU4NzQyZjA0YjU2NTRkOTI4OGIyMzFhNDdhMzY1ODM5YmIwMWJlODciLAorICAgICAgICAgICIwOWI3NTMwNmE3MjEyZWE2ZjQ3ZWIwY2NmNGUyZTBkNmY4ZjNhYmRiOWNkY2ZhYWRiZTUxOTIyZjkyZWE2MjYyIgorICAgICAgICAgICIzYzU4ZWE3NGVhMWEyNDdjOWQ3MzFmMmMwMzM1MzZiMzUyNzNjNzE3NDk1ZjMyNWE2MDQwNWJkNWY1ZTQwNWI2IgorICAgICAgICAgICI4MDI3OWU3NTIxNjA0Nzg3NDA0NTcyMTZkYzkyOWRkZDY1ZGVhNTA1NTM1NTQ2ZTQ3NzBmODIxMWI4NDljMzY1IgorICAgICAgICAgICIyMThlNTY2ZTViYjQxYmZjMzYxYjY1Y2RjY2IwZTYwNGM5ZWRiOTcwZWU2YTI4NmExZmNlYzBhZTlkOTI1NThlIgorICAgICAgICAgICJhYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjEzIiwKKyAgICAgICAgICAiYTAzYzJiODVmZGU0NjQ2OGQxYzUwNjM3YjAwYTcyZGNmYzMyYzQxNjMxNzM5YzA2MDI0NWY1M2U1N2M2NmM1MSIKKyAgICAgICAgICAiNzY2ZjI0ZWFmZDkzZTZjNjY3NDM0ODA1OTFiZjE0NDQ2ZTA0MGI2N2E0Zjg0Njk5NTc2YzJlMTQ2M2NhY2NiYyIKKyAgICAgICAgICAiYjA3M2U0YjdlYzZkYTZjOGNiNDFkNGExMjNjNzQ4Y2Q3ZTgzZDI2MWU1NGMyZmQyYmM0OTViYzRjNDRhNzhmOSIKKyAgICAgICAgICAiODIwMDM0MDMwOTJlYzY5NjBjMDg4ZTJiY2RlMzQ4YTJlMGU1NWE0YjRmNDJlYWIyMjliOTVjMzgzZjIxMTNlZCIKKyAgICAgICAgICAiNmNkMWYzZjMxNjdkZTNkMjhkMzYyYzhkNzhiMmViNmUzMTYyMGUzNGIyZjBmOTQxZGFjZGY3YjRiODU2OGM2YSIKKyAgICAgICAgICAiODYzYTU1MWQ3YmQ0YTVkNzA5M2VkYTY5ZTFlMjgwNTZkY2IxZWI2OWFlMDNhZDc0YmU3MmE3NWFlOGZiNTZhMiIKKyAgICAgICAgICAiNzEyNWNhM2QyZGIzNzY5ZDEzZDM1ZGIxMDhlMjY0NGE3ZjNiMzc5MzhmZWM5NzYyMzE1MjA2ZDMwY2NmZDU3NiIKKyAgICAgICAgICAiYWU3ZGUwNzY5ODY5ZTUwNDRkMDc2NDZjZjc4YzY0YTQ4NjQ4MGIwZmQ0MmNjN2IyNDYiLAorICAgICAgICAgICIwNThkYTU0OTRjNGU5OGFhMTIxZjY3ZjY1YTJjODY1NDI1YTllNjAwMmIyMjNmMDM4ODgwOTc1MzU3M2I0ZjMzIgorICAgICAgICAgICI0ZGU0NWQ4ZjAwMDcyNTVkMTEyZGRjODRkYjI2NjcwMGU0NDBiNWE4NjkwMGMzZDNkMzViMDI0YzE4ZDhhMjVhIgorICAgICAgICAgICI1ODAwMjI2ZDBhNTZkODM4ZDg5MTllNmQ1YTg3MzBkNjE5NDk5MDE1ZWM0NjY1YzYzZDc3ODA4M2EwNDJkZDRmIgorICAgICAgICAgICIwNTJhMWJiYjVmNDA4MGNiYmI0MWZhOTQ1YmFkNmE3NDc3OWY2ODA3MjVlNDdhMDhhMDUxNGYzNTBmYTVhZGY5IgorICAgICAgICAgICIwYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjE0IiwKKyAgICAgICAgICAiYzQwYzcwZjI2ZGE1Njk0ODZiYWNlNzg1ZGEzMmUzMzdhMGViOTRmYjNhMGFhNDA5YzU3NzAxNzVjOGU4Y2IyYiIKKyAgICAgICAgICAiYWE4ZDJhMWI5ODQ2YzM3ZGY3ZDY3MTAzNmQ1ZTkxIiwKKyAgICAgICAgICAiMDUyNTYxMjhhZmJhMWY1NWQ4MWY3OWVhMzM4NzkxNDdhMjRhZDc3NzkzNDZlZTc5OGIyMTFjMjQ3MTUzZWEzOCIKKyAgICAgICAgICAiZDI2YjIxNzA2NWY2MWUwMTEwYjUzZDcyY2I2NDkzNGQ5YjFhZDFiM2RlYzMzMjA5MmQyNThmMGNhZjFjNGFlZSIKKyAgICAgICAgICAiOGIyM2UwOWJhYjBmMGMyNzg4NThiNDQxZDA4Y2EzYWU5ZjAwYWE5YTNmMDE4ZjdkOWZhOThhMThkZjBkMjQ4NCIKKyAgICAgICAgICAiN2U1NjdhNDdmNTc3OWJkMTc5M2E0YjAyNTJmMmJhZDQwYzljNGE4MTMwMWNjMjhjMjYwOWQ3YmIzMzM3ZTk3ZiIKKyAgICAgICAgICAiMTQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xNSIsCisgICAgICAgICAgIjllNmRjYjExZTBlODQ3NzEzOWZhZjA0MWE3NGUyYmVkNjQzYTYyYWRlZGFjN2NiZWYzNjVlY2M0M2FlNGU1ODIiCisgICAgICAgICAgIjYwYmM3MjQ2MjNiZDYzNDJkYzY2MGQ2NjE0MmVhNjM2ODA3MTVmNTIyZmYzY2Q0YjYzNmY4NGFhOWQ3NWZiZmIiCisgICAgICAgICAgImMzODQxMDdlNDMwMDRkOTg2ZmJjZTFhMjdmN2VjYzdkMDIzOTJjIiwKKyAgICAgICAgICAiMGNjZjIzNGViNDgwMDg1ZDkyMGQzN2Q2ODc5NjVkMmZkMmU0YTRmM2JkM2JmN2RkYzE2YjVkNjJhNjkwMzI3NCIKKyAgICAgICAgICAiMjA3YzZmOTA4MzZlMjlmZmM2M2E1N2Y5ODEzMGM1MjUyMzI1MTljNzA4ZjBkYzhhMTI1NWFiNTVkYjFhMmI5YSIKKyAgICAgICAgICAiYmMxMTA2MTYwMjA3NWZmNmY5N2Y5MDkyNzk2Yjk4ODcxYTZjZDVkMjYxN2RkYzlkMjU1YTczMDBjOTEwZmQyMSIKKyAgICAgICAgICAiMGIxNGE5ODFlNWEwZTBjNmJiMmIwNDVmYTk3NTY4OThiOTNiOGE2MzQ1NDRkNzdhZmRiMWNmMGU3OTU4ZjExYSIKKyAgICAgICAgICAiNDMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xNiIsCisgICAgICAgICAgIjIwYmM0NjNiNWUxMjIwYTM5Yzg0ZTg5ZmU2NzE2ZWVjYWI1NTU1ZjhiZmNlNjBjZmI4Mzc5M2NjNDBhNGRhMWQiCisgICAgICAgICAgIjIyYzBhYjRlYWE5MzFmYjc0N2JlMzVmMWNmNmZiMTQ2NWJlZjFkZjI3NjBmY2IzZjcwZDNlMjk2ZTdiMjcwNDUiCisgICAgICAgICAgIjBkZmZlMmQ1ODhjNDM5NmE1ZjZmMWU2Mzg3YWE4Njk3MWZiMGFkMjRkZjU1MDQ0M2RkMTIyYmRiMmNmM2M5ZWQiCisgICAgICAgICAgIjYxMjVmZTU1Y2VjOTkxY2JhZThlZTE1NjJhOGMwZjRmMzY0ZjhmMGE4MGNiMzBmZDk5NDQwYmY2NTVmMDgwNGYiCisgICAgICAgICAgIjkyOTY4Y2EyZTAxYzBkNWFiYjRlZTI2NzYzNmRkNGY1MTFhOGQzMjk0MTE2MjE2YmVkYzEwODg2NDVlNDY1ZDgiCisgICAgICAgICAgImUxOThiOGFmZTFjZDU0MjRiNDJhNTMzY2VkMTk4YWQ1OTciLAorICAgICAgICAgICIwNTFiNzE0MjY2MDY2YmJiODE5YTJhMzgwNWE4OWNmZjQ2MTg3NWMwOTVmNGYzODk4MmQxYWZjMmFkMmYxNDI0IgorICAgICAgICAgICI1MGI4YTc1Mjk0N2YwMzFjY2UyYzljMzQwYzhhYzlmOWY3YTU0OGI3Y2MxN2U0Y2M1MjU2OTZlYTBjODc1M2ExIgorICAgICAgICAgICJlMTViY2I5ODVkZWFlYzc3NmZiOWU3ZDlmNzU4NjJmODk4MzUyM2Q5Zjg3MWM2M2ZiNzU2MWFjNzFjMzc2YmY0IgorICAgICAgICAgICI5NWQ0MzIzODU5YmQxNDE4OGZjZGZiNGIzN2FiY2I1ZGMxYTU4ZWVkZWE3ZTBmZTYyYWMxNmUyMDhhYWI0Y2VlIgorICAgICAgICAgICIyNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjE3IiwKKyAgICAgICAgICAiOTJkYTI2MGJjMjEzYjcyYjQ4YTA1NzUzNTAzZDAwYTFkYmZkMDJhYzdiOWZkNDRkMjQwMWVhN2FkNThhZDE4NiIKKyAgICAgICAgICAiMWZkYTUzNjMyOWFlNDE3M2M5MTY4MDA1Yjk2NjJjMDVjYmVhNDdhZDg2NGFmN2NiMTY2MDJkM2QxODM0NzFiYyIKKyAgICAgICAgICAiOThiY2M2MmM2ZDAwZDMzNGJmZjViOTBjZmU3ZDdlMTJkMDdmZTdkNGNiZDlkY2QzYzRjMjM0OTBiZThjYmFkYyIKKyAgICAgICAgICAiMDhjOTE3Nzk4MDM3M2M3OWViNGVlYTZkODFhNmJlZTIyNzBiZjQyMGY5MTk3OWFkM2YyNzFmZDY4ZGQ0MjgzYiIKKyAgICAgICAgICAiZTgxNDEwOTI4Y2E0NWI5ZGViNThkM2FlOThiMmY0ZmNhNjIxMjU5NTBiNWVlMTI4ZGJhMTA1YzM1Y2MzOThkMSIKKyAgICAgICAgICAiNWU3NDJiYmE5MjY5N2I1YzYyYjI2N2NlMDExNDFjZWNlZjgwNzUwN2RlMjljNDg1MzA1ZDBhOTkwOTQzMjMwZCIKKyAgICAgICAgICAiOGQ5YjcyNTJlZTBiMTk1NmRlODQ1ZjJmYmIyODM4Nzg1YjQ3MGE3YzIwNTNkYjM5NmIzMTVhMzBkOGE3ZjkxYyIKKyAgICAgICAgICAiZmZmZDAzZThhMzliYThiYyIsCisgICAgICAgICAgIjAzZTIzZjg2NTIzNzRkNDhkMzgxYzM3ODM1M2ViNDdkOTA2NGNkNzA4ZTFiOWJmNjg4NzA0YzA0YzAwOTAwODgiCisgICAgICAgICAgIjQ2ZTZhNDdlMGJkMmUzMGMzMzQwZjVkNGUxOWQyZGM1ZDg4OTBjOGYwMTA0ZGQ2ZjVkZDZjYWQ5YzRkOTk0ODQiCisgICAgICAgICAgIjA5YzNjYzBiZTY3MDcxOWRkMDQ4NDE4MDg5MWM5MzViOTk3OWRiOGViNDY4YTIzZTRlZjQ2MDI5ZjNhZjE0NTciCisgICAgICAgICAgIjRiZDEwYjQ3M2VkZDliMTI3YTMwNmU1MTI0YWRhNDAyYzE0OGY1MWI1MmU3ZTYyOGJmYWNlYzNmYzI1NDNhMGYiCisgICAgICAgICAgIjkyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTAuMTgiLAorICAgICAgICAgICI4NjAzYTU2MjJhMmRiYmJjYmJlNTMzMzBlOTA4ZDVhMjVmNmU2N2E1MWUwNzY4ZDdjM2MzZmJlOGI5MmU4YjFiIgorICAgICAgICAgICIzNmRjMDA3NDNjZTMzZGEwZjFjOGNmYjAwZDYzZWRkNmIyMjUyZmI2NzIxMzk3ZDI1MDRiMzBlZDFkMjkzYTgyIgorICAgICAgICAgICJlMjQ0Yzk1MWJiZmMyNDI5OGE0MmZmZWUyNmU0NTZhN2JlMTA1Y2I1ZTM3YjNkMjVkZTI4YmZjMDEwNDJjNGE4IgorICAgICAgICAgICIyY2U4NzA0NTU0ODdlNWIzMGUyNmY4ZDUzOThjODYxMjZlIiwKKyAgICAgICAgICAiMDgyMmZjMjJhOWNkODc3YzA5YjZmOTJlODAxN2NjYzAyOGQ1Mzc5OTY3YzdkMDRlZjMyZjg2OWM3ZWY2N2Q1OSIKKyAgICAgICAgICAiM2M3NzQ1ZjYyOWQ5M2RmMjYwMDM4Y2QzMzNlYWVlOTIzNTlmZGJiZjg0NjIzYjdiNTUxNDIzNWI4MzA2MjcyZiIKKyAgICAgICAgICAiNGVmZDEzYTY3MDBiZTkyODlhZDU0ZTU3ZDUyZDFmZWJiNDZhMzdhZmQ2OTU5NDJjNGNiY2ZkMzc2OGYyODIxZSIKKyAgICAgICAgICAiODg4ZWZhMGUyYzVmZDNjOWM0MmNjMzU1NTBkNzk1NWNkYmQzNWM4ZWY4NTgxYjQxZjhkZGFiMjYxODI2MmUzZCIKKyAgICAgICAgICAiZmYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMC4xOSIsCisgICAgICAgICAgIjA2N2Q0YmVjYjAzZTFlYjI3NWFlMjI1MDdhNzdhNTM5NmU3MTliNWYwMGIxMDU5NTBiYzc5OThlMDgwM2RhNTciCisgICAgICAgICAgImE0ZGUwOGE0MDc4YjlhMDBkMmQ0NmYiLAorICAgICAgICAgICIwOTEwOGQ0NDU3NWY2MTRhNjgzZWU0ZDc4YmNlMWM1OGY1MjQzNjg3Y2JlOWM1NDgzNDYwYjY1ZGYyMzY5MjdkIgorICAgICAgICAgICJiYzc4YzA2NDM5Y2UxYzdjNTE5NzM5YzhmODk1MDA4MmQ5NTZkNjBmYzM2NDViYTdhZjhlNzg4OTU0NzA2MzFiIgorICAgICAgICAgICJiNGRhMDBjMDFiOTgyY2MxMWM2OGQyNjUwYzdjYWVhNGEyNmUyMTBmZjRiMWNhZTFkYjUwNWZjZWE5MjkzNDg3IgorICAgICAgICAgICJiMjA3MzE3OGNhMjQ1Y2YwY2EyMzU2YmFmODY1NTQ2YjU0YWY5NTM1YmFiMThkYjY3OWVmNTYyNzA5Mjk3OWMwIgorICAgICAgICAgICJhOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEwLjIwIiwKKyAgICAgICAgICAiODg0ZmM1MDJjODgyNDg0OTQ3OGIyZWFjMWU3ZWJiYjdjYWYyOGVlYjQ4ODk0NTg2MDJlYzcwMzU4MWQwNWVmOSIKKyAgICAgICAgICAiYjFhNDIyMGJkMmY5MjJmMjVlNDY0Yzg4MDcwMWM4YTQ1YjFkMWZhYmM4NjYyZWIyNDk0MDA0MjZjMjIyNjIzOCIKKyAgICAgICAgICAiZWI4YWQwZjkwNjljOTBmMDAxODI3NzQ0ODAyNWE2NDE4MGVkNTVkMWFmZDI3YWZmNGYwMDcwMmY3MTVkMjkxMCIKKyAgICAgICAgICAiMDAwZGYzOTI1YzcwMTBmZjExN2Y2ZDhkMmE4MTY3MDk0ODllZmQyOWE0NWM1OTIzMTc3YmY5MmNkMGJmNmI5NCIKKyAgICAgICAgICAiNzQ1ZDM0OGExNDRlOTg3NDBmNzIyMjZhM2UyYTlkNDE3YjdjMWZkOGY4OTVmNTE1YzVjNmQ0MDZhNzJiZGNjZCIKKyAgICAgICAgICAiMzkxNTJjMzBmZGJkZGEwZTYyODIzZWU5ZGZhYjM0MzJlNjY0MmVlY2I2OTg3YjkwNDZlMDQwYTQ3OGE0ZGY2NCIKKyAgICAgICAgICAiOGRlZmIzMDE2YWE0NDNkMDY3YTFmYTQxNTU1NTUzNzRmOGJhMzI1YThiNTVlNGQ2YjVmYTA5MGVlYmFlYzljOSIKKyAgICAgICAgICAiMmUyNjFjYzA0Y2VhYTQ4YjNiZWQ3YjNmODdkMyIsCisgICAgICAgICAgIjBiNDFiNDEyMTk3MTI2MTU5ZTliZGExYTI0NjJjOGE0ZmQzZGZmZGM2ZTk4ZTRkYmZjMDZjZmNjZjE2Zjc0ZmMiCisgICAgICAgICAgImI1MjMzOGFmMTRlZDM5MzZlMDJjMWQ3ZTc3MjM2Y2M2YTQ4OWYwMGYwODk4NTJkZTVjYzQyNWI0NTA5NGEwNDIiCisgICAgICAgICAgImUzODU0NjRiNjRjM2IyZmZkMDFmMTlhMDFjMmMwMzgxZjc1OGE2NzM2NWQxZTY1YTcwN2IxMzRlM2Y4YTkzMTYiCisgICAgICAgICAgImI0YWFjYjdlODUxYTVlYWIzY2Q4MTFiZDQ1MjJkZDE0MWEwMDE1N2RjM2ZjYWZjNDE1NGNhZjA1OTNjYTYyMTAiCisgICAgICAgICAgIjJlIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDI5LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjFlZDdlZWE5NDA1ZjUwN2Y5NDE2MjNhMTdiZWE3MTdiODYwZGU0NGNiNzc2ODdiOGI4NWE2ZDdkMWVmNGY4NjIiCisgICAgICAiOGQyNTdjYjk0MjM4YzYyNWJhMjVkNDZhYWU1OTM5NjBhZjc5Zjc1ZTI4YWI2M2FjM2NhYzQ4MjBiODJkYTFjZiIKKyAgICAgICI3NTBkNmM5MzBkNmI4Mjc4NTRhYWY2Y2FjMGMxN2I4MGIwMjlmNWQzMTljY2NhNjY1YzU2OTRmNTRiYTVmMDk2IgorICAgICAgImY0NTQzNDEzZWM0YzVlOTdjYzFkZGE4OWQyYWZkNDI4NTc4NzU5MDMyYWRmOTI4OTUwNjViYWFmZTg4ZDJkOGIiCisgICAgICAiNjEiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMGQ5MzgwNzJiMTZhMDJmNWQ1MGExNWFlZWJlYjVhZmU0MzE4NzQ0ODJjNmQxOGZhN2VmMzE2YzQ3ZjRlZDZkMiIKKyAgICAgICIxMjRjZDBlNDdlYjg5Y2M3NTg3Mzc0NTc2Y2RjY2IzYmJhYTE5NWY3YjUzMTEzOTM2OWI1NmY5ZTJmNTNhZWE4IgorICAgICAgImFjN2E5N2UxZDc0NThmNTI2Y2Y3ZDcxMGM0OTAyYWFlZGY5OTdjMTE5NGI4N2I2MmNjZDhkYWI4ZmY1YjY3ZDQiCisgICAgICAiMGZlODNkZTFiODJiOTE2MDlhN2M1Y2YzOTIyOWViM2ExYjJmMGViZjBiMTI1Y2I4MDA5MWEwN2ViYzc3OWNlNyIKKyAgICAgICJmZCIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuMSIsCisgICAgICAgICAgIjg0NTUxOWRkNDVkMmRkY2JjOGRiZTBiODI5NTRjNDU4YzM2NjRkODgyNzRlNTAyZDI3OTE0NmIxOGY2YTgxNjciCisgICAgICAgICAgIjUwZTk0YjRlY2RlZTY4MzJjYjM1ZGZjYmRiZGQzZTVkYzA2NDA0ZDVmMGM3MGU3YzdjZDBlMTlmMzhiYzVhZTMiCisgICAgICAgICAgIjJjN2NkOTFmOTRkOGY1Njc4MjM5N2JjNzRlNmIwNjk4MjdlYzI3MzAxNzM3NDBjZTRhMTBlNjQ4Yzc4ODk3YWYiCisgICAgICAgICAgIjFhODllODMzMzFkMGY0NjEzNzhkMDYwNTI4NzNmMTdkOWZmY2U0NmEzMjQ3MjYwN2ZlNzNlNGE1NjE4NzllNjEiCisgICAgICAgICAgIjllN2MxYWU4MTRlNDVlMWQyYmRiMTIxOTQ2YjJhZWI4NTYzOTE2YzU0M2ViZmRjMmMwOTBmZWI1NTY2NTAwYTgiCisgICAgICAgICAgImNlNzRhZmE0NTM3MmJkZTBjNjY3M2E3ZjZhY2NiMGVlOWQ1N2JkZTkzYzM2ZGRjNTdiODQ5MGFhMmQ2ODU4NWEiCisgICAgICAgICAgIjNkYjcyOTdhZGE2ZDliM2YzNTZkYmM3NGQzMTVjNWZhMWFiZjdkZTZjZWJjYTgzYzlkZjciLAorICAgICAgICAgICIwODYzYTYyNmRjNDJiYWYzZTE2MWMzNWIzZGUzYjFhYmMxYWE1YWRmNTQxNjQ2NWQ0YzdiNmIwMWFlMmRhZDczIgorICAgICAgICAgICJmOWYxNThlYjIxM2RiYzM2MGJlNGQ0N2U1NzA3ODcxYzM5YzM4ZGJiYzk2YjQ2YzhmOWFmZWJkM2RkYWM4NzE2IgorICAgICAgICAgICI5MDk4ZTFhNzY3MThkMzU0Y2QwOTFjYTM1Mjk2YTc3YzIxZDI1MTJmZmU2NWUzYjcxYjkwMjJlOWNkMWY3YzM1IgorICAgICAgICAgICJjZTEzNjVmZDFmMmMyY2I5NjdmZjRjOGY5MGYwYzhlYWVmMGRiNzNmZWQwMGU5OGNmYzgzZjgwYzY3YjNiZTFkIgorICAgICAgICAgICIzMyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjIiLAorICAgICAgICAgICI4NjhlN2M0ZmM2MzQwYjZiYmViN2I4NmVhODllZTcyNjVmMzIzMWY0OGJhYTkyZTRhMmU4Y2UwZmExYzFhOGMwIgorICAgICAgICAgICJmYjBhY2E5NDRjNzRiY2NkIiwKKyAgICAgICAgICAiMTBjYmY4NzE3Zjc2Mjc4ZmNjOGZjMGFhYjQ2ZTkwYTNkMTgwYzNjOTJhNGE4M2ViOTNjODkyMGFmODhiZDY1MCIKKyAgICAgICAgICAiNmI0MDczNDUzZjBiZWZmM2U2MWVkYmI0ZGJjOWM5NDdjNjlkZWI2OWExYWM5MjllZmMxNTYyNWI5ZWQ3Y2YxYiIKKyAgICAgICAgICAiYzQyM2E4ODc1ZjM3ODBkZGRhOWViMmZjY2Q5ZmEwMTQ2MjZhN2ZjZjk5ODY0OWJjZmE1OTUzYTNjNDNlZmJjYyIKKyAgICAgICAgICAiMzg3MDRkMDI0OTE5ZGYyZmM0YWRlYTM5ZTM0Y2QxNWNkNGY4NmFkM2Y1MDEwMTJmNmJkMjhhYTUwMDJjM2I0MSIKKyAgICAgICAgICAiYmEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMS4zIiwKKyAgICAgICAgICAiOTJjZjg4MGRhNTg5MTVlM2FhOTUwODkzNTNlNDYxODRjOTE1OTQ1YzU3Njc5YzFlNGJkMzgyNWVkOTE5YTMyMCIKKyAgICAgICAgICAiNTJlOTc4NmUyM2I5NDI1MzliOTMxNWY1ODFkYWYwYjQxZmEzMjYxYjk2N2RlNDBjZDVkOTJhNDgyNGYzNjRiZCIKKyAgICAgICAgICAiMWUxZjUxODQ0YjEwOWIxNDU0MTM0YWRmMjM0ZSIsCisgICAgICAgICAgIjA4ODI4OTY2YWM1ODM2YzUxM2RhNGZmYjg3NjE4Nzk3OTQzYzYxMmVkZTdlMTJiMzEwMDNlZjE3MTA2NWI0Y2UiCisgICAgICAgICAgImRjNmE4MGIxNDU2YzIxYjY3NGIzNzc5YWQzNWY3MDE3N2FhOTJjNmVhYzBiODMzYTk2N2Q3ZTk4OTkwYjQ4MjQiCisgICAgICAgICAgIjQyMDVkYmYyNmY1Y2Q1N2VmODdkYzZmZTVlZDk5OWNmOGNhNzVkYzhlNjI2ZmQ2ZWIyODFjNDk5YWZmNzI5ODkiCisgICAgICAgICAgImVkZjUyZWM2ZjNiY2FmODFlYzVmOGU4MjMwYjg3ZWRlZGNmN2I3NzgxNDNlZDZjOGNlYmJhYzlkZTU0MTA5ZGMiCisgICAgICAgICAgImY3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuNCIsCisgICAgICAgICAgIjg3M2M0NzE1OTAyZmYxOWRlMDhiY2NiMGNmMjYzNzYzZmFiMDE2ZDAyMjBmMDMyN2I0NzU1ZTM1NGViMjQ3ZjUiCisgICAgICAgICAgImRiYzJkMzk2OTg5YmJkMzZkMzFmNjE5ODkzOTBjYWMxNjY0MzEyNWU2M2UxYTFhZTFmMWJjOWJiZWRhY2NlNjciCisgICAgICAgICAgImZjMWI1MWE3IiwKKyAgICAgICAgICAiMDUyNTljNDgxNTkzZWE4NmQxZjAwMmNhNThhYWVlOTMyOWZhZmUyMThmNjc1MGYwZTU4OGYzM2I2NGU3MDhmYiIKKyAgICAgICAgICAiMjdhNmZlODFlYmNhOGFkYWVjNzU3YTE0ZmY1NWEwYzg4YWRhMmMzYjQzZTM5ZThkZmJlNjc2ODk0MzY1YTIyMSIKKyAgICAgICAgICAiMGMyYWE4MWY0MjRkODUyOWMyMDc2YjAwYzkyZGQ4YzhhZTNiNzgwZDg3ZGJhNzI5ZGRmZGVmN2Q0MDdmODU0YSIKKyAgICAgICAgICAiNzFjYjY4OGI5ZjAzYzcxZjNiYWEyNGEyYTZlMWNiNDEwNzc0MzA5ZTQwYzEzYzJiMjY0NzM4ZTU2OTdjZmRkZSIKKyAgICAgICAgICAiZjMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMS41IiwKKyAgICAgICAgICAiMTRiMjc2MDJlY2U4ZjA2N2I1ODQ4M2FmMTc3N2M0ZWQxMGI4YjY0ZTY0YzY5ZjU3ZWY4ODlhMWNhNWQ1YjVkNiIKKyAgICAgICAgICAiNTFjNjA4ZGIyMzlkZWVhMTUwZmYxMmNmNTBjODY3OTYxMmY5N2VjYjA5ZjciLAorICAgICAgICAgICIxNWM0YjNmMDgxYTJlNThhZjU5NGU0MmZkNmFjY2YxZDBkNjFkOTNhNWUzYTg0Y2Y5MDRiOThkOWFkNzEzMzYxIgorICAgICAgICAgICJiNzg0YjI0ZDkyOTVlNDNjMjNiZTkzZWYzNjUxNGE5YmFjMmMxYmRmNGVlNzMyMzQzNjc2M2EyMDY2MmYyZGIzIgorICAgICAgICAgICI0MWQ5ZTM4YmVkNWYxMmM3ZGQxOGJjM2JiMGZjYmE1YzAwNTBiZDFhMmE0NDAzNzE5N2I4YzlmYzJhYTU5OWViIgorICAgICAgICAgICI0M2MzZDk2NzkyNDJjOTliYmM0OWIwM2I5OGVhY2E4MzQ2Mjg3MjU5ZTZlYTJlODkxNTVkMGRkMmI0Nzc4MDM1IgorICAgICAgICAgICI3NSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjYiLAorICAgICAgICAgICJlNTY2ZTVmYTU1NmM3NjViNjJiZDZlMzc0NTIxZjUwOGZlNDQ2NjY4YzY0NzRiZWYwNDZjYzY4OTRhODczMjJlIgorICAgICAgICAgICIxOTMxZTgwZDllZDllYTgwNmIxNjdhM2FmNzdmYzA0OTM4YjU1NDhlZmJjMDY4ZDRmMTk2NmE5OTc2MjVhZjMxIgorICAgICAgICAgICJhNDAwN2YwNjk4YTg0NjlhYjY4MWY0ZDUwOGI0YTQ4YzhmZTcyMGNiNWE5NGE3ZjQ0M2RkNWE1ODAzMDQ5N2RhIgorICAgICAgICAgICJhOTU5YTNhYWY2ZTM0MTg0Mzk3YSIsCisgICAgICAgICAgIjA3ZTdjOTQ0MjYyNGJkMjY2Y2MxY2QxYWYzYjhmMDYyOTRkZGExYzA3NzY3ZmUxOWJjZWQ2YzllZDdjNGIxZWQiCisgICAgICAgICAgIjdmMjZlMjAzZGI3ZjNhMWJmYTU3ZGFiYTZmM2FhMDYwMDNiY2RjMWUwMGMyZDNkNzZiOWNiZmY5Njg0OWIxYWYiCisgICAgICAgICAgImY1NDJkMGQ3YWZjNmU0MjI0OTJlYWIwYWI3ZjhlMWQxYWUwYjI3OWI4NTE5NDViNzY1ODUxYjlmOGFkODgwZGQiCisgICAgICAgICAgIjE2NGMxMWFjNGE1N2Y5NmEwZTQ4NGJhMTZhYmYxY2JlOGFhYzA5MGFkYjZhNzE3OTdlMTMzNWVlZmUyYWM5OTgiCisgICAgICAgICAgIjBkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuNyIsCisgICAgICAgICAgImI0NDNjMzQzNTI3YjMwZDVmZiIsCisgICAgICAgICAgIjBiM2YxM2MyNzIyNGQxNjEwMWI5YzgyMDFmMWI0Zjg1MzdkYjNjMTE2ZjNjZTEzMGJlMGRlMGRjMGRkMjBmNzciCisgICAgICAgICAgIjNjZGY3YjdmMzcyMzg3YzRiNjUzZTVkZDQ0MjE4NDQ1NzQxMWE4MmY4ZWQwMDM2NmVjYzA3N2E0MjY3YzlkN2UiCisgICAgICAgICAgIjU2NTQ5NjYzMjM5YjQzMTlmZTQ5OWFhNzg5NTQwNDljNzQzYmJmMDlkNzdiMzAyOWQ5MThiYjdiOWE2YWU4MGIiCisgICAgICAgICAgIjEyOWU0MWJiNTZkYWQyYjhhNGI2ZjMxOTMzNzRjODI5MmZlMDE3ZDA2MzM0N2U5MWNiZjRkZDM5MzljMjM3ZjgiCisgICAgICAgICAgIjNjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuOCIsCisgICAgICAgICAgImRiOTAwNDdmNjE1YWQ3MTk3MmJhZWQwYzEwNjI2ZWM4Y2IxOGM2ZDc1ZWFhZTA1ODIxOWZkNjE5NTQyNmQ0NGQiCisgICAgICAgICAgIjVjNTQzYmVmM2M0YzE0OThlODc3ZDdjODUzZTUzMTIxZWIzMTU3MDA4MWQ1ZGU0ODg1Y2JjOTI1YTZjMjIzMjEiCisgICAgICAgICAgImNjYzljMzc4NGViMjE5ZTQyYjdlZGI5Mjg4Nzc2MDczMjk3OThkNTU3MzljODlkNmQ2YjNmMGQ0MzBiYmJjNDciCisgICAgICAgICAgIjIyZWFmYTY3ZGVmYzg2YWJhNmU2MzQ4M2ZkNjQ5OWIwM2ZhYmRjODQ2NWQ5OGJiYmU0NDAyYjAyMzExMzVjMjEiCisgICAgICAgICAgIjI0M2Q3ZTAyYWQ1ZjdlOWU4Yjk0NjBjMTJkZGUyYTM5NWI0NTY5NjFjYzNkZmQ5YTEyZjVkOTM1OWUwYjNhNmIiCisgICAgICAgICAgImQ3N2Y0NDY1NWI2MDNiMDI1NWRiYmFmZjhiYzg0MDc1OWEzNDYyZmVjZTBkOGRiNmU0NWUyZmUyYmJmOGI2ZTkiCisgICAgICAgICAgIjdiM2ZlYWMwNzk4NjczODI1N2FiOWY4Y2ZhNzk1YTIwMTkyYjVlMmNlYTExOGNhNzYyMjUyYWY2YzZlYjAwZWMiCisgICAgICAgICAgIjVjNjgyMGJjYzdjNyIsCisgICAgICAgICAgIjAwYWFiMDY3ZDNhODYzM2QwYmViZDU5MWVkMzRkMDY3ZjQ3MThjZDdmOWIxZTM1YWFhNDA1ZGExMjIyYWI5NDAiCisgICAgICAgICAgIjM4NjY5MjFmYmQwNTc0MzM0MDdhNGFhZTdlMjZjNWNmYTBiYzljMTE1NzA1N2IxZGExY2YzNjI4NTE4NzE5YTYiCisgICAgICAgICAgIjAzZjZjM2M0ZGVhMzBiZjQ5ZGI5YjA2OGFmZWM2OTgxMjFkY2U1ZDYwZDkzYTZmNTYzM2ZjNmFmOWRmNGM1ZGMiCisgICAgICAgICAgImNjMTM4YzI5NGVkZDQyOWQ0YWZlM2IzMzc4ODY4MjU1Y2M1Mzc4OGNmMmI0Nzc0NWQ2NGFjZDg4NWJiNDdkMmUiCisgICAgICAgICAgImVjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuOSIsCisgICAgICAgICAgIjJiZTAwNjdiOTUxODViYWRlMTE4ZGNlOTVjNTcwMjliNTU0YjI1ZTFjMzk1MTlmOGY4OTA3M2I5YTA0YjdlOTEiCisgICAgICAgICAgIjI5OWNkYjg3YjBiZDE3YzlmMTUxOTI1Yzc1NmViOWI2NDUwNzI1NjEyNjQxMDc4ODIxMzg4NTRhZTdkNTA3ZTEiCisgICAgICAgICAgIjVmY2ZlODQ3MDk0NTQwZTcxYTU0N2Y2M2I1OTA0NjdmYWRmZjY0N2Y2NDNlMWNlYzExMjQ2NTI5MDYyYzllNDAiCisgICAgICAgICAgIjg4OTJmMmEyMGNjY2MwYWU0NWNhOTdhNDdmY2FkYzhmZWRlMjFhMjQ3MTExNjc3MDZjYzRiNWQ2OTQ3N2U1YTgiCisgICAgICAgICAgImExNDZiOTYwY2Q0YjE3Mjc0MjdiMTY1MTdiNjNlYmZiY2Y4NGQwYjFhYzhlN2U3MGYwNDQzNTc1MjJiMWQwY2IiLAorICAgICAgICAgICIwOTc2ODExMjE3NzE0NTQ0NDEwMTMzMjQzYmViYTlhMjFhNmY3MjEyYzY4NzkxNWM3MjAyN2JiYTMxMTJmNjk3IgorICAgICAgICAgICIwNTQyNWNiOTk0Y2JiNmQzNTljMTQ2Yjk1ZGIxNDQ2NDM1ZDRjZjk2MWRmZDVjNDk4NzM5YmZkNGJlNmVmMWFkIgorICAgICAgICAgICJkNzRiODFiMjg5OGE0Y2U0M2RjMzdjYjBlOWVkNzc0NGNmNDA5YmFiZmY3MTc4ODU0MmZmZDI4NmViZTUyNTVkIgorICAgICAgICAgICI2M2RkN2JkNTViYTQzZjUxODRlMjQ4ZDNhNjY5MzNjZGIwNjk5MWVjYzkwZWIzOWVlNzFkNjVjODhlZDI0ZDk0IgorICAgICAgICAgICI0YyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjEwIiwKKyAgICAgICAgICAiYTc5MGU2YWM1ZDU1NmZiN2NmNDQ0NjBjN2I5YmU1ZWI3ZjI0Zjk4N2ZmODkwZGNiNzg0MDI0MWQ0NTU0NWI3MSIKKyAgICAgICAgICAiMDU2MzVhMWFhZjQ0NTdlNjQxMGM2NWFlY2U1MDExZTI3NzVlYzg1MzBhNjRhMTg4MzllOWM1OGE3Yjc3NDI0ZiIKKyAgICAgICAgICAiNzQyOTNkY2I5ZTllYTg3MzZkNmJhNThiMWM2NjUzZDU3YmVhYWI5ODczNWY3YWY3MzI0NzdiOWFmNmEzM2ZmMCIKKyAgICAgICAgICAiNzVjN2U0NjYzOWQ3NDg1NTA4MjBiYTZhYmQ0YTlkNDhjYjQ5MDNmNjViNzZmODE0YzZjZGM5NWU4ZDllODcwYyIKKyAgICAgICAgICAiMjQ0YTAyOWIyOTRhOGE1YzgyNmFiMTYxZjZmOTc4ZDlmMWMwM2ZjZGRhYWVmYmZhZGI4Y2FhZTg0YmMyZGQzMyIKKyAgICAgICAgICAiMmViMDQ5OTdkNjFlZmE5MWU5MjQxZTRjY2Q5NzY0YzcyNmU3NjZlZDNiMDMzOGQwODZmMTAzMmMxNTMzZWY1OSIKKyAgICAgICAgICAiM2Y4OGZkNTYwMzM3OTFiMWQwNjI1YzZjYTUxZWVjMjc5Y2ZiNmFlM2YxMjcwMGNmNWJhYzI3MWU2NTY3IiwKKyAgICAgICAgICAiMGQxYjExMWNlOGRlMWQ3YzRmN2ZjZWFjNzNkZjcwYWE2ZWRhNThkYzMyZWI5OGY3OGU3ZmI5YmMyNWRlM2U2YiIKKyAgICAgICAgICAiMDlhYjhjYWUzYjIwMjZiNjE4N2ZmNjM2NzJlNTdkYTRhYzI4OTYyNDQ1ZDFmZTk1MWQyN2JlNmE2Y2U3YTU4MCIKKyAgICAgICAgICAiN2UxMzc2MTM5NDQ2ZTg1NDlkNDhhYTU5ZmMyMjMzNTRkMTIxZmRjYzM4ZjFkMDI3NWU0MTg2OTIyNzAwYWRjNiIKKyAgICAgICAgICAiMWRhZTFlNGJlODA1MjIyYTFjZjA3ZjExMGE2MTU4YTJhMjYyNThmMTljNjU3YTExMGMwZDlhZDI5MTY4MGM3NSIKKyAgICAgICAgICAiOTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMS4xMSIsCisgICAgICAgICAgIjMyYWZkMTNlNjA3ZDg3YjI1ZmY0MGE4ODViMjUwOWY1MjFmMmEwYTc3MmE5NmEzOWZiM2Y3MWM5NjM4NGIzZDciCisgICAgICAgICAgIjU3OGY0OGZjZWE5NzM5NTYwYTY1YmZiNDgzZDk2MDhkMjAyNTU1ZjY2ZDYxMmQxNmI5MjU1Mzg3YjRlMTEyNDEiCisgICAgICAgICAgIjE1ZWQ0OGJmZWY4Yjg5ZDhkZGZjMjE5Y2NjZTQ4Nzg2YzllNjQyNmE5MjEyZTdiMTZkOTcxZDI3OGExMTE4ZjIiCisgICAgICAgICAgImY4NmI5YzRiYmY3NWM5YzJkMDk5ZTNmNjY1NDhmMWY0YThhODIxZDcyNzQ0OThmN2NjZTZlYzVlMmJmMmJmYWQiCisgICAgICAgICAgIjJjNmZjMDA1ZTgwYTQ4Y2FlNDY5OTJmYzgyNjdhNjQ4MGFjYjg5NGNjYzliNjIwOTVjYWQ5N2RiNzBkODgyYTEiCisgICAgICAgICAgIjNmYjM4NTg4YzQ4Y2ExOTBmMTgwY2IzZTYxYWNiNGUyY2ZkOWNkYmY4NTVjNTM5OTIxZjY4ZTExNDlkMDU0N2UiCisgICAgICAgICAgImY1OWFmNTM3OTJkYzY2MGRhNWVmNDhhN2FiODkzNmQzZDM2ZWQ2YjY0NjllYjZmZDk1ZTNhZjE4MmM4NzY4ZmEiCisgICAgICAgICAgIjYwMDQ3ODU0ZjE4ZjM3NDFjMTg4M2JiMDc5MjY4OGNhZGI5ZTRkZjM5MWQ5MTE0NWI4NWUyYWUyNGZmZGZlNTEiLAorICAgICAgICAgICIwMWE5MzdiM2NjODI1NGQ1MTUwODcwOWU0YTRkZTdiMTgxZGVkOWE0NDdiM2VjOGRhZDQ5MmMzOTc5NTJkZjdjIgorICAgICAgICAgICI1NTBlNGIyNmM5NTAxNzI5OWQ4ZDQ1NWZmNzk3MWMzMzhjZDAxNGRmNzhlMmE4YWE1ZWJlZTI1OGY0OTI1M2Q1IgorICAgICAgICAgICIxYWNlOWE0OTMxOWZmYzgwN2FkNzBiMmRmMmM5NmRjZGI3M2I0OGFjYmM0ZjZjM2MyYTcwMWU3YzE1NGIyNzliIgorICAgICAgICAgICIwNzA1YmRmMjU0OGM4YjM2MTFiOTdkYTFhYzA5Y2QxMjEyNTA5OTU0MGJmN2JhOTliMDhjMmYzZDVmNmFlYTdkIgorICAgICAgICAgICI0MCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjEyIiwKKyAgICAgICAgICAiNWIwMGI4Yjc5NGExMGQyMWYxYjQ1ZWNhYTIwZGY3YzViMzUyMmMxYjFkYjRiMDg0Yjk1OWFhNGU1NjU4YWM1NCIKKyAgICAgICAgICAiNjhmNmU4ZmI2MTJmZjk5ZjMyMTZiNWQyMWNiNGFjYzBiYjQyZWVmZGI4ZTgyZDc1NGI4NWQwOTc0NTg5NGE1MiIKKyAgICAgICAgICAiM2MwMTYyZDA4ZWNjZTQ4Yjk5ZGQ2YzM4ZTJiZDNkNTMxYzg1NjJkZWVjZmM2MTUyMzY5YWFjZjU4MGVhZjlkYiIKKyAgICAgICAgICAiNmM2OGI2OWRmMmZiZjMwNTNmNjAxZjcwMDIyYzllMzgxZGZiYzU5MDk5YzM3YmRlNWFkODlhOGNjMWVmZTRjNyIKKyAgICAgICAgICAiYjdkNzhlOTA5N2UwODEyMWVkYTY0YWM0NWMzMjdlNWVkYWY5MjJkM2MzNWY4OGI1MmM5M2QzOTlmNGMyMzgzNiIKKyAgICAgICAgICAiMmZlOSIsCisgICAgICAgICAgIjBmYzZhYzFkNDI5NDc5MzhjZDI1ODZkMGU3ZmMzYTA1NDJiOWFmMTJkMzZlZWJmOTJiNWQwNDljNzk2NWIxMWIiCisgICAgICAgICAgImE5Y2NiZjQ3MDBmMzQ1NjA5MTExNzdiOWQxMjk2ZjFjNjhlM2FmNDY5ZjRmMzk5ZGJjMTg5YzIzZWE3NDY1OTgiCisgICAgICAgICAgIjI4MTMzMjMzMDVlZDZjMzVmZjljYzEwOWQwYTIzMDNmZTdkMzI5Y2EzMTdlYzRiMThlZGQxOWM2MmM2MGEzYzgiCisgICAgICAgICAgImMzMTA2Zjg2ZGJkMDcyZTNlMWViODc4NTI4OGMyMWFiY2FjMjJlMGMwZDQxZjRlMjNlN2YzOTRkNDY4MmY2Y2UiCisgICAgICAgICAgIjg3IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuMTMiLAorICAgICAgICAgICJiNzUwYWU2ZDRkMmNlYjkyMTQwNTM0NjQ4ZDM2ZWYyNWU0NTE1NWY1MmJkZTFiZjI2YWI3IiwKKyAgICAgICAgICAiMTZhYWRlZGNhMDllMDYyNTYwYzY2MWQyYTQ5YjBlZTRkOWNlMjM5MDdjNjlkMTAwMDRmMTQ5ZDEwM2M1OWMxNiIKKyAgICAgICAgICAiZmU3ZDQzNzM1OTdkYjlmZmQ4OTIzYTc3YTZiOTQzYjE4OGM0NzQyNWUyYTllNTMwNDEzZWZkYjY4NDhkZDM0MiIKKyAgICAgICAgICAiMGJhNTNlZjgxYzI1YzU3OGY4ZDk1MTRkOTNmY2M5Y2IxZmI1MmY1OGQ4OGE1N2QxZmQzZmUyMmRhMzEwZWNlYSIKKyAgICAgICAgICAiOWVjZTU1ZTk2MDhkNjNhZTIxZGJhZWE2NTcxYjc4ZmNmZGQyNzFiYjY1OTI1NzQ3NmI1OTk1Njg3YTAyYmJlNyIKKyAgICAgICAgICAiODkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMS4xNCIsCisgICAgICAgICAgIjQ3YmUwMTAyMGViN2U3ODc1YmQ0ZmNjMDA1YTgyYjM2ZmRmMjE0NWVmMTMyZTJlZDE2MmZmNjk0YmM3MTU4OWMiCisgICAgICAgICAgIjdkYzZkNWEzZjg5ZDU5N2YyZDJhYTM0MzMzNTExOGY2ZmRiZGVlZjIzZTYxM2NiYWNjZGU0MTk1ZTY2NGEwMDkiCisgICAgICAgICAgIjRiMDdmYzBhMzI4NDhkNjEzOTAzMWNmNTcyYTFlMzIzYzVhNzA3YjZmYTJhZWVmMmRjODcyZGQ1YTNlNzZiMTMiCisgICAgICAgICAgImY4ZWY5NGFkZWJkNGUyMDU3NDhlNDg1YjQwMDFkNWQyYTA5MGI4OWIyZTY0NzRjNDc5ZTdiMDBkMmQ1N2Y1ODYiCisgICAgICAgICAgImFiNzZiODBmNzk1YmE4OTk2Mjg4MjkyYzNmMmNhNTFhNDRlNGU4NDFjMDM3MDdlNDgwMjVhZjRiZmQwYWI2ZWYiCisgICAgICAgICAgImViODM2MmVkZDVkMjM0MDViYTBlMjMxYjMzMjRlMWNhM2M1ZDYzOWQyYzlkODIiLAorICAgICAgICAgICIwNjM5MTc5MjliYmIyMDkyMTdmZjQ4ZWQ0ZjU1ZDA3YTAzZjc2ZDZkOTQwNDhiNmY3MTMxMGIyYzk2ZTIxNGFiIgorICAgICAgICAgICIyMjBkNGU0NWFjMDFjOTNkY2M4YTVjMjZhMDJkZjYxZmZkYjMxNzU0OTY2NTYxMGM4NGJkYjg5NDVmYzZiYmQzIgorICAgICAgICAgICI4YmFlZDdmZWU5OGViMDU2ZDlmMDM5YTg2MGQ0NTJiM2FjYWMxODAwYTkzMmEyOGM4ODI4NmFiZGE4ZGUzY2I2IgorICAgICAgICAgICJjMGQ3OTRkYWFiN2E4YmEwMTEwOTMzYjRkMWRlZDIzOWNiZGQ1NTdkM2U1YTE2MjkxNzg1MzMxNWRlNjgwOTAwIgorICAgICAgICAgICJhOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjE1IiwKKyAgICAgICAgICAiNGI5YzA5NjQ0ODEwZDRiMzA2NTVlZDgzMzhiYjI3NmI2MjRjNjgwMTk4MjJkMWZjOGY3ODg2MWUxM2UyMmFjMSIKKyAgICAgICAgICAiNzE4MjFjZmRiZDNmOGY1YjhkYzljMGRlNzMyYjc0NmUxZDEzMmU1ZjNmMTQ5YTVhODY3YzJlZTQ3OGU4ZjE0YSIKKyAgICAgICAgICAiZDRiOWRkZWJkM2FlNzgxN2U4NDk1NWIzNDA0YjA5NDM5M2U2MWNhMDE4OWQwNTUzNjliNDI0MzAwOWEwZjU0MCIKKyAgICAgICAgICAiM2Y0MWMxMDAyMzA4YzAwY2U2OTk2NzE5MzdiYWYxM2M3ODkzZDY2M2M5NDdmYzdmODQwNzFhNjcyZTVlMDczNyIKKyAgICAgICAgICAiOGFhYzA4YjNmYWYwZmNjZjViZjI4MzA5MjU4NWViZTI0MGEzMDA0NjIwYjZmM2FlYjY3MzJiN2I5ZDhkM2JlYSIKKyAgICAgICAgICAiZmM4NDY3ZDFmMWYxYzdkYTY2YjFiZjVjY2MxNDViMzIyNDI0NWZhZTMxZGZiNDAzZjQ5M2MwNzU1MzU3YWRkNyIKKyAgICAgICAgICAiY2IyNzYzNzEzMjI2YzU0ZjQzNjQwZjdhNjcwZWI3YjFmNmU5ZTc3MmYyZTUxNDE3YTcwNWNmYzU4NzNmZmI4OCIKKyAgICAgICAgICAiYTVkYjA3ZWNjNGVlODlmMzMwYTY2OTBhODgxMiIsCisgICAgICAgICAgIjFhMGI2OThjZjNhMDU4YjQ0OTE5YWY3M2MzZGUzMjhlODZjZTlhNWQ0OTk5ZTAxMjJmNDE0Yjk0ZjMyYjJkOGEiCisgICAgICAgICAgImIxZTY1NTBjYzBkNDhkYzA0YmVmYWMyYzY3YTRkMDY5YTcyMDhmMTQyZGMyNjdiM2UzOGY2MzM4YTBiMTgzOWEiCisgICAgICAgICAgIjkzYTgzNjgwN2QxODFlM2YwYzdlODc3ZmIyNDIxNjAyMDA1YmNhMjVhOWMzNzIyNjZkMThlNmQ1MDBjNWM3YWIiCisgICAgICAgICAgIjEzMzg1MjgzZDJhZjkxOWQwYmJhMGRjYjg4YmY3YmI5OTcyZDY3MDA4ZmY0OTg1NDdkODBmY2E2NThlZmU3NjQiCisgICAgICAgICAgImE1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuMTYiLAorICAgICAgICAgICJlYzlmZjE0YjlmMTk3YTJiNGYyNDk0OGMyOWQyZjY0YTY0NjI1MjIzZGRiODUzNDYzNzhjMmMyNTM0M2ZjYmVmIgorICAgICAgICAgICI1ODVhOTllMWVjMGJlZjBlZjlkMDllYWQ4NWJlZTFjNGJmYjM1ZTQ4ZmIyNjQxMWJkZjE4MGRjNWNmMzE3YjNhIgorICAgICAgICAgICIzNDgzNzFjN2M1ZjRhYTZkNTkwOGZjZmMxZWEzOTAxOGNmMDQ0OWU1NWY0ZWY5OTRiZmRhNDA0ZjFjMTg5ZmRiIgorICAgICAgICAgICI4YTBhNWIwOTA2YzNkNDBkZTFlNzg3YzJkYjRkODhkYmMyMTBiOWY4MDFmNGNkOWM5NzIyN2U5YjJmYmMyODExIgorICAgICAgICAgICJlMzhjZWRkOWU5ZjAzNTYwMDMxZDRjOTU4YTc2ODFiYTlkN2VhNWU3OGU5YmQ4YmRlZGRiNDE1Njc5MGVmMjFmIgorICAgICAgICAgICJiNzRmYmM0MTU4YzI5MzllNGVmY2I4MmVmZGM4ODE4ODZhNWI2NzEzYTI0YjliNWYyZWUyNWNjZjcyMWE2NGUwIgorICAgICAgICAgICJmNjQwNzc4ZWNiM2QzNWI0YjhlZWE4ZWNlMzEyMzI2MzYzMTBhZTNjYzZiODJiOGEiLAorICAgICAgICAgICIwMTNiNDIwNTc4MjBjNzNlM2FjZmMxZGY0ZGUxNDQwYzY1OGUwMTgwNDM2ZGE3MTg1YTlmYWJkMjZlYjMyNjc0IgorICAgICAgICAgICJiNTU0ZGUzNTRkMWY0ZjI0ZTg3NzczMjY3ZmVkOWRkMGZkODI5M2VhY2E0YWYzZDNhOWRjNTE4YzhlNDk1YTE0IgorICAgICAgICAgICI3Njk1MTExZDNkYzE3NzYzZjFmMDJlZWMxZWUyOWZiMWFiNzQ5Y2YzMGM3ODg2ZGE4YjJmNjQ2OTY5NTk4YWE3IgorICAgICAgICAgICIwZjlhOTJmYTRmOTM1YzdjYzc3YmZhYjY5ODFmMGRmMGQyODVjZmIxMGQ2NjU4MTUzOWY3OGQwMzY4ZWQ0ZjkzIgorICAgICAgICAgICIwMSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjE3IiwKKyAgICAgICAgICAiNDE0Y2VhOGVlYzZkYTNjNjZmZmM4NDcwZjdlMTQ3NjBmNzRiZjZlNzViODRkYzk4ZmM4MDYwZGQzYzIxOWU3NiIKKyAgICAgICAgICAiNzc3ZGZhYmFhNmU2YjkyOTU1Mzc5ZjNlY2FhZjVmY2I4YWE1NTQ5ZWM5Y2RkMWY1ZDU3NzIwMWI4ZTMyOWY3MiIKKyAgICAgICAgICAiZmFhMmJjYWRlYWVlMzg4ZGFmN2Q0MDhhZmRlNjU1M2QyNDE3ODYwZjNjOGUyNTMwNWRmZjc2ZGJiZDk1MTZiNiIKKyAgICAgICAgICAiODY4ZWU0NTZmYzFmN2I1OGQ5ZWQxOGE0NmU0ZmMxZTM1M2U4ZDA3NmJlYTMwYmYyNDdjNjBlNmY2ODU4MDFhNiIKKyAgICAgICAgICAiZDNmNjMwYWVhNmFiYjQxMmE5NDFmZmE2ZjYwN2Y2YmZiMTNkOTAwMTI3YmJlY2VlNGY5OGE3YWNhNjkyMDgxMSIKKyAgICAgICAgICAiNTc1MDUzYWIyZDQyNzAxMzgwMWQ4Y2ZiYzM4ODBmMTQ3NTQzMTU1NWEwODZmYTU1NjBjNmUyMjA2ZDllZTkzOCIKKyAgICAgICAgICAiMTM0NGI4MjQxYzFkZDFkODY0NDg3NTNhZjQ0YjAwYTBjOSIsCisgICAgICAgICAgIjE2OTdiYjIzZTI5MTUyNWY0YTBlNzkyNjJmMzQwNjYzMGQwZDZkZjMzMjQ5NjkyNmM0ZTVhZWY5NmU0MWQ5NTUiCisgICAgICAgICAgIjE0ODY0N2VhZjc5MDY5NmFmNjhjNzhlYjJhYjYyZmY3MTk2Mjk2ZTFlYTg4NmRmMDkxNzM2NjA5MGI2MzBhYTMiCisgICAgICAgICAgIjE4NThiNTE2MTU4NzNmYTZiYzhmZjA4ODVjNTdiMmU3N2EwNDkwODg5M2NjZWZiMTQxMjQwMzk5MWQwZDIzYzUiCisgICAgICAgICAgIjU3ZDIyMjI5MWNiODUxN2I0MzI4NmVlMDA1Njc1OGQ5YzEwYmNkNjliZDY4Yjg0YTJkMWY1Mzc5MDViOGE0NjUiCisgICAgICAgICAgImU5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuMTgiLAorICAgICAgICAgICIxNzg5YjgwOGIxMGRlOGQxNzc4YWE0M2Y5NDEwMWNiODlmNTYzNDMwNjFhMWE5NDNiYjhkYTU1ZWU2Yjk3OWUyIgorICAgICAgICAgICI3YWZlYWIwZWQ4ZWUzNzE0ZmJlNzBiM2JlODIwNjAzZTVjZWFkZWM0YjIyZjk1ODc3MzIyNWRmM2FhZDQ4N2IyIgorICAgICAgICAgICI4MDU3ZWJmZWJlMmM4NzkzZGEzODQ2YmRiMTU5MDNhYzcxZTljOTNiMjAxNjY2OGJkOTA2MzAxYTBhN2Q1MGRjIgorICAgICAgICAgICI2MGIyZmFkODc1OWQxOGRiMTQ3ZjIwNjY4NjVmZDkwOTUwYTE4ODc0N2Q5YjY5Njg1MzQ4NmRlYWFiOGU0NDNmIgorICAgICAgICAgICJhZDI5OTJmYzhhNTY1YmRjYmFkYWIwYjkzMzNhYjdmY2RiOWMzZDBiY2ZkZTUwYTU4ZDJhZWFmMWNlZmIwYzk1IgorICAgICAgICAgICJmOTA3NzNiMmZhYzEzN2NkYmMiLAorICAgICAgICAgICIwMmY5OTc1MWM4NDQzOGVhYzdmOTk2MzI1MGQ5ZWUyMmZkYTcyOTdiNmU4NmUyYThiY2M3YTliNWFjMDFmNzkwIgorICAgICAgICAgICJlMDk5MTE3MDQ2NjA4NThlYTVjMTYyNzJjMzgxMzNmYWRhZGVmYTIzYzEwMjkwOGU0MTlkZTJlYmU5YWMyNzE5IgorICAgICAgICAgICI0NTcyODc4ZTJhOTcxZjg4MzFjOGY5MTdlODUyZTg1MWRmOTlkNGRmMDE4ZmRkYjJjZWEzMWFjM2E3YjY4OTc1IgorICAgICAgICAgICJlODBhOTk3Y2I3ZGQ0ZDRkZjc1N2JiOGMzZWNkOTEwYmNiMDYwMzM1NTIxMjdhYzMwODExNzczOWEwMmMyMDE3IgorICAgICAgICAgICIxNyIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDExLjE5IiwKKyAgICAgICAgICAiZmY4NzVjY2EwZWZjM2Q5MGY1NmUzMWY0YmI2Njg0MTQ4OTRkMDlkZTkwMTI3Zjg0NjYzMjQzMTBlMTEzNjlhMyIKKyAgICAgICAgICAiZjJmNjQ5M2MxYzc4YTM2MmIyYTE0ZmI1NDg4Y2I1NmNlMDIyNzM5ZTQzYWE3NjNkOWMxYzk3YjYyMWNjNTM2OCIKKyAgICAgICAgICAiYzljMDBlODE2MDY3OTI2OTVmOWFmOWFiNjMzZWYyMzllYWIzNDQ5ZGRhOWU2NjA3MDg5YzM3NTE5MDM1NGY3YSIKKyAgICAgICAgICAiNTlhNGIzZWY3NTIyOWQxYzQ3ZWNkYWUzM2IyNzY5ZmY1NTQyNjU1ZTc4MTAyMmQwYzQzYjQyMWE5OTg0M2MzZCIKKyAgICAgICAgICAiZTEwNDIyYWQyZmQ4OWRmZTQ0NjYxNWY1MTkyZTc1NzlkNDM3NDM3OWJiZmZiOSIsCisgICAgICAgICAgIjAyNjg5MTdmOGJkYWFjOWViZTMyYjBkYzZjZDlkMzllZmQzZjg4ZDgxN2Q2NmNiNjM5MGQ3YjU1YzY5MjEyMjEiCisgICAgICAgICAgIjg0NGFiOGMwODk4NmQzZjJlYTQ5YmM2ZTNhMTAwMjA4NmMwYjZkZjE2M2Y3OWQxNjExNmE5M2M0YTJjYzA0MjIiCisgICAgICAgICAgImM5NDg0MWUxZTNiOTQ1YWIxZDI1M2FiOGQ3ZDEzOWM5MTg4YmE4MzAyN2M1OTNmODNhNmYzODM3MGU3ZjAzNzkiCisgICAgICAgICAgImZmZGRmMTQyN2Q2ZmNjY2Y2MDgzMzEzZjE4MTViNWRlZDY3Mzc0MzBiYjRhNzBiYTgxNDg0ODM0ZDhkMWQyOWEiCisgICAgICAgICAgIjVlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTEuMjAiLAorICAgICAgICAgICJlMDdlY2YwMGUyNDAxYWM5OGIyZDVhZTBjOWI4M2YyMTlhYjAyN2E2NTE5OWZkYjYzNDU5NmUyMzQ0NjI0MTM4IgorICAgICAgICAgICI3Mjk1MzI0OTUzMjhmOTNmYjNhMzMyNTUyNzhmM2VjMjYwNjVjZTU0OTk1ZDQyNDE5M2JjYjc1ODFiZmUxYWI4IgorICAgICAgICAgICI5NTdkMGI5NjFjMzAzMGI4MjBkMDljOWUzMjZjYzMwYzBhZjY0MjY2NjE1NCIsCisgICAgICAgICAgIjAwYzQ2ZGI0MWI2NWRkYzcxZmJiZmMxMjVhNGY5YmFiODgwYTJmMGMxZjA0MWM0MTFkZjdkNDVkMWUxOTk5N2IiCisgICAgICAgICAgIjM0OGVhYmJhMTliZjc5YjIyMTc3YjJhMGQ3M2ZlZmE1MDA4MzYyY2U1OTYwZDdlZjU4YTU4OTkzZTc0NjAzZDQiCisgICAgICAgICAgImQ5ZDBiM2RhZDRiMjBjODI5ZDM2ZWZjYWY1N2YwYzRmMGNlZjg5MDE1YTQ4NDUwMjQyYmQwMjBkNWY1MmQ4YjUiCisgICAgICAgICAgIjBlYTEzZTU2YTFhYWQ2MDE5MTVkNjBlYzlhYmZjMzA3ZjE4YWYyMDY3MjM4NGRjYzEyZjk4MjI3MzEzNjk5NzEiCisgICAgICAgICAgIjQwIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxMDMwLWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgIjM2OTgxYTk1YWUyNDE4MTQ1MmRhMjU3YzAzOGYwNTgyMTQxMmQ4NGViNDdhNDNmY2M3ZWYxMjE3OTU5YmE2NzciCisgICAgICAiMDI3ZjcwODZkM2E4NWNkZDM0OWY5MjBmMDM0YzAyNzg3OTJkYzhhOGNmMGMwMDgwZTVjNjFmNDc0ODgzYzY4NyIKKyAgICAgICI5ZjRkZWUwYWU5NTI0NzhhNWVlMmNlNGUzOTE4NjQxZTgxM2NiMzc0ZjdiMjgzMmJjZDZhZWE4MDlkMjU0ZmMyIgorICAgICAgImNhOWFjNWEzMzI0MjRhYjY1YzJhMjYxMjc1ZDE5YTQxNGI2MTY1MDBkNWUzNzM3MDYzMTVmMDYzZGM4ODVkN2YiCisgICAgICAiYjkiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiMDlhZDAzMTczMGI2MzI3MzU1YWNkNjk0Njg3MDBlN2U5YmFlYWM1YTI0YTdmZmM5M2IyOTJlYjg3MWRhNTQ5MiIKKyAgICAgICI0NmE1Y2UwYzgzNTI1NTY1MWEyOGM2ZTJmNGM3NjFhZmI2ZjA2YjllMjk5NWZiYjdkY2ExNzRkNTM2MmZhZWJkIgorICAgICAgImMzOWE3MmM1Nzk1ZDFmMzM5MmVjMDg4YjVkYzJhNzg1YjJjOWM0YzZlNjY5ZTcyM2I1ZGQwY2U0NDMyNTU1MTIiCisgICAgICAiNjdkZDYyZTBmNzhkMjQyNGFkYWU0OGUyNDk0NDNhZWY0YTM3MDQxMGRiOWU3MDkzOTlhYzM3Y2M0ODFiNTkwMCIKKyAgICAgICJjNSIsCisgICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMSIsCisgICAgICAgICAgImU0YjJkNjBlM2JkZDI3ODE2ZiIsCisgICAgICAgICAgIjEzZmQ0YWMxYWM2ODQ4MTczNzgwOTY1YWZmNWU2MWM1OTY4OTJiYzE0Nzc2MGQ0MzA3OWI1ZDcxNzdlNDIzZDQiCisgICAgICAgICAgIjg2ZjVhNzNlMWExNmIzY2U5YjVlZGFjMTYxZWE2ZDRmNmMyM2ZjZmMzZTYyMTljYWM1NTYwNjdmZmFlZDRhZGEiCisgICAgICAgICAgImMwYTk1MDA1MDkwYjg5ODQ0YzU0MzU0ZGIyMmFhZmY5ZWVmZjlkYTVhYWE1NDkwNDI1ZTEzNWNjMGY2NDU4NGMiCisgICAgICAgICAgIjdmMDVmZTMzNmU0NDQwYmI4NjkyODZkNDRhZjE1Nzg4MGUzYTQwZmIwNjcyNWQwOWRlYjM3ZjFlYmIxODFjOGYiCisgICAgICAgICAgIjVjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMiIsCisgICAgICAgICAgIjc4ODY4NWZjNTgwNWQ2MjdiMTNmMmZlN2ZlNmY3YzlhYjJjYTQ5NDRhYmYzMDhiODZkMWEwZjU4M2QxN2I1NzYiCisgICAgICAgICAgIjAyNDM5ZTFmMmM2ZTBjNWJmNzgxNzA1MDEzMzhiNGM0NDdlOTE5N2I2NTAzZmI3M2ViYWJmNzc2ZGVmYWUzM2IiCisgICAgICAgICAgImRjZGNlNzdkZTc5YjgyYmUxNDg1YThhYTliODIwOTM3ZGJmNDI4YTIwNTUwOTY2YTg2YjYyYTE3MmU2Y2ZiZGMiCisgICAgICAgICAgImZlMGQ2ZmM2N2E0ZGI2MjI1MmZkYWY4NWYxZTZiYzE0ZjhhYjFjNTMzMjZhYTZhN2JjNWVlYzg4ZTBiMTFkNDgiCisgICAgICAgICAgImQyYjU2MWYyMjYwNjUwMTAyZmYyN2I1N2I3MDA3MmJjYzEyMWUzNWU3MGYzNzgwYzgzMzNiNWJmNmIwOGZhMTIiCisgICAgICAgICAgIjA4MjYwZjMzIiwKKyAgICAgICAgICAiMDkwNGNjMTFhYzY2YTk4MzdiNzQ1NjhiZTI1MGU1M2FlNGJlZjc4ZGM2N2ZmZWU1MDllNWQ5YjQ3MjU4M2VhYSIKKyAgICAgICAgICAiYTU2ZDRjOWVlNzBmNmU4MmRjOTk4YjUzZWZmMTI3MmJmMDFmMDllNTI2MmIxNTVhNmU1NmQxNTA0MDAzZTRjOCIKKyAgICAgICAgICAiYTQ2ZTY1MDI1NTMyNzgyMzBkNmU4MWI3MjkxODQzYWI5NzY5NzM3ZjNjNjkzMTUyZjE3YmYyZDhiZmM3ODJiZCIKKyAgICAgICAgICAiYjNmYTBhZWFkZjBkNDQxZTFlNTJkZWE1NGI3NWNmMTY1ZTM1YzM4MmQzMTE3NGY2Njc5ZDJmMjFiOTgxZjQxMyIKKyAgICAgICAgICAiNTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi4zIiwKKyAgICAgICAgICAiNGVjNzM5M2ZkYzRiOTBhZjhmZmZjYWYzNGU4NDVhMDk2NTZhZWY5ZGRhMTJiMDM0MmM0NmViMDQ5MTc0YWE1MSIKKyAgICAgICAgICAiMWI0M2M5NGQ3NWMwZTI5MDcwYWZmNWI0MTQyM2ExNzBkOWIzZThiMjEyMjRhYWJjNTMxZDg4ODg2ZTI2NDZkNiIKKyAgICAgICAgICAiNzg4ZjFiYWFkNGVmNGIwYjRiZGU0YjEyY2U5MDUyMDgyZTJkZGQwZTNlNmNhYWJiMGExNDM0NGIwYTU4M2Y0MCIKKyAgICAgICAgICAiNGMxYjZhM2M3YmNhOGE1ODg1ZDVmMjI0YWYxZmNhYzNmYWQ5MzcwZTliMjk3NGU4Y2E2MmUyMmFjZWI5IiwKKyAgICAgICAgICAiMjFhNjZhZjYyN2VlMGRkMDVmZTc1NjNjYzFkMjljY2Y2Zjg3MzFiNDFlM2RiMzk1OTc4OTNiYTFjZjM3NWY3OCIKKyAgICAgICAgICAiMTc4OGZkZjA3M2IwYjU5M2M3NmRmMjgxNmVjNmRlZmMyMjQyMjFhYzE5ZjViZWU0NGZjMGU1ZDQwOTNkMzQ2OCIKKyAgICAgICAgICAiMjc4ZmI0MmQ0MDVhMDcwNDQ2NTMyMmRhNGQzYTdjYTljM2RhNzNjM2QwODJhZWU1NjdiNzcwODMzMjNlNzViYiIKKyAgICAgICAgICAiMzVlZDc3ZThkYjljMDFiNDk2YTA0Y2M0YTg5OWRmMzU5ZGE0YTIyODdjYWZmZmUxZWQ2M2NkZGVhZDg3NmM5NCIKKyAgICAgICAgICAiMDciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi40IiwKKyAgICAgICAgICAiOTA3NzYwZGIzMjk2OWIwOTdkYzEyNGVmODk3NTE1MTFhNWQyMzA1OTZkMmZkOGE4OTFmZjAwZjA1ZmJhZDQ1ZiIKKyAgICAgICAgICAiNzJhNDVkNDY1NjI0YTNhYjY3YWZkYmI5ZTVmOWU2NWI2M2UzMGMyZTU3ZmU3ZjMyZjM5OTAxMTAzM2RjMDUyOSIKKyAgICAgICAgICAiYzA5NzFmYmUwNjRmYzVlZGIwMWY4NGNkNTcyODNmYmJiZDJhYTAyOTQ0MTEwYjZiNTM0Zjc0MDgyZjU2YmUzNCIKKyAgICAgICAgICAiNmNjMzQzYmQ0ZDBiMzQ4MDkxYzAwNWM2MTk5YTdlM2Q1Njg4NTI0N2IwYzE2YTM2YjIzNWI4ZjVkNGYwMGE2YyIKKyAgICAgICAgICAiNmJiNmZlZWRlODhmY2Q3ODhkNzVjYWNmZjdkOTU2ODc5OTY1NzE1NTljMDU3OTZhNTU3MTFkNzc0NmJiOTJkOCIKKyAgICAgICAgICAiNTI4OTNiYTkwNjc1Zjk4YjBmNTQwODQ4MWJmMTU0M2YzOWRlM2QwYzBjMWY1MzQ5NWJkMjEyZGRjZGM2ZDBlNSIKKyAgICAgICAgICAiN2Q3YTNkYmUyNDIwOGNiMjRlZDQxZGUwM2E1ZjA1MmE5YjU4MTI3MDBhNWNlMDVjMDIwMGQ0NzE5YzU1NTQ0ZSIKKyAgICAgICAgICAiN2ZiMjk0ZDM0NGE0ZjIwNWVmOWEzNDk3YjU2NzU0N2NiZDFhNjMzZTJiNzlkMzM0OTA5NSIsCisgICAgICAgICAgIjBlYzkzOGEwZDRiMmE0ZWRkMjc4ZDYzZGU3NjFjMTAyZTI1OTIxMDJlZTA1ZGIxYjU5MWUwZDg1N2JmNjY2ODQiCisgICAgICAgICAgIjllNzRjYzE5YjdlNGU5Y2MzOTJkZTUzOWY3OTBmYzY4ZTNiNTIxZGIzYTFhMjY3ZTVhNGUxMjE5NzUyZTAxOTkiCisgICAgICAgICAgImU3MDE5YTI0ODU1NGM1YmFlMzExMmJlZWE0MGNmM2U2NGY4YWFmOWJiMWU5ZDFjMWQ4ODMzYzJiZmEzMWI5ZDUiCisgICAgICAgICAgIjQ1MGZhMjQ5Mjk3ZmUyZTQ2YWIwM2U5OWIxZjljNjUxZDUzOWViNTNjZTA5NjFjZTYwMjNjMTdkZDczODNkZDEiCisgICAgICAgICAgIjJiIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuNSIsCisgICAgICAgICAgImJkYTU1NDk1NDczMmQxZDVmMzk0NzU1NWM2MWZmYWI4MDFkYmNkYzgxMjFkYzY4MTkxMjdjMmYyMmE0MzZkMjAiCisgICAgICAgICAgIjYyMmQxZjRhNDQ3YzNhNzdiNjU4NTczMWFmYzAzZTc3YmFlYjcwOWMxYmZiOTA2YTFhYTE5NDlhYjY3NjNhMTUiCisgICAgICAgICAgImM3ZGE1YTEyYThmMzk1MTAxZTY0NmE4MzcxNzMxNDFmMmEwY2Y1MzYwMjRiMzY5MThjZjlkYjk1YjFjYzQwNWEiCisgICAgICAgICAgImVmZTYzYTNhOTNiYzRhZGE2MGEwZjRlMDcyOWY0ZGI4Yjc2ZmQ2NGVmY2JjYjY2ZjBlNGFhZmYzIiwKKyAgICAgICAgICAiMDcyNjJmZTFmM2Q3Yjc3OTMyY2RiN2NkOTZhYzE5OGI5MzAzZWI0NDQ2MGY1Mjk4ZThlNTJmZTY3MDUyOTliYiIKKyAgICAgICAgICAiZDYxOGVmZDBiMzYzMzE1NjJmMjBiMjBlODY2ZDk5YzJkMDRhMDE0OWY1NjRkZGY2NmJhMzE5ZjNiODQ4MjUzOSIKKyAgICAgICAgICAiNmVhOGI4OTNiYTViM2VlNWU1MjQ1Y2ZlNmI2MTZlMzBhOTAwYmY4M2JiNzYzZDIwYjMzMDM3MDFjYWJlOTQzMyIKKyAgICAgICAgICAiNDE0ODg4MmFlNGVmMTRlNmQ5ZTZjNzUyYmNlMjUzYmRkYTU3MzllMzNiZGMzMmViMDgyODI4YzFjMzk5YzIyZiIKKyAgICAgICAgICAiZWEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi42IiwKKyAgICAgICAgICAiNTE3NmFkN2M5OWJlNGNkYmJiNWQ3OWJhNWY0OTZjYWQ5ZjQyZGMyNWQ1MjdhNWQ1ZThlMzM1OTE3OTIyNWU2YiIKKyAgICAgICAgICAiMGU0MzY2NmQzZDgyYWI1YmFmNDI0Yzg1YzMzMTIxNjA2ZWI3OWFkYTZiYWZjYWI1YzFlMjU0NmNhYmY2YTM2MCIKKyAgICAgICAgICAiMDM4NDA1Y2ExOGMwMDgzNjY3IiwKKyAgICAgICAgICAiMDYyNzIzOGIwYjkzZTRjZjk4NTcxM2QyOTEyOTZjZWRlMzQ1ZTg4ZTE3ODI0NTI1NTM1OTM5YjNmM2Q1ZmY0ZSIKKyAgICAgICAgICAiYmM0MDc0MDAxMTQ5MDAyNWRmZWFhZWU5MDYzOGM1MzkxZWI0NGU5ZmYzNzA0NTdiNjBkNWRlODBjMTY1MzhjYiIKKyAgICAgICAgICAiMzg2MDU1OTU4NWNhZjVlMzMzMmM3YjFmZGQ4ZjQ1ZmI2ZTM1NTdmMmM3YTYwZDA5OWU5NGY4ZTk2YmFhMWUwMyIKKyAgICAgICAgICAiMTk5YWM4M2NlYzhmOWMxNmJiNDkxNTFhODg3MmNiZmU3MGYwMDJjZjNiNTNiNjExZDZjYmI2NjU4OTdjZWJmNSIKKyAgICAgICAgICAiOTkiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi43IiwKKyAgICAgICAgICAiZTE3NDcxOTM2NGY3YmRjODZlMmYwYzYxMjY1YmY4MDU3ZDY0OWNjYSIsCisgICAgICAgICAgIjA5NzcxOTU0ZmM4YTFmZWVlOTBmNjBjNGI4YTViYmQ0NjJjNjM0Mzc5YWIzZGExOWZmZWJhNmUwMzFiNDI0M2EiCisgICAgICAgICAgIjgzNTA5Y2VlZWQ2ZTAxMmE5MTYzYzYxNDVjZjcwNTAyYTlmYjBjMjFkYjMxZmFkNWFkMTQ2OTVkZTAwMjYyZTQiCisgICAgICAgICAgImU1NjcwOTVlMTYxMTBjNmU2NWQ2YmNiOWNjMDJlOTE5ZjkwZDE5ZTczMDdmNDQzNDUwM2Y5ZmUwMmMxMmMxZDMiCisgICAgICAgICAgImY1MGNjMTYwMDg2ZmU0NjAyOThjODgxMjI1YmZmMmU5ZTMxM2RhMzg0NDQ0YmVjNzJhNjdhYzM0NDQ2N2U4MmIiCisgICAgICAgICAgIjY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuOCIsCisgICAgICAgICAgIjk4Y2JjOTFmZDQ5YjUwN2M4ODdlOTdjM2NmYTliNTljMjYwMDFmY2FjMTY0ODdmNjAwNGYwYjY4NzQ1NDYzMjAiCisgICAgICAgICAgIjAyZDU0OWI1NDYxZmYxNTMwYzBmNWZjMDlhYWNjNDZhZGFkYTdkYzlkN2IzZTIwZmVkZmVlY2Q4ZjJmMTY4NDEiCisgICAgICAgICAgIjc3MzI2ODU0MmU4NjQzMWM3ZmI0ZDE2M2YzMWU4ZTMxNzIyMDM0MjZiYzBkODhhMjNiMTM3NjM0YmZjNzE0MDEiCisgICAgICAgICAgIjcyMjBmYmZiZWM4ODhlMDFlM2VmZjdiYmJkZjkzZjA4M2I4OGZkZDY0MDdkOTg5YmNjNWVjYjE1M2M5Y2VlMzQiCisgICAgICAgICAgIjEwZmQwMDZiY2RmMDdhZjIyODc5MGZkNWUwNGY1YzBhMWI2MzY0OGQ0ODYwOWJmMTYzYzZmZDY1NjAyMDc1N2MiCisgICAgICAgICAgIjNjMDYzOGUxYjgyZDc1ZTJiNGI5MDhiN2UwYTNjOGQ3MjY2YjgwMWY2MGZjMmI0ZjMxN2ViYjhiZjIyYWI5ZTEiCisgICAgICAgICAgImNiN2I3Nzg0Mzk1YmQ3YjQyNDMyOWU4NjFkNDc4NjYxZjZkYzEyOTg1MTVmNDg1NjRhM2ZmOTk3MzViYjkwMDMiCisgICAgICAgICAgIjM4NzVhMjViZThiNzI0ZjMiLAorICAgICAgICAgICIwZjJkN2E1ZWFiODM1ODQ1MDNkOTRlYmY3ZGRlOWVlZDQ5NDExMGJlOTRlZDY0OGFmMGNmNmU4OTFiMDYyZDJjIgorICAgICAgICAgICI5ZGVmOTU4NzU1YjFhMzA4NDg4ZDE2NzA3NDI5NTFlYzAwNjA1NDVkMmVjNDNmZTg0YWVjODkwMWFkZjRmZThkIgorICAgICAgICAgICI2N2FhZTU3YTMxOWY0OTFjODVjMjFjZDdmOWM1OTk4MTNjZWI5ZGY4NDc3OGFkYzgyYTMzYzRlNzY3NGQ3ZmJlIgorICAgICAgICAgICIxMzQ4ZGMyMDc1NTExMDRmNTQ0MmFjZDY4NDg2OWFjMjJjYWM1MTZjYzk4ODdmZDFkMDIxZWZjYzU0YWJkYWYyIgorICAgICAgICAgICJiNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEyLjkiLAorICAgICAgICAgICIzZWVkNmJmMTE2Y2IzMWUwZmRkNGM1YzkzMzU4YmFiNjhmYmZhOGI1YzUxNWJjYWJmOTA1MWNkZjk1YTI0M2U1IgorICAgICAgICAgICJlZTY4MTUxNTRlZWI0YWMxMGY1MjMxZDA0OTM4MTNlMjgxNDllOTY4MmJiMWM4Yjc3YTZlMTM2MGIyYjJjMGY5IgorICAgICAgICAgICJjMzE2MWU0MTdlZjZjYjNkOWFiYmRjNzQyY2UwMjVmYWZjZDUzOGM3N2M0ZDA3MTY0OTFkYTU0YmNkZjE2N2I0IgorICAgICAgICAgICI3YTYxYTAzNTI3Yzk2ZTRiNDJiZmRjOTg1YjE3ODc4MWI2OTIwZjYwZjExY2Q1ZmE3NjY2M2Y1NmYzMTlmNDUwIgorICAgICAgICAgICJjYzJhN2YxM2JjY2U1OWU0MWNiNjY2IiwKKyAgICAgICAgICAiMDc2NzNmYTY4M2UwOThiZmEyYjk1NWI2YzM0ZTljZThlY2NjNWFiMGFiNGMyY2Y3OWI5YmUxZTY2NDQyNWE3YyIKKyAgICAgICAgICAiMTc3YTQ3ZDUzMjBjZDU3MDg2Zjk1MTg5MTg0NTA5NGIxZmJiYzlkZWU1ZjliNTU2ZGYzZTYxZTdlNjY5NzNkNiIKKyAgICAgICAgICAiM2U2OWM5ZGExNzI5NmZlNjE1ZDYzM2M4NjIxOGRjYTM5OTI1OGMwNGY4MDViZDA0ZDlkYzk3YTI5ZjM5ZDYwNiIKKyAgICAgICAgICAiZmY4ZTljMGExMzcxYWFlZWMwMDNlYTI3NDg5NWZmN2JhMTUwMmIyOGY4MTc2MzAyYzI0ZWVjZTViNTI4ZDY3MSIKKyAgICAgICAgICAiMDAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi4xMCIsCisgICAgICAgICAgIjA4NGVjMjg3ODY1ZThmZTY4ODA0NzIzNzIwOTdhZDViOTY0YzQwYTkzNWVlZDFiZWE1MWFiMWI1YmM3NWM4NDYiCisgICAgICAgICAgImJiY2JkOTU0ODhlOWVjYzM2M2NmMDczYTkwYjIwYmU4YjY3OTM2NDYyMmYzNDVlMTIyZDA1NjZhY2QzNGE0YWUiCisgICAgICAgICAgIjExMjQ0NTI1YTM4ZjQ3ZGMxZjkyYjE3Zjg5ZWRlMDZkODM2YjQ0MjZlY2JiZWE3OTMzYWMwZTg0N2U1NTEwMzMiCisgICAgICAgICAgImI1ZjdlYTRlYWYxZjYzZjM0NzlkYjdlYWY4MDJjOTk2ZGU5MjMzODZjZDE1YjEyMmRlNWEyMzk4ZDNmMzk3MDIiCisgICAgICAgICAgImMzZTkwNjVjMzI3Mzk1YjlhOTk1ZmEyNTRkZTljN2FkYjQ1MSIsCisgICAgICAgICAgIjEzYTdmMDA0YzBhODhkNTEzZTJmMWFhZWFiNDE3ZmEwYjI3MDJmYjkzYjgyODcyMGNjZDgwMGNiYjBhZjVhMTkiCisgICAgICAgICAgIjY1NzI1YjZlZTA1ODcxMTdjYmNiODFhNDYzMTg1MjFjOTUwZGQ4NDY5YmQ4NTU3M2Y1ZDI5ZDg2NTMwM2ViYWMiCisgICAgICAgICAgIjQ1YzdmNjAzMWM2ZjkzNzhlYjEyYjQyZjA1MDk0NDMxNmYwYjkzZGI4OTliZWM5MzdkNWQwZjU4ZWQ0MDcwMDQiCisgICAgICAgICAgIjAxY2QzMjY1YTZhNDRiMDliYjExYTQzOGVlYTA3NzE1ZWZlNDJkZTRlODgwOGY4ODI0MDI2MTE0OGU4ZGUyOTMiCisgICAgICAgICAgImVkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTEiLAorICAgICAgICAgICI2MTA3MDAwMDdjM2M2Y2IwOTZjOTk0ZDY1ZDk1YzliOWExNDdjMzQ2MTRjZDcyMmYyOWViYzVlMDkzNzg2Zjc5IgorICAgICAgICAgICIwOTQ4MDIxNDFhMzEwOGQyZWM4YTg3NGM1MzE4N2ViMGQ2ZWUyYTg1OTEzOGNmYmMyOTIyMTUwNmQwYmQ4OWIwIgorICAgICAgICAgICJmM2RiZWY1MDZiZDFiYTQwMzZiMGYxZWMwMDczMzI3MDYwNzUyYjQyOGNmYTEyZGIyODBjNTNhYWU1ZjNlMzU3IgorICAgICAgICAgICIwZTkxOGNiMDliOTBlOTg0N2YxZjVjYTQ0ODdhNmJmM2VkYWQ0MjVmNzg0MDdlY2JlM2Y5YmM3Y2FiMDA3NTY2IgorICAgICAgICAgICI1ODc5NDMxYzZjYzM5ZTBjN2U2NzAwNjA2NzQxOGJlZThkMGRiNWU3ZGJlMTJkYTcxNmNhIiwKKyAgICAgICAgICAiMWViZWFmODVkMThmMzc4NDBlOGEzZWFmMDdkNjlmNTI0ZDg4M2ZhNDJmMjkxZTIwMDdkYjU5NWFkNjkzMGU4ZCIKKyAgICAgICAgICAiNWE3NWI0MGJiOTViZWI3MmQ3Y2VkMDM4MTc5NzQ3ZTk2NjFkMDgzODQwZDU4N2RjZGYyMWMzYWRjN2Q0N2EwMSIKKyAgICAgICAgICAiZjZlY2E5YzdiZjllMmE5ODg3NzUxYjM2ZDFhYmFmMjVhMzEzZmMyOWQ3ZjgzNGQyYTI0ODI5ODU1NzVlMWJlMiIKKyAgICAgICAgICAiNGJjNGVmNDNhNTdlZjRiMGE2ODM2OTkzZTExYjY3MDc4NTA0ZTNiNzljNzIxNzc1ZjViOTliZmFjY2M0OGE4YyIKKyAgICAgICAgICAiMzQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMi4xMiIsCisgICAgICAgICAgImRhMzFmOWJlMjYwOSIsCisgICAgICAgICAgIjFkMmJiYWZjYTQxY2EwNmM0YjgxMWNiOWQ4MzY5Njg3MTY2ZDE0ZDlmOTJjNWI5OGZjN2M3NzJmMmQ3NWQzNWEiCisgICAgICAgICAgIjVmOWFjY2U1OWI5OWVmYjJkY2I5N2RjY2JiYzg2ZDdmZDZiNGFlOGJlYWIxZTk4MWU2Yzc3NDVhMWJmYjRjMWYiCisgICAgICAgICAgIjQ0YTQ3MmIyYWQwN2Q0MWNjMTc1MTViN2IxNGE0OTk5MGIyNDM0NDJmZjJjOGZlNTA1YjE4NDlmYTk5MWNhY2YiCisgICAgICAgICAgIjY4MDlhMjBlNTVmMmFmNzc5ODg3MGQ2NTc3NmYxZjllZTQ4Nzk3ZTMxM2FhNjZhNDdlNjk1ZjNlNzMxYjJjN2YiCisgICAgICAgICAgIjMwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTMiLAorICAgICAgICAgICJmOThiZTUyZDlhNWU1NWFkOTIiLAorICAgICAgICAgICIyOTJlYTM0ZDNlNjExOGJmOGNkMDU0ZTIxNTE3ZTg2M2NlN2NiN2RkNzI3MzMwOGY3ZWNmZWFjZjliNDU3NTgzIgorICAgICAgICAgICJkOWI5Yjk3YzU0YWJmNzRlNWE1Y2EzNmE4NzA2N2U0N2Q2N2FhMDQ3YTFjMmVkN2EyM2QwNTVhYjRmMDk0YTgzIgorICAgICAgICAgICJjNDM5ZWY4ZGQyZDAyMDM1ZWYwNTYyZDk2NzMxM2Q4MTEwMmZjNjhiNzQ1MjViYjBlMWQ3OTYyZWIyNzU4ZWM1IgorICAgICAgICAgICJlNWFlYWI2NWE5M2QyZWM4ZTY1NTQwNWFmODhjMDBmYTM1ZjU5ZGU5ZDBjZDgwNDVhYmQzNzE3M2I5ZmM2YzUxIgorICAgICAgICAgICJkOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEyLjE0IiwKKyAgICAgICAgICAiZjQzOGVmZjg0YzM3M2ZjMTI3NDRhMzg0MTU4MjQzZGQ5N2Y0MzY1ZTg3ZDcxZThiNTZiMjk3OTFkZjQ0YWRmMyIKKyAgICAgICAgICAiNDllNzYyNjAwNGEyYzUzMzM1ZWM2MzUyY2NlMmVkZDk2Mzk0N2ZkMjM5Mzg5M2MyNDhiYTFiODQwODQyY2E3NyIKKyAgICAgICAgICAiNmMzMTcyOWY3MDdhZjUwNDExMDAxYzI4N2ZiYThmZTcyNTAyMzIwYzQ0NWJiMTQzZmI3YmY1Mzk0ZWMxZmIyYyIKKyAgICAgICAgICAiZDUwMTU5MjQzMjE1NDA5MWRlNWEyMzY1ZDY3OGYzNTc4MmZlYThiNDdmNjRkNjA5MTlmMGYxZDVhZmE3NjI2YyIKKyAgICAgICAgICAiNDBkMTZjZWMxOWJmZTAyNWQxMTZmNDJkMjJlMjBhZGI1NjM3NWFkNzcwODlmOWE5MzM4MWZkNzhiN2IxNTExYyIKKyAgICAgICAgICAiYjRlNDk4NGQyZGRjN2M5ZDc1YjMxMGYyOTU0MjI1NjBkNjZlMzYwMmE4NzEyMDk2MTYxMzFhODQ3MTQzZGQwNyIKKyAgICAgICAgICAiOGYyMzU4N2RiNTAyZGRhMDNlMTg2MDY0ODJkYmJlMDE0ZWEwODNiN2VjMTYxYiIsCisgICAgICAgICAgIjBlYWZlYmYxNWQ4NGVlNGExM2YxYTgyYjg0MDUxMTg2NDFlMjJlNTFkYTk0ZDg1ODg3ZmM0YTNiMTFmMDMyNDkiCisgICAgICAgICAgImNjMzlhMDM3NDUwMTA3MWM3ZWVmNGFiYWExMTQwOGQwMmZhZTE3ODZkZWEzNzU4ODQ3OWM5MGQ2Mjc2OTg1OTEiCisgICAgICAgICAgImMzYmFlMWZlZmQ2ZThjNDBlM2ZmNGI5ZjYwNjFlMDZjMTJmZGQyMWM3ZjQ1ZGRjNWI3OGQxY2JjNDFjMTU3MDYiCisgICAgICAgICAgImZhMjBiYTkyZjk5ZjU4YjIyYmUyNzY3NWJlZTA4MWEwNjA2N2VlZDE1OGY4ZTIwYmYwNGE2ZTk2OGY3MTlhMzIiCisgICAgICAgICAgIjM0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTUiLAorICAgICAgICAgICJmYTFjMGY3YjEwMTVhODk1YjFhNTY1ZjMyOTk2YjJiOGNjZmQ4NjRiOTU1NDRkYmI5Y2Y0ZjZlMWE4NDFkZTkyIgorICAgICAgICAgICIwNmQ1NTcyNmZkZjdlZWEyYmYzMzZhODI5ZmQyYmMxMjA5YmQyMTVhYWJiOTc3ZDIzYTA4M2YxMGFlNjlkYjQzIgorICAgICAgICAgICI3Y2EzMmQ3YmZlNGM4ODI1YjkzNDg4ZjAxYWZkZjc4NDQ1OGNlZjVjZGQ4ZGZmZGQxNyIsCisgICAgICAgICAgIjI1ZTIyZTZkZjdmYzZiZDRlMGY2MWViYzhkYTA2M2ZlNDc4YTNlZDc0ZDY4Zjc3NjM0MzVlMGUzNzRmNjUyNjIiCisgICAgICAgICAgImE1ZDc2MTJlODY3ODU5NjEyMmMwZTViOGZhMGMwYjEyODEyYmE5NjUzYTBmMjczODgzYzYyNjRjNmRmYjc0YmIiCisgICAgICAgICAgIjM0NDA1ZDJhMDQzMDQzZmJiMGFiZjJhZjdhMTIzZDJkZGJmMTY5OTJlMDliYWEzN2Q3MzFkNzJlZjE5OTYyNjUiCisgICAgICAgICAgIjhhOGZiMDEwYTEwZjdkNTU2MmFkNTQzMzQ3OTAwMWFmMzZkM2QzMjZlYWRiMmU5YWJlYzdiNTU1NzA5ZDVkNDciCisgICAgICAgICAgImU5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTYiLAorICAgICAgICAgICI4MjhlYmUyZjUxZTU4ODI5Y2ZhNjE1MjZkZGVkN2UxZjFiYTMxMWRiZjEwNjRjMDhhYzBiYjVkNjcxNmVhYjI5IgorICAgICAgICAgICI4YTIzZDYzYjc5M2ZmZDlkOWNlYTYwMjI5NTk4ODIzZjI4MmYxMDdiNmVlODhhNTNmZDkzZTdkZGQ0OGE3MzFhIgorICAgICAgICAgICIyMTA5ZmZlZGM4OWFlYmEyYzBmMTZiY2IxNDBhMGE4OWRjNTdlZThiNWQwMDBhMjE0MjE3NWJjNzA3YmI0MDlhIgorICAgICAgICAgICJhZTNhMDM5YzY2M2QwMTlhMGJkOTEzYzEzZjdmZjZmNmI5MWU5MDVhNTg5ZDM4YjE1MDQ4NWQ4OTA5MmQxOGEzIgorICAgICAgICAgICJhNzYyMjUyNzY1NTI1ZDk4NDU2NjQyNWIwNTc3MGRlOWE4YmVmNDQzZmY1ZmMxNDgzM2FmYTRjY2VjZTU0MmQ0IgorICAgICAgICAgICJmMmNlZjFlNzk2ZjU5ZmIzYTRiZjM3Y2I2NzdhZTQyMjM2NjZjODJiMzFhMTZhNmNkNzAxYTA0OTNjZDk5Njg2IgorICAgICAgICAgICI2Yzg0YmZjZGRmODUyYjE5ZmZjODllOTM2MTc5ZmNlOGI5OWU3MmZkNGFmYzI4YjUxMTczYWZiYjI1YzRjNyIsCisgICAgICAgICAgIjE2MTc1NTllNDNiYTE4MmU5NTM0ODY0MzZmMTViNjAyODMxZTQyZWVkMjAzYzI2OWY2NTNiZjYzOWMyYjc2MGIiCisgICAgICAgICAgIjBkNDlmYjUzMmNhOGFkMDFlN2I0YWY4MzcyOTI1NWRiNTU5YmNmNTVmYWIzNjU5Y2ViZWNkNTM3Njk0ZmVmMmQiCisgICAgICAgICAgImVmOWM5ZTc2MmQwNWQyMzIxZWQ2ODhjM2Y3ZTJjMDU3MzNhYjRmYTgxYjA4Y2Y3OWZhY2I3NWMzMjAwYjdhNDgiCisgICAgICAgICAgIjNhZjA4Y2IxODNjNTA5MjdjYzYxNjllNDMyZjdmYzliMTE3ODBkYmY0ZDNiNzJkMmQwYjg1NTkzZDhiNWIwMTgiCisgICAgICAgICAgIjJhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTciLAorICAgICAgICAgICJiYjRhNmVjY2JkZDZkZTBhYzVjM2I3Zjk5Nzk4MTA0YTU4NjljMWNmMWExZmFjN2Y4NTlmZTk1MTQ5Mjk3ZWI3IgorICAgICAgICAgICI3OTExMDA1OWUyNjlmMTI3NTZmMDhhNTQ4YjY2YWYiLAorICAgICAgICAgICIyNzdiYWU2M2U2ZTMyNTNhMGUyMDRmNGU2YzlmZTg0YjA0MGI4NjRmMjFlZGQ0NDI2ZDgyYmU4ZjFiOTExYjBiIgorICAgICAgICAgICJkMjgxY2YxMTQ5NTNkNDAyMDlkYTJlOWFhZTEzM2JjZDE4NTVlZjBhOTk2OTNhOTQ0M2M5M2Y2ZGQyNzVmMDU4IgorICAgICAgICAgICJmZDFiYjY5NTMyYjY0YTFkZDdlMWQwZTc4MGQ3NTIwNGZhOGM2MWMyZWI1ZGU4ODI3MmNiOTNhZWYwODBmNzAyIgorICAgICAgICAgICJiYjc4ODg5NDI1YTVmMTY2ZjYzYjViMWEzMWVjNWMxYzI2YTU5OWZhZmU1ODc3NDI5OGI5N2RiMzE0ZmM4MWQwIgorICAgICAgICAgICI5MiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEyLjE4IiwKKyAgICAgICAgICAiZjFkMTExYWQwOGUwMzhjYTNhYjRlNTJlNWVhYjcxMDE4NzZjYTliZTYyNmExMzU5MTdmNDViMWY5ZDFiMzJlZiIKKyAgICAgICAgICAiZTRmZjg2N2FiOGEzMDVmOTQ5YzAwNDhiMjVmNTQ2MjI2MWIxYTM0OTNiODE5MDIxMGY1Y2ZhNmJmN2U1YzMwMCIKKyAgICAgICAgICAiNTQ5OGRlZWNjMWUxYzUwNGYzYTM0OTk4YmU2YWQ2YWMwMDQwNTFjNGUwYTNkYjJjMjJlYjVlMTQxNjU1MjhkZiIKKyAgICAgICAgICAiNzgxMmEyMGQ1YzdmMDViOTQwY2ExM2U5MzgzYWUwMGQ2Y2Q0ZDBmNGFlM2RhZDA0N2FiOWM0MTc4ZGI2NmQzYiIKKyAgICAgICAgICAiODA5NjBjYWYwYTkyNGRjOTRlYjhlMDc3MDliY2RiMzQ5ZTkwZmEyZTEwYzVkNTI2ZDIyMTljYTc2Zjg4MDFmZCIKKyAgICAgICAgICAiYzY2MWJkY2E2YTkzZGE0OGQwNDVhYzM3NTEzNGNjZDZmZjdjNTJmZDE1YzdjZDNkMWYzMWFmZTUwNGJjZTdjMCIKKyAgICAgICAgICAiMzMzYTg5NzllM2NlY2M1M2M0ZWFkZDdkOTVkNDZmYTNiMmE5ZjAwNjEwMGQ2YmZjMGVkNWVlNzc2OTRmZjFhMiIKKyAgICAgICAgICAiNGUxNmE1NDRkZTcxNDY1MjkwZGRkZDE4OWYwMTY3MDM1OWY4YzZiNWQ0YzZiNmI5ZjVjNTdhYTVhMzhmMDc5OSIsCisgICAgICAgICAgIjBkZTk0MjMxYzA2YWIxODdiMDBkZGEyYjM0ZTJiNGNiYWM0MWY2MDhjNDhjNzIyN2E2MjgyYTE3OWU1OGMzMmUiCisgICAgICAgICAgImY1ZGRjOTc2NGZhMmRmYzNmYmUwMjFkZGI0ODE1NmE2MzczY2Q2OWI4NWQzNjRkODliNWEzMmZhYmIyZDQ2NWQiCisgICAgICAgICAgIjA1NjJkNGExZGQ2ZmNhNjQ3ODBiMDYyYTk0NzEyNGE3ZmMwYjgyZTRmZWQxMmI4YjRmNzI2YTBjODUzOWM2Y2QiCisgICAgICAgICAgImUyMWFmNjU1YWNjOGRlMWU3YmE5ZDY3Yjg3YjhlNzc3ZDQ4YWNkODY4YTgwZGIxNTMxNGYzNTU1NjAxMDM1NzciCisgICAgICAgICAgImViIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMTkiLAorICAgICAgICAgICI5YzRlY2M0YjI0NDRhNDAxYmZiNmY0YjcyNDQ5MjNhNWFkMzM4NmMzYjg0MTY3OGNmNWU2NDQ3YjhhM2EwNzU5IgorICAgICAgICAgICI4NmMzM2ZkMDAxYjg0MzcyNGRkZGM0MjEyZmY0NWFiM2ZlY2FhOTBhMTZmNmI1NTkyYzUxNWNjNGVlNTRhZWE0IgorICAgICAgICAgICI1OTM0MzIxNjcwOTY2NzhmOTM0MTU5ODU2ZDE0YzQzMmU3ZDZkMjhkNzFiMjY4N2Y1NGVkNzE5ZTVjMjAxMTAwIgorICAgICAgICAgICI2ODhlODVmMjBlNzlhOWVlOGFhNGI2MTQzMTM0M2QxZTk5YzIxNDM1YzYxZThiYzEwNGYyYmFkNTI5NjBmY2VlIgorICAgICAgICAgICJlNjdiODUwMzNkM2FlZWZhZTQxM2NlMjk3MDFlZmZjYjAyYjQ4NGEwMzFlMmYzMTllZjdlZDBkNmU2OWIyOTE2IgorICAgICAgICAgICJlZWIzOGM0ZjE5NDJiYTIzYzJhMTc5MGNlM2ZlMDlkMDFiOWI5ZmU2ZGJhOGRjMjEwZWFhOGZlNzNjYTc2ZjFiIgorICAgICAgICAgICI1YiIsCisgICAgICAgICAgIjE4NTNjMjFhNGExODU0N2Q4NjdiM2NlZDAyZGFmMGIyMmNlOGQ0ZDVhZjJiOGVmNWY3YzhmZDM4NWI4MTUzNjQiCisgICAgICAgICAgIjhkODE4MzFkNmFjYjVkYTgzMGY2Nzc0MDI1OWZmYjMzOWY3YjkwYWY0ODgzODE5YzQ3MTVlMDhjMjg5OWQ0YzciCisgICAgICAgICAgIjI0NmUwN2U1YmM2ZWYzY2ZkOWEwNGRhMDZjNDNlOTVjNzcyYmUyMjFjZmFhZjY5NTRlZjkzMzMxZTU5NWZmNDgiCisgICAgICAgICAgIjkyMWYwNWZjZThmYTBkNDI5ZTBjOTk1NjJhOWMyZjY4ZWJmMzJjZjFjNmM2YmI4YjI3NGEyZTQyZDY3MTU5MTIiCisgICAgICAgICAgImZmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTIuMjAiLAorICAgICAgICAgICJjMzgxZTYwMzk5ODY1MTY2ZDJiYWEwMzE0NTI2ODMzNDE4NDAzOWUwNTMzNWEzMDBjMjgwNGUyYmZlZjVhN2QxIgorICAgICAgICAgICI0YzQ0M2Q2NTM4ZTE2YmRmOWRhN2FkMWZlYTYzNGViZmUxMTNiYzgyMWU3OWE0NDliMmViMmY1N2MyMWZiYTM1IgorICAgICAgICAgICJmZmNjNmE3ZTUyNTU3MjI3N2U4ZjU1MzdjN2I1Yjk3OTRkZWZiMzlhYWIwNjA3ODVkMTk5NDAwMmRjZjgwNzAxIgorICAgICAgICAgICIyZTFkMTc5MWRhOTQzYjJiNzU5YzM2NmJiNDI0ZTQyYzljMjA0M2NlNzg4YTI1ZmJmZWJiODdlNzRjYjAyMGIxIgorICAgICAgICAgICIxZThlYWYxNjE4ODRkNjY3MmJiZTljMDlmYmIzYjhhZmEwNjEiLAorICAgICAgICAgICIxOTkwNjk1NzM3NTMwMThmMzM1OTJhZjE1YzFkMzEzMWJmNWQ4YWM0ZjY0Y2Y2MTRkM2EwMWJmMzcyZGYwMDJlIgorICAgICAgICAgICJiNWI1ZmM4ZjgyYmExMzdmODNkYzE0MmVkZTM4YzU4MTgwZTdiZGE2OWM0ZjFiYzdiZjk2ZWNkM2ZhNzliY2NiIgorICAgICAgICAgICJkZGI3ZDkyZTRmZDg2NGM1ZmE5MzNhNGRmYzYwMGUxMDgzMDA4YTM4NmY0ZDAyMmMyMDI0ZmY3ZTBiMzcyMmVhIgorICAgICAgICAgICJmZWEwNWExZTAyYzdhNjNlZWI0MGY0ZjRjNGY2NjBjMzI0NzJhMGE3ODkyM2UzODYzYTk5NDQ1ZTdjZmUyNzAwIgorICAgICAgICAgICI2MCIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMTAzMS1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICI3MGU5MjNhNWEwY2Q4ZWNkZjk5YmJlOTNkN2QwMjg4Mjk1NWQ5MWI2ZWZlM2NlYzg2YzkzZDIxYzBhYzMwMWI4IgorICAgICAgIjI5M2U1MTQzNWI4NzhiYzZiMzRiZWQ0MTExNTkwZTc2NDY3NjU4OGIxMTZjMmEzNmE0Yzc3ZWQ5YzkwYTEzYzEiCisgICAgICAiNGQyM2UxOTk0Nzg3ZmNkYjhmNWM5NzQxMGZjYWQ0MDQ1Yjg1ODU3MDJjY2UyOWRhMTFmOTdlNzlhOTdjMmU1ZiIKKyAgICAgICI2YTVmYzBiYjhjZTc2ZDE1NTRhOGJjNDc5NjE3MjBkMzY0MDUwYmYyNzQxOWJmZjE2OGMwYTdlY2M4NzM0Y2I1IgorICAgICAgImE1IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjAyOWUxMGY2YmJiN2QwMmRlYmIxYTVkNTE5MGQ2OTA2ZmZlZGViOWQxNTRhMGY2NmRiODc4MGI5MjgzMWI1OTYiCisgICAgICAiM2U5NDg0N2YzZTdkYjFhYTkxNDhmYjBlYzU1NzZlNmJhNGZlMDRkNmYyNzgzMmIxNTIxODEyZDM3YjIyZDllYSIKKyAgICAgICJlMjgwMDhlMDkyYzY3ZTcyMzI0MjY3ZTFiMWVlNDU0MzU1NzQxZDhkZTFkMmE2YTA1MDc0YmIxY2U1ODE4YjQxIgorICAgICAgImJkMTlkYzZiNThjODkzN2Q4YWQ2NDBkNzA0M2ZhMTFmNDY4ZDZjY2JlYzRhZGU1MjBhOWUxNTlkNjA1ZDA5MjgiCisgICAgICAiMjkiLAorICAgICAgeworICAgICAgICB7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjEiLAorICAgICAgICAgICJiNWU4NmM4YmEzOTg1YWE1NTQxZGY5NWU1MTNjZmY2NzYxMmVhZjJlMTY2ODg1NzZmN2Q2NzNmNmYxODkxZmI3IgorICAgICAgICAgICI1YzlkZDJjZCIsCisgICAgICAgICAgIjZiNDJmZDUxNjMwOTE5N2Y4YWYzYzczZTM5NjI0ZDhlYmFiZWNkYTNlYzNjZTY1N2IxMTE3ZjQzZTk4Mzg3N2EiCisgICAgICAgICAgIjFiYTFhYWY4ZTk1Y2MzOTk5MWQ5MmUzNWUyZGIxZTQxMzA5MDE0M2QxNjQ2NzE5OGI5YjlhOTkwZDc3NGMyN2EiCisgICAgICAgICAgImQzYmJiNDM1MmQzZjA3NWQ2MTczMmM2YjU4ZWMwZjY2ZTQ5MmEzZjdhYzRiYmNmMDEyZWQ2YjQwMWZlYjRmZjMiCisgICAgICAgICAgIjk1Y2I4YjIxOGE4MWQ2MTczMWVlY2UzNzZmNjg4ZTY2YWVhNjk4YjRhODg2MmY1OGM5MWQ4NzYwODU0OTZmZDAiCisgICAgICAgICAgIjE0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMiIsCisgICAgICAgICAgIjk1NDYzNDZjZjIyMTk0Yzc4Nzg4ODE3MGE0ODJmN2Y0OTIxN2MzOTQwZGM2MjEwY2UzOWU0NTUwYTM5YjQ1MjgiCisgICAgICAgICAgIjIyNDE5YWVhYzI0YmVjMTk4YmIzNTlkMDhiZTgxOTZkZjJlNzU3NzY2MTk2Yzk1OGUyYjE1OWM3NGMxYzMwMjMiCisgICAgICAgICAgImMyZGJjY2U5ZWQ1ZDBlZjNmYjUxNDUwYmZmNjQ0NWRiMjY1ZTYwNmUxOTRiZWUwNjRjYTViMzIxZDdlMTU1MTQiCisgICAgICAgICAgIjIzMGMyYjNiNTVkNWRhNGNkMDQwNTIyZjdiYjg2YTk2MmI4MTNmOWRhMzllNTEzODliYzY0ZjU2ZTQ0N2IyYTIiCisgICAgICAgICAgImJmODE5ZDdhODAwOTRlMmI4ZGUyN2YxMDRiYjZlYjJmMmZiNDNhZjFkMDFlYWRjYTIzYTE5NmJhMTI1YjZhNzgiCisgICAgICAgICAgIjU3OTk3NGMwZWVjOGE1NDk2NzcxZjY3ZGJkNTA2OWYzMzZlNGVmMWY0MDQ3NDJkZmM2OWNlMzI1YWE2NDlmOGEiCisgICAgICAgICAgIjYzMzFjZjQwMzU1NWUxM2YwODEwYTc2MzUwYTdlMThkMjk5MmZhYjQ4ZjM5N2YzYjkzYzViZDVhNmZlMWQyYzQiCisgICAgICAgICAgIjYxOGJhMWY1OWYwMDJkYzI1N2VjMzllZTJmODc2Mjk4ZGE5MGY3NDQwYWQ0YzZjOTNmYzExNGRmMDUiLAorICAgICAgICAgICI2N2U0MTQ5OTNmOTg3YTIyNjQzZGQwMzllN2Y5ZmUxY2FlNzQ0YTdhZTQxZDRjMDQ0ZmE0ZWQ4ZGM5ZTM0MGNlIgorICAgICAgICAgICJiYjFlMmFmYjE5OGU4NDdhZWY0YmMwNjFmZDgwMGQ4MWQ0ZDM2N2IwZmMyZjczMDkzM2MxOWI4OGQ0ZGRmMDVlIgorICAgICAgICAgICJkOThhNTg1NmRlNWViNDViMTE2YjdkMjRmZWI0NTY3Nzg0OWRhYjc2ZTllMGNjYjQ1YmE2YjZmNjE0MWYzN2JiIgorICAgICAgICAgICJhZDdjMTkxYzM3NzcxMTNiYzczODhlNGU0NjQ0ZWNhOTQ3MDNhNzJiZGRjYzZmNTBjZjk4MGUzZjZkZTM5ZDczIgorICAgICAgICAgICIxMiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjMiLAorICAgICAgICAgICI1NjUyYjRjNTc1MjBiMjU1ZmI5NmY3MGEzMGFiOTJlZWMxOTM5OTU2YjZhOTQzYzgzZWQwOTg2ZTJlNmVlNGVmIgorICAgICAgICAgICJiZjhhNTIyODc4NjcyODEyMDNhN2E2ZDFkODg2YjcwMDU5NTJiNDNiNzc4NTQ0ZWRhODk4ZTBkZjJmYTA2ZjY4IgorICAgICAgICAgICIzODAzMThmMTRhNTNmZTU1ZDcyZjhjZmE2YWYyMWQ5M2JiZmMyMGQzNThjMjA4YzU2MmQ3MzliZTAwMDFjZTA3IgorICAgICAgICAgICJmZDhjZDJmNDZjM2I0NGM4MzY1MTg4MDliNzZmM2E3MGNmNjkyNmJlMDY5YzM1NzVkNSIsCisgICAgICAgICAgIjAxNjQxMWEyMzFhNzM4OTQ0YjNlNDRmNzg4NWNmODFhY2FiNzMyZDE3MzZkZTM0YzU2Y2Y0MGY5OWE2Y2U0MDAiCisgICAgICAgICAgIjcwYTIwYWE5NGM0ODc4NDRhOTNjZWYyODdhNThiYzBlYTE4MWIyY2YyN2Q5MTRmMjkzYjkyOTc3OWQzOTAzNmMiCisgICAgICAgICAgIjRlNWFhZWQzNWVlZThhN2ZkNTBlZmQwOTZjOTFhOGY3MmMzYzE0MWM1NzZjOGQxMGI2MzZmYzRkZGMxZTY3MTQiCisgICAgICAgICAgImYxN2ZmY2NlMTA2ZDIyMWI0ZmQ3ZDZmZTFlN2NiZDNmM2IwOGY1NTQ2YjQ0ZDFmZWI3MThmYmMxMzM3MGM3ZmEiCisgICAgICAgICAgIjJjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuNCIsCisgICAgICAgICAgIjZkNTdmMDc5YTNlOGFkY2I0N2NmMmUzY2E5NzZlMDNiMDljNzdkMWQ5ZDlkODQ4NDM1N2U5MTIzMDllOGY0YTgiCisgICAgICAgICAgIjNjYjUwY2I2YTczODhjNDE0YWVjODQ0NjcxZmY4MTA2NTFlODI4MTAzYTFmNmExOTliZTI2MGY3NDYwMDAyOGMiCisgICAgICAgICAgIjZhN2I3YmI5NDE2Y2U3YjYzNTBhM2E2ODA1NjIwY2Y1ZTZiMDA5NWRmYTIyYjU0NjAxZjYxOWFmZDEwZGEyMDMiCisgICAgICAgICAgImQyODE5MGNmOWIwZGI1OTg2ZDI5MzAzMzY5MWVjNWJiYmE2ZDczZWEzMjQ3MmVmYTNmMTYwZmQyYjFiNWU0M2IiCisgICAgICAgICAgIjBiZmFkMzE2NzczMDVmZWY0NjcyNDQxMTRlZTEwZjVjYjJkNjdiNDc4MzIzYTcxMTA0MWUyOTRjNDZiMmVkMzkiCisgICAgICAgICAgImNjZGUwNzljODc3ZmU3NWNiODc1MTQ0YWMzMWViMDMxYTczOGE0Y2VmZWY5MWYwMTdiYTcxNTIzZjUxMjQ4MTgiCisgICAgICAgICAgImNmNDhiOTcyYmM0N2M4ZjJlZDM1NmY1YmY2OTFmZDk0NjcwYmIyIiwKKyAgICAgICAgICAiMzE1Y2U0MTdkMGJiZDczZTdjNDM1Njc5N2U3M2VkN2FiZmU5ZmNmZmYxYTUzNDI4OTlhN2QxMWZiMGQwNTQyYiIKKyAgICAgICAgICAiZmNhYjY2ZGUyZTRlYzA3YzdkYzJiZTdkNzk3MjkwYTMwZGI4YzQwN2RkMTYzNzY1ODhhNmRjYzFhMjA3YmY3ZiIKKyAgICAgICAgICAiZjMxMTU0MGZhYTlkZDZmMTlhNzNhYjI1YTc0OTZlNjgyZmE4YTcwNTQwODEwNzZjMWEwMjE1N2JlNjNlN2Y2NCIKKyAgICAgICAgICAiNWRlODJkZjdjNjE1NTAzZmE4M2I0ZWRiYTIwNTgxODEyZTA5N2Y2NTA1NmVkNDE3ZjZmMjQ4MDM1MzBjZjgxOCIKKyAgICAgICAgICAiNTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMy41IiwKKyAgICAgICAgICAiYmI3NTQ0NmY3ODc4MjNkZGEyNDIyYjFhZGM3ZDdmZWZkMDZhNmU5YWY1YzA0OTAxYWM1Yjk5OTEzYWQ2Mjk4YyIKKyAgICAgICAgICAiOWQxYTMzMjJlOGIyMTdlNGUwOTk0YzQyMjA0MjgwZDQwNGQwMWVjZWI1ZWM1M2ZiODZmNzYxYTM5NmIyM2FlMSIKKyAgICAgICAgICAiOWQ0Njc5MDVhMGZlODA1MGI4OTVkOGJhMzc0NjY4NWM0NzQzOWY5MGMzNjY5YzcwZmZiODE5OTQ1NjVjNGRmMiIKKyAgICAgICAgICAiYTMxZWIyYTQ1MmJjM2NiMzEyYjgxNDdjZWMxOTEwMzJmMzhmM2IzZDg5ZDc1ODJiZjE4ZTdiNzI3NWZiNGYxNiIKKyAgICAgICAgICAiZWU4OTU2N2UyYTU2YmM3M2IzZTJlMTA5Zjk5NDBlYmQxMGI5ZGYyYjg4YWNjZjBiYTE4ZTViMzQ5NTIwZDJjNyIKKyAgICAgICAgICAiZjVhMzFiZDUyMjZkMTJlYzM1YmZjOWUzNjIwM2UxMzUwNmJhMTJiNzU2YzhiYTAwYWY5MWI4NWIwYjRjMDdjNyIKKyAgICAgICAgICAiZjQ4NGFkYzQ1OGM5MjZhYWViNGYwODJmZWM5ODdkOWYyNzZiODk0OTU5N2VjMDQwMWJiNzFhMmZlYTljN2I3NCIKKyAgICAgICAgICAiZTBkZmU2YWE1MmFjOGI4MGJlZWFkMzM2YTQ5ZGIyMmZiMyIsCisgICAgICAgICAgIjUzZDBkNzk1YmIwODJmMjAwMTAzNmY0NzJjMmVjZTZlN2QyZGI2OWYyOTJkYTcyMTM2NzVjN2NiYmEwZDMzYjIiCisgICAgICAgICAgIjMyMTJmOGY0M2E0YThlMDlhNmE1MGUwMTliYmRkNTlhNTg4OThjYzQ2YzU4YTQ2ZTQyY2U3YmEwOTNmYjQ2OTIiCisgICAgICAgICAgImYzODNkZTMzYTlhMzRmNDdjN2U2MTkzOGJmOGE2YWRhYTg4ZGYyMTI5NmI0YzY3YjUyNjgzNWY3NTdmMmMyNmMiCisgICAgICAgICAgIjFkMzA5ZDdjZGQ1YWQ1ZmQ4ZjYxZjg1MWVkMjNjNGJlMmFiYjYyN2RmZDgxN2Y4NDc3ZGMwNDJiNmEyZTQwNjkiCisgICAgICAgICAgIjQwIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuNiIsCisgICAgICAgICAgIjg4MzkzOWQxNDlhNTQ0ZTYyZWYwNGM2MTAzNTFhMmRmYTI1MmViOWE5ZDFlMTFhZTU0YzliMDdlYmNmMWZkYzQiCisgICAgICAgICAgIjdlYzFkOTQ3MDM0MTFkYTQxNWY1OWZiM2U1MDQxZWQ5NDcwZTdiY2M4MTliNWFmZWFmODYwYzAxNmVmMTI1YmQiCisgICAgICAgICAgIjA4YTZjYjhiY2RmM2I5M2E1MWRjYWRiMmY2OGM4Y2MzNzc1NTE0MjgyYWZmNzU2N2VjNjVmMjcwZDAyYmViOTUiCisgICAgICAgICAgImZiOGZhYzI0MDk1ZTE3MDZlNDhiNTI0ODY1YmMxNDQ2MWQzZWNlOGM1MDFjM2Q4MDJhZGU5ODVhZTk1Y2ZlMWEiCisgICAgICAgICAgImI5ZDZiOWFiMGQxNWZjYzg4NjZmN2YyNTljNWU0MWMwMmNkNDEzNDM3ZTdkNmJhN2YxNWIwYTcwZGFmYmQ1NWMiCisgICAgICAgICAgIjBlZGI2YjgwNzVjMjdjZmYzYjI4OWU2Yzk5ZTlhODg0ZmY3ZjA4NmRhOWY3NWQ2YTRjYmJjY2FmNTJiYTI1YzYiCisgICAgICAgICAgIjM0MmMzOGE3NmI0NGUxMDExNTVkZjc1NWUzOWMxNDg2MmUyMjBjYTM2ZmZiY2M4MzJhZmVjYmE4N2Y4YWJkOTYiCisgICAgICAgICAgIjBhNTc3ZjU2Y2E2Y2Q4ZTk5MTI2NjU4ZjI3YWM2ZTUzYzQ0MmVkNDc2NiIsCisgICAgICAgICAgIjFlYzAyYWU2YTBhM2Y2MTE5OTI5NjFjYTI3Y2NiZjI5NmUxMTM2MTgzMmUxZWU3NTIwNTY5YTlhZWUwNjM0NWMiCisgICAgICAgICAgImRhMjJiNGZhNDhmYzM0NWU0Nzc4YmMzY2NkZmViZDJkYzVhNmM5ZDQ4NDUxYWE0NDFiZWE0Yjk1MTE5OTY1NGEiCisgICAgICAgICAgImU4ZDJmNzUyMmUxN2VkYmMyZjUxY2UxNWNiY2QzNjZmNDkzOWNiNTNjM2I3NzA4MWY0YTczNzUwMDU0ZTAwYjMiCisgICAgICAgICAgIjBiYTJmZTU4ZjZmMDJlMzZhODYyNTQyMzk3ZGJhNmEzY2QyMjc3NzA4ODE5ZTc4YTJkODc2YTIzYTVhMjY5ZDciCisgICAgICAgICAgIjc1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuNyIsCisgICAgICAgICAgIjQwMzFlMGRlZjRmM2QxYWQ5YmMwODI3NzBhODhhMWQ5YjRiNzEwNzU0OGNkZjg0NjJiMGJhZTNkOTk0ZDhlYmMiCisgICAgICAgICAgIjRkYTA0NGI5MDVkZDhlZDkxYTFkYTY3NjcyNzgyMjM2MGVlMmI2ZDVlMTJiYjcwMzE2ZDc5ZThhYmI4MmE2NDMiCisgICAgICAgICAgIjQ0YWZiM2IyMjU4ODVjIiwKKyAgICAgICAgICAiMGJlNWE2ZDA0M2JlNWQyN2QxZDUxZDllM2FhNjFkOTJjOWQ4NDMyMzExOWI0OGM4NGE4MDM4OTcxOGQ3YTFhYSIKKyAgICAgICAgICAiZjU3YTlhMGQyMTRmNjUwNjQ4NDg2NGRmYWU4NWRiN2I4NDc0MDczYThmOTc3YjQyYjUzYjQwN2U0NGM3YzYyYiIKKyAgICAgICAgICAiMTY4ZDFlNzc3OGY0ZjI3ODU3YmZiYTg1ZGRkYzhiMGU5ZjBlOWE1YjZkZTcxYTA0NDM3MjBlOTJiYjg4YjA3NyIKKyAgICAgICAgICAiY2JhMTVkM2Y2ZTJiZTRkMjdhN2M1MDljN2RjMDNmMWZkZDRmZTMzOGE0ZTU0NWM0NmMwMzQ1MjJjY2MwZDQ1ZCIKKyAgICAgICAgICAiNGMiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMy44IiwKKyAgICAgICAgICAiN2ZkYzk2YTQ1NjU3NzQwMjlmZmZhOTNiMzlmMDVkZWU5Zjg0ZmE4OTUzZmQwZjYzMzhjODFjOWRlYzZjZGQ2NiIKKyAgICAgICAgICAiMWZmYWI5NmYwZTA4ZWIwYjliYTljYTViZTE3YjU3YzRiNDg2OGZkNTM0MTE1NGRlNTAyNzcxMTNjNzE4NTM0MSIsCisgICAgICAgICAgIjFkZDIxZmE0OTViZTdjNDkwZjk4MmY2OWVhYjE0ZTI0ZGFhMDRiZDEzOGI3MTQzMjQ5Y2RjY2Q3OGNjZmM5MTAiCisgICAgICAgICAgIjZhY2FhMDNlYzg3NjY5NDIzMjU2NmVjNmNhYjkxMjI4NDBmNjY5YzgwMGYyZWUwOTJiYjliNmNiMmE0NTQyYTkiCisgICAgICAgICAgIjBkZTYwNGM0ZjEwNTAwMGEzYTBkZWNjZDNkZDk3YTMyNjFmYTM4MjI3ZWIzODFhMWY4ZjIzYjY2NjVkMjg0ODAiCisgICAgICAgICAgImRmYjcyMTE3ODgyZWQ4ZGIyNWQ3NmRlNDBkZTJmYmU3MmRjMzk0ZWM2ZmJkYWE5OWM2NGZhZGU3Mjk3OGE1MWYiCisgICAgICAgICAgImM0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuOSIsCisgICAgICAgICAgIjYzMTgzMmFiMTkxOGNkMDIwODI4ZTQ3YWUyYjQ0NzZiMTQ2OWYyNzJlMzBlNTNlNTk2ZmJhMjZiNDAyOTM3ZGMiCisgICAgICAgICAgIjQ0YzJlYTU3NDVjNzlkMmRjNjRhMTBlMTIyNWNhMGI2OTI5ZDQ5NTRiYzVkMzc0MDk2ZmQ4NzhkZDEwMWY3NjYiCisgICAgICAgICAgIjYzMTNkOWE4ZjgyNmJjNjcxNDAxNDIyYzFjZmUxYTZkMDFhNGQ3ODY0YTE0YzYwY2ViYzJmMDcwOTE0Y2VlZGUiCisgICAgICAgICAgImIxNzgyZmU1NDBhMGE1ZDI1Nzg0NDRmOWIzNjAzNGVjNzdkNmI4MDNhMGM5NzYxYjMyNzU5MmFhNDg0NjYzNWMiCisgICAgICAgICAgIjU2M2YxYzZhNmRmNjhmYWFiY2U0OTdhZjRkYzlhMzY0MmI3NWE0YTI5NGQzMDg1NjhlNmQ3M2MxMWRiNTY3MjQiCisgICAgICAgICAgIjA0MmI1NWMzYTI0YTdiYzdhMTA1MGU0ZjQ0OGI2YSIsCisgICAgICAgICAgIjQ1ZDNhNmFlOGY0ODM1NWMwMTJiNTAxMDc5ZWU5MmFmZmUzYzllNjAyZTRhMDgwY2ZjOTQ3MjNhZTk2ZGFjMmEiCisgICAgICAgICAgIjY2ZTQ1NWE0MGU3MjhiMmExYjI3ZTYyMjQwNTU0ZWM3YzVjMGFkNmFhMDBjMDkyMmU1M2Q3YjEyZWQ0MmMwODciCisgICAgICAgICAgIjMyMmQxNTM2ZTQ2YjdkZWJkYTgwOTVmNTVkMWUxMmJjMjQ0MmY0M2I0ZDEyOGZlZTIzMWRjZDZmOGMzN2FhNmIiCisgICAgICAgICAgImNmNGZlN2I1ZTBkZWE5YzY3MDlkM2Q5MWY5ZTQyYTUzMTY4YTE2YjZmZTk5N2I1ZGZlYmFmYjQ2ZWQ5YWVhNWMiCisgICAgICAgICAgIjY2IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMTAiLAorICAgICAgICAgICI4YjA0M2Q5MGRhZTM0MTY2ODVkNTNhNWI0YzNjYzI1NGNkYTBjYmQyM2I0ZTQwOGRlODIwYTRkYTdhZGU2ZGQ5IgorICAgICAgICAgICI1ZDRlMWE5N2UyMzEyYzNlODQyNjFlZTBiNmNlZmU2MGU2YjA4MmZkNTk2NWVmYTE2NDhmNGZhZTYxNjA1ZmUzIgorICAgICAgICAgICI1NTMzMjcwMDQ2OTYwNTI2NTM0N2U2NTQ3YWVhNzc1Yjg1NmU1YTQ2YzM0MWQyOTk1MmJiZWE5MjcwNDk5NjNlIgorICAgICAgICAgICIzNzQwMjA4Y2ZiMGI2NTI4NTdiNmY1MmUzNjZhMTcwYmUzNGYxM2QzNTg0NmJkZTY5NzIwNDYyMDAxYjA5ZGQyIgorICAgICAgICAgICI2OGI4OWIwOTAwMzE4ZTczM2RiMjAwOWVmZDliNTE3NzQxZTUxMGQzZjM5NGY3YWRiNTQ1NTliMTU3IiwKKyAgICAgICAgICAiNmIyNzhmMzYyYzI5MmVlYTA5YjkwYmYzNTNkMTQzZjJjYTA5OWZmODc5NTczNDc5ZGYyYWZmOWIyNTBkMWM5MSIKKyAgICAgICAgICAiODdjNmEzMzQzZWExNGMwNzZmMmEyMGMxYTE5ZGIyNmFhZDM1NDhlYzZmYjNiMmZhZmM3NTFiNTkwODJkOGIyMyIKKyAgICAgICAgICAiYzgyYzhhNTFmN2ZhZjdhNGQ0YTgyMzk4YmZiZWQ0NDliZGU0ZWU5ZGM4NjgwMTYwNjY2ZmQ5Yzc3NGM2YWE1NyIKKyAgICAgICAgICAiN2I0ZWM1NGNmMGQ1YmQ5ZTNkMWFmYTljM2I0YjkxNDY3Njc4YzlkNGM0ZmU0MDBhYTg1N2EzYjA1NDViZGY4NCIKKyAgICAgICAgICAiYTYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxMy4xMSIsCisgICAgICAgICAgIjNiMjhhNjA5MmU0NzA4OThhZjA3MGEwODdjNDU1MzE4OGRlNmMzNDRiYjBiNWZkYzdmNjZmYmM1MmRjOTNhOGIiCisgICAgICAgICAgIjkyYTM3NDExMjAzN2Q2YTQzMjg2MTI4YWNlZjk1YTM1MDVjMGFiYjFhZmE2MmM0OGNiMjEzNjA3N2Y4YTBlMGUiCisgICAgICAgICAgIjBiNWE0ZWU5YjJjNzdkN2EwYzBiNTNmMzhhNTFjYzNkYjliNTgzYjNhZWMwN2YxZTIyNGZjYjNmMWRhZDE5NWUiCisgICAgICAgICAgIjA1ODY1OWE5ZDExZjhlZGM3NDQ0OTk0Njg2ZWQ2MmM5NzU2NmU5ZTAwY2JmOGYwZGJjMTcxNmU2YjdmMGY4OGYiCisgICAgICAgICAgImU4OWE4NjdhNDFkNjQzMTM1YWQ4YjE4YWExNDNlNzM3NWRmMTk1MjkiLAorICAgICAgICAgICIzMjYyZmUxN2U0NGU1ZWNjODQzMTcwZDNhZTI3NTFkYTFmNDhkNmU5NjFkODFlOTM1OWIwOTgyYzZkNjEzMDhlIgorICAgICAgICAgICJiYWNmZTI2MDdjNTM4YzE3MGNlMGU3MmEwN2JjMDE0ODdiMjk1YzM2YjhlMjJhZmRmNmU3ZmUzOWMwM2E1YzBjIgorICAgICAgICAgICIzNjYxMDYxZjIzZmJmNTg5MGVhZDU5Zjg3MmM5NDZjY2UwZjgxNmM5ZWQzYTJjMWUxMWY4Zjc0ZGExZTk3YTM5IgorICAgICAgICAgICIwZDUzNGQ3ODU1NzhhMjQ1NWZjZDg3NDc4M2Y0NTcyYTE1ZjQ5MzdkY2E5ODA5M2ZkMGU5OTkwYWYwMDA1MjU2IgorICAgICAgICAgICJiZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjEyIiwKKyAgICAgICAgICAiNGZkZDZhMzYzMWRkZDRiYzNjNzYwNzE5MDJhMjI3ZmQ1YjM2NTNiMWY5NzBmMmI3NjdlZjU1NGUxYzc1Y2FkZSIKKyAgICAgICAgICAiODE5ZDhkMWZjYTc2YmMxMDU0MWNiZjhiMWQ4YjBlNzI1NWY5NTc0MCIsCisgICAgICAgICAgIjI5Y2JhNWI0M2ZhMzU2NTc3NTg5MzQ5MWIxMTg1NzhiMTRiNWZhMWVlYmUwYzgwNzU5YTZkMTkxZTdjMjEzMWUiCisgICAgICAgICAgImUxMGFjNWI5YjhhZTFhYTdkNjk2Yzk4NDg4YTM1Y2RmYTJhYTAwNmQ5MWJmN2UwNWE1YzE5MDllZmIyMGRhYmMiCisgICAgICAgICAgIjgyMTMzYjYyNjRjMDQyMTgwYzJjY2E2NTQ1OWY2NmNjN2ViMWJhNzVkMTVkNGY1NmM3NTI4YWFiMjgzOGU2NzkiCisgICAgICAgICAgIjUzN2E0YzhkY2QzN2Q0YjRjYTgyNWNlMTY1ZmE0YTk3MTU4MjQ0ZGM4N2MwNjFmYjEyMDAxZTU1MzNmYmQ0Y2MiCisgICAgICAgICAgIjYyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMTMiLAorICAgICAgICAgICI1OTBjZDIzMDUwZTU3YjI4ZDVjMjE4NWVhZDYwYjFlOTUyOWYyYmQ1MjYxM2ViMDNmNmVkMWFlZmE0YTY3Mjg4IgorICAgICAgICAgICJkNWEzYTM0ZmQ5NWNhNjM4OTRhZjNhNDBjZDY4ODczYTFmMzdlMzU0ZDMwNDE0Mjk3YjE5MjU0YmM2YzFhM2Y3IgorICAgICAgICAgICJhNDc1MjBlZWE1NmVmZjc3ZGJmZGE2YmQ3Nzc5ZDAyZmQ4MTZmYzBlOTk5MTlmZTQzOTVlYWVlNWIyZjVmMDMyIgorICAgICAgICAgICJjZmM0MzM2ZjljZjlhY2VmNzRkYmJmNGM5YTA5MThkYTY1NThiNGI0ZTMyMDliZmNkNzFkZGQ1OTc2MDdiNmUyIgorICAgICAgICAgICI4YzM5ODVkYmY1MmNhN2QxZDc1MWNiODE2OWMwYjFiMTNmZjhiNjViNzMxZTY5ZGQyZWZmZTQ0YzYzNmYyYjY5IgorICAgICAgICAgICI5NTM1ODMxYWViNWU2MjkwMmYiLAorICAgICAgICAgICI2N2ViODk1N2NlNGMwNmY3MzkxZDAwYzc0MTI0NTNmNGI2OGIzMzAzYTEyOTI1NTRlMmE1ZmM3MjYyYzUyZTc0IgorICAgICAgICAgICJiZWQ3MGVjNThjODk1MGNkYzQzMTVhOGZiN2M2ODAxNTU0Y2QzNTc4MWQ0NGZiNWU1N2Q2OGQ1OWEwMGY0M2I4IgorICAgICAgICAgICI2ZDUzYjg0MzcyZDU1NmU1YTQxNTNjYmU2YjM5N2M0YzljNjgwMDcwNWQyZmMwYzU0ODY0NWUxMWI5ZDhkNTEyIgorICAgICAgICAgICJiMmRkOWJmNTlmM2RjNWQxMWMzYzc3M2Q1OWNjYmVkOWU2YmMxNDMyMDkxMGNkZjgzYjQ2NTkwMWI3NDZiNTk2IgorICAgICAgICAgICI3NCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjE0IiwKKyAgICAgICAgICAiODA4Y2I5NzYxM2ZkODc4NTM1ODAxYzgwMDg3OTE1MTBhNWZlODY2YWQ1YjY4NDNhNmUwMDE5YTBmY2MyMTc3NiIKKyAgICAgICAgICAiMDM1NGY2MGNjNjk5ZmJiZTFhZGZlOGIwMGVjZDZhMzZhMmI1YTVhMWZhYTIzZDM0MzgyMDAyNGUzYTMxOTdhZSIKKyAgICAgICAgICAiNjczYyIsCisgICAgICAgICAgIjFjNTM5NjU5Zjg3MjQ2OTkxNmZiMDAwN2VmOWU0ODU3NGU5NjRlNGMwZTZhMmZhNzRiMTM3M2ZkNjBiNjY0YTciCisgICAgICAgICAgIjk4YWM4MTI5YzA4YzEyY2RiZjM3NDk3NTBiZTEyNTYwMmE3MTU0MzI2NzY3MzI3ZTkyYmE1N2I1ZTI4OWI1YWMiCisgICAgICAgICAgIjlkNzc3MWI0NTIwYTdhMmNlNjZjNWVhZjcwNGFmYzVhMTkwZmE2MGJlMTM3NmY5NDNkMmJhZjcwNTIzZTQ3YzMiCisgICAgICAgICAgImRlZmMwYTI1YTYwMDE4MzFhMzdhYWIwY2YxZjY0ODdiZTM3ZjBlMzFjYTdkYjVhYzQxYjU2MzA5NTc1NTkzNjkiCisgICAgICAgICAgImZmIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMTUiLAorICAgICAgICAgICI1N2VkYWEwNTY2MjUxNjg2ZjY1MjA1ZWZjNjI2NjBlMmMyZTA0ZmE1ZWFhMzMwMmRlODdhM2Y2YjQ5MWY3ZmEzIgorICAgICAgICAgICJhYzcyNzBjYzc2NzUxYTQzNjk0MmFjNzY1ZWY1ZjQ3NDkxNjJkN2U3OTcxMjZiY2I4ZmRhYzE5Y2YxOGRjYzZlIgorICAgICAgICAgICJmZjQ4NTkzYzA1Yzg4OTNiNTkxYTUxMzMyZmEyNmFiODYzYzVlYWE0ZDc1MWU4ZDFiMTljNTgyNjkwYjU0MTVlIgorICAgICAgICAgICI2YTg5ZTA1ZjIzMWIzM2FjMzhjNTNmOTVhMmQ1ZjkxMDUxYzJlYzZkZGIyYjZkYmE3ODlkNTUzYWRiOWYxMGM1IgorICAgICAgICAgICI4MzU5NzAzNmQzNDg2ZmJiMzIxNzJhMWMxMTA3OWU1ZjA5YWEyOWViNDY3NGM4ZDdiZjViYmQ2ZDA1N2U2Yjg3IgorICAgICAgICAgICJhOGIzYWFmNDgwODZkNzIxY2JiYzhlZmFjNjI0NGQzMjM5YWUxOGYxNjYyM2ZhNTI4ZTJlNzBmYTI1NjU2YTZhIgorICAgICAgICAgICI0YTIyOTI5NTBmYzkyOGVkYjgxYyIsCisgICAgICAgICAgIjMzNzMyZmNjMjMzNDJjNTg1MTM4YjI1YjE3YzgxMmVlM2U5ZDNkYTQxZjZmZmJjYzE2MTdhMmVlNzVjYzViMjUiCisgICAgICAgICAgIjAxMjU0ZmQxOTc2ZDI1ODgwMGU5MDVkN2U0NGEwYWI2ZmI0YjhhODhiYjdiZjkzMTczOTUzMDNhYjJmY2E0MzEiCisgICAgICAgICAgIjI4NDg2YTJiYWIzNmM3NWVmNmFhNWViM2ZjNWJkNTU1YjNlYTc5MTI0YWFkNzg5N2UzYTQzNGRlZTc5MjYzNzEiCisgICAgICAgICAgImRlMmQ2ZDIzN2U4OWIwM2I4ZGQ3MDk2MDU4ZTJhNGIzMmNiNTU3YzdhZGEyOThhN2UyZWRkM2EzYTNiNTI5YjQiCisgICAgICAgICAgImQyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMTYiLAorICAgICAgICAgICIwODMzNzZiYjgyMjEyYmY4ODBiZTEyODU2NTNhZjJjYWQ2MjVjNTJlOTRlMzIxNDM2ODc3ZjcyNWE4M2JiZDQzIgorICAgICAgICAgICJmNDQ4NmQ4OTZjZjY3ZTMxMzkxYjg3MDZmOGMwZjhmNGJiMWRkYmE5NWMzMzJmMDM0ZjM5MDkxMTNmNjU1NjkyIgorICAgICAgICAgICI2MGEyZTRmMTA0MDY2NTdjOTlmYWZmMDAxZmUxNmViYjg5NmU5ZTE4MTE1YWYxZDQ5ODZjODU3OWFiNTY1MmNjIgorICAgICAgICAgICJjYTQ3NzQiLAorICAgICAgICAgICIyYWY0NmMwMGQxZDkxNTk0MWUyMTJhN2I4ZDgxMDVlZTBmMGVjNDgwZmZmYmI0ZjEzYmYyOGQ3M2UyYjMxOWI5IgorICAgICAgICAgICI4NGE3YjdjODM2N2FkY2E3YWIxMmFhZjUzYWNiOThkMGNiNTRlZTM0MjA0YzkwOGU2MGM3Yzc5ZWZiNDJjMzExIgorICAgICAgICAgICI0YTAyNTg5ZTFhZTZhZmI1OTc1MzU0NTc4YzE0MzVlY2M4OWMxMTZlOTAyNmI2YmM4ODllZTI4OGFlNGRhZjAzIgorICAgICAgICAgICI0N2NjY2VmYzVkZmQxZWY4M2NiODY4NTJlZWZmZDg0MDk4NTk5YjcyNWJmNjAyZWU2MjBiZGY0NGFmYmQ4NGMwIgorICAgICAgICAgICJjZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjE3IiwKKyAgICAgICAgICAiOGM4NzRjZDBjZTMzNTEzOWMwOGQ3NjBiODI1ZWI5OTA1ZCIsCisgICAgICAgICAgIjY2OWE4YWQ3Y2I4MWVmMjE4N2Y1YTg1NjQ3Njg0YjcyNDg0YWZmMjc5ZjBhZjM1NDM1ODY3Y2MyYjA0MzMzYTEiCisgICAgICAgICAgIjk2ZWNhNmNmNDRhOTdhMWJkMzlkMGY2YTBmZjk1OTU3MDI4MzViYzgwYTcyZDcxNDA0ZWYzZjQ2ZmEzYjBkMjAiCisgICAgICAgICAgImU4NmQ3YTFkNWY3ZWZjM2YzYjhlOGE3ZTM3ZTg3ZTI3YTk5ZmViYTk2YWQ4MTMyMGJlOGZmZjc4NTU3ZDA3YmYiCisgICAgICAgICAgImJhZTIxNjAzYTEzNjhjYWZhNWFlMWQxYjYzMGFhMjFmZjIwZTQ1ODU2NTBhNzczZDdlMmY1ZTdmNTE3Mjk3MTkiCisgICAgICAgICAgIjNjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMTgiLAorICAgICAgICAgICJjYjNlNjEyMWQzOGI3ZDk3ZTE4YmExNWM0OTNkMWFjMzJlOWQyZWY0ZTNiZDE2ZGY5YzY3ZTRhMTk2ZTkyNDdhIgorICAgICAgICAgICI4ZDBjMjRiMjFjNGFiMjNlNzdkNmRiMTE3ZDU5MTE5NWJiYWY0NDY2ODI1ZjYzOTc4ZjExNDA4NTI4MWI3OWFlIgorICAgICAgICAgICJhMzdlMzJjNmIzNmMxZTlkZGQ0YWQxMjM2ZTk3ZmQ0MjdiNGQ5NzZlMDc2NDlkY2E0ZjMzYTg5YzQ2ZmI4YzAwIgorICAgICAgICAgICJiNDI2N2IxNDQ3MDQiLAorICAgICAgICAgICI1Njg0MTc4MDNhNDAwZTlkMDUwYTQzMjBhZTdiN2Q4ZDI0OGUxNjM2NTA4NjlkOWZkZDEwMGNjMWE2YjliYzI5IgorICAgICAgICAgICIxYzNmMjNmMTI1NjAwMzE2NGY2MTlkYmM3ODYzNWViZGYwODk0OTBhZmE1YWEwMGI2Zjk3ZWIwNjM2YzNiYmE4IgorICAgICAgICAgICI5ZDg2MzYwYWZlMjYwMDQzZDg2MWE3NGY2NGM3MWQ5Y2JkMzFlYWUyMzkzYTFhZjE1NjFmMWFiOTJjYWE3NmRkIgorICAgICAgICAgICIxZTc2YWIyMzMzMDk4YzgzYzJkOTlmYWU4MjczOTg3NTgwMDVjMTc2Y2JjNGEyZTIyZWZhMGU2YzEyZjRlMzQyIgorICAgICAgICAgICI4MSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDEzLjE5IiwKKyAgICAgICAgICAiMjE5YTJmOGQwYjAwMGFlZGI1ZjE4NTQ1NWVkM2VhMDk0YzQ1NDI2YjI4NWJhYjRhMDdjZjNkMGEyOTA2ZjNlMiIKKyAgICAgICAgICAiMDMxODRjMmQzZDgxYTgwOWI4OWM5ZmM0OGJjOWFmOWFiMzJmODRmMTVkODEzODljNGVkYjBhYzY4YWQwOTUwMiIKKyAgICAgICAgICAiZTNmMzBjN2NmNjQ1MTAyOTU0YjI5N2M4NjYxNDY2ZmMxMCIsCisgICAgICAgICAgIjAzODM1ZDkwNTdlMmI4MjFkYzRjNmVhY2EzZjQxNTZhNTY1NTBiNmY5ZDc0MDBmYzVjNTE5NWE0YWVlNDcxN2QiCisgICAgICAgICAgImYzMjkyOTEyMmI0MzI3M2EwNzlhMjRmOTlkZDllN2MzNDA1NmFlYTRmYzRlNDU3ZDgzMTRlZjM0NDI3ZjhlMjAiCisgICAgICAgICAgIjRiODFiYjQ5MDNmYjNlNzc5ZTM4OWU0MTMzOTA2OGMxNTdkOWIwOWYyYzVlOTljYzU0ZTZlZjg2ZWVhYzBlMTkiCisgICAgICAgICAgImY0NGUzM2U3MDdjNDI2MWEwYTgzY2ViNDIyZjJlMDZiY2NhZTNiOGJiYTQyOGQ3NTU3MTUyZjQwODQ2ZWMwMTEiCisgICAgICAgICAgIjM0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTMuMjAiLAorICAgICAgICAgICJlMzljYTQwZDJlOWQwM2FlMDU5NmY2MGViOGY2MDk5OTMwODVhNWRiMTU2YjBkNTA5OGZlNWZhYWM1NWY3MDk5IgorICAgICAgICAgICIzZmUxNzZkMmQwYzAzOGI4NjBiYmY5YTY2MjQzZjVlNzhlNmNiZTUyNmVjZjI1MTI4ZGFlMzE5NjU2Y2MzMjFlIgorICAgICAgICAgICJlODBhNTA1MzE0OTBjOWE2MjQzZmJkYjBjNWViNGNkNjQyZDI2MTE1MDVhZTEwODQ5NzU3MzhhZDg0NjIxZDY3IgorICAgICAgICAgICJmNSIsCisgICAgICAgICAgIjRmY2ZhNTczOTdmMjdlZTBmOGFlNzVhMGE1NGQ1NGIwYzUxYjk1N2VlNjNiZjc5MDFiNjA1NWNjMzk4N2MzMmQiCisgICAgICAgICAgImY3MjIwZTE2NmE3MTYwNmFiYzc4ZjkxMTA3Zjk3NGRmZjdkNjI1N2MyNTZkYzZlZDdhNjljM2M5OWY5Zjg5YWIiCisgICAgICAgICAgImI1OGZlNTg5YjdlZTdjYWQwZjQ4YzE2MDEwZDA0NmE5YzRlMDA0YmJlMWE4Mjk3OTY4ZDQwYmM3MDY4MmViYWUiCisgICAgICAgICAgImE0NDg1MjVkYmVlMTZiMDNiZDBiNjUyNmQwOThkMDliNmJhZDlhYmEwMzkzMDVlMmFiNzk2OTAyMDg2NTgwY2MiCisgICAgICAgICAgImYwIgorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiQSAxNTM2LWJpdCBSU0Ega2V5IHBhaXIiLAorICAgICAgImQ4NzBhNzc2Y2QxM2VkNDQzZGYzOTkwOGJlZTJjYWQ3M2M0ODVmZDliZjA2MzIxMzIyODg3ZmJlNjU1YzA4Y2IiCisgICAgICAiZTRjOGY2M2UyNTRmYzkxYzc1ZjA1NTdkOTAxZDQzNWIwZThkZWQ4MmQ0OTE3MzQxNGQyOTg2MDMyNGU0NmMxYiIKKyAgICAgICIwMzBkZmVhYTI5ZDgwZjk4OThjMmM1ZTEwMWNiZjZkYWEwNjI4OTc4ZDQxNWI1MDJkZWEyNmRlNjU2MWM3OWFiIgorICAgICAgIjA2NWM2ZGNhNmFiYzRkNGQ0ZDVlOWY1Yzc0Y2IzZTZhNWFmNzFkMWY5MGZhNWVhYTFiZTBjYTk0N2E3MGEzOWUiCisgICAgICAiZmQzMTVjNGRmMjFhMWE4MjFjYWFmZjhkY2JhZDEzYjI5YzdlODJhYWQ1M2M2NGY1ODJlYzllYzMxZTZiZGU4MiIKKyAgICAgICJlYTVhNWY0Y2NjZjBjNDU3Yjg4OGYxNTUwYzRmZjhlMWMxNzhhNzZhNDZjMTk2ZjRiZWY1OWU2MWRkOTQ0ZTQ3IiwKKyAgICAgICIwMTAwMDEiLAorICAgICAgIjA1ODg4ZmM3N2E0M2JkYTdhNjdiZDE1ODQ3NjUwZGYxODVjMTg1ZWRjZmIzZWQ1OGNlZTNiNTdjNWQyNDA2YjciCisgICAgICAiOGJjMDU1ODc0ZTM1ZTU3YWRjNGIwYTJjN2QyMDNhNjYxYzBmYTVkODU3ZWRlNjA3ZWZkYzk1NjgwNDJiZjBkNSIKKyAgICAgICI5OWY0ZTQyMzVlOTE3ZjA4OTQzMzNhOTJkZjk0NjJkOWMxMGFmM2RmY2E3MDQ5YTFlYWE2MzU3MDEzOTg4M2M1IgorICAgICAgImJlZmViZWU0ZTIyMTg5NDNkMzBmYzY0NWZmZThiOTE0ZDIxOGRkNTg5NjBhYWRjMTIxNzE1YmNlNWNjZGRlNGEiCisgICAgICAiMmM3M2E4ZDlkODZhNGViNmU0NTVkYzkyNGZkNzRhMGIxZjc1NjkxYzI4MWJhZTkxNGQ2OTllZTI1OWQ4NWM1ZiIKKyAgICAgICJiNWRkOTk5ZWJlZjliNzBhNGJkOTRhYTRmYWZhZTI2Y2E3ODRkMzJmZDRlMDc3ZGJiNmVhNjkzYmNkNmQyN2Q1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC4xIiwKKyAgICAgICAgICAiZjdhM2M2N2U5MmE3ODdmMzVkY2M0N2FlZDdkNmI2MTkyOTY3YmRmZDAwYTZhY2JmNmY3ZWZlNDZkM2FjYWVkOSIKKyAgICAgICAgICAiNzg4YWE0ZjFkYjE4NDQwMjI0OWY5YWNlZmMxYzdkZmIxZTY5MGQyNDczOGRlODZmYTViNTI1MGY5NzllYmQ4ZiIKKyAgICAgICAgICAiNzc4ZWVjMGQ3ZmNmNzMxZmEyMjUwODZjODY2NTY0ZWQzZWIxNTRkZDQ1OGQwNTAwMjgyZjg2ODA0ODg3ZDQ0MyIKKyAgICAgICAgICAiNWVkYTlhNDQzNmE4ZTkyM2EyMGNiNGI0ZDBlODFjOTExMTRiZGMwNjgyMjc4ZWMyNTg4NjA3OTliNTljOTQzNiIKKyAgICAgICAgICAiZjQzYTUzY2FiNGM0Y2QiLAorICAgICAgICAgICIwOWQxNDM1YmY1YTljMTcyMDNkNTM3ZmU1N2RmOTg3YjdhNTFmMzRiMmExNDA5N2UwNmEwZGU1NjNiZTdkNjRiIgorICAgICAgICAgICI0ZWEzNzk3M2I0ZmU5OTczYTY2YTNmMzFiYThlMDdlOTExN2I2YTFlZTcwOTYxMzM3YjRkMmIwZGY1OTgxMGI2IgorICAgICAgICAgICIyNDA4NTExOGJkYTcwYWM3NGFlNDNlMmZiY2Y4OTIyNzYzMDMyM2RhNjgzMGY1YjFhMmI5NTRmMWIxNWFlYTA3IgorICAgICAgICAgICI1NGRmMmM1MTE4NTc5NTE2ZTg3N2NjYjBiMTI4NmM1NzI0NjU1ZWY4ZDI5MTg1NjY2ZjZlOWJkMzJhNmJkOWNlIgorICAgICAgICAgICI5ZTFlZjk0NzI5ZmM2N2Q2YTMwZTY0NTYwZWNmNzhiZjhlMWIyYjQwZTUwNjA1ZTI1YWU4MGMzODY3NjRhZWQxIgorICAgICAgICAgICIxYTBlNzE0NDkwNDljOTM5YjI5NjJmNmMyNDE3YTM1OGNkYzgxMDZiMTJiMWE1NTg3NjM5NDM4YWYxYTY4ZDMyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuMiIsCisgICAgICAgICAgIjJhMTMzMDAzYWI2N2NkZDJlODNiNDRlOWU5ZGM3NzdkZTAxZjRkMjMzZDIyZTdkMmI0NDY3ZjA0ODEyYTNhZWIiCisgICAgICAgICAgImZmYjEwYTA5MjQ1NGUzM2I5ZTcwMjgyNDkzMjg3NDdlYTE0YTExYzc5OGFjMmUxNDZlNGU0OTY1OWJhODYwNjciCisgICAgICAgICAgImRiNjRlOWJkODBhNzAyMWFhYmNjMjI4NTZlODEwMTQwYzIwZmQ4YzY1MjdiYWRiYmQ5ZmE1OTUzZmE3N2U2ODUiCisgICAgICAgICAgIjg3MDBiZWI2Yzc0ZDVhNDYzYzlkYTg2MTEzM2JhYTViZDZhNTk5ODA3YWU5MTYyZTNhZjNhMzQ4ZDA0YTRlZGQiCisgICAgICAgICAgIjJmZmJhYiIsCisgICAgICAgICAgIjM1ZTY2NmNmYjg3YzA0ODhhODZmZGZlZDVmOWRlYWVkYmM0Njc0MTcxYzMxODQ1OWFjYWFhYTIwZTFjYWQ3YzUiCisgICAgICAgICAgIjg2MDQxNDBhODBmZjdmNTY1YmZiYzg2ZTkwMzI4ZDRjNzI5YjkxYmY3MmE5OGRiNzAxYzFiZTYzOGE2ZThmMmUiCisgICAgICAgICAgIjQ2OGYyMDM5MjQ3MGM3YzVjMzQ0NDJkNTFiMWIxNTVmYjQ2NGI4YTU1NmY0YTE3MGMwMjMwMWZlZDBkMWFhOTIiCisgICAgICAgICAgImFhZmRlYmMzZjE4ZWE4YjRkNzFlMjQ1YzI1MjZmNmZlNjY1ZGU0ODM4NWY0NmNlMWJmMzMxMmZhODkyODA5OGUiCisgICAgICAgICAgImQzMzEyYjYxMTE2Y2E3ZTQyMzIwNGVmMDhiZDJkZjNhZDdiYmM4NTAwOThjYjAyNjgzMjY2NjI1YmJkOTU5ODIiCisgICAgICAgICAgIjUxMzVhNDVmMDM4MjlkMDk2ZmVkMThiMjBiYWEzZjlkNDRiMDA3YWEyNDFmOTJmODg4NjA1NWQ5OGUwZTA3MDQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC4zIiwKKyAgICAgICAgICAiNTg2MjdmZmFhYThlODAwYThiZTk4ZTQyZjUxYTgzNjExY2ZhYjdlZTM3NmIzNDczN2IzZTQ4ZTFiYzE3NDJkYSIKKyAgICAgICAgICAiYTc3ZGU0N2UxYTliMjkzMzc3YWEiLAorICAgICAgICAgICIzZDE3Y2IzODZjODg3ODRkMzU5YWQzYzM4ZGJlODg4YmZhZTgzMWJmYjhlZGM5ZDBlODAxZTdkNjllMWRkNGMyIgorICAgICAgICAgICI0NDFkNjhmZGJiMzUxMjZjNzNhNGVkYWJiZmY1NGU3NGZhNTEwOWRhZDhiNWMzMTNkODZhNzllNGQ0MTI3NjYwIgorICAgICAgICAgICJmYzJhOGUxYzkzZmE4ZDA5MmFjY2YwMWNjMThhNjA2Y2YwN2RlMmRjM2U3YjU1MzMxMTUyZGIwMWI2Y2FlYTFlIgorICAgICAgICAgICJjZWM5MDkzMTk5YmU2MmMzZTEyM2UyODczMTEzNTAzYjIyMDMwZjE2OGRhZmM0ZTZiZDA2NWFkMmY2YjFkZWQwIgorICAgICAgICAgICI1YmUwYzJmOWI2N2JkYzFhM2JiMThkYTk1OTRjOTU3ZGE0ZTQ5ZmFjM2ZlNzZlMDc2NmY3NGViMGQ1MjNlNGRkIgorICAgICAgICAgICIxYWU3NTlkYWQ2YjliOTA4YjdmYzhiOTdlZjVmNGM4MjkyMzIwYWMzODdjMzUwOGI1NGNmYjg1ZDM0ZjZhZDM5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuNCIsCisgICAgICAgICAgIjBmMGY4ZDNjMGU0ZDI2MDhhZmFkNWE4ODhlYTE0YjNmNmIyYjI3ODlkZDIyMTJiODU5MDllNjRiZmIxMDRkMGYiCisgICAgICAgICAgIjdkZTQyN2QxNGE5ZmZhODU1ZTJkNGNhMjQ0MjMzNmU1NTk1NjhiMjg0MTVkNjBjZjgwNjNkZTU1OTIxNzFiMjYiCisgICAgICAgICAgIjliM2Q3NjMzNTFjN2Y3ZDlkMjU4MDllNzAyMjBlZTMwZmU4YTAwYjk1ZDRjMjAyMDI2ODk3ZWQyYzYxZDdhZDQiCisgICAgICAgICAgIjNhZWRkZjM2YjVjMmNiZTIxZTAwODZkYmQwZmRmZDE5ZTQzZjAyNzdmM2JjOTVlZDU1YTM0YWY5MzA5MTY2MDIiCisgICAgICAgICAgIjE5M2NmZTA0NTE0YmQyNmEwNTdlNTYyYTExOTBjMjdlYWFiNmMzMjJmY2ZhZjRiYmNjN2YyMGMzNzc5YzYzOGQiCisgICAgICAgICAgIjdiYmMwNzA4NmNmNzViZjgzOTk2ZGI0NDYzIiwKKyAgICAgICAgICAiNTA5MDQ1MTIzNjEwNTA4NzJlYWU4MDEwMjYyOGI2M2QwMjE2OGRjYTUyZjBhYmQ4NzcyMGVhNDgwNTBkMmM2MiIKKyAgICAgICAgICAiMDYxYWEyMTUzMjY4YmVmOGVmYjM0ZWVkNDYxNzFhNjI4OGU1MDRkNDIwZjZmYzE0NTEzODYxMWU3NWVkM2NmNyIKKyAgICAgICAgICAiOWI0ZDEwMjY2NGQ4NjQ0ZmYzZTllNWRiZmQ3MWNkYzI3YTIxMGVmYjEwYmU5MDI3NTYwNGY4ZDQ0OTE0OGIzZiIKKyAgICAgICAgICAiODYwOTkwMzljMzNhZWY5MGJmMTkxYjM1MThlYjQ1OWRhM2JhMTRmZDBjNzIyMjlkZWE1ZmFjMmY3ZGFkZTEwOCIKKyAgICAgICAgICAiNWM4YTIzNzBiYmZjZmEyZTNhOWU2M2NhMjI0ZjZkZThjOGQyOTdhM2IxZjA2ZjFmYzk0OTc4OTBmZDBlMGUxMyIKKyAgICAgICAgICAiODg3ZmFjYjE1MmQxMmQ5NjM5MjUyOGVmMjhkMDcyNDMzMWZmNDE0MDMwYzdhNjM4NTU4MTNjY2Q4OWZiZGIxYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjUiLAorICAgICAgICAgICIyNjY1Y2I1ZWUzNmFhOWJiMWE1Y2RlN2NlOCIsCisgICAgICAgICAgIjRmMzhjMmJhODRjNTBkNDZkZjUzMTA5MWI2MjcxMjE0OWMxZjQyZGJkNzdlMDNkMTg1ZWE5NmVkYTgwMjMzN2MiCisgICAgICAgICAgIjIyYzExMzBiYzNiZWNlYmYxNTM5ZmQxMTg5Mzg1MWRhZTNjYzE1NjdjYjZjNzNhNzJmYTFjOTY5NDg2ODIxMTIiCisgICAgICAgICAgIjdlN2NmZWExMzYzZWVlOTUyYjdjNmViNTllMTAyYzY2NTdjMDgwMzUyNzJjZGY0YWI1ZTU4M2VkNzM3YWQwMjgiCisgICAgICAgICAgImFjMWNmYWZlZGRjOTA3M2RmYmQ3ZDNiYTNkYTllOGRjZDg0NmZhMzY1YzljY2Q4ZTliMzk0ODNkMzcwNzNjMWEiCisgICAgICAgICAgIjdiNzgyZWU3MTIxYmIxYTJhZDhiZjVmOGVkNmU2NTNlOTI0ZGViYWQ4NzFiNzQ0MzM5ZTVhZTdlOTZmNjBkY2MiCisgICAgICAgICAgIjQ1ZWE1ZDY5N2QzYjFjYzdjNWU4ZGEwNGU5MmJlMDZjYWQyZTYxNGVhYzMxOGFlY2FmMTJkNWE3NjIzNGMyYzAiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC42IiwKKyAgICAgICAgICAiN2I3YjYxNjEwMjBmYWZiNDg4NzE2MzIxMzQwZGFmMmMwNmFjNDNjZTIxMzI4Njg2ODRhYWFmYWIxMzk5NjUzZCIKKyAgICAgICAgICAiMzUzYjI2OTNhZDczY2I1NWI3MWQ2NmFjZDAxYTE2MGNiZjc0Mzc2N2JkOTZlN2ZkMWM3YTEzMzIwNjY1YmJhZCIKKyAgICAgICAgICAiMWM0YTBjZWQyNjU5M2NlODljZDgyZjU0NmJkNGQxYjFiY2Q4MmM2NWE0NjZmOTlkYTAxMmE0MWU4YzQxMjA2OSIKKyAgICAgICAgICAiODEwOTU4NDc1YjRkOWMyZjgwZDgyZDA2NDE0YzgzMjVlYjRmMmM1YTExNjZmMWYxZDJkMTA3ZDQ4YyIsCisgICAgICAgICAgImQ1Y2JiNmM3ZWZmNGE2M2FkODI1MGRlOTRjYzI5ZjdmMzFhMGQ3MTA2ZDVkNzcxYjcxNWRmOGE2NzVmZDE2MzQiCisgICAgICAgICAgImQ2ZThhYjU4ODc1Y2M0YzE1MTdiMmZhZGY0ZTg1YzFjYjhiODUzNjBlMDY4NzU4N2QxNDgwODlmM2Y0OGI3OWQiCisgICAgICAgICAgIjk4ZDIwMjdjNTA3NzBiMzM0ZjEyNTJhYzBjM2IyZjAzNjUzNGMzYzI5NzIyZjYwODdkMDZkNzA2Y2VjN2M0YmQiCisgICAgICAgICAgImNlMWNkNjRmN2I0ZTA3OTlhODdhYTA3M2VhODMyMDI5MmI4ZWM4MjcxNzQwNmQzNmVmOTEyNWU0MWZiNWQ1M2IiCisgICAgICAgICAgImNjZGQ2MjJkMzg4ZmNjZWU2MGEzODVlYzIwNmE3MTVkYzU0ZDc4NzdiZDcyODVkMDg0NGMyNWQ1OTM3Nzk3OTEiCisgICAgICAgICAgIjI3ODM5NmZmOWE4YTkxMzA2YTU0ZWE3NjYwN2M4MTNmODAxZjM4NzYwYzNhODE0YjkzOTY5NTljMjlkYmZmOWQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC43IiwKKyAgICAgICAgICAiMmIwYWQ2MTM4MjI4NzhhNTcyZTE0MjgwIiwKKyAgICAgICAgICAiODljODEwODRkYWE4ZjkxNGI3ZTI0NDU1MTA3NDE3Y2E2MjFjOTEwMmQ1MDFlZWI0M2QxNzRjN2JhZDM4MWRiMSIKKyAgICAgICAgICAiOGQ5NTMzYzM0MTFhZWM2MDU3Y2E1YTRkZmRjM2YxMzFjODg4Yjg4ZjAxMzAwM2Q2MTdlMDZkNjQ0Nzk1MDJhZSIKKyAgICAgICAgICAiN2U0MjRhNWRkNjM3YjAzMzU2NDA0ZDI2MGY1ZWQ2YjhjYjE2ZDI1Nzg1MjhjYzNlODUwMDM0NmViNzkwYmRhZCIKKyAgICAgICAgICAiNDFiMmUzNmNhNmYxOTg4NWUzZjZmNTEwODZiZmZiNmFiYjljNjYzMzZiNDk0NzM0NjRjNWQ3ZWQ4ZTlmZjg1ZSIKKyAgICAgICAgICAiMTFhZWZmNDA5MDY3YmFiMGEwNWM0MWU4MTUxYjhiZTk4N2YzZjU5NThlM2U2ZjI2NTE1ZDk2YmYyMzRiMjJhYiIKKyAgICAgICAgICAiOTFjMDg1N2I2YzA4YTQ2YjAzMDVmZTA0NGNhOWFhYTBkNzBhMjc1OGExY2U0MzE2NjRhOGRkNzk0MDhjMTZiYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjgiLAorICAgICAgICAgICIzNjkzOGM4YzdjNmY3ZTM1NTIzNGRiNWEzMmE2NDgxMGRiNTAyYjY3YzZmNTkyNTQ0ZmZiMjdlYjFmMjJlMDZmIgorICAgICAgICAgICIyZDYzOGI1NmQ1ZDJmN2QxOWU5ZTI3MWYyY2M5MGNjMGRkMzZkNmNjMmMwNjE3OGJjYzcwNmFlZjIwZTU2YTM1IgorICAgICAgICAgICI4ZTUyNGY2MzE2NzY5YzU0YjZkZTJkZDUiLAorICAgICAgICAgICJhMDM3NTNhNWZiNTRhYTUxZjZkZDhkYWI5MWYxOWNiODY1NTY4NDg1Zjg1NThmMGQxMDNmMGQyYjZkNzg1MzZlIgorICAgICAgICAgICI3OWM4MTVjNGEwMzdiY2FmMTFiNjlkNGNkYmFiMDM1YWJlMjE2ZjcxNTJmNjMwZmZjNzlmODQ5ZDhkY2Q0NjNhIgorICAgICAgICAgICJhZTZhZTk3ZDNkZjE1YTllNzNkMjNmMTg3OGZhYzc1NGNiZGQ1NzFhZmVhNWQyNTM1N2Q0Yjg4MzQ1ZjQ4OWJlIgorICAgICAgICAgICIwZDY3YjliZmFkZjAyM2YyNmU2NzMxNWVkNWZiZjM5MTkxMGFmNDk2OWI3MjRiZjBjYTMxYzEwNTlmOGEzOTEzIgorICAgICAgICAgICJiNDhhMTM4MTljMjM2YzliZThlODI0Y2E0Y2I2MTlmYjdkNzg0Y2Q1Zjk1MjZiMzk3Yzc2YzVkMGM2MGNmN2Y0IgorICAgICAgICAgICI4ZDExMTk2ZTU0ZjcyYTA4YmI0MmY3NWFlZmUzOGYwYjkxYjQyYmI4MDZkZTRiODdjOTA4MmY3MjFhNjg4MGNhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuOSIsCisgICAgICAgICAgIjYwODMwYzAxY2ZhODZmZjJkY2FjN2FmOTMyMWVlNWZlNTAyZTBlN2E2ZmFjYjczZTNmNmJjOTAyNjQwYTYxMDkiCisgICAgICAgICAgIjVmNjQ2ZmQwM2U4MGQ1ODE4MjQ2NTMzMWU3NWQ2NjExYTA5Nzc2ODE2MjcwODYyNDE3MjlkZTlmNDRhYjQzOTQiCisgICAgICAgICAgIjlkYWMxOTM2NzNiZDZjZjg3ZjVkNjU3NzFlZjg3MjgxNjMzZmRkMDdiYWM0MDlhNmUyMzJiNjAxYWVjZTJkIiwKKyAgICAgICAgICAiNDA1OGY2ZTAyNDBkODUxZDYxOTM5NWE3NTI4N2E4OGZhZmQ4ZGM1NjAwYjA2OWJmMTlkYzNlMTkyMWUxMTdiNCIKKyAgICAgICAgICAiOTdiODJiM2M1MjAyNjliMWQxMTI4MTY0ZmNkODhkZDJiNDZkYzg1YzQyZWNmNjdkZWJhZDIxYTNiOWExNTU0MiIKKyAgICAgICAgICAiZmVhMjI2MDZlYWI1ODJmYzMyOTcxMWZmYzA3ZjRlZWYxZjNiYmZlMDg4OGNiY2E0ODViYWZjMTE4OGIwYWZlOCIKKyAgICAgICAgICAiMDljOWFhZjhmYTM2NjZiOWM5MDU4NTM5ZGIxZWM2YTE4ZTViZTBiODAxNDRkMmMzN2NhNjE0YzA5MGI0YTdmMSIKKyAgICAgICAgICAiMzQ1OGUwZDNhNGNiMGNiNzNkY2M0ZDkwODA2ZjYxMDg1ODg5ZWI1YzliMTQwOWRlZjM2MGZkMWMyZTQ5NDM4ZCIKKyAgICAgICAgICAiN2M2N2Q3OWRiZDlhNTkyYWI1MDRjNDcxNWY2NWIyOWQ4NDY1MDk5NTE1NjlhOGMzNzkwOWY1ZDU1MGVlZmZmYSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjEwIiwKKyAgICAgICAgICAiNjM1ZDIyMDNlZDlkNWI5MTIwZTMxYmY2OWQzMDViZTYwNjg2OTdlMzVjZTU5YzU1M2U1MDhkYzc3YjA3M2ZmYSIKKyAgICAgICAgICAiM2FhYTU5Zjk5NmMzMGIyZTY4NjMyMzgxOWZkZTIyYmU2YzhkNTM4Njg0MTRiMzU0NWFiZjQzNTc2OGE2MTFmMCIKKyAgICAgICAgICAiYzFhNDc5YTBjNzY2MGQ1MzVlODA1YjVmZWRjMzc3OWNmMGM1MmMzY2QwNDBhYjY1MTRjN2Y4MTMzZDQ3YjBhYyIKKyAgICAgICAgICAiYzY5MTRlNmQ0YWQzYzQ3MzdjZjUxMjkxMDk0ZTg1OTQzM2JhMzA2NmUxOWQ2YWEyZGE4OTZkYzlkOTVlZjllNSIKKyAgICAgICAgICAiNjM2ZGFiMzVmNzI5ODcwNWM2ZDg3NjE3NTQxMmY4ODQyNTE5ZmZlMTZjZjc0MzYyYWIiLAorICAgICAgICAgICI5NDYxYTFhODQxNDIzZWQ1Y2ZjNjA4OWE3NGRiZmM1MzczMTEwM2JmNDk4NWRkYjE1MGIwZTkzODBkM2ZlMGNmIgorICAgICAgICAgICI2ZDQ1N2M1YzY4YTdmMjU1MDQwMjJkNjk1ZmY4NDIxMThlYmY2MTAyMmZlYTQ3ZmE0NWY3YzFjYzcyNmUxZGU1IgorICAgICAgICAgICIwYmQwNjRiM2JiNzAxNjU3MTYyYjg4YzBiOTEwZmViNzJmNDg3YTVjN2Y0YjllY2ZlZTI0ZTA3YWEyZDE5OGQxIgorICAgICAgICAgICIxM2NiODQ1ZDgxN2JiNTliYjFkYTI0YTgyYjkxYzJmZTNmYmE4OTUxODNjYmQ5YzBmZTBhYzBiZTY0ZmVmMmUwIgorICAgICAgICAgICIxMzkyMDViMTBiY2FiZmU1YTNhN2E4OTBmYzBmZTc4ZGFiZTFhZGI1YmQxMTQ0ODUwM2NiMGRjZDBiNjhmMTYwIgorICAgICAgICAgICIxOTZlOTYxM2UyOWZiZTlhM2Y5NDA2ZWMyMGMwMzBlODFlYzMwOTY1ZWEwMTljMTdhYTk3MTEwMWMyZTUzMDU5IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuMTEiLAorICAgICAgICAgICI4N2ZiYTk4OWYzY2MxNWFmN2VlNzYxYzA4ODI2NGFiNzcxNTIzOWUwYjhjOGE5ZTQ4ZTExZGI2ODAzMzEzOWMyIgorICAgICAgICAgICJhMjg5ZWE0MjZlYmUyNjlmNWZiNzA3MDkwYWZiODkxYTQ5Y2EwNWMwNTUwZDcyOWJmNGQzN2M4ZjFkYTdhM2NhIgorICAgICAgICAgICIyZjQzODdhNDBiNWY3OTEzYTM4NWY1NWI4MTQxYWYzNmJlOGY1NzE2NjVmODU3ZTc3YTVjOWNjY2U2YmE4ZjJiIgorICAgICAgICAgICJlNDYzMjNjYzU2OTE1NjZmZjRiNmQ3ODU0MzA0YjkzYmJhMWExNzU5ZGZiMTQ0Yzk1NDdjZjJiYzhlYWFlZGFhIgorICAgICAgICAgICI0ZjFkZDI1MjgyM2I3Mjg3Y2E1NTVkMjEwNjA4OWEyNDNlNWRmZThmYzMxZDNmNDYyMjJhNjhhYmFmMzE4MTVhIgorICAgICAgICAgICI5NDdlNTg1N2NmNmEzMzE3MGVjY2I2YTVlMDZkMjNjYzlkNDhlYWY2Y2RiYyIsCisgICAgICAgICAgIjBiNWYxY2ZjMjUzYmFhZDRiOTgzZjhmZTA1MGQ0YTAxN2NjNDY2OTgwZWJkMjNjOWQ1NTM0M2Y1MTA3ZTA0MWUiCisgICAgICAgICAgImI2NTQ3ODEwZmRiYTQ2ODZlNjEwODMyZjkyODJlZGYwNjYwNGIwYWJmZWVhMzgwMTMyNzkxNzc5NDA5OTdiMjgiCisgICAgICAgICAgIjkwMmIxNGRiMzc5ZWViNGY0NDAwNWRmY2IwMDM2ODAzYzlmMTI1YmNlMWYyYTgyYzRkMzAwN2FlOTZiODQ4YjgiCisgICAgICAgICAgIjEzZWM4Yzk3Y2EzZjcxMGE5YWUwZGJjMjhhNTVlMDU4ODFiODU4ZGI1NTcxMjBmMzNjNTljZDQzNjBmOTIwOGMiCisgICAgICAgICAgIjc0YjI3ZWM2NWQxMWVhNDFmYTZhOWVhY2YyYTYxMTY4YWQwN2MyMDk5NDhmMzVhMTYxZjQxZjg3NTQwZWExODIiCisgICAgICAgICAgIjg0YWFiOGQ4Zjk3ODYxMzFmMDQzOTAyYjg5YzE3YTU2MGQ5MDk0NjQ0NzVhMGRmY2U1ODkwOTE4N2NkNmU0NDYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC4xMiIsCisgICAgICAgICAgIjRiNWU4MDMwNWNiZWE5MGQ2MzdmZGIyMzQ3YzZmZWI2Nzg0MmViYWM2ZjkwM2RiNWE3MWViYWFiOGExYzJkZjEiCisgICAgICAgICAgIjEyNjBhMWVjOTA3YjhiNjM0ZDM3ZDM2ZWQ4ZGU3ZDBkYTEwM2JjNGE5ZTkzM2ZiN2JmZWU1OTFjYzkzMzI5OWYiCisgICAgICAgICAgImVlNDYwZjM1NDJjOTc4ZjMwN2FlMDUyNDY0ZjMwNjIwY2ViZjNjOWE5Y2I2YTkwMTUzMGMxZDU2MTNkZjA3NzQiCisgICAgICAgICAgIjMxMmQ0YjVmIiwKKyAgICAgICAgICAiYjZmMDNkMzUzMzUwMDdhNzQ3YWU2ODY3NjBmOWVkYWQwODg5ZDJkNGNhMGNiODhiNjc0MzEyZDMyYzU1MmI3YSIKKyAgICAgICAgICAiNjZjNWE5NTI4YzAxNGI1OGM4NDlmMjMxYTJlMDQ1NjgyZTNiYmIxNGM3Zjk1ZmY4YmRiNjU4N2YyNTExY2M2YiIKKyAgICAgICAgICAiZjkyNDM5NjAwODExMDNkNDdlNzc2OWExNzdlYmRiOTFmMTI4NzNkZWNkNWRjMDY3ZTQ1YzJiMmEwNDRmZmEzZiIKKyAgICAgICAgICAiYmIwNGMyMGEzZGMyMDEzODQwM2ZmMjVjYTBlYmFkOTZlNDg1OWZhNGEwZDczMjg1MmFmMzUwYTI3NTY5OWE5NCIKKyAgICAgICAgICAiYWE2ZTQ3ZjIxN2UzODNlZjhmY2U4ZWI2ZWVkNzgyNmQ3YzYxNThmYzU4ODJlNDYxMzU0NWZhMjZlZWUwYzlmOSIKKyAgICAgICAgICAiM2RlN2ExNjUwOGVhMTYxOTcwNDYwZDZhN2NhNzcwZjhkZThiYTkzY2VhZjM5N2RkZjFmYmNlZTI4MmExNTM3ZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjEzIiwKKyAgICAgICAgICAiZTVhZDYyN2YyNGY0MTE3YTBhNmJlNGE1NWZkYjg4M2Q3NWE2NzMxMjE1NGE3MTg5MjNkMGU4ZjU3MzBhNTRkOCIKKyAgICAgICAgICAiY2E3Yzk3NGU0ZDU5MzM4YmI1NzEzMDVjY2U5OTBjYmJjZmE5MWVhOWI3NzNiODNkN2ExZjBmZmVjNGM2YjE0MyIKKyAgICAgICAgICAiZmUwNTA1OGJjOTBjZTE0NmYzNjljYmFlM2IzZDk5NzA1ZWY0M2QwNzIxYjgiLAorICAgICAgICAgICI3MzI5ODZkNGVkZGI4YTdlOWI2NWRjMDE2ZGQ1NzFlZmFiZWI4NDQ5MGU4OGUzZTczYjYzZTgwZDFjYzg2YTQ1IgorICAgICAgICAgICIyZGVjMjlmYzgxN2U4YWQ0ZWViZGRjZDk3Yzc0NWJjNDc5N2U1NGZlYzZhY2UyOTFiMTk2ZGMyNDY1ZjA4Y2YxIgorICAgICAgICAgICJkZGQyMTdlNzdhYWY3ZDUwOTg3NzkxZGU4MWIwNDExMGQxMWFiODU1ODkwNjYwNGViOWQ5MmIzNWY5MDA3NWFmIgorICAgICAgICAgICI0MjI4MDE0NWIwODhlODc1M2QwZGI3M2NkM2EzMmJkMTljZWEzNTM4ZWU0ZjA5MjczZWY2NmQwNzA1ZDQ1ZWU3IgorICAgICAgICAgICIxMDlmZTU5NWRmNTU3NjdiM2QxMDgxNzIyN2JiNmJhMzk1NzViODVkNmEzNWEyZmZiODhjYjI2N2RiZmMyODJiIgorICAgICAgICAgICJiOGEzZGVlMDJlYzc3YjBjYjgxMzU1NzBmOGE3ZDdhZDA0MzQxYTA4NjRlNjdmZjZmYTAyNTlhMTY5NzRjODZhIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuMTQiLAorICAgICAgICAgICIwM2UzOWJhN2E4MGM3NzE0MTZkODUyNjNlNGQ0M2M2MzkzZGZlNzk2NTIzYjg5ZTBhNDYxNjI4ODgwODAwZDhmIgorICAgICAgICAgICJjMjQzMWI2NjMwNTQwOWUwNmM5NWFlN2ExN2Q1MzRiMWU4NGMxOTlkZmU3MzFkYTk0OWYxNjQ1NzFkZWNjOGIxIgorICAgICAgICAgICI2NmJlYjhkYzA4N2NiNDg2OTk5OGMyIiwKKyAgICAgICAgICAiNjA3NjNiZWFmN2MzZTIyYjNiMjJkYzQ0ZDk0NzgyNmUyM2ZjZjk2YjAxYjc3NDFiMjRiMWI5ZDkzYzA3ZjBjNiIKKyAgICAgICAgICAiNGQzOTY3OThiYjU4OWJkNDI1Mjk1MzY5YmZiODc5YWRkMzQyY2Q3NjI4MGI1N2U2MzU0ZjYxOTVlODQyZmEyYSIKKyAgICAgICAgICAiOTVmMWM0NmYwYjcwNzg2YzMxOGRlOWE1NWE4YWM0NTQ1ZWU3Y2ZmMzk5YzY3OGU1NzhmODkzOWVkNDllODRiYiIKKyAgICAgICAgICAiYTlhYWU1N2MxYTM2ZmNjMzk0ODY0NjZlNDAxMmY5NTg4N2E2ODExMGYxYTQ4NDY3ZTRjMjM0ZjU4MWM1ZWM0NyIKKyAgICAgICAgICAiNzEwNmNjYjNlYzg2MTdiNGJlMjE5MzM3NDQ4ZmU3MmUyNWRlYWI1M2VhY2I5MmU1OTY2Mjk1YjNhNTU3MTIxOSIKKyAgICAgICAgICAiNThkZmU3OWNhNDcyZjc5ZWZiZGExZGNmYmE5ZGJkMGY5NzY3MzJjMDkzYjk4ZmYxOTNjOTAyOTg3YTQyNmMwZiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjE1IiwKKyAgICAgICAgICAiZDRjMjM1OTY3ZDRlODdiNjcxMWUzMmFjNzAzN2EzOTdmOTliMWNhZDk1YTE4ODk0NmE0ODY0MGViNmI3YjAwMyIKKyAgICAgICAgICAiYzMyZjg1YTEyMWIwOWNhNGM4YmVjMGI4Mjc0NGFhZjI3ZDE2NmNlZmM3YTk3MDJhZDMxZGJkMTVlYTJhMTg1ZiIKKyAgICAgICAgICAiNWI5YmE2NDJmOTQ5MDc4YmM2MDliOWE4YTMzNjkyZDcxODQ5MzlkMWY5ZWI0MjZhNmRiNzQwZWFkOTRjZmVhMSIKKyAgICAgICAgICAiN2ZlYjA2MThkNzRkOWE2NTE2ODhlOTBiOWJiNzA1MjQzMDVkNjE4Yzg4YTU1ZjQ1NDQ1MGUwYzU4NWQzYThkOSIKKyAgICAgICAgICAiODE2NTgxOGYzNjNiMjBhMjUyNDkyZTE1MTI1ODU4OTBhOGMzMjBhNzE4NzE1OGNlMGQ0ZTRiZTFjNzAxZjhhZiIKKyAgICAgICAgICAiZGM1NDVjNGRhYjg2OGQ0MWQ0MWMyMWMyY2IxZjY3ZGY3OTUzZDVmNzI2MWM1MDkyYmJjNDMzMmFjNTU3NWI2ZSIKKyAgICAgICAgICAiMGUwMzE0OWMwNDBjM2UyMDFjNzkxNWFjMjAyMjg4NGVhMGU2YzIxNDAzZjBiNDRlMGY3MTM0M2ZjOTExMWE3ZCIKKyAgICAgICAgICAiYjJmNWU5ZTUwOWMyZDg5Nzg0ZWZiMjJjMzFlODE2NWUwZTkzNmMiLAorICAgICAgICAgICI0NjlmMDhiZGQwM2I3NTY0MGU4YTQ0YTA3Y2E4ZGU0YmFjZjgzMzFmZTM5YzQ0ZDIzYWE3YjU4MWRjM2YwMGY1IgorICAgICAgICAgICI0MjFiNWMxNzJkMGZmY2U5MTQ5N2QzZDRiMTA0ZjU2YTk4ZWM5NGY3MTkyNzFlNThiNDNlZmJkODc2ZTFjMTMxIgorICAgICAgICAgICJmYTk3ODIwNzI4YTU1Njc1NTUyMTRjZDk0YTE4ZmNjZTVjMmY1M2IxOWQxZjNjNzNkMDlmN2JlMTgwOTczOGIwIgorICAgICAgICAgICIzY2U3NjllNDU0ZWQ0Y2JlZGNhZjQzYzQ4YmQzOWRmMmY4YmI2M2I4ZmM0ZDBkNGQ1YjIwNGZjMjIwMDEzYTY2IgorICAgICAgICAgICI4YzE5Zjk3NTAyOTNhNDcxMTU4Mzg4MjY0NWRiZjNhYzRmODM5YjZmZDFjZjNiNWVlOGQ3MzRlMWRhMzc0ZDkxIgorICAgICAgICAgICJkODllYTMxOGU5MTgzNDgzZjRhMDlhOTM1MTRhZjU0Zjc1ZDBhMzU2NTFiMjQwZjc5ZjIwYTI5NzdkMTQ1NzhjIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuMTYiLAorICAgICAgICAgICJkMDZhZGNhNGMyMGYwZDlmN2JlNjVhMjAzMjdjMjk0NzU2ZTNlZGQ5ZTFkMzlkMGY5NWM3OWRmMWJhYzMzNDM1IgorICAgICAgICAgICI5ZmFiOTQzZDg1NDVhM2JhYTM3YTU5Mjk1YzU4YjIzNzc1MmI4ZGU3ZDQzMjNjNTZlOWQ3Y2IwYzdmODMxZDU0IgorICAgICAgICAgICI5Y2IzODcxOWEwODFkNThiNjA1N2VjYjc0MjllMmNhNjA3Y2QxMzA2MzU1OTQzMTU5ZGM5MjRhZDNlOWNiMTNkIgorICAgICAgICAgICIwZTcxZWFkY2IwMDVlMTg0YzBjMmNlYWFmOWQ3NGExYzFkZjZmZWMxOGM5N2EwIiwKKyAgICAgICAgICAiOWZkOTUyNWMxNWM4NDNiODA2OWMxNWYyNmQzZjk1MjQ2YWYzN2E4YjhlNmI5MzlkZGY1YjM4MjhjZGI2MmNmYSIKKyAgICAgICAgICAiMzczYTkyZWNjNDEzODRhODc3Y2FhMDkwYWExM2M4NDdlZjI4MjlkZGNhMTQxNDIwMTQwMjE0ODE1NTA1NTBkYSIKKyAgICAgICAgICAiYTI5ZGUyYWI3MDAxYjg1NWM5MzQyZjBjOTBiZmE2YzMzNDliMmMzOTYyMTNlZjcwY2JkODRiYjRjZTZlZjU4YiIKKyAgICAgICAgICAiMTc2ZTlmNmZjY2RiNmU0NmNhYzM0MTE0YTFiOWY5OGE4YTMyNzU3YmY3NWQ2YmZjNDU1YWRlNmEwMWY5NjA1MCIKKyAgICAgICAgICAiMWI3OWY1ZmJlM2IzOGZjYTAzNDY0ZTQzZDQ5NjYzYzc5ZmY2NGQzMjk4MWU0NDgwY2RmNDJkOGFmOGRhYTdmMSIKKyAgICAgICAgICAiMmI4MWE1YWE5NjVmYWRhYTNjMDNiN2ZmMjJkM2NmZGZmZTNjYWRmNGQ1OTg5ZWQxNGM5NjlhNmU4YzlhMWUwNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjE3IiwKKyAgICAgICAgICAiM2E2MzAyZDc5ZTI2YjU1NWM3N2RlOTJhOTFlMDc4NTcxZWQxNTcyZmZjM2U0ZmM5MDVjZTUzZjEwNGIzMjIwMCIKKyAgICAgICAgICAiOTU3ZWIyYjVlNWYzZTNmY2JiYzE2MmY5ZTUyNWM3MDZmMWRkMDRmY2FiNTE2YmMxOGE4ZTRmODhhOTM4YTViMiIKKyAgICAgICAgICAiNTY4NWQ3OGRkYzlmMTA0ZTQ5YmY1Y2EwYjY1YTRiOTY1N2UwNGE3MWZiNTBlYjRhYWMyMmMwYmI5M2Y2MGNhYyIKKyAgICAgICAgICAiOTQ4M2YxNzcxMzU1M2RjYTRiMzFlMjcyN2IzMmUzNTBmZTIwNGNlY2Q5YTdjZGE0ZGFkYTJlODdmZjZmMmI3MyIKKyAgICAgICAgICAiZTdiMDc4MWUyMTJmMzRmZTM2MzYxMGYwMThhNzk5MzczNzU1YWI0NjY2N2JiNjUyNWQ3ZGM3YTBlODI4OTAxNyIKKyAgICAgICAgICAiZjU0ODdmYTY5MmVmMmZkZGNlMzhhZDNmNDUzMGRlN2VlNTA1NjY3MGE3MzVkMzc4ZDFlZmM5OTQ4MWY4YzlmYiIKKyAgICAgICAgICAiZWVhOTlmNTY2YTBiNmUyODQ2MjY0NGE2ZDljNmNjODhmYiIsCisgICAgICAgICAgImI3NTdmYTc0N2M1Yzg3Njc2NmYzNThhY2JmYzdlN2I4MDU5NjM2OGQwZDg2Mjk1MGU1NTVmNDcxNjQ2ZjY0MGUiCisgICAgICAgICAgIjg1MWQ2MTJhNTU2ZjU1YTc0YTMyOTI0MjllNGMxNGY3OGJhM2ViYmQ5Njg3ZjMwOGRlZGIzY2ZlZDcxZjRhOWQiCisgICAgICAgICAgImQyNmZhNTEyMmY3ZjcxOTRhZWI2M2JjOGI3NWMzNDMxODcxMTVhMWRiZDM1OTU5MGY3ZmYzODYyYjcwODg1YWYiCisgICAgICAgICAgIjFjYTkzNGI4Y2ViYzJjYzllNjQ3MjUzZmQxMzI3YTJlZDQyNDRkYzhmNTg1NTVhNjg5N2NhMzIyOWM4MDFlN2IiCisgICAgICAgICAgImY2MjhmNTI1ZTZjOTQ4ODA0ZDBiMWI2ZGJjZDc5MDJhY2RlN2EyNWJhNTkxZDg4NmUyOGRhYThkZWQ1ZWU0MDEiCisgICAgICAgICAgImUzNGU2NDEyZjFlNjQ0ZWVjMTJhZTk0MjYxOTA2YTE3MjYxMWRkNWE5ODY3Nzg5YzQxOTAzNDY4ODQyOWU5MDYiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNC4xOCIsCisgICAgICAgICAgIjlkYzdjZTFkMDJjYWRjZjEwZGYxMTEwNDU2YjhhN2E1ZWE0Mzc2YjI3ZThiZjhjYzhkYjgxMDQ5ZmRhM2ZiZDAiCisgICAgICAgICAgImRiOGEzZDBmNmJkNzQ4NmI4ZDg0YmY5ZmZkNGI2NDE3NTJkZjdlZGY1MDg2NWU4ZTU4YWQ0OWY3MjQwZTQ3ZDMiCisgICAgICAgICAgImZjOTg1ZWRiNTk2ZGFiZmUwMTcyMmEyMjc3NjAzODNjZTI0ZDRhMDVkOGIwNmVmNWI5NmYxMTdkODEiLAorICAgICAgICAgICIwNWE5NWUxMWI1YmZiMDFkY2ZkZTNlZmE5ZjMxM2Q4MWJiMGRmZDQ2ZGU2M2IwNjU4MDU2YzUzYWY3YWQ5ZTg5IgorICAgICAgICAgICI0MzhiN2RlNzhmZjhlYTg4ZDA3MmIxNzQ5YTUyOWYxY2M5Y2YyY2YzMmU1YWI3MjBlMDY5YjQ5MDZkMjgyYTAzIgorICAgICAgICAgICJkZDc4ZDFiM2NhMmEzZjkyNWJmNTFjNzQ5MWI3M2JhMGJmNTRkNTBkOTcxZGU1YjI3NzI2ZDhmYjNlZTI3NzM0IgorICAgICAgICAgICI5N2RmMzU0OTUxN2VlZGNkOWRlNjhkOTBkZjM1ZDNmMDUwODExNTFhZGFiNTM5NzM4NWFiZWVhNzJiNjliZDBkIgorICAgICAgICAgICJlMThkY2VlOWEyYmUwMGU5MWEwMzI0MDNiMWY4MWJiYzBhZTczMWM2YzBkOWNmZGQwNmMzMzFlZDg5ZDdkZTFkIgorICAgICAgICAgICJlMWRmNDZjZjA5Y2U1M2RmMTU5N2ZiNjk5NDY4MWM3ZmJlOTRjOWIwOGU1MGFhMWIxMjQxOTYwMjk4N2YzN2RkIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTQuMTkiLAorICAgICAgICAgICI4N2E2NDU2MTFiYjE5MTg1M2Y0ZmQ5Yjc0MGIyZGU0YzE2M2U3NTYyYjExNzYyNjMzZTcyZGZiNmY2YmU3ZWZiIgorICAgICAgICAgICI5MDQxYTk2NTgyOTQzYWIyMDE4MzkxYzA1YWRmYWI0NjRkZDZlMzNmOTYwZGRiZjNiMTdhYzYyYmI3OGFmYzFjIgorICAgICAgICAgICI2YTQ1Mzk2YzA5MDg3MDdjNjIzNjEyNTVjYmYwOWJhZDk1OWIzMTMzZGE0OGQ1MzJiYTdlZjFkMjBmYjY1NzJhIgorICAgICAgICAgICIxZjBlZDZmMmM2ZTFiZWMxYjE3Y2MzMTliYWY3MmExOThhYTAwMWI4M2Q0ZTk4NjljMzQwOTBmMjI5YTljN2YxIgorICAgICAgICAgICI0MmE3NGU4NWFiM2VkNTFjNjlhYzE1ZmFiNGFiZTQ2NzE1NzNjZjVhZDJiNThlNzhhOTQ0ZWRjY2VhYzVlZTU4IgorICAgICAgICAgICJiZmNlNjZmNDBhYWMyYWJlNGU1ZmEwNzJkZDBmNjY0ZmFjODExYWVmMDg0MjEwZTU2NDFiOWNkMDhjODcyNGY0IgorICAgICAgICAgICJiNDFlZWQxZDlkNGExODc3ODA0NjU5N2JkMWEyN2JiYmMwNTZjMTVlNDNjMDM4ZWYzNzViNDM1ZTczYTdkMzJmIgorICAgICAgICAgICIwMTUwMTZiNzgyMzVjZTc1YTdiNzYyMDQ5OTY4ZTk5MzIyNTNlNDJjYTk3NmM4ZDhkY2ExYmIyZGJmIiwKKyAgICAgICAgICAiYjg4MDYyMjZmYmQzZDk3Yjc5ZjBkZDFkOGNmOWEyMzVlNTFiOTRiN2UyMjNlYzY4MzMyZDY4NmVkMzMxM2VkMSIKKyAgICAgICAgICAiYmVmNjg4NzAyM2FmN2E1Yzk5ZGYwMzY4YTM0OWM2YTU5NDc5NWI2MjM1MzYxMDEzNDI2OTBkZWI1ZmFkOTAyMyIKKyAgICAgICAgICAiNzgyZjZkYmUxNjQzYTQ1NjE4NTc0ZjE2NzI4MTEyYTdlMGVmOWY1ODY1NmY2YWRiZjQwMDQwOWY0YWE1MDEzYyIKKyAgICAgICAgICAiMTU5YTM2OGNhNTliZGU2YjM5MThkZmUxZDgwMmZhNmNmYTA2YzljYTMxYWNhNzhjYjI2M2M4ZWQ5MTdhZjlhOSIKKyAgICAgICAgICAiYTc5NWQ1ZTJjNDAxZTcyOTk2NGNmN2FjMjhjY2RiMzZkOTU5ZWQ3ZmQ5YWYxYzQ3MDk3YjYyNTVjNjRlMWIxNiIKKyAgICAgICAgICAiZjIxZDg2ODcwNDU1ZDVmMGJmOTAxZmNjNjhjMzRiNzJjMWJlZTcyZTZiOGM0ZTM2YWUzMzk5NmM3YTU5ZDA5YSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE0LjIwIiwKKyAgICAgICAgICAiMDMyZTI4M2U1OTZlODdmYWE2Y2ZjZmI4ZmEwNGRmNmE2MWU2MTFkZmU3M2JiZjY2OGVlNjdiNDk2YmZiMGZmYiIKKyAgICAgICAgICAiN2Y5ZGM5MzFhOThiY2VkYjI1IiwKKyAgICAgICAgICAiYjlmZGMwM2RjMTk5NzA3MTNjNGExN2U4N2U3ZWJiNWYxMzUwNWQ1OWNiYjIyYmE3MmU5ZmYxNmJkZjhiNjU5YyIKKyAgICAgICAgICAiMzMzMGE5M2RjYzA5MmE1ZDM4NWIyZDVlMTUzNDAwMzE0NmMwNTBiN2RkYzRmNzU2NTY5ZGEyMTE4MDE1ODIyNiIKKyAgICAgICAgICAiNjExOWY1NTk5YjFlNjVlOGViZWE2YmM5NjQ0MmVlMTJhY2I5NmM2ZGJhMDgzZTkyMTA5NGRhOWM5ZWNmNWFmYSIKKyAgICAgICAgICAiYTU0YjdmZGU3YTBjYWUzZmRmZTRkMjUxOTMzYTUyZjAyZGMyM2UxYjMyMTRjNjgzZTE5YWY0NmUxOGM3NDk1NiIKKyAgICAgICAgICAiZGM2YWIzNTAyZDQ2Y2FhYzNjYjI2YjcwN2NkYzMwMjViNmRlNGU4MzU0M2I5NTg0NWI0YTE1OTc2MDc3MGE0YiIKKyAgICAgICAgICAiZDA5ZTQ2MzVhMDRlMjE3ZDY2NWM5NTk0ODc5ZjM4MWQ3MTEwMDkzNGZhZGE2MWM3Y2MyMmI4ZDJmZjhlYjM1YSIKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgIkEgMjA0OC1iaXQgUlNBIGtleSBwYWlyIiwKKyAgICAgICJkZjI3MWZkMjVmODY0NDQ5NmIwYzgxYmU0YmQ1MDI5N2VmMDk5YjAwMmE2ZmQ2NzcyN2ViNDQ5Y2VhNTY2ZWQ2IgorICAgICAgImEzOTgxYTcxMzEyYTE0MWNhYmM5ODE1YzEyMDllMzIwYTI1YjMyNDY0ZTk5OTlmMThjYTEzYTlmZDM4OTI1NTgiCisgICAgICAiZjllMGFkZWZkZDM2NTBkZDIzYTNmMDM2ZDYwZmUzOTg4NDM3MDZhNDBiMGI4NDYyYzhiZWUzYmNlMTJmMWYyOCIKKyAgICAgICI2MGMyNDQ0Y2RjNmE0NDQ3NmE3NWZmNGFhMjQyNzNjY2JlM2JmODAyNDg0NjVmOGZmOGMzYTdmMzM2N2RmYzBkIgorICAgICAgImY1YjY1MDlhNGY4MjgxMWNlZGQ4MWNkYWFhNzNjNDkxZGE0MTIxNzBkNTQ0ZDRiYTk2Yjk3ZjBhZmM4MDY1NDkiCisgICAgICAiOGQzYTQ5ZmQ5MTA5OTJhMWYwNzI1YmUyNGY0NjVjZmU3ZTBlYWJmNjc4OTk2YzUwYmM1ZTc1MjRhYmY3M2YxNSIKKyAgICAgICJlNWJlZjdkNTE4Mzk0ZTMxMzhjZTQ5NDQ1MDZhYWFhZjNmOWIyMzZkY2FiOGZjMDBmODdhZjU5NmZkYzNkOWQ2IgorICAgICAgImM3NWNkNTA4MzYyZmFlMmNiZWRkY2M0Yzc0NTBiMTdiNzc2YzA3OWVjY2ExZjI1NjM1MWE0M2I5N2RiZTIxNTMiLAorICAgICAgIjAxMDAwMSIsCisgICAgICAiNWJkOTEwMjU3ODMwZGNlMTc1MjBiMDM0NDFhNTFhOGNhYjk0MDIwYWM2ZWNjMjUyYzgwOGYzNzQzYzk1YjdjOCIKKyAgICAgICIzYjhjOGFmMWE1MDE0MzQ2ZWJjNDI0MmNkZmI1ZDcxOGUzMGE3MzNlNzFmMjkxZTRkNDczYjYxYmZiYTZkYWNhIgorICAgICAgImVkMGE3N2JkMWYwOTUwYWUzYzkxYThmOTAxMTE4ODI1ODllMWQ2Mjc2NWVlNjcxZTdiYWVlYTMwOWY2NGQ0NDciCisgICAgICAiYmJjZmE5ZWExMmRjZTA1ZTllYTg5MzliYzVmZTYxMDg1ODEyNzljOTgyYjMwODc5NGIzNDQ4ZTdmN2I5NTIyOSIKKyAgICAgICIyZGY4OGM4MGNiNDAxNDJjNGI1Y2Y1ZjhkZGFhMDg5MTY3OGQ2MTBlNTgyZmNiODgwZjBkNzA3Y2FmNDdkMDlhIgorICAgICAgIjg0ZTE0Y2E2NTg0MWU1YTNhYmM1ZTlkYmE5NDA3NWE5MDg0MzQxZjBlZGFkOWI2OGUzYjhlMDgyYjgwYjZlNmUiCisgICAgICAiOGEwNTQ3YjQ0ZmI1MDYxYjZhOTEzMTYwM2E1NTM3ZGRhYmQwMWQ4ZTg2M2Q4OTIyZTlhYTNlNGJmYWVhMGIzOSIKKyAgICAgICJkNzkyODNhZDJjYmM4YTU5Y2NlN2E2ZWNmNGU0YzgxZWQ0YzY1OTFjODA3ZGVmZDcxYWIwNjg2NmJiNWU3NzQ1IiwKKyAgICAgIHsKKyAgICAgICAgeworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS4xIiwKKyAgICAgICAgICAiZjQ1ZDU1ZjM1NTUxZTk3NWQ2YThkYzdlYTlmNDg4NTkzOTQwY2M3NTY5NGEyNzhmMjdlNTc4YTE2M2Q4MzliMyIKKyAgICAgICAgICAiNDA0MDg0MTgwOGNmOWM1OGM5Yjg3MjhiZjVmOWNlOGVlODExZWE5MTcxNGY0N2JhYjkyZDBmNmQ1YTI2ZmNmZSIKKyAgICAgICAgICAiZWE2Y2Q5M2I5MTBjMGEyYzk2M2U2NGViMTgyM2YxMDI3NTNkNDFmMDMzNTkxMGFkM2E5NzcxMDRmMWFhZjZjMyIKKyAgICAgICAgICAiNzQyNzE2YTk3NTVkMTFiOGVlZDY5MDQ3N2Y0NDVjNWQyNzIwOGIyZTI4NDMzMGZhM2QzMDE0MjNmYTdmMmQwOCIKKyAgICAgICAgICAiNmUwYWQwYjg5MmI5ZGI1NDRlNDU2ZDNmMGRhYjg1ZDk1M2MxMmQzNDBhYTg3M2VkYTcyN2M4YTY0OWRiN2ZhNiIKKyAgICAgICAgICAiMzc0MGUyNWU5YWYxNTMzYjMwN2U2MTMyOTk5MzExMGU5NTE5NGUwMzkzOTljMzgyNGQyNGM1MWYyMmIyNmJkZSIKKyAgICAgICAgICAiMTAyNGNkMzk1OTU4YTJkZmViNDgxNmE2ZThhZGVkYjUwYjFmNmI1NmQwYjMwNjBmZjBmMWM0Y2IwZDBlMDAxZCIKKyAgICAgICAgICAiZDU5ZDczYmUxMiIsCisgICAgICAgICAgImI3NWE1NDY2YjY1ZDBmMzAwZWY1MzgzM2YyMTc1YzhhMzQ3YTM4MDRmYzYzNDUxZGM5MDJmMGI3MWY5MDgzNDUiCisgICAgICAgICAgIjllZDM3YTUxNzlhM2I3MjNhNTNmMTA1MTY0MmQ3NzM3NGM0YzZjOGRiYjFjYTIwNTI1ZjVjOWYzMmRiNzc2OTUiCisgICAgICAgICAgIjM1NTZkYTMxMjkwZTIyMTk3NDgyY2ViNjk5MDZjNDZhNzU4ZmIwZTc0MDliYTgwMTA3N2QyYTBhMjBlYWU3ZDEiCisgICAgICAgICAgImQ2ZDM5MmFiNDk1N2U4NmI3NmYwNjUyZDY4YjgzOTg4YTc4ZjI2ZTExMTcyZWE2MDliZjg0OWZiYmQ3OGFkN2UiCisgICAgICAgICAgImRjZTIxZGU2NjJhMDgxMzY4YzA0MDYwN2NlZTI5ZGIwNjI3MjI3ZjQ0OTYzYWQxNzFkMjI5M2I2MzNhMzkyZTMiCisgICAgICAgICAgIjMxZGNhNTRmZTMwODI3NTJmNDNmNjNjMTYxYjQ0N2E0YzY1YTY4NzU2NzBkNWY2NjAwZmNjODYwYTFjYWViMGEiCisgICAgICAgICAgIjg4ZjhmZGVjNGU1NjQzOThhNWM0NmM4N2Y2OGNlMDcwMDFmNjIxM2FiZTBhYjU2MjVmODdkMTkwMjVmMDhkODEiCisgICAgICAgICAgImRhYzdiZDQ1ODZiYzkzODIxOTFmNmQyODgwZjYyMjdlNWRmM2VlZDIxZTc3OTJkMjQ5NDgwNDg3ZjM2NTUyNjEiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS4yIiwKKyAgICAgICAgICAiYzE0YjRjNjA3NWIyZjlhYWQ2NjFkZWY0ZWNmZDNjYjkzM2M2MjNmNGU2M2JmNTM0MTBkMmYwMTZkMWFiOThlMiIKKyAgICAgICAgICAiNzI5ZWNjZjgwMDZjZDhlMDgwNTA3MzdkOTVmZGJmMjk2YjY2ZjViOTc5MmE5MDI5MzZjNGY3YWM2OWY1MTQ1MyIKKyAgICAgICAgICAiY2U0MzY5NDUyZGMyMmQ5NmYwMzc3NDgxMTQ2NjIwMDBkZDljZDNhNWUxNzlmNGUwZjgxZmE2YTAzMTFjYTFhZSIKKyAgICAgICAgICAiZTY1MTlhMGY2M2NlYzc4ZDI3YmI3MjYzOTNmYjdmMWY4OGNkZTdjOTdmOGE2NmNkNjYzMDEyODFkYWMzZjNhNCIKKyAgICAgICAgICAiMzMyNDhjNzVkNmMyZGNkNzA4YjZhOTdiMGEzZjMyNWUwYjI5NjRmOGE1ODE5ZTQ3OWIiLAorICAgICAgICAgICJhZmE3MzQzNDYyYmVhMTIyY2MxNDlmY2E3MGFiZGFlNzk0NDY2NzdkYjUzNzM2NjZhZjdkYzMxMzAxNWY0ZGU3IgorICAgICAgICAgICI4NmU2ZTM5NDk0NmZhZDNjYzBlMmIwMmJlZGJhNTA0N2ZlOWUyZDdkMDk5NzA1ZTRhMzlmMjg2ODMyNzljZjBhIgorICAgICAgICAgICJjODVjMTUzMDQxMjI0MmMwZTkxODk1M2JlMDAwZTkzOWNmM2JmMTgyNTI1ZTE5OTM3MGZhNzkwN2ViYTY5ZDVkIgorICAgICAgICAgICJiNDYzMTAxN2MwZTM2ZGY3MDM3OWI1ZGI4ZDRjNjk1YTk3OWE4ZTYxNzMyMjQwNjVkN2RjMTUxMzJlZjI4Y2Q4IgorICAgICAgICAgICIyMjc5NTE2MzA2M2I1NGM2NTExNDFiZTg2ZDM2ZTM2NzM1YmM2MWYzMWZjYTU3NGU1MzA5ZjNhM2JiZGY5MWVmIgorICAgICAgICAgICJmMTJiOTllOWNjMTc0NGYxZWU5YTFiZDIyYzViYWQ5NmFkNDgxOTI5MjUxZjAzNDNmZDM2YmNmMGFjZGU3ZjExIgorICAgICAgICAgICJlNWFkNjA5Nzc3MjEyMDI3OTZmZTA2MWY5YWRhMWZjNGM4ZTAwZDYwMjJhODM1NzU4NWZmZTlmZGQ1OTMzMWEyIgorICAgICAgICAgICI4YzRhYTMxMjE1ODhmYjZjZjY4Mzk2ZDhhYzA1NDY1OTk1MDBjOTcwODUwMGE1OTcyYmQ1NGY3MmNmOGRiMGM4IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuMyIsCisgICAgICAgICAgImQwMjM3MWFkN2VlNDhiYmZkYjI3NjNkZTdhODQzYjk0MDhjZTVlYjVhYmY4NDdjYTNkNzM1OTg2ZGY4NGU5MDYiCisgICAgICAgICAgIjBiZGJjZGQzYTU1YmE1NWRkZTIwZDQ3NjFlMWEyMWQyMjVjMWExODZmNGFjNGIzMDE5ZDNhZGY3OGZlNjMzNDYiCisgICAgICAgICAgIjY3ZjU2ZjcwYzkwMWEwYTI3MDBjNmYwZDU2YWRkNzE5NTkyZGM4OGY2ZDIzMDZjNzAwOWY2ZTdhNjM1YjRjYjMiCisgICAgICAgICAgImE1MDJkZmU2OGRkYzU4ZDAzYmUxMGExMTcwMDA0ZmU3NGRkM2U0NmI4MjU5MWZmNzU0MTRmMGM0YTAzZTYwNWUiCisgICAgICAgICAgIjIwNTI0ZjI0MTZmMTJlY2E1ODlmMTExYjc1ZDYzOWM2MWJhYTgwY2FmZDA1Y2YzNTAwMjQ0YTIxOWVkOWNlZDkiCisgICAgICAgICAgImYwYjEwMjk3MTgyYjY1M2I1MjZmNDAwZjI5NTNiYTIxNGQ1YmNkNDc4ODQxMzI4NzJhZTkwZDRkNmIxZjQyMTUiCisgICAgICAgICAgIjM5ZjlmMzQ2NjJhNTZkYzBlN2I0YjkyM2I2MjMxZTMwZDI2NzY3OTc4MTdmN2MzMzdiNWFjODI0YmE5MzE0M2IiCisgICAgICAgICAgIjMzODFmYTNkY2UwZTZhZWJkMzhlNjc3MzUxODdiMWViZDk1YzAyIiwKKyAgICAgICAgICAiM2JhYzYzZjg2ZTNiNzAyNzEyMDMxMDZiOWM3OWFhYmQ5ZjQ3N2M1NmU0ZWU1OGE0ZmNlNWJhZjJjYWI0OTYwZiIKKyAgICAgICAgICAiODgzOTFjOWMyMzY5OGJlNzVjOTlhZWRmOWUxYWJmMTcwNWJlMWRhYzMzMTQwYWRiNDhlYjMxZjQ1MGJiOWVmZSIKKyAgICAgICAgICAiODNiN2I5MGRiN2YxNTc2ZDMzZjQwYzFjYmE0YjhkNmIxZDMzMjM1NjRiMGYxNzc0MTE0ZmE3YzA4ZTZkMWUyMCIKKyAgICAgICAgICAiZGQ4ZmJiYTliNmFjN2FkNDFlMjZiNDU2OGY0YThhYWNiZmQxNzhhOGY4ZDJjOWQ1ZjViODgxMTI5MzVhOGJjOSIKKyAgICAgICAgICAiYWUzMmNkYTQwYjhkMjAzNzU1MTA3MzUwOTY1MzY4MThjZTJiMmRiNzFhOTc3MmM5YjBkZGEwOWFlMTAxNTJmYSIKKyAgICAgICAgICAiMTE0NjYyMThkMDkxYjUzZDkyNTQzMDYxYjcyOTRhNTViZTgyZmYzNWQ1YzMyZmEyMzNmMDVhYWFjNzU4NTAzMCIKKyAgICAgICAgICAiN2VjZjgxMzgzYzExMTY3NDM5N2IxYTFiOWQzYmY3NjEyY2NiZTViYWNkMmIzOGYwYTk4Mzk3YjI0YzgzNjU4ZiIKKyAgICAgICAgICAiYjZjMGI0MTQwZWYxMTk3MGM0NjMwZDQ0MzQ0ZTc2ZWFlZDc0ZGNiZWU4MTFkYmY2NTc1OTQxZjA4YTY1MjNiOCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjQiLAorICAgICAgICAgICIyOTAzNTU4NGFiN2UwMjI2YTllYzRiMDJlOGRjZjEyNzJkYzlhNDFkNzNlMjgyMDAwN2IwZjZlMjFmZWNjZDViIgorICAgICAgICAgICJkOWRiYjllZjg4Y2Q2NzU4NzY5ZWUxZjk1NmRhN2FkMTg0NDFkZTZmYWI4Mzg2ZGJjNjkzIiwKKyAgICAgICAgICAiMjhkOGUzZmNkNWRkZGIyMWZmYmQ4ZGYxNjMwZDczNzdhYTI2NTFlMTRjYWQxYzBlNDNjY2M1MmY5MDdmOTQ2ZCIKKyAgICAgICAgICAiNjZkZTcyNTRlMjdhNmMxOTBlYjAyMmVlODllY2Y2MjI0YjA5N2I3MTA2OGNkNjA3MjhhMWFlZDY0YjgwZTU0NSIKKyAgICAgICAgICAiN2JkMzEwNmRkOTE3MDZjOTM3Yzk3OTVmMmIzNjM2N2ZmMTUzZGMyNTE5YThkYjliZGYyYzgwNzQzMGM0NTFkZSIKKyAgICAgICAgICAiMTdiYmNkMGNlNzgyYjNlOGYxMDI0ZDkwNjI0ZGVhN2YxZWVkYzc0MjBiN2U3Y2FhNjU3N2NlZjQzMTQxYTcyNiIKKyAgICAgICAgICAiNDIwNjU4MGU0NGExNjdkZjVlNDFlZWEwZTY5YTgwNTQ1NGM0MGVlZmMxM2Y0OGU0MjNkN2EzMmQwMmVkNDJjMCIKKyAgICAgICAgICAiYWIwM2QwYTdjZjcwYzU4NjBhYzkyZTAzZWUwMDViNjBmZjM1MDM0MjRiOThjYzg5NDU2OGM3YzU2YTAyMzM1NSIKKyAgICAgICAgICAiMWNlYmU1ODhjZjhiMDE2N2I3ZGYxM2FkY2FkODI4Njc2ODEwNDk5YzcwNGRhN2FlMjM0MTRkNjllM2MwZDJkYiIKKyAgICAgICAgICAiNWRjYmMyNjEzYmMxMjA0MjFmOWUzNjUzYzVhODc2NzI5NzY0M2M3ZTA3NDBkZTAxNjM1NTQ1M2Q2Yzk1YWU3MiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjUiLAorICAgICAgICAgICJiZGEzYTFjNzkwNTllYWU1OTgzMDhkM2RmNjA5IiwKKyAgICAgICAgICAiYTE1NjE3NmNiOTY3NzdjN2ZiOTYxMDVkYmQ5MTNiYzRmNzQwNTRmNjgwN2M2MDA4YTFhOTU2ZWE5MmMxZjgxYyIKKyAgICAgICAgICAiYjg5N2RjNGI5MmVmOWY0ZTQwNjY4ZGM3YzU1NjkwMWFjYjZjZjI2OWZlNjE1YjBmYjcyYjMwYTUxMzM4NjkyMyIKKyAgICAgICAgICAiMTRiMGU1ODc4YTg4YzJjNzc3NGJkMTY5MzliNWFiZDgyYjQ0MjlkNjdiZDdhYzhlNWVhN2ZlOTI0ZTIwYTZlYyIKKyAgICAgICAgICAiNjYyMjkxZjI1NDhkNzM0ZjY2MzQ4NjhiMDM5YWE1ZjlkNGQ5MDZiMmQwY2I4NTg1YmY0Mjg1NDdhZmM5MWM2ZSIKKyAgICAgICAgICAiMjA1MmRkY2QwMDFjM2VmOGM4ZWVmYzNiNmIyYTgyYjZmOWM4OGM1NmYyZTJjM2NiMGJlNGI4MGRhOTVlYmEzNyIKKyAgICAgICAgICAiMWQ4YjVmNjBmOTI1Mzg3NDNkZGJiNWRhMjk3MmM3MWZlN2I5ZjFiNzkwMjY4YTBlNzcwZmM1ZWI0ZDVkZDg1MiIKKyAgICAgICAgICAiNDdkNDhhZTJlYzNmMjYyNTVhMzk4NTUyMDIwNmExZjI2OGU0ODNlOWRiYjFkNWNhYjE5MDkxNzYwNmRlMzFlNyIKKyAgICAgICAgICAiYzUxODJkOGYxNTFiZjQxZGZlY2NhZWQ3Y2RlNjkwYjIxNjQ3MTA2YjQ5MGM3MjlkNTRhOGZlMjgwMmE2ZDEyNiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjYiLAorICAgICAgICAgICJjMTg3OTE1ZTRlODdkYTgxYzA4ZWQ0MzU2YTBjY2VhYzFjNGZiNWMwNDZiNDUyODFiMzg3ZWMyOGYxYWJmZDU2IgorICAgICAgICAgICI3ZTU0NmIyMzZiMzdkMDFhZTcxZDNiMjgzNDM2NWQzZGYzODBiNzUwNjFiNzM2YjAxMzBiMDcwYmU1OGFlOGE0IgorICAgICAgICAgICI2ZDEyMTY2MzYxYjYxM2RiYzQ3ZGZhZWI0Y2E3NDY0NTZjMmU4ODgzODU1MjVjY2E5ZGQxYzNjN2E5YWRhNzZkIgorICAgICAgICAgICI2YyIsCisgICAgICAgICAgIjljYWI3NDE2MzYwODY2OWY3NTU1YTMzM2NmMTk2ZmUzYTBlOWU1ZWIxYTMyZDM0YmI1Yzg1ZmY2ODlhYWFiMGUiCisgICAgICAgICAgIjNlNjU2NjhlZDNiMTE1M2Y5NGViM2Q4YmUzNzliOGVlZjAwN2M0YTAyYzcwNzFjZTMwZDhiYjM0MWU1OGM2MjAiCisgICAgICAgICAgImY3M2QzN2I0ZWNiZjQ4YmUyOTRmNmM5ZTBlY2I1ZTYzZmVjNDFmMTIwZTU1NTNkZmEwZWJlYmJiNzI2NDBhOTUiCisgICAgICAgICAgIjM3YmFkY2I0NTEzMzAyMjlkOWY3MTBmNjJlM2VkOGVjNzg0ZTUwZWUxZDkyNjJiNDI2NzEzNDAwMTFkN2QwOTgiCisgICAgICAgICAgImM2ZjI1NTdiMjEzMWZhOWJkMDI1NDYzNjU5N2U4OGVjYjM1YTI0MGVmMGZkODU5NTcxMjRkZjgwODBmZWUxZTEiCisgICAgICAgICAgIjQ5YWY5Mzk5ODllODZiMjZjODVhNTg4MWZhZTg2NzNkOWZkNDA4MDBkZDEzNGViOWJkYjY0MTBmNDIwYjBhYTkiCisgICAgICAgICAgIjdiMjBlZmNmMmViMGM4MDdmYWViODNhM2NjZDliNTFkNDU1M2U0MWRmYzBkZjZjYTgwYTFlODFkYzIzNGJiODMiCisgICAgICAgICAgIjg5ZGQxOTVhMzhiNDJkZTRlZGM0OWQzNDY0NzhiOWYxMWYwNTU3MjA1ZjViMGJkN2ZmZTljODUwZjM5NmQ3YzQiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS43IiwKKyAgICAgICAgICAiYWJmYTJlY2I3ZDI5YmQ1YmNiOTkzMWNlMmJhZDJmNzQzODNlOTU2ODNjZWUxMTAyMmYwOGU4ZTdkMGI4ZmEwNSIKKyAgICAgICAgICAiOGJmOWViN2ViNWY5ODg2OGI1YmIxZmI1YzMxY2VkYTNhNjRmMWExMmNkZjIwZmNkMGU1YTI0NmQ3YTE3NzNkOCIKKyAgICAgICAgICAiZGJhMGUzYjI3NzU0NWJhYmU1OGYyYjk2ZTNmNGVkYzE4ZWFiZjVjZDJhNTYwZmNhNzVmZTk2ZTA3ZDg1OWRlZiIKKyAgICAgICAgICAiYjI1NjRmM2EzNGYxNmYxMWU5MWIzYTcxN2I0MWFmNTNmNjYwNTMyMzAwMWFhNDA2YzYiLAorICAgICAgICAgICJjNGI0MzdiY2Y3MDNmMzUyZTFmYWY3NGViOTYyMjAzOTQyNmI1NjcyY2FmMmE3YjM4MWM2YzRmMDE5MWU3ZTRhIgorICAgICAgICAgICI5OGYwZWViY2Q2ZjQxNzg0YzI1MzdmZjBmOTllNzQ5ODJjODcyMDFiZmJjNjVlYWU4MzJkYjcxZDE2ZGFjYWRiIgorICAgICAgICAgICIwOTc3ZTVjNTA0Njc5ZTQwYmUwZjlkYjA2ZmZkODQ4ZGQyZTVjMzhhN2VjMDIxZTdmNjhjNDdkZmQzOGNjMzU0IgorICAgICAgICAgICI0OTNkNTMzOWI0NTk1YTViZjMxZTNmOGYxMzgxNjgwNzM3M2RmNmFkMGRjN2U3MzFlNTFhZDE5ZWI0NzU0YjEzIgorICAgICAgICAgICI0NDg1ODQyZmU3MDlkMzc4NDQ0ZDhlMzZiMTcyNGE0ZmRhMjFjYWZlZTY1M2FiODA3NDdmNzk1MmVlODA0ZGVhIgorICAgICAgICAgICJiMTAzOWQ4NDEzOTk0NWJiZjRiZTgyMDA4NzUzZjNjNTRjNzgyMWExZDI0MWY0MjE3OWM3OTRlZjcwNDJiYmY5IgorICAgICAgICAgICI5NTU2NTYyMjJlNDVjMzQzNjlhMzg0Njk3YjZhZTc0MmUxOGZhNWNhN2FiYWQyN2Q5ZmU3MTA1MmUzMzEwZDBmIgorICAgICAgICAgICI1MmM4ZDEyZWEzM2JmMDUzYTMwMGY0YWZjNGYwOThkZjRlNmQ4ODY3NzlkNjQ1OTRkMzY5MTU4ZmRiYzFmNjk0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuOCIsCisgICAgICAgICAgImRmNDA0NGE4OWE4M2U5ZmNiZjEyNjI1NDBhZTMwMzhiYmM5MGYyYjI2MjhiZjJhNDQ2N2FjNjc3MjJkODU0NmIiCisgICAgICAgICAgIjNhNzFjYjBlYTQxNjY5ZDViNGQ2MTg1OWMxYjRlNDdjZWNjNTkzM2Y3NTdlYzg2ZGIwNjQ0ZTMxMTgxMmQwMGYiCisgICAgICAgICAgImI4MDJmMDM0MDA2MzljMGUzNjRkYWU1YWViYzU3OTFiYzY1NTc2MjM2MWJjNDNjNTNkM2M3ODg2NzY4Zjc5NjgiCisgICAgICAgICAgImMxYzU0NGM2Zjc5ZjdiZTgyMGM3ZTJiZDJmOWQ3M2U2MmRlZDZkMmU5MzdlNmE2ZGFlZjkwZWUzN2ExYTUyYTUiCisgICAgICAgICAgIjRmMDBlMzFhZGRkNjQ4OTRjZjRjMDJlMTYwOTllMjlmOWViN2YxYTdiYjdmODRjNDdhMmI1OTQ4MTNiZTAyYTEiCisgICAgICAgICAgIjdiN2ZjNDNiMzRjMjJjOTE5MjUyNjQxMjZjODlmODZiYjRkODdmM2VmMTMxMjk2YzUzYTMwOGUwMzMxZGFjOGIiCisgICAgICAgICAgImFmM2I2MzQyMjI2NmVjZWYyYjkwNzgxNTM1ZGJkYTQxY2JkMGNmMjJhOGNiZmI1MzJlYzY4ZmM2YWZiMmFjMDYiLAorICAgICAgICAgICIxNDE0YjM4NTY3YWU2ZDk3M2VkZTRhMDY4NDJkY2MwZTA1NTliMTllNjVhNDg4OWJkYmFiZDBmZDAyODA2ODI5IgorICAgICAgICAgICIxM2JhY2Q1ZGMyZjAxYjMwYmIxOWViODEwYjdkOWRlZDMyYjI4NGYxNDdiYmU3NzFjOTMwYzYwNTJhYTczNDEzIgorICAgICAgICAgICI5MGE4NDlmODFkYTljZDExZTVlY2NmMjQ2ZGJhZTk1ZmE5NTgyOGU5YWUwY2EzNTUwMzI1MzI2ZGVlZjlmNDk1IgorICAgICAgICAgICIzMGJhNDQxYmVkNGFjMjljMDI5YzlhMjczNmIxYTQxOTBiODUwODRhZDE1MDQyNmI0NmQ3Zjg1YmQ3MDJmNDhkIgorICAgICAgICAgICJhYzVmNzEzMzBiYzQyM2E3NjZjNjVjYzFkY2FiMjBkM2QzYmJhNzJiNjNiM2VmODI0NGQ0MmYxNTdjYjdlM2E4IgorICAgICAgICAgICJiYTVjMDUyNzJjNjRjYzFhZDIxYTEzNDkzYzM5MTFmNjBiNGU5ZjRlY2M5OTAwZWIwNTZlZTU5ZDZmZTRiOGZmIgorICAgICAgICAgICI2ZTgwNDhjY2MwZjM4ZjI4MzZmZDNkZmU5MWJmNGEzODZlMWVjYzJjMzI4MzlmMGNhNGQxYjI3YTU2OGZhOTQwIgorICAgICAgICAgICJkZDY0YWQxNmJkMDEyNWQwMzQ4ZTM4MzA4NWYwODg5NDg2MWNhMTg5ODcyMjdkMzdiNDJiNTg0YTgzNTdjYjA0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuOSIsCisgICAgICAgICAgImVhOTQxZmYwNmY4NmMyMjY5MjdmY2YwZTNiMTFiMDg3MjY3NjE3MGMxYmZjMzNiZGE4ZTI2NWM3Nzc3MWY5ZDAiCisgICAgICAgICAgIjg1MDE2NGE1ZWVjYmNjNWNlODI3ZmJmYTA3Yzg1MjE0Nzk2ZDgxMjdlOGNhYTgxODk0ZWE2MWNlYjE0NDllNzIiCisgICAgICAgICAgImZlYTBhNGM5NDNiMmRhNmQ5YjEwNWZlMDUzYjkwMzlhOWNjNTNkNDIwYjc1MzlmYWIyMjM5YzZiNTFkMTdlNjkiCisgICAgICAgICAgIjRjOTU3ZDRiMGYwOTg0NDYxODc5YTA3NTljNDQwMWJlZWNkNGM2MDZhMGFmYmQ3YTA3NmY1MGEyZGZjMjgwN2YiCisgICAgICAgICAgIjI0ZjE5MTliYWE3NzQ2ZDNhNjRlMjY4ZWQzZjVmOGU2ZGE4M2EyYTVjOTE1MmY4MzdjYjA3ODEyYmQ1YmE3ZDMiCisgICAgICAgICAgImEwNzk4NWRlODgxMTNjMTc5NmU5YjQ2NmVjMjk5YzVhYzEwNTllMjdmMDk0MTUiLAorICAgICAgICAgICJjZWViODRjY2I0ZTkwOTkyNjU2NTA3MjFlZWEwZThlYzg5Y2EyNWJkMzU0ZDRmNjQ1NjQ5NjdiZTlkNGIwOGIzIgorICAgICAgICAgICJmMWMwMTg1MzljOWQzNzFjZjg5NjFmMjI5MWZiZTBkYzJmMmY5NWZlYTQ3YjYzOWYxZTEyZjRiYzM4MWNlZjBjIgorICAgICAgICAgICIyYjdhN2I5NWMzYWRmMjc2MDViN2Y2Mzk5OGMzY2JhZDU0MjgwOGMzODIyZTA2NGQ0YWQxNDA5MzY3OWU2ZTAxIgorICAgICAgICAgICI0MThhNmQ1YzA1OTY4NGNkNTZlMzRlZDY1YWI2MDViOGRlNGZjZmE2NDA0NzRhNTRhODI1MWJiYjczMjZhNDJkIgorICAgICAgICAgICIwODU4NWNmY2ZjOTU2NzY5YjE1YjZkN2ZkZjdkYTg0ZjgxOTc2ZWFhNDFkNjkyMzgwZmYxMGVhZWNmZTBhNTc5IgorICAgICAgICAgICI2ODI5MDliNTUyMWZhZGU4NTRkNzk3YjhhMDM0NWI5YTg2NGUwNTg4ZjZjYWRkYmY2NWYxNzc5OThlMTgwZDFmIgorICAgICAgICAgICIxMDI0NDNlNmRjYTUzYTk0ODIzY2FhOWMzYjM1ZjMyMjU4M2M3MDNhZjY3NDc2MTU5ZWM3ZWM5M2QxNzY5YjMwIgorICAgICAgICAgICIwYWYwZTcxNTdkYzI5OGM2Y2QyZGVlMjI2MmY4Y2RkYzEwZjExZTAxNzQxNDcxYmJmZDY1MThhMTc1NzM0NTc1IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuMTAiLAorICAgICAgICAgICJkOGI4MTY0NWMxM2NkN2VjZjVkMDBlZDJjOTFiOWFjZDQ2YzE1NTY4ZTUzMDNjNGE5Nzc1ZWRlNzZiNDg0MDNkIgorICAgICAgICAgICI2YmU1NmMwNWI2YjFjZjc3YzZlNzVkZTA5NmM1Y2IzNTUxY2I2ZmE5NjRmM2M4NzljZjU4OWQyOGUxZGEyZjlkIgorICAgICAgICAgICJlYyIsCisgICAgICAgICAgIjI3NDUwNzRjYTk3MTc1ZDk5MmUyYjQ0NzkxYzMyM2M1NzE2NzE2NWNkZDhkYTU3OWNkZWY0Njg2YjliYjQwNGIiCisgICAgICAgICAgImQzNmE1NjUwNGViMWZkNzcwZjYwYmZhMTg4YTdiMjRiMGM5MWU4ODFjMjRlMzViMDRkYzRkZDRjZTM4NTY2YmMiCisgICAgICAgICAgImM5Y2U1NGY0OWExNzVmYzlkMGIyMjUyMmQ5NTc5MDQ3ZjllZDQyZWNhODNmNzY0YTEwMTYzOTk3OTQ3ZTdkMmIiCisgICAgICAgICAgIjUyZmYwODk4MGU3ZTdjMjI1NzkzN2IyM2YzZDI3OWQ0Y2QxN2Q2ZjQ5NTU0NjM3M2Q5ODNkNTM2ZWZkN2QxYjYiCisgICAgICAgICAgIjcxODFjYTJjYjUwYWM2MTZjNWM3YWJmYmI5MjYwYjkxYjFhMzhlNDcyNDIwMDFmZjQ1MmY4ZGUxMGNhNmVhZWEiCisgICAgICAgICAgImRjYWY5ZWRjMjg5NTZmMjhhNzExMjkxZmM5YTgwODc4YjhiYTRjZmUyNWI4MjgxY2I4MGJjOWNkNmQyYmQxODIiCisgICAgICAgICAgIjUyNDZlZWJlMjUyZDk5NTdlZjkzNzA3MzUyMDg0ZTZkMzZkNDIzNTUxYmYyNjZhODUzNDBmYjRhNmFmMzcwODgiCisgICAgICAgICAgIjBhYWIwNzE1M2QwMWY0OGQwODZkZjBiZmJlYzA1ZTdiNDQzYjk3ZTcxNzE4OTcwZTJmNGJmNjIwMjNlOTViNjciCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS4xMSIsCisgICAgICAgICAgImU1NzM5YjZjMTRjOTJkNTEwZDk1YjgyNjkzMzMzN2ZmMGQyNGVmNzIxYWM0ZWY2NGMyYmFkMjY0YmU4YjQ0ZWYiCisgICAgICAgICAgImExNTE2ZTA4YTI3ZWI2YjYxMWQzMzAxZGYwMDYyZGFlZmM3M2E4YzBkOTJlMmM1MjFmYWNiYzdiMjY0NzM4NzYiCisgICAgICAgICAgIjdlYTZmYzk3ZDU4OGEwYmFmNmNlNTBhZGY3OWU2MDBiZDI5ZTM0NWZjYjFkYmE3MWFjNWMwMjg5MDIzZmU0YTgiCisgICAgICAgICAgIjJiNDZhNTQwNzcxOTE5N2QyZTk1OGUzNTMxZmQ1NGFlZjkwM2FhYmI0MzU1Zjg4MzE4OTk0ZWQzYzNkZDYyZjQiCisgICAgICAgICAgIjIwYTciLAorICAgICAgICAgICJiZTQwYTVmYjk0ZjExM2UxYjNlZmY2YjZhMzM5ODZmMjAyZTM2M2YwNzQ4M2I3OTJlNjhkZmE1NTU0ZGYwNDY2IgorICAgICAgICAgICJjYzMyMTUwOTUwNzgzYjRkOTY4YjYzOWEwNGZkMmZiOTdmNmViOTY3MDIxZjVhZGNjYjlmY2E5NWFjYzhmMmNkIgorICAgICAgICAgICI4ODVhMzgwYjBhNGU4MmJjNzYwNzY0ZGJhYjg4YzFlNmMwMjU1Y2FhOTRmMjMyMTk5ZDZmNTk3Y2M5MTQ1YjAwIgorICAgICAgICAgICJlM2Q0YmEzNDZiNTU5YTg4MzNhZDE1MTZhZDUxNjNmMDE2YWY2YTU5ODMxYzgyZWExM2M4MjI0ZDg0ZDA3NjVhIgorICAgICAgICAgICI5ZDEyMzg0ZGE0NjBhODUzMWI0YzQwN2UwNGY0ZjM1MDcwOWViOWYwOGY1YjIyMGZmYjQ1YWJmNmI3NWQxNTc5IgorICAgICAgICAgICJmZDNmMWViNTVmYzc1YjAwYWY4YmEzYjA4NzgyN2ZlOWFlOWZiNGY2YzVmYTYzMDMxZmU1ODI4NTJmZTI4MzRmIgorICAgICAgICAgICI5Yzg5YmZmNTNlMjU1MjIxNmJjN2MxZDRhM2Q1ZGMyYmE2OTU1Y2Q5YjE3ZDEzNjNlN2ZlZThlZDc2Mjk3NTNmIgorICAgICAgICAgICJmMzEyNWVkZDQ4NTIxYWUzYjliMDMyMTdmNDQ5NmQwZDhlZGU1N2FjYmM1YmQ0ZGVhZTc0YTU2Zjg2NjcxZGUyIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuMTIiLAorICAgICAgICAgICI3YWY0MjgzNTkxN2E4OGQ2YjNjNjcxNmJhMmY1YjBkNWIyMGJkNGUyZTZlNTc0ZTA2YWYxZWVmN2M4MTEzMWJlIgorICAgICAgICAgICIyMmJmODEyOGI5Y2JjNmVjMDAyNzViYTgwMjk0YTVkMTE3MmQwODI0YTc5ZThmZGQ4MzAxODNlNGMwMGI5Njc4IgorICAgICAgICAgICIyODY3YjEyMjdmZWEyNDlhYWQzMmZmYzVmZTAwN2JjNTFmMjE3OTJmNzI4ZGVkYThiNTcwOGFhOTljYWJhYjIwIgorICAgICAgICAgICJhNGFhNzgzZWQ4NmYwZjI3YjVkNTYzZjQyZTA3MTU4Y2VhNzJkMDk3YWE2ODg3ZWM0MTFkZDAxMjkxMmE1ZTAzIgorICAgICAgICAgICIyYmJmYTY3ODUwNzE0NGJjYzk1ZjM5YjU4YmU3YmZkMTc1OWFkYjlhOTFmYTFkNmQ4MjI2YTgzNDNhOGI4NDlkIgorICAgICAgICAgICJhZTc2ZjdiOTgyMjRkNTllMjhmNzgxZjEzZWNlNjA1Zjg0ZjZjOTBiYWU1ZjhjZjM3ODgxNmY0MDIwYTdkZGExIgorICAgICAgICAgICJiZWQ5MGM5MmEyMzYzNGQyMDNmYWMzZmNkODZkNjhkMzE4MmE3ZDljY2FiZTdiMDc5NWY1YzY1NWU5YWNjNGUzIgorICAgICAgICAgICJlYzE4NTE0MGQxMGNlZjA1MzQ2NGFiMTc1YzgzYmQ4MzkzNWUzZGFiYWYzNDYyZWViZTYzZDE1ZjU3M2QyNjlhIiwKKyAgICAgICAgICAiNGU3OGM1OTAyYjgwNzkxNGQxMmZhNTM3YWU2ODcxYzg2ZGI4MDIxZTU1ZDFhZGI4ZWIwY2NmMWI4ZjM2YWI3ZCIKKyAgICAgICAgICAiYWQxZjY4MmU5NDdhNjI3MDcyZjAzZTYyNzM3MTc4MWQzMzIyMWQxNzRhYmU0NjBkYmQ4ODU2MGMyMmY2OTAxMSIKKyAgICAgICAgICAiNmUyZmJiZTZlOTY0MzYzYTNlNTI4M2JiNWQ5NDZlZjFjMDA0N2ViYTAzOGM3NTZjNDBiZTc5MjMwNTU4MDliMCIKKyAgICAgICAgICAiZTlmMzRhMDNhNTg4MTVlYmRkZTc2NzkzMWYwMThmNmYxODc4ZjJlZjRmNDdkZDM3NDA1MWRkNDg2ODVkZWQ2ZSIKKyAgICAgICAgICAiZmIzZWE4MDIxZjQ0YmUxZDdkMTQ5Mzk4Zjk4ZWE5YzA4ZDYyODg4ZWJiNTYxOTJkMTc3NDdiNmI4ZTE3MDk1NCIKKyAgICAgICAgICAiMzFmMTI1YThhOGU5OTYyYWEzMWMyODUyNjRlMDhmYjIxYWFjMzM2Y2U2YzM4YWEzNzVlNDJiYzkyYWIwYWI5MSIKKyAgICAgICAgICAiMDM4NDMxZTFmOTJjMzlkMmFmNWRlZDdlNDNiYzE1MWU2ZWJlYTRjM2UyNTgzYWYzNDM3ZTgyYzQzYzVlM2I1YiIKKyAgICAgICAgICAiMDdjZjAzNTk2ODNkMjI5OGUzNTk0OGVkODA2YzA2M2M2MDZlYTE3ODE1MGIxZWZjMTU4NTY5MzRjNzI1NWNmZSIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjEzIiwKKyAgICAgICAgICAiZWJhZWYzZjlmMjNiZGZlNWZhNmI4YWY0YzIwOGMxODlmMjI1MWJmMzJmNWYxMzdiOWRlNDQwNjM3ODY4NmIzZiIKKyAgICAgICAgICAiMDcyMWY2MmQyNGNiODY4OGQ2ZmM0MWEyN2NiYWUyMWQzMGU0MjlmZWFjYzcxMTE5NDFjMjc3IiwKKyAgICAgICAgICAiYzQ4ZGJlZjUwNzExNGYwM2M5NWZhZmJlYjRkZjFiZmE4OGUwMTg0YTMzY2M0ZjhhOWExMDM1ZmY3ZjgyMmE1ZSIKKyAgICAgICAgICAiMzhjZGExODcyMzkxNWZmMDc4MjQ0NDI5ZTBmNjA4MWMxNGZkODMzMzFmYTY1YzZiYTdiYjlhMTJkYmY2NjIyMyIKKyAgICAgICAgICAiNzRjZDBjYTU3ZGUzNzc0ZTJiZDdhZTgyMzY3N2QwNjFkNTNhZTljNDA0MGQyZGE3ZWY3MDE0ZjNiYmRjOTVhMyIKKyAgICAgICAgICAiNjFhNDM4NTVjOGNlOWI5N2VjYWJjZTE3NGQ5MjYyODUxNDJiNTM0YTMwODdmOWY0ZWY3NDUxMWVjNzQyYjBkNSIKKyAgICAgICAgICAiNjg1NjAzZmFmNDAzYjUwNzJiOTg1ZGY0NmFkZjJkMjUyOWEwMmQ0MDcxMWUyMTkwOTE3MDUyMzcxYjc5Yjc0OSIKKyAgICAgICAgICAiYjgzYWJmMGFlMjk0ODZjM2YyZjYyNDc3YjJiZDM2MmIwMzljMDEzYzBjNTA3NmVmNTIwZGJiNDA1ZjQyY2VlOSIKKyAgICAgICAgICAiNTQyNWMzNzNhOTc1ZTFjZGQwMzJjNDk2MjJjODUwNzliMDllODhkYWIyYjEzOTY5ZWY3YTcyMzk3Mzc4MTA0MCIKKyAgICAgICAgICAiNDU5ZjU3ZDUwMTM2Mzg0ODNkZTJkOTFjYjNjNDkwZGE4MWM0NmRlNmNkNzZlYThhMGM4ZjZmZTMzMTcxMmQyNCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjE0IiwKKyAgICAgICAgICAiYzVhMjcxMTI3ODc2MWRmY2RkNGYwYzk5ZTZmNTYxOWQ2YzQ4YjVkNGMxYTgwOTgyZmFhNmI0Y2YxY2Y3YTYwZiIKKyAgICAgICAgICAiZjMyN2FiZWY5M2M4MDE0MjllZmRlMDg2NDA4NTgxNDYxMDU2YWNjMzNmM2QwNGY1YWRhMjEyMTZjYWNkNWZkMSIKKyAgICAgICAgICAiZjllZDgzMjAzZTBlMmZlNjEzOGUzZWFlODQyNGU1OTE1YTA4M2YzZjdhYjc2MDUyYzhiZTU1YWU4ODJkNmVjMSIKKyAgICAgICAgICAiNDgyYjFlNDVjNWRhZTlmNDEwMTU0MDUzMjcwMjJlYzMyZjBlYTI0Mjk3NjNiMjU1MDQzYjE5NThlZTNjZjZkNiIKKyAgICAgICAgICAiMzk4MzU5NmViMzg1ODQ0Zjg1MjhjYzlhOTg2NTgzNWRjNTExM2MwMmI4MGQwZmNhNjhhYTI1ZTcyYmNhYWViMyIKKyAgICAgICAgICAiY2Y5ZDc5ZDg0Zjk4NGZkNDE3IiwKKyAgICAgICAgICAiNmJkNTI1N2FhMDY2MTFmYjQ2NjAwODdjYjRiYzRhOWU0NDkxNTlkMzE2NTJiZDk4MDg0NGRhZjNiMWM3YjM1MyIKKyAgICAgICAgICAiZjhlNTYxNDJmN2VhOTg1NzQzM2IxODU3M2I0ZGVlZGU4MThhOTNiMDI5MDI5Nzc4M2YxYTJmMjNjYmM3Mjc5NyIKKyAgICAgICAgICAiYTY3MjUzN2YwMWY2MjQ4NGNkNDE2MmMzMjE0YjlhYzYyODIyNGM1ZGUwMWYzMmJiOWI3NmIyNzM1NGYyYjE1MSIKKyAgICAgICAgICAiZDBlOGM0MjEzZTQ2MTVhZDBiYzcxZjUxNWUzMDBkNmE2NGM2NzQzNDExZmZmZGU4ZTVmZjE5MGU1NDkyMzA0MyIKKyAgICAgICAgICAiMTI2ZWNmYzRjNDUzOTAyMjY2OGZiNjc1ZjI1YzA3ZTIwMDk5ZWUzMTViOThkNmFmZWM0YjFhOWE5M2RjMzM0OSIKKyAgICAgICAgICAiNmExNWJkNmZkZTE2NjNhN2Q0OWI5ZjFlNjM5ZDM4NjY0YjM3YTAxMGIxZjM1ZTY1ODY4MmQ5Y2Q2M2U1N2RlMCIKKyAgICAgICAgICAiZjE1ZThiZGQwOTY1NThmMDdlYzBjYWEyMThhOGMwNmY0Nzg4NDUzOTQwMjg3YzlkMzRiNmQ0MGEzZjA5YmY3NyIKKyAgICAgICAgICAiOTlmZTk4YWU0ZWI0OWYzZmY0MWM1MDQwYTUwY2VmYzliZGYyMzk0Yjc0OWNmMTY0NDgwZGYxYWI2ODgwMjczYiIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjE1IiwKKyAgICAgICAgICAiOWJmOGFhMjUzYjg3MmVhNzdhN2UyMzQ3NmJlMjZiMjMyOTU3OGNmNmFjOWVhMjgwNWIzNTdmNmZjM2FkMTMwZCIKKyAgICAgICAgICAiYmFlYjNkODY5YTEzY2NlN2E4MDhiYmJiYzk2OTg1N2UwMzk0NWM3YmI2MWRmMWI1YzI1ODliOGUwNDZjMmE1ZCIKKyAgICAgICAgICAiN2U0MDU3YjFhNzRmMjRjNzExMjE2MzY0Mjg4NTI5ZWM5NTcwZjI1MTk3MjEzYmUxZjVjMmU1OTZmOGJmOGIyYyIKKyAgICAgICAgICAiZjNjYjM4YWE1NmZmZTVlMzFkZjczOTU4MjBlOTRlY2YzYjExODlhOTY1ZGNmOWE5Y2I0Mjk4ZDNjODhiMjkyMyIKKyAgICAgICAgICAiYzE5ZmM2YmMzNGFhY2VjYWQ0ZTA5MzFhN2M0ZTVkNzNkYzg2ZGZhNzk4YTg0NzZkODI0NjNlZWZhYTkwYThhOSIKKyAgICAgICAgICAiMTkyYWIwOGIyMzA4OGRkNThlMTI4MGY3ZDcyZTQ1NDgzOTZiYWFjMTEyMjUyZGQ1YzUzNDZhZGIyMDA0YTJmNyIKKyAgICAgICAgICAiMTAxY2NjODk5Y2M3ZmFmYWU4YmJlMjk1NzM4ODk2YTViMjAxMjI4NTAxNGVmNiIsCisgICAgICAgICAgIjI3ZjdmNGRhOWJkNjEwMTA2ZWY1N2QzMjM4M2E0NDhhOGE2MjQ1YzgzZGMxMzA5YzZkNzcwZDM1N2JhODllNzMiCisgICAgICAgICAgImYyYWQwODMyMDYyZWIwZmUwYWM5MTU1NzViY2Q2YjhiY2FkYjRlMmJhNmZhOWRhNzNhNTkxNzUxNTJiMmQ0ZmUiCisgICAgICAgICAgIjcyYjA3MGM5YjczNzllNTAwMDBlNTVlNmMyNjlmNjY1OGM5Mzc5NzI3OTdkM2FkZDY5ZjEzMGUzNGI4NWJkZWMiCisgICAgICAgICAgIjlmM2E5YjM5MjIwMmQ2ZjNlNDMwZDA5Y2FjYTgyMjc3NTlhYjgyNWY3MDEyZDJmZjRiNWI2MmM4NTA0ZGJhZDgiCisgICAgICAgICAgIjU1YzA1ZWRkNWNhYjVhNGNjY2RjNjdmMDFkZDY1MTdjN2Q0MWM0M2UyYTQ5NTdhZmYxOWRiNmYxOGIxNzg1OWEiCisgICAgICAgICAgImYwYmM4NGFiNjcxNDZlYzFhNGE2MGExN2Q3ZTA1ZjhiNGY5Y2VkNmFkMTA5MDhkOGQ3OGY3ZmM4OGI3NmFkYzgiCisgICAgICAgICAgIjI5MGY4N2RhZjJhN2JlMTBhZTQwODUyMTM5NWQ1NGVkMjU1NmZiNzY2MTg1NGE3MzBjZTNkODJjNzFhOGQ0OTMiCisgICAgICAgICAgImVjNDlhMzc4YWM4YTNjNzQ0MzlmN2NjNTU1YmExM2Y4NTkwNzA4OTBlZTE4ZmY2NThmYTRkNzQxOTY5ZDcwYTUiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS4xNiIsCisgICAgICAgICAgIjMyNDc0ODMwZTIyMDM3NTRjOGJmMDY4MWRjNGY4NDJhZmUzNjA5MzAzNzg2MTZjMTA4ZTgzMzY1NmU1NjQwYzgiCisgICAgICAgICAgIjY4NTY4ODViYjA1ZDFlYjk0MzhlZmVkZTY3OTI2M2RlMDdjYjM5NTUzZjZhMjVlMDA2YjBhNTIzMTFhMDYzY2EiCisgICAgICAgICAgIjA4ODI2NmQyNTY0ZmY2NDkwYzQ2YjU2MDk4MTg1NDhmODg3NjRkYWQzNGEyNWUzYTg1ZDU3NTAyM2YwYjllNjYiCisgICAgICAgICAgIjUwNDhhMDNjMzUwNTc5YTlkMzI0NDZjN2JiOTZjYzkyZTA2NWFiOTRkM2M4OTUyZThkZjY4ZWYwZDlmYTQ1NmIiCisgICAgICAgICAgIjNhMDZiYjgwZTNiYmM0YjI4ZTZhOTRiNmQwZmY3Njk2YTY0ZWZlMDVlNzM1ZmVhMDI1ZDdiZGJjNDEzOWYzYTMiCisgICAgICAgICAgImI1NDYwNzVjYmE3ZWZhOTQ3Mzc0ZDNmMGFjODBhNjhkNzY1ZjVkZjYyMTBiY2EwNjlhMmQ4ODY0N2FmN2VhMDQiCisgICAgICAgICAgIjJkYWM2OTBjYjU3Mzc4ZWMwNzc3NjE0ZmI4YjY1ZmY0NTNjYTZiN2RjZTYwOTg0NTFhMmY4YzBkYTliZmVjZjEiCisgICAgICAgICAgImZkZjM5MWJiYWE0ZTJhOTFjYTE4YTExMjFhNzUyM2EyYWJkNDI1MTRmNDg5ZTgiLAorICAgICAgICAgICI2OTE3NDM3MjU3YzIyY2NiNTQwMzI5MGMzZGVlODJkOWNmNzU1MGIzMWJkMzFjNTFiZDU3YmZkMzVkNDUyYWI0IgorICAgICAgICAgICJkYjdjNGJlNmIyZTI1YWM5YTU5YTFkMmE3ZmViNjI3ZjBhZmQ0OTc2YjMwMDNjYzljZmZkODg5NjUwNWVjMzgyIgorICAgICAgICAgICJmMjY1MTA0ZDRjZjhjOTMyZmE5ZmU4NmUwMDg3MDc5NTk5MTIzODlkYTRiMmQ2YjM2OWIzNmE1ZTcyZTI5ZDI0IgorICAgICAgICAgICJjOWE5OGM5ZDMxYTNhYjQ0ZTY0M2U2OTQxMjY2YTQ3YTQ1ZTM0NDZjZTg3NzZhYmUyNDFhOGY1ZmM2NDIzYjI0IgorICAgICAgICAgICJiMWZmMjUwZGMyYzNhODE3MjM1MzU2MTA3N2U4NTBhNzY5YjI1ZjAzMjVkYWM4ODk2NWEzYjliNDcyYzQ5NGU5IgorICAgICAgICAgICI1ZjcxOWI0ZWFjMzMyY2FhN2E2NWM3ZGZlNDZkOWFhN2U2ZTAwZjUyNWYzMDNkZDYzYWI3OTE5MjE4OTAxODY4IgorICAgICAgICAgICJmOTMzN2Y4Y2QyNmFhZmU2ZjMzYjdmYjJjOTg4MTBhZjE5ZjdmY2IyODJiYTE1Nzc5MTJjMWQzNjg5NzVmZDVkIgorICAgICAgICAgICI0NDBiODZlMTBjMTk5NzE1ZmEwYjZmNDI1MGI1MzM3MzJkMGJlZmUxNTQ1MTUwZmM0N2I4NzZkZTA5YjAwYTk0IgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuMTciLAorICAgICAgICAgICIwMDhlNTk1MDVlYWZiNTUwYWFlNWU4NDU1ODRjZWJiMDBiNmRlMTczM2U5Zjk1ZDQyYzg4MmE1YmJlYjVjZTFjIgorICAgICAgICAgICI1N2UxMTllN2MwZDRkYWNhOWYxZmY3ODcwMjE3ZjdjZmQ4YTZiMzczOTc3Y2FjOWNhYjhlNzFlNDIwIiwKKyAgICAgICAgICAiOTIyNTAzYjY3M2VlNWYzZTY5MWUxY2E4NWU5ZmY0MTczY2Y3MmIwNWFjMmMxMzFkYTU2MDM1OTNlM2JjMjU5YyIKKyAgICAgICAgICAiOTRjMWY3ZDNhMDZhNWI5ODkxYmYxMTNmYTM5ZTU5ZmY3YzFlZDY0NjVlOTA4MDQ5Y2I4OWU0ZTEyNWNkMzdkMiIKKyAgICAgICAgICAiZmZkOTIyN2E0MWI0YTBhMTljMGE0NGZiYmYzZGU1NWJhYjgwMjA4N2EzYmI4ZDRmZjY2OGVlNmJiYjhhZDg5ZSIKKyAgICAgICAgICAiNjg1N2E3OWE5YzcyNzgxOTkwZGZjZjkyY2Q1MTk0MDRjOTUwZjEzZDExNDNjMzE4NGYxZDI1MGM5MGUxN2FjNiIKKyAgICAgICAgICAiY2UzNjE2M2I5ODk1NjI3YWQ2ZmZlYzE0MjI0NDFmNTVlNDQ5OWRiYTliZTg5NTQ2YWU4YmM2M2NjYTAxZGQwOCIKKyAgICAgICAgICAiNDYzYWU3ZjFmY2UzZDg5Mzk5NjkzODc3OGMxODEyZTY3NGFkOWMzMDljNWFjY2EzZmRlNDRlN2RkODY5NTk5MyIKKyAgICAgICAgICAiZTljMWZhODdhY2RhOTllY2U1Yzg0OTllNDY4OTU3YWQ2NjM1OWJmMTJhNTFhZGJlNzhkM2EyMTNiNDQ5YmYwYiIKKyAgICAgICAgICAiNWY4ZDRkNDk2YWNmMDNkMzAzM2I3Y2NkMTk2YmMyMmY2OGZiN2JlZjRmNjk3YzVlYTJiMzUwNjJmNDhhMzZkZCIKKyAgICAgICAgfSx7CisgICAgICAgICAgIlBLQ1MjMSB2MS41IFNpZ25hdHVyZSBFeGFtcGxlIDE1LjE4IiwKKyAgICAgICAgICAiNmFiYzU0Y2Y4ZDFkZmYxZjUzYjE3ZDgxNjAzNjg4NzhhODc4OGNjNmQyMmZhNWMyMjU4Yzg4ZTY2MGIwOWE4OSIKKyAgICAgICAgICAiMzNmOWYyYzA1MDRkZGFkYzIxZjZlNzVlMGI4MzNiZWI1NTUyMjlkZWU2NTZiOTA0N2I5MmY2MmU3NmI4ZmZjYyIKKyAgICAgICAgICAiNjBkYWIwNmI4MCIsCisgICAgICAgICAgIjBiNmRhZjQyZjdhODYyMTQ3ZTQxNzQ5M2MyYzQwMWVmYWUzMjYzNmFiNGNiZDQ0MTkyYmJmNWYxOTViNTBhZTAiCisgICAgICAgICAgIjk2YTQ3NWExNjE0ZjBhOWZhOGY3YTAyNmNiNDZjNjUwNmU1MThlMzNkODNlNTY0NzdhODc1YWNhOGM3ZTcxNGMiCisgICAgICAgICAgImUxYmRiZDYxZWY1ZDUzNTIzOWIzM2YyYmZkZDYxNzcxYmFiNjI3NzZkNzgxNzFhMTQyM2NlYTg3MzFmODJlNjAiCisgICAgICAgICAgIjc2NmQ2NDU0MjY1NjIwYjE1ZjVjNWE1ODRmNTVmOTViODAyZmU3OGM1NzRlZDVkYWNmYzgzMWYzY2YyYjA1MDIiCisgICAgICAgICAgImMwYjI5OGYyNWNjZjExZjk3M2IzMWY4NWU0NzQ0MjE5ODVmM2NmZjcwMmRmMzk0NmVmMGE2NjA1NjgyMTExYjIiCisgICAgICAgICAgImY1NWIxZjhhYjBkMmVhM2E2ODNjNjk5ODVlYWQ5M2VkNDQ5ZWE0OGYwMzU4ZGRmNzA4MDJjYjQxZGUyZmQ4M2YiCisgICAgICAgICAgIjNjODA4MDgyZDg0OTM2OTQ4ZTBjODRhMTMxYjQ5Mjc4Mjc0NjA1MjdiYjVjZDI0YmZhYjdiNDhlMDcxYjI0MTciCisgICAgICAgICAgIjE5MzBmOTk3NjMyNzJmOTc5N2JjYjc2ZjFkMjQ4MTU3NTU1OGZjZjI2MGIxZjBlNTU0ZWJiM2RmM2NmY2I5NTgiCisgICAgICAgIH0seworICAgICAgICAgICJQS0NTIzEgdjEuNSBTaWduYXR1cmUgRXhhbXBsZSAxNS4xOSIsCisgICAgICAgICAgImFmMmQ3ODE1MmNmMTBlZmUwMWQyNzRmMjE3YjE3N2Y2YjAxYjVlNzQ5ZjE1Njc3MTVkYTMyNDg1OWNkM2RkODgiCisgICAgICAgICAgImRiODQ4ZWM3OWY0OGRiYmE3YjZmMWQzMzExMWVmMzFiNjQ4OTllNzM5MWMyYmZmZDY5ZjQ5MDI1Y2YyMDFmYzUiCisgICAgICAgICAgIjg1ZGJkMTU0MmMxYzc3OGEyY2U3YTdlZTEwOGEzMDlmZWNhMjZkMTMzYTVmZmVkYzRlODY5ZGNkNzY1NjU5NmEiCisgICAgICAgICAgImM4NDI3ZWEzZWY2ZTNmZDc4ZmU5OWQ4ZGRjNzFkODM5ZjY3ODZlMGRhNmU3ODZiZDYyYjNhNGYxOWI4OTFhNTYiCisgICAgICAgICAgIjE1N2E1NTRlYzJhMmIzOWUyNWExZDdjN2QzNzMyMWM3YTFkOTQ2Y2Y0ZmJlNzU4ZDkyNzZmMDg1NjM0NDlkNjciCisgICAgICAgICAgIjQxNGEyYzAzMGY0MjUxY2ZlMjIxM2QwNGE1NDEwNjM3ODciLAorICAgICAgICAgICIyMDljNjExNTc4NTczODdiNzFlMjRiZjNkZDU2NDE0NTUwNTAzYmVjMTgwZmY1M2JkZDliYWMwNjJhMmQ0OTk1IgorICAgICAgICAgICIwOWJmOTkxMjgxYjc5NTI3ZGY5MTM2NjE1YjdhNmQ5ZGIzYTEwM2I1MzVlMDIwMmEyY2FjYTE5N2E3Yjc0ZTUzIgorICAgICAgICAgICI1NmYzZGQ1OTViNDlhY2ZkOWQzMDA0OWE5OGNhODhmNjI1YmNhMWQ1ZjIyYTM5MmQ4YTc0OWVmYjZlZWQ5Yjc4IgorICAgICAgICAgICIyMWQzMTEwYWMwZDI0NDE5OWVjYjRhYTNkNzM1YTgzYTJlODg5M2M2YmY4NTgxMzgzY2NhZWU4MzQ2MzViN2ZhIgorICAgICAgICAgICIxZmFmZmE0NWIxM2QxNWMxZGEzM2FmNzFlODkzMDNkNjgwOTBmZjYyZWU2MTVmZGY1YTg0ZDEyMDcxMWRhNTNjIgorICAgICAgICAgICIyODg5MTk4YWIzODMxN2E5NzM0YWIyN2Q2NzkyNGNlYTc0MTU2ZmY5OWJlZjk4NzZiYjVjMzM5ZTkzNzQ1MjgzIgorICAgICAgICAgICJlMWIzNGUwNzIyMjZiODgwNDVlMDE3ZTlmMDViMmE4YzQxNjc0MDI1OGUyMjNiMjY5MDAyNzQ5MTczMjI3M2YzIgorICAgICAgICAgICIyMjlkOWVmMmIxYjM4MDdlMzIxMDE4OTIwYWQzZTUzZGFlNDdlNmQ5Mzk1YzE4NGI5M2EzNzRjNjcxZmFhMmNlIgorICAgICAgICB9LHsKKyAgICAgICAgICAiUEtDUyMxIHYxLjUgU2lnbmF0dXJlIEV4YW1wbGUgMTUuMjAiLAorICAgICAgICAgICI0MGVlOTkyNDU4ZDZmNjE0ODZkMjU2NzZhOTZkZDJjYjkzYTM3ZjA0YjE3ODQ4MmYyYjE4NmNmODgyMTUyNzBkIgorICAgICAgICAgICJiYTI5ZDc4NmQ3NzRiMGM1ZTc4YzdmNmU1NmE5NTZlN2Y3Mzk1MGEyYjBjMGMxMGEwOGRiY2Q2N2U1YjIxMGJiIgorICAgICAgICAgICIyMWM1OGUyNzY3ZDQ0ZjdkZDQwMTRlMzk2NjE0M2JmN2UzZDY2ZmYwYzA5YmU0YzU1ZjkzYjM5OTk0Yjg1MThkIgorICAgICAgICAgICI5YzFkNzZkNWI0NzM3NGRlYTA4ZjE1N2Q1N2Q3MDYzNDk3OGYzODU2ZTBlNWI0ODFhZmJiZGI1YTNhYzQ4ZDQ4IgorICAgICAgICAgICI0YmU5MmM5M2RlMjI5MTc4MzU0YzJkZTUyNmU5YzY1YTMxZWRlMWVmNjhjYjYzOThkNzkxMTY4NGZlYzBiYWJjIgorICAgICAgICAgICIzYTc4MWE2NjY2MDc4MzUwNjk3NGQwZTE0ODI1MTAxYzNiZmFlYSIsCisgICAgICAgICAgIjkyNzUwMmI4MjRhZmM0MjUxM2NhNjU3MGRlMzM4YjhhNjRjM2E4NWViODI4ZDMxOTM2MjRmMjdlOGIxMDI5YzUiCisgICAgICAgICAgIjVjMTE5Yzk3MzNiMThmNTg0OWIzNTAwOTE4YmNjMDA1NTFkOWE4ZmRmNTNhOTc3NDlmYThkYzQ4MGQ2ZmU5NzQiCisgICAgICAgICAgIjJhNTg3MWY5NzM5MjY1Mjg5NzJhMWFmNDllMzkyNWIwYWRmMTRhODQyNzE5YjRhNWEyZDg5ZmE5YzBiNjYwNWQiCisgICAgICAgICAgIjIxMmJlZDFlNjcyM2I5MzQwNmFkMzBlODY4MjlhNWM3MTliODkwYjM4OTMwNmRjNTUwNjQ4NmVlMmYzNmE4ZGYiCisgICAgICAgICAgImUwYTk2YWY2NzhjOWNiZDZhZmYzOTdjYTIwMGUzZWRjMWUzNmJkMmYwOGIzMWQ1NDBjMGNiMjgyYTk1NTllNGEiCisgICAgICAgICAgImRkNGZjOWU2NDkyZWVkMGNjYmQzYTY5ODJlNWZhYTJkZGQxN2JlNDc0MTdjODBiNGU1NDUyZDMxZjcyNDAxYTAiCisgICAgICAgICAgIjQyMzI1MTA5NTQ0ZDk1NGMwMTkzOTA3OWQ0MDlhNWMzNzhkNzUxMmRmYzJkMmE3MWVmY2MzNDMyYTc2NWQxYzYiCisgICAgICAgICAgImE1MmNmY2U4OTljZDc5YjE1YjRmYzM3MjM2NDFlZjZiZDAwYWNjMTA0MDdlNWRmNThkZDFjM2M1YzU1OWE1MDYiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH07CmRpZmYgLS1naXQgYS90ZXN0cy9wa2NzMXYyLmMgYi90ZXN0cy9wa2NzMXYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMWI2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BrY3MxdjIuYwpAQCAtMCwwICsxLDcyMyBAQAorLyogcGtjczF2Mi5jIC0gVGVzdCBPQUVQIGFuZCBQU1MgcGFkZGluZworICogQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZmRlZiBfR0NSWVBUX0lOX0xJQkdDUllQVAorIyBpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorI2Vsc2UKKyMgaW5jbHVkZSA8Z2NyeXB0Lmg+CisjZW5kaWYKKworCisjZGVmaW5lIG15X2lzYXNjaWkoYykgKCEoKGMpICYgMHg4MCkpCisjZGVmaW5lIGRpZ2l0cChwKSAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpIChkaWdpdHAgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdBJyAmJiAqKGEpIDw9ICdGJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorI2RlZmluZSB4dG9pXzEocCkgICAoKihwKSA8PSAnOSc/ICgqKHApLSAnMCcpOiBcCisgICAgICAgICAgICAgICAgICAgICAqKHApIDw9ICdGJz8gKCoocCktJ0EnKzEwKTooKihwKS0nYScrMTApKQorI2RlZmluZSB4dG9pXzIocCkgICAoKHh0b2lfMShwKSAqIDE2KSArIHh0b2lfMSgocCkrMSkpCisjZGVmaW5lIERJTSh2KQkJICAgICAoc2l6ZW9mKHYpL3NpemVvZigodilbMF0pKQorI2RlZmluZSBESU1vZih0eXBlLG1lbWJlcikgICBESU0oKCh0eXBlICopMCktPm1lbWJlcikKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBkaWVfb25fZXJyb3I7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCisKK3N0YXRpYyB2b2lkCitpbmZvIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKKyAgaWYgKGRpZV9vbl9lcnJvcikKKyAgICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3NleHAgKGNvbnN0IGNoYXIgKnByZWZpeCwgZ2NyeV9zZXhwX3QgYSkKK3sKKyAgY2hhciAqYnVmOworICBzaXplX3Qgc2l6ZTsKKworICBpZiAocHJlZml4KQorICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2RhdGFfZnJvbV9oZXggKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IGdjcnlfeG1hbGxvYyAoc3RybGVuKHN0cmluZykvMisxKTsKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChzPXN0cmluZzsgKnM7IHMgKz0yICkKKyAgICB7CisgICAgICBpZiAoIWhleGRpZ2l0cCAocykgfHwgIWhleGRpZ2l0cCAocysxKSkKKyAgICAgICAgZGllICgiZXJyb3IgcGFyc2luZyBoZXggc3RyaW5nIGAlcydcbiIsIHN0cmluZyk7CisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbbGVuZ3RoKytdID0geHRvaV8yIChzKTsKKyAgICB9CisgICpyX2xlbmd0aCA9IGxlbmd0aDsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitzdGF0aWMgaW50CitleHRyYWN0X2NtcF9kYXRhIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQoreworICBnY3J5X3NleHBfdCBsMTsKKyAgY29uc3Qgdm9pZCAqYTsKKyAgc2l6ZV90IGFsZW47CisgIHZvaWQgKmI7CisgIHNpemVfdCBibGVuOworICBpbnQgcmMgPSAwOworCisgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNleHAsIG5hbWUsIDApOworICBhID0gZ2NyeV9zZXhwX250aF9kYXRhIChsMSwgMSwgJmFsZW4pOworICBiID0gZGF0YV9mcm9tX2hleCAoZXhwZWN0ZWQsICZibGVuKTsKKyAgaWYgKCFhKQorICAgIHsKKyAgICAgIGluZm8gKCIlczogcGFyYW1ldGVyIFwiJXNcIiBtaXNzaW5nIGluIGtleVxuIiwgZGVzY3JpcHRpb24sIG5hbWUpOworICAgICAgcmMgPSAxOworICAgIH0KKyAgZWxzZSBpZiAoIGFsZW4gIT0gYmxlbiB8fCBtZW1jbXAgKGEsIGIsIGFsZW4pICkKKyAgICB7CisgICAgICBpbmZvICgiJXM6IHBhcmFtZXRlciBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWVcbiIsCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgbmFtZSk7CisgICAgICByYyA9IDE7CisgICAgfQorICBnY3J5X2ZyZWUgKGIpOworICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICByZXR1cm4gcmM7Cit9CisKKworLyogQ2hlY2sgYWdhaW5zdCB0aGUgT0FFUCB0ZXN0IHZlY3RvcnMgZnJvbQorICAgZnRwOi8vZnRwLnJzYXNlY3VyaXR5LmNvbS9wdWIvcGtjcy9wa2NzLTEvcGtjcy0xdjItMWQyLXZlYy56aXAgLiAgKi8KK3N0YXRpYyB2b2lkCitjaGVja19vYWVwICh2b2lkKQoreworI2luY2x1ZGUgInBrY3MxdjItb2FlcC5oIgorICBncGdfZXJyb3JfdCBlcnI7CisgIGludCB0bm8sIG1ubzsKKworICBmb3IgKHRubyA9IDA7IHRubyA8IERJTSAodGJsKTsgdG5vKyspCisgICAgeworICAgICAgdm9pZCAqcnNhX24sICpyc2FfZSwgKnJzYV9kOworICAgICAgc2l6ZV90IHJzYV9uX2xlbiwgcnNhX2VfbGVuLCByc2FfZF9sZW47CisgICAgICBnY3J5X3NleHBfdCBzZWNfa2V5LCBwdWJfa2V5OworCisgICAgICBpZiAodmVyYm9zZSA+IDEpCisgICAgICAgIGluZm8gKCIoJXMpXG4iLCB0YmxbdG5vXS5kZXNjKTsKKworICAgICAgcnNhX24gPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5uLCAmcnNhX25fbGVuKTsKKyAgICAgIHJzYV9lID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10uZSwgJnJzYV9lX2xlbik7CisgICAgICByc2FfZCA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLmQsICZyc2FfZF9sZW4pOworICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc2VjX2tleSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwcml2YXRlLWtleSAocnNhIChuICViKShlICViKShkICViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2Ffbl9sZW4sIHJzYV9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9lX2xlbiwgcnNhX2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX2RfbGVuLCByc2FfZCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgcHJpdmF0ZSBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnB1Yl9rZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIocHVibGljLWtleSAocnNhIChuICViKShlICViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2Ffbl9sZW4sIHJzYV9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9lX2xlbiwgcnNhX2UpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHB1YmxpYyBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfZnJlZSAocnNhX24pOworICAgICAgZ2NyeV9mcmVlIChyc2FfZSk7CisgICAgICBnY3J5X2ZyZWUgKHJzYV9kKTsKKworICAgICAgZm9yIChtbm8gPSAwOyBtbm8gPCBESU0gKHRibFswXS5tKTsgbW5vKyspCisgICAgICAgIHsKKyAgICAgICAgICB2b2lkICptZXNnLCAqc2VlZCwgKmVuY3I7CisgICAgICAgICAgc2l6ZV90IG1lc2dfbGVuLCBzZWVkX2xlbiwgZW5jcl9sZW47CisgICAgICAgICAgZ2NyeV9zZXhwX3QgcGxhaW4sIGNpcGg7CisKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGluZm8gKCJydW5uaW5nIHRlc3Q6ICVzXG4iLCB0YmxbdG5vXS5tW21ub10uZGVzYyk7CisKKyAgICAgICAgICBtZXNnID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubVttbm9dLm1lc2csICZtZXNnX2xlbik7CisgICAgICAgICAgc2VlZCA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5zZWVkLCAmc2VlZF9sZW4pOworCisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmcGxhaW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEgKGZsYWdzIG9hZXApKGhhc2gtYWxnbyBzaGExKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIodmFsdWUgJWIpKHJhbmRvbS1vdmVycmlkZSAlYikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpbWVzZ19sZW4sIG1lc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNlZWRfbGVuLCBzZWVkKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHBsYWluIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnY3J5X2ZyZWUgKG1lc2cpOworICAgICAgICAgIGdjcnlfZnJlZSAoc2VlZCk7CisKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX2VuY3J5cHQgKCZjaXBoLCBwbGFpbiwgcHViX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgicGxhaW46XG4iLCBjaXBoKTsKKyAgICAgICAgICAgICAgZmFpbCAoImdjcnlfcGtfZW5jcnlwdCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGV4dHJhY3RfY21wX2RhdGEgKGNpcGgsICJhIiwgdGJsW3Rub10ubVttbm9dLmVuY3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxbdG5vXS5tW21ub10uZGVzYykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc2hvd19zZXhwICgiZW5jcnlwdCByZXN1bHQ6XG4iLCBjaXBoKTsKKyAgICAgICAgICAgICAgICAgIGZhaWwgKCJtaXNtYXRjaCBpbiBnY3J5X3BrX2VuY3J5cHRcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGNpcGgpOworICAgICAgICAgICAgICBjaXBoID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocGxhaW4pOworICAgICAgICAgIHBsYWluID0gTlVMTDsKKworICAgICAgICAgIC8qIE5vdyB0ZXN0IHRoZSBkZWNyeXB0aW9uLiAgKi8KKyAgICAgICAgICBzZWVkID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubVttbm9dLnNlZWQsICZzZWVkX2xlbik7CisgICAgICAgICAgZW5jciA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5lbmNyLCAmZW5jcl9sZW4pOworCisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmY2lwaCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZW5jLXZhbCAoZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvIHNoYTEpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihyYW5kb20tb3ZlcnJpZGUgJWIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihyc2EgKGEgJWIpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzZWVkX2xlbiwgc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZW5jcl9sZW4sIGVuY3IpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgY2lwaGVyIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnY3J5X2ZyZWUgKGVuY3IpOworICAgICAgICAgIGdjcnlfZnJlZSAoc2VlZCk7CisKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX2RlY3J5cHQgKCZwbGFpbiwgY2lwaCwgc2VjX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgiY2lwaDpcbiIsIGNpcGgpOworICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19kZWNyeXB0IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXh0cmFjdF9jbXBfZGF0YSAocGxhaW4sICJ2YWx1ZSIsIHRibFt0bm9dLm1bbW5vXS5tZXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsW3Rub10ubVttbm9dLmRlc2MpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoImRlY3J5cHQgcmVzdWx0OlxuIiwgcGxhaW4pOworICAgICAgICAgICAgICAgICAgZmFpbCAoIm1pc21hdGNoIGluIGdjcnlfcGtfZGVjcnlwdFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocGxhaW4pOworICAgICAgICAgICAgICBwbGFpbiA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGNpcGgpOworICAgICAgICAgIGNpcGggPSBOVUxMOworICAgICAgICB9CisKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5KTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwdWJfa2V5KTsKKyAgICB9Cit9CisKKworLyogQ2hlY2sgYWdhaW5zdCB0aGUgUFNTIHRlc3QgdmVjdG9ycyBmcm9tCisgICBmdHA6Ly9mdHAucnNhc2VjdXJpdHkuY29tL3B1Yi9wa2NzL3BrY3MtMS9wa2NzLTF2Mi0xZDItdmVjLnppcCAuICAqLworc3RhdGljIHZvaWQKK2NoZWNrX3BzcyAodm9pZCkKK3sKKyNpbmNsdWRlICJwa2NzMXYyLXBzcy5oIgorICBncGdfZXJyb3JfdCBlcnI7CisgIGludCB0bm8sIG1ubzsKKworICBmb3IgKHRubyA9IDA7IHRubyA8IERJTSAodGJsKTsgdG5vKyspCisgICAgeworICAgICAgdm9pZCAqcnNhX24sICpyc2FfZSwgKnJzYV9kOworICAgICAgc2l6ZV90IHJzYV9uX2xlbiwgcnNhX2VfbGVuLCByc2FfZF9sZW47CisgICAgICBnY3J5X3NleHBfdCBzZWNfa2V5LCBwdWJfa2V5OworCisgICAgICBpZiAodmVyYm9zZSA+IDEpCisgICAgICAgIGluZm8gKCIoJXMpXG4iLCB0YmxbdG5vXS5kZXNjKTsKKworICAgICAgcnNhX24gPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5uLCAmcnNhX25fbGVuKTsKKyAgICAgIHJzYV9lID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10uZSwgJnJzYV9lX2xlbik7CisgICAgICByc2FfZCA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLmQsICZyc2FfZF9sZW4pOworICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc2VjX2tleSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwcml2YXRlLWtleSAocnNhIChuICViKShlICViKShkICViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2Ffbl9sZW4sIHJzYV9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9lX2xlbiwgcnNhX2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX2RfbGVuLCByc2FfZCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgcHJpdmF0ZSBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnB1Yl9rZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIocHVibGljLWtleSAocnNhIChuICViKShlICViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2Ffbl9sZW4sIHJzYV9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9lX2xlbiwgcnNhX2UpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHB1YmxpYyBrZXkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfZnJlZSAocnNhX24pOworICAgICAgZ2NyeV9mcmVlIChyc2FfZSk7CisgICAgICBnY3J5X2ZyZWUgKHJzYV9kKTsKKworICAgICAgZm9yIChtbm8gPSAwOyBtbm8gPCBESU0gKHRibFswXS5tKTsgbW5vKyspCisgICAgICAgIHsKKyAgICAgICAgICB2b2lkICptZXNnLCAqc2FsdCwgKnNpZ247CisgICAgICAgICAgc2l6ZV90IG1lc2dfbGVuLCBzYWx0X2xlbiwgc2lnbl9sZW47CisgICAgICAgICAgZ2NyeV9zZXhwX3Qgc2lndG1wbCwgc2lnOworICAgICAgICAgIGNoYXIgbWhhc2hbMjBdOworCisgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBpbmZvICgicnVubmluZyB0ZXN0OiAlc1xuIiwgdGJsW3Rub10ubVttbm9dLmRlc2MpOworCisgICAgICAgICAgbWVzZyA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5tZXNnLCAmbWVzZ19sZW4pOworICAgICAgICAgIHNhbHQgPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5tW21ub10uc2FsdCwgJnNhbHRfbGVuKTsKKworICAgICAgICAgIGdjcnlfbWRfaGFzaF9idWZmZXIgKEdDUllfTURfU0hBMSwgbWhhc2gsIG1lc2csIG1lc2dfbGVuKTsKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzaWd0bXBsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihkYXRhIChmbGFncyBwc3MpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihoYXNoIHNoYTEgJWIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihyYW5kb20tb3ZlcnJpZGUgJWIpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgbWhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNhbHRfbGVuLCBzYWx0KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHNpZyB0ZW1wbGF0ZSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfZnJlZSAobWVzZyk7CisgICAgICAgICAgZ2NyeV9mcmVlIChzYWx0KTsKKworICAgICAgICAgIGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgc2lndG1wbCwgc2VjX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgic2lndG1wbDpcbiIsIHNpZ3RtcGwpOworICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19zaWduIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXh0cmFjdF9jbXBfZGF0YSAoc2lnLCAicyIsIHRibFt0bm9dLm1bbW5vXS5zaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsW3Rub10ubVttbm9dLmRlc2MpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZ24gcmVzdWx0OlxuIiwgc2lnKTsKKyAgICAgICAgICAgICAgICAgIGZhaWwgKCJtaXNtYXRjaCBpbiBnY3J5X3BrX3NpZ25cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgICAgIHNpZyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZ3RtcGwpOworICAgICAgICAgIHNpZ3RtcGwgPSBOVUxMOworCisgICAgICAgICAgLyogTm93IHRlc3QgdGhlIHZlcmlmaWNhdGlvbi4gICovCisgICAgICAgICAgc2FsdCA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5zYWx0LCAmc2FsdF9sZW4pOworICAgICAgICAgIHNpZ24gPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5tW21ub10uc2lnbiwgJnNpZ25fbGVuKTsKKworICAgICAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNpZywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2lnLXZhbChyc2EocyAlYikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpZ25fbGVuLCBzaWduKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHZlcmlmeSBkYXRhIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc2lndG1wbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgcHNzKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaGFzaCBzaGExICViKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIocmFuZG9tLW92ZXJyaWRlICViKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAsIG1oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzYWx0X2xlbiwgc2FsdCk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIGRpZSAoImNvbnN0cnVjdGluZyB2ZXJpZnkgdG1wbCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfZnJlZSAoc2lnbik7CisgICAgICAgICAgZ2NyeV9mcmVlIChzYWx0KTsKKworICAgICAgICAgIGVyciA9IGdjcnlfcGtfdmVyaWZ5IChzaWcsIHNpZ3RtcGwsIHB1Yl9rZXkpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZzpcbiIsIHNpZyk7CisgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZ3RtcGw6XG4iLCBzaWd0bXBsKTsKKyAgICAgICAgICAgICAgZmFpbCAoImdjcnlfcGtfdmVyaWZ5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgc2lnID0gTlVMTDsKKyAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2lndG1wbCk7CisgICAgICAgICAgc2lndG1wbCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNlY19rZXkpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHB1Yl9rZXkpOworICAgIH0KK30KKworCisvKiBDaGVjayBhZ2FpbnN0IFBLQ1MjMSB2MS41IGVuY3J5cHRpb24gdGVzdCAgdmVjdG9ycyBhcyBmb3VuZCBhdAorICAgZnRwOi8vZnRwLnJzYS5jb20vcHViL3JzYWxhYnMvdG1wL3BrY3MxdjE1Y3J5cHQtdmVjdG9ycy50eHQgLiAgKi8KK3N0YXRpYyB2b2lkCitjaGVja192MTVjcnlwdCAodm9pZCkKK3sKKyNpbmNsdWRlICJwa2NzMXYyLXYxNWMuaCIKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBpbnQgdG5vLCBtbm87CisKKyAgZm9yICh0bm8gPSAwOyB0bm8gPCBESU0gKHRibCk7IHRubysrKQorICAgIHsKKyAgICAgIHZvaWQgKnJzYV9uLCAqcnNhX2UsICpyc2FfZDsKKyAgICAgIHNpemVfdCByc2Ffbl9sZW4sIHJzYV9lX2xlbiwgcnNhX2RfbGVuOworICAgICAgZ2NyeV9zZXhwX3Qgc2VjX2tleSwgcHViX2tleTsKKworICAgICAgaWYgKHZlcmJvc2UgPiAxKQorICAgICAgICBpbmZvICgiKCVzKVxuIiwgdGJsW3Rub10uZGVzYyk7CisKKyAgICAgIHJzYV9uID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubiwgJnJzYV9uX2xlbik7CisgICAgICByc2FfZSA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLmUsICZyc2FfZV9sZW4pOworICAgICAgcnNhX2QgPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5kLCAmcnNhX2RfbGVuKTsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNlY19rZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIocHJpdmF0ZS1rZXkgKHJzYSAobiAlYikoZSAlYikoZCAlYikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX25fbGVuLCByc2FfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2FfZV9sZW4sIHJzYV9lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9kX2xlbiwgcnNhX2QpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHByaXZhdGUga2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZwdWJfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHB1YmxpYy1rZXkgKHJzYSAobiAlYikoZSAlYikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX25fbGVuLCByc2FfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2FfZV9sZW4sIHJzYV9lKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoImNvbnN0cnVjdGluZyBwdWJsaWMga2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2ZyZWUgKHJzYV9uKTsKKyAgICAgIGdjcnlfZnJlZSAocnNhX2UpOworICAgICAgZ2NyeV9mcmVlIChyc2FfZCk7CisKKyAgICAgIGZvciAobW5vID0gMDsgbW5vIDwgRElNICh0YmxbMF0ubSk7IG1ubysrKQorICAgICAgICB7CisgICAgICAgICAgdm9pZCAqbWVzZywgKnNlZWQsICplbmNyOworICAgICAgICAgIHNpemVfdCBtZXNnX2xlbiwgc2VlZF9sZW4sIGVuY3JfbGVuOworICAgICAgICAgIGdjcnlfc2V4cF90IHBsYWluLCBjaXBoOworCisgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBpbmZvICgicnVubmluZyB0ZXN0OiAlc1xuIiwgdGJsW3Rub10ubVttbm9dLmRlc2MpOworCisgICAgICAgICAgbWVzZyA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5tZXNnLCAmbWVzZ19sZW4pOworICAgICAgICAgIHNlZWQgPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5tW21ub10uc2VlZCwgJnNlZWRfbGVuKTsKKworICAgICAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnBsYWluLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihkYXRhIChmbGFncyBwa2NzMSkoaGFzaC1hbGdvIHNoYTEpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIih2YWx1ZSAlYikocmFuZG9tLW92ZXJyaWRlICViKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCltZXNnX2xlbiwgbWVzZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2VlZF9sZW4sIHNlZWQpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgcGxhaW4gZGF0YSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfZnJlZSAobWVzZyk7CisgICAgICAgICAgZ2NyeV9mcmVlIChzZWVkKTsKKworICAgICAgICAgIGVyciA9IGdjcnlfcGtfZW5jcnlwdCAoJmNpcGgsIHBsYWluLCBwdWJfa2V5KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaG93X3NleHAgKCJwbGFpbjpcbiIsIGNpcGgpOworICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19lbmNyeXB0IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXh0cmFjdF9jbXBfZGF0YSAoY2lwaCwgImEiLCB0YmxbdG5vXS5tW21ub10uZW5jciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibFt0bm9dLm1bbW5vXS5kZXNjKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaG93X3NleHAgKCJlbmNyeXB0IHJlc3VsdDpcbiIsIGNpcGgpOworICAgICAgICAgICAgICAgICAgZmFpbCAoIm1pc21hdGNoIGluIGdjcnlfcGtfZW5jcnlwdFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoY2lwaCk7CisgICAgICAgICAgICAgIGNpcGggPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwbGFpbik7CisgICAgICAgICAgcGxhaW4gPSBOVUxMOworCisgICAgICAgICAgLyogTm93IHRlc3QgdGhlIGRlY3J5cHRpb24uICAqLworICAgICAgICAgIHNlZWQgPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5tW21ub10uc2VlZCwgJnNlZWRfbGVuKTsKKyAgICAgICAgICBlbmNyID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubVttbm9dLmVuY3IsICZlbmNyX2xlbik7CisKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZjaXBoLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihlbmMtdmFsIChmbGFncyBwa2NzMSkoaGFzaC1hbGdvIHNoYTEpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihyYW5kb20tb3ZlcnJpZGUgJWIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihyc2EgKGEgJWIpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzZWVkX2xlbiwgc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZW5jcl9sZW4sIGVuY3IpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgY2lwaGVyIGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBnY3J5X2ZyZWUgKGVuY3IpOworICAgICAgICAgIGdjcnlfZnJlZSAoc2VlZCk7CisKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX2RlY3J5cHQgKCZwbGFpbiwgY2lwaCwgc2VjX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgiY2lwaDpcbiIsIGNpcGgpOworICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19kZWNyeXB0IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXh0cmFjdF9jbXBfZGF0YSAocGxhaW4sICJ2YWx1ZSIsIHRibFt0bm9dLm1bbW5vXS5tZXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsW3Rub10ubVttbm9dLmRlc2MpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoImRlY3J5cHQgcmVzdWx0OlxuIiwgcGxhaW4pOworICAgICAgICAgICAgICAgICAgZmFpbCAoIm1pc21hdGNoIGluIGdjcnlfcGtfZGVjcnlwdFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocGxhaW4pOworICAgICAgICAgICAgICBwbGFpbiA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGNpcGgpOworICAgICAgICAgIGNpcGggPSBOVUxMOworICAgICAgICB9CisKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5KTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwdWJfa2V5KTsKKyAgICB9Cit9CisKKworLyogQ2hlY2sgYWdhaW5zdCBQS0NTIzEgdjEuNSBzaWduYXR1cmUgdGVzdCB2ZWN0b3JzIGFzIGZvdW5kIGF0CisgICBmdHA6Ly9mdHAucnNhLmNvbS9wdWIvcnNhbGFicy90bXAvcGtjczF2MTVzaWduLXZlY3RvcnMudHh0IC4gICovCitzdGF0aWMgdm9pZAorY2hlY2tfdjE1c2lnbiAodm9pZCkKK3sKKyNpbmNsdWRlICJwa2NzMXYyLXYxNXMuaCIKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBpbnQgdG5vLCBtbm87CisKKyAgZm9yICh0bm8gPSAwOyB0bm8gPCBESU0gKHRibCk7IHRubysrKQorICAgIHsKKyAgICAgIHZvaWQgKnJzYV9uLCAqcnNhX2UsICpyc2FfZDsKKyAgICAgIHNpemVfdCByc2Ffbl9sZW4sIHJzYV9lX2xlbiwgcnNhX2RfbGVuOworICAgICAgZ2NyeV9zZXhwX3Qgc2VjX2tleSwgcHViX2tleTsKKworICAgICAgaWYgKHZlcmJvc2UgPiAxKQorICAgICAgICBpbmZvICgiKCVzKVxuIiwgdGJsW3Rub10uZGVzYyk7CisKKyAgICAgIHJzYV9uID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubiwgJnJzYV9uX2xlbik7CisgICAgICByc2FfZSA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLmUsICZyc2FfZV9sZW4pOworICAgICAgcnNhX2QgPSBkYXRhX2Zyb21faGV4ICh0YmxbdG5vXS5kLCAmcnNhX2RfbGVuKTsKKyAgICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNlY19rZXksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIocHJpdmF0ZS1rZXkgKHJzYSAobiAlYikoZSAlYikoZCAlYikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX25fbGVuLCByc2FfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2FfZV9sZW4sIHJzYV9lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJzYV9kX2xlbiwgcnNhX2QpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZGllICgiY29uc3RydWN0aW5nIHByaXZhdGUga2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZwdWJfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHB1YmxpYy1rZXkgKHJzYSAobiAlYikoZSAlYikpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcnNhX25fbGVuLCByc2FfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyc2FfZV9sZW4sIHJzYV9lKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoImNvbnN0cnVjdGluZyBwdWJsaWMga2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X2ZyZWUgKHJzYV9uKTsKKyAgICAgIGdjcnlfZnJlZSAocnNhX2UpOworICAgICAgZ2NyeV9mcmVlIChyc2FfZCk7CisKKyAgICAgIGZvciAobW5vID0gMDsgbW5vIDwgRElNICh0YmxbMF0ubSk7IG1ubysrKQorICAgICAgICB7CisgICAgICAgICAgdm9pZCAqbWVzZywgKnNpZ247CisgICAgICAgICAgc2l6ZV90IG1lc2dfbGVuLCBzaWduX2xlbjsKKyAgICAgICAgICBnY3J5X3NleHBfdCBzaWd0bXBsLCBzaWc7CisgICAgICAgICAgY2hhciBtaGFzaFsyMF07CisKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGluZm8gKCJydW5uaW5nIHRlc3Q6ICVzXG4iLCB0YmxbdG5vXS5tW21ub10uZGVzYyk7CisKKyAgICAgICAgICBtZXNnID0gZGF0YV9mcm9tX2hleCAodGJsW3Rub10ubVttbm9dLm1lc2csICZtZXNnX2xlbik7CisKKyAgICAgICAgICBnY3J5X21kX2hhc2hfYnVmZmVyIChHQ1JZX01EX1NIQTEsIG1oYXNoLCBtZXNnLCBtZXNnX2xlbik7CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc2lndG1wbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgcGtjczEpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihoYXNoIHNoYTEgJWIpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgbWhhc2gpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb25zdHJ1Y3Rpbmcgc2lnIHRlbXBsYXRlIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgZ2NyeV9mcmVlIChtZXNnKTsKKworICAgICAgICAgIGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgc2lndG1wbCwgc2VjX2tleSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd19zZXhwICgic2lndG1wbDpcbiIsIHNpZ3RtcGwpOworICAgICAgICAgICAgICBmYWlsICgiZ2NyeV9wa19zaWduIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXh0cmFjdF9jbXBfZGF0YSAoc2lnLCAicyIsIHRibFt0bm9dLm1bbW5vXS5zaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsW3Rub10ubVttbm9dLmRlc2MpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNob3dfc2V4cCAoInNpZ24gcmVzdWx0OlxuIiwgc2lnKTsKKyAgICAgICAgICAgICAgICAgIGZhaWwgKCJtaXNtYXRjaCBpbiBnY3J5X3BrX3NpZ25cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgICAgICAgICAgICAgIHNpZyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZ3RtcGwpOworICAgICAgICAgIHNpZ3RtcGwgPSBOVUxMOworCisgICAgICAgICAgLyogTm93IHRlc3QgdGhlIHZlcmlmaWNhdGlvbi4gICovCisgICAgICAgICAgc2lnbiA9IGRhdGFfZnJvbV9oZXggKHRibFt0bm9dLm1bbW5vXS5zaWduLCAmc2lnbl9sZW4pOworCisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc2lnLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzaWctdmFsKHJzYShzICViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2lnbl9sZW4sIHNpZ24pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBkaWUgKCJjb25zdHJ1Y3RpbmcgdmVyaWZ5IGRhdGEgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzaWd0bXBsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihkYXRhIChmbGFncyBwa2NzMSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGhhc2ggc2hhMSAlYikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCBtaGFzaCk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIGRpZSAoImNvbnN0cnVjdGluZyB2ZXJpZnkgdG1wbCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgIGdjcnlfZnJlZSAoc2lnbik7CisKKyAgICAgICAgICBlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBzaWd0bXBsLCBwdWJfa2V5KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaG93X3NleHAgKCJzaWc6XG4iLCBzaWcpOworICAgICAgICAgICAgICBzaG93X3NleHAgKCJzaWd0bXBsOlxuIiwgc2lndG1wbCk7CisgICAgICAgICAgICAgIGZhaWwgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICAgICAgfQorICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzaWcpOworICAgICAgICAgIHNpZyA9IE5VTEw7CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZ3RtcGwpOworICAgICAgICAgIHNpZ3RtcGwgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5KTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChwdWJfa2V5KTsKKyAgICB9Cit9CisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBsYXN0X2FyZ2MgPSAtMTsKKyAgaW50IGRlYnVnID0gMDsKKyAgaW50IHJ1bl9vYWVwID0gMDsKKyAgaW50IHJ1bl9wc3MgPSAwOworICBpbnQgcnVuX3YxNWMgPSAwOworICBpbnQgcnVuX3YxNXMgPSAwOworCisgIGlmIChhcmdjKQorICAgIHsgYXJnYy0tOyBhcmd2Kys7IH0KKworICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcmJvc2UiKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UrKzsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWRlYnVnIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlID0gMjsKKyAgICAgICAgICBkZWJ1ZyA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1kaWUiKSkKKyAgICAgICAgeworICAgICAgICAgIGRpZV9vbl9lcnJvciA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1vYWVwIikpCisgICAgICAgIHsKKyAgICAgICAgICBydW5fb2FlcCA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wc3MiKSkKKyAgICAgICAgeworICAgICAgICAgIHJ1bl9wc3MgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdjE1YyIpKQorICAgICAgICB7CisgICAgICAgICAgcnVuX3YxNWMgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdjE1cyIpKQorICAgICAgICB7CisgICAgICAgICAgcnVuX3YxNXMgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgfQorCisgIGlmICghcnVuX29hZXAgJiYgIXJ1bl9wc3MgJiYgIXJ1bl92MTVjICYmICFydW5fdjE1cykKKyAgICBydW5fb2FlcCA9IHJ1bl9wc3MgPSBydW5fdjE1YyA9IHJ1bl92MTVzID0gMTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1ZFUkJPU0lUWSwgKGludCl2ZXJib3NlKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKCIxLjUuMCIpKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworICAvKiBObyB2YWx1YWJsZSBrZXlzIGFyZSBjcmVhdGUsIHNvIHdlIGNhbiBzcGVlZCB1cCBvdXIgUk5HLiAqLworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisKKyAgaWYgKHJ1bl9vYWVwKQorICAgIGNoZWNrX29hZXAgKCk7CisgIGlmIChydW5fcHNzKQorICAgIGNoZWNrX3BzcyAoKTsKKyAgaWYgKHJ1bl92MTVjKQorICAgIGNoZWNrX3YxNWNyeXB0ICgpOworICBpZiAocnVuX3YxNXMpCisgICAgY2hlY2tfdjE1c2lnbiAoKTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQuICBFcnJvcnM6ICVpXG4iLCBlcnJvcl9jb3VudCk7CisKKyAgcmV0dXJuIGVycm9yX2NvdW50ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9wcmltZS5jIGIvdGVzdHMvcHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTgwMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJpbWUuYwpAQCAtMCwwICsxLDI1NCBAQAorLyogcHJpbWUuYyAtIHBhcnQgb2YgdGhlIExpYmdjcnlwdCB0ZXN0IHN1aXRlLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX3ByaW1lcyAodm9pZCkKK3sKKyAgZ2NyeV9lcnJvcl90IGVyciA9IEdQR19FUlJfTk9fRVJST1I7CisgIGdjcnlfbXBpX3QgKmZhY3RvcnMgPSBOVUxMOworICBnY3J5X21waV90IHByaW1lID0gTlVMTDsKKyAgZ2NyeV9tcGlfdCBnOworICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgIHN0cnVjdCBwcmltZV9zcGVjCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgcHJpbWVfYml0czsKKyAgICB1bnNpZ25lZCBpbnQgZmFjdG9yX2JpdHM7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOworICB9IHByaW1lX3NwZWNzW10gPQorICAgIHsKKyAgICAgIHsgMTAyNCwgMTAwLCBHQ1JZX1BSSU1FX0ZMQUdfU1BFQ0lBTF9GQUNUT1IgfSwKKyAgICAgIHsgMTI4LCAwLCAwIH0sCisgICAgICB7IDAgfSwKKyAgICB9OworCisgIGZvciAoaSA9IDA7IHByaW1lX3NwZWNzW2ldLnByaW1lX2JpdHM7IGkrKykKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X3ByaW1lX2dlbmVyYXRlICgmcHJpbWUsCisJCQkJIHByaW1lX3NwZWNzW2ldLnByaW1lX2JpdHMsCisJCQkJIHByaW1lX3NwZWNzW2ldLmZhY3Rvcl9iaXRzLAorCQkJCSAmZmFjdG9ycywKKwkJCQkgTlVMTCwgTlVMTCwKKwkJCQkgR0NSWV9XRUFLX1JBTkRPTSwKKwkJCQkgcHJpbWVfc3BlY3NbaV0uZmxhZ3MpOworICAgICAgYXNzZXJ0ICghIGVycik7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgInRlc3QgJWQ6IHAgPSAiLCBpKTsKKyAgICAgICAgICBnY3J5X21waV9kdW1wIChwcmltZSk7CisgICAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X3ByaW1lX2NoZWNrIChwcmltZSwgMCk7CisgICAgICBhc3NlcnQgKCEgZXJyKTsKKworICAgICAgZXJyID0gZ2NyeV9wcmltZV9ncm91cF9nZW5lcmF0b3IgKCZnLCBwcmltZSwgZmFjdG9ycywgTlVMTCk7CisgICAgICBhc3NlcnQgKCFlcnIpOworICAgICAgZ2NyeV9wcmltZV9yZWxlYXNlX2ZhY3RvcnMgKGZhY3RvcnMpOyBmYWN0b3JzID0gTlVMTDsKKworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgICVkOiBnID0gIiwgaSk7CisgICAgICAgICAgZ2NyeV9tcGlfZHVtcCAoZyk7CisgICAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgfQorICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoZyk7CisKKworICAgICAgZ2NyeV9tcGlfYWRkX3VpIChwcmltZSwgcHJpbWUsIDEpOworICAgICAgZXJyID0gZ2NyeV9wcmltZV9jaGVjayAocHJpbWUsIDApOworICAgICAgYXNzZXJ0IChlcnIpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAocHJpbWUpOyBwcmltZSA9IE5VTEw7CisgICAgfQorfQorCisKKy8qIFByaW50IGFuIE1QSSBTLWV4cHJlc3Npb24uICAqLworc3RhdGljIHZvaWQKK3ByaW50X21waSAoY29uc3QgY2hhciAqbmFtZSwgZ2NyeV9tcGlfdCBhKQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICB1bnNpZ25lZCBjaGFyICpidWY7CisgIGludCB3cml0ZXJyID0gMDsKKworICBlcnIgPSBnY3J5X21waV9hcHJpbnQgKEdDUllNUElfRk1UX0hFWCwgJmJ1ZiwgTlVMTCwgYSk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9tcGlfYXByaW50IGZhaWxlZDogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKGVycikpOworCisgIHByaW50ZiAoIiAgKCVzICMlcyMpXG4iLCBuYW1lLCBidWYpOworICBpZiAoZmVycm9yIChzdGRvdXQpKQorICAgIHdyaXRlcnIrKzsKKyAgaWYgKCF3cml0ZXJyICYmIGZmbHVzaCAoc3Rkb3V0KSA9PSBFT0YpCisgICAgd3JpdGVycisrOworICBpZiAod3JpdGVycikKKyAgICBkaWUgKCJ3cml0aW5nIG91dHB1dCBmYWlsZWRcbiIpOworICBnY3J5X2ZyZWUgKGJ1Zik7Cit9CisKKworLyogQ3JlYXRlIHRoZSBrZXkgZm9yIG91ciBwdWJsaWMgc3RhbmRhcmQgZHVtbXkgQ0EuICAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV80MnByaW1lICh2b2lkKQoreworICBnY3J5X2Vycm9yX3QgZXJyOworICBjaGFyIHN0cmluZ1sxMjgqMisxXTsKKyAgaW50IGk7CisgIGdjcnlfbXBpX3Qgc3RhcnQgPSBOVUxMOworICBnY3J5X21waV90IHAsIHEsIG4sIHQxLCB0MiwgcGhpLCBmLCBnLCBlLCBkLCB1OworCisKKyAgLyogT3VyIHN0YXJ0IHZhbHVlIGlzIGEgc3RyaW5nIG9mIDB4NDIgdmFsdWVzLCB3aXRoIHRoZSBleGNlcHRpb24KKyAgICAgdGhhdCB0aGUgdHdvIGhpZ2ggb3JkZXIgYml0cyBhcmUgc2V0LiAgVGhpcyBpcyB0byByZXNlbWJsZSB0aGUKKyAgICAgd2F5IExpbmdjcnlwdCBnZW5lcmF0ZXMgUlNBIHByaW1lcy4gICovCisgIGZvciAoaT0wOyBpIDwgMTI4OykKKyAgICB7CisgICAgICBzdHJpbmdbaSsrXSA9ICc0JzsKKyAgICAgIHN0cmluZ1tpKytdID0gJzInOworICAgIH0KKyAgc3RyaW5nW2ldID0gMDsKKyAgc3RyaW5nWzBdID0gJ0MnOworCisgIGVyciA9IGdjcnlfbXBpX3NjYW4gKCZzdGFydCwgR0NSWU1QSV9GTVRfSEVYLCBzdHJpbmcsIDAsIE5VTEwpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbXBpX3NjYW4gZmFpbGVkOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAoZXJyKSk7CisgIGZwdXRzICgic3RhcnQ6Iiwgc3RkZXJyKTsgZ2NyeV9tcGlfZHVtcCAoc3RhcnQpOyBwdXRjICgnXG4nLCBzdGRlcnIpOworCisgIC8qIEdlbmVyYXRlIHR3byBwcmltZXMgd2l0aCBwIDwgcS4gIFdlIHRha2UgdGhlIGZpcnN0IHByaW1lcyBiZWxvdworICAgICBhbmQgYWJvdmUgYSBzdGFydCB2YWx1ZS4gKi8KKyAgcCA9IGdjcnlfbXBpX2NvcHkgKHN0YXJ0KTsKKyAgZ2NyeV9tcGlfc3ViX3VpIChwLCBwLCAxKTsKKyAgd2hpbGUgKGdjcnlfcHJpbWVfY2hlY2sgKHAsIDApKQorICAgIGdjcnlfbXBpX3N1Yl91aSAocCwgcCwgMik7CisgIGZwdXRzICgiICAgIHA6Iiwgc3RkZXJyKTsgZ2NyeV9tcGlfZHVtcCAocCk7IHB1dGMgKCdcbicsIHN0ZGVycik7CisgIHEgPSBnY3J5X21waV9jb3B5IChzdGFydCk7CisgIGdjcnlfbXBpX2FkZF91aSAocSwgcSwgMSk7CisgIHdoaWxlIChnY3J5X3ByaW1lX2NoZWNrIChxLCAwKSkKKyAgICBnY3J5X21waV9hZGRfdWkgKHEsIHEsIDIpOworICBmcHV0cyAoIiAgICBxOiIsIHN0ZGVycik7IGdjcnlfbXBpX2R1bXAgKHEpOyBwdXRjICgnXG4nLCBzdGRlcnIpOworCisgIC8qIENvbXB1dGUgdGhlIG1vZHVsdXMuICAqLworICBuID0gZ2NyeV9tcGlfbmV3ICgxMDI0KTsKKyAgZ2NyeV9tcGlfbXVsIChuLCBwLCBxKTsKKyAgZnB1dHMgKCIgICAgbjoiLCBzdGRlcnIpOyBnY3J5X21waV9kdW1wIChuKTsgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgaWYgKGdjcnlfbXBpX2dldF9uYml0cyAobikgIT0gMTAyNCkKKyAgICBkaWUgKCJPb3BzOiB0aGUgc2l6ZSBvZiBOIGlzIG5vdCAxMDI0IGJ1dCAldVxuIiwgZ2NyeV9tcGlfZ2V0X25iaXRzIChuKSk7CisKKyAgLyogQ2FsY3VsYXRlIEV1bGVyIHRvdGllbnQ6IHBoaSA9IChwLTEpKHEtMSkgKi8KKyAgdDEgPSBnY3J5X21waV9uZXcgKDApOworICB0MiA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHBoaSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGcgICA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGYgICA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGdjcnlfbXBpX3N1Yl91aSAodDEsIHAsIDEpOworICBnY3J5X21waV9zdWJfdWkgKHQyLCBxLCAxKTsKKyAgZ2NyeV9tcGlfbXVsIChwaGksIHQxLCB0Mik7CisgIGdjcnlfbXBpX2djZCAoZywgdDEsIHQyKTsKKyAgZ2NyeV9tcGlfZGl2IChmLCBOVUxMLCBwaGksIGcsIC0xKTsKKworICAvKiBDaGVjayB0aGUgcHVibGljIGV4cG9uZW50LiAgKi8KKyAgZSA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgNjU1MzcpOworICBpZiAoIWdjcnlfbXBpX2djZCAodDEsIGUsIHBoaSkpCisgICAgZGllICgiT29wczogRSBpcyBub3QgYSBnZW5lcmF0b3JcbiIpOworICBmcHV0cyAoIiAgICBlOiIsIHN0ZGVycik7IGdjcnlfbXBpX2R1bXAgKGUpOyBwdXRjICgnXG4nLCBzdGRlcnIpOworCisgIC8qIENvbXB1dGUgdGhlIHNlY3JldCBrZXk6ICBkID0gZV4tMSBtb2QgcGhpICovCisgIGQgPSBnY3J5X21waV9uZXcgKDApOworICBnY3J5X21waV9pbnZtIChkLCBlLCBmICk7CisgIGZwdXRzICgiICAgIGQ6Iiwgc3RkZXJyKTsgZ2NyeV9tcGlfZHVtcCAoZCk7IHB1dGMgKCdcbicsIHN0ZGVycik7CisKKyAgLyogQ29tcHV0ZSB0aGUgaW52ZXJzZSBvZiBwIGFuZCBxLiAqLworICB1ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgZ2NyeV9tcGlfaW52bSAodSwgcCwgcSk7CisgIGZwdXRzICgiICAgIHU6Iiwgc3RkZXJyKTsgZ2NyeV9tcGlfZHVtcCAodSk7IHB1dGMgKCdcbicsIHN0ZGVycik7CisKKyAgLyogUHJpbnQgdGhlIFMtZXhwcmVzc2lvbi4gICovCisgIGZwdXRzICgiKHByaXZhdGUta2V5XG4gKHJzYVxuIiwgc3Rkb3V0KTsKKyAgcHJpbnRfbXBpICgibiIsIG4pOworICBwcmludF9tcGkgKCJlIiwgZSk7CisgIHByaW50X21waSAoImQiLCBkKTsKKyAgcHJpbnRfbXBpICgicCIsIHApOworICBwcmludF9tcGkgKCJxIiwgcSk7CisgIHByaW50X21waSAoInUiLCB1KTsKKyAgZnB1dHMgKCIpKVxuIiwgc3Rkb3V0KTsKKworICBnY3J5X21waV9yZWxlYXNlIChwKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG4pOworICBnY3J5X21waV9yZWxlYXNlICh0MSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHQyKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocGhpKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoZik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGcpOworICBnY3J5X21waV9yZWxlYXNlIChlKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoZCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHUpOworfQorCisKKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKyAgaW50IG1vZGU0MiA9IDA7CisKKyAgaWYgKChhcmdjID4gMSkgJiYgKCEgc3RyY21wIChhcmd2WzFdLCAiLS12ZXJib3NlIikpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmICgoYXJnYyA+IDEpICYmICghIHN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSkpCisgICAgdmVyYm9zZSA9IGRlYnVnID0gMTsKKyAgZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAoISBzdHJjbXAgKGFyZ3ZbMV0sICItLTQyIikpKQorICAgIHZlcmJvc2UgPSBkZWJ1ZyA9IG1vZGU0MiA9IDE7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKyAgaWYgKCEgZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfREVCVUdfRkxBR1MsIDF1LCAwKTsKKworICBpZiAobW9kZTQyKQorICAgIGNyZWF0ZV80MnByaW1lICgpOworICBlbHNlCisgICAgY2hlY2tfcHJpbWVzICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcHVia2V5LmMgYi90ZXN0cy9wdWJrZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTVlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHVia2V5LmMKQEAgLTAsMCArMSwxMjAzIEBACisvKiBwdWJrZXkuYyAtIFB1YmxpYyBrZXkgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHRlc3RzCisgKglDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCisjZGVmaW5lIG15X2lzYXNjaWkoYykgKCEoKGMpICYgMHg4MCkpCisjZGVmaW5lIGRpZ2l0cChwKSAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpIChkaWdpdHAgKGEpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdBJyAmJiAqKGEpIDw9ICdGJykgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorI2RlZmluZSB4dG9pXzEocCkgICAoKihwKSA8PSAnOSc/ICgqKHApLSAnMCcpOiBcCisgICAgICAgICAgICAgICAgICAgICAqKHApIDw9ICdGJz8gKCoocCktJ0EnKzEwKTooKihwKS0nYScrMTApKQorI2RlZmluZSB4dG9pXzIocCkgICAoKHh0b2lfMShwKSAqIDE2KSArIHh0b2lfMSgocCkrMSkpCisjZGVmaW5lIERJTSh2KQkJICAgICAoc2l6ZW9mKHYpL3NpemVvZigodilbMF0pKQorI2RlZmluZSBESU1vZih0eXBlLG1lbWJlcikgICBESU0oKCh0eXBlICopMCktPm1lbWJlcikKKworCisvKiBTYW1wbGUgUlNBIGtleXMsIHRha2VuIGZyb20gYmFzaWMuYy4gICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wcml2YXRlX2tleV8xW10gPQorIihwcml2YXRlLWtleVxuIgorIiAob3BlbnBncC1yc2FcbiIKKyIgIChuICMwMGUwY2U5NmY5MGI2YzllMDJmMzkyMmJlYWRhOTNmZTUwYTg3NWVhYzZiY2MxOGJiOWE5Y2YyZTg0OTY1Y2FhIgorICAgICAgIjJkMWZmOTVhN2Y1NDI0NjVjNmMwYzE5ZDI3NmU0NTI2Y2UwNDg4NjhhN2E5MTRmZDM0M2NjM2E4N2RkNzQyOTEiCisgICAgICAiZmZjNTY1NTA2ZDViYmIyNWNiYWM2YTBlMmRkMWY4YmNhYWIwZDRhMjljMmYzN2M5NTBmMzYzNDg0YmYyNjlmNyIKKyAgICAgICI4OTE0NDA0NjRiYWY3OTgyN2UwM2EzNmU3MGI4MTQ5MzhlZWJkYzYzZTk2NDI0N2JlNzVkYzU4YjAxNGI3ZWEyNTEjKVxuIgorIiAgKGUgIzAxMDAwMSMpXG4iCisiICAoZCAjMDQ2MTI5RjI0ODlENzE1NzlCRTBBNzVGRTAyOUJENkNEQjU3NEVCRjU3RUE4QTVCMEZEQTk0MkNBQjk0M0IxMSIKKyAgICAgICI3RDdCQjk1RTVEMjg4NzVFMEY5RkM1RkNDMDZBNzJGNkQ1MDI0NjREQUJERUQ3OEVGNkI3MTYxNzdCODNENUJEIgorICAgICAgIkM1NDNEQzVEM0ZFRDkzMkU1OUY1ODk3RTkyRTZGNThBMEYzMzQyNDEwNkEzQjZGQTJDQkY4Nzc1MTBFNEFDMjEiCisgICAgICAiQzNFRTQ3ODUxRTk3RDEyOTk2MjIyQUMzNTY2RDRDQ0IwQjgzRDE2NDA3NEFCRjdERTY1NUZDMjQ0NkRBMTc4MSMpXG4iCisiICAocCAjMDBlODYxYjcwMGUxN2U4YWZlNjgzN2U3NTEyZTM1YjZjYTExZDBhZTQ3ZDhiODUxNjFjNjdiYWY2NDM3NzIxMyIKKyAgICAgICJmZTUyZDc3MmYyMDM1YjNjYTgzMGFmNDFkOGE0MTIwZTFjMWM3MGQxMmNjMjJmMDBkMjhkMzFkZDQ4YThkNDI0ZjEjKVxuIgorIiAgKHEgIzAwZjdhN2NhNTM2N2M2NjFmOGU2MmRmMzRmMGQwNWMxMGM4OGU1NDkyMzQ4ZGQ3YmRkYzk0MmM5YThmMzY5ZjkiCisgICAgICAiMzVhMDc3ODVkMmRiODA1MjE1ZWQ3ODZlNDI4NWRmMTY1OGVlZDNjZTg0ZjQ2OWI4MWI1MGQzNTg0MDdiNGFkMzYxIylcbiIKKyIgICh1ICMzMDQ1NTlhOWVhZDU2ZDIzMDlkMjAzODExYTY0MWJiMWEwOTYyNmJjOGViMzZmZmZhMjNjOTY4ZWM1YmQ4OTFlIgorICAgICAgImViYmFmYzczYWU2NjZlMDFiYTdjODk5MGJhZTA2Y2MyYmJlMTBiNzVlNjlmY2FjYjM1M2E2NDczMDc5ZDhlOWIjKVxuIgorIiApXG4iCisiKVxuIjsKKworLyogVGhlIHNhbWUga2V5IGFzIGFib3ZlIGJ1dCB3aXRob3V0IHAsIHEgYW5kIHUgdG8gdGVzdCB0aGUgbm9uIENSVCBjYXNlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX3ByaXZhdGVfa2V5XzFfMVtdID0KKyIocHJpdmF0ZS1rZXlcbiIKKyIgKG9wZW5wZ3AtcnNhXG4iCisiICAobiAjMDBlMGNlOTZmOTBiNmM5ZTAyZjM5MjJiZWFkYTkzZmU1MGE4NzVlYWM2YmNjMThiYjlhOWNmMmU4NDk2NWNhYSIKKyAgICAgICIyZDFmZjk1YTdmNTQyNDY1YzZjMGMxOWQyNzZlNDUyNmNlMDQ4ODY4YTdhOTE0ZmQzNDNjYzNhODdkZDc0MjkxIgorICAgICAgImZmYzU2NTUwNmQ1YmJiMjVjYmFjNmEwZTJkZDFmOGJjYWFiMGQ0YTI5YzJmMzdjOTUwZjM2MzQ4NGJmMjY5ZjciCisgICAgICAiODkxNDQwNDY0YmFmNzk4MjdlMDNhMzZlNzBiODE0OTM4ZWViZGM2M2U5NjQyNDdiZTc1ZGM1OGIwMTRiN2VhMjUxIylcbiIKKyIgIChlICMwMTAwMDEjKVxuIgorIiAgKGQgIzA0NjEyOUYyNDg5RDcxNTc5QkUwQTc1RkUwMjlCRDZDREI1NzRFQkY1N0VBOEE1QjBGREE5NDJDQUI5NDNCMTEiCisgICAgICAiN0Q3QkI5NUU1RDI4ODc1RTBGOUZDNUZDQzA2QTcyRjZENTAyNDY0REFCREVENzhFRjZCNzE2MTc3QjgzRDVCRCIKKyAgICAgICJDNTQzREM1RDNGRUQ5MzJFNTlGNTg5N0U5MkU2RjU4QTBGMzM0MjQxMDZBM0I2RkEyQ0JGODc3NTEwRTRBQzIxIgorICAgICAgIkMzRUU0Nzg1MUU5N0QxMjk5NjIyMkFDMzU2NkQ0Q0NCMEI4M0QxNjQwNzRBQkY3REU2NTVGQzI0NDZEQTE3ODEjKVxuIgorIiApXG4iCisiKVxuIjsKKworLyogVGhlIHNhbWUga2V5IGFzIGFib3ZlIGJ1dCBqdXN0IHdpdGhvdXQgcSB0byB0ZXN0IHRoZSBub24gQ1JUIGNhc2UuICBUaGlzCisgICBzaG91bGQgZmFpbC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wcml2YXRlX2tleV8xXzJbXSA9CisiKHByaXZhdGUta2V5XG4iCisiIChvcGVucGdwLXJzYVxuIgorIiAgKG4gIzAwZTBjZTk2ZjkwYjZjOWUwMmYzOTIyYmVhZGE5M2ZlNTBhODc1ZWFjNmJjYzE4YmI5YTljZjJlODQ5NjVjYWEiCisgICAgICAiMmQxZmY5NWE3ZjU0MjQ2NWM2YzBjMTlkMjc2ZTQ1MjZjZTA0ODg2OGE3YTkxNGZkMzQzY2MzYTg3ZGQ3NDI5MSIKKyAgICAgICJmZmM1NjU1MDZkNWJiYjI1Y2JhYzZhMGUyZGQxZjhiY2FhYjBkNGEyOWMyZjM3Yzk1MGYzNjM0ODRiZjI2OWY3IgorICAgICAgIjg5MTQ0MDQ2NGJhZjc5ODI3ZTAzYTM2ZTcwYjgxNDkzOGVlYmRjNjNlOTY0MjQ3YmU3NWRjNThiMDE0YjdlYTI1MSMpXG4iCisiICAoZSAjMDEwMDAxIylcbiIKKyIgIChkICMwNDYxMjlGMjQ4OUQ3MTU3OUJFMEE3NUZFMDI5QkQ2Q0RCNTc0RUJGNTdFQThBNUIwRkRBOTQyQ0FCOTQzQjExIgorICAgICAgIjdEN0JCOTVFNUQyODg3NUUwRjlGQzVGQ0MwNkE3MkY2RDUwMjQ2NERBQkRFRDc4RUY2QjcxNjE3N0I4M0Q1QkQiCisgICAgICAiQzU0M0RDNUQzRkVEOTMyRTU5RjU4OTdFOTJFNkY1OEEwRjMzNDI0MTA2QTNCNkZBMkNCRjg3NzUxMEU0QUMyMSIKKyAgICAgICJDM0VFNDc4NTFFOTdEMTI5OTYyMjJBQzM1NjZENENDQjBCODNEMTY0MDc0QUJGN0RFNjU1RkMyNDQ2REExNzgxIylcbiIKKyIgIChwICMwMGU4NjFiNzAwZTE3ZThhZmU2ODM3ZTc1MTJlMzViNmNhMTFkMGFlNDdkOGI4NTE2MWM2N2JhZjY0Mzc3MjEzIgorICAgICAgImZlNTJkNzcyZjIwMzViM2NhODMwYWY0MWQ4YTQxMjBlMWMxYzcwZDEyY2MyMmYwMGQyOGQzMWRkNDhhOGQ0MjRmMSMpXG4iCisiICAodSAjMzA0NTU5YTllYWQ1NmQyMzA5ZDIwMzgxMWE2NDFiYjFhMDk2MjZiYzhlYjM2ZmZmYTIzYzk2OGVjNWJkODkxZSIKKyAgICAgICJlYmJhZmM3M2FlNjY2ZTAxYmE3Yzg5OTBiYWUwNmNjMmJiZTEwYjc1ZTY5ZmNhY2IzNTNhNjQ3MzA3OWQ4ZTliIylcbiIKKyIgKVxuIgorIilcbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wdWJsaWNfa2V5XzFbXSA9CisiKHB1YmxpYy1rZXlcbiIKKyIgKHJzYVxuIgorIiAgKG4gIzAwZTBjZTk2ZjkwYjZjOWUwMmYzOTIyYmVhZGE5M2ZlNTBhODc1ZWFjNmJjYzE4YmI5YTljZjJlODQ5NjVjYWEiCisgICAgICAiMmQxZmY5NWE3ZjU0MjQ2NWM2YzBjMTlkMjc2ZTQ1MjZjZTA0ODg2OGE3YTkxNGZkMzQzY2MzYTg3ZGQ3NDI5MSIKKyAgICAgICJmZmM1NjU1MDZkNWJiYjI1Y2JhYzZhMGUyZGQxZjhiY2FhYjBkNGEyOWMyZjM3Yzk1MGYzNjM0ODRiZjI2OWY3IgorICAgICAgIjg5MTQ0MDQ2NGJhZjc5ODI3ZTAzYTM2ZTcwYjgxNDkzOGVlYmRjNjNlOTY0MjQ3YmU3NWRjNThiMDE0YjdlYTI1MSMpXG4iCisiICAoZSAjMDEwMDAxIylcbiIKKyIgKVxuIgorIilcbiI7CisKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBlcnJvcl9jb3VudDsKKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0ciA7CisKKyAgdmFfc3RhcnQoIGFyZ19wdHIsIGZvcm1hdCApIDsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyICk7CisgIHZhX2VuZChhcmdfcHRyKTsKKyAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBlcnJvcl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAoraW5mbyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfc2V4cCAoY29uc3QgY2hhciAqcHJlZml4LCBnY3J5X3NleHBfdCBhKQoreworICBjaGFyICpidWY7CisgIHNpemVfdCBzaXplOworCisgIGlmIChwcmVmaXgpCisgICAgZnB1dHMgKHByZWZpeCwgc3RkZXJyKTsKKyAgc2l6ZSA9IGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgTlVMTCwgMCk7CisgIGJ1ZiA9IGdjcnlfeG1hbGxvYyAoc2l6ZSk7CisKKyAgZ2NyeV9zZXhwX3NwcmludCAoYSwgR0NSWVNFWFBfRk1UX0FEVkFOQ0VELCBidWYsIHNpemUpOworICBmcHJpbnRmIChzdGRlcnIsICIlLipzIiwgKGludClzaXplLCBidWYpOworICBnY3J5X2ZyZWUgKGJ1Zik7Cit9CisKKworLyogQ29udmVydCBTVFJJTkcgY29uc2lzdGluZyBvZiBoZXggY2hhcmFjdGVycyBpbnRvIGl0cyBiaW5hcnkKKyAgIHJlcHJlc2VudGF0aW9uIGFuZCByZXR1cm4gaXQgYXMgYW4gYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIHZhbGlkCisgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpcyByZXR1cm5lZCBhdCBSX0xFTkdUSC4gIFRoZSBzdHJpbmcgaXMKKyAgIGRlbGltaXRlZCBieSBlbmQgb2Ygc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBvbgorICAgZXJyb3IuICAqLworc3RhdGljIHZvaWQgKgorZGF0YV9mcm9tX2hleCAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgKnJfbGVuZ3RoKQoreworICBjb25zdCBjaGFyICpzOworICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgYnVmZmVyID0gZ2NyeV94bWFsbG9jIChzdHJsZW4oc3RyaW5nKS8yKzEpOworICBsZW5ndGggPSAwOworICBmb3IgKHM9c3RyaW5nOyAqczsgcyArPTIgKQorICAgIHsKKyAgICAgIGlmICghaGV4ZGlnaXRwIChzKSB8fCAhaGV4ZGlnaXRwIChzKzEpKQorICAgICAgICBkaWUgKCJlcnJvciBwYXJzaW5nIGhleCBzdHJpbmcgYCVzJ1xuIiwgc3RyaW5nKTsKKyAgICAgICgodW5zaWduZWQgY2hhciopYnVmZmVyKVtsZW5ndGgrK10gPSB4dG9pXzIgKHMpOworICAgIH0KKyAgKnJfbGVuZ3RoID0gbGVuZ3RoOworICByZXR1cm4gYnVmZmVyOworfQorCisKK3N0YXRpYyB2b2lkCitleHRyYWN0X2NtcF9kYXRhIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpleHBlY3RlZCkKK3sKKyAgZ2NyeV9zZXhwX3QgbDE7CisgIGNvbnN0IHZvaWQgKmE7CisgIHNpemVfdCBhbGVuOworICB2b2lkICpiOworICBzaXplX3QgYmxlbjsKKworICBsMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzZXhwLCBuYW1lLCAwKTsKKyAgYSA9IGdjcnlfc2V4cF9udGhfZGF0YSAobDEsIDEsICZhbGVuKTsKKyAgYiA9IGRhdGFfZnJvbV9oZXggKGV4cGVjdGVkLCAmYmxlbik7CisgIGlmICghYSkKKyAgICBmYWlsICgicGFyYW1ldGVyIFwiJXNcIiBtaXNzaW5nIGluIGtleVxuIiwgbmFtZSk7CisgIGVsc2UgaWYgKCBhbGVuICE9IGJsZW4gfHwgbWVtY21wIChhLCBiLCBhbGVuKSApCisgICAgeworICAgICAgZmFpbCAoInBhcmFtZXRlciBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWVcbiIsIG5hbWUpOworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHsKKyAgICAgICAgICBpbmZvICgiZXhwZWN0ZWQ6ICVzXG4iLCBleHBlY3RlZCk7CisgICAgICAgICAgc2hvd19zZXhwICgic2V4cDogIiwgc2V4cCk7CisgICAgICAgIH0KKyAgICB9CisgIGdjcnlfZnJlZSAoYik7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChsMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX2tleXNfY3J5cHQgKGdjcnlfc2V4cF90IHBrZXksIGdjcnlfc2V4cF90IHNrZXksCisJCSAgZ2NyeV9zZXhwX3QgcGxhaW4wLCBncGdfZXJyX2NvZGVfdCBkZWNyeXB0X2ZhaWxfY29kZSkKK3sKKyAgZ2NyeV9zZXhwX3QgcGxhaW4xLCBjaXBoZXIsIGw7CisgIGdjcnlfbXBpX3QgeDAsIHgxOworICBpbnQgcmM7CisgIGludCBoYXZlX2ZsYWdzOworCisgIC8qIEV4dHJhY3QgZGF0YSBmcm9tIHBsYWludGV4dC4gICovCisgIGwgPSBnY3J5X3NleHBfZmluZF90b2tlbiAocGxhaW4wLCAidmFsdWUiLCAwKTsKKyAgeDAgPSBnY3J5X3NleHBfbnRoX21waSAobCwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwpOworCisgIC8qIEVuY3J5cHQgZGF0YS4gICovCisgIHJjID0gZ2NyeV9wa19lbmNyeXB0ICgmY2lwaGVyLCBwbGFpbjAsIHBrZXkpOworICBpZiAocmMpCisgICAgZGllICgiZW5jcnlwdGlvbiBmYWlsZWQ6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGwgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoY2lwaGVyLCAiZmxhZ3MiLCAwKTsKKyAgaGF2ZV9mbGFncyA9ICEhbDsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwpOworCisgIC8qIERlY3J5cHQgZGF0YS4gICovCisgIHJjID0gZ2NyeV9wa19kZWNyeXB0ICgmcGxhaW4xLCBjaXBoZXIsIHNrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoY2lwaGVyKTsKKyAgaWYgKHJjKQorICAgIHsKKyAgICAgIGlmIChkZWNyeXB0X2ZhaWxfY29kZSAmJiBncGdfZXJyX2NvZGUgKHJjKSA9PSBkZWNyeXB0X2ZhaWxfY29kZSkKKwl7CisJICBnY3J5X21waV9yZWxlYXNlICh4MCk7CisJICByZXR1cm47IC8qIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGZhaWx1cmUgY29kZS4gICovCisJfQorICAgICAgZGllICgiZGVjcnlwdGlvbiBmYWlsZWQ6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworICAgIH0KKworICAvKiBFeHRyYWN0IGRlY3J5cHRlZCBkYXRhLiAgTm90ZSB0aGF0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHRoZQorICAgICBvdXRwdXQgb2YgZ2NyeV9wa19kZWNyeXB0IGRlcGVuZHMgb24gd2hldGhlciBhIGZsYWdzIGxpc3RzIChldmVuCisgICAgIGlmIGVtcHR5KSBvY2N1cnMgaW4gaXRzIGlucHV0IGRhdGEuICBCZWNhdXNlIHdlIHBhc3NlZCB0aGUgb3V0cHV0CisgICAgIG9mIGVuY3J5cHQgZGlyZWN0bHkgdG8gZGVjcnlwdCwgc3VjaCBhIGZsYWcgdmFsdWUgd29uJ3QgYmUgdGhlcmUKKyAgICAgYXMgb2YgdG9kYXkuICBXZSBjaGVjayBpdCBhbnl3YXkuICovCisgIGwgPSBnY3J5X3NleHBfZmluZF90b2tlbiAocGxhaW4xLCAidmFsdWUiLCAwKTsKKyAgaWYgKGwpCisgICAgeworICAgICAgaWYgKCFoYXZlX2ZsYWdzKQorICAgICAgICBkaWUgKCJjb21wYXRpYmlsaXR5IG1vZGUgb2YgcGtfZGVjcnlwdCBicm9rZW5cbiIpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBsYWluMSk7CisgICAgICB4MSA9IGdjcnlfc2V4cF9udGhfbXBpIChsLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChoYXZlX2ZsYWdzKQorICAgICAgICBkaWUgKCJjb21wYXRpYmlsaXR5IG1vZGUgb2YgcGtfZGVjcnlwdCBicm9rZW5cbiIpOworICAgICAgeDEgPSBnY3J5X3NleHBfbnRoX21waSAocGxhaW4xLCAwLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBsYWluMSk7CisgICAgfQorCisgIC8qIENvbXBhcmUuICAqLworICBpZiAoZ2NyeV9tcGlfY21wICh4MCwgeDEpKQorICAgIGRpZSAoImRhdGEgY29ycnVwdGVkXG4iKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeDApOworICBnY3J5X21waV9yZWxlYXNlICh4MSk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19rZXlzIChnY3J5X3NleHBfdCBwa2V5LCBnY3J5X3NleHBfdCBza2V5LCB1bnNpZ25lZCBpbnQgbmJpdHNfZGF0YSwKKyAgICAgICAgICAgIGdwZ19lcnJfY29kZV90IGRlY3J5cHRfZmFpbF9jb2RlKQoreworICBnY3J5X3NleHBfdCBwbGFpbjsKKyAgZ2NyeV9tcGlfdCB4OworICBpbnQgcmM7CisKKyAgLyogQ3JlYXRlIHBsYWluIHRleHQuICAqLworICB4ID0gZ2NyeV9tcGlfbmV3IChuYml0c19kYXRhKTsKKyAgZ2NyeV9tcGlfcmFuZG9taXplICh4LCBuYml0c19kYXRhLCBHQ1JZX1dFQUtfUkFORE9NKTsKKworICByYyA9IGdjcnlfc2V4cF9idWlsZCAoJnBsYWluLCBOVUxMLCAiKGRhdGEgKGZsYWdzIHJhdykgKHZhbHVlICVtKSkiLCB4KTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImNvbnZlcnRpbmcgZGF0YSBmb3IgZW5jcnlwdGlvbiBmYWlsZWQ6ICVzXG4iLAorCSBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGNoZWNrX2tleXNfY3J5cHQgKHBrZXksIHNrZXksIHBsYWluLCBkZWNyeXB0X2ZhaWxfY29kZSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChwbGFpbik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworCisgIC8qIENyZWF0ZSBwbGFpbiB0ZXh0LiAgKi8KKyAgeCA9IGdjcnlfbXBpX25ldyAobmJpdHNfZGF0YSk7CisgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoeCwgbmJpdHNfZGF0YSwgR0NSWV9XRUFLX1JBTkRPTSk7CisKKyAgcmMgPSBnY3J5X3NleHBfYnVpbGQgKCZwbGFpbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICIoZGF0YSAoZmxhZ3MgcmF3IG5vLWJsaW5kaW5nKSAodmFsdWUgJW0pKSIsIHgpOworICBnY3J5X21waV9yZWxlYXNlICh4KTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImNvbnZlcnRpbmcgZGF0YSBmb3IgZW5jcnlwdGlvbiBmYWlsZWQ6ICVzXG4iLAorCSBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGNoZWNrX2tleXNfY3J5cHQgKHBrZXksIHNrZXksIHBsYWluLCBkZWNyeXB0X2ZhaWxfY29kZSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChwbGFpbik7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfa2V5c19zYW1wbGUgKGdjcnlfc2V4cF90ICpwa2V5LCBnY3J5X3NleHBfdCAqc2tleSwgaW50IHNlY3JldF92YXJpYW50KQoreworICBnY3J5X3NleHBfdCBwdWJfa2V5LCBzZWNfa2V5OworICBpbnQgcmM7CisgIHN0YXRpYyBjb25zdCBjaGFyICpzZWNyZXQ7CisKKworICBzd2l0Y2ggKHNlY3JldF92YXJpYW50KQorICAgIHsKKyAgICBjYXNlIDA6IHNlY3JldCA9IHNhbXBsZV9wcml2YXRlX2tleV8xOyBicmVhazsKKyAgICBjYXNlIDE6IHNlY3JldCA9IHNhbXBsZV9wcml2YXRlX2tleV8xXzE7IGJyZWFrOworICAgIGNhc2UgMjogc2VjcmV0ID0gc2FtcGxlX3ByaXZhdGVfa2V5XzFfMjsgYnJlYWs7CisgICAgZGVmYXVsdDogZGllICgiQlVHXG4iKTsKKyAgICB9CisKKyAgcmMgPSBnY3J5X3NleHBfc3NjYW4gKCZwdWJfa2V5LCBOVUxMLCBzYW1wbGVfcHVibGljX2tleV8xLAorCQkJc3RybGVuIChzYW1wbGVfcHVibGljX2tleV8xKSk7CisgIGlmICghcmMpCisgICAgcmMgPSBnY3J5X3NleHBfc3NjYW4gKCZzZWNfa2V5LCBOVUxMLCBzZWNyZXQsIHN0cmxlbiAoc2VjcmV0KSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJjb252ZXJ0aW5nIHNhbXBsZSBrZXlzIGZhaWxlZDogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfa2V5c19uZXcgKGdjcnlfc2V4cF90ICpwa2V5LCBnY3J5X3NleHBfdCAqc2tleSkKK3sKKyAgZ2NyeV9zZXhwX3Qga2V5X3NwZWMsIGtleSwgcHViX2tleSwgc2VjX2tleTsKKyAgaW50IHJjOworCisgIHJjID0gZ2NyeV9zZXhwX25ldyAoJmtleV9zcGVjLAorCQkgICAgICAiKGdlbmtleSAocnNhIChuYml0cyA0OjEwMjQpKSkiLCAwLCAxKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbjogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleV9zcGVjKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9zcGVjKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgUlNBIGtleTogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisKKyAgaWYgKHZlcmJvc2UgPiAxKQorICAgIHNob3dfc2V4cCAoImdlbmVyYXRlZCBSU0Ega2V5OlxuIiwga2V5KTsKKworICBwdWJfa2V5ID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleSwgInB1YmxpYy1rZXkiLCAwKTsKKyAgaWYgKCEgcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoISBzZWNfa2V5KQorICAgIGRpZSAoInByaXZhdGUgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgICpwa2V5ID0gcHViX2tleTsKKyAgKnNrZXkgPSBzZWNfa2V5OworfQorCisKK3N0YXRpYyB2b2lkCitnZXRfa2V5c194OTMxX25ldyAoZ2NyeV9zZXhwX3QgKnBrZXksIGdjcnlfc2V4cF90ICpza2V5KQoreworICBnY3J5X3NleHBfdCBrZXlfc3BlYywga2V5LCBwdWJfa2V5LCBzZWNfa2V5OworICBpbnQgcmM7CisKKyAgcmMgPSBnY3J5X3NleHBfbmV3ICgma2V5X3NwZWMsCisJCSAgICAgICIoZ2Vua2V5IChyc2EgKG5iaXRzIDQ6MTAyNCkodXNlLXg5MzEpKSkiLCAwLCAxKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbjogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleV9zcGVjKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9zcGVjKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgUlNBIGtleTogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisKKyAgaWYgKHZlcmJvc2UgPiAxKQorICAgIHNob3dfc2V4cCAoImdlbmVyYXRlZCBSU0EgKFg5LjMxKSBrZXk6XG4iLCBrZXkpOworCisgIHB1Yl9rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHVibGljLWtleSIsIDApOworICBpZiAoIXB1Yl9rZXkpCisgICAgZGllICgicHVibGljIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworCisgIHNlY19rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCFzZWNfa2V5KQorICAgIGRpZSAoInByaXZhdGUgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgICpwa2V5ID0gcHViX2tleTsKKyAgKnNrZXkgPSBzZWNfa2V5OworfQorCisKK3N0YXRpYyB2b2lkCitnZXRfZWxnX2tleV9uZXcgKGdjcnlfc2V4cF90ICpwa2V5LCBnY3J5X3NleHBfdCAqc2tleSwgaW50IGZpeGVkX3gpCit7CisgIGdjcnlfc2V4cF90IGtleV9zcGVjLCBrZXksIHB1Yl9rZXksIHNlY19rZXk7CisgIGludCByYzsKKworICByYyA9IGdjcnlfc2V4cF9uZXcKKyAgICAoJmtleV9zcGVjLAorICAgICAoZml4ZWRfeAorICAgICAgPyAiKGdlbmtleSAoZWxnIChuYml0cyA0OjEwMjQpKHh2YWx1ZSBteS5ub3Qtc28tc2VjcmV0LmtleSkpKSIKKyAgICAgIDogIihnZW5rZXkgKGVsZyAobmJpdHMgMzo1MTIpKSkiKSwKKyAgICAgMCwgMSk7CisKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbjogJXNcbiIsIGdjcnlfc3RyZXJyb3IgKHJjKSk7CisgIHJjID0gZ2NyeV9wa19nZW5rZXkgKCZrZXksIGtleV9zcGVjKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleV9zcGVjKTsKKyAgaWYgKHJjKQorICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgRWxnYW1hbCBrZXk6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBzaG93X3NleHAgKCJnZW5lcmF0ZWQgRUxHIGtleTpcbiIsIGtleSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNlY19rZXkpCisgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKKworc3RhdGljIHZvaWQKK2dldF9kc2Ffa2V5X25ldyAoZ2NyeV9zZXhwX3QgKnBrZXksIGdjcnlfc2V4cF90ICpza2V5LCBpbnQgdHJhbnNpZW50X2tleSkKK3sKKyAgZ2NyeV9zZXhwX3Qga2V5X3NwZWMsIGtleSwgcHViX2tleSwgc2VjX2tleTsKKyAgaW50IHJjOworCisgIHJjID0gZ2NyeV9zZXhwX25ldyAoJmtleV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaWVudF9rZXkKKyAgICAgICAgICAgICAgICAgICAgICA/ICIoZ2Vua2V5IChkc2EgKG5iaXRzIDQ6MTAyNCkodHJhbnNpZW50LWtleSkpKSIKKyAgICAgICAgICAgICAgICAgICAgICA6ICIoZ2Vua2V5IChkc2EgKG5iaXRzIDQ6MTAyNCkpKSIsCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBjcmVhdGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlfc3BlYyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfc3BlYyk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIERTQSBrZXk6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBzaG93X3NleHAgKCJnZW5lcmF0ZWQgRFNBIGtleTpcbiIsIGtleSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNlY19rZXkpCisgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKKworc3RhdGljIHZvaWQKK2dldF9kc2Ffa2V5X2ZpcHMxODZfbmV3IChnY3J5X3NleHBfdCAqcGtleSwgZ2NyeV9zZXhwX3QgKnNrZXkpCit7CisgIGdjcnlfc2V4cF90IGtleV9zcGVjLCBrZXksIHB1Yl9rZXksIHNlY19rZXk7CisgIGludCByYzsKKworICByYyA9IGdjcnlfc2V4cF9uZXcKKyAgICAoJmtleV9zcGVjLCAiKGdlbmtleSAoZHNhIChuYml0cyA0OjEwMjQpKHVzZS1maXBzMTg2KSkpIiwgIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAocmMpKTsKKyAgcmMgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5X3NwZWMpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5X3NwZWMpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBEU0Ega2V5OiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAocmMpKTsKKworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiZ2VuZXJhdGVkIERTQSBrZXkgKGZpcHMgMTg2KTpcbiIsIGtleSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNlY19rZXkpCisgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKKworc3RhdGljIHZvaWQKK2dldF9kc2Ffa2V5X3dpdGhfZG9tYWluX25ldyAoZ2NyeV9zZXhwX3QgKnBrZXksIGdjcnlfc2V4cF90ICpza2V5KQoreworICBnY3J5X3NleHBfdCBrZXlfc3BlYywga2V5LCBwdWJfa2V5LCBzZWNfa2V5OworICBpbnQgcmM7CisKKyAgcmMgPSBnY3J5X3NleHBfbmV3CisgICAgKCZrZXlfc3BlYywKKyAgICAgIihnZW5rZXkgKGRzYSAodHJhbnNpZW50LWtleSkoZG9tYWluIgorICAgICAiKHAgI2QzYWVkMTg3NjA1NGRiODMxZDBjMTM0OGZiYjFhZGE3MjUwN2U1ZmJmOWE2MmNiZDQ3YTYzYWViNzg1OWQ2OTIxIgorICAgICAiNGFkZWI5MTQ2YTZlYzNmNDM1MjBmMGZkOGUzMTI1ZGQ4YmJjNWQ4NzQwNWQxYWM1ZjgyMDczY2Q3NjJhM2Y4ZDciCisgICAgICI3NDMyMjY1N2M5ZGE4OGE3ZDJmMGUxYTljZWI4NGEzOWNiNDA4NzYxNzllNmE3NmU0MDA0OThkZTRiYjkzNzliMCIKKyAgICAgIjVmNWZlYjdiOTFlYjhmZWE5N2VlMTdhOTU1YTBhOGEzNzU4N2EyNzJjNDcxOWQ2ZmViNmI1NGJhNGFiNjkjKSIKKyAgICAgIihxICM5YzkxNmQxMjFkZTlhMDNmNzFmYjIxYmMyZTFjMGQxMTZmMDY1YTRmIykiCisgICAgICIoZyAjODE1N2M1ZjY4Y2E0MGIzZGVkMTFjMzUzMzI3YWI5YjhhZjNlMTg2ZGQyZThkYWRlOTg3NjFhMDk5NmRkYTk5YWIiCisgICAgICIwMjUwZDM0MDkwNjNhZDk5ZWZhZTQ4YjEwYzZhYjJiYmEzZWE5YTY3YjEyYjkxMWEzNzJhMmJiYTI2MDE3NmZhZCIKKyAgICAgImI0YjkzMjQ3ZDk3MTJhYWQxM2FhNzAyMTZjNTVkYTk4NThmN2EyOThkZWI2NzBhNDAzZWIxZTdjOTFiODQ3ZjFlIgorICAgICAiY2NmYmQxNGJkODA2ZmQ0MmNmNDVkYmI2OWNkNmQ2YjQzYWRkMmE3OGY3ZDE2OTI4ZWFhMDQ0NThkZWE0NCMpIgorICAgICAiKSkpIiwgMCwgMSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBjcmVhdGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlfc3BlYyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfc3BlYyk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIERTQSBrZXk6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBzaG93X3NleHAgKCJnZW5lcmF0ZWQgRFNBIGtleTpcbiIsIGtleSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNlY19rZXkpCisgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfZHNhX2tleV9maXBzMTg2X3dpdGhfZG9tYWluX25ldyAoZ2NyeV9zZXhwX3QgKnBrZXksIGdjcnlfc2V4cF90ICpza2V5KQoreworICBnY3J5X3NleHBfdCBrZXlfc3BlYywga2V5LCBwdWJfa2V5LCBzZWNfa2V5OworICBpbnQgcmM7CisKKyAgcmMgPSBnY3J5X3NleHBfbmV3CisgICAgKCZrZXlfc3BlYywKKyAgICAgIihnZW5rZXkgKGRzYSAodHJhbnNpZW50LWtleSkodXNlLWZpcHMxODYpKGRvbWFpbiIKKyAgICAgIihwICNkM2FlZDE4NzYwNTRkYjgzMWQwYzEzNDhmYmIxYWRhNzI1MDdlNWZiZjlhNjJjYmQ0N2E2M2FlYjc4NTlkNjkyMSIKKyAgICAgIjRhZGViOTE0NmE2ZWMzZjQzNTIwZjBmZDhlMzEyNWRkOGJiYzVkODc0MDVkMWFjNWY4MjA3M2NkNzYyYTNmOGQ3IgorICAgICAiNzQzMjI2NTdjOWRhODhhN2QyZjBlMWE5Y2ViODRhMzljYjQwODc2MTc5ZTZhNzZlNDAwNDk4ZGU0YmI5Mzc5YjAiCisgICAgICI1ZjVmZWI3YjkxZWI4ZmVhOTdlZTE3YTk1NWEwYThhMzc1ODdhMjcyYzQ3MTlkNmZlYjZiNTRiYTRhYjY5IykiCisgICAgICIocSAjOWM5MTZkMTIxZGU5YTAzZjcxZmIyMWJjMmUxYzBkMTE2ZjA2NWE0ZiMpIgorICAgICAiKGcgIzgxNTdjNWY2OGNhNDBiM2RlZDExYzM1MzMyN2FiOWI4YWYzZTE4NmRkMmU4ZGFkZTk4NzYxYTA5OTZkZGE5OWFiIgorICAgICAiMDI1MGQzNDA5MDYzYWQ5OWVmYWU0OGIxMGM2YWIyYmJhM2VhOWE2N2IxMmI5MTFhMzcyYTJiYmEyNjAxNzZmYWQiCisgICAgICJiNGI5MzI0N2Q5NzEyYWFkMTNhYTcwMjE2YzU1ZGE5ODU4ZjdhMjk4ZGViNjcwYTQwM2ViMWU3YzkxYjg0N2YxZSIKKyAgICAgImNjZmJkMTRiZDgwNmZkNDJjZjQ1ZGJiNjljZDZkNmI0M2FkZDJhNzhmN2QxNjkyOGVhYTA0NDU4ZGVhNDQjKSIKKyAgICAgIikpKSIsIDAsIDEpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgUy1leHByZXNzaW9uOiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAocmMpKTsKKyAgcmMgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5X3NwZWMpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5X3NwZWMpOworICBpZiAocmMpCisgICAgZGllICgiZXJyb3IgZ2VuZXJhdGluZyBEU0Ega2V5OiAlc1xuIiwgZ2NyeV9zdHJlcnJvciAocmMpKTsKKworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiZ2VuZXJhdGVkIERTQSBrZXk6XG4iLCBrZXkpOworCisgIHB1Yl9rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHVibGljLWtleSIsIDApOworICBpZiAoIXB1Yl9rZXkpCisgICAgZGllICgicHVibGljIHBhcnQgbWlzc2luZyBpbiBrZXlcbiIpOworCisgIHNlY19rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCFzZWNfa2V5KQorICAgIGRpZSAoInByaXZhdGUgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgICpwa2V5ID0gcHViX2tleTsKKyAgKnNrZXkgPSBzZWNfa2V5OworfQorCisKK3N0YXRpYyB2b2lkCitnZXRfZHNhX2tleV9maXBzMTg2X3dpdGhfc2VlZF9uZXcgKGdjcnlfc2V4cF90ICpwa2V5LCBnY3J5X3NleHBfdCAqc2tleSkKK3sKKyAgZ2NyeV9zZXhwX3Qga2V5X3NwZWMsIGtleSwgcHViX2tleSwgc2VjX2tleTsKKyAgaW50IHJjOworCisgIHJjID0gZ2NyeV9zZXhwX25ldworICAgICgma2V5X3NwZWMsCisgICAgICIoZ2Vua2V5IgorICAgICAiICAoZHNhIgorICAgICAiICAgIChuYml0cyA0OjEwMjQpIgorICAgICAiICAgICh1c2UtZmlwczE4NikiCisgICAgICIgICAgKHRyYW5zaWVudC1rZXkpIgorICAgICAiICAgIChkZXJpdmUtcGFybXMiCisgICAgICIgICAgICAoc2VlZCAjMGNiMTk5MGMxZmQzNjI2MDU1ZDdhMDA5NmY4ZmE5OTgwNzM5OTg3MSMpKSkpIiwKKyAgICAgMCwgMSk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBjcmVhdGluZyBTLWV4cHJlc3Npb246ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworICByYyA9IGdjcnlfcGtfZ2Vua2V5ICgma2V5LCBrZXlfc3BlYyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlfc3BlYyk7CisgIGlmIChyYykKKyAgICBkaWUgKCJlcnJvciBnZW5lcmF0aW5nIERTQSBrZXk6ICVzXG4iLCBnY3J5X3N0cmVycm9yIChyYykpOworCisgIGlmICh2ZXJib3NlID4gMSkKKyAgICBzaG93X3NleHAgKCJnZW5lcmF0ZWQgRFNBIGtleSAoZmlwcyAxODYgd2l0aCBzZWVkKTpcbiIsIGtleSk7CisKKyAgcHViX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwdWJsaWMta2V5IiwgMCk7CisgIGlmICghcHViX2tleSkKKyAgICBkaWUgKCJwdWJsaWMgcGFydCBtaXNzaW5nIGluIGtleVxuIik7CisKKyAgc2VjX2tleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChrZXksICJwcml2YXRlLWtleSIsIDApOworICBpZiAoIXNlY19rZXkpCisgICAgZGllICgicHJpdmF0ZSBwYXJ0IG1pc3NpbmcgaW4ga2V5XG4iKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgKnBrZXkgPSBwdWJfa2V5OworICAqc2tleSA9IHNlY19rZXk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3J1biAodm9pZCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBwa2V5LCBza2V5OworICBpbnQgdmFyaWFudDsKKworICBmb3IgKHZhcmlhbnQ9MDsgdmFyaWFudCA8IDM7IHZhcmlhbnQrKykKKyAgICB7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgc2FtcGxlIGtleSAoJWQpLlxuIiwgdmFyaWFudCk7CisgICAgICBnZXRfa2V5c19zYW1wbGUgKCZwa2V5LCAmc2tleSwgdmFyaWFudCk7CisgICAgICAvKiBDaGVjayBnY3J5X3BrX3Rlc3RrZXkgd2hpY2ggcmVxdWlyZXMgYWxsIGVsZW1lbnRzLiAgKi8KKyAgICAgIGVyciA9IGdjcnlfcGtfdGVzdGtleSAoc2tleSk7CisgICAgICBpZiAoKHZhcmlhbnQgPT0gMCAmJiBlcnIpCisgICAgICAgICAgfHwgKHZhcmlhbnQgPiAwICYmIGdwZ19lcnJfY29kZSAoZXJyKSAhPSBHUEdfRVJSX05PX09CSikpCisgICAgICAgICAgZGllICgiZ2NyeV9wa190ZXN0a2V5IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAvKiBSdW4gdGhlIHVzdWFsIGNoZWNrIGJ1dCBleHBlY3QgYW4gZXJyb3IgZnJvbSB2YXJpYW50IDIuICAqLworICAgICAgY2hlY2tfa2V5cyAocGtleSwgc2tleSwgODAwLCB2YXJpYW50ID09IDI/IEdQR19FUlJfTk9fT0JKIDogMCk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocGtleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisgICAgfQorCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkNoZWNraW5nIGdlbmVyYXRlZCBSU0Ega2V5LlxuIik7CisgIGdldF9rZXlzX25ldyAoJnBrZXksICZza2V5KTsKKyAgY2hlY2tfa2V5cyAocGtleSwgc2tleSwgODAwLCAwKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgZ2VuZXJhdGVkIFJTQSBrZXkgKFg5LjMxKS5cbiIpOworICBnZXRfa2V5c194OTMxX25ldyAoJnBrZXksICZza2V5KTsKKyAgY2hlY2tfa2V5cyAocGtleSwgc2tleSwgODAwLCAwKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgZ2VuZXJhdGVkIEVsZ2FtYWwga2V5LlxuIik7CisgIGdldF9lbGdfa2V5X25ldyAoJnBrZXksICZza2V5LCAwKTsKKyAgY2hlY2tfa2V5cyAocGtleSwgc2tleSwgNDAwLCAwKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgcGFzc3BocmFzZSBnZW5lcmF0ZWQgRWxnYW1hbCBrZXkuXG4iKTsKKyAgZ2V0X2VsZ19rZXlfbmV3ICgmcGtleSwgJnNrZXksIDEpOworICBjaGVja19rZXlzIChwa2V5LCBza2V5LCA4MDAsIDApOworICBnY3J5X3NleHBfcmVsZWFzZSAocGtleSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChza2V5KTsKKworICBpZiAodmVyYm9zZSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJHZW5lcmF0aW5nIERTQSBrZXkuXG4iKTsKKyAgZ2V0X2RzYV9rZXlfbmV3ICgmcGtleSwgJnNrZXksIDApOworICAvKiBGaXhtZTogIEFkZCBhIGNoZWNrIGZ1bmN0aW9uIGZvciBEU0Ega2V5cy4gICovCisgIGdjcnlfc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNrZXkpOworCisgIGlmICghZ2NyeV9maXBzX21vZGVfYWN0aXZlICgpKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJHZW5lcmF0aW5nIHRyYW5zaWVudCBEU0Ega2V5LlxuIik7CisgICAgICBnZXRfZHNhX2tleV9uZXcgKCZwa2V5LCAmc2tleSwgMSk7CisgICAgICAvKiBGaXhtZTogIEFkZCBhIGNoZWNrIGZ1bmN0aW9uIGZvciBEU0Ega2V5cy4gICovCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAocGtleSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisgICAgfQorCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkdlbmVyYXRpbmcgRFNBIGtleSAoRklQUyAxODYpLlxuIik7CisgIGdldF9kc2Ffa2V5X2ZpcHMxODZfbmV3ICgmcGtleSwgJnNrZXkpOworICAvKiBGaXhtZTogIEFkZCBhIGNoZWNrIGZ1bmN0aW9uIGZvciBEU0Ega2V5cy4gICovCisgIGdjcnlfc2V4cF9yZWxlYXNlIChwa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNrZXkpOworCisgIGlmICh2ZXJib3NlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkdlbmVyYXRpbmcgRFNBIGtleSB3aXRoIGdpdmVuIGRvbWFpbi5cbiIpOworICBnZXRfZHNhX2tleV93aXRoX2RvbWFpbl9uZXcgKCZwa2V5LCAmc2tleSk7CisgIC8qIEZpeG1lOiAgQWRkIGEgY2hlY2sgZnVuY3Rpb24gZm9yIERTQSBrZXlzLiAgKi8KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiR2VuZXJhdGluZyBEU0Ega2V5IHdpdGggZ2l2ZW4gZG9tYWluIChGSVBTIDE4NikuXG4iKTsKKyAgZ2V0X2RzYV9rZXlfZmlwczE4Nl93aXRoX2RvbWFpbl9uZXcgKCZwa2V5LCAmc2tleSk7CisgIC8qIEZpeG1lOiAgQWRkIGEgY2hlY2sgZnVuY3Rpb24gZm9yIERTQSBrZXlzLiAgKi8KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHBrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2tleSk7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiR2VuZXJhdGluZyBEU0Ega2V5IHdpdGggZ2l2ZW4gc2VlZCAoRklQUyAxODYpLlxuIik7CisgIGdldF9kc2Ffa2V5X2ZpcHMxODZfd2l0aF9zZWVkX25ldyAoJnBrZXksICZza2V5KTsKKyAgLyogRml4bWU6ICBBZGQgYSBjaGVjayBmdW5jdGlvbiBmb3IgRFNBIGtleXMuICAqLworICBnY3J5X3NleHBfcmVsZWFzZSAocGtleSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChza2V5KTsKK30KKworCisKK3N0YXRpYyBnY3J5X21waV90CitrZXlfcGFyYW1fZnJvbV9zZXhwIChnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyICp0b3BuYW1lLCBjb25zdCBjaGFyICpuYW1lKQoreworICBnY3J5X3NleHBfdCBsMSwgbDI7CisgIGdjcnlfbXBpX3QgcmVzdWx0OworCisgIGwxID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNleHAsIHRvcG5hbWUsIDApOworICBpZiAoIWwxKQorICAgIHJldHVybiBOVUxMOworCisgIGwyID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGwxLCBuYW1lLCAwKTsKKyAgaWYgKCFsMikKKyAgICB7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAobDEpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJlc3VsdCA9IGdjcnlfc2V4cF9udGhfbXBpIChsMiwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwyKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGwxKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfeDkzMV9kZXJpdmVkX2tleSAoaW50IHdoYXQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKnBhcmFtOworICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2Q7CisgIH0gdGVzdHRhYmxlW10gPSB7CisgICAgeyAvKiBGaXJzdCBleGFtcGxlIGZyb20gWDkuMzEgKEQuMS4xKS4gICovCisgICAgICAiKGdlbmtleVxuIgorICAgICAgIiAgKHJzYVxuIgorICAgICAgIiAgICAobmJpdHMgNDoxMDI0KVxuIgorICAgICAgIiAgICAocnNhLXVzZS1lIDE6MylcbiIKKyAgICAgICIgICAgKGRlcml2ZS1wYXJtc1xuIgorICAgICAgIiAgICAgIChYcDEgIzFBMTkxNkREQjI5QjRFQjdFQjY3MzJFMTI4IylcbiIKKyAgICAgICIgICAgICAoWHAyICMxOTJFOEFBQzQxQzU3NkM4MjJEOTNFQTQzMyMpXG4iCisgICAgICAiICAgICAgKFhwICAjRDhDRDgxRjAzNUVDNTdFRkU4MjI5NTUxNDlEM0JGRjcwQzUzNTIwRFxuIgorICAgICAgIiAgICAgICAgICAgIDc2OUQ2RDc2NjQ2QzdBNzkyRTE2RUJEODlGRTZGQzVCNjA1QTY0OTNcbiIKKyAgICAgICIgICAgICAgICAgICAzOURGQzkyNUE4NkE0QzZEMTUwQjcxQjlFRUEwMkQ2ODg4NUY1MDA5XG4iCisgICAgICAiICAgICAgICAgICAgQjk4QkQ5ODQjKVxuIgorICAgICAgIiAgICAgIChYcTEgIzFBNUNGNzJFRTc3MERFNTBDQjA5QUNDRUE5IylcbiIKKyAgICAgICIgICAgICAoWHEyICMxMzRFNENBQTE2RDIzNTBBMjFENzc1QzQwNCMpXG4iCisgICAgICAiICAgICAgKFhxICAjQ0MxMDkyNDk1RDg2N0U2NDA2NURFRTNFNzk1NUYyRUJDN0Q0N0EyRFxuIgorICAgICAgIiAgICAgICAgICAgIDdDOTk1MzM4OEY5N0REREMzRTFDQTE5QzM1Q0E2NTlFREMyRkMzMjVcbiIKKyAgICAgICIgICAgICAgICAgICA2RDI5QzI2Mjc0NzlDMDg2QTY5OUE0OUM0QzlDRUU3RUY3QkQxQjM0XG4iCisgICAgICAiICAgICAgICAgICAgMzIxREUzNEEjKSkpKVxuIiwKKyAgICAgICIxQ0NEQTIwQkNGRkI4RDUxN0VFOTY2Njg2NjYyMUIxMTgyMkM3OTUwRDU1RjRCQjVCRUUzNzk4OUE3RDE3MyIKKyAgICAgICIxMkUzMjY3MThCRTBENzk1NDZFQUFFODdBNTY2MjNCOTE5QjE3MTVGRkJEN0YxNjAyOEZDNDAwNzc0MTk2MSIKKyAgICAgICJDODhDNUQ3QjREQUFBQzhEMzZBOThDOUVGQkIyNkM4QTRBMEU2QkMxNUIzNThFNTI4QTFBQzlEMEYwNDJCRSIKKyAgICAgICJCOTNCQ0ExNkI1NDFCMzNGODBDOTMzQTNCNzY5Mjg1QzQ2MkVENTY3N0JGRTg5REYwN0JFRDVDMTI3RkQxMyIKKyAgICAgICIyNDFEM0M0QiIKKyAgICB9LAorCisgICAgeyAvKiBTZWNvbmQgZXhhbXBsZSBmcm9tIFg5LjMxIChELjIuMSkuICAqLworICAgICAgIihnZW5rZXlcbiIKKyAgICAgICIgIChyc2FcbiIKKyAgICAgICIgICAgKG5iaXRzIDQ6MTUzNilcbiIKKyAgICAgICIgICAgKHJzYS11c2UtZSAxOjMpXG4iCisgICAgICAiICAgIChkZXJpdmUtcGFybXNcbiIKKyAgICAgICIgICAgICAoWHAxICMxODI3MjU1OEI2MTMxNjM0ODI5N0VBQ0E3NCMpXG4iCisgICAgICAiICAgICAgKFhwMiAjMUU5NzBFOEM2Qzk3Q0VGOTFGMDVCMEZBODAjKVxuIgorICAgICAgIiAgICAgIChYcCAgI0Y3RTk0M0M3RUYyMTY5RTkzMERDRjIzRkUzODlFRjc1MDdFRTgyNjVcbiIKKyAgICAgICIgICAgICAgICAgICAwRDQyRjRBMEQzQTNDRUZBQkUzNjc5OTlCQjMwRUU2ODBCMkZFMDY0XG4iCisgICAgICAiICAgICAgICAgICAgNjBGNzA3RjQ2MDA1RjhBQTdDQkZDRERDNDgxNEJCRTdGMEY4QkMwOVxuIgorICAgICAgIiAgICAgICAgICAgIDMxOEM4RTUxQTQ4RDEzNDI5NkU0MEQwQkJERDI4MkRDQ0JEREVFMURcbiIKKyAgICAgICIgICAgICAgICAgICBFQzg2RjBCMUM5NkVBRkY1Q0RBNzBGOUFFQjZFRTMxRSMpXG4iCisgICAgICAiICAgICAgKFhxMSAjMTFGRERBNkU4MTI4REMxNjI5Rjc1MTkyQkEjKVxuIgorICAgICAgIiAgICAgIChYcTIgIzE4QUIxNzhFQ0E5MDdENzI0NzJGNjVFNDgwIylcbiIKKyAgICAgICIgICAgICAoWHEgICNDNDc1NjAwMTE0MTJENkUxM0UzRTdEMDA3QjVDMDVEQkY1RkYwRDBGXG4iCisgICAgICAiICAgICAgICAgICAgQ0ZGMUZBMjA3MEQxNkM3QUJBOTNFREZCMzVEODcwMDU2N0U1OTEzRFxuIgorICAgICAgIiAgICAgICAgICAgIEI3MzRFM0ZCRDE1ODYyRUJDNTlGQTA0MjVERkExMzFFNTQ5MTM2RThcbiIKKyAgICAgICIgICAgICAgICAgICBFNTIzOTdBOEFCRTQ3MDVFQzQ4NzdENEY4MkM0QUFDNjUxQjMzREE2XG4iCisgICAgICAiICAgICAgICAgICAgRUExNEI5RDVGMkEyNjNEQzY1NjI2RTRENkNFQUM3NjcjKSkpKVxuIiwKKyAgICAgICIxRkI1NjA2OTk4NUYxOEM0NTE5Njk0RkI3MTA1NTcyMUEwMUYxNDQyMkRDOTAxQzM1QjAzQTY0RDRBNUJEMSIKKyAgICAgICIyNTlENTczMzA1RjVCMDU2QUM5MzFCODJFREIwODRFMzlBMEZEMUQxQTg2Q0M1QjE0N0EyNjRGN0VGNEVCMiIKKyAgICAgICIwRUQxRTdGQUFFNUNBRTRDMzBENTMyOEI3Rjc0QzNDQUE3MkM4OEI3MERFRDhFREUyMDdCODYyOURBMjM4MyIKKyAgICAgICJCNzhDM0NFMUNBM0Y5RjIxOEQ3OEM5MzhCMzU3NjNBRjJBODcxNDY2NENDNTdGNUNFQ0UyNDEzODQxRjVFOSIKKyAgICAgICJFREVDNDNCNzI4RTI1QTQxQkYzRTFFRjhEOUVFRTE2MzI4NkM5RjhCRjBGMjE5RDNCMzIyQzNFNEIwMzg5QyIKKyAgICAgICIyRThCQjI4REMwNEM0N0RBMkJGMzg4MjM3MzEyNjZEMkNGNkNDM0ZDMTgxNzM4MTU3NjI0RUYwNTE4NzREMCIKKyAgICAgICJCQkNDQjlGNjVDODMiCisgICAgICAvKiBOb3RlIHRoYXQgdGhpcyBleGFtcGxlIGluIFg5LjMxIGdpdmVzIHRoaXMgdmFsdWUgZm9yIEQ6CisKKyAgICAgICAgIjdFRDU4MUE2NjE3QzYzMTE0NjVBNTNFREM0MTU1Qzg2ODA3QzUxMDhCNzI0MDcwRDZDMEU5OTM1Mjk2RjQ0IgorICAgICAgICAiOTY3NTVDQ0MxN0Q2QzE1QUIyNEM2RTBCQjZDMjEzOEU2ODNGNDc0NkExQjMxNkM1MUU4OTkzREZCRDNBQzgiCisgICAgICAgICIzQjQ3OUZFQUI5NzJCOTMwQzM1NENBMkRGREQzMEYyQTlDQjIyMkRDMzdCNjNCNzg4MUVFMThBNzY4OEUwRSIKKyAgICAgICAgIkRFMzBGMzg3MjhGRTdDODYzNUUzMjRFMkNENUQ4RUJDQUExQzUxOTkzMzE1RkQ3M0IzODkwNEUxMDdEN0E3IgorICAgICAgICAiQjdCMTBFRENBMzg5NjkwNkZDRjg3QkUzNjdCQjg1OENBMUIyN0UyRkMzQzg2NzRFQ0M4QjBGOTJDMEUyNzAiCisgICAgICAgICJCQTJFQ0EzNzAxMzExRjY4QUZDRTIwOERDQzQ5OUI0QjNEQjMwRkYwNjA1Q0UwNTVEODkzQkMxNDYxRDM0MiIKKyAgICAgICAgIkVGMzJFN0Q5NzIwQiIKKworICAgICAgICBUaGlzIGlzIGEgYnVnIGluIFg5LjMxLCBvYnZpb3VzbHkgaW50cm9kdWNlZCBieSB1c2luZworCisgICAgICAgICAgIGQgPSBlXnstMX0gbW9kIChwLTEpKHEtMSkKKworICAgICAgICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgdW5pdmVyc2FsIGV4cG9uZW50IGFzIHJlcXVpcmVkIGJ5IDQuMS4zOgorCisgICAgICAgICAgIGQgPSBlXnstMX0gbW9kIGxjbShwLTEscS0xKQorCisgICAgICAgICBUaGUgZXhhbXBsZXMgaW4gWDkuMzEgc2VlbSB0byBiZSBwcmV0dHkgYnVnZ3ksIHNlZQorICAgICAgICAgY2lwaGVyL3ByaW1lZ2VuLmMgZm9yIGFub3RoZXIgYnVnLiAgTm90IG9ubHkgdGhhdCBJIGhhZCB0bworICAgICAgICAgc3BlbmQgMTAwIFVTRCBmb3IgdGhlIDY2IHBhZ2VzIG9mIHRoZSBkb2N1bWVudCwgaXQgYWxzbyB0b29rCisgICAgICAgICBtZSBzZXZlcmFsIGhvdXJzIHRvIGZpZ3VyZSBvdXQgdGhhdCB0aGUgYnVncyBhcmUgaW4gdGhlCisgICAgICAgICBkb2N1bWVudCBhbmQgbm90IGluIG15IGNvZGUuCisgICAgICAgKi8KKyAgICB9LAorCisgICAgeyAvKiBGaXJzdCBleGFtcGxlIGZyb20gTklTVCBSU0FWUyAoQi4xLjEpLiAgKi8KKyAgICAgICIoZ2Vua2V5XG4iCisgICAgICAiICAocnNhXG4iCisgICAgICAiICAgIChuYml0cyA0OjEwMjQpXG4iCisgICAgICAiICAgIChyc2EtdXNlLWUgMTozKVxuIgorICAgICAgIiAgICAoZGVyaXZlLXBhcm1zXG4iCisgICAgICAiICAgICAgKFhwMSAjMWVkM2Q2MzY4ZTEwMWRhYjkxMjRjOTJhYzgjKVxuIgorICAgICAgIiAgICAgIChYcDIgIzE2ZTU0NTdiODg0NDk2N2NlODNjYWI4YzExIylcbiIKKyAgICAgICIgICAgICAoWHAgICNiNzlmMmMyNDkzYjRiNzZmMzI5OTAzZDc1NTViN2Y1ZjA2YWFhNWVhXG4iCisgICAgICAiICAgICAgICAgICAgYWIyNjJkYTFkY2RhODE5NDcyMDY3MmE0ZTAyMjI5YTBjNzFmNjBhZVxuIgorICAgICAgIiAgICAgICAgICAgIGM0ZjBkMmVkOGQ0OWVmNTgzY2E3ZDVlZWVhOTA3YzEwODAxYzMwMmFcbiIKKyAgICAgICIgICAgICAgICAgICBjYWI0NDU5NSMpXG4iCisgICAgICAiICAgICAgKFhxMSAjMWE1ZDllM2ZhMzRmYjQ3OWJlZGVhNDEyZjYjKVxuIgorICAgICAgIiAgICAgIChYcTIgIzFmOWNjYTg1ZjE4NTM0MTUxNmQ5MmU4MmZkIylcbiIKKyAgICAgICIgICAgICAoWHEgICNjODM4N2ZkMzhmYTMzZGRjZWE2YTlkZTFiMmQ1NTQxMDY2MzUwMmRiXG4iCisgICAgICAiICAgICAgICAgICAgYzIyNTY1NWE5MzEwY2NlYWM5ZjRjZjFiY2U2NTNlYzkxNmQ0NTc4OFxuIgorICAgICAgIiAgICAgICAgICAgIGY4MTEzYzQ2YmMwZmE0MmJmNWU4ZDBjNDExMjBjMTYxMmUyZWE4YmJcbiIKKyAgICAgICIgICAgICAgICAgICAyZjM4OWVkYSMpKSkpXG4iLAorICAgICAgIjE3ZWY3YWQ0ZmQ5NjAxMWI2MmQ3NmRmYjIyNjFiNGIzMjcwY2E4ZTA3YmM1MDFiZTk1NGY4NzE5ZWY1ODZiIgorICAgICAgImYyMzdlOGY2OTNkZDE2YzIzZTdhZGVjYzQwMjc5ZGM2ODc3YzYyYWI1NDFkZjU4NDk4ODNhNTI1NGZjY2ZkIgorICAgICAgIjQwNzJhNjU3YjdmNDY2Mzk1MzkzMDM0NmZlYmQ2YmJkODJmOWE0OTkwMzg0MDJjYmY5N2ZkNWYwNjgwODNhIgorICAgICAgImM4MWFkMDMzNWM0YWFiMGRhMTljZmViZTA2MGExYmFjNzQ4MjczOGVmYWZlYTA3OGUyMWRmNzg1ZTU2ZWEwIgorICAgICAgImRjN2U4ZmViIgorICAgIH0sCisKKyAgICB7IC8qIFNlY29uZCBleGFtcGxlIGZyb20gTklTVCBSU0FWUyAoQi4xLjEpLiAgKi8KKyAgICAgICIoZ2Vua2V5XG4iCisgICAgICAiICAocnNhXG4iCisgICAgICAiICAgIChuYml0cyA0OjE1MzYpXG4iCisgICAgICAiICAgIChyc2EtdXNlLWUgMTozKVxuIgorICAgICAgIiAgICAoZGVyaXZlLXBhcm1zXG4iCisgICAgICAiICAgICAgKFhwMSAjMWU2NGMxYWY0NjBkZmY4ODQyYzIyYjY0ZDAjKVxuIgorICAgICAgIiAgICAgIChYcDIgIzFlOTQ4ZWRjZWRiYTg0MDM5YzgxZjJhYzBjIylcbiIKKyAgICAgICIgICAgICAoWHAgICNjOGM2N2RmODk0Yzg4MjA0NWVkZTI2YTkwMDhhYjA5ZWEwNjcyMDc3XG4iCisgICAgICAiICAgICAgICAgICAgZDdiYzcxZDQxMjUxMWNkOTM5ODFkZGRlOGY5MWI5NjdkYTQwNDA1NlxuIgorICAgICAgIiAgICAgICAgICAgIGMzOWYxMDVmN2YyMzlhYmRhZmY5MjkyMzg1OTkyMGY2Mjk5ZTgyYjlcbiIKKyAgICAgICIgICAgICAgICAgICA1YmQ1YjhjOTU5OTQ4ZjRhMDM0ZDgxNjEzZDYyMzVhMzk1M2I0OWNlXG4iCisgICAgICAiICAgICAgICAgICAgMjY5NzRlYjdiYjFmMTQ4NDM4NDEyODFiMzYzYjljZGIjKVxuIgorICAgICAgIiAgICAgIChYcTEgIzFmM2RmMGYwMTdkZGQwNTYxMWE5N2I2YWRiIylcbiIKKyAgICAgICIgICAgICAoWHEyICMxNDNlZGQ3YjIyZDgyODkxM2FiZjI0Y2E0ZCMpXG4iCisgICAgICAiICAgICAgKFhxICAjZjE1MTQ3ZDBlN2MwNGExZTNmMzdhZGRlODAyY2RjNjEwOTk5YmY3YVxuIgorICAgICAgIiAgICAgICAgICAgIGIwMDg4NDM0YWFlZGEwYzBhYjM5MTBiMTRkMmNlNTZjYjY2YmZmZDlcbiIKKyAgICAgICIgICAgICAgICAgICA3NTUyMTk1ZmFlOGIwNjEwNzdlMDM5MjA4MTRkOGI5Y2ZiNWEzOTU4XG4iCisgICAgICAiICAgICAgICAgICAgYjNhODJjMmE3ZmM5N2U1NWRiNTQzOTQ4ZDMzOTYyODkyNDUzMzZlY1xuIgorICAgICAgIiAgICAgICAgICAgIDllM2NiMzA4Y2M2NTVhZWJkNzY2MzQwZGE4OTIxMzgzIykpKSlcbiIsCisgICAgICAiMWY4YjE5ZjNmNWYyYWM5ZmM1OTlmMTEwY2FkNDAzZGNkOWJkZjVmN2YwMGZiMjc5MGU3OGU4MjAzOTgxODQiCisgICAgICAiMWYzZmIzZGQyMzBmYjIyM2Q4OThmNDU3MTlkOWIyZDM1MjU1ODdmZjJiOGJjYzc0MjVlNDA1NTBhNWI1MzYiCisgICAgICAiMWM4ZTljMWQyNmU4M2ZiZDljMzNjNjQwMjljMGU4NzhiODI5ZDU1ZGVmMTI5MTJiNzNkOTRmZDc1OGM0NjEiCisgICAgICAiMGY0NzNlMjMwYzQxYjVlNGM4NmUyN2M1YTUwMjlkODJjODExYzg4NTI1ZDAyNjliOTViZDJmZjI3Mjk5NGEiCisgICAgICAiZGJkODBmMmMyZWNmNjkwNjVmZWI4YWJkOGI0NDViOWM2ZDMwNmIxNTg1ZDdkM2Q3NTc2ZDQ5ODQyYmM3ZTIiCisgICAgICAiOGI0YTJmODhmNGE0N2U3MWMzZWRkMzVmZGY4M2Y1NDdlYTVjMmI1MzI5NzVjNTUxZWQ1MjY4Zjc0OGIyYzQiCisgICAgICAiMmNjZjhhODQ4MzViIgorICAgIH0KKyAgfTsKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBrZXlfc3BlYywga2V5LCBwdWJfa2V5LCBzZWNfa2V5OworICBnY3J5X21waV90IGRfZXhwZWN0ZWQsIGRfaGF2ZTsKKworICBpZiAod2hhdCA8IDAgJiYgd2hhdCA+PSBzaXplb2YgdGVzdHRhYmxlKQorICAgIGRpZSAoImludmFsaWQgV0hBVCB2YWx1ZVxuIik7CisKKyAgZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleV9zcGVjLCB0ZXN0dGFibGVbd2hhdF0ucGFyYW0sIDAsIDEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIFMtZXhwcmVzc2lvbiBbJWRdOiAlc1xuIiwgd2hhdCwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBlcnIgPSBnY3J5X3BrX2dlbmtleSAoJmtleSwga2V5X3NwZWMpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5X3NwZWMpOworICBpZiAoZXJyKQorICAgIGRpZSAoImVycm9yIGdlbmVyYXRpbmcgUlNBIGtleSBbJWRdOiAlc1xuIiwgd2hhdCwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBwdWJfa2V5ID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKGtleSwgInB1YmxpYy1rZXkiLCAwKTsKKyAgaWYgKCFwdWJfa2V5KQorICAgIGRpZSAoInB1YmxpYyBwYXJ0IG1pc3NpbmcgaW4ga2V5IFslZF1cbiIsIHdoYXQpOworCisgIHNlY19rZXkgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoa2V5LCAicHJpdmF0ZS1rZXkiLCAwKTsKKyAgaWYgKCFzZWNfa2V5KQorICAgIGRpZSAoInByaXZhdGUgcGFydCBtaXNzaW5nIGluIGtleSBbJWRdXG4iLCB3aGF0KTsKKworICBlcnIgPSBnY3J5X21waV9zY2FuCisgICAgKCZkX2V4cGVjdGVkLCBHQ1JZTVBJX0ZNVF9IRVgsIHRlc3R0YWJsZVt3aGF0XS5leHBlY3RlZF9kLCAwLCBOVUxMKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJlcnJvciBjb252ZXJ0aW5nIHN0cmluZyBbJWRdXG4iLCB3aGF0KTsKKworICBpZiAodmVyYm9zZSA+IDEpCisgICAgc2hvd19zZXhwICgiZ2VuZXJhdGVkIGtleTpcbiIsIGtleSk7CisKKyAgZF9oYXZlID0ga2V5X3BhcmFtX2Zyb21fc2V4cCAoc2VjX2tleSwgInJzYSIsICJkIik7CisgIGlmICghZF9oYXZlKQorICAgIGRpZSAoInBhcmFtZXRlciBkIG5vdCBmb3VuZCBpbiBSU0Egc2VjcmV0IGtleSBbJWRdXG4iLCB3aGF0KTsKKyAgaWYgKGdjcnlfbXBpX2NtcCAoZF9leHBlY3RlZCwgZF9oYXZlKSkKKyAgICB7CisgICAgICBzaG93X3NleHAgKE5VTEwsIHNlY19rZXkpOworICAgICAgZGllICgicGFyYW1ldGVyIGQgZG9lcyBtYXRjaCBleHBlY3RlZCB2YWx1ZSBbJWRdXG4iLCB3aGF0KTsKKyAgICB9CisgIGdjcnlfbXBpX3JlbGVhc2UgKGRfZXhwZWN0ZWQpOworICBnY3J5X21waV9yZWxlYXNlIChkX2hhdmUpOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAocHViX2tleSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzZWNfa2V5KTsKK30KKworCisKK3N0YXRpYyB2b2lkCitjaGVja19lY2Nfc2FtcGxlX2tleSAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgZWNjX3ByaXZhdGVfa2V5W10gPQorICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAiIChlY2RzYVxuIgorICAgICIgIChjdXJ2ZSBcIk5JU1QgUC0yNTZcIilcbiIKKyAgICAiICAocSAjMDRENEY2QTY3MzhEOUI4RDNBNzA3NUMxRTRFRTk1MDE1RkMwQzlCN0U0MjcyRDJCRUI2NjQ0RDM2MDlGQzc4MSIKKyAgICAiQjcxRjlBODA3MkY1OENCNjZBRTJGODlCQjEyNDUxODczQUJGN0Q5MUY5RTFGQkY5NkJGMkY3MEU3M0FBQzlBMjgzIylcbiIKKyAgICAiICAoZCAjNUExRUYwMDM1MTE4RjE5RjMxMTBGQjgxODEzRDM1NDdCQ0UxRTVCQ0U3N0QxRjc0NDcxNUUxRDVCQkU3MDM3OCMpIgorICAgICIpKSI7CisgIHN0YXRpYyBjb25zdCBjaGFyIGVjY19wcml2YXRlX2tleV93b19xW10gPQorICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAiIChlY2RzYVxuIgorICAgICIgIChjdXJ2ZSBcIk5JU1QgUC0yNTZcIilcbiIKKyAgICAiICAoZCAjNUExRUYwMDM1MTE4RjE5RjMxMTBGQjgxODEzRDM1NDdCQ0UxRTVCQ0U3N0QxRjc0NDcxNUUxRDVCQkU3MDM3OCMpIgorICAgICIpKSI7CisgIHN0YXRpYyBjb25zdCBjaGFyIGVjY19wdWJsaWNfa2V5W10gPQorICAgICIocHVibGljLWtleVxuIgorICAgICIgKGVjZHNhXG4iCisgICAgIiAgKGN1cnZlIFwiTklTVCBQLTI1NlwiKVxuIgorICAgICIgIChxICMwNEQ0RjZBNjczOEQ5QjhEM0E3MDc1QzFFNEVFOTUwMTVGQzBDOUI3RTQyNzJEMkJFQjY2NDREMzYwOUZDNzgxIgorICAgICJCNzFGOUE4MDcyRjU4Q0I2NkFFMkY4OUJCMTI0NTE4NzNBQkY3RDkxRjlFMUZCRjk2QkYyRjcwRTczQUFDOUEyODMjKSIKKyAgICAiKSkiOworICBzdGF0aWMgY29uc3QgY2hhciBoYXNoX3N0cmluZ1tdID0KKyAgICAiKGRhdGEgKGZsYWdzIHJhdylcbiIKKyAgICAiICh2YWx1ZSAjMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiCisgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgaGFzaDJfc3RyaW5nW10gPQorICAgICIoZGF0YSAoZmxhZ3MgcmF3KVxuIgorICAgICIgKGhhc2ggc2hhMSAjMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiCisgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIgorICAgIC8qICovICAgICIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiIKKyAgICAvKiAqLyAgICAiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYjKSkiOworICAvKiBoYXNoMiwgYnV0IGxvbmdlciB0aGFuIGN1cnZlIGxlbmd0aCwgc28gaXQgd2lsbCBiZSB0cnVuY2F0ZWQgKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgaGFzaDNfc3RyaW5nW10gPQorICAgICIoZGF0YSAoZmxhZ3MgcmF3KVxuIgorICAgICIgKGhhc2ggc2hhMSAjMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiCisgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIgorICAgIC8qICovICAgICIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiIKKyAgICAvKiAqLyAgICAiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiCisgICAgLyogKi8gICAgIjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIykpIjsKKworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IGtleSwgaGFzaCwgaGFzaDIsIGhhc2gzLCBzaWcsIHNpZzI7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgc2FtcGxlIEVDQyBrZXkuXG4iKTsKKworICBpZiAoKGVyciA9IGdjcnlfc2V4cF9uZXcgKCZoYXNoLCBoYXNoX3N0cmluZywgMCwgMSkpKQorICAgIGRpZSAoImxpbmUgJWQ6ICVzIiwgX19MSU5FX18sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgmaGFzaDIsIGhhc2gyX3N0cmluZywgMCwgMSkpKQorICAgIGRpZSAoImxpbmUgJWQ6ICVzIiwgX19MSU5FX18sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgmaGFzaDMsIGhhc2gzX3N0cmluZywgMCwgMSkpKQorICAgIGRpZSAoImxpbmUgJWQ6ICVzIiwgX19MSU5FX18sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgma2V5LCBlY2NfcHJpdmF0ZV9rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa19zaWduICgmc2lnLCBoYXNoLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3NpZ24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleSwgZWNjX3B1YmxpY19rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgaGFzaCwga2V5KSkpCisgICAgZGllICgiZ2NyeV9wa192ZXJpZnkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgLyogVmVyaWZ5IGhhc2ggdHJ1bmNhdGlvbiAqLworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgma2V5LCBlY2NfcHJpdmF0ZV9rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa19zaWduICgmc2lnMiwgaGFzaDIsIGtleSkpKQorICAgIGRpZSAoImdjcnlfcGtfc2lnbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc2lnKTsKKyAgaWYgKChlcnIgPSBnY3J5X3BrX3NpZ24gKCZzaWcsIGhhc2gzLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3NpZ24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleSwgZWNjX3B1YmxpY19rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgaGFzaDIsIGtleSkpKQorICAgIGRpZSAoImdjcnlfcGtfdmVyaWZ5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZzIsIGhhc2gzLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAvKiBOb3cgdHJ5IHNpZ25pbmcgd2l0aG91dCB0aGUgUSBwYXJhbWV0ZXIuICAqLworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBpZiAoKGVyciA9IGdjcnlfc2V4cF9uZXcgKCZrZXksIGVjY19wcml2YXRlX2tleV93b19xLCAwLCAxKSkpCisgICAgZGllICgibGluZSAlZDogJXMiLCBfX0xJTkVfXywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc2lnKTsKKyAgaWYgKChlcnIgPSBnY3J5X3BrX3NpZ24gKCZzaWcsIGhhc2gsIGtleSkpKQorICAgIGRpZSAoImdjcnlfcGtfc2lnbiB3aXRob3V0IFEgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleSwgZWNjX3B1YmxpY19rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgaGFzaCwga2V5KSkpCisgICAgZGllICgiZ2NyeV9wa192ZXJpZnkgc2lnbmVkIHdpdGhvdXQgUSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBnY3J5X3NleHBfcmVsZWFzZSAoc2lnKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZzIpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGhhc2gpOworICBnY3J5X3NleHBfcmVsZWFzZSAoaGFzaDIpOworICBnY3J5X3NleHBfcmVsZWFzZSAoaGFzaDMpOworfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19lZDI1NTE5ZWNkc2Ffc2FtcGxlX2tleSAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgZWNjX3ByaXZhdGVfa2V5W10gPQorICAgICIocHJpdmF0ZS1rZXlcbiIKKyAgICAiIChlY2NcbiIKKyAgICAiICAoY3VydmUgXCJFZDI1NTE5XCIpXG4iCisgICAgIiAgKHEgIzA0NEMwNTY1NTVCRTQwODRCQjNEOEQ4ODk1RkRGN0MyODkzREZFMDI1NjI1MTkyMzA1MzAxMDk3N0QxMjY1ODMyMSIKKyAgICAiICAgICAgICAxNTZEMUFEREMwNzk4NzcxM0E0MTg3ODM2NThCNDc2MzU4RDQ4RDU4MkRCNTMyMzNEOURFRDNDMUMyNTc3QjA0IykiCisgICAgIiAgKGQgIzA5QTBDMzhFMEYxNjk5MDczNTQxNDQ3QzE5REExMkUzQTA3QTdCRkRCMEMxODZFNEFDNUJDRTZGMjNENTUyNTIjKSIKKyAgICAiKSkiOworICBzdGF0aWMgY29uc3QgY2hhciBlY2NfcHJpdmF0ZV9rZXlfd29fcVtdID0KKyAgICAiKHByaXZhdGUta2V5XG4iCisgICAgIiAoZWNjXG4iCisgICAgIiAgKGN1cnZlIFwiRWQyNTUxOVwiKVxuIgorICAgICIgIChkICMwOUEwQzM4RTBGMTY5OTA3MzU0MTQ0N0MxOURBMTJFM0EwN0E3QkZEQjBDMTg2RTRBQzVCQ0U2RjIzRDU1MjUyIykiCisgICAgIikpIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgZWNjX3B1YmxpY19rZXlbXSA9CisgICAgIihwdWJsaWMta2V5XG4iCisgICAgIiAoZWNjXG4iCisgICAgIiAgKGN1cnZlIFwiRWQyNTUxOVwiKVxuIgorICAgICIgIChxICMwNDRDMDU2NTU1QkU0MDg0QkIzRDhEODg5NUZERjdDMjg5M0RGRTAyNTYyNTE5MjMwNTMwMTA5NzdEMTI2NTgzMjEiCisgICAgIiAgICAgICAgMTU2RDFBRERDMDc5ODc3MTNBNDE4NzgzNjU4QjQ3NjM1OEQ0OEQ1ODJEQjUzMjMzRDlERUQzQzFDMjU3N0IwNCMpIgorICAgICIpKSI7CisgIHN0YXRpYyBjb25zdCBjaGFyIGVjY19wdWJsaWNfa2V5X2NvbXBbXSA9CisgICAgIihwdWJsaWMta2V5XG4iCisgICAgIiAoZWNjXG4iCisgICAgIiAgKGN1cnZlIFwiRWQyNTUxOVwiKVxuIgorICAgICIgIChxICMwNDdiNTdjMmMxZDNkZWQ5MzMzMmI1MmQ1ODhkZDQ1ODYzNDc4YjY1ODM4NzQxM2E3MTg3NzljMGRkMWE2ZDk1IykiCisgICAgIikpIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgaGFzaF9zdHJpbmdbXSA9CisgICAgIihkYXRhIChmbGFncyByZmM2OTc5KVxuIgorICAgICIgKGhhc2ggc2hhMjU2ICMwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKyAgICAvKiAqLyAgICAgICAgICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYjKSkiOworCisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9zZXhwX3Qga2V5LCBoYXNoLCBzaWc7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2hlY2tpbmcgc2FtcGxlIEVkMjU1MTkvRUNEU0Ega2V5LlxuIik7CisKKyAgLyogU2lnbi4gICovCisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX25ldyAoJmhhc2gsIGhhc2hfc3RyaW5nLCAwLCAxKSkpCisgICAgZGllICgibGluZSAlZDogJXMiLCBfX0xJTkVfXywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgma2V5LCBlY2NfcHJpdmF0ZV9rZXksIDAsIDEpKSkKKyAgICBkaWUgKCJsaW5lICVkOiAlcyIsIF9fTElORV9fLCBncGdfc3RyZXJyb3IgKGVycikpOworICBpZiAoKGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgaGFzaCwga2V5KSkpCisgICAgZGllICgiZ2NyeV9wa19zaWduIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIC8qIFZlcmlmeS4gICovCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBpZiAoKGVyciA9IGdjcnlfc2V4cF9uZXcgKCZrZXksIGVjY19wdWJsaWNfa2V5LCAwLCAxKSkpCisgICAgZGllICgibGluZSAlZDogJXMiLCBfX0xJTkVfXywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKChlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBoYXNoLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICAvKiBWZXJpZnkgYWdhaW4gdXNpbmcgYSBjb21wcmVzc2VkIHB1YmxpYyBrZXkuICAqLworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgma2V5LCBlY2NfcHVibGljX2tleV9jb21wLCAwLCAxKSkpCisgICAgZGllICgibGluZSAlZDogJXMiLCBfX0xJTkVfXywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKChlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBoYXNoLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3ZlcmlmeSBmYWlsZWQgKGNvbXApOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgLyogU2lnbiB3aXRob3V0IGEgUSBwYXJhbWV0ZXIuICAqLworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5KTsKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfbmV3ICgma2V5LCBlY2NfcHJpdmF0ZV9rZXlfd29fcSwgMCwgMSkpKQorICAgIGRpZSAoImxpbmUgJWQ6ICVzIiwgX19MSU5FX18sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzaWcpOworICBpZiAoKGVyciA9IGdjcnlfcGtfc2lnbiAoJnNpZywgaGFzaCwga2V5KSkpCisgICAgZGllICgiZ2NyeV9wa19zaWduIHcvbyBRIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIC8qIFZlcmlmeS4gICovCisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBpZiAoKGVyciA9IGdjcnlfc2V4cF9uZXcgKCZrZXksIGVjY19wdWJsaWNfa2V5LCAwLCAxKSkpCisgICAgZGllICgibGluZSAlZDogJXMiLCBfX0xJTkVfXywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKChlcnIgPSBnY3J5X3BrX3ZlcmlmeSAoc2lnLCBoYXNoLCBrZXkpKSkKKyAgICBkaWUgKCJnY3J5X3BrX3ZlcmlmeSBzaWduZWQgdy9vIFEgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgLyogVmVyaWZ5IGFnYWluIHVzaW5nIGEgY29tcHJlc3NlZCBwdWJsaWMga2V5LiAgKi8KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKGtleSk7CisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX25ldyAoJmtleSwgZWNjX3B1YmxpY19rZXlfY29tcCwgMCwgMSkpKQorICAgIGRpZSAoImxpbmUgJWQ6ICVzIiwgX19MSU5FX18sIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNpZywgaGFzaCwga2V5KSkpCisgICAgZGllICgiZ2NyeV9wa192ZXJpZnkgc2lnbmVkIHcvbyBRIGZhaWxlZCAoY29tcCk6ICVzIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICBleHRyYWN0X2NtcF9kYXRhIChzaWcsICJyIiwgKCJhNjMxMjNhNzgzZWYyOWI4Mjc2ZTA4OTg3ZGFjYTQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjY1NWQwMTc5ZTIyMTk5YmY2MzY5MWZkODhlYjY0ZTE1IikpOworICBleHRyYWN0X2NtcF9kYXRhIChzaWcsICJzIiwgKCIwZDliNDVjNjk2YWI5MGI5NmIwODgxMmI0ODVkZjE4NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNjIzZGRhZjVkMDJmYTY1Y2E1MDU2Y2I2YmQwZjE2ZjEiKSk7CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNpZyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXkpOworICBnY3J5X3NleHBfcmVsZWFzZSAoaGFzaCk7Cit9CisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBkZWJ1ZyA9IDA7CisgIGludCBpOworCisgIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS12ZXJib3NlIikpCisgICAgdmVyYm9zZSA9IDE7CisgIGVsc2UgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLWRlYnVnIikpCisgICAgeworICAgICAgdmVyYm9zZSA9IDI7CisgICAgICBkZWJ1ZyA9IDE7CisgICAgfQorCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSAsIDApOworICAvKiBObyB2YWx1YWJsZSBrZXlzIGFyZSBjcmVhdGUsIHNvIHdlIGNhbiBzcGVlZCB1cCBvdXIgUk5HLiAqLworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisKKyAgZm9yIChpPTA7IGkgPCAyOyBpKyspCisgICAgY2hlY2tfcnVuICgpOworCisgIGZvciAoaT0wOyBpIDwgNDsgaSsrKQorICAgIGNoZWNrX3g5MzFfZGVyaXZlZF9rZXkgKGkpOworCisgIGNoZWNrX2VjY19zYW1wbGVfa2V5ICgpOworICBjaGVja19lZDI1NTE5ZWNkc2Ffc2FtcGxlX2tleSAoKTsKKworICByZXR1cm4gISFlcnJvcl9jb3VudDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3JhbmRvbS5jIGIvdGVzdHMvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZjY0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JhbmRvbS5jCkBAIC0wLDAgKzEsNTg4IEBACisvKiByYW5kb20uYyAtIHBhcnQgb2YgdGhlIExpYmdjcnlwdCB0ZXN0IHN1aXRlLgorICAgQ29weXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIEhBVkVfVzMyX1NZU1RFTQorIyBpbmNsdWRlIDxzaWduYWwuaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKKyNkZWZpbmUgUEdNICJyYW5kb20iCisKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgd2l0aF9wcm9ncmVzczsKKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgZnB1dHMgKCBQR00gIjogIiwgc3RkZXJyKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2luZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgZnB1dHMgKCBQR00gIjogIiwgc3RkZXJyKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfaGV4IChjb25zdCBjaGFyICp0ZXh0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgIGluZiAoIiVzIiwgdGV4dCk7CisgIGZvciAoOyBuOyBuLS0sIHArKykKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlMDJYIiwgKnApOworICBwdXRjICgnXG4nLCBzdGRlcnIpOworfQorCisKK3N0YXRpYyB2b2lkCitwcm9ncmVzc19jYiAodm9pZCAqY2JfZGF0YSwgY29uc3QgY2hhciAqd2hhdCwgaW50IHByaW50Y2hhciwKKyAgICAgICAgICAgICBpbnQgY3VycmVudCwgaW50IHRvdGFsKQoreworICAodm9pZCljYl9kYXRhOworCisgIGluZiAoInByb2dyZXNzICglcyAlYyAlZCAlZClcbiIsIHdoYXQsIHByaW50Y2hhciwgY3VycmVudCwgdG90YWwpOworICBmZmx1c2ggKHN0ZGVycik7Cit9CisKKworCitzdGF0aWMgaW50Cit3cml0ZW4gKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbmJ5dGVzKQoreworICBzaXplX3QgbmxlZnQgPSBuYnl0ZXM7CisgIGludCBud3JpdHRlbjsKKworICB3aGlsZSAobmxlZnQgPiAwKQorICAgIHsKKyAgICAgIG53cml0dGVuID0gd3JpdGUgKGZkLCBidWYsIG5sZWZ0KTsKKyAgICAgIGlmIChud3JpdHRlbiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICBud3JpdHRlbiA9IDA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBubGVmdCAtPSBud3JpdHRlbjsKKyAgICAgIGJ1ZiA9IChjb25zdCBjaGFyKilidWYgKyBud3JpdHRlbjsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRuIChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpyZXRfbnJlYWQpCit7CisgIHNpemVfdCBubGVmdCA9IGJ1ZmxlbjsKKyAgaW50IG5yZWFkOworCisgIHdoaWxlICggbmxlZnQgPiAwICkKKyAgICB7CisgICAgICBucmVhZCA9IHJlYWQgKCBmZCwgYnVmLCBubGVmdCApOworICAgICAgaWYgKG5yZWFkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChucmVhZCA9PSBFSU5UUikKKyAgICAgICAgICAgIG5yZWFkID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFucmVhZCkKKyAgICAgICAgYnJlYWs7IC8qIEVPRiAqLworICAgICAgbmxlZnQgLT0gbnJlYWQ7CisgICAgICBidWYgPSAoY2hhciopYnVmICsgbnJlYWQ7CisgICAgfQorICBpZiAocmV0X25yZWFkKQorICAgICpyZXRfbnJlYWQgPSBidWZsZW4gLSBubGVmdDsKKyAgcmV0dXJuIDA7Cit9CisKKworCisvKiBDaGVjayB0aGF0IGZvcmtpbmcgd29uJ3QgcmV0dXJuIHRoZSBzYW1lIHJhbmRvbS4gKi8KK3N0YXRpYyB2b2lkCitjaGVja19mb3JraW5nICh2b2lkKQoreworI2lmZGVmIEhBVkVfVzMyX1NZU1RFTQorICBpZiAodmVyYm9zZSkKKyAgICBpbmYgKCJjaGVja19mb3JraW5nIHNraXBwZWQ6IG5vdCBhcHBsaWNhYmxlIG9uIFdpbmRvd3NcbiIpOworI2Vsc2UgLyohSEFWRV9XMzJfU1lTVEVNKi8KKyAgcGlkX3QgcGlkOworICBpbnQgcnBbMl07CisgIGludCBpLCBzdGF0dXM7CisgIHNpemVfdCBucmVhZDsKKyAgY2hhciB0bXAxWzE2XSwgdG1wMWNbMTZdLCB0bXAxcFsxNl07CisKKyAgaWYgKHZlcmJvc2UpCisgICAgaW5mICgiY2hlY2tpbmcgdGhhdCBhIGZvcmsgd29uJ3QgY2F1c2UgdGhlIHNhbWUgcmFuZG9tIG91dHB1dFxuIik7CisKKyAgLyogV2UgYmV0dGVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBSTkcgaGFzIGJlZW4gaW5pdGlhbHppZWQuICovCisgIGdjcnlfcmFuZG9taXplICh0bXAxLCBzaXplb2YgdG1wMSwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgcHJpbnRfaGV4ICgiaW5pdGlhbCByYW5kb206ICIsIHRtcDEsIHNpemVvZiB0bXAxKTsKKworICBpZiAocGlwZSAocnApID09IC0xKQorICAgIGRpZSAoInBpcGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisKKyAgcGlkID0gZm9yayAoKTsKKyAgaWYgKHBpZCA9PSAocGlkX3QpKC0xKSkKKyAgICBkaWUgKCJmb3JrIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICBpZiAoIXBpZCkKKyAgICB7CisgICAgICBnY3J5X3JhbmRvbWl6ZSAodG1wMWMsIHNpemVvZiB0bXAxYywgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgICAgIGlmICh3cml0ZW4gKHJwWzFdLCB0bXAxYywgc2l6ZW9mIHRtcDFjKSkKKyAgICAgICAgZGllICgid3JpdGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50X2hleCAoIiAgY2hpbGQgcmFuZG9tOiAiLCB0bXAxYywgc2l6ZW9mIHRtcDFjKTsKKyAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgIF9leGl0ICgwKTsKKyAgICB9CisgIGdjcnlfcmFuZG9taXplICh0bXAxcCwgc2l6ZW9mIHRtcDFwLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICBpZiAodmVyYm9zZSkKKyAgICBwcmludF9oZXggKCIgcGFyZW50IHJhbmRvbTogIiwgdG1wMXAsIHNpemVvZiB0bXAxcCk7CisKKyAgY2xvc2UgKHJwWzFdKTsKKyAgaWYgKHJlYWRuIChycFswXSwgdG1wMWMsIHNpemVvZiB0bXAxYywgJm5yZWFkKSkKKyAgICBkaWUgKCJyZWFkIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICBpZiAobnJlYWQgIT0gc2l6ZW9mIHRtcDFjKQorICAgIGRpZSAoInJlYWQgdG9vIHNob3J0XG4iKTsKKworICB3aGlsZSAoIChpPXdhaXRwaWQgKHBpZCwgJnN0YXR1cywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKQorICAgIDsKKyAgaWYgKGkgIT0gKHBpZF90KSgtMSkKKyAgICAgICYmIFdJRkVYSVRFRCAoc3RhdHVzKSAmJiAhV0VYSVRTVEFUVVMgKHN0YXR1cykpCisgICAgOworICBlbHNlCisgICAgZGllICgiY2hpbGQgZmFpbGVkXG4iKTsKKworICBpZiAoIW1lbWNtcCAodG1wMXAsIHRtcDFjLCBzaXplb2YgdG1wMWMpKQorICAgIGRpZSAoInBhcmVudCBhbmQgY2hpbGQgZ290IHRoZSBzYW1lIHJhbmRvbSBudW1iZXJcbiIpOworI2VuZGlmICAvKiFIQVZFX1czMl9TWVNURU0qLworfQorCisKKworLyogQ2hlY2sgdGhhdCBmb3JraW5nIHdvbid0IHJldHVybiB0aGUgc2FtZSBub25jZS4gKi8KK3N0YXRpYyB2b2lkCitjaGVja19ub25jZV9mb3JraW5nICh2b2lkKQoreworI2lmZGVmIEhBVkVfVzMyX1NZU1RFTQorICBpZiAodmVyYm9zZSkKKyAgICBpbmYgKCJjaGVja19ub25jZV9mb3JraW5nIHNraXBwZWQ6IG5vdCBhcHBsaWNhYmxlIG9uIFdpbmRvd3NcbiIpOworI2Vsc2UgLyohSEFWRV9XMzJfU1lTVEVNKi8KKyAgcGlkX3QgcGlkOworICBpbnQgcnBbMl07CisgIGludCBpLCBzdGF0dXM7CisgIHNpemVfdCBucmVhZDsKKyAgY2hhciBub25jZTFbMTBdLCBub25jZTFjWzEwXSwgbm9uY2UxcFsxMF07CisKKyAgaWYgKHZlcmJvc2UpCisgICAgaW5mICgiY2hlY2tpbmcgdGhhdCBhIGZvcmsgd29uJ3QgY2F1c2UgdGhlIHNhbWUgbm9uY2Ugb3V0cHV0XG4iKTsKKworICAvKiBXZSB3b24ndCBnZXQgdGhlIHNhbWUgbm9uY2UgYmFjayBpZiB3ZSBuZXZlciBpbml0aWFsaXplZCB0aGUKKyAgICAgbm9uY2Ugc3Vic3lzdGVtLCB0aHVzIHdlIGdldCBvbmUgbm9uY2UgaGVyZSBhbmQgZm9yZ2V0IGFib3V0CisgICAgIGl0LiAqLworICBnY3J5X2NyZWF0ZV9ub25jZSAobm9uY2UxLCBzaXplb2Ygbm9uY2UxKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgcHJpbnRfaGV4ICgiaW5pdGlhbCBub25jZTogIiwgbm9uY2UxLCBzaXplb2Ygbm9uY2UxKTsKKworICBpZiAocGlwZSAocnApID09IC0xKQorICAgIGRpZSAoInBpcGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisKKyAgcGlkID0gZm9yayAoKTsKKyAgaWYgKHBpZCA9PSAocGlkX3QpKC0xKSkKKyAgICBkaWUgKCJmb3JrIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICBpZiAoIXBpZCkKKyAgICB7CisgICAgICBnY3J5X2NyZWF0ZV9ub25jZSAobm9uY2UxYywgc2l6ZW9mIG5vbmNlMWMpOworICAgICAgaWYgKHdyaXRlbiAocnBbMV0sIG5vbmNlMWMsIHNpemVvZiBub25jZTFjKSkKKyAgICAgICAgZGllICgid3JpdGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50X2hleCAoIiAgY2hpbGQgbm9uY2U6ICIsIG5vbmNlMWMsIHNpemVvZiBub25jZTFjKTsKKyAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgIF9leGl0ICgwKTsKKyAgICB9CisgIGdjcnlfY3JlYXRlX25vbmNlIChub25jZTFwLCBzaXplb2Ygbm9uY2UxcCk7CisgIGlmICh2ZXJib3NlKQorICAgIHByaW50X2hleCAoIiBwYXJlbnQgbm9uY2U6ICIsIG5vbmNlMXAsIHNpemVvZiBub25jZTFwKTsKKworICBjbG9zZSAocnBbMV0pOworICBpZiAocmVhZG4gKHJwWzBdLCBub25jZTFjLCBzaXplb2Ygbm9uY2UxYywgJm5yZWFkKSkKKyAgICBkaWUgKCJyZWFkIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICBpZiAobnJlYWQgIT0gc2l6ZW9mIG5vbmNlMWMpCisgICAgZGllICgicmVhZCB0b28gc2hvcnRcbiIpOworCisgIHdoaWxlICggKGk9d2FpdHBpZCAocGlkLCAmc3RhdHVzLCAwKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgOworICBpZiAoaSAhPSAocGlkX3QpKC0xKQorICAgICAgJiYgV0lGRVhJVEVEIChzdGF0dXMpICYmICFXRVhJVFNUQVRVUyAoc3RhdHVzKSkKKyAgICA7CisgIGVsc2UKKyAgICBkaWUgKCJjaGlsZCBmYWlsZWRcbiIpOworCisgIGlmICghbWVtY21wIChub25jZTFwLCBub25jZTFjLCBzaXplb2Ygbm9uY2UxYykpCisgICAgZGllICgicGFyZW50IGFuZCBjaGlsZCBnb3QgdGhlIHNhbWUgbm9uY2VcbiIpOworI2VuZGlmICAvKiFIQVZFX1czMl9TWVNURU0qLworfQorCisKKy8qIENoZWNrIHRoYXQgYSBjbG9zZWQgcmFuZG9tIGRldmljZSBvcyByZS1vcGVuZWQgaWYgbmVlZGVkLiAqLworc3RhdGljIHZvaWQKK2NoZWNrX2Nsb3NlX3JhbmRvbV9kZXZpY2UgKHZvaWQpCit7CisjaWZkZWYgSEFWRV9XMzJfU1lTVEVNCisgIGlmICh2ZXJib3NlKQorICAgIGluZiAoImNoZWNrX2Nsb3NlX3JhbmRvbV9kZXZpY2Ugc2tpcHBlZDogbm90IGFwcGxpY2FibGUgb24gV2luZG93c1xuIik7CisjZWxzZSAvKiFIQVZFX1czMl9TWVNURU0qLworICBwaWRfdCBwaWQ7CisgIGludCBpLCBzdGF0dXM7CisgIGNoYXIgYnVmWzRdOworCisgIGlmICh2ZXJib3NlKQorICAgIGluZiAoImNoZWNraW5nIHRoYXQgY2xvc2VfcmFuZG9tX2RldmljZSB3b3Jrc1xuIik7CisKKyAgZ2NyeV9yYW5kb21pemUgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgaWYgKHZlcmJvc2UpCisgICAgcHJpbnRfaGV4ICgicGFyZW50IHJhbmRvbTogIiwgYnVmLCBzaXplb2YgYnVmKTsKKworICBwaWQgPSBmb3JrICgpOworICBpZiAocGlkID09IChwaWRfdCkoLTEpKQorICAgIGRpZSAoImZvcmsgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGlmICghcGlkKQorICAgIHsKKyAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9DTE9TRV9SQU5ET01fREVWSUNFLCAwKTsKKworICAgICAgLyogVGhlIG5leHQgY2FsbCB3aWxsIHJlLW9wZW4gdGhlIGRldmljZS4gICovCisgICAgICBnY3J5X3JhbmRvbWl6ZSAoYnVmLCBzaXplb2YgYnVmLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHsKKyAgICAgICAgICBwcmludF9oZXggKCJjaGlsZCByYW5kb20gOiAiLCBidWYsIHNpemVvZiBidWYpOworICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAgX2V4aXQgKDApOworICAgIH0KKworICB3aGlsZSAoIChpPXdhaXRwaWQgKHBpZCwgJnN0YXR1cywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKQorICAgIDsKKyAgaWYgKGkgIT0gKHBpZF90KSgtMSkKKyAgICAgICYmIFdJRkVYSVRFRCAoc3RhdHVzKSAmJiAhV0VYSVRTVEFUVVMgKHN0YXR1cykpCisgICAgOworICBlbHNlCisgICAgZGllICgiY2hpbGQgZmFpbGVkXG4iKTsKKworI2VuZGlmICAvKiFIQVZFX1czMl9TWVNURU0qLworfQorCisKK3N0YXRpYyBpbnQKK3JuZ190eXBlICh2b2lkKQoreworICBpbnQgcm5ndHlwZTsKKyAgaWYgKGdjcnlfY29udHJvbCAoR0NSWUNUTF9HRVRfQ1VSUkVOVF9STkdfVFlQRSwgJnJuZ3R5cGUpKQorICAgIGRpZSAoInJldHJpZXZpbmcgUk5HIHR5cGUgZmFpbGVkXG4iKTsKKyAgcmV0dXJuIHJuZ3R5cGU7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3JuZ190eXBlX3N3aXRjaGluZyAodm9pZCkKK3sKKyAgaW50IHJuZ3R5cGUsIGluaXRpYWw7CisgIGNoYXIgdG1wMVs0XTsKKworICBpZiAodmVyYm9zZSkKKyAgICBpbmYgKCJjaGVja2luZyB3aGV0aGVyIFJORyB0eXBlIHN3aXRjaGluZyB3b3Jrc1xuIik7CisKKyAgcm5ndHlwZSA9IHJuZ190eXBlICgpOworICBpZiAoZGVidWcpCisgICAgaW5mICgicm5nIHR5cGU6ICVkXG4iLCBybmd0eXBlKTsKKyAgaW5pdGlhbCA9IHJuZ3R5cGU7CisgIGdjcnlfcmFuZG9taXplICh0bXAxLCBzaXplb2YgdG1wMSwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgaWYgKGRlYnVnKQorICAgIHByaW50X2hleCAoIiAgc2FtcGxlOiAiLCB0bXAxLCBzaXplb2YgdG1wMSk7CisgIGlmIChybmd0eXBlICE9IHJuZ190eXBlICgpKQorICAgIGRpZSAoIlJORyB0eXBlIHVuZXhwZWN0ZWRseSBjaGFuZ2VkXG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1BSRUZFUlJFRF9STkdfVFlQRSwgR0NSWV9STkdfVFlQRV9TWVNURU0pOworCisgIHJuZ3R5cGUgPSBybmdfdHlwZSAoKTsKKyAgaWYgKGRlYnVnKQorICAgIGluZiAoInJuZyB0eXBlOiAlZFxuIiwgcm5ndHlwZSk7CisgIGlmIChybmd0eXBlICE9IGluaXRpYWwpCisgICAgZGllICgic3dpdGNoaW5nIHRvIFN5c3RlbSBSTkcgdW5leHBlY3RlZGx5IHN1Y2NlZWRlZFxuIik7CisgIGdjcnlfcmFuZG9taXplICh0bXAxLCBzaXplb2YgdG1wMSwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyAgaWYgKGRlYnVnKQorICAgIHByaW50X2hleCAoIiAgc2FtcGxlOiAiLCB0bXAxLCBzaXplb2YgdG1wMSk7CisgIGlmIChybmd0eXBlICE9IHJuZ190eXBlICgpKQorICAgIGRpZSAoIlJORyB0eXBlIHVuZXhwZWN0ZWRseSBjaGFuZ2VkXG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX1BSRUZFUlJFRF9STkdfVFlQRSwgR0NSWV9STkdfVFlQRV9GSVBTKTsKKworICBybmd0eXBlID0gcm5nX3R5cGUgKCk7CisgIGlmIChkZWJ1ZykKKyAgICBpbmYgKCJybmcgdHlwZTogJWRcbiIsIHJuZ3R5cGUpOworICBpZiAocm5ndHlwZSAhPSBpbml0aWFsKQorICAgIGRpZSAoInN3aXRjaGluZyB0byBGSVBTIFJORyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkXG4iKTsKKyAgZ2NyeV9yYW5kb21pemUgKHRtcDEsIHNpemVvZiB0bXAxLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICBpZiAoZGVidWcpCisgICAgcHJpbnRfaGV4ICgiICBzYW1wbGU6ICIsIHRtcDEsIHNpemVvZiB0bXAxKTsKKyAgaWYgKHJuZ3R5cGUgIT0gcm5nX3R5cGUgKCkpCisgICAgZGllICgiUk5HIHR5cGUgdW5leHBlY3RlZGx5IGNoYW5nZWRcbiIpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFLCBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKTsKKworICBybmd0eXBlID0gcm5nX3R5cGUgKCk7CisgIGlmIChkZWJ1ZykKKyAgICBpbmYgKCJybmcgdHlwZTogJWRcbiIsIHJuZ3R5cGUpOworICBpZiAocm5ndHlwZSAhPSBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKQorICAgIGRpZSAoInN3aXRjaGluZyB0byBzdGFuZGFyZCBSTkcgZmFpbGVkXG4iKTsKKyAgZ2NyeV9yYW5kb21pemUgKHRtcDEsIHNpemVvZiB0bXAxLCBHQ1JZX1NUUk9OR19SQU5ET00pOworICBpZiAoZGVidWcpCisgICAgcHJpbnRfaGV4ICgiICBzYW1wbGU6ICIsIHRtcDEsIHNpemVvZiB0bXAxKTsKKyAgaWYgKHJuZ3R5cGUgIT0gcm5nX3R5cGUgKCkpCisgICAgZGllICgiUk5HIHR5cGUgdW5leHBlY3RlZGx5IGNoYW5nZWRcbiIpOworfQorCisKK3N0YXRpYyB2b2lkCitjaGVja19lYXJseV9ybmdfdHlwZV9zd2l0Y2hpbmcgKHZvaWQpCit7CisgIGludCBybmd0eXBlLCBpbml0aWFsOworCisgIGlmICh2ZXJib3NlKQorICAgIGluZiAoImNoZWNraW5nIHdoZXRoZXIgUk5HIHR5cGUgc3dpdGNoaW5nIHdvcmtzIGluIHRoZSBlYXJseSBzdGFnZVxuIik7CisKKyAgcm5ndHlwZSA9IHJuZ190eXBlICgpOworICBpZiAoZGVidWcpCisgICAgaW5mICgicm5nIHR5cGU6ICVkXG4iLCBybmd0eXBlKTsKKyAgaW5pdGlhbCA9IHJuZ3R5cGU7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfU1lTVEVNKTsKKworICBybmd0eXBlID0gcm5nX3R5cGUgKCk7CisgIGlmIChkZWJ1ZykKKyAgICBpbmYgKCJybmcgdHlwZTogJWRcbiIsIHJuZ3R5cGUpOworICBpZiAoaW5pdGlhbCA+PSBHQ1JZX1JOR19UWVBFX1NZU1RFTSAmJiBybmd0eXBlICE9IEdDUllfUk5HX1RZUEVfU1lTVEVNKQorICAgIGRpZSAoInN3aXRjaGluZyB0byBTeXN0ZW0gUk5HIGZhaWxlZFxuIik7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfRklQUyk7CisKKyAgcm5ndHlwZSA9IHJuZ190eXBlICgpOworICBpZiAoZGVidWcpCisgICAgaW5mICgicm5nIHR5cGU6ICVkXG4iLCBybmd0eXBlKTsKKyAgaWYgKGluaXRpYWwgPj0gR0NSWV9STkdfVFlQRV9GSVBTICYmIHJuZ3R5cGUgIT0gR0NSWV9STkdfVFlQRV9GSVBTKQorICAgIGRpZSAoInN3aXRjaGluZyB0byBGSVBTIFJORyBmYWlsZWRcbiIpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFLCBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKTsKKworICBybmd0eXBlID0gcm5nX3R5cGUgKCk7CisgIGlmIChkZWJ1ZykKKyAgICBpbmYgKCJybmcgdHlwZTogJWRcbiIsIHJuZ3R5cGUpOworICBpZiAocm5ndHlwZSAhPSBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKQorICAgIGRpZSAoInN3aXRjaGluZyB0byBzdGFuZGFyZCBSTkcgZmFpbGVkXG4iKTsKK30KKworCisvKiBCZWNhdXNlIHdlIHdhbnQgdG8gY2hlY2sgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3VyLCB3ZSBuZWVkIHRvCisgICBmb3JrL2V4ZWMgdGhpcyBwcm9ncmFtIHdpdGggc2V2ZXJhbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgV2UgdXNlCisgICBzeXN0ZW0sIHNvIHRoYXQgdGhlc2UgdGVzdHMgd29yayBhbHNvIG9uIFdpbmRvd3MuICAqLworc3RhdGljIHZvaWQKK3J1bl9hbGxfcm5nX3Rlc3RzIChjb25zdCBjaGFyICpwcm9ncmFtKQoreworICBzdGF0aWMgY29uc3QgY2hhciAqb3B0aW9uc1tdID0geworICAgICItLWVhcmx5LXJuZy1jaGVjayIsCisgICAgIi0tZWFybHktcm5nLWNoZWNrIC0tcHJlZmVyLXN0YW5kYXJkLXJuZyIsCisgICAgIi0tZWFybHktcm5nLWNoZWNrIC0tcHJlZmVyLWZpcHMtcm5nIiwKKyAgICAiLS1lYXJseS1ybmctY2hlY2sgLS1wcmVmZXItc3lzdGVtLXJuZyIsCisgICAgIi0tcHJlZmVyLXN0YW5kYXJkLXJuZyIsCisgICAgIi0tcHJlZmVyLWZpcHMtcm5nIiwKKyAgICAiLS1wcmVmZXItc3lzdGVtLXJuZyIsCisgICAgTlVMTAorICB9OworICBpbnQgaWR4OworICBzaXplX3QgbGVuLCBtYXhsZW47CisgIGNoYXIgKmNtZGxpbmU7CisKKyAgbWF4bGVuID0gMDsKKyAgZm9yIChpZHg9MDsgb3B0aW9uc1tpZHhdOyBpZHgrKykKKyAgICB7CisgICAgICBsZW4gPSBzdHJsZW4gKG9wdGlvbnNbaWR4XSk7CisgICAgICBpZiAobGVuID4gbWF4bGVuKQorICAgICAgICBtYXhsZW4gPSBsZW47CisgICAgfQorICBtYXhsZW4gKz0gc3RybGVuIChwcm9ncmFtKTsKKyAgbWF4bGVuICs9IHN0cmxlbiAoIiAtLWluLXJlY3Vyc2lvbiAtLXZlcmJvc2UgLS1kZWJ1ZyAtLXByb2dyZXNzIik7CisgIG1heGxlbisrOworICBjbWRsaW5lID0gbWFsbG9jIChtYXhsZW4gKyAxKTsKKyAgaWYgKCFjbWRsaW5lKQorICAgIGRpZSAoIm91dCBvZiBjb3JlXG4iKTsKKworICBmb3IgKGlkeD0wOyBvcHRpb25zW2lkeF07IGlkeCsrKQorICAgIHsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBpbmYgKCJub3cgcnVubmluZyB3aXRoIG9wdGlvbnMgJyVzJ1xuIiwgb3B0aW9uc1tpZHhdKTsKKyAgICAgIHN0cmNweSAoY21kbGluZSwgcHJvZ3JhbSk7CisgICAgICBzdHJjYXQgKGNtZGxpbmUsICIgLS1pbi1yZWN1cnNpb24iKTsKKyAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBzdHJjYXQgKGNtZGxpbmUsICIgLS12ZXJib3NlIik7CisgICAgICBpZiAoZGVidWcpCisgICAgICAgIHN0cmNhdCAoY21kbGluZSwgIiAtLWRlYnVnIik7CisgICAgICBpZiAod2l0aF9wcm9ncmVzcykKKyAgICAgICAgc3RyY2F0IChjbWRsaW5lLCAiIC0tcHJvZ3Jlc3MiKTsKKyAgICAgIHN0cmNhdCAoY21kbGluZSwgIiAiKTsKKyAgICAgIHN0cmNhdCAoY21kbGluZSwgb3B0aW9uc1tpZHhdKTsKKyAgICAgIGlmIChzeXN0ZW0gKGNtZGxpbmUpKQorICAgICAgICBkaWUgKCJydW5uaW5nICclcycgZmFpbGVkXG4iLCBjbWRsaW5lKTsKKyAgICB9CisKKyAgZnJlZSAoY21kbGluZSk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIGludCBlYXJseV9ybmcgPSAwOworICBpbnQgaW5fcmVjdXJzaW9uID0gMDsKKyAgY29uc3QgY2hhciAqcHJvZ3JhbSA9IE5VTEw7CisKKyAgaWYgKGFyZ2MpCisgICAgeworICAgICAgcHJvZ3JhbSA9ICphcmd2OworICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgfQorICBlbHNlCisgICAgZGllICgiYXJndlswXSBtaXNzaW5nXG4iKTsKKworICB3aGlsZSAoYXJnYyAmJiBsYXN0X2FyZ2MgIT0gYXJnYyApCisgICAgeworICAgICAgbGFzdF9hcmdjID0gYXJnYzsKKyAgICAgIGlmICghc3RyY21wICgqYXJndiwgIi0tIikpCisgICAgICAgIHsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgeworICAgICAgICAgIGZwdXRzICgidXNhZ2U6IHJhbmRvbSBbb3B0aW9uc11cbiIsIHN0ZG91dCk7CisgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS12ZXJib3NlIikpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJib3NlID0gMTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWRlYnVnIikpCisgICAgICAgIHsKKyAgICAgICAgICBkZWJ1ZyA9IHZlcmJvc2UgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tcHJvZ3Jlc3MiKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIHdpdGhfcHJvZ3Jlc3MgPSAxOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taW4tcmVjdXJzaW9uIikpCisgICAgICAgIHsKKyAgICAgICAgICBpbl9yZWN1cnNpb24gPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZWFybHktcm5nLWNoZWNrIikpCisgICAgICAgIHsKKyAgICAgICAgICBlYXJseV9ybmcgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tcHJlZmVyLXN0YW5kYXJkLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyBpcyBhbnl3YXkgdGhlIGRlZmF1bHQsIGJ1dCB3ZSBtYXkgd2FudCB0byB1c2UgaXQgZm9yCisgICAgICAgICAgICAgZGVidWdnaW5nLiAqLworICAgICAgICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfUFJFRkVSUkVEX1JOR19UWVBFLCBHQ1JZX1JOR19UWVBFX1NUQU5EQVJEKTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXByZWZlci1maXBzLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfRklQUyk7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1wcmVmZXItc3lzdGVtLXJuZyIpKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9QUkVGRVJSRURfUk5HX1RZUEUsIEdDUllfUk5HX1RZUEVfU1lTVEVNKTsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBIQVZFX1czMl9TWVNURU0KKyAgc2lnbmFsIChTSUdQSVBFLCBTSUdfSUdOKTsKKyNlbmRpZgorCisgIGlmIChlYXJseV9ybmcpCisgICAgY2hlY2tfZWFybHlfcm5nX3R5cGVfc3dpdGNoaW5nICgpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisKKyAgaWYgKHdpdGhfcHJvZ3Jlc3MpCisgICAgZ2NyeV9zZXRfcHJvZ3Jlc3NfaGFuZGxlciAocHJvZ3Jlc3NfY2IsIE5VTEwpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisKKyAgaWYgKCFpbl9yZWN1cnNpb24pCisgICAgeworICAgICAgY2hlY2tfZm9ya2luZyAoKTsKKyAgICAgIGNoZWNrX25vbmNlX2ZvcmtpbmcgKCk7CisgICAgICBjaGVja19jbG9zZV9yYW5kb21fZGV2aWNlICgpOworICAgIH0KKyAgY2hlY2tfcm5nX3R5cGVfc3dpdGNoaW5nICgpOworCisgIGlmICghaW5fcmVjdXJzaW9uKQorICAgIHJ1bl9hbGxfcm5nX3Rlc3RzIChwcm9ncmFtKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3JzYS0xNmsua2V5IGIvdGVzdHMvcnNhLTE2ay5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3OTE1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JzYS0xNmsua2V5CkBAIC0wLDAgKzEsMTggQEAKKyhrZXktZGF0YSAKKyAocHVibGljLWtleSAKKyAgKHJzYSAKKyAgIChuICMwMEQ2MDA3QTdBRDQ3QkI4RDZCMzU2RTRGMjRERkFFRTNBNzIyRkVFNzdGN0U5NTQ3Rjg2NkNCMzY5QzIzM0U2Q0IzOTE2RDQxNjk3M0UzMTU3QjREQzE4MzdFNkQ0QzkwN0QxMDYzODU1NzM1RUFBODU3MTc2QTdEQTNDQTlGMzc4RkY3QUU5RUYyMjdDMTkzOTY1RjEwNkYzNURCMkE4MzNEMjc2MENGOUYyRDA0MTkzOENEMzEwRDlDRTM4RUREMTc5QzMzRUJDNDk2M0EwMjIyMUQ4MDAwRkRCRjRCRUI1OTJDQUIxRUQxRUVFQzlENjkxNkYyNzI2M0M3NkRFNzAxODRGNTM5OURFM0IzODYyMjI3MzQ2QjFCM0ZCQTMwNjE3NEQwOEJFQzM2NzVFMjU5M0NGRDQyMTU5NjU1QjBCRTFBMkI2OUMyQkE5RjRGMDNCOEM2QkE1MDVGNkJGREZDNjE2M0Q3NEY0MkE2RDQ5MDgyODRENjg3OUNFQ0NGNjUxMkY5MjI1NjEyRTMwMzBBQ0YzNjYzREZCNzdCNDFBRkZDRkM3MEJDMTFCMjI0RTE0QjM5N0QyNUFDMTVFNEUzNDJCMzRCMzYzMDU2RUE3NkNCMDI2NURCRDQxRjczM0M3RkRFOThCN0MyMzQwMjg5RTMzOENEMzFGOTkzQUJGQUNBNkU4M0I1NEJDQjUwREQxREQxMTE2NUMxODhDODBFQkRBMTkwQTExQjZEODk4MkNEQTFCNkI5RDE2MzFBQTNFQUNDOTMwNDAyMzc4MzFBNTJEMTU4MjZBMEQzRTkyQzgzM0QwMjM0OTc1QzkyQTcyMzZGOTAyRkE2NzAzQzg5Qzc3Nzk3NjUwMjBDMTFGNzE0QjRDOUQzM0I3NkNENDY2REMyQkU5QTEwMjQ4OEIwNjM1RjMxRTZGQkI5MjgyRTUxMzlEMzI2MjNFMTBFRDlDMjk1REEzQjM5RjY4MjI3MjE4RURGOEM2RkU5MzcyRjE3NEFFMURFNUJCRTdCMEFGMDlBODY5Q0FFREJFRkUwNTQ1OEJGRDQzQ0YzMkYxMEY1QzM0NUEyRTNENTg4QzhDMTZCNERBOEI0NEZBOTUzOUM2NzlCODExMzNBMzU0OTg2OTZGNUQ4NjZFM0I2QTg5ODExQUVBN0JGRDFCRjY5MEVDMzI5RDg3OTg5Q0RBREE3RUFCMTA2Nzg1RDJENjY2MUJENDAwRDc2QzExM0UyOEYxM0ZEODgzMDI3RTFDQUM4NDhCMTM3NTBDN0NDRDUzMDI3M0MxNjVCREZEQTkzRTZGNzI4OTdFOTdGMDAzMzA4NzA0Qjk1ODAxRjIyM0VFODkxNjA3ODZCMURFNDQwQkE5QzFGMzcxQ0JBMzdFNUIwOTY1MENEQjNBQTFBQkFBMjM3QUQxNUI4OURDRDAzMzkwQTI4MzA4NjQzRTIxOTQ5MEJFQzgzNDAzRjZBMDlCOTRGODFEN0JCMzkxQzEyMUZDOTAyOEE2OTA4RTVCMjg3QUM3OTIwOUI5MDVCMzM3MjRCMTg2OUE2NzlDQjM0N0JGMTkyRDgwRDJENjZDRjFEQUVGRUJCRjIyQ0VEQjhDRUMwMTBENkY4RDg2Q0QwNTVFRDcxNDI1REE3MkRGMUMwN0E1NzNFNkYwNzAyMzVDMzc4REFCNTQwNEVEMDA0QjQ5NDZDQ0RBNDc4NkFDQkJGMzc5QTQ3Q0MzNkEwNDlDNTA2NTFDQTRCMUNFRjAzRUU4N0RCNkQyNDg0QzNEMTBBRjcxNzk4QTZBRDFFMjA3ODA4MTRGNzkzNDhENDVCRDEwMDQ4ODBEMkRFREVCRDE1MjY5NEM4MEI5RjkzREYzMkY1OTMwOTExREIzNzlCNENCQjkyMzBDRkM1RkMxMjZCOUI3N0YwNzRCOUM4MkJEQjRGMTI0NzFCM0ZFOTIwNzk1MjVGRDI3NjI5M0I2M0I5NzhCNTVFMDM5MDI0RUU2ODgxODBEN0M3QzZDMDk0Qjc1NEFCOUI2NTJBQzMxODEyRjJGN0U0NUVGMkI2RDQ0NzhEN0M2RTVDOEYzQ0IwQTREMDRBM0U2OTNEMURENEQ4Rjg5NEU5MTBEOUE5OTlEREFCRTA0MjdBMUFCMEM3MTVDNUE2OTVBNjkxNDBCMjBCOURBMTE5NUU2Qzk1MzZCNURGMjRCNEQ0NUVEMjREMEYyQzI3NkUzQ0Y0ODA2NkVGQjk3N0MyQjcwOTZCMDJFQjUyMzA5RDkxNkJENDMyMzQ3RDcyNzk5QkY5RDc2QTAzRDU0REUyMTE0NjAwMTdDMEUyNjhCQzlFMjNCNDE1QUJGNDZFQjhCOTM5QjVBNDEzRUJEM0YyMEU5NUY3MDRFMUYyQ0RDREY5NzRBODc0MzkyM0RCQzZEODM2M0RDODk0OEJFODVFRjFEMzY4Q0QzRUFCREJFNUI4MjY0OEQyRjY3NkVCMzEwRDdCNzc0NjVEM0ExNEI4NjA1MDQ2M0U0M0FDNzQ1RjM3ODFFN0E2RjU4MkJEN0I4QUIyMkJDNEVFRUNEMkNCMTU1RTZFMEIyNjA0ODQzRTM5MDZENDdFQkRBMkMxMEI2RDhCRkNCQjU3MjJDRTUzOTRFQjUwNzIxRTkwRUZEMjhDNjNBNjIyNjlDOEMxNDU5M0Q2OTA3NkQwRjE5OEQyQkRDQ0I2RDc1M0NCODFDNEJFRDU2QTkwRTJEREJGRkMwQjkwNzZDNjVGOTczQjVFQTMyNDJFNzFFM0NCQkZFMDk3NkNGRTIyNDc1RjU2NzI2MDU4RDJEMENFM0JENTJBQTk0MEEwRjU1OUREMDU1QkU5QTZGNTA4NDY5MDJFMDJCNzBEQjRGRjVCRUQzMzc2MkUxMDQwOUQyNUFCREFDRjY2MUJEOUJBMkEyMjIxMkUwMjg5M0ExNjI1Q0E0NDg1MDg4N0I0QjNBMDBEMEFGNjM2NDVFMkVDNDIzMzMwMzUwNjIwOTBFOEU3RTYzMDM3QzY5MkZCQTBCM0ZDN0YzNjg2RkMyODMxRjRERTJENEQ4MkNGNkZENjMyMUQ2NjIxQzgyMjc3MTVFMzc3MkVFODgwNTkxMUFBOUU2NzA4M0M1MTFGMTc4NjNDNEQ2RjJDMjlFMTlDRjMyOTIwMDAyNEU1MzlBN0M1QkYxQTlENjAxQUZGOERCN0NGRDc1QzY1MzI0ODg0NjlFNDRCQUM3MjY2QTNDMTI3NzIwRTY0MDMyOEY5OTcwQjc1NTA5RTI5MkNDRUMwQjU1QTFGNzI5NDU2Q0IyODA0QkU1MDQ1MTE4NUY4Q0RBMzEzQzdENERGNkMxQzY3RDZDNDExMDI1QTJCRkZGMDZDNTA2MjQ3MEY5N0IxN0U3NUI0RjgxQ0QxRkVDNzc3NDY1RDY4NDg0OTgwOUI0MjgxQjY5MEQyQThGRTVDNEZBODdEQjAwMzI4NjMwRkMzMUJGRERBNDY0MUIyOUNCNDM0MTQ3ODA2QTYxNEU0NTBFM0UyQjUwMzE3RTNCNEVFNjI2MkEyRDREMEE4RkU3NTMwQ0VERkJDQjUwMTZDNEQ2RTYxQzM0RTYxQUZBMzI0ODcxQTlDNzVGOUJDNkJGNkM5MkI5NTkxMEM5RDBGRTA0OUFFRUYyRTk2RTRDOUU2OUUxRkNFMUY2Q0M2ODdENTMzNjY4RjU1MzY3RTI2OTUxOTdCRTM5MkE3RkU2NkM0Rjg4QzBCMUE5REVDNkRGRjY4MjY3NTg1NTk3OURFQTJBNTY0NDc0OEREODgyQ0UxRjBEOEZEQTg1MzA2MTdCQUExMzBBRDlDMTZBQkY4RDc2QjU4NTMxMDRBRDJFMEM1NEM5NjM5QzNGNkUxMzQzQUM5NDEzOTYyMTI0NUVFOEUxMkNBNDM2NkE2RUM3NTJCRDlEMUEwOTQ4Q0NDMzYyNkNFREI4ODJCQTQ2MzgxMTVCQkY1NTQ0NERENDU0NEVFQzU2MUYwRTc2MkM5OTg5QTkzMDZENDc0OUFCRDQ3QzMxRjQwQUQzRjczNUZFRUU2RTFGRENFQjYyNjA3M0NENUY3NjczMEIzNDgxMDNCMDQxQjlFRUI5NDFFRkE2MTU4MUREOTI3ODgwMkEyOTM0QzMzRkYwNjY4QzI1Q0VGMjU0NkM0NDI2M0E2ODkxOUVDQkI1NDBCNEExOEUxODY3RUExNUM5RjdBMjg1M0Y1NUVGQkIwMUMzRDI3RDI4NTc5RTAzMEQwQTc3MUI3NTQ2ODBGQ0Q0NkI1NkVCRDM0MzFDMjRGMjAyQTM0M0UyMDI5NDA3NkU1NkEwOUZBNUY2QzNFODQ0REFGNUJEQ0ZCRkY1NUNDQzNGREREQjA2MEZCQzY4MEJBNTIwMTUzMDk4RTU3RkM3NzQxRDc3REZBODkzMkY5MDI4RDhFMEU2NjYwMDk3NEE0MURBQzVCQkE0NjkwNDA3QUMzNkVDMjA2NjU1QURDRUNDOEFBMDQ3MTYwMUY2N0MzREY0OEI4MzA1ODVGQTE1QzUyMDYxQzRGRjk1ODQ1M0IxRTc1NjI2MTIwQ0RDMEFEQ0U0NDc0MzAyN0ZBNEM1OUMxOTMxRTkwNzI2Q0QyQkUyNDBEMERDNkQ2MUNERTUxNjUzNTBEODZGRkYxNzI2MEE4MjNDMEFFMzQ2N0E1OTdENzc0QTY3QkU4NDM5NTE5NzVFMTdCQzFDQjY5REM4QTBDN0JGRjc5OUZCOEZEMkJEQjM3ODUzRDJFQjI4QzlCN0I4QTIyMTJGQzczRkRGMkYyMUZGM0ZCQ0Q3OTg1MzNGQzQ4Njc3MzlFNDhCQTA2MUIxNzRCQUMyMjQwNjRGM0U4NjdBMUNGNTJFMDkxRkREMzY4NzE5NTVGQkVBOTBDRDNEMjNCMUJGMDAzOTkzMEUwNjM2MDgwRTZBMzYyMDZFRDVERDFDRTQ1NDZFQzBCMDgwMkJCRUUyODY5RENDQUVBMDFCOEZDM0E2MzkyODIwMTgwQUE0RDk5QUI2N0M1N0U4RkQwODc0RTdDNTRCQkM3QjlBMkFBNEQxRUE0QURDMUEyODAyREY5MDhBRjc0RjkxNUFGOThFRUVCRjgyMkFDOTU4Q0QwRDlBRjVBNzU0QUIyRjQ3OTAyMjVGMTg4NjRBOTQ3MzRFNTI2QkRFNDk3RkYyMUYzMzkyNDcyRDRGMEUzQjdFMkVFOTdERENBMTUwNjBCRjM1QTA1RTI1OTM0MTg4MDlEM0M5NzM4QzMyOEVCNEQ0NEYzNUU2QzkxMzA2OTA5NkIwNzQyODA5RjU1RjAxRDA2RDQwRUIwNDc2QzM0OTUwRkRBRUY5QkQyQ0MxRjc2NTNCNEJDRjFBQTMwNDk2MzUzMEM4RjBDMzk2OTdFQUQzMkFERjQ2NEUzQ0FDOTMxRDMzOTkyQjM1N0EzQTIzMUZCOTc4QTU2QzM1OTJBNjE0MTFBNTQyOEMzNTQ5QTk5MUQ4MTEjKQorICAgKGUgIzAxMDAwMSMpCisgICApCisgICkKKyAocHJpdmF0ZS1rZXkgCisgIChyc2EgCisgICAobiAjMDBENjAwN0E3QUQ0N0JCOEQ2QjM1NkU0RjI0REZBRUUzQTcyMkZFRTc3RjdFOTU0N0Y4NjZDQjM2OUMyMzNFNkNCMzkxNkQ0MTY5NzNFMzE1N0I0REMxODM3RTZENEM5MDdEMTA2Mzg1NTczNUVBQTg1NzE3NkE3REEzQ0E5RjM3OEZGN0FFOUVGMjI3QzE5Mzk2NUYxMDZGMzVEQjJBODMzRDI3NjBDRjlGMkQwNDE5MzhDRDMxMEQ5Q0UzOEVERDE3OUMzM0VCQzQ5NjNBMDIyMjFEODAwMEZEQkY0QkVCNTkyQ0FCMUVEMUVFRUM5RDY5MTZGMjcyNjNDNzZERTcwMTg0RjUzOTlERTNCMzg2MjIyNzM0NkIxQjNGQkEzMDYxNzREMDhCRUMzNjc1RTI1OTNDRkQ0MjE1OTY1NUIwQkUxQTJCNjlDMkJBOUY0RjAzQjhDNkJBNTA1RjZCRkRGQzYxNjNENzRGNDJBNkQ0OTA4Mjg0RDY4NzlDRUNDRjY1MTJGOTIyNTYxMkUzMDMwQUNGMzY2M0RGQjc3QjQxQUZGQ0ZDNzBCQzExQjIyNEUxNEIzOTdEMjVBQzE1RTRFMzQyQjM0QjM2MzA1NkVBNzZDQjAyNjVEQkQ0MUY3MzNDN0ZERTk4QjdDMjM0MDI4OUUzMzhDRDMxRjk5M0FCRkFDQTZFODNCNTRCQ0I1MEREMUREMTExNjVDMTg4QzgwRUJEQTE5MEExMUI2RDg5ODJDREExQjZCOUQxNjMxQUEzRUFDQzkzMDQwMjM3ODMxQTUyRDE1ODI2QTBEM0U5MkM4MzNEMDIzNDk3NUM5MkE3MjM2RjkwMkZBNjcwM0M4OUM3Nzc5NzY1MDIwQzExRjcxNEI0QzlEMzNCNzZDRDQ2NkRDMkJFOUExMDI0ODhCMDYzNUYzMUU2RkJCOTI4MkU1MTM5RDMyNjIzRTEwRUQ5QzI5NURBM0IzOUY2ODIyNzIxOEVERjhDNkZFOTM3MkYxNzRBRTFERTVCQkU3QjBBRjA5QTg2OUNBRURCRUZFMDU0NThCRkQ0M0NGMzJGMTBGNUMzNDVBMkUzRDU4OEM4QzE2QjREQThCNDRGQTk1MzlDNjc5QjgxMTMzQTM1NDk4Njk2RjVEODY2RTNCNkE4OTgxMUFFQTdCRkQxQkY2OTBFQzMyOUQ4Nzk4OUNEQURBN0VBQjEwNjc4NUQyRDY2NjFCRDQwMEQ3NkMxMTNFMjhGMTNGRDg4MzAyN0UxQ0FDODQ4QjEzNzUwQzdDQ0Q1MzAyNzNDMTY1QkRGREE5M0U2RjcyODk3RTk3RjAwMzMwODcwNEI5NTgwMUYyMjNFRTg5MTYwNzg2QjFERTQ0MEJBOUMxRjM3MUNCQTM3RTVCMDk2NTBDREIzQUExQUJBQTIzN0FEMTVCODlEQ0QwMzM5MEEyODMwODY0M0UyMTk0OTBCRUM4MzQwM0Y2QTA5Qjk0RjgxRDdCQjM5MUMxMjFGQzkwMjhBNjkwOEU1QjI4N0FDNzkyMDlCOTA1QjMzNzI0QjE4NjlBNjc5Q0IzNDdCRjE5MkQ4MEQyRDY2Q0YxREFFRkVCQkYyMkNFREI4Q0VDMDEwRDZGOEQ4NkNEMDU1RUQ3MTQyNURBNzJERjFDMDdBNTczRTZGMDcwMjM1QzM3OERBQjU0MDRFRDAwNEI0OTQ2Q0NEQTQ3ODZBQ0JCRjM3OUE0N0NDMzZBMDQ5QzUwNjUxQ0E0QjFDRUYwM0VFODdEQjZEMjQ4NEMzRDEwQUY3MTc5OEE2QUQxRTIwNzgwODE0Rjc5MzQ4RDQ1QkQxMDA0ODgwRDJERURFQkQxNTI2OTRDODBCOUY5M0RGMzJGNTkzMDkxMURCMzc5QjRDQkI5MjMwQ0ZDNUZDMTI2QjlCNzdGMDc0QjlDODJCREI0RjEyNDcxQjNGRTkyMDc5NTI1RkQyNzYyOTNCNjNCOTc4QjU1RTAzOTAyNEVFNjg4MTgwRDdDN0M2QzA5NEI3NTRBQjlCNjUyQUMzMTgxMkYyRjdFNDVFRjJCNkQ0NDc4RDdDNkU1QzhGM0NCMEE0RDA0QTNFNjkzRDFERDREOEY4OTRFOTEwRDlBOTk5RERBQkUwNDI3QTFBQjBDNzE1QzVBNjk1QTY5MTQwQjIwQjlEQTExOTVFNkM5NTM2QjVERjI0QjRENDVFRDI0RDBGMkMyNzZFM0NGNDgwNjZFRkI5NzdDMkI3MDk2QjAyRUI1MjMwOUQ5MTZCRDQzMjM0N0Q3Mjc5OUJGOUQ3NkEwM0Q1NERFMjExNDYwMDE3QzBFMjY4QkM5RTIzQjQxNUFCRjQ2RUI4QjkzOUI1QTQxM0VCRDNGMjBFOTVGNzA0RTFGMkNEQ0RGOTc0QTg3NDM5MjNEQkM2RDgzNjNEQzg5NDhCRTg1RUYxRDM2OENEM0VBQkRCRTVCODI2NDhEMkY2NzZFQjMxMEQ3Qjc3NDY1RDNBMTRCODYwNTA0NjNFNDNBQzc0NUYzNzgxRTdBNkY1ODJCRDdCOEFCMjJCQzRFRUVDRDJDQjE1NUU2RTBCMjYwNDg0M0UzOTA2RDQ3RUJEQTJDMTBCNkQ4QkZDQkI1NzIyQ0U1Mzk0RUI1MDcyMUU5MEVGRDI4QzYzQTYyMjY5QzhDMTQ1OTNENjkwNzZEMEYxOThEMkJEQ0NCNkQ3NTNDQjgxQzRCRUQ1NkE5MEUyRERCRkZDMEI5MDc2QzY1Rjk3M0I1RUEzMjQyRTcxRTNDQkJGRTA5NzZDRkUyMjQ3NUY1NjcyNjA1OEQyRDBDRTNCRDUyQUE5NDBBMEY1NTlERDA1NUJFOUE2RjUwODQ2OTAyRTAyQjcwREI0RkY1QkVEMzM3NjJFMTA0MDlEMjVBQkRBQ0Y2NjFCRDlCQTJBMjIyMTJFMDI4OTNBMTYyNUNBNDQ4NTA4ODdCNEIzQTAwRDBBRjYzNjQ1RTJFQzQyMzMzMDM1MDYyMDkwRThFN0U2MzAzN0M2OTJGQkEwQjNGQzdGMzY4NkZDMjgzMUY0REUyRDREODJDRjZGRDYzMjFENjYyMUM4MjI3NzE1RTM3NzJFRTg4MDU5MTFBQTlFNjcwODNDNTExRjE3ODYzQzRENkYyQzI5RTE5Q0YzMjkyMDAwMjRFNTM5QTdDNUJGMUE5RDYwMUFGRjhEQjdDRkQ3NUM2NTMyNDg4NDY5RTQ0QkFDNzI2NkEzQzEyNzcyMEU2NDAzMjhGOTk3MEI3NTUwOUUyOTJDQ0VDMEI1NUExRjcyOTQ1NkNCMjgwNEJFNTA0NTExODVGOENEQTMxM0M3RDRERjZDMUM2N0Q2QzQxMTAyNUEyQkZGRjA2QzUwNjI0NzBGOTdCMTdFNzVCNEY4MUNEMUZFQzc3NzQ2NUQ2ODQ4NDk4MDlCNDI4MUI2OTBEMkE4RkU1QzRGQTg3REIwMDMyODYzMEZDMzFCRkREQTQ2NDFCMjlDQjQzNDE0NzgwNkE2MTRFNDUwRTNFMkI1MDMxN0UzQjRFRTYyNjJBMkQ0RDBBOEZFNzUzMENFREZCQ0I1MDE2QzRENkU2MUMzNEU2MUFGQTMyNDg3MUE5Qzc1RjlCQzZCRjZDOTJCOTU5MTBDOUQwRkUwNDlBRUVGMkU5NkU0QzlFNjlFMUZDRTFGNkNDNjg3RDUzMzY2OEY1NTM2N0UyNjk1MTk3QkUzOTJBN0ZFNjZDNEY4OEMwQjFBOURFQzZERkY2ODI2NzU4NTU5NzlERUEyQTU2NDQ3NDhERDg4MkNFMUYwRDhGREE4NTMwNjE3QkFBMTMwQUQ5QzE2QUJGOEQ3NkI1ODUzMTA0QUQyRTBDNTRDOTYzOUMzRjZFMTM0M0FDOTQxMzk2MjEyNDVFRThFMTJDQTQzNjZBNkVDNzUyQkQ5RDFBMDk0OENDQzM2MjZDRURCODgyQkE0NjM4MTE1QkJGNTU0NDRERDQ1NDRFRUM1NjFGMEU3NjJDOTk4OUE5MzA2RDQ3NDlBQkQ0N0MzMUY0MEFEM0Y3MzVGRUVFNkUxRkRDRUI2MjYwNzNDRDVGNzY3MzBCMzQ4MTAzQjA0MUI5RUVCOTQxRUZBNjE1ODFERDkyNzg4MDJBMjkzNEMzM0ZGMDY2OEMyNUNFRjI1NDZDNDQyNjNBNjg5MTlFQ0JCNTQwQjRBMThFMTg2N0VBMTVDOUY3QTI4NTNGNTVFRkJCMDFDM0QyN0QyODU3OUUwMzBEMEE3NzFCNzU0NjgwRkNENDZCNTZFQkQzNDMxQzI0RjIwMkEzNDNFMjAyOTQwNzZFNTZBMDlGQTVGNkMzRTg0NERBRjVCRENGQkZGNTVDQ0MzRkREREIwNjBGQkM2ODBCQTUyMDE1MzA5OEU1N0ZDNzc0MUQ3N0RGQTg5MzJGOTAyOEQ4RTBFNjY2MDA5NzRBNDFEQUM1QkJBNDY5MDQwN0FDMzZFQzIwNjY1NUFEQ0VDQzhBQTA0NzE2MDFGNjdDM0RGNDhCODMwNTg1RkExNUM1MjA2MUM0RkY5NTg0NTNCMUU3NTYyNjEyMENEQzBBRENFNDQ3NDMwMjdGQTRDNTlDMTkzMUU5MDcyNkNEMkJFMjQwRDBEQzZENjFDREU1MTY1MzUwRDg2RkZGMTcyNjBBODIzQzBBRTM0NjdBNTk3RDc3NEE2N0JFODQzOTUxOTc1RTE3QkMxQ0I2OURDOEEwQzdCRkY3OTlGQjhGRDJCREIzNzg1M0QyRUIyOEM5QjdCOEEyMjEyRkM3M0ZERjJGMjFGRjNGQkNENzk4NTMzRkM0ODY3NzM5RTQ4QkEwNjFCMTc0QkFDMjI0MDY0RjNFODY3QTFDRjUyRTA5MUZERDM2ODcxOTU1RkJFQTkwQ0QzRDIzQjFCRjAwMzk5MzBFMDYzNjA4MEU2QTM2MjA2RUQ1REQxQ0U0NTQ2RUMwQjA4MDJCQkVFMjg2OURDQ0FFQTAxQjhGQzNBNjM5MjgyMDE4MEFBNEQ5OUFCNjdDNTdFOEZEMDg3NEU3QzU0QkJDN0I5QTJBQTREMUVBNEFEQzFBMjgwMkRGOTA4QUY3NEY5MTVBRjk4RUVFQkY4MjJBQzk1OENEMEQ5QUY1QTc1NEFCMkY0NzkwMjI1RjE4ODY0QTk0NzM0RTUyNkJERTQ5N0ZGMjFGMzM5MjQ3MkQ0RjBFM0I3RTJFRTk3RERDQTE1MDYwQkYzNUEwNUUyNTkzNDE4ODA5RDNDOTczOEMzMjhFQjRENDRGMzVFNkM5MTMwNjkwOTZCMDc0MjgwOUY1NUYwMUQwNkQ0MEVCMDQ3NkMzNDk1MEZEQUVGOUJEMkNDMUY3NjUzQjRCQ0YxQUEzMDQ5NjM1MzBDOEYwQzM5Njk3RUFEMzJBREY0NjRFM0NBQzkzMUQzMzk5MkIzNTdBM0EyMzFGQjk3OEE1NkMzNTkyQTYxNDExQTU0MjhDMzU0OUE5OTFEODExIykgICAKKyAgIChlICMwMTAwMDEjKQorICAgKGQgIzAxMjVBN0VEMTRFMDE0MTExQUUyQkQ4RkQ4MUE2OUIwQkRFRDg4NkRCRTQ3N0Q5Q0MwOEM2QjA3RjFGODJCRDVCRDczNzk3RkY5RkZGQjBEMjU0MkJFOTdGRDFEQ0U5RkUzMEY1MTZGMTE3REI0NDlCNTEzQzg1RUY3NzlEQzkxREQ1N0I2QjJFMUJERDA3N0ExRUJFMTQ4NDg2QzJBREM4RkVBQzdGRTFCRDQwQkRENDVFNjgzM0IyNkZCNzUzODhEMDUyOTMxNzdFRTEyNjc4QjE5N0I0MkVGRDU5QTM4OTg1QjRCQjQ3MUEzNzYxRTQxRjFCQThBQjNBMkFGQTVBMjQxQjk5OTA5NkI4QTk4MDlCQzdDNURCQjNCREY0NzYwNDlBRTc2NzFBNDcyMTNDOTkyMkI3RTRDMUE1NTQ1QkE5MkM1NTUxMDBEQjAwQUI3NzI1NEM4RTFERkMyODNGM0VERTkwMTgxOUI2MTFDRDVFNTUxMTMzRDE0RThGRDE4ODQwRjYzMzFEMjlFMkVFRDQ3MTE4RTcwOTRDMUUzNkU1M0RBMkFBOTAxMzM4NTZBMzUxMzY3MjI0QjUxRjgwQzE4NEE1QzNDNENEQTVDQzgyMjEyNkIzREY2OTZBRTk2QkZCOEI4MzZGQTU2RTRFOEQ3RDhBNTQ1RTVGNjY4RjIzMjAzQUM2OTY4QkUwQThBMEMzQkVFQUMwQUM5Q0ZBRTk5NEI4RUE1RTI5M0E1Qjk4MTdENDlCODk3NjE1Mjg1OTVCQjk5RDgzQzJCMUFBNDA1NEZBMkZGMUQxRDRGOEFEQkMzRTg2M0Q4RjRCRDhDNzZDMzhFMDU3RDgxNzQwRkI0RkIxMkJDM0NGODBBQjUxMDIyMzkzNEZFOEQzRkQ0NjFEMTdFOUI0RUEwNzM4MEE3RTUyMDJERDkzQTQwQjFGMkU2QzIwNDgxNjA5NDlBMjQ3QUM5QTNGOTYyQTRFMkY0RUU4MDlGMDBDNzZBRjhEQTQ3MzdEMTM5OEU2QTk1QkU0NjM3Qzk0OUEzMzQ5MkM5NjkxQjI1NEVCMjM5RUE3QjFFQzBFMkQ0MjYxQTI3MTgzRjkwNTc3RjA0QjM1NkZEMTBGREI1RTIzQTQ0NzEwNjg5NTI5MzBFQUZGNEVEQzc1N0FDRTI1NzgxREJBODA3QTBDMTUzRkVERENDQjU1QTA4Qjc3NEFCNDRBRDJDQzc1QkQzMTlENDgyMkJGQzZBRjI0QzlGODM3QzcyRDFBNjE1MTA5ODgyOTA2QURDMkIyQzY3OTYzMEE2RkFFMzYzMTQ0Qjc3QTEzNEYyODU2REYxRDhFOUE3N0FBRUMwOEE3MkZENjdDMTIyQkQyODBENTkxQTZDNDA0NUQwNDk3MzYyRkI5MUM4QzM4QzAwQTQ1N0EwQkJFOEQ2MjUyMTBFNEJGNTVGQzQwNDFGQkUwQTE1MTVCNzBFQTk4QzRGNDI4NEIzQzk2QzE1REQyMUM4Q0MxNTMwNURCNUJGQTJDMjFFQjk1MjBDOUFDRDgyM0Y1RTdBQkNEQTM5OTNEODlBN0I1NjFDMTAxRkVDMDhBOEFFNjYyMTI0NUNBQTE0MDZENzUzNkZCQzZFODM1NjkyRDJCMUJCNTQwQjhGMkIyRUFCN0ExNDA2QjJGRTgzODczQ0RFREZCMEEwRTcxN0EwMzdDRDNBNjMyMkFFMEI2RjVFMzYxODc2NDY4NjZBMEQ0MDZGN0Y1NDAwN0ZFQzk3MTEzMTFCQ0U4N0ZDNkI0RjQ0QzVEMUY3QkVERDJERUQwODFGMTQzOUYzODMxMkZBMjdDQjY1NjY1QjE1OTVGODg3MTMzNzg3OTdBQjYyNEM3MjhDQTY2MzI2NTNFQzhFNzYyQTc2RTNFNTk3QUFENEMzQzNGRTQxNjQ4QUVCMDdGQ0I4QkZFOUM3MEExODE4RTRGMUIxOTEyNEJFQ0QzMjBFNENEQTZBOUZEMDJCMEE0MjIxMTRCNURFMzEzNzY1NDlDM0I1RkUxQTg5NkY4RkNCMjU2QjgxNEJEMTAwRkZCRjUzNTk1MTBEOEZEMjQzREIwMTREQkNGQTMwMzZDODU3QTQxRENCQUUyOUVDRTI1MDEyQUYwQjg4ODI3QTFCM0YzRkE2RTc1RURGMTc5MEIwQ0NENzk0RDBFNzMzMzE1NzQzRUY1MEZBMThFNUUxQTkzREM1RDFFQjI4RjU1NUMwQTg1NDFCNzI5OTU0RUExODY1QzZGREJFODEwRDE1M0NCNTBDMDI0RThFN0E1OUQzMjRDMjJCNjI2QTMwRjRBQUEwRkE0NkVEQ0E0Q0M0MkY0QjJEMDMzQjE0N0RBNTRBNjdEMTAzNjMzQTg4RUJGRkYwRUZGQjYxQUE5OEREMkIwNTc3MDBGQUMwOTg2QTlGQjI3QzJDQzI5RUUzMEI2OTlERTA2M0M3NkExRTI4NjNEMTM5NTFDMzVDNUFCRDM1NzU1NTc4MUQyQTVFNjhCMEJGQUNGMkUxMTc0NzAwNkUwODEwREQwQ0Y5N0Q1ODUzMThBM0IwREY3QTY3NDY1RUMzNzYxMDA0QUE5QjdDMTQxQjRFNTQ0NEQ5RUI2NDlCQkQ5NEY5ODNGQ0ZBRUM5ODJEOTk0QzdBNjIwREUyRDhBRUUwMTJCRkQyMkFBOTMyMkYzREQzQkQ1Q0U5MEMxNzY2MEQxOEY4Q0I2NzlCMDJCREFCQzBENEQwRjg3NkIwREQ2RDI1OEUwOERDNTBCMzU1NDRBNEJEQkU1Rjc1NjA0NDkzRDVGREY5OEI3RkI4MTI0NzVDN0I3MTIyRERFQzUxMjMyMkUxODU1QzMxMTA1Mzk3QUYyODRCN0MyQjREQzMxNUQyRThENTAxN0JCRDI0MDA4ODVENUVCNkMzMjFCNTA5M0VGOThBMTRFQjRDMjlEQzJCN0RGOTU2NUQ5RTIzQTJCRTZBMkUzMzRDRTM0ODVBODY3N0U0NjNERDg2RjQ5RTNCNTZEMjk3NEY3RDkzMEZGREQ2MEJBNTRBQjQ5QUU5RENEQzU4OEE0RkM3QUZDREI4OUE3NzEzQzUxRkE5N0JGQTg4NjhFRTIwN0MzQzAwMzJGREIzMDJFNDVERkEwREZEOEEyREU0RDUwQTk1OUE0MjQ2MjZDQzkyQ0U3NEY4QTI2MjdDM0IyMDQwNkQ3MTRCQjY0ODI1RkJBRTFCNDRBMkY3NTY5RTMyQThDQkI0MURCQTNEOTExNTY5MUIwN0MzOTUxQTJEMTM5NEJGMDZCQjA2OTBCNzEwRDQzOENDQzRFNUI5MkIwQ0YzMDIxMDlBNjBDODM2RTNBQjQwRTREMzU3OUMyRTFDNzdGNDMyQzYyOTI1QTc1MUQ5MkE1NjQ0NDBBNTYzQjNDMzczRDlBNDZGRkNCMEVCNDc4OTYyNDUwQzExMTkyRkRFMTg3NzE4RjlBRURGRjYxREZFMzlBRTk4NzE0QjFERDQ5QzM1NjU5M0YyM0YyQkFERTBFNzUzQjI1QkRDQjNENjE4RTNDREM1QzVEOEYzNzk3NEE0NDlFNkUyRDIxQjQ2RkE5MDQzNUYzOTlBRkY5ODk4OERFQTkwNDhCODAzMUUxQUUyRTRCMkI3QzNGQkI3Q0E3NzVCNjA1ODUwMERCODg1MkZGNzM1ODI1MUNCRjEyQTNDQTIzMzcxOTc2MEQyNTE5MzlBMjk3NzhEN0I0QkRFMTVCNTI0NEI4QUI0NzU1NUMxODkyNTIyMjMzMTQ0M0RENkIyMjcyODJBMTAxNDQzRjE0ODUxNzM0Nzk2RkY0RTMyM0I2NkVEODMwNEU1OTQ5NzNFREJDQTU3Qjk0MTNCQjgzNTc0NjczNjIzQ0I5QkEyODJGOTJGQkU0OUJGQzdENkQxODY0NEMxNzQxREFGRUU4NkI1OEExNzRBQTFCNTc2RjI1OTlDQUE4RjE1QzlBQzUxM0NDQzM3NzhFQUI4MUQ2RUY5MDU1N0U3M0UyMDdFOTZCQzJEODNCRDNGRUQzNzE3QjBFOEU1MjdBRTI3QkQwNUIyODk2MjI4MDA5OUFEMUFGOEM4RDBCMEU2NjhFREM3M0FCM0JEN0UyMUM5QzkxMzRCRkJDODM3QkJDOEU2OEZFOERGNDgzNjU0OTEzNzFEMzc4Q0I3NjhBMjRBOTU2RjBENjI1RDQ3RURCQkFCMDUxRTRCNEVFNUQ1OTU3NEE0RjJDNDM3MUQ0OTFFRDE4MkNEOTQ1RERBRjExRUIxNzM4MkE1OEYyQUZCNkI3OURFM0VBMTYzNkM2NzQ0OTM0MEY3N0ExQ0YxNERGRURDQjQyQjE4QkZGQjg2NkREMDA3QjlBNjA2QzdCQUVBNzBGOUM1RUFDOThDQkI1MkVDRTU5MzJGMjkyNUFDRUFBRTQxMkU2MTE0MDkwQ0I1NDE0NUE3NTFFNDMwRUYxQ0EzQTQxOEM0RDc2RUE3RDc5N0ZGODgyNDAxRkQyMTk4NEY0RkJDMzQ3QzRCRkJCNUIyQjk0NkI2NUY0RkUwQzdCOUU1RTE2Q0JDMUI2NjEyMzI1QTBDODNBODc0MEQ1RDg4NUM0NDNFQjhEMDIyODlCRkM3MkUzQkQyOTI1RTU5OUI4NjNGMTE3QzhBMzJFODFGNEI2RjJDMEM1RDhDRUE2RTc1QzAzRTU2NEUzRjhEMTY2M0I1RjNEMjFEODQ0QjZGODBGQjk4MjQ4NDgwOTMwMzAxOTY3MDExNUZGNUNDNUZGNjY4MUUxQzlCOUFCMDFFQTcxOUFFQ0FCN0E0QzRGMTA0NDAxNzQ0OTc0MUM3MjZBNEQxRDk3RDBGQjBEMzkwRjM3REUwRjgzODAzODI3MEFFREQ1RTA1ODExMzI1MkQ0RjhFOTFCMTM3N0ZEMjRGNTI4RUVERjU4QUU1NzUzMjdCRTE3RjRBOUQ2OEUyNEIzOURERjExODdDOEFCQ0VCMUE4NEFCNkJBQjA3MzVGMzc1NkU1MTI2NDFFNjJEM0I1MURGMDMxNkQwNjU5NDkzNzlERDA2QzA3NjA2QTgyMTI2QTEyOUEyQTcwRjkxRUY1NDA5NkNGQ0JDMzQ0N0I0OUQ1REQ1RjdEQzdBQTlGM0U4NkU4RUNENTgxRjUxNzMxREY3MjYxOTRDRDMxNDNDQzFFNjA4QUU4ODJFQTg4NDhDREZEOUYzRkY2MjgyQUM2RDcyMkMyRDVGNTFGMjY1MjcyNEZFQjYwMUUwMkUxRjA3OEUzMkIzNjg5MkVEOUUyREUwQTYzNzgzNkEwMDVCMDFDRUZEQURGOTA1MzQwNDk1NjVFOEI5NjUyMjRCM0U3RUZGNTcwN0YzREVCNkJGREI4RDgwNDU1NDkxNjhDRDFDODE5MTBFNTg0OTc4QTU1NURFODc3Q0ZCRENCOEQ3Mzg4RDMwODFGOUREODA2NzE5ODU2MjUyMUZFRTk5QzU3RTM0MDEjKQorICAgKHAgIzAwRTZCQkNCRUJGQ0E4MTNDRUQ3OTA3RjVGQTczQzRDMkQzNTMyQUY3QTc2NTBDNEE4ODU2M0RGODA1RDU0RDBDRUE1MjgzNDdBNjBGNzAzQzhGRkU5MTk5NzUwNUY4QzIzODM4M0UwM0M1M0RGRDM0N0QwRTM4NUE1Q0ZGRTRFMkE5NDRERDQ1QUNCQzQ4MUQ1NEQ3QjIyRjRDNTlBMkJGQzhDNjg2RTUyN0I5MDdBRDlDNUVDRTg3MEQxMDI1NTBEOEQ0QTAyQjQwNERBRTcwMjNDQzhGMDQzNkRFNUY1MEE3Q0UxRjRFNzQxMTQ3RjY3NkI1REM5NDM3Q0I0NzcyN0I5MzE1NUFFNUMxRUJFMjM2RTlGNDM2RDcyM0ZGNzcwMTA0MzA1QTE0NjBDMjFCRTkzNjE1ODJDQjEwN0NBRjAzNkYwNjAwQkNDNkQ3OERFNzNDMUY0NEMyNUYzNzdCOUE2NTM0OUU5QjczQzQ0NkU1QzYyODFEQ0I2OEVDNjVBRjY4NEFCMzlGNkM4NENGOTZFNENEOTA5QjYxRkEyRDhCQkI2OUE3OTk0Qjc4ODY1RkZFQUNEMzgzOEY4NTFDOTQ0MDM5QzI0MjJCNzVBRTRGOUMyQTE3MDJCMDA1NjQxRUI0MUNFOUZCMDQyNzU3RTg2RjZFOTY1MTQyOEVCQTREOTA4RDYwQTk5QUQ2MUU1RDA5RTdBMDVDN0U1OUE5NjE1REU5NjUyMDBDRkI3NUEyMjhCMUQ1REI4RDJDMDQwQTY1RDk0MEQ1NTE2QzlGQzUwNjlCOTREMkYxOTAzRUY2QjA3RjcwRUNGM0U4RDcyMEY3NDEzOUE0NjQ3RDc5MTMxODM1Q0Y3RjE1RUE4MzkzNTBBMDBCRDlENzMzMzU5NTAzNDk3QkNFMzlBMjQ5N0NBQ0NBRDQxQjBBRTdBMzZFNkYwMUZFQ0ExQjBCMDYyRjlDMzIzMkJENkY2NzM0Qzk3REIyRUU3REUwNTAzNzAwODcyMTBGODE2MUIwNzIzN0U3MTJFMjlFMEJBNkIyQjY2MUVDMjJEQUQwNTA5RDUwRUY3NTI1NUQ0MEI5NTREMkIzNjk0QzMwRTU5ODJFQjJEMTVCNzJBODcwOUJDNEY5QjZGRUZDNEU2RjAxRkYwNEQxMjgzMTEyMDlCNEM0MzUzQUY0M0JERTU4RDYzMURCN0UwNDdEN0I0NjlDREU0QTkxNzY0MTVGNkY3QjYwQkMxMjlFMEJBODM2M0Q3NzE0MERBMEZDNjg1REI3NkZDQjk2OEM4QzU4NjU3REI4NkZDOTA4RTdEMTFGNDFEOTA3Q0EzNjdDMTdBRDNFRjgxMjgwNzIxRkQ0MEU2QUVEQzExODUzOEFGRTEwOUI4RkE4MTg1MDI5ODI1NzhCQjJFQUUzQUNDMzAyOEVGNzlDNENBQjU3NUNDODQ3M0UwNUZGNUQ5MTExODYwNThCQ0E3RjUyNjlGQUE2NkNCQjY4Q0U0N0VFMDc0OEYyQThFNTJFRUI4NDc1MDMwRDM0RTU0QzM2NTU3MkJBMjgyMjI2NzMwQURBM0JFRjE2RDU4MkE0MDlGMTVBQjg5MTg4RjE3MzdGN0NBODJFRTBEOTZCRDJCM0EyMTUzQ0RGNkVFMjdGRDA0RjRBRUY0QUEzRkM2RUIwMkU5MkVDMjEzNTk4NjQ1MDdFQUQzRTA5RDMxMTdFRURENjFBRjM0MjY1NDEyQzM2MkVFMDFCMjZCOTI1QkM3NEEyNjc5QTFDMTEyQzY1M0FFODhGRDEyNDIyMDc0MkEwNUREQ0IxQ0RFN0RGMjM0MjY2OUZERjc2RTFDM0Y5QkY4RkUxMzYzM0FERjMzMDUwRkE0OTFGQTcwOEE5MThFQ0E3ODdGRjA3NEU5MEY5QTBBQTIxNkFDQjExNjBEMjJCRTdBOTgxN0RFRjVGQTJFMjdGQzkwNkFDRjVCNTc3NEE1REIwNjlBNjZGNUYxNzUyRDc1MjFFMUNFNDlGODg4ODIxOEJBMjRDOTdBOTJDMjg3REFCOEIwOEI0NDMzRUMxRERFQjVDN0EzRDk2OTU2RUJDQzQ2QTJERTJCOTVDQUNBOTFCRUNCQ0IxNURDQTIwRDEzQzk3N0Y1MEY2REMwRDcwNURCNzhCNTk3NTgxRjg1MEUyMEUwRUVCNkVBOUE3QTlEMjcwOEE2NTBBM0NEMDc0OEVFMUREQUVBNTU5QzgwRDJBMDBGMkRCRDI5QzNFRjU4QzEzQ0IwQjg0QUZBMzBDNTA4QkM4QUQ3MUE0RkMzRTE0NjkwRjE2QjUyOTQzMDEzRDdCQjA5RjU2MjdEN0QxMzQzREFFRDg4MTk4RDVBREEyM0UwQjk0NDg0RTA2QTgyN0ZFNDkyMjc1NDAxMTBFQ0VDOUUzNTRGODdFMjc0OTZCN0ZGNUVEMzE1MjE4MTdDOEI1QjE4MjEyOUVFMEM1MjFDODVBOTk2QkY1RUFGMUY4NzU4M0JERkU2OTM4NkVEQ0U2MzMzNzI1MkY1OEQzN0FFQzc0MjcwMkQ5N0YzQjk3Q0UwRkQwNkVFNjBFRTQzODBDMkU0OEQ3QUFENDlFMjZGNzZDRTk4MTIzN0FEQjYxN0IwQkI2RDU5REFFMzFCNjMzNTg2NkU3Rjk2NzBGOEEyNUQ5QkM0NEQ3QzMyNjAyQkEzRDU4MDAyQkQ1MzQ3M0UzRjc4MTI0OUFCMTdDMUM3OEM0OTY2MTEjKQorICAgKHEgIzAwRUQ2RkEzNjQ0MkEyNDA4NjU1ODFCNUMzOThDOTNGNTVBRkQ1Mzg2QTgwMUFGMUQ4QkY4QTlGRjhBQjlDNTc4Rjk3REEwMkFGQzQ0MTgwQUI1ODFBMUUxMEE0RDY1QjdEMUU5QzBCMDRENTdGQjFGRDEzQjdFQ0YxQUQ3QzAyOTZGMUY1RDUyQzMyMjNDQjExN0U2QzZCRUQxRkRBNzAxQTdBNDA3OUZCRDM1QjE4MEQyMjk1QjIxNkZFQUIyODRGODU1OTRFREREQzE3OUM5QUFFNkU2Q0E1NDVEMkZCQ0EzMDhCMDk2MUIyMUExQjRBNEU5REUyN0NGOEQ2OTIyRkM5MDJDMzUzMTNCMDVGMEZGQjVDQzY2N0U2NEUwNzA2RDUyMTBEMzkxOTA3NEIzODRDQTU5NjgzNTlDQkE1RjRCQ0EwOTYzMjNBRDQ4RTJDREU5RDI1RjA4RTJFRjk0NUExREQ0NjQ1N0Y0OEI0QkY4RUJFQzJEQzM3MzdDQzA5RTMzM0UzMEYxN0EzQUNEMTk1NjdBNUM1RDIwMEU3QTQzMDNBOTdBODkzRjA4ODRFRDNDRDk3NkI0MUMyQkNFRUYwNEQ5RkNFNEYzMDIxOENDOUFBRTI2RkZDNTc0OUIxMDAxMUI4MDVBREE5QzQ4NTdCNjkxQTdBODIwRjI1NjRERjU5NzlGNTcwRjhENTI0RERFMjY4RjcwMjg5MUU5Q0NEQkQ5RjgyMUMyRUNGMjdGNjBDNzk1RTc0M0FDNjdDQURCMDdEMjJEM0E3QkQzMjJEQTlDM0U3QTM1QUM2QTM1MzMzRjg3MUZFNkRFMDE2MkJBMkExRjk1NjVFNDExQURENDI0RkYwNzI3QjIyODBCQUZEREY1MjJDMjcyRDNBMjkxMEVGRTI3RjU1OTBGOEUwRjZDMzhCRUExODk1QTA4OTM3NTVGNDRCREY0MUZFQ0YzQkYzQkEyN0M2RDZGMDM2QTFBQTcwNzM2REU3MTQ2NUZBNzhFQTQ2RjM0MzQxRTA1REU3QUIzN0E1MDc0QjRFOTlFMEJBQjU0RDY1ODYyOTUwM0UxMjQyQUNBRkRFMDg3MjEwNThGMjA4RDNGNjJGQUU3NDJEMTU4Q0FFNTIxOTk0NTE0Q0YwQkVDNTgwRjA3NTA0NjMxOUZCRkM4RTk3MUYwRkY1RUVEOUUyQUI3RDE5NENEMjFFQ0NDQjJFNTREMjM5QUEzQjAyNTRGNEFCMTY0MUU2RThFMTUxMkZGMUQxRUQ1NzkyMDVGMTgwNzg5ODgyOENGQTI0QjgwRDIzMEZBNkM1MkM2QTkyMzQ4RTFBMDY5QzIzOUY3QjZGMkU3Q0M5OTVCRDNDRDFCNDEzRkM4NkM2MjZGRTk2MkM3RUMzQ0YxOUZBMTkzQjNBNzMyQUYxN0U1MUU2QjU3Q0MyNjNERTgyQTVDNDVDQjlFMzdDMkJBQjQ0RTg4RTU3OTJGQkJDNDA3NDhGODYxMzREMjIxQkY3NzVFMkJGNTdGOThBODg0RkNCQTQ5NDcxODY2MUEzRkY3M0FBRTA0QTZGNUNERkI2RjE0M0Q2ODBEMDlCQTRDQ0Q2QzZGMTg2RTkyNTY5QjhGNjdBMzVCNTc5NkI5RjJFRDQwNEYxMUM1NEVEMjkwRDdENzgzNjUwMTQ3M0YwNkQ4QTYyM0Q1M0FCNTg2QjY0NEYzRjVCREY4QjBCNjcwQ0E2OTZBMjNCN0I1MjMxOUM5MUQyQ0EyN0ZDREY0MjEwMzBDRUE4QTZCMDc5RkVDMkU0NjdCRTA0MjdBRkNFQTEyNjQ4RjNFMTJGMDk3NDUxNjZEMjBEM0QxQ0Q2OTY1RUFCQTI3MzI0NjlDMDc3QjNDNEU0NEQzNTAzRDg4MjkzN0RBNTEzOTA3NjE0NEZBRUFCNzUwODNCRjRFMTY3MjVCQjk2MjVBOTlERTkyRjZGMjI2REUzNDNGNzNFOTc0NTc3RjhENkY1QjU3Q0ZCRUI2MDc2MzYyNzI0MEEyOEM5MEE3M0JDN0E5RTQ3RDc0Q0JBQkI2NDg2OTg4Qzk4M0E1QTNEQzkxQTREOEUzNTNBRTZDNjA4NDk5RDIxMzkxRTMyRDhFRjNBMDMwOTI1OTU5QjUyQzFCQzAzRjE3QUFFMkZFRTRFMjhCMkI1MTg4OUVDMkE1RkU1ODdDNjAxMzlDOUNGMjlBRjQ2NTU1QjA4OUI1NEI1RUYwQkIzQjkyQkNDMEVBMEU2RTk0Rjk0NEZFOEU5NzQxRERBOTAyRjE4NUUwRDE2ODc2QTEwMzUxQUQyMkZFNkFCRDQzNzhBRDc0QTEzQ0QyQkQ5Njk2RjBCNTlBMDY5Q0Q2NTgyRjkyNDU4QTg5QjE1NjQ4RTgzMzYxNDU5OEQ2RkRBQkFDMDI2NzkxQ0RCM0ZBODc4NzNDQTg2RTNERjcxODdDOTIzMEFGRkIxMDg5RUY4M0I4Q0I1NDg1NkFEQzIzNEQwN0RGNDc5NTE0QThGNDdFQzk5MDM5MzBFNDdGOUU5M0FFMUY5NkQ3MzU4RjQyMDhFMTlDQ0VEOEFFQzA2M0FGRThBMzFFMzlDOTIxRjdENzg2N0Q1N0U4RjY4QjE0OTQ3OTNFNkRDRDA2RjNEQzY4ODA5QkQ0NTVEQkI0NDA3NkQ2QUI2NDU4NkUwQTA5QTQyQ0VCQTI4MjlBNUY4MUJERUE1RURCMjNEQzI1MUQ2OUMzNzNEMkUyNzUyMDEjKQorICAgKHUgIzAwRUEyQ0JCRUZCRkZCRDRCRDM4NTA1ODRBRUEzMTVGODhFRDg5MkY3Mzk4RTVDNEVDRDE3RjhFNDU4OEIwNzNEQTMyQUM3MDhEQURDMEU1NTQxNzU1M0ZCNERDMjUxMzBGNDJBOUEwNEU0MzVDNjNFMTA5MTc0NDIzMkQ1M0ZGOThBQkE0NTBFM0I5MUFGNTEyNjMxRTI4QkY0NTNCRTRGQ0I5NzEzMTEyRjg5MEYzNjg1MjNGRTE3NUIwOTA5Mzg1RjBCNDA0QjNFNjM3MEZBNkRCMzM0OTBEQzIxNkNFM0RFNTQ4RkRERjY4QzgxRkU0OUJCOTY4M0MzMEZBNkQxREU4QjAxOUE5NDY4M0U1MDhCNzIwRjJFREEyMDEzMzMyNUZENDY0NDYyMEQwODYxODJGMUU4MjgzMjE1RDJCQ0JCQzFCMzAyREVBNzE0Q0UxRTU5RkU4RTk5NjQ4OTAxODA3OEY4Q0NEREFFRjA4NkVGREY4MkJBNDVERjQyNEU1MzlBQkM5RDYxQUJFQzE0MzQ2Mjc1QUE5MjU2MDMxNTE0QUFDNTlGRjQwQzdEMUI0MzYzQUM3Qzc0RThDQzM4NTRDOUU1N0Y2OTEzQzJDRkM1OTlFOURCQjQ0NkQ1NTM0ODJDOUI1MzE1NjNBN0NBREQ1NjJENjQxNTFCMzk2MUZCNTJBMEQ1NDI0MDZENDkxRjgwOTBFQkI3MzdDMzg4MDE2Rjk1OTE4MzEzQzBFQzk4N0Y3MDFGMkEyNUFFM0YwQ0VGMkI5RjM0NjBBOUU0OEFFRTM4MkYwMUNCMDlCMEE5MzcyMTA0RkFDMkVFNjkyQkIyQjE0RTZGRTM3NkEyOTg5MTY4N0UxNTdDNDBGMDlGQjMyODM0MDJFNEQzMTlDOTc5MUU3QTA2MDI1QzU0MkI0NDExRUVBNzE4OTBEMjJFMzRFODAzOEIzMDAyQUM3RkI3NUE1MEVEMjlBQUVBRkYzNjU4ODk1MEEwNkE4RDIxMzlCMDQyMDY3M0RDQjM3MDg3RTgxOTZBMDM0RDBBNUM3OEE4MjRCQ0QwQTc0QkJEN0UwOEIwNEI4RjA4RjQ3M0MwOUY2MzUwNTA4Q0VCNDc2REVFMUU0MUQwQ0Y5NjBDQTNFODdBRTg0ODk4MTE1NzdGN0Q0OUNCMUVGODg1NDUzRjcwODdCODEyNkZCOTkwMjhCNTc3MUVDOUUxNTkwNDAxMDkxMDJERUUxNzVEQUZBMDM4RUU3QjYyQjk2Nzk3RTU2RTYzNjFDMzdERkM0MjM5ODAyMDExNDc2NUUyOEMzRjNCNEI2QTRDMzNBODZBOTk1QTBENTY0NzA2OEI3MTQ3NTUyRjRFNjEzMDg2NjUyN0Q0ODMzOTQ5RTlGOTIwNDQwNkYwOTY3MzVGMzNCRkQxQkI1NzczNEUxNUQwQjQwMzVBMzdDQ0E3Qzg5N0MxODE2MkIxMjk1MUE2ODRGNTg2RjFCN0ZGMDQxQTg1QjdGNDRGQUMxMjVBODBBQzc4MkFEM0Y0RDdFQzUyQzMxOEVFQTUyQ0ZBNkFGMDlFQkE1MDgxM0I1QkFDODM2N0IxRkY4MEE5OURCOEJERUMzRTM4NDI0NTVBMDZEMjJEQTk5RjBCRTVCNTIzMzBEMUQ1QzBDQ0FDQjM2NjFENzAzQkUxRDk2RTc4MzJBMTU5Qzg4NThFMDhDQzIzMTAxRkJDMERFNzgzRDMyMDlBODBBM0VENEVCQ0Y1NzY2MUIwMUQ4NEVCQ0ZCRTcwQTBFQzkyMTU4OEI4Q0Q5QjlCRjIxOTE4RDg2QzNDOTdCMEY2QkJGNDAzN0U4MEM5OUEzNDlBMUEyQjc4RjMzN0NDNDAyOTQxNUZGMERCNTRBQzlBM0ExREY3RTA3NDgyREM5RjA0RTYzOEM5RDVCQkFBRDMyQTYyN0YyRUYxREMzRTE3QUVDMzY1RTQxNkM3MDNDNDQ5QUE0MDEwNERFQzM1ODIwMkY3Rjc4Q0NGNzcxMTVBREFENTY3Q0RBRTZCNEIyQzgxREE0RkJFNkE5N0JCRjJBNzA0Mzg5OTExRTRBNUIzOUMzQzFGMTg3MTAxRTUzQjNERjdBMENFMDVDNEI3OTU2RjRFRDMxREQyMjVCNDYwMzZDNTM0NEIzQ0RCMjM2RTVCMUExMkUxNTkwMDhEMTA2RDFDRjZDMTRDNUY3MzM1QTRBNUQ4MEUwMDhGMDEwNkY2MzZFRjc1MDcyM0I1MDUxMUYzN0IzQkE2RkZCRUIyN0EyNzA4MjhCOUNCMTIzRDdGNTlFQTBCRTk1NkMwRDAyNEM3N0FDMDYwODY0NjA5OThGMTg2MTBFQ0I5NDY1MURGNDdBQjM3REREQ0RCOTc5NzIwM0E0MzIxQ0JDMUU2RTg1RUM2NDkxOUVCNzRBQzdFMkYzQzE1RkVCNURGQ0NGQzIzNTlEMzUzQzhCNkI2MDAxNTJENDIxMUE1NTQ3N0ZGMzEwMjZCMzRDMTBDNUYxRkMxQTFERDFDMUVGNkExNEIyNkNGRDFBRjcwRDZCQUE0NDYxQjQzODc2MzFFNERDRkRGRkFCMTE4RjcxMEE4QjhCMkQxMkVFQzQ5MjQ3NTE3MjBCOUFBOUQ5NDUyN0I5RjE5RThCMzUyMjIyNTY3RjY2MkZDNjc1M0FBNEJFMjJDMkE4NTFGMjM3OEFENUVFNTUzOUMxRTBGNEREOTA0MDBERDdEQzZGMUVBNjc1RDkjKQorICAgKQorICApCisgKQpkaWZmIC0tZ2l0IGEvdGVzdHMvcnNhY3Z0LmMgYi90ZXN0cy9yc2FjdnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmI1Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcnNhY3Z0LmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qIHJzYWN2dC5jICAtICBBIGRlYnVnIHRvb2wgdG8gY29udmVydCBSU0EgZm9ybWF0cy4KKyAgIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorCisgICBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qIElucHV0IGRhdGEgZm9ybWF0OgorCis9PT09PT09CisjIEEgaGFzaCBkZW5vdGVzIGEgY29tbWVudCBsaW5lCitlODYxYjcwMGUxN2U4YWZlNjhbLi4uXWYxCitmN2E3Y2E1MzY3YzY2MWY4ZTZbLi4uXTYxCisxMDAwMQorCisjIEFmdGVyIGFuIGVtcHR5IGxpbmUgYW5vdGhlciBpbnB1dCBibG9jayBtYXkgZm9sbG93LgorNzg2MWI3MDBlMTdlOGFmZTY4Wy4uLl1mMworZTdhN2NhNTM2N2M2NjFmOGU2Wy4uLl03MQorMworPT09PT09PT09CisKKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEhBVkVfVzMyX1NZU1RFTQorIyBpbmNsdWRlIDxmY250bC5oPiAvKiBXZSBuZWVkIHNldG1vZGUoKS4gICovCisjZWxzZQorIyBpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZkZWYgX0dDUllQVF9JTl9MSUJHQ1JZUFQKKyMgaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKyNlbHNlCisjIGluY2x1ZGUgPGdjcnlwdC5oPgorIyBkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImRldm51bGxAZXhhbXBsZS5vcmciCisjIGRlZmluZSBQQUNLQUdFX1ZFUlNJT04gIltidWlsZCBvbiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiXSIKKyNlbmRpZgorCisKKyNkZWZpbmUgUEdNICJyc2FjdnQiCisKKyNkZWZpbmUgbXlfaXNhc2NpaShjKSAoISgoYykgJiAweDgwKSkKKyNkZWZpbmUgZGlnaXRwKHApICAgKCoocCkgPj0gJzAnICYmICoocCkgPD0gJzknKQorI2RlZmluZSBoZXhkaWdpdHAoYSkgKGRpZ2l0cCAoYSkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ0EnICYmICooYSkgPD0gJ0YnKSAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdhJyAmJiAqKGEpIDw9ICdmJykpCisjZGVmaW5lIHh0b2lfMShwKSAgICgqKHApIDw9ICc5Jz8gKCoocCktICcwJyk6IFwKKyAgICAgICAgICAgICAgICAgICAgICoocCkgPD0gJ0YnPyAoKihwKS0nQScrMTApOigqKHApLSdhJysxMCkpCisjZGVmaW5lIHh0b2lfMihwKSAgICgoeHRvaV8xKHApICogMTYpICsgeHRvaV8xKChwKSsxKSkKKyNkZWZpbmUgRElNKHYpICAgICAgICAgICAgICAgKHNpemVvZih2KS9zaXplb2YoKHYpWzBdKSkKKyNkZWZpbmUgRElNb2YodHlwZSxtZW1iZXIpICAgRElNKCgodHlwZSAqKTApLT5tZW1iZXIpCisKKworLyogVmVyYm9zZSBtb2RlIGZsYWcuICAqLworc3RhdGljIGludCB2ZXJib3NlOworCisvKiBQcmVmaXggb3V0cHV0IHdpdGggbGFiZWxzLiAgKi8KK3N0YXRpYyBpbnQgd2l0aF9sYWJlbHM7CisKKy8qIERvIG5vdCBzdXBwcmVzcyBsZWFkaW5nIHplcm9lcy4gICovCitzdGF0aWMgaW50IGtlZXBfbHo7CisKKy8qIENyZWF0ZSBwYXJhbWV0ZXJzIGFzIHNwZWNpZmllZCBieSBPcGVuUEdQIChyZmM0ODgwKS4gIFRoYXQgaXMgd2UKKyAgIGRvbid0IHN0b3JlIGRtcDEgYW5kIGRtcDEgYnV0IGQgYW5kIG1ha2Ugc3VyZSB0aGF0IHAgaXMgbGVzcyB0aGFuICBxLiAgKi8KK3N0YXRpYyBpbnQgb3BlbnBncF9tb2RlOworCisKKy8qIFByaW50IGEgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCB0aGUgcHJvY2VzcyB3aXRoIGFuIGVycm9yIGNvZGUuICAqLworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgZnB1dHMgKFBHTSAiOiAiLCBzdGRlcnIpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworCitzdGF0aWMgY2hhciAqCityZWFkX3RleHRsaW5lIChGSUxFICpmcCkKK3sKKyAgY2hhciBsaW5lWzQwOTZdOworICBjaGFyICpwOworICBpbnQgYW55ID0gMDsKKworICAvKiBSZWFkIGxpbmUgYnV0IHNraXAgb3ZlciBpbml0aWFsIGVtcHR5IGxpbmVzLiAgKi8KKyAgZG8KKyAgICB7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgaWYgKCFmZ2V0cyAobGluZSwgc2l6ZW9mIGxpbmUsIGZwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGZlb2YgKGZwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgZGllICgiZXJyb3IgcmVhZGluZyBpbnB1dCBsaW5lOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgcCA9IHN0cmNociAobGluZSwgJ1xuJyk7CisgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAqcCA9IDA7CisgICAgICAgICAgcCA9IGxpbmUgKyAoKmxpbmU/IChzdHJsZW4gKGxpbmUpLTEpOjApOworICAgICAgICAgIGZvciAoIDtwID4gbGluZTsgcC0tKQorICAgICAgICAgICAgaWYgKG15X2lzYXNjaWkgKCpwKSAmJiBpc3NwYWNlICgqcCkpCisgICAgICAgICAgICAgICpwID0gMDsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCFhbnkgJiYgISpsaW5lKTsKKyAgICAgIGFueSA9IDE7CisgICAgfQorICB3aGlsZSAoKmxpbmUgPT0gJyMnKTsgIC8qIEFsd2F5cyBza2lwIGNvbW1lbnQgbGluZXMuICAqLworICBpZiAodmVyYm9zZSA+IDEpCisgICAgZnByaW50ZiAoc3RkZXJyLCBQR00gIjogcmVjZWl2ZWQgbGluZTogJXNcbiIsIGxpbmUpOworICByZXR1cm4gZ2NyeV94c3RyZHVwIChsaW5lKTsKK30KKworCitzdGF0aWMgZ2NyeV9tcGlfdAorcmVhZF9oZXhtcGlfbGluZSAoRklMRSAqZnAsIGludCAqZ290X2VvZikKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X21waV90IGE7CisgIGNoYXIgKmxpbmU7CisKKyAgKmdvdF9lb2YgPSAwOworICBsaW5lID0gcmVhZF90ZXh0bGluZSAoZnApOworICBpZiAoIWxpbmUpCisgICAgeworICAgICAgKmdvdF9lb2YgPSAxOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBlcnIgPSBnY3J5X21waV9zY2FuICgmYSwgR0NSWU1QSV9GTVRfSEVYLCBsaW5lLCAwLCBOVUxMKTsKKyAgZ2NyeV9mcmVlIChsaW5lKTsKKyAgaWYgKGVycikKKyAgICBhID0gTlVMTDsKKyAgcmV0dXJuIGE7Cit9CisKKworc3RhdGljIGludAorc2tpcF90b19lbXB0eV9saW5lIChGSUxFICpmcCkKK3sKKyAgY2hhciBsaW5lWzI1Nl07CisgIGNoYXIgKnA7CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoIWZnZXRzIChsaW5lLCBzaXplb2YgbGluZSwgZnApKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGZlb2YgKGZwKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBkaWUgKCJlcnJvciByZWFkaW5nIGlucHV0IGxpbmU6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgcCA9IHN0cmNociAobGluZSwgJ1xuJyk7CisgICAgICBpZiAocCkKKyAgICAgICAgKnAgPTA7CisgICAgfQorICB3aGlsZSAoKmxpbmUpOworICByZXR1cm4gMDsKK30KKworCisvKiBQcmludCBhbiBNUEkgb24gYSBsaW5lLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF9tcGlfbGluZSAoY29uc3QgY2hhciAqbGFiZWwsIGdjcnlfbXBpX3QgYSkKK3sKKyAgdW5zaWduZWQgY2hhciAqYnVmLCAqcDsKKyAgZ2NyeV9lcnJvcl90IGVycjsKKyAgaW50IHdyaXRlcnIgPSAwOworCisgIGlmICh3aXRoX2xhYmVscyAmJiBsYWJlbCkKKyAgICBwcmludGYgKCIlcyA9ICIsIGxhYmVsKTsKKworICBlcnIgPSBnY3J5X21waV9hcHJpbnQgKEdDUllNUElfRk1UX0hFWCwgJmJ1ZiwgTlVMTCwgYSk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9tcGlfYXByaW50IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgcCA9IGJ1ZjsKKyAgaWYgKCFrZWVwX2x6ICYmIHBbMF0gPT0gJzAnICYmIHBbMV0gPT0gJzAnICYmIHBbMl0pCisgICAgcCArPSAyOworCisgIHByaW50ZiAoIiVzXG4iLCBwKTsKKyAgaWYgKGZlcnJvciAoc3Rkb3V0KSkKKyAgICB3cml0ZXJyKys7CisgIGlmICghd3JpdGVyciAmJiBmZmx1c2ggKHN0ZG91dCkgPT0gRU9GKQorICAgIHdyaXRlcnIrKzsKKyAgaWYgKHdyaXRlcnIpCisgICAgZGllICgid3JpdGluZyBvdXRwdXQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgIGdjcnlfZnJlZSAoYnVmKTsKK30KKworCisvKiBDb21wdXRlIGFuZCBwcmludCBtaXNzaW5nIFJTQSBwYXJhbWV0ZXJzLiAgKi8KK3N0YXRpYyB2b2lkCitjb21wdXRlX21pc3NpbmcgKGdjcnlfbXBpX3QgcnNhX3AsIGdjcnlfbXBpX3QgcnNhX3EsIGdjcnlfbXBpX3QgcnNhX2UpCit7CisgIGdjcnlfbXBpX3QgcnNhX24sIHJzYV9kLCByc2FfcG0xLCByc2FfcW0xLCByc2FfdTsKKyAgZ2NyeV9tcGlfdCBwaGksIHRtcF9nLCB0bXBfZjsKKworICByc2FfbiA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHJzYV9kID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgcnNhX3BtMSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHJzYV9xbTEgPSBnY3J5X21waV9uZXcgKDApOworICByc2FfdSA9IGdjcnlfbXBpX25ldyAoMCk7CisKKyAgcGhpID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgdG1wX2YgPSBnY3J5X21waV9uZXcgKDApOworICB0bXBfZyA9IGdjcnlfbXBpX25ldyAoMCk7CisKKyAgLyogQ2hlY2sgdGhhdCBwIDwgcTsgaWYgbm90IHN3YXAgcCBhbmQgcS4gICovCisgIGlmIChvcGVucGdwX21vZGUgJiYgZ2NyeV9tcGlfY21wIChyc2FfcCwgcnNhX3EpID4gMCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIFBHTSAiOiBzd2FwcGluZyBwIGFuZCBxXG4iKTsKKyAgICAgIGdjcnlfbXBpX3N3YXAgKHJzYV9wLCByc2FfcSk7CisgICAgfQorCisgIGdjcnlfbXBpX211bCAocnNhX24sIHJzYV9wLCByc2FfcSk7CisKKworICAvKiBDb21wdXRlIHRoZSBFdWxlciB0b3RpZW50OiAgcGhpID0gKHAtMSkocS0xKSAgKi8KKyAgZ2NyeV9tcGlfc3ViX3VpIChyc2FfcG0xLCByc2FfcCwgMSk7CisgIGdjcnlfbXBpX3N1Yl91aSAocnNhX3FtMSwgcnNhX3EsIDEpOworICBnY3J5X21waV9tdWwgKHBoaSwgcnNhX3BtMSwgcnNhX3FtMSk7CisKKyAgaWYgKCFnY3J5X21waV9nY2QgKHRtcF9nLCByc2FfZSwgcGhpKSkKKyAgICBkaWUgKCJwYXJhbWV0ZXIgJ2UnIGRvZXMgbWF0Y2ggJ3AnIGFuZCAncSdcbiIpOworCisgIC8qIENvbXB1dGU6IGYgPSBsY20ocC0xLHEtMSkgPSBwaGkgLyBnY2QocC0xLHEtMSkgKi8KKyAgZ2NyeV9tcGlfZ2NkICh0bXBfZywgcnNhX3BtMSwgcnNhX3FtMSk7CisgIGdjcnlfbXBpX2RpdiAodG1wX2YsIE5VTEwsIHBoaSwgdG1wX2csIC0xKTsKKworICAvKiBDb21wdXRlIHRoZSBzZWNyZXQga2V5OiAgZCA9IGVeey0xfSBtb2QgbGNtKHAtMSxxLTEpICovCisgIGdjcnlfbXBpX2ludm0gKHJzYV9kLCByc2FfZSwgdG1wX2YpOworCisgIC8qIENvbXB1dGUgdGhlIENSVCBoZWxwZXJzOiBkIG1vZCAocC0xKSwgZCBtb2QgKHEtMSkgICAqLworICBnY3J5X21waV9tb2QgKHJzYV9wbTEsIHJzYV9kLCByc2FfcG0xKTsKKyAgZ2NyeV9tcGlfbW9kIChyc2FfcW0xLCByc2FfZCwgcnNhX3FtMSk7CisKKyAgLyogQ29tcHV0ZSB0aGUgQ1JUIHZhbHVlOiAgIE9wZW5QR1A6ICAgIHUgPSBwXnstMX0gbW9kIHEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQ6IGlxbXAgPSBxXnstMX0gbW9kIHAgKi8KKyAgaWYgKG9wZW5wZ3BfbW9kZSkKKyAgICBnY3J5X21waV9pbnZtIChyc2FfdSwgcnNhX3AsIHJzYV9xKTsKKyAgZWxzZQorICAgIGdjcnlfbXBpX2ludm0gKHJzYV91LCByc2FfcSwgcnNhX3ApOworCisgIGdjcnlfbXBpX3JlbGVhc2UgKHBoaSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHRtcF9mKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAodG1wX2cpOworCisgIC8qIFByaW50IGV2ZXJ5dGhpbmcuICAqLworICBwcmludF9tcGlfbGluZSAoIm4iLCByc2Ffbik7CisgIHByaW50X21waV9saW5lICgiZSIsIHJzYV9lKTsKKyAgaWYgKG9wZW5wZ3BfbW9kZSkKKyAgICBwcmludF9tcGlfbGluZSAoImQiLCByc2FfZCk7CisgIHByaW50X21waV9saW5lICgicCIsIHJzYV9wKTsKKyAgcHJpbnRfbXBpX2xpbmUgKCJxIiwgcnNhX3EpOworICBpZiAob3BlbnBncF9tb2RlKQorICAgIHByaW50X21waV9saW5lICgidSIsIHJzYV91KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHByaW50X21waV9saW5lICgiZG1wMSIsIHJzYV9wbTEpOworICAgICAgcHJpbnRfbXBpX2xpbmUgKCJkbXExIiwgcnNhX3FtMSk7CisgICAgICBwcmludF9tcGlfbGluZSAoImlxbXAiLCByc2FfdSk7CisgICAgfQorCisgIGdjcnlfbXBpX3JlbGVhc2UgKHJzYV9uKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocnNhX2QpOworICBnY3J5X21waV9yZWxlYXNlIChyc2FfcG0xKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocnNhX3FtMSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHJzYV91KTsKK30KKworCisMCitzdGF0aWMgdm9pZAordXNhZ2UgKGludCBzaG93X2hlbHApCit7CisgIGlmICghc2hvd19oZWxwKQorICAgIHsKKyAgICAgIGZwdXRzICgidXNhZ2U6ICIgUEdNCisgICAgICAgICAgICAgIiBbT1BUSU9OXSBbRklMRV0gKHRyeSAtLWhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24pXG4iLCBzdGRlcnIpOworICAgICAgZXhpdCAoMik7CisgICAgfQorICBmcHV0cworICAgICgiVXNhZ2U6ICIgUEdNICIgW09QVElPTlNdIFtGSUxFXVxuIgorICAgICAiVGFrZSBSU0EgcGFyYW1ldGVycyBwLCBuLCBlIGFuZCBjb21wdXRlIG1pc3NpbmcgcGFyYW1ldGVycy5cbiIKKyAgICAgIk9QVElPTlM6XG4iCisgICAgICIgIC0tb3BlbnBncCAgICAgICAgQ29tcHV0ZSBhcyBzcGVjaWZpZWQgYnkgUkZDNDg4MFxuIgorICAgICAiICAtLWxhYmVscyAgICAgICAgIFByZWZpeCBvdXRwdXQgd2l0aCBsYWJlbHNcbiIKKyAgICAgIiAgLS1rZWVwLWx6ICAgICAgICBLZWVwIGFsbCBsZWFkaW5nIHplcm9lcyBpbiB0aGUgb3V0cHV0XG4iCisgICAgICIgIC0tdmVyYm9zZSAgICAgICAgUHJpbnQgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuIgorICAgICAiICAtLXZlcnNpb24gICAgICAgIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiIKKyAgICAgIiAgLS1oZWxwICAgICAgICAgICBQcmludCB0aGlzIHRleHRcbiIKKyAgICAgIldpdGggbm8gRklMRSwgb3IgaWYgRklMRSBpcyAtLCByZWFkIHN0YW5kYXJkIGlucHV0LlxuIgorICAgICAiUmVwb3J0IGJ1Z3MgdG8gIiBQQUNLQUdFX0JVR1JFUE9SVCAiLlxuIiAsIHN0ZG91dCk7CisgIGV4aXQgKDApOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgbGFzdF9hcmdjID0gLTE7CisgIEZJTEUgKmlucHV0OworICBnY3J5X21waV90ICByc2FfcCwgcnNhX3EsIHJzYV9lOworICBpbnQgZ290X2VvZjsKKyAgaW50IGFueSA9IDA7CisKKyAgaWYgKGFyZ2MpCisgICAgeyBhcmdjLS07IGFyZ3YrKzsgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorICAgICAgICB7CisgICAgICAgICAgdXNhZ2UgKDEpOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyc2lvbiIpKQorICAgICAgICB7CisgICAgICAgICAgZnB1dHMgKFBHTSAiIChMaWJnY3J5cHQpICIgUEFDS0FHRV9WRVJTSU9OICJcbiIsIHN0ZG91dCk7CisgICAgICAgICAgcHJpbnRmICgibGliZ2NyeXB0ICVzXG4iLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKyAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcmJvc2UiKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UrKzsKKyAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWxhYmVscyIpKQorICAgICAgICB7CisgICAgICAgICAgd2l0aF9sYWJlbHMgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0ta2VlcC1seiIpKQorICAgICAgICB7CisgICAgICAgICAga2VlcF9seiA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS1vcGVucGdwIikpCisgICAgICAgIHsKKyAgICAgICAgICBvcGVucGdwX21vZGUgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgfQorCisgIGlmIChhcmdjID4gMSkKKyAgICB1c2FnZSAoMCk7CisKKyNpZiAhZGVmaW5lZCAoSEFWRV9XMzJfU1lTVEVNKSAmJiAhZGVmaW5lZCAoX1dJTjMyKQorICBzaWduYWwgKFNJR1BJUEUsIFNJR19JR04pOworI2VuZGlmCisKKyAgaWYgKGFyZ2MgPT0gMSAmJiBzdHJjbXAgKGFyZ3ZbMF0sICItIikpCisgICAgeworICAgICAgaW5wdXQgPSBmb3BlbiAoYXJndlswXSwgInIiKTsKKyAgICAgIGlmICghaW5wdXQpCisgICAgICAgIGRpZSAoImNhbid0IG9wZW4gYCVzJzogJXNcbiIsIGFyZ3ZbMF0sIHN0cmVycm9yIChlcnJubykpOworICAgIH0KKyAgZWxzZQorICAgIGlucHV0ID0gc3RkaW47CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9WRVJCT1NJVFksIChpbnQpdmVyYm9zZSk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uICgiMS40LjAiKSkKKyAgICBkaWUgKCJMaWJnY3J5cHQgaXMgbm90IHN1ZmZpY2llbnQgZW5vdWdoXG4iKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKKworICBkbworICAgIHsKKyAgICAgIHJzYV9wID0gcmVhZF9oZXhtcGlfbGluZSAoaW5wdXQsICZnb3RfZW9mKTsKKyAgICAgIGlmICghcnNhX3AgJiYgZ290X2VvZikKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoIXJzYV9wKQorICAgICAgICBkaWUgKCJSU0EgcGFyYW1ldGVyICdwJyBtaXNzaW5nIG9yIG5vdCBwcm9wZXJseSBoZXggZW5jb2RlZFxuIik7CisgICAgICByc2FfcSA9IHJlYWRfaGV4bXBpX2xpbmUgKGlucHV0LCAmZ290X2VvZik7CisgICAgICBpZiAoIXJzYV9xKQorICAgICAgICBkaWUgKCJSU0EgcGFyYW1ldGVyICdxJyBtaXNzaW5nIG9yIG5vdCBwcm9wZXJseSBoZXggZW5jb2RlZFxuIik7CisgICAgICByc2FfZSA9IHJlYWRfaGV4bXBpX2xpbmUgKGlucHV0LCAmZ290X2VvZik7CisgICAgICBpZiAoIXJzYV9lKQorICAgICAgICBkaWUgKCJSU0EgcGFyYW1ldGVyICdlJyBtaXNzaW5nIG9yIG5vdCBwcm9wZXJseSBoZXggZW5jb2RlZFxuIik7CisgICAgICBnb3RfZW9mID0gc2tpcF90b19lbXB0eV9saW5lIChpbnB1dCk7CisKKyAgICAgIGlmIChhbnkpCisgICAgICAgIHB1dGNoYXIgKCdcbicpOworCisgICAgICBjb21wdXRlX21pc3NpbmcgKHJzYV9wLCByc2FfcSwgcnNhX2UpOworCisgICAgICBnY3J5X21waV9yZWxlYXNlIChyc2FfcCk7CisgICAgICBnY3J5X21waV9yZWxlYXNlIChyc2FfcSk7CisgICAgICBnY3J5X21waV9yZWxlYXNlIChyc2FfZSk7CisKKyAgICAgIGFueSA9IDE7CisgICAgfQorICB3aGlsZSAoIWdvdF9lb2YpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RvcHdhdGNoLmggYi90ZXN0cy9zdG9wd2F0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNhOWNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RvcHdhdGNoLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIHN0b3B3YXRjaC5oIC0gSGVscGVyIGNvZGUgZm9yIHRpbWluZworICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIF9XSU4zMgorIyBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNlbmRpZgorCisKKyNpZmRlZiBfV0lOMzIKK3N0cnVjdAoreworICBGSUxFVElNRSBjcmVhdGlvbl90aW1lLCBleGl0X3RpbWUsIGtlcm5lbF90aW1lLCB1c2VyX3RpbWU7Cit9IHN0YXJ0ZWRfYXQsIHN0b3BwZWRfYXQ7CisjZWxzZQorc3RhdGljIGNsb2NrX3Qgc3RhcnRlZF9hdCwgc3RvcHBlZF9hdDsKKyNlbmRpZgorCisKK3N0YXRpYyB2b2lkCitzdGFydF90aW1lciAodm9pZCkKK3sKKyNpZmRlZiBfV0lOMzIKKyNpZmRlZiBfX01JTkdXMzJDRV9fCisgIEdldFRocmVhZFRpbWVzIChHZXRDdXJyZW50VGhyZWFkICgpLAorICAgICAgICAgICAgICAgICAgICZzdGFydGVkX2F0LmNyZWF0aW9uX3RpbWUsICZzdGFydGVkX2F0LmV4aXRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAmc3RhcnRlZF9hdC5rZXJuZWxfdGltZSwgJnN0YXJ0ZWRfYXQudXNlcl90aW1lKTsKKyNlbHNlCisgIEdldFByb2Nlc3NUaW1lcyAoR2V0Q3VycmVudFByb2Nlc3MgKCksCisgICAgICAgICAgICAgICAgICAgJnN0YXJ0ZWRfYXQuY3JlYXRpb25fdGltZSwgJnN0YXJ0ZWRfYXQuZXhpdF90aW1lLAorICAgICAgICAgICAgICAgICAgICZzdGFydGVkX2F0Lmtlcm5lbF90aW1lLCAmc3RhcnRlZF9hdC51c2VyX3RpbWUpOworI2VuZGlmCisgIHN0b3BwZWRfYXQgPSBzdGFydGVkX2F0OworI2Vsc2UKKyAgc3RydWN0IHRtcyB0bXA7CisKKyAgdGltZXMgKCZ0bXApOworICBzdGFydGVkX2F0ID0gc3RvcHBlZF9hdCA9IHRtcC50bXNfdXRpbWU7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK3N0b3BfdGltZXIgKHZvaWQpCit7CisjaWZkZWYgX1dJTjMyCisjaWZkZWYgX19NSU5HVzMyQ0VfXworICBHZXRUaHJlYWRUaW1lcyAoR2V0Q3VycmVudFRocmVhZCAoKSwKKyAgICAgICAgICAgICAgICAgICAmc3RvcHBlZF9hdC5jcmVhdGlvbl90aW1lLCAmc3RvcHBlZF9hdC5leGl0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgJnN0b3BwZWRfYXQua2VybmVsX3RpbWUsICZzdG9wcGVkX2F0LnVzZXJfdGltZSk7CisjZWxzZQorICBHZXRQcm9jZXNzVGltZXMgKEdldEN1cnJlbnRQcm9jZXNzICgpLAorICAgICAgICAgICAgICAgICAgICZzdG9wcGVkX2F0LmNyZWF0aW9uX3RpbWUsICZzdG9wcGVkX2F0LmV4aXRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAmc3RvcHBlZF9hdC5rZXJuZWxfdGltZSwgJnN0b3BwZWRfYXQudXNlcl90aW1lKTsKKyNlbmRpZgorI2Vsc2UKKyAgc3RydWN0IHRtcyB0bXA7CisKKyAgdGltZXMgKCZ0bXApOworICBzdG9wcGVkX2F0ID0gdG1wLnRtc191dGltZTsKKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitlbGFwc2VkX3RpbWUgKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyIGJ1Zls1MF07CisjaWYgX1dJTjMyCisgIHVuc2lnbmVkIGxvbmcgbG9uZyB0MSwgdDIsIHQ7CisKKyAgdDEgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRlZF9hdC5rZXJuZWxfdGltZS5kd0hpZ2hEYXRlVGltZSA8PCAzMikKKyAgICAgICAgKyBzdGFydGVkX2F0Lmtlcm5lbF90aW1lLmR3TG93RGF0ZVRpbWUpOworICB0MSArPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRlZF9hdC51c2VyX3RpbWUuZHdIaWdoRGF0ZVRpbWUgPDwgMzIpCisgICAgICAgICsgc3RhcnRlZF9hdC51c2VyX3RpbWUuZHdMb3dEYXRlVGltZSk7CisgIHQyID0gKCgodW5zaWduZWQgbG9uZyBsb25nKXN0b3BwZWRfYXQua2VybmVsX3RpbWUuZHdIaWdoRGF0ZVRpbWUgPDwgMzIpCisgICAgICAgICsgc3RvcHBlZF9hdC5rZXJuZWxfdGltZS5kd0xvd0RhdGVUaW1lKTsKKyAgdDIgKz0gKCgodW5zaWduZWQgbG9uZyBsb25nKXN0b3BwZWRfYXQudXNlcl90aW1lLmR3SGlnaERhdGVUaW1lIDw8IDMyKQorICAgICAgICArIHN0b3BwZWRfYXQudXNlcl90aW1lLmR3TG93RGF0ZVRpbWUpOworICB0ID0gKHQyIC0gdDEpLzEwMDAwOworICBzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJTUuMGZtcyIsIChkb3VibGUpdCApOworI2Vsc2UKKyAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiU1LjBmbXMiLAorICAgICAgICAgICAgKCgoZG91YmxlKSAoc3RvcHBlZF9hdCAtIHN0YXJ0ZWRfYXQpKS9DTE9DS1NfUEVSX1NFQykqMTAwMDAwMDApOworI2VuZGlmCisgIHJldHVybiBidWY7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy90LWNvbW1vbi5oIGIvdGVzdHMvdC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg5NjNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdC1jb21tb24uaApAQCAtMCwwICsxLDk5IEBACisvKiB0LWNvbW1vbi5oIC0gQ29tbW9uIGNvZGUgZm9yIHRoZSB0ZXN0cy4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBnMTAgQ29kZSBHbWJICisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ3BnLWVycm9yLgorICoKKyAqIGxpYmdwZy1lcnJvciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogbGliZ3BnLWVycm9yIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQuaCIKKworI2lmbmRlZiBQR00KKyMgZXJyb3IgTWFjcm8gUEdNIG5vdCBkZWZpbmVkLgorI2VuZGlmCisKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgZXJyb3Jjb3VudDsKKworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICBmZmx1c2ggKHN0ZG91dCk7CisjaWZkZWYgSEFWRV9GTE9DS0ZJTEUKKyAgZmxvY2tmaWxlIChzdGRlcnIpOworI2VuZGlmCisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KSA7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisjaWZkZWYgSEFWRV9GTE9DS0ZJTEUKKyAgZnVubG9ja2ZpbGUgKHN0ZGVycik7CisjZW5kaWYKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworI2lmZGVmIEhBVkVfRkxPQ0tGSUxFCisgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyNlbmRpZgorICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisjaWZkZWYgSEFWRV9GTE9DS0ZJTEUKKyAgZnVubG9ja2ZpbGUgKHN0ZGVycik7CisjZW5kaWYKKyAgZXJyb3Jjb3VudCsrOworICBpZiAoZXJyb3Jjb3VudCA+PSA1MCkKKyAgICBkaWUgKCJzdG9wcGVkIGFmdGVyIDUwIGVycm9ycy4iKTsKK30KKworCitzdGF0aWMgdm9pZAorc2hvdyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBpZiAoIXZlcmJvc2UpCisgICAgcmV0dXJuOworI2lmZGVmIEhBVkVfRkxPQ0tGSUxFCisgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyNlbmRpZgorICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisjaWZkZWYgSEFWRV9GTE9DS0ZJTEUKKyAgZnVubG9ja2ZpbGUgKHN0ZGVycik7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3QtY29udmVydC5jIGIvdGVzdHMvdC1jb252ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyYmYzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3QtY29udmVydC5jCkBAIC0wLDAgKzEsNTg4IEBACisvKiB0LWNvbnZlcnQuYyAgLSBUZXN0cyBmb3IgbXBpIHByaW50IGFuZCBzY25hIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKworI2RlZmluZSBQR00gInQtY29udmVydCIKKworI2RlZmluZSBESU0odikJCSAgICAgKHNpemVvZih2KS9zaXplb2YoKHYpWzBdKSkKKyNkZWZpbmUgRElNb2YodHlwZSxtZW1iZXIpICAgRElNKCgodHlwZSAqKTApLT5tZW1iZXIpCisKK3N0YXRpYyBjb25zdCBjaGFyICp3aGVyZXN0cjsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCisKKyNkZWZpbmUgeG1hbGxvYyhhKSAgICBnY3J5X3htYWxsb2MgKChhKSkKKyNkZWZpbmUgeGNhbGxvYyhhLGIpICBnY3J5X3hjYWxsb2MgKChhKSwoYikpCisjZGVmaW5lIHhmcmVlKGEpICAgICAgZ2NyeV9mcmVlICgoYSkpCisjZGVmaW5lIHBhc3MoKSBkbyB7IDsgfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQKK3Nob3cgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgaWYgKCF2ZXJib3NlKQorICAgIHJldHVybjsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd2hleCAoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnM7CisKKyAgaWYgKCF2ZXJib3NlKQorICAgIHJldHVybjsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzICIsIFBHTSwgcHJlZml4KTsKKyAgZm9yIChzPSBidWZmZXI7IGJ1ZmxlbjsgYnVmbGVuLS0sIHMrKykKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlMDJ4IiwgKnMpOworICBwdXRjICgnXG4nLCBzdGRlcnIpOworfQorCisKKy8qIEFsbG9jYXRlIGEgYml0IHN0cmluZyBjb25zaXN0aW5nIG9mICcwJyBhbmQgJzEnIGZyb20gdGhlIE1QSSBBLiAgRG8KKyAgIG5vdCByZXR1cm4gYW55IGxlYWRpbmcgemVybyBiaXRzLiAgQ2FsbGVyIG5lZWRzIHRvIGdjcnlfZnJlZSB0aGUKKyAgIHJlc3VsdC4gKi8KK3N0YXRpYyBjaGFyICoKK21waTJiaXRzdHJfbmx6IChnY3J5X21waV90IGEpCit7CisgIGNoYXIgKnAsICpidWY7CisgIHNpemVfdCBsZW5ndGggPSBnY3J5X21waV9nZXRfbmJpdHMgKGEpOworCisgIGlmICghbGVuZ3RoKQorICAgIHsKKyAgICAgIGJ1ZiA9IHAgPSB4bWFsbG9jICgzKTsKKyAgICAgICpwKysgPSAnICc7CisgICAgICAqcCsrID0gJzAnOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJ1ZiA9IHAgPSB4bWFsbG9jIChsZW5ndGggKyAxICsgMSk7CisgICAgICAqcCsrID0gZ2NyeV9tcGlfaXNfbmVnIChhKT8gJy0nOicgJzsKKyAgICAgIHdoaWxlIChsZW5ndGgtLSA+IDEpCisgICAgICAgICpwKysgPSBnY3J5X21waV90ZXN0X2JpdCAoYSwgbGVuZ3RoKSA/ICcxJzonMCc7CisgICAgICAqcCsrID0gZ2NyeV9tcGlfdGVzdF9iaXQgKGEsIDApID8gJzEnOicwJzsKKyAgICB9CisgICpwID0gMDsKKyAgcmV0dXJuIGJ1ZjsKK30KKworCitzdGF0aWMgdm9pZAorc2hvd21waSAoY29uc3QgY2hhciAqcHJlZml4LCBnY3J5X21waV90IGEpCit7CisgIGNoYXIgKmJpdHN0cjsKKworICBpZiAoIXZlcmJvc2UpCisgICAgcmV0dXJuOworICBiaXRzdHIgPSBtcGkyYml0c3RyX25seiAoYSk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlcyVzXG4iLCBQR00sIHByZWZpeCwgYml0c3RyKTsKKyAgeGZyZWUgKGJpdHN0cik7Cit9CisKKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgaWYgKHdoZXJlc3RyKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBlcnJvcl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIGlmICh3aGVyZXN0cikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgd2hlcmVzdHIpOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworLyogQ2hlY2sgdGhhdCBtcGlfcHJpbnQgZG9lcyBub3QgcmV0dXJuIGEgbmVnYXRpdmUgemVyby4gICovCitzdGF0aWMgdm9pZAorbmVnYXRpdmVfemVybyAodm9pZCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X21waV90IGE7CisgIGNoYXIgKmJ1ZjsKKyAgdm9pZCAqYnVmYWRkciA9ICZidWY7CisgIHN0cnVjdCB7IGNvbnN0IGNoYXIgKm5hbWU7IGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdDsgfSBmbXRzW10gPQorICAgIHsKKyAgICAgIHsgIlNURCIsIEdDUllNUElfRk1UX1NURCB9LAorICAgICAgeyAiUEdQIiwgR0NSWU1QSV9GTVRfUEdQIH0sCisgICAgICB7ICJTU0giLCBHQ1JZTVBJX0ZNVF9TU0ggfSwKKyAgICAgIHsgIkhFWCIsIEdDUllNUElfRk1UX0hFWCB9LAorICAgICAgeyAiVVNHIiwgR0NSWU1QSV9GTVRfVVNHIH0sCisgICAgICB7IE5VTEwsIDAgfQorICAgIH07CisgIGludCBpOworCisgIGlmIChkZWJ1ZykKKyAgICBzaG93ICgibmVnYXRpdmUgemVybyBwcmludGluZ1xuIik7CisKKyAgYSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGZvciAoaT0wOyBmbXRzW2ldLm5hbWU7IGkrKykKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X21waV9hcHJpbnQgKGZtdHNbaV0uZm9ybWF0LCBidWZhZGRyLCBOVUxMLCBhKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyBhIHplcm8gYXMgJXM6ICVzXG4iLAorICAgICAgICAgICAgICBmbXRzW2ldLm5hbWUsZ3BnX3N0cmVycm9yIChlcnIpICk7CisgICAgICBlbHNlCisgICAgICAgIGdjcnlfZnJlZSAoYnVmKTsKKyAgICB9CisKKyAgLyogV2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGxpYmdjcnlwdCB0aGUgbmV4dCB0d28gc3RhdGVtZW50cworICAgICBzaG91bGQgc2V0IGEgdG8gLTAuICovCisgIGdjcnlfbXBpX3N1Yl91aSAoYSwgYSwgMSk7CisgIGdjcnlfbXBpX2FkZF91aSAoYSwgYSwgMSk7CisKKyAgZm9yIChpPTA7IGZtdHNbaV0ubmFtZTsgaSsrKQorICAgIHsKKyAgICAgIGVyciA9IGdjcnlfbXBpX2FwcmludCAoZm10c1tpXS5mb3JtYXQsIGJ1ZmFkZHIsIE5VTEwsIGEpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIGEgbmVnYXRpdmUgemVybyBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgIGZtdHNbaV0ubmFtZSxncGdfc3RyZXJyb3IgKGVycikgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ2NyeV9mcmVlIChidWYpOworICAgIH0KKworICBnY3J5X21waV9yZWxlYXNlIChhKTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZm9ybWF0cyAodm9pZCkKK3sKKyAgc3RhdGljIHN0cnVjdCB7CisgICAgaW50IHZhbHVlOworICAgIHN0cnVjdCB7CisgICAgICBjb25zdCBjaGFyICpoZXg7CisgICAgICBzaXplX3Qgc3RkbGVuOworICAgICAgY29uc3QgY2hhciAqc3RkOworICAgICAgc2l6ZV90IHNzaGxlbjsKKyAgICAgIGNvbnN0IGNoYXIgKnNzaDsKKyAgICAgIHNpemVfdCB1c2dsZW47CisgICAgICBjb25zdCBjaGFyICp1c2c7CisgICAgICBzaXplX3QgcGdwbGVuOworICAgICAgY29uc3QgY2hhciAqcGdwOworICAgIH0gYTsKKyAgfSBkYXRhW10gPSB7CisgICAgeyAgICAwLCB7ICIwMCIsCisgICAgICAgICAgICAgIDAsICIiLAorICAgICAgICAgICAgICA0LCAiXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICAgIDAsICIiLAorICAgICAgICAgICAgICAyLCAiXHgwMFx4MDAifQorICAgIH0sCisgICAgeyAgICAxLCB7ICIwMSIsCisgICAgICAgICAgICAgIDEsICJceDAxIiwKKyAgICAgICAgICAgICAgNSwgIlx4MDBceDAwXHgwMFx4MDFceDAxIiwKKyAgICAgICAgICAgICAgMSwgIlx4MDEiLAorICAgICAgICAgICAgICAzLCAiXHgwMFx4MDFceDAxIiB9CisgICAgfSwKKyAgICB7ICAgIDIsIHsgIjAyIiwKKyAgICAgICAgICAgICAgMSwgIlx4MDIiLAorICAgICAgICAgICAgICA1LCAiXHgwMFx4MDBceDAwXHgwMVx4MDIiLAorICAgICAgICAgICAgICAxLCAiXHgwMiIsCisgICAgICAgICAgICAgIDMsICJceDAwXHgwMlx4MDIiIH0KKyAgICB9LAorICAgIHsgIDEyNywgeyAiN0YiLAorICAgICAgICAgICAgICAxLCAiXHg3ZiIsCisgICAgICAgICAgICAgIDUsICJceDAwXHgwMFx4MDBceDAxXHg3ZiIsCisgICAgICAgICAgICAgIDEsICJceDdmIiwKKyAgICAgICAgICAgICAgMywgIlx4MDBceDA3XHg3ZiIgfQorICAgIH0sCisgICAgeyAgMTI4LCB7ICIwMDgwIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDBceDgwIiwKKyAgICAgICAgICAgICAgNiwgIlx4MDBceDAwXHgwMFx4MDJceDAwXHg4MCIsCisgICAgICAgICAgICAgIDEsICJceDgwIiwKKyAgICAgICAgICAgICAgMywgIlx4MDBceDA4XHg4MCIgfQorICAgIH0sCisgICAgeyAgMTI5LCB7ICIwMDgxIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDBceDgxIiwKKyAgICAgICAgICAgICAgNiwgIlx4MDBceDAwXHgwMFx4MDJceDAwXHg4MSIsCisgICAgICAgICAgICAgIDEsICJceDgxIiwKKyAgICAgICAgICAgICAgMywgIlx4MDBceDA4XHg4MSIgfQorICAgIH0sCisgICAgeyAgMjU1LCB7ICIwMEZGIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDBceGZmIiwKKyAgICAgICAgICAgICAgNiwgIlx4MDBceDAwXHgwMFx4MDJceDAwXHhmZiIsCisgICAgICAgICAgICAgIDEsICJceGZmIiwKKyAgICAgICAgICAgICAgMywgIlx4MDBceDA4XHhmZiIgfQorICAgIH0sCisgICAgeyAgMjU2LCB7ICIwMTAwIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDFceDAwIiwKKyAgICAgICAgICAgICAgNiwgIlx4MDBceDAwXHgwMFx4MDJceDAxXHgwMCIsCisgICAgICAgICAgICAgIDIsICJceDAxXHgwMCIsCisgICAgICAgICAgICAgIDQsICJceDAwXHgwOVx4MDFceDAwIiB9CisgICAgfSwKKyAgICB7ICAyNTcsIHsgIjAxMDEiLAorICAgICAgICAgICAgICAyLCAiXHgwMVx4MDEiLAorICAgICAgICAgICAgICA2LCAiXHgwMFx4MDBceDAwXHgwMlx4MDFceDAxIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDFceDAxIiwKKyAgICAgICAgICAgICAgNCwgIlx4MDBceDA5XHgwMVx4MDEiIH0KKyAgICB9LAorICAgIHsgICAtMSwgeyAiLTAxIiwKKyAgICAgICAgICAgICAgMSwgIlx4ZmYiLAorICAgICAgICAgICAgICA1LCAiXHgwMFx4MDBceDAwXHgwMVx4ZmYiLAorICAgICAgICAgICAgICAxLCJceDAxIiB9CisgICAgfSwKKyAgICB7ICAgLTIsIHsgIi0wMiIsCisgICAgICAgICAgICAgIDEsICJceGZlIiwKKyAgICAgICAgICAgICAgNSwgIlx4MDBceDAwXHgwMFx4MDFceGZlIiwKKyAgICAgICAgICAgICAgMSwgIlx4MDIiIH0KKyAgICB9LAorICAgIHsgLTEyNywgeyAiLTdGIiwKKyAgICAgICAgICAgICAgMSwgIlx4ODEiLAorICAgICAgICAgICAgICA1LCAiXHgwMFx4MDBceDAwXHgwMVx4ODEiLAorICAgICAgICAgICAgICAxLCAiXHg3ZiIgfQorICAgIH0sCisgICAgeyAtMTI4LCB7ICItMDA4MCIsCisgICAgICAgICAgICAgIDEsICJceDgwIiwKKyAgICAgICAgICAgICAgNSwgIlx4MDBceDAwXHgwMFx4MDFceDgwIiwKKyAgICAgICAgICAgICAgMSwgIlx4ODAiIH0KKyAgICB9LAorICAgIHsgLTEyOSwgeyAiLTAwODEiLAorICAgICAgICAgICAgICAyLCAiXHhmZlx4N2YiLAorICAgICAgICAgICAgICA2LCAiXHgwMFx4MDBceDAwXHgwMlx4ZmZceDdmIiwKKyAgICAgICAgICAgICAgMSwgIlx4ODEiIH0KKyAgICB9LAorICAgIHsgLTI1NSwgeyAiLTAwRkYiLAorICAgICAgICAgICAgICAyLCAiXHhmZlx4MDEiLAorICAgICAgICAgICAgICA2LCAiXHgwMFx4MDBceDAwXHgwMlx4ZmZceDAxIiwKKyAgICAgICAgICAgICAgMSwgIlx4ZmYiIH0KKyAgICB9LAorICAgIHsgLTI1NiwgeyAiLTAxMDAiLAorICAgICAgICAgICAgICAyLCAiXHhmZlx4MDAiLAorICAgICAgICAgICAgICA2LCAiXHgwMFx4MDBceDAwXHgwMlx4ZmZceDAwIiwKKyAgICAgICAgICAgICAgMiwgIlx4MDFceDAwIiB9CisgICAgfSwKKyAgICB7IC0yNTcsIHsgIi0wMTAxIiwKKyAgICAgICAgICAgICAgMiwgIlx4ZmVceGZmIiwKKyAgICAgICAgICAgICAgNiwgIlx4MDBceDAwXHgwMFx4MDJceGZlXHhmZiIsCisgICAgICAgICAgICAgIDIsICJceDAxXHgwMSIgfQorICAgIH0sCisgICAgeyAgNjU1MzUsIHsgIjAwRkZGRiIsCisgICAgICAgICAgICAgICAgMywgIlx4MDBceGZmXHhmZiIsCisgICAgICAgICAgICAgICAgNywgIlx4MDBceDAwXHgwMFx4MDNceDAwXHhmZlx4ZmYiLAorICAgICAgICAgICAgICAgIDIsICJceGZmXHhmZiIsCisgICAgICAgICAgICAgICAgNCwgIlx4MDBceDEwXHhmZlx4ZmYiIH0KKyAgICB9LAorICAgIHsgIDY1NTM2LCB7ICIwMTAwMDAiLAorICAgICAgICAgICAgICAgIDMsICJceDAxXDAwXHgwMCIsCisgICAgICAgICAgICAgICAgNywgIlx4MDBceDAwXHgwMFx4MDNceDAxXHgwMFx4MDAiLAorICAgICAgICAgICAgICAgIDMsICJceDAxXHgwMFx4MDAiLAorICAgICAgICAgICAgICAgIDUsICJceDAwXHgxMVx4MDFceDAwXHgwMCAifQorICAgIH0sCisgICAgeyAgNjU1MzcsIHsgIjAxMDAwMSIsCisgICAgICAgICAgICAgICAgMywgIlx4MDFcMDBceDAxIiwKKyAgICAgICAgICAgICAgICA3LCAiXHgwMFx4MDBceDAwXHgwM1x4MDFceDAwXHgwMSIsCisgICAgICAgICAgICAgICAgMywgIlx4MDFceDAwXHgwMSIsCisgICAgICAgICAgICAgICAgNSwgIlx4MDBceDExXHgwMVx4MDBceDAxIiB9CisgICAgfSwKKyAgICB7IC02NTUzNywgeyAiLTAxMDAwMSIsCisgICAgICAgICAgICAgICAgMywgIlx4ZmVceGZmXHhmZiIsCisgICAgICAgICAgICAgICAgNywgIlx4MDBceDAwXHgwMFx4MDNceGZlXHhmZlx4ZmYiLAorICAgICAgICAgICAgICAgIDMsICJceDAxXHgwMFx4MDEiIH0KKyAgICB9LAorICAgIHsgLTY1NTM2LCB7ICItMDEwMDAwIiwKKyAgICAgICAgICAgICAgICAzLCAiXHhmZlx4MDBceDAwIiwKKyAgICAgICAgICAgICAgICA3LCAiXHgwMFx4MDBceDAwXHgwM1x4ZmZceDAwXHgwMCIsCisgICAgICAgICAgICAgICAgMywgIlx4MDFceDAwXHgwMCIgfQorICAgIH0sCisgICAgeyAtNjU1MzUsIHsgIi0wMEZGRkYiLAorICAgICAgICAgICAgICAgIDMsICJceGZmXHgwMFx4MDEiLAorICAgICAgICAgICAgICAgIDcsICJceDAwXHgwMFx4MDBceDAzXHhmZlx4MDBceDAxIiwKKyAgICAgICAgICAgICAgICAyLCAiXHhmZlx4ZmYiIH0KKyAgICB9CisgIH07CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9tcGlfdCBhLCBiOworICBjaGFyICpidWY7CisgIHZvaWQgKmJ1ZmFkZHIgPSAmYnVmOworICBpbnQgaWR4OworICBzaXplX3QgYnVmbGVuOworCisgIGEgPSBnY3J5X21waV9uZXcgKDApOworICBmb3IgKGlkeD0wOyBpZHggPCBESU0oZGF0YSk7IGlkeCsrKQorICAgIHsKKyAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgc2hvdyAoInByaW50IHRlc3QgJWRcbiIsIGRhdGFbaWR4XS52YWx1ZSk7CisKKyAgICAgIGlmIChkYXRhW2lkeF0udmFsdWUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9tcGlfc2V0X3VpIChhLCAtZGF0YVtpZHhdLnZhbHVlKTsKKyAgICAgICAgICBnY3J5X21waV9uZWcgKGEsIGEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGdjcnlfbXBpX3NldF91aSAoYSwgZGF0YVtpZHhdLnZhbHVlKTsKKworICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9IRVgsIGJ1ZmFkZHIsIE5VTEwsIGEpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiSEVYIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChzdHJjbXAgKGJ1ZiwgZGF0YVtpZHhdLmEuaGV4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiSEVYIiwgIndyb25nIHJlc3VsdCIpOworICAgICAgICAgICAgICBzaG93ICgiZXhwZWN0ZWQ6ICclcydcbiIsIGRhdGFbaWR4XS5hLmhleCk7CisgICAgICAgICAgICAgIHNob3cgKCIgICAgIGdvdDogJyVzJ1xuIiwgYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2ZyZWUgKGJ1Zik7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9TVEQsIGJ1ZmFkZHIsICZidWZsZW4sIGEpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiU1REIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChidWZsZW4gIT0gZGF0YVtpZHhdLmEuc3RkbGVuCisgICAgICAgICAgICAgIHx8IG1lbWNtcCAoYnVmLCBkYXRhW2lkeF0uYS5zdGQsIGRhdGFbaWR4XS5hLnN0ZGxlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XS52YWx1ZSwgIlNURCIsICJ3cm9uZyByZXN1bHQiKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoImV4cGVjdGVkOiIsIGRhdGFbaWR4XS5hLnN0ZCwgZGF0YVtpZHhdLmEuc3RkbGVuKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoIiAgICAgZ290OiIsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2ZyZWUgKGJ1Zik7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9TU0gsIGJ1ZmFkZHIsICZidWZsZW4sIGEpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiU1NIIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChidWZsZW4gIT0gZGF0YVtpZHhdLmEuc3NobGVuCisgICAgICAgICAgICAgIHx8IG1lbWNtcCAoYnVmLCBkYXRhW2lkeF0uYS5zc2gsIGRhdGFbaWR4XS5hLnNzaGxlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XS52YWx1ZSwgIlNTSCIsICJ3cm9uZyByZXN1bHQiKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoImV4cGVjdGVkOiIsIGRhdGFbaWR4XS5hLnNzaCwgZGF0YVtpZHhdLmEuc3NobGVuKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoIiAgICAgZ290OiIsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2ZyZWUgKGJ1Zik7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9VU0csIGJ1ZmFkZHIsICZidWZsZW4sIGEpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiVVNHIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChidWZsZW4gIT0gZGF0YVtpZHhdLmEudXNnbGVuCisgICAgICAgICAgICAgIHx8IG1lbWNtcCAoYnVmLCBkYXRhW2lkeF0uYS51c2csIGRhdGFbaWR4XS5hLnVzZ2xlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XS52YWx1ZSwgIlVTRyIsICJ3cm9uZyByZXN1bHQiKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoImV4cGVjdGVkOiIsIGRhdGFbaWR4XS5hLnVzZywgZGF0YVtpZHhdLmEudXNnbGVuKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoIiAgICAgZ290OiIsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2ZyZWUgKGJ1Zik7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9QR1AsIGJ1ZmFkZHIsICZidWZsZW4sIGEpOworICAgICAgaWYgKGdjcnlfbXBpX2lzX25lZyAoYSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfSU5WX0FSRykKKyAgICAgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJQR1AiLCAiRXhwZWN0ZWQgZXJyb3Igbm90IHJldHVybmVkIik7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHByaW50aW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiUEdQIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChidWZsZW4gIT0gZGF0YVtpZHhdLmEucGdwbGVuCisgICAgICAgICAgICAgIHx8IG1lbWNtcCAoYnVmLCBkYXRhW2lkeF0uYS5wZ3AsIGRhdGFbaWR4XS5hLnBncGxlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBwcmludGluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XS52YWx1ZSwgIlBHUCIsICJ3cm9uZyByZXN1bHQiKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoImV4cGVjdGVkOiIsIGRhdGFbaWR4XS5hLnBncCwgZGF0YVtpZHhdLmEucGdwbGVuKTsKKyAgICAgICAgICAgICAgc2hvd2hleCAoIiAgICAgZ290OiIsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X2ZyZWUgKGJ1Zik7CisgICAgICAgIH0KKyAgICB9CisKKworICAvKiBOb3cgZm9yIHRoZSBvdGhlciBkaXJlY3Rpb24uICAqLworICBmb3IgKGlkeD0wOyBpZHggPCBESU0oZGF0YSk7IGlkeCsrKQorICAgIHsKKyAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgc2hvdyAoInNjYW4gdGVzdCAlZFxuIiwgZGF0YVtpZHhdLnZhbHVlKTsKKworICAgICAgaWYgKGRhdGFbaWR4XS52YWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBnY3J5X21waV9zZXRfdWkgKGEsIC1kYXRhW2lkeF0udmFsdWUpOworICAgICAgICAgIGdjcnlfbXBpX25lZyAoYSwgYSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZ2NyeV9tcGlfc2V0X3VpIChhLCBkYXRhW2lkeF0udmFsdWUpOworCisgICAgICBlcnIgPSBnY3J5X21waV9zY2FuICgmYiwgR0NSWU1QSV9GTVRfSEVYLCBkYXRhW2lkeF0uYS5oZXgsIDAsICZidWZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHNjYW5uaW5nIHZhbHVlICVkIGZyb20gJXM6ICVzXG4iLAorICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJIRVgiLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKGdjcnlfbXBpX2NtcCAoYSwgYikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBzY2FubmluZyB2YWx1ZSAlZCBmcm9tICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiSEVYIiwgIndyb25nIHJlc3VsdCIpOworICAgICAgICAgICAgICBzaG93bXBpICgiZXhwZWN0ZWQ6IiwgYSk7CisgICAgICAgICAgICAgIHNob3dtcGkgKCIgICAgIGdvdDoiLCBiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChiKTsKKyAgICAgICAgfQorCisgICAgICBlcnIgPSBnY3J5X21waV9zY2FuICgmYiwgR0NSWU1QSV9GTVRfU1RELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLmEuc3RkLCBkYXRhW2lkeF0uYS5zdGRsZW4sICZidWZsZW4pOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImVycm9yIHNjYW5uaW5nIHZhbHVlICVkIGFzICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiU1REIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmIChnY3J5X21waV9jbXAgKGEsIGIpIHx8IGRhdGFbaWR4XS5hLnN0ZGxlbiAhPSBidWZsZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBzY2FubmluZyB2YWx1ZSAlZCBmcm9tICVzOiAlcyAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJTVEQiLCAid3JvbmcgcmVzdWx0IiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgc2hvd21waSAoImV4cGVjdGVkOiIsIGEpOworICAgICAgICAgICAgICBzaG93bXBpICgiICAgICBnb3Q6IiwgYik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoYik7CisgICAgICAgIH0KKworICAgICAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJmIsIEdDUllNUElfRk1UX1NTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XS5hLnNzaCwgZGF0YVtpZHhdLmEuc3NobGVuLCAmYnVmbGVuKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJlcnJvciBzY2FubmluZyB2YWx1ZSAlZCBhcyAlczogJXNcbiIsCisgICAgICAgICAgICAgIGRhdGFbaWR4XS52YWx1ZSwgIlNTSCIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZ2NyeV9tcGlfY21wIChhLCBiKSB8fCBkYXRhW2lkeF0uYS5zc2hsZW4gIT0gYnVmbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWlsICgiZXJyb3Igc2Nhbm5pbmcgdmFsdWUgJWQgZnJvbSAlczogJXMgKCV1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiU1NIIiwgIndyb25nIHJlc3VsdCIsIGJ1Zmxlbik7CisgICAgICAgICAgICAgIHNob3dtcGkgKCJleHBlY3RlZDoiLCBhKTsKKyAgICAgICAgICAgICAgc2hvd21waSAoIiAgICAgZ290OiIsIGIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKGIpOworICAgICAgICB9CisKKyAgICAgIGVyciA9IGdjcnlfbXBpX3NjYW4gKCZiLCBHQ1JZTVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2lkeF0uYS51c2csIGRhdGFbaWR4XS5hLnVzZ2xlbiwgJmJ1Zmxlbik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgiZXJyb3Igc2Nhbm5pbmcgdmFsdWUgJWQgYXMgJXM6ICVzXG4iLAorICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJVU0ciLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKGdjcnlfbXBpX2lzX25lZyAoYSkpCisgICAgICAgICAgICBnY3J5X21waV9uZWcgKGIsIGIpOworICAgICAgICAgIGlmIChnY3J5X21waV9jbXAgKGEsIGIpIHx8IGRhdGFbaWR4XS5hLnVzZ2xlbiAhPSBidWZsZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJlcnJvciBzY2FubmluZyB2YWx1ZSAlZCBmcm9tICVzOiAlcyAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJVU0ciLCAid3JvbmcgcmVzdWx0IiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgc2hvd21waSAoImV4cGVjdGVkOiIsIGEpOworICAgICAgICAgICAgICBzaG93bXBpICgiICAgICBnb3Q6IiwgYik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoYik7CisgICAgICAgIH0KKworICAgICAgLyogTmVnYXRpdmUgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFBHUCwgdGh1cyB3ZSBkb24ndCBoYXZlCisgICAgICAgICBhbiBzYW1wbGVzLiAgKi8KKyAgICAgIGlmICghZ2NyeV9tcGlfaXNfbmVnIChhKSkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdjcnlfbXBpX3NjYW4gKCZiLCBHQ1JZTVBJX0ZNVF9QR1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLmEucGdwLCBkYXRhW2lkeF0uYS5wZ3BsZW4sICZidWZsZW4pOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBmYWlsICgiZXJyb3Igc2Nhbm5pbmcgdmFsdWUgJWQgYXMgJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdLnZhbHVlLCAiUEdQIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChnY3J5X21waV9jbXAgKGEsIGIpIHx8IGRhdGFbaWR4XS5hLnBncGxlbiAhPSBidWZsZW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmFpbCAoImVycm9yIHNjYW5uaW5nIHZhbHVlICVkIGZyb20gJXM6ICVzICgldSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2lkeF0udmFsdWUsICJQR1AiLCAid3JvbmcgcmVzdWx0IiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgIHNob3dtcGkgKCJleHBlY3RlZDoiLCBhKTsKKyAgICAgICAgICAgICAgICAgIHNob3dtcGkgKCIgICAgIGdvdDoiLCBiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKGIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworICBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS1kZWJ1ZyIpKQorICAgIHZlcmJvc2UgPSBkZWJ1ZyA9IDE7CisKKyAgaWYgKCFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKSkKKyAgICBkaWUgKCJ2ZXJzaW9uIG1pc21hdGNoXG4iKTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgbmVnYXRpdmVfemVybyAoKTsKKyAgY2hlY2tfZm9ybWF0cyAoKTsKKworICBzaG93ICgiQWxsIHRlc3RzIGNvbXBsZXRlZC4gRXJyb3JzOiAlZFxuIiwgZXJyb3JfY291bnQpOworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3QtZWQyNTUxOS5jIGIvdGVzdHMvdC1lZDI1NTE5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1YTIxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3QtZWQyNTUxOS5jCkBAIC0wLDAgKzEsNTYwIEBACisvKiB0LWVkMjU1MTkuYyAtIENoZWNrIHRoZSBFZDI1NTE5IGNyeXB0bworICogQ29weXJpZ2h0IChDKSAyMDEzIGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKworI2luY2x1ZGUgInN0b3B3YXRjaC5oIgorCisjZGVmaW5lIFBHTSAidC1lZDI1NTE5IgorI2RlZmluZSBOX1RFU1RTIDEwMjUKKworI2RlZmluZSBteV9pc2FzY2lpKGMpICghKChjKSAmIDB4ODApKQorI2RlZmluZSBkaWdpdHAocCkgICAoKihwKSA+PSAnMCcgJiYgKihwKSA8PSAnOScpCisjZGVmaW5lIGhleGRpZ2l0cChhKSAoZGlnaXRwIChhKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnQScgJiYgKihhKSA8PSAnRicpICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ2EnICYmICooYSkgPD0gJ2YnKSkKKyNkZWZpbmUgeHRvaV8xKHApICAgKCoocCkgPD0gJzknPyAoKihwKS0gJzAnKTogXAorICAgICAgICAgICAgICAgICAgICAgKihwKSA8PSAnRic/ICgqKHApLSdBJysxMCk6KCoocCktJ2EnKzEwKSkKKyNkZWZpbmUgeHRvaV8yKHApICAgKCh4dG9pXzEocCkgKiAxNikgKyB4dG9pXzEoKHApKzEpKQorI2RlZmluZSB4bWFsbG9jKGEpICAgIGdjcnlfeG1hbGxvYyAoKGEpKQorI2RlZmluZSB4Y2FsbG9jKGEsYikgIGdjcnlfeGNhbGxvYyAoKGEpLChiKSkKKyNkZWZpbmUgeHN0cmR1cChhKSAgICBnY3J5X3hzdHJkdXAgKChhKSkKKyNkZWZpbmUgeGZyZWUoYSkgICAgICBnY3J5X2ZyZWUgKChhKSkKKyNkZWZpbmUgcGFzcygpICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCkKKworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CitzdGF0aWMgaW50IHNpZ25fd2l0aF9wazsKK3N0YXRpYyBpbnQgbm9fdmVyaWZ5Oworc3RhdGljIGludCBjdXN0b21fZGF0YV9maWxlOworCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyIDsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIgKTsKKyAgdmFfZW5kKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgLyogaWYgKHdoZXJlc3RyKSAqLworICAvKiAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7ICovCisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBlcnJvcl9jb3VudCsrOworICBpZiAoZXJyb3JfY291bnQgPj0gNTApCisgICAgZGllICgic3RvcHBlZCBhZnRlciA1MCBlcnJvcnMuIik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93IChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGlmICghdmVyYm9zZSkKKyAgICByZXR1cm47CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworCitzdGF0aWMgdm9pZAorc2hvd19ub3RlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGlmICghdmVyYm9zZSAmJiBnZXRlbnYgKCJzcmNkaXIiKSkKKyAgICBmcHV0cyAoIiAgICAgICIsIHN0ZGVycik7ICAvKiBUbyBhbGlnbiBhYm92ZSAiUEFTUzogIi4gICovCisgIGVsc2UKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIGlmICgqZm9ybWF0ICYmIGZvcm1hdFtzdHJsZW4oZm9ybWF0KS0xXSAhPSAnXG4nKQorICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgIHZhX2VuZCAoYXJnX3B0cik7Cit9CisKKworc3RhdGljIHZvaWQKK3Nob3dfc2V4cCAoY29uc3QgY2hhciAqcHJlZml4LCBnY3J5X3NleHBfdCBhKQoreworICBjaGFyICpidWY7CisgIHNpemVfdCBzaXplOworCisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICBpZiAocHJlZml4KQorICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSB4bWFsbG9jIChzaXplKTsKKworICBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIGJ1Ziwgc2l6ZSk7CisgIGZwcmludGYgKHN0ZGVyciwgIiUuKnMiLCAoaW50KXNpemUsIGJ1Zik7CisgIGdjcnlfZnJlZSAoYnVmKTsKK30KKworCisvKiBQcmVwZW5kIEZOQU1FIHdpdGggdGhlIHNyY2RpciBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIHZhbHVlIGFuZAorICAgcmV0cnVuIGFuIGFsbG9jYXRlZCBmaWxlbmFtZS4gKi8KK2NoYXIgKgorcHJlcGVuZF9zcmNkaXIgKGNvbnN0IGNoYXIgKmZuYW1lKQoreworICBzdGF0aWMgY29uc3QgY2hhciAqc3JjZGlyOworICBjaGFyICpyZXN1bHQ7CisKKyAgaWYgKCFzcmNkaXIgJiYgIShzcmNkaXIgPSBnZXRlbnYgKCJzcmNkaXIiKSkpCisgICAgc3JjZGlyID0gIi4iOworCisgIHJlc3VsdCA9IHhtYWxsb2MgKHN0cmxlbiAoc3JjZGlyKSArIDEgKyBzdHJsZW4gKGZuYW1lKSArIDEpOworICBzdHJjcHkgKHJlc3VsdCwgc3JjZGlyKTsKKyAgc3RyY2F0IChyZXN1bHQsICIvIik7CisgIHN0cmNhdCAocmVzdWx0LCBmbmFtZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogUmVhZCBuZXh0IGxpbmUgYnV0IHNraXAgb3ZlciBlbXB0eSBhbmQgY29tbWVudCBsaW5lcy4gIENhbGxlciBtdXN0CisgICB4ZnJlZSB0aGUgcmVzdWx0LiAgKi8KK3N0YXRpYyBjaGFyICoKK3JlYWRfdGV4dGxpbmUgKEZJTEUgKmZwLCBpbnQgKmxpbmVubykKK3sKKyAgY2hhciBsaW5lWzQwOTZdOworICBjaGFyICpwOworCisgIGRvCisgICAgeworICAgICAgaWYgKCFmZ2V0cyAobGluZSwgc2l6ZW9mIGxpbmUsIGZwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChmZW9mIChmcCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICBkaWUgKCJlcnJvciByZWFkaW5nIGlucHV0IGxpbmU6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgKysqbGluZW5vOworICAgICAgcCA9IHN0cmNociAobGluZSwgJ1xuJyk7CisgICAgICBpZiAoIXApCisgICAgICAgIGRpZSAoImlucHV0IGxpbmUgJWQgbm90IHRlcm1pbmF0ZWQgb3IgdG9vIGxvbmdcbiIsICpsaW5lbm8pOworICAgICAgKnAgPSAwOworICAgICAgZm9yIChwLS07cCA+IGxpbmUgJiYgbXlfaXNhc2NpaSAoKnApICYmIGlzc3BhY2UgKCpwKTsgcC0tKQorICAgICAgICAqcCA9IDA7CisgICAgfQorICB3aGlsZSAoISpsaW5lIHx8ICpsaW5lID09ICcjJyk7CisgIC8qIGlmIChkZWJ1ZykgKi8KKyAgLyogICBzaG93ICgicmVhZCBsaW5lOiAnJXMnXG4iLCBsaW5lKTsgKi8KKyAgcmV0dXJuIHhzdHJkdXAgKGxpbmUpOworfQorCisKKy8qIENvcHkgdGhlIGRhdGEgYWZ0ZXIgdGhlIHRhZyB0byBCVUZGRVIuICBCVUZGRVIgd2lsbCBiZSBhbGxvY2F0ZWQgYXMKKyAgIG5lZWRlZC4gICovCitzdGF0aWMgdm9pZAorY29weV9kYXRhIChjaGFyICoqYnVmZmVyLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGluZW5vKQoreworICBjb25zdCBjaGFyICpzOworCisgIHhmcmVlICgqYnVmZmVyKTsKKyAgKmJ1ZmZlciA9IE5VTEw7CisKKyAgcyA9IHN0cmNociAobGluZSwgJzonKTsKKyAgaWYgKCFzKQorICAgIHsKKyAgICAgIGZhaWwgKCJzeW50YXggZXJyb3IgYXQgaW5wdXQgbGluZSAlZCIsIGxpbmVubyk7CisgICAgICByZXR1cm47CisgICAgfQorICBmb3IgKHMrKzsgbXlfaXNhc2NpaSAoKnMpICYmIGlzc3BhY2UgKCpzKTsgcysrKQorICAgIDsKKyAgKmJ1ZmZlciA9IHhzdHJkdXAgKHMpOworfQorCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2hleDJidWZmZXIgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IHhtYWxsb2MgKHN0cmxlbihzdHJpbmcpLzIrMSk7CisgIGxlbmd0aCA9IDA7CisgIGZvciAocz1zdHJpbmc7ICpzOyBzICs9MiApCisgICAgeworICAgICAgaWYgKCFoZXhkaWdpdHAgKHMpIHx8ICFoZXhkaWdpdHAgKHMrMSkpCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgLyogSW52YWxpZCBoZXggZGlnaXRzLiAqLworICAgICAgKCh1bnNpZ25lZCBjaGFyKilidWZmZXIpW2xlbmd0aCsrXSA9IHh0b2lfMiAocyk7CisgICAgfQorICAqcl9sZW5ndGggPSBsZW5ndGg7CisgIHJldHVybiBidWZmZXI7Cit9CisKKworc3RhdGljIHZvaWQKK2hleGRvd25jYXNlIChjaGFyICpzdHJpbmcpCit7CisgIGNoYXIgKnA7CisKKyAgZm9yIChwPXN0cmluZzsgKnA7IHArKykKKyAgICBpZiAobXlfaXNhc2NpaSAoKnApKQorICAgICAgKnAgPSB0b2xvd2VyICgqcCk7Cit9CisKKworc3RhdGljIHZvaWQKK29uZV90ZXN0IChpbnQgdGVzdG5vLCBjb25zdCBjaGFyICpzaywgY29uc3QgY2hhciAqcGssCisgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpzaWcpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgaW50IGk7CisgIGNoYXIgKnA7CisgIHZvaWQgKmJ1ZmZlciA9IE5VTEw7CisgIHZvaWQgKmJ1ZmZlcjIgPSBOVUxMOworICBzaXplX3QgYnVmbGVuLCBidWZsZW4yOworICBnY3J5X3NleHBfdCBzX3RtcCwgc190bXAyOworICBnY3J5X3NleHBfdCBzX3NrID0gTlVMTDsKKyAgZ2NyeV9zZXhwX3Qgc19wayA9IE5VTEw7CisgIGdjcnlfc2V4cF90IHNfbXNnPSBOVUxMOworICBnY3J5X3NleHBfdCBzX3NpZz0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqc2lnX3IgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpzaWdfcyA9IE5VTEw7CisgIGNoYXIgKnNpZ19yc19zdHJpbmcgPSBOVUxMOworICBzaXplX3Qgc2lnX3JfbGVuLCBzaWdfc19sZW47CisKKyAgaWYgKHZlcmJvc2UgPiAxKQorICAgIHNob3cgKCJSdW5uaW5nIHRlc3QgJWRcbiIsIHRlc3Rubyk7CisKKyAgaWYgKCEoYnVmZmVyID0gaGV4MmJ1ZmZlciAoc2ssICZidWZsZW4pKSkKKyAgICB7CisgICAgICBmYWlsICgiZXJyb3IgYnVpbGRpbmcgcy1leHAgZm9yIHRlc3QgJWQsICVzOiAlcyIsCisgICAgICAgICAgICB0ZXN0bm8sICJzayIsICJpbnZhbGlkIGhleCBzdHJpbmciKTsKKyAgICAgIGdvdG8gbGVhdmU7CisgICAgfQorICBpZiAoIShidWZmZXIyID0gaGV4MmJ1ZmZlciAocGssICZidWZsZW4yKSkpCisgICAgeworICAgICAgZmFpbCAoImVycm9yIGJ1aWxkaW5nIHMtZXhwIGZvciB0ZXN0ICVkLCAlczogJXMiLAorICAgICAgICAgICAgdGVzdG5vLCAicGsiLCAiaW52YWxpZCBoZXggc3RyaW5nIik7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKyAgaWYgKHNpZ25fd2l0aF9waykKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX3NrLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKGVjYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIChjdXJ2ZSBcIkVkMjU1MTlcIikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAoZmxhZ3MgZWRkc2EpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgKHEgJWIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgKGQgJWIpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClidWZsZW4yLCBidWZmZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClidWZsZW4sIGJ1ZmZlcik7CisgIGVsc2UKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX3NrLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwcml2YXRlLWtleSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKGVjYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIChjdXJ2ZSBcIkVkMjU1MTlcIikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAoZmxhZ3MgZWRkc2EpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgKGQgJWIpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClidWZsZW4sIGJ1ZmZlcik7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZmFpbCAoImVycm9yIGJ1aWxkaW5nIHMtZXhwIGZvciB0ZXN0ICVkLCAlczogJXMiLAorICAgICAgICAgICAgdGVzdG5vLCAic2siLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisKKyAgaWYgKChlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzX3BrLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwdWJsaWMta2V5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoZWNjIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgKGN1cnZlIFwiRWQyNTUxOVwiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIChmbGFncyBlZGRzYSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAocSAlYikpKSIsICAoaW50KWJ1ZmxlbjIsIGJ1ZmZlcjIpKSkKKyAgICB7CisgICAgICBmYWlsICgiZXJyb3IgYnVpbGRpbmcgcy1leHAgZm9yIHRlc3QgJWQsICVzOiAlcyIsCisgICAgICAgICAgICB0ZXN0bm8sICJwayIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICB4ZnJlZSAoYnVmZmVyKTsKKyAgaWYgKCEoYnVmZmVyID0gaGV4MmJ1ZmZlciAobXNnLCAmYnVmbGVuKSkpCisgICAgeworICAgICAgZmFpbCAoImVycm9yIGJ1aWxkaW5nIHMtZXhwIGZvciB0ZXN0ICVkLCAlczogJXMiLAorICAgICAgICAgICAgdGVzdG5vLCAibXNnIiwgImludmFsaWQgaGV4IHN0cmluZyIpOworICAgICAgZ290byBsZWF2ZTsKKyAgICB9CisgIGlmICgoZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc19tc2csIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRhdGEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIChmbGFncyBlZGRzYSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIChoYXNoLWFsZ28gc2hhNTEyKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHZhbHVlICViKSkiLCAgKGludClidWZsZW4sIGJ1ZmZlcikpKQorICAgIHsKKyAgICAgIGZhaWwgKCJlcnJvciBidWlsZGluZyBzLWV4cCBmb3IgdGVzdCAlZCwgJXM6ICVzIiwKKyAgICAgICAgICAgIHRlc3RubywgIm1zZyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnb3RvIGxlYXZlOworICAgIH0KKworICBpZiAoKGVyciA9IGdjcnlfcGtfc2lnbiAoJnNfc2lnLCBzX21zZywgc19zaykpKQorICAgIGZhaWwgKCJnY3J5X3BrX3NpZ24gZmFpbGVkIGZvciB0ZXN0ICVkOiAlcyIsIHRlc3RubywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgaWYgKGRlYnVnKQorICAgIHNob3dfc2V4cCAoInNpZz0iLCBzX3NpZyk7CisKKyAgc190bXAyID0gTlVMTDsKKyAgc190bXAgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc19zaWcsICJzaWctdmFsIiwgMCk7CisgIGlmIChzX3RtcCkKKyAgICB7CisgICAgICBzX3RtcDIgPSBzX3RtcDsKKyAgICAgIHNfdG1wID0gZ2NyeV9zZXhwX2ZpbmRfdG9rZW4gKHNfdG1wMiwgImVkZHNhIiwgMCk7CisgICAgICBpZiAoc190bXApCisgICAgICAgIHsKKyAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc190bXAyKTsKKyAgICAgICAgICBzX3RtcDIgPSBzX3RtcDsKKyAgICAgICAgICBzX3RtcCA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzX3RtcDIsICJyIiwgMCk7CisgICAgICAgICAgaWYgKHNfdG1wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaWdfciA9IGdjcnlfc2V4cF9udGhfYnVmZmVyIChzX3RtcCwgMSwgJnNpZ19yX2xlbik7CisgICAgICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzX3RtcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgc190bXAgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoc190bXAyLCAicyIsIDApOworICAgICAgICAgIGlmIChzX3RtcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2lnX3MgPSBnY3J5X3NleHBfbnRoX2J1ZmZlciAoc190bXAsIDEsICZzaWdfc19sZW4pOworICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc190bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBnY3J5X3NleHBfcmVsZWFzZSAoc190bXAyKTsgc190bXAyID0gTlVMTDsKKworICBpZiAoIXNpZ19yIHx8ICFzaWdfcykKKyAgICBmYWlsICgiZ2NyeV9wa19zaWduIGZhaWxlZCBmb3IgdGVzdCAlZDogJXMiLCB0ZXN0bm8sICJyIG9yIHMgbWlzc2luZyIpOworICBlbHNlCisgICAgeworICAgICAgc2lnX3JzX3N0cmluZyA9IHhtYWxsb2MgKDIqKHNpZ19yX2xlbiArIHNpZ19zX2xlbikrMSk7CisgICAgICBwID0gc2lnX3JzX3N0cmluZzsKKyAgICAgICpwID0gMDsKKyAgICAgIGZvciAoaT0wOyBpIDwgc2lnX3JfbGVuOyBpKyssIHAgKz0gMikKKyAgICAgICAgc25wcmludGYgKHAsIDMsICIlMDJ4Iiwgc2lnX3JbaV0pOworICAgICAgZm9yIChpPTA7IGkgPCBzaWdfc19sZW47IGkrKywgcCArPSAyKQorICAgICAgICBzbnByaW50ZiAocCwgMywgIiUwMngiLCBzaWdfc1tpXSk7CisgICAgICBpZiAoc3RyY21wIChzaWdfcnNfc3RyaW5nLCBzaWcpKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImdjcnlfcGtfc2lnbiBmYWlsZWQgZm9yIHRlc3QgJWQ6ICVzIiwKKyAgICAgICAgICAgICAgICB0ZXN0bm8sICJ3cm9uZyB2YWx1ZSByZXR1cm5lZCIpOworICAgICAgICAgIHNob3cgKCIgIGV4cGVjdGVkOiAnJXMnIiwgc2lnKTsKKyAgICAgICAgICBzaG93ICgiICAgICAgIGdvdDogJyVzJyIsIHNpZ19yc19zdHJpbmcpOworICAgICAgICB9CisgICAgfQorCisgIGlmICghbm9fdmVyaWZ5KQorICAgIGlmICgoZXJyID0gZ2NyeV9wa192ZXJpZnkgKHNfc2lnLCBzX21zZywgc19waykpKQorICAgICAgZmFpbCAoImdjcnlfcGtfdmVyaWZ5IGZhaWxlZCBmb3IgdGVzdCAlZDogJXMiLAorICAgICAgICAgICAgdGVzdG5vLCBncGdfc3RyZXJyb3IgKGVycikpOworCisKKyBsZWF2ZToKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfc2lnKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfc2spOworICBnY3J5X3NleHBfcmVsZWFzZSAoc19wayk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzX21zZyk7CisgIHhmcmVlIChidWZmZXIpOworICB4ZnJlZSAoYnVmZmVyMik7CisgIHhmcmVlIChzaWdfcik7CisgIHhmcmVlIChzaWdfcyk7CisgIHhmcmVlIChzaWdfcnNfc3RyaW5nKTsKK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZWQyNTUxOSAoY29uc3QgY2hhciAqZm5hbWUpCit7CisgIEZJTEUgKmZwOworICBpbnQgbGluZW5vLCBudGVzdHM7CisgIGNoYXIgKmxpbmU7CisgIGludCB0ZXN0bm87CisgIGNoYXIgKnNrLCAqcGssICptc2csICpzaWc7CisKKyAgc2hvdyAoIkNoZWNraW5nIEVkMjU1MTkuXG4iKTsKKworICBmcCA9IGZvcGVuIChmbmFtZSwgInIiKTsKKyAgaWYgKCFmcCkKKyAgICBkaWUgKCJlcnJvciBvcGVuaW5nICclcyc6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7CisKKyAgdGVzdG5vID0gMDsKKyAgc2sgPSBwayA9IG1zZyA9IHNpZyA9IE5VTEw7CisgIGxpbmVubyA9IG50ZXN0cyA9IDA7CisgIHdoaWxlICgobGluZSA9IHJlYWRfdGV4dGxpbmUgKGZwLCAmbGluZW5vKSkpCisgICAgeworICAgICAgaWYgKCFzdHJuY21wIChsaW5lLCAiVFNUOiIsIDQpKQorICAgICAgICB0ZXN0bm8gPSBhdG9pIChsaW5lKzQpOworICAgICAgZWxzZSBpZiAoIXN0cm5jbXAgKGxpbmUsICJTSzoiLCAzKSkKKyAgICAgICAgY29weV9kYXRhICgmc2ssIGxpbmUsIGxpbmVubyk7CisgICAgICBlbHNlIGlmICghc3RybmNtcCAobGluZSwgIlBLOiIsIDMpKQorICAgICAgICBjb3B5X2RhdGEgKCZwaywgbGluZSwgbGluZW5vKTsKKyAgICAgIGVsc2UgaWYgKCFzdHJuY21wIChsaW5lLCAiTVNHOiIsIDQpKQorICAgICAgICBjb3B5X2RhdGEgKCZtc2csIGxpbmUsIGxpbmVubyk7CisgICAgICBlbHNlIGlmICghc3RybmNtcCAobGluZSwgIlNJRzoiLCA0KSkKKyAgICAgICAgY29weV9kYXRhICgmc2lnLCBsaW5lLCBsaW5lbm8pOworICAgICAgZWxzZQorICAgICAgICBmYWlsICgidW5rbm93biB0YWcgYXQgaW5wdXQgbGluZSAlZCIsIGxpbmVubyk7CisKKyAgICAgIHhmcmVlIChsaW5lKTsKKyAgICAgIGlmICh0ZXN0bm8gJiYgc2sgJiYgcGsgJiYgbXNnICYmIHNpZykKKyAgICAgICAgeworICAgICAgICAgIGhleGRvd25jYXNlIChzaWcpOworICAgICAgICAgIG9uZV90ZXN0ICh0ZXN0bm8sIHNrLCBwaywgbXNnLCBzaWcpOworICAgICAgICAgIG50ZXN0cysrOworICAgICAgICAgIGlmICghKG50ZXN0cyAlIDI1NikpCisgICAgICAgICAgICBzaG93X25vdGUgKCIlZCBvZiAlZCB0ZXN0cyBkb25lXG4iLCBudGVzdHMsIE5fVEVTVFMpOworICAgICAgICAgIHhmcmVlIChwayk7ICBwayA9IE5VTEw7CisgICAgICAgICAgeGZyZWUgKHNrKTsgIHNrID0gTlVMTDsKKyAgICAgICAgICB4ZnJlZSAobXNnKTsgbXNnID0gTlVMTDsKKyAgICAgICAgICB4ZnJlZSAoc2lnKTsgc2lnID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgfQorICB4ZnJlZSAocGspOworICB4ZnJlZSAoc2spOworICB4ZnJlZSAobXNnKTsKKyAgeGZyZWUgKHNpZyk7CisKKyAgaWYgKG50ZXN0cyAhPSBOX1RFU1RTICYmICFjdXN0b21fZGF0YV9maWxlKQorICAgIGZhaWwgKCJkaWQgJWQgdGVzdHMgYnV0IGV4cGVjdGVkICVkIiwgbnRlc3RzLCBOX1RFU1RTKTsKKyAgZWxzZSBpZiAoKG50ZXN0cyAlIDI1NikpCisgICAgc2hvd19ub3RlICgiJWQgdGVzdHMgZG9uZVxuIiwgbnRlc3RzKTsKKworICBmY2xvc2UgKGZwKTsKK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworICBjaGFyICpmbmFtZSA9IE5VTEw7CisKKyAgaWYgKGFyZ2MpCisgICAgeyBhcmdjLS07IGFyZ3YrKzsgfQorCisgIHdoaWxlIChhcmdjICYmIGxhc3RfYXJnYyAhPSBhcmdjICkKKyAgICB7CisgICAgICBsYXN0X2FyZ2MgPSBhcmdjOworICAgICAgaWYgKCFzdHJjbXAgKCphcmd2LCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0taGVscCIpKQorICAgICAgICB7CisgICAgICAgICAgZnB1dHMgKCJ1c2FnZTogIiBQR00gIiBbb3B0aW9uc11cbiIKKyAgICAgICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAgICAgICIgIC0tdmVyYm9zZSAgICAgICBwcmludCB0aW1pbmdzIGV0Yy5cbiIKKyAgICAgICAgICAgICAgICAgIiAgLS1kZWJ1ZyAgICAgICAgIGZseXN3YXR0ZXJcbiIKKyAgICAgICAgICAgICAgICAgIiAgLS1zaWduLXdpdGgtcGsgIGFsc28gdXNlIHRoZSBwdWJsaWMga2V5IGZvciBzaWduaW5nXG4iCisgICAgICAgICAgICAgICAgICIgIC0tbm8tdmVyaWZ5ICAgICBza2lwIHRoZSB2ZXJpZnkgdGVzdFxuIgorICAgICAgICAgICAgICAgICAiICAtLWRhdGEgRk5BTUUgICAgdGFrZSB0ZXN0IGRhdGEgZnJvbSBmaWxlIEZOQU1FXG4iLAorICAgICAgICAgICAgICAgICBzdGRvdXQpOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tdmVyYm9zZSIpKQorICAgICAgICB7CisgICAgICAgICAgdmVyYm9zZSsrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVidWciKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UgKz0gMjsKKyAgICAgICAgICBkZWJ1ZysrOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tc2lnbi13aXRoLXBrIikpCisgICAgICAgIHsKKyAgICAgICAgICBzaWduX3dpdGhfcGsgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tbm8tdmVyaWZ5IikpCisgICAgICAgIHsKKyAgICAgICAgICBub192ZXJpZnkgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGF0YSIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgICAgaWYgKGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHhmcmVlIChmbmFtZSk7CisgICAgICAgICAgICAgIGZuYW1lID0geHN0cmR1cCAoKmFyZ3YpOworICAgICAgICAgICAgICBhcmdjLS07IGFyZ3YrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIXN0cm5jbXAgKCphcmd2LCAiLS0iLCAyKSkKKyAgICAgICAgZGllICgidW5rbm93biBvcHRpb24gJyVzJyIsICphcmd2KTsKKworICAgIH0KKworICBpZiAoIWZuYW1lKQorICAgIGZuYW1lID0gcHJlcGVuZF9zcmNkaXIgKCJ0LWVkMjU1MTkuaW5wIik7CisgIGVsc2UKKyAgICBjdXN0b21fZGF0YV9maWxlID0gMTsKKworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRElTQUJMRV9TRUNNRU0sIDApOworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUgLCAwKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET00sIDApOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfSU5JVElBTElaQVRJT05fRklOSVNIRUQsIDApOworCisgIHN0YXJ0X3RpbWVyICgpOworICBjaGVja19lZDI1NTE5IChmbmFtZSk7CisgIHN0b3BfdGltZXIgKCk7CisKKyAgeGZyZWUgKGZuYW1lKTsKKworICBzaG93ICgiQWxsIHRlc3RzIGNvbXBsZXRlZCBpbiAlcy4gIEVycm9yczogJWRcbiIsCisgICAgICAgIGVsYXBzZWRfdGltZSAoKSwgZXJyb3JfY291bnQpOworICByZXR1cm4gISFlcnJvcl9jb3VudDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3QtZWQyNTUxOS5pbnAgYi90ZXN0cy90LWVkMjU1MTkuaW5wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzg3YzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90LWVkMjU1MTkuaW5wCkBAIC0wLDAgKzEsNjE2NCBAQAorIyB0LWVkMjU1MTkuaW5wICAtIDEwMjQgdGVzdCBkYXRhIHNldHMKKyMgVGhpcyBoYXMgYmVlbiB0YWtlbiBmcm9tCisjICAgIGh0dHA6Ly9lZDI1NTE5LmNyLnlwLnRvL3B5dGhvbi9zaWduLmlucHV0CisjIHdoaWNoIGRpc3RyaWJ1dGVkIHRoZW0gYXMgcHVibGljIGRvbWFpbi4KKyMgRm9yIG91ciB1c2UgY29udmVydGVkIHVzaW5nIHRoaXMgc2NyaXB0OgorIyAgICBhd2sgLUY6ICdCRUdJTiB7bj0xfSB7IHByaW50ICJUU1Q6ICIgbjsgbisrOyBcCisjICAgICAgcHJpbnQgIlNLOiAgIiBzdWJzdHIoJDEsMCw2NCk7IHByaW50ICJQSzogICIgJDI7XAorIyAgICAgIHByaW50ICJNU0c6ICIgJDM7IHByaW50ICJTSUc6ICIgc3Vic3RyKCQ0LDAsMTI4KTsgcHJpbnQgIiJ9JworIworIyBUaGUgUEsgYXBwZW5kZWQgdG8gdGhlIFNLIGFuZCB0aGUgTVNHIGFwcGVuZGVkIHRvIHRoZSBTSUcgaGF2ZSBiZWVuCisjIHN0cmlwcGVkLiAgQSBmZXcgYWRkaXRpb25hbCB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIDEwMjQKKyMgb3JpZ2luYWwgdGVzdHMuCisKK1RTVDogMQorU0s6ICA5ZDYxYjE5ZGVmZmQ1YTYwYmE4NDRhZjQ5MmVjMmNjNDQ0NDljNTY5N2IzMjY5MTk3MDNiYWMwMzFjYWU3ZjYwCitQSzogIGQ3NWE5ODAxODJiMTBhYjdkNTRiZmVkM2M5NjQwNzNhMGVlMTcyZjNkYWE2MjMyNWFmMDIxYTY4ZjcwNzUxMWEKK01TRzoKK1NJRzogZTU1NjQzMDBjMzYwYWM3MjkwODZlMmNjODA2ZTgyOGE4NDg3N2YxZWI4ZTVkOTc0ZDg3M2UwNjUyMjQ5MDE1NTVmYjg4MjE1OTBhMzNiYWNjNjFlMzk3MDFjZjliNDZiZDI1YmY1ZjA1OTViYmUyNDY1NTE0MTQzOGU3YTEwMGIKKworVFNUOiAyCitTSzogIDRjY2QwODliMjhmZjk2ZGE5ZGI2YzM0NmVjMTE0ZTBmNWI4YTMxOWYzNWFiYTYyNGRhOGNmNmVkNGZiOGE2ZmIKK1BLOiAgM2Q0MDE3YzNlODQzODk1YTkyYjcwYWE3NGQxYjdlYmM5Yzk4MmNjZjJlYzQ5NjhjYzBjZDU1ZjEyYWY0NjYwYworTVNHOiA3MgorU0lHOiA5MmEwMDlhOWYwZDRjYWI4NzIwZTgyMGI1ZjY0MjU0MGEyYjI3YjU0MTY1MDNmOGZiMzc2MjIyM2ViZGI2OWRhMDg1YWMxZTQzZTE1OTk2ZTQ1OGYzNjEzZDBmMTFkOGMzODdiMmVhZWI0MzAyYWVlYjAwZDI5MTYxMmJiMGMwMAorCitUU1Q6IDMKK1NLOiAgYzVhYThkZjQzZjlmODM3YmVkYjc0NDJmMzFkY2I3YjE2NmQzODUzNTA3NmYwOTRiODVjZTNhMmUwYjQ0NThmNworUEs6ICBmYzUxY2Q4ZTYyMThhMWEzOGRhNDdlZDAwMjMwZjA1ODA4MTZlZDEzYmEzMzAzYWM1ZGViOTExNTQ4OTA4MDI1CitNU0c6IGFmODIKK1NJRzogNjI5MWQ2NTdkZWVjMjQwMjQ4MjdlNjljM2FiZTAxYTMwY2U1NDhhMjg0NzQzYTQ0NWUzNjgwZDdkYjVhYzNhYzE4ZmY5YjUzOGQxNmYyOTBhZTY3Zjc2MDk4NGRjNjU5NGE3YzE1ZTk3MTZlZDI4ZGMwMjdiZWNlZWExZWM0MGEKKworVFNUOiA0CitTSzogIDBkNGEwNWIwNzM1MmE1NDM2ZTE4MDM1NmRhMGFlNmVmYTAzNDVmZjdmYjE1NzI1NzU3NzJlODAwNWVkOTc4ZTkKK1BLOiAgZTYxYTE4NWJjZWYyNjEzYTZjN2NiNzk3NjNjZTk0NWQzYjI0NWQ3NjExNGRkNDQwYmNmNWYyZGMxYWE1NzA1NworTVNHOiBjYmM3N2IKK1NJRzogZDk4NjhkNTJjMmJlYmNlNWYzZmE1YTc5ODkxOTcwZjMwOWNiNjU5MWUzZTE3MDJhNzAyNzZmYTk3YzI0YjNhOGU1ODYwNmMzOGM5NzU4NTI5ZGE1MGVlMzFiODIxOWNiYTQ1MjcxYzY4OWFmYTYwYjBlYTI2Yzk5ZGIxOWIwMGMKKworVFNUOiA1CitTSzogIDZkZjkzNDBjMTM4Y2MxODhiNWZlNDQ2NGViYWEzZjdmYzIwNmEyZDU1YzM0MzQ3MDdlNzRjOWZjMDRlMjBlYmIKK1BLOiAgYzBkYWMxMDJjNDUzMzE4NmUyNWRjNDMxMjg0NzIzNTNlYWFiZGI4NzhiMTUyYWViOGUwMDFmOTJkOTAyMzNhNworTVNHOiA1ZjRjODk4OQorU0lHOiAxMjRmNmZjNmIwZDEwMDg0Mjc2OWU3MWJkNTMwNjY0ZDg4OGRmODUwN2RmNmM1NmRlZGZkYjUwOWFlYjkzNDE2ZTI2YjkxOGQzOGFhMDYzMDVkZjMwOTU2OTdjMThiMmFhODMyZWFhNTJlZGMwYWU0OWZiYWU1YTg1ZTE1MGMwNworCitUU1Q6IDYKK1NLOiAgYjc4MDM4MWE2NWVkZjhiNzhmNjk0NWU4ZGJlYzc5NDFhYzA0OWZkNGM2MTA0MGNmMGMzMjQzNTc5NzVhMjkzYworUEs6ICBlMjUzYWYwNzY2ODA0Yjg2OWJiMTU5NWJlOTc2NWI1MzQ4ODZiYmFhYjgzMDViZjUwZGJjN2Y4OTliZmI1ZjAxCitNU0c6IDE4YjZiZWMwOTcKK1NJRzogYjJmYzQ2YWQ0N2FmNDY0NDc4YzE5OWUxZjhiZTE2OWYxYmU2MzI3YzdmOWEwYTY2ODkzNzFjYTk0Y2FmMDQwNjRhMDFiMjJhZmYxNTIwYWJkNTg5NTEzNDE2MDNmYWVkNzY4Y2Y3OGNlOTdhZTdiMDM4YWJmZTQ1NmFhMTdjMDkKKworVFNUOiA3CitTSzogIDc4YWU5ZWZmZTZmMjQ1ZTkyNGE3YmU2MzA0MTE0NmViYzY3MGRiZDMwNjBjYmE2N2ZiYzYyMTZmZWJjNDQ1NDYKK1BLOiAgZmJjZmJmYTQwNTA1ZDdmMmJlNDQ0YTMzZDE4NWNjNTRlMTZkNjE1MjYwZTE2NDBiMmI1MDg3YjgzZWUzNjQzZAorTVNHOiA4OTAxMGQ4NTU5NzIKK1NJRzogNmVkNjI5ZmMxZDljZTllMTQ2ODc1NWZmNjM2ZDVhM2Y0MGE1ZDljOTFhZmQ5M2I3OWQyNDE4MzBmN2U1ZmEyOTg1NGI4ZjIwY2M2ZWVjYmIyNDhkYmQ4ZDE2ZDE0ZTk5NzUyMTk0ZTQ5MDRkMDljNzRkNjM5NTE4ODM5ZDIzMDAKKworVFNUOiA4CitTSzogIDY5MTg2NWJmYzgyYTFlNGI1NzRlZWNkZTRjNzUxOTA5M2ZhZjBjZjg2NzM4MDIzNGUzNjY0NjQ1YzYxYzVmNzkKK1BLOiAgOThhNWUzYTM2ZTY3YWFiYTg5ODg4YmYwOTNkZTFhZDk2M2U3NzQwMTNiMzkwMmJmYWIzNTZkOGI5MDE3OGE2MworTVNHOiBiNGE4ZjM4MWU3MGU3YQorU0lHOiA2ZTBhZjJmZTU1YWUzNzdhNmI3YTcyNzhlZGZiNDE5YmQzMjFlMDZkMGRmNWUyNzAzN2RiODgxMmU3ZTM1Mjk4MTBmYTU1NTJmNmMwMDIwOTg1Y2ExN2EwZTAyZTAzNmQ3YjIyMmEyNGY5OWI3N2I3NWZkZDE2Y2IwNTU2ODEwNworCitUU1Q6IDkKK1NLOiAgM2IyNjUxNmZiM2RjODhlYjE4MWI5ZWQ3M2YwYmNkNTJiY2Q2YjRjNzg4ZTRiY2FmNDYwNTdmZDA3OGJlZTA3MworUEs6ICBmODFmYjU0YTgyNWZjZWQ5NWViMDMzYWZjZDY0MzE0MDc1YWJmYjBhYmQyMGE5NzA4OTI1MDM0MzZmMzRiODYzCitNU0c6IDQyODRhYmM1MWJiNjcyMzUKK1NJRzogZDZhZGRlYzVhZmIwNTI4YWMxN2JiMTc4ZDNlN2YyODg3ZjlhZGJiMWFkMTZlMTEwNTQ1ZWYzYmM1N2Y5ZGUyMzE0YTVjODM4OGY3MjNiODkwN2JlMGYzYWM5MGM2MjU5YmJlODg1ZWNjMTc2NDVkZjNkYjdkNDg4ZjgwNWZhMDgKKworVFNUOiAxMAorU0s6ICBlZGM2ZjVmYmRkMWNlZTRkMTAxYzA2MzUzMGEzMDQ5MGIyMjFiZTY4YzAzNmY1YjA3ZDBmOTUzYjc0NWRmMTkyCitQSzogIGMxYTQ5YzY2ZTYxN2Y5ZWY1ZWM2NmJjNGM2NTY0Y2EzM2RlMmE1ZmI1ZTE0NjQwNjJlNmQ2YzYyMTkxNTVlZmQKK01TRzogNjcyYmY4OTY1ZDA0YmM1MTQ2CitTSUc6IDJjNzZhMDRhZjIzOTFjMTQ3MDgyZTMzZmFhY2RiZTU2NjQyYTFlMTM0YmQzODg2MjBiODUyYjkwMWE2YmMxNmZmNmM5Y2M5NDA0YzQxZGVhMTJlZDI4MWRhMDY3YTE1MTM4NjZmOWQ5NjRmOGJkZDI0OTUzODU2YzUwMDQyOTAxCisKK1RTVDogMTEKK1NLOiAgNGU3ZDIxZmIzYjE4OTc1NzFhNDQ1ODMzYmUwZjlmZDQxY2Q2MmJlM2FhMDQwNDBmODkzNGUxZmNiZGNhY2Q0NQorUEs6ICAzMWIyNTI0YjgzNDhmN2FiMWRmYWZhNjc1Y2M1MzhlOWE4NGUzZmU1ODE5ZTI3YzEyYWQ4YmJjMWEzNmU0ZGZmCitNU0c6IDMzZDdhNzg2YWRlZDhjMWJmNjkxCitTSUc6IDI4ZTQ1OThjNDE1YWU5ZGUwMWYwM2Y5ZjNmYWI0ZTkxOWU4YmY1MzdkZDJiMGNkZjZlNzliOWU2NTU5Yzk0MDlkOTE1MWE0YzQwZjA4MzE5MzkzNzYyN2MzNjk0ODgyNTllOTlkYTVhOWYwYTg3NDk3ZmE2Njk2YTVkZDZjZTA4CisKK1RTVDogMTIKK1NLOiAgYTk4MGY4OTJkYjEzYzk5YTNlODk3MWU5NjViMmZmM2Q0MWVhZmQ1NDA5M2JjOWYzNGQxZmQyMmQ4NDExNWJiNgorUEs6ICA0NGI1N2VlMzBjZGI1NTgyOWQwYTVkNGYwNDZiYWVmMDc4ZjFlOTdhN2YyMWI2MmQ3NWY4ZTk2ZWExMzljMzVmCitNU0c6IDM0ODZmNjg4NDhhNjVhMGViNTUwN2QKK1NJRzogNzdkMzg5ZTU5OTYzMGQ5MzQwNzYzMjk1ODNjZDQxMDVhNjQ5YTkyOTJhYmM0NGNkMjhjNDAwMDBjOGUyZjVhYzc2NjBhODFjODViNzJhZjg0NTJkN2QyNWMwNzA4NjFkYWU5MTYwMWM3ODAzZDY1NjUzMTY1MGRkNGU1YzQxMDAKKworVFNUOiAxMworU0s6ICA1YjVhNjE5ZjhjZTFjNjZkN2NlMjZlNWEyYWU3YjBjMDRmZWJjZDM0NmQyODZjOTI5ZTE5ZDBkNTk3M2JmZWY5CitQSzogIDZmZTgzNjkzZDAxMWQxMTExMzFjNGYzZmJhYWE0MGE5ZDNkNzZiMzAwMTJmZjczYmIwZTM5ZWMyN2FiMTgyNTcKK01TRzogNWE4ZDlkMGEyMjM1N2U2NjU1ZjljNzg1CitTSUc6IDBmOWFkOTc5MzAzM2EyZmEwNjYxNGIyNzdkMzczODFlNmQ5NGY2NWFjMmE1YTk0NTU4ZDA5ZWQ2Y2U5MjIyNThjMWE1Njc5NTJlODYzYWM5NDI5N2FlYzNjMGQwYzhkZGY3MTA4NGU1MDQ4NjBiYjZiYTI3NDQ5YjU1YWRjNDBlCisKK1RTVDogMTQKK1NLOiAgOTQwYzg5ZmU0MGE4MWRhZmJkYjI0MTZkMTRhZTQ2OTExOTg2OTc0NDQxMGMzMzAzYmZhYTAyNDFkYWM1NzgwMAorUEs6ICBhMmViOGMwNTAxZTMwYmFlMGNmODQyZDJiZGU4ZGVjNzM4NmY2YjdmYzM5ODFiOGM1N2M5NzkyYmI5NGNmMmRkCitNU0c6IGI4N2QzODEzZTAzZjU4Y2YxOWZkMGI2Mzk1CitTSUc6IGQ4YmI2NGFhZDhjOTk1NWExMTVhNzkzYWRkZDI0ZjdmMmIwNzc2NDg3MTRmNDljNDY5NGVjOTk1YjMzMGQwOWQ2NDBkZjMxMGY0NDdmZDdiNmNiNWMxNGY5ZmU5ZjQ5MGJjZjhjZmFkYmZkMjE2OWM4YWMyMGQzYjhhZjQ5YTBjCisKK1RTVDogMTUKK1NLOiAgOWFjYWQ5NTlkMjE2MjEyZDc4OWExMTkyNTJlYmZlMGM5NjUxMmEyM2M3M2JkOWYzYjIwMjI5MmQ2OTE2YTczOAorUEs6ICBjZjNhZjg5ODQ2N2E1YjdhNTJkMzNkNTNiYzAzN2UyNjQyYThkYTk5NjkwM2ZjMjUyMjE3ZTljMDMzZTJmMjkxCitNU0c6IDU1YzdmYTQzNGY1ZWQ4Y2RlYzJiN2FlYWMxNzMKK1NJRzogNmVlM2ZlODFlMjNjNjBlYjIzMTJiMjAwNmIzYjI1ZTY4MzhlMDIxMDY2MjNmODQ0YzQ0ZWRiOGRhZmQ2NmFiMDY3MTA4N2ZkMTk1ZGY1YjhmNThhMWQ2ZTUyYWY0MjkwODA1M2Q1NWM3MzIxMDEwMDkyNzQ4Nzk1ZWY5NGNmMDYKKworVFNUOiAxNgorU0s6ICBkNWFlZWU0MWVlYjBlOWQxYmY4MzM3ZjkzOTU4N2ViZTI5NjE2MWU2YmY1MjA5ZjU5MWVjOTM5ZTE0NDBjMzAwCitQSzogIGZkMmE1NjU3MjMxNjNlMjlmNTNjOWRlM2Q1ZThmYmUzNmE3YWI2NmUxNDM5ZWM0ZWFlOWMwYTYwNGFmMjkxYTUKK01TRzogMGE2ODhlNzliZTI0Zjg2NjI4NmQ0NjQ2YjVkODFjCitTSUc6IGY2OGQwNDg0N2U1YjI0OTczNzg5OWMwMTRkMzFjODA1YzUwMDdhNjJjMGExMGQ1MGJiMTUzOGM1ZjM1NTAzOTUxZmJjMWUwODY4MmYyY2MwYzkyZWZlOGY0OTg1ZGVjNjFkY2JkNTRkNGI5NGEyMjU0N2QyNDQ1MTI3MWM4YjAwCisKK1RTVDogMTcKK1NLOiAgMGE0N2QxMDQ1MmFlMmZlYmVjNTE4YTFjN2MzNjI4OTBjM2ZjMWE0OWQzNGIwM2I2NDY3ZDM1YzkwNGE4MzYyZAorUEs6ICAzNGU1YTg1MDhjNDc0Mzc0Njk2MmMwNjZlNGJhZGVhMjIwMWI4YWI0ODRkZTVjNGY5NDQ3NmNjZDIxNDM5NTViCitNU0c6IGM5NDJmYTdhYzZiMjNhYjdmZjYxMmZkYzhlNjhlZjM5CitTSUc6IDJhM2QyN2RjNDBkMGE4MTI3OTQ5YTNiN2Y5MDhiMzY4OGY2M2I3ZjE0ZjY1MWFhY2Q3MTU5NDBiZGJlMjdhMDgwOWFhYzE0MmY0N2FiMGUxZTQ0ZmE0OTBiYTg3Y2U1MzkyZjMzYTg5MTUzOWNhZjFlZjRjMzY3Y2FlNTQ1MDBjCisKK1RTVDogMTgKK1NLOiAgZjgxNDhmNzUwNmI3NzVlZjQ2ZmRjOGU4Yzc1NjUxNjgxMmQ0N2Q2Y2ZiZmEzMThjMjdjOWEyMjY0MWU1NmYxNworUEs6ICAwNDQ1ZTQ1NmRhY2M3ZDViMGJiZWQyM2M4MjAwY2RiNzRiZGNiMDNlNGM3YjczZjBhMmI5YjQ2ZWFjNWQ0MzcyCitNU0c6IDczNjg3MjRhNWIwZWZiNTdkMjhkOTc2MjJkYmRlNzI1YWYKK1NJRzogMzY1M2NjYjIxMjE5MjAyYjg0MzZmYjQxYTMyYmEyNjE4YzRhMTMzNDMxZTZlNjM0NjNjZWIzYjYxMDZjNGQ1NmUxZDJiYTE2NWJhNzZlYWFkM2RjMzliZmZiMTMwZjFkZTNkOGU2NDI3ZGI1YjcxOTM4ZGI0ZTI3MmJjM2UyMGIKKworVFNUOiAxOQorU0s6ICA3N2Y4ODY5MWM0ZWZmMjNlYmI3MzY0OTQ3MDkyOTUxYTVmZjNmMTA3ODViNDE3ZTkxODgyM2E1NTJkYWI3Yzc1CitQSzogIDc0ZDI5MTI3ZjE5OWQ4NmE4Njc2YWVjMzNiNGNlM2YyMjVjY2IxOTFmNTJjMTkxY2NkMWU4Y2NhNjUyMTNhNmIKK01TRzogYmQ4ZTA1MDMzZjNhOGJjZGNiZjRiZWNlYjcwOTAxYzgyZTMxCitTSUc6IGZiZTkyOWQ3NDNhMDNjMTc5MTA1NzU0OTJmMzA5MmVlMmEyYmYxNGE2MGEzZmNhY2VjNzRhNThjNzMzNDUxMGZjMjYyZGI1ODI3OTEzMjJkNmM4YzQxZjE3MDBhZGI4MDAyN2VjYWJjMTQyNzBiNzAzNDQ0YWUzZWU3NjIzZTBhCisKK1RTVDogMjAKK1NLOiAgYWI2ZjdhZWU2YTA4MzdiMzM0YmE1ZWIxYjJhZDdmY2VjZmFiN2UzMjNjYWIxODdmZTJlMGE5NWQ4MGVmZjEzMgorUEs6ICA1Yjk2ZGNhNDk3ODc1YmY5NjY0YzVlNzVmYWNmM2Y5YmM1NGJhZTkxM2Q2NmNhMTVlZTg1ZjE0OTFjYTI0ZDJjCitNU0c6IDgxNzE0NTZmOGI5MDcxODliMWQ3NzllMjZiYzVhZmJiMDhjNjdhCitTSUc6IDczYmNhNjRlOWRkMGRiODgxMzhlZWRmYWZjZWE4ZjU0MzZjZmI3NGJmYjBlNzczM2NmMzQ5YmFhMGM0OTc3NWM1NmQ1OTM0ZTFkMzhlMzZmMzliN2M1YmViMGE4MzY1MTBjNDUxMjZmOGVjNGI2ODEwNTE5OTA1YjBjYTA3YzA5CisKK1RTVDogMjEKK1NLOiAgOGQxMzVkZTdjODQxMWJiZGJkMWIzMWU1ZGM2NzhmMmFjNzEwOWU3OTJiNjBmMzhjZDI0OTM2ZThhODk4YzMyZAorUEs6ICAxY2EyODE5Mzg1Mjk4OTY1MzVhNzcxNGUzNTg0MDg1Yjg2ZWY5ZmVjNzIzZjQyODE5ZmM4ZGQ1ZDhjMDA4MTdmCitNU0c6IDhiYTZhNGM5YTE1YTI0NGE5YzI2YmIyYTU5YjEwMjZmMjEzNDhiNDkKK1NJRzogYTFhZGMyYmM2YTJkOTgwNjYyNjc3ZTdmZGZmNjQyNGRlN2RiYTUwZjU3OTVjYTkwZmRmM2U5NmUyNTZmMzI4NWNhYzcxZDMzNjA0ODJlOTkzZDAyOTRiYTRlYzc0NDBjNjFhZmZkZjM1ZmU4M2U2ZTA0MjYzOTM3ZGI5M2YxMDUKKworVFNUOiAyMgorU0s6ICAwZTc2NWQ3MjBlNzA1ZjkzNjZjMWFiOGMzZmE4NGM5YTQ0MzcwYzA2OTY5ZjgwMzI5Njg4NGIyODQ2YTY1MmE0CitQSzogIDdmYWU0NWRkMGEwNTk3MTAyNmQ0MTBiYzQ5N2FmNWJlN2QwODI3YTgyYTE0NWMyMDNmNjI1ZGZjYjhiMDNiYTgKK01TRzogMWQ1NjZhNjIzMmJiYWFiM2U2ZDg4MDRiYjUxOGE0OThlZDBmOTA0OTg2CitTSUc6IGJiNjFjZjg0ZGU2MTg2MjIwN2M2YTQ1NTI1OGJjNGRiNGUxNWVlYTAzMTdmZjg4NzE4Yjg4MmEwNmI1Y2Y2ZWM2ZmQyMGM1YTI2OWU1ZDVjODA1YmFmYmNjNTc5ZTI1OTBhZjQxNGM3YzIyNzI3M2MxMDJhMTAwNzBjZGZlODBmCisKK1RTVDogMjMKK1NLOiAgZGIzNmUzMjZkNjc2YzJkMTljYzhmZTBjMTRiNzA5MjAyZWNmYzc2MWQyNzA4OWViNmVhNGIxYmIwMjFlY2ZhNworUEs6ICA0ODM1OWI4NTBkMjNmMDcxNWQ5NGJiOGJiNzVlN2UxNDMyMmVhZjE0ZjA2ZjI4YTgwNTQwM2ZiZGEwMDJmYzg1CitNU0c6IDFiMGFmYjBhYzRiYTlhYjdiNzE3MmNkZGM5ZWI0MmJiYTFhNjRiY2U0N2Q0CitTSUc6IGI2ZGNkMDk5ODlkZmJhYzU0MzIyYTNjZTg3ODc2ZTFkNjIxMzRkYTk5OGM3OWQyNGI1MGJkN2E2YTc5N2Q4NmEwZTE0ZGM5ZDc0OTFkNmMxNGE2NzNjNjUyY2ZiZWM5Zjk2MmEzOGM5NDVkYTNiMmYwODc5ZDBiNjhhOTIxMzAwCisKK1RTVDogMjQKK1NLOiAgYzg5OTU1ZTBmNzc0MWQ5MDVkZjA3MzBiM2RjMmIwY2UxYTEzMTM0ZTQ0ZmVmM2Q0MGQ2MGMwMjBlZjE5ZGY3NworUEs6ICBmZGIzMDY3MzQwMmZhZjFjODAzMzcxNGYzNTE3ZTQ3Y2MwZjkxZmU3MGNmMzgzNmQ2YzIzNjM2ZTNmZDIyODdjCitNU0c6IDUwN2M5NGM4ODIwZDJhNTc5M2NiZjM0NDJiM2Q3MTkzNmYzNWZlM2FmZWYzMTYKK1NJRzogN2VmNjZlNWU4NmYyMzYwODQ4ZTAwMTRlOTQ4ODBhZTI5MjBhZDhhMzE4NWE0NmIzNWQxZTA3ZGVhOGZhOGFlNGY2Yjg0M2JhMTc0ZDk5ZmE3OTg2NjU0YTA4OTFjMTJhNzk0NDU1NjY5Mzc1YmY5MmFmNGNjMjc3MGI1NzllMGMKKworVFNUOiAyNQorU0s6ICA0ZTYyNjI3ZmMyMjExNDI0NzhhZWU3ZjAwNzgxZjgxN2Y2NjJlM2I3NWRiMjliYjE0YWI0N2NmOGU4NDEwNGQ2CitQSzogIGIxZDM5ODAxODkyMDI3ZDU4YThjNjQzMzUxNjMxOTU4OTNiZmMxYjYxZGJlY2EzMjYwNDk3ZTFmMzAzNzExMDcKK01TRzogZDNkNjE1YTg0NzJkOTk2MmJiNzBjNWI1NDY2YTNkOTgzYTQ4MTEwNDZlMmEwZWY1CitTSUc6IDgzNmFmYTc2NGQ5YzQ4YWE0NzcwYTQzODhiNjU0ZTk3YjNjMTZmMDgyOTY3ZmViY2EyN2YyZmM0N2RkZmQ5MjQ0YjAzY2ZjNzI5Njk4YWNmNTEwOTcwNDM0NmI2MGIyMzBmMjU1NDMwMDg5ZGRjNTY5MTIzOTlkMTEyMmRlNzBhCisKK1RTVDogMjYKK1NLOiAgNmI4M2Q3ZGE4OTA4YzNlNzIwNWIzOTg2NGI1NmU1ZjNlMTcxOTZhM2ZjOWMyZjU4MDVhYWQwZjU1NTRjMTQyZAorUEs6ICBkMGM4NDZmOTdmZTI4NTg1YzBlZTE1OTAxNWQ2NGM1NjMxMWM4ODZlZGRjYzE4NWQyOTZkYmIxNjVkMjYyNWQ2CitNU0c6IDZhZGE4MGI2ZmE4NGY3MDM0OTIwNzg5ZTg1MzZiODJkNWU0Njc4MDU5YWVkMjdmNzFjCitTSUc6IDE2ZTQ2MmEyOWE2ZGQ0OTg2ODVhMzcxOGIzZWVkMDBjYzE1OTg2MDFlZTQ3ODIwNDg2MDMyZDZiOWFjYzliZjg5ZjU3Njg0ZTA4ZDhjMGYwNTU4OWNkYTI4ODJhMDVkYzRjNjNmOWQwNDMxZDY1NTI3MTA4MTI0MzMwMDNiYzA4CisKK1RTVDogMjcKK1NLOiAgMTlhOTFmZTIzYTRlOWUzM2VjYzQ3NDg3OGY1N2M2NGNmMTU0YjM5NDIwMzQ4N2E3MDM1ZTFhZDljZDY5N2IwZAorUEs6ICAyYmYzMmJhMTQyYmE0NjIyZDhmM2UyOWVjZDg1ZWVhMDdiOWM0N2JlOWQ2NDQxMmM5YjUxMGIyN2RkMjE4YjIzCitNU0c6IDgyY2I1M2M0ZDVhMDEzYmFlNTA3MDc1OWVjMDZjM2M2OTU1YWI3YTQwNTA5NThlYzMyOGMKK1NJRzogODgxZjViOGM1YTAzMGRmMGY3NWI2NjM0YjA3MGRkMjdiZDFlZTNjMDg3MzhhZTM0OTMzOGIzZWU2NDY5YmJmOTc2MGIxMzU3OGEyMzdkNTE4MjUzNWVkZTEyMTI4MzAyN2E5MGI1Zjg2NWQ2M2E2NTM3ZGNhMDdiNDQwNDlhMGYKKworVFNUOiAyOAorU0s6ICAxZDViOGNiNjIxNWMxODE0MTY2NmJhZWVmY2Y1ZDY5ZGFkNWJlYTlhMzQ5M2RkZGFhMzU3YTQzOTdhMTNkNGRlCitQSzogIDk0ZDIzZDk3N2MzM2U0OWU1ZTQ5OTJjNjhmMjVlYzk5YTI3YzQxY2U2YjkxZjJiZmEwY2Q4MjkyZmU5NjI4MzUKK01TRzogYTlhOGNiYjBhZDU4NTEyNGU1MjJhYmJmYjQwNTMzYmRkNmY0OTM0N2I1NWIxOGU4NTU4Y2IwCitTSUc6IDNhY2QzOWJlYzhjM2NkMmI0NDI5OTcyMmI1ODUwYTA0MDBjMTQ0MzU5MGZkNDg2MWQ1OWFhZTc0OTZhY2IzZGY3M2ZjM2ZkZjc5NjlhZTVmNTBiYTQ3ZGRkYzQzNTI0NmU1ZmQzNzZmNmI4OTFjZDRjMmNhZjVkNjE0YjYxNzBjCisKK1RTVDogMjkKK1NLOiAgNmE5MWIzMjI3YzQ3MjI5OTA4OWJkY2U5MzU2ZTcyNmE0MGVmZDg0MGYxMTAwMjcwOGI3ZWU1NWI2NDEwNWFjMgorUEs6ICA5ZDA4NGFhOGI5N2E2YjliYWZhNDk2ZGJjNmY3NmYzMzA2YTExNmM5ZDkxN2U2ODE1MjBhMGY5MTQzNjk0MjdlCitNU0c6IDVjYjZmOWFhNTliODBlY2ExNGY2YTY4ZmI0MGNmMDdiNzk0ZTc1MTcxZmJhOTYyNjJjMWM2YWRjCitTSUc6IGY1ODc1NDIzNzgxYjY2MjE2Y2I1ZTg5OThkZTVkOWZmYzI5ZDFkNjcxMDcwNTRhY2UzMzc0NTAzYTljM2VmODExNTc3ZjI2OWRlODEyOTY3NDRiZDcwNmYxYWM0NzhjYWYwOWI1NGNkZjg3MWIzZjgwMmJkNTdmOWE2Y2I5MTAxCisKK1RTVDogMzAKK1NLOiAgOTNlYWE4NTRkNzkxZjA1MzcyY2U3MmI5NGZjNjUwM2IyZmY4YWU2ODE5ZTZhMjFhZmU4MjVlMjdhZGE5ZTRmYgorUEs6ICAxNmNlZThhM2YyNjMxODM0Yzg4YjY3MDg5N2ZmMGIwOGNlOTBjYzE0N2I0NTkzYjNmMWY0MDM3MjdmN2U3YWQ1CitNU0c6IDMyZmUyNzk5NDEyNDIwMjE1M2I1YzcwZDM4MTNmZGVlOWMyYWE2ZTdkYzc0M2Q0ZDUzNWYxODQwYTUKK1NJRzogZDgzNDE5N2MxYTMwODA2MTRlMGE1ZmEwYWFhYTgwODgyNGYyMWMzOGQ2OTJlNmZmYmQyMDBmN2RmYjNjOGY0NDQwMmE3MzgyMTgwYjk4YWQwYWZjOGVlYzFhMDJhY2VjZjNjYjdmZGU2MjdiOWYxODExMWYyNjBhYjFkYjlhMDcKKworVFNUOiAzMQorU0s6ICA5NDFjYWM2OWZiN2IxODE1YzU3YmI5ODdjNGQ2YzJhZDJjMzVkNWY5YTMxODJhNzlkNGJhMTNlYWIyNTNhOGFkCitQSzogIDIzYmUzMjNjNTYyZGZkNzFjZTY1ZjViYmE1NmE3NGEzYTZkZmMzNmI1NzNkMmY5NGY2MzVjN2Y5YjRmZDVhNWIKK01TRzogYmIzMTcyNzk1NzEwZmUwMDA1NGQzYjVkZmVmOGExMTYyMzU4MmRhNjhiZjhlNDZkNzJkMjdjZWNlMmFhCitTSUc6IDBmOGZhZDFlNmJkZTc3MWI0ZjU0MjBlYWM3NWMzNzhiYWU2ZGI1YWM2NjUwY2QyYmMyMTBjMTgyM2I0MzJiNDhlMDE2YjEwNTk1NDU4ZmZhYjkyZjdhODk4OWIyOTNjZWI4ZGZlZDZjMjQzYTIwMzhmYzA2NjUyYWFhZjE2ZjAyCisKK1RTVDogMzIKK1NLOiAgMWFjZGJiNzkzYjAzODQ5MzQ2Mjc0NzBkNzk1YzNkMWRkNGQ3OWNlYTU5ZWY5ODNmMjk1YjliNTkxNzljYmIyOAorUEs6ICAzZjYwYzc1NDFhZmE3NmMwMTljZjVhYTgyZGNkYjA4OGVkOWU0ZWQ5NzgwNTE0YWVmYjM3OWRhYmM4NDRmMzFhCitNU0c6IDdjZjM0Zjc1YzNkYWM5YTgwNGQwZmNkMDllYmE5YjI5Yzk0ODRlOGEwMThmYTllMDczMDQyZGY4OGUzYzU2CitTSUc6IGJlNzFlZjQ4MDZjYjA0MWQ4ODVlZmZkOWU2YjBmYmI3M2Q2NWQ3Y2RlYzQ3YTg5YzhhOTk0ODkyZjRlNTVhNTY4YzRjYzc4ZDYxZjkwMWU4MGRiYjYyOGI4NmEyM2NjZDU5NGU3MTJiNTdmYTk0YzJkNjdlYzI2NjM0ODc4NTA3CisKK1RTVDogMzMKK1NLOiAgOGVkN2E3OTdiOWNlYThhODM3MGQ0MTkxMzZiY2RmNjgzYjc1OWQyZTNjNjk0N2YxN2UxM2UyNDg1YWE5ZDQyMAorUEs6ICBiNDlmM2E3OGIxYzZhN2ZjYThmMzQ2NmYzM2JjMGU5MjlmMDFmYmEwNDMwNmMyYTc0NjVmNDZjMzc1OTMxNmQ5CitNU0c6IGE3NTBjMjMyOTMzZGMxNGIxMTg0ZDg2ZDhiNGNlNzJlMTZkNjk3NDRiYTY5ODE4YjZhYzMzYjFkODIzYmIyYzMKK1NJRzogMDQyNjZjMDMzYjkxYzEzMjJjZWIzNDQ2YzkwMWZmY2YzY2M0MGM0MDM0ZTg4N2M5NTk3Y2ExODkzYmE3MzMwYmVjYmJkOGI0ODE0MmVmMzVjMDEyYzZiYTUxYTY2ZGY5MzA4Y2I2MjY4YWQ2YjFlNGIwM2U3MDEwMjQ5NTc5MGIKKworVFNUOiAzNAorU0s6ICBmMmFiMzk2ZmU4OTA2ZTNlNTYzM2U5OWNhYmNkNWIwOWRmMDg1OWI1MTYyMzBiMWUwNDUwYjU4MGI2NWY2MTZjCitQSzogIDhlYTA3NDI0NTE1OWExMTZhYTcxMjJhMjVlYzE2Yjg5MWQ2MjVhNjhmMzM2NjA0MjM5MDhmNmJkYzQ0ZjhjMWIKK01TRzogNWE0NGUzNGI3NDZjNWZkMTg5OGQ1NTJhYjM1NGQyOGZiNDcxMzg1NmQ3Njk3ZGQ2M2ViOWJkNmI5OWMyODBlMTg3CitTSUc6IGEwNmEyM2Q5ODJkODFhYjg4M2FhZTIzMGFkYmMzNjhhNmE5OTc3ZjAwM2NlYmIwMGQ0YzJlNDAxODQ5MDE5MWE4NGQzYTI4MmZkYmZiMmZjODgwNDZlNjJkZTQzZTE1ZmI1NzUzMzZiM2M4Yjc3ZDE5Y2U2YTAwOWNlNTFmNTBjCisKK1RTVDogMzUKK1NLOiAgNTUwYTQxYzAxM2Y3OWJhYjhmMDZlNDNhZDE4MzZkNTEzMTI3MzZhOTcxMzgwNmZhZmU2NjQ1MjE5ZWFhMWY5ZAorUEs6ICBhZjZiNzE0NTQ3NGRjOTk1NGI5YWY5M2E5Y2RiMzQ0NDlkNWI3YzY1MWM4MjRkMjRlMjMwYjkwMDMzY2U1OWMwCitNU0c6IDhiYzQxODVlNTBlNTdkNWY4N2Y0NzUxNWZlMmIxODM3ZDU4NWYwYWFlOWUxY2EzODNiM2VjOTA4ODg0YmI5MDBmZjI3CitTSUc6IDE2ZGMxZTJiOWZhOTA5ZWVmZGMyNzdiYTE2ZWJlMjA3YjhkYTVlOTExNDNjZGU3OGM1MDQ3YTg5ZjY4MWMzM2M0ZTRlMzQyOGQ1YzkyODA5NTkwM2E4MTFlYzAwMmQ1MmEzOWVkN2Y4YjNmZTE5MjcyMDBjNmRkMGI5YWIzZTA0CisKK1RTVDogMzYKK1NLOiAgMTlhYzNlMjcyNDM4YzcyZGRmN2I4ODE5NjQ4NjdjYjNiMzFmZjRjNzkzYmI3ZWExNTQ2MTNjMWRiMDY4Y2I3ZQorUEs6ICBmODViODBlMDUwYTFiOTYyMGRiMTM4YmZjOWUxMDAzMjdlMjVjMjU3YzU5MjE3YjYwMWYxZjZhYzlhNDEzZDNmCitNU0c6IDk1ODcyZDVmNzg5Zjk1NDg0ZTMwY2JiMGUxMTQwMjg5NTNiMTZmNWM2YThkOWY2NWMwMDNhODM1NDNiZWFhNDZiMzg2NDUKK1NJRzogZWE4NTVkNzgxY2JlYTQ2ODJlMzUwMTczY2I4OWU4NjE5Y2NmZGRiOTdjZGNlMTZmOWEyZjZmNjg5MmY0NmRiZTY4ZTA0YjEyYjhkODg2ODlhN2EzMTY3MGNkZmY0MDlhZjk4YTkzYjQ5YTM0NTM3YjZhYTAwOWQyZWI4YjQ3MDEKKworVFNUOiAzNworU0s6ICBjYTI2N2RlOTZjOTNjMjM4ZmFmYjEyNzk4MTIwNTlhYjkzYWMwMzA1OTY1N2ZkOTk0ZjhmYTVhMDkyMzljODIxCitQSzogIDAxNzM3MGM4NzkwOTBhODFjN2YyNzJjMmZjODBlM2FhYzJiYzYwM2ZjYjM3OWFmYzk4NjkxMTYwYWI3NDViMjYKK01TRzogZTA1ZjcxZTRlNDlhNzJlYzU1MGM0NGEzYjg1YWNhOGYyMGZmMjZjM2VlOTRhODBmMWI0MzFjN2QxNTRlYzk2MDNlZTAyNTMxCitTSUc6IGFjOTU3ZjgyMzM1YWE3MTQxZTk2YjU5ZDYzZTNjY2VlOTVjM2EyYzQ3ZDAyNjU0MGMyYWY0MmRjOTUzM2Q1ZmQ4MTgyN2QxNjc5YWQxODdhZWFmMzc4MzQ5MTVlNzViMTQ3YTkyODY4MDZjODAxNzUxNmJhNDNkZDA1MWE1ZTBjCisKK1RTVDogMzgKK1NLOiAgM2RmZjVlODk5NDc1ZTdlOTFkZDI2MTMyMmZhYjA5OTgwYzUyOTcwZGUxZGE2ZTJlMjAxNjYwY2M0ZmNlNzAzMgorUEs6ICBmMzAxNjJiYWM5ODQ0N2M0MDQyZmFjMDVkYTQ0ODAzNDYyOWJlMmM2YTU4ZDMwZGZkNTc4YmE5ZmI1ZTM5MzBiCitNU0c6IDkzOGYwZTc3NjIxYmYzZWE1MmM3YzQ5MTFjNTE1N2MyZDhhMmE4NTgwOTNlZjE2YWE5YjEwN2U2OWQ5ODAzN2JhMTM5YTNjMzgyCitTSUc6IDVlZmU3YTkyZmY5NjIzMDg5YjNlM2I3OGYzNTIxMTUzNjZlMjZiYTNmYjFhNDE2MjA5YmMwMjllOWNhZGNjZDlmNGFmZmEzMzM1NTVhOGYzYTM1YTlkMGY3YzM0YjI5MmNhZTc3ZWM5NmZhM2FkZmNhYWRlZTJkOWNlZDhmODA1CisKK1RTVDogMzkKK1NLOiAgOWE2Yjg0Nzg2NGU3MGNmZThiYTZhYjIyZmEwY2EzMDhjMGNjOGJlYzcxNDFmYmNhYTNiODFmNWQxZTFjZmNmYworUEs6ICAzNGFkMGZiZGIyNTY2NTA3YTgxYzJiMWY4YWE4ZjUzZGNjYWE2NGNjODdhZGE5MWI5MDNlOTAwZDA3ZWVlOTMwCitNU0c6IDgzODM2NzQ3MTE4M2M3MWY3ZTcxNzcyNGY4OWQ0MDFjM2FkOTg2M2ZkOWNjN2FhM2NmMzNkM2M1Mjk4NjBjYjU4MWYzMDkzZDg3ZGEKK1NJRzogMmFiMjU1MTY5YzQ4OWM1NGM3MzIyMzJlMzdjODczNDlkNDg2YjFlYmEyMDUwOWRiYWJlN2ZlZDMyOWVmMDhmZDc1YmExY2QxNDVlNjdiMmVhMjZjYjVjYzUxY2FiMzQzZWViMDg1ZmUxZmQ3YjBlYzRjNmFmY2Q5Yjk3OWY5MDUKKworVFNUOiA0MAorU0s6ICA1NzViZTA3YWZjYTVkMDYzYzIzOGNkOWI4MDI4NzcyY2M0OWNkYTM0NDcxNDMyYTJlMTY2ZTA5NmUyMjE5ZWZjCitQSzogIDk0ZTVlYjRkNTAyNGY0OWQ3ZWJmNzk4MTdjOGRlMTE0OTdkYzJiNTU2MjJhNTFhZTEyM2ZmYzc0OWRiYjE2ZTAKK01TRzogMzNlNTkxOGI2NmQzM2Q1NWZlNzE3Y2EzNDM4M2VhZTc4ZjBhZjgyODg5Y2FmNjY5NmUxYWM5ZDk1ZDFmZmIzMmNiYTc1NWY5ZTM1MDNlCitTSUc6IDU4MjcxZDQ0MjM2ZjNiOThjNThmZDdhZTBkMmY0OWVmMmI2ZTNhZmZkYjIyNWFhM2JhNTU1ZjBlMTFjYzUzYzIzYWQxOWJhZjI0MzQ2NTkwZDA1ZDdkNTM5MDU4MjA4MmNmOTRkMzljYWQ2NTMwYWI5M2QxM2VmYjM5Mjc5NTA2CisKK1RTVDogNDEKK1NLOiAgMTVmZmI0NTUxNGQ0MzQ0NGQ2MWZjYjEwNWUzMGUxMzVmZDI2ODUyM2RkYTIwYjgyNzU4YjE3OTQyMzExMDQ0MQorUEs6ICAxNzcyYzVhYmMyZDIzZmQyZjlkMWMzMjU3YmU3YmMzYzFjZDc5Y2VlNDA4NDRiNzQ5YjNhNzc0M2QyZjk2NGI4CitNU0c6IGRhOWM1NTU5ZDBlYTUxZDI1NWI2YmQ5ZDc2MzhiODc2NDcyZjk0MmIzMzBmYzBlMmIzMGFlYTY4ZDc3MzY4ZmNlNDk0ODI3Mjk5MWQyNTdlCitTSUc6IDY4MjhjZDc2MjRlNzkzYjhhNGNlYjk2ZDNjMmE5NzViZjc3M2U1ZmY2NjQ1ZjM1MzYxNDA1ODYyMWU1ODgzNTI4OWU3ZjMxZjQyZGZlNmFmNmQ3MzZmMjY0NDUxMWUzMjBjMGZhNjk4NTgyYTc5Nzc4ZDE4NzMwZWQzZThjYjA4CisKK1RTVDogNDIKK1NLOiAgZmUwNTY4NjQyOTQzYjJlMWFmYmZkMWYxMGZlOGRmODdhNDIzNmJlYTQwZGNlNzQyMDcyY2IyMTg4NmVlYzFmYQorUEs6ICAyOTllYmQxZjEzMTc3ZGJkYjY2YTkxMmJiZjcxMjAzOGZkZjczYjA2YzNhYzAyMGM3YjE5MTI2NzU1ZDQ3ZjYxCitNU0c6IGM1OWQwODYyZWMxYzk3NDZhYmNjM2NmODNjOWVlYmEyYzcwODJhMDM2YThjYjU3Y2U0ODdlNzYzNDkyNzk2ZDQ3ZTZlMDYzYTBjMWZlY2NjMmQKK1NJRzogZDU5ZTZkZmNjNmQ3ZTNlMmM1OGRlYzgxZTk4NWQyNDVlNjgxYWNmNjU5NGEyM2M1OTIxNGY3YmVkODAxNWQ4MTNjNzY4MmI2MGIzNTgzNDQwMzExZTcyYTg2NjViYTJjOTZkZWMyM2NlODI2ZTE2MDEyN2UxODEzMmIwMzA0MDQKKworVFNUOiA0MworU0s6ICA1ZWNiMTZjMmRmMjdjOGNmNThlNDM2YTlkM2FmZmJkNThlOTUzOGE5MjY1OWEwZjk3YzRjNGY5OTQ2MzVhOGNhCitQSzogIGRhNzY4YjIwYzQzN2RkM2FhNWY4NGJiNmEwNzdmZmEzNGFiNjg1MDFjNTM1MmI1Y2MzZmRjZTdmZTZjMjM5OGQKK01TRzogNTZmMTMyOWQ5YTZiZTI1YTYxNTljNzJmMTI2ODhkYzgzMTRlODVkZDllN2U0ZGMwNWJiZWNiNzcyOWUwMjNjODZmOGUwOTM3MzUzZjI3YzdlZGU5CitTSUc6IDFjNzIzYTIwYzY3NzI0MjZhNjcwZTRkNWM0YTk3YzZlYmU5MTQ3ZjcxYmIwYTQxNTYzMWU0NDQwNmUyOTAzMjJlNGNhOTc3ZDM0OGZlNzg1NmE4ZWRjMjM1ZDBmZTk1ZjdlZDkxYWVmZGRmMjhhNzdlMmM3ZGJmZDhmNTUyZjBhCisKK1RTVDogNDQKK1NLOiAgZDU5OWQ2MzdiM2MzMGE4MmE5OTg0ZTJmNzU4NDk3ZDE0NGRlNmYwNmI5ZmJhMDRkZDQwZmQ5NDkwMzlkN2M4NAorUEs6ICA2NzkxZDhjZTUwYTQ0Njg5ZmMxNzg3MjdjNWMzYTFjOTU5ZmJlZWQ3NGVmN2Q4ZTdiZDNjMWFiNGRhMzFjNTFmCitNU0c6IGE3YzA0ZThiYTc1ZDBhMDNkOGIxNjZhZDdhMWQ3N2UxYjkxYzdhYWY3YmVmZGQ5OTMxMWZjM2M1NGE2ODRkZGQ5NzFkNWIzMjExYzNlZWFmZjFlNTRlCitTSUc6IGViZjEwZDlhYzdjOTYxMDgxNDBlN2RlZjZmZTk1MzNkNzI3NjQ2ZmY1YjNhZjI3M2MxZGY5NTc2MmE2NmYzMmI2NWEwOTYzNGQwMTNmNTRiNWRkNjAxMWY5MWJjMzM2Y2E4YjM1NWNlMzNmOGNmYmVjMjUzNWE0YzQyN2Y4MjA1CisKK1RTVDogNDUKK1NLOiAgMzBhYjgyMzJmYTcwMThmMGNlNmMzOWJkOGY3ODJmZTJlMTU5NzU4YmIwZjJmNDM4NmM3ZjI4Y2ZkMmM4NTg5OAorUEs6ICBlY2ZiNmEyYmQ0MmYzMWI2MTI1MGJhNWRlN2U0NmI0NzE5YWZkZmJjNjYwZGI3MWE3YmQxZGY3YjBhM2FiZTM3CitNU0c6IDYzYjgwYjc5NTZhY2JlY2YwYzM1ZTlhYjA2YjkxNGIwYzcwMTRmZTFhNGJiYzAyMTcyNDBjMWEzMzA5NWQ3MDc5NTNlZDc3YjE1ZDIxMWFkYWY5Yjk3ZGMKK1NJRzogOWFmODg1MzQ0Y2M3MjM5NDk4ZjcxMmRmODBiYzAxYjgwNjM4MjkxZWQ0YTFkMjhiYWE1NTQ1MDE3YTcyZTJmNjU2NDljY2Y5NjAzZGE2ZWI1YmZhYjlmNTU0M2E2Y2E0YTdhZjM4NjYxNTNjNzZiZjY2YmY5NWRlZjYxNWIwMGMKKworVFNUOiA0NgorU0s6ICAwZGRjZGM4NzJjN2I3NDhkNDBlZmU5NmMyODgxYWUxODlkODdmNTYxNDhlZDhhZjNlYmJiYzgwMzI0ZTM4YmRkCitQSzogIDU4OGRkYWRjYmNlZGY0MGRmMGU5Njk3ZDhiYjI3N2M3YmIxNDk4ZmExZDI2Y2UwYTgzNWE3NjBiOTJjYTdjODUKK01TRzogNjU2NDFjZDQwMmFkZDhiZjNkMWQ2N2RiZWI2ZDQxZGViZmJlZjY3ZTQzMTdjMzViMGE2ZDViYmJhZTBlMDM0ZGU3ZDY3MGJhMTQxM2QwNTZmMmQ2ZjFkZTEyCitTSUc6IGMxNzljMDk0NTZlMjM1ZmUyNDEwNWFmYTZlOGVjMDQ2MzdmOGY5NDM4MTdjZDA5OGJhOTUzODdmOTY1M2IyYWRkMTgxYTMxNDQ3ZDkyZDFhMWRkZjFjZWIwZGI2MjExOGRlOWRmZmI3ZGNkMjQyNDA1N2NiZGZmNWQ0MWQwNDAzCisKK1RTVDogNDcKK1NLOiAgODlmMGQ2ODI5OWJhMGE1YTgzZjI0OGFlMGMxNjlmOGUzODQ5YTliNDdiZDQ1NDk4ODQzMDVjOTkxMmI0NjYwMworUEs6ICBhYmEzZTc5NWFhYjIwMTJhY2NlYWRkN2IzYmQ5ZGFlZWVkNmZmNTI1OGJkY2Q3YzkzNjk5YzJhMzgzNmUzODMyCitNU0c6IDRmMTg0NmRkN2FkNTBlNTQ1ZDRjZmJmZmJiMWRjMmZmMTQ1ZGMxMjM3NTRkMDhhZjRlNDRlY2MwYmM4YzkxNDExMzg4YmM3NjUzZTJkODkzZDFlYWMyMTA3ZDA1CitTSUc6IDJjNjkxZmE4ZDQ4N2NlMjBkNWQyZmE0MTU1OTExNmUwYmJmNDM5N2NmNTI0MGUxNTI1NTYxODM1NDFkNjZjZjc1MzU4MjQwMWE0Mzg4ZDM5MDMzOWRiZWY0ZDM4NDc0M2NhYTM0NmY1NWY4ZGFiYTY4YmE3YjkxMzFhOGE2ZTBiCisKK1RTVDogNDgKK1NLOiAgMGEzYzE4NDRlMmRiMDcwZmIyNGUzYzk1Y2IxY2M2NzE0ZWY4NGUyY2NkMmI5ZGQyZjE0NjBlYmY3ZWNmMTNiMQorUEs6ICA3MmU0MDk5MzdlMDYxMGViNWMyMGIzMjZkYzZlYTFiYmJjMDQwNjcwMWM1Y2Q2N2QxZmJkZTA5MTkyYjA3YzAxCitNU0c6IDRjODI3NGQwZWQxZjc0ZTJjODZjMDhkOTU1YmRlNTViMmQ1NDMyN2U4MjA2MmExZjcxZjcwZDUzNmZkYzg3MjJjZGVhZDdkMjJhYWVhZDJiZmFhMWFkMDBiODI5NTcKK1NJRzogODdmN2ZkZjQ2MDk1MjAxZTg3N2E1ODhmZTNlNWFhZjQ3NmJkNjMxMzhkOGE4NzhiODlkNmFjNjA2MzFiMzQ1OGI5ZDQxYTNjNjFhNTg4ZTFkYjhkMjlhNTk2ODk4MWIwMTg3NzZjNTg4NzgwOTIyZjVhYTczMmJhNjM3OWRkMDUKKworVFNUOiA0OQorU0s6ICBjOGQ3YTg4MThiOThkZmRiMjA4MzljODcxY2I1YzQ4ZTllOTQ3MGNhM2FkMzViYTI2MTNhNWQzMTk5YzhhYjIzCitQSzogIDkwZDJlZmJiYTRkNDNlNmIyYjk5MmNhMTYwODNkYmNmYTJiMzIyMzgzOTA3YjBlZTc1ZjNlOTU4NDVkM2M0N2YKK01TRzogNzgzZTMzYzNhY2JkYmIzNmU4MTlmNTQ0YTc3ODFkODNmYzI4M2QzMzA5ZjVkM2QxMmM4ZGNkNmIwYjNkMGU4OWUzOGNmZDNiNGQwODg1NjYxY2E1NDdmYjk3NjRhYmZmCitTSUc6IGZhMmU5OTQ0MjFhZWYxZDU4NTY2NzQ4MTNkMDVjYmQyY2Y4NGVmNWViNDI0YWY2ZWNkMGRjNmZkYmRjMmZlNjA1ZmU5ODU4ODMzMTJlY2YzNGY1OWJmYjJmMWM5MTQ5ZTViOWNjOWVjZGEwNWIyNzMxMTMwZjNlZDI4ZGRhZTBiCisKK1RTVDogNTAKK1NLOiAgYjQ4MjcwMzYxMmQwYzU4NmY3NmNmY2IyMWNmZDIxMDNjOTU3MjUxNTA0YThjMGFjNGM4NmM5YzZmM2U0MjlmZgorUEs6ICBmZDcxMWRjN2RkM2IxZGZiOWRmOTcwNGJlM2U2YjI2ZjU4N2ZlN2RkN2JhNDU2YTkxYmE0M2ZlNTFhZWMwOWFkCitNU0c6IDI5ZDc3YWNmZDk5YzdhMDA3MGE4OGZlYjYyNDdhMmJjZTk5ODRmZTNlNmZiZjE5ZDQwNDUwNDJhMjFhYjI2Y2JkNzcxZTE4NGE5YTc1ZjMxNmI2NDhjNjkyMGRiOTJiODdiCitTSUc6IDU4ODMyYmRlYjI2ZmVhZmMzMWI0NjI3N2NmM2ZiNWQ3YTE3ZGZiN2NjZDliMWY1OGVjYmU2ZmViOTc5NjY2ODI4ZjIzOWJhNGQ3NTIxOTI2MGVjYWMwYWNmNDBmMGU1ZTI1OTBmNGNhYTE2YmJiY2Q4YTE1NWQzNDc5NjdhNjA3CisKK1RTVDogNTEKK1NLOiAgODRlNTBkZDlhMGYxOTdlMzg5M2MzOGRiZDkxZmFmYzM0NGMxNzc2ZDNhNDAwZTJmMGYwZWU3YWE4MjllYjhhMgorUEs6ICAyYzUwZjg3MGVlNDhiMzZiMGFjMmY4YTVmMzM2ZmIwOTBiMTEzMDUwZGJjYzI1ZTA3ODIwMGE2ZTE2MTUzZWVhCitNU0c6IGYzOTkyY2RlNjQ5M2U2NzFmMWUxMjlkZGNhODAzOGIwYWJkYjc3YmI5MDM1ZjlmOGJlNTRiZDVkNjhjMWFlZmY3MjRmZjQ3ZDI5MzQ0MzkxZGM1MzYxNjZiODY3MWNiYmYxMjMKK1NJRzogNjllNmE0NDkxYTYzODM3MzE2ZTg2YTVmNGJhN2NkMGQ3MzFlY2M1OGYxZDBhMjY0YzY3Yzg5YmVmZGQ4ZDM4MjlkOGRlMTNiMzNjYzBiZjUxMzkzMTcxNWM3ODA5NjU3ZTJiZmI5NjBlNWM3NjRjOTcxZDczMzc0NjA5M2U1MDAKKworVFNUOiA1MgorU0s6ICBiMzIyZDQ2NTc3YTJhOTkxYTRkMTY5ODI4NzgzMmEzOWM0ODdlZjc3NmI0YmZmMDM3YTA1YzdmMTgxMmJkZWVjCitQSzogIGViMmJjYWRmZDNlZWMyOTg2YmFmZjMyYjk4ZTdjNGRiZjAzZmY5NWQ4YWQ1ZmY5YWE5NTA2ZTU0NzJmZjg0NWYKK01TRzogMTlmMWJmNWRjZjE3NTBjNjExZjFjNGEyODY1MjAwNTA0ZDgyMjk4ZWRkNzI2NzFmNjJhN2IxNDcxYWMzZDRhMzBmN2RlOWU1ZGE0MTA4YzUyYTRjZTcwYTNlMTE0YTUyYTNiM2M1CitTSUc6IGM3YjU1MTM3MzE3Y2EyMWUzMzQ4OWZmNmE5YmZhYjk3Yzg1NWRjNmY4NTY4NGE3MGE5MTI1YTI2MWI1NmQ1ZTZmMTQ5YzU3NzRkNzM0ZjJkOGRlYmZjNzdiNzIxODk2YTgyNjdjMjM3NjhlOWJhZGI5MTBlZWY4M2VjMjU4ODAyCisKK1RTVDogNTMKK1NLOiAgOTYwY2FiNTAzNGI5ODM4ZDA5OGQyZGNiZjQzNjRiZWMxNmQzODhmNjM3NmQ3M2E2MjczYjcwZjgyYmJjOThjMAorUEs6ICA1ZTNjMTlmMjQxNWFjZjcyOWY4MjlhNGViZDVjNDBlMWE2YmM5ZmJjYTk1NzAzYTkzNzYwODdlZDA5MzdlNTFhCitNU0c6IGY4YjIxOTYyNDQ3YjBhOGYyZTQyNzlkZTQxMWJlYTEyOGUwYmU0NGI2OTE1ZTZjZGE4ODM0MWE2OGEwZDgxODM1N2RiOTM4ZWFjNzNlMGFmNmQzMTIwNmIzOTQ4ZjhjNDhhNDQ3MzA4CitTSUc6IDI3ZDRjM2ExODExZWY5ZDQzNjBiM2JkZDEzM2MyY2NjMzBkMDJjMmYyNDgyMTU3NzZjYjA3ZWU0MTc3ZjliMTNmYzQyZGQ3MGE2YzJmZWQ4ZjIyNWM3NjYzYzdmMTgyZTdlZThlY2NmZjIwZGM3YjBlMWQ1ODM0ZWM1YjFlYTAxCisKK1RTVDogNTQKK1NLOiAgZWI3N2IyNjM4ZjIzZWViYzgyZWZlNDVlZTllNWEwMzI2NjM3NDAxZTY2M2VkMDI5Njk5YjIxZTY0NDNmYjQ4ZQorUEs6ICA5ZWYyNzYwODk2MWFjNzExZGU3MWE2ZTJkNGQ0NjYzZWEzZWNkNDJmYjdlNGU4NjI3YzM5NjIyZGY0YWYwYmJjCitNU0c6IDk5ZTNkMDA5MzQwMDNlYmFmYzNlOWZkYjY4N2IwZjVmZjlkNTc4MmE0YjFmNTZiOTcwMDA0NmMwNzc5MTU2MDJjMzEzNGUyMmZjOTBlZDdlNjkwZmRkZDQ0MzNlMjAzNGRjYjJkYzk5YWIKK1NJRzogMThkYzU2ZDdiZDlhY2Q0ZjRkYWE3ODU0MGI0YWM4ZmY3YWE5ODE1ZjQ1YTBiYmEzNzA3MzFhMTRlYWFiZTk2ZGY4YjVmMzdkYmY4ZWFlNGNiMTVhNjRiMjQ0NjUxZTU5ZDZhM2Q2NzYxZDllM2M1MGYyZDBjYmIwOWMwNWVjMDYKKworVFNUOiA1NQorU0s6ICBiNjI1YWE4OWQzZjczMDg3MTU0MjdiNmMzOWJiYWM1OGVmZmQzYTBmYjczMTZmN2EyMmI5OWVlNTkyMmYyZGM5CitQSzogIDY1YTk5YzNlMTZmZWE4OTRlYzMzYzZiMjBkOTEwNWUyYTA0ZTI3NjRhNDc2OWQ5YmJkNGQ4YmFjZmVhYjRhMmUKK01TRzogZTA3MjQxZGJkM2FkYmU2MTBiYmU0ZDAwNWRkNDY3MzJhNGMyNTA4NmVjYjhlYzI5Y2Q3YmNhMTE2ZTFiZjlmNTNiZmJmM2UxMWZhNDkwMThkMzlmZjExNTRhMDY2NjhlZjdkZjVjNjc4ZTZhCitTSUc6IDAxYmI5MDFkODNiOGI2ODJkMzYxNGFmNDZhODA3YmEyNjkxMzU4ZmViNzc1MzI1ZDM0MjNmNTQ5ZmYwYWE1NzU3ZTRlMWE3NGU5YzcwZjk3MjFkOGYzNTRiMzE5ZDRmNGExZDkxNDQ1Yzg3MGZkMGZmYjk0ZmVkNjQ2NjQ3MzBkCisKK1RTVDogNTYKK1NLOiAgYjFjOWY4YmQwM2ZlODJlNzhmNWMwZmIwNjQ1MGYyN2RhY2RmNzE2NDM0ZGIyNjgyNzVkZjNlMWRjMTc3YWY0MgorUEs6ICA3ZmM4OGIxZjdiM2YxMWM2MjliZTY3MWMyMTYyMWY1YzEwNjcyZmFmYzg0OTJkYTg4NTc0MjA1OWVlNjc3NGNmCitNU0c6IDMzMWRhN2E5YzFmODdiMmFjOTFlZTNiODZkMDZjMjkxNjNjMDVlZDZmOGQ4YTk3MjViNDcxYjdkYjBkNmFjZWM3ZjBmNzAyNDg3MTYzZjVlZGEwMjBjYTViNDkzZjM5OWUxYzhkMzA4YzNjMGMyCitTSUc6IDRiMjI5OTUxZWYyNjJmMTY5NzhmNzkxNGJjNjcyZTcyMjZjNWY4Mzc5ZDI3NzhjNWEyZGMwYTI2NTA4NjlmN2FjZmJkMGJjZDMwZmRiMDYxOWJiNDRmYzFhZTU5MzliODdjYzMxODEzMzAwOWMyMDM5NWI2YzdlYjk4MTA3NzAxCisKK1RTVDogNTcKK1NLOiAgNmQ4Y2RiMmUwNzVmM2EyZjg2MTM3MjE0Y2IyMzZjZWI4OWE2NzI4YmI0YTIwMDgwNmJmMzU1N2ZiNzhmYWM2OQorUEs6ICA1N2EwNGM3YTUxMTNjZGRmZTQ5YTRjMTI0NjkxZDQ2YzFmOWNkYzhmMzQzZjlkY2I3MmExMzMwYWVjYTcxZmRhCitNU0c6IDdmMzE4ZGJkMTIxYzA4YmZkZGZlZmY0ZjZhZmY0ZTQ1NzkzMjUxZjhhYmY2NTg0MDMzNTgyMzg5ODQzNjAwNTRmMmE4NjJjNWJiODNlZDg5MDI1ZDIwMTRhN2EwY2VlNTBkYTNjYjBlNzZiYmI2YmYKK1NJRzogYTZjYmM5NDdmOWM4N2QxNDU1Y2YxYTcwODUyOGMwOTBmMTFlY2VlNDg1NWQxZGJhYWRmNDc0NTRhNGRlNTVmYTRjZTg0YjM2ZDczYTViNWY4ZjU5Mjk4Y2NmMjE5OTJkZjQ5MmVmMzQxNjNkODc3NTNiN2U5ZDMyZjJjMzY2MGIKKworVFNUOiA1OAorU0s6ICA0N2FkYzZkNmJmNTcxZWU5NTcwY2EwZjc1YjYwNGFjNDNlMzAzZTRhYjMzOWNhOWI1M2NhY2M1YmU0NWIyY2NiCitQSzogIGEzZjUyN2ExYzFmMTdkZmVlZDkyMjc3MzQ3YzlmOThhYjQ3NWRlMTc1NWIwYWI1NDZiOGExNWQwMWI5YmQwYmUKK01TRzogY2U0OTdjNWZmNWE3Nzk5MGI3ZDhmODY5OWViMWY1ZDhjMDU4MmY3MGNiN2FjNWM1NGQ5ZDkyNDkxMzI3OGJjNjU0ZDM3ZWEyMjc1OTBlMTUyMDIyMTdmYzk4ZGFjNGMwZjNiZTIxODNkMTMzMzE1NzM5CitTSUc6IDRlOGMzMTgzNDNjMzA2YWRiYmE2MGM5MmI3NWNiMDU2OWI5MjE5ZDhhODZlNWQ1Nzc1MmVkMjM1ZmMxMDlhNDNjMmNmNGU5NDJjYWNmMjk3Mjc5ZmJiMjg2NzUzNDdlMDgwMjc3MjJhNGViNzM5NWUwMGExNzQ5NWQzMmVkZjBiCisKK1RTVDogNTkKK1NLOiAgM2MxOWI1MGIwZmU0Nzk2MTcxOWMzODFkMGQ4ZGE5Yjk4NjlkMzEyZjEzZTMyOThiOTdmYjIyZjBhZjI5Y2JiZQorUEs6ICAwZjdlZGEwOTE0OTk2MjVlMmJhZTg1MzZlYTM1Y2RhNTQ4M2JkMTZhOWM3ZTQxNmIzNDFkNmYyYzgzMzQzNjEyCitNU0c6IDhkZGNkNjMwNDNmNTVlYzNiZmM4M2RjZWFlNjlkOGY4YjMyZjRjZGI2ZTJhZWJkOTRiNDMxNGY4ZmU3Mjg3ZGNiNjI3MzJjOTA1MmU3NTU3ZmU2MzUzNDMzOGVmYjViNjI1NGM1ZDQxZDI2OTBjZjUxNDRmCitTSUc6IGVmYmQ0MWYyNmE1ZDYyNjg1NTE2Zjg4MmI2ZWM3NGUwZDVhNzE4MzBkMjAzYzIzMTI0OGYyNmU5OWE5YzY1NzhlYzkwMGQ2OGNkYjhmYTcyMTZhZDBkMjRmOWVjYmM5ZmZhNjU1MzUxNjY2NTgyZjYyNjY0NTM5NWEzMWZhNzA0CisKK1RTVDogNjAKK1NLOiAgMzRlMWU5ZDUzOTEwN2ViODZiMzkzYTVjY2VhMTQ5NmQzNWJjN2Q1ZTlhOGM1MTU5ZDk1N2U0ZTU4NTJiM2ViMAorUEs6ICAwZWNiMjYwMWQ1ZjcwNDc0MjhlOWY5MDk4ODNhMTI0MjAwODVmMDRlZTJhODhiNmQ5NWQzZDdmMmM5MzJiZDc2CitNU0c6IGE2ZDRkMDU0MmNmZTBkMjQwYTkwNTA3ZGViYWNhYmNlN2NiYmQ0ODczMjM1M2Y0ZmFkODJjN2JiN2RiZDlkZjhlN2Q5YTE2OTgwYTQ1MTg2ZDg3ODZjNWVmNjU0NDViY2M1YjJhZDVmNjYwZmZjN2M4ZWFhYzAKK1NJRzogMzJkMjI5MDRkM2U3MDEyZDZmNWE0NDFiMGI0MjI4MDY0YTVjZjk1YjcyM2E2NmIwNDhhMDg3ZWNkNTU5MjBjMzFjMjA0YzNmMjAwNjg5MWE4NWRkMTkzMmUzZjFkNjE0Y2ZkNjMzYjVlNjMyOTFjNmQ4MTY2ZjMwMTE0MzFlMDkKKworVFNUOiA2MQorU0s6ICA0OWRkNDczZWRlNmFhM2M4NjY4MjRhNDBhZGE0OTk2YzIzOWEyMGQ4NGM5MzY1ZTRmMGE0NTU0ZjgwMzFiOWNmCitQSzogIDc4OGRlNTQwNTQ0ZDNmZWIwYzkxOTI0MGIzOTA3MjliZTQ4N2U5NGI2NGFkOTczZWI2NWI0NjY5ZWNmMjM1MDEKK01TRzogM2E1MzU5NGYzZmJhMDMwMjkzMThmNTEyYjA4NGEwNzFlYmQ2MGJhZWM3ZjU1YjAyOGRjNzNiZmM5Yzc0ZTBjYTQ5NmJmODE5ZGQ5MmFiNjFjZDhiNzRiZTNjMGQ2ZGNkMTI4ZWZjNWVkMzM0MmNiYTEyNGY3MjZjCitTSUc6IGQyZmRlMDI3OTFlNzIwODUyNTA3ZmFhN2MzNzg5MDQwZDllZjg2NjQ2MzIxZjMxM2FjNTU3ZjQwMDI0OTE1NDJkZDY3ZDA1YzY5OTBjZGIwZDQ5NTUwMWZiYzVkNTE4OGJmYmI4NGRjMWJmNjA5OGJlZTA2MDNhNDdmYzI2OTBmCisKK1RTVDogNjIKK1NLOiAgMzMxYzY0ZGE0ODJiNmI1NTEzNzNjMzY0ODFhMDJkODEzNmVjYWRiYjAxYWIxMTRiNDQ3MGJmNDE2MDdhYzU3MQorUEs6ICA1MmEwMGQ5NmEzMTQ4YjQ3MjY2OTJkOWVmZjg5MTYwZWE5Zjk5YTVjYzQzODlmMzYxZmVkMGJiMTZhNDJkNTIxCitNU0c6IDIwZTFkMDVhMGQ1YjMyY2M4MTUwYjgxMTZjZWYzOTY1OWRkNWZiNDQzYWIxNTYwMGY3OGU1YjQ5YzQ1MzI2ZDkzMjNmMjg1MGE2M2MzODA4ODU5NDk1YWUyNzNmNThhNTFlOWRlOWExNDVkNzc0YjQwYmE5ZDc1M2QzCitTSUc6IDIyYzk5YWE5NDZlYWQzOWFjNzk5NzU2MjgxMGMwMWMyMGI0NmJkNjEwNjQ1YmQyZDU2ZGNkY2JhYWNjNTQ1MmM3NGZiZjRiOGIxODEzYjBlOTRjMzBkODA4Y2U1NDk4ZTYxZDRmN2NjYmI0Y2M1ZjA0ZGZjNjE0MDgyNWE5NjAwCisKK1RTVDogNjMKK1NLOiAgNWMwYjk2ZjJhZjg3MTIxMjJjZjc0M2M4ZjhkYzc3YjZjZDU1NzBhN2RlMTMyOTdiYjNkZGUxODg2MjEzY2NlMgorUEs6ICAwNTEwZWFmNTdkNzMwMWIwZTFkNTI3MDM5YmY0YzZlMjkyMzAwYTNhNjFiNDc2NTQzNGYzMjAzYzEwMDM1MWIxCitNU0c6IDU0ZTBjYWE4ZTYzOTE5Y2E2MTRiMmJmZDMwOGNjZmU1MGM5ZWE4ODhlMWVlNDQ0NmQ2ODJjYjUwMzQ2MjdmOTdiMDUzOTJjMDRlODM1NTU2YzMxYzUyODE2YTQ4ZTRmYjE5NjY5MzIwNmI4YWZiNDQwODY2MmIzY2I1NzUKK1NJRzogMDZlNWQ4NDM2YWM3NzA1YjNhOTBmMTYzMWNkZDM4ZWMxYTNmYTQ5Nzc4YTliOWYyZmE1ZWJlYTRlN2Q1NjBhZGE3ZGQyNmZmNDJmYWZhOGJhNDIwMzIzNzQyNzYxYWNhNjkwNDk0MGRjMjFiYmVmNjNmZjcyZGFhYjQ1ZDQzMGIKKworVFNUOiA2NAorU0s6ICBkZTg0ZjI0MzVmNzhkZWRiODdkYTE4MTk0ZmY2YTMzNmYwODExMTE1MGRlZjkwMWMxYWM0MTgxNDZlYjdiNTRhCitQSzogIGQzYTkyYmJhYTRkNjNhZjc5YzIyMjZhNzIzNmU2NDI3NDI4ZGY4YjM2MjQyN2Y4NzMwMjNiMjJkMmY1ZTAzZjIKK01TRzogMjA1MTM1ZWM3ZjQxN2M4NTgwNzJkNTIzM2ZiMzY0ODJkNDkwNmFiZDYwYTc0YTQ5OGMzNDdmZjI0OGRmYTI3MjJjYTc0ZTg3OWRlMzMxNjlmYWRjN2NkNDRkNmM5NGExN2QxNmUxZTYzMDgyNGJhM2UwZGYyMmVkNjhlYWFiCitTSUc6IDQ3MWViYzk3M2NmZGFjZWVjMDcyNzkzMDczNjhiNzNiZTM1YmM2ZjhkODMxMmI3MDE1MDU2NzM2OTA5NjcwNmRjNDcxMTI2YzM1NzZmOWYwZWI1NTBkZjVhYzZhNTI1MTgxMTEwMDI5ZGQxZmMxMTE3NGQxYWFjZWQ0OGQ2MzBmCisKK1RTVDogNjUKK1NLOiAgYmE0ZDZlNjdiMmNlNjdhMWU0NDMyNjQ5NDA0NGYzN2E0NDJmM2I4MTcyNWJjMWY5MzQxNDYyNzE4YjU1ZWUyMAorUEs6ICBmNzNmYTA3NmY4NGI2ZGI2NzVhNWZkYTVhZDY3ZTM1MWE0MWU4ZTdmMjlhZGQxNjgwOWNhMDEwMzg3ZTljNmNjCitNU0c6IDRiYWZkYWM5MDk5ZDQwNTdlZDZkZDA4YmNhZWU4NzU2ZTlhNDBmMmNiOTU5ODAyMGViOTUwMTk1Mjg0MDliYmVhMzhiMzg0YTU5ZjExOWY1NzI5N2JmYjJmYTE0MmZjN2JiMWQ5MGRiZGRkZTc3MmJjZGU0OGM1NjcwZDVmYTEzCitTSUc6IDU3YjlkMmE3MTEyMDdmODM3NDIxYmFlN2RkNDhlYWExOGVhYjFhOWE3MGEwZjEzMDU4MDZmZWUxN2I0NThmM2EwOTY0YjMwMmQxODM0ZDNlMGFjOWU4NDk2ZjAwMGI3N2YwMDgzYjQxZjhhOTU3ZTYzMmZiYzc4NDBlZWU2YTA2CisKK1RTVDogNjYKK1NLOiAgMGQxMzFjNDVhZWE2ZjNhNGUxYjlhMmNmNjBjNTUxMDQ1ODdlZmFhODQ2YjIyMmJmMGE3Yjc0Y2U3YTNmNjNiNgorUEs6ICAzYzY3MjlkYmU5M2I0OTljNGU2MTRhMmYyMWJlYjcyOTQzOGQ0OThlMWFjOGQxNGNiYWQ5NzE3YTVkYmQ5N2NkCitNU0c6IGI0MjkxZDA4Yjg4ZmIyZjdiOGY5OWQwZGNlNDAwNzlmY2JhYjcxOGJiZDhmNGU4ZWFiYzNjMTQyOGI2YTA3MWZiMmEzYzhlYmExY2FjY2NmYTg3MWIzNjVjNzA4YmVmMjY4NWJjMTNlNmI4MGJjMTRhNWYyNDkxNzBmZmM1NmQwMTQKK1NJRzogYTljNWVlODZmYjA2ZDllNDZiMzc5YzMyZGRhN2M5MmM5YzEzZGIyNzRkYzI0MTE2ZmJkZDg3ODY5NjA0NTQ4OGNjNzVhNTJmZmY2N2QxYTUxMTNkMDZlMzMzYWM2N2ZmNjY0YjNmMmE0MDVmYTFkMTRkZDViYmI5NzQwOWI2MDYKKworVFNUOiA2NworU0s6ICBhNzVlM2I2YjQxNzBlNDQ0NzgxYmU0ZWVhYzNlMGZkYWE0YjQzNTZmNzA1NDg2YmNiMDcxYTMyNWFlMDcxZmJhCitQSzogIDk5M2QzOGE3ZDcyZjBhZWUxNWZmNmY0ZmRjMzdjYTc3MjRmZDEzNzNhMzc2NmIyNzVkYmM3N2U2NDc5ODBlMGEKK01TRzogNDAzNzg2NmY2NTQ4YjAxY2M2YmNmM2E5NDBlMzk0NWFhMmQxODhiNGI3ZjE4MmFhNzdlYzRkNmIwNDI4YWI1Yjg0ZDg1ZGYxOTJhNWEzOGFkYTA4OWQ3NmZhMjZiZjY3NzM2YTcwNDFhNWViOGYwYzU3MTllYjM5NjY5M2M0NTE2MGY4CitTSUc6IGE1ZGI0ZDNkMzMyOWFiZTM2OTc5NTllNmI1OTQ3ZWE4NjAxYjAzZWY4ZTFkNmZlMjAyMTQ0OTMxMjcyY2EwYTA5YjVlYjBmMzkwNTcyZWE3ZWYwM2M2MTMxZTlkZTVmMTZiZjBiMDM0MjQ0ZjdlMTA0ZmY1MzExYmJmNjYzYTBkCisKK1RTVDogNjgKK1NLOiAgYmNiY2Y1NjFlY2MwNWE0MWM3ZDdlNTVlNjk2ZDMyY2UzOWI0ZDAzYzFmNWYzZjNhODkyN2ZlNWU2MmU4NDRiMgorUEs6ICA0ZGRmNTNmYWQ2YTdhOWVkMzBmM2FmZWNjYTEzNmZkNzg0M2I3MmMyNDMwOTA4OTFhZTQwMjFhMzJjYWRmZjFhCitNU0c6IDZmNjcxNmI2Nzg0NzQwOTgwYWViYzMyNDg4MDdlMzFjMTI4NmFjN2I2ODFjMDBiNjZjODhmZjdhMzM2ZDQ0MWZhNWMzZWIyNTZkMjBjZjZkMWFjOTJjY2ZlNGJlNmRjYzQxYjFhZmY4NDZkMzYwYzI0MzAwMWNhYmRmYmYxYTliMjQwNDU1CitTSUc6IDlmZjE1MTE1ZjY2NjFmMzIxMWQ3YTQwNzY0OTY3NjI5YmE2YTUyNjM5NTFiZGMzYzZhNGM5MGQwNzBmN2JlMDAwMjRiODBkODNiNmJjMjc1ODdmY2ZmNWY1Y2NjMGViM2NkZTE0OTdjZjU2ODk1MTQ3YTA2M2Y2MWYwOGFkZjBiCisKK1RTVDogNjkKK1NLOiAgMjEwNTMyODA1ZmE5Y2M5YmU5MTZkMjEzY2FjMzc0ZTNjZDZmYzI2MDJhNTQ0ZDBjMWNlMjlkMzAxMDVkNjlhYgorUEs6ICAxMDY5OWU0OTliZTk5ZTJiMTFiOThmNmY4NmI2N2NkYzRjY2Y2OWYzYzUzY2UwOTQ4NzU2NDdkMmQwZDBlY2M1CitNU0c6IDlmYzRkMjhjZmQyNWU2YzBjNWU3MjRlMTljYTM5ZDcxZTUzYmY0YWEyNzk2YzU0YzMzNTFmMTA4ZmM3MGYyNjExYTYyZTBhYjkwYWY2YWRlNTIxNjc4OGU5ZWIyYTg3MzA1OWIxZTc5ZDdkNTlkZWJkNjhmMmQ0ZDgwZmZlMzFiZjc0YjkyOGMKK1NJRzogNGMyZDMxZDViYmM0MmUwMjZkYzFlMDc5ZWNjNGRkMDcyYzVkMmNjZTY1ZTNkYjhkOGExZGQ5MDU3ZmFhMDM3MTcyN2Y3MjcyMzFhMGYwNjBmYTI3MDk3NTMzYjZkYjNiOGY2MjUyZjI3OTNkNzU2NjJjYWFkZjVmMGZjYzcxMGUKKworVFNUOiA3MAorU0s6ICAxODVkNjRiNjk0NzllMGJhMGE1ODQ0YTEwYWQ4NDEyNWJhMTFjNGI0MGQ2M2VkYTJjNTdhZmM3ZTAxOWM4ZTBjCitQSzogIGE1NzY0ZjYzOThhNWFlMjI2NmEzOGY5NzE0NTMzYzRiYmQ4ZDA3ODI2ZjYzZTIwNGNiYWMzNzRiMGFjZWYxYmQKK01TRzogNGEwODI0ZmU3MGQ0MzE1NDEzZDBhMGNhZmJmNGY1ZmUxMTdkNWUwN2UxYzNhNGVmZmI5ZDBhZTkxNDkwMjM0ODc4Y2NmNjc5MmE5MWY2OGM2YTUyMGRlMTYwNzFmMDhhYmUzNWRjNWVhNDI4ZjE5NTdiNjYzMzcxY2UyNGM2MDlkZDU1YjhmNDkzCitTSUc6IDQzZTAzODdkYTViYTA5YTE5MGY2ZTdiMjY4MDU3OGQ4ODk3NjliY2M0NDVlNWVmNTcxYjQ5Mjg3MWMxNTVjNWI5ZjYyMGJmYWNmYmYyZGYxZmQ4NzQ0NDYwNGI3MWIyZTIzN2JhYWE3ZWUyMDkzZWRlNGE2MDFlZGY4ODNlMzA3CisKK1RTVDogNzEKK1NLOiAgY2ZhOWQ5MTY0YjNjNGY2ZjcyMjYzNWQyMDY2Y2Q3ZWE1ZTU1MzNkMmM3NGY4YWRkNjY5YzM3MWZhYTQ3NjQyNgorUEs6ICA0MTE2OWE2NmY5YTYzZjI4NTc4MmE2YzJkYjgxY2MzZjcwYjNhZGEyMWE2OGM4NDc0NWM4OGE3NGMzYjBhMmRlCitNU0c6IDc1NzYyMWIxNjc1ZGI3Y2FjZWY3ZjI3ODI1ODdmZjNhZjUxYTNlZjJmNGJjZjkyNzljNGNlOTQwMDJlMWYwMDQyNGJmMGViNjIxOTgyY2M4NWNiNGQxNzFlNTY0YTBjMmY2ZTM1NjdhMWFhZTJjZGRiN2U5YjI1ZjQ3ZGMyMGE1MTA1MDU0Mjk2OWNhCitTSUc6IDAxZDdjOWI1NzAxYWY3MWUyZjQ4NzdmZmM5YjdiNTMwNWY1MjgxNmQ0NDU4ZTM3ZTQxYzc3MTlmYWMxZDc2YTAxZmZmM2Y1MGZlMWE1ODc1Y2NjM2ZiNzAwMDFjOTQ3YTMzZmM4YjIwN2RlMTM1NzJjY2RiOGJhOTg5MzNhYjAxCisKK1RTVDogNzIKK1NLOiAgMWFjYjRhMjU2YzJmODk5M2NhMjRkZTFlMDAxNDYwNmQ2NjhiNWU3NTYwMzJkMjY5ZjFkMjRkMzUxYzhlZWE0YQorUEs6ICBjYmJkY2Q4Y2JjODg1YWI0M2EwNTdlNWY5NTc5ZjExNjE5NTQxNTllN2I1NjJlYTI2Y2Q5YTQzYzg4ZDNmOTZkCitNU0c6IGM0NmE2ZDYxYWEwYWVkMWMxZDg1NDdhNzBiODliNzE5NjQ3NWQ1YTQ4NzA4ODFiMWVjZDBmMGNiOWM3NDVmOGEyYWRjODAyNGUyZGM1NWI1M2FhNWQzODNhODFhYWJjMWE0N2U4ZDA3ZDAwYjdmMGI1NmNlZGRiZmIxZjQyNGJiNWMwMjE4NDY3OGE2NjYKK1NJRzogMDVhYTc2ZjdmZTUxODkyMzAzZDc4OTE0NzE1OTk1ZTdkNzY4ZmY3NzE0Y2UyNzBmMTc1ZTU2YWYxN2FlMDE4ZDNmYTkzOWY1ZjYyMGRlODJiY2QxNTQ5Njg3YjIwNWM3ODcxMjAzZTYyNDIzOGM0ZTMwOWZhYjdmOTJmYmFhMDUKKworVFNUOiA3MworU0s6ICBhY2UzYzQ2NDI0ODIzNjIyOTc5ZmMzYTg0YTdkYTY5YzFkNTI3ZDgzMTJlOGZiMDE4Mzc1YmQzYTk2YzI5YzE4CitQSzogIDkzN2NmMzQxMzZkOWUxY2NlMGRlMTFiMTJjNzBjYmZiNzQ1NTQ0ODQyMWU5MmM4MmU3YzQwOTM0YmZmOGM2NzYKK01TRzogYTlmMTM3YmM5MDIxYmYxMDVhZWUyNWJlMjFjZDllZTViMzU0N2NmMTBjYzVmOTg0NzZmYjU4OGJkNzBlMmQ2ZDZiMDgzNGU4NDJlNGVlOTQzMDNjZjk2YjA5YzE3MTUzODFiMzZlMTRhNDkxYjgwZjg5NWVhNDIxYjhlYzJiMWQzYzE4N2UwMjkzNWM1NTI2CitTSUc6IGZlYjg4OTZkZDNmZTYwMDFmZmVhMTcxYjM3Yjc4OGE2OWY3Zjg1MDE5M2E2MzQwNmY1NjM3NmRkMjYzZDA5OWFlZjgwZWNlNjdlMmM0M2Y0MGVjYTQ2MmM2YjcxZTc5NDA2YjE4ZGI3NGFlNWQ0OTg0NGUzYjEzMmJjMmExMzA3CisKK1RTVDogNzQKK1NLOiAgODhmNjgxOTM0ZTMzYzM1YzA3ZGM2ZTVhODMyOTQyYWUzZDU5OTAzY2NkZTJmNzZjY2I3NTg3Y2VhN2VjNDFiNgorUEs6ICA2YTRlOGFhNWFkYjYzZDIyZmQ3YjE0YTI2ZmRiMDNiN2M4YWE2Y2NkNWExOTZmMmM1NGIwNDY1YWRiNTA5MmUxCitNU0c6IDZlOGJhYzFmODUzYjgxZmVmOTQ3MDdlMThjYzYxYzZmMGE5Y2JjMmE0MWQwNzhkY2M4M2ZjMDIyOWM3ZjhkYmU2ZGJkZDkwODU0YjFmMWFlMmI5ZjJiMTIwYjg2YTg3ODZiNGU3OGNlMjNhYjg2YmFhZjg4NzU0YWYwZjNkODg4ODFkYWUwYmM1MjYxYmZkMDM4CitTSUc6IDQ1YjI3YmYxYjllYWMwNmI2MmI2ODZmNmQ1NDY1NjNiMmRmZTViMTc1ZGJlZjMyYmY3OGMzNWExNmM5NThhOWQ0ZjI2ZDI5MWRlOWJiMjA2NmMwYTI4NjExM2NjMDkxNzJkNDBhMzZkNGNiZDk1MTcwODg2MDIyNmViMzBjZDA1CisKK1RTVDogNzUKK1NLOiAgNDgwNTBhNmUwMTU4ZjZhZDI1MzQxMmU0NDk3Y2ZmNjJkNWVlNTU1ZWRmZmU1OWU0ZGM0MDE1MjI4MTMyOTVjZQorUEs6ICA5NzVlMDEwYWJiOWEzZTU2NjU5MTM3YjA1MDYwNTdmMjgzOTgyZjg4NmNhMTcyYzdiYzJjNTAwZWQ5YmQyNmMxCitNU0c6IGVkNmVlYzI5ZmI3MDQ5ZGZmNzA3ZjBhNDQyNmViYzhmNWIzNTBlOTU4NzBiOWQ2MTk4YzgxMzllOWMzZTFlNDA5OTM3ZDFhODU4YTBkZWE0ODJhNWNiMWE4NTRlZDNiNWE5Mzk3YWNiNjNiZmY2YjY0MDM5ZWYyZWIxMTU5ZTk5ODU4MzEwYmJiZDg2MTI1YzNlMGUKK1NJRzogNzIxNmFiNjBjMzUxNjgxODdkMGZjZTQ3NTNjODZlODAwNThkNTQwYjc2YmY5NTg0M2E1ODk4ODQxMDYwYTk5YTQ0ZGU2ZjQzOTYyNWEzZjYzNjVmNTljMzc3YmY0NTkwOWJiZmVmNWM1MGIyNWYzMTk0ZTVmYmQzNGVhNWU3MDYKKworVFNUOiA3NgorU0s6ICAxOGQxM2QwYzAwZThlMzM4NmE1Y2ZiMzBhOWU3OWZlODhiMTg2MWVkMmQxMjAxZWIxNzAwMzhlMTk0NzcwNDAzCitQSzogIGE0YWZjODMzNDAxODc2MDkwZDliODgwYzQxMjY3ZDY4Y2JiZWVhYTM4YWZiMjA4ODRlMjczMjhmM2I3ZjUzNWUKK01TRzogOTEwZjZjMjcyZGQ5NzkzMWFjNDczMTBkMjQ0Y2FkYjQzMjUxMzY1ZTAyYmE5ZjZhNWIzYzMyMjZiZTlkN2QzYTc0YTJiYTQ5MDZlOGU3MWE0YmYzZDM1NTZlYmRmYzY2NmNkNmIxMmYyMGM0YTAwODM0Yjg4ZmJiMjQ0NTc1MTk5Mjg2YjBiOTM0NGNmMzM0YWZmMDA3CitTSUc6IDAzMzk4ODE1NGM1ZDc5ZDI1MTBiZTgzZTc3ODAxNWRmZTJmYjg1YjgxMTFmN2VjMTM5OTE4YjU0MDBlM2Q2NTZlZTgwYTlmNWM5MDcyYjViNDY3YTVjYzVhNTdjYzhhZDEwNjJiNWJmZjEwODYyZDlkMzY5ZGRlMmNjOTY2NzAxCisKK1RTVDogNzcKK1NLOiAgNGFkYzhjMjg2NDZhOTNhODE3MjkzYTE0ZDI5YjQ4ZTJjNmQ3MTJhNjg5OTM1NDdhNWM1ZTRkMTQ1MmFjYmMzYQorUEs6ICA3ZjQwNDczNjI4ZjIzZmMwZGZmMDAyMWFmZDQ4Nzc0MGQ0OTE2YTkxMjJlNmM5N2QzNjQzM2U1ZWJmMDRmODhjCitNU0c6IDA5ZmI1NTAxZjE2ODhmODBhMGFiOWUyMmQ3NzhhZTEzMGFjYWY3NGQ3ZjUxODViNGRhMTk4YzZiOWVkYWM0MzAyZTJiNzUzZTU3ODc2NmUxN2Q0MDU2ZGM0MGQ5NWNmNGNhOGJjYzY1NjU3OTVlOTdkNjhiY2RhNzlmYTc3YzQ5MzM5NzcxNjM1NjE2NGNhYWI1ZDE5Y2ZkCitTSUc6IDZkM2I0ZTkwZWM0MDgzMTFmOWIxNWI5MjUzZDNkOTVjNWQxNTI2MjBjMjYwZDU2MzAyNTU1YTg4MDRhNTEwNGJhNWU4ZDI5ZWUxMDhlNzY0YTY0MjE5Mjk3Mjk4YWI3Njc0YmJjYTc4NGRlZTI4NzczYjM0ZTE4NWEzODZjMjA4CisKK1RTVDogNzgKK1NLOiAgZjI2ZTFjODQ2OTdhNDkwODE1MWI0NDdkY2Y2YzdjN2EzOGIwNDA4MWRiOWU3Yzc3MzhlNmZlYzkwMGJlZDBjMQorUEs6ICBhODZlMTQyMmMxMjM1ZmY4ZTFhYTA4MzQ3MGQ1ZTQyMjg4Y2IwMDdhYjUwZTc5NWRkMGI0ZmY4NzM5NDk2NmM0CitNU0c6IDU0ZWQ0NzYwNmExNDg3YzJmOTAwY2VmYjZlODk5ZGJhZjZjMzFjYzg4ZWJlMzU1OGI4M2I5M2Y2ZDQyMmMzMWU4ODhlNDhlNTIwZWVhZWRkN2U1NTRhOWNkNDBjMmM1MTlkNTMzYjYxNDRjZWU0ODRjMzg5ZTk3NmIxZTQwMjJiNTBlN2RiYjg3ZWFkN2U1NDFhMjAwNGRhZjcKK1NJRzogNDRmMzM0NGI5NTY2YzlkZmQyMmQ2MTk4ZTFjYmY5NWQ5ZTI4ZjI5ODJmYzdmMTY2YWIyNWRkYTMwYzQ2Zjc2OGM1NThlMDM5NGZiOWFiM2UxZDRkYjRjZjQ4N2MxNzY0MWExM2YzZjQ4OTM5ZTBjNjQ4MjdhNzUxMDNjNTc0MDYKKworVFNUOiA3OQorU0s6ICBjYzBjMzNmM2E4NmY1YTE3ZDMwYzE4NmNlMGYzYjc0MGJhZmE1ZmUzYzcwOTBmMTQzNTQxZTJiMmMxZTUzNGJjCitQSzogIDk2N2E3MWM3Y2Y5YjgyY2M3OGNiZTEwOTEwNGQ4YjQzOGE4ZDFmZDcxZDI2MGQwMjkwNDZhOWE0NTI2ODY2ZmYKK01TRzogMTk0NGU1ZTE1NWQ3NWUwZDBiZTkyZTFiZTE0Y2VjMzcwYWQxMzc5MWYyYmZkNDBmMjcxMjE0ZTk0ZmNmMjEzYzcxYmMyMGQ3Y2UwYzc1ODQ0MjFhYzRlZmM0NTE4ODNjYzNmNDk1NmYyMWY3M2E0MjE2NzIwNDM4YmMzOGZmMmNmZGYzNzA5OTA1YTUwYTlkOTRiMWQ5ZTc5MzJiCitTSUc6IGUyNzdiM2RkNjU1YzMzZmY3NWZhOTIwYWYxZmNjODU5NDAxZTZjN2E2ZWY0YzZiZmJmYWM1MDY5NjM4ZjE5Y2ExMTViYWYxM2MwOWM4MmFmNzkzZmFjYjZhYmQwY2Q1OGU4NDgxYjA4YzFiNjhhZDdhMjY2NWM0YTYxNGEyODA2CisKK1RTVDogODAKK1NLOiAgZjBiYzk3OTM3NWE3MDczMDY4ZGJhN2Y2YzA5NGRiNjU5OGI0ZTQ1ZGY3ZDU0OTU4M2MyMmZkZWQ4MDQ4ZmEyZQorUEs6ICBiNDJiNmM1N2E3OGYxZDkwMDkwYTcxODFhYjJhZTA5ZjQyNmNiYzJiZTk2ZWIyY2YyN2FiYzcwZDdkMzJhNGIzCitNU0c6IDI3YWIzMDQ5YjVjNjM1MWY2Y2ZlMzhiMTNhMDU5ZjUwMzcyNTdlZTNkNjVkNjA3OTY1Njg1NmVkYzg3NmVhMDgxZmQ4YTk0ODA0NjZmODgzOTQ3ODA4ODQ2NmY1MWVjYmZhZjJkNjVkZWYyNWYwYzRkZDhkMDg1ODgyMDI4MTIyMzJmNTc5NDVkZjhhNmZhMTYxZWQ4YzAzNDNiNTgzCitTSUc6IDE5ZGJjMzAyN2Y5ZmFlNzA3ZGViNzZmNTg4ZjlmZDA3YWE4ZWFlMjliZDRlMWQwNGMyYzk4NDM4ODI4NmIzYjEyMjI0OGE2YzAzZWQ2N2VjYTM1ZGY0ZGIzZGMxZTQyMzdmMjY3ODkyNTE4NDk3ZDk1NTJhMjFkZTE5YjUxNDBmCisKK1RTVDogODEKK1NLOiAgMzAyMjk3NWYyOThjMGFkNWRkYmU5MDk1NGYyMGU2M2FlMGMwZDI3MDRjZjEzYzIyMWY1YjM3MjBhZjRkYmEzMgorUEs6ICBiODQ1YmNlMzhlMjZhYjAyN2I4MjQ3NDYzZDQzN2E3MWJiZGRjYTJhMjM4MWQ4MWZhZDRjMjk3ZGY5MTQwYmQ1CitNU0c6IDlhYTE5YTU5NWQ5ODkzNzhjZGMwNjg5MTg4N2VmNWY5YzI0NmU1ZjgzYzBiNjU4NzEwNjczZTRlN2RiNzYwYzc2MzU0YzRmNWQxZTkwZGIwNGEyM2I0ZmI0MzRjNjkzODQ1OTNkMDEwZTMxMmIxMWQyOTljOWY5NzQ4MmRlODg3Y2VjZmU4MmVhNzIzYmNhNzlhMWJkNjRkMDNlZjE5ZWUKK1NJRzogYWUxNGE4NjBmYWQwMDUxYjNlYjcyYjM3MjFhODJmN2I5NTQ2YjI4NjcyNjFlMmI3YjYzODk3OWUyNTYxYmRlYjg5YjYwMDc2OGY4MjQ1MGE2NmM4YjA0ODEyODNmYTIxY2I2YzUzYmRlMzUwZWZmYjY4YTdkMTExNGJmZGIyMDMKKworVFNUOiA4MgorU0s6ICAwZjcxMGI2YzQ4MWY3MTQ0OTU4OTc1MzMxMmVmNjQ5MzJiNDY1MmViZTBlMDc1OTdmN2RhMWM0ZjNkY2ZmYjgwCitQSzogIDY5NzNmZjI5MzJjY2RkZmMxZDE2YzRjMGRhNTBjOGIyOWZlNjQ1MmQxZWU4NGQ1MjA2NGViZjNkNjI4ZDQwM2UKK01TRzogODVkODU3NDRhZDU1ZTllZjlhNjVjYTkxZTg1YzhhNGY4MGU0YzU4ZjhlNGU5MzU0ZTgzMzk4NjA5OGI3ZDlmZTlmZGMwZGVkYjBkNzVkMjUzOWZiYTAwMDM0ZmMwYzJlODQzNDRkMWVkYWEwOWQ0ZjYzZDU1NDZkNjc4MDNkZDZiNTRkZGNjMGIxZDNmMjU4MmRkNzUyODllMzFkZTQyZTY5CitTSUc6IDAyYThkMjZhZWUxMTQyMGZiNGYwOWQxMTYzZTE0Yjg2N2RmN2M2ZjZjOGY4ZGM3YTc4MDM0NjU5ZjA0MDFjYWQwYWE5MDM5N2VmZGQwNzA0Yjc5OGRiMTkzNjUwMzAyNmUyYTFhZGMyOTdlMjc5NzRkNGJlMzEyYTM3NTNmODA0CisKK1RTVDogODMKK1NLOiAgN2EwNWYxMjFmNjAxMTJkZDE2ZmVlOGM5MWJjMmExMTQ3OWY0YjY3ZWUzMzQ1NjA0MmM4ZGUxNjdmYzU4ODAxNworUEs6ICBiM2IwNWJlOTg5Y2VhNzE5NzUwNWQ0YjU0MzM1ZTVlMWQ3N2E0YjUyYmE3MjgyNjA0YmJjMWNmNmM0ZTg3YTZjCitNU0c6IGQ5YzU5ZThjYzRlZGU1MzdiZTIxMjJhYjQ5MmE1YjkxNWE5YjBhMTE0YjJhZGUzNTZmYzA0NTdlZjk4NzIyZDVmNTY3Yjg2MjExZTI4MzY5ZDE0MTY4ZWM0YTNjODA0MDc2ZTE1NGFkYzcwYTY2OGNmNjRhMjBkMTNjZjE5MGQxMTVjZDY4OGQwMzZlNDY5MzgyNTFkZjQ5NjRkYzM1MTdiMTBjCitTSUc6IGQzMGNlOGEzMjJiNDUwYTJmYjFhZmQzMjljZWM4NTU5Y2NmMTEyYmQ4Mzk2NWY5ZWM0NzM2MjcwYTA5MTRlMDYxMTk2YmY1MjA5Nzc4YzlmOGNjZjM5YzQ2NjhiYmYwZTEzNjNmODFhZmU0NWRkNzRlODBkNTg3NWRkYmY2ZjAxCisKK1RTVDogODQKK1NLOiAgYmYzODFmOGRmYjVkMGM2ZDY0ZTQxNmFjMjNlMGQwZmNiODZlYmI4OTliMWQxNDZhYmQ5MTFiOTJhNzgwOGViNgorUEs6ICA4NjNmYWQ4ZDFmMWJjNjMwYTE1ZjZmZThlY2VmZTZiNDQ5N2I2MGIyMWFlODgzMGRhNDY3NDIwNDVmZWYxNTZmCitNU0c6IDg2NTRmMmY1YzZkY2QyY2ZjYmI2ZWQ4ZDJiYzVmYjVmZWM1M2UzZWZmYjBkZTY1YWFjNTA3ZmE1NmM4OTc3MzIzOTVhYTA5OTQ2ZDNiNjU4NmE5MmVkZDZkYzk5MzE1ZTFiYTc0YzZhMDI0N2M0YmE3NzYwYjk0OGViM2MwOTMyZDlmZTFmMGU5ZmVhNmViNjFhNTQ4YTlhYjQ4ZmZkZjE1NDczMjkKK1NJRzogOTliNzUzNzg3MzhmY2FjODA2NzY2OWU4NTA5YjVkMjYwN2UxZWY3NmFmOTAwNGUxM2ZlNWQzOTMyZGY2MGIxNjgyMTZmNTg1NjUzNDBmYTRkNjM4MDU1YTg5MDQ0ZWU3ZDQ1ZTJiZDA4MmE1MzM4MjI4OWEzNDcwMDY0ODk4MGUKKworVFNUOiA4NQorU0s6ICAzNjk4MzI0MWEwYThlNjBjZTAyYTYxYjNmYWZhYjE1YTczMTNhNWEyNzBkMDE1YjljOWVjMDcwZGM0MmRlZWRhCitQSzogIDY2NDc5ODRkNDJiOWE1YjNiMWFmYTNiN2Y4ZjQ5ZDRjMmIwNWUzODk4NGU5OWNlYThmZDY4MjM1ZDJhZTQ2MjcKK01TRzogY2ViYjllNDA0NDUxODE4MjUzYzAzOTJhNDU1NGVlNzMyM2M1ZDViOGIyMjY3NzU3MDBiODA2ZWQ1YjkxMzM3OTE2ZWE3ZWNiYzNkNDEwM2ZjNjVlNTM3MmFlN2U1ZjliYTJkOGY1YWVlMjRjY2Y2ZTYzMWFlMjBjNGFmOWI1ZjcyOGNkZjg5ZTgxODlkZWYxYTViM2QzNTM0N2FhMjAzNTI1ZWExZDJlCitTSUc6IGVlMzdkZjhhZjQyMmY5MWY4NWRmZTQzZWZlNzlmNjIzNzgwNjhjY2RiYWYzOTE2ZWVjYmMzYWRmZWQwNTA4YmRlYmFmNWNlMDZiM2JjMjc5Zjc4MDg3ZjBkYjhkYjNjNjgyM2VkZmIzMmMxMjIxNzgzMGJlNzIzZDg4NzJiMzBjCisKK1RTVDogODYKK1NLOiAgZDA2ODk5ZjkzYTQwOGRhY2I0MWM5Njk3MTgzNDZmMWUyODliYjVlYTY1ZTI4M2ZmNzljNzA1YTA3NDUxN2MzNQorUEs6ICA0NmJmMmEwOGEwNzZjNDdkN2YxMWI3MzNmODE0MWMzNTUzNjNlZDg1ZDdkZWYyNmJhNmEwY2UxNWFjNWYyYmU4CitNU0c6IDA4NjRjMzlhYzRmZGE4ZWI5MDQ4NTk3YmQ0MGJlMDQwMTAyMWZkMmRkM2EzMzkwYThmYWNjZTk4NGIyNjBhMTNmYTJjN2NmYzAwZDE5MmZhZGYxMzRhMGFkNWExODFlZTg5ZWZmMGM3OTVlYWEwZmJmZTJmM2IyNjExNWQwNzE2OGRiNDJlZDIxYTUxMzAzYjE5NThlNGE0MmRjMDY1YjIyY2U0OGYxN2E2CitTSUc6IDZmODlkZTkyYTY2YmM1ZjQxNDQzMzkxMjQ5NTBiZGY1ODgxNDRjYjM3MmY2NzM2MjQ1MzUxYzk0NzZiZWNjNTlhMjU4ZjlhOTMzZmZmZjJiZWY0YjQ2Y2QxMDU3Mzk1MjI1Nzk5ZmQwOWRlZGU2ODIzZGIwZTMyNWRiYzgxNDBkCisKK1RTVDogODcKK1NLOiAgZWViY2E3OTY2OTcwZWU5ZjJjYzRkNzRjNmYxZDhlMGViZmY3YzQ1YWViYWQzNDlmYjlmODZkZjYyOGRmZmYwZQorUEs6ICA4OTEwMWUwMzA5Zjc2N2U2NGFlOWM5OGM0YTVkOGQyMzI4ZmIzZWYyNjJkMDgyZjQ5YjY0Y2EyMDllMTk5MGY2CitNU0c6IDBmYWM3OTBhZGI5ZjU5ZTVjYjBkZGNiMmI2NjcxNzJmMmEyMTAzNGQ5M2JjYWRkZjE4ODYwNmZhOWU3NzZkYjMzYThmY2M2YmQ3ZjU1Njc4ODNmYzBkZTM1MWFhOWFmYWEzNmQyMDc1YjFiYTg1M2JhZGE4NDliODY2MWQ1YzgxNTRlN2IwYWZlYTY1NmRkMTVlMDFhOWM1YmEyMTU4OWIwMmY4ZmM1NDgxYzIKK1NJRzogN2Q0NDdlZTUzMjhjOWZlN2YxMTkzNmNjNDI5OTg3NTRhNTZjZDFkMmE2OTUxYWY0ZmVlN2M0YThlYjMxOWQ0OTIzNzA3Yzc5M2M1NWQ3OTA2N2Y4MjJkNWIxNmJiNTc3NmUzOGRmZmFiYzY3MjM3YTkxNmE4MWE2MzMzOWIwMDMKKworVFNUOiA4OAorU0s6ICAzODIwYjZiMTU5MzlkMGFmZTE4YzljYjNkOWEyYTA4ZjE2N2RkNDU4ZWI2YzdlM2YxNTU4YjBjNmRiNGM2ODkwCitQSzogIDgwYjg1YzY1NTlmZWE4YjQwMGUxOTk5Y2M1YmZlZDUwN2FkN2ZjMjk0Y2Q5YmEwY2UyZGQyNTg0YTkxMDg5YjAKK01TRzogM2U1YWQ5MmQ0NGI0MGU4NjE0ZDgwODdjOWM3NDNkZTBjMDg2MWEwN2YxZjUxNDZkNzFjYWMyZjM3NDAwMjRlODQxY2MyZDQ2MDI3Y2Y1ZDI2MWQzZWU3YzE4NzViMzk1NTEwMTdiNWZiMTQ2ODExNGZjM2UwOThhODk5Y2RiZDU1OGIzOWYwOThlMTU2YjZlOTgwMWViY2RkNjVmZWQ1NmRiZmNhZjJjOGM3ODdiCitTSUc6IDgyM2VlMmMwYzhkODdmYWEwZWMwMTQxZTljZTA4YjUxZTU3YzgzOTc5MmQxZmJkOTdhOTY3MjA3ZmQ0MTU4NDllYmZiNWRhZGI1YTFkYzJjMGE4YjdmYzYzZmMzNTQ4NTdiOGM5MGM0NDcyMGUxM2Y0NWNkMDFlN2FhMjMxNDBjCisKK1RTVDogODkKK1NLOiAgMGQyMGZhNGEzN2ZmMzBjNGRjYzNlNDRlYTdhYzUwMTEzN2U1ODA3ZTk3ODEzMzBhYzMxMDk4MmNjM2QzOWRiZAorUEs6ICA2N2JiMGEwMWJjODYxN2I0OTFlZmYxYTMyNmMxYzcwZjdkMGM1Yjk1YTVhZDQ4MjQxYWVkY2UxYzZmMDg4M2NmCitNU0c6IDM1ZTBmNGI0YTUxN2Y5YzdhYTQ1MTRmMDNlNmQ2NWYxOWIyN2M2MmNjMDY5ZjZiZjA3ZGQ2Mzc4YmQ2YWZlMmI3NjY1NjAwMDZjYmQ1NzMwYTAwOTE5ZWQxMTE5MWZiMGM4ZGFjNTZlMTUzZmMxY2VhNGJkY2U1MDQ2Y2NjYjcxNzc1OWE0MDgzZTFjMTZmNzQwNzYzMjY0Y2M4MDRkZTBkMGUxYTRiNWEyMzA2N2FmCitTSUc6IGRlYWIxMmVkODJiYTk0YjQ2OWNhOThiNjZmYTIwNDQ0YjRiNzg4MWM0ZjBmODUzNDA5YzlhMTUwNGE1YjJiNmQ3ODYwZjI2YWRhNmJmNzM0NTliOWNkYjU3M2M4MDE3MTIxMzM4ZWZhNjBmNDE0ODA4NmQ3YTNhOGVkNTliYjA3CisKK1RTVDogOTAKK1NLOiAgYmVlMTYxODgxZDgxOWIzNzBkMjQwZDUwOWJhNDZiMDZmYjgyOGUyMDMxMGQ5ZjZiMzA5NzgwNzAzZTk4OTI3YgorUEs6ICAxMDg1NDM4MGRlODkxNjJiZmI5Zjc4MzVhMjcxNmEzYTZlMDI2NTY3MWIyNTBiMzg5ZDAxYzNiY2MwMzczNmI4CitNU0c6IDVhNmZlNTk5YjZiMDliMDVjMGJhNmE2MjJkZjNhOTJiM2QzNzZkMjRkMDRlYTg1ZWJlNzY3YmMyZWM0ZDE0ZTgzZTY5MzdkYzBiOTE0YjQ4MDlmZGI2MDc5MDY4NDFhNmZkMWRjZGY2MWFhZWE4ZjliYjgxYjJjY2FhMzJkZjQxMjk4OWFlNTM2NDY2ODBhNzFhMjExYzg0NDBlYWIwZjFhZWM1ZTRmYzAwZTZhMmM5NmQKK1NJRzogYjA3ZDA3MmViMzgzMWZhZThhMDZlZmZhOTIwMTc5NzQ5NmRjZTEyNmI4ZTExZmVmMmZhMDdmNjY0ZGM1Y2YzZDRiZjljMzhhOGIzYzA5ZmI1ZjE0ZmEyZGViMjE5ZTdkODUyZmRkMjdjN2JhMzJkMzA5OTQyZjI3NDZkZmU0MDQKKworVFNUOiA5MQorU0s6ICA3MDE1MGU5NTE2MTY0YTNkN2I3ZThiNmYyNTViNjVjYWM5ZjA3NDU5YjMyZDExYmI5NGIzZDI3NzIwOGFiYzk5CitQSzogIDIzMjhiZWM4ZTQwMzUxMDQ3ODgyZThiNDNiYzFhYjA4NTM4NmZhNDc5ODdlNDZlYTg3NjA4ODE0YzVkYTcxM2MKK01TRzogNzdiZThlY2VhYWI0MzFhMTNjMmEyOGQwZDE1NTY0ODlkOGMzOTJmZDdhZTQxMTU3ZjdjYWYwODJjYjU0ZTQ1ZjA4NjI2YmUwMDc2YmU4NDRkMzhmZGU5MDFhNWVhYjBlODgzMmQ2OWRhYzIyZmI4NTA3ZmI4ZWM0ZmFmN2M4OGZkMjZkYTMwODQ2MWFmZTM4NTk4Nzk3MmI1ZTc2MGEzNGE1ZTE4YjlhODJiNGFhYTUyOWI3CitTSUc6IGVkYTNmNTAzM2VhNzk1M2EwZDU4M2M2NDU3NTIyZTg0YWQ3ODQ0NTMwNGQ0OGU1NzdkNGQ2OWU4NjQxZmViZTE1MjQ4ZDhkOTBjZTA5NDRhOGY4MDFkMzkwOTliYzc3NDk0YmFjNGNlMmEyMGIzODM2OWM2YWRmYjcxZTAzZDBmCisKK1RTVDogOTIKK1NLOiAgM2Y4N2ZjZmRiNDIxNDIyYTljNWZiOTgyNjgzMTNjMTUxMjhjNzg4NDRlZjllYjNiMzcxM2ZhNzdiNjcxODkwMworUEs6ICA1MzNlYzU5MjI4Mzc0YmQwM2E0Njk5ZTNhODg5NmI4NjE4MmZjZjhmYzMwODVmZGI4ZjVjNDY3MTUyNGQ2ZmUwCitNU0c6IGMwMGZlZDJkNjg5NDY4YmNiYWNjY2Q0NDZlOGQ4ZjI5OWUyYTg2OTI1ZTYyZTU5NzA5YWZhZjQ4NTc0NjlmZjFlMDA2ZDAwZmEzZTE4YTM2MTVmOGYwNmI2ZWJkZmY3ODVkZGU1ODg1MWQyYzIzOTAzOGEwYzM0NGRjZTk4NWJkMWZjOGRlYjQ3NzlhZTVmODkzMmUyZjllZDU5OTBiNjQ3MmRiZTRlNmZlZjY5MTc2NTdlMGI1CitTSUc6IGY2NTE5ZDdlZGI2MTM0MTExOTc0MDMzZjAzYjhkODllOWM3NmNhZWM4OTY1YThlMTdjZDQ1ZmZmMTlkZTI2MTVkNzNlY2NkYjRhNjY2NGE4ZjBlMjNhZGY5ODk4OGU5NjI1MWJmMjZlYjdhNGNjYWFjMTA3OWYwYTc3MmY5YjA1CisKK1RTVDogOTMKK1NLOiAgNDRjZWVmMDQ0ZmY5OThkNGFiZWFhZjM3NGViNDFkMDg2NzE4YjYzMDk3YjFlMzVmODk2MzRjMTQ4OTcxMzJlYQorUEs6ICBlODNjODY2NzdkMDNlZDNhNWU4Yzk1ZjQxZjBiMzI1ZmY0MzMzNzAyZjJmZjY5MzZmNTdmZjMwYWEzMTQ4NWM3CitNU0c6IDhkM2UyZGVjNDY0NGM3YjUxNjMzYjEzZTYzNzVjYTQyZmY5MTM4NDY1ZjQzZDc4MDBjNzMxMzE5OWY2N2M5Y2YxYjUyMGIxODIwYmQ2MzBlY2YxYzk5MmUyNzY3YjM4ZWI1YmJjNDQxYTRhYjhkMzE3ZGI0NDFkYjM1YTBmZTNhYmU3YTllNDU0MTg4MWMyZDdiMWEyNjEyMzA2OTU5ODE1ZDFkYTQxMjY3ZDk2NDlkZDQ0OTRhY2UKK1NJRzogNTU0NTUyZDZiNzkwZDQyMWQwNmIwYTY3ZjhlMDAyYWQ3YTFlZDAxYzA2Y2YwMGNiZWFlYzJhMjY4YmRhMjlmMTE4M2YwY2VhZmM2MjVmYTVmZGI4NDdkYzg2ZmFlMWEyMDQwNmU0NTlkNGEwMTc3Y2I1MTUyMjBhNTY4ZTA4MDAKKworVFNUOiA5NAorU0s6ICA5OGVmMmE0NGQ0Yzg0NzZkZmYwNWFhNzhkY2Y5YzZkYzA4NmNiMmY2MjJhMDY3NDVkNjBjYmYyMjNmYWFiYTY2CitQSzogIDQyZmRiMWRhYTM5ZjAxNTkxMTliZWVjMWJlZGY2ZjAzOTRiMjZhMmEyOWJkMWZkZTA4MWVjY2RhZGVjYzIyNmEKK01TRzogYzhiNWZjZmMzYzE4YzdkOTU5NTdiNjY4ZTkxYzczMWQ1MGM3ZmNlYTRmOTU3NWJiZjc4NDYyNTg3MGUyMzhkZjU0NmUyY2IxYTE5ZDI4MDhkZDViMjMwZDM4NzFmZGVjMTYxMDBlZTFmYmY5YjcyMmZhMzc0NGE3NTBhM2IzOTZiMDVmOWMyMWI4YzBmNjFlYWQ1N2E3OGM1ZWNmNzJiNTc5Y2ZlODhhM2Y0MDRjOGFjZjUyNGY5YWI5CitTSUc6IGFiNWU4NzI0YTNlNmZmNzYwNThjZmIyMTRkNTc0ZTA0ZDA1NTc0ZWNkZDRmZmU4YzA3YzdhZjM5NmU4ODI2ODdjNWQ3OWVmMWU2MmZiYjRjNWYxYmQwNmI5YmQ4OTc4MjZlZGRlMGQxMTFkOTE4ZThlZjk2MWZmMmEwMGQ3NzAwCisKK1RTVDogOTUKK1NLOiAgOTNhOGM3OTJhMjM5YzkzMTkxN2MxMTQ4MjRhMDE3NGY4YmM0ZWJiZjk4YWY4YzdlMzIxZTBmNWJlYTQwMTVlYworUEs6ICA5YjJlYWE4YTljMmMyNWZmNGY2ZTEzYmIxMmJhZTVkMDZmZGEwZWIxMTA1ZmFmYWU1ODgwZmYxNjg3NDBiYjc0CitNU0c6IDkwMWJmNGUwNDFjYWYxNmUwNGYyZmZkZThkNmZlOTdlOTNkMDkwMGY2YmMwZmMwOWE5YTAxNzlkMTM3YjRiNzc4OGU1N2ViOTI3NjZhOWM2MzRmMzVhZGI1YzI5ODhhZjFlODYyMDhmNDYxOTk4ZjU5Y2ZlYzk5MjA0YjQ4NGZiY2FkMzk1MWU3ZWU0NDA1NTIzNzA1ZDk3MzliNDQzMDdkYjAzZjcxM2ZkYTc4ZGI0MjFlZjMxMjFiM2JhCitTSUc6IGNmZTMyYzQ0MzVkOTExZDc3MmRjMDcyN2U3OGQ2ODlkMDE2NGM1MDY5NTk3Y2I0NDFiMjJjMWQyNjIzNjQ3OWYxYWZkNzA4OTEyMWI5YWI0ZjYxYmJiMWZhZTFhYjQyZjc2MzVhOTJhNTM3ODRkNzE3MDkxNmI3MDNhYTVjYzA5CisKK1RTVDogOTYKK1NLOiAgNzAwMWZhMGM0NDA0YzI4YWE1YjVmY2ZmMzBhOTYxZjIxYTIyZjViODVhOWUzODJlMDdhZWE4YTg5MjRkMGVjMQorUEs6ICBkYWViYjYzYzRkOGY0MGNlYmE4ZWMzNWUzZGQ5NDZhNmI3NWJjNzRmY2IyOWFkZTdiNTVlZWUzY2MzYWVhNWNhCitNU0c6IDQ0ZjQ4Y2ZiMDJmMDg3NzdhNTc4NzM4NTVmOTZiZTRjMDI5MTMyM2YyNzM5YjI3NWQ5MDc1N2ExNTQ3MmU1NzUwNDM2ZTAxMDc0MDhmZTMwMjZjMDA2MjU2ODk5ODNmOTkwZWJhOWJlY2JmY2U0MDNjY2Q1NjM1NmFkMjc0MWZkMjE0NDVkZmIyM2Q3NjExMmU1NzhiMzM5NWNmOWQ5NjA5NTVmMWRhOGYzOTljYTI4NmYyMTM5MGUyNWE1OWEKK1NJRzogNjRlYWM5Y2U4NzQ2MDYxODYzNmI0MWZkMmRlY2MxNjczYmZjNDhjNWY0NzlkZmFjYjUxZTg2Njg2NDA3Mzc0YjFkMTBiZjY1ZDZkNzQ3NDIxNGQ3NzcwYzllNWM3ZjgwNmM4MGQ1M2Q0OGI3MjA4NzBlNWU3OGYzMmUzYTdlMDUKKworVFNUOiA5NworU0s6ICAzYWRjZTNhM2QzZmJjOTc3ZGQ0YjMwMGE3NDc0OWYxM2EzYjA0YTVkNzNhMmNkNzVhOTk0ZTMxOTVlZmViZGFjCitQSzogIDZmZjE5YjFmMThkNjQ4NTFkNWM3NDg0NWM2NDA3ZjBiZjU5NmE1MmUzODVlMDIwMTI3ZTgzZTU0Y2ZmNWFjMTkKK01TRzogZmU2YzFhMzEwNjhlMzMyZDEyYWFiMzdkOTk0MDY1NjhkZWFhMzZiZGIyNzdjZWU1NTMwNDYzM2JkMGEyNjdhODUwZTIwM2JiM2ZhYmU1MTEwYmNjMWNhNDMxNjY5OGFiMWNmMDBmMGIwZjFkOTdlZjIxODA4ODdmMGVjMDk5MWU4YzExMTFmMGMwZTFkMmI3MTI0MzNhZDJiMzA3MWJkNjZlMWQ4MWY3ZmE0N2JiNGJiMzFhYzBmMDU5YmIzY2I4CitTSUc6IDdkZGE4OWY4NWI0MDUzOWY1YWQ4YzZkZTQ5NTNmNzA5NGE3MTViNjNkZGEzMGVjN2NmNjVhNzg1Y2VhZTVmYzY4ODcwN2VlMDBiZTY4MmNlY2JlN2VlMzdkOGZjMzllZTZkODNjNjQ0MDk2ODE3MDhhMDg5OGExODNiMjg4YTA2CisKK1RTVDogOTgKK1NLOiAgMTQ4MDNjMWYyM2E0N2ZjZGQzNWU1ZDE0NmUyMGNhNjMwY2Q3MTJjMDQ3ZDUzMzBiNjUyZTMxODU3YWNiYzllOAorUEs6ICAzNmYyZDViZDZkODMyNGZhNmU5ZGI3ZjdkODU0ZWJlNDhjMGU2Mjk5OTk4MTIyZTlkNDRiOGFkYmVmNTRmMDkzCitNU0c6IDU1NTk4MzY3OWQwMjZlNTM1NGI0Y2MwNTVhZTFiYzE0NjUzYzcyODFlYzcyMjM3MmYzZmViNzc4ZTg0MWRhODIxYjNkMGI4ZWU3YTlhOTEyOWVhMDY4MjRiZTgzNzlmYmJkY2IwNzQ4ZjQyMzcyMWNjYjE3MmExYmFmYTFkNWFlOWZjMWM1MWU5M2Q0MWRkNTUxYzMwODYwNzliNjIwMjg2YzFjNDBjMTIyM2JiY2JiNzY3MjJlOTJjYTIxZDg0MTBhCitTSUc6IDA3YTdkZTZjZTk3NjY0YjNlYTA5MjhlMTM4NWMzMzA5YmUwOGE0N2NiZjRkYWE5MTg2YTFiOTQ4Yzg2ZmJiYTM5YzRlZmNmY2I3YTBhMzg2NmJjOTRjNjc4OGZmZTZiZTBkNDk3MmU1NmQwYzMyOTJkMWNjNmUyNTQ0N2I5OTA0CisKK1RTVDogOTkKK1NLOiAgMWE2MTE1NGQzNDcyY2Q5NmIzMjhlZTY3NGJlYjRmYzg2NzYzYTk2OWZiNDEwNDk0ZTA2Nzg0MTRlMzFhNDZhNgorUEs6ICA3NTc2ZDkzYWM4NWQwZmM2MWYyNThjNTVjZjkwYmQ4N2E2MzUwOTljMGU4MTBlZDBiOTM3MjU4ZDEzYjQyNTU5CitNU0c6IDY0YzU2NWVmYmNiOGI5NTI4ZWQ0NzI1M2YzYzZhNDAzNWRiNzgxZDZmMDk3NmI1ZTViYTg0NDdkNGVkNTRiMDQxMDUyOTNlZjRjMDAwZDhiMmUxYjViNzVlNzI3ZTVkMmEwNzc3NDNiNTBkMTgzYjQ5MTc2NDgwMWEyNTA0ZDE2ZWU2ZDdkOGFjNGZlNDBlNmJmYzJhODEyOWM3Mjg1YTVhYzY5MWMzNWU2NDJlZDE2MmNmN2ZiYzY0NTE2NzMzYTIzYjMKK1NJRzogYWRhMTY2NmM5YzNiODI4NGI4YTIxYzRmMjYxOGVmMDgwOGE2NDZmM2YxMDk0MWU0NzBmNzM4ZTE3ODVlMmRlOWZkZDljOGNiNTI2Zjk0NWM3YThjNjk5NGYxNTFiN2QwNjY1ODFiMWQ3NTUzMDc5NDdjNjJiZWZjOGFiNzA3MGYKKworVFNUOiAxMDAKK1NLOiAgZjIxNWQzNGZlMmQ3NTdjZmY5Y2Y1YzA1NDMwOTk0ZGU1ODc5ODdjZTQ1Y2IwNDU5ZjYxZWM2YzgyNWM2MjI1OQorUEs6ICAxZWQ1MDY0ODViMDlhNjQ1MGJlN2M5MzM3ZDlmZTg3ZWY5OWM5NmY4YmQxMWNkNjMxY2ExNjBkMGZkNzMwNjdlCitNU0c6IGZiZWQyYTdkZjQxOGVjMGU4MDM2MzEyZWMyMzlmY2VlNmVmOTdkYzhjMmRmMWYyZTE0YWRlZTI4NzgwOGI3ODhhNjA3MjE0M2I4NTFkOTc1YzhlOGEwMjk5ZGY4NDZiMTkxMTNlMzhjZWU4M2RhNzFlYThlOWJkNmY1N2JkY2QzNTU3NTIzZjRmZWI2MTZjYWE1OTVhZWEwMWViMGIzZDQ5MGI5OWI1MjVlYTRmYmI5MjU4YmM3ZmJiMGRlZWE4ZjU2OGNiMgorU0lHOiBjYmVmNjViNmYzZmQ1ODA5NjlmYzMzNDBjZmFlNGY3Yzk5ZGYxMzQwY2NlNTQ2MjYxODMxNDRlZjQ2ODg3MTYzNGIwYTVjMDAzMzUzNDEwOGUxYzY3YzBkYzk5ZDMwMTRmMDEwODRlOThjOTVlMTAxNGIzMDliMWRiYjJlNjcwNAorCitUU1Q6IDEwMQorU0s6ICA4YzlmOTUwODMwNzVhNDNmZTQyNmQxOWYxZTg3NzE5YjQwMDQzZGU4OGViMGVlOTcxZjcwZTEwYzc2OTRjZTRlCitQSzogIGU5MWQxNjdhYTNlYmMyM2U3MGFhYjQ1ZGFiZTkwNWU0MTYyNjJmOTEwZTJhOTU1ZGQ4NjE5ZWZjNzRjMjRlODUKK01TRzogYjY5ZDcwZTg2MGY1NWM0MjdlZjJhNzFkZjM2ZTA1YmJjNDNiYjJlMDY0NjNhYTVkZTM0NDE5YzZhNjE0ZWVhNjY5NTMzNWE4NzUyNmMxMjI2NDg4ZDg0Mjg5MWQwNTc0ZGYzNDNjOWMxZTE3YWVkNjk1OGVjZWU4NzQ3NDIyMWViNzdhNTk5ZWNiMDU5MzQ0YzBkMDUyYzAwMDJhNjZlNWE2MDEzMTg1YWY2OWEwMWJhNWRiYzY2MGQzNmNhZTIzNWY2N2ZlMGUKK1NJRzogY2FjNTU1MjIyZGFmZWM3NmEwYjQ3YjlkMmM1ODZiM2IzYjliM2I5YzgzNjRiZWIzY2FlMWU4ZGQ3ZjFhZTlkZDc0ZjIyYjhkZDRhZDJiMjkwZjgxMzUxYTQxNWE5OWYwMzBmMTA3NzhiZTRjZGE4NWQxZDM1MzMzMWU3MGYxMDkKKworVFNUOiAxMDIKK1NLOiAgZDdlYjFmYmE0MjRmZWVkMTAwNzc3ZWVkYjQ4NzRiZjIwODEwYWQ2ODZiNjdlMzFkMjdlY2Y2MTA2MDlhMzNmNQorUEs6ICBhMjVhY2IxMWE2YzgyNTcxM2EwODVmYTc1NDY5Mjg4NmE4N2QwN2ZiOWJlMWE1M2ViOTYxNzI4YmI2NmM5MDYwCitNU0c6IGExZDBmODFlM2Q1OTA4OWNjMmIxOWUwN2QyZmNlNDNkYjRjZjE3MWZhYTY0MmYzYjBiYmRlNzdhZTNkNTNhZjVjMDJiZjhmYzEyZmZiNGU1N2Y3YzhhMDE1ZDZjMmQxNzg5NDRmYWU5ZjdjOGZjOTY5ZDRiNzdiZWE1MTg3NmFlOTlkNTllOTRhZDI0NTZlMGVkNzJjNTJjZjRlNTM0MGRhMTdjNDRkYmZmODY0NTdhNTE5YjZmZmZlMjY5MDY2MjkwZDYyOWZlNjkKK1NJRzogMmJmNzE5NjgyYjA3Y2M1ZWNjMDQ4MGYzN2U5ZDEyM2ZmNmY0NGMyNmU2OTU4ZTU5ZjA4MDQ2NmY5Y2QzNzNhMTY1MDBkYWYxMjNkYzNmMTMzNDc3NGJmYzlmYTg0NTAzYjE2ZGJmMjFhODE1YzFhZGE2ZWJlZjQ5MjA0NjE3MDIKKworVFNUOiAxMDMKK1NLOiAgNGY2YWViMzVmY2UxNGZiY2JiOWFhOGE0ZjY0NTFiZjk1Yjk4ZGYwNDdmYThjNDNmMWVhZDNiNDA0ZDNmOTI4ZgorUEs6ICBiZjY2YTllZGQwOTQ4MWRiODQ0NGExNzZjOGNlMDU3OGQyOTM0ZjBjZGM5NzM0ZTg2ZmNhYWMwNWJmMzMzMGYxCitNU0c6IDJkZmJiM2Y1OWUxOWVhMTdkNDRhNWJkZTRhZDIyN2ExYTM1MWRkYTE3YWY4NDBlZTBhNzVkYTIxYTVjY2E4OWI2ZDFjNTY3YzMzM2U5Y2M5MTBlMjE1N2UwNWU4NmFkNWQ5MzExNDUwNjQ1OTRjNDdiYWVlYTg2NjNhMzQ2NDljNDNlOTBlYjk1Y2ExMGY3ZDUxNTk3YjM3OGE3MjJmMWY3MDRhZGY5ZjIyZTlmODg1Yjg5ZDFmOTM4MDA2YTJlZmNkYjQyYWFmZjVlMworU0lHOiA2YWRiMDdlMzY0ZjJhNDU1Y2IwNTg2N2FiYzUxMWFjZDlkNjU4OTc3ZjBjYWNhZmM5MjgyOGU3YjcyNGY2YmJmOThiZjBiZmIyOWY0ZTVlNmM3NDczOGQ0ZmRkODE2ZDkyNTI0MDdhZTRmM2FmYzU3NGM0ZjAwNjE0ODI0ZTIwMworCitUU1Q6IDEwNAorU0s6ICBlZjRhNjc2MmI0MDA5NzUyMDRjY2MxM2FiYjQ3MzQ0MDE1NDU0OTA2ODUwZmYxNDk0MGNiYjgzYWEyMjQxNGFlCitQSzogIGVhY2E0NTA5OTZmNTBjZmFmMmJkN2Y5ZDdmYTcwODdmMDlhZDQ5NjY0MjA2YTgwYmMyZTViYmJiODViYjY2OGUKK01TRzogYTRiNjNlYWVkNWE2NGE5NGYyY2FkMjEyY2UyYWU3MTA5MmZkM2VhNzQ0ZjViZDg5NTYyYjJmYzJhNmM5ZTRkN2FhMjdhZGQ1NjI2NGE1YTU1MDE2NjEwYmU2YzE5ZmY3ZDQ5ODllOTUwNDc0MDg1MzAxMjcxNWE3OWVjZTllMTJjMzAxYjMzMTdjN2Q5YjY3MzBkYjg2MmE0YTFkMjgwNThlMGY4YjVkZGQ5NzM4YzdjNjJlYTU3MmNmZTU5ZWFlMDhlMmI4YjY1OTNiNTgKK1NJRzogMDI2OTdkNDRjYWQ4NjJmMWRhZjU3MDgyMDVmNDUwZDQwODUyNWIxMGMwMWZmZDA2Y2ZlZTgwMzc0ZjNkYjE2ZmE5YTQ5YzE5YTk4NDRiMzQ1ZjJmOTU1OWVhNzRhYWIxNzNiYWEwNzhjNTQzNzBhNTE2NjcwMGM2ZGFmYjc4MGEKKworVFNUOiAxMDUKK1NLOiAgNTUwMTdlNWY2MWYwYzViYWZiY2RlNmY4NDlmNDJhMzFlNWU3YTg3OGMxZDNmOTEyNmZjNTY5ZmQ0MTdlYTlmMgorUEs6ICA2NjkxNGY3NGVkOTMyZmM4ODFmZjAxNjY2ODNmNjc1YTdjMjhhOTI2ZmRkZDY0NjljZGIzZjI4ZTZkZWM0MmNjCitNU0c6IDJmYzg0YTA5OThmYTZlMTY4YTg2NjQxMGJiNjgxMDVkZjI0OWEyOGNmYzc2NjA0YmU5NGZkN2RmZmZmMmZjMWRlZGQyMjAxOTk0NjU1NzVlOGRmODYwMTkwZjE2YWNhNDA4NDE2OWJlMTZjNmJhMzJlYjY3MDQyZmZkNGYyMzAzMTZhMjZiMjYyNGE0MmY4ZjkwYWQ1N2Y2OTE2NDg2ZmE5MWZkOTRlZDY4YWRlZDRlNjMyNDMwZWY3MTk0NDY5NzliZmFmMzQ1NDA5YzM4N2YKK1NJRzogYjFhNWU3YzQ5YjhmYzZiNDMzMWUwNDE2Y2U3ZTRlZDU5ZWRkNTYzMDBiODAyZTBkNzJhYmNhNGE2ZmNiODc2YzAzYmYzMzE1NzkxMjRhZTBkM2ZlNDNmNzg5OGJjODdlOTNmYzJkYTM5NzBmYzg2Mzg5NTdkMThjNjYxM2M4MDgKKworVFNUOiAxMDYKK1NLOiAgMDU1M2ZiYTg2Njk0MjM0MTIxN2NmMjc4YWM1N2NiMjFhY2QwOWQ5OTE2Y2M2YWYwYWM0Njk0MWVhMTM5ZDU0NQorUEs6ICA4NDBjNjZlNTdjMmQ0ZjUyYTRhMjc5NmQyYTUzYzU3MDliOTZhNjI4YzJlMDYzZmU2ZWZkNDdmMjgzZWY1ZTgyCitNU0c6IGMxZmFlNjI2MmEwZTk4YTZiMTIzNWZjYjYyMjgzYjdmMGEwOTdmOWQwMDI0MTZkMzE4ZmVmYzYwYzVhMTU4NGY5MDBhZDBhYjI2Y2NmYWUwZDZkODRhYTlhYTJkZjE2ZDRjMTE3ZWEyNzI0Njc2Y2I4NjZkNDg3MGE4NzJmYzgyOWE3YzJhNWQyMWJhODMzNDBhZGIzMzlhMzRjNTE4NGM3ZjVlYWQwZjA3NzI4OWIzMzY3N2VkNmExYmEzNGJlMTk5NGUyNTc2M2JkMWQ5ZmFlYworU0lHOiBiYzMzNjRjMTUyZWU1YzgwOGFjMzQwZjQ5ZWEyY2M0MDRlOTM1MTcxMjEyMjBjY2U2ZjdjMzBhMjI1MDBlNDFiY2RiNmU4MjA0ODBmOGZjY2RkMjJmZjlhZDk2ZGE1MzI4MDJmNDMxZTk0MjQwZmI4M2Q0YmNlYWEwOWI5MmIwZAorCitUU1Q6IDEwNworU0s6ICA3YTVhYzYwMmRlMTlmM2MyMTA0MGJjZGRiZmY0MmY2YWVlNmY5NWMxYjA5Mzg2OGY0OGU1MDQ4MmRiZjRmOWM3CitQSzogIGZiYjZjNzUzMWNkYTIxZTdkMTdlYTkwM2M0ZDE0YmU2YzY4YjRjYTgwM2ExNmJkODcxMjBmNWFhZjdkY2UxZDQKK01TRzogYmQxNjg1NDE5Mjc5ZWI4MWU0Y2YzYzkwOTAzMWYwZjA5YzVmZmFlN2UyY2U2YmE5ZDk2YzJiY2U4N2I4YmEwZGQ3NjMyMzEwMDFlNTMyYzdkZGQ2MjEwM2FiZjcwMTI4OGUxOWRkOGY1MzAyZThmNWQzMWI2NGNjMzM5YmQ4YjdhOTU1NTBjOGExMTZmZDQ4Njk0ODc3MmJkNWFmOGRmZDQ2MDAxYzU5NzY3YjBkNmJkY2UzODNhNzA3ODk5MmQxMDIyZmJjYWY5MDcxMDY4N2I5YWEKK1NJRzogODQxMDFkZDRiNWU4Y2EzZWQ5OGMxZThhMDZlMTFkN2U0MjRiMGQxMmNhNzE0ZWU3Mzc0YjY0YzI5ZDUxYTIwMjFjYzc3YWM3NTM4OWQ5YjBhNjQ2YTQ0NzYyM2Q3ZDA0ZDEyNDE4NjZiMGNhNmVkZDFiN2FjMDE1NjY2YjcwMGQKKworVFNUOiAxMDgKK1NLOiAgNTA0MTRjZjU0OWJjYzU1YjViNmI3NWVhMzc4MmIyZWE3YzA4N2I2YTAxMDYxNzVlNDY5Y2EyY2M3NjRhZWIwMQorUEs6ICBkMGYzMGMxMmU5OTdmOTZlN2FlZWNkMWJmZjZhMDEyZWMzODhlYmY4ZjNmNGFmNjY0ODA0ZDE2MzhlNGMzNDZhCitNU0c6IDc1YWQ3N2U4YzU0YjBiMDVmYjJkMTYyZTdjYWRiOGE3NTI4MDgxYjg2M2Y3NmE0NDFiMzc0NDY5NDEzZTU3MTRlZGY1NGY4MDA0OTZhZjAxNTdjMTdlNDI1NTgzNDE0ZDQzNjFmMjEzNDE3MWMwYjg3YzIyY2U2ODIwYTQ4NTBhYjQ5ZDk5YTliYWRjZTllMzYxMTBlN2YzMDYwMTE4YjM1OTBmODJiNDM3NzFlOWZiYjA4MWFmZTYyMjI3ZTAyNGQ5OGRlNmNkZWMwMjhkN2M0OTQ5MGQKK1NJRzogYjMwOTgwMDE2MGRlNDNhNjNhODlhMGFjYjhhNjA1MDA1OTU4OWIzZWFlY2FjMjBiMjU2ZmVjZTQzODA0MmY2OTQxNWQ4YTU2ODgzZWUzODM2ZDMxMzRhN2ZjMWRlNjRmYThjOGNlY2MzY2UyNzU4OWY2MDYwNTg4MjA4NTdhMGMKKworVFNUOiAxMDkKK1NLOiAgOTNjYjAwZDhmZTljOTc3N2E2ODM2MzFmMzliYTBmNDg3NjE0ODJjZjFjMzY2YmQ4NjNjZjcxNTEwMTUzMjU1NQorUEs6ICA4N2U5NGExZWE1MjU4ZDYxMTgwY2I4Mjg1OTBmZjE0MThhODdkMDFlNzAyNjg2YmE4YWJjMjY5MmM4ZGMzYzkxCitNU0c6IDg4ZDg1MzhkMzE4Njc4MTNkODhmZWY3MjI4ZDQ5YTdlOTUwZDczODM5NmYxMTZkZGExMDI1Zjc5MTM1NDdjNWQxZGM1Njc3YTZkZTRiNGE1ODgwNTA3YjM2MTc4MGI2MWI0M2Y3Nzk1MjYzZGIyMmZmMzQxNjQ1ZjJmNTkxNGZkNjA4OGMyODExMjExZWQ0NzU2YWMwMTlhNjAzNWQ2NmUzMTcwYzFkODJiZmFhMzA1OTZiMzk2YjMyNjBjYzFkMTBkNDEzZGQ0N2ViZTZkYWEwYzMwZGM0MgorU0lHOiAwOTgyNGZhMmRmYmM0ZDZlZjc2YTllNDE0NTk2MTExNjc2OTEzMDU1M2IzZWRmZmE1MGQwNGYzOWI4Yjc5ZmFjYmQyMzdhY2Y3MTM1NGE1M2E2ZTVmZWU3NTRlODIzYjBiMjkwZjk2MTkzMjBhMTNkNTYxMjY5YTIyMTYzOWYwMworCitUU1Q6IDExMAorU0s6ICAyYjRjYWUzODBlOTVjZTY5NGMyNmFjNzk1NzQ0NzM0N2Y5OGUzMWI0YmYwMmQ3NDRlMTMxNTI5MDcxZTIzMDFkCitQSzogIGU2ZmM3MDVhNzljOThlMTE1YjRlMjhkM2FhMTUwNmI3NGVlNzQyNzZjNWZjMTEwOWE3ZjRkODljNmZhZmI4ODkKK01TRzogZTBiODI1MGUyN2I3YzAyOTFkYmM0N2E2ZGE2ZjEyNjg5ODdhZmRmMGExZTkwYmU2OWJjYmM0MzcwODY1MjE3ODMwZDUyMDg2OTNiZTdiNzA0NTA5OWEyMmVhMjdmOTUyZWIzZjc5YTlhMGYxYjVhODdiMTkzNjc3OTA3ODhkMzRjMjE5YzJlMmE2YjgzNDAyMGZiNGZkMTQ5ZGM1NmI1NDRmZGRiYjQyMDcxYTE2MmZjN2NiMzNjMTQ2Y2FjMDVhMzFiMTgzZTlkYWFkYzYxNmYzYWY0NDliMTcKK1NJRzogNTU1ZTQ1NjU2YmE5Y2ZiZjUxNTVkMGU1MjU3NmU1MTk3YWJiYmM5ZGQyMzM5OTNlZWMyYTFlZTdmNmE4NjQwOWMwYjcxYjBhNjYxOTc4ZmY1ZTBhY2RjOTQ2M2RjNDQ5OTA2ZjQ3NGY4ZTc5YmI4NjE2OGJmNzA3NDFlMzRiMDIKKworVFNUOiAxMTEKK1NLOiAgYjU2NDkxZTU0OTk5YmI1YTE3MTVlYmZhMmZlYjE0YTU0NWEzYTQzYzJmZGZkNGJlMGM5NWZjMTE4MTlhZDY5NQorUEs6ICBjZDQyYmY0MTRmOWJmYzcyZWMwNjk4ODJhODAwNTU3Y2RmMzFiYzM0NjRmYjEwMmMzMTBlNmRiZDNhZTIwODYzCitNU0c6IGViNDQxOGJhMzA2ODNlYzc5NTliZGIxZWM3YjI2M2Y4M2U4MWYwNTRkZGNkYmUwYTY3MzhjYTc3NjNlMjQ2OTM1YmFjNDE5MDI2YzIyYmZiZGQxMjM2MzM2Y2MxNjEwN2M1MzUxM2UzZGRmMzRlMTIwODQ2OTYyYzNiZGQ1NGY1YWQ1NzQ5NTk3MjA4ZjE1YThiYjU2NjY3YmFhODk1ZjA4MzQwZGI4OWI4NWM0MzVlNzcwOTMxOTI4ZDhhYmM5OTI2MmY4MzlhZWRkOWJlMmFhMTM4YzkyNTlhZGYKK1NJRzogZTNiZTNlNzFhODk4NTJkZjNjZmZkNzJkNjgyMDc4NjlkZDNlY2ViNDliMWYwMjk0OTNlY2NiYjkzMjQ0NGViZThjOGM2ZGI1ZjBhNWE2N2UyMTk0NDA4ZGY5ODQxOTEzYTVhYzFhNjA2ODk2NDE5YTY2OGY0ZjQ3YzU2YzJiMDgKKworVFNUOiAxMTIKK1NLOiAgNjU3OWMyNDdkZDJjZDAyYmEyZjdkN2E5NTBhMzMwNzUyNjgxZTkyYzBkYzYyOTg0YmJlYTI3OWVhNTIxYzM4MQorUEs6ICAwYjA4N2JlYTFhMWIzZDE1ODA1Y2I2MDRmNGJiOGQ2OGVkZGUyNzRmYWY1MjFmZTZkZjUwYzU1ZjhhZDRhNzBkCitNU0c6IGRmN2M1NTJmZmM4OTM3NGI5NTcxYTYwMjRhOGQwNDcxZDdlYjZiZThkZmNhNmY0MTY2YjU4MWI2NTQ3OTAxNWEwNTY4MTI5MDc0Y2MwNGQ2MzQyYzc1OGNhMThmNzk4N2RlYzUzNmI3MDMzZDVmOTY4MTUwNDM0MGUyMDk4NmYwMjdiOGNmMWYyNjNiZTc2ZGIzNTI1ZDE3MzQyMjk1MGVhOGRjZWRkYzU4NTY0MDkxOGFhOWQyNWNhODljYmE3MDFjMjAyMDE1Mzg3M2Y0NjEwOGM3NzJjYjM4OGQ1NQorU0lHOiBlY2NhZjgwMWFlMGE5MTJlMjFjNmI4M2E1ZjBlNGU4OGQ0YjI3MTM0NTlmZjkzNDQ5ZmMwYjIxYTlmNDE2MDUwMTEzY2JhZTRlODE0ZDIwYzBhNzk4Zjc2ZDJmOWQzMjZlZDgzOTU5ZWEwMmFiZGMxYWIzNTBhNDY3MTIzZjcwOQorCitUU1Q6IDExMworU0s6ICAxOGZiYTYwYzUwMjZmM2M5ZGQ3YWVkYzA0MjA5ZDUyNjAzNjFkZTQwMGUxOTBhZWI2MDE2OWUwNWEzMzY3YzlmCitQSzogIGRmZmYzNDdmM2RkMjU1NTMwYmY3ZmIzNGQwMmJhNDg2ZDExMmJiNDZlOTUwZTJlZjgwZTUxNzAxNGNjOTU3MzQKK01TRzogMzRmMDhhODA0ZDc4MjljYzM5MTRmMDAwY2UxYTMyODhhY2NlMjE0OWM4YTAyMDg2YjlmNjdhZmNjZDgzYTE3OGIwYmNmZDQ5NzBjMDU2OTk3ZGE3ZGMzZDQ3NTYyZjE2NjYzY2VkYzUyZjgyZDcxMDg1MGNmNDA1MDM3OWVmZGFjMjNiZWUxN2MzMzBhMzgzYWQxMzdmNzg4NDczYjJiMDcyMzYwM2I2ZGViMWZkYmY2YzUyM2ZjOTQ4YTBjY2M0ZmYxMDBmYjk0NmQ4NzRjMWY5OTA0MzZhZThjNGYzYjIKK1NJRzogNGJjMDExZTQwZjBmNTljNjE4ZjZiYmUyMzBiNmY3YmMyZjUwZTM2MTdjN2ZhYWI3ZjRjMjFjYjg0Zjc3ZWJhOTk0Y2I3YzJhMWJmMTBiMDFiYjIwMDg0NDk3ZmRmMGE2YWI1ZDliY2QyMmM0YTJjNWE3OGY3OTkyNjgyNTk0MGYKKworVFNUOiAxMTQKK1NLOiAgMDczY2MxNWIwNTM2Mjg1OTMzYjJiZTM5MjUzY2Y0ZmQ2OTZiODE2MTBmNWRkM2FkYWMyZTljYmYzMzhlZjJmNgorUEs6ICAwMGI1NTFkMzcxNTQ0Mzc1ZGFjNWM0ZTk2Y2QxZjAyMTUyMDdlOGUxNjZhMWZlNDlkNWIwYTUxYWMxODQ0M2VjCitNU0c6IGMyODUzNjJiYzhlZjYyOGY3YWVkZjY1NDIzMWVlNTFhY2RmMmNmNjlhODg2Yjk0MmJiOWJmZWQ4MTU1MTA1ZDkyMDlkZWQyYWYyNGYxNjlhZDVmY2Q0NTEzNzBmNTgyN2E4NTExMWM3YTUyZTAzMmM1MDM4NjE3YzBjMDE3MGUyYTZjMjMxZGM0MDFkMTIwNjJlZGIxODYwMzYxMTRlMzg3OTNiNzkwODkwNzc1ODFiOTc4M2Y0MDAwNzEwM2VmMTc0NzI0OTFjMDBlNzEzOGFlY2M1MDg0ZDNjODUwMTA0NzAKK1NJRzogM2FhNTJhODMwNjJhOGYyOGE1ZDZiNzYwN2Y0ODRiNjZjYzM3NDg5NmI3NjYxMjMxMjYzMzNjNTc5NTgxMzE2Yzc0MjgwNmY2MjdiNWJjNTVjYWQ3MDVjYzFkNDc4MmIwNDQwODBjOGFjODQwZjM4YzBjNTBkMzVlMzQ1Yzc4MDMKKworVFNUOiAxMTUKK1NLOiAgZmQ4OTRhMWU4MjMyMjAzYjI4OTUwNWQ1YzY4YzY4NzkxZmZjMGU1NGYyYTg3NTMwZmJiYTViM2EzZjJjYWYwMAorUEs6ICBlOTVhYjU2NTk0NWM3YWU1ZDUzM2RmNWQwY2NjYzdlOWFiYmM4MzhlMjBhMGI2MWM5MzBmNWQ0MWQ4MWE2ZmU3CitNU0c6IDI2Njk2MjRhOTRmMmM0NGEwNWI3ZGMzZWJmOTNlNThhNGJmM2EwMWMyNzM2NTdlN2U3ODc4OTc2ZjZiNmVhNzM3ZmEzZjIyY2M4MzY1YjhiMjIwYzAwN2Q1YjY0MjcyNmE0MDhmZTJmYWI2OWViYjNiZDA3MmIzNDlmNGRjMzM3N2VlN2NjNzUyOTM0MjU0MjE1ZDIzOTg5YmQzY2QwMmNlOTk5YWRlYzk3ODQ5OTNmNGMxOTk0MDgxNWYzOWM5ZTIyOTI0N2Y1MjA1YzM2Y2JhNDRlNzE0MjY2MzY5Mjg5YjRhNworU0lHOiBmNTExMDIyMTllODgwNGJlNzEzZTU1NmRmNGU0YWZhMmY4ODY2ZmU4NjU0MWExYzJhMDkzNGQyNGMzYzliZWIyODBhNzBkZDhkNTI3ZmU4YjdlMGI5NDgyMTRkNWYyZjk2Mzg2MTk5MTRiNzJkNTVkYzE5OGIwMjI5YTg0ODcwOAorCitUU1Q6IDExNgorU0s6ICAxOGVmNDY0ZTI4Zjg3ZmZjZmE0ZDNhOWMwOWEyMjkxMDk1MWI4YzcxOWZkYWNkYjU2ZGU2MmM0YjQwNmRmMDBjCitQSzogIGM1MDY0YzlkNDNlZTJkYTc1YjA2YmIwOWM3NzI2N2RiZDBkMzkxMjhmMWNkYzZiZmE0NTFhMDNlOTNhZjRhNzAKK01TRzogOWM4MjU3MDdkOTM1ODM2NWFiOWQzOGY3ZTcyOGQ2MjhhYTcyMmE0ZjFhMjBhMzhlNDdjOTk5ZmZmOGZjMzI0MTdmYmUwNzJmOTZlYjZhMGUxMWU0ZGE5YjZkZTk2MTU0NDUyODBlOTNjNzdhMzYzNGQzZDJjNjg3OTg1NmMyNDhmOTgwMGY2MGEwZDM4ZGMxY2VhOGI3ZjMxZjI4NmNiMDM3NDgyN2I0YzZiYTE0NGE2Njk0ZjJiOTA4ZWFkNjhkMTgzNDAxMjRjYjU5Y2YxNzAxODYzYmQ0ZjNlZmM3MDlmMzYyN2EKK1NJRzogZDFlN2YxNmU4ZTU5N2Q0MjhhZGVhNjU1OTFkNTUxYjU0YjY2N2FmZjIwMjBjNDY0ZjdmNGU1M2M0NzczZjcwNDMzMjQ5YTNjNzFiNGQxMWM4OWMzZmFhODkyODA5MjI3YjlmMjllZjRmN2Y1ZDAyMGQ0Njc0ZDQwMjEzNTk0MDUKKworVFNUOiAxMTcKK1NLOiAgYzkxMWJkZjJmOWU3Y2M1ZmZmMzVjOTZlMTVjYzEyZWFmZDA1YWIwZGIzMWY2NDlmNzQwOGFjZDBjYWRhNzZlMAorUEs6ICBkZTQ0Njk2Y2Q2YmQyY2JlOWIxMWEwZWYxOGI4ODE2NDgwMWE5NjlkNWUwNmVkNDUzZWI0MDA4Y2NlOWE1NzI1CitNU0c6IDc2YzQ3MTI0MWQxNzE5Mjk4NGIwMDM2MjY5NmU0ZDlkNGQyYjdmODM5YzIwNjQxMTdlNTBhMTU5OGYzYTExNzJiMTZjNTVlNTM5Njg2NjA4NDc1MjAyNGYzYTdlYjY4YmIzZmZkYjgwOTc5YTBhZjZkMGY2YWYyNmI2ZjBiYzBjMDM4NDQzM2JjZmQ0NGM3NWViNjU0YThhODIyNWNiOWM0YTdmYjNjODI0YzNhZjYxMjVmZDQ2ZGIyODdlNzA0OTJkMTU0NjMyY2I4ZjYyNDMyNjU5ZDk1OGQ2MjgxZDA0YTU0ZjVmNWYKK1NJRzogZDU4NGI1ZGEzNzFhZTRmNWM5ODU5YjI1ZjcwZGM1NmMxYjdiNGUwMmQxYWU2NjM2MjgzYjFiN2IxMTIxN2FmZGNkZjY1ZDFiNDljYTJjOGVmMTc5NjZlOWJjNjVmMTBjMzEwYjc3YmI1ZGY3YWZmNWVjMWIzNzlhMmNlNTVkMGQKKworVFNUOiAxMTgKK1NLOiAgZDM3MDMyOTljNDFkYjM2ZDc3ZGQzYTQ5NTQxZjNmYjIxZDBiMmJhZDFmNmUwNzRhZmZkOTZmMWM0MGQwZjkyNworUEs6ICA4NjJjNWVmNjE2YTVmMDY2ZmQ4Nzc1OGE1NmFiNDUwNTZmZWE0YmQzM2YwMDhiZTI0ZjdiNTQwZTA5NWUxNDhlCitNU0c6IGFjOTJlZGJlMjIyNTdiYjA2ZDk0YWE5NTBlNjJkMThjYTJhYzBhOGZjMTA2MDAwZDIyMzFmOGExM2I4ZDdhMjA5Y2NkOGNjNDlhNmNkNjhhN2YzNmMwMmZiOGY3MjhkMTU1OTUxNjdmMGJhOGNmZTk1YzhhMWU0MzVmMzI3NTEzMDE0YWM0MjhiNzVkNGY3MmU3YzgzNGRkNzBlMWE0NDhmMTg0N2QzNDk4NDc1Zjc0ZTNkOTMzNGRjN2RjYzRmZWQ3MmJmNmM3ZmUzYjFkNGY1M2Q0Mjk2MTZmMWRmNDRmMTk3MzMxNThiNgorU0lHOiBkZjI4Mjc3MTIxZWFjNDQ2MzAwODRjY2U3NTkxN2FlOWY2YmVjNjVhZjU1NzJkYzMwNzE5YmRlNjYxY2Y2OTZiODViODY3MmRkNDk4M2NhYjMwYmQwNWNjM2ExMTlkN2RiOWJhYmQ1MjJkN2IzYTZiY2YzODg2ZWNkMjVlMDgwZgorCitUU1Q6IDExOQorU0s6ICBkNDExY2QzMzU3NmQwZWZlOWVjNDEzY2NkYWFiZDRmY2JhZmVjMDFhM2FmNGIzY2JlMzRmOGIwNWVmOGI1OWJhCitQSzogIGU4NzAzNDRkZjk4ZGQzYTg3MDJjNDUxOWJmOWU4YjM1YTlkMTg5ZTc0NmY3MjAzZGJiZjliYmZhYjIyZDZmNjMKK01TRzogMTFkMmMyYTdmMDE5MDk4ODEyNjY5NjQzMWI0YmJjZDkwYWI3YjU2YTMyZGE2NDA0YWU0NDZhYTc2MmE0ZGRjNjYwOTQ5NzE1MzhlZWI4NWJkZTA0NzBhNTEwYmUwZDZkODU3ODBlZTczMGE5ODU0MTM4NzI4YWU2ODE2MTYyMjY4ZGE4NTI4NThlYWVkNGVjNzRjN2FjNjJlNmU3MDk2ZGMwMDJkZjBiZGY1ZmE0MGRhNTY1YjQxZDE4MWEzZjBhZDBjNWUwYjk3Njc0M2UzMTVkOWRiOGVkNDE2MGFiZTY5YzEzYTJiM2YwOWEKK1NJRzogODM0NjBkMTU0NjFkNjcxNzcxMGJhZmQ2YTQ3YTFlYWE5MDBhODBmMmJmOGI4YWFlMjQ2ODc3MzYxNGVlODRiZDYyOGM5NzE3NDc2MzY4ZWYzNjQwY2Y3NjBhY2FjODNhZDYwMjMyYTc2OTYzYjdkNTI1ODhiMTFkYzAwNGQ3MGQKKworVFNUOiAxMjAKK1NLOiAgZTEwYTJmMTM4MGMzZTQ3MjBlOGE4NzA3YTliY2IyNWEwZjU4MjcwZDcwNTljZDc2MjZjNzE1MzQ0N2VkZmI4NworUEs6ICBhM2M3MTdhY2FiMzY2YTQwYjUxMTg3YmJmMzViMmQxNWU5N2NmZWFjZDczNDljMDZlZjFjOTFhYzkzZTkwNjU2CitNU0c6IDEzNTIxMmE5Y2YwMGQwYTA1MjIwYmU3MzIzYmZhNGE1YmE3ZmM1NDY1NTE0MDA3NzAyMTIxYTljOTJlNDZiZDQ3MzA2MmYwMDg0MWFmODNjYjdiYzRiMmNkNThkYzRkNWIxNTEyNDRjYzgyOTNlNzk1Nzk2ODM1ZWQzNjgyMmM2ZTA5ODkzZWM5OTFiMzhhZGE0YjIxYTA2ZTY5MWFmYTg4N2RiNGU5ZDdiMWQyYWZjNjViYThkMmY1ZTY5MjZmZjUzZDJkNDRkNTVmYTA5NWYzZmFkNjI1NDVjNzE0ZjBmM2Y1OWU0YmZlOTFhZjgKK1NJRzogMDk0YmY2Zjk1M2NhMGViNzdkZjQ1MTI5YjdiZjEwZDE5MmNmNmRkZWFlOTRhZDYyMDJiOGVhY2ZiZWMxMTllNTI5MTU3OGZlNjRhMDg0YWU2MDBmZTA3ZWZkYjhhNzgyNjEwZGJkYjBiNDllYjVmMmE0NmM0MzIzNTU1NTJmMDEKKworVFNUOiAxMjEKK1NLOiAgYjJlNjk3YjNkM2VmZWM5NzZlZjMzNjk1MzBjNzkyNzE3YmRiYjQyOGQ5ZWQwYzExZWMwZWE5YjJlNWYzOWY4MgorUEs6ICBjNGQyZTRiM2MyMzZkNmM5YjhjNzRmYTM4NDYxMmM0NzEwZDgzYWExNmFkN2VmMDFmYmI3NDIxZDRmYjNmMGY2CitNU0c6IDdiNDM2MjMyYWMyMTExYTg0MDU5NTEwYzQ4MzYyNTg4ZmNiNzM4MzQyNmJlNWU2ZjYyZjM3MmU0ZjdjY2E4M2M4MWMyMzU3ZjliNTRmNGExNTI5MTA2NWI2ZDQxYWFkMWVhOTNjZmZhNzc2YjlhY2FhNThhZmUyYjUxNjQ0Yjk3YWY5YTNlNTNmODRlNDBhYTZkODYwNTFlNjkxNGNkMDM5ZDQxNzBhOWE1MjZkZDY5OTU1ZmY1MDdjMzNmNzRlMjE3NjU5MWZiMGIzY2Q3ZjAwZWU0MThmMmMyNThhOTk4MWNjY2VlNzJmMDFjODQzMAorU0lHOiA1MDQ3ZmEzODE5N2I4MzI4ZTc4ZGQ4YTEwZTk2NmFmYjdiZDNkNDM2MDgyODBmMWMyNTdkMjVjYTQzYmMxYzA2ZTk0YTU3NDdhYjYyMTVlY2U1NGNkZWZmOGM1NjU2N2Q3MGQyZjkxZjllYzhjMjYwYWExMDgwYTZhYjVhN2EwMgorCitUU1Q6IDEyMgorU0s6ICAxOWE2NzlhN2E5MDVhMWUyYjMwMzhlNmU0MThiM2RhOTdjMzA4OWM3Y2QzNTFlYTA3YmM4ZDFhZjY0ZWFjYzQ2CitQSzogIDE5ZjA4MzYxZjQ2OWI0YWUxZTBjZWI5NGY0N2E3ZGU3MzE3NDEwYTkyZGQwMTNiMTZhZTBkMDUzMmZhNGIzZWYKK01TRzogOTgwYzdiNGQyOTM5MDYxYWM3YjliYTQ0MTExN2ExOTQ4NTY2MTc4MWE0MDgzMDY3YzU1YWNmOTMwMjZjMDgyYTkzY2MxMjRmMDk1ZTFiNGYyYzNmNmMxMzU0MTJhNTA5NjIyOGU4YTA3MWU4YjRiNjY4YmE5ZDk2NDRlYTlmNGRhYmZjNTRhOTg1NmMzZTk2NWU2MzYzMzk1YWI3MDkwMzdkZGEyMjliYWY5MjdjZDAxZjlhZjVlMDM5YWZjNDJmM2NlYzYzNGY1ZDgzMmQyYWI3YzdjYWQzYWQ3YjhjZjI3ZWJkYWM2OTg0MzFhZDgyMzYKK1NJRzogNDM0N2I3YjRmN2MzYzRkZDMxNWI4Mzg0YTBiMGNhZWVkODRiZGFiZTI0YjI5MTVmMTI1MTJkZmQwNDc3MGZjOTk2YTFiZmI3MjlhZmVmOWVkZDYxMTQ0NzA4MWE1MzMwNjE3ZWFlYTFjMWRhYjFiZjEzY2VhODk5NzIwNDkxMGMKKworVFNUOiAxMjMKK1NLOiAgZjAzYjgzNjNlZTViMGVlZjcwMThhNDliYzAyYWRmNzMxZGE1NGVlNTBhN2YwM2I4OGEyOWEyMDgyYjE4OWM0MworUEs6ICAzMTI4N2VmNWEyZTY0MTA0YWI3NzkwYjMxMmYzNWM3YWQ0YWY2YmViMGQ3Y2ViOGE1OGYzNmE1NGNlMjcyYzNlCitNU0c6IDI0MTkxYjU0NjRiMzVhYzdiY2Y0YTM3NWYwMzNlZmJhODk0M2IwOWI5ZmYwZmM0MDNjYTdhYWU3MDJhM2NiZjM5NmM1MTMxYmMwMDgxMzJjZjVmMTI5MTBkNTg2ZGMxZGI5YzA4NDU3NGE5NmJhYmVlOTU2NDJmOTIyMzcxYzAzODJlYzA0MDJhMjZmZWIxNDJlNDE0NmJiZDMzNjBjMmIzNjgzNGZlNDVhZjVlMjg2OGQ0ZDU2ZmRkNTA0Y2ViZjBjMmQ3ZjU3OTFiNDQyOTQxN2M4YjY1YTk4ZTBiMTVjNDY2YzEzN2Y0MTA1MjRmY2U3MzcKK1NJRzogZThmYTk2N2U2YWZhZGY2YTg3N2Q4N2U1ZjVjNTJiYjYzNGI3NWE3ODA0MTk5YTJiYzlkMDI3YjYzYTM1NjU0ZDlkZGQwNjgzMDQ1NTY0MWRiZmI0OWVkY2U0MmUyMGU3ZDQxMDRhMDcxYzJjYmJlYzIzMDE4YzI5N2NlZDk5MDgKKworVFNUOiAxMjQKK1NLOiAgMTEwODZiMGQxMWU0MTVhYjFjZTAyYWFmOGYwNjIxYjU0NDMwZjZmYjEzNWM3NGY0MGQzOGU4YzY0NzM3MDY0YgorUEs6ICA3MTY2ZGZiYzY5MWViOGMyMDExMTRiYTBkMWEyYzdiODdmN2ExZmQ4ZDBiMzYwNThiMGQ3ZGNhYmUxYWUzMGRhCitNU0c6IDRiNWIyOTM2YzVlMzYwYTM4NDU1NTAzNzIxMDc4ZjhhZGI0MDRhN2VlN2VjYzE0ODAxZGM4N2E2N2ExNTJiNzY5NTY5ZmJlYWMwYWZhMjVhMjA3MGExNjg2YjkwMGFjMTYzM2Q0OTk4MDhjZGIyZTgxY2UzOTE2ZDVhM2MwNGQxOWM1YmIyNjk5YTY2MmI4YWJhNGFmOTRkMzkwYmFjN2NjYzhlYzkxMGVkMmFjZGY4NmViYjcxYWRiNjAxODc3ODg1ZWVmM2M5MTY2MmZjMzA3MzhlMzUyY2M3NDM1M2NjZjhkOGVkZWVmYWNjMDQyYzEwYTBlNQorU0lHOiBlOTA3NDU5ZDVhZGNkMGQwYzM2NDE4NTgxZjE5ZDBlZWJkYTcxMzhlYmQ5ZmFhMGIyNjIyMDFmNDU4Yzg1NjMxMGJiNzdmNGM3ZGU5MjI0OTVkY2ZlOGIyNDhlZGEyYWQwZGY2YTczZjQ3YmJmYjg5NGJhYTdkODg2OTg3NTgwMgorCitUU1Q6IDEyNQorU0s6ICBlZmNlNzY2N2E4ZWY5MTIyOGNhZWQxNGViNDc3YTM0NWU1ZTgyMzkyMzQwODA4NDg3NjBlZDA5NzA3MTNmYTg2CitQSzogIDkxOTMwNTVhODRkZjFlYWNjYTI4Y2UyYTA4YzJhMDdhNTBmMDRjMDI0ZWNmMWZlNGE0N2QyZWZiYWY2M2VkNTgKK01TRzogYWExYmM4MGQ3YmNjMWQ5NGEyM2E1N2NlZGY1MDI3NDgyNDc3ZGM0NmI4Njg5MGJjMGU1YWMyOWFlNmM5MWJiYzQzMTMwMzQ4Nzk3MzA1Zjc1NTQzNTgwYThhMDY5YjM0OGE3YmQ4ZmMzZTAxNTIzMGI3YzE5NDBjN2Y4MGE4MmIxMjkwMDkxMGRiY2YwNjMwZGEwM2YwODFkNDRjN2Y5NTVkNGExMTcyZjU2ZWNjN2M1YWM2NDY2OTZiZmZkZjRlYjZkODhiZGQ5Y2MzODQzNTI4YjcyNTgzYWJiM2JhZDAyZTU2ZWY3NjQ2ZWVkNTEzOTU1MWNkZWIKK1NJRzogZTVhNjMxMjRkYjE2OTZiNjQxNDBiNmU5NjEyZmE5NTg3YjNlZWY3MTAxMDkzOThkNDRiYTBjYTYzYzBlYmFkMDZmMGE2Yzg5OTRlYTM0YjNhMmFmOTFhODliZjQxYWU2MTRkNzcyN2Q3MTZmZDQyZjhiOTJlMWFjNjRmZGJmMDMKKworVFNUOiAxMjYKK1NLOiAgODhmY2NhYTk2YWQ4ODRkMTE2NWJlNzFkZDBjNGY1ZjhmNDQyMWM2MGZiZmE0OThiZmVlOWI5Njc0NjI0NDNiZAorUEs6ICBjNzVjYjBlMDIzN2I0NWI4NjU2ZWVhOWYzZDFhOWQ0YWNkMDFhMTAzYWEyNjliYjI0ZmQ1NDEyMmZkODFmMmFjCitNU0c6IDlkMGVhYzk4NTU2YmZhODY3MmMzNTcwNWQxZDYxYWM0ZDBmY2ExOWRjMGQ5OTMwMTU4Nzc4NTdkMjdmZDgwZjc0YWNhY2U2NjZjNTYzNDg1ZDgxZTUzNjAzYTZhZWY0MDg3NWZhNTUxY2MxMDVmMmNjMTBiMzk2OTQ2NzljZGY0YTZiMDczYmM4ODY0NWZjNTFhMzZkYTE3OWQzZDFlM2M3NzIyNDU0YzVlNzM1NzdjNjFhYTdkMTQ4YzRiYTUwZWE0NmM1NmExYzNiM2IzYzQ3MGY5MzEwMDQ5NGUwOGJjNTUxNGFjNzYzYTg1NDgzYzQyYzdjZGMyN2MKK1NJRzogMjdkM2ExOTdjYzk5OTQyMTIwNjNiY2U4ZDc5OWU3N2I2ODUzYjczNTVlYmUzNjliY2YxODg5YTQxOGE4MmNhYTNhNzk4N2E2NjNmNjIxZGVmZTg2YjNhYzRhZDQ0ZmFlZWQxNmM5MTE2YWNlMjhmY2NmOTE1NTU3ZmE3Nzk5MDMKKworVFNUOiAxMjcKK1NLOiAgNjcwYjMwNjI2ZmUzNjdkOGI0NWY0MzczM2Q2ZjI1YjM3ZWNjYmNiNTUxOTYzZjBhYzhiNjY2YjQ4MDQxYzcyZAorUEs6ICA2NWFhNGM2ZDRiYTBhYjM0YmM3NWIzOWYwOTUyN2NhNmYyNDI1ZjUyNDE1Y2RmZmRmMmRmZjI3M2Y4ZWE2MTJjCitNU0c6IGQwMGJjY2E3ZTE4NGQxMGUxZjFmZTQyMGI1MDYzOWUxZDVkZWJhNTJhNzUxMjM2ZTY4YzU5YmI0YmZmOTgwMmY1ZmMxNjVlZDQyZmQ2ZDUzNDY3MGE3YzZmYjYwZTQzMDdkOTQ3OTE1YTI0OGJmMmY5MzQ2NWMyY2I0NGQ4ZjQ1M2QyYzAxNWFmYmM4ZWQ1ODgxOGVhNTE3MjZhMjUxNzc5MzBlOWVhMTkyZWY0NTE0ZjRiYjBlYjRlMGY1ZDRhZTNjNDZlMzU3YzgxMTg3ZjdlZDE3NDczM2ZmZjk1OWMzZjlmYWU2NDg2Y2ZhMTM1NmE5NTY5OTIxMWRlNQorU0lHOiAxYjZiNDM3N2QyYjk4ZTBmOWQyNGFlOGRmZTMwZTIzOTZlMjAwNDM4MGQzNDMxNDg4ZTU4NDNjZjhkMmQ3YTAwNzBhYjIxZjhhM2I1MWNlODRkMmY0YmEyMDlmNzM5ZjkyMmJlYmY3OTgwOTY2OTNmNTYyMjg3M2Q3OWFlNmYwNAorCitUU1Q6IDEyOAorU0s6ICA4MTNjNGRhZWQ2N2ExOTBkNjhiYjYzNWQ3M2FmNmRhNzRmMzJmZGY3YzQ4Y2NhNmU1OTI2Mjk0NmI4ZThjNzFmCitQSzogIGEyMDk1NDU3ZDc2OTcwMjBlMmI4ODRkOTVhOTY1NzhjMmE5MDBhNzY2NmFjMGRjN2JkMzhmMTkzMWQ3OTQ1ZDgKK01TRzogY2U1NGNiMDQ1MGU2ODlhMGRiZWY3ODUzMDhiMzE3NzQ3MmZjZDZkMzgyMDNlNThhMDU5MGIzMWZhMjUzZjllYTU5MGJlNTM2OGE5MjJkZTg4YjYzNDUwMTAyNjg0NDQzZmI4MTg5ZTYwMTI4MjAwMzMyM2I4OWM4MWU5MmVhZWYyYjVkZGM0YTU1YzUzZmEzY2ZhZDQxNjAyNDhiM2MyODZmZjgwZDMxZDE2MWI3YjhkZWU3MTM1NTJiNTZmMTUwN2ZiNzJlYWRmYTg5MDU0ZTlkMTYwMGFjODc0YzRiMGE5NjEwMDRlYjZkMGQ0YmZkMmVjYjljNzM0ZjAwYmEKK1NJRzogYjQ0NjU3NGZmNmE0YmQyYjU3MmU0ODdjNGFiNDQzY2E2NDEwNzUxNjhhYTRlMTA5MmY3MWYzMGJkYjA2OGNlNDZhMzk1ZWZlZTFlZTY2MGI5ZmFjMjZkNTQxMDk3MjJjMTVjZGI3OTFiZmI4N2ZmZjYzYzY1OTZhZDRmMjI3MGMKKworVFNUOiAxMjkKK1NLOiAgODQwMDk2MmJiNzY5ZjYzODY4Y2FlNWEzZmVjOGRiNmE5YzhkM2YxYzg0NmM4ZGNlZWI2NDJiNjk0NmVmYThlMworUEs6ICA5OGJlMjEwMDE5OTNhN2ViMWExMjc3ZmY3NGMxNTUwNDE4M2QyNWZkZmNjMDVmMGQ0ZGVhODkyZjZlMzAxODkwCitNU0c6IGY3ZTY3ZDk4MmEyZmY5M2VjZGE0MDg3MTUyYjQ4NjRjOTQzYjFiYTcwMjFmNTQwNzA0M2NjYjQyNTNkMzQ4YzI3YjkyODNhY2IyNmMxOTRmZDFjYmI3OWU2YWZjMzJmZjY4NmI1NWIwYjM2MTcyMThkY2YzOTMxNmI0YjY2YjNjOGMwZDY3MjY3YTg2ZGI4YWRmMzc1MDgwMWJjZjkzMjdkNGMyNTQ0MWI5NjE5NzgzMmI0Y2RlMGVhYzNmZjIyODkyYTJmMGJjMTdjMmMyMTNjMDIzNzdhMzMzZTMwOGVkMjcxNjU4MDQ5MzgzYjdlMmU1N2I2YjhiMTI1NTEyZTAKK1NJRzogMGFkNzFiMDAyNWYzZDlhNTBkYjMzODQxNGQ2ZDY3MGU3Nzk5YjcyNzBhODQ0NGY2YWU3ZjEyYWU3ZWI3MWJkMDNmZmQzYzRmMzY2MzFmNjlmZGNjNDA2MTQ2OGZmNTgyZWRlNDk1MjQzZWYxMzYxYTNiMzI5NWZhODEzYmEyMDUKKworVFNUOiAxMzAKK1NLOiAgNjI4ODcyMjAzNWQxZWE2OTliYzdjZmRmMThkODk2MjU0MjMxODBiNjgzZmE3NDYzOWY0ZjMwZjE1MzU5Y2M4NQorUEs6ICBlMTdmYWEwMTk1NzI4NjFhMDY0ZTFiYzU3MTI1NmRlYTE0NjhmM2E0ODU5MGE4OTEzOGFhYTg1OTI1MDgwY2Q3CitNU0c6IDhiNmNhYWNhYzUxZDg5NDlmYjg2YWNiY2IxYjk5ZDg1OWZmNjdjNjQxNDdiYzEyMTY5MDlkY2FiMDdlZTZlZjA5ZjQwMzg2MzMyNzM5NDY4OWRjMzRhYmM3NzhmY2I1YzFmNTA5MWFjZjVhMDhmOWQ4NDIyMTFkMWFlMmViNDBiZTliYjhkNjY3OTA3NzQ3MTU0N2E2YzcxZmY3N2I1MTlkNGI3MTA4ZTMyYmM0NjI1MWM2MGRlZThlMzMyYjYyMjkzMTZlNmQ1N2MyMmFiODI2ZmYxYmMzM2YyYjAyMTM4MDdjMTkyODBhZjExMGZkMjZlZTI3NDY4MjAxY2ZmNDljYgorU0lHOiA5ZGVjOTJiNmU4OWFkYmU4ZjRlMWI1ZTkzYWM0ZmNmOTU3ZGU3ZDE5NzBhMjI2NzcwZWM0ZWRhNjQ3YzhlM2IzZGZmYjI3MzFhMzllMTZlNGEwMTE5ZDM2NjJhOTM3ZTU2MDUyMjQ5MWVjN2ExNjk2YmUwNGMwNzZiMTJlMzUwMQorCitUU1Q6IDEzMQorU0s6ICAxMzAzOGEzYTY1ZWYzMjc1OWE5Y2Q5MDNhY2I1NTRiMjUyZGUwMGU3Y2RiNzdiYmVkMTk3MGIyMDY4MGVlMTdiCitQSzogIGI2YTMwOGU2N2Y5YjQ2YzY2NDk5NDU2YWI1Y2QxMzVjYjJmZTg0YTMyZWIwNDUzNTg2MjY2MDRkYTQxMjJjOGYKK01TRzogZGRmMDBiNDAzM2EyYTA4ODAyMmRhYmU5MzM1NjQzMmY1MGRkYzZjNmUxYTY1OWRjMWE5MzEyNGE0YzJmZmZmZDE4Mjc2NWEyZjU2YzQzZWEwYmZkOGRlODAxNTA2MDg4OWFlNjk0MWMzZjNlMjU1ZDQ0MjFhMWMzNjIwMWJlODQ2YTI3MzhhNzFmMTIwY2FkNTk4Y2E4NTI3ZDcwZmY4ZDVhMDk5M2I1NWNiNTE1MzUxNzExMGE0MTk2MmRhZmY0MjI1MDE1OGYyMDk2ZDFkZGFmNzE4NmU1MDI5OGNiZTUxZmNiNDI5Y2JlYTQxMTI5M2Y4YTdiZDljZjA2OWZhMjM3ZTQKK1NJRzogNTI2MTU1OGVjYzNjOThmZjM2MzUxZjQyZjUwNGNhZDRhMzJmZmRhNWE3NDQ1NjA5NjBiNGMxMDZlNDQ5MmYwMmUyMDQ3ODg4N2FmZWU0Zjc3MGYwNTU5N2E3ZTM4OGNhY2VhZTgwNWFlMzUxZTBlNDVlOGU1NzhlNmE2ZmYyMGMKKworVFNUOiAxMzIKK1NLOiAgYjlkZTViMDYzZDNjYTNhNzczZjExNDk0MWIyZTQyMjdjMDc1MTFjMGY1YzA2MDE3YjljODg0NTAxOGYyMzQzMgorUEs6ICA1Mjk1MjQzYzg2NDZlMDk2Njc0ZGRhMTU5NzliMzIyYjlkZDBmYWYyN2QwMjRhMGVkNTc3MTMzNGUxMTc5ZWQyCitNU0c6IDk0OTNjYzIzODk2Yjg0MDk2MDQ2YWUxMDUzYWZlMzk0OTllOTQyNDI1NGIzNjZmZTE0M2Y0ZGEzMjFlMmRjOWU0Nzg0MjA4ZTEyYTU0MmQ4OTk4MjhkZGU3ZWZmNjI1YTdmMTI0MTY5OTBjMjg0MWZmYjA5NWJmOTRjMGM2MTBlNWE2NjM5MThiNjg5MDMxY2NkNmI1MTkzNDlkMDRkZTFjMjEyY2EyYTlkN2FiZjUyZTFiNGZkNDY3YmI2NjViNjkxOWVmOGY5MTYxN2UyMDU1NjViZjU2NjQ3ZTVmOGQ1MDhlYTIwMGE4NDQ2N2Y4ZmExMjJlNzRiYzNiOTk3OWYxMTc0ZTUKK1NJRzogOTJiYTc2MGQxNGQxNDE1Y2ZhZjIxOGNhODQ3MDE0MDg4YWU1MWFkODIxMTEzYTZmODYzMDM1NmY3YmE4NWMwMDVlMjMzMGYxMDY2ZDBkZjQ2NDgwNjA1MmE0MTc0NjEwMDUwNDYyZjNlMDEzZDcwMmU3Yzc3MTg1YTAzMjU4MGIKKworVFNUOiAxMzMKK1NLOiAgOGZmMDI5N2NjMDg4NDJiNWU2NzU1MmVjMjg0M2UwNDM1M2EzNGQ3NGVmODliODU2NWQ5NzIwNWI3NGNhMTMzYQorUEs6ICAwZjdlZjk4YzViYTRhZjk4NGRmYjc3YmM0ZTUzN2IyYjM5ZTYyNzNiYjNlN2I5NWZlMWI3ZTY3ODE5NTJiZDRhCitNU0c6IDJiZGMzYTQ4NmM1ZTRlYTYyZGNmZWM4YTlkNGZjZjllYTk0OTBkYmNjNzE1NjE1ZDU4NDkwYTcyY2U4MzNmYTIyMzg3Y2E1MGEwMDUyNTA4Y2YwYWZmMWNhNzI3ZjBmZWQ0NmZmYTdkM2M4ZTIzYzViYjAxZDQ3ZTkwZmYwNmQzODU4YTU1N2Q5OTI2NDgxNTc5ZGFmNDM4NGFlYTUwZTk2ZWM2MTVkMmEzYmYzYzExMjJmMWYyNGRkNmVkOThhNWRlNDIxODgzNTg5YzIxMzk5OGNhNTQzMjM3M2U2OGJiYmU4OTQyOGNhOTg4NWQwNTkzZDVlNjIxNTExNmI4MjY2Mzg2NDUyYgorU0lHOiAwNzgzNzM3ZjcwNmU2ZmYzNjYxNGY4NTAwNzRmY2ExZjQ4NWYyNGZjZGUyYTI4YWY1NDRmMzdhYmQ2OWI3YTU4MWRlZmQ4Yzc3MWIwMzFlMTA4ZDE5ZDc4OGM3NGM1ZjIwYmIzZjFjMjFjZDkyYmUzMTdiYWNkOGY2NTBiNDkwNQorCitUU1Q6IDEzNAorU0s6ICAwNTBkNTUzZDI4MmRjYTMyNjljODNjMTgxNzY4ZWMwNjdiODFjOWZlMGM5NGYyYTBlYmJiMGM5NDJkMGZjZDdjCitQSzogIDYzZTIzMGIwMDNjNTNhNTY3MmU4MzJmZjdmMjQ0MzBiZTIyM2U0OTdkZTg0MDIzM2Y1OTVhM2UyMDBjNzEyN2UKK01TRzogMTVlMTNiOGMwMTAwNGY2YWE1YjIzNmRiYjI4MTY3N2Y3NDZkODFlNTQ4ZTBhYTgwZjBlNDE0NTIxNTIxZDg1NmNkNjk0ZTdjOTE1MmJiNWU0Mzc3NmI2MGY2YjU2MGVkMWFkM2U0YjM5MGRiZjNlNDZlZjkyNTc0NDNmMzljMTQ5ZTAyNDBhMDJkMDIxZTFlM2Q3ZDA0NmIyNmZkMDA0ZWVlN2NhMTZhODA1OWUxMjZjNzRjYjNmMjE5NGRiNDdiZjYwNDY1ZWNlZjVjNzA0ZDJlMmM3NWUyZTUwMDYwZWEyYTMxY2I3MmI3YjNjNmIxYjVlYzcyYWIzODAwNDA4NTI4MWEyMmZlODYKK1NJRzogM2YwZTgzNzY1YjMxYmJlOGUxZmI5MmU5Njc4ZDZjZGU1NzFhMDNiYTdmMWRjYzExMjg0NjFmNzA4NTI1NDU3ZjRlMGUyMzUzYWEyYjU5OGMwNjNmZjFiZmZkYWM5MTZiNWEyMjAwNjU1MTU2OTA0YjA1ODU1NzdhMTYyODU2MGQKKworVFNUOiAxMzUKK1NLOiAgNjk0OTdjZDdiNGU4NjhjZmEwMzI4ZDkyYmQ2MDUyZDc3MmIyNzY3Mzk1YzE0NTk1YjI3OTg1MWE5Y2RkMzFhYQorUEs6ICA1ZDI3NmQ2MjZlMjMwZDE4ZTdiY2Q2MTE0MWNiOTNjOTBlZjBmNzllMDEzMjEyMTJkODM4ZWM3MTQ1N2IxYWFjCitNU0c6IDUzY2QwODBhMGM2MWYxYTA5M2QzYjNhNzQ1NzFjMjk2MzAzZjM2M2I0MTA3ZWRiZTg4MGI3YWE5ZGZlNDRhYjVkNWRjNWY3NGJlOWM4ZDg3NmYwNGQ3NTQ2NTM0OTFhYjUxYjEzNWZjOTUzZjcxMjg3YjYyZmY0MWI2N2M3NDJiZDM0NDU2NzFhOWQ0ZjJkYzE3NGNhMWIwMzM1Zjc4NjI3YTBkZDRiMzA2NTA1MDQxNzgwMzllNzM5MzYzODUxMGZmZTg0MDkxYjU3Mjk4ZDNhYzkwMDFjMzY3YzE0NTJmYmNiMzNkYzU0YTVkYzMxNmZiMmE1MjcwNzY0YTJhYzgyMGEwYjYzZmJkYzYKK1NJRzogYmVhZmE1ODM0MDk2MDkwOGU4ZDg2ZTQwMzI5ZTNhNDUyM2ZjN2JlNzcwYWRkYjg2ZTM0YzM3NzJmODRjZDlmYjMzOGQxZjNiNjViZmNkYjA5ZjM1YzZkYTM2ZDFhM2FkZjhmOTFmMWZmZDU3ODJjYzgzMDIwNjQzM2EwODQxMGQKKworVFNUOiAxMzYKK1NLOiAgMjE2NWE0ODZiNjEyYmJmZjUyOWNkMDAzNDY5NjRhM2NiOGNkY2ZmYTUxZGMzZDUyNGRkNWFkYzVhYzkzNmQ2OAorUEs6ICA3ZWJjODM5YTQ2NWUxNGY1ODkyNDc2ZTRhMTNiMzk4OGY4M2IzY2QyN2VmNzllMTkzZjg2ZmExNmYzNGExY2UxCitNU0c6IGI3MjhkYTdhMzYxNjdjNjA4NWJkMmQ5NjJjZjYzOTU5ZmFjZDk1YzlhZDQ1NDIwMjhhZmJhOTBlYzljNmMwNzYwYmRhZTkzNTQyOWMzZmViMzkzM2UyZjAwMDQyYzY3MmFkMmNkNzM0OGQ5MmJjMzNmODE3NTFlMjk0YWU5MTcxYjk0NWIxOTMxNDRlZjhhY2I5YTFiZDlhYmYwNDc1Y2UwZDBhYzc4OWIyMDBjMzJlOWM5YTI3MzZiMTY4MzY5Y2U1Zjk3YjFlOGQyZTc5MDBlMWE3NTkxNzg0NDFmMWZjNDMwNTY0YWUxMjliYWU3ODU3NzQwNTExYTY2OGYzMmMwYTNiMDc3YTlkOGIxOQorU0lHOiA3ZWM2ZmJhNTZiYTUyNDYwYTFiNGYyNzM4Njg5YzE4ODNkZGE5YWFmZmM4YmRlMTdjYjYwMjliZGNlM2EwZWJlMmZmZmRhNTU5MzliNzBiYmQwN2ZkYmY2ZmM1Y2RhODdmZWQ4YmE1ODU3NWY4OTRhMzY2ZTQ1ZTU3MDVlZWEwOQorCitUU1Q6IDEzNworU0s6ICAxYzY0YWQ2M2RkMTQ3MDM0NTk4ZTEyOGY3NDA2ZWMwNTMwNzQ2ZWExYzViNzJlY2Y3OWU4ODgwNjU0ODZmYTFiCitQSzogIGJhYTZiY2MxYzNkOGQzYjExZmZjMTU4N2FkZGRjNThiZmQ5NmMyYjk5MmI2YzZmNTlmY2M1MGNjYmNkZDBlYjkKK01TRzogOWViZDhlMzM3ODkzYmIwNTNlZjJiOWUzMjY5ZGY1NDg0ODQ5NGYwM2NkNjM1NzZiMzNlNjRiMTA4MGJlNGJlMDE1MjY0YTQwM2ZiOTYwMmJiZjkwY2ExOWIyNDFhOWI2Njg2MzkwOWI5MDA4Y2UxYjJmZmNmMjM2ZWZhNGMyNjY4ZjBmNDdkYjlmZjVmYTE1N2Q5Y2I2MDU0MTJiZTdkZDhiMDdlYTg3OGNjY2FlNmJmNTBmOTM1Yjg2ZDE5ZTFiNjQ4YjY5ZTUyODU1M2E1NmQ4YWZiNzgyMjFhZDUzMzA3YjdhNGVjOGQyZmQ0ODYxYjU1ZGM1ZGFlOGU5M2VmMzg3ZmJiZTBiNGNlN2Y3ODgKK1NJRzogNzQ3N2U1NDE1OGYxM2I3MTI4YzBhMTEwY2E2YjY1ZjQyNTE0ZmI3MGNkNWNmMjhhOGIxY2M2MTEwZWEwNmZjZjk0MjkwZGExM2Y4NWExMWMyMzUxZDNiYmNjYmI0YzY0ZTAyMTVkNmQwZjAwOTllN2YyN2JjOTRlOTQ5YjE1MGIKKworVFNUOiAxMzgKK1NLOiAgNTVhYmJjNWRhYzQxMjgxMzRkYzhjNjAxOGEyMTNlZDRiNjBmY2M4ZTkwY2JkNDFkYjJkMjFlZGE1MzczZTkzNgorUEs6ICAyNTFhZmFhMjY0NjkyNmIyYTM3MWYyYTA5ZDU4NjViOThjOWE1ZWI2Y2EwNDdjZDBkOGVlMzZlNWUwNDE2OTc0CitNU0c6IDQ3MDEwZTEzOThhZDU1ZmFiZTM3MWRkODY0OGY3NjhkOTBkZjRiOTY1YTNiMzk2MTAwYjMwM2I0MGExNzUxOGJlZDZkODZiMDlmNzM0YWI3YzEwYjVmM2EwMWI1M2RlZWM1Zjg1MzRiNzBjNzlmM2YyOWIyODRmZGVjNDg2ZjIyZjQ0YzIyY2NkNWM2NDYzNTk0NDE1MjY3YmFhNjExZjcwYjFiMzE2Y2FhMWI2OGI1ZTBlOTliMzFjNWJiMGNlMTM2NzlhMjNjMzFhNjM5OTk2OTgxNjRjYmYzN2QxMDNiYTkyNDkwMTg4YmU1OTkzN2YxMjMwNDNlYzc4NmVmZTNkNDExZjliMDYyM2E2YWQ5NzIKK1NJRzogZjZhNjFjMmU2NjFhOWViN2JkZTE4MmUzOGVjOTlhZjk4NWY2MTY5OGE1ZDdmYTQzMGQxNmUzZjFhOTM3MDliNzU1MjIzMjBkZTQ4YWZjYzU5NWFiMjA5MTIyYWUwY2UxMzJjZGY0YjAzOTE3NDZlN2ZmMzQxMTc3NTcwYzgxMDgKKworVFNUOiAxMzkKK1NLOiAgZjJkY2Y0YTFhMGQ0NmRkYjJkNzJmOGZkZDgwYmJlYzViN2RlYTU5MTNkYTQ5NjZjMmY0ZDEyYzI2MWYwYmY5OAorUEs6ICBkMzk1NzBhMjVjYTU5ZjIyNTdmOTNmOTY2MDBkZjRmNjNlNjg0YmY2M2FlOGRmZmQ5MTRlNDYyOWMzZDUwOTVmCitNU0c6IDNiMDBlODA4ZmNhNGMxMTY1MWQ4NTNkNmI5MGY5NTJjY2Y1NjQ3ZTEwMmQ0ZWUwYWQ3YTVkMTgxZDViNDI1OGM1MjNjZDM5ZTNkOTgyNTI5OGQ4NGM4Y2JhMDlmNDNkYmJhMTE5OTg4MjIyYzc2MDU5Y2FmMTdiNGJmOTkzMWM0NWU2MTc0NDhhZWFkZTE1MTE4MTQ5N2IyNDU1MjM2N2U1MmJjNDVhYzc5MDg4ODA2ZDMzNjgyMDdhYWZlZmQzMDU3ODQ1ZGNlODE5ZDVhYWFhNzdiMjE4ZTJhZWQzZGE3NmQ0MGMxZjA3Njk5ZjgxNzJlNGE1YzgwM2Y3YTJhY2ViOWE0N2E4OTUyZTFiMmYwNTNmMgorU0lHOiA0Mjg4MmE4MTFkYWQyZDg1MTg4NWU0Y2JlOTA0NDcwOGQ5MWE4NmYxNWRmYTFkNjZjM2ViMzA0MzE0NTMxZjMwMTUyMDhjNzExYjliZGJjNWZiMjMzOTUxZTU2OWI1OWQzNGU0MTVlZWM0YjM3ZmZkMzc0ZDQxMmM5YTM2MGQwYworCitUU1Q6IDE0MAorU0s6ICAyMjQ2YmZiMDYxNTU4NTllMTBhNzQ4ZmY4ZjU5MTlhZDVkMWRhYWI3NTZmMDEwNTdiNzkwZDA3NDc0Nzc1ZjRmCitQSzogIGZhNjM0OWI2MmRjOGM2YTJmZWVlZjZmZmMzM2FlMDg1YzY0OTc5NWMxYzlkOTg5OGU3NWMxM2FlMTYyNWRiMzQKK01TRzogNjNlZTFjN2JiYjE1Y2ViZTFjMjI1MzJkNDgxNjgyNzU0YmRhZjU4YjhiYzk5N2FlMzBhMzRjOWQyM2MzM2YxNjkwYzM0NmFiMGE3MzY1ZmY2MjQ1NzQyNGI2MTA1Zjg0MjFlY2EwY2UzYzYzMGFjZmViOWExY2M0MTYzOTBlZGY0OTIwZTIyYjIzNjdlOWZiNWQyYWIyNWJlZTU2ZGEwM2VhNTVlM2Y1Nzg4MmQ0OGI4OTIyOTMxNGQ3MzRjYjgzYzc5ZjRlMTdlZTY0YmFlNmY3YWRkYmU5YjUyNWZjZDAzYTkxNDA5YTJkZGU5MDc3NTFkYjhjYzk3ZTA4ZDBlYTg5YzRkMTg3MThkMjZkMGI4OTdiNjQKK1NJRzogMmJlNDkxNWEzNTJmNzc4NTQ4MzA0NmQ4YWU5NjI1YjhiNjMyNTdhZjU3YzA3MzY5MTI1NmVlMDc2ZDZlMWI5NzJhMTAxZjU1MWM3MDVkM2Y5NjE1N2MzM2I1NmVhMDQ5YmU0YWY0ZGM1NjFjYmUzYzFlYzUwNzJkN2YxMzRlMDcKKworVFNUOiAxNDEKK1NLOiAgYzA4OGEzZGQyY2I4YmQ1ZDY4NGRiODUzOGRjMjI0NzNiNmYwMTRmNjRmZTg2YWYxNjhiNGJiMDFiOTBhMWRkMAorUEs6ICBhYWQ2MTVhOWMyODc1OWYwM2QzNzNhYmU2NjY2OTFkZWFkOGI4NGY5YjhiNTBhNjdmOGYwYWE0YTcwMTU4MGQxCitNU0c6IDc0OTA2YWUwNWE1YWY4ZTk5NjhiNmZlYjQ5ODU2OWQ2MzQ1YTI0Zjk3MTFiZWZiMTM2ZTZjM2I1ZWQ0OTMzOWU1OWE3OTM4YjRiYTFhMTE4ZjE2OWI5YWNlMGY3ODQyYTI2YTY0NWYxNGMwYWQyMmViYmNkYTkzZTY3ZTRjMzQ4ZWZjM2Q5ZWNiYjE0MTllNjI2MmQwNDM2YTU4ZWE4MmMyMjAyMzg5MDY1Y2NmNjdjNGY1NTBlNDViNWY2YTEyYTZjMDExYjJlMGEzMDEwMWQ1YzYyMzI4YmJmOTljOGM5NTU2M2E2ZTMzYmRkOWNjZTcyYjFmNzIwMTM5YzJmZDNlMDQ5MTMxNDZhZTViYWM1Mjg4ZTBlM2UKK1NJRzogM2JiNDU5ZDFhYzU3NWExODBjMTcyOGQ4Yjg5MjQ5NzA0OTJhMGM4ZDJhMzc4YzI5ZDFkNDE3ODVjODM3OWE1OGUyYmEzNjA2Nzg1ZTFjNWRhMjllNTUyNzU1MmJjNmRjODlhMmI2OWMyN2ZlNTFlZDI1M2E5ZjNiNTY1YjI3MDAKKworVFNUOiAxNDIKK1NLOiAgNDU2NjdkMWU3YjU5MTA5NzljNGEzMjgzMTc5NjgzNzFjODY0ZDU2NGE2NjFjNWNjZTU1N2M5ZWNjNjFiYWI5ZQorUEs6ICBlZGNkZjVlMWExNzBlMDBjOGM2ODdlN2U5YzE4Zjk4OTNiNWZlNDk1Y2QyOTc3Y2ViN2Y0NDZjMDE0OWFhOWQzCitNU0c6IGNkNjZjZWM0NzZjODdjOGRiZjQ3ZWM5MWRhYzQ4ZmI1YjQyZGIxMjgyYTU3M2UwYTVjZjBiOTE3Njg5ODY2MDhlMWQ3ZWJkMDVmNTI1MWJjZjhiNDdhMTcwOTMyMjlhY2VmYmQ0NGJlYjIxYzBjMGM5MjhkZDNjZDNmODk2NmVjY2U2OTEwMzMxYzUwOGVhNzZiYWY5MDRkOGMyMWY2YzE3YzJjNThkMDBhZmQzMjU5YjhiZjc5NGMxNDZiMTJiOTk1Y2RkZDFjNDI4OWM1YmUzMTY4ZWJkNjE2YjM4NGMyODFjZTFiMzhhMTBlMTgwNzgwODg1M2M2ODFhNjQwYTAwOWI0ZDJhY2Q3OTM0ZjhjNmQwNzU3ODE2MQorU0lHOiA2ZGU2NjhmMWNhNmYyOTI4MTQ2MjUyODlhMDgwODAyMGM4N2M4OWFjOTRmNWIwNTA4ZTU1N2JkZjgwMDBhNWNhODA4ZjAyMWM5Njc5YjUwZWUyZjMyMDA2NGM5NWE0NjRhODQzOTM3OTgyOGMzYjc2Y2ZhNzY2NDU1ZTEyOGMwYgorCitUU1Q6IDE0MworU0s6ICAyNDg5NzQyOGFlNjU0NmQ4NWIzMTkwZWJlM2YxZjdiZjdjNzEyNTI4YWM4NTFhNTg4YjA3ZDVjOGY5NGVlY2QxCitQSzogIDVmMzQ4ZmUzZWE1YjJjMDIzZDBhZjdlZGU2MGU1NWY5MWFhNTUxOTk2OTlkYTE1YTExYzM3OTFkNjhkNzEwYmQKK01TRzogNTIwMWQ5NzI1ZjFkZmZhMTg2M2ZhNGQ4NGMzMDE4NjExNDFhY2RmYjY0YmUxZmJmZGQ1YjkzODZkYjIwZWYzOTQwOTllZWJjZmRmZWNjNjJjNjI2ODYwN2E4NGQ1NWM1NWNkMGVmZGMzNzJlY2YzMDY3MzQzZTdiMDczMWMyNjg1NDYxZTI0Yjk1M2Y5OTk0OWU1OWJhM2U2N2VkMGYwODQ4MzEzNzkzOTYyYTI5MmM0NTk4MTRjNWUyODY5MGVjMWY0NTE3MWYxYWJhYjg2ZmRkMTQ1NjhiMDBjYWY0ODU4MTExNWVlNWVhODNiMDAwMjgyZmJiZjBjMGIyYTExMTYwMzlhMzVjZmEzZjIwMTQyMjIwN2EzZDQ5NDgKK1NJRzogMWI1ZTc1ZGVmNDlmNTFkNmIyZGUwMDhjNzFmYzFhOTA5YmQ0MmNhODEzMjk4ZGNlNGVlZWY3MTc4MTVkN2E2YzA3OGMyZjNkOWEzZmNlMWFiNWIzYWQ4ZWY4ZDQ1Y2RmMmViNDkwMWMzMmVlYTJkNWUwMThkY2YyODMzY2FkMGMKKworVFNUOiAxNDQKK1NLOiAgN2IwNGFjYTdjZjkyNjIxNmNiOTYwYTM4OTA3ODYzMzlkMGE2MTU5Njc2ODAxOTAxMjNmZGEzYjYwYzZhZWIxMQorUEs6ICBjZGJjM2U3MGU0ZThmZDEzZDBjY2UyODUyYTNiOTM3MmMzYTYxNjBjZDZkZWFiYTkwZjliMzAyMmY3MGM5MWY5CitNU0c6IDFjYjA5NjI0YjFmMTRhMDI2MGM3ZjU2ZDhjNjBiNWZlNDU4MzcxMTQyMzI1NTFlZjU5NjYzODZlMGMyYjQ0MWI3NWNmZGI4ZGYyMTg1Nzg1ZDIyY2Y1MjZmYTlkZjdmZDQ1ZDlkODM4ODFiNjZjMWZlZWUwOTEzZTIzODEyMWVlZGJiN2FiNTA0ZGEwYmVlODk5ODAxNjY4NDUzNTAzMTk5MWYxMWJmY2Q5Yjk1NjkwYWFkMmQxOWJkNmE5ZGUxODQ0ZWQxMzYyMzAyZGY0MjE3MjMwYjI1YzA1NTJjZTI3NzUzNGM2NTBjYWU1MjY1NzdmMjVkOGIxZmU5ZjlmZWJjYTJjODE0NjcwZDQ4MDViMjFhZGVmODUyZGFmOTQKK1NJRzogMjVkMmQzNjE3NTFkNTJiNGZlNjZlYTE4ZTRiOTg2NmJkZTNkMTIxYTczMTJmZDllMjhhMWUyOTVlMDg3ZTMxNzZjOTRjODc0YTJlODE2MDBmMjRjNDY1NGY0M2QxYjY3ZDQ3YjY0ODIyNjQ4NTkwY2U1Y2U0NGYzYjVkZGM1MDIKKworVFNUOiAxNDUKK1NLOiAgZWE3M2JmNjRhMWE5Nzg3N2MzYzNlN2NhNDY0NGI3MWFhYTY2MzE0YzhmMWI2NmJhZmFlYmQ1ZWRmYjg4OGJjZAorUEs6ICBjYWFjOTM5MDJlNTc2NGFkZTQ3Mjk0ZWRkNTFmYWExNDYyMDk0MGM2NjhiNWMxYzM5MmE2OTI4MzI1ZDRjM2ZkCitNU0c6IDM2MmVlYzY4YjkxMjg1Mjc4NmJiNGY5YWZmZjllY2Y3Y2IyOGM5ZGU2YjE4NDIyYThjYTk0MGIwZDdlNmRjYjgzYWE0NGJlMGFmYjVmMTgwNmQ0M2YwZTMxZDcxZjkyMmY4NTM2MTVhMjZlMjg3YTI3ZjA4YTA0ZmJjZTNkNDVhMGM2YzMxMWQ0YjdjYjE3ZTQyNWJiZWIwYTZiNDEwYjVkNmRiYjdhYzExZGY5ODUwYTEzMWE2OTFlM2I2MGIwYjIxNGViZTA0NDEwNmU5ODI0MzMyODc1OTUyNjdiMDMxYjVkNGEwOTI2MmRlZDg5MzRmZGZkZjk2NGQ4NjhlZjlhMmM4NDJmODA0ZWFmZGRlZmNiNzFkOWYxNmE1OWJmOAorU0lHOiBiZDg2Y2I5YzcwYTA1NTI3OWE4NmE5ZTY0ODcwOTg4YjhhNzM0NWMzY2QyOTQ4YTBmYWJjZmIzOGFiY2UzYzQyMGI0ZDU1MjE2MThlMTFkMmRlODI3ZDlkZTU2OWY2YmMzYmU2NmFhZDQwNjM2Y2RhYTY0NzYwZGVkM2I3YzIwOQorCitUU1Q6IDE0NgorU0s6ICBiODEyM2MxMTZiMzNiYWQwZGNiYzJjNGRjMDZhM2Q2Njg1MGRhYjM2MGNkYjVhMDMzYzE0ODk1YzRlZTMxYmZiCitQSzogIGJkY2ExNTFiYTMyYzZiYjMxNTMxYjA1ZmRmODZjNmQ3OGM4Y2QxOTM1NjExZDVmZjExMWEwZjAwNjM1YjE4ODUKK01TRzogNzk3MGY2NjY2NjM0NTQ4Yzg0OGJiNTIzMzg4MTdiMjZhNGQwY2E2OGRmM2QyOGFmZmYyMDdjMmQwMjgwNjdhMThlNGM5NTQzMDI1ZjViMDIyOGFhNjkxZTUwODg1MTMxNTFhOTQ0OTRlMTVkMWY1NDIxMDMyOGUwZGYxNTliMzUyYzMwYWFhN2E4NDRmMThhOWY0YzM5NWRjYmIzZmI5ZmNmYmVkMTEwM2UwNzA2ZmJmOWMzNWZlMjY2Njg0OGZhMzVkYzJjZjUyMjdlYmVlODllN2QzYmNmYWUyNzIxYjI1ZmRlYzNkMzE3NGVhN2NlMjY3YTU1ZGQ2MWQ1ODIwMWU5NmJkYTMwM2NmNDE4ZWRmNmUzMmZiOTJmNWRjMWEwYjEKK1NJRzogOWNmMTNlYmEzZGNjMzdiOGZjNzBjY2IyMzI3NDM2YjlmMDg4NTVlNzI2YWE3ZWQ4MmJkNWNiN2RmNDVmZGY5ZWMxZjk2YWZhZDE5M2Y0NzU3MmQ3NzA0NDRiNjViNzRhMzdjYzAzNGZjNTE0Y2IzZjkxYjJkOGFkYTViMDIwMDYKKworVFNUOiAxNDcKK1NLOiAgYjE4ZTFkMDA0NTk5NWVjM2QwMTBjMzg3Y2NmZWI5ODRkNzgzYWY4ZmJiMGY0MGZhN2RiMTI2ZDg4OWY2ZGFkZAorUEs6ICA3N2Y0OGI1OWNhZWRhNzc3NTFlZDEzOGIwZWM2NjdmZjUwZjg3NjhjMjVkNDgzMDlhOGYzODZhMmJhZDE4N2ZiCitNU0c6IDkxNmM3ZDFkMjY4ZmMwZTc3YzFiZWYyMzg0MzI1NzNjMzliZTU3N2JiZWEwOTk4OTM2YWRkMmI1MGE2NTMxNzFjZTE4YTU0MmIwYjdmOTZjMTY5MWEzYmU2MDMxNTIyODk0YTg2MzQxODNlZGEzODc5OGEwYzVkNWQ3OWZiZDAxZGQwNGE4NjQ2ZDcxODczYjc3YjIyMTk5OGE4MTkyMmQ4MTA1Zjg5MjMxNjM2OWQ1MjI0Yzk5ODMzNzJkMjMxM2M2YjFmNDU1NmVhMjZiYTQ5ZDQ2ZThiNTYxZTBmYzc2NjMzYWM5NzY2ZTY4ZTIxZmJhN2VkY2E5M2M0Yzc0NjAzNzZkN2YzYWMyMmZmMzcyYzE4ZjYxM2YyYWUyZTg1NmFmNDAKK1NJRzogNmJkNzEwYTM2OGMxMjQ5OTIzZmM3YTE2MTA3NDc0MDMwNDBmMGNjMzA4MTVhMDBmOWZmNTQ4YTg5NmJiZGEwYjRlYjJjYTE5ZWJjZjkxN2YwZjM0MjAwYTllZGJhZDM5MDFiNjRhYjA5Y2M1ZWY3YjliY2MzYzQwYzBmZjc1MDkKKworVFNUOiAxNDgKK1NLOiAgOTM2NDljNjM5MTBiMzU3MThlNDhjNTkwZDI2MWM0OGU0ZWY4MzM2NjEzZjZhYTA3N2I0NjI2NzZiM2JhODgyOQorUEs6ICAwNmE2ODU4OThiODU1MjEyZWJjMjg5OTE1ZDEwNWE0MzIwZDYyMGQ4NTc3MWI4YzZiMTViZjEwYTFiZTZlOWI4CitNU0c6IDJjZDFhOTUxMDU2YzllYmFlMTM5OWI2YmQyZDgyYzBhZTI3Nzg1NjI5MGQwNjkyMGFjNTZjYWM4ZmI0MjQzNTEwMWM3MmFhOWMwOGRkMmQxMjQyNjMyNTU2MmMyZjBhNDljZDgyMWIxMWI5MzlhYWZhNTkzYjQwOTVjMDIxYmNiNDgyN2IxMDdiOTY2NGQ2ODI4Mjg4OGJjNGE0NGFmM2UzYmRjODYxYmU2YWYzMDkwNDRjM2RhYWI1N2I3NzAyM2RjOTAyZDQ3ZWJjMzI2ZjliZGQwMmRiYzAyY2Q1NDBmZjgxYjJkZGY3Y2Y2NzlhNDExOTNkZmU1ZjhjOGNhMWFhZWZjNDFlZjc0MDI4MGQ5ODIzZTMwYTM1NDcxN2M4NDMxZjVkOAorU0lHOiA2Mjc0ZjJkNGY0MzFkNWFmZmVmYTM1ZTdjZjU4NGE1OTkwMTcxOTNkYTk5MDk0Y2E5MDhiNzVhY2I2MDhkMWJmOTgxODU3YmU5M2E3ZGFmYjBmYWRiM2ZmMDkwNmY0OGE1ZWU5NTA0NTZmNzgyYzJkNjA1YjE0MDk1YmEwZmYwZgorCitUU1Q6IDE0OQorU0s6ICAxYzE1Y2JlYjg5MzYyZDY5NDc2YTJhYTRhNWYzZWYyMDg5Y2Y4NzI4NjM0OWUwZGZlMGU3MmQ5ZTNlNWE2NmM3CitQSzogIDEzYTg4MmExMDY0MTgyNTgyYzIxMTg0N2UxOWI0ZGFjNTk3MjJjOWZmZDM0ODI2ZDk2ZjMzMTEzNDAwZmFjN2EKK01TRzogMDkxYzliOWIxMTZhZTgzZDIzZDAxYTYyOTUyMTE3ODVkNDQ2YjYyMjhkZDY4N2RkZjc5YmQwZDVhNGRhYThjNzlkMmNiZmMzNzM2NWYxZjI4NWUzNjE3MzgxMjNlMzRlMmJjYmZjNjY0Y2UxMjUzYTExZDllNGE3OTgyZTU4Y2Y5NDY4ZTEwMTdlYTE0ZDJjYzZkMDg2NWQ0MGZkZThjYjU2MDI0MWU5NmFjMTYxN2M3OTFmMGNhN2M2NDEwY2FkZjMyODYxMWIxOGFlZjMzM2Q4MzUwYWM0OTdmMGE0YWUyZDAzZmRmMGUyM2U0MjZkMzRmNDUxNDc4MGQxNDc0ZTExMzU4MzU0MWYzYzA0MzY3MjA1NzE3MjYxOGNiMjA1OWVhYWVkNTYKK1NJRzogNTk5OGIyODA4YWRmZGVlYWViZTJjM2VhYzAyNmQzZjgyNWY5YzdmMmFmOTdjYTMyNGZiZDU3YWFjMWJlZGZmNzhhOGVlNjIxZDAzN2VlM2FkMmE3MTJlOWEwMDljNThlYTNlNmYyYTgyOGY3NGI4NmRhMjc1YTQ0YTRiMWU1MGIKKworVFNUOiAxNTAKK1NLOiAgMTEyNDFmZmRmMzRhZThhYjg3NTQ3NWU5NGM2Y2MzMjkxZjBiODgyMGRjODVlMjBmMzJmYzUzYjI0YWU2ODk3OAorUEs6ICAwOWMwNDVlNGJkNTEzNzMxNGMwZWMxZDAzMWZhZjkxNDkxMGM0NWE0Njc2ZjVhM2NkOGY1ODFiY2NjYjAzYzk3CitNU0c6IDNiODlkZWNjYjcwMjNlNGIyYjdhZmYyYzM5NTE4NzBhZjQxM2E5YjA0ZGQ4NmFjNzhiN2M4ZmQ4ODc0OTJkOGRkZTQ5ZDhmZGExNDllZGQ1NDc4MWFlMmI1MDgwMzBkMTQ0MTZhOWEzOGJlZDJiOWFlYmJiYjIwMjUwYjNjOTMxYWNkNGUzMmZiZWVlYzVhMjY1MDFiZWFiNzI2OGQxNDRmY2U4OTUxYTEwMWM0YjUxNzgxNjZmYmI1OTI3YjFkZmIxZTFjZTkwZDFkMTIzMDY4ZTNmNDcyYzg4OGZkYjAxZmRmNzBlN2Y4ZGU5YjBhZGIyODRiNzExOWY1NTM1NDMxNmY4NGVkMDkwMDMwZjljMjY2MjA2MWNhNDg0NDdjYzBhZWY5NjQxMjYKK1NJRzogNzJjZTlmOTFiZTJlNjZjZmM5MGY5NTI1OTU5NDZmZmM5MGJmY2U1MzA4N2Q0OWU1ZGQ3YzA4N2YzZmFhOGYxOGYyMzU2ZGU5NzFlNDQyOWQ5ODVhOTkxOTRiNGY5MmNlZDNlZjQ3Y2Q3MTE0Mzc5ZTBiMzI2N2E5ZjhiMWU3MDYKKworVFNUOiAxNTEKK1NLOiAgM2JkYjE2MjQ2NWVhY2VmZjk4ZDY5Yzg2ZjcwMDM5YzUxN2QxNjhhZWZlNmJiMTAxYjRmNzY5YTg2YjE3Yzk3MgorUEs6ICBkNzZjYjdiZTc0MzI4Mjg5ZmQxYzY0YmU3NDdjY2E1YmIzMDI5NWRmYWNjZDBmMmU0M2Y1MTcwM2ZkNWQzNjgzCitNU0c6IGZiZjM2OGZlYWViYTg3OTE4YjFiOGM3YjhhMjY4MzJiZTZlN2ZjMWNiZGI4OTAyNTE5MjgxYTA2NTRlYzczZGUwYmIwNzEwMWE5ZDYwM2Y3NDVkNGVjMjM1N2FlZTk4NzBjYjE5YTU2Y2I0NGZiZDljOTFmYzM0NzUyNjEyZmJkODNkNmZjMWExNmJmOGE4NWEyMTVkMDE0OGU0YWYzN2QyOTg0NjdlNWNjNDg2YjEzMTM1MmNlMDkyMTgyY2U4Mjg0MTU5YTM4MTJiMzBiYWNiZmY1OTU4NjM4MTFiZjlhMzBhOWRhNDk0NTY1YzNhYzE4MTQ0MzAwMThlYTBlZWVkMzljZGJjYTI3ZjkzMTQwZTQ2OTQ5ZGI1NzBiZmEyZWQ0ZjQwNzNmODgzMworU0lHOiA2ZjEzNjJhNDAyMDYzNzkxZjk1MDk4NGY1NDQ5MjhlNjE2YTRlZjc5YmJlYjY4NTRlOTYxNWFhYjljZGJhZWM0ODNmYjlhMDRiZjIyZGU1ZDk3YTE1YmRhMmQzOTA0ODNjN2Y2MWRiZWUwN2JiNTE0MWZjMTczYjFhYTQ3NjUwZAorCitUU1Q6IDE1MgorU0s6ICBkNWVmZTUxZDVjZDhlMTA4YmQ5MjJmYzBlYTEyNjE5MGE5NDYyOGZmYTUzYzQzM2E1MTgwMjI3OTJkZGM3OGVmCitQSzogIDQyNmIwMWNjNjFmZjVlMGU3MjRkYTFkM2IyOTdmNTMyNWMxOGM2MmY2NGQ1ZWI0OGQ0YTUyMTZhOGU5YTQwNzMKK01TRzogOWQxN2JjZmUyZGZjNzQyZjQxMWNiNTNhOTRmMzU5YzAwMWFiZjA5NmM3NDFmMzRhZjQ4Njc5ZjI4MWU3Y2U2YmJkOWU4NzcwOWZjMDcyOGE1NjNkYjJiOWNmOGVhNGZiZGNjMzQ0YzE4NDhlNjUzY2U5NzBjNmNlMjlkZTJjY2Q1MjAzMDA2NDlhZGNkZGZjNzUzOTcxZjg0NmFhYzFiYTQyYWU0NTI4OTUyZDk0OTgwYWE3YzZjZmEyMTQyOTA3NjQ3Zjg5NGFlOTc0YTc0ZDU5MDM1YTczZWY1NmExMGI2NjEyNjI0ODA5NTIwMTkwYWNlNjYxYzNhNDcwOTVlMDMyMmVmZDc4MWQ1MGQxMTYzNTk4ZjJkYTMyZjMxYmM5YzRmOTEzZDFiMTQ4NjEKK1NJRzogMjMwNmY1OGZjZDRjZmYyMjIyZDgxYjA1YTQ3NTUzMmI4YjE5ZGM2N2U2ZDc4ZGRiNDIwNWEzYjc2MjFjYzVhZWYwYjM5M2Q1ZDI0ZGQ5NmM4OGNjYmM1M2EzMjA4ZGEzMjNiZTQ1ODdkNWVjMDY3YzgyMGYwNzIzYWE0NGU5MGUKKworVFNUOiAxNTMKK1NLOiAgMThhZjg5MDI1ZWJmYTc2YmQ1NTdjZmIyZGZmMTQ4MjQ1MjE0NjQxZmQ1YmRhMTU5ZjczZGEwNGIwOGU4N2M4OAorUEs6ICAwYzU4NDQ1OWI5ZWJjY2NhZDU4N2IyNzIxNjBiYzYwYjI3ZjRmNzcyYjQzMjFkZTc3MjNhZmVmNTc3ZWRjN2I0CitNU0c6IGU4MmY0NjY1MmFiOTE0YWY1MzVkOGZiNzIwYjU1N2FjOTUwMThkOWYyYTNmY2NlODU3NzFiYjQwYWIxNGNiOWE5ODZlMDk2ZjNhZmU1YmVlODI5ZGZkOGI5NzMzNWM1MzZhYzk3MWEyMTY1NWFmMTZhMmY4ZmRiYTE4M2E0ZTE4NTY0YzIxNDkyOTU2NTM3YTQxOWFiYmJiYjAyYTRiYmRjMDE0ODFmNWM2ZTY1OGVjZjNjMzRmMDExYWQ4NDZmNWVkY2Q0OTM5MTk1ZGY4NWU0MTMwM2ZiOWE4OGZkZmJkNzA0Mzk2Zjc1NTlhMzI3MzE4Yjk1MmIzZTYwY2U4ZGRkZTU2Mzc4NTc5MjMyZmFmOTUwYzc4ZTdmMGIxN2MzYjhkZWNlMzZiNzg4YTg0NzMKK1NJRzogMjZiYjA4ODIyOTdjMmMwOGE3NTJkMzk4MTE0NWRjZGU1NTg5M2ExMWRmNzdmOGFhNGMxOWQwYjllZDZlNTIyMGVkMTJlOWZhYzNhZjEzZDBmMGM3MTU2OGY0YTU0N2QzMDExNGE2NTk5YTIzNjgwNmM0YmVlZTY3NjUyODQ0MDgKKworVFNUOiAxNTQKK1NLOiAgMGM5M2Q5OTgxNWZmZjhmZTIyYjllNDVhYTAyYjNlNjQ0NWNlMWQ2YmY1YTY1ZGNlM2RhMTA3YWExMDU1OTQwZQorUEs6ICA0ZDI3YTQ3YjBmYzgwODAwZDg0ZDI0NGVlYmIxZGViNDQzNmQ5NzYzM2E4M2U2NzEyNWFkNTJlYTAxNjg1MDU3CitNU0c6IDExZTg3N2RlNThjMTM0ZWFmNGM5ZjFiNTNjM2RjNDUxZDNjMDU1ZjE2YjA5NjIyNzI1YjI3OTc2ODUxMmZlMTBhN2FkYjA3NjViNjg5ZWMyMWQ1YjZlZmFhMTlmMWI5ZDM2MjU0ZGYwYTkzNjdmNDQxYjI2YmRiOTBiMjhjYmM0MDNlNTA3NDA4MmZhMWZlZDU4ZTE0MGRhYzk3YWVhZjQ4M2UyYzEzZjNjYzU2MGFiZmZhYmEwNWI3NjNmZWVkYjUxZTYwNjk4MTUxY2Y1NmVmZGYxZDM3ZDZjZTA1NjQ0ODYyMTBmMDUyZTkzN2YyZWEyNmY2M2VmYTVkMjQ3ZmYxODgzMjliYjFhYTgzY2UzZjRmMzVhM2Q3ZGVjMTQ1OTllNWZlYjdiNmQ1ZmU0Mjk2YQorU0lHOiA3ZGM0NDY3YWJjZjY0MzFhZGI3Y2NmZTg2OGVhYzhjZDhhNjE1YTBmZjY1ZjZhOWUzMzgzNzViMWFhZTNjNDlhMTI2YzllYmE3OTQyNmQxNjQxYzZiOTdjM2U5MmMxOTRlNWVlNDQzMWVmYTI0MzlmZDQ1MGYyY2QwMThjODcwMAorCitUU1Q6IDE1NQorU0s6ICA5ODllOTk5NDU2MzUxOTJjMDIzY2M1MTg2ZmMyNWJiYWVmNDcyNDA3NzVkMTVhNTYxOTVkODhjZDA3YzM3NDhlCitQSzogIGNhMGJlYWZkZjczMWQ4OTMwMWY3NzIzYzViYjdlNWExYzNmZjNlYWIyN2M5N2Q3MTFiY2Q3NmU0MjA1NGJlZTQKK01TRzogYzQ4NDE0ZjVjNzU3ZDAzYzUyM2VmM2YzYjg1MTA3NzFiMGZmM2I0Yjk3ZGUyNzk2MjVkMzQ5ZWMxODVhMjk5MjdhNjZiOTU5M2JhMTkzMzhjMmY1ZTQxMzFmMWFjMDdlYTQ2ZDJjMWI2ZTRhYjUyMjkyODBiMmUyYmI5ZDE0MGQxZWY3YWY3YjE2OTJiZjJkMDk3YjgwZjgxMWFkY2ZhOTVkNWNiZjllZWU5MmExNjQxYzU1MmI0YmU0YTBkNzM0ZjBhZmQ0NzBiOWQ3ZjRlNDU3Nzg5NTFlMjFmYzUzNGYyMDBhMTI4Yjk2YWRiODM3M2YxMGNlY2VjMmRhYzI5OTZhMDYyZmIzYzI5NDMxNTk2NWE5ZDVkN2IwNzdjNGIwMTNjNjRhMzg0Mjk3NjlkMjNlYWIKK1NJRzogYWVmNzU2YmZiOGE3MjY2ZTE3ZDE1ZjNmMTFlZTUwZWQyNWJlNDIwZTk1YTA3NDIyNzFlYmQxMjI5NGUyY2I5NmVhZDA4M2I4ZmYwYjgyOWQyZWRlYjE0ZGE4NmU0MDJlZjI1ZTZkNGE1YTc5NThjMTg0ZWQxMGMxNzZjYjU3MGIKKworVFNUOiAxNTYKK1NLOiAgNmJkYmJlMDZkOWY0MjE5ZWVhNjQwM2EzNTdiMjVlNTYxOTkyZmFlMGYwZjYxNDU2MWRkODZkMjNkZTQxNWE0MworUEs6ICBlZDUyZGQxY2NlMzJkOWI0ODVlMDk0MDc0NjQyMWQzNmI5ZmRlNmNkZjAyMTE1NDViNjM0MDQ0ZDRiM2NiOGYxCitNU0c6IDU4MmFkYTEzZDY5MjkzZTQ5YmJkNDYxMDMyZGZlYTFjYTIwMjViNTJlMDEzYTMzYTAzODdmY2ZjNWY3YzBiOGVjOTU1OTgyNjA3ZmM5MDFlMWI3ZjYzNmE5ZDM3MWUxZjkxZmU0NzZiZGQ0NDg1NmUyNzVkNjdlZmExNDIzODE2NDM1NGMyMzExMjRjODRkZThmNWI4OWQ1YTU4ZWE2NzQ0YjRkM2IzZDc5MDY5MDUyMzNjY2U2OTRhNjRkNjk2ZjVhNzAyNGZjOTAzM2IxY2UzOTA4OTlhM2I0NDFhNDhlNTNjN2M5YjMwYmExMmU3ZDYxZjM1ZjE1ZTY1OGM3Y2M0NDA3ZTJmNjg5ZWE4YTU1ZDAxYmY1ZGJhY2IxMTk1NDc1NGY5MjBmMDlkYmQ0ODQwOWJiYjUKK1NJRzogOTUwMjA2NjA1YjBmNDE3YzkwODQzZTJjOGQ4ZTY2YzgyOGJiMTBiOTliMzZlZWVlZThjYWYyZTBlNTQ4NGQ5M2ZlMDJiZjUzMzQwNWY0YmI3NGE1MGU1NTg1ZmEwZGFlZjQ4MjFmMDMwMWQwMWI0NjMyMWJhYTMxZTFmMDhkMDMKKworVFNUOiAxNTcKK1NLOiAgZDc2MWM4YzVhOTYwMWI5MTQ1YjdkMDUxMjQ5YjAwNDEwN2U0NTJlNTYzMTAwYzZjNzg4MDM4YzllZThhZGFkNworUEs6ICBlNjQ4ODc3NWQ2NDA3ZWZjN2IyYmNhODkwYTdmYzYyMjY2ZmM1NGNkYWM4OTMzNDNiNGY1OWExOTZkOTQ4ODk4CitNU0c6IDg0ZWFkNWVhYmQyZmQ0YjdjNzlhOWE5MjhhYjhlZTBhMTZhNWZkNjY3YTA1N2Y4YTI1NDY2M2Q1NmRhYWUxNTZkMWE0OWFmZmIyOTk2MTM3YjlkOGIzNDBlNjM1NzMyZjlkMmI0YzYwMjE4NDQyNTQxZTcyZDJiMDBlMWVlN2E3M2MzZjY3Y2FhNDk5ZmE5ZDA3MGI1N2QwNzZkY2RlOTZiMDc2NDcyM2MzYzY1OWM3YTAwYzFiNzhiMTVjY2MyMjIzODkwYjUxMDY3ZmM4MWUyM2U5NDU4YWIwNjgzYmE2MjZhNTNkMGMzNzkzYTU4YTk4NTdiYjQ0YjNiZDg1YmI2Y2U1M2E4NTY5NGU3ZjUzY2MxYmQ0NmQ1MGVkYTM3ZDgxZjUzODFiNTEzZDFmMzgzMzlkMjkxYgorU0lHOiA3YWI3OGI2NGU2ZGIzNTlhMmRjODMwMmUxMDkyZWQ2NmZhNzM2YjUzNjI1M2ExY2Q5MGZkYjhjMTBlZmQ3ODMwMDIyNWUxOTE5NjM1OTliYTU0OWNjODU5MjA5ZGYwZmY2MWNkMDY5YjAzZDI1NGU2ZTdkNzZjNzk4NDQwZjkwNworCitUU1Q6IDE1OAorU0s6ICBjNWUwYzdhN2JiOGI3Y2EwN2JmMGEwNWVhNjdlZmY2ZGVlYmZlMzcxNGVlM2UxYTIyN2Y0ZGM4ZTI0MmEyZmEwCitQSzogIDUxMzVlZmNkOTA1MmJlYzU3YTQ0MzFjYWFiZTgyNjgwZWVjMGEzM2FmZDU5YjMwMjAzYjI4MGJhMTJiZTQ4NWMKK01TRzogMzc3MGE2Nzg2NjUyYzRiNzhhMDQzZWRjZTA3ZjNlMjA0ZDgxOTk3YzQyYWZjMjIzMzFmNzVhNTQ5NGE4MjZkN2NiNjlhYjQzMTRhNDczNzIxMDU4YTE4Mzk5ODFkNWI3MDIyZDBjZDg2NzAzNzdkYWYzMzIwNDc2ZDI1YjlmNTU5NTYxZDY2ZWUwYTcwOWZlMTczNjFlMmE1Mjg5OGY1NzUzYzRmYjQzYmQwYzk4YjM2OGY1MTJhZGMwOWNkOTI3YzY2MjI2NzY5MjZkOGMyZDkxYTE0YWNhMzJmMjI2ZjcwMDM2YzFjODU4YmNmZmMyYjU5ZjU0YzFjMzdiZjgxZWI1MmVjYjNmMDBkYTYwMmM5NDM2MWI1MmE1YWZkZGJmZDdlMDUwMzZlMzc3NTAzMDUwMzMzYmU1MTIKK1NJRzogMmU3ZmRlYjM0ODRkMGE1ZThkY2U5NDQ0ODk3OTQ5NmIwNjQyY2FiYzM3MzNhNTFmOGMzYzVjNTFjMTlhZTMxOTAxOGRhOTEwOTFjMjM4NWYyZjRlOWE1OWVkYmNhMmFiZDBkMDg1ZWU0MGQzZjBkNDIwNjFhNWE5ODMyYTM3MGMKKworVFNUOiAxNTkKK1NLOiAgMTFiYjQ3NDhkMjU0N2U2MTk2YmU4MjNjOWJlN2FhMTgxNTBjMjA0YjEyY2E4ZDczYzFiZDQ2YjExYTU0YjQ3NQorUEs6ICBlZmViNDJkYTI4ZDc2NDk2NjQwM2RkMzAwZDlmOTQ1MWIyNThhYjFjODBkZjA2ZmU1OTQzMTUzZjUzMDFjY2NiCitNU0c6IGY0Yjc2NWIyNThiYTM1YjQyNzUyNWM3ZjEwYTQ2ZjBiY2NkMzU3ZWMxYWQ1MmE1YjEzOTQxN2E5ZDM4OTRjNTEyZDg5ZWI4OGU2ODFiMWYzMGFhYzRjMTE1Y2NmMzY1NDVlODNmMzc4MzRjODJlODMwMGNjMWViMjg5YWY0Mzc1OTY4YzI5YzBmZmVmYjQwZTE1NmMyMGMwNDMyNjY5YWM4ZGMwYTgzYzEzYjFlODU1YTg0YWQwMTMzYzQwYzgyYzg3ZWUxZTdkZDQwODRkNzQxYzgwZGU4YTdhOWY3NzU5ZTg0M2E1NjIwOTljNGQ3ZGY4NzUzNTIwMzlmZjRkMzgyNDY1MTM4NmM5Nzc1OWZmN2RiYTUyMDY0ZTZkMzExMmUwODA4MTlhZWU4Y2U3MjNhMWEyYWE0NjRkOGEKK1NJRzogNDRjNThkYTQ5ZDIzNjVkMjcwMjlkMWVlYmIzYmViZjdjMDMyZDg1OGFhMDdlMDc1NmIxYzI2YTU0MTJkMjI2OTExNzYwMzEzNDFhZDM3ZDdiYjc4NDMyODllYjM5ZGI0OTE1ODRjMWIyYTFkYTJlNGEyNjQ5YzIyOTM4MjY2MDYKKworVFNUOiAxNjAKK1NLOiAgNzQ1MmEwMDE1NmQ3OTRlZGViZmY0YWRiMWY3YTdlZWMyNjIxN2ZlZjY3YzNkMjY4MzUyYjJiNTQ2MGE3ZGMyNQorUEs6ICA1ZjRkYzMzOGNmYmQzODRiNWYxYzE0YzIyNjcwMTQ0NmI1MmIxZTNlMmEzY2JhMWE0MGVlMjgyNTA4MGQxZGU2CitNU0c6IDhjNGVlMjg2NzY1NmUzM2Y1MjY5NDE0ZDc3YjQyZDhlNDc1MGRiYTkzYzQxOGJhY2NhMTA5MzhjYzNiNTcwYzY2MDNkNTJjMjM0NDQ4ODYwN2IyZjkzNGY2ZDI2OWZjYjJhZDk2NjIxOWIxYWIxMTQ3MmY0MmM2NzJjZTIwNTkyNDkwZWM1YmFmNmEyZDJmYzhhM2VlMzUzNzRiMTkwMmZkZWZjNzg3MGIxYjYyNmZhNDZiMTJiNmNlZTI0MWY2MDFhOWIzZmU0YzUwODEyZTU3M2U2NzUyY2UyYzc2NDRlMzM2N2E2YTZiNzc3NThkOGU0OTM0YjU4YWYyM2FiYWU4ZmVjYWMyNWVkZDczNDAzMGVlN2NmMzk5MDdlM2VlZDgxODZhMTlhODA3MTAzYTlmYzQ5ZDM4ZjRjODQ2MAorU0lHOiBhOGY5ZmEyNGEzZGVhMTAyMmU3M2YwZDg4YjFjMzdkMDZkMGYwYjIwYmJmZjBlY2RiNGE0MGM4NmQ3ZTQ3NTYxN2MwMzU3MGE3NDE5ZDc0YmEwZjEzMjcwOTZiZjE5ZjBkMGNmOWY1MWQ0ODMxMTJmMjY5MjIzNzg2ODJmNDgwNworCitUU1Q6IDE2MQorU0s6ICA4ODBlZjEwNjczM2YwNGU3NjE5NWViYTI4MGIzZmFkZGEwZjI1ZGNmOTZhNmE5OWM4Y2NmODQyYzY4YWZkYWU1CitQSzogIDcwY2VlMzNkNDFjNzI4Y2U3YjE0MTkzMWU2ZTg1MjQ1NjdkNzYwMWViNzlmNjdmZGNkMDdiOWQ2ODJjNjUwZjAKK01TRzogZjRmMzhkMDc3ZjJiMDNkYTgyMWJkMzZmZGU2NzNkNjY2ZTUyZjQ4MzJlMWMwZGNmZWVmMDQ5MzI4YWNiN2JkNzFhZDJiZmM0OWMxMjM1MTZlMTk2YzQ3MGRmMDg0N2IzODQ4YTQ1YTJjNjliZWEwM2UyYWZhN2U1ODIwNWI2M2I1MjM4MTRmYzhlMjQyZjA1OWM2OWZmN2U0MGY5N2JlODEyNWI3MGE1NGZkYWYzNWFlYWZhYzc5MTE0YTdiNDE5ZTZiYjllNzBiZjA3YWRiNTU5ODE5NjAwZGMyNWU1MWI0YjcwMGQyN2NhNTQ3MmEwZTdjYmJmZDE0ZTA5OWZhYTNhNzIwMDJkYTUzOGNiZTQ1ZDYyMWVmMGQ1MjUyYmEyOWQ4M2Y4YjNlYzgzODljOWNlYjZjNmIyZThkOGEyMGYKK1NJRzogZmY2Y2FlZGQ4YTQ2OGFhMDdkNGM2ZTcxMzFiYmRhNzYxODJiYTk1ODY0OTM3NmU3MTFmNDRjN2JiYWNiYTYwNzdiZWE4NzhiYTU5NDljZGVlZWYwNWNmZDQ5ODNiMDA1N2QyNzVlYTNlMThjMzI2NTk0NjhjMzBjNDdhYzhmMGIKKworVFNUOiAxNjIKK1NLOiAgYTJkODhmMzdlY2MyYjJjMDVkZDZjYjMxNTk5NjJjNWY2NDZhOTgxNWIyZmIzNzc5MWZjN2I2MDZlMjkxM2VkNQorUEs6ICA1OGRkNjdkN2ExNWQ0Y2EwMzQxYTRjODY5NTY2Y2FkOGM0ZWUxNmU1ODNhMTBiNDgyNDE3M2IwODI5MGQ5MmQxCitNU0c6IGQxYjg3ZTllODg2ZGZiYmRjOGNhOGFiOTAxMGVjZjliYmFmMjNmNzJhYjNjYmU3NjlkYjFkNDNjMmE0NzRhODE2NTFjNDY0ZTlmYjkyNzM0NjM0NjQxYzk0ODVhMDIzOWIzMTEwNzcxZTdmNzVlMDUyNTJlNGQ4ZjRjMGFhMWJhMDg2MjZkN2U5NjMxN2MyMGFjZGUyYWQ5OWIyM2JkYWRmZDZmMTc0NjhlYjQwMmVjNWVlZmE1N2I0N2NhZjk3MmIzZGQyMWQ4OWYwZTI5ODlmZjg3ZDUxZWQyZTJkNjM5YzE2NDRlNjk4Y2JlMDIyMWI4ZTE3OWYzY2ZiMDRhMjBjYjI0NzAyMTZhNjg4MmZiNGZmNzk5ZTExNTM2Y2Y2NDIxOWYwYzA3NTE3NmJjN2NmMGY2YzViNzkyNWZjZDYxNTUKK1NJRzogY2NmMjQwMGNkNjczZTFlZmZkMjAxNjFkN2I2OGE1ZmI4N2MxZTk5ZDM2MzVkNzhjMmRhMWI1MDlmYWMzMzM0NmMwNjkxNjNhNmM0NmM3ODI2YTQ4YmJiZDAzYjA1ZTZlMjM1MWZhNjJiZjg5YmY3Y2NmOWE5MDI0YmQxNTdkMDcKKworVFNUOiAxNjMKK1NLOiAgNDJhYWZkMGFlMjZkZjFlN2FhMDI3Njg2MGQ3NTI3ODNhZjk3MjgwNDM5YmIyM2VhZTQ2ZTNmODRjYWFjNzhkZQorUEs6ICBkYWEyMzUwYWRiNTVkYmE5ZGY3ZDdhZjUxMDE5OThmZTUxNWQzMTFjM2NiYTNlZWFiOTEzODIzMzE5MGMzYjRlCitNU0c6IDcyMTMxYjgwYWQ1OTliNmY1ZmY2OTg1NDdkMTZlNzQ5OWQ3MTI3NWU0ZTliMzA1MjZhNWFhYzBiMGM4YjE0ZmE0YTU0MGNmYjExNDVmYzAwNDQxOGJjZDMxOGMxYTcwZTYyNjlhM2ZiNjliYWVkODZmMzYzZjViOGY5N2Y1NjljMjBkNGY0OTkwZTdiYjRkMGMzOTkyMTI2OGQ2MzZlZDA1NTRiZDYyYWNmY2FjZDNiOGUwMzAyMTdhYWZhYzMwNDRjMDM3ZTBmOTRkYTE4YzZiOWEwOTMyYzNjNTg3NWQzYTkzZmJkYWRjZjY3OTY0ZWVjOWVjMmJlNjliNDhmMDIwZjZjOTg3NGRlNWY4YTUxNjdiNWVlMDI0YTJjMmVmZDBjZGNkMmFjZDhjMWY3ODc4MTQxNDFlMzBiMzhiMTYzMTc1YgorU0lHOiAxMTYxNDM2NTBiNmMxMzNkNjE3ODU5ZGIyNDI5YzI5MTM1Nzk3OTBiMjE5N2Q3YjdiMWI0OTYyYjMyODcyMTAzMmNlZWNhNThiMmQ1NjQzOWUyMzNiYjg0ZGM1MjVlMjg0ZmY4ZGYyYmRlMWRiNDk4NmZhZmQyMWIzZDdkNmEwYQorCitUU1Q6IDE2NAorU0s6ICBiNjljMzNiMTFiYTY3ODQxYzNkNGU2ZjkyMzRlMzUzNzBhMjhiNDc2NjJhYzU2MGIyN2MwNzhiNjZhYjFiMDIxCitQSzogIDlkZjY4ZTlhY2Y2NzM3OTI2MTc0NGRiNWQxZTM3Nzg5MmYyYjY5MmVkNWEzOGIzNzA3M2MwNGRlNWQyMjY3MzcKK01TRzogZjllYTEyNmQzYWIyMTk2MWFhMjQzMzkwMGEzOTgyYjgzZTBlZjg2ZDUyZDEzNDQwYWZhNDgxN2Y5YjgyMmZiNTgyY2MzOTMyYmY0NTBkNDY3N2M5MTg4MTgxZmU3NTI2YWQ2ZmU1YWJjNjFkMGFlNzU5ZjIxNTAxM2MwYjJiNDEwNjRjYjYyNzhiYTdlMzllMmY0YzEwZDZjYzk2MDViMzg2OWUxNjlkN2RhNDJlODhlYjg1Nzg3MGZlNjExOGJiMDJiYzA4YzgwNTVmMGMxODliNjJmNzlmYjE0NmI0YzU0M2FhMzBjYzBjZDU3ZjAzN2U5ZWY3YTYzNzExZjY2ZTZmMjg3ODkzMTcwMjIwMjcwMjYxNDI3N2Q1MTNmMDg1MGI3NTg1NDkzMzZiMzBjZjQwYWI4YmQ0NjBlNjBlMTJkZWVkMDQKK1NJRzogMjQzNjhmZWU1YmQ4NDhiNGM2NjFhM2JlNGYzMTBjZmM0MzZlNzllYzRhNzg1MDFiODEwOTVmZTUxNjE0MjMxYjZjYTFhYjEyNjk5OTZhZDJlOThlMjk5NzgxYWY4ZTI5ODA0YjI0ZmU1Njc5Y2EzYmE2NTBjNWM0Y2M1OGNlMDEKKworVFNUOiAxNjUKK1NLOiAgN2I2MzYxM2Y2ZGFlMDFjZGNkNWU2YjM3Njg2OTcxY2Q4ZDhhOTk1NDJmNjMyOWExMjg1NGE5ZDhmZjgxMDVhYworUEs6ICA3MmVjNDNmYWYzNGQ4NzMwMTc3ZDFmMDc0M2M3NGMyMGJmNzJjMjM5NGI4YTdkNDcxZmZlMmEwNGFiMDA4MTFjCitNU0c6IDE4MTY0ODhmMWZjODNlMWVkNTkxMTYzN2RkNDJiYTIwNzc2NTdkZmUxYWU0MjJhZDBhZWU1OWRmOWRkNTZhMjc2M2MyZGQwZWY2MWExMmJiODI1YjBkYWMxZWRhNWZiYjY5MWM1ZWQ1OGYzZmIzMjUwNTBiNDU2M2E0MDQyMDk5OTgyZmZmYTVkNmVkNzQyZDk1ODIzZGE4ZTE3ODdjZjc0NmVmNjNiM2ZiYjBlODhhNmMwYmVhZTRmNzMxODM2NjkzNmI0OTE3ZjUwNzMzNjA2OGIxOTQ2ODA5MDBhN2JmNGE2ZmI2OWE1YzM4N2I5N2UzMWJjN2Y5YmU1M2MyYTg5ZTM2NTFjZTFkZTQxYjEwZTkyMWIyMDZlYmYzMmU1NjIxZWY4MDgxNjE2ZGNkN2EyMDU5NDM3ZWZhZDAxNGJiOGUyYzgyMjEKK1NJRzogNzZmNTBiMmI5YzJhZDk3YmZiOTQ5OWVlNDE5MjhhYzA3MmRhNWU4YmM3MWQwMjEyNTUwOTQyMzMyYjYyZTcwYzhiZmUxYzcyMjU0MjM5NDY4OGRlY2Q5MTdhZWM4Zjk1MzUzZTFkNzI2MjRiNzBlYmVkNWQxN2Y2YzU0OTc3MDIKKworVFNUOiAxNjYKK1NLOiAgMzU1OGQzYTc0Mzk1YmRjYmE1NjBlMmM0NWE5MTk2MGNlYzZjYjNlZGJjZDMwZTcyMmY3ZjA1NTIxMGYzN2I1MQorUEs6ICA1MzRmNDNlYmE0MDNhODRmMjU5NjdjMTUyZDkzYTAxNzVlYzgyOTNlNmY0Mzc1MzE5ZWFkZjk1NzQwMWZiYmQyCitNU0c6IGJlNzU0NDRmOWNlNmJlMWQ4M2FmNjIyYThjNDc4ZDUxMDEyN2RiNTZmMWRlNmViOGE1MTI2NTIyYjA5ZmRjNmNhMDg2MmNlYzBiOGIyYWFmYTMxYzE3YTJjYzQ3N2RhNTMzZDI3NmExYWU0ZjhlMDc1OWQ2YWZhMGIxNzQxMWI1MTcwYjUyZjIwNTQ3YzcyZjNlODhkNDhjYjQ1NmZlNjI1YjYyZmViMGY4MTMxN2VkZjFlYzA5ZWNlNTM0YjlmNTAwZDRlMWIxYmRhMmRiMjE5ODJhYTk1MDk0MjI2ZWU5ZjViMGE2NWRhODNmOTExMjFjOTZiM2I0MDEwYWU3ODI2YzllODA2MzZjYmEwMGY3MGMzYzhhMjc5YjAxYjk1Mjk0Y2I4NTBmOTE3MDlmNDM3NjY2MmE1ODBiMTVhYzI5ODFhZmU5Zjg1NAorU0lHOiBiMzY1YjU1NjFhMTNhNTQ1MTdjZjkwZDg4YjM1ZWIwOTY3ZDZkNTg0MTRiOGMxNTQ3ZTY5MzE1OWUwMTM3ODU2MzY1NGM1MGZiNDIzMjNmMDlkZDc4ZmZlMjgwNTZkZGZhNTRmZWJmNDQ4OTFlOGE3NDFiNmExNjg3ZDcyODYwNQorCitUU1Q6IDE2NworU0s6ICBhMzViOTJmMjQ0MDYzYTE5YmI1ZTNlZDRkNjk5ZWQyMDY5NjA3MTE2ZDJiZDA4MTEzZjBkODM3MzYxM2YzNWI3CitQSzogIDdlYzkzNjAxODY0ZWU0OTk1YTRmN2FiY2QzZGZjMTAxZTllN2YzNjllNjNkZTFhZTY4YTA3YWE3ZjA3NWIzMjkKK01TRzogNjVjZDM2ZGFlMDE2OGQ2OTk3NGY5NWYwOWRkOWE1OWRiNzk5ZjkxMWUxYTE1Yjg1YTAwODkzYjhjOWEzZDQ4YTJmNThhYzEyNmJmYWEwYTYwNmMwNWQ5NDcwMWQyNzNhYmY3ZDY4ODE3ZjJjNzFiMWM1NDE3OTVjNGY2MDk1ZTI2YzlkZmY4MDNmMDMyZjc1NjYzZmQxNjk4ZWRkOTdmZjNhMGU3MmUxYjdjOTk0OGIwOGJhY2I1ZjdkZTUwMmIyZmVhNjdjYTJmZWYxOTBkNjBlYWU5MmQxNTE1OGRhNDQ0YTQ5ZDJlOWQ1YTU3M2U4ZTE3N2U4YmJmN2U2YzQ5ZjkwNzEzNmU3MWQyYTY2Y2IwNzYzNmQ0ODc2OGZmNDE3YzhiZWNjZjQzMjMxODFmZWZiMzEyNGU0MzQwNDllYTQ1ZGQ1MDE5ZTQwYjQKK1NJRzogYTIzZGJlMzc1N2U0NzhkYmM4NGQzZGIzYTkzM2IwNDI4Y2VkYjZiMDFiODZkOGQ3M2YzOTU5ODc4ZGFlNmYwNTg4ZjUwNWNkNGQzOWYyYWI0Njc3YjY0ODA1ZDYyOTY1MmEyMjUyOTgyNWMzYTkxZDA0Mzc0OWZjNzFmMDM3MDYKKworVFNUOiAxNjgKK1NLOiAgNzJkNGE1NjRjYTE1NDk5YjVlNGU3NWQ4YWMwZjI4MjE3ZDMyMTE0YTBjNjQ5YTdjOGVhYWRkMGNjNzhjNTIwYgorUEs6ICBjNzY2YmQ3MzgzN2M0ZmFhNTIxNTUwMmYxZWZjOTBjMDAzZjcxMWJiZWY1NTE3MDA5MTAyOGEzNDQ5MzQwOGE5CitNU0c6IDZjN2U3YjYyZWIyNDRhNDVkNzg0MzZlMjk3MGRjZDZjMGY3ZGI4MjI5N2E4NjE0MGVhNThkZDIyYzIxOTVhZGJjOTU2ZDRjNGVjMDUzNTRiMjFlZmUyNGNmY2ZlMTBlMTc2MjIzNjg4NDgxODBkMmM0NjgwY2MyMTVlOGNlZWE2Y2NlMjIyMTYxZjFlMDkyMjM5MjUzYjk3NDZmNzg4N2RmMjQyNWFiNWE4ODBiZGJhOTgxNTNiZTc4NmRjODM4Y2JlY2EwMTZiMWQwNjUyNGJkNmJmYmE4MDlhOGJiMzdhZGFiMTVkNDI0MTVmODZlYzAzNTgzNjVlYTg3YjgxNTBiMDU0NDFkOWQ0OTg0Njg3MTQ4NWNhYWU2ZGUzNTk3MzZjMjcxODk3MzZkOGYxNzY1ZjNlNWM1ZjZiOTIxNjgzOTYzOTBiZWU5NGNmYmQKK1NJRzogOGZjNGYxNzkzMzBiNjQyZGQ4NmNhOTM2MjY1MWI4M2IwMDZkODM3NWNjZWY4MTFkM2M2NzA2ZjkxNTk0NjUxZGYyNzY5OTUzNzIzMDQ2Y2NiOWJmZTY2YTY2N2UwZDExZmMzZWEyZDgyMjYyMzRmZGQ1MTY0NzY1MjYwZjdiMDUKKworVFNUOiAxNjkKK1NLOiAgMmU1YWFhYjI5OGU2NmMyZGMxZDc3ZWE3NDIxZmY4OTUyNTVmOWQ5MDBkYjA0NTBkNjNmOWY3OWMxYTcwMTNjZgorUEs6ICAwMzgxZjNmMTkwNDU3MTliOWU4Y2ViNTYyZjBlOTY1ZGMwN2IwOWYzNzFhOTYzYTI4MWM3NDljMjUzMmY2NTRhCitNU0c6IDNkZjBlNTRjNzExZTMxMzJkN2FlOTUzZGViN2I2Njg2OWVlNTMxZWU0MGI2M2NlNjkzMjA2Y2RiMmY0YmRhMGEyNTY5ZTkxM2FjM2U2NTMyYzVkOTY0OGVmZDQ2Mjc3ODBmYjhhMzFkMTA3ZTAzM2YwNTRkMTllZDhiN2M0OWRjNDA3ZDJlOTQ5ZGUyNWY5OTMwNzIyMWQzNTg0M2Y2ZDVlYjdkZTVjZGY0MWI5MWRiYmYzNGNiNmM5YzUzMDAyMTAxNGI1NmFiYzQ0YWMyMzAwMzEzNjE1NjA4YTdiNGEyMzVlOTljMTRjZWY4MDUwODg3MDMyMjA5NDg4YjllYWVhYTgyYzA5NDA1ZmM3NWJlYzk0ZGQ0MmQ2ZmYxYjU5OWE2M2VlNTc0MmYzMzY0MDkzYWM5MmNhYmFiMzAzNTgyMmFhODY3YWU1NmRjYzk5ZAorU0lHOiA3Yzc0MzAzMDViMzYxYTllMzViMjc4MGM0ZDQ0MDgwNzFiMjEzMDkzMWQzOTgzMGVjOGQzMTNhYWZiYzgzYTY1ZGFlMTljYjc0N2Q5ZDFjNGNlM2YzNTljYzgyNGVhOGM5MmY2NmE0MmI4NjE0ZTc4NDhiODg0YWM4YWE0YWUwMgorCitUU1Q6IDE3MAorU0s6ICBiNjM2YTAyNDQ4MDAzNTQzZGI4NjRiNDBiNWQ4ZDZkZDlhZDYxMTYyNGM5YjBmYzY4OTBjNTFlYTU1OTJjNzkwCitQSzogIDFlZjM2MDQ5NTk2OGU1NmU2ZDNmZTc0MGIxYzg0YzRlNDQ5MGVkNjgyZGViNDMwNWFmZDU5NmVmYjI4MDIyM2IKK01TRzogNGFhODVhYWMyNTAzNGY2MTRlZDQ0ZjdhZGNkYmVlZWMyNWZjYzJhOWVlYTMyYWI2YTg2OTk1MDZmN2ExY2FkM2JjODkyZTlkY2U5MzRlNzViMGE4Y2QxNDY0MmI3Nzg1OTkyODZjZmQ4ZjUwYTllNGYyZWRmOWY5ZDYyOTFhMmUyOTc5Y2YxODA2YjkzZWQ4YzlhNzhmYWUxOTliMjg1NGEwM2VjNDA2YWIzZjcyMDgzNWVlMjYzZmJiYzkxY2I0ZWYwNzU4ZDc3NWZjNzg0YzdkNWIyNTFhYzg5Mzc5MTlhOWU2N2JlODhjOWU0NGNmMmVjN2Y1NjAyNjlhYTBmMTExM2Q5MWI4NDQwMWRiMTVhM2M0OGM3ZGFjZmY0OTM5ZWUwMWJhYmI5ODJmYjk1NjI1YzZjM2FkNzg3NDkwNjA1NTFiZmRlOGNjZTRmYjhhMjkKK1NJRzogZDRiYTgwMzAwZDVjYjUxMzUzYzAzZjI4YzQ0ZmQwYTQyNGZmZTFlNDBkNzhlZDdiYjExMzNlOGZlNGUxODc1MDUyOTNiMjBhMzkxZGE5NjJjNmE4YWMwYWNlYzljNjcyMjZhZjNiNjE5NWRhYmUzOWIzNjYyMjk0ZGEzZTBlMDkKKworVFNUOiAxNzEKK1NLOiAgNWNhMDU0M2M3MWY1NjhhMDBlZWRmNTBhOTUyMGY0YzE1YjUyNmUzZmIwZGE4MTZjMjllYTNkNTBiMmY2MmExMgorUEs6ICBkNGEyOTMzY2UxOTQ1NGUzMzFiNTI4MDEwMDIwOWE2Y2U4ZTU2OWY5OTNjMmFjYWI1MWRiZTg2NGM1Y2IyNTYzCitNU0c6IDRlZjg0OTY5NzhkMjhjMTBhYmQ1NGEyNjM1NmVlNTU5MjFjZWIzNTBkZDRiNzQyYzQxNjFmYmViYThhMTYwMWY4YWQwNDg0YjIxYThjZjVhMjk0ZmFjMDBlYzhhNmY1OWUzMzYyZTQ3YmZhZTFlMjhhMmU2ZDAxN2M1Y2FhNzVmYjBmNDg0ODI4MDgwMzdjYTIxNDc2OTU0ZDc3OGZmMWEwNTg2ZGEzZWY2OWQ2Y2VmNmQyZDhkZjRhZTdhODU0NDJhMWU0NmM5OThjZjQwN2E2YWQ0YzU0NjNhNDNjMjQ4ZjNiNjkzN2ZkYmM4NDViNjBjNmQ4NWUwNTYzY2MxNmJhOTY3NWQzNjRmNTI1ZjY2OWFhYWM5NWY0MjhiYjU4MjA1MDk5ZjllNGE2ZGJiZDAxNTFmYjY1YmFiZTEyM2U1MzkzYWQ2NDAyNjkzNWNiNDg4YWEKK1NJRzogNDM2ODIzZWVmZjNlZGNlNWQ4NTg3ZDY4ZTU0NzNlZjNkOGRjOTQ2NWI1NThiNmU4ZTdjZDMxMzdlY2NjODBiNGM0ZTgwNmVkZjEzNjE5ZDhlNzE3ZTY5ZjQ4ZDcwNjFiNjhkZTAyYzgyMDliZTFmN2FjMjZiYThlZGY2MDZkMDIKKworVFNUOiAxNzIKK1NLOiAgNWY4NzExN2RhOWJiYjYwOTFjOTRkYTZiMjMwYjdkOGY2ZGUwZWQyYTA3NjQxM2I5MmVhY2RjNDNhYmJjNjg5NworUEs6ICBhYTc4NmExNDYyMjY4MzJhYTczYzQzNGIwZWRjMmQ0MWQyNTU4ZjgyMGFiOGY4N2UwOWU2Y2RhOTEwNzJiOWI2CitNU0c6IDIyOTdjNDBhMmU4MzY1YmFlNGM1ZjA2MzBjNTBiMTNiZGQ5YWQ5NzcwYTVkOWE5NDUxZDAwODc0YjAyM2QyNWVjZDQ2OGI5NjU3MWIyZjE2ZGNiMWIwZDNkNzU2YzFmMDQ0ZmNkZGQxYzUxZjI3NzI3YTAzNjljOWNmMjViZDZhYTU5NTUxYjViMDdjZjhmODA3ZDkyYjE1OTE5ODYzOTcwNDc0MGZlNmVkYTBmMjZkYmE3ZTc1ZDQ1MzBiMjgwMGYwM2ZiNmFhNjc3ZDg0ZGY3NWQ2OGQ0ZmJiNjRhZDIxMDAxZTNmYzg3YjYwOWI5YzI1MWU4Y2NiMTJiYmNhOTI3NDQ3ZTIwNTRlMDc2ODhlYjhhMjA1MjFhNTIyNDllN2I5NDNiZWQ2MGU2YTkzYzAxZTNlYjYyMWYwNDYwYzE4YTY5MGI2ZjZiNjZlZGM2ZTg3NDNhNgorU0lHOiAwZjE5ZTZlYTBjMDVmMzgxODVjMDFjMmQ2NDc3OTk1ZGFmNTA2NWJhOWQ4MDE3M2ZhNmJiMjNhNzc0ZGM4OGIzYWFlODc5ZDhhNjI0NzFkMmQzMDRjYzNkYzY2Mjc4YTdhYmNiMGJiMDc3MWNkMjc4ZTExZTdiOTMyZTlmOWIwZgorCitUU1Q6IDE3MworU0s6ICBiNTNhNjQ0YzkyYmEyZGM3MTA4YjE2ODMzZjA5YWQ1OTE3ODQ2NDM3MjI1YTc3M2QzMmQ3OWM5NzczM2MwYTU4CitQSzogIDUxNTgxOGM2OWMwZTBhMTcwNmIwNDE0Mzg0MmYzZTllMjcxNDQ4ZmJhZjNhODk5MTE5YzMyZjQyNTY2ZmZkMzMKK01TRzogMTMwMzZkYWFlZTQ1ZmNmZGUwYzUzZTA2ZDA1YWE5YzAxZWE5NGE2N2U4NmM2YzUzOGNjYjI4M2IzNjhkYWY3MDc4ZDNmYmFiNTgwYzc2ZWNmODJiNGU5NjYwZjA2OGRjYmI1MDBiODA1OTUwMTdjNWJlM2M0NDhmYmQ4YTE3ZDk3YzU2NDMxOTc4OTBlMTY3YjM1MzQ1YmY2NWU3NWI4MmM4ZDY1MjI5ZjJmNjBhYWUyNzcyNTgxYmM5OWM0OWQ0MTZiYzNkNzg3NDZlZjgzMGYxYWY5NDRmNGE2NzE1YWI0ZmZiMDE1OTFiYWMyODU3ZjFhOWM5ZDE3MDA4ODg3ODAwMDZhMzE2MDczMzhmN2FmN2JlZGY2ZWZlMGI1NzI5OWFjOTE1NTI2ZmU1ZTFlMTAxMjk4NzA4YzZlNjFiODQyMjBhZmU5NWI1M2Y4OTU5ODc0NTYxNTIKK1NJRzogMTNkMmNiYWM3OTc2YWQyN2YwYmY2NjlhZDU4OGVmYjJjOTFiYWI4NTA3ZDU3ZmIxNmJmZWE5Y2FmZjJiMDk2NGU3NTYyNWM0ZDgwOGQ3YmJiNzhjNWI0NjRlZGZmZTQ5NDllY2ZiYzhiOTVmZjZmZGIxYmRjYTI3NDIwNjgxMDAKKworVFNUOiAxNzQKK1NLOiAgZDI3YzllYWZjZjg4MTUxOTkwYmI1YjJmYTg0NDNlNzA5YjVmZDhkNzhkMjMzODAzMzIyZGM4NmQ5M2Q5MzI5NQorUEs6ICAwOGUwZWZmNTI5Nzc2NzE0Njg2MTk2ZDgxN2ZkZjcxZWI1YjZlODMyNjUxNmVmNDg5YmZlMTg2YWM1YzViZjZkCitNU0c6IDc3YzM1YmRhMzJhNTk2N2Q4YjMwMmZhN2E0NzU4M2NlYWI4OWM5YTYwOWE2NjdiNzUzMTU1ZmE2OTk2Zjg2MzFkMGViZWRmZTBhYzM2NGM3N2U4NWJhMzczMTFmMGRlNTdhMGRjMmMxZTllNDAwZDU4YjQyNGEzMjJlMWQ1NzcxZTBhOWZkOTUwMmFkMDIzMmNlNTQ0ZjA3ZDhjNjZlN2MzMTQ3Zjg2MDdhYzYxODliYjY5MDY2ZjJmYWQ2MzExODVmNDU3ZjQ2N2ViYTMzMjI4ZWNjNDBlODk0YTc3YjU3MTY5OGE5YmZhYzg0MWE1NGVhYzUyMTlkYTk5YzZhOTEyNWM0NjlhMjJmZTgxZjNiOTUxNDMzODk2ZjE5Y2UzOWIzNzNmZDdlNWM3YjY1MGE1ZWYyMzY1YWU3NTEwYjBkYTVlNDlkN2MwNzA3M2NmMTY2YTk4Mzg3ZTgKK1NJRzogYzI1NGUzNzE0NDU2MzMxMzc0NDJlZWZlNDBhZDRhODJlNjliMWViZjQ4YTY4NWEyYmM2ZmZiYWMxMjZkMjI4NDg3YjJlMzUzN2M5N2VmNzQxMDM0MjA5MTk2MmU1MGMwY2I4NWRlN2IzOWNlYjQxYWM0MDc4ZDQwZjM0MDcxMDYKKworVFNUOiAxNzUKK1NLOiAgNzAyMTNkM2E3OWM2NWQ2ZGJiYTU0MmEzNjc5NjM1MDAzYTY4MmFmNWZhNThkZTZiMGQ2NWJmYTI0MTg0OTAxYworUEs6ICA0NDAyZmI5MmNjMTI0OWRkMWFlMTY5MGYwM2IzZWM0ZjFlOWJkYWIwZGU1YmZkMjg5ZjEwMjk2ODMwZmQ0MDNlCitNU0c6IGNkNmUxY2Q5YzkwZjU2NmRlMDQzZDc1ZDcyNDRlY2ZkYjM4ZThiZGUyZjlhNmNkNWE0ZmRhYzcyYjVlZGU2YWY2MmQ5ODE5MThjNWU2MTBhMzg3ODkyNzRmYTEwZTUyN2Y4NWZhZDIwOWI3NmNhMWMyODFhZDU4OTBmOWM5NmQzNWRlNTIyZjFkZGNjYjUzOWI4Nzk4YTAwNjdhY2RkNDViNmUzNDRhNWQ5YTk3NzMxZjU0NWZmYTRiMTdiODc1YzY3YjQ4ZTlkNGM0YmE3MmM5OGE0NTA1NTgzZmRiZjFlMTJmMjJiNWE3YTQ5NDc0NmNjOWI2YzFiNTcxOTA2YzY3ZmNjODgzYTljMTVhMzgwNjg3NWI2NTllNTgxNmI0Mjc2YzMxOTBlMjVjYzFhYzNkZTQ3YmY5OWM0OTk2NTM4OGY1NGYzZWY4ZWI1Njk5MDZjNjAwOGU1ZmJiZAorU0lHOiA1YjZjZTI3NzRkNDAwZWNlYThhODA4ZjVmZDBhNzk3ZmZjNjExNjc1MjM3NmNkN2JmYTNiMmNjYTNhODRkNTU5M2Y1YzAzYWQzZWVjMWQ4OTUzMjI3NWM0N2I3Y2UyYTBlOWM1OWNjNDAyOGE4YTY1ZTViYjkwOTdlYTcxYzIwOAorCitUU1Q6IDE3NgorU0s6ICA1ZDU0MGIzYjE0ZjBjMDE3NWMwNDdlYWYwMjZjOTA3MDY1OWVmMTNlOWQyOGUwYzVjNTE2YTQyODI2OWIxNGViCitQSzogIDFkMmQ0ZDU1MWE1N2M2ZmIyYjA0MTgxMDQ5ZDQwMzlkNTc1Y2Y4MGMwYmM2ZWM3MDMzMDY3ZjI3MzA5MzQ0ZGUKK01TRzogZTRjOWU4NzA2ODk4Y2FkNGFjNjhkNzNjMTMwZWZhMDRhNTRmOGNhMjU5MTllYTZiZmFhNTRjOGM3MjBjZWQ4NTRjNWU5NTA5MTAyYzdiODg1YWVkZGZmYmQxYjdmMmM1OTIyNTgzNjc3YWM5ZWVhOWExMDhjN2U4M2U4ODcxYWVkNWEwODRmNTQ0MGIwZjM5MWFkN2ZmYzZiYWI0NTc0YWYxYjk2NzcwZjQzNzBlOGU5ODhlODVlY2IxYThkNjAzNGZjM2Q3ZjQ5Zjc0MjIwMjNiOWRhYjVkMGMxNmJlYWI1ZjVkMzdiMGE0ZDdkZTE5N2FkODdjZDRmZjhjZTc4ZWIxMmUxZGFmNzM5ZDhiNDdhYjM4MGFiZTkwOTMzNTZkYjViNTk3MTc3NTFhNDllMTk0ODQ3MmZkYWNjMjU5ZmZmZmM4YzFkYmFlNTkyNjA3ZDRlYzcxY2M2YThmNmIKK1NJRzogMzI1MjdkYTc1NTMxMjg4OTkzNWRkNWVlOTFiMWJiMTE3YTVkMzc3ZGQyM2VmNWI3ZTE1YmFmZmFlOWE1NDM5MWEzZmQyMzRiZGNlMDczZTA5OGM1OGQwNWJmMTk1YjRjM2NjNjM5NzIzODNiYTRiNTEwNzI5NzFhZWJjYjYyMGQKKworVFNUOiAxNzcKK1NLOiAgY2E0MTc2OWNhZjE3MTdiNGU0NWM5M2MxMjFkYzgyYTUzNGZiYzZlYzA5ODY2NjJjMzIyMmQ3MTQ5MmJkMTE3NgorUEs6ICBhZjNmODlmNjE4N2RiY2Y5MjE3NzUwYzY3ZWY4OWVkNDdiMDM5ZjllYjA2MmZmZWM5ZGY2NGFiNTJiMGI0NWNiCitNU0c6IDlkZTg0NzZjNTgxMzg0OGFiMTQ1MTUzNzg0MWNjMTc4MDAyMTgxYTIxODJhZjMwNWIxMmU1ZjdjM2IxZDU2YjIyY2Y0NmFlNjI3NmQxODI2ZWMwYThjOWE3ZDlmNjgwODNiNzIyNWJiZmFlZmNlODJiM2I2NDU5NDA1MmE3NzAwZjMwOTIzM2E3OWZmZmRmY2NjNWMyMTQwMGM5MWNjMGU0MThkNTE0MWQ0ODZiNTIxOTkwMWQ2ZGQyNDQ3YzFmN2I3Y2Y1YTA4NzllNzBlMWRkNjU4ZDBmMmVjZjMxZWJlZWUxMWE1Yzc0NDQwYzYzYjlkOGI0NTMxOGMzNDY1ZDdmZjAzMzY1ZWRkMDM4NWVkZjgwZDRmZGVkNTFmMGY3NTMzZWU0MDk5ZjE5ZTkzYmM5ZDA4ZGFkY2QxMzQ4NWRiMjM5NTIyZmZjODFlMmMwNTFmODc5NmQ2MmU5NzlmY2YKK1NJRzogNWNkYTg3MmY3ZWQ2ZDdjOTAyMThhYzEwYmVlOGUyMTRmM2IzNGQxNWQyNWMzOTI1NWVjOWU2YjAxNzdhYTNjYjczNjhkMTFjYjhlZDZmZjVjZjBjMDQyODFkMDZiYzQyNzJiOGJjMDljMjNmNmY0Y2Q1YTgxMGRkYzdiOWMxMDMKKworVFNUOiAxNzgKK1NLOiAgZmVkZDYzZmZkNGNmYmY2MTg4OTQ5NjJlMTIxYTkwMjVlZWEzMThhODBhMWFkZjE2OWQ2NDkwNDQ1ZDJlMDJhMAorUEs6ICA1NDJmMjI0NGJkYjdkODRiODdlNjI4YThlNmExMmYxN2JmNzRhOWE2ZDBlYTQ2YzU5NWRiZmRjNjgwYzA0YjI2CitNU0c6IDJlMmFlNTg0NjQxYmUwM2RkNDhmOWM2MTgwNzdhZWFhMTgyMTJhNDI0MWYwYzAxOTRlZDIzZTM3MGQ3NDFhM2FlMTFhNWZlYzNiMDQwYzE2ZWFmYTRhYzhkMThhYmFhN2NlOGYyODY5NjczMzcxODlmMDQ5NWZmZGQ2MTk5NWNkZTMxZGQ4ZGZjM2RmNTcwMGI1N2E3YTI5OTgwZTljODIzZmVlODVkNjE0NTExNzY3MjllNzI3ODdjNjEwOWI0NzM1OWI5M2RmZDYyZTFlNWEyZDY0MmMwNTcyNDJkYWU1MDBhOTRjYTFhOTNiYzU3YmUxYWRlNzZmZTQ1MDFjMGY2Mzc3ZWQwZTkyNDYxNzlhZWNkZDk5NDZiNjcxZTgxOTBlMWVkMjNmOTY2ZTk2NDA5Yjk0ODIyMmQ4ZWE1ODM5ZGU5MDRmYzUxMzQ4MDczYjhmNDBlZGJkOWI0YTRiMjI3NQorU0lHOiBlZDU5ZDllMjNkZWMzNDk0YjBmYmM1ZDEwY2QwMmJhYjg2YjNlYjM1YWJiZjllNGQ0YTkyNjQ3OWYxMzQ1ODNhNDRjZTcyZGM0MTIyYWNhMzc3YTQwNzJiNzE1NjQ2MmI3NGU4ZGY0NmI2ODY2OTg2MzY4MzZlZjIwMzE3OWMwNworCitUU1Q6IDE3OQorU0s6ICAzOGYyMTg0ZWFhNTUzNjU2ZWUyOTAyNzA2YmNlYzRhY2I1YWYyNTE1N2NhMGY2YTJkNDhkZTg1Mjg1ZmEzYmMwCitQSzogIDdmZjAzZmI0YzgyZTljMTVkNjU5ZGY0MjRiM2U3M2VkMWQ3ODAwNmYzZTBiNzllYjY0ZDk4YzEzYWVjNmJhMzcKK01TRzogYzJkZjc3YzllNDc5ZjYxOTgzYjZjNzQ4M2VmOTNmYjg1YTEwM2IyMTM5MjM5MjY1MjMwNjVlYmZmMjI1N2U4NTQyN2UwNWNkYzI3NTgyZWY2YzE2YmUzNTNhM2IyNTAzNzJkNjM3MGVlY2I2Yzg5NjI5MTdlYjY1NmYyNjQxNjkwMTg5ZDE3MmExMTEwNTE1NTdhYmMyNDk0ZTMyY2FiNjVlZDA2MzNhZmZlOTI0MDhiNTVjNGVkOGFmNjVlMmM1ZTdhYWI4ODdhM2NjOGQyOGM1MmU5ZTEzMzZkMGI3YmIzZmUyY2Q4NDNlN2ZhMTY4MDM0MmY4YTRhYWZhMDJjNGFiMjUyZjA4YzNkNDZkNWYwMGZkMDE0ODQyNjNlZTYzNTI4NGY2ZGIyNmQ2Mjk4ZGU1YjBkZDIzOGRhNDBhOGQyYTkzMzc2ZGEwMzAyNzgzYTBlM2JlMjNkOWU3Zjk5MGQyNWIKK1NJRzogNGE2NDEzYzJjODdmMmIzODU2YThkZWNiY2U0OTNhZGVhZTBjNjljOTQxMzQ3MDdmYjBmMThmMzA0OWZkM2UzZDA1MWFiZGI5ZDRiZWUyNTNjNjEwN2MwMmQ1N2FkN2NjOWYzMTAxZGI2NjBhZmFjMmI3OTgxOTM4ZTk1NjRmMDEKKworVFNUOiAxODAKK1NLOiAgOGJmY2E0ODQ2MmQyNTM2Zjc0Yjg0ZjZhZjU5ZjVkODU4MmZmOGY3ZWMyODc0NWQ2NzJlNzJlYjcyZTc5ZDNlOQorUEs6ICA5ZDEwZDI3NWMzZDNmZTQ1OWY3ZmUyOTAxYmNlMzg5MTkxY2M4NDgzYzBmNTExNDBkOWM2MmIwOGZhZGU4MWJiCitNU0c6IDgxZWU0Y2I5YzQ1ZGE2OTFkYWNkN2RkMDlhZmY1OTczNzI2N2JiNTVjM2FkZTFiYTMyYzE3YjdkMGQyZDBjNjA3OWMzOWQ1ZmQ1YjI5YmE1ZjljMTc2MjA5NzcwOTg0M2VlZTU2MTJiZDIwYmM4MTg1YmY2NGQ1YzkzNDE4NGUxMzYyNGU2Zjg3N2EyYTVkZGExNWMwZGY2MmFmYmI5NzA1N2NjOTFjYWM5YTE4NDA2YTBlMDEwOWNjMzliMmUzZjgxMmUyMjdhNDA2MmQ1ZWY4MWM5MmMyMmE3ZGM3OTdjODQ1ZDcxZWI2ZWE5ZTQyZWM4NDE3ZmJhOTBhOTZkMmJiMTQzOTQxODMzMGI0YmIyZjk5YzZkNjNkMzA0YTBlNTA2ZGNhOTY1M2U1ZGUwZGQ1NmUzMDlkYjFhNzZhMGZhYWJhYjE2Mzc3NGYwMDAwODhjZWYzZDFiN2E2Y2Y2NjFkMmUxZDkKK1NJRzogNDRkNzdlNDM5ZWY2Y2E1ZWI5NDBjNjBmZjg3MzJkZGMxNjI2OWVhMDIzYmIyNjEzYmQ0NDdlYmE3ZmQ2OTg1MTIyNmM0ODE5Y2U4ZDQ0OTg1YTQ5ZjNmNDFhYzdhZjMzYzQ3ZmZlNWY4OTMwNGEzMjU2ZTQ0NWY4ZDY4NmUzMDcKKworVFNUOiAxODEKK1NLOiAgZDc0ODBkNDI3MmJjYjE1NTdiMWJiZWUwNDkxNWMxMjZhNTJjYTZkNmE4YmI1MzE0YTBlMWE1MmI1OWJmYzk5YworUEs6ICA5OWM4MzlkMzZkOGY1Yjg2NTI2MThlZDdiMGZlOWVjM2Q5NGVmZmY0YzQ1M2M1NDA2MzE0NzZhNTk3OWJiYmUwCitNU0c6IDYxNWNjMTlmOTQyMDE3MzY1YmE4YmZhMjU2Y2VjY2M4NWVlMjg5YTFjMzRiYjE0NDJhY2MwNzE2YzdmYzJjYWViNzZhOWRlMTlhZGVjMTA2MzcxZTQ3YTMwZDJlMTIzOWNlMWY3ZGNhMjU1MjZkNjA0YmRkNjQ3NjU5ZDk0MmJjYmFjMzY4OTExMzQ5YzNiOTQ2YTk3ZGExMGE0MmRiY2YzYzczNDE2ZDJlNmJhMjJiZDI5ZDlmNzA1NjcyZTllMzM4OTQ0Y2VmMDFhZDIxZjAwOTc0MmUwN2JjZDg4OGNhMzFlMWVlOTUzZThjMWIxZmQ5NTRiN2RjZjFhMGIxZDVhMDY5MDY1YTY2Y2I3MjFhZGMwMjBmNGVmZTFhYmRkMTY3NDI3NDY5MzkyODU3ODBkNzUzMTM3YWUwMTQwYmI0MTBmYjZjZTMzNjc2YzI3YWVlYzU5M2E4OGNiYzczYWZkOWY0MDUxMQorU0lHOiBlMDRkYzg0NDJkMzUyMTczZTkzMTgxOGUyOTA4NThkZTg1Njg4YTQ2NDllYTNlM2MzYWU3NGVkYWE1NGFkMDFiNjQ2MjJhZDhhMDkwYjZhZDYwYWRmZDAxODgxODgyODI4ZDM5MDc4YmI1YjI3MTRmZDNlYTgzOTdhMzQyZmQwNAorCitUU1Q6IDE4MgorU0s6ICAzYzJkMzY1MDczNWI0MWVmOTAwNmJiNDVlNGJlMmUwYWE1Y2RlODUxYWVhYzQyMWVlOWMxYjQ5MmQ4N2FhMThhCitQSzogIDNlNDZkZGNlMjk4ODQ0ZmNhZmEwMGExYjQ3ZWFmM2RlNzA1OTZkZjFiYmVlM2M4MDlkMWJlN2RkOTQwODBlMzQKK01TRzogMTQyNWQ4ZDIxOGRhMWExMGE4MGI2YTljM2MyNzUwZWZlNDE2NTc5ODRhYmQ1MTAwZjQ1MWJhOTQ5ZGIwMTA0NmI3MTI2YmU4NDAyMzM0ZWQ1NzUyOGJhYzA1NjIyNTUzYTg2YjcyNjcyMjY5NWE4ZmIzMzFkODU2NTQxN2M0ZmYwZjI1MWEzMjBhZDA2ZGVkYmI3NTBkZWYzNWQ1MjFjM2M0Y2Q1NzFhNDVhZGE4NDUwNjUzZDVlODFmZTBiZWI1M2FhYWU3ODdiM2ViNjUzYzIzODFlZDU1YWFmMjU5MGVlNWVkOGI2NjI2ZjFjNGIwNDMwYTU0ZjM5NjU4NjI0ZTY2MzVmZWZjOThmZWU4ZmMzZTFjYzdmZjNkZDQyMGRlOWRhMTFhNjJmY2FlMGUwY2I0NTRmYzZmN2RmMDM5NTQyOTFkMjYyMDJmMWIxODhiNjU3YjNiYWUwNzM4OTQ0OWI3NWU2NzQyMmYKK1NJRzogM2YyYWYwMWFkNTM3N2FjMzkwNDBkNDFhNDFlMzZlN2I5M2ZhNzIzNWI4NDE3OTFmNDMyZWNkN2Y5MWEzYjIxYWI3MTk2Yzg4M2FkNWE3ZGI0NDZmNmMwNjY3MjQ2MGYzZjYzZWY4NjNkOTQzMmJlOWNhZWFiYjc5ZTg3ZTIyMDgKKworVFNUOiAxODMKK1NLOiAgNzQ5NjU5OTYyNjhjZGM0YzA5MjIwYmQzMWNlMDdiMjE3YTAzODI2ZWU5ODFmYTg5ZjNhMjM1OWNlZDA5NWVmMQorUEs6ICA0MDk2ZDAyN2MxYzVlZTRjYmZjMDRiOWQ1MzQxNzQwMjlmZGI1MGNmNTYxMGQzMDIxZWY5MzNiNGNhZjMzOTg1CitNU0c6IDQ1YjJmMDY0NjE1YmY3NzRmY2U5N2Y1MWM0NjQ2ODVkN2IzZTRmZWZmZjkyMzEyNDBhNzE5YjNiMDYyMWNkNGFkODMzMDU2NzVjZDZlYWFlYmZmNzkxMDAwYjBiMWZhMzFkODJkODE4MWI3ZmU1N2M1ZTAwY2VjNTZmZjkwMjJlOWNlOGRiNjYzNTZlNDA4ZTNlZTI2MmZlNjI3Nzg5ZTY1NTM1ZWYxYTYzZThmZWM5MzNiZTNkZWUzNGQyZmFjZGI4OTI4Y2M0NTZhYmYyZjNlOGNhYjQ3ZWZmMWNhNDJlOGIwZTQ4ZDJjNzNlN2JjYzVkZTNmMTA1NmZjNTIzZGZlZjZiMDAyM2YzMjg4OWVkMzk0ZWVkYTAzMmFiZjZiY2FhZGFhN2YzZWU3NDExODc2MGFiNmQ5MWRmNTI4YmRjNTgwNzk3MmM4NWZhN2NiNTZlMzg3ZDczMzJlNzc5ZTUyZDBkZDdkYjBjZmIKK1NJRzogOGM2NjI4MzQ0MzE3YTYzYWNhNmY3OGNmYWVhOTY1YjNhYTU1MjJjZTkxNDE5NTE0MWMwODg3MGExYjhkYWNmMzRiNzljN2FiYzY5M2NkOWU1ZWJlMWEyZTg2ZjAzMzJkMjA0OGRiM2NiZGVmMDE2ODc5NjJkNmRmMjQ5ZTM4MDAKKworVFNUOiAxODQKK1NLOiAgMGFiZjA2OWMwOGIyNjkxYzNhMjZmNzlkYzhlZDA1Y2I3MWQyMjBmZjc4ZjNhNWM1NzgwYWU5ZGExOGU0NTY0MworUEs6ICA5ZWYzYjVjYzAxNmNjODJkYmRkYTcwNTc2NmFhNDQ4YmQ2MWZhMWFhZjExNzBlZmU5MTQ5ZGFhOWZlNjRhMWFlCitNU0c6IDBkMDU1MjkxYjJlODYxZWFlMTllYTBmYjIwNjlkOGM5ZWVmNGYxMzQ3ZjM1NzZkNzg0MTFhZTdjMGIxYzFjYWYzMWZkZTczNmRjOGFjY2FjYjY2MmRmNzZiNjIwYjYyY2U5MGI5ZjkyYzgzMzA5MTI4NjIxZDA1N2NmODQ1ODA1OTQ5MDg4ZTkzOGRkYmMzZDQxYzVlNTU0MWZlYzgyOTg2ODdhZDJmNzlhY2RhMDFhYTIxNWQyNTgyMTQzNmVhYzlkMjY4NzE2ZDRjZDYwNTAyNjBjYjRlZjZhYWRhNDgzNWUwNzNhODQ1ODIxZmYyMTFhZTJiYWFkY2ViNmU1N2YwNmY4ODM0NWVkYmY5M2JmZGY1NGZiNzQxMjNiNTdjMGZiNGE3OTYwOGQ4ZGI2NzQwODg5ZTE1NzMzNTA3Nzk5ZjdhMWZkMzAxN2JjZDc3YjI4YTJiYjZjOTFlY2QxNTRlOWM1YTVmZmEwZWI2MgorU0lHOiBjNzU2NmZiM2I0ZDhkZWY2NjdlMDQwZjI3NmQzZWQ5OGQzNmRmZjQ2MDEyNmE3NWI0Y2MyMTAwMzg2YmIwMWM2NDJmNmQ4ZGU3ZTY0OWJlNmUwODE4YjA4ZDc3Y2U2MGY0ZWU1ZTc3MTdhNTA4ODRiZGVlMDIwMzRlY2YxY2QwYworCitUU1Q6IDE4NQorU0s6ICBmM2ZkNWVjNWUyMzBiNmRhZDFhYzNkM2FlYmFkYzc4NjNmZjg5ZGUyYTEzMTdmNDI0ZDE1OTg5YTNlZmIwYWZkCitQSzogIGY5OWU1ZDVlZWVhZWQxMjA1Y2ZiNWMyY2M0ZTVlOWY2YjRlN2Y2NDEyOWY4NjAxMDRjYTYyNDRlYjlmZWI1NjQKK01TRzogNzFmMjg5NzNlZDNkZjA1OTQ1ZmEwYmRiMjNlOWJlY2E2NTFkM2VlNmJmOWZhNDVmZmRjNjA2MWU0MmZhMmU4ZDc2MjM1ZjBlOWUyZGFhNjVlNTI2MzFmYzNiZWFkMzNkYTA1NWJiNDkyZTQ3NThlNTk4YTAzMGEzM2IzYzQwYjM0MzcxNDU5YjIzM2NjYzA0M2NjY2MzYTNjYmNlNTQ5ZTIwZTBiMmI0MzMwNWI2NGFlYzY2MWFhZGJhNjU1NmIxN2Q3NmUzYmJlZDYyYzRhNGVhYzRmODg2MDM5OTY3NTJkMjM2M2M4ZDRhMjc4OWQxMjhmNmU5NTk5NDVjNjhjMzAxNDZkMTk0Y2NiNjgzOWVjNjUzNDQ2MDE2NTJjMThiMDA3NGUyYmM3NjY4MzExNjk3ZDk2MGM3MDY2NTk3OTI0ZDcwNGQwMmEwMTkzZmFmYmZkZjU3MWVlMGRmZTQxNGRjMmY1Mjg5NjkxMmJjMzIKK1NJRzogNDRiMDEyNDY2M2FkYjBjNzNhZWQ0OWY3MzQwMzQ2MWZjYjE5MTExYjBiYTE3YWE5OTY1NjZmNDc3ZTM3ZDUyNGIwZTFmMTA3NjEyZmM1MmE3Yzc2N2IxODFmYmY0ZDYyOWJkZGMwOGYzMDU4NGRlYzYxMjRjNWQzOWQ0MjMxMDIKKworVFNUOiAxODYKK1NLOiAgNzM4ZjEzMTBhNGUwOGY5MTdhMGE1YzFmYmFmNGVmNzJmOTVlZTYyZmNkZWQ1MDg2OGEzZGFmOTg4NTZhNDQ4ZAorUEs6ICA0MjI3MmMyYzhiMDg0NzBlZTVkZDhhZjg4NDljMDFiNzUwOGQzYTNjNjViMDMzMGU2OTVjODQxZDVkY2NiMmY1CitNU0c6IGYwZTdlZjY3ODJkMDRjNjk0M2IxOWViNjZmZjYyMjZiNzM2ZTNiMDk0MGMwOWJiMTI2YmZjNGM0Y2E3YTVlNzAxNmMyODZiN2JmZDczYWE2YTc5YTk2MDMxYmM4MWNiNWRhNjhjZWM3MWE2YTBkMzk3ODBjYmU2YTBjZDQ3NzRkM2FhMDZhODgxNjEwNDQ0YThjOWQxOTEwMjI5NGU1ZjYzNTE4N2FhNmY0OGQxMTkxMmM3MDk0YjM4ODMzMDI4ZDU3MGNiMTEwZGI2MDYyNWJiMWJkYzM3YWZmYTI1ZWEzYzhmOGRiZmMyNTE0ZjQzNjVjNjJiMjk4OWE2NmQyN2M4MDM4NGU3NGFlNWZiYThjMWMyYWY5YzcyYzQ5NzFlNjRmYTZhMWRjMjUxN2IzMWVhNTdjY2IwODE1YTdmZTJkYTBmMTQ2Y2FhMDg0MzFkMjVkMTUxNjYyZDlkMjZlOTUyMjlkMGM2MjgyMzY2NDEyM2MKK1NJRzogY2UxZTM1NzdiNmEyMTAxNmI5ZGQwYjUxN2JhYTBjY2IxMDdiYzE5OWI4YmJhZWY2OGY5NTBjOGVkNTgwMTNjODUzYjRkMzM4ZWVkYzY3NTA3OWFiMTM5MDQ2MmZmZWZhNmE5NTliMDQzZjhiNTY1MWM2Y2EzNzVjZTBiNGE0MDMKKworVFNUOiAxODcKK1NLOiAgODg0MWQyMmFkZWQ2OWMxMzFlZjVlZTBhMTBhYjBhOWI3N2NiNzU0ZWRlOGQyNTdhNTM3MjcyNmUyYjQ5OWM2ZQorUEs6ICA3MTVlY2NhNjM2ODFiYzZlOWUzMWQxODg0ODkwMmY0ZDk2ZmVhZjQzYjk1ZDAwODY0MjkwM2IxNzYzYmM5ZmI4CitNU0c6IDA4N2NhNmJlMmE5NTBjMDI0YjNlNzQ2N2ZlMDBhN2QzNjQ1NTVkNWRjNjc3MGY1ZWJkMjYwNjQyNTI1YmQzYzBmOTY1ZGIzNmQ3YjIyOWE1NzQyMWVlYzY0ZTRkOTkxY2RkZTU5MTIzMDM0NDcwNTUzZjRlYjBiZTgxYWQyOTM2YzhjYTI2YmNhYjRlNWQ3OTA0MGUyOTc5ODcyODYwMTY4NGE0NjgzMjNjZjNiYWFlNGQ5NDhkMGExZmQ5MDVlZmZlMTZkYzQ0NjQyMDg4ZGY1M2Y2Mzg4YmM0ODBlZGY0YWEyMDdkMGVkMTYxZWRhMzQ1NzEyYjRjMDBjYjA1ZmNmNjM1ZWMyNTg4Nzg1YmZiOGEyN2NkYzI4OTk2YTFkYjNlNjc4NzAyMzM5M2MwNzVkODNjOTAzOGZlZDc4OTljNTVmZWMzMDdkZTMyNDljMTRiZGE0OWU4Yjg5NTg2MDk0MmMzNmQ2NDBiYjg5Mzc3OTE0MgorU0lHOiBiYjJiYWI3MDAzZjEzMTFiZTliOGM4ODNmYzRmZDUyOGFkZmQ1MWE5Yzk5ZGIzZGNhOGRhMGZjYTk1OGRhMTlhMTBlYjIyMzMyNjY3YjFhMDA2NWQzZGJjMGQwNjI2OWExMjU5YjZhODkwNDg0YWEyMTQzYTUyNjk1ZjE0NWIwYQorCitUU1Q6IDE4OAorU0s6ICBjMDIxMzVlN2I2NWFhYzcyZjYzYzMyYmY1YmVmNWI2OGM3ZjNiOGVkNTYyMDhlNTllNDc1MjA3MGU5ZDA3MDk1CitQSzogIGRjZjYwMGYyNDQwMzdhNzUyMDNhZTExYWMzMTZlOGRiZTk5ODZmMGRjZTIzNDczOTM5MzM0YmY1Y2VhNDhiMGQKK01TRzogODZkOTQ5MTM1MGQyNTY2ZTcwOGVkMzU2MTg1ZDYxMGM3MzQ2NWIyYTVjNzAxMjkxOTk1OGFmMmNmNzZhZjk5NTIzMGQzNjBkZTQwMGI3MTM3MTcwZGQwODM1ZjEwZmNiZWMyMjRlZTRlNDJjN2QxY2ViYjdmNTgwZmVhOGVkNjIyMzE2M2JhY2RkMTkyM2E1NzJjYmI2ZGMyNmNhOGIxN2FkZTY4YzZkMjgwOGM0Y2ExZWNhMjhlYWU5YTE0NWY2OGQ0MDc5ZDhkNTlkMTQwZTk1ODIyOGU3ZTk5NTIwZTM0MmRiZDc0NTdhOTE1OTc0MGY0OGJkYzI3YjkzYmRhYmViYTQ2NWNiZjBjOGRmNWVmMmMwZjkzODZlZWJlNjU2ZjVkNzQ5ZDVmOTE0N2Y1MjUyNjY5MTBkN2I4MDM5NmE5MGJlNWNjMTg4YTlhOTQ1ZjkzZTc1M2ZjOTliYWZhMThlZTBhNmRmZjc5YmY4NDg0ODk4ZWYKK1NJRzogZGQ1Y2JhZTQ3OWViNWUyMjk1NzRjMjFlYzNiZWQ5MTExMTNhNTdhMTkxNmQzMzEzNDU3NTE1ZDU1Y2M1YjZlNmViYzUyYzkzZjgyMWQxMzk4OGRiYmE4ZGY1MDk2ZDU1ZmY5YzM5ZTdmOWQ1NjFjYjU4OTMwYzk2YTdhNWQ2MGIKKworVFNUOiAxODkKK1NLOiAgMTU0YTQ3ZWJhMWI4YzM4MzYyZWE2MWZhZWIwYzBhZDdlNjFlNDEyYTNjYmE0Njg4YWYwZGIyYTQ4NzIwOGIxYworUEs6ICAxNmRlMmM4OTRhNTBjYmQ0Y2E5MDQxOWE0Y2E2NDk0MmNiMTRiZDMzNWM1ZDNmNGE1M2UyMzljMjgwYmRhNzI1CitNU0c6IGJmNjA3ZThiNmUxNGQ5YzhhY2Q5NjgxNWFmMGMwMzVhYzczYzQxMDRjOTM3ODZjY2MxYzlmODU5Mzk1ZGQ3ODE5MDAzMjBlYmYzNTZhYTk5MWNkYzlmNTAzZmNlZTlmODM2NzU4ODhhN2Q1OTIwMDJkMmE1NGE1NzNhOTY5OTRiM2ZhODY1NTM4YzYxN2VkOGFkMWZmNjIwMTgyODhhNjc0ZjQ0OWJlMGFhYjUyMjJmNzRjNGZkNDc1ZWQ2YThkZmIyN2Y0NTI4N2IyMmIyYjZjM2JkMTUxNzlmMjY3ZDE1N2Q3ZDhhNDE1OTY3OWJlODViMjVjMmJiMmJhODUwYWFlZDlhZTNhZTU3MWJlNGY3NTgzNjMyOWNmMzZmNDEyYzFjODBmMTQxM2I3NjYxZWFiNGE4ZTExYjYwMjQyNDRmYzYyMzIzZmYwMmUzOGFjZWIxNzM3YmQ0NzRiZjFlOTgwMTVkYmM3ODhiMDI3YmJlMjE3Y2Y0ZTcKK1NJRzogZjRiNmViMWE4ZDk1MGU4ODdmZDJmMzBmNzBhMjNiNDE4NzE0OTViZmE1YjhhNGFkMzk5NmNkOWJmNTFlYjc0MmUwN2Y0YzRkMmRhNGIwMWFiMDg3MzY3YTUwZTJiNjViM2NlZjUxNGU0MGQ4Mzc1NDBiOGM4OTk2NjQ4NTkxMGYKKworVFNUOiAxOTAKK1NLOiAgZDMwMjg0MzFjZTJlZWY3M2JkOTQwYWI4NGNhMjlmMTNmYjI2NDM2YWEyNWUxYjdiZjI2Y2IzM2YxN2ZkZjgxNworUEs6ICA2M2RmMjAzZTI4NjBiYWM0ZDM1MmU3MjJjMWM5MWZlMzc3NmUxY2JjYWU4NTUzYTRmMTk4OTAyNjBiZjBlNDU3CitNU0c6IDA4NjMzNWQ2MTI3NWQxNjhlYWFjMDU0MDQ3N2Y1MGQ0YjE1ZjllNTBiOWJlNjkzOTIxZWQ1NGE5OTQxYmM0MDY0M2NkYTYyZTFkODA1ZDAyNTBhODExNDZiZDVmZTJkMzllODE0NDRkMjFlMmIyMWIwMzFjMTExMzA2Y2FjYmY1MjcxN2Y2ZmI0Y2QzNDE2ZjEyMTVmOGRkZGNlZGQyZjAwOTZiMGZjZmEwYTZjYzJjZGU3YTJiYWI3ZjFlMzI3OTBiNTM2MWRmMzY3MTQyNGNjNzIyZjIzMWJmNzE4OTViY2RjYjdiMjJlZTA3NGU4ZmI0YTk2Nzg1MDRlNzM1MzY2YzE3MmYwNzYzN2I3YTkzMTQ5YmIyMWYzODg4MzM3OGExZGIyNzNmYzIzMjM5ZTM1MzM3ZjljZTU2NmQ4ZGRmM2IzMTMzY2FkN2YyY2U4MWVkYjUwM2NlMWQyN2M1YTY1NzE2MGI3OGRjYTlhZWFlYTM3OWJlOWM4NQorU0lHOiBjZTk3MjlhOTZjM2VkMjg5NDNiMjc4MzljNzMzODJlY2Q1NzI5NjBjMWY5ZTkwYzVlZmY5ZGQ0OTlmZjQ4ZjE3ZDI1ZWRkMTI2OGVmZmU0MWVlNmE4MWNlNDhkODRkZTUxM2RmOWM0MTQ0MjYyMWIyZjU0OTFlMzQ2YmUxOGMwNAorCitUU1Q6IDE5MQorU0s6ICBlZTg5ODVkYzI3NTA0NDQwYTg3NThkNGM1M2U0MjI1MjE1Nzk3YTAwY2Q4NjMxZDU5YmQ5M2JjNjZmMzczZDVlCitQSzogIGNkNjQ3YmIwNjU2OTNkNDg2NTg5MTU2YTlmYTI2MTQzNzUzNGRjODZmNDZmNzJkMGE4MDAzOTlhN2FmMDEwZjcKK01TRzogZjIyMjA0ODVhZGRmZWJjZTAyYTgzM2FjYTMzMzgxZDFkZjkxN2VkNjA5OTUwZWQyNGY4NWUzYjAyYjJiOTk0YjRkOTM5Nzg0ZTMzMmY0MTA2NGM4YjRhMjYzMGFiMzY5NjE3NDJhYTFjZmZkY2IwOGMxNDRlZWFlZGVhZmQ0OGI1ZGJlOTZiZjI0MzUwZTE0ZmQ2ODI4NmJjMDhlZWFlZjhiYzZhZDllMTk1ZDE0ODRhZmNkMzBhZmE4Y2VkNDg0ODEyNmQ1NmM4MWI0M2MyN2E1ZGJiZGVjMWE1MGMxMTA2MmNlMjFjNjFkODYwYzI1YTg2MmZiYjc1YzNiZDUxYzhkYzA3NjM2NjY4NjY5YmJmNzUxZWFjYWNjYjNiNTFkMmMwZDQxNDAzMTZjZmNlMmViMThkMjkwOGNlY2Q1YTE4ODY3OWJjNWY1ZGUyOTBmNTQ4ZTdlYmM1N2Q0MWI1ODlhMjRjZTg4ZWU0OGQ5N2U4ZDBjN2M3Njk5NjAKK1NJRzogNWJkNjBhZDVlOWJhZDk5MzJjYTljNzVmMjMxYTc2ODg5YWU3YThiODY0YjkxZDFmY2JhNWM1ZDRiZmExZDkyODM4YWRiOTc0ODQyYTA3MTA3NzliM2UzMDk0MDQ0OTA5ZTkyYzdjZjA0NmNlNTE5ZjRjNjhlOGYxOWVjMDNjMDIKKworVFNUOiAxOTIKK1NLOiAgODBkZmUyYmY3Mzg3YmFkNDY1NGViMDc2ZjhkYWU5NTk1MTYzZTQwMTI3ZjVkZjQ5MmRhZDdkZjA0YzcyMjFjNAorUEs6ICBkMTc4M2NlZWI5Y2Y4ZTRkMDc3NjRjNDczZmE0MDYxYjgyNzQzOTcxMDNmMjA3NmQ3MDMyNDlkNzU4YjhmYmQ1CitNU0c6IGFhMDlkNzg0YmIwOWRjOTk5OTMxZWJiNGMwMGU0MjRjZWZlY2ExMDQ4MThkOGVhZjA2NjFmMDk3MjhhZDAyNWVmNDczOTMyMTA1NzFmMTc0MDRlOWFhNmQ4Y2JkNWZkODhjZDdkZmI4ZTJlOGExMDhjMDVkZTIwNmYzNDA4MjM0YTNiNDYzZGJlNzFhMDdkMDU1ODczMjQ1MjRiNzMyNmVlNzlkMzM0OGRkYmVkNzg3MWI4NmZjYjQ4ODAzMWRjOWVhOTNmNmI4ZDdmZGE2MjM5MzQ4YTU2MjQ0NGZhZjFlNzJkMzFhZjM1NDQzZTlkZjUzZTc2MmYzZTU2YjQ4NjY4Zjk3ODRiMzM2OGFiMjc4YTQ4ZWY0NTQ2YTI2Y2ZhZDBkMGE1MTYxNjk4ZjI2ZWU4ZDM0ZmMyYjNkNmRmYjkzYjAwOWFjMjk2ZjZhZmU0ODdlZTMzNWVhYzlmMDJjZmNhZTVmY2JkMWExNmJhNGU3MWJlMWIxMTI1NjJmYzIKK1NJRzogMjcyNzllM2NkY2IwM2VmNTU3YTVkZWZjMmY2YzU4MTI4YTZkYzNmOGIwMzg1OTU4MDE0ZTcwOWMxZjYxYjBhZTZiNDAzNTc2ZjBlNDU0ZDVlNGM2NGMxNzMxMzhlZTRiYmQ1ZmU3YjYwZDA2YzVhYmUyM2ZlOTllZTNiNDZhMDAKKworVFNUOiAxOTMKK1NLOiAgZGExZjg2ODU0MmNkN2NjZTdhNWNhM2ZhM2MyNDA4MWI0ZDIzNDRiMjFhMTU3ZjAyNjRhMzQ3MTMyZDE5NjU5ZAorUEs6ICBjYjNhMjVhNTNmMjcyZWE4MTM4MDQ0NjhkNjUwMGU5NmExZWFmODIyNzA1Yjc3OTBhOGFjM2U5OGNjNGU1MjRiCitNU0c6IGM2OTg3ZWYzODBkNWQwZTc0MTk2NDQzYWFhM2EzMjM1NmNiYzAyNjM2YzVhNGI2ZDYyYTgxMTRiMjExMWJjMWFiZGRkOWU0NGIzNjcyYzE4YjU4ZDRlZjU5MWFmNDU2MmUwMjAwNDlmOGUxMjc0Njg4ZTFmOGU1Mjk2ZDJmOTI1MmU3ZmM4NGNkMWQwYzU4ZTk4ZjBmMTYwNTMwYWEyMmM4NzFlZWY2NTJlNzE5NzRjZTkxYjRhNjVmYzI1ZmQwOWZhMWI2YzMyMDg2ZTk4ZWM3MDhkOWFiY2IxZDljYzhlMWEwODllZDhkYjIyMDZlZTk1NzAyMzZhZDY5YjNkZTY4MjE4NjJmZDJjNzBjZDgzYTMyYTY4YjA0ODYyMjk1NTNkOTI4ZGU0OGQwM2ExMDRlODczODE5NjRhYmVhNzY2ODM5NzZkNTI3Yzg0MTYzYTEyZWVlMGE1NTk4NmNmMTQzMWU5Yzg2Y2JhODE4MmNhOTQ2ODliYWNkMTY1ZmJjZQorU0lHOiA3NWM1MTdhZGU0ZjA4ZDc3NDYzMDU3NDNkMWE3NzZjM2M1NWViNWVlZGZkZmNiNWViMWQ1NjM0YTFiZGFmN2E0YjhkMjQxODdkNmM4ODUwZTNjZWQ2NTY3YTAzYzRjNTkzODlhNGNmNDcxMTRjZTU0NzMxNjBmMjMwNTQ2ZTYwZAorCitUU1Q6IDE5NAorU0s6ICBmMTNkYWVjMGVmMzNkZGQxMzNjN2QyNDRkMTBmZDI3ZGRiMjM3MDUyODBmZjVmMTgxNWYwZjY1NmQ4MzZmZTg0CitQSzogIDJkYzdmMTM2N2RlNjcyYzUxZTAwNWM3NGY4NzZmOTgyNTkzOTk2ODczYWNiYTA3OTI5MjczNGMyMDljMmIxMTEKK01TRzogZWMwMmZmMTgwNGIyYjMwOWFmMzE1OGI2NjI3MmExNGEzYWFkODNjNDFhNzE5ODQ2ZjcwODhjYTk3OTJhZjU3NWM3ODkxM2M0MzI3NTlmMGI5YTc0OGJkYzU1Njg0OTZlNDE2NThjYzFjZGI4ZGE2YzkxZDA3YzNlYzJmNGFmNTA0MjQ5Yjk5NmFhMDBjMDA3MWNkZmE3OTNmODJkMGVjNWQyNjcyNjJmNTE4ZmMwMjliODhlMjBiNjIwMWZiOWUwNWFiZDNmOTUyNGM1ZGEyZmE4OTc4ZmYyZWZkNDgxMjBjZjAwODIyZDFiZWU5MGRmODE2MTI1ZDhlZGMwY2ZiNWRlNjZkMTZiZTYzODk2YTQxMmE2MmIwMzFiNzExOGFjMTNmZTJjOWZhYTZiMWEzMzQyZjljY2Y3ODg0MTY2Y2Y0ODlhODRkZTI2YjVjZTViMjE4NTZhM2FmMjg5YmM2NjIyYzBhYWI5ZjIxNDJkMzkzZjVkNGIyMzY3NzlkYmIwNjYKK1NJRzogZGI3NzE4MzNmN2ZkYmFjZGFiMmI1Y2M4MGVlZDUwYWZkZjEzNzgzYjdmZTVlOTAzZDVkYmI0YzJlNTM1MzE2YTZlZWY0YzM0ZjAwNGQyYjlhNGUyNzAwYmQ2ZTJhY2RkNTY0YzNjODBjYzY4YTMwM2Y1ZmIwOTFjYjQzNDBmMGEKKworVFNUOiAxOTUKK1NLOiAgNDJkYzE2YzU3ZmI2ZjEyODk0NWZhMTAxZTA1YmJmNTQ4ZWY3ZDk3NzI2YjY5MmZlNDA0MDY5Y2M1N2NjZWZhMAorUEs6ICAwYTFiYTVkZjUyMzk5NmY5NTRiMzRkZGNmYWJhZDNmM2RlZTIxYTVmYTdhNGNlMzIyZDIxNmJkOGNjYWY0MzhjCitNU0c6IGYyNzE0YzIzYTNhNmZjMTFhZDE1Yzk4MGI3MzUwZmM4NDIxNzg3NzY2MTE4ODA1NWZmNzUwZDgyYzQ5YzVmZWY3YmM4ZTZhYWM1NzRhMWI3OWEzZjI2ZDE2OTY5YzBmNDA2ZWVhYjNlOWUxMjg1MGE1NTcwOTc0NWUzMGRmZmE2MmE2OWRmYjJiNjRiM2MxYmQyYmMzNTg2ZTI2ZDRlZWE3MTRkMmE3YjcxY2Y3OWZiOGZmYmYyYWFhZDAwY2EzZTRmMmI2ZjUwM2NjMWZlZjJlYWIzNjU2ZmI0NGY4ZDYyYThkYjhhYjU4ZjM5NDY5Mzk0OWVlYTU3ZmFmZWNmMDA1ZjZlYmYxMjg3ZGJhNGQyZDYyM2MwMmVhMTcxZjU2N2U1MjZhZGQyMDcwOWViY2FiOTYyZjgzZDk4ZWY2NjhlYmQwMWVmMjA0ODhiMzY2NWUzYTQ0NmZiZmIxM2QzNDA1MDk0MmM3NDliYjJkZmZjNzY2MzY3ZmQ0NTJlNjhlNWIwYzYKK1NJRzogYzc1OTc3ZTgzYmNmZTlkZjcyOTJhODYwZWQ5NzI1NTViNWMyNDQxNmZkNGI3ZWUzMjg1Mzg4ZmE1YjE0NDc2MDhlNGEzNDc4MTNjZmUwOTM1MTJhNzY1MWU0MjJlOTg2N2RiN2I5N2MwYjA4NjdmMGI4YzdiN2Y0ZjAyYzMxMGQKKworVFNUOiAxOTYKK1NLOiAgOTBiNDU1YzZiYjljZWM4M2UxMzczNTcwNjUzMzlkMDMwNTI1ZDBlYTdmNWI5MjNhMmQ1OTcyYzNjMTJhYTM3YgorUEs6ICA1Y2VmMDM4YzE2YmZhNGI0YzkyM2EwZmU3MGNkN2YyNWM4YmM4MzdmZGY1YTdlZmI5ZDk1ZjIxYjk2YmU5MjVhCitNU0c6IGM2MmNmZGI5ZDIxZWVlNmJlNDdmMzA3MjdhYWVlNTFmMDcwMzc4OWE0MzFkMzIyMjg1MzMzNTAyMTdhOTNhMTg5MDA2NjljOTU5NTZmM2YyYWU5MGRjNzQ1YTcxZTE4MzQwZDA1OGQxNmI0YzZmZTMzYjY0YWY4ZGFkOTczZmU1ZGMwMmU4NTIwNzA1YzdhOGJiM2NjYmUxODM4YzZjMjQ5MzM3ZjliNmE0YzBlMWY4YTRlNWQxMDMxOTZmYTc5OTk4OTIzZDA0MjJlOWQwNzlhNzJjYzJhOGY4NmQ2NTkwMzFhNjA3ZDRjY2EwYjk0N2IzYWJlZWVlZjY0YzI4ZGE0MjBkMDVkZTY2NWE1NTEwZmU1NWY3NzU5OGVjYWQ3ZmFhMGFjMjg0ODAwYjUzODI5Mzk0YzRhZTkwYmU2NjY3OGZmMDRhYjQ2ZGEyNjVhZTA2NDAyZDhjODNjYWQ4NGQ2MWEwNTFkZTAyNjA1NTk4ODhlNzc5Zjc0YjcyYTVkNzFjMTMyZgorU0lHOiBjOTM0NWVlYzJjNGEwYWVjNzMyMzg2NDk0YTY5YTNmY2U4YjhhMWJlMzY2YmJlZDE2NTlmMTMxZmU5N2NjMDM3ZmIxYjdjMWI2OGIwZjMwMjM5NDVkMjAwOTBhMGNkMmMxNTUzYTQ3ZmFlYzRkNjZmZDgxNmNlMTIxMTY4ZjMwOQorCitUU1Q6IDE5NworU0s6ICBkYzE4NWMyYmEwYjM3OGRmZTVkZGE1MTBjMzJmZWZmNTM1Y2EyZThhMDI0MzRiMzI2ZTAxNThiYzg3OGU4ODQ4CitQSzogIDMzZDZjYzA1YTQzNGU0MTkyODBkNTg2NGExYWYyMDlhMmM2NzY4MTRiNzBmNzJmODE0MWFjN2UwNTczZWU2M2UKK01TRzogZTI3NmIxMTkxMmNjYTVhODRiYmE2NTBjMTcyYWVmM2E0ZDVmOTFhYzcyMjkxM2JiODkxYTNhYjA0MjRhYjA3ZWE3MDljYjhiYmEzYTNkMTFmODJmNTFjMmFmMDE2MmE4MmY3MjE5Y2UyN2IzNWEzMDUwN2Q1MzZhOTMwODE3ZTQwZjg1YTIyYTVhNDMyYjk0ZDE5MmMzYzg5MTE3NzdjZmRiN2ZlOTM3YTY3NTAyNzcwZDZkNzU3NTNkM2FlODgyMjllMDhmMWVkMjNiNDMyOGQ4NjJhYzYxODYzYzA2M2VhOTg0OGY4YWI5NmEwMjEzZDdiOTM2YzQ4ZmU3NTQ4MzZjOTg0ODc4NTlkMTk5YjNkOTQwMzkyNzE2YTFkNTY5ZTZjMGNiMWJhOTE4OTMyY2Y4ODUyNWUyNTZjOGFiYjExYWFmMGI0NTQ2NTVkNWRiNTU3MTNjZWJiYTI4N2FlMjAyNjUxYWM4NzJiZmM4MGZlYWE3ZTAwZDQ3YzBiZTM4ZTY1OGY3YzUKK1NJRzogZjFlNDQ1MTRkMmVjYmNjOGQxYTdlODRiZjU4NGNlNzMxODM1ZTk4OTRmODg5NzRmMDk4ZDQ1NmI2MDcxOGY1NzVlZjRkODA2MmYyMTgyNTA0MjUwY2Y4M2JiMmFmMmE3OWIxZjU4YTZhOTdiZDk4ZGE0NjcxMzJkN2JlYzJmMDUKKworVFNUOiAxOTgKK1NLOiAgOTA3MjFjNDNiYzM2NmYyNGJmNGU4Yzk5M2UxMzgwMjQ2ODJmMTAyOWRiYTM1YWJlYjBkNjBjN2ZhNzEwMDIxYworUEs6ICA3YzYzYTJmMTNiN2IyMjBhMGJiNzUyZTM4MDA3NTNiOGI2YjMyNjY5Mzc4Y2UxMzFiYjc3YTlhOGQyMzBlOWFlCitNU0c6IDY1MWM5NjE3Y2FjOTU4YzdlZGQ0YTVmM2ZlZGZiODNkYzk3MWFiZmJiNjlhMzFlODk4Y2NhODQ3MmVmMDY4MDM0YTZkMjM3NmVlMGU3MmQwYTliZmVlMjc1Nzk2YzM3OTVhZGFjOGViZTFkMTJiNjZlYzI2OGY2Yjc1ZmEzOTQxMTU0Zjk5ZTIyM2ZhZjJjYmFiNWI5MmUyYjNiYTdiNzliZTc3MDBlZjlkYmE2OTI1M2NjZTUzNTZiMGM0ZTc0NzAzY2ZjYWZkYjU1NDY4NTBiNDYyMzI2NzVjOTBjMDJkNWU0MjZkMzNkNjBjZWJmMGM3OTMwMTgyMzc5ZGJiMDA3ZjUzNjE2M2M4ZGRiYmQzMTU3YmIyZGE2MjM0MDEzM2YwMGFlMjY4MmVjNmJhYTY0MTZiNWEwMTUyMWNjMTBlMDQ2OTUyOTVmMmU1Yjk0YzA1ZjAwMzgzZmZlOTU0ODMwNzk3ZjZkZjgyMzE3MjUzMmY5ODE2NWZlMzE0YWIzMjU5MjlhZjgzODUKK1NJRzogZDIwNjRhNmQ2Yzk5YzZjM2YxNTJkMmQ0MzVmMjRlMzRiNTQ1OWIwODJlZjExZTk0NGE3N2ZmNTRkZGY5ODYyNzM3ZWNiMmFjOGQ1NDIwN2QzNmM1MWFkNDFmMzY0OTBhMTExYmE4MGUxMjZiZmVjYjA5ZGVmNmFjY2JkZjg4MGUKKworVFNUOiAxOTkKK1NLOiAgOWNlYzI0Njc1OGU0MTJlNzM3OGI0NTc5ZWFmZTlmYWM1YTI1ZDU0MDVmOTI3MGI1ZDdlNTQzNDE0ZWMzZDVkYQorUEs6ICA5NzVhOWU2YTE1MmNhZWJiMmY5ZGQwZGViNzZkZDkyMmI2ZGM3NzA1NWRkYTAzZmJhZTllN2M2ODVkMDczYWExCitNU0c6IDE3ZWM5YmQ0N2FkZDZjY2ZiZDc4N2FmMGQ5MDEzZTljYzk3OWFhZjg1MGUwOTQyNmQzYjI4ZWRmZDcxMjk2ZWIzMWZmOGIyMWM1ZmU3YmUwNTBmNTM2MzI0YzNlYzQ4ODUwZTBiNTA4YTM2YmI0Y2I3ZTc1NGIzMjcxODNhMWIzOTRkODhhNzk0MWQxY2U4ZGFjNjJhNWQ4MjkxODc0ZDc4NDg1ZTUxZjI5ZWQwNTg2NWEyMDZlNTJlY2IxMmM1ZDEwN2Q0ZmY5NmYyNWQzYzVkMTgxZDJjNGJhNjQ2MzYwMGRiMWNjYTMyODU3ZmNmNTk3Y2JkZmIyZmRhMjcwOGE4YWJhMjgxYjQzYzNkMjhjNGE0ZTc5ODMzNjE1MDlmNjFhMTA3NGU2ZjBhZDYxMDFjN2I1NjdlZTQwNzhlOTgzOWM0N2Y0NjUzMWI3MjlmZjBlZmVlZjdjOWQxYThkODMzZDljMGY0MjgxMmEzNDE4N2MzYTc3OGMxNjVjMDlkNjQ1OWM5YzdjZWFhMgorU0lHOiA5YmFkMWUzYjEyNzllZjY1OGY0ZDA3MTY0NGM2M2FlMmI3YTc4MDM1N2U5ZGM0MjZmMTY1MGVjMDYzNGRmYzUyMGY4ZWRhOWRjOGYxMGFhNzMyNGM1OTQyZDIzNDdmZjg4MDJiZDkwZTk1ZmNlYzMxMzM1MmNkYWU2NGYzMmEwNAorCitUU1Q6IDIwMAorU0s6ICBkMTQwM2Y2MzIwMmUwODA1MjU4NDNiZGUyNTVlZWI2YjY3ODNjMWNhYWU5ZDZlZDAwYmE2MDgwNWJlZDE5NDFmCitQSzogIDIzOGFlYTNhZDZkNmYyNzc4M2U3MDUxNmJiZmNjYTQ3NzAzNjZiNTBlZDBmZTZhNGU5NjZiNTNhZjEyMWE3MjEKK01TRzogYzRmMTdkNDQyZmJhNGNhMGRmOGRjMWQwNjI4ZDdkN2YzNmI2MGI1NzU4ZDdjMTNiODBiOGY5N2E2MjEyNGQ5NmEyM2IyNzk1NjU0OTVhOGFjY2FiNTk5NzExNWIxM2E0YmEyMjBhNzM5NTdlYjc5MzA1MjBhY2JiZmI2ZjU0Y2Y2ODcyNmI2NDUwYzZmZmE5NDcwYjA1NWVhMjYyOTE0ZTJiYzYxMjYzM2YxYWMzZDA2MThhMjNkZmYxODhhNzMzZDc2YmNiY2M0NjBmNTJhYjYxZTE5OTM4ZjljOGNhYWE3OTJjMjA4ZDFmNmM3NTQ3Mjg5MDVmZGE1MWQ4ODFhMzQ3YTUzZGE3NDRkM2JhYWRjMGE3NmM0NzRjNTU4NjgwMjY5MDk1ZjkwODRhNzQ0NzFkNWMwOWZmYzI5MTQxYjViZmFmNDk1NGRmYWNiY2E2NjNkMDM3YjE3ZWJmOTU1OTg4MjIzM2U1Y2E1YThiZjc1Y2NhNGZjOWM1YTQxMDlmMzJlMTQ1ZjM4NTNiMTcKK1NJRzogOGU2MGU3M2MwNjM4MTY3OTVlMjlmNWQ2NGVjZTExNTlmMWI1ZDUwMjFhNmY4ZjY1NWUyNjFhNGQwMDI2ZjViOTRmZjI5MjMyNTA0OTlkOTk1Mjk4NDgwNTEyZTQxMjYyNzZhYTRhMjI2ZDAxNWE5NTgyN2IzY2U2OTJlMjMzMDIKKworVFNUOiAyMDEKK1NLOiAgYmRmNmJkYzMxYWIwYjUzMTM3ODQ0ODNhYmVjYTZlYTVlOWNkYzY4ZjgxYjIxZjM1MGQwOWMzOTA3YmI5YjZhMQorUEs6ICAwMzYyNzcxMmI3NTVlNTA2OWZiOWFiOGY5ZTg5OTcyNDAyOWE3ZjI2OGFmOTM5ODgyMWVlZWM5MzYwYzkyODViCitNU0c6IDkwYTY2YWFmYTU2NDJhOThlNzlmMGQ4ODE0NzA4MDE2N2IxMWU0NDY2NTE4ZjE5NWNkZGQ4OTQwZDEyZWU0OTE4ZDMxYTZkNGNiNzdkMGJmNWFmMjk5ODNiYmU1MDg1NjEwYTc5ZGFmMGM3NWE3OGNjYmNmZmJiZGFiMjE4OWMzOTRhZTI0ZTI2NWJkOGM1NWZkM2Y0MDk4ZTFiMTc1NTc3NTQ5NTE4ZTdhNGRjZjc0NTIwODZkZDEyNzhkZDU4ZWE0YzBhYTY5MGU5MTc5NTFlZjM5ZmNmZjYwY2JmYTFlOTA5MTBiYWI1Mzc0OTI4ZDQ3MjJmNzAyYmY1YWQ2MDI4ZmZkYTY1NDFmYTViYTFhMzc3OWVjNzhiMGE5NWZlMzg1MGM3NDhiNmM4ZjQyZjMzMGVjNzk1NDFhNTJhMWNmNTdkYjcyZGY0ZjkyY2U3Zjc0OGFlZWYxYWYzM2JjNWFlMGE4MmM4OWRmZjIxNmYyM2FlYzE2OGE3ZGJiNTEwYWE2MzJkYWFiY2M5NzFiM2YKK1NJRzogMzhmYWM2MDNlZDI0NmY4MzNmMWMwZmQ0NTg1Njk4YjBhNzEzMDVlZmYwZDE0YTAwNDliM2NlZjA3M2JkMDM2ZGQ0NTFiM2RhYmFkYWFlYWVhMmFlYWY4M2QzOTU3NDZmNGU4Njg2NmFkYTk3MWNiZTQ4MmVkYjA0MTkzMzJmMGUKKworVFNUOiAyMDIKK1NLOiAgNTdiM2IxNGFjZTFjZDBjZDYwM2U2MzI4YmQyMTllZTdkOWQwOTQ0ODdmYTY2OGYyOGFlZWMwMmI0M2M5MDlhNworUEs6ICAyNGU2YjYzOTVmOTdlYTBlMjM3MTg2ZDQ2OWI3MTkyM2QyMTEzYWRmNDAzYmVlZWI0YTJkMjc5MDlhYWYzZWRhCitNU0c6IGIyZTBkZWRkODAyZWVkOTk2ZGJkNTgzNmJmODY4OGIwZDEyMDFiZjU0NDJmZjliYmQzNTFhZWVmZTFhMGMyMWZlYTJiNWM5ZmU1ZWRlZTQ3ZTkyMTA5OWIwNWFlZGFhODAzNjdjMWNlMDg4MjFkNzgzYTViNjRjZjA1OWMwZjQzMzUwODM5ODZhNWE2ZWNmZjhjODRmZDQwZTBiYTVkZDVlNWQyZjAxMTEyYTg0Y2U1Y2Y4ZTBkYjc4YmViMTgyZDkxMzljMGIwZjNlMDA2MGEzZmE3Mzg2OWU5NjQyM2YxNzBkZjlhZjFjYjljMzU1NjZkODdkZmY1NDIyMjNmNmQ0MzliZGI1NDcyOWQzNjZhZmY2MzdiMGYzNmE1ZDE0YjE1ZDYxMmJkMDMwNzZjYzRkMDRjMWYyNWIzYmE4NGUwZDFmZTQ3NGU1NzE4ZDFhMTdkNWE0ODg0NjU2NjJlZTRjM2Y2NjRiNGM5Mjc0YjY0OWQ3OGNlYTRlODUyNDNmMzcxMzIzOTA0OGE5MDhjZTNlMQorU0lHOiBmYzc5ZmRjNmQwOTA4ODdhNjFlNDNjNmI5MTg3YjY1N2QyZTRkOWNiYWZkNmU3Y2FlYjdlYmRlYTg0MjgyNWI3OGZiOTQ5ZDJjNDlhMGNmMzhiNmM3MzI5NmQ4MmM4ZGRlYjFmZTJkNDBhYWRkZDc5NjRkYTY4YWNmOGM2NmYwZQorCitUU1Q6IDIwMworU0s6ICAwMThhMmMzZGVlYTUwYWI1MDY3NTFmOWMyYWRhYWRmZDllMjE5MjEyMTYwOTkzMTY4NGViMjY1ZTE5M2U3Zjg5CitQSzogIGFmNDEwYmRkZGVmYzY0NGVmMTJjOTg5OWZmNzFiOWUxZDBkZmEzZDY5ZDhjMmNkNjc2YzE5MTZiMzQ1OTFjZmQKK01TRzogY2Y3ODEzZWZhYzEyYWQxYzdjNzMyMmNjYmU1NGFhMGU5YThiYTRmZDQzNDViMDZlNGNlN2EzNWM4YjFjZDVlM2Y3ZjA2ODg1MzM4NDliYTJjZjRjNzViNmYyMDkyNmExMTk0YTcyZGYwZTFiMWIzNDQ1NmEyMTMzMTEyZDAwNjcyMmZlODExZDVlNDBjNDEyMTE1OWRlZDg4OTkwYzBhYzJiZmQzNGYzNWFmNGYwN2NjNDAyZTlhMzgxYTY3NWQwM2ZlYzdlYzQzOGM0YWQ5ZDkyOWFlYzhmMjQyZGVmMDIzYzk5M2M5ZThiYTE4Yzc0MjhlODhmZGU2OGE0NzExZTUwNmQ3OTY5ZjYzYzhlMGJjODNmZjBkZTRlMTMzNjEwNmMwNWUwOWQ1OTIyNDAwZThhODFiZjU0ODg1NjY3ODk5Nzg1ODgyYjcwZjIwZGQ4ZmIxZTc1ZjU4NTViNzY1YTI1NmRhNDM0MWJmMjNlYTBmZmExOGFhZGRhMzgxODE2OTQ2MDAxMDQ1NjY5YzhkMDRkZjAKK1NJRzogN2E0NGU2YTMxOTMyZGVlNmRjMmQ4Mzk0ZTI5YTY1NTFkMTNlNmM2ZmZkZmEyMThmYTViOTk4NjY4ZDg0MzlkYjVlMDUzNzlmYmZhMGRhNWI1NjNlZDk2NjQzNWFlMmM1NGUzYWQxNmUxYTlmY2ExZjVhMTU3YTA4MDcwNGFiMDMKKworVFNUOiAyMDQKK1NLOiAgYmVhNDQ1ZTliNmQzZjIxMjM1OTEyY2Q2YzQyZWMwNTc3Mjk3Y2EyMGExMDM1Nzg4MGMyYjg0NmRkOGUyY2M3NworUEs6ICAwMjQxNzQ5NjYyMjE2OTllYTRiMGEzN2U1MTdmZjliMTY1OThhZTRkNGU4M2JmYTNjYTUwYmM2MTY4NDFmNTk1CitNU0c6IDQ3NDNjN2MwOTlhYjgxNTkyN2IzNjc0ZDAwNTRiNmRlNTlhZjI4MTFhYmMyY2Y3ZmRlMDhmNjI5MjkxODVhZGMyMzhmYWRkNWU3NWFlM2JhMDAzNmZmNTY1YTc5NDA1YjQyNGY2NTUyMzMxZTI3ODlkOTcwOWFjMWVjYmQ4MzlhYTFlOTFjODU0ODE3NTk3OTU4Y2M0YmQ5MWQwNzM3NzUwN2MyYzhkM2MwMDZjZmViNmMwYTZjNWE1MGVlZTExNWUyMTE1M2RkMTk4ZWEwYTNhZmY2MmI3MDc1ZDVhNDYxNzg4NzgzZjA1MGU2NTljNTcyOTYzZDdhNTllNWFmYWEyYjljNTAxZjQzYzZhYzA4YWI0Nzk3YzQ1NjZkMjJiOTNjZGY2NWE5OWEyYTFkNjM4ZTc5ZjcyYjVmNDYzMWZlNWU5ZTVmOTY4ZjZkYjdhMTg4MGRmNTFkOGZlYmMxNDk0MjY3MmY4ZWE2ZmMzYTcyODE0YTQ0ZDY2ZDE0ODQyMGE2OTAwMGY2OGMzMzBkZTViODBmYzYKK1NJRzogNjk2NGI5YzU5MDNlNzRlOTkzMjhhY2VmMDM2NTU4ZWVjZDMzNjkxNTBhNTJlMmNiYWQ0YmJiOTdkNDYxYjNkZmM2YjNlODQ1NTgxM2E0ZjRiZGNhNDYzMDJlMDJlNjgzZWNlYTE4MjAxNzFjNTM4ZTU0YzNkZTZjOTU0YWE0MDcKKworVFNUOiAyMDUKK1NLOiAgNjQ0NzU0MGVkN2JlMGExMWMyYThkZTc5M2Q4M2M2ZTI0NDk4M2RiMThkNzhlYzlkNzVmMTcyOWM5MmUwZmRmMQorUEs6ICAzOTEyMTJjOGVkYzRkMzM0YTViZWM4NjBlZjBmNWViYjVlYzQ0ZThiYjUxYzBmNjc0MTk5ODk1OWIyYjM3OWZjCitNU0c6IGE0MzgxYzc2MzhjNDg3OTllOWI1YzQzZjY3ZmMzYWEzY2JiNWVjNDIzNGYzN2U3MGNjY2NjZWQxNjI3YTU3NjgzZDFlNTNmNGUwODgzZDhiNDYyYmY4M2YxMzA4NjMwMzY4Yzg5YjQ5MTUzM2RkYjhjOWE1YjllODE1NTAwMmZkZDU4MWE5YTViZTBlNDMwYjkwODZhNmJlYWM0NzIwMjEwZjg3YjE0ZTg2MmQ5N2U1Y2M2OTI4Njc4NmE3NTg2NzIzZjIzMWVmMGUzZTFiOTMyZGJiYTNhMThhMGNiMjIxY2IwN2Y4MGU2YThlMTMwMDA1NmMxM2U3MDJiMjNiZmIzMjUwZWM3Y2M4NjRkNWM3ZWM1Nzg2MjQwNzA5YzU2MDI0ZWE2YmU1ZjdiMTVhNGZhNTU1NWUzOWE3NDRhMWRjNTU3ZGY1Yjk0OGRiMjIwYjNkNTc0NTc0NjY5MWRhY2I0NDIxNjQxY2RjYzEyZTdlYzA0NTAyOTNmMTllYzU3YjA5Y2ZmMTM1ODQ3YWFiZTQ0NmE2MTMzMgorU0lHOiAzYWI1Zjg4ZTJmNzI3NmI1YjY1ODNkZmZiYTU2Mzk5OTNhOTA1ZGJmOWI4OGNlZWFhYWFlMzMzNTgwMGU0YTVmMTBmODNkYTZkNjIyNWE4ZGJlOTlhZTgwMDc1MDA5ZGQ1MDg3ODZiMzk3NTExM2RiNDc4ZTE0YmExMDFiZWUwZgorCitUU1Q6IDIwNgorU0s6ICAwYzU4N2E4MTFhZGQ4OGI5OTQ0NThjM2M4MDhhYzRlM2E4M2FmYWIyNmQ0Y2ZmNWM5NjFiOWRmMGI1YzgzMzQ0CitQSzogIDA2NzgzYjBjZGNjNTAyOGM1NjM4YmQ3NDhmMGJjNzZmN2U5NGQxYWEyMDE1Y2E5NDg3MzhhMzUwMDQ2MGFjYTAKK01TRzogZjU2ZGM2Yjc2MDc2MzI1YjIxMjZlZDExZDFmMDlkZWNlZjlkMTVjMzFkMGU5MGNkYjFhMjdlMDg5Y2M1NjMyOWY2ZWMzZjY2NWViNjczOWVjNTY3OGIzZjM3ZWUxZmIzN2RlYjllMjQwMDkyYjdhODhmZDI1NTI1YWNkNTVlMjk0ZWIxMDQ2ZjliMWI2OWE4NDdlYjljZWI3YjE1OTNiOWY2OTc4ZWY2MThjMTVkZTRlMDU5ZWNjM2JmZGEzMjk3YTE5YzJkZjIwMmFkZjcyMTU1Y2YyMWVhYmQwMzk0OGRmMTUxOThlOGE2OGIwODg0ZjkzYWQ1ZTM2ZWIwOTgzY2NhMzBlNDVhOGI0YjVmYjgxMzZmZGVhOGEzMzQxZGQ3ODc3NTQwYTU1N2RlYmY3NTMwY2MzM2FlZWVmNjI3MWMzZjBhZjZkMDk3ODdlODE1ZjJmMWRkMjVjZTRkMmZkMDlmZmE5ZjUzMDgxYjQ2OWM1MDBkYTRkNDQxODBjMDRlYjE4NjkzMjljYmYyZDgyMzE4N2U4MzFjMjQKK1NJRzogMzNiNGY0Mjc0ZjIwMDA4YTcyMWQxZThkMDU0YTJiNGU5NTMyN2UzOGJiMDdiMzNjNGJlZTdlMWNlMDIwYTQ0MmZiMjYyN2VkYTNiN2FjOTNjZDNhYjBiMTJiOTk5MzVhMWE5MjMzMTExNjA0ZGE0YWNmZmI1MzE1YjkwNzEyMGIKKworVFNUOiAyMDcKK1NLOiAgNjZjZjQwMWEyMTQyZmNmNGE4MDE4MDQ2Y2Y0MTQwYmNhMThkNzZlZjYyNjZlN2EwMjQ3NTdkZjE3MmE1ZDY1MworUEs6ICA2N2Q0OGRmZDIzNzQzY2MyY2E0MGU0ZGZkNmI4Y2M1ZDg0YmU4MmRkMmIxMTIwY2M0NzZlNmFmNmYyNWVjYzk4CitNU0c6IGRhYThlZmIzZmQ0MWYxMmZiYzU1YmQ2MDQ2NDE1N2EyNmQ3MTg2MzJkODgyYWVkYjZiZjk4ZTQ3ZGQyMzM3ODc5ZTBiNDY0NTJlMDYyZTZkZmJmZjNlN2JjYTcyODllNGVmNmIzZjQxZDRiMDNiZGMyYzg0MmFmZTk3ZjMwMjk4ODNlZDQ1ZjYwNTRkZGU5NjkwNjQ5YWJiMmI4ZGMyOGY1ZmU4Y2VjZjgwZmMxZWE0MTFiZmM0MGJiZjRmZDIwYjIxOGNmNDdlYThlZTExOGQ0ZDVhZWZhNWMxYmZhMDhhOGZiMWIzMGQ2ZGUwOTc3Y2QxNWU1MDI5MmM1MDFmMmU3MWNlMjc0MGZmODI4Yjg0MzJkYTVhNTk0YmFiNTIyMzc2MGI2NDc5MmVkM2E2OWRkNzVlMjgyOTIzNDk0MzY1NjUxM2RmMWExN2EyYTA2N2E5YThlYWE2NGUxOTU2OWY0NjkzOWQzNGI5OTI3MWFlNTBhNDdkN2RiY2EzNjIwYzgxMjU1YjBlMWZkMWYzY2VjODUxZjFiMTFiMzUKK1NJRzogZDZiMGU4MGU2MGJjMWIyOWFiOGY3NDgwOGZjNDYwODQ3Nzk1Y2NiODg3YmFjMGVjYWE4ZTEzNTI5N2E4NTA5NzcxMmIyNGIwYTFmYmFmN2E2N2M1ZDUzMGE0N2QwNjQzZmM4NzAyYzA1OWQyMTVmYjExMmRiZTQ3NWU1YmNhMGQKKworVFNUOiAyMDgKK1NLOiAgNWRiZjg4NWFhNTk4ZTg5NTU3MWY1ZjY1MDkwYjcyMzIzZTlkNzBiMGY1ODExMDY4N2FmYmJjMzgzYWZlZGNhYworUEs6ICBmYTE3ZWJhNzZlM2JjM2VhNmRhYjNhNWIxMjBkYzVlY2I5YWU2ZjAwMTM4ZjdkMzZkZGE5MjY4YmM0NzIyMTc0CitNU0c6IDFlMGI2Y2YxNWNlMDMzMzcxNzljMDJkNjU0MDhkZjViZTkyMDBjMzc4MmI2MDA0YWY5NGVhNGRlY2IyNTc5OTlkNmZkZmYzMDFkMTFkMDBjOThjMzcyZmFjMGQwMjZjYjU2ZGZlZmUzZGVmN2ViOTlhYzY4ZDY5NjhlMTcxMjRkODQ0NmY1M2U4ZDJkM2RkODkwZDM3YTIzYzdlMGI4M2E0ODRiM2M5M2JkZGY2YzExOGUwMjgxOTU5ZDI3YmQ4N2QzN2U4NDNkNTc4NWY0YTQwNzcxMzk4NDk0ZTZjNDMyMmZiYjY3NWMxZDQ3OTMyMTAzMjE0OGY3ZmU1MjU2NGRkZjdhZTdhYzI2OWQwY2QyZTU1MmZlYzU4OWFlYWUwZmI5M2ZlM2VlYWVmMDg1NjA5NmNmNGY2YjM0OTdlNzIzNWNjODQ5NGQ4MTBhMGI0NmM1ZWFjODdmMTg3ZTUwNWJiNzc2NGY4MDQ1Yzk1NDE5ODNmN2IwMjU2OTgwMDlhMjNkOWRmMGJkMWE0NzNjYmVlNGNmNWU5NDg4ZWNiYworU0lHOiBlMTQyOWRhYjJlNDJjZDAzNWI3ZmM2MDJlZmQ2YmFmOTQ3MDZmMTZlYWYyZjhiNWZlZDMyOTIzOWU4NzU2MDVmYjE3MmY1ZGQ5YWUyYmMyZWI0MmViNDc0NTY3ZTI5MmY1MjA2ZTgyZTY5NGJjYTBkNmQ0MzNiODY3NjM0Y2IwZAorCitUU1Q6IDIwOQorU0s6ICA4NGIzYWVkZDQ3OTdhNTY1YzM1MWRlN2RmYTA3MDBiOWZmN2M0ZDcyOTFjODgwOGQ4YThhZTUwNWNkZDIyNTkwCitQSzogIGQ3YWQ3MmNhYTdjMjIyMDllYzQ2NzhkMTFkNTU5MGE2Y2IyOGEwNzExN2ZlNWFlZjU3YjUwNzUxNTgzMjAxYTUKK01TRzogNTMyNTY3ZmZhNTNiNWMwZmNkMjljMzk0OTlkMmU3OGVjZDIwZTYzMTIzNDk5MjQwZTc3NTA4OGIzOTRkYzY1YzhiYWFhMGZlOGY2YWE3ZTcwMTgxZjllMTBhZGQ4YjRhOGJlYjBiMmVjMzhhNDMzMDlmMTAwY2Q0YmU5MWM2ZjQ4ZTc5ZGMwYWVlOTNhMTVjOTQwMzc3M2IzNTRhOGQ0MmVkNDhkOGYyNzYyMzBmYTZkZTVhZGE1MDFlZTBhNjUzYjQ0NThmMGVjZjZkNWIzYzMzZTIxNDFjNjYyZjZlYTA1NWY3NDFlNTQ1ODY5MTdkMmUwYzRlYjJiNTY2MjFmOTY2NWZlZjMyNDZmMGJkODAwYjUzM2UzYmM2MTVjNDAyMWY4ZDBlMmFkMjMzYTExZTc3MzZjNDkzYWNjMzFmYWVlNzZhMDk3ZGM0MGRiOWVmYzIyNDQ2ZWFjZjFjYzE4ZjUxZmQxMDIzNmEyZjk0MmQwYTUzYzNjZTIwOTEwOGI1OTM4YzBhOWU1MzZiODllZjBhZDZiNDA1YTEwZjIyYzMKK1NJRzogOTIyMGYwZWRhYWFlZTFiODc2MzUwZGJlOTI2NjA2MTc2N2I4NjI5NmMzNTFkNGNhYzk5ZDA3Y2Q2MTJjNmVmYjI0ZjhmOWIwYjk3NWY5NWM0MmM1YjZhZmVkYzg5MmY4N2VmZWRkMzlkNTE2MDI5NGMyNzY1OGJkY2Y0Mjg1MGIKKworVFNUOiAyMTAKK1NLOiAgNjk1MGJmY2Y0ODBiOThlYTE4YTJkNWFlNWJhNmU3NjY4ZjRjMjgzZmYyNzExMzU3NzQwZmZlMzJjZjI1ODE5YQorUEs6ICA4ZTRjNmYyMzNmN2I4NjMyMWM5ZDY3OTliYWMyOGFhZmNkMjUwM2Q3YWEwYTdiZGVkODcyMjcyN2ZiYmNhZWI4CitNU0c6IGE0MDFiOTIyYWJhNTdlZTBjNmFjMWM4ZjFiNDgyOTZhODU2MmVlZjEzNzUyNjg5Mzg4NmEwODMwNmUyMjAzNjY3Nzg4NjE4YjkzOTg2NDQ2N2EzMWYxNmVkY2UxNTJhNDJjMjU1NDZiNjQwZWE4YmVkMTg5YTRmODk4ODZhMzdmMTA2OTExZWFlMWY1MDA4MWJmNzk1ZTcwYzY1MDQ0MzdkMmE4MGNiODM5NDc5ZWNiYjg3YzEyOWJjYzVmZTMxZDcxNmVmOTc4YzIwNmQ3ZjA4YTc5MzQ2NjU5NGY0ZDc1ZTIxNWJiNjM3NDU5NmY4ZTdkMDBlZWE3MjQ3ODA5NDNlODliZDM4NjNjOTUxYmJkMjRlZmVlMjNjOTdjMmM3OTdjN2ZhZmJmOGYyYzhiNDNmMzdhNWY4ODExMjlhMDk1NzNmYTdhMDM0YTI4NWU4MGRjNGJhNGJjOTU2NGE0ZGNlZGViMzMxNjdlMGIzMGM1YTAwYjlhMTA5YTIyMzFjZmEwMDEyYjI5YjJiMzQ1MGI4OTJlY2NlZjA4MDhlNTAzZjgKK1NJRzogOTRkZTVkZjdhMjVlY2Q3MDIwNWQ0MGJjOTQ5OWZjN2NkNzEzNjU2ODA2MGE0MTlhOTNiZTZlMzE4NjY0YmI2ZGZjZTYwZTJkNGU2MzNmN2VjMTQ4ZmU0ZjgzNGVkMjc3YzFmZWM0YzRlMmE4NmY0NGM0NTg5YzgxNzg4OGRiMDAKKworVFNUOiAyMTEKK1NLOiAgNjFiMjYwZjViODQ4YjI3MWVmNDhlNWE1NmQyOTc0MzJkODlmMmFiODViZDUzOGZhNjY4ODcwZDA1NjAyMjBlNQorUEs6ICA2MDg2ZmU4NzM1ZjM5OWYxYWYyZTM5NWUwZmRmYjU2MjllYmNiMDRiNmVkNGE1NGE5ZTQ3MDUyYzZlODE5MWQ0CitNU0c6IDI4MjYyOTVkNzk5NDVmNjc1NDc2YmM0ZDQ1ZWY4MDBkODBiMWYwMzk4ZTRiZTYwZTNkZTQ1NzFlZDEwOGRmOTg5ZjAzMmRlNmMyMzQ1ZDk5NDhkNjc3OTI3ZWEwYjhjZjFhNWNhMzZmZDVmMjNjMjVkYzBkMmFiNWJkNTY1YTU0YWY0NmZkOTdkMzM4ZDc3MGUzYTdiNDdlZmI1NGMwN2ExNjY0NzA3NzcxZWI0ZTM3ZDlkNzBiYTc3OTI1MWRjZGNkM2JmNmQxMjQ4YWRlYzUzZjc4NzI1OWM0ZDU5NGQ1ZmQ0Y2VkOGUzZGI3NjIxZDQ5NjVkNDgyOTgxNzgxMjQ5MzFhM2QwY2QyNjliMmQ1M2I3Y2QyNjFiOTZkMzcwYzVkOTY5M2M4YWQxMzNlZDU4OTQ1ZWUzNTQwZTEwNjI1ZDkyNGFlYmE5YmRhZmM2NTYxMDBhYWIyNzZmYTk5NmIxZGI0NzdiZjg1ZWE1NTkwODFkNWI0YzczMDdkYzE1OTU2NTRhY2E4MmY3YjZkMmRkYWY3MzU3YzE1YTRkN2Q4YjkwOAorU0lHOiA5ODI4ZmVjOGZmNWNmODVhOThmNDUwNzcwYjViZGI0YjgwZGFjYTQ0Mzc5ZDhmNTNjOTFjMzQ4ZTIyZGY2NGFjNDhmMmI2ZTJhN2IzYjY0MmJjODE5M2ExOTQzMTYyMjllNjk0NDdlZDI0MWNkNDIzZDgzYjZmZTdiMmQ0NGIwMAorCitUU1Q6IDIxMgorU0s6ICA5MzZkYzFjZWY2YTMxMDc0N2YzNTAwODgwNTVhMzlhYTc2MmQ5YTRiNTJjOGM4ZTRjNjgyNzk0MzgwYzI3MjVjCitQSzogIDAzYjMxODAwNDEyZGY0ZDU2ZjE1MzJjMDU4MjhjMGI3MjUyOGE2N2E3ODFiZWY0YzA2YzFmYjZmZjJjZTMyNGIKK01TRzogZWI1OGZlODZjNGVmMzQ5YzI5YWU2ZmIwNGYxMDg1MGUzOGM2ODIzZGJlNjRhMDlhNWJmMWUwY2U2MDBkMzk0ZWZhNmZiOTZlZDZhOGYyYzlkNGJlYzA1ZTZhNWViZDVhMWJmNGQwYzUxZGI5MzRlNTdiNzllNWM2YTg3OWQ5NzUxOTdkYmIxMDQ3NWY2NWM3ZjhhOGM2YTc3YTQyMDM4NGI1MDYyYTI3NDBmMTQwMTc0MGVlMGY1ZTA0M2FhZDdhMmEyYjQyNjBjNWQ5MDdmNzA1ZWRhZjY1YjBlMzc1ZGZjN2IwMGJkNjYwZGI2MTQ3ZjJlYmU4NzBhMGVlMThkYzJiYTNjOTJiMGI3NmZhZTJiOTA5MzJjZGI2YzE0OWU0NmYzZmVlY2Y0YzI2ZjA0NDFmM2E5ZTAwNjY3OGFlY2ZmOGNjYWVjYWVkYTczYTE4YTY4YWM5ODhiNjJlODNhOWJiNTE4OGFlZGUzOGRmNzdhOWExNjRhYmJkZDlkNThlNTJhNmNhZjcyMjIzODlmMTk4ZTg1ZmJmOTY2MjM2ZGNkYmQ0YzEKK1NJRzogM2Y5OTRiOGVmNTI4ZjY0MjFjNmE2YTIyZTk3N2FkZTVjZWU4ODcyNjNkZTM4YjcxOWFjZDEyZDQ2OWJmZDhjM2Y2OGU3YWMwN2QyZmFlODBhMjA5Mjc3OGRmMGI0NjM1MzdhZDNhMDU1MTk5N2EzZDViNTFmODMyZDljODIzMGIKKworVFNUOiAyMTMKK1NLOiAgZjg5ZWVkMDlkZWM1NTEzNjFmYTQ2ZjM3NTk3M2Q0ZmJmYTVjNWMxMmYxYjVlNWFiZjQ1Y2ZhMDVmZjMxYTM0MAorUEs6ICAzZTBlZmRjYTM5MTlmYTEwZDRhODQ5Y2VmMWRlNDI4ODUxYmQwOGVmZDI0ODU5NGZkODljZGViOWRlZWU0M2IwCitNU0c6IDRjZjk3NzNkYTA1ZmQzMjJmYzE0N2JlOTAwZWY1Y2YyNTZjODhhZmRhZDRiMDhjMjMwZGZjODk4MWZiNjlmNDc2ZjdkNDVlZjdjOTAwNmJjMTAwMzJiYTUzNDM2YWMyMjg0M2UwZDc2Mjg5Y2Y2OGY5ODE4ZmE2NDAzMWQ0YjQwOTU1MDU5YWE2OTExMDkxNTg4OWY1ZTIyNzMyYTEzNDM5MTI1ODFhYjNiMTFhM2JhZTdhNDcxMzU5NTA4NTk2NTc1Zjg4ODE2MGJlZWY5NjZlNTcwOGYwZTMxNDdlYWNmY2VjMWNhYTNlZjI0MGM1ZTBhMTRjMTg2NTQ2YzhlZWI2NDY1ODM1MGIxYWZmYzBjZmQyYWMyMTNhZjY3MGFmY2E3YmJjOWRkZGQyOGE0NjViNTg2ZTY5YzM4OGNkNzM0NzhkNjhlZmIzMjJiZGY4NmQ5MjEzMDExZTcxMWIyYjk1ZmVmYTdiYjliNTkzOTc2MTcwNmFhNzEyMTAyNDkwNjQyMGJkZGYxZDg4MDBhNDMzOGQ5MzhmYTEzN2NmMjdlOWZmYzUxYzYKK1NJRzogODk3ZTZmMjc5N2MzZjMyNmQyY2RiMWQyNjczZDM2MDYzMWYwNjMzMDQ1ODBmZjViNGViNDNkMzlhZDY4NTE4MzRjOWNmODkxZDlmMDkwNWJmOGRlMDc1Zjc2MzVkZmNhNjAxYWRjMGYxNGU3YjJjNzZmNzU3MWJmYTQ2OGVkMGMKKworVFNUOiAyMTQKK1NLOiAgNDAwNzk2ZWY2MGM1Y2Y0MDg0ZGVlMTgwMWM0YTE5NzVlNDgyZTcwYWVmOTYxY2Q0MmUyZmQ1YTNmYTFhMGZiZQorUEs6ICBmNDdkYTM4MTI4ZjJkMDEyY2M1Nzk3NTcxZDQ3OWM4M2U3ZDhhMzQwOTgwMmY5YTdkOTc2YzI3MDY3Y2JiZTQzCitNU0c6IGM0NzMzMjVlNzg1YjI3ZGY0NDcxZWVmYjllYmViZDY0NjFkNTcwODAwMTgxMTAwZmYzNmNhZjNjMzhmNjdjMTkyMWIxNTdlYzhlNjEyNmY5NTVhZWJkOTBlYTNmZTUzODVmODA0MmNkNzA0YjI3Y2MxZDY5NzhjMGUyYTI5NjY5NWY1ZWY5N2I3YzJlMTZhZTRmZjRkMDYzYzY4OGQ3ZjQ2ZTk2NGUxZjBhMDA1MDNmMzU3MzQ1OTc3NjgzZDZlNGMzNDIzZDU2YmRiNmNlODY0YjY5ODdlMDg1ZTgzZTcwYzdjMWExNGUwZTQxM2Y1OTJhNzJhNzFlMDE3ZDUwNWI2NGMyNGYxYTFhNmI4MTNlMDY0ZTZlMGNmOGJkNDU3MWQwZmYyZjI2N2E2YTEzZTBjZDQzMDQ2M2I2Y2EzYjg4ZjBjZDQwYjBmYjgzZDViZWRmNmY3ZDQ3ZTE3MGU4N2QwYTc1MDA5MzY5M2VkYTIzMmE2ZGFmOTgxMjU3MjdiOTU4OGVjYjg5NGFlMzczYmFlM2E0NDVhMTA2MzA2NDY5YTRjMmNkNzdmZgorU0lHOiA4NGQzYWEzZjM2MTg0NDM5Njc1NGQ4MGQ5ZmEwNWI4YjJmYTRhYmYzYTBmMzZiNjM5YmVlOWNmYjVjODUzMGEzYTljYzM0Njc3ZjkyYTkxM2M0MWU4MDBmMmU4MDQxZjc2NjZkMDdlZDg1ZjE2YTU3ZDgxN2IxMjQxZmM1ZWUwNAorCitUU1Q6IDIxNQorU0s6ICA2NzAzYTYyMzJjNWUyZTY1ZTBhYjNiOTJlMmFhZjlmNWZiZDMzZmI0Njk4ODA0N2Q2ZjRkMGZmNTM4N2ZhMDI5CitQSzogIDA0N2NmZmNhOGI3YjExYWM2ZWFjYzBlYWEwYzViNzNjNzViOWM2Mzc5NTY5NzNhZjlkOTdiMmRkNWI2MDVkNmYKK01TRzogYTI2YjMwYTc2OTE5NzkzMmEzYTYyODU0OTY4ZDc2MDE1MTYxMjM2Njc3OGRjOTk0NTc2YTJlMGUwMzU1NDk2YjQ2MjAwZTUwNjk0OGEwZDEwMmI2NjUxYjJlNzMzNGNhNmM2ZWFlZjhiY2E0NGI0MjU5NzBhMGIzN2Q2YmRlMGRhOWQzYzFiOWY1MWNiYjI1YmMzMzVjZDZmYTkyOGE3NGYyYzBkYzJjNmU5OWQzN2ExMjg2M2E0NzRkNGRmNDNhYWQzNTQxNWZmY2FhMjRkOGMyOWY5MTQ1NzJhYjJhYmVjMzg5MmRiNDllNjc5YzVlYTIyMGMyZjUxOWE3ZDAzM2FjMWEyYzVhNDY3ODY5ZTMwZWRhM2QyNjM1Y2E4NjM0MzE0NzNmOTU4ZDU1MmJkYzU1ODIzNTJjMjkwZDBjZTRmYTljZmQwYWQ0Mjc5OWMyMjdlYzkwYjdjOWU1ZGI5ZjVhN2I2ZDU2OTIxMmVlZDk0ZDMyMzMyNjgwNWYyYjNhMDAxMGQ2YzExZWI0MTA3YzgyODMwMzc2NTJmNTBkYzA2N2I2ZGM4MWY0ZGIKK1NJRzogY2FlOTY4NzllNWI2MDNiZTg2NjYwOWQ0YTA1M2JmYTEyYTUxMzc4ZTk5YjJhMjgxMmU0Nzg5MjY3ZDhmMzJmNDczMjQzZjhhZjc0YjliZTczZjQ3ZGVhNTBmMGQxNjVlYmY0OTQ1OGI3M2U1M2Q4ODU4MGMxOTFhMTgyZDE5MDQKKworVFNUOiAyMTYKK1NLOiAgZTBlNzJmOGYxNzg2MzM2MjY3MzNiY2JkYTJhZDJhNTBlNjUzODkwZjE1MzU5YjZjMjJmYzczNDVhZDMzMzEwOQorUEs6ICBkMTNjZWU1NDBkODRiNTY2N2Q1MTZmZTdlYzcyMzliZjhkYTkxNTQ2ZWU3OTFmODRlZGQ4ZmZjZjNhMDgzZTc2CitNU0c6IDc5MWZkNjEzYzEwOTUyOTJjOGE0YTJjODZiNDdhZTAyNjE1NWI4NDY1YjYwN2RiYjQxNjQ3N2VmNzlhMjk3YzlkNzc1OGNlMzRhZjlkY2JmMWM2ODQ3NGYzMDkwOWZiZTc0YjdiYTQyOTYzMmYyNDAzYWFkODMyYjQ4NmI3MmMyMzA1NGFkNDJmNzY1M2E5ZGRiNDU2Y2M3OTFmMzQ4ODg2YTdhZTVkY2VjN2MwYmE4MTVmN2E5M2ExMGZlMzMxZTkwM2I5NzBmN2I1MDI4YmU0OWQxNGJjNTYyMGQ2Mzc5MjY3MmI5OGI5NDg4YzY3YWUxNjY0NjY5M2UxMTIwNDdmMGFjODkyMWZmNTYxYzkyZGQwNTk2ZDMyZGYwYTZlNTA3YWMxYjA3ZGU1MTZjOTg0MjhkNTcwYTM3ZGI5YmNkN2M3ZTYxYzY5NDhhYjNmZTkxMjUwZGQxZDViZDY3MTI3NWRmOWE5NzJmMjJjMmJhMzY4MDQ3NDdhZWMxZWEyNDE2YzFmNDFhYjg3YmVmZGUzMTYyOWIyZDQzMzE3Y2U0MWNkYTAzNjI2Mjg2YzAKK1NJRzogMTQ1NTIxNzFiOTUyNDVhYzBmMGU1YTZlN2EyZjU0MTcyMTA2OGRiNjUwYzZkYWRhMDRjMjhjYWI3YzQ5MTk1ZjY0MzY3MTIxNDRjYjMxOTEzYzU2MmUzMGMzOWQ4YTg1NDlmYjY0ZmZlYTgxYzc0NDUxNDNiNWYyMzI4NmRhMDUKKworVFNUOiAyMTcKK1NLOiAgNTQ0ZGFmZDk5NjBkODI5NzU2YzZkNGIzZWFkZDQ0Mzc1ZmU3ODA1MTg3NmJmOTc4YTM4MWIwZGVjYWFhODA5NgorUEs6ICBhZTRmNjQyNWMxYjY3Y2NiNzdmOWFhY2ZlYTI4ZWFlZjc2OWM4Y2FjZWUwMzUyMDVjZGNkNzg3ZThkMDc2MjlkCitNU0c6IDQ0N2ZlNzM0NGNhZDFmYWUwOWQ2YTdkMDVmMDlkNTAzYzFiM2QzZDVkZmE1ODQ4MTBjMzViYzQxZTQ5NTU2OTM3MDYxNTRlMmQ3NTFiMmYxYjUyNWUxYTE0NTQ3YmE3ZjhiMjMyMDg4YTZmYzkyMjcwMmQ5M2ExMWNkODI5NDljMjdiZWQ2NDVkYzM1MWZiNGMxMjQyY2Y0MWQwMTU3NTQxMmU3OTJhZWQyMTQ1MzFkOTRmZDY2ZTAzZGQzMmU5NzJmZDc3ZjY5NDdhMzUzZTFhZTVlMDBmNWE2Y2E3Nzk5MjQ3MmYwOTZiNmU3NDc1ZmU1MzRlOTEzYTc3YmNiMGQ2ODFmZGZiM2E3YTBkY2I1NmQyNzRkZjRhYTEwOWQ0YThhMzc3OTRhOTI3NmY1MDAwNjY5NmZmMTJjYTRkMDI1NDAzOWRmMGZiM2Y3MmE5NjBkYTA1Yzk4NzJmMmUzM2VlODFkMWNmN2E2ZjQ4YmJjZTBhYTE4YzdjMGYwNmJhNTVlNjc2ODllMGFmNTg3YjUwMGVhYjc5Y2M3Zjk2NDBiY2ExMDRiN2ZiZjMxZjA4ZQorU0lHOiBhMmFlMTE3YzhkZTRjYTZkNmZlNzVlNDY2MDIzYmQ1NTBjMjZmZWRkM2U3NGNhMTNhZGI2MjVmMjcyZTE3NWYxNGQ1ZGY1NTBhY2U3ZDgyMjg4ZWZlZmFiZjk2MzExYTEyM2JlZTIzODg5YWQzNzExYmZmMmI4MDg3OTQ2YmYwZQorCitUU1Q6IDIxOAorU0s6ICBiZmJjZDg2NzAyN2ExOTk5NzhkNTNlMzU5ZDcwMzE4ZmM3OGM3Y2M3YmI1Yzc5OTZiYTc5N2M4NTU0ZjNmMGYwCitQSzogIDdjNWFlM2JhYjkyMDExOTlkZmJlNzRiN2QxZWMxNTcxMjViZGJhYTQ1MjBmNTAxZGEzZjI0ODU3OWRjNmMyMmQKK01TRzogMTE3ZmFlMTNlNzg3NzdiNjIxOWYwMjAyMTRjMWI4N2M1NzA0NmQxYzA5Y2U4MmVlMmI1NjI5ODk4ZDliMGRlNzRhMTVjZmU5OWY4MDU0OGJhOTEzZDcwMzZjNTYyODVhNGNiYTQ5M2I1MmQyY2I3MGQ2MzY1YWNlM2RhMTJiMWYzNGEyNzc4YWYzNmVmNTJhYjgyZWRlMDRjYWNhZjI3OTNmNWY4OTgzMWUzYjIwNWE5ZWU0YzFkNmZiZGFiNGJhNGQ5ZmFlNjVkZDc5YTVmZTc2YjRiMzlhMzA5MmNjNzE0OGQyMTFlODVlZTgyYWI0NjNkMzRkY2VlOTA2MWQ5YzIxZGVkMjA1MWJiZDUwYjQxM2YwZTIxYTBlNDhkMWZmYThkY2FlMjQwYjM0OTViZTI1ZDkzMTUxYjU3YWEyNzFhYjk5YWE3MDhjYTI4MDgwY2FiNDgwNGZjZWZhOTI5ZjVmMWVmM2Y0YzZjMGZiZmI0MGJlZjdlYTFiNTA5YjM2YmExMjYwMzIzNTEyMzc5ZDdiYzNmZGJiNWQzZmFhYzliMDBlMjFmMTJlYTFjYTJlMjkKK1NJRzogZTQ4NjE1YjY1NjMzZTYxOTkzYjBhYWExZmFmYjc0Yjk2MjljMzg0ZmQ1OTJiZDczNWZhMWY2MmM1Y2FkMTEyOTFmY2Q4YzJlOTFhNTBiZmUwYjAzYjQzNTAyZmZmM2E1YzM4MmI5YzI4MjE5MDdlZmMzNGRhNWJhMDU0YWYwMGUKKworVFNUOiAyMTkKK1NLOiAgZGYyZGY4YTlkNjZkNTYzOGNkZWUwOTMyNGU3YjEwZjhlZDI5YWI5MTM4N2UzMTQ3YjdkYzAzZjdjZDgwMDUwOAorUEs6ICA1YzA0MmUxNTdmYjdmYjEyZDRkNGZlZjI4NDcxNDFlY2ZiNTdjMTI1M2UxNGVhZjMwMDRkNjUxM2Y1MmZlNjI1CitNU0c6IDIxNTc2NjE1YzkzNDZhNjNkY2NmMGM1MGVjYmQ3YzZkNzJhZDQ1MmNmZWQ0M2VhNzMyMDJjYzdhOTg1NzYwNTZiOTY2NGI1NDYyMjkwNWExZTcyMjE3MjA3MzBhYzY4NWQzYmQzOTc3ZWMzOTU5ZDQ0NmJmYTk0MWU3MjViNmZlMTZhZmU1NDMyYzRiNGJkZWU3YWEwZmQ4MDMwOTQ4ZWQ2ZmNiYTdjMGJkYjQwYzJlNTE3ZGE5NzQ1NmU3NGUxZjkzZDVlZDY3NmRlMGY0YThiMGFlYTQ0OTQwNGJkMTViNmRhNzlkYzFiODEzOTY1ZmU1NTcyNDEwZDc2ZjViNWVhYzY2MzA1MDU3MDMxMWRjOTg0MmI2ZmJmODgwNmFlYzAzMTUxNzE1Y2FjZjdmMjE4MDJlOGJmNWU5OGE4OWMwZDdkMGQwOThiNzNjNmVmYzA5OTYyZTM2YjRlMDMwYzFhNjRiNWQzNDlmNWYyMDQyYzc0NDI4NjcxZTRhMmM3ZmVhMGNhZWUyNDIyZDg1YzRmY2RkZmVkMzIyMTM4NTlhNjk5NTVkNGUzZWJiN2UxYjIwMjIKK1NJRzogOWExMDc0NTMxZWQ0M2QwN2JmZmM3ZjJiNmMxM2I4ODM4ZmM3NWNiYTAyYzdkMWVjN2JhMzhiY2EzY2VmMjBkYzliYWRmM2EzMDY0YTJjOTNiMTg0MjQ0MTQyMGI2YThkNDIxYTk2MGQ3MGRmYjdjNzBlZWMyOTVmMjFmODNmMGEKKworVFNUOiAyMjAKK1NLOiAgZThlZTA2NWY5OTA3ZjFlZmEyZGFlY2IyM2EwNDI1ZjM1MzA5NGRhMDJiYzJjOTMxZjBhNTg3ZWZjMGQxM2RlMQorUEs6ICBjNzI2NTFiN2ZiN2FjMDMzN2ExNzI5Nzc0OTZmZDdmMmE3MmFlYTg4OTM4NTgzNWU1NjNjNmI2MDUzYTMyZGMxCitNU0c6IGEyZjBjMTM3MzQ3M2EzMDVkOGYxZDk5MTM4YjA2YjlhOTY5NGZmYWE4YTg4MjIyZGU5ZjcyOWJlZTEzMDUxNzVkZmIxNzAwMWNjNzdmNjdiNmQ0MGM5MGMxYTI4ZmIyMjZjMTEyODZkYjRhMTNlNDVlNjkyMTEyNDJiY2RkMDFjYjZlMmM0NTRlNzZjMGNhYjg4MWI0ZDJkOWQzYWIxMDBhNWQ2MWQxNzI1ZDg2NmU0ZmRiNjZkOTNkNzdmNWIzMDg2OTNiOWI1YTMzM2U1N2ZhMjVkMWU1ZDJlMzhkZjZlNGU5ZWM4NDE1OWJiZWUxZmZlYTkyNjgzNmEwMTAxYzkxNDgzYmQ1YmM4OGE2ZjFjYzRkNGU3ZjAwOGFkMDg0NTNhMDEyMzQyOWRkMzM1NzgxYzdjYmY4ZDY4NWE4OTk5ZWQxMTc3NjA3MDA0YTEzYzRjYjVlYTQ5MDhjNTQyNjA3ZDNmMmNkNjY5MGNmMWYyYTc0NTViYmQzOGY1MzhmMDdhMTAzOTY0MzE3ZWZiY2VlMzdlYjQ2OTMxYzAyN2NmMTUzZWY4NmU0M2Q3ODI4MWViZDcxMAorU0lHOiBhNTEwZGZmNDJkNDU1OWExOWE3YmYwZmUwYmVhNTNkM2UxZjIyZGZhNmJlNTUwMzk4OTVlMTJhNWQwN2RhNWYyZTM3NzEzY2NiMmViMjE2MDExNjI4ZjY5ODNmODcxZmVlMjg2ZTY2ZmZmNGJlNzU4MmM5NjFhMWVkNzU2ODQwNAorCitUU1Q6IDIyMQorU0s6ICBjNzJlNjdkOGMzZmVjMDA0ZmY2MTg3MThhOTA5OWViOGFkN2IwNmZmM2I4YzU0MmE3ZThiOTg0NzMxMzQ3NWUxCitQSzogIDRlYjAwMmQzY2NlYjE4OGM2NjU4ZmVjNTFjYjQ3OWE2NTI2NGFjNTU1Yzc1Y2RjMjI0OWNmMWNlM2RlZmMxNmQKK01TRzogYThmMzQxMzVjMDEzMmVjOTViNjRiMGNiZjUxZDY2OTAwMTQzMzcwNDA2NzkxZmJiNTVmMmI4Y2E5NTNjYzc0YTQ2ZTA4YjAwMmZhMmRhMjFiOTUxYjg4NzFmN2EyOWJjNmQzODc5MGFmYzY2YTMyOWMzOTdkOWY5MjUwYmFlMGUzMGFlMzQyNmUwOGQ4ZWFkMDE3OWEzYjMxM2M5MDg4MzkxOTJmMjg5YTNmM2I2ZTk2MGI0YzVjZWJlZjBhMDlkYWE5YzdhMTVjMTlkNGViYzZmYzJhYzNjZDAyMjMyZTgzMmIyMzRlZGQ3OTY1ZDY4N2JmZWI3NThmNzBmYTc5NjM4NDFiNzg1OWJiOTdjOTcxYmQ1NTdiYzg3Njk1MjRhYzRjNmVlYjM1Nzk3OTMzMzRiNTIyZDE3NmJjNjJmODZiNGQ1YzBkNDAxNzAzNmQyYjZiZDRlNDM4NDQxNmVmODI2MzEzOTY5MWE4NjA2MTcwZDczYzkzZDY0MTdkY2MxYTA4YTUzN2M5ZWQ0NDAwNDcxYTQ2ZjUyOTA3YjQ2YjEwYThiNjg4OWRiYjQ2NDdhOGJiYzcxNDkKK1NJRzogMmQ3YmFiOGViZGE3ZmNhNWJiM2MyNWY1MWRjNTFiNzNlNmZmNmEzYmIxYjUyYWNjNzgxMWE3ZDI1OTVjZDZmZGFmNzMwNDk0NDE4ZTJmNTdlZmRjNTYxN2IwNjZmZDdiNjIwNzY4MGQ5NGZiOGM0M2QzZDQ3NDBiNDFjYjY5MDEKKworVFNUOiAyMjIKK1NLOiAgNjk2NDUwYjU1N2VjM2M5NGNmMWFmMTMyNjQ3NTYzNGFhODFkZWYzODE0ZmYzMGEwMmJhN2YyMDQ0YjU5YzBmZQorUEs6ICA4NTg0NzczYzU2NmIwZWVkM2Y0MzI4MTcwNWI1NzVhNDM0ZTQ3ZDZjZjZiMjUxYjg5ODAzZmVmNTM1MzRjYjI5CitNU0c6IGNjMjU3ODI5ZjMwYTVmOTBkZmRiYzI0N2Q0MmUzODg3MzhiNzZjNDFlZjhhODJhNWUwMjI1ZGRmMWUzODZkNzcwODBiM2I5ZGY4NmM1NGI4NWNkZjJjMzJmMzY3YWJhMGMzYjZiZjg4OGE1YTY5MDM1MjliNmFlYjRkNTQwN2ExMDE4MDE0OTExNDEzMDIyOGZjNDM1NmNjZjM2NmI3N2JlODk3OTZhOWU3MWEwYzY5M2YzMWU1ODRhNGYxNDMwOTdiYTM3MDM2M2I2N2IyZjJlMmZkOGQ2ZmU4YjRlOGRiZjBkN2RjYzFhODM2MDA0MTE1OGFhMmFmZjdlMmEzMjViOGU1MThmMTkzYTI4YmFlMDVlM2Q1MmIyNjYyMWFmNDAyMDI2ZDdmMjUwZTg2ZGNlZTMwMWE1OGI2MzFlYWRmNDUyN2U5NThmMDJhNjE1ODdmMGJiNTE2Y2VmYWMwMDlmZTUxMDUyZmZmNTMzMzZkYmQ5NGU3MjY2ZDNiNDNjYWJhOGExYjM4ZTVkODcxYzJhMjRhNGM0MTJmZmYzZjdhOWE1MmE4YWIyM2JhYzk3OTFiMmI1YTY2OWEKK1NJRzogY2U4YjBhNTc3OWY0ZjVmNDAxZTg0ZDY1OTI3YTBjMjhkZjgyOWU5NWQwOWJmYTk3MTExYjg3MDAwNzhmZjg5NGNmNzI3N2UzNGE3MTYxNDRkNTUzMDZmYzllMmY2NGNkMjg3NTgzY2M4MDAzYmUwZThmYWYyNmFmNzY0MDE0MGUKKworVFNUOiAyMjMKK1NLOiAgYThkZDM1ZjA1NGZiNmZmNmYwYWIwOTRhMGQzZDFjMjYyODMyMTgxZGYzNWNjZDUxOTI1NDVlYmQ2YTljZjUyOQorUEs6ICBjYTQxMjMzOGQzODE0Yjg4NmQ5NjRiNzE5MjVlMWFhYmIzZmZkMDc4MzRkYmU3ZGM1MTI1Njg4ODJiNTNlNGEzCitNU0c6IDU1YTdhZDkxMzJkNjNhYzE2MWU3YWRiMTMyYjkxODlmZGQ4NGMzNjFjMWU0ZjU0MTlhNmRmNzNkZjRkN2FlYjI5YThkYzRiZjAxNDkwZDRmNDg0ZTJkMTIwNzc1MTdmNWZjN2FkMGJkZWRhMjBhNmNiMDIyNzk0MjI5MGIwOGMzZmUzM2FiOWIyMTM1YmMzOGE2NTc5YTU0YmQ5ODJmN2QxNDE3Y2U4NjcxMTdhZWE5MThkYmQzZGQ0NzZlN2ViNWI1ZDNjM2U0OGE4NjRhMmY5NDJhMzE1MDFhYTJiMjliNTNiODA1MTNjOTVkNmE0MTE4NDRmMGRlZGYxNmEyOWFjMjY3ZDMzMWU1M2JkYzI1MzliZmNmMzJkYzliNWQ2NDBmMTIzMWUyY2FmYjBhZTk0YmI1MTg5NDI2ODYzMzY0MjYyZWZiNDdiNWI1Y2NkYmJjOTMzMjQyMTZhNzk5YjZmNTBkMzcwNGYxNWVkNTlhZjZjYzdkOTEwY2YwNjJkMWJlNjMyZGNhNWRmMjEzZDQ4N2Q4NTY0ZjJiMmJkN2Q4MThiYmEyN2MzNjQwMTNkOTJkN2Y3MjYyNTQ2MgorU0lHOiBmYTcwOWZiYzgzODJhZjgzZDExODEyNjE4ZGZhY2E0NTJlYWI4M2U0YzUzZmU5ZTU4NTg0NjdkMDdiNjc2N2UxNzk3NWMxZTA2MzkzZDZkZGUxNWEzNGQ5NDczZDFjZjRkNmQ4YzJkNTczOTQ1MjAwODBmYWM0ZTQzNDQ4YmUwNworCitUU1Q6IDIyNAorU0s6ICBhZTFkMmM2YjE3MWJlMjRjMmU0MTNkMzY0ZGNkYTk3ZmE0NzZhYWY5MTIzZDMzNjZiMGJlMDNhMTQyZmU2ZTdkCitQSzogIGQ0MzdmNTc1NDJjNjgxZGQ1NDM0ODc0MDhlYzdhNDRiZDQyYTVmZDU0NWNlMmY0YzgyOTdkNjdiYjBiM2FhN2IKK01TRzogOWU2YzJmYzc2ZTMwZjE3Y2Q4YjQ5ODg0NWRhNDRmMjJkNTViZWMxNTBjNjEzMGI0MTFjNjMzOWQxNGIzOTk2OWFiMTAzM2JlNjg3NTY5YTk5MWEwNmY3MGIyYThhNjkzMWE3NzdiMGU0YmU2NzIzY2Q3NWU1YWE3NTMyODEzZWY1MGIzZDM3MjcxNjQwZmEyZmIyODdjMDM1NTI1NzY0MWVhOTM1Yzg1MWMwYjZhYzY4YmU3MmM4OGRmYzU4NTZmYjUzNTQzZmIzNzdiMGRiZjY0ODA4YWZjYzQyNzRhYTQ1Njg1NWFkMjhmNjEyNjdhNDE5YmM3MjE2NmI5Y2E3M2NkM2JiNzliZjdkZDI1OWJhYTc1OTExNDQwOTc0YjY4ZThiYTk1YTc4Y2JiZTFjYjZhZDgwN2EzM2ExY2NlMmY0MDZmZjdiY2JkMDU4YjQ0YTMxMWIzOGFiNGQ0ZTYxNDE2YzRhNzRkODgzZDZhNmE3OTRhYmQ5Y2YxYzAzOTAyOGJmMWIyMGUzZDQ5OTBhYWU4NmYzMmJmMDZjZDgzNDlhN2E4ODRjY2UwMTY1ZTM2YTA2NDBlOTg3YjlkNTEKK1NJRzogOTA5MDA4ZjNmY2ZmZjQzOTg4YWVlMTMxNGIxNWIxODIyY2FhYThkYWIxMjBiZDQ1MmFmNDk0ZTA4MzM1YjQ0YTk0YzMxM2M0YjE0NWVhZGQ1MTY2ZWFhYzAzNGUyOWI3ZTZhYzc5NDFkNTk2MWZjNDlkMjYwZTFjNDgyMGIwMGUKKworVFNUOiAyMjUKK1NLOiAgMDI2NWE3OTQ0YmFjY2ZlYmY0MTdiODdhZTFlNmRmMmZmMmE1NDRmZmI1ODIyNWEwOGUwOTJiZTAzZjAyNjA5NworUEs6ICA2M2QzMjc2MTVlYTAxMzliZTA3NDBiNjE4YWZmMWFjZmE4MThkNGIwYzJjZmVhZjBkYTkzY2RkNTI0NWZiNWE5CitNU0c6IDg3NGVkNzEyYTJjNDFjMjZhMmQ5NTI3YzU1MjMzZmRlMGE0ZmZiODZhZjhlOGExZGQwYTgyMDUwMmM1YTI2OTMyYmY4N2VlMGRlNzJhODg3NGVmMmVlYmY4MzM4NGQ0NDNmN2E1ZjQ2YTEyMzNiNGZiNTE0YTI0Njk5ODE4MjQ4OTRmMzI1YmY4NmFhMGZlMTIxNzE1M2Q0MGYzNTU2YzQzYThlYTkyNjk0NDRlMTQ5ZmI3MGU5NDE1YWUwNzY2YzU2NWQ5M2QxZDYzNjhmOWEyM2EwYWQ3NmY5YTA5ZGJmNzk2MzRhYTk3MTc4Njc3NzM0ZDA0ZWYxYTViM2Y4N2NlMWVlOWZjNWE5YWM0ZTdhNzJjOWQ3ZDMxZWM4OWUyOGE4NDVkMmUxMTAzYzE1ZDY0MTBjZTNjNzIzYjBjYzIyMDlmNjk4YWE5ZmEyODhiYmJlY2ZkOWU1Zjg5Y2RjYjA5ZDNjMjE1ZmViNDdhNThiNzFlYTcwZTJhYmVhZDY3ZjFiMDhlYTZmNTYxZmI5M2VmMDUyMzJlZWRhYmZjMWM3NzAyYWIwMzliYzQ2NWNmNTdlMjA3ZjEwOTNmYzgyMDgKK1NJRzogYjZjNDQ1YjdlZGRjYTU5MzVjNjE3MDhkNDRlYTU5MDZiZDE5Y2M1NDIyNGVhZTNjOGU0NmNlOTlmNWNiYmQzNDFmMjY2MjM5MzhmNWZlMDQwNzBiMWIwMmU3MWZiYjdjNzhhOTBjMGRkYTY2Y2IxNDNmYWIwMmU2YTBiYWUzMDYKKworVFNUOiAyMjYKK1NLOiAgNmJjZTRkZmQ1M2JmYTU1MDZmMmY1NTRkMmQ5OTRhMGRjNDBjYWZjZGVjN2UxYmUwNTAwMDZlNWM1YTRiMzhhMQorUEs6ICBjODkwMDIzNzI4ZDgzOTcwNzAyOTE3NzFlNjVlMDM0ZDM0ZDRhYWU1ZTI0NzY1M2U0ZmY0YzA3NDU5MWRhNzAyCitNU0c6IDMyMzkxOTA3NDdlZTMzZDQwYmY4NzBhYzlhZDQ5ZDg4ZWUzMjBmNjNjMDUyNTdlOGFiMmM2MDMwNjU5N2NlNzZkMWYxZTc5MmFiNmE2NWNhYTU0NGZiZWMyMDg5MmZkNDk2MDU5NGYzMWIzNzYzZWYwN2Q0OTgyZWFlNGEyZGJmMzM3N2RjYzFlM2Y5NWU0NmVkMzliN2YwMjIyZjA0YmI1YzNiNDM0YzhmOWYzMTBkZTlmMTIyYTI5ZjgyNDFlODFlMjA2NTQ5YWU2MjhkMmI4YWQ3Njg5NzJjOTg4NDdjMTE4OGFkMDRjODM1MzU2Mzc4YmVmNzljZDEyNjg2OTQwNWIxMjlmZGJkYzNiYzQ4OWNiZDEzOTk1MDVkYWRlZjc2MTdiNWJlNWRhMTczZDNlODBlNTgzOGM5OWUzNDkyNzYyNDI3MjllMDIxOWJkNzQ3NmFlNWM0ZjgxYTEyODc4ZmI0ODNhNmMwZTliMGRmMjk2MmViMGJmMDAxNTc3ODJjZjc2OGExYjcxYzAxMDE2OWVlODUyMmRlZjAwMjRhZDdlNDU3NzVhMjkwNjM5YzUzYWFmNDgxOThjNDJkZTc1YworU0lHOiA5OWFlNjc4MmZmMjc2NDZjMjdmNjFlMjM2MzZhZTE4ODE1MjFjZmE1ZWQyNTZmNzBiY2U3Y2UwMGI2ODI4MGNlOGUwYzgyYWE3NjVhZmI4YjVhMWZmMmZlNDJjNTc0NDFlNDU4ZTQ0M2RjOGIxMjM0NzdhZTMzZDg4NDg4OGMwYgorCitUU1Q6IDIyNworU0s6ICAxNzg2MWE4ZDQxNTRhY2Q0ZmE5YzhmYzk0N2MxODg2YzExMjkwYmUyMjI4NzJmZjRmOGNkMjU5MzllNGQxMzYxCitQSzogIDQzNzczZjQ0NDkwNjVlYWViYWY4OTM3YmFmNzU4NTYwYjBjNGQyZGU0Njk3NzgzOWIzYjg3M2Q1ZDdkNWZkOGYKK01TRzogMTg0ZGY1ZWEzMjE1ZWJlMTgwMzkwYjBmZjA0MmJhMjM4MTE1NWEwMzhkYzczMmY3NmEwMWM3ZTcwZjgyZDFjY2M5ZGU5YTA1OTZiM2ZlZTQ0NzIwOWM5OTI2ODRmNjQzZGYyMWY0Y2Y5ZDE3OTI2Mjc5MGU4NjIzZTQyNDcyZGMzNTE5OTdlNmRhMTg5YzA3ZTFlODg4MmMwN2Y4NmM2MzM3ZWMwMTEzOTEyY2Y5MjIxNWM4ZGUxOTgyYjhmYzU3YmZhYmM1NWEzZTg3MzZmNzM2MTA0MjlkOTdmZWI1MWQ3OTRmNTA1ZDBjNWEwYjNhYmQ0OGVmN2Y1NWE2MjhmOTBiODU2N2ExYzE1ZWE5ZDE5MGQ3YmY0ZWMyYmM5MzM0YWRhNmNiOTI4MDhkZmMyMDY0ODM2ZmNmYTQ2Yjk2ZmQ3YTVkNmY0YjA1NGRhYjA5YjczNTk1ZmViODllZDAwNWI5ZWM5ZDMxODgxMjFkZTY5Njk2ZDY0ZTdjN2JiZGZjMWM0NjlmYWYxNDhjMzhhNzc4NTk3MGFmZTFhY2QwNmE5MmM5OTQ3OGZlNDQ5NzRlM2JiMjA5NWU0NDY3ZTliMmU5OTYKK1NJRzogYTVlZTAyNGNjZGJkZDRjMjFhMjQ3MDllYzUzZGNjYjdlZTE3NjI2ZGQwMGEwOTNkMDg4NGY1YjQ1YzRjOWQxNjkxODQwMTUxYzMzYzhhYTA3YjY5YjM0ZTE2ZjYxNjQ3ZWJlNzkzYWU0ZGFhNzBjZmY0OGU2YWI0MmZmZGJjMDAKKworVFNUOiAyMjgKK1NLOiAgMGE4NGJhYTU0ZjExY2YxNzA5MGZlYzYxZjNmOTQwMTUwOGEzYTAzODg3YWNhMWE3OTM5Mzk0YjFlZTQwYTkyNQorUEs6ICAzMDlhNzNjNjJkMjNkNzQwZjJlOTNjMTg1ODdhYzE1ZTdlYzQ4MGQyNWFjMDc5NGUxMGY4Y2Q0NjFjYzJiMTMwCitNU0c6IGZlNzAwMTdiMTQ2NzhiMGQzYWQwM2UxODNkNmY1MzMxNDM3ODM3OWFiM2RhNjViMzUxMTI1N2IzZDU0MDg2ZTg2ZjIwMzExMzkwMjEzOTFhZjlkNzIwODVmZjdjM2RjOGMxZTJkOTFlNTMzMzM4NTU0MjNkMGY3ODVlMmNjNWY4Yjc3OTlmY2YxYjcwZTZiZWNiNzg4ZTUzZTkwMjBmMjk5NWRkYjBjMzgzYTFmODEwMzhmYzNkNTQzY2UwYTM4YzljMjg4YTliYzQwNzdmNDI3N2RjYzZjNTY0MjI2M2ZjZmUxOTY4ODAwNWE2MDNmNTc2NzVkMjQzNGYzZWQxZjQ2ZDMyZjE0ZWFlYjA3M2U4M2VlNzA4NmRhMmZiNjc2NTlkM2ZiNjhjNjIzMjBiNzcyN2IzYjhlYTAwNjU3NmJjMmM3ZTZiNWYxZWNlZmE4YjkyZTcwYzkyYzg4OTUxZDBjMTJkOTFkZTgwMWMzOGI3Y2E1YTBhMDRiNGMzNDI5YWJhODYzODZlOTZlMDZhZmQyMGQ0YzVjMmZlMmI5YjQyNzNlYjA1MjAxYTc5MjczYWJkYmViMzdlZDE4MzBkMjI2YjZiZGIKK1NJRzogNGQ4NzBiZDUzYWY4ZjEzZjIxNGQ5OTM0ZWM5MDNhYzQ4Mjg0MDkyY2Q5YjE2MmE0NGNjZWM4NTFmYTk0MmRlNzE1Y2NkYTA3Yjc5OTFkNzEyNzIzZTdhNGQ1YjRmMDM3NGFiODVhYzM4NjdlMGI1M2ViYzQ2YjUzMGY5ZmVkMDUKKworVFNUOiAyMjkKK1NLOiAgMzgzNzk0MjNkYWZkYmYyNWUxOWQ3MjMxYmRkZDgwYjRjZWZjZmUyYWVkOTMyNTg0ZGZhMGNjM2M5ZjkyMzJkZQorUEs6ICA1OTdlODFkY2VlOTQ0OGI3N2RlNjgyOWU3OTIxYzhhMzkwNTM1ZDg5YTA4NDk0MzBhZWQ2NjM2NGVlMTQwZDhiCitNU0c6IDM2MTI1Y2E2NjY2ODgwMjkwNjIzN2U2M2EyZmU1YWU2MTBmMTFhN2NmOTI1MjBkMTllNjY5MGEzYWRmYWZkNWQwN2E3ODRiYzFhMGUxODUyNzNkMTFkMzQwZDVlZmY5MDE1OTdkZWRmNDUwYzQ2OTlkNDNmM2ZiMTY4ZDU1N2Y2YzljMDMwNzdjM2NkYzM3MGQzNDgzMmNjZGYyYThlM2Q3NTc5NjQ5MGVkMDI0Mjg5OWQyNWRkZjQ0YmZjNjZmMzI5Y2Y0YzQ1MTY4NzAzYzMxYmM5MjAyZDg5MGYzOTY5ZmZkM2FjMzVhMTI4MThkY2E3NTFjZWI4ODA4ZmU4MWVmYTI2YTVlMGQyMDBjNWVjMWQ5NGE1MDk3ZWE3NGI2NDk4ZmUyODhmMzBjNDhkNzI3ZTlkM2QzNWM4ZTEyZDg1NDIwNzAyNTU2ZjI4NjE0ODRmZmQwOWI0ZjEyMjY1Y2M5YWJhZmViODJjZjU5MDAyODg5NWE3ZDA1MGZmNTdjY2Y1ZjI4MDIyZDAxNmFiNDA5NGIwNjJlNDhiNjZmZDM2ZDFlMTk2MjZlNTIxNWVmYTQwZmI3ZTNiNzA2MmY4MWU5NTQ4MzBjOQorU0lHOiBkOGI1MGE4OGFlZDZmMmE5NmQwODIyMTNhZGY4YjI1MTlmNmEwYmJkMzBkZDNjYjBmM2ZkM2NlMWM2NDNmYzAyOTk0NmNkNDM0NjJlZDIyNTEzZjFkNjVmY2EyNGJkZTM4MTgxNjZiYWE4NmRhYTc5ODc5MmFmYWZlMGMxYTEwYQorCitUU1Q6IDIzMAorU0s6ICBmOTI1ZDI3NGFhZjFmZTFhMjE2NTYyMzczODVlOTdmNzc4M2U3ODA5MGM1ZDQyMTdmZWNlNzA1N2M4MGY0MjZkCitQSzogIDNiMGZjMzcwYmUzYTRiMTlhODhhYjk5OGM1OTUwNGZmYjU5YTg3NjA2MzM4ZTY3M2RmNWIzZmFiNGQ5YmZiOGQKK01TRzogMTQzY2FhZmE1ZjYyYjEzZTQzZGZmYTQ5ZDQyMGZhOTlmNzcxYjE5MjZkNDBkNmNiMmJiYjQyN2YyN2I2YzI2NmViM2RlYjJkOGJiYmQ0N2I4MjE0YWQ0MDI1MWNiMTkwN2FkNjVlYjk0MTkzZTU0YWQ4NWM2NzAwYjQxODllODBmMWNjMDE1NGM2M2VkMTUxYThiYmJkMzBlMDE2MzdjYTU4ZTcwYWEzZWU1MmVmNzVkMDg3MzA3OGE0MDUwMTRmNzg2ZWIyZDc3YjdmNDQyMmY5Mjc4MjNlNDc1ZTA1YjI0MjQ1ZjkwNjhhNjdmMTRmNGYzY2ZiMWViMzBiZmVkZTdiMzI2MjIzMGNlZDllMzEzNjFkYjE5NjM2YjJjMTJmZGYxYjljMTQ1MTBhY2Q1YmMxOGMwZGRmNzYzNWUwMDM1MDNlNmY3MWUxYzM2NWNkZmI0YzY1ZWU3NWI0ZGUwNjk0YWY4NzA3NjM3NGQ2MzFlNmM0YjhlMjQwZmE1MWRhYjVlMWY4MGNhMmEwNmM0OWY0MmVhMDllMDQ3NWRlZmIxODRkOWNkZTlmNThmOTU5ZTY0MDkyYWFjOGYyMDI3ZTQ2ODEyNmYyZmIKK1NJRzogNzk1NDlhMzE3ZDEwYTBiZTMyMmE5NGExNTFhZDExZTc3ZWZjNDgzNmNjODAwNmE4NTA4MTI3M2Q3NjAyYTYzODk2M2E5Y2FmMTljM2VkZjFlMjVmYWQxZTlkNjg3MDFhNzFkZWE3MjdkYTZhNWM1YmNhYzkzMzk1ODkyMjRiMDUKKworVFNUOiAyMzEKK1NLOiAgOTcxZjgwNmJlNmYwN2Q0MWJlODgzMGZmOGRhZTcwNGIwODYzOGFkNmNmZjcyMmQ4NDMyNTM4MTI3Yjc2OTYyNQorUEs6ICBhZjZhYzk4ZGNlMjA3OGE2YzczZjYwOTdiYWI2M2YyMDVjYWY2OTUzYWZhMjg0ZDA0MmJkNTBhNGZjZTk2Y2I0CitNU0c6IDAxMzQ1NWQwNDlhYTU0ZWQ5OTVmYmQ5NGU2MzY5OTU1NDk1Mzk1ZTQ0Mzg4MjIyNTliMTA2MGU5YTM0Nzc5MDQyYTFhNjkyMTFmNmVhMjA3NzM5OWRkMjM0ODA2YmEwYjM1M2NkNzlhNTdlMWM0OWIyNTBhYjI3MTA2ZGNkZTU3NmVjZmExMTVlYWU0NjFmZWJiMTJkMmRhMjVmZmNmMTdiNzE1ZjhkOTVjMmYwYzQyNWQ1YTgxZjcwMDExNWI3MGQ0OWUxY2ZlNDlmY2FhMTRmYTIwNWUyOGVjODUyNDdmMWE2ZTcxMjhiZjNiYjMwNjBkYzA4NDY0YmRhNjUzODU0MGQwYWM0NzIwOTNlNWEwNzIwZmRlMmYzZGM0Nzg4ZTBlOWIwZGJmZTJhMmI1ZjFhMGYzZjgwZGU5ODQwMjViMTVjNjVhZjc3ZjY3MWUxYzVlMjg0MDQ0NGRlNWM3ZWRhMDI1ZTZkYzFhM2ZmMTZlMjZjYzU0Y2RlZWQ1NmJlNzNmOWIwMWFiMmIxYmMxNmM4ZWY1OGE1Yjc2ZGQ0NzI4NzgwN2U1YzUwZjBkN2MwYTViODEyMGRmZGU2NDVhMDEyYzVjZjExNDkxYmMKK1NJRzogMjAzN2EwYTc2NzRiODRmZjI3ZDBiMjJmNjJiNGJhYzY1ZTJkYzBmNWZkYzg5OWZlYjc4MDBmMjVjMjk5ODFkZWU2NDFjNWE1MGY4Yjk0MTA5NzBiNDlkMmQ1MzY1OGM4OWVlMTY5NjFkY2NmNTM5MWE2OTE4ZjJhODRlYWRhMGIKKworVFNUOiAyMzIKK1NLOiAgMmJiMDY1MmY4ZmZmNjkwMTk5MTE0OGM2OGEzMjY3ODc3MjcxMDA2YWU5NTg5MTQ5YmIyMDY4NTBjZGY1MmZiMAorUEs6ICBjMDNiNzdiZTk4M2U3NGEyMzRjMTk4NjQ5NmIyOTJlMTM5OTkyZWI3NTI5ZTcwYjNhZmFkN2FlNGZkY2Y4YTY2CitNU0c6IGI5MjNjYTY3ZTM5NmQ4NjU2ZmEzZGJjZTgyODlhMzhiZDNjMTI4Y2VmYjMwZWZjMTg2MmJiOTQ0YjQ1MDc4MDU0MTk4MjRjZTJiODNkNjkwZWY0Y2YxMDc0OTI4MTcxNDNiZjY0YzAyNDk4OWFmMWE3ZDJlMWY1YWM5Nzg3NGY4NmJiMGQzNzczZmY4NDBmNTE0ZDlhMTM5NGEzOTU5YjAxMWQzYTZiODE2YTNmYWU1ZGUxN2IyYTlmZjM0OTg2M2QyN2ZiYmI1MGNjYTczNDEwODc1MTAwMGQ2MzU4Y2EwNjQ3YTkzZWI0OWUyZTdhZjA2Mjg3ZDQ4ZjJjMDlkNWMxYzczZTRkOGY3N2VhMmJjYWE3MzU2Nzk1YjI2NzI4NzE5YmVkNWZmZGI4MjE1NzhiZDVkNjZiZjkyZWRhZjhiMjM4YjJiYmQ3ZDFlMmMzMGE3ODdmOTAxYTMzZDBhNzY2NjlhOWMzYzdmMmI1NTJjY2I4MzQ5YzdkZWQ1ZTFhNDYxNzBjZjI4ZTM1OWUyZmRkNTRiMDVhNTYyZjUyOGM2OGE1Njk3NGRmODJkNDY2NjM3YzhlNTMyNDZhNzIxN2U0Mzg2ODAxZTBlMzI2NgorU0lHOiA0ZTE1OGRlYWFlYzNkODg5NDEyOTZhZjJkMjczNDEwMTJiMDI0MWQ0ZTBmNDZlNDM1ZTM3NWM5ODc1ZTg5ZjVlMzJjMDU3YjUyN2JjMzQxMWFmMDk2YTc3YmZjZWI0NWI5ODNlZmU0NTVlM2YwMzE1NWQ2YmM3YjBhY2M4ZTYwYworCitUU1Q6IDIzMworU0s6ICBkYjliODEyY2IzYzdjMDNiOTc3ZjQ4N2QzZDY1Y2NkOWNkMmYzZGVlMTE2MDIwNjdkYmZiNzJiNTg5ZmYzZjc5CitQSzogIGZmYTAzOGFkOGMzYjM3OGNlNzVkNjU4NDRkMDhlM2Q2YTkyZDE5NGExYjc4NjJlOWQ5NzIwZDIwNjc5YjI5NDQKK01TRzogYTcwMDkyYzc2OTdjZDRhMjA5NTY3YzM4YmE3ZmI3MWFhOGYxNWU1ODI3YTIwODc2OTIzOTQzZmQ2YWRjNjU5Yzk4NjdhYzZmNThhNjFkYzdjZWMzZDM2MjQxMTY4MjAwMGMxYTlhZDEyOTVlYjhiNzBmMjQyZDg2YjU4NjVlYjc2Yjg3ZTNmMmM2OTQxZDI2MTJlZTNiY2RlOGYxOTc2NTU2NjczMzE1MmVmNTRlOTU2OTA5NDMyODVmNzhiMzc1ZjQwMzY1ODVkNDczOWRlZWRlZWY2ZDk0NmRiNjFjYTQ1OGVmNGY2NTBkYTk2M2MzODVlMjlkZmRlZTQxNWZlNDk1ODQ1ZjU1MTk3YTg3MGY4Y2RlYjVhMDEwYmE2YmJiMzJiZjFhNTg4Y2M3NzRkNDg5MDE4NGM0YjI5MjRhNWI4MDczMzEzYmNlMjI2NTg1ZjFhZGZjMjI5YzkwYmM2Y2M5ZDIxMmU2MmYwNWQzM2JlZGFjOTYxZDc3Y2Y4YzI2MjBlNDUxZGU4MTdmOGMxYmIxNmEyYzU5ZmY4MDRiNjM1YTczYThjZjhjMTgxYjNmOTQwMWMzYjY0M2QxOGEyZjcwNmVhOWNhZTQ3MDcxYTYKK1NJRzogYTYyOGE3NzQyMWIyYWJhYjU3NmVlZDM1ZDJlZTNkMTQ1NjFiMjFmYTE0YTZlMmZhYzI2M2MzZWFkZDc5ZjJmYzA2NjlmOTQyOWI5MTBiODQyMmI0YjI5YWMwMjZhNDJlOThkMTgxYmUzNTA3YzVlZDdjNzQ4YTFmZGNmMWQ4MDcKKworVFNUOiAyMzQKK1NLOiAgY2UzNzliYmUyZmE4YWJjYmE1MWM3YTc1NDNkZTViNzE4MDc3MWIzYzQ0YmM2YjQxODkyZTdiODg5NzliYWI5MAorUEs6ICA3ZjNjZmY4OWY0MWJhYmY0ZmE2NGNiYTMzYTViYjE3ZjQxM2JiZjJhMWUxMTJiNTBhOGU5YjFmODIxZDg0OWJmCitNU0c6IDAwMWE3NGYwOTVjODE0ZDNiZWVkNjdhOGQxNWZjMThlZmUyMzVkYzNmNjQ1NzgxMmE0MDM5YjdhNDZmZTlhMGU5ZGU4MWE3YTRlNWZiYWI1ZWJlOWUxZTQ4MDFiZDExYjQ1YzlmN2FkMDYzNmEwOWJmZjQyMTY0YmU1NzQ5YTA0YzAyZjBhYjYxZjBlY2ZkZmVmNzk5YjgyN2RhNmEyNzRjOGQzYjM5ZjJlMzgwNWE2NzkxMjg3ZWVkYjIzMTRkM2Y4NDJiNTU4YjliNDg5YWZlMWVkMzdiYmJjZmM1ZTYwYTQzMWQ1YWM2MGIzOWU5NDZkOTAzZDZiZjZiMTQwZTEyYzdlMDdmOWVkN2FjNDZhMzk5OWM2MjQ1YzhhYjFiZGIyMTg3OWEzMTdhM2RjZDI1N2E1YzRmMzQ5YjdmNTllNGU0M2Q2MmQ5ZjFjZDE2ZjUxOGYxY2E2Y2FkMzdlMmNiMjBmMjU5OGM0MTM0MjkxYzZiOGE5OGFhZTUyNDdlMjZlZWZiNzZhYTM4YzljODIzMWMxN2U5ZGJmMjcxY2VjODBmYmE1YjRhODM0YmQ5YmU4MWVhODQxNjM3YWE5Y2RkNGM0YmYyNmQ3YWQyNGNhM2MKK1NJRzogZGE5OGRmYjE4OTM4NWIyYzg1M2I2Y2YzNzU3MzgwNDZhOGYyN2VmMjc5NzRhYmNlY2VhMWRiMDI5ODliOTUxZmU0MzNhNmNlMWUyMjViM2ZhODIwMzJmZTA2MGE3ZDNmNmMxODNmZDExNTdmNzkxYTA2NGI0MDc2NTA1NzE2MDAKKworVFNUOiAyMzUKK1NLOiAgMmIyZWU4MDlkNjQ3MDIzZTdiNzdmYzU0MWY0NDg3NWEzNWZhOTQxZDM3ZjdjNWIyMWZkMzQ5MzRkMjM5MTkzNQorUEs6ICAyYzI5ZDUzZTFiZjJjNzg3OWQ3M2QyMGJhODhjYTA3YTBiMjE2ZDdmNmQwNWQ5MzY2M2E2NWMzZDllMTA2MzNhCitNU0c6IGM0MTQ3ZDY0ZWJmZGE0MWExYmU1OTc3MjYyOTU4MTA0ZTk0MGMzODc2YmNkNWI2OTU2YWNmZGVjMzJjNjYwOTE0ZDYyNjIzYzIxMDY2M2NiMmNiZTYyNDlkN2Y1Mjc0OTkxYzYwZTk1MGU4ZTI4MDkwNDk5NTNjNjk1ODFkMjQ2OWY0ZmU5ODJjNzQzNGZlZGQ5ZDRlMDBhZTA4ODk2ZDYyY2MxZmI5ODRkZDIzMzE1MGNjMjQ4M2UxNTljZmY0MDk3ZGY4YzAzNmJiNjMzMDAzYWJiZmJlMThjOGZhNzliNWEyMjI3MDgzODEyM2ZjOWJlMzliODg5MmM4MDM4NGEzODUwMjhjMWE4MWVjNThjOGYyMTA2MGU3OGFmZDJjMDRiZmQyZDMwY2EzOTc3YzZlZGFkNTE4Y2MxZTIwMDRjZGMxNGJmM2QxNWY1ZjUyOGU1YWYyNzdmYTE4MjI3NTg3MGU1YzAxMmY1ZjgyZmIxYWZkMDRlZGRlNDU3OGRkZDIxNjBhMWEzZGJjMDUwZTgwYmRkODExYmM4OGVhZDc5YmY5M2YwMTBjZDBmZDQ0MzNkMGJjMzQ4ZGFjZmQwOTQ3Y2NlZGE2MmJmYTQ5NzExZDAxMworU0lHOiAxMmQ5MDY4NTc3NTU3MmM5ZWFiYzliZTI1NzRjYTlhZTY2ZjBlNjUyZTU3OGIyMTczNmNkNmU2NTRmN2M2YjE1NDU4ODNkNTZiZjc2MGNjZmMzY2Y4NzU0NGUwMDA0Yzc5ODA2MTI1N2UxMzAwMzBjYjk5N2E3ODgzNjlhOWEwNQorCitUU1Q6IDIzNgorU0s6ICA0ZWExOGQ2YjRhZjgwNTNiODg1ZWMxODhiZTQ4ZGViODZmZmIyYTY5YTRjZWM4NjYzN2JiZDdiNDFiODA3YzQ2CitQSzogIGU1OTg2MDU5OTc2MjMzZWQ3NzM4MmMzZDk5NTlmMzRlMzE3OTYyNjk2NTUzZTg2ZWQxZTU5MDJjNGJlZGQxNjcKK01TRzogZTljODlhMWExMTE5MzczMjA2Y2U0MGVkZTNiODlhODJmODk0NjJhMWRlZTllNzg5ZTk4NDVlZWMyMWY1NzFjMGZhZWZkNDMwYWQzMzhlNGE3MmMwNDdhMzlhNDI1OTU4MDM4N2ZiOWFhY2FkZGMzNmEyYjUxZTdiNjBhODdjYTEzMjFmZjgwNjc5NGNkNmRkNDU0OWE0ZGY0NWMyZGFlM2U1MzljNGQ3ZDA2YjZlNmU5ZjQ2NmZmY2EyZmE0OTc4Y2UzZGM3OTJlNDRhNjI4Mzg4MGNkMTM4YTc1YTIyNmY5ODVkYTQxZmZkYzBlMzJhNWE4NWM4NWZlOWE0M2FlNzhmY2ZlNTdmNGRkNzU0MGE2ZGQzOTI0YTQ5YWIzOWViNjk5NTBkNDIxMTUxZDk2YjFlNGZkMzkzNTg5MGY2MzRjZDUyYTczYTc1NWY1YzJmYjcyZjljZDVhMmU2N2VhOTMwOTE1ZTEzM2I0N2NmNmI3YzEwYTlkODg5YzZhZjZiNWYxZjRmNTEwOTRkMjdmYmJhMjI4YWMyMjY4YjM0NDAyN2ZkNDllNDI2MzQzY2MwMTM0Mzk5YjRiNTEwYWFlYTUwMjM0ZGY0MmMzN2ZhMWM0ZjRkMGUKK1NJRzogMjc1NzBjMDAyYTQ4N2QwMDBjYTM5MjhiODNjYjQzMTk3MjJjNDZkZmI0Y2NhMjYwZGU3OTBlYzBlM2MxOTMyNjg4Zjg3MzYyOTUyODE4YjU0ZjUxYmM3YWVlYjI2M2Y5NjBiYzBkYTg5NjRiZjMxMmVmOTNlODFmMDZjODBiMDQKKworVFNUOiAyMzcKK1NLOiAgZmMxYjc1ZDE3ZDM4MDcyMTczNTFkMmFhNDBkOWIwNGY1MjViODllZDNmNWZjZGIzMTFiZWMyYWVjNWNiN2VjZQorUEs6ICA1NWU0ODRlNzc0YTQzOTJhOWQ2ZWVmZjgzNWE4ZmJiMjMyY2Y2Mjc2YTg5Yzc0ZmMwZDFiYjIwNDVhOGIyMWJlCitNU0c6IGQwMzFiZDExZGEzMDgwOTdlM2JlYjZmZmRiMjYwMGVlNmExOTNjYTZkODMyNDUwMWM5NzJiMWEyNTE2NmZhN2EzNjlmNWJjODgyZWE0NTYxMmNmMDI1ODAyNTRkMjFiNDBiMDM2MzIzN2U4MzVkYWUyNjU2YzFiN2Y0NzM2ZTg4YmU1M2Q2YjExOWMwN2Y1NzI5YmJkODJmNjdkZTAzNTg4MzIyODc5MjQzYzU5OTBhN2U2MWY1NjkwN2IyNDE3MWE1N2NiYjBiYmVmYmEyMzE2Mjc3YWY5MzI2ZjljYmYzNTM4YmNiZjY3ODBiZTQxODI1YTJjYTc3NGI0MWJkYjFjZDVjNjA4ODUxZWMyMzM5ZWIyZjRmZWVkZGFhODkxYTYzMjZiMjlkOTdkN2ZiZjMxMWUzYmI3NDljNWQ0YzA1OGRjYzE0ZjQ1MmY5MzM0OTkxZTI3MWMxNmQ2NTA4YzgxODYzMzkyN2Y0Mjk4MDRjYTdhMzgxNzBmMWI5ZjZiZDczZWQ2NzVlMTFlOGMwZDMyMWZhYzkxMjczMGI0YmEyZjdjNDI4NTM0YWRjYWE0ZGFkMzE0YzU1ODA3ZTZjNjQyZDQ5NGM2YjJmMGU4Y2QxMjk3NzVjYzAKK1NJRzogOWE2OGQxNTFmZWEzOTA5ODkzMzU5ZTYwYjk2YjY4YjJhM2UyOTQ2ZjJiNDdiODc1Mzk4YTFlMzllYjAxNDYzZDM1ZWFlN2Q5NzZmODMzYTc2MmI1MWYyNzI2ZWUwZGNjYWQ1Y2UzNjAwNTY0ZmQ5ZGQ1OGMyMzgwN2ZkZmZkMDUKKworVFNUOiAyMzgKK1NLOiAgMGQwYmY0ZDQyZWY4MTBiMTc5ZWI4NDE3NzFkZTZkYmRlNzYzNjFjYWY4OTRlNDJhMTRiMWUwOTc4N2VhM2UwNgorUEs6ICA3MTcxNTEwYjQzZmMxN2VmYTgwYjE1ZTMyMGIxYjBhNDA4MzMyNTQyZTBkMzZlNGFiOWE2NDljZDk0MWI1YWVkCitNU0c6IDhlMjE3OTk3NWQwYThlNWE2OWZlODc1YTNjYjFlNzlhZWM0OWMzODUzZTMwZGQwMzIwZmUzZWJmYjYzOGI4MmY4OWFkMTY0MzAzNmIzN2U1NmUwYjU1ZTBhOWUyMmE0ZTI4M2Q3YTI3NDg1Y2U5MTAyZGI2Nzg3ZDY2MjhiNzc5MTNlMTA4OTY3NzRlNDk1YzI2ZThiYWIyNmU3ZjlhOTRkMjlhYWEzNmFlYzljMjZhZDNmNTBlNWQ4YzBiNzY5OGJiNWYwMWI4NzZkMGQ2NWZjZjVlOWUzMmNkN2I4OTgyOWVkMDViMGI4ZjYzYTkzODU4OTg1YmM5NTY5ZmNlNDI5ZmQzN2EyMTFhYmVkNjUwZjU4NWMzYjU1OTAwNDQzYjZjNWQ2ZThhNDhiYTY3ZGVlZWQwN2I3NmU5NjlmYzg4NDMwZmNlMjcwOWMwYmI1Y2U5MjZhYjdmNDRlMGNkNzlmNGVjMzU5ZWY3Njc0ODg4M2ZjYzNkMDI2ZWRkMDZjOGI5Y2JhNTRiOTkwZDMwYWE0MWYxNDQ4YTEwODkzZmIwNTM5MjgwYzU5OWQ0MjM2MTQzM2EzNGNkYWZkOGViZGQ5MmVmYjljMzhhMzZkYWY0Yzc0MDYwYzY5NgorU0lHOiAyNDQ0NmJkZjAzNDE2YTRkMDg2MTQ0NjZmYjg1MWRiNTBlOTFhNjIzY2FjZDFiMGIzNTY2MGYzY2Y5MzMyMDBlMTUzMDg3MDhkYTM0OTlhNWFkMjVmMGYwMzA2Yjc5NDI3NjJlMjBhNzY1YjdjYTliOTAxYzc1MGIzYTk1MzIwYQorCitUU1Q6IDIzOQorU0s6ICA1N2I1MTk0ZDI2YWJlNGFiMjExNmMwZjAzZDIzZGJlMTE2ZDQ4ODI1YTI1ZTc3ZDY0NjQ4YjQzNjkyYWUyNWJmCitQSzogIDQ5OWMwMmRiYWQyYTRlYWIzYjZmZjFhYmEzOTQ0YjkxYzNmMjczYTM4MmM1NDhhNmYzYTE5YzgzZjBhODY3MjQKK01TRzogYjQ4MTNjOWQxMzIxNWZlOWY2M2E3OGZmN2FjOTUxNzNlYjgxMGI0NjEzZjBmNDhkNjg3NmIyYmQzYjJjNzJiYzdkOThjYjFhYzMyYmM0MWNhNDdmMDk4OTZmNzkyMDRlY2ZiODI2NGNlOGYzYzNlNzZkYzEyNGRhOGRkYzZlMGRmYzFlMTNiNWE1MjlmMjBjODI2MTNmYjlhODJlNWY1ZDc3MzI2YTg2MWZhZWRhYmM3MzI1YzU5YWYzM2RhZTY3NDQwMjVlNjQ5Nzc0ZmM0Zjc5MTM0YmY5ZjZlM2Q1ODc1ZGQ5MWJjOGExNGNjMzZhNjYyODNkMDFkOGQxMDhjMTMzMjdlY2E1MzA1N2JhNTBiZjIxMGMxOWYxMzlkZTY0OTQ5ODI2NDYxOThhMTI0NmMyNzFiMGEzNjhjMTBhYWI5NWNkODk2MTIzNWQ3NDJkZjQ1NDViZTY4YmQwMTBkYzBkYjIzYjY3M2U2MjM2MDllNDIwZWU3NmIxMDU2YzUyMGY5Y2U4ZmJlOGVlMTg2M2RmOTdkMTdiNzE3NDYzNmMzYTJiNjEyMjk1MDkxOTQ4ODEwZDFkNGI4YTU4NDM3NjBhMjg4N2RjNTVlZjUxMmFmMDQxZWM1NGZhZDMKK1NJRzogNGM3MzQ1OTYwYzhmZDQ4YTdkZWFkNzFkYmQ2MTkwODQ2OGVmYTg2NWExMzU1NjhjOGY5Y2EwMDU1NDgzNDY4NjE3YTdlMzM1ODQwZjU3YzZjZDhmMmM5ODA1Y2Q0N2E5ZDdjZGZkZTUzZGE4ZWY0ZjFhZGJiNmY2OThhYWYxMDAKKworVFNUOiAyNDAKK1NLOiAgMDY4ZDI3YjIxZTJhY2ZjYzE5YzNlOTY3M2RkNDQxNDJkOThhYWNhZTg5NDkzMGUyMGNhMDY3NDM5ZTc0OWE3OQorUEs6ICBlMjJkZGQzOTZmOTU1YmI5MGUyODQ3NzZhYTc2ZTkyMWU1MDY5OWQwY2E4OTE0YTliN2I4NDFlYjVmZjQ3ZDZkCitNU0c6IDFjNjgxNTQyM2QxYTJjNWViZTg4MjhkMTY0NjUyN2MxN2IyMDA2ZTU0N2YwMTZiNTM1MGYwMTBkNzliMTNkZjRmYjhjNmVkNTdiYTljMjZjM2NiMGUwYTY0MTc4YjY1MGEzZWE1NDQ0YTRmYWQ1YjIwYTNlYjhjYWE3MDI2MzQwMTFjZjc4OTJhMDcyN2I2ZTgxNTBiMDc3MDQyOWEzN2E4YTBiYjNhN2VkYjg5MWE3YzkwMjQwYmMwMzYwYjE0ZTZkZDc3MGE5OTBiMzFiMzFmMzNkZGJmNjUzOTg4ZjgyNzQyZTVlZWMzMWIyNzM2OGViMGU0ZjFlY2Y0ZDY3NmY0OTIxNGE1MjBkMWU1YjJiYmI1OWFjMmUxMzI2N2UwN2EwY2JhY2JlZDlmOTRkNzQ3M2VkNjk3ODI4YjA5MjhmY2M2MTZlZTAyZTUxZmNkOGRiNGQ4Zjc1MzNiN2IxMzlhMDVlMDZmOWUwZWFlMzI5OTNlMzAyNWFlZjA1OTBiM2ZiYjQyOTJhM2FjNDA3NjVlODU4NGVhZDAwMjY2YWNkY2JkZGUxNDU3YTAzYjdkNTdiZDVjOWU2NGZiMDZiNjRhNTBmMzVmMGExZWMzNGI2ZGRiZGU3NjdiOTZmZmQKK1NJRzogMGMxNzNjNDg4YWQwMDFjYmI5YzQzZDdiMzBhN2MwNzFhMmZkYjA4Y2Y3ZjM3ZGFmNzFkN2FlNzEyOGRjMGQ0M2YwZjA5NWIyOTI5YzU0Yjc3M2VkNGExZjBiZjBkYzRmMzY0ZjA2MDFlOGQ1YWUwNjJmNWI3OGMwNWJmYmM3MDIKKworVFNUOiAyNDEKK1NLOiAgYTM0ZDUyNTYzMTU5ZTA3MjNlOWYzZmQxMzNiZDk2ZTIwYWRhZTYyM2Y4Yzc5ODAxM2JjMzZiNDQxNDg5YmRjMgorUEs6ICAxZmI2NThlNjQ1ZGU2ZDNlZmRiMDgzYTczZmJkNTkyZmNkNGI4MDBlMDNjN2JkNjgxYWVhZTY1NzZiZmJiZTJmCitNU0c6IDFkMjE1Zjg1YzA4OWYzNWYzMDdhNzQ2YzY2YzdjMWU0MWQ2YmEzNzczMGQ3NTllNmU1NjIyZDZjNmExOThlNDBmNjNkMzc4NzNiNzE1ZGY3NTE4YjNjNmJiNWU5NWE0Njc3MjZiOTdjOWEwZjhmNWRmY2RiZmQxZTBkZTM1NzY2MWRkZWFiNTU1MDQyYjk0NWZkODk5ZmFkNmQzODJkNzkxN2RhOWUxMmRmYmRhMGQ2OTkwMGIzOTc1MTY1YTczZDBhYzlkZTAxZmQzMDQ4YjhmZTVmMGI5MGJlNjdlMDNkYzIyZjY1M2EwYTEzZWI0YjBiNzUzZjNmM2JiZjc4NzM2OWViZDhiZjVlMDBlYjc4YmYwYjM1MTVhOTFlNjhiMWQ1ZmM2OTIwYmY0ZjQyNTlmOGE3MzBlZmM3ZjEwMTZkNTAxZWY2ZmI3Y2I4MzY2ZmM4ZTcxNmNmYTUwZWE4YjIwM2NjYTFhMzE2NzA3ZTBiMGZjNTdlYWZjZTgyZDYyZjdmZjNhZTA0YWM4ZmQwNDFiNTViMTlhMzUyYTY5ZTZkNGI3OWQwZTY1MDE3NTE2OGUzNGZhMzM1OGVhYzgxNmNlY2YyYzhkZDFiZjJhNTg5MTEzZTkxYmI4MThmOTFmOAorU0lHOiA1ZmFiNWE3MTQwZDQ3ODczNjg0MzA1YWE2MzUzZDM4NjJmNWZjMTNlNTRhNDBjOTU2M2NjZWFjOGY3NDAwOGM2YzQ0NTYzMWZhODY0ZTBmMWMzNDViNTk1NGY4MDA1NmFlYmEyNTY2MmI3ODgyN2I1ZThlM2E5NDM3ODEzNzIwZgorCitUU1Q6IDI0MgorU0s6ICA1OGRmZTc2OGJmNTIxMTg0OTRiMjk5NzUxNTRjZjQ1MmJkOTc0NmRjN2RlMWQ2YmNkMThlZTZhMDVhY2ZkODU4CitQSzogIDBmMTQ3NmM2Y2MyYTFiNDc2NGFmNzU4MDVlNzczNDFmMTRhMGQ4YjA5YzZhNWIyZWEyODdmZDUxN2MzZmE2YjkKK01TRzogNjA5Nzk0MjAxYzRmNmZhZjQ4ODc5MGQ2MWRiZmYzZjQxYjMyOGM1YjA2OTVjYmU5YWE4YTEzNmQ3MmI0OTc3YjIxYjUwMGYyMTZlOWYzMjE2OGFkYThjMTNiZmYyNTMyNzY0N2UzMGQ4YTI0NGQ3NGQ4ODMwM2FiYzkwYjdmNzFhYTA3Y2EwNGQxN2JjOGEwMTY3ZDZlNjNmYjg4YmFhMWRhYjgxZDUwZjFlOTFmNDZmNWFmNzdmMmU4NDA4YjgyNjMzNmEzNTA1MmVmZmZkZjRhZjc5NTk2YWYxYmIyMjU5ZjgzYzFiYzEwOWNmZGMzZGQ1MGZkOTZkMzEwZjI3ZWE0YzZjNzY5MGYyMTgxNWVhOTJiZDc5Mzg5NjgwY2ZlM2VkNDBjODAxODExOTA2ODhkMjQyMjJkOWExZWQ1MmNlNmExNmI0MWRiZDkxMDdlYjZkMmUzNTk0ZTQ0OTRkNzVkZDdjMDg5ZTNiMjZmZmQwMGQxMDAzYzkyYzRjMzlhZTUzODJlZjkyOTE0OTFhODgwY2E0ZWMzYWMyYjg2ZTY2NzE5YjkyYjZmN2NlYTJjYjBiYmIxY2Y2MjRkMGQxYWJlYWU1NTZlNWY3MzkwOWRkNTQ2Mjc3MDM3ZWM5NzJmZDQKK1NJRzogOTc3MTM3YTM4YWY0NGY0YjI2MmFiZmY3ZTA3MjgyNDMzYzU4OTI2ZDU2MmZiYzYxODBiZGU2Y2Q5NDk3ODYxZmI2ZDk1NWNmMzgzZDk5OWZhMTAzN2I4YjE3NTRjZTg4OGM5ZmZjMTU2MGE0NTFkMGU5ZGI4ZDc0ZDI5NDA2MDQKKworVFNUOiAyNDMKK1NLOiAgNWE2M2VmOWJkN2RiZjBlODlmZWYxNTU5ODM2NTllOGEwYTZjYTAwMmJjNDJmYWQ1YTQ1YWY4ZTAyODE5MjNmNAorUEs6ICBlNjMyZjRkYzk5NDIzMWNjMTc5MGMyMWFmYWRhYTk3N2E1ODliMGViMGRhMTlmY2IyNzkyOTExYjE1ZWNmOGFmCitNU0c6IDc5NmJjODM2MWM2ZThlZWMzOTgzOGIyNGY1Mzk3MWU4MjBmODIzNjFlMDUxMGViNGRlZjFkYjI1MTIzODdkNmJmMzViYmRmYTMxODg3OTIwOTQzNWQ2ODg3YjE0MTBiM2ViYzE0NTVmOTFmOTg1ZTBmYWIxY2UxYzUwNWM0NTU1NzZiY2EwMzUzOWQwNDhhZDNhMGVkMWYxMWM3M2JhYzY4MDllMmVhMTQ3OTc1YmVlMjdjNjUyNjFhY2ExMTdkZjBmYWU3MDA4ZTJjM2MxMzBiZWM1NTMzYWI4OTM1MWMyMTQwYzlkMWE2MmJkZjY4ODYyOTc4N2Y5NTRlMWM2MTBjYmI3NWVkYjg2MjA5ZDdjMzU3Y2QwNmVmNDE5MzFkZDVkZmQxYzdkNDA3ZmE0ZWUxZWYyOTM5M2JlYWI1NzEzMTczODAyY2NlMmQ1NjIyOWNmYTc2YjYwMTY2MmM0ZDlhODRhNDkzNmM1MmFiYjE5ODEzNzhiNzE3ZWI1NWNiNjA0YTY4ZDM0ZjAzYjIxOWYzMjIyNmNhMGU2NjkzNDhhMmQ4ZDI0NTM5MzBlYjZlOWMyYmY2NmZhNGU5MmM3NTEzNmUxNDhjZGIwMzQxMzBkM2Y2NDYzODJlMWM3MTU3OWFjNzAKK1NJRzogNzU0NjFmOTk2NTBjMDM2ODA1ODExM2ExNWJhMTZiZDIzMzdiMmU2MzNkYTM4MTEyODc4YzQ4MzRmYWM5YmEyZTMwN2M4NjZjMDJhZjc5YmVhMzM2NTk2MTRjYmI0NDY1YzU3ZWMzZWZmZDRjNDc4YWUzOGEzNGEwNWNmMWVkMDcKKworVFNUOiAyNDQKK1NLOiAgOGIyZjA2MTQxZTQwMTE2M2Y5MGY2NzRiMDRkYzkwZGNiNmRkMzM4NjQxOTMzOTY2MmVjYjBkZmZhZGYyNTAwYgorUEs6ICA1NGRhOTM0YTY1OTExOTE5ODU1M2ZkNDU2NmI2NjBkOGQ2MTBhZGMzMjkwY2I4NDgyOWM4OTQxNDhjZjNmNjdlCitNU0c6IDFkZWIyNWQ0MzQ1ODY5MDMyM2E3ZDI2YTI2Njk1MDkwOTkzNDc0ZjQ2N2M2ZmRlNWRkYjM0ZGE5NDViZTNjZWEyZjZiNzU2NTJhZTIxY2JjNGZkMjI3NjNhMWI0NTU4M2UxYzNlODhiYmI1ZmVhMjA0OWI3MzM2YzkxMTU5OTg4YzAxNTI2ODI0Y2EzYmVmMTZiMzYyYjkyMDJiOGI5NzU0MTg1YmQ2MWJlYThmNTM5YWFkZjRhMWFiMTM1ZmJjMzFkMmE4ZTMzMTc4MDczMTA2Y2JiYzAyZDRjZDBkM2M4ZmVhYThlYjczMzA4NDM1NjI1MTc5NWFmYmQ3OGFjM2M0ZjhhM2JhMTlhZWQ3NTVjNjQ2ZjM1NTY5YzdhNmM2NzViNmQ2OTE4ZTgzNDk2OWFjYTAzZjcxYTJlNzJjY2IxNzAwM2JiNzViNjJlODUyYWFmNThiM2JhZWE4OWJjZDY0YTMyZWIxNGE2YjllMTBkZTQ4OTcxZTUzZDBlOWFjOTlhNzhmNDJkZTAzODJlZjBlODBlZDNjZmEzNDNmMzVlNGE5OTgzYjlhZWVkOTg2ZDNhNTdmNDdlNWU0NmQ0MGU5ZDY3NzMwMjgwOWEyZDM3ZTRlYzAxMWYwNTFiNGQwMzFlZDYwMAorU0lHOiBkNjhlMzc1MGRjNTY0MzIzOTc0MDFjOThmZjE1MjlkYjllZDQ4ZmVhMjQ2ZGQ0ZWQzODNlYzc0YzFhNDYzYWViNzg0Yzg3YjFmZGE4YmJjZTk3MGZjOTdhYTk4MDdkZGJlOTVkNDFmYjAyMmVhNjhjMWUzMTE2NTRmYTFkYTIwNworCitUU1Q6IDI0NQorU0s6ICBkYzY0OWZiYjFiZWUwYTQ0ODE0ZDZkOWU5MDgwZDVkOTBjMWZjMTczYWI1ZmVmZWQ4MjZhNzQ3MjNhNzc0ZTBhCitQSzogIDAyMTRjODlmMzg2N2FkMmU4ODcwZTUwZjhjMmE2MjU0OTg2ZDljMjIwZTMzMzg0MTEzMDBjZDljNjQwNGQ0YjEKK01TRzogMzI4NzAwYThhZTU4MWMxZWRjNGUyYzAwYzc4YmY0NjA2MDk3ZjliZDc1YWFkZTIwNWEyNDNjNWZkNzQzNGQ2MjIyZGE5MzdlMjg4MWEyZTNjNTc0MzU2ZDRkNTY3OTMwMWRhOTllMTFjZjc0OWMyNzkyMWM4Y2FhMmFiMmE1NjRkODdjNWRmOGVjZjFhNzJiNjgwMTg0ODI0ZjY5ODYwMjJlM2ZjOThiZDJhMjFjMzQ1NWFiZjExNTQ5NTRmYjMwYzg5ODgyOTQ3YjAyZjM1YWY3YjFiZmFkMDUyMzdkMjQyZTJiNzQ4MzJmYzUzNjE5NmYyZTU5ZDFhY2QwYzFkYjZmMTk0M2QwZjYwNDNiYmQ2YTc2OTA4M2VkNjZiYTBlMDVhNTBmZWIwYWNmNzJiNmMxNmJhOWFmMDM5YWZiN2ZlMmE0YWFlYjRkMDYxODFjNWExODc4Njg5ZTY3YTNmNWQwYWQzOWU3OTRkNjIzOWE3ZTBhMTJjZTgyMGM1YmU2MGZkNWYxZGQ3OTcwMmY0OWQwMmI3OTc1NWZlODczZjU3ODVjNzJmNzQ2MjVjZDdlMjQyODI2MjU5N2QzMTQ4MmMyYzA1MDg4MDFmZDk2MzE5ZDYxYjkxYmEyNTNhNWU3MjJmNDE0Y2YKK1NJRzogMGUwYzVlNGUxODQzNzVkYTRlZjdlMmEyZTQ4ODgwNTBjZDg0ZTJmZTIxZDA4ZTg0YTg1MmRiMmJlM2ZiYzM3MmM0NzJkZTA5NTRkY2QxZGMxMWFlYzQ5M2M1NjlmNDBmYzZmNzdmMDNlZTUyNGZiMDZlYzQwZmFhMWQ2Y2MxMGYKKworVFNUOiAyNDYKK1NLOiAgMzliODA2MmRhNDNlNjRlMTY3Njc2NWQ2MmM3ZmI4ZTBhOTljNGZkNDE3ZDZmN2UzMzE5YmIxMzA0NDIwNWYzYgorUEs6ICA2MjI3Y2VmZTg4ZWE0ZmIyN2IzN2I1Zjc5Nzc3OGJkNzJmZGFmZWFkY2NkOWFlYjY3YWQ0MzdjZTA4ZmJhNmE4CitNU0c6IDc0MGFmNjc5ZTMwNjlmYWQwNTlmYTQ4MjVmYTQxYzU5ZmJkNDg0YWE2NDkzMDNjMjdjNGY3YTk0NzExYzViNzEzYjJhNmI4OTg3ODU5ZTIyNzFhNmE3MWViMGI0YTE1YWJkZTRmNTE2OGY2Y2I5ZGJkYzZhMjdhMmExM2Q1MmM5NzIwODk2YTFmNGNlM2E1MzQ1ZWU3OTNiNmNjM2FkODBkN2Q1ODE2M2Q1NDU1YjljYmQwNzNlMmI3YWRiZmY5NTU5MGM3MTcyMjcxYmQ5MWZlZmRiZDAxNjU3ZWUxNzUwNjUxMDM2Y2RjMzU2MGI0NDRjYTIxODRiZjRmM2VhODlmYzk3M2FhYjZmYjRhOGVlNTcwNGJiZTVhNzFjOTlmYTNiNWVmMGQwMzk2MjQ5NzU4Mjk3Njk5YWUyMDJiODE5NjkwZGM3YWM0NjkyNzcwMzQ2OTA3ODQ1ZTIyMTBkNTM2M2FkZWVjMDNmMGZjNzc2MWI3ZTBlYzBmZWExYmNmNmIwNGZjNTRiM2U0YzQwZDE5YjhmYTY0OWFjODQ3OWU4ZjgwNzMwYzBjOTRlOWY0YTFhZDUwNmYyYmNhYjBjNDk1NDBmNmRlY2FhNzdiM2Q2NTdkYzM4YTAyYjI4YTk3N2VjZTQ4MjU0NWEKK1NJRzogYzVmNjI2NDkwYzBlZjRlMWVmYzNlZGViMGNiYzNmN2RlMjY3MDU3ZmI3YjZlYjhmMGM4MTM1ODQ5NjViYzVjNDIxZmVlZGY1NDI0MWNhZTAwMWVjNmQ1ZTI1YzliMWZiYTAzODVlNWRiZDk1YTA2ZWMxZDhhZTUxOTE0NDk2MGQKKworVFNUOiAyNDcKK1NLOiAgNTJmNDY3NWQ4Y2NkMGViOTA5ZGYwYTUxNjY0OGRiMjZmYTAzM2JhNDFkNDNmYzM4NDU4OTZkNDU2ZTE0MjY1ZgorUEs6ICBmMzllN2RhZmM5N2IwYTg0ZGNiZjdmYTE0YTk0MDNlZTFmYTkyYjg1ZTVhN2U1ZDA1ZjAzMWI0NGRkZjFmNzk0CitNU0c6IDc0NDI3MTEwODU3Y2I0YWYwYTMzNDJjMmI1Mjk5N2JjZTFhMGRiNjQwNWM3NGU5NjUxYzViODU5NzlhY2IwNzFlNTY3ZmU3MDQxMmM0ZTBkOGM5ZmE0MjE5MTRmNmE2MmYyYWU0MjBiN2IyZjRjZjgwYzkwNTc0MjIxMjIyMjg4YjY1ODY3ZWFhNjZlN2UwYTA1NTdhMjZjNTQ5ZjlhN2E0ZTcwODM4YmE0MDc0YjRjZDdhOWQ3NThiMzc4Yjg4ZGQ0OTQ0MWRmODAyYTQ0NGRjYmMzMDYyNDkzM2I1OTkyMmYzM2MyMGYwMTlmZTc4ZWUyNGI4ZmJhNzlhNjgyZjM4ODUwNWFjOWM5N2Y0ZWI4N2M2MTE4ODAwMjZiNGMyMzMwNmI4NjUxNzNmNWQ3MTZhYmM2Y2Q5YTk5MDZkYjM0MzAxMzZmNzU0MTI5YzQ0M2IyMGM0MmJlMmZiY2JjZDQ0MDM0ZDcxNGY1OGE0YmE4ZTc1NjYwN2EwMmI2MDhlZjQ5NjQ4ZjJhZDBjZWE5OWU3YWIzMGE4ZGQ3ODE0MDA0ZjcyNWY0OTMwMWQ3YjMwNGRjZGE2MjVjMjk2ZDkyOGNiNTgxNzM2YWI3MzljODZiNDY5MjQxYTgyNTkzNTFmZDM3YjQ3ODBhOTk5MworU0lHOiA0YmY2Njg4MjdhNzIwYWY2ODg5OGEwNmVhN2I0NDU0NWEzNGNhODk2ZWNmMzExZmVlYTQ3ZTA2ODZkOTExZmFkYWEwMzExODk5NzE1M2M2NTM2MWZlYTE1ZGU5YmI4OTFiODkwOTg3MjA0NTUwOGZmYWQwY2Q5ZWFiMjFhOTcwMgorCitUU1Q6IDI0OAorU0s6ICBiYWQ3M2M5ZmRhNGNlYjlkYTZjNzAxYzJhNmUyZWZjMDQ2N2FmYTBhNzRmODc1MGM1MmNmMWZkNGM4ZTc0ODlhCitQSzogIGJiMGYwMjdhOTAzNTM3NmUxYWEzMjA2YzNkNzc0NDc1ZTM1MWY1NzY3ZWY4NmVmNDhhNzJjMDM3YzI0Y2NlNjIKK01TRzogNzRiOTY2Y2I3ODA3NzFhZWU2M2Q3MzRkZjM3NTY3MDJkMWQ1ZmRlZGRmMzIxMzZjNjM1OGI4MzYzMThhNGY5ODRmZTcxZTc3MTZhZGRkYmQ2NDllYmE0NGNkNDI4MmUwMDU1ZDhjMWVkMmQzNTEyM2Q2NmU1YTk4ZjFjMDgzOGRlZDU2M2I5YTIwZWI4MDA3NTM4ZmM3YjA3MTNlN2U0ODVlM2MyOGY2ZWJjNDIxYTI5ZGNlMjUyNGRiN2YyOTIwNTc2MTAzNmFkYTYyZTViMGI3ZDViN2YyOTRmZjE3ZjMzODIzMmZhNWZkNDJiNmY3MjUzMzA0MDkyZDg0OGY1MDczNTI0ODU5NWRhMGY3ZWYyOGU1NjhlOTkxNmJmYzU2ZDdlZDBkODExYjU5ZDVkODkxYWU0M2UxYjE5ODA3MTMwNmJmNTI1YzY3OGM2MzQzOTk4MDA1ZmJiNzg2OWQxYzQwZjhjYWM4MDdmZTJlZjAzZjNkNWI5MzNmNTg5NzhlZjI5MDZmY2NmNzQ0NGEyOTM2ZTYzZDkyOGM2OTA5MjZjOWM5OTRlZDNkNjY2MjYzZTk1NmZkZmVhMjc3NjRiYzVmNzQxMjViYzQ2YmMxMDJkZDNlNWZmOTNiNWUxMjNlNGIzOGJkZWY2OTdlMTUKK1NJRzogMTk3ZDZiNmNjODhhOThjMDZkZmNhMGMwMTIyNWVkZmUzOGEwYjIyODlmMjlmOGE0NGVjMDgxNmE5NTJkNTg1ZTJkNTliNWIwOGRlMTAwYzA2MDYyOTZjY2Y1ZTkyYTk5ZTA5MzYyMzE0NGI4YjIyZGI4N2Q5MjkyMjU1NDYwMDUKKworVFNUOiAyNDkKK1NLOiAgNzA3MzI3YTQzMWRiYTc3NjM5YjM5NjZiMmJjMDk1ZjhlZWRmNTdmN2EyMDBlM2IwMDc3Y2U0MjAzODljOTJmZQorUEs6ICBlZTI0OTY5MTA4NjQxODlmZGFhM2M3NzU3ZWIzY2RhOWFiMWU3MGZjOWU3ZjcxYTM4YTBiZmM4NDU5MzFjOTVhCitNU0c6IDMyZWYzMWI2NGVlZTcwMGZjYTJhYjIxYTI2N2Y4ZDlkM2JkYzY4OWM3NTM4ZmU5NTliZjcxM2ZhOTk1ZGIyYzBhZDM2ZGRlNDMwYTg0MTdkNDM3YjcyYzc0ZTI2ZGJlMzFkOTM3MDFkNDYxN2ZlNTE4MjVjZmY3YTU0NGZjOWY0NGU0MzQ1ZTE0YjRiMTFlMTVmMjZmZmMyYWY4MDM1ZjNmOTcwZTRkZGE0NGMwZWJjMDM2M2MyYjU2ZmRlMjE4NjYzYmY3ODgzOTA5MjUzOGZjMmYzOTE1M2Q0ZWIyOWRhMGMxYTA4YWE5NjY2MDFjYzY4Y2E5NmU5OTNiMDFiMTczYTI2MWIyZWYzMjc2NTAzODJmNTY4ZmU5NDQ4NTViMGY0ZmQ5ZDE1ZTc1MmFjNzRkY2ZkMzdiMzc4NmZmZmNlZjIzMzM5YzIxZTkyNzBkY2U4ODkxZGQ1ZWVlYmE5NjA4ZmRjN2I2ZmJjYzk5ZmExYjU5MDNkYWEwOTY4ZTFiNjkxZDE5ZDA2ZjIxNWRlZDA0N2VmOWQ3NjYxMGY1ZGUyMjBmNTA0MWIzMTNmYWY5ZTk2YzlmZDdkYjU0YjUyMjU3MjZhZjQzNWY5Y2JkOWZkODdhYjQwY2U4ZjJjNjk0MGI1NWYwZmFhZTg3ODUwY2EKK1NJRzogZmI5OTAyOWZlY2EzODdhNWQ3NjU5NjFlMzYxZDcxNzJiOThiN2UwZjExMjkwYmIxZTViNTdiNTFiYzIxMjNkMGJjZTI5MDIwMzkyYTRmZWM5YWU2YTcyYzRjMzg2Y2VhMTg1N2NiOGY5YzUwYWE5YTc2ZDdmMTY4N2ZjZjI5MDAKKworVFNUOiAyNTAKK1NLOiAgNmFhNWM5ZjAwOGY5OTA0NzNiYTRhNjI4NmE0MTY2MTQwMjY2NjFmMTFlMWEyNGVmYTgxYWMzNTg1MmQxZDA3MAorUEs6ICA2MDVhYzliNGRiZGQ1MDMzZDZjODI4YmZhZmE5M2MwMDM5NDQwYWExMWNhNzI0YWU4MzQwNDNlMDdiZDAzMmQ1CitNU0c6IGI1MTY1ZDM5NjNmNmU2ZjllYTU2NTdlOWYwN2ZmM2EzMjFlYjMzOGY5YThjM2QzYzQyMzA2YjJiMjc4OTc4YjMxYzYyM2E2MzFiZTNiMDRjNDFlZGZkZWRkZjUzOGUxYjc2NWJjODc4NTQwMWMxYWYyOWQwNDY3YTY0NDExYzQ5NzM5NWQ3NTVkY2EwM2FlMzI3MmY0YmMxZmIxOTE4ZGNjMWVkNmYwNGQ2NDk4NDA0YThjZTE0MDlkNDQ3ZjU3MGE0MzU5NTIyY2M1NDYyOTIwMmViZTUwN2FiNjkzODQzMTQxYmQ1ZWEwNTczYjIwZjMyMWE0ODNmZjM4M2E0Njg5N2Y1OTI2ZmUwYjhhZmMyNTU3MjcwN2I2M2VlZWQyODM1MzI5MjhhNDE0NDE5NjQ5Nzk0MmM1NzJhYzU0NzYwNTEzOTI1NmIwYWEwZWFmMDRkYjFhMjU2MDEyZWQ0NTNiMTczZWUxOWFkNmU5YjFhZjNmNDVmZjMwNDRhNjQxZjhjOGViMGFjN2JiNDVhYmJkZWQ0NzI4NmIyYTA2OWQzOTA4Njk0ZWUwNmYyZmJkMGVmNjA1YTc5MTEwMjZlYTllYTNjNDkxM2YzOGMwNGQ4YjY5NTY1YTcwMjc4NjdhYjMwOTJkMDVmNGNmYjE4ZmM3YworU0lHOiA5NzU2MzAzYjkwNjU1ZTkzNTI1MTAzMmFiMTljZmM5NWNhMWMyYTJjM2VhMjhiMDMzYmQ0NzA2NmNiZDRjN2Q4OTgyYThiOTg4NmYxYjljZDAyZTg4YTY1NTY0ZGE4ZGNjMzRmMzA4YmE5ZjEwMTQ0YmE0NjljMmVmYTQ5ZTAwNAorCitUU1Q6IDI1MQorU0s6ICA4ZWZiOGI3OTc0MmJlMjFlNmQzMWRlNjc4YmM4MTQ1MGJhODYyMTA4MmNkNmYwMDAzZTIyODYxZTIyOTFjNDgxCitQSzogIDMzMzgxZTM1NmM0ZmQzODZhM2Y3Yjk2OWFmZDlmNWMwMGQyMDY3YjY5OGIzZjFmMDBmMzc4NDIwMmQzMDg0Y2YKK01TRzogNmI3NTAzMjVkM2EwZjA4YTE0NzcwMGI1MWE5YjM3MjU1NzEwOTQ4MThlZDY5ZDFmNzYxMDEzZWI4NmYzMjNmNzNjNDlmNWU0Mzk4NzdjMjc4M2IzMzZkMWYxYTY3NGVmM2U0MzFmYzFhZTAxODAwODJkZjVmY2E2OWY4NDgxMzlmZTZhYjY3MzlhMDU5MmViZDZkNDcwNWM3ZjAxMzZiMjIxODlhMTFkNjBkNGQzYzliYzgwZmU3ZDdjMDA5NTJkNTc0MmY5YzBjMjEyMWZlNzkyZGYxMzNmMjIxZGI5OTFmYzk2MGVlNjRiOWQzMmUwMTc4ZTU0MmJjZThlZmE4ZDAzYWM4MDI2Y2Q3N2JhOGJmMGIyNDIxNWI5ZmFlZDJlYWVjOTIwZTkyNWQ1ZWM0NmZmZjZiZGU3MjVlOTFjODI4MGU0YWRhMjMyYTU0MzNhZTk2ODBlYmI1M2ViNTU1NTMxNDdjOTMzNzA1NzQ4NTQ4OTYxNTQ1MTQyOTljMDkzMjE5YTExMWRjYTRlNjM3YWQ1MDAxMzM4YzZkNGQ1ZWU5MDk4YzY1ODMyZjdhZjgzNWJjYjYyMjEyODQyMzAzNmM3OWE1NzM3NzM4YTc1MzlmOGQ0YTZiOGIyMjFiNTZkMTQwMWFlYjc0ZDQ1NzFiYzAwOWQKK1NJRzogOTIzMDA1Y2I0ODQ4NDAyYWE4ZjlkNWRhNzQwMzBiMDA5NDQ0OTI0YzIxNGFkNjAwZGRiYWI0YzE1M2E2ZmYwMjJiNTNjZjYzNjRjZDdlZTk5YmVmMzRmZTE0NGRhOTY0ZWRmYzM4YTBiYTYzMzMxMjY1MGViZjBlNTVhMDYwMDkKKworVFNUOiAyNTIKK1NLOiAgZWQwNDZkNjg4YjJiMGExYmMzZGFmMjExOWRkMzIxYTYwN2IxNmQyYTJkMWQ5NjNhZGQxMjA5YzY2NWI1Y2NiYQorUEs6ICA4NzM0ZjFmZmNiZDcxY2ZkZTI5MDAxN2VhNjI1M2U1ODBkNTllNjViNTQxYjQ2NTIxZjVlNWVjMTQ1MWVhZWM2CitNU0c6IGI5Y2M5MGZkOGRlMmExNDFmOTUxMTZkYjNiMDRiZTgzZTk4NTIyNTk3ZWMyMTc0OTY0MjQ1MTgwYjlhNDczNzY3ZDZkNDcwYTIxN2RiNWZmNWExYWI3NzdlMWUyOGEwYjE2OTc1ZTJiYWNiODczMDIwNDQ0YjQ3ZWQ4MzI2NDIxYjkwZWJiNTAzNjg4ZjA5MGMxMWIzYjEzNjE3YzVjNTA1MmMyOTdhNDFlMjg5Mzc3NWUzNGQ1OWFkYTQ5ZDk5NGMwZTRhOWY1MjIwZTlmMDMxNWE2NzcwNWEzZWMwOGFmMGRjNzI0YjVjZjY3ZmYzNGZhZGE4YmE3MTA5ZWQyYjVhODkwN2JiNDAzZmIxYTgzOGI0YjA1OWYxOGM3OTJkN2JmZWMwNWRlZTBjOWNiYmYxNzUzNDA5ZDdkYjNhY2VhZjQ3YjRjNjEzOTg0OTdiMGVjYTZjMWY4YWMwOGE3ZWExZWI5YzQwYmM0ZTkyZTg4ODIxMmY3ZDllZTE0ZmRiNzMxNTgxNjA5NDRmZjliY2RmZWYxYTc0NjljYzcwZjk0NzRlNWYyNGRmZmZlYTU4NWYwOWVhYWFiNGJlMmFmZWJiZThlNmNmODZkMzU2ODBkYzVkMWI5MjkxM2U4NDgyNTZlYzczNjMxNmZkMGEyMTQyMDYzYjAKK1NJRzogNzIxYmZkNDc3NmNmYmExMzMzMGZkMzcyNjllOTc5YzFkN2I2Y2U1NGE1MWI4MmY0NTZlMTM3Mzc4ZTU4MmYxOTJhMTIwODlkYTVhYmE3NmE3YjE2MTgxM2RjZTU2YjcyODkyYTM1MzMwYzk0ZjdmZjIxZDA5Y2YwOWU1NTM1MDQKKworVFNUOiAyNTMKK1NLOiAgNzZhYzhlNTcwYTM5YjNhMDIzMmM0NTQ5NzUzN2ZiMjE1NWFjZWMzNjE3ODY1ZWQxZGYyMTBmMDBiNDlkMWI4ZAorUEs6ICAzMTJhM2FkODk5YWU2YTI1NTA3YWU2ZTQ1MjRlMTBiNjNhNmU3YWU1M2Q5Y2ZmZDM5Y2YyODUyMWQ5MzUzM2Q2CitNU0c6IDUzY2VkOWRiMmI0NzllNTlkM2VkNjQzZjdjYzM3ODRjMjRiOGJkNGM2MzIwNmM3MmUyM2ZhODUwMDI4ODk5YTQxY2UxYThiZGMwMDNmMTJiN2MyOTk3MmM5YTA4YmNkMjMxZmUwZTFhMGZlZjBiYWZiZmE0ZTBlMDI3ZDcyMDA0MDc1YmEzN2Q0OTBlYjk5NjRlNzgzYmI5OGY5ZTUwM2U5YzFmZDNkMjNmYjAwMTdjYzdjN2E5Zjg2ZDE3MWYwNDFlMjM1NWQ4YzVlNjIyOWQzNGM3ZWVhY2I2MzU4Y2YzMDYwZDVkMjY1YmFlMjAwNGE1NTg4Nzg2NTlhMzBkZmVkNWYyZWM3ODhiNGUxNDM5N2I1ZDAwYzI5ZGI1ZDRlYmYxNjYzOWE4ZGYyOTJhM2QyNGY2OTgzY2JjYTc2MGQ5MDNlOTc2ZjViNjk4NjQyYmExZmVkNDllNzljMzhmNGJiMzk0NmVmY2NjOWQ2YWVmYWQzMzZkNTU4Zjc4ZTRmMjA1NDIyZTEwMzg0YTRlNTMxZTc1ODA3ZWZiMzg5ZDJhZjRjYWI0MzgyNWZiODdmMTk2YTkwODA3NjlmZTc1ODU3ODI5NzBhNjkxOGFmZmUxMGQyMGQ2MjliNzA1ODQ1NTk3NDE4ZDY5OWRlM2YxZGU4NTRmOTRiZAorU0lHOiBjZjAzZjUyNTkxM2M0NDMwM2IyZjgwMDc5MzkzYzIxYzExNTgxNDZlY2Y5OTYzNmY1ZDk3YWRmZGQ5ZjM1ODM5ODA0YzIzODA0Y2JmMWU1NTNjZmQ0YjczZjY4OWE5MTQzYWVjMjk4ZjgyNzZlMWU0ZWUwODkxZjFiYTc1ZGUwNAorCitUU1Q6IDI1NAorU0s6ICBmNjRhNjZiYTBmMDgxOWYzMDAxNDE2YzIyMGJmNTJkODYwMTMwYTE5NzY0YWE4YWIzOGQxNWIyYWE3NWFjMDIyCitQSzogIDgxMjUyNTNjZDMzN2UwMGQ0NWI0NTA3OWI1ODUzNDk1NjFlNWY1NDJhODFmNmQyZmNmZDk4NWMxMGZlYWIyYWYKK01TRzogODA3Mjg2MmVkMGFiMzU5MjFkYjVlYzJjYmE4ZTZhZWRiMDQ0MWZkZjQ3NDkxMDA2YzAxZTY0NTZhZDcwZmFlM2M0MTUyZGNmYmZkYmI4ZjBmZGRlYzVlOTZiMTJiZjY3OTg5YmE5Njc5M2Y0ODYxYTExYjYzOTA5Y2U4ZDE5YjhjYTY0YTU0NGIzMWNlMDUxZmJjODhlMDYyODA2ZDk5NjVjYmQyOTY3YjAxNjE0ZTg2YjUzMmZiZjU5ODQzMjE4ZGM5YzE5YzgwMzE1ZjA0NDczMTcxOTM3MTA5MmEzZGEzODg3OGJjNGNmNzdkZTk3MmU4NjA0NjZiOGZjNDVlNDY1ZGMzZDBlYmY5NGJkZWE2MGVmMGI5ODkxY2VkNDFiOTk3YjExYjMxZWU0MTY3ZGI2MGM5Y2ZjOGI4NWJlYWNmZTIyM2NjMTgyOTIxMzc3NDA4NWQ3YzA2ZDJiMmU2MzJjYzIxY2Q5NjYwZGY0N2M0ZmE5MThiZGQ1OTZkZGY2MjJkY2I2NTI2NDJiNjc1MjdiYThlZDE1YTgxOWE4ZTIxZjQ4ZDdlZTcwMjQ3ZjUyMDBlMzdjMjU5ZGZmZDE3ZWVjOGMyMzJmOTcwY2IwMzE4MmZlMzk2NDEzMjk5M2Y2ZWNiN2M0ZGIxOGNjZWYzOTBjOWViMzYzOWUKK1NJRzogNGRlNmY1MjUwODIyZDdjOWQ1YmI5ODU4MjUwMGI1YzA4NWY1NDFlYmRjNDUwZWQxYWNhZjgzNjg0ODI3ZWQxZGM3NzE0N2FhZTRiMTllMTRhN2RjNWJiZTFmMWU0ZjU3NzFkOGE2ZTRmMjM1MTczOWFmYjA4YzgwNmQ1NTg3MDEKKworVFNUOiAyNTUKK1NLOiAgODQzOWIxZDYwYWE0ODQ2MDEzNWViMTAwMmNjMTEyNzkyOTk1MDc5YTc3ZTZlOGFiMDIwYjlhYmFjYTg5MjBiNAorUEs6ICBlYWRjM2UwYzViZGRiYzMwNTJjM2IyZjhiMGE5NDU2NmMyYjJjODc5ZWQxNzAzNGFjMGU2YTQ1ZjJiM2UzMmQyCitNU0c6IDU0MTlmNmQyNGViNDY2MzVkNGE3ZjhlYWI4MDNjZmQwZDA0ZGUwOTJhZmJkODZmMmE2OTYxYThkMWViOGMwZDE5N2JhNTVlZTA4Yzk5MTgyMmE1YWE3MDJiYWUwMzM3YWJkNWNhN2ZhYTE1ZTFmMWFlMzY5OTQ2ZTliODEyMTZjMGY1ZmMyMmJiZDQ0MzNjM2RlOTNjNWNhYTI3NDE2ODNiYmQwZTFhNzhkZjI4ZGRhMTkxNzQxMDE4NzYzMzRkNDAzMzk2NTlmMDIxYWU3NjYxNjJjNmNjNTQyMWI3OWNmOWQ1YzA5MGVkNGFmMDdlYzg0NDkzMDM1YmQwYjI0MjFiNTMzNjg0Mjk1YmJlNzZhNzBmZWM1OTZlZjhjODljNWM5ZGRhM2MzM2I3NzM1ZDJkMmYyMGIyOGYxYTU0MDJlNzJkMDRiYTI5MWRkNTlmMTRhZjA4YWRmNTZlZWIwODZkNzY5YzZiZWMzNDUxODkxMzcyMzQ1ZmQ2YmQwMmRjZjk1ZTgwM2FmMDM1MzE1MGUxODJlMzIzYWFmNjgzZTAzNmQ5YTEzNWQyZTZmOThjYjRkMzI3ZTJjZTdkNTQyNDdmMzU5MmVkMDY3YjRjZTc2MjcxNzRmOTk2ZjI4MTY1YzljMTFmMDdlNWVlOWNlZTYzODUxYzZiNjhlYTIKK1NJRzogNjJkYTgxZTE2NDQwODIxYjU5M2I2ZWU2NTQwZTE1ZDFhZWE3NWQyM2UwYTFiYmZlZGM4MDhjOTU0OGY4N2U4YmJmMzY5MTVhMzlhNzQ3MTZmNjQ1Y2NhNTcxNGQxNzBhZjkwNzU3NmQ0ZjM3MDVlNTQzZDJhZGRkYzVmZjIzMDMKKworVFNUOiAyNTYKK1NLOiAgM2EwNDYzOTdmMGFmYzA3MmJjN2Y5MDdjNzRkMzhmZDFiOWFmZGYyN2UxNGEzNTM0NzY4YjBkZDJkZjNhMWMyMgorUEs6ICA5OWNkNzBlZjNiZTM0MjQ5MzM5Mzg3MmY1NGM0N2RlYWEwODEwMjE4OTJkMTFhMzI2OGYzMTQ1ZWQ0ZjNhYmU1CitNU0c6IGYwOGRkZWY0NmNjNmMzNDE3OTgyMGM5ODYxMzc1MTcyZmRkZjc3NGY4ZGMzZjdkNjRhYTQzMmRhOGU1ZmFlNjQ0YzBhOGE5ZTY5MDg1MTdkNTA1ZGViZDYxMjg2OGFjNmRhZjk1Y2Q3ZTE2OTk3NTAwMjJjY2Q0Yjg4ZGJhZTJiYmY3MzU0NmVlNGI4MzVkMzE5YTg0MmRhZThiOWVkNjgzMzIzZjMxZTVjYzU3OTE5YmM5ZGJlM2JjZmZmYjJhZGE0ODA3MjY5N2ZmNGE3ZDMxMGM5MWFkYmNhODFmYWYyNmEwZWI3YmIwYzQwNGFjOWQ4ZGZlYzYzZTljNjRlMmY0MjBjMDdkMzIzYjdjMGRjM2I3MzUwNzI4M2FlYjFjZWU1MWRiNGUxYTgzYTY5MmM3YzFlYTM5OGY2ZjMwOTQwZmFiODVlMjEzOGQ0Yjg1YWE0ZTIzMWU1NDI0ZjViMDY0ZWQwMjZmMGNjYjk5ZDFjODVhOWViMTVmNTkzNGExMTM1OWQ0MTFjZjk0YWU4ZmZhMzM2MWEyMjRmNDZiYWI4NTJkMTg0YTI0OGI0YzMxZmUzYTdlN2Y1MTM0YzA1MTAzMWE5ZjMyOGE3YmU0YTdjYmJiMWQ4ZDg2M2E0MDBmZDJkNThkYWE0NGYxYjlkOGU5ZGRmOTYxY2U2MzIyZgorU0lHOiA1MDI0Y2U2MDI1Nzk2NTY4NzA4MGM1YjFmYzdkMTMwMWMzMmFhNmZjYzgzNTQ5N2Q5Y2IyM2E3NGE2Y2EyNzI0ZjU1MzUzYzFiNzU3ODI3Y2E1NDQwYzllZjhmOGMxMDUwOTEzZTIwYWFiZWMzNWM0OTdiNTYwNDFiNWRlYjIwOQorCitUU1Q6IDI1NworU0s6ICAxMjRmNzQxNmE4MDQ1M2U0Y2YxY2Q3YjVlMDUwYTk3NjE0MTgyNThiZjdkMjdiZWI3ZjIzMjM4YzQ1NDBiZTJkCitQSzogIDBkYTM0YWIxNzM5OTAxNTBkZjczOTliNmJjZGRiYTkzYzZkYmNiZjRkMTc2OTQxY2I1MDcxZTg3MzRjNWRjOTIKK01TRzogOWRjYjk4NzNmZjA1NGRiMTFkMGE5YjE5ZGU2ODg1ZmZiYTdmMGU2ODFjZjdmYjhmNmNkOTUwYzQ4MzI4ZDFmOTE5Y2E0NjA1NGVlZWU2YzllNTc4NDNlYmRkYTdiMjRiYzM1MDNjNGQ2MTJhYmIxYTMxNGYzOWY1ODIyMWQyYjU0ZGM3NTVhY2NhNzk2OTc0MGU3ZmE4YjFhOTUyM2I4YzczNzlmZDM5NTI1M2Y0ZTZjZDA1NGVlMjRiNzU2MTNjMzU4MWQ0OWUxOTI0NmE3YjNiZTFjZWNiMzM0YmU0NGYzZDYyNmZlM2I3YjI2OWU2MjhkNDQ1ODBjMjA2MzZlYmEyNjQyZjI3NDRiOTU5ZTY1NzU3ZDBlZTYwMTg0M2YxODhlOTVkMTcyNTNmZWY1NjcwNjhhNTQwNWEzYTllNjc3ZmVhM2Q3ZDU1ZjdlYWQxOWEzZjMwYzVmOTg1NjcxYjU1ZmExMjBjYjlkMDVmNDcxYjZlMWU4ZDc3OWEyYzgwM2ExOWU2ZDBkN2NkNTA3ODg3ZWQ2NDdjMmE5NTQ4M2Y5MzM5OTFlZDQ1YWUzMDFhMmIwZTk1NGE1NzAzZDI0OGM3ODgxMGFhMGIxOTljYzJiZWJiMmYxZDcxY2M0MDQ4N2RiZDQyZWVlMGY3NDVmN2QyODU2ODViMWZiMzFiMTUKK1NJRzogYjA1NzIxMDRhYTY5ZTUyOWUzNDY1YTZmZDI4ZjQwNGE0ZWMyMDI3NmE5OTNiMTcyNWViOGM1ZjY1MGI0YTIxNmYxODcxYjI0ZTM2OGNjNDZjZDFlZTAxNzRjZGExYjVlNGFlMjIwMGFhOWZjNDQ1MjJkOTc1YTljNTE4MTQ5MDgKKworVFNUOiAyNTgKK1NLOiAgMjVkMTNiMzgzNzYwMWIwN2E5NzU2OTNlNWEzM2Q1MzM3YzM0YzExMjdmZTRjMjc0OTA2MTJhYWY3ZjY0MmU5YQorUEs6ICAzYTA3Y2Q2OGVlMjY5MmQ1MWNmYWQxYTgwZTc3NjNiMThhMDQzYzc0ZjRlMWIwMWVkYzU1YmE5YTllMDc3OTVhCitNU0c6IDExNWIzMjIwYjQ1Y2E4ZjM2YzdmZjViNTM4ODdkNDdlNjY5Yjc4ZGFjMTNiOThjYzdhYWNhNWMyZTE5ZmNlODFlYzg2MTdjYTQxMGUxMWM5YTkxMThhNjY4NDUzYjMyOWZmYjcxOGVhZWM3MzkxNzJmMGE4NDlhMDg0ODE5MmE1YmRlYTE4YWI0ZjYwZDhkMWEwZDMzODk1MmQ3N2IyY2MxM2VmZTgzYzc2ZThkZDU4ODAzYjFkOGIzYzk3MjllZjEwMmIyMDgzNWI3ZGU4NzJiZWYzMDEwZjE1YTRjYWRkZjA3Y2Y3YmRkMjIyZDg0YjE3NGJjMjE1MjdjZmZiMWI3ZmZkZTgxZTI4MWQzMGNiN2JjZTI1ZWEzZGZmYjZlYTFmYmIwNmNiNzA1NjlhOTVlZDFhMDdlOTdjYTQyZGU3MGFhMjE4MTU5ZWZkNjA4ZmE5YjA4OTZlMGI1ODUxOGEzMjJmMjUxZDEzM2U1OGM4ZmMxNDI4YWIwYTE3MGVkODQ1Yzc1ZmI0MDNmMWZmYjk3ZDJkMmE2ZDRmMjc3OTExZDMyNmMxY2FiYmI4NTE2Y2JjMTc5MDhhYjgxZmY4ZDc5YWY0NDYxMWVhMWQwNTg3OWMxZWM4MWQwNjkzNmUwZjRhMGFlZjZkNTc0OGUxODFkMzBlYzI1MjM2NTk3YTk3M2QKK1NJRzogMjBjYmYwODM5MmZlYTZhOTljZjQ0NmE5NWMxOTljYWEwYzBmOTgxM2NjMjE3YjhkMjI4ZTJlZDkwYmFiOTVlYTkyY2Q3M2FjOTU4MzQ3NjRkMzNlNDIyNDNjODBhNzYwMzQ5MWM4ZDNlNDlhYzcxNWZkOGE1YjllNDc4OWJiMDMKKworVFNUOiAyNTkKK1NLOiAgN2IzYTc2ZGVjYWVhNjBjNDFlOTViMDU4NzdhN2RhODIwNjRjMjcyNzhjOGQ3ZGY1ZjBiYjk1ZjBhZDJkMDQzNQorUEs6ICBmODBkYjVjMjg3MjFiMWM2MTFiZDg3ZWIxNDVhOThiYmYzODNiMDY4MDQ1ZGYyNDU4ZDFhNmZkYTA5OWY3ZmMyCitNU0c6IDM3NWZhZGFlZGQ5Y2FjNDliNjRlMTU3NDAyODA0NjA2OWY0YzgzNjU0YzhhNzAxMWFiZGI2NGRiMTZiNDdmYTMxMTc5ODE3MmY5MDcyMjE3YjBhNmE0M2U1ZGY2ZmZjYzExNTRiY2VjMWM2OGUxZDM1ZWMwNTg4MGQwMTJjZTc2ZTRjZWJmMzAxYmIyZWM5ODNkMDBiNGEwNTQwYzkzN2ZmMWM2ZGY5NDQxYzYxYmRiM2JlOGUwYzdjMTFhMzVkNDliNmY1NWMzODEyNjlhMGU3NjhlZmJkNDUzNDQ3ZmU0OGI3NWFjMzk2NDZjYTgyZWNhN2QxNDkzMDQ0MjM0OTE4NzFjMTBkYmNmYzU5NzNhNTdmYWI4MzcxYzMwY2JjNGU5MGJlY2MwYjY3MTUyMjI2ZWUxNzdiNGZmMzY4ZWM4NzliMzkxZWI5NWUzNmRjYmIwN2IyYzE2YmEzOTU1NDVkNDUyOWY3MjdiMWExMWVmNjVkMTIwOTc2YjdjY2M4NmFmNGJkMjA0Y2I5NDg5YzkyMWU0M2JhNWU4NTBjZmU1OTg5OWYxYzFlYzRhYTVjOTJiNmRhYzY5MTRiMTk1MmI1M2RjYjU0MGI0MDkyMzEzODE1Njg5ODdiYjIyMzZiYzQwODk1ZGYzZjE3ZWFiN2MwMjc0ZjIyNDRmOTU4NjEyZTg4ZQorU0lHOiAyY2QyNmZiM2M0Zjc0NDBhNzJhZmZlOTM1NjRmNmY2NTU5YWRiMTVjYzdhMmJhMTA4NzlmYjdkNjdlNDdkNGViZDAyZmU0ODIzNjk4YTVmYmQ0YTkwN2ZkNjkxODRjMjU1YTE3MGU1ZjE3NDdmY2U5NjgxMDJkYzIxOWI1MGQwMgorCitUU1Q6IDI2MAorU0s6ICA1ZmY4ZDQwNTI2MDhlYjAzM2E1ZTk0YjYwM2NlMzg0ZDg0NTJmNjBhMjY0OThiOTExMjU2N2YzNDEwYzE4NjY2CitQSzogIGM0OTAwZGUyNGQ5YWYyNDgyNzYzMTA5OTI2YWY3YzQ4MTM4MGZhYmNkYTk0NDBjMWE1M2VhMWNkYzI3ZTY1NjgKK01TRzogMTM4YzYwNTU3YzJlOTAwOGFmYzAzZDQ1YmVjNzFmOTYxMTQ5YTA4MzU5MjY3NTFjOGZmMzkzNWM3ZDY1MmQ4M2UxYjBiMWRhN2Q1YmJlMGI4ZTE3MWE0ZTQ5YWFlMDZmZDhhOWRlZmY3OGRjZGU0ZDI1YjFhYTg5OTk5OGEwZjk5ZTFkZjZmOTMzN2EzZWEyZjI0Yjc2YzMxN2E3MDE0ZGI0ZTUyODMxOTE3OTVhNzBkODgyMWQyMTc4NDY0OTBmOTU4NzAxZDM5ZGMyYzhjZTQ3ZDkyODkzODg3NGQ4N2IzNTU4OTg5YmM3N2FmODIwOTc5YTM1MWVlZjk1OTRhYTViOTRmMzM0MWVkZWQ0ZWEyMGIwOGMzZTdjNTYxMGQ0MzI2NzgxOGRmYWMwYTg3ZGRmNTI3ZmJjZTg1MTJiYmY4NWI2NmM5YmI1ZDYyZjBmZTg0MDQ4ZjIzYjE5NjA0YTVjOGQ4MmIxZjI1YThkYTAyNzMxZmViMmVjYWU0ODliODQ3NWY3YmQzMjZkZGYxYTA4MTg5ZTQ2YzA4Y2Y1MDUzOGMyYTM2M2UyZjRlYjJjMDFhMjA0YzdmZmJjMGI5ODFhZGMwZmQ5OTdhYWZkZjJhMjIyZWU4NGMzMDlmNmU5NWVjN2RlNGZhODVkNDc2OGQ1YzAwMzE2NTAyODIyNWUyMmUwOWUKK1NJRzogYjczN2Q0ZTViZTI3ZGViNmQ4NzcyOWM2MzZkZmY3YTQwNmMwMTNmMzEzYzM4Y2Y2ODNmZTE0Zjc1YTNiMzAwNWQ5NTM1ZDdlNTgxNWM4ZjhiMzdjNTFkNjkyNzExMWM5NzlmN2Q5ZDgxYTM0N2FhOWNjMDllZDRlNmMxOGU5MGYKKworVFNUOiAyNjEKK1NLOiAgZWVkZWZjMTc1N2UzYTdlNWVkMzk0NmRiZWRjMzk2YTM2MmY2ODNkMmM1MWIwYjlmNjA3NjVkNGJmYzUxMzRkZQorUEs6ICBhOTg3MmJjMjE5MmZjMDJiMTg5Y2VlZDQwM2FiOWYyNzBhMDMyYTgzNWZkZWJmYWYxYzlkNjkzNGVkODMwNGJjCitNU0c6IGIxOTRkYjczZjk5NGNiZGMzY2JlNjMwYmE3MmM0N2MyMjQ5YmMwNTkyYWI1NDc5NDJiMWQxYjg4MmI0NGY1YjM4NTVlNTY4YmRkZGY5MmVmMDUwMjJkODhmY2ZjMjk0ZTc2YjY0YTAwZTljNzQzNTUzNzM3NjNlNDlhNGViYzQ3MjQzZDQ4YTlhZDU4ODk5NGE1MThmODBmODYxNWMyYjMxZGE1ODdhNTNlNTI5ZDQzNWE4Njk3MzUwZGZjZGUwMmQyMGNjZTdkNWVlZWZlM2Y1YWIyYWFjNjAxMjU5Y2RhMzg1MzhhMWI4MzAxZjk4MzJlNzVhYjkwZjhhOTMyZjI2N2VhYzE4MTAwMzk2NWQ1MjY2ZjIwNjE4MGM2YzM4MGVjZTgwMzU3N2NjYjQ2MTc2YmY2MDcxNTk0ODZmMjQyNTk3NDdlMmNhNmZiMTkxMmRiN2I3OGE5NzNiMjg0NjM4N2MxMjA4MDMwZWUxZjQwMGQwYzViNWU4YmRlOTYzNWFlNTU2MzhiYTE3YzczNGRlODYzOGJiODVkZmNkNzY2MjlhN2Y5ZjQwZDZhYjk1NGQ1NWJmODU3NWZjOWM5YTU5NTA5N2UwODkzZGI1YTdiOGE2YzQ1NWVjYmQzZDIyZDcyNWUxOWRlMjk0MWY0NjdmOWViOTNkNjZhMGUyYmJkYmY5MmVkMWMKK1NJRzogZDViZWE4ZWE5YTVmZTllZDZkMmJmODM5OTMwYzBjNmNkNTAzOWU5ODhmNTUxZmRlZGI1NDM3ZTFjMWFmMGVkN2IzODk3YzAzNTcxMWMzYzUxOTI2YmU4ZDFiMzIwMjRkNWNkNTgyZjVmODM2OWFkODRkMThiMTI1MDI2NTJmMDcKKworVFNUOiAyNjIKK1NLOiAgMDlkMjJiYmFhNTk1NmNmYWNiYmY5ZmQ1NTEwOTc1MTI4Njg2YzQwYzZlYTk2Yjg5ZWY0YzBmMGM2NDliY2Q3ZgorUEs6ICBlNTU5ZWE4YWNiZGM2MWI2NzA5YTdkODNhZTE1ODQ5YTZjNzhiMjAzOTIzZGQwYTI5OTIzOWVlNDg4NjkzMGJhCitNU0c6IDFjMjZhMGYzYTFhNWIyZDdkNWIyOTdhZjhhNmE2ODlkN2M2MmEyNTI2N2UxOTdkMjNiZWNkMmYyYjgxNmM0ZGU5MmZiZGFmZmI5NDFjM2ZjOGRiN2E4NDMzNWE4NGNmYmM5MmNiM2FjODA2ZWQ1OGRmMTZiNmI4ZTExOWE0OGRmNGYyN2M3MWU5MzFhNTkzOGU3ZDAwMjczNDg4NWUxM2EyNThhMTViNmUxMTM2ZWZiYTcyZjFkMDk2YjY4OWY3NjE4ZjQ5Yzk2ODA2M2U4Zjk5MWZhMGI1NTYwMWU0MzBlZWUxMzQ5MmExYjA5NDEzZWIyMzgxMzU5MWE3YTlmMDcwY2MzOTZjYTlkMWZhY2RkNGY0Y2UzN2M0MGY3MjQ1ZjU1MDM1ZTEwZmFkNmI4NWI1ZjAxYTFkYWFjYzBkZjk0MDY5ZjdkZThmNjQ2N2Y5NmQxZmI5ODY0OGU4YTA1MjBhOGNkNzIzYzk4ZTlkYzJkZDRiMjkzNGQ4MjI4ZjBhZTFhNDE1YmQzYTdjZGEzOGQ3YTk5ODNjZTFhZjZmOGM5NzBhMmE1OTE2MzVmZTEyYjkxNzUzNmVmODE1ZWFmMWEzMTM4ZDcwY2U3MGE3OTQyNjRkN2M5ODZkOWVlMzI5MDQ0NWYxNWE5MjQ4ZjI3NjUyNzFlNWE5OTIxOTZhZTMzMWFiZDQxNjRiZgorU0lHOiBlNjUyNzVjNDMyOGE3MGFkNjI0MDhlZDdmYjE3MjhiZTg3YTczYTgxNGZlZThlYmQ5NGYyNjY1YzcxYmM2NmFiMGMxYjA3YTYwMGIzMGJjMDgxYTc0YzUzNjg1N2MyMDYxMDM4NGJlMjY4ZDlhZjNlM2VjZGRkM2ViMGMxNGMwYworCitUU1Q6IDI2MworU0s6ICA3NzgyNmVkMzUxYTNmMDkyNTRhZTU2OTI4ODVkNzc0Y2IzZjI0NDEwYTQ4MDlmZDkwZjhhMDBkYTlhZWU5OTAzCitQSzogIDNlYWM4ZjQxZWU3M2U2ZWYxMzY4MjFmNzk1N2ExYzI3ZTE1NjM4ZDBlMzkxNmU2Y2FhYzZmYjdiZWI3YmNmYjAKK01TRzogMWZmMDZjMGIzOTk5Y2VjYjE5MDBhNDdkMjY3YmVhZmJiMzVkOTNkMTRjYjJjODkyNWUzZTNmZTVkOTY3NTg2OTI1ZWU0YmFhNDE5OThlZGQwMTAzMjA1ODEwYWFkNWMwYmJkYzc3ODc0NDc2ODEwMjQ2ZDEzMDg5YTY0ZGI1NzY0MjRmYWUwYmVkOTY2NGE0MmE0OTExNDdkMWVlM2I5YzNiMWJhNDg3NWJlMTU0NjIzOTI1NDBmOTk3OGQ5YTQ2MzBiYTRjNTI1NDk5NzUxYTQ1ZWZjMjk5ZWM3ZDczYjE3ZjlhZDI3NWVlNzFhNjg3ZTcyNjkwZDczMjAyNDJkMmRjMmJkNGQ1YzVjZjBmMTdhNDY1MTg1ZGNmNjBmOGVmZmY1MzkwM2YyMGIwYzJhYjIxOTJkNDQzNjhmMmYyZmIzNjA0OGFmMDcxZjdhYTg1N2IxNGFkMWQxMTQ2MTIwNWJlYmUxN2UwMmJlMmUzY2NiNjA5MjgyMTg4NWM0ZTBkNDgxMWJlM2Y0NWIxZmVhMDg4NDUzZTAyMjQzMmY1NjI1NjJiNDNhMzU1Y2I1NjI3MGNlZGI2YzJjNDJkYmY5YmU4NTBlNzcxOTJmZGM2NWNmZDM2ODM0YmU5ODhkYmU5YTkzZTI1MThjMTM4YjA5MGZiOWRhODI3Y2IxYzkxYzhmZTUyZmU3YzU3ZjcKK1NJRzogOTc3YWRjY2RiODI5YjQwYmJkOGU1Mzg1NmE3ODNkYjM0NmEzOWRmZjYyMDQxYTI5NzJkMjkwMDlmMWM5ZmY4MWI4YWQ1NGNiOTAxZTQ5N2MxZDMwMjFiNTBiNmM2OWVlNzM1NThmZDdiZTA1ZDYyNWY1NzI3ZjlhZjJjZTg3MDIKKworVFNUOiAyNjQKK1NLOiAgOTlhOTk1MzFjM2NkNmUzZTljOTAwYTllZWIyNjI2N2U3MmYwOWQxMWI2NTFhODk3ZWJiNzliZTAxNmY2NGM2ZQorUEs6ICA5YmY5ZjhiNDhhMjcyOGUwMjYwOGZjMTk4OTlkMjE5NjU2ODM5ZDFjYzFlOWE4OTg0ZGY2NzRlYzI2NjYyZjQxCitNU0c6IDdhODljMGMxOTUyZmRjNDI5OGRjYWVhODU0ZWZjMTM0NjU2YmUxNDdlOWU4ZTgyZmM5YTQ0OTA1OWQ4MDU3MGY3NTY3NmI4MWM0YTk0Zjc2YTk2ODIwMGNkZWIwOTg4YzczZjU5YWZjNzJhZDRjMzEwM2UxOWZlNjNiN2U5NWUxNDBiNWNiMmVmYzdiOTdhNmZmYmI2YzI5OGRkYWNlM2JlNmQyZWQzZDU5OGI4YmRmMGMyZmU2Yzk3NjAyMTQyYTc2ZTk3ODUxNGMxOTZjMWI5YTg4ZWZkYzE5MjVmYzUwNjE1NWNmZjlhMmYyMWFiNjM0ZTJiOTNlOTY5MjhhNWQ4ZjdjZTRjYjczMjZkOTY4OTQ2OTI0MmJhOWM2YTAxYjc3NDk2YmFkZWY4NzU3OGY1YTE3Mjg0ZTkwMGE3MmRmMTQxYzYxOTliMGU3MWFiNWRhNDM3NTAzNzYxN2VjNjE5NmQ0ZjRlMjNhZTI5MTZhNzJkMGZjZTc5NjAyMjMwNWFjOWZiYmJiZTQ3MDViMzQwZTQyYjc4ZTFjMDJiYjEwMDE4NjBjZGNhZjcxZWQ4OTI1NWRkNTZjYzBiMzFjNTlkNDU5NmRjZWY4NGUyMjIzNGJlNTYyYmQ4MDFlOTQxMTFkODNhNzgwNjRjOTBmOWQ4MmZjZTkxZjY4YWJiMDNjNzNiNmJkOGQ3ZTAyZDQKK1NJRzogMGU4OWRhNWQ5NDljZjJiZjQwYzdlMTdjMmQwZjljZWFiYzg4YTA5MmViNGQ0OWNmYmZlYWI3YzhiZmY0MzI0NWM2N2I5ZTJlOTJmOWJjYjliMzRiM2ZjZjhiMDFmYTJlYTdhOTY0OWY4MTRjM2FhOThiM2RkMDQ1NDBjMzFkMDkKKworVFNUOiAyNjUKK1NLOiAgYWE1ODQwM2U3NjNiYWM0MDVkYjA2NWViMTFlYjZiZTNlM2I2Y2YwMGVjNGEyMjJiNTJiZmY0YjZlM2QxNTZhYworUEs6ICAxNjdmOWI5YTQ2NjVmOTNmNWQ3ZDMwMTZhY2U2ZmJkMTM0MjBiMmU1MWU3MmJkZTU5ZWVkZjI2OTkzYjY2Y2FlCitNU0c6IDNiYWEwOTk4ZmYwMmIzMmI5MGI1MWY5YTg0MGM3YjVjNTg3MGNmYjE4MTBhOWIwZjc3YjU1OTA5ZDQ3YWQzMzUxNDdhOTkxYzI5ZmJlYmZjNTkyZTkzMDcxNzVjMTk2NDEyOWEyZDVlZmM2MjE1ODA3NDUzYmNkNzI2OTY5NzgxMjIyYmNhZDFjOTlhNDk3NDhiOWVlNjY3YzRkMGM4Mjg4OWUyZjUwMDY0YzExNWRiZDhmYjQ4M2Q3MmFiMGNjYWRmNzZiZGRiMmRjNzI3ZGJjM2ZhNWM0NjI0YzI4M2Q4OTIxYzhhYTQ0MjUxMTBkY2RkNjljMDVlNWVkNTliMzU5NjI1ZWVhYWVjMWUyN2VhZmU5ZDlhNWNlNzM2YzNmOWM1MjdlYTU0NzgxOGI5YmNhNjgxMWJlNGNjMTUwNThhNmY1YjY4MzMwM2I4MGM5MGM5NGE4M2I4YjE1ODY5NzEzYTY2YjFlMGY2NTYzMzFiMjg2ZDFlZjc2OTg4MzRhYjNlMTM4NDE3YWFkNmJiM2FiM2JkOWZjNzg3NjFhNDgyZGZjNjU0ZjNmODYyOGM4ZDlmYzE2MDE4ODk4ZjE2NDFlODYyMmJkMjcyZTM4ZDQxNzA2Y2I5Y2ViZTZlZTVlMTczNTc2YmY2MWJiMTE4OGNmMmYzOWM2MjIyMGJiYTg4ZmNiNGRlNDg5OGIyNWIwNAorU0lHOiA2NGI1OThjYTViOGY5YWU3NDJlNDZlZTBkOGMxYWFmMzE0NThiNTBjMjVkMjY3YTY3N2U0NGJlNWI3NTVmMTRkNTE4MDFhMzAzOTliZmNjMzhkMTQwNzFhYTBhZTkzZGE4MjVhNTgxYWI2YzIwNzI1YTBhOTEwYjQ3MzVkZmEwYgorCitUU1Q6IDI2NgorU0s6ICAxMDQ0ZWUzNzA4YzBiMGU5MDlhOGNiMmJhMmNkMGFmOGQyOGE1ZGUwMWQ5NjJlODI2MDg3ZmIyMzJkZjdiMmQyCitQSzogIDQ2ZDI0MWVhMGM3MDJjMTg4OWQ0NDY1NTgyNDYyOWI2NzI4NGQ0ZTY0NGE0OGZhNDU0NTVkMjdhYzVmNjI1MjkKK01TRzogYjhhNDQ1NDU1ZmI2NmUxN2UzMTQzZDM1MjA0YzllYTkzNDc0ZWViZWVmOTM5NjNlZTVjMWQzNzdjYTIxN2FjZDRjYTYzZTU3NTVkYTA4ZmJmZmRiZDQzNTJiZjE2NTE5Mzg5NmM4ZDZmNzZiYjRjZDNiYzJkM2E0NzZhNGUzMjA4MjRhMTIxMGNlNzRkMDAxNGQ3NDdmMTExZWVjMzEwYzVjODllZDRkMDg1MGU4MTFmODBhOGJiMjhkY2FmNmY0MTFkZjgzZTJjMWRmZDkwYzRhZDIzNTYxNDU0ZWI1ZDc1NmI2M2I0ZWE3ZjM3ZGM1ZDQ2NmMxNmVmNzBkMTExOTBjNGY1MzE2ZmUyYWE4NTk3NDQwZTg4YmJlYmFlYjM1ZWE1ZjA0ZjA3YjAzMzkyNjQxNThlZjkwOWFkNTE2M2JmYzI0OGNkNzI0MTMzZTI3NGY4MTI2OTVmMjkwZTU3MTc2YTk2YjkzOTNkMDdiYjMxMDI5OWY1ZDJhNmI2ZGQxZGFiY2I1MWJmMjljNWFmYTdlYmIwNzAxYzZjODQ3NjdhYzEzNzc5MzA5MWZlMGVkNmU0N2Q3ODA2MjhhMzJjODRmODNlMDBlOWMxNjc0MmE1MjNlY2I2M2MyNGY0YTMzOGVkMjk5YTA2MTk0OTI0ZjQ0YzVhNWQzYzkzN2ZmOWIwOTQ1OTgyYWQyNGEyZDFjNzkKK1NJRzogN2Q2YmVkN2Y4N2QwOTBhYmUwMTNjMzFlMTIwMzkwM2JhYzljOTM0NDVkMDZjN2I1M2QzMWQxNWY5NzBkODg2NDdhN2VkMmMzYTYzMDUwYmExOWQ2ODA0M2FhZGQxOGJkODYxZGUxYWM0NzE1YjhlODI4YjJiMTZmOGE5MmIwMDEKKworVFNUOiAyNjcKK1NLOiAgOTVkZDFhNWU2NThmYTZjOGQ0MjUwN2IzZTViOGVkYjViYWVjYTYyZGViMDBmYzVkNGRjYThlMWFiNTgzNWU1OQorUEs6ICAzYTUzMjNkZDFlMDdmMzIzYmI2ZDgzZTljMmRiOTJhMjlmNjJlMmUwMDNlZTBkZWFjZDdlMmU0ZTAzMGQ4ZDI3CitNU0c6IDliN2FmZDQ4YzQ3NDYwNGMyNjM2NzUzMTU1Njg0MGMzODg2NjhiMGYzODQwMDYzZGZjOTg2OWFkNWI5MDEyNzRiOTMxMjkzZDA0ZjNjOGU4ZjdmOGVhYjgxNWE2NDFkN2MzNTEyODRlOGJiMDQzN2FjNTUxYmIyOTQzODk2NGU2YTdjN2JhNzcyMzQ0YjMzM2Y5ZWRhNWE3NzU2OGM4OTMxZGRjYWYyMWUzMmUwN2IxMGJmNDgyMGZiODU5YmNmODdiODFjNGJmZjQyNmYyNGE0ZDQ2OGYyZTlhZWRhOGYxN2Q5Mzk3MDk5NzBkYjExZGY3NjI0N2U5OGEzOWViOGIzOGY1OTQ5ZjM0OWYyYWUwNWFiNDhjMDE4NTE3YzQ4ZmEwMjA1ZGM3ZjE1NjY0NTNlMTA1ZTQ4YzUyZWI0NTVjMGM0MDgwMmY3OTdiM2VlZmIxZTJmM2IxZjg0MzE1YWVkNWIwNzExYzY0OTlhNjkxYjc0YjkxZjEyZWY3MGY3NmM0YzA1YzFhYTFhOTkzZTJmM2U1MjhhYjM0M2RkMjM2ODE2MmY0MDM2YTYxYTEzYTg4MDQ1ZGNkZWZhODVkNjg1MzIyNzViY2Y1YjhmNWYwMGVmZGVhOTk5YTk1NzgzMTc1ZDllZTk1YTkyNWQ0OGE1NDQ5MzRkOGM2YjI2MjIyNWI2ZWJlYTM1NDE1ZGQ0NGRmMWYKK1NJRzogZDAyYTc1MjNkY2JkMjk1NzZiYTgwOWI1MzEwMzc3NzRkZjQxNzM0YTQxMTc1ODEzMTE5YzZhNmE3ODhjZDliOGFkNzgwODY1Njc4NjY3Njk5YWU2NmQwMTA5MTlhOTY2YTA1MWMwODE2M2RmNjdhOTc3ZWU2ZTIyMGQwZGMzMGYKKworVFNUOiAyNjgKK1NLOiAgMWFiYzBiOWFhMDFkYzU3Y2E1M2VmZTczODA5NjJiMWE4OGQ1MGE5NjRmNWNkOTg2NDA5ODJjNzQzOTNmMjkyNgorUEs6ICA4ZDRmZDE0Mzk0ZDdjMTQwNTcwMDMwNjk4M2ZiZjc2ZWE5ZjE3MWIxNWE2YjU2NjEyYTFmZWIxY2JkYWU1ZGQ1CitNU0c6IGRhMmRkOTQwZDVlMWRiNmU4MGJmN2UyYjc4MmU3ZTc0NWNkNGZkMjUyZTk4MTUxNzk3NTg4N2RkMDVhYzc3ZWQ4MzdkMDgyOTYxNTc1ZWZlZGYzMDFmZGYyNGI3MDcxOGI5OTFiOGQ5MmJkZDJlNmJlZTE3YzhhYTRiYzY5NGE3MjdiY2ZjNzhmZDg1MTk1YzQyY2FmODgzYTJjMzhkMTYxY2FkZDc5Y2ZkYTlhMzkxMTBlMTI2NGQzMGJkNGM1YzRhNTg3Njc3N2YyMzNiMDcxYjFiMGI0MDg5MzVmMDQ2ODk1NGNjNzQ0YWY4MDYzYjAwNGVkZTU2Y2Q5ODFjNGRkNTYwOGFiZmZlYWVjOWU1OGYzZmFmYWE2NzE0Njc4MDRiN2ZhMjU1OGY0Zjk1MTc0MjAxZjE4M2Q4MGE1OTE0MDY1ZmVkNTMxMTViNDFlYmMzMzhmNzhkZjA1MDA1M2I4YTRlNzVlYTdjNmZkYzM1NGRhZDI3YmZkOGEyZTY2ZmNkN2FlMmY1ODdkMjRiZTBkNGEzM2RhMzBhMjIwZTUxYmMwNWZhNGU0MTJiOTU5ZmQ5NWQ4OWVhNmVjMDE2MjUxNmMwOTZhOTQzM2E5ZTdjZjU5OWM5MjhiZDUzMDVjMjE3M2JmNzQ5M2VkMGMxYzYwM2NkMDNmMDgyY2NlNDQyMzdhNzlmZmQ4YmU5YTY3MmMyZWJhYQorU0lHOiBmNzM4YWYyZDNlMjkwYjNkMjNkOWFmZjc0MTRiZmM1ZmZhNDcyMzVkYzA1MzY4N2E4YmE1Yzg1NDFiODUxMWY3ODE1NjZjZGFhMTMwZTA2NzdkYjU1ZmE4YmU5ZDgxYTA5MmNiNTg5MjNhODYyODQ5NGQyZjYyZDk1YzE2NzEwMAorCitUU1Q6IDI2OQorU0s6ICBjYmZmY2UyYzliZDNlMjNlNDA2ZTVmNjZlNjMyZGNmYTcyNjY1NGQyOWE5NTVjZWM5ODMxNzMyMzVmYTM1OWQwCitQSzogIDQ5NjUzZWRkNjRhNTVmN2NkNDBlYWYzZjhlNzJlYjk2ZGJjZGVlMzk4ZjM0ODE3ZjJjOTU4Njc5NDk3MTBiMTQKK01TRzogMWZmZGU2ODI2ZTRmMGMyNGE3OTYxZjE5MWU3NGNjMGJiYzkyOGUzZjFhZWMzZWZhYjMyNzY1YzI1MDFjYmMxNjIwZTdlZTZmNjFmY2NmYjAwY2ZjYTlmYjk4MTQzYjUyOWJjYzhjM2QwZmRmODllZTdjMzQyZjEwMTgxNWZhYmY3ZGVhZjlmMzAyYTI4OGZlMTc1ODI2ZDU5MGQ5OWVlNmZkOTJkYTc0Zjk1OTZiNzgzYzBlN2Q0N2Q3MTFhMzJmMzllYTQxNjVlNTIxMjQzMTQ0MWI0OThjNmI3MGRiM2IwOWQxZjRlNGExNGE2YmFlMzlkYTUwODhiYjg1YjMyODVjZTlkZjJmOTA2ODFhZjJjNzRkZWNlNDM5YWViOTFlMWMxYjA3MTJlZGRiZWU4ZDcyNTY5ODI4ZjM3Y2I3MjBjNTA5ZDAyYWVjNDc2MDcwNDg0ZTliMTZlYzcxNzk5NDdhYzk2Y2FmMGUxYmU4YjZiNzRmMzcyZDcyMzVmZTZlMzk5OWRmNzMzYmNjZDQ4MmRmZTJlNjMxZjU2YjU4MjY2N2RjZTVlMzEyMTc2M2FkZmFjZjNiMThjZjIwOTVmNzM5NGRlZTQ5MjdmYzJiZWE2YjU4MjRkOTBjZDU5ZTg1NGVjNTg3MmI0NTUxYjAyZWZhYmE1YWQ1NGE5YjdhOGY2ZGU1ZDdjZGE1ODI1YjMyNWIwNzZkZWQKK1NJRzogZTdjZWQ0ZmEyYTdkZmY3M2YxMDY4YmJhZDBlYzlhMTEwOTA0M2M5N2E2MmVmZmExNDg4NzZmMDk2OWVkNGRjNjA4ZTI4YmNlNzk3YWYzYjgyNTMyYzk0ZGVjNGQ2ODExYjdmNTYzNjc5MTI5ZmFjZjE3YmI3M2Q2OTM3NWViMDUKKworVFNUOiAyNzAKK1NLOiAgOWY5MTIzMTQ5NzQ4NGNhYjM5YjllMjBmODYxMTgxZDM5NzkwODU3N2JiYjI5NjgyNDJkMDcxYmNhNDgxM2ZmYgorUEs6ICA4ODI0YmM2Y2Q2YTZmMTVhNWY0MTY2OGYyYjNiYWU4ZmM0OTY3MzgzMDc4ZDA4YjUxZDZkMWIyYjkzYTEwNzFmCitNU0c6IDIxZDRmYmM5ODE2M2MzZmI2ZTA5Zjc3NWMyYWI3YjE4YjE4NzkyMzQwYmFmZWRhY2I0OTYwNTYyMmUzYzA4YWEzYjJiOGQwZTA5MDJmMzYxYWExYzBmNjUyZTI3MzJiMTBhMGM1YzZhMDUwOTg5OTZiNTg4MjY3Y2M4OTUxYTc4YjVkNDMxZTcyMjJiYmI1MDhlZWVmMWI1ZThiOGQwMWQzOTkxZTE4ZGRkYzZjYThkMjIyZWYxNzdjZTYyOTM4ZDE4MTBlZWNmMDZmNDczOGIyOGY0NDA5NDZjY2FkMmExMmUzOWQzODYxMWJlZDNhMzlmOTM0MTlhMTc5ZWMyYjFiNTJkNWZlNWM4MGMyM2I4NGQ4ODAzNzU1ZjUxNDYwOTJjYzE5OWI0YmRjZWE1YmNmMjAzN2JkNTNmZjYzNDY2OTQxNTVmMDI3ZDhjZTJiYWZmZTMwYTU2NjY1OTZjMDA3ODNhYWVhZGU5Yzc3ZmM4NjM3OTQyZWNlMDE3ZDY0ODRjMjg5OWIxOTE4ZDNhNDgwYmQ1MTU3Njc4ZDQ3NzJkMjcxZjliOTk3NjhlZTFiY2M0NmIyNDg5YWU4N2NkMDMwZjQ3ZDEzMzNjNzY3MmNiOTAyY2I0ZjVmZTc0NmU4NTNkZTU3OTQwYmEyMjY0ZDNlNjI5NjQ0ZDY1M2E1YjdhZjc4Y2U2NGE5OTNmMzYyNTBmOGNiN2NiNDUKK1NJRzogMGExYzcwNmRkOGExMzA3N2FiMTgzODZjNjVmYTk3Y2Y5ZGZjNDM1NDJkMTg0NmVjYmRkZWI3YjNjOTNmM2M2NmYzY2NkMDQ0N2FhY2RkNGRhZDhmYmY3MzZjNGZmOWRiZGI2MmJmYzE0ZDg4ODNlMzg1YmNlOWJhYzU2YTM1MGMKKworVFNUOiAyNzEKK1NLOiAgMWUyYmQ1NDg3YzVmNWNlZDQ2MWY2MDRkY2NiNGU3OGViOTE2MDhmMGI4MjFmNWFmYzRlM2U1MzRmNzk2MDM5MgorUEs6ICBlZjgyNTQ3NWNmMjA1MWEyMDE3YWU1MzJmMDc3ZDk2Nzc0MzQ3ZDI3NjdlYTdiNDVmOWMxYjg2MGFiOTkzNTA2CitNU0c6IDFkYmJiYjEzY2RhZDg4ODU0YjgwOWNlZGVkMjczMzQzZDMwNmE4ZGVhYmYzZmYwMmM5Y2VjNmYwMDJiOGU5ZTEwZWY1ZDFiMGY1NzExZjMzMjY3YWE5MWMxNzFiNjFlOTYwZjc0MDQ1N2I4MWQ3NTFhNDczZjQ0Zjc1MGEwODBjYWI4MGFmN2NjY2E3ZGZmY2ZhYzllZTRjMzlkYzg1Y2JkZjUxMjU5Y2NkMzQ3MGQ5YmFkM2FkMzBmNGVlNWRiZDRmYWM2YmQ1YzZjNGRmNzMxMWE0NzAwNDQ2OTVhN2UxYTdlMTg1NzIyMDc1ODhhZmE1N2VlYmNkNGQ1NzViNmQ0MjQ0NTdlZTkyNDY1Y2UxODYzZTNjNjc3Y2Y4NzVmZGI5OGQ0MDc4ZWJlNzE0NDI2MDgwNzA1MjU3NzE0NGNiOGUwMzU5YWE0MmFkMTU1ZDc5ZGFlM2RlYjk5YzQ2MzJjMTkxYzc5OWNiZmU1ODdkOTU0Nzg3MDY4ZDY2M2JkZmMwZmFiMTMzNGYxODc2YmY0OThjNGRiNWM1M2RiN2IwMjA0ZWQ1YTUyMWM2MmYwOWVhY2E4ZDAxODlmM2IzOTQxNDNmMjljNDIxY2I1YzhkMDdiZDc1MWJhZjRjYmUzYmY0YmUxNzAxZGY0YjIyMDdkZmIyOTA0ZDg0ZjRkYmRhNTFjYmE1NzZkNWE1YmIxNmVmZTY5OGVkZDYwOAorU0lHOiA0ZDMzYzk2YTJlM2E1ZGI3MzkxYWRmNjVjMWNjMzU2NWZlNzZlZWFmZDBiNWM3YWJiMGI0OTJhMGI1MWUxZmEzMzYzOTk0NmEyNDNiMmRkZWYzNTc1NTIyOThjZTBhYTk1ZWFjNmZiZmU2NjA5ODgyNzE4NzdlYjJhN2RhMTgwNgorCitUU1Q6IDI3MgorU0s6ICBmNzhkYjE0ZDZkMWE2NDNkZDc3MzViYWYyNjM1MzIxMjQ0ZTdlYzhjYTcyYzVjMzhjOThjODA5ZGI5Y2I1YTU1CitQSzogIDU0MTRmNzVmNTJmMzg2NGFmYjBjNzljMmM1YzFkMDZiNGJjZTQwMGZiZGRmMTdmZTljZmIyYThiYWM0N2EwZGQKK01TRzogMDVjYWYxYjhlZGMzYjE3M2ZiYzFlZDI5Yjk1ZTJiZjA2ZDgxNGJhMjQwN2Q0YjMxYzcyOGQwNGVjMjczZDI1Mzk0NDIzYWM3ZDRmZmYyY2EzNmVlOTAyNzMwOTNjNzU2ZTJiZDEzYzk2ZDRhM2RjN2Y1YmUxNzU5ZmNkMzI4ZWI2NmM1ODgyYjU4ZmE0NTg4ZTViMmEzNzEzYTQxNTRhMjM0MGQwYjA2YWQwMTk2MDFiMGUwMjhlNDk3Zjg5ODI1NmIwMjhhZjk1Y2Q4MTY4ZGY1ZTU4YTU3Y2QxZWJmYzBhMGM5MWNlZDYxZGJiNDgwYWNhN2RmOGRjYTkxZWIxNmU5ODAwN2NkMmNkMWEyMDQ1YjBlNDQ3N2QxMmQ1YTQwNzJmMzY1NDI2NTY3YzlkNjE1NzdmMzQ4NWM4ZjQ2NjA1ZTdmNDc1ZWYwNGEzOTQ4ZjYwZGJhOGM1NTA4ZDE0YmZkZGI5YjExZGQwNDRlZjJkODRjMTZiOWE5MDM4ZDhlNzhlZGE0M2I5MTI5N2RmMzVmNDM2MWEzODNiNDFkNDk2NzdhNjg3ZDViMzQ0YWQxYWIwZmM3MzAxN2IzYmViZjMyMzA2ZmIzZmQ3YjNkNTA3MWYzYWI1ZjZlNDlhYTE1NTQwY2FkNjUwM2JlYTc3ODRjZjk0MjE4MDFjZTEzODU4Mzk4OTMzNjJhOTdmYWUxMjEzMDBkNjc4M2FmMGYKK1NJRzogZDdjYmQ0MTgxZjY3NzEyMDA3YjdmMGUxODQ1MmUwYTAyNDQ2NGQ5ZGM5YjVmZjljZjY2OWQxYjkxMTY5ZDc1NzMyNjJmODMzMzZiOTdjODYxYmZhYjNmY2Y2NjkyMjNjZThjYWYzMTlmMjFkMjNmMWZhMzMxYTJkODliNmNhMGIKKworVFNUOiAyNzMKK1NLOiAgN2RmYTMyOGU5MGExYjg0OWMyMTllM2RhODMyZGY5ZWQ3NzQ0ODIzNGYwZDg5ZWE1ZDE3YTNkNjRlNzg4M2RhZgorUEs6ICBlMzBjZTZmZDVmNTgwMDM4OWE3MGNkMTE3MzY0ZjU5OTQ1YWZiMTgwZjIyOTkyNzM2MGIwNmI0ODM1ZjhkYzkxCitNU0c6IGU1ZTQ5NWQ2NjNmNDcyMzY3MTQ1MzI2ODdhMjQzMDhmOTQyY2E5YzMzZTA4OGY3ZjEwNmE1YTcyMzUxOGNhY2JiZWY0YTY4YzkzOWE2OTUwYjJkYzI1ODlmODJkMzU0ZTU3NTI3MmQ0MmIxMzgzZDMxNWFiOGEyMGFhMGNkYzlkNGRmNjc4YWIzYjI2NjEyYjVkY2E2NmU3MWY5ZjNmYTdkOWU3MzFkYzQ4MWUyYmM3MTI3Y2VhM2I2MjAzY2E2Y2Q4MTYyZTkwODg2YTczZGM0NmM4M2RkZWZjNGI5ZTJkNTNkMjlkZDM4N2M2MjRlMDhiZDhkNTNiZTkyOGE0MGE5YWE4YWU4YjFjOGQwZmI2YTdiZDZkY2U1ZjYyMzE1YjdhMjE4MWY2MjdmMjU2YmJlN2UyYTk1YmY0NjRlNjEzMjIwNGMxNzQyMDk2Mjk4NDAyMzViMmMzOTkxMzMwMWE0YjQwMzI1ZDExOGQzODRiYzdhYzAyOGNkNGYxMjcwMmUxNjExOTFiMTQ5ZTQyMDkwNThhNTUxMjJiYmI4YjIyYjI0NjgzYmE0ZjhlMmU2Y2NmYzA4ZGM4YzhiMWJjZmI2ZDYwYmQ4ZjA2MjE5NjkzM2RmMzE5YWIxNjkwNmQwODU3MzBlYmExNzIwZDRiMDJjNjdkYWYzOGNjZTZhYmEzOGUyNWQ2OGVmOTViMmY1MjE5MTNhMWQ3N2Q1ZWI2NTAKK1NJRzogMWM2MWQ1M2I4NzJmOGNkZTU5ODYwOTY4MmM3OWY2YzVkZjAwN2M1MTNhNzFjZmIzYTA2ZGNiODJkODVjNGIwMGNjYzQwYjAwZTU5ZjU5NTM5MzA4OGI0Y2QwNDMyODU1YzY3YTIwN2RhNzFmODdlNzJjNDA5YjNlNTAyNzk1MDcKKworVFNUOiAyNzQKK1NLOiAgNmNlMTNkM2MyZWM3MWZlZDgzMTMxYTY5ZDVkMDMwMzE0YWI0OWU2NTY1ZWY2ODE2M2ZmZjA5YWM1ZDliNDdlNworUEs6ICA5YzdiMTExOGZhYjkxZTBlN2IxOTJhMjNkOTVmYjg3N2NiNzkzNmNjNmM4YTMzMDU5MmY0OGU2Nzg0ZWRjMjkyCitNU0c6IDEwYmJjMzExZWIyYTc2NWUwMTY3ZmYzNzYxOGZmNzBlMTNmMDJkN2IwNjE3YWU0YWMwNmJlZmJiZTE0OWM5NzJhOTk0ZjY4MGNhNGRjOWE5MmVjN2VmYTUzOTk3ZmFkMzU2YjlmZjRlYmRlZTYyOTU0MWQxZjRkZWE2MmVkMGQyNDk0ZjljY2ZkZjA3YTkzMTA0OTFmNjFjNGIzZTI3MDBiNGEzYzY2OGQ2NzgzMjlhMzhjMmVmZjlkOGNiYTQzMWZiOTU5ZTdmNzY1NWJkMGZiZDc3ZDUzYmJiYzJlYjhkYzUxZGQ3MThlZDk4NzI4YTE4MTY4NmJlMTIyYjg0NGQzZGEzMzFlMzI5ZDM5NTliNTkyM2Y3NzM0MzI1YTAyMTAyNmUyNzU0ZTE3YTE1MTA4YmU4MDE0NjVhZDk1OGRiY2YyMWRmODkwY2ZlNWQ1Yjg4M2NhNDNjNjFjZWRjY2JkYjU4Yjg0OWVhNzUzNzRmMWU5MThlODAzZTU3N2E1ZGM3YTFjMTc5MzZlY2NmY2QzNDgxYmQyYjFlYjA3NWI4MzIzN2NhNmYzYzA3YzE5ZTlhZjk3MzEyNjdiZTgyZDQ4OThlZWU5NmViYzkwMGQ0OGIwNTlkNTFiMGRkNDE1YjFjODkwNjYwYTg4ZDI1ZjVjNWYzNWQ4ZTQ1ZTUyM2UwY2UzMzM2OTIzYWI0MzY3MGUzNWM1MDU3ZDU2Yzc1ODg3NgorU0lHOiA2MDhiMmJmNmY2ZGEwNWMyYWM1YmJmZDc5NWEyYWMzMmM3OWM3NDE1M2Y5NDMxZGVhNTk3NjhmZjRjMjI1ZTNiNjkzYjY0NWE1MDY3NjZiODYwODUwZWU5N2VhNDMwMzJiMDViNjllNTY3NjdlOGViOWQxOTE4ZGY5YWZiYTgwNQorCitUU1Q6IDI3NQorU0s6ICBkNDVlZTY5YTVmMWE3Y2ZkZDAzNDNmODc3MGQxYzZiYzAyNmYwNjdhNzBkYmU4MzlhODZmMmFhMDY4YzMzZjgxCitQSzogIGZjOGQ5ZmIwZTRmMzQ3OTMwOTA3NTVlMDMyODA5NmUwMWUyODFlYTM1MWI4ZDk1Y2Q5MTE2ZTEzMWE1Y2E1NGUKK01TRzogZWI1ZWQ4YWI3OWNiZmU2MWMyNTk4MWI5ZDFkNmI3MGYxMGI2MDE5NGI0MTYxZmUxN2QxMWFmZjE3Njc5OTRhYTA4MTNlOWVjZTJmNGM1ZDUzMWI5OWU4YWRmMTg4OGMzMGE2Mzg5M2ViNDUxYWFmNTVhY2Q1YTUyYWQ4YzQwMWZhYTg4ZDZlYWNmM2U0OTQ3MDU2NjExNGZkMGM2YTI3NGU5NTQ0ODQ2YjBhZTliZmExMjRkNzk1MWViMjY3MTVlMTkyNTNmZjdlZGM4YTcwOTY1Nzc2ZjIzY2U0NjAzMWUwMzRhMjAwNzIzYmEzZDExZTExZDM1M2Q3ZTdjZDg0YWVkZTI2N2ZmNjRiZWQ0MThjYjlmMjhjNjFjZDBmNjNiNmNlMmVjYWUxNGIyMGJjNmJkYWVkOGM0MjhiYWQxOGJlNGI3ZDY2MzM4MzY0YWNkODA0MmE4MjU2ZjI1OGE2OTk2OWI4ZDNjYTJlYWIzYWVhMzcwNmU1ZjIxYzNiMWVmY2MyNTRhODI0YmI0ZTdlYTdhYmE4ODI3YzhlYjgyNzg2YzY2NWFhOTczODIxOTMxZmY5OTBhNjNmZDM0YTc0YTZkOGMyMmE4ODJiMGI5MzUxNTJjY2IzNmZjYzc2ZjRlY2E2NWQ2N2M4NjgwOTQyZjc1ZGZhZDA3MzQzOWMwOTE2MDY1ZTgzODc3ZjdiYTIwOTMwM2YzMzU0OGQ5ZTQwZDRhNmIKK1NJRzogMTU2YzUxYzVmOTE1ZDg5YjhkMTQwMDM1MGY4ZjIxN2E1YzAyZTI2MjllZGU5ZjRhMzBiNmU3MWQxZWE3YTk1M2NjNmRiMzFiYTVjNzc4YzI2OTkyMGI2NDlmYjQyMjFjNmQzOGNmMmNlYTJhN2RlM2FkNDIzZTA0ZmFhYTA2MDcKKworVFNUOiAyNzYKK1NLOiAgOGE3NmVhYWIzYTIxZWM1YTk3NWM4YjllMTk3YTk4OWU4ZTAzMDg5OWViNDVkNzg5NjhkMGZiNjk3YjkyZTQ2ZAorUEs6ICAyZDljODEzZDJkODFlMjczMGIwZDE3ZDg1MTJiYjhiNWQzM2Y0MzZjYWJhYTEzZTE0MWNhMWNiNzg1MDE0MzQ0CitNU0c6IGM2Yzc4ZjJlMjA4MDQ2MWFlZDlmMTJiNGY3N2M5ODliMTk3MTY3ODBmYWI2MGU2ZWNiOTc5M2I0YmM3ZWQ2OWU1ZjcwZmE2YmRiYTE2ZTliZDMxOTQ5NjllZWE2NjY1YWJmZDYzMGRlZWVmYTNkNzE3YjZkMjU0ZGQyNGJjOTdkZGUyMWYwZjI5ZjllZDM0YjhiZDdhMDEzMzgwZjRmODJjOTg0ZmRiZDk1YWY5ODA1Yjc0NGJjZDk1MmM1YTcxZmJiNTdkMTFmNDExYzE4Y2MzMGJjMzU5NGY3YWQ4MjI4Y2I2MDk5Mzk0YTFiNmIwYTgxODU4MWJkZjkzY2NlNThmM2E0YTIzZTU1ZGIzZTY5Y2E5ZDYwY2ZiM2E5MDdmYjY4MzI5ZTJmZmI2YzY1ZjFlODI4ZDI4MTI3MTA5YzllOWZiNzAxNjBmMmVmODJhMmVlOWY5YmQxNzBjNTFlMTNmZDNmYzE4NjZiMjJjNzlmZTZkNTEwMTIxNzk3OWRiZTI3MjRkY2FkOGE5YmM2OWFjYzQyYzExMmRjNjk3YmQyNzFlZWE1NTBlOWU1MDQwNmJmZDI4MjQ1YjgzYjhmMDEyZDM0ZGI2ZGJkZDU1YWU2ZTU3NTc0NWMxNTNkNmU3NTM0OTAxMDI3ZWFkYzJmY2MzM2E1Mjg3ZGRiY2E2ZDNhZWFiODk3MjI5NGRjNmM3MTJiOTk0MjU0NzI3NzM0MGU3YWQxOWUKK1NJRzogZmNlZWNjYTRiMDE0ZmVjZDkwYjkyMWIwZmEzYjE1YWVhYTRlNjJjYWExZmIyMjcyOWM3MDI2OTIzMmMzM2NlZjBkMGFlZWE2NjQzMmMxMjhhZmI5YTM2NDZiYzdmMDNhMTI3NzRkYTg3NTgzOThjMmEwZGNjZTBiYmJmNjc0MGEKKworVFNUOiAyNzcKK1NLOiAgMThhOGY5MzY0OGNkY2Y0NzEzMzYzMGFmMWUxMWMwY2VlYTNkZTA3MzI3MzE0Yzk2NTgwZGY3NzU1OTdkN2E5YworUEs6ICAyOTEyZjQxYWI0Yzg3ZTM5MzdhMDMzMzE4MDJjYmE4NzcxNmI0ZWVhMTRiOWZiYTZmNTQ2ZDBhYzJjMDk3M2RmCitNU0c6IDU5MjA5M2FjN2NkNjcxZDYwNzBiMDAyN2VkYWMxZmIwMTVjYzIwNWQ3OGJiNjAzZjM3OGViOWY4YWEzODhjYTgzMGRiM2NiMjM0MjBjN2U4NTJkYjBiNTUyNDFlYjg4YTAyY2M2MjdhYTk0MTQzYmU0MzlhYWI0YmYyNjM0NzU3NDcwNDA2ZTg0MmYyMGViMTBmMDcwMGUzYzJkYTM2NGY1ODhhODAwMGYyMzg1MGMxMmNlOTc2ZjMyNmQyZGYxYmFjMTNlOTUwMjBiNDEyYjE3NWJmNzRiZDdlYmJhY2YzYWU1NWMwZGFlYmI1YzAxMGJmODA0ZmVlZTFkN2Q0OWZhZTA1MGJlYTU1OTk2ZjUzY2ZlMWYxNWEwY2YyMDcyN2RiNGVlMzExYzI2MGJhZDk2ODJkN2I5NjVlMjdhOTQ5MWY0NzFkNGE0NzNhZmY2NDZjN2Q0MjRkNWEwYmRjYmI4YTAyMzNmNGIzMDYwZGQwNGM5OGVjOThkZmQwNWVjNzI0Nzg4NGUyZDhlMTUyZDRhZTUyYjNkNTg2NWQ5ZWZkNjcwNmE2MGUwODhlMWU3YzlmNjI0NTEwYWJjN2EyMDQ1YTJjN2E3NTg4ZTI1MzVlNzMxOTFkZDVjZjA1NDIxNTYzZjU1NmExM2U4MjM2NjcwMzQzY2Q1YmE0ZDQ2NmUyNDVjNGVlM2I1YTQxZTcwYzlhMGY1ZTZlYTJjNTU5ZWJlNjFiYTgxZQorU0lHOiAzYjc3Mzk0Y2Q2OWY4YjQ1ZDAwY2ZlM2E3OWE3OTAwNjI4YTU2NTE4YjM3OWVkOGExMTU4MWZjM2EzNzZlNWQ2NjgwN2RmMTFlNzA5MDRmNjk2Yzc0MWQyMWQxMzkzMTBmYTFiODlhOTNiZGM0ZDJjMzk5Nzk5MWY1MjIwZWUwMAorCitUU1Q6IDI3OAorU0s6ICAyMDZjZDJiODExNGFhZTE4OGQ4MTg2MmNjZWM0Y2I5MmM0ZWY1ZmM3OGMyNDQzNWExOWY5ZWQ5YjhhMjJmNDdlCitQSzogIDk3YTY3YWMyODExZjUyOTQ1NmRmNTMyNzM3ZDc2YmVkN2UzODdkYTgzYmQ1NTQ1OTM3MmZkZmIyN2ZmYWNmZjMKK01TRzogNDgwYzQ4MDBmNjhjNzlmNWRmYzBjMzY2NmMwYWM0MjliMzBmZTBjNWZlODQ4NzUwZGIyMTcxMzgwYjgwYzhlOWZlYzBhMDU0YjE2ZDA4Njc0Y2VmZTJmNjRlYzI4YmI2YjA1OTZiMzUyMzU1NzVmMTg5YmVlMjU5YWNhNzY2YzIyMmFjMGE0NmNmMmFmNzU3NzRkYTRlMzRhMGI1NGZjMmFjNDllYzhiZWRmNDg4N2NkOWI3YmU0ZmRiN2Y2ODY5MDJkZGZhYjA0NjI3ZTI2ZWEyZGMzZDk3ZDYyYTRiMTU0NjE4MDIxOGVkOGZhMTEzMzM0ODE5YjUyNzVjYzU0YWZkZWU0NDMwOTAwODU5NjUwNzk3MTY3NWU2ZDhiOGE4ZWRlYzQ3MThmMmQ0YmQ3MzUyMTNjYmJkMTg3OTFmYWE4MDU0MTc0OTA3YTdhYzE3ZDcxNDNhNDc1N2U0OTNiZWVlYzQ4NDlkMGI4MzZmMThiYjJiM2M5MDE2ZjI1YWY0N2ZiOTYxOTkyNTE3MjA1NDlmMTVkMTQ5NTAzZDQxMDk1ZTI1ZjI2MjA5ZGFhYzM5MTU0NDg1YzNkZWQ3Y2IxYThjM2U4M2E1MmY1YTA2ZWMwOWNmODNkZjAwNzI2Yjc5NjhmNjRjMGNiYWUyOTk1MTJmYjQzODU2MGYwNGIzYjY0NDM0NmY5MzhhYzhlOTA0ODY2MTRjZDg0NGI1NGVhZTA3OGJmNjc4YjMKK1NJRzogNzNhNDBkOWRhMDhmYjk4ZWEyNWI2N2U3MjE1NTdhMWE1MTIyNTI5NGQzMTZiNTMxNDlhZjg5NWZhNGQ2M2NiNGEzZjU2ZjY4ODU2NmVmNmRhNDJmZDI5NDFkZmZhMDZkNDk3YWE5MDIxNjVkNTAyMTNhNjIxNDExNjI5OWE5MGMKKworVFNUOiAyNzkKK1NLOiAgNTliMTQ0YTcwOGFiZWM5NzI3MjlhMDRhNmMxM2YwZWEwMjBiNGVkNGE0ODI5ODAyM2E1Njg5NThjMjEyMTVlYworUEs6ICBjNGY0NzIwMDkyZWQ2MTc5YTA4MmFlNGQ2MTQ1ZGYzNzcxNzg2ZWZjYTliZDliYjc5YzlmNjY2N2QyY2I1NmIzCitNU0c6IDM4NTdiZDI2MGI4YWFkOWQwNzNmMDY3NjVkMzdmZTg5M2EzZjUzZTIzZGU4NjZkZGFjMzM0OTVhMzlhZDMzZWU5ZTlkNWMyMjUwMmJjMWM0YjU0NzBkMGUzZjNhNTg1MjIzZmU0Y2I5M2NjNGFkMmI1YmE2ZDc4ODI2YTUzZmMwMjUzZGM1ODBhMjAxOGNjOWZmMWNmZWRiZDNhYzBiNTMyOTJkZWVmYmMxNGU1ODlhY2Y0OTZjYjVmNzY3MDEzMGZkYmI2Y2YzOGQyMDg5NTNjMDE1YTA0NzQ2NzViNzI0YmQxMDlmN2NiODljMzMwMTY3NTFmZTdhYTc4NWQwOTlkMDlhYjIwZGQ1MjU4Y2Q3NjRhYzhkYWYzNDNjZTQ3OTBlYWQwODYzYWY0MzEyMWFhNTI3YTM3YTExNjI4ZjQ3ODY5NjY4ZjhlYWMwMGQ4MGI2YmY5OTA2NjYzZDdhMjg5OWMxY2I2NzhjZDdiM2ViM2JjODAyMjZiOGIxM2I2ZTQ2ODc3ZjM4ZjA3YzNkOWM4NmQzMzY4YmFhYzRhNmY2YjkzY2NlYmNlYzk4MTE0NzRiNmE2YTRkYTVjM2E1OTY2NTcxZWVkMDVlZGNjMGUzZmU3Y2QxNTkxNWM5MWY0NGVlZThjMTQ5YWU0NTFmMzc1NTE4YTc5ZmI2MDBhOTcxYTM5Yjk0MzNkZmExOWY5MTkzMWIxOTMyMjc1NzQ3YzI2MmVlZGNiZDI3ZjEKK1NJRzogMWE4MDg1MGZjYmQ2ZTY0M2M2YmE4ZWI2ODRkYmVmN2RmMDE1MTU5MjI4ZGFlZGNmMDYwNDcwOTE4NjA1NGRiMTg1YWE3YmFhY2IwOWQ2Y2FhZDAxNjM4ZWZmOGU0Njg3MzVhNjAxMjRkZTBjNTM3NmU5NDM0MGU1NDFhOTgwMDcKKworVFNUOiAyODAKK1NLOiAgOGQxNjIxZWVhYjgzMjcwZGU4NTczMzVjNjY1YmJmNTcyNmUzNzIyMjI1ZmQwMTZlMjNiZjkwYWI0N2FlZWMzZAorUEs6ICBiZWNkYmMwMjRkYWU2YTk0ZWQ0ZTI5YzgwZjJhZmY3OTZhZWQ4ZmViMmMxYjM3OTBhOGM3MmQ3YjA0OGEyYzYxCitNU0c6IDk3ZmFjZGRjODJjY2NjY2Y3ODhjMzFiMzMwNWU5M2ViYTk1NmY4OTYxM2U2ZTUzNTQyYjA0MzI2N2ZlZTU0NGMyYjBhOGFlODg4NmEzMWI5ZDMyMWE2M2MyNzYyM2JhZWZlYTg0MGIyYThhZjViMjMzMDE5M2ZmYjViYWY4NzNjMzM1NTI4YWZlYWUyMTYwMTYzYzg1MWM1YTJlNTgxNTRhMWIwNTY5YzJkMTM2NmMwNzEwNDM3NjIzYjBlMDhjNjg2ZTU0ZmMyNzllZDRjNDVmM2U4NTY4NjgzNzVmNzgyMjRjNzc3YjEzZDc1ZGUxMGQ3OTE3MzU1MjQyNWQxNWE1NjE5MDQxNTVmMjExN2IyZjE0NzEzZWIwYjA0NjQ4YTNiZGViMzMwMjE2N2QxOTczZTc4OGEwNmNiMDBkNDhjY2IyNjlmYTcxYWY4YmE2OGVhZTU1ZGJiZmQ5NTk0ZDVjMmI0ZGMxM2FlMDMyMTcxODU2MWFjZGY2N2RjOGNmY2MyNWJjNDZiYjY2ZTA5NmExOTQxZDkzMzUyMDdkM2Y3ZDExZTg5MDQ5MDRmYWJlM2E1MGEzODgzZTcwNzgwNDdkZjI1MmYzOGI2N2NkMjhhNmFjNDVjN2Q3YTFkMmExZGU4ZDQ1NzQ3Y2YwOTMwMWUwMWNkYWZkMGNkOTlhNmU5MWI3MDRkNTA5ZmNlNjkyZmJkZWYyZjcxYTVjZTBiMzViYzE1YzY1Zjg3NjgyNAorU0lHOiBlMDhkNmNhYTVmMzkzMjdkNmU2NjUyZWQ3NGRkMWEzNzg0NGI5NzlmNWNjZTc0N2E2MDZmNTY3OWY0ODk4YmJiNzY0M2RmN2U5MzFiNTRhMmI0MGViZGVmZTgzMDAzZjYxY2EwZjExMTEyZjAyM2M2YTNlOGNjMThjYWZlNWYwZAorCitUU1Q6IDI4MQorU0s6ICBmMjczNWQ1MGVlM2E5YTY1YjU4YzhhY2Y1NTE2NjNlOTg4MDllYzQwNmY3M2UzZTdmNGU3M2JjNGVhOTIzODc0CitQSzogIGRmNDhhNWI5NGEwN2FmM2MyYzk5YjgzODg3NjIyNDMyMzNjODUwZGMxNzUzMTdkNjAyNjM4ZTViODZhYjQ5ZWQKK01TRzogYWUzMWU5NGU3MTk3ZTRlNGQwMjM5MzQ4MDI1ZWQ2NjgxZTUxM2NlMWE2ZTBhYTBlNWI5NzkzNzM5MTIxNTBlZjExM2U1MGVmMDU2OWM0ODNmNzU2OGM0YmJjNDcwM2M1ZGFjYWE4MGEwZGU0ZTczODM4M2ZhMWYxMGQ2ZDQwNzFhMzFiOTllNjQ4NTE0Mzk3MjMxNmM4NjUyMmUzN2M2ODg3YTFjMzA3YjI5YjBkZDZmOWYxYjQzODMxMGFmOWQ4ZDczNDZmYjQxZjliMmRkMmU4MGIxNGM0NWViODdkNGVkNDhlMzdhNTI2MGI1MjI1N2IzZTk5Nzg3YTEzYzU1MzkyYmE5MzBjMDhlMDI0MGU5NjBkZWYwYzI5Yjg1NTA3NDVjZjE0OWRlZTUzYTVkMTc0ZWMwNjVkMmQ2Njc3ZGVlMWZjNDIwNTcwNjJjMzRlMjdlYTVkYmNkYjg2MWI5ZjY3MGM2MDMyYzc4NDZjZWM4ZTg3YTdjOTUyMGUyNzk2N2IwMTg2ZWU3MWI3N2VkNmQwMjliYmRkNzA5NDljZWM0YTcwOTMyOWZhMzdmZWUwMDI0OTBjYzFiYzRjMmRmNmY3NjNmOTg1OGYzM2Q3NTBjNWI1MDVhNjdlMjM3MDYzYzA0ODZmOTQ1NmQzYzYyMGQ5YWM3Yzk4ZjEzODFkZTBlZmZlNDFjMTgyNTk1MDRhMTUwZDY4YTZhMjhiMGEzZWVhODAzYjg1NTMxNWM5ZTAKK1NJRzogNjk0MmE3Njk2NDE3ZWZhYTU5MWI5NWUxMWYwMmQ3NjNiZWY1Mjc5YjkzMmE4ZTJhN2NiYjlmNTgzNjk1YzE0Y2U1Y2M1NTZiZWM2Njc5OWIzM2NiNTkyZGE0ZGYyNzM1ZjllZWYyYzNjZWNhNDM2MjE2NGI2Y2M5M2RhNGUxMDUKKworVFNUOiAyODIKK1NLOiAgY2FkOWQyMWEwMWM3ZTFkMTVkZjJmYmQ3OWM1MTZlYjhjMzQwMWU5ZmUyODQ2N2NjN2IyMTY3OWQ0ZTMzMWEzZAorUEs6ICBhN2I1NWMxNWQ2NzkwYjQwNTM2ZmNhZTVhZDI4OTJjZDY2YjE4Njg5ZjQ5OWMxZmRlZWE2NmQ0YTdkZjM5NDI0CitNU0c6IDcwNzAyYmYxOWM5MTlmOTgzNmRlZmQ3Yjg0NmZkOTk5MmQ4YjdlYjJlMTA2YWViNzFlNjBhMzFiNGVhMjVhNDFiMjEyZGM3ZGU3YzkxY2JkNjEzZDU4ZDA1OTVkYjgzM2NmZTdlNTA1ODRmMjU1Njk2MDJjNzc0NGZhNjc1ZDE1NmQwZjYzY2QyYjdjMDg5YzhhMDA2ODZhNDM3MTY5ODI2YTEyZGM0ODViMzhjMDY4YTgwMDcxNDJlNTE2Mzc0NzAxMWEwN2E0MTU2ODM2MjJhYjFlMjNjZTU3N2M3MzJiYTE0ZjQwMWZiYzMwNDNlMDY5M2E5MjA1YzE5YTkyMjk4YTNkOWIwOGZiN2FmYWZhZTBhOWYwMTZiYzc1MGVlNjMxYTVmNWRhNWRiNmY5YmEyNjkyYzc0Y2FhYWViNGQwOTdlOTBlM2MwMmQyZTNhN2ZiM2FhMDAwMDQwYjdjMTdiNzQ1NjRlNjQ2YmVhMTZiYWQ2MTFlYmMwODU5YTM4Mjg4MDRhYjRmNWNmYmE0MTdkMjU0NTE1Y2EzNjIwYTNhZDY4M2M0NmNhNjI2N2JiNDk1MzliYjMwZTM2OTA4N2U2NzQzOGU5NDg5NTYyNzUwZGNjYmEzYWEwYjFiMGE2YzI2NzAzMmQyMGMyYWRiNzVlNjhkZjExMjNiNTI1OWJmZTRlYWM2Y2FkY2E2Nzc4MTM4YTM3MzE4YWRiMzBlOGQ2NjlmM2JjOTY5MmNjNzRiNjgKK1NJRzogMzE5MjdkMDFkYjlmMjQ3MmY0ZGY2ZjYzYzE4ZWJkODNjMmIxYWFmODhkNTgwZTg0ODg1NGRmOGNiYTYzOTVkM2RhN2JkNmJiOWVkYzFmY2UxYzdkN2UxMzYwNTU4ZmNkZGZhOTM5MTViZTA3NmVmYjhlYTJkYzVlYTdiMjBkMGEKKworVFNUOiAyODMKK1NLOiAgZDliZTg0MjI1NWU5YTE2YjBhNTFhODY3NDIxOGNlZTdjZDlhOGJkZjM0MzUwODM5N2Y0ZGRiMDVmM2ZhMDA4MgorUEs6ICA3OTMxYmM2ZGZhMzMyNDk0M2FhYjE4M2QxMjg1NTE1OTE5Mzk5ZmZlMGI3MTA2NzdmMDkxNWQzYTViZTUxZTkyCitNU0c6IGFjNmM1NWIxMzQ2NjNlNDFmMDJhNmRjYjg1NDllYWExYzAxM2Y1OTY1OGQ4MWQ4MTJmOTViNzQwMDk1MTM3MjM2NzE5NDVlMTMyNGY5MGY4YTNmOTcxMzY5MTgxYjU4N2JhYjQ1NjY1Zjc4OGQ2NjNhYjc4MTQwYzVhMjJjMWMxOGQ0YWZlZGM3NDQ4YTc0OGFmZTViZjIzODcwMDNjMWQ2NWFiMTg0ODJlZjk4OTIyYjQ3MGRhODBhZDE0Yzk0NDk1MWNlNGFlZDM3MzkwY2NlNzlhOGUwMWIyNGM3ZGZjMTE0MWMwZWNhMmM3Zjc3M2VkNGIxMTgwNmEzNDYxNTUxMzQ4NmU0ZWUxMWFmMDgwNzhhMWI0MDU0Y2Y5ODgwMjk4NjA4ZGQ5YjNmYWExYTI0MmE0NTJmZTUxMTYwNGIzMTAyYzMxM2QxNGNjMjdjNmYwZjg0NzFkOTQ1NTUzMTdlYWEyNjRjZGY1MmM2OWUxOGY0NjFlNDc5MDNkMjEyOTg3MTZiMTcyZWU5Y2IxNzhmMDhmZjJkM2M5YzE2MjEyMWMyZWQyMWQ4NzM0YjJmMDYzMGQzOTkxNDZjYmY3NmUwMjhhMTQzZjJiZjdiYjUwYWYwZjU3YjliYTgwMjFkMjY0YjAwYzY2NjJmODRjODZjYjZkNTk1MmIzZDI0MWY3ZGMzZTcwMGM5NjYxNmNiY2ZiMGQwZTc1M2ZmZDVkMjFlZTMyMGU2NWU5N2UyNWNiODYwOQorU0lHOiBjOTM4NDU2NThjOTU2MGQyYzBlMjhmMjgyYWRiZDQ2NTJiYWZkM2JiMmVkZWMxN2M5NDg3OGY3Yjk0ZDNjNzdhZmVjOTA2ZWQyOTJhOGRmYmY1ZjhlN2MxMThlOGYyY2EzM2RkYTc5MDlkOWI2OTViOGZmNWExYzBlOTdhYzgwNworCitUU1Q6IDI4NAorU0s6ICBjZmM0OGNjNmY2NTgxMWZlN2Q3YmJhODVkMWNkODQ4NThmZDZmN2VkZDYzOGY0ZjU1MjM2M2VlNzY4NWY2OWNhCitQSzogIGQyOWMxMDY5NGM1ZThlM2YzNDQ3ZWQ3OGQzNGRiZDc0YTJiMzAxMzczYmE4NzFiNTg1MGMzMzNkZmY3YmY4ZDAKK01TRzogOGU3ZGVmYjlkMTZkMDM2YmQ2NDJjZjIyNmUzMjc3M2U2MDUzNjFjNWVjNGI5NTEyNTU3ODhkYjBhMDQyYzYzZTVhNDM2N2Q2MTUyNGYxMGU2MjU4OTkxMzI1YTM5YWI2YjAzNjEyMjYwYzNmZTNkZjIwYjM0MjAyZDM0Mzk1YmQ0ZWQ0MGJkNjEzNzNkZjc4MWE0YzhiY2ZiZDE1MzAxMDYwZjA3NDM3NzMyMzMzZDhlNDk3MzYzMjJkZWU2YjIyNDM4ZTc4N2Q4ODU2YjcwYzI2ZWM1N2Q2ZGFkZTljM2MyOGUyNzIyMGM1NjcwZTM5MzU0NGVkMDk1OTM3Mjk4ZGMzYWRjNzM4NjVmNzc3ZTkwMDM3YmRlZjgzNDcxNjQ3NmQ3OGY0ZTZjYjQ5NjFhNGM2OGE4YTgzNjMzOGE5ZjVkYTE3OWM0ZDVlOTNjM2Y3MGRkMzVlZWM3MDk2NTNkZDhkZTM3OTk2YjEyMDU2ZDRlZWZjYjRiNmIzYzEzYmE5ODRkODMyMjc1YzQzODZlYmY0YThmZjdmMDc4YmUzZDQyOGMxZTBkOWIxNjIzODFmMDZhNWI3YmIxMjcwNDAwM2Q5MWYyNWQxZDhmZDQzNjI2Y2U3MGZmZjU5ZDI5Mjc3NjhhNzZiZjdmOWVmNzZmZjk1NDg5ZjM4ZWRjZDFjOWU5YjhhOGIwZWY2NmMzMjgwNTc3NmQ1YWU5ZmJkODRhN2FmNGZhNjU2M2VjNzBhYzU3MzNhNDQKK1NJRzogODBjNWQ1MWU5NmQxY2FjOGVmZDM0NTk4MjVlNzljMWU5ZjY1YWY3MDFkMWQyOWUxZjk1YjAzNjcwNzExM2I3Nzk4NGI3YjMzNTBmMDQwNzczMzNjOTU3ZjhmYmM3ZDliMDQwYzM2MjY1MTQxN2I5ODk5MDI3Y2QzM2VkYjExMDMKKworVFNUOiAyODUKK1NLOiAgMTVjOWY3YzRkODRhNWE0NzkwNDE5NTJlNmE4Y2FjMjRlNzZmZDJkMjc1YzE5N2U2YjUyMTkyOWI0M2JhNmM1ZAorUEs6ICA4NjMzYzE4MjlkMjkwOTFkZjcxZmQ1YzBlZjY0MDU3MmU0YjY0OTc0Y2QwOTdkYmViYmNkZGViYTA0MTY0N2MwCitNU0c6IDExNzMwZGQ0NWRkYTgwZDg0ZDA4MGQ5MmU5YmRkYWVlYTY4NzhlNGEwYjNiNTEyZDllYTczMzgwOGUxY2VmNTFkNDkwNDhkNmM3ODExNmE0YmRlM2M2NGFjZWFhNTJiZWNhODZiMzMxYWI1OWU5MTg1YzcwMjg2YTAyYmI1ZGQwNGY1YzdmNGU5YzdlNDQ1ZTc3NDU4NTY1ZjE1OWM3ODNkZmQ0ZDk3NmE5MTBlOTM3Nzg5ZDIxNDFkNDE2ZWQzYTdmNjA4ZDI2NzM3YTg2YjIwYjYyNGUzYzM2YWYxOGQyNWM3ZDU5YjhkNzQyN2VjNmM0ZDNkNDM4ZDdhZTA5NDlkZDdkNzQ4YzFmZmQ2ZjI4ZTgyODVkNDQwNDIyZDIyYTM3NjEyMDJlOTU4NGY1Y2RiMzUwNDU0N2FhNGI2ODU3MzBjOTgyY2JhMjEzZGUwODAyMGE1ZTRlNDZhOTVmYWM0YjQ4MWJlYTBiNjMwYWJkMDMwZGRkMzM1YTIwZmUyY2Y3MDk0YWVmNDgxMzk1Njk5MTkxM2M2ODIxZjRiNTQxMGRmNGYxMzNmZTYzZTIyYzA4MDkyYTBhNjU5NzI3MjJhMjdhZTQyMDExYTgwN2MzMjdiNDE3MjM3YzU0MDExNGVlY2I5ZjBlOTZjZGE1ZGNmMDI0NmYxZDI3MTdmNDliOWNlYTlkYzZhM2RhOWIzOTZmMDI3MDUyOTIyNmY1ZGNiYTY0OTk5MThhNmMyODlmZTA1NWZlYzgKK1NJRzogMWUzNmJlYTVhNTgzNzY3ZWJkODAzMDZjYWIyMzMxNTViN2I0MjgxNGI0MzQ3M2NmNDVjZGM1MDM5YzkzOTc0NGE5Njk0Yjg3MjIwZGFmNGNjZDI5ZjI1Y2VhNDA1ZTdjMDhkYjJlZjE3ZjNmMDM0ZGJiNDljZmY2MDI4M2UzMDYKKworVFNUOiAyODYKK1NLOiAgNmQyZDBkODIzZjI5NDc0NmI5YTU1MTJlMTRlNzNjMWQ4NTViNWU0YmNhNjVmZTgxNzcyOTgxMGNjNWVmODQwZAorUEs6ICAxYjY0ODBhNmE5MGRmYjQ3Mjk4NDg1NWNlZjZmMWFiMzFlYjdiM2YxM2M4YWMwMGZhNTU2ZDIwYjUzZTVhZTE3CitNU0c6IDg3NzI3MjFmNzJlYWY3ZjczMDQwYzA2OGE3YzM3NTNiZmZjYTdkYzJkMDkzMGM2NTI1ZjQyNWU2MDA1YzI1Y2Q0YzBmZjUwOTVjOWM2MWE1ZDhhMTk2N2I4Yzg2MDEwYzg4NGU1MDllNmIxNjcwZjc5MDQ2ZTIyOTc5ZWJkMzU0NzM0MDkwZDNhZGEyMTQzNWMxZjgyNTRmN2I1MjIyY2Q1NTY0ZjA2NGU5Nzc2NDAzNjY0NDlmNGU1MDA4Zjg3MGY5YzQ4NDA1NjViZjRmYjVmNTc0Yzk3NzRiYTI1NjhlNzFhOWNjZDgyZmZjNTliNjk0ZjI2ZTdkZTRjZTJlM2ZkODgwYTBlZWYzODc5MzEzMzNlZGUwMGRjYjA2NWU2ZDBmNzk1OTFhMmFhOTU2ZGYxOTQ4YTI2NWNiOTU3NTBkOGEyMzNiMTVjMjg4YTA1NDg3YzUxNTY2M2Y5M2U3NDBmYjE1NzBmYmU0YmQ4MGM2OGU4ZDkyOTczNDVhOGEwMWNkYmQ4OGY0YTM5YmVkOWM1ZWYwOWYxNDRiY2U1ZGU1NjhiZjM3MzNiYzUzYjIwMzlhMjljYjNlMTk0NTAxYWRjMWMxMGU4NjM4M2FhYzhiMGY4NWM2N2E2Njg5YmJlMTQ3MGEzOTI0NzYzMTM0MzljYTg4ZDk4YzAyMWMwZWFlYzI1ZmIyZjlhMTYwY2U1Yzc4NjE3MGJlMDIzOGZiODc4NWRkMzNiZmE5MDU5YTZjMzcwMmQwZGUwNQorU0lHOiBiNTE1ZjQ5ZWIzMmFkNDc4NjkyZGY4OGYwN2I3ODAyYzZlMGU1MzI3YWEwOGE2MzY2ZTRjYjFkMWUyNmY5ZTY1ZmM4MWFiZWJlMjIxNWQ2NDkxMDBmMjc1OTgyNzNhNDEyYjYyNGU4NDJkODEzMDQwMzc5N2U1N2RlYzk3NWEwYQorCitUU1Q6IDI4NworU0s6ICBjMGNmNzk5YWY3Mzk1YmYyN2JhZmEzNmNhYjQzNzA0NWUzOWM5MDNiZjgwNzU0ODMxOWNlNDRmMjg3NDk0ZmJiCitQSzogIGFmYmY1NTBjYTI5MGM5MDViZGQ5MmZjODgzMWViZTNkZmViNmRhYWU0ZjU2MDA1MjUzY2M1MDk1MWU1MGVkYzIKK01TRzogZGJlNjU3ODBlOTY4ZGU5ZTQwZmZiNTdjZjU5YTYwZmQ5M2IzZjlhNWU3ZDhlZDUxODBhZGJjNTc4Y2ExYmM0OGJkOWZiNjBhMTMyNGM5YzJjMTE0MTQ3OWEwZGNmMGYxZDA3ZTg0OTM2NTI2ZGY0MjMzM2MwZDc3M2UzZmVkOWU0MDM4ZGU1Yjk1YWQ5MDVjOTJjYmUwNDA0ODdiZjU1ZTEwZTFlZGI0MjlhMGVjYzRlMGU4ZDAwYTk4OGE5Y2Q1M2UyZWIzNzJmNGZjNGNkOTUzN2IyNjliYTNhMjNjZWZiYzhkZjY0NzZlNzU0MzRiODFkOTNlODg5MWJmNDE3YzgyZTM2M2YzZTRhYmY4MGE0ZjczYWNhODRhYzdkZjYzMzdmNTM2ZDYzZDkzOWQ5MmNiYTY0YmU3NDIyMjExMTYwNjllZjI1MWFiYmEwYjAwYWYwMTcxOGJiNTgwZGRiZWI3OTk3M2VmMTBhNjhiNGQwZmEwMjNkNmViZDMwNzlkNmIzMmExYWEyMGEyMWU5MjAyZjI3NTkwYzNmMGMwY2MyNTMwNzNjM2Y4MjJhYWM0NTlkMzlmNTA3NThiNzBjMDA3MTBhM2M5ODQzODQxNjUwODUyMmU1MTJhZGFhMGFmZDUwM2E3Y2ViMDRmYjk0YTRhOTMyY2U4MGNkNWE3ZjExYmI4NjEyNjNmNThlNTc0OWQ1NDJhMTEwZGU3Yzc2ODlkZmNiMGM1MWFmYTlkNTRhNThmZjg5ZjNmNjcKK1NJRzogNWJiYTAxYTRjN2IyNTU0MmQwNjkxMmRlNzBhYTFlMjIwNDIzZmRmODMzOGE5ZTY5MzM5NWNiNmYwZGMxZmJmZDAxOGUzYzc3ZTUwYWVmOTBhOTA4MGYzMGYxZjU3OTJiMjQzMTA3OGZlNmUzZTAwNDY0MjQ1ZTE3Y2Q4ZGMxMDcKKworVFNUOiAyODgKK1NLOiAgY2RhYTUwZTg1MjdkYzdhNTBmYjM3ZTI4ZmE4Yjk1NjhjMzdlODU2N2UwYjQ5OTk5N2I5YWVkNjc2MTgwYzNiMAorUEs6ICA3YzU2ZTE2NDUxMDI2OGMxODJiNDIzNzQ3OTA0ZjFkM2E1ODA5MzMwZjZlMWIyOTI2NmVjNDZlNzNiZTE1NTBmCitNU0c6IDk0ZmNmYmFhYTMwM2RlY2U3YjkwOGY4NzRjYzVmMDk1MDYxZjE3NTRiYjM1NzgwZGI2NjZiNjNhYjgyOTA4MTFiZjFjNTIxYTdmOGY3ODVlYTI3MGRmYjM5ZDBkNmVkOTVhYjcxOTU1YTExZmZhZWFhMjY4ZTA4MWZmM2U0ZjI0MjViNDE4ODBhOTg3MTUxZTY3OGU4OTExMTM1MDk0MmQ4MjBjM2VlYzM2MjEyNDI2NjYzYmUxNzVlNTI4NmI0YWQxY2M4MDRlM2UzYTAzYjlmYTNlODI4MzhlYmJjMjYxNWE2NDVmMmNhMTQ2OGFjNGExY2RiZTUyMzc2MWU4M2Y0MzgxYjBjODU1MGFlNWU4YzhjZDFmZGE1NzE5MTQzNmUyN2NiODgzYmM2NGJlODZhOWRjNjExMGVmMzQwMWQ4OGE3ZGViZDFiNzAxZDljMjU3YTY4MjZjZjAxZTllMjkyMmUzYWU1NzdmMjgzNDI3NWZiMGVjZGE4MGVkOGNmMTgwMWUwYmM1ZTAxZTI2YTc3YzQ4YmRmNDZhNWM0ODk0ZDIyYWI1M2U3NDE4MjdlMjRiZWQ1ZjA3NTBmZmFkMDVlNTNmMWQ1ZTYxZGZkMzE2YjE5MWQ5Nzk3ZWY3MTMxMzFhOGI0MzBhYmUzZmFjNWYzYzRhMmNhMDIxODc4YjE1YWRjOGM1ZjU0MjExNDI2MGU2ODdhOWQxOTlkMjMwYzRlMGQzZmM2OTY5OTNiNTljY2ZhM2ZmYTlkOGQyZmIKK1NJRzogMTM3YmQxMGE1MGVmNjA5Mzg0ZmU2Njg3NjhmYjg3MWRlNzQxY2EwZjUzZmY4NDc3ZDdlYmZhOTBhYWZkNWUyNjgxZmRmMWI4OTI1MDQ2M2MxNWRiOGUxN2E1ODgyNWZlOTQyN2RlMDg5YzM0ZGUxM2NkMDdiYmExOGQ0YWE0MGQKKworVFNUOiAyODkKK1NLOiAgMGZkZWE5YmVlNjI4OGY5NDdlMGFkYmRkYTRkZmIyYmFhMDM4OTFhZjI1MDI0YTVlMTM4YWM3Nzk4NGQwMDUwNworUEs6ICA3MGFiZDg2NDMwZDdlOGQ2MzIwOWM4YjM3M2VjNGU0Yjc5ZTk4OWU2NzI1ZmFjZWZiYWRlM2M3NTc0ZDIzY2QwCitNU0c6IGNmNzJjMWExODBhMmJjMzdkODQ3OGQ5YTdhMzlhY2YwM2JmMmE1MDc5MGY3OTAyZjgxMTIxMjIyZDMxZDNlYzkxNmY0ZjI0Y2VmOWQ3YzQxZGMwMjFiMGU4NDg3YmI4OTJlNDczMDVlNTQ1MjAzMDNlODliMzBiMjYzZGFjNGE5YmEzNzVkNDZjNDBmY2Y0MDA1MzVjOTU5ZDJiNzQ2YTdmYzk3MGNmNjViNDcyZTg0YjVmMWQwZWJhZGNmYTFhZWQ2ZmM0N2ZhY2NlMTZhMzY2YTNiMWQ2ZTUxNjgxM2MxOTYwOTc1ZjhmMmI0MzA0MmZiNGVlYWFiZTYzYzZmNjVkYjQ1ZGRiN2RiODg4YTE5YTlkN2JhNmNhNDc5ZmNkNzBjNWQxZTk3MGYxMmMxNGY0ZDI0ZmI3ZTJmMzU3YmQzYTk0YWExYjg2OGNjYzA4NDdmMmVlZjIxODUzZTI1M2JhZmJmMDdjNGU2MTc2YTFlZjA3NzE2Nzg0MWViYmU1NjI5MzM3MTU3ZjM5Zjc1YzcxZDIxZTdlOTZjNTFhMWIxNmZhOGRjNjBmMGIxMjc5ZmNkYTI2NDFmYzg1OTFlM2M0OTJmMTViZjgzY2FmMWQ5NWIyY2Q5MTMzMmYxYjQyMDJmZTcyODYyY2EyZWEyZWY5MmMxMWRiODMxZDgyZjhmYzNkNDFmZTI5YTc2YzIxMWE3NThlMmY3MWJkODlkMmM2NjEwZjIwMTQyOWYzNDhkNTZlMTBlM2I3YWY1M2UyNworU0lHOiA4MGM0MmRkNWRmMDNiMjg1YTg2YWM5NWNlNjY2OWY3ODZhOTc4YTgxM2E5ZDdiOGM2YTIzZGU3NmZiZDA5YmRiNjZjNWRkMWNjOWYxYTE3NmNiYTM4OGQ1MDUxNzY0YTMyZmEyN2YwMDI4YmE0ODk4MDY4YmQwMWEzZWUxNzIwOAorCitUU1Q6IDI5MAorU0s6ICAwM2Q1ZTQ2NmY4Mjk4YWI1NDM4YTMwOTc2ZDEzMjJhNzIxNWE2NDJkZDVmYjRjM2Y4NTE5NDA5YTc1MjJmMDkyCitQSzogIDRiM2VkNGRiMDgwZTJhNDUyZTE2OTEyYzE0NTA0NDI0OTIwYTYwOTc1NjA0ZTRmMzc5MjU4ZDFjOGIxOTNkNmYKK01TRzogMWI0N2I3MDAxM2NiNTNlMWY4ZjQ5NzFlMGYzOTU2M2NlODdlZGJjMmNlZGQ5OWU1YTM1NTg1ZGY4YjAwYTg1MmY3YjljOTdjN2U0YTU0NjVmYzU2MDVhZThjNWMzNjU3MGE5OTIwMWE3YWQ2MDMxMjg3ZWYwYzdiMmJhNmU1N2IwNTZkMGZjOGQ2Y2E0M2JmNmNiZGFiMDk4OTM0YjQwMzE5N2I1MjVkMjJkNDVlNmIyOWM3OGY4ZDYxODNlNDFmZmUxOTdkYWUyNWJhMjJiMDY2NjlhZTA1YmFkZDdlMWRhNjkzMmE3ZDA1NGNiYWIzZjU0ZTUxNDYyMjNhZDg2NzEyMzFiYzE2ZmU2MjY3OWJkMjgxN2E2YjgwZTY1Mzk5OGM0OTQ5ZjgxZmY1M2I2MTczMTYzZTExZGEzZTZkM2M3NmQ4NGM3MTMyMjViNDE3M2Q2YmYwNmE4NWI2OTg4YTQ4YmU0MzU5Y2I1MTU1MDNjYTU2M2Y0MzUzZjhlN2Q0NWU0ZDk0NDYyYzg5YTA0YTAwZjFiM2IwY2E2NDIyZDVkYjAyOWM1MDdkNDY0ODM0YTIwYzc4YTcxMzY2MWQ4NGVkZmZjNDk2ZDY5MjgyNjE5ODk0NDM3YjQ0ODc5NTRjYmVhMmFhNzI2MWU2YTYyYjY4NTExNTRhNWQyNWZiNmI0ZjA5YzU5NDczZDM4NWNlMDNlOTFiYTg2NWVhYjY2YzU4YzBhYmIwYjdhNzhlNGJlOTI3ZTU1NDYwY2NkNzBkODIKK1NJRzogNmQ3ZTQ2NThmMjZmMzM3Yzk4ZTAzZjEzNTQyZTJmMzk0NDBmZjdiZjhkODhmM2Y2ZGZhNGQ2NDk0OGNkOTZiNzkwNTE0OTJmYzI4ZjY1ZjJjYzBkMjNhMGM0ZDVlMjMwN2JiMWM0N2UxMWU1M2IzNzFmMDkxYjY5ZjgwZGJkMDUKKworVFNUOiAyOTEKK1NLOiAgNzZjYzE4YTFkYWZmZmExMDA1ODZjMDZhN2I0MGY3OWMzNWZlNTU4YzMzOWMyOTk5YTVmNDM4NzVjZmFkZTAzZQorUEs6ICA0YjlkYThkMmYxMzdkYzZjODU3YTk5YTU5OThkZDg5ZGQ1ZjA1OTcxYTIxZThjNzc2NjcwZWI0N2JjMTI3MGE1CitNU0c6IDQ1MjJiMWQ4MjM3M2Y3YTMxODIyMWU3ZTU3NjE3NTAzZGRmNDRmZDUzOTk3NTIyYTFkOTYzYzg1YjcwOGQwYjI0NWRlMzcyYWQ1MmVjN2Y1NGY2MjEzZDI3MWY3YzkxZDVhMWQzNmQxMzRkYjM4OWRmMGIwODFhMDZiYzBjN2E0ODc1ZjcyNDA5Mjc5MzE3MmM5MTE1NjQxYzZkMDU0ZjFkOTkyZTBmYWU0ZGY1ODY5NWYwZWEzNDQ5ZDdhNGIzYTg4NTdlMTk4MDNmZTQ5YjZkNTJjOWZmMzc0NmE1NzRhMjc1Njk1NjU3OWY5ZmI4MDlhMGVkZWM5MmM1NWU5NWZmZWZhM2QwNWYxNjU4MjJmNDY0YTIxOTk5ZjI5NjkxZjY3NDRhYzVhM2VlNDkwMTc4ODA2NDVlODM3ZWRlYmZkMmUwZjI0OTk3ZjA0MTE0NWE3MmUyMzc2YWRhMjgzMTg2Y2EyYjgzNjM2Mjk3NzE5NWJhZWUzMGEzYWNjODFiMjQzZjNlZTM3NmEyYzQ3NjRjNzgzNjY3YTRiMTE3N2U3OTUxZDNlM2M3YmU0ZjFiZDdhZThjNjBmZDVmYjBmZDkxZjBjMWMxNGQwZDIzMjdlOGYyMGQ5MmMwZGZjYzUzODcwZTlkOTlmZGJmOWRkOWExN2U4ODI1MDlhZTdiYWE4NjUzZTM5ZWRjOGVlNTY5MDAwZDYyNGNiOTNhMDc1NGE3OThkMWY4MTFmNmEwZWY1NTAxYTE3YmNmMjVmZDBmOTE2MjYKK1NJRzogZGI3NDc1MWM2NmU2YjE4NjYwNDRkZDlhZTk5ZjE5ZTYzMzRmMTc5ZTc5ZDhiOGUwYzhjZDcxZDIyY2VmYjllYWI3ZTNlN2E5YzJkYTIyNWYyYTlkOTNhMzEzZDFjYmYxYjdmZTI1OTdiOGQ3MDJiZjMwMTdhNmE2YmM3YjdiMDYKKworVFNUOiAyOTIKK1NLOiAgNzFhZDk4MGQ1OGFkOGU3ZDMzMzA2Njg5MzU4OTM2YTM3MmQ1MTkwYjI0ZWM3ZjliZGU3NDljYjgxMTUwZWZkYQorUEs6ICBmZDM1YTc1ZmU1YWJjMjAxMDQ2OTFhMjRhNDY1OTQ0MGI1NWFlYWVhOTAyYWMzYmUyNzRhZjI3YWE4MzEyODY5CitNU0c6IGU4N2FlMDczZmY1ZGNjNTQ4NWExOTk0MGU0ZTNmZjI2M2EwNjE4YTkwMjVhZDQwMzJkZmIzNmQxNzFjZTg4MWY3MWMxOGE0OTIxMGViNDU4MTk4MDYxNDJlMmYwMGRiMzA0MTgzNWJmMmMzYmNjZjFkYmEwMmI4YjVhNWJkYWY4ZmVhMzE2YzA2MjNkZDQ4YTU2NGVjMTY2ZjAzN2Q1ODdjOGMwMTY4NGU1ZTVjMGJhOWRiYTRkMjNiNDlhMDMwOTI0NGUyODJhNTE0MDg2MjJlZGIwNTcwNDc0N2UwY2RlZWM5NzY4OTM3NzcwNzEwOTg5NzJjMTEzYThhYjYzOWMzMWYxNjEzMjMzZWU0NjBlZWE4YThjMTBlMWU2ZTE1MjIxNDUyOTg3OGNmMWFkYWVhZjc4Y2YxOWJhYzcxMzYxODE1YmY1Nzk1NTQ5OGZhYjRmMGYyYjc1ODZjODZmOWY0YzJkZGY4OTcyZjliOWUwZWI2MzZkODRiY2MxNDM4NWIyZDAzOGJlNTVhOTYzNzAyZWZlMjI1YTUwYmRkMGM0ZGE5MmEyYTZhMDkxMDBlYTA0YTIxMWQzOTY0NThkY2ViNDQ4NzExNjgzN2QxMzllYjBmMTIyNTM4ZWQzOTg2YWQwYWY0ZGEyZGZmYzg5ZjMyNjljYTg4NTM4MDg2ZTY5MWU1YmVhZTk1ODFlN2M2M2Q4ZTYxMmRhMmM0N2Y3NGRkZTFkOTQ5NTFlYWRiMGRmNjBjMzg5N2QyYTMwOTVjNTA2MDkzYgorU0lHOiA4MTY3MGIxMDI5ZTQ4MWU5ZmYzYzE3MWYwNWMxNjg2MWM4NDZlZTc5Y2RmMmUyMWUzYmY5NTJiY2ZhYzk3NTY1ZjJiMWRjZWRmNjlkMmU3ZWIzNWNhZjU2NjJlOGJjNjcxZmJiOTY3NTZhNjNhNTk2MjY0ZDFiN2Y0YWY5N2UwNgorCitUU1Q6IDI5MworU0s6ICA2MTU5NGUyNGU3NWY5OTZiNGZiNmIzZTU2M2Y2YTRmOTkxNWNmYTY1ZGRiMTk5YjAxZmVkN2Y4ZWQ3ODI0ZWNiCitQSzogIDg2MjdkMjE0MTU3OWNkMjUyMWFhMDc2ODAwYWMzNTRiOWUzYTQ3ZDcxY2VkYzg1NDc0MzQyNjgyMjVlMzMwMDUKK01TRzogYmMwMWIwOGM3Y2FhMjM2MTAwYTAxMmE3MjY0NzdkMGVjMzg5ZGJmYWRhYzczZDUxMDY0MjRjNWQxZjNkMWNlZjE2OTVjZmQ5M2E3MDYyZWM4YmYxMDY3MDQ3ODU0OTIwMTYyZjY1MTM1N2JlZGYxY2Q1YTkyZWMyOWJkYjVkZmY3MTZlOGY2MDI1NTE1YTk1NDliYTM2Y2RjMzVjZWQ3YzVjMGMzNjhlNmNkOTJmMmYxMGFlMTQ2YTIwNzI4YzM3NGJiYTUwOTY0MWNlODhjYjQyZmZmMGNlZGZkOWZkNjdmMzEwZjlkMDFhM2YzNjkwZWIyMWRiMTdiY2U2N2FlMzVjNGNkMjRjMjA5ZjA5ZjA0NDc1OWQ4ZDVhN2QyNDhlMmJkOTY2NTI0YmE4YzBjMjg5NzQ3MjZiNDNiZDA1ZGU4NDM0MzNjYzQwMDU5ODkyMjk3NDYyM2Q5YWNiZmRjNzYxYzRjMDQzNzVhOTUyY2U1NGNhZmZhYTk2YWNmZjZkOWRjMjc4NzQyYWY0NzZlMTg2NWNiOGMyMGQxM2QxYzE5MDA4NjNiY2EyMzFlNDRjNmIwZDQ3Y2I0MWQ1MTBmNzk1OGY0OGYzMDRkMDNkYTAzMzQ4NGEzZTFmMjczZmFmNjk4MzM3NWI3ZDNiZTAzZDhhMGEwMDJkZWY2MzY1YmViMmZhOGNjZjFhOTQ5ODdhZGNkMzNkMGRhMTE3N2ZjNTE1OWI2ZTU2ZDAwNDMwMWU5MjFkYmMxMmVjMGE3M2Y0MTNjZjJjNDgKK1NJRzogNjMwMmIzZmYyNzEwYmUzMDZjOTJiOWFhZTMwZDIzYzNkNGJlZmYzOTRlNjMyMDFlNmFkMTE3MTMzNDVjNGZjYjVjYzhkM2RkMTBhZGZiODJiYjExYTE4OWNlN2VjM2U0MjIyNzI3NjI0ZmMxNzg4MWMxNDc4OGQyNzEwZTE2MDgKKworVFNUOiAyOTQKK1NLOiAgNTRlNmJiZmJmOGMwNmZmMmMwNjYzMThjMmViZjAzZDUwNjU0N2JmNDNjMmQ3YTVkNGRmMzA1YTMwMzJiNzEzOAorUEs6ICAzYjcxYWExZGVmNjY2ZDkxODhmNDAzZjgyZWQzMDQ1NGFiYTViYzlmNDcwZjZlYjk4OGRhMTg3YzkyNTIzMjg0CitNU0c6IDAzMThkN2NiNDgwNWFmOTgyMWRkM2Y5MTRiMGUwNzZmZWEwNGE3ZDJkYjNhNTlhMDBhZmZlYWQzMzI1YTJiZTQwYzFmODdmNTMyNzZhODU1MjYwNGYyMjhiOTc2ZTI4OGI5YmU5MDZhN2JkMjViMmZmYWI4YThhZjVkMGY2ZTA4Nzg2ZmQwMzRlMmZlMWViN2VlMDMzOTc5ODYwZGQxZTUzMjcyODdlOWU2MTVmNWRjNWE5NjBmMTcwMjZiNTY4NDJmYzhkNDRjYWQwMDJlZGM4NTAxY2ZiOTU2MDAxNTAyZTRkZGM4MWE3NzAwZDljMGJlODhlYjRhYWE2NGE2Y2JjMzlkZTgyZjEzYzExMDg2ZGUxYTQyNzBkM2FmOTcyODRiYWMxY2FlZjFkM2VkYWExMDcxNjY2YmQ4M2IyZWRlMzk2MmQ5OGI5ZDkzNDk3ZGRmZDhlOTdkYWIzMDg5OTUwY2YzMGVkMTFkYjc3YWQxNDM3YTBhZjU4ODlkOGVmYzQ0ZTYxMjQyMGUzOTA3MjY3ZGYzYWNmZjRiZDNmYjZlOGNhNWJhZGY4ZTcyZjlkZTM5NTI4NjUzMDU4NTI0NDU2YTgxZGE1Zjg0OTgyYWZhYzM0YmVmNWY3MWU5MWY4ZjkwOTM4YTZmNWYxZjI4NzcxNmRlNTZhMDk0NmQyNjFlODdiYzc3NWNlMTg5ZTQxYTc3YmFlZGU3MzIwYTNjNjA4ZmM5NzFlNTVkMGE3NzNjNGQ4NDhkNDI4NjM3ZjExYjRlNDQ2MDM5MGMKK1NJRzogM2RmNGQwOTA3OWY4MzBlM2Y5ODIyODM2ODFiYTM3YjUwZjNjNzNkZTJjNWQyMmEyOTEzNThlYmIxZmI4NTRlNTEwZjYzZjlhNDhlOWZmZjdmZDgzMTEzMDJlYTNlOTY5Mzk0ZTZkNDljOWUzMTgyMDU0OTQyZjZhNzQ0Y2VlMDMKKworVFNUOiAyOTUKK1NLOiAgNjg2MjA2MWJlMGRlOWRmZDk5ODExODIwNGIyYjk4ZGIzY2U3ZDdlODE5ZGJjMTA3OTRhZjBhYjJiMDZlODQzNAorUEs6ICA5YzVmN2MyMjY1ZGRlMWIyNWU0ZjI3ZWM3MTU4MGQ1MmRjODlmMmMzYTcxMmJjMWFkNWQ2ZDY5ZTcxMWUwOGQ0CitNU0c6IDE3NDBkZGU4NDM0YTBkNjg5OTI1Njc5YjBjMTgwMzAwY2RiZDBjZjZhODlhZDhmZGUzNDY1MzMxNmNlZTRjNTcxYTQxMDVjOWU5ZTAyODQyMzhmZWYyYzM4YTA5MTU3YzVkYjk0MzQwNTcxYjM5MGFkZmI2OWZmNGMwZGM1MDUzMjUzYTY3OWQ0MmNjMWYxYmYxZmY0MjkyMjllYTBhNTA0NGM2Zjc5NTY0ZTBkZDI4N2Y1M2YwMTViODMxODdkOWFkMjdkOTEwMzlhZjA2MmM0MzdiMTU3NWEwZWFiNmFlYjhhYTBkMjdiMjc2NjVkNmRlYTkwNDFmZjk5NjNhMzExOGIzMjk4YTg1NDRlM2ZkNjlhYzY4NzdlM2U0MDUyZmU0NDIyYmYwMzU2MGIyYzU3ZWM1MzFlZThiNWZmNTNjMjhkYmRlMzViYjQ1YzM1MDc3NjM2ZTZmODQxYjU5ZDdlYjc3YmM3NzkxYjYwOTM4NThhM2E4MGEzYWE2ZDc3OGRiZjUzZGI5ZDA2MTE5YzUwYjcxYzc5MWMwNDk1YzU3NmQxYjU5ZDM5Njg3M2VkODcxNDg1MzUyYzgyOTlhMzU5ZGE1ZWU5ZDdmMzZlZDE0NTVmODk4NTFhMzA4NTFiZWE3MTk2ODVhZWNkMDhmMjU1NjI2MDlkZDEwNjYzMDczNTI3N2UxZDY1MTliYjE2ODdkZThiOGM2OGI5NjcxNDUyZWRiYjM0OTFkYTI2NGNkZmEwMDE3YzUxMmQyNzY5NzU5Y2I5MjVmYjY2NAorU0lHOiA5NjVlZGIzNGU4YWI4YmMzMjA0YTMyMDFkMjIxODYzNzJkZTQyNDI2MDAyOTdjZmRiNTdhYTFkZjA3NGVjNTBkZGYxMDEwNWU5ZDRjODlhMjY2YzM0ZGI3NzcyYWE5NGNiYTk0NjQyOWU2OGJhNjJiZjlhMGFjOTBmNWYwNWIwMgorCitUU1Q6IDI5NgorU0s6ICBiMjI1MGJiY2IyNjhkMjQ3N2M4MzEyYjE5MDBmZDk5OTgyYmFhMjlhNjg5NzRmYmY4Nzc4YTEyMjhkYzk3NTUwCitQSzogIDQ0YWE4ZGYxMTgxNjc0YjA1YWRlOTgwZjdlZGRiYWYzYmQ3NDIyYTkyMDI4N2NiMmQyZGI1OWEwNjNlZWJmNzQKK01TRzogN2VmMGFlMTMzNmE2ZmFiMzdmOTlkYTVmYTdkMGRlYzc0MDljMDcyNjIzZWFkODRmMjQxZDUzZDA1OTZiNDYxNzA1ZmIxYjNjNTM3ZDM2Yjg5ZTg5NjBmZWJiNGNkYzBkNDI3Y2UyZmMxYmU1OGRiYmNlMTUxZTM1YWNkOGI2YWNlNDBhMTk4MjI5MTRhNGJkOGM0YWY2MzJmMTM2NDE4YWM0OWIxODRkNTUxOTNlYmNjMzJkMGQ3OTg3MDliMWE4ZmUyOTRmYmE4YTFmZTcyZDk3NmI0NDAwZDRhMzkzMjQyMzExYjBmOGNjOTk0ZTg5NDc1YjAwMzhhZTVkODkxNDkzOGU4ZjZlODdjNmY1MGI5ZDY1NmM0NWQ3YjE0MjMxZWZlZDk3ZjNjOTA2Njg5MTM2NzBiZjViZTJlZmQ1YzI3MGM3Y2JhZjAxZTg1NzJlOTgwMDk3OGRmZTJlMTBhMmZjMDQ0MGI4NTU2MjliZjljZDQwOWVhOTQxY2I2OTIyNmNhYzc3MWIxNWVhNzdjMDMyNjg0ODgwNmZmOGQyZTIwMWU2ZTI2Y2Q1ZjQ1NDMwZGFkY2ZmOGY1OWMzMjFjMWM5YzZhMjliOTQ4ODI5MzU0NDdkM2U2YzJlODgwNGIxMTYxNTc2YmRmMDMyMGZlNTNjMzA3ZDljZGU0MjYwNzdhNzY3N2NkZTNjMWJjODNlMThlNjBhMGM0ZWU2ZGNjZDg3N2MyMTNhOGU0Y2NhNjQwZWUwNDkyOTgwNDU3MGFlMWY5NjE1N2MwNDM1N2EKK1NJRzogZjJiOGQ5MmVkNTFlYmQxMDAwYmY5ZGQzNDExYTlmYTllN2FlZTU0YzRjODZlMjRhZDBmOWFkNWM1NTY0M2ExMmQ2ODAwMTljYTAzZjIxNmJkNGJkMzJjOWNlMWNkOGE1MjhjM2ZmYWE1ZDViMWRjOTFhNGJlNTZmMGUyYzVlMDYKKworVFNUOiAyOTcKK1NLOiAgYjgwOTM2MWY1NWNmZTgxMzdmYmRhODgwZmM2MmNiZTQ0YzIxNmUxNDE4OTMzNDYzMDJiMzM2MDQ1ZGUyMTg3OAorUEs6ICBmZDIzZTQyZmYwNjY0NGVhZDM0N2FiY2MxYjNlMDNiMGU4ODU5M2I2MTI1NDk4MWRkOGFlNTk0NTRlNjFiM2UwCitNU0c6IDE3YWNlMTk3ZDA4M2FhZjE3MjZmNTNlNWVmODFiNWE4YzA5MjIyZjI2MGVlNWYxZjU0MDRhYjc4ZDkwMGQ0ODk2ODg0NDliODQzYmFkM2M0OThhYWM2ZDgwYjQ2MzliNzZlNmU4MWM1NTI3NmE2ZjljN2NlY2Q3MGI3MWFhYWYyMDE4ZWY3NmMwZTMwMTU0YWFlODZhNWM4NmQ0ZThkMGU0ZWM2OGNjNDI3MDYwYmQ1NjUxNGY3MjM4MDg2YmJlZjViZmNhMWY1NjcxYjE4MDQxODM4ZmQwMTM1NzI0NDNkYmE0OGZiZGQ5NWNhNzQwYjBkYWE0MzI3MTY0YTFlMzQ2NzcyNDk3MDhmNzdiZDc5M2U3Y2FhNjYzOGI1ZGM5ZmJlNmYwZGZkNDEyMDIwOTA5NzIwOWM5M2NlZGZhZjIxYjZiZjU5Y2E2ZTk5ZTYyMDk2Mzk0NDRmMGU4MjdiYmNjMGE2MWMzYTIzN2NhMjJhMjgzMjEzMjIzYWI2NThlNzEyYzc1NTYyMzhkM2E1ZmUzMTcyMmQ2NWY1NzA2ZWY2ZDY0ZDczMjMyZDMwNDMyMjBmMTRlNWNmZDNjMmM4M2E4M2Q2OGUyMDI3NGI2Zjk2YjI5ZGUwNDBjZWM4NDc1MDMwYjZhOGE4N2QyOTgwOGRkMzgxNzk1YzNkMjJhY2Y1ZGMxOTNiNzIwZDk1YTc1MmQ5ZjEyM2MyMDlmZmJhMDA0ZTQ4ZGQwNmRkOGM5ZTE3MmJjOWUwODdkODBiYzUyMTZjMGIwYjZlNzcwMzEyNDEKK1NJRzogYjViNTk1MGQzNzcyZDJlZWY4OGUxYjBmNWRmNWZmYWUyZjIxMDM4ODVlNzE0NDZkMzQ2ZmJiNWRhZWY5NDk2N2E2YjdiNmU0YmU4ODUxMTAwNjU4NzZjNjY1Yjc4MTJkZTQ2YWQzMWVjM2JmY2JlYWVlMTNlZDBjMWUwYjMwMGUKKworVFNUOiAyOTgKK1NLOiAgZWVlZjgwNzRjMmViOWExY2VlMmYyZDNiYjA1MzI1NTQ2YTlmYjdjYmU0NGI1OTk0NjFmYzU4ODVmNWZkOWNhYworUEs6ICA5Yjg5Mjk0MWEwNTczYjdhMTY3M2VmNDgwZjA4MTE2OGQ5Yjc0OTZhODFmOTE3N2RjNDI3Y2ExZjg0Y2JiZjdkCitNU0c6IDlhZTM5ZmVhZGU5MDVhZmZjYmVkZDJlNzJhNmYyNDI5YjNkMTEwOGU1YmMxYTlkYmFmNDkwYTYyOTliY2NkOTRhY2M0MTNhZGFjYzkxOGIxNGFmYTg1Yzc4YmMxNjhjYzAwNzQwYzNkYTBlMDgxODM5MTVmNzliN2ZlMzg2OGNlMmE3ZTg4NmIzMmFkNDUwMDk4MDViZmI4MWI4YzA3YjNiMTAyMjQyMGMwZjAwOWI4ODlkN2ZjMjJmZDE5OTdhZTM0MTk4NDM4Y2E5NDc3ODU3NTEyMmZjYWFmOTZlNjUwMmMzM2E3NWExMjlhMmQwZGJiMDczZDkzODIwZDljOTY2ODNkYjMxODk5MGJlM2ZlZjRjYWZjODkwYWZiZDliMTUwNGM3NDM5YTA4YTA2NWU3ODE0ZWU0ZjliNmY1N2VlMTZiYWVkM2YwZTNhYTM1ZGQyM2QzNTI4YTQ1ODkxOWFkNzcwNDhiNGUyZTYxNzIzNDZiZTI0OWE1MGFmMDJiYzZjODUzMzA0YzIwOGFlMGJhMDI3NzEyNjJhMGQ4YTQ2NWY3MWZhMDYzNWU1M2ViMmVmMGE4NDdkNTZhMGJjZDdkZDNmZTA3N2M5MmJjZGNhMzA2OWE0YTY4MmEyODU5OTI4MzE1Y2UzZWI0NDVjNjA3MmE3MTQ5MmVlODJlMTcyYTIwYmUwYjY0OGI3NTZlNmM3NzUzNzZmMGM3YzNkZjhlNjQyODgwODljMmY4MWNlOTU5M2M2ZTA4YmIxY2MxYjI3ZmNiZDM5MmZjNzk1MmM1NQorU0lHOiA2ZjcxMDE5ODRmZDY4OTJlMjE0NGI3ZDQ1NjE5ODMwY2FlYjY3MTNiZmFiNGVlYmJlMjE3YzViZWNkMjQ5YmQ5ZDc1MmViNzZlOWZhOTk1ZTdjNzFmZjdkZjg2YmIyNjBjZGRhMTczZmY1ZGVlYzZhZjIwNGI3ZGRlMDExZGUwOQorCitUU1Q6IDI5OQorU0s6ICA2MWZhZWIxNWY4NTdmNjU1Nzg2MmM4YjhjN2VmNDFmODA1NDU1MjA5OTZmY2MxMTI3YjhjMjQ5MTgyMjIwMWFlCitQSzogIDYwYTI5MGMwZmM0MjVhMDg3NDY3M2Q5NGY5YmIxNDAwZjlkYWNkZTk5NTRmOWY1YjA1ZGQ0OGFiNzQ3YTM5NTAKK01TRzogMjUzYjU2NmVjY2I1NjNiZDZlNDgwYzY5NzM5YjhlMzcyNTE5YTM0MzcyNTRlMGU1MDI5Y2FjODZjNzE2MzhmMmRmMmE2Y2Y5ZTU2ZGIyNTY5OTM0ZGViYTkwZGI3NTU0N2UzNjcxNzQ3ZGY2NGQ2ZjJhYWYzYzExMGZhNjdhNzA5NGNjYmU0Y2M1MzU1ZjBkNDMyMzUxMzZlZTI2ZGJlMzdmNDIyNWQzYmJmZTI0NTU5NTI4MDU4NWZiNTQ4Zjg5NGU4NmM1MTYxMDI1ODAyOTFmYTdhMDI4NTk1NTdmYjk4ZWI1ODg4NzA4MjhiMDk5MGFlOWQ3NGYzODMxZGE1ODk0NmJjN2E1Y2UxYmE0OThiNGU4YmU4OTg5YTNiNTBkN2U4Nzg5ZjU2YjhiNGZlY2JjMmEzM2JmYTNlZjU5MWEwZmJjZDkzMmZhOTNlMTlmM2E4MTJhZTVlNGUzYjRiMjQyYmU3NzA1YTU4NzRhZjczYmUzMTBiMDA1ODI2NmEzNzhmMjNjMTM0ODUyNDcxNWIwY2NjMThkNjYzNGIyMzYzNmMzMTZiYTZhMWRkMmZkNTA5MmMwNjcxNmE3MTdiNTRkMGViOWZjN2Y2MzZmODViYmYyMjVhMmNmMDM1YjRiN2NmZGRkNzUzNTE2ODJjMDU3NmM2YjNiYTVhMWMwYjI1ZWM1OTRlNzcwOWRkMDlhMDA3OTc3MmZmM2FjYzY3ZmI2YzFiMzdiYjM3NDJiNzI2ZTc3ZTgwNTYxZDlhYjczMTYwYjczMzYyNTgxZGE1YjljN2YKK1NJRzogMzFmOTBmNTBiMmRjNzA1ZjFkOTJmMTJjYTk5NzVkNzZmMWIyODI2YWRhM2NjMTg1YjBlZDZjODM4NjA3NzdiZDhjNDg5YjU5ODU1YTkxZjY0ODM5ZDQ5YmE0Njc5ODVhYmIzNzZjNDdhNDkwOGIyNzFiOGY3N2M1OGQwMWZkMDQKKworVFNUOiAzMDAKK1NLOiAgZTZiOWNkNGRhMDdjYjM0ZjMwMzkxY2Y2OGYwZDg3YzdjZmNmNjhmODEwZmZhNDBmOTczOWM5NWRlYjAzN2Y3MQorUEs6ICA1NjllZGUwZjA0NjMwYjQzYTA0YzVhNjZiNmE1NjM2Yjc2NmM3NTk2NTk4NGE3NDc3ZTE1NDkxOTYwZmRkODY0CitNU0c6IDY5ZGVmMDUyM2FmZGE2OTZmODQ0OGY5YzExNDNhYmMyNjUzM2U2ODY5NWEwOTBkZjBkOWU0M2QwYzBlZmY0MzU4M2U2ZjcwOWQyMDQzYzgxNWZiYjNmOTZiYTJiMGRjM2JlNmZlY2FkNWRkMzgxNDg3ODhlNGEwMzg1YTlmZTdhOTIxZmNiOGNjZWUwZTRkM2FlZDRiYzNkMjE2ZDg0YjQxNGY5NTgwYjAyODIwYzAzZDkyZTY3NWU2ODVjNGI1ODUxZjM2M2JiNGRmOTdiNDE3YzNmZDkwMDIyZWVhZmEyMGRmYmU4Mjk2NGYyZmYwNzNkMjU1NzU4ZmJlNTY3Yzc2YjJjMzVlMmIwOWY4YThkN2FmYTMyYzZmNWFkMDFiYzNlYmY2ZTIxMDYwNmRiMDM4ZWNiNjgyMGNlMWVhNGRkNTI5ZmMxYWRmYmMyYTEzODU2NWFjNmQwZjRhNDEwOWJkZDQ3YjhhYTZlZjRiOGJlZGU0NTQ2ODBkMWRiZGI3NWZlMWViMmU1NDhkNWRlN2NiNmQ3OTJmZWYzYWEwZDg0ODBhNjAzMGIzMGYxMDRkN2U3NmI1OGU5ZjQ3NmViZjJjYzgzMjkyM2I1MGM1MGMxMTFjMzUxNWZjNTE4ODUyMzIzNDI2Y2E3NzhhNTk2ZDMxOTVkYTg1ODVkOGMzYWE5MjA4MzMxM2E2ZTY1ODViNzBjOThiMTg1YjQ3Mjc5OGE2MWNkZTc3ZTYyZWMyNzJmMTRiMGQ5ZWI0ZjIyZjljN2MwNTgxN2RhNmZkZWZlNzg3OWE1ODQKK1NJRzogMWUzNzVjOTRiZDgwOWNhMGNkZDAyZjg5ZWNlYzRlNDM3NzMyZGQyMGEwYTg0YjI1NGVhZTg4OWQ4MDcwZTY4MmQxMTNiMGJlMjJlNDFlNmNkYzNiZTg3NzY4MGU3ZWViN2YwOTk1ZTY2MjJkYzBiNDM0ZmIwOTQ5ZGQ5OTRiMGMKKworVFNUOiAzMDEKK1NLOiAgNGQ5MDQ0ZjE3YjVhMDk3N2RjNWFhOTkxNmE5MjQzMDBhMjQ0YTFlZjdmMDYwMjc3YWQ0OTc4MzUxZWE2NDI5MQorUEs6ICBhYjljMDY5MmE2MDZiMjU2N2MxOWMzMGY5ZmFhM2I0Y2ZlNzJmYjIzNzA3Nzc2N2I3NmQzYjJhZTE0OTBhNmQ0CitNU0c6IDdjOGM3MTg5YWY2NzMyN2FmMWM2ZGQyYzMwZTk3NWYxOTBlM2IzOGQwMDhiNDU4NTE2N2UwZDQ1MDc0MGQ0NjczNDU4N2Y2ZDIwODc4NDI0NWNjNWNiMDYyYTJhMjc3ZjE3ZWJiMjc0NmY5YmRmNGE4MjM3Y2E0NzlhYjBhNDMwMTc3ZTE5ZWQ3ZGQzNjIyNTc2YjE0Y2RjMDgyODIyMTRmZTVlZTRkNzZiNDNjMTZhYzkwODY0YzUxYmU4YWVkNDVkN2I5ODBkZjc5MTdmMjkwZmRmNzk1ODQ2NDY1ZjI3ZmNiN2U1NzMwNjM3OTQ0ZjA1NzdjOTJmMzIzNzVlOTk1YmMwY2RhOWQ3MTk2ZjJjMGMxYWM4YjgwZDEyYTA0Mzk5NjNlYmQyMjU0YzM0NzcwMzU3NTgxNmU3OTY0YzEzZDQ0ZDYyOTI4MGMzMTJlYTI2NTM0NGRlMzhmM2IxOGQ5MTUwZjhmOTI0YWZiNDRiNmJmYjllZGE1MTNkNTllNjVlMmVmMTg2NjZlNmMyYTIxYzQwMTg2NjViZWZlOTJjYWU1ODFkM2NiMTRlMjNlOTdkODMwMDAyY2I5MDkzMWFlMDIxMDA2OGFmMzk0ZWJlMzUxYmU1YjgxN2YzNjc0YmZiZjQwMDQ5MDMwZTRmZTUwNWQzNGExZDUwMmEyYzUwZDhlNjM4ZTkyNmMyMzA2NzZiN2VkZWZiNmJlYzc3YjFjMGNlNjA5MzI1Mjg3YmE1ZmRkN2E5OTc2OTg3YmQwN2ZjNmE0MzQ0OTU2ZWJmODE4ZjA4NTg2YworU0lHOiA2ZmE0OGFlYTRkNWI5YWY2NWFmOTY0Y2RiNzA5NDQzYTExZmE4NGY3ZDQ0YWNkZGFiMTZlMDRhNmZjZWZiMjdhZTMzYzA1YjM2ZGExM2MyM2RlNTE3ZDZlNmFjNTc0YTAzZWE2MzBiYTRmYmI5NTgxMzExMjlhYTdmMTM1NGMwMQorCitUU1Q6IDMwMgorU0s6ICA3NWFkNzZiYjRjMGMyMjlhNWFkYzc5ZTQ0NGIxM2Y4OGE5NjQ1OTg2MmM4Y2YwYmE0OThkMGM5OTZhZjk0YTdhCitQSzogIGYwNzRkZDJiOWMxYzMwOTEwNWVjOTUxYmI1ODEyYTkxZGRiNTQwMjNiMzgwOWFiMzc5YzU2YWYwNDYxYWY2MTcKK01TRzogMGNhOGMxYzc0MTI4ZDc0ZTlkMGE3YmY4OTY0MjkxZDA3NDkxN2YyZjk5MjBlZmI5MTE1MjA1Njc2NDJhNTBhNjE1YWJjYmQwMGFlZDRhYmJmZWYxYTk4M2NjZTMzM2UxZDBkZjNlNjQwNGZiOTA0M2M2ODAzOTE0Y2Q1ZmZmYmM2NmEwNzkwYzc4NzhhMjQwODlhNTcxZjg5NTY2MmExZDE4YmUzZjAxZmY5N2ZiMzMyMzMzNGI2ZjViYWY5NjU1MTQ0OGU0MDkwZDAzM2M0NjQyOTRkMDkxMzNiMTUxZDViNWM2MzIxYjUwZTIyNDFkZTBlZjZmODgyODg5Y2NmNGFkMzU0MGQ1YTFlM2Y3NTQ4ZmIxM2JlNzFjMTY1MTY2MDZlNzlkMDQ0OWMyYTA4ZTVkYzIzMTQ4ODQzYzg0ZTk3ZWQyNDA2OTE2MWM4ZTc1MjA4ZjMzZTk1YjNlMTBkMWQ0OWEyZmFlZjlkOTg2YWI2MjgwOWY2MmFkMzljN2NjODcxZjM3NWE0ZjVhNmZhZjEwNGQ3ZTExYjg5MGNmYjA1ODk5MDI2ODUyMTZlYzA3Y2I4ZThlOWU3YTdjNDM2MzVlMjMyMTJiNjljYTNiN2VkNTRmMGI5Nzk0OWUzZDlhNjY2MmY4ZTRiM2FiMDljZDQ5NTI5NGMzMzFjMDQ3ZDg2ZWU3ODVmZjY1OGJjZDdmY2Y5YzQ4MDYwNWNlMDVlODEwMDY4ZDYwZmM5YjI2YjVmMDYzZWI5MDAwZDI2NTdhNTA5NDI4NGFjODBmMTM3NWQwYjY2ZDZmNWYKK1NJRzogMGM0NjQzYThiZTZkYzIyZjRiZWI2YmNjNzBjNjE3MmVjNzYwODM3ODY1M2NiNGU5OWYzYWU3OTVlYWRmNGU5ODJhMjk3NjA5Y2E3OTM4ZjVkZjYzMmIwOTU2MjhjYjc1MDYyZDNkNTFmYzBmMzMyM2JmYTdiMjJlYzRkNDcyMDUKKworVFNUOiAzMDMKK1NLOiAgYWRjNmU5YjJlMTAzYjYyYzI0YWQ0MzQ2NDEwZTgzYTFhMGJkMjUzZTRhYmY3NzkxMTg1MGM2ZDk2NjZlMDlmOQorUEs6ICBmY2UzMTZlMzNjOTEwODIxYmVlZGRkNjM0YmVkYzU4ZWU1Nzk5OWE3NmVjZTM4NDYwNTI4M2I5OWI1NDNiNzhiCitNU0c6IDhjY2NkOThlYmJmMjQzOWZmZGZhYzQxNjg3NjM4ZmFhNDQ0ZTFjYTRiNjNkMTNlODk4ZWFhODM1NTQ5MmYyODgxM2FiODEzZmQwMTUxMGUxMTJiZTEwNmIyMDQ1ZDMwZjYzMzM1ZDI0ODkwNGQ1MjFkZTE4MWFiYWMwM2UzZDJjYjJkMTZjNDRiM2IwMTJhMGM1MWY5OTAxYWVmOTA1NmM3MjRkN2EyYzZiMmFjYjBhMDc1NTU5NDBlNGM2ZTIxMTU0ODkwNjExYWRlYjY0ODlmNDYxZDNlNWVjZDFhZjVhNGQyYjBhZGFmNDE3NDc0MzZlYjQxNDc1N2E4ZmU0Nzc1Njc0ZTNjNmU1ZGU0NTY5ZDZmYzZjNzg4ZTEwOTA1ZWJhMzJjMjcwYTM5M2U2ZjcyMWE3NjUyOTRlMmFjOTlhOWI2ZTUzNGQzZGYwOGQxZGI5N2Q2MDJhYzMxOTVjYjBiNzdmNWJkNGFjYWY3MzdmYWRkNjk5MWYwNjg4YWJjNzQ5MTgwNDc1NzRlYWMyODI4OTczOWE2NjRlMGUwZTIwNTc0YTJjMjVmZGU0OWQxNDUzOWRiMWNlZGQ0YTkyMDRhNzBhY2ZmMGE2MmM4ZjI1Y2Q3NjhmZmFiMTVjNGRiMzE2ODQwYTRkMWJjOTJlMjEyNjcwYmUwN2M1YmRjZjUzNzU5MDYwN2RmYmJiYjRkOWY5OGI4OWRhMGI0ZGY3ZDg4ZjNlY2E0ODE0ZDE2YmZhMjBjOGQyZmE5NGY5ZjI1OWYyZWUyZDNhODNjOWU0MTcxYjFhMjYyYzRiOTkKK1NJRzogY2IwMTdkNmQyNjgyYzk4NTQzNjYyNTlhYTM1ZjMwZDQ5MWNmYWE5MzA5OThjMjk3ZGJkZGM2YWRlZDViM2Q0MDFjZjc2ZDgwZDhhMjc2NGRlMTMxNzE4YjZlMGM0ODFkNzE5NmJjNzI1Nzk3MTZiMGMwZjZmZjA1M2U2OGM1MGMKKworVFNUOiAzMDQKK1NLOiAgMzdmYzFiZWRhNDA2MGI2YzU3ODgzZGRiYTA3NzZjMmJjZjVhYzI4YTY1MTMyNjAyMWNjYTk3NzIzNzMwZmJiMAorUEs6ICA3YmQ3YmYxYzk5ZGM4MmUwNmYwOGJiNDU0ZDhmYjI4OGE1NzkyN2UwN2ZmMWIxMmFmMTVlZTJjMTJmYmI2YjNkCitNU0c6IDNkZmNhYzAyNjVhMDI0YTgzY2I5MzI2NzQ0ODlhMTYzYWFjMzE0YmYzZDk2OWYyNzU5NmU0NTE3MzNiOTlkZWJhNWVlYjc3OTIxMGJhZjk1YmY1NDVhMWFlNmI4YTkxNTg2MDY5M2VlODkwZjkzOTMyMGUwNmE4NDQ0ODNkMThjNmExYmNkMDNjNjM4YmI3ZDFmZTJhODJlYjQ0OGEzMTFiMTMwMmVhNjQyOGY1NGEzOWY0NWE0ZDU2MGJlMTU1N2EyYjI1NGM0NWMxMzdmNDVjYzY4MzU2ODM2ZTIxYmVkMGI3ZjczYTUxOGNlMDlkYjBiZTM5MzkyN2MzMzliZjJhNGI1OTg3NTM5NDA0Y2U2NTAyODRkZTEyZTNiNTUzYjI2MmVmZTIzODQ4MzMyY2NmZGMzNWU3OTFhMGFiNDNmMTM5YzcxZWQwZmNiMmQxNzNiYjM3N2VlNDZiMWE5ZGNhOTI3N2U3N2RmODU1ZjI4MzAyNTFlMzFlMjZhY2Q4Njc2M2M4ZDdlYWMyMmM4ODJmYzE3NGYyYjVlNzVjYTZhZDFhZGUwM2Y5NDJiYjJhMTNiZjU0MTkwNjE1OTE1OGM2ODM2M2M3NDgwYzViMjdhOTkzMjBmODI4M2EyNjk5ZDQzNjljMDcxYzUwZGJkOTBiNzc5MmU0NzcyZWZiYzBiMTk1YmNlODRjYzRkY2ZmZjcwNzJhNDg5NjhkYjY5ZjlmZWRkZDBmOWNlZDY1OWViNWRiNzE2N2YzNWY5ODhjZWMxMTQ4ODdkY2JmZGYyN2QwMmQzMDBiM2UxYWJlYworU0lHOiBhMDFkZDY1ZmFkYTI3MDM5ZjE2OGIxMjM0MTlkOGFiZmJkYTQ4YzU3MmVjZTI0ZmRhMDZlMWE1ZWMzMWUwODRmNGVlMWNiZjk5NjFlODhlZDUxZTE4OWZjYjdmNWYyMzVkZTFlNWIyOGQwOGYyYmZjYTE5MGIwZjAxOWVjYzIwNworCitUU1Q6IDMwNQorU0s6ICA4ZDQyZjRkZGQyYmJkMmI4MjdiMGEwZDMxZDhmNzU4ZWJkMTNhMWI5YjM3MTIyMjg5NDhjYTYxMGJiODg1OGU1CitQSzogIGI3MzU0ODk4Nzk0ZjlkYjBhOGFmNmVlYWZjZGJkZjAxMWQzZmJlZjAyMTJhZDkzOGE0YTRhZDI3YWIxNmViYmYKK01TRzogZTNhMmJlYmMwNDk2ZDg5NzRhOGY0MDYxODgwMzY5MzE0ZWQ5ZTQ0MGMxYjc3ZTI2ZmU1MDcxY2U2OTRmZmQyMTM2ZGIwYzRkNWU4ODBlNjAwMDA4M2E3NWM5MGQzY2Y3MmI5Y2Y1YTJiMWE5MDAyYzI3MDFhMmZmNTliMDY5OWE4ZjQyZDc5ZGQ4YTVmYjcxYTgxMjU0NTNkOTFmYjgwMDgwYTNmMGExNjU4NDI4MmYxN2VjN2RmZGMyZTVjNjljNGQ5YmRmNDg0ZDU1OTQ0ZGFlMjczZjIxMWNmYjc2YWQzN2RhNDU4NzEzNjU0MzlhZjM1ZWVhMWZiZWNkNGNhNjc5YjU5YjVlMDFiYWNmNDljN2Y0ZTVlZmFhNDA2YmExZGFlYjA4NTQ4MmFmNWRlZDg5ZGM2ODg1ZmZiZTNkMTRkMjkzMWI4Mzg5N2UyOGFkMDZlNTU2NGUyNzg5YmFlYTgxYmQ5MzJhYTI3OWZlOGUzMjRiOWE4ZWYxMTFjMmFiZTJmMTM3ZDRiYjUwZDhhYjc2Y2ViYzBiZDk4MmEyMzkxOTc1MWFkNGQ0OWU4OGViMTQxNzNkMzMxMDI4OWE4NzIzMTdlNGE0NTFlODhkNTQzMjA4OTE4NzBmMTViMmQ1MzMyNDQzMDg3N2E5ZmI1YjQ5YmI5MjlmMjExYzViODk3NjRkZDljM2E1OTVhMTQ1MWU5Zjg1YTIzODU0MDAwMjU2NmU1M2E5OWVkMWU2ZGRjOWI0ODUzZjQ1NWVkYjRjZjE5ODBkNTZiYmRjMTMxM2EzNmU3NmVhOWNiYjA0OGEKK1NJRzogNzA3NjRiZTM5YzZkY2EwZjA2N2FiZTFlY2E0OTBmZGE5NTFmZDRlOTQ5OTY5NTI2NmUyNzBiOWIwNWVhZTcwNmNhOGQxY2E2YTkyZDdjNDg4ZWM2YWQ4YmExMTQ1N2E0MmE1ZTMxNzAyYTljMmJjZTg5MmRjNDA1MzVjMDlmMDEKKworVFNUOiAzMDYKK1NLOiAgYjYyZGU1YTFhY2ZlNGNhMmQxZjBjMTMyYWZjYmRhZTY2ZmIyOWEwMmYyOTdmYmMyNDA3ZmFkYmJmMjQ1NDIwMAorUEs6ICBiNjNiMmQwYmYzNTVmN2I2ZDBiYWMwNzQwMzQxMWM0MGFmYmJiMmY3MDc1MDNiM2ZjMmNlZThhMWM3ZDBhODM4CitNU0c6IGU2NTllNTFkN2IxOTNjNGI4ZTJiM2VkNzNhOWQ3NTU3ZWQyYmFiNjE1Mzg4M2FiNzIzNTkyZjczMGE5MTQ1NjcxNDJiM2ZhNDM1ZGIzMjE5ZjgzYTU0MmRjN2E0YmQ4MDVhZjY2NmVhODY1Yjg1MzE0NmY4ZTNhOWZlODcwNzExZjkwZDEyYjA2OTM0OTJhZjJhMWVkZjk5YTE2NDU4Zjc4MWYxMjY2ZWM0MzdhNTI5NmE4MjJjYTlkNjljZTg0NGI1YzU5MDk3YTJhNTZmM2ViOGZkMjczYTYzNjExNmRiNzc0MzAwOTIyZDQ1Yjc0NDY1N2E2OTJmNWU4YmZiY2IwNmQyNDIyODE4YWViNTFlN2NkYTY4YWNmYmVkYTE2ZTdjNzk1ODBkY2NjZGUyNGU4ZTNkNjAxYjE2ZTA2M2I0M2E2ZDBkMTQwNzU1MmY3NTA0ZjViZTE5ODgyZTRmZmUzMjM0NGY1ZjQ3M2U3M2E4ZjZlZDM3YjBkOGQ5ZTVlMGEwZGM5ODI4Mzk1YmNiZDhmM2E0ZTMxMjQ4NjkyNDlkMDU4YmUwZTA0NWRlMGIxZTEyYjFjODNiYTBhYTIyN2M5NWI4MmJmNzQyYzNlYWMwMTUyYjMzZTZkMTliZThiMzNhMzViZjcwNWRhYWIxMDYyMmE5MGFlZDAyMmVhNmU0MzllZDUwYTkzMDg0Mzc5Mjk5MjRiYTNhYjExMWFkMGNhYTZmZWIwYTZlYjE2NTgyNGViZGIwODY2NTcxZWZjMDdlNTIyMmVkODY4NmIxNGQ5MjcwYmY3NmI5NDVkNTIwMTQKK1NJRzogNWNkYjAwZTk4ZGU3M2VhYjQ4MGJlNDJmOGE4YTYxNjM4MDlhMGQzNzEwMWI2YTVhNGVlZDZhMGM5MjAzMGQwOWE1NTYyYzcyOTA4MGNlNmY2NTk0YzhmYWZiMWY1OTQ3NzJkYjdhOTBhOWU3ZGExNTg5NmU4MmY3MDU2OTM5MGQKKworVFNUOiAzMDcKK1NLOiAgOTczMjA1OWQ3YmYwMjAwZjVmMzA0MTI0MzAzMzZiZTRlZjFlM2NhZTYyOTM4YWQwODcyOWNlM2JhNzE0Y2ZkNAorUEs6ICAwZGU4NDI1ZjVlMzBiMmI4YWViYjgwNzIwMDlhMzBjZjA0MTFjM2M4MjM4ZjRlNDIwODc2MGM1NmMzM2U0MzRmCitNU0c6IDFhMTNlN2FiNjAzYjQ4ZWI4OTZmZTE3MTczZmIzMTk1MGIwZGNkNWEzNWZmZGJlMTM3MWM3YTViZmJhNTkzMzE3NTg5ZDk2NTJkODg3OTc3MjkxODBiOGQwZTUxNWFiZmU2NTQ4ZjE2MDQyMWU1MzdkNWM5NGFlZjJiMzRjN2ViYjA5NzQyMDAwM2JjMGYzNjFiNDIzZTdlMTQ2MzBhODAzYzExODIwMjU0MDA0OWY2OGM5Y2Y0NmZhZTAzNjhkMTYyZTQwMGQ3N2JiNDUyM2NmNmM3NTNiOTc1YzI0NWJjOTllZDJmNDEzYTlkMDZjMmRhNmNlMGNjMDk4N2I2NDA2YjgwOWU4ZWIzMTkwMzNkMmRlOTEzMWRlZTNiMWI3YjVjOTVkNjUzY2VkOGZjY2Y5OThkYTE3Njg1MTFlY2E0ZDNjNWY3MzVhZGFiOTY1MDNiMzU1MTgwM2U0OTIyNjM1MDk1ZWY4MTFiZTRjMDhhNmNiYWM5MTdjYmU2Y2Q5MWE0YWU1YTMzMGNjZWMwZThlODE1MzcxMjE3YTNkZTYyZjJkMmQ2MTQ2NjIxOTgzM2YzMzQ0NzEzMmY0ZDQzMzUwYzU4Y2JhZjQyMjQ3NWVkYjEyOGM1NmQ4MGE0OTU3MjZiMWZkYmM1NjU1MWViNzJkMGY0ZmVjMjZiYThiZmY1ZWVkNjc3NGI4NTAzOWE1MjkyODM0YjVkMWNjMWIwOWJhMGEzOTU0ZDI5MzIzNjczZjVlNzEyNzZhMTJhYzRjNTc5MzU1YmYxZWNjYTQ4ZTZhNzE2YjlmY2VjZGM1NjVjNTFiOQorU0lHOiBmYmExNzQ5YjY0MWRkNGRmMzQ2NjRiYzQzYzAwNDY4YzdkNzVlODRhZmFkNzJkZTQ3M2ZkMWU5Yzg3ZGExNWVhNjA0ZmMyNTQ5YTFhODY3ZmE4MDg1MGU5YzJhNTljZDk5MDUzODg2NzYwYThkOTc2NGI4NGRkNjcyNjc2NzIwZAorCitUU1Q6IDMwOAorU0s6ICA5YzdmNmYzNzllMzg1NzAwN2UyYWM2MzI0Y2JiY2VkNTdhYzllZWU0NDc3ODEzZjgzYTgxZmM4Y2VmYTk2NGQ1CitQSzogIGE1NGJhMzk2ZDY4NzYzNGQzZWNjZjQxYzU3ODI0OTRmNWYxMGE1MjFhMWU1ZDM4ODUyM2Q4MGVlYmE1YjBiMmIKK01TRzogM2YyZDMwNzJmZTczODNlNTQxNTUxZWE5YWJkYmFlYWU2YTQ2NGFlNmI5ZjBiYTc4NmE0NDFiMmQwOGRhNWJjYWRhM2M1NDI0ZGM2OTMxZDZiMzk1MjNlMmRlMGEwYzJlNGU2YjViOGNkYTkyNWU1ZWFjOTM4NDE2YTJjNTFiZjEzZDQ5NTMxZDdlYzcxMTRiMWM4MmZlYWY5MGYzZjg3NTkxZTM5N2QwMjcwMmY4ZWMxYjMwZDk5ZjViZTdkMjIwM2U0ZmU0ZGIyZWE0N2U3YjQ1ODlkOGFjNTA2MjQ4ZDczNDc0NjZlZGJjOTZlYTMyYmYzYTZlYTc1MDJkZDYwYzllODQ5MDI3MTVhYjJjNmNhNjhmNWIwMGUxZDkwOWQ4M2FhNmFiNjYyZDhhZWE4NzBlY2Q4NjFmZWM2OWYyZWVjMGFlNjc3ZDI5OTViMGVkNjg4ZmFhOGVmNzgyNDRlMGQxMTk1Njk3YjA3MTIyY2VhYTExZjVhNmVhNThmYmRmYTJlMmVjMmRmOWQxODY5M2FlOTZkNDcxMjc1NTZlOTFmMDg2NDk4MmMxMzQxOWIwNGE2M2YyMDhlNzMwZDI2OTUxODgyYWVmZTAwMWJjYTM0MDhiZDk4NjI3NDhjNmNjODc2YzI4Y2FjM2JiMmViMzM5NTgxOGMyMDkxZTBmYmQ3YTBiNDQ2OGM2YjBkMDBjZDAwOGMxMWMzYzNhZDAxMDgwYTFmNWE0MGFlMmU0YjBjM2EwNzFlZmM4ZTFkMWJhNmFjZTZkNGRmMGZmMTk4MjliMGM2ODBiM2FlYjc1OTE3N2VkMzQKK1NJRzogNjU2ODVmOWNhNTk4MmUxNWEyMmJhM2M4M2EwMzQ4MzQ4NDgyZGZhZTU3Y2VhMTc4ZjA3ODBjMDU3YmFlYmU0YWY2MzJmOTg0NTQwYTI2MDE5YTdmYjM0MjUzYzllY2U3ZmYzMDhhZGEyMzNjZTA2ODYzNDdhYjViMjFjZTU3MGIKKworVFNUOiAzMDkKK1NLOiAgYTQ3OGYzNWFiYjczNzI3YjZiZTZlZTVlNTZlZWMzMjNjOTUxNzg4MmZkNjkxOTM2MGViYmJmNWQ1Y2I4YjgzYQorUEs6ICA3YTZlMjY2YTU0ZDEzNWRkYTAwMDljY2RhOGE5NGE0NzEyYWU1Y2IxNDc2MWU4NDM2ZTk3YzRiNzgxNGQ4ZThjCitNU0c6IDAxNzNhMzQwNTBiNDM3NDgwNjFmZjhmNWEzZDdjNDNiNjM2MDg0Nzc4NmU4YmI3NWU1MzZmYjQ3YjY0NWIyMTRmMjIxYmEyNGQ4M2QyOGJjMDI1MDI0NjYzZTUzNGY5MGY2ZTgzYTkzZDhiZGRlZGEyY2Q4ODA4MTU1NjUyYTkwOGM0MzdjMmRiNmYzZWQ0OTEyZjU3Y2E1Yjk3OTI4YTczYmU5NjRhZjU5ZGY0NDM5ODU0YmIwMDZmYzI5NWE4N2I3YjcyMjM5YzdmYWRmZWM0MDcxNTUwOWQ5ODU3OWRhYWRmYjhkNTI0YjRjZWM2NjIwNzA1ZWZkNDEwNGMyOTcxNDRhZWE3MjI5NzRlMTJjNWVjZWU1MzkxZWYyZDkzYWMyYjEyNGU0YWM0OTYxNDdjOGI3MDM2MzU4NWQ3MDc4Y2NjNTNlMmFlNTkzMzUwYmMyNTU0OGEwNTQyNTI2YWIwMGFmZTQ3N2EwZjRiMjczOTdjNzJiYzc0YThhOGFiMTU2ZTYyYjhiYjQ3YzNmYmI0YjM0OTEzZTQ1OTY4NzQ3NmJmMzMxNDJjNjE0NzAyMTA3ZmZlMmNjMDFlMjVmYTMwMjc1ZTFlMmU2M2NlYTkxNjhlNGE0N2MwMmRlMDk3ZDRkODUzYjI3Njc1YzViYjMzMGI5NGE5NzRlYWQ4NWUyYmRlZThlZTE3Y2JiNTY1MzM0NjY1OGRmMmY5MWY2YmQ3Mzk0OTFkZDcxOTg4YjNhOTc2YTNlMmU3YTlkMTM3NDEwZjRhY2JhOWZlYjVmMTE3OThjOWE0M2I2YWRjZTE0MzY1YTdjNmQKK1NJRzogOWQxNmZkNDBiOWY4ZGQ5YjRhMWE4YzZkNzAzYjlmY2NiYjk0MGIxZTBhZTc3YTU5NzAzNzRhZjBjZjcyNmY0NDc5ZmQzMGQ3ZGZmNWNmNTM0OTRkOWEyOTZhYjZiOWU0NmVhNmMxMzZiNGRiMmM3MWMyMWI5N2MxYzgyNTRkMGEKKworVFNUOiAzMTAKK1NLOiAgZmZlODI1MTQ4YzA5NTliM2E2OGRlODZhZDhlOGFmN2ZhNWUwNzhmMzYzZGMxMjQyMTNjOTAwMjBkYTBjOTA4OQorUEs6ICAxMzkxNTJhMGJkMjI5NjJkZDkxOWFlM2UwYjE2MjBlMDNjMDMzYzJhZDBhMzk3OWVjNmJjZDE3MDVlMjNkNTk4CitNU0c6IGYxMjU3ODBkMGNkMDg4NTMwZjBjODdiNzBiZDQyZWJhYjU2YWRiNWFkNDM0NWY5MjlhZTVkZWFlMDdmYjU1MzIyMTUzYThmMDIzZDM4ODQzYmY1ZDZhOTNmZTk5M2VlZTcxYmMyZWU1NjNiMjVhNTA5MThmMDNlZmRiNWRiZjcyNjlhZGQ2OWRlZDNlNjY5NTM4OTU2MjBkOWI2Y2Y0NmJhMjM0OGY4ZDY2ZDdmMDkyMjM1ZTM3OGMxZTNlZGZlYmViNzgwODRiYzhkZWEwMTNmOTkzM2FhZTE0YTA0MTk0ODI3NmQwMWYxY2I1ODM0YjBlNTkwZTEzZDkzMWQxOTI5MmJiMWQ4MDQxZmYyZmUyZTExNzFhMmUwYjlhMDU5ODIxZDA5MjRkZGU3ZjNiMWJiNTk4MTNmNWUzYzYzNTIwYWFmYjg4MDFiYTYyYzcwOTdkNGQ4Y2Y0MzdhNTY4YTdmMDA4N2M2ZWEwZmNlNmU1NjhjNDg4M2YxY2QxMmM3NDlkMDZhNmZlYjI3OGYxMDg2YThiMDQ3Njk5MjFmNzhhOTk1OTA2MmFiMDZmOThlZTgwYzJjNzg1NGZmYTc2MGY4NmE4OWVlMWE1MTI2NjA1M2QxOTVlNjFiYjFkYmQxOGRkODlmZjM5NGU0MDhhY2UwZjY0MWEzOTVkNTYxMThlYTcyYjdkOGFkZjc4YjE2NTVlY2VjZTdlODI1MGU4YTNhOTFjYjhmY2EwZDljZTBiYWY4OTgwYTM4N2M1ZWQ0MzE4NjYzMjgwZTViNDUzMWYzMTg3YzQ3ZWFlYTdjMzI5NzI4ZGRkMGU0MAorU0lHOiBmZTRlODllZTMxNzg2YzBhM2QzZGUzNjQ5YmI5M2YwYjhhZWYxY2FmNWE4MzJlYzVlNDA2NzgxMDcwNWFkZGRmNTM5YjhmNGUwNWFkMDhjZjM0NzllNDViNDJjOTY1MjhmNmQ1OWE0NjI1NzAzZGRiZjE1YjYzMDkzOTY1ZDgwZAorCitUU1Q6IDMxMQorU0s6ICA0OWFmZjQyMWE3Y2QxMjcyMmFhODRjNDhjMWZiMWM1ZjhkOWUyNzdkMGE5OWVjYmM5MzQ4YzNhYWE3NGJlNDIyCitQSzogIDg4ZDJjMjYyNjZmNDkzYmM2NzU3OGNhMGIxZjUxMTYwY2YwZmRiNmEwOWE5MDZkYjlmYWE2ODZmMTFmODIwOGQKK01TRzogNzBhMWFjMTQ0Yjc1ZmRhNzU1ODZhNzljMzZmZDM5Y2NlNWY1Y2FlMmU2Mzc1ODUyZDNiNjJhOTYzMDMzNmEyOTNlYTZkMmFjNmU1YjU3ZGEyMWVmMzY0YTU5NWJiMDc1MGY1YmY0ZDJiMzIwNjc2NDIzODcwZTRiOGUwODY5NjAxZjE2NjgwNjE5MDQ4YzRlZGUyNzZkYTY5ZjIwNWE3MDE3NmUyNWVhMDRiZDA4OTc2M2U3MDliYTM0M2ZjODgzMWU1MjA0NGVhYmY5NDQxZTY5OTdmOGJhMWFlYjllZjBmNDkxMTcwNjY3YTdmNWZjOTYyN2NiZDA1NTFiNzZiZTI3MjgzYTRiMGM1ZjY2Nzg0NjY4ODIyNmExMTVlZTgwMjBkZjA4MDQyYjE5YjU5ZmU1NTEzMTZhNmNiNjkxNjg2MGI5ZWNkNzQxNTRiNDA1MTAzOGExNzM1MjM3MmVjMTRkM2M5NTdkMmVmNTBmZjc4NjE4OWE4YWViOWMwOGY0NWVlYjVlYjhiMDQwMzM5OTc0YWE5Nzk4YzQyNWQ3YmVjYjIyOGM0NDdhNmQwYjNjZWYyNzE4OTNlMGY3MDc2ZTIyM2E3ZTg3YzZhM2QyNzBhMDMzYmM5N2E0NTY1ZWRjZTBhYTkxZmZjM2Y3ODAxNzc1YTZmMjliMjMwMjQ1YmQ3MWZhMDM0MzUzZGUzNzIzOTVkMWJmY2JkZWJiYTA4MTMzMGY3YzA3NmJlOTljMmNmNDg2N2YxNWI3OGQ1MmY0NmZjNzM5MWM5Y2I5NWU1ZDY0NjQzYmFmZmU3MmE4ZTNhNjUwNjY3ZmJiM2UKK1NJRzogNzQ5MTgxMjg0ZGYwNWRiZTU5NzRiOTE3ODJhMWE3NmVhMDg2NDJjYjBmMGM5OGRiNTg2YzU3NWMyMTBjZGM4YjY1MWJkMzRiNzU3YWUzOGU0YjZiZTk0NjUyMzViZDBlY2E0MzBlMjZjM2VlZGU1NjFjNmU4MjRkZmEyMDBlMGEKKworVFNUOiAzMTIKK1NLOiAgNzAzYTZlMmI2MmQwMDkwYzYxZDg2NTliNmE5NjNlMDNjOWQ2MmMxYjM4ZjdkNzBlNWY5ZmYwNTU5MGNkMDM2MAorUEs6ICAzNzBjMjFkZTZlZjJmYWI1MzRhZGE5OTk4NjljOTBiYzliOTJjY2JmMjQ5Yjc5ZDM5ZDk1NDQxZDFlZGUyMTBhCitNU0c6IGQ0MmExNzU2ZTg0ZGY0YjRlOTc3M2Y4NmY3Njc0YTJjZDc4ZTcxZTQwYWE4ZjY0NGU2NzAyZGZiYzJjMmM1Y2E5MGZjMjQyZTljYjAwOTljYzhmMmMyZDMxMzZiYWFmYzBmZjY5NTQ4MmZkYWNkZWY5ZjU2NTYxMGI2ZTE5MDA3MjJmNDM1YzYzODViMzVlOWY2YzQzNmNhMDM3ZTAzZjY0ZTIyMzNkZmZhNThkYjNiOTFjYzFkYWEwYmIwYzU0YzhhNDNlNDY5ZDJjZmY3ZmEyYmY4ZjVkMWQ4Nzc5MzEwODljODJlZDg5YWJhNDJmMmVlMmI4NmU0NDVjZmQwOWY0Y2Q3OGIzNTE5MWJmNDY3ZTc4NGVlZjc1ZGM5ODdlMDQ2ZDM3ZDRkNGU4ZTliYmUxNGFmODBkMDNhMWY0MDg5ODM4NGI5ZDMyNzlmYWM5YzU3ZmQ5YzdlZWNiZTE5YTVhY2MxNTAzM2I4NGUwN2ZkMGU0MDliZGJkNWE1N2Y2NTY0MTE4M2E2YzBhOGVjNDI2ZDFmMWQyMjMxNjZmZjBhMTkwMGIyZTkyYjdkODU4MzVkMDE5ZDE3Nzc1ZTUwOTNjY2QxMjZmOTBmNjNjYjdkMTVjYmViNTMxMzI0MjE5Y2Q2NGRlZDY3MTRiMjFhNjUzNzFhZjA3MjEwZGZkZjBlNGU1OGRkYzdkNTlmNGNmYTY1YzQyMWQ4MTRlZTJjOWJmNmRiZjY0ODczZDU3OWIwOWVlNWRjZWRkNzMzMDYzZTAzOWFjOWE1ZjljYTRjMjUyNWE0Y2M4ZTk4NGRhNzE4NWUyZDY0ZmFkODFjOGEKK1NJRzogZTVmZDY0ZGEwMjg4MDBjNmNlZWQwNjhhNWU1OTZmMTYyMWM3MGE4Y2IxMzhiMzFiMzI2NDdlYjRiMDdiZDJlY2M1OTQyYzE4ODQ0ZjM2NzAzM2Y2NzM5OGUzMTRiYTJjN2NjZjI5OWMwNjk3ODc3NzcwMjVkODQ1ZjJhYWQ2MGUKKworVFNUOiAzMTMKK1NLOiAgNzY4NDljMTg4ZTNlZGQwZmY1ZjhmYjg3NGRjMDQ1NjY0NTUxODQ0NWU0MWE3ZDY4MzNlNjE2YzNjNDhjOTg2OAorUEs6ICBkNjcwZTJlYTA3ZGI2MGMyMmFiNzlhOTNlYmY0OWQyMmE2MjQ1ZWUzYWYwN2IzYmU1ODRlZGE2OTRjMzc3MjllCitNU0c6IDFlY2NiMGJjOGVjYTNhYjViZWU2OGM1ZjhjYWEzNDUzNjc2NmM3MDVmNTA4MjdkYjdhYzM3NWQ0ZmUzMGI1OGZmYjdlMmZlNDkwY2M3MWE4ZmY4NmMwMDZkNjE3NGQwNTc5M2FiOGE1NWRkNTFiMDZkZTQxN2JjMGFjNDUyY2RjN2NmYjBiYjAwMzYyYjY3NjVkMjBkYjIzZWIxODQ4MDI3MDY0YTFkOTA5MWQzYjEwZWQ3NzZmMjhiNzY3NjhiZGZjMDhmMGJjNTExZjc2ZmFlYmE3NmNmYzRjYjVjODNkYzllYmU4YThkNzllZGNhOTIzZWNjZDUyNDAwOWNhZmVkYzkwZTNhZDg3ZDEzOTJlMWZjY2Y0ZTYwY2NhYjk1ZGMwYWI1NGJmNDQyNDVhMDA3YTk2ZDQ2NjM0YjFiMjk2NWI4MjljM2Q3ZGFhNzY1OTcyYjU0YTdiMzY1YjZmMzRkNzdkNzE3NmFjZDhkODk0ZjZiNDE3MDkxYjZjMDBlZGI3YTRlODEzNzk5ODhiZmNlY2I2OTJlOWMzYzQzMTBhN2UyNDBlNWMxMDYzY2RlMTEzZjIyYTY4NGE1MGExMTJmZjQ3ZDM4OTg4MTJlZmI5MjYzNzA3MmI4NjE2M2FkODkzMTZkMjIxMTk1YWNiZmFkMGEwM2ExZmJjMmQ5NjdmZTgzZjg0Yzg0NTlmY2NkNDkwYjljNWIzZTU1ZDI3ZTk0ODRlOTQzYzQxN2YyMTI4ZDczNzAxZGEyOGY0OWZkMzY4M2YzM2EzOWNkZWUyMzRiZDMwNWI5NDkxZTJmM2ViNjIxYmUzZGQxZGJiYjMxYgorU0lHOiA3MTQxMzk5ZDUxZGFhNmViNDUxOWJmM2YwMWIyMzM5MjBmYTkwOGZlZmE2MTJmMGNkN2Q1YWY4YTlhM2M0NDE5MGUzZjYzODRhOGQxNGQzN2M5NzAzMGVmNTAxOGNmOGFlZThhZWIxNTY5YTczZDg0ODYyYTU5YjdkZjcyZmUwOQorCitUU1Q6IDMxNAorU0s6ICA4M2FlNDhhZDcwZGEwYmIzY2RmODc0ODFlZTJjMGM4NTcxYzJjYTk4NjcxMmY4YmMyMzI5ZTlhM2UzMzM4M2M1CitQSzogIGI3ODUzMDkwMDBkZjk1ZjVhMDRmN2Q4OWM0MTEzMzAxMDU3YWRhZWViMjliY2QyOGQ5OTM3MWI1MzdiYmEyZjYKK01TRzogYjc1MjFkM2Y3MWM2NzlmYTcwMzdmZTc0ODhhNjQxZjZiOTdjNDk0NTRhY2M4ZTM2YjkwM2Q4ZjllYmI1NGQ4OWNiNTZlZmQxOWUwNGJhNmE3YzhmNDhhN2QzZWM5ZGVjZDNmMWNkMGZhZjZlOTc4MTE4ZTZhZGNlOWM2YzZiZTYzYzZhNmExYWUyMTY1MTgyODQ3OWE0NmJjOWEwZjc5NDMwNDBmOTQwYTBkNDcwYzhlNTc3YzVkNTc1Y2I1M2MxYmYzYWIxZmViMDUwZGNiNmZlZjBiYTQ0NDdmMjk5ZmRiOWYyN2VjYjA3MTRlY2ZlZmQ3NGJhZDdiMTIyYTQ2MmMyNGEyMDk4NDhhMDMzODkwNzQ1NzhjNWJkYzM2Mzk2ZDgwOWIwZjE0MDE4ZGE2NDkxN2U2YmY4N2VmNDA1YzhmM2UzMzNmZjljM2JhZjYzMzk2Njc2MjA3OTRiYjQ3NDNmMDUxNGI1ZGU3ZDdmZGQ5NDdhN2UzNTAxZWU4OGVmYWQxNTllMzNhMTA3MmZiYjk5YzdjNzFlOWQxM2E1MDJkNWEwN2M0ZjgxN2VlYjdmMGM1MzE5YWE0MWE5NmQ1ZmY0ZjE1YTczYzI5YjU3MWZlMjExMDkwZTE3MmM4ZGI1MTg2MjQ2MTJhNWMzNzFhOWQ3Y2VmNmRlMzVlYmVmOTZlODhlMWE3OGFmM2JkNWRkMzUyNTFhYjU0ZDczNzE4ZjNlNzBkMmQ1OTAyMTUzMWRjNzMxODRmMGZjNjljMmU5Mjk2NTg0NGVjMjdjMWMwMmFmNWU5YTM0NjlkZTM1NWRiMjI1NmUwZWMyYTRlYmEzMGEKK1NJRzogNDMzMzIzNTFkM2ZiN2I0NWZjZjM3YzYwN2Q0NDJlYTgwZGJkYTJjYjY5YzI4ODRmNDI0ZTY1ZWEzYTMzMWVkODQ3MmQ0MzY4NDA1Y2I3MzZiMmQ2Njg1YWQ3ODJlMjM5ZmU4MzNlZDc4OWEyOTIzMTg1MTY2ZjYwODM0MmVlMDUKKworVFNUOiAzMTUKK1NLOiAgMzllNTZhNjU2MjNhMGFlYmFkZTBkYTEyY2UxZGYzNzhiYzkyNDA3M2Y3M2E1NDllZmZhZWJjNDY1ZDFhNzhlMgorUEs6ICA4M2RhOGFkNTBiYWQwOWViM2U5NGM3MjVkZjNjYzNhMTE5NzM2YWRjODU5Y2ExYTEwNTAzZjQ4ZmYyZmVjNTk2CitNU0c6IGE5NmRjMmVhM2ZhMTM1MTQ5MmE0NjE5ZDkxOTQ2ODFmOGVjNDAwYTk3MTU4MjQ0NDgyNjUzODM4Y2NiN2UxNTZhODJkNTY0MzY4ZjgzYTZlZTFiZTQ2YmMzNGI4MTcyMDBlODQ2NGMzZDEyYjVlZjJjNTBiMTk1NjViODgxYzRjM2Q0NTYzZmI5NDdlYjQ3YzNlZTljMWVlNzg1MzI2OTg3NDQ1NWJmYWNiYTMwNWYzMDdkMWFjNTMwOWVlYWU1YzA3ZmE1YzRkNDI4ZWRiYzhiOTUyOGM0NDE1MjQzYTllZjU4MGFmZjhmY2ZiMTIwMDBhNzFmY2VlZTg5ZGU5N2Y5MDI3OTUyOWJjYzgyMmVkM2NiMzRjODJiYTVmZWMxNWY0OTQ1NjYzNjM2ZDY3YjVmZWNlYWNjMzFkMjVmOThhZWEwN2Y3ODAwZDVhMTAzNDI1MWNiOTFkZDA5NjNlYzJjMWE1NDc3M2E0ZDk2YzE4MzU3ZjhkMTAxZGU1OGU5MzJmOGM2Y2RkZThlM2NmY2VmNWE3NDQzZmRiYTdiNzgzMjA0MDNjMDE5Njg0NDcyNGE2MTIxODNlMzRiZGQ4MDhjZTdiOTU4ODYxY2EzNzExNTczMGVhZWRlMWZkMGJhYWJlOTc2ZWZlZmQwMzY1ZmRmOTI2Nzc2YzUzNmY0N2ZmODBkZTVjMTgyOTFiYjdlOWYxYjkxM2ZmZDFkOTQ0NjhiNzg5NzUyZmFlNmNhODk3YzBjY2E1M2VmMWU3MzFkMDBjOGJkYmU4OTI5ZWE2YjFkY2UxZjMxYTIwNjg4ZDM3YjBmM2EyYjQxNTNiMzA2YmRiYTEKK1NJRzogMzk4ZTgyNjAwMTFmNTdkOGFjOGM1OGQ1NDU3YmM2NTJjNzQxNGFhZjZmYjJmNDI2Yjc4OTkwNTY2MDVjMGFmYzI4MzkyNDIzYjJiNTcxZjVlNmMzYzdmNmQ2MDI0NWU1M2ViZDAzYmRjNWFkM2MxYWQ4NzM4Y2IzMjIxNGQwMGYKKworVFNUOiAzMTYKK1NLOiAgNGI5OTIxODUyZjQwOWEzMjNhZTM4MTc1ZThkNzZhMjExZmM0ZDljNjU0MTc4ZWVhM2JhYTdhNzY3YTZmZGEwNgorUEs6ICA0YzcyM2U0MzZiNmJkOTdmNDRhZjUyNTAzYjIxY2M1MGQ1ZjZhZDZjZmM4Mjg4MzQ1ZGRlODA1NGU5OTU1ODJlCitNU0c6IDNmMzNkOGZiODNlNjg3NDEwOTBhMzdiZWRkNzQ1Y2YxNDFhYWFlZDhjOTJmZmE3NDJhNTI1NjE3Nzc4ODU4MDVhY2UxNDI0NmFiOThhOGNiNTk4YzljZTNkZTliMjliYWU1ZmEwNGIxY2Y4MjhkZTExYWZmODBhN2VmOGEzYTM4YWVkZTRmM2MzNTYzYTI1ZDA0OWJhZGNhZDVlZDdlNDdmZGJiYTZlMTExMzA3ZWViZTllZjQ5MDZiYzk4OTcyOGI3NmU4NGFmZTgwOGU2NjUzYjI3MWUyMTEwNGFhNjY1ZjE4OThkZDJhYWIyMzA5MGUyMmI0ZTM0NGEyNjE2ZmJkOGVlNGFkOGVkODEwODM5NWViYTgxN2ZiZDE0ZmVjNWMxN2RjZjU2YjgyMjA4NTZiMmI4MzNlMDkxNDA3ZDUwODliMzVkZGYzNGI4NmZmN2RjOWZkZTUyYjIxZWYxMjE3NmVmMzM3MGI3ZjNhMGE4Y2IxYjA1OGE1MWFlZmZmM2QyNzlkODBmNTFhNjhiZmI1OTI1ODdiNDVjNWM2M2E3ZTRkNjI1Yjg4N2RlNDg2YTExODMxNmMzYjZhMjM4NTc1ZjkyYWM1YjFjOTRjM2Y1ZGJiZDk2Njg2MDAwZDZkMzljY2NkNTU4ZDQyMGU0ZDQ0N2E4Y2JjNGJjN2I4YzZhMDNhZjBmMDAzNGZiMzUxOGQ5MzgwMGYwZjcxM2U0YjEzNzMyZTE2YWRhNTE4MDFkN2U1NTljZjgzOWQxMDU4ZjY0OTU1Njk4MzExMzk5MzQ1NDE2ODUwZGRkY2M1NjAxYTY4NGZkMDllNmFmZDM5NDRmNWUxOQorU0lHOiBjYmYxZjE2NDJkZjk1MGViNzFmZDA5NTkwZDM0YzI2NTkyMmM1OGJkODAyNmJiYTNmYzBlNTk0YTZiYjFmMmI5MGRhM2RjMWQ1ZjZiNmQ1YjQwNWE4OTZkMWRiYjcxYjg2ODVjNGRmYzQ0NGFjYWZmZTY1YWI4MzMxNzg5ZjUwNworCitUU1Q6IDMxNworU0s6ICAxYmZmNjUyYTJjODMwOWEzOTNhYzExZGEzYWE5N2ZiMDc4YmIyODRlZDVlMWI4Y2NjOTgzNjUyZWY4NTU2Y2QwCitQSzogIGFhYWJkYzA5MWZjMzY4MjM1NDIwMTc0NGU5YjczZmQyYTZjZmIyODE5MTRiZjJjNzBlYzNkYzFkZWM3MjE2YjAKK01TRzogNDhkMDI2OThhOTdiZGNiM2VmMDc4ZGNmY2Y1NzUwMDA1ZjE3MDJkMzAwZTdlODliYzQzNmUzODExMTM0MDFmODUyYjhiNGFjZmY2MGZmYmQ0YWI0NmQyMDIxNjhkOThiODczNWU3OWNiMzUwZTM1YjA3MGZmNmJkY2FmZDk1NGI1NTE5NjliNmIxYTcwYzkxMzFlYmQ0MGQ5NjE0MDI5MWQ4ZDJiMDkxNTQwYThiMThkOGU1NDY1OTE1YzI1ZGJjNmI1YzlhNjg3OTQyNTMzYzM3MmM4YjRlOTVhOTUzNjc3MTY5Yjk1MGVkZDM0NjQzNzVjZDQzMTMyZmY5YmQ1NDFlZTIyYmQ0MThjZTIzMTk1ZjY1ZDhiMjg5ZjYzM2VjOGQ3MWUxYTgwMWIwNmMzYzgyN2Y2MjdlNzIzZDIxOTkxMDBjZTczZThlNGE0NDQwZTc3ODMxN2E0NzQ5MTA3OTNiNDdiMTBmZmI1NWRiN2YyODFjN2Q3YTAzM2JkODAwNDhiODI2NzNiODdjZjk1ZTk5NDIyYmE2Mjg2ODhmM2M5NzE4OTBjYTE1ZDEyZjU3MmZhMTk3N2ExNzMwNzA2OWRhMzA0ZWFkMzAyNmViMDEwNDI2Njg4OTBkMTcwMDhjZDFlOTJjNDZjYmU5Yzg1N2U3MTkzZGUzYWJhMzkxMWU0Zjg2ZmUwYTE2OThhYjdjZGI5MjUxYTg0MjRiMjg0OGI5NmFkODFlYTIzOWQzNjVmZGVhOTJlYTVjMDQ3M2QwYTZiYjFlMzcxMzU2YmRmYWQyZDAzNTAzMzZkM2UxOTQ3YzkzNmZkMGMyNTE5NTQ0NTAxMTczMWIKK1NJRzogOTNjOWMzMzQ5M2ZjNjQxNzJkNTFlMTZhMGExY2Q3MjlhMGQ5OWUzY2I4NjRlODlhNDI5ODdmMzlkZDhjZDI2NTQ1ZmRmZTM3NTgxOTExZTgwMzY3N2RhNGM1NWIwYTY4M2RkZjYyYjcyOGY4ZjMwNjg1YWU1OGY2MjhlYmU2MDkKKworVFNUOiAzMTgKK1NLOiAgMDAyZmRkMWY3NjQxNzkzYWIwNjRiYjdhYTg0OGY3NjJlN2VjNmUzMzJmZmMyNmVlYWNkYTE0MWFlMzNiMTc4MworUEs6ICA3N2QxZDhlYmFjZDEzZjRlMmY4YTQwZTI4YzRhNjNiYzljZTNiZmI2OTcxNjMzNGJjYjI4YTMzZWIxMzQwODZjCitNU0c6IDVhYzFkZmMzMjRmNDNlNmNiNzlhODdhYjA0NzBmYTg1N2I1MWZiOTQ0OTgyZTE5MDc0Y2E0NGIxZTQwMDgyYzFkMDdiOTJlZmE3ZWE1NWFkNDJiN2MwMjdlMGI5ZTMzNzU2ZDk1YTJjMTc5NmE3YzIwNjY4MTFkYzQxODU4Mzc3ZDRiODM1YzE2ODhkNjM4ODg0Y2QyYWQ4OTcwYjc0YzFhNTRhYWRkMjcwNjQxNjM5MjhhNzc5ODhiMjQ0MDNhYTg1YWY4MmNlYWI2YjcyOGU1NTQ3NjFhZjcxNzVhZWI5OTIxNWI3NDIxZTQ0NzRjMDRkMjEzZTAxZmYwM2UzNTI5YjExMDc3Y2RmMjg5NjRiOGM0OWM1NjQ5ZTNhNDZmYTBhMDlkY2Q1OWRjYWQ1OGI5YjkyMmE4MzIxMGFjZDVlNjUwNjU1MzE0MDAyMzRmNWU0MGNkZGNmOTgwNDk2OGUzZTlhYzZmNWM0NGFmNjUwMDFlMTU4MDY3ZmMzYTY2MDUwMmQxM2ZhODg3NGZhOTMzMzIxMzhkOTYwNmJjNDFiNGNlZTdlZGMzOWQ3NTNkYWUxMmE4NzM5NDFiYjM1N2Y3ZTkyYTQ0OTg4NDdkNjYwNTQ1NmNiOGMwYjQyNWE0N2Q3ZDNjYTM3ZTU0ZTkwM2E0MWU2NDUwYTM1ZWJlNTIzN2M2ZjBjMWJiYmMxZmQ3MWZiN2NkODkzZDE4OTg1MDI5NWMxOTliN2Q4OGFmMjZiYzg1NDg5NzVmZGExMDk5ZmZlZmVlNDJhNTJmMzQyOGRkZmYzNWUwMTczZDMzMzk1NjI1MDdhYzVkMmM0NWJiZDJjMTljZmU4OWIKK1NJRzogMGRmM2FhMGQwOTk5YWQzZGM1ODAzNzhmNTJkMTUyNzAwZDViM2IwNTdmNTZhNjZmOTIxMTJlNDQxZTFjYjkxMjNjNjZmMTg3MTJjODdlZmUyMmQyNTczNzc3Mjk2MjQxMjE2OTA0ZDdjZGQ3ZDVlYTQzMzkyOGJkMjg3MmZhMGMKKworVFNUOiAzMTkKK1NLOiAgMjViMGYwYmIzZGNiNDIyYTZmM2M2YzIyMGVhYWRiMTFkYmZlNDg5YzJkNDU1YjI3NmNlZmU4Y2JhMDU3ZjlmMworUEs6ICBmZTAzYzljNDM5NGFkYzc0YjEzZjQ3NjU0YmVhZDhiYzg1NTk1OGI0MTk0ZmRhYjIwOTdhYzFiMTU3OTMzYzA1CitNU0c6IDU0ZDk5Zjk2OWVmYTg4NzBmYzIwZmE5YTk2MmJiMzcyNjE5YzMyNDQzOTcyOGFmMzEzOWMyYTA3ZThjMWIyOWMxZTRlZWRjMmQ0MGJhNzIyZjYzY2UzNzY3MDM2MmFmNmY1MjAyYWRkNjY4YzRmYjRkNjJmYThiYWNiYzdkMDdmZjNiZDM4YzE1YTAxMDY0MjU5Y2MzNDEzNDg2MTYzMjk2NzQ2MDU0MWE5OWI4ZDUxODJiZjU5MzQ3YjVhNTk4NzlhYTNiMDkxYTFmM2UwNDEzNWJkNjMwMWJlNTIyNmQ0ODk1ZTVlOWMyYjE1ZTQ4ZTVlY2RmNDQxMjllNjEyMjg1M2E2MDZmYzExODQ2NmZhNzIwYjVhYjE2NTYzNWMzYmRlMDRkNzQyODkyNzRmYTAzNTQ3YWNjYmRlNzgwZTFmYTBiZjJjNTZmODQzNmE1M2U3Mzg3OGE0MjRhMjlhYTlkZTM4NWRiYTQxOWFlNmE1ZDEyZTAwNDI3NjE1MmI1OGQzMjViMzAyNDAwYTU1MzMzYzM4Y2RlNDkwOGFlMWQwMTIxY2JlY2E5NTA4MDljNTQzMzE0Mjc3YzE0ODVlNjhkOWY5YzBhOTYyZDFiMWUwZGRhMWQ0YTUyYjU2ZjgzMDhhODBiOTJhY2M5ZjRlYmMzZWQ0NWQ5MWExMjlkYTg2NzU2MjFhZjY3NjcwM2RlZjNiODQxMTMxODNiMmUzYThjNTYxNTdmMjQzZjEzOTgwZjNkMTc1NmZlYTc2NjhjOTE1MDNkMzVjODM5YTIxMjBjNzllYzk1NGZiNTQ2ZDdiNTQyZjk4NzI4OTUzNGZmZGVmNjJkNDdmZDVlYworU0lHOiBkYTUwZDUyNDJiZjUxYzM5NTE3ODBjYWZkOTI2ZDY3YmRmNTY0MGQ1ZDNiYjA4NDMzODMxZDU2ZTQ4ZTI1OTJhMWMzNzU5NjhiYjRkMmZiZWE1NjE0NWFiZjJkODI5OTEzNjNiMTU2NWZhMWVmZmUyMTQwMTFhNjg2ZTM5OTUwZQorCitUU1Q6IDMyMAorU0s6ICBiZjViYTVkNmE0OWRkNWVmN2I0ZDVkN2QzZTRlY2M1MDVjMDFmNmNjZWU0YzU0YjVlZjdiNDBhZjZhNDU0MTQwCitQSzogIDFiZTAzNGY4MTMwMTdiOTAwZDg5OTBhZjQ1ZmFkNWI1MjE0YjU3M2JkMzAzZWY3YTc1ZWY0YjhjNWM1Yjk4NDIKK01TRzogMTYxNTJjMmUwMzdiMWMwZDMyMTljZWQ4ZTA2NzRhZWU2YjU3ODM0YjU1MTA2YzUzNDQ2MjUzMjJkYTYzOGVjZWEyZmM5YTQyNGEwNWVlOTUxMmQ0OGZjZjc1ZGQ4YmQ0NjkxYjNjMTBjMjhlYzk4ZWUxYWZhNWI4NjNkMWMzNjc5NWVkMTgxMDVkYjNhOWFhYmQ5ZDJiNGMxNzQ3YWRiYWYxYTU2ZmZjYzBjNTMzYzFjMGZhZWYzMzFjZGI3OWQ5NjFmYTM5Zjg4MGExYjhiMTE2NDc0MTgyMmVmYjE1YTcyNTlhNDY1YmVmMjEyODU1NzUxZmFiNjZhODk3YmZhMjExYWJlMGVhMmYyZTFjZDhhMTFkODBlMTQyY2RlMTI2M2VlYzI2N2EzMTM4YWUxZmNmNDA5OWRiMGFiNTNkNjRmMzM2ZjRiY2Q3YTM2M2Y2ZGIxMTJjMGEyNDUzMDUxYTAwMDZmODEzYWFmNGFlOTQ4YTIwOTA2MTkzNzRmYTU4MDUyNDA5YzI4ZWY3NjIyNTY4N2RmM2NiMmQxYjBiZmI0M2IwOWY0N2YxMjMyZjc5MGU2ZDhkZWE3NTllNTc5NDIwOTlmNGM0YmQzMzkwZjI4YWZjMjA5ODI0NDk2MTQ2NWM2NDNmYzhiMjk3NjZhZjJiY2JjNTQ0MGI4NmU4MzYwOGNmYzkzN2JlOThiYjQ4MjdmZDVlNmI2ODlhZGMyZTI2NTEzZGI1MzEwNzZhNjU2NDM5NjI1NWEwOTk3NWI3MDM0ZGFjMDY0NjFiMjU1NjQyZTNhN2VkNzVmYTlmYzI2NTAxMWY1ZjYyNTAzODJhODRhYzI2OGQ2M2JhNjQKK1NJRzogMjc5Y2FjZTZmZGFmMzk0NWUzODM3ZGY0NzRiMjg2NDYxNDM3NDc2MzJiZWRlOTNlN2E2NmY1Y2EyOTFkMmMyNDk3ODUxMmNhMGNiODgyN2M4YzMyMjY4NWJkNjA1NTAzYTVlYzk0ZGJhZTYxYmJkY2FlMWU0OTY1MDYwMmJjMDcKKworVFNUOiAzMjEKK1NLOiAgNjVkZTI5N2I3MGNiZTgwOTgwNTAwYWYwNTYxYTI0ZGI1MDAwMTAwMDEyNWY0NDkwMzY2ZDgzMDBkMzEyODU5MgorUEs6ICBiYThlMmFkOTI5YmRjZWE1Mzg3NDEwNDJiNTdmMjA2N2QzMTUzNzA3YTQ1Mzc3MGRiOWYzYzRjYTc1NTA0ZDI0CitNU0c6IDEzMWQ4ZjRjMmM5NGIxNTM1NjViODY1OTJlNzcwYzk4N2E0NDM0NjFiMzlhYTI0MDhiMjllMjEzYWIwNTdhZmZjNTk4YjU4MzczOWQ2NjAzYTgzZmVmMGFmYzUxNDcyMWRiMGU3NmY5YmQxYjcyYjk4YzU2NWNjODg4MWFmNTc0N2MwYmE2ZjU4YzUzZGQyMzc3ZGE2YzBkM2FhODA1NjIwY2M0ZTc1ZDUyYWFiY2JhMWY5YjI4NDllMDhiZDFiNmI5MmU2ZjA2NjE1YjgxNDUxOTYwNmEwMmRjNjVhODYwOWY1YjI5ZTljMmFmNWE4OTRmNzExNmVmMjhjZmQxZTdiNzZiNjQwNjE3MzJmN2E1YTNmOGFhNGMyZTU2OWU2MjdhM2Y5NzQ5YWE1OTdiZTQ5ZDZiOTQ0MzZjMzUyZGQ1ZmE3YjgzYzkyZDI2MTBmYWEzMjA5NWNhMzAyMTUyZDkxYTNjOTc3Njc1MGU3NThlZThlOWU0MDJjNmY1Mzg1ZWFhNWRmMjM4NTBlNTRiZWIxYmU0MzdhNDE2YzcxMTVlZDZhYTZkZTEzYjU1NDgyNTMyNzg3ZTBiZWUzNGI4M2YzMDg0NDA2NzY1NjM1NDk3YzkzMWI2MmEwNTE4ZjFmYmMyYjg5MWRjNzI2MmM3YzZiNjdlZGE1OTRmYTUzMGQ3NGM5MzI5YmFkNWJlOTRjMjg3ZmJjZGU1M2FhODAyNzJiODMzMjI2MTNkOTM2OGU1OTA0MDc2ZmRiY2M4OGIyYzBlNTljMTBiMDJjNDQ4ZTAwZDFiM2U3YTljOTY0MGZlZmZiOTUyM2E4YTYwZTFkODNmMDRhNGI4ZGY2OTE1M2IKK1NJRzogN2E5YjczNmIwMWNjOTJhMzM0OWYxYTNjMzJkYmQ5MTk1OTgyNTM5NGZmNDQzYzU2NzQwNWU4OTljODE4NWNlOGZhZDk1MDBlMWZjZTg5ZDk1YTYyNTNjMDA0Nzc0MzVhY2YwNGJmZjk5M2RlMWIwMDQ5NWRlZjA4MzRlZTFmMDcKKworVFNUOiAzMjIKK1NLOiAgMDgyNmU3MzMzMzI0ZTdlYzhjNzY0MjkyZjYwMTVkNDY3MGU5YjhkN2M0YTg5ZThkOTA5ZThlZjQzNWQxOGQxNQorUEs6ICBmZmIyMzQ4Y2E4YTAxODA1OGJlNzFkMTUxMmYzNzZmOTFlOGIwZDU1MjU4MTI1NGUxMDc2MDIyMTczOTVlNjYyCitNU0c6IDdmOWUzZTJmMDNjOWRmM2QyMWI5OTBmNWE0YWY4Mjk1NzM0YWZlNzgzYWNjYzM0ZmIxZTliOGU5NWEwZmQ4MzdhZjdlMDVjMTNjZGEwZGU4ZmFkYWM5MjA1MjY1YTA3OTJiNTI1NjNiZGMyZmVlNzY2MzQ4YmVmY2M1NmI4OGJiYjk1ZjE1NDQxNGZiMTg2ZWM0MzZhYTYyZWE2ZmNhYmIxMWMwMTdhOWQyZDE1ZjY3ZTU5NTk4MGUwNGM5MzEzYmM5NGZiYzhjMTEzNGMyZjQwMzMyYmM3ZTMxMWFjMWNlMTFiNTA1Zjg1NzJhZGE3ZmJlMTk2ZmJhODIyZDlhOTE0NDkyZmE3MTg1ZTlmM2JlYTQ2ODcyMDBhNTI0YzY3M2ExY2RmODdlYjNhMTQwZGNkYjZhODg3NTYxMzQ4OGEyYjAwYWRmNzE3NTM0MWMxYzI1NzYzNWZhMWE1M2EzZTIxZDYwYzIyODM5OWVlYTA5OTFmMTEyYzYwZjY1M2Q3MTQ4ZTJjNWNlYjk4Zjk0MDgzMWYwNzBkYjEwODRkNzkxNTZjYzgyYzQ2YmM5YjhlODg0ZjNmYTgxYmUyZGE0Y2RkYTQ2YmNhYTI0Y2M0NjFmNzZlZTY0N2JiMGYwZjhjMTVhYzVkYWE3OTViOTQ1ZTZmODViYjMxMDM2MmU0OGQ4MDk1Yzc4MmM2MWM1MmI0ODFiNGIwMDJhZDA2ZWE3NGI4ZDMwNmVmZjcxYWJmMjFkYjcxMGE4OTEzY2JlNDgzMzJiZTBhMGIzZjMxZTBjN2E2ZWJhODVjZTMzZjM1N2M3YWVjY2QzMGJmYjFhNjU3NDQwOGI2NmZlNDA0ZDMxYzNjNQorU0lHOiA0YmFjN2ZhYmVjODcyNGQ4MWFiMDlhZTEzMDg3NGQ3MGI1MjEzNDkyMTA0MzcyZjYwMWFlNWFiYjEwNTMyNzk5MzczYzRkYWQyMTU4NzY0NDFmNDc0ZTJjMDA2YmUzN2MzYzhmNWY2ZjAxN2QwODcwNDE0ZmQyNzZhOGY0MjgwOAorCitUU1Q6IDMyMworU0s6ICAwMGFkNjIyNzk3N2I1ZjM4Y2NkYTk5NGQ5MjhiYmE5MDg2ZDJkYWViMDEzZjg2OTBkYjk4NjY0OGI5MGMxZDQ1CitQSzogIDkxYTRlYTAwNTc1MmI5MmNiZWJmOTlhOGE1Y2JlY2QyNDBhZTNmMDE2YzQ0YWQxNDFiMmU1N2RkYzc3M2RjOGUKK01TRzogY2I1YmM1Yjk4YjJlZmNlNDM1NDNlOTFkZjA0MWUwZGJiNTNlZDhmNjdiZjBmMTk3YzUyYjIyMTFlN2E0NWUyZTFlYzgxOGMxYTgwZTEwYWJmNmE0MzUzNWY1Yjc5ZDk3NGQ4YWUyOGEyMjk1YzBhNjUyMTc2M2I2MDdkNTEwM2M2YWVmM2IyNzg2YmQ1YWZkNzU2MzY5NTY2MDY4NDMzN2JjMzA5MDczOWZiMWNkNTNhOWQ2NDQxMzliNmQ0Y2FlYzc1YmRhN2YyNTIxZmJmZTY3NmFiNDViOThjYjMxN2FhN2NhNzlmYzU0YTNkN2M1Nzg0NjZhNmFhNjRlNDM0ZTkyMzQ2NWE3ZjIxMWFhMGM2MTY4MWJiODQ4NmU5MDIwNmEyNTI1MGQzZmRhZTZmYjAzMjk5NzIxZTk5ZTJhOTE0OTEwZDkxNzYwMDg5YjVkMjgxZTEzMWU2YzgzNmJjMmRlMDhmN2UwMmM0OGQzMjNjNjQ3ZTk1MzZjMDBlYzEwMzkyMDFjMDM2MjYxOGM3ZDQ3YWE4ZTdiOTcxNWZmYzQzOTk4N2FlMWQzMTE1NGE2MTk4YzVhYTExYzEyOGY0MDgyZjU1NmM5OWJhZjEwM2VjYWRjM2IyZjNiMmVjNWI0Njk2MjNiYzAzYTUzY2FmMzgxNGIxNjMwMGFlZGJkYTUzOGQ2NzZkMWY2MDcxMDI2MzlkYjJhNjJjNDQ2NzA3Y2U2NDY5YmQ4NzNhMDQ2ODIyNWJlODhiMGFlZjVkNDAyMDQ1OWI5NGIzMmZlMmIwMTMzZTkyZTdiYTU0ZGQyYTUzOTdlZDg1Zjk2NmFiMzllZDA3MzBjY2E4ZTdkYWNiOGEzMzYKK1NJRzogZGM1MDFkYjc5ZmQ3ODJiYzg4Y2FlNzkyNTU3ZDVkMjczZjliYTU2MGM3ZDkwMDM3ZmU4NGFjODc5ZDY4NGY2MTJhNzc0NTJjNDQ0M2U5NWMwN2I4YmUxOTJjMzU3NjliMTdiYmRmY2E0MjI4MGRlNzk2ZDkyMTE5ZDgzMzY3MGQKKworVFNUOiAzMjQKK1NLOiAgMTUyMWM2ZGJkNmY3MjRkZTczZWFmN2I1NjI2NGYwMTAzNWMwNGUwMWMxZjNlYjNjYmU4M2VmZDI2YzQzOWFkYQorUEs6ICAyZjYxYTI2ZmZiNjhiYTRmNmUxNDE1MjlkYzI2MTdlODUzMWM3MTUxNDA0ODA4MDkzYjRmYTdmZWRhZWEyNTVkCitNU0c6IDNlM2M3YzQ5MDc4OGU0YjFkNDJmNWNiY2FlM2E5OTMwYmY2MTdlYmRmZjQ0N2Y3YmUyYWMyYmE3Y2Q1YmNmYzAxNTc2MDk2M2U2ZmU1Yjk1NmZiN2NkYjM1YmQ1YTE3ZjU0MjljYTY2NGY0MzdmMDg3NTNhNzQxYzJiYzg2OTJiNzFhOTExNWM1ODJhMjViMmY3NGQzMjk4NTRkNjBiNzgxN2MwNzliMzUyM2FhZmY4NzkzYzJmNzJmZmY4Y2QxMDU5MmM1NGU3MzhkZjFkNjQ1MmZiNzJkYTEzMWM2NzMxZWE1Yzk1M2M2MmVhMTc3YWMxZjQ3MzVlNTE1NDQ3NzM4NzEwOWFmYWUxNWYzZWQ2ZWViMDg2MDZlMjhjODFkNDM4NmYwM2I5Mzc2OTI0YjZlZjhkMjIxZWUyOTU0N2Y4MmE3ZWRlNDhlMWRjMTc3MjNlM2Q0MjE3MWVlYWY5NmFjODRiZWRjMmEwMWRkODZmNGQwODU3MzRmZDY5ZjkxYjUyNjNlNDM5MDgzZmYwMzE4NTM2YWRmZjQxNDczMDhlM2FhZmQxYjU4YmI3NGY2ZmIwMjE0YTQ2ZmRjZDM1MjRmMThkZjVhNzE5Y2U1NzMxOWU3OTFiNGVhNjA2YjQ5OWJmYTU3YTYwZTcwN2Y5NGUxOGYxZmVkMjJmOTFiYzc5ZTYzNjRhODQzZjljYmY5MzgyNWM0NjVlOWNhZTkwNzJiYzlkM2VjNDQ3MWYyMWFiMmY3ZTk5YTYzM2Y1ODdhYWMzZGI3OGFlOTY2NmE4OWExODAwOGRkNjFkNjAyMTg1NTQ0MTFhNjU3NDBmZmQxYWUzYWRjMDY1OTVlM2I3ODc2NDA3YjYKK1NJRzogYTgxN2VkMjNlYzM5OGExMjg2MDFjMTgzMmRjNmFmNzY0M2JmM2E1ZjUxN2JjYzU3OTQ1MGZkYjQ3NTkwMjhmNDk2NjE2NDEyNWY2ZWJkMGQ2YmY4NmZmMjk4YTM5Yzc2NmQwYzIxZmRiMGNiZmRmODFjZDBlYjFmMDNjZDhhMDgKKworVFNUOiAzMjUKK1NLOiAgMTdlNWYwYThmMzQ3NTFiYWJjNWM3MjNlY2YzMzkzMDY5OTJmMzllYTA2NWFjMTQwZmNiYzM5N2QyZGQzMmM0YgorUEs6ICA0ZjFlMjNjYzBmMmY2OWM4OGVmOTE2MmFiNWY4YzU5ZmIzYjhhYjIwOTZiNzdlNzgyYzYzYzA3YzhjNGYyYjYwCitNU0c6IGMwZmFkNzkwMDI0MDE5YmQ2ZmMwOGE3YTkyZjVmMmFjMzVjZjY0MzJlMmVhYTUzZDQ4MmY2ZTEyMDQ5MzUzMzZjYjNhZTY1YTYzYzI0ZDBlYzY1MzlhMTBlZTE4NzYwZjJmNTIwNTM3Nzc0Y2RlYzZlOTZiNTU1MzYwMTFkYWE4ZjhiY2I5Y2RhZjZkZjViMzQ2NDg0NDhhYzdkN2NiN2M2YmQ4MGQ2N2ZiZjMzMGY4NzY1Mjk3NzY2MDQ2YTkyNWFiNTI0MTFkMTYwNGMzZWQ2YTg1MTczMDQwMTI1NjU4YTMyY2Y0Yzg1NGVmMjgxM2RmMmJlNmYzODMwZTVlZWU1YTYxNjNhODNjYTg4NDlmNjEyOTkxYTMxZTlmODgwMjhlNTBiZjg1MzVlMTE3NTVmYWQwMjlkOTRjZjI1OTU5ZjY2OTVkMDljMWJhNDMxNWQ0MGY3Y2Y1MWIzZjgxNjZkMDJmYWJhNzUxMWVjZDhiMWRkZWQ1ZjEwY2Q2ODQzNDU1Y2ZmNzA3ZWQyMjUzOTZjNjFkMDgyMGQyMGFkYTcwZDBjMzYxOWZmNjc5NDIyMDYxYzlmN2M3NmU5N2Q1YTM3YWY2MWZkNjIyMTJkMmRhZmM2NDdlYmJiOTc5ZTYxZDkwNzBlYzAzNjA5YTA3ZjVmYzU3ZDExOWFlNjRiN2E2ZWY5MmE1YWZhZTY2MGEzMGVkNDhkNzAyY2MzMTI4YzYzM2I0ZjE5MDYwYTA1NzgxMDE3MjllZTk3OWY3OTBmNDViZGJiNWZlMWE4YTYyZjAxYTYxYTMxZDYxYWYwNzAzMDQ1MGZhMDQxNzMyM2U5NDA3YmM3NmU3MzEzMGU3YzY5ZDYyZTZhNworU0lHOiBlZmUyY2I2M2ZlN2I0ZmM5ODk0NmRjODJmYjY5OThlNzQxZWQ5Y2U2YjljMWE5M2JiNDViYzBhN2Q4Mzk2ZDc0MDUyODJiNDNmZTM2M2JhNWIyMzU4OWY4ZTFmYWUxMzBlMTU3Y2U4ODhjZDcyZDA1M2QwY2MxOWQyNTdhNDMwMAorCitUU1Q6IDMyNgorU0s6ICAwY2Q3YWE3ZDYwNWU0NGQ1ZmZiOTc5NjZiMmNiOTNjMTg5ZTRjNWE4NWRiODdmYWQ3YWI4ZDYyNDYzYzU5YjU5CitQSzogIDQ4ODk4NTVmZTQxMTZiNDkxMzkyN2Y0N2YyMjczYmY1NTljM2IzOTRhOTgzNjMxYTI1YWU1OTcwMzMxODVlNDYKK01TRzogMjhhNTVkZGE2Y2QwODQ0YjY1NzdjOWQ2ZGEwNzNhNGRjMzVjYmM5OGFjMTU4YWI1NGNmODhmZDIwY2M4N2U4M2M0YmJhMmQ3NGQ4MmNlMGY0ODU0ZWM0ZGI1MTNkZTQwMDQ2NWFhYTVlZWU3OTBiYzg0ZjE2MzM3MDcyZDNhOTFjZGU0MGQ2ZTBkZjFiYTBjYzA2NDVmNWQ1Y2JiYjY0MjM4MWQ3YjllMjExZDI1MjY3YThhY2Y3N2QxZWRiNjljM2E2MzBmNWIxMzNkMjRmMDQ2YTgxYmYyMmZmMDNiMzFkODQ0N2UxMmMzZjdiNzcxMTRhNzBjYmQyMGJiZDA4YjBiMzgyN2E2YmJjZjkwNDA5ZTM0NDQ0N2E3ZmJjNTliZGQ5N2Q3MjkwNzFmOGQ3MWRjYzMzZTZlZjJjYmFiMWQ0MTFlZGYxMzczNGRiMWRkOTcwMzI3NmY1ZWIyZDZhYTJjYjg5NTJkZDY3MTJiZmFlODA5Y2UwOGMzYWE1MDJiODEzNTcxM2ZhYzBhOWMyNWIxZDQ1YjZhNTgzMWUwMjQyMWJiYTY1YjgxYTU5NmVmYTI0YjA1NzZiZDFkYzdmZGZiNDliZTc2Mjg3NWU4MWJkNTQwNzIyYmMwNjE0MGI5YWEyZWY3Yjg0YTgwMWU0MWRlZDY4ZDQ1NDZhYzQ4NzNkOWU3Y2VkNjQ5YjY0ZmFkYWYwYjVjNGI2ZWI4ZDAzNjMxNTIzM2Y0MzI2Y2EwMWUwMzM5MzA1MGNkMDI3YzI0ZjY3MzAzZmI4NDZiZDJjNmIzZGJhMDZiZWQwZDU5YTM2Mjg5ZDI0YmQ2NDhmN2RiMGIzYTgxMzQ2NjEyNTkzZTNkZGQxOGM1NTcKK1NJRzogYmY5MTE1ZmQzZDAyNzA2ZTM5OGQ0YmYzYjAyYTgyNjc0ZmYzMDQxNTA4ZmQzOWQyOWY4NjdlNTAxNjM0YjkyNjFmNTE2YTc5NGY5ODczOGQ3YzcwMTNhM2YyZjg1OGZmZGQwODA0N2ZiNmJmM2RkZGZiNGI0ZjRjYmVlZjMwMDMKKworVFNUOiAzMjcKK1NLOiAgMzMzNzFkOWU4OTJmOTg3NTA1MmFjOGUzMjViYTUwNWU3NDc3YzFhY2UyNGJhNzgyMjY0M2Q0M2QwYWNlZjNkZQorUEs6ICAzNTkyOWJkZWQyN2MyNDljODdkOGI4ZDgyZjU5MjYwYTU3NTMyN2I1NDZjM2ExNjdjNjlmNTk5MmQ1YjhlMDA2CitNU0c6IDI3YTMyZWZiYTI4MjA0YmU1OWI3ZmY1ZmU0ODhjYTE1OGE5MWQ1OTg2MDkxZWNjNDQ1OGI0OWUwOTBkZDM3Y2JmZWRlN2MwZjQ2MTg2ZmFiY2JkZmY3OGQyODQ0MTU1ODA4ZWZmZmQ4NzNlZDljOTI2MTUyNmUwNGU0ZjcwNTBiOGQ3YmQyNjdhMGZlM2Q1YTQ0OTM3OGQ1NGE0ZmViYmQyZjI2ODI0MzM4ZTJhYWFmMzVhMzJmZjBmNjI1MDRiZGE1YzJlNDRhYmM2MzE1OWYzMzZjZjI1ZTZiYjQwZGRiN2Q4ODI1ZGZmMThmZDUxZmMwMTk1MWVhZWRjZDMzNzA3MDA3ZTEyMDNjYTU4YjRmN2QyNDJmODE2NmE5MDdlMDk5OTMyYzAwMWJmYjFlYzlhNjFlMGVmMmRhNGU4NDQ2YWYyMDgyMDEzMTVkNjk2ODE3MTBkNDI1ZDI0MDBjMzg3ZDdiOWRmMzIxYTRhZWM2MDJiOWM2NTZjM2UyMzEwYmZmODc1NmQxOGI4MDIxMzRiMTU2MDRmNGVkYzExMTE0OWE5ODc5ZTMxMjQxZGQzNGY3MDJmNGMzNDk2MTdiMTM1Mjk3NjlhNzcyZjVlNTJhODljMDk4ZTBkY2E1OTIwNjY3ODkzYTI1MDA2MWIxNzk5MTYyNmViOTMxOTI5ODY4NWJlNDZiNmE4YjY4NDIyNDQ0ZmE1YTM2YmNmM2E2ODdlMmVjY2I5MzIyYzg3ZGM4MDE2NWRhODk4OTMwODUwYjk4ZmM4NjNjYWRhMWFhOTljNmQ2MWM0NTFiOWNjZjQ4NzRjN2YwZTc1YjBhMGM2MDJmMDQ0ODEyYzcxNzY1YWRhZjAyMDI1Mzk1YjAKK1NJRzogOTg1Y2E0NDZkZGMwMDc4MjdjYzhmMjg1MmNiZDgxMTVlZjhjNTk3NWU5ZDdjZTk2ZDc0ZGZlZDg1OWFhMTRhNGMxNTI1NDAwNmJlYTVlMDgzNTllZmUyNjI1ZDcxNWUwODk3ZWU1YTE2ZjE1MTIwM2JlNTAxMDQxODYzN2RlMDUKKworVFNUOiAzMjgKK1NLOiAgYmVlZGI4MDczZGY1OGY4YzFiZmZiZGJkNzdlYzdkZWNiMmM4MmE5YmFiZWNlZmMwMzMxNTA3YmRjMmMyYTdlNworUEs6ICBiMjdlOTA4YjgwNWUyOTZmYzMwZDJlNDc0YjA2MGNkNTBjMGY2ZjUyMGIzNjcxNzEyMTgzYmQ4OWQ0ZTczM2U5CitNU0c6IDM1Y2E1N2YwZjkxNWU1MjA5ZDU0ZWE0Yjg3MWZmYjU4NTM1NGRmMWI0YTRhMTc5NmZiZTRkNjIyN2QzZTFhYmE1MTcxZWQwMzkxYTc5ZTgzZTI0ZDgyZmRhZmQxNWMxN2IyOGJmNmM5NGQ2MThjNzRkNjUyNjRlNThmYWFhY2QyOTAyODcyZmRkMGVmYTIyZThkMmQ3Y2U4ZTNiODE5N2YwYzM2MTViMGEzODUyMzVmYTlmZDhlNDU2NGVlNmU2YjE2NTBiNGNmYjk0ZDg3MmM4MDVjMzJkNGYzYTE4Zjk2NjQ2MWQzYWRiYjYwNWZhNTI1ODg0ZjhlYjE5NzYyNzM5NmJhNGQ5OTVkNzhhYzAyOTQ4YTBlYWFiYjU4NTE5YjlhOGUyZTc5ODVjZDFkZTJjNzFkODkxOGQ5NmEwMTY4NjYwY2UxN2NkZGYzNjRlM2VjMGQ0YmQ5MGYyMTA0NzUxYTE5MjdlZTFkMjNmM2U3YTY5ODQwZWQwNDBiMDBlNWY2ZTQ4NjZlYzU4ODEzMTQ5Y2MzODJhZWJmNjE2MjYwOGM3OTU3NGQ1NTNmNDcyMzBlOTI0YTBlZjFlYmY1NWQ4ZTFhNTJhYmI2MmEyZDdhYzg2MDI3YzdjMDNjYzgzZmExOTQ5ZGEyOWUyZjMwMzdhYjk4NmZkMmZmZmU2NTBlMzE0OWJhYmFlNWE1MGIxZWU5Njk2ZjNiYWJlYzcyZTI5Njk3YzgyNDIyODE0ZDI3MjA4NTUwMGZkODM3ZmUzYzdhOTczZWY0YzE2OWFmMTJkZDdmMDI3MDA2MjBiYjA0NWJkYmY4NDYyM2YzMjYzNTA1NzBiM2NhZGJjOWFlYTQyMDBiMjgyODdlMTdhYgorU0lHOiA4Yzg5MGNjY2FkYzc3NjBlMWU4MmU0M2M0NGIzZGMwYjY4NWE0OGI0NzlhZTEzY2MwYTZiMDU1N2QwZmIxY2JhYmJhNjNkMmE5Njg0MzQxMmVhOGQzNmM1MGFjYmY1MmI5MmNmYjJkY2U0OWRjNDhhZjZkZGNmOGVlNDdhODYwOAorCitUU1Q6IDMyOQorU0s6ICA5MTg0ZWY2MTg4MTY4MzI1OTJiYzhlYjM1ZjRmZmQ0ZmY5OGRmYmY3Nzc2YzkwZjJhYWQyMTJjZTdlMDMzNTFlCitQSzogIDY4N2I3NzI2MDEwZDliZGUyYzkwZTU3M2NkMmEyYTcwMmZmMjhjNGEyYWY3MGFmYzczMTVjOTRkNTc1NjAxZTUKK01TRzogNzI5ZWI3ZTU0YTlkMDBjNTg2MTdhZjE4YzM0NWI4ZGM2ZTViNGUwZjU3ZGUyZjNjMDJlNTRhMmVjOGYxNDI1ZWMyZTI0MDc3NWI1YWIwYzEwZjg0YWM4YmFmZGE0NTg0ZjdlMjFjNjU1ZmFlY2Q4MDMwYTk4OTA2YmQ2ODM5OGYyNmI1ZDU4ZDkyYjZjZjA0NWU5YmQ5NzQzYzc0YzlhMzQyZWM2MWNlNTdmMzdiOTgxZWFjNGQ4YmYwMzQ2MDg4NjZlOTg1YmI2ODY4NmE2OGI0YTJhZjg4Yjk5MmEyYTZkMmRjOGNlODhiZmIwYTM2Y2YyOGJiYWI3MDI0YWJmYTJiZWE1MzMxM2I2NmM5MDZmNGY3Y2Y2Njk3MGY1NDAwOTViZDAxMDRhYTQ5MjRkZDgyZTE1NDEzYzIyNjc5Zjg0N2U0OGNkMGM3ZWMxZjY3N2UwMDVmZWMwMTc3ZmJkNWM1NTlmYzM5YWRkNjEzOTkxZmJhZWFlNGQyNGQzOWQzMDllZjc0NjQ3ZjgxOTJjYzRjNjJkMDY0MjAyOGM3NmExYjk1MWY2YmM5NjM5ZGViOTFlY2MwOGJlNjA0M2YyMTA5NzA1YTQyYzdlYWU3MTI2NDlkOTFkOTZjY2JiZmI2M2Q4ZDBkZDZkZDExMjE2MGY2MTM2MWVjZGM2NzkzOTI5Y2E5YWVmOWFiNTY5NDRhNmZhNGE3ZGYxZTI3OWVhZjU4Y2U4MzIzYTljZjYyYzk0Mjc5ZmZmNzQ0MGZiYzkzNmJhYTYxNDg5Yzk5OTMzMGJhZGNiOWZjMGUxODRiYzUwOTNmMzMwY2JiMjQyZjcxZmIzNzg3MzhmZWExMDUxMWRkNDM4MzY0ZDdmNzZiY2MKK1NJRzogYjNjMjRlNzUxMzJjNTYzNDc1NDIyZDVlYTQxMmI1YzFlOGU2ZTVlYTFjMDhlYWQxMzkzYzQxMmRhMTM0YzlhMTYzODI4NGVhN2UyY2EwMzJmZTNkM2UzMmE5MDY2YThjODgzOTkwM2Y2ZWY0NmU5NjZiYjVlNDkyZDhjMmFhMDAKKworVFNUOiAzMzAKK1NLOiAgMzU0ZTEzMTUyZWUxZmU3NDhhMTI1MjIwNGM2NTI3YmRjMWIxZWIyZWI1MzY3ODE1MGU2MzU5OTI0NzA4ZDgxMgorUEs6ICBkNDVmZjZjNWZiODNlN2JiOTY2OWFhODk2MGRlYjdkYmM2NjVjOTg4NDM5YjZjOWVmNjcyYzY4MTFkYzhiY2Y2CitNU0c6IDhlNWZjY2Y2NmIxYmE2MTY5Y2I2ODU3MzNkOWQwZTAxOTAzNjFjOTBiY2FiOTVjMTYzMjg1YTk3ZmUzNTZkMmJkY2RlM2M5MzgwMjY4ODA1YTM4NGQwNjNkYTA5Y2NkOTk2OWNjM2ZmNzQzMWU2MGE4ZTlmODY5Y2Q2MmZhYTBlMzU2MTUxYjI4MGJjNTI2ZTU3N2MyYzUzOGM5YTcyNGRjNDhiZjg4YjcwMzIxZDdlMWVlZWRiM2M0YWY3MDY3NDhjOTQyZTY3YmRhYmRiNDFiZWMyOTc3YjE1MjMwNjllMzFlMjliNzYzMDAyODhmODhhNTFiMzg0YjgwY2MyNTI2ZjE2NzkzNDBkZGVjMzg4MWY1Y2QyOGIwMzc4ZDljZDBhODEyYjY4ZGQzZjY4ZjdhMjNlMWI1NGJlZTc0NjZhYzc2NWNmMzhkZjA0ZDY3NDQxZGZhNDk4YzRiZmZjNTIwNDVmYTZkMmRiY2RiZmEzM2RmYWE3NzY0NGZmY2NlZjBkZWNkYjY3OTBjNzBhMGQ3MzRlYzI4N2NjMzM4Y2I1YTkwOWMwMDU1MTg5MzAxMTY5YzRmNzcwMmMwNWMwOTExYTI3YjE2ZWY5ZWQ5MzRmYTZhMGNhN2IxM2U0MTM1MjM0MjI1MzU2NDc5NjgwMzBlZGM0MGNkNzNlN2Q2YjM0NWI3NTgxZjQzODMxNmQ2OGUzY2QyOTJiODQ2ZDNmNGY3YzQ4NjJiYzdlNmIzZmI4OWEyN2Y2ZjYwY2Q3ZGIyZTM0ZWM5YWFlMTAxM2ZlMzdhY2ZmOGFkODg4Y2I5YTU5M2VmNWU2MjFlYWU1MTg2YzU4YjMxZGNmZGUyMjg3MGUzMzZkMzNmNDQwZjZiOGQ0OWEKK1NJRzogZGUyYjQ2ZTY1ZjNkZWNlZjM0MzMyZTUwMGYyZTExMzA2ZmJkY2YxYmU4NWExYzFlZTY4YmEzMDQ1ZGNlYzJjN2JlNjA4ZDIyOTI3ZGExZjQ0YzBlMjA4M2FlNjIyY2YzYzI5ZDg5Mzg4Nzk5NGVmY2ZhMmNhNTk0ZjUwNTFmMDMKKworVFNUOiAzMzEKK1NLOiAgN2ZmNjJkNGIzYzRkOTlkMzQyZDRiYjQwMWQ3MjZiMjFlOTlmNGVmNTkyMTQ5ZmMzMTFiNjg3NjFmNTU2N2ZmNgorUEs6ICA3ZmRmZGI5ZWNhMjlkM2YwMWQ5NDg2ZDdlMTEyY2UwM2FhMzdiOTEzMjZhNDI4M2I5YzAzOTk5YzVlZGEwOTlhCitNU0c6IDk5YzQ0Yzc5NjU3MmE0ODIzZmM2YzM4MDc3MzA4MzkxNzM3NzRjMDVkYmZjMTQ5MmVkMGQwMDUwOWE5NWExZGUzNzI3NGIzMTM1ZWQwNDU2YTE3MThlNTc2NTk3ZGMxM2YyYTJhYjM3YTQ1YzA2Y2JiNGEyZDIyYWZhZDRkNWYzZDkwYWIzZDhkYTRkY2RhYTA2ZDQ0ZjIyMTkwODg0MDFjNWRjZWVlMjYwNTVjNDc4MmY3OGQ3ZDYzYTM4MDYwOGUxYmVmODllZWVmMzM4YzJmMDg5N2RhMTA2ZmFmY2UyZmIyZWJjNWRiNjY5YzdjMTcyYzljZmU3N2QzMTA5ZDIzOWZlNWQwMDVjOGVlNzUxNTExYjVhODgzMTdjNzI5YjBkOGI3MGI1MmY2YmQzY2RhMmZlODY1Yzc3ZjM2ZTRmMWI2MzVmMzM2ZTAzNmJkNzE4YmVjOTBlZTc4YTgwMjgxMTUxMGM0MDU4YzFiYTM2NDAxNzI1M2FhODQyOTIyZTFkZDdkN2EwZjBmYzljNjllNDNmYzRlYWVmZmFhZjFhZTVmYTVkMmQ3M2I0MzA3OTYxN2JhYmEwMzA5MjNmZTViMTNkMmMxYzRmZTZmYWMzZjJkYjc0ZTIwMjBhNzM0YjYxMjFhMDMwMmZjZTgyMGJhMDU4MGNlNjEzNTM0OGZkZjA2MzJlMDAwOGRmMDNlZTExMjE2OGY1Y2ZhMDAzN2EyNmExZjY5YjFmMTMxN2VkZjJhM2FiMzY3NDU1YTc3ZTAwNjkxMjE1ZDdhYTMxMzNjMjE1OWQzZGEyYjEzNGNmMDRmMGRlZmJmMDdhNjA2NDAxMWU2NGRkMTRkNGY4ZjA2NDM1NjY1NTQyODgwNGMyNzcxYQorU0lHOiAwNThmNzk5MjdmYmY2MTc4NzI0ODE1YzdiMTFjNjNiYWFhOTBiY2MxNWQ3MjcyYmUwODJmOGE5MTQxODYxYzgxNjQzMzA1NWY2Y2Y2NDkxNDI0ODUzZjllYzc4YmI5MWFjZTkxM2E5MzQxMWI0ZTVlZDU4YmM0YmE1NzE1YzYwYQorCitUU1Q6IDMzMgorU0s6ICA2Y2FiYWRkMDNmOGEyZTZlYmFiOTZhNzRmODBlMTgxNjRlNGQxYjZiYWE2NzhmNWE4MmUyNTYwNGFmOTg5YWFmCitQSzogIDJhNGEzMTc5NTY0MTk0ZTAwMTAwYzE4YmMzNTM1MWQ4YjEzNWJiYWU1YjMyYjI4ZmNlMWQ3YjY3NjZjYTRiMzIKK01TRzogMjc5Zjc4Y2YzYjljY2ZjNmUxYjAxZTFhODJmNTBlZDE3MmU5YThlMWU3MDJiYjE1NjYxZGQ3ZGMzYTQ1NmZmN2E3YTdmZGZiMDgxZGIzODY3MDc5NjMwYzdmNzBmZDc1MzI5MmVjNjBlY2JmNTA2MzJlOWFhNDViOTk2NTA1YzY2ZTZkYzNjNmFlODkyZTIxYjZhODcwNWU0YmJhZThmMTZhMzM3ODU1NGIzMWZkYjAxMzlkY2QxNWM5NmE4YTdlNGI4ODc1NmE4NmQxOGRiNWRjNzRmZDc2OTExOTdkZDg4ZTJjN2Q1ZGY1MmIwNDkzNDRjZGM0NzdjOWNkN2U4OWVkYTk5Y2NmYjFkMDA4MTRkMDE1MmI5NjU0ZGYzMjc5MzcyY2E1ZjE4YjFjOTQ2ZjI4OTRhNzZiMDc5ZGRiMWMzY2Q2MWZiYjk2OWFlZWM5MTkzYTZiODhmYjdkMTM2YzA3Zjk4MjFlNWMxMDc0YjRlOTNiY2FmNmZhMTRkMGQxZDdlMTcwNzU4OWQ3N2VjMTMzNzIwNmU1M2ExZjA2Y2MyNjY3MmZmOTVjMTNkNWZmNDQ0NzY2OTMxYmEzMGEwYWZkY2RhZGQyMDk4ZTljNDFmZDg3YTNmMjNjZDE2ZGJiMGVmYmY4MDkyY2UzM2UzMjdmNDI2MTA5OTBlMWNlZTZjYjhlNTQ5NTFhYTA4MWU2OTc2NWFlNDAwOWFlZWQ3NThlNzY4ZGU1MGMyM2Q5YTIyYjRhMDZkYzRkMTlmYzhjYmQwY2RlZjRjOTgzNDYxNzU1ZDBhM2I1ZDZhOWMxMjI1M2UwOTU2ODMzOWZmN2U1Zjc4YzVmZGY3ZWM4OWY5MTg2YTYyMWE4YzBlZWQxMWI2NzAyMmUKK1NJRzogNGU2NWM2YzFkNDkzMDQ1ZThhOTI1MGUzOTdjMWQxZDMwZmZlZDI0ZGI2NmE4OTYxYWE0NThmOGYwZmNiNzYwYzM5ZmU4NjU3ZDdhYjhmODQwMDBiOTZkNTE5NzE3Y2ZmNzFmOTI2NTIyYzFlZmVjN2Y4YjI2MjRlYWU1NWY2MGMKKworVFNUOiAzMzMKK1NLOiAgMGZhMGMzMmMzYWUzNGJlNTFiOTJmOTE5NDU0MDU5ODFhOGUyMDI0ODg1NThhOGUyMjBjMjg4YzdkNmE1NTMyZAorUEs6ICBkNmFlZTYyYmQ5MWZjOTQ1MzYzNWZmY2MwMmIyZjM4ZGNhYjEzMjg1MTQwMzgwNTgwY2NkZmYwODY1ZGYwNDkyCitNU0c6IDUzZjQ0YmUwZTU5OTdmZjA3MjY0Y2I2NGJhMTM1OWUyODAxZGVmODc1NWU2NGEyMzYyYmRkYWY1OTdlNjcyZDAyMWQzNGZmYWNlNmQ5N2UwZjJiMWY2YWU2MjVmZDMzZDNjNGY2ZTlmZjdkMGM3M2YxZGE4ZGVmYjIzZjMyNDk3NWU5MjFiYjI0NzMyNTgxNzdhMTY2MTI1NjdlZGY3ZDU3NjBmM2YzZTNhNmQyNmFhYWJjNWZkZTRlMjA0M2Y3M2ZhNzBmMTI4MDIwOTMzYjFiYTNiNmJkNjk0OThlOTUwM2VhNjcwZjFlZDg4MGQzNjUxZjJlNGM1OWU3OWNhYmM4NmU5YjcwMzM5NDI5NDExMmQ1ZDhlMjEzYzMxNzQyM2I1MjVhNmRmNzAxMDZhOWQ2NThhMjYyMDI4YjVmNDUxMDBjYjc3ZDExNTBkOGZlNDYxZWVkNDM0ZjI0MTAxNWYzMjc2YWQ3YjA5YTI5MWI0YTdmMzVlM2MzMDA1MWNiZjEzYjFkNGE3ZmEwYzgxYTUwZjkzOWU3YzQ5NjczYWZkYzg3ODgzYzllM2U2MWY1YTFkZjAzNzU1NDcwZmRhNzRiZjIzZWE4ODY3NmIyNThhOTdhMjgwZDVmOTBiNTJiNzE0YjU5NjAzNWJhZTA4YzhkMGZlNmQ5NGY4OTQ5NTU5YjFmMjdkNzExNmNmNTlkZDNjZmJmMTgyMDJhMDljMTNmNWM0ZmJjOGQ5NzIyNTQ5Mjg4N2QzMjg3MGMyMjk3ZTM0ZGViZDk4NzZkNmQwMWFjMjdhMTZiMDg4YjA3OTA3OWYyYjIwZmViMDI1MzdjZGEzMTRjNDNjYjJkY2EzNzFiOWRmMzdlZDExZWM5N2UxYTdhNjk5M2EKK1NJRzogN2U5YWI4NWVlOTRmZTRiMzVkY2I1NDUzMjlhMGVmMjU5MjNkZTVjOWRjMjNlN2RmMWE3ZTc3YWIwZGNmYjg5ZTAzZjRlNzg1Y2E2NDI5Y2IyYjBkZjUwZGE2MjMwZjczM2YwMGYzM2E0NWM0ZTU3NmNkNDBiZGI4NGYxYWUwMDEKKworVFNUOiAzMzQKK1NLOiAgN2IwNmY4ODAyNmZhODZmMzlmY2UyNDI2ZjY3Y2M1OTk2YmVkZDBjZmM0YjVlYmIxYjVlM2VkYmI0N2UwODBhYQorUEs6ICAzZjE0NjllZTZhMmU3ODY3ZTJlOTAxMmQ0MDJjZjVhNDg2MTQ5N2MwMWRmODc5YTFkZWIxYzUzOTgzMGI1OGRlCitNU0c6IDcxMTc1ZDRlMjE3MjEyOTdkOTE3NmQ4MTdmNGU3ODVkOTYwMGQ5MjNmOTg3ZmUwYjI2ZmQ3OWQzM2E1ZWE1ZDFlODE4YjcxZjBmOTJiOGM3M2FmZGRhYmRjYzI3ZjZkMTZlMjZhYWZhODc0Y2ZkNzdhMDBlMDZjMzZiMDQxNDg3NTgyYmI5MzM3NjBmODhiNDE5MTI3MzQ1Nzc2ZWE0MThmODM1MjIyNTRmZWQzMzgxOWJjNWM5NWY4Zjg0MDRjYzE0NGViZjE0ODZjODg1MTU0MDlkMzQzM2FhZjUxOWQ5OTIwZjUyNTZlNjI5NDE5ZTlhOTU1ODBhMzViMDY5YjhkMjU1MzNkZmNiYzk4YWQzNjQwNGE5NTE4MDhlMDEzNzhjMDMyNjYzMjZkMTIwMDQ2OTc1ZmRlMDdkYWVmMzI2NmNhYWNkODIxYzE0MDM0OTlkN2ZkZjE3YzAzM2M4ZDhjM2YyOGYxNjJiNWYwOWRmZGFjYTA2Mjg1ZjAwYzZjYjk4NmRmZGY1MTUxYWE2NjM5NjA4YjViMTNlNzhkNjVhNDM2ODU4NWIxNjEzODc1NGZiZDExMzgzNWE2ODZjZDA2NmMyYjg5YmIwOTUzYzI0ZDUwZTc3YmYwZmM0NTdjMWUwZmNmNWQ0NGRhOGRiOWE4OGYwNjJiZTNiNjg4ZDVjZGNmZjFkMWMwMGU4MWVjOWQ0MTM4ODIyOTViMzQxZmVlOGZhNDI3ZGMxMDlhZGViNWYyODRlZWMyMDJmMWJlZjExNWJmOTZiMTc4MmQzY2NkZWI2ODJiNjliZjkyZDE3MGMwMDdkNWRmODBlMWVkOTYyZjY3N2RjMjRhMTQ1YTFlNGU4MjllOGRlYzAxMDRlNWY3ODM2NTk0NAorU0lHOiA0MmYxMzNlMzRlM2ViNzAzMmExMzNlZDc4MTUzN2VjNjJlNDRhNWNlODM4MWU1ZTBiZjllMTNhOTE0YTRiMmM3NTc4MTFkNmQzYjFlODY2NzI0MjRlYTQyMzBkMTBmN2M2MTBhYmI3MDY5ZTYxZTMxOWI0MDY2YTJiZDdiYzkwMAorCitUU1Q6IDMzNQorU0s6ICBjM2Y1ZTE0OTk2OGEyNGY0ZGU5MTE5NTMxOTc1ZjQ0MzAxNWNjY2EzMDVkNzExOWVkNDc0OWU4YmY2ZDk0ZmM3CitQSzogIDM5YWFjY2RiOTQ4YTQwMzg1MzhhNDU4ODMyMmY4MDZiYjEyOWI1ODc2YzRiZWM1MTI3MWFmZTRmNDk2OTAwNDUKK01TRzogYzQ2MzcwZTM3ZjJlMGNhZGNmOTM0MDJmMWYwY2IwNDhmNTI4ODFiYTc1MGI3YTQzZjU2YWIxMWNlMzQ4NzMyZmI1N2U3ZjlhYWY4ZGZjYmU0NTVlMTRlOTgzYzI0OGQwMjZhMjdlN2YxNDhkNWRiNWE1M2Y5NDYzNTcwMmI4OTUxMjc3NzEwNDdhODc2ZDE0MTA3Mzg2YzVlMGZmODkzMzM0NWJiZDdhOTM2ZDk5MGQzM2VmYTI4YzJlYzRlNDg2NGZmZDJmZjU3NmY3Yzg4Zjk1NGNmYzFjNDU5ZTg4M2JiNzEyZGFlM2NkZjY2MzIwNjZmMWY0ZDEzYTUwOTYxNWIzMzYwY2FkYzVhMzA3ZjIzZTUyYTUxYjQwYTZmZWViZTBiMThkMGU5ZWU0ZTM0OGYzM2NkODFhOGRlZjIyMmY2YTU5YjEyODYxZDMzNWJkOWFmODVjYzAwNGJlNDZmMWQzYTQyNGY0ODcwYWU5ZGM1ODdlNWE0YWRlMTM2YjkzNzA2NDkzNDhjMzNhYzNiZjFmZWJlZWJmZmVhMzcwODVlZDU5Y2FjOWQ5ZTY5NjQ3MGIyMzQ2MDllOWExMGE5ZDQzMWZmOTFlNjljYjUxMzVmZDExN2ZmNThhMzY1Mzk3NDRlYmU3MGNlYTY5NzNjMDBjN2E0ZDU3YjYyZjRhNzEzNmQ3MzFiOGU0NmZmMThlYzBlZDY5MDcwMDMxOTA1MDc1ZDg1NDFkNTY4Y2ZjZTZlZWI3NjI0MmI3ODE5YTdiNmE5MzU1MjExMWJiODhmMTY1NTI3Y2ZhNjk2NmQzOWZjYmUwYTdkZWEwMDhlMzljN2EzZTU3N2FiMzA3Y2QxZDBlYTMyNjgzM2Q1MjY1NGUxNzI5NTVmM2ZjZDQKK1NJRzogNWZhMmI1MzE2NzdiMDBiODViMGEzMTNjYmQ0NzlmNTVmNGFiM2VjNWNmY2U1ZTQ1NGQyYjc0MTc2Y2NjMzM5OWM4OTlmOWQ2YjUxZWQ0YzFlNzYxODVhYzlmZTczMGM0YjQwMTQwNDRmNzA0MTE4NWJjM2M4NTcyMmViMmVhMDIKKworVFNUOiAzMzYKK1NLOiAgNDIzMDVjOTMwMmY0NWVhNmY4N2UyNmUyMjA4ZmQ5NGIzYzRhZDAzN2IxYjZjODNjZjY2NzdhYTEwOTZhMDEzYworUEs6ICAzYjk3YjFmMTFjZTQ1YmE0NmZmYmIyNWI3NmJmYzVhZDdiNzdmOTBjYzY5ZWQ3NjExNWRlYTQwMjk0NjlkNTg3CitNU0c6IGQxMTA4MjhkNDQ5MTk4ZDY3NWU3NGU4ZTM5NDM5ZmQxNWU3NWJmMmNjMWY0MzBhYmZiMjQ1ODM2ODg1YmFmYzQyMGY3NTRiODlkMmZiYmY2ZGQzNDkwNzkyZTdhNGY3NjYwNzNjZmUzYjMwMmQwODk4MzFhY2U4NjllMjczMGZkZTQ1YzIxMjFlYzNlZjIxN2FhOWM0M2ZhN2NjN2U5ZWQwYTAxYWQ5ZjFkMmZjMzYxMzYzOGNhOWZjMTkzYzk4YjM3NDU1YmY1ZGJmOGYzOGI2NDcwOGRmZGNhNmMyMWYwOTc1ZjEwMTdjNWRhNWY2NDM0YmRhOWYwMzNjZWMyYTYzMWFiNTAzMThlMDE3YjE3MGIyNDBiZjAxZWI4YjM2YzdlMWNiNTllNzczNmFjMzQ0NDQyMDgxMzJhOGY1OWU0ZjMxM2Q2NWQ4NDljNmE0ZmRmMTNlMjBlY2FlZTM4MjNlNTg5YTE3MWIzOWIyNDg5NDk3YjA2ZTZmZjU4YzJjOWYxZGM1ZDNhYTNiZDEwZTY0NDNlMjJkNDJkMDdiNzgzZjc5ZmQ0M2E0NmUxY2RlMzE0YjY2M2E5NWY3MjQ2ZGVhMTMxZmNkNDZkMWRjMzMzYzU0NTRmODZiMmM0ZTJlNDI0ZGVhNDA1Y2MyMjMwZDRkY2QzOWEyZWFiMmY5Mjg0NWNmNmE3OTk0MTkyMDYzZjEyMDI3NDllZjUyZGNiOTZmMmI3OWVkNmE5ODExOGNhMGI5OWJhMjI4NTQ5MDg2MGViNGM2MWFiNzhiOWRkYzZhY2M3YWQ4ODNmYTVlOTZmOWQwMjkxNzEyMjNhYmY3NTczZTM2MjMwZTBhODFmNmMxMzExMTUxNDczZWUyNjRmNGI4NDJlOTIzZGNiM2IKK1NJRzogMThkMDVlNWQwMTY2OGU4M2Y0MGZhM2JiZWUyOGIzODhhY2YzMThkMWIwYjVhZDY2OGM2NzJmMzQ1YzhlZGExNGMyZjg4NGNkMmE5MDM5NDU5Y2UwODEwYmM1YjU4MGZlNzBkMzk2NGE0M2VkYjQ5ZTczYTZmZjkxNGJiZjA0MGMKKworVFNUOiAzMzcKK1NLOiAgYzU3YTQzZGNkN2JhYjg1MTYwMDk1NDY5MThkNzFhZDQ1OWI3MzQ1ZWZkY2E4ZDRmMTk5Mjk4NzVjODM5ZDcyMgorUEs6ICAyMDgzYjQ0NDIzNmI5YWIzMWQ0ZTAwYzg5ZDU1YzYyNjBmZWU3MWFjMWE0N2M0YjViYTIyNzQwNGQzODJiODJkCitNU0c6IGE0ZjZkOWMyODFjZjgxYTI4YTBiOWU3NzQ5OWFhMjRiZGU5NmNjMTI2NDM3NDQ5MWMwMDgyOTRlZTBhZjZmNmU0YmJiNjg2Mzk2ZjU5MDY4ZDM1OGUzMGZlOTk5MmRiMGM2ZjE2NjgwYTFjNzFlMjdhNGE5MDdhYzYwN2QzOWJkYzMyNThjNzk1NjQ4MmZiMzc5OTZmNGJlYjNlNTA1MWI4MTQ4MDE5YTFjMjU2ZTJlZTk5OWViYzhjZTY0YzU0ZTA3ZmVkYjRmYmQ4OTUzZWJkOTNiN2Q2OWNlNWEwMDgyZWRkNjIwOWQxMmQzNjE5YjRmZDJlYWU5MTY0NjFmNzJhNGNlNzI3MTU3MjUxYTE5MjA5YmJmZjlmYmRiZDI4OTQzNmYzZmNhY2M2YjRlMTMxODUyMWE0NzgzOWNiYTRiMTRmN2Q3YTIxZTdiNWQ2YjZhNzUzZDU4MDRhZmNkMmIxZWI3Nzc5YjkyYWJhYjhhZmE4YWE0ZmE1MWNhZWMwYjg1ZGNkMGZjMmEwNjc2MDM2ZDNmNTY2MzBhODMxZmZlYjUwMjg2MWRkODkxNjFjNzA4YTljMDA2YzczYzkzMGNlNWI5NDc1NjQyNmZmMThhYTExMmZiNGViOWE2ODUwMGI0OGQ0ZWVkYmQ0MTY3YjZmZmQwYTExZDQ5NDQzYTE3M2NlOWQ5NDk0MzY3NDhmYzA2MzRmMDZiYjA4YjhmMzQyM2Y0NDYzZGJhN2I0ZDE5OWI2NGRmNTc4MTE3ZjBhMjY0NWYwYjJhMWUyYWRhMjdkMjg2Zjc2NzMzZjI1YjgyZWQxZDQ4YTVjMzg5OGQ0YWQ2MjFlNTBlZDkwNjBkYWFkNDBhMzk1MzJlNGQxYmYxNjJjZTM2ODA0ZDVkNGUyZAorU0lHOiAxZWRlZjliYzAzNjk3MWYxZmE4OGVkZjQ1MzkzYzgwMmU2YzFhMTYzMWM4YTA2ODcxYTA5YTMyMDgyMWRjZTQwYmVjYTk3ZTUzYTAzNjFhOTU1YTRjNmQ2MGI4Y2E4ZTQwMGM4MTM0MDkxMWNjYjRmNTYyODQwNDFjZGJiMTgwNAorCitUU1Q6IDMzOAorU0s6ICAyZGRkYjZiOGZkMDRmYTkwZWNlMWE3MDlmODQxOGYyZTVkMGM5YzQzYWZlN2NmY2UxOWU2YWQxNWE3MzQ3NmY3CitQSzogIDgwNTlkZTZhN2M0Nzc2NDg5ZWNjMmU3ZDcwN2ZmY2UzMDI4NWJmMzBhMjNmNzhkNzJkYjQ5Y2ZkNmVkMGQ0OTIKK01TRzogNDc0YmFhNTkwYTRjZDcyZDU0MjRlNTFkODI1N2IzZDQ0MzI1YmM0YzUwNjNhMDAzM2M4NmViYmU5OWVkNzIxMjE4NGMxOTk0NGQwODJhMTE1Mzc5ZGQ0Y2VjZTk3M2ZhYTBiY2E2NDg1YmQyNWYzNzQ0YTcxOWU3MGFhMDI5MWUxYjVhOTZlNjM3YzE0MDYxNmE5ODI2MzM1N2M3NmI2ZWIwMDgzZmU1MTQxNGUzODY4NzBkMGZkYzdkZDlhYmU0ZmY2ZmI1YmJmMWU3YjE1ZGFjM2UwOGUyNjE1ZjY1NWMzMTA0Y2ViMzJhNGNjMmM5ZTljNDNjZjI4MmQzNDZhYzI1M2NjYzQ2YjYzNWFlMDQwOTczYjQ5NzM1NzIwZmZiODkwNDY5YTU2N2M1ODI0ZTBjMDBkN2NjZDU1MDlhNzE4MDkyYTkwNjQ2MWM0ZDYxNjNlYWY0MjI0MThmNWZjNmUwMDlmYzNmNTI5YWM2MWEyZjg5YmI4ZTBlZDQ1ZDk0MGM0YzIzMzFmZjhkOGUxZDZkNThkNDE3ZDhmYzI2NTZhMDJlODcwMWFlZTc1YWVkOTE4NzI0ZWViZTRhMmNmNDc0NGM1YzQwMWUyMTcwMjNkZjY4YTZmNmEwMjI4YmQwNWE2NzlhNjk3ZDhkZTcwMzZiOWVkMjY5MDkwZDNjNjU0ODZhZmI5MWUyNzk1NGViMTViOTY0NjY1ZWRlN2FkMDA4ZjEyZmIzYTlkMGU2OWMxM2I0MjU0ZjQzODE5ZTA4MThhNDE5NWY2OGI4YTM4YWU4MWYzZmNiMTg3OWM5NWFiNGNkMGZmYzM4ZTM4MTA4OTI2MGNjYTk2N2FjZTVhMDg1YjQ1N2FiNWViMzYzODUyMTAxMzc3NTcwZjlhYzllMzgKK1NJRzogYzYzNGVhN2JmNzJlODk1YTJlNzk2ZTI4MzQyMDE0MTViOGI0NWUwNWUwNDU1NTkyODRlYjkwNTJjMGU4NGY2MmE1YTlmMGM5NzY0Zjc1NzY3ODhjNzIyOGIxOWVmNTE3YzE5NTQ5NzMyNWE0OGE5MzQ0YjE0N2MxMmZkNzU1MDkKKworVFNUOiAzMzkKK1NLOiAgNTU0N2YxMDA0YmFlZGZjZTVjZmMwODUwYjA1MzAyMzc0YWFkMjRmNjE2Mzk5NGVjZDc1MWRmM2FmM2MxMDYyMAorUEs6ICA3Y2U2MjA3ODczODVlZTE5NTFhYzQ5YTc3MzUyZWUwZDZmOGM1Y2Q0N2RmNzRlOWUzMjE2YTYzMjRmYzdjZjdmCitNU0c6IGE2YzE3ZWViNWI4MDY2YzJjZDlhODk2NjczMTdhOTQ1YTBjN2M5Njk5NmU3N2FlODU0YzUwOWM2Y2QwNjMxZTkyMmFkMDQ1MDNhZjg3YTNjNDYyOGFkYWZlZDc2MDBkMDcxYzA3OGEyMmU3ZjY0YmRhMDhhMzYyYjM4YjI2Y2ExNTAwNmQzOGFjZjUzMmQwZGVkZWE0MTc3YTJkMzNmMDY5NTZkODBlOTYzODQ4ZWM3OTFiMjc2MmZhOTk0NDliNGYxYTFlZDliM2YyNTgwYmUzYWM3ZDdmNTJmYjE0NDIxZDYyMjJiYTc2ZjgwNzc1MGM2Y2JiMGIxNmYwODk1ZmM3M2Q5ZGZjNTg3ZTFhOWU1ZDFlNTgzNzVmYmFiNzA1YjhmMGMxZmQ3ZGY4YjNhZDQ0NmYyZjA4NDU5ZTdlZDFhZjU5NTU2ZmJjOTY2ZGMyNDljMWNmNjA0ZjNlNjc3YzhhMDlkNDM2MzYwODc3NGJmMzgxMWJlZjA2NDI3NDhjNTVjNTE2YzdhNTgwZmEzNDk5MDUwYWNiMzBlZWQ4NzBkMGQ5MTE3NGNiNjIzZTk4YzNhZDEyMWNmODFmMDRlNTdkNDliMDA4NDI0YTk4YTMxZWVhYWY1ZjM4ZTAwMGY5MDNkNDhkMjE1ZWQ1MmY4NjJkNjM2YTVhNzM2MDdkZTg1NzYwMTY3MjY3ZWZlMzBmOGEyNmViYzVhYTBjMDlmNWIyNThkMzM2MWNhNjlkMWQ3ZWUwN2I1OTY0ODE3OWFiMjE3MGVjNTBjMDdmNjYxNmYyMTY4NzI1Mjk0MjFhNjMzNGE0YTFlZDNkMjY3MWVmNDdiYzlhOTJhZmI1ODMxNGU4MzJkYjhhOTAwMzQwOGEwNDg3NTAzZmU0ZjY3NzcwZGQ0YjYKK1NJRzogMjlkZjNhZDU4OTAwOWM2NjdiYWE1ZTcyZGFiYjRlNTNjYjc4NzZkZTRlN2VmZTVjYzIxZWFkN2ZhODc4ZGI1N2Y5N2MxMTAzZGRiMzlhODYxZWI4ODY1M2MxZDRlYzNiNDMwNmU0NTg0YjQ3YjhiYzkwNDIzMTE5ZTdlNGFmMDAKKworVFNUOiAzNDAKK1NLOiAgM2RkNzIwM2MyMzdhZWZlOWUzOGEyMDFmZjM0MTQ5MDE3OTkwNWY5ZjEwMDgyOGRhMThmY2JlNTg3NjhiNTc2MAorUEs6ICBmMDY3ZDdiMmZmM2E5NTdlODM3M2E3ZDQyZWYwODMyYmNkYTg0ZWJmMjg3MjQ5YTE4NGEyMTJhOTRjOTllYTViCitNU0c6IGRiMjhlZDMxYWMwNGIwYzJkZWNlZTdhNmIyNGZjOWEwODJjYzI2MmNhN2NjZjJhMjQ3ZDYzNzJlYzNlOTEyMGVjZWRiNDU0MmVhNTkzZmVhMzAzMzVjNWFiOWRkMzE4YTNiNGZkNTgzNDI5OWNmM2Y1M2Q5ZWY0NjEzN2IyNzNjMzkwZWMzYzI2YTBiNDQ3MGQwZDk0Yjc3ZDgyY2FlNGIyNDU4NzgzN2IxNjdiYjdmODE2NjcxMGJhZWIzZWU3MGFmNzk3MzE2Y2I3ZDA1ZmE1N2U0NjhhZTNmMGJkNDQ5NDA0ZDg1Mjg4MDhiNDFmY2NhNjJmNWUwYTJhYTVkOGYzYWNhYjAwOGNjNWY2ZTVhYjAyNzc3YmRjZGU4N2YwYTEwZWYwNmE0YmIzN2ZlMDJjOTQ4MTVjZjc2YmZiOGY1Y2RkODY1Y2MyNmRjYjVjZjQ5MmVkZmQ1NDdiNTM1ZTJlNmE2ZDg1NDA5NTZkY2JhNjJjZmVhMTlhOTQ3NDQwNmU5MzQzMzdlNDU0MjcwZTAxMDM2YWM0NTc5M2I2YjhhY2VkYTE4N2EwOGQ1NmEyY2U0ZTk4ZjQyZWEzNzViMTAxYTZiOWZjYjQyMzFkMTcxYWE0NjNlZWI0MzU4NmE0YjgyYTM4N2JjZGRhZjcxYTgwZmQ1YzFmNzI5MmVmYzJiZDhlNzBjMTFlYWE4MTcxMDYwNjFiNmM0NjFjNDg4M2Q2MTNjYzA2YzdlMmEwM2Y3M2Q5MGZjNTVjZGMwNzI2NWVlZmQzNmJlNzIyNzAzODNkNmM2NzZjYWUzN2M5MzY5MWYxYWUzZDkyN2IzYTFjZDk2M2U0MjI5NzU3YWU1MjMxZWVhNzNhOWY3MTUxNTYyODMwNTQxMGFjMjU5M2IzMjVjYzYzMQorU0lHOiA0YzAzNjkzNWE5NmFiYzBkMDUwZDkwN2JlZGJlOTk0NmZiOTc0MzlmMDM5Yzc0MmUwNTFjY2YwOWFkZDdkZjQ0ZDE3ZGE5OGMyY2EwMWJkYzI0MjRkYTFlNGRlYmYzNDdmOGZmZjQ4YWM4MDMwZDJjYzA3Zjk1NzVjMDQ0YmUwNAorCitUU1Q6IDM0MQorU0s6ICAyODI3NzVkZjllYmJkN2M1YTY1ZjNhMmIwOTZlMzZlZTY0YThmOGVhNzE5ZGE3Nzc1ODczOWU0ZTc0NzYxMTFkCitQSzogIGEyYjQ5NjQ2MDMzYTEzOTM3Y2FkNmIwZTkxNGUzY2VjNTQ5ODljMjUyY2E1NjQzZDA3NjU1NWQ4YzU1ZTU2ZTAKK01TRzogMTRjYzUwYzI5NzNlYTlkMDE4N2E3M2Y3MWNiOWYxY2UwN2U3MzllMDQ5ZWMyYjI3ZTY2MTNjMTBjMjZiNzNhMmE5NjZlMDFhYzNiZThiNTA1YWVhYWQxNDg1YzFjMmEzYzZjMmIwMGY4MWI5ZTVmOTI3YjczYmZkNDk4NjAxYTc2MjJlODU0NDgzN2FhZDAyZTcyYmY3MjE5NmRjMjQ2OTAyZTU4YWYyNTNhZDdlMDI1ZTM2NjZkM2JmYzQ2YjViMDJmMGViNGEzN2M5NTU0OTkyYWJjODY1MWRlMTJmZDgxMzE3NzM3OWJiMGNlMTcyY2Q4YWFmOTM3Zjk3OTY0MmJjMmVkN2M3YTQzMGNiMTRjM2NkMzEwMWI5ZjZiOTFlZTNmNTQyYWNkZjAxN2Y4YzIxMTYyOTdmNDU2NDc2OGY0ZGI5NWRhZDhhOWJjZGM4ZGE0ZDhmYjEzZWY2ZTJkYTBiMTMxNmQzYzhjMmYzZWQ4MzZiMzVmZTJmZDMzZWZmYjQwOWUzYmMxYjBmODUyMjVkMmExZGUzYmZjMmQyMDU2Mzk0NjQ3NWM0ZDdjYTlmZGRiYWY1OWFkOGY4OTYxZDI4N2FlN2RkODAzZTdhZjFmYTYxMjMyOWIxYmRjMDRlMjI1NjAwYWU3MzFiYzAxYWUwOTI1YWVkNjJhYzUwZDQ2MDg2ZjM2NDZjZjQ3YjA3MmYwZDNiMDQ0YjM2Zjg1Y2VjNzI5YThiYjJiOTI4ODNjYTRkZmIzNGE4ZWU4YTAyNzNiMzFhZjUwOTgyYmI2MTMxYmZhMTFkNTU1MDRiMWY2ZjFhMGEwMDQzOGNhMjZkOGFiNGY0OGJjZGRjOWQ1YTM4ODUxYWJlZGU0MTUxZDViNzBkNzIwNzMyYTAwYWJlYTJjOGI5NzkKK1NJRzogMTU3NjM5NzM4NTk0MDI5MDdkOGRjYjg2YWRjMjRhMmExNjhiYTNhYmYyMjQ2MTczZDYzNDhhZmVkNTFlZjYwYjBjMGVkZWZmNGUxMGJjZWY0YzZlNTc3OGM4YmMxZjVlOWVlMDIzNzM3MzQ0NWI0NTUxNTVkMjNkZTEyN2EyMDIKKworVFNUOiAzNDIKK1NLOiAgNDczMGE1Y2Y5NzcyZDdkNjY2NWJhNzg3YmVhNGM5NTI1MmU2ZWNkNjNlYzYyMzkwNTQ3YmYxMDBjMGE0NjM3NQorUEs6ICBmOWYwOTRmN2NjMWQ0MGYxOTI2YjViMjJkY2U0NjU3ODQ0NjhiMjBhYjM0OWJjNmQ0ZmRmNzhkMDA0MmJiYzViCitNU0c6IGU3NDc2ZDJlNjY4NDIwZTFiMGZhZGZiYWE1NDI4NmZhN2ZhODkwYTg3YjgyODBlMjYwNzgxNTIyOTVlMWU2ZTU1ZDEyNDE0MzVjYzQzMGE4NjkzYmIxMGNkZTQ2NDNmNTljYmZjYzI1NmY0NWY1MDkwYzkwOWExNGM3ZmM0OWQzN2JmYzI1YWYxMWU4ZjRjODNmNGMzMmQ0YWFiZjQzYjIwZmEzODJiYjY2MjJhMTg0OGY4ZmZjNGRmZjM0MDhiYjRlYzdjNjdhMzViNGNkYWVlNWUyNzljMGZjMGE2NjA5M2E5ZjM2YTYwZmRkNjVlNjMzNGE4MDRlODQ1Yzg1MzBiNmZkYTM2M2I1NjQwMzM3ZDAyNzI0M2NjZmIzYzE3N2Y0M2U3MTc4OTZlNDZlYWQ3ZjcyY2EwNmFhMGZmMWU3NzI0NzEyMWJhZjQ4YmU5YTQ0NWY3MjljYTEzOTBmYzQ2MTUxY2JkMzNmY2JkNzM3M2YyN2E2YmE1NWM5MmNiZjY5NDViMDliNDRiOWE0ZTU4MDBkNDAzMDcwYWU2NjA0ODk5N2IyMTk3ZjAyMTgxYTA5N2U1NjNmOWI5YWNjODQxMTM5MjU4YTI1OGJjNjEwZDNiZDg5MTYzNzM1NmIyZWRjOGMxODRjMzVjNjVhZjkxYWFmN2IxYzE2ZDc0YTVmNWY4NjI1NDgxMzkyNTRlY2Y1NTA2MzFkNWY4ODQ5YWZkYjViNjRjZjM2NmZmMjYzM2E5M2YzYTE4YzM5YjUxNTAyNDVmYjVmMzNjOWU0ZTJkOTRhZjY5NjNhNzBiODhmOWU3ZTUxOWY4ZmEyYTBmMmUzNzQ5ZGU4ODNkMGU2ZjA1MmE5NDlkMGZjNzE1M2E4NjkzZjZkODAxZDczNTJlYjJmN2E0NjVjMGUKK1NJRzogNTUyYzczNDdiZGZlMTMxNjQ2Y2UwOTMyZDgyYTM2ZDJjMWI3NmQ3YzMwZWU4OTBlMDU5MmUxOWY5ZDE4YjlhNTZmNDhkN2E5YjY4YzAxN2RhNmI1NTBjOTQzYWY0YTkwN2JhZjMxN2U0MTlmYmJjOTZmNmNmNGJmYWQ0MmRlMDAKKworVFNUOiAzNDMKK1NLOiAgMjc3MGFhZGQxZDEyM2U5NTQ3ODMyZGZiMmE4MzdlYmEwODkxNzllZjRmMjNhYmM0YTUzZjJhNzE0ZTQyM2VlMgorUEs6ICAzYzVmYmIwNzUzMGRkM2EyMGZmMzVhNTAwZTM3MDg5MjYzMTBmZWQ4YTg5OTY5MDIzMmI0MmMxNWJkODZlNWRjCitNU0c6IGE1Y2MyMDU1ZWJhM2NmNmYwYzYzMzJjMWYyYWI1ODU0ODcwOTEzYjAzZmY3MDkzYmM5NGYzMzVhZGQ0NDMzMjIzMWQ5ODY5ZjAyN2Q4MmVmZDVmMTIyNzE0NGFiNTZlMzIyMmRjM2RkY2NmMDYyZDljMWIwYzEwMjRkOWI0MTZkZmEzZWU4YTcwMjc5MjMwMDM0NjVlMGZmYWVmYjc1YjlmMjlkYzZiY2YyMTNhZGM1ZTMxOGZkOGJhOTNhN2FhNWJmYjQ5NWRlOWQ3YzVlMWExOTZjZDNhMmQ3NzIxZjhiYTc4NWFhOTA1MmExODExYzdmY2M4ZjkzOTMyNzY1MDU5Y2FiOWM5YjcxODk0NTg5NWVmMjZmM2FjMDQ4ZDRjYWJmOTFhOWU2YWE4M2FjMTRkNDMxNTY4Mjc4Mzc5MTRlYjc2M2EyM2NiYTUzZjYwZjE1MGY0YjcwMjAzZWMxODMzZmYxMDU4NDk0NTdhOGRhNzMyNzY2MWZiMjNhNTU0MTY0ZTA1ZmNmMDE0NmIxMDY3NDk2NGJlNmY2YWEwYWNjOTRjNDFhZDU3MTgwZTUxODBkMTk5YmQ5MTAyZjU1ZDc0MGU4MTc4OWIxNTY3MWJiZDA2NzBlNmRlNWQ5N2UxYWU2MjZkOGEwZWJjMzJjOGZkOWQyNDczNzI3NGU0N2QyZGQ1OTQxYTI3MmU3MmE1OTg5MjhhZDEwOWNkZTkzN2JmMjQ4ZDU3ZjVkMjk0Mjk4M2M1MWUyYTg5ZjhmMDU0ZDVjNDhkZmFkOGZjZjFmZmE5N2Y3ZGU2YTNhNDNjYTE1ZmM2NzIwZWZhZWM2OWYwODM2ZDg0MjIzZjk3NzZkMTExZWMyYmJjNjliMmRmZDU4YmU4Y2ExMmMwNzIxNjRiNzE4Y2Q3YzI0NmQ2NAorU0lHOiBmMjY3NzE1ZTlhODRjNzMxNGYyZDU4NjllZjRhYjhkMjE0OWExM2Y3ZThlMWM3MjhjNDIzOTA2MjkzYjQ5Y2U2MjgzNDU0ZGQxYzdiMDQ3NDFkZjJlYWJlZGM0ZDZhYjEzOTdkYzk1YTY3OWRmMDRkMmMxN2Q2NmM3OWJiNzYwMQorCitUU1Q6IDM0NAorU0s6ICA0ZmRhYjdjMTYwMGU3MDExNGIxMWY1MzMyNDIzNzZhZjc2MTRiNGQ1ZGEwNDZhYzRiZWRlYTIxZDhhMzYxNTk4CitQSzogIGEyNWM5YTk0ZDZlNGVjZDk1YTRiZDY4MDVmNzYyZWIxYzQ1N2E4ZDQ1ZDI0MzIzOGIxODM5Y2JiYThmNDQxY2MKK01TRzogZGE0MDU4OTBkMTFhODcyYzExOWRhYjVlZmNiZmY2MWU5MzFmMzhlY2NjYTQ1N2VkYzYyNmQzZWEyOWVkNGZlMzE1NGZhZmVjMTQ0NGRhNzQzNDNjMDZhZDkwYWM5ZDE3YjUxMWJjYjczYmI0OWQ5MGJhZmI3YzdlYTgwMGJkNTg0MTFkZjEyNzVjM2NhZTcxYjcwMGE1ZGFiNDkxYTQyNjE2Nzg1ODc5NTZhYTRhMjE5ZTFhYzZkZDNmYjJjYjhjNDYxOTcyMThlNzI2ZGM3ZWQyMzQ1MjZhNmIwMWMwZDcyY2I5M2FiM2Y0ZjM4YTA4ZTU5NDBiM2Y2MWE3MmFkMjc4OWEwNTMyMDAwZmFjMWQyZDJlM2FkNjMyYWM4YjYyYmIzZmY1Yjk5ZDUzNTk3YmY0ZDQ0YjE5Njc0OTI0ZGY5YjNkYjNkMDI1M2Y3NDYyN2NjYWIzMDAzMWM4NWUyOTFjNThiNWZhOTE2NzUyMmE0Njc0NmZjMzA3MDM2NzQ1ZDRmOTgxNzc4NmU1ZDMwMGU2YzVkNTAzMTI1ZmVhMDFkZWMzZTNmZWRiZjM4NjFjYTI2MjdhMDUxOGZiMmIyNGU1YTdhMDE0MTc4NzE5ZTliMzQ1ZjdiMjQ5Y2UzYTQxMzI4MGM4ZGViNjc0ZjU5YTI1YmU5MmE4YWI2NDAwYzdjNTJiMDcyOGFlMzRlMjJiMmVjMjAwYzFjYmFiYTJjY2Q4YWYyOTI0OWQxN2FmNjBjMzYwMDdhNzIyZmM4MDI1OGE3YmViYWIxY2RhYWQ3NDYyYThiNzU4OGMyZjdlMjdjNmQwN2FmY2Y2MDExN2ZlZDExYmQ2ODU5ZTc1ZTNiNGZjZWUzOTgxODgxZTk1ZGQxMTY4MjdkZDRiMzY5YWYwNjlkM2M4ZjI2NzZmOGEKK1NJRzogNTA3NWMwOTBjZmJlYjZiMDE4MDJhZjdmNGRhNWFhNGY0MzRkNWVlMmYzNTMwZWViYjc1Yzg1ZTA4NjIxZjgzZWRjMDhhYTk2NjkzODk0YTQyNzc2MzNiYTgxZTE5ZTllNTVhZjVjNDk1ZGFhNWUxYTZmOGNiYjc5YzAxYzcyMDcKKworVFNUOiAzNDUKK1NLOiAgMjY0NTA0NjA0ZTcwZDcyZGM0NDc0ZGJiMzQ5MTNlOWMwZjgwNmRmZTE4Yzc4NzlhNDE3NjJhOWU0MzkwZWM2MQorUEs6ICBlYjJiNTE4Y2U3ZGM3MWM5MWYzNjY1NTgxNjUxZmQwM2FmODRjNDZiZjFmZWQyNDMzMjIyMzUzYmM3ZWM1MTFkCitNU0c6IDkwMWQ3MGU2N2VkMjQyZjJlYzFkZGE4MTNkNGMwNTJjZmIzMWZkMDBjZmU1NDQ2YmYzYjkzZmRiOTUwZjk1MmQ5NGVmOWM5OWQxYzI2NGE2YjEzYzM1NTRhMjY0YmViOTdlZDIwZTZiNWQ2NmFkODRkYjVkOGYxZGUzNWM0OTZmOTQ3YTIzMjcwOTU0MDUxZjhlNGRiZTBkM2VmOWFiMzAwM2RkNDdiODU5MzU2Y2VjYjgxYzUwYWZmYTY4YzE1ZGFkYjVmODY0ZDVlMWJiNGQzYmFkYTZmM2FiYTFjODNjNDM4ZDc5YTk0YmZiNTBiNDM4NzllOWNlZjA4YTJiZmIyMmZhZDk0M2RiZjc2ODM3Nzk3NDZlMzFjNDg2ZjAxZmQ2NDQ5MDUwNDhiMTEyZWUyNTgwNDIxNTNmNDZkMWM3NzcyYTA2MjRiY2Q2OTQxZTkwNjJjZmRhNzVkYzg3MTI1MzNmNDA1NzMzNWMyOTgwMzhjYmNhMjllYmRiNTYwYTI5NWE4ODMzOTY5MjgwOGViMzQ4MWZkOTczNWVhNDE0ZjYyMGMxNDNiMjEzM2Y1N2JiNjRlNDQ3NzhhOGNhNzA5MTgyMDJkMTU3NDI2MTAyZTFkZmMwYThmN2IxYWU0ODdiNzRmMDI3OTI2MzMxNTRkZmU3NGNhYTFiNzA4OGZkYTIyZmE4YjliYzM1NGM1ODVmMTU2NzcwNmUyOTU1NDkzODcwZjU0MTY5ZTBkNzY5MTE1OWRmNDM4OTc5NjFkMjRhODUyZWE5NzBjNTE0OTQ4ZjNiNDhmNzFlZTU4NmU3MmVjNzhkYjgyMGYyNTNlMDhkYjg0ZjZmMzEyYzQzMzNiZDBiNzMyZmU3NTg4MzUwNzc4M2U5YTFmZDRmYmFiOGU1ODcwZjliZjdhZDU4YWEKK1NJRzogZWVhNDM5YTAwZjdlNDU5YjQwMmI4MzUxNTBhNzc5ZWVkMTcxYWI5NzFiZDFiNThkY2M3ZjkzODZkYWRkNTgzZGU4ZGM2OWUyNjcxMjFkZGU0MWYwZjk0OTNkNDUwYjE2MjE5Y2RmM2MyMmYwOTQ4MmNlNDAyZmUxN2NhNDllMDgKKworVFNUOiAzNDYKK1NLOiAgMmNhNzQ0N2EzNjY4Yjc0OGIxZmQzZDUyZDIwODBkMzBlMzRkMzk3YmIyODQ2Y2FmOGY2NTlhYzE2ODc4OGNhNQorUEs6ICBhYjMzMWNkNDBhMzFkMDE3M2MwYzhjMWMxNzAwMjUzMjgwN2JmODllM2VkYjZkMzRjMmRkODI5NDYzMmI5ZmJjCitNU0c6IGE4MmJjZDk0MjRiZmZkYTBmMmY1ZTllYWUxNzgzNWRiZTQ2OGY2MWI3ODVhYWI4MjkzNDczN2E5MWM1ZjYwMmNiN2M2MTdjZGZmZTg3Y2FkNzI2YTQ5NzJlMTVhN2I4ZWUxNDdmMDYyZDJhNWE0ZDg5NzA2YjU3MWZhOGFhMmI5NTk4MWM3OGFiZWFhYWU4NjIwM2ZhMmMwZTA3Mjk3NDA2ZWE4YzI3MTExYTg2ZGJlMWQ1YTdjM2I3YWU5MzA5MDRkOTg5MGY2ZDRhYmViZDE0MTJhNzNhZDVmZWVhNjRhY2YwNjVkM2U2M2I1Y2JlMjBjZjIwYmJkMmQ4Yjk0ZjkwNTNlZDVmNjY2MzM0ODI1MzAxMjQ0NDY2MDU5MThkZTY2NDU1ZThjZjRiMTAxYTEyNzIzM2M0ZTI3ZDVkNTViZjk1YmQzMTk1ZDAzNDBkNDM1MzFmYzc1ZmFmOGRkZWQ1Mjc1YmY4OTc1MGRlODM4ZmQxMGMzMTc0NWJlNGNhNDFmYTg3MWNiMGY5YjAxNjcwNmExYTdlM2M0NGJiOTBhYzdhOGFkNTFlMjcyMzg5MjkyZmQ2Yzk4YWQ3YTA2OWU3NmUzZjVmM2UwY2M3NzBiOWU5YjM1YTc2NWQwZDkzNzEyZDdjZGFiZDE3ZTVkMDFkZDgxODNhZjRhZDkzNjVkYjBhMGZhNDEzODFmY2U2MGEwODFkZjFjNWFiMGY4YzE4Zjk1YTdhOGI1ODJkZmZmN2YxNDllYTU3OWRmMDYyM2IzM2I3NTA4ZjBjNjYzZjAxZTNhMmRjZDlkZmJlZTUxY2M2MTUyMjBmZGFmZmRhYjUxYmRhZTQyY2I5ZjdmYTllM2I3YzY5Y2M4YWRhNWNjZDY0MjUyOWJhNTE0ZmRjNTRmY2YyNzIwYjhmNWQwOGI5NQorU0lHOiBmOTNhZGExNWFlOWNkMmI1NGYyNmY4NmYwYzI4MzkyYWVkNWViNmI2YjQ0ZDAxYTRlMzNhNTRlN2RhMzdjMzhlOGQ1MzM2NmY3M2ZkODViZTY0MmU0ZWM4MTIzNmQxNjNmMGQwMjVlNzZjOGJiZGQ2NWQ0M2RmNDlmMDljMWYwMQorCitUU1Q6IDM0NworU0s6ICA0OTRlYTliY2NlMjY4ODViN2QxN2QxZmMxMTQ0NDhmMjM5ZjBjZTQ2ZTVmMjQ3YjRjOTk5ZmE4NjI5NjkyNDcyCitQSzogIDY5MDFlNWVmYWU1NzUzNmJhNWZkZDk2YjU5NjU3MzU5MDY1ZjI1ZDM5MWExYWE4Y2RjMGQzOGJiNWQ1M2MxMzkKK01TRzogM2JhZGJmYTVmNWE4YWEyY2NlMGE2MGU2ODZjZGNlNjU0ZDI0NDUyZjk4ZmQ1NDg3MmU3Mzk1YjM5NDY0MzgwYTBlMTg1NTU3ZWExMzRkMDk1NzMwODY0ZjQyNTRkM2RkOTQ2OTcwYzEwYzgwNGZjYzA4OTlkZmEwMjQyMDViZTBmODBiMWM3NTQ0OTUyMzMyNGZlNmEwNzUxZTQ3YjRmZjQ4MjJiOGMzM2U5ZWFmMWQxZDk2ZTBkZTNkNGFjZDg5Njk2YjdmY2MwM2Q0OWY5MmY4MmI5NzI1NzAwYjM1MGRiMWE4NzYxNTM2OTU0NTU2MWI4NTk5ZjVlYTkyMGEzMTBhOGJhZmMwZThkNzQ2OGNiZjZmMzgyMGU5NDM1OTRhZmRkNTE2NmU0ZTMzMDlkZGRkNzY5NGVmNjdlNjk0ZjM0ZmM2MjcyNGZmOTZhYzMzNjQxNzZmMzRlOGEwMmI0Y2Y1NjlkYjViOGY3N2Q1ODUxMmFlZGFiZjBiY2QxYzJkZjEyZGIzYTk0NzNmOTQ4YzVjMzI0MzMwOWFhZTQ2YzQ5ZWZkMDg4YjYwZjMxYThhNzJhZDdlNWEzNWFjYzVkODlmYTY2ODA3ZWI1ZDNiYTljZGYwOGQ0NzUzY2I4NTA4OWVlMzZmNWM5NmI0MzJiNjkyODM1MmFmYWQ1ODAxMjIyNWQ2MTU3ZjllMzYxMTQyNmRmOTIxYjZkMWQ4Mzc0NjI4YTYzMDMxZTlmZmI5MGU0MmZmYmJhMDIxZjE3NGY2ODUwMzE1NTQzMDE1MmM5MTU1ZGM5OGZmYTI2YzRmYWIwNjVlMWY4ZTQ2MjJjMmYyOGE4Y2IwNDMxMTBiNjE3NDQxMTQwZjhlMjBhZGMxNmY3OTlkMWQ1MDk2YjFmNTA1MzJiZTUwNDJkMjFiODFlYTQ2YzcKK1NJRzogNTQ4YTA5M2E2ODAzNjFiN2RjNTZmMTQ1MDNiNTVlZWVjM2IzZjRmZDRjYTk5ZDZhZWRjZTA4MzBmN2Y0YWUyZjczMjg1MzliMzRjNDhmYzk3NjA5MjIzMzNkYWU5YzdjMDE3ZTdkYjczYjhmYWE2YzA2YmUwNWUzNDc5OTJiMDYKKworVFNUOiAzNDgKK1NLOiAgMDBkNzM1ZWJhZWU3NWRkNTc5YTQwZGZkODI1MDgyNzRkMDFhMTU3MmRmOTliODExZDViMDExOTBkODIxOTJlNAorUEs6ICBiYTAyNTE3YzBmZGQzZTI2MTRiM2Y3YmY5OWVkOWI0OTJiODBlZGYwNDk1ZDIzMGY4ODE3MzBlYTQ1YmMxN2M0CitNU0c6IDU5YzBiNjlhZjk1ZDA3NGM4OGZkYzhmMDYzYmZkYzMxYjVmNGE5YmM5Y2VjZGZmYTgxMjhlMDFlN2MxOTM3ZGRlNWViMDU3MGI1MWI3YjVkMGE2N2EzNTU1YjRjZGNlMmJjYTdhMzFhNGZlOGUxZDAzYWIzMmI0MDM1ZTZkYWRiZjE1MzIwNTllZTAxZDNkOWE3NjMzYTBlNzA2YTExNTRjYWIyMmEwN2NkNzRjMDZhM2NiNjAxMjQ0Y2YzY2YzNWEzNWMzMTAwYmE0N2YzMTM3MmEyZGE2NWRjZmYwZDdhODBhMTA1NWQ4YWE5OTIxMmU4OTlhYWQ3ZjAyZTk0OWU2ZmVlNGQzYzljZWZhODUwNjllYWZmMWY2YWQwNmZjMzAwYzg3MWFiODJiMmJlZGI5MzRkMjA4NzVjMmEyNjMyNDJjZGI3ZjliZTE5MmE4NzEwYjI0YzdlYTk4ZDQzZGFlYzhiYWE1NTUzYzY3OGEzOGYwZTBhZGY3ZDNmZjJkY2M3OTlhMWRiYWQ2ZWFiMWMzZDk0NThhOWRiOTIyZjAyZTc1Y2ZhYjlkNjVjNzMzNmRhZTcxODk1ZDViYjE1Y2FjMjAzZjJiMzhiOTk5NmM0MTBmODY1NWFkMjJkM2MwOTFjMjBiN2Y5MjZkNDVlNzgwMTI4ZjE5NzQ3NDYyYWJjNWM1ODkzMmZiYjllMGJjNjJkNTM4Njg4MDJmMWIwODNmMTgzYjhhMWY5NDM0OTg2ZDVjZjk3YzA0ZTJmM2UxNDU3MzBjYmE5ODc3OWM3ZmVkMGNhYjFjMDVkNWU0NjUzYzZjM2Y2NzM2MjYwYmM3OGVlNDM3Mjg2MmZmZTllOTAzNzFkNzYyYzc0MzI3ODFmMzVjZWQ4ODRhNGJhY2EwNTY1M2VmMjVmMjVhNmYzZDU2MjgzMDgKK1NJRzogZGNkYzU0NjExOTM3ZDJiZDA2Y2FjZDk4MThiM2JlMTVjZTc0MjU0MjdhNzVmNTBkMTk3YTMzN2EzYjhiYTY3MTRlZjQ4ODY2ZjI0M2JkNWFjNzQxNWU5MTQ1MTdhMmMxYzVhOTUzZjQzMmI5OWRiMGU2MjBkNjRmNzRlYjg1MDUKKworVFNUOiAzNDkKK1NLOiAgOGMzNGI5MDU0NDBiNjE5MTFkMWQ4MTM3YzUzZDQ2YTFhNzZkNDYwOWFmOTczZTE4ZWI0YzU3MDkyOTU2MjdiYgorUEs6ICBiNjlhOGIyZmRmNWMyMGU3MzRjMmZmYjI5NGJjOGFlMTAxMWQ2NjRmMTFhZmU3ZmJjNDcxOTI1Y2Y3MmZhOTlkCitNU0c6IDMwYjU3YTM4OWI0OGEwYmViMWE0ODQzMmJmZjZiMzE0YmRlZDc5YzRhMTc2M2E1YWNiNTdjZWExYmZiNGM2ZDAxNmNmMDkwZjViZDA1YmJkMTE0ZTMzYWU3YzE3NzgyZGZhMjY0ZjQ2YzQ1ZjhjNTk5YzYwMzAxNmZlOWZmMDViNmI1YTk5ZTkyZmU3MTNhNGNkNWM0MWIyOTJlZDJiYjJlOWNmMzNhNDQwNTQyZTgyMWVjODJjYmY2NjVjM2YwMmUzZGMzMzdkN2ZkYjU4ZTMxYjI3Y2IyOTU0NTQxNDY4ODE0Njk4NTEwZGYxOGM4NWM4MWZhZDEyZGIxMWVjNmI5NjZmNDkzMGRhNTY0NmI5OTFkYjk3NDQ1MDk3ZGEzMGRhYjYxY2RhNTNhNDEwODNjYjk2YWRkMTlkZTZjNWVlYzMyM2JjYTlkMzUzMGUzOGMwMGIzNWFmNzM2MDA3NzYwMWJlNmFjOTdmMzAzMGY5MzBhMjdiOTBmZThiNjkxMWJhZTM4OTA2NWFkYzE1ZTE4ODIzMDBlMmEwMDMyNzRkMjMxODJkNWVmZDViYTRiOTEzMGMwN2JkNWM2NWZlY2I4YjVjYjdlYjM4ODM2YjMxOGJlZmRmZDc3ZGU0ZDZjYTAxODFmNzdhZTU3NDA4OTE2ODMyMjVmNTQ5ZGQ4NDI2MTQ1Yzk3YzU4MThjMzE5ZjdhYjJkODY4ZTFhNDFjZWFiNjRjMDg1MTE2MDY5ODk3YmYyY2EzNjY3NjUyNDA2MTU1ZWQwNjQ2NDMxYjZkZTFjY2MwM2I0Mjc5YWU0ZDMyNjY3OTI2NWRjZTgyMDQ4ZTcyOThlMWY4N2ZjZWMwNzY4YWMwZjVkOGZmODRmNzIxMGJlNTRkNDExYWY4ZWRlYTcyMTdmNGU1OTQxMzEyMWUxNDhjNjBkYQorU0lHOiAzZTBiNzIwNzNkYzkzNzVlZWRjY2E2YzRmYzFjZDMxNTkzOGEwNTBjOTI3MTZiZDIyODRmNDYyOWE5NjJiZWVjMGI3ZDdjZjE2YWI5MjNkNThmNWI5MGQzOTAxYThlNWM3NWM4ZjE3ZGFiOTk5OGUwMDdkOGM0OTUxMTk3M2QwZQorCitUU1Q6IDM1MAorU0s6ICA3N2E4M2UxOGM5ZjAwMGVlZmY3ZGVlYWM5NTllY2JhMjIwNmMwYWEzOWQyZjBlMmFlZDU3Mjk0ODJhN2EwMjI5CitQSzogIDYyYjFiMzE2MTM1NTk2YmZiY2E2MDM3ZWQ4NDdjNjFmYjdmMDlmYTM2Y2U5MGFiYjc3ODliODZmNzY4YjU5ZGQKK01TRzogZjNkNWZhMmFjYWVmZDg1OGYxZGYyNmUwMzA1OWNkY2JjMjQ2OGFkNzRhZmM5OTNkMGRiOWM0Y2RlNDExM2Y4ZDU1YzdkYTcxZDM4YmEwNjUyMDUzMWM2MWZkZGI1ZjMzZDVmMDM1M2JlMjM3NmU1ODA3MTFiZTQ1YzBhMzBiMWZhMDFiNTVlMjI4YzZmYTM1ZTNmOTViNjc5MDlmYzdkZjNmZDQ2NGQ5M2Q2NjFhOTI2ZjlkMTFmNzU1MGMxN2ZiY2MzNDk2NTI2ZThmMTBlMGM4OTE2Njc3YjJiZTViMzE5YjY4OGYyMWU4MWFhYTk0ODJlNWM5M2U2NGNlOGM0MzdiOWMxZTE0ZmVmZWQ3MGEzZmVlNTY4ODExZGMzMWNhZGFiM2Q1YjIyMDI1NDQ2NTMzNmRjNGQ5N2EzYmQwOTZiNWUwNjVlMGNmYmU4Mjg0OWUyYzE5MDVhY2E0ODY1MzNmMGRhN2E2MWYxZTlhNTViOGUyYTgzMjYyZGVlYjU5ZjJiMTNkM2E4YWVmNTcwMDg0NWI4M2IyNWFlMjE4M2MwZGRhYzBjZTQyZjhkMjU2NzRjYjBkMGQyMjBhNmRlN2MxODU4YmIwN2Q1OWEzMzcyMzQ0ZDk0NDYwMmFhNDUxZDJiOTM3ZGIwZmU2ZmVjYTBiZWJhODE3MjFmYzM2MWVhNzUwOWUyYjZkMzk3ZTFjMTkxYjU2ZjU0YWI0MzZkMGQyN2FiNGMwNjFiZDY2MWFkMWE0NDUyMzg3ZTg3MzU3NTRkMDdmYTdlZjRkNDU0OGIxNzI1ODI0MjViMjk5MDQ2ZTYzMDFiNWJhNmI5MTQ0MThmMTQ5Y2Y3MjJlMTBiZGUyZTBkNDE3MDBmMTJjODQyOWZjODk3Yjc4MTlkYTkyMjkyMjQwY2Q0NTU2NTQ1OGM5YTdiMjljMTIKK1NJRzogMWVhYWQ4NDIwYWMxMmM5OWFjMWZmNDQ3NjY3OGUzY2JiZTk0ZGE2YTc5N2YxNzQ2NjRkNWVlMGY2NDE0MzNmYjFlN2NiMmY1NjEzZTEwODA1ZGY4NjU0Y2Q4ZTBkNDVkOTYyMzA5MzJiYzdmMjBiMDRlYWU4MzY0MzUxMzQzMDkKKworVFNUOiAzNTEKK1NLOiAgNzNiMDMzNzNlZjFmZDg0OTAwNWVjZDYyNzBkZDk5MDZmMTlmNDQzOWU0MDM3NmNkYmM1MjA5MDJiYzk3NjgxMgorUEs6ICA2NjM3MTllMDhiYTNiYTE2NjZmNjA2OWEzZjU0OTkxODY2YjE4Y2M2YmU0MTk5MWIwMmViMzAyNmZmOWUxNTVmCitNU0c6IGQ1YzJkZWFiYTc5NWMzMGFiYTMyMWJjN2RlNjk5NmYwZDkwZTRkMDVjNzQ3ZmI0ZGFlOGYzNDUxODk1ZGVmNmUxNmU3MmYzOGVhY2U3NTZmMzY2MzVmOGZiMGI3MmEzYTBjMWY1NDY2MzgxN2E5NGQ0ZmQzNDZmODM1YWIwZTY1N2YwMDFhNmYyY2VjYjg2ZDA4MjViZDAyNjM5MjU0ZjdmN2YzOGNhOTlkYmI4NmM2NGE2MzNmNzNiYWY5MzNhYWUzNTYzMjgxZjQwMDVlMmQwZTdjZWM5ZmJkZThlNTg4YTk1N2UyMTEwNjhiZTY1YjNkM2QzNWJmNGU4ZDViYjM0NzgzMzNkZjljZWQ5YjJhYmFmNDg2OTc5OTRhMTQ1ZTkzMjE0OTlmYzVlZTU2MGY0ZmJiNjg0OWUxYWU4ZWIzZDFkZTAwODNhMjFhMDNmNmE2YjI4MTc2ZjAxMzBkMzg5NWU1MGU3NWUzZDdkMDk0N2E3YmMyYzViOWZmNjk4OTVkMjc3OTE0NDJiYThkMGYyMTgwNzEyYjU2N2Y3MTJlYTkxMmYzYjBkOTJjMTkzNDJlMDEwNmZmMWQ4N2I0NmFkMzNhZjMwMGI5MDg1NWJhOTc2OWQzNjZlNzk0MjVkOThlNGRlMTk5MDVhMDQ1Nzc3MDdjYmU2MjViODQ2OTE3ODFjZDI2YmY2MjI2MGI0YThiZDYwNWY3N2FmNmY5NzBlMWIzYTExMmU4OTE4MzQ0YmQwZDhkMmU0MWRmZDJjZTk4OTViMDI0NmU1MDg4N2FhM2E1NzdmZjczYmU0YjZhZTYwZmViMGNhMzZmNmE1ZjgxNzFlZDIwOWU1YzU2NjUyOWMwOTQwZDliNGJkNzQ0Y2NlZTU2ZTU0YTlhMGM2ZTRkYTUyMGRkMzE1YzI4NzJiMDJkYjU2MzcwM2UKK1NJRzogYTQwYWJlOThmYzY5ZGE4YTFmZjlmZjVjMmNjYTkzNjMyZTk3NTk4MGVlOGI4MmMzYzM3NjAyMmQ2NTI0YWI3MzZkMDFiMDcyZjJiNjgxYjVmMWNkM2VhMDY3MDEyZWQ2ZDA3NGU5NDljNDIzMjdhMzY2Y2FhOWU0NzUwYTNjMDgKKworVFNUOiAzNTIKK1NLOiAgZWFiMTc5ZTQxZWQ1Yzg4OWZmZTZhYWJkYzA1NGZhZjEzMDdjMzk1ZTQ2ZTMxM2UxN2ExNGZlMDEwMjNmZmEzMAorUEs6ICA4NmYzNDc0NmQzZjdhMDFkZGJlMzIyZjFhY2E1NmQyMjg1NmQzODczM2EzYTY5MDBiYjA4ZTc3NjQ1MGVjODAzCitNU0c6IDk3MTA5NWNlYmU1MDMxNTMwMjI0Mzg3YzVjMzE5NjZlMzg5Yjg1NjYzOTAwNTRjZjQ1MjY0YjQ0ZTE4OTY0YjdiZTUyYzMzYzRmZmIyNTlhZjE2MjgzNDM4ZmExNWRkNjZiYzc3OTFiNzUzM2VmMTBjYjBiZWFiNTI0YTY0Mzc2MjZmNGNjNzQ1MTI4NTFhZGNjMmZiMTI5MDU1YTQ4MmM2MTEwNzM4M2ZiN2M1MjQxODMxZDU1NTE2MzRlZWYwZGMwYjhmOTA1M2EwMDk3MWFhOGZhMWFlMDg5OGU0YjQ4MWI2NzA3ZTk3YzBmOTQyMDQwYjMzOWQ5MmZjMTdiYmFkZTc0Njc1YWYyNDNkOGIyZGFmYjE1YjFkYjU1ZDEyNDE1Yjg1ZjMwMzcyOTE5MzBhYjYxNjAwYmEzNDMxZjhlYjQyNWJlNDQ5MTYxNDcyOGFmMTAxZTgxYzA5MWYzNDhiYzVmZmQxYmRlNmFlNmNhZDVjMTViM2FhNzM1ODA3OGNjNGVmZmI1NGE4NmU3ZjBlMGM1NWU0Y2ZlMGE1NDYwNWVkNDQzZmRmMmFhYmEwMTY1ODVkYTYxN2U3NzM0MWQ1Mjg4OWQ3NWRkNTQwZDM5ZmU4Yjc5OTNlZDcwNWNmZGRlYTBjYjBkNWE3MzFkNmJmY2RiODE2YWZhZmY0N2U5NjNlZWRlYmRmMjQxYWY1NTkzMzUzZDZkNDAxYTM0ZjAyOWE4Y2RlYjE5MDRjYzJjYWE0Zjk2MzVjYzJiYTZiN2IxYTI5ZGE2MjVmZmMzODNiZTJmNWE4ZjFmYTRmMzliMmQ0YjRmNGMyZDg4MzhjZTI1OGEwNGQ0YTEyMDQ5M2ZkZjA3ZjY4YzBmZmQxYzE2Yjc2OGEzNWM1NWZlYTJjYWM2OTZiNWMyMGVmYzEwODY1Y2RlOGE2NDYyN2RjZAorU0lHOiAxNDNjYjI4MDI3YzJmODJlMzc1ZTVmMzQwZTdmZTZlNjBjZTdiZDUxMDAwYjQ5Yzc0MTY4YWY4NWUyNmVkMmVkNjMwZWQyNjcyMDkwMTY0Y2M1NGIwNTJkYTY5NGViZGQyMWEyMWIzMDUzZjRkY2ZkNzg5NWVhNWY2YzhhYTgwZAorCitUU1Q6IDM1MworU0s6ICBmYmYxNDZlYmQ1MTA3NTU3MGVjNTFhYzQxMGFlOWYzOTFkYjc1YjYxMGFkYTYzNjJiNGRiZDk0OTY1NmNmYjY2CitQSzogIGJlN2MyZjViMjFkNzQ2YzhlYTMyNDVjZTZmMjY4ZTlkYTc0ZTAwZmE4NWM5YzQ3NTI2MGM2OGZhMWFmNjM2MWYKK01TRzogY2Q3YWQ0ZjE3ZmNmZjczYWNjNDAyZGMxMDJkMDkwNzliMjlhYWYyYTBmNGIyN2NmNmJlZWIxZTJiMjNkMTlhYjQ3ZGViM2FlMWJlY2Q2ODg2MWVhMjc5YzQ2NjkxNzM4ZjRmZmY0N2M0MzA0N2M0ZjhiNTZiNmJiY2MzZmRlMDcyM2Q0NDEyMGRjZDMwN2E2MzEwZGM0ZjM2NmI4ZjNjZDUyZGIxOWI4MjY2YTQ4N2Y3ODcyMzkxYzQ1ZmUwZDMyNDhhN2FiZjJjMjAwMjJkMzc2OTU0N2Y2ODMwNjdkY2MzNjNjZDIyZmQ3Y2RhM2NhZGMxNTgwNDA1NmYwZTJhYTJiNzk1MDA4YzU5OGJlN2E5NjE4MDVlNmRmMjkxYmEzMDQxYzQ3ZmY1NjQwMjc1ZjQ2ZTZhZTgyMDkyZDIxYWJjYmNmYmExMWU3MzAyMTYwMDg4MjJkZTNjZTQ2MjQwMDU5NmRhNzlmN2FlNWQxZGY4Mzg5MTEyYWQ5ODg2OGZhOTRmYjA1NDZiZmU2YTY3YWE4ZDI4YzRkMzIwNzJkMmVhZGQ2MjU2MjU1ZjE4YzIzODJlNjYyZGZhOTIyYTY4MGUwNmE0MzYyMmM0ODcxZDI3ZDE4MDdmN2IyNzAzMDcwYzgzZGI4ZGQ5MjljMDYwMzhiMjE4M2NiOGUyYjllYzRjNzc4ZDdlY2Y5ZTlmZmFjNzdmYTc3MzdiMDU1ZmVhYzJlNzk4MmFlZWVjMGI3MmYxYmJjYTI0MjRlMWE4NDRiYmFjNzljYjJlNzQwMGY4MWRjNDQ5ZDA1NjBiNTIxYTdjMTZiYjQxNjdlNjY5NjU4NjA1OGE5YjhlZDJlNTExNjY5MGI3N2YyYTE3ZTVjMGIxNmE4M2RjYmQyZTI0NTUyMjkzZTI1OGIzMmJhN2Y4NDQ5NDQzNzkzNDI2OTg2MjcKK1NJRzogNjc2ODAwNmZlMGYyMDFiMjE3ZGQxMGViMDVkNGI4MmFkY2ZlYjJlY2ZjODM3M2MzMzA4ZjQxNTAzOTQ4MTFlYjYwNDkxODgxYTJlNTNkMTI4OWQ5NjQ3OGUxOGE2NGMzNGIyYTE5ODMyY2RjY2ZkOTZhMmU0YTBjNDY5ZmRjMGIKKworVFNUOiAzNTQKK1NLOiAgZGZmMGViNmI0MjZkZWEyZmQzM2MxZDNmYzI0ZGY5YjMxYjQ4NmZhY2I3ZWRiODUwMjk1NGEzZThkYTk5ZDlmZAorUEs6ICBjMjQ1MDg1ZWNlNjlmYjlhYTU2MGQwYzI3ZmRiNjM0ZjdhODQwZDQxZDg0NjM2NjBmYmU4MjQ4M2IwZjNjYzNhCitNU0c6IGU3YzllMzEzZDg2MTYwZjRjNzRhYTBhZTA3MzY5ZWUyMmIyN2Y4MWIzZjY5MDk3YWZmYWUyOGRhZTQ4NDgzZmI1MmE1YzA2MjMwNmI1OTYxMGY1Y2RiZmY2MzMyYjE5NjBjZDZmMmI4ZjdiNDE1NzhjMjBmMGJjOTYzN2EwZmRmYzczOWQ2MWY2OTlhNTczZjFjMWEwYjQ5Mjk0NTA2Y2Y0NDg3OTY1ZTViYjA3YmJmODE4MDNjYjNkNWNiMzgyOWM2NmM0YmVlN2ZjODAwZWRlMjE2MTUwOTM0ZDI3N2RlYTUwZWRiMDk3Yjk5MmYxMWJiNjY5ZmRmMTQwYmY2YWU5ZmVjNDZjM2VhMzJmODg4ZmRlOWQxNTRlYTg0ZjAxYzUxMjY1YTdkM2ZlZjZlZWZjMWNjZGJmZmQxZTJjODk3ZjA1NTQ2YTNiMWNhMTFkOTUxN2NkNjY3YzY2MGVjMzk2MGY3YThlNWU4MDIwMmE3OGQzYTM4OGI5MmY1YzFkZWUxNGFlNmFjZjhlMTdjODQxYzk1NTdjMzVhMmVlY2VkNmU2YWY2MzcyMTQ4ZTQ4M2NjZDA2YzhmZTM0NDkyNGUxMDE5ZmI5MWNiZjc5NDFiOWExNzZhMDczNDE1ODY3MjEwNjcwNDEwYzVkYmQwYWM0YTUwZTZjMGE1MDlkZGZkYzU1NWY2MGQ2OTZkNDFjNzdkYjhlNmM4NGQ1MTgxZjg3Mjc1NWU2NGE3MjFiMDYxZmNkNjhjNDYzZGI0ZDMyYzllMDFlYTUwMTI2N2RlMjI4NzlkN2ZjMTJjOGNhMDM3OWVkYjQ1YWJhYTZlNjRkZGEyYWY2ZDQwY2NmMjRmYmViYWQ3YjVhOGQzZTUyMDA3OTQ1ZWNkM2RkYzFlM2VmZWI1MjI1ODFhYzgwZTk4Yzg2M2JhMGM1OTBhM2VkOTVjZDEKK1NJRzogNmI0OGIxMGY1NDVkZGI3YTg5Y2Q1ODI5ZjRlNWIyMDE0NmNmNmJjOTZlNTUwZDA2ZjY1ZGU4YmRhZTdjY2RkZWQyNmNkNjMwZjg2YzkyNjZiY2NmODhlOTI0MDMzZTA0ZjgzYTU0ZjgyOTBkN2Y3MzRjZjg2NzNjY2E4Zjk3MDMKKworVFNUOiAzNTUKK1NLOiAgOWYzMjk1OGM3Njc5YjkwZmQ1MDM2MDU2YTc1ZWMyZWIyZjU2ZWMxZWZmYzdjMDEyNDYxZGM4OWEzYTE2NzQyMAorUEs6ICAxZDcyNjlkY2I2ZDFmNTg0ZTY2MmQ0Y2UyNTFkZTBhYmEyOTBlZjc4Yjk3ZDQ0OGFmYjFlNTMzM2YxOTc2ZDI2CitNU0c6IGE1NmJhODZjNzEzNjA1MDQwODdlNzQ1YzQxNjI3MDkyYWQ2YjQ5YTcxZTlkYWE1NjQwZTEwNDRiZjA0ZDRmMDcxYWQ3Mjg3NzllOTVkMWUyNDYwNTg0ZTZmMDc3MzU0NWRhODJkNDgxNGM5MTg5YTEyMGYxMmYzZTM4MTk4MTNlNWIyNDBkMGYyNjQzNmY3MGVlMzUzYjRkMjBjZWE1NGExNDYwYjViOGYxMDA4ZDZmOTVmM2FhMmQ4ZjFlOTA4ZmNlZDUwZDYyNGUzYTA5NjkzOGI5MzUzODU0Yjk2ZGE0NjNhMjc5OGE1YTMxMmVjNzkwODQyYzEwYzQ0NmUzMzUwYzc2NGJmNWM5NzI1OTNiOTk4N2JmMjMyNTZkYWE4ODk0ZDQ3ZjIyZTg1Yjk3NjA3ZTY2ZmMwOGExMmM3ODljNDc0NjA4MDM2OGQzMjFiYjkwMTVhMTE1NWI2NTUyM2FkOGU5OWJiOTg5YjQ0ZWFjNzU2YjA3MzRhY2Q3YzYzNTdjNzBiNTk3NDMyNDZkMTY1MmQ5MWIwZjk4OTY5NjUxNDEzNDViOTk0NWNmMzQ5ODA0NTJmMzUwMjk3NGVkYjc2YjljNzg1ZmIwZjQzOTUyNjZiMDU1ZjNiNWRiOGFhYjY4ZTlkNzEwMmExY2Q5ZWUzZDE0MjUwNGYwZTg4YjI4MmU2MDNhNzM4ZTA1MWQ5OGRlMDVkMWZjYzY1YjVmN2U5OWM0MTExY2MwYWVjNDg5YWJkMGVjYWQzMTFiZmMxM2U3ZDE2NTNiOWMzMWU4MWM5OTgwMzdmOTU5ZDVjZDk4MDgzNWFhMGUwYjA5YmNiZWQ2MzQzOTExNTFkYTAyYmMwMWEzNmM5YTU4MDBhZmI5ODQxNjNhN2JiODE1ZWRiYzAyMjZlZGEwNTk1YzcyNGNhOWIzZjhhNzExNzhmMGQyMGE1YQorU0lHOiA5ODgxYTU3NjNiZGIyNTlhM2ZlZmJiYTNkOTU3MTYyZDZjNzBiODA0ZmE5NGFiNjEzNDA2YTZlYzQyNTA1Yjg3ODk0NjVjYTFhOWEzM2UxODk1OTg4ODQyMjcwYzU1ZTViZGQ1NDgzZjZiMTdiMzE3ODFiNTkzNTA3YTZjMTgwOAorCitUU1Q6IDM1NgorU0s6ICBmODZkNmY3NjZmODhiMDA3MTdiN2Q2MzI3ZWIyNmNmM2NlZWJhNTM4NTE4NDQyNmY5Y2ZkODI5NWUyNDIxZmYyCitQSzogIGNiMWQyNTA1MDQ3NTQxODM3MDRkYmUyMWMzMjNkNjZmOWY5MDExNzU4ZjZkOGRhYjZmNTk3YjE5OTY2MjE0NWIKK01TRzogZGE4NDIzYTZiN2ExOGYyMGFhMWY5MGVkMjMzMWIxN2IyNDA2N2M0MDE3NWJjMjVkODEwOWUyMWQ4N2FjMDA1MjhlYjNiMmY2NmEyYjUyZGM3ZWYyZjhjZWNiNzVjNzYwOTljZmEyM2RiOGRhODk3MDQzYmExY2NlMzFlMmRmZWE0NjA3NWY1ZTA3MzIwM2VhZWIzZDYyYzg0YzEwN2I2ZGFiMzNhMTRlYWYxNDlhYTYxODUwYzE1ZjVhNThkODhhMTVhYmE5MTk2ZjllNDk1ZThkYmVjYmNmN2U4NDQ0ZjVkZDcyYTA4YTA5OWQ3ZjYyMDk5OTBiNTYyOTc0ZWE4MjllZjExZDI5YTkyMGUzYTc5OWQwZDkyY2I1MGQ1MGY4MTc2MzFhYjA5ZGU5N2MzMWU5YTA1ZjRkNzhkNjQ5ZmNkOTNhODM3NTIwNzhhYjNiYjBlMTZjNTY0ZDRmYjA3Y2E5MjNjMDM3NGJhNWJmMWVlYTdlNzM2NjhlMTM1MDMxZmVhZmNiYjQ3Y2JjMmFlMzBlYzE2YTM5YjljMzM3ZTBhNjJlZWNkZDgwYzBiN2EwNDkyNGFjMzk3MmRhNGZhOTI5OWMxNGI1YTUzZDM3YjA4YmYwMjI2OGIzYmFjOWVhOTM1NTA5MGVlYjA0YWQ4N2JlZTA1OTNiYTRlNDQ0M2RkYTM4YTk3YWZiZjJkYjk5NTJkZjYzZjE3OGYzYjRjNTJiY2MxMzJiZThkOWUyNjg4MTIxM2FiZGViN2UxYzQ0YzQwNjE1NDg5MDlmMDUyMGYwZGQ3NTIwZmM0MDhlYTI4YzJjZWJjMGY1MzA2M2EyZDMwNTcwZTA1MzUwZTUyYjM5MGRkOWI2NzY2Mjk4NDg0N2JlOWFkOWI0Y2Q1MGIwNjlmZmQyOWRkOWM2MmVmMTQ3MDFmOGQwMTJhNGE3MGM4NDMxY2MKK1NJRzogZWM2MWMwYjI5MjIwM2E4ZjFkODcyMzVlZGU5MmI3NDcyM2M4ZDIzNDA4NDIzNzczYWU1MGIxZTliYzQ0NjRlMDNlNDQ2ZGE5ZGNlNGMzOWY2ZGQxNTliZWEyNmMwMDllZDAwMTIwYmMzNmQ0YTI0N2RjMGQyNGJjZWZjYzExMGMKKworVFNUOiAzNTcKK1NLOiAgYTViMzRjZWZhYjk0NzlkZjgzODlkN2U2ZjZjMTQ2YWE4YWZmYjBiZWM4MzdmNzhhZjY0NjI0YTE0NWNjMzQ0ZQorUEs6ICA3YjBmNGYyNGQ5OTcyYmM2ZmU4MzgyNmM1MjcxNmFkMWUwZDdkMTlmMTIzODU4Y2IzZTk5ZmE2MzZhYzk2MzFhCitNU0c6IGUyMWU5OGFmNmMyYmFjNzA1NTdlYjBlODY0ZGEyYzJiNGQ2YzBhMzlhMDU5ZDM0NzcyNTFmNjE3OGEzOTY3NmY0NzQ5ZTdmYmVhNjIzZjE0OGE0M2E4YjBmZTA2MTA1MDZmYTY1OGFiZDJmNWZhMzkxOThmMjYzNmI3MjRkYjIyZDFhZWJjMmFiMDdiMmI2ZGJmZmRlZThjZWNlODFlMWFmMTQ5M2VjMTk2NGUxNmJmODZhYjI1OGNhMGZlYjc3ZTNjODcxN2U0NDAzOGFiZTE1MmMxNGJlMTU2NjBiZjkzYjJkNDhkOTJjNGVkNzA3NGQyNDk0MjEwNjIxYmNmMjA0ZmJhODhjNjU0ZDVmZmUwMWUxYTUzZDA4ZjcwYmIyMzcwODlkYzgwNzIxNmZmNmE4NWRiZWMzMTAyMjM3ZDQyNTkwNzc4YWNmNmMxZGM1NjZkNWEyYmI5YTYzYmMyMWMzMjljMjcyZTU5NjViYWVlYjBmZTg5MWRlM2NjOGNiZmE4ZTU0MWE4ODgxZGY2ODk0MmU3ZmY4ZGM2NTZiZDA4NTc1ZjZhYWY5MjRhMTc2ZDY2M2IxYTFmNDM1NzRkMTE3NjhjNzAxYjI2OTU2MWU1NTQzOGRiZWJmZDQ0M2QyMTE1Y2I5MzNkMWNkZTRhOTE1YjU0YzMyNWMyN2Y0OTllZjAyYmQwMTJmZjFmOWEzNjM5MDkyMjg4NzYwMGZlNzEyYmNkYzIzZWI1OTc0YTMwNTM3MmFkNTI5NTFmODNmMGU1OGNjNDllMjg5ODQxNjIxOTE3ZjFmY2IwMjM1MTQ3MjQwZGFlNGNmM2I5OWI2YWM2ZDhkZTk0ZWZlN2M0NDM2NzE0NTA4YmNkMDExNGM1NjA2OGZmMWI3YzE2ZDUxYmQ5MDY0Mzc4NzRkNjU0OWFiNWQ4MDg3ODk2ODcyZWM4YTA5ZDc0MTIKK1NJRzogMmZiZDg5OWQ3MmI2ZDM5ZTRmNDViOGI2MmNiYmQ1ZjNjMGFjYjFhZDg1NDA5MTNmYTU4NTg3N2U5MWNjZmVmN2JlZTUwYTRiMGY5ZmVkZjVjYzFlMGQxOTUzYWQzOTljODM4OWE5MzM5MWUxYjdjOTI5YWY2ZDZmM2I3OTZjMDgKKworVFNUOiAzNTgKK1NLOiAgYWQ3NWM5Y2UyOTljNGQ1OTM5MzM2N2Q3N2E0YzlmOGRmOGRjZWM3NjVjNmRiZDI1YjUyN2ZiNzY2OTkxMzYwNAorUEs6ICBiOTkxMDU0OGZlNjMxMmExMTljOTk5M2VlYmNmYjlkYzkwMDMwZmZiMGU0ZGUyYjdjY2QyM2NiZWI0ZmVmNzFiCitNU0c6IDYyZmM1YWI2N2RlYjFmZWU5YWI2Y2NhM2I4OGExZGYxZTU4OWYwZmQ0YTg4ZjRhYTc3Mzg5NDg3NjFmZTg0MzcyYzViMThlNDY1NTIyMGMxZDg0ZDUyYWNhZDMyZTIyOWE1Yzc1NmMyMGZjNjJmZTRiNGI0ZTVmZDcwNzdhZTRlZDUzOTdhYTc5NmYyMzA3Y2VlZGI2NTA1YjM5Mjk3ODU2ZjRhZWI1ZTcwOTM4ZTM2ZWUyNGEwYWM3ZDk4NjgzMDZmNmI1MzkxMDYyM2I3ZGM4OWE2NjcyYWQ3Mzg1NzZlZDVkODg4MzFkZDMzODMyMWM4OTAyYmMyMDYxZjY1ZTk0ZDQ1MmZkZmEwZGM2NjVjZWZiOTIzMDhlNTIzMDFiZDQ2MjcwMDZiMzYzZDA2Yjc3NWEzOTU5MTRkOGM4NjNlOTVhMDBkNjg5M2YzMzc2MTM0YzQyOWY1NjQ3ODE0NWU0NDU2ZjdhMTJkNjViYjJiODk2NWQ3MjhjYjJkZGJiNzA4ZjcxMjVjMjM3MDk1YTkyMTk1ZDkyZmE3MjdhMzcyZjM1NDVhZTcwMWYzODA4ZmVlODAyYzg5NjdhNzZlOGE5NDBlNTVmYjJkODEwYmZiNDdhZGExNTZmMGVkYTE4MjliMTU5Y2YwNWM3ZjM2Y2YzODQ3ZDdiMjFkZTg0YzNkYzBmZTY1ODM0N2Y3OTM5NmEwMTEzOWE1MDhiNjAwMjJkYjFjMGU1YWVlZjQ3ZTQ0NWU2NmY3ODNlNjJjOTY1OTdiZGIxNmYyMDljMDhhOTEzMmM3NTczMTM2MTcwZWUzZWJmMjQyNjEyNjVhODlmYjRmMTAzMzMzNzVlMjBiMzNhYjc0MDM0NjRmNTI0OTQ2MWM2ODUzYzVmZGRiOWY1OGFmODE2ODkyOTEwMzkzYTcwNzdiNzk5ZmRjMzQ4OTcyMDk5OGZlZWE4NgorU0lHOiA2YjdlZjI3YmNmYmYyYjcxNDk4NTAzMzc2NGZjY2ZmNTU1ZTNmNWJjNDQ2MTBkNmM4YzYyMTE3Y2IzODMxYTA3ZjRhOGJkZGIwZWFlZDFkNDZiMDI4OWIxNWRlMWFhNGRjYzE3ZDcxYmU5NmEwOWU2NmJhNGRjNDYyN2M3ODcwNQorCitUU1Q6IDM1OQorU0s6ICAxY2VkNTc0NTI5YjliNDE2OTc3ZTkyZWIzOTQ0OGE4NzE3Y2FjMjkzNGEyNDNhNWM0NGZiNDRiNzNjY2MxNmRhCitQSzogIDg1ZTE2N2Q1ZjA2MmZlZTgyMDE0ZjNjOGIxYmVhZWQ4ZWVmYjJjMjJkODY0OWM0MjRiODZiMjFiMTFlYjhiZGEKK01TRzogMWIzYjk1M2NjZTZkMTUzMDNjNjFjYTcwNzYwOWY3MGU3MjUwZjZjMGRlYmE1NmE4Y2U1MjJiNTk4NjY4OTY1MWNkYjg0OGI4NDJiMjIyOTY2MWI4ZWVhYmZiODU3MDc0OWVkNmMyYjEwYThmYmY1MTUwNTNiNWVhN2Q3YTkyMjgzNDllNDY0NmY5NTA1ZTE5ODAyOWZlYzljZTBmMzhlNGUwY2E3MzYyNTg0MmQ2NGNhZjhjZWQwNzBhNmUyOWM3NDM1ODZhYTNkYjZkODI5OTNhYzcxZmQzOGI3ODMxNjJkOGZlMDRmZmQwZmE1Y2JjMzgxZDBlMjE5YzkxOTM3ZGY2Yzk3MzkxMmZjMDJmZGE1Mzc3MzEyNDY4Mjc0YzRiZWU2ZGNhN2Y3OWM4YjU0NDg2MWVkNWJhYmNmNWM1MGUxNDczNDkxYmUwMTcwOGFjN2M5ZmY1OGYxZTQwZjg1NTQ5N2NlOWQ3Y2M0N2I5NDEwZjJlZGQwMGY2NDk2NzQwMjQzYjhkMDNiMmY1ZmE3NDJiOWM2MzA4NjdmNzdhYzQyZjJiNjJjMTRlNWViZGRjN2I2NDdhMDVmZmY0MzY3MDc0NWYyODUxZWZmNDkwOWY1ZDI3ZDU3YWU4N2Y2MWU5NjVlZTYwZmRmOTc3MjRjNTkyNjdmMjYxMGI3YWQ1ZGU5MTk4NTZkNjRkN2MyMTI2NTljZTg2NTYxNDliNmE2ZDI5ZDhmOTJiMzEyYmU1MGI2ZTJhNDMxZDM2YWUwMjJiMDBhNmZlMzYwZTNhZjY1NDMyODk5YzQzYmUwNDI3ZTM2ZDIxY2ZlYzgxZjIxYWE1M2IzM2RiNWVkMmMzN2RhOGY5NmFjM2U3ZGM2N2ExZGUzNzU0NmNmN2RlMTAwOGM3ZTFhZGJlMGYzNGZhN2ViMjQzNGQ5NGU2YTEzZjRjZjg2YTk4ZDQ5NzYyMmYKK1NJRzogZTAzMDNhZWZlMDhhNzc3MzhkY2M2NTdhZmJiOWI4MzVlZDI3OTYxM2E1M2M3M2ZkYzVkZGJmYjM1MGU1Y2ZmNGQ2YzliYjQzZGMwN2M5NWJmNGUyM2I2NGM0MGY4ODA0YzcxNjk5NTJlM2M4ZDU5YTcxOTcyNDFiZmVkMDc0MGYKKworVFNUOiAzNjAKK1NLOiAgZjA3OTBkOTNlMmQzYjg0ZjYxZWY0YzgwNzE0N2FiYTQxMGU0MTVlNzJiNzFiMGQ2MWQwMTAyNmZlZDk5ZGEzZAorUEs6ICBlZmRmNjQ5ZmIwMzNjZjMyOGUwYjI4Nzc5NmY4YTI1ZTljNmUyZTg3MWIzM2MyYzIxYTQwMjhhOGEyNWE0YjI4CitNU0c6IDc5NzNlOWYzMmQ3NDgwNTk5MmViNjVkYTBkNjM3MzM1ZTUwZWZmMGNlNjhlYTJkMWYzYTAyZGU3MDQ0OTJiOWNmYmU3ZTdiYTk2ZmRiNDJiYjgyMWE1MTNkNzNmYzYwNDAyZTkyYzg1NWRlYWVkNzNmZmVhZjcwOTUyMDI5MDYyYzgzM2UxNGVjMWIxNGYxNDRlMjIwN2Y2YTBlNzI3ZTVhN2UzY2JhYjI3ZDU5NzI5NzBmNjk1MThhMTViMDkzZTc0MGNjMGNlMTFiZjUyNDhmMDgyNmI4YTk4YmRlOGJmMmM3MDgyYzk3YWZmMTU4ZDA4MzcxMTE4Yzg5MDIxY2MzOTc0YWU4Zjc2ZDg2NjczYzNmODI0YjYyYzc5YzRiNDFmNDBlYWE4OTQzNzM4ZjAzMzAwZjY4Y2JlMTc1NDY4ZWIyMzVhOWZmMGU2NTM3Zjg3MTRlOTdlOGYwOGNhNDQ0ZTQxMTkxMDYzYjVmYWJkMTU2ZTg1ZGNmNjY2MDZiODFkYWQ0YTk1MDY1NTg0YjNlMDY1OGMyMGE3MDZlYWY0YTA3NzdkYTRkMmUwY2QyYTBmY2E2MDEwOWMyYjQ0MDNkYjNmMDNjZDQ3ODFjMWZiYjAyNzIyMDJiY2IxMTY4NzgwOGM1MGNiOThmNjRiN2YzZmQzZDQzMzMzYmI1YTA2MWI5ZTM3NzA5MGFiYjFlMGE4ODVjYjI2YjczYzE2M2U2M2ZmNjQ1MWZmMmY0ZWM4MjQ5YzdlMTUyYmQwMzk3M2ExZTk2NGUyYjViMjM1MjgxYTkzODM5OWExMTJhMjQ1MjllMzgzYTU2MGRjNTBiYjFiNjIyYWQ3NGVmMzU2NThkY2IxMGZmZTAyMjU2OGFjM2ZmYWU1YjQ2NWE4ZWQ3NjQzZTg1NjFiMzUyZWU5OTQ0YTM1ZDg4MmM3MTJiMTg3Nzg4YTBhYmFlNWEyMmYKK1NJRzogMDg3NzNhNmE3ODc2MmNiYjFlMjVmY2JiMjkxMzk5NDFiZGYxNmY0ZTA5YTFmYTA4ZmM3MDFmMzJmOTMzZWRkNzRjMGFlOTgzYzEyYTBhNWIwMjBiNmJjZjQ0YmI3MTlkZGU4ZWQwNzgxYTgyOTgyNjU2NDBlMTYwOGM5OGIzMDEKKworVFNUOiAzNjEKK1NLOiAgNGNiOWRmN2NlNmZhZTlkNjJiYTA5ZThlYjcwZTRjOTY5YmRlYWZjYjVlYzdkNzAyNDMyNmU2NjAzYjA2MjFiZgorUEs6ICAwMTgwNjlkZDBlYjQ0MDU1YTM1Y2Q4Yzc3YzM3Y2E5ZmIxYWQyNDE3MjcxMzg1ZTEzNGIyZjRlODFmNTIwMzNjCitNU0c6IDE0NjI3ZDZlYTBlNzg5NTQ2MDc1OTQ3NmRjNzRjNDI4MDBjZWVmOTk0MzI3NTE4MTUxNDkwZDlkZjIzMDY3OTE0ZTQ0Nzg4YTEyNzY4Y2NiMjU0NzFiOWMzYmE5ZDE0ZmI0MzZkY2JhMzg0MjliM2EwNDU2ODc3NzYzYzQ5MTc1ZDBlMDgyNjgzZTA3YTkwNThmMzY4NWM2Mjc5MzA3YjIzMDNkMTIyMWI5YzI5NzkzZDhhNDg3N2Y2ZGY1MTU4NzM4NGRhZGY3NTFjNWY3YmZiZDIwN2Q1MTk2MjJjMzdiNTFjZWVlZTJjMjBkODI2OWY4Y2I4OGQzZmU0M2Q2ZDQzNGQ1YmJkMGUyMDNjMTUzMmQ5N2JhNTUyMTQ3MjI3NDk2Yzg3ZjY3YjUwYmI3NjE5M2FkZDAxNDRkZjFjMTc2NjU3NTg1NDA4MzYyY2EyZWQwNGFkNjJhY2YxYzI1ZTM0MWRmZDE0OThkODViNGIxMzQ5YThiMGI5YjAyYzQzNTIzYzU1ODUzNDE5YmZlZDM3ZDVhMmNkZjE3ZGZiZjFhM2JkNzc1OWQ2YWUxODBmOWQyN2RjZDlhODkzM2UyOWE3YzBhMzA3NzFlZWE3YzJlMGZhMjQyOTI1ZDIzMzZkY2U1ODU2MjkwNTdkODQ0MzIzOTY0ZjZkM2QxMWZmMGIzZjgyOWEzYmU4YzlmMDQ2OGE2ODIzZDhlNzBhYjVhMmRhMjFlMTVmYThiMDQxYTI5ODEyMjIyZTljMzBiMmJkOWExMmQxZmRlZTZmODc4NzZlOGNlODEwMDk2MzdhOGJiMjIzNjEyOWE0N2NhNzQyODllZTRhYWQ0MjlmZmUyOWY0NzQzMDI0MWNhOGNjMzg0OGI3MjAwZmQ2ZTE0NzA2NTFhOWEwYTZmNzJjOTAzM2U4MzFkZjA1MTQwOGE2MjYwZjY1Y2JhZjZlMDEyYjE4ZQorU0lHOiBlMzNjMDc4MzZjNTM3ZDZiZmJkMGY0NTkyZDZlMzViMTYzNDk5YmE3OGRjN2ZmY2VjNTY1ZDA0ZjlhN2RiNzgxOTQzZTI5ZTZjZTc2NzYzZTliYWRkZjU3NDM3ZmQ5YzZiMDMyMzlhNmU2ODUwZTQ1MDJhMzU2YzJlMTJjMzcwNQorCitUU1Q6IDM2MgorU0s6ICBhMTM2ZTAwOWQ1M2U1ZWY1OWQwOTQ2YmMxNzU2NjNhODZiYzBmY2QyOWVhZGQ5NWNmYzlkMjY2MDM3YjFlNGZiCitQSzogIDljMTgwNmVjMDQ1NGY1ODMxNGViODM5N2Q2NDI4N2RlZTM4NjY0MGQ4NDkxYWJhMzY0NjA3Njg4ODQxNzE1YTAKK01TRzogYTQ5ZDFjM2Q0OWUxM2MyZWRhNTY4NjhhODgyNGFhOWY4ZDJiZjcyZjIxOTU1ZWJhZmQwN2IzYmRjOGU5MjRkZTIwOTM2Y2VlNTEzZDhhNjRhNDcxNzNhM2JkNjU5ZWZmMWFjY2ZmODI0NGIyNmFhZTFhMGMyN2ZhODkxYmY0ZDg1ZThmYjFiNzZhNmNhYjFlN2Y3NGM4OWVlMDdiYjQwZDcxNDMyNmYwOWIzZmQ0MDYzMmZhZDIwOGVhODE2ZjkwNzIwMjhjMTRiNWI1NGVjYzFjNWI3ZmM4MDllN2UwNzg2ZTJmMTE0OTVlNzYwMTdlYjYyYWE0NTYzZjNkMDBlZTg0MzQ4ZDk4MzhjZDE3NjQ5ZjY5MjlhNmQyMDZmNjBlNmZjODJlMGMzNDY0YjI3ZTBlNmFiZDIyZjQ0NjliZGZkNGNiNTRmNzdlMzI5YjgwZjcxYmY0MjEyOWVjMTNjOWRmZTE5MmFkZmFhNDJlZTNkZGVlZGEzODU4MTZmYmFkNWY0MTE5MzhjNjNiNTYwZjRlY2Q5NDUzNGJlN2Q5ODcyNWNkOTRjOTljZTQ5MmYwZjA2OWJhMGVjMDhmODc3YTc4MTJlZjI3YWUxOWQ3YTc3YmU2M2Y2NmJjZjhkNmNmM2ExYTYxZmM5Y2ZlZjEwNGM3NDYyYTIxY2E3ZjAzYWZiNWJiMWFjOGM3NTEyNGI1NTRlOGQwNDRiODEwZDk1ZmY4YzlkZDA5YTM0NDg0ZDhjNGI2Yzk1Zjk1YzNjMjI4MjNmNTJjZTg0NDI5MzcyNGQ1MjU5MTkxZjFiYTA5MjllMmFjZGJiOGI5YTdhOGFkZjBjNTJlNzhhY2RmZGYwNTdiMDk4NTg4MWFmYmVkNGRiZWJkZWJiZGFlMGEyYjYzYmQ0ZTkwZjk2YWZkY2JiZDc4ZjUwNjMwOWY5YmRiNjUwMDEzY2I3M2ZhZWQ3MzkwNGUKK1NJRzogYmMwOTRiYTkxYzExNWRlZTE1ZDc1MzM2MWE3NWYzZjAzZDZhZjQ1YzkyMTU3ZTk1ZGJlOGQzMjE5NGI2YzVjZTcyYjlkYzY2ZjczZGYxMmRjYTBiNjM5ZjNlNzkxZDQ3ODYxNmExZjhkNzM1OWE0MmM4ZWFlMGRkYTE2YjE2MDYKKworVFNUOiAzNjMKK1NLOiAgZmYwZjFjNTdkZDg4NGZiZWVhNmUyOTE3MjgyYjc5YmE2N2Y4YTY4NTEyNjdiOWY0NjM2ZGFmZGEzM2JkMmI1YgorUEs6ICBmZWY2Mzc4YWQxMmE3YzI1MmZhNmViNzQyYjA1MDY0YjQxNTMwZmYwMTlkYzY4MGFiNTQ0YzAyN2VhMjgzNmU3CitNU0c6IDUyMmE1ZTVlZmY1YjVlOThmYWQ2ODc4YTlkNzJkZjZlYjMxODYyMjYxMGExZTFhNDgxODNmNTU5MGVjZWY1YTZkZjY3MWIyOGJlOTFjODhjZGY3YWUyODgxMTQ3ZmU2YzM3YzI4YjQzZjY0Y2Y5ODFjNDU1YzU5ZTc2NWNlOTRlMWI2NDkxNjMxZGVhZWVmNmQxZGE5ZWJjYTg4NjQzYzc3ZjgzZWFlMmNmZGQyZDk3ZjYwNGZlNDUwODFkMWJlNWM0YWUyZDg3NTk5NmI4YjZmZWNkNzA3ZDNmYTIxOWE5M2JhMDQ4OGU1NTI0N2I0MDVlMzMwY2ZiOTdkMzFhMTM2MWM5YjIwODRiZGIxM2ZiMGMwNTg5MjVkYjhjM2M2NDljOWEzZTkzN2I1MzNjYzYzMTBmYTNiMTYxMjZmYjNjYzliYjJiMzVjNWM4MzAwMDE1NDg4YTMwZmFkY2EzYzg4NzFmYTcwZGZkYzcwNTViZjhlNjMxZjIwYzliMjUyODMxMWUzMjRhN2M0ZWRkNTQ2MjA3OWYzNDQxYzllY2Y1NWZhOTk5ZTczMTM3MjM0NGZkYzBkNDEzZTQxN2FhYTAwMWExYjJkM2Q5YmMwMDBmZWMxYjAyYmQ3YTg4YTgxMmQ5ZDhhNjZmOTQ2NDc2NGMwNzBjOTMwNDFlZWZiMTdjZTc0ZWZmNmQ0YWZmNzVmMGNiZjZhNzg5YTllY2RlNzRhYmUzMzEzMGZjYTBkYTg1M2FhN2MzMzEzYWRhM2YwYWUyZjU5NWM2Nzk2YTkzNjg1ZTcyOWRkMThhNjY5ZDYzODE4MjVhYjNmMzZhMzkxZTc1MjViMmE4MDdhNTJmYTVlYzJhMDMwYThjZjNiNzczMzdhYzQxZmNlYjU4MGU4NDVlZWQ2NTVhNDhiNTQ3MjM4YzJlODEzN2M5MmY4YzI3ZTU4NWNhYWQzMTA2ZWVlMzgxNGEKK1NJRzogZDUwMDg0ODY3MjZjY2UzMzBhMjlkZDdlNGQ3NDc0ZDczNTc5ODIwMWFmZDEyMDZmZWI4NjlhMTEyZTViNDM1MjNjMDY5NzY3NjFiZTNjZjliMjcxNjM3ODI3M2M5NGY5MzU3MmE3ZDJiODk4MjYzNGUwNzU1YzYzMmI0NDkwMDgKKworVFNUOiAzNjQKK1NLOiAgMGJjNmFmNjRkZTU3MDlkM2RiYzI4ZjdlZjZkM2ZlMjhiNmRlNTI5ZjA4ZjU4NTdjY2I5MTA2OTVkZTQ1NGY1NgorUEs6ICBmYjQ5MWZjOTAwMjM3YmRjN2U5YTExOWYyNzE1MGNkOTExOTM1Y2QzNjI4NzQ5ZmY0MGVmNDFmMzk1NWJjOGFjCitNU0c6IGFjNzg4NmU0ZjQxNzJhMjJjOTVlOGVlYTM3NDM3YjM3NWQ3MmFjY2VkY2VlNmNjNmU4MTY3NjMzMDFhMmQ4ZWY0ZDZmMzFhMmMxZDYzNTgxOGI3MDI2YTM5NWNlMGRhZmQ3MWM1MTgwODkzYWY3NmI3ZWEwNTZjOTcyZDY4MGVjYTAxZGNiZGJhZTZiMjZmMWM1ZjMzZmM5ODhiODI0ZmJiZTAwY2FjYzMxNjQ2OWEzYmFlMDdhYTdjODg4NWFmN2Y2NWY0MmU3NWNlZjk0ZGJiOWFhYjQ4MjUxNDNjODUwNzBlNzcxNmI3NjEyZjY0ZWYwYjAxNjYwMTFkMjNlYjU2NTRhYTA5OGIwMmQ4ZDcxZTU3YzhmYTE3YmZmMmZlOTdkYzgxOTMxNzdlYWRjMDlmYjE5MmQ4MGFhOTJhZmE5ODcyMGQ0NjE0ODE3ZmYzYzM5ZDNhY2NlMTg5MDZmYTNkZTA5NjE4OTMxZDBkN2E2MGM0NDI5Y2JmYTIwY2YxNjVjOTQ3OTI5YWMyOTNhZTZjMDZlN2U4ZjI1ZjEyNjQyOTFlM2UxYzk4ZjVkOTNlNmVjYzIzODliYzYwZGJiZjRhNjIxYjEzMmM1NTJhOTljOTVkMjZkOGQxYWY2MTEzOGI1NzBhMGRlNGI0OTdlYmU4MDUxYzcyNzNhOThlNmU3ODc2ZDBiMzI3NTAzYWYzY2IyY2M0MDkxY2UxOTI1Y2IyZjI5NTdmNGVjNTZlZTkwZjhhMDlkZDU3ZDZlODMwNjdhMzU2YTRjZmU2NWIxYjdhNDQ2NWRhMmFiMTMzYjBlZmI1ZTdkNGRiYjgxMWJjYmJkZTcxMmFmYmYwZjdkZDNmMzI2MjIyMjg0YjhjNzRlYWM3YWQ2MjU3ZmE4YzYzMmI3ZGEyNTU5YTYyNjZlOTFlMGVmOTBkYmIwYWE5NjhmNzUzNzZiNjkzZmNhYTVkYTM0MjIyMQorU0lHOiBkYmM3MTM0ZDFjZDZiMDgxM2I1MzM1MjcxNGI2ZGY5Mzk0OThlOTFjZjM3YzMyNDMzN2Q5YzA4OGExYjk5ODM0N2QyNjE4NWI0MzA5MDA0MTI5MjllNGY2M2U5MTAzNzlmYzQyZTM1NWE0ZTk4ZjZmZWUyN2RhZmFkMTk1NzIwNgorCitUU1Q6IDM2NQorU0s6ICAyZjVlODNiZDViNDEyZTcxYWUzZTkwODRjZDM2OWVmY2M3OWJmNjAzN2M0YjE3NGRmZDZhMTFmYjBmNWRhMjE4CitQSzogIGEyMmE2ZGEyOWE1ZWY2MjQwYzQ5ZDg4OTZlM2EwZjFhNDI4MWEyNjZjNzdkMzgzZWU2ZjlkMjVmZmFjYmI4NzIKK01TRzogYjc2NjI3M2YwNjBlZjNiMmFlMzM0MDQ1NGEzOTFiNDI2YmMyZTk3MjY0Zjg2NzQ1NTNlYjAwZGQ2ZWNmZGQ1OWI2MTFkOGQ2NjI5MjlmZWM3MTBkMGU0NjIwMjBlMTJjZGJmOWMxZWM4ODU4ZTg1NjcxYWNmOGI3YjE0NDI0Y2U5MjA3OWQ3ZDgwMWUyYWQ5YWNhYzAzNmJjOGQyZGZhYTcyYWE4MzliZmYzMGMwYWE3ZTQxNGE4ODJjMDBiNjQ1ZmY5ZDMxYmNmNWE1NDM4MmRlZjRkMDE0MmVmYTRmMDZlODIzMjU3ZmYxMzJlZTk2OGNkYzY3MzhjNTNmNTNiODRjOGRmNzZlOWY3OGRkNTA1NmNmM2Q0ZDVhODBhOGY4NGUzZWRlYzQ4NTIwZjJjYjQ1ODNlNzA4NTM5MzU1ZWY3YWE4NmZiNWEwZTg3YTk0ZGNmMTRmMzBhMmNjYTU2OGYxMzlkOWNlNTllYWY0NTlhNWM1OTE2Y2M4ZjIwYjI2YWFmNmM3YzAyOTM3OWFlZGIwNWEwN2ZlNTg1Y2NhYzYwMzA3YzFmNThjYTlmODU5MTU3ZDA2ZDA2YmFhMzk0YWFjZTc5ZDUxYjhjYjM4Y2ZhMjU5ODE0MWUyNDU2MjRlNWFiOWI5ZDY4NzMxMTczMzQ4OTA1MzE1YmYxYTVhZDYxZDFlOGFkYWViODEwZTRlOGE4NmQ3YzEzNTM3YjBiZTg2MGFiMmVkMzViNzMzOTliODgwOGFhOTFkNzUwZjc3OTQzZjhhOGI3ZTg5ZmRiNTA3MjhhYTNkYmJkOGE0MWE2ZTAwNzU2ZjQzOGM5YjllOWQ1NTg3MmRmNWE5MDY4YWRkOGE5NzJiN2U0M2VkYWQ5Y2VkMjIzN2NhMTM2N2JlNGI3Y2RiNjZhNTRlYTEyZWVmMTI5NDcxMTU4NjEwZWFmMjhmOTlmN2Y2ODY1NTdkY2RmNjQ0ZWEKK1NJRzogOWY4MDkyMmJjOGRiMzJkMGNjNDNmOTkzNmFmZmViZTdiMmJjMzVhNWQ4MjI3N2NkMTg3YjVkNTBkYzdmYzRjNDgzMmZmZmEzNGU5NTQzODA2YjQ4NWMwNDU0OGU3Yzc1NDI5NDI1ZTE0ZDU1ZDkxZmMxMDUyZWZkODY2NzQzMGIKKworVFNUOiAzNjYKK1NLOiAgNzIyYTJkYTUwZTQyYzExYTYxYzlhZmFjN2JlMWEyZmVkMjI2N2Q2NTBmOGY3ZDhlNWJjNzA2YjgwN2MxYjkxZAorUEs6ICBmZDBiOTY0NTYyZjgyMzcyMWU2NDljM2ZlZGI0MzJhNzZmOTFlMGFlYWQ3YzYxZDM1Zjk1ZWQ3NzI2ZDc4NTg5CitNU0c6IDE3M2U4YmI4ODVlMWY5MDgxNDA0YWNhYzk5OTA0MWQyZWNmY2I3M2Y5NDVlMGRiMzZlNjMxZDdjZDFhYjk5OWViNzE3ZjM0YmYwNzg3NGJmM2QzNGUyNTMwZWI2MDg1ZjRhOWY4OGFlMWIwZjdkODBmMjIxNDU2YThlOWE4ODkwYjkxYTUwMTkyZGVhYWFjYzBhMWE2MTVhODc4NDFlMmM1YTllMDU3OTU3YWY2ZTQ4ZTc4Y2M4NjE5OGUzMmU3YWEyNGRjZjZjZmZhMzI5YmM3MjYwNmQ2NWIxMTY4MmM4YmE3MzZjY2UyMmEwNTc4NWRmMTE0NjMzMWU0MTYwOWNmOWNhNzExY2Y0NjQ5NTgyOTcxMzhiNThhOTA3M2YzYmJmMDZhZDhhODVkMTM1ZGU2NjY1MjEwNGQ4OGI0OWQyN2FkNDFlNTliY2M0NGM3ZmFiNjhmNTNmMDUwMmUyOTNmZmNhYmFhZjc1NTkyN2RmZGZmYmZkZTNiMzVjMDgwYjVkZTRjOGI3ODVmNGRhNjRlZjM1N2JjMGQxNDY2YTZhOTY1NjBjM2M0ZjNlM2MwYjU2M2EwMDNmNWY5NWYyMzcxNzFiY2UxYTAwMTc3MWEwNGVkZTdjZGQ5YjhjYTc3MGZkMzZlZjkwZTlmZTAwMDBhOGQ3Njg1ZmQxNTNjYzcyODJkZTk1OTIwYThmOGYwODk4ZDAwYmYwYzZjOTMzZmU1YmI5NjUzZmYxNDZjNGUyYWNkMWEyZTBjMjNjMTI0NDg0NGRhY2Y4NjUyNzE2MzAyYzIwMzJmOWMxMTQ2NzllZDI2YjNlZTNhYjRhN2IxOGJjNGUzMDcxZjA5NzdkYjU3Y2QwYWM2OGMwNzI3YTA5YjRmMTI1ZmI2NGFmMjg1MGIyNmM4YTQ4NDI2MzMzNGUyZGE5MDJkNzQ0NzM3MDQ0ZTc5YWIxY2Y1YjJmOTNhMDIyYjYzZDQwY2QKK1NJRzogYzI2OTVhNTcxNzJhYWEzMWJkMDg5MGYyMzFjYThlZWVjMDI4N2E4NzE3MjY2OWE4OTlhZDA4OTFjZWE0YzQ3NTc5YjUwNDIwZTc5MWNkZWM4YzE4MmM4YTBlOGRkZTIxYjI0ODBiMGNmZDgxMTFlMjhlNTYwMzM0N2EzNTJkMDQKKworVFNUOiAzNjcKK1NLOiAgNWZlOWMzOTYwZWQ1YmQzNzRjYzk0ZDQyMzU3ZTZhMjRkYzdlMzA2MDc4OGY3MjYzNjVkZWZhY2YxM2NkMTJkYQorUEs6ICAwY2U3YjE1NWM4YjIwZWJkYWFjZGMyYWEyMzYyN2UzNGIxZjlhY2U5ODA2NTBhMjUzMGM3NjA3ZDA0ODE0ZWI0CitNU0c6IGM5NDkwZDgzZDljM2E5MzcwZjA2YzkxYWYwMDE2ODVhMDJmZTQ5YjVjYTY2NzczM2ZmZjE4OWVlZTg1M2VjMTY2N2E2YzFiNmM3ODdlOTI0NDgxMmQyZDUzMjg2NmFiNzRkZmM4NzBkNmYxNDAzM2I2YmNkMzk4NTJhMzkwMGY4ZjA4Y2Q5NWE3NGNiOGNiZTAyYjhiOGI1MWU5OTNhMDZhZGZlYmQ3ZmM5ODU0YWU1ZDI5ZjRkZjk2NDI4NzFkMGM1ZTQ3MGQ5MDNjZmJjYmQ1YWRiMzI3NTYyOGYyOGE4MGJmOGMwZjAzNzY2ODdkYWU2NzNiZjdhODU0N2U4MGQ0YTk4NTVhZTI1NzJmYzJiMjA1ZGM4YTE5ODAxNmRkYzliNTA5OTVmNWIzOWYzNjhmNTQwNTA0YTU1MTgwM2Q2ZGQ1Zjg3NDgyOGU1NTQxZGVkMDUyODk0ZDllMmRjNWU2YWEzNTEwODdlNzkwYzBkZDVkOWM0ZGVjYjIxN2U0ZGI4MWM5OGExODRiMjY0ZTZkYWVhYzBmMTFlMDc0Y2FlMmJmYzg5OWY1NGI0MTljNjVkY2MyMjY2NGE5MTVmYmZmZmFjMzVjZWUwZjI4NmViN2IxNDQ5MzNkYjkzM2UxNmM0YmNiNjUwZDUzNzcyMjQ4OWRlMjM2MzczZmQ4ZDY1ZmM4NjExOGI2ZGVmMzdjYTQ2MDhiYzZjZTkyN2I2NTQzNmZmZGE3ZjAyYmZiZjg4YjA0NWFlN2QyYzJiNDVhMGIzMGM4ZjJhMDRkZjk1MzIyMTA4OGM1NTVmZTlhNWRmMjYwOTgyYTNkNjRkZjE5NGVlOTUyZmE5YTk4YzMxYjk2NDkzZGI2MTgwZDEzZDY3YzM2NzE2Zjk1ZjhjMGJkN2EwMzlhZDk5MDY2N2NhMzRhODNhYzFhMThjMzdkZDdjNzczNmFhNmI5YjZmYzJiMWFjMGNlMTE5ZWY3NworU0lHOiAzNzlmOWM1NGM0MTNhZjBkMTkyZTliYzczNmIyOWRhOWQ1MjFlN2JhNzg0MWQzMDlmOWJjYzFlNzQyZWM0MzA4ZmU5ZjdiYTUxZTBiMjJhZWQ0ODdjYjRhYTM5MTNiOWJlYmZiM2FhY2QzOGY0MDM5ZjliYmJlYmUxYWQ4MDAwMgorCitUU1Q6IDM2OAorU0s6ICBlYzJmYTU0MWFjMTRiNDE0MTQ5YzM4MjVlYWE3MDAxYjc5NWFhMTk1N2Q0MDQwZGRhOTI1NzM5MDRhZmE3ZWU0CitQSzogIDcxYjM2M2IyNDA4NDA0ZDdiZWVjZGVmMWUxZjUxMWJiNjA4NDY1OGI1MzJmN2VhNjNkNGUzZjVmMDFjNjFkMzEKK01TRzogMjc0OWZjN2M0YTcyOWUwZTBhZDcxYjViNzRlYjlmOWM1MzRlYmQwMmZmYzlkZjQzNzRkODEzYmRkMWFlNGViODdmMTM1MGQ1ZmRjNTYzOTM0NTE1NzcxNzYzZTZjMzNiNTBlNjRlMGNkMTE0NTczMDMxZDIxODZiNmVjYTRmYzgwMmNkZGM3Y2M1MWQ5MmE2MTM0NWExN2Y2YWMzOGNjNzRkODQ3MDdhNTE1NmJlOTIwMmRlZTM0NDQ2NTJlNzliYWU3ZjBkMzFiZDE3NTY3OTYxZjY1ZGQwMWE4ZTRiZWUzODMzMTkzOGNlNGIyYjU1MDY5MWI5OWE0YmMzYzA3MmQxODZkZjRiMzM0NGE1YzhmYmZiYjlmZDJmMzU1ZjYxMDdlNDEwYzNkMGM3OThiNjhkM2ZiOWM2ZjdhYjVmZTI3ZTcwODcxZTg2NzY3Njk4ZmUzNWI3N2VhZDRlNDM1YTk0MDJjYzllZDZhMjY1N2IwNTliZTBhMjEwMDNjMDQ4YmJmNWUwZWJkOTNjYmIyZTcxZTkyM2NmNWM3MjhkMTc1OGNkODE3YWQ3NGI0NTRhODg3MTI2ZDY1M2I5NWE3ZjI1ZTUyOTNiNzY4YzlmYzVhOWMzNWEyMzcyZTM3NDFiYzkwZmQ2NjMwMTQyN2IxMDgyNGJiNGIxZTkxMTBiZmJhODRjMjFhNDBlYjhmZWQ0NDk3ZTkxZGMzZmZkMDQzOGM1MTRjMGE4Y2I0Y2FjNmFkMDI1NmJmMTFkNWFhN2E5YzdjMDBiNjY5YjAxNWIwYmY4MTQyNWEyMTQxM2UyZmZiNmVkYzBiZDc4ZTM4NWM0NGZkNzQ1NThlNTExYzJjMjVmZWUxZmVjMThkMzk5MGI4NjkwMzAwZmE3MTFlOTNkOTg1NDY2OGYwMTg3MDY1ZTc2ZTcxMTNhZTc2M2MzMGRkZDg2NzIwYjU1NDZhNmMzYzZmMWM0M2JjNjdiMTQKK1NJRzogODRkMThkNTZmOTY0ZTM3NzY3NTliYmE5MmM1MTBjMmI2ZDU3NDU1NWMzY2RkYWRlMjEyZGE5MDM3NDU1NDk5MWU3ZDc3ZTI3OGQ2M2UzNDY5M2UxOTU4MDc4Y2MzNjg1ZjhjNDFjMWY1MzQyZTM1MTg5OTYzOGVmNjEyMTE0MDEKKworVFNUOiAzNjkKK1NLOiAgNjEzMjY5MmE1ZWYyN2JmNDc2YjFlOTkxZTZjNDMxYThjNzY0ZjFhZWJkNDcwMjgyZGIzMzIxYmI3Y2IwOWMyMAorUEs6ICA3YTJkMTY2MTg0ZjllNWY3M2JlYTQ1NDQ4NmIwNDFjZWI1ZmMyMzE0YTdiZDU5Y2I3MThlNzlmMGVjOTg5ZDg0CitNU0c6IGE5YzA4NjE2NjVkOGMyZGUwNmY5MzAxZGE3MGFmYjI3YjMwMjRiNzQ0YzZiMzhiMjQyNTkyOTRjOTdiMWQxY2I0ZjBkY2Y3NTc1YThlZDQ1NGUyZjA5ODBmNTAzMTNhNzczNjM0MTUxODNmZTk2NzdhOWViMWUwNmNiNmQzNGE0NjdjYjdiMDc1OGQ2ZjU1YzU2NGI1YmExNTYwM2UyMDJiMTg4NTZkODllNzJhMjNhYjA3ZDg4NTNmZjc3ZGE3YWZmMWNhZWJkNzk1OWYyYzcxMGVmMzFmNTA3OGE5ZjJjZGFlOTI2NDFhMWNjNWY3NGQwYzE0M2VjNDJhZmJhYTVmMzc4YTllMTBkNWJmNzQ1ODdmYTVmNDljMTU2MjMzMjQ3ZGFmZDM5MjlhY2RlODg4ZGM2ODQzMzdlNDBjZGM1OTMyZTdlYjczZmZjYzkwYjg1YzBhZDQ2MDQxNjY5MWFlZmJkN2VmZDA3YjY1N2MzNTA5NDZhMGUzNjZiMzdhNmM4MDg5YWJhNWM1ZmUzYmJjYTA2NGFmYmU5ZDQ3ZmJjODM5MTRhZjFjYjQzYzJiMmVmYTk4ZTBhNDNiZTMyYmE4MjMyMDIwMDFkZWYzNjgxNzI1MWI2NWY5YjA1MDZjZWY2NjgzNjQyYTQ2ZWQ2MTJmOGNhODFlZTk3YmIwNGQzMTdiNTE3MzQzYWRlMmI3NzEyNmQxZjAyYTg3Yjc2MDRjODY1M2I2NzQ4Y2Y1NDg4ZmE2ZDQzZGY4MDlmYWExOWU2OTI5MmQzOGM1ZDM5N2RkOGUyMGM3YWY3YzUzMzRlYzk3N2Y1MDEwYTBmN2NiNWI4OTQ3OWNhMDZkYjRkMTI2MjdmMDY3ZDZjNDIxODZhNmIxZjg3NDJmMzZhZTcwOWJhNzIwZTNjZDg5ODExNjY2NmQ4MWIxOTBiOWI5ZDJhNzIyMDJjYjY5MGEwM2YzMzEwNDI5YTcxZGMwNDhjZGUKK1NJRzogZWI2NzdmMzM0N2UxYTFlYTkyOWVmZGY2MmJmOTEwNWE2YzhmNDk5MzAzM2I0ZjZkMDNjYjBkYmY5Yzc0MmIyNzA3MDRlMzgzYWI3YzA2NzZiZGIxYWQwY2U5YjE2NjczMDgzYzk2MDJlYzEwYWUxZGQ5OGU4NzQ4YjMzNjQ0MGIKKworVFNUOiAzNzAKK1NLOiAgZjIxOWIyMTAxMTY0YWE5NzIzYmRlM2E3MzQ2ZjY4YTM1MDYxYzAxZjk3ODIwNzI1ODBiYTMyZGY5MDNiYTg5MQorUEs6ICBmNjZiOTIwZDVhYTFhNjA4NTQ5NWExNDgwNTM5YmViYTAxZmZlNjBlNmE2Mzg4ZDFiMmU4ZWRhMjMzNTU4MTBlCitNU0c6IDAxNTU3N2QzZTRhMGVjMWFiMjU5MzAxMDYzNDNmZjM1YWI0ZjFlMGE4YTJkODQ0YWFkYmI3MGU1ZmM1MzQ4Y2NiNjc5YzIyOTVjNTFkNzAyYWFhZTdmNjI3M2NlNzAyOTdiMjZjYjdhMjUzYTNkYjk0MzMyZTg2YTE1YjRhNjQ0OTEyMzI3OTFmN2E4YjA4MmVlMjgzNGFmMzA0MDBlODA0NjQ3YTUzMmU5YzQ1NGQyYTBhNzMyMDEzMGFiNmQ0ZDg2MDA3M2EzNDY2N2FjMjViN2U1ZTI3NDdiYTlmNWM5NDU5NGZiNjgzNzdhZTI2MDM2OWM0MDcxM2I0ZTMyZjIzMTk1YmY5MWQzZDdmMWEyNzE5YmY0MDhhYWQ4ZDhhMzQ3YjExMmU4NGIxMTg4MTdjYjA2NTEzMzQ0MDIxNzYzMDM1MjcyYTdkYjcyOGEwY2NkYWE5NDljNjE3MTVkMDc2NDE0MGIzZThjMDFkMjBmZjE1OTNjN2YyZDU1YzRlODJhMWMwY2IxZWE1ODQ0MmJmODBhNzQxYmNhOTFmNThhYjA1ODFiNDk4ZWU5ZmUzYzkyY2E2NTQxNDhlZjc1MzEzNTQzZDFhZmYzODJiZWZlMWE5M2IwMjE5MGNlMDEwMjE3NTE1OGUyMDcxZDAyYmFjYWQ4ZGJlOWZiOTQwZmNiNjEwYzEwNWFkNTJjODBmZWIxZWM0ZTUyNGY0YzBlYzc5ODNlOWNlNjk2ZmE0ZmNmNGJmMDUxNGI4ZjA0MzJiMTdkNTQ0OGZjNDI2ZmVhMmIwMWFjN2IyNmMyYWVkNzY5OTI3NTM0ZGEyMjU3NmZjMWJiYTcyNmU5ZDY1YmUwMWI1OWY2MGE2NDhhY2UyZmMzZTVlMjc1Nzg5ZmE2MzdjYmJkODRiZTNkNmFjMjQ0NTdhNjI5MmNkNjU2YzdiNTY5YTUyZmZlYTc5MTZiOGQwNGI0ZjRhNzViZTdhYzk1MTQyZgorU0lHOiAxN2YwMTI3Y2EzYmFmYTVmNGVlOTU5Y2Q2MGY3NzJiZTg3YTAwMzQ5NjE1MTdlMzlhMGExZDBmNGI5ZTI2ZGIxMzM2ZTYwYzgyYjM1MmM0Y2JhY2RiYmQxMTc3MWMzNzc0ZjhjYzVhMWE3OTVkNmU0ZjRlYmQ1MWRlZjM2NzcwYgorCitUU1Q6IDM3MQorU0s6ICBmYzE4MDAzNWFlYzBmNWVkZTdiZGE5M2JmNzdhZGU3YTgxZWQwNmRlMDdlZTJlM2FhODU3NmJlODE2MDg2MTBhCitQSzogIDRmMjE1ZTk0OGNhZTI0M2VlMzE0M2I4MDI4MmFkNzkyYzc4MGQyYTZiNzUwNjBjYTFkMjkwY2ExYThlMzE1MWYKK01TRzogYjVlOGIwMTYyNTY2NGIyMjIzMzllMGYwNWY5M2E5OTBiYTQ4YjU2YWU2NTQzOWExNzUyMDkzMmRmMDExNzIxZTI4NGRiZTM2Zjk4NjMxYzA2NjUxMDA5OGE2OGQ3YjY5MmEzODYzZTk5ZDU4ZGI3NmNhNTY2N2M4MDQzY2IxMGJkN2FiYmFmNTA2NTI5ZmJiMjNhNTE2NmJlMDM4YWZmZGI5YTIzNGM0ZjRmY2Y0M2JkZGQ2YjhkMmNlNzcyZGQ2NTNlZDExNWMwOTVlMjMyYjI2OWRkNDg4OGQyMzY4Y2IxYzY2YmUyOWRkMzgzZmNhNjdmNjY3NjViMjk2NTY0ZTM3NTU1ZjBjMGU0ODQ1MDRjNTkxZjAwNmVhODUzM2ExMjU4M2FkMmU0ODMxOGZmNmYzMjRlY2FmODA0YjFiYWUwNGFhODk2NzQzZTY3ZWY2MWNhMzgzZDU4ZTQyYWNmYzY0MTBkZTMwNzc2ZTNiYTI2MjM3M2I5ZTE0NDE5NDM5NTUxMDFhNGU3NjgyMzFhZDljNjUyOWVmZjYxMThkZGU1ZGYwMmY5NGI4ZDZkZjJkOTlmMjc4NjNiNTE3MjQzYTU3OWU3YWFmZjMxMWVhM2EwMjgyZTQ3Y2E4NzZmYWJjMjI4MGZjZTdhZGM5ODRkZDBiMzA4ODViMTY1MGYxNDcxZGZjYjA1MjJkNDlmZWM3ZDA0MmYzMmE5M2JjMzY4ZjA3NjAwNmVhMDFlYzFjNzQxMmJmNjZmNjJkYzg4ZGUyYzBiNzQ3MDFhNTYxNGU4NTVlOWZhNzI4ZmIxZjExNzEzODVmOTZhZmJkZTcwZGVhMDJlOWFhOTRkYzIxODQ4YzI2MzAyYjUwYWU5MWY5NjkzYTE4NjRlNGUwOTVhZTAzY2RjMjJhZDI4YTBlYjdkYjU5Njc3OTI0NjcxMmZhYjVmNWRhMzI3ZWZlYzNlNzk2MTJkZTBhNmNjYWE1MzY3NTliOGUKK1NJRzogYTQzYTcxYzNhMTljMzU2NjBkYWU2ZjMxYTI1NGI4YzBlYTM1OTNmYzhmY2E3NGQxMzY0MDAxMmI5ZTk0NzNkNGFmZTA3MGRiMDFlN2ZiMzk5YmY0Y2E2MDcwZTA2MjE4MDAxMTI4NWE2N2RkNjg1OGI3NjFlNDZjNmJkMzIwMDQKKworVFNUOiAzNzIKK1NLOiAgYTI4MzZhNjU0Mjc5MTIxMjJkMjVkY2RmYzk5ZDcwNDZmZTliNTNkNWMxYmIyMzYxN2YxMTg5MGU5NGNhOTNlZAorUEs6ICA4YzEyYmRhMjE0YzhhYmIyMjg2YWNmZmJmODExMjQyNTA0MGFhYjlmNGQ4YmI3ODcwYjk4ZGEwMTU5ZTg4MmYxCitNU0c6IDgxM2Q2MDYxYzU2ZWFlMGZmNTMwNDFjMDI0NGFhNWUyOWUxM2VjMGYzZmI0MjhkNGJlYjhhOTllMDRiY2E4YzQxYmRkYjBkYjk0NWY0ODdlZmUzOGYyZmMxNGE2MjhmYWZhMjQ2MmY4NjBlNGUzNDI1MGViNGU5M2YxMzlhYjFiNzRhMjYxNDUxOWU0MWVlMjQwM2JlNDI3OTMwYWI4YmM4MmVjODljZWFmYjYwOTA1YmQ0ZGRiYmQxM2JkYjE5NjU0MzE0ZmM5MjM3MzE0MGI5NjJlMjI1OGUwMzhkNzFiOWVjNjZiODRlZjgzMTllMDM1NTFjYjcwN2U3NDdmNmM0MGFkNDc2ZmJlZmRjZTcxZjNhN2I2N2ExYWYxODY5YmM2NDQwNjg2ZTdlMDg1NWU0ZjM2OWQxZDg4YjgwOTlmYmE1NDcxNDY3ODYyN2JiYTFhZmY0MWU3NzA3YmM5N2VkZGY4OTBiMGMwOGRjZTNlOTgwMGQyNGM2ZjYxMDkyY2UyOGQ0ODFiNWRlYTVjMDk2YzU1ZDcyZjg5NDYwMDkxMzFmYjk2OGUyYmM4YTA1NGQ4MjVhZGFiNzY3NDBkY2YwZDc1OGM4YmY1NGZmMzg2NTllNzFiMzJiZmUyZTYxNWFhYWJiMGY1MjkzMDg1NjQ5Y2Y2MGI5ODQ3YmM2MjAxMWNlMzg3OGFmNjI4OTg0YTU4NDBhNGFkNWRhZTM3MDJkYjM2N2RhMGY4YTE2NWZlZDA1MTdlYjVjNDQyYjAxNDUzMzAyNDFiOTdlZWNhNzMzYmE2Njg4YjljMTI5YTYxY2QxMjM2YWZmMGUyN2JjZjk4YzI4YjBmYmVlYTU1YTNkN2M3MTkzZDY0NGIyNzQ5Zjk4NmJkNDZhZjg5MzhlOGZhYWVhZmJkOWNlYzM2MTJhYjAwNWJkN2MzZWVhZmU5YTMxMjc5Y2E2MTAyNTYwNjY2YmExNjEzNmZmMTQ1MmY4NTBhZGIKK1NJRzogZTZhOWE2YjQzNjU1OWE0MzIwYzQ1YzBjMmM0YTJhZWRlY2I5MGQ0MTZkNTJjODI2ODBhYzczMzBkMDYyYWViZWYzZTlhYzlmMmM1ZmZhNDU1YzliZTExMzAxM2EyYjI4MmU1NjAwZmQzMDY0MzVhZGE4M2IxZTQ4YmEyYTM2MDUKKworVFNUOiAzNzMKK1NLOiAgZjA1MWFmNDI2ZDBjMzI4MmZhZmM4YmY5MTJhZGUxYzI0MjExYTk1YWQyMDBlMWVlZjU0OTMyMGUxY2IxYTI1MgorUEs6ICBmYTg3OTU1ZTBlYTEzZGRlNDlkODNkYzIyZTYzYTJiZGYxMDc2NzI1YzJjYzdmOTNjNzY1MTFmMjhlNzk0NGYyCitNU0c6IGI0OGQ5Zjg0NzYyYjNiY2M2NmU5NmQ3NmE2MTZmYThmZThlMDE2OTUyNTFmNDdjZmMxYjdiMTdkNjBkYzlmOTBkNTc2ZWY2NGVlN2QzODg1MDRlMmM5MDc5NjM4MTY1YTg4OTY5NjQ3MWM5ODlhODc2ZjhmMTNiNjNiNThkNTMxZmVhNGRkMTIyOWZjNjMxNjY4YTA0N2JmYWUyZGEyODFmZWFlMWI2ZGUzZWJlMjgwYWJlMGE4MmVlMDBmYmZkYzIyY2UyZDEwZTA2YTA0OTJmZjE0MDRkZmMwOTRjNDBiMjAzYmY1NTcyMWRkNzg3ZWQ0ZTkxZDU1MTdhYWY1OGQzYmRkMzVkNDRhNjVhZTZiYTc1NjE5YjMzOWI2NTA1MThjZWZjYzE3NDkzZGUyN2EzYjVkNDE3ODhmODdlZGJkZTcyNjEwZjE4MWJmMDZlMjA4ZTBlYjdjZGZlODgxZDkxYTJkNmNjNzdhYTE5YzBmY2YzMzBmZWRiNDQ2NzVkODAwZWI4Y2ZmOTUwNWQ4ODg3NTQ0YTUwM2NiZTM3M2M0ODQ3YjE5ZThmMzk5NTcyNmVmZDY2NDk4NTg1OTVjNTdjY2FmMGNiYzllYjI1ZGU4M2JhMDQ2YmM5ZjE4MzhhYzdiODk1M2RkODFiODFhYzBmNjhkMGU5MzM4Y2I1NTQwMjU1MmFmYjZiYzE2OTQ5MzUxYjkyNmQxNTFhODJlZmM2OTVlOGQ3ZGEwZGQ1NTA5OTM2Njc4OTcxOGNjYmYzNjAzMGJkMmMzYzEwOTM5OWJlMjZjZGI4YjllMmExNTVmM2IyY2IxYmZhNzFhYjY5YTIzNjI1YTRhYzExOGZlOTFjYjJjMTk3ODhjZjUyYTcxZDczMGQ1NzZiNDIxZDk2OTgyYTUxYTI5OTFkYWVjNDQwY2RhN2U2Y2MzMjgyYjgzMTI3MTQyNzhiODE5YmZlMjM4N2ViOTZhYTkxZDQwMTczMDM0ZjQyOAorU0lHOiBiOGY3MTM1NzhhNjQ0NjY3MTlhY2ViNDMyZmNlMzAyYTg3Y2YwNjZiZjNlMTAyYTM1MDYxNjkyMWE4NDA5NjRiZmM3ZTY4NWQ4ZmQxNzQ1NWFjM2ViNDg2MWVkY2I4OTc5ZDM1ZTNhNGJkODJhMDc4Y2Q3MDc3MjFkNzMzNDAwZQorCitUU1Q6IDM3NAorU0s6ICBhMTAzZTkyNjcyYzY1ZjgxZWE1ZGExZmZmMWE0MDM4Nzg4NDc5ZTk0MWQ1MDNhNzU2ZjRhNzU1MjAxYTU3YzFkCitQSzogIGVlNjNhNWI2OTY0MTIxN2FjYmFmMzMzOWRhODI5ZWMwNzFiOTkzMWU1OTg3MTUzNTE0ZDMwMTQwODM3YTdhZjQKK01TRzogYjE5ODRlOWVlYzA4NWQ1MjRjMWViM2I5NWM4OWM4NGFlMDg1YmU1ZGM2NWMzMjZlMTkwMjVlMTIxMGExZDUwZWRiYmJhNWQxMzcwY2YxNWQ2OGQ2ODdlYjExMzIzM2UwZmJhNTBmOTQzM2M3ZDM1ODc3Mzk1MGM2NzkzMWRiODI5NmJiY2JlY2VjODg4ZTg3ZTcxYTJmNzU3OWZhZDJmYTE2MmI4NWZiOTc0NzNjNDU2YjlhNWNlMjk1NjY3Njk2OWM3YmY0YzQ1Njc5MDg1YjYyZjJjMjI0ZmM3ZjQ1ODc5NDI3M2Y2ZDEyYzVmM2UwZDA2OTUxODI0ZDFjY2EzZTJmOTA0NTU5ZWQyOGUyODY4YjM2NmQ3OWQ5NGRjOTg2NjdiOWI1OTI0MjY4ZjNlMzliMTI5MWU1YWJlNGE3NThmNzcwMTlkYWNiYjIyYmQ4MTk2ZTBhODNhNTY3NzY1ODgzNmU5NmNhNTYzNTA1NWExZTYzZDY1ZDAzNmE2OGQ4N2FjMmZkMjgzZmRkYTM5MDMxOTkwOWM1Y2M3NjgwMzY4ODQ4ODczZDU5N2YyOThlMGM2MTcyMzA4MDMwZmZkNDUyYmIxMzYzNjE3YjMxNmVkN2NkOTQ5YTE2NWRjOGFiYjUzZjk5MWFlZjNmM2U5NTAyYzVkZmU0NzU2YjdjNmJmZGZlODlmNWUwMGZlYmRkNmFmYjA0MDI4MThmMTFjZjhkMWQ1ODY0ZmU5ZGExYjg2ZTM5YWE5MzU4MzE1MDZjZjI0MDBlYTdlZDc1YmQ5NTMzYjIzZTIwMmZlODc1ZDdkOTYzOGM4OWQxMWNiMmQ2ZTYwMjFhZTZiZDI3Yzc3NTQ4MTBkMzVjZDNhNjE0OTRmMjdiMTZmYzc5NGUyY2QyZjBkMzQ1M2FkYTkzMzg2NWRiNzhjNTc5NTcxZjhmYzVjNWM2YmU4ZWFmZmNlNmE4NTJlNWIzYjFjNTI0YzQ5MzEzZDQyN2FiY2IKK1NJRzogMmFhMjAzNWMyY2U1YjVlNmFlMTYxZTE2OGYzYWQwZDY1OTJiY2YyYzRhMDQ5ZDNlZDM0MmZjZWI1NmJlOWM3Y2IzNzIwMjc1NzNhZTAxNzhlODg3OGViZWZjYTdiMDMwMzI3YjhhYWQ0MTg1N2RlNThjYjc4ZTFhMDBjYmFjMDUKKworVFNUOiAzNzUKK1NLOiAgZDQ3YzFiNGI5ZTUwY2JiNzFmZDA3ZDA5NmQ5MWQ4NzIxM2Q0NGIwMjQzNzMwNDQ3NjFjNDgyMmY5ZDlkZjg4MAorUEs6ICBmNGUxY2I4NmM4Y2EyY2ZlZTQzZTU4NTk0YTg3Nzg0MzZkM2VhNTE5NzA0ZTAwYzFiYmU0OGJiYjFjOTQ1NGY4CitNU0c6IDg4ZDcwMDlkNTFkZTNkMzM3ZWVmMGYyMTVlYTY2YWI4MzBlYzVhOWU2ODIzNzYxYzNiOTJhZDkzZWEzNDFkYjkyZWNlNjdmNGVmNGNlYjg0MTk0YWU2OTI2YzNkMDE0YjJkNTk3ODFmMDJlMGIzMmY5YTYxMTIyMmNiOWE1ODUwYzY5NTdjYjgwNzlhZTY0ZTA4MzJhMWYwNWU1ZDFhM2M1NzJmOWQwOGYxNDM3Zjc2YmIzYjgzYjUyOTY3YzNkNDhjMzU3Njg0ODg5MWM5NjU4ZDQ5NTllYjgwNjU2ZDI2Y2RiYTA4MTAwMzdjOGExODMxOGZmMTIyZjhhYTg5ODVjNzczY2IzMTdlZmEyZjU1N2YxYzM4OTZiY2IxNjJkZjVkODc2ODFiYjc4N2U3ODEzYWEyZGVhM2IwYzU2NGQ2NDZhOTI4NjFmNDQ0Y2ExNDA3ZWZiYWMzZDEyNDMyY2JiNzBhMWQwZWFmZmIxMTc0MWQzNzE4ZmVkZWUyYjgzMDM2MTg5YTZmYzQ1YTUyZjc0ZmE0ODdjMThmZDI2NGE3OTQ1ZjZjOWU0NGIwMTFmNWQ4NjYxM2YxOTM5YjE5ZjRmNGZkZjUzMjM0MDU3YmUzZjAwNWFkNjRlZWJmM2M4ZmZiNThjYjQwOTU2YzQzMzZkZjAxZDQ0MjRiNzA2YTBlNTYxZDYwMTcwOGQxMjQ4NWUyMWJjYjZkNzk5ZDhkMWQwNDRiNDAwMDY0ZWMwOTQ0NTAxNDA2ZTcwMjUzOTQ3MDA2Y2FiYmRiMmRkNmJkOGNlZTQ0OTc2NTNkOTExM2E0NGQ0ZGU5YjY4ZDRjNTI2ZmNhMGI5YjBjMThmZTUwZmI5MTdmZGQ5YTkxNGZiODE2MTA4YTczYTZiM2ZmZjllNjU0ZTY5YzljZmUwMmIwNWM2YzFiOWQxNWM0ZTY1Y2YzMTAxOGI4MTAwZDc4NDYzM2VlMTg4OGVlZTM1NzJhYWZhNmYxODllYTIyZDAKK1NJRzogNjI3ZTdjYTdlMzRlZDYzMzFkNjJiOTU0MWMxZWE5YTkyOTJiZTdiMGE2NWQ4MDVlMjY2YjUxMjIyNzJhODJkYjdkNzY1YWNjN2UyYTI5MGQ2ODU4MDQ5MjJmOTFlZDA0YTNjMzgyYzAzZmYyMWExNzY4ZjU4NDQxM2M0ZTVmMDAKKworVFNUOiAzNzYKK1NLOiAgZmMwYzMyYzVlYjZjNzFlYTA4ZGMyYjMwMGNiY2VmMThmZGRlM2VhMjBmNjhmMjE3MzMyMzdiNGRkYWFiOTAwZQorUEs6ICA0N2MzN2Q4YTA4MDg1N2ViODc3N2E2YzBhOWE1YzkyNzMwM2ZhZjVjMzIwOTUzYjVkZTQ4ZTQ2MmUxMmQwMDYyCitNU0c6IGE3YjFlMmRiNmJkZDk2YjNkNTE0NzU2MDM1MzdhNzZiNDJiMDRkN2ViZDI0ZmU1MTVhODg3NjU4ZTRhMzUyZTIyMTA5MzM1NjM5YTU5ZTI1MzQ4MTFmNDc1M2I3MDIwOWQwZTQ2OThlOWQ5MjYwODg4MjZjMTQ2ODk2ODFlYTAwZmEzYTJmY2FhMDA0N2NlZDNlZjI4N2U2MTcyNTAyYjIxNWU1NjQ5NzYxNGQ4NmI0Y2IyNmJjZDc3YTJlMTcyNTA5MzYwZWU1ODg5M2QwMWMwZDBmYjRkNGFiZmU0ZGJkOGQyYTJmNTQxOTBmYTJmNzMxYzFjZWFjNjgyOWMzZGRjOWJmYjJmZmQ3MGM1N2JhMGMyYjIyZDIzMjZmYmZlNzM5MGRiODgwOWY3MzU0N2ZmNDdiODZjMzZmMmJmNzQ1NGU2NzhjNGYxYzBmYTg3MGJkMGUzMGJiZjMyNzhlYzhkMGM1ZTliNjRhZmYwYWY2NGJhYmMxOWI3MGY0Y2Y5YTQxY2I4Zjk1ZDNjZGUyNGY0NTZiYTM1NzFjOGYwMjFkMzhlNTkxZGVjMDVjYjVkMWNhN2I0OGY5ZGE0YmQ3MzRiMDY5YTlmZDEwNjUwMGMxZjQwOGFiN2ZlOGU0YTZlNmYzZWQ2NGRhMGVkMjRiMDFlMzNkZjg0NzVmOTVmYTllZDcxZDA0ZGQzMGIzY2Q4MjM3NTVhMzQwMWJmNWFmYWUxMGVlN2UxOGVjNmZlNjM3YzM3OTNmZDQzNGI0OGQ3MTQ1MTMwNDQ3ZTAwMjk5MTAxMDUyNTU4YjUwNjU1NGVjOWMzOTlmNjI5NDFjM2Y0MTRjYmMzNTJjYWEzNDViOTMwYWRlY2ZhZGRhYzkxZWU1M2QxNDUxYTY1ZTA2MjAxMDI2MzI1ZGUwN2M5MzFmNjliYmE4NjhhN2M4N2VlMjNjNjA0ZWM2Nzk0MzMyOTE3ZGZlMmM1YjY5NjY5YjY1OTcwNjkxN2Y3MWVkZGY5NgorU0lHOiA2ODg3YzZlMmI5OGE4MmFmNWVlM2RmYTdjYTJjYjI1ZDljMTA3NDU2MjBhODI5NTZhY2JhODVjYjU3YzhlYzI0Mjc5ZmE0MmYwOTIzNTlhMWI2YmJlYWZiYTA1MGYxNGI2Mjg4MjA5ZTZlZjdiYzFlMGEyYjg3MmMxMTM4ZjMwNQorCitUU1Q6IDM3NworU0s6ICBhOGQ3M2Q2MzlhMjNjYzZhOTY3ZWYzMWJjYWJiNWQwNjNlNTNlMWVhYjhmY2M3Y2FiOWJjM2ExN2ZkZTljMmY4CitQSzogIDhkYWE5ZjRjOGIxYTQ0NjkxYmY0NDUyMWYyZjdjYTQ1ZGM3ZmM2MWY2YTRjZTZmOThmYWE0MWMyYTc0OTc3ZDEKK01TRzogZmQxZmFjM2Q1MzMxM2IxMWFjZDI5ZjVhODNhYzExODk2ZGFiMjUzMGZhNDc4NjViMjI5NWMwZDk5ZGQ2N2MzNmVkOGU1ZmE1NDkxNTBjNzk0YzU1NDllZmI1YzFkNjkxMTRkNWQ2MDdiMjMyODViNzIxMmFmYWFiNTc4NDZhNTRhZTY3YjllODgwZTA3YjY1ODY2MDdjZWNmNmQ0ZWVkNTE2YTNhNzU1MTFmZTM2N2Q4OGViODcxZTZkNzFiN2Q2YWExMzY3YTAxNDIxYjEwODhmYzJkNzVlNDQ5NTRiNzM2MjVjNTJkYThhM2ExODNjNjBiZTlkYTYwNTBmNTlhNDUzY2FhNTM1MjA1OTM2NzE3MjhkNDMxODc3YmZhYWM5MTNhNzY1ZmI2YTU2Yjc1MjkwYjJhOGFhYWMzNGFmYjkyMTdiYTFiMGQ1ODUwYmEwZmRhYmY4MDk2OWRlZjBmZWVlNzk0Y2ViNjA2MTRlMzM2OGU2M2VmMjBlNGMzMmQzNDFlYzliMDMyOGVhOWZlMTM5MjA3ZWQ3YTYyNmZmMDg5NDNiNDE1MjMzZGI3Y2ZjYzg0NWM5YjYzMTIxZDRlZDUyZWMzNzQ4YWI2YTFmMzZiMjEwM2M3ZGM3ZTkzMDNhY2VhNGJhOGFmN2EzZTA3MTg0ZmI0OTFlODkxZWRlODRmMGRjNDFjYWRjMzk3MzAyOGU4NzlhY2QyMDMxYWZjMjlhMTYwOTI4NjhlMmM3ZjUzOWZjMWI3OTJlZGFiMTk1YTI1YWI5ODMwNjYxMzQ2YjM5ZWY1MzkxNWRlNGFmNTJjNDIxZWFmMTcyZTlkYTc2YTA4YzI4M2E1MmRmOTA3ZjcwNWQ3ZTg1OTljNWJhYWUwYzJhZjM4MGMxYmI0NmY5MzQ4NGEwM2YyODM3NDMyNGIyNzg5OTJiNTBiN2FmYTAyNTUyY2FmYTUwM2YwMzRmOGQ4NjZlOWI3MjAyNzFkZDY4Y2NiNjg1YTg1ZmZmZDEKK1NJRzogYzRkY2VmMWEyNDUzOTM5YjM2NGIzNDAyNTBjMzEyOTQzMTQzMWQ1YmEzZjQ3NjcwYWIwN2NlNjgwYzY5YmYyOGI2Nzg2MjdjNzZhNjM2MGZjNDBkYzEwOWFhN2RlYTM3MWI4MjVlNDYxMzRmNjI0NTcyMTgyYWNmMzk1N2U3MGYKKworVFNUOiAzNzgKK1NLOiAgNzljN2RjYjdkNTlhOGRmNmIyYjJiYTA0MTMwNTlkODk2ODA5OTVjMjBlOTE2ZGEwMWI4ZjA2N2RjNjBjZGViNAorUEs6ICAyOTg3NDNjNzM5MThiZDU1NmIyOGY4ZDQ4MjRhMDliODE0NzUyYTdhZWFlN2VlMDQ4NzVjNTNmNGQ2YjEwOGQ5CitNU0c6IDVmZTIwMmY1YjMzYjc3ODg4MTBkMjUwOGExM2IzMTE0ZDY5Yjg1OTZlNmVhY2RhMDVhMDRhMmViNTk3ZmEzMjc5YzIwOGI1YTViNjVkYWFjYjY5OWYxNDRlMWQ2NjBlNzhlMTM5YjU3ODMzMWFiZWM1YzNjMzUzMzQ0NTRmMDNlODMyYzhkNmUyOTg0ZGY1ZDQ1MGVjYjVkMzM1ODJhNzg4MDhhOWM3OGYyNmViY2QxMjQ0ZWY1MmUzZmE2ZGNhMTE1YzFmMGNiNTZlMzhlYWUwZTViMzlmNWZkODYzZGZmZDBiMmZiNWI5NThmMmQ3MzlkYjMxMmZjNjY3YTE3YjAzMWM0YzlmOGM1YTJhZDU3Nzk4NGNjNDE0NmM0Mzc1ODBlZmQyMTUyMTczZmUwZDU3ODJjYzJhZTk4MzFhOGQ5YTA0MTc3MjU2MDE4ZmY3NjMxZTBiMGQ4YTk5Y2IyOGYwMDhiMzIwNDIxZTI3YTc0YzMxMzU5MTg4NjYzNDU2ZDg1ZTA5OGMxZWJkMjgxNzAxMDk3YjZhZTVhODcxZTVjY2MwMjA1OGE1MDE0MTZjYjkxYzEyY2VmNWJlNmYxOTE0MzcwZTU2M2YxYTFiMmFhNDFmNGI4ZWU4NGNkMzJhMWQ1MDllNTI5Nzg3ZDE0YTQ0NTQzOGQ4MDdlY2Q2MjBlMmZhMjZkZTBkYTY0MjY4NjQ3ODRkNGEyOGY1NDEwM2U2MDkyODNiOTllZTliMmI2OTljOTgwYmJiNzg4MmMzZWE2OGRkYzkwODAyYWMyMzJmMmM4ZTg0MjkxOTg3YmYzYzUyNDA5MjFiNTljZmEyMTQ5NjkzMTc2NzNkMGJlN2YzNGIxY2EwZTE1ZWE3M2M3MTc1NDAxY2U1NTBiZTEwNmI0OWU2MmY4ZGI2ODY5NWU3NDBlMGYzYTM1NTZhMTlmM2M4ZTZiOTFhYzFjYzIzZTg2M2ZjZDBmMGQ5ZWI3MDQ3YWE2MzFlMGQyZWI5YmNjNmIKK1NJRzogN2I3Y2JlNDRjNzcxZTQzNzFiYWUxM2IwNzIyYmFiY2MxMDY0MTU1NzMyOTYyZjQwN2NiYTJhY2QzNTM4MWQ0MjIxMGJlY2U4MjJmNDY4MTEyMWZkNGRhYjc0NWExZjMwNzc5MjJmYmExYTc4MDQ1YjcxMjkwMmJhY2NhYzY2MGUKKworVFNUOiAzNzkKK1NLOiAgYjljZWQwNDEyNTkzZmVmZWQ5NWU5NGFjOTY1ZTViMjNmZjlkNGIwZTc5N2RiMDJiZjQ5Nzk5NGQzYjc5M2U2MAorUEs6ICBjMTYyOWE3MjMxODk5NTkzMzdmNTUzNTIwMWU1ZDM5NWJhMGEwM2VhOGMxNzY2MGQwZjhiNmY2ZTY0MDRiYjEyCitNU0c6IDU1NWJiMzljMTg5OWQ1N2NhYmU0MjgwNjRjMmQ5MjVmNWZjNGNmNzA1OWI5NWZiODlhOGU5ZTNhN2U0MjZjNmM5MjJkOWU0ZDc2OTg0ZWEyMzgzY2FiYjRmMmJlZmQ4OWMxZjIwZWFhOGEwMGRiZTc4N2NmYTcwYWUyYWU2YWE5MDMzMWNiYmU1ODBmYTVhMDIxODRlZDA1ZTZjOGU4OWQ1NzZhZjI4YWVlYWY3YzRlMjUwMGYzNThhMDA5NzFhMGE3NTkyMGU4NTQ4NDliZjMzMjE0Mjk3NTQwNGY1OThjMzJlOTY5ODIwNDNkOTkyYmNkMWE0ZmU4MTliYjU2MzRhZDAzNDY3YWZjNGNlMDUwNzNmODhiYTFiYTRhZTg2NTNhMDQ2NjVjZjNmNzE2OTBmZTEzMzQzODg1YmM1ZWJjMGU1ZTYyZDg4MmY0M2I3YzY4OTAwYWM5NDM4YmY0YTgxY2U5MDE2OWVjMTI5ZWU2M2UyYzY3NWExYTVhNjdlMjdjYzc5OGM0OGNjMjNmNTEwNzhmNDYzYjNiN2NjMTRlM2JjZmQyZTliODJjNzUyNDA5MzRjYmRjNTBjNDMwOGYyODJmMTkzMTIyOTk1NjA2ZjQwMTM1MTAwYTI5MWM1NWFmZGY4OTM0ZWI4YjYxZDgxNDIxNjc0MTI0ZGVjM2I4OGY5YTczMTEwYTllNjE2ZjViODI2YjlkMzQzZjNhYzBlOWQ3YmRmNGZkOGI2NDhiNDBmMDA5OGIzODk3YTNhMWNkNjVhNjQ1NzAwNTliOGJjNWM2NzQzODgzMDc0Yzg4NjIzYzFmNWE4OGM1ODk2OWUyMWM2OTJhY2EyMzY4MzNkMzQ3MGIzZWIwOTgxNWUxMTM4ZTlkMDY1MGMzOTBlZWU5Nzc0MjIxOTNiMDA5MThiZThhOTdjYzYxOTliNDUxYjA1YjU3MzBkMWQxMzM1OGNmNzQ2MTA2NzhmN2FjN2Y3ODk1Y2MyZWZjNDU2ZTAzODczYgorU0lHOiBmMWI3OTdkZWQ4YTY5NDJiMTI2MjY4NDgzNDBmYjcxOWZjZGRhZmQ5OGYzM2UyOTkyZDM1N2JmZGQzNTkzM2M3YWM1NjFlNWIyZjkzOTQ2NDMzOGM1NjY2ODU0Y2E4ODVjNGQwNDZlYjJjNTRlNDhhMWI1ZWQyNjZhZDM0ZGUwNQorCitUU1Q6IDM4MAorU0s6ICA4MWRhMTY4ZjAyZDQ2YmI4N2NkYTg0NWRhNDNmOGE2Y2JhMmMwMTY4NzhkNmY0OWM2ZjA2MWE2MGYxNTVhMDRhCitQSzogIGFmZjg2ZTk4MDkzY2E0YzcxYjFiODA0YzVmZTQ1MWNmZGY4NjgyNTBkZWEzMDM0NWZhNGI4OWJiMDliNmE1M2IKK01TRzogNmJjNjcyNmEzNGE2NGFhZTc2YWIwOGM5MmIxNzllNTRmZjVkMmU2NWViMmM2YzY1OWFlODcwM2NjMjQ1Y2JjMmNmNDVhMTJiMjJjNDY4YWU2MWZkOWE2NjI3YWQwNjI2YzliMWU1YWY0MTJjYjQ4M2VhZWUxZGIxMWIyOWYwYTUxMGMxM2UzODAyMGUwOWFlMGVlZTc2MjUzN2EzZTlkMWEwYzdiMDMzZDA5N2ZkYzFmNGY4MjYyOWE5ZGU5ZWYzOGRhMWNmOTZhOTQwMzU3ZDVmMmUwZTdlOGRiYzI5ZGI3MjhhMWU2YWFkODc2ZTVlMDUzMTEzZDA2NDIwMjcyYjg3Y2YwYzQwZGZlMDNhNTQ0ZGU5NmM3YWVhMTNiYTAwMjliNTdiNDhkOTlkY2M2YTY1MDQ5MmQ3OGM0Y2RkMWIyOGUxYTExNWE3ZTNlN2E3Y2IyMTMzM2Q0ZmY4MDg1OGRmYjY3NzgyYzE2MzU0Yjg3MTY1OTY1NjBkN2Q4ZTM4OWViMTVhMDUyYTBiZjVkMTZlYjU0ZmIzZTQ5NzNhZDQ5ODRlNzJhMTg3ZjUzNDdkNWIyNjJjMzJiMTY0N2U0MmI2YTUzODM3MDk2Y2M3OGMyYTA1Y2UxYzZlMTI0OTNhMDNmMWE2Njc1ODRjYjk3ZjRmY2Q1N2VlOTQ0YzY1YjdlZWQyNWY3YWUwZjNmNmNlZGUxNzNmZGZhY2Y1YWYxZGIxNDM3MzBkMTgwOTY2NjQ5MTRiYTRjZmM2OTY2ZjM5MjAyMjc4MWM2NmE5NDE3Y2EyNjgwYjUxZjYzZTRmYmE0MjRlY2ZkYmM2YTJmMDE3ODdkMGU3NDg0ZjhhOGFiMzkwYWVhYTZkMWY3ZWQzMjVkODJmZWFhMTY5MmE0OTg0ZmFlNDNkYTg3MzI5YjA0NWRhOGYwYTRmNTZiNjk1YWE5MzVkZTE1MmNlMDM4NTE1MzcyMDk3OWEyYjcwMDZkNDA1ZmNiMGZiYTA5ZTIzYjg1ZmQxOWIKK1NJRzogNGFhY2E5NDdlM2YyMmNjOGI4NTg4ZWUwMzBhY2U4ZjZiNWY1NzExYzI5NzRmMjBjYzE4YzNiNjU1YjA3YTViYzEzNjZiNTlhMTcwODAzMmQxMmNhZTAxYWI3OTRmOGNiY2MxYTMzMDg3NGE3NTAzNWRiMWQ2OTQyMmQyZmMwMGMKKworVFNUOiAzODEKK1NLOiAgYWYyZTYwZGEwZjI5YmIxNjE0ZmMzZjE5M2NjMzUzMzMxOTg2YjczZjNmOWEwYWVjOTQyMWI5NDczZDZhNGI2YQorUEs6ICBjOGJmZTI4MzU4MjIxOTljNjEyN2I4MDZmYWJlZWYwY2I5ZmY1OWYzYzgxZmYwY2I4OWM1NTZmNTUxMDZhZjZhCitNU0c6IDdkYmI3N2I4OGJkYTk0ZjM0NDQxNmEwNmIwOTY1NjZjNmU4YjM5MzkzMWE4MjQzYTZjYWI3NWMzNjFmZGU3ZGM1MzZhZWM0MGNkZWQ4MzI5NmE4OWU4YzNiZWY3ZDc4N2NmYzQ5NDAxYTdiOTE4M2YxMzhkNTAwMDYxOWZmMDczYzA1ZTJmODQxZDYwMDgzNThmMTBhMmRhN2RjZmFjM2Q0ZDcwYzIwZDJlYzM0YzdiNmQ1Y2QxYTczNGQ2YmJiMTFjNWZkOGQyYmNlMzJhYzgxMGVmODJiNDE4OGFhOGVhM2NmYzMwMzIyMzNkYzBlMjYwMGU5ZGI2ZTE4YmMyMmIxMDA0NGEzMWMxNWJhY2VhZjU1NTRkZTg5ZDJhMzQ2NjgwN2YyNDQ0MTRkMDgwZmYyOTYzOTU2YzZlODNjOGUxNDRlZDAwNjYwODhiNDc2ZGRjYjU2NDQwMzQ0N2Q5MTU5ZjkwODlhYmEyYjRkNTU3NWM0ZDhhZTY2ZmM4NjkwZTczNDllZDQwODMyZTYzNjljMDI0NTYzZWM0OTNiZmNjMGZjOWFjNzg3YWM4NDEzOTdmZTEzMzE2NzI4M2Q4MGM0MmYwMDZhOTlkMzllODI5NzlkYTNmYTkzMzRiZDllZGUwZDE0YjQxYjc0NjZiY2ViYmU4MTcxYmM4MDRhNjQ1ZDM3MjMyNzRhMWI5MmJmODJmZDk5MzM1ODc0NGRlOTI0NDE5MDNkNDM2ZmQ0N2YyM2Q0MDA1MmEzODI5MzY3ZjIwMmYwNTUzYjVlNDliNzZjNWUwM2ZhNmNlN2MzY2Y1ZWViMjFkZTk2N2JlYzRkZDM1NTkyNTM4NGViZjk2Njk3ZTgyMzc2MmJhYzRkNDNhNzY3YzI0MWE0Y2VmNzI0YTk3MGQwMGZmM2E4YWIzYjgzZWVkODQwMDc1Yzc0ZTkwZjMwNmUzMzAwMTMyNjA5NjIxNjFlOWQwOTEwZGUxODM2MjJjZTlhNmI4ZDUxNDQyODA1NTBmYzcKK1NJRzogNTBmOWY5NDFhOGRhOWY2MjQwZjc2ZDJmYTNiMDZkZDZiMjI5MmVkMzJkMWMwNTIxODA5N2QzNGQ4YTE5ZGZlNTUzZjc2YWUzYzZiNGEyZWQyMDg1MjEyODQ2MTU0MGRlY2Y0MThmNTJkMzhlNjQwMzdlZWM3NzcxYmQxYWZlMDAKKworVFNUOiAzODIKK1NLOiAgNjA1ZjkwYjUzZDhlNGEzYjQ4Yjk3ZDc0NTQzOWYyYTA4MDdkODNiODUwMmU4ZTI5NzlmMDNlOGQzNzZhYzlmZQorUEs6ICBhYTNmYWU0Y2ZhNmY2YmZkMTRiYTBhZmEzNmRjYjFhMjY1NmYzNjU0MWFkNmIzZTY3ZjE3OTRiMDYzNjBhNjJmCitNU0c6IDNiY2RjYWMyOTJhYzk1MTkwMjRhYWVjZWUyYjNlOTk5ZmY1ZDM0NDVlOWYxZWI2MDk0MGYwNmI5MTI3NWI2YzVkYjI3MjJlZDRkODJmZTg5NjA1MjI2NTMwZjNlNmIwNzM3YjMwOGNkZTg5NTYxODQ5NDRmMzg4YTgwMDQyZjZjYmEyNzRjMGY3ZDExOTJhMGE5NmIwZGE2ZTJkNmE2MWI3NjUxOGZiZWU1NTU3NzNhNDE0NTkwYTkyOGI0Y2Q1NDVmY2NmNTgxNzJmMzU4NTcxMjBlYjk2ZTc1YzVjOGFjOWFlM2FkZDM2N2Q1MWQzNGFjNDAzNDQ2MzYwZWMxMGY1NTNlYTlmMTRmYjJiOGI3OGNiYTE4YzNlNTA2YjJmMDQwOTcwNjNhNDNiMmQzNjQzMWNjZTAyY2FmMTFjNWE0ZGI4YzgyMTc1MmU1Mjk4NWQ1YWYxYmZiZjRjNjE1NzJlM2ZhZGFlM2FkNDI0YWNkODE2NjJlYTU4MzdhMTE0M2I5NjY5MzkxZDdiOWNmZTIzMGNmZmIzYTdiYjAzZjY1OTFjMjVhNGYwMWMwZDJkNGFjYTNlNzRkYjE5OTdkMzczOWM4NTFmMDMyN2RiOTE5ZmY2ZTc3ZjZjOGEyMGZkZDNlMTU5NGU5MmQwMTkwMWFiOWFlZjE5NGZjODkzZTcwZDc4YzhhZTBmNDgwMDAxYTUxNWQ0Zjk5MjNhZTYyNzhlODkyNzIzN2QwNWRiMjNlOTg0YzkyYTY4Mzg4MmY1N2IxZjE4ODJhNzRhMTkzYWI2OTEyZmYyNDFiOWZmYTY2MmEwZDQ3ZjI5MjA1ZjA4NGRiZGU4NDViYWFlYjVkZDM2YWU2NDM5YTQzNzY0MmZhNzYzYjU3ZThkYmU4NGU1NTgxM2YwMTUxZTk3ZTViOWRlNzY4YjIzNGI4ZGIxNWM0OTZkNGJmY2ZhMTM4ODc4ODk3MmJiNTBjZTAzMGJjNmUwY2NmNGZhN2QwMGQzNDM3ODJmNmJhOGRlMAorU0lHOiBkZDAyMTJlNjMyODhjYmUxNGE0NTY5YjRkODkxZGEzYzdmOTI3MjdjNWU3ZjlhODAxY2Y5ZDY4MjcwODVlNzA5NWI2NjlkN2Q0NWY4ODJjYTVmMDc0NWRjY2QyNGQ4N2E1NzE4MTMyMDE5MWU1YjdhNDdjM2Y3ZjJkY2NiZDcwNworCitUU1Q6IDM4MworU0s6ICA5ZTJjM2QxODk4MzhmNGRkNTJlZjA4MzI4ODY4NzRjNWNhNDkzOTgzZGRhZGMwN2NiYzU3MGFmMmVlOWQ2MjA5CitQSzogIGY2OGQzYjgxZTczNTU3ZWUxZjA4YmQyZDNmNDZhNDcxODI1NmEwZjNjZDhkMmUwM2ViOGZlODgyYWFiNjVjNjkKK01TRzogMTk0ODVmNTIzOGJhODJlYWRmNWVmZjE0Y2E3NWNkNDJlNWQ1NmZlYTY5ZDU3MThjZmI1YjFkNDBkNzYwODk5YjQ1MGU2Njg4NDU1OGYzZjI1YjdjM2RlOWFmYzQ3MzhkN2FjMDlkYTVkZDQ2ODliYmZhYzA3ODM2ZjVlMGJlNDMyYjFkZGNmMWIxYTA3NWJjOTgxNWQwZGViYzg2NWQ5MGJkNWEwYzVmNTYwNGQ5YjQ2YWNlODE2YzU3Njk0ZWNjM2Q0MGQ4Zjg0ZGYwZWRlMmJjNGQ1Nzc3NzVhMDI3ZjcyNWRlMDgxNmY1NjNmYTg4Zjg4ZTA3NzcyMGViYjZhYzAyNTc0NjA0ODE5ODI0ZGI3NDc0ZDRkMGIyMmNkMWJjMDU3NjhlMGZiODY3Y2ExYzFhN2I5MGIzNGFiN2E0MWFmYzY2OTU3MjY2YWMwYzkxNTkzNGFhZjMxYzBjZjY5MjdhNGYwM2YyMzI4NWU2ZjI0YWZkNTgxMzg0OWJiMDhjMjAzYWMyZDAzMzZkY2JmODBkNzdmNmNmNzEyMGVkZmJjZGYxODFkYjEwN2VjOGUwMGYzMjQ0OWMxZDNmNWMwNDlhOTI2OTRiNGVhMmM2ZWJlNWUyYjBmNjRiNWFlNTBhZDMzNzRkMjQ2YjMyNzAwNTdlNzI0YTI3Y2YyNjNiNjMzYWI2NWVjYjdmNWMyNjZiODAwNzYxOGIxMGFjOWFjODNkYjBmZWJjMDRmZDg2M2Q5NjYxYWI2ZTU4NDk0NzY2ZjcxYjlhODY3YzVhN2E0NTU1ZjY2N2MxYWYyZTU0NTg4ZjE2MmE0MWNlNzU2NDA3Y2M0MTYxZDYwN2I2ZTA2ODI5ODA5MzRjYWExYmVmMDM2ZjczMzBkOWVlZjAxZWNjNTUzNTgzZmVlNTk5NGU1MzNhNDZjYTkxNmY2MGY4Yjk2MWFlMDFkMjBmN2FiZjBkZjYxNDFiNjA0ZGU3MzNjNjM2YjQyMDE4Y2Q1ZjFkMWVmNGY4NGNlZTQwZmMKK1NJRzogMzhhMzFiNmI0NjUwODQ3MzgyNjJhMjZjMDY1ZmU1ZDllMjg4NmJmOWRkMzVjZGUwNWRmOWJhZDBjYzdkYjQwMWM3NTBhYTE5ZTY2MDkwYmNlMjVhM2M3MjEyMDFlNjA1MDJjOGMxMDQ1NDM0NjY0OGFmMDY1ZWFiMGVlN2Q4MGYKKworVFNUOiAzODQKK1NLOiAgMzEwMTBkMWQ2N2ViNjE2MzQ4ZTg0NzkyYjkyZDVkYzEyODU1M2NiNTJmNjM2ODE1OWZlN2I4MTZjZDBlN2MzNworUEs6ICAyNjY1NDNkOTY3ODdjYTkwMWZjZmYwNmU2ZTQzNDQ5MWFlMDk3MDg4MGE1YTE4N2Q1MzVlZGIxOWRiNWNhYmViCitNU0c6IDM5Zjg5YTVlN2FhNTMwYjU0NjNkNDk4ZjgwMzViOTkwOWQ1NWRhNTI3Y2RiZDRkZTZkMjI4Mzc5ZjA4OWU2MDhhOTIwN2EyYzViOWM0MjA1MWE2MGM4Y2EzZmI5N2ExYzA2Y2Q3NDdkOWQwNzM5OTcwY2ViODhjZTUyNmY5NzExNDBlYTJlYzIxZjA5MGJhMDc1YmY4OTc1ZmFhNTA4YjFjYzEwZWZhNDk0ZGMxNzJlNmQzZDNmM2Y3NWRjOGUwZTk2ZjA1YzBjY2NiMmY5NmU5MTFjZmE3YTJjODJjOTg0NTAxOGJiMWY5ZDc1ZjgyZTNkZmUxMTM5MzQ3YjJhYzA1OGIwMTRhYzkzNzYwYzkwZjU1NjdhYjVjNGViYTA0YjQ5ZmIwOWRkYWRkMzA1YmU1MTFkZmUwNWM5NmViYzg2ZmQ2N2I1ZDBhYjU3ZDg1ZjRmZTVlMmYwZmE5ZDg4YTY4ZjBmNmI2YmM4YmI5NDRlYjNjMGIxNzU1N2U1NWQ1ZWExODdkOTIyYTQyODEzZTY5MDU3YzliNmE3Zjc1ZTQ5OTIxYjcwNzllNThmOGE2MzcxOWVlM2UxYWQxMGNmMGU4YTcwYzRmMTU0MDIxOGI3MDQ5NGJkMDI5ZWUwMmZmOTcyN2E3ZDg1ZDM3NzkxOWVjNDA1MTQ3OWI3MGY3Y2Q2NzY3NzIzZmU0MmMxYzc4OTljMmI3YzFmNzAyZGQ2YjRkMTNiNjcyZDQ4OGYzNGEwZTk2OWRiNzljYzJjYjI1MjRhOTQ4YThkZTRjNWI2MjNlY2Q5MGQ2ZTgyZDk3MDMzYzEyNTYzN2QxY2Q4Yzg0ODAzZDhmYmMwMTI4NDZmZmU0ODRmNmMwMjE0OTI1OGY5NDYyZmExZTk5YzMwN2RkMDA2MmZlMGI2ZjExZWVlNDBjMjYyOWVmN2MwZjZhNTEwNzI1OWVhNWI5ZmZiNmYyOWYxMmMzMmY3YjUyMjhjYWJjOTg2YWI2NjQ1MGFmOWRjYzNkYTA5ZDBlMGI5YTQKK1NJRzogN2IxZWI2NzdjM2U1ZTZhOGI0YmE2OWZjYjdmNmIxODcwZTQyYThkNTg5NThhMzVjNjc0ZTJkYjgyMTA3NDgxYzRjN2IzN2YwZjY4OWQzOWQ5ZjUxZTE4MWIxN2IxMTA4YzE1YTNlMjdiMjlkZjNhNDMxNWRjYzRmYWYxMjIyMDUKKworVFNUOiAzODUKK1NLOiAgOGZmMjM5OGNkNTFmNTFkNGMyYzU3ODY5YTIyMThiODQ4NjgyMjAzMWY0MDA3MjlmNGFjNGQ1OTA5YzQ4YmFmZQorUEs6ICBhNWE4ODcwNGI2ODY3N2JlM2QxNmMzZGMwMDUyY2ZlZTZlMmIzMGUwODYwOTA1OWQ0Y2JhNTJjNmQ5NjA2MWZiCitNU0c6IDk5Mzk1M2U0N2EzNDExODhiYzU5Mjk0MmUxNTU3YWYyOTU0NmU0ZTkzNjhlMmYxYTVlZTk4MDZlMmJhZjY2YjYxOTAxOTFmYzVkMmI3ZTQ3ZGUzN2ZmMDU0ZmIyYmJiMWYwMzE2ODRhZGE1ZDYwN2FkZGEzZDY1NDMzMTIyZmE5MDRlMDQ1NmZhYTg0MTA5YmJjNTE3ZjhhZDM5NjYwODc2MzgyYWRjZmVkMGY3NjIwY2YxMTY0NjIyZWFjZDkxZWIzN2E4NTk2NDYyZWJlOWViZTI2YmRjMWUzMmNjMzRhZDQ2ZmIxY2VhNDIwZTczYzMxMjE1NDA4ZTZkMzU0MjVmNDRhODI5YjEzMmY2MzFhM2Y2ZGQ0Yjg3M2EwMDA2NjdlMTllYjIyZmZmZDU5MDNhYWE3ZDRjOGZkZjIxOTUzYzNjNjE3OGY1ZjhjYjJhYTZiZmY5Mjg5NGVhZDgzNTg4OGRmMDYwYTNjOTA0MzAyNmUwZTJjZWYyNzU0OTdlN2QxMDVkZjNiNjQ0YTk4ZjI2YmYwMDEwNWM5OTQxM2VlMGFmODg1MTk1NGQ2NWNlYjhkNzlhZDMwNzFiOGJiODdmMGIxOTc0M2QyNTU2ZmZkOTgxOTgzMGI2ZWViZjdlY2M3ZTA0NTY2MWY0MzU3MGNlOWZkYmJlMmQyNTI0MDZmYTkwZDA0MjM2ZjIyMmM0MjllYzE2YjEyODcyMjRhZGExYTUzMjE2MWFlOGI0ODFiY2FiOGQ0N2FmYjNlZDA0NDViMzA2MGZkNjc1OTE3OTg1NmY0MDg1YzFlNTg1ZmQ3YzE0MDk3OTlhZjY5M2NmNDI3YmQxZDNkYzEwYjVhZTM0NDdhOGQyYTE4ZGMzYTEyYTY4NjBiMjIxNzVkZDVlYjUzYTA5NTA0MzJlMmQ3YWVmZWNlOGFmMGFkZTNkODU2Nzc0M2RlNDM2OTBmMmQyNTM3MjNjNWQ3ZTQ4YmQzMGQyOTM3NTkzNzAxY2VjZGU5MTU0Yjc2NjVjYjYxMWQ3ZAorU0lHOiA0MTdhNjQ3ODI5YzkyODk4ZTUyMGZmNTMxMWRhYTBhMTM5Y2Q4ZmZmY2IyNWExOGU2ZDliNTBjYjUyY2JjMzU0MjRjMzllYmJiNWQ1YWM2YTZkNjNmMWY1M2M0ZGYyMTJmNzAyNWE4YWFlZjhlMzY0OTNjODc0YzNjZTM0MWEwZQorCitUU1Q6IDM4NgorU0s6ICBlZjgxNmM4ZjVlYzM0ZWY0MWY2ODgzMWQ5MGNkMjllNTJkZTg5NzM3ODJkMDAzZWU0ZWRhZGEyYWRhMjY5MWQ2CitQSzogIDQ3ZjliMzYzYTg4YTQ1MDUzYTA1YmI3MjE2MDg1MmJmZThmN2RmZWZjMmYzNzI4M2RlMzQ2NzUyY2FmMDkyY2MKK01TRzogOTU5M2MzNWNkZWM1MzViZWJiNjk2NWRhNjhlYWIwYjY0NmJmZmNmYmQwNDg4M2JjNGNlZjkwZDVkMDFmMDE4YzYzYzliMGRkZmIzY2VmNWU3ODYyODRkNTIxOGNhYWFmMDYwZTkyODg5NTJmMTYzMDFlZDhhNGMxYmNlZTI1NjM1NmEwYzhiZGEzNTlmYmFhMjc4MmIxMGM4NmQxOGUyMGY3YTBlYzk5YjI3YTBiNGRiZWZjMGEyNjJhM2JmNjhmZTgxNDQ0ZGNhZTVmNjkzZWIwZjE2ZTZlZTAzZjhmY2JmM2EzMzk4MTQ2ZDIwZWM0ZDI2NTc3NjFmZDAzMjBmZWU3ZWE3MDNjNDlhNmE1NDNiYzliYmE5MTFlNzkyNTAzODcxMGU4YzM2NTUyZDQ3NmQ2MDI3ZjU4YjJjNTJiYTUxYWQ2NWVhNGYwMzljNzhmOTZiODg5MTAyYmI0YmRkNjliNjhlOWMzZDQ1YjUxNzZhMmQ4MmIwYjk1ZGMzMjEwMTYzNzBkYWUzMGMzOTM2NTE1ZGIwNDY0YzQxNzc0MzAxYzc0ZTQyZDg5YjhiZjRiOWMxOWVkNTU0YjEyZmViYWMwZjYwZGRiMzIxOWNjYzU2MDM1MzFkYmYyZWI1ZjI5MzQyNWQ3MmNjZWZhMGM3ZjE0NGFiYTg5MzQ3YjI5NmJlODdmZjE4OTk0YjRhMGM3MGM5MzBmMDU5MzAzYjVkZDRjOGZlMWU2YmJjM2NkNjhjNmMwZDg0MjQ2ZGM2ZTYxNDBhMmFiZDE3ODBiMTNmMTU5NGE2MDE5ZDE3NzhiN2NiYjNhM2UzYTM0YmZhZTcyOTdmMGIzZWRjMzc2OTQxYzMyMzUyYTRiZTMxNGI4NGE5ZDhkNmQ3ZjFmMzhhMGFkMzc5ODAyMGFhMmEzMzFhNDAyYmU5YzcwNDQ4NDc0NGE3MzBjYmRlZGNiOTA0YjZmZGU3MDhmYmQxNGJmZGMyOWVmZDQ2MWQxZDBiNTgyNWRlMGJjNzk0MjJiNjlhMjcyMmYKK1NJRzogNjVjNWQxMGVhN2JmZGJiMzhkNTUzNjRhOTk2OGY4MmI1NDgyMjRkZmYzMzYzYjJkZGNmNTg1MTYzZGVhMjdkYzYzYjA1NjNlYjFhOGRmYmVlOTUxZDNjOWIzM2ZjZDZiYmYwOTIxYzNhYmIyMTc4NmIyMjkwNjliZDljYTAwMGEKKworVFNUOiAzODcKK1NLOiAgNDVlYjBjNGRmYWZhMmE3NjkwZWY1NzljMDk1NDU2Y2VlZGNkMzJmMGI2MTQ0ZDBjMzgwZjg3ZmI3NDRhMGIxZgorUEs6ICBmYzg1NjMyYzk4Mzg0YjVmOTY4MmFlZDljZDY2NGNmMWY0OGU1ODhiZTJkNTY4ZTVjNzM0NDk0ZGY0YzcxMmI4CitNU0c6IDZmNjZkODQ3NDA1YTAzZDdiZDZmOGQyODk3ZGJkZjA0ZTc2ZDdkZjJkOTQ3MGE0OTk2YjdkZDZkYjg4NTAwZjhmNGY4M2U5NjBlMjE5YTI0ODZlMjQ1NDVhZGQxMzYxNDU1MDQxNGQ4MjdjNDFhOWIwODMxOGRhZjAxYjE1MjE0YzY0YTQyNjZjYmY4YTU3MTdhZGEzZTYyYzI2NzI5MDczZTE2ZGRiZDY2ZjJkNTIwZTFlMDk5MzVkZTA1ZTRkYjExYzM5NmQ0NzcwMTBhZWM2NmFhZmI3NjJlNjkyMzhkMGI5ZTc2YjQ1MjQ1NGJmOWU0NTFlNzZhYzc5ZTY5OTBkNDFiOTMyYmMzMjkxNzA5Mzc4M2M5MWJjOWNmMGJiZTNiNTE0MDcwYTFlNjkyZmYzNGZkMDZiNjZlYTExZjM5ZTEwYWY5MzNlZTk2ZDhlOWI2NzdjYjAzNzM3ZTc5NjRlZWFhNzI1ZjEyMTIwN2Y5YzFiMjZhOTZjNjE2ZGY3Y2I3Y2FlZjQ3YmRhOTAxMzY4ZmYyZWE1ODZlNDIyZTY1YmYyMWE2OTFiZGQyYzEzZTY3ZmZmNThjZmJmZWQ4MTc4MjA0OWRhZmEwZjcyN2RmODg2MjNmMmY3ZThmMjYyZGFmOTM5NTQyYTE4N2I4NzIwYTliNmIyYjA5ODkwZTU0ODc2YjI4YTQzODc0YWJiZTNiZmE5ODFmODEzOGI3NzJjNWQ1MTczNjg4NWY4NmFjYWMyMjE1YTBiMDEwZGZjMmM2YjE1MDg0NWQ0ZjgyOTYyNTI1ODZhM2UxMTVmMzAzYzNkOGE1ODJlMjBmZDJkNDNmNmM0NDZlNWQwMDI4MGVjMTc5ODIzYjdmYjRjMWIwZmViOTRlYjRlZjE3MDdmNTE4NGUzYjUyNDYxYTc1NjJkMWYzMDdjYjc1MWNkYmJmNmVhZTQ5ZmZhZTkxODYyMzU4ZTc0ZTk1NDg4MjJiOGEwNDlmZWM2YmY0YzdhOTljYWJiZTA5MjA2NTc3YjY1N2UzMWYKK1NJRzogNTU4NTFkZThlMTA5MmY3ODk0NGY2YzZkZDk1YmYwN2UyZGJjOGRmN2Y1N2FkNTc2ODI5Yjk3OGUzYWY1OGE3YThlOTRlZDRkY2NiYzAxODI0NjdlZGYwYmFkNGJhZTdjYTg0YWE5YTBjMTdjNjFhOWUwZGRmZjFkNzUyNWQ3MDQKKworVFNUOiAzODgKK1NLOiAgNzA5ZDJlMTk5MDA2ZjUzNjlhN2EwYmRkMzRlNzRkYzc4NGJlMzM4ODBlYTNjNWRkMTBlZDVjOTQ0NTFlNzk3MgorUEs6ICAwNmY5ODkyMDJiYTJjYmM5YzE1MGJlNjExMjYyYWNhMDBjNDVmMDEyZjg5ZmJhZjg5ZjhjZWNjYmEwYjE5MzRhCitNU0c6IDYyZjAwMzE0MGZhMDllMDM4N2QxODdhMGZmOTZjNDU2M2RmOWY0ZTI4YzIyODJjMDE4M2FjM2VlZGUxMzEyMzU0OTIxZjc4MGZjYTUzNjFkMzA2OGQyOTk0OTYzMGI3NTMwY2Q1OTE0YWNlMDQ2OGQwMTRiNmY1M2Q4MzliODJlMzg4MTdkYmYyZDgzOTJjM2NlMzQyNGVhYjg2YTI0ZDgwNGM3YWNiMWNlN2FjZmUwYTFjZGE0MzkzOTI0MjgzMTA1ZGE0YTc3NDExOTZlMDI3NTUwMDQ3Zjg1YjdhMGEwMWQ0NTQxMjRlZmMwZTI5OWYwZWY5YWQxNDM1MDU0MzA1MzQ4MjI2MTUyOGJhYTU2ZTY1OTk5YWM4MDJjMDBhMzM2MjY3YzYzNTEwNmIyNjQwM2MxOWYzOTFkNTNiZDgyODYxZDZkNDhhNDM4MGIzMDQzYWE5MWQ2NDk1MzY4ODEyMDRlY2NiMGRlMjBkNDNlNWEzNzU1YjdmNjAwOTE2ZWNjYWU0MmEwYzkwNTNiNDYyZDk0MTdhMTNkNjdkNzc4MjY0YTg5NmU4ZWFmOTBiYWY2NmQyOWU1NDM4YTcxNjc4MTEyM2E4OWZhOWI4YmVlZjkxZDk2NWFmMmY0YTFhNWJkNWQyZTJhYWY0NmQ1Yzk0Yjc3MDljZGQzOGQwNWZlZWU0YmZiNzZhMzU5MDc3YzE2YmM0YmU5MTE2ZTY5MDAxMjcxY2RhNTY1YmMxOWJmNDdkNGY5ODZiZDljMGQxODRjZDhhMzUyMGNhMWJkYjRiNTA1YWFmN2NiNGVjOWY5NDc4OTc3OWQzMDcxNGU3OTExNmRkNTAxOWQ1OWIyOGIxN2RhZDk2ZjRlMjE1NWFkOWM2MTI3NGFkZGM2YjYzODEwOTUwNGU5ZWQxOWY0ZWRhNTM3Nzc2MjY0OGM0MDk4MjI0ZTMzOTEwNDNlNGMyYWQ1OTE2NTRjOWU3Zjk3NGVmZGYwYjA1MDRiNmZhNWY2NDZjZWNmNDRjZDM3MjQxMjM3MjUwNQorU0lHOiA2MjliZjk3YjBjNzhlZTZhOWM4NzU5ZmJlYTI4MjI0ZTI3YWJiYjZjYmU0ZGVhNWJiNzk3ZTZlMGZlODBjOTEzZjk1M2UzYTliNjIzMzUyZDEzYWNmNGNlNjI1MGZiMDI5YTFlMTk4ZDcyYmQ1ZTc0MDJlNjBlOWU0OGNhMzUwMQorCitUU1Q6IDM4OQorU0s6ICA1MTUxNjE3NDIxYWFkYzljOTVhNDQyYjQ1ZTdmZjZkZTA2YTJjNzMzYjg1YmQ3ODlmYmFkNDE0ZWUzYzkxYWRkCitQSzogIDE0OTQxZDU1OTc2MWIzMGFiMGE4NmQ0N2UwZjdkMTg5NmIzMzc4NDUyN2M4MGFmNDFjYjg0ODEwY2JmZjlkYmYKK01TRzogMjE2ZTlkNDBiY2RjM2IyNjUwMTg4ZDEyMWM5ZjhlZjI5ZTkxNGZhY2QwMjJmZTAxYjkwZWQxMTIyNWYyZWI5MzUzOGU1ZmNlZTVhYjgwNDVlOTE5OWFhNzZhMTZiZGQwNjE2ODA1NjYwZTI0N2ZlY2Q3ZTIyODIxYjY5YjFmOGU4YTU4YWMzZmI4NTY5MWQ3NWQ1OTU3YTFkYWY1M2ZmOWVlNjQ3NmQ3YzRiYzU0MWU2YWQzOGUzYTM0ZWE5MGZjNTJhNDhiOTM5OWY5MmQxN2M5YmIwZDdmYzMxMDRjNTVkMGVmYjRlYTViODMxZmY5NDkwYjNmNzlmNGQ5ZDY5OTU5NGI3NDE1NjZmMmI1MGE4ZmM3OGNjNDAzZmE0MGY1YWJiNjYzOGEzMmY0NDlhOGIzZWYwMjljNDAyZjQ2OTMxYWQyYmQzZThlNjgzMTA4NzE0Yzk4OWFlMjE2ODllOWM0NDRiOWY1NWI4MTExOWJiNTAzNWJjZjczZTk3Y2U0M2EyMjE4YzdiYzNlNDMwZDFlODE0ZjM0ZGVlMDU3MjY1ZDMxOTRiOWY0Mzg3NWQ4MzgxZjUyNWY3ODU3NmU2NGNlNjkyNTg0ZmFhMzBmYjc0M2ExMmQxYjc3NjE0ZDJlMTBhNmI4NTZiNTJiZTI3Y2RiNjMwYmExZjBkM2E2ZjhlYTk4NDQ1NDJlNTg0ZWEwYTI3Nzc1MjdkMGM1MmFjYTk0OWFhY2RhNDVhZDgzZDE2ZDVjODNkNjYzYWRiNzljYWQ2ZjNlMzllOTkwZmUyODJhMTRjMzUzYWEyMzc5ZDdmMDZhZGFiNzRjZWEwMjFiODk4M2E1N2YxZDBjZjcwMzI5MmViMDVlY2U4OWM1M2YzYTEyNjU2MTBlMGMxZWE4ZGRkNDQ0ZDFmZmQ2YmMzZDAzZjBhNmU0ZDBkZjVjNWI4ZGMxZjk1ZDlmNTU1OGIxMThhZmU2YmVhMGY2YzI5MzEzNjNmMDNhYjM0ZTc1N2Q0OTM2NDE3NGY2NThlZmJiZjM4ZGMxNzcKK1NJRzogZmFlNDc3M2IzMzQ0NjBjNzdiZjAxZWM2MzY2YzRmZTYxYzBjYWI1N2Q4YTRiMDM5MDljNjE5ZTExZWUzNDYxYzEzZmEyMTU3NmY2Mzg3MGU0MjNkZDA0MTgxZTRhNzAxM2E3NTI0ZjI0NmZlMzM4NTNjNjc0MTYyYTc4MTUxMDQKKworVFNUOiAzOTAKK1NLOiAgMzhiZWQ0NDU1NTZkZTc0NDgyYmY1ZmVjMDUwNmY5YWYzMzBiMTUxZTUwZDQ3NzRkZmU4NTkxZDdiN2UwMjc2YgorUEs6ICA0YzBmOWM0OWE0MmY0MDQ3YmZlNjg4NTU1MWM1ZTRiODU2Y2Y3NzFhNjdhZjNmODlkYmY2MDJmOWRiOTIyMGYzCitNU0c6IDBmZjAwMzFkZjBiZWVmZjM3MTBjNmI3NjNmOWI4ZWM4MTcxOWJmYTE1MjhjZTQ2NTE5YWRmM2QzNDEyZDkzZmIxODhmZDQ5N2Q1ZDE3MDkxYzBmMDM0NTk2MGRkMGViMGMwOWZjNDAwNTE3MzY2NWQ0ZDk3Zjk1YzEzODI4YmM3NmIzNDkyYjg3YTRiNjQyNTNjOGI1ZmE0N2FhNzVmYTNiODZkNWFiZWVhOGRlNTk1OWE2MDIyODkxMzZmNjBhNjliMzA5ZTc3M2IyMjU1Y2RlMTllZDJhMmUxOTljMzNkYjExYzE2YWRlMDhhMzE5NzUwYjg1MWQ5MmM2OTI5MjRmYzk4NTliZTUyMzQzMWNiZTc4ZWMwOTJkYjExMjkyMTBlYmJlYWE3YzJhMmMwMDBlZWIxMDVjYTAzMDFhNDhmM2U0NWZkZmIxNWIyNzVjYmFiODNjYTVjOTlkNzM3YTU4NTMyMGU5ZTNiMzE3MTc5YmQ4NjQ2N2ZhOTY5NGZjZGIyYWM2YWQzNmVkNzE0NDg0M2RiYzM0ZTQyM2QzNWFmZDdkODk3MmExYzQzYzE5OWExOTFhYmQ2Y2ViYTQ5MzZkMzk1Yzk5NWEzZWIxM2NiMDU3Zjg4YTlkYzk0OTBmZTk4ODQ1ZWU1ZDI2YTg5ZmI2NDJhMmE1MTZkYzMwNTZjNTRkMzYzNzIxMzM2M2E4NjI4YTQyYTM5NWQ5NDJiOTU0YTg5ZThlZjdhNzQ0ZDhhZTVhZGFjODhjNjE2ZWZhYTkwZTIwNzcyMDVhNjBiYWZmZWRlNWM4N2JiMTRkZWFkMzA2MjI5NDk1ZjY5OGYzZTQ5MDYxNjk2NmIxNjM2Mzg3ZDBkODYxODNmOTQ1YjI0YTlkY2ZjY2Y0ZDM2NzIyY2QxMmViYjZiZDhlNzgzMjU3NTJhZmEyYjFhYmQxM2M0YmRiY2FkZDE3MDg2OTEzNjgyNjI0MmFjZmI3MjFkZTVmZjI3YmE4YWEwYzAxOGIyMjVlZDM0MDQ4MDNjZTlmYTJkNTA4ZDg5NDQKK1NJRzogZjcwMmQwZDQ2MzI4MmZjN2ZkNWY4ZjkwMjliODljNjI2Y2FmZDgzNDUwYzNiYjlkZDhmNjU4OWYwYzRiNGI3MWY2NDllYTIxMmU1ZTMzNDg3YzU5YzE2OGVhM2FkODMxNTBmMWZjZGZlOGM1M2ViYTY1YWRjMjAyM2MyNTgzMGYKKworVFNUOiAzOTEKK1NLOiAgMDU1NDYwYjMyZGQwNGQ3ZjRiMjMxMWE4OTgwN2UwNzNmZDU1NjU2NWE0NzcxODU3ZDg4Mjc5NDEzMGEyZmU1ZAorUEs6ICAyNjBmOGZlZDRiYmEzMGI5ZTEyYWQ4NTIzZmJiNmY1N2YwYTdhODgyNTUwMDYxZjFkYTQ2ZmJkOGVhNDQyMjIxCitNU0c6IDc0MDdmOTZlZTNlNzljNjlkMzZjZTFmNjRlNGYxODg2NTVlYTY4Yjk0N2U3ZTJiZTk3YjA1ZWJjNmQ0NDM5ZTk1MDI3NmVmM2YwZTZhMDNkZDQ4YjI0ZjY2OTI5YjQ5YzE1ODBlYjQ2ODgwN2UxZTdhMjVlYjliOTRkYTM0MGM1M2Y5ODRmOGI4MTYwM2VmYjYxMDQ3YmYzZjE0YjY4NmQ5Nzk4MDAzZDJmNjg1ODlhNzllYmZhZDU0NDA5YzcxYzkwZmY2N2MxMWZiZDc2Y2M3MmMyZDE0NWY0NThlNDJmODhiNzVkMjUwZWFkY2FmZTY2YmYzN2ZmYzgzN2I2MmZmMDA2Njg1YjdmODVhOWQ4NzVmYzA3OGM4MmU2MWZlMzVkMTkyMjUyN2E1NTFkYWI2MmY5ZTQ3NzQ5OTE0NmJhZDkxMjIwM2U2NjRjNDE3YzM2NzljMDJkODcyYWJhYzAwMzJmOGNjNzdmNzdiZmU1NGQzMzI2ZmRlZTkyNzZhNDhlYTRlYjI1MTM1MDQwNjg4MmQwOGM4MzBlNzY0OWZlNjg1NDU1OGE3NTEzYWIyZDhkMmFjM2U1Y2VkOGE4MDhkMmFlZTQ1NDc3OWVkYWJkMWFhNjNiYjE5ZjcxOGY0NzBiZGM4NDUxY2Q5YjI5NDk0MWUzNDk3MDYzYjFlMzliNmNhMTg0NTYyZmU4MzhjYmZlZWU5MjJkZTI0ZGRmY2Y5ODgyYzVlNjE1YjExYmY5MDQ4MTdmYmQ2NDcxMzlkYjgwYjRlOGZlYjM3ZjExZTE4NTJkN2U4NzZkYjljYjYzYzk0ZDdlZTM0MTkyZjcyMDBiNWJjNzdhMDMxMWFlNDNiODA2ZWJkNGMyODk2YzUzZjU4ZjdlYmMxNjI1Y2IyMGQ3MTA3ZWY5ZGIwZGEyODc4ODUyM2RlOTkxZWY2YzU4NjZiMThkOGRlODNhOTU0ZDMyODFlMDZkYmYyN2M0ZjIzODJlMDhjZDBlMGY2ZWJhZTNmOTYxYjc3ZmNlNWE5NWE5YjA2MjFiNzU2ZgorU0lHOiAyM2Y0ZjE2MjdmYmFiZDc4OTFkN2Q4NDg5NjMxYzcyMzFkMjJkZTcxODY0ZTI2MmFiNGRhODRlYThhMTNhNjBmZWFjNGRjZmIxODEyZjEyMDA0NDRiNzc1ZjEyMWQ3MjY2ZDc1NWNlOWI2YTlhZDc5NjU1OWMwYTI2YjUxNmQwMgorCitUU1Q6IDM5MgorU0s6ICBlOWY2ZDMxYjkzNjk0MmM1MjZlMGY5ZWM0ZjVhN2FjMjVmYTc4OWUwYzQzNGJjZDkxOTlkNzIwYzc0M2M4NGM0CitQSzogIDMyMTI2ZDI2ZTI4MjMxYzViNTg1YjEzZjQzYTAxYzZmZTU0Mjk0NmIwN2QzYTkxZTU3ZDI4MTUyM2Y1Y2I0NWMKK01TRzogZTg4MTMzZjNkMTc2NDJkNWMyMjc3OWE4NTMxNmJhMGRmMzRjNzkyYjRlZmVlNDllZDdkZDkzY2EzMzIyZWY0N2M3MmU1YjJlNDU5NWM3NzgwMDQzNGI2MDcxOWFkZjU0ZTRjMWEzNGM4OWZhMWUyN2VlOGQzNWEwOTIxZjk3NTVhYzRhNzdhNmMxNjg0ZWEwZjVjOGVlNWY3NTljZTU5YmZlODMxNTgwMGE2N2FhNmM2NGRkZmFhYzkyZWFiZTZjMmM2MTM3Nzk3ODRiM2FmZmFmY2M2MjBmMmE2ZGM1Y2I4ZDhkYzdkNzRhYTRkNzk0OTQ2Nzg0OTRlNWU2Mzk0YzQzM2MxNDgwOWZmNDBjOWE1OTJkMGQ2OTRhODExMDNiNDQ1MzFlMWY0OGJjMTM5NjVkMTVhZjhiZjMzNDA0ODhmOGNkNThmMDlhZTFhNjYxNmJmODVhYzlkZTdlMGM2Njk2YWEyZjFiZWMxNWUxN2E0NGRhNGE4NGVkYjRlYzZkNzcyNDc3ODhiYTBkZTNhZTEyYTE1NWNiZWRjMGRhMmY1NjhlZWYwYjc1YTg3N2VhNWIwYzJjMGQ0YmYyYzYxZDQ2OGE0NmZhYWRmYWVjZTM1ZmMyNjNhOWJlOTk4N2Y0ZjdmNzhmMDVjNzA3Nzg0Mzc4YzdiOGY3ZGFmOWFjM2ExMjJhYWQzOWExNjc3OTY2ZGE5ZWYyODZjOWUwNjJjNGY0MzlhZDBiZGRlYTI2ZTU0YjJmNzM4OGUyMzhiMmE2NDkyODQ1MGQzNDU2NGM1YTQ0N2U3YWZiYmVkZDEwODVmMWYyNGMxMWFlMDg0MzIyZDFhMzJjZjhhYTQ3Mzk0MWYwMGQ1NmIxNjE4MjEzY2FiMzkwMGFhNjA2NDYzZDlmODAwZTkyNmY5ZjQyZDRiMDgyZDhjNWVjM2E0YTAyNWI0NWY5YWFkYzhiY2JkMTcwOTFiM2RhNDllOTQ1M2RjNTVlODliNWI1ZmU2YjMxZjVlZGRhZDEwYjY2MDE1NzI1NjhkOGUyMDVkMzI1MWEKK1NJRzogN2UzYjFjNGM3MTZjODA4ZTkwYjk3NDQ1ODkxNWYzYjIyMzljNDIwNzcxMTlmZTI3MDc4OGZhZTUyMDU3OGJkN2RhNjQ4ODA0NDEzMmUxYmVmMjNlM2IyM2MzNGQ5YzE4NjI3NDRmMjhmY2FlY2RhNmNhYzBmZDcyYjkzYjZhMGYKKworVFNUOiAzOTMKK1NLOiAgNmJmNGNhYWFiYjk2ODU0YTM4YTU3MmY0Y2U2Yzc4MzhmN2U3NTAxMThjNzNmMjcyMzU4MjYxOGUyMzA3ZjgzOAorUEs6ICAwODEyNjM3M2QwNTZmMDBlNTRiOGQ0M2Q3N2MzNWY1ZjkxOTgzM2U5MGQ4YWFmZDZjODI0NmQyNzkxN2FkMDkxCitNU0c6IDQ3NzZlOWQ2MDA4NTQ4MWZhNTM3YmYyOTViZGFiZDhiMWNmNjMyYThjZDQwYmNlNmJkMzI1YzEyOWY5NzcwMDBlODg0NjhlYmYyZGMxNThhYzBmMjA3MjEyZGIwMGZiNjBiOGVjOGJhZTIyOTM3MmU5YTZiMDE1MzBhN2VkMWJjOWQzODllYzg5MTNmNTkwMzBkNWI1NGFmNTZhZTFjY2MyOGYzN2NjOTZhOGU1MzIwNGU5MmE2Nzc3NjZhZGZhYWRhOTliMDI4MWY4NjdmNjFhYzlmZjdkOTcyZWUzZWQ0MjdkNzJmYWFlNzVkNGFlYzAxYjVmZmMzNzA2MWI2ZjBmN2U1NzE0YzRjZjMwZDViNzMxYjA3NDYwNjVmMTllNGM4OTIyZGRlNjQyZjgwZmUyNGEzYzhkY2IyZTVmMWMyNjZlMmFmNmMzN2RlY2Y1NWEyYmFhNTRmMGQ1Y2YwODM5MzcwYzNlMGI0ZTc3YTRmMzZiYmIzMTYyMDE0OTMzYTRhNGViY2FlOGM2MDk2MWFjNmRjZjEzNGYzMDgyOGQzMTQwMmFlNzRlN2U4NTEzYzlkMmFkOGVlNDZiN2E5ZDUzYTFmODdlYmZjZTA0ZjQ2MWJkZWQxNzQ5YjZmYzRjNGYyNTc5MzUyNTY5MmQ3YTBlNDI2Yzg0ZTA2MDgyY2MzZTZhYmI1MTM2ODM3MGNiYjEwNmM3YTA4OTdmNjZkOTJjOTczOWNmZjlmMjcwNmQ2YTI5ODBlY2VhM2FjNDk0NWYwZjQ3ZTY1NmJkOTYzNzc3N2U4NTNkMmE4MzkxMDQzMjdkYzA0OWViYzM0ZjA0OWQ2YzJmODBlY2E5OWRiN2I0MTg0MjRhY2VmNzUyMjYwZDJkNDI3OTQ5MzIzOTk3Y2Q5NjE3ZWRmNTBkNDQxZDAwODhiMWQ0NzkxMmUzNWNmNTQyMzE1MjY1ODI5ZjM4M2Y0NTg2MGQzYjQ1ZTczNWJiMmY4NTg2ZGNmNThkYjRmMmFjZmI0YTY4ODUzYTk2ZWVkN2I4OTc2OWQzNjU2MTMKK1NJRzogZDIxMTNmODBkNmNmOTI4NDg2YTI1MGE2NzlkNmU3NGIzNWVhOWQyNjA2MWZhOTRkNzY5ZTFhOGZiZmEwYTczNDIyN2Y1NTUzN2U0ZWJmZjU5MzM2ZGIxNDFjZjVkNmQ0ODJhMDcxMWYxZTlmYzcyZmY3MDk1NmExMWI0ZmI5MDkKKworVFNUOiAzOTQKK1NLOiAgNWQ5NTg1NzM2YWIyMDliMGFiZThiZjc0YWNhNGVlYTRmNmQxNjUwYjUzMjU1MGEyMjNlMDQ0NTgwZjhlMjBkZQorUEs6ICBlNzc3MjllZGZkMjE0NGIyYjEyMDc4NzY1NDE3ZmEyMWYxNTk0ZjA5YjI2OWU5YjY3MDY4MDJiNGYzYmRmZTg1CitNU0c6IDA4NjkzNTkxZTZjNThhNWVhZDljODVmZThlYzU4NTA4ZjgxYTM0Njc2MzZjMmQzNGZjYzFmNDY2ZTVjNmRhZmRjMzdjMzVjYmVlMzU1ODljNjk5N2UyYjE1NDQ4MTMyNzQ0ZTVhMWUxMzFiYjQ5YmY1YzI1NjNmODdlYWQzZWZlMDFlODhjYmYyNGNjMTc2OWM3OGNkZmMxNjdlMzc4MjE1YjE1ODU5YzdhMjhlY2U3MGUxODhmYTMzMDI2N2QzZmM1N2I0YWNlNmMxNTIwZWM2Nzg3NTA2N2ZkMzNiZTg2ZjRhMTk2N2FmYjNlYjE2NGM3OTdjZjI4ZDgwNzJhYTY5ZDgyYWZhMzgzNzRmOGU1Nzk3YzRjMjg0NzFiN2Q2OWY1YjljN2I0YWNkYmMxOWYzYzVjNWQ0MDA4MDhhOTgyYTQ3ODM3YWVkMWIzODQxZDY5ODkwZWViMzE0OTRlMTBlM2U1MTNkMTJkMGNhNjg2YzdjZTY1MTc3ODA5MjcwM2ZlZjBkY2MwMjE0MDc3ZGZiMzYxMjUxYmRlYTQzNjRkZDQxYjk3YmNlYjBmYjE0NzVhNTBlNDcwOGY0N2Y3ODc4Yzc0NDAxZTk3NzFjYzNmY2VhY2U4OTE2OTk4MWFhNzcyNTA4NTAwOTBkMTgxZDgzNThlYmJhNjVlMjkwYWNiMDM1MmJlY2U4YzU3OTgzMmE2MDE1NTE4MTZkMWMwNTYyMWNjYmJlZTBmYmUzOWVhMmYxOTUzOTMxOTllNjljMjM0YzJmYjFjMzdlNDc0ODQwODYwY2U2MDkxNjFmY2ZjZTI4Njk1NzRiZTBkMzhmOTVlMjBmNGY4NzI1MjQ3Yjk2MjdiNDZlODM0OTA1MTAxYWMxMmI5MzRjYmY4N2NiMmQxOTBkMmY1MTQ5MGE4MmM0ZTgxMGVkZGI4MWY5NTZhOWYzNmJkYTQ5N2JjYTUwNmE0OWVlOWNkNDdmZGE1YjdmMmI4ODRhMzY0OGNhZGQxMmFiNjE4OThhZGE0NmVjYzk3MGY4MWRjOWY4NzY4NDVkYgorU0lHOiBlN2IwOGUxZDU4MDlmZGQ4NTI5NDQzZDY1YWRhNWRkNjU1ZWE1NWI1NDE1YTAxMTM5M2JlNzA3MTY3NjQ4NmQzNThlOGQyYTQ2MGViZTA3NWIwZTcwMWIyNGM5ZTNhYjVmMmIwMzM1OTJkNGRlM2I3ZjM3ZmQ1NDFmNjkyMDkwOQorCitUU1Q6IDM5NQorU0s6ICA2MGIxNDJmMTY1MTE0MTQzY2EzMGE2MDRmZWY1MWM2ODY0MzZhYTFiOWFmZGIyNjZiM2UzOThjY2IzYzRkODU1CitQSzogIGVhZjZjNWE3NmNhOTliZjczMDY0OTg4ODhjM2I3YTFmZWFlOThiZjg5ODhkN2YyZTE1NDdmOGY1M2E0NTI4YWEKK01TRzogMTgxNWRlZTExNzNiNzgyNjQ3MjBkMzViN2NjMjQ1NGEwMDBhNjVmZmYyMTRlMjQ3M2UyMGJjODNmM2VjZGU5YzA0YzFlMDY5NmNlNmU1NTUxOWRkMmE3NWNlMDQ2NGJmNjAxYWRjMzgxZTc5M2VjYjlmOGNlN2FiODdiNmNhMmEzZTQxMGY2MzkwNjk0NTE5NzhkMTQ4NzNkMzM5MGZhYjg2MjM5Njk3MTNjM2RmY2Q1OGQ4NmQxMjQwNzM3NjFlZTA5YTY1MmE0ODc2N2Y5NjQ2Y2I3MjZhYzQ1NGFjOWExYmM1ZmFlZDMwMjZiNzAzOTgyYmMyYjFlMDc1ODIxMGUxZDYyNTE5MjMwZWIyYjJmNGE0ODZiYzU1MTY4NTYwYzQzNjNkZjVmZjVhZGZkYTExYWM3ZWY1MWIxODE5NmM5NDMzN2MwN2FlZjExNzk5MGY3NzBjMGYxZThjMGY4OGViNmZmYzQwZThlZDdjM2E4MGE2MzJkYjFlN2Y2M2I2MzA5NmUyYWM0OWU1Nzc5MmIzMTE0M2UyZjRmYWFiY2VhZTY2YjI3NDcxNjgxYzM2ZmMxMTM5MDA3ZjliNTQ4Y2RjNmUzYjhmYmJkYWJhN2E4YWRiODQzNDMxMjM4YmI0NjFiYTI0ZjZlMDlmNjJjNzJkNjM3N2I0MDQ4Y2IwMTM0YzI1YTU0MTFhMjBiZmNmYzEzZTQ4ZDgwZTM2YmZiMGRhN2UwMTg1ZDMzZjE5Mjg2MzZlMTVkZWUwZTVkZjg5OTJhMTY1NzJiMTNlYThmN2NmODVjYWUzMmQ1MjlmNjZlOGY2ZDJmYjJhZDBiYmZlNzE5OTE2OWIyNTY3YmEwMGM3ODFiMjBhNDhlMWQ3MGRmOWZhMzExOWNkN2U1YmJlNTg4ODRiMGI1MTIxODk0MGZhODE1Zjg1NjI1ZmEyMDM0NzFjZWU4MDg0NzgwZWIwYjkzNTZmOWYzZDRmNmRmNzQwMzAxZDcwN2VmMWZmYjM1MTllM2Y5MGI4MDY0Yjk4ZTcwZjM3NWQwNzE0MjY4ODE3MTgKK1NJRzogYTYyMWYwODRlYTFhMzZlZjgxMmE5NzU1YzlhZmJiNTNkYWRhYWU2YjNhNTNmYTgzNDRjYTQwZDM2MTJhMjY4YTM1ZmVkMGZkMzk4YWI3NWJjZDYzOWM1NDc5MzdjOTQxNTVhYjFhN2EzNDY3ZGQ0YmZkZGZhY2FiMTY1NWU5MDgKKworVFNUOiAzOTYKK1NLOiAgNzM0YmE0NzAzM2M2MTQwMjMyZGQ0YTdhMTRmMWE3NzQzZWVmZTkwNzBiYWQ5NjYyNDkxNjMwY2M5ZDI4YzFmMworUEs6ICAyZmE1ZGYzMDI2ZDYwNzQyZTJhZmY2YjU3ODQyYzcxMjY4NDZjOGE3YmJlOTI2NmVmYTdiM2YyMzk4YzM1N2VhCitNU0c6IDVkM2M2NTk4MTBjM2ZlYTUyYTZkZjM4NjFlNWNkYzViNzAzY2MxY2VmNDg1NThjNjFkOGM1MWQwZWRlYTVhMTQ3OWNmZTUwNjNkODJkZWQ5Y2E2ODFlNTc0ODg4N2M0MGVjZmI5ZTFhOWE4YjdmODUwOWQxMDc3NjQ2MWMzOTIzMzk5NjkzYTc4MTg5MDg5MTc4ZDVhYWJkMTVmOGM4NDY2NDJiZTQ3ZDZkNGNhZjEzODI0ZWRjZWZiODA5ODY4ZmE3MmRkZjAzNWM0ZGU4ZWYwYTljODMyMjY0ZjY2ZjAxMjc2MWNlNjk1NWJjM2M0MTZlOTNlMjkxODgwMjVlYmJiMTNhNTUzMjU4YzFkN2M0OTljOWE0YWViMTBiYjM2ZjYxZDFiYjRjZWM1YWU1NWQxNzU3MjJiOWE5Njk2ZGY4ODE5NTFlMzUyMDBiOTY1M2NmNmVkNGIzZDE1ZGUwODdhOWQxYzMxOWZjZTg1ODIxNTZiZWJmM2ZjOTFlMGU2MTBmZjdhMTUzMDhmZDFkMmM2MDY5ZmJiYjI5NDdkMzExMDczMWQyNDVhZTI5NjMwMTRiZDc2ZGVhNDJkYjEyNWNlY2M0OTNjOGU5MDkxYTc2NjQ2NTc3NzI5YWVkNDk2NmZjZTk2OTlmZTEyZTM2N2Q2NjVkZjllOTVhOTE5M2UxMTMzZTE0M2FmOTJmODJiNjZhYzc3NjRlNTAzMzE3ODY5MDUyMTgwOWE3MTA3ZDhhZTliODhlMGVkMWYzNWIxNzE5OTAxYjkzMGFkMGUxY2JjZTdmYjMwMjY3YjExNTUyMDRmNjA1ZjUyNWU0OWRlMjk4OGVhN2Y3NGJlODgxNTE3N2ZkOTc2YTFiY2MxMjZkOWM5YzEzNWM1YjQyNzZkMzgwMTljMzRhZWZiN2EwMjIwZjdmNWFlZmYzODBhZWQ2MjdiMDcwYzJjOWUyMTUzM2JiMzVjMDhlMzk0Yzg1YWUyNWU2ODYyOTQyNTk5YzY1ZGJhZTU5NzdhNTg0YTg4MTgwZTBjOGM3MWU1YTg0MDllMDRlZjcKK1NJRzogOWJkMDc0ZDFkMGJkMjgwMDFiYWY3ZDJkNGU4MjQzNWRmMDhjNDI2NGQ4Y2JiMWMzODExODNjMmYwMTIyM2Y3OWY5NDkyM2NhMTc4Y2FjNzU1NjRlMTZjN2Y1NjA3OTA4OGY3ZWQ4ODVkZTRkNTA5ZmJjNzhmNDM4ZmJhM2Y2MDcKKworVFNUOiAzOTcKK1NLOiAgNDVlMzRkMGVmNGMxOTZmYTZkNTcyYjZiMTc3NGI1MjE4ZjdjMzI5MTMwNGMxMzUwMGRmNzA3MGQ5MGU4MDM5ZQorUEs6ICAxM2E3MzA0ZGZmNDIzMzU5MTc3YWJhZmE1ZTY1MDhkMjY3NjljYTk5Y2Y4YWY0NWMzODNmM2ZmNjM0NDA2MDAzCitNU0c6IDNkOWVkNWM2NGI3NWUxMzVkZjJmNWU4NTMwMGQ5MGYyMWIzNjM5MzVlMjgxNzU1NmZjOTMxMTc1MWJhNzUzNTQ3N2RlYzgzNTZlYzM4NWVmYjgyYjQxNDA2MmYzNWJiNmQzZWRlYWZkZTMwNWY5OTAwYTI1ZTk4MTNjOWVlMDIzN2Q0NjQwOTY1MGNkY2RiNWRmYTIzMDFhOGUyNjQ3ZjhkMzgxOWQ4NmY3YjdlMzA3MGQzMzQ0MGY4MmM0MDU0YjFhYjVlZGViZWIyN2Y5NWIzYzRjNmZkZDQ2OGYyMTYwMGYwM2IzNDk0ZGEyMDBiYWI5MjkzYzM4ZDAyZmM0NDA0OGU1MmZmNWZkMGY3MjE3YTA0ZDRjZTkxMmExODBkMTYyOGYzNjgyODBiNjg5MjY3MmU4ZmY5OGQ0NjI5YWMyOGI2MGMwMmEzMDFlNmM2MDI2YzFiOWU5ZWYyMWNmMDM5MmRmMjI1MDA4ZDVhMGUwMjg0YjI4MjYzMWFkMTcxMGY4MTE2MTU2OTcwNjZjOTgyOTY1MTk5NDhhN2NmZWQ1YWVlYjQ1NGVlN2E2MWNjMjcxYmQzZDQ5OWJlMTdkZjA5ZDNhMGU3OTBlZTZiOWJkOTllMWI5MTliZWQ0YTA2M2I4ZDFhMzRmMWFmZDJlOTUyYjlkZmVmZDc3MDk2OWM4YjJmYzM3OTc3YWJiMGZlZTYzMTcyNTNhMjNlY2M5NzU3ODE2ODk3MzMzNGM4ZjkxNzYzYWI5N2YyOWM0OWJhZWVlN2IzNWYzYWU3ZjVjZDNhNGE2ZTY5N2VmMjU1YTNjMmVjMGM3NTJhMzM5NmY2OWY2NjNjYTFmYzJiMzMyZGZlNmMwZmFmNzhhZmU5YzY4ZDk5NTcxZThlODk2YzUwOTMwODVlOTg2M2EyNzY0OGE5ZTU4ZjNhOWE4NGNiYmZlMmI0MWNhMzYzM2RkNWNmNmU4MmNiNzdjZWNhY2FkOGQ3OGIzNTNmNDhkYjQyZDk5YzM2YmNhZDE3MGVhOWU5OGFiYjI3ODhjMzNhM2M3MDYyNjhmMzYzMQorU0lHOiBiNDJjMWY5MjVmNGJhY2NkMTI5ZWZiMTA5ZGIzNTRhY2EzMWM2ODk4ZjRmNDUxMjk0NzQ5YTI2YTZkYTE2NzdiZDNhNWMwNDExOWUzNWY0NzMxOWYyMGNmZGZjMDhiYjQ1MjhiMjEwMDllMDBiZDQxZWJjMGY0Njg2M2JlZDEwYgorCitUU1Q6IDM5OAorU0s6ICA4ODhjZTJlY2NlZGE5Y2EyYjk0OGFjMTQ0M2MyYWVkZDc1OTVhYWNmMzZlZGFmMjcyNTViZGU3YTY5OTFkY2MwCitQSzogIDAxNmU1NzJiNGY5ODQxN2M2ZWUyOTdhYmQ3ODRlYTQ4MjI2ZmY0ZmJmMDA1MGE1YWRlODgwNmU3MDQ2ZDNiYTMKK01TRzogNWM4MDFhOGU2NjRlNzY2MDc2MGEyNWE1ZTE0MzFhNjIxNTlmYzNmM2FhNzEzNzgwYWU3Y2JjZTIzYjg1NjQ3ODI3OTliZjJiZTQ4MTdlZTI5MjE5NjViYWI3ZTFkNDQ4MzM4MjRjMTYyOGQ0MmRjZWUzZTQ2YWU0MmIyODE2ZDBhNDMyYTFhYjBiZDIxZmNmMzBhZGI2M2Q4ZGQ3NjU2OTU0NDM0M2QwMDM1Yzc2MDUyMmNhNjhiZWE3MmM0MDRlZGRhMWU5MDk1ZWM5MGYzMzI1NjgxYzZkZTBmNGMxMmQxYWZiY2JhMmM3ODcxYTFiMWUxZjE5YzM1YjBiZWQ5ZWMyYTg3YzA0M2QzNmQ4MTkzOTZiZDVkMDk5ZTFhYTA5MDM5MTI5N2M3MzNmNjVhOGM1ZDIxMjBjNjc2MzUzMTZmYWIyNWI0ZDQ4NDdhNDVmYzNmNzZmMmUyNDI2ZGJlZTQ2Mjk5NzUwNjJmY2UxNGUyMTg5ZGJhMjdmYjFkZWQyNDUzZjAwMWRlYmZhYTg5OWMxMTY2MDYxMmQyY2UyYWQyZjc2MmVhNWRlZTdlNzFlNThhZGNkY2VmYTc5ZThlOGIyN2ZjNGNjZjg5YWFiZjE3NmI1ZDM0ZjgyZGQxNWQ4ODlmOWYwODdkYzlhZThhNDJhNzJmM2I4MzU4MzYxNmUxNzA2MzdjZDFhZGYzOGFhNjU1MWNiYWNjYTM2MDJiZGM3YWUyMTBjNGE0NDZiM2FmOGRiMjcyMGU1NDliYmVkYjhiZWQyMTVhZTAwZjE5ZGEyOWQ4ZmIwYjY0MmQyN2IyZDg4NTc1ZjBlZTg0ZjNkMTI5ZWI3NzRkMjBmNTM3YTFjMGZkY2Y3MTdiZGViY2ZlNDdmODMzMWEzNDE4NjQzNDZmYTZhMWM2YmJmZDE3ODgxOWUzODdhMGQ1NDk5YTY4ZTgxY2M5ZjgyYWQzOWUzMWU0ZGZlNzE5NTJkNWVhNWNjODA1MmEzY2VlZDE3NTFmNTlkYzdlY2M5NzQyZmFkMTQ0ZTE4ZGRhOGQwNTgyZTc0ZTM5Y2E4YzQKK1NJRzogOTlkODNmMTQ4YTIzNmViYmVmMWNhZDg4Y2IzYzc2OTRmNDk4NmM5MjUwZTIxYzM2MDNhMGQ5NDFiZmYxOTljZjc3ZDZjZTk5ZWZkYjIwNTMzMTg4ZDY4YWQxMzNkZTAzM2ExZmIzNDY4YWJiNzA2ZDJiOGI0ZmJhYzA4ZGZlMDMKKworVFNUOiAzOTkKK1NLOiAgNjE3MzkwODU3ZGMxMGNkZjgyYjVjOTQyNjFmNThjZTJkNDRhYTJmNTdkMjk4ZjA4YTJkNmM3NGQyODE0N2RhZgorUEs6ICA4OWUwYzNlMGEwZjEzMGQxOTE2ZTBlMzg0OWI3Mjg2ZmEyZTNhYzRjMTdiZDFmNzE2ZWU1YTcyZjAyNTdmYjhkCitNU0c6IDFmZDllNzQ1M2VhZmZkN2M5YjU0MDU1NjIyZGRlMTcwZGQ1OGI3MWNiOTQ1ZGU3NTM1MWQ1ZmNlYjFmNTM2YmRlMjUxNThmMDM3ODYxNTVmOTUzZGMyMDdhMTcwOGY5MGQ5NWIxNWFjYTBhZWUzMDk3ZmRjYWFlODVlNGFiMWMyY2RiNzA1YzUzZTZjMmVkMjFhOTk0YjMwNGE3NWNhZjJjZTRmYzdkNjFmNTYxZTc0ZTI5NzM5N2UyY2RlNWNjNjkwNTY5NDAzNDNhYTgxMzc1ZDBhZjE4ZDE3ZDJmMzRjMGE3MWRjZjFkZTNjNGZjNDg4YTE0YzVmYTZiMzMzN2EzMTc0YjFkYTc5NThmYjAwYmQ1OTU1MTQ4MjIxNDI3YzYwZGJhMDQxMTdjODBkMjQ4ODY1NmRiZDUzNDNkZTg5MTI4N2I1MGVmNGRmOTgyNWVkYTc2YjQ5NzdmM2FjZDRhYjZkMzEwMmZhNTY4NzgzMDZjZDc2NTYxNDkxYmNmZGFhMWRhNTY3ZTY3N2Y3ZjAzYmFlNWRiZjQ0MjZjM2M0YTZjM2QwODJmOTE3OGIyZWZkZDJiZDQ5ZWVlOTdlZjRkY2YzZjBmNTFiYmRlZmZlNWFlNjYwMWUyODAxOTUxOGY4MjdmMDJlNTFmNjY3OWI4NzE1OTc4YmVjM2U2OWQ1NzcxNTZkZDcxOTk1OTM3MWJhZjAzNDIxOWZiYmQxN2EyMzY5YTg1NDE0OTBmNmEwMjAxM2UzM2U3NGY0NzY5YmUzN2FlZmE0ZGVmYjZiZmIzZjM1MWMyYTI2MTQ4MmMyZmJlYzQ5Zjg1Zjg0NDU0NTZlOGY1YTQ3NDAzMGNkNzJkMDk1ZWY2YTYyMjAzMGUxZTQzYTBjNWRlYmIwMzQ3MzFkMmY1ZThlNGJhMzk5MGYwNzdkMGMxNjI2NDlkMWZhM2VhNGZlMWU4MWQ3NGFhODQ5ZTIxYjA1OWQ5NjZjYmFkNGM0OTNjYTEwYmFmZTdhNjkyNDNlM2MwYTZlYmZkMTNkNjk3OTA2MzAzMzkyYmE2NWQ0ZmUwNmI2YTUKK1NJRzogNjNlOTBhNmFmYmJiYjBlZTY5NmJmYjU2ZWZkNjc5ZDY4YTk4NTFhODk0NzY0MGE5N2Y0MWY2OGVkZmVhZGQyMTZlZDg2OThlMmU0M2M4MjBjOTA0NGNhYTdhZGFhYjViNzY3NjJiNjgxODMxYTlmNzYwNDc2YTg0NDNjNDNjMDYKKworVFNUOiA0MDAKK1NLOiAgODc3ZDAxNzQzNjM2OWVjMjQ1M2ZlZDQ2ZTk3N2Q2YWNjM2E3YmU2MGQzMTM5NWFkNmU3ZWE5ZTA3NDgwZTRjOQorUEs6ICA0ZTY1NDIyZmVkMzM0YTU1ZThiNjczODkzZWJhN2MxODFkZDcyNGRkYTAwMjgxN2IwYmFlMjhhY2RjM2Y3ZmMwCitNU0c6IDRlZDNmNWJkYmQ0MWQwZTNiMGE4YTdmYzM3NTJlZWE0OTZkNjE0MTY3OGNiZmUwNjc1N2Y2MWUxYTE2OGQ3NjFiNmRhODMwNTJmNzk5NDk1MGQyNDYyNmYwMDRmYmU5YjhjOTU2MmUwYzk1NWZiM2I1YzA4ZmQyZDNkMjU4MzkzYTM0OTAzMGM4ZTE1NjIwNWI0MDQ4MzAzOGJlMTk1OWYxY2JhNDkwYTg3ZmUxMzg5OWU0ZjM3NTIwNjNiNjhmZTNlMWM1MDcxZjdkYjAwMDJmMDE0OTRiNGEzZWUyZTA3OTkyYmRkMjAwZGI0MzE2NjI5ZWU4YTk1Y2EzNDdmMGIyOGQ2NDAyYTZkYThiNTNlNmIzMjU4MWMzNjkxZTExYWU5YjZlMGYwNDk0ODk0ZTY0OWE5MmQwM2ViNDljNGQ2ODMzZmExZjU0ZjhkY2Q5MWQwNjkzNmE2ZTYyZDQ5MWUyY2VhNDZkZDA3ZDlmMDJkMzI1NGI4NTBiYzk3NDlmMjU4YTYxYWQzYjljYzI0YjAzMjg3MzMxYjg1YTI0MTQzYWFmOGZjY2NhYzVmMThiZmM3MmRlYzc1YzAyMzM1MTZhYTZlNDU4OWM3OGM2NjVhMTg2ZWQ5MDIwOTFkZjk3YjBkMDRlODNhMmQ3NGQ3ODk4OTFhZWEyY2FjZjgxM2ZmZmI1ZWZhZjc4ZGJjZDdhZjU0ZWY1NWM3N2IxYzRjOGFjZTllOTI3OGFkYzIzZDc2Yzc3OWQ2NGIzYmJiZDFmYjMzYjA5ODM2ZWE2NGE3MWU0NzExZTg5ZThkYTBmNzA5MjEzMzQyMTc2YWUyMmM2ZTc4NTJjMzk3M2I2MGQ5Zjk4ODg5YjQ0MmFhNDhkN2JmZGZkZWY2NGMzNmM1ODZjNGZiMmFkMmUyN2ViZTQ3OWY2ZDcyMmYwNjlmZDYxMDZiMGQwODk3NWQ1ZjcyMTU0N2MzYjljNTJmOWZjNWY0NWJiNDViNWI2MzIxODhlODA2MjY1MThhNzkwNTZiZGM0ZWUxZDJiZTZjNjU0MmEyMWZhZGVhOTJjNmRmYjc3NgorU0lHOiA3Njg4ZjNmMjQwMWVhY2FmMmRkODhlMTcwZmYxYzRkN2U5NDgyMmE3N2Y2YjU1MGI1NjllODIxNTJiYmJiNDM0MDU3ZTAxMjMwYjA1Y2U1OGVlMWRlZTUyMjZiNWM3Y2RiZTVhOGFkZTNiOTQ2NWY1OWFlZDc0MTQ1ZDE0MzMwYworCitUU1Q6IDQwMQorU0s6ICA0ZjBiMzYwN2Q3MGIwZjI2OTgzMjdlZjRmMTk4MmM1YjRiOTRiZTc4ZjUwYzc2ZjQzYmQ2NDJmMWYwZWRlMzliCitQSzogIDk0MmI0MzA4OWZkMDMxY2VjMGY5OWU1ZTU1MGQ2NTMwN2ZiNmMzZTc5MzQ0OWZiMzkwZmY3MzBmZmZkN2M3NGIKK01TRzogOWY3MDBhMWQyNTYwZjY5ZDliYzEwNWJjODNiZmY1MzllNDI1OGMwMjQ4NjAyMDEzYTk1OWI5NzhhMTljYzI3MzI4MGQ5MGMwMTc4MDg5NTc4YjUwNTE4ZTA2YWQxZWFiNzkwZmZlNzEwYzYzZDc4ODg3YTk1NTY5MTQ0ZjNlNThhODgzN2Y5M2RkNTE2ZmNkZGQyMmJjOTdhN2YxNDQxMWQ0MjRiMmU4ZTlhYTdjMjgwMTE5YWQ5NGNlOTI1MzNmYzdmZWE2YzY2MjQ4NjQ0YWMzZTFiZWVmMjU1M2E2ZjYxZTkxYjkzNzliMGZlMGM2OGI0MDY4MTQ1NWIzMTFmNDBkZjBjOTdmNTNmYzk1NDI0MmMzNzVlNzcwOGQ2MWJhZDlmNTEyOTYyNDcyNzRmYTAxYTczMjhmYTUwMDlkOTk5NWY1MDFhZTg2ODM1NTJiMTFhNDlkMjYzODExNjcyM2IxMzE5NDUwYTkwMTM4ZDI3OGNkOTUxMmI4MGNhNTc5MmVkMTZjNjgzYmVmOTJlYzg3ODg0YzlmMDdmMTM3ZGM0N2ExMzE0NmU1MTEwNjVjMmUxYjRiODBlZmRlODhhZTEyZTI5NDMxYmViN2FlZTM2NWMxNmQ4MDUwNmI5OWFmYTZhMTQwNmVkYjA2MTc2Njg3NTgzMmRiYTQ3M2U1MTlkZDcwMThmNDAyZWIxYmIzMDE0YjdjZWU0ZjAyZTk4MGIxYjE3MTI3ZTdkMjVkZmUwYzE2OGM1MzQ0ZjFjOTAwNDRmODI3NzA3ZGNhMDMwNzBlNGM0M2NjNDYwMDQ3ZmY2Mjg3MGYwNzVmMzQ1OTE4MTZlNGQwN2VlMzAyZTdiMmMyY2E5MjU1YTM1ZThhZGVjMDM1MzBlODZhMTNiMWJkZmExNDk4ODEzMDk4ZjliYTU5ZjgxODdhYmNhZmUyMWJhMDlkN2M0YWFhMWFkMTBhMmYyODMzNGFiNTM5OTYxNDdjMjQ1OWMwMWI2YTEwODM5ZTAzMDExMjNkOTFhMzVjZWQ3YWY4OWFmYmFjN2Q5Y2Y4YWM5YTM4Y2VlYmVmODMKK1NJRzogZjM5NmExMWYyZjAzYzYxNDM5Njg0Zjc5MDAxYmQ0ZjM0NmEzNDhkY2YxZDNiZWIyZDNiZmUzM2VhNzNhNWFkNGViOTc1MDZhY2ZiZmZiNzg0ZTc3NTQ4MTg5Y2Q1OTlmOGNjZjE3MzU1ZGRlODBlNzUwMjRlZjJhNzhkNWZhMDMKKworVFNUOiA0MDIKK1NLOiAgYjhhMDAxMGM3ODRkOGQwMDJhMzFkYTExZDAyMmQzMDE4OGE0MTk3YTFkNWYxNGVhNGMwZGFiMjlhMmU0MDY2OAorUEs6ICA4YmRjNjNlNTBiZWRlMTNjOTFhNDFlNGI0Yjc4NTdiOWU1NTNmNDg0ZTNjMWVjMTY3ZGMwNGMyODFlYTg2NjIyCitNU0c6IDVjNmNjYjI5OGJlMjE2ODA4YjgxMWU1NmQ5NzJmNDU2YjY5YWQzOTU5NGVlZTM1NDcwMWNhNmIzZTM4ZDFmNDFhMzU5ZTU1MTJhZjk4YTNhMDg3MzI2NWZlNTE5MWY0ZjJlY2FmNjZiZWU3NWEzYWMwYjcxYTRkZGYyYTc1OWViZGRkYmQ4OGE2YTFjNmZkMGZjZjdkN2NiOTJhODRlMzMwN2I0YTRmOThjNzEwYWJmNGY1NTNkZWU3NGY2NTJkMmFjNjRiYzMwZjcyYmY0MzU0ZWY3ZTgwNmExOTA3MWEwNTFiY2ZjZmIyN2UzN2ZkZGQ0MWVjZWFlYzE3NThlOTQ2OTVjNjcwZWY0YzVhNTkwMjE3ODMyOWRiOTU4NWM2NWVmMGZhM2NkNjI0NDliYjIwYjFmMTNhZWNmZGQxYzZjZjc4YzUxZjU2OGNlOWZiODUyNTlhYWQwNWIzOGM2YjQ4NWY2Yjg2MDc2OTI4ZGRiNGUyMDM2ZjQ1ZTdiOWM2YTdmZjI0YWUxNzc2MDMwZTI1NzY4MjUwMTlhYjQ2M2ViZjcxMDNhMzMwNzIwMzNlYWNiYjViNTAzZjUzMjY2YWZiODJmOWIyNDU0YjhkYzA1N2Q4NGYzMGQ5ZDJjYjdjM2EzMWE3ZGJkZmJhNWI4ZTQ5MjMxYzIzMTM5NmM0N2NhMDQyYzhlNDhhMWE1ZTNlYzlhZmU0MDIwNTk1MzkwZjk5OTBkZmI4NzRlMDgyNWFlOWFlNWU3NTJhZjYzYWY2ZmQzZTc4N2U3NWU4ZDhkYzRjNjYzMDIyNzdhYzAxYjMwYTE4YTU2Y2I4MmM4YTdlYmRjOTE1YjcxNTMyNTVhMWZlZGM0OTJlNDk2NjAyNjJiYjI0OTc4MGQxNzNlMWZkMjBkMThjNGY2YjBiNjlhYTJlY2EwMjRiZjNjODBkN2Q1OTYyY2M0YTEyOWE3OTQzYjI3ZjMzY2M3OTlhMzYwNDU1NDEyNzVhMmNkYjkyYTQwZTQ4NWJhOGI3MzdhMDRiNDNkMjljM2UyNWY3NmNiM2Q5M2E2Yjk0NDYxZjg4ZjU2OTYKK1NJRzogYjNmNmNmNGMwZTBmOTA3NGZmMmMyYzQ3ZTE2MzIwMmYxZTlkNmVlMTE3Y2Y3NTc2MzNlNGFiZTc0NDIzYWE3MDAwOGFkYTE1MDllYzFkYzExN2MxYzIzMGU5YjIzNzg2ZjNkMGYyOWI3M2FhMjg0NTM2ZTk1ODAxMDZhOGE3MGMKKworVFNUOiA0MDMKK1NLOiAgZWZjODZjYmU0MDM2M2FiZmJiMmE0YjFmY2NlNWZkNjA4NGRhOTZlN2U4MTRkZTcxYWFkZjlhNjE4ZjMwMzYyNQorUEs6ICAyMmYyOTVjZWU3MjdkMjhkMmI5MzE3MTUzZTdkOTQxMmRhMTA2NWMxYjE2YWUyYTI1MWRkMWZiNDMxYzYyYjAxCitNU0c6IDllNGZhNDVkYzAyNjcxMGY2YmVmNGVkMGYwN2M1NDRiMGJiMGQ4OGZhNzllNzE3N2Q4NDQ4YmMyMDlkNzFjZmU5NzQzYzEwYWYwYzk5MzdkNzJlMTgxOWU1YjUzMWQ2NjFjNThjNjMxNDFjZTg2NjJjODgzOWU2NjRkYjc5ZTE2YzU0ZDExM2FiYjAyYTc1YmRmMTFiMzQ1M2QwNzE4MjViYzQxNTc0MWU5OTQ4MzU0NmI4ZTFlNjgxOWRlNTMwMTcwOTJlNGVmODcxZjFjYTBkMzUwOGY5Mzc4MjhhNDY2N2RiMTFmZmZmOTQxNmVlYmI5NGJmOWI4NGQ2NTQ2MDMwOTQ4MzRhOTljYTcwYjkwZjU2MmE4NjgyMzYyNGRmZTljYjJmOWU4OGMxNzNmMTM0NjRkNGNlMjU1ZjIyMmRiNTBkZDYzYWI0MjQ2NTczNGU3NTI5NWMwNjRiNjRjYzNmMTVlNjIzN2UzN2YzM2Q2MTVmN2MyNDNlNGJhMzA4OTYwY2ZkNDM5MzQwMjUyNTUwMGJiNzkwMjk3MGIzOTMxZDQ4YjM1NjY2YTJkNGQyYWIwOGZhMTJhZjM2NmEwMDQzNDZjOWRkOTNkMzlmYjFiNzM0MGYxMDRlNTFmZWRiYjUzMzYwNWI1ZmYzOWNmNmQ1OTUxM2YxMjg1NmRjZmExOThkNzkzYjBmYzg3NWNkZWEwNzQxZjE0NTU3NDZkOGExOWMzZTlkOTI4ZjAwMjFiMDFjMjUxMzE4MTFlNDhjM2M3NWM2ZjQxNDIyYTg4MTBjNmM4MWYzNWI0NTRlZWFlOGNkMTdjZjNmMmU2ZjBiY2Q5ZjI5MDk4NGY0OTY1Nzg2MjNhYjhlMjczOGQyZDEwODQwZWI5MWQxMDFjYjRhMjM3MjJiNzJlM2RkMTg1NDQwYzNiOWY0NGQ0NmEzOTNhMzRjMTg3YTIwZDYxMGJiNjk4YzUwNTMxNzQxZWZlOTYzMjM1MTIzMjk4MDA3NzJhNDA4MDY1YTdlZjhlNGU0MTA1ZWIxZjViZjZkM2ZkNmIyMTdmZDgzNmQ4OWY1M2I5NmY0NQorU0lHOiBmODgxODMxMDIyOGNhNzYxMTE1MjRjZTk0YmZjYjAyNDZlYTYzNTA4Y2VlOTMwNjU5MmIyZjc3NTQ4ZWRlZmNmNzZiZDE0NTQ1MDhlYTcxNTA0MmNlYzE2OWNlYTUxMTVhYjU0MjM1Y2IxMDk3YjEwNzAyYWEzODM3ODAyOGUwYworCitUU1Q6IDQwNAorU0s6ICAzMzU1NmM2MGRlMmYyYzlhOTMwM2I5OWFkZDM3ODU5MjA2MDUwNWY4ZTQ5ODYxMDg1YTRiMTVmMDcyYTdlZjI4CitQSzogIDIzMWVjOGNkODQ1ODU5ZjY5OTYxMjc1MTE5ZGJlNGY3MTVlNWVjNWFhOThiYjg3NDE2NzViM2MyZDBjODlmZWUKK01TRzogOTZhZjU0MGVhMmIxOTIzZjVmZDBhYWQzMjFhYzAzMjA3MGMyZDY1YmExM2QxNjRlNzVjMzQ2OTc1OGZjZjMxYmIzMTY1NWNiM2E3MjFmOWNiMzRiZTJjOTBjNzdlYjY1YmUzN2Y2MDZkMzJhOTE3YTRjYjlhNzA5YWMwNzA1MjI5OTMwZWY2ZWI2ZmRiMGZhM2MwZmQzYTkwY2UxNzE2NzRlZTNlZDA2MzU0YmFmYzNjNzA3NTQ2N2E1NzQ0NWI4MDM4NTY0MDQ0NzkwMmJlMzkyNjI4OTRiMWY2NGZlYTU4Mjg3ZGMzMjJkMTk4NzU5NzJhN2M4YmU5MWQzMWYwMjFjNzBlYjY4MmZkZjExYTEwZjhmNTgyYTEyNmUwNjQ3OTQ4MzhjNjlmZGY2NGY1YjZlOGJhNTlkNDhiNDM4NGY4ZTlmYjVjMDg3Y2M3NzM4Mjk1Y2QzMjM0NGJhM2I2OTdlZTZiNmE4Yjc4ZWU3YTk1NzVjOTc5NzJhNGQxYmIxODQ4NmY5MDM3YTBmM2M2ZjQ3MWE5MGY4NjQ5OGRiYzBkZjUyMzJjMDdlOGMwMWI2OTBiZWU3NTMwMjk5MmE3YTM2ZmI0NDM3YzI1YThiZjVlMzRjZjdkNWI1NTU3MmM3MDBhMDc5ODQ4ZDM4MTM2NGY5OTQ2YTkxZWIxNjAzZmYzZGU1ZWJkZDUyM2JkOTI1NjQ4MThlMjM3YTUzZThmNTIyZGVhYTJjMjliODk3ZTk2MTU4NmUxMDBlZDBmYzBhZDcwZDE2MDkzNGU2OTQwMjdlNWM5NTc5MjBiYzA1NDZlOTAxYmUzOWE4NDUzNTU5N2UxZjI4MGMyMjIyNjdhYmU5N2Y0MTIwNWQ4MTcxODIwZGQyZmFhZmMwNjk5NDE5MzIxYTkxNjBmNjliOTlmZDQxMTgwOTQ1YjYyZDJkZDEwNWNjN2JiZTgyMWQyODYwNWUwOThlZGZhOGIyMzA5YWViMDUzNGU3NTYzNzdmNTk5MzdjNjc0NjNmZDg3YzhiOTJhYjU4MTE5Y2Y0Y2U2YzY2NWFmNTcyZmJhZTFkZTRhMmNjNzEKK1NJRzogZTA2YTdhNDE0NDU3YmJiZWYyYmFjMzc3NWNjYWQwODdkYWNiMWZhNGJmOTM4ODk0ZThjOTI5MTE4ZTA5ZTY3OGRkMTk5MzhiYzg4ZjQzZWQwZjdkMzFjYzZhMGU2MDJjNGU0ZDFmZWUzM2Q0MWU3NGExMTlmYTJkMWU0ZTM0MGYKKworVFNUOiA0MDUKK1NLOiAgN2E1Yzc0MzE0ZTExODMzMzRhNGI2MjI2YjlhODJkNzBmYzJhMTI0ZTNmODdkYjZhMjI4M2VlMDViNjhlMzRlMAorUEs6ICBiZWFlN2QzZGQ5N2M2N2Y2MjczYmZhYTA2NjEzMWZlZDhhY2U3ZjUzNWZlNjQ2NGU2NTc5MWM3ZTUzOTg1NzZjCitNU0c6IDk4YmFjNjcyNDc1NTkxMjk5MmFkYzJhNDhiNTQ0MjM3NmYyZDkyNzk5N2EwNDBmYjk4ZWZlNTQ0ZWIwYzhlMTg2NmI5NjE2ZTI5OGQzMzYwMzE2ZWQ5NzZiZDk0NmE0MTFmZGQzYTZiNjI1YzBjMWEzN2FmMGY0MWNmNjU2OWE3ODg0YWI4NDY3NDkxYTk4N2RmM2VhN2EwYjdlYmM0NjkyNTY5YTM0Y2UzYTJlYTM1MDM0OTViMmMwMmQ0OWQ3ZDdkYjU3OWQxM2E4MmNmMGNmN2E5NTQ3YTZlYWViZTY4ZTcyNjdkNDVhNjBiOGQ0NzcyNDU1MjI4Y2NhNDAzNmUyODJlMWExMjE2ZjM0Y2VmN2VhNjhmOTM4MjcwYmRiMDQyOTNjODg1ZDAwNWY5ZjdlNjM4YThiNGVhZDI2MjZjMDk0NTE3NGZmMmEzZTJkNmUxNWE0YzAzMzhjMDllMTI2MGYwOTI4Y2E5ZDM0OTk4MjRmM2ZlZGM0Nzg1ZGE0OWM1YzM0YTU2ODU1ZTI0MWZhY2M2MzQ3YTM5OWRkY2FjNDM5OWE4YjE1ODE5OGMxNTE0NjFhM2IxODllNThlYzFmN2VmY2YyYWIyMDMxZmIxN2I2ZjAzNWJhMWYwOTJlOWVlZTJlOTJjMmQ2Y2MyMDMyMjg3Zjg1NGI0MWU3MGZjNjFjOGQxMWEyZTRmMDcwOGYwMmVlYmQwMmU4YzdlOGM3YjM4YTU3YmZhMWE3NDVmM2E4NmMyMzkwOWY2Zjg5YWIxNmNlN2UxODEzYzFkMjAxNDdmMzFiNGNmMmFkMGI2MDZmYjE3ZTVhYzFhYjUxZWY0YTdkODA5M2NlZTlhNjU1ZjQ3MWRjNWIxNDZiZDFiOTNlNTQwYTNkM2QzZTJkZTgxMDU5MTFjMTBkNmFiNWZmNzljMmQwNjAyN2Y3YTU0NTYxZjIwNzE0MTRiZDMzMGE4Nzg1NDQyMjUxYzgxMGUyMzJmODNjMzY3ZjBiZTc3OTlhOTNmNTIzOGY3ZjE3YjViZTgyOWZkODkxMjNjMDQ4MzNhZjhiNzdlNWE0MzYzMDQ3Y2VjYTcKK1NJRzogYzJhYjFmNmY1MTE0YTg0ZjIxODUwMjU4MmM1NjdiMzdhOGJkYmNkZjYzNDBmYTQ2MjI4NzNiZTg5MTA2ZjBhOTBiNDgyOTUwNWY3MjEyOWRmMGFiM2Q4NTEzMjY4Nzc0YTM0ZGYzYWQyMWNlMjU0YjQ2NDQ4OGFkZGQ2YzliMDQKKworVFNUOiA0MDYKK1NLOiAgZGE4MDA2YWRjNDkyY2E1ZGM4NmMyOTU5NDM3YTc1ZGViNjEyMGZmNzg3ZDJlY2I5YzIwYzMwYjUyYzI2YmM0MQorUEs6ICBmZjExM2JmMGFhNThkNTQ2ZjIzODVkNDQ0ZWNiNzg4OGY4Y2FiYTQzYTE3NGE4OWZkNjA2NWYyYjdkYzE3YmYwCitNU0c6IDNlYjQzMjRkYmMwMTQ5ZDJlN2Q2ZGY2MzJiYjBjYmU5YTlmNmRmYTgzZTIyN2ZjMDdiZGUxYjU3N2IzNjExZmI5MjFjOWY4MzEzZjA2OGU2Mjk1ZDQ5MTNhODE5NmJlNTMwZjZhMDFmNTdjMDljMDI4NDkxNDQ0Yjc4NDcyMGU5MDllYTFmYjY5YzFjMWRkNjMwNDQwMDMyN2I3NzMxYjMzY2M0NmRlYjA0NmNkYWI2YWQxYjUzZjE3NDlhMGM2NWNiOWE3ZTM3NmZmYTAyMjMwZjUzNjU4NGFlYTI0M2M2MzkxMDNhZGJiYTc2NDMyMTY0OWQ3ZTAxMjZmODJlMGI0ZmQ5ZGNiODZjNzMxY2JjYzUxN2YyMDE2ODQxZTkxNmJjZDVmZGU4NzFkYzA5OGNkOTEzZGM1NDYyODRkMWIyMTY1YzYzZTg4ZjMyYTI3ODlhNTAwODU2MzcxYjUwZDIyZmI4Yzg3ZDFhM2NhZWRjZGZkMDFlZTVmODcwYTUzYzI4NDE4MWQ2MzJlYzY2ZDQ4YjZiZGQ1NjQ2YWMzOWM5ZTc1MzM4YTUyMDIxMjA2MmJjMzQ2NmVmNWM1ODc2NTU3MGI5MDVmNjNhOTNkMDdmOGYxYmFhYzM1MjZiMDE2ZGE3OTlmM2U5ZTAzYTRmN2Y4MTM1NWUwZjdhNzZmMzBhNDJiODA3MzIyMDUxYjcxYzYyNmE3YTI5NmQ3NWI5ZDlkMWEyM2JjYjEzYzllZjQ4YTkxMmRjMDU3MzI1ZDNiY2ZiM2Y5ZmFkYWYwYzI0OWIxMDJhZWI4NTRhYTM2MzFlMzRmNjlhZDkwYzJhYjJlZDMzYmFjYzQwYjllZDEwMzdmYWU2N2NkZjc5OWQ1YTliNDM3ODU5NjExMjdkNjJmOGUwYmMxNTg5ZmQxYTA2ZmNhMmFlYTdjZmMwMTJjYmY3YjViMjA3ZGRjNGU2NzdkOGFlNGFlYzEwMDA0NWNlMzZjMDBiNzRkMWQyODI1MDc5MTIzNmRjNWRjYzFlZDMxM2M4YzI0NjE3MjY2NmY3NTIxNzQzN2M2MDM0YWNkNjQxOThjZDk2ZGYyYQorU0lHOiAxZjUzNzVkY2IzYWQyYmFhZmY5NTZkODU1NGVjYjQyNDE3NmJlOWE2ZWI5ZWE1NGU4MTRlMGE3M2RmMmE1ZDg0OGFkYTI2YmE4ZTE4MDVjZDUxYzVlMTY5NTBjMWZmN2Q0ZDI3NjRkYWE2ZjRjNzUwMmZiODY1Y2JlNTVhYWYwYgorCitUU1Q6IDQwNworU0s6ICBhMjg0ZTI2Yjk3ZTUzODgzOWM4MDhkNDViZGU2ZjAxMmEzNTQ0NTRhZWY4MWNhYThjNTU5MTQ2MjRmMmI3ZDY2CitQSzogIDVhZTQ2ZTM0Njk1ZWZhZjQ2M2E0MjA4ZmM0ZTM1YjgxZjJjNjM1OTMyMzhhNTZmMjQ0NGI4NTBmMDU4YzNjNWMKK01TRzogOWViZmU5MTBiNTBhNWNiNzE5ZDk1Yjk2MWU1OTA1ZjAwZWM3OTQzYjU1NDY4YWI1OTU2NjkyMDE3NjQ1YjM2NjA3MWY4ZmJiNzdlYjQ5ZWM3M2VhN2Q2NDUxMTQwNWI5MGRlMjJkYjk4YzNlYWUzOWM0MDM5YzdhMTMzNDMwZTgwMTBiZGQzOWEwMGZkMWE1MjhiMTEzZGFlMTQ5Y2ZhZDNhZTM0MGRhMjdkY2M1MDc3ODJlY2Q4OTI5MjM3NTE3YWZlNzQ2M2VjYTI0NzNjN2FjZjZmN2FhMDRlZmM5ZjI2NmFlN2I2ZDYzYmI4Y2MyYTQzOGIzNDQ4MjdmMDcxM2QxZjE3MzZmMGNiYjY1Yjk5MzUzZjIwMzU1ZmEwMjMwZDRmYTcwNzMyOGE4NjYyNjU0ZTgzYWQwNTMwYTEwZjlhNjllMTdjMDk5ZTFlMmI1ZGIxOGU1ZjZmMWRjZWRhNTg4M2U4Y2FiNzk3MDFhNWU5MDg5NTYyZWQxNTNhZDA4YzY3NGYwOTdjMjhlNGQxNjYzM2UwOTI5NjlhOGYwYmRhYzU0NTI3YzBlZTAzYmMyMDBlNWJlNjEyZTNkMWVhYmQ4NzA5MTEwMWI0OTYyYWZhMDdiMzEwODA2OTkyZjM3MzA3NmQ3NmE1ODE4NTExODEzN2M5ZDI2ZWUyY2Q0YzYxOGMxODI4M2RkMTlmMGU3YTA4OWVlMzczMDViNmI5NTE4YTc4ZDgwOTg0MzZlZjYyYmU3ZDY5OTgwOGFjZWNmNjc5MzlkNjFiM2UwMjkzN2NkOGM1ZjFlNzQ2ZDQyNzQzMzRiYzljMzdmZGNiYTIzNGMxNjZmZDcxMjg5M2YzYTA0MDgzMmVjNTQyNWU1N2Q4MGYxMWVmOWNhNWZiY2Q2YzE0N2ZiYmY1ZTJmYWU3NDZlMGRkYjYwNTg2N2UzYmQwNTA0ODNjM2NkMTMyOWFiZTU3YTYwYmY4ODg5OGRjN2U4MGVkZTBmNDUxN2RlOGZjODA3ZTg4OGI2MjFhMDBmNjYzMDg0ZmY5NGI5OTk5NjYyOGYzYjExNjkwYTYwZjA5MThjYjVjOWE3ZWYKK1NJRzogYmYxMTBlMmU5Y2VjYmMzMWZhM2UwYzI0MzhjZDFmNDMyMWY5MmNkMjg3MDA1YTQ4NTI4YWRkZjc2Y2FkOGQ4OGJiMjI3MTllZjkxYjEzOTU2MmExNTExODM4NjgyNjc0ZmFhOWZmN2U3YWRlNmM5ZDU3M2Y4NDUwMzZkMTg5MDUKKworVFNUOiA0MDgKK1NLOiAgY2M5N2E5NjMwMWNlZWQwZjkyMjczMWI2ODViYWQ4YWQ0ZjA2MjA3YmUzNDBmNWE0NGZkMTg3ZjI5OTAzZWMyMAorUEs6ICBlYjU2M2E3YmNlMTJkYjk3ZjE4OTFkMGY2MTBiZWJkNTUxMDFhMzEyNWNhOGRiYjUwYjI1YTZiNTA1MGQzNzg0CitNU0c6IGI5ZWEzYjNkZjcxODdlYTQxNWEzYzMzNWUwODM0ZTEwZjQ0MDkxNWIyYWQ0MWM3MWYyNTVkNjk1MGE0ZTkxMjBlNGQ0OTRmZDllNjcyY2U1MzIwNmZkYzQxN2Q4NjU4OTdiNDdhYzEwNTRlMWNhMTA2ODE5NTIzMmQ0Mjk3NDM1ZTQ0ZTEyMjRlNjZhOTEyZDlkN2QxODI5NDZmZjVhOWYwODViYjhiYTE5YzU0ZDE2YjU4NmE5YjMwNDYxYjY3NzNiOTM5NTAzMTFlMTYxOTg4NmY1YTViM2YxMTFhYWFkMDk0YmFlMzFjNDhmMTk0MTA4MDk2OGJkMDI3N2JiNmZhOTJlZWJmMzI0YjE5MmRmNWNjOTY5NTE2Yzc4YzdiMmQxMjE1OWI0ZDFjOGViMDMxNjBjNGNkMTkwN2Y2MmVkNGI4NTRjNTY5ZWNjNDgxYzA4ZTYzNmY0NGVkN2MzOTBlNThiNTkzN2QyOTA2YjI4MTdiYzM3NjlkYWQ5ZGExYjBmNzkzOTFiNTU5NDIwNjMwNTVkYTBkNmYyNDlhM2U0NTJiYWRkYWEwMzI5OThkN2Y3MzM5OGNjZDAxNTFiZmM5MmM1ZTJmZGZhOWIxNDg1NWU2YjBkMzc0NmRjZTI0OGUyMTk2NzI5ODcyNTJlYzc0N2RmMjc0N2ZkM2ZiZDhiNzE0Yzg4MmQ3MDdlZTMwMmE5MDQ5NTBjMzQ3NTRmODUzNTBlMWFhM2Y4ZWE2MjkzY2YwMWY3MTdjZWZiNmI4M2EyMjEyNmRmNWM0ZjU2OThhYWZkMDZhMjI0NGFkN2QwMWYzNDAxN2NhMGVjZTZmMjEwNDAwNDhhYmE2Y2E0YWViMDQzMjViOTQwMmJjZDQzYWIxMzBhMTA1Nzg4YWMzZDdiN2RhMDFlYTk0MjZkZDBlYTE5MzNhODE4OTkzM2E2YzBjNmNkNjQ4ZWEzMTZhNzQ2OWE1ZmRjNmU3YzkzNGQ5MTg2NTg2MDk3YjU1ZGQ1MWFjNDg3YmI4MGVkMTFkNGRmOGQzMzYyNmJiY2U5NWU0ZjEzYmQ0OTkyMmYwMGM5MjAyMjNmNGNiZjkzY2IKK1NJRzogZmZiZGQzMjQ0MTgxY2RmNjAzNGY0YTQ1MGZkZDk1ZGVlNDk3MWE5MzNmOGJlMDIyYmIwYTQxMDZhZWYzOWFmMzA1NWI3MjE4ODFjOWI1NGQxZTk5Yjk0MDkwOTZmYmU2ZGMyYzk5NjZlMzY3OTk2NGJkN2VmNGM4MDhjYWJmMDEKKworVFNUOiA0MDkKK1NLOiAgNjc5ZTNlMzQ3NzNhYmU0YWUyNWNhZTdkMDdjY2QwZWIzYjBlYzBhMzVkNTcwMjU3ZDYyNTcwZGU1OGVhMjUxNgorUEs6ICAxOGFjZmZjZTI1M2IyNzI1OTU3OWVkOTkyNGY0NzljYWUzMTIxNjdiY2Q4NzZlZGJhODhiNWQxZDczYzQzZGJlCitNU0c6IGZiMmI2NDhlYmIxNjY4ODI0NGY3OGIyZWU5YTI3MzU5OWQ1NmI2MTk4OTAwZDQzOGE5ZTk5YzE5MTQyNWM3MmJlYzRmMjM1ODQ3ZTE4ZTQ3ZjU3YzNjYjM5NjY1NWY3Nzg5MjFmOTA4NTgwZThlODNjOTZjMTA4YjIwZGQ0MTY2NzgwMjFiY2EyNTliOTg1MThmYWJiMmQzNTMyZTQ4NTFkOWQ1MmFkZDI1NDJjMGNiM2VmYTM4NTdhMTdlNTEyNDM4YmMwZWM0NzYyZTJmOWJhYmE0MjljMDNlOTliZWM0MDM4ZTZiMGNhNDJiZmY1YjIzM2IyNGMzMzNiNGNhZWFkMmRlMzc0YTg3YjJhYjVkODBkNmU0OWU0NDU2MzI5ZDUxYWU5NzNiYzgzZDc4NjJmM2QzMTVlNTE0NDgxYjEyODU0YTlkZmMwOWU3ZDE0ZjBkMDIyYzBiYTMwMjI1NzhlYmE4Zjg3NGRlYmE0YWE4YzgzM2YyYjEzMjg2MWQ0ZDUxZTUwZmU5YWE0Yjc4N2JkMmYwNTFhYWM1MGMzNzUzOTBjYmJjZmJhMjAwMmI4MGFkMDBjZGMxMjk4MGY4YmE4YmNiNzA2NGFmYzA0ZDVjNDY4MmMxMDI5YjEwYTZkNDVmZTZlY2Q3MDQyNDVmYWY1OThjNDY1OTU5N2M1ZDY4YTE5MmNjMWNkNGZhNDVlODRiNTQ5ZThlNWU2N2RhYTg3OWFlNWE1MjBhNmI1NTUwNTE5ODc2YTU2MmFjNDljNmRiMGFhNzZlYzY5YmI2NGRkNmI1ZTFhM2FmMmUxMzFlNzIyZTdjZGQwNWJlMzRiNWZjYzYyNTlhYTEyNGNjZjgxNGNmNWI1MDBkMTc2YmUyOGViYzQwYmIyMWYwM2UyNGNjYzEzMWUwZjQxZGFhMWNhMDJlNmIwMGM5YzUzZmFkMTI0ODYxNGU5NDBkNGIyMzc3NjBhYjc1NjlhNzY3Yjc1MTVkZDJkNjIzZTU3YTI4NDFiN2QyNDQxY2Y0MzA0OWU0Njk4ZDJmOWM5ZWFlN2IyOTEwZjZhZDY1ZWRmOWNiMmJkYmQ5YjI5ZjYwNmUwZAorU0lHOiAxYTUxMDIyNjI4Y2NiYjg4ZWFlOWIyMTc3M2MzZjgzMGI3YjZlNWJjMzZjOTkwM2NlNzBmYmNmNDU5ZDZhMWVkOGExZGNlZmY1YjE5MjY5ZWJmNWE2ZmQzZDg5NTg4NjBmNTU0NDYxZjBlOWZjMGUyOWFmOWIxZmIxNzQ0YTgwYgorCitUU1Q6IDQxMAorU0s6ICA5YmZhNjA5MjNhNDNlZDBjMjRlMmYxMmY1Yjg2YTA3MTYzMjlmOTNkNGQ4ZDNlMDYyMzgwMDI4OTMyNzhjMTlhCitQSzogIGZiMWMwMDY4Nzc4MWI1NWI4OTNkNmIyZjRmNDljZjVmNzNkMjkwM2MzMTZkMWVlZTc1OTkxZDk4M2ExODY4YzAKK01TRzogYTk5MDI4YjBmNGEzYWE1ZTc5YWJlZjZjMGRmNGE3ODNlZjQ3MGYxYTI5YmE1MWViYTAwZjYyMTRlODQwZmUxOWU1YjZkYzYwMjFhYjU5OWJiMmVlMzY5OTU3NjAxNWQ3OWE3OTM5YWY4MjM1MzViNjMwZTM5MzhjNzIzZjZlMGI5MjI5ZDQ2YmIzMzc5YWNkYmE1ODdjMjM4NTY3ZTNkODliYzNiZDM1MTliNzI3ZmM2OTRmZmYxMTE4YmYyMmM4YmM4YmM4MmM0ZGY3ZjVhZDM4ZGUwNWZlOWY3NjI5OTllY2FhNzk1ZjNhZTYzMGE5YTMxNmQyNmRjZTlmMTU2OGZmYTNmMjJiMDI5NTIxNDAyMGIzZDNmNTMzN2MxNDk1NjgxOTIyMTgxMzJhOTA3MDkyNzljMDFkMjNiYWVmYTY2OWUxYzRlNDIwMzgxNzNmMTMxOWMyMTJkYTE0NGYxYzRlYTRjNTJjMDA1Y2JjMGI1YmMyODNlNzQ0ODNhMGRjYTY5Mjc5ZGViMTdhZTViMjljZmFmYTdkMDA2M2Y0ZTFiYzkzNTM3ZWZkOTM3ZTU4YThhY2E3MzcyMjhmOTM3ZmYyYTc0MTg5MGU5NmM1NzI1ZGExMWI0NWM0MTNhOWJiYjQxODBhNDE5OTg3YmJmMDQ2YmZkMzQ2Mjk1ZDYyZjA4MWM3NmRhZjJiMGUxZWI0ZjY3MTJmZWViZTZmMGE5MmUzNThlN2RkYjg1ODk2NTA3YzM0MGEwMWY2OGQxYjBmMDg1Nzc4YjdjNDRiMDE0YWE2NjczZTUwMTc5Njk1OWExN2E2ODhkYjA5NTkwNTg0ODhhNzExMjU3MmYyM2NmOWNkYjUzYjVlYjRiNDVmNTk1M2JhMGMwYzY5MGY4NmJkNzVlODlhMDQ3YmViYWY4NDdjMWRmYzM0NWE0ZjNjN2QzYmVlYzk4Yjg0YjAyMTkwMDNlODE5ZjVjMmFkYjQ1Zjg3MTc5MDNkMWY1YmQ1ZDcxOTE0YzU2ZmNhYmM3YTI5MGY5YzQxNjk5Yzk1NTg0ZDZhM2ExNjM0MGNiMTdiYWExZmM1ZTU0NjdhZjdhYzMyMjEKK1NJRzogNTVmMjAyZWZiMmE1N2JlOGI0ZTRmZDg5NGRjYzExYTRmYzVmODI3NjYxOGVmNWNkMzRhNDQ5NWFkYjAxNmEyOThlNjQ4MGEzNWNmYzUzZWRiMjVmZjE0OTlmYzUzMmEzMzA2MWNjMDFhMjUwNDU4YWE1ZTRmN2YxNmY1MTQ0MGQKKworVFNUOiA0MTEKK1NLOiAgNmUzYWY0NWU2NmUyMjg5MGMzZjNjOTM0ZjUyM2E0ZDY5NDI3OTc2ZTZlNTI2MjVmOGJhZDU1ODk5Mzk2MzIxOQorUEs6ICBlMDk3MzY0ZTc2ZmY5ZjJlMWQxNjdmNmIyMGMxYmM1ODMwMDg1ZTdlYzk5M2MxMzhmOGIxYjIxNzU2MzdlNzQxCitNU0c6IDVjZmMyZjRiNTU5ZjgyMDViMzkxMDIwODc2MTdmNGQ4NmM3Y2U2Y2IyNTFlNWY4OTYwMWRmYzg4ZWQyOGU4ZDdhNjcwZWMwMDg3ZDJlYTVkODkzMDIxYzcwNDRkYTI4OTlhMjJkNzc2ZmU5MDE3MGU1MWMyMDMyNTA2OTBkMzdhMjk0NTU1ZTc0YWY5MjM0Y2JmMWFkOGYyMmNlZTg5NzQ4MjhhMGQwOWU5NTU0YjcxZWUzYmNmODgwYWI5ODMyNWY3MDYyNzIxOTRlYjJlODBjNzAxZDQ0MWI1Zjg2Njg1NjFiODg4NDlmODI3YWY3MDNhYjA5NTQxMDVmZDNjNTRiM2Y2ZWM1NDkzNTk2ZDBlM2JjNjc4MTgwNDgzMTBjNGEzZTBjNTU2YmM4MDY3NWYyMDFmOWJiOWM2NTM4YTQxZDk5YWE0MGM4ODZmYzQzMTQ2NzIxOGQ4MTljMjNlNzg0OThhZWQwNjEzZmE2Zjk3M2UyMjExZGY5ZmI4N2Y0NDExNmYzZmU0YzI2ZDZjYjJmYTMzNGM4N2Y3OGMwOGNhOGM5YjkwNDFkODNhMTIzMDY3N2UwYWY3ODg1OThhNDJlNDRjZmRmNjk2NGE0ZWU4MGUzODQwMmJhNjdjNzNhNTgxZTU1MmJhYTIyODI0MjVjYjJjYTE3Y2E5MmVkZmJmOTgyOTkxMDJmYmE3NjFiOWI3MWE1NDUyMTQxYmI5YzE4ZGQ5NWZlYmMyYTc4MmRlOWNlZWMwOGJkMmVlM2Y3ZjBjMWJkODk0NmRiYTk5Y2Y5ZWEwODZhYmFmZDM3YzljYTYwMjEzZjBkZTE3YzYxZmY5YzM5MWM5ODE4ZWQ1Y2Q4NTcxNzc4YjdkY2MxMzIyNDk2MjM4NmZiOGNhMTRmODYxZTk5ZjNiMThlZGFjOGE1ZjEzMGY3YmZjZDQ1ZDA0NWQwZmYzNGM4MTU3MmE1MTIzNjNkNjUzMGY5MzgxM2U1ZmIxMGU5Y2I4MzM4YTdmOTM4MDA0OTEwMDZmNDQ2M2U4OWYwZWQ0NTMwZTVmMTJkZjY3NGY1OTg5MDQ3ODBhZDA4MTJiMWUzNTIxZmNkMGY4M2UKK1NJRzogMjZiYTU2MmU4YTQwNjU3MDgyMDdjMjVlMjM5Yjc4MGFlZTM4Nzk0Y2Y5ODNhMzdhY2JiOWQ1NTdhNjVjZWVkM2MwZGE0N2QxN2YzZThiOGY0ZWViMWI2NWEyYzE4MmVhNmYyOTYyM2I2M2JiMGYxYzcyNTkyNjgzYjEyNmI5MDEKKworVFNUOiA0MTIKK1NLOiAgNWYxZjI3MTg0NGQ5ZWQ1YTZhNmYyMDlhMjE0MDhkYWVhNDcwZjZmZDUzYmE2NDc5ZDc0MDcxMDViN2RlNGQ2NQorUEs6ICA2MDg1ZDdmYjVhOWIyZWQ4MDZjMWZkMzBhMmFmZGU3NjA5NjFmN2EzNmI0OGY0ODc1MjQ2ZTYxNWEyYmQ5OTI4CitNU0c6IGVlZDZiNDQ3NWRjMjYzYmQyMjA3ZmU5ZDQxZDQ4MjgyYjcxM2Y2ODBmMmUwMzczODRmMThiNGJmMjI0MzQ3ZjVlNGM0YjA2MGI4MDhkNDEyZWFhYmNmNzMzZGMzOWE0MGM2YmRhMDUwNWNlNzFmYTgyM2JkMWIxNzk0ODQ3Njc4ZGMwMzRlNzk5OWMxNjM2OTM0MGJjNjBjNjRkMDliYjkxODdiMmUzMjYwNTVhMDUzZjhlNTA1ZWE0MTk2ODYxNDcxNjIyZGIwZTQ2ZjBmODk1NGQ4YTFmMDczMzJkYTRkOGFjNTU3MTI2MjYwMDk5MTJmOGExNWE5Y2Q2M2E3NGEwM2M5MmYyNDZjYjYzY2M3M2Y5MmU1MWRhZDFiYzk3MTViMWVkM2ZlNWYyZTFiMjk1OWI5YjcxZTBlMzczNjBlYjI5NTM2Y2Y3OTcxNDdmYWIxMDg2NGQ2MTQ2YzM2YjgyMzM1YTBjZTkzMTQwODQ3OWM3ZWRlNDg0ZmY3M2UyZGJmZmZjNmM5MjI3ZTE2ZDdhMjNmNGQ5MGYxNTU4NDUxNGMzOTU5NGUxN2JmYmIyOTVkZTlkNjJhZGFkYjU4OWRiYmUwYjA2ZGM4ZGFjNWIzYmY1MTdiMjRjMTgzN2IzOTQ3MmE2ZGQzODkzMWZmYmJmZjViNzYzNjM4ODA1YjRlMjIzMjFmN2FmZTkyY2RmNTAyZmI2M2QxMDlkZGNkOWU0MDUxYWQ2ZjQ1NTk4NTMyYmUxNzk1MjM3MTA4NTFkMzkzMWU4ODdkMDJjMzQ1Yzc5YzQ4OWZjMTA2YTRhZTE2MmY3ZGY3MWFiOTBiNzUxZGE3MDM4YTZkZjc2MTZjZmMxMTg4N2UyMTA2OGZiOWUzM2JlNTY2NDAyYmU1MDRmM2ZjMjc0MmI4ODE1MDliZDRmZTZhMGZjNzIyNjQ5ODgzZjhjYjY1NTU5OGExNWExZDRjMjI5ZGQ4NmI1Y2FlYjcxMWEwMjhkZWZkNDMxMTU0YmJhNDZiNDgxNzJhNGQ4Y2JkNDViYzkwYWFmODc0YjYwODVmYTI4NGY1ZmVkNjU1YWQ2ZmExN2Q2N2IzYjlhNzk2ZmEzZQorU0lHOiAzMTliYjRkZWIyMTc4MTEyMjQxYjNmYjhmNDZlMTA1YzNiOGU0ZWY3MjFlYjIwMGQ3NjJlZjM2M2UyNzE2ZjJhODlmODBiNWI5ZTg5OTcwODkwYTA5ODkyYWQ2YTU4ODA4YjQ3N2U5NDNiM2NmYTc3Nzc0YTM2NDViYzc0NWYwMworCitUU1Q6IDQxMworU0s6ICAwNDhhYzllYzNlY2IzMGEzYjFiZmRhOWIzYjc5YTQ4YzA3OTNiNDkwODc5ZTNjOGE1ZTIzZWUyYmFiY2Q5YjdjCitQSzogIDk0NmMxODZmZWFmYzM1ODBhNThkZGQ1MjZmZjIyOWMwNDcyMDI1MGY0Y2Y2YmRlMDI3MWVlZjliMTJiMWMzZjMKK01TRzogZDY4YmU4ZWY3YjRjN2E0Mjg5ZjJiMThiMTZhZGU5N2Y0ZTRmYTE2NDUyOTc2YWZiNTgxNjkzMzgwY2M1NGRlMzhhMDc1ODdmMzJlMmQ0NTQ5ZjI2NTk1ZmVlMjM5M2JkMDYyZTliMDBiYWU3MjQ5OGU0MTQ4YzhiODgyYTg4NDBlMTViNTg1YzgyYjVjMGRlZmIyMzM1MTg0MDk5MTY2MTVkZWIzYTU1YTVmODRlNmIzYWFiOTM4NDRkZTNiMWU0ZDg2ZTA5Zjg4OWFjNzFjMzI0ZWIxMmQwZmJkODYxY2MzMTIyOTU0MGU4NDNhMzRmOGQ1YmU0N2MwZWMwZDIzZGY0M2UwNjgxM2ZjYTMwOTQzOTkwNGMxNjdkMTA0M2MwZGNkNDQ0YjAwNGJlMWZmMjdiNzg2MmIwMGViYTk0MzNiOTRiMGZjZGM2NzUyMWRhMGMxZDUzNTg2MzZjNzhmNTMwNDMxMTY0ZGRlMjBhMWNmMTY0ZjUxZTI5YjhlNjNlYWNkZWNjODY5YjQxMzkyYzY2NzY2NGQ5MTY4MGQ5YWM1MTZhZjU0OGYwOWU2MDU2NGU4MTRlMzZlMGI1NjNkYmFlNTVjNjI3ZmZjMTQxNThhNTZkOGViMzYwOWUxNzQzODFiMjFkZTRiYTgyMzQ0NDY2ZGQ1NzdmNGQxMTAzYzQzYzI3ZmI4M2NiODMzZDg3YWZkZjc0MTJiNDA5MDkwOWIxZGRlMjY0ZGFkZGNlOTY3ZjQ5NmJmNmYxNzExMmJmMzUxZTQxN2RiNTk1M2IxM2I4ZjBmY2NjYmYzMGY1YmNmMzc2ODYxYzEyZWYyMGVlYzg5ZWQyM2NmMzg0ZWU3OGRjNmViNDBmZDU4MTFhN2IyMzkyN2MxM2U3ZGM1ZGEzYTkyMWI4ODNhOWIyYjExNTU5NzBmYjBkYTdkMjk5M2RjZGZkNDM0MzY0MmE5ZDVhNjM0N2U0M2MxOTNiNTc5M2U0NDUzYWMxNTM3YWEzZDA0ZGM5Zjc3NGU4NDA5MzQ4ODFkNzhhMzliYTI1MDQzOGM1MDcyNTBlZWQyZjZlMDdjYzk1M2Y3ODNkNmI3MmIxY2M2MTk5ODEKK1NJRzogMmVjZjViOGE1OWE4ZTI3ZDI1ODkwYTJhYTMyZjRhMDY3MzI3NWQ1MzliMTc0YWZhN2IyY2ViZjJlNzYyODBkZmZjMzM4ZWRlODVhYzhmNjE0MDM5NTYwZTI4MDZkOWUxZTNjZjljY2UyY2ViNzg3NGZmZTFhN2U4MGNkZWY0MGIKKworVFNUOiA0MTQKK1NLOiAgMmYwNTdkMjBiMTY3ODUzMTYxMWY0OGYwMDNiN2QyMmViYTVkYmJkN2UyZGQ0MWI3Yzc5ZDA5MDcxZjg1ZTk5MworUEs6ICA2MjBmYzRlYWEzNGQ3ODdkZjY3NWNjYmY3ZTg5MzIwNDgyOGRiOTJlYWQxN2ExMTY1YWM3ZmExYWI0MjcxOWQ4CitNU0c6IDZlMzVmNmVhYTJiZmVlMDZlYTZmMmIyZjdhYjE1ZmE5N2M1MTgwOTU4YWYyZTkwYWY5MThhZGZiM2RiODMyM2Y0NDdjN2JmMjZkYzUzNDk5N2MzOGI3ZmM5NzdmNjQyZGUyODhjZGYyNTMwNzFjYWNmMzU2NGUzYjhlZDZkY2U1N2RkZmJhOWZmNzgzYmFkMmU3NmRmMTI0ODI4ZmMxMDMxYWNmYWRmMDFhNDRkNDFiNDIxNjFhZDkwNjAzMDFjMWFmMTkyOGI5ZTViNzNiOWJkMjFjYWM2MGE4NDJiNTA0ZGMzY2MzMTFjNTIyZTNiYjA0OGJmMjIxNDQ0ZjUzY2ViMDhlNzdlOTQ4NTkwZTk0ZWQ5OGYxYjYwNGNiOWVhZGM5M2JiZTc0MzFjMTE0OWIyMzE5M2ZmOTNlODU2OWYxMTNlMTY4NGQ4OTc2ZWNhZTZmMDllMDEwMzYxNGJlNDE4YTQ3MmVmNTViYjg4OTBkNzJiMzQxY2RkNzUwNWI1MGE0NTUyMmFiNjNlZDc5MWNlOGY4MmZlZGRkN2E2MjBhNGY2ZmIxZDJmYjBlZDBjNDU2MGQ3ODQ0NmQ4M2IzZDFiMWJiNTZiMzY2ZDE5NjAyMGQwNjI0YjFmYmRiNzVjZTczNWRkNDNlOGU4ZGYxNjNjNDRlMjM2OTkzZGNhMzQxZjUxMzJkODI1ZDBhNGUzOTNhMTlkMzhmNjFlMTFlMGNmMzkyY2I5YjY0NmVhMjNjNTgwOTk4MjRkZDhkOWZiZTI2YTQ5ZTMzYjIzZGY4MDYwN2FiZjE5NzE1Nzk5YzE5YWNjNzIyZWQ5YmNmOTRhMGMyOWFkMjRiNzhiMGIwMzViMzI0MWM2NGNkODZlZGVhYzgxMGU2Njc0NTY5NGI1ZWIxNjI1MDYwZWRmMmQ5NDlkZTBkMzRmNTIyZGYyZGM2MGFlNjk0YTE5M2YzYjgyYzFkNmY4M2EwY2JiODQwZjQ2YzQ5YTNkN2QxY2YwNmRlYWY5NmM2NGY4ZjllMTdiZDlhZDUxMmFlNjMwOWM0ODZkOWUyYTc4ZGNlZWNhNDczYTA0MjFkZDFiNjQzYzc4NzU0MjcxYjUzY2UKK1NJRzogMzBkZjdiMGIxYzA0ZmIxZWZhMzUxN2U5MjhkNmQ1N2MyY2EwZDA3ZjRlMDRmZmIxZjA4YjQ3OTJjNTkzN2RkMjcxY2NhYmRjMDBkY2U4NTBhZmU1MGFmNTk5MGYyMjRlODQyMGE2ODFkOTVmOWY3ZjUxNWFmZWMxMDJlZmQxMGUKKworVFNUOiA0MTUKK1NLOiAgM2EzZDI3OTcwZmUyYWNiNjk1MWVkZDVjYTkwZGRhMGZjNmRkMjI5YzBhNTZkZjZlYjExYTljNTRkMjQyZGJiZgorUEs6ICA1NjRmMGRjM2RjNDcyMGU2OGU0NGRkMTY3MTFlMDQ5ZTYxMTIwMDAwOThmYTYyYTFiOThjMjg4MDQyZjdjM2JkCitNU0c6IDQzNzRmNjFjMmNkODhhM2I4OTcyMjQ5YmZhNzliMzZhYjY5ZTNlZDQ4NGNjNjBlNWQ5NTQxZmE3Njg2Y2Y0ZWVkMTIxMGM1ZDBkY2Y0MmRkMjU5NzI1MDE5MDkxOTNjYTc2YWU2ZWI3ZjQ3MWQ4YmQwZDVmYjVhNmI0MzFiYzNkZTBlMDMxOGQ1MDUxNDUyNGRlODdjNGI4MzAwNWRmYjQxMjQ1ZmIxYWY3OWI4NGE5N2I4M2QzY2FjN2FkN2E1MzM2NGUyZTliMjFjOTdiNzY5YmRjNTdmMDcwMzExNjE2ODM4MGYzY2M4ODM2ODllYjRhN2ZhM2IyNmRiZTEyYmMyOGY4YzQwMzgxYWY2NGRmNGI1MzYxZDE3NGNmNzVhY2JkNDY0Mjg3NDBiMGQxMzIyZDMyYmJlOTQ4NDUyMTU5NjZhZTU4ODc3N2E4YzA1MzM2ZTM1MjMwNmQ0OTI3OGQzMjhlNDk2ZGI2NWU5ZWNmNmNlNjQwNWVkMWM4OTM0OTBiYzQ4YzEzYTEzNGUxZmI2ZTgwZGViZTZkMzJmY2U2ZWY3NDc4M2M4ZDc3OTgwYTQ0MWEyNmFlYjRmZDgzY2M4NTUzNTJjZWRjMTg4ZjUyNzljZTIxMWY3NDRhNDBiMjNjZTdmZjI0NDM3YTFkZDMzNzNlYzViMjkwZGExZjk0ZjQzYTA3YTNmZmVhNWI1ZjY3YjUyYzE5NjE4NWJjZTllOWE4NTgyNTdmY2Q3YThlYmFmOTA0MGVkMDkxZmFjZTVhMTU1YWE0NDdmYTE1ZTEyMTIyZDI1ZThmYzM2ZWFlZTIxMzdjN2IzYWEzMGI3ZTNmZjZjYzg2YjZkY2I5ZWFmNDljOTU3NmYwZjQ2MjAwODQzOWNiMWEzYWJhMDEzZTg5N2EwZmFmOTk0Y2I3ZDU5ZWRlNTc3NGJiMTQ0Nzc0ZjczY2EzMGU2NDE0YTdjYzdjNzRiMjBjNTFhMTQwNGRkYzQxOWVmNzYyNDU5M2U5YmNmYjM3YzBhNzYyZWFiNjhmYWNhNTg2MzQ0M2UxNmVkYjc1OWRiYzg3ODg3MzJiOWU0ZjU5YzExMTkyYzNmY2M4NzJhZjU1ZjMyZAorU0lHOiAyMmViOGVhMDUwNzM0OWI2YTBhY2UyNWNmOTE4MGNiMDhlMDM1N2IwNDUwMjkwNWZiZTY5YjRlMjFiMmJkOTRlMjJjZmJkYjg1MWFlNzE2YTVjMjUzYzcwZDVlMmIyNGVhNzhmMzViYzIxMzI5MjU0M2Q5NGUxNDExMGIyNDEwNgorCitUU1Q6IDQxNgorU0s6ICAwNmQ0OTgzMThkYTQ1NjI0MmI5YzNiOWFiNmQ1MzJhMTI4ZmNlMDQ0ZjUzODgyNjgyZTkyNjIxNDljMTY1Mjg4CitQSzogIDQxMzUxN2FhNjMyMDBhMTcxNzMyMDlhNGIzZTc4YWI5MzgzY2I0ZTM5ZWZkNjc5NGM0NmEyZDEzZmFmYTk5YzAKK01TRzogM2ZlMzBlY2Q1NTA3N2E2ZTUwZGY1NGJiMWJmMTI0OGJlYTQwNjNlM2ZhNzU1ZjY1ZmNkMTE1OWVlMDQ2ZWZkMGViNWYyZmJiMzhiNWMwMDk0N2M5N2RjODc5YjM2YjllNTM2MTkyMjg2MDg2ZDBkYzEyMDUzNjEwMzg2MTc0YTdjNTZmMjJhODViNzNmZjIwOGM1OTQ0ZjM5MzIzNmMzMjQxNTgwOWRhMDM2ZTczY2FkOGZjM2MzMDM3ODA2NGE3NmFmYTkzMGEzYmFhZTlhYTM1NzA2MWE4YzVlOGU3NTZhOWNlY2Y5NGI3MmRmNDNmYWNkODhmYTQ5Y2I0OTQ4YzYzNjgzMThhNmIxZTVjZmY1MmU1ODdlY2RmYWVmZGI2OTA4MWYyOGMyZDEzYmY4ZWFiODFkYmFhNWUzNzI4YzQzMTdmYjc5M2RkMTk2YmNhMGZlNTRhNmMyNDJjZjI2ZTJkMTI5YmEwZDgyYTJjM2E0NWJjOGQxZGZkNmY1NGY4ZGE0ZjUxODljOTFhYzIxNGZkYWJmNGM1OTczODFiMmU1YzQwY2M3MWZhNzA1MWNmMmVhOTM5MDZhMzdkNTdkZjEyZDVjN2U1Y2Q3N2M5MDdlNDQyNTY2MzE1YmFlNTFhMjIyMmQ2MmUzZjQyZDE3Njc4ODI2MzdkNjZhMWQ1MzA1YWI0MDEwYTBlNDljNTdkZWY2OWRjZWE4MzllMWI3NmE0MTEzNWJhOTUyY2M0MjQ5NTBlOGQzYWFjMTllMWQ5M2RlNzc1N2MxNWZmOTk5N2IzZDJhODYxM2NkOWExNjQ3ODFkMWJlMzMxNzk5ZmE2MTA5Y2VmNjE0MzA1YTE5NThmNjI5MDNjOGM5ZWEwYjIzYmE3MDZkNDljNTRiYWNjYzFlNjNjYjRiZjE0Nzg1ZmM3YjA2MmE5ODAwMzQ5YmRiMGJiOTI3MjYwYjY3N2I2MGYxMGU2MmM4NzgwZjNlYmI1ZWI2ZmYwMzYwMjYzZDQ1N2FiNTJmZDExMjVjOWNlMDQ2YTk1ZDg5ZDI4NzM1MGM4MDRjZmQ0ZmYyYjJkZGQxOGE5ZTEzNTE5ZjIwYjRkMWUwNTFhZjYyNDY0MGYKK1NJRzogODI1MGY3NmRjNTk5YzUxMjg3ODdlNGY2ZDNkYTIzMTczMzMwY2UzMzIwZGJhOTU5YmQ3MTRjYzhjYzA3YzY3OTQ1ZDYzZTc1NjYyYzA3NWUyNjc0NjBhYjdiZjU2MWYyNGZhYWUzYjQxZGJmNjc2ODk5MTkxZTNiMDJiNWFmMGEKKworVFNUOiA0MTcKK1NLOiAgOGU4ZTFkYjViMTEwMmUyMmE5NWM0N2FmMzY2MTQ2OWYwMDBhMzNmMTNiOGI4N2IxMTVkMjQ1MmE0MTFmNmYzOQorUEs6ICA1NmQ3YjMxNjlhOTVjMjI5OThlYzkzNzkyNWJkN2NhZDEzY2M2NTgwOGNkNWQzNGE2YzRkYTg3MGVhZjMyMzY0CitNU0c6IGIyNDYzNGZiZGQxYjc2NjEzMTVkOWRjMTUzYmE5MGQ2NmE4ODYyMmE0MTU4ZjhiY2ZmMjViYTljMjllNjVmMjk3ZjhlNjAzMTE4MDBiNzMzMWI2OWZjMjBjOWY4NWJiN2MxODRiZDQwODZiM2E5ZjlhMjcxMDJiNjIzNjJiZGI0ZmE1YjIwMTU5NDI1MGZjNjI4ZmQyZTBlMGQxYmUwM2RjZjgxOGM2MDk0YzRjMjkxMjFjYjJiZjZkOTA4ZWQ4YWFiNDI3YzM3NzFjMGM5NWYwYWMxNDY5YTA4MTBiNjAzYTQ3MDI4MmU1OTgwYTYwNzI5MTk3ZmU2YzIwZWY2ODFjZDFiOTY5MzJkMjA1OGY4OTZlYTc0MTY0MjJhN2U1NDFmMjI0YTVmMDQyNTMwODA3NDFjNWQ0ZTNlYjAzOWRiNmJhMDUxYjRjYTU0MTdjZThhZmRjNzAyMTRiYTRkY2M4NWI2MjNkMTFlNjgxYzYwMDlhZWU0ZTYxMzBhODNlZGQwZDJjOTlmYjA2NDdlMTFlZGU3MzAxYWU1NmI1OTkwNGVmNzAyNTczMmNkZTAzODgwMWVjN2U4ZDkwYTlhMWJiYTA0N2ZlNjI4MzUxYjNiODlkMGJjNWFlNjY1YTcwMDg5MWYwOWViZWVjMDU1OTE4NDJhZGZjYzI1YWRjM2M3MWMxZWJjNGEzMTJlNTQ3MWJlNjcyNTNiMGU5NDI4YjBjYWUzNzY0NWEwZjdlY2I4OWRkNzlmYmQ5YmUyODc1NDMzNjY3YWUwN2Q3NGE3OTgzYzRjZWE2MDFlNzJlOTc1YzIxZGY5OTNlN2ZhMjJhOWZhYmQ0NTQ1NWQ0NWUzNzAzMTU1OGUxM2E3YTRmNWY0OTdlYTc4ZmI3Mzk5Zjg4MzhjMGZkNWRlNGViYjY2ZGIyOTBmNDNhNDg2N2Q1MDUzMDlmMWMxYmMyN2U5ZmFiY2JiYTcxMzAyZmMxMjA0NzE1Y2UzZmNiMDkwNWJmYTQxMWM5ZDFjOWFiNGEzOTk1NGU1MGI4ZTBjZjczNmMxMDI4OTU2M2JkZmE5Njc1NTNjMzZjZDllNTU1YmM4Y2M1NmJlNTk0ODQ3ZGU5ZjI2ZjkKK1NJRzogZjZlZTVlMTNjZmFhMzYyYzg5NzFkNWE0YTg3OWE3ZTM2OTY2NTI1Y2NkODZjNWE0OGNiYTA4ZDkxM2VjZTFhNzljNGNkMTQ2YjhlOWM2NTEyNWZiYWRmMTdiYWMxY2FiY2RlOGZkMTdjZmQ2OGZhMWY5YzQ0ZWE2MWMwOGE0MDUKKworVFNUOiA0MTgKK1NLOiAgMzg4NGI4Yjc5YWJmZDNiZTZjMTM5ODVlYjg1OWFiNzQzZjE1N2NkOWRlYjgxYjJmZTk3ZWE0ZDYxNzNlNDZmNQorUEs6ICBiZDdmZDlhOGRlZjEzYTU0MmVkMmYyZmIwNDg4ODY4ODViYTliNWNlNTljYjcwMTlmYjU0NjY3OTg2ZWViYzI2CitNU0c6IDEyYWRhZmUzMGVhZjJiOWM3MjAzY2E1ZDQ0Yjk3ZmZlZDRiZjY1MTdhNDk5ODhlNGU2NzZjOGUzMTRhZGJkYmUyM2Q4ZjJkM2UyYjA4MWE3MDI0ZmE1MjVhYjVhYWUyNmU2MDA1N2MxMDFlOGYzNjhkM2FkZGI5Mzc2YzQ2ODJjMWY0MjI0ZDdmMTQ5YTg0NzRiYjlhOGY2NjNlZjIxMGU5NTcyY2U4MjlkYTM4OGQ4YWFlNzJhNDY3MTQxYWRjMTUzNDczYmUzNjUzYmFhYTY0YjViMWUyZTMwNjgzZjZmMDZkYWMyNzg0ZDViYmYwZDA4MmFhYjQ3MzA1ZWQ4YThlZmQwODg2Y2U2M2ExNzkzMTUyMjVkMWU0ZDRmZmNmMWYyNGFjMmY0NjRjZjVlZDNhOGI2ZDM5OTg0NTRmMWMwMmNkYmYwYTQ0NGVlMmI1OWRkYmUwYTE3NGEwZDkzN2ZhNjI4NjUwODhhYzY0NzQ5OTk1N2QyODFjNjk0OTgwM2E1ZmJkZmRkMGRkOWU5MWI2OTc2ODYxZjNjNWYyMTI2ZjM5YWFjOTM1YmUwOWY0Yjk3MTViZDRmMGQ1YzU1ZGY3M2E2YjlmMmMwYWQyNmNlNDlkODIyYmY4NWJmYTIzNDZmMzE2NWIwMzg1OWE3MWMzZDJhN2I4NmRiNmU5ZjJlNWQ3YjE2OWE5MTBlZWI3ZWYzOGZiZGZiYmVjNDNhOWEyNWYwNGJjM2FjZmQzYjA2OTE1NDJhYjZkZTlkYjZmMDMwNThmOTU4NDAyNGY5OTE4ZWRlY2Q5MGZiYjg1NzM1ZDZkY2VjNWJkNTkzYWU2M2UyY2M5NjU1MzU5OWEzMTBmOGYyMDA5YmE5NTM3MTE5NmI0ZDViODBlNzU1OTYzN2YyMjkyNjc3OGJlNWUxY2NlZjUxMjZlMjQ0M2ZhOTM5YzJhNTNkZGRiMDQ5NjFlZWZkMzRlNTM4Y2Q4ZDdmMGJlYzJiZmYxZWYwZDNhNGJkZDM1ODMxNzYzN2Y0MmQ1OTU1MzhjMTEyMjI1MWE5NGU5NjNkMWY4MWU3YjlhZWIxNjRmOTVkYTlhNGVkNzUyOWI4NDVlYmM5NjFiMjdiNWMxOQorU0lHOiBmNDIwNmZjZDM0NTAyNDQxZDU0YTczMzIzZjMzYTVkYmI0Yzk4NTU3MzE5ZjIxMjQ2ZjI2MGZmYmJlNTg0NDg4NmRiNTY3ZjRiNjNjNDc5NDNkYmI3OGZjMzU2NTdkN2MwNGQ0ZmViMDQyZmY4NTM2ZjY3MjkyNWMzMTllZmIwOQorCitUU1Q6IDQxOQorU0s6ICBlY2Q1MTlmMjg3YWQzOTUwNTJiMGIzMGRlYWMzNDFkMmE5ZGYxM2Q2NTY3Yzg5MWM4MTNhMGM5Y2E1MmU4NzFlCitQSzogIDhlZTk0YzU4OGUwYjM0MzU4NWZjNjc0OGZkMWI1NGI1NzcwYzY0ZTk5MzdhNTYzNTdhNDhkNDRhZTJmNTE4MjQKK01TRzogYWE3MWJlNWY1NTdlMTBjOWZiNWYwOTFhM2EyNzQ0NTM5NDdjMDdhMGUyNWIyNmY5NTA5MjI0NTQxZGZmNzZmNGQ5NmVmZmQwZDVhNDFkMzE5YmM5MzIxYTg2NjY3ZDU1Y2Y0OTQzMmZiNWMzZTcxNTM4OGYzZjEwNmM5MTc0YjE2MTBjOGYzMDc1ZDU5MzFjMjkwMDk5Mzg1Y2U5MjQ5ZTIzNTEyOGU5MDdjNTMzOTAwMzZmYmY1ZGE5NjhmOGQwMTIzMzY5NThkZTkwYzVlOGU2YjEwMTZhZDQzZmI1N2M4ZTI4OGRhZmUxNGU5MGU2NGI2Mzc5MWU1Y2JlNTU3ZTAyZGY4YWM5MzcwNjQyYTcxZmFmODUxMDc1ZTU1NjVmNmY5YTI2N2Y0ZjZiNDU0Y2U0YzU0NzQ4MTBiODA0ODQ0ZGRhMzgzOTI5Mzk3MTk3OTMyNDZhYTQ3NDU0YjliMGU4MmU5ODAzYzA5OTM1ZDAwMjdmMzk5NWNjYTk3MTMwNjliYjMxMDI3ZjdiMmFmMTJmZTVmZWVjN2VlYjA2ODQzZDgyOTZlYzU2ODIyNjJhMDdkYWU3NDdlZDdiYzgyMWVjMTcwMThkODk5ZmQxNjdiMzZhN2UzNzczYjQyNzQ5OWQ5OWRjNTgzYmJlNGI0MjlhZmE2YTI2NTkzOTUzZjk0M2U0NjczYmRkMGQyYTg0NDI1NjEzMTYwM2NkMDkwMzI1NmYzMzRkNGY4ZWM4MmRlMTE1YjZjYTUzMzhjNzVjOGJhYTQ0YjRiYTk2M2M3Yzc4NTEwZDhkZTliMmE1ODUyZjQyZjM0NjNjNjg1ZmIzYTZkYTYxYThlMDg5MjY2MmQ2YTI1MGZjYWE2ZmVmNzRkNDUwZmM0NTdiOTg3MWQwOGJiNWJlMzAxMTI5NGFjODg4ZmNlMjE1ZDUzNWMzYjFhNDNiYjQ3ZWZlM2FkMjVkYTE1OTE5MWFlZDU1MTk1NDY5YzU5MDkzZmZiMjRmNjVkNjBjNDAyMGJmYmU2NDdmZjVkYjdhYjhhMDFkNWU0ODdiMGIxYjY0ZWYyNWRhMTU2ZGIxNDJlNmFkODcyYTRkYzFlZTliYTY2ODQ2NTI2NTM3OWUKK1NJRzogZThmNTFiZTczZmM0ZTAyMzVhYTE1M2EyZTFiMzU0ZTljNWQyZDMzYTExYWUwZTMzMzQ3OGRlMWQ4ZTZjNDQ1NmQyZTI1MDgyNGMzMjQ2Y2EwZThkNmFlM2UxNjY3N2E5NzM0NDE0NDEwOGMxM2I5NTllMWRhZjUxY2YwZmU1MDEKKworVFNUOiA0MjAKK1NLOiAgMTkzZjNjNjMwZjBjODU1YjUyOWYzNGE0NGU5NDQ5NzBmNGE2OTcyZTZjMzg1OTM1OWMyZTBjODc2MmJhOWVhZgorUEs6ICAzMjU2ZjJjODJlN2M4MDEyMDEyMTAxNDA1NjlmYWYxODUwN2U2MDMzOGMyY2M0MTE4YmIxY2U2MDViMGViZTYxCitNU0c6IDk4NjIzZjY1MTY5ODA4NWJkZTAyNzYyZThjMzMyMWYxNGRhMTYxOWI1YzNmN2MxYTU2OGU4YzI2ZmYwYzYyZmRjYzQxMjQ3NTkxMmViOGU4YzRiMGQzMDkxOGI4ZmZlZWYzNTA5MzE1ZTU4ZGEzNTljZGMyZjI2YmViZmI1NzAzOTUzYmUxNmI4ZjNiZWIxZTU0YTFhYmVlMGFlYmUyNGU2NGRiZTg3MzQwMmUxNTZmMzdkZmMxNjhlYWY4YTExNGNlMDhhNjc5NWQzZjY0ZjUxNTFlOWE4YjgyNzVjYzdiNDlhNmI4ZDhhNjZiNmQ0Yjc2MzJlZjgwNzQwZGMxYzFiMGEzOGQxYTI4ZjdjMWIyOWZhNDQ1NDFjMWFhZDM1NGQ0NTkwYzIzMWRhZTY4N2EyYThmZWQwOWU4YzFlYmJmY2MzOGYzNDdiZjA2ZDk0NTc3ZTQ5YWQxMzlmNzEwZWQ4YmIxZmQwNzY2M2MwMzIwODQ2ZmJiNDU1YWI4MzdlZjk2NGFlN2Q0ZWNlZWE0NWZkN2JkOGQ1MDlmODIxZTZlYjAyNzQ5NGVmZDhkZDhlOTkyYjg4Njk4ZWVjMmViYzVlMDMwMjViZTc4OWMxODAxM2YyMDFmNzdhYTJkMzRmNTY4NjQ2MGU0M2ZiNDg5ZTA4Nzc2Zjk4YmNkZTJjZWViOWQ0ZmFmZGZmZTAzNzU2MDQzNzFlYzMyZjQ2YjgxZmVjNDc0MzgyOTA4ZTlkMjUwYTBiYTI3ODBhN2Q2ZGY0MDdiZDJiMWViMTI2NzQ4ZDcyNTExYjliMDY5ZWIxY2Q0NDI3MGYyOWZlODRiOWE3MTc3NTE4MzFkMDRjMjgxOGU0MDhmMjI3ODkzNzZjNjFjMmNhNDVlMzJlNzg4ZWFkM2E3NTM2YmYwOWRhOGFmNDcwMzkwMmY1NTE2YTAyMGQ4OTI2M2U5MzcwMWEyNTY1ZWVmMTI3MDQxODkyNWYzNWEyODhlMzI3YmFiNjI4YWMyZjAyNDhjZmJjYTM0ODJlMjY1ZDE2MjFjYzM0M2MzMWY2NTQ5M2YwNjRiYWQwZDc2MDI0NjA3MTVmYTQ4NmYyOTQyNjM0NmFmNTNlMzMzYjc1ZjU5MDUKK1NJRzogYjEyNTEwYWM1ZjJmNmQzMzM2MGNkZGM2NzI5MWQ2YzI3MGZkOWVlNjJkYzA4NmIzOGQ5MzJkMjY0NzNmZTlhMjRlZmJkNDI0ODg2N2VhN2U5MTVhMzBjNWJmYjNiOGIxOWFhMDFhYTJmZWJmMGRhYzZjZmQ2NjM4YTJiYTdlMGMKKworVFNUOiA0MjEKK1NLOiAgYTg4YWQwMDQ4ZDM4YzQ0Y2ViZTczNWVhMzgwMmNhNTc2ZTM3MTIxYzdkNGQ3NjBkZmQ4OGRlMTY2MzA2NGFiYgorUEs6ICAxNGRkOGJiMzA2ODAzZTVhNzU4ZWQ2OGFkMjFkMDdkODgxNjFkNTBmMWM3NDcxMzc3N2RhMTIwOWFmYmFlYTBiCitNU0c6IDJjZThiY2EyNjE3ODkxM2IxNjc2ZTkwZmZlZmQ5NDViYzU2MTk4MjY2MGUyYTc1ZDQ4MmZmMzBhYWJhMWJhNDNmODJkMmU2YjkwOWVjMTBmYzA5Nzg5ZmY1Y2YzMmE1MTgwYjYwMWVhODBmYWRlY2U2ZDdlN2JhZWVmNDgxZGM2OTc5ZTJmNjU4YWUwZjZkOGU0MTZiOTMyOThmN2QzNDAzMWJiNzZmNzE2ZWQ5OTFhMTZkMDlhNTgyZTU4YmE0MDAzYWMxN2JlOGI0NDY5ZTFhODg5YjJmYmIyMjg5ZTk4YWYxYzZkNWJiZWU3Nzc1NjcxM2MwNzc4YjBkYzQ0NmExZjZjNDhjNGQ0MDgxOGVjNzk5OTA1ZjA2OWJjOTUzNDE2NTdjYTVkMDJiN2E1MzlhMTNhMDJjZDAzNzZhNTBlODM0M2MwZGMyMDM0NmRlNTI3NWIxZGNkNGFkN2FmNzI1MTMxYWM3NWU5NTQ4MjVkMzBlYWE1N2E2OGJiOThkZmM0MWNhZmU1NzEwNTU2NjQ3YjM4N2Q5YjdmZDRlNDc2NTFlNTEzODA1MDc5OGY2ZDQwZjRlZTcxMjBiNThmNzRkYTk0ZDczY2FjYmZkMzkzZDEzNDczODhlZTAwYjc5YjhkYmZlYjU3ODE0MTIxYmRkYTYwYzYyN2RjZTE0N2Q0ZDU2OGQ3OTA1MmU5N2I5YTVmM2ViNTQwN2NjNDY0NjFhNTVlMThhOTYwZDgwOTRhNWZlYTQ4YjY5Mzc1MjljYzRlYzkxOWNkYmVkZjkxODU0NTZkYzAwZThkOThhZDE1MzdlZTEwYTA1N2Y0ZWVjNGI4MWRjNjAzOTJmYzkxODhkM2U1NjE3ODU5NjUwOTJlNDQzMTdmMmE0OGUzNjYwNWZjNTgzZmMxNzNiMDVkYjlkY2JjNzU1N2QwNjQ4NzM5MGZiYmJhNzdhZjNhMDE0ZTFhYzM1MTM5Y2FhMWM1M2E4ZDE3MzQ3ZjE3OGUxYzU0ZDBmNTJiNDBlOTEwNDJjOTNlN2U0ODFkNzkyZTI4OGZjMjdlNGMyZmNmMTExZmU5N2Q5ZTIzMzdkMmZjMWMzMDk4ZjA2Njg0YTMxZDU1ZWJmMzYyYzAyNworU0lHOiAxMzQxYTE0OGRhNDU5M2M4OGViYzVhNTg4MjFlZWY3N2Y5MjE4NjM5MGZmNjMzZTc2MjA3MDg0ZTc4NzRjY2YwZWIxZjllYzcwYTNhM2Y5NmI1ODkzNGJjYjA2MWZmOTIwMTI0ZjdlNTgwZmEyYjBiMjc5NTgzYWRmOTIzMmQwYworCitUU1Q6IDQyMgorU0s6ICAzZjU5ZDZhMDE4ZjUwYTgyMjExN2U1YjQ3MzYwOWUzMGNkNjQ5MjBjYTFjMjc1MGRjYjA5ZWFhYjgwN2EzZWFjCitQSzogIDQ1N2QwZTU5YzExZjM0OGYzYmZiZGQzZjMyN2RlNzhjMGE3NTc3YzBhZWVmNDJkNGMxZTU2NzAwZDEwODgwOGIKK01TRzogN2QxMDNhNmM2YmEyZDA5MDg3ZWVmMjI1NGMxYzkwM2YwNjc2OTVhNTRjNDUxNWU0ZDEzYmMxZmJmYjU0ZDZlN2ExNjczNDljMTQ4MDk5NzZkYTA0YTdlNThkOTZiNDBhYWMzYjJiZGQxNGI5YjUwMzIyYmIxMTY0NWYwNWU1ZTk3OGJjN2ZiZDAyNDkyZWY4OGY4N2Q2NjgyODBmZDcwODM3MzIwN2ZmNjcwZmNkYTk3ZGY4NDg1ZDVlNDZkYzNiZDA0MzQ3ZjRkNzUyN2VhYjI3MThmN2Q5M2QxMzJiYTc3NTgyMTg4OTRlNzVhN2RlYWJlNjkzMzM1YmEwZGM3M2JmMjZjMjg4YmZlOWJlOGE3MzZkNzVlNWUwZWFhN2JiZThkMGI3N2FiZGQ1MTQ2ZTBmYzliMzBkYjlmMDdjZjRiZjM2MjYwYTFmNDE0MTAzMzFmOGI0N2M2YjM4MzM4YzZkYzllODAxZmZlMWQ1ODVmOWI3ZmMzMWU5Nzc4YmNhMzAyN2MyMzJjMDc0Y2IxOGU1YjcyOTk3MDA1ZmZlZWU0YmYzN2M4Zjg3NGIxYjI0NmE2MzQ1NDE1ZGFjYWNhNzA3NWE2MDQ0M2FjMzMxOTIzNmUyM2NmNmI3NTQ0NzQwODA3MDUyMTE0OTg0YjhkOGY3ZTg1N2RjYzZmYWVjODg2OWNmOTZiOTk3ZGZhOWFmOTE4NGFkNjIzZjFkOTBiOGNhNzU5YjQ0OGVhYmZjZTE4YzE3Y2ZkZjlhM2UzMzEyZTYzZTVmMDg0Y2VhOTA0YzFjOTA5OTEzY2M0YjE5ZDA0NGEzNzIwMDM0OTczYzczODQ5NDliZDZmOWJhOTI1NmY5OGNkMzk0YzU2NmRhODNjMzExODAxMDlmMTZkMTAzNDdiN2UzZTlkZDZiZTNiZDNjNzdmZjFhNzk5NmEwNzhkY2Y4OWRjZGNlMmQxYjYxNTY5NWY0Y2M5ZjhmNGYyYTA4ODA0NjQxYmNhODI2NjJjZTg4ZmFhNTMxNDViNmE0NTk1NWFlYzhjYzJhZjgxY2NjYjVkN2M2NGY5ZWNlMWM5OTgzMzI2NDg0YTFlNWVjZTRjZTM2NTQ0ZDYzNzM1Zjc3NzZmMjFhMjAKK1NJRzogZDc0MjVlYTE5NGE2NzE1YzQ1MmVjNGY2ZDZjNzZlNmRkMzc0ZDNjYTdhZTdhMTE5OTVkMDJiOTQyZDRhMzE4NzBkZDczNGMxMmZjYTg5YThlYjAyMTNlYjEzOWMxNGE4N2E2YTMzZTgxODYwM2IyZTMxMzAyM2ZhNTg3MzdkMGUKKworVFNUOiA0MjMKK1NLOiAgYTEyMTJiMzRkYmNhNjNiNzA5MzYxMmQwNWRhYjdiNGNjOGY3YjY3NmE5MzRhZDAxZjY1OTg1MWIzYmI0NGU0ZQorUEs6ICBiYTJmY2NlYTlhMDgwNTkxYmU3MTI2OGQ3ZTk1MWYyNTBkZWRjMDA0MTZlNWYzZjkwOGRiNmNjNTcxMjU0OTI1CitNU0c6IDA3YzM3YzQ2YmUzYzY4ZDA1Njg5NTc3YWE2NGE5MzJiOTA2NDQ2YjI5YmFmMTJmNjE3NGE2YjQyYmJhZWZkMWYxZjM3M2UwYmNjYzQ3M2RkZmNlZTFhN2YyMWI5NmE2MjYwZWYwYWExZjJkOGIyOTU5ZTcxZDEyYzk1MzM1OGEyNzc0Y2M1ZTZmMzc5YTMxM2U0MzVlZDY5ZGZkNmQ0YTU5YWRlZTNjYzdlYzRiYWNiZGJiM2ZlZTU0MzBiNzNmNjA1MWE2MDk2YzYwZTliYzkyY2M4ZmEwNTlmYWMyYTkzZWY3MDA3ZDY0ZmJlNTAwNjQ5NjRkNWEwYWQ2MDExNzVjZDljYWJhNDUzZjkxMDNiMjU0ODU1NDVkMzAxZjAzYzVmOWY5NDc4YmRmOWQ0MTRiZjFkY2EzYjFjMWQ5ZGFhOTk3MWY5ZTYxN2ZiZmFmNWIwMmE3ZmJkNWQ0ZmI4OTRjMDk3NWM1NDU5MmI0OWEwZmM4NWRkMDg1M2YzMGM1MTUwMmQ5OGZjMWFiODVhMTdjYzU4OTYxYWFlOTc2NDU3MGJhNWNiZGJjOTZkZmNlYjhkMTFkYTUzMzY0YjQwMjVmZTBiOGJhOGEzNTNhZDIzNjg2NzIwMTY5ZmU5NzM0MzJmZmUyOTFhNGIxMWRlZGRhMGFhYzc5YTVlNDI2MjBhNjQ1ODdkMjA1OWU3ODcwMTNiNDBjZWVjNTk5MjA4ZjY2ZWQwY2E2ZTFiZTkwOTJlYzI3ZGIyMTZlZTZkYWRmZWJjMjE3MDViYzRhODVhZWU1NzdlNTdkMjM5YWY1ODZlZmVlYzIyY2YzOGQxY2ZiM2NkNzRkZDBkOWEzMzgxYWE4MWU2YTI5N2UzOWI4MTkxMzdhZDI3ZDQ3NWUyYmY1NGFhNDI2ZGMyOWM0Y2E4MTc2ZGYzNDMxMzdhMmQ3OWQxMmVmOWFhN2JlMWNmNjc3NWU1ZDhhNDQzMGE4NWMzM2RiNjFjZDJmMzUxODdiNGY2ZWE5ZWJkZDc1M2QxYzRlZjcyNDcxMTU5ZmYwN2I3Nzg3MDkwNjQ5NjI0OWQ0Mjc4ZTNmM2NhNmJjYmYzN2EyNjViODk2NTM5MTkwZjlhMzFmMWU3YjRiNjVjZDEKK1NJRzogZmE5M2VkNjU5NWJjOTU4ZGMwNDJjZTE2NDUxNjdiNzllOGY2NzM0YzQ2ZjgwZjYzMWZkNTQ4NDkwOGY1ZTUxYTIyNDI3ZWU2ODZmNTY0ZmY5ODJmNmVmNGQyY2ExZjBjYTU2MjQ5MTBjZGQ2M2MxMWEzYzJiMTZkNDA5NzNjMDcKKworVFNUOiA0MjQKK1NLOiAgZDk2ODIwODZmZTdkZGEzMGI4NzExMTA2MDE5M2Q4NDc1NjZhYjk0Y2ZkOWM5N2FiNmI0M2U3YThkM2Y3OTM4MgorUEs6ICA4YjBiMTM3MmQ4ODczM2VmNzIzM2Y2Mzc5NzkwZDFlNDZlMWUwN2U5ZDNmYjhiMGJlMjUyZWQwNGM1ZmExNjNkCitNU0c6IGU4ODE0YmUxMjRiZTNjNjNjYzlhZGIwM2FmNDkzZDQ0MmZmMjBkOGIyMDBiMjBjZDI0OTM2N2Y0MTdmOWE5ZDg5M2ZiYmJlODVhNjQyYmUyNzAxZDFkMWIzY2Q0OGE4NWNmNThmMTU5YTE5NzI3MzE0M2E1NzhmNDJlOGJjYzhiNjI0MGY5MzI3MTkwMDUzOGZmYzE4N2MwYWZjOGRiY2M0OTJiY2Q2NzliYWFlZjNhZjUwODg0MzRhOTQ1ODZmOTRiNDk5NzBiYmExOGY1ZWEwZWJmMGQyN2VlNDgyYWE4M2FkMGRkMGVlNjA5ZGY1OWQzN2Y4MThiMmM4ZDdjMTVmMGY2ZjU0NGRkNGM3ZTdjYjNhMTY3MjQzMjRmNzdkNTg5NDhmODQ3NWE2MGQ1M2U1YmQ1MTBjMTcxMzdjOTllMWNmYTUxNWFmOWJjODU1NjlkMjEyYTIxMTkwNzI5ZjI4MTdkZThjNDY5MTVlMDIxZGY3MGZmNmQ2MDIxNWY2MTRmYzIxMTM5OTA0ZGYzYjI5MmI3NDlkYzRkZWEwMjUxOGI2MmQxNTg2MmM5MmQyYTRjOTk2NzAxY2RlY2FlZDg0YWI2MjhlZTk4NGZjMTExZWVjYjU5ZTQ4NDQ0ZWZjMGQ0NTZlMmM4NTI1MTg0NDFjM2RiNzYzMGRkZDUxNTYyNDlhMjg3MzA5ODM4MzhhZTU5YWM0Y2M3MTEwZmQ2ZGU2ODEwMWVhNWIyZmY2OWZkMzY0ZTNjOTQ0OGRlZmVmZTE3NWJjYmUxMTdjYzExYjRmZjc1NDljMzNlMTAyNWI2YjU5MjA0OGE4ZTMxOTY5ZTgxOGRjYzE4OGJiMTlkN2EyNDQwYTNiYWJhNGViMWI4MWM0NTY3OWRiNDZiMzFiY2RlNzc3Njc1N2Q5OTMxZWMyMDYzZmM2ZjFmY2Q3NjFlY2M1N2E3ZDAzMGE4NWVhMjczZWYxODI1YjA1MDkyYWI5NjQ1MzU5YTQ0NGZmN2QxNjZiNTc1ZmFjMjk4MzA4ZDlmYWE2ODQ2M2QxZDBmN2I3ZGY4YTUxYzY4MTVkMzcxNTlhZGMwYjU5MzIyNGE4MTgzMjFkNzIxOWYwOTY4NmNmYzk1MjI1OTcxOGRmYworU0lHOiAxNzkzZTQ5N2ViNTIxY2E3NGUzNWQxNGE2Mzg2OGNiZTk0OTlkYTJmMjFiNGViNTI2MDM0MGZjYTNjMWZlY2E3OGRiZTViMTRhYzEwZjNmYTc2ZmEyZTcxZTRjOTE0NjFhYTc1OTc3ZTVlNzA3OTI2NzBlZjdmZjBlNmEyODcwOAorCitUU1Q6IDQyNQorU0s6ICBiNTJiMjQ5YTdhZWFlMGZiZDk0ZmZjZjlhOWZkZTEwZGU2MWMzZjRjYmRhMTRiMjg5ZmUwMWY4MjcwNzMzNGNhCitQSzogIDczNTE2M2JmY2ZkNTRmOWQzNTJlMWMyZjNjMDE3MGM5NWMxODQyY2NjNzQyMTYyM2FlMDQ5Njk4MGNlZTc5MWMKK01TRzogMWQ0NDVlOGVlMzZmNmUxMDY0ZWUxMjgxZTZiNGE0Y2VjNTBhOTFjMmI2NjdjODMwNWQxZTlhNWY3YjczYTM0NDU4ODI1ODFmYjBjMTFlNjRmNmVlOTJlODExZjlmMmQ2YzU5YzYzNDRiZTc2OTFkMTE2ZGRhNDkzY2FkZTUxYzBjZTc3MzcyYjYxYTdjNGZiYjYzMzQwMTMzM2NiZjcxMzcyYWQyZjA0NGU5OTJhYzAzNWY1ODc5YzA1MzAwNGY4MjIzZjIzN2EyNGE0MDliNzg5NGY2YWQ1MThlMDQ2YjhhODRjM2Y0YzYyNjBlNjE2OWZkOTQ0ZDU3ZmJjZjliYTI3NzVmMmQ2MGVkNzcyYzQ2Y2NkNjNjODUwYjgwZDU4N2M1MjA4ZGZiMWEyNTg3OGMwMmRlY2UzZTYwMmU5NjMyZmMzYzJjNzliMjVhYjQxMDM0YzZlMjZiODY5MjU1MzU3YTY4Njc4MWRmZTZlNjQ0YmViYTliNjI3ZGExZmNiNWVjMGJlNDk3Y2YxODhlMWVmMWFmMDYwMWJmMTZiMjkxMWZkOWZmMzRmMGU5N2FjOTVhN2ZlMmNmOTBlYTZjZWQzM2NjYjBlZDFlZjJkNDE2MGVmYjA3YzU5MWE1Y2IxNmM3MGNhMTY5NGZiMzZmMmNhMTllYmE1MmJlM2Q0YWQ4OTVhYmNhZGE0YjM2ZjAyNjFkNjVmNTllMGNmZDJhNjE0OGE4ODkyZGRiYjQ1ODEwZGIzYmY0YTllMjZlOTJjMTVlYTI2MThjZmVlYjQ2MmQ4NjI4ZjI1NGY1NGQyYWYyNzExM2JhYjRmOWE3ZDA2NzkxODExOTQyYmRjMzJmODQ1OTIyZDdiMmRkYmE5NTkxNDA5MjhmOGMyOGQ5OGI0NGUxZDE5Yjk3ZmQzOWNjMGY5YTUyMzZkMzQ5ZmM4MzVhYzQ5MjE5MjQ2MmU0MGFjNjI5YmViZmZkMmViYTcyZDI3ODhiMjQ0YmI3NzdhZDBmN2I3Zjk2ZjIzNDEyMzk5ZmMxZDg3YTFkMDg3YmEwODkwMjdlYWJiYzA1ZWRhZmVlNDMzNzllODkzMjkxMzMxYjQ2MGJmYTczMzJlMDg0MmVjMjU3MzM5M2RlOTUzMDYKK1NJRzogNmY0OGE5ZjdmMGZhMTkyYjY2ZDEyMTc1YTMzMzYxMjMwM2UxODBiOWZhYjE4ZWRhYmViY2RmNjY3NGZkZmNjNTM2MDcwODliZjk4MGNlMzU4OTRjMmY5YmFiZGM0NDM4NjY3YWIzMjk3YTYyNDhlYzAyNjlmYWE5OWM3MjQ4MDcKKworVFNUOiA0MjYKK1NLOiAgNzgyYTkzZWZlMGVmMDZjYjI1MzQzMzBlZmQwZTk2ODRlOTk2OWI1MjU4MTIzZTQ5MDIzOWJmMjRiZjlmNjUyMworUEs6ICA5NDJmYTE0MDZlZTI2ODNlMjkzNzdlNDlmN2JhNzU3Y2Y1MGVmMDcyMzcwN2Q0NDAzZDI4NjIyNTcwNDVkZTg3CitNU0c6IDQ2YTRlMzE5YTY3MGFjOTkzOTk0YTUzMzAwYzNmNzkxNDRjMmY3ZmVjMTExNmVlZWIzNjIxYzc2YWMzNWRhNzlkYmZmNmUxODljYTlkYmZjOWFiYmRhMDU0ODQ3YjI5NzFiMDJmYWNlYmJlOTI2ZDQ2OWViMGE4NjAzODlhYzc0NDE2MmJmNmZiMTNiNDJjYjliYjhjOWQ3MjYwNzEzOGU3ODAwMTIxZWUwY2Q2MzNlZDUzNWM3YWU1ZjQwNjBiYmRkMjcxYzlkMTEwYWJmZjVlMDYwZWE2ZWU4Mzg5MGIxZTkyYTkyNTZkN2IyYmE5ODJhMzExNGJiNmRlZmZlZTI2OTZmMGEyZjljMjFhYWE1YjJkZWZhMTFhYWI3MDc2ZGU2ZTU3ZTg2ZjI4NGJiNjdmNWE0OWVlNjg1OTIxMDMyYzk1Yjc0ZTdlM2VhYzcyM2YxNzVhZjA4MmM4NThlMGRmYTAxNzI4YzM4ZmJiYjRjODM1ODFmODFhY2U2YzYzYzZiZGFhYzU2MjBlYjlhNTY4ZTdlYmI3YjcyYjNkMWExNjRlZjUyNGU3YjlmMDA3OTlhYjA4NjcxNTk3NmMxNGQwZGY2NWY3Yjk2YmY5ZWJjZGE3ZmVlZWYxMTM0MjIwMDFhMDNhNzYzM2RmNWU0OTkzOWExMjFkYjg5OWQ5YjhhYzJkYjRmYWQwYzMwY2YwYjhiZGJjOWU5ODAyYTc5N2M4MjM4ZTQ2NTExZmYyNDA2OGNhZGNmZjI0NDhjYzBiZmY5Mjc2OTIyMzM0OGQ0NWQ2YjZmMmM4ZjE1OTMzODhjMGJiYmY0NGI2ZGRiNTBiOThjZDdmMDljNzMwZjdkZTRkMDA4MTU2Y2IzY2RlMGNhYjNhZDBhNThhODM5NTRlMjM0YTBhOGEwNGI1NzNjOWE4ZTliOTI5ZWQzOGI4YjIyOGJmNTVhM2M2ZTJjNmI1MWY2ODI2NTJmYmI3MDhlNzQ2NDBlMzMxM2UxN2I0Njk0ZDdmZGYwMTExZjkwNjA4YzFiNWFmNDIyZGNkZWNhZDlkZGI3ZjUwZDFiZjViYzYzNzhjY2FmZmMzMjAxZTZjNzg3YjQ4YzQ0M2JhMjQwZDlkNTBmZjZjMGU5ZGY3ZjFhNWIKK1NJRzogOTNlNzQwNWE0MDQ0NTEwMTY2YzhhYzI2NGNlM2I1YmE2NjY1ZDY4YmFkNDU4NzEyZGM5M2MyYzM5MDU2OGQ3NDAyZWY3ZDU3ZjU0OWI4YTEwNDJmN2Y2OWE2NzlhYTg1NWYzNGY4MDFkNTdkNzk4OTVkZWI4ZGVhZGIzNTIzMDgKKworVFNUOiA0MjcKK1NLOiAgNmZlN2JjZjdhNjg0NDIzZGUxMDc2ZmQ3NmRhNzgzNDIzMzczYjM4MTMyOWVmZDYxNTc0MjRlYzRiMjY1NWE5NAorUEs6ICA3NzQwZTkxYWZlNDUzMjRmOGJiOTkwY2EyYTM0MTI3OWRkYWYyMzJjM2JiNDE1ZjE3OGI2MDkyZmJhMTk1ZmVjCitNU0c6IDBiYWYwYWQ0NDA2MTJiNGM1YTEzNmMzYTQyYmUxY2EyYjdjMzE5ODYyYTQ0YTlmZDUwYzRlZTczNTQxYzVlNjQ1N2VmYTgxODI1YjZkZDRhNzIxOTRhMjk2ODY4OGJkNDllNWE4ZjRjMDRkYmFmYzJlNzg4NGMwYzcwYzIwOGQ0ZTk1NGNkMTY3NWRhOGU3NGM2NWM0OTdjZjlkYzY5NDI0OTY1YmRjYmE1ZGU1MjkzNmY5MjVmNjJlMjAxZjk5NTA1ZDM3NzdiZWIzYzJlMDhiMmVjOWE4NzNlNWE5YzIxZmI0YTJmM2U4NjFmM2NmNGQ2YjVkY2QxYzg4YmNkOTE2MzUzOWFjNjJjZDA2NTlmNGVmMjMyYzJjZTU3ZmM3N2Y5MDI4NWViMzUwMTY5ZWRjNmE4MDZmZjUwZjYxYzdlMGJlZWViZWNlYzYzYmZjOWQzOTgzZjViYjRiMjYxYzc0NjQ3MWZjYmYyODkyYzYxMDg5NzBiNjhkYjVlNDNjNDUwNGRkYWUyZDBmZmZmYTI4YjY3NTlhZTExMjhlMTZmNjZkNDkyYWQ2MWUzNzIyYzk2MGY4ODY5MmJlODFhOWY0MTI4OTBmZmEzNDZlNzAyYzg2N2RmYTI1OTcwM2I3M2Y1MjUwNzRmMzIyN2M0OWNlYzFiNjQ1YTEwM2JkNDQ3MWYzM2Y5ZjFiYWMzMjdkNzkxNzg2MWQwYWQ5MWFiZWU2MDIyMmVhMmEzYzhjYWMwNTJhZTlhMmNiZDkwODU1ZDczM2Q1MzE5MTMzZjk1NDFiZDBiNjFmMDk5NTI2ODM1MWUyODYzYzFjYTJjYTUxZTNjOTc2MzgzZjVjNGMxMWZmNDEwMDM2ZmQ1MWQ1YWM1NmIwMjNjZTkwMjljNjIwZjIyNTU3MDE5YWQ5YjQyNjRlZDRkNzFiNDM0ZjRhNGQxN2E3ZDU3NjlmYTFlMTRhNjlmN2FlNDE5Y2NmNTk0N2Y4Yzc2ODI2OTcxMTZjMjQwNWY1YTE5NTljNTRiNDhmMDg3MmY1OTZlZDQ1OTY0NDg4ZGRlYzEyYmRiNjM2ZDBiMzQ5ZTc0OWViNjYwOTJmZjQ1MTFmYmE1OWI1OTYyY2I5M2NjODU1MTVjYzg2YWIwYzZiMgorU0lHOiA5OTE0Y2M1MGZlZjA5MzVlZmI4OWIzZDY0ZTNjMWMzNDEyYWVkNjU5YjkwMTY2MjIyYzBkMTNlYzFjZTNhNjhhZTYyODFiN2VmZDlkNGVjNjRiODJlNzNlMTQ0NzlmMDNmYmFjOGZhM2FiZGI0MWVhNDIxNWM0YTRkNDk0OWQwOQorCitUU1Q6IDQyOAorU0s6ICBkZGE0OGEwZDE1YTI5ZWJhOWE3NjMwNWQzNjBlNDY2ZTcyZDgwNDBlZmUyZTg5YzA0YjY0NjEzMTVhOWI4YmY0CitQSzogIDRmNWNjMzZhODA5NDE2YjU4ZTE1ZDI0Y2M1Nzk2OGNiNTczYjc2YWQ5MDg4N2E4ZWYzNmNkZTdlY2E0MDBmY2MKK01TRzogZjVhYzE5YjgxZjIxMTFhMGRiMGFlMzBkMTUxM2VkMzQzZTdmNTdmN2Y3N2Q2NWI4YWM3Y2UzYTYwMTE3NGJhZWQ5YmZhMTM2MDM1OTc2ZjUxNmQ1YTg3MGY0NWRiMTkxOWYxZWIxY2JlY2JlODhlYzMyZDE5MWU5MjQ4ODIxYTdlNzY4MWZlM2FiZWMxMTU4NGJkYjMzZGUxYjRjYTk0ODkxZWI2NmRjYjg1MzlhYzQxMTYzNzM2Y2NmZDY5YWJiODM4MTRkZDM4Y2Q2MDM4MTMxODcyODA1MmEyNWNiNjY1NDcxMDU4NjUwY2NjNzU3NTZkYmVlNjg4YWI4MjZlY2FkNGFkNWE3ZGI1N2U4ZjY1ZjFiNjRhYmZmODJkZDUzMzM0Yjc5N2FjNDAyMjhkZDgxN2YyMzlkM2VlODA0YTE5YWVhYzhjZmUzM2ViNjU3ZWM5Y2U5MjNkNmIzODg5MTRjZmJhMmU3MmJmYzJiYzNkNmY5ODVjMGQ5NzUzNGRiOTU4ZWVkZTU3YjE2NDkxZmZiNzU1YzFhNThkNzhhYjM3N2ZhZWMwZDMxMTgxOGU4OTkyNjBlM2ViZDFjY2QyOTI0NmZhODJkMGI3NjYyMmIyYzRiYzUyZjU0OWZlZTcyYTMwZjU1NGYzMzFmMzZkMmE3NGQ5OTllYzEwYTA4Mjk0ZjAwMmI0MzYxZTU5MDI3OWMyZmIxYmRhNDMxMmNjYjI0ZDc1MjgyY2U3YzA2MWEwY2E1NTIwYzc0ZjZmNjMzM2IxOGM0YjU0MWNiNmM1MWUwMTU3NWJhODA1MTJmZmE3Y2UwYWNjZDIyZDE0MDI3YzUzYWJhMWY3NDM3ODM1ZjExMTRkNjhlM2FjZjNmZjhkZTk0YzhlNGVmNmQzYWIzMTJjOTFkMDI5NzAxNTc1MDhmNTRhNTgxNmY0NjdhMjE0ZTliMTI4NDMwMDI4OWU2NWYzNjVhNjEwYThlYTI4NDY2NmNmZTU1MThlNDM1YmNjZDIxNjI3NTAxYzcyNWYwYjhlYjU3MjVlMGUwNmUwY2VmNWRiMjAxYjQ4ZWM5MWViZjg3OGRkNTdjZThkYWM3MzM0ODQ4YTFiYzgyYzE4YjA2NTk1NWU0ZjU5YmUzMzk4NTk0ZGMKK1NJRzogY2U3MWJjODJkNTMxZDBmOTNiNTdiZmRjMmY3MzE2Y2Y0MDRlZTA5YWY4OGYzM2JmODA2YzdjYWQ2YjhmZmEzNjYyMzZiYTc0ZTc1YzE1MDk2ZGRhYTZlM2E2MmE4ZjVlYjFjOGMzZjZiNmM5NGE2YTM0OWZjN2MwY2JmYjE5MGQKKworVFNUOiA0MjkKK1NLOiAgZWM1N2I5NDFhZGYzY2ExM2U3N2E3ODA1NzdjZmQwZGY1YjQ5ZWRjODUzNTEwNTJkYTM0ZTk5ZjhhOWJmMzIwOAorUEs6ICAyODU5YzA3MTk3OGEwNGI3ZjU0MDdiNmQyMjQwMWE3OGVmZDAzOTRiYjk2NmI5YTA0ZGE2YjVlZjgxOWRlM2ZhCitNU0c6IGQyYmNiZDFiYzM2MWFiMzJjNjZkNzJmZDQ4YThlMjI3ZGM2YjhkNmIxNTA4NDhiYTcxNWZmNDdkZDM1YzhlNDkzODFiYjRlMjkzM2Y0MmNkMjZiNzViMTRkOWMwMDM5MjgyYjYyYjg1NTZhYWExMWNkNjkxZTgyODM4MmJlMzA2ODg5ZmM5MjA1MTM3YjE2OWQzYmYxN2I3ZjM3NjkzZmNlMjg2MDM5ZjAzODA5ZDdkOWQ5OGM4ZmRlNDZmMTEwMTk0MmEyNzljNTE2NzA2ZjUwMTkxYTkxMTJmNmEyNDYzMGUxYTI2YzMyMWU0NmM5Y2NjODViNmVmOTQyZjM1M2E2NDJiOWU3ZWY5OThjMGZjZTJkM2E3NWI5OTllZWI3N2YzMWY5YjA4MTNhOTdlMzAxNGMzYTg2ZTI1NTg3MzQ2MjFhMzA2NmRhZTM1ODQ1MDMxZTM1NjY1ZjE5MjI5MDdkYmI3Mzk3ODZhOGI3NjU4YWI2MDI3NmYyZDkyMWQxYTUxMjMwZmM3NGQxOWU4MDE4NGE0ZjEwZTllODM0YWJjOWEzNmM0Mjk3MjZiYzA1NWRjOGMwNjNmMGVjYTljNjFhOGE5NzBiZDRiYjVmNDI0ZWU0ZDA0YmZjMjk1ZTNiYjFmMzRiZWNiZDk5MjBmZTJlNzdmY2YzNjc2M2YzMmZjOWNmZDVlNDY1OTc5YzE2N2NhYmY1YTEyNDRiNDkxZmMwNmI4OTQ2NDE5MDQ2YmE1MTZjNWIyMzNjNDE0ZGRlZmI2ZGEwNGYyZTEzZGFmZjdhOWEwYzAyYTUxOGVkZTU3YWQ5NTIxZGU2NGVkZGY2ZjQ5YTk2NzBmNjMyZDNmN2Q0MjQyNTIwN2QwNTM2MDRmZTM5ZDEzYjlmNTJjOGJjMjkyYjAwNzZlYTQyYTU2MDA1NmRmMjVkZTUxYWQzNTg4MWQwODU0MzIyNGQ3ZmE1ZDcwYjg2MDNlZjIzY2UwNjMzOWQ2Y2QwOWUyMmE5NTc0OWU1MGRmYmQzYjhhZDY5ZmQzMDQ5NmI5ODRkMWMwYTE5OWM4NTk0ODA1ZjM4YmE0NDYzMWEyYzU5ZWFkYzY1NTRkMTlmOWJjOTgzNjZkZmRlYzJhMTIxZDBlNDgxNGQyY2QzZjU4NzEKK1NJRzogMTE4ZTE0NjIxMjZiNDViOGM2ODAzNTIzNzU1YzU2ZGZjNGUxMjNlNGFjYmI2NmJhMGJhNmZlM2UwNTNkYTQxMTlmNTcxOTI5NWUwYzgyYWM2NGQ3YzVjYjFhYzg5OGRmMjYzZGRmZDM2MGYzMDA4ZDkxMDE4YjI2ZjZhMTczMGEKKworVFNUOiA0MzAKK1NLOiAgY2JmZDkxZDc2OTVjMWYyNzBmNjkyNDZhYjNkZjkwZWRiMjE0MDExMDFjYTdmOGYyNmM2ZDAwZjRkY2I3MjMzZQorUEs6ICA1MTM4NzljZjc5ZDJmNDZkZjRiODVhNWMwOTQ5ZWIyMTE2YWJmOTgxNzM1YTMwMzE2NGNiZDg1YWRmMjBiNzUyCitNU0c6IDI2NGE5MzNmN2QwYWVjYmFjMTNlZWY2NDRiMGI1M2RkNTNhMTI4MDkwNDEwMGRiYzFhYjg3YjUxMTQ4OTk4ZjlkYTBiM2EwYTYzMzdmNWUzNDg2YzJiN2U1NDhkMjExMjU5Mzk3YWFhMTk0ZWU0Njk1YmY5OGMyZDVmNDQ4NzY5OWY3Mzk3ZTVkM2E3ZTZkNWY2MjhmYmQwNTQ5N2M1NTZhNTBhNGQwNWUyYjcxMmNkYmMzNTEwNjhlNDJhZjE5NTM4OTAxYjg4MjUzMTBlMzQzZTFhMTdhMTg2N2RkZTBlYjQ3ZGRhYjQ1NmQzMTZmMzUyMTU1NDkzN2JmODA4YWU0ZTRiYzFjM2M1YjQ3NTZlNGExNjVhZDllODgyN2Y1MzE2Zjc0OGNhYzY5OThlZDJkMjEwNGYyNjg0MDdjMTM1ZTYyZjI2YTkyMjQ2MGVhYjZkODUxNjM5YTAwZTVmMDhiMzQ3NjVlYTAyNDRmNDc1YmJmZWFjMTgzZTNiNWJkMWFhYjc5ODUyMjc5OGEwOGVjNmJmMjI1N2Q0NjkyZjViMDNjZGQwYTIxMzNkZTk3MDYwM2UzMjUxNDc1YWFkOGQ5MzRhZjZiMmJmYzdhNjUwYjkxYmRlYzE0M2Y4YWQyNTRjZmE1MDZiYmZmMjhhMDNiZWI2NTllZjVlNWRkZmZlNzZlMjMyMzBjNGNjZDQ2MzEwYjM3ZGQ5MWZhNmFhNjgxNjdmNjJhNTVjOGE2OWY5ZWQxZWM2Y2RiMTQ0ZGQ4MWFiMGJjYmQ2MjY0MzQyMGJjYWU2Nzg2OWY2NGMwYjE2OWYzY2RmM2M5MDU4OTViN2QzNWI2ZmFmZGEyNWNjZjIzYzNkMTBkZTMyZTdmMjcxZTMwMGQzOTU5N2RhOGY4NDM3MjJlZjA4MzY0YTVmN2ExMDViOTY1NTE3MmRmN2M4MmQ3Mzc0Zjk4MjY0YzljZGNjYjQ5NmYyZTEwZmQ4MjYyZmIxYTlhOTk2NWIwYjg0MWFjMGQwZTljMWEzZDk0OTNlYTdhYTYwMDIwNWI4ZjkwMGJlMGQ3YWJiNGQ5OGEwNjU4M2QyMjk1YzI3NjMxOGJlMjhkNDIxOTgyZGVkZDViZmMzM2I4ODY1ZDk0ZWY3NDdkNjI2YWY5OQorU0lHOiBmMzM2MTM3ZGZlNmY0MmE2NjY5YjU1Zjc0YjgwYjMwMzVhMDQwMzY3ZjkwNjU2ZmNlZjBhNjQ0YzUyMjcyZGRjMzkyNzNjZDc3MjYwMTBlYmNkOGEzMGEwNTIwMWFiNzBiOGZmOTdkMDI4OGEyY2I5NGNiYzQ5MDIwNjQ3MzkwYgorCitUU1Q6IDQzMQorU0s6ICA1MWE0MTk3YWI3Njg2ZjgyZjYwMDNhMGMzMmYzOWQwZjJlNDc1NTVmNGU5ZjhkZWVlNzViY2IxYmQxZWY2OWU1CitQSzogIDA2Mzg2ZGY4NmI2MWYxZjhmNGRjNDViNzNlZGFhODQxOTIwOTY4YmJkMTMxY2M1Y2ExYzUyOTRlZWVkNWM4YmEKK01TRzogMmFlZGI3ZTgyZjFmZTRjZTQ2OWFkYTQ4MzQ1ZDAwNmQxYjNiZmY0MGViMjE4NjdmNTFmY2U5NjU2NDBjNDA5ZWMxM2FkNGQ1MmY4OTFiZDc5MDY2ZDZiNGQ5NDRjYTg2OGQ4OTg2ZDI0MmI1N2VjY2M0YzRhNDg4MjkxYjE1OWM4ZGU0MzkyYmU0Yjg2ZmViYWE3NWVhYzVkMjJkM2M0ZjhkNmJlZjc5YWRiOWI5MmI0OTE0ZDVlYTA3YzdmMDIxZTJjMjlmNThkMDdiZThhMDg0MTAwYmMxNTJkNTFjYTg5N2Q3YzEzMTY0NGQwODk1MzIyZTk0NDBhODMzOWUxYWEzOTBhN2Y0ZmNiNTFkZGZiNmRmNDhhYWY1Njc2MzM3ZDg3ZGRkODViMWQ5MjVlMWE5YzI5ZmUwODE4ZjUxNGVmNzJmNzQ3YTY3NDk0NjQ3NjkwN2E3Y2E5OWU5ZGI4ZDIwOTY0MTA1N2E3ZjQ0YTMxN2I5MDk3NGJjODZmOTYxN2E5NjhhNzZhNmI4Mzg3Y2Y1ODUzZTYwODE5MGMxYTc5ZjFlMWQ2ODZlMGRlMjJkYjZjZDlhZWI4NTMyYzVjODVjYzkwYjVhMDE4NTc5ZjI4ZTUwMmE3NzBhNGVjNjc1MjYzZDBkZDc4MWI0ZmE1M2M5ZGJmODA5OGQ1N2IzM2FlMmFmYmFlYjNlNjgyNjZhZDlhYWI3MTc0YmE2OGM2NDc5ODgzOTkyNjcwY2NmM2U1YWM2YTE3ZTY1ZTMxZTFmZGM4NWUyNjljODA5MzVlZjU3NGYyMGQyMzk1Njg0ODZlN2Q5NGE0ZjcyNGFiNzAwNjA5OGIyNGYzZjYxNTg3NjkxNDM1YzdmMjljZTRlNWNhNzFiMmIxODc0NTU2NDMzYTM1OGM4YzVlZjNjODgwODQzMDMwYzJkMTNkNTFiNzhjOWJmMWE4ODI0ZTYyZTExMTg0NDM5NmY1YWYyZTI1YzMxMjZlZjM2MjZlMjZlZmFmYWNmOTk4MzBhYTQxMjEyMzMyZjM3OGExNjcyMzNhMGI0MjIxM2FmZTM2ZDgzZGM0NTgyYTc5NjkzYjlkNTcxYTU3NzEyYTA4Yjg1NjZkMzYxYWM5MDI2NDdhZmM4ODY2MDNlMjQyODNlZmIKK1NJRzogMmMwNzI5NjlmZjQ3MTkyMTJhMTIxOTM4YjUwNmM2MDI5OTViNGQwMmEyMmU2MTk4ZDZlODdkZDZhZTA3NjIyNWFjNzBiYjI1ZWY4YzBlZTgxZWI2ZmU5NTNkZjZiMTgxNTk0OWU4ZWQwNTA2Y2IwMTJlODczY2QzNmNkMDliMGEKKworVFNUOiA0MzIKK1NLOiAgYjExMTljMzYxMThiN2EwNjVhMTk1YmZiOGI3OWE1YzI4N2UwOWJkMjg3YzJkYWFjNWU2YjAxMTY0YzVkNzM3ZgorUEs6ICA4OGYyMThlY2JhOTllNzcwZWQyMTRhOGQwMWE5MmExMDQwMGFjYWYxZjZlZWQ0MjAwNjdlMTM2ZWUyYzBjNjcwCitNU0c6IDg4MTZiMWViMjA2ZDVmNmRjYzJlNGNjMzkxZDIzMjA5MDA2ZGU5MzVlMzE4MTUyZTkzZmM4YzJjZjA4ZTI2NDMyYmFkOWFkYjMyMDNkODk4ZGYwYTJlN2YxZjgzZGMyZjNlZDMyMDViZWM4ZWZjZmQzMWFkYzFhY2E1NzU1ZGI5YmQ0ZWZlNTRjYzE3MDczMDc3ZGU0YTNmZGQxMTk5NmU4NGI2YTA1MmYwMzRiNDEwOTkyMjZjOWMyNzJlYWUxMjUyOGYxNjU4MWI5MWI4MTI4NTBjMjA3MTQ0ZGJmZjNlODUwY2NhODQ4ZWMyYjFkZDE2NDc0NGQ3YjU5MzM3ZDdlM2VmZWYwMDgxNjJlNjgwYmQ0YTA4OTljZWQ2MGIxNzFmOGNiZWI0OGM1MTU4ZGY2Y2JmZGIyNjI0MDg4MWJkNThlYmI4YjZhMDc5NTg3Mjc5Njc5Y2I1YWQ4MmYzNzFiNTNjODAxMzgwNGMzNTU5NmM4ODdlNDM2ZDIzOTI2Zjk5NGUwOWQ5OGZiYjhjZTI3MDQxNzRlZjM4YjY4MjYyYTdmMWE3MTJkYTBlZjBkZWM2Mzk2MDY4MTRiM2JkY2FmMjUzZmYzMWM0OGU4YTc1MmMxMTFiZDcxMDEwMzFjYzNkMzhlZmIwYzljN2YxOWM1OTA4MTU4NGEwZTAxNWVlN2M3NWIxMGE0YzUxZmY1NDNhMzBlNTJkNWY5NGQ4MTg4YzZiMDhlOWRmMWU4NGE0ZTJjODA3MTcwYWMxMjRhNzcxYjk5NDY1YTBkMzhiMWYxYzYzMzA0MDNjODI1NDM1ODJjNWJiNjFiMjIwZGUxYjllMGVmNjliZGFlMjYwMjMxODFiYTRjYzA3N2E1ZjBkNDI1NzMyYWNlMTMyYWUwYzZmZjBiYjE4YmFlYTgzZTg4NzdhZmJlNjUwZmUwYmQwMjA5M2YwMGE3YjUzNjU3MjhkY2I2NmZiYjg4MWY1OTI5NDUwNThhNWIzNTA2NjVhZjkxYzU1N2E1NDcyNTBhZDI5NWU2OGI0ZmI3MjQ1N2NmYjlkNWVhMWE3YjJhMzljOWFiN2Q3YWNlMGFmNWQ1MTY2OWNiNmMyYzRjMDdiMjI1NmQxMGU1ZmZjNmI5N2M2NjAwMDYzMTNjNGViOGQKK1NJRzogMjRlYzFlNTRmYzdlNzIyZDM3NTUxZDAyY2YxMzVkMzNmNWQzZmY1MzU3NzNlMDI5OTFlZTg1ZmZkM2FhMjk5OTdmOWM0NjQ0NzAxOTdmZWU4MWRjZTExMDYwOWY4NzBiMjdjMThkZmJjZmQ5MzIwNTQ4NTI1ZTkzMTQ4ZTIyMDUKKworVFNUOiA0MzMKK1NLOiAgY2JiNTg3NTE0ZTBhMzRmZmMzNGNiYzA0ZjI4YzliNGY2NDY1ZjFlYjIyNWNjYTE5Yjg2NDg3NmRhZWYzN2Q3ZgorUEs6ICA2YjcwNWQ0Njc3ZDJkODQ5YjY3NDRiMWViZWQxNjdkYmNiZjY0NTkyNGIxZmYyZTYzNjA3OTRiZGQwZTA5Nzg4CitNU0c6IGJkZjdkMTdjNzA2Nzk2ZWZkMzQ4OTU1OWI1MjdiMWMwNTg0YjkwMjJjOWNiZGEzYWFjNTE0NmRhMzQwZDljZWE2OWY5MTYwMzdjZDIxYjNlYjExMDQzNDg4ODBmZDVjNWI3YzY1ZmY4MjBmNzQ5OTM0NjAxNjk1MWNiNzE1ZDhkZjJiNDFjODhjZDNjNjYxMDU0NThiN2I1OTBjMjFjMWFlMmY2ZWE5ZGRlYTc0NzBmMjVlMDIwMjdkMTcxZTBlNTc0YTJiYjIxNjQyZjhmOWRhNTA4ZTIxZDhlNzMzNWI1YWNlNTkzNTI5OTQwN2JkMWIwMWJkZDE0MjMxMzNlZjA0NTIzNGU3MDFmNTU1NDk0MzRhZGU5NGE2MGJlMWUxNDA2Y2E1Yzc1OGMzNjc5OWNlMTcwMzA4NDQ3NmU0ODRmYjE3NDA1MzBhZWU4NDI2NmQwN2FkZmI0Y2M2ODlmMzI2NTEzM2E1OWNkZjk5MmZiYjlhNGIxMmRlZmJlMjQxZGRiZjY1ZDEyYjJmYmRkZmMwNWFmMGZiOGRlNDIwODA3NzViYWQyOWM2YjA0NTk4NDFjYmI2NDhhOWE5NWU0OGQ2ZTM2YWM1MTQ0ODBhM2RlYjRiMzY1NTRkOGRhNjIwODA4YWU5ZDQ3MzI5NzEwZDIwYWFhNmU1ZDdmNTQ3ZDgxYWQzMGY4NGMwZTNkMjM5Y2RlNWIxNjlkOWRkZjI5NDgzMmQ2N2E4MDYwYmEzMjljNGVmMzliZTk0YWM0NjQzNGRkMjE4NTkzMWQxMjMxZjliNmRmODc4YTVhZjA4MzFlMGU5ZDhhMDhkMDgwNjlkZWQ2YTk2MWVmN2YzOWZhZDUwMWZmZDE3ZDZkOWI3YzY1NDY1M2MxZjU4ZmNlZTFhNmNkODAzZDJhZWYxNjZjNzhlZjU1MTRhMzI3NmQ2OTk4ZGM3YzA5YTNmYTk4MmU0MjdjNzg1YWE2YTllMjU2ZjdiYTcyZDVhNmJhMzNlYjQ2ZjFmOWZlOWJlMmJmYzE0MTA5ZjY0NzczYzAwYzA2M2I0ZDVjYjRmNGY4YTBiZWNhOTJhOWEwMTZjNGY1NDBmZWVhOWMzYTMxZTMxM2JiY2JjMmZmNWVjYTk5Njc4NTdmNWY4YTkwOWEyOWQ3ZjIwZAorU0lHOiAxMjc0ZDZmMzU2ZWI2NDE0NzJiNmI5ZTViM2NlNjVkMjY1NGU2Y2I4N2QzYTgzZmI0OWQwZjdkYTljNDRiZTJiNTMyNjA0NDY1ZjYwODlkNjgwZDJkOTRiMGVkZDJiNmIyYjgwNWM1ZTg0YzM3OWVmYzA1OTY3M2QzMTAwN2EwOQorCitUU1Q6IDQzNAorU0s6ICA4YmRlM2ZmNjFhMTY5OTVhYjlkNTM5ZjYwNTMyMTkwODFiY2FlYTFkNDU4ZWMzMzY4NGZjMWMwMWZiNTY1YmZhCitQSzogIGNkOWQ3ODJhMzU2ZTg0N2I3YTA0Yzg4NWE5YjA5MDdjYzMzYmE5N2FkNTM5MGQ0ZWE1ZmVlNWViMTk4ZDA4YjMKK01TRzogYTFmNDBlYzU4MDdlN2EyNzA2OWE0M2IxYWViZmY1ODNlZjAzNzAyOGMwMmM4NTk1MjVlYjhmYTRjM2JhOTVhOTAxZmYzYWVkNzhjNGY4Nzc1MmZiNzk1NTIyZjViZjcxNWJlN2UzZGVmYWMxMGZjZjE3ZTNmYTVjNTRiMjAwODlhNDcyMzMzMzI3MjUyZWM5NDU3MThmYjQ1NWUzZjI3Y2NmZGVmODIzZDEyZDQwNmU2MmE0YWViYTNjYjlkMWM2MWIyYjE3ZTQ5ZTIwMGE4NDE4ZjkzNWYyNmVlYjU3NjAyYzdhYTNiM2EyNGY3ZTYyMzhkM2UwOGQyZDYwOWYyZWFkYTAzMzJiYzhjYjEyOTE2Y2IwM2IwZDRmOWNkNjAyMDAyNTg2ZDNlNGNjN2UwZTAzODFjMDQ1YWQyZTFlZTI4Mjk4YWU3ZmNmMGMxMGYyMTI4MDg1NjUyOTZmMTU4ZDJjMzJlOGNiMjgxNTY1ODFhZjUyYmZjMzQ3MGMzYzk1ODIxMzhkMjI1NWU4NDI2ZDY0OGNhMjM3ZDdhYWQyODU2ZjE3MTYzODU1ODI0MWQ4YWUzZjYyYmE5MmRiNTk2NTY4ZWRlZTNlYzBlZjM3MGY4MzYyNmFhMDQ0NWFmMDhmOTY3ODYzNjYwZThmYmE1YTQxYzhlOGVkZTFjOTYwNTE0YTE0Njg3YTRhODFlNzc2YWUwZThlNzc3ZmIwZjI1MGQ1MWE4M2I1NWY4YzFmZmRkNzhkZjNiZGM5N2ZmMTc3YWZlY2EwNDZjNzJkNzJhZjkyNGFkMGQwYWIyYmZjMTFiN2Y0YWJkZWQ1MWMzOTg3YThiYjk0ZDY0MGM4NzEwZTVmYzlhNDE5MGU4YTAwODM2M2Q3NDE5Y2VhMTdjNDBkZWEyMGVhNTE1NjAyOWYzZGViZjA1MjQxOTE4ZjU0YWY1MDM5ZTJjNGNmMmNhMmUxMzlmNjBlNDVjYzY1NTk1Y2RmNTRhNjdkOTJiNmFjNjZmYzBjNWEyOTA0OTVjYTU3YjA3ZWY1NzUwZDA1ZjU3ZDg3ZDBjMjI4ZjdlNGUxNWFkMGJhMDE3ODczMGY5NTFjNjk3NTgzNDgxYzY2Y2JmY2Q0ODAzMjU0NGFhOGQ1MDkwODMwNGJkODE5NDAzMDg3MDYKK1NJRzogNzQ2NGRmMGI2N2ViOTBiNGI3M2ZmMDgyYWQwZDYwZWJmZTA2NjBkYWU5NzA2OWI1MmMzNzI3MjIzYmY3MGUyOWU0ODcxMWEyYmJiNDM4ZjVmOGQ4YTMzYmI5YzQ4ZmU3YjYyOGZhOGE1NDJmZjBiNWFlMzYyNjlkNDAwN2E1MDUKKworVFNUOiA0MzUKK1NLOiAgZGE1OWJiYzUyMzQwNGYwNzY0NmFkZDc5MDgyOTQ5NzdlNDY2NDViYzhhMzhiYWQyODA5NjQxYTIzZGUzYjE1YQorUEs6ICBiMjJjMGYyMWFhMWMyZDQ1ZjRiMmU1NmNjOWI1ZTAyZjllMzFhMmVhYTM2N2VjYjQ4MmY4NzRjYmQ4ZTlmZTM0CitNU0c6IDA5NzEwNmMzNjI0ZDc3NGRkZTI1NTFlMGMyN2UxOTUwNGU2NTE4Y2M4NjM2OWFiMjZmZjgxMDk2OWU3ZGUyNGFiYzY4YjRiNTNmMTFkOTQ1ZDQ5ZWYwNzhlYjRmNmJhNmJmMjU3ZmY3YjYwOGFmZGNiMzBhNWM1OWE3NTZmZDc3YTZjMTI0N2Y2ZjJhNDExMDBkOTlmYzUyMDZhZjNiY2M2ZGUxZDNlNDk2OGUyOGZiYTAxMjNmNjA0NWExYjU0ZDY5M2E0MmJkZmEwNzFiMmI5MTRiM2MzYzBjMjliMjU5M2QwN2U4YmRjODZjYTQyYWM1NTViN2RjZDk0MzlkZjlmYmQ0YmJlYzczMGQ2MzI3YmZhZTRmYzQxZWQ0OThiNGYwNGEwZWIxNGNlZTYwODI4M2FhYTZlNmFhNDY2NzZiYzg4YWVkNWQ5OTM5MDM3YWFkNDkxNTY2MWFmOTRiYjVmNmU2NTNhMmNhYzEyMzI4NzA3MzI3MGUwYjEzZmRhMWRkNDg3MWFmNmE5MmY5OTJmNTM5ZGY4ODE3MTJmZWZiMDM4NTQwZDQxMTkxMTIzYjZiM2I0YjZmZjg3ZmZjOTI5YTZiZTUzYzZjZWYwMmY0OGYyZjBjZjJmZTY0YTQ1ZmQ2NjAyNWNjMmQ3ZWU1NWViZTIzMTZjMDAwODU1NjYxMTY1ZTJhNWJhNDFhZmMyMDk3OTU3YjZmZTRjNTUyMjEyMDRiNmZjMWYzMTdkZDNiYTEzY2FjMzk5MjQwMjZiZGI2NmJlNDU0MjI2ODg3NTYzMWQyNzdmMjEwMTA3YTMzNzY3ZjZkOTU5NmUyNTc0MmQ3YTkwZWE3OTFlYTRiYzllZTg0YTY3ZmQzMjhiODBmNzkxZWRlOTZkODk2NjNlOTM3ZjBiNzU1YmFhOWQ1MmJkYTIxMGNlZTFkYjMzOWZmMWQzYzRiMDAwYjY1M2I5YmRlMzM4MDQ5YWY4NDM2NGUyMTc3ZjgwZGQ1MWUyYTE2NzJlZTU1NWQ2MzE3NTg5ZjZmMWQ1YWJlNmMyODc3MzU4YmY5NGIwYjgwOGZmODU3MzYzZmJmYmUzMmU5NzMzN2U0YjhhOGMyMjFhOWU3NTk2MmE4ZGM5YjVhM2Q3Y2E1ZjljOWI2MWM3M2MxNDY5YTcyYmQKK1NJRzogMTQ3MjQ1OWNiYmFlMmNmMjFjZTQ0YTE1YmFlOWZjODVkY2E0MGI4MTgyZGE3ZDUyY2JmNTZlZDUzOGQxOGUwMzQ3N2MxNDBhM2RkZDBlZmJhNDNjOTZhYTkyZjVmOWJjZGYzNDgxMjg2Y2U3NjJhN2UyYmQxZTc3OWJhOTliMGQKKworVFNUOiA0MzYKK1NLOiAgNDBlYTgyZGE0MWZkMTViMDZmZmViOTljZDYxNmRjNmJjOGMxYjIxNDc3ZWEyMzk0NjYwODhlMjg0OWJmMTAxNgorUEs6ICA1OTEwZTU4MGJmNDEyYzMxYTg3NDUxZDlkZGYzMmIzYWI3MTNmOWU0YTIyYzU5MGM2NDFjMTRhNWRmYmJlMGQ3CitNU0c6IGEwNmM0ZTAyYjgzYWI3ZTE5MWFkODE4Y2I4MTg3YjUyYThkYTAwNGZlODM4ZGIzMzNjNGUwMjU0OGRiNmJkZjc5MTQ0NDY0MmU1N2ZkYmM4NTk0ZTU5ZDcwMjMyODBiYmFlODI5ODZmMzk5ODA1NDM0YmIwNzJjOGEyN2EyZGNkNWFhNjJmMDY1YmM1OGIwNjIxZmNkMzY1ZjZjZGJmNGQ1N2Q1NzdkOTExNTAzMDFmYTQ4ZjE4MmY4N2U4ZGNhN2NlNDVhN2Q2NDg0NWZmNDM0ZDFiYWIwNTM0Y2NjODNhYTA5NzRlODhiMzhmYzI1MDhjZWZjYmJjODIxMzViNzNiMzg0YzgwZWNjYjhhMDllMjg3M2NjMDcxMjkwMjFkODFjZTEyOWE5ZGY2NWU2MTM0MTBhZjk1MDE5N2RiZjlhZmMyOGVkYzRlNjVjM2U4NGRhNDBkMmVmODQxYjg4NmJjNDQ3MTlhNWQ1OWRiMmM2ZGM3NzY0MDFjODk1ZTJiM2M4Mzc4M2Q3ODE3YmJhNjhiYWZmNTk0NzBkNjAxNWJiYThkOTc1ZjBlYjcxMmYzYjg5MDI5MTI4MDU1MjNhYTcxYzkwNDk5ZGU2ODlkMzFhZTQ0ZTIxMGI4NDQ2ZjI0ODQ3MjdjYzQ5MWI5MmE4ZThiMTk5ZDYyOGUxZGY3OWEyOGM1NjFlNWE3ZDg4MmUzMDc4N2QwOGZiMmQ1MTk2YmE2MTE5NjMwOWIzYmYwYzU4MjRhMzU0OGM3MDAwMDNmZTk5MTNiZWZlMTIyMjMxNTAwMTI2ODVlOTA3MjBlOWVjNmJjNGRiNjA3NDI1YWVjNTMxYzRmYTM2MDg2ZDNiOWJlMzkxYTNmMDQ2MzVhODA3N2E0NDdhMTZhNmZkODlhZmJiOWE3MmQwZDM1NWNiMGIyMmQ1NjJmNDNmNTlkNGUzNzEyOGIzZTJkOTA2YzhhZTIzZDBhYTU5OWM3MGQzNzc4YTA3NmMxYTM5NzI4ZjFkNjkzN2JkNDhiOTc4NzQwODUwNTY2MTM4ZDM0ODUyYjYzMDc1ZTg5YThlMjI4MGVkYmE2ZjRlZThmNjE1MTFlOWI3NjhlOTVjNzhkMTk3YjY5M2IxMDllODg4MThiNDg2YTlkZmRiNzRiNGM1NTUwYWNkZmJkNQorU0lHOiBkMjk4ZmNjOWE4ZWNiNzZhOThkNGE3MWRmYjAxZDI3NmFiMmQ5NjcwYTk1YmFiMzRjZjFkODM2NDUxNmQxZWJkYjIzOTAzNDYwMjE1MzA3MTI1YWZkMDljNzU4ZTk4MWE0NTJkYTk1YzBhYzJjMGI5NThjNjkxN2U2ODc0MTkwZAorCitUU1Q6IDQzNworU0s6ICAyOGJiODFhMTdkNDU4NDc1NGQ1MjgxOGNkMGYxZjIxYmFhNzc3ZTY5NTg0NGExNTEyMmFjMDUzNDRkZGRjMDI3CitQSzogIGQ1ZjYxZDUxOTk0NGQxM2I4NGJmYTdjZDY3Y2IwYmVhNGVmMjI4MWVmYTQ2MWYyMmFkZTRiYTg4MmQxMWIyNTIKK01TRzogOTJlODRjN2E1NWIwYmVhMDNlMTdjZmI2NWY3MDg1Y2UzZjQ0NWIxNTQyYmFlOTk3ZGU1ZjA5MmEyNGZmMjQzMzgwMjg2ZDEzNzA5MWE1OThmMzVlNmRhZTFhMWM2NDhmNWE0OTRjODE5ZGZiMjQwNjUyZmY5MDgzODFmMzJkNzBiYzUxMzEwMGFjYTE2ZmU3MjIwMjk1YjFjNzE4MzVmMTZkOTMxMGE5ZDI3YTA0YTk4MGFjZTI5N2Q1YWYzZjdjYjdjNzhiMjQ5OTdjY2I0MWY1NGVjYmFiNTA3ZWI3M2VhNmEzZWQ0NzBlNDk1OTA1MDlmNWQxZTYwMzJhMjYwNWRiODdmNGE5YjllYzkxNjAyNTgzZjE0ZTJmZTFiZGI5MDBlY2I4OTcxMTk2YjU1YzBkNDMzNDg5ZjI2YmU5Y2ExNTdjYmQ1NjU3Mjg4N2JhODU5ZjM5Njc0YThlMGNhMDhmMmRiYjBmMjcwNzM1NTFkMGIxOTkwNjg1MTc4YjFhZTllNzg4NTQ5OTE0M2Q5ZDcyYzg1NzFkMTFlMGQ4NWJmNThkZjk0ZTJhNzRkOWI2ODQ2NTU3ZjkxMjVjYTA5NDRjZTU3MThkMmNiYWUxNjcyYmEwMmI4NDdjMTdhNmY2YjQ0NTYzNGQyZjAxNzVhNzVjZjY4ODNjNjJlNWI1MjFjNTcxNDFmMjE4YjJmYjA5OTRiMzcyYTcxNmM0YTIxNzQzNGJlYWI3NTc0MGI4ZTkxYzYyMjE4N2QwM2M4NWRhMDAxZTAwMjQ3MzEyYTQ2NTIyNWY1ZDZhZjIzMjA2NGE0MjdkMzAxODcwMGRlZDc3NGI5MDI2Nzc3YTUyNzVmYzA0NzU0NjA2Yzg2NjAwMjk3YmY3YjcxYWFmZjhiOWE3NDY2NzdhMzY2MmYzNzUwZTgxYjUwMTY2ZjYyMzcwMDAwNTFmZmExNTg2OGRlZmRmMDkwMDU3NzIyYWUyMjk5NjRhNGVhMDg1ZTBkYmMwNGNlMTk5NzcyMmM1YmI2NWQyYjQ3ZWNiNzQ2ZmQ4M2E5ZjZhNjljODE1NDVhOWI1MDJmNWU3NmQzMTMwYzVhZmNiMWM5YWY5OWQ5MTg3NDA4MzdjZTg5ZDdjZDIxM2ZlZjJmZDA2MmNlODg1MGY2OTY1OWU0YWQzMjcKK1NJRzogOWNlNDVhMDdkYmQyOGQzZjZmMWIzNTYzMGEzZmQ1NmYxZDU0OGY4NGZmYjFjNmFlNjRiMjE0OThhZTM4ZTU5NjkxNmU3N2Y3OTkwNWU2MDlmYjFhZTBkYTM2MTM4YTgwZjI0MjEyMjE2NzA2ODA5MmNjNjA1Nzk2YzU2NjllMDYKKworVFNUOiA0MzgKK1NLOiAgMjRiZmQ0ZmM0NWQ1MDkzNTg1Njc4MTAxY2Y1NjNhYjgwMTFmZDY0MzBkZTE1NWYyYTQyNWYwNjMzZWUzYjdjZAorUEs6ICA5Y2Y1YzVmYzBjY2ZhZWIyOGEwOGJhNjc3MDdiMThkYzg0ZWEwNjk4ZmZiZGJjMTY5YTA5YzI4MTIzZTZjMmFjCitNU0c6IGJhNTQxMjhmNDViZTIwMDFkYmIwNjBkNWRjYzQ3MTQ0OTk3NDE1ZDQyOTRmNmViYThkY2ViYTRmNmNmMjIzNDY4M2M0MjY1Zjg4MDMyMjA1Mjk2ZTliMjdkNjg1MDYyMzJkNTdiNjg4NDA3NjQ4Zjg3Y2ViMzQyMDUyYmRlOWQwMDY1NTQyZmYxNzE1Yzk0MjAyN2U2NzQ4MmFmNGJjMjc4ZmY3MTk2NmZiM2Y2MmEyYTUzMjNjYjFiNGJhZTFlN2I4ZmVkY2JjNzNlYTA1YjQwNzY0MjFiMGI0ZmFlOGJjMzMzNzQxNmExN2ZlMTI0ZTdlZTQ2NWViYjM4ZDg3OTIzMDY0MjlkODI3OWExYmQ1NGMzN2JlZThmOWM4NWVlYmUzYWZkMWY2NDQ4OWQ0ZTUzYWM1ZjUwNjU3YmI2ZmZiOTcxMjA3NDRiNzVkNDdjNjIyNmQ1YTljOWMyNjRlZTNlNmE2ZGVkMDUwNjJjYTEwMDY2NjkxMTg0NTQ1NTAwMTA5MTljMjYzM2NmMDg2OTUwMzQ1ZTUxNGFmMzg0MzE0OGU1YzY0MzUyZTY5MDM3ZGZlNjBkNGE4ZWFiM2ViOGNiNTRiZDM5YWYyZjM1M2Q1ZGVkMmUyYmM4YjExYzA5ZjYxMmUxMjhjNmVmYTQxZjZlYjJjOTU4MDg3YmUzNGM2MzM1YTQzMDA1ZDExYTlkM2I1YTUyOWMyZDFiMDY0MmY3N2FmZGQ4YzZiMWQ2ZmIyYTlkY2I2NWY0MmY0ZWNhOGVhOWEwNTQwNThiZTg2MTM2Njc2MTBlM2VlZDhkMWRmMDczOWVjYTE3MTk1NDExNzk4OWQxYjEyMTg5YWI1NzkwNGFhOTYwYjBjYTg1NTQxNzQ2Mzg1ZWZhOTg1YmU5ZDk3YjVhOTAyOTk4OWE5YzcxNDk4ZGZhYmRiODEzNjgxZjU3ZTI3NmI2NGRiNDkxYjhmMDgyYTg4NTE0NTQ2OWE1MzFiN2Y5ZjA0Y2EwYTJjMmY4ZGZmMjBjY2I5OWMyODYxZjU0ZTVlYWZhOTYyY2M1M2VhZjE4ZDNkNWU1MGQzMzdhZjQ4NWYxOTk3NWYwNTkzMDcwMGE4YTcyNTNmMTFmMTg0MTMwZDBhZWU3MDk2OWQ5NmZlMDhmMjE2OTUxZDlkY2VkNTIzODgKK1NJRzogZGM5MzViNjBmZGU0NDM1OWFmOGY1MGVkN2Y5MTlmNDgzY2UzZjI0ZTIzMjBjNTViYTkyZjNlNzYxN2MxOWJmYjU0NzAxOTAzZmYxODNiNDJjYmVkZmVmMDg3NWY0MmIxMjg3NWQzNmEwYWVlYzczZmZkMDk1MDlkOTJiMjhiMGQKKworVFNUOiA0MzkKK1NLOiAgMmZjMmY5YjIwNTBhZDdkMTM5MjczZTkzZTJhMDQ1MWM3YjVjY2U1NzU5OWFhNmIwOGQzZWRjNWJiMDc1OTBjOAorUEs6ICBmZmU1YTE3ODgwZDcxOGNjNzk4OGMyZmQ5ODI1YjAzYjkzNDUwYWMxZGViOGZiZDFmMWJmM2I4Zjg3ODA1OTU0CitNU0c6IGRjMTI5Nzk5MGNjMDI3ZDU2ZDFmZWUyNjVjMDliY2YyMDdhOTU4M2U2YmFiOGQzMjQ3ODIyOGUwYmMzMDViOTgxODE1NGMzMzhjZWVjMzRiMDRjNGFkZTdhYzYxZGNiMDliZmFjOGFkZTAwZDFmMjlkZTMxNzA2MGI4YTRkYWYxOTg3ZGU0MDljYTJjM2ZlNDM4MDA4ODA3M2NjZjQ4NWU5YTY5NTE2YjViYmI0MTMwZjIwYmU2OWIyZGQ2YTliNDY1MTU5Y2NhMWFjODhiMzI4YjgwYzUxYjY2YWY3ZjRjNTBmNjIyODc3MmYyODczNDY5M2NlNDgwNWE0MTYzZGZmMTRiNGQwMzk4MTFlZTNmY2U2NTkzNTQ0NGE2ZWE5YTcyZDc4YjkxNWM5YzNiNzY2YzYwYjdlMDMyOWU0M2M5YzU3ZWRlOTRiOTE1MjVjZTVhMDc1YTcyOTcyMTk3NzJlZjNjMDI5NjQ5YjU4NmE5NWE3M2JiZGYxNmQ4ZmMyMDM2OGRlNGJhNDRkZTEwNjRiZTU4MjZiMzc2YmUzMWE4NmNhNDc4YTUyZWZiOThmMWZhMzMzMTU3NzE5YmQ2ZTBkYTgwZWQ2OGQwZWZlYWZlZTVhMTNiY2MzYjQ1NzUyNTI1OGYxZjdlMDMxZjdiNDAzYTQ2MTUwNjkyN2IxZTZjN2Q0YTBjOGQ4NGI1ZjNkZDBlYjhiZGIxM2VkYzJiNTE0YTgxZDA4OGViMDc3YTUyYzhhODMxODYxZmVlZTgxMTBlNDFhMzI1ZGNlMjA2YjJkNjdkMjVmOTBlZjU3ZTBmZGU3MDlmM2U1YTM5YzA0ZWVkMzFlNTdjMTkzYjI4M2UyZGE3Mjc5ZWUzZjFlZWQ0ODJiM2JiY2QzNzM5MDJjMWRmODExYWMzM2UxZGUwNjQyOWU4Zjg0NDNmNjAyMDE5NjUwYmRjMmVlOGQ3ZjY1MDAzNmE3YTIyYjhmZDg4NTE3NTExMjI5YzcyOWEzMjY5YjNhM2U4ZmM3MmIwMWI1YTRiM2UzM2Y1MjcyZjNhZDIxNjI5ZDA4YjFmNzE3OTM1ZTllMTA0YWRkMmYwZjIwMzM0MzJiZWM4MmUyMTIxZDk4YzljMWE1OGUwZGFiYTI1NTM2YTFiZThlNTA4ODM0N2Y0YTE0ZTQ4ZDhlMworU0lHOiA3YWZmMTYyYTNjMGQyOGRmZjQxNzE1YTk3NGFmMDdlY2FjMjEzMmZjMThiYzQzYTE5OGZlNjY0NjU5MDUwZGExOWFlMjI3NThkNTJjOWNiYjk0ZjEzNThiYjAyNjEwYThhMzUxYzIxMTYyNzllNzI0NWFkZjY5Njc1ZGZkMzYwYQorCitUU1Q6IDQ0MAorU0s6ICA4YWZlMzNhMGMwOGFhMzQ4N2E5N2RmOWYwMWYwNWIyMzI3N2RmMGJiN2U0Y2UzOTUyMmFlYzNkMTc4MTZlNDY3CitQSzogIGQwMDQzNzBlNmVkYzM0YjNlODgxODY2NzIxNmY1YjIyNmIwZmY3NWE1ODQ4NGM4NjE2ZTFhODY2NDQ0Y2FiNTcKK01TRzogODZmYjc0MWYxYjk3MDg5MjkxOTUwMzFhYTE2NDVmYjcwOWE4YWUzMjNmZmY4NWU1NDcwMTk0NDUyZTExYjdiMTI3OTE5NGI1ZTI0MjdjZTIzZTFkNzQ5YzNkZGY5MTBiMDE3ZTRmMmRmZjg2ZGJlNDgyYzkxYmQ5OTRlODQ5M2YyZTY4MjRiYmEzYmM3ZDdhODQ1ZjIxN2FlOTc2MGIzY2QwMDIyNmQ5ZmYyNjE2ZDQ1Mjc1MWE5MGMzZDBkM2MzNmQ0YWI0YjI1MjBmNjcyODgxNzFiZDNhMzRiMmVhY2FlOGQ0NGMxZTE1M2RkYTFmOTBiY2QzNTk1ZGFkMzc3MTNiOGQzNDAxNTZlYTkwYTRlMTM1OTUxYmE3MTY5YWMxNzU1NzhiODFlOTdhNTQxYWI5YmZiNzYzMjg3OThkN2Q2MzFjMTRkZjJhZDYxM2U5YzZlMTE0N2EwZTg0MDYyZGRiYTAzNTg1OWQ0NmJhZGU1ZmFkZDliMzJiNDNkYWQ0ODNjNmI4MDIzYjMyMzkxZTUxZWYxNTIwYzY4YzYxOTEzMjZjNDk0NDIzMDgwYzYyM2RjNGFkMGFhMDc0NzQ4ZDgyNmMyOTY0NGMzODk4NmE3NzAwMmYwY2FiOTA2OGU2YzllYzczY2MyZTBjNTg0YjgwZTBiYzM3NTcyMWY3YThmYzM1MzE3YTVlMjQwZThjNjYwOTJmYjYzMDViMDEyYzcwZTE3YWVhZmYxMzM4NmQ1ZTI4ZDA2NDMwY2E1ODViMGM4NWIyNzRlN2ZjYmI2M2UzNDIzYTk4MjU3OWU1YTY0YTAyNjJjNDE5MDhlNTVkYmU0M2RhYzFlNWNjMWJiNzI5OGJlNDI4NzIwYTEyZTNiMDcyNTU5ZWMyNjc1ZDQ1N2FhZjhmMTMyNTJlMjhhYWQ2M2MxNTEzZjVmMjM5NTY0ZDM2M2M4NTA1ZmZhNGU1MGY2NjQ4YzFjYjgyYmJhODUyYmZmMGFjYjAzMGNiZTczZjA1OWRkODdiYmQ3MzE4YzU1ODZlNzA4NjE4YTRmNGM5ZjNiZWMzZjRmMDdjNjA5ZWViYjI0YmE4NzhjNmJmMWU0ZjJkMGZkMTQ1MGFiOTRlMzE3NTUyMTc3ODZmYjE1MTgyNzYwZmZiZTVhMjY3Y2JlOTk4YTRmZjkwYTIKK1NJRzogNjNhOGFlYWMwMjVmMmRkZTlhNzMyODZlNTZjMmQ2MmRjYjc5YTI0MWJhMGIyZTJkYmFjYTg3NTJlZDJmYzhjYzdhYjhlNjYwMGI2NzY0NWZiNWU4MThhNGU4MmMyOTE4MGE2YjJjM2Y1OGQwOTljYjYzNWNlNTJiZGMxNTcwMDQKKworVFNUOiA0NDEKK1NLOiAgNmRjN2NjZjMyOTM3OGU4MTMxYjZkZWZjZDg5MzcwMzAxMDY4OTQ2MzM2YjBiNzYyYWM1ZWE1MTQ4N2RiZDM5ZQorUEs6ICAwNGU5MGQyNzVlNzlkZjVmMmI2ZWY0YTMxNTA1YWFjMDVhNjk0NTliYWYyYzU4MWIzY2UzZGIyOWYwZjFmYzE0CitNU0c6IDIwY2ViYmU5ODQwMWFjODkzNGMzZTY1YTU3MzhjYjBlYzBjZGM3NWZkYjA5ZGM5NjMxMjg5NGIxODdjMGE0NmQyYzM4ZjQ4NTViZTNlZWNjZGNkY2M1NmQ5MjZhOGMwOGNlNmU3NDhlMmE4NThmNTM1MzJlN2U1ZmM1ZjcwMTRjOGM2Zjg2MzEwY2MyNmVmZWYzMGFlNTI1YTUxNTc5NDBhYjUzNWVkOGU0MDMxMTJiMDhlMzVlMmJiM2RkOTFhOWFlOGY3NzJkMmFmZjM3ZDhjNDBkMmI1Y2M4ODdhNmYxNTA1MGEwZjViY2YwMzYwYzNhOWQxMmQ1OTE4NjU1ZWRjM2MxM2M4NmJhNmY0YTJmYTNiZmNkNDA1ZWQzOGY4NzFjZjdkZmYwZjc1ZGFmMmMzMjEwODRlZTlmYTgxMjExYWRiMTA1YjI1YzIyODhmMGYyZjdmOTNlZjY1NmIyZGUxOTAxMjJlN2E0YmZkNGExYmQ5ODkzYTg0ODViNTA5ZmYwYmM0NmNjOTYxMDUxYzFkYjVhMTI0OTBjN2U3NDE5MjJjY2MwYTY2NTQ5NjQ3MDI3NmY2OWM3Yjc3MDk4YzFlNjcwYWY2YjlmODUxMjUyOTk2ODc1ZWI4MDM1YTgxN2ZhOWJlMDdmMmJlMGJiYjEyMDI1ZTA1NjU0MTRjODE3ZTk0MjFhYzcwMDM3Mzg5Mzg2MmYyNGNiMTY1ZjlhMjcxYTY0ZmQyMzA1YzY2NzJjNDY3NjdmOGYwNzViZTVkMmQ0MDc5YmZhZGMzOTU2Mjg4YjAyMTU2MDUzMTFiNWJmMzJmMDAzN2I3YzVhZDUwMjAxM2U4MmFlMzQxOWQ5ZDhmMzljNTQ1YjU4ODhmNDcxMDZjOTRkNWZkNjA4NGQyNjAzNGE5OWY1ZGNiZjI2YTg0ZWI0ZWUxNDljNjJhMDQxMGQ4YzcwN2IxYTliMDcxZjc0ZWQyMzkzMjU4NTA3MmNlNmNiZDMzZDRkNTRlZTkxNzkxNmY1ZGZjNjRkMjZhNDk4MDE4NDM4YjQ1NTczOTM0NWRkNjBhZTBmNDc1MDYyNTkxNWNjODI5YWI2ODIyZDZmMDVmNmQyYmRhMGE3YmY1NjAxZTlhMmVkNmRlOTYwMzcxZDE3ZTZmNDM3MDljOTY3OGNhNzQzYWRmYmRiNDUKK1NJRzogMDQ1MDlkYjAwM2ExYTZlZDNmYmNlYzIxYWM0NGVjMTBjYzA2ZDc5ZjI3MTQ5NjA4ODIxNzAzMTYyNzVkZjgwNDIzYTFjMWExMTJkODgxZmMyNGQyODEyNTI2MDc5MDU4YWE4YjYwOGJmYzZiNWU1NzYzMjI0MGM2MzZkNmViMDAKKworVFNUOiA0NDIKK1NLOiAgY2NhZTA3ZDJhMDIxZmUzZTZlZTIzODM2YTcxMWI5N2IwNGUwYTQ0MWYxNjk2MDc1NzI3MzFjYjA4YzI2OTQ4OAorUEs6ICBhMzIyNjVlNTMyOGE0ZjQ5Y2YwNmI0NjdhOThiOWY5ZDViOTk3Yjg1ZGZiNzUyM2NhNmEwYTFkNjI3ZDMyODkxCitNU0c6IGE0YmY4Mjk3ZDBkYzVlNGM5MmJkMDBhZDViOWMwOWIxMjM4YjUwM2Q2MTkxMTZlZjc0MjYwMzc4MzQ5YTkyODJiNDFmM2Y0Njc2YTYyMTVlM2NlNmQwMjIzODQ4MGE5NjA0M2IyOTQyYjNmZWVkMTI2MjBiMWZhOTdmNzcwM2IzZWI2ODNjMTYwMWJkMmY1MTgyNWM0NTBkZjRmZDFmMzNiMGJmOWMyM2MwMzIyMzc4OWUwNmUyNGNmMTM2ZDNiNTU3NDAzYTY2OTgxZjRiNzc3ZGNmZTg5MGQyYmE5NmRhNGE0NzQyYWVlZGRkNmE2MTFkMDVmYzIxNTY5NGE1ZDg5YTVkZTY3NjBiMWQ5NDE1MTU1MDQ0YzA0OWNiMDIyOTFhMTUxNGZhYTJlNzdkMmFlMzNkNDQ1ODViZGFjNjM2NWJmNDgxZDljOTc4MzM5MzdlYWI2MzZlZDY1NzQyYTBkNTk3M2IyNGQ1NDA4OWIyZGFmMDg0ZDU0MTQ3NjUxMDVlNGVjYTE0YWFhZGQxMDUzMzM4YTg0NzA1MDUyMzJlNGFjNjMzMzQ1YzVjZGVlMWU0NjUzZDFkOTM1ODNhZjExODU0YjFkOWI2NWZjMjAyODE4MzhjNTZkZjExNDhmMzVjY2Y5YmZlMmYzZjgwYWI3M2Y1Yjc5MWNiZWQyZDkyMDY0NGNmMDMxNmYwY2I1ZDM2NjJiOTEyMDY0N2RhNTZhZmJlYjQ3YTk1Mjk1M2JjMWEzN2RlODU3ZTRiMzlmZDkyYjYzMmI4NTE1OWY0NmNkMDViNmFiYzIzMzhkNDYzMmQ0OGU5YTE3ODg2MGRlOGY2NWQ5YmMyM2YyNDUwN2I3YzU2MjllMGJkYWFjMDY3YzQ3NmM5YzM5NDFkODZmNzg4OTQ0ZDc0NDg1MmE2MWRhNzE2Zjk1ZjNiMDRmMDc4M2E1NjI5NDFiY2RkYTQzOTU5MGZkMTg2YjJhOGViZjE5YTVhN2U0ZjRhM2FhYWI3YTg3YTQzNDUyNGZiYzk3OTljOTkzMWViOGNlNGUzNGU5OWI2MDhjYWM5NGFiN2U3NDQ5NTY2OGRmMTM2MTg1ZjQ4N2Q5ZmJjYjY2MDVhZDcyNTM0NTQwM2VjNTdmM2Y2ZGIzNjRhODdmMzhmZWE0YjRjMjcxNTUyZTlmMmU0YTFiZQorU0lHOiAwZWVjNzU0MTA1NDQ3Zjk3ZDRhOWNkMjQ2YzdlZWRlM2ZkMDY5MDE4ZjBkMDFhNDFkZmFiY2EzZTkwYTc0MTgzNWVhNGE5ZDY4MjM0MjI2N2IyNTBmYzFjOGM1NDdjODk2MzJkOWY2ODlhZjUzNmM3OTI5MDA0ZGVkMGQ5NmYwOQorCitUU1Q6IDQ0MworU0s6ICBkYjVkNWY0MWZkZGQ2NzY4NzA5NzQ3YWI4MjM5YmI0ZjQyYTMxZDM0YjRmYTg4ODI0ZDk0YmY3OGQzMTQ5MjY0CitQSzogIDAzODU4Y2U2YjJkMjQwNzllZWFkNjZjYTBkZmU3NzJlY2RhOWFmNGQ0NmJjOWI1ZWRmZGMyODZiOTVmZTk3MTYKK01TRzogNjdlZTAzZGU0NWMzZTcwMzBkYjUyNDZlZTViNTFiZjI5OGJiYTNlNGQwOTM0OTM3ZmMxMmQ5YTYyOTYwNGM1M2MwNzBlMzBkNjExOTk5YTljZGRhZjJkOWFjZGE2YTlmNjcyMDJiMzUyMzY5ZDQ4MjYwZWViY2UwZTc4ZTRkNWFlNTRmNjc3NTIxZjg0YTdiZTAwMTdmYWIyNzhiMmI1NzI3NWVmYzVmYTU3YzYxNzE4NmZjMWJhNDllZGZiZDMzMDg2MzQ4NzhkODY0ZjJkYTE1ODNjYThkNTZjZTlmYWU3N2M0NjIwMzlhYmMzMmQwNTM5YzBhNjBiN2JiYmE1MDI5ZTkzMjlkMjc1NjgzZDljNGNlNzdkMGI5MDhhZGU5OGIwZTMyYjQ0MjBkOWFlZTJjYzEwZTRiZTkyMmY5NTcyNTgyZGQ4OTY3MTQxYzFkNDAyZTIxNWYyMGFlZTBhODkwZTIzNjhlNDA2ZGVhMTFiZDExMTc3ZjJlMDM4YWEyZjFhMGRmZjUxYTEyOGQ5NTVkNWU1ZjhkNWQwMDA5YWFhODI0NDBhOTY4NjRkNmM2OTdmOTEwZDFkZjIzMGY0NjdmMGUwMmEyZTAyYmY5ZTQ1ZGE5NWYyNTU0MTBjYzVhYWI4ZDg1ZjQ0OWE1ZGU5OWFhYmQ0NGZkNzYzZWMxNDYyOWYzZGJhYjFhMjQ3YmZmYjcxNzQ2NDhlNDNiOWZiMWViMGRmNWU0MTA5YjdhODhlMDU1MTJiMjA4NjViYWQzOWY5ZWE3OWQ1MmY1MTg4ZTdjYTUxOTQ0MDViZmIxYTA5NzI3NjE3ZjNmNmM4ODE5MjAwOGVkYmMwYzY1ODVkYmYyNjFmMTQ5ZGZmYjU5M2Q0MjcxNmU1YTU3NzdmNTQ2MmJlZWIxZTlhNTZhMmM3NmU2Y2I3MzUxMTdjYzExODNhMzhkMWUwMGIzMDNkMTc0YWE5Y2Y1YzczMWIyYzcwZWRkNzljYzVkYzk2ZjQwMThmMWQ3MWQ3MTk4YmJiN2QxMzRjZDJmZjhjMTVmOWEwNDI4MGRiMjZhOGZhOTk5N2ViODZiMTMzYzAyMmVkYTE1ZDhhZDVlNzdjYzlmNjI2MTU5NjBiYWMyZjliYmMzZWJiZDE5OGY3MmM1NzJiOTcxNTZmYTdmYTIyOWE5ODAxNGUxNzAKK1NJRzogNWIzZDBkYTcxMDIzNTU0ODZiZTRkNjljZmQ2NTg4NmM5ZDljODczOGIyOTNjYWZiMjNiMjEwNGJmZGFjOGQ3ZDAxMjk4ZWViMThmZGUzZGVkNjQ5MWQ0MWI0MTljYzY2Mzc1MmM0ZTY3ZGJlODk4NjgzM2QyMGU0ZWYzNDE4MGIKKworVFNUOiA0NDQKK1NLOiAgN2YwNDhkZmNjMjY1MGNkYTU5NDkxZDRjZTJiMjUzM2FlY2M4OWNjNGIzMzY4ODUxOTRiN2FkOTE3ZGI1Y2QxNAorUEs6ICAwODAwMWI1ZDQwOTU4YmNiMjcwYmVlYTliYWJhMzM4N2UzYTRiOTAwZmM0MjI3NTY1N2M2YzY5MWEyZTI2NGYyCitNU0c6IDkxNzUxOWNkYjMzNTE5NjgwYmNhZTA0ZmFhNzkwNzcxY2U3ZDEzOTdjMzQ1ZjFiMDNkZDc2MjU3NzZmM2YxOTU4MDk5MzI2MThiMWM2NGFjZDkzYWQwMDBlYWQwOTY1NGEzM2QxNGY3NDhiNDZiNjdhYWUwZmYxMmRmM2NjMTYzMjgwZjQ3Y2VkYzE2YTg1NzkwMzRlNDk4ODQyOTY3NzJlY2JkYmI3MWNhMjljMTY2MjMzNTMzYzhkZTU0MDEyYjQxMmNhMTNjYzI1OGY3YzU0NjVkODM0MjJmNTI0ZTRjMDVmODA2MzEzNDc4MzE5ZmQxNDNjZjUwODhlNjk4Mzc2OTdkMzYxNWQ4MGE3ZmE3ZTc0NDNmY2E2NWU3NTNhYzFiMTFkOGVmZjM0NzY2MzZhZTAyZDdhMjBmNGIyMzg4ZGFkNjg0MDAyZjVjZTk1N2NhZGRkMjA1M2QwZWQ1MzMxMzJhODFjYTE5YmIwODBiZDQzYmU5MzIwMjhjYjVmNmI5NjRmMDA4YjViMWMxYzU5OTNiYzliNTQ4NWIyMmJiZWY3MDFmMGEyNmEzZTY3NWVhMzExMjJiYmFlOTFkODY0YjU0ZDg5NWFmZGM3OWNhNThkNGZlNDQ5MjEzMzUzYjE0OWYzMTQzYjUxNDRkNzQ3YzViNDY5NzQ3OWFlNjg1Mjg0ODUzODQwNDRhYTJjOTliYTRiMTdiMTg0ZTk0OTgyMjY5YmRlMmRlMGIxNzcwNWQwYmZjNDZkNjkwNmE5MGVkZWZlODkxOTVkZTZiYjhmM2ZiNmEzNzQxODZjN2NkMDg2ZDEzZDFiMzUyNWEzOTk0ZGM4MDIwZTFhMDA1NTRhYzhhODJkNjA0N2M1YmZmNWU3ZjEyNDUwZjQ4NjVkYTE2MWUxYTAyMWZkOWJlOGJkMzNhMzJiYjU0YTRkZGY4NzQ1MTJlNzRiNWNmZDNmYzNjZDlhYzExZWRkODc4NDMzNjY4ZTNmY2M3ODJiOTdiNmQ5MDVhZGIwZWJlYzQyYzkyNTRhYzkwZjM1ODIyYzAwZjk3ZmYzZjBjN2MzOWVkM2M3Y2IzOTIwZjU2MDhiYjQ1ODM4YmIyNDJhNTJhODYzN2Q3Y2VjZGNmNDg5ZmExODNiNDU0NTFjNmM5ZmNiYmJmOTE0ZjVmN2U2YjIyM2JjYjQ2NzUKK1NJRzogNTgzMzcwOTcxZDI0NjUyYWQyMTNjNDI2MTU5MTE5MzhmYTlhYTNkOWI3MTk2OTQwZTZlYjA4MTUxMjAwYzdiNjcyOWQxZWZmOGY0ZjA5MDQwNzRkYWIzZGRkYTZhZjFlNGU1NjJiN2Q2MjIwYzFhNTYyNjgzYmVhYjI2OGY4MGUKKworVFNUOiA0NDUKK1NLOiAgOWZlYjNkZjg4YzQ5NGE5OTg0OWM2ZmNhMTk0MjAxNDc3YTJmYTc1NjRlMjlmYjA2Y2I0NGMxMTU0ZThjZWEzYQorUEs6ICBjMzU2MjhjYTZlZTI4ZWMxYzIzOWRkYzViYmEyYTllMDllNDg0NjgxNmIxNDNjNzRkZmEyYWVjMWY2MjU1MWI2CitNU0c6IDk1ZmI3NTgxYmQyNWZmZDQ0MmMzYWUzOGExOWJlYTczNDljN2I3NjgzYmE2NzY3ZTE0OGYwYWZjMTUzNzNmNjdjMTZkNDcxNzgxMjAyZTZkYTgwNTRlZDdmYjllZTIwNGNjMGY2M2MyMTBhNjcwYTVmOWNlZDQyOTQ1ODgxOTYzMzBkMzFiOGU4MzkyYmVmNmI0OGZlM2M5MjA3OGZhZTExMjg0YjRjM2JhMjBkOTM3ZTI3MTlkZTdiZjY3YzAwNjY5YWQyM2U2MTM4NGViZGY4YzZlNjA3MzU0MjhjMDg0ZmUyMTdmZGI0NzA5Y2NiNjA4M2ZjMGFlNGEwNTI3M2VlZjczOTAyM2QzNGJiNzNmNjYyZGFjZGYxMTBiNmRiZDNlNzRmYzE0OTFlOGM5NjU5NjA3NWZhZTVjMzZhYWJlMmEwYTUzMDUyYmY3N2M0NDYyNDM4MDYzYWE3YmMwYzUwYWI5MjBjOWViMjg4NjcxNTYwY2E1YmE3YWY0NGE1M2RiMmUyZmY0M2NhNTYwNjllYTU1MTdjYjIxNGU3NmZhYTUzZGJkYTEwMDAwM2M0ZjYxNzU0MTQwNDFiZTc0ZGUyMmNlMTU1ZDIyODFiNmY0MDM1YmUzOTg0MWFmZGI5NmRkODlhYTgwOGU2ODY1YmFlNjJkNmJlZGQ5MTlkM2U4NjUxMGI5ZmE1ZmVkZDE5NzdjNDEzMWIyYjg2ZTBmNDhkNzIxNWViMTNkNTQ5OGNhNWQyMzY4ZjgxODk1ZWQ4NTVhNTI3MTI0NjU3ZWM5NTM5ZWZlM2IyNDk5YTNiMGIzMzgyNjJmMjYzNDBlMjI1NTRjNzlmNGZhZDJiNGU0MTljNzBiYzFhMjEwN2QyMDY0NTZiNjM2ODc4MWJlNGI1ZTJjNTRkYTQyZDMzNjA0MGZiN2JhNDljMzJkNzUyMzIxYWRjZDkyOTg2ZTc4YmVkYjIyNmNlYWM1MDI5MjA4OWJiNTc5MDI3ZjcwMjIxNzc0NWFmZTA2YTViZTEzNmIzOTk4YTM2MDRjOWZmMmFjZDZmYTNmM2Y3MTYzM2QzMTAyZmJmMDMwNDdjNTQ4NmY4NGM0ZGMyNDQ3ZDg2Mzc5NjM4M2Q1NWYwOGM5ODFmZDRkZDdkYzFjYjcyYjhiYTQ0MzVhZjZhYmRkNzRlNmY2ZTY3OThmMWFlMgorU0lHOiBhMWMyNjA3ODM1YmVjMWExZDg3ODcyZmQ4ZWU0ODhkMGFlOWVkMjNkNDlmZDY3ODZmYzQ5OTY3MjVlNDliMzI2MjExOGJhYmI0ODM0ODc3YzdmNzhmYmVhYzAyZGY0MGFiMDkxYjhiNDIwZGM5OTUxMzgxZTNiY2RhMDY3MDUwMgorCitUU1Q6IDQ0NgorU0s6ICBiZmY2ODk1NWRkNmFlMGU4YmE4NWFiMGQwY2RhZjA0YTlmNWJlZmQ1ZWY2MDE0ZjQ5OTk0YTc4MzYzZGMxN2Y3CitQSzogIDBhZDk0OTNhZjgwYjE1ZjA3YTUyMWNjZDY3NGZlOWU1MjEyYTRhMjhjMTdjNzRmNjYwNWZmZWY3OGE0YWVkNzIKK01TRzogZDhmNTY1MGFhMzU4MWM0ZDM5YmQxYjhhZmM5NmMxYWQ3YzRiZjcyMzQyNmY5ZDdmYWJkMWE1YzhhYzFkMmZlNTRhOTcxZmFjNzY1ZTA1YWY2ZTQwN2Q3MjY5YmFiNjYxYjM0MzIyOTJhNDg0Zjk1MmMxMTA5NWJiZDIwYTE1ZDc3YzQxZjhmMzczMWE1MDRkNTE4ZWUxMGNkMDA2Yzk2ZWU1NzM3MmRlNWJlYTM0OGVjOGJhMTU5MTYyMTcwYzYzZTk3MGYxYzdhMzQ2NWEzZDU5MmUxZDU2YzY1NDBmYmRiNjAyMjhlMzQwOTA5NjQ2MzIwYzk1ZjI1Njk4Y2Q0ODk2YmRmZjU4ZTI1NjFlM2IzZDlhNzNiODk3NDc5MTJhMWNmNDY3ZDYzZTQxNDU1ZmRhNzc0NzdmNDZmZTY5MzdiYjBlNzlkOTJjY2Q1MmU4MmRiYTkwOGEwNWE1N2M3ZWNmNDk1NTRhYjQ0YzBiNzE4ZTNiZGQ1ZmMwYmY3MDcwZDljNThmODYwNTkxYzE4YmNhOGIzYTlhMTQ4YTA2NTQ4ZTBmMDE2MDJiMWU2ZjY4NjAzN2M5NGZmNzMyZTE1NWQ1MmQ1YjBiNDQ3MDNiM2QxMTE2M2UzZjU2ZTNiOWMxYjg2NDc2ZTRkY2JmYzUzZmEwNTk4NGU4Yzc1ZGQyMTg0M2NmOTZmOWU0OTRhYmJhZTcxODRhYTQyNzM2NjMzZTM4MTFhZWZmNDAyYjJmY2I3ZDdmNzAyZTQ0NzI0MWUyMmE1ODg0MmZkNmQwYzAzZDMzZmY1YjhjNzkyMjAwZTE3M2RhYTdiMjE3ZTRiMmY0NDMzZTZjMDIwYWNjZTUwMWI5MzIzYWEwMjQxMTQ0NDM0YjA4ZTlkMjQ2OTEzOWZmNjczNDIyMDg5MDA1NDYyMDBmZDk3MWE2NWRiZDZkYjZjMjFlM2VmOTE3MmFiYmExZWE5ZWEyYTI0OWFkZGYxYTFlYWEzY2UxMTkzOGIxM2UzMDkxM2NkMGRhZDQ5MWZjYmIzMjg1ZWEzNzhiOGVmOTIyN2YzZmE4MGI1ODZlY2ZlYWUxMzcwNjZmODQ0OGFjZGZiNzhkNmQzZTllZjRhNmIzNjJkZjQyNDFhZDlhZTI1M2I4ZTE1OTdkNjU2ZTAwMGNlYTQ0N2EwMmZhNDkzMzMyODYwOWJiYTAKK1NJRzogOTMxOWVlZjc0MDYzM2FkYTFhZjBlMTM3NjQ0YzYxZmIzZTExYmE0YjAxZDNjNmYyNTM5MmRjOTM2Nzg3MmEyM2JlNTYzMTBkMzEyZWZjYjkxYmRiYWI3OGE3NWU1NzZlYmU5MDgxOTcyNDE1ZjU2MmRiNDFiYWY1ZTIzMzhiMDcKKworVFNUOiA0NDcKK1NLOiAgMWJhOTE5YzA2NmJiNTZlNjQwYzMzMzU5NjhlMWQxYjViY2MwOTMzODNlMmQ3Y2Y4YjVmZmY1YzYxZWM0N2E3NworUEs6ICA4MDRjOTBiZGMyYjM2MThiMDFmMDc1ZTA0MWZhOTcxYjgzYzViNmNmYTNiNmIzOTc0ZjNmYTQzNTk5YmVhY2FiCitNU0c6IDg3YzVjNzVkOGFkMDdkNTJhY2Q3ODFkMWJiOTVmNzhjNzBlMjFjMmRkNjZmN2FhNDQyMzQxNTJmOTgyMzRkMTI4MzU4YThhZWU5OGVhOTAzYTc3YjQ0MWRiMTQ0N2FlNmZmMzQzMmRkZDQ1NzBmN2Y1ODAzNjEyMmMxZmRjYzkzY2IyMTU3MzczOWMxOWNjYWE0MTE1MDhlMDhkZTI2MDZmM2Q4ZjJkYjg5ZGY2YTQ0YTQ2MTMzZDU3MDE4NDYyNjI3ZTIyZjU3ZWYzNmQxZGUwMjRkZTNkNGFlNDFiNzUyZGY0ODIxMTU1OTM0YjQ0N2IyZWZmZTUxMjQ4NzUyMWJlMDM1NjgzMmE3NGNlMGUyZDgzMDFiNzlmOTMxNzVlOGI2Yjk2MWIxZGY2MzdkOGFjYWRjODg0NTQzYzY4NjRmODAyNWVjZWNlYzdjNmU0ZmUwZmVjZmM0MGRjZDk1ZThkNmFiOTNjZTI1NTk1Mzg0NDM2YjU5OGI3M2M3NGIwM2Q0OWVkNTAwMmMwZjg1OGNmZDlkMGRmNjFlZGU5MzdjYzQxNjU5ZDY3MDhiOTZmYzVhYWFkZWUxMDllMmE2ODg0NmJhZjJjMjQ2ZGZjZjNkMjdjMjhiZDEzNzFlMzVmYzk0MTI2MzE0NDJlZTc1ZjM4YzZlNDk1ODA3MGE3NGY2ZTZhMjIwZjc1YzcyODBlYWI0NzM3ZDk3ZTM3ODgyZjM2MjQ4MTE2NzVmMTZjYWY2MGNiOTQ0YmNlOTJlNzU4ODRjNTY0ODNjNjFmMjZiNjM3MWIxYjUxMjM3NjIxYTA2NTQzZWI0YWJlYTdiZWNjNGZjMzFkYmI1NDc1YjNkZWI5YmIzYzg5OTIzODcxMDQ4MzBjNjA3MmFmZTFhZjI0NGJmNjgxYTQwMzI5YzliMzc3NzJiMDljNWU4OGU3OGY3ZGZmYmMwNDU0OWZmYTEzYjQxNDRkZGZhNTM4ZmM0YjMzMDA1NDBhZDgzMDIxNWUyNWYxMTQ0NmQyODlmMzMxMjJjMmM4ODBkZTNkYTcxYzQ1M2Q3ZTg4ZjdjYTRlYTNkMTI1NWU4MmY0YmM5ZTU1MzNkYzQwMWMzMzA0MGUxNjk0MGIyY2Y5Y2YyMWZlYWNhMWMyYzZjMzMzMzdjZjc1ZTE4ODRiNDgzYmY4MDE1MzZkMzA0MDg5MTE1YTAKK1NJRzogNTAzZWI3ZWQ2ZGUxYjc3NmM5NTJmMjU1YmJkNGJjZmIwZTQ4YmM3MGMyY2MyZjFmNzJiZjY4ODE0NzkwNDBjNDc1MjRlYzU0MmFlMTNmNjAwNWNhNTAxNmI1OGI3MzZhNTA4OThkZDA1NjlkNGQzOGFkMjk4NjMwZDY4YWRiMGIKKworVFNUOiA0NDgKK1NLOiAgOWIzNjI0N2MxNzcxMGU5NTI2MWE3ZDcwMmY1N2ZlODFmMjk3MTExN2E1MGM4NzkyMDE5M2IzODZkNDk0Y2E5NworUEs6ICAyOWFlMzlmMjczZTM1ZmIzZjYxMWRhMDkxNjAwNjUwZWZiYzRmYzRkMWU3YjRjNzZhY2VkNWE4M2Y4MjYzNGYzCitNU0c6IGU4ZDlkNTNiYTI3ZTk4ZWRkNTVkZjNjNmIyNDVlYWNkZGM4YTQwZTNlZmIwMDdiYzkxOGVjNWE4NjkxNzhhMTcwYmI0YTYzNWI3ZjhmNzQyZTM3YWQ0NWQxNGE3NDM0NGE2YjUyMjgzMGE1MjIxMDZlYjk2MGRhZjE5MmRjMWUwZmQ3MGYxNjE2MGUxMjI1MTY4OTJkMGUyYWJkMGQ0YWUwZjBkMmU1YWRjYzk5YWQ1NTMwMmUyNTFiM2U3YTRkMGNiMzM3NzRhNDk3MDQ5OTA1YzMzZGUxZmJiYzFhZDJiNmM2NDUyOTVmZTQxNmI0ZDEyYjIzMmVmZTBhMzNjZDJhZDg3MzJlYmExYzNjYjBlYWViMGIyYTU3ZmEwM2VjNTY3Y2EyOTIxMGJmNmZmOTU0MmE3NjZmNDk2ZmU2ODA1OGFhOTgzODA2Y2JlN2FiMTBhNDc5MjBiYWM4MjQ4ODE4ZTU0YTQxNTUxYzlhMDk1OWU4OTk0Y2FjNjBmYzg2OGFkNDhiNWEyNGQ1ZjI0YTdhNWEzZmQ5MGI4NDdlODE3YWQzZGQ1ZDBkNmY4ZGUyZDIwNGY2NDI0ODNiZDUzNTg1YTkyZWY5MjU0MTVhOWIzOGZiYmYwN2ZjMGYzNWU3MDc1NjljZjQ4OGIyMDU0NTNjZTU0MzNlYmE2ZmRlODc4MWFmNzJiNTJiZmJjYWI4NWVhZDM4NWQ5ZDMxNzVlMjFhZDMzNzNhZDUzNWNmMGUzNTdlZDZiNTM4M2VmMzgyOWE5ZDUwOTViODdkYzlhYWRiZTBjYTdhYmFkZjMzZWMzYjZmZmQ2ZWI5NGFmZGNjMTJlOGQ2NmE2ZmMwNWFjZjk3MzY4ZGIwZjY5NTY1ZGNkOGZlZjRkMWU0OWQ3ZGQ0YWMwNTNjMjE4ZjUyNDBjODEyZDRlYmJhNDQwZGM1NGNhY2RkYjFjMzkzMjllNWJkMGMzYzgwZGMzMjU5YTgwZjA1OWY5NDY3OWFhMDc5NGNhMDExNWNjNjJhZjI1ZTEyNGNiOGE5ZDQxNjBlYWNlNmQyMmM3YjFjNDQ1NDRmODExNDJhMTllYmIwMmE5YmRhNjQyOWM1MGU3ODNkYjRhMDdmMDIxOWU4NTdjOGQzYzU2NTVhNTgyODMxYzhlYWJjM2YxOWI1OWFkOGQyYzcxNGFkZWFmNDAzOWQ1Y2Y3MAorU0lHOiAwMzU5NzBhNjcyZTkzZjg3ZWI0MmNjMzk2ZjZlYTdlMWIzZGQ1YzU5NTE1NzI4MjZkMTA3NWExNWMyZDdlNDU0ZGYxOTViNTFhYWU4ZGM2MWVmN2FiODk1NDg1ZjY0ZTU5ODk1NzNkOThhMDYyZTY3YWU3MzU2ZmU1YzllM2IwZgorCitUU1Q6IDQ0OQorU0s6ICA2ZmVkZTczOTZjNDYyMDMzMTg5YWNkMjNkMmY5ZDAyYjY4ODk4ZDM1ZjNhMDFhNzk4ZmMyNGQ0ODhkZTkzYTc4CitQSzogIGIzNDA2MjA2MGIyYzIwMDc2YTk4ZmVhOTM5YjNiM2E1MDQ1MWE1ZjQ5ZjgzNTFjMGFkNzU5MWRiYmViYjEzMGYKK01TRzogNWFiY2MxNGI5ZDg1NzhkZTA4MzIxZGUwZDQxNWUzZDQwZTlkZTMxZTE4ODgxMzc0NzVjZTYyYmM2ZmJlZThmZGQwM2I5ZDQ3YzdiODhiYmNlYjgwNDQ0NDQ5MGJmNmEzY2NiN2EyNzMyNjFlMjQwMDRlYTY3Y2VmYTNkNWQxNzM1NzZkMDFlMzhmNzZjMWUwZTUxNTA4M2M5N2U3OTkxNGFjZjJiZTQxNjBlZjkzNjBiYmU5ODZiMzZlOWZmOTMzNDZiMGU3MDY5MWQ5MzRlNDdmOGE1MDNmYTkzM2FiMmE1MDQyNjk0N2NkYThlODEwYzllYmUzYjM2OTgyZjA5YWVlNjA5MjczOWZhMjM1OGI2MTNjN2YxMjlkYjBkY2JlMzY4YmVlNTJmMmY3ZjFkZmUzZDI0MzQ2MDViNWFmY2YyNTYwNzE3MTdkOTI0ZmQwODAzYmJkMGRkMWY5NTU1Y2U4MzRkYWM3ODFkZjRjYzdhYTE5ZTdmMTFkYTlmYjk5Y2I5ZTZiOWUxZTZmYjRmN2U4ZGNiMjIzNmMyOGFlYjZjYmM1NWExMzBlMDNjMWIxN2E5OTFjY2ExYjc5NGU2YzEzNzMyZDViMGE2NmY2ZWJhODYwZWNiOTg1NTVhYTRjMjE4ZDExMmIxMTZiY2UyMzgyOTVkZTE0Mjc0MWY2ODdiZTBiMjQ4N2Y1OGZmYzVjMTJhMGE1MTlmMWUyMzc5MzI0MmVmODU3ZWQzOThhMjA2OTlkNDM1MTQ1M2ZjMmYwOTI3NjJhYmRlMzRmNGRhMmRiZTBjZTJhYWJhZjZiYzRjMDE1OWYzZmUxYWVhMTZhMDM2ZjdlYWVjZDYyOTUzOGYzZTBlZWQ4M2M5YTRkYzFhYmMyMzhmOTBkYWFmNDg5ZmQ2MWIzNGQ5MzdiNmY0NjA3YTc4OGJhYTgyMDYxOTQzZGJhYjI2YzFkMzg0ZDhkNDlmOTkzNDg4MDBiZjM2MWY4NzFmNWQ2Y2RhMThmNjg5OTE4Y2VjMzFhZDE1OGYxODYzZDEzZmZhYzU0MDVjMTYyYzMyZGUwNmUzMjk5NGNjNDEwNmY5NWJiNGZmZmRiZWZlN2Q2MjllYzc3OTczOTQ2MDlmZGJmZWFkYjQ2OTI3MzcwYTExZmIzODQ3MTU0MGY5NTFiOTNjNmViMjM4NjY4ZGMwMDZjMjE2NjBiYTIKK1NJRzogODhhODNlMjAxMmQyMDljYTAzYjhlYmY2ZGU1YmI3ZWY0Y2NiNWUzZGY1Y2FjNzg5NTRhYTY5NDkzMGU0ZGU4MjU0NGVmNTA4M2M0ODkyZGI5ZjA1ZDc3YmY2M2Y0ZmRmY2UxNWE0ZDFjM2Y4NWJhZTgwNzcwNjJiZWMwZTdiMDcKKworVFNUOiA0NTAKK1NLOiAgZDU1OTU4MDEzNGFiMDUwYWNhNDQ2ZWE3NzUwZWY2YjM3MWQ5MmQ3NjQ1ZWM3NjM1ZmU3ODUxMTAwYmM0ZTUxZQorUEs6ICBkZTUwMjBjZDIxYThiMzIzMzlkZWNiZWRmZjI0NjY0ZDk1ODAzMjYzMjdhZWRmMDljNWVjNmIzZmU1NDA1MjI2CitNU0c6IDY4NDJlMzE5MGExMTBlZWU5NmM1MDdkNGJjYjRjNTQ4YzNhMGVkN2IxYThlZDc3ZGQ5M2IzODYxM2IyM2M3M2U4MzBiMjA1ZTYyNjUxOTIxYWQ4Mjk2YjA4ZDFlMTAwOGFkNzhmMjk5NmUzYzdmMzgwMzJlNDY3Y2ZmZWNkNzdiODUyNWUyNDNjZWMwMjFmODUyOTZhZmQ1NDVkN2JlMWE2MjU2OGJiMGNmY2RiOTBkNjE0ZWQ3OThiZmI3ZWZjNjU1MzI2ODE2YTYxMDgyMjUxZGYwMTYxM2FhYzg4ZWZjZWExZTBlYTI5NjFiOGY5MjFlYmUxNTU4ZGVlODMzNzRhMDExM2E3OGM1NTg1N2NlMjA1NWJiMmM0OGJhZGJkM2Q4ZjRjYjE5NzM0ZDAwZDA2MDRiNjE5MDczMDIwZDcyYTk5YTE5MjNlNjE2MGEwOTk0NjU2N2ZkNGJkYTY2NDQyZWY1YTczNjA3ODZkMTc4ZGFlNDQ5MjJmMzUwY2UyZWRjNmFmNzNkMWJkODBkYzAzZWMzY2E3MDA1ZjQxMDlkMTBjNmQ0ZjdkOGZhNjE3MzUxMTBmOGRiYWVkZjkxYTBiYWQ3ZDdmYjVjMDRkNzA2MzczYzE1YzY0NTA2M2ZmNGI0ZmJkMmQ1NTliMGFmYWQ0MzJkNGM0OTZjZDhhYmZlYTI4NmZhNjc1ZGMwNzY3MjZlYzUyMmIzYTNjMmY0N2FlY2M1MzlmNDhhNzkyMTY5YzRjYzhjZDQxY2QyY2I2YjYzZGRiYzE5MzczYWM5NjkxYzJiYzJmNzhmMjI2MDNkNTUxMzcxNWExNmQ0NTc0ZTdhY2M0YmVhNmRjZDhjYTdmMTk4NjVhNDlkMzY2NGEyMTBkZmFkMjkwNzc0YjEwYjcxODhmMjU1YjNiZTRkYzhmYTg2ZjhkYTNmNzNhNGU3YzkyOTk1MWRmMzBmZTY2YTE3YzhjZWUyM2U0ZjJlZDIwNjNmMGIwMmFiNDAzNzJjYmU1NGI5YTcwOGRmN2M0OGEwNjU2NmQzOWIxOTQzNGM2Yzc2Njk4N2IzZWJiMDA2NzVmNDRjNGIzYzFlOWY0NTA0ZTdhOTI3MDU4OWMwZDBmNGNiNzM0MjM1YTU4ZWYwNzRjZjlkZWNmMzYwMWFlZWNhOWYxZDhlMzU2Y2IyZGI1ZmNlNzljYmMzNjE0M2YzNGIKK1NJRzogNmZjYjFhYzkyOTBhYjc2N2Q1OWI1OThjOWEyNGVjZGI2YzA1YmIwMjNlYzM2MDE0YTQwZDkwOGVmMGRjMzc4YTQ1MjhiMzc2MGQ4ODlhNzkxNzRlMjFjYWUzNWRmNDVkNDI3YmE2ZWE4MTJiZGRjYTE2ZTM1YTY5YjVlNzlmMGEKKworVFNUOiA0NTEKK1NLOiAgOWQ0Y2U5NzU1NDc4NzY2MzZmZWEyNTQzN2MyODgwYzlhYThlZTZiMjcwZDFiMmRhMTk3YzhkN2Y5NWU3ZGNjYworUEs6ICBiZGU0OTkzYzAzMDQ3N2MzNTg5MGFhZTgyYmI1MDg3ZTkxNGU2NGI5NGZmYzY0ZTJkN2E1YTdjOTE5ZTJkOTAyCitNU0c6IGVhMGZhMzJhNGEyODg4MTEzMDFiOWVlNTMzZmEzNTFmZGZiZjZiYzFkMDU1NWE3NDAyNzY3YTNhOTE5ODU1OGY3NGJiYTcwMzE4NTc5OTViOWYzMjYyMjZmMWRkNWRmMTA3YjA2MzQyMjAzZWI4ZDQwYzVmMWRjOTViNGYzZjg4OTc1YWEyNGFmODc2OWUyNjcwYzQ2NjcxYmViYjdhMGYxYjc1Njg3MjlhZWU0NzdlODk4OGFmOWM3NDlmMzIwMjcwODE3MWZkOTRiMzM3YWU2N2VkMjFhNmM0NDE3NDAxNGIwYjBlYjViYTcxYzI3Nzk3OGQ0ODhjMjRjNGE3ODQxMzA5ODQ2YjRlMzBhNGZiYmNmYzQ1MDc4ZDdlMTQwMTQxMTRiMWFjNjRmN2MzM2M5YWMyNWVhNTYyNmMyYzgxOWZiYWEyYTRkZThhMmJmNWYxMzY1ZDZiNzA0MDdlODA5NGY5OTE5N2NlMWYwYzM1ZTExYTk4ZmJlMzcyNDE0ZWEyMDY0YTNhMTJkMWNkNWM4ZGY4ZmMwZTc5ZjViNzcwYjU4ZjQ3N2Y5MTk3NmNhMDEzOTg5NTEyMGUyNDZiYWFiNWEwMjZmMmQzOWM2ODdkYzA3ODgzMzRiNWM2MjZkNTJjZGViZTA1ZWFmMzA4NjRiNDEzZWViZGM1NTgxZWYwMGQ0MzkyNzZlNTJmNDc5YzljMDViMTE2Mzk1ODI2YjYwNDkwYjNjZTcwMGNjMDAyN2Y2MWU0NmNhMmY2ZmJjMmM5ZGUyZTgwMDgwNjU1MGFmYjA2ZDRhMDhlYWM3YTc1OGUyNDU4MmE0ZDZkNDI4YjQzM2QzNjVmYzMxZDQ0NDQ2MDdhZmI2NGYxNWUzNzA3OTQwMDVhM2EyMjQ0ZTY2NmQ1ZDRjMzhhZDIwMDljNzY5YTUxY2RiZjczOGQyMzU5NDJmNDEyZDA3ZmVlYjczYjM2NTdkMGIwYzkxY2I1OTQwYmFkNmE3MDZlMTRlZGNkYzM0MjI1YjFjMWYzOGIxYWJlY2IyYWRjYWY4MTkxNTVhOTRmZTE5MGZkNTU2ODIyZDU1OWQ5YzQ3MDg1NGQzYTQzYmZiODY4ZGFkZDZlNDQzZDk4ZWU4N2U0ZDgyODRmNWNmM2E2ZGFmYWYyOTViOTAyODM2YzY0MDUxMWU2MTBhZTdkMGNiMWIxZDNkNjA3OWZlNgorU0lHOiBiZTE3NDQ0Y2Q0NjVhODdhOTcxZGY4NGViMTAyZjljN2E2MjZhN2M0ZmY3YWVhNTFkMzJjODEzNTNkNWRiYzA3MzkzY2EwM2RiODk3ZDFmZjA5OTQ1YzRkOTFkOThjOWQ5MWFjYmRjN2NjN2YzNDE0NGQ0ZDY5ZWIwNGQ4MWYwYworCitUU1Q6IDQ1MgorU0s6ICAwMjczODY4MjMyZjViZTQ4NTkyY2ZhMDUxMzRlOGQ1NTU0ZWQxZjlhNTdiYzdlMzk4MmEzMzBjNTdlNWE3ZjNhCitQSzogIGYxNzIyMDg3ODJkYjY2ZDQ2NmNiZTRmNDQxN2Y2ZmM0NzdiNzM0OWYyYTk4ZGI1NmMwM2E0NzIyNzU0NmJjNWEKK01TRzogZjdhMWQ0NjE0Y2M2NGEzYmM0OGYwMGM2Mjc2MzA0ZjM0ZDRkZmQxNWUwNjE3YjkzY2NlZjEyNmM1YzYzOGM5ZDk5NTNhYWJiN2RmNDJkZjRlMGFhYTdlYWM5NmE0YjM4YzdiYTc1OGQ4NjBjOTBkMDVlM2QxNGU0NzllNTQ1ZjMxOWIwZTVhODVhZDhmMDk5MWI0M2Q2ZTQ5YzI0ZmEwNjBlM2U1ZGY5NWM5OGQ5NDUxYWI4MzNlMTJhYTk3ZjQwNDYxMWJiYTM1OTQ5NjI2NWE2ZGIxMTkxN2QwZGE1YzZhNzAyZDBiMTAyZGUzNmRkMGM5OGRmNWI1NDgwNmNlNjI2YmI5NjM3NDQ3NWY2OGE2MDYwZWIzNTBhN2QyYWFlMzIwNGIzZGZkZjlmMWUzMWJlODFmNzE3MGY4YTFiOTM4NTQxM2ZmOGY2ODgxZTEwYzFlOGRhNGM4OGFmYjUwNjM5YWI0NDg4N2FjYTJhYmVlY2VkZjExMGQyOTU4YzEzZmQzMzkwZDFiOTZhNzYyZDE2Y2UxOTY5MjBjZTg1ZjZjNDE1YmVkNTQ1YjE0NDUzMDJhNmYwMDFlYjhkMDBlOTdjNzUxODg3ODY4ZDQ4MWEwYjFlNGRmYTA0YjZmNzYxMDg2ZWU4ZTY5N2IwMTllMDE3MTA0YmFmYjk4ZmNhMjQyZTMzNGM2ZjE4ZjFkYjViNmYyOTVmMDVjNTU5MzYxYzY4MzFkYWJjNDJjMjExMDcwM2Y5ZDFmNjRlMTJkZGYyNmE4Njc5ODU0ZTlmOGVmODQ3OWUxZjEyYzM1NDQ3YWFjMDJlYTdmMjQyZTU4NjMyY2YyZmQwNjNmZTY2NTA3MDQ0NWI4MGYzZGM2YTMzMDNiYmE5NmUwNWZhODhlZWMyMDFjNWMyZDAwY2E4MWI4ZGE2OTY5ZDBhNGRkMDQ4M2IzNDc3ZDMyNWE3MWZhY2Q2ZmEyMjA5YjQ4Y2I0ZjY1MjVkYTczYzljMDViMmQ5Nzg5YjAxNDQ4ZTE1MjdlNTZhMDlhOWJjNjEzNmQ5ODM3MjQzYzIwNzdiOTI1YmJiOTMzZjhmYjFkYWFjOTYzMzk4YzU4MDJhZWRhM2JiY2E4YWUzYjhmNGE5YTg3MWY3ZWE4ZTJjMGNlODk4YzU2NjIxN2I1YzA2ZmY1NWZmOWY0ZmU3ODM5OGFlNzk3MzY0MWVhZmI1MjEKK1NJRzogMTVlOGQ4ZGM3ZDVkMjUzNTlkNmExMGQwNGVlNDE5MThhOWM5ZGY0Yzg3YmUyNjlmYTgzMjQzNGQ1MzAxZGIwMjI0ODFiZmEzOTVhM2UzNDY2Zjk1NTRjZWVlMDUzMmE4MTgzYTBkMDU1MGU3ZDFhYmU5OWZjNjk0YzZmZjkzMDEKKworVFNUOiA0NTMKK1NLOiAgMzM2YTgzYjU1YWJmNGMwMmUyNWU1NDAzMjliNTI3NTg0M2MyZWNiOGRmNjkzOTViNWE1ZTI0MWJkMGQ4YzEwZAorUEs6ICBkZDYwNTY5ODQ0NTcwYzlmMGE4MjY0M2Y0NDY0NzhiNWFjNmZjNTQyMjE0MjMxYTdjYTY1NmE5MmI1ZmRhYTU0CitNU0c6IDlhZmVlOGFiNDgyMDEwZTI5MjY0YjQwNmQ5YjQ5NDUzZDFjZTZkNTUwOTM5MDcyMTgyODYzZTQ2NjUyODRhYjA1ZDg2MjU4ZTA2MjNiMTg3NTRjNDc4NTIzOGY2OTdmMDc1YWRmYjllMWQzMWE0MmU4NTkzNGVjMDcxZGRkZGVjYzJlNmMyZjYxMzM0YTc5NTI2Nzg4YjQ5NTIxOTA3MTY5MDZkZGUxN2ZiYTU1NmVlYTRjOGI1OTcyNzUxNGY2ZjU2MTVhMTljYTM2ZGEzNThmYWU2YTZjNTRmN2Y0YjdhOTI5ZTMxYmE3Y2M3MWJkZTc4ODJmYTlmZmQ4NzMwMDEzNjQwOWNhZjNjYTY0ZWVmZWE2MTZhZWQ1OGRhNWRmYmYyOGI2NjhlYzFjY2NmZmNlZjZlMmUxNGY4MTA5ZTljYmY3NmNmYTQxNGY5MWFjMDBmNDhlOTNlYWRhMzg1ZGQzZDVjMTZlMWEzOWVhM2RkNTVjNzYxZmNhMzYxYjQyOGY1MTZjMDVlNjk0ZmU1YzNjMzQ1Y2Q5NDQ1NzE4N2E4ZTYwNGIyMDBhMWEwZjkzN2FlODlmNGQ2YjU0MjFkZmZjZjdjYTE1ZjJlMmMyNTM3OGE0MTEzMjMzZjc2MTNmNDU3MGFhNGI5MDlhOTEzNWVhZTRjN2I5ZWFkNDU4MDA3YWUxNzEyNmExMWQxNDUyNThhZjk1NjNkYjJmN2U4OTI1NDMxODc4YjBlZWNhOGFmZmMwMWFjNTkxM2JmNWJhYzRmYTNhODU3YzU0Y2M4OTA2ZDZhZjc3ZGU2YjkzMjZiNjUwNjE1MTA5OWU4N2U5OWIxZTgxOWM2ZmJlMDgyNjg4ZjM0YjgwM2Q1ODhlNDE2ZDg1MzE2OTc2NWQ2MmY3ZTBiZGY3MmM1Y2Q2NjY2OWEwMzM1NTYyMzM2NzM1ZTdlZmI3MzRhMmZhZGEzMjdmODU4YmVjNjAyZDBkYTA4ZWJhNDQ3OWU3ZjZkYzRkZWY2ZTRlYmRiYjczMGVlOTFhMzM0NDVjYWRjOWRmNTJjODI1YWQzNjE0OWNlZmJjNTFhYjEwMjAzMzUzMDgxNGJhZmE3ZTg3OTYxYjA2MzY3ZmY4OTZmMDhhZTMzNGE5YjFhYWQ3MDNkYTY4NjcwNmMxMWEwNDk0M2VhNzVlMTI5OTJkY2Y2MTA2ZTM3MjA3N2NkMDMxMTAyOWYKK1NJRzogZDI2M2Y1NmQ1OWNiOWIyODk2YTk0NzI2N2MyZWQ3OGE5NDViYWM1YWJkYmYzYzE0ZGMzYWQwOTJiMjMwOGNiOTMxNWM0NjQ5NDJhMGEyMGIyMDI0NTExZDc2NmU4NWM5MzY0OTlhMTQ5Y2QwYmJiMjA5MTUwYTE2NDMyNjUyMDAKKworVFNUOiA0NTQKK1NLOiAgODg0MDkxNzI2MThiNDkwMzkzZGIyN2Q5NjAxNzFjYmMxODdlYWY0ZGQ4YjMyMGIzZDJmODI0OTgwMDQzNzE4ZgorUEs6ICBjZTJlN2M1ODM5ZWY1NjMyYTEyM2RjMzczZGMxNGIxZjA1MDU3NjZlOTY3NTQwNzYwNGNhN2NmNTRlOGQ0NGIyCitNU0c6IGZiM2U4MmYxMWJjMjg2MjY3ZTEyMzgxN2FkODg2NGUwNzdkOWY3YThlN2ExNjNhYzdlZWFmOTNkNTVkZDExMWRlODA4M2I2NmI1M2NlN2JjNzcxZmM1MDcxYTJkN2FjMmY4NWQ2ZmM2YWRjZmNlYzQ0NmUxNmFhMTA0NmRmMzcyMDlhZDdhMjljZjk2NjViNDM5YTU0ZDZmOGQ5NDJmODliZGFhNTZmMmYxMTI2MGNjOTU5OTMwMzhiMGU4ZmJkYjMyMTRmMTQyZTZjOTBiNjFhMWQyYjE0MjA3NjIwNmFmMzBhYzM1Nzg0YTZkYzE1YTFlNzkyNTFhOGM3NzMxYTFjNTM5NzgwMzhmOGQ3NmQ3MGM2YzFjZGY1MjlmYmRiODRkMTUwN2RjZmZkZDQyODczZGZhNmE4ZmU2YmQ2ZjdmZDI5YzgwZTRiMmY5MzNkMmI2YzllNjJjOTQ1N2U2NjU0NzI2NTUwNTliNjNiNjE4ZTJhOWE4ZTViOWU0MWMzNjQ2MTczYTg5MmI4ZTZkNGJjYWQ2YTYyYTZmY2NkMzQ1NTg5MGI1OGVjMjY4MWE5NWNjOTc3NmE5ZmNlODNjNTRhOWVmMzEyYTMzMTk1OWM3ZWYzZjc5ZWU1NzZlYjdiNzk0NjljOTIzNGIxZWFlZjYwOTg4NDcwOGZlNGJiMGVmYWM2NjJkYTg3MWJhNjFkZGFiYjNmY2JkZWI4ZjYzNTY1N2RkOWE1ZDczMTFlNjM5YTgyNDg1OGI5YTk4NjhkM2Y5Mzg0ZGE2MTJjN2YyZTc3MWE0NmJkMjYyNGM5OWVhMmI2Y2NiY2E5OTZjMWQ5YzM3NTU1NGYyYTU1MTYxOWNlNmQ1ZTZlNGQ2Yjg0NGE0ZGJlYTgzYmE3MzIzMzFmY2Y0NjU3MmMxZmIwZTI1N2NlMTA0MWIyNjVkZjAyZTY5MGE5MjgxNGJiZjNiNWVjYWM2OWVlOTk4NzY2YTAyYjBkMmY5MDhiM2MxNWY5NTI2OTk2MTZmMmMwN2Q1ODkxOTg5ODllNjA1NmMxNjMxOWFhYjZjZjg3NzE5MDJjMDc4MDQ2YTg4YjI1NzBjMTNiYzVlZGViYTJlZDFlM2JhMTMxZGFmOTRlNjg5MTg2MmJiM2RlN2QxMDYzZmU0MDUzMDdhNWNkOTc1NjkzZTlkNThlMTdjNjkwZWVlZjRhMjYwM2NhZmM2OGMyYgorU0lHOiA5M2I2ZTI5ZDYzOTQ1ZDVjNDI3Mzg3ZDAwNmM3ZjBiMDE5NTZhOTVmYzA0MzZlZDQyYjQ2ZDBmMTdiNWJiMTkzZWE4YzBlYmJmM2Q2ZDEzYmI1MzllMzVjOTFmM2YwZjlmYTM0MTRhMDIyM2M5MDYwYmFjODM2NTNjNmZjZDkwNgorCitUU1Q6IDQ1NQorU0s6ICBlNTcxMTg5YjVjZDllNzg4MzAyZGUzOTE5ZDg1MGMyMjdkY2JiNjE1MDIyZTU2OGJkYWViMzdhYzViMjkzOWM1CitQSzogIGVkZGE4OTBmNDJkZDVmYmM3MzE2YTVmYWRmYmVjMzg1NTZmMjNmNTFiOGVmZDI2MjU0MzdmNmI1MDY5ZjFlZTUKK01TRzogYjYyYzg2N2FkNjIyNzQzNWJmYTZkYWI4MzA2ODRlMzhkMTk2ZTFmODYxYWFkZTBmZDZhNzY5OWI2ZDYwOTAxZmVmYjJkNzk5YzM1YzZmM2Q4YmI5NGRlZWU4MzQ0MDM5ODE4NjZiYWI4NDk0NmFlOTQ3NmM3NWU5ZjFkMzYwMmI0MmNiMmRiNDM3YmZmMzNhNzc1ODIyZjBkNmEyNTdkNGI3NTQwMGViYTViOGFiYjMxNGI3MWZjNmI0NmY4YTM0ZTg2MWE5YTYyYWJmMzNkZTg0ODJmNjNmOWQ3MTY5ZTc3M2EyZGNlYmVlMDM3MDVkYWMxMTdmZDE0OTliNjhlNzQxNGY1MWZmOTQzN2YyNTNhMWQ5OTAxZWMzYjBiYmE4Njk2NWExOTM4MzY1NTQ4N2I1ODAxMGY4MDQ5MDlkZTFmZmIyMjEyYzAyNTJkZGQ5YmYyYTU2YWM0NmJkNTljMGMzNGRkNTllNDY1OThiNmJhYmQ0ZTVmM2ZmZmRlNTVlNDhkYWIwMzk4YzIyYWY5ZTI2YmFkZGY3NzI3NWU1ZjAxN2IzNWE5YjhmODQzNWY5NjMxOTM2YjM5MWNiOTVkN2FkZjM1ZDFkODU0NWEwZmQwNjY0MTJkNTA4OTY3YmJlOWEyMDI0NWEyNjllM2JlMjc3NzExN2U3NWZiYWMxNzBkYmEzNTJiZTY5YjI1NGQzNTNiM2IyY2IzYjdlMjFiNzIxYWE5ZmUwNDRmODkxNmI0YjJhNmY4YzI4ZjhhYmU2NmFjOTJiOTEzMjNhYzczYWZkOTNkZmJlZWFlZWYyNmQxOWJkOWY2N2U5OWQ0OGNkMmFkMmQzZTU1ZTQ1ZDI0ZDU0YjUwZjQ0YTM5YjkwZTI0MmViZTliNDJiZWJkYjIzMGM0NzBiZGZkZTFiYzc3MjFjMzEyMDAwODQ3NzM5M2RjYzJlMTVmZDIyYjI1MWZlYjBlMThiMDI4ODNjMDc4YWVlNGZiNzYwNjU1YTY3MWRjN2I4YWFkYjlhNTYyNDIwYTNjMmVmYTJkMzQyZTFlMDA5OWQ5NTFiNDIyNDI5ODRmNTk0ZTY5MTRmZTI4MmIxZWUxMjg3MzU5ODRlZjkzYTY2OWU2ZWNiYTI2YzlmY2I5ZjA5ZjA5MjU2NjQ1NjE3ZjEzOTJkMzU5MDg5MTdjYjhkMjllMDg5N2M3NTAzY2RkZDVkZTE5NTk2ODYKK1NJRzogN2Y3OTdhMzE3MTVkN2MzNTZmOGYxZjc4MzcwMGFhOTk3NGJiOTM2ZDY2MTY2MWFkOTY4YzdjZGUxYWM5ZTc2N2JlNTZhMmRkNDliOTIzMGU5MDExMGM2N2MwZWQxODdjYjdlNzVjMzA1M2VjZTg0NDk4NGQyOTZmMGQ4NWNiMDcKKworVFNUOiA0NTYKK1NLOiAgMzcxNzQ0YWI2M2MxMTU2MTM5MjlhMzQzNzA5YmIwMTliNzM1N2RmZjcyZDJhMTQ5ZjFkMGY3MWQzYTIwMWVmZQorUEs6ICBlNThhYmZhZDRhMTM4NTlmMGFjYjA1ZDBlNDdkNTk2MzhmN2IxYjQ5MzYxMDBiOTg4ZDYxZTZlNzBlMjI2NjdkCitNU0c6IGMyMTlkZTFlOGQ3YWQ4ZGYwOGM0OTM3NzM5NmZlN2MxZjJkNTdiZDIxNzA2MzNhMDBkNzA4ZmFhZGVlMTgwY2ViYTkyODQ5YTc3Nzg1MDZjYmIzNjY4NzViZjkxMjQ3MDE4OTRjZWNkYjMzODUxNDdkMDY3MTg0MzkyMmE2NDlhZmY3YzQzNWViNWE5Yzc0OTI3NTAzMDcyZDAwNjc5Nzg3MTZkYzgwYmUxNTQ1YTJkYmY1YTFjMzg1MzZlMTJiZDc3MjBjMTk2NWQzODAzYTRlOGFhNTU3NjUxOTJhMTNiNzA1Y2ExMDU5ZGVkMGU4MDYzNjJmYzViYmU2Yzc2YTFjOTY3NGJiODUzNzkwZjdlOTBhZjAwNzUzZTAwNDM2ZGE0OGNkMDgyZWFkNjRmZGRiNjg5ODkwMTYyMDgyZjg0ODI5MjRmMzNhY2Q2MDQ2NDBmNjk5MjczNTJiNDNmNjQ0MDJkMjdhODgzZmE2YjcyYWE3MGQyNDFkZmZhYTE3MDFhMjVjZjEwNzkzNTgyNjA3OTM4NzVmNzZhMjk3OGU5ZjlmOWQ2ODYzNGViM2Y1ZjAxYmRlMWNlNDllNTkyMTI1MmY5NDlmMDgyNzk1ZTRlYWZlZDdiZTViNDlhOWY5NWVkYmI0YTEzNTMyZTNmM2IzYmU2MmUyNjUyMjMxMjUzYTIwYzFkNTQ3N2U4ZjRiYzU3ZWQ3NmZhMTllYWYwM2ExMWJiYTQyOWI2NDk2Y2U3NjI0NjE3MGUwNDNiYzE0ZjJkMmY3MDNkOTY4ZjFkZWIwOTM4ODcxNWMzN2NiNDc1MmRhOGQ0NjRlMzQ4ZTAzMTNjODk5M2UyNDEzM2E3YzU0NTI4NGUzYzljOTA3ZDAxYjI2MGM0ODgzZjljYjNlM2RjNWI2ZjdmYjZkNzU1MzYzNjVmMjEzMmVhZWRkYWI1NzBlNzI3M2FmYWMwYmZmNWM5ZmMwYjgyMGYyMDc4ZTAzMzYwNTJlMWZlN2JkZWM4NjY3NGQwOTk4ZWM3OGRhMWMzZjM0NzUxZjg4NjcyNzY5NWYzNWVjYTEzMDRiMTQ3MzQ3NjZhYjA1YzExODYzMDZkZWQ5ZGIzZWVmNjVkM2MwNDU2Y2RhZTgxODFhZmVlMDRiMjk2YzY3MjJhODhjN2VmMzA4OGQyNmY3ZmU3NGJjODljZjUyODVjNjg4ZjAyN2I3ZTY4NjAwNDg2YWYKK1NJRzogNWVhZTRhYzcyYWYwMTc0YWIyNTY1MjdiN2NkMzM3YTBlNTQ4MmU2MTVhZjA2OGRiMjFkYWUzNWE2NDY0MDc0MjYwNGRmNzNmZDRjYTAyZWQ5NTE1YTU2MDhkNzMxOTUyMzBmYWRjYTdiNDI2ZjAyYTJmYmZkMDIwNjFhZjM2MDAKKworVFNUOiA0NTcKK1NLOiAgNDk4YjZlZTY0OTJkNTMyMzFiMzUzMmQxOTM1NzhiYTc1ZDZhODk0ZTJlNTMwMDM0ZTIxYWI4YWQ4ZDJjMGQxZgorUEs6ICBkMTI0NjY1YjI4ZmFjZDJkMTc5NDZhMDRkZmUzZDEyOWE0NTYxYTJiMjRlYjMyNmQ4NGI2MmI0MjJlNDRkYmNmCitNU0c6IDA0OThhNTliODdjZGFlMjg2OTU1NDdlMTA4NjNiY2U4MDRkOTdkZTBhYzgwMDhmM2Q1ZmI2NTJjMTc1NzQxOWZkYzllMGY5NzM2ZjRjNTlhMzRmMjFjZmM3NDU5OWZhNzg4ZmNjMTBjNjczMGM3ZGY4YzNkMmMxYjZhNzg2ZDEyMzBiNjU1ODU3MTlkMWNiNWM0OTAzNTliOTQ0MzVkNmRkNjcxZjU0ZDZlOWExOWI5YjVhYWFkN2UwZjIzM2Y4Nzk3ZGY5OTc4MjhkODhjZDkyZWYwODllZjdkYmYxZTk1Mjc3ODk0YTJmN2MyZmQwYzhlNGRmZGZhNmQzZDE0NTg5ZmYwMTkxNmRiZjlkZGQ4MTFjMmY1ZTAxZTk0Mjk4OTkwYTE0NWE2Y2ZjMjY4OTU2MTRjN2M5NjNmZWYzMDhhNGUzODU2YzMyZGQzZTM1OWJjNTZkMmNjYTQ5NmFkMTk5ZmYxYTU2OGQ2NDMwYWM1Y2QyMDhlMGUyZDA3ODAzY2E1MjNlMGQ4MTNhZDM3MzNhYjUwYmRjYWRjYjk4OGFlZTc1OGVhNTA0MzliZjM4ZWU2NDk5OTc2MDRmMTUxYzYwMmM4MjkwMGE4MjA1ZDhmNmY2NzBjODY4NGJmNWFiYjVmNzVmZjI5YTM3ZWI5YmY4MTA1MTk5ZmJiZmI0NzA3ZTE2MmU2NGM3MTUyNzBmODUzZTY0OGIwYWEyNmZlYTBmNmRiNTYyODk2YmY0MjRhOWZmY2IyOTJmYWU4NWI3NmNlZmI4YmQ1YTRiM2NlMWZiMzliZDJhNTBkMGM5ZTZkOTMzZTE2N2ZmNjI5YjhhNDk0ZjJhOWI3NzRlYjMwM2M3ODFlYTAyYWZmMWE4YWZhZGMyNDY1Y2M2MTY5NjgwMTVlZDZhNWEzM2MzMTIwYjk0NWVkNTM1MTk4MWUzMmZiOWZiOTZiMjIxMmRjZjhmZTlhYzU2ZTNjZjQxZGM1MjRmODAwNjMxMDIwYjAyNTkxOTE3OGNlMDc0ZWVmMDc4ZDY4NDIwMTJhMjc2ZWZhNjI4ZGI1NDA1OGQxZWI1YjViNzA1ZjFlMTgxOGQyZGY1MTY0YmFhYmIwYzYxOTU2ZWNkYjhjNzA2ZTU2MmZjNGZkNjQwNTI4NzA1MzBhZTQyNWIyMjFmODlkZDZmOTBkYWI4ODJlNzYzZTdhN2ZmYTE0MWJiYWE4YmY3YTNmMjFiMAorU0lHOiAxMTJmNWM2ZDNiY2IzZGQ5OTM0NmQzMmFkNjljYmZhYzNlNjUzYmVmMjljNjhhMzNmNDMyMzFmNjZjZWExZDBhMTk1NDI3ZDZlMTBjMGU3N2M1ZDU1ZmUyNzk0Mjg3ZWUzMmU1ZTIyYmFmYmJkODA1MmFkMzYwNmI5MGY5NDUwNQorCitUU1Q6IDQ1OAorU0s6ICBjZWZjZmNkMWNmZjRkODkxMDc0OTI3OTEzMTgzMGIxZGExOWRmYzUyNDVmNzhjYTY4YjhjM2MxYjYyMmI0NTUxCitQSzogIDFkMzk0YWJkMWI0ZWQxYWVkZjk2NmE2MGVmZDNmZjg4MjE0MGE3ZTU2YjQyODM3NGVjYjQ0MzI4OWE5YzdmMDAKK01TRzogNWVjOTRlZDA2ZmMxMjU3YWU5YzE4M2NlNTYyNzEyMDdhY2EzN2EyM2ZkYjRiMGU3NGFjOTMwN2ExYmIxMTJlMDVlZDVhNWQwNDdjOTMxMDllMmU1OTQ3N2IwMzM3ODM0NjQyMmRlMzY3MTRjMjk2MWJiOTczNmE1MTNjYTM2NzFjNjAzYTY4YzJiZTczMTdiMWI1MmEwNzZkYWUyYWZmN2JjODhjZDVlZWEwYWEyNjhmYWFhZGFlNTM5YzkzOGJiNGZkNGI2MDY5YjE5NDVlYjZhZjBjOWU2YzhhYTVlZTRhNGFmMzdlOTBjNjdlMjQ4ZThkMjdiZDdmOTU4OWM0ZDMwZTkwNTY1MWJhZjQ1MzY0ZmEwNDk5NTdlYTVkOWI3MTQ2Y2E2ODIwNGU1ZTk3M2QwZjFjOTFhMWM0YmRlZDY2MTE1MDI4YTcxMTE0ZjBmNGY4NTFiZDExNWZhZWI5NTRlM2Y3MWEwMTQ3MGIyNDgxYTAwOThkOTlmOWQ3NDg5OGM4YmEwMjg3Y2M3ODM0MTU1MjE0MTczZDFmY2JhZmNmZTliMDgyNTAzODQ0Mzk0NzYwNTU4ODM4MzM4MTZjOTUyNGNmZDU3NDRhYWEyNTlkYjdlYmQzYTZhYTIwYjVhNjU0NmRhZGVmZDE0MDY2OGViMGVjY2I1ZjY2OGRiOWZjNjI5ODNkZjk4MDg1MGM5ZDE5ODgyYTE3NTUwZDVkY2EzNTQyY2QzNjAwM2EwZDAzY2ZmYjA0NTc1YTNlOGUxZDA3MDE1YzdiMzBlY2E5MTE1Y2QyYjcyZTQ2ZGZkZGY2YTRkZGExZmFhMmRiZGM4OTAwMGQ0MzNmNmVjOWFkYzQ2MTQ2ZDkzOWYzMjEyMWI5OWIyODk4M2Q5OGI5ZGRlOGMzZjZlNTc3OWYyYjA3MDBjYjAyM2RiMTNkZTY1NmUwYWVkMWRhMmQ1YzZiYTI2NTIzNDM2NDhhZDQyMGY2YWI5ZTU1YTk3NDgyYTFhMjJiM2JjMmVlNTk4NjI5YWJhZDk1NDdlZGI1ZmY3OTA5OTA1NjRiZDg3MWY4MWIyNGIxMmYyYmY4ZGJkZmU3YTg4Mzc1ZmFkOWNjYmQ5ZmMwYmExZDNiYmE1ZTNjNDgxM2MxOGEwMzQ4YWFkODNmYjFiODI2ODkwNTRkOTliNDYwMGRkMTc2MGQwZGNjZTQ0NzU3NDY3YmVjMTk0NjQwNmQ1MzAKK1NJRzogN2Q4M2ZmNjZlYzc5MzA3YjFjMGMwOTNmZGEzOTY4YTk2Y2Y2MDQ0ZjVjODAyODg4NTg0MDE4ODQ1ZTdjYWYyYTEzNWFjNmYxNjc3ZTg0ZDIyZTQ1OGUyMjdlNGY5MzAyMDk5MTliYzExYjEyZjdhYWYyYjhjOTQzMDJkNjQyMDAKKworVFNUOiA0NTkKK1NLOiAgZDEwN2NmMjZmNTI3ZGI3MWEyMDZlNDFkMTc5NTUzMjEwMTMyMjViYjIwZjkzZTEyZGYzZGM3Mzk5ZTcyMGNhMworUEs6ICAxODZiZjQ1M2M5NWRjMGEyZmQ1ODlhNzhlMmM4MDA0MGIzZjZkZGY5YTZmODY4MWQxNDYwMzZjZjIxNDZlOGZjCitNU0c6IDc4ZWI5ZTEzNzg5OTI4YTc0ZjM2MDE0MTcyOGVkZTk4Mzg5Njg1YzgzNmI5MWZhZmJmMWE3ZThjMTljZmJlMjFiZDNjM2Q2YzZlZDgzYzQwOWVmNjkzZjFkNzM1ZGEzZmE0NjY0OTdlMTlmMzhlMzBmYmEyYTEwMjM3ODU0NTkwNzBlNmU5MmMxY2I3YzliZDBjOWJhNjEyMjAxNTc4NjZjM2JlZDJiMDFlNmU2YjliOGRkM2YwYzQ3YzAyZjE4MTM0NmEwYTliOWI1ZDNkN2UxOGE5NGQ2OTU2ODU1ZTE2ZThlYWFhYWI3MWIxMDMwMmYzNWJkOGZiMWY5YjU4NDczMDQxNjAzMjQ5MjY2NDViMDU4MmMyZjJmMTUzM2EyNDI4MTQ2MTUxNDI0MWRiMjg1MGVmMzFjNTc2M2IyZTNkNGZiMThmYzZkOGMxZDdlNTJmN2MxMzM5MmMxN2UyNzAxOWZmNjAwMDhlNDMxZjE3MTQzNzBiYzBlZmQ5NDUyYTYxZjVjNTY0ODhkOTFhMTg1MDM3ZjFmNjQ3ZjcyZmE3ODUwMTBkNWQ3OGYwYTExNTg3Y2NmNjZiODA4OGUwZTYzNWZmZjM3NzQxOTNiMmVkZWZmZDkyZDZlOGEwMzIxMTI4YWU2NGNkYjg2MmU2MzFlMmVlNWJhMGRhNDRiYmQ1ODlkYzM5MmI1YTExM2I4NmE3MjdhOGRkYjY5OGEzMzRjYzY2OGIzOWIxY2RlMTk5Yjg4ODM3Y2E1ZjAwZjU1M2Y4OWM2MjI4MzQyNzM2NDFkMzliYzEwYzZhMjRlMWViNDI1ODc1NDJmMDNmYzE2Mjc1MjRlZDZiNzQ5MzkxZjExMDI4NzA2YzQyMzY0NDI1YjJjYWYyMDE4MGUxYjgwMmM3NDRiNDliN2JjZDliZjdiMTVjMjNhMGJmMWM2OTY1OTYwZDM0MTU1NGUxOTY2YjZlZjgyZmNmYmJlNDFkMWUwOWQ3NDFlMzA5MjU0NDQ2Nzc3ZjEzYzI5YTY3YjhiZGViYzVmN2YwNGQxNjBkNjBlMzMyZTNkMDQ0MWEwZjJmN2IxOTJjM2UyYmRmNmRhZGVjMmE0MjRmODg2Njk4MDYyMzZlZTA0ZGVhNjkyYmQ4YmI2ZjkxY2EwNjgyZWNlMzQ5MTQyNTc1MzU4YjliN2JlNzA2MDBiM2NiODFlMTQ1NmJhMDc5OWZkYzAxZmZkNjg2MjMKK1NJRzogODA3MWQ5N2YzMjRmMTAzNThmMTNhYzhjNjFkNDI0YjRmMzAwZGQwNDE5NTcxYzM5ZTQwZDk5YWVhNWYwMzE0MGU2MmFiNGM5NzEyN2FiMzNlOTgyNjk5NjZhZTFkNDU1N2U0NTliZjdmNTk3YjMxM2YzNTFhMjAxMjJmMDY2MGUKKworVFNUOiA0NjAKK1NLOiAgYWY3ZWE4ZTQxYzg5MzdhNGVjNDc1YWQ4MTM3MWExNzFkM2QwZjlmZDc1MTlhMDRjNzUxZWQ0YWQ4ZmY4ZmVmOQorUEs6ICAxNWRmYzcxNTg1YmFjNzFlZjIwZjM3NDk4N2M1NTVhM2YyZjA3ZDZiOWM3ODcwNjZjMTBkNjNjZjA2ZTAyYWIwCitNU0c6IDA1ZjIyNjNmMDI0NWVjYjlmYWViMTRlNTdhY2E0MzY2NjgzMDhjODEyNWRmMzExNmM0ZWUyMDUwMWQwY2RlNzAxYjM2NmUyYjUwYTFjNWVkZjQ4NDE0NGNlMTZiZmIxZjdkMjZkYzQyNzVlYTk3MzJlMjY0YmE0ZDRhMzYyYjQwMjc1YmE0NzM3N2RiYzMzMmNiNjVlMmY0Yzg4NTM4OTRhYTg3OGE0YzE3NWRjNWIzYjJhNzU3ZmYzYzhkN2RlNjYwOTczYjg5ZGFkZjA3NmUyZTRmYzc2MjM5YjdiYzc1MmEyMjlkNDRlMDAwY2ViNjY3MTA0Y2IwNzQ2YmZjZjU5ZDY5NjAzYWU3ZmMxYmNmMTFkMmUzM2Y2MWRjNDk3ZWMxYjBiZDVlNGYxZGJlZjQzNWYyZjI5MWYzMGIwMGE4NWU4MzM5NDZjOGIxMDQ4NGU0YWJkN2Q2MGJkYmIxZmU2ZGZmNTgwN2E1M2JiODkzODIxNTMwMTNiNzBjYTA4ZWZjOTFiN2U5ZmM1YjVkYmJiNmFmMTIzYjU3YmUyZTE0MGZjNDcxYTQ1ZDg5ZmE4Mjg0Y2MyN2UwYTFmZTc3MWY1NTU5OGJiZGNmMDY4ZDUwNmRhZDBhNTkyMTc5Y2VjYTM5ZWU5NTI2ZjllNGZlNDdiZjJiYjE0ZmIxNDg2YTY3N2Q0ZDdiOTlhNTIwNTQ1Njc2YTBmMWZhODA5MDQ5YWEyNDE0YWU3YjgxN2Q5YTAzNmU1YzE1Nzg4NmU4MzQxZDRlODE5YzA5MmEzYjQ4YjM2MDZiMDNhY2I3MjdjNmMyMjE3ZDBhZjMwMTIxNTQ2YTk0YWY2YjQ5Y2FhMmE4YzliMTc4NmZhMGMyYTUyNGVjN2EwMjNlOTI0YjVmOGE4OWE1Mzc4MGM3Zjg3ODFjNWI4ZTg2OTQzMGNhYTBlNmQwNDM3OTY3ZTNhZWQ0NGY0NWM5MDFjYmNmMTAyNmZiYmQ0ZTNkZDlhMDkxZWNmOGIzNGY3ZGQ1MDM4ZTU0M2RjN2ViNmFkNTQ5NGVmYjE0NWNmNjNlYzBkMzU1YmI4ZTE3MmY0NTVkOGE2YjEzZGFjYWFkZGJjNTZlNDdkZTNjZjc2MmExYTczOGVmMDkyZjE0MzY2ODA0NjdiNWNkODJlOWUzNmUyZDJiNjg0MmIzYmQ1ZGNlNzcxODBkZGFmMGI2NDMzNzhlNjk4NTk5ZGQ0N2Y1Y2RiYgorU0lHOiBjMGYxNzM5MTY3Mjc0YmY5MTgzMWM3NGJlYjY0NWFmNzkwNDU5YjI4YmIzZjIxMzI1MzY1MTMwZjQwOWFjYjY2ZGYxZDIyMzc1OWE5NzU4ZTA4ZmQ3MjUzNzM3NDg0ZTI4NWE2ZmI0NzQwNGFiZTJlYmE1ZWYyNDlmZDAyNWMwYQorCitUU1Q6IDQ2MQorU0s6ICAwYzU3Y2JmY2ViZGUxMGVkZTAyZDFjYjAxZGYzNjBkNDFmMmU2NmE1MDQ0M2Q1OGI1ZDRmMDgyOGM5YTE4YmI3CitQSzogIGM0ZDc2MWJhMTg5OTcxYjk0NjJjNjFiZjQ2YTc2NWY4OGUyZWNhYTViZjIyMTEyMjBhZmIwMGFjNjU3ZjdjZTUKK01TRzogMzM3NzAzMjQzYWI1YjRlNGQzNDgxZWU4ZGQxZjQ0OTQ1MDcxNzQ0MTI2NThhOTM5ODhiNWMzMDQwM2E3YjdlZDg1MjJjZWI0NmZhMWVlMDI3NTNhODc0ZWYwNjc1ZDM5N2M1NzVkYTBiMDhjYWE4Y2VlMzM5Mzc4NGQwZjBkYjg0NTk4MzdhZjkwYjkwNTZkZjRlMzhlNDE3ZjNhZDJlYjFhMTAwZWYyMDdjZTJjYTZjNjEwMDE4MDIxNjYxZTMwNzA5OWYyYjdjNGFlODc1OTkxMTQwYmRkM2YwZjk5YWQyYzVkNTVhYWNiODRjYzFjZGNkNTc5ZTA4MDcyYjY5NTFmZDQ1ZWQyODlhYzlmZjdmMDk4NmFjODhhNGZiYjlkYzkyMDNkOWJhZjE4MGM5MGVkZjkzNzI1OGM5ZDBhNmQ0OGUyMjBmNzJkMjUwYzdmMmM3NzdlYWE3ZmI5ZmExMWQ1MGE1Nzk4NzcyZjlmZDk3NmIwMDU5OWYxZjAyNzZmM2EyZTRkOTg4YWU5MjEyNTQ2N2E4ZGVkYjdhMTZmOWUzYTU2ZThkMDA2NjJiM2ViNjdhMzViOWI2MGU3M2JkOTM1MDc3ZWUyMzhkZjhmNmU4MzNiOWE1NTIzMzg2ODI2YzFmMjkxN2IxYzNlYzk4ZTBhNWZkZTg5YzQ4YjFkNDQ2ZGE1ZDBjODg1ZmVmMGUzNzRiZmYzMGE5OTdjN2JhZmQ1ZTc0M2M4NWQwYzZhYWE2ZWYxMGEwNjEyMTFhMjMyN2M2ZDg0ZWI3NDdhNTZlOWJmNjBmY2Q1YjU1M2I3OTg4MzRkMGM1Y2NhZGI5ZDRiNTRlNzIzN2QxMmM2NzljMTkzYTI4N2JiMmY1MTFjZDRlZTJhMmQ4NTQ5YjQ0YjIxYzExZmJlNTcyMzM4MWM2YzVmNzg0Njg3ZmQ5MGNlYmM1YjQ5NWFmOWU0MTRmMjk2MWIwNmExYzg0MzNiOWFhMzI5MmJjZmY0MjQxYzIyNzE2N2Y4ZDFkZTA1NGJhMzNhZDgxZGEzZWIzZWM2ZTQwYTZlMjY4NTRhZjM0OTU0MDE3MWI3NWQ3NWZiOWE4ZDEyOTM3ODI3ZmQ1OTRkMzE3YjdhOGQ5ZjFjMmZjYWJkYTU2Mzc1NTY4YzNlOWU1MTRjMmVmZmZjMzg3ODM2M2RjZmFkOWZkOTU0MzZiMDIyZTg3NzJhODhjYjcxZTgwM2JmOTAzODE5NjIKK1NJRzogOGFmN2JiZTAxYjhhYjkzOTUxZDE2ZmNhMDVhOWM5NjdkMWM1MmM5NzRiZWExNTFlYTcyZTRjZWJhYTIwY2M3ODNiYjYxZDhkNjkzODVjYWM1YmM2ZDcyZGJkMTYyYmVlZjFmY2I1ZGQwZTBhMDhiNDhjYTBiOWY2ZDlhOTg4MGMKKworVFNUOiA0NjIKK1NLOiAgZmU3MTcyMjc4MzY0MTk0YmNmZWZiNDc4MzE0MmI3OWY1OWQ1ZmQ5NzhiMWU0N2MzMTRkNzhkNGNiM2Y2MWM4YQorUEs6ICAyZTgyY2NlNDc5MTBjN2UyYTc5YmMxZjQxOWRjM2MzZGY1NGYyMzI5MWZjODE5M2U4MjU4Y2NkMmZkMzhkNTQ4CitNU0c6IDIzNTA5NDUxYTA1OTk2OWYyYjRiZGZjZWU1Mzg4OTU3ZTk0NTZkMWZjMGNkODU3ZTRmNGQzYzI1YTQxNTVkNWVlOTFjMjA1M2Q1NTgwNjJlZWE2ODI3OTUwZGU4NjNiYzljM2RmOTY3MmNkZThiYTc0MTc0NGViYmRkYjQ1ZWMxZjQyODQ1NzBmZDBhYWNkMDdlYTU4YzU4MWJlMmFmYzk1YWU0NDRlNjc4ZWRjMmEwMjQzOWYzODdjZWM5ODJlYTNhNDQ4MTRhOGEzMDJiYjNiZmU4MjI4ZDU4ZGUwMzlkZWJkZjdjMmE3ZWRkYjRlNzFjYTQ3NGY5NGY3ZTJiZDg5ZGM2NWIxNjEwNzMzYzkxZmZmODliZDQ5OWY0MDE1NGE2MTk4ZmRmNWVjN2FkMzcyMmQ5MjViMjkyMTk2YzQyOTQ5OTA3NWJlMGM1YjZkYTljMDkwYzA3OTFhNzAxOWViNWU3MzY2YmU2Y2U1OGFiMmYwNGZlY2Q5MTI3YzQyNzE4MDQ3YmY0NzAzMDY5MTUyMTMxMmMwODc3YWEzZjM2Y2M1ZmJjOWNhYWUwZmRlMzk0NWQyYTg2OGVlMjUwMmEzODMzMjA4ZWI4NTBhMTYzY2ZjYmY2ZGE5ZWU2YWQ5ZmUwNjdmZTI0MTk4NmZlNDQzNmQ2YWU0ZWRjNjE1NjE5MzhlMmEzM2Y0YTMzZGI2M2Y2OWQzZjFhODg1MGVkNDAwMjg4NjkxNjQxMDM0ODhmYjc5NWNkODJjYTA2N2ZlMWI0ODk3Y2FhNDlhN2NhOWE4MGYzYTgxNTFmZDEzYmJiN2ZmMzUwZTg1NzlmNTY1ZGMxYzRhOWNhOTM4ZDI3YjE1YjNmODU4ZWY0NWQzZGQ3OGIyYzM1ODYzNTM1NjMxNWY1NWE5NzUyOGVjZmVjNWQxMWE1YjcyMTUwMzEwN2ZhYTQwNmMxNzAzNGU2MDE0NzRiM2I2MGNmNDg2OTJlMjY5MjYxMTU4ZmMzNTNkNGRmNDI3NDM4MTM1Nzc5MGI3NzU2MDg3YjAwY2M3OWUzYjlkMjhhM2YyNDM5ZmViZjE5OWU2NGE4YjM3YzkxYjVhNDMzNGUzMzU0ZThmYWYzYTM2MWU4NTZjNTRiZGFhNDNiZmRjZDZlZTZjOWY5Njc5NTg4ZjYwNjk5NTA4MzIzNDhhYWNiYTJiZmVlYmFjYWEyMDcxZGRjN2Q3Nzg5OGVmMGY2ODc5M2NkMjUKK1NJRzogZjZjMmE0Mjk2YjlhMzQwN2M2ZDdhNTY3OWRhZTg2NjZiNTAzZDFhMTdlYWNmNzFkZjQ5Mzc5MWI4ZmYwYzBhYThlZWQzNmIzMjdhMjlhYjc4MjhmNDZmMjJkZTg2OGI2MjhiMWNmZDUwMWU4NTk5ZmEzMTY5M2IxNWY2MTA4MGYKKworVFNUOiA0NjMKK1NLOiAgYTk1MWU0ZTZiYTlmMWYwYjM1NDgzMWM5ODY5NDI0NDhmYWVkZTM3ZTExYjBmMjQ3ZGEyNzA2ZGNlZWY3M2FjNworUEs6ICAzMDM2MjAxNDk3NGJmNzVjODQ5NWMyZTI3MWU3MTNkNTczODQzODRkMGE1ZGE4OGVkZWVhNzkyNzljMGM1OGVjCitNU0c6IDIwNTc3ZGNhYzg5MTc0ODg1ZWVkYjA2MjQ4OWNkNTEyZmE3Mjg2M2VjNTQzOGUzMWU5NTg3OGI3NWNlMjc3MmFlZTYyOTBhMGJhM2M4ZjY0MmMxZDBlZjU1ZGE4ZDViYzE0ODRmODNiYjk4NzZjN2E4YzBiNmI2MDliOTRkMTEyYTA2ZmM4M2NlOGQyYzFlMDhlZDZjNzM1ZTU3YjI0NGFhZDZlY2Y3MDc1MzYzZDU2NWJhNDc4NjU2OTVjODQyMzUxMDkwOWUwYTNkYjRiNjFlZDdhYTY3YTc0NzEzMzFlODNhMGM1OGI4MjIwYTYyNDVmNjU2NjE1NDljMWExMmQ0YzBkNTBjMzI2ZmI5NDkxN2NiZDA3YmU1MWU4M2ZlOGJiM2U0NmNhMDFiMGEyNjBkYWFmMWQ2YWJlMzcwM2Q2YTkyNTExM2JiNGQ1N2VhMWE0OGI0YzdkYmRhYTAzZWVhODE0YTRiNWYwMmUxZGZiNTQ1Y2M2MjNmZTE3YTNiYjE4ZTQzNzNmNWY3ZWMyZmI1MjE3ZDIzZTRmZWQ1NGE3NzJlMTEzMjNlNzMwYWFkN2VmY2E4YzQ2NDQwMGU3Njc5MDU1ZmNjMTI1YTg3NmVmN2I4YjlkZTE4NmUyMjlhN2FiZjE5MWQwYzU2ZDkxODE1ZjY3ODcyZTk1N2JmYmM3NjM0YWFjNDAzNTc2YTU4ZjQyN2JkYmIzMGU4YzRiNmZjNmM0NDc3NDEwMjRlYmI1MDNhNWE5MDI1MTI0YTQ4ODdmODI1YTQzZWU5NDBmMjEwYTFiZDVhZTRmNjczMmQ2MGY5NWYyYjgzMjAxYzRjNmRmZTI3OTQxMmQ3NTAyYTUyMTFmOGY0OGY4MDBkYjMwZmMzNzc2YzRlZDNhMzhiYjQ2MzQ4MjJjOThhNmQ2ZGQzMjMzYmU2MGU0MmNjYTQ1YTMxNjNjYzg0ZTllOGRhNjQ3YzA3MTFiYzRjNmNjZDY1YWExZTk3MmMwNzQwNGQxMDNlNzRiY2MzMWE3ZTJjM2VlYTVhYzkyNTdhYjQyODk0N2FiM2RkM2ZiMTUzZDkwNjk0YTQwNzMzNzNjNGRkOWNlYjEzMTE1NGZlODc3NDczZmQ5OTZmNDI0ZjMzZTMxNmU0ZWIwMmI4Yzc1MTNiZTY5OThlNTE2Y2JiYTU0ZDk0Y2QwYTQzNWUwZmZjYzJjMGE4ZWY3MmI2MzBlYzI0NzgxMDY2YWE1ZWZiOQorU0lHOiAwMjc4Yzg2YTE1MjA4ZDliZTViMWUxNTc0NzYxODYxYjhhZjcyYWUwOGQ0MGNkY2JlYzM1NGU2NWE5YzNkMGEwNmI1ZmNiYjI5N2QwOWJlZjM5NzQ2MjM5NTk4NmMzMDkzZWViMjI2NDRjMDAzYzMwNzgxNzhjZGY2NzRlOTkwYQorCitUU1Q6IDQ2NAorU0s6ICAzOGE5YjJkNDliYThiODJmMzAxYTU3NzJjZWEwZWZjMjIxODQ1NWM4YjIxOGIyMmNiYWEyYWFkMmQ3YWQzYjM1CitQSzogIDlkZjVlYTFmNzhmODEwYTUyMTc3NDYwMmJiYmE0OTQyZjA0NTkyMzg5NjZjOGJjZDIxOTAwYWZiZjNkODQyOTMKK01TRzogMTc3ODE2N2M0OWIzYTQ0ZDRhNWJhODM4YjczODg1NTNiMWUxM2QzNmVhNGY4NmQzMDI0MmUxYTgyMmEzYmJhZmY1Y2VhNjNlMmFlMmE0NjM1YmUyMzZmZWYyYjgxMzVkMTRmYjYyMWMwYmI3NzNjOWMxNzc1M2Y4MDkyNmViNTVkMGYxMTViZDA5YTg4NWQ4NDRiODE4YzlmMDQ0ODlhMzMxYmI1ZTAzMmI4ZTU4Y2RhMzY5NDljNWE4ZDA4YjU1YmI4ZGU5NjVlMWY5MGQzYjljZmVlY2ZjNmFkOWE0ZWU1Y2I0MDQ3ZTk0NTBhY2RjNjQ2NDAxNjZhOGMwNjllYTg0OWFlYmRkYWMxYWU0YWZlYzkxZGRkMTdmYTU1NTNmYTg3YzU2ZjdlNTFlYzFjZDZiNWNjMjMzNTFkMDU3YTRjZTRhODkyM2M4YWU2YWM3YThhZmRjYzA4ODFjMGU3NGViYjAyNGVmNzI5NjE2MmNiOTNjNjhlNTBiYmIwNzRlNjUxYWM4N2RhYzllYTU5ZDRjM2ZiZjBmZTM3OWYzZTk3YTI0NTY2ZWNhZTU0MzAzYmNmYjZmMGNjOWYxNWY2NjM5NDMwZTY2YjE5YTQyNzg0OWZkZmZmODMzZGYwMjY4OWU5ZGU0NDAwNmM5MDNjNTU5MTgzNDU5YjlmNGE5N2Y1NGEwZjJhMjhkZjdiMGU5ZGVlZGE4MjM5ZDdiNTE2OTc3ZjVlN2Q2OTcxYjQ1MDJlOTg4NWY3NTBhZjhkMWE2NjY5ZTI1ZTc3ZDVmMzI3Yzc3Yzg3YTg2ZTBhMTg3MmJjOTZhNzYwNjBmNWY4YTBjNDBjYzk3M2JmYzdmZTZlZDliY2E3OGY4ODRlNmEyODI4Yjk0ZDQ4OWQzMmEwZmQzMzdlNjlkYjgzZmI4Nzg5YWZkNGU4ZWY1NGMyMmE3OGMyNTg3NDY4YjlhZTA3MWJhZTNiMjAyZDMxODNhZDVmMGY4ZTg0MmU1YThkZTg1YmZmZjQ5ZTAzYzgzODFiY2E3ZmQ0Mjc4ZGRjY2FmMDEzNGZiNTU5M2EzOTVhNzdhNWNiZDQzNDU5M2JjNGFkMGZmNGI4NDAwZWM2NzRjNGVjYWYxZDU3NzU0YmUwY2IyZmE5YTY0NDFhOWFiYWQ3YjQyMTk3YWQ4MmU1MDgyN2U0YTQyNDU1NzNhOGYwZWY4N2Y1ODIyOGEyODY3ZjRiM2I4MzRiNjYzNTAzNzk0MGEKK1NJRzogZTE5ZTYyYWM1MzlhOWNhMjUxZDEyZDRjNzEwNTViMGEzZjU4MWQxOWYyNjgyZTY3MjQwNGM3OGFjMWYxMmJiZWZjOTE1MTkyNzZhNWNiZTE2ZjUyMGNmN2E3ZjY4N2EyNDBmMDMyOTE1N2M1OWY1MDAyNmE1OGRjZGM1MGZjMDgKKworVFNUOiA0NjUKK1NLOiAgOWExNzE3ODczNjg5YTAzYzExMmRkNmI0ZDc2YWU3M2I4OWI0MTZhNTk4Y2VlYzIwOWUyNzk2MWU3YmIxZWU4YQorUEs6ICBlZWNhZDFlMGU0Yjg2MzI5MTg4MWE4YzI0MWRiOWNjZmZmZTRlNTVkOGI1YTQyZjMwN2I0NDM2YWNkMDY0OWE2CitNU0c6IGUyNjU4MDQ3MDkwMWEwN2FiMDkzMWFhMjM4Mjk4MDJjZTA0ZGE1OWZkYzJmNzczYmM1NjdmMWU2NWI0ZjJlMmQ0YTFhNmFlYzFmNTQxNThhZGZjZTliMDk5NzkwYjUwM2ExM2QyMjA5N2FlMjNlYmNjZjkyM2YzYmIxOTg2ZDZlNDkxMTFhOGNmMGQ0ZWI4MjM2YmZlMGQ3YzllOTNhNWVmYzdmZWI4ZTZhOWNkMWI4ZDkyMWVmYTIxZTQ0OWZmNDllMDZjMWNjZmVhMzFmOTNlMDMzYzNjMmE1NGRkYjBmNjUzYTA5ZmJkMThhNzBiNTYzMTVmMTkzZTdiZTU2ZTUxNjhmNTk1NjM4MjFkNGJjM2JiYjBlYWEyMDQ4Mjg2YmJlZWU1YWEzZjNlNzUzNmNmMmI3NTBmZDMyMjYwMmJiMzg0N2NlY2EzOWI3NTQ3NDMyMmQ3NmIxZGU4MGZhMmVhZGJhMTUyZDZmOGYwMjBkNGQ5MzFjNTNmMGEyODAxMjI0ZDM1ZGViNmVjMTNiMDE0ODczZTY4OTkwMzYwN2RlOTZkOWI3YTc0M2E4ODdkMmY0OGRhZjJlZDJlZWZiMjAyYWJmNjA4Mjc5Njk4MTEyM2I5NjZlOTM2ZGNmMzQ4M2UyZDI0ZDY5NGVjYjg2NWZiZWI2OTY5ZjM0NzAyN2ZiOGIxNzVkMjRhNGMwNDVjMGJiNGFiNWUwMmRkY2JlNzdkNDc1NmM0NmQxMzdiMDk0NDczYTAyMzA3YTEwODM0MGFjYWQ5ZDAzYmFlODQwM2FmMTk5Y2I3NWNhZTMxNjJmMzgxNTgxM2NjNjhiZjJhNWU0OTllNTk0OTIxMTQ5ZjNiYmQyMTRkYTUxMzdlNzU2NTIxNTU5ZGM4MGQ5YTRiNzRhMGY0OTQzMDIyYzdjZDVmY2E0MjMxNWUwYmNlZWFlOTA2OTYxNWNlNjdhMDQzODI0MTIzMTNhMzFkNjdiMzQ2YzMyOWFkODJlNzQyYzBhNmNlMGE2YTAyNDU0YzExM2U1MjAyMmYzY2MwM2ZkYTY5MWViZGZlMTRjNTNjOGNlNWNhOWI5MzJjYTFhMzg2ZTNlYjRlOTBhNGRjNmU4YWQ4NTMzYjVhZjFhYWVmNTAwMzEyODY1NWNhNjRmNjdmY2Q5N2M2YWM4MDMwMDI0MDQ5MDBiYzBmYWU5ODQ2M2JjYzMxNDA5Zjk5ODE3NDg3ODlhZGUyZDA3NzgzYmMzMmIKK1NJRzogMWFmOGJlMDk1NTM4OTY1ODAwZDhlZmY2ZDcyM2QwMjhkNjVkMGU5YzZlYjVlOWQxMjViYjNiMTc4M2YxMWVmNzA3OWE0OWE4MDdlMjdlZjEyNjBiZTI2YTNiMjMxZDAzYjJhZTE1MWU0OWY2ZjE4OWYxNWIxYzgzZWFiMDFjMDIKKworVFNUOiA0NjYKK1NLOiAgNDNiZDkyNGRiODE1NjAwOGM2YjM5OTRhODEzMGQ0MjdkNTE0ZGI4YTYxM2I4NGRmYjBiOGUwZGU2YWMzMDY3NgorUEs6ICAxYjM0NjFjMjY5ZDViMDA2MmQ1ZGY2ZmE2NTRhMjU4NmY2NDdhMDY4NDIxOGEwNmU1ZTJmN2JhZGZiMzk0MTMxCitNU0c6IDYxODRlNjQ4MGM0MmU5NmNjODc3MjY5YjE2MzcxNTQ1ZmY5NTIzYzQ1ZWE4OGU3NmExMzQ4YzY4YWU3ZjMxOGIwODhmZTQ2MTA5MjgyMzkxODViNmI1NWJmYTBmNDM2NDRjNGE0Yzk3YzU2ZWQ3N2QwOGIxZjRhYWQyZjRhYTA2OTk5NGFiZWNhOTZiN2JmODFiODA2NGVhNDM1MGQ4YThiMDIyOTdhNTEzMDhiNjFjNTdjOGYxODczYzZmOTcwMDdhY2EzMTgwNDI5ZTczMGE2NjQzZjI4NzMzNTQ3YmNmN2I5YWRmZTMyN2U4NTczNmJkMDRhZjdmMWQ5ZjRmYjg0YTdmM2FmZmRmNGUyMmI1NzRlY2I0YmM4ODM2YjEwYjg0NTNhZWFhNWMxYmYxMzIyNDhiODI2Y2M1MjMwZjc1ZTA3NWZhYzlmMDM3NTYxMTM2ZTAwNjQzZDA4MjUzZTdhZDY1MmY3MDJjMGQxNWI2ZDdkNDhhYTZmOGU5YjVmNWNjMTQ2ZTNmMTU2ZmIyNTIyNzUxYzM3MTAwNDFiZDkyMmYzN2E1MDM3N2UwMjhiMGM0ZTRiYzM0NjVkN2M4NGFmNmE1ZmI0MjdhY2IzYjQxMzc4YjEwMmJkYTQ2ZDhmNmYyMDNhNWZmY2YzOTVkNDM1ZTkzNDU4YTBiMGE0YzJlNzc4MmZhZmUxMTlmNzY5ZjY3MDU4YzY2NzdmNmQxMGQ5Y2Y1Y2I4NzQ4ZTE4MDU3OThlZDIzM2Y2ZjkzMGVlZTBlNTA3NWJjNThiOTdhZjkxNzdmZGE3NWQ1MzcwOGJlYjA0ZGM0ZjE5YTQzZTc2ODA3NDYwOWYxNDA2NWY0OGZkYWQ1MDc3Y2UxMDliYWNjMzU3MTc0YTZiNzk1NmY2ZTdmMzJlMzg0MTViZTUyNjM3MGZhNThjM2MwYjMxZjUxZTZjZDRiMmNmMjdmOGJjYmMyMTI1OWQ5ZTVjM2I1YzI5NDZhOWZjMWIwMGQ5ZDE1YzNiN2Q4MGJmZDlkMDVkYjkxZDI0OWQzZTQyZDg5NTY2ODIwNDQ1NDhkODNiZGE4ZDVjYzkyMTI0NDJmMzBiNDVjZjRhZWFkODBjY2U5YjM1MTJjMzljNWM3MzdkM2Y4ZDc0N2FmYmFiMjY1YWY1ZWVlZjhjYTkzNjJlYzc2ZTk0M2IwYTBkN2EzOWYzZGIxMWVjYTE0NDU4YTdiNTkyZTVlNGZmMjI3NWRkNDhiMjg1MworU0lHOiBkMmEwNWQ4OGQ5ZDU0M2Q5NGQ1N2VjODhhZTU1NjgxNzUwZjIwYjliZTljMWU5MThjZGFmNDU3NzY3ZjI5NDhkZDYyOWU5NGYwNjhlZGNmM2Q5OTI3ZTMzMDIzNGJhZGMzYTAyZmE1YWQzZDlkODVlOTQ4Y2IwYjBjYjNjZDcwYQorCitUU1Q6IDQ2NworU0s6ICA4ZmIwODYyMDZkZDk1YTI2MjFmNTk4NTYwY2NiMjgxZjgyNzNjOGZjNzJlMjM2MTEwODliYWFjODlkM2MzYzc4CitQSzogIDIwMjc2ZWY0NzlmNGQ0NTIzYWI3NzQyMGQ0MjRlODgxOWMzM2M4Mzc3OWVkODBjN2Y2NjZlOGY0NDAzZjk0ZDcKK01TRzogZjAyOTAzZWQ0MjY2ZTg0OWE0NDg1MjA1OTU0ZmZmYThhMTA4YzMyM2I3ZTNmODQzMzEwNDM1MTRlNDg1NTZhYjAxOTQ5NzIzM2E1YTEyN2JmZjNjZDdjOTcwODZiZWNlZjUzOGIzZjMzOWQ3ZDA2ZTUzMmRjNzMyNWU1OTdhZTM1N2Y4MTZkZWE0MmE2YTIyYzc5ZDIyMDc0YTJlMWFkODAyM2M0MjRiN2UwOTZlNWFkODg5N2IwNWVmN2QwMGQzMGEwNGFhZjI5ODFlZGRmZjJiMzQ3ZjFlMjdlMjBhYWJiZTdlN2E5NTQ0OTc4ZTA5MmIwMGNjZTQyMGFiYTA2MTg3Mzc0ZmZiYjM3YjRjMjJkNzVmMDRlNTc1OTBmNjEwYTI3MzQ3Mjg2YzI5ODMxMmE2YzliMWJkZjI0ZmJkYTg1MTNjNGY4MzU2Y2NmNzU3MDY4ZmZjMTFiYzY1MTEzNzgzYTVkZGU3NzIyZmFmNGNlYjE5ZmJiNjJmNDA3MDJlMmM2ZTZhOGJiNDllZjQwNDQ2NDUwYzRjNTlhMjk5MDk0NGRhNDc0NGY2ZWU3NzBiOTMwYzI0NjY2OTgxM2NlNWE5ZjVhNDdkZDgwMzg4OTgxYmZjYzNhNTZiNWJlMmM0YzdlNjU5YTJlOTE4MmRlYzBhYWFmZTkwMzFhYTM5NTRkNGZlN2M0MzExOTZhNTYxYTViNzhlYWJhNjRmM2RiMWI1ODZjNTNiMTZmNjc5YTg0OTIxYTY0MmMyNjBlNDY1M2E2MWRlMTA4ZWJkZTZmNzA1M2FmYTJjYjNmMzY2OGVkZTEyMTAyMGRkMWJhY2U4NDE4YWViYWMzYTViZDUxNDJmMTA1YWMyNmZlNDllNWZiMTQwYzE5YjIyZDU0YTYyOTFkZmM5NTQ2NzAyNDc4ODE2NDY4NzRkZWZhZDgxNDk5NTUxOWY2MjYwZTk3NzRhOGQxODVjMzc4ODFiNGYyNTQzYzRiNjNmYmYxOTg1MDE2YWI0MWM0ZDcyOGNiYzkwYjNhYjg3NjI2N2JlZDQxZDBjMDkwMmY2YjUwZThmYTkwNmZjNDc4OGY3YjgyMDQ2NzMwNmUwZmU5ZTAzNmEwYTAwZjgwNGY5MWMzY2E3MThiOTVmZjZkOWUyMjA0YmMzMTYxYmY3MGZjYzE3YjI5NjRiNTZiYzYxMmUyOTQwMmQ5NmY1MDk4NjUxNGJjN2Q4MzFkNThlNDI3OTM3ODZkNTgwNmYKK1NJRzogYTkzMDVlMDAxNjAwZDU5N2QwNWVmNjcxNjk5YmYwOWYwZGNjMGM0NDQ3NWQzY2EzMWU3ZmYxYmZmZWRjMGM2N2RhYTFmM2I3NmEwMzU5NDhjNTljZDg3ZjgyNDUzYTQwOTUwYTFjOTcwM2MyZTdkOTI4MGU3MzAzOTY2ZGEzMDEKKworVFNUOiA0NjgKK1NLOiAgYWZhMWI4NDZjMjEwYjUyMzAwZTk3Njk2ZjgxYjhlYTc3NGQxZGYxMmU2MTI1MjdjNTU3NDdmMjljMTkzNzM5NgorUEs6ICBiNjA5NTY2YmJkMTk0N2JkN2FmYWNlYjE0Mzg5ZTgzNjIyNzE2OTIxNWZhYjY2ODUxYWE1ZDcwZDZlMmUzYjg5CitNU0c6IDRjYWMxYjFmNGJkNDgyODRkY2M5YWZjOGI1OTU1YjY0YjQzNmRiNzA0YjAzMzVkOTc1NWNjMWY5NzQ3N2Y4ZDMyM2NiNjQxMGVmMTQ2YWI4YTllZmI5NTI2ZDhiNjJlM2JiYWQxZjcyOTVmNDdiYTlmMGRlOTU4ZjhlYzliNzdhYjQyMjMyNDM3ZWQ5NzQ4NTY0NDRjZDIyZTIwYmUzNWU5MTgxM2JmZjRiMDE2ZjgxMGQwZjYxZDg5ZjZiNjE0ZGIzM2YzNGJkMDk5ODViNTkzZmUzZTA2ZTA2NWI3YmM2Y2QzOWQ1NWMyY2ZiZWM3YjZkNTljMGIzN2RkMWQwZDM1MTM1YWIxZDFiMDRmMmYzMGMyZjA0ZjRiYTJiMzY1ODI3MzgwODFjZjU5MTkwZjUyODM2M2RiOTQ0ZWQ2MTI5MzFkMWQ1MTRjNjIxNGY5YWI5MmFiYjE4MzM5MjYxODNhYzUyZmJhMmE0NTUxZTIwZTRjMGFjOTU5YTQ5ZGRiMTY3YTM4MWUwMjQxZDQwYzA4NmU5MGU1MmFjYTAxNzI1ODk3NWRiYWIyYmE0NTFlZTUzOWE3MThmMDc2YTU4NzA5YzY2OTc0MThkOWM2ZjEzZTRkMzkxMzY4YmYwZThiZDhmMjkzMmRkOTVjZWFmN2FhY2ExMjQxMTQ3ZDM0MWEzYWNkMDhkYzMyOTA1NDgzNTcyYjg5YTgwY2M0NzIzMTQ2OGFiOGRlMzU5ZGQ1MjVhNjI1N2NmMTk2YzJlY2I4MmZhOGE3OGFhM2E4NTFjN2M5NmNhMjViZjdjYTNkY2YzY2EyMTQ1M2QwZGZkMzMyM2Q1YTQyMmRlYzg0MzE2MTAyZjY4NGMzNTlmMjI2YmI1Mzc3OWMwYjk5NTA5MzkyODFlZjc5YTU4YzAxMTk5M2VhY2UwODU0OTdhZmE0ZGFmNjRjOTY4N2IwYTExYWExMTZjZmE3YjAzOTM2MjQxYTU1NjdiNjQ2ZTdlNDJlOWZiNTkyNDA1YjhmYTNjMGE4MjFmYzMxMjFiNDViMTc1M2NlYzlhODM5NDdkMjExYTQ1NDk5YmQ2Mzc5MGI4N2YwMTQ3MmZlNTY2ZDg3Njk2ZWZlZGJiNzRlZDAwMDQ4YzM4NGJhN2YwMjdiM2FhNDI5OGRjNDExMDM0OWZlZGY1MmE5NmNkMDVkMDhiZDYzNTc3MWVkNDUxMDczOGQ4ZjA3YTYwMjEyNDRkMTkwMzU3OWEzZWE3MzkKK1NJRzogOThiMGM2MzEzY2VjYWY3YzgyY2JkZWIzZDAyODA2NDFjNjFhMDYwZjY1ZTU2M2FhOTNjZTE4MzAwYTliNTgyNzJkYzg2ODBiNDg1ZThjZDExY2Y4MGZkY2E4NjhmYWIzNjUzNzgzODRhMTQyNzI3ZjJmODQ0Zjg3Y2ZkZjE5MDUKKworVFNUOiA0NjkKK1NLOiAgYzg1OTEzYTY4Nzc4NzcxMzEwMDE2MjNjY2RhOWNkYzEyYjlkNDA0M2I4YTgzNzkzYzQ0Njk2NjMyY2Q2NDIxYworUEs6ICA5Y2M2N2M2OTQ4ZjdiZjZlNTU2ZDA4NDlkM2I4ZDIwMzQ1N2E3YjYxNTQ5YjM2NjgxZDc1NGYxZGMwODQxZTk2CitNU0c6IDkxYjUwMDllODNkMGY2MTAzMzk5YzJkM2ZlZWMwMDg0OTczYTMwNWJmNDE3NmVjNzgyNTM3NTYwNDcyZGIxODdhMTFiNGRjYjRiMmZmYjdmMDY0NGZlYjM5NGIyOGU1YmZlOTcyNDdjNGE0YTIzMWNmNmU5MTZiZjk5MzQ0Y2NkYTg4YTdmNWQ4MzFkNmRlM2Q1NjNkZDEwMmVhZWIxMDhjNWJkY2U0NGUwNjMyZDE3ZTZmYTU1YjE4MDY3ZGYyZmE4ZDIwMGE5ODY5ZjZhZmY5MjBjNTFkNDZhMWNlZDJkOTAzYjFkOWI2YjA3NWZhY2JmOTFjZDA1ZWI0MWFkODExYThlZjQwZDkxMTgyNjEwMTJjNzJiODk3OWYxNTE1M2RiYjg1NjEyOTNkYTlmOGI3N2M4ZmYxNGY3NTM4NzUzNmYwMDM2ZDE3MTNhNzJjZThjMzViMTA2MmYyYzY3MzJhZWJmMzI5MzY3OTliNTFjMmNiY2Q2NTcyNDEzZTdkZmFhYjg2NDFhMDJjMTUwMjM3MzgxY2Y3YTE0ZTIyYzc0YzZjMjAwMDlkZTdkM2I3ZTY5Y2QxYjQ1ODRhYzJjMDFiYWJhZjk3M2M1NmIzODE0YmIwMDg5NzIwZTQxOTY4MTA2Y2YyNjUwOWQ0YWE1NDZmY2FkNTUzNGFmMzAzZmZjYTQyYjE2YWU2YzkzZWUwNmJjM2NhY2UxMmU0ZWM3MTg4NDRiZDMwZDIyMjRjYzQ4NmQxMDZkMWM0NTZiZmExNjVlYTAxMjBmYWIzZGYyYzVhYjNhNTIzYmJmYTc4OWRlZWQ0NDAzMmFiMGJlODZlYjdjYzA5Y2RiN2MwN2FhOTQ4ZGQ1Mjc3YzNkZjFkOWQxODQzNTY3ZGVjODRmOTI4OGUwODViMDVhZTRiOGFmMmNlYTVkOWExODRkNTBiZWY4NTU1MGM4MzY2MTNkNWQzYWY1ZjljMjkyOGU2YTg5NjYwZmE2MjcxOWViZmY3NzNlNDZiNzdlMzRiYzA0NzBkYTRkMmNkYmM3MDcxZGE3NThjNGQzOWZlNjUyMDFjODhhYWE4ZTY2MDNkMGJiZTdjM2U5YjJkOWU0MWI2MzQ2ODIwOTJmMTQ3MzQxYWQ2ZDY2N2YyMGM2NGU4MWE2OGQ2Mjk0NjdhNTRkZDg2ZTFjZTEyYzU2MGE2ZjliNjQ1MTJkNmYzODg2Y2JiOWYzN2MzN2ViMzk4NWM4YWMzOGRkNjY4MmY0OGZlMQorU0lHOiAwMWZjY2ZkYjFmYjY4ODhiMDMxMGE5MTMxNzBmN2UzNjY4MTZkYWViZTc2NTBkNzI1MTNkOTUwNmU2NmY3ZDYyMjA4YTQ5ZWNlMGFmMTg3MTQ5N2Y0NTQxZWY2MDViZGU3MTFjOWUwYTEyMDVlZjQ4ZjI2YzAzZGMxYWQ0YWYwMworCitUU1Q6IDQ3MAorU0s6ICBmYTFlMTFkYzgzNjQyMDhkOGUxY2I2NmEzNjFiZTdlODRjNWUzNjgxNjY1ODdkNGZkYjA2YWNlZDdmNjJlMTdjCitQSzogIDRkOGU2ZjRiMzQxNWRmNmNlZGFiZmIyOTVjMTk4NGZkNDE5OTIzYzZhYzQxNzY0ZTMyZDIyZGFmMzcyYzUwZmMKK01TRzogMjk0ZTYzYmFjY2NiODAxYmJmMDRjMWYxOWQwYWVlMTZmNTY1MGE2ZThlZWE2ZmU0MTExMDY2M2VjMDE1MzJiZDQ5NjBhNTI3ZjE1ZWNhNGFmMmY0ZTZiN2IwZmMzNDBjZjk3YWEyMzRlOTJjZjdkNjlkNTBlNDAwOWMyNDk2ZTNlZDRkOWFmZjAwMGY5ZTE4NTI3NWI4MTdkMjZhMGJhYjY5YjdmN2VlMWVhMzBkYWVjOGJjZWUzODdhZTQ2YjRiMjk5YzI3YmRjMDZlZWE2M2YyNGRiZWU5NTVhNmMwOTY5MDM3ZWVmOTFjMzQzMjFlM2M1Yzk3MmZkZTk5MzE4M2I3ZDIzZjZlMDE5YzNlMGNhYzc1ODlhZTRhMTUyMWFmODdlYTQyZGY4YzIyYzIyNzBlYzIzZDZkMTQwZjljZjZkNGQ1MmZhYzFiOWQ2Yzg5MzllZjgxMzFjYjYyYTAzNWM1MjYxNTM4YmNkZmQ2ZGI0MTlhNTVlZjlmZTVkN2E1YWM0NDU3OWRlNzAwODU4ZDc0YTM0MzQ4NDRmMjgzNDJjNTY1ODkyNzIyZTI3ZjQwN2Q3ZjE3Yjc0YTU5MzRiZTkxNWIyMGMyNDAwNjQzMjM1ZjhhYjU3OTVmMzI0ZTMzYzUwNjQ0YTA0MDMzNTQyY2IzODE2ZDc3MGZhODk5ZTczMTFjMTQzMDFjMWJkMGY1YWE2MGEyZWIzMTY1NjgwYzcyMGUxZWZhODA5NmZjMjVkMjc3OTI3NWYxODQyYjJkYjUzYjRkYTBhZDNlNTljMDc1NDBjMjg0NjBjZWMxZmRkM2NkYjdhMzQ3OGI5MWE5Y2FmOWFjODkxY2RmM2FlYWVlY2E5YTk2NTZhYzEzMDcyNTk5MjJmY2E3NGM1Y2M2OWY3ZTI1YzZiZjU4Nzk3M2E0YjdkM2UzYWMwNjM1YjBkYjIyYTAwOTNhNzkwNzY4ODFjNzE3MzZlZTFkNGQ0NWY4ZWQyZDI5YTA2NzFhNjRlNmNhMmY3YTVlZjQwNGIxZWRlYjg0MjAzNGY1NzFiNjk5YmM1OWU1YTM3ZGYwMjA1NGU4NDgyYmYxZTdiNzdkOGU4Mzk3ZGExNWQ4OWQ3MzU1YTVkY2U4NmIxNjgzYTlhYzRlNDA2YzA4YTk0YTZlYjAwZTVhZTE2ZDk2NzIyOTcyZTVjNTBjN2JlZTRhODRkMDY5N2JiZTY3Y2ViN2VmMjk1ZjA2YWFlYTVhYmJhNDQ0NjZiZTBmNjcKK1NJRzogZTg1N2RiMDg3ZTI4ZDY3NTBiZjU0ZTUzNzk3MjUxZDg0Mzk5ODk1NzZjMTJkYTJkOWM4MTFhMTQ4NzdjM2JkNDZjNGVmYWI4NjFhMTBlZWJlN2RhMDRjMGIwYjQ0NWM3YTM5MGE1MGMxM2RlMzZmM2EzYzdhZTAxNTcwMjJjMGUKKworVFNUOiA0NzEKK1NLOiAgMjRhOTE0Y2ViNDk5ZTM3NWU1YzY2Nzc3YzFlZDIwNDNiZTU2NTQ5ZDVlNTAyYTg0NDcxMDM2NDA0MmJhOWFjYgorUEs6ICAyMGQyMWVlNzY0YjFmMzVmOTQ1NjgyMDBkNjNiZDU4MjhhY2E4YzVkM2U5MDQ3ZDIzZjQ3OGI5MjUyOTVmYTJlCitNU0c6IDNmZjlmNjZmYTI2NDZlYzY2YTFiZjkzM2MyYjRjYzBmYmY5MTJiNGQ2ZGI1MDUzNDI1N2Y5N2QwMWU2OThkMDU0ODU3NDdkZTI1NDRlOWY1YTRhNGEwNzUzODhjZjQ0MDBhYjg5YjAzNTNjZTg2MTk4MjAyZGIzYTkwMzc2N2I4NzlhMmFmOWRhYTE1NTg0MzExMWFmMTVhMmJjMzVlZmU0MWJjYzkyYzgyMDdlMDAxMTNiMDRmMTMwMzAwNzk0OWZmYjZjZThkZjRiMGIzNDI0OGZlZGY1ZDljYjJjZWU5NGI4MTJlZDU4ZWNlMmEwY2UwNDU0Y2YxNGMyMGU0OWUwOWZlNjY0ZDZlMjU3NjJlODc4OTU5MzJjZDVjZDMyZWI2YTNhYmIzOGVlMTYzMDc4YzEzM2U5MzU4ODc5MWRiZjZhZjQ5OWEzMWVhNDQ1M2JiY2M3YTg1ZTQwNmM5ODQ4YTY2NDA1MmYxMTExM2ZiYjRmZmE3NjBkZWU0YzI2MWUzOTY5NDI0OTExMTlkYTI5YTMzNTgyZjgyMWQ0MTI1ZTBiNDE2MmYyOGJlYjA2NjAzMWE2NTJkMDU3NDlhYTcyNDRkZDRmM2QzYmIxNWQyNjgzMjhkNmEwMmZjZTI1MDE4MTUyNTdmOGFkNWFmNGVjYmU3Y2I4YWU5NjYxZTM0NGY5MDcyMzE4NzkxZjNlODU5MDkxMTIxZTA4YWVmY2E4OTgyZWFhZjY2MjU5ZDlkZTRmNDZhMzFlNzE2ZGMwMzNkMGY5NWQxZmE5MzZiNmM2MDc5YjEzN2RkMTE1OGQxZGVmMTEzMDE4YzczZjhlYmI5ODA3ZTBmNzQxNTQwNGVhOWM3ODU0NGFjZTdjZTQ2M2NkMWQxYzU3ZTMxZjQwOTFiYzA5MTgwNGNiY2RkYWQwZTE1YTQwY2E5MWFjYmUxYzYyMjRlZDEzY2FmYjRkZjJjODRhYzlmMGMzYzliNTQ2MDA3ZDlkZDZlNTI0YzQ2NzA3MjU2M2Q0YWMwZDcwMGNjMWJmMzBmZWJiMzM0MzEzZGFlNTc2MTc0NWVjMGE1ZTllODgxNTAyNTk1OGYwMGZhMmU1ODA2MGQ3ZTlhNWYyYjcyN2Y0ODY5OWY5MjljODQ1OTkzMDg5MjU3M2Y3ODRmZWY1NjkyNTE4YjVjYTI2OGUyYTczZWJlYWQ2ZWJkZWI3ZWMyNGVhYzkyYWE3ZGNiNDFiNTk4YmQ2ZWZmMzYzMmQwNjk3MjYyOTEKK1NJRzogM2FlMGNjN2JjYThkNzNiZTgzYTliODA5YjEzMzM4YzEyNzA2YWFlZjc1YzRkMWE0NzgxNzhmOWRjNTY1NTE0Yzc1MjllMjk4MDQzZWE3OGQyMWE1YTA5ZGQwNGYxMGFlODc0NDFlNTY4NmE5MzNjOTJjNzU1NDg0MjdhZDNhMDMKKworVFNUOiA0NzIKK1NLOiAgNTUzMmUwOWI5MzdmZmQzZDVmNGMxZDlmMWZmY2RlZDI2ZWU3NGQ0ZGEwNzUyNjQ4NDQ2OTBiZDljODYxMzk5NAorUEs6ICA1MDkzOTY5ZjM3N2JlYzNlMzVmNTllZmRhMDFhYjQxODZjNWQyYTM2NzQwY2YwMjI2NzVlMDEwOTZiMWEzZjBhCitNU0c6IGFkZDRkN2E5Y2UzZjYzZDFmOTQ2ZTg2NzkwNjU1NDVkOGM3YmYwYTJjYzNhNGMwMGI4ZjE0MmYwOTQ1YWUzNjJjNGM5NDYyYTc1NzZhNDA1OWQ1Nzg2MTY2Mjg4NGJkODBiOTZkOTBkMjc5YTk1MmVkYTk1MmQzN2Q0Zjk1Y2YwZDcwZGE5OGY0ZmJhY2EzOWUxNjlmOWQ5NDVkNDFmODcyMzk3YmJkZDU3MDE0NTQzMDNkNzdkMzFlODYzNDgyNzFkYTQwYTFiOGYxZTU3YzM2ZmNkODAzZTE0ZmExNzcxNmM1NjMxZWZhMDFkM2E3OTVkYzIwYjJiZGUzNmFiNzNmZjZhMmQ1MzNiYzE1Y2NlMjIzMjg3MTNjM2M5Y2NkMDcyYzNlNDUwZDdmMjJjMGM5Zjk0OTE5NzUyY2JmZTQ1ZWU2NTVkMWI1MzY3NjU5M2NkYjQ0ODcwNDEwMjYzMWNhYWE5NzY5NTJlYWExZjZjMmU4NzY1NjRlNDIwZjBjNjQ2YTBmODgzNjVmNzY0MTViNDA4NWY2MGEzMzhiMjljNTE2MzNlNTQwZjBiZjMyZDQwODdlN2QwZmI2ODViZTg4Yzc1OTVkYzUzMWM5OWI0ODk1ODQ1NjBhZDgyMzRiMThlMzlhMTA3Y2Y1ZDg0MmRhYmQ0MjFlNzdkMjZlYTVlMGYxNDA1Y2UzNWZlNzkyNzE0ZWI0ZWUxYTgwMTc2NDhhYzFhZTczOWEzM2Q3YjFlMDg5MTA1ZDFlNWFkZDI3YTYyY2U2NDE1NDU3MDM0MGFmOWViMTRlN2ZkZmMyZjlhMmMyZmNmY2RhYzNjYzQyMjc3NjNmNGQ2Mjk0OTc0NzlmODQ5MjE2ZTVkOTBlYzE2ZGZhMzZiNzI1MTdmN2I1NDg2YmFlZTdmZGE0NDUwYzM1MmNmZmJiYWU3MzkyNmM4NDMyMjRmOGNlNDRiMzhkYWU1M2YzZWFkMjE4OTBiNTJhNzgwMTA3NTI5MTY4NGZkNTkxMGVkODZhZDMzZThhMDA3ZjZjM2Y4NWMxNmIyMDkyOTM3NDAxODRmNTg5MDg3NGQ0MzFjZDRlMGVhNDA4N2M0OWMzNDcxZDc4OWM4MTNjNmRjOWE3ODY5OTM2M2ExZDg3MTk3ZDNiOTJjMDI4NjY4OTMxMTgyM2Y0ZGYyMmNlODAzNWU3NTczMmNkZWE3ZjU2MjFmNjdkYjBlMmE0Y2E2NjE2MTkzMjIxYzBhYTNkNmRlNTBkODUyODJlZQorU0lHOiBkNTI3ZmYwZDRhMjE5ZDYxZjQxODEyMTIwNmE1NGFlNDk4NTg1NGEzMTA0ODI3NDQ0ODZlNGQxMzBhN2RlOTdjMzE5ZGY4MzcyYzgyODI4YzkzNmU2YThhZmQ5YzVkZTE4Mjg1NzNkODI2MWFlOTM2NWI4ZjIzNzY3NjE4MjQwMgorCitUU1Q6IDQ3MworU0s6ICBlYjM2NTExMDA5ZDM3YTljNDZjNGQxMzc0ZDBiYmQwZDk5ODFlNzhjZWU3ZDE4OGM1YWFiOTgzZWMyMzllMTBjCitQSzogIGIxY2MyMTJiNDUyMWJiZTdiMTlhNzY5Mzg3OGE1NTg0NDBlZWMzNjIwNWQ4NDM5ZDA0MGE0NmE5OTAyZmJmNTUKK01TRzogYmEyNDY2ZTU2YzFkZjc3ZjIyYjZmMDI0MWZjNzk1MmFlOWJjMjQ3NTY0MTlhOTQ0NmRkMmI0OWUyY2I5ZGY1OTRlNWI2Yzc3YTk1YWE1ZmJkOWRjNTdmZWM4Mzk2MmM3NzUxZWViYjRiYTIxODI1M2Y5MTZhOTIyYTUxMzk2NjNlMzIwM2UzYmU0ODJiZTM3OWNhMTUxYzQ2M2Q5YWRhMjE0NDYxMzVmMzU2OTk0ZmE1NDQ5ZjA4NDQ3OGY1YmI0ZjViYTYxNDVjNTE1OGViN2IxYzQzYzMyZWJlYTI1ZTA5YzkwMGYwMWVmOTFlOTJmODhjMDNjNzY1MDRhY2U5NjQ2MDE2ZmZjMjc4OTU1OWQwZjNjYzlkMDBmYjYxYmRjNmFmN2QzOTQwZjMwMmU1ODhlMDRmNzlmN2IzZDRiOTFhNWQxOTNhNGY4MjIyYmZlYjY5YmYwMzQ3ZDk4YWQ4MWVmOTlkMTMwZWJjN2IzNmIwNzgzMzk0ZWVhOTJhMzhkZGQ1ZTc0ODBkMmFkZDRlNGRlZjUzZWI5OWM0NDliZmY5NGU0NzE4YjA5ZjJlYTliMWYyYjg4NjU5NGE5NWMzM2E2OWUwMzMzMTU0ZTQ0MGFiMzRiN2I2YzExMzRkODE3OWI2ZjBjNTYyNTFhOWFkOGUxYjZiMGY5YjhhNWM5NzA4MWE3ZjhmZDA1ZDBiMGFmZmM4MmRiZGRjOGIwYzBhYjdlODMzZjMwMDYyNmQ0Yjk3M2IzZjYwZmVhYzU1NTcxZTg5Y2RhMGYyYjQ0MWVkMmZhYTY2OWE3MGQ1NTZjYjQ4ZjliMWQxY2JjZTMyZWRlNWQxNjZiMTE0M2UyNjRiMTFlYTMyNzY4MWNiNTU5ZWRkMTNjMzY0YmQyYmFmMWZkNTRiYjc4MTgwN2JkNTljODY4YjBlNDc5NWE3NzllNjdmMGJkMGQxNGI1YTZiOWU0NDBiNTdhNTgyMzMyOGI1OWFmZmJkMDI3ZWRhN2RkNzg1MDc5YzVmMDJiNWUzMjg5MGIwMzg3MzA5ODZhMzlhNWE5ODM0YTNmZWQ4NjhiNmY0NWNiZGQyOGFjYjI3MDlhZmY1NTYyNjM4NjRmOWFlMWU3NTdiMzI3OGMyODhkYmUyOTMyODI1NzEyNzczZTQzMWY3YzI5MzI5ODU3ZmRhZWE3OThlZDkzOTIwODkzNjMxNDAyZTZiMTNiYWI2MmI0ODU1NDYxZWRiOTQ2MjBmMmQxNzUxODY1ZjQ0NWM0NjYKK1NJRzogOWY1ODM3MjRkZTU1MmVhZTgyZjI1NGFjNmUyZWQ0ODNlYzFhMDczNDYyNjY3MzVjNDkwOTIwNjkwYzFlM2ZiMmE5ZTlhMzQxOTRlZDY0NzM3MzNiMzAwZDRmMjNjOWFlYzBkYTVhMjAyMjA1NGNhNDM4ODVhMTVhMjk4NDMyMGUKKworVFNUOiA0NzQKK1NLOiAgN2RiYzgxOTAyZTRlYWFiMzA3NzU0MGY1NTk5OTVjMzg3NDAzY2FjMzA2ZDQ4NmU5NTljNWViNTllNDMxYzBhOAorUEs6ICBlMDMwNjYxMzkwODJmNjEzNDQ4YmRiYzI3ZmU1M2FhM2Y4ODk5NGMzMWRkY2UwMDJlMzZiYmIyOTYzZGYzZWM4CitNU0c6IGRmZjc5OGIxNTU3YjE3MDg1YTA2MzQzNzFkZWQ1ZGRmN2E1YWNiOTk2ZWY5MDM1NDc1ZTY4MjYzMzZmNjRhZDhiODRiODgyZTMwYmFkZWMyYjRhNzExOTk4NzUyZjRhMTU3NGJjMWY4OWQ0MzI1Y2YyYjM5ODYxMDQ0ZGQwMzY5MWU3MWQwNzc2OGI1OTMzYTMwNTJjYzdjODFkNTcxYTlkZTA2MWRjMTkwMjZjMmYxZTcwMWYyZGNmMjZhODhkMzQwMWJjOTlmYjgxNTU5ZGNhNzZkOGEzMWE5MjA0NGEyNzM1ODdkNjIyYTA4ZDFjY2U2MWM4Zjk0OGEzNGRlZDFhY2IzMTg4ODFjOWI0OWY2ZjM3YzMwYTY1ZDQ5NWIwMmQ1NDI5ZTdhYjQwNDBkOGJlYmViNzg3OTRmZjczNmQxNTExMDMxYTZkNjdhMjJjZGYzNDFiOTgwODExYzlkNzc1ZmIxOWM2NDc4ZjA1ZWQ5ODQzMDEwM2VhMjRjMGY0MTRkNGNjMDdkODYwYjcyZGM1NDJmZjIyZDgzODQ1YTQyZjhiYTQ1Y2E3ZmYzYWFiMGIxZTdkZTJiMTA5NGRlYWMwOGQxNmVlZTAxOTY5ZjkxYmMxNmZlYzI5Y2NjMDYxYzU0ZGI1MzQ1YmE2NDg0MmRhY2M5OWVlNzcyOTQ2OGQ4MGEzZjA5NTU4M2Q4ZTgwMTI0MDg1MTlkNTgyY2MzZmY5YTJlYjdhZWJhYTIyZGI4MWZmYzc4ZWU5MGVmNGVjNTg5ZGNjZTg3MTE4ZGFiMzFhNjMyOGU0MDlhZDUwNTlhNTEzMmM4MmRmM2NlZmUyZTQwMTRlNDc2ZjA0YzNhNzAxOGU0NTI2N2VjNTAxOGVjZDdiZmYxZGRhOTI2N2U5MDY2NmI2YjE0MTdlODlkZGFjYjUwODU5NDNiZWZjN2FkMmY0ZGY1ZjFlZTBhZjk0MzFhZWViNmIyNGE1NTE1YjkzZGJjZjY4NjQwZjdkYWY4Yzk2MWU1NjdkNzUzNDkwMDIwNWMzZGYyMTg0YjZhYzJkYTk2MWM0YzFkMmJjNDliNGVhOTZiODE1NGZmZDRlZmZmZGM1ZTU1YTcxMTljYjhhZjQyOWU4NTEwNWRmZmQ0MWZlNGEyZWJiYTQ4MTY4YWEwNWZhN2RmMjdjNDI5ODczNWZmODY4ZjE0OTZiZWI0YjJlZDBiODk4MGM3NWZmZDkzOWRkZDFhMTdlNDRhNDRmZTNiMDI3OTUzMzliMDhjOGQKK1NJRzogNWI3ZjY1MmYwOGYyMjlmZGExYjBiZDc1OTM3N2IzZmI3MjZjMWI5YzlhMTBlZjYzNDI2ZDM1MmRkMDg2OWJkNTRkODc2YzMwOTJmMWNkNDExYzM3NTdkM2M2YjZlYTk0MmFhNzBjM2FhZWI0MjE3YTRjNzM2NGQxOGU3NmU1MGYKKworVFNUOiA0NzUKK1NLOiAgOTFiMDk1YzhhOTk5ZTAzZjNlZDc0OWNkOWYyZmFhY2MwMDc2YzNiNDc3YTg3YWI1Y2NkNjYzMTczODc2NzQ0NgorUEs6ICBkYWQxNzRkMzU5ZGFlY2NhOWM2YjM4OWJhMDk2NDUyYWI1Y2E5MWU2MzgzYzZkMDQyYTI4NGVjZTE2YmE5N2I2CitNU0c6IDliMGQ4YjAwMjk5ODUyZDY4YmJmNDk3ZmU2MDM5NjFhNDg1NDY2YTk5YTU0ODQwMDVkYjczZDRlNGJhZDgxNGU4NTc0ZWZkNTRkNjQ4YmQ1YzkxYWU4NDgzYzU0YjJmOTk4YjAyZTFhYmQ2ZjQwMWEyNTUyNjg0M2E1ZjJhMjNhOTdiZDU4OWQxZjdlMWFiMTQ5MTViMWUzNTlhMzk2ZDM1MmMzNjBhZTY1ODQzMjVhZTRiYjdkNjI0ZjYxMjU1YzVjN2JmMGE2N2FjYWI0NmMzYjU3YjM0NTM0YzBlZTg0MzFkMjYwNTc2NjA2Y2JkODRkOGQxODM5ZTczZGE2ZmU0YjBiOGI3OGYwZjk1ODgyN2MyZjFkOTNiYTdhMzQ2ZGNjNzVjYjU2M2RmZmRlMjZmOTk3NTk4ZThiNWMyZjE2MTdjNmZlZmM5YmU0YjI4YjU0MDFiMDAwNjQxM2EyNTE2OTBkMTIwM2FhYWU0ZjZkOGEzZmIyMWYyNDAwOWFiM2JmZjEzNzM3YThhN2U2NjQ2YzAyNzMyZDllYzVhNGE1MTA0NjllMmQyOTllNGNjMWFkNjQ4MGE0ODJhYTk1NmY4OWRkY2NjYzY0YTEzNmZiMTViODc2YjZlY2Q4OGM3Yzg2YTRkZmM2MGU2NjYyMDdjNjA0MTY3ZDE2MzQ0MGNhOWFiOWNmODdhNWUwZjdiYmM1NTE3ZGU0ZGVlODc2YzAzN2Y4Y2M5ZDk1OWM4ZmY1ZGJlOTQ0ZmY1NGNkOTFhNzcxZTI5MjMxZjhiNWYxN2Q2MWRlOTA0Yzk1NWZlMjAyNWRjNTJlZDQ4MGZiM2NjOTBmMjMyNDU5YzYwN2VmN2UyYWRiNTJjNzQ4MmJlY2Q2N2FkMjE0OWE0MTI4Zjk4NDAzOGI1OGFhOTAxNzY3ODIzOTM2MDRhYWM3NGMxODIwOWEzZDZhNzg2MzBjMDE5NTVhN2NlY2U1ZGE4Mzg0ZGEzYmFmNjNhYTJkZGY1OTYzZmFlMDViYTNiODFjNmEwM2Q4NmEwMGVmNzhlZGI0MTg0ZmRjODliMWQ2YmZlYjMxMGZkMWI1ZmNjZTFlMjE5NTI0YTNjZmIyZTk3MjU3N2YwNmIxZGRkZWJhMDA4NjVkYWU0OTc5MDAwYzAwOGFkOTlmM2I2MzhjY2ViOGU4YzdhMGY5OThkMzRkOTIxNDNkODFjMGUxYzA5NmE5MjVjZWJhNjVjNDMwMDNlZTE4ZDQ5NGQwMDNlOWM2MWY3N2Q2NTc1OQorU0lHOiA2NGVlOWVmZGIwYzI2MDFhODM1ZjQxODUyMDY0MWU0MzZjN2RkNDdjMzMzZDlmYzMwY2ZiYjllMzkwZmU3NjQ1MzA2NTQ3MDhiNDBiMDM1ODE4OTlhOWFjODcwZWZkNzY2ZmZiYjQ2MzcxNTJmOGZmMjc3OTY0ZmUzNTQyNTIwOQorCitUU1Q6IDQ3NgorU0s6ICA4YzU2OGIzMTBhY2U3ZDFmMGVkZWNlZmQ2MDNhODg0MDAwNTQ0Yzc5MjU2NWQ0ODFjM2QzZTA2ZTJkODJjYTk2CitQSzogIDVmYTZlMjY3Yzc2NjczNjg0MTQxMTA3MmQxOTgzZDE5MDBhY2YwMWQ0OGMzY2UxMTc3MGIyNmY3OGRhOTc5ZjcKK01TRzogYjU5ZjVmZTliYjRlY2ZmOTI4OTU5NDcyMWYyNjQ3MDQ3YjBkYTVlMGU0OTQxYmJlNTdjNWI3MjJiNDc2NzIzZjBhYzU5NzBiNDExMWY4OTNiY2FhNDExZjI4ZmNlYjRmNTg1YTJhNzE4NzAxOGE5MDRiNzBlZjhmZTFmNjU2OWE1NGQwMGFkYTM3YjY5Y2I1ZTljOWQyNmMxNmE5MDM1MTgxNDhlMDRhMWI5MzZhMzIzMjljOTRlZTFhOGZiNmI1OTE4OTJjM2FmZjAwYmY2ZTQ0ZGQwYTc2MmJhYmU4OWQ3MDYwYzE3YjkwMzkwZDIzYmY5ZDM2MGEyOTNiODMwODM4MzA4NjkxNmUxMTgyYjFiYTQzMzZmMDAxYjhkMjBkZWFlOWEwMjlmN2U4NTM5N2E5YWU1Y2YzY2ExMGM3ZjM4NzU1ODhiOGZmYWJiMDYzYzAwY2EyNmY1ODBmNjllZGM1MjdhMWFjY2Y0ZjQxMzk3YjMzNzY2YmNmNmQ1NWViOGRlMDgxYTQ4Yzk4MWQwNWMwNjY2MTdiODBkOGY2ZjVlNjBlNTlkZDliOTMwYmM0ZDA0NTg2NDAzYmI4NjhkZjc1OTMzYmRkODYyMzBlNDQ3MDM2YzE3NWExMGRlOWJiMzk5NTNkY2IxOTY2YTFmMTE5MTIwNzhlMzU4ZjQ4YzViMjA5YTYzNmM3Zjc4M2Y0ZDM2YTkzYWQyY2MyZTMyNDQ1MTkwNzhlOTlkZTFkNTE1OGIzOTYxZTBmYzVhNGYyNjBjMjVmNDVmNWU4NTg1ZTYwMWRiMDhiYTA1OGQyOTA5YTFiZjQ5OTVmNDgxMzQ2MGQzNjk1MDNjNjg3MzY4NWViY2QzMzMwYTEzMGI3NWYyMzY1ZmIyYTVhMzRlYTYzZDk1OGEyYTg2N2U5MDU1MmQyY2VjOGMzOTAwODRiZTBjMTA4YjBmZDJkODNjYjkyODRkYjViODQyY2JiNWQwYzNmNmYxZTI2MDNjOWMzMGMwZjZhOWIxMThlMWExNDNhMTVlMzE5ZmQxYjYwNzE1MmI3Y2MwNTQ3NDk3OTU0YzFmNzI5MTk5ZDBiMjNlNTM4NjU0MDNiMGFkNjgwZTliNDUzNjlhNmFhMzhkNjY4NWFiZDM5N2YwN2ZiY2E0MDYyN2VjYWY4ZDhkMzAxMzNhNmQ5ZDVhZjAwOTE5Mjc1MWM5YzQ1Zjc3YzBiYzAxMTI2ODgwMGJmNTUyNTEyNzMwZTY5OTczYzViZjM2MmFiMTY0ODk0YmYKK1NJRzogZGViZGQ4ZTVkMzExMmZkNzdiMzk0YWEwZTM2ZTk0MjZiYWM5MWRmMTI2ZmE5YzMxN2NlYTdjOWQ0NTk1N2NkZDk2YTQ1YWUzYWQ3NjA0MTNlZTEyMDVhZmQ3MWEyOWY5YzNjYjU4NmNkMmQ3Y2QxZTkzYmMxNjUyZmMzNGRjMDQKKworVFNUOiA0NzcKK1NLOiAgM2QwOWFmY2VlM2M0MzJmZGZiNmJkY2VhZDU0ZTNkYTViMWI0MTY1YzUwZDZkMzEwYjdmYWQ3ODdiNDQ0ZDY4MAorUEs6ICBiMGQ5MDI4YzRkMTQ4N2QyOTNlZDU4NWE3NmJjOTRmZmZiYWZlMmM2NWQ5ODBjNDk0ZTE0MWU0ODEwYTM1Y2I5CitNU0c6IDc2NzE2NWNhYWUwZTU3OGYxNjUzN2UxNzUwYmU3ZGU4N2E3ODlhNTFmZjJkZTExODM4ZjU2NGUyNTgwYjIzOTEzNjJkMjg2OGE1YTQ3MDhhZjE1ZDJlMmRiN2I5YmUzOWMxNmFkY2MxMjAwYjM0ZTZiNGQ0MDI3ZGRmZmMxYTJhMzU5NWUyOWU4NTVlYzUyNjFiMjBiZDU1YzQyOGIwMTMwOWJhZGI1OWUyY2EzZWRiOTY3ZmMyZjRiYWMwNzI5ZGRmNTRmYjZjMjAwNTdiZGRhOWU3YWY3Y2JmYzA5MmZiYTg2NWZkMzI3NWI5ZDNiY2IwYzM0NmI5NTFkMTcwYWM5YWE2NTBhODZkZjQ5ODU1ZDQ4YTFiMzdjZTU2YzlmMjczODlmNWM4YjE1ZjVjMmM5MDBjNGYxMDdjMDY0ZjYwM2U0Zjg2N2VmMmU5YzEwYTFiNzQyMTBlNmI4OWJiMDExNzkzYWE4NWRlZDQzYjUxYjc0OWJhN2Y3MDI4N2I2YmMxYjg5NDM0ZGI4YjhjOGI1ZDczYjIxNGI0MWUzNmI1MjgwMDViZmJmZTAwMmUyMWIxMDA2ZmI5ZDI0YmFiZDcyMTA2ZDA5M2UzYzcwOTNiMzEzOGFlYTcxOWQ2OTQ3OTA4NDY0NzQ5OGNkNmM5YmJiNzQ0NTA5Y2Q3ZGE4ZGQ2MWE2MjcxMDBmMDNjMjFlNzUwYWNiM2ZjZjQ2MzFkN2MwZjYxODE1NGQyZTVmYTY2NTZmYjc2Zjc0YzI0Nzk1MDQ3YmJjZTQ1NzllYjExMDY0M2ZhOThlMWY3NzZjYTc2ZDdhMmI3YjdiODY3ODE3M2M3NzNmNGJlN2UxODJmZDI0ZGQ3NjI5MWFjNjdkOWYyNmEyOGM1ZTNjYjAyNWM2ODEzYTM3OGIzODMyMjQ2NDJiNGFlZmFkMGM3NmE2NTc5NTE3YjhmMzYwNzk3ZGQyMjYxM2VlNjgyYjE3OTM4MTk1MGZiNzE2MDlhNWZiNTQ5NGQyZDU3ZGNiMDBmMjZkMWU3Mjk1NmY0ZDY2NzI4MzBlMDVjMDFiMzc3OTY3N2MwN2VhMDA5NTNjNmI4ZjBkYzIwNGM4ZGJkY2NiMzgxYmMwMWI4OWM1YzI2MWRiMTg5YWIxZjU0ZTQ2YmMzZWRjNGRlNWFkNGYwZWIyOWMwYTEyMGU0MzdjZDhmMzdhYzY3ZDQ4YzdmMGU3MzAyNzg3MDhmMDJiNTRhZWU2MmI3Mjk1MmJjMWMwZWI0MzdjYThiZDU2NTU0MzcKK1NJRzogODk3MzlmZTQ0MWNhMGNlZDA4YTZlYjU3OTZlOWJkZGEwZTc0ZmI0NzM1MjhmZDQ5MDdlZGI2NTlhYWI0NGQzMzQzMjI5MDQ2NzE2MzY4ZmFmODhlODVjMTY0NGFmNjZmZjJkY2FmMGIxN2FjOTNjYTEzODE5ZjNmMjQxZGQzMDAKKworVFNUOiA0NzgKK1NLOiAgNDFjMWEyZGY5MzY5Y2RjOTI3MTY0YWE1YWRmNzc1NzEzNmFiZTUxMzk1NjA0MjY2MzM0Y2M1NDYwYWQ1NjgzZQorUEs6ICA0MDU1NzgzNGNjZThlMDQzNTgwYTQyNzJhODgwNGQ0ZjkyNmU4OGNiMTBkMWRmMGM1ZTI4YjliNjdlMWI2M2RhCitNU0c6IGI2NGIxNGJhNzdkMjM5ZTZmODFhYmUwNjBhY2NlZjg1ZjA0NDJiNjUwYzQ0MDE1ZWZjNDNhMGFhMmJhMTBiZjQ4ZDMwMThiMTk1M2RkZmZmYmNkYTViZjNiYmUwYjZiM2U0YjBkOWEzMmM2YjcyNWJiYjIzMWUwYTI3MDQ0NzFlZThiYzFkNTk0ZjVjNTQyMjZmNWRkOWRmYTE2M2NmYzE0NTJjNjFmOTNlNGY4MTM5YWI0Y2U0NDc2ZjA3ZWM5MzM2NjFlYWU5MWI2ZDUwMGJmNTA4YWM2M2U0YmFhZjFmZmM4ZjAwMDdkODAyZTAwNWYxYjRmYzFjODhiZWU0ZDVlOWU3NjM4NGY1YTcwNDNiZDY2MGNjZTcxZjNiNjdmMDFmNmFiODQ0Mjk4NTMxYWFjNzNhMzlkMDQ1MzcwMDg4ODU1MDA1YTA5YzZkMDQyMzhlYTQ3OGRmYWNhZDFlNmIyMmIyYmU0YzQ2YjBkNTliMWViYTFmMDYwYmY3ZGE1ZDE1NjZjZjFmZGI1YzU0M2EzMzkyNmFmNjNmMDFhMGRiODZlMWE2NzExYzQ3M2RjNzk1YWIyODNjOGQ5M2ZhY2ZiNTcwMWZhMmYyZjZiYjk5ZjliN2UzNzQ5YjA3MWQ1ODYwN2JlNDRhNzA4OWJjYjUwM2VjMTQ5NWI1ZmVlZGIzOTk5NjFmZDM2NzdkNzQ5M2VhYTNiM2U5Y2M1ZTM2NDJmNDBkNDdkZTliZmVlN2MyMGIwZTUxOWM0ZWI0YTQwZjRkYTQ0NmVkNmFjN2FhY2EwNTNlNzU5Yzk3ZGFiZTBhOGVjMmY1OGU3ZjJmOWIyMDcyNzYyZjlmNzk0YTZhNGUzNjA2MGI4ODcyYmQyYzE4ZDA2YTg1YzJjMTQxYTc4MjkzNzczZWU4Y2ZiZjE1NGI5OTMwY2QzOWRhMzFiNDk3ZTczN2E3NzUwYzkwYTEzZjVhYWExNDdjZDBkYzQzMTFmMmUzNDk0MTI1MmVmMTk4YjBjMWY1MDgyN2U1NmM5ZjE2ZjU5NWFjZWQ2ZDJhNjkzNDY1MzE0OTVhNjQ5OTc3NGQzNjA3NjZjYTliZTVlZDg4ODFjMGRiMjZlZDdjNWU2ZmYzYTRmOWI3M2NkOGI2NTQ2NDBkYzk2YmY0M2JkNDI2YTBmMjhjOWIyNWZhNzA0ZDYyZmYwMjg4ZmNjZWZmYWFlYmQzZWEzMDk3YmNiYmQ3Nzg0MjBlYmM1MjBhNDE3NzMwYTFiNWIzYjhjOTZjZGE5ZjRlMTc3ZAorU0lHOiBiOGIyNzUyYTA5NzE5NmMyODk4NDlkNzhmODExZDlhNjJmYzc2NzI3OGYwYzQ2NjI4YjUyMWY2MmVkMjc1OWQ3NDQ2MmExNzVkYTIyNDAzZjE1MDIwNDQ1Y2FlMDZkYTNlZDYxY2NhNjIwM2I3MDA2MzYyYTBlMTk4OTYzZDIwZQorCitUU1Q6IDQ3OQorU0s6ICBhMDA2MTE0ODk0NjcxMjJjNGMxNjRiZmI2YTYxNmU2YTYxOWI5ZjgzYzQzNjcyMDZiODVkM2ZiZWMzOGNkNjJjCitQSzogIDU3YWI1OGJhYmI0MWRjMGRhMGJjZDUwNjA1OWFhYzlmNDZlY2E5MWNkMzVhNjFmMWJhMDQ5YTlhYzIyN2YzZDkKK01TRzogMzRkYjAyZWQ3NTEyYmY4YzY3ZDM1OWU3MjAzYTJlYTQ0MWUyMGU3Mjk3NjZjMTVhYTAwZmEyNDlhMzUxOGZjMjllZjg5MDVhYTViNDY3MDk1OGM2YTQ2MGQ3N2IzYTgwZWZjYjQ3Mzg1OWJiYWZmODYyMjIzZWVlNTJmZTU4YWNmZDMzMTVmMTUwZjNjNmMyN2ZmNDhmY2E3NjU1MmY5OGY2NTg1YjVlNzkzMzA4YmY1OTc2YmFkNmVlMzI3YjRhN2EzMTMyMTRiOWFlMDRiOTY1MWI2M2NkOGQ5ZjViM2JlYzY4OWUwZmQwMDBkZDUwMTc3MGRkMGU5OWI4Zjk5ZWFmYTA5YzM5NmEyNDVhNGE5NmU1Njg5NmEyOWIyNDE5MGIxZWYxMTA2M2YzOWI2M2VlM2E1ODZiMDc2MjdkZDM1MDBjNGUxNzBiODM1ZGMwZWMyMzZmYTVhMzVjNDQxODQ3MDc1NjVjNGE1MDY2MmQ4ZGJjY2ZmZjdmOWE3YTY4ZDAyMWI0YWY2NGQ1MzJiN2MzZDI3NDc0MThjMmQ3MTdiYjZhY2E2YjU4NzQ3YWU0ZGQ1NjQxZDgyNmY3OWE4YTMxNWMzODIxMWE1MzhhOTI5ZTViNDUxZjYyM2Y0ZmNiYmNhY2RiODZjODc1MmVhMTNhNjE3YWI0MTRhYjY1M2ViMmU2OGQ1NDIwZGY3YzZkZjkyNDM4MTY4ZGNmOWMwNjY1ODFkZmU3YjJjNDY4MTk0YTIzNzA3ZGU0NjU5YmQ2N2ViNjM0ZmYwMjQ3NDFjNWZjODY5OGZkNGRjNDFmZTVkZmM2Mjk5YjdhMDhlNmZmY2EzNzEwOWMwMjEwYzhmOTRlYTJkM2RkYzk3N2ZmYzBiMzc5NGZlNmJhNDMzN2M3YWFiNDM0YTY4YWM2NjU0ODRlYTgyNDNhODRiNzlhYTE4MWVlNmFiNWFhMzdhMzJkODc5NzI1ZWRjMDE4Zjg1NTIxODE4MTZkN2QyNzJjYTg4MThhN2I5MmU2ZWU0NDU0ZDFmNzgyOGRkOGFmYmExYTc5MDM2NGI0ZmYyOGQ4NGUwMjg1OTczNTNlYmJlZjI0ODM3YmMzMTllMWFlOGYyYjBiNmE4NTFiNDg5YzNlMTcwZWVmNTNlMDY1ZjcwMzI2NTNjZDZiNDZkOGU1N2U0ZTExMWI3ODliYTk1MGM0MjMwYWJhMzVlNTY5ZTA2NjE1NDAzNDA3YmNlMDM2OWFhYWI0ZWFmYWVmMGNhZTEwOWFjNGNiODM4ZmI2YzEKK1NJRzogYzc3MWJhMGEzZDNjNGE3YjA2NGJkNTFhZDA1YzlmZjI3ZmQzMjY2MTBmYmZhMDkxODMwMzllNWVkZjM1NDcyZGRlZDhmYzIyNzViYmNjNWRmMWJmMTI5ODYwYzAxYTJjMTMxMWRhNjAyZmJhZmZjOGI3OWMyNDljOWNjOTU1MDIKKworVFNUOiA0ODAKK1NLOiAgZGUxNjM0ZjM0NjBlMDI4OThkYjUzMjk4ZDZkMzgyMWM2MDg1M2FkZWUyZDdmM2U4ZWRkOGIwMjM5YTQ4Y2ZhZgorUEs6ICA5ZGMxNDY1YjMzODNmMzdkZTAwZWEyZDNjNzBmMmM4ZmFjODE1ZjAxNzIwMjljM2Y1Nzk1NzljOTg0YTU4OTVlCitNU0c6IGQxMGMzZTRkZTdmYTI5ODlkYmE4NzUzN2UwMDU5M2QwZWVkNGQ3NWVlNjU4NDZkYWIxNDk4YjQ3NDlkNjRmNDBlMzRiNTkxMWM1Y2UzYjUzYTdlMzdkMmQwMmJiMGRhZTM4ZWQ5NjJhNGVkYzg2YzAwMjA3YmVlOWE4ZTQ1NmVjY2FlOGJkZjRkODdhNzY3NDYwMTQyMDFhZjZjYWZmZTEwNTY2ZjA4ZDEwZGFhZjA3NzE2MGYwMTFmZWFjYTI1YjljMWY2ZWNhOWZjNTMzMTRhODA1NDc5NTE3NTQzNTU1MjUyNTdkMDlhN2ZkYWQ1YmMzMjFiNzJhYTI4ZDFlMDJkODY5NmQ0ZjllYjBhZDNiMjE5NmY4YmNmYWViMWQ2MTQ4Mjg3YTNmYWVmZWY5MWE3YTNlMDYwOWMyOGNlNTlkMGNhMTRkMGIzMDUwZGQ0ZjA5NmI3YmMyNTEzOTg4YmEyMTIxMjhkNTAyNmRhYWE3MTg4ODQ2ZGIyMWM1YzFkMTc5YWI5NDg3YzFhNWJkMzQ2NTg4MTI3YzIwMzk4ZDM2MmQ0Yzc1OWNmYWIyYTY3Nzc1MGI5ZTQ1Njc2YTFlN2UwOTJlZjAyZWRiZjI3OGZiMTlhNThlOWJmNmM5ZTk5NmUyNGVkYWQ3M2YzY2UzMWZhMDRiNmQ4NTMzNDM2YmY4MGI0YjJmODA1ZWQ5MWU3ZmNkYTNiYzJiYWIzYjJiYjE1NzE1OGFmMGVhOGUzZjA3MzFkZmFkNDU5ZDJlNzliNmQzNzE1ZmU3YmYxZWFmYzUzOTc1OTMyMDg4NTdlNTdiN2ZlYjJmNzM4Nzk0M2E4ZTA5MTM0NzBjMTYxYWVmNGZlMjA1ZDM2MzdmMjMxNzdmZjI2MzA0YTRmNjRlYmEzZmU2ZjdmMjcyZDIzNGE2NzIwNmEzODhkZGQwMzY2ZTg5NGVhYTRiYjA1ZDczYTQ3NWYxYjM0Y2EyMjJiYmNlMTY4NWIxYjU2ZTAzNGU0M2IzYzQwZTgxZmZmNzk2ODJjMTlmMzJhYTNmMmE4OTVjMDcwOWY5Zjc0YTRkNTlkM2E0OTAyOWVjZmNiMjgzMDgyYjA2N2YxYTBkOTUwNTc1MGZkODY3MzIxOTk5NDg0MjQ5ZWZhNzI1ZjUyYzk0Yzc1OTYyMDZhOTExZjNmNTA1ZDYzZjAzMTMyNTRiZDQ0NWYwNWJlMzk5NmI1OGZlMTgxOWFmODczNTJlN2YwYTJjYTMyMGQ5Y2MwMGE1ZmU3N2FkNDE2NDBkNTBiZTg0MzYKK1NJRzogZDIwNTA2ZWI4NDY5MjNhMGIxNmZmODJmYjJjMzkyM2IwMGMxYjNiY2M2ZTJmNjQ4MmZiYTI0ODA3NTIxZThlMDIyM2Y2OTJlNjJlYWM5OTNmNDk4ZjY3MTAyYTA0ZmQxYWNmOWM3ZTM4ODhkODU3YzlhMDgwYjhhZjYzNjEwMDYKKworVFNUOiA0ODEKK1NLOiAgYzczOGVmNWYwOTM1MjgxYmE2MjVmYTQwMTRkNGE0ZDBiZTdlMjhmZWQ3NzlhOWNmNjU4ZTIxZGJhNDNjZWJjMQorUEs6ICA5NTc5OWZhZjcwNmQxOTVlNTQ0Yzc2Y2FmZGRmMDlkMDJkMWJlYWZjNDJjOWQ2YzllYWQ0YzE4NDU1ODdkMzllCitNU0c6IDE2OGQwYmM1NTk4YmUwMmY1NDQzYmZlN2RmYjg4Mjk5ODVjYTVkMjgyYWY5Y2YxYjE0ODI2MDJmMjQzZDQ4NmJkODJiYTAzOWEwNzUwOTA5ZTliM2M3ZDRkNWY4YjhiYWY0NTcxOGFmMDMxMTg1NGY0ZDFjNzgzN2YzMWQ4ZWU2OGQzNTU4ZTdlNTFlMGM2NDZhNGE2Mzc1OTZlZTkwMDU3YjAxZWQwYTE3ZGFhMzk1MGI4MWFiNDdhZThiOTRjMTdkNDA3NDY5MTNjNDZiYTE0NzhiZmNhNTFiMTY3NjI4ZmMzZWUxZTIyZjJmMTlkNmQ4ZGFmOTNkZjY1NDBjZWRiN2E4NTlkMWEyYmE1OTExYmE3MTc2NmU4YjdmY2UwYzBlODY2MzYxNmQwMTgwNjk3ZDc4Y2UzMDQwZDQzODEzMTk4MmYzZjgxMTJhY2NhMjlhZTUzZTUzOWZmOGM5ZWM0MTA2ZDEzMmY0MDIwMTg1MTgzMDg0ODVmMmFhNmM5ZThkMWU2MmZlZDYwY2IyNDk0NTdkYjMzYzZmZDFmZTA3NDQ1MzYxZjA4MTk0YTJiNWEwNTdjYjAzY2M3NTRlNWM3ZDRhN2VlYTUzYTdmN2QyMDdjYWNjYTVlNjhjYWZhOTY5YTM1MjFkYmI4MTAzOTlhMTdmMzI4ZWU3NjdjZjU1OTI2YjJiZDVmMDI5NTQ5ZDNiNDY0NTc5YzQyNjU1MjY1Mzk4NDcyZTFjNzdjYzhkZDlhZmYxODdmN2FjMzRkZDQ1NmFjZTk5OWE3MzZlY2NhNmQ0MDVkNDkyMmM3NzljNjAwYzQ3Yjg0YzljMWRmNWU1ZjhlZDNiMjgxMWQzNTEzMzkxMTNmODQ1M2NjYTRjNDQxMTY4OGNiMDM4ODI1OGViYmQxODcyYjgzNjEwMDQyMjQ5NDk0ZWQ1NjBkNGNkYTZhNjg0NTVkOTU3ZTgwNmRkMGJkZDgzMDA0YzRjYTgwNzc0YjhhMGExNjY1ODY2ZjE3MDg1MDE0ZWFkYjNlYWU3MzgyZmE4NzBkZWIyOWRkOGM5MzFiNTMwMTk2MjU3NDBlMjgzOTJmMzg1NzVjMGUyYTllNTA0ZmMzNWJkOTVkZjU2NDM5YTg5ODIzMGEyMzk4Y2QyMjI1Yzc2NmVmMzZmMTJhZTdlNDliMzBhOWMwYWFkNDY5ZDU4OTViYmY3MjFjYzBmZjUxZDg0MGM4MDJkNGE3ZWVmYmE4NGZlNTIwNWEyYzJmMTQwMTE5MjJkZGU1NjE0NTZmNzllNjE2MQorU0lHOiBmNDQzNzFlNmMzMzkxNjM5ZDQ1N2VkMTQ2NDgxODQ4MDk0MTFlODBhMzIwMWY4ODExNjcwZTUwMGZjYWQ5MmYzMDBhYWJmN2ZjNjhlNDQwMTkxZTg4MWQ2YzM0NzRlZmQ2ZDI4ZjA5ZGM0NDMxMmZjZmNiODI3MDFiYTNjMjkwYQorCitUU1Q6IDQ4MgorU0s6ICA1ZmVhMzg3MzljNjFjYTgzYmY3YjRhZDE3NWEyMTE3NjI3Yjk3MWE2MzRhMzA1YTg0ZmE1N2ZlY2I4MDM1NjI0CitQSzogIGRkZDE0YjBmYzA2NzY4ZDUxMDRjNTA3NjRiZmQzYjk1MjM1MmEzNDAwN2M1MGQ1ZGRkMjI0ZmY1MWFmY2RmOWMKK01TRzogMTAxM2M2MGE3Mzk1MzU0OWU1ZWQxMDViZGVhMTUwYjkxZTYwZWMzOTIwMGQ0MzcyMTMwNGJmYzhlYzQzOWQzOTYwOTYxM2MyZDg3ODA0NGE5ZGEwMWIyNmQ4NmQ2ZDY1ZGI5M2Q5MWExMzdlOWM0ODA4YTk3ZDRlZjI4NmE5MDNmM2YxMzgyY2M2ZDEyOTQyMTZiOWZhZmMwMTNjODZiOWZmNjhiNTVhNTBlYTM3NjZlNjFkYzFjZTM4MzQ4ZTkxZDYyY2U3MzJjMTUyZDc2NmI5MzM1YzY4ZDZjYWQ3N2JlMmI0YTBjZDUwYjlhMWVjNjMyYmE1NTY0OGE2ZTdlMTFhMTRjMDY4NTNjMDJhZWM0ODA5YmQxNDdhNWRkZDlmYmMzYmU5ZjBjODE1OGQ4NGFiNjc5NWQ3NzFiNDJiMTgxNGExN2EzYzdhNmNhMGY0YThmN2IzYTBkYjFjNzNiYTEzYjE2NDAwZGZlY2JkMDNkMjE2NjUwZTRkNjk3MDRhNzA3MjQ2NDQ0ZDU3OTFmYTI3Mzc1MmY1OWNiNWFlOWZkNDE2YTUxODY2MTNkNjZhZmRiZDFjZTY5MWE4N2JkN2Q4YjY3MTkwZTlhYzY4NzA2MmEwODBkMmVjMzlmZTc2ZWQ4MzM1MDU4MjUxODcyODM5ZTg1ZWI2MmYxOGVjZTE4N2NhYmE1NWI1ZjdkNWVkY2FkZTAxY2RjNTQzY2M2NzdlNTAyMzhiODljNTYzNWFkNWM4ZmMyMjBmNWUwYmUxYmM2NjdkMjA5ODk3NTNhNmQ2MTZmYTY5ZjhiMTI5NDBiOGNhOWUyYzQ4NTc3MTMyZDg2OTFiMDUzNzc5YTE1MmNiYWNmZjNiOGIxYmQ3YWY2OTJlNTZjNzNiYmFlNDYzNDc3NmNmYzIxM2M5OWI5YWU0NThkZjFiZWZjOGM4Nzc3NDI2NjRiMGEwYmIxZjY5MTVjOGRhZTNiM2Y1NWRkNzVhYmE2YTNiY2M0MTc2YjRlM2JhMDNkMGMxYzA0YzNjNjQwODc3OGIyYjhlNWE4YTNlYjUyZWQzMmE3NDI4YzAwYTk4YTU4OWQ4Y2E5MzkwYTIxMGY0YTdhYzAwNGZhMWZlNGM2ZGE2OTRmMTIyNzZlMzIwYjQxYjBiNTlmNzVkMjY0YTM5NmQ0NTBiNjMxYWIzNTNmMTYxMjcwOWU3YTJlNmE1MGQwMWNiMTEwZTUzMDQwNTQ2ZGQzYjFlMTFkMjU3MzI4MTNhYTc2YmU1ZTgxZmNmN2E1NzczZjY4MTViYmQKK1NJRzogZjRlMjc0ODIzZjJjMzk2ZjNhMzI5NDg2YWE2NDEwYzVmZjE5MjY2ZjA3NzBmZDA0ZmIxNGE3NjAyZDJiNjlhNGEyYjAwOTI4ZTllMWQ5MjM4OWY4MDMzMzU5ZWQ2ZmIyMTQ2NDY3YWExNTRjYmE1OTdkZWM2YTg0MTczZjhkMDcKKworVFNUOiA0ODMKK1NLOiAgNjBmOWExNGNjZTVkNDNmZDlhYWI0ZWU4Y2M4Mzc5ZDU3NTk0OTE1MjY5M2JmMjlhNjc5MGIwMzVlNDJhNDRkZQorUEs6ICBiZDRhNzA3NDBkNWFjYWJlNDlmOWEyMTUyMDgyZmEyMDI1MzMwZTY0NDA0MzdmMWQwNDdmMzEzZGU0OTBkY2E1CitNU0c6IGRkN2Y0NGY5ZWI3MjhhYjQ4ZGU1NGVjZGU2YjYxODRiZDVkZGQ4NzA3NTQ1YTAxMjlmMmU5MDU5MDViNTVkM2U3ZmQ1N2UyODQ4NWQyNTgxNDhmNjYwNWUyMzc3ZDViMjY3ZDJlYWY0Y2Q0YjQ2ZTQ1NDk2MjIxOTg2ODIzMmI2ZjQxZjg4YTc5N2Y5Y2RkNWMzOWFkYTUxYTY0MTIxNGZiOWRiMmMyYTliNWE1YjE2ZTMwMzU3NTMxOGI2MjVjY2E5NzBiNzQzNDg3Mjc5MDJhMWNmMjY4YmQxNmUxMDcxMTMxNjFjOGNiYzk5MzAzYzJiOWYyMzU1NDFhN2IzMWU0MzMxMjBmZWJhMTRmZWJlNGJjYjBmNWI5MzZjN2VkZGRkMGVjZmM3MmM4ZDM4ZjY0Y2RiNmNmYzI5MTBiYzI5YTUyMWM1MGE1MWFiY2JjMmFhYmY3ODlkZTgyMmNiMDRmNTcyOGZlZTE1M2RkNTUwMWIyZGI1OWM1OWY1MGNhYjE3YzI5MjE2ZDY2OTUxMDE5ZTE0NWIzNmZkN2U4NDFiZmJiMGEzMjg1NTRiNDRkZDdlZjUxNDY4YzNkNWI3ZDNhMWY3YjlkZWY1OGQ4Y2Y5ZDliY2FmZTkyYzg2Y2Y2ZDYxMTllOThkYmE2ZjM4ZWE1N2UzMjJkZGM5YzIxOThkNGJiYzNiOTRlYTEzMjlkYjBkNDU4ZTAxYzcwODFiMzM5MjVhM2UyODdmNTk5YTg1OGM1MGMzYThmMThjYzJhYTYzNGRmNjNlN2YxMGU0MDNhZGVhYjJmNDFkYjU1Nzg3OTBjM2I0ZjA0MWE4YjdhNGY2OWNkNmUwNjIxNWRmODIwMWFlNWIzZTFkMWQyNWEwYTM5YmZjM2QwNDFhMmY5ODIxM2VmNDE0MTI0NTc5MmE3NmYwNmQ0ZGUyNWY2NDY3YTBlNTZmMmY1Y2Y2OTQwMGQyMjExN2RlN2I0NjE0OTU1NGI3MGM3NWI5Zjk5NDg0YTRmNmYwMzVhZDNmMTBlMzc1M2NiMTRmNGYzOThkY2Y2YTY0ZDEwY2Y2YzRmYWMwN2M5MTE5M2NjMGY1NGYwZGU1OGM2MzQzZTljYWFhNmI0ZjQ3NWVmOTFhNTllMDgzZjlmMjExZjViYzhlN2U0NTE2YjQ1Y2YwNmJmNTBiZWI4ZmM0YWI1NzlkODZkNGE0MTkwZWVhYzc0OGQwNmUwODUyYzRiOWJhOGNmYzUwZGQwYTAzN2E3YmFkN2ZhZDU1YWYzMDlhNWYxM2Q0YzkxZWQzZTAKK1NJRzogNzJmNTRiYjhiZGQxN2U5ZTQyMmNkMzM5NjMxZGQzOWY1NzM1NTAxNWQ0Y2JkMTVhY2FiNzU0MmVmZDc4NGEzMjFjMWY2MTI1NzY0YzBkMTU0MDQ1YjMyZTcwZGMyZTAzZmJmZTExMTc0NjhhYzNlNzMxMjdiNWZhYzhkNDIxMDIKKworVFNUOiA0ODQKK1NLOiAgYTM5MDUzYzVjNThiZjMxZDQ2MmIyN2E2MjBiMGIzN2I4MDUyYzZiMWM0MTAyYjYxNDU2NjNhYTE1ZTk3ODcxOAorUEs6ICAzNjQyYWMyYTMyODBkY2U1MmFkOGRmY2ZkMzcwOTQzNmVkYzRlN2U0YWUxYjQ1MmQ5YjIyMDc4MGIwODY3OWZhCitNU0c6IGY2NTU0MGQzYWJlYjFlZTVlYTk4NzA2MmMxYjU3OTUxNmQzYzI5YzM5Y2JjNmIwOWQ2MGUxOGZlMjc0YzJiZWZlMGY1ZmU3ZGJkNTdjMmQ1ODM1MjI5YmI3NTRlYzQzNDEzOTQ3NjU3NzZkNmE5MTc4YzRlNmEzMTJjZDc0YmRiYWNhMGU4ODI3MDYyOGNkODQxMDBmNDcyYjA3NWY5MzY5MjgzMDEyMmYwMGY5YmQ5MWFjNTgyODM2YzhiZmE3MTRhYTQ4ZTk3NzAwMzU1NmUxYjY5NmRmMzI4ZWY1ODRmNDEzZjhhYjYxNDc2MDY5OWM0ZDE0N2MzZWVhMWRhMDQzNTgzNWM5YmY3YWQ1NDYwNmYwMjEzZWI3NGExYjQ3NjE0MTUwNmFlMmNkMTI0Y2Q1MWQ2NmU3ZTdlNTc5NTYwNTc2MzA1YzVmYmU4NDMwYmUzZWJlYmFhY2JhM2Y5OTg5ZGQ3ZDE5OWY1YTQ1NWE1MGNkYjM3NTUwMzdlMWE3MDY3NGE0ZmVmNDBiNGEzYWFmN2JkM2M5NWIxYWI0MWJiMjA2MjExYzNhMTI3NmQzZTM3ZDhhM2E1YzNkNWQwZjM2ZWY1YjRmM2RlMjZiN2YyMGY2YjI5MDA3MTZkY2MyMmFiNzM0ZWJhZjFlOGQwMDAyMGU1ZjAxOTU1MTY1M2I5YzJmNzBhNDAzOGRmYjJmMTJkMjVkNmQ4NGU3OTA3M2E2NTQ4ZmUxNWU0ODI4ZmU1ZGU4M2FjM2Q4ZDk4YjdkYWY5MjcxMDQ4MmMzN2Y3YmQyNDMxYTgxMTRjNjEzNzY1N2JiMTc3ODgyZDhhM2M3NmJhYmYxYzY3MWE3MDU1MzY1ZmU5MDg2NjE2N2EyZDFkYmM4NzBiZTgzYjM2MDFmMDlkNGEzMTdhZTI1NGNhYzlmOThkY2M3YWVhZDkyMjRjZDljOWQ4YTIwMGFiYzgwYTJkZDEwOGFmMjhmZDQ2YWQ3MDgwYWU3NDFiNTAwNTRiOWI5YTkyMDFlZmI3ODM4YmM0YzVjMmNjM2Q3NmJhMGZjYzQ5YzQ2ZTc5MmMyNjI5MmI3ZDAzMTJhZmY5NTVhOWY4ZWRmMGM2OTZhNzBhNjE0ZjM1NTNhZDM4NjliZmRlNDhkMjZhNGQzNjdiNmNlYzA1N2U2MmE0ZTU0ODU1NGI0OGI1M2VjZGE3OTBiYTdhMGFiMmUzZGU1ODdiZGMyMmIwMmY1OTQ3NjM0ZDczMDk5ZjU0N2RiMjJlYzFiYmY4MjM0M2Y5YTJjYTM4YmNlNGViNTliZQorU0lHOiBmNzM4M2U5NjZjYjIzMDlkZWVkZjg2MDEwMDE4M2FhZWZhYzY3MmNhMTZkNTQxOWNkNjQyMmNhNzBlMTZiMzk3NmY1ZjE2NWFmYzI3ODYxMTdjODY4MjM0YmExMTA5ZWRlMDMxZjg5NzliNTBlNTY3MzU4YmQ0ZjhiZDk1ODIwMgorCitUU1Q6IDQ4NQorU0s6ICBlMGMyOWRmNGRlNDVjNDc1MzllMDg5NmIzYTU5YmMzZGU2YjgwMmZkMTRkYmRjOWYyNWU3MTdhYzgyYzMyOGYzCitQSzogIGE2OTAwMmIwZjVlZjM1NGNlM2IyZDZiOGQ4YmE3MGFiNzc4NDMyYjIyZjE0NGRjOWMyZWI5MmQ5OWQ5OWRkMmEKK01TRzogNmEzN2NiNGM3NDljNTgzNTkwYzhkODQ5YmNlM2ZhNjU3ZjEwMDA5MTkwY2FkOWJlNDFlZGUxOWJmMmZkYjNjNTYyYTYxMDFmMjdiZDM3ZjIyM2NhYjEzY2VkMjQ1YTFjZWRmODUyZjU1MWY4NTdhYWQ5NzI3ZjYyYzk2N2MwYTkyMWRmMTE2ZjQ4YTgwYTYwNDBiM2M3MjNhYjVjYjU5NGM0NTA3YTNkMjBjZDYwNTE0ZTIyMTY0YTgyYjc0ZjE5ZGNmZGQ4M2M1N2JjMzY1MjM3NTUxNzQxNGFmNWQxOGUwYTY0Y2NhYjM2Njk5NzY4ZDA3Y2Y0MGI3MDYzYTgzZTQzZDVmNjA3OTY0YjFiZjA4NDBhNDVhZDUwYWJmODNkYmM4NDlmNDBlNWI0Y2ZiNmEzMzQ3YjI5ZmVjNTA3NzQwNDZhNGI1MDA0MTAzMmFhNGQ1NjdlODU2NGIzZWVkMTY0MjA0MDY4MmRkOGFlN2Q3MTc5Mjg2Y2Y2ZTE4NTNkYzg3ZDI3YzNlOWU2MGZhNDdjZjhjYjJkYTAxODFkNTNlZWM0MDYxNGIwNzMzMWE0ZmI3MDI4MDg2ZDBiMWNlMmUxMTE1YjczYTE2MmM1MjdiZGQ3Y2FiNTMzNWI4NjNkMTA4YmUwNDdiZGJjYTExMmNjNmU3NzZiYjQ1M2MzMTczMTQzODhiYjk2NTNlZmI0NDQ0YmY1Y2YxZWM4ZGEyM2I3MTFiYTcxNzk2YzBhZTAyYmExZGNjODM4NDU1MDc4YzM4OTdmMDdlOWUxM2I3NmU0OTI3NGMyZTIwNzUwNmIwMGEwYjU1ODg4M2FhMTIyYjY2N2RiOWQ2NzA1MDg2MDZhM2Y1NDMyMDYzNmNkMTlmOTczOTE3ZmIxODc1ZjQzNjNlMjIwZjFlMTIzOThjYzZhZmQ3OTA5NDc0MzMzODQ1NjgxM2E1ODI2YWQzZjFhYmE3Y2Q3YmVhYjFmZTE4Mzg1OWMwY2M5ZWY0MGE1ZWFiOTEyY2FmNTE1YThkNGMzYjkzZDY0MWI3YWIzZTc2YjE2YzEyOTcxYWNlODhmZjMzZTVhMWVkOWI0NGU0NWRiOGYzMDg1ZGJmMDcwYjI1NmIwZDc1MTJlZTEwNjk0MzI2MDNkNzMwOTVkYjg3NDljYTU0Nzk2M2JkNzFhOGE2ODRhYjg1MTZiMTQ2YzQxODcxNzYzODZhZmRmNmNiMTM2OGEzZGQ4ZmNiMmNmZmY3NzA1NmFhZjc4MjNmODAwYjI2NmFjY2U3MmJmNjQzYzZkMGMyOGYwYWIKK1NJRzogYmIzYjhjNWMyNzU5MWZkOGI5YzViYTQ4OWQ2YjZlZTViMGZiNGE3YjBkZTUxZjE2MzlhZmM2NzNkMGU1Zjc1ZTMxM2FhN2UxZDAwMDkwODFkYmNhNzQzNWI2ODdjY2QxMmY2NGY3NGEzODZlNzcyYjllMjQ3ODFiOTI1YzhjMGMKKworVFNUOiA0ODYKK1NLOiAgMTk4YjVmZDFjMDM4MjdlMDk5NGFkNWJmZWU5YjViN2JlOTk2NmM5YzNhMjY3ZTRkNzQzMDM0Mzc2NzQwM2M2NworUEs6ICA2NjgyYzZmMWE4NjZiNDliMmY4ZWU5N2YyZTUzMmZhOTE2NjZiZjM4ZGExYjRkZDY1NTQzYTE3Nzc3OTRjYmVlCitNU0c6IDNmZGFhMTVjNDZmMjUxNDNkYjk3MjA3OWQ3MDEzYzdmNjlhMTM2ZjQ1ZjNmNmJhMmNlZDhiODI4NDY4ZWIzZGFhNmI1MGI0ZjhkMzM4MGZlYzY0YTAzNDNiZTExNmY2ZjgzYjZlZTY0Y2M0YzFiMWQwOGQ1NGZkNDIwMjllNDI4NWNmYzZjNmRkNWNkMTgxYWI1MzNmZmNkNDExZjIzYTEwMDNkYTk0ZWM5MzQwZTJlYzcxMTk5ZDY3ODU0MGQ1MTgyZTEzOWZmY2JjNTA1YTE3MGI4ZjA3ZjRhN2U2OTRjYTkyZjU4MzIwYzBhMDc4NTY0Y2U5ZGU5OWIwZmE4ZTY2YjBkODIyZTQ2N2E1YWViODM1Njc5OTZhNDhiODlkYjI1Y2FkZTY0NTc3OTRlNTQxNGQ2N2U5ZDRhYjdjZDZjYzIwNThiYjdhNTEzYWJkNzA5ZjRjYWYyNGJiNjdjZTFjMDNhYjYyZGJkZmUzMDllYzdkYjBmYTNlYTdhYWU4MjM2ZjI1OWI5MjJkNDUzNjExNWE2M2JjODlhY2IyMDUxZDA5ZTczMWNiYjBkZjE1N2Q5ZDM0NWJkOTEwOTk3M2MyYjU5NGYxNDhlZmM2ZjMzNzdkZTUxNjNiN2Y2OTg2OWZmZWY4NTNlYWVmZWI0MDJlMjM1Mjk1OTRmYmQ2NWNhMDVmZTQwNjJjNTI5ZDhlMzIxYWJjMDUyMDBjYWMxZTgzOWU4N2IxZmQzZmRmMDIxZDY4Y2JiM2E0MTQyYjY5Y2MzYWY2ZjYzMmVkZDY1YjgzZjVhYTRjYjE3ZGE1YjZiYTNmYzAzZWRiMTdjMmEzY2I1YjA0ODM2ZTc2NjBlNjNjOGEwNDgzZTI0Mzk4MzM3MWRmYTk4MzlmOTE2NGFkNGRhMGQ1OTUzNjU1ZTNhOTUxOGUxMzZkYTc0NTczN2M3OTI0M2MzNTVmYzEyNWNiZGNjNzZhZWM5MjIxNjg0NmM0NTc0ZjRmN2YyOThiY2RlNTRmZDI0NDRhZDMwMjU5NTVjMTAwMzE1ZGU1YTRlMjdjMzMzYTAwMjg0YjJmNzAyZmRkM2RlMjJhYzZjMjQwZGJjMTRiZjcxZTYyZDEzMWI2MmYyZGI5OTI0NzNmMmY5MTNmNjBjOTE2ZWNmNTdkZjVmM2YwMjFmYjMzMDgzNDM5NWI3OTQ3MmNhZmYxOWZjZmEwYTI3MTc5NWM3NmQ2OWI0ZGIzZjg1YjhkMmU1YzM0NDE5NjU0ODRkY2MzOWFiYTU5YjcwMTI3NGY3ZmM0MjUyNDY4NTYwNjkKK1NJRzogZjQ1NGYzNWIxODUzOGY4NzdlNWQ2MTRhNzZiNTI3NmEyN2ZjMGI0MzNmMjE1ZGM0ZTk2M2IzZjA0NzY5NGM3ODBjNTE1YzZlZjZmZTJkYjRiMDA5MDA5YmMyNzMzYWVjNGZkNDZlNjE1MzU3Y2MwYmNjOWYxZjdmYzIxZTNjMDIKKworVFNUOiA0ODcKK1NLOiAgNDM5MmY3ZDRmYmQ2OGZlMTU0ZTRiYTM4YWQ1MjA3NjEyYTA2NDg1NTYwNTZjMzlhYzExNmFkNDY4Zjg5YmQyZAorUEs6ICBjYmVhZWY0MWFjYWMwMmJmMWY3ODBjZTkzNGFhYmQ2MzEzNjRiMzY5NTY3YmUxYmUyOGUzOTA2ZjlkYjEyMGZhCitNU0c6IGNmMTcwOWRjOWEwODY3ZWU5MDg3MjFiMTM2Y2I5M2E4NDIyOWU4M2I0NjIwNDc3N2NhODE5NGQwOGI3YTNjYTljOTEyZWIyNDNlNWJkYWJmZWVkMzUyMzQ5ZDIwYmU4MDFiNzIyYWYwODkyMjM4ZTcyZWRmMTkwZTYzNjFmNTc1NzI3ODFhZDNjMjU5MGIxOTczNTc2NDFjODA1MzgzYmFhMWQ0OTcyZjc2YzY1NDQ4NTMyYzExMDgzNGEwYmFhOGY0ODg2M2UxNjZiNzA2NjUzNzA4Y2Q0MDU3ZDNhNGY5ZmNiMmNlYjQxMjAwMDEyNzdkMzhjNDM4NDdkODIyODIyYjc3N2MyYmI0ZGE0MDE1YTFjMjRkNDE2ZDUwNjJhODcxODQ5MWQ4NTVhYWE1ZGJmNTU3OWMxNjRkOGU1MjRhOWYyZmEzZjIyZWIwOTg2MWZmZTZhZDY1OWZlMzZlYjQwNDMxMjIyYzIyZDcxMzdhNmNhYmNhOGRiNzg2ZTM5ZDgxZjY2MWFmZGU0ZTM5NTg5YjRkYjRkM2M1MWNhNTM1OTBhMTRlMTE1ZDBhZmMzYTg3N2I4MzlhOTYzOGJlY2U4MGMzMmMxOWU1MWI3NTMyMDI0ODQ1Zjc2Y2ZlOWJmYjJhYzA1MTMwZjY3NThiZjdmZTk5M2FhOTNhYTI3MmU0ZTZiZDBjNzVjMTQwOTlkNDNlNjUyYTIyM2U1YmNkNjRjMzYyZDRiOGY0Yjk1ZTAxNmY5MzUwYzdmYTc0ZTY1MzUyNWQwODAxMTU1OGIyYzZlOWJmNGZkZjlkYmQ1ZWY5YjA5YmJjODQ2YWZjMmJjYmM4NmM0Y2NjMzE1ZjZkMWNjZDQ4OWIwY2Y4ZWQwZDkzZjJmNTMyYTQyNjI2NWM1OTBiYTNhNTkwMjMzNDdkODE5ZDliMjgxZWY4NTMxMGIwNTMxNmQ0NmM4YThjMDM2NWQwNjhhODcwODY2NGVhNGQ3N2FjMGNkMTUwYTY1YTU2NTg2YmFiZDM0Yjc0MzY1YmI4ZmUzZTYxODcyNjIyODRkNjQ0MzJlNGM4MWVhNGMwZTU3YzFkNzFhZTk4MGM3ZjRkMWQ4NzEwMzJlMTg4YmJmOWQxNzU4Y2RjMWRmZjk4OWYyZDEyODhmZWY0ZTIwNWU5OWU3Y2JmMmNjMzI0YjhjOTMwNDZmNDc2YzU5ZDNkMGE1OWRiNmZlMzczODJkYzc5YzVlYzE2MDU2YWIzOTM0YTUyZjdkMjg4MGQwNDcxYTM3N2I2YThhZTg0ZDU2YWMyMmQxZDU0NTUxYworU0lHOiA4NmU3Y2NmMDZlNzkzNjJkNDBjZGI3ZmI3NWE5ODk3OGJiZDMzNGExZGI3NTkwMzY3ZDYwODQ5YmQ1M2UyZmIxYTRiZGFlNTkwZDFmNDdiNTQ5MGQ4NzAyZTdjMWE4NzI2OGI4ZWU5ZGI2MTJkZTdiZGMyZTM4ZmE2ZGViN2UwNQorCitUU1Q6IDQ4OAorU0s6ICAwYmVhOThhYmU3ZDYzZjE1ODM5MGVlNjY4YWEwNTBlODRhMjVkMjg5M2U0OWZjODNmMDc5ZjliYmE2YTU1YTc1CitQSzogIDIyMTkyZWMwZDMyZWY5ODM1NjY1YTYxYmM4OGJjZjRlMTYwNDYzNzkyMTE1MmMxMTZhZjUwMzM2NWJmNmJlNDIKK01TRzogYzE3OGUzOGQ0ZTgzZWQyYmU1N2NlMWMzYWI2NDI1M2E4MTcxZTYxMDAwODE4MWZiZmM2ZDc1MjI2OWY3ZjFjNWE5ZWM2MmNiMjdmMTlhZDk5Y2UxZjUxMTZhMzYzZDk2ZmRjNWE0MmYzNThiNmRiZTdjYWJkZmM5ZjYwNzE4ZTQwMTJjMWJiMWY4NDJjNTU2MDgxMWJhODM3NGEwNjM3NzQ3ZmY5MmVhYzIxY2E2NWRkZWFmNDNlOTk4OWI3ZGUyZDQzMjUyMGFmZWUzNjRlY2ZiYTRkYTY2OWFkNDg5M2QwYmY2OWY5ZjgxZTdkZjY5NjU3YmUyMmI5MjA2OTc0NWYyMTZjMjQyY2NkNDZkMDJkMzU2MTZlMTZjNzU1ZTBlMzdmOTYxYTZmMzYzNzc1MjUzNGY2ZGZhYjg4MDVhYjc1OWEwMzJhNGU3ZTRjODE5NTMzMjVhMmY2ODZiYjY5YTAyOWNlNGUwM2JlY2IzNjA1NjM3YzVhNjViNTJlMzMxYzI2YzkyNmVkNDcxMWE1MDRkMzczM2JiNTNjOTdiODBlYWZlNGU3NWRkZDlmNDE1MzYyODg4YzNkNGQzN2JhZTBlNjNmYTExYmY3NTU2NjY0MzdkNzJmNThjOTFkN2EyZjhjYjYxOWI3NjIwYTA3MGIyNmIxOGI0ZDUwMTg0YzU4MTg3MTIxMTBlMzZkM2UyODMwZjZhODU3NmJhNTdmOWNjY2I4ZmZmNDAyOGJmOGVmOWNiODE0ODI1YmJjYTgyN2Q2NDk1NDdiZjZmMmJlZjkzMTcwNGNhN2Y2ZGYxNWY3ODAxNTVlZDQ2ZWFhN2NhN2Q3MmUyMjQzNGNhMDQ4M2JmYjJmNzkwMmRjNzg3ZjYxN2ViOWJkNDFlZDQ1MjBhZGZkNDMwOTQ4YzcxMDgwNWE3M2MxYmE1NDkyZTk2NDg0YzRiYWE3ZGEyNGM3NDM1YzQ2YTA1MmJmMzUxNWQzM2U0MmRjZWY1MTdjYWE0NWYzNmM4NzkxMjEwNzhjNjg4ZGQxMGQ3NjY1NmExMTk3NjJiNmE4MzQxMzZmYTFmOGE2NDMyMjRiOTIyNGM1NDNjZjA0NzBiM2Y4ZWUwMTdkNjIwZGJkY2M4NGQ5ODUxNTRlOWQxYWU4MGU1ZjE0Mzg3Yjg4YTBmNmE1YzM1OTA1YWE1N2ZiM2FiZWIwZWE2ZWNjZGRiMDA0NDc0NjMzY2M0ODNiNTZiOGE4ZTIwZThmMmUwOWU5NzlhYTA5ODkzMDg3ODc1YzZiMTE3YjVmMTM4NDdhZDhmYzA1NjA0YzQKK1NJRzogN2ViMzEzOWI4ODBmZGY2NjM3NmEyMDkwODE4ODQwMDQ5NzY3YzgzN2YzYWQwMDM2YjE0MTY2NzA1MmIzMzYwOTgxN2NhNWUyNDBlZDhjZGYzY2NmM2FlZTI5Mjc0NTM0NTk0ZGIwYjRjY2M1YzZlNWJiYTMyODBiODczZjI5MDEKKworVFNUOiA0ODkKK1NLOiAgYzI1ODc4YjBkMWUwOTI1YzhmNWYwNGExZTU3OTkwODA5NjNjNDEzYTEzOTljMTE4YWZiMTY4N2M3OTdmNDgzOQorUEs6ICAxM2FjMmNhZDQxOTA4YzI1NWY2NzFmOTM5MzRhZTVkN2JlMzI1MzQ2NzI1YzhiNDBkYzM5ZWE4MGQ3MGRkZjM0CitNU0c6IDY4NTZjYzcxNDRiNmJkZGNjNGI1ODk1NGQxYTJlNzEwMWQ2NTg0YjVkNWU3MTlhMGFlYTBmYmJkZjIyMWMyYTJhYWNiYWNkYzQwMjBjNWM4Y2U2ODFmZjczODFhY2Q2MDdiMGY1MjM5NjkyMzM1NzAwNjU1YmUyZDk0YzUzZDdiNTE0OGU5MmEyYmMxNjMzOGMyZjRjMWE3ZDFjNTk1YWY2MjJjMjQwY2U1NzlhNWUwZjViNjUxYmY1NjI1MThjZWM4YWEyY2U0YjRhYWRiMWYyZmRhNmNmNjI5NWJjMzc4MDNiNTM3N2RhYjY1YzliOWEyOTQ5ZmRkNDliZjlkZGM4Zjk2ZDI2MGZmOTUxYmY4ZThjY2Y5ODI3ZTY4NjljNDRiZmQ5NzMzNThjZWZkYjAxMGRiNWUxZmU1ZGJkOWY1ZDJiMmNhMzkzYzE3ZDQ0NmY2MzcwNTllNjkyZDdhOTFhYWRjYzc2ODlmNWY5ZTFiMzA1MjE3NWQ5YjZiMjA4ZjkwMjY3ODdmZGI2Njc4M2Y0NTM3MmEyNDk0NmIxYmQxNjg3YmYwY2ZjYzgxNzRlYmU0ZDMyZTQzMjg0ZmM3OGQ3ODQ0ZGUwZmEyMmUyMDY1ZTA3NTI4YmFhYmFmMDE1Y2IzNGQ2MjljMzU5NmFkMDQwZGUzMWM1NjIwZWIyNjZkZWZhNzUzM2FjMDQwMTk5OGU1NjczYTc1NDM2NTA0N2RlYmZjZjdlMTM3YTIwZDE2Y2RkNmE1NTIxOTgyZjQ0NGNmYzM0MjkzOTdjNjQxYmQ3ZTc0YTc3MGJiMTFmY2IyOTQ4M2UzMzdiYWU1MTY5ZWU4MmRhOWE5MWFkZjNhZjY3Y2Q4MTRjMjgyNWQyOTAxOGVmMDM1ZWE4NmY4ZGU0Yzc1NjNhYWY2NmUwYzc1ZDE3Y2E2OGY0OWYwNzU4ZWMyZDljNTE3OWQwMWFhZWQ3ZDQ1MTVlOTFhMjIyYjBiMDZmYmRlNGYwN2E3ZDlkZjJkZTNiY2FlMzdjYTJjODQ2MGMyYTZiMzc0OWU5YmRhMzZkMDhlNjZiY2MzNTZiMzkwNDM0YjRhMThjZmE0NWFmNTU3ZGNhM2Q4NTdmZjNhZDM0N2NmYjA3ZTIzNThjMmFjZmQ1Y2Q1M2IzYjBlYTJhNDFlZTVjMDgwMmZkNDczZGI1ZjMwNTI2MzM0ZGE0MWViNGJjNzUxODM4Mzg5OGEwYjc1MDdhZDRjYTI4OWQ2NmM1ZTJlYjc1Y2YyNTVkZmYzMTJjYjFlMDRlZWJlYjQ3ZjI5MzBiOTBkNWUwMDJlYjAKK1NJRzogMDZmNTUxOThiNDE5MTkxNGI3NDMwNmYzOGUzODEzMTZlYWM0MGI1YjVhZGI4YTMxMjQ2NGY2NzE3NWVjZjYxMmUwMTQ3YjFjZWY0NmMyNTE4NzUwYTU2MDZiYjAzYmM2NDY3YmI5MzIxNTE0ZjY5ZGNiZWJjZThmNjkwNTgwMDIKKworVFNUOiA0OTAKK1NLOiAgMGIyZWM2Mjc2M2Y2ODc1OTMxMzVkYTE5NjFlZjI5YTI4ODA4OTY5NmQ5NDRiMjY1YTVmOTY4OTNjZDJkODIyNQorUEs6ICBjMWUyMzRmYThiYzk2ZDI2OGU3YWFkMDI4YjAzZjBhOTExYjY5NzcxNWRiM2EyMWMyZmM3ZGY0OGVjZGE4ODc1CitNU0c6IGE4MzQzNGM2ODY5M2Q1ZmNlZDkxYmRhMTAyMTNmY2Q1MGM0ODkyMGI5MGNlZTliNzNhOWM2MTA4MWEwOTc0OTMzZjRmZGIwYTY3ZTY3MWY4MzUxYjBlZDVlYzBmZTdiNWZiMGM4NzU4NmZlNTgyZmZiMWJmYTJkYjVmY2VkZDMzMDI0MjgyMzRiMmJiMGU3MjZkZWRmNDViMTNhNzBjZDM1YWIzZTI5OWQxM2YzNDUwMzUwODI3OGM0NDU4ZWVhNWI3MzUxYjA1ODM2YmRhZDViMDVmNjBlNDQ1ZmM2NTczN2FlMjdkMmU1MmRmOWMzOWU1ZGEwMjg2MzkyZDA4ZmZmN2VjYjcwNjY4MjBmYzkwZmM4YTQ0ZDU2MTY1NjFjNTBiNTI3MTQ3MDIzMDJiY2E1ODc0ZGU4NWRiYTA0NTA0NWY5ZjBlNjA0ZWI4NmQ2ZDdmYmQ3NzVmNzJlYTQ5M2IyYzRlZjdjM2JlMTZkYjJjYTdlNGQ4YmQ3OWViMjBjZmI1ZjBmNmYwNTMzNmI3NWNjODZkMjE5ZjNiOGYyZTkxYmE3ZDUyYjY0ZmRkNmE2NjY0ZjA0ZjJmYmFiNzU4Y2RmOTg0MTY4NjkxYzMyZjUzZTg2MTZiNDlmNzZhYjdiMTkyYjkwMDkwMzA4MmNjODk2NTZhOTcwNTgwNGNjOWI5Mjg4YTNlNDIxNzA5ODRmOGRjNDU0ZTA4NjRiOTM0MTY3MjY4NmExNzhjMDYwMDUwMTc4YTM2YzZkOTA2YjJjZTA3MGQ4ZmFhYWNkOWE1OGM3OTRhNWVhNDEwOGI0YTQ4NWM2NTgxMWMyZGNhMmVlN2JiMTBiZmZmZjc1ZDQ1ODZiOTkwZjQzNzYzYTE2ZmJjMGI0OGFlMWZhZmIwOGE5YTM2ZmE0MzI2ODQ1ZGJhNWJhMmZiZDMyYmJmNjY1MDVjNWU4NjU3ZWQwMTA3ZTNlMTYxNDRlZjMxZmE2YWFlNzJlNzc0MDk3NDgzZjU0ODBhYTQ1NTQwNTY4ZmQwOGNiYTBkNTc3NzY4MDA0ZjU4YWU5Yjk1YmUzNzRlZDdmMDI5OWZlNzIxMjc1ZTQ3NmUwYjlhYjcyZGMwNmVhMzI4Mzg0ZTM5YmYzYWMzMzFjNjI1NDg0MzEyY2Q5YjA2YjE1YTI5NTRkMzNlN2FhYmE2YmUyMjYxODg2Y2E4MTFkYjk2YjExNDNkMDZkZDZlMGYzY2JhN2ExYWU5Yjk0ZWFmNjc3NzFiYjJkMjRlMmY5NGRlOWM0NzBmY2RlN2JmZGIzMmY0MTAxOThiNWFhOTY5OGUzMgorU0lHOiBmZjcwMWYzNGIzNTk0ZGUzYjgwMDQ1ZjQyOWU1ZTMyZGQ4OGQ2MDUxZDQxOTVmMTY4NWJlNzgzNzY2ZTgwMTE5MzY4ZjU2YjM3NDk3MjViOTEzZjEyMjNmODdmYjBmYjI0ZDlkZmEwODQxZDZhMGUyZWIxZmRkZjc3NWMyZDIwNQorCitUU1Q6IDQ5MQorU0s6ICA4OTYwZDdiZWU4YzZiMzljYTU5MzRkN2NkZGQxNmYxNmIzNjYzZTZlMDNlODMzYzA1N2UyMTgxZTQ1OTdjYjY4CitQSzogIDQzNDA5MDk1ZDRmNTBmNWVkZGJkNWNkNGQyMDEyMjk4Y2I0MWE0MGU5OTQ5MmQ1YTJkYjA4YmU1Mzc3ZWExODMKK01TRzogMzA4ZDg0YzdhNWY3ODZlNTYzZTVjMWVhNTdhYWI1ZTU1NWMwMDk5Nzc0OWQxNWFlZTM1NDM5ZWZhNjQ1ZGEyYzM5Njc3MDMxMTVjNmM2M2VkN2Y5NDc4NWM1NDc4ZjM4NDY3Yjg2ZTc2MjZlOGZmZmE0ZDUxYTJkYzQ1ZTZkZjJhMzVjZWM5OTU1NWVhYmM5ZjdhOTNlMmUyYjY4OTQ1OWI0ZTBjOTJiMzUxNTYyYzQxN2IxOTk3MTEzNzU0ZWE1OWU0YTkxNTEwNzI4ZmYzMDcxYTJiYmQxZjQ2NWE2ODdmNjdkYWU5NTU2MTUwMzFhOGFkNTUxZmU3MzhhMjYwYmJjNDQ2YjQ4ZGNhMWQ5NzkwNTFhYjU4NDA4MzJlMTlkNDczYjY2NjIxN2E5MTgzOTgwZDZiMjdlM2QzYzc2ZDkzNjY1YmEyMzkzZTZhYjFhNDJjMzkwNGQ0MDI1OTMyZDYwMWEyMDJhNTlhNGM0OWZkYjc3ZjBlMDI4NjgyNDdkZTVhZmRmYWExYjg5NDIwOGFjMDBkNzdjNmJiNTRjNmIyYTczYTQ3NjU3ZTQ0Yzg1MTM3OTYzYjU3NTIxYWYyMDk3NjI0OGViMjYxNDgyMTQ3Y2RmN2ExNDVjMzY0M2UyOWUwNTg4YmZkYWU2YTA4MjkwNDg1M2NlNWExMGQyNDk3MGViZGZiN2Y1OWQ1ZWZkZDZhNWU3ZTBkMjg3OTcxYzg0NmFjZDU0ZDg0ZGQ0NTQ2OGE0MTEwYmFiNmVmOGQ5YTViNGIyNDI2Nzg4OTAwYjdlMWFkZmUwNjI0MzQ0Zjk4ZmU1OWVmOGExZTZjNDA1YjM0NGViOTdiYjIwNDc3Mzc0NGI2YTJkOGM2ZTY1ZDE3Y2VhMDdkZTAzYjdmMGZlNDlmMWE1NWMzM2Q1ZjE1Y2U1NWRmN2M5NTYxYjI1MWM2YWM4MDdhOTI1NTNlMWNlOTE3MDEyZGNjZmQ2OWU3ZGJkMDM4YzdlZWVjYWU5ODYyM2YxOGZiYjY1MGUyMjE4YTBiYzBmZmY0M2E3NWExMTY0NDhiYjczNjJmNTI3ZWU2YmM4ZTEwNzYxY2NjZjliY2ZjMGQwMDBmMjEyN2I0Y2MxOTIxMWQwOTVhMGJkYWE0ZTRiZTQ1MTllNmM4NDQ1ZWFiOWIzMTQ0YTQ1Y2FiOTk5NjEzNWJmN2Y3NWE3OGQyMjI3NTkwMGY0Y2UxZjBhOWVhYzEzNjM2NDEwMzA2Mjg5M2RhZDQzOTA0MjJiNzdlNWY1ZDFkOTRkNzAyOWM2MDk3YjM1Y2E2NGE3YTQ3NmZjYzcKK1NJRzogNzIxM2RkNGE3OWZkNTRkZWMwYzU0OGVmNDJlNmNhZTAxNWJlNzc4MDJiZjUxNWNkMjU4Mjc2OGY3MmY1NjNlYmIyZGEzNmFmNGFhZWFjNTZiYmZmYzk5MzJjMmUyNGVjOTVkYWZmMDBhNWY3YTBhY2FiOWM4YmQzYzIzYmI0MGMKKworVFNUOiA0OTIKK1NLOiAgZWY2YjliNTFmZDRmODU4NmNhNjI2NThlMDQyZmMwOWE4M2I5NDMwMzM1MjZmZmMzMjZjNjVlYjNhNWZiNTk0YgorUEs6ICAxZDZlZWNlODA1ZTA4ODc4MjE4NzZiN2VkNmVkNWIwNzE0ZDY0NmZiZWNkYTM4NzY0Zjk0YzgxNTVlNjFkMDA0CitNU0c6IGE4ZjNmMTk2NjVkZTIzOTBkNWNjNTJiMDY0YjQ4NTEyNzM2Nzc0ODZkOGY1NTYzYmI3Yzk1ZmE5NGRiMzM1NjE2MWVlNjIyMjIxZjEwY2JiMWZhMTk1YWFjNzIzMWVhNzE2ZDc0YjQ2YjM3YmM4NWE3MGRiYTNkZmFhMTY3NTIxN2IzNTExOTllNzRhOTcxMDI4ZjcyOWI3YWUyYjc0YWU4YzZiM2EwNjc5YzNlMzI5NjgwMjg0NGFkNWJiYTM0M2Y2ZjlmN2M0NjYxYjRhMjliNDRmMTdlODllMTE0ZmIyMjBlOTg0Y2Q5ODBlOTRjM2QyYmY5ODczZTA2MDVjOTIzMDE3NDRhMzAzNWVmMDQ2YmFkMjY2NmI1YzYzZWJlY2Y5M2NjMTQwMjkxOTQ2YzBmYTE3MDM0MGNlMzk1MDkyZGVlZDc5ODQxMzUyZmJmZWUwM2E5MjdlYjQ1OGYyYTYzM2VkMzI3MTY1MmY1YjBmOTk2MGNkZjkwMTVkNTZmZGFiZDg5ZWU3MWUyNTlhZjZlYjUxNGI0YzFiZDRhNjY2ZjViNWEzNWM5MGYzNWIxNDk0NTdhZjI5NDRkZDBhYThkOWI1NDIyODNhN2U1NDEyYjc3NWU0MjFkMjEyNmY4OWJlYmMzY2EzN2Y3MzA3MTYyMWYxMzIxZWVlNTJlOTY5MDQ4NmEzM2NkN2ZmOWM5OTY3ZmI2NWVlNGU5MDdiNmI4NTIyMTE0NzNkMjFlOWQ5MWE5MzM2MmFjNzYxNzYwZThjN2JiZWE0ODZjM2Q2MDVmOWUxMWI4NjEzNjgxOWE3YWIzZjMyZjEzZmZjYTE2ODE3ZmVkMTk3ZmY4ODBiNGQ2ZDlhODA4ZjdmODc4NzYzYTA0NTcyOGRmNzJmYWFhOTYzZTRjYjFjMDljYzJiMmRhOTIwMjgwYzgzNjZiN2QxOGJmODk3MmRmMTZjYzIzNDQ4ZmJlNmIyZTZlMTZjYmJmMDc0NTEyOTg1NDA1MzE4OTYzN2NlMTE1ZDIzOTg0MzNjMTVkNmYxMTZhMjA1MzM0ODI0YWYyODJmYTc1ODQ5NGM0Nzg2OGVhOGY0ZGZhZGM3MDVlODYxYWFkMmViOGVmM2RiYmVkMmE0NTY5ZTE1ODM0YTc2MGNjZTBjYmJjODRiMjg5ZTc3OWI5ODgzNDZiOTA2OWM3NDRjOTdhYjJiZjQyYjA4NmQyZmIwYTQxMWY1Y2U5OWYwODE5YTMwODZiNGZlOWQ5NmM3Yzk5MDhkY2UyOGRmMWRkZDMwZjM1MDFkZGFmNzgxMTA3MzRmOWRjZGZlYzMKK1NJRzogNzFkMTcxMDcxY2QwZmVhMWM2YTljZmFkMWY3ZmQ4MzVlODVmZjkwNjc3OGJjNjM0NWE0ZGVjNDMxM2VjYzJiZmY3NTVhNzE3ZWJkOTEyYTVlMDI4NDBhYzA3Mzg0MmY5YmZjYWE1ODkxM2UyNjBlM2M3MzM5M2QzNjY4NWM3MGUKKworVFNUOiA0OTMKK1NLOiAgYmFkNDdjZDRiZDg5ODQ5MDY3Y2NlMWU2M2MzZDkxZTliNzg3YWVhODU4NGVkYjA3ZjM0NTFlZjY3ZTdiZDc5YgorUEs6ICBhYjBjZTliYTFkMjliZGZiODVhMGU2NmI3NmI1ZTJlMDVmZjczMjU2OWU0Mzc1Y2NkNzUwOThlOWU3MWQxN2JmCitNU0c6IGI1YTYxZTE5ZTQ4NjNlMGJiNWYzZmFiNmM0OTcwZDg3ODU5Njg5NTUyMWZhMWU3ZjY3OGNhZmEyZGU1MzMyMmZkNDU4YTk4YWE2ZTM1ODA1NDI5ZjY1MTI5MWI5NWJkOTk1MGUxNTVmM2FkYTBiNjA5MTU5YTRhYmRhNTk5MGMwNGJjMmU3NjQ0MjJmYjQ5ZWY0MmYxMjUyOWZmNmY2YTgyMDI5ZmYwMTg1NjYyZTY1OGY4M2M1NDZlZWQwOWYwNmI1YTY4ZTg1N2NkYWQwZWI5ZWM0ZWVjYmZkODhmMzRiYzgwOTkwZjg2NDRhOWJmZGRlMWQ5ZjNhOTBkNTU3YThiODI4ZDVjZTA2YTY0ZTNiMjM4NTgyYmI0Y2JlYmEzMGVkYzQ5ZTgxMjJjNTVlOTViYWRjZjUwMmNjNTY3ODY5YzA5ZTlmNDZjNmZmM2Y2ODc4OTg2YjFkZTAwYjcyYTE4NTgwNDZmY2QzYTZlOWNkYWY1YjA3M2M1NmYyMDI1MDYzYTJkMTc4YmQ0YzFlOGNiYzFlNmU2NzFhYTk3ZmIyY2I0Y2M4YTYyYzIwYmU0MWM3NzYzNzJjOGU3YmU2M2I0ODJlNmM2M2ZhODVkN2NmZmJjMWIyODIwYmFlMWZjMTI4MzQzYTFlMjBmY2YxYmMzNTAyZWVlODEzNThjYzlhNzRjNzJhZjYzNTMwZjk2YTI1YTYwNDY0OGZmNTcwZGYxZWI4OWQxZmRkYmFiMjg2NzliYTJlOWI0MTk3N2U5YTljMWNhZWNkYmZjMzYxYTFkZDA1NWVjNTE2MjBhOWJiZGJiYWY3MThjOWNjMTM2ZDIwMDc3MTAzOTk1MzZkMTMzMzI0ODVlYzM4ODc5Nzg1ZTBjOWNlOTkxNWE4MDI1MTM3Mzk5MGE1OWJjZTQ0MDMyNjAzMWFiMWI0NThiZmE1YjhhNDc5M2RhNGVlMTFhYjdhZjIwZGUyYTExOGM5YWU1MjFhNDE3YjY4MjA3ZmM4ODVlMTA5ZDg0NjNlOWYwMjI3ODdjYzczMGRiMGIxZmFhZWQyNTdiZWQ5MDE3MTA4ODViNzRlOTk0ZjU0ZjZmMmFlYjY0ZjBmNjBiNTllZmJmMmUzYmI2NTE1NDI0NjAzYTExM2MwYjhhMzFiYTNjMWU5YTliODExOGM4N2VjNjk0OWI3NWY0OTYyN2VhN2IxMzI4ODg5MzkxMTA0ZDRmNGEzODkyY2YwMGYyNmE3M2NkYTJhNDBmOWI3MTU3YWZjNDA2NjdmNGEwNGY2NDdkYmY5MzkwNmI4NGM5YTM1MTY0ZTFiYzkwMgorU0lHOiBlNTcyNGExZGQ0NjNhOTdkMTIyMmM1MThjNDkyNWQzMjIyMDJkMTBmMDRjZDA3OGU3NzFlMGZiMzk1MWRiYzE0OTNhMjM0NDYwNzU0YzNhYWUzZGY5MzAwOGRiYmZiMzEwYzk5NTkyYmVkZTczNWE0YWVhYjAzMjNhMTIxMGQwZQorCitUU1Q6IDQ5NAorU0s6ICBjYWJhOGUwNTMzMTEzYTRiZTE3MzQwOGJhODNjMGRiNzQyNjA4MDJmOTE4NmMzOTE0MDI2NTVhY2RlNjAxNWNiCitQSzogIDJkN2JlZjYxNjRjMjc5ZmExMDI4YTk3ODhlM2U4ZWU4YWMxNWVkY2Y5MmE1ODU1MDYyOTUyMzEwYjQ2ODQ1NDcKK01TRzogMjQxM2EzMmJjYTVjZTZlMjMwZTU2NWViODU4NDkzZDVkMDRlNmQyZTJhN2FiMWY4OWEzYjQyMzMxMTY3NmJmYTkzYzY3ZGFhZmQxY2ZjNzEwOWUwNDBiYWM1MmNiZmUwN2MyODI4MGJiNmFjZjZlM2EzMTA3M2RhYjI5NjUzNzhkZDc3ZjYxZmU5MjQ3MTM1YzFhNjMxYjc5YWQ2NjhjOWVhMWNkNDExMmQ4ZDNhMDY0Y2MyMWRmMzJhZWFjN2RkNzE4YjA5MWZiNjkxNWI4YmMwNjNiYjU4MTVjMzc2ZTAxNDc2MzEyYTJlNTQzMzQxN2E3YTkzMTVkNjU5OTliMDJmZjQ2NGE0NzRhNTk3ZTUzOTg4NzczNjcwZWNhNDZhNmUyNmNmOTZlOTQ4OGU5ZTYzNDRiYzc4M2RkZmI1MzVlNzZiYjNiOWE2MDNmZjRjNTljN2RiZTJkOGI2MTk4ZDViMjQ0OTBiNGVhOTZjOTU5NTlmZmJmM2Q4MjE4ZTc2MGRhZjIwZTAxZTJmMzZjODRiYjA5NzExNWFiZGRlZTkyYmVkODJkMTZiMTVhOWUxOTJlOTg5M2FjNjM4NDYxZGY1MDcyMDdiMGNmNTk1ODg0ZDhhOTlmYjljNzA0NWY5YmZmN2I3M2YwMGNhM2ZkNTk1YTVjZWMyOTJhZGI0NThiZDk0NjNiZTEyMDRkMDE2NzhkMmY0Mzg5Yjg3MjAxMTVmYTU5N2M0MDJiNGZmNjk0YjcxY2U0ZjNkMzMwZDVlMmYzYzNhZDZkOTZhOWIzNDM5MjMwZmM1M2E0NDc5NGNkYTU5NTU1N2M0MDZjYTE1ODliYzdiZTgxZTJkNzk2MzYwMzMyNTNmYTdiZGQ2MDBjNjdmYzU1OTM2YmQ5NmNlMDQyOGMzZWI5N2JhZDFkZTBhNWZiYjliNjc1MTU3ZGU1ZjE4YmM2MmE3YzIyYzk0ODNlMjgwMmU2NzliNWI4Zjg5ZGIwZmMzN2Y3YzcxNTBhZDVhYzg3MjJjZWI5OTliMjQzNWU2OTk3MjE3MDkyMzM2ZWYxYzhhMjI5MmRhYjlhNDZmZjhhOWUxMGQzMzU1NzY1Y2FjOWQ2NTk4NzcwZjRmMDFlYTYzOTEyNWZkMDMxNjA5ZGQxYTUwN2Q5NjI4MGM3ZDAxYTNlZTk4N2U5YjIxMGVjODc0NGNkNDhjNzRmOGFmZWU5NjFlOGVmMjIxZjgyNmExZmU2ZTdkZjBjYjE1YWQ3YzdlZjRhOTFmOWQwZjRjMmUxYmRlYTYzNWQyNzVmYWM4YzRiYzA2MDFmNDkwZGJkYmM3MzQKK1NJRzogZWMzNWVjMzJjOGE0MDA4ODI3ZTE3ODQ5MmIzYjhiZWUyMmE0OTU0ZmM2YjI1ZjRmMjI1ZGQ3ZWQyMzY5ODkwMGRlODE1Njc1NmE4ZWRjMzVjNTFkMTBmODJiODMwYTJhNjU5Njc2ZWFjOTExZjk2MDI0NDc2NmUwYzNjNjA3MDUKKworVFNUOiA0OTUKK1NLOiAgOWJmM2ZiYzczMDhiNDZmNjAzNmJhZGUwYzNjYTE5OWZhYzY2MmIwN2YxMDNiZjc1MTgxZDUyYmE2YTU4YmUwNQorUEs6ICAyZjZhYzZmYzMzYmMwNjBjMWRjM2NiOWQxYTJiOTExNTg0NWFkZGIxNmM0Yjg0YmUzN2VkMzNhZGIzYjNkM2E4CitNU0c6IGQ2NWUzNmE2YTM4MTk1ZWNiOTFkZTNjODQ4YjUxZjYzOTI0NWZhMmJhYmE4YTZmODU5NDcxNTlkZWMwZWQzZmFlODBjNWEwZjhjNjZmZjI0NzkzYzg5YzBjNjg3NTQzYmM2MzM1NDdhMWYzN2Y3MzBkOTcwMTJlYmJkYzdhYzMzOWM0ODkwYzA4NTZiYmZlMmJhMjliMjVhN2FhNmIwODljMDMzZmVjYjc2ZGI2MmRkM2MwMGY2NDIxYjllNzZkZDBlYTM2NmViMmQ0YTA1MmVlNmNjNzM2ZTM4MTkxOTFkNWFkN2E2NmQyYmUwNDJjYzY1MzllNWYzNTY1MmIxNTVhNzI3ZjM4ODhkOTNmOTNhOTEwMjU5OGY3NTM4YTlhYjdjNzc3ZWVjNzk0MjZhNjA3NWQ2ZjM4ZDY0YzQ4NTUyMGY2NDEzZmY0ZDM1OGE4YTljYmRhYjAxYWRmNGRiMDJhZGFlYTI2NDk0ZDFmNWQ2MTc2MzdmMjc3ZjhiMGU2ZTdlNjFlMmVlY2NkZDMzN2RlMmJhZjBjYTI2NGMxNGM4Y2I4MzY4MDAwYjljNzE0Mzg1ZjQxMzczN2Q2ODE2ZTIxMmNhZTJhZWNmZmZjMzJmZDE2ZDQ2YzNlY2VlNmFiMDc0YzBkNzY4YmRmZTk5Yjg2Y2JiYzhkZjljNDdjZDU4NmQ0NjU4NzEyNjhkNGE5ZDFjODc3MjM2YWI3OGY4ODU5YzExNGUyNTFjYWJjNGJlMGY4YmMyNWQxNDhjNWY1NDNlMjkwNzQ1ZDExODAzZTQ5ZjViNTMxOTNmZTM5OTY5YzAzOWIzZjI0OWIzMmYyYjg1OThiNmFjZjRlZDY0ZDU3NTJiYjc3MmZmNGVlMDBjZTBmODVlY2JiNGNmYzRjZTA3ZGFmMjgwOTg2OGMyOTAzYjc4MWUxMmEyNzQxMDVmMDYxODEwMjllNDdmMmJmYjIxZjQ5NDgwYWExZTQ0NDcxNWMwYjlmZjA3ZWFkODg5NzVkOTM1ODVkMmZmNDI0ODMyYTk3ODNkOTQ5MDZhNjBmODc3YWUxYzg1ZmYxNTMxN2JhZGNhMWU2MTMxNzQzM2M3Y2U5NjI3OWI2NzhlYzlkMTc0ZGQwODcwMDgwYjIzNDE1NGY2MjZhNTM0NjJjZmQ1NDc4NDJlYWI4NzA1NjA1YjhlZTg4NTcyOWVlNzhkMTgzM2FhNDNmNTVhYzIyNzMxOTg5ZmRlZGE3ZGM1ZmE5YzAxOTg1ZjI2NjFlNmM3MzI2ZDM0NmU2ZGIyN2U2ZjkyMWZhZTdjOTNhMjE3MGUxMGRkMGM0NjBiZGMKK1NJRzogMGMzMTM2ZTAxZjliY2Q5OWUxMGQzZDEyNGIwY2RiMDc3MmJlYzE4YTg2NGJlODFiZDFkYWE0NGQ4MThjM2Q0NzBkZmFhOGFiNmU5YTc2MWNmMDNmOTNlZjljYzc4MjkxMDk2ZWQ2ZDEwYzA4ZmEyZmJhM2JhYzA0ZGRlMjBmMGMKKworVFNUOiA0OTYKK1NLOiAgNjRlODkzMDRhMzM1ZTkwM2NiMzZjMGJkZjFhNjQxMmVmMzY4NDY4MDA2YjczZDNkMmQ2MWNiMDMwY2M1ZjhkMQorUEs6ICBhMTgwZWYzYTY2MWMzYzQ3OWQ1ZjY5ODA3YzkwMjc0OGUzNWU3ZjcyNTEyMWUzN2E1ZDkxYjhiZWM4OGQ4M2E2CitNU0c6IDJmNTEwNzRkOTgxYmRhZmFmYjAyYTQwZmU4MjZjNDVmMzE3MWMxYjMxODRkOGMyNjBiODJiODQxMWZjNjI1Y2IwMmNjZmU3NTVkYzI5ZGM3ODk1YmY3NTllNjFiMjQ1MGRhMWE2NTZhMzhkNGY3MGQyZWU3NDhjNTE4YzY0MjAzMDZlNWYwMWVjN2EwZmZlMGU5ZGNlYjkzZjZjMDc3YjEyNjYyODgxNTg0Zjk4Y2U2YWI5NDVmODdmYzZkMTIzYzQ1ZDZjZGZkODIzN2ExY2UzNjM1YjYyM2E3OWQwMjBkZjQ0Yzc0Yjg5YWMxNGEzMjFmYmYzM2E4YzBhMjU1OWZlYTFjMmIxNTYwNzZiODEzOTA4Zjg0MmViZTRjMmI5NDkwODllNTJiMWFlNDBkYzZlNGIyYWJiYzQzOWEwYmY3MjM2OTY3OWFhYjZmNGMwMDAxOGJlMTQ3ZjdjMGE2N2I5Njc5ZWU4OGE1MzgxOWM0OWY3YjY3NWUzMGE4YjVhZjM5NjYxZWU4ZGIyMTAxMDQxMTI5NDk2OGY4OGU1ZDYwNGQwZDg4ZDc2YTdlNDg2NGZhZDNhNTZmNWY2MjRiYTFiMzRlYTljYjcyMDg1MGFhZDNiZDRmMGE4ODJhN2QyNWZiZWMyYmI3Y2E4NmRhNjE2ZGE5NmMxNTYyYzZkNmExYWJjYzY0MWUxYjU4YjJjMTc4ZTFjM2JjOGEzYjM2ZWM5ZTE0NGRkMmU3NWIwYmM4YzA4Y2NiMGQ2ZTM0MjdiMDMyMmIzZDZhYjkzZjNmNjBiOWNjNWI2MWRhZDAyMzg1YTE0OTQ5ZjliODdhOGUzYWYxZTBlMGZhYjdhOWE5MjhjNzUzZmM2MTEwNDQ0YWY3Y2NhZjgwMjdlZDY0MWI5ZWQ4N2ZhNWQ4ZTFmNzZjYWU0NjVkNTdhNzBkYWQ5ZWJmZGQzY2U3NTc2YWM0ZGU4OWQ5OGY0MmUyODJhZDg3YWQ2YTUwNDI1NzdjYmJiYzRkOTUxZTJhODY3NmZlZGM4Y2IxYjFiZGY3NmMzYTM4ODQ2Mzg1YTg1YWEyNDcwNmMyMGE4YjM4NDY1ZmUyYWUwZTQxZjc4ZTYxNGI4ZTk2NDJmZTI0NzFhOTAxNTc0N2RiOTc2ZTBjNzg0OGMyM2ZmM2Y0MTdjYjA1YThkNWVmNDAxMzBhZGY4NTVjOTk4YTYyMTA0ZDdlMmZiN2MwZjlhYTJhNDk2MDc1NjIzY2VkMmMwZjdlZWMxMDE0N2ZmOTYwOGE4YTA0MmVmOTgxMTc0NTliOTM4MzdmZDFiOGQ1ZWYwMzk3OGVhZGE3NGNhYworU0lHOiA5MmViNDQ1NDgxNDAwMWVjZmMxODAyNWQ2NDIxZjY0NjQ1YTViY2JiNWNiOGZkODVjMTRkNzcyNjE3YzUwM2U4YmU3ZDNiY2YxMTdmNWU2ODAxZDFjM2I5NmY5MDkwYTY2ZGRjNjdmOGNmOGZmMGYxYzEyNWIxNmIxNWUyY2UwNworCitUU1Q6IDQ5NworU0s6ICA2ZjYzNDM4N2NhMmMwY2IxNjdhNzQwZDZhZmQ4OWUyYTI4ZjUzMDcxODRlODFjYmEzYzAzNzA0NmE1ZWRlMjNjCitQSzogIDAxMWYyYTlhMTExYzM4ZjM0OTBjYWQxNjg1YmU3OGVjZWVkYzZmYWM0YTMyMjEzMDFjNjljODRiMWVjN2IzYTcKK01TRzogODY1YzIwYTk0YWMzZjJlM2JkNWNiODViZWM5ZDMzNzI2NjcxZmUwMWY5YzUzNzAxN2Q1OWM4ZDUxMDZlNDMzNjBiZjc2ZmMwNjE4NjcwNTk4MGM4YTg3YmEzNjMzYTRhMTcwNDI2ZWNjMGRlZmI2ZGIyNjcwZjVmNTkyNTMzNzc0Y2RhNTAwNTJhZTU5N2Q0OGRlYWNjMjYzNzA2M2JmZDUxOWYyZTc5YmFjODE3NzViZWNjYjFhYjJmNWIzOTcxMmUyZTgyOTQ2OWI3NWEyZDJkYmQwOGFhNmQyNDcyMzQwNGIyNWViOTQ4YTQ4MzRjNTUyNDZjODA3OWE4MmVjNjQzNTRlOGMyMzg4ZjhjNWE2MTZiM2NkYzM3MWU2MjYzZmFiYzlmNjA5OTIxOWU4NjE1ODVmZTgyYTY3ZDYxMGRkMWViNWM4MWM5NmI1Y2IzNTRhNjg5ZmQ4YWFjOGRiNzZjNDMzZjBjYjBiMzFjZjFkODU1YjZhMzBhM2QyYTIxMmU5YjRmN2Q3YWZlNjE5OTUxZjk4ZDJmMWJhMmMxMDEwODViYTgxZjQ5YjM2MDM3Y2Q2NDU3YTdlYWE4ZjRmM2JlZGY2OGQwOWZjOWZhMjVhOWQ3NTRkYjY1MzYwMjg1NDEyZDFhNmRhNTM3ODg5MDVmY2Y0ZWZhOGE4MGNkODZjYTQ4Yjg0NTYzM2Q4YzMxYzJhZTA2ZjE2YzRjNmJiYmU5Y2QxYWZiNTllMTAxYmU1MGUwMzUzNWRkOGE2NWU0NWJiYTQ2ZDQ1Y2IxNGJhZGZjOGU5M2FiNTI2N2Y0ZTQ5MmFiMWY5YTk1ZTYxZmNhYjgxY2JmMmJkODY3YTNlYzdiNGJhYTE4OWEwZjA4NTY3MDc1NTk2MTI5ZGNmOWZmMWM1MDJkMzI3OWU4YWE2Y2U1NmVhZjEzNDU4MmE5ZTQzMGE1YWE4Y2ExMGMzZGE4YmM3OTNkMDI1NmFkMTlhZWE3MTQ5ZjBlYTdlYTk1ZmFjZmFjMWM1Y2ZkMjlkN2EzZmUxYTQxNzk3NTczOWUxNGRhOGVkYzgxOTkwMDQ3MmNhOGM2OTcxNjMyOGU4YTI5OWY5NzRlZGZmNzQxYWFiYzFjMDc0YTc2MWIzZWM4NzYxZGRhMmU3ZWVkN2FmMzNlZjAwNDA5ODQ5ZDQxNTQ5N2M1ZWQ1ZGZhYTIyNTlhMzFkMDc2Mzk4MTcwYjJkOWQyMTAyMDhiNGE0YzdkYjhjNjI2ZDFjNTMzNTYyYTFmOTU0ODlmOTgxOWU0OTg1ZmM0ZTFkMWE3MDdiZTVlODJiMDA1NDgxZDg2Mzc3ZjQyNGUKK1NJRzogZmQxN2M2MThjZGJiNWQ0NTllYTJhY2E4ODZmMDUxMmM2MjMyNTEyODRhYWUzYTgzZWI1ZDdmNjBkYTFkOWIyYmEwODNjNDU1YTVlMjU4M2EzY2JhNzM2ZTdiOTYxYmExOWMxY2M4ZGQ5MDc0NWRhODJhMTVkZmM2NjJlOGUxMGQKKworVFNUOiA0OTgKK1NLOiAgNGIyZTFhZTYwZmE1ZDM4M2JhYmE1NGVkYzE2OGI5YjA1ZTBkMDVlZTljMTgxMzIxZGJmZGRkMTk4Mzk1OTE1NAorUEs6ICAzNmMwMjBiMTg1NTIzNDU2MTllZjg4MzdlYjhkNTQ5NDg0MGU4NWY0NjgwOTM0M2I0ZDZmNDA2MTI1ZGE1NTdkCitNU0c6IGZhYjk4YjJiYmY4NmFlYjA1MDg2ODEyYTRiMDA0OWExMDQyYWJiNzZkZjljZDI5MDg3NTU3MDYzMDNlZmVkYjFhZDIxZThiYzhkNzU2MjM0OWUxZTk4Y2UwZDc1MmY0YjNkOTllNjc3MzY4YmQwOGM3OGZlNzQyNWVjM2I1NjBlMzgzYmQ0MmFmNjQ5OTg4NmMzNWFkZDgwYTU4MjhiNjFkNjY0NGQ3ZGM0NDNiYTJjMDZmOWJhZDJlY2NiOTgzZDI0NDU4ZjZhZGExYjEwYmI1Yjc3MTcyYzVjZGQ1NmQyNzNkMWU0MTAxMGIyNWNmNDhhN2Q1OGQ3MjU1NzAyYWMxMmYyYTZmZTI5MTg0NjYzOTVmNDYwZDE1MjM2ZDAzNWFlOTQxMGNhODZjNDYwNTEyODI5OWZhYWYwOTAxNWYxYWRlZTc3NjhlZTFhOGY4Y2EwNmQxMGRkN2Y5NWM0NmZhMTAyNTMwNjVmOWQ2ZjkwMjk1OTA4ODA5ZmQ3Nzk1NzFiZTI5ZTBhZTY2ZTBiY2JkZWI3OTEzZDJiYmI3NmFjMzAyZjM0NTJjNTVlZjE5OWE0OGVjZWIwZTM1OTZjN2I0YzAzODZkYWU3MTAxZWEyNDRhMzNjNGNkYzgzMDY3MmRmODM2NTViMzUzMzgwNTIzMDdiOTRkMjIzY2FiMWFmNjllMDdmNzhlNThjYmIwY2IzYzUzNTFlM2E2YjBjNGE5MjdmNzU2MmM1OThkMmQzZGY5MDU2OWY2MWRiMWEzY2IwMTQwYjU2ZWEwMmNmNzc0NWZiZWVjMjAyODY3M2Q2N2YxZWM1ZjdkYWY5NzE1Zjc1NGE5ZDhlZDQ2YTdhNjNlZjcyMmVlMGQ1ODk5MzMxYjYzYzk3NGZhODgwNDI5NDM1NzY3Zjk2MjU0ZWY0NmM5OTY4ZjNmZWRhYWZlYWYzZThmNDU2MzRiNTRmNWUwYTVmYzJkMjM3M2FiOWU5OGQ5YWNmZTM2OTdlNjQyYTE4ZTBkZmQ5ZmJjMmYwOTQ4NjZkNDAxZjBhNGNhMmE0NTZlZGY2YTFhNzdiOWMyOTZjMzkyMjA2N2ViM2Q1YTVjYTBhNzdmNDMwZTRjODYxMWQ4ZjA1YTFiYWFjMTYzNWVmN2JhODNkZmM2OWQzMDE5NDk4NTZiZTRkMmM4YWI2MWRlMjljZjM5MjUwYzU3OTRjYmY1NzUwY2RhOTVkMDQ2OGFmYTJiN2YyM2RiYTRlZjVmNTI5NWEzYmY0MTQwMDE4YjdlZDA2MTg4NDQ0NGY1YmIxYjdkMjM5MzEyZGQ3Mzk5OTk1MzZjNjg0NDU2ZWEwNmIKK1NJRzogMjIyMDExOWU4M2Q2OWE2YTNlZWQ5NWZhMTY2ZDFkMTEyOGEzZjIzMmNhMWI3OGJjOTRiNGQ0NzZjNDc3OTQ0MzYxNGI4NzcyYWEyMjMyY2IwNzIwYTA1NWViNzFkODQwN2YzYWIxOWJhYTFkOTYyYzA1MmM4NGMwYmQ1ODk2MDgKKworVFNUOiA0OTkKK1NLOiAgYjIxNmNlYmY4NzgwMjRjMjBkZmM4NmNlNGIzN2JkYzQ3YWEyOGYyOTIwM2I1YjQ0OTI1MDY1ZDk5M2EyNTlmZQorUEs6ICBjMzZlZGJiNjI1NGE5MTNmMDhmZTI1OWUyMzg3ODA2MzhmNzJlYzBiMzAwNzI2NGJjYzYwYTllODFlZTkyOThmCitNU0c6IDljODcxN2NjODZmZTAyNDgwYmZkOWU5MjJiZDc2YmZmZWUyMTcwYzRjYjFiMTNkZjgzNGFjMDFkNDUwMDYwODYyOTdmMWI4YTI2ZjJiYTY3NGQzM2UxZDE2MmYxOTM2N2ZlYmE5NzM1MmI3ZGYyZTc1YjMwOWQ0YjZmOGIwN2NjMGViNjc3N2U4MWUyNjhlMDJkMDdmMmEwOGY4ZjM5ZDVhODMyMGJmYzAxZmM4YzkyMjdkMmNmMDVlMTI4OTFmZjRkZTg4NWExYzkzMzcxYTA5MTBiYTUzMzkyYWZmOWJhMmVlZDlhMjA1NTk3N2VjNDE1N2JkNjViMzRkZjc5MzcyZjRkNTBlZGJjNDg5MjQzNTNjZmExNjkyMzE5ZDg4YTdhNWJiNzI2MjU0YzIwOTI5MWU5YjFkMmMxYTZjODIzNjM5ODEwOWM1OWVkNDJhMGFjOWU3NjMzYzUyMDczNGVjY2ZlYTRmZWE5NWE0N2E4ZjBhMDY4YjQyNzUwMDA0MzljYzk3YzU3ODcxZTEwNWNjMDc5MGU5ZGNjOWMyNWQ1YWY3MDYzZmZkMDVjNGYzNzgwZTdiY2E0YzQ1NmQwMTcwZGE3MDlmYzZjYjNmYWE3MmJkY2Y1NjI5MDhhZTkzNDBhZWY0ZDBjOGI5MWYwZmJjY2JjZjFjZDg5OGIxYzcxNmY0ZjE0NzRjM2FhMzE2MjQyYWJkZjYzNjhlNTdhMjQ3ZmYyZmQ1Y2UyM2QxODdmNjk0ZjExZTM4ZGZiZmJjM2Q5ZGIyMDkwM2I0ZWJiNDQ5YjkwNDllZTAyMGY2ZTJmNTA4ZThiMmIxNjViYWQ3NDY0ZGJkZDE3OGNiZDQyMzIzMzc2NWQzNzFlN2FlMWMzZTg3OGNkYjViODI0YjIwY2IzMDk4NjdjMGU0NzNjMDY3ZTY3NDQwMDg1MjdiNmJjMDc2ZDA3N2Y0ODY3NjIyYWVlZDFjMjUzZGJkZTdjNmE3NmM3MDE1OTYyZmI3MzM5MTY5ODYwMGJiMzE4ZmZhN2IwMTM2ZWU0Y2NiMDdkYWFmMDFmNDBmZjljMTk0Zjk4NjgxZjlmYWVmOGI2ZjllOTlmOTVkZjAwODBkYTg5NjZhOGJhN2E5NDc0YzUzN2I5MmRmOTc5OWUyZmQxNmY3ODhkYWQ3YTdiY2M3NDUyMjZlMWU2MzcxZjUyZWJjZGJkMTQ0MDQ0ZGRmZTYzMmRmYzBhNDNkM2E0NTA5MjMxNzBlYmM3YWUyMTllNTBlMDc4YTUxMWJjMTJlZjE0Y2QxNGI1MzA5ZjM4YWJkNjVkYjJiMmE3YWYyMjQzYjIyOWM5ZmQyZQorU0lHOiBiNzM4OWVlNzhkZDk3NjNmOWQyODkyOTEyZWRjYmUzZThhMjM2YjhiZGMyNWY0NGI5Y2ZkYzhjNDdjZDU4MTY4YWI1NmViMDQwMmE1YmQ3NTJhYzhmNDk3OGQyZWEyYjY1ZDJmYTg1MjY1OTY2YjlmNTcyMjdlZjRhNTlhZTAwOQorCitUU1Q6IDUwMAorU0s6ICBhZmNlY2VhOTI0MzllNDRhNDNlZDYxYjY3MzA0M2RjYmM0ZTM2MGYyZjMwY2QwNzg5NmNkYTIwY2I5ODhkNGUzCitQSzogIGQyMzFmNjkyMzVhMmUzYTFkZDVmNmMyYTlhYWYyMGMwMzQ1NGI5YTI5ZjRlM2EyOWFiOTQ2ODlkMGQ3MjNlNTAKK01TRzogMGIwNWY4OWViYjMzOTc5NDc2ODdhZmJlZjBlZGU4N2NmMzgxMDY3NjI3NzAzNzUyMWQ5NTJhM2JiYmJkYzg1NjU5ODhhMDk1ZDhkNGY2ZjU5YmU1NzJkM2Q4MjFkZDc4OTk3N2VmNzdhMmZkNzExMGNlZWVkOWYzNzU2ZWQ4ZTE4ODI2N2I5N2EzMGVmODk1N2M3OGFlYTNhMjk2M2RlY2E2MTg2MDU0NWUwYzQwODI0ODgxZWJiMWRiMTBmNjA3ZTEwZGRiZGRjZTQwMGVhMjM2YmE0NzQ1YWE5OWEwNTY0MTk3Njc2Njc4OWVkMGRhN2RiNTVmZGFiNDU5ZWJkNGI0NDFhNjI4MmY3Y2ZkNWEyMGVhMDZlZmZhMzM1OTU1ZTVmZDI5MTgxNjcxYmM5MmMwMDA1MmY3Zjc1YzM5Mjc3YzlhNDNiNzg3YWM5ZmIxNTE2ZTk5NjIzMmE1MDk3NzRkMWRjMjFkOGMwNTEzZjc4NDRiMGE1YjVmMTg5NTc1ODFmOTkwNDRhMTQyMjNjY2RhOGEyODRkZTEyZmQ0MjQyNjVmZTU3YjI3MDIxNWY4ZmE5ZmYyYmVhNTE3OTM0ZTQ4MDBhNDdkMzQ2ZmI2YzM2MWNmYmFiZWZmYWJkOWM0MTY0ZjQ1MTU2ZTI0NWM5NzdlZGI0NzM2NDJjMzk0MGJlNWFkNmZkMWE3MTE5YTdiMThlOThkNmRjODQzZTBkMjU0YzkzZDAxNDZkMThlNWM2MmVkZTE0OTBmODlhNjA1ZWI0NTRmOTc0Nzc4Y2ZhZTIwOTMyZTk1NDc3YmQwM2JjZGI5N2Q1YmNiNzYzMzU5NDJlOTJlZTY2OGYyMzFlNjljNTcwYWM1NDQ2ZDBmNzc0MDY2NzM3ZmRmNDlmMTBjZWIxYjUyZDZkOGE0NjM5ODQ2YTMzNzNhN2M2ZjNiNGIzMTU5ZmUyZTdhZjdlZWUyZjBkZjE3MmQ5NGQyNTVkMDE3NjUxZGEzMDA5MDA1ZTVlYWMzMTc2YzA5Mzg5ZWU0MGQ3MDM4M2JkMzcxMTdlY2EwODM1OThhMTgwMWY1OTJkMDU3MTg2ZTU2OGUyNDdjMjUyYmU0YjE0ZjcyM2FiN2RkYjk3YWU5NzY4YzI2ODJmZDYzYWNjMzAwNzc5ZmUwNGUyYjg4ODc0NzUxMzQ2YzllMGY5N2EyYTIxNjc3MmZmOTYyNWMzM2JkN2UyOWZlZDgwMDNhMDhkYmQzM2I1ZDE3ODk5Yzk0M2MyNWU5NWFkNzU0ZmI2MzJlMDQ3YzExMmFmN2Y3Y2ViYTcyMzYyZTFhM2RkZDI5MzVhYWY3ZjgxOGEyN2MKK1NJRzogYTY1NTQ1Y2YzZGY0NTZiMjhkODNhNmQ5NGMwMzZhMTlkMGQyOWZiMDY1ZWRjMjdlNWU5M2ExZjQwMjc5ODk3ZTFjNmYyNTk1OWE3MjVhYmFiYzg3Y2YyYWU3MjdmMzQ2N2I3OTU3MGU5MDI3MTE5MTcxOTFkOWNiMGQyZDY2MGMKKworVFNUOiA1MDEKK1NLOiAgYjgzNGM2ZTBmYWNiZmY1ODBkZDNiMjM3NTM5NTlhNGMyMTU0YzIxOTUyMWIzZDI3MDM1ZDA3MWY2NTk5YmQwMgorUEs6ICBkMWMzODQ3MTVlM2IzZDAyYzEzZTA5MDYwNTUzNGM3ZGI3NDBkYTJhYTU2MGY1MzIwMGEzY2VkOGJlYWU4Y2Y4CitNU0c6IDZjZjE0N2IxNjA1NTI4YTM2YmU3NTcxNmExNGI0MjBiY2YwNjdjMDNmMWNmZTljNDQwMmYxNDk4N2ZiZmM5ZDNlY2MzY2NmNGY4ZDJkMDNhNTU5MDBiOGRjNzlhZjNiNmU3NzQzNmY2OWIxNDE3YWQ0YjY4ZmQ0NGU1ZTMzM2VkOTBlYTc5NDNmYmQxMTIyNjA5ZWM4ZmY2YmIyNWU0MmU5OTE0ZjU5MjBmYzcyYzRkMDEzYjZhOTY4NWM5OTZmYmQ4MzUyYWFmYjE4NGMyMmQ5ZTQ3ODcxYTUyODBlNGFiN2RkNmE1Y2ZkMTBhNTk5NGEyMDBmNjcwZTBiNjIyYTkzOTRkNDc5M2QwYTQyMGU3ZDg4MDZjYjEyN2M3YWM2OTBkNDVhMmU5NDE2NmNlYTY3MmJjZDk4MmIwZTliYWFkNTYzMTJkMjU3MGRkZGU3ZTBiOWU3ZjQ3MTM2ZjA0ODFkMDBmNjZhMmFhY2E0ZDFiMDlkN2NlNmM1YTk4YTc2YjY4Y2Q5N2Q1NzkzOTY4ZDY2NzA3M2Y4MjE3ZjkwNTQ3MzUzNDBmOWIxNDljMGRjZTg0NWIwOTllODhkMDcwOTY4MGYwZjc3NjAzZmYwYTIzMzFjNTU4ZmMzNmQ1ZjI0ZGE5YTYyZDY5YWY1MTkwZDIxYjVjODU3YTFlMDhmMDE0YzZkNDU2NDY4NjY1YTdmODQ1YzY2ZjkxMTFmOWMwOThjNjg5NDBlZmNkODdiNjU3MDcwY2I5MTY0YmM5NzQzYWNlYjc0MzlhMGQwMWMwMDYyYTExYWYyZTExMzQ5Mzk3ZjVkMTUyODcyYjEzYzVhYjMyZjUxY2M1OGYxNDc1ZWM4MmFjNjcxNTYxZGNiZDM0M2NmYjNjNWY3OGQwZmM3MzA1M2M2MDA0YjBhNGNhM2YyMDQzZmY0YjBjNTQyNzVjNGZjYjljYWRjNmJhYWJlNTdiMWQ1YWNkNTMxZTk3MmVmOTMzNTEzNmNkMWQ2NTUxMmJhMWY1YjZjY2M0YjY2YjQyNTBhYWZhMjk2N2RkNDIxMWEyNzQyZTBmMTc3ZDhmNDA2Mzg5OWY2MTgxNWNiZTZkOGZiZmNkZjc0ODEyYmQ0MGNjMTAwODRlNDZhOTlhYzEyODA1OGVhZjE2YTQ5YTI0YjZhZTIyOGVjZjAxMDljNTJkZmMwNmUzN2Q2YTMzM2JjYjI0YWJhMzEyMTY0YzZjMDI5MDQ4NWQyNTEyODA1MzhjZTk1NDFjMDkxNjY0MGUzNmQ2OTI5ZGNkOTU4OGViOTk1NzdmNWY2ZDgyYmNiYjE5ODgyNjI2N2U0OWY1ZGFmZjJjMGQKK1NJRzogMGYxOWI3MDY2ZDU3OTIzMjhhOTgwMGQ5ZDRmOGY2N2Q1YjA4OWI1NDEyMjZhMTY3ZGFjZDQzOWZhNDg1YjAwMjVhNWRjN2YyYzdlMjNmYzRhNWM2ODY5ZTc2MTlkMzU2Mzk5NzAwYzkzNjUwZTg5Y2QyNWI5MGZiOTkyNWUzMDQKKworVFNUOiA1MDIKK1NLOiAgMjI2OWE1ZDhmN2FjMmNkOTA0OGY1ZjQ5ZTM0OWU1YzQzNWExNTliMzE5ZmUzYjMwYmZhYzhkMGQ1MDU5NDNmNAorUEs6ICAxYzgxNzk0M2RjMzljMjRiMDFkYTM4YTQ4N2IxNzU0ODI0NjBjNjA5ZTQ3MjYzNDlhOWFhN2FlYTliYzBmYjM0CitNU0c6IDcxNTNkNGQ5ZTY0MWFhNjE5MjBkYjBmZjRiZDUzN2E2ZDYxMzBhMzk2NTU0Y2M5NDUzNzY5OGY5Y2FkMTZiOTllZWJlZmE1ZjI3NzZmMmZlYWZmNmJkOWE2OTA0MTIwYzY3ZTA4ODNmNmI5NmJiYmIxOTVlOTVhZWM3NTNiNjk5YmFiM2QwMzk0NGMxM2M3MmZjODRlM2YyY2JmNjI5NmY2NDU1NDkxMTFjOTNmYWUxYTc1OWJmY2QxNmZjMDllNjBiYjk3ODU1MzVhZDI3ZGEyNDRlZjJmODU3ZjJkZTk5YTZlOTIxODg4OTBlNDUyYzdmNWI5ZTNhNGI5NjhlMTE3NDNiNmZjN2ZhZjEyNzVlNTM2MGE1NDY4OTQxNzk3ODk0ZDc3MGZhN2RhMzY0YTMzNzMwMjIzOWZlODNhZTBiMGQwODRhYTEyYWNkYzYzNDYyNTI0ZTBlYjEwZmVmZTgxYmE5NmY3MWYyNzVmMzQ0OWEzZjhkYjIxZDU4NzQ5YTM4ODUzZDM5YjBhZDhlNjk4OTFiZDIwNGRmY2E4ZjZjMjM5ZGM5YTBhYzI3ZjU0ZGI0MjM4ZDQ3MDZkZjExZDYwNzM2OWRjN2Y3MDRkYTFkMzlmMmU4MmFmOGMyODNkMjIwYzEyNDMxZjU2ZDgwMzA2OWI0YWNiNzcwODFjMDMxYWUzMzE5ZmM3N2ZjYTc4NDUwOTdmZDcyN2FkMGQwODA4OTViYmEyM2U4NzNkMmRlZjhjZGMyMTZjM2VlZDYxYjA4NzYxYmI5ZWJjZTAyODJjZjUwMmFhZjZjZTdlOGMwNTg2Mzc5NThjM2VhMWI3MmZlNmU4ZGY4ZDM3YWMwNTVkYjY5OTI1ODdmYWJiZGM0NjdmNTI0NzU2NDRmOTE4ODYzYWY2MjA0OTJmMzQ2ODBmMjA1NmNiY2FiNzVlMjMyMzYyNmMwOTQ3NTljMGUwZTk5ZWYxOTc1OTUyNzI1MDY0NmFkNzYwMTIwYmEzODY2OTlkNTM5MzRmOTU2YjhiYmM3Mzk1YmI0OTZjZWIyZGQyMjNjN2I1MDFiOTJkMzZhOTVmOGYwYTAyZWI1YmE0ZGRkZjE2NmI5Yjk1YjRhNTllNzJhMzBjNjNjZjIxZTYwODU3NTE5MjNkNTRiMzAyODFlNTJhMDk2MThlNmYwMjNiYTBhMjE2NzVlN2Y5ODliODk5MTU4OGM5NmMyYjU2YTc4ZjVkMjk0NWE3YmFlYjZhMGMxYmJkNWQ5NWFmM2VlODMwZjU4MDljNzk0YTE1YWI0YjVmODlkZDJiZTJkZmRjZDhmZTA1MjBmZGEyYjNmMDJhMWFjMDE1NQorU0lHOiBiZTBmYjMzMDhhMDc2YTYxYTRhOTJhOTdmNmFjNTUzMjcxOTBlMTM0MWQ2ZGQ0MTBkODZiNDFiZGFmMmQzMzc0MDkzZWY3MjBiZGI3N2ZlYjcwMTRlMGY3N2QzYjgwOTYyM2M3Y2E1M2UyYWU0YjA5NzExM2U5NmRiNzdhMmQwOAorCitUU1Q6IDUwMworU0s6ICBlOTY1YjNmMjU3MzU2Njg1Yzk4YjQyYjk2NGEyNTNmYzQ5NTM5OWNjOTRiMDk5YzI0NDVmYzgxYzc1OWM2OGU1CitQSzogIDY4OWY1NDEwYzhlMGY0ZDM3YmMwN2M4NWQ3Y2NlNmM5YjYzNjAxZjliZGFmZWNhYTQ0OGE1ZWVkNjRhZmM4YzYKK01TRzogNmYyMGE5YWQyN2UzMGRhYzc2YjMwZDRjMTlhNWJkNmRmZDZkMDQ5MjEzZjRiZWNkZDk2M2Q3MmI4YjJkYWQ2ODdiMDAzODA4MjAxZDUwZjdkZDZlNTk5ZWY1OGNlYjYwNjhjNTQ1ZWQ5OWI5ZTc2M2Y5YjBlYzFkYjVmY2JkN2Q0OTBhMTIxZWNlYzZiYmExZWI1ZWRiZDZkZTg1MzY0NzA3YzU1ZTMwMGM4YjE2YmIyNTMwZjcwODk4MTM2Njg5Yzk4ODU5MWQ1MzkxZDljYzM0N2Q3OTMxMDYxYTliNzY5NmUyYzlmMzViYzBkMzA0YTgxYzJjZjk1NGQ5YzNhODhhMjJlMWQ2N2JiZTBhODUzMDg0NzdmNjI5MThjMjVkYjUwNGU0NzYyZjBlM2I0MjQ2MDA3OTA4YWM3MDE3NzkwMDZiNzdkNzI1MTBlZGM2OWUxN2QwZjYzOTRjNzdlNTU1MTg3NWE0NDZmODEyMzM0MTVkMGE5MWEwNDYwYjUxYzQxM2Q2NDRlODUwZjg1NTcyODFjNDY2OTllNTNiMjJhN2M3M2IwNjhlYTM4NjUyY2ZmM2IwYTdiOGJhMzA5NzFlYWIxOGZkYmJkODczOWVlMWVlMGNkNWNiZmI3ZDVkNDE3NTdiNjMzMTI3MWZiNzgwOTc1MWUyMDM1MTNjOTk3MGY2NmQ5MWJjMGNlMDYyZjRmY2IyOGJlMGE2OTk4NjdiNzk1OTRjNjQ1OGEwZDMwN2FjYWM5MWY0MTNjNDYxNTg3N2RjNTNlMWIwMThkYTVjZmNlMWI2M2Y0MGJlMWU1NTI3NGM0Mzc0Y2RmYzIxNTI0NDk5YTY4M2EyMzFhZGVmNzc5ZDE5MjE0NDBlNWQzZmRiZDUwMzNkYzk4M2NmYzkzMWFiZTYzOGMzNWQ1YTk1ODY5ZTlmZTNkOTNlYjkwYmQxODYxZjg1NWNlMWY2MDhiN2JjYWQ2YjVlMWJkOTdlZGM5NWVkNWRkY2JjYjcxNWQ5MTlmNWZmNzdkZjJkYTQzOGY3YTNhOTgyODZkYmQ1YjZlMDQzZmM3MzcyZjY5NzA0ZjA5ZDg2NTUzMGY0ZjBlZGQzMzAwZjE4NWI2ZDczZDg3MTZkMzJkMzJiMWM5YWMyZGRmNGY5MDJkM2YyMTZkMzVhMzNmMzY4MDk1ZGVkMTBiZTk0YmI1M2Q2ZjI1NjU2MGZhYzJmNGFmMGVkZjVjNWM3MDIxNDM3NzcxMjZlN2RlMzJkMDc0OTM5MzI2NjIxMjliYTBlN2ZjN2NmYjM2ZmQyY2E1MzE2NDZlOGNkMjIxMTg1NGZjNTEwYWYzYjFlOGNhZmRlN2EKK1NJRzogOGQyYmM0ZTFjZDI1NmFhZDhhMTUxZGVjMDEwZGM5M2E1ZTVjY2E1ODI5OGRlYzQ5Y2JjOWM0NzE3YjVjZmI1NDYwZDQzMGJlNzI2YjBmMzAyY2JkOTI2YmVlYTE5YWEzYzkzYWViNDUyYTQ0ZjYwMDdhZjQ5YWRmMmYwNWJiMDQKKworVFNUOiA1MDQKK1NLOiAgYmMzYjFlMGJmOGQ2OWVhNWI0Y2JiZjEwYmIzM2ZjOTU1YWRjYmUxM2ZjMjBhZjhhMTA4NzJjZTlkZjM5ZDZiZAorUEs6ICBhY2NkMjYyODE1NTkxOWJiYzdmOWQ4NmY5MWRhZmVjMzVjNzExYTc4Yzc5YWQzNjBlZGRiODhmYThhMTgwYjJkCitNU0c6IDRjNzNlMDRhYmUwODE5ZGUxZjg0ZDcwNTQxZWIxYmI2MWM0ZjQyOTIwZTFmMmQxZDllNjI4MWE4YTJlOGIzZWI0NTUzN2Q4Mzk2OTAyN2Y5OWVmMGVhMjdjYTA4NWIxM2Y5ZGI0ODBmMDBjMDJmM2ZkNzQyOWRkNTY3NzA4OTUzYmJmM2I5ZThlMmM2YWM0ZDMyMWZmOGY5ZTRhMzE1NDcyMzA4NWE1NGU5Yzk1NzNjYzczNTBjMDlmODk3M2Y5NDhiMDg3MzAzNzM1OTdhNWZkMDM0OTgyMWFlMGEzY2Q2Yzg0OTkyYjE4OTEyOGYzNDkwOTg3ZTFlOWFkNGY2NTc0Y2E1MzhmZGZkODMyODRjMWViMDk1M2YyNGMwOGY3NDkzMmQ0MzY0ZGJiZWY5MjI1NDI0NDBkYWU4MDQyNGE5MmVhZWYyN2MxODg5YmQwOGM0NGY5ZGYwM2EzYWYzMGRmZmI0OGZhZTQ0NWU2MjVmNGQ5MjY1Y2YzODdhMWRhMzVmZTRjMjMxNTA0NTM1ZGI3MmVhODFhMTg2ODA1Zjg1NmViZTZhNmE2NTI0MTQzMjUzMGZlNmM5NjBjNWY5YmU2YzIyOTU3MDYwMzA0ZTlkZDhlZmJjMWU0ODJlN2RkYmQ4YWYwM2JmMjM4Mjg5OWM5ODZkOTE2NjExZTRmMjdhZTUyZjgxN2VmMDFiNmExNDFmZTRmNjg1ZDk0ZGM4Y2Q1MjgzMDA0MzkzNDU4NzcwNGMxZTY0MmU4ZmU1NmJlNmQ2Yjg1YmY0YTZmZWIyYjY4NThmMWYwMDdmOTlkMzllYTA0YzlmZTVmYTdlZjFiOTFmNDk1ZWQwZTdmYTQyMTNkZDY4Y2VhNDJiNjcyOWY5NTAzMTkwN2UyN2M0NDA5ODA5NDM4NmZhYmZiMDRhYjliNGRlM2Q2ODYxZGU0NjIzMTJjNTliMjdjNzZmN2I2YTRmYzcxZWEwZDVkYWY2YjczMjA1MjFhNjdlNWNiMzc1MDQ5NzZhZDczZGFlMmQ2NDlmZWI3NWUyZWFkZDM0MDFhN2YyZjM2ZTE2ZGZiZmJkYjJhZjU3MTZjYmExYmNlMjBjZDQ3Y2UxYzFkN2JlMDA2OTcwMDFmYmJlYjQ5MTVhYTZlNTM5M2I1YWIyMGUwZjMxZjUxMTkxNDlhMmNiNGM0ZDQ1MmM4MTU2MTEzYWM3ODI0Zjg0ZjA5YWViODEyMDJlOGRkM2RhYzBhYTg5Mzk5YjVhMzhiMWUyMTgzMDE5NjBhMzdkNTI2MzJlZWFlZmUzNjg3NDU1NDY0Mjg4ZWIxN2Q5ZTE5YTNhNzJlZDlkZTMyYzE3YmU3OWEzYjkKK1NJRzogNmVmN2YwZTkxZjJjYzY3MTVmOGU1YTk4NTc0YjQ0MDBjMjYxYTY0M2UwNTQ1ZmYyNjc0N2Y4ZTE3Mzk4OTlkNzY2NDBiNjQ1MWM0M2MxZDAzYTQ3NzViNTRmY2Y5YmNlMThlZDNmY2NhZDMzOGI3NzY0MDI0ZmRmYTJkZTgyMDEKKworVFNUOiA1MDUKK1NLOiAgMTA3MThmYTZlMmQ3ZjZlZDM4ZmQ2NmNiNmRiZmEwODdlOGYxZThhOGEyNGZhYjU4ZDc5ZDc5NTRiODcyMGMzZQorUEs6ICA4NzBkNGY2NjZkMDZmZGE5Zjk1MTFiNTg2MDJlZWMwNTBkNzU0ZWE2ZDhlNzljZGQxOWY2MDFjNDc3ZGYxYWEwCitNU0c6IDQxMjU5YjZlZWYxM2Q2ZmZlMzNjZGRlNzk5Yjk5NWM0MGJlNzgyY2Y5Nzg0NDBiNjZiZTUxYzQ0MDU4MmFiZDQyZjUyNjY5NmJiM2NiOTIyNjViMWVkMGU0YmJhNzY0Y2FlMjgzOTgzMGEyNTI2MzVkYzgwY2U1ZjczZDUyMWIzZDZmZjAzYWMzMGUxOThhZDIwNTY3ZTc1YTM0ZmE4MjVlYmY5ODQxNTA4ZGE4NGNkNjc0MjM2Y2E3YjQzZGUzNTY0Yzk0YWIwNzk0MDhmZDk0MTM3Y2UzZjkwYTVkZDVkM2FjMzlhMDVlYzg2NzE1YThmMDI1ZTQ1MzlhNzY0MGFiODg4MzZmNGVmYmFiZDVlMTY1MmM0OWVhMjE2MTNhY2ZlMzQzYTg4MGVlNWE0MmYyZjkxMzRlZjRlMzcxNmIxNmQxMzRhOWM0YzcxYzM5YjNjMWE4NTdkM2M4OTQzOTc4M2VlZjFlZGQ3MWJmNDQ5MmQwNWZkMTg2NzNhNTI0MmZmNDE4N2I5ZGU0N2FkNDk2OGRhNDlkYmE1YTYwOTJlOTVlYTI3ZGRmYzc0NDhkY2Y1OTcyZDlkMjI4ZDYzZTUyOTFiYTZlNmZiZDA3ZTMyNDFmOTM2NmNhNDk3NmJiMDRiMjJkMDFmMGRiYWU3OTRmYTljMWQ5MDI5Zjg4YTgzNjAyYjBlMGVjNTVlMjJjMzdiMjAxMTI1Y2FkYjUzNDFlZjczZjZkYTFhYmJlMmIxYzQ3NWYwNzUwMzQ1YjFiZTQyNTlkOGMyODUzMWZmZTc3ODg2NjdjNDEwZGFjMzM5OTE4Yzg2OWIwMGFiODBmMjBiZjc5OTBkMzY2ZjliM2Q1ZThlYjJmNDhkN2VkMGU2NGI4NWRjOWZlM2JiOTk4YjFlZWNkMTIzMWU5MDJkMmQxNTJlMDlkYTJkMjU5MmJkYjMyYzhjZDJlMmM0ODk0OTZiMjk4MGMwM2RiYjA5ZWM3ZjhhNGVhMmM3MDIwZjJhMGZhYTY1N2NkNmNlZDQ4ZDZkYTI3ODY0Y2Y1ZTk3ZWVhOWIzYzJmMGYzNGFiZjhkODdiZDJhZGViNjBjNzI3MmZjNDMwNmQ5NTViZGM4MDIzZDdkM2RjMmYzZGFmZTllYmU4YThkMTM4OTY1YTdmNmNlOTM1MTdjZDIwOTk2NjNmNjdjMzQ1NTIxNzZkZGI1OTVhYzZlYTU2MDlmZWJjZjI0YzdkNjlkNDEyNzA5ZTU3ODY3MGEyMWFjOGFmY2NiOGJmMmIxOGZmM2FmN2RlMjFkYzcxZDUwZDYwZDM3YjZlZDcyOWRiMDRiZWZmN2QzNGIyOTIwZDg3NTUxY2UxNQorU0lHOiBlMTY1OTE4NmYxZjc2ZmU0M2FjOGExMTcwMzM2MGZiZWZmNTNiNWU1N2I1OTc0YWFhMDhlMjU3NTU3OWMyNzA4NGNmNjgwMmU3YzIwNjM0NzMxNDQ3NWI2MDMxOTc0OTRlN2Q2MWZlNGIxZWU3Yjc4ZTE4ZDk0NDY5MzUyZGYwYworCitUU1Q6IDUwNgorU0s6ICBjMWQ0NzI0YzZjYjFiYzY3MjNiMmI0MzAzNDI3OGIzYzViNDhmZWQ3ZjhhM2NjMjMxODAzM2U3NTUyMDQ3MzUxCitQSzogIGMyN2UzOTJlN2MzNjY0YjkwNjFlYTc2ZDI1NzVkZDdjNDFlYWYxZGEzYTY1ZjNhOTg2ZTBhNTdmNmM0MGMxN2UKK01TRzogZGVlZTk5ZDdhNzdkNDMwMGMxN2FlYzFhYjMyM2M1NzFjNmU5ZTczYTQzNDkxYTNjNzg4OGI3NmZjMDNlYzQzZDA3YWY0MmEwNWEyYWEzMjJkMDBjODU2MGFjZWYzMTQxMDZiMTBiOWJkMTI2NTQzNTdmZmEyNmYyMzkwMDUwZGE2M2Q2NjhjOWUyZGY1NDhmODc2MzllMDk2YTM1ODUzZjgyZTc2MWZkNzExZDJhMjY1NDM4ZjVkNGRiNWUzMjc3NTcwODE1MGRhNmNiNjg2YTJiNGNhMjExZDdmMDBkYzBhYmNiMmNhMTUwZTc5MTExNmExMGE1ZWZjZmYzNTE0ZGFiOGVkODBhNzA5MmMzYTAxNTE1MmNiMjVkOWY4NmVjMGQxY2E2N2RkYWI0NGQ2NGVlYjFmOTMxYmZhYjJhYjE4ODk1NmM3NDNkYjQ4MTQ4MDhjNWNkZTFiMDc0NWIzZWRkMzQwZWIwM2ZmY2M4MGE3OGYzZGIzMTBmNGY1YzIwMDA5ZmMwMjc5YzJjMWJjYjNjZWRmOTkwYmQwZTIwYzZmOWZiNzUxNWFkNmU5MzNiMDdlOTlkYTZhYzMyYjk3MTQxMTg3ZWY2M2JkYjEwNjJlMzcyMjBhNGRjZDQxOWQ2MjQ0Y2RjYzM0ZWE0MWQwYmNiYzMxMzhiMWQ1NGFlZmMwMTkwZTMwYjE4N2RiMDczYWE3ZDZjZmUwNGJkM2ZkMmFjMDAzMTNlM2RkZDY0YTE4MTkzNWNhNGI4YjJhODVkMzZiYzI3ZDk3Yjc2MjY3NjdiOTNlZTM4ZGVmOGI2YjJjOGRhOWIwMDI2MzYxNDM0MmZhYTlkM2U3MzhkMjcxM2M0NWZmYmVlZjhjODRiY2RiYzhkYTQzMDljODQ0NTUzMGY1YzYxN2RjODY2MjUxZjU0ODk1MGExNGYwNzVhYTMxMTdmOTZlNDFmODk5ZGJlNzM0MGIxZDkwYTEzNTJkM2I4ZmI0MWI3OWYxNmE4MmJjMmU0YTE5M2I4YTcyMzI0MDA5OTZiNzNiMWZjMDBiMmVjMWM2Njc1NzdmODI4MjRkMzlmYjdmNmU3NjkyZGNkOTdiMWQ4Y2U5NDA4M2NhMTk3ZTlhNWQ0MGZhZGZmMGI5YWM1N2U5ZGU3NjFjMTU2ZTZkMzFkNTJjMzMyZDUxM2U5ZjU4Njk3ZGNiZGQ4MGE1ZTQyYzU1MTcwMmMzZGU3YmVjY2MzZGI4NDViMWEwNGM4Y2JkNDE2OTVlYTc0MjhhYmJhODllMGRjZTNlM2Q5ZTcwMjMwYWU5MTQ3YzJiODg1NTlkYzY5NWQ2ODA5YTUxY2NiYzFkZDllMDg5YzU4NWYKK1NJRzogZDM3YTZlYzgyZWQ0NWNhOWI0ODU1ZGU5Y2I5NDI1NjRlODgzZmY3MGE3OWI4ZTcxMmQ1ZjYwNGVjODk3NGRlNTM2M2FjODQ5Y2JhYjI4ZTdhZWVmZjI4ZWQzZjJkMTRiNjA4YjMxNDZjMmVmZTA3MzVhZDgxNWM3ZDc1YTFhMDEKKworVFNUOiA1MDcKK1NLOiAgMzdjMDcwZDRhNTNiMTNiZTc2MDYzNTExMGQxYmQ0ZjAxOTIwMjI1YWZhYmVjNTc2ZmFhZWM5MTBmMjkyNmQxYQorUEs6ICAwYWE4NWYyYWIxZGZmODk1ZDFmYWQwYzExOWYyYmY1NzEyNmFhYjYwMWM1MjhkMzc2OThlOTc3MDJkMzVmNTI1CitNU0c6IDEwYzY0NjQ0N2Y4MWFkOTRkMDE1ZDg2ZDBkOThiMjQ1MmRjYTYwYTQ3YWIzNTI2NDAzNWUzM2EwOTQyYjk1NGUzZTIzYjkxZDgxMjNiODU5M2M2YWY3YzhkM2VjZDI5MGUwZTVlZTM2ZmQ0ZTUzYjdiZTYzM2E2Y2YwMjdhNWFjM2YwZjY3OWViMWJkZDIxMGEzOGVhNmU0OGIwNTU4ZTMwMzAxMGFmNDc0ZTdmNmRmMmE0ZTQ1NzY5OWZjMzhlMzY5MzhiMDVmZmNhYTFiNjk0ZTMyZjNkMWIyY2M1ZDAwY2YyNTZmMTIxODRjODczZTUxOTA4OWVjMWRmMTViMGRjNzZlN2JmZTkwNzgwZGY1ODEzNmZlNTk3ZmNlODk0Y2E1NjNlMDhlZmEwZjJkNGQyMDhiZWRlOWE4NzQ4ODI4NzNkMjUxYmFmMDE5ZmU0NmQxZDY1MDRiM2JjZDI0M2I3OTUzNTFmMzRkMmU3NjA2YWE5NzU1MjhlZTUwZDU5ZWZiNmVlNjk5MmE4OWIyNDI2OTU2YzJjYTQyNDdlMGRmMDEyOTg1Mjk4M2U5NzY3YThlZWQxYmM3MzM1ZmZjYThkMDI4OWYwNDgwN2Y2N2NhN2RhOTcxZjU4ZGI4YjliYzlmZGJlNGY4M2NmZTlhMDBmMWNhNTg0Nzk4YmM3MWQ4NTFmZjdjZDZjNTFiODk5MGFhYmE0ZDM4YjQxNmI5MjI0MGRmYjcwZWUzYzEyYjVlNzMxMDU3NzYyZWY5MDgyM2ZiZjY4M2NhMDZkMDVjMjBkM2FlMmI5N2E4M2ViZTcwYWUxN2FmZmY5ZDE2NjA5ZDU0NmQ4ZDNjNzRiYzI4MTg4NDg5NGYzZDQ5ZTA4M2YxMGFlN2MxMWMxZGNhMGVmZmVmY2ZhNmUwZjE1MzUwODFmYWMzYTI4MTlmZDJlMzI2NTUyNzE4MmFlOWQzOTFiMjMyYmI3NTQyZTY4NDU1Y2QyNjc3NjBkYjY1MmQxOWUyMmZiMmVkMTFjZDEzMDViYThkOThjMWViZjJkMTk2OWIyNGQ2NGYzZTMxOWFmNzRlMDkyMDA2ZDJhM2ZmNzQ0ODcyYTIwZWJmMThkMTc3NDhhYjcxMTA4MDUwOTZlYTEzNmJjZTJmOTY4YjIwNWU2NTBiODAzYzUzMWQwNjc3NWFlNWNlZWEyOGJiOTJlOWEwZWRlYzg5NTFjZTIwMDlhODhlZTFiNjRkOWI5ZTg5ZjY5MDUxMjAzMzg0MjEwYTEwMmE0NGQyZDY3MDMxNzNiNjg1MDdkY2VhZGQzYmY2NTEwZGYyYTVjZWZkOWM4MGU0ZjM4NWIyZjllNjIxNTgxM2VkMzIKK1NJRzogOWRhNjBjYzRhNjRkMDdkZWUxMzQ2YmQzZDMwMTA5OTVjZTI3MzgyMDhhYjM1YjM0YzJhOGZkMTc4N2FlM2ExZTIwN2ZlNzg0NTI1MTU0ZmFlNGY1Nzk0Y2Q4NTAzMDQ1ZmVhODVjZjc3ZmQ5MmY2YTcwY2QwYzVhNTJjMDgxMGUKKworVFNUOiA1MDgKK1NLOiAgMTEyNjQ5NmE1ODJjZTU4ZDNkNjE4ZGQ4YTM5MzM1NDdhYTdhOGEzMGZiNTQwNjNiOGRmZGQzMTY3MWM2YzczZAorUEs6ICBlMTAyMjljNjIzZmE4YWQ4OTgyYzNlNGMzNmZmNTJkZjBmMjE5YjU3OTE1YjZlOTgwZTVmZTcyZWEwOTYyZTIyCitNU0c6IDZhNGI1MmQ3MzBkZGFiODI5YjJhMTc5NTkwY2JkNGMzNzI0OThlOWY0Mzk5NzdjMGExMGRjMTNjMGFlMTczNmVhYWZmMDYzMzcxNDM0ZmQwZGE4MDM2MGVjNTg5MDYwN2QyZmFlMWM5YTJlMWFiMGI3ZjNkNjY3ZjViMWI5YzQxOGYxOGIxMGM5ZTZmZDY2OWQzZWJlYzE2OGVmZWY0NDE2M2U1NzdhMmViZDBmMmNiNzY4ZjgwYzIzMTg4ZTg2MDY5ZTRkMTBmNDEwMzA2Y2VkZDdhMzQxYTYxZTBmNGYzYmMyNTA0MWJjMmY5MjJlZDA3M2UxZTJmMWI3MDljNTc5ZDEwNjMwZjMzMDcxNzU0ZDcwNzg5NGExYzYyMTkwZGUxODg4MmM1NjRkYzRjMDFkYzU0NWRkODk2NjQwNGVkNzhmYTMyNjdhOTQ2OWY2M2I2MTIwYWJiNjVmOWIzYmEzZWVlMjhkNzljMmViNGU3MDIwY2M2OTg3ZGZjNWMyOTY3MmY4YzBmYTNlNjkwZDU4NGZlMDAwYzY0ZjM1MjYxMDE3OTYyMWJmZDVmZjNlYjMwZDE4ZjFhMDI1MDQxNmRiOTNiMWMxZTkzY2Y4YTM2NDY1MTc1NjBkMWNjOGZmZjgyMmI1MWVmMjdiMjAwZTk4N2I1OTIzOTA3NTM0NTNlZjEzOGJkM2QyOWRiN2NiMWI1ZjQ1ZTQ3OTViODljNTNmNDk3MDQxOTI3NTIyMzdjNmFiMjc0ODQ5Zjk1OTRlZTk3NzdmNmVmZTcwNDgzMTI5ZDA2N2Y5NzE5OWQ5YWUzNjA5MDcwMzg2NGY3Y2E0NzUwYTZmM2I2ZmY4MzgyNGM5MTA0ODQzOTRkMWUyZWNlYmExODQ0NmZlNGU5OTRjZTA3NDMzYTc0MGRkZDA1ZjBlMzk2ZDQ4Mjg5NGU2ZjE0YWNmN2I5N2JhZTZjN2ViODg3MDMwMzlmYTc4NWQ2MGEzYWY3OGIxMzI0M2E0Zjg4ZGRlMWQ5OTg2MTdmMmUzZmE3ZWFmYzJmNDM1ZGQ0YWMxZWE5YzIzODQwN2FhMDliNGVlYThlZDQzNDkyN2I0MDY2NzRhYzI3MDQ1OGNmYjNiZjI5YzM0N2Y5NDU1OTYxMzE3OWI5NTAyMTkyMzIxYjg4ZTlhZjBhOTBlOWE0YWI5ZWRkYWFlMzgyZTM3MzRkMTQxNWViZTMyNDk5YzM0ZTZmZGVhZjE1YjBkOTc4Nzk4NWUwOGRmZTQ5NTQ2MGM1NGY2NzQzZDgxZmYxNjg4MWU1ZTMwYzUxZjRiMDkyMzczNzgzZjEyNDIzYzNlMWFlODU5MTEzMGEyNjk5ODBjYWExY2I1YworU0lHOiBiMzBlYjU2Y2E5YjEyMGJmODQ5YTNhOWQ1NmFmMDMzZGU4YTU5MGM5ZTEyNDBjMWUzNmRiYzZjZjBhNzFiNzhhMTFlYzE0M2ZiOTk1OWE4ZjI1YjU3NzExZDZhOTBhNjdlMDFiZTNhNGRhMmI2OTM5NDg2OWJiOGQ2NGI4N2UwZgorCitUU1Q6IDUwOQorU0s6ICA5YzE2N2FmZjNiMWI3ODhmMTMzZDQyMmRlOGNhOWE2NDMxNjQwOWY5ZTM1YmZlMjIwMzJlYzQxN2FlOWFiYzZkCitQSzogIGVmYjUzNGYwZDQ3YzA2OGU3N2IyOGE5MDZkOTVhZDhkMjEzYTRkNGZjMWM3MDU0MmYwMWU1OTZkNTdiNWYwMTkKK01TRzogNjhhYzBmYzJiNjA3YmEzOGUzNzdmYWU4NDVjODA4YzhmOWZhNjE0ZWIxZjMxMTU4YTk2MjBhOTM3ZDNlMzAxZTg1YWNhYTY5MTQ0YmMzNDlhMzlkZmI1ODIwNDFjNGExOTdhZTk5YjRkNGQ1OWI3YTJjYTNkMTYyMjhiNTU5MWNiZjU3YzE4YTc4MWVmZDE5MTkzYzQ3YjE2YzYwMjNhM2E4YmEzZDY2OGYwNWEzN2YxZTgzYjBkN2ZlYmRkMTBmNjNlNDhlZjdhMjBlMDE1YjFjNjcyNWQ0YzMwMGE5ODZjNjBlM2ExMTU0NjljOGU1MmJhMDViNTFjMDVkMGFmNDBkODlmZDllZDc2ZjM2OTUwYWVlM2M3ODE5ODk4YTkwM2NmZTAzNjFhOTFjNjkxMDBiNDk1MTQxZTg2ZWU3OWQ2M2QxNzQwM2ZiMWExNjI5ZWY2M2NiN2U5ZDI3MjBjYmZmZjAwMDJiMTkwYmNkYzI2Nzk0MTI0ZGQzOGQ0MmJjYWE3MTc1NDA1ZWIwYmJjZjhlMzdkNjVkMDVhMzcxOTViNDc5MzcxZmEyYmJiYjE2N2Q5MWNlZTg4MjM1ZGQ3MmVhODhmYzczY2UzY2U0M2QzM2I3MTVmMjVmMTkyZWMyMTVkYWMxMjQ4OTljNWU3NTg2ZTg2MzQwZDhjYmU1MzczNWRlZmJlMDJlNGNjOWZkZTY5ZmI5Nzk0ZDFkYjcyYjk4YzBmMTk3NjZlZTUxMzhiYmZhNzg5MDlhYTI5OWI0OTEzYzQ5OWRlYWY1NGI0ODQxZDUwNDQ4Mjk5ODQ5MzY3MDBkY2Y5MmYzNjU0MmIyZmM3ZTg2NDQxYjk5MjVmNWQwYjc4YzE3YTg1Y2ZjZmNiMjBiMGZkNzUxMzQ5YzI3NDYzYWJkZTRkMjdkZjc0MjY1Mjg4NzEzZjk2ZGVhMDEzYjk0NTUyMTgwOGI0OTk2YjFiMmRjMDMzOGI2ZDIzNmVmZDZkMmIyN2RhZmRhNDZlYzVmYTMyYjk2NWU4YmI1ZThiYjYxYmQ5NjZlZGViNzc0NjgxZTBlYThjMTdiOGM5OWZhN2Q2NjBmMGY2NmM5YmM2ZDk1Y2JkN2RjMDk0NzI0MDk4ZWIwNTE5MWI1M2EzZGY2NTY2YjljOTBlMGQ3ZGZmMjk0Mzg0OGI2MWEyMGQ0OGMyMmI2ZDNjOTU4ZTI5M2Q3MDljOGY0ODExMDIzMGZmNTE5MTg1NjI4NzdkYWY2ZDkyMGM4NWE4MmUwN2M0NTFmZTdhZTk3NTljMGE3N2U5N2JiMjk4YjVkMDU5MmE0MWQwOGY2N2E0ZWQ1YTFiYjQxZTkzN2I2YTY4YWViMzhmZDViZTkKK1NJRzogYzlhZTY3ZmQ2NDE1ZGNiYWIyOTJmYWIzOTRjYTZjM2I3ZDkwY2EyNDRkYzZhNzc2NGU3NGZkMjAyYmY0YjI5MDViZDIwMzBlNmJlYjkxNGMzYzIzOGRiMzcxYjFjYmE2ZDkyNjFhYTM5MmVjODcxYTRiOGIxMmZlOWMxYzk3MGUKKworVFNUOiA1MTAKK1NLOiAgZTk5NDg4MDVlYjM0MWIyODY3NDc5YzY2OGZkMzUzMmMzMDk5NDFjMGFkNGNiMmU1NDIzMTc1NmU2YTFiZGVjYgorUEs6ICA1NDQ3YThlMzRkNmE2NDAwMDJkOGQ2MGJjZjFkZGM3MTFlNGM0NjVjOTRjMzRiNTBiZGVmMzU4OTYwZmY4MWYxCitNU0c6IDkxY2ZmZDdlYjFjZjZiZDQ3NTZiY2U2YTMwYWY5ZGZiYTI2ZGRkMWNjZTAzOTRjMTk0YTNlMzljYzNkMWNiYzIyMWI3ZWI3MGJlYTE4ZDI5YzI2NzQ1NzE3NmEzYzllNTNjMThlNDdkMTBhNjdjNDY0NTA1MTk3NzAyZTZiMjQ3MGQzODg2OWRiNTE3NGIxNThmOTk5MmU0NDM1ZDAyMjQ2ZjU0MDI1OGRlZGQzY2UzM2RmNTgyNTU1YTY4MWZiNzZlY2FjY2IxYzI5ODliMTc3ZTNiN2U0NTRhYWE1MjlkZTU5YmY1YTAzMTIzZDU3MWRmMmU3ZjdjYjgzMDgwNWM1OGI3NGE2NTNiYWMwZTVhODg4ZTA4ZGMyMjM2ZDZjZDQ5NmFhMDZkMGQ2N2NmM2IzMzVlMjE4YzQ5ZGVkYWQ4MmZjMWJlOWVmMjBjYWM2MTkwNWMzMGViMTMyZDczOWIxNmNhOGE4YzkwNjYxOWMwZTBkOGIzMzk4NTMyN2UzNmYzZDRiOGZkYTM4N2MxODZjYzUwNDQzMTA0ZGI3NjFmN2ZmOTMwMTI3MDIwNGE3MTNlNTg5MDIxMDFmYWQwMDBjZTkzMTY0N2M1NzdmZGVjMTQ4ZGNhOTVjZGMwODkxOGViZWQwMzdjNjAzMzJmYWRmMDg4ZjAzNjA4M2ViYzkyZTE3M2I3ZGRjYzMwYzQ5M2YyN2U2OWNkMTdhMjBkMzBiNzhmODNhNzJlNGY1YTc0N2Q4NmQ5NmM1ZTFiYjdhNDM4MTY2MjA0MDEzZTIxNjRkNmFhYmMwZDU2MmY1NDAxNWMzNjVjODA0NDU2MDcxNDVlNTY5MmVlMzRmNjM1MzA3N2ZhYjc0NTJkODhjZTNlYjAxZDJiMzc5N2RjOTFiMzQxYTNhNzI2MzAxNTE2YmFhZTE4ZTg1MWY3NGRmYmRmMDg2NmJiMjM3Njg2N2RlNTUyMzFlMzYyYzQ3MmM1MjExNjU0NGNkNGY4MWU5MzU3MWM0ZWM4MjBlN2U2NTNmNGUyMWJlMGE5NDI1NzZjOWRlOTFlN2QxMjUxNjgzZDg1OWRlNDQ4ZjgyMmRjZjNkMmNmNTVlZGUyZjljNzFiNjA2M2QxMzczMDYxZjhmNTkzNmI2OThkMTM4NGU2NTQ1OWVhMmJjMjZlYzk2Nzc1ZWY0MjUyMDc0MzJkZGEwYWMxZmUyODUyNmM1ZTQ1NTkzNDljM2Q4ZGY5OTE4MjMwZjQwNDQ2ODNjYzJjMWI4NThkMTQxYWI4ZDA4MDViYjkzMzYwNjc1MjJhYTg5YzgxMGYzZWFhN2FjMmQ4ZGQyOGMzNzUxMjI1YTE5ZWNlYzhiY2NhNTI0Mzk5NDYKK1NJRzogZDNkYzYyZDZjZTljNzY2ZjJhYmFmOWE3ZmJlMDlkNmJkYjA3YTQ3NDdiNTYwODBkYjA5YmViNGE0ZTgwNGE3MGQ3ZGRmNDExOTQ3NWM3YmU4MzRmMzE5NTZmNGE3MWRhZDAyOWNkZjIzNjNkZDAzNjVjZTIyZGMyN2YwNzgwMDMKKworVFNUOiA1MTEKK1NLOiAgYjAxNzUzZWZhNzNiYjNkZTdhYTc3OGJlN2FmY2JmZjY2YTVkM2UyYzJmOGI1YWEyYjA0ODg0NDA1MDk5Njk2NQorUEs6ICBkMGNjNmNmMTA5Yzk5OWZiZjZkMTZmNDcxZmFmZDAyMzJiMGE2OGQ0YzQ2NDA2ZWM3NTQ1ZGJhYmE4MTk0MTU4CitNU0c6IDY4NGU2MTJmMjdlZWFkMGQzNDg0NGNjODFiYTkxMWMyOGFhZjZkNjZlNzEyMjllOGNjMzQ2MmY3YzdhMDUwZGFhMzBjYjc0NDcxMTUwZjA3ZGFkNDU5YjVhOTEzNTg0NzZjMDU5ODI1NWQ4YTY0MmRkN2MwODAyODExYmQ4OGU0Y2FjNTk3ZWZlNDFlYmQ5NmNkMGYzYjVjZTcyZGI0YmUxYTNkYmQ2Yjg0ZjU0NDZlM2RhNjAwZDNiMWQyYjQ2MGEwMDliZDMxY2FjZDk4YTkxNTE4Y2UzM2U5YTcwM2Q0MDQyODg3MzZjY2M0MzEwM2ZjNjllNjc5NzRmMzE2NTJmYTNkYWRlZjMzMzdmNmM4OTdhM2QyMDEzMDNjOGYwMzU5N2I0YTg3Yzk4ZjI5MWNjZDU4YTNmMWU4OTgzMzJhYTU5OTNiNDdmY2I1ZGRhYTFjMDg2OGI2NDM3NDJkMGU0YTRiOWNkNDI3MDM4YjNiNzQ5OTliYzg5YWMzNDg0YzBjYTEzZjI1YWFlOGU3OGFlMWNjZWU2MjE4YWNjYWI4MWE0ZjY5NGY1MzI0YTM0NzYyOWQ0OWI1NWU0MDM3NTA0YTlhY2M4ZGY1OGM2ODQxZGRkY2Q0ZmM0MzQ3ZjdiNmYxZmQ5ZGUwNTY0NTc3ZTZmMzI5ZWQ5NTFhMGE2YjkxMjRmZjYzZTIyZWIzNmQzYTg4NjNiYzFiZjY5Y2VhMjRjNjA1OTY3ZTdkODk0ODk1M2YyN2Q1YzRjNzVmMDg0OWY4NzJhM2UzZDE2ZDQyMmZhNWExMWUxYjlhNzRkZjZmMzhiOTBmMjc3ZDgxZmNlODQzN2ExNGQ5OWQyYmVmMTg5ZDdjYWM4M2RkYzYxMzc3ZWQzNDhiM2M0ZmMwOWVjMmI5MDA1OTI1ZDA0YTcxZTI2ZDY0MTY2N2JkZjU0OTI5NDMzMWM2ZWEwMWNkNWMwYmQxYjZhN2VjZmRhMjBiMGYxOTI5NTgyYjc0Njk3Y2IyNjJjMzkyN2Q2YjIyM2Y0YjVmMzA0M2FhNmViNDU3MWE3OGU5ZGExMWMyYjM2ZjY0NTUyNTgwY2FhN2I1ZmE2YjkwZjkyOWUwMTYyZTYwOGQxMjQwZDcyNDJjZDJmNDcwMjVjMDNkZWJlMDU5YjFkYzk0NzcwMjMyYmM2NzY1MTQ4NDgwYmIxZDlmNTBkYTFlZTY0NDhjZjljODhiMTlkZDQ1OTkzMmMwNmVkODExYzRhNjRhMTJkNTkzOGJkMWM3NTdiY2ZhZWFlZTg5MzNmZTVmZmYyMTc2M2RlNzQwNDgyYmNmMWJhNTlhZmRjOGZjZjg3M2MzZDUwN2JiMzk0ZTMyZTQ1ZjczNjUxOQorU0lHOiAxNmI3NDIxMjI3YWUwOTEzMDY4NWNiYjFhMGM2MGFhNTdhNWUxYWZlMWJiZTZiYWNlYTBjMjgxYmNjODk5OGU2ODI0YTc3MmMzMjA4YTZiNmI0ZDIzNjY5NTUwNWM5YmU4MjcwMGNmOTNhNzgzOTg1YTM5ZTE2ZTM3N2E3NDEwZQorCitUU1Q6IDUxMgorU0s6ICA0ZjRiMjBkODk5MzY2ZjJmMjNlZTYyOGYyMjliMjM2Y2Y4MGY0M2JhMTgzMTc3Yzk3ZWUzNDgyOTU0NmYxNzQyCitQSzogIGM5NDU3NjY0MWY0YTg5M2NkZmNlZTdiMzlmYzIxOTI5Yjg2YjM0OTk3NmQ3YjBhNDZkMzlhNTg4YmNmZTQzNTcKK01TRzogZGI4ZWYwMmUzMDMzZTZiOTZhNTZjYWIwNTA4MmZiNDY5NWY0YTFjOTE2MjUwZGQ3NTE3M2Y0MzBhMTBjOTQ2ODgxNzcwOWQzNzYyMzM0NmFlODI0NWI0MmJkYTBkYTZiNjA0NjJjY2ZkZmM3NWE5YWI5OTRlNjZjOWFiOWZlY2RkODU5OTYxMDkxMGFmZmU0ZjEwMjE1Y2IyODBiZjhmOWYyNzAwYTQ0NDc5NmRhZTkzZTA2YzZiZWE3ZDhiNGZlMTMwMWJhYTc5Y2NlYzc2OTM2OGZlYjI0NDJjN2RlODRmMDk1ZTZiM2JmZjYzZDM4OGNiYWZiMmI5ODA5ZGMzOGU5YjEyZWJkMDM5YzBhNTdmNGQ1MjJlOTFlYzhkMWYyYjhkMjNhNGEwYWUwNTlhZjg1MzkzYmIwYTE1Zjc0OTExMGY2Nzc0YTFmZDczMWE2ZWMyMTNlNGZmNDM1ZGFhYjU0NmQzMWVkOWVjM2I2ZDhjYzJlZGFjZWJmNGZhY2M1NTY2NTU2ZWVhOTJlNWIzZjI1NDIyMzliMjVlMjgwMTJkZDRlZjQwMDcyZWViZjgzZWQyYTI1NTE4MWYzYTQ0MjE4OWQ2OGM2YzYwOWY0ZGZkZjNkYjdkNjdkMDg3YTJmY2Q2ZDJkYzUwYmJmZWQ4YmZiYmZjYjc0ZDNjNDFmMDJhODc4NjViMTNiOGVmY2Y1YzM1ODEyNTdiZTBhYTkxM2Y2MGMzNzA1MjdiZGUxMWE0NzVjMTM2YTE3YzVlZWZlYjAzZjViZmYyODY5M2VkODQxZThlZDFmN2MyOTEwMmY1NTk5ZGQ0NDQwMDliY2VhNmE5MmQ1NTc0MTUyNDU4ZTBjYWY4YTM2YWE3MmI1ZGM0OTA4YTY0NjFjOWI3NDE0NTMwMDVjOGZiY2M2ODExM2FlMTg0MjA4ZWUxNGI4MzU0ODBjNmVmYWZlZDE4YTc2MDAwYjM4ZTU4NTgyOTBmNGQ1MWY1MmYwOTZjYmU0OTBlMWViNWNhY2IyMjZlYzQ5NWE1NWE3ZmE0NTc4NDNkNTdmYWI2N2Y4YmU3ZTIwOTMzNDc4NWJkZDY2NWQ3YjYzZTRkYWY1N2I2ZTc4OTI4YjYwM2M4YzBmOWJjODU0NjQ3MzNiNjEyNzNlZjllMmI4YTBjZDdjM2JmOGVlMGE2ODcyZTM0ZDVhMjdhNjI1ZTM1ZWFmN2ZmNTQ0MGI4YjE0MWFmNzA0ZGY3MGM5YzE4NjIzYmQxMTIwOTUxMzE5MjUwNTEwNWNkN2JjZmE1ZjBkOTE5ZGE3MDY5NDhmYmUxZjc2MWYzMTU4NDZhYTNiNDgxM2RkOWJhM2Q4MWI5MjA0ZTU0MDljMDM4MmI2ZWIKK1NJRzogMGY4MGZmNWQxNzQ4OGZlMjZmOTNjNTQzYjA0ZWQ5NTliNWYwNjQzZmM2MWM3ZjJjM2JjNjAxMzJiYTljNjIxMGM4YjI1MGVhNWU4NGQwN2IwMWRlNjhiYzE3NDQxNGVlZWIzMWZkYzJiYTY4MjNlMjMxZTMxMmE5MWVkZWRkMDIKKworVFNUOiA1MTMKK1NLOiAgZDJlMDFkMjU3OGI2MjVhNzA2MGFhYmMyNTc2NWYxNjhjNjgwY2VmNzY3YWE5N2NhMGU1ZWIzZDY2NzQ3NGIyYQorUEs6ICAxOTFhYzIyMzU3NTQyNGFhMzU0YjI1NWI4MTJkZDMwMjVkNzBlZDgyOWUwODI2YzAxNjI5ZjlkZjM1NDUwODJiCitNU0c6IDIwZDVkZDY5OWIyODUzMzAyYTY4MTcwOTRkNWVhNTEyYmRmODUzNDUwNGNiMjg5YzYwMjQ2NzQxMDc0MGVjN2ViOGVhNjQ0MmM4MGYxNDU5MzUwNjhmOTEyMmZkZjRhMzlmMjAxMGYzM2RiNTViODE0ZDk3YmYyZTU4NzIzMjlmMTEyNmQ0ZWI5NWI4MDZjYTE5NzMxMTMxNjViMTE2YmU4NzE2MzcxZjgxMzMxNzc5ZGM3OWE1Y2IzOTQyMDgxYWI1ZjIwN2Y2YjUzZGIwZTAwMzgxMDdkNjNjYTk3NzA4MTgxOTgyZGNiNWYzYjkzMDEwZWM2ZWRmYjJjZmQzMWNhYjAwMDkwYjNjMzg1MTVmOTc4MTc2OTY4NmNiMTdhYjgxZDU0YThiNzc1NzU0ZDQyZmJhZDA4NmI4MGIyOGQ2MzZmNzhiN2ViNzdlZDljYTM1YjY4NDNhNTEwZjBhZDBhYzFiMjAyNjdhMDAwMzAxYjNjNzA3YTIwZjAyMTRkNTliNWI4MTk5YzJmOWVlMjVkMzIwNjBhY2UzZTBmMjU5NDY1MDQxNmEwMDcxNmNkM2Y5ODYwNGE1ZTEwNGIzMzMxMGZkYWU5NGMzMTQwMTNjZGNhNWJhMjQxNDQwOWViN2YxOTAxMzk0ZjAwN2Q2ZmEwYTI5ZGJlOGVjM2RmOThjMzkzYzhkNzI2OTU4NzdjYzliYWY0OTFlZjMwZWY3ZGIzMzcxNjA4Y2E5N2NjNjIxNTYyNTIwZWU1ODFkNWQxY2RiYzc4MjMyZDZjN2U0MzkzN2IyY2M4NTQ5ZTZmMWUwOGRmNWYyZWFjODQ0ZmUwZjgyMmIyNDgzYWQwYTVkZTMzYmU2NDA4OTQ5MGU3N2Q2OTgwMGZhZTI1ODllZTU4NzEyYWMxNWEzZjE5ZTZmZmRiY2E0MmZlMTg5NGU4ODliOTRjMDRiMDQyNDBkYWZiMGIyNzMwYzIzNmI4Y2NlYjJjYjk3YWZkMWQ1MTVkYzE5ZDEwNjdmZDRhYmE4Y2UyOTdmZDZkMTEwYjM1YTIxYmQzYzA3NWM1NzdkOTNmZTFkZjc3ZDY0OGY3MTE5NDkyMDk5YjAxN2FmNDRlYmEwOWM4MDdmMTFhNGMzZjRhMTFhMmZmZjMwNmE3MjhiYTc4OTgzMzIzYzkyYTJmZDVmY2M4MGMxOGQ0MjM0MjZmODIzYTczZmUwNDA5NDk1NTI4NDI5M2Y1ZjZiM2NhNGZmMTA4MGRiYjFlNGM2Zjc0YzFkOTM1ZWQyMWUzMDA5NGM3ZGUzMzZiODJkZDgyMDBiMGQ2NTk1ODNjNWJmZDU0NzBmOWRiMzQyZTcwZWM0MDAwNzQyYzU2NDBhMjE0ZTNjMmUKK1NJRzogODdhMDEwMzk0YTlmMmM5MDRlZmZlZmNhOWZiNGQ1Y2UxMzc5MzMwMWE0OTI1YmE1MWRiMTE5MTIzYTRkNzMwYWJmNzY0Y2UwNjVlNDhkOTBhNzlkOTA3ZDcyNTRjNDBjYzM1ODk4N2E0Njk0OWU5MjhiYmIzY2QwODVkZmFiMDYKKworVFNUOiA1MTQKK1NLOiAgN2NkN2VjOTlkZDAzYWVkZTFmZjEwNzNlYzJjYTcwMTAyNzZlOTQ3ZTJhYTliMGU2NWY4NzdlNGNjZjFiM2ExNAorUEs6ICBlNGMzOWRiZTk0OTMxNzZiODIxM2YxNDIyYTlkZTdjNzRmYjZhNTkxOTBmY2RiZjYzN2M3YWQ1ZWUxNjVjMDRmCitNU0c6IGE2MDM0YWEzYzI0ODQ5MjNlODBlOTBlNWE4ZTE3NDgzNTBiNGYyYzNjODMxOWZhZjFhMmUzMjk1MTUwYTY4ZTFlZWNhMWJjODQ5NTRjYzg5ZDQ3MzFhN2Y2NTEyYWYwMTQ2NGZkYmNlNWRmNjhlZTgwNjZhZDlhMmZkMjFjMDgzNWE3NjU1OWNhMWM3NDQ5YTkzM2JjYjE1YWY5MDIyM2Q5MjVmZjYxY2Q4M2ViOTM1Njk4MzQ3YTU3MDcyNzA5YTg2YjRlNWE3YTYyNmUwN2EzZjJlN2UzNDFjNzc4M2E1NDBmODRhYTczZTkxN2U4NjdiYjgwYmFjZTYyNTQ3MDVhOWQxYTExODVkZTU2ZTFhNGU3OGFhZjUzOWU3NDliOGY3NjViZDA1MmM0Y2QxNWI2MzhiZjhlY2Y4N2Q5ODE0NjA2ZmVkNWE2OWY0ZGFlOWRhNDdmMzgwNmRkOTBiZTY0ZmNjZDMzNjVjYmU5ZTAxYzU4OGZlNjVkNmI2MDMyODA3NDA5NjJhYThkZGI5NWEzZjRmNjc0YzAzYmM0MDQzMDkyYzU0NDU5NTU2ODI3MGEyYzJhOGFhMDZlM2Y2N2MzMTk5OGM1MGI5YTU4YWNhZDAwNjkwZDM4NDgxMTRjYjE5MzI5M2M4YWMyMTAxNmZkOTk2ZjVjNjQyMTQwNjRmODIxNjdiMmM5MjBjZDhhODM5NzU1ODUyYWM3N2MzZDkwNTI2ZGQzYWRiOTY4MzdjZjRlNzI2ZjM0YmQwMjk1NWNiYWM1YjgyYzkyY2Y0YWE4YjU0YmI2ZTQzNmRhZTliZjg5M2VmMDUwYzZmMTM1YTdlNjJmY2Q4MzRkYWMxZDJiZThiOGU1OWQ2OTYxMzE4MTE3MDFjNDMxOGJiNmU5YjVhMjBiZWM2NTZmZDJiYTE5MmUyNzMyZjQyMjk2M2JlZDRhNGZkMWVjOTMyNjM5OGRjZTI5MGUwODQ4YzcwZWEyMzZjMDRjN2RiYjNiNjc5MjE0NDBjOThkNzI3NTNmNmEzMzJlYWFkNTlmZDBmNTc3NDI5MjNmYjYyNWZlZjA3MGYzNDIyNWVhMDZjMjM2M2QxMjM2NjZiOTlhYzdkNWU1NTBkYTFlNDA0ZTUyNmI1YjIyOWNiMTMwYjg0YjE5MDNlNDMxY2RiMTViMzM3NzBmNTgxMWQ0OWZiZDUwZDYwYTM0NzRjMGMzNWZjMDIxZDg2ODE4MTllYzc5NGNjMzJhNjM0YmM0NmE5NTVhYTAyNDZiNGZmMTEyNDYyM2NiYWZiM2NiOWQzYjkyYTkwZmRlNjQ4ZTQxNDYzNjE5Mjk1MmE5MjI5MWU1Zjg2ZWZkZGI4OWNhMDc4YWVhNzcxN2ZjNworU0lHOiA2Zjk5MjAyNzcwOTY0NTM1ZTQ4M2EwZWUwMWE1Mjk0NDJlYjMyMTMwM2ZhODA1ZDQ3NTYwNGQ3ZmM3MjhhOTEwM2ZiN2I1NThiOTU1ZjRkMDM3MTllZWZhYTNiN2VkNWIwZGE3NTcxMGJiOTg3ODdmNWMyMjgyZWQ2NmU5ZjYwYworCitUU1Q6IDUxNQorU0s6ICBlM2NhMzcxM2EyZmQ0MTJhZDUzMzZiYzM1NmI3N2JlMDI3ZDViNzA4MTViM2FjMmFlY2Q4MzQwZWY1Zjg4OWIxCitQSzogIDFkNTE2Y2I4YmVmMTE2YTBjMWI2OTI5MDA5OTMzZjZlYjYyYzIzMDUwNzQ1ZmU3ZThkM2M2MzE2MjM3NzgxMTEKK01TRzogZGQ5OWJhZjI5NWUwMTNlZWQxMDdiYThhZjgxMTIxYWFmMTgzNWEzY2NhMjRmOGU0NjRiNGNmY2FhM2M3YmZmZTZmOTUzNjAxNmQxYzhjZjM3NTAzOGM5MzI3ZThlMjFiMDA0MDY2ZjVlYWMwZjc2YTNlOGVkZmIwN2JlOGJkMmY2YmM3OWMzYjQ1NmRlODI1OTVlMmMyMTA1YmIxYjBhYWJhNWVlZWUxYWRlZjc1MjE2N2Q2MzNiMzIyZWJmOGY3Y2Q1ZmJmNTk1MDhmZGJkYmVjZjI1ZTY1N2E5YzcwNTBhZjI2YTgwYTA4NWIwODE3YzYyMTdlMzlhY2Q1NGNiOWZhMDk1NDBmYzdiZGM1MjI2ZDZhMjc2ZDQ5MmNjOGEzZGZmYzJhYmM2ZDBiOWZiMDhjYmNjZGQ5NDMyZTQ0OTgyMWE1ZGM5OGNmYjNhNDE4ZTUzOWM4OTBmZTVhMDQ0NmI5ZjgxZDMwNjcwMDkyN2FkZTYxY2ZkY2MwNjI0ZjEzYjU4NDA3NDg3NzQ2MDQ4MDU3MzFkOTJlNzdkNWRlZjY2YmU0NGNjODE3OTQ2ZjFjZDc1ODE5NmNmNDgwZjk5ZTcxMTc4MzVjNGM4N2NiZDY0MDc3YTU2MmE4MGNmMTFkOGNhNjViZTdhOTRkOTJiOWRkYWVhOTk3ZTkzZjE0NDg1NzdlZDZkODQzNmIyZjMxNDQ2OTJjMWZkN2QyOGEwM2U5Mjc0YmM5ZTg2NjlkODU3NWY1ZGUyMGNmYmRiY2IwNGU5ZjM5ZjM0NTFkNzA0ODM3NWUyNjk4ZTcyMjg0NmNiNGYyZDE5YTgxMGM1M2Q0YzFhNmMzYjc3MGZiNDAyZGYwNTMwZTdiMjkwNzIyM2ZkMDg5OWUwMGNiMTg4Y2E4MGMxNTMxYjRlMzdmYmExNzZjMTdhMmI4ZjVhM2RkYzdhOTE4OGQ0OGZmYzJiMjcyYzNkYTljOWI4OWRmZTUzZjJmZTdlMzY3MmY5MWQxMTgxODQ5MWFjZTE0MGFkY2FlOTg1MDJlMTE0ZjRiMzUyYjkwZTJlN2ZiZDMzM2IyNDU5ZTdmMTVkZDA3NjRjOWMzNGU0Y2I3Y2MwOTU1MDBjZGEwMzVlOGUyZTRlM2M4ZmQ1ZGY1ZjNhYTU3OWE3MzVkZDhhOWYxOWVmMzM2ZmE5NzExMTRlNDY2MTg3MzRhNGMxM2QzMGM4MTEyOGNhMjFkZWY0NzMzMDEwM2QyM2Q4MGZmZTY3NDIxYTZjY2Y5ZjM2YTkzZjA1NjAzYzU5OWVlMTBiMDM0NTFmMzZiMjEzM2MxODdhNzlhZDllNmZkZmJiMTI1OTVhYjczYmIzZTJlMmU0MzAzMGZkMzdlNTkxY2Y1NWQKK1NJRzogYjM4NTdlYTYxYmFhOWU2MjgzOGM0ZTNhOTk2NTAyZDMzNjRmZTFlYzU5NDI1ODM1NTA3M2RkMTBlNDk3YzYwMGJlZmIxZjhmMjMzZmQ2ZTNiMmM4N2YxMGRjYjcyNjFhYWYzNDgxYmZkMDkwMjYwNWFjY2M5MDBmZWY4NGQ0MDcKKworVFNUOiA1MTYKK1NLOiAgMjlhNjNkY2Q0OGEzNTE3NzE0MTFmZGRjYWI0NmJiMDcxZTkxNDk4NTc2ZThkMDJmOGI2MDQ0ZjViZGQzZWQ5MAorUEs6ICAzOTIzZmRjYzJhOWZlNWNhYmY2ZTk5MzJlNDZkYmQyYjdmMzYzMjUwMGY5ZDk1NTUyZGIyYjA0NWJjNDExNjZmCitNU0c6IGZmMThjYTBjMjA0YzgzODZhNGFhNzRlYzQ1NzNjN2I2OTIxNmIzMTQ3MGRhZWRkOTZhNGYyMzAyMTE2Yzc5NTVkNzJkYWNjODhlMzcxNDU1MGMwOWU2ZjdiOWE4NTg2MjYwZGM3ZTYzZGE0YzYzM2JhZTAxNjJlMTE2ZTVjMTc5N2I3OGQ4N2Q0N2ZmZWVhM2Q3ODE5ZGY5Yzg1MmYwZmYzMDkzNmExMDVkM2FmNTUzMWE4Zjg5NTQ5NzExYzE0YzJkM2VlMTE1NjRlN2M4NTI1YmQ1ODg2NDAwOTc2MmEwNTU0MWQ4ZTA3YWQ4NDFhNTVhNmE5YTAwN2VmMjA5Y2NlYzRiNTY0MGJhYmUzNTY1MWI2MWRmNDJkZTRkOTEwZWU3M2E5MzNjMGI3NGU5OTU3NTdlODRhOTllYjAzNGY0MTgwNzE4M2M5MGNhNGVhOGQ4NGNkYmE0Nzg2MTNjOGU1ODdjYjVmOGZiNmEwNTUwODFkYTZlOTAyMjBkNWQ4NmUzNGU1ZjkxZTQ4OGJkMTJjN2ExYTZiM2M5ZmNlNTMwNWU4NTM0NjY1OGVmZmE4MTBkMGU4YTJhMDM5ZGI0YTRjOTQ5NjViZTQwMTFmOWQ1ZTVkYTI2NjIzM2U2YzRlMThlZDRmOGEyNWE1N2U0MGE1OTFjN2VkNTkwYzBmOGIxYTExOWM3Yzk3NDdmNjkxYjAyMTk2Y2QxOGU2OTQ1MjEzZjFkNGM4Yzk1NzljNmUwYTJhYzQ1OTI0MTI4ZDZkOTJjOGU0YzY2MDY1MzIwMzUzZDQ4ZDFkNWUxMzE5NGQ5MDVmODM3MDc4ZjhkYWMwYjY4Y2Y5NmFlOWU3MDU1NGMxNGIyZmEyOWIxOTYzMGU0YjBmNWQyYTc2N2UxOTBlZmJjNTk5MmM3MDlkY2M5OWFhMGI1YWFmNGM0OWQ1NTEzZTE3NGZkNjA0MjM2YjA1YjQ4ZmNmYjU1YzlhZjEwNTk2OTI3YmNmYWQzMGJhY2M5OWIyZTAyNjFmOTdjZjI5N2MxNzdmMTkyOWRhMWY2OGRiOWY5OWFjNjJmZjJkZTNiYjQwYjE4NmFhN2U4YzVkNjEyMzk4MGQ3NTk5MjdhM2EwN2FhMjA4YmVlYjczNjc5NWFlNWI4NDlkNWRhZTVlMzU3MzcxMGFhYTI0ZTk2ZDU3OTFlMjczMGQwMjcwZjViMGEyNzA1YmE1MTVkMTRhYTdlNmZhNjYyMjM3NTM3N2Y5YWJhNjRkMDI1NjlhMjA5ZDMzZGU2ODZlMDg5ZWM2MDExOGU0ODE0ZmZjNmMwNzc4YzY0MjdiY2UyYjZiODQ0Y2ZjZDVhN2NlZDBlMzUzMDNmNTBhMGRmZTVkZjVkZGUxYTJmMjMKK1NJRzogMTJiZjYyOTU5M2UyY2FhZGM5MTBlYzQwYmZlMmI3YTYyNTE0MTI2YjE2YmEzYTQzOGQ4OGUyZDIxZjU5NWFhZWU4YWJmYTRhZjJlYzg3MDM2MWQwZWEwNGRmYzhjNmEzMzBmYjI4NDFjMmQ4MjExYTY0ZmExZTdlN2QyNzM4MDAKKworVFNUOiA1MTcKK1NLOiAgYzcxODhmZGQ4MGY0Y2QzMTgzOWVjOTU4NjcxZTZkZDA4YjIxZjlkNzUyOGM5MTU5MTQzNzM0Zjk0YjE2OTg4MworUEs6ICAwMTk3NTJmZjgyOWI2ODU5YjkwNThkMDBjMjc5NWU4MzU2NTU0NDA2NzU3NTNmMzdlODVlYjdiYzU4MzljNGNhCitNU0c6IDRhZjVkZmUzZmVhYWJlN2Y4ZmNkMzgzMDhlMGJkMzg1Y2FkMzgxMWNiZGM3OWM5NDRlYmZlM2NkNjc1Y2YzYWZiZWY0NTQyZjU0Mjk3NWMyZTJhNmU2NmUyNmIzMmFjM2Q3ZTE5ZWY3NGMzOWZhMmE2MWM1Njg0MWMyZDgyMTJlMmJkN2ZiNDljZmIyNWNjMzYwOWE2OTNhNmYyYjlkNGUyMmUyMDk5ZjgwYjc3N2QzZDA1ZjMzYmE3ZGIzYzVhYjU1NzY2Y2ViMWExMzIyYWY3MjZjNTY1NTE2Y2U1NjYzMjliOThmYzVkYzRjYmQ5M2NlZmI2Mjc2ODhjOTc3YWY5MzY3YjVjNjk2NTllNDNjYjdlZTc1NDcxMWQ2NjVjMDAzMmFlMjI5MzRmNDRjNzFkMzExNzhlZjNkOTgxMDkxMjg3NGI2MmZhNWU0MDIwZTZkNWQ2NDU4MTgzNzMyYzE5ZTJlODk2ODVlMDQ2NGU5MWE5YjFjOGQ1MjUxZTI0ZTVmOTE4MTNmNTAxOWE3NDBhMDRiNWQ5MWNiYjgzMDllNTE2MWJiYTc5ZGNhYjM4MjM5YTA5MWY1MGUwOTlmZjgxOWUzYTdiNTIwNWZlOTA3Y2RmZTljMGRjM2VlODVlMzJkN2JjZDNjZTAyNjM1ZTIwNTgzODgwMzFlMzE3ZmJmMjJhYjlmMzlmN2Y3ZTNjZDFhMTFhOWMxZjQ1ZjRlMWU0MmQyNTM2YzEyMmM1OTE4Mzc5MTE4NDcxMDhjZWFmZDk5MDgxM2MyYjYzNDRjZmZjMzRiZTM3MTYxZGQ4MTU2MjY5MDBlOGZjYjg1YzIxYWZiNGY2YmU4YWQwMTUxNmEzMWMyYTY1ODAzMTU4NTdjNmEyMTY3MzVjYTk5MTAwOWRiYzJlYTUwMzQxNjA3NDdhODY5ZDVjYWRiMGI0N2ZmYmQ1ZDNhYzk3ZmRkMDUyNmNhZTZlYWEzNWNmZjdhMTZlYWY0ZmI5NTBjYTMxNTExMzQ2ZmVhNjE0MTk5OWEzZjc1NGU2MjgxY2ZiYTE1ZThhODI2OTMyYzU4OWM1ZDI0N2M5MDlkOTRiNGVhYjdlYmNiMDkwNzc2NDhhZjA2NWMyZDg2NjExZWI1ODg0NTNlZDdjMjQ3ODBkNzNjNjg5Yzg3NDRhZmQ1MzNhODZkOWVlOWUzMzY1NzMyY2JkMGMzNTFlNDM2Zjg5OGI3MDQzMjkyMDk3ZTAzZTYwODFhMjNhYzg2NWUxOWRjODg1ODk2OWI5OTlkMDFmYTY1ZWYyMDBjM2YyNjljODE4ZTMwYjkzNjVlY2M2ODNiY2ZlNjljMjAzYjRlMGFiNmZlMGJiODcxZThlY2FhYWU4MmQzYWNkMzVkNWI1MAorU0lHOiAzNWMxNzBkZDBjNmRjMjkyMGE1OTU3NzVkOGUyZGQ2NTI0M2U5YzFiZjk2ZWY0Mjc3OTAwMWVkNDVmMDFiN2RmZWJkNmY2YTdkYzJkMzg2ZWY0ZDJhNTY3NzllYmU3N2Y1NGU1YWVjZmRhMmQ1NGEwNjg0NzZiMjRkYmQ3OGIwYworCitUU1Q6IDUxOAorU0s6ICAzOGJhMDYyMTcwNGQyMTU1ZmMyZjc4NTU1MTk2NTc1ZGUwNmQ4MDI1NWMzNWU5ZGM5NjViNmZlOTZhNGQ1Mzg5CitQSzogIDQzODhmN2Y2OGE5ZWZmYmMzNjZlNDJkOTA3MDE1NjA0ZGFjZWQxNzI3Y2QxZDg5ZDc0YWRjYzc4OWZkN2U2ZTEKK01TRzogZWQ0YzI2ODNkNjQ0YjA1YjM5YjA0OGVmMWY4YjcwMjVmMjgwY2E3ZThmZjcyY2I3ZWRhOTkzMjlmYjc5NTRiNzAwNDAwNzA1Mjc1ZjIwYjg1OGNmN2UzNDlhMzUxMDY2NWI2MzA2MDljNWUyZTYyMDY5MjYzYWI5YzU1ZTQxMjNhNTY0ZGNhNjM0OGM4YTAxMzMyMDc1ZTdhNWJlYzljMjBhMDM4MDc5NTdmZWZhOTEwZTYwYzM1YWU1Nzk3NzhjZTJjZTQyZTZhNjlhMWI2NDc2ODFlNDNlYzRiNjNiZDVmYmVmYWJiMzE3MTJjYjNkNjQxOWVhZDc4ZGQ0MWM4YTkyYWFjZWI2M2NiZmE4OWQyYWYzOTYwNmRlMDEwYTM5N2UzMDIwNTNhNjE1YzE2ZTVlOTVhZDk5MzVjMDc5YTBiODEwMzEyNTc4OTQ3MWExZTM1NzRmNDI5YjI5ZTRkMjI1Yzc3MjNmYmIzY2Y4OGNiZDczODIzZDlmMGI2YzdkMDVkMDBiZGViMGZiMGFkM2Q3MTMyMDMzMTgzZTIxZjZjMWU4ZDhlNGMwYTNlNGY1MmY1MDAxZGE2ODcxNzEzNDVjNmRjOGI0MmM0MmE2MGQxZjFmZmE4ZmUzZTdiY2VjZTU5YTAzNTg3OGY5ZDRkODExMjdlMjI0OTZhNDliZmNmNmJmOGI0NmE4MGJkNTYyZTY1MjU1MDcxZjlkMTFhOWViMDQ4MWY0NjI2ZDRkNzFmZmMzOGFmZTZlMzU4YTRiMjg5MTc5Y2JjZTk3NjRkODZiNTdhYzBhMGM4MjdlOGZmMDc4ODEzMzA2YTFkNWZhZGQzMmI0NmExZmJjZDc4OWZmODc1NDA2M2VlY2ZlNDUzMTNiZWI2NjAxYzNhMzAxMGU4ZWI5N2M4ZWZmYmQxNDBmMWU2ODgzMTEwOTJkMjczYzRkZWZjYTQ3ZGE2ZjFmMDgyNTc0NDY3NmY5YTI4MGI2YzJhODE0ZmE0N2ZhYmMxOTgwZDBiMzdmMDg3YTUzY2E4Nzc4ZjM5ZmZiNDc0ZmY1ZjExNzFiNDQyYzc2ZGQwMDhkOTIxODJmNjQ0YTcxNGEwZjAxMWUyMTVhNzhiOTdhZjM3YjMzNTIwZWJmNDMzNzJhNWFiMGNmNzBkY2MxZGMyZjk5ZDllNDQzNjY1OGY4ZTA3Y2RmMGI5ZWE0ZGQ2MjI0YzIwOWU3NTIxYjk4MWVlMzUxYzNjMmRmM2E1MDA0MDUyN2ZjZDcyODA0MTc2MDQ2NDA1ZGI3ZjY3MzRlODVjNWQzOTBmNTIwYjBjMDhkY2JmYTk4Yjg3NDI0ODBkNWU0NmY5YmU4OTNmNmQ2NjE0MzQwZjgxNjE2MTFkNTA1M2RmNDFjZTQKK1NJRzogNDJiZWQ2YTk4Nzg2ZjY2NDcxNWYzOWJiNjQzYzQwNWFlMTc1MDA1NjQ2MGU3MDA0NjljODEwMzg5NTA0YzUxY2ZmZDllMWE5NGMzOGY2OTJmYjMxNjI2NTMxNmQ4ZjRkYzNhZDFjZGQ4YTZkNTk5MWVmMDEwY2QxNDg5ZDdjMDkKKworVFNUOiA1MTkKK1NLOiAgYWUzMzFmYzJhMTQ3NTliNzNmMWNkOTY1ZTQ4NTE0ZTEyYjI5ZjYzYjA2Y2NmYzBhZDQ5ZjM2ODIwZTU3ZWM3MgorUEs6ICAwODgwM2Q0ODIzOGVkYTNmOWNlYmI2Mjg1MzAxMjFkZTAwZjBmMDQ2OGMyMDJkODg1MjhiOGJjZWM2ODdhOTAzCitNU0c6IDU3MTYwMDMzOTBlNGY1MjE2NTk4YTAzZDdjNDMwZGJmNDk1ZWUzYTc1NTdiNTgwNjMyYmE1OWYxNTE5OGI2MTgwYTQyNDY5YzIzN2RiNWJjODFmMjljZmFhYjBhZmYzYzk5NjYzMDlhYjA2OTU4YzlkNzEyNmFkZDc4ZTNiMzI0NTlmZjhhMGUwYmRlZjg3NGI1OGU2MDgzNjY4ZjM4YWQ3ZDYzYWFlMWYxMmUyNmE2MTMzNDhmOWYwM2VhNWQyMDVmMDQ1ZDc4Y2M4OTAyZDQ3ZjgxZThiNTIyOTNlNzBlODZjOTgwM2Q0ZGFjZWE4NmMzYjY3NDU4YWUzNTc5YmMxMTExM2I1NDkwYmNmM2UxY2Q0ZTc5NzljMjY0ZDgzNTE2MWZkNTVlZmU5NTNiNGMyNjM5NWRkOTJjYTQ5MzA5MjBlOTA0ZmFkYzA4ODliYjc4MjJiMWRmYzQ0NTI2MDQ4NDBkZjAyNGRiMDgyMWQyZDVlOTY3ODVhNWMzN2RiZmQyYzM3NTk4MzI4M2U5YjViNDNhMzIwN2E2YTliODMzOTQ4MzI5ZDVkZTQxZTQ1MDA4YmNiYWQ0OTNkZTU3NTRkZDgzZGVjYzQ0MGU1MTY2ZWRhYWUwMjA4ZjAwMGM1ZjZkOWMzNzIxNTMyMDllNWI3NTc4MTE2Zjg5Y2YyZjhiMTAwNGQxMzA3ZWE3OWVkMzc0ODBmMzE5NGE3ZTE3OTgzYTIzMDQ2NWNjYzMwZmNjMWE2MmQyODBmYmJhY2NmMDA2ZGM0ZGVlMGVhNzk2YjgxYWNjYzYxYTA2M2UyYzA4M2RhZWMwMzliZDlhNjRhNzcwMjRhZjgyZWMxYjA4OThhMzE1NDMyOWZkZjYxNjczYzM2ZTRjYzgxZjdhNDEyNmU1NjI5MGU0YjQ1NjgxOWJkZWJmNDhjYjVhNDA5NTViYWIyOTdjMmJiY2IwMThhZGJmMjQ4Mjg2NjBhNWQxMmEwNjEzYmYzY2NiNWVlYjlhMTdmYjBhMDU0N2RiOGRhMjRkMmVmYjg3YmExYjg0MzE0MmE3NWU0Y2EwYjBhMzMzZTRhMTRmYWIzNWE2MjY2OTMyOWNhODc1M2YwMTZhYzcwY2Q5OTdlOGJjMTllZTQ0OGFlYWYwZjRiZjNjZTUyMzA1NTA1NzhhYjY0YzE5MDE5NDQ2Y2UyZDljMDFhMDNkODg5YTk5MDk4NjBhZWY3NmYwNjdjNTBiNjFjM2QwZjEyY2M4Njg2ZjVjMzFiZjAzMmE4NDEwMTVjZmVmZjFjZmRhZTk0ZjZiMjFkYWU5NDFiMzM1ZGM4MjFmMzI4NGNlMzE1MDhmNWRiNWM0NDhmZmFhMzc3M2U5YmUxYTRjODVhMWM1OGIwMDlmYTMKK1NJRzogNzVmNzM5MDg4ODc3ZTA2ZGM1NmRhZWM4ZjFlNGQyMTFiNzU0ZTNjM2VkYmZhN2VkYTQ0NGYxOGM0OWI2OWM1YTE0MmRiNDVhMGE3NjUwZTQ3ZDEwNTUwYmE2ODFmZjQ1ZGQ0NDYzYzRhYzQ4YmY0NGI3MzAzNGJkNTY1OTIyMGUKKworVFNUOiA1MjAKK1NLOiAgODI0MzVmMzk3OTAxMDZiM2FmNzJmOTFmMTRjOTI4ZDI0NjVmOThjZGQxMDA4NGM0YTQ0ZDE5YWY3MWExOTI3YworUEs6ICBjNTJhOTI2NDZmNWFkYjIxYzZkZGUwZGU1ODc4NjgzN2Y4YTM0MTRjMDlhZWRmYzI3YzgxMjIxOGE3ZTcyMzllCitNU0c6IGYzZDZjNDZhYzUyNDhkNTM4NmI2YjY4NDYyNTk3ZDY0NzAzOWY1NDRiYjAxYWMyZDEwNjdkYWFhYTM5N2QyZGJhZjEyNWExY2Y4ZmRmMjgwYTZhZmVjMzI0ZDUzMTFmNTQzNjg4YTE1NmM4NDk4MTliYjA0NmI5MTFjNDJlYTNjYTAxYjk5ODA4YzRkMWYzYjhiMTVkYTNlZmUyZjMyNTIzZWMzYjA5Yzg0YjQ4Y2ZmZDEzYzE3YzllMjZjOTEyZDljM2U5MzQ2ZGZhZTNmZDBjNTZjODg1ODc4MDc4MmY2MWE0YzRkYmZmZjFlOWNiNGIzNjJjZDgwMDFmOWNkZmViMWE3MjA4MmRjZTljOWFkZTUyZWZmYzk3NDQ2ODhhYzBiODZjODgyNjZiNTNkODk1YzE3ZWFkOWU4OWVkOGQyNGQ0MDY0MmYzYWQzYjliZjliYmM0ZGRhNzk2NmVmODMyODI4OWZiMzFlMTdjODFmZDAyOGVmMWJkOWExZDRjNzkyZTg2ZWMyZGJkY2UzZjkzN2VlY2MzZWViNTE4OGQzMjU5NDE5MTliYmY3NWI0Mzg4ZTIzOTk1MDdhM2Q3ZmIzODc1MDJhOTVmNDIxYzg1ODI2YzFjOTE3NmM5MjNlMzE2MzEwYTRiYTQ1YzhhNWVmNzU1N2NmODdiNzcwMjBiMjRmNWJhMmJmZDEyMjgxMDk1NjYzMDdmZWE2NWVjMDE1MDE5NjkxMjE3YmNlNjlhZWUxNmY3NjI0OWM1OGJiM2U1MjE3MWNmZWZkNTI1NGU1ZTBmMzk3MTY5MTg2ZGM3Y2Q5YzFhODVjODEwMzRlMDM3MTgzZDZlYTIyYWVlOGJiNzQ3MjBkMzRhYzdhNWFmMWU5MmZiODE4NWFjZTAxZDliZjBmMGY5MDA2MTAxZmNmYWM4YmJhZDE3MWI0MzcwMzZlZjE2Y2RhZTE4ODFmYzMyNTVjYTM1OWJiYTFlOTRmNzlmNjQ1NTU1OTUwYzQ3ODNiYWIwYTk0NGY3ZGU4ZGY2OTI1OGI2YWZlMmI1OTMyMjE3MTk1ZGEyNDVmZWUxMmFjMzQzODI0YTBiNjQwM2RmZTQ2MmQ0M2QyODhkYjMxZjk5MDk3ZWMzZWRjNmU3NjU0N2EzNzQyZjAzYzc3N2VmYjE1OGY1OGQ0MDUzZmE2Y2M4ZDY4YjE5NmFmNGY5ZGU1MTZmZDlmYjdhNmQ1ZDllZTRhODlmOWI5YmNlMWU0ZGVlMzU3YTFlNTJjMDU0NGNmYjM1YjcwOTJkMWFhNWE2ZjdmNGM3NjAyNjEwZTljMDBlZjViODc2MWJjNzIyNzliYTIyOGExOGI4NDAwYmQ3NmQ1YjJiZmQ3YzNjMDRhYWM0NDM2ZGFlMmU5OAorU0lHOiAxZGFhNDRlZjA2ZDRjMTBkZGI0ODY3ODQyM2M1ZjEwM2ExYjU2OGQ0MmIyMGNjNjRhZjExMGZjZTlkNzY3OWEyZGVlNDEyYjQ5ODA1ODVjMjZjMzIwZGJhYTYwMWM0NzJkZWZjM2M4NTQxNWRhZWNkZDZkMmQ5ZWFjYWM4NWUwNworCitUU1Q6IDUyMQorU0s6ICAxYmVhNzcyNmQ5MTJjNTVlYzc4YjBjMTYxYTFhZDNjOWRkN2JjMzI5Zjg1ZDI2ZjYyYjkyZTMxZDE2ZDgzYjQ4CitQSzogIGM5ZGRiNDIxMDZjY2VmNGUwZWY0Nzk0NTUxZDIxZGY5NGE2MzA2ODcyZjIzMTY2M2U0N2UyNDFmNzdjYzNlODIKK01TRzogYjExMjgzYjFmMGNlNTQ5ZTU4MDQ3MzBhYzMyMDdhYzAwMzMyZDJhYWNmOWMzMTBkMzgzMmQ4NzlmOTYzNGJkOGE1OGFkZjE5OWU0Yjg2M2JiMTc0ODFkMjhhY2IyZGEwZTE1NTdiODMzNmE0MDBmNjI5NTYyNTAzMWQwOWU0ZGY0ZDMxOWJiYzFlOGY2ZTkyMzJkMjMwNTNiYjNmZmFjNGZlMmM3MGNlMzA3N2ZjMDA2MGE1Y2I0NjkyYTFjZjBiM2U2MmZlNDU0ODAyYWUxMGI4M2RlZDYxYjZiZjQ1NGNhNzVlNGNkYWQ1NTMyZjIwYjcwNjU0ZjEyYmE5MDZmMDAzYThiOWU5ODZmMTVhMzk0MTlkZWIyZWExZWFkNzU5ODI5MGVlZWJmOTI1MmIwYzI3NjA1YTdhNzNhNmFiZWJiNDIyNzFkNzFhM2MxOTdhNDZiY2M4ZGIxMWQ5MjQyODQyZjM3ODM2NGEzN2VlY2FhMzRlOTgyMTM1YmUzNDE4MmM2OWNhOGU2ZTNjOGM5MGUxYjRiMmI0NzU4MTVhMTc4Mzc3YWUwMTY1YTc2NGM4YmEyODg5YjVhYjI5MDk0OWQ4NDg3YTg4ZTBkM2QyYmM3ZTI1MjAxNzZhYTZmZjlmZjBjNDA5ZmY4MDUxNWY0ZjBiODNjNWU4MmMyM2ZkMzMyNmNkZDZiNzYyNTJlN2ZkZGNkNmU0NzcwOTc4Y2Q1MDNlZDJkNmI0ODAxMDExNjdkM2YxOTFmZWQ4ZDZkNzRkNzRhMjAwN2RiMTA5MmU0NmEyM2RkZWNkZGNkYjk4NDY2NDA0N2I4ZGQ3Y2M4YTU3NmUxYTgwNmY1MmNiMDI3YTk0ODBhOTVjYzQ0YjFlNmYyZTI4NmU5YjdhNmJmN2IzOTZmYTU0OTZiN2E1YjFjMDNkOWM1YzI3ZGExYTQyOTkwZDEwYjEyZmI4NjQwZTE1OTZmMjZiMzY2ZDI3MGJhNjRmOTlhZmZmZTNmZWNlMDVhOWIwMjU0YjIwOGM3OTk3Y2RiNTEyZmM3NzUyNzk1NGExY2I1MGZkYWIxY2M5YTQ1MTYyNzQxZmQ2ZjlkM2ZkNWYyZTM4Mjg1M2Q3MzM1ZGJhMWU2YjI5NTlkZDg2ZTEyNWU2N2I1M2RjOGU0NTNjODEwYmMwMWJmMjBiY2U3YjYxOGRkNWQxZWQ3ODQxMDZlZTA2YTNlY2FmNmIzYmVlMGI1NjgzM2IwYjgxMzEzOWM1YTY5NjAwMGE0NDljOTc5MDZhMmZiZGRjMmQ5ZGU5NDA2ZWEyODJhYzRlZTVlZjhiZjM4NTRjNzRhNmI3MTczZGQyZjc5YzdhMTI2ZjNjN2IwNDMzZmQ0ZWEyNmU4NzdhMTQ4MzFkZDQxNWExOWQKK1NJRzogZjliMDQ1MTdiZDRmZDhlZjkwZjIxNDBmYzk1ZGMxNjYyMGQxNjAyYWIzNmM5YjE2NWZmZjNhYmE5NzhkNTk3NjcxMTBiYjRlMDdhNDhmNDUxMjE0NDdhYzBjMWFiYWM1ODVkMzkxZDQwNDIwNDE4OTg2MjhhMmQyZGNjMjUxMGQKKworVFNUOiA1MjIKK1NLOiAgZDAxYTBlYWQ5ZDY5NDgzMzI4M2I5Y2Q3Mjk5YTdiZDc1ZmE5MGIxZDJkNzg4NGU0NTU3YjMzYzk5ODc3MmE2OAorUEs6ICBhMGY3NTc0NzliYTYyN2VmZWY5NWQ2ZWM3YTkzMWRmYWM0MzczZGYzM2RhYWY0ZGRjNGVjNjg5NGM4MjYxZWQ3CitNU0c6IDc2Mjc1MzRlOWE4M2QxZTQwNmFiOTQ4ZDMwZDFkYTljNmE1ZGIwOGUwZmViN2ZjNWJhNWNiZjc2ODQ5ZWU4YWRkNDg0N2VmNWNhNWEwZGFlNDExYWNhMDk3NDUxY2I0YzJiNDk4Yzk0NzA5NzQwNzAwNzY0MGRjMTllZDkzOGUzYjkxYmY1MWM5NTgxMTY4ZGY4NjBiZDk0NzUxNjY4ZGFiZDcyMWRjNzM5OTg0MDBiZTIwYzlhNTYzZDUwNTFlZjcwZTM1NDZmZWU2NzMzMTJiNTJhMjc0MDQxMDU3ZTcwODQ4ZWI3YzVhMjE2NDRjOTdlNDQ4YWJkNzY0MDIwN2Q3Y2RhZmNmNDVkYTZkZjM0OTRkMzU4NWIwZTE4YWM1YWM5MDgxY2I3YTQwN2EzOWE4Nzc3MDVjYmFmNzlhMDFiOTE1ZjczNmViMDI1YzU4YjRiNWQ4MDdmYjdiNzU2NmM1OTY5Nzg3YzFkNmNhNGViYTk3ZDUwOWVmN2ZiMzU1MGQyMWQzNzdlY2VmZmNmMGViNjY4MTg5NWFkYmQyNDZlZTdiZjNjOTM1YTAwNjQ3OGI4MzJlY2U0NmRlNjExOGIxN2U0NjZhMjdmYzJhNDRhODk2YmFhZTI3MmY5ZWNmMDE4YzY1Y2I1MGNmYmZjOGQyNjA5OTRhMThhODMyZDk3MTkyOGM0NDk2NzU3MjQ1ODUxMzFjODcxNTMzYzk4OTdkOGY4MGY5YzA0MTZiNzE4Nzg2YjEwZmVhOGViNWJkODEzYTI2OWExYjY3N2I3YTI1MDdhNDRiNzEzZDcwNTA4NjUzMDk5NWU1OTMzNWRkYzI4NTVlODQ3ZTRmNGRiMDZjOTFmMWQ1NDAyM2Q4YTEwZjY5ZjllNjFiZGNlNGI2ODZmYjYxN2JkNTAzMGU3NTVjYWRiMWY2NDRlMWRkZDkxNjE5Yjk2ZWNkNjA1YjAwMTk4YjlhNmVkZGI1YTg0ZWJkMzY5MmI2NjU5Nzk3NjY2MzdjNjc3Mzc4YzFjNzcwNDFmZDRhNmIzNTU1YzFkYzhhODNmZTkwMTNiYjYxMDZjYzE4YTJiMDM3YzkzNzdiN2ExYTVhNWQwZGNjNTQ5MThlYWFkN2UzMmM4ODA3NjdiMjZmZDJlYTJkNjhiMDQwNWY1ZTA3NGY1NWExOWQ4YTM5ZmZiYjdkYzMyZmFlZTZhN2Y5NTMyYWVjOGEwNzc2YzNmZjgzYWUzYTQ2Mjc3Mzg0OTZhMzcxZWI5ZTA5MGI3NGUwZWRkZWNmY2Q0MWJlZDBjMGNlNTgxMjc1MjQzNDcyZDI2ZGE4Yzk5OGU0YjZkNmI0NGZjODhiYTJhYjU0NjQyMjI1NDE3MTIwMjk0NDE3ODA1NzQyYmRiMzNiN2IxMjIKK1NJRzogOWEwZmY3ZjM1MTc0ZWMzZjY2ZDIyYTZmMDZkZjYwZTA5YzhmNjIzYTVhY2E4MTBlMjNhODhkMGU2YTMxY2I2ZjFjZTFjMWY5ZGNjYzllMTQ4NGI2OGRkMDA0YWM1MzU5N2UyOWFkNmFiNzJlOGNlMmI3NWFkNWI4MGViODQ4MDMKKworVFNUOiA1MjMKK1NLOiAgZGY2NDg5NDBiNTc4YmMzMWQyYTY1Mjk2NWYzMDM5MWNhZjA2ZDVmMjUxNTk5YTczN2NlMTBiZTU1ZjRhOWQwZAorUEs6ICAyN2RlOTIwNDE5YzE4NmIwMWJlNTQyNzlmYjhmOWJlNGJiNGIyY2FkNzVjYTdlOGY3OTJiZmE3YmI5N2M3ZjQxCitNU0c6IDFhZTUyMGJlZWI0YWQwNzIyYjQzMDY3ZmE3Y2QyODc0YWJjZjM0ZGQ5MjM3YjQ0NzhlYWU5NzcyYWVhMjk3YTY3ZmI3OWIzMzA3MDIwNGJhZWU0NDBiOWM4N2UyZmJjYmViNzY4MDFkZGRlYTVlNDUzMGQ4OWUxMTU4MzE3OTkzOWEwMGEzMmY4MTEzMzJjNTIyOTFjYzdhYzkxZTVhOTcwY2Q1YWE3MDhiMWRhMjZiZTlmZTQzMmE5YmJkYTEzMTllMzFlNGJjYzlmMTY2NmEwNWI1YzA1Yjg3NmJmZDFmNzY2Njg3Y2NlYTRlNDQ4MmU5MjQzMjlhZmFjZTVlZTUyZTk4NzlmZDY5Yjc2ZTBmN2U0NTJlYzQ3MTNiZmYyMTZkMDBjODI1OTlkMjdjYTQ4MWY3M2FhZTEzNmYwODc1Yzg4YTY2YjFiNmYzNGM1MDUyM2FiNjAyZTlkNGViYjdlZWI5ZTA0M2E2NWU0MTg5OWQ3OTc1MmEyNzlkMmVkNDY5OTM5MjZmMzYyMWU3YzMyYzlhOWIzYjU5ZDhkZDU3YmVjYTM5Mjg1NDM0ZGU5OTFjYmQyZGZjYmM1Y2E2MmE3Nzc5ZjQ3NWQwY2VmMmYzZTU2MmYyOWFjZDQ3NGYzYzk5ZWM1YmQ4ZGUwMTEwMWJlZDJlMGM5YjYwZTJkNzBmZDQzMmM4OTJmYzY2ZjhkNDYxOWE5MTFiNTYyNTE2M2U5YTQyYmY5ZWEzODU4NmQ4ZTc2NDAwMTU2NGQzMzU0MTEyMjVmY2IwYTA2ZGMyYTgyZGEwNzc5YTNjNDQ0ZWI3ODY0MjAxYjQzZWJiNzJiOTIxZjM0ZDNjMTMwODlkZjJmNGZhYzM2NmZmMWUzYzBiOTZmOTNkMmI0ZDcyNmE1Y2U0ZDY5MTZkODJjNzhiZTM1NGExMjMwYzJjZjA0MThjNzhhMTkxM2U0NTRmNjQ4Y2M5MmM4ZGQwZTE4NDY0NWZlMzc4MWQyNjNjZmY2OWY1YzYwYjFlYmI1MjAwNWE4Yjc4YTUxNWM3ZTg4ODZmZmUwNTRkYWI0MjhlMmUyMjFkOWQ3NmFmZjQyNjU0MTY4ZDgzM2I4ODE3ODI5M2UxZmVkZDE1ZDQ2Y2Q2MDk0ODMxMjljNGQyZDg0NDMyYTk5ZDMxZmZlOWJkYjU2NmY4Yzc1Y2U2NWUxODI4OGU0ZGY4YzE2NzMxYTBmM2ZkZGUxY2NhNmQ4ZWRlMDQzNWZmNzQzNmNhMTdkMGFlYjg4ZTk4ZTgwNjVjYmNiZmQwZmY4MzA0M2EzNTdjZDFiMDgyZDE3MDNkNDYxODgxODcyY2RmNzQxZTRmOTliZDE0Njc0NWJhNzAzOTc0YmU0MGY1NzliZjVjNGRiYTViZGI4Yzk0MWJjZQorU0lHOiA2MmJjOTkxYzQ1YmE5YjI2YmY0NDAxMTYyNjQxNjJjMzRjODg1OTc4ODVlOTYwNTA4M2M2MDRiNWY1ZDhmYTZmNjYyYmEyMTRmNzZlNmNmODRlNWVjMDRkZjFiZWVmYzVmMjVkM2EzYjcyZjk4YjUwNjk4MzE5MTZhNjMyOTYwMQorCitUU1Q6IDUyNAorU0s6ICBjOGFjMjM0NTU4YWE2OTgxNmIzNjhiNzdiN2NjY2I1YzhkMmEzM2VjNTNhZWVmMmNlMjI4NzE0M2JkOThjMTc1CitQSzogIDUzNjRiYWYxZmRiMmM2Mzg0MGIzMGQ0MDMxY2Y4M2EyZTE4ZTYyMDc5M2JhZTU5ZDEwMzVjMGVkZTU1ZTUyOGIKK01TRzogY2U0ODhkMjY5NzVjMWM5MzI4YjQ3ZmE5MmUxOTU2MTMzMDA0MWIyM2EwZTU3YTRiOGJjYTg5ZWI1ZjYxNWU3M2RkN2ZhZTY5YzIzODBlMzIxMmY5YjczMzQxYzM1NmRiNzVhNjI1NmQ3YTIwYTk3Zjc1OWQ0Y2JhNzE5NzE3OGVhNzI0ZGQ5MzI5NDkzNjBlOTZjNTBhNGIzYmE1NWE5NTMzNzJjMzk3YjA5NjljMmIxNGQzNjA5ZTBhODUyZDQ4NGRmNzBlYWFiMTEyNDllYmViMzIzNzkyMWYwYTM5YTU1ZDdkY2NmZWYyMDVkOTRlYzgwZDllMWZkNmEyYzFlZmQyOTg0NDEwMWRmZTJjNWY2NjhhZGI3OTc1OTE1ZGVkZDA4NjUwMGNlZTJjMWUyMzNlOGU0ODg1NWNjMWE2ZjI4N2Q2M2RjZTEwYWRkZDEzY2FjN2I3YTE4N2VmZTQ3ZTEyZDFjMzViYjM5NzQwNTJiMjNhNzM2NjhkM2U0Yzg3ZGI0ODQxYWY4NDZlODA4NjcyYzQzZDBhMTUyMmUyOTY1ZjA4Mzk1MWIyYjJiMGM0MDk1NDhlZTYxODJmMGM5ODUwNTE0YzllNmMxMDJmNTRiYTQxMjRjOTJhOTAyNzRmNDA1ODkxZTY2MmY1ZWJiMzc3MWI4NTc4MzE1NmU5ZTU4MzY3MzRkMDlkMWJhZjViMjEzNGM5MzE2MmVlYzRiZTAzYmQxMmY2MDNjZDI3YmU4Yjc2YWNjYzZlOGI4YmFjMDIwY2JhMzQ3OTY1MWM5ZmZhNTNjZTRlYjc3YTc3MzEzYmMxMjY1ZGRhYjgwM2VmN2E2NTYzYmE2Zjc5OWQxZWYzMGVmNWEwYjQxMjk2NWZkYWMwYjlkYWI4NDJjNzhlZTJjYzYyOGUzZDdkNDA2MWUzNGVkZTM3OTdlMTU0YjA2ZThjNjZjZWJkZjJkZWQwZjgxYjYwZjlmNWNkZGE2NzVhNDM1Mjc3YmExNTI0NTU3ZTY3ZjVjZWZhZmNlOTI5MjkxZGNlODllY2IwOGExN2I2N2E2MGM1ODJiNDg3YmYyZjYxNjk2MjY2MTVmM2MyZmUzYjY3Mzg4YjcxM2QzNWI5MDY2NjY5OTYwZGU0ZGI0MTNjZDg1MjhlZTU2ZWQxNzNlOTc2YTNjOTc0YWM2MzNhNzEzNGNjZTM4MzE5NzM1Zjg1N2I3ZDcxYmEwN2Y0NzdlZjg1ODQ4YWE4ZjM5ZTExODExODc3OWVkODdiNGY0MmFhMzU4YTg5ZjdlYzg0NGE0NTFlN2U4ZmMwYWY0MThiODViYzliZjJmMjZkMWVhMTM3ZDMzNWVjN2VlNzU3YjcwYWUyZmRkOWNjMTM0OTMyZjBlNTQyNWJmMzdmYjkxNWU3OWUKK1NJRzogMzIyNTAzNjFkZjZlZDI4MzQ4NWY5NWYzZDM1N2E0ZjFjMzNhOGNmOTE2NTgzMjdjZDQ1M2Q0OWM5NTM2NjU1MTA4NzBhYTQ1NGNmYTNiODMyNDUyMjBhODI3ZDBlYzc0NzdmOWVjZWI3OWM0YTI5ZjMwMWY5NTNjYzhjYWFjMDcKKworVFNUOiA1MjUKK1NLOiAgMmM0N2YyYjhiOWQyY2VlOWU2ZjY1NGJjMjQ2NThmOWVhZjQzOWMyM2JlYWEwYTc5YmYzNWNjOGNkMmRlYmFmNAorUEs6ICA0NDRhZjJmMzRmZDMyZTVhMTlmNjFmODdkMDNlMTA3NjI3YTNlZWI4YmQ5NGQyZmFlYWEzNDhiMDVkZWExOTgwCitNU0c6IDA0NGM4ZmFhOGM4YWFmOWYyYjgxODZhNmI5YjMzODQ3ZWM3YjQ1MjQyM2IyMmE5MTc0M2QyZTU5N2VjYzFlMWUyMmFlNjAwNTNlOWVlNjIzM2IwNDRlNzc1OTIwZTRlM2Q2NjcxOTkwMTMyNWNmZGQzOWJiNTMyZjhhYTQ2OWFhYjQyZTk2MDhjMjEyNjBjMDRjMjc0MTNhN2E5NGU0NjZmNjNjNDk1MmU5MGVmOTBjMTI4MTRiMzQ1MWIxY2FkN2RhOTE0N2Y4NDA5MjIwZjY0OThjYzBhNjdmZWY0YmMwNGZjMDZlMWQ4OThhNTUxNTU5MWU4YmUwYzQzZDc1YTZmZTQyNWI3Y2JlZmIxYjkxYjFiZDc4YjViZWM3ODI5MDU2OTgyZWZkYzViZTI0YWY2Njc4MDA2YWRjNmYwNDQ2MjAyZTdlYzNhMmQ2OTc5Y2IwZGY3ZTI1ZDc0MjMzOTE0ZDljNThiODFjZjU1YmUwNjk2N2QzYTU5NWMxYjk2NzI4Njk5OTRjZmJhNjcxNjI4MzNhMjE0M2FhOTFjYzkzYWNkYWZhNWI0NTIwOGRmM2U4OGNjYzAxYTJhNGQyMjBlMzYwMDk4ZDkxNTRkMjI1YTdjYTVmMmYxZTUyYjEwMDNkMTA2NjUwYTc3YjI4M2I5NWU0YmFmMWU3MzM2ZmE5YTc0N2EyYjM4MjNkMzYwOTEwNDEyZTc2ZGI3MjVjZTFhYjFlMWQxODlkMGQzYWJlZjgyZDc2NjZiY2YxYjc2NjY5ZTA2NDNiNDRmNzRlOTBjZWFmYTBjODM3MWI1N2M1OGYzYjM3MGE1NDdjNjA5NThmMGZjZjQ2MWIzMTUwZjg0OGM0NzBmYTA3ZTI5YmY1ZjBkNGI1OWVmYTVhYjBkMDM0MWUwNDUxZDBhYmIyOWQ3NDE0Y2RkYzQ2Y2M2ZDc0Y2YzZGMyMzNkMGQxNzA3Mzg3YmQ4Yzc3ODBmZjc4ZTU0NmZiNzcyOTRkNThhNWRkYTVmMDVjMTI5N2UzZDE3NzExNTZkMjg1NjM1YmY3ZWNlZGIzOGE5ZTVlNzc0NDk4MDRmMzg5OWVhNDZhNTAyNjZiMjU1YWViNTJkMThlMGZhMTM2ZTUzNWNjOTAyNmY2Nzg1NTJmYTNlZTIxNDYwODFkOTk5Njg1ZTI0YmY3ODA3Y2M0N2MxMzA0MzZjNTQ0ZDM1YjRiODc1YmQ4YWZhMzEyY2UzYWUxN2NmMWM3ZjVlYTFlY2VjYjUwZjk1MzQ0NzIwY2VjZjA4ODQzNGZmOGUwYmEwNDRlYzE5Yzk4YWRhNzc4MjExNjMwNGNiZWFjMWMzZTM1ZjVhNGY0NDMxMzM1NGRjOWE0MGVjZTVhMGY5YWQzYTIwMjVhY2VmMjYyYzU2NzlkNjQKK1NJRzogODU1NGIwMWQwOWVkODZlNjEzOTViOTFhMmIxZWUxODcxNWM0MmY5YzdlN2YwNzAwZDc5ZmY5ZmI1NzgxMjkzZDYxYzU1OGRkNWI0MzFjOTM3MThkY2MwZjk4ZmI2NTJiNTk2ZjE4YzMwZjgyMjE1ZThlNjNlNGY2NTY4Yzg4MDAKKworVFNUOiA1MjYKK1NLOiAgODg3ZmRiNDg3MDY4MWQ0ZmIwNmE5MzYyNTlmNzVjYWUwNTE3ZjUwMWFmNjQ2YmMwN2E0ZDcyYmVlN2ZiMWM3MworUEs6ICBjNzYyZWJkNDhiMmNlMDJkMDYzODRlMzg1NTRiODI1YWQzMjJlYmVhNzRkMjU5ZGYxNTQ3YTRkNTQ3Y2UwMDI0CitNU0c6IGM1ZGM3NzlmM2YzZmFjMDZkZDI4ZTVhNjdlMGU1MjRhZjViNWRjM2IzNDQwOTY1N2I2M2RmYWNlOTQ3MWU5YTQxZTExMzIxNzVhMGI1NjljOGZlYTlkMmVlZjJjZjVkNTk2MmM3ZTBiNjE0NWE5ZTdhMGMxYWEzMzc3MjA0NGY5YzM5OThjNWE4YzQ4ODY0NThiNGU1ODZmOTMwNzYwODM2MWY1MTFlN2FiNTA5MmFjNDFlYzc2ZTA1ODZlZjViOWMyMzZmY2Y1Y2EyZmM4ZGQ2YWFlYjc4OTM2N2YyZTdjOTkwOTMyNTU1ZGM1MjI2MWU0NGU0OTQyMzQ5OGI1MjQ0MTkxODNiNmMxZjFkNDJjNDU0NjRlY2NiMGMyZjdlMjUxNzdmZTVjZDQ2MzUwMmI0MDNlMDZkNTExZmNmOWRjYjY0MDEyZTBmMjBiMzRjMmVhN2MwMDRkOWU0ODRhN2VkODFmMzI2MGM0MWM4YjE5NTM1MjlmNDdmNzFlODY3ODQzY2MzYzMzMmFkMDM2NmE2MzgxN2VkMTJkZDQ3MzBkM2RmZGJkNzU3MmI5ZmY3OTgwNDU5NDBkZDE5ZmFkMGM4YWVhMGI0YWI2MWM0MDE2ZGUzMjc5OWM3M2FhMmI5MmQyYzI1ZWU5YjcyZDQ2ZmU4ZjA2OTNjNTg3NzVlZmIwNWU5ZTE3YTVjMzQ2YTgxMjY1ZDM1YmU2OWEyMmQwOTVkZTE4NjA2NmE1YzZkOGMwN2EzZDM4ZDAwMmExMGU1ZWZkYjg2NmRhNGE5YmRkNTRmNTA5MjY2MWI2YzJkNzQzZjVhZWFhNGM2YzMxOGZiNTkzMjM5MDMwNTdlNDljMjM3YjQ1ZjY3NTQyYTRmMjdjYWY2NWI1N2NmY2Y4OGI3MTIwM2Q0M2Q3Zjk1MzIyMTYwZjk1YzIzMmRkMTBhYmIxMTNiNzIxZGRiYTIyMjZiMDYzMjI5YmI0NDEwMjMzNmIxMGJmMTY1NjU1MTE2MTI0OTc4NmQ0NTRmNGUwOTA5ZDUwMDAxN2Y2Yzc1NjRmNzMzYzgzMWFmNGU1ZWM5NGRmZDNiZjhmZjVmMzAyMWI3MGE1Y2E1ZDI4YzZkZmI4YTJjMThhMWE2NjJhMzMzNTlmMjY0ZDE2OTY5OGMxYWI1NTc4M2ZhY2E3M2JkNjhjMGY3OWQxZDA0YWUwZWNkYjUyYWU3NjE4OTJjMDI0OTNmZjM1ZjNkODRmNjZlMjM2ZmM1ODEzNGFkNmE3N2Q5MjI1NDkwNWQ3NzM5MDBkOWRkZjI2NTRjNzBiNDZmMzQxZGFjYjQ3OTNjYTUxZWVkZTQ1NTMzZWFlZWI2ZTMzMjNiYzNlNmM4NWE3OTQwNjUxYzRmNmY5ODE5MWM2MThjODkxZWE0ZTIyMGVhNAorU0lHOiA0MTBhNWFmM2M1OWI3YzZiZGIyMTRiMTY2Y2I3OWQ5NmY4MzBjZjk4YmY1MmRhZDdiNmZmMjk3OWM5N2ZlYTRmZWQ1ZWY3ZDNkNDlmMDMwOTcyNzliOWEwOTkyMjZlMmEwOGRkMzBjNjA3ODYyNTRlMmRhOGRlZTI0MGJmYzMwOAorCitUU1Q6IDUyNworU0s6ICA4OGIzYjQ2M2RmYzMwZDAxNWVlZmJiYmRkNTBlMjRhMWY3Mjc3Nzc1YmNlZjE0YTZiZTZiNzNjOGM1YzczMDNlCitQSzogIGYyYjYyODRjOTMwZDRhZDMyZDBhYzcxOTA0MGVlNzg4NmIzNDcyMmVkZjUzZGE4MDFhY2I1ZjkzMTk2OWUxMTkKK01TRzogMTdjMzE3ZmE2YmM5MGM1NTMyMzI4ZjAyY2NmYjZjMDk5ZTZmZTEwMDAxNzRmMmFmM2EzYTkzMDk0Mjg1MDY3MTdjNWM0MzM1YmRkN2MzNjdmZjRlNDQ4YTljMDQ3NTAzYWZiYTY4ZmQ4Zjc5ODcyMzdiZTdmN2ZiZGM2ZDczZjI0YzY0MjFjYWI0MjJiM2ZiMjVmNjdiMmQ3MTA0MmU3MTU3MGRmMmFmMzdiZmU1YzExNDIxMWZkNTUyNGI2YzFjNmNjNTJmYWJjM2NkN2ZiNDY0Y2Q1ODBiYjc0MDcxY2IzMDBmOGM5ZjhhNDYyMDhlNWFhNWRkZmVhNWZlOTA2OTdhYTJmMTRjNjA3OTUwYzk4ZjIzMTJhOWUxNmVmNjM0NmE4ZmQxMjkyMzI3MzM4MjdlMTUwMWE2NjBjNzdjMjljNTZkMmZkZDFjNTU5N2Y4YmM4OWFhZWZlMzcxMzczNGZlODI4NTgyMDE4OTFhMTE0N2VmYWYxZDc4YTQ3MWY5MjBkZWZjODgwMzQ0NTUzZWI3MTZjY2UzMjYwZTg2YTFiYzBiZTI4MzczYTZhMDY2MTE2ZThlY2IxMGEwYzRhNzBjYTJiNTM2NGUxMTlmODRhZWM2MGRlY2VkM2E0ZWZmMWZlNjg4YzVlM2UyNTE0NzBhYjUxNmZhOTY0YTRiNmYyODM2OGRkMWUyODM1OTc5MzQwNjRkYzBjNWI1NjkxMDYyY2IyZTI2N2JkMTVmZDQyMmJjZmVmYjgzY2NlZjdhYTlhMjI3NWVmNTdlNDczMTQ5OTg4YzE1NzhmZDE4NzA4ZDJmZjY5ZjhlNTk4MGFhODI2YTgyY2FiN2Q4YjkyYmI1M2JkZDQ2ZGIwNDZlY2RmYzhjZDdhZTVjZTQ0ZjNjNWI4YzA1NjViNWQzYzA3MmM3NmI5NWNlOTAwYWMzZWU1NTEwZGIwZTc1ZDNhNDE1MGE5OGYzY2NjY2M2OWU5MzBjNmJhNzQxZGJiMGViOWZiMzE5Njg3MWJhMjA2YTU4ZTBkYWUzOWM4ZDZiYjcyYTgyMzk5YzRiN2I5ZGEzODU3N2FjMTdmZjE1MjRkNjUzYzBiZjMzNjc5MzIzY2E3ZWVmNGU5MjI4NzI5MDMxNTYwZWQ4ZjJlNTE5M2M2NDBiMmY1ZTYwODA3NWEyZWQ2MTQyOGRmY2NkYzAwMDUwYmE0Yjk5ZWQ2ZDE1MzZkNWFjMWU5Mzk2NzRiNDFkMTYzMTJhZTViMDdkZWYxYmY1MzU4OWJlZDQ0MDA2MDJlZTExYjg1MDMzMGYzOGFhZDMzZWYwNDE3MGEzOTA1YzI4YjUwZWNjNTdkY2NmNGYyOWQwYzAwZjcxM2QzMmZmYzg1Nzk1NjU4OGE2MzI2Yjk1NDllZGIwZTRmZTYxODUKK1NJRzogODI1YWZmNzFmNzkzMDNiZjQ1OTJiZDhkYTRkN2Q5NDM3ZmYyNjc5NzZmNzQ2NDM3NjU1OTg4ZGRjZjI5Mzc5NDY1YTNiNDhjOWZiMGYzMWNlZjAzZTYzNjg4NjFjMzY5YjQzNjRmYjhlNGIwYzcyZTI2YTlhOWRkZWQxYzI1MDQKKworVFNUOiA1MjgKK1NLOiAgNDI3ZDZlNDIzOTE3ODk2ODMxNjAxYjhmNGUyMTU2MWRiNjEwODU3MWJlMDA5ZTI5ZGNhNDlhNTk2MGZmMzE0YgorUEs6ICA4ZDllNjM2MGZkZWYyNDk5NzVkZjI3YjMxMDZhNzExMjA1ODc3MjJkZjMyNzBhODVhMTNhOGMzYmI4Yzk4MDllCitNU0c6IDljMmNjN2YyNDYyZTA5YzRjNThjMjcwOWFiNDI1OTg4NWE0ZTg4N2Q5ZmE1MzE4ODE1MDVhYWYyMDNjMTYzZmIzYTBkYzAyOGY0YWRhNjA2NzA2MzhkNGE5NzI3YTM5MDgzYmVkYmFjZWQ1OGVkYjc3OWUxY2U2Y2NkZmI0MjhjMzYyYmIxZGIwYzEwNTMwMDZiZDhmNGJlZjg5YTFhOWRlMDFjNzc0ZTM1N2Y5MTBlNWMzOWIyMjQ3NzU1NWU1ZjdjMDQ5OGI1YjI4ZjM2OWU1ZDNmYTQyYWIzNjBlNGY0NTFjNjlmODFiYTBmM2NjZWQ0M2E1NTlkYjYwMDEwNDI3OGY4Njg3OTZiMmM5MTFiM2IwMzJiNzI5ZjRiMjJhYzE0OWRjNDY3YTBjYWU0OGQxOWU5ZDk4NWI0MmI2MjU0OWRlMTcxZmY1NjZlMWQxZTliYjhlNTZjZmQxYWU4ZjdiZGRjZmQ4YTIzNDE4MjdkYmU4OWM4ODJhYjNlNDk4MzM5ZmY2ODFjN2RjMTEwNGRlNzM4YjQ4MDMxNjk0MzEwOWY3MDNkNDcxYWI4NmU0Y2E0Mjg3ZTRjZDc0YzMxMmZmN2QwMzczOTU2MDZmYjI1Zjg3MWU3Mjc3MDc4YTc4N2QwMmYzMWNjOWU4MTViZTg2MDBhN2M0N2M2ZmRkODIzMzFhZTljNDk2YTU0N2JkYjIzNWI4YTU2ZDUzMjU5ZTYyOTYxMjRhMzJjM2I2MjVkMjAyNDE5ZDA2NGI5YTRlODNlZmE4N2YxMzUzN2I0ZjUxM2I5MTZhODRmYzg2NmQ4YTg5OTgwNGM3ODMzZWFhMDE5ZTBkN2UwZTgwNzViZDZiNWNiNmZmYzc2NjQ3OWYzZjZlMjBlNDgxZTZhYjI3YmQ4MDhhZDkwNmNkY2M3ODI3NDMwZTMxMmY3NDBmMjc1ZGRmNTFkZDgzMjQ4ZmEwNTdjNDNjOWNiNzc1NTdiMmZkOWMyZDUyODI0ZmY5ZTE0NmRlYWMxZTY2OTFkNDUwMjEzYmM1OTBhNDliZWM3MmQ1MmUzOGY2YjRkYzZjY2E5NTFlZWYyMTg0ZDI0MjUwMzFhZDU5YjI0MmVmZmE2OGI2YzcyYzU0YzlkZmRiNDE5YzAyZWI0M2VmM2YzNGQzMzhkMmE5ZGQwM2E3OGNmZGQwMTQwOThlMjQ5MjU5ZTc3MjgyZTBjM2ZjMTAxMGIwMmE2N2ZmODUxZTljZmQ5NzQ5YzFjZDhmMDZjZjQ2MmU2YWRlOTk1YWM0NjZmYWI1Yzc5NWU5ZWZmMTNlNTViNDM1MGI5NGM3MzE2YWE0OThkZjlmZGVlOTk1ODA0Nzc5M2UzYmJiODlmYjgxZGE4NWY0YjlkNDNlNGIwZDQzYjM4MWI5NGNkYzlhOTlkMDYKK1NJRzogZDFjOWEwMWM1NmUzMzk2MGY0OWRmMzdlYWI5NjNiYzVhOTlmMjVjNjAwNDQ2Y2UyY2E0OGQ5MTM5ZGE1NzMzYjcxOGZiZjFhOTg3MzkzZjZlNTgyM2MyZDEzMGM3Y2U2MGVhM2RiMzU0M2M4ODU0ZWYxMmI5OGQzM2FkZGU3MDUKKworVFNUOiA1MjkKK1NLOiAgYmU5MzUyMDlmNjJkZWE2MDEyZWNkYTZhNjE1NmNkMTY2YTRkNzYxMTUwZGVlZDQ1NjgxNmVhZjBjZTc4YTdmNgorUEs6ICBkMzlhODlhZjcyMjkzOTQ4YjEzNDIxZmI4ODNiYmUzNzJhZjkwODljMjI0ZDQyYjkwMTk3OWY3ZTI4MDRlMWMwCitNU0c6IDExN2Y0MjdjYjY4MTUwY2FmY2ZhNDYyYzQyMjA2MTQxNDI3YzRkY2VhMWM4ZWFjYzJkMzBiZWQxZTkwMjA3ZDVhZTMwNWUxZmMxNmM1NGU0YzU0Y2M2ODc4Y2RiZWRjOWY1MWZlMTg0NjFlYzM3YzU1N2IxMTVkMTNjODY4MmM0ZTE1ZjUwNTI5NmExNzYwZTFlNzVmNWFiMjdhNWMxNWExMzU3ZDJjOGM0MGRkNTM1NWY3YzgyZmVhNWQyN2UyODg3NjM1OGMxMmU5MTEzZWUyOTgzZWE2ZjA5YzY0ZTA2ZTI5N2RkOTZiMzRkOWI1ZWQ0OWZjNDdhODgzOTU0OWM2NmIwMDJmZTk0NWU4Zjk0ZTdkMjMxNWM1MGNhNGRjMDk4YmU0YjMyODk4MTJmYmVhOTZiNDdjZTYwNDU0MGJkZTBlNWFiMGIxYmMwMzZiZTliNmE5NWUwOWM4MWU4OTg2NDBjOGYwNWQ2MGFkOTQyMThkMGU2NmNlYjg1YTI2Yjc4MjkyMjIwYmZkMDYxZGQwNzM1MTI5MjNiOTBjNzlkY2Y1YTE5MzVmYWZlOGUwMWVmOGJmODFiNGQzN2M1YTU3MWI1MGM0MjFmOWJkMjE5NGJlZjM1ODZmY2I4NTg0ODc3YmI3ZTA0ODE2NTViMDVjN2I2NDNiMWU0NWIwNDAzNjI3Mjg0MTg1MmUzMTk0MGVmOGYzYjZkNGZlYjVkZjA3OWQxNzZmOTc5YzE4YTExYTY2ZDEyMTRlNTJmNjg3ZTkwNjNjMWMyYjcyNzdiNjg1ZDVjNzJhZDU2OWY3ODczODM4ZjkxMDI1N2EwNTMxMzFjODNlYmNlODZlNjlkNzM2MzYyYmViYzk2YmJmYTM1ZmNiYTFjYjUyN2U3NDhlNWY1Nzk5MjlmZDQwYzU2YjFhNTFhMjIyZTg2MzMwMjcwNWM4NmY3YjU0ZWJmYmI5NDgyZjdlMjgwZjdiZWM4Y2FmM2E2YjU2NzFhYzMwY2QxYmU1MjkyODg3OTdjMDEzY2U1NmJkMTg2ZGU3ZGZjMTgyODY5MTQyNWMxNDdjNTE3NGEyOTBkODBjYmQ1OWMxOWRhN2FkZjc3OTE4ODgyYTdiMmE5YTY0ZTZkNzZiNDhiOTJmMmEyNjZlZWU2ZTI1MWQyZTgxNzY1MmI4OGI1MDJkZTczOTk3ODJkNzUyOWE4MWQwYTM2Mzk5NmI5ZGY2OGIxNWE3NjMwOTA0YzhjMjQ2MDgxZmE0ZjA5Mjk5ZjE1NzU3OTU4ZTA4OWE5MDFjMzU2NDYxNWMwZjdjZjI3NTJiOGI5ZTUyMTMzOGQ4MzZlM2RhZTRjZTIzNzQ2NDIyNTNjNGM5ODMxOTc0ZTVkOGMyODQyZjQ5MDA3YjcxNzc1MDkzZGZlNTdmNDQ0OTJmMAorU0lHOiAwOGUwOThhNzQ5ZmNlNmQxMjM1NDM5NTg3OGE4YmUzNWZlOWVkZjcyNjg0ZGQ4MjgxMjI0ODk5YjFjYWVhNGVkNjg3Nzg1ZGZmNTVhMTk5ODllMDM2MzZlMTY2NjM4NmYyMmMzZjQ0M2VjZjZmZDM0ZDU5OWZmM2VjMmZhZjEwMQorCitUU1Q6IDUzMAorU0s6ICA2ODE4YzYwYmI2NDM5YWMyZWVlMmQ0ZTEyOGU5ZDg2OTFkNGFkNWQzNjNmZWQ3ZDY1NzdhNjJiNjU2OTk5NGE0CitQSzogIDczNDVlYzExYmNjYzA1NmZjNGVmZmEzZTRlZjY3MDk5NmFhMjZhMWJiMWI4MzM5MWJhYmMzOWExYTU5NjAxZjkKK01TRzogYjJhZTY1OGIzYzEzYzNjZGViMWRjOTkzYjBmNDVkNjNhMmVhOWFiZDBiN2EwNGYxZjVjZTU5MzI4MDZjMmNhOWI3YTIwNGZiZjhkMDY2YjdmMGZlNmFlMGQxZGE2OGM4ODVlZTExZjZmNmRiN2U4MzIwYTJlYTY1MGI1MzM4NTFjZGQ5OWQ5MDNhYTBiM2ZhYTNjOTUwZjcwMmYwNGU4NmI0ZWViM2ExYzdiYzg1NGIyNTE0ZmE1YjQ3NjZkMzc1YjRmMWFkNjEwNzUzNzhkZDkyZmQ2MjZjMmI0N2UwMTM4M2VhNzI5ODc5NTkyNjJjNTYyODYyYjQ1Yjc1NTc2NzE0MTNiNjY2MTRiY2M5ZjdiZGI5ZWU0NmNiZWQ4OTY1YmZhNTA1MzE1MDkwYzcyMDRiZWE4OTE3NWJlNWYyMDgwMmUzZGVkZGNiZDhkZDY0Y2ZlZjdlZTZhNmUzODYwY2UxZTU3OTlkZjVkODEwZDVlY2YzMmU2MTVkMTZkZmY4N2FiZDRhNjM2ZWExN2FhNGVjZTViNmIyYzA0NmI2NWI1YWY3NDk4NjJiNDU3OTBjMzkxNzY4MjBiMzY5MDFiZTY0OWNmNDE2OWRmN2U5MjM5NTZkOTYwNjQ5NTBjNTU1ZjQ1YWNiOTQ1MDdjZmQwYzNiMzNiMDgwNzg1ZTM1YzBkMmIwYWRkYzRjMGFkM2ZiMjE2YWMyZTYwMWM5YzdlNjE3ZGFiZGEzMzNkYWU2MDNjYzlkYjFmYzYyYWU0ZTBlNDVlM2NjZGQxNjZhNjc4MWUyNDNiN2RhYTEzODgwNjYzMmY1Mzg4NDRlZTNkMTQwYjdhOGJiMmI1NDAxMDA3NzhjNDU4ZTA2NjE3MDcwNWU1ZmIyYzg4MDI5MDk4Yjk5MmMzOWJjOWZmNjMzMGJmY2ZlNzc1MjMyMGU2ZWEwOTQ5ZDJjODcxYWVkYzE4N2JlMjdmZWY3ZGI1ZjcyYTZhNzczZWRkZTBkYzUyYWUyZWQ5MzFjYjI2ODE3Yjg1YjE1NDU4OTRkOTIyOThhYWY4N2NjYmM3ODNlOGRkNmQxNjQ5M2Y1NmVhZDJiYTg1MmVlOWM3ZDEwMDc0NDA2NDQwZDJhMjc5YWJjODc0ZjE1NDY4ZGQ2NmE3MTdiYWNlMzdiZTdiNzA1NWRkOTY4MWY4YmU4MTMyOWVlN2FmOTdlM2FiYzQzNGFjMWM5M2FlYzU4MmYyM2ZkMWVjMGZhNWFhZmNmN2JmYmRhMDBmZmE5N2FlMzE3YWU5MThkMzQ5ZDIxYTdmNDYxOTE0MmJhMjNkYWNlZjdiMzkwYWUyNmExN2UyZTI5NjJhZTI3MDA1Mzc2YjcyZDRkYTllMjk3OTY1M2E2NjMyNWExNDYxNzYzOGRiZTFhNTU0MGI2ODNhYzAwMTcKK1NJRzogMTUwNTk2N2EyN2I5Zjg2ZTkyNDI0NDQwMDJhMWUzMTk3ZDc0ZGRjZDg5NjU5ZWM1MTQwMjAyYWFjNzk0YjhhZGMxOTNlN2QzMGYzMzgyNjQyOTkwZjZmZWQ3YTk5OWNhYzhjNjFlYWEzOWI3ZDkwODE2ZjFkNzM4NzQ0YmUxMDEKKworVFNUOiA1MzEKK1NLOiAgNmQxZGE1YjQ4M2U2NGIwMzY1OTkwZmYwOTM4MWZiMTcwMmZkOGVjM2ExYTM2OWNkNTJlNGM1NjcxM2EzMTRhNQorUEs6ICAwODA1NWMyNjFmMjZlMDJhNjU4ZjY2ZDliYTAxZmNkZTUzZTlhZGUzZWRjNmJmODE1ZTRhNjgwMmUxNjc3YWIzCitNU0c6IDc5YTJjMzcwNTVmMTg5ZjMyNDdmMWY4Y2VhMTliMmVhNDBkODU4ZGIxZjVkMTM5MmVlNmQ0MTFjNzgwMmVlMjNkZTUyYWQwMjgxMTcyNWE5NGQ3NjY3NWRhODlhOTZiNWQwN2FiY2VlMjMzYTFhMmUxZmEzMjRmZmY5ZTc4YTRjMTk2MTQ3Zjg1NzBiMGIxMzcxM2Q5NmFhNWQ3NTBhMTVkN2NkMTYyZTdiYTJlNzUzMzM2MDdkZDY5OGViNDc3M2M3ZTkxZjc2NjhmZjhiNjJmMDQ2NDBlYjEyZWNmMTIyZmNlNmI4MzJlMGQwZGY5MjhlZWZkMmMyMDAyMzY0YWY2YmI1NTI5MWQzZjU0OTI5MDg1YmUzMzgzNDJmMDlkYTczZTI3OWM4N2M4MzI0NTU1ODE5ZWQ1N2U3OGQ3YWM0MDk1MWQzM2Y2NWI5NGFhMWU1NTVlOTJhMDYzZDExZjFmZjdiMTI2OTQzNDFlM2ZlNDQ0OTMzZDAxYWEzNjc1M2VkM2NkZGE4OTBiZGY5NWE4MjA1YjVkODkzMjIxOTkxYzc5NWFkMGE0YTk0NmY1OGQ0MGE0NTM0NTFhZjIxNGZkNDY1ZTI4ZDNlMmYwYTU2YWE1NmRlZjhkYzA0YWFkMzU3MTNhYmZjOGJkNzg1NmQ1YTlkYzNmNjBhM2YyYmQzZTYzNjZmMWYyNDRlOTQxZDZhZWE4OTJmNmE4ODkzMWZlMWMzMTNlMDkwNzhlOTBiYzYzOTJkNDkwNTMzYzllYTNmZjZkZWFmM2FhZGZhOGRmZGM0ZTkwZjY0YWY0NzU4OWVhNjVhODdhY2QyMTk5NjAyMzUxZDNhZmMyMTAzMTk2ZTAzOTRlZDUyM2FhNzk5ZDMxZTExZDM0ZmZmNTQ2ZDQ0ZjQzNmIzNDg1OWY5Y2ZiYzljZTQwM2RlNWE5ODMwZWMzZDQ1M2YwZDQ1OTcwZjU3MmMxNDRmMTkxYjJmYmIyZDBlYTZjYzljOGUyNGQ5YzBiMjE4M2IyNzgwNzJlYmIwYmUyZDcwZDAzN2ZkMmU4ZWMxOGRjNGM5YjIxYWJkYzZhNGNlOGQ0NjY4YTIyMGVlYmQ2OTM0ZjA0YmFmMGU4OGE0ODhkMmRmYzczNWE3YzVhNzBkYmIwMTY2YTIxYWUwMTFmYzZlN2RhMTBmYzMyMDMzNjI3MWQ5ZWVhZDUxMGE2ZjcwMzJmMjI5NjY5MmJlNTA4MDIxYmM5OGMxNzBiZTQyMzVmN2NlMzFmMmJjZDYzNDExNjM2ODMzNzZhZTJjNTY2MmNiNDc3MGM5NmUwMThlZjFiZjQ3OTEzMzE5YzlhMDliOWU5NjVhYjVjM2U5N2JiYzc1NmE1NjY2YjQ1NjdmMmNmZjJkMGMzYTZhNDAyNjE1OGNiOWY5MGY5NTAwNTYKK1NJRzogYTViOGI0NGE5MTQ0NGM2NDM3NGI1MjNjYjRkY2IwY2VmNGNlNTI0MDhiOTgxMjZkN2UxYWU4YmRjMjhjZjUxNDcwY2U0ZTI1M2UwYmU2MmJkNjhlYmY1ZmE2YmNlMTU4NWVjY2ZhOTI1NmMwNzNlZTAzZTU0YzUyNWJiZTJkMGEKKworVFNUOiA1MzIKK1NLOiAgNTE0NmY1YjdmMWJhYTE5ZmM4Y2Q3ODVjODk2ZTBmOTBmOWY2NTliNzdiMWI5YmI0YWRjYWI1YTYyNjcyMDVlNAorUEs6ICA2ODhhOGRlNjRlZmYzM2JhNmJiZTM2Y2RkNmEzODRiYjY3YjNmNDI2MzZkYjIzNGZmNWVmZTBiMzE3NDNjN2U2CitNU0c6IDk3YmQ5OWY1MThlZTA3ODhkNTc2ZDk5YzA0M2I0NDlkZmMyNDJhYzVlZWFlYzM0NGExOTQzMmIzNDU5NjJlYzQxMmNlNTUzNjJiM2I4NTFkOTgxMTlmY2ViOTMyODM0N2Y2ZmNjNjhkYmY1NmEyODE0ZGIwOWU5Mzg1ODQzYTkzMTE4OWVhM2U3MmRhOWQ3OWE0NTY5MzA1M2MwMzU3MDFkYzU1NTEyNDBmOTViMzAzZmJhMTZmODlhYTUzYTQzODgyYjBmMTM4MTIwMmM3OGY5Yzc0MTk4OTlmMjM1MWVjYTk1ZTIwYmZlZTc2MzUxYzQ4ZDAwNDk5ZjU5MWRhNTZhOTk1MjRiYjc0ZmUxYzgzNGVlOTEwNzcxMzlmMWVkZjY3MzE1YzA3YTNmZDk3ZjgwYjdjMjc2YjZjZjZiNWNjMzZiZTM2M2I3MzEyMTdmNjMxOWY1MTI5YmE3YjE0ZDA1NGM4ZDgxZDhlM2EzZjNiZTYyYWMzMWZmNjJkZjZhM2IyZWUyNTk2OTY5Yjk5MTcwNGIzMWM2ODk5OTdhYjQ2MjhiYzI2NjBjNjc4NzIxMzJlODVkYTBjNGZjZjU2Nzk2NWYxMjU0YThmNDMyNjkyYTE3YmI4NmNiM2MxZGNiYWFjOTM5NTUyZjA5ZTUwZWM1YjBkZTJlZjg1ZTBhYzI1M2E0MTY1NjU1ZGI1YjVjNDk4MDM4MjFkODU5YzYwOTYxZTA2MWQ1ODI3OGI4MjdkZDRkM2JjNDdmMWMyMmRlMDk0OTA2YmRiYmYzYmFkYmRkZTIyYmEyNDI1NTg1NWViODZkMWQ3ZjM3MDgyMDU5MzExZGMwNzI4ZWJlYWYyNmM0NDczYmFkMWZhOWU2MTRiNTMzYjgxMWI2YmNiMDY1MGMwNmQ4NzlhNTI0NTc4OGYzNDAxYjQ2MTk3MzAwNzc0YTlhYTczY2Q5NzhjMDUzMGM4MWE1M2JkYjNmYzkzMjQxNGIzZTMwNDQwZGMxMjc0NDFlZmYxNjA1ZTdmZDlhYzhjNjMyZTgyYmYxYjQ1M2Q0ZjMzYTU3ZTRiNjdiMGI2ZmNmNmVkNTU1NWI1ZjVhMzAwYTE0YTAwZDAzODVhMzM3NTA1MjViMDBlZGIzMTJjNmJmZGQ2NGVkZDNiNTMxNmQxOWY5NThjNTE3NjM0ZjAxM2IwMDg5MzZkMzRlOWI1ZTFlOTI4M2E1ZjBmZDc3ODMzNzdjMGU1MDkwNjQxYmI5ZDMzOGNmMzEzM2FjZDBiOTcxZTUzNzkwNGYxN2FmOTI5MTFhZmFkNzJlZTk3ZjlhODI4M2ExNmE3ZTI2YWI0Mjg0MTZjMTAxN2RhZTliMWE5OWM0YzMzMjBhZDE2M2JkY2ZjMzI4YmZhZjliOGQ1ZDdkMjZkNDFkMWVmMjFhNTIwOGYwMQorU0lHOiA0YmRiZDdjNjRmMTNlMjc4YzIzOTY5ZTdlYjM4NmJiZTQ5OWRiZGVmYzNmZjRlMzBjZmFjNWNmODZmMjE2YzI0YzllNmNkZTIwZTUyOWQxNDdmYjdlYTA4ZjI1OTNhZDUwOTAzYjVlZGJmODZiNGQyOGYyZWIzMmVmMTM3ZjAwYworCitUU1Q6IDUzMworU0s6ICA1ZTZmZGFjOTM1MWE2MzdiOTlmMzNhMjY0ZTEyODc2OTdlMmFiYWIwY2NhMTY2MjE3OTI0ODRmNTYwNmY0NGMxCitQSzogIDU3ZTVmODhhY2RkYzhjZGU3ZGQwN2EzMTQ2ZmIxZDRmN2E5YjYzODNhOGY2YjJiOGQ5YjA3ZWJjM2ZjNGRkMjAKK01TRzogNGQ2Y2QzYmMyZjg2MjY2YjhiYjFiNjFkMGUxY2FhOWJkMmQ0YTE4MDM2MWFlZjNhMThkMzkwYjEwZjdlODYwZjY5N2UyNDdlYjZjM2U1MWQzYjk3NmJmMGNhMTgzZDAxYTY5ODgwZjE1Yzk0Yjg3NTY2OGNhMzBkYWRhMDg5NWJlZGQ0ZDcwNWEwZTAzMzA0ZDA2M2RlYTg3YzdmZGVjOThiODljMDZmMTMwZGQ1YmQ1ODZiNTRkOWJhNzM3ODI2YmI0MDVjZDhhYzhiYmM5NTAwYWNkYTNjMDc0NjFkMDA5NDQwYWYwYjI1MzFlNzJmM2ZmNTAxNmFlMmQ4NmQ2OWI4N2ZiMjczZDFlOGRkNWY2YTI2NGJlZWJiMmY4ODU5OTY3NDFmZmRhMjc3YTBmYmY4ZWYwOGY4MWYyMmVlNTk2MWQ5ZDNmYzkzODM2MmUxY2ExMjAwNGE5MWQ5YjVmN2E2ODMzYTZjMjI5NTVhYzBjZGEzMzkwNjcxOTEwY2JkNTFlNjg1ZmUwOTU5NzNlNDE1ZmMyZGI4YWRmMTBiMTQ3ZWM3MDgwYzNiOGViZDA3ZDIxYmI5NTU2ZGE4NTQzMGEyNjhlZWQ4NDg2YjFlMzFjOTQzMTNiMDE2NDlmZTkxYjIyMmY4NWFkZWUxNWViNzc3MDdkNzhmZmNiNjYwOTI2NTQ0ZDMzYmU5OTk0YTI5NzYyMGRjN2FlZDk3ZjM5MjYzOTA1M2YzODhiMGIzYWEzYmQwYWM1YjAzM2NiNDE0YmU1MjBiNDNkZjY4MjZiOTc2ODkwZDBjNTNiOTdiNmM5MmU3ZDFhMTU3M2QwYzc0OTRkNzQ3ZTBjYWQ5YmQ4ZWE1MzhkNjJhZDU5ODAxYWQwNzE2ZjE3MDE5M2UzMDA5ZDk5NTljNTVkMmZmNjQ3OTliZDk1OTM1OWFiYjk0Y2E5NzIzYjVmZmMyNGM5NTA3ZjhjNWZkNmU4OGVhYWU3YTcwYWRkODRkNzQ0Y2NmOGI5ODM2Mzc4OGYwYmZiMWEwMjUyMjAyNTc1MWU1MzQ3MTBkNDBhMmQzOGE3OTExOTRlYmEyOTNmZDIwNDZjYzE0ZGQzODc2ZDE2OGZjNmUyMzZjYmUxNDZkNjM2OWQyMjViZmE2N2U1Mzk3OTg2NWY3ODg3M2E5ZmNmMDNjMTg2ZmE4NTIxZjBhNTU0NWFjY2VlODBkMWU1NTEwNzIyMWUyMWYwZjIyOTFjMTQzZGUwMjNlODhkNzMzMGNjODdkNGM1MWZmMjlhMzA5MDYwNWU5NzM5NDkwYzFkY2VlNzEzNDk1ZjIzMWMyYTM2YjExYWIyMzU1NDdmYjYzMjhmNzQ3MzM2ZDliMWVmMjVhOGFiOTljZWRhOTU3YjJkY2NlZTQwNzViMGQwMzM4MWI5NGFlMThkMDQxZWEKK1NJRzogOTg3ZTMyZTAwYThhMTYzMmY0N2I1MDMxOTQzNTVjOTgwY2IyMmFkZWIzMjZiNGUzMTE1ZWNhYjA0YjcwNGQxODZjZDkyZTNjM2FjN2I0ZTI5MzZjYmQwN2NiNzk0ZWMwY2ZlOTFhOTc4NzJmZjJiNDEzNzZmNWYxOGY1NWI4MDUKKworVFNUOiA1MzQKK1NLOiAgZmNmZmYwOTMyZGM4NmVhNTkwMmE4ZDMzMDczMzI5OTYwY2Q4MTg4YTA3NWRkMGJjZGZhODM4MmMyMGIwZTc4ZgorUEs6ICAwYzkyMDVhOTBiYmU3ZjJkNTA1ZTE3ZmEzZDA4MGI1MjJhMWQ3YTE1MmNhZDJkODVkMzFiMzRhMDQ3MWMwZDRjCitNU0c6IDNkNGI3NjEyMjM3M2UyMTJhMzQ2ZDE5YTY2YmJmYzRiNjIzMjkyNjQ5YmQwY2U1Y2Y2YmIxMzU2NDhiZDAxZGI3NDAzYjNkMGJkZDE2OTdmZjRlNmU5MDg5MDQxMTY3NTRkMzcwYzQwZDcwMGNkYjY2NGM0NmE5MWRkODRhMzU4YjlkMjM4MTQ0M2U2MGYyYzNmNTY0MDI2MWI2Yjg1OGJhOGY4MjhiMDk3MWY0MTIyYjIwMjg4YTI2YmEyMDkwYmExNGZkMjc2MzYwY2M2ODY3OWNkODQxOWFlMTljNmQ0ZGM3YjY2MTRjMDZkZjVlNWMwNTEwZTJjYjY4NmRlMGViZDc1ZTUyMTBhMjE1NTYyNTg5YjI4YzljY2M3ZDI3MmI5OGJkNGJmOTM0OTVlZmU0ZmM1Yjc4ZGVmZWNmYmNhYTlmZTEyNmJhZDMwZTg5YjNhMzg5YjQyNTZmNmE0OGE3NmMzNDVkZTVhMzZhMTQ0OWYwODM0NWI5YTVlNmEwMDFkYTFmZjljZDQzMzcwOTM0OGU5YWVmYmM3OGJhNTJkM2FiM2I0Njk4NjkzNWViYThlY2Y4MWVkYzQzYzViMmUzYjVlYjM4ZDlhMTY1ZTllN2Y3MmY2MTc2MDU0NjNiZWRiYTk3M2ViZmRjZGYyYjA4ODljNzE0MTJmOGY4NTBjN2EzYjU1MThlY2Q4OWQyZTI1YzBjMWMzMGYwODVhMGZmZTU0MGVmOWMwZTg4ZmM3ZWM0YWYxOTQ4YTRlNmY3YTZlMjU2YjMwN2ExMTI3YjcxYmE2ODZlZmVhZGNhMGU0ODYwOTQ3Y2Y2NzRmY2VkNmNhZjczMTBjY2JhYThkOTA0N2RhZWQzMGZkNTU4NWQ0MWRkZWFlNGRmMmZlZDRiNjIyODAzMmMzZTRhZTIzODBlODdlYzZjZDcyZTRkNzRiOGI0YzM4MTNmYjA0MzM4OTM5MWU5YzEzZjdkMzNjM2FhYjVhNzhmYzRjNmE2MzRjNjFhNzBmMDJhOTQwNTQ4ZGExNzdjNjVkZjZhYjE3Y2Q5NjgzZjM3ZWE4MjFjNzQwODg5ZDgyZTg4YzgzNGU3ZDVkYzExNjYyZWE3OGIxM2M2YTRiNjIxOGQzMTc4NDIxOWE0NzY3NTk1YjFhNTYyMTY1MjVjZDY4OTM4YjIyYmRiMWY4YzVhN2YxNzAxYWZlYjk2MTg4OGUyZTBlYzBjODM4Y2Q2MjBjYjdkZDhhMTQ5M2EwMmNkNTZiNTQ1MTI1ZTQ3MDBjMDg4OWZhMjY0NGU2NDRhM2FmNTMxZDFjZDZiYzk1ZTVkZjkxNzVmMTM3ZjI4NDA4Y2I2OTljN2FlNjZmNjVkMWQyOTMwZmFjNTdjYThhNjBlNjMxMWE0MDc4NDg4YzllYTQwNDk0OGE5ZGViZWI5ZDVlMTAKK1NJRzogMzdkZGQ4M2Y5OGIwNTdiN2NiMzIwOGE4MzJjNThhYTkwNjk0NTYzYzIzNTQ4ZDQzMjI5MTM4MGI3MzU5MTMwMWYyNzRiMDRjZWUyZWY3OGMwNmQ5NmMzZDliN2MxNzUyMWFhZTFhOGNhNTBkMzQ3YzA5YzNjZjcwM2JjODgzMGIKKworVFNUOiA1MzUKK1NLOiAgYTFlNGZjZmRlMDQ0ZjFiYjBlN2JiYzYzMWE4MzFhOGQwN2U5MGFlMDhhOTY2YWQ2MjdiNjIwYjFlMjhjNDJjZgorUEs6ICAyNTU2MGYzMTE2OGJkNGI3MjU1MmVkZWRkMDhiYjZiZjc5YTk0MDYzYzFmMWUxZDMwNDg2OWRkMWNlMDQ5Yjk1CitNU0c6IDhjMTQ1NGQ0ZTA4YTE0MDE2NDZiZjdhODg1OWU4YTE0NWU4NWVlZWI0MGRiMzhmZjAxNjk3MDk2NDEyMTJjODFiNjczOTA3NDljMDFhNzk4MDdmM2NjYWRiYmQyMjU2ZjM2ZmZjMTgwY2Y5YmE0NGJmNGE3NjEyZDQ0MWMyM2IyZTI1ZDMzYzQ4YTczZTE2Y2UzNTc1NjI3NThhZGIwMDU1M2MzMTQyZmI4MTc2YjZhZThmYjYxMGE2MGY5MjNiMDkxMTgxNGIxMGY1Njc5OTM2YzM2NzdiNzBlODQ2ZTIxOGY1ODc1NjdmMjAxOWM3ZDI4MmExMDdmM2NjODQ3NjNhZGFlYzg4OTkzYzBjYzUwMDNlNzdhZjYwZDY3ZGI1M2Y4Y2I3MjdhYTY2NzJkZTAwNDQ5OGMzYjNlMjIyYWE3MDgyZDkxZjk4YTFhMDY4Mzc0YzUxMGZmNTNhNWU1NTljYmUyZDZjN2MzNDQyZDcyMzg5MDdjODExZDU4YWE3ZjVhNDZiODMxMTI0NGYwZGJlMWI5YzBlOTQ0ZGRhMWQ4MDEwODY0OTQ5YzU5Mzk2YzZiMzQ2YTExZjNhYTg2NmQ2YmNlYWRmYzkwOTAzOGQyMmVmYmM4ZjFkYWM4MTBhOWYyZmFmY2NlN2MwMzg5ZWIwYTU2YzBmNjhjYWUyNGFlM2RkYmRmZjcxMTZkMmZhZGViOWIwZTc1MDk1MzZmZGMzYjgzZTcxMzU0ZGE2YTFhZWQxNjg4NzQ5MGRjMmY0ZGY1N2JiYWE3MjQ0NTI4ZmEzMDk0Yjk5ZTg2NzU4MWFjZWY5MDYyNzBiMmNmNGRlZGE2YjhmZDlkYmI3OWFkZDdiZWE4Zjg2ZmNiMWY2NGRmZDUwZTM4NWI0MjA5ZWMwYjFhOWY2ZDJlNTE5MDY4Mjk3YTJiNWM0MDVjMjE2YjRhMmVkOTgzZmY2OWM1OWI1MzBlZmZhNjBjMDM2NzA1MTI2N2RkMmJiZDFlODZhOWFiNWExMTRkZDRmNjliNTQwYmZhYmZlOTdjMDQwM2I4ZmNiYjI3NjI1NzYxZWRhM2UyYWQ4ZTYyNWNmZTRiNjE1YjcwMjU1MzFhNDk4OTE4YzI0ZTAyYTAwZTc5N2JiYWZkMTRmOWQzZjY4MjdlMzkwMDYzYzQzNjA4MDY4OGQwMzdhNmUyOTkzYzU2ZDNhOGU5NWYzNzVjMTAwNDBiZjA0ZjAzMGM5NzI2MjNkOWUzODAxYzEzYjRlYzhkMDFjZjE4Mzg1NWY1OTM1ZjEwZGRiMmM1NGM1MWM4MGNiZWQwYzI0ZGI1NmUxZWQxNDg5MzFkODkxNjFjNWVhMzdjMmY5Nzg3Zjg4ZWY3MzMwZTVkY2QwZTQzZDgxYmZjOGJmMjNkZGY3OTgzY2MxZDczMzg0M2EzM2NjYjM5NWRmYworU0lHOiBjODAwMTUyN2JkOTAyYzE1YzNkZDVhZTE4MTgwNTI1YjVlODIwMmJlNjY3MTFmODI4ODVjODIyMmExNWYwNjAwOTJhMmE2ZTJmN2Q3ZTk4MDMxMTIwOTE5MWIzMmI4YWRlNDhkM2VhOThjZjI0NWYwZmFkNjJjMDA5YzVhNzEwOAorCitUU1Q6IDUzNgorU0s6ICBiZWQxYmJjYWUxODY0M2Q2ZjZhYWMzNGYzZDliNmExNDc4Mzk0ZDAyYjkzMWNmZjAwNmQ4NWYyMWI3ZGJjNzQ3CitQSzogIDRmNTI4YjM4MTg1YTQyNGM2ZmRlY2U0NjUxMWEwYzI5YjdjMDRiMzJlYjA0ODNhYmI1MmQ1ZjhlYjZiMzUyZWIKK01TRzogZmY3YzY0MTNlNjE4YTA1NmRlNDAxZWUxMGM0MGFkZTNkN2MwZTY4NjE0OTVkOTdjMjY4OWVjNmFiYjY5ZGQyYWU3MDFmZGNhYzhmMDgzMzFlYTVjNWY1ZDgwNWI1Nzg5ZWU1ZTI0MWZmNGFjOGI5NjBmNGYyYjlmZWY2YTcyN2ZhZDg2ZGNkNDMyZGU5ZmFkNmJhNDVlMDBhYTM2ODdiMGNlZWIyYzBkNDMwYjdkNWZkZTYzYjRmNmI5ODJjNGY5ZTAzYzQzMGFiYWQ5MDQ0ZDA2ZGM0OWU4OWRmNDgxNDA1ZDhmZWJiYjA2NTNlOTY4Njk0OGFhZDJkOTA3MjU0NGRmOTQyNGZkNDg3ZjRlMjRiYTdmMjQ1NWRkZWM0MTA1ODI4YzM5ODFiZGRiYjFiN2ZiZGJhYzE1NTkwM2U5NjBmY2Q5NGMwNzE2ZTczNmY1MTk4NjdmYmM1MmM1MTI2MGY1NzFkN2VkY2IwODFhMjM1NTBhZDhjNzBiYjI2ODg2NGFiMjc2YWEyY2MyZGJmNjIzODNiYjY2MDMwZWJlOTQzNTQxNzRjY2VjMmQyYTkwNzU3ODU1NjQ0NDUwN2NiZjg0ODhiYjIzYzYyNDIzYTNhOThkYTdjYzk2OGY1OTlkM2RjODRkY2EzYWZhZDdmMTRlYzMwNmUxZGI1MzQxNDMyMTZhYTIyYWQxODA3NGM3MTk1NzA4MDVlYTQ2YmM4NmI3MWE4ZmY1OGU0MWU3M2NiMjlhZDU3NTBmY2ZjOWExYzU0MjkyYjY0YjQ3ZWM5NTM4ZjUzODE2ZTM2ZWQwZDBjMWFlNWVhZDA2ZDQ3N2FhOTc1ZWNlYmFmNjJkOTAyM2I3N2U1MGU3YjZkNGFiZGFhNDg1ZWEzNGVjNzY2YmViMWQ5YmEwM2M5YzA2NzE4NmUyZTM4MjY2YzZlMjUzMWU5NzQ4MDIxNDYzOGEyYmIzMTQzMWFjMjA4Njc5NzE1NWZjNzc1YjNhYWQ4ZDVhMGI5MDRjMzgxZWRkMGM2YmMyM2M2NmExOTA0OTU1ZWQ0NTBhOWNiZDE2NDU5YzMyZjVjYTM1NGJiYzJkYTdiMWE0ZDgxNGYxYjg3MTBhYWRiMmNjYzRmMzk3NzU4YjdlOWQ5MWYzYTkxZTU4MjVhYjg2ODJmZjVlNDE3MDJlMDc4NDFhYzc2OThjM2RhOWY1NThlZGQwMWY4NmNlMmM1MDZiZjRjMjE0OWFjOWMxOTVhNTljN2RkN2Q0ZWNmOTNjOTBiNDQyM2I0MzUwNTg4ZDQxNjcyY2VkYzg1MTBhN2FkNTNiNGI3ZWRjYWYyM2U0M2UwNTY2OWQyN2ExZmU5N2I3ODczMGQzZmMwNjBiZDRlZGQ5ODcyY2ZmYjk2Mjg1MzUxYmVmMTQ4ZWY3ODNhYjM5MjExNmJkN2I5MDdiYWQKK1NJRzogMGZjOTlkZDNiOWEwZThiMWZjNmU2MzVhZjVjNjQwMDZiNjcyMDBmZTk1OGY1M2NjZTFiOWIwOTFhNGU3MDY2OWI1OTNmMTU1OTRiYzA4NDJlNTU3NjI1OWY5YTY4NTlhMGRiMjJkNzQwZjlmODAyNGI1YmFmMWVmNmY5NThjMDUKKworVFNUOiA1MzcKK1NLOiAgYzcxODgyM2Y0M2RiMjIxN2M2NmFiMjg5OTcwNDE2NWQyMDg1NzNkZTYwZjMzYmMwYjkzMzhkODgwZjE5M2ZiNQorUEs6ICAyOTQwYjg3OWI2M2YyY2IxZjZlM2VmOWM5ZDMzM2JhOTE3NzBmZTE4Y2M1YTM0N2ZkZjEyYjBlZmM1Y2EyZWM5CitNU0c6IDA1MGU2ODc3ZjY1ZWM3MjZlZWM3MDE4NjNmYWIxNDBiOTk0YWExZTkyYTQ4N2RiMWExODcwMTMxMjA1N2RiNDRiZmRlNzA5MTFlYzI2ZWFhMjg2MzJkMDM3OTRkNTQ1ZGZjYjJhZWQ0MzQwY2FiN2QwOTI1OTVjZDU5ZWQyMzk5NDA0M2Y1MGJhNjk2ZTk4MDJiZDY0OTkwMTIxMzk3Mjg2NDU3YWU2OWQ3NmNiOGUzNGQ3YzFhYjI0NWNiMDdiMWI0MDhmMmJiYmZkZjMzYTFiZGQ1NTk2MzY3MDJjOTE4Zjk4MmMyYWMwMjIxZjdmOTRkYjkxZWRlZmNlMjgxMTgyNTlmODlkOTk0ZGFkNWJiMDEzYzY3OGMxYzMzOGI2NTM5NmIxNWU4ODk5YzE2OTkyMWYyNzg4NTljZTBjODU2ZDg4OWI4YzYzNDE4ZWJjNTczZDJkNjI1ZDViNTkzODgzOWYyYjE2OWI2OTE2ZDhlNDBkZGU3MGQzYjcyODg3YWQyNDc4ZWY2ZmIxMjg0ZmEwZTRmYzUyNGUzYzZmYTFkZDIyYmE2YjgxZGVmODI3OWYzODJiY2I0NTA0ODg1MWIxN2NkNjU5ZDU5NDA5ZjU3MWZhOGE5MjBhMjA5MzRkOWRiZTEwMjJkNjM1ODQwOTY1NDAwMjQwZjg3MGFjZWZmZDVkYjdjN2RmMDhhZjg5ZTQ3ZTFiOWUyMGJiOTlmOTZhYjA3M2VkZjUzNjk0Yzc0ODI4OTBlMzYzMTM0MDIxN2U2ODdhYjI3Yzk4NGI2MDgyNTE2OTQ1N2Q0MzVhNTQwOWFkOGU0MmRhMGFhNjNlMjBjMmJjNjdiZDhiOWEyNjdmMzk2NzNhNzdmN2YzMTM2ZGM1Y2IyZDI0OTQ4ZGJlN2JjZDcxMjkzMThjNjhjNmZlOTVkZDRkZDRmZTk0MjI4NjgzMWVhNTMzNTJmYmIyNTJhMTI4OGJjZDgzODkyMTM1Njc4NWQwNzIxMzRjYjgyMGY2Mjc5Y2M3MTQ2MWY0MzFiZTlkMzAxNDcyNDMyMWM5MmZkYzU3NjMyMDEzNzcwNWNmZmIyYzIzNjY0YjcwNWU5YmU2MGFlMWExOTBmM2UzNDg0ZjcwMDU4ZTcwMjQwN2IwNTZkN2ZlNWQzMWNlZTljMmE2YWM2ZWFkYTM1MTZhYmM1NTE3MjU2ZGYxMjQzNzgwYTAzYmIwMGJhMDBjZTI0ODA3NmVlY2E2ZmVlOTFkNWVmOWViOTA3YjgwMWFmMDk3ZjNlOWViMjU2YmRjZGU4MWVmZTRiYWY4MTg5YjAzOTllMzZmMWVhYTNhYjYyNjYxN2NmM2I0N2RkODljYWY2OWM2NGM1YjhmNjhiZDkxN2ZlMDNlNDY2ODUzODQ2MGExYmU4OGQ5YTg0NmNlZjM5OTM0NjI3ZDQ3NDczNGYKK1NJRzogNGM5Y2RiMWFkNDY1MDk1NjBkODcxZDMwODlhZmI4NzM0NjQ4MjAxYjEwYWNjOTUzZThiNjFmMmNjZTJkYmFlMGZiOWI4NjhhYzk1NzQzMmI3MjIyZGJmN2U0Y2YwYmM3NTMwOWJlYTM2MGIyNjNhYmJkZTE4ODUzMmRkYTI1MDQKKworVFNUOiA1MzgKK1NLOiAgMjU0M2QxNjZjOWY1Zjc0MjdmZjMwMzRmZmE4MTAzY2IxMTdiZjQ3MjMzMWE3M2Q5YTJmMWJjMGEwMmE2ZmYxYgorUEs6ICA0MjY3OGNmMzg1NzAyMWFhNTU2NzcwNmRiMDMxZTc5MjcxNWNjYWY4YWJiMDJhMDQyYmFkMTdkYjNkNWZhMTAzCitNU0c6IDc0NmQ3YWJmMGJmYjI2NjJjMjVhYjVjNWU0NjEyYzMwNmYxNmQxM2U0NGQwZGIzOTRhMDAxNTY3NmNlNjA5Nzg0ZjAzMjNkYTFkZmE5NGQyYjJmMWY2ZTAyNDQ0YTkzNmQwMTliMTQzMDIxZjczYzc5ZGY5MzA5ZTdiZGZmMzlkYWVlYzRjYWNhMDBjYmE0ZWYzMWM4MzEwYzFhMDhlZjRiMzZmODFjMzc3ODQ2YjViOTBhY2Q0MTFhYTY3MWVkN2FmMjc4YTI0MjI5Yjc4OTNjMWI0MTVkNzk4ODhkNzYzN2Y1Y2I1YzljNmM2MzFhZTVmZmEyOWYxMzQwZTQ0NDA5NmFiNTMzNjE3ZmRjYjgwZmY4MWRhMGE3YzZjMTQyZWUwZmU1ZWE4MmY2OGNjM2VhMzhiNTZmMjcyYjBkODBmZDVmNGY1NWNhOTM0OGMxNjE4ODE0MzU4MTNjM2ZhOWZmZjY2YTJlZTZkNWJkM2VkYmEwZDJmOWFhNzRiMWM0NGJmZDBlNjQ2NzhkMzcxNTEyNDk2M2FjNTc1ZmZiMDllZTE2NDM3ZGE0ODRiM2JhNThlNWFlYjhlZDhjNWMwZjQ3YjU5OTA4ZmU1ODBmMzdlYzFkZTI2NmIyOTVkNmJlODVlNjIzNThlOWJiZGM3ODk2NGZiODM3ZWVhMjlmZGI3ZGU4NmNjNTZmNDhiZDlhM2U2ZTJiZTUxZDhhMWRjZmYzY2E0ZDU2ZWE5MzRjNjgyNzcyYmNhZmI1MTQ5N2JlNWQwZjJhMjNkZDQ5NzBjMDJjNDRjMDlhZDg5N2I0MjQxYWNkN2Q2YWIxMmQ4ZjAwYzlhYWRjMzM0YjQzMWZlYzViYjY5YTI4NWI3NTUwYTYzOWVjZTk2OTUyNjgyYjczMzRiNjhjNjUxNTJlODkzYjFjODEwMGM2OTRkOGM1Y2ZlMjZhYzAzYzFmMzkxNGU2NWM4NGYwZTc3NzI5MGM3NmY2YWNjZTM0MGJmZjY2ZGE3MjIwZjczMTc1ZTk0YWY1MmY5ZjE5ZTYxZjgwZGMxZjM1NzE2YjNmNDhkZmE1MDI1YzllYmVmNzM4MmUwNTU4MzBmNWJiZjE1YzZmNmE5NTAzMjkwOWM4OTJjMGY4OWM4YzE1ZmMzZWE0MGEyMGVlMWE0NTI5YjUyMTk1MWRmNDRkOWQ3OWQ3NGUwYzRjMmUwZmVkODQ5Yjg3ODUyMDZkYmU2MmJmYTJjYTIxMDg3YTkxMmU5YjE4NDU1MTY1OWNkOGE1ODdlOTViMDQzMTcxOTI1OTZiYjBiN2ZjOWY3YmJiNmVlMDQ5YzhiMDJmZGQ3NThiNGU3OTg4MjA3M2I3MWVhYWIxOGFhMjkzNzAxYzE3ZDU1ZjllYzQ2YzUyZGUxZTg4NmI2NzUwZmIwZmJjZDY0ZjQ1NjhhMjEwYWU0NTFlOQorU0lHOiAyMGVhOTM2OGEyY2NkMDhiZjljYmY0OGQ0YTJmN2QwM2YwZGIwOGE1NGI4NzY3OWNkYTAzZTI5NmFmOWVmMzc4YmU5YjhmMDRiNDA2NWIwMDlkYTZkYjAxNmYzZGY5ZGI2NDgyNTg3M2UyZmI0ZGUzMDQ0OTkxNWNkNzNjNDYwOQorCitUU1Q6IDUzOQorU0s6ICA4NWUwYTgwZjNiMzBjMjAxOTlkOWMxZWM2NjJlMzkyZmRmMTU0NjM3NzM0M2YxMjQ3MWRiMmEwMzEwYTcwNWJkCitQSzogIDU0MGEzYTFkODM2NzJlNDk1MDM0Y2ZmNDA4ZTFmYmU4MmU1MzhmMDkxN2U4YTFjN2QxN2FhYjU4ZTA0M2QzYzYKK01TRzogZDI4MDJmMTU5NmY4MzgzYjY0ZWRiZGM1OTQwNjBiZmYwZTcwMTNkNWI3Yzg1ZDgzMGZhZTExYWViMzRkZDU5NDk1OWRhNjI0ZTA0NDQ3NGM1NDA5YzAwNTk2NzNiZGM2MWE2NzFlZjViMGI4YTI2ZjMwMTAwYjNiNzM5NjhkOGU0ZDgzYTcyZjI1YjUxMzQ0OGQyZjZiNmE0NDc1ZmRmODllMzFjYTkyNjhhMzA3MDVhZjNmNjQ5ZTNmZTAxZGRlMGNmNGIyOWVjMmRhNTQzNjQ0NGFmMDkxZDYyNzMwYWNkNGNhYjYwOGYwZGYyNmYwODhjNmI5Yjk2NzM3OTRmMDc0N2RhYjJjZTE5MGY5MDU5MjAwOWZkY2U1NDY0YjM2NjFiN2U4NjIwYmFkNjU1MDlhNmM3NTJiNzI3YThkYzhkM2VmYTU4NGZkZTAyNzJjNDUxZDY1YTkzYmVjZTRmNTlkODdkYzZmYmViNDUxNDAxZTNlMmUwMDNjNmFjYTdiM2QzZjkyNzE5MTUwYzY3NzhmMDE1YWZmMmE1OWJmYmYyZTkxYjIxYjBhZDY4Nzc1MzZlYjU0NTY3MDU5ZjU4N2Y1NGQ0ZTJhNmZlMWZkY2RkNmE3ZmRjYjg1MTU1NzViY2MzNzA1ZDc3ODU5MzUyZmEwYjA0NDE2NmUzYzMxODg0NmE1ZGYzMzU2MzAwM2NiMjBiYzk0MmQzMDM5MTA5M2U4ZDU4M2U4ZTY0ZGVjNTcwZWUxYzQxMzg3NjJmNjQ4Mzg5OGQzMmUyMDMyYmRlOWJiZTA3ZWMyYzNlYjQ3ZDk2ODc2ZjBmYzBmMDI0ZDc1M2NlYjM0ZmY4NDgwYjRjZjU3NjIzMGJiODI2M2RkODBlZWFjNjYyZWJhMzFkOGE2MWYzMDllMTc1ZjRjMDE0M2UyOGE4NTJiMWMzMDYxY2U3OGVmYmQxNmEyODczZGQyODE5OGE0NmVjMGE4MDBiMzBkYzhhOTNiOGRiYjgxYTczMGRlNDUwYjg2NGRlYTc2ODBlNTA5ZDgwMGU4MjMyOWMyNjFiMDdlNzJhYTgwZWUxNmVjMzc1ZGRiYmI2ZmUzZDhkNDdiMGUzYzVhOWYyM2M0ZDIwYjcyNGMxZGY1OTgzNWQ4MzBkZDIyZDEwNDAzZDhmMTVjMTAyYzRiMzc2OWM0MTY2NmMzYWI4YzdlODBiOTQwZDBiYmI1ODY1MmQxMGEzZmZlOGQ0NGRmMTAxMmEzZGRjNGUxYzUxOGQ0OTAxOWY3YzVkM2Q5Zjk1ZWQ5M2EzMTk3NDZkMWU1NDNmZmE2OWVkYjQ5YmIzNDM5ZjhhMzI1YWM2YTBjYjRlZGQ2NWJhNjAwODBhMDQ0N2M2NzRmYWE3MmQ4YWViZGI1ZDI1NDRmMmYyZDg0N2M3MmMyZGZhNjA1N2E2OTBhZGM1YzQ0MWEKK1NJRzogMTg1ZWYyMjQ2YWJhMmIxYTU2ODAzMmM3ZGY5M2M2Njc3OTliOGE1MjFhNmY5NzMyMWVhZDU4NjZiNGNiOWM2NWI2NGExYzQwYjliNmE5MTBlNzQyZGMzMmE3ZTY2ZDExZWE0NWRiZWFhY2FlOWYwOTUxMWI4MTAxZjhhZjBjMGMKKworVFNUOiA1NDAKK1NLOiAgODJhMmM2NDkzZjExYmE4MGU0YjhiM2I0Mzg0MWJlOTcwZTJhMTBhOTRkMjI0OWQ4YWM2ZjU0MTRjZjVhM2NiNQorUEs6ICA0YzJlZTAxY2RlYTA3ZGIzNjM1ZjVkNGMxMDgyYjkyZjI5OGRlYjE3ZDBmOTA1ZGY3MWI2NmZiMjI3NGVhZTk5CitNU0c6IDA5ODU0ZDEzNjg0OTUwNDE5ZTBiYjE2NDY0ZTA5OTg4OTA1YzAyMTcxODNhYTFlNDhhZGIxNDdiZmNjMmViNTdjMjMwMGIwZGZjMzlkNDg5NjY1NWE1N2FlMjA0MTU0MDhiYjVmMmMyMzgwMTM5NTVmMGE0ZmM3ODJlMGM5OTNmZTQyY2IwOGNkOGNmNDE1Y2NiZDZjZjFjZWUyZTgwOTdmMDRlOGYwOWFlNWRhNWY0MTViMTZjMmNiMzBjYjJhYjY2NTJiYTUwZWJiY2FlNGE1OWUzMWZlMTFlN2VmMzY5OWNhOTBhYWZhNTg2YmIyNDJjODljZDJlMzMyYjJiZmEyZjgxNDJhY2NhZjQzNmY4OWI2NDUzYmI0ODA1YTFlN2YzYWI2MjcwZjBkYWY4OTM4OWU3MTdkMWI3MDE3NWVjNTcwN2M4ZjUxMmM0MGFiOTI0YzQ1N2U5ZjA5MTQ3OTE3NTBkYzI5MmJiMjdkNmY2M2JhOGNjZjU0YjkwZDNlYmE3ZjE5ZWIzMDBkOWViOGYzYjcyMDMyYmE5MzAzN2Y1NTJiNDA5YjU4MGE1ZjY1MTE2ZmFmZmUwZmRmZGM2ZGIzODgxMzg2YzNjYmMxNmI2N2ViMjU3NjNkN2FlM2FhYzBiODVhYTFlOWFhMjJlNDk1OTYwOWQ0MzgxZTRiNmQ3MTU5ZmYzZTNiMmQzN2I2NDBmODhjZmJlNGY4YTc3ZjgwMTY0NTcyMjhiYTZkM2FmNWM0ZTMzMTI1ZDQ4YmNmY2YzNjc4YzE2M2I2OThlNTJlODU2MTdhYjFhNzVmZjIwYzY5MGFiMDcxNTVlZTc1NzU5ODU3ODA3MmQ0YTA5ZGZjNmM2YzA5NGVjMDQ4NTY3ZDUxM2NlMmIxODM0ZTE2M2RmMTU0NTMxOWQ4MDYxZTBlNTdmNThlZjA0MWI3YmZmYzQ5NjZhYzE2NjAzMzFiOTdhYmJjOTdiZTIxYWUyYmM1OGM2YzMyNzRhOGFkYWQ1ZmQyYzNiYzE2YjkyZTFmOGRlODc3YjZhMjZmMGM2YWI3MTYyZThhYWI5M2FmOGQ4NTkxOGMxM2QzZTIzNWEyNzM3NDhjNjJmMGQyMmNiMWM5M2UxMzRhNDk1YjFiNWVmOGYxYTExMzQ1MTJkNTNiN2EyMTEyNjMxNzdmN2E2MGJkZjQ3NDY5MWYyMjRhM2I1YmFjNDAwNmRiMzQ1Y2E2NzI1ZjVlZTcwM2VjYTBkZWExMGQ3MTI2NzZmNjNlZjNlNTM3ZTYzYWJkMjYwOGNiNGZiZTIwMGUxNWYxODIwOTE1MzQ5NjA3MjkwODA0NGM5NWE0ZTljNTM1NmFhZThlZDVmMDk1OWVhYzA5MWUyMjdhMGI4MWY1ODAzMjc2YjNiM2JmNGI2ODY1YTU1ZmM2NzgyZjYyZWE2ZDYzOTkwZjliZWZlMDEKK1NJRzogNjhhOTFkNGY4ZDI0MWMxZGVmYmQ1Y2E5ZTllMWVkODI3NDQxOTUwNjc1MWM5Njc5NDdiMTBkNTAxMThiYmZhYmM3NjVmZmQ3YjMxYTAxNjdjNGZkOGIxMTc1MzMyNDEyZGYxOWQ4YWExYTkwOTU5MDg2MTMyMDkyM2RiY2IyMDQKKworVFNUOiA1NDEKK1NLOiAgZTU1YjM0M2EwZmExZmI3NDcxODljYjAwZGJjM2E2YWEyZGNmNWI4NmU1N2Q3NjkzZjMwNzQyMDM4OTc2MTE1MworUEs6ICAyM2ExNDQ2MGVhOTgzY2Y5OTdjNzgyZWI0NTgyYWIzYzhhYTZkZGU1MzMyNWI5NzdiNzhlMzNkMmRjNWYyN2FhCitNU0c6IDM2Mjg5YjVlYWZmMmE4NWE3YzZkNTc1YmQxNWVhNTk0YjJmZDg1MTA4NzRhNDY5YjUyMTA5MTYzNjk2ZDg1YjY4YzViMjExZDI5NjRlZmRjNjZlNjI1YWJlOGFhZmU0Y2Q5MjIwY2RiMzQxMTA3ZmZhODI3NmVkNGIzNzBmZTM3NmMxNDgyNjg3MTY3ZGJjOGY3YjIwNWEzZjMzMDFhMTY2NGQ5MDcyODc3ZDlmOThiOGY2OTgzMTMwMWRmOTk5NDcxN2ZjODg5NjkyNDIzOTFkOWIwNTE3ZDZlZmIyNzE3MDFlYWIzZjRhOWIxMjA0MjEzZThjZDEzZjlkMDk5MDQ4YjgyMDc1NjJmMmU0ZWJjNjUzY2M2NWU5ZDU1MTJkNjViNDEwMjJjNzliNGViMzcyOTg3NjlhZWFhNmVmZWQ2OWU5YThjYjQ0NWM3MDEyMjc0ZGU2MmY1MDlmNGU0ODE0YWRjYmY0NDUzYjRmYWI4NWQ3YzhmZDg0NWUwMDgzMGVmNWI3YjFlNjNjNjc2MTM5ODRjYWVmZTkxNWE1NDhlMThlNTA1NjIyY2IyYjM5Mjk5ZjQyN2Y0ZDgzOTgzYmEyYWEwMGQ1M2JlZTFmNTlhZWM4MzE4YzVlYTM0NWQyOTQyNTIzNjk3OTI3NjJhZGQzZTU2ZmNmYTZlNzc5N2YwMjhjNzk5NDc5MDQ1ZWRiMmUyMDVlYjZkZDZjYTA0ZWVlNTZmOTQ5NmQyYmYyNjA5OTM1N2M5NzM4MzViOTkzNjAyNDkxMWU0NjU1ZDNlMjJjODExYzhkNGRiZDFiMDRmNzg5NzNmMDc3NTIzYTM4OWI2ZjI4ZjZmNTQyMTYxNDJjYjkzZTMzZDcyYjRhNTA1MmQyN2U0OTExZTQxZTZjZWM3YmViZTFiMGE1MTEzZTZiNzBiNDc5ZDJhYmVlZGY2OWI3NTY0ZTVhNTczYjM1MmQxNmNlYzg5MDcwMWJiMzgzZDNmNjY1NmVkYTA4OTJmOGNjYzcwOTQwZjYyZGJlNTI4YTY1ZTMxYWM1Mzg4MjZjMTM4YWM2NjUyNGUzMzE2MzdiYTJkMzc3MzAzNThlNmM3MzJjZmY4ZmVlOTQwYWZkMjJjMzlhZTM4MWU1ZDg4MjY3MzliMjNmZGMxYjgwYWVhNWE2MmEyY2YwZmYxNTI1ZTQ0NmNmMzEwNDYxOTUwNTFkNTg1MDNlZWQxYmVmZDc5M2VlYWUxZDVkMWI2MmE1Yzk4NDUxNTdhMDk1Y2RjMDhhMWQ3N2JhNDdlODRhNWE3Mzk5ODBmMGY1YmU3YWFlYzlhMjE1YjIwNGI0YmI3Y2IxYjM4NmRlZDU4ZDdhYWY3Mjg1MzQxOTA3YzYzMzM2ZWUzZTZlZjA3N2FkMTExYjk3NGU3NTA0YmQ5ODlmNTY2ZmRhMWIxYjU5YWJhYTkxYzc4YmI0MAorU0lHOiAwNzI2NmMxODY1MGVjZjA2MzJlMjI1NjI0ZWM0Yzk3ZmMzODdkYzM3NDY4N2E2MTk1NmRjY2NlNzI4OTRlZTEzOGFhYmM4MGNmYzkwYzllZWE2ZGQ0YzU5YWY0NTAyZWUyOTYzNWE5Mjg4MDc4NjY3OGIxNGEzOTMxYTY5ZjkwNworCitUU1Q6IDU0MgorU0s6ICAzOTczMDM4ZmEyZWY2YTI3OGQzYzFjZmY5YTIyNTY2OWU0NjVhNjlkMDc1MDUwM2RlNzQ4YzAwMmRiZjkyNzhhCitQSzogIGM3NWU3N2M3ODE0OWQ5ZDJkYmMyNjNkZGY4YWM0ZDY1NGQxZmY0NTVjYjE4OTdlMWMzY2UzMWI5NGNmZTMyMTAKK01TRzogMzM5MmUwMmYzYzg0NjYxZWFmODFhNWZmMDQzNTdmMjEyZTkyMzYxYzVjMjIwNzM5ZDk2YjRkM2Q5YzIyZDE4ZGY0OGJlNmI1NTEyNmY1ODE2MDFmZmUwZGE2M2YzOGUxOWNiYjEyNzI2Y2EwYTZhYTMyNTU2N2EwMDNhNzg0OWQwNjc4Mzk5MmViOWViOTI4NTMyOTdkNzIyOGRiYTk4MGIyNTBiYjExMGY2M2QwYjg0NjcwZTVlY2IzMTljYmZkNjEyNzhmMWY0Y2FiZjFmY2IzZjcwMWYxMmY2ZWY4ZDNjYzQyODJmY2JlNTg5ZWI1NjU5NTAzYTJkZGQ4YmJhMzhlNWVmZjA5MmRmYWY1MzlmZDgwNGYyMWY3M2E5MGFkZjU2OWEwMGJmOWQyNWE5YWQzYTYzMzA5Y2M2MDkzMTQyNDcxYTQ3OGYwYjg5OTIyODZkZTAyM2M2OGVmZDQ5OTg3ZWMyNzBiZDk0NmY2ZGI0OGY2ODRmMWMyYWRlZWUyNmQ2OGRjZTk1YTU1ZTRjYjI3YmM2MDUyMzA4MGRmNmJhMmIxOTk5OTZiMWYxZGE2OTIwZDE1NTlmNzliZmRlOWZhMWEwMmRlYWUxNDgwYzc2Zjk0N2Y5ZDIxM2ZjNDNiYjI4ODBhMWI0ZDAzYmIxNGY1YjA0NGEwZmQ4M2NlMDQ5MmY0OWNhM2FmMjUyMTFiODZmYWE1NzM1YWQ3ZmVhZjMxYTFhNzQ5MWU3MDhiNDE4MjlkNjhlMzI0MTRmNjgzNTJiNzFkMWNkMjNjOGUxMmZiMDJkYTcxMTQ4NGY2ZWY5NzUyOGEwMGQyNGZjZjkxZDRlMDZlOWJhZGFlOWE0NGRiZGIzZjc3ODA0MTc2OGQ4NjM3MDRkNzM2ODEwNDAwZTdmMjkzMWVmYjg1Yzg3MjRhNTkzNDI2YWEyYWYxZWM1YjY2NGY4NWMyMjU0ODk2ZmRjZjMxNmRiMDkyNGUxMWFhZThkNjgzZTlhMDIxOTI5ZDBhOWQ2ZmVjYjQ1OTRiMWIzZmJjMTZiMTc2ZDI5ZDFlZmIxODE5YTRhNDIzZmJlMGNhMDU1OWM1N2U5ZTU0NDlmMTRiY2U5MTM2MGRhZmRhNmE0MjdjZTRhMDk5M2RkMDMwODJkZGVlMDY2NTMzZjZkM2JkYTU2NjBmNDJmZDc3NTc2OTBkNjcwNTk4ZWM3MDk2ZjQ3NWEwMWE1MTk5NTAzNDFhODMxZmM5YTI4MWMwOTQ3YTg2M2YxZjZlMDNiYmE3NzRkZTc3YWRjMjNmYmU1MjVjYWU2Y2NjZTQ3YTBlYzQ5NzllOGJlYzg2ZjMzMmZjNmE1NzM2ZTNiOThmYjMzMmU5ZTgyNDRlNjhhMTAwNDU1ZTY0OTliYThkYmFlOThiOTJiYTNkOWM2YjRmZjk4MDM0M2U0YzhlZjRkNWE0YWFjZjhiMWEKK1NJRzogZmMwYzU0NTM4MzllYTk5Mjk2ZmZmYTUwMWQ1ODM2NjYyOGRmODlmNjE2NzY2OTQyZDUwNDBhMDU2MDU2ZGFiMThiNDQwNWMwNGFiZjkwNTljMzA4NjhkNzljOTM2Y2NjYzg0YzRmYmQ2ZmQzMGI2MGY4YmNiZDdhNjY0MDQyMDIKKworVFNUOiA1NDMKK1NLOiAgYzcxY2MxMGFkMmQ0NDNlMDI1YWQwNjI1Njg2YjEyMzUwM2U1OTAxOTNhMmJjOGNjNTdhN2I5YjQxNThkZTZjYgorUEs6ICBmYzA2YWNhYWI1M2FkMDhlOTc2MmRkMTFjZDIxMjJiMzE1OTliZDI1OThjZTZmMjQ4Nzk1ZTczMjIxOWMyZmM3CitNU0c6IDJlMDg0NjUzNmRjNmNjZTE5Y2NmODJkYzJkMGNkMjFiZDRlMWNhN2JjMzE3MDY3YWY4ZDkwZWU0ODE4Yzg1MThiYzNlZjk2MGNlMTEyYTQxZDJiOTk3OWEyODJhZTEzZDcwNmEwMDVlMDAzNGYwNmIzOWZmNGIwYTVhZmFlZDcwYjU2MWJjY2ViMWJiZDJlYzE5Zjk3NDQ4ZWFlZDRiZTYyMGUzNmE5NjJkODc4YzZmODAxNzJiOWZhZDQzZWVkMDdmZjkzZGI5YjljYTIyNjJkNWEzYzIyOWM1NGUzMGE0NWU3MzY2MDg5MmYwNDhlMzYzZjM3MTQ0ZWQxOTIxZjcyOTkyYjRkMDE1Mjk4NzBjZmUzNzNiN2U3Y2JlZGFmOTY5MjY5ZmI3MGFhNzgzZDFlNzQ0MTdjN2JhZTBmZTAzZDk1MWZkYjhjNzFjNjJlOWJlN2ZkZDVkMjMzZTM5ZjQ2ZmVkMDU3ZTQ5YjZmMzQwNjg0NTkxNDhkYTNkNDI0MTYxYWQyYzg2OTUwODYwMmU5YzBiYjMwYmZiODhhY2Q1ZjRkZmRmZmQ0NzM1MDNjZGZlZGFiYzQ0NDJiNzQzYmUwNzVlN2M2ZjYxMGU2NGZmYzJlNTMxODc3NDVjZDcxOTY1OGZjNmU2MmE1YmU1MTg0MzdjNWJkNmE0ZmViYTk0YWUzZjQ0ZjJmMjkzMDhlODMxZmVlZmVkNjc2OTA5Y2U1ZTgwYzg0Y2JkY2FjNDdlNDdkMjdjOTcxMmEwMWY2YmM1ZGFlZGMwMmU2NDE0NDA3ZTkxMWMwYTVhNTNlNTMyOGE1YTVmZDlmMDQwYWE3ZmI3MGI3OWIzMWNkMWI2ZmQ5YmQ1MDI5MDQwYmQyMmFlMjIyZmQyZjY4NzBkMDdmNDM1MzIyNjM5Y2YzMTkzY2E1NzA5Yjg4MmIwN2E1OGY5NTJhOTk2M2U1NjhmOGM1YTU4NGE2YjllMjc1YzVjMDc5NTdhNGQyY2RhYTlmMWViNDQ0ZWQxMjI0YmFjNjU2M2IyZjkyNzNlODAzMDFkNDRkNTBhZTM4M2I1OTcyMTNiMDBkYTViZjI3ZTVkMWZlMjQwY2MzYmI2NWFhNTAzMGQ2NTFiNmI1YjMxNzYxZDUzY2UwYzZkNzRhMTVkYWQ1NDc5ZjMxYzkxNWNjZjQ0NjY1OTg1M2I4OWE1MWEyOGVlODk3Njg1MzU1M2ZkMmUwMmZlNzI0MzUzOGQwMGI0ZWQwN2Q4YjhhODBiNWMxNjVjZDQ2MzQxZmZkODE2M2M1NTU3MDI2NjNhNGU2YWIyOTUyYjdlNzQ0M2QwZjZiMTIzYjY5NDY3MjFhYTYzZTg3YjExNTVlY2E4YTZhMWJjOWZkMjVjNjc2MmU1Mjc0MmM4NmJjYTFiYTlkODM3MDQxNTI0NGYwZWRmZGJlMDkzMmI1Y2EwNjExNTA5YzkKK1NJRzogMmViMzNiYzJkNWRlYjdmM2EyZGNjMzc3YjBjNmE4NjIxMzRiZjMxOTFlYzQwZmMxMjhhYzI4YWJmMjMxNmVmMTQwMTY0OWI4ZjRjZmExYTkzNmRlNzliNTMyZGMwNDNiNmQzNjAyNGI0YzM3YmJhMjkyOTBhYzlmNDQ5YmE2MGQKKworVFNUOiA1NDQKK1NLOiAgMGE0ZjVlMTY3MGYxZTI0YmZhMzdiNzNjOTk0MzMwYjM2ZTdkYWFmOTMwMTYxYjc4YTRhODQ4NjZmZjI1ZTNkNQorUEs6ICA5ZGNiYmE5MDM5ODE1OTRjN2I2NzdlYTgwMDIwMDFkNjY0Y2ZmN2NlOGU1Y2ZhZTU4ODQwY2Y3NGFmZjBkM2E5CitNU0c6IGY0YjA1YjNlZmRjYjFkNWMwN2RhOTUwYzQ2NTY1NTI4NDQwYmI0ODgzNWVlNGMxM2Y0M2Q3YTE2MThkZTExOWViYmIyNTllYTc0ODBhNTA0ODE3NGZhZWNjMTA1NWIzMmRjMDFhYzcxNTYzNDQzMjFlOGViYTY5OGYzMDJlZTE2NDNiNWYwNGI4ZTdlY2NhNjNiOTE1NjFjZTM1MTRhYmU3ODUxYjZmYjE3ZmM5NDNiZGM5NGRhMzA4YzhlNDc2OWZlYzIwZmFkZjRmYThlN2Y2MmI2ZmZiNWYxNzBkNjQ0ZWQyOTM1NWViZDIyY2IzYWExNDg2YjFlMzY3YzcyOWRkM2Y3OWJjZDQwZmZkMDhhZjI4Y2ViYzhkNzc2ZTFhNDgzZTkxMWQ3OWJjNjEzZTA5Y2M2MjFjYWRlYjAzNGRkNmY3MjM3NDc3MTk4NTEyN2Y3YTNhMWFhNzg2YTUyM2FlNmUzNGVlNDMzZGMzMGMzNzU5ODdjZmY1MGJkY2JjOTk3ZmNkNTFjOTQ1NjdhNjdhZWZiNmVmNWVkZjliZGQ2NTk2NGQ0NjRiZTllYmRmYjg4YzBlMjMxYjA3ZmY2NDA1YzAwZjgyNTMxZTk2MWJmYzVlYWQyNjZiY2MwODcxODg3OGNhZmIxZDM3NTM2ZjE4M2U0OGJmMzhkM2Y2YmU5MDAyNTJkMWZiNDE5ZTZhMmFjNTg5NjAzOWY2M2MzMTQwMWZmZjkzMmNlOTgxNGIwODVhYjIwNDE2OTcyYTJiMzUxYzgxNWE2MmRlNTA5Njc0NjI4YjBkMzU2NmZjOWMyZTBhOTIzN2I5M2Y5YmJiMmRlZWRmMDJiZmY4M2JmNmQ4NjhiNjM5OTMyNmQ0ODA5ZDA0MTlmMzFiMmYzYTQ4MTI4NWI5NDA3OGI0NzA2MWNlOTFkYWQ1ODNkZDViMTNiZDAxMGZiMzBmMjQ5NWJiNzA0MjAxODNhOTMwMTU5ZTRkYjE5M2RmNmFjZDEyNDQyM2UwMzlhNjdmMTU2ODhhZWM1MGM1OTI3ZmIyNzE4MjJhYWE2NmYyOTRiYzgwNWQzYmM3YzgzNDE4NzhhNTQxMDA5ZjMwZGE5OWZjYzAwODUwNzljZTdmYzU1ZTAwMTE2ODU1NjJhYmRiM2E5NDcxZmZkZTYxNzYzMDBlZjViMzFlMGRmNjA5YTU0YTFlZTY2MjQwNzBkYTk5Yzg3NzY4OTFmZGY2YWE3OGI0ZDU1YjFmNWRhZGZjMDYxYWRkNWFmMDBmZDNhZGVkYjQ0OGM1NTliZmZmMjA0MDY4MDQzYTVkMWQ2MjE0NzQ4NjI4YzNlYmM1ZjAyMjQzMjZjYTE4ZWYwNDg0MjVkYTkzMDAxMzNmYjY5NWQ0ZjI2MzE2NWFjMjJmMzYxOWQ0MDVhZjI3MWE3MWE5YWZiMTk4YmY2MzEyNDFkMzQ1OWI5NTM5OAorU0lHOiBkY2YzNTNiMmI5OWE0ZWY0NWYzZmRmNjUyODYzMmU4YWJkYzQzMzM0MjQ3NmE4YzJiMzc5MDA0MDRhNGUzMzNkMzg3ODE0MjM1NzU3ZWY3YWQwMzg1OGEwZjM1ZDQ2MTVlOGFiYTQ4NGZkNjRmMTExMmVjMWIxYWVkMmNiNjQwZQorCitUU1Q6IDU0NQorU0s6ICBiODU1YzgxODA1YzcwODc0MTBlNjlmOTZiMDI0MDI3MWRjNzZjMWU0YWRlMzhjNmE5Mjc4ZTNjOTRmYmVhMjU2CitQSzogIDZhZGIwMjVhNDAyNjBmNTY5ODg0YjhjYWIzNzUyYjRmMjU1YzM3M2UyYjQyNGI2Mjg3ZWJiNTEwZmEwNmZmZjAKK01TRzogODVhOWJkYjcwYTZjNzUyODk3ZTQzYTkxMTA2ZWU5YTk5YzJjYTk0ZmY3YjQ0NjFhNDRhMzkxNzRjMTdlY2Q5OWRmNDZlZWNkODFjM2Y1MjUxM2RjOWQ1NDdkYWQzNzIxYzZkNWVlMWY4ZmFjMGJhNWFmYjM2ODcwNDQ3MzllZDUzNWI4NDQwMDg3MDRjMDlmZTFlNWQ3ODVkNGM5YzNkMGIwNTg4OWI5YzIwZmMzZmQ2OGRmMTJkYmViMmMzNGY2ZjdlYzFjNmZiN2ZhODExZmY4NDZiNWE2MWZhNWZlNTUzNzllZTYzYWJjZDM3M2ZlZDAwMjU0ZWJkMDZiYzhiMjJmN2ZiZjJmNzI3YTVmYWQ4ODUxNDE1OWUyNmQ3OGRmZGIwOTU3ZjZlZmFmNTFhOGU4MGI1ODVlODM4Yjk2MjFkMDUxMDc0YTRmNTg2N2I0YWUyZjJmZjZkNjJiODViY2NlYzBiNGFhYTQ3OTE2MzczODhjMDkwMWZkNDlkY2NjY2U3MjA0ODU5ZjgxZWVmYzYzOWZlZDkyMjgwNDU2ZTY5YTE1MDliNGIxYmQ3NjI0NDQ3ZDg2MmM0NWEwYzhiMGM1YmIyYzRjYTUxMmNiYzAzN2Y1MWI3ODA5ODJiMTgzYTVjYWZhMTUyOTc1ODVjOTQ3YTI1YmU4YzIyNDBlYmZiNjg2OGVjZTVlYTJhYWIyYzIzOWM4Mzc1NGM3ZDU5NGIzNzI1YWNlZWYzNDRiYTdlNmFlZjQ5ZjdmMzEzYjBhZTgyY2NhY2FkMzg3YTZlOTMzN2YwNWY4Yzc5OWVmZTc4MjliMjdiNGQ1YjIwMWZkNWFlNTgzNDM1MTY5MDc1OWYzZWExNzVmZDQ3NDFiZTIyOGQ4MDdmYjU0ZGY0YTc0MTAzOGZhZWU0N2VkZjFmNTYxNjUyNTk4NjAxZjI3MTU1ZmM1MGQ5ZDUwMTE0MzM3MTFjMTA2ZDRiNjA3ODVhNWNjOTNiM2ZkZDFkYWQ3MGMwYzhlYWEzM2YxNTEyZTM1YTU0MTc0NWUzNzZjMTUxNjdmYThmNmIzYjJjNGMzYTM2NmZjNDE0OTdkMjk3MzU3ODE2YWU3OTVhODA0Yzk4MGU3Y2JmYjBjNzRkODgzNWQ5MjlhZTNiYjUyYmFiMTI5NjQ1NjZkNzQ2YmQyYzFkMTMyYjYyMzNmYTM0Zjc1ZTI2OGVkZWU3NzVlYjNjZTEzMmU2YmViMmU4ZDcxZjBjODc2Mjk5MWNkZTRlMjZmNzE0MzlkZmE4Mzk3OGY5OTU2MDM4NjFiYzBiMWQ5MDYwYmJjY2FjY2Y4NmY4NzQ1YWQ5Njk5NGQ1ZDAwN2Q1MmU4M2FhNWU2OTQxMjk2NGJkYmZiZTQ3ODBhYWE4ZGU0MWJlMTI5OGFiYmU5ODk0YzBkNTdlOTdmY2FjYzJmOWJiZDYzMTVkM2ZjZDBlYWY4MmEKK1NJRzogM2NhYTgxMzI3M2U3NTM1NDJmZmJmZWIyMWJjM2UyY2Y4Y2E3ZDkyMGZhYWM3YzQ5ZGMyYWE5OTExNzY4YzdhZDQzYjM4YjAyMzZkYjI3ZjNlZWFlMGIxMjA2MDAxZTY2NWE2MDcwNzhjNTIyZWQ3YTlkYzQ2ODg1MzQ2MzU5MDAKKworVFNUOiA1NDYKK1NLOiAgOTViOWM4YTZlZjgwZWJkNWNiZDQ3YTA0Y2E1NDM4NzM3M2RmNGQ2N2EyYjQ3NTU5Nzc2NWFjODlmY2Y5M2U5MworUEs6ICBmMmM5NDdiMThhZGMzZWE2YTIzZjdhYmNhMzY0Yjk4NTNhZTg1YTJiMGM4YzI2ZjBkMzE3M2MyNzMyYzNjN2ZmCitNU0c6IDc4NTViYzM5MjYzMGNjZjUzMWQzMDYxNjA2ZGRmYzgxYTBmZDkyOTRjNTQ3OTFiNWY5NTU5YjY4MjcyNTRhYTFmMjVjNTQwYjdkN2RmM2VjOWNkZjE0MjU2NjI5ZGJjZjliNzI1ZmViMzQxMmViZjM1ZjBlZjkzNzllNDEzMWNjNzdlMGYwZmI2Zjc0NTlhNzM4MzYxYTk5YWU0Y2NiMmI2MGE5OWZlOTJiZDZjM2E1M2Q2ZjQ1NGVlOTAwNWJjZWM1YWVkY2ZhODIzNDczOTJlZmNmMTE3NWU1NzgzOTZhOGQ4MDBkYWJhMGY0YzJjZjRkNDkxM2IwNTI4NjIwZTNiYWEwZjZkODZlMDYyOGU0N2MwY2EyNmRmM2IwYzc4OGM0ZTE2NTU3ZjdmYzI4ZGY4MjBjMTJmYmI2ZmZiZmVjYjk4MjlkZGI2NWVmOGQ2M2U5MGQ2OGZjNzE5NGI1Yjg4NTkxM2YwOGVkZWU4NDU2NzY0N2ZmYTNmMGQwZDMyNWQwODI2MDBjZTcxYTIzNDVjNzdkNjViZDk2MjUyMDAzZTVjMTI1YTcxOGEwNzM3MGMzMWI1NzA4MDc1Y2YxODM3YzY5MjU2MzVjYzY4ZGQxYjc1MWU0MGFiNjA4YjBkOWQ4ODUyYzE4ZDMwNjkyMTllZjgwN2I3NmQyODhmOTJjMjlhOTNlM2Q3NWI1YjJlNTM2ODE2NzFkM2FlMDE0NWFjMDNjY2FkMzE2MmU0NDcwM2IwNDAxZDNlYjE2N2NkOGRkYzFlMWE1YTMyNmI3MjhiMWUwYzAwYTk0ZDg2ZGU2MTM1MmE2NjFlNDA4OTcxNzVkMjhkMzQxZTRkMWQ5OTYyZTM1ZjRkZTE4YTU0MDE3NjExYWQwNTM1OWNlMDhiOTdiZmVkYmZiZTM5OTJlZDU4ZWQ0MGY1MTdhYWIwMWMwZmVmZThiNjM2NDNkYTFhNDU0MTUyNzMwYmY5OWFmODc0MGFkZjk4YTc3YjhkNzNhZGIwOGU2MDllMDBjZTliMWNjZGZlZjNlOWE5YjA1YWE1NmUwYmM3OWI2YmJiYTgwZGQ4ZTQ2MWFmN2NiMjAyODkyZDg5YjJkMDVhNDQ1OGFiM2ZhNTRiNDc0YjhmOGY1ODE3OTVkNmMyNzM5ZTU5ZDBmZTA2MjQwMGJhZTJkMmQ1MzRiMzQwYmI4ZTI2MTU3NzdhOWE1NjE1YmIyY2Y0MzdiYTUyNWUwMGU3MDM4ZjIyYTU3ODgyYWM1MjBiMzMzZTc1YzNjOTJhOGI5ZjBlMzdmNjcxYzk0YjE1ZGQ4MTgyYTA4ZDdjMTQzZTk0ZTkyNjJiM2NjNTU0NGMyOTRmNWYzMzVjMmIyOGFjMTE5ZmVhMDBmOTYzNGRiMDYzOTkzOTg4YjVmMTUwNTc5YzdjYzI1YjZhMWZiMGRkZTk0ODA0ZmE2ZWY2NmZmNzlmYjkxMDcKK1NJRzogMmM4YmY1NDNlMmEzZTAwNDE1ZWU0ZjEwN2IyZjVhNjY4NzE3NmY1ZDUyMTExNzc1OWNlYjU2MTc1MWJjYzc3ZDliMDhhNmE2MzFmNjQ0N2NkOTAxZGU5NjY5OWFlYmIxNjhiZjk3NTAwZGM1NGEwNTQzZWYxNGU0YjVhMDgxMDYKKworVFNUOiA1NDcKK1NLOiAgYjc4NmNjZmI1ODZkNDNiOGM0NmJiOTdiOTZjOTE4NzMxYmMyY2MxMTkyNzdmMTIzNjcxZTMwMTQ4MTU4ZDJlZAorUEs6ICA5MGM3MDA0NjAwZjNkY2U0MDlmZGVhZGM4ZWQwMThmOWVhMjYzZjc1MTYwYTc0YWI1NGY0YzIzOTlhOTBjYTc4CitNU0c6IGJhYmY0OGJkNTVlYTkxYmQwYzkzYjk3MDI0MWI1MjlkOWRiNDNkNDkyN2ZlYTVmMWExZjcwODJkZDZjYjUwYTUyYjA5NGIzMTI5ZmNkOTAzYTQ0ZmVjOGJmZGI1Yzg2YzAwMmEyYTQ1Mjg4N2NhMjVhNjBlY2ViNWUxZjlmNWM5M2RjNTk0MjNjN2FmZTc0N2M2YmY0MDdjYWNhZGVjY2Y1ZDc4Nzk3MGNiMDYxN2JiM2NmZTdmZDE3NTYzZDNhMGRjOTE2MzFmNzFiODRiZTI0YWU4MDAxMTM3NTBmMDMxZDAxZmQwNTM2NGI0ZjI3Zjg2ZjhkYzNhZDc0MDdlMWFlOWU3NjgxNTRlM2RkZTU4ZTg2NzEyOWUyNDc0NTQ3YjQwODIxNzk2NDg0NDg1OGQwNTZiMzFjMzc0OTkxYjdmMTYxZjUyZjA4OGI4MDZlMGYzMTNkNjhhMTVjNTQwMWVkNTViMmI3N2RlZWE1ODZjYjA1NGRjZDcxYWYyYWI2YWIxMWU4NGIzMGM1MzkzNDVkZTNlYjQzZmI3YjNhM2I0ODk4N2MzYmZhNzA2NTVkNTk5ZjJlMzFkMTJhZDIzY2M5NmU4NmQzODBiZmRhODEyZmVmZjNkZDMwMjQyOTI5MTY5MDcwMjI4OTFlMTE5YmZjM2VkOWMyNTU0NmNkMTlmYzk5MmQ4YTYxZTYwNTljYTNjZTc4MDJhZjExMTg3NTY2MjBiODdhNzI0MmJkODM4OTdjOTRkZDVhMzZlZDQwZmMwZjM0YzJjOTMxMTBiMzdkMTdkZDk2YTIyMDYyNTkwYmNkYjU0Njc0MmVmNzIxOGFkY2NjNWFkMjhmNGZjZTZlY2Y3MDU4MzVmNDExM2Q4MmVhNTMzOTAzYWVjOGMzODIwZmU0YjQ3MTVmMzdlMjBjZWJjMWU3MTUxOWFhMGIyNDBiNDg0MGFhNGZkY2ZiNTI0NjdmZWRkOGY0ZDFmOWJjMzNlZTExNGYzZWY4NWY1ZmRiMDljYTg4NGFmMzg4YWQzYWRmODRjNzkzZjM4NmVmZTZmZjhhNDZlZDgxZTVkNDVhMzdjMjVjZDgwZjJkNzM2M2Y0M2FlNDVlMzc3MmMwZGY4OWYxMTQ0NzkzOTgwNmMwOTZlZjkzM2ExMzk0NGYwODkwZDg4N2MyZTViYmI2YjEyZWE5NTBiMDliOGZlNDI1Mjg5Mzc3MzUyZjM1Zjg0Y2M0ZGNkNGQ3YTQ0OTQ4OWZhOTI1MWMwMzExMzQ4OTIyNTgwOWNkZjNjYjYzNDc1ZjEwZDM0MTcwOTM3MWM2ZmQ0YmI3YTk0OTQ4M2QxYmMyYjMxZGRmNGQ5NjNhMDdkZTdlYTVjM2ZlZTlhMGUzM2YwNzY5ZjJmYWE0MDYxMmE1NDY5NzRiZGUwYjczMzkxNzllNDEyNGE0NDdiZDQyODc5Y2NkYTVjOGFkMTgxOWM1MworU0lHOiA1MmJhOTY1OGExYTBiM2U5OGVkNTIwOWUzOTNlNDIwMDY2YTM3ZDM3MTRkYWE3M2Q1YzY3MWQzMzA3NWE1ZjU3MjdmZTRlMDgxZWUwZmEzYzIxMzNkYzk1M2EyZGE2MjAyOTEzNzFmMDBjY2I1N2Q4NzkyZWI1OTZhMmZmODEwMQorCitUU1Q6IDU0OAorU0s6ICBkZDFhOTc3NGY3NTg0ZDg1ODliMTlmOTJhYjY5MzlhYzQ4NTYwMmZlMTY0NGNlZTJmNmYzY2Q2MGZiZDU4NDAwCitQSzogIDRiZWE3ZDBiMGY0YmQ1OTBmOWUzNTc5ZjBjNWZhNGNlZjRkNjBhNDlkMmM0MzdhMGFhZWFkOWQ0M2E3M2Q0YTMKK01TRzogZTVkYzNlZDI2YzFmNjkzY2Y4NTI0NjVhMDVlMzA0OGI1MDVkYjUxMTZkOWUzMTU5MjIwNWE5YzNkNDcyMGJjMTBiNmMyMDYzOWEwZWUyZjBlMTQ3MjI1YjViMTllYTUxMWNmYmEwYzIxYWFjMTA3MTVhMmYyMzJmMTBjMmM4YWFkNDExMTJiNmIwMTJlNzVhNDE1NWY4YzY5MjYyNTNjYTJiNGRkYjdiZmU3Zjg2ZTkwYTUzZGJjMGNiYTg5ZTQ4NWNlY2E4ZmQyNmU1MGM3ZjI4MmEyNTM1NzNjYjBhOGZhODhjYzQ0NjIzZTgyZThmYTJlZGI2Y2JjNzUzOGFjOTJjMTFlNGM1YjFlYTVmNjg5NjZkMTVkOTNjMzRmMzk2ZDI3NTcyZjg2NDM4MmFiNzZhN2JlNjVhNTU3YjEzOTc2NjM2OGEyMDdkOThiYzBjMjA5MjYzNzBkZWEyNzA0ODE2MDM2M2VkODVmNDA5OWU3Y2Q2NmQxMmQwOTg4Y2ZjOWUyZjE2YWE1NjVmOGYzM2IzOWU5NzhjMDU4NzM3MWY5MmRiNTA1NjMxNzU2NDQxMWJkOGEzYjZmZWEwOWQzNDg3YWFmNzM0MDM0OTE4ZmZlZDFjOWZiYTdiZGVjNmZlNjg4NzZmYzczNjBjYzU2MjliOTIxMDQwMjdmZTU3NTljNWFiMzY1MzU0NzUxZTc5NjkxMTZjM2I5YTIxYjE1MjMzMGE5NmE5MzgxYWY3MzBkMTc4MjJkNzhhZDZlYTg2MDAwNjkxNWI1Y2FiNDQ3YTc1OTM3MmUwNWQ0OTVlYmIzMjhlNzVkMjQ4ZGFhMDJmNWQyZWI5NzhkMjcxMGNmMWM1ZmI4MjQ4NzY3NzBlMzJjYTZkZTJjNzMwNTY0ODkyNDE1YmNiNTNlNTk4MWQ3MDdhZGQ5NjFjNWYzN2ZkYWZhMTM5OWFmOGFlYTk2MDQ1OGQyY2EzMTA1NTNmN2M5ODY2Y2NiZThlOWQ4OGUwOGE0NDY4NzJlYTY2ZmMzMDhjODI0NTE0YjdkYWNlMDMzNGRiNzM1ZTZmMTRjODViNWU2MTlhNWQ2MDU2NDhhODgxZTg3NmM3OGRiZTA2NTcyMzNkNGY3ZjNiZmRkZjYzYjQ0NTMxMWQ2YWJjNDc2MzQ3ZWM0ZmI0M2M4OTQ2ZjlkMTdjMzY5MzgxZDFjNTY0ZmZjZmUyZGM3YjQ3MjZmZDU3Mzg3ZjBiNDRkYjhlZjk1YTBiNGUzMmE3YmVkZjMxOWU1M2E5ZTcxMjZjMjgxMWY5ODI5ZDFmNGFlOWFiZDlkNWY0MmVmZWYyMDc1ZjQ3MDUxYzYzYTRmODIwMjA0MGVjNDcyMzY4NjM4MmM2MDMzMTI3YzFmYmZmZjRiYzgyMzczNTA4NzUyZDQzMWRjNDczZjUyZGRlYWIwMzQyZGM0ZjU0NDdmOGYyNTczOGVmNjVkNzg1NTYKK1NJRzogMTk1OWJkZTBhNjk3YTYzOTkzZWM0N2QxNTgyMjM3MzlmZTY1ODcxZmEwNTg3MGQ3ZGUwZDM4MDg2NTkxMjAyYTUxYjE3NGQxYzYxODI4MDhjNmNlNjI2MzFkODFkYmEzNGViZWQ0YWYyZjI5YjA2YzAwYTU3YTNjYjY2NjM2MDYKKworVFNUOiA1NDkKK1NLOiAgNjZmNWVhOGNkYjk1ZWUxYTc1ZTMyNDY3ZDdjODNjNTk0NDc3NDJjODVkZGQ0OTljNDNjMDg2NzNlMTQ5MDUzYQorUEs6ICBhOGFkMDRiOWMxNDRiOTdmZTg2NzM3NGQ0ZmU1N2Q3ZWMwYzI0OTE4M2U0M2JkZmI1ZDUyNjQ0ZTdmYmUxZGYzCitNU0c6IGMwZDAxZGNlYjBhMmQxNzE5MTEwMTg3OWFiYjA5M2ZiMDc3NTcxYjUyMWJlN2I5M2ExMTdjNjk2YzA4NzJmNzBlYTExMzlhYjYyODMyOWVlNTY1NWZjMGFhNzdlODExMWQyZmM4ODQ3NDhjMWYyNjdiOWViMDlkYzI2ZjU3ZmM0MDJkNjFiYTM2ZjYzZjRkNTg5YWFlNjNjNzZlZWVlMTViZjBmOWUyZGNkZTRlNGUzZTc4ZmM2YzI5ZTNhOTNmM2ZmMGU5YTZlMGIzNTY2NDU5NTM4OTBkZWJmNjJkYmVhZjQ5MDUxNzhkNGYwYTVhNTkyYzE5Mjk0ZWViYTdjMjFjZjhmMWJiM2Y0NTEyMTg3Mzc2ZGU3MmYxMTM2YTQ4YWMyZGZhZjMyZDBmMzdkZTA2NDU5MjU5MmI2ZTFiYzBjNTEyY2Y0ZDJkODVkMTY3OTc4NTNhODA5MzNiMDljMmY3YmZiOWU1NGE2OWU1MWE4ZTQyM2E5MWMzZTVmZGViNDc5MDUzM2U4N2E0YjFjMGUwZTIzYTlkYjk1NzNhYzE3YWI2ZWM3MDE0ZDhiN2M0NDg2ZTE1NzI1ZjhkMjY0ZWVhMzA1MGU4MzVhZTBhYzQ0OWRiMzM0NTAyYTZkOTczNThmYTg1OTEwNmFkMGY2ZjQyOTVmMjM0NDkyMGFkZjkzNTVhNjk0OWQ4ZDE0NWMyNTYyOGE0NmExMDRjYTA5OWJkOWRkZTk0MTExOWM4MzgyMGNkYzJjYjJkMDk3MjI2OTQ5MDEwNDNjMzdjZjBhZTg3OWJlMjAzMGQwMzczMTU4YjljNGIwNzE4Mjk4YmU0NWY2MzBmNmZjZGMxOTBmN2IyOTI2ZDg3NjU1YTE4YmI3OTdhYzUwNzU3ZmNkMzY1NWM5ZTQxZDUxNjMyOTNkOWExM2Q5ODRmNTkxZjc1YjdlNGU1Y2FkYjY0YzRjOWZkZmVmNzZjYWI2OTM4MWQwZjYwYjQ4M2Y4MDRiYjNiMzMzNjRkZjhjZmZhY2IzYzliMTNmZjRjOGQ4ZDRlYTQwNzY2YTdkNDJkODI1NmM2YjFjMTFjMTkxZGFiYTFiOGVmMjE1OTNlNDdiMTg4NThlYzE5ZDgxNzM1ODY3OGQ4NTQ4ZmYxNTM1ZDVmY2Y0NDE0YjZhMTFkMzRhMzc0MmY4ZDcxNDlmYTY4MTM4M2E5NDA4ODg3ZjFjMGE5OGVkNTIxZTcyNzkzMjc3ODI0ZDZmNzQ2ZDQ5YjYzZDQ0NGUzMTJlNmQ5Yjk4NjYxMTI1ODE5NmE1YjAxMmI4OGZhYTI5ZjlhNmM2N2VkMjVkZjg3YjJkYmYwZGJkMmRjMzA4MGM1YjhkMTVhMzdkMzQ3MjkwOThlZDBkZTkyZDc1ODA3NDI5YjJjYWU1ZDcyODNjNGU1YzliZDE5NmQxYWQ0MzZjN2MzNGYzYzk0NjZlNWNiMzE5NmI0NDNmNGIKK1NJRzogZWM1YzdlODM5MmZhOGI2MWJjODI5NjgxODY2ZTQ1YWM4YmU0YjViN2I2YTgyMmMxYmNkMGYyY2MyYzhjNDRjMzNjZjgzZmE0MmQ0M2EyZjE4ODQxNDFiNGE1OWFhZmY0N2Y5YmUwN2U2MzJlMjAxODc1OTMyNGVhYzlkMTQ5MDAKKworVFNUOiA1NTAKK1NLOiAgZWQyNTU4ZTVjNTY3ODRiY2ZiNGY0ZGRlYTNjMGRmYmVmOGQ5NmZmMWNhYmYxNThlYzRhYmU2MGFmZjY2OTk5ZQorUEs6ICAxZWRjOTkxMDEyYWM2Zjg4OGZhN2U2MDQ1Nzc3ZTliYTFkNGMwM2M0MDI5MmQyZGE2YjcyMmI0YWQwYTNlZDc0CitNU0c6IDJjNjQzM2U5YmZiZjRjZmQ0ZTA3MWYxNWNlNmIxMjlkNzgwYTRiM2RlMDE0ZmFjMDM0ZTBkNDRlZjc3MmUyYzhiMGQ2YTM0ODFkN2IzZGRlYjIzNzYzMjY3MzU1MzMxM2RlYWMxZWZhZmUzNzAyYTdhNDQxMWUxMmJkMzQxZThkOGU5NmM1OWM1ZTMwYzM2ODA3YTgzODVhNTM4ZTliNjY5MDdkNmE1Mjg0MDBiZDlmOTVlZWRjNTIxNmIyOGZkNzQzN2Q4ZjRhMDI5ZmRiZGM3YzkzOGU0ZWI5ODEyZmVjMDVlYTY5MzIyOTYyOWFjZTZhY2M3YWY2YmE0YzIzOGU3NzIyZjMxMmY3ODk2YjAwNDkyMmY3MDY3ZWRlMTA2ZjhlNzAxNTRkNzgzZmI0MTI5MWYzYzdlMmU0ODI2MDQ1YjU3NDFiY2I0YTg4MzhmODdhMzJlMDA0OTcwNGU5YjUzMjM0YzIyNGZmODk4YTc1NmU1MjkxMzRjMWE5YmY1MGZkMDI5ODE5YjIyMzhiNjBiMmFlYzExMjhmMzRkMjFmOWQ2Njk4M2JlZDM5ODY1OWQ4MDhiNjdhMmU1MDFiNWExZjI1ZjcxZjBmMGMxZWIyZmVhMGFiNDJkODJmZjNiYzkzNThiYjIwYzI3NTIwYzE0NGNmMjExNmY0YTQ5Y2JjNjE5OTRkMmQ3MTA1NDY2OTRjNGY2MDJkYzQwNmUwYjBjMjdlNWY1ZTY0NjY3ZTk1YzJlYzlkZjJkNjUyOWNmNTM2MjJlYTEwYjk1NmIzNDVlYzU1YjZjMzlhMWU2ZWQ4OGFlNjZlNWI0NTcxNzk0MjVkMWE4NDkwMzdiMDdjNDZjZjVmMzYzMzAxMDk1ODM3Y2U4MTFiZmY0OTYwYmY5Y2JkMTUyMDFjMWI2NzQwYmQ3MDEwMjE0MDc0NGMzMzI3YWNhOWQ2ZDZkMTU0OTM2Nzk4YWMzODFmYTYzOWRiNDM2ZWU4MTY1NjY3ZDUzOGE2Yzc0YTIzM2MxMjRiZjYwNGZkYWQ1MTk4NGM0MTcwYjgyMDBkMmRmNzNjMjliYjFlMzc2YWZmYzMxNGRkZTNlODZhZjlkMmMyZTZjM2E2NTI0ZDMyMWJjZTkzZTIxZmM5NjU1NjRmYWY3N2QwY2QxYWNjYjRkNzYyOTQ4NWY1NjRjNzlmNGQ4YTJmZGVmYjQ2NTQ1NDAyOGM2ZGQxNDI4MDQyODA1MzcwNzQzMzYzYmIxODQ3NmEzZjIzMjBkYjI1ODljNzIxMzNjZjVlMjlkYWZiN2QwN2FhNjlhOWI1ODFiYWI1YTgzZjQwM2VlZjkxN2FmYTE0Yjc2NGMzOWExM2MwYzVlYTcwMTlkMmZkZmJkN2YzZjdkNDBlYjYzYjJhMDg0ZGE5MjE4OTVmZTQ4ZjRmZDU5NDAxN2Y4MjU2OWI0NjdhYjkwMTE2OWViNWRhOWM0MDE3MWQ1ZgorU0lHOiBhYjllMDExNjY1MjRmZDI4OGU1YzY4OWU1NmQ3MzBkNDk4MzAwMDU1MTAzMDQ5MzMzNGEzOTg0ZTIyMjNkYzlmN2E1YjkxMGM2MTc2MGM2MTU3OTkwYTRjMzM1ZTM0OGUzYTdiYzgyMjNlMDljMTBjNWU1MjBjOGQ2MWFmZjUwMAorCitUU1Q6IDU1MQorU0s6ICBiNzI3OThiODExZTIzMzg0MzEyNTZkMjQ4MGZlN2EzNjYzYWNlY2JiZTZlNmMxYjkxOTFlOWQ5YTIyNDQ3OTQwCitQSzogIGNlNDkxZGFhZDI5NmI1NTcyN2IwOTUxM2RmMDJiYTU5MjhhMzcxNzM3Y2QzNTg0MWU1ZjczNWFjYWI3YzVkZjgKK01TRzogYTVkNDYyOThiMDc5MDYxMGFlZGMwOTcwZmVhMmE3MDc1MDgxODQ3MjY2ZjIyZjEyNDc4YjkzZDdlNjc0YzZjNTE3ZjNjMTRlZDA2MTI2OWQxNzBhYzMxZTJhNjRmOTc1NGE1NjViYWMxZGQ5NzU3MzIyYzExMTMyZTdiYmVlNWYzMjgxOGUwZTMwNjNhYjY0ZTU1MmQwOWIwZmQxNzU3NjM5YjliOWQxYzc3MDAxNmI2Nzc0NjU4NzJiNjY5ZGQ0OGJlMDM4NjY1NzUxNjc0ZGQyZjQwYTk2NmEyNjc0OGZkM2U1ZGJmZDkyMjY1ZWI5MzZmNTViMDk0Mjg2YzAxMDYyOTkwNDM0N2NiNGM1MjZlMzc3NDcwYWE5NmU4MTY5YTZmMjExNjMzODA3YTUwMDMwZTdmZjY4ZTM4OTExYjM1NTVlNzI4ZWQ4NTkwYjJkYzQ1ZmVhNjk5NDVjYzBjOWEzZDNlNmM5NTRiM2U4MDEwNmE1YzkxZDNkMjJlODllOGMwZTFkZTkwMjA1OGU5Y2QwZjhjZTgwNmVhYzRmODkzZWUwNDI5OTAwZmI1NDg3YjhmZDM2ZGJkY2IzNGYyZDU0ZmM2Y2M3NGE5MjM5NTFiODYzZGE3MGYxYjY5MmJmMDQzODQ4NDM2NmNkODVlZWI4ODBiMjc5ZjhmY2E5ZDMyNDJjNTU4MzMwZjFjYTU3YzZhNTg2MDhjZGJjMDc3M2UxNjA4MmJjYTk2NGRkYzQwMzQ3ZGE4YTM2YjJhOTMyOGMyZjQ2NjA5ZTA5MmZkNjRiNDEzNGVlZTFkMDk5ODEzZTEyNDY0ODllOGVlNWIxOWIzZDNiODkxYzI4ZjMwYjM4YjZhMjhlYzFkM2U5YjAwNWRlYzljNjNmOGI5ODEzYmMxZGU0YWFmOTk1ZjE3NzlkZGVkMTVjN2E0MzBkNzBjYTQ2ZTdjYWZkNGU5YTU0MzgwNDQ0NmFiMDgwN2Q2NGYyNTVlMjAxZWY0MjhhNDc0ZGFlOGEwYTc1MDIxYjYyYWQzOTg4ZmZiODFjZDgyMjFiMjQzMDg1YTBhZDA0NmZkYzE2YzY3ZjE3YjlmODE4MjAwOTU5NTNhNWI5OGFjYmRmOTNlYmNmODBiYzljOTlhZjVmYmZmYWNiNjFhOTI1MWM1YWFmZGIyMmIxMTI5YmZjNjBjOThlMGYxNzUyNjNiZGY5M2RjOWEwOGI4ZWZjMmU4Y2RhZjBmODNkNmM0OWVjOTAxNjQ1ZWFjNWE0ZmY2MzM4NWE2ZjFhZjIwNzE4OTc2NjJhMzcyMjE5YzkzMDFmNTQ1YTJlYmI4ZjU5MTdkYjdmMjljYTEzZmM4NjFhZjM4ZDkwYzM1YzAzYWM5MTg0YzEyMmU1N2IwNTdjZGU0MjZmZDc2ZGNhNzllMjVlNjRkYmI0MWM4NDE0YTA0NTBkYTQ5MDViOTAyYWU5OGQyZGE0YmE3OTI4MDEKK1NJRzogZGNmYzZmZDQ3Nzk5ZmVjNzcyYzIwOTliM2M2NDM3MjQ2YzNhZDA3MjI5ZmM3NDBlMDUzMTFhMjA2YjE4YjAyZWNkYjAyNmM5MjZmNDljNjU1MmUzNDdmZDM1ZGZkZTA2Y2I2MzlhNzk3YzUwNjEyZjk4ZTI0NzhhOTJhYWY2MDkKKworVFNUOiA1NTIKK1NLOiAgMWZlNzMyN2VhOTA3ZDNmZjE3OWIxMTc4MTFkMzAxOTNmY2JhNGMzNDdiOTA2NTdmZWVkOThkZWVlY2RhOWFjOQorUEs6ICBlZWYzMDFiMTZmZDdiZjNjN2I2NDBiZjVlZTg3MDBhYzVhODcxNjllYWI1ZjU2MDE1YjNmNDk5ZDk1NWUwN2ViCitNU0c6IDE5YTgzMmYyNmZiYjAyMzlmMGQ5ZDI2YTJlYmRlZDI0MDNjMmE0MDZkZDFmNjgzMThkNjc3YWZhNjRmMzUwNDMzMTZhNWVmZDcyOTc4M2M3ZjlkMThjMDk4MjQ2MTQ2NTIwOTE4ODZjYzk1NGJlOWY5MzEyZDQ1ODZiZjM2ZjMwMzVhYzcwMzQzOGIwY2ZlM2RlYzUwNzc4MTNjNzEwZDE0NDc1NjFhYjYxNTdiYzdhZDVlYWI1YjBjMGFmZGNjOWRiNzdlNjZmYTgwNzEzNjY4MjljNTAxMDk2YzNkM2E5MzgyMThhNmU0MjA3MTA5ZDFlYjgxZjdkODhiZDZmYmIyYWVmYjFhZGVmMzU5NGFhZTU3YzQ2YjdiOTg0ZGI5NDY4Y2Q5NjJjNjE4NGZiOTc2ZjBlMmFhODQxNTJkZWIxYzc2YWVhNzVhZTQ4ODQ0Mjk0M2E4MGJhN2Q5OGEyOGNiODY0YjVlODdjZGIyODRhZDZlOGQ3YWFkYzZiNzVkNjlkM2JkMzQ1NzgzYjNlYmI2NzZmZjk1ZDdiNDE5MWU1OTk4NTFjOTYyODgzNWM3YzAxMTk3ZTdjOGY4NmY5YzhmYjQ5ZmUzZTI4NDU4YmE5YjAyMzYyMTliZDQ2YzI4ZGY2NTMyNDk2OTk0YWM5YmE3MzNjMDEwNWEwMmEyNjlhMmJlOGI3Y2I0MDA3NGI4ODE2MDJlZjkyNDcwNTJkZTlkNjM3MDg5MTg4YmQ0YzE4NWNjYWUyNThhMmFlOTg1NmEyY2JmODQ1MTExNzY4M2NlMzQxZjgwOTZlMWQ5MWU4NzRjNWNiOGE0ZTA5MzllYjc3MzczYTlhMGViNzkxNjQ1YjhmNTQ2MDQ3MmQ2NjlkODAxNDY4MWE1ZTc3ODcwNmNiNTU2NmJiZDQ3MjdkMTcxNmIyM2M2MjBkMjI4YjVkNGRjMmIzNTJiNDIzOTMxZjhhN2U4ZmI1OWVkYWQ4YWU0MjQ1ODcyOTg2MWE5OGUwYzg1MGE3N2VkNjU1ZTdmY2ZlNGZlMzZmOTc3MmRmMWFjM2M2NDNhZDMxZGI1NjMwZDU3MWRmOWZjYzljNTBkZTc2MjIxMDg0MTE5NjJiYmY3MmRlZmJmNDllOTk3MDU5YzczMTFiZDlkZGQ1YjMzOGE5ODUxOTM4ZDM3ZTdhMjYyMTA4YTI5MWUyMDE2ODAzYmJlZmY0ZjljNzc2MTI1Y2ViN2U3MjcyYjUxYzdjMzM0NjFkODA4OWY4NDA4ZDhkZGE5MjUwNmQ1MDAyMDg0ZDRmNDE0ZDhhNGQyOGQzNjk0Yzg4NjMwZTMxODAxOTkwZDk1MjcxY2VmNDdhYTVjMjYzZjk3YjdkYWNhMTc4ODcwMTQzNjMyOWI1YmZhZjcyNjUzYzE2NmRiMDg3NzA4MTMwYzVjMGQ3OGNjNGU5MDY0Zjg2MDY4MDI3MWFmZTRjNDA5ODUzYzJmYWQ2NzUKK1NJRzogOWM3ZmRiNTNmZDYwNmJjN2M5YzIyM2ZlOTQzMWUxYWQwMDk1NDZkMDAwOTg4MTJhNDk1MTk3ZjI1NDFlODdmOGQ2ZjVkYTIyZWNlZmNiYjdkYTU2NjYyYTczMDlkMTBhNmM0YTRmN2YyOTkyNzhkNTFiYmQxMWUwY2MxYjg3MDkKKworVFNUOiA1NTMKK1NLOiAgNWY5ZGNkOTNmYjE0MDYxMGIwZTIxMWIzOWFkZGIxZWI4N2JhOTc4MDQ4NzdhZmJjYzM4MTM4OGNhZDY1MDg0NQorUEs6ICAxODJhMjM3ZDg3OGM1ODE5MzMzMzJiNDE3OGI2N2VjNDA4YjMxOTRkNDRlNGU2OTM5MmVmODAwYjI2N2MyOTQ5CitNU0c6IGMzOGI4NzRkM2ZmMDEwZmZmMWE2NjEzYmZhMTM0MjU3YjI0ODMzY2I1MzZkZTNlNzQ5OTJjM2NiMDFmZTNiYmRlZWQ5N2RjM2M0NTk2ZmE0NDA2MTQ0MmJkMzFhOWQ0YWE4YzgxZTM0YWQ5ODg4NzE4MjA2NjM1NTA5YjEzM2IxYmE2OWNiMWFhMGU3NWM3YTE4OTNjMDgwMTYxZDI2MTUyYWNlZjQwZjZlZjQyMTBlOTUyYTQ5ODI4YjVjZGRlODA0YmNiNTM2Y2RjMzQ5YThlODMxYjRiNjlkMzc4NWE3NmJkOWZiMjcwODA1NjU5NzJkMGI4ZmJkMTZmM2Y5NjBhNmJmM2JhMGM1YjljNDA0OTY3ZWMxYWZmZTU5YjhjNGVjYzY1MGZkZGUxY2IwNmI3MDU5NWFkNGQzMjVkYTBmYWI0YzU1NDBhN2E4ZDVlYmVhY2M0ZTk5YmQwZGM5NmJkZTgyZjJiZDdkOTU4NjMwODQ2NWU1NWIxY2MzODhkNzUwNDg2YmRkNWM3MjY0ZDU0ZjU2MTRkNDg3MjZkOTllNDRkNzc3OGQ5ZWQwMzIzOTU4YWI5ODU4ZTJiMjVkZjJiZjk5NGJhM2U2MjVlMjgwM2I2YzY5MzFlN2E5OTI2ZjFlNjFlZDg2MjQwM2NlMzkyYWI4M2I3ZDFiNjYwODVkY2MwNmQ4MmRiZjE3NmQwMTZkOWY0NGNkY2I1MDcyZDAwNDU5MWU5MmQwNDU5ZWYwNWE1MWI4ZjU0YmExNzI1MWUxNjYyMWViYjc1M2U1YjE1OTBjMDJkMjFlNDBmNGI3NWVlZTQ2MDI4NjBiOTc0MWZiYmMwZDJlMzg1YjhkYWNhODNjY2U2OGMzNGE5OWJkZTZhNjBkMTNiYTY0MzQ3ZDBhMzhkNjRiMmFkZTI1MGYzODg1MmM0ZWRhMmUyZTRmMzAzYzNkZTFhOGE5ZDRhYjMzMDBjOWU2MzYyMjg3OWZjODUzN2ZmYzYzYjE4NTYxZmExZmZmNjU1MzEyNDE1MTVhNjJiYjliMDhiODBhZjM3NjY3YTYwMWFlMDQxNzE3OTNjYzgzYjExYWRmOWMzMGNhOWY0ZGFiYzdiNDAxZTE2YTE4MTRjZmM3NTAyNDhjYzJmNzdlMDNmOWM0MzM0NDY1ZmY2YTJjODNjYmI1NmRiNGI3MzQ3NTEwNDM4MzJjNDAwMDk3MmVlMzIzMmY5MjlmMjMzMzdlYmE1ZTY1MWUzNGNiZGRmZTY4YmEyMTliNjMyZTdhY2RiZDQ2MzBhMDMxYmYxNjg5ZmJiYzdmYmJiMjEwZGJmMjVlZTg3ZTJlZjJiM2NiYWY4ZDllYmQ4ZmM5MmMzYTU4ZDNjMDViMTM4NWE3NmM4Nzc5MWQ3Y2QzNzQxYjcxYjZjMzI5ZGU5YTlkNzUwOGEwYzE1NmE5NTIxYTkwMjA1NjMwOTlhODJiODc3MGFlOWE5NDRhN2U5NAorU0lHOiBjMTkxNWUwNTJiNjY0Nzk3ZTBkNWZhYWRjNzhmMmEwMDlkNmZiY2ZkZTAzZjNhYWFkNTliOWY0NTg4ZTdmYzNiMjE5OTBjNTIwOGQzZDc2YjRhYTk1YmQ5MzRlODhkM2M5OGM1OTE5MzBhNTlkZTJhMDU2NzAxZDlmNzU3NzQwMAorCitUU1Q6IDU1NAorU0s6ICA5MjVlYmUwNGM2ZWFjNDliMjY3MzhkNmMxMzAwZjMxZmQ0ODI4NDc4Y2JlOTdkYWIxOGJiODg5NjQyZTFlMTEwCitQSzogIGNkNzIzMWI2ZWI3NGUxZmU5ZjkyNmYwMGQ4ZGUyYzUxM2Q0OTY0MDUyNWIwNzk1Y2FiODkzZDBjODkyOWUzZTAKK01TRzogZTZjMGJhZDIzYTkyYWU4YjFkODU3NzgyODgxNTdhYzZjNjE3YzYzMzYzMzQxZDc3Nzg3MDM0MWJiMTBhOGQzZGZjODliZTRmNTVhZDRmNjRlODNiZjI0OTliNjlmZGY3MjE3NGQyODQ0ZTZiZDI4OWRhYWEwMzVmZWM1YmY3Y2Y0NTUyMjExOWRjN2E4YzgxMWQ3OTU3OGM1YmIwZjZkMzRkYjUwN2FkMWZiNmRiZmZmOTk3Yjc5ZGFjZmIzZGE1MGE0MTVlMzUwYzk5OGMwYTAyODAwYWE1MGZmZGZlNWY0Mjc2ZDhlNmJiODJlYmYwNDdmZTQ4NzExZGFmN2E4OTNiZGM3NTM3YmRhZWRmM2RjYjRkZWM1ZDI0NTg2ODExZjU5YjI1YjE5ZTgzY2E2MWU1NTkyZmVkYzA4Y2E1NDQ3M2NlYTJlYzEyMWJhYTBlNzdmYjJkOWQ3NjU2NTdkZTY3OTgwZWQ1N2YyZjE3Nzg1OGI2ZGVjZjg0ZmY5MDIxMmQ5NjQ3ZjQxZWVkOWI5ZDBlYTNkOGQ2MjFlNGJiNDA0MWFjYzUxNDZlOTZkZmNmMTRlYTk2MmQzMGM4Y2NiMzllYTJiZTk1OGM5Yjg3NzQ0NTFiZmViN2RkY2U3MTZlOTQ5MjNjYzg1ZmJkM2EzMTMwNzgwZTJiM2IyYmI3NmRhNTM0MTkxMmE0ZTk5NGNhZmExOWJiYTE5NzMyZjJlYTQwMmQ3MWQzZDhhOTY5Njc5YjlkMTA0MjQzZDk4MzljNjllZTllOTU1ZTFjNjA0NDk3ODhkMWY0ZjY2NTFmNGJjOWI5NGQ3MzUyMmVjMGNmNzJjYWNmY2YxOWYxZjAzYWQ2MjMyMTA0YjU1Y2JiOGI1YmIxZTIxMzQ0NzEzZDQ4Mjc0MmQ2YWJjNWE5NTcxNzRmNjIzYjg0OTUyNzJjYzFlMmI4MzE1ZTVjODBmOTQ3ZjUwMGM4M2Q4NTQ0ZjdjZDRmNjUzNDg5NDllZjQ0MjBkN2ZjODMxZmE0YWUyZWUxOGRiYmE2MTQ5MjVjZTFkNzY3YzE3N2E2MjZjNDUyN2E4MTU0YjU3MjkyMTg2YjA0NGNiZjkyODk0MjUzYjAwZmQ5MzQzZjllNjk3YjE0MTJlYmE0MzU5N2ViNzJhNjY5YWFhMmQ3N2VhY2I5NjhjMjBmZTE5NTA1YTM4MDc0MTU4NjIxYjYwNmY3N2Q5N2JjNmViZTUwZTc1ODkyOTNkYjI3ZmM3ZGZlNjMxYTRiZWU4M2IyMjY4MmE3NzMyOGMzNmQ5ZDdkMWQ4OTFkNjUyMTdjYzQ3ODY0ZjY4MGRjOGI1ZmQxYTAxYTBmN2MzNDQzMGY3NzA2MGI2OTFhMWFkMjEzZDIyODY4ZTYxYmJkMzhmNDNmMGM4YjRkYTY4YTU4MzE4NjY2YzA5OTc2NjE3MGMyZGI3NjZhYWY0MTdmNTU2Y2M5YTBhMzkzNGU5ZmNlZjEKK1NJRzogMmM0ZDY5YmVkNWFkOGI5NTg0ZDg0OWNmM2RmMmJhYzcyMjgyYjVmMzBkZTI2NmIxNGY1MzNjYTk2ZTk1NTBjNGI4NTRjMTU0YmRjMTdhYTg4MGNmMDAxYTY0NTRmZmFmYWEyZTUwMTc4ZGUyMTIxNmVkMTI2YjYzZjc3ZjJkMDIKKworVFNUOiA1NTUKK1NLOiAgNGRkM2I0NzhlYmRjNTk0NzJiYWIxNGE4Y2RkMGMyZmRhYzU3MjNlZTA0ZGQ4OTE3YzdjZmU3YTUzNjQ4NWM3NworUEs6ICA1YmNjYjM3ZTY4YzIzNGJlYWQ0OTMzN2RlMjA4YWZiYWY2MTE4MTFkOTY1ODU5YTA2ZDMxMzAxMjQ3ZDY2YWNmCitNU0c6IDFjZGJkMjg1NTZlYzQ0ZTg3MDVhZmRhOTJiZDVhNTNmOTVkOGZlOGIwZmZlNDYzMzczNjMzMzE2YzUyMjc0YzExZWRjZDYxNTUxZTMxOTllNDk0ZGZmNmQ5MDZhNzM5ZTdiMzI0MzAzZmM0NzgyN2U1NmRlZjBiZGNjNDZiODE2MDE3YzcxMjMwNTM3MDI2M2JhYmQyYzcxYmU0NzhmNDFjZTMwYjFkZjYzYmVkZDNiMmU2YTUxOWM1M2RmNTE1ODUyYzQxMzdiYzFhY2E0OWJmNGM0NjMxZmQ2NTY0NjU3ZDExY2Q4M2VhNzNjYzNkMGNmOWUzYjNjM2U3Y2E5OWI0ZjEyYTljOWI2N2M4Nzk4MTQ4ZTBhMGRjMWVmOGJmNTg2NDJhMTRmOTdhNTcyMTM1NTE0YzEwYjE5YWFiZWMyNWE5YzZiMzVhYTQwMzRhNTdhYWUxYjZkMDViZGUyYjYzMzBmMjUxZDc4ZGIwOTkzZjBjYTRjMjYzODZlMzQ4OWEyMDkyODMzYjhhY2JiYzRmNDkxN2ZkMzA5M2RmNTgyZmZmNzFlY2UyMTlkMzY3MjQ1NTU4MjYwOWMwZGI4ZDk2YTcwZmM4YWVkNjc5OGRlNTRiZmIyYjNlZTZjNWQzMjhkYjE2MzU5M2Y1ODAxOWYzOGYzMzlmZDM3NTNmODk2YTRhMmNjYThjMTQwMGE3N2VhMzkxOTM1ZjM0ZTI2MzljNTYwODYwODEwYmJiZTRiZTFkMTZlMDEyYzExNDkwYWE4NGYyOTY0Yzg3N2MyOTNiMzAwZjQzZDM3OWYzZWJhOWFmMzkxZGVlNTEwODU2YTRkZGNmNzZlMGEwYWUwNmE2YTdjMGY5YzVlM2ZhMWI4MzU0ZmU4OTc3YjRlYTNiMjA2NjE0OTFmYTQ2MTNiYTYyZjU1NmQ1ZDVkYTgyMTNkMDEyMWRlMmM4NzI1ZGYwYWFlMDQ4YWM4OTFhYmJjMDZiZGNlZjNjM2VmZmRmNWEzMTc0OTQ3NmY4MTRkYjk0NTc5NDVmMGQ5MWUxNDA4MDA1NmJlOTIxYTE2YWE5NjRhOTI5ODIyMWIxNTc1OTQ5NzNlMzI5Njk5OTMzMTBjODcwN2UxOWYzMTQzYWJjNGZkYTdjOGFkMDE2MGFjZjAzMWFiYTY1MjgwMWFhODFhMDE2YjMxMzcwMzllMjdkNjczOGQwMjgwMGE5M2E4NmY5ZjU1ODVjNTE4ZGZhOWU3ZDhhYzcyN2YzNzQzN2U1NmQyNzg4Mzg2ZTExNjUzYTA0ZTE2NTE2OWY5MDM5NzJhMDE0ODQ3NTFlN2NiMzg2MzI1OTBlYzgwZDVmY2U0NTQxNjAxYTBlMDk1Nzg1YTllZThkMzU5ZWRmMjZiOTk0NmU3OThkYTU5OThjYmI3MzZmOTRlYjcxMzQ2M2Y3OWY1NjE3NTliYmNiNGM0YWM2OTNjYWJmMmUxZTAzNmIyZDBiMDg3OWEKK1NJRzogNTc4OGU3OWU4NDNiZGU5ZWYxMWE5ZGZhYzk3MDE5NmE1NjdjNjMwOGMzNDhlNTE3NGIzODc3OTUwNDZkNTkwYTQ3NDkxZmQ3MWQ5N2FlYWE3OGMxNjE1OTcxYjgzNDkwZTg1OTI4MjBmOTU5MmFjNzYyNjliOWQyYmE3MDI5MDEKKworVFNUOiA1NTYKK1NLOiAgMDc0ZDkyMThjMTIxN2U3NTgyM2M5MGUwMTA0ODRjMmFkYjg4ZWNjY2QyYmRmMDEyMGFhM2VkZmZjZmNiZDRiZgorUEs6ICAzNzM1YWQxOTE5MDMzZDE2MTdiODViZGEwNGIxNjEyMWRhMWQ4NjFiNDA0MTU0ZmE5NjFkNDk0NmU1NWVjZDgzCitNU0c6IDZiNWFhNDBlOTE2N2JmZGI4NDdkYWE3ZDI3ODZlMjhlNzUzM2UxZDZhYzUzYmViNmY2OWI1OTUzNzk1YTJiZjU5YmJmN2QxNDE5MjY5NjhmNTA5NjliYWQ3NDJhNGZiNTc5ZDMyNTBmYjFiZTRjNTdlYmY0ZjkxMTJjNzBjZDlmNzJhMDBkYjFjODg5NmZlMmI1YmRhN2M3MDMwZjQ5N2MwYjAwMWVhMjViYTBkNDQ3ZjA4YzM2ZGI4YjkwN2MyZjJhYmJiYjYyMGQzZThhMmM2NmU0MTcxMjg1YWRjYWFkZDFjMTRmZTIzOWJjNTk1ZjA5ODM5NmFhODc4MGZmYjgwZmUxNDQ2YTA3MDAxZWMyMzRkODJhYmRjZDgxMDA3OTM5MTViMGIzZjgwZDg0ZTIwZTUxZWFiYzc5NzgwNmYzYmU4MTA4YTRmNDM3NTUwYjA2Njk0MDUwYTgyOTMxYWM0MGMwYTQ4OTc3ZWRmNmNlZDI0MjhkN2NmZWE4MjA1NTA2ZGU4NjQwODA2NWQxYTE5ODcwZmEzM2E3MDgxMDM3YjNlZTQ0OTFiNmU3ZjNkMTBiMTRhMzBjMjA5MTU5YTFjODEyMzFhMzVmMDM2NWI0N2QzZTBkYTA0YTMyYzk1ZDk4MzMzYzQ0ZjU3MmNkYWFhOTA1ZDA2OTE5N2Y2ZTg2MWI1ZGZjZGZiOWRiNmM3YjBkMGNiMDBmMzdjOTE2YTFjNGMwYjg5ODViMDlmMzM0MDk1ZTEyODNlZGZkZDRlNjJhMjk0MTA5OWEyYjY5MzY5NjYwNGQ5OTQzMTFlM2Q1ZjYxMDY2ODNlMWQ3YTFjN2U1M2RmN2I3OTA5NDdhOWE4MDFhMGNjZDQ4NDM5NWY2Y2JmZDljYTRkOTgwNGYxOGQ1MmJiMGY5NDZkMWE4OWY5N2E2ZmIwNjgwYThjNGMwNTdiNjA2MmIyYjlkZTdjMDM3NDg3OWI4YTZhNmQyYzEwYWVmNzgwNTA4ZWIyOGJiNTY5YTA4MzUwOTQ0YzgyZjZlZjI4ZGIyMzA0ZGI2OTdjM2FlMWFmNDNhNTAwYjBiOTc0ODAzZTlmNDZlYTJhMDJlODVlZDI3ZGRhNjE2ZDI0ZDZkYjNjYzRmNWFlZDgyNDBiMWFlYTNkY2Y2OWRlZTVmMTRmOTVlNmU3Mjk4N2JiZTYxODliYzIwNDVmMGQ3ODNhN2I0N2JmYzE5ODMwYmM3ZjRlNzk4YWJlOTAyNDVmYmQ0M2YzN2MzZjAzNmQxY2JmMWU3M2RjYjFkOWRhYTg3Mzc5YjExMDY5NzM0ODFhMjE1YzFmNGY0NmMxNjAzYTVkNWNkOTdiNzA3NmYxZjVkYzc4OWFhNmE3MWU3MmVmNTRlZDMyOGE0YWI2NDM0MDUzOWZmZDE2NGQwZWM2NDVmMzIyZDFiYzM3MTEyZGMwOGQ4YzgwNzlkMTlkMzdhYmIyMzUzZjQ4YjVjNDkyZjgwNmVkMgorU0lHOiBiMWY3MWMzYmQxYjZiZWM0MzMzN2UyNmRlZTY1NWE4ZDVmNGE4ZGFkODRhNTExODRiNzc1YjY4NmZhZDMxZDgwMjllMzg3NjkyN2Y5NTc2ZTkwYzM2MjQ4NzVmYzAwMjlhNWMxMGE4YTBhZjc1ZDdhODgwYzY4NDRhNGE4M2EwMAorCitUU1Q6IDU1NworU0s6ICBkMmVhMmRmZjdhZjBiYTJhNmJlZDdmNmNjNjhjMGRmNjY0YTZiMTBjZTgwMWM0MmVkNWJiZTYxN2JjYzhiODRhCitQSzogIGFiNDQ3MDYzNDQwMjZlZDM1ZTIxOTgyOTY0ZjdiNGRiYmJlMjA3ZmQyN2M0Njc5OTcwMWMxOWE0ZDg4ZDFkNzIKK01TRzogMDNhYjVkYWViYzZlNzBkMzUyOTc3OTMyYTAzMTA3ODc5YmQ1NWRhZmQwYzZiYTdhZDk2OTdhMTdiMTI3YjNhNzRhM2VhZWJhYmQwZjhlZWViZmMwNDgzZDYzZmVkZGU1MmRlYjQ2YTM3NTI0NDljOWM0NDk1YzUxYTFjOTFmNTdlM2FkMmU2ZDAxYTEzZDBjNDcwYzUyOTFiOGU5MTIyODgzNDA5NzBmYmI4NTc4N2I4YjM3NmQ3MjE3NTI1MGU4Y2Q5MGMwNzg4OGJmZWY1ZWJmNTA4NmM4ZmYyYWJjZGQxMmQyMTRiOWM0NWQxMjA4NzNiNDYwMmU1N2E2YWFiMGI4MjhkMTA4NGRmZmFhMzY1MWVlMzU2NjI2OTViN2YzNDMzZjRhYjUzMGMyOWFjNmNjNWJiNDNlY2NkMWI2ODk4YjllZjdhZWM2ZDVhZWM2OGQ1YzExMTRiYjVkZjc4MjA5NjY1OTRjOTk0ZDY0MDg5MWI4ZjJkYzVkMjU2MzhkZTQzNTQ5ZDg2ZDM0MzA2ZmYzZjU3NDU3NTExNjQwNWI5ZThlMjg2ZWUwY2Q5NzhhNzYwMDJjNDQzNWZlYWFjNmU4NGVhZTE2NTRmMzM5YTU2N2Q4ZDA0ZmNmYTNlYjZhMDRiOWFkYzY2NjAyMTMwMGU5ZWU1OTcyYjNkZjVkNGQwZGQ0YmY3OTIxZGM5OGRlODJjZWYyZDFiMWQ2MWI3OTdmYzk5NjhlMTE4NDg0YzQxMzQyNDE2ZGRjNmFkYzRlZTVkNjg3ZDk0YTQwY2U1NzJmNDJhMjA0ODY2OGMxNzVjZjdiMWYyNGM0ZWZkMDIwNTU0ZmM2ZjY0MmUxNGE1N2JhZWMyM2U5NWMyNTE0MzA2ZDBhNmQzMzY0ODg0MTQ5N2VhYzQ4ZWFiZDk2ZDA0NzMxYmFiMDhiZjVlYTlkNDNlMGNmOWEzN2ZhYWZhNzMyODY5ZDY4ZTdkNWZlNjk1NGY4YTMxOWVmNTVkYTFlMTc4ZTQzZTg0YTNiOWFhM2FkMDBjMjliMWQxNjExNjNkZjRiNzlmMjg4ZTkzOTFkNzBhMmY4ODEzZDY2NjIyZThhYzMzM2ZhNmFhNTMxMWVhYmVjMzgzYmE0Y2MxMjI4MTVkZTAwODg3N2VmYmU2ZTEyYzMyMmM5NzU0MzRhZmFkMTczZWJlMjQyMDNkOTE2ZDU3NTc4YmQyYmNhY2M3OGY2ZTI1NjQ1MTNmOGQxMTNhODMzYzJjMjI2ZWI5N2JhMmUyMzM2MWE1ZDAyNjY0YWIzNzdmOTY0YzQzMDBiZTJkNzdiNjJkOTI0MDgyM2EwOTg4NGRmMzA3ZWZmM2JlNTY2NGQ3MmQxMWFkNTEzZTFiYzU2MTBkYmZkMTAwOWRiMzlmMGNiZmU0NzA1NTVlYzFiNTZiODcxNjcwNzkzZDNiNzA0ZmIwNmVlOTUwYjFhZDJhNGQ3Mjk3Y2E1OGJiYWQ4MTBjM2ZhZDQKK1NJRzogOWFiZGI5ZGQyYWI3N2I2ZjVlMWI5MWJhMGI2MTNmNWYzNjBlZmI1MDBkM2ZlOTkyOTBlZjdjYTE0YmQyYjMzMGY0MDVhNGY3ZGNkYWVmNDkyM2QzMTExZDQwYmYwMzIwMzUzMzg2ZjYzNGI0MGRlNmYwNGRlOTE5MGFkNTFjMDgKKworVFNUOiA1NTgKK1NLOiAgN2E2MGNkZjE4NzA0NjBkZThhZTc3ODExNzZkNTEyN2U3MTIwN2ZhZjJmMjEwYmQ0ZGM1NDczODViNjY3ZjJmMgorUEs6ICBlYWQ2N2E5Y2YzNGQwZmYxNGU3OWFmYTQ2ZjJkYzk5NmU5YWMwZTNlMDc2MzIyZmJiNDAwOTc2N2IxMzNmMDFiCitNU0c6IDlkYzAyM2E1MjVkMDFiYTM1MTM3OThiNzM4Yzc5MTYyOTI2ZWJjY2MwYWRmMWU1N2FjNDdjMjBkZWE2Y2UxMzc1YzNkMmFhYTE3MzNiN2YwYzNiZDk0NWMzMzVmZjM1NzYxMTJiYmRjMTBiNjc4M2JhNjU0ZThjNjEwNDdmMjc3M2FhMjI5YmY4NDY5MjJhODljNmE3M2Q1ZjEwNTFlOGQ5NmVkMzZkN2Q2NzQ3ZTA2M2E3YWM2MDJmMTlmYzUyZTAyMWE0YmJjMjhiMDM1MTRmYmQ1MWM3YjNmZDY1OWYxMmQ1NDdkMDU5MmRkMDlmODczYzllY2M2NDM5YzdlOTMxYWQwZTQ4NTZiZTMxYzYwNWRlZjJlZDliNWQxM2M1OTQyYjJmMzI1Mzk3ZGFjNmM5NzYwZTliMWJiMGMwNmY3MTNjYjkyMGMyMzRiY2NmZWU5ZjBiODVkZDAyMGY3OTg4ZjNiZTFjYzY2ZTllNTFiYWJlMmZlZTIzN2ViODRlYzdlZmY5NDA5YWE5MWMxOTRlMzBkYjFlMDY1MDE1OTU1ZGU5NzQ2YmJhMDNmN2VkZjlhNTg3NTEyNDA5YTQxNjFmYTc3ZWE2MmNjZjQzMTYwMmRjZGNmMzY1ZWQ2YmYwYWVkZGQzMmY3Yzg0NGUzYTM0ZDI2NmUyODM4MmY0MDYyZmQ0ZDZmODIxNDI1MjEwNGQ2NDNhOWJmZDgwNzE3MTYzNzFjY2JiNTRjOGNjOGRiNzlhZGQ2NWJjYmNlYTBkMDgwZDg0MDI4MDNmZTIzMmRmNzBmNzY1NzcyNDdhNjNkNTU4M2JiZDU2NDI3NjdiYzYzZjNjNWE3YmIzYTQ3ZWIxMjk4NGU0NTQxZjQxZmRiNTU4NjlhMDhmYWRlNjZjMjBmNjlhNWE5ZGUyNWY2YjM2YmExOGFjZTViNGFjMzM2YmIyYThlYmY2MzBhZDAzZThiYjg3MzFkMDFlODRiOTFkMDI0ZDExNzQ1OWE3NDg5MmU5M2Q1M2I2MWU2YjgwNjhlNGYwNGI0MTgxZjAzODdiNDU2N2NjZDQ1ZTFiODcxOGEyZDdkNzg3ODcyZjNkY2Y4N2ExNTkzNWFkN2RhYWE3NDRlZDY4YTI4NjY2YTUxYTEwZDM5ZmMxMzljZGZlOWE2ODczMDc2ZjdjNDI1MDA5YzM4ZmFlZTEzNWU1MTMyMDdiMDZlN2JhMzU2ODVmNTA3MmRhMzRiNjA0NWI1N2NkNWQxYjFhMWZkZjAxN2I4YWE4ZWJkMjc1MjJiYzk1ZTQ3OTA4NzM0ZTQxNzIyYTc2NzkwNWM1ZWNjMzBjNzI0ODFiNmMxMmJmNGFjZTk0ZDViYjNhMzE1NTY5MWI3MDc1YjQwZWJmNTk2OGZkZDkwM2Q4ZmQzY2M1MGI4ZDY0NjQ4NTliMTBmNzU1MTMyYzZkOWI2ZGFkMWQ2ZjE0YzQxODViMjY0ZDM0OTdhNGU1NDk4NzdmZTk0NmUKK1NJRzogYjJlMDgxNDJiZGQ2MmI3ODY1OTJjMDkxZjVmZTZhOWI3ZjMwY2UxMzRjM2IyMzZmYmM2ZGZlNjczNGY4ODI3MGFjNThmNmQ3NGI0ZmQ5OWMyMjQ1MWNhNDY1YTQyYzAwNmRiMjVhZjIxNWVkMjQxYWYxMTg5NjI3YzYwNTBmMDAKKworVFNUOiA1NTkKK1NLOiAgMzM3OWQyNWMxMTE3Y2Y4MDJlYzc5YzA2NTc1ZDE4ZTZiZWNlNGM3MDkzZGQ0M2ZkZWUwMzY4NWM3MGIyZmE5ZgorUEs6ICA4NTI1MTU2ZmUyOWZjMmZiZjY2MWJhNTAxODJiZTIwYzg5OThkOTQxNDkzZDU5MzNkY2E0ZDhiNDFmYjQ0MmQ1CitNU0c6IDdhY2RiMzlmMTIyNmJkM2FiZmZhNTAzNTBhMTQ5N2Q3NjFmOGYwYWFlZmJmYmJiYjkyNWZmNTYzZTM4OTc2YWExNzJkNDA3YjYxZmZkZmIxY2Q1MzhhNGNkMDAwYjU3ODE4YTBiYzkyYzBlMGNkMGE1YWJmY2Y1NzgzMDBmNWY0ZTZjZWZhMjY3Mjc1ZDE3ODQ1ZGE3MDY2ZmQ0ZTE4MDEwMDI3OTYwY2QzOTVlNjgyYWQ3MWFmMzQ5YmJkYWQ1ZWJhYTBmMTFhNzc2MWUxOWVhMWJlZjY2MTA3NDMxNjRiMTcxNDE0NTNiNDcyYWUyYzhmMzZjZTZiMDgwZjFjMDc0NTM1MjQ1NGNlNWFlYWUxMWM5ZDc1ZGUzYzA4MDA0MjY1ZmM0Y2E4MGQzM2IyNmVhZTE0MDBkZmQ4OTc3YmY3MjNhNjE2ZGFlYjZkNDIxOTkwMTBiNzNlMTkzYWI3MmE1OGJkZDI0OGE3ZjQxMTFjYTUwYzFkZTY0NmJmZWE3YjRkNWJhZjBmOTNkZDk3M2VlOTM2NDllMjFlYzBjNmM0ZmNjYThjZDZmZjY5ZGY3NjE2MTIwMjFkODVmZjFmYjJhOTUzMzdkYTQ4MDVhNzZkMzQ3ZWU3MWVmMTljMGRmZmI1OWYxNWY2NTAyOTNhYmI5NzIxMDUzZjc0MDY5MDVhZTY4M2Y5NmM4M2EzYTc0NDdiMWFmYjE0ZTEyMDhjNjM5ZjM3YTk3NTBiYTIxZGE1NTUyY2MyMDRlYWM0NTNjYTAzNjI4MmY3ZTA5NjEwOTNjMzllYzExODEzOGRjZjcxY2YyZDI4ZmI5NmEyNDk2MmI1MmQzMzkzZjg4MDY1M2JjYmEyYzliOWQ1N2I3N2M1MjJmNDIxZmNmNWFkNzVmYmE5Y2YzMzg5YjEyM2FhOTc1MjE3MTNmZmY4ODQ2N2RlYjhjODk5MWQ0YjU3YzE0MzgxNzA1MzdjYjUwY2RjYzY1N2U1MGU1YzQ4MGUxMmMwZDQ0OTM5YjYzOTk5NDRlN2M3MWUxODZjMmFiYjgxZmM1NzM0ODgzNmQ1ZTU3YjcyYjIyNGE2YjcxYjZjYWY3MjFhY2E3MzQ3OGNiNmNmNWZiODkwNzFhZTNhMzk4MjAyZGJiMzhjMzA4MTI1NjNiYjlhMjM0MDY2NTdhOTU2ZDMwNWEzNDQ5YTYwY2M4NjQxYjYyMTc1YTcxNzBjMjNiZDVhMjVmMGYxMmUxNWE3ZWQ5MWZhZGE2YTRhMmYwZTdiMTU1YTNkNjQ4NWVjMDNjZTZlMzRkZjdlMjE2MjQwYmIyOGEyZGQ3MzJmZjc5MGQyMjg2ZTIwMGIzM2MyOWEzMWE1ZTE5YWQyY2QwMjk3NGJhZGM0YmMyMmRlYjc1MDRjMTUyNDFmYzEwNjBjOGFjZWY0ZmJiMjVlYzc2MDJmY2UzNmEyN2JiODdiNmU2NDIzZTZiNGY2ZTM2ZmM3NmQxMjVkZTZiZTdhZWY1YQorU0lHOiA0YzM2YmZjODFlZWYwMGI5Y2IzYWI1MTRjNmQ0NTFiOTkzMzYxZTA5YTRiZTRiNTA0MDkyNmZlYjBlMGQ5YjUyZjAzZGU0NjhlN2JhZDgzZjM3OTE1NGJmMmM0MzdhNzFmNzU0ZjNmNDA3OThlZWViZDYyZTU1ZjJiZTc3MTQwMworCitUU1Q6IDU2MAorU0s6ICBlZjM4YzNmYzc0ZjA1NGFlNDNlOGQyOWQ2YmE2ZGM4MGI1YWY4NDgyNzBkNGFmNTg4NDRkMjRiY2Y5ODc0MTRlCitQSzogIDBhZTE0NzhiMDVmYjMyOTk2NWVhMGZhOTI4ZGNiZTgxYTBiZGJiNmZmNjZjODExNjcxNjM1ZTQzODg4ODgwNTEKK01TRzogYmYyOTBkYjNkZGE4NzYzOTM3YWU0YzgzNzQ2NzA1MzI3Mjk1YzJjMjQ4MDY4ZjVhYjg1YzhiNWQ3NTZmNGUzZTM0MDYyYjU1NDkzODcyNjE0NzZiY2JkMWU3MzMxOTkwZjExOTEwZDExZjk0NjA3YzJiNzFmNjViNzcxYWFjYWJkYzEwZjQyYWU5MThkZDI1OTRhYzcxMDUxYzg1YjMzMDc3OWM0N2FmMDBhNWI5ODE5MWI1NmNiY2Y3ZWZlNDFhMjdlODdjNjc3MTY4YzhhYmU5NDk2ZWIyZTdhYmJkMGIxNjA0Mjg2ZWQxYTFiMThkMjY0ZDczM2RlODdkMGQzZjgwNTU1MjhjNGQ0MjZkN2Y4ZTZlZDAyNGE3NDE0MGFiZDM1NDAwNzk2MmEyYTk3YTVjMmZmOTc2NTQ2YThkMWFjNDkyNGMwOTIyM2QzNDhkZGNkODcxMGEzNzk5ZjkxYmI4NzBiM2Y0NmQ1MWYxZTdmNjg5MmQ2YjA4Yjk5MTc0OGEwMzdhODY3ZWNjMzllZThkNjQ2MmE3NjE0NDg4ZWRkM2MyYmE2MTVjYTJlMzc4NTQ4ODk0NDFiMTNkYzgzNWMzNmIzODY1M2Y2NTk4NjE2ZjM1NzgzZTJlMTU4Mzg0YmI5MzFjOTAxYjcwM2FjYjM5OTFmYjdhYTViYTY5ZDlhNWJkMDU3MDI0Mjk2MWE3MWE1MjQ3MDMxNWU5ODJlMzQxYTYxYzY0YTYxOWJkMTZmZTgxMTlhYWUwZDc1MDNjZTdkN2U5MjYxNDZiOTFjMjg5MmYxMzE2NjlkMWUzOWU1Yjc1ZTljNzI0NTI2MTgwOTlhNTdkYzJlZTM3N2JlNjU4NzVlZTAxYmI4OGVkNTI2ZmMzOTRlMmY1YzgxMjdhNWY2OTEyNWU2NzM4NWVmOTRiMWYzM2FkNTI2MjlkNzIwZTMxYzAyYWUwYjU4MjMzOWZmMGYwYmIwN2ZmMmIwMzBmNDhmYTdiNjkyNzE2NTAxYWQ3NzczYWQzMTUxMjA0YTJhNTQwZmE5NDM2YmRkNDIwMmExNTczMDllYzM2Y2VjYmU1OGIzM2VmZjU1N2ZkMzNlMDNmZDNlYjE5MDA5YmQ3YTJkZWE5ZWZlZWY4Nzg1NTY3YWFiMmE0Yzk4YmQxZjJhODEwMTFiMzQzYTlmMjBjNDRjNTc3YTQ1MmZkNTRiYTIxMDI5ZDQ3MDY4MTNiMjk4N2M3NmJiMjQyYWIyNjIwODQzYzIyNjBiNjY5YWQzNThlZmVlN2Y5ODMwZGM5YzdkNDc4YTJkZTRhMmNmOGM0M2RhNzcwZTI4OGUyZWRiYjZkNzNiY2YyZWNiMDIzZGU2YjJkY2M2YjE2NmU4N2EzODVlYjBhZGMzMDU2NjVjNWJmYTU3ZjI1MGZlMjIzYWQ3ZmY0NTE4ZGUzOWM3OWU4N2RjMTAxYTlmYWE2ODIxYTc0NDQyYmZjZmRmMGE5ZTYzYTUwOWUyYTJlNzYKK1NJRzogMWQzYWM2YjZiZjE4YWI1MzA5MTQ4Nzk5NDg1YjI3NmQyMDQwMWM2YWY1ZjliMmY2MDMyMzk1YTNjMmY0YjY3M2I3MTQwYzA3Y2MyNmY0ZmM1NmE1ZWUwMGIwNzQ2YjJhODBkYTZmZGFkMTdlZGQxMTQ5MjAxMDFkMmM4OWMzMGUKKworVFNUOiA1NjEKK1NLOiAgN2U3YjM5YWY2OTM4MGNmNDQ2NjBlMmMxZmYzMDgzMzRlODI1MGZlZWI4OGJlMGQ0M2FhYmU1ZTY4YjhlZjE3MQorUEs6ICBjY2VmOWRhZWQ5MjUyMzUzM2Q0YTJkYWI2ZDI0MTlmNmQwODYwNGRiNjRjZTM3ZTMyOTA0YWM3N2I5YjRhMDFjCitNU0c6IGQ0YTM5NzZkYmY4MzIwMTg1NjY3YjVhODIzNjY0MGYyZWJjOWU0NWU2ZDVmMmE4ZDkyOTk3OTI3ZGQ5YmM1ZGI5NWY0NDYzNGJkNjU0ZWVmZWNlMTBkOTlkOTJiNDY3MTU3OTE2NDUwMDRhY2NjNmQxNDBmMzJhMWM4NzJlNTRhYTlhNzQ5M2FmOTQ1ODhiN2JiNDAwZDk0ZDQ1OGQ0MzI5MjMwN2M1YTFhMzg4MmExYzhhNmE3OGQ5YTk0NWY3OWQ2NGIzMjk0YTI4YzNkNTlkODIwMjJiMDA5Y2M0ZDJkYTkzYTE2YjA3MWM5YWI4ZWU5YTM2NjNkNzJlZDM0NGYxNTFkNjhjNjY2YTRiNDk2NTJkOTdhNDZkMTQyYTQ3NDExMjdmM2M1N2YxNTUxYzQwOTc2Y2QxMzgxYTgyYWVhZTdiYzVhZGIzOTg3MjBlYjQzM2YwODk5NDg3ZWQyMzc4NDQ2YjFhOGRjNmEzM2ZjZDQ1MzdhMDVmYjYwM2VjMGE5MGEyNzUzMjMwMDI0MmIyMDAwMTA4NjIxYjY1YWIwMDBiYzA2MzgxNTMwZjY5MGQ3ZTU2ZjgxNjA0ZGFjZmYxOTEwNzE1MDQwNDEwYWExZjk0NGM5MmRkOWJiYWE1YmQwOGVhMDBjODQ0MmRmOTRmMDg1ZWIzZGU5NzMzNWI2MDA1ZTZmODRmODIzZDQzNDcwYWIxYzY3ZGExMmFkNDQ5OTM2YzZiNTVmOWZmZDIwM2RmZDZlM2YzMzMwOWU4YTk5NDVhNTkzMjBlNjY3MzRjNzljNDgxNGRiYTVhMWMxNDA5NWM2MjkyNWExZTE3MzNlZmQ5NDgxN2EyNWVmOWU0NzlkZDljY2RlNmNhOGFkYjdhODA1M2MxYjU1MTM0Njk3NTA0YWY4MDUzZDU5NWI4NDQ2NDBiNjFlOTMxNjgwNzU0Njg0NTBlYjVkZTAzNTg2OTdjMTA0YWZhNmEzNzk2YTUwOWMyNmI0YzI3N2MyM2ZmZjQyZGYxNDZkZTU1ZTk1ZDBkNGI4MGE3YWExNzdkOTkyMjdlY2IyYTA1OTRkZWVkZWJiOWNhZmIxYTQ1OGFjYTgwNzJjYzdkNzdjNzE3NWY2MTBjYTMwMGVmZDdhZjkzODgzNDY0OThjMjI5OTE1NjQ1MDBlMGIwYWE0ZDI5NDZmMThlNmY1Mzc1YTg0ODI4NmYzNjk1NGMxY2EyMjY4NGM2OTI4YzJhMjVjN2ZlMjFhYmE0YTcxMTFkN2UwNWJjOGQ3MGIzZGNiNGY2YWFlYzA2NDg0NWVlZjU1MjVmODUwMjRjMjU3MGYzYjc4Njk4YzRiY2VjMGQ3MWFhZDUzNzhkODgxOWUxZmFjNDRlZTQxNjM3MDIxMmRiYWFhZTU0ZDJhZjI5MzliODJjYmFhZTdmNDJmZjQ4NWQ0NWIzYWNjMjEwOTBmNWJhNDFlYzBkYTMwOWU1MmVmMjgzOGQxZGU0NzFlMGI3Y2Y5ODUKK1NJRzogMTA2MmEyZGM5Y2Q1Mzc5Njc1YzA0ZjVlMjEzMzhkY2ZiNzdkZmJhYmNlZGQ2MmIyNjA3MTAwZDc2NDlhMDVlODA4NzFlOTYxMjMyMTRmODBmNGY3M2IwZDliMDZlMmQzMWY1NjExOWNlYTY5ZGEyMzQ3ZGE4NGEyNzViN2IyMDcKKworVFNUOiA1NjIKK1NLOiAgYTkwNDhhZjBjMjBhMTI1ZjVkMzljNTBmMjJiODA1YWU3NDJjZjY0ZjFmZThkZmJlOGRmZGFhNTExYWFhNTc2ZgorUEs6ICAxNTg2NTVkYjk0YjE1Y2E3Mjk4Mzg3N2I2ZGIyMzFhNTg0M2RmNWRiY2EyODEwYTdlNDk2ZmI1OWFiNzEwNGNhCitNU0c6IDhlZWYyZDlmNWQ1OTcwOTk1OWM5MjRmODdjMjI3ODk3NjczOTNhMTU1ZDVjODdkZTQ4OGNlZjUwYjdiZjdkYTg3MGUzYWRjMzAwYWVlNjYwM2IyZWYwODc2NGQ5OWQ5ZTc3NTFlNWRjZTkyYWFhNzFhYTE4YTY5Y2M4MjMxMzRlODU1MmQ5NTlhMGRiYjQxMTE3ZTBhNTkzYzMxODMzYjZlYzIxNzJkZGFmYWY3ODQ4ZGRkMThkMjhkMGQ0ZWQzMzIzN2VjODA0ZjY1OTM4YWVkOGU4YTMyODBkNDJlMzUzZDAxYmUwMTg3YjEzMDFmODNkODk4NDkwNjdiMDRhOTAzMWY3ZTBmMzNlMzQxNjI0MGM1M2Q5MjY1ZWQwNjYzOTU5OTcxZjQxN2NiNWYyMTBjZGM1YWViY2I1ZTFkYjdkZmI4MmRmNDM1ODc2YTZlOThmNDE1YjBkZjg2OWYwZDg4NTE1MzUzNzU2NDVlZWY3MGZhZWM3NDRlZTBkYzNhY2JjYjA0MGY2OGQ1MDJjMmM2MmM4ZGI0NWViZTU0ODU0YTRiMzZmNDNmZWI0OWE2ZDFjMmMyZWE3OTkxNGE3YzIzYzYwYmFhYTY3Y2I0N2IyMTc4ZTEyZGNlNzZiMDA0Yzg3YjdiODM0NmVmYWRmMzgwYjllMWU0MWY2MzE0OGRhNTE3ODFkNzVjZWMwNDBlNDI2ODgyMDIxMWYzYzQ2MjUwMWQ4MDg5OTg5NGU3OWQ2MThkZTQyNDYxZDc4NWFlYWNlNTNhZTE0Yjc5ZDMzNTAxZWQ1NjI5YmJkZDA3MTI4MTU2ZGIwNzI1ZjViNGJlZDU5M2E5NTI5NDc4MzAzODRmNjFkZjAwZWUwYWEwOTkwOTljM2NkOTc2NWE5YzFjN2U4YTZhODM0MzBiOGQ5ODY3YzhlMTc5MjBhZDBmZjY0ZDhjZDJmZjVmMTE0Mzg4Y2U2ZDQzZWVjMTcxNWQwMzVmMDIyZmE5Nzk2OWUxYTVkZDlmNThkODk2YjE3YzEyMjFjOWU2Yzg1NTU1OTcyMzVlZWRhNmVjNDFiMGMxMTc2MTJiMDBjNWYwZWQxODE2YjA1NzM2MzU4MjcwN2E4YWEwZDk4ZDRkNGJlNWU4ZmEzMmQ2YzlkMjc4MjIxZWYzMDY3YjhiYTE1MTZkOWUwNTFkMmY2OGI3ZDFiMTUxZjc0YTM1MzRlNzgxMmMwNTFlNWYyYjYzYjMwMzVmOGU1NzAzYjVmNjhmZDJkNjViYjc1NjVlOGFhNjdiZmQyYTEyY2FmMGJjNTQ4MTE5N2E5ZmY4OWQ3N2RmN2EwZTk2NTVlZjAyOWI0M2RkOTA2ZDBiODg4ZTMxM2FlOWQxYzdlOTM2OGEwMTM1MmQwMGM2NjgwZGQwZjFmNTc0YTU4NzczNDhhN2VhMmMwYjllOGUyNzI3NTEwYmYwYzllZjc0NGYzNjllYjNjNmM0ZmMxNmFkZWI2ZTE5NDViZTgyODdkMGYzMAorU0lHOiAxOGEzMTJiMjBkODZhYzMzOWE1OGVmMmI4NTJkNDY3YzIzYmIyY2IxMjI3Y2IxNTMzOGFmMDdmZDA0YjlhNzExZTg1NmVlNWIyYzgyZTM2NmMxN2Y4NjE3MTNkMTA4OGMxYjIxNDRkMWMzN2QwNWJkYzAwZDczOTY3Mzg1MjAwMAorCitUU1Q6IDU2MworU0s6ICBmOGM5MTgzZjIzMTA1ZmFkMGM2ZTUxMDMzNThiNTgzMjg4ZjlmZjZjN2RmYzkxMTA2ZDA3OTg3ZmY2OWNlMWViCitQSzogIDRjNzk2MjhjOTU4Y2RlMGNjM2NmNjg2MDk1YjhhMmY0NGI3MTkzYzYxNmY1MWIyMWI2NzBiMDM4Y2U2ZjY3ZmYKK01TRzogYjFkNjA1OTUzMjNmZjNjODQ0ODc0MTkwZTE4MzZlNDEwMTQwOWNiY2VhZTI4ZDVkYTgxZmFkMjk4ZmU0N2Y2YmRmNDQ3NDViN2NkMGQzNzEzMWMzZWMzNjViOTJmNWExYTY5YzA5ZmUyZDllODFkYTEwY2YxOWQ4NWZmNWZmMjZmOWU3ZGI5ZjA3OTNiMjVhYjI2ZTZhNzRmNDRlYjhjNGYwNzhlYjdhZDE4ZTY1YTE2MjEwZDVjODQ0ZDNjZWY3NWYxZGFmNDRlZWU1NThmOTBlNTI0YTAzMmI2Y2FlNmM4ZDIzMzY3YzI4Y2UxYzc1ZmMyNWFjODc0MzM5NzdkNTk3NTMzYzkyYWU2NWYyOTEzYTE4OTA3YWM3ZDk1NDNkZjI0MTI3NzQzOTQzZmVmZDljZjgzZWQ4MzNmNjNlYzgzNjcyMzNkODk3YmZhMTJkNDY2ZDJjNGE5YWQ3MGQ1YTY3MmZjMTA3NzVlYTJkMjA0ZTYzNmRlNzAxMDc4OGRhMjcxZGYwMzg4MWEyNWM4ZGZhNWFmNzNlZTU1OWY4MWI1MjliMzVhYTEyN2ZkYzBlZThmZDM2OWM3YTA0MzY2MjM5ODZhYTY0MDdmYTY3YTE0MjBjNDZmMzIxMWFiODRmODQ0NjZkZDU4YmI3OTUwOGExZmViMGE1YTVkYzNiYjBjMWIyNDgwOTgyNjJhMDY0ZjM3YmIyZjAxOWUyOTBjNjBhZmFhMTIwNjY1MWEyNjk3Y2FhY2MzZWNjMDJlY2ZjMDc3ZjI3MmU4Zjc1Y2VhNzFjM2JjMzM1NmQyYjU4MDcyNzZmMTk1NTAwMWNmZTEwYTYxNzE2YjQwODJiZDZmODRjYWU0YmIwZDlhNGI3NWE0YjU3NjJmODEwNzlmMTlkN2QxOWVhZmY4NjMxYzkyNDg4NWJkM2E2NGUxMjlmNGNmNmI3OWM3YTk4Mjk2NjU1MTFlOWQ4NWM3NDVlYjIyYzFiN2NiMmExN2E0OWI2Mjg1Y2NlMzdiM2RlNDE1OTQwMzI4MzIzZWZlMjRhMWEwN2VlODc0NjhmNjUxMGU0MmRkMjA2ZmU3ZjA5ZTNkNDMzZmI1MjE1NmFlMzQ4MzgzMTE1NjQ4ODYzZTQ1YmY2YTM3MWIxN2U3MGUxOWY5NjI3ZDdmMGE1OGI5NWM2YTQ3ODhkNWZkNzg2MmYxNjEyYzAzNDczMjViNzk3NjUxYmUzMGMzZTFlNjBlYTRhZTYwYjU3NDVhMzhiNmE5ZDRlYjQ5MzVkNmYzY2I4ZDcxYWQzZjM5YWRkYTVlNDJlMjIxOWRlMGQzODE5MDljOWNkMzE3ZGQ0Mzc5NDIxYTJhODQyNjhhN2VhNzE4MGE2NGMxMjliZTFlNWU4ZmNiYmY1ZWQ2NTllOWY3ZTc2M2NlODRmNjMwZDU0MDc5NTRmOWY3NTU3NTBhNmRiZjlmNzY2MDcxN2RlOGUyYWRjMWU5YWM5ZWUzMTY1NGQxODM3Y2VlMzk3OTUKK1NJRzogYzZhOGJjN2EwZDVjNjE4NWI2ZWNkNjAzM2U0MjMyMWQ1Yzg3MWJmODg5YmU3MmJkNTRjYzAwODNlZDYwYTQ3MGIyY2MwZmI0NjgyYzg5NGM3NWIwZGY5NWYxZWNmYmJhMmQ1YWNlZjNlMWFhZmU1NGI5ZjdlODAzYTFkMDE1MGEKKworVFNUOiA1NjQKK1NLOiAgMTYwODlhMWI5MzJmOGQxNDk5NTY4OGI0OGRkODQxZWRhZTNkYTVjZmQyY2IxNjU1NTMwNmYzZmU4YmQzZWRiOQorUEs6ICA5ZWNkOWZkZDdlMGI5MjNkZWZmNWQ4ODdiMjQyNTg1ZDlkNDFjZDJjN2MxMGY5YzM0NWIzOWY2MzNmNGFiOTAzCitNU0c6IDU4NTAwMjMyMzg4ZDlhYTRiNWZhZjg1YjAyMzMyNDdlNzE3ZmQxNjg0MGRlOWJmZDBlZjg2ZTAxZTYxMzAyNzc1NTEzZTIyNDEyNWUwZDIwNDIwZWE5NDlmNmMyNjQyNWY3MDA3NzkxMWY5NzExMzEwY2Q2ZmQ4YmZmMjdjZGVhMTE0ODBjNzNlOGY4YjNjMzc2NDFlN2U4ZGQ4NjA3YzE2NDAyMThmZWM4MGEwMjA5MjhiOTNkNGQ1NTdlYmU4MmVjMGJiMTc1Mzg4NjdkMmNiMTRkNDRkM2VhNzI3ZmRkNTI4MjBiMGRhOTQ0ZGUyMWNkNWRhMzAzZDc3NmZlOTljYmMyNjQ4MzY1ZTZhMGE5OGQ0ZGIxNTA4NDI2NjE3NjhiZTg0YzY4NTA3YTVjNDVkMjA3ODQwYjAzMzUzNzc4NmNiMjFkYWRhZDVmYmFiOWM1Y2ZjMWUzNTQ3ZGU1NTBkMzEzNjMxZGQ0ZmJiN2NhOGY3MTkzODYyNzYwOGQyZWJmNjU1ZGI0MzI1YWJmM2VkNTA0ZGMxODMwNThmOWRlMWU0NDkzMTJkOTA0Yzg0NmExODRhMDI4ZjM2NGMwMjhiMjdlYjQ5NDY0MjdlMzFjMjFlMTA1MWRmMzY0ZDQ5OWY0NzdiZjUxZTdhODg5MzE4M2U1ZWNmNzdkNTEzYTFhNzZiMWE2ZmRmYjE2YmU5MGQ3NGJlNGM0MzQ1YTRmOWY4N2VlNDQxYTEwMjJkNjdlZTg0NDc4OWYyMWIwYzMxYWRjYzBkOTU2NjNjZGZiNDBhODk1YjkyMmRjZTgwNjliOTMyYzgwMmZkM2FiMWVmMGNlNmJmZmRjYzU2NTNiMWNkNTI1N2UxOWEwOTUxNjg3ZTU0NWZhZjRhYTY2MDY1YTU1YzRiNDE5MWUzNGU4MDQ3ZDZhNGFiNTJkMWIwNmMzNjlhNDI2Y2EyZDE2YjUxYTAyNzFmMjdmOGQ3NDRjNzExZmNlM2FhZDlkNGFjMDM4ZWU3MDBlNGU5NzFiMjFjYTQ4OWZmMmI4Yzc3OGEzNzIxYWRmNDdjMWFlNWE0MWI5YTI3ZmE3NDJmZDBmMTgxNjRlZjNjMjZiOGFlN2QxZmEyOWI3YzBjYzQ2ODNiZTY1MDI1Yzk2NTM3YTEyZDVmY2ViYmQwNWU5MzBjMzY5M2ViYmJhMGE3OGFkZjU5ZDhhM2I1OThhMzQ4ZWFhOWY0N2NhZjUzMWZlNDQ5NjUyZGI1YjIwZDY4OTk0ZTM1YWZlYzJjMjU3MDkwNTVhMWRlMjYwODJlMzkxMmQ0OTdjNjQ3NzIwYTNmODczNjIxNDU2ZTZhNWI5ZWI2MTNhY2I0M2I2NmQ0N2QwYjk1NGM2OWU4ZmJmMmM1ZTYzNGM0ODZlNTcyNDkzMGUwYjU2YTUxNjk0MGM4Y2IwZTc3NTI3NGRlZmY5N2NiYjc3NTljZTkwYTJiOTNlOWVmYWE2MjRlNmIzOGEzOTg0OWRjYTFkZjYxMjczNmYKK1NJRzogNzg3OGFiNzQxZWJhZTI3NDdjNzg5N2NiYjFkMTA1NDgyZjM3YmUyZjVmOTE3OTUyMzJjZGZiY2NjNTI2NjA4OTE4ZTI3NTZkZGI3NTM2YjM2ODBjMTYyY2Y4YTFlZjM4YTM0MWI5MzYyYmZlNWQ0NjhiNGJjZTIxZGYyMzRmMGYKKworVFNUOiA1NjUKK1NLOiAgOTRkNTA5MTUxNDRjN2U3ZGQwZjg1ZmVmODdlZGRjMjIwNmMxNTY5ZWQxNDMxYzhjNWExNTNlMzJlMWNiMmZiNworUEs6ICAzYmIwOThjZjE2MGYzYWVjMzE3MGI1N2Q2YWRkNGY1NjczOTI3MGU0YjNhOGVmNzk2NmVjMzA2MTliMjk5MTAyCitNU0c6IDRkOTE1ZjI3MzMyZGQ3NTA1MTcxOWEyNGFlOGQwZTljMzBkYTc5MDk5OWUyMmQ5YjU4N2VmMjAzMjFiZWU0YzA3ZDBhMTI0OTRmZmU1OTlmNDdmOTY5MjVmNWQ5MjUxN2ZjM2U1ZjA0MWQwYzcwOWYyYTk3ODMxMjVlZWNhNjY1Mjk5NzIwMWM0MjlhYTZmMWNlMmYwN2EwZDRhMGExOGNmMjBiM2U5YTRmNzY2M2VhNTI2MmNhZDhmOTQ5NDExYjA1ZmY1YzVlZGQ3YjMwYjIxN2Q3NWQ4Yzg2Yzk0ZTVmOTJjMTY3MzQzNzRlOGNlYWQ2MWIwYjI3YmI0YmY1ZjQzYTMxM2MxZGQ1YjgzZTBlYTkzM2I2Y2FkZmVkZDdhNjRhYTVkZDViNWQwMmM2OTVlYTIwZTA5MWZkYWE3MmVmNGU3Y2E0MGYzODM5NWJlOGJmN2EyNTVjNmQwNmE2MzJkN2Q3ODVkOWUwNDdmMjMyYWE1MGZhMTQ1MjlmOTg2ZjllZjlkN2I1ODBhMDM5NjViMDE1NDc4ODgyMmEyMjViYjVhYjM0MzhiODlhNWMyODc0NGFiMGJjMGIyMDE0ZTU3OTZhY2I0OTM1YTgxYjAyYTA0NjMyYWNiODhjYWE3ZTM5ZTA2OWM3YzhlMTc1ODI5MTA5NGE1M2UzNjJmY2VkYWFhNTgzZWNhNzY2ZWZlYmY2OWIzOGU4Y2RlOWNlNThlMDEyYzYwZWM4OGU4YzQyYmVhZGZhODM4Y2ZlNDQwZmEwYzAxZDY1OWM5NjM0NTc2ZDdkN2EyZDNhMDQ0Zjk5YzZlNDI2M2Q0YzBiMzc0YTM4OGEyYWNmMzhlZmYyOWM3NzdlOWRhYTYwZDU5ODAzNWE3ZDllZGY2N2E1MDJjM2Y1NzMyMDdiMTE5Y2FjYWMzZmE3MWUyYTAyMDdjNjAxY2MwZGQ2MzdlZjU2MmJhY2MzNWM1NzA0MjczOGYxZjU1ODE1YTUyNjgwODJjZDZhNTA4MjkyZmEyOWUzNGU5NjQ1ZDg3YTFhMmI2ZTU4YWRiN2Y0YTU3ZmJiNTNlOTIxM2VmM2RjODczZjI5Mzk2MjU4YTFlYTU0NmZiNTk1MmNlMzQzY2VlOWJiYjkwYzFjZGE3MmM2NWE3YzhlNDAzMTJiMzI4ZTIzMTkyMGMyMzMwNzdkY2EzNGQwNGY5ZDg5ZGFhOWEyZjQzNDU5MTY1ZmQxMDJmZjU2NDNjNzE3NTIzMGIzOWVjN2MzYzQ3NTY1MGVmMTMxNjA5ZDMyMjBmNWEyOTRhNDAzYjFlMWM0MmNmYTE2MmNkNDI2ZjBhZTQzZmQ2YjdhYjU0N2E2MmI3ZDVmODQ3NDAzYzRlNTk4Nzk1Mzg3NzE1OGNmZGVlMjNjMDRmNzUxYzdjODZkMDc4ZTgyNGNhNjNiNWU2NTU0M2U5NzhiNmIwY2M2ODllZjY2NDQxMmIwMWI4ZmYxNjVlN2RiZGUzYzA5OWJmNGYzNGViZGRjYjRjNAorU0lHOiA1OWExY2U1NWY1YTZiYWRjMWI5MzkxMjYzNjIwNTQyY2ZjYWU4N2EwZjJiOTUwMjI1MGNmZTRiZGNiZjc2YzQ2MTk3N2MzMzRhNDhkOTE2ZWRlYmQ1NmMyMWNlMjE3YzM1YTY0NDRjZmJmZDNiMTFhM2Q0OGZhMmVkYjZlYjQwZgorCitUU1Q6IDU2NgorU0s6ICAwZDgxOTI2ZjUxM2RiNGIyNWRmYTFlNTJiNWRjYTY3OGY4MjhhNjFjN2M5MTNjODI4MjQ3YzJlYjA0MjJiN2QxCitQSzogIDBmMzI0MTFlZjkxZDRlNGI2OTQxZGZjYWFiMTQyZWYzYmVjMTYwOTgzOTkzYTUyNjJjY2YyN2ZhZGQyYWY4OTAKK01TRzogYTkzODM3NTIyZjdlYzJlOTNhMmU0YjRjOGI0NmRlOTI2YTgxYWRhMmQyNDhiY2QzM2IzOWI2Yzk1ZmI2MmE2MWRiYmVkYTFhYTg1YTIxZDliOTZhMDg1MTBkOGQzYTY1OGNmMzIwYTEwOTI4Njk1OTk5ZDJjMGQ2MDVjN2Y5NWExMmY1NmE4NzE4NTA3ZGIwZjQ5N2UzZWFkNjEzMTMyYWIwOTJjYmYxOWQyMjYwMzU4NjMwMzU4ZDliMjZlNjhkNTBkZGFlMzdjOGFmMGJiN2QyNzQxZmQyOTI5YzIxMjc5YTc4ZDEwZTJjNWYzYzViZjRhNDJhMzYxNzAzNmQ1NDc0MzY0Nzc2NWFmZDhjZDkxMGY4MWIzOGNlZDcyMzkwNjMwZWU2ODk0NGEzN2QyOWMyZmVjYWRhMWNjNTllYzU0NDA3NWJkYmMxNGM2M2M2MjM0Yjg4NDA0OTAwMGMyN2M3MzQwNjAzNTYwNGZjYTg3NjBiNDlhNWUyMTA5ZWY5MTI4NWFkYzRlYzQ4YzgxOWQ2MmQ5NDhmYWNhOTBmNjJjZmFlZjBiMDdkNmZlNTc2ZDc2MmJmZDBlZWY5NGNmNmI1MzMyYzRkNDIyNTExNjA3ZjJmYWNjN2FjMDQ2YTU5Yjk2MTdlODM4M2QxMDI5Y2M5MWFjNTkyYjUyMDg0NDEzMDMyYmU4NDFiYWE5YmY5NjI1MWE2YmRhNjcxZDRjZDRiMTI1ZGE2NThhNGU1YTUwZjQ0MjhlZWJmMjYxNGZiMGNlNWZlYmU4MGY3MjFhNWY0YzAzMjU1MDZkMjdhOGQzMWUzM2Q4NjI1Mzg3MGRkNjNjMDhlZGM3MzAyYjI4MGU5YjliZGMyOGJlZWYwNWM3ZGNiMzBkNGMxNjJlOWJlODMyZTFjNzg1ZTM3NTUxMjE4NDIxZWVjODUyYzQyOTgyMTNiMmYyN2Y4ZjhjNzA2ZDM5MWI5YzY5YTU2ZGI3Y2U1ZDgxNTQ4ZmNhNWZlZDQ1NmYyZDhhZmQwYjc1Zjc5Zjg1ODY4MzE2ZjRhMDkyMWYwYzY2Mzk5MjY1MTZiM2MzZTUyYTljYjIyNTU0NTQ2ZWY3MGUxNGM3N2VjYmRjZDVjMGQ1OWE4MTc2OWIzMGQ1ZDEzMWYyZmI0NDljOTk2YjhkZThhYzdmODA4NGY4NDk5ZTFhNTZmN2NkMjlkYjZhYWVmY2NhZThhNjBlNzU2MTZhMWY3MDJjM2JjOGRlYWExMDA0YThkYWUwMzkyYTU5Y2VlNTQ4MTBjNmU5NDBlZWUyNWZiMmU1ZDU3MzI2NzA0NGI4OTNmZmRlMzc4ZmU3NWFjMjYxMzM3M2Q4NGEwY2E4MTg3YWY0YTMzNThlNTBhOTk0ZWQwMzM2N2RlNjQ1ZTEwMzkwZmVhNGMzM2JiMWE2YzBjMzk4NThiOGRiNGE2OWZlODk0YTQyMjNkNDVhZjY5YjM2YzYxMTdjNGRjMjVkZTQ5YTYzMDE3MDAyYmE5YWU1NTFlZjkKK1NJRzogZTBjYjZjNzFlYmY4ZDcwNWU1MGNhZDlmMGI4Y2JhM2VjZjRiOWUzNzkzNDAwMDkyYWE1YjEyMWU3ZGJiYzhiZWE3MWRmMjk1MjhjYTliNDdhYmY4N2MxOThhOGRjNGUxNGQ1MTgwY2U5MzJkZDIxMTRhM2NkYWE1NTUyY2MyMDUKKworVFNUOiA1NjcKK1NLOiAgNmM4YzUzYjU2YmJjYjRjMGEyNWRjNDBjMTgyNDBiNmE1Yzc1NzZiODlkZGU0NWVmMTNmYjE1OGVhMTdmOGVkOQorUEs6ICAyMzhlNTFkNmE0NGZhN2FjNjQyNjg4MDEyNjFlYTM1YjYyNjM4YTAwNmNjNDUyYmRkYjlmMTZmYzU4MDMwNjBjCitNU0c6IGI2MGRmMjk0NGJhMDE1NzU5ODAyZDNjNTg3YmNmZWJlNTIxYTdlNzdiOTk4NWI3NjFjOTY3NjQ1NGQyNGE2NjRhZjBiMGQ0NDIyNWE1NTc1MTJlMWMxY2Q3ZGQ4MzM1YzhmNmFkZjkyOGUxOGY4OWZkNWVlZGY2ZjQxMWRjZGFmOTk2OTEyZThjM2UyM2QxY2I5NWVjYTRiOWUyNGU3NTM5YzNiOThiZjNkMDdlYzI1MTM5MjA5NmMxOWFjNTM3NGRjYmE1MjYxMzJiNmQ5YmI4ZjZjODU5Y2U5ODVkNTg0YzdiYmE1YjAyYTgxMDM0YjZkOGI1MjFiZDI4MGU1MGQ3N2RhYTJiMjQxM2VkNjc5ODM0ZjgxNjFkNWQwNTczYmRkNDc2YWMzY2QwYTNhN2Q4ZGI0NTMzNGU4OWMwMGFiNjZiYzM2OGEwN2I0MjNlMjQ2NDM0NjM2MjcyYWE0ZTQ2MzdhNTMwNmIyYzMzOTc5OTI3ODFmMzAyMzhkZTc5ZWMxMDRhY2M3MjAwZGVmYWQ5NjA4ODNkMzkxNDQzZTcwZWZiZDIyZjFjZmNlZWM1MTEyZmU5ZThlMTNiYjk0MWMwODM0NjhkZDcxZmZjYTk3NmNkNTFjZTE2MTc5MzExMGVmMDBhZmY1ZWUyY2NiNzcwNmE1MTJiODViZWI5NGFjNDlkMTlhZmI2MzMzNjU1Y2YzYWVhNTM1YTZmOWM3NWUwMzQ4NDFlNzYzYzVhMjQ5YjQ3MDRlMWJlNzhiMGVjYWM2ODAyYzM0M2MxYjdlN2I1NzcwZGU0YzkzYTNhNzljNDZlNjgzNWRhOGFlNWRiMzgzOGUxNzk2YjU2NGE0ODBhNGYyOTBiNjBhMWM2M2E3MjVmZjNmZWY0MzRkMmEwYjNkODkzMTk3ODc0MmI1MjVjODNiYWU2Nzk0YWU2NDE5Mzc5NGIzNzBjMjg5YmEzNWVkNzlkMzcwNzJhOGRjZmNhZGI0NmQ1ZmZhZWViYTFiZmQ0Zjg3ZDc2NmI1MDRlNjJiNGFjZGQ3NzQ0NmU3OWJhOTk0ZDZkYmY0NzY1ZWJkNzRiMDM2NTEwMGRhNTYxNjJjMzZmZTVhOTUwNzdmNmI0MjY1ZTgxNzk2YjRhNTc0NDM3ODI5NzBiOTZjYjQ1NjliYTk4NWM1NWZlM2E3MTgzODBiY2EzOWYxNjYyNGY4ZTQ3Y2M2M2MxYjZmYTFiZGUxYWViYTljNTFmOTRiNzAyYjEzMTA4Y2MxNDgxZDQyZTZmYTk4MWUzZWJmZTA2NGQyZGNhNzQyMGM3NDU5NTc5MjMxMmFlM2ZiOTEwMWQ0YjY2ZDk5MTZkZmQ2YzEzYWU4ODNlNjYxYzYyODIyOGJlOTc5NGNmNjAzNDUwNzZkYjI2MTg0YjYxN2UyNzIyOThjZDQxODNmMjdiZDUyZDQwNTEwYmIwMTVkMjA5N2Q0Y2M3NmU3NmMwYTYyYmJmZGFmNTNjNzI2ODc3NWJiZmJkYjg4NzBlYjliYWIKK1NJRzogNGJmMWU3ZDQ5Y2Q0ZDVjM2MxZmQ0YTRiYzQ4ZmY2YjZlNTJmZDk1MTBhNDExODEyMjk2OTk2ZTRmZWM1NmJlNDQ1MTRjNTY3ZDFkMzM0NzdiZDVkYzA4M2MzOTU4YmQ5NWJmZTU5OWMxNTNmMjFhZTI2MjUyOTY3YjczMjYwMDMKKworVFNUOiA1NjgKK1NLOiAgNjliMzIwZmJkNDc3NDAzMGEyOTc2N2EwY2MxNTUwZDEwYjc0OWI0NGQ2MTlkNDFkY2UxMTQ2ZjdhYzgwYTc1NQorUEs6ICBkYzUwOGE3OWM2YjhhYjg2NmNkMTE3YTVhODRkZDlkOTMxZmRhNDUwYmVjMjkzMzUzNDRkMGQyMTkyMTZkNjVlCitNU0c6IDIxN2UzM2Y4ODYyMmM5NmY4ZDA5MmM5ZTI2NjY0ZmU5ZWZjMGQ4ZDJlYjU5YTAzNmZhNDY0Y2VlNjVjZTQ0ODljYWY5MDNkY2UxN2FmYWZiYzRmMThkYzliYmZkNmMxYTRiZTdiODM0ODVhNmNhOTQ3ZGVmYjFkMzUxMjVkMDc3Mzk2MmEzNDRhMzhiNmRjYTlhNDBjMzFjMWM0ZWIyZDdmNjgxOGY5NzhlNTczZDY2Yjk5MDkyMWI5MmI3Nzc0NzFhNGY2ZjA1NDc3ZWJjMzUzYWNlMWQ4NmIwMGNjMjUxNzc3YWFmNmFmM2FhMTE3OWJmZjc4ZGY1MDQ4ZTVlZjI5OTY4NjcwZTUzNTQ4MzU2OGQ2YmIxNmRhODI5NTY4ZjgxYzc5OWI5YWZkNGFhZDZlZjA4NTI1MmMwY2UzYWMwMWFjMjFhOWVhNjliZDU4ZWFkYzY2OTY4ZjU1ZGVlMzg2YjY1M2YzMzM0ZWZjMzk4ZWYzYzM3YTM4Y2U5M2IyMWYxMDdjYzU0ZGVjMjZmNTNmZWU1NjA0ZWIwOWEzNmFmZTZiNjY1YjYzMjRhODRjN2RhN2I3ZGQwMWQ5Mjc4ZTQ3MmYxNWE1Y2U5ZmYwZmQ5M2QwYWEwNjA0ZGQyZGY4ZDViZjZhOTEyNzM0ZWM1MWRlNzdmMGNlMDk5YmExMTY3MDIxMGE2YTIwNjEwNmIwZWRlMmRlZDg1OGE2YmM0MTFlNzYxM2U2ZjgwZTFhYTUyYzMyM2UzMGZhODQ5OTUxY2M5Yjc3NmU0Y2M1OGM5MGNmYzhmNDQyZGY2NDE1MWE3ZmQ0YTNkZDYxYTQzMzZkYTIxZDAzOTQ0NjM1ZDNmZDY2N2JlNzQxZWY0NWIxZjdjYjI3NmQ5ZjRkZTgxMDdkZTY0NTgyZjc5MTdjNmVhYjM4ZTBhODg5MGE0YmVlNDhiYzkyNjE3YTM2MWNjN2IxZDI1ZTA4OTQ1M2NlMGE1MjU0NGY4NjhkY2IzMjQ5ZGU3NjFlNzlkZjYzZWZhMDc5NGUzYzQ2MThjNTU0NzUzZWUyODFjNTJhYzhhZDc4ZDUzMzhmMGRhYzM2MGE3NjkzODFiYjRhMzlmMTkwYjg4N2I0NzIzODA2YWM0YTRmMmZmMzA0YmM2ZjkzMzdhYjU0Yzg2NmU2YmE1MWRmNTBjNDNlYWI1MmUyYjM5Nzk0Yzk5MTdlMGMzMTQzM2YwMzY4MWQyZjFkOTNhMDQzNjAxOGNhYWFlMjAyMDZhMzQ1OGFkNmMwMzdhY2I1MTFlZjEyOGY2ZGNkMDUzMDVmMDcwNDlhMTNiNmM2YzNjNWI4MTcwZjE1OGM4ZjEyZDQ2ZTE2MDkzMWJhMThiZDU5YWUxMjllYzA3YTA2NTVmYTQ4MmViYmQzYjg1MGQzNmI4MzJiYmI3NzVmNTM4ZTNjMWIzYTQzZWNmOTRjYTYzMGNhMTVkNTAyODEzZWVkM2UzNWU4ZmQyM2QyYWI2Mzg2MDA0MjdkMTU5N2NiMjlkYTJhNQorU0lHOiA2OTdkNGQ4OTdlMGUyY2MwMmJjMWMyZGRhNTdmMGRkYTYyMGIzN2U4NjE4MjJiYjdmMWE3MDE5MzVlOTU5ZWEwZDg0NTNmNzQ2ZmI5MmMwODdlZDY1ZDk4MGVlYTFkNmZkYmYyM2U5OWIyODlhYWUwZGNiYjEyOGVmODM2NjQwYQorCitUU1Q6IDU2OQorU0s6ICA2NmRhOGIyNTRhMzcwNjczNzhmNjgxMzhhZmVkZDY2NDk2NTk2YTA1ODU1MjRjNzE2YmRlMmIzMTI0YzNlN2QxCitQSzogIDg1YmRlMjhhOTIyYWI1ZWVhYTRhNjI5NDUyMWEyY2NhYzBlZjIzMDNkY2RmOGM3ZmVlMjI4ZmI0NTUyMDEyZTcKK01TRzogM2ZhZTM2NjM4ODM3ZDBlZGM4ZGNlZTUxN2U0M2M0ODhlZDU3ZmE2Yzk4NTNhNzQ1YWFlZGZiMTA5ZWMxNDA5ZmI4YTJmZTUxZDIzZTBkZDlmYmZkOTRmOTFjMThlNjExNGQ4MDg5MDFiZjYxN2QyNjY3Y2VlYmQyMDVjNWM2NmY1ZDc1MzRmZDJlYzMzZGJmZTU4MGFkOTE5ZjUwNDIwNGVhZjI0MmFmODcwMGIxMzhjZmJlMGYzNzI5MTljMDZiODYxYTI3ZDcyMGQwOWRmMjBmNGZiN2I3NDhlNzE4YjBmYzQ4NmRiZGZjYjY5NGNiM2YxNDIwMDM1YWMxYmU1NWQzMWYzMGY5OTdhMDQzZDA0NzA4YTVjNTQyZWUzN2MwZjdmZTBiMzIxMWQxOGE4NzAzM2RjYjE1Yzc5ZTY2ODFjNDk3MDU5M2QzMmExM2M0OGYwYTNhZjhiZmMxMzZlMGY5YjU2YTEyM2I4NmM0YzY0MGI2NTBjYjdkZWU5YTg5ZTgyYWVlZWU3NzNiNWNiMDMyZmNhNDFjMjBjNDA3MzI4YmZlZDI5MjQ0ZTQ2MDU1YTgzMTE0NjE0ZDNkYjU2NTgxNjA0YjExNWZiYTE0ZjYxOGUxMDJhMWUxNmNiMDM2ZWE2OWRmOTI3NWI5NzdhMDg1ODExOGM5MWEzNGI5YTg1MTliZDBkYWMzYjYxNDM0ZWEwODhmMzgxYmEwOGJjMTU4MzE4OWE0YTdjOGI2YWQxOGY3MzJkNzRlZmYzYWNlZjRiNjkwNGRmNThjNjQ2OTQzMjE1MTM3MmRmOTMyN2FlNzFhMGYzNTZjOTQ0NjhkY2ZjMmU0YTVjMGU0ZWMwYjE2NmQ5MGNkNDY1ZjkyNjBlYmQ2YTdhNjJjZTZjNzE1YmNjNzE1YmUwYzdlMWYyOGM0NDU2MDEyZDMzMTc3YTdkNDExM2M5YTVhMjJhY2ZhZjJkNmI2MzMwOTA3OGZjMWIxYmFhOGYzNmM3ZTg2NmMxZjk3MmE2NTAwYTVlZWE3OTIwMTY1MWE3MzA1MjA4YjZjOTNjNDkyYmM3N2NhY2JjOTljOWNkZWQxNzllNjY0YTJmNGUxNjkzOGNjMjZmY2E4YjQzM2ViODAxMmY3YjNhZDE5YmExZmI4NThmZTRhMDBmYjNkMWY4ZmQwZWRkZjBjMzdkY2RiMmU1ZDM1YzI1NDZmMjJlOGMwZjhjZTkwZTJkZjhhYmYyNDgyN2EwMTliMmMzM2ZjNTkwYmJlNzEyZjAxOTI4NzAwMmJjMjIxN2MwZGMwOTMxZGM4ZWQ4ZjUwYmI0NDJmOGIyZGUyNzg1NzM2MmNlNWE5ZmQ5N2YwZmQxYjJiOTI1MWNhZDJhNGFjYTFhOTRkZTJlOTUzOTAyZDcyMjgxNDI0MDc0NDNiMWQ1MTcxMDc2NDhhN2JhYjgzMDc0OTg3ZDA5NzhiYzYxZDQxOWJjODQ1OTFjOTY5YzNkNmY0ZTg2ZmM0NzM4NzM3YmMwNTU4NzU1YzExMGEKK1NJRzogNDA4MmE1YmM3MzBmYjU0YjZiZDBiY2QyYTA0NGVkNWQzZDMyN2RjMTljZWFjODgyNWU2MjliOWU2NDIzY2IxYzYxNDIzNmYwOTdhNmI3M2Q0NzM5NDdjYjgxYzRlMjcwODUyZWU1ZjEzYTViMDNkYzE4ZTFjOWMyN2E5YTY4MDIKKworVFNUOiA1NzAKK1NLOiAgMjc2NTQ4MjkwZjNlMGY5MDA1MTVkYzYzMzY2YzAzZmUwZmM2ZWUxMzBjMjFmYjYwYTRkZjljZjQ2NDc5N2NkYQorUEs6ICA3ZTJhMzU3ODAwMGEwODdlZGNjOWU5NGZkZTUwOWZjNGJlMDVjYTBkZDA5MGRmMDFhZTExMjExMjM1MzZmNzJhCitNU0c6IGYwZGI0NDJkZTI5YTdhMWRlZDU1MGQxMjAwMDJjYzEyYWJmZmY5OGIxZjU3NmQ2NWJkZTE2ZGVhYmE2ODdlNGUwYjBkNWE4NzQ4ZDc1MDNkYTI5NjljNjRkNmE3YzI4ZDI3YjZjOTNhZDI1N2NlMzJlY2RhZWUzNzVmNDNmZmY5N2M0MzJkNDUzZjcxOTZjNzA5YzNiZGZiNzM4OGQ0ZDhlYWYxMzlmMTgyOTQwY2UxN2I0NTUyZTJkMjBhZWQ1NTU3YmE0ZDJhY2JmODQ1NzMwYzBhNjZiNDViNDA5NTBiYWY2YTk0NjQzN2FmNmM5ZTNiMzNhNzllMDRkY2VhZTU3YzJhNTQ5NTQyZWFiZDIxNmJmMTM5NDhkNDFmZmI5NDgzZmUyOTgwMWZjOGMxNzgyODQwZGVlYjNmYjRkYTMxOTI3ODViY2ExM2VkMGE5ZWZmNTdkNjEzNmJhZmJmOWRlYzY5N2I4MzI0NDdiMmI2ZTczMGZhN2Y5OTk1YmFjNmI3ODMyZWFhMDk5MDVlZTQ5ZDQ2NWE1ZWU0NTBmNTJkMWE2ZDM2NGM2MTgxNDRlODg2ZThlZjYzM2RjNzlkMGFmODkzZDE2YjNlZWRhMGZlZmVmZDg3NTlmMmEwZGExOTMwMTcwZGQxOWViNzhmMGQ3YTdiNzQ1MTU0MDMzNzVhOTViZGJjY2UwMThiYzFlZGIwOGQ4OTdiYjc5OGE5NWU3ZTg2YTUyYWYzZDliOGE0YTE0YjAzNzFkNjM0OThkY2IyMDE2MjQ4ZWJkMGJlODAwZTlmMjFkNTQ5ZTVlMGU3YjQ4OTVjYTVjYjcyNWEwY2FiMjdkYThhOGIxMjk5YmUzOGE0MjYwOTAwYWUxMGRmNWJhYmExMWFlMmJhYjcxNzlkZDg0NTM5Njk0MjljY2M0ZDQxNjA1NWYyYmNiOTNjMWNhYzZkN2U4MDRjZjgxMmRmMTQ2MmYyMmVlOWU4MzNhOTc2OWU4ZTY3NzU1MDQwMmM0MDk0ZGYyMTJmZDJjNWZjYzA5YTcyYzdjZTAwNzc1MTAwNzMwOTBkMGU2M2RiNjM3ZDQzZDRjMjFmODYxOWQzNGRhNWRiMDgwMzNmNjg2Y2U4YjhhMDgyMTIyMmY5NTQzNGFjNGU2ZjcwMzA5NGVkZGVkNmZiMWI4NDZlOTc5NjUwOTc5ZDNjNzc0NTNmNDBmN2ZlZTdjM2U4OGE5NmZkMWQ3MDJlODFjMmE0ZjNmMzc1M2M3OTY0ODQyZGZkOWQzOTU4YTc0M2RhMDYzZDFkNjQ4ZTUxYjIxMGEyOGVkMjQ4N2YxNGQ1ZjFiYzZmMzM5YjJkZDE3YTY2MWMzOTczNmRhOTllNGE0ZjA3MzYwMzQyZDIzN2UzODEzZWEzOTk4ZDY2ZWIzMWEyZDcwOGFmMDY1YzMyYjkyN2Y3NTdjMzdhODAwNjYwNjc0ZTk3MTdiYTU4ZjI4MGViMmFhNDY0ZmE3NDQwMjEwOGE1ZDU2NjJlOGQwZmVhZjMyOTY4N2EKK1NJRzogODhhMTQ2MjYxYWQxMTFjODBmYTQyOTk1NzdlNzEwZjY4NTljZjBkMWNhODBlNTEyYTU1MmM3MjViODM4NDAzN2VlY2Y2NDY1Y2U5NzU4NWM5ZDY2MGE0MWFiOTEwNGU1ZjdjOWIyZjhlYzZmYjIxZjFkZGQ1MGQ2NWI5YjY2MGUKKworVFNUOiA1NzEKK1NLOiAgOTcyYzA2MTY1NTZlZjIyYzIxNDg2OGZkZDgyMmM1NTczOWUxZjk2YTkzYWU4MzUxMmFmZGE5Y2E3YWE3NGNkMgorUEs6ICA5ZTFjNmQ0MTA3ZjhhYjgxNjFjNWRiNWI4OGEzN2NhMWRlOWY0ZTI5MTM2N2FiYjFlZmM4NGY4M2Y3MDc2OTUzCitNU0c6IDg2ODllMmY5NWM4ZmQ1MGRjNDQ2NjRhMThmYjFhOWYyYzhmM2VlNzNjMGY5NTg3ZWUyOGJmYTM1YzkyMzFjNzViZmQzZDk1MzQxNzRlNWFkM2ZhOWYwOTJmMjU5OTQyYTBmZjBiYTJjYTJjYjU5MDQzZDE5MmNhOGUzYzg4NjliZWRkMjM1NGNiYzVhYzc4MmQ3MjdjMGI2OTQwN2Y2OGQxMzI2ZGY2NWE2MGM0ZDMyZjg3ZjE5YTEwZjNkNzY1ZmY5MjM0MzRmNTUxMWQxMzRkMzk3YzRmZWY2YmIxOTUzYWJmY2U2MDgyN2MzNTlhYTRiNTRmOTEyYWE4YjE3YjgzZGNjN2UzYmNiYzUwNWJhMDQ2ZmU1N2MxNmRhY2Y0ZWUyZmFkNTM4YmMwNjgxN2M5YjlkOGRiYzVmOWQ5YmJmOWY0YTkzNGYxNGE0MmMyOWUwZTJmM2E0OWY0NmIyMGVlNzZjZmUyMGRlYTFlOTc0NTBlYjZhOGZkYTA0ODE2OGRkODI3ODEwMjA3ZjAwNWEzY2FhOTNjYTExZjRlZTYwOGE3YTkzNTU0OTQzMTNhZWM4ZDcwNzVhZmM5NGM3Y2NjYzc1YzIzMTliYjQ1OGMwY2UzNzNlOWQwMDdmNzUzYjMzYjUyNzkzZDU4NDk2YjJkMjVjZDFkY2Q3ODMyYWFjNWRkYjM4ZjRkYjE5YzQyNzIxOWUxYTA0MjBlYWQ0N2JhOTVhYjZkODljNjU5MzkwNDFjYzczNGMwOGViNmI0NzZjYWY3ZmM3NmM1OThkOTQ3ZmY0NDRiMTA3NzBmNjI5NDVhZTY1MDQ0Zjc4MDk4Mjk5ZTI2MjZiNjM4YTczMjhkMWI3ZGFhNTg4OWU4ZGI5NGJiZmYyZGVkNjJlMTQ0NjM3NjAyMjdjM2YzMjZlZDQ5MzU2NWRkZjBhMTc2MWI4ZTRiYjdkMjQxMGZhMGZkYmYzNTY4NDM5N2VlZmVhOTU4OTU4ODlhMGE5ZGZmYzVlMDJjMDkyMzgzYjdjZTc0ZDJkOTA5Mzk5MTZmMjZiNzFhZmQyNjVmOGJlYzc0ZjBkZTI0N2M5NjQzOTA1NTgzZGYzY2VlMjM1MzdkNmI1NjhjODMzOGNlNWZlZTQyZjdkZDE1ZGFkNTI0N2YwMDlhY2JmZDVkNzY5YjYzNjY5NTljZDBhZTE1MGY1OGY3YzgwZmExMGQ5ODllZDkwMTE5MzcyZTVmZWE1ZGE0OGE0ZThlYTljNzI3ODc1ZGM0YTIwMDViMGRjMmUzZjY5N2MwY2UwYTRiZGIyZjc1MGMwNGZiYzBjMjdkMDJkZDgyODZlNTRjOWMzOTU5YjZmZmJkYjFkZTJhZmZlOWU3ODI2NTFlNTE2OGE1MDBhZmVkMDM3YjNlMTc5MGRkZDU5Mzg1MWE2YTZjY2NhOWZmZmI0YTk5ZTI3ZGY0MzgxODg3MTUzNmFiMDRmMTRhMDZhMWM3Y2I0N2JlZDYyNDFjZTc0MzBhZDNlNjQwYTcyNjc1MmZhMDZhOQorU0lHOiA1NGRkMDZmYmIzZDdjNjNmOGNkYWY3ODNjMmQ3YmFjMTZiNGM4MjZlMmQxYjE4MDdjODRlMDQ5ZjY0ZTI3MWIyMWNmYTNlMzdjMzQ0MjYwMjg3ODA1ZDcxODgwNmI2MmM1NmI0N2Y2ZDVjNTA4MTI1YzlmYjVkNWVhMzVmZDUwMQorCitUU1Q6IDU3MgorU0s6ICBlMDQwNWQzNzg5M2U4OWY1MzgxMWQ2ZDQ0NmUxZjE5M2Y1MWFmYTFiYmJhNzI1Zjk1ZWI0ODAzMzQyNGEyNTA5CitQSzogIDQ1MTA0ZDU5NWU0NDNlOGNlNjU0ZGU5ZDY1NTA1NGJmMGE5OWQzNTYxM2Q3N2Q1NzQ1NGNhMmQxYzg5OWI1MTcKK01TRzogZGY1OGM0ZmQwNzAyYTIwZmFmYTNkMWQ0ZmU3ZDg1OTM4YjEyMGZjMTFlOGQ0MWI2MDFmMGU2MGU0MjIzNmE0OWYxMjY4MTNiZDUxMmVlNzEzNTkwNjFlMTNlYjMxNGQ0MTdmNTZkNmQ1NjAyODVmYTg5OTEyMTMyODRjNDJiYzJjZWYyZGM5MzdiZGMwYjVlOWRjMjI2OWFmYWIzMmRiMzBlNjg0OTg1NTk1MWNmYmM1M2VjZmEwMTY0Mzg2M2UwMzI4OTk1ZmU4NTBjMGRiNTU0MjFiZmE1NjQ2MDFiOGM5ZGI3NTUyYzdlNmFhN2FkZmExNWE1ODAyMWE4NDI2NmU5NTk1YzY1ZmNhNGExNWZhNzBmNTVmNWQyMTJjOWUyNzdmZmI4MzBmNGNhZDE4NjFmM2Y0OTVhOWQ2NzJmNTY5MTMxMDYzOWMxMmRjZDA3ZTNlZjE3YTIzNzUwYmNiNDZiN2FkN2VhYzQ2MmViNTEyMjI1ZjNiZTdlMzJmOGY0OTg3YTExZGYzNDExNjYwNjJiNDNjNjNhYjg1OGE2MDA0OTc2NjdmYmI4OGU5M2M3ZTJlMGFhYjQxYzA5YzAyM2ViOTAyZWMzYmFmNjc5ZTI1Yjk2ZTEwNjkyMWE5MTRmZDVkZTIwMGE0Nzg4OWRlMjNlN2I2NWQwY2NkZjBjMjkwMzY0NjdhMTIxMGMwMDMwMzA5YTJkMDRlYzI1NmQ1YTRkOGI5N2Q0NmEzZTE1ZjM0NWI2NjcxNzA4MDNjZGFjZjZjYjQ4YWRkMGExMzQ2MmRkMzBmYTA2MmJkNDU2NjY0MWRhMDdkN2Y2MWUwNjM2ODZlZGQ5NmJmZThmOTdiOTg2YjdjMGU0NDI0OWNkMmQ3MzE3NDcyOTk5YjhlZTRlYTgwYzkwMmYzYjE4ODkzNjcxMmU4OWQ4YmYwMmNlOGFlNzdiNmIzMWFiYjA2MzIwNjU0NTVkZGQ5ZjlkMWNkOTUzYTRhNDlhYWMxYTE1MTY5ZTY4N2Q0ZmQzZjdjMmVkZmIzYWFiYzNiNjYxNTVmN2QzMTVmOGEyOTRmYWRkZmZkYjQ5NTEzNjdhMGNiODcwNzU5ZTg1YTgzOGFmNjZiYTNmYzEwM2RhMmJhYmMzZjM4MTY5NmVmODg4MmQ4NWE4Mjc4ZDVmYWMzYTcyZjE2ZWIxMTllZTk5MDBiMWZkOTg2YzJhOWY5NGVlZDhlMGQ0ZjI3MzY5N2U0MzYzYTk3NWZmNmE3YjgwZDViNGVjNTM1NWJmNjNiNDJiNzFjZDQ4NDI0MDFkMzhiNWUwMGNjOTdiZmRhNDBlNDU2NjUzNjgzYmM4ZTZkYWRlN2RjZjk4NWE5N2IwYjU3NzZjNGQ3MmNhMTNhMTQ3NGU0ZWIyZWNjZmNkNDI4Nzg2ZGRkMDI0NmQ3M2E2Mzc3YTc5Y2I4ZGE3MjBlMjI2YzE5NDg5YmQxMGNlZGRlNzRiNDlmYWMyY2ZhMjA3MTI5YzZhMTA4YWExNjRiZTlkODA5YzRkMzExNDczNjAKK1NJRzogNzdkZGQ0OTFjYTY2MmViZmZiMTJmN2Y0OTJkN2ZiYzFhMWI0NDdmNmM4NTk5OGYyZjdjYzlhZGNlNjdkZTYzYjZlZWJkMDgxMTc4NDVhMDMwMmY3MzQ5NzE0YmE5ZGIyYWY1ODA0OGI4NTgzN2Q3NjYwZWMzZGViZWVlMmQwMGYKKworVFNUOiA1NzMKK1NLOiAgNTc1NmU3NTJkZmY2OWUzZWVkODQ4ZTRhNDljN2E4YmFjYTEyMTU0Zjk0MzFkZWMzNTYyNmVmOGQ3NWE0NDUxNAorUEs6ICA1OTEwZWYwMGE1YjM1NDE0M2M0NjU2MWRhNjJjNDFhYTEzZDI5YzE4ZGM2MTUzYmY4ZTUwMmUwMTE0MDA3NzI4CitNU0c6IGViMjE5MGEzMjE5Yzc5MmI2NjY2YjI3NTI3MzNhZDlmODZmYzM5MDE1NWM0YjQzOGJlMTk2OTU5MzgzYjI1ZjNhNzQ5NTMwZDVhNGIxNWViZTJjMThkOTkxNzhlNmQ0NWJiNGFhMjEyMGY5NWEzNTJlMDQwNmM2M2FjODY3MjQ4ZDllZmJhMTI0MjMxMDY0ODczYzgyZmU5OTVkZDAzMWM3Y2JjN2QxNWVjMTkxZmJiNmM0NzRkYzRjNzc3ZThmNDU3ODQxZWI0NjI0ODQxYzE1MmQxNWVkZTI2ZTc4NDc5YTZhMjVmZmEzMzU1NjNmMTA2NGVmMDk1NThiOTEwZTI2MDg0MTg4MjBmNDk1NTRiNjcwYzZiYWIzNGQxZDYwOTg0ZGVhNTBlZDZhMzc1ZjQ1YTc0YmVhZGZiMDRiZDkzMDBiZDU5NGUyZTIwZWE1ZDMwNTJiYjdkZGM1MWE5NDlhMDA0Nzk3MjY4MmViZTY2ZDM4YWFjNjI5MjcyNzBkZTQyMTUwZDU4MjIxZDAzYjhhY2UzNTg5OTMzNDg3YmYyM2QyOWM1YzJjODQzYWVmYTJlMWNhMjJmOWQxNjgwZjgwYzc2NmQxNDNjZTVlY2VmMjUzYTc0NWNiNzFlNzJmNjUwNGFkOTExZjdjYjRhODE5Y2QwNzQ4NjNhOTI3MDY5MjlhMzE0MmY4ZGI3YWMxNjQxMDJhYzJjYTBkMmUxOWE3MjVlMWI1ZjgxZjQ0M2M3M2UwNDg0ZjI2YTQ1YTNhZWY4NGYxZjNmYTA0YTRhYzY5NWQyZGFiNmVmYmE0NTZhMjgxYTM5NzNjYzE4NmU2ODBhNjZkZjUyMWE0ZDFmOWVkZjRkZmIyNzRhNDI3MDk3YmY4NjMyODFjZmIwZWQ4MGY4ZDc2NzY2MzhkNmNkYWM5Mzc4NDNlZmJjZmNlOTFkZTFkZjZjNTJiNTk0NTcxYjkzMTU2MDBlNGI2NTUyZGVmYjg0MzdhODA3YmEyMTI5OGUzZDk3MjIxMmJhMzE0NjkyOTE3ZjQwMDc1MzExYWNkMDA5Mzk1MjQxYjlmMWIyNTZjNTE1NzM1ZGM2NzRmOGU4NjZkMWVlYjRjMzI4NTQ4YWVlNzEyMzFjNGM5ZDViZDIyZTM5ZGU4OGQxOWZhYmY0OWYwYjk4NjljYmY4MzUyMTRiMTU1MjJhOTNkM2E1MDA3YjExZjBiNTBlNTIyOGQ0ZWViYjQ1NzFiMzVkYTg0ZjRmNjg3ZTNmNDM3OTNkNTRmMzgyNWIzN2E1MDllYTU2NGJkZjIxN2ZmNGFkZjY4NDdiYmVhNDMxNmExZGJjYzc0NDhlY2Q1MzYzZWFhYmMxMjhkZWNmMDU0ZWUxYTBlZTJkODcxOTc5ZjhhNjNiMjY5MmIwOWY2ZTk4NmExMzhlN2Y2OGY2MGFhNDI2YTFjOWIwMWE0OTAyZTEzYjE3YmM4MzEyNDEwYzI4YmVkMjliNjAxYjBmYzlmM2JjMmQyMjNmODc1MjUxMTAwZjg2OWM2YjU4NDQKK1NJRzogODE1N2Q4MzM0ZGVkMWEzMjY5OWIzNTBhYzBkNDEyMDAyOGNkOGVmODE4OTQ0ODkzNDg1MGU1MGVlNDk5OWQ4ZmEyY2QyNTc2NDZkOTJmYmE1ZDY2MmE4MjNlNjIyMDhhYjRmYmUwMTcxNGE4NDhhMGI5MGI1NWFkY2QyNDY5MDIKKworVFNUOiA1NzQKK1NLOiAgYjkwNGFjYjE5ZTVjZjg3MmQzNjQwY2QxOGRkZjNjMGI2NjU3ZTAxMTdjZTY1OWRiZjUwMjU5MDE1ZDNmYmYzMgorUEs6ICBlMDRhOGFhNTZkMTgxODQ4M2IxMGQwYTdjOTE5ZTFkNWQ4MDAxZTM1NTEwZTFlYzYyZjcxMTRkYmU4MWFlMGJlCitNU0c6IDgzZjQxMjRkNWFmOTU1MTM5YjFiYzU0NDFlOTdjNWZhYzQ5MWI0ZWE5MTE0MDdlMTU0MjBhMDM0N2VkN2ZhMWY4ODE5ZTM2YzhlZDU3NDBjOTlkNDUwNWE3OGI2MTlkNTYwNzQ5YWY1MGIwNTczNTEwODE2ZDYxMzIyY2RhOTc2YTVkNGNhMzIwNWY1ZjBlNjBlNzU5YTVkZjFhMGJkZjM2ZGZlOTcxNzkwNmFjNTdjYmZjOTcwYWI0M2I2ZmExOGU2YzAwMDZjODRmYzcyNTQ0NzBhMGI3NzQ3MjdiZjVmOGU2Nzk0MjNhNTMxZTQxY2I1MzEwZjliY2JmNWE1NDQ1ZWJjMzlmYmQ5MDljZTExZTk3YmMyZjY2YTRhMWJiNmMyZjE2N2YyYzZlODBlYjliOGI3MmRmM2U4Y2ZkNGU1MTQ0OGRjMTRjMGI4MzdmMjk0OTY5M2QxZDA1NGM4Zjk1YmZmN2YxZTM2NDU2N2QwMzRmMjIyM2UxNTk0NzcyYTQzZGNmZTA1OTdmZDZkMTMzYjNmMmU5NmZmYzU2NjdkZDU5MjhmMjNlYzNjNzUwZjg0NTk5M2EzNGU5Nzc2MTU5YTY4MzBkNmZkOTAxM2VlN2FlYWExZmNjZDY5Yjk2ZGYyODQ3MDRmZDA4ODg4YjE1YjY0ZTJlOTBkNTc4YzVjZmMwZjk1NjkzZjZhYjY1YzY5NDc0NDZhODU3YzAyOWM3Y2E2NjA4MGI3NTRjNzczNGI3ODk5OGFiZTliN2NjNmVmZDA5YTQ0MTgxOTRkODhiMzRlYzZjMzNhZjYzMGRiODFkZTViOTlmZTY1YWFjOGI3MzM2MjM3OTExOWM3MDBkMTA3ZWRmYzE5ZjI3MDc2MDQ2OGVlOGU1ZjE1NWQ5YTM0N2U1N2I1OTMwZjMyN2E4ZDExYzY2NzRkZGQwMjBmOWU3ZDliNzYxZGJhNWI4M2E4NzMwMmYxODMzZTVhYmQ0OTUyNmQ2NjM5MWU1YmYwZTM1YjQ0NTNkNjMwYmY3ZDBhZGJmZTUwMWFlZjgxZTZjNTkzOGY5MmNiNzUyZjVmMTRkMjgwNmY5MGFlMTU0NjA1MWNjYzdmOTEzYzVkNmEzOGZmM2I3YjlhMjM2NjJlZjFmMDA4MDhlZGIyZmEzMWVjYmE1YzhkMzM4N2U4NzU0MWNkMDYxNmVkYmYzYWFhMzVhNTM3OTIyODYxZjQ0Y2JkOWY5OTJiODI0NmQ5YzY0YzQxOTg4MTcwMWFiNDNmN2ZkNDY0MjEwZDgwMmJhNjU2ZDk1YzBmMjRhMzQ1OTliMjBiMWVjMjAwMTE0ODVjZmNiMzE4NmI3YmNmNjlkNzQ1ODFhN2EzZWVkNjEzNGM0ZWVjZDY1NTc0YTQzMjBkOWM1N2E4NDljNGU3OGM4YTVjZTgyNTA1MDA0YTU0ZjE5ZDRiZGM4MjIzNDAxYjM0OTQ2YjdkNjZlNDdlNjNjZjlkMGY1N2QwOTQ1NDkxMzg0YmM2ODY4YzRiNDc4NjkwZTU1MDAyMWRmMQorU0lHOiA5YWFmOGFjOTcxNDBkNTUwOGQ1OGY1YWM4MmI3ZmQ0N2U2YjFmNjhhN2M3OGEyYWMwNmYwNDE2ZWY4ZTk5MTk1M2Y2MmM0N2ZkNWZiYzZjMWUwMWJhZTFjOTJhMzNlZjUyYjdlZmE1ZjE3YmI4NjMzYmRjMWFlZWJjZTMxOGYwZgorCitUU1Q6IDU3NQorU0s6ICA4YTM1MDFiNzY5NTM2MDNjOTAzM2UzYmNiZjNlYzM3OGQyNTcwMTFhNmM1MGI4OTc2MmQ0OTFlYWE3MmM1ZTBkCitQSzogIDc3OGYyMDE5ZGNkOGRiYjg2YzY3MzdjYzhkYzE5MGM1YTA0YzUwYjViZjQ1ODhiYzI5ZmEyYTQ3YWYyNTI2NzIKK01TRzogZTYwOWYxMjI0YTZhNDUxMTQwY2JjMDI1NGQ0MzJjZTVmZGRkMDhhOGU5MTJmODFjNDEyZmRmZDUxODJmZjZhYzJmMTNjNTc2YzgxNDViMTVmMjViNDA5ZDg1M2Y5MTQ0MDllNGUwMmNlZmMzOWQ5YmVmNGEyYTA2MDQ5ODU3MGIyZDNhMjgzOGM5YjBiOGUzYWY0ZmMzN2UxOTE1ZjgwNGE4MDE4ODU4NWIzMGI2OGEzZmZiMmU5NjBjNzMyMGU4MjdkMmZlMzZlNmEzMjhjYzZlNzgwNjM0OGFkYjBiNzczYjc4NGRlNTI5YmI2ZjY0NzUxYjIxMDU4NTk0OTRmZDQ5ZGIwYmM3ZjYyZGY0NmI5ZDdjZTY3Njk3NWNjNWY0Mzg1NjQ5ODQzNjgxMmUwNGYyNmZiOGI4YWI3ZWJhMTJmMWQ1NjcyMmViODJlYmZhZmE0NzM1OTc3YTI2NjgxY2IwM2ZhNGJjNjk1MWFiOWNiZGY3ODdlMzI3OGYyZjU3ZjI5ZTEyMDk1ZjhjYTJhMTc4Y2ZhNzU3MTMzN2YwMjc0MjM3NjY5Zjk3NjU3ZDRiYWRiMzk0MzZkNzg2NDkyNTgwZmQ1NWQ4NmJlM2EwY2QxN2QxNjA1NzAxN2JhYWFlYTAwYzFlMTQ1NTIxNTliY2FiYzBlNjY2YmFkMzQxOGU0ZWMxM2JmZTE2M2JlMjU2ZjBjODliYzIzNDRhOGRkZjk5Y2E4MTYwYjE4OTg3NWFkMzIyZDkwZjU4MTMyNTI4MWQ1Mzg5OTY1YzBhN2I3YmNhZTIyOTRhM2NiZTM1YTRlNGU4M2I1NGM0Mjc2MzUzOTYwZmFkMTE4NTMyZDQ5YjcwNzZmMjVhZDE5MGFiNTY5NDkxNGY3MTA4YjBhYjY5NjlhMTkxMjhmYjBhZWYwMGU2NWEwNGZjODMyZDA3Njk2MTY3YjkzNDJiMzU1ZWM1NzczN2NhMzdjYmZmM2JiMzE5MzFjYjU4NzEyYTRjNDY4OTUyYzY0NTlkNTY3YTI2ZTc5NTAxZTRlMzFiMWIwOTUzNTM3NjMyMDI5ZTliNDkwZjcyZTVhNmUwNTdkZGI0YjMxNzU2ZmQ5NzA0MjE4YjFiOGY0ZGNiNTQzMGMwMjUwNDJmNDcxNjliZmM3YzgwZDcxY2FiOGNhMDdmMzQwYWZhMDA4YWJiZTJlM2EwYWJlMTQxZGE4ZDQxY2E2YmQ2OWQzNmZkYjExYTQxY2UwYjcyZmFiYzAwZDk3ZWE2MDUyNzAwMTBiMjU5ZGY4ZTEwZGQyMmRjMTdjMTM5OTBhMDVmMDIzM2UzY2E4NTZiNDA5NzFjYjNlMjFjOGIzOTUwYjEzZmM4NGUxZjI2NmMyYTZmYmVjZTg4ZDU5NzI1YzNjZmIyMjI1ZGJjMWVlOTViNjg2ZGI3MDRmYzkzN2I3NjZmMGE5YmZlOTVhNDJiOTAxMGYxMjI5YzYxMGQ3ZWRlMDk1NzEyYzhmMGYxZmIwMDQ3YzA0MGE4NzAzMDZjZDhkYzc0YzRkYTUxYmYKK1NJRzogYThhMzA5YmE1MjEyNWU3NmE0YTYxZWI0M2ZkNDEzNWM0MWFiMTE3OTliOTFjYzU0ZmZjOWM2YTIwZjA1MGNjNTk1YjI4MTQzYzg3NGJkYjkyOGJlZWQyNjFkOWMwZjEyYWExOTJlNjY0MGJmZGFkNTRiYTBkNDc4NDI2YmNlMDkKKworVFNUOiA1NzYKK1NLOiAgNDJiNTM2NTJkMDhiNWQ3NjZlNjZhZDhmM2ViZjY5M2NmZDc3OTA3Y2FkZDk4YjU0NjZkZjc3ZGZhMmM2MzdhZAorUEs6ICA4ODQ2M2JiOGE0YjYzODhkOTI0Y2I4NjIwOTgzNDE5NTQzNWQ3OWQ3N2Y4YzAyZjQ2YmJkMTZkODJlZmU0MmIzCitNU0c6IDllZTkxM2M3NGVlM2M1ZThjOTBkNjRiOGFlM2E2MDA0OWZjNzY1ZTE3NjA2MGJjZDFjZDA5ZjBlZGE2MGJmMjNiYWRiOGExY2FhYzNkNjZlYmM1MjY4MTQ2ZWU0YTU0ZTFlYjIzMWVkMjVlZmY5NWI5MGE2ZTk4MzM3YTU0MGEzZjQ4NDQ5Nzk0YTQ4NzNiZmMyZTg0NzI4OTY2YmI3YzZmZjY3NmEyZmY1NzMxMWMxYzI1ZTE1ZmJmM2Q0MGU5ZjI1YWI1ZGI5MWZkZGI3YTBhZTQzNmM4ZWMwNzA3NTRiNmQ3NDNhYTFkNjA0OGZiNWJkN2Y1YjhlNGNjYWQyMDMyODM4OTUzMGYxMTM3NGE0ODliMWQ1MDUzMWEzOWM5YjMyYjQwMzY5NjI2MDA2ZDI2NGE5OWVlYzRmYWMxMzQxZjRlNzQ2Nzk0NTdiNDE4ZTZiYmZiYTIzM2YxY2ExNThmN2IyOWQ0MGQ1MDMwMWY5ZDkyNTM2ZmRjNWMyM2ZlNWRlZTRkNmRmMGViZjEzZGZhMzc1NGExNGM4NTYwMDlhZGVhMWRkYTQwOTMwNGMxZjYwZDI1MzMwZmIxMDk1Nzk0N2EwMDUwOGYyZmQ3NjQyMmVhYzY5NGNjMzlmYThhZTdmY2M3N2EwMmZkOWVlNWY5MTBkOTNlOGFhYzY4ZjE0NWRkODc4ODc2YmE4ZWRhMGE0OWZjYjIwOWMzNGVhMjIwZDRkMDYwNTU0NmZjNGE4MDliYWYwMTBkNTMzZTQ1ZDE3YjBlMTZhNDZlOTFlYTZmZWMyY2RjNWE4YjNlYzUwMTRiMjVlOTJkOGU1YzkyOGFiMDY5OTNkNGZlMjNhYzhkNDVjODkwMzc4ZGQxMzNmMDBlZGI5MzdjMDcxZjc1Y2ZjMTNhNDAyZTNlNDI5YTg0ODY1MmExNzVjOWI2ZjZlYWM4NmY2MTg4YTQ0NDhhOTZjZTI4NzJlNWY2NWY5YmRiODcxNjZjOWI4N2E3ZTk1OGU4MGJiNjU2NmUzZmNmODcxMTkwY2Y0YTg2N2U2MTJjZmMxZTQzNzFkMmI3M2QyYTBhZDBhYTQwMGJhNjllNjYzMzYyMzNiMGYzYzUyYjhhNjhiY2EwNTEyNTYwMTI1NTA0NmU2ZjQ5ZDY4OGQyZGI4NWM3YjgyMTI3MDUxNmUzYzA2MTNmM2YyM2Y5YzU3Y2I0Yzg3MTQyODVjZGY5NWUxMDZhM2I1YWZjYWViODFiNzJmMzQzZTg3YmQ5MmYxNTgxZGNmOWFhOTBhMDI0ZmE0YTEwNDgwNTllMzBkZThmZjBkMTY3OTRkY2Q3NDVkMmIyZDUzNGM1MjBmODI3ODUzODY3NGE5MzRjNmYxNGE4NDI4ZTNkYTAxOGEzNmU0NWFhNTgyN2NmNGIxNTI4NDM0NmZkNjkzNjMxNDkyMTliYjBkMWJjOTI3ZDhkMTkzYzQ4MjY5MmY5N2RjODhkOGVkMzM3ZDBjOWRjOTljN2E1ZTExMWRjZWQ0MjI1MGQ1ODBlMjA2OTJiYjdiODgKK1NJRzogMzBjNGI5OWU2OGVjMzM1MTMwOGZiYzc2ZDljYWYwYWY2MjIxYjU5NmI3MDE3ZmUxMGNjNjMzMDIzYmE5N2YwMjM4OTZmZTMyMmJhYTM0NzY2MDYxMGUwNWZhNDkzZDIxOGZhMzYwZjE4ZDkzZTI3NWQxZWZmNjY2YjYzZGIyMDQKKworVFNUOiA1NzcKK1NLOiAgMTRjZmUwMGZhNzE5MGFlODEwODg4YWUyYmJkMGZmNjQxMmNmMWZkNDA4YTMwODI5NDM4M2ExOTQ1M2I1OTA3MworUEs6ICA0ZTYxYWZlOGMxNzRiNmVlMWEyOWZhMDljZjg3YjQwMDgxMzlmMTA3MGJjODUzMWI2ZDA2ZjU0Yzk1NjJhNGYzCitNU0c6IGJjNjZmODAxZGFhODI5ODU4ZTc0MDI5M2Q0ZDIxODdiOGUxYTVhZmJhNWZkNjdiMTA5NTZjNjUzNDZhY2E5NDQyOWQzMmU0Y2ZiMzU4NGFiMGUwMDVkMGRkNzQyNzgxZDQ3ZTg5NDQ3YzRlMWQ4MWJmN2U2MTU0ZjhmNzNhZjAzMzYxYWQ1NmVhM2MwNjAwMDc1NGI5ZjMyN2Q0ZWRlYWNjNGQzNDhhZmI1NDgyM2UxYzlkNDljZDhmZjJiMTlmNDIwMjFiNDBkNTgwYzM5Y2UzZDI0MzY2MWI4NTQyMWZlYzkxNWJhOWRkMjc2MmY4NTBiZDIwOGZkYmYyMGZmYWJhNTZhNDY4NjYwZjE3YzAwZmIxYzBmNGU4NTI3YTUwOWRkNGVlYzEzMzYwY2Y2ZTNjYWM1NDJiODc1MTgyZjJhN2NlN2JlMGEzMzMwMmZlMjZkMzYyOTYyOTM4NGUzNWMwNjc4OWRlNjM0ZTkwZTk2NGZiZGE4Y2JiYTk4MTExZTIyZThkMDc2MjY4NDI2NmFhYjc2YWViYTRhMzgwNzc4Njk2ODE0YTFlMzExOTQzY2IzNTA1ODkyNjQwYzQ0ZTNhYWM0NTMwYzUwYWM2MDRhOGQyY2NjN2NlYWJmZmVhNGFhM2Q3ZjQ4YTY2ZGNkNzU4OGI4MDIwOWRiYzE3M2YwYzY2M2U4ZmM4N2EzNmU4OTJlYzlhM2ZmOGY2MGQyZTBkODcwNGU1YjZjYmI4NzMyNzUxNTFhZDRjYzAwNTcxNjUwMzE5MDUwMzk2NTFjYTEwYTk1YzZmZGEzYjI3ODI3YTY1N2VmOWE1ZmMzZWI1YjUzY2FjNjFkZGFmNWE0MTcwNGM4Nzg1NzBjYmMzYzQxYzQ3NWIxMTdjMDVlYWIwYmIxOTZiY2I3YzQzMzM0ZGViZDY0YjllMzc0NTBkMjNmNWMxMDE2MWVjNWFiNGZjY2Q3Y2YzMDhlMmE5OTk1Y2M5ZTU3OGI4NWU4Mjg1YTUyMDhiOWVmZDQyYWY5Y2YyYWMyYjNiNzQ2NDI1NDg4OWEyMTg3MzE3ZTMyNDk5NzA5YjkxMzk1M2FkNDZmMWMyM2UxYjZiNTZmMDI0YzRhN2Q0ODQ2MTE5MmMwMWM1NmM1NGM1NjQ3OTFlYzBhNjdiNjFhY2JmOTU3ZTZkMGQ3ZGE4MDUzZWQxM2E0MTg5M2Q3NjdmYzU3MzdjZDE5NTU1M2RhNWQ1YjA3MDY1ZjQ3ZDcyYTM1YzQyYjAwMWViNmRiZDBmOGU3N2E0Yjc2YTYyNjYxOTI2NDdmNDE1NWVhMTFiZDEyMzdiYTc3Yzg3YzYyYmY0YjAxMTQ5ZmM1OGJjMjhmMGI1YTI4NjQ4NWQzNzE3ZDMyMzk2NDA0NjIxOGU3MGM3ZTM4YjdkNWU3NGJhNmIxMmIwMjJmMTgxOTdkOTJjMTNiY2E4OTMzNWM4NTZjYmM1NzU2YWEzYjY0ZWMxZjQ2ZTM5NmIxMTYxYzg3MWNkMmRmZGVkMWE0ZWM5MTkyNzQyOTM3YzA3MDQ1MzFjNworU0lHOiBmNzg1YTQ2ZjY5YmJkMDk5ZmEwMTExMjRiYTkwMzJjMTg5NzQyYzllMDAxZGJiODc4MWQ4MjIzMzQ1YTk1NjlkYzE0NGNhNjk0ZDkwMjQ1ZTBlNTEzZTg4YWIwMjNmN2YwZjk5Yjc0MTYxNTk3NThkZDAzNGU3YTg5Y2ZmMzYwMAorCitUU1Q6IDU3OAorU0s6ICBhYzBmN2YwNDE4ZGU2N2UzNDhmYTZkNTY4NmM0NmQyMWNhNzI2MjJlZTY5ZWFhYmUwMGQ1YzkwNzVhMzRmMTc5CitQSzogIGZlYWJkZTA4ZjAwYTJiNjgyYmNlOWQ0NTk5MGJmNDVhZmM5NTgzMzlkYzQ0MTA2ZGFkMzNiMmM0OTBlZjcwOTAKK01TRzogZThkMGU4MzI1MzM1ZTBmMzVhODU0NjdiZWVkMWUxMWM2YTIwNzhjMzVhZTRhNGExMDU0M2VkZTQwYzE3MTJiYzk1MjAxMmQyZjhmZWMxMDVhZWY3YzZjNjViMzYzNGI0YTc0YjIyYjQ5OGI5MTM1MDdkMWY2Y2ZkZTgzODU4ZTY4MzBjMGFmNGY0NjRhNjg5OWQ1YzRlMjc5YWZmMzY3NTRjMjFkYTgwYTFiYmQxZGNmNDYyMjAzNzViMWUxMTJhNWE3MmYxYWI2ZThmNjQxOTQyZjY2ZDliYmRiYjE3OWNmMDEzOWVhOGRlYjBmNGI4MTRmNTBjNTEzMzI5YTFhMGUyNjdjNDQzM2EyMzMxODJiYzRhMmFjYjJjNmQ0ZjAwYjI0MDk0ZDNiZGMwZWI4MWNmMzdkMzgyNjBjMjEwN2RkOTQ5MDYxM2QyNzZlZTFmNzIyNjZjNmU0YWNjYTUyNDk4MTFhMGY4YTdkYWU2NmFlZGI3NWMzZGY0YzhjYTNjYjVkOWM1NjdiYTU0MWVlNWE5MTQwYzUwNTg3MjcyYWYzNDUzMGFiOGIwOGI5ZWMwMzJlYWMwNjAzOWU2OTI2MzBlMmQ1NTRkZjc3YzFhMDM4OGIzY2FhYTNiZTM3NTRhODQ5NjFmYjI5OWU0MDIyMjcxNThjZTM2M2VhYzI2NDc4ZDQ3OTc3NWU1Njg1YWRiZjgyOGJiMzU1ZTNjODljY2UyNDE1MDNjMTUzNjY0MzJiYTk0Y2QzY2Q5NTQ3OTE0NGI2MzZlMGRlNzBiM2YxNmQxYTNjYTUxOGUzOTkwMDlhNGMyNDdhN2Y5NjM2N2M3MTQ2NjA4YWFjYzAwMTRmYzM1Yjg0YWY5OTMzZjA5YmFiYjg5OTM3YWJiOGNlZDExMTg5MTM0M2RkYjc5ZjYwYjc4ODk4YWI1OTM4ZjhiYTM4MTRiZDgwMDI2MDViMWRmZDI5N2ZhMDdjNDc1YTBkNGY4ZjQ0NTFhY2Q3MDdkZThhZjZjMGU4ODE4ODMzYTNhYmU1Yzk2ZDFhOGM2Yzk2ZTJjYjYzMzI4ZWJhNDRkZDFkMzQ2ODRlNDEyZjI4OGUwNjUyMDlkMTFlYjgwOTRkMjJlNGNjODAyNjI5Y2NiYTMzOTI2YmYxYWQzNmE2Mjg1MTM4YWJlZTA1YzVhMzlhNDc1ZjNmZGQwYjNlYzhjMzcwY2Q5NTdhODM3OWVjMmNkYWYwM2U4OTVjMWJhMTJiNDQ5ZDZjZDhiZTBmMzVkOTllMmI3ZmJhYTkyZGQ1NGU2NGU3YzM1Y2ViODhhNzFhNjgwNTI3Y2IzNzNhZmUxNGNkZDE1OGEwYjkwYmYyZGFlYzgwZDJlZGJkYzMxMjhjZDZiNjNmYTUzMmExYzI3OGNkZmUwZjhlYmI0YWJiYTVlMWE4MmJjNWMzZmVkMTVjNTc5NWJkOWZmYjU3NjA4MmNjNDc5ZmExYjA0YzVjNWFmY2FkMjY5YTBmMWFkZGZlNzYwNDJjM2E4ZjFmMjUzNzdiNmNiNzJlYzE2MTRlYjYzODMKK1NJRzogNzU5MWNmODI1N2JlYWQzOWExYWQzYmExOTE4ZDUxOGU2NzI0MzU2YmY2MjVhNTczZWFlNTAxZDFhZjk0NmMxM2MyOTBjYjYzMTU2ZWM5ZDM2MjcyNmVlNTBiMzlmYzBhN2EyYmJkNjlkNGE4MWI3NTkzMmE5MGY4YzdhYzdkMDMKKworVFNUOiA1NzkKK1NLOiAgYjVhN2M3Njc5MzYzODBiM2U5ODc1MWNhZmQzZWE4OWIzODhhMzJjZjgyOGIzMjFjNWJkMGNjOGRkODViYWYwMAorUEs6ICBiZTdmYTY1ZjFmNmJlNTEwMjdmOGI4NDhkYjdhOGM0MDQ5NjFiZjFlMjFhMjNkZjIzYmI4Y2UwNTg1MGNkYWExCitNU0c6IDZiNjdjNzk1ZDY2ZmFjN2JhYzg0NDJhNmMwOTkyY2I1NzU4ODQzYjNlMzkzOWUzYzI3NmM2ZTkwMDhkYTgyMDA3Njc3YmY5ZTY3ZTlhYzVhMWEwZjQ4NmJlYWMwZDg1NjE5MWZhZTI1YTEyNzM5MmJlZDQ2OWJjNzhkZWIwYzRiODkzZjY3ZjE3MTZkODM1MDkwNzdlNGExYmZkNDEzNmQwMzE1MmRjYzNiNzZkOTUyNDk0MGE2MDY0YzY2OWZiZjUxZjZiOTEwMzRiNmQ1ZjI4OTg2NzhhMTNhMjQ3MGY2NjQxZWM4MDI0NTdjMDEwMmMzZWJmNjM0NWMzMjdlNzQxYjgwNjQ0YjNhOTliZjcyYjU5YWI4MDE2ZjM1ZDI1MTg4YTA4NTc1MGRjMDYwZTVhOGQ1MjRhZTIxM2YwNzhmMjg4YzdiMzRiYzQxZjNjZTM1NmJmMmRhZmRkMmUwZGI0ZmI4ZDdjMmMzMTlmOTkwNjAwNTk3MTcwMmU0OWNhNjJlODA1MDU0MGQ0MTIxZDI0MmYyZWVhYjFiZDEzNGU2MGJmMTFiM2VjNzFmNzc2NWE5N2MwZTA5ODQ1NWU1OWQyMjM1ZDZiMzdlN2M5ZjViMjFmYTExMmMzYmEzOWU0ZWEyMDA2MTRmNThkZmIzZWI3YjgzNmYwYmVjMWRkZDQzOGQxNDIyNDUwYWU3ZGVkMWRmOWQ3MWU1ZDliYzhmYTNiNmU2Zjc4NDQ2Y2U3Yzc5ZDBiY2ZiMWMyZDI2YzZmZWNlNjg2ODJkZmZjNjBhOWM2ZTBhZDA1ZjJhMDlmMjFkNzUyMzI1MWNiMGMzZDA4ZWZiYmY4YWMxNjMzOWQ3MTcwMjRkNjc2MDI0YzFlZTNjMWY2MmM1YWVhYjdmZmY5MzdjNTc0NTRkZjdiZDk2Zjk4NDRhMmEzOTk5NTg0MThhYWE2ZjE4NDhiZWJmN2JmMTI5MmMyNGViNWNkOGVhNTYzNDBjNWJlYjI2ODgwMjRhNjk1MzI3NWJlNmVmZDFiNzFiYThiZTZlYjc3ZjBjNjVhN2M1MTExYjk2YzRjMWYzOWNiN2FhZjgzZmRhYWU4ZDE0OGQ3YThhZjQwYWU5ZTY1MTkxOWY3Y2UyOGM4YjJiNmU0NWU0ZDNkNTZmZGQ1NGQwMGMyNDEyNzkwY2JkNmY4MGUxMDgxOWUwYjhmMzdjODRmYTAwNDk4OGFkYWZjY2JiYzIxYzYzZDZiZjJlNzMyZDlkZDYzYmQ0OWIwNDEyYjk2NzRlMWU4OGY2MTQyZjdmODY3ZjFmMjY4OTFiMjI0MzA0MjNjZWM0ZGI5MWI2MWMyYWJjNWM4ZmJkNDZiOGI5MzU5NmZjNTE2MDY4MzEzNmUyMTEyOTgyMjc5NmViNWVhMDg4ZTBhN2Q4MTIxYjI1NTcyZTNlYzM3NzQzZDFmZjZkOGQxYzM1MzY0MzlhMTBlODRhNjY1ZjJjNzVlZTczY2RjNmZmYWM0Y2MyODcyNDQ2OWY3OTcwYjQ3NTA3ZGYzZTFiMTRkNDc3YWVjMmJiMjAKK1NJRzogNjBlNGQyM2YxZjA4ZmNlNDY2Yzk5MTVkZGVkOTMyNTZiNTJiMzI3ZTVmODFmYmIzMWQxZDEwZDMyMWMzOTAzNjZlZjAwMWZkNzU5YWE5ZDBhNTUxNjJkNTM2NGQ5MThiNDhjNzMyN2U3N2NmNTM1OGJjNDMxOWUzMjVjZGQ2MDgKKworVFNUOiA1ODAKK1NLOiAgZTEzNmYzOThhNjA1ZDEzNDU3ODQ4Y2VhZDA3YzcyODZmNDJlMmYyOGRmOGMxMjhhM2QwYmI3MmIyOWFhY2MxOQorUEs6ICA2YWE1MDQ1YTY2Zjc3MmE1NzFmZTNlNDJkMTE3ZWZjZGY2YzQ5NTkxOTk2MTg2MDEyZmE5OGY3YzQ4ZTBjZGE3CitNU0c6IGQzMjg1NzlkZTRjNTM3MmYzYjM4MmM0ODAxMWIyZDRjNjAyOWY5MDRmM2EzM2UwN2QwODNkN2UyYjAzNzU2YWYyYzRjOTdhMmQ2NmMxMGVjNDE1NGQ4NzQ3OTIwNDJiNjQ2ZTRhYWU1MTAxZDUwMWJkMWJmNmY1MTE3NTFkMGFhZjgyMWNkN2MwYjNlZTZkMGQ3YzY5MGEyNzc3ZmUxNmJkYzdlNDliN2RhNGJiYjRjY2UzYjYxOGVlOWI2ZjJlM2ExOTI0MGNkYjcwNzMzYjk4NGIxYzk0MGVjNjY5NjBiNzI4Y2JiODc0YjgwNjQzMTIzNzIyZGI5ZGJiZTg4MzIyMDA4OTMxYjFjODk0ZWY1ZDIxMDk5ZTYzZTdjNjUwMDdhY2Q2MTc4NGRiNDk5NGEyZmI0MGMzZWZlOWM0N2ZhZDYzNzYzZGRlMDZmYTAxN2EyNmI4MmU3MWI5ZGFhYmM0ZmYwZjZjNzliOGNhN2NjYjRkYzIwMzFiZWYxMDg3MzY3YzcwODY5NzRhMDA1NjZkZTQxYTcxZTExZDk5M2FiZTQzMzU2OTg5MmI4Zjc1ZDc2Mzc5OTMyNDVjODg0NDc4YWJlM2Y5NWY0NGIwYTRiYmVkZWZlZjg5MDZiNzVlMGQzNDAyMGFlNTM2NDU1YjBlMDZmOWJmZWUxMWVjOWI4NjA0YmFjMmNjNmViZTA4YzhmZDVmNWNjY2NjYmMxNjE3YjdjZjY5YTNjNTEyZTFmMGJkYjU4NWRmNWUxMjc0MzA2MWY3YzIwNTNiYzM3MTQ0MzYxYzBiMzVmZDM5ZDU2YjFlZmFmOTJjNjEwMzYwMTkzZWMyMDU5OGI4Mjg1ODA1MGE2ZDk5ZTA4MmJjZWZkYmQ1MzE4ZWU1ZWZiM2IyNjBmMzI3NmYzYzczZjljMjRjZTBjZGEzM2M3YWNjNTBjYTVkZDYxYmRiODVkNzkzODI1ZjY3MzJhNmUzMzBjZTY3MmFjNDRmZTZiMmI5YWZlNmUyZTk2NWMwMmQyYTFmZTBiNTdjYjFiMzE3YzFkMzEzZWZkYzM1NjQ5MmZlODk2ZmQxNDlkYWU1MWM5NWNjZGJiN2QxMWY3ZDYxMGUwYzZlMmZkM2U1N2ZjZmVmMWM1N2M3MTE5YTBhZjZjNzgyMWZlY2RiODlkODAzMDJiNDlmYWQ0MTc0M2YzZDJkN2EwNzUxNTRiMzE0M2U1MWFlYjk0N2Q0YjVlOGI3ZTRjYTg2ZmVjM2U4MGJkOWE3ODZlNGU0NmVkMWU2ZTlmN2UwYjYzNTI2NmQ5ZmEwOTdhYTllMjBmMzJlM2QyNzcyZDdjMWYwMDhiY2RkM2Y5MmM3MjgzYzU3NzkwYzM2MjJjYmFkM2NhMzU4MDNjNDVjODY5ZGMzNzdmZjM2YmQ3YzBlNmYxYmI4OTJmNzMyOWE2ZTA4ZGYxZGJlYmM4MWRjN2IxMTVmODUyZTM2YWU1ZDkyODcyNWZhN2M2ZmI5ZjI4YjBmYjM5NGY5ZTM4ZmQ4NzYyNWM1ZmEyM2FhYmE0NzA1NGU4Y2ZlYQorU0lHOiA3NWE0NWM2Yjk1NjY4OTk4MjliNDFlZTUxN2I3MDQ1YTQ3M2E0ZjdhMjY0MTQzOWI1ZDdjNTY3M2UwMGQ4ZjVjMDY2ZjEyOTFmODVkZWFkYTA1MDJiZDE2ZTk3MDlmODI3ZDQ3NTFmMjg3Mzg2MmU4MjE5ZTU3NzQ2YTE5YTkwMAorCitUU1Q6IDU4MQorU0s6ICA5N2I2NzAyZTI0NjgwNWRiY2ZjN2ZhNDI0YThjYWFiY2YyNjJkNDY2YTA1ZTBkZDJkNGU3YzM3NGQ1N2Q1MjUxCitQSzogIGE3MTZjM2Q1Y2U3OGY0ZDljNWJlZTM0NDdkZGFmNDg4MWM5ODZlZmRmNjY3YWM4OTc3YjRmYjY5YjVhNzExMGEKK01TRzogZWFhODZjZjc2ZmNiNjVjNmY5ZmMyMDhhYzM2ZjI4YjIwMGQzYjQwM2FjYTczMjA3NDYxZDhkOTZhZmEyNDZkN2M2OWQxN2E3YTliZjc3ZjA1NTQzNTYzYTdkM2VjYTFkNDA3OWUyMjkzOGFiYTFmNmU5ZTA0YjQ5ZmJjOGVkNmY2M2I1OTk3MzBkZTk5Nzk4MzFjMDJmOGNiYTYxZTU1NTYwZDcxMTBkNGM2ZTYxNjc5NzA2YTcxNTVkNWE2NzNjNTRkMTZmZTRkMjI4YzJlY2E3NTQ2ZmFhMTMzOWYyNmQ3YTBiYjRlZTMzOTYxMWFmZGVjOWE2OGY1ZmY1YjVkMjAzYjYwMDUzM2FkNWEzYjM2OGM4NWRhMTE1NjNmMDk4Y2MyNjg3MWU3ZmE5OWFlZmQzOGNjMjYxNTFkYjNiMGJhZTM4ZGI2YTg3YjY3ODllNTg0MGIxMDg4NGFmNTExZjNlY2IzZWNiZjk0ZmY4NmZkYjkwNTUwNWE4YzM0YjJhYTYxZmYyZWM5ZWM4ZmViZDFkZmVkMDk2NWI2ZmM1YjlmODg2OWRjM2E0NzU1OTk3NGE4ODIyOTk2NzA2ZGFlZmJjNmM1YmY5ODRjZTA2YjBkMzJiMzFjZjlkOGFkMTM2YWVkNGIwNTI1ODZkY2U3MDczYjc2N2IyMzRlNGEzN2JlYmJjMzkzZGQyZTBmN2QxNTUxNzM1NDhjMzhhMTU4M2VmOTRlMGFhODRlN2ZjZTA0ZmNjOWI0ZTMwMGFkMDk5NDQ5YTQ5MjMyYWJkY2YzZDFhNmU2ZmNhYjY5NmY1OTk2ZjliZDFiOTQ4NWQwNzQ3NTVhYzViNDI5N2ZlZTMxMjRjN2MwMzk3NmE0MGQ1NzBiZWFlYzJmYWM5OTIzMzlmODg1Zjc0ZDQwZWQ0YWM4N2E0ZjQwY2VmYmM0ODY0ZjQ0YzM2ODNhYThmMTAyNmUyYzM3YWVmZmNlYmZkZmUyNGRkMGIwMTljMzZhNzk4ODgyMDMwMDRiMmFkODNlODkyMjFmM2Y2MzZmNDU1YmI2NGUxN2QxNzU0YzdjNmRkN2ZjMDlhMGQ2NWRkZGRlZDQ2MjJmYzRmOWZiYTA3MmI0NTEwMzQzNWUxMDIyMGE1ODZmMTUyMjZkMmViMzc3ZjQwNjRkM2ZmMzdjYmI0NzA1YTFmYWFmNWIzNDhmOGMwZWY3ZmQxNTY0ZDQyODY4OGY1OGYzMzkyOTY3Y2YzOTZhOGZmMmZkOWU3YjUxN2I3ZDZhNWVkZTc0NDAzNzNkOGNjMWE4Mzk5MDBlODRkNDIyNTQyODNkOTY5OWM3Y2EzN2U0Nzc2OTJhMzQ5NDAwOGI4MDQ0NGM1Y2Y2MTRjYmJjMTY5YmZiOTI5NjMwM2M2NDVlMmNlMjhkMTY4ZGM2Y2JhZWZhZTljNzMxOTFmNTcxNTFhYTQ3MzAwOWQyOWUxODAwYjEwZjRjNDk4NjA5YmExMTUyMDk4NWM3ODA5MjA1ODY5NmZkYmNhOWMwMjBlMmRmYjhhMDQzYTNkZThlNDUyZDU4Y2QxYWQKK1NJRzogOTAwMDU1NDFkY2MxZDdhYjgzN2Y0ZGU1MzkzZmFkZDZhOTJiMjZhN2Q5M2FmM2Y2NjllMGYxYmZkNjIxY2JkMDBjOGEyMzA1NmQyZGE2Nzg2NTU3YzgyOGE0OWJlMWU0MDIxZDk5MzExMjM1YWMwZDRkNTZlZWZjN2M5NTM2MDUKKworVFNUOiA1ODIKK1NLOiAgZDE1MjhjMTQwNmE2ZTQ5NGEwMmY2MzUzMDVmYTc0ZDc0NWM2OTMyN2ZkMzFiN2QyYzI2MjNkZTJjMDMwZWQ4NQorUEs6ICAwY2ZlMzY5Y2Y5M2RhZjZkNTNlZjAyOGRkYjlmMDAwNDQzYjA5NzJmZTI1MzJmODNhNDFjZTY1N2MxODM2Y2EzCitNU0c6IGFiYjM2NzNmM2ZhMTdhMzNhN2FmZjc2ZWFjNTRlNzY4N2MwNGJjODRmNzY2NjUxYThiMjRiYTIyOTQ3OTA4YjA0Y2E0NTlmZWI5OGFjZTdjYWIxZTc0MzNhNmE2YmVmZmQ4ZDk1MDRlMjk5MWRhYTA2NDRkNjFiOGIyZTQ1NDQ4ZjU0ZGY4ODEzZjUwYzQxOGI0OGY0OWUxMDM0ZTg1MWNiZWMzZWYwYTE4NTBlZjcyNjczM2FmYWY2OGUxYTQ2MTA0MTY1MWMxMzhkNTRlNGVmNzgxODdhZjlhNzM0MmY3MTI4NzI3ZjkwM2JmNGZjNWVmM2U0MGM2NGVjMjZmODkyZjU5YWRkOThmZTM5NDc2NWFhYTdkMDljYWU4MWI5ZjY5OWE5ZGQ4YmYyZTJmZThlMWVjNzhmYzg4NGVhYTBkMmRiZGJmYjhjMTY4ODMzZWUwZDIxODAzY2MzNWRjNjI4ZDdjMDdlMDQ0MDRmYjYwZThjNDkwYThkZDM0ZWRiY2JhYWY4MGNjZGFlM2Y3ZDM3MzllMGU4OTcwMjNlZWI1YjFhOGMwMGE5NjczYzU5MjU4MjQwZGRkNDQyMDY1MGZlNTc3MWY3ZTI4Y2IyMzk5ZjVlMWUwMmFkMGI2NDMyZDliNDk2MDhmY2YwYjFjMGQ3YzQxMmE0NDUyNTViOGJhZGM1MzIxYzI0YzFhYzkyYzc5YTBiYWNjYjlkZWZmZWQwMmQxMmY1NTM2Y2Q1OTVkYzY2MDgzYjMzYTM2MDNhOWQxNmVjZWEyYmYzOGM0ZjJhYWY1NzBmMzBkMjExNjJiMmVmZDdlNGQ1ZWJmMWVjYWU5NTg4ZWVlMzZkZDlkM2Q4ZTNiZTdiYzZkNGJjMjE4NTYyMmYxMWQxZGE3YzQ5YzkzZTYyM2FjNTZmZWU3ZTM3MDZkYjgzMTNjZjkyNmJlOTJlNWM4YTUzOWZkMTZiMGY0MzhkYThlNTFhNTFmMmQyNzY0MDM1NjEyNGVmN2JlMmY5MWZmYTE3OTZhOTFiMTIzMDE5MzRkZGVmMGM3OTM4YTdhNDVmMzZmNTNiNjMyMmQ5YzhmOWQyNzVlMWNkMmMwZjEyOWY4YWI4ZDc0MTU1YjVkOWU1YzE1YzAxNWIwYjAwMDAzYjJiZGRmYTBiY2ZjYzY5M2ExZGZjYjRmNTNkYWVjMTI2ZDE2NjlmMzNmMzlhZDA1NTE5ZWY3YzVjZTQwZTZmNDU3M2MyNDdhMzJjNGEwMTYyODMxMzUyZjZkNTU4ZmY1ODM2YTUzMTdkYmM0NTE1YjNkZjI2OWE4YWM3NmQ2NDM2ZjI2NGI2NDU2MWU3OTY4YjU4MjIxMDg0ODdiMDQ1YzkyZDZjNjE0MmExYzI4NTViMzhiZWViZDY0MjU2NTEyM2NjODI3Y2IxODMxMTk5ZTZmMTJhN2U0MjM2ODU2Yjk0ZGFkNzM4ZjY5ZDExMDZlNzczNWQ3MTFmN2M2YTNhMzM3ODA0MWZjN2EyMTEwM2JiZjg2NjkwN2Q0ZWRkZGFmYTBlN2YxYmI1ZmZkNDFhNjBkNjQKK1NJRzogYjgzOTliYzMzMjZjYmEwYTkzYTQyNDk3MTY4YmY1N2Y5MTA2ZWU0M2QzOWJmMGZjODY2ODUxOTlkYzZlMGExM2I5YzcyNGVmMTdlNzg4MmFmOGMyZWI3MGY2YzllNDJkZmEyZmJmMGMxY2I1MDAyYjU4ZjEwODY2MTk3MzNlMDIKKworVFNUOiA1ODMKK1NLOiAgNTEyMzQwZjk2MWYxNDJkMTkxNWU4NWZlNGZhMGY1NTFmODA4OTJlNzVhY2NjZTdjZDE4NjllNmUyYzllODAxNQorUEs6ICAwY2EwMjYwNGZhODdlMmMyMDUwNjI1MWYwNzkyY2QyMTI1ODU2ZjBhYjE2ZDY2M2YyODExOTYzYjFmMmQ4MTcyCitNU0c6IGFmMzdiMmM3NTg3YThkNWJjODk1Y2QzNTc3NDZhYjAzNTUyYTBhNTYxYTI5M2RjNzE2NGUzOWI2YTEzMzNhOTIwYmI2ZGFjYTYwMDY2NzZlOTliYjdlOTI4ZjllYTM5MWU1NDgwMmE4ZDMxNTk2Mjg5ZmI5YmZlMzAwMDBjZjUyZWJmMGMxMjRhNTg5NWJjZTMzOThjMWJmNTM1NmJlODI2MTliOGRkYzE1YTc3Y2E5MjI0OTRiZGIwNGY1YzJlMWI2ZThmZjc3YWU3NDlmYWYyYjhhNDFkODIyYzE3YzA2ZGZiN2E1Zjk0MzRkOGJkNzE1ZWM4Nzc4ZTgwYjgxZDJlOGQwNjI5ODc0ODY5MGM2NTU1MjgzYzk4YmI5YjE5YjkyNDY2NjdiYzQxMDQ2ZmY5OGMyYzM1ZDE2MWUxZjRkNjlkMjU0ZWM1YTA3NmYyNWJkNWM3ZTJjOThjYTNjMDlkODA4MzM5NjJjZjk2NjAyODc4ODQwOTZlYjMwYzQ2YzU0MTc0MTA2YWY0ZTI5NzlhMTEyZjNlODk0NGVhYWY3NjY5YzQwZDVhZmI5MWEwMjRhYmJlYjE0NjY0ZTMwODkwM2U0ZDI2ZDcwMDk0NDZlZTJlODMwYWI1ZWNhMGRiYmM1MTNmYjRlMDQzNTFkZjJmNjc0MTg2NGZiMjM3MWIyNTAyYmU0M2RjMTVmYzA0NDMxZmZmNWViOGQ0YjY4ZDcyNDYyYWUzMjJlNTdiYTJkNGFkZGRmMTVhMTkwMmMyMTEzYWViZDNiNWQ2MTI5MTdjMWJiNzNlNzA4YWQ1NDE4ZTdkNDVlNGI3MjgwZmM4ODk2YWI4MDg1M2ZmNWY4ZTk4ZjI2NTUzZmM3OGUzMGIzYjBkNzI3YmY2ZDA2NGE4ZjMyODg4NzY4YzUxZWJiNjFiMmM2MDBiNDAyOGE3NzA2MGZlYmJiMDJlYjNkMjAxNzgwZTc0NTY2Yzg2YTM0MDMxODM2YmNlOWVhZGE4MWU1ZDBmMzM5NjBjYjJkZjA4YWZmM2M5NzQ5MjFmYzliN2QzYWE3YzgxZTljNjcxZWQ2ZDMzZTdhZTVlZDAzYTU0MTdkN2U1Y2Q2ZmFhYzkxYjU0YjhmNzkyZjQ4MjgzYzYwNjQ3ZGUzZGE4MTZjYTk3NTZjNWJmZTFiYjhiNTk3OWU1NzU0MDFiZGEzNGU5Y2JjNGQ3N2U3MTFkNmI3M2I4MmRhMTlkYTQ3M2I1NWU4ZTcyZDM0MWIyZDg1MDNlNDg2MDliZTBmZTI5MTQ0NGMyODM2NjllNWRlYWRlYWY1MmFhOGVjNDhkYTgzZjUzMjhjYzA5OWZiNDFmODJiZWNkZDU4ZDA0YjFkNjYyMDNkNzM3YmVkMDZjZjIxYzk3ODE5YWMxM2VkNzExY2EyMTdhNTdjZjdkODBmZjA4MmFhMWExY2Y4ZmVhNTU1Y2QyZTQ3ZTRkZGFiNWUzZjk5NDFhZDRmNzc1ZjQ5NDE5ZGNhZGI1YjAwNGI2OGNhZjQ1YjI3ZWY0OWJhMTRmYjUyYjA5ZjFiMTg1YmU5ZjljNworU0lHOiA2YmI0ZDk3NWFmYWVmNDFlYTllZjA4NWE2OGM1NjhhMDVkYTM3ZWYyMWRhZDQ2NGVkODZhYzBkNDA4MGU3ZDAxMjlmYjAyMzEzMWVjYTVmN2FkYjI1ODZhMThiZTQwNTYyZmEyNzY0Y2E4MDdlNjcwYTA1OTZhNWM1NDdiYzAwMQorCitUU1Q6IDU4NAorU0s6ICBiMWI2MzZlOTU3NTc0YzIxYTk1N2E0NWJkMTk1YzZmOWZlNGNjMWM1N2U4NDEzNGQzOWI0MmUxYTg0MzI5ZWRiCitQSzogIDk1ZTc3YjE1ZGRhNDdjYWY2OWI3Mjg4OGRkNjk5NjFiYWNiZWMzYmM3NTM1MzAwM2U4YmZmMGE0M2RkZjRiN2EKK01TRzogZTI1ZDMyOWNhZDgzNjRkMmRlYzI0MzczZTkyZDlkNTBmYzdhYmU4ZmRjM2QwYjRlZTU3ZTFjZmE1YjdjZDU4YzIzYmU5MThmMDUxNzliYTg0MWI2MWUxODAwMzRjYTdlNzRkNDliMGExYTJjZWJiNGJlNjUzNDRjOTEzYzQ2ZDMyNjUyMzM2ZTZiZGE0ZWZhM2Y1ODczMGQzOWE2MzNhMTRjYTNkOWE2MmFiYjBhNzM5OGNjMjlhZmY5MTZlZWVhMmU3Y2FhYzgwODQ1NTYyZjczZDQwMzBmOWNhYjBiZjFjNjQwN2Y1NDAxNTEzZWY4N2ZlNmRjMDk5ZGJjNWRmYzMzNTI5MTFjMDdhZjZjNTIzYmVmNGNjYTc4Mzc5NjU5ZTg4MDNmNTg1OTA0ZWU2ZWY2ZmRlNzczNjZkOTZkMmNjZjI0OGE1MzIwZDliODI5OGIyYTczMzYzODc5MTA3YTAyYjQ3ZjU3MjEzYTg1MjAzYWJiY2E1YTQxOTVmOGFmM2UzNTkzZWQyZmEzNTA0YmI3NmEzZTFiZTI0YjY2ZDM1NTY2MjkzMmNiNjdkYzg4NTAzYWZhZjc2MmJmZjc0MWJhMWNhY2U5N2FjNThiYWZhZDVkMzZjM2FhMDJlMGNiZTIwZTVmM2RjODA5MmM1MTJlYWE5YzQ5NDM0NzRhYWQ0MTk5MDA3NjcyMWFkM2Y1M2ZiMDhhYzIyOTgyZWQ5YjE1Yzc1MWE5ZTIzMzgyZjZhNjljNzJlNmUyNDRlMGViNjgxZTZkZDIyOGQzNzc0ZmNjYjM3ZWI2MjMyZjgyNWQxNjlhMmFjOGI3ZTE4YTQyY2RhYTRmMmNmMDU4OTBiYjBjNTk4Y2Y4YzMxZjgyOWVmOGNhMjQzNWJkY2NlYjBlNjE5M2FkYTc4NDFlZTY5MmYzMGFlZGY4OGI2MjczMTFiMTM4YWM3OGIzOTEzZTA2ZjdjMzIxY2FmYjM5ZDkwMWRmZTE3NDMwYjFhMjBiYzQzN2E1NTVhNTc4ZmEzMWU0YjY4MDc5NTQ0NTZiZDRiMDRkNWQ4ODc5ODdiZGYwNGUwZjE0YWYzMTQxYjI0YzNhN2I5YWM3NWFhMzJlMmZjZDIxNzFhMTI2MDllMTVlNzMwOTRmZDA5MjIxYjRkMjcwOTBlNzMyMTliNjQ4YmNhYWJmMzgwN2M5MjgwYjZjNGFkNzUwYTQ2OGJlMGUxYWQzZTZlNjMwMTZjYjVjZWMzYWFkZGM1Njg5YzI5NTVhMmE4ZDViODk4NGQ3YzQ0Mzc2ZmRkOTRkM2Y1ZmYxMjk4Zjc4MTcyYjU2NTkxMzcwNGU5MGU1YWMwMzhjYjE3MjBlMTliMDgwZjgxYjUzZDZhNDVkNDUyODUzMDcxMWI2M2RmZTFlNDc4MWMyNGQ3NGFlYjJiZDhhNzNmZDJhOTkzYzViMDg5MTM5MjE5NmFjMzJjNTIzNjk5OTYwZDhiMjNlMDE2NjRjZjkwMjFkOTM5MjgwNTBjYWY5N2ZiOTg1NTU0NTgwZTMzMzM2YTQ1NjMyNDdkZjU5ZWY2Y2FlNTMKK1NJRzogNzYzYzdkMGQ0Njg3OGU1YzdlY2Y3MTA0ZmMxZjIyMzBlNDYxNzhhMjdjNzVmMTk2MTY5YzAyNzllZGIwMWMyOGZjZGUzYjBkNWI4NjM1Y2ZlMzM5ZmIyMzI3NzRiMjIwNmRhYjhhNDYwY2U0MTdhYmY0OTBiYmZhNzg1YzAyMDUKKworVFNUOiA1ODUKK1NLOiAgMTBjYTQxM2Q3MGViM2RiNmUzMzdmMGYxMWFiYzA3NWM5NTg1OWU4MjVmODc2MTc2MDc2OTUyZDJmMTg4ODAzMAorUEs6ICA1MDI4YmEzOGFmZWNjMjQyNjM1ZjZlMzUzZDVmNGFmZDEyM2Y4NjBhMDQyNTIyMGU5NjY1NTJhMDU3ODgwODIzCitNU0c6IGVhN2ZhZjc5ZjZmZjVkNzhhODIzYTc1NDM0NzEzNGYxYjNjM2U5MWNlNTE4ZmRkNjMzZmViNGYwNWQxMjVmMDVjYjU0MzM2ZWY1NjBlOTJkZWI2ODUxMTJhNWZmY2QzZGZkMzk2NGIyNzU4Y2U0Nzg1ZjZhMzRiZmViMzk3ODRmMGFlZTU1OTU1YWViZDEyZGRkYTY0MWQwNTc2OWY3NDQwMmY3MDZkYWQyMDFjNDRjOTEwODFjN2Q3ZjY1ZTdhYTQyNDZkZTZkYzNlZDY0OTZkMTBmNGE0MTIwNjBkNDkzYmFjOWFlZDViZTRmNmQ3NDIyOWUzYzU1ZWI2ODc2ZTNiYjJlZDQxZmE0NTA0YjY2NzBkZGE4Yzc5OGY2ZGFhMjgwZDFhYTcyMDIxMTc0ZjZjMDFhZWM0OWIzMjFkODdmNTNhY2JjYWRjYzQ2MDdkNWIxZTQ1ZDYzZmM0ODFhNmQ5MDU3NmM4N2MxODgwYjJlOGZmM2U1OTBhOTZiZWVlMTgwNDc2OGM3NTZiZWI4NmJmMWRlOGFkYzQwOGIxYjhkNjY2Zjc0YmEyODYzMDgyMmY5MmQxOGIwNTZhZTM3Y2UwMjkzZWU2MWI5ZTgwZjMzYWMyNjk2NzFiZDYyYTQwNTliMjRmN2MxYTQ0MDgwNzQ0MGQ1ZDUzOGE2NTQ1OGFkYzgxNTg3MjRiMjVjMTIxMjdhYTAzNDllNTVmNmU1NWJjOTIwNzhmZDFlZjI3NGMyYWE3OTE5MDU3NjZiZTM5NGEyNjI4ZjdiYmQxYTMyZGE1ZTQ4NzQ0NmJiZWZhZTg4ZmE2Y2YzZjdiNDk5ZjEzMWZhMTkzMTNkMTNiMjgwYWRjYTUwZjc3ODAyZDE3MzMxYjM4MTY4M2I1ZTdlZGFiOTk0NzNlZGQzMWQ3NzQ0MzQ4ODIxNDEzNWZkNmYyNjQ0NTA5M2U5ZTJhZmY3ZDdlODkyMzM3ZmRjODc3OTA2NWQ0ZDk3ZDZkNjczNTc2Nzk0OTU4ZGJmYTZjNTBiMWIxM2FjMzk2MDdjMWU2NmVmOTYyOTc2MTA3MTE1NWZiY2E2ZjM2ZWIwMmNlZWFlMTYzNjdmZWFjMDc0NzY5MDhjODQ3YzlhNTMzZWY2OGM5NDMxMWZhMDg5ZmYyOGZiZDg3ODA5YjBkMzg3NmI0MzFkOWExOGIyMDJmOWE0MDQ5YTA1NzdiODE3NzYxMGRkMDJlNWM1MjBlY2E5NTVlODAzYzNhZDRmNTA5NzZmN2MyZWE4YWEzZWU0ODM2YTE5ODVkZjBhNGYxNmVmNDY5ODE1OTU0MTk4OTc5OTM1NjBhZjgyNjUxYzJiNDk0ZTY4MGIzNzgwMmU3NTM3ZWY2OGE1NzVjMzRmODU4ODA2M2VlMDE5NzIwNmQ5YTMyYmI0ODkwZTdjMjE2YTRkMzNmZWNhMzZiNTQ5ZTUzMmZlYTY4NTU2ZTc1NDBhNGZiMTY5ZDQ5ZmM1NTNiMmU2NzAwYWU0MmQ5YTUxNmU2ODE2MGFjZjZiMjcwYzc3Y2E1ZWMyNmU1YWQ1ZGM3NWMyYzM5M2UyOTkKK1NJRzogNmFlYzAyZGM2YmRmY2I2N2YwZWZjMWZkMzFlMjNlNjllMzcxYWIzODAyNTA1YjMyMDFhOTVkZDUyNTQxN2VkMWExMjhkYjRlMTgyY2IzN2MyOGY2MjgwNjY2NzA5OWE4YWQ0ODBiMGFjOWU5NGMyYTdkNWEwZTk2ZTJhNzM2MGQKKworVFNUOiA1ODYKK1NLOiAgMWYwYTEwYTJjYjExMTkxN2I5YTY3YTJhMWYzOGZiODZmOGVkNTI2MDdkMWQ2NTNhNDU3ZDdmNDcxOGQ5YTdkZQorUEs6ICA3MGMwNzViMmU5NGM0YzAyZjQ1ZTczMDQ0ZjI0Mzk5NzQxYjE2MWZlYjZmNjllYWI2MzU0MTcyODJhNGE5MzY4CitNU0c6IDRmNmE0MzRiZDVmYzc3ZjBmMWI3MDQ5YzkxODUzY2NiZDg5NDM5OTYyYTYwNzhhNjc0Yjg2NzU0M2I2YjdkMTA1NTJlYzE3NThjNTI4MzA0MmJkNmI0Y2VhODhjOTUyMGRiMDQ3NDZmMDg5Y2YzYTI2MGZiMGYzMzg1OGVmZDZmNjgwZGU1YjcyZDk4NzYzMjRiYTU5MDI5OTEzOGY4NWE3NmY1YmUwZTA1ZTg4NTljMDJiMjM1MTI1NTljOGJlYWZjOWNmZTkwMWIyODNlMTVkMTZjNzkyZWIwM2I5Mjg4MGY2ZmY5N2FhMzhlZWVhZDNmNGZkNmMwYTkyMTQzMjNhYTM5YTFjMTY1MTVlMzBkYmQwOGI4MzNlZTQwYTgxNGEyODgwOWM4NzBlMWQwYTYyYzM3OTMyZDU0MDhmYzZhZmM2M2U3OWE2NTVjNWZlM2Q0MDI2ZWYwOWUwMjk5ZmJkZTVhYjM0ZmNlYWIxNDEzMGRjNGJlMDA3ZThlNjQ0NGQ3YWFhZWM2MmM4NzNkZjc3ZTgwMTA3NDNjMzFlODc1N2YxZWFlOWVkYjU1OTdhMWI1ZDg0YmQ3N2FlNzY0MmUxYWNhOTk4NzNhMTUyZmZkZTA2OGE4ZTRhZDkyNDBiOTAzMzMyNzk1ZTQwYmIzMjg2NWU1Y2UwMzQzMDdhNmM5ZmUzMzlhMWM5Mzc3MGRmNWNhNDYzMjlmNmIwOTQxOTc4NWNiZjI4NDdiMGM2ODMyODM3MTIzODUzYWQ5NTI2NTMyNjVjNWI1NzQwZDE5NGUwMGYyM2Y5ZTk2Njc5MWYwMDVmOGJmNTVjMzg4YzJiZTllMjE1Mzg5MjVmODU1NWUwZGJkODNiZTA3M2RmNzY1YWY0OTQwZTU5YTM3OTBiOTgzNmJhYjc5MDllNTY3NmZiZjFjMjEyNmZlMjI2ZDc4MWE0NDMzMGNjMDFkMzI4MzBmZjhhZTAwYjk3OTJlMzk4YzJjYmI0ZmI4M2ExMDA1YzI0NTU0OWE4OTA2M2ZiZTA2YzYyYTQ4ZGFjNDNjNTEwMTI0OTk5NGU5NWUzN2YyNGMxZDhiM2JjNjczNTM4YzQ2MDU1ZjgwMGRiMWMwZjk1Njg2OWI2YjI5N2Q5OTBmNDRmMDViNTBjN2FkNmI4NTZmNDYyMTI4NTg0NzFkZDBkMzkzNzJiMGRiNzUxNTczZGRiNmI1YjU2YmEwMWUzNzFjNzhmZTU4ZGNkMWJlNTMxMTJhNmE3M2RhOWE2YmFjNzVkM2MzOWExYTcwNWEzNmY2NDBmY2ZhZDhjZDA0MDc3NTk0ZDU5Njg1ZjZlMzBkZTcxZGZkNGE0NGM0ZTdjMDRkNmVjN2MyZThiZTEyNzg1YmIwNWIyOWIzOTE1MWQzMjlmNTg3ZmRjMzgxYzJkZjBjZWY3M2ZlMGUzZmQ5MjA4ZDdjY2I2ZTA4ZDAyZjQyZDFmZWVkMjc1NjFkNWUzMjNhYTE0ODYyNGU1NTJhYmU4NzUzMmRlMTViN2Y0MmMyMmM5OGU0MDUyNWIxNzQ3Y2JkNzU4YmZiMjZmZDNlZWQzYgorU0lHOiBhNDI0NWFhMzM5NWU3YmFkYTJiY2RmMTYwMzE0N2NjNWYzZjBiYTkxZjQwZmRhZDhmNmQzNzFjM2ViZWZiNGMxNTAxZDA3ODc1YjU3NmY0MDc5NzgwNmE0ODRjN2EzZjcwNTY5ZTIzMmIwYzk5ZDI5Y2EyM2EyMzNiNjhlZGIwYworCitUU1Q6IDU4NworU0s6ICA3ZjA1YmFhY2YxNjc1ODNjZjJmZTk1NjJhNTA2OTkxZWQ5ODdmNjhmZmI3MTU2N2M3Y2NjZTNmY2M1OWI3OGIwCitQSzogIDBkZWMzOTUyODUyYjk2ZmQ3NTU4N2U5Nzc0M2Y5ZTQxYzA5ZmJlNmJhOTgxYmZjZWI0ZWJiODg5MmQ5ODZhMTYKK01TRzogYTI3ZDFlYWIwNTE1MDkyMGRlZDFiMWMyNTc4YWY1ODJiMjk0Zjc4MzdmZTRmYjFhMzE2OWMyNWVmYjcwNjM0YmE2NmM3ZTI5OTFiM2U3NWNjNTEyNDgyNmEwM2UwNTcyNTliNWNiNzA2MjI4NzgwY2JjODI3NWMzMzlmODM0MGU0MDJhNjY1MDMyYTRhYjY1NzgyN2IxYzM0ODFmNzU2NmQzNjk3MzViODJkYjc2MjhjMDIyYjIxMjczMGRiMWU0N2M5YjJkOWJjNGQ4MWIyMzQyZDg5YzZlYWZjM2UwYjZkZTUwZDQ4NGNjZWYxMTIzOGM4ZTJkMjQwZGQ1OTVkY2VmOGIyZmM1N2I1NGZmOWE4YTc0MTExZjYxZjhhNjUyZjIwZWEwMTJjMWFkZTNlMjgwZWNkZTI5NGMwZTM1NzE3MTkwMTYyZWM2YTIyNjVlN2U2ZjNmMDcwNGNmOGFiMWEwM2U1Y2M5NTNlMjkyNjI5MWNjZDRiMDU5MGQ1YzIwNTY4Zjk0ZjlmZjBmZTJhYjc4Y2Y5YWUyYzM4YmNkNDkxZTUxOGYyM2U5YjYzNmY4ODA2MTVmYzU2MDc4ZTUxMmQ3NTc3ZTA5NDk3YzExODM0NTNkNTA4MWZkNDczN2YyODBlYzVlMjY3YzQ1ODZiNzhiNzBmZmZkZmQ3MzBkODA5ZGY1NjBmMmUzNzcyMTkxODQ3YmJjM2Y2MDRmYjdmOGNhNDllZWQzMThiNWU3ZDFmMmI4M2ExMGRhMGM4NTk0YjMzOWI2ODcxYTU3NzJkZDY0MTY4ZWNjMjdlMjQwYTQ1Yzc2NzI1ZTdkNTViZWYzN2UxMzVlM2Q5ZTBlMzRlMzZjMTZlMzRkNzc0NTlhNTUyZjQwNzRkMDY3YTMxYTNlZDJhNDhjZGVhNDg5NWIxMGJkZjE2NTZmNGI3YTQxM2M2YTA4OGM2NDlmYzlkN2JjNTZhYmY2NDQzNTQ5MTIxNDE5MmE2NjcwY2I4YjljOTE3ZjhlMWJjN2IyY2ZjZTc4ZDI4ZmJjM2FmYzJhNTBlOTgyMTNlN2UwMjYzNzhlNGVhNzExZDE1MWFkYWFhNzE5YmViODk3NDY1NmMxMGViYzdkZTQ2YjE5ZWM4Mjk1MWVmNDZhOGM2OGU3ZjQzNmUxYjNlYmVkYjJkMDliMDU3NWM5OTE0ZWFkMjc5NmI1M2UwMDYxZTIxMjk5NGFjNTAyNmFlYTgxZWMzN2M4MTM3OGY0Y2NmYzQ2NzcwMDA4Nzk2ODU5N2RhMzhmZWQ1MmZhNDgwOTNhZTRiYTEwNjZjMzFlM2M3ZDg1MDgwOTViYjQ1YzI4MDEyMGY0YWE2OWEyNGYzZWZlZjFmNzY3OTg1YWExYTMwZTE0MDg1NmY3NmQxNTIwNzMyODc4NDg3YmU1M2Y3MTJkYmQ3ZDc3OWUzMTUxMDE1ODhmZDdkYmRiMTMyZjkyYzI3NTc1YWMxNDg2ZjE3NmM3OTA2NjFiMDE0ODM5NGU5MmZmYTNhZTZmOGFmYjJmYWEyYjdmNGZiZDBhZDkxZTc1OWE3MDJiM2M3MDJiNGQKK1NJRzogMGRlZWQyZGY4MmFjZjQ1MjljNDA4YTAyOTMxZjY3NmJlYzVjYjdhZGU4NGViZGNkNTc4ZjcwZjk3MTM4MmNmMzExYmI4MzA5NzMwMDQ1NmE1NThiYzRjMDlkODk4M2ZmMTM0OTNmZDYxMWViNjZjMDQzYmYwMTliYWQ2ZjMzMDIKKworVFNUOiA1ODgKK1NLOiAgZDAwYzIxNjQyNjcxMGQxOTRhM2QxMWNmYzkwYTE3YTg2MjEyZTdhMGU1NGJhYTQ5YjAxNjllNTdmZmY4M2Q2MQorUEs6ICBjZmU2YWU4OTAzYzZjNzAxYWEzMDQ2OTVjNjUxYmZkODUwMzMxZjlhZDQ4MTYzM2FlMzcwYzg2ZDdiZDEzZmI5CitNU0c6IDgyZjk3ODQxYjNiYTIyZGQ5YTQ0NTA4MzdlYTdiZjhkMjdhOTczMTQ3MGNhYmIwYzIwNzgwMzRiZjI0ZTRjMWE2MjkwYzAzZjQwMDJiODZmYTA5ZjA3YjUyMDlmMWY1M2QwZWNmNGQ5ZTkyMjNiZWMxMjVhOTU0NTUxZmU4YmZmNzE4ZjVlMjY0ODY4ZTIwN2Y3MDExOTRlNDFkZTM5OTcxZmQzODVmNDlhNGI0YWRkYTkxMWViYTU1MjU5ZmM2ODM2NjUzMjczZjY1NmY0YWY2MGIyMDY2NDk1NmQ0ZjIxMzVkOTBkMDllOTAzN2Q1MzY2YTAyNTM0NDRlMDIyYzcyMTJhZjVmZDRmY2NkNzQyMzdkMjg4NTMzOGUyZmQ3MjE1MjJkZTY3NjNjMjU0OTAyOGM2MjNiOWNmMzg3ZDIzNGFiNWU3ZmNiZTVhNDdjNjg1Yjc5ZTc1YTU3YjA5NTc0MDgyYTAyMjIxZGY2NGEyZTg0MTYxODA4N2U3MjJhMjFiYWMxYmE0ZjBkN2Q4N2JkYzUxMGFhYThmYmQxMDc1N2Y2YzAyOWNhODIwMzcxZmM3NGMzYmM1MGJkODk4YzU1ZDgxNjdmNzNhZGEzNzdhZWNjOTE2MjlkNjRjMzYwYzJjMjQxYzVjYjQyZTNhNTE4YzVkYWJmMGY0MThiMmE3ZjNkODJlZWZkOTIwMjZkMzFlOGI4MTYwMzU4ZWFlODIxZjczMGVjYWZlN2FjZTY0N2JmZjg3NDFkZTJmNmExMzFkMTFjOTY5ZTk3ODdjZmU2YTJmYWIzN2JmOGQxYzdmNGEyZjM2NGQyZjFhNzZlZjA0NmMxODQzZTYzZWMwMGNmNzkyMGZmYWFlNTYxZTczNzBiNzE5ZmMxNmZjZWJjYTNjZmRmYWJhNDNmNGYwOTBjNDZmNDc3MzAzYTY2MGVlODhkZDRlODliZjE0YjlmODA0YjZmZDQ5NWNiMTQxMjc1MzQ3NGEwNTZhMGQ4OTMxY2Q5Y2NiZDY0ZjhmY2M3YTMxMjM0NjdjNWQ0N2Y2OTA2NzllODg3MTI4ODA5MzczNGZkNmExMzI2MDM4NjU4MTU2NDEzNjk2NTk0YzEzNGQ3Mzg4N2YzNGVlNjc2MDlhZThmZmIzMjY2YzE2ZDg3ZjE1MzQ1YTQ3NmY3Mjk1MGMxNTg3OTZhODhiYmI0NDRmMWFhODA5Y2FkODc1Yjg1ZmI5MTUxYTBlMmVlZjJlMDBlODBkNmI3YTliYTQwNmMwNTE5ZWZmZGQ5NDEyNjIzMmZkZjZmMWU3YjliYmMwMzYyYWE3NzUxNmZkZjkzOWU3OTA2YWFiMDEzMDcxMjhjZjgyNGMxMDJjMDliOTI5YzliMmQ3YWY4Zjg1YjdkN2Y5YTgzOGIyYWVkMGM2OTdlOGJkZmVlNjZlZTAxNmJiMWJmMzVlZmY2YjJmN2VmNGI5MWIxZmMwNGZhYzlmMTE2ZTJlZGZmNDBmOTVjMTViNzdjMzFlZTUyMmYzOTM3YzdmYTAwNDdkNjIyNWUwYzhlNTVlMjc4YzgxMDM5MTFmZWFiMmI3ZjQKK1NJRzogMTVjNDVjMTk0Mjk3ZTg4NzAyOWY0OWQ4YmRmOWQ2MTBkZDhjMzQ3OTllMWU5MjMwMjY5ZTdhNTg5Mjg5MzhjZjM5NmEwMmNkNDIyMDU0OTAzOTFlMWM2NDM1M2ZiMDZiOWY4ZTliODE4YTlhMzYxYzIwNGEzODY5OTViZjNiMDMKKworVFNUOiA1ODkKK1NLOiAgZGQxMjM5NzJlNjI4NTg0YWNjNDYyOTNiOGU0Y2UyYjJkZDQ2OWNjNGVkZTE0ZWYzOTUyMWNmMDgzNzM1ODViMworUEs6ICAzNTIyZjdhZTU5NmVlZGIyMTcwMzVkOTUzOTVlNDQ4ZGJkNmZmYmY0MjU4NWVhZWIzMDcwMjY1NDFjNzhhNjUxCitNU0c6IDJiMjg1N2Y0NTI4MDE3M2UyZTBlZjlkNTk0ZTYwODNmMWRjN2E2NTQ5Mjk3NWI4MzdkZWY2Y2FkZDhjODU0NTAzMWVlOWQ2ODM2OWE5MzkzY2M3Yjc5MmZlYjk4MDQwYjIxZjFlYjg0NjY1Zjg3ODUzN2NlNDEyZTlkYjY4MGQyOWZiZDhmZmM3NzMxZWFlOTFhMjBiNDc1NDg5OTYyMDRmYjA2YWQ3NDBlNzhmMGZjNTkwYjY3OTFkYzdhMGYyNjU5Mjg2Y2MxNmQwMmM1MTE3YjU2NTgzNmI0Yjg3MzhjZjQwZTI4NWM2OWM1MGU0MTI5MTEyOTIzNjczNTJkZmRhZWQ5OTgyZDBmODk5YTIzYzBhYjUxODEyYjNlYzY3OGY2ODgyZWE0MjdjZGM5M2FiNGIyNDgyNDM3NzA1NGFhMjVkODIyNDY2NTMzNDAwNzhjZjExZDE0YTUxZjBlNjg2ZDdlMDE4YjM2NzQxNjY4ZmNlNzQ1OGQxNjkyOTMzNjFkZDE2YjNkZWJiZWQxOWUxYmVmN2MzNjkzNGUyMGYzM2EwOWFkM2U4MmI1M2FiNGU5NGMyNTVkMDQxODk4Yjk3NzM3ZGY5OTU4NGFmMTRlNDA0MDU4ZDBjOTNiY2FlN2JiYmMwNjM5NWEyYWVmYmRlZmE3YjJlZDE3Y2ViZDE1MTNmYTM5MGZlOWE5YjBjZTY4Y2VjYzJiOWUxMjliN2EyOWY0OWI2ZDE4YzI4YmFjZDNhZjM5ZGMzOWNhOTcyZjBlMGQwNjg1NWQ1N2MyYjVmY2FjMmY3OWNiOGMwNTc5OWU0ZjY1NzM0NjY4ZGFkNmFhN2E0M2ExMTg1NmUyM2IxZTczMmQwMGU1ZmUzODg1YjdkYWQ0MmVjMThhYzhlMDk2YTA4MGY3ZDU1MDcwZmRjZmY2MDdiYzBiODUyZDhhMDgwZDJhNzQwNWQ1OTQxNDY5NWYyZWI3ZmIwYWNhMjNjODYzNTc0MmY4YWU1N2YxMzc4MDMxNmUyODA4NzIzNzRlNjkyOTU5OGQwMjhhMzNjMDVkODMxY2RhYmQwMjk0OTNjM2NjODU5ZmZmMWE2N2Q1NjIxNmYwMmEyMjk1NjY1MzY1ODg3YTM1MGE4MGFmYWEwYzM2N2E3NGQzNzAxYWU4OGY1OWQ4YTlkM2ExZGNlMGNmZDJlYWJlMmFmNTA2NWExYzdmY2E0YWFkY2Y4ZTUxZTc1NjEyYTEzNzFiNGRjOGZmYzBjMGI5YzRmYWRiMmYwODFlMmUwMzJkOTY4MThlNTU3MzdhZGRlM2UxYWMxMjFmNTZjYzg2ZmI1OGEwYTU4MjY5MmY2MmNlNThhY2NlMTdhYWZlYzdiY2I3ZTQ0ZjgzOTI1OGNkNGE4NTFmYzAxMzQ0ZWU5ZjFiZDAzZWI5NDM0NGY0Nzc4NjkzYzE3MWRkMjg5MmIyNDI2YTg4MjlhYjBjZmUzM2E3ZDRhMzZlYjQwMTdmN2ZjZmQyNDEzNGFiOGE0NWYyMzcxN2NkMTM4YWE2MDAwMTcyZTM3YjQwNjRkYzliNmQxZTFlZjNhZjg0OTcxZAorU0lHOiA4OTY1YTg4OWQ1NGNkODA3NmQzNWJjMmUxMmIwMDlkNTZiMDcwNGM4OTRmOTEyYTBkMWQzMDcyMGMyMzJmZTQ0MDRiZjMwMDk1NDFlOGYzMjgzZTg5ZWE4NmY2NzhhZmJkZjFjMjFjOTI0YjIzYTUyYjRjYTZkNjNmNDhmYzIwMworCitUU1Q6IDU5MAorU0s6ICAzMzM1ZWE5MjgxMTdjZmVlZmJlZWFlMTQ2MDAzODgxYmRjODg4OWQ2NTgwZWVkMTM1MjM3MDgyMGFkMWY1ODRmCitQSzogIGNiMjBkNGZkNzU2MTg0ODAxMzExMWMzZTk3NjE3ZjM0MTgxZDJlN2ZiY2YxYmIyYTJjZDJlOGMxNzc1YjhiMDMKK01TRzogMGZhN2Y2YTZmY2E5ODE0MjliNTcyYTY3MDQ4NzFiZWQxNDBkYWI5M2VlMTk5MjAwNmU5YTNiYjJlNmNjOWEwOWQ0YzljZjE3MDY2YjMyZmY3ZWY1YjZiMmU3OTExMTc4ZWQ3NDYyYzRjMTc1NjAzMTcxY2E2MTM2NjhiM2JlMTkzZDk0YzM1MjFlNTg4OTEzYjU5NDhiNTUwYmU5OWQ4MmQ5NjYxOTdkNzEwYWNmZDk1OTE0Y2YzZTE5NzUzNmU4M2U2ODIzMGRjM2Q2N2U2N2RjZGJkZWUwNGYwZDljNDgwMjM3ZWNkMjhmNzQzMzhkYjVmM2Y2OTdkM2QwN2ZmMzM2MTNiYmNlNTQyYWNjOWE3ZmVkNWQxMjQ5MGI5YmZlMWQxMDk1NDBmODYzODAwZGQzNTZkYTg0MWE0NWEzY2Q4YTA4YTk0NWJmYTNhYTk4ZTE3MTIzMTJjNGMwZjBkOWRkNjRmNmVmY2Y3MzZiZDk3ZGVhZmNhOWRjYWEzZjA2ZDg3ZjJlZDcyYWViNmE5NGYzMjgwMDAwYzRiZjcyOGEwMWMxODYyZGFmZDlmYzVjN2Q1YTQ2ZWM3ZDNhODdhZjU5YTExZDg3ZjdmZjg0NDA3ZDM3MDEwZTFkOTQ2Y2YyMjVkNmIzYjFlZGVlMmU4YmJmMWUwNzllNDdmYjFmNjY2NjkzOTRmYmYyZmE2OGZjNTZmYzg5ODIwYTY4MDljMjUxZGQ2MmY1Yjg2NWM1NDdiMTRmYmQzYTE5NTA0MjQ0ZmZiYzdlNTI0MGY4OGQ0MzYwZjljYWNhYWY1ZjgyNDMzZDMzNDRmY2FlZTBhY2RlYjdiZWI5YzBiM2M3NjllYWM5MjBlZjRmMDlhYmMyYTIwOTU1MTIwNDU5NDNlY2NjNTNiMWMwM2VkMjRlNTY3ZjNkN2E3MTk3N2NhYjk4NDBjZTg5OGVlNThlZDVjNzNmNmFkZWE4MjMzOTRjNWM4ZTM2NThhNmJmNWFjYmJmMDA1NTk5MmMzMTJjMjZjNzljNWNmYmVhMzg2MGI4NzY0YTZkOGZmZTQ0OTFmOGE1YjhhMjE1ZTAxMTdhOWE2ODE2NGFlZTI1ZjhjMGJiMzgxMTk1YjI0MDBiY2I0NjQ0ZWJjZTFjZGU1YTlhMjY1ODJjYWI5ZGM3ZjQzYzMzZWFlMzUwZGI2NWFhN2RkMjJhMDc5YmRkZGNmNTZkODQ4ZGViMGNmYTUwYjNiZDczMmQ5ZGE5ZThkOGFiNzllOTM0NjlkZTU4MDJiNmRmZjVhYzJhYTg0ODJiYjBiMDM2ZDhmOWQ1OTViOGVhZDk0YmI4ZDc0MThlMmVhNDMxOTJlZmNiZmMwNWM0NjdiZGUwYTg2OGE1MTZhN2MxNGE4ODliNzJjNWI3M2U3ZDg1YzJiYWU5MDJlNGU2OGQxZjNjZWFiMmIyNzczYWY1YmJhZWU2YTAwZDA4MDYzZTc4MzNjZDRlMjk1MzQ3ZTU4ZjVkMWIzMzk3ZjY0MGMxNTljYzYwYTY3NGEyMjdiNGNkOGMxMGYxZGJhZWQ1MTZjY2FjZGQyOTVmMTFiMDgxNDcKK1NJRzogZjdjMzlmOTI0N2QyMmYwMTg5OTkyNDdmMGUwMDA1Y2Q2MzA3NmNjZjJmZWU0MTYzNDIxZjg2NDA3YTQxNjk4YzQwNTgxNjY0NzM1MWMwNGU5M2I1NDQxNWI2MmZjMDNmYzhjMjVlMjBmNzU0MWRhYjAzMTk3ZGM5MDBiMjljMGMKKworVFNUOiA1OTEKK1NLOiAgMzJhMTg4M2VmZjU3YTNhN2VjZGIzMTAyMjFlZTgzYzRkZTkyYjcyMjE1OTYxM2VjZjgxNmUzODI0MzdiNjBiOQorUEs6ICA4MmRkMWEwM2U1ODUyMDYyYmE0YThiNmIzYjkzYzVlOWM0M2ZmNjk5NWJkMmFhYzcyNjA2ZmFjODU4MDJjNjgyCitNU0c6IGVkMmIxMjNiNWRkN2Y1ZTcxOGUwMjZjNzljZmE2MTExOTI0OTAyZDE4OWE0MDZlZjJiMmU1NmE5ZWU1NTczYTc2ZGRkMWQwNjI5ZWJjZGVjZjJhYWE3NGU4NGZjZDAyMDhmMTRlZWEyZTE3MWU3Yzg2MDhiODE4ZmVmZjRkYmVhNTJkYjM1NDIyN2QwMjMyNTBiMWYwMWNiNGNjOGM1MjEzMmE5OGQ0YWNmNTVhNTRmZWU4MWUwOTRhZWQ2NmZhMGQ2YjZhMjAwYjZiODc0MTQ0MDIyNzg1MzhiOTA1MjlhOGM2MDNkOTI3ZWRkZGE5N2JjNGI4Y2I5NWQwNGI1MzM3ZmEyMmNlYWZjOGIzNDBjNDZmZWY2NzE5OGQxZmQ5OGQ4OWM2NWNkMDg5ZTIzZjUzZGJkY2E5Njc3OThiNWNkOTIzMjA1YWQ1MTFlZGY3MDZmMTIyNWY0NjQ4Yzk4NWUwMDllZjhhMmY2YTAxMTdjZGJlMTRlNzUzMTJkOGFjMWYwM2QwNDZiMzdjZGVlN2Q2OWMwZjI1Y2NmMTgxNDVhNjg4YThiM2NhODg3NWZlOGQ5MGJhZjg2ZDQzOTY5ZTRkNjEwMjE0ZjFhYzVkYmJhODdhMWVmMTAzNzdlNDBkNzgwNmZkOWQyMzQ1N2ZjOWRmMjk4OTkyMzlmZDFkMjc4ODQ5NjgxYTk0M2FkOWM5MWZkMWJiZDkyYjczY2IxNzdhODc4ZjkwNTllZTA3YWY3YTg3MzE2MTNlMzNkNTlkZjNkOTc3OTYwNzlkNTYzMWVkODVlYjIyNDUxMDZhNWZmNmEyYmNhNDBkZjVjNmU4NzQ3M2IyYzA4YzIyMTJmNTZmYzI5MzNhOTY5YTNjOTU4ZDM3YzUzNDNiYTI3NjBjODEzYTdhNTE2NWQyMzFjNWZlYWFlNjJiNzU1ZGY0OWZlY2E4MDA0MWE2NTM1ZjdlMDNiYzQ4ZTVmMjdmOWJlMjZlZjUzNjczZWI3YzM3YTJiNjQ3NDRhNmNmMTdlODg3NzM0YWUwMTBiZjQwZWVhMDNjZGEyMTJmNTEyZmJhMDU4NTk0NzE3OTY0MGJjYzQ1NDRiOGRlYjRlYWQxMjliYzMzMjI4MDBhZGY5ODgxOGY5OTU3NGJlZmQ5YjAwMTZkNGVlYzgxYThlNzhkYzNhMmFmMTNjYWIwMTY0OWFlMmUzM2Q1MTZiOWQ0MjA4YWQ2NjEzZDhlMjc4YzM5M2JhYTg4MjM0MGVmNDYxZmY0Zjk0NDIzZDU1Y2YzY2VkZDJhNmI1NmU4ODM2NTUzMWRkMjlkNjgyNzNhZGJmZTM2OTQwMmU2YTdjZWUwNTNkYTFmMTAwNTQwMDkxYTAwOTI5MjUyOTgzNDQ5MDI0YjFjMzM5MTExMDY1MDA4MmYwZTdkZmRkYjhlZGMyMDQyZjNjMTcxM2M2OTQ0YmE1MTRlZTc0MDdkMzJiZjA2Yzg1OGVmZWM0MmE3OGJlZTk3NzQ2ZTViNDg3OTE0MWExM2Q5ZmM1Y2IxMjNiNzgzMjczYjg0ZDU3YWQzNTI2YjdkYTNjNjhiODM5ZWZkMjNmNWYKK1NJRzogODMwOWNiZTcyZjgwNGJkOTUyMWRlZjVkYWQ0ZDhiYzEzODg2YjFkNGY2NjJjOWJiNWI5N2JhNDc5MGY0NGI4MDFmMzE5NWVhZDBkNGRkYjY2MDgxOGVjYmY5YTY4M2NhY2Y4NWYxZGNjOWU4MmMwOTExNmQ3MzM2NTgwOTFhMDAKKworVFNUOiA1OTIKK1NLOiAgMjJlY2VmNmRhYmU1OGMwNjY5YjgwNDY2NDk3M2U0NTdjMDVlNDc3N2Y3ODFjNTI1MjJhZjc2Yjk1NDgxYTkxNAorUEs6ICBkNDc4NDAxMGVmMDQwM2VkZGM1YTYyZDVkNDViYjI0M2I4MGI0YjlkNjljMzljYTM4N2M2ZjVjYmEwMjg2NDBmCitNU0c6IGM1MzVjMTNkNzc5ZmMwOTg1OTczZDZiY2Q1NTJkODE3MzRlOTJiZGYxMDk5NGIwMGNkNGQ1M2NlMzY1ZmFkOGM3Y2ZhOTYyMDZhZGI2MmQ0NTY3YmU1ZTQ2NjMxMzIzODUzZTM4Y2U0YmRjMTZkN2I4ZjYzMmEzYWQ5ZTAyNjE5ZWZmMzcxNzRlYWMzZjBiZjJmN2E3NTE3ZDRiODJkZTZhYTFhZjAwNjM4MTlkNWUxZjkyNzhmYjRmMjRjOGNjMDAyYWZiMTVmMzM0YzA0ZmFkYjAwMzAzMDEzYzAxNjY3ZjQ5MzJhNmM0Yjk3ZDM5Y2Q0YTQ1OTg1MDZjMGJkNzQwZWE5ZjExNjk2MzU3ZDdkMTdmZTRkNzVmOWQ3NDI0MWE3YWY3MWY5ZDg2OWVmNmNkNjk1Njg3YzAzZmMzNGFkNjVhNjhhNDg4OGExYTc0MTI2Y2I1NWNmN2RhOWNiNGE2NzE3ZjZlYjg4NDg0MDg5ZDJjNTE4OWFlMzgxZjI1ZTdiM2JjM2IyM2QwYzlkOWY5Y2RiYmVlY2ZkMWU3MmEwNWU2N2JiNDgzYTk3NjRkOWZjNzVhZDY5ZTRhYjEyNzBmYjQwZjM5NThmZWE0ZGE1NTliNDM5ODBiMjQ2ODEzMTNlODU5MWU2ODU0NmEzYmY3NmVlMzRiMzM5NzA5Mjk1YThkNDZmYjI0MzJkZGEyZjIyMTgxMmRmNjkyODk1ZTY3Y2IyOWNiZjZmZjQ1MDJiNDM5YTRlOWU0MzYzOWVjMDY3YmM5MGFlODE0YTI5M2E3YmQ0Njk2OGU2NTY3ODc2NDIzMDBhMGZmMjY5N2UzMzEzZjZhNDE4ZDNkMTJhNWY3YzUxYTRjNTdiNjMzODVmMmQyYTIxZDVkMWQ3NjNmYzhkMWI5M2MxMzQzNWY5ZTQ3ZWU3YTQyNTk4MGE2YWU2ZjFhOWQwMDc2MDc0NzY3ODNjNmQwYzc4ODczODBmODY4YzY1YjM4MmQ0Y2M4YzA0NDc4YmJkNzlhMWQ5YTk2NGI3ODE3MWQ2YmNmMGI4ZWVjNTBhMDZhNGVhMjM0ZDFjMjM0NjVkM2U3NWI4OGJjNTQwZGFkZTc0ZWQ0MjY3NWIwN2Y3Y2YwNzgyMTFlOTA3Zjg2ZDBkYzRiOTc4NjIzZDlmMDg3MzhhZjkyODY5NWU1NDJlYzI5ODBlNTVhMWRlNDllMjUyNDdmYTBhMDk2NzgxMThlMzkzMGJjNGQyNGIzMjE0ZDZkY2ZiNmViZGY0OTA2YzkyOGRlYjM3YmI5YmEyOWM4ZGUxYmI5NDE4ZGI3MThiMjg1M2JhNTdhZDhjYWU0Njc3YWRkZmQxOGI2YzdlOGMyNDI2MjFiMzVjN2YwZWZlOGRkNWViMjZmZjc1ZmQ1NzQ4YjFkNzgzZjZkNjhhN2Q5ZDU2ZGEyYzFhOTc4YWMyNWY4NGZiYjJiZTU1NjhkOTFlNzA5MzgyMjFjMTAyYWVlNjA0MDliY2JlYzBjODJlMTJkZGI0MjVlZWI2ZWNkMTE1NTFlY2QxZDMzZGRhZTg3MWFlMGM4ZjI0ZDBkMTgwMTg3MzJiNWUwZQorU0lHOiA1ZDBkMmFmNjc4YjNkMWI2Nzc1MTZkMDhhNzlhYWZkMzZlYzY3YzE0Y2FmNWJjZGFhZWFhY2M1MWExNGZiODA1Y2YyOTA0ZTg3MjFkYjI3MWIyMGRmNzA5YmVlMWE0ZmJmZTYyNTY1MDczYjJhN2U5NDI3MjQ0NjFmOTI3OTMwZAorCitUU1Q6IDU5MworU0s6ICA4ZGU4NjMzMGIyNTYwOTVlMTExNGI2NTI5YmVkY2UxODJjMTY2ZjY3YTkxNTM5Y2ViYzRiZWMyNWFkZDdhNGE5CitQSzogIDMzY2IwNTRiNTViYjc5MGFjMGYzYWZkZDlhNmU3YzA1MGVmZTkwMDZjMjRmNjBiODA0NGZkMDhhNWMxMDZjMTEKK01TRzogMzllNjFlMGVjY2VjOTI5Yzg3YjhiMjJkNGZkMThhZWFiZjQyZTljZTdiMDE1ZjJhOGNhYzkyYTUyNDQ4YTQyZmVkNGNiYWRjMDg1YmJiNGMwMzcxMmFlNzJjZmNiODAwYjk3ODM1MDY2OWIwOTkwMDg0ZjJkYWI3NmVjYTYwNmQxYTQ5ZmM1NWM1MjllMWU3ZGFkZjM5MTIyZGQ1YmQ3MzM4OTM4NThiMDUyM2VmNjJkZjRmMTM0Y2Y2YzI2ZWVkMDJmZGJjYjMwY2U0NzRiMWFkYTNmMDYwNzY5ZjkzNGJiZTY4NmNjZWJkNjA4ODNlY2VjOWNlM2ZmYjhhYzRhMDY3OGNkYzViMDA1YWUzZGJhN2U0ZmU4YmMwNDU3Mzk5NTdkODQ5ZjY5YzE0NzQwNTdiNDI4YzU0MjVmM2NjMjUxNmU4YmJlM2JlODFhZmQ0ZTdiNTc1YWJlODhjODdmMmYwM2I1NmY2OWY5ZTNiNjFiMzc4ODEyMGRhYTQ5NWVmMGU1MGViOTcwYTY0NWMxM2QyMTNjN2NmYjdkMGFkNTU1YzkyMGExZTVkYmNiNDY3OTdkOTM5ZmUwNDAxZjU0N2JmZDE3NTQzMjIxYTUzMDEwZGUwMWYyNWI2NDUxOWM4ZjAzOTYzZTRiOWNhNThiMDExMzYyN2MwNWI5NjA4ZWVhYTdiOWFlNjMwNWM5NjE4ODE2MDAwMGVlM2E3YWRlOTZlMGI0YmRlOWQwZWQ2YTBjZWQ3NjVkNzg2ODQwYTQ4MTc1YTZlMDkwYTM4YWY2YWRlYWExNDg2YTljYjVjOGM4YzkyMjNlZTBhZTRjNmMwMjY5MWEzNTQ3ZTMyNTgyYTViNzA1OWQyZWU2NmZhOWNkOTY1NjE1YzMxNWI0NzZmZDg2MTI3OWNkMWRkNzYwNzc0M2ZjNTU2MTI5NjMxMmYxMWU0NjVjYTQwYmNlM2NmMGIxZjFkNWEzMGFmNjA4N2RlNGRlOTZjZTQzOTY1YTQ2YzRmY2NhMTVmMjgxMTQ5YjVjMWEwYzg4ZmRiZjI3NDA5YTEzNGVkNGYxZmI3MzBmYTE5MTgxNmVhNzg0ZDk4NmNjOWVjNGI2OTQ0MDJkZTFkY2NhOWNjYzY0ZmJkMDdiMDdlNTRlOTMxZGU4MjdhODQyNDYwY2EwYmY2YjA0ZWJiNTcxZmE3Nzc4N2UzODg0YmUyMmYxZTQwMmNmMmI4YTk2YTVkMzk3NzBlYzRhODQzMDM2MTQyYTBiZTk3MGJiMWFiMTY1YTYzNzRkY2Y0M2RlYjhiOTgzMGIyYzQ5ZGI5Y2RmZTRiNTI0MmUzNmY5NWUwYzNlMDc3ZThkMjM4ZmE2YThhYzBkNTg2YmY2MWI4MjQ4ZmIzYTc5YTI3MGFiMjJiZThhOWRhMDU1ZmYzZDViYjJkMWNhOWJjMjVmNzAxNGI5NjQwNzcxOWRlMzQ0YzNlNzNiOGMxMTRmNzkyMDc1YTVjMjJmZGQ0MTYxNTRkMzQ5NGVjM2YwMmZiMTEyZWU1NzM3ZjcwNzA0YzFiNmIwN2VhY2JmOTQ1NjJjYTdiOTBkZDg0ZDk4YzNlZGYKK1NJRzogNmQwMWQyMzdkZDJiYjQxODhkMjliZmRlYzM4Nzk3NmE3MWJlN2FkZmJmOWUyMzYzOWIyMTZkMGFhMGMxMTkzMjIzNWVkY2NiM2I0MmFkY2RiNjI5MWEwZDI5OWFlZDY0OGRlOGIxOTU3OTQ5YjlkMWNmMmU1MDQ5MzAzMGE0MGYKKworVFNUOiA1OTQKK1NLOiAgYmFiNWZhNDkxODdkYTFjYWIxZDI5MTkwMDAxOWU2Y2JhZmVjY2QyN2JmN2VjYmYxMjYyYTcwMDUxNmU3YzI5ZgorUEs6ICBmNmZiMTk4NWVjNTkxZjY5ZTNiYWM4MDdiMmVhYmYyNjM5OTBjZGZhMDliMTc4MDllNDhlMzg1ZGEwNjVlYzIxCitNU0c6IDVjZjhmZjU4N2U1MmNjY2QyOTg0ZjM0NzkxZWU2ODQzZTc3MDE3YzNiNTVhZDQ1YzQ0NDUwOTY1Yjc1ZDgzNmU3OGZiZDdhMWQxNzI5ZWZmNmQ2ZDM0MGE5MDNmM2NmMTdkOWUyYWVjYWFmZjJhMzIxZmNkZGUwYWJjZmJiY2JjYzA5ZjQwODZmODEyYzQ2ZWZiMDFiNzgzNDNhZmJlNDgzMDlmOTE3NDc4NDU1ZjMyMDAwYzZhNjlmNzlmZTIxMWI5OWYwMzdmNTk1NmQ3MjI3NWE3ZmU3YjQ1Mjk2YjVmNzM5YWE0NTFmZjA1NzViYzcwNTg4NWFhNTYzMWIwZDA4NTBiYzJiMTJjNDE5MjQzNWFlNWQyZjUyYmM1NDM4NjQ5N2M0YTI0YjhiNmRiNTE2YmUwOWQ4Y2NmMWVjYTc4NWJkZTk3ZTliZTFhYzA2NGYwOTRlMmFmY2MzMDdjMGUwNmI0YzU2NGNkOWE5YTk1MzA1YjM3YjgxZjQzNDYxMWRjYTU1Y2FhYTAzMWU4ODQ5NWQ1ZGM1YTA0ZmY1ZmFmZGYwYTgyYTBjMDNhZmYxYmZiZjRmZmViYWU3MTgyNGUzNWU3NTFiMDkyNzAwMDc2Njk4NjBiNTgwMDM1NjU5ZTIzYWNlNzZiM2IzNjlmYTMwNmYyYmVkOTU3OTlmYWZhYmMyZTY5YzE0MWJlYjBiYWNhYzdlYWEzNDdlNzdiZTVhZjNmY2RiZTdiMzY0YTdmOWE2NmQ1ZTE3YTA3ZGY2MjAyZmQ5OGMxNGJmZWUyY2E2ZjA3NDU2NTFmMGM4NTUwZjlmZmZmY2FmYjk2ZmZiM2YxMDNlNjUyZTc4ZjUzOTE2Y2Q2ZjFkZDA1YjNmZTk5YjM0MjAxYjA3ZWFjMjY1MmY1MjUzNTcxZmQzODIyYzY5NWQyNjVjN2RmZGQ2YzZiMTRhODBiNmU4NzE4M2U2ZTAzMmU1ZjI0MDFjZDIzOGNkZDM3NjliYjZlMzkwODIzNDM4ZjU2NzNlYTlhNDc5ZTVjNjNmZTA3YTA3ZjRlMTRmNTc3NTdjNGQ3ZDIyYjM1ZDcxYzQ0ZWFhZDQ4NzNjOGVjYTZmNmIyMWRjZmE5NTUyMGZmOTYxNGFiZjdhMGUxODg1MzA5ZjJjZWQzYmNkZmMzMTkzNjNhMmRhNDZkZWQ3OWE1Y2M3YjZmNjkzODNmOTRhYjM1YzI1MDYyOWNiOTE1ZDY2N2I2MjgxMTg2NzU0ODk1ODAzZTRiOTVlNzQxODI4OWE2YWMzYmNkYjZlMWU3ZjZmMWRjMzhlNzdkMjgxOTE0Y2M0MDRmOTdjZmYxNGZiMmM0ZmQ4MTQxMmQxMDFjMWJmYjM2OGNlNTkzMTFlODkyYThiOWNkY2E4NjkzNmYzYmNhN2VjNzkxNjNlZGRmMWNlZTY4ZjQ5ZjFlYmFhMjdlYzUwZjQ5MGQ2MTYwMWNhMzVmOGQ2ZWQyNjYwNTRhZWI5YjE5OWY5MzNiZmZkNmUwMDUwZjI2MWI0ZTEzZDVlYmZlMmNhYTY1NTdjMzJkZGVhZWViYzJhMTFmMGFhMjMzMjQwZGExYzdlNDBmNzYKK1NJRzogZTMxNjAzOGQ2YWExNWIxYzFiNjFjMWExNmIzNjkwNGZlOGEyODljOGQ2MDJiZWNjNTE0ZDk5MjIwMDg2YjI2Nzg1OWY1YmY2ZTljMDg2MzU1OWFjNjIzYTU2ZDc1MzIzNDRlOGQyZjI4YjNmOWRmOTIwODk3MDhiMWIwNTkwMDgKKworVFNUOiA1OTUKK1NLOiAgNzRjYTEyMmFiNjBkZTUwY2RjMDRhOGUyZWRhNDVkOTYzMTA2MWJmMTg3ZDMxNmJlNWI3Y2MwNmYwMjBjNDgzZQorUEs6ICA3ODdkZWZkNGZiMjRhMzk5YmQyYTRlNzZkZmY3ZDYwM2VkMGFjYjMyNjk4MTNlNGRmNjkwYmJmNWIyYmM2OTZlCitNU0c6IGE4MGI0NjA3OWZhNzc1ZjhjMWExOWZhMDgyOWJlNjY2YmRmZGNhMDc5Y2FkNDNkNzBlMDg0MjE4M2JjMGRiOTU0NjhhNTM5ZjBkYjJhZWEzYWI5YzcwNzNiNDVkMjI4YTliZGUyMzI4OTdhNmViNmZjOWVkZjczNjVlNzEwMWJhOTdjNDQ2YTUxOWEzNjQ5Y2Y1MjdjOGE2ZGU3MjUxYjkyODA2ODE1YWMyZmEwMDgyZWZmNzVlMjU4MmNiY2E3ZTFlNGRhMmE0NDZlYTIzM2U3Y2Y3Y2VkZmIwZTIzOThlYjZlMTFiYmFlZmUzZjdlYzg5ZjVkNzNkZDM0YmQ0N2ZiY2I0ZDdiMjJmMmFhZWUzNzM3ODU2NTE4NDExMzVjZDg2NjFhNzAxYjIxMDg0YTMxNmRlYWMzMDc0ZTI0YTJlMzVhMDMzMGY3ZDE0NzliOTMyZjI4NTI3N2MxOGE0NDE3ODcyMjRmYmJlNDZjNjJlODM0YTE4NTFlZDIzNzk5OGQ0OGRjZTIwYmExMTRkMTFlOTQxYmUyOWQ1NmQwMmY3MzcwYzhmNmQ2ZDdlNTAyNDhkY2Q4ZWM4OWQzYjIyZjRmNTg3NzgxMjlmYWZkNGJiOTJlZGUxNzcxNGJmMDIyYTViZjkyYmU0NzlmMThlNjM4NTJlY2RjZjhjNDIxMWY1MzBkZDMwZjc5Y2JmNGJmYTU3MzdmMGJhZDNiMDEwNjA2N2Y0MTMyN2MzMTg5ZTZmMjA2ZjBkNGYzYzcwNGJmMmJkMGIxNjFmMDE4ZmQyMWNkZGZiNDE4YmFjNGQ1MmVmMDJjNDFjODc5MmU0MTNiMDRmMDgzNmNlYTFmODZjOTJlNWQ1NzAzYmVlMmI1YzU4OTllMjg1OTkyMDI0ZjY0ZTBkMTZjNjBhZDBmZDkyNTQ3OTMyZDBjNWNiOThkOGRhMjJmZWViZGJiYThkMWRlMWU3ZTliYjIxOWE5MmViNmMxYzY5OGQzYjMzYTM3ZjliODE5N2QyNmI1NTBmZWJkMjYwMWU3YTY0M2VhN2UxZDllNDQ4YWUwMzdmNjI5YTMwNmNlNDE3YWViNzlmMmUzY2E0NGQ4ZGIzODQ4YTgxMWYxODQ2ODExY2JjYjg3NGY4YWYwOWUwZmQwMTczY2YxNzVmMzA0MTE1NDc2YmYyYzZjMmQyZjMzMmViYTUzNGY0NmFhZTgwMWMyNjkyYzJkMmZhZGRmZWFjYzBmMWRhY2U0NDBhYmMyYWU1ZTVhNDlkNTc4ZmQ3ZjlkZTJhODQxYWQ2YjY3NjljMzJiMTQ0Y2VlYTE2ZDBmM2MwY2IzYThlZTY5NGMzOGMyODA3MzU5NTA5NmM4MTM3NjJjYzJjNWVjNGIwZDhkNzIzZGQ2NjA4NTMyNzhmYzcyZmQ2YmQ5ZDEyNzI5MzNkZDJhMzhlZDlkMDRiMTM5MGZmZTRiMjk0YTZmZmZhNzIxZWUzYmJhMzNhMDNhMTQ5YzRhMDM0NTI2NWMwMWNlMDE1ZTk0ZGI0MTljZmY3MDQ5ODUyZWUwMDAwNDhhODU3NThmNmQ3YjFjNTljNTA4OWVlMDE4ZWQwOWI1MgorU0lHOiBiY2I0Yjg1MDY5NjAxMTk5N2ViNWRmZTE0M2YxYTNkNTYyOGVmMWE1NDA3NjkxZWU0OGM3OWQ2OWFiZTRkNTMzZjgxN2FkNzMxM2I1Nzk1ZTQ2ZTU5NWYzYWUzYTkxNjViMWI2ZmRkYWU4NjE2NGZmY2JhMzc2MjQ5ODM3ZjYwOQorCitUU1Q6IDU5NgorU0s6ICA2NWVlYTlmZmI3NTYxMmJkZTFkOWJhM2VhNGZiNWVkYTBhYTZmMjU1NmFiMTViZjE4MTdjZWUzYjk1YmJiYTEyCitQSzogIDViMzkzNmRjNzQ5YjZiOTIzOWYxNTc5OGFjY2FmZDg4NGMzNjU5ZWUwMWIyZDE3ZDc0ZmM3ZGE3ODI3NGU3ZTYKK01TRzogYzA2OTM2MzIzY2UzMjUzY2FjNWFiNGY2YjgzMjcwY2Q0Y2ZlODVkMGJmOGJhYzFlMWI4ZDVmMGIxNTNmNTQxYzhlOGVkOTVmMjhkNWM4NWEyMzE1Y2Q5MzFiN2NmM2VkYWU1MGY5MjgzMDU5OTE2MjgwNGIxMzYzZDNhYzBkYTBhYmQwOTc1MTAyM2JkZGMxNjI4ODk0NGU2MTZkMjFkOTEyNzE5NzhiYjc4MmQzZWJlZDdmYTYxMjg0Yzc0OTBkMjc1OTNjYThhM2Q1YjQ3NTYyMzMwNzAxMGFiYzFmYmY3OTNhODE2YWFhYjVlMDkyNGRlYzc5ZDYwNDk4OTY1Y2Y3ZjgwYWI1OWZjMDI5Zjc4MjE2Njc1NWI3MmI4NjkwNzU0MzRhYjYwNmNjODcwYTdjMGJjOGJmMjlhZWUwMzNmYTljYzEyMmVkN2M4ZTA2OWI1NDdkYmFlMjU5MDFiOWUyNDliNDFmZWEwYmY4ZGFmMzgyNjg2NmJjYWVkMjc1M2I1ZTkxYWU5MzdlNzE3YjUwOGEwYWNmNGMzYjA2MWZmMGNiOWNmZDM4MGUyNDk0NTAwOTUxYTY2MmZkNDkyOGZjNWZjYWY2YzE4ZTg0YjFkMzc4ZTQ5YmQ5ZDU5Njg2ZDA4N2ViZDU1MmQwN2ZhOWJhODE2ZmE1NDAyY2E5ZTcyNTJhNjQ4ZDEwNmNmZTZjNDMxY2MyYTA1M2UyMjk0NjM3Y2RiOTlkOTZhYmU2ODllZGFiYzVjYTA3MGY3N2MxZWNkMWQ1MmQ1Mzg1Mjg5ZjE3Y2VkNzY4YzM5NzE2NzFiOWMwYjJmODU1Yjg0NjFjMWU3NDZjN2IzOGY3Nzg5NmI4NWFmYmJlZGQwODM3NWZlOTIyOTg0NjE0ZGQ4NDlmZTJjYjg5YWU3MTQ5ZGNkMWQzN2Y0OTM2ZTY3YjE0NDBiZTcyZTAwOTM5OGJlNmYwODNiZjk2MTE0ODBiNTkyZmUyZjAxMThlMjUzZGI1ZDJlOWU0YjQ1NDFjMTFkYTAwZjcxNjFhNzM2ZTVmMGJiOTM0MjA4ZTNlZjRlMGI5YTUyMjU4MjAzZjA2MGQxOGExOTUxNTllNWUyNjhhYTI4MDUzYzgzNGY3YmQ1ZGI5YmQ3MWY1MDdkOTEzNzBiM2ZmY2FiYmQ0YWNiMzA3MWQzZjZkNTJjMzQ5YWNmMzUwOTUzNDhjZWJmNWE4NmY4YzU5ZGRjOTY1ZWZmNjEwYWM0MjU4MDRjMGUyZjZiZTQyODUzZjViNDY0MzRhMmMzMWQ5YWM5OTUzOWJmZGMwNGVjZjJmZWZkMDQ1OThmYTYzYzEzOWZmNmM2ZDg4NDEwZTczYmQzMjhjYzQzNDlhYjRiYjg2ZjJlMmVkN2M3M2RlOTY1MjBlZjc3MzBlZjM4MzQ1ZTBmOTcyYTg0YzUzODgxMDM2ODdlNjhjNTBmOWQ4YzlhZjkwM2JjNjMyZDQzMjA0MDYyYTRmNTAyZTIxNGMwNzA1OWMyY2JlZjcyYTU0MTEwZGJmNzNlNDI1NDAyZDE3ZTk3OGVjMTk5YjUxOGNlYzAzMTBiZmJmN2Q5YWQzMDA0MzRhNGEKK1NJRzogYmFhNzExMzE1NTM1OGM5MjRmZWQ1NzQ4OGE2NTY3Zjg3MjM4NTBhOWY1YzAzYTBkN2RlODVmY2NkOGZiNGQxN2Q3NzUzNTIzYjAwYzBkOGFkYjg4NGRjMGM4YTdhNDRkYzJhNjAwODNhYTViM2M1Yjk0YThkODgwZjJhOTRkMDkKKworVFNUOiA1OTcKK1NLOiAgMDhkYWJkNGU1YzExOWVhOTA3Y2U0NWYwYTdhZjllNjJjMGMzZjFjOWVjNjFhZDEwNTY3ZDc5MzYyODU0YzU1NworUEs6ICA5NDU0MDZiODVkN2IzMmUwYjFhYjEyMDBiOTQyMjJkZTFhYWE2ODYyNGM2MGJiNDcxNmIwYmNlOWRmMDA1NzcxCitNU0c6IDZjNDcxOWE1YTJhNjg5NDgzNWM0YWMxZWQ2OTE1OWU1ZWJiNTY5MmFkOGVhYWRhNDM5Zjc5ZTk2Njg0YjM2Y2VjZmI0NGI4OTAxNTYzMTY2M2UwNjQ0ZjZjN2FiNzEzOTg5ZDc0MmRhMjc0MjcyNTMzMThhNTI0MzJkZmFiMjEyMWQxZTkyMzNlYWQ3MTllMmM4NmE2YmUwNzM2M2QwMDIxNzNmMjA1NDQ2Y2E5NWZjMTdiMjQ2MzU4MjdmZTMxNWYyMjI0MDhlNDVlODMzZjI5ZmYwOGZmMzFkYWM1ODNhNGJlYzcwNzZkNWNjNzhjZmM5NDQ1MWNiZjRmN2UyZmM1YjVlZDgwNzBmNGVmODA4YmUxZDhhNjgwZWNkZmY1OTAxMGYzOWIxZGU4MGJlZjE3MTlmMWUyMThlMGNlMGExZTM5M2E1NjZjNTE3NjRkMjM3MGQ5NWE2MTE5MWQ4ZjdhZjc0MGRjMjA4ZmE3ODMxYjIxMDY3MDUxMmNkNzM3NjZlNjA5ZTliNzgwMDIxZWJiMjBjYzg3OTBkOGRhNWYxMGY1YjZhMTE0YTFkYjg4ZjY2NzY2NTAxODAyZDljMzY2ZWEzZmE2ZjFiMWUxZThiMDQyMDk0MzQxM2NjNmZlYWIyOGM2YjY4M2NkMmIzMzMwNjljODk1MWJjNDVlOGExM2JkNTIyNTc4MzUxYzg4MmY3YzM0MmZlNDMzMWI5MjFmNTMzYzkyZWMwNGE0OWIyOTJiYzU2OWRkY2VmY2FiNTcyN2Y5YjU2MjViMTY3YTkwMmRjODk2ZDhiYzdkOGU5OTkyMGY1ZGI4ZGQ3Njc4MzljNDNlM2NkZjk0NzA4MGRlYzk1NDIxNGE2ZmJiZTA0ODdhMmYzMmNkMTdhNmIwMDAzNzBiZDQxNDQ4NGZiNzNjNTEwZWEwMTI0YzZjZjBmZTU2YzA4NDZhNzliZmM1OTc3OWQzYjA3YTFiZDJjN2ZiN2UyZDAwMzlmMGJkMjFjOGEzMDhmYjBmNThmZGJmOTRlZmEwODU3YWMzYmRkZGQ4NmQ1NzYzZTIwNWVlMWIyMjFmMDYwY2VkYjhiYzA1ZjAzMWI2MDZjYzc0ZGFkYzVkYjA0MjMyNzQ4ODY1YTczZDZjY2RkYjRkNWU5MzBkNTI4MzQ4YzViZTkwODhiZmUzNDQ1ODQ4N2E2N2IxOWExOGVjYTI1YzBkM2ZiZTIxOTVlYjkxNzA3YjY1ZDkxNjFlYTkzZWRkZDY0YTYzNGIyMzI4MDE5NWZkYjBkMTM4OGY2OTk4ZTE4NThhNDViODg2OTk5Yjg0NGU2Nzk1ZDgzZDMxODM3ZTQ0MTFmNzE2OTkyMjZkZTFiYTAyNDU2MDgwMDBkY2YyMjNkZDE4MzU5YjdjNmQ0NTlhNjVkYmU2NmM5MGY1Y2I4YzA5MTIyMTg3YTMwNDZhMTZkZDE3OWMzZjQzNzNlNTdjZjVlZTBlYWI2YTIxMmNjOWVkOGI1NGJmMzdmMWQyN2ZiZDc5ODQ4ZTRlYzFmNTY3MjQzYWI4NzQwYTA1MTQ5ZDk2MDJlYWRhOTIwYTQ2ZDYxMGQzY2M4MjNiNTY0OTgKK1NJRzogMzNhZGJmY2Q0ZWQ0ZmE2N2M1OGI1Y2I1OWUxNjk4NzE0ODY5NzgxMjY2MGIzNTMxZmY2YTIxYzc0OWI5NjAxNjYwYmFlZWUyNDg5YjgyYjRjZGUxMzJiNmU2MmYyZjkwZDhmOTkyNzg2MGFhYWQyNTI4MWQwM2ViMTdhOTUyMGYKKworVFNUOiA1OTgKK1NLOiAgZTBmN2QwMDgyNGM1ZjM3MDFlNTUxN2E0YWJjMTNlMmYyYzBiMTM4YzgzNjk3Nzg0M2JiZDFlZWZmYWJkOTY4YQorUEs6ICA1MmZkZGFlM2UwMThhNjg0NzNiMzE2OGQwNzY0Y2ZlMjc0ZGNjODM0YzkwYTkxZmI0ZmU3NGI5MzlkZDIzOGIxCitNU0c6IGIzOWUzYWM3NWEyMjFhZGNjZWQwOWE4NTkxYWM1ZTJmZTE1ZGZlZDViOTE5Y2JhZjE0YzY1ZWI3Y2Q5MzA4NmRkZWUzZjc0NzI1NDdlNjZkZGM3MDA2MmI5NzYyOTdkMWEzYzE3MGVlNTI1YzljNTNiYTkzYTRjNGZkYjIzNTcyYjdjYTZlZDEzODUzZTcwZGIxZDcyZWRlYjk5NDRiYmMzNTRhNTIwZTc3YWU1OTFmMzE4MDkyZWZkNWU2NmQ5YzA5ODFjNGE0YmRhOThhYTRlNTkwNDVmZjljNGI0Y2EzYWNiMmZmZDg5MzIwMWM3MGIzNGE3N2YyNGVkYTU0NTQ5ZGM4NGFkMTM0YTM1NTMyNTUzODE1ODg4YWUzZGQ5ZTI0MWVjNGViYmZmODZmOGMxZThhZGJhYWM0YjkxYWZkMTgyMjhjYmJkNWRkODA1YWNhYmYwYTFlMjkwY2U1ZGRhMDI1MWFkZmIzN2NiNzE0YzEzOWI1YTMyNDJkODhjNjQ0ODRhMzc2NTVjYzhmY2JlY2ZmYTk3ZmJkMTRkNjRkNTEyYmY4ZjYzMDVmODljNTA5MjJkZTU0MTY5MjE1OGZiNTQ3ZmQ1MzlmMWU1ODc3Y2M2NDk0OTUxNjYzMzJlYTJiNjg1Y2ZhM2Y2MDIwMTlkZjJhYjJjMjVlZDk2YjY4NzQ1ZTlhZTg5Yzk0OGRhMTFhZDhhODMwZGY4YjAwZjJlNjY4MTkyZGFkZjJjNTYyMGQzNWM2ZTgxYTI4NTNmODQxZTM3NWEwZDlmY2EyZDI5NmVmY2UyYWMzOGQ0MGIwMzBiNTc1NjBhZTZlODM0MTMzOWIzZDNjMmQwNjExNjQxMjQzMTk1OTg2ODhmY2E2MThmYzY0YzllOGY1ZjgzMTA5N2EwNTNhZjE5ZDdkYmQ2MTIxOGQ5MjY3NDJjMmU5YTQyYTc5Y2MxYjE0ODkxMjcyMmQ4Y2Q1Y2E3OTNhMWFkNzNiNWYxNDFiNDE4MDljMmZjMDUzMGI3NjMwZTgwMzkwYzZiMzM4YzcxODY4ZGFjYzU5YmY0NjNmZmM0ODkwMTZiZjY3ZjljOWQ1NTUzYzFlZGUxNzE1MjgxM2ZlMGIyNjRiNjVkY2ExYjJiMzhlNGI4MDlmOGM5NzI1YWM1YjFkOGQyZTU2YmVjOTY0OWZlNTVjNzU4M2ZmMjNiMDQzZDZmMzc2ODYyOGYxZjA1MTYzMzc4MjRhNWE1NmI0MDk1MjBhNmE2Y2I3N2U0ZjVmYzIwYjlmNjg5OWUwMGFiMjJkYjEwZDE4MmYwOWI4MWU5NGYzYWQ1NjhhMGI4MTI0NGRmM2YxODU1YzZlZjIyMmE0MWE1MWI2MmE0NjQ5YmI4MjY5MGFiNjVmYWNhYzBkODFkNmZlMDI2MDExNzBhOGRiNjJjYmM1ZWM5OTU1ZDc3MTFhMWMzOTY1NmE5ZjZlMWZiNmJjMTgzZDliZWExNTAzNTMxZjE3MzYyNzY4YmI4NDFmOWQyMWYxM2EyYzk5MWU1NWRmZjdmMmIzMzZlMjllYjI5NTA3NjM4YmRjYWQ3YmIzMWM2OWU5MDkyMDdlYmFiY2M2NTNmZgorU0lHOiBjY2RmZTE4YWQ2ZDBiNjVkMDg2ZDYzMmY4M2NjNDZmZjNiM2YyYzA3YmI4ZTc2OWQwZmI0ZTgyZGY4YTM4NzNmOWFlZTM1ZmRkMThhNTc4MzYwMzE4MGE5NWM5Zjc0Y2VkOWRiNTE0NmFmY2ZiYmRkNDBkZjI5ZTA0MjAxMjAwYworCitUU1Q6IDU5OQorU0s6ICA2YWNkOTM5ZTQyMjIyNmNjNTQ0M2Q0YWFiZjU4YzExYWY2NTBjYjQwYjk2NDhiNGRhMzhiOTI3YmZmOWE1OGRiCitQSzogIDRjMGI5MTc1NmI5ZTIwNmY3ODYzYjE1NWZmYzU1MDliYjUyNDc3Y2VhY2QwMWNhMDExNDM1MTUzNjc4NjQ2Y2MKK01TRzogODI1MGQ1MzFjZjJiNjZhYWMyYjM3OGQ1NGJjNTdmZDMyOWFkNWE0MTRhNTk5MjU1ODk4YjNjM2I0NWJmOWMwZDJjNzc1NDc1NjZiNjYwZWVjYzc2YTY5NWEyZDYwOGFiZjExYTVmNmRiM2U2MDdmZDVhMjE3MTRiMGZhZDVkODE0YzAxNWViZjQ4YmI3M2FkNzVkYTljMDNjNGFmNTQ4OWU3ODJiNmJmNzkwOGExYmQ1MjhkN2NlNzg4YTE4YmEzNTI4ZTM1MzdhYTdiYmY3NWY2NTI0YmJkMTlhNTMwNGJhMmE0YTNlZTU4YzQxZmVjMzEzMmVlNjUwMTY0MTIxNWVmZjc0NmQ3ODAwYzRkMzNmNTJiZTgzNTdlMGVlNzU4MDQxZDkxY2ZlNDNjNjBjM2NlZGMwOWIwZDQ2ZDRjZmI5YWUyYTAyMzliNmYzM2M2OTQxY2ZmMzUzNzI2NzBlZWY1Yzg4NTlhYjY1YjZlOWY3ZWJjZTMyZmExNWE5YTQ3N2FlY2RjOTY4M2ExZTMzYTFlZGNkYzkwZDQyMGEzMWU3OGMxNTNkMjYwMjA4NzFkYWE0ZmZmMjhhY2MzZjExYTcyMDY3ODg4MDZiNmZhMDIzNDY4ZWE1YTNkMTg2ZDEwZjBkZDU2Nzc5NjY2M2JhMzdjODMyZmU3NWFhZTdkY2NlYmYzMTlmOTM2MDBjNDZhMjJmNTcyMjM4MTJkZGQwYTY4ZDc2YmFmNWUyN2E5ZmM4YmQ2OGNjMTBiNWI1MTUxZDYyYjQxZjkzNDhlMjFiNzE1MzUyZjI2MzBiNjE3ZjgxM2IwYzI4OTk2Mjg1OTA0Y2YyOTRlOWMyODU2YjE3YmEzNWY5YTgyMTk4YjgyMTRhMDM1ZTI4OTZkNjU2OGJlNDIzOTJjY2VmMzJjZDRlYmZlZWJmMTJiZTAxMjUyMDZiYmU4OTMzNmQzZTc2Mjk5MWRmYWI2OGZjOTlkYzE2NDliODkxMzgzZGIzMWZhYjY0OWU2Mjg4MjNmNDU5OGNiNjM2YTM4ZmUxZGY3M2U2OGQ3NDI1ZmM1ZDJlYjU1YTBmZDFiYzlmNWNlYWFiZDZkZDQxZjIzZTRmMDg2YzY5MjYzM2RjM2M0NjE5YTk3YWIwZWFkYTE3MWY4NGFkZjIwZWNjOGVjZDQ3YzUxY2NhM2U1OWRkODA5YjBhZWFhNzMwZGY5NGJlM2JhY2ZkOGVlODg4YmJhOWQ1NzA4NTA2NTJjZDRkNWU2YzU1MmE1N2U5ZjQ4YTJiMDZhYWNkYzcwOGQ4NGEzNzZmYmM2Yzk0YmE2YmY2NGE1ZjAxODgwMGE3Y2M4NTEyNDVhZWRiMjAzNzhiMzI5YWNlYmIyOTc3YzEzOTgwODJiM2EwZTVlMmE5YzI0ODRmYTMwMWQzMDM3YTgyMjRkZGNjMDk1YjFkYmQ4YTIzMTViNTViZjMzMThjMjc4MTBlZmMzZDhlMjVmYTdhODc4OWI3M2E0ZjU1MDU5MDgwYjA4YWJiMzY5OWI3Yjg2MjZjYjJhNzgwZDk3Y2MxY2E4MDMyODUxYmFmNGVkOGI2NGZjNDMzMDg2NWY4NGNjYjEyYTNkYWUKK1NJRzogNzk5OTU4NzdlZDI0Yzc5MTY4NGYyOTg0YmRmOTYwOWMzZjdiNTc2YzU3ZDE2MmVlNjIyZDRjZThmMzZkOWM1NTczMTY5ZDg4MDEyMTZmMWM0NmZmZTJmNmUyYzA5MDQ4ZTQ3ZDRiZWI5OTdlOWFiYzRhYmIxMjlmOWI3OTY5MGEKKworVFNUOiA2MDAKK1NLOiAgNGRlZmY2NDdjYmM0NWVjYWVkYzNmN2RkZjIyYzE2N2FmMjRlM2Q2M2RhMjJiMGU2YTViODQzOWMwZjNiMTkzNAorUEs6ICAwYzI3YzlkNzdhYzhjNzI1YmIwNjYzOTMzYWIzMGQxYWFkMDljYmNmMmNkNzExNmM2MDg1YTg0OTlmNzAxNDAyCitNU0c6IGQ2MjAxZWJjMjFjZWMxZTliYzI4Zjk1N2M5ZDAyOWNjMzhmOWU4NWUwNmRmYzkwYmYyOTdlNjFmMmI3M2I0MDdkOTgyYTY2YjkxZTk0YTI0ZTkxZDA2YWI4YTVjMDc5ZDBmNjliZTU3ODhlYThmZWFjZWJkOTE3MjkxMTkyMjMzODYyZTZhY2RhMWU4Y2Y5YTQ4YmZmYjU0OTFkZDY1YWY1NDFiNmM3MmFmNjgxYTgxODIzZDk4YTBhYmVlYjZiYTlmOTU0NjViODQxMWY5OWUxMTljZDI4NDc5ZGE5ODQyNTliZGY4NmM5ZmVmM2NjYTM0ZTIyNDY5MWYxODNjZjA5NTAzNzcyN2RhOWNhZDI5ZjI0MmY4M2ViNGY3MzZlMjdmZGY2NzAxOGQ3MTFiNzRjNDViMjk1NWE2YTc2ZWMxNTMzMGRmNWJhZDgwMzBjNmIzYTg4ZDcyZjI4NDQ3NjUyYWM4OTAyYjViNzZjYmY2Yjk0NWNlYWJmZWMwNGE5YjhjYjMwZjQzZDllYjc3M2U2NzA1NTk0ZjBkZTFiNzBmMWEyMGM5OWZjNGIxMjIxZjhjODFiMGJjMzBkYTEyY2Q1ZGVhOGY0ZDkwZjEzYTgxMWEyY2MxMWE5Njg0NmFhZmI0YzQyYTAwZTlhZTdkYTI1NmEwZDIyYjE5OGFmYzI1Y2MxMDQxZDI0ZTA1NmNmMzg3NjAxZDdiZjdlYjMxODJkNjA1ZmU1ZTYzYjE4ZDUzMWE1Zjg0ZTVkYmQwMTg0YTc2YzZjNDY3YTgyNjNhOThiNWMwMDVmY2IyYWFmOTg5ZjVjYmQwYTlkOTAzZmNmYzYwOWQ2ZTU3ZDljNDM5MDIxY2VhOTNlNGM0ZTk5MWYxOTNjYWYzMjQzNzcwYjMyNTc4NzQ4MDc2YjdmNGNiOTdmMTdjMTdhNzliODIyNTNjMjQyM2RiNjk4Y2QwYTMzYWIzM2JiMDliMGIwOGNiOGNlYWRjYTFlMjljNWRlMmZjMTJiMjQwN2I2Y2M1YWY1YWU5NzZkZDNlYzYzMGQ4MzM5YjdkZDExZmEzNGNhYWMxNTBjN2M0NzkxZDhjNDI3YjBhZDkyZTA1MjkwNjdhODhkNTIwMTFlMWUwYTE4Mjk5Yjk2OTg5NmY4YjgzNjBmNzVjNDVjNDk2ZGE0N2IwOWI0NTBmOTgyMmJjYmNkNDNmNDI5M2M1MTY4MDJiZjc0N2M0YWJlZWRmYWEzZTc5Y2I5MTAzZDM3NzBmNTYwN2I3NzUxNmU1YjFjZTBmNjRiNmVlYzdiZWMzYzY0N2MwMDY5NTZkYzU1YjZjNzlmNmFmYjM5ZDFmYzNlY2YxMWI5NzRiNDRhZWRiNzJhZWQxMzE2NjM1MDgzYzIxMjQ1MDJlNWM3MmQ4NmVjYWI2YWM5MDI0M2ViMzlhNmFhOWNiOTQ4MGRhMzhlMWVkYjhkMjhmZjkwOTI0YzA1ZDVkMjFhZjVhZjk1OTU3YjgwMjA3ODEzNzg3MTFhMjlkMDkyMGFjYWQ4Y2NiMzlhMzExNjkzMjc4Yzk5MDBiNDcwZGEyYmQ0YzEyYTAxZDczOTYyNjQ0MDE3YjYwMzQ3MTNiMmEKK1NJRzogZGQ1NDg5ZmRlNGJhODdkMTE3M2Q0Y2VlMDY4MmFmZGQ0YmFkODBkZDc3MGVhN2QwZGNlYmFmMjFhY2M2MWRkNjMyNGFjYTI5NWVkMGUyM2E5MTVlY2ZkYWQ1MGYxNzVlYmM1MTZmMWJlNWI2ZDg3ZDkwYmJlMzg2MjI0OTUzMDIKKworVFNUOiA2MDEKK1NLOiAgNWExOWJmNmM5NDFmMzk0ZTkzYmQzNjI1ZmI4MWNkOWRhODFjOTAyMGIxYzUzMTI1N2E3YjU5NTdiYjA3OTIxMQorUEs6ICAyMGU4Njk5ZDA4N2NlNWU4MTUxZDI4MDUzZGNlNjZjMjNmMjgwODFmMzViZDI2ODE5YmJlODVkMzhhMDlkNzAyCitNU0c6IGY3MjFjYTNhMzJjMWU4MWM5YzZmNDZkNWUxZmI1MGU3Y2UyZjRlNzA5MzMzY2EyYjU1MGQ1MjEzYjY3NzNkNjcwY2E1OWEyYjUwODZhNDQzODQzYWM1MDgxM2IyNDRjOWM5ZmFjNmQxMTk2OTg5Mjc4MTM1MTJjODRmZTMwYTg5NTUzMDEwMTM4ZjkxZTgxNzZmNWNmMjU3ODlkNzI4MWRkYjgzYTI0NjcwNWRjY2I5OTljNGNkMGFlMjE5YzY0NWY2ZDcxZDQ1MWFlMWY4ZDJmOTg5MWFmOGNjY2UwM2Y0Mzg1NTlmYjgzNjY3YjgwNzdmYmU0MzVhNzQ0YWYwMTlkNmQxMzk5ZmQyMTM3ZjVhZmI4ZWYzZjQ3YmNmNzM1ZTdjOWVkOGE1NGJhMGMxYzY1NmI2NjUwYmIzMGFkYjFkNTdlY2QyMDc0NjM5NDk0MjMxYTJlOWUyZjk4NWVkODQyMmVlMDNjYjNmZDczOGM3MzVhMWI4MjgwNjA0NzQ2MGVkODRmNzQ2OGMzYzY0YjM1ZGIwNmJjNThkZTRiYmE0NjNlNjM4YTk0MTMzZGYxMDZhYzRmNDcwMzYxY2NkZTQ0MTU3Mjk5ZDIyNWIxNzc5ODg5MWJhZjU5MjE5ODZhMmJhZTMyNmRkYTBiODk2MTdjNjc3YmQxNDA4YmEyNzQ4YmFhNjdjOGEyYzVhOTY5YmMwMGNiNDBkYmY0OTBlMDdlMjJjOTEzYWZkZGU2MzA0YTA3ZmM5ZTYwODQ2OTkyNDU2YmZiMDY2M2EwOWRlZjY4ZGVmNjdhMTZkMjllOThjN2I1NTM1MTg0OGE4Y2Y5MjMxMGM3NDYzYzQ3NWYyNDljNmY3NTU3ZmQwZDc1NWNhODhmODc3ODQ3ZmUwNzY1NzU2YWMzNGEyM2Y3ODQwZDk1YzNkMjk0ZTY2M2JiMTUxOGI3NTkyN2M0MTA3NTdlMGY1YzA3YzVhN2ZiMjE1ZGM3MjA3NDMzZWJmNzkxZWRmY2VjOTBlOTMwZjhlM2JhOWRiYmI5ODU0MTNjMjIzYmU4Nzg3M2JkMzIzOTk3NTgxODA0ZDg4OTZkYTM4NmE2ZTkxMjAwNTBhMGVhZWQzMTI0MGFhMTdjN2I2Njk0YzMwY2JjYzNjNjk1NmE2ODIwZmM5YWIyMTg3NTUzMzk2M2RjM2IwZDg4MzU4MjcxMjc2YzYwNTY1Mjg5MTBkZDk4OWFlMGMzMzBkMTc5OGY3ZDhlN2QxMTg0Yjg0YTgxNDM0MzI1YjhjMzAyZWRmNjAxZGM1ZTZmODQ3ZmJhY2JkZWVmZjc4YzY2MjFkMWRhZmRjMjM5YjE4YjhjMWFmZGNiNGI5ZGFiZDVkM2E5MmE5MzJlYTE1OTk1NDZlNjI1Zjk2ZDZlYzZmYjFjY2NiNzZiNDc2YjMzMGFjNTkyNTljNjM0ZmFjOWIzZmE3ZGU3YWU3MDUzNzczYjViZWZhMDAxYjA0OTI5Zjc0YjcxMjQxZTFiMjU3Njk2ZDY1YTI2YzFiNGFjODZiN2IxZmJkNjk1N2ZiOWI5NTA4NGNlN2Q3MDA5MGY1NWQ0NDUzNDY5NDMwNWU5MTc2OWE4Mjk0MTMwNAorU0lHOiAyYTJmZDYwNTRlZjRlNzliNzIxOTFhMGNjYmQyYjE4YWViYWJlOGI5YTcxODYxZGVkOThiN2NkY2I2YTYyNTUzMjhiYzFhZWNiMGM5MzM1NzIxYTlhOTZlZTRiNWI0M2Y5MGQzMjJlY2Y4MzVmNzhiMjY0ZGFlNmUzODdiZmIwNAorCitUU1Q6IDYwMgorU0s6ICBiNTA2YzAxZDY5NzQ2ZWI0YmM2MzU4NzIwZTQzOGFkMzMwYzg4YjYwNWFhZDY1MmY0Nzk5NTczYWIwYTFhYWY5CitQSzogIDdhYzhiNjg4NjNiZDY5MTUxNTgzNzg5ZDg2NGE3MzU3ZTNhMDQ1ZmE4NjUyMmE5ZGFhNmUyNmZiNzllZDZkMjMKK01TRzogZjdmYzE4MDY2ZWQwNGIzMGU2MzNkOTg2NWRhMzIxNGJlY2E2MGJkNzk2MDE5Y2Q3ZWNjOTE4NjZmOWVmMjQ0NmMxZmFiMDZkODY1MWJlN2YxMDFhZWM3YmI4NGVlMjFlNzFhZDAyMDIxNWZjZmIzNmYyZDExZTQ1NzlhYzM5ZjhlMmIxMjkwZTM4OTZkNTIyYmNmNTEzYWFhMDY3NzFmODZlZTIyOGNmZjNhMjBhMWYxMGM1NjQzMzk1ODliYmE5NjA1MzQ0YzBhNmU2ODJhZDViYTQwZDEwNDE5NDFiYzQ2Zjk4YjlkMDljYTE3ZjhmMDQ0ZTk4M2I4YTQ5MDg5MzNkZjIyNjNjZjc4ODExYzI0YzhmNDgxNDM1NGY2ZjRjNjhiN2VlN2I3ODMwODI5M2JmNzhmZDBmZjEyMmYwOTVjMTRhNzNhNTk3OTcxNzJhZTA1Y2ZjZWMxOTU2M2ViMThkMmJjNTMwMGVkNGJmNmJkYzQ0M2VhOWI4YmMxY2JlZGU5NGNhYjkwNWVkYTVhNmE5MzE1OTdkZTQwMjE0NmZhYzljZjhjZDZhOGQxMDQ2NjlmOTEzZmE4MzQwMDFjYTRkMDkwZmI3OTQ5ZDMxMDlhNjNjMDU0OWIwM2YxNTFiNzExN2M0ZjQ2OTc0YmE1OWM2ODI5NmVkZmRkZTc2OTJlZTQzMmFjZWY3NjEwNjQ3ZTA5NTc4NjVlNjJjMWEwY2YwNTY1OTgyM2E1NTQ1MmRkNWU0NzFiMzFjNWE0OWFiMDViNWFhZmQ1YTBlNTMwZTg5NmI1OGNjNTIyZWNmMTllNTJlYzgyZmExNDdmOWUzODUxNzRjN2VjMzNkMWQ5Yjg2OTM0YWViNGY2YzU3MDBmN2Q1ZWIzM2ZmNzNjOWZjNmFhNDdkZjUxZTA5MjI5ZTZhZTg5NGU4NmM4MThiZWYwNjVmODI1OTcxYTRjYjkwYWRmZWZiMzFlYmQ5ZDFiNzk0MjJkYzk4NjhmOWY3NGU3YTMyY2Q0MDcxZWZiNjliMjcyMzNlNmU1YzYwZGVkY2Q1MzIxYzAzMGE0NmNkMjZmNTYwMmNhYzc0N2VlNGI1MjJkODU3YTMzMjFhMDNmNDAzYTYwMDYyNTA0MDYzNjFlNDg4MTVhZmJhNzdjZTA4OTAzNDQxODQ1YmE4NzIyNWQ4YjI0MDQ2NzQ1ZDQwNjU2NDVhMWI5ODQxMGNhYzQ4ZDEzN2NiYmI4YWIxZWJhNTBkYTljMjMxZTlhY2YzMjJhNmRiZWMwZWY0MTZhNDQ2YzNiNjEwZDkzNTY5ZmRmNDVhYTZjZGMxYjY0MGQ4ZjMwMWQ3ODY5M2IyODI2Y2M2ZWQ0Njg1NjhhZDlhMGY5NGFhOWI5ZmI5MmY3ZTc4ZDQ4NGZkZjVkOGQ0NWM5OTFlMjgwNzRkY2RkNjgwZDNiMWYxODllZjZiZGMzMjBlZTZlNjRkZDFmODBkOTI2NGQ4MzA0MmQyYzQzZDgzNTgxZWYwMzk0YjFiNWQxZjY5ZjNiYmJmMDRiN2M4MDhiYTM0YzE1ODBmMTZmNzY1MzdiNmE3ZWJkMGExOTA4YmU5NDk0ZDNmY2FhOTg3MWRiMTU3NTAKK1NJRzogMTdhMTlkMjY5MWI3YjA0NmQ3YjE5NjY5YWQ3MzE0MGRiOTJmMGM5NzhjN2Y2MWJjMzg2N2Q5MmNhOWQ0NzU4MGEwMzgwYjU5MDFiYWQ4MmFmNDVmNjc2Zjc0Mjg3MzAxOTgwZjcxODcxYTQyMjYxZGJlMDgwMjk1MDMzNmU2MGIKKworVFNUOiA2MDMKK1NLOiAgZTFjY2I4MGEyNjJmZjhhZjFlZGEwNzVjOTcyYzhlOTQxZTc3Y2VmNTdiZGIwYTgyNTcyYzI4MjAwYjQ5M2NhMworUEs6ICAzZDM3ZTJhNTAyN2VmZmRlZTA3ZmE1MTFlNDIzYjJiYzU2ZWRjZWEwNzViNDE2NDk3NjY3MjVjNmIzMGExMGY0CitNU0c6IGNmZGM1NDk3YjAyM2FmYTYyYTdmZTU5MmNhYTkyYjg3NWM3NzA1NzQ3ODM0MDAyZjc3ODRmZjE2NjE4OTM5ODgxNWQ0ZThhN2EwMDM4ZTFmZGFkZGRlYmE1MTA1NzMyN2FkMTk2MGU4NTljZWU1NjUyNmJiYjQxMjdiNmE1ZjkwZDA0ZDA4YjE1ZWVlNjZjOWNjZjg4YjRiN2QxZWU5ZDNiOGI4YzZmNDJkYjNjMzRlNTkwNDhhMTVjNjA0MWYxNDJjNDA3OTM2OGI3YjExZTI5OTcwMTE4Yjk5ZTU2NzBhZTMxZmNjZmRmZjEzOTkxNDJlZTA2YjJlM2UyYjNjOTcwN2RkNjQxMTk3ODZlMmZhYjQ3ZTBiYWQyY2M4YjU1OGQ5NjNiYjQ4YTQ5YWQyYzYzN2RkMzViMjVkYjU0YmM1YTI2MzAyMjJmYTJhY2VjZTljZTEyYWIwODEzMDc3Zjc2NTlmNTA3NDQyOWNhNmI0OTQzMzEwMzJhZTc5MmE1OTljNDI1ZWUyOTc0NTFkY2Y1ZWUxOTUyOTAzMTI3NDJlNjQ3YTc3OTViODRkY2M2NjRkZGFlMmExZmJmOGM0NTQ4YTM3ZmQ4MmQ4MTBlMjE0NWYwMWRmMWE2ZDNiY2M0MmE5MWExMDc2OGUwOTFmM2Q2OTMyOWE3YmFkNmMwNzJjYWM2ZDg5YWZhMzFjMDI5MDU2ZDZiNjIyMTIxNjVjZWJjZDQ5YWM2NzJlMzgzMDI2N2FmOWYyOGVhMzE5YmQwNDJmNmM1OWRlNDcwMWU1ODI0ODczNmM4ZDk3NmFjZjkzYjk5ZDJmNDY0N2E1NDdkMzkyNDQ3YTQ4ZGFjMTExODFlMTZiMTUwMWE5NGM5MzE2ZTVhNjdjOTkwYjM1ODEwYjRjZGEwNDczYTZhNGU1NzYxNDIxNTg2OGUyZTAwMmM2MDU4YjQyZTRlZWVjODQxMzlkYzE5ZWRmNWY4MGFlZWZmYTRmNWIwN2U4ZmQyMzEzOWVkZGEzMTg5OWViZTZmZWU3ODY0M2NlNjg2YjI5NjNhMzIwNzJiZDNiM2JiYTY4NDg1YTA1YzJjYzA0NTZjM2RhNTBjN2M4YzY1MWEzMDY2ZDEzYTM2NjBiZDQ3YWI2ZGZlYzQ5ZTAxNTU3YTY3NDI4OTZhYTRiYzYzNjNhNzk3ZGJhZDFhNDA5Y2Q0YTUwOTExZTcwZWEwMDdhZjhlOWIxYmI3ZTNhYjU2MjE1YTU3NWM5MGY3MzljMmQ0OGIzYjM0Njk0YjVhY2RmMDc5ODBhZTUyOGRlMDYyMWVkZmFjOGI4ZmE4NDk1NGQ1NmRiYjRkMDMwODJiOTg0ZjEzZTVkYmU5YzcxMTJmZjk3MTZmNTUwNTMwNjQ2NjJjZTBmYjgxZWEzNWY5OGZkMmNkNTExMzdhNDZmNjRlMGMxY2FmNDRlNTQwN2RjOTYxNzYwYjI1OTdmN2Y5MjAwNjE3ZDQ3MTM0MGNmMTUxNzZjM2RhODgwZmU0ZTBlOTNhNzJmYjk0OTI2ZmFlZDg2NWRmZGM3NzJlMTg1MjkyYzFlMzZiMTIxMTc4MWMzZTkzOGUzZDRmMjRlMjlhZjUxN2EzNzk2ODMKK1NJRzogZmRhMzRiNjUyYjc5NzQ2Zjg5N2UyMjJkMzdiNzdhYTI1MGQwMmM1MjdjNDgzM2RmODBlYTQxZDUyMTg5ZDUwNzAwZTEyOGI3OGVlODE0OWM5YjE5ZjNhYmY3NTVhY2VmNTM0OGY1ZmJhZjFjZWI0MWMwMzg5MDZhYzU5NDYwMDEKKworVFNUOiA2MDQKK1NLOiAgNGZjNTEyZWZkODZlM2E2M2IzOTVlYWZmMWJhMDExZTE1OTBmYjkzMjZhZDNmZmVkZTc4NzZkY2MzZTlmYWJkYworUEs6ICAyNmMyYTIyZjliZmFkOTA2MDZkYzYxM2ZmMTA3MDIxZmNkZGJlYzcyMzcwNjY2NjBiNDg4OTY0MzQ5ZTBjODI4CitNU0c6IDA3Y2QxZTliZmEzOGE3ZDg4NTM0NjVhOTNjNzdhYjRmMzBmYWY5MTRlNDhiYzQ3NjNiYTA3YmY5NmJhODA4YzFmNTlhZDRjZTliN2Q5MjFmYmJjNzc5NjU5ZDdjYTM2ZWRiN2RkM2FjZjdhMjk0NTJhODQ1YjQ5ZmI2NTQzYTNiNmM1YzFjMjkzYWZmNjE4NDg1YTEwZWVhNjBlZTk2NDlhYzlkNDgxZTY5NDk5NjdkMzkzOGI1MmZlMDljMzZiOWFkZTA3NTgxZGI0ZWI1NDJhOTdmNWFjOGFjNzNkM2VlYTE4NDcyMjU1Njc2MGNmNDgzMDkwNTY0NTUzMDYxYjkwYTBiNmQyZGZmNDcwN2JlNzYzOTM3YTEwNTk0YTgyYjc2NmJiMmNmNmRhYTUyZmE4ZDdiNDhmMzIxMjdjNDMxYWQ5YWFlZDNiZmRlYjk5YWQ0MjExOGExYjRkZTdiOTkyMTM0ZWQ5Y2RhZDBiNTI5NmQxOTdhNDg1ZTQ5M2VjZmVjYTM2NTNhZDJjZTBmOTI0MWFhYmMwOTZkN2M0YmE2MDNiYTdkZGQwN2E4YjI1N2ZlNTIzMjc2NDE3MDczYTY1ZmE0NDM0MjU2ZmQxZjIzOWVjMWRlNWRhMWEwYThjNWU2ODZlZTE0ZDlkZmE0MzhjNTNiOTljOTU0YWZhYjJmNzllNjBiNzEyNmYyY2I1OGEyNmUyOTBkYTFkY2NmYzMwMWYyMzk3NDhlZGU3YmNmMWJiN2NjYjQ3MjBlNjkyZjU3ZTUzZTZmNTkwNzUzOTllMTA4MGFjOGFhOWE2MWE1NjhjNGM1NjlkMzZlNzZhMmQ3MjcxZjJjNDRkZTRlMzYzYThjOTE2YTRlNDQ2YjAyN2I2NDM5MmU5MGNlYWJmNmI2MDcxYmM0N2ExMzc5YjZhYTYzNDQ3NjNiMmEwZTdmZjdjNGEyN2JmZjMxMDY3MjFjMjUzZTRjMWQ2N2MzN2ZhM2Q3YzFlY2QwNTViOGU5MjlkNTJhOGU0NWVkODlmYjE4MGY3NGI1NTJmZTA2ZjA2NmM3ZTQzMThjYTJmOTE1OTQ2ZTgzMjBkNTgwNjU2MTQ3MmZiOGZmN2ZhODA3MmQ4ZTZmZDFjZTYzY2Y4NzM4MmY3Yjk0MDQ1NDBjMWQ0MDZjNzBiMjI2ODUzNjc3MDkyNjQ1Y2U5OTY5MjJlNzM0NWRjMDdmYjczMzlmOWE1NGZmMDczNTJkZDJiOTkzMDYzYzJjODNkMTI4MWE0ZmQxNzhlNWE1ZjgwYTViMzNjMjI5ZDA1NzgzNjdkNDQxOTJlOWE0ZDIxZTk3MzRkM2JkYTA4M2I3MGY0NzEwM2ZkMTI1MTc3MDIxZGYzZTUzZDc5OTg2ZWZlYTJkYzA0ZjAyYzBhYzI3ODc4ODMxOWVmM2E5MTMyZTYyMzJlYTZkYjM5Y2E1ODcwODU1Zjk1OTJmZmY2YzIwOWFkMmYxYzI5ZGQxNjg1NTI4OTg5NzllY2ZmOGM4MTEyNzI0OGY4MzEwNTE1MzAwNjU2MTI5ZDliN2FjYmI3ZWQxZTQ2YmM5OGMwNGQxYTM1YjE4OTEzNzM4ZTlkZGU0ZDJiMDY1ZjQxODQyNDJkOAorU0lHOiA4MmM4MjRhN2QxMTM5ZWM3M2FlMWQwMjNhZGY2MjgxMTQ0MWU5NjgyODdmMWE1ODBiODU5Y2Q2NmNiMzNiNThlNDA5YmRlYjJhODc0YmY0YzIzNjEwYmQ0NGY2OTMxNDdmMmY3YzI5ZDQ0M2E5MDUwODRmM2VhYWZkOTMzMGUwNAorCitUU1Q6IDYwNQorU0s6ICAwYjdkZmFkMDViYTY2NTExMWUxNjgxYmRjMGJjOGJhOTczNzY3Y2I4NTg3NzAyMGEyZGJmOTE4MzI1NTcxZDlmCitQSzogIDk1MDVkOWU4NmRjZWY1NmM5ZGI3NmYyODYyYjkwZTFmMjc3MzIwMmYxNzUwNDA1ZTdlZTVhZWQwZmM1NGY4YjkKK01TRzogYzQzZmQzNGJiMTQyNGNjYTRlNGRmYmE3NWMyOGJlODAxODQ0NDQ2Y2EwODkwMjA4ODVjNzQ4MzgyNTQ3MTY0YTlkNGE3Zjk1NzBkM2QxNzFhZDY5ODFhYjUwZWVlZTA4YTRhNmM2NmQ3Njk5ZDIzZWRiZTFmYWFmNDQ2NjBjNzJmNDU1MmQ4N2QyNjVhY2U4NzkyODIzNDc0YjkwYTVkN2Y3NDAxZGViOTM3NzYyN2Y2MGIwMzZiMzZlMDQ0ZWI3NmJmMTMyZmRkZmNjMGVmNTcwNGE2MzNkODQ1ZTk2MmI0NzUxN2YwYmFhMzRkM2Q2ZTlhOGI5ZjgxNjhiY2RjODRjNmQyYjMwYzZmMzQzZTc1MzU3ZjdmMmMwMDM5YmQyNTRiMjQ0ZDM2Y2Q2MTY3NTU4MWZiODM0NTcwZWQ0MTEzYTc4ZTYwNmYxNDVhMTExOTkyYzJjNmI2MWM0MjY3NjI4ZWM4N2NkODhjMzZhM2M4NDcwNmU0NGFlOTZhOTZlMGM4NDgwMzE4NTQ2ZDZlYTZhNmRmMThhMmI0ZjE5ZjgzNjBjZmJjZTRlOWQxY2YxMDExZmZlYTU2MzNhNjY2MTlhYTRhNjVjZjY5YmU0NDU5NjE3OTQ1ZTQzNTlhOWQ0MzI2MGNhMWEyMGY0ZWQ3YzFhZTVmZmZmM2JkOTIyOTRlYTcwYWJiYWUwMzg1YjA5MzVjZDFjMGViNTE4MzAyOWM1ODVhMDI5NGI3OTk5ZTMyZWY3YTI5MGZjYjA5NTY3NWRjNGY2MDFlOGYyYzk2ZjM1YjczNDlhMzcwNTc1MDlmNGVjNzBjOWY1MGY2MDExZjFmNWU2YjA2MWMwOTFkMTFjMGVkNWRlYzhlY2U4ODFhYTM0MDUwOGY2OTZkOWU5Y2M3Mjk4ZTZiY2NkN2MyMTBlMmNlMGRlZDgzNTkyYTNjZmExM2U4MDc4ZmRiMzI1OGIzOWYxZDExY2RmZTA5NjcwYzFlNjBhMzkxMGE0ZmZmNTFjNmM3ZjdkNjYyNGY0YzkzZGY4ODg4YzUyNmY0ODRmOWIxM2UwYTdmNjI5NjQ3ODM5Nzg2ODRlMjkyNjc5ODAwZWQ1ZWIyODBlMjg3YzdlNjM5ZTg1ZmFhNTNmYmEyZmEyMDQ1Y2UyN2Q4ZmIzMDgzNjA3MjY1NTBkZjk3NTJkYjMwNWY4ZjA2NjQ3OTcwZDAxNDY5MTk5OWFmYTk3YjYxOTNmZmNjNmQ1MzJmNGZhNjllMTMzYTFkMTBmMzA0N2ZjMDAzODFmNDk5N2JiODRlNWI2Y2Q2MDI4YzYyMTMyY2ZjMDI0YmZlYjk4MDMwMWYyOTUxMmJiZDEwOWQwODlhY2UxODJjZjljMmZmYWIxYjE3ZWIwMGI2ZWI0NmFlMTk4ZGE5OTNmNWVmZTdjMWRjMjJkMjUwNDdjMWVlNTI0NjUxN2U3ZjU3NThmOTk2YWJkODNmMTNkYTIyYzEzZGQyMDVlZTE5MWI1NWFmZDQ4MzFlZjA3OGJiNmVhMDczYTYyNWJjOTdjODEyOTYxNjBiYmYyNTU5YjI3NWNjMzdjY2YwMWI5MWZkODdkNGQ5OWEzNjdhYTk5NzhkYWRkMDY4OWY4YTYKK1NJRzogNDE1YWRiYjJmMmI5ODQwNTc3ZmQxODQxZjlhYWUyNTJhZmU4ZjVhNzIyMzYwMTdkNTBkYjIyZDIyOGNkZWU5ZjViM2U4ZmU5YTE3YTRkNGU5OGI3MzQxMzgxZThkODYyNWNkY2VhOTU2ZDI1M2I3NGUwMmRhY2I4NDkyMGEwMDkKKworVFNUOiA2MDYKK1NLOiAgNzgxODhkZjhjNzU0Nzg1NjIxZTI3YWU1OGUxMDBkNTA4MGUxNmUwYTE1ZTI3NzA1MWY5NWYwODA5MDBlYzBkMworUEs6ICBhMWJkZWVlOThiMDc1N2JhOWMyZDg0MDliODc0MjRlNjRlNDJmOTkzMmFjZmE5YmM3MWZiM2Y4Y2EwZTExZDUyCitNU0c6IGNmNzBjY2E1N2ZlYjFiZWVmZTk4NWFkNWFmOWQ0MzQ4ZDNhNDZhNjNkZTEwNzUzODFmYjM2MzlhMDQ0ZmQ2ZTYwOTFmNWRiOWM5NGQzOWJlMGYxM2FkZTZkOWEwNzRlNjdiYTcwNmIzYTg4MDYyOTVmNmI2NTQ4NjU3MjhjNThjYTZlOTQxOWQ1ZDA0M2YyMTEwODE0YmJmMzZmYzQwNzBlNGQ5NDU0OTY1YzI1MTIwMmNhMzk1ZWZlM2ZkYmQ1NDRmZWIxODdlMzRjYTNjODA3OTUxNzk1NTJmY2U5YWE4MDQ0MzBlNWI2Yzg2ODUzNDFlOTFkNTg4OWZiZjNmOTgxOTA0NjIwZmZlNzAxM2Y1M2I5MzllMTc0NDNkNjE0ZTdlNmJiNTdhZDY3NGYzYjRiMDAxNjMwNTI2Y2Y3MzAyYTdkMGFmZTdkYzI0ZDZkYWRlZjZmZWJhM2Y5Njk3M2FhNWI4ZDYyNzUyNjJlNDMwYTgyZjY3ODY5Njk3MWE4YjYwZTM4ZDNiMmJjYzE3MGQ1YmMyMDMwMmEzOWM1OTZkMjdmZWUzOWU1ZGE1YjEwZWE5ZjM4MjI5OWUxOTgxOTcxN2E3MThkMzdkMTU1ZjEzOTIzMTgyYjViN2ExYzU0Y2ExMDliMjJjYThlOGIyNmNhNWNhM2YzYjkwNjIyMTk0NjFiYWNlOTdlODkwYzk0ZTQxY2EzZDg0NTg3ZmJkZjZlMjQwYzM1Y2NhYjcxZDU4NDc3ZDI4MTY4ZTkzMzcyNjg2ZDQyYWFkMzI0YTNmMTZhZmUwZTliODllZTIwZTQ4NWZlNmM4NjRiNTAxM2JhODgzOTllZWFhMTU5ODM1YThiMmJiMmYyNWY1NzljYTNiYWU2NzVjNjNkYTFiNTBkOTlkNGVkOTc4NjkyZTU2MDAyMzNmMzhhYjdlN2E1YWUwZmJmOGMwYjY5Y2MzOGJkMzBlYWJkOTc3ZWZhMDVlZTJjODM1MTQzMDJiZDQwYzRiZGNlN2E0MTEwYWZiYjY1NzljNjIwZTk3ZjhjZjJlOWJhYjJkY2M3YzMzZjE5NmU1N2ZlNzYxYTA1MDEyMjg5NGI3YTc1YTkyOTUzMTk5NmRkYWFkNzhkZTFkNGQ5MjRjZDkzYTYxZGYyMjc3NzZiYzFjMzlmYmI4ZGUxYzQ0Mzg4NjhiNmEzYTJjZDk0YzA3YjI5ZTNmNmIyM2NjN2UwYjYzNjg5MDA5ZDlkMGJhZTE2MDZiYWZjN2E4MDhmMmQyZmEyNTYyYjhkYzA5Mzg0MmMwMWZkYjg0MGRhNDg2MGFjZWQzZmM1MjVjYTMzNGVkY2Y2NTk0OGJjNDE2Zjk4YzQ1MGYwMDEyYTYxMDdkZDdmOGVkZTQwZTFjNDhjOWU4YTU2NWE4MTBiOWNmZDIwMzU2ZGIxOWYxZGJkZTU5ODkyMTMzMmUwZDgxM2YwY2I4NzY4NDM3MDM4ODc3MmZmM2NiZmNiZmEyOTljMTk4Yzk3YmZiOTYxNzc2OGEwNTE2MWY0MTY5ZmY1ZGU1ZDlmNDAwNjIwOTBmYjg4Mjk4NGQ5ZDVjN2FhNzhlZGRjYjk2MzRlNDY2Yjg4NTNkNTEyYjRhNTQ2ZDc0MjMKK1NJRzogYjk0MTE0ZWRhNDZjY2ZjMjJhNDQ3MWE2NGQ3OTA4OTJlNTljNWQ1MDU2MThlYjBlNzAxMzkyYzcwOTYxM2UyZDUwM2E1YzJiNjY2MDFlNjM2YTNjMWM3ZDQ5YjFhYzc5OGQ5MDg5YjBmOWNjZDA1NzliYjkwNjM0ZDBiZDc1MGUKKworVFNUOiA2MDcKK1NLOiAgNzNjYjAyYjBiZjI2YTAxNWRhMWRjMzAxZmMxMjVkN2U2YzMwYjYzYzllNmVlZTllMDY1ZDRlODQ3MTMyYzMyNQorUEs6ICBhYzllM2RkMmNlYjliMjNlNzQ4YzA0YmE3NTc3ZmVkZjdjZWFiOWVkODdkYzQzMGI1ZmUyMmVhYzUwOTUwZTBkCitNU0c6IDBhMmI2MWJhMzVlOTZlNTgxOWI4OGJmZGIyOGI3Y2UwMmU2NGFlOWNmNTcyYjIxZjEzNTUyYzBkYjEwZjM5NjBkNDRiYTM0NzJmNDNhYmM0ZTYyOTViZGY3OTBiZDkzM2JhMzk3NWZkNDQ2NWZhM2UyZmUyZGIwMmI2Mzc3NzUyMjIzZGVjOThmY2IyNDA0ZjNhYmE0MzI2NWE2ZmE3OTc2YjZjNmNiNjg2OGI4ODFiZDZmM2QyNWNkOWQ2ZjcwZTUxMmY4MDg5YzhlZjI2ZmQ1ODI0NTA1Mzc3OWU1OWM0NzI1YWVmYTI2NDY3YzlmNTAwZTE3ZjNlMTU3M2YxYTg1NWU5YjhiMjE5MjVlYTA1MjdmM2NlOGQ4OGZiNTRhNDdhYmVlZDE0ZjM5OWNjMmQ5ZjFmZTU0NjY1ZmFlMGE4ZjBjNjg4NzJhNjAwMDQ2ZDFkYzM2Mzk3ZDMxMGNlMzkzZmNlYWZlODdjMTdlYmUxMjJmZGI1NDNhZWE3MTA4NWJhZWM5ODI3M2Y0MWFjOTY2OThjMTUwY2Y5MTFkMGU1ZGUyMzkyZDg0ODQxZDAxMjc2YWVmYmZlOTk5NWUxMGE2ZDQ2ZWZkYzI2NzhkNDU2YzlmMzZiMmUxMDExNGQxMTg3ZTdhY2E3MzkwMzdlYTUxZjg1ZmQ2MmEyOTQyOWJhNTI5Y2RkOGFkOTEzNDc0OTc0ODdlZDdlODcwOWQ0Nzc2ZWY2ODY3MDc5MmQwNjE1YmM5NmRhNTE3OGQ2MDZkYjYzZTRlNWNiMTcyYWNmYmMxY2JlMjAyNjkzNTBmMWI2MDVmMzVkY2Q0NzkxMzViZDMwZmI0YjVhMzkxNzZjZmY3NDRkZGJiMzA2YzllN2I0MTY3ZGUwMzc5YTYxNjZiZTVhYWE3NGQ3MTU3ZmFjOTU3ZDg4ZGM1NzU5N2NmZWYyM2ViNTEwOGIzY2U1M2ZjNjMyZGFkMWI5NzJhMjlkYTVkZTMyZDIwZDhlY2VkZTY3ZmYwMGRhNGEwOGEwY2MxYTk4YmVlN2E5NGUzY2IzMmZlZTk0YWUyNWE0MTM1NDQ3MDJjMzdiM2UxNzc4YTA3MGNkZDQ4NDBiZDM5ZjVmNDU3OTUxOTJhODY3ODYzODc2ZWQwZDEzMGQ0NmUyOTEzOTM1MDgyODA5ZjdlMTVhNDk2NzEwZjI1NWQ3ODNkYTNkMDE2YTY1NGMxNWZmNWRmOTA3YTNjY2FmMzdjZmUxMWM4YzNkNDk2NTA3ZDY3NjBjMDUzODIwZjBmNTk0YzNkMDFjYTI2OTE3OGFjYTUyNWFiMjgyMWVmNTVmOTJkODVmZTY4NWVhMzQ0NzJlZDEzOTgxNzEwNjRkNzRhNDIyZWM5MWQxYTY3MDYxOGZjOWYzMjQyNGJjYjExYTc3ZjZmYjRlMmZlZmQyYzRlOGE3M2M0NTI4ODZlOTMxNjY0ZDFhODNiZDkyNzMyOWMwNGQyNTBiODM1MjFkN2RjMTNjOTFjZWUxZWMwNTBlMTFkNDJhNGIwYzhjMDY5YjYxYzQ0MjJkM2E0OWMwN2VmZjI5MDViN2JjN2Y0YTViNDNlNmIwZDYxZGZiNTBlNGVlYTJlOTBkMjk4YTc4MWQwNQorU0lHOiAxYTVkZDRjODkxYzhlMTMyNTcwMTg3YzIzYjlhMWU0YjI2ZjA1NDYwZTg3NTY3MzgxOTM5NmRmNTYxYzhhZjBlNDgzMzNiNjJjNzc3MjlkNDlmYzQwZTE3NGE3ZjNjMjFmODVlZjRkMzM5Y2ViODBiZDJlMDM3ZDgwM2FmNTYwZQorCitUU1Q6IDYwOAorU0s6ICBkYjA1NjA2MzU2YmFjZjIzYWZmNmNkZGQ0MmIyYzY5NDM1MmI1YTBmZWM1NjBhZmY1NGQ5YmQ5NzEwZWZlMDZhCitQSzogIDMyYTVjN2NjNDkwOTc4NmI0OGE1M2YzMTA5M2Y1NDlhOWYxNzMwY2E2NjkwMzgzZmRiNWYxNGMyNjY2ZTMxMzIKK01TRzogMWJjOWMyODMzZjM3Y2RmMTM1NmZhZDE2Njc2ODY0MjcxNzcwMWIzOGEwYWIwYzJmNTgxYTI2ZDIyMmQ2NWNjZWU0YmYwZjZkZmU2NGQzM2JjMDIzOWY3MWQ0YjgyNjQ0YjAxNjI1YTFhMzVmZTc5ODY3NjIzOWUwY2E3NzllZjIzMTM4ZWViZTNiZDE5ZGUyZDhmN2MxNWI0ZDk2ZjEzZTUxYmM2MzNiZWE1ZDYxMjI1YmNhMWQ2MzM5YmE1M2U4MWY3ZDhkMjRjNWQ2MGYwNGNlOGM3MjY3NjFkMjY0NTg0ZjFjN2U1YjViNjk5MjQ1NmMxYzc2ODkyZDYzNTIxMTFlM2I5MjZmZTAyNWMwMDA5ZGI2N2NlMGRkYzdmNzY0ZTBjOWFkYjA0ODFiYzI3OTU0ODRkOTYzNzNhOTYyYTdiNzRhNTU5NmY1MjdhNzM0NzY0OThjNzgyM2RmZmE2Yzg1NDNiMDc5NzFiNWFhMjcxYzEyMjU1ZTA5MThkZDczZjUwYzMwYzlhODVhYzdjMjk5M2RkNjU1ZGE1OTQzMTI2M2Y1OTE0YmU3MDYzNzRiZTljMDc1ODVjMjg3MTMyOGI0ZGJjMzk0MDFjOTU3MDczODdlNmUwNjlkNDRiOWQ4ZmIwNThmMjJlMzE1YWEwZDViNGYxMTY4ZmMxMDc5NjJiMDY0ZjdkODQ1YWY4ZTIxMzE5NTFkMWNkNjZkYzg0ZGJhNDZkMjAwYWY0ZjRjNWY1MTIyMWJjOWIyMTk2OTQyZjhiNDBlN2RkYmM5YWViM2Q5YWZjMDcxMjU5NTEzMTM1YTAxNmYyODY2MDk5ZmExMGY0YzNiNzM1MDBiZDU1YzQ3N2IyNDE1ZTEwYTI3OWJhMTEwZDI5NGYzZGQxODQyMTc3ZDBiNGJmYjE3MzRkZDBjY2I3ZTM5NGI0M2QxNmYwYjc1NDgzNjIyODBmNDM0NzY0ZGE1N2YxOWVkM2UzMDJlNTM3MGZiYTQ5NjY0YzIzMDA1NzQzM2NjNjQ3ZWIyN2NkMmM3YzE4YzdkNjY5MDZmMDg4MjQ2YzIyZjdmNzkwMzk5ZGViNGM1ZmJiOTA2MTgxNzY5YmVmNWFmYmU4YWQxZjVkZTU1YmU1ODhmNTJmNjljNTRkNGVmNWE5NjlhMGQ5OTVjMjc0MDdiMjNlZGQ5MjQzZDI0OTlmZGYyOTQ3M2IxOTU1Yzg0YjNmN2NiZGNkODFiNzY1NmVjMGJlOWUwZmRiMzM4MTM1Njk2MGZkMGNhNzBlN2VhNzRiNjQ2ZmNkMzEzOTQ4ZTZkZGI0NzYwOTQ3NmZiNmZhNDg0MmZhNzg4YTBkNTdiZTNiMGE2Y2ExODE5ZjcxNjE0NzYwMDQzZWM0OTA0ODgxOTM5OTY4YTQzYjVkMTkyOGY4NGE1OTE5MDkzYmMzODQxNTg4MTcxYTljZDM5MGY4ZmNkNjE1MzhiNTRlNmVmOTk3NzA1NzNlMTk4NmQxNTBmYTk2YjdhMDdlMWQxOTRhZjFjMGI0MDU1MDBhY2IzZDEwZTNiZTY0N2M4OTg2MjAwNmZhNzg1ODNlNzYxNjY4NDI5MjAxNjBlYjU3ZjBiMmE2ZWRmMTkzYzQ0YzVlZWFjZjQKK1NJRzogNTMwOTliNzY2YWRmMjk0NGI2ODIxMzc0ODQyYzI1ZDZlNjdiMGNjZGU5YzYzN2ZlY2IxMWI4YjhiMDcyMDNlMzA3NTczMjgwNWY0ZjE0YWVhZTczYmQ2MmUzMDhiNTg4N2Q2ODllMjljZDg5YjIzYTQ3Njk0MzExMDcxN2IxMDAKKworVFNUOiA2MDkKK1NLOiAgMWQxMzliMWFkMGMzYWYxZDViOGJlMzFhNGVjYjg3OGVjNjY3NzM2ZjdkNGZhODM2M2E5ODA5YjZkMWRhYmZlMworUEs6ICAyNDI4Y2YxZGViMjBmYmFkMWZkYzY2NWQ4MjViNjE0MTIyZGYxMDFmYmUxNDczYTc5OTk2YmFmNjk2NzQzNGI4CitNU0c6IDhkZjJkMmRmOWI5ODRkYTg0NDMzNDg2YTgxM2M5OGM1OTczYTY5NmMxMTYyNDYxMGIyM2FhNDM4MDgzNDY0ZjY1YTc2Nzk2NjE1YjcyOGMyZWQ0ZTYwNzE1ODU1YWZjMjM5NDUwZDViYzA5MTFmZjJhODUyMzAyMDVjNmYxMzQ5YmE1YmQ4N2VhNmY3MjBkYjZiYTcwYjc3NDIxNzg4ZTBjNjU0YWViYzIzMDc0YzVmNDFkMjI5MDc3MjE0MGQ5ODFhNmJjNGZlNzA5YTI2OGU2NDE3MmEwMjZiMjcwMTE4YjRkYjUxYWI2YTEzYzk5YjA2MzE4NmQ4ZDViMzM4ZTk3N2VkZGM2YmI1ZmQ3ZGQ1N2Q5ODQ1YTNjM2ZlNzYxNzdkNTczOGRjYTE2YThmOTEwMjg1NzUwMDE3NGYyM2ZmNGMzYmYzYzg1MzZmMTE1ODBlZjg1MTRhNDA5ZjViYmM5YzAyOTZmMTJlMzQ3OGQ0MDg3Zjk1ZWZhYTZjNjM2MDcxZDIxMTU3YmYxMTc3NGJiZmU3NjkzMzA2Y2E3MjEzZGE0NzEzZWJhYWFiMzU1NGVkZjA4MDExYTVmZjczZGExMjAzNzVhZWQxOTYyODY3MGYyOGFiMjRiNmY1ZDVhMWQ1NzA0ODBmNjVkM2MxNTJiZmYxYjQ3YmYwNjY2OTI5Y2I3Yzk5ZDkwMzNmYWFlODUzNGZjMzVkYTczMGI4MTFlYmNjMjVhZTEwYTE5NWFhYjEyYzMyNmFhNDViZjgwNWM2MmRkNGNkNWY4Njg2MjNjMDRhOGUxYzZhYTcyZjFlYTQ0MDBjNjA4NjdkZmY2MjJmMzE2NDM0ZjFlYzg5NTAzYzZmOWY2NWMxMzdiNDk0NGNiY2IzNWYwODZjNzRjY2VhZmEyMjQyYWNjYTZmZmU2MTFjNGI1NTg3ZjViNzVmZmFkMzQ5ZjAwYmY5NmU0YTU4MGE4NzViOTI2NTQwNjliNjJlZWFjMGJmNzhlNWFlZGQ3MTg2OWVlMDViOWE5NGUxYzk4ZTM1YTk3ODAwYTRhMjEyMjBiMDM5Y2Q1ZWJiYjc1NmQ0MGI0MDQyZTJjODRhMmFlOTgxODI1MTFkYWU4ZWQzYjg5ZjRmYTAwZmI4ZWQ5NDYzMTY0NTk3MTAwNTJhZDRjMDJmNjNkZjA1ZDNiYjFhY2UzMzY3MjE1MWJkZjVkYWI0NmM3YjU4M2RiMzczODk5ZDRmMDM1YjZjMTExMjU4YjRlNWE5ZTcwN2ExMWQyMTVlNDRlNjhlZjFhNmYwNTM4MDlhYTUxYmQ5MDJlMTNjYTk5YzFiMWNlY2M4M2I5YzIzNWM3MTBlNzk3ZDJiMWEyNDliMmVhMDc5YjVjMTY3NGVkNzE2OWYxYjZlNjdmMWFjNzdmODZiNzQzMjk4OTY5MzM1YTc3MjQ0MGY3ZmJmYTcyNTEzNTAwZDg0MTY2MTE0YThmZDU0MTM5NDY0ZDQyYjk5NTUzMGQzMjM3MGI2OWJmZmM3NTg5ZDZkY2M5N2UwYmYxNzg1NmNjM2JmNDE2NGRiZWNjYzhhODgxZDQxNGQ2YTYyMDI5Mjc2YzVmODEzN2MwYjNjNjhiYzhmNGJkNGU3Y2ZmNjVlZjIKK1NJRzogZGQ2NDVlNTFlZGFiMDRkYjMxZTMzMTcyY2YyN2FjZWVlZGNjMDQ2M2E5NjM5MTRhMGVhYzhlZmQ1YTM0MzQxZjZiYmM1MmUwNDJiYWFmM2I0MGM4OWE1N2VmYjY0NTc0ZTY5Njc3ZmNlOTU1MjQ2YzFmYzBmMjY5ZWY4MTkwMDAKKworVFNUOiA2MTAKK1NLOiAgNGQyMmUzMzFlMGNmNmY2YTI3MmRiNGQyMDY4N2ZmYjA1OWYxMjI1ZDgxZTQxMTIzYjhjODliMDc0ZGU3NmEzYgorUEs6ICBiMWU0Y2ZhZWFkZDY3YjEyZDdiOWRiZmMwZjg4ZWRkMDM3M2Y5YTg4YzdmYTMzZmI3ZjJiMWU0NzVlY2NiNjFiCitNU0c6IDljOGUzZjViNGQ3MDQwMzBlMWJhNzFmMDJlZmM0Yjg3ZDZmZmZiNTViYzNkOGQwMzgxOGY5MTU2MjRmY2Y3MDFjNTRhZGZhZmEyYjY5NGI4Nzc1MWNiOWY2OTkxOGMwZjA1MGY0YzEwNWQ1Y2NiNDAxMDBiMjhkZmQ0ZjQxMWQ1OTFjMTIwMTkxNzZhYzIwMTZiZmJmZGYwZGRmMTFkYjhhN2UzOWFhN2I5ZTIxNmY2NjdjMGExNWZiOTc3ZWFhOWJhM2JjNDU1Y2M1ODk0NWYzZTk0NGI4YWMyZmJmNGQyNGZlN2UxZTYxOWNkYmVlZTNlNWUxMmE5YTUyN2QyOGY1ZmQ3Y2ZkOTIyMGYxMzA4ZDg5N2I2ZDQzMTRhNWEwMTg3ODY0YTJkNjIxY2YxYjI4NDQyNjEyNDdiZjUyMGJhZmE5YmYyMjZlMTE1NjgxZWNkNzc0Mjc5ODBjZDEyYjA4YzM1OWNlY2QxZGUzZjU1NDVmODA3ZjgxZWQ3NjMwMmZmZDY0NzdmODliOTU4Y2RmMTI5NTRjZjcwYzE0MjUzMjk5MzgzMTY0N2VhY2FiMGI0ODA3YmZkYWRiNDM4OWQ3ZGZmMmM0ZWYwZWY1YTVjNjFkMGRmNzYyZTJlOTA4MGE3MTgxY2VjZDA2YTUzMTk5ZjBkZmVmNzAyNjI3YWRlY2Y1ZmNkOWIzZTY4YzcyMzMzMTYxNzI3Zjg3MWM3ZDFjNDMwNTFmZjFjOTIxZmQ1M2I2NDIyMzhiOTc4ODBkNjRlMjVmYWM1MTJhYjk1NGJlZGJjYTU0MGY1YjIwMDkxZWM3MmU2N2Y4ODc3MGFmYzMyZjIxMjVjYTBkYTRmZTg3YjU2YWFjOTE3N2YxZjRmNjdjODUxNzI1YzVlOGFmZTY0ZjY2NDc5OTgzM2ZkNzkxMDBiNzdlYWQyNTgzODg3OWZmZjQ3NDdhYTBkNTY3MmVjMGE5NDM0ODEzNGJkYmQ0YmIzOWIwYzY3YTBjZDMwNjAyZWRmNGZlYzZmN2FmMGNjMmJkYWUxMjZjZWE4NDJkZmFhNDM5MWRjNWRkZWE5MzhlMTc5MjE2ODI0MGMyZDhiMjUzNTJmOWYzYTY0NDIzNWNlMzZmZWZlYjY5OTJhZDg4ZTI4N2FkMmQ4NWJkODUwMzk2ZmMyZTUxN2ExNTIwOWY1OTIwYWM5OGM1MzJiMWY0ZDg2OWJlYjA4YmIwM2NmN2M5MWFmM2ZmY2VkNjhkNWZiZmVmODZmZjk0ZWNlNmUyZWFkMzQ4NGNlMDgwZGIxN2JiZTQwZjFkYjQzMmVjMTY1MGVkMjRmZGQyNTBmMzM0NTc0NWM5YjdiOTE5OGM5MTA5YTM3MjYxZmM1ZWNiYmIxMmY4M2EwZTEyMjBhMTg2N2Q0NWZkZGZlYTgxZGNmNzVmNGVjN2ZkYjUyNTBlNTc3NTRkNmRlYTI3MGI2MjhhNzk1MzBlYzI4YjYxOWJjYTk0OTNlNjMwNWNmYzQ0MTRjMWMxZGUzMzg5ZTg5MDE5N2M4NWYyODQwNGYzZmE5NmExZTJmZDkyMDZiNDcyZThhMGEwZDMyYWY1NTYwNmJiMDgzZjc2YTE5YjhlYWUzNDc5YWU1MWQ5OGE5OWE2MgorU0lHOiBjMzY2YjgwMmY2ODJmY2Q3MDUyNTI2NGZiMWEzY2JjZDBlZTM1ZWNmZjU5NzdjMmE1NTRkYTkzOTIyOWYxNzgxOWE5NjFlYTc0YzNkN2E3ODgxYWM1YzFmYTE2YmY5ODRkOTQ1NmExMzg4ZDM0NjNjNDQ5NDQyOWIxZGM0NTQwMgorCitUU1Q6IDYxMQorU0s6ICBhNTIyOGZmOWJiYjZmMjMyMzI3ZWI4ZDg3OWQ3ZjhiMjc3Y2E3MmJhZTFmOWE5ZDBlMjYwZGQ5MDU3MWRiNGY5CitQSzogIGQ4MmY2YTY5NzRmNTFjODgwOGQ5ZDYxN2Y0Y2VjMmQ4YTM3ZWIxMWExNDIzN2M5YWI5Y2YxMWViYzgwZmY2YzAKK01TRzogMWRmN2E2ODM1ZTMzMTA5ODNlZTdlYzczMTEyNWY1YjVjZjExN2FmMGUzNmIzNjg1YmY1NGFjZTFjNDhjNDYzMDA1NjBhNDVlOWY5YmRkOTZhMGJjNGQxNGU4OWQ0YjU3MjFhMmNhZmY2NjE4YjE4MmVkYjEyMDJmM2QwYzVkMTE4ZDA5YjYxODEyYzAxMGU4YjE5NjM0NDU0MWNkZWVmZTVmZDFmOTYxYzVkZDc1NDU5NTU1YWI3MmVmMmFhN2E3NTlhNGYzYWQzY2FlZDQ0ZjRjOWE4ZWY5NWI3NmVkOWE5OWI1NWRkOGEyNjBiYTA4MDEwZDI5ZmY4MTlmMmFmMzUxM2MxYTY0MGQ2Y2NkZGU0OTk5MjA1ZjlmY2E4ODU3MTE1ZDhiNWRiOWY3MGE2MmU1ZWVhMGQ1YWYwNjVkZTE1M2YyZWRlZGVlYzYzZTE1YzhlMDlhOTI1ODIxODJhYzA3ZDgxY2E2M2NhNGFhNTk3YTIyMjBlNzA0ODE5NTdkNDE1MjY0ZTI1OGJjMjYzZTFjYzM2ZTUzNDc4YWFjNWNhMDE2OTRjY2IwOWI0ZmZkODQ3Mzk5NzJjN2RjY2YzZGVmZWFmZGVkZTE2MmFiNmM1OGExZGYyNzM3MWUzZjU0OTMwNjdmYzllMjA2N2U1Nzk2MjNjMDA5ZmM4MjVlZWYwZTAxMGZkMWNjZjJhOGQzZmJiYjMxNTZmOWRmZGUwYzdjYmJhZjg0MzMwOTg1MTc0OTFiNzhkYjk2OTg2MTRlYTQwZTBiMWU2YTFlMzZiOTAwNDUzYTE2ZWEyNzZmMzQ0MmJiZDI3YTdlY2I5ODE1MTFmNWM5MjA5ZWIwOTZlMjg1ODhiNjViOTZiNTAxODhjMDM4MWZmNzEyYmMwNmIyYzY1NWNjYTA3NTFjMDk1ZDgwMTYyNTE1ODU4NTFlNjc3NDM0ZGMzZWZkMDg3YTEyNjgwZmMyMmU1YjgzMTBhMTBlMzJjYWFjOWI3MWM4NzZlZWQzMWVmMDlmN2ZhMDEyYmEwOGRmZDJhZDY4YzFlMTQ3ZjUwNTk4ZTU1MDQ2N2VmOTlmMjk1YTMxOGZhYTUwN2ViZTc3NmNlNTVjNGRhMTY0MzIzYzMwYTVlNzJkYmUwMjdjM2NjZjk2YzcwMTk3YTZmYjFiNzRhZjEzM2E4YmUyYjAzYzFiOTlmZDI1YjNjZWQ1MWZlMzg4MjAyMWEzYWZkOTIyOWY2NDFiYzZjYWQ0ZTFkM2NiNmVkOWI2YjY4YTI1ZjFlMTM5NzI4OTk4MWY3ODkyNGJmZjI0YzhkZWU2YTE4YTA0MjFmYTMyYWUzYWI2MGEwZDkzM2E2YWY0ZmY3MDQ4NzRiMDliMDczOWUyZjI5ZDhmMjUyZDc5MDU1Zjg5ZDNiZmYxMGEyMmM1NGFjM2Q4YWZlZWNlODE4MzUzYTZhYmUyYjdmYjhlOGUwZGE1YjdhYzFjZmM5ODVkZjk3NTgwYjE4MjExYTRlM2VkZmY5NWFmZGRhMDYxNTQ3ZDNhZTA0MDZkMzI4NmNkMzA1YmRmZDJjM2FiZjhmNzRhZjlhMDM0MjBlNWIwM2Y4MjVlOWM1MzkwN2UxM2E1ODEyMTc0YmU0Mjg5ODY0NTE0OWQKK1NJRzogOTc2NTBmYWUzZjU5Y2E3NjQ3N2YyNTQ3MTY3NzQ5YzU4MzAyNDg4ODMyMjVlMzU0ZmY0NmM3ZTM4MTk2NTIyMGQ5YmVmMmMyMDU3YzdkMTk5MGYwOGJjYTRjZmRlODc3ZmZmMmI0YWE4MTNkOWM0Yjg0ZmI3OWVjZWQ4MWVmMDUKKworVFNUOiA2MTIKK1NLOiAgYzA0ZGMwOWYxMTlkNjcwZmIxZWFlMDEzNmZjYzA2MDg1ZjI5MGY0YWQxYWExZmZjOWMxNjBlYTVjZjQ3ZjA5ZAorUEs6ICBmZjQ5OGNlOGM5ZGI3ODY3ZjZkMDI3NjQ1MmE0NjY3MjQ4ODdlNjE3MmY2NjgxNjcxYjhhZTAzNWY1ODY1ZWEzCitNU0c6IDFlNDIyOTdmOGFlZWYyOWE4NDJlMGUyMWY1ZGJhZTA2OGUyYzlkZGFhNmZkMzQ4ZTQ4ODgxZjBkNDJjNTBiZjBlY2YxNzA2Yjk0YTVkMTk4MTdjYTAyZDgzZTlhYjJmOTlkOGJmYWFhNWM4NWFkMzlhMTUwYjIyNWFkM2VhZmEwNjc4MTViNzQ2NzJmZTAyNmMzY2NjNjc3MjU1NDQwYjY4NGE3NmUxMjhjYTJjY2M0MjlmMTUyNTc3ZDI1YjY5ZjQwZGI1ODJkNDk0NzlhZmFlNjgwNzEyZGMwZmQxZmUxNDE4ODM5Njg3Y2E2MGNkZGU5NzQxNDA0NjJmOTYxNDgyOTVkZjFjZTQzYTk3NzM1MWM3N2YyZjBiMDlhNmIyNmQ2ZmU5NjVmY2VhZTE3ZDdiODYyMDM3MTQwMjQyODU0NGZkZjkxNjkwYjQ0ZTlhZmMyZTkwODhjODNjYTQ4ZGM4NTc2ZjYyODcyNDc5OGRjOTAzMjMxNzRjNDQ5OTY1OTY1MDJhMzVkZjhiOTgyYzU3MGE2Y2I1MWI5YTE5N2Q0MzFhZjMzZjAyYjgwMDExNTY3ZmU1MGNmNDVhYzExMWIzZDU1NmY4YzhjZTVhZThjOTk3MmYyYTk5MzZiMWEwMTJiOWMzMzllMzBjOTczMTJiNjVlYTU5YzEwMGY3OWQ3OTViOGEyNGIzMWEwYTk3ZGMyNWNjZWQ2YjhmZjVhZTE0NTMzOWEwNDhjYTEyYTU3OTAxN2ZhZThkNWNiY2I2MWQ1MmUzMTRkZDdjMmU3MjAxMGM0NzIxN2IxZDA2ODc4YmYyODE4Y2ExODhlOGUzMDc5NjBjMTY4OWQ3ZGZjMDIwMjk3M2NkMjlmMmY3YmE3NDM0NjllNjg1ZTBlNzA0YjA0YmFjYTRmYWI1NDg4NDQ4YTkyMmVhYmY0MGJlNTgxYzE5OTRkNzRkMTNhMzY2Y2U4NTdmYjQwYTZlMDVkYTg1NTM2OTQxNzJjYzNmZDI4MDYyZjUzODI1MGFhOGMxMWY2ODEzOWU3OWNkMTE5MWJhMzMxNGI1Y2VhMDg2NDQzN2VkMmU0YjZmYmQ3NWI5ZGVkMDk4N2I0MWMyMDJhNThlYzAyNTRkOWQzNzFhNzk1ZjFkYmVjZGRhYzExMmJlOGQwOWUyZDdiOWNhNTc1MmY0MDZjZmZiOTExY2EzNjQ1MGJjMDVmMWVjMWNhM2NhOGQzNTEyNGQxMjg2YzU1ZjEwZjYxMzM0ZTQ2ZWNlNDE4M2I5MjIxOWE5ZGNkMGU1ZTc4ZWYyYTc2Y2ZlOWE5YWIzNzk1ZGZkY2I0NGY2M2Q0NWY1ZjQ4ZmZiNDE1NjEzM2FkMmU5OTUwODg0YzViYmQyYzFjYjg3MjllNDBhODc4N2Y3ODQ5NjlmYTg4MGMwN2ZmY2M5N2Q1YzBkMmQ0ODgwODVlOTExNmQ3MTA3Y2Q1ZGIxNmNlY2NkZWFkNTUwMjVlZWEyZWRlZTkzYzFiMTA2NDI3NjE4ZWUwOWRjM2RhZDFlMDU2NzZhMjM2ODA2OWM4MDQ1YzNlYmM2YzY3YWZhNTJkNTkzOTgyNDhlZmNmMTVlOTA0YzcxNDIzMDRmZjYxOTcxZjRkOWJmNjQ2MGMxZDY0MTcKK1NJRzogNGJkMTlmM2Q5YzUxMTZlYzZhZTAwMjRkMGYyNDZkMmNlMjUwZDllMDYzNGEyMzJiYTA2ZmQzNTY2YWVkNTVjYmU1OWYxMjMzMmNiYWQ2NWQ0MzQ5YTlkMjJlN2Q2ZTQ2ZDJmYmRjNzFkNWM4ZjlkYTE1ZGZiZjE3YmEyMjUxMDcKKworVFNUOiA2MTMKK1NLOiAgNjc5MWJkNzRkM2I0NjIwZWY1ZjFmZjU2NDA2NDMyYzI2YWI2NDZmNmQ1ZTlkZGE2ODQyZWQ2OTA1MjI3NTM5MgorUEs6ICBkYTk5MTVhNzU1MmYxMTBmYWVhMTJkNDc5MjBhMDk2MDE0NDNkNDAwMGE5YzdlMjE4ZDViYTcyYjc0OTg5ZmE2CitNU0c6IDM2YTIwZTY2YmIyOTE1NTE2MWFkODVlZWZlODkzYjUzYWM1YWRlMTY1ZjA4OWE3NzE5MGIwYzIzOWRlYzhhMjAxNjg1YjA3NmI0ZGVkNGExMGFhNDU5Yjk4MGE4Y2NhNDdkNWY4ZGU0ZDJhNjYyZTQ0NmQ1ZjdmYjcwZWQ5YmUwNWRiMWNjZWFkZDEzMGIzMzQ2ZDk0MDlmOWQ2ZWY1MjgyNGM3NjRhYzZmYjFjZDE1NmRiZDZhNDczYWU3MjJkMGViYjI1NjM4YzUxMjY1YTIyZmViYmIxNDk2N2Q2ZGQ4MjUzYzFkMDM4ODk1YzY3MzdmMDY3YzhmNzNjM2MxY2JlNmNkYTQzNjk2MzJkN2Y0YzlhY2ViZTg3ZDA1NzFjODFhNThjZmQ3MmNjZTRhNWNmNTNhMWU3NTI1OWY0Yzk5M2U2N2VmYzhkOWMzNTc2YzQzYWYwNGE1Y2FmMzNkODU2ZjdmMjc1NWQzYTk3NWFiMmI2ODVjNmY2NTY4MGNiYTlhYzg3OWYzYThjOWE0NzY1Yjg3OWMwYWRlMWU0YmQwZDRhNzBiYjZmOTJiMjRkNDI5ZGM3NDZjYzc4Zjg0ODExZjA3NmYzMmM2MWUzNTg1Y2M4YWFkZTliMGNhMTUyMjRiZmJmZTE4YmUxMGEzMzY0MzYwMGY2NjEyYmYwMTNmMGVmY2NhODM3MjQ2YTBlZTViMDNjMDJmMTU3MzYyNGM0YTQ0YTkwZjllNDIzZDRlNTYwNjFhNzFkMDE0NGY1YTg4N2E4Y2Q0YTlkNmYyNDc5MDRlMjY3OTU5NTE5NTlkYTEyMWM4M2M2Yzk0MWUyYjZiOWFiNzYyMDlmZmU5MTc4NTkxZWFkNjgyMzBiOTRhZTk3ZGY1OGY5ZjE3MjQyOGM5NTA2NzU5OGFjNTgyZmZiOTUwODQwZDgyNjYzMGM0NjI1ZjVkZWFkZGVjMTMwNTIwM2I0ZGI2Yjk0NWY5OTFlZDdjZDNkNmZhYmNhNTFlMjE2NmFkYWQwYWFkNTExNzMzNmQ1MmQ1OTQyMmYwMTM1YzhmYThjZGQwODg0YmU3MzU4NmJmMjg0ZTVkZGRkYmNiOTViNDExZjk4NTY4NTI2ZmJlNzFhNTU5MmI1NmFkNWE3MzQ1ZjI4NzRkYjFkNTdiZWFiNDNlOGNjNjk1NDc1MjA2MjlmMGVlNzZkYmY0MzJhMzc2ZmFkMjhiZmM3N2UxNGQ4NDBmMGMwMmQ0NzhmMWUyMzM3YzIzYjg5ZTczZTUyNzkxMDhiNTYwOWIxOGU4MGRiMGRlMTFjZmE5NGVjZjcyMzliY2ZmNTljNTQxMThlNGVkZTRmYmZjMDgyM2FlNTQ2MDE2Zjc3NGM1MjE5OGE5NjNiNTU0NWEzNDg5Yjg5ZGY3NjI2ZmQxMWVkNDY1OGQ3MTVhNDY1Nzk5NDAzNWQ0MDNiMzM3MGQxNGVlZDk3MThkNTk4ZGI2NzVmMDQyNTkyZmVhODkwNTY1NDRiMzJlNWI5YzgwNjI4MjhhYWEzY2Y1OWNiNDc2YWQzNmRiMWRhYTI0ODIyMjdhOWI3YWZiYzE1M2NlOTMyNTNkMWIzOWRhOTVlYjk2ZjgzMTI4ZmYyNTU0YTU0N2UzNGVlYTRhMDAwMAorU0lHOiBiMWU4ZDQ4MTA2NWJkNTEyMWJiM2JmNTY5NjAwYmNjMjZkZjQwYzQ5OWZiYWE5NTRiMzlhNjE5ZGM0MGI5NTkwYzMxNzU2YjhiNjNmODYwMTUxNjk0Yjk1NzY1ZDY5N2IyZTFhZGUwODA2ZTkyYTA2YzRhNTU5ZTkwZmNmYTUwNgorCitUU1Q6IDYxNAorU0s6ICAyMzRjZTRkMzliNWViYWJlOWEyYzFlNzE5NzBkNzE4MTM4ZGNiNTMwY2ZkMjk2MDIzNDI3ZDg5MmJmODhmOGE0CitQSzogIGNiNzM5MzBkYjQyMWY2ZDI0NTM2ODM3YmQwYmZmNmZhNzViYmQxNDFjOThhNDA1ZDQyNDRhM2M0MjQ1NTA3NzkKK01TRzogNzc3MzBjZjhjOGY5NmI5MTg3OTAyYWNmZjlmZjBiMjE3NDZjY2FmMGEzODJhN2IzNDNkMWM3MjAyN2FlM2MzMTY4YTczYTZiOGY0OWJjODc5ODE0MWUxNWMyNzMyYjZhNmIzZjc1N2Y4YThlODZjN2E0YmFjYjM5NTUxYzU0ODc0ZDZiZjcxNjg5N2VlNGFmMTMyNTNhYTViYjc5YTE5MjEwNGY0NGRjYjNkZTk2MDc0NWE4ZTZhYTk4ODA1MjRhNjI5ZmI1MTBhNGNlNGNiZGE3ZTI5NTdkZmYxZDYyZTcwNTYwNmEyY2M4NGY5MTg1MGJlYWFjNWU1ODQ2ZTE0MjBiYzkxZGNkZDI0MjdiNjljZmE0NmFlMzhhNGZlZjQxNDZlYWUzNWY5YzIyZTk2N2NiMTRhMWFmOWNhYmY4M2IxODA0NjViZWQ2ZWYyY2RhMzgyYTg0ZDk5OTRhYWQ2NTVkODk1MmUwZmJiMGY5NmZjODA4OWYyZTc0ODk0OTdmYWNkY2Q2NTZhOGE0NTFiOTI4YzExZTdhNDA3NTA3MmFhZmJmMTdkOGYxMDU0YzkxOTYyODhkZWQzYWUyMWY5YWZkNTgxMGExMDBkOGU0ZDg0YzRhMzVhOThiMzBkM2UxODUyNDQzOGRkNDQwMmRmZDhlNzY3NWYwOWQwODBjZDkxNWYxNGFmNDM3MmY3Y2U1ODM4NDk3MmQ1ZDExMTA3OTY1MWIyYWNmMzlkMmExNjdjNmEwMGIyYjE3Y2UwYjI2ODc5MWJkMmJlNTE3OGZlMGY4MmQ2NGRhY2RkZTM3N2ExZThiZTllN2Q4ZGZjODJiMDg2NDQ1MzdiZGM4NzBjNTgxOTI4NmZkNTFmNjc5MmRjNWY2N2I1NGJlMzM2ZDQ0ZDU0ZmViZjgxYjhkZjhkZWM1ZDg2ODZkYjEyZjE2NGQwZThmZjFhYTJjMTZiYWNjOTgwNjAxMGVjOGU5MTE5NjU5N2VmMDZhNGNmMTcwN2RlZjUwNjdhMDQ4ODlkOGU0OGE5YmMyYzBiZWY2NjRmNWFjZDFiNGY1YmMyZGE3ZGE0M2RjYjVmOTYzMjQ1YmE1NTJmZDQ5MzAwMWQ4NzBhOTUxN2ExNzljMmYwZGU4NWJlMGM2ODJkMDU3NDg4ZTM1Yzc4MTZmZjRiYTUyOWFlZmQ3YzY2MDkxZjIwNmY1ZjRkNzVjYWM4YmQyMDllYzJmYTU1YmU3NGFmMjMxZTJmMzg5ZGNjMmQ2NjhiZjY5NWVkMjY3YzM1OTRiYWQ5ZWZjMDAyMTdjN2EwZTllN2I2YTU2YTMzMDc5YTMwZTczYzM3MzNmMmQyNGVmZWNkZGU4N2Y3MmY5NDhkMjc3ZDZiNmQ1YjAzNWI0YzUzMTgwZDIzZDY2Y2MwZmYxN2MxNWRkNDY4NTg1ZTM4OWQ5MWE0Yzk3ZmQ4MDExMGIyMThhMGJmN2E1ZTAzNTNmNDYwOWQyY2YwMThhMDY1NTcxMDAxYzc4ODg1NTVlZWRiZDM2MjJjM2IxNzY5Y2QxM2YzMzM3NDc3MmFhNmM4YThmNTg4MTAyMDE3ZDRlZTRlNTBkY2JiZGIxZDYxMGMzMjY3MDkzNGE2ZDllNmQ5Yjc4NGJiZmU3MTg2MmJiMzgKK1NJRzogZjZkMDYwZWQ3ZDE4MjczZjE4ZjdhNjljZDFkODEyNmU0NzhlODhhMWQ3Mjk0ZmY2MDQwODQ2ZDQ2MTA3YzNlNDFhNDIzYmFiYjI0MTcxMzlmZTU4N2QyOTEwMjcxYTM1N2ZlNWJmNTdjOTJlZTNhN2I3NzUzMzcyOWQwYWMyMGQKKworVFNUOiA2MTUKK1NLOiAgMTAzZDExOGM3ZGQ2NWQwN2U4ZDU1ODJlNDUwNDJhNzU3OTI0MTdjNjkyMDAxZWU2YmQ5YTkyN2IyYjNkOTAxNgorUEs6ICBiNDVjYzk0NTE0YTZhZDY3MjQ5NmNkNGViOWZkYWZjMWQ0YTE2NzA3MmM2ODc0ZGM4ZmYxNmQ3NjFmYjY2OTg2CitNU0c6IDVhOGVlMDc5MTg2YjUxY2Y0NjI5ODM0ZGUwYzZiZDczMzQ4NTUwMzlhNzYzMWQ2ODg3NjUyYTc3Mjg5OTU5NzJlMzYyYzFjNDA5ZjA4NGY1YWFmMjk4NmFlM2Y1MzZiZTAwNzBjNGJhZjQ1OWVmNjBhMDE1ZWY5ZDcwZGZhM2VhOTY3MTFjYmIxOGU5MmFmNTBjNTI3ZDdlZDQ1Nzg3N2EwN2FiODM3MjE1MThjODlmN2E4NjQxOTFiMWU5NzQzM2I3YzZjZDYzNGE4MzJlMTk4OTFlNzZjNjIxMjJhNDlkYmZmZDgzNDk4YWE0MTZhY2NjYjc3MzdmZTc1ZjRmYjJjMzUzMjhlNmY2ZWNlY2FhYTQyZTQzZGJhNWJjOTY4OTY3M2RhYjk2ZjBiZWZhM2M4M2ViNDFkNGQ4ODdiM2ExMTdkMDU1ZTMwYmI4N2ZiZTdjNzE5NDcyZjZjN2E0Y2M0NWY2MjhmNWZhZGRjNDhjYTM0NGY3N2I3MzNjMGUzYjlmNTA3OWRiZDA3YWYzYTM4NDdhZjE0MTcxOWNjYTJmNmE3NjY1NTJiNDVkMGZkY2RiOTg2OGYyYzc2MmI2ZDQ5MzNiYTEwODM2Zjk1YmZmNzFjYjg4MDQwMDI0YzkwNTM0YzRkN2E5NWEyMzAzYjA0YzI5NjEwMTJhZjU4YmM3ODRhOTYzMjdiYmZlZDAzOWQwODAyYTA1MjYyZDhlNjYzYjc4NTA4ZTkyNTA4YmMxZjJlYTJiOWJlNzU4MGJkZTEwYTRkNjYzZDBkMjViMGU5NzNiOGM1ZGVkNTlkZWJmMTliYjA0NGFmZjFjNjBjNzBlYTFhZWZlODVmNmQxNWMyYzFiODQ3NTNiNTk1NzZhNDk0NzNkNjVhZjNlZDk0MWEzZDUxNGI1YzQ1MjJjMTQxYmRiZWVkOWNiMzM5Njk1YjJlMDJkYzA3MDAwODY3ZjFiZjhlZDhjZmQzYjFhZmU2ODhmYmNhODBlMmY5YmE1YzBiMTg4YTE5YWRhZmY2Njg2Y2EwZmYwZWRkNDQ0NjYxMjkxZmEyN2NhMWZjNTI5NDI5YTVkOGZmNzllZDIwMjdjNjBmZmUzYjJjMDNmYjhhNjZhMzk4NTQxN2JhNGFjZTdkMTRmZDBlMjM3MWVkZjVkNzFiYzAyYjkwNTI3NjdjN2Y3MmM0ZTZmM2YzMGUwNjM4Mjc2YjljNDIwYWE0MzMzMDk1ZDMxMzEzMDMzMDkwNTgyZTNhYzRkOWZkMzIwMzEyMGJhMjUxNDk3M2FiOWQxYzdmYzQyMjkwMTE2YjUxZGFlOWZkNTc5NDEwYWUwNzhlZDMyMGE1YTFiNDlhYTdiNWZlZmNkNzU2Mzk1MjEzYWY4NjQxZTI5YjBlYmI1YjgzZTM3ODBlNWQxMGU5ZDNkMTE5OTgxNDhmNmM2Zjg2YzRkNGViMjUyZTI4YzcwZmEzYTU1YzQzZDRkN2ZhYWZjYmNkZDQ1YWQyNjM3ZjIxNWU4MTU0OWViOGE0Y2RlNDcxNWI3MTA3MjA3NTAzYTc5NTk1MDYwYjgzYWNlOGZlYjY3M2I5OTc5Njg0NjlkZDliNGFkNmE3ZWE4MWM2ZTYxODEwMDMzZjNlZGZjMTM3ZDk3NDIwOTU3NWMKK1NJRzogMmZhZmMxM2M0M2FmZTUwNTQzNzJiOTIzZDI0ZjI5MmIyODNhZmNhM2FjYTNiM2U0MzIzODA2ODQ5NjE3MTNjOGQyM2U4NmIzNTgwNDk1ZGZiYWU0MjRiNzY3ZTQ3OTVhMGY5MjJmNzFiNTBmNWQ3YTM2OWFiOGM2ZTg4MDQyMGMKKworVFNUOiA2MTYKK1NLOiAgNDdlZWUyMDI0ZGJlMDk5NTNlOTgxZjY5ODY1MjBmNjY2MDgyYWE5ZWY0ODkyZGZkZmJkYmQyNTBkMmExZGYyOAorUEs6ICA5ZjEzY2Q4ZWJmNTA4MDM0Nzk3NTE1OWYzNjAyOTZhNzE2NDAxNGQ4ZDA2OWU4MzFkYWIwMzMyNjA3OTk3Y2RlCitNU0c6IGMxMzNmMDMzY2YzYmVjNmNkMTkyMTJlYTQ3ZGJlY2IxM2YyYzYwMThmOWUwODc4YWM4ODRiZmI1NzVjMGY1ZDNmYzViNDk5OTU4MGViOGFjYmNhYWM4M2FlOWFjOWI0NDNlNmQxY2ZmNDQ5YzM2ODliNDMzZDUwOTAwYjJlOGI3MWQwMGUxMTljOGI4NzUwOTRiZGFiOTE2YWRhYWI3NWJjYzg1Mjk1OWQ4ZDc1OTc5NWJiZDZiMzYwZWU0ODRhZmU0N2IxYWQyODM5MWYyNWFmYjhkNGUzYWZlMGM1YjYwMDQ5OGExMjgzM2ZlMmExYTU0ODNkZjk0MGIxNzNiYTBkOWQ4YzRkMTMyMWZhNGI3MzMzMzRiMGY2ZDg3OGEwZTVhNzZmNGYxODBhYzExOWE4MjA4MmFjYjE0ODhlNDliYmNhN2EwMzY5YzE5MWJkNmQwYzVkNDQ1NjU2ODIxYTk5Y2NiYzk0NTk0OWVjYTgxMzZjYzZlMTI3ZDlkZTkyZWY2NGYxNzRhNmMwNGM4YjVlNTI0OTVmMGRkNjc0YmI1Y2ExMjhhOTIwOTk2OGZkNDUwZGNlMzE5OTEzZmQ2YTMwYzMzODI3OTgxNjNlNjU4NWY1OGVmMjA4YmU0ZDBjNmEyNTEzYTc1MjM4ODM5N2E0YWU0NDQ4MzhjODQ2NmRiYzM2ZmJjMzZhZTA4YmVjODhlZWRhMTMxYzE0ZDA2MzY2YjY3MzE1MTQ1NDEwMGRlYTExMTgxNTBmYmU0NDFiMWU3ODI2ZTU0NWQ5ODY4MjQyZTg5OWY1ZWE1M2U0MzRjMzc5MzZjZTZmZDA2MTQ2MjgzZThmYmQ1MzY0ODBkZTU1YTE2MTAyYzQ0NzU0YmM1NTRkNWJjMmRlMmYyNWUxOWU1NjdhMDIzZGY0NjQwZTc0ZmYzYTQ5ZTRkZDMwZTBlMjU1OGIzZGJjMmFhYjkyZmRkNWU3OTQyNWVjYmM0YzY5OWZlMWYxNjE5NjVmMWQwYjQ1ZDhiZGFiNTJlYzliZjdhNjlkOGFhMGJkMTcxZTc1NWNlN2I4ZDA3MThmNzI2N2FmYjczM2VmY2E1NGIyMTNlNmY1YWRhYjRjOWQ3NmM4NjdmY2I2OWFlMDVjNzRiZDIxNTE2Y2YzNDJjNjE2MWY2ZmM5ZWNjYWNmOTcwZWJjZTU0MGNkODkyYmMxMDZjNmJkNTYzNjEwMjk4YjcwOTY4ZjA5MWJjYzZlMWY3YWI0YTViMmM2Mzc0YTE5MDNmNGQzYWQ1ZTFiZDg2NDNhOWMyZjg3OGMzZDdhNGRjNDllZjMxOTdlZGJjZGE3YmI5MWU3ZTA2NjA2MDg3ZDRlOTgxYmZhYjkzYTYwMjQ5Nzc5NjJlNDUyNjI1MTdmMzM4YjY4NTdlZWMyMTU4YTI5N2IyYWE5MTUyNGI2NzdhMjFhYWM1N2JlMGI2M2E4MDc0ZmU1NGU3YTlkYzcwYzVhNWMzZGU3MjhiOWMxN2VjMTIxMmFiMTEzMGViMTc2MjJjZDdiMjJhYjZlYmE5MTg1ZThkNjdiZTZjNDdhMmU1YWRjNjYzZDQ2NDJjYzEyMDIyMmUyOTlmZTEzNGZkN2ZjZDAwYWRhYmNmYWE2NDJmZTJlMDhkZDUyZTJjM2YzMgorU0lHOiA1ZGVmYWUwZTE3M2VjYzE4ZDVmMDFlYzkyOTFiZTE2MGQ1ZWFiZmY2M2ZkNTQyM2YyYmM2NmUzZjY0MDhjMTk2MzUzNTAyZGNlZjIxZWZmYTRiOWMxNGJmMjdiNjg3ZDFiNmU4NmIyYTIwNWE4OWViMzVjMzc2YTNhMzI1NjkwZAorCitUU1Q6IDYxNworU0s6ICBiNmM4OGI0YzkwZmQxOWExNDlkMzgxNjcxOTUzYjliMTZkNDI4ZjYzNjFjZjUwM2ExMTA0NzdlMjk3ZjhkMmY4CitQSzogIDhlYmZiMDg0Zjk5N2IyZWE3OTMyYTIzNTNiMmM4YjE2YmQ4MjVlMWFmNTg3YThlYmM1MWE2YzQ1YWVhMzQzYWUKK01TRzogN2Y0YmY0ZjUyMTczZWZmMDcyZjgxOGQwYWE5N2U2OTM1ZDhiYWNjZjQ4Mzk2NjMyNTNiMjQxNGZlNmIxZjM0Y2Y0M2FiMTIwMTU1YTFhM2FlYTdiNDgxOWRkZDEwMzE2NzNiOGE3YTZiZDBiOWRkYTRhZGVmZTY5MmE1NjE2MmM2NDYxODA3OTQyNjRjNTEyMjExNWViOTBhNmQzMDU0ZjA4NDMwMmRjZTNkODM2YWMzZGU4MjA2MzhiZDg5YTg2YmYwYTRjMDE1NDdjZmRjNTQzZDY3NmZlMTYzOWVmNzJjNWI4NDVjNDk0ZTA3ODE0Y2VjOGE0N2QwM2RmNzNiZTRlMzNjMDVhZmU5YTE5MGRkYTA0MzM2MDQ5NmJlNGNmM2E2MzE5ZGE5YWIwNjQ4MTY3N2YxYTQzNzRkNjBkM2QzYjYzOTRmODg0M2M4NjliMGY0MWExZTgxYzJiMWE1NGJmNWFhY2JkOTgyMDdjOGRiYWNiMzY0MjJhM2FhMDEzZDVlODQ5ZTA0NGFmOTI4NTQ1YzA0NjA5N2NhZjE0OWQ5NzAyMTUxMTVkZWEwYjVhODU0MDFmZjY3MmUwMmVkNDBiZDBmNWE0NDBjZDU2NDk0MDUzYzg5NmMzYmQzMjYwNjM0OWY3Y2JlN2VjZTJhMjIzMGNmMjM2ZGFjNTlmNzgxNzk2NWYzZmE4MGZiNDhhYTMwYjBiMTllZmE5YTk2NTkxNjQ2YmQyNWU2N2MxODVmNzdlMjFkNjYzMGIyODhkNGU1NTE0NmIyYWJjMTVlOTUwODhkOTM2MDgwNzc1NjE4MTU0YmJkZGExMTU3MDJhMmFmZDZmZDVmNTZiOTIzZTE4ODgzM2VjNDQ4OTQ0ZDMwMjgzZTMzNzI1NDI0MmM1ODEyZDcyNDVhNGU5MjY3MGJjZTM1NDZlZmFlZDIyZDI3NGUxZTYwNDhiNWEwZjAxZWZiZjg5NWRjNDI0OTRiYWYxNzQ3MTg1Y2IxYTRiODhmZGYxZTYwOTliYWFiYzZhNWFiNWEyNzI3YjFlMjQ4Nzg5ZDE3MGNhYTI0NDk2NzFhOGY2ZTA5NGMxMTMzMmVhMGFjMmFmZTg4MTMyYzY0NGZmODgzZDBjNDk5YWQ3NmE5M2RmNDcyZmEwMTNlYWEyN2FiNGRhZDY3OWQyNTExYjUwNDljNGU5OGJhYTJlN2IwMGE1MzQ4OTFlMjkwMjY1ZWRiMDc2ZjdkY2E4ZTZmZWYzZjQzMzAzNGExNjU3NWYwZTUzZGE0NTc3ZTZiMTNmMGNiMGQ3ODU4NzBkMGQwOThkNWQ4MGY0MTNhMjY4YmE4NGUwNDMxYTc4NjkyMzc3MTM3OGNkNTdiODE5MjI1OGUyNjMzY2RiZTAzY2MzMTZhMDk1MDk3MDUyNmZkM2UwOTM3NmJjZWYwZDAzYjcwNzRlNTlhNWE4NGZjNjRlNzk1YTgxMjE1NmQ5NjA1Njc2NTBiYjFlMTQyNGIzY2M5YTRkOTlkNTdiYTg1OGRkMWEwY2FkMzUzMmU5OTgxNDZlNzkyNjQwNDVlMjhlYmJmZDc1YTQyNmIwYmI4NTFhMjQ0YWQ2YmU3YmQ1NzY1YWY0OTNkZmM0NGVlMzc4Y2QwNGRhZjM5MTdlZWYyYTYyMDYKK1NJRzogNzQ0N2EyMDE4MWIwMmNmMWI2YWQ1Mjk1NjljZTQzN2MyYTA1MDgxMTZmNTAyMDVjNDFlNjM3OGI3NGZlMmZjNTM2MzBhYTBkYzRiODBjMzFjYjI2YzhmMDliZjhmYWIyN2UzYWJjOGYxZjYwNGE1ZWMwNjYzMWE4NGY2ZjJlMDYKKworVFNUOiA2MTgKK1NLOiAgNzk0OWE5NDcyZjcyNWNlN2M2OGQ3ZWE4ZmMxNmUxM2Q5ZTBlMGE1OGY1OGMyNGY5MjI4Yzg4ZTgwMjY0MDkwZAorUEs6ICBhMzcwZjgyODMzZjg4YjRmNWY1MzEwYjkxOGU2YWY5M2JiNzI0YmZiZGYzYzAyYzUwMzc4MGIyYzgzYWI2Y2M2CitNU0c6IDk1NTM4NmI5MmRkNmJmOTI2MDFiZjgxZTg0ZDI1MTQ0YjVmYzBiY2Q3ZDIzYzc2ZTdkZWI1ZjViYTYzMTZiYjYxYTVkOGU3NDE4NWIwMTI5NjdmMGE0NDM4YjUzMTY5NmRlYjRiODEwMTA4OWUwYzA0ODJhZGYxM2MwNjEzMTkxYjk3N2Y3N2IwNDE5ODE0MTQ3ZjVkYTY0YTFkM2JlYjEyNzViOTg0OWQxMjk3YmE4NTMyYWUwYTY0N2E4YWNlMzk1YWUwZWQwMGY2NzM0OGM1ZWU1ZWExOWI1ZjFjNWJkMmU2MjI4MThlOGFkY2JhM2MxN2MyNzk4N2U0ZTNkNmQ5MTBhNTZjN2U1MTQ5ZDNmNTU3NGZjMDYwMDliZjRkZDNlMzdjZmUzZWJkYTJjMjExNmQzNjZkZDg4Y2U1ZWE3MmFiMzg3NDkwNTg1NDQzYjA4NmU4YWEzOGQxMWQzODIwYjcyYzY1OGU0NjNjZGI1OWM1MzkzMDExZDRhOGY0Y2I2YTE5NTIyOTMwNGU3NjIzOWZhNWU4YzJjYmUwZjM5ZGNhZDEzOGEwZWNiM2M1MTU3OWVjOWExMjBhNTE2MDdlZWZlYmZhNTlhNDQ2MjBlYTViMTkxNjA4N2VhMzM4NTMzZmMxMzJmZjJlNGE0M2QwNTJmZDA4YjZiMWIyNGZiNjcyZjczYzliOWJhMjBiN2MxYzQxZWEyNGQ5MTJkZTliNTU1YjZlNTY4MmI5NzA2MDhmZjIyOWFkMzA4NmY0MzFmOWJlMTkwZWMzOTIyNGJhMmVkOGFjYjRjOGVhYzg1ODJlMjNhYWE3OTgyN2M0NGUyNDhjNWJhMDkyZGRhYzBmMmY3OTY4NGFhOTNmYzA2MTA3M2UxODIxYTU2YWZiOWJmZWM5NTJkZjI3MTlhOWM3YTQwM2U2YTkzZjdhNjU2ZDc0YjYxYzFkMTkwODNmOGQzZjE5ZTY1OWZhMmI3MThlMGJkMDRiNjkzZDYzZGFmYjg2YWRiZWU1ZDg3Yzc1YjdkMTI5MTIyZjE3OGEwZTY2OWViMDM1Y2E0ZDhlYjQ1Mzk3ZjE4NTEyNjRlMmNmMGEwY2RkMzA3MjBjNWUxMzljZDZhNTczZjFmYTI0MWNhZTk0MjU4MDVhYzc5NjAzZThkZTM1MGVmZGIwYjliYzk1YmE3YjA4NWMxZWQ5MmMxMmFjZjUzZjVkNGExMTM3NTk4MDA4ZjJhMzY3MmM4NGU1Zjc2OWEyNWM3YTRhMTY1NzlkODYyODg3NzQ5NzI2MDZlNGU3ZDg1MjYzYWQyMTdlMGRiY2YzNDNmZTU1NGMxMDljNWQ5NDA5Yjc5MzkwNzNhYzU1YTAzNDIwZmVjMjg5YjExNGE1YzU0YzIwYjQ1ZWE2OTkzODUzM2FkZTdiM2FlODVlMWE3ODNkZDk3ODk3YzNhZTgyNTQxODNjYzU0MDQ1YzJhMThlY2JlNTIxNjkxZjI2MTlkOWI4ZjFmYjM0N2NhMDU1YTdiMGI0YzI0ZjY0ZDE3NzNlMDE0MTY0NDFlZmUxNTk5MjMyMTdhODQ4NzRiOWM0ZWMyNjVjZGFhYjY0MzkwODA2ODQ5NzgxMmMxYWYxNWMxODgwNzFlNzhmNTk3ZmVkZmNlOTFjNWQ0YzYKK1NJRzogZTAyODk4Y2M3YzMwZWUwMTY0ODI0NzQ5N2JlOGE5YzYzNzg1OTNkYzg4MjBiZjdjMTdmZmNkMTgxMThhZjA5ODc5YTc2OWY1MzlkZDkyMzdlOTY4MjExNjY2MzQ5OThmOTQ2ZGE2NWU2ZGJhZDgyNzE1MTE2NjllMmQ2Y2FkMDIKKworVFNUOiA2MTkKK1NLOiAgZDY4YTVlM2M0N2VlZGIzMDk5ZGZmYzgwNGNmMTljNWU3NGJmN2JmNWYwMWY1NGQ0ZDkxZDc1NzRmM2QzZGM3YworUEs6ICA0NjQ2N2ZlOWNlM2FjZmQwZDc0MzQ2YmUyMWM0NjIxNmRiODFhZWNlNmNlMDMwOGZiOGRjNjM4NmZjMzQ0NmNmCitNU0c6IDU5NmMwM2QwODczZjU3MmY0NWMzYjE2ZjBlZjRiNTJhZDJiZjU5ZWM3NmQzYzBlNTM0ZDYyYzFmODQxNjRkZGFhNDI1ZmI4NWM5NTQ4NDg1YjcwNjQ2NzdlOTlkMDRjMzliNmViYTA0Yzk2NjM5N2JhNmE1ZjRlYmFhNjlhMjQxZGY5NWE2ZTQ0NTAyNTA5ZDYzNTA1NTdlYmZlYTYwMjY0YjYyYWQ3Zjc0ZDE2ZTVkMjVkNDU5NzBjZmViZWIzM2U3YjFiYWMzMzQ4ZGQwM2E4ZTk5MTMzYjI2YmJmZDdhYTcyMmMyNTg3ZjcyZDU1MjZlOTgwZGE5ZWViZGYxMDgyMTFkYWU1MGJiZThjNjVmOWFiZWU2OWExYmJmODRjMDNlNDA0NDhiYWJhZDAzZDNjZjNiN2RlNDg4N2QyYjQ3NzM3NzAyNzk2NDgyZDIyNjVjNTY2YjBmNjIzYjUzYzg2NzFiZDM3MTllZGVjMGZmZDVmNDliNDliMDcyYzE1NjRhNTdmOWJhYjZiOTJkMWYwNjhkNzU2NjM5YTQzMzE0NTJlNjFhYTdiMjE4YTg4YjlkYjc3YTE5ZmI4MmYxM2U5ODY4ZWRiNzk4ZDViZWVjYTU1ZDFhYjA5NWIzMTYyMjVmM2Y2MzkwZjg5NTc4ZjAxNjA0Mjg3NDdiY2QyMWJlNmFlMWQ4Njk5MWI0OGVmODBkNTY5MjUwODU4ZmViZjMyNzZiZDVkZTNkYjY1YTI0NWM4YmRjZjE0ODhjNDgyNTk2ODk0NTc4NmJlZDYzZjNkMTNmMTQwOTM2M2I5NDg1NjA0NzY4NThiMzk2YmNlNTg4ZTQwYjMxMWRkZmMyMmFkNjIyY2E3ZDFlNjk1NjE0NjRkZGE1MDA5ZTYzOGFhNWVjOWY0YzAzOTI5M2FhZWM3NTAwMWZmYzY4YTdjYjNhZTAxODc0ZGM3ZjM5ZDc1MDI3ZjU5YTI4OTY1ZmMxOTUzMGMwNzUyZmU5OWIxNTNkYTdjMGU1NDJiZGE3NmNhMWUxMGI3ZWExNThlZmI0ZDgyMWZiYzY1ZTcyNzFhZDk5NDEwOTUzMTU0NDdhYmNhZDA4ODBhMDA3NWRkMDRiMTMyNWM3MjYzM2FjYmNiMjYxZmNiNDA3YzI2NGEzNGQ3MGJmMWYwNDRmZWVhZDA2OWFmNWE4N2RkMzUyZjRiZDgxMTBmYTE3OGFkYmQ4ZGJmMjNjNmI1NzVjZGQ1ZGYyMmNjOWE1Y2RkMzdkOWM4ZmFhYjgxYTRjYjNmYjVjNGZlN2ZmNjI5ZGJhYTlmYzA2YjgwYzFmYjY5MWMyODY1NTk1NWNmZTVjYTQ0MTQ5YjE1MGIzY2YxNDBkOWFjYWNiMTQzMTNhNzJjODQwOThkZTcyYmFjYzAyNzJkNzllZDY2MTdmNzJkZWM4OGUxOWI4NDQyNTQ5MmE0MjllYzZkMmVjMDhiODYzNDZkZmJmMjBlYTJhMzYxOWU3N2I2YWM2NDIzMGViZTI1ZmEwMDY3YWJiNWYzM2VlNDlhZGM3YzQ0YmRhNzA0NmQ3ZjIyNGYyZTdhNDg5NTY4M2ZjYTg2ODRlZDZhMDMxODQ0ZjU3ODZiY2RhNDhiNTA0MjM5NDQ4N2I1MjQwMmEwOTkwNzc4OGExZTE0MAorU0lHOiA4OTZmYzNjYWJhN2ZkM2ZjMjg1ZDVlZGRkZGMwMTIwY2Q0NmRhN2M2ZWZhYmU2NmIxNTBiMDAyNzYwYjg0MTRhODlhYzllN2YxZjdiN2M3YjMzNTk4ZjYxZjQ1NzE4ZTRmZjRhYzM2OGZmMTI5NjE0YjRmZTkyMTlmMjM3YjAwOQorCitUU1Q6IDYyMAorU0s6ICAzMWU4MmJjMWNjNWNlZDIxY2RjOGJmYzJkYmJiOTc2YjA4NzgwYWZjNjk0NGFmN2U4OGU1MGU2Nzg3NGQ4NGYxCitQSzogIDhkZjk3N2UyYjA0MGFjZWJkM2RhZmQ2N2I4N2Y5MjE2ZThjMzcxYmVjZWQ2MThmZWYzYTQ5NmQ2NTFhNWQ3YjUKK01TRzogNjlkNDYxYjZiN2E4NjZlOTRjZDU5YTVhMjNiYmE0YTEyNzY2MDJmMDQyYmFhODUwZDViMjkyNDlkNjc0M2FkYTA0ZDNkOTM4MjE5YWJiYzIyYWRhNjZhMTc3ODE5N2Y3MGJmODBiNTk3YThiNGFlMDBiZGI4NzY4MTJkM2FiNGVjMDExZGY3MzM0MWM4NTA1M2VlYmNjMmRmMGFjZmMyMTU0ODI4M2I1NTNlY2RlMDE1NDgyOGVkNWFmNDc1NzE5ODVmODk3NjdiMDA1YjYyMmM5ZTdjMDc5ZGRlNjk0ZTQ5ZGMwNTUwYzc5MThjYzUxNWMyNzRkYmQ5YzU0NjlkMmYxOGVjZDkwZGU2NjRlMDNjYTQxZTUzYmUyMGI5NmUyNWFmNDBjNTRhYjBmN2NiZTllMDVjYTNmYTVhMzdjMWFhOGViZmI2NDQ0YTMyYzQ5NmVmYzY4MTU3YzY5ZjM1OGMxNWY2YWMwOWQ0NmVmZWY5YTY4NWRmN2U4ZGQ2M2IzMDRiZDNjNjM4Y2NmNTMyZmU5MDFmMTFjZjk3YzViMWNiZWQzM2M3MDYzN2M3MjFiMDI4OWFkZjZiYjZkODdjMzA0NzlmYTkyNmUwNDMwNzQzMDJiNzZmMTE1N2QwYTgxZGVjNDkzZTg3YTNjNjQzZTdhMjBiN2E0MTUyNWEzOGRiMDRlNzhkYWU1ZTc3OTcwNjZiZmFlMmNmNDQ4YTQ0N2U5MDA0Y2NlOGU0MWYwOTg3OTkxZmFkMzAzMTFkZGFhNDU5YTI2NDRmNGI5NDFjMDY4YzBkNmMwNzcxYWZjZjQyYmY5MTM5YTY4NGRhMjk4NDg2ZWNmNjc1MjNiZjg1MDlhNDViYTVjYjhiMzg2NGFkMjJjMGM2YTgyOGM2ZGI3MmUzNzFkZTQxMGI0N2RhYzQ5YWU5ZDNiNTcwMmIxNzM5YjhkNzYwY2U5ODYxMWMwN2Q4OGRmNWYwNDY4MzgwOGEyMWFmYzJlNjE3MTNmYzJjMDI1Y2IyNWZjYzRlZTk0MTg0MTA4M2IyMmY2MWUyNjU2ZmIzYjhkYWQ0MWMyNjJjODlkMmYxNzYxMDMwOWYyZDVjMjk1ODlhMmRmNjFlNTUxNDk4OTUwMzJjYTk4MWU0NTU3ZTEzMGEyMzdmYzA4MjZmYzg3MjUyOTg2MWJiYjgzMjhkNjczZjM5YjU4YjczZDA2MGVjNTk2YmYyMmU3ZWUwODFmNDRlOTJjMDJhNTY3NzY3OTUyMGUyYTJiNGQyMmM3N2YyYjIxMmQ1YWFmMDUwYmYyYzE0MWUzZTI4Yjg1NzFkNDMyMTkzNzQyNjIzNWM3YTY0NmQ2NDdlM2VmZTE4M2MyN2I3NDkyNTY1ZWNhY2Q3ZjQzYzY3YTc0NDUzZjQ3ODBlODg3MTFiYTJkZDRhMzk0MWIxMmRkZDM5MDkyNzBmYjNkZWJkNDIyNDM2YWI2MTY2ZjA4Yzk5Yzg4NmNjMGU4ZTNjZWNkMDY0MmU0NDI4NWI4ODY0YWE0MTY5NDNjNWExODY5NzRmNDY0NTM1YTg3MGEwMTI4NjFiYzJlNTg3MTQ5Y2FlOTcxNjI0ZTYxYzMxZDhhNTA3ZTNhZDgyNzczZTcyM2JjYjc1ZGY1NGJlZjg0N2E0MDdiY2I3YjFkNTcKK1NJRzogMjQwNzAyYWM2YzY4ZDU5N2QyMjJkYTk0OWQwYzQ3ZDE2YjM5MGE0NzdkMWZiNTc5ZTlkODk0OGFkZjliM2I2YTdmZDQ0NThhZTYzODViN2UyYjY4NGEwNWI1NWM2M2ZhNmNkMDg3YmI5MDExM2NiYWI4ZTRhZjE0MmZjZjgxMGUKKworVFNUOiA2MjEKK1NLOiAgY2M1NmJjN2NkZmE2MTE5MjRlNzJiMDdmNjhhYmM2Y2E1Yjg1ZmY4YmJhY2RmZjQwNmU1MWJhNzIwZDA5YTg2NgorUEs6ICA1ZmZlZTIyMWFiNGQwZmU2ZjRjOTM0NmM1ZTVhNGI4YTYzNmE2YTBiYWRjZTk2NjdiZTczOWY0YzllNjczM2MxCitNU0c6IDA4ODMwNGYyMmUxYTI4NjA2MmRlZmJlYmIxODI3YTY0Yjc2YTE0ZTg3MDE1ZTdmNjQ2MTc4Nzc3YWJhNzk3MDQ2ODhkN2JmMzJlMWVmYWM5N2E5ZmMzMzk4MTBlYmQzZGY5M2U0ZWEwMjQ2ODY5NTNlZDkxZmE2ZDJhYjZlMDdlYzc4MTFhNmQ5MWNhOTFiMDk4ZGI0NzI1ZGY2NTg0NmE5NWI4MDg2MzVhOGQwYzVmZTVhY2UyNWYwNzgwZTg5NjE3N2JjMWJiYTFjZGI0NDQ5MjUxYzAxYjQ4MmYwMjM4NjJmODhlMDcyZTc5Y2RlNWRiZDZjMWQ5YWQ5YzA3YzYwNmY1ZGY4NWE2ZWNhMjk2NmNiZmUwYTE2NzM5NjgxMTJmMjZhMzE3MDUzZjE2N2Y2MTFhZjI5N2VmYTgwMmUwYTk0YjNlMWYzM2EyN2I3M2U1NTk3YWJiMjI0MTE1ZWJlNzVlMjk0YTFiY2RjZDk3OTI1NWIwYTgwMjY1YzA4OWFhYTdkNmJlZDJlM2QwYzkxOGY1NmY0YTU1ZjQ0OGQ4NjMzNjVjNmM1ODQ2ZmI5YjJiOWJiNTVmNmI3YzZkZmY1ODQ3YjcxYmZkZDRiYjViOWJiMmU0MjQ5YmMwMjQzYTAyYWI0ZDIyYmE3OGE0M2QxODIxOTVhZWQ3OGZlY2U4NGNiMWRkYWViOWVmZjY4MTU2MDQ1YjI5MzJlNjM4ZDc3MzFkMGU4YjRjOWM4YzM4M2IwZDZkMzkyZDIxZmM2NDA3NjJjODdkMzY5MmIxODEwYmNjNGE0MjM5MmZmMTNkNDUxNjllY2JmMDEzNTA1NTA5MzEwNTA5OGM4NjliNjg4ODdlOTM0ZTJiOWRhNTIzMmFjNmM5MzczODAwZjcwYjY0ZWM2NGE0YWEwY2EwNDRjMDc3N2NhM2EzYWNhYTEzOGMxNDI0OTY3MmE1NWIyNGRkZmU0ZGMzNTc1NzMyNDFlMTRhZDBhYzE2NDc1YThlMzg2Nzg4NmQ0MWVlYTM1ZmU3OTMyYmE5YWVhYTBjODZjOWViNmRiNzgwODA0OWFkZTdiNWNjMWE0MDgyMmM2NmRlYTkzYWQyMmQ0NGI5ZTQyOTA0YjViODM2ODRhZTI5MzFmZTM2YzYwOGZmNzA5NmYxYjA5ZjgxMWIwMjY3MjgwNDQwNmUwOGVkOWU3NzQ1Njc2Y2UwNDdmMGY3ZjY0NzA4ZTQ5YmI3ODc1NDcyMGI4YWEyMjZmNTU1NmFiZjA1YjU2NTg0NjQ1MjkyZGFkMDhlMjQ3MzYzOWE4Y2U1NDc1ZTBjZTkxOTJmOGJhMmRkMzJjZTE0YzkxOTc1YWI2MDJmN2MxMzUzOGM1Mjk1MmQwMzk2MTU4YzdjYzZiOTQyYmU3ZDkyM2VlYjUyM2E3M2I1YjQxMTk2NmQxNGFjOTZlNWIwOTZhNTI5MzJhNDE2MjkyZWNjZGRiOTEwNzFjODg1NjBlNzBlY2Q0ZmUyZmUyNGQ1MjNmYWZjYjk4ZTQwMjE1MDJmNDE5MGEwNTE1ZWRjYjI0MDE5ZWFjYTA5ZWMyNjE1YTliZmRlYjYwZWIzNTRjODRhMWYzY2VjN2ZmZDdlNjVhNTUxNWQ0Nzk1OWE0YzRlYzQ4ZDgwMjFiMTc1NGFlMmJmODQKK1NJRzogOWI4NmExOTJiNjRmNGYwNDRmZmJmODdiNDFjN2VlNTJmN2E3MjFhYTMyMGU3YmFkNjQyNTk5NTk5MDMxNWNkZDUwMmJlNGUxMTE2MDE5ZDEzMWE5MjE4ZDE5NjE0YWQ5NTU0M2IxODg5YWYwYTk3ZWQ0ZDI1NmRjMzNkNzZlMDgKKworVFNUOiA2MjIKK1NLOiAgN2E1N2YyZGRhMGFkMDMzOGFiOWExM2M5YTM0OTdlOWM3NTIzOGMxNTMxNTg5Nzg5MjI3Y2QyNzQ5YmM2ZTk1MAorUEs6ICA2ZjczOGRjNWU3ZDllMjQwYzlmNGQwYzA2YTVlMDIxNzQ3NTY4YjY5YTc1ZDUwN2EyZTBiZTdlYTYxMzUyNmM1CitNU0c6IDhjODU3NWExMWQyZmYyYzIzOGU0MTljY2IwMDYzM2QwNGU4YjhiZDc3NDI5MDFkNTg4ZGQ2YTJmMDBhYTEyZjA4YWU0MWRjYWE5MzM4ZjhjNDdlOTUzMTIxOTJjZjZiMjQ1YTAwY2U2ODhhMDI5ZGE1NmRkMWIxZGViMGQzNGI1NDE0ZmUxYzIxZDZiNjNkMDZiODUzNGFjZThlODY2YzkzM2ZkN2M1YTY1ZWRhOTVhMTczN2E5ZWNkYjE3ODU5MTQ5YWM2OTY5NTFiODJjMjMwZTgyNzVlOTZkZDAyZmQ0NTVlYTY3NTM3OWU2N2JhNjM0ODRiNjI4MzgzMWZlM2ZmZTUyZDZlYzQ5YjcwOTEwNjcwNWM5ZDE5Yjg1OWRlOWZkMjAwODg3Y2I0NGQ4ZmRmZTY5NjFmYTRjYTIzNDA5NDRjNzY0YzcwNDQ5MTIwODI1N2U3MzU0ODJhZjhjYjY5MDQxZGRlNjg1MjQxZDNmYmY0NmZkYTA1NzI0OGI4OTg3YmUxZjgwYjU0ZWI1NDAwOWYzMjRkYzQ1MGU4ODZlNzlmOTEyNTg1YjkxYzlkZmFmZTkwMTIyNjJjNDcxNDAzYjFlOGI1YzMxZmM1Mzc1YTFkZGY5OWI2OGVkZjllZDcwYWY4NTk0ZjdkODRiMmNjNDkxMWZlOTA1MDBjNmVlYmZiYWMwODU1NTM1NTBlMzViZDJlNTI1MTRlOTc5ZTcyNDFlOWY4ZTM0Y2RmODUxM2FiZTcyNTEwZGZmM2NmZWM3ZTJiYzY0ODg2NDFjZmQwYTY1YWUwZTA5ZWJlOTliMTViMjlkNDVlYTY3YTU3YWFkNTU0ZDRmOGJmY2UxMzg2YWNlMjI4ODM5ZTNhOGE1MzQxNDBlZWMzZDM3ZDUxYmUzNjFmNWVhMTg4MzczOWY1NjYxNWY3NWIwNTVhMDZhOTE0NzFiZTk4YmM5NDUzNzgzYzM1ODM4MmJkMDU1NWFlOWViMGJkY2Q2NjYyOWE2MTFmYzFhMTFjNjUzYzgyMjE0NTg3ZGVjMTJiYTEyMGUyNTEzMDcwZmU2OWU5ODJmN2E4MGFkMTU5ZjZhMzI1ZDk3N2QwMWQwNTBkMTE2YTYyYTRmOGFjYWI2YzNkNjlmZjZjODc4MjEzYzYwYTk0ODQ1Y2FlMTA2ZGU2YzVkNmZlMjUwOGQ5NDU2NWI3YmE3NWQ1OGQxYWQ0N2Q3NmEyMGRlZmE3NTY4Y2I3ZmQ2NmY1N2NmMzc3NGEyMWQzZmZhN2Q4YWE2ZDg2ZGMyODRiNzBlMGYxN2U3NjMwYmZjMTBjZDFmYzlhOGQ5YzU5MmQzOWYyNGE3YjVjOGU4YWZmMzUzNTc3ZTZhYzkwMDg2OTBjN2ExNTlhN2U4M2JlNWE2YWU4ZmNhOTY0NGJkZGZhMzdhOTJiMDcwNTVmOWZhYzlmYTk3ZmIzZThmNWY0ZDkxN2RkYTVjNmRjNmVhMzRiNjRkMzAyNDA1YmMzODA2MmUwN2NlOTNhMWE4OGFlZDVmYmFmOTk1YTA5YjQ1YjI4YWQ0YTZiMjczZGVjMTQxM2M1NDA0NTI5ZDgyNWI1ZWRjMmUyN2EzOTBlYjdlOGMyYjQzOTA1ZTExNmQ4ODdhYjVmYjk5M2RmZTE1MGViZGNmODE3YWU2MmUwMworU0lHOiA5ODkxMjM3NjFkOTM1NjMyNzhmZDBhNzhhZWQ2NGUyZGU2ZjRhNzAwZmM5YTcwZDIxODc3NDhhYzA2ZDljMmMzNzdkMTk5NWY4OWM3NzI3ZmUyZjEyMDc4NGU0MTcxYzQyZDYzNTNhYzNkNGUzZjYyMGM2MzljNzU3ODZjNDYwYQorCitUU1Q6IDYyMworU0s6ICAzMmVmNmQ3ODlhMWVhMzkzZjFiZjlmMTFkZTM0ZjU3ZDY1M2M0ZTc3ZDUxZTYwNTBmZWY0ZThkN2JmMTgzZGI1CitQSzogIGMxYWExODFlNjIwZjYwNTI1YzJiMTdkYThkMjkwYmFlNWQzMzllMTdlYWJjZWFiNThjZDc2YWUwNjZmNDExNzkKK01TRzogMTFhOWMzYzFiYTdjZmI2MWFkMTAzMzA1YzI1ODg2ZGU5Zjg4MTVjNmMyMWYxN2E4NzMzYTAyNGY5NDk3ZGEwNTQwZGIzNjAzYTY3MWFhZTgzN2RiYmJhMTllMTlmODJkZGZjOGFmODU1OTgwYTcwMTI1ZmM2MWNkN2ZmZDEwNzc3ZTM2NmU1ZTk1Njk5MjdhZjBmMjQ1ZDRmMzliM2ZkMGY0NTg3OWMyNTM0MDE0MTI4NTVlNTc2MTkwNWVkNmVmMzE4YjZhMDZlYTZlOWY5MDZmOWJkMDE2YmNiNjk0YTBkZjY1YTAxNmJkZmU4NDVhMDlmMjNlNTA4NmM1YWFmMzc1ZWZlYjg2ZGE1MTIzOWRkYzM1MGJhYzBjZGIwM2I4NzRkYjE1MDdlNmFkNGUyYzlmNDYwMjhjYTIzODgzNjM1NDE0OTNiNmNiOTJjMWRmY2FhM2VmZDY4YzZiNGU5MWVmYjQ2NzUxZDIzZjRjNDhhOTczZjBhNWM3YzZmZTJhMTI2OWQyYTY5ZTlmYzRhYjhiYTNiOTJmNzk2NDQ5YmEzZGM3MDI0NWVkNTA1Y2MwZWVlZTE2MzY2NDdhNjhjNzY3OWQwYjZkNjUxYmJhMzVjMjliODE0NzhkMTdjYTM2ODU3MDdhZDYxNmU2ZTU2MDQzODFmODRlZTUyYjI1YWQwMmZjMGRmYjg1NDMyZWZiMWZlY2QwOTBjMDJhZDAwMmMxODU3ZmNlZDg4ZmRmYjJmZjI2ZGQwZjUwMThmYjQ3ZDgxMzU4MWY2NTA4Y2E2MzdjNzM2NTE3N2M1MTNkMWVlMDU4NzlhNjVjNWI2NzZiM2FhODczYTE5MzVjNTQzN2VhZGNiNjZkZmIwNTJhNWU3YzNlODFkNDRiM2RhZjY5OGY0MjI0NGVlMmVlNGI2ZWQyYjdlNmU1NmU2MWZmOWNiNDVlNzE5ZmQ3NDYxOThiZjJhN2RlNmQyNWFmM2JjNmM3YjBlZDhhYmUzY2IzODlhZmQ4NGZmYTJhMjMwZDkzYmMwYzI5ZDVhOTQxOWNiZmYxMWI3ODgzMzI5OTIxNDgwYjU4NDQ2NTVkOTk2YzdjYWIyOWRmYjJhMzkyN2I4MmJhN2MzMDZjNDU3N2I2ZjhiNWRiZTJhZmFmOWJmMTRhOGY5NTU0Y2QwMWE2OWE5OTFiZjIxMjgyOGRlMWU2MzE3MmU4MzNkZTA2Njk4Y2RiM2IyODcxNjM4MDMxNDU3MmJmNWJjZmQzNGVmNTJhNmZhZGRhODdiYWJlNmJhY2RiMjBjZTYzYzcyNWNiMGZmNjFmZTMwYzFiNTFkYmRhMmMyNjI1Zjk5ZGZlYjAyOWEzZTU4Y2JhN2QwMTkwNTExMWNhZjQyZjI3MDI1ZTcyMGUxOGVlYjA3ZGFlOTE1NWM1NWFhMzAwZTIyZWI1ZTk0ZGM3YTBhODRlZTY3ZDkxYTk2MGFlMDhjYTYzMmRiYjE3MzdmYzlhNDNkYmNmYjNhODc5ZWI5ZmJmZmQ3Mjk5MzM4ZTI2NGJjMTIzN2FiNmE1YmMyYTI2M2NmYTk5ZTg1NDQ0MzlkOTYzMzE2MzlmZTk0MDhlNTRhMzUwNjEwZmYwMWRlM2Y4NTc5OWFkZWI3M2Q4MmJlOTM4MDc0ZGVhODU4ZWE2MzZiNjNhYmQKK1NJRzogODhmM2E2ZTBiYmFhM2UwNjBiYzlkOTFmZTI5NjhjNjExMjZiMjAzMTdmNTk4NDJlNGFlNDg3MTFjZGJhZjYyYzZjMDIwNzQwNWQxYzQ4NDk5NTAyNzFmMGFhYTc1OTMwOTExMDllNDc4ZDEzZjM1Njk2NGY3ZGJhYjcyOWFmMDAKKworVFNUOiA2MjQKK1NLOiAgMGE1NTI1YTQ1OThmNjA5OTJmODZiYTFhYjllZWU2ZTI2NzU2MjJmOTQzMjg0ZmMwNTUzZTQ0NDZhYzVhNGM1MworUEs6ICBkYjYwZDdlYTI5ZjhkNjBkYWQzM2QwMmVjNWY0MjIzMjA1N2JkMWM0YmQ2MTgwYTI0MmNiN2FiNmY0NDI2NzgxCitNU0c6IGY3ODczMjFiNDJjMDhkNDA1MjQ0OWE0ODg1OTNkODg1YjRlMGMzNGE1ZDY0MTQ5ZmE4YjljODVlZTU0YmNiZWNiNTA5MDliMmE4NmI4ODI1OGExMGUwN2U4ZjhjMmQwNjhhODlmYjE2NWE2YWNlN2U2NDk5OGJhNTdkODlkOWJmMmI4YjM4YTFmNmQ4MzY0YWVlMDVjZTMzNDhiZWQ0OGI4OGMyNDczYmY1ZjI2NjVmNTFjYTA3M2E1MzA1MzU4ZWFhZDQzNjVkNThiODNiYzk4MTRlMjVmNTRjMzdjZDliNjhhODA4YTU3ZDZjMmQ3ZDdiNmRlYjVmZTIwZjRmOTZmZTcyNWY4ZGU2NWMyOWE0ZjFjY2VmZDdjMmM2ZjJmYzAxMTZkNTg2NzZhY2JjNTg2OTFjNzljMmIwMDY3ODVhMDk3NWEzMWQ4ZDNjOTQ5MTYxNTk2YTA2OGFhZjIyMjZhYjg0MjU1MGU5YzBiMjYxMGEyOTUzMWQxZjNmN2YwMDgyNmJiNmM3ZGJlMDRlMjhhZTFiOWZmNmY4ODhhNDlkODI4MTJmNDUyZTFiMzI3NDBiMjM0ZGRkOTY0MmUxOGYzMmFkOWE5YWY3Zjg5NTI1Mjg2NzRhMmNkYTI1YjRmN2JhODY3MDA3ZmZhN2Y3OGYxNjNkYjhmMzY5MTQ5NTZiZmFlY2Q1MGY2ZDFhZjRlZTEzMzI3NWE4ZWFhYjk0YmJjMGFlNTJiNmQ5YjI4MzI2MzQyMzJlYzBlOGI1ZjgwMjJkM2VmMWVhZDliNzllZjlhMTY1NjQyNzcxOTRmMjM4MGQ5MDIxZTFmMTdiMTg0YjhkM2E3YTM0ZDE1MTM5YTM5Yzc3MjhjMjJlMWEzYTY3YTI3YTZjYTRiOGE4YTA2MzZjNjA1NGQwZjc0MWYwNDY2NzM2MTlmYzZiMDcwZTYyZmY0ODYyZjU5ZDI2OTAwN2YzNDMxMzM5NjM3YTg5ZjU2NGMwZGIzZDliY2ZjZDE5ZmMyNTEzOGFjNjZkNDc0ZDgwZjRhZDc5ZjZkMWU3ODQ0NDA4ZTg4MDM0ZWVhZmY0YTc5MDMzOGQ1NDZiZmNkNzQyNGMxMTllMjExZjM2M2NiODljODg4NzQ5MzQ2YTg5ZDMyZjAyM2JiNmIwMzY2YTFlZGU0MzI1MDMyYWEzNWY1MmU5ZGY5MzhhNTAyN2ViZWU5Njg4YWU0ODBkZGUxYTljOWI0MmQxYTljMDhmNzE5MjIzZGZhZTFjZmNkNDlkZDEwNTNhYWEzODFjMjRjYzljN2FiZmNmOGY2ZDg2ZDZhZjcyZWVmMDUzMDQ0MTJmM2RiMjU4NWFhOWUwZjNhNGYxYjZkNzEwZDAyYWIxMWRiMWZjOTBhZDRkZTI1ZDA0Mjk5ZjMxMjljMjEyZTljYjczYzAwNDc5NTM0NTViZjk4ZWM4ZmQyNjc0ZTQ3Yjk0OTk1N2RlZWRhMDE4YmFkYzlmMmY2OGExYjE4ZWY1YzU4M2IwOTVlMDhkZDkwNmRhNWYyMjBkYTAyOWI5YzQwMGUzY2E5MWM3Y2JkODdmMzQzMGM3NDIzMzdmNjFjZjU0NzQ1YjA2MjJiY2I5MDc2MmM2YmFmZWY4N2UxZWM4ODhjMzY0ZmFkNjQ2YzMzYWNjMjJhZjU0MzhiODRjZDUKK1NJRzogOGZhNmIwYWVhYzcxMTMyYWQ4ODI5NzU4NjhmMWJkYjhjMTFmMWE2YzFiOWM1NDU5NGUwZTQ2Mjg2ZWE2YzlhNWQ2ZDViMGVhZWFjYTlhZTNhZjc0ZTcyMzI2YjNiNmYyZWFhODkzYzBlYzQyYTQ5YzU2ZWY1MTRmNzVjNzdmMDEKKworVFNUOiA2MjUKK1NLOiAgMmQ1ZGRmZmEyZTU4YzkwNDUxZWEwNWRlNDdiOGM0OTIzNGUyNmNlZDU0ODU0ZTNhY2VmMTFkOGVlNjg1MmRhNworUEs6ICA3YmZkMWM4YTRhMGJiYjQ2MDZkMmU1YmMwOTBmNTZiMjBkNThmMjIwNGI2YWVkODMxZDNkZjRkNDA2YjQ3NjA1CitNU0c6IDRmMWM1YjRlNmZhYzNiYWEzZTkwMTBmM2JmMjkzYzc3OWU2MWZkN2JiZTA1YTU4NmY1YWFmMDgwMjYzNzE2MjdhMjA5YWNkMTg4YWZiMmRiZTAzMTE1NDc5NDA1NTk3MTE2NDBmNzhhZWE5YTYyODE4OTYyZjQ0NWE4ZTdlZDZmZTZjNWY0OTE2MmU3NDM1ZDFiNjI1Yjg4YmEzOWRhYjBhZDU2ZmQyYzBhZDY1MTI2NjEzNjJiZjc4YWZlNWExNDE2YjY0N2YzYjg4YTA1NmM5ZTcyODljOWIwY2MzYWZiNDM0MDIxOTg1NjM0OTNlNzM3YjFkYTA1MjUwNmI2YzkzMDZkNzVhZDY2OTNkYjZkMTU3MWY5NmY2ZjUyOTkwYzRkZjE5NjY1YTZiYjYzMDczZmRkOWY1NTU5Njg5NmEyZTljMjYyMmYyYjBjMmNjOTlkZGQxYjY0OWZiMDMxODA1OGQ3NDc5NGUzOGVjNjU3ZWJjODJhYmQ1YmVkZjhiM2Y0YmJhM2JiNmM5OTM1ZmRmNjgyNjUwMmI3NjkwNDZiMzZkOTZkYzY5NWQ3Yzg1NDA0Mjg0ZDJhMmFiN2ZjZjNiMDJmNjhhMTQ5M2RkMzgzY2E2MzM5ZmFjMWNkZTQ3ZjUzYzVlMDI2ZDA4NjlmYWZmZTQwYWJkYjk4MTk1MjMwZjE3ZDBjZmFhNTMzMzE1YWZkYmZlN2QxYWZjM2E2MTViNGY3NTA5MDIzM2E1MDNmODg2MWUzMjM3NGUxZWE5NTU3Njc0MjMxZDlkNzM3ZDQ3N2IzM2ZmODJhYzBiMmMwYmE5M2MxMWZiNTIzZTYxMzYxOGVkMzcwNTI0YTYwZjRkNGM4MzY5NGMwMzM2MDZkMWQwNjlkNTQ0ZGNjZDM5MDBjMzdhM2IzMzYzZWZiY2Y2Njk3ZjlmNzYyYjMzYjEyOTQ1ODM5NTNmYzUzNzczZWY1NjcyNmVlYjQ3MGViZTkyMTQ5YjczNjQ4YTE2MTYxZDQ5NDEyMGEzMThiZmIwODBjYzM4ZTQ5OTZmNGIyNjNmZmU3OGM3ODc3ZmUxM2MyZmM1NTIxOWY0NDI2MGU4ZjI1M2JkZDM3OWQ4NzBlNmM5MTA0OGIxZDhkNGU4OGI4ODIxOGIyYjA0OWZlZjUzYjJhZTFmOGM5MjFlZDJiY2I0MzQ2NjllMzk3NWRjYzNmZTQ1MjBjYTgwMjQ4NDJmN2ZmMmJhMWUyMmNmZWI1ZDRjOWU0MzVlYWRhNjAxZmYxODNiMjYzNjRlZWUxZmFhNTlkMTllNmFhNGYwOTc1MjM4NDk2YTcwOWU0NmJmNjgzMzZiMDY4YmQ4MGIzNDZmMTFmYWEzODE3YTA3ZDFjYmQ4NDM4MmIyMTAyOTg2ZjI5NWExMzk4MDc3YmEyOTFkNmI1ZjViZDg2MGVjNjE3NzI3MzQ2OGYwZWUwZjI1OTFiNTc1YzQzNjZlMTg5YjIyNGU5ZmZhMzViYzc4YTRhYThjMDY5NTRmZTMzZDA4MGZmYzBiMjNlMjA5ZmQwZTc5NDIxZjFiZGU4MThhODY4OTBjZjE3MjIzNmRiMjExNjU3ZDEwMDMxMTlmZTkxZDRlMjdjNTI0Y2NjMTFmYWRlMGEyNWY1N2E3YTFkNjc3ZTFkYTBiOWMwNDNkMDJmY2EzOAorU0lHOiBjZWQ5ZDYxMDEwMzM5YzQ3MWRkZjlmZWZjYWE4MmQxZWFiM2EyZTBlNjAyNzg1NTNiNGRkOWYzOTViZTU4MTQ5YzkxNTk0ZTU2MThiMGIxMGJmM2FhYjk0ZjE1OWI1MzBmNjQ0NjNlZWQ2NmZhMmFjZTU0ZmQ5MjU3MmEwNmEwZQorCitUU1Q6IDYyNgorU0s6ICA0ZGY1ZTExZGVjODBlY2Q4ODI4Mzc1NTRmYTMxMzViOWQ1MDI5ZGY0MjAyN2FhM2IzYzkyOTI0NjMyOWZlZTk2CitQSzogIGVmZDkyODg5OGZhMTQ0YzJkMWM4MzM0ZmEyZTZiNWI2YTMyNWE3MTAyYTJjMzQ0YTE0NTU0MWVlOWE2YzA0NmQKK01TRzogZmJkNmYzNzFiNGM4YjE1MmM5Y2UwYzYzOTZhNzdjMGZlNDgwYmMwMjAwN2YzMzZhYzU4ZmQ0YWRkZGE5ZDY5ODU1YWM5ZTkzYTQ1ZDNlMzUwZjQxZmY1MDJhYTFkOGZlMTU5Y2U4OWIwNjQ4MDJhMGExODkwZjZhNDBhN2VmNTdjNmU1ZTVlZDA0MDI4MGRmMDdlN2Y0OGZlODE5YmU2MzE3NjcxMDc1N2NiNmU0NDBiNGY3OGI1NzU5ZGNlMDI4YmY1ODViM2MzZmVjYTFjZjU5ODFkYWRhZGZkMjdlYTEyNGFmNDVlZjYzODU0MmE4NjE3ZmY0OWY5NDcwYWMyMjg1OTQzYzdjM2IxMTYzYjkwMzk1NWFiOTliNmVhYjE3ZjRkNDlmZmE4NzIwN2FiYmZjMTExYzRiOTFmNTQxM2RmYzliZWEzMTg0M2QxMTVkZGViMWRhNDBiNDVmNThmNDdjNDE3YjVlNzdkNTgxODkzNGU3MzBlYmE5YzQ1NTdiYmY0OGNiN2ZkNGU2NjQ1NThhZjRmYjQ0ZWUzZDk0YzE2ZTg4MzYzMWYzODQ3NmY0ODM3ZGI5NGQ1NDEyMmZhMTM0Y2E1MWE1MjVhYWQ1ZTI0Yjc2MDE4ZmVlOWEyZThmNjBlMmJiNDhkMjRhYjhiMTQ2Zjg0ZmZhOTgyMDEyMGU3YzUwZDQ1YzBjZmJlMzVjOGMzMTQxOWIwNzhlOTA3MTJjZmU5MzRjM2JlM2E5NGZmMjE1ODg3M2FlZmUzNGRjNmUzNjkwMmIxNjc1ZTFhNDdjYjYwOGRmZTk2MGZiNGRhOGQyYTg0OTBjYzM4ZWJhZGM3M2ExMDAzYzQ5NDFmZGE4ZmFlOTQ0YTFkZThlM2IxMGVmNmQ5ZTY3Y2VlYzc0NTk3N2QzMzNhYzllNzEyMTQxMjFlZGU4ODkyMjk1ZTI3Nzk5ZjIwNjY3NWE5ZDU0YWMxMjE1OWQzYTFmOTU0ZmQwZWVmZmJkMzBhMzE5MDRmYjJlZWU3N2E4YWE5ZGM0Y2NiYmUyODUxMDk2MTQ2YTRjZTBlODFmYjljNjI0OThkYmQ4M2JmODNiNTUwMjlhNWU5MDAwODZiOTUzMWNlMzI0N2E5OGY4NjU0ZWZkOGZlN2E4MzY0MzFmNzVkYWYwODY4ZjAxMDgzMjZlMjMwMjZkMmRiNGE3MjEyNGVjNGUzOWQ0YmJmM2Q4NDZjOWY1MWNhM2NjMzFlYjFkMDJjMmJhMzIxZTQ2MTlmMmI2NTljMGJmMGZlNWMxOWIyMTNmM2M3OTEyNGYzNjQzZjc0ZGQwZmY5Y2U1ZDI3NzI3YmU2YzY5NTgxNTljMTY0NDA0ZjQzMzAxZmUxNzQyZTI3OWRlOWVmZDQ0MWU3M2U0ZWE3YTg0MjU4N2E3OWQxMTVkMzZlY2E5YzAzYzkwZmYwZDE0NzQ3NDEwOWZjMjBhOTFkN2IzY2MyMmViY2JiOGM3ZjcxYmQ2MWU4Y2FlNDdjNTA1MGNlYzFkNDg0OWExZDRhOGU3YTZmODQ1NTQ4NDM3NzA2YzI1MzMxYzllNTdjMmNjNmRhMTE3ZjJlNWEwZjRiMzY4YzRjYjIwNjI2NWM0MTc4ZTA2NTVmZjY3NWZmYzFkNGM1OGVjZWI5ZWRiNGRhM2FkMmM1ZjYyY2QxM2FiNDgKK1NJRzogNjI1NDVlNmMwNzgwMWZkZTk1YjQ2MWUyZTc1M2M0YjZjODRjMjUxMjRlYjMzMGEyNzI1OTg5ZDVlMzQwZGNlZjBjNzQ1NmQ0YzdjNmExNzhhMjIxYjYzMjgzNDgyNTNkYjc4N2E5ZTU1MTBhYjljYzI3ODUxNWFlM2U1OGZiMDEKKworVFNUOiA2MjcKK1NLOiAgODVkMzIzMzBlMmUwNzNhNDYwMzBjYTBlZTJkZjJmOGViODc0YTlmZGRmNTYyNGM4MDMxNzc1MTExZjExZWVhMgorUEs6ICA2ZWE3ZGUyZWQ1ZWE1Y2RmNTBiZmZmZWU3N2Y3YmQyZmNjMjFkNDg2NjZiYjFmNDg5MGM3NmE2OWNjN2JhNGU4CitNU0c6IGFlNjEwN2YzOGZmOTRlZDAzMjc5MDNjYmFmNmMzZTNhMzQ5OGM0N2FiYjI5ODlhOGIzN2IzYTE5ZGY4OGM2ZGU3OTBhY2NiNGI3MjU4MTc3YjkxNTFkMWZlMDQwNjM1NzdkM2MzYWNkYjRjOTI5OTY4YWZkYWQ2ZjI1MmE2N2VkNGNhODlkMDYwZjFhNDY1Mzk4M2Y3YWI1OGRkYjkzZTI4NzhmYmFiMDYzN2RiYmViOTVkMjVjNTk4NjgzOWRlMjc0OGQ5ZjM0MDI3YWVlYmYxZDllYjkzNmNiNjc3MGUwOGQ0NWI4MDk1YmFjOWNiYjcxZGIxNGU4YTM0MjIyYjFmMjIzN2I5ZjBiYzk3NjZhMjMxYTZkMTAyNzk5ZjdjMDgxZDUwMGZiZWFkZTYwM2NkY2RkN2Q1Yjk2NWZiYWNlNGJlNWMyY2Q5MzJkY2Y1ZjZlZDMxNzIyZjQxZDVhMzYzYjM0YmFiZjNmNjM2ZmIzMDM4MjRhYTcwMWRmZTFkM2U0MTI2MzA3OGMxZWJiZGNiMWY3M2YxMjQ1YjgzZTNmYTcwYWI4ZTNmMTQxM2U2YjA2YmRhZTAyMmI3MTRkNjBhNDAxZDU3NDgwZGM2NGU3YWFjNmQzZGU4NWZjOTRkODUzY2ExM2I3ZTY3NDE1NTc5ZDVjNjcyMTIzYTVhZjE5NGJlZTE0YWUzNWRjMjcyNGZmMjA5ZjExNjY2Mzg2NjFmODgxYjExOTRhYTRlMzFiNDJhNTI3OTY0NzgxNTkxNTA0YmE3NjEwM2Y5N2I3ZjU1MjAzMTU0NzNlYzk0YmIwMTdhMTY2NjdiMjJhODU3NmE3Y2MyYWMwYjc3NTYzMDNjNzU2ZjBkZGFhZTlkMDE4OWU2YzhkZTM0OWY5MTk1N2M3MmE1MjllOWY3ZTliOTQ1NjUyNDg0MGJhMDIzNDRmNTVhZDNjMTFhMGIyNTk5MDE0MzlmMjY1NWFiOWY4YzZjOGU4ZTk2MGMwNTdkOWM3ZGFmZTQyNWM3NWQ0YTMzYjgwMWQ0NTQ3Y2QwNTUxYTY4MDJhODAwNWRkNzI0MjQ3NjRkY2Y1N2U0YWEyMjI5MGVhNGY1YmFhYzUxZDc5MzljMDUzNDI4ODJlZTE0MzgwZWYyZDQ3MDRiNDE5NDliMjI4MmExZTFhM2ZhN2RkZWE5ZmU4M2I5ZmM1MWQ0ZWVmYTJlYmFjNzIyZTRjMGE3YzU5OWI2OTI1ZjAxYjhhMjA2NmRjMGMyNmY5MjE5NmY0ZjUwM2U4ODdjMWU2ZWZiMDkzZjE1MzEzODdiZDg4YzY5MTk5N2I5Yjg5ZTNjZGY3ZGExMmQzNzM0MTgzYTRiNjEyNmJlOWUwNzc0NzA0YjUyOTY1OWI1NTQ4ZjFiODc1MTJjYzE4NzhjYTRlZjU1OTkwYjQ4M2M5YWY2YWE5NzYzNWY0ZjA3OTQ5NzI3MDY1YWJmMjFlMjFlMzI5OTBiMWE3ZDA3ZDc0ZTAyZDliMDdlYzYzOTkzMWJmOWUyY2EzOTQxZjJiYTZiNWVmMTRkY2MyYTI0N2QyMTE3ZTljYjQxZWZhM2ZjY2EyNDcxNjY0MTQ1MmJlZWQyZjkyNjU3YzJmYjczMWYwYjk0ZThjODkyYTgxYmJhOTFmNjM5ZGY0Mzc5NmFjZDMwMTNhYzA0NGY2MDgKK1NJRzogNDE0MzYzZmVhZDZlNTlhMzQzOGNlNWEzYTI3N2Q2MmJkZDAwZmEyZWZhYzY0NjNkZDEzZmNkZGVkOTNhN2YxMDhhZTFmNTI4ZmZjOGZmNGVjYTMzMWRhYjkxYWU1YjE0MTZlMmRkYjczYjZkYWY4NTNiMDNjODFlOTkzNjU2MGEKKworVFNUOiA2MjgKK1NLOiAgNjY1OTBkMzY5OTg0YzZmNWFkM2E4OWM3OGRkZmNhMTBhMGE3NjU3OTk1ZGMwMTg4YjZiNTdhYzMxNjQ3MzFhNAorUEs6ICA5ODg3M2FiMTMzNDZlZTQ4Njc3YzRmODYxMmRiMzFlYmQxM2RiNThiMmIwMzRmZDE1NWFmYTg3MjBmNGU5M2U4CitNU0c6IDJlYzFjNmIwODI5NzM3ODMyYzljNzk4YTkyZWI0OTBiMjNkMzM0YzNiYmU2MjdjYjU4MmQxN2E5ZTQyOTYwZWZjZGM3ZDM0NzUwZTBiNGFhODY0YzIwNGZiOGQ2MmI0Nzk5MmU5MWRiZmNmZDY5ZjUxZDkzN2RjMDZjNDhjMGFkNDNlODU5ODM3MWNkMGUzYmJjZTQxNmJmZDQ0YjA5NDRiOTkzYWEyOTkzZmRlYTQ4NzEzNGNkZTQyMjc3NzIzZTA2ODNlYzk4ZTY5NTk1ZTliN2IxNGM4Y2Y5NjE3YTFlMzBkZGI4MDYwZWFjYmE0OGQ4ODI1M2IxNjUzMzYxMDhkZTBjYjAyZmYyMGY1NDI0YjU2NzgzMDg2OWM5YjQzMjljOTk0NWYwYmYyZjNjN2FjZDFlNzc0MzU4OTMwY2Q4OTBmZDljYjg2NGQ5NTA5MzVhZDhhNGEzYmVjY2FlOGY4MzNmNjM1NjE5MTM3MWMzMjYzM2RjZjg4MjcwOWIwZDk4YmQ4MDdiMzgzYWVkOGQ3YmIwOTdiNmUyNjJlZjcwMGM5ZDc2OGY0YjU2OTBlM2ExYThmMjE3NTVkNjU4ZGIyZDFiZmQyZjcwNzFlMGNhZWM3YzJjNTM4MWM1ZWY1YzJjMjI4MWM2YmNlZGM4NjczOTBiOTBmM2IyN2IwZjBmNjRhMzM2NTg1NzhhNWMwZDY2ZTIxMWU2ZmZmNmU4NjQ4OGFjZjgyYmMwZjVlMjY2NGI4MzY5OTA0NjAzN2MwZDMzZDM0MGZmOThlZDYyNjMzNTRjMjQyNzMxMzZmZjBlNGYwZjIzM2E2YzgyNTRmYzBjOTA3NjQzMzBlM2IxMDU3YjFlNjY2ZDVlY2Q1YTJlZmVhYTZhMTA1YmZjODU4NDMxYjg4ZWQ3ZmU1NTFlYjMyYWMwYWYyN2M2NmE5ODAzYTNiY2Y4NzYzNGM2NmM3MDY2ZGQwMTk3YTNjYmQyZDZmNGU2NWNmZGI4ZjNkYWY5ZjNjYTVjNGY0ZTBhZGQ0NWY1NTQxYWExOGQwNDFmNzA2ZTRmYTg3YzM0ZTlhMjIzZDg4NTcyZWI1MDA4M2VlOGM3YzQ3NWRmNTY4YmM3M2JkMDhjMGYwZGVhYTM3NGFmYjFjMTc4ZDBkZGRiMjM2ZTE1YThiYzIzODVlZDNmNTJiODc2MWU2Mzc4ODc0MDdhMjBhZWMzZTk5ZWM4MzBkYWUzMTY3ZWYwY2RiM2YzZmZkMjAwZDgzYjc1Yjc0OTY5MGI5ZTI1ZTIxNzFkMDcyY2E1NmY3MWJhZWNkMjFmN2Q0NWExMmM5MWIyYzBmYjNmZWEzYjE1OGU1NDY0ODI4NGJiMDA5NWIzNjI0NGIwYjEyMWY5ZjEzODRjZTkwMDQzNjVlNzc3MmZhMzA4MjgyNTBmNTE5ODVmMWIxN2IyZDJmODBhMzNlOGZjNmQ4NTY1ZWExNWNkYWFjZDQyYTg3YmQ3Yzk0MDhiMWZlMWM3NzA2NjViZGRlZDc1NGJjMmZmMmVmOTFiOTczYTg2Yjk5ZjEwNTljNmYyMjcyNDZhNjk4YjM4NTQxNTA5ZGQ1NDQ5ZmNlNjBkMzg2MjI0MTgzYjdkY2UxYjM4ODRmN2JhZTFjMmU0ZWI1OTQ1MTBiNWNhNTg1Mjc5ZDkwNDFkZjg4MTdiMDYxOQorU0lHOiBmMGRiNjNhMWJjNzYyNDE2MWNhMDA2Mzg1M2IyZGVlNDVmY2NkMjI0NzFlMDEyMzY2Zjg2OGE0YTljNzQ2NTRlMTNmMWEzMTVhZDgzOTE2ZWJmYjhkYzMxYTQyMGY4M2NmNjQ1YzRjOWQxNmJiNGQ1ZDk5ZDIzYzdiNDNlMjMwMAorCitUU1Q6IDYyOQorU0s6ICA0MWNmMDcxZjQ4NDJlY2Q0OTQxOTFiOGNmMjhjYzA5MjMxODVlZjFiMDc0NThhNzlhNTlhMjk2ZDM1NDk4MjJlCitQSzogIDZkYzhlNDQ2ZGIxZGEzNTNiNThkMGM0NWQ4YjRkODE2YmE1OWUyNWJiNjgwNzEyZDYyZDZkM2RiZjc4ZDA2OTgKK01TRzogZGFlYjVmMGU4NGYxNTkwYmNhMmI5ZDk3MTllZjVkMWNmYTc5ZTA1ODM0NDYzMzJmMThlOWU0ZmViMGIxZjE1MzQwMjk3YWM5YWQ2NzI0Yzg1YmIxNjU1OGVhNTRlYjVkNzAyYTQ3MjQ4YmFkYzYyNTJhODA0MzcxYjc0Y2ZlMTA2MmQxZGJhMWVjNjhmZDFkNGRkMDI5Y2I1NTAzNGJiZjYxMDY4MjUxZWZmMzk4MzYzNmY2ZGViZDU3MjdiZTkxOTkzYjNlNGQwYWJjOTZlYzE5NjQyMWE0N2I3ODkzZjgzOTg2ZDZjMDMyM2YwZDE5YWFmMmNkZTlkMzU2NWMxMDRjOWQzMTc2ZWNiNWVkNWUxNzNmZWU1MmI1YTBjNDJiNmFiMmZjYjFjY2JhOTY0OWMyYzY3YzUyMGU5Yjk2Y2VhNjkzZGYzZTU4NjA5YWQ2YTBiZDUyMmVmYWFmMDM4NThkMjQ1ZGQwYTM4Zjg0YTJmYjEwMjBmNGRkOTdjM2FlZWYwZTI0NDc3ZDMwZDI1NjcwMWU5MDBiZWYyNmE4YTYyNjlhYjY2MGQ3NDI5M2EyYmYxZDIwYzJjZmFlYmI3YzI4MjBmNWY1YjA3NDUzYmI2OWVlNzY5YjUyMzkxNTM5ZjBjNjA2ZDIyZWIzOTIzZWU2ZjVhMWQ0NjA1MGFmOTBmMDExZjg1MWFjZTc2MzI3ZDNkMThjNDgxNzBhOWEyNWIwNGI3NzBmZDkzOGVmOGEzMGI3YmQwMzM5MWRkMzZjNTE2YjYyZjBjYjc4NjcwNzQwZTAwZTY5NTk1YzQxOGQ5NjcyNTM4MjBiNzU0YzRmZDY2NmUzY2NlMTZlZTBjOTQxODNiYmVhNzA2ZmUyOThlMWM5OWRkYjgyMTIxN2VkOTAwOGNjOGU4YjgzYmM4YjgxOTkxNWIwN2IxNDZmZTc0NTAyNGFjM2M0NjExNmNiNGNjZTVlMzJlYzVkNzUyNGEyMzg4ZDlmZTI5N2ViMDI4MTFhZjQ1NDZmY2Q1ODYwZTE0YzBkMTNmMDNkZDc1YTQyNDk2MTU5MDAwNzhhM2MzNThjNTM0Mjk2MmJjMWJlYWNmNjhjMjQ2ODIxYTQ1OWFiNTMyMWVjOWY1NzRmNDlkMTAzODlmNDBmMTRkZGZjODUxM2ZmZTNkZWFhNzMzNjAzNWE2NzVmYTU4NThiNDkwYzVkMjQ3NzgwMDY0YWRiYWY3NWE3NjMzNWVlYzlhYjkxODc3MWIwYjFkZjUxNDc2NDJhZWY0YTE2NmFiMTcyZWQ2MDFmZWQyMTBmNmMwY2ZmZDkxODY5Zjc0OTBiNTdlN2M2NTI0MTg2M2U3ZThjMGEyNmViYTYzYjUzNDJkMGZkODIxNGFjNzMxZTFjNDM4ZDAxNzcxMTVmNmExOWUwOTM1YzdhZjZiYzdkYmViNzU1MTFkOWJkOGU2M2UzZTJmNDdhYjBkZDFjZWRkN2IxODBkNzRhNGI0NGQ0NjExOTdhZWZkZDM2MjA0NjUxNjZhMzliNDUzOTUwNDNjZTg4NzRjZGQ3MmM2MDJiZDNkMmVlY2JhZDM0NjZiNWNiMWFhNDFhZTkyYThhZmVmMmQ3NjRjZWMwYzQ0OWQyN2VmYWM0Mzc5MzhmMjgwYmVhOWM1MGE1ODJlNTdjMjdmOWIzZGU4NzJmMGMKK1NJRzogNDEwNTJiYzQxN2IyNGRjNDgzODM5NjZhZjAxNDNmOWMwYmE4NWJiZWZiZGFmNzkxYjE2YTRkYWQxZjU3MGViODA3MDNjMGEyY2RlYjJmN2FkNmRjZDNmYTdiZGI1YzIyNWU4NjljZDhmYjI3OGRmZjA2NjdkMzhhY2NmM2RiMDgKKworVFNUOiA2MzAKK1NLOiAgYTJjOGUxNjFhOGQ5ZDZlODg4YzNkMDliMGI5NzI3MzczMDdhMmNiZDJhY2Q3Y2NkODA0ZDI0MzFhYzZjNThkMgorUEs6ICAzYTMyNTc3NTg4NjczMmRlY2E0MDY4NTdhODA1NjAxMGFhZWEyODc1NTQ1YmE2ZjNkZjMwNzU0NTcxMzg2OTkyCitNU0c6IDgzYTNiZWJjYWM1ZjI4YzU0MzNlM2M0ZjFlN2JmNWQyZTRkY2QyZjVlNTlkYmVlMGE4M2IwNzAyNTcxNTM1MDc0NmY4NTY3NWYxZGZlYTM3NGFhN2Q3OTQyODdiODkyZWY5MDk3ZmY2ZDJlMTIyZjBhNjU2ZmJhMDc5OGNkY2ZjYjM2NDVkZmNmZDc4OGM3NDBjMGZkMDQ1MjBlN2EwNmEwMmEwNTgyOTYzMGEyYmYwY2RmZTJlY2NhMDA5ZWM0NDA0OTk0NmJiMWQyMzI2ZGRkNjFkN2VjNjQwYmY2OWViNDRmYjIzY2MxZmY0NzhjNTcwYzc1ZGI3ZTc2NmUzNWI3YzQzZGI3MzY4MGQxNDA3YTk0Mzk5ZmI2MjFiYWYzODQ1NzQ1YzFjNGVkMGI5ZjBiNDg1YmUyZDUzYzU2ODU0NWRkZjE4Nzc1YTgzN2EwNWQ5YzkxNTdiMDg0ZThjZDAxZmMzMjRmMDdmMTE2ODc3ZTQwNzVkYmEyNDMyYzhhNzc1MmU5ZTkzOTU4NmFkOTNmMGMwYWE1ZWRhYzk0YjhkODJlNTQ0OTk5N2IxNWI4Yzg5NjE1ODljNDQyODIxYWE4M2I2MDIzOWVjNWYxNThjM2Y1ZTllYzViZWE1MTE1ZDVmZWQ2MTkxOGU4ZmNkNWJjZTYxYzc3N2YyMGI2YmZlODAzYTY5YzZmYzc5NGFiOGM1N2RmMjcxZGE4NjM4NzJhNjEzMzViMWZhMjlmNDYwOGZmMDM3ZjcxMjA2OTgwOWNhNjQyYTAzMDdjNzlhYTkyZTEwY2I4OTNhMjlkMTcyMDFhMGI2ZDFiNDZhNzIxMmIzYmFlYzk3MDNjMGIwMzkyYmE2Yjc2ZTVjOWMxMGY4MzU5OWI4MWVhMjIyODNmOTU0N2FhY2RhYTdmMzA4OTZkMWZmNzMxZTExZmI5ZTU2YWQwNjAzMDQxNzExOTgwNWJhYjYzNTIxNDk2YzNiYjkyYTEyZjVlNTVhZmNmNjBlZDQyMTc3MzdmMzA0NmIxNmNhNTA2NjU3YTZkNjk2ZDc1YTZkOGUxOGU5ZWZlMmIwOGM4YjFmYTA3MjgyMzhlMjdjZmIzMjIxNjZlZWU0ZWU3Njk2OGI3NzdiNTBlZTZhMmI4MDRlMWU5YjQ2MDE2NjIwMTMyYjY1ODg3MThkOTc4Y2EyYzAwMjY5NzljNDAwZDNjNTMzNjc1MTIxMGYwYjAwZDI2OWVjOGY0ZTJmOTU1OWUxODAzMzJkZDI3MGU1MGNjOTQ2NWM1NTU4OTM2MzU1NTIxYmMzYzk1NjBmYzE5ZWMxNDI0MjEyMWU2YmIyZmZmOGY1MDMzN2ZjMjY0YWNmMWFjMTcwNDMyODMzNGIzYjUyY2JhOTZkOTMwM2IxYjVkYjg1OWRhZTMxZDgwZjE3MTFmYmEyNTFlMTBiNGQxMjIxMjhmOWZhZmY2ODcyZDBjMGI4MWVlZjU5NTQxZjgzMmIwYTlkZjNhNGNkZDU5MWM4NzczNmIxYWVjZjI0MmMyNzVhMTBjM2ZkNjc4MzlkYWQ0ZWYzOTliOTQ5NGVjZDc3ZjdiYTViNWQ0ZjJjYTMwNGU1YjIyOTIxMzA3Y2IxOGZhNjRhYTNkMDFjNDQxMWM4MzY5Y2NlZGU0NjVlZTM2OWVlNjM3ZDQzZDI4ODI2YmY2MGRkZGUKK1NJRzogNTYwZDAxYjk0ZGYxMWQ4MzM0Nzc1MmZmNTFiMzU0NWVmNTVjNTYzMmFlN2M4ZWZiMTFhYWRkODMxMmRlZjcyNTYyZThmNWQ3NWVjZTEwYWQ0NmJjOTZjODYwZGVlY2UzOWU2MzRhNWY1MDY1NGQ0Y2RiYTg0YThlNmY3MDI0MGEKKworVFNUOiA2MzEKK1NLOiAgZDNkMTg4YjM5MGJhY2NkOTUwMjQ1MjYxNDZiODJiOTE4NGUxOTdlNDZhOTM0MGEwZTZlYzE4YmY3NWJlN2ZjNQorUEs6ICBkOGY3OTQ5NDhhYTY5ODYxMDAyMTRlOWI3YjkwMjQ0MjA4MDZiNGM2Nzg0NmQ1YmQ1MDYxMTNiMzUzYTJlYTNkCitNU0c6IDVlNjU2NThlNDIwMzc1NDMzZmQ3YzFmNmJlNjc4ODQxZTU4MTA0ZjEwYjRjNjc2MzU5ZDg0ZmNlNzk5MmY1YzU3NTU3ZDczOGY4MzBiNTA1ZmEwYzJiOWVhYmY4ZDFhOWY4MWZlOGYzMTVkNjYyZTJiODRjZTk1Mjk5ZWJmNGU1MDNiNWUxZjdmOGNkYjY2OGFlNzMzZjNkMGNkZDRjNzQyYWI1ZjI3MmJlYTRmMThkMTgzZTg5MjM4NDc2NjJmOWEzOWNkNGIxNGVjNzZkMTEwMzJmZTU3M2MyNjIwMWFlZjY2NjAxY2VjNjgzZTM0Yjg5YWZkOTY0ZTk4NzgwMWM3MDZhODVlMjdiYWIzMzcwMWNkMTA5YmNmMDdiMjdjYTY3ZjAyMmM0OTRhMDRjYmU1YTljNmQ2M2FhZDkzNmNkZjFhMTgwZmQwNTg2NTE5OGI5NmYwNmE3OGRhOTU3OTlkM2FhNGRmM2IxNzAwMzNjNjllOGZiMDQyODhjMzU0NjU1M2I1NzljMGFlMzkzODA2MmQzZDg0MjFjZmE2NjI2ODUyOWJlYzAyNzFlNTNiNGVlN2QwOTllNzE0OGE4MDJkZjgwZmU1ZWVkZWUxYzkwM2FlOGVkNGQ2NDBlYWQ3NjEyNjJkZDQwMTRmMjVmOTM5N2JhM2YxYzA4ZDgzYTNjNDg1Y2ZiNTVmODk5MTlhYTk3MmQ2YjdlNzcxMWJlOWUzMGMxZWI5NmEwYzM4NDUzMDlmYjIzZGJjNzViNjk5MWRkNmU0OGNkZGU5MGUwNGYyMjhlOGNjZjNiYTIzZjI3NDdjZmI5ZDMzODFhOTMwNWY4MTZmMjZjZGRlNDFjMDIyMGZhZDIyOGZmNmE4YjA5NWM3N2I2YmFlOGZhMzM2ODE0MjcyNGJmMWY1ZTBmNmZiY2E1MzIwYzIxNWI2YmE4NmI5MWUzYThhY2Y3NTBlOTNmYTdlYWE2NWM0Zjc4NWVmODQyMWExOWMxZTI3YmMyNGI0MjhlMDhhOTAyNDJhYmFjOWJkNGFhMDNjNjU2ZjhmNDZkYzQwYjM2MTUyYzFiZDBkZWYxYWNmYzBkYTEwYTJmYTFkYzNkYTdhY2U1YThmZDc2MjI3YmIxYTYwMjM5MGZlNTdhZmQzMmVmZTI4MWYyZWE2YjJlNGQyNTQ1Y2I4OGQyMzA4ZDcyNjkxYzlhNTJiNGNhMjUyMzFhMDEwN2YyNWQxMTdjYzkzNTM5NzYyMWM2ODNiZGM4ZjIyZTgxMDM0MGYyY2JhYzRjZWFhMzQ2ODY2NTI2MTg3OWYwMDc0MjAwNzQzZTBkZTVmM2U1ODMwOGI5OGIwNGI4YzcxNDhhNGUwMDRlNjY3ZTgzMmIwMDg0YjVmMmJkYzZmZGM5NTlmMmZjMjhhOGQzMWQ5YTllNzhlNWQ1ZjljMGIxMTllNWZmMWY2OGY3YzBkYWYwYzBmMTY5NDdjY2E1YjdjZWQwOTYwMWUyZWJlZDI4MmVmMmJmOGZlOWEyN2VkMjdmYzViY2RhOGFlZDZjNzFiZWUzZTc3NTEwMDQ0NzI2ODliYmY2ZDlkMDc5NTJhMjQyZmY4NzBkN2MzZjVlMWZmYzJjMWY0MGZjOWFiNzU3OWIzOTJiNTU0ZjNkYzU4OGMwM2FiOTU3NDMxZmU1ZDAyY2JjNzExYWQ0ODlmZQorU0lHOiAxNjk3NmIyNjdkZTk2ZTM4ZGRkYzg0NzgwNzVmNmJkZDcxNTllNTYzMzRiMmQyZDE5MjA5NDYyOTRmMzNjZDZiN2Y5YzUwZjgwNTdmNDk2Y2FiNWQ5NGJiNGRjYTI2MmY5ZjBmZGY5YjFiNjQ3NDFmNGI3MjJkMzJlZmE4MjIwMworCitUU1Q6IDYzMgorU0s6ICA2MTkxN2E5NzVjYjdlYzU2NGM3MDhhNTY1Mzg4YzU3MjM2YTY2YjY5N2RjZDVhN2YxMGJhZTY3MTU3MmFjN2YwCitQSzogIGVjYzBmMGI5OTI3NmU1MjhmODJiNDJmMmVmY2U4NTc5ZjgzZTYzOGM2YWNlZmQwNzI4MjhjMDRlNDM0ZjU1YWYKK01TRzogNmU5NzBlMGIxYzkyYTdmNDk2YTgyZDhhZTgwY2ZkMGNjZWYxZDJjNzk5ZDQxNzI4ZjM1ZGRjZDYwM2I0MjFjMmE1YWIzYjQ4OWU3OGY0YjYyMjk3ZGU0MzdjNWFkMWE5NjgzZmY4N2ZhMjhlYjNjYzM4Y2UyNDJhZjU5NDE5ZjlmZDQzZmNhYTU0ZmMzOTg5OTJmOGM4ZTMxZjJiMzNkY2NjZDBlZTExYmE3YjM4OGU4ZDJhMzZlYWQwNjdjNmJlY2VkNTg5MGFiN2Q0YTk0ZjU1ZGFiOTIxMjhhMGY4MTRjMGU2ODk3MWRmNTdiZDUwNzhhNzQwMzE3NWM3YzJmZGQ0YTUyNDQ3MTUzYWIzNzQ1NjcyOWFlZTMzZTVmYzkzZGI4ZTdmNDgwMzA5ODc1ZWNmNmRiMDdjZTdmM2NhYzVkZTQ5ZTM2MTI3NWNhNTBiNmI3MTlmNGI3MTViM2UzMDg2M2NiYjNiNzE2NGJhOWViOTZlZjMzMDRiMTlhZDRkNzRkY2U0YmQyNWU3N2JiYmJlZmYxZWU3ZDFmYjU1YjljNGY3ZmM0Y2Q5YmQ1NTEwOGFmY2Y5OWMxYTQxY2Q2ZjZiMWFkYjI5N2IxMDZjOGJhMjRlMzEzNGY4N2RkOGVmZTVjZjg1NDkyMjkxYjk0ZDY2MDA5NThjMjhiOTEyMmZlNmUwMWJkM2UzMjllNDJkMTkyNmI4OWY3YThjNDBhNDk4NjdlNWFhM2FkNzQ5YmQ5OGRhZTdkMDA2YjQ1MzYwOWU3ZGFlMjYzNjRkOTE3MmJlNzI4MzMzMDEyMWVkMmI0MDI3ZTA4ODUxMTg3NDNhNmVhMGNiN2RjMjc0MDlhOWIyODIwYmNjMjQyZWExMGEwMDkzN2JmODQ5MjAxZTBmYjYxOTk0MjFmMTYzZTk3OTRmMmRkNGIzMzIwMTRhMDlkM2VlODA3MWRhNzg3NzQ3Zjk5MGY1MTc5OTE5MDI3ZGRmZjdjYWIwZjU1ZTlhZmE4ZWNjYjE2Y2MyZGQzY2JiZWFkN2ZmN2VjODE4YzI1MzM5M2Y3NDg3NDFmNTU0MDdmNzQwOGVlMzNhNDJhZTJkNmVjYjNmYjYwMGE3MWYzMGFiNjMwNjA2ZTU1M2I0MzY3OGU1OTg1NGYzYTI5NDdiY2Y0ZWEwZmNmZWRjMzE0ZDgzNzBkMTI2NjM5NWZkYTNjOTEwNWU5NzU5NTJmNjBlMzA4NmJiODI0ODE1MTNkNmZlOGFkYjRmOTVlZmI5YTk1YjY2ZDQ4MGQyYmIxNzEwNzhjZjQwNjg0YWM2OWE3ODljN2ZiN2ZhNDI1MzMzZDcwNWRiMDAwNjY3NTVkZjcyOGRlMDJkZjI1YmFlMzRmMWQ3ZDQ5Y2FmZmM1MWU5YmEyYjEwYjk4ZmU0Y2Q5ZDIyYjc3NjRlZDkzMWVkYjVmMGI1NTQ0OTZlOTk1MzkxZTBhZjBiOGQxYzdhODI5NWE4ZDE1YTdjNjU1NmQyOWNiMTllMDg1NWNhNTA1YWQwMWQyYWEzMDkyOGE4NGJjNDg5NTk1NzZkODEyZDliMjdiOGU4ODg3OWZhYTI4MDZjMDg0MTM2MGVjZDBmZTgzZjViODQ4ZmMxMmY2NThmMWU3ZjQwZTU2MWMyZTc4ZDNiMDEyNTIxMGE5MjA2MWMyZGIyMWJhNjYwZTg2MDhmZjUKK1NJRzogNmFiYjNlMzc3YjVjODBiNzRmNzcyMTljMWE5ZTA5NmZiYTBlYjY4OTkwODE3YWNmZjEyZGJhN2Y2MWM3N2NjZjU5NWZiNjYwODU1MjAwM2NlYWQwNmNhMTMxN2M5Y2Q1MWFjNDcyNGIyOWY0MDkyMWZiOTI4NDMzNzY4NzY0MDEKKworVFNUOiA2MzMKK1NLOiAgN2JhMjVmMjc5N2EyODM2ZjM3OWQ2YmJjYmU5YWJmNGYyZGVmNWU1MmY3MmJkOWUwYjAwNjU3MTAyMmZhYzJmMworUEs6ICA2YzJlZDRlOGMwMTI0ZDVkMDU0MDc5NmQzOTQ1ZDFkZTcxYWE2OTY5ZTZhYmVhMGYxYjBlNmZjNDI5YzcwNDZmCitNU0c6IDE3MWEzNDA5ODc4MDk3YjNiMjJiMmMwMDY2MGI0NmU1NDJjMjE2NGMwMGJiZWU1NDU1NDgzNzk0MGU3MGYwM2RhOTkxNmE0MGY5YmRlODI4OGY0NWU0N2JlZjdmZmU0ZTU1N2NkNDQ3NDA0NWU3NDBmZDk1OWQ5ODRmNGVjODFkYTg4ZDQ0YTM3M2MxZWRhMGNmYzZiMDhlMzUxMzczZDNiODJhYjA5MDJkZjgwNjNmZDkwOGU3MDNlMGNiZWM0MTBhYjVjZGZlYWFlMDAxODhjZTJhZDQyYjhiZjA0ZjdkYWE1ZjBlZTMzM2E2ZjkzMTFiNGFkOTgxMDk1MmQ1ZDVhNjRiMjBmMzdlODQ1NDE1ZmMzY2RkNjE2ZmViZWM1MGRiMjk2ZmIzZjNiYjdmNmIzNjZiYmU1MmU0ODk3YTA1NjE3YmY3Yzk4MWE2MmVkY2JiYmU1ZGE0YzM5Y2FmYTg2OWFhMmIyNzM0ZTZjZmVkOTBlZDhiZTc1OTQ5MzkwZWU0NDU2Njg5MjQ1NWI4OTBjZjU2OGI5NDVhYWJiNzU4ZDM4NTRiZTY1MzlmM2I4NmJmMDFkMTg4ZTQ4Y2YyNjI2YTBkN2QzODE3MDNiZTZlZDEyOTBkZmI5NDdiYzJlMGY4M2RiYzU4NzAzMDgwZDdmNWI5ZWYxOWFlZjkzMDkwOGY2OGYwYzgwMDEwYTk0MDFiMzAzYTlmNmRhODA1YmI4YTBlZDBmMzk0MTNlZWZlZGY5MTlmZmQ4ZWE2MzkxYmY5NWQ0MjI5NjA0ZTQ5NDU3YjhlMjNiZWM2MTE0ODRjYzdmOTgzMmRkOTViZGMzYWQxNzdjMDUwZjRhYjYzM2RjZGIzZTY5MWY1OTAyODczYjM4Y2IwNzIwYjkxMTMzNTdmZTBjZmI5OGE2OGNjY2I1ZDVmMDgwOWQ1OWEzNzVjZjdiNWEyNzVkNDNjNGMzNGZmNjhlNDQ4NTI2ZThlMWFhZDQ0ZTIwMDA4YTIzMmFmYmNmNTMyYTQyYjUwYTAyNWExYjJlZTRlMDc3ZWIwMTI1YTU5M2Q1MWEyMDBlYzIwZDg3MmMwNTgzOGFkMzZhYWFlZWNjYzNlZDllZjQxZjZkMTIyNjcwMjE3ZDVjMDhmNmUxM2MxNzIxOTQ1ODlhY2MzYzU5ZjdlZjc5MGM3Yzg1YWE2ZDVlYjY5ZDRjODlhNzJmNWU3YzkyNDY5ODVjMWFjMGM1ZDE5N2Y3NmE3M2UzNzc0ODM5ZDRhYTIwOTZhY2ExOTBhMzBmNGFhYzU0MDU3YjY0ZjM1OGUwZTA2NDAwYzBkZjJmODc2NDEyZDM0NDg0YzQzNDRmNGQ3Yzg2NjUxN2QzZWZiYTRhOTBmYTcxNDRjOWJhNWRiMzM2MWRiNTc2OTQwM2VjODE2MjZhNTExZjkzZTMwZjg1ODZlYWRmY2FmZDlhMzZlY2ZmOGQyNGI0MjA3OWFkYThlNTc5YWMzMDg1MTE3N2JjZTkwMzhiMGUxMzAwMDcyZDY4ZWZkZDcyM2Y2MzU1MDY0ODQzMjc1ODE1YTY2YjlkNzNhMTI5OWFhNTlhMTgxMmY2NDUyZmI0MTE1ZWEyYjFmOWZmNGE5OTY5MDU5NmUzZjIwMjJkODFlZDg3NGRkNjdlNjE4OWNhMGU2OGI5MzA0ZTk5M2E5NWI2NjY2NWUwZDA3NGMKK1NJRzogZjFmNTkwYTkwN2JhOTgwZWIwZDY0OGFiNGRlZDVmOTJmYWY3Y2I4NTFkODFkODU4YTc4ZmE2Yjc3Y2JiZTEyZjY0ZDIwZGY1Mjc3MWE3ZDVlNTM5YTE1MmQ3MzFlMTkwM2Q0MjExZmRjZmVmOWE0OGI0NmM4ZmQ1Mzk0Y2EwMDkKKworVFNUOiA2MzQKK1NLOiAgZDFlMWIyMmRlNWUwNGM5YmU0NjUxZGQ3Mzk5NWEzNjY2Y2I1MzUyYzY1YWM3YjcwNTFiMzY2ZmUxYWMwYzMxMAorUEs6ICAxMmZlNTZmMTAxMmQ1YzEyZjEzNWVkNTk4MmYzODJhZTVmMTE0M2JjOTBlOGNiOGM5MzA1MTc1NDU1MWVlOTBhCitNU0c6IGM3ZjIxOGI1YWE3YWFlMTc5OTYyNWE1NmM0ZDdkN2IwMjYzN2U1NzJmMTQxMWE2MTIyZjExMzc5MWFhM2M2MjhlODE5NjAyZmI0ZjAzMzVhNjEyMzAxM2ZhNjRlOWZkYzRlNGFlNDk3YmQxNjljMmZhNzdiYzIzNjEyOTcxN2Y0NjI4ODZiNDEwODkzZmE3ODA5Y2JmZGM4OTIyMjNiNDBlZTA0MWViZDRlYzdkZGFiNTViZTYwODFhMTY0NjY0M2E5MTIwYmFhNDYyODlhY2JhMTViM2I0OGFmM2I3YWRlY2Q2OWY0M2VlZGU3OWQ5YjE5NTdlMWQ4YzMxMjllMGZhMDU3OWQzZDM5NTM3MDQ2MWIwZTEyNTVjOWNhYTk0ZTQ3MjU2MDFjYjlkMGUyZDYwMjQ0ZDE1YjY0ZTFmN2JjOTAxNTU5MGFkMDk5MWYxMmY4MjY3MzExMjA2ZTllYjVkMTZhZGQwYmE1MjE4ZmNlNWZmZmUxYzljZTVmZmUxZjczMTEzMmY0YjEyY2FjYjAyZjk3NDUxNzEwODQ2YjdmODI0ZjRmYTllMDg5MTkyNjY0Njk3ODljMDBjZTBkOTRkMzhmYThmZWMzZjUxZjJmODg2ZTlkYjA5YjgwNDQ3MGIxOWVjOWU4MDY2M2YxNTViNDk4NGQyYmJkMGIyY2U5OTMwMmUwNmM2NDQ0NGI2OTZlMzEyOWZjZWYzNGMzZGQwMGY3YWI1YmVkYTc0N2EzZmM2MzM5MTkyYjc0MGYzNTY5YjY3ZGJkNmZmYTM5ZTI3MWZhYTQwMGQ5NjE2YmZmODZlYzQ5YTY1OWRlZjJlN2Y1ZDQ1MWYyYTJiMzVlNjYyYTZlN2NjMjJmMWU1Y2RjZGU4YTU5OTg4MTM1YjdlNzY1NjI3NDNjMWU2YTA5OTkwMWIzZWY5N2NiZmYyM2YyMDliZDcwODhjMmYwMzI0NTI3OWExZGM3OGRkZGMxYmIwYzFkMzUxMDAzNTc4ODIxMjZiMzI4ZDNkOTRlMDg3MWI2MGJlMjUzZmQxYjZlY2YwM2MxZGI3MzFkOWVlZDBlZGYyYjI2NDMyMzA3ODBhNGQ2NmU5OTE3OWFhZDFiODI0MDJlNTVmNmQ3ODVlYmM4MGY4ZGQyZmQyYmViMDlmMzEwMzVkZjYyYzE3ZjQyOGVkMGIyZDU2NTA4ZGIzMWU2ZDJkZDVmYjY5ZWJlZWVhMzI1NzA3MGNmMmZlNjdkNDJkMjg4MTZhNTVkYmFlMGIxODVkYjQ0MjFiYmZkYWVmYzc5YzA4Y2RjMWFjY2Y3MTY0MjU2MmVjNzAwMzZkYTJiYmFmYTRhODkxOTU0YzRlZTQwNDliNTVjNjQwZTkxOTMwZTM5ZTNlZjEwMThkYzE2NDdmMjY5NDJjNmRiZGY0ZDU2ZTQxZWIyYzg5OGM4MjFmYWMxN2NjMjczZThlNGFhNTYwOGE4MTJjZjRiODJmOTYwMTljMjUyZDU2ZTc4MDUyOThjY2JlOGNlNDBiMGJkMGY5MzNiODg0YzBmYWY5N2E5NThiMjA0MDhiOGE1Mjk3Y2NlNTUyN2IyY2EyMTI4MDZlNzJhMzI2NDQ1N2E3ZmFjODY2MmI4MmNhMjMzZTFjNzc1OGRjNmU0ZjFiOTk5NTg2M2YyNWY3NDdiY2VlNDNiNjM5YjFmOGYyMDI2ZDJkMgorU0lHOiBhYmFhYjRmYTZhZWIwYTBiMzRlZTBkNjEzYTBhZjA0OWVkYjRjZWRiZmU5ZDNiZWJlOWMwMDYxOGIxMTViOWQxZmE1MjRlYzM0OTVlMTMzMGIwOTM2MTgxZWFiYjE0Mjk5ZmFjY2M0MGVhYThjY2E1N2VkMzI0YjdhNjQyMGMwZQorCitUU1Q6IDYzNQorU0s6ICBkZjI5NGU0NzdiMWI5MWM1YWM1Yjk4YzMzMGQyMjJkN2NkMmQ1M2U3ZDBiYzBjYTQwM2RmNGVjNzUzMjdhMjc0CitQSzogIDVmMGJkMjJmMmYxODk2ZDE1NjNiNGY2OTQwYzdkZjg5ZWZjMjU4YzBmZjZjMmZjZDY3NGRhZjRmNTlmY2RiNjAKK01TRzogM2U0MmQ2Njg0MDk2MzBjYmI4NDgxMmFjN2ZmMTE1NGY3MGZjYThiZGZmM2YxYTA0MGZhM2FmODY4YWExYzRlOTE1MDhiMWFlZmRmNWMzYThiNGIwNzdhNGQxNjJkMmMwNWJkMzY0ZmJiZThjNWEwODMxNGMyZTA3ZGZmYmQ2ZThkZDJlMDhhMGRjYzk2ZWE5MmRkZDRjOTdmNzlkYjk0MjVhNmM2YjM0YzQ2MDQzZDA5YTY4Yjc2ODcyMzZhOTE4ZDIxYTU2MTYxMGExM2FjNWU0NDZlMDg4MWJiMjZjYzhlMjhhYWQxNjU0Zjg2N2FkODJhZTMzZjhmN2E3OGE2NWJlNTc2OTk0NzU1MTZhMWE4NzQ2ODQzZTkzYTFhMjk0MzU0NjI0ZmFjMDRkNDUyY2NmYmU0ZmRkOTJhOTUxYWFhMDdkMjY2NzZkNWNiMDc3YTUwMDBkNDM5YzEyNDI3NmMwZGJjZjg2ZTdhYTE1M2NjMjRiNWFmZjY3N2M2YmFkYzI2MWMyODlmNGE0YWU1MTliMmUyZmZmMzEyZmJmMGY1YjRjNDY5OGY2YWVkZDhmY2IxZDIzNDg5NDJkZTNmYjczYmEyN2Y2ZGIxNGMyZjA5MTgwMzU2ZTVmY2FlMWFkZjY1ZTIyNDI1ZjhjMjdmMTllOTg5NDgzNTA2ZTVkZjU3YTFiNjEzYTIyZTM0NTAzOGIzZWE5MWMwZjc4ZmZmZjQ2MzgzZjM4YzcyMjI1MzU4YTM0NTcwZDZmNjY0YTE3NDU0YTE1MTYxM2YwMWNiYTc3N2Y2MmVjODMxODc1ZWM1ZTI3ZDI1N2YxODBiNjM2NmNiMTgzMTA3YzQwZjUwYjAxYjJiOWJmOTFiM2I1NTQ5ZWQ5MzFhMzUzN2FhNDE2ODlmNzJiMjU3YTZhYTM5Y2RjNmZjZWRmMTQzOTgzYmU1YmZmZTNhZTJiMjlmODJmODgyMTIyZDY2YTc5MjVmNWE3MTA4MjZjMGRhZGI3ZTRmYTRlYzA3OWJhMmU3NmRhZGE0MzNmMzA3N2NiMWVmNzQ2MTNmYzVkYmY4MjU4YjZkYTdjNzNjODY2MzcyNDU3ZWQ1MDBmOTdmOTkwN2UxZmMyNjM1M2M3MGJhM2JkOWMzNjE1MWQ0Njg2NWQyYzY1OTg2NTYyNDg1Y2Y4NDIxZmViYmU3NzdjNzNlNmNkMDAyNmQ2NmQzNTEyOGI5ZjhmMzMyNjRhZWI1NmJkM2U0YjhkMWY1MjY2NDExZWYzYjIzYjc2YjM2ZDRjOWRmM2M1MTJmZDU2MGMyYmU1MmFjNTIzYzE5Mzc3YWQyYWRjMGU4YzMwOWNmNWJiZjcyZDllYjg1ZDY1YTk0ODQ3ZDQ5N2Q4ZDEwMjQyNGZiODQzODE2NjZlY2IxYzM1YTM3MjVkN2Q5ZTkyODRmZGViYjZiMzYyYWE2YTljNmZiMzdhYmE4NzM1N2Y1NzRjMGU2M2I0NDk3ZDQ5OGZmYmI3ZDA2OTJkNzg0YjRiMThjZTlmOTE1MGMxNDZkM2QxOGMzODJlZGEwNDkzOGM2OWQwNzc4ZjI5MDJkNTIzNWE1NjUyYjk3Y2VmNmQ1ZjYwZGE2YmQ3ZWQ0ZmY5N2NkOTRkNDkzOWNhY2EzYjZiYWEzY2ZkYWMwNGNkYTk1NTk2ZjQ2N2NiYzZjYmNkOTI2NDE2Nzc0M2VhYzEKK1NJRzogOTk0NWFiNzNiNTg1NjJiMzU1ZGFiYzRlMmI2YmU3ZTA1ZjM3Zjg5NTcxNDQwY2NjMzJjMWE5NDczNzA5NWI3ODY2NzQ3ZDIxMDA3MDAwYTBmMGUzNTExMTRiODhlMDEzOGI1NWRmNDRmZTcyZWJlOTU5MTQxMGU3MDdmYTlkMDIKKworVFNUOiA2MzYKK1NLOiAgNzBjNjg1OWYwOGNmNDJiNGJkYTllYjYyOTc5ZGZmYjdjYjA4ZWIzZGFiZTkzZmU5NGIwMTM4NDYxN2NmNjczMAorUEs6ICA0MDFjOWUyMDMzZTIyNTlmYjYzODNiM2U4YjllMTdiM2YyMDYyNzQ2YmJlNjQ4Y2Y0ODQ1MTZkYjBmMmYxYjA2CitNU0c6IGRkMDYwOWVhMTU5OTIxMzk1ZDExZmIyZGE4ZWE0Zjc0N2Q3Zjc0YjU4MDUyZTAxY2FkNDBhMjcxZmEwYmJlZWQ5MTAyMGY0ZjBjMDg0NmM0ZjA3Nzc4YTZhYTc2OGViNTE3MTIyOTRlOWUxZjMyYTYwMmIxNTI1MTRmNWU2ZDM5ZjllMDhmN2E3ODEyYmQ5MDBjMTBhOTE0NjllNDdlOGE3OGU1NGNkNGJkN2NmZWRlZGVjMTcxZWYzNzNmMWM0ZjliYmMyYzgxNDAyZmIxNGVkMGJmYWM4ZDA0M2YxMTdkNjEyNDUyMWFmYWUwOTE2YTUxMGQ1NjhhY2ZhM2FhMzMwMWJjOTc5YWMyOGQ1NTFkYmJlYTZjZWFjNGMyMTJhYThjODQ5MmIzNjEzYWU3Mzk1ZGQ0MTI1ZmM0YzI1ZDViNGQ5OTIzMDgyMWQ0YjE3ZWMyZWU2YmU3ZDYwNDE5NWEyMTU0MzMzYjk3MzUyNjU4MGNhN2VmOWUzMGM2YzFkZDQyZWYyYWZlNDJiMTFiMWFhNDliOWNjYWJhY2ExNzA5MWVlYjM4MGVjNWUzNGFkMWUzODI3Y2M2MGRhY2YxNDQyODZjNzg5MjU5MGJkMjY3MWE4ZGM1ZjNhNzAyYzFkZTdjZDNiNDJjMWIxNTBiMDljM2U1OGVmNjk0M2I0NWQ4OWQ0MWRmMzYxZjFkNWMyNTU2NTU5MWI2YWM4ZGVhYTczNjc2NTMxZjZlNWFiZTU4MDRiMDA5N2Y4ZDQ1ZWEyOTM5MTc3MzMzY2FjZWYxMmU0YjcxZmU0OTM2YmFmZTAwNzQ3YTg5MzBiY2VhNTViOGZkODRhMDFmNmRmODRlN2FjYjkzMWZjN2MwMWRkZmQ2M2RlZWMzYWQzZTY5ZGZhMmI3MzU1MDU4M2Q1NzQ3ZWVlOTZjNTUzNjM2ODc5N2UyNDdmMjNmNTM3ZDc5MDc5YWI2ZGEzMTQxMDJjNzQ0M2Q0MTk2MGUzYTNkOGMzNTljNGE0ZWM2MjZmY2M0NGUxMTBlYTc0NGQ0MTdhYTg1MGRiOGVjZGJmZTM0MGE5NjJkYjBkOGM1N2RjNTE3YmU4YjQwZDE0ZGU5N2IxZTllMDQyNjQ0N2ZkZTBhMDRlNTA2NzljNTNiYTFhYTNjZGMzOGM3ZWRlNmRiNmMwNTRiMWU5Y2U3ZGVhZGFmOTNlYmRkNDcwNzkxNTM1ZjNlY2ZhYmYzNDE2MzU1ZjdhMThhMzhhZmU2YmZlNTA3ZWYwOGM0MzczYTRhNjlkZWUxZmNiNjViMTYzMWEwZGUxNDg4NjQ5ZDBiYjI2NzlhOWE0NWY2NzgyMGIyYTRhMWU1YTU0ODA3MmRhNzAzMmQxNzI1NTVlNzg4Y2M5ODYwZWJiM2MwYzM1OTQ5Mzc1MWIwYzJjOTUwYTdmY2Y0ODAzYzE0N2Y5MzQwZmM5M2Q4NWYxZWZhNTdiMzkwODFiOTJkOTM0NzNmZDIzNTE2YzQ5NTBlZDRiMjlhMmVkM2EwNDJhZTNkOTJhMWU1MmNiNzA5NjM2ZmM3MjcyZmQ3NDcyMDhiZWUyYjE2ZDE5MWU0YzZkZWIyNzY3MmFhMzRlNDM5MTRjZmYyMDU1Y2E0ZWU4YmEzZTFkYzU4YTY3OWM3ZjdkZWUyYzFkNTNlMjg3NTA5NzBmNTdkODVlYWIxYzI2Yjg5YmI3M2UwYjEKK1NJRzogMGYwM2E0ZjE1YzMzOWI0ZjdiODhiNGUyMWFkOWUzZDZiYmYzZWZmYjdiNjc4ZmZhNTAwZDQ3MzgzYjcxYTc0NTRmNjI5MDdiNTZmNTlmOWI5YWY2ZDViMmEwZmMxYzczN2E2NDEwNTE5NTA4OTg5OWY1N2EyYzlkYmE1MDllMGEKKworVFNUOiA2MzcKK1NLOiAgYzU5NjI5NjE4MTViNTdjZDE2MjQwM2NlMDhlNDEwNWRkYjhhYWUyZDNmNTMzZmI0OWNjMjM2YjVmZjUwNGQ2ZQorUEs6ICBkYmFkZTcyMjM2YmExMmQ0OTc3YmE0NmMzNjRiYjY5YTg4N2ZmNDAyZGU5MWQ0N2FmYTliOTNjOTViZTcxZTdlCitNU0c6IDRhZTQxNDhkNzljYTk0MjU1OTJhYTI0MGJkMTUzNDI0YTNiZjRhZTI3Mzk1ODcyY2U1NzI4YWM3NjEzNTk2YTc3ZDVjZTg1NjVkOGQ2ZTFiNTkzNWIzOTA2Y2FmZTFmZjg4OGViYzk4MTVlMDRhNjI0ZGZjNGM2OTA3Yjg1ZjZmMWEwZGJkZGZmNjJlOTE1MTIyMGQ0NzQ0NjJjYjlmMTNkODlkM2E5M2EwMGJhMmI2MGY3ZTdjYTYzZGExN2E2Mzc5ZDY3MzU1MWU3OTBiNTkxMTcyN2M5MDZkYzk0Zjg2ZDgyNzc1NDZjMTU2NGE0NTU3M2E3NzQzYmI4YTEzOGNkZTg3YjNiMmYyOGU1ZTI0NTk0MGE1MWU3YzQ1OGNmOGM1ZjBhNzAyNzU5NjI1NTNlMGQyMzkwZDE3MWRiNDRjMmY3YTVjOWU5ZjkzYjkwZjdhNWY1NGYxOTFiMGQ4NzViYWQ3ZTBiZWI5ODBjMmEzMzY1Y2Q3YjkyMDg3MjRmNDY1NDQxODExN2UxNmVmNzEzNGUzZTI3OTRiNmY5ZTgwZWNhYmVjYTMyNTRlNzA0YzIxYjdhZDMwYzVkZWUwMTdlYTI1MzNmY2Q5NDI1MWU1NWFlNzVhOGNjNmRiNjY3NGIzOWM4OGNhNDIwMDYwNDNkNmJkOWIwMGVjZjY0Y2VhZmVlYjQwMmIxZjIyZmQ4OTFmMmQxMWM1MTVjMWFiYTZhMmQ0YzBiZDIxODFhNDhlNDNmZDFjMGFmOTFmOWI3YjdkMzdmM2RjZDllNGMwYTc1OTc0ODQ2N2QzNDhhOGIxMTZkZjZhNGVhY2YxNzhhZWNjY2QzMDY2ZTkyZGNhNDVkYTdhM2UzMTlmMzc3MWViMzQ5MDAyMjE5M2M1YjY1MmYwNDU2ODdlMTcwNWYyZTU2OTFjMTM0YmU0MDA2MzUzZDdlY2QwZTkxOGQ1ZGUwZjNiODc4MDlmY2E0YWNmYWI5NGUxMTQ4ZmY3Y2YwN2Y3Y2ZkMGM3NDVkZDJiZTAxYTI0YTVlMDY5MjgwNjk4YmMzZjU0MDBhNmRjZDA4ZTQ0NTk1YzAzODhlNDQ4MzM3NjhmYzQ5MTA0ZWUxMTViZGNiMDJiZmJkYTE3OWQxNjRjZTk2OTkzNjYyOWYyMzM1NjAxYjU2ZmU4Zjc4NWNjYTM4MDVmMDQwMzg3MmM2MmY3M2MzY2U4MDU2M2QwNzBlOTc2ZDhlY2M1MTEyNGUyY2FjZTdlZTE4Njk5MDQ3Y2IwZjhmYjhkOWM1OWI4YTYwZDEyYzA4YTA5ZmNlNThmZDkyY2QzNmRiNmE4ZTg5ZDExOGNmODhhOTJkYzhhMjYwMGJkOTVmNWE4ZTg1ZGI1Y2RiYjI0OWNhODEyY2EyMDljNzYxODA1MWM0NTY0YTNhMGUxOTJiN2U0NTk5MjQ1NmM4N2QxNzQxMmMxMWFkZWFkNTI2YWI4ZGIyMTQ1MmY3NDcxZDE3ZjJlYmM5MDAxNTQ1MGVkZjRmMGE0NGZiMmY0OTA1Zjc0ZDcwMjc1Y2NkODliOTNhNjUwNDczYzAyYTdkYTBjYmM2NzkxNWNlYjdhMWVhNTlmYTg4ODQ0NzJkYzkxN2VlOWQyNDYzMzljNTkyNjg0M2VjZjUzZmFmZGM1NmE2OTU2MDFhMjc2YzIzYTg0M2U0ZDMwZjg5Yzk3YzllZWU2ZGZjNworU0lHOiA4MTAxYmFlZjAwNGViNmY1YWQ0ZGUwOTc5ZmYzNmQzNDM5YjgyMTJiZGM5Mjg5NDJlNDMxOTE1YjNmZDE4YmMyYWQ2N2IyNmYxODk0MWRjYjE2ZDJjMjkxOTE0MjFlNzc5ZmVkNjIyZmQ5ZjU4MjY0NGVhYWRiM2ZlNWMwOTgwMworCitUU1Q6IDYzOAorU0s6ICBkZWU2ODY2Yzc4NzRjMTI3MDI5ZTk2ZTAyNWJmZmQzNWZjZmRmNGRjMzY5NjZjMTVlZTYyOTMzNjgwMTNkMzc5CitQSzogIDA4Yzk0ZGEzNTFiYjJiZWU3MmU2ZTE5NmJlNzQ4ODA3NTgzNzYyYzUyOTZlMDViMWU1MjljNDdjNmJiYWNlYzYKK01TRzogZjFhYTE5NzdmNTMxMWI1MzhiOTQwYWU0NDJhM2FiYzg5YWFjY2RjZDBhNzkzODBhMjQyNThkNGE5ZjFjZTYzOGZjMmY1YmEyZTUzZjhlMWZhNjE3NmYxNzhkOTAyNGE3Nzg5NGMyOGNhZDQyZDYyOWM3OTNkNjhhMDJiZTk0MTFiNTI3YWNhZGFlN2U1YzM4NTFiYWJiNDViNWZlY2UzMjllMjkwMzRjZDQyNTcxMDgzNzI3ZjM1YWVjYWQ3YzliZTU5NTRlYzY0ZThmNmVjYWI3Y2MwNTkwZTU0MTU2YTRlMWE0NTMwMzg0OWY3ODk3ZTcyY2YyZmJjZDg0ZjU2YzcyZjk0MWRiYjBiMDlhMzJlNjM4NmZiZTE4YTQzYmI5YmQ4Yjc5M2U0YjllZGQ1MzIxMDNlYWI1NGQ2MjcxMTdkMjgxMzliNjRlNjBmYjBiODFkMDkwMDFiYjI0MDRkOTI1ZTI2NWJhYmRjNjlmOTZiMTM1ZTllNmFiN2ZlYmIxZWQzMDc1ZDZhYTJhYmQyYmJmOWI2NWZhOWIzYjcxOTFlZjM3YjYzMzYwNTkxMGVlODhmNjZlYWRhNzlmMDBmNTM2ZDM4MGI4MmYyZjRiNTk4NTExMmRlMDA0YTU2NjAzZjQ0MzZkOGZmMzAwZjQyYmY1YWNkYzdhNGJmMWVhOWQ0MTk2YzQ4MDQ5NWJhY2IwMDY3NjMwZmNjMDAwYjRmMjc5ZGQzZjMwZjM1MzI3NjA5MmQxNTJjM2Y0M2VmZGMwNDFkZWFhMGJjNWFhYWJhN2Y4YmJkODVlNjljMTM3NDJkNjc4ZGJiNjUzNjBhYWY3YjU0OGEwNDRjMGVjNjBhNTdhZjY1MGJjMzE5NzNmODMyZjk2MTI2NWJjMjMxOGY4MDc3NWFmZDUxZjU1MTk0YzQyNDIzZjdiZjRlMDA1MmY5OGNiMjA2OTEzZmZlYTQ4ODZlY2QyN2E0MTc5YjEzNzczZjk0NzUwMmUxODFiZjFhMWYyYzYyYzZmMDhjMjAzNTlmMDZkZjJiMTgxMjcwNDNiMTA3MGQwMTk0ZWY1ZTViZmQzN2QyMjc5ODRjZmIxMDk4OWYyMWM3MWFkMGZlM2I4MTIyN2QzYTcxNzg5NDU1ZWRhMzgzYzIyZjRkMmZjYzcyNTc5ZjQ2NWUwNjZmM2QzOGJlZmMwMjRlZmVmNmMyZTMyOTY0OWNlNDM0ZDYyNzM2N2E5MDBkMDdmZTYyMzQyMzVjODQ2NTZlYWM1ZGQwZDc4OGNmNGNiMzE4NzE4MjRkNjZhZTRiYzg5ZWRlYmExYjM2NzAxMjk4NDUzZThkYTFlNjljZmI4NjgwOTVjM2JlNmVkMjE4MmRhMWNmZjQ5MDVhZmQyMDczMWFjMWVkOTg0MTY0NzM3OTAzYzdkOGJiMGFkMTZhZWNmMmZhZTMzNzQwNGZlMzU2NjQ1MTVkOTNiNzAxZTJmODc4NjY0NDU0YzBkZWNkMWM2NTU4YWRhY2UzY2RiMjI3NTA3YTUxNjA2ZjBhNTRkZjhkZmFhNDIwMjA1ZGQ1N2M2NTI0MmZmMjRhNDA1ZWY4NWM5MmQ2MDI4ODY5MzJiMzVmYWJlOWMzYmNlYmZjNjIzNTYzOWU4NzNmYzJkZDA4NGM1MmNkNmE3NDEzYjgzMWQxY2M5OTkzMTM3M2FhYmQ4NDc2MjBlYjY5YmIwZmEKK1NJRzogYjc4ZWJkNmQ2NWIxNzVkNGJiZDNkOWEyMDgyYTBlZmU2ZTk5MWNiMmU0MDM1MjFlZWNlMDBmNDE4ZjJlOTU2YjY2OTA3ODgwNjU4YjllOGU0NzY5OTY1M2QxNTkxMzIzODBkOWNlMTEwOWFmOWMyNzU3ZGFmNGNkZjE4YzljMGEKKworVFNUOiA2MzkKK1NLOiAgNTIzNjIzNTU1OTk1YmFhZjJhMjdhZGNiMWViYWZhYTgwMmQyM2VmN2FiZmE5Nzc1ZjJjOWJmYTA3ZDY0ZTBhYworUEs6ICBkMzRkZWFlNjUyM2U2MTlkZDFiZmM4ZjNjNGNhNGI3OGIzNjhjMGY3MjAwMzVlMTQ0YzNmMmZjMTA1ZDRjZTIxCitNU0c6IDA1NTNlNjllZjIxMTY1MmQ2MmJmMjgxYmZiZGQzN2JlMjI3NjlkODE5NzQ2MzYxYzdkNjVkZGQwZmFkNjc3Y2MwNDM4YjMwMWQxNTE0NTc4ZTBkYTU4ZTU1ZjcyOWZhOGU2NmRkZWI3Zjk3M2E4MThkMjRlZDhmZTAyN2I4NDkxMTc5ZDA3NzczZmI1ZDJiYjk2YWE4NWQ2YjM3NTA0NTRlNTBkZTkxZjliODhhZWU4YWE2OGU2YmI1M2VkYzY2Njc3YjQxZTYwMWE0NmFiNGJiMWU2NTZlN2ZhNWYwMTc5OTMzNjgwYTZlYzk1MDQyNzVlN2FkZjdhMzI0OGU2M2EwZmM5YzFlYTVhZTk2Y2QwYzY1YTg5YTc3Y2VjMmIxZmQ4ZjQ1MzdlODJjMWM0ODhhNjlhMGVmNjRmNTg3MzRkOWU3MzQ3OGUxZDFmMTIzMTE0ZWY2NjA4NWUwYmEzMTljYjgxMGI2NmFmOTZkMTMwOGIxYTJiZDkyYmEyYzI2NWFhMzA5ZWNkNTU1N2Q0MDJjMzgwMmNhZThkN2U5NTAwN2ZlNjEwYzJhYTc1ZmM2NjE5NmMzZmFkZmU5OTdkNmQ1OTk4ZTE4ZDI2MGU5ZGEzMWRhOTIxOGNiYWQxMDNjYmZjMmM3NTQ3NzY1ZDY3ZTgxZjI0YWM4MzAyMmVmNTFjNmNjNTA4NjQzNjZhMzVmNmI5YjlhZjk0ZTg0Y2FhOWZkM2Q3NjdjODMxZjA5NjdhNjE0NjJmYmNmY2M4MDNmMTJlMzczOTAzOWFjZDVkYmU5MzY2ZjA1YTMzZGJlYWYzNjBlMmRkY2JlNWM0NDNmODBlZjJhZDYyZTAzYzFkNWI3MGNkZWFiNGE3ZGQ0MTU1MzA2NGM4ZDE1MjcwOWRlZmY4MjA3NmI5MDcxMTkyMzc2ZjUxZDRjMmM3MWE4NGU4OWYyZDk0MDEzMjBjMmU0NTliM2UyNDNjY2E3YzI2ZmQwOThjMjY0YWM4OGVmNjM4OTIxZDk4MGIwYWU5ZTUxMmQzNzIwMzdkODFhZGM0ODEyNmQ3YzllNGI1YWZhNTdlYzI2NWQ0MDFiOTY1M2U5MjhhZmI3ZGZmOWI0OGUyOTVlNDcwZDZiNTJlODhiMzlkMGE0MGNiOGViYTI0OWY4YjEzZDgxMTEzZGIxZDNlMDFlZjc1YzcyMmYyNjk0ODhlOTYzY2M4MTgyNzA0ZjhjYTAxOGU3M2RjMDcxNGU5YTlmYzc5YmM0MzYzYzI4Y2IzOTg0Mzc0ZjczYjJhYTg3ODZlNzRlMDE1OTUwN2EyOTg4M2ZlMGVkMWM2MDBmNTI1ODg1ZjJmMTBlYTAwNmMzOWU1OWI5MjViNzY1YjFlZGU1MzQyNTdhMWY0MGYyODQ2NTg0ZjA2OTc0NmI1MmY1NjAwNDMwYTI4NjNkNzkzNjA5NWZiYzIyYTZhZGE2NzRkNDFiMzc0ZTJiOGI5YTE5ZmE3MTJiNTk0NDUzM2JiNmQ2ZWM0M2I4OWQ0OTcxYjcwMjA1YTZhY2Q3MmE4OTlkYTEyNjE4MjA0ZGIwYzNlODI2N2I4NDU3OTE2OTNlMGFlNmEzNWYxNGRhMWY4ZjRkZDE3NGJjZTAzMThmYjVhMDBmNjcyZWRlNDIzMDRjZjA0YTYyNzYwNTc3NTkwZjI3ZTJkZmE2ZTVlMjc5NWQ2NjA1M2IzMGFmN2YxYmYKK1NJRzogYjE4NzE3MjlmZWM4M2FlYTBhYWE0NzJiNzAwYWNkMDk0ODEzZmI3ZDU3YjkwOWUwZWFhZjIxZWU5MzE4NDdhZGRlZGQyYmU4NTMzZDBjMzA1Y2I5Y2ZlNTA4MGU3NmMyODA4YjZlNTFjOTgyNjI5MGRkYjdiOTRiNmY3ZDU4MGIKKworVFNUOiA2NDAKK1NLOiAgNTc1ZjhmYjZjNzQ2NWU5MmMyNTBjYWVlYzE3ODYyMjRiYzNlZWQ3MjllNDYzOTUzYTM5NGM5ODQ5Y2JhOTA4ZgorUEs6ICA3MWJmYTk4ZjViZWE3OTBmZjE4M2Q5MjRlNjY1NWNlYTA4ZDBhYWZiNjE3ZjQ2ZDIzYTE3YTY1N2YwYTliOGIyCitNU0c6IDJjYzM3MmUyNWU1M2ExMzg3OTMwNjQ2MTBlN2VmMjVkOWQ3NDIyZTE4ZTI0OTY3NWE3MmU3OTE2N2Y0M2JhZjQ1MmNiYWNiNTAxODJmYWY4MDc5OGNjMzg1OTdhNDRiMzA3YTUzNjM2MGIwYmMxMDMwZjgzOTdiOTRjYmYxNDczNTNkZDJkNjcxY2I4Y2FiMjE5YTJkN2I5ZWI4MjhlOTYzNWQyZWFiNmViMDgxODJjYjAzNTU3NzgzZmQyODJhYWY3YjQ3MTc0N2M4NGFjZjcyZGViZTQ1MTQ1MjRmODQ0N2JhZmNjY2NlYzBhODQwZmVjYTk3NTVmZjlhZGI2MDMwMWMyZjI1ZDRlM2JhNjIxZGY1YWQ3MjEwMGM0NWQ3YTRiOTE1NTljNzI1YWI1NmJiMjk4MzBlMzVmNWE2ZmFmODdkYjIzMDAxZjExZmZiYTljMGMxNTQ0MDMwMjA2NTgyN2E3ZDdhYWFlYWI3YjQ0NmFiY2UzMzNjMGQzMGMzZWFlOWM5ZGE2M2ViMWMwMzkxZDQyNjliMTJjNDViNjYwMjkwNjExYWMyOWM5MWRiZDgwZGM2ZWQzMDJhNGQxOTFmMjkyMzkyMmYwMzJhYjFhYzEwY2E3MzIzYjUyNDFjNTc1MWMzYzAwNGFjMzllYjEyNjdhYTEwMDE3ZWQyZGFjNmM5MzRhMjUwZGRhOGNiMDZkNWJlOWY1NjNiODI3YmYzYzhkOTVmZDdkMmE3ZTdjYzNhY2JlZTkyNTM4YmQ3ZGRmYmEzYWIyZGM5Zjc5MWZhYzc2Y2RmOWNkNmE2OTIzNTM0Y2YzZTA2NzEwOGY2YWEwM2UzMjBkOTU0MDg1YzIxODAzOGE3MGNjNzY4Yjk3MmU0OTk1MmI5ZmUxNzFlZTFiZTJhNTJjZDQ2OWI4ZDM2Yjg0ZWU5MDJjZDk0MTBkYjI3NzcxOTJlOTAwNzBkMmU3YzU2Y2I2YTQ1ZjBhODM5Yzc4YzIxOTIwM2I2ZjFiMzNjYjQ1MDRjNmE3OTk2NDI3NzQxZTY4NzRjZjQ1YzVmYTVhMzg3NjVhMWViZjE3OTZjZTE2ZTYzZWU1MDk2MTJjNDBmMDg4Y2JjZWZmYTNhZmZiYzEzYjc1YTFiOWMwMmM2MWExODBhN2U4M2IxNzg4NGZlMGVjMGYyZmU1N2M0N2U3M2EyMmY3NTNlYWY1MGZjYTY1NWViYjE5ODk2YjgyN2EzNDc0OTExYzY3ODUzYzU4YjRhNzhmZDA4NWEyMzIzOWI5NzM3ZWY4YTdiYWZmMTFkZGNlNWYyY2FlMDU0M2Y4YjQ1ZDE0NGFlNjkxOGI5YTc1MjkzZWM3OGVhNjE4Y2QyY2QwOGM5NzEzMDFjZGZhMGE5Mjc1YzFiZjQ0MWQ0YzFmODc4YTJlNzMzY2UwYTMzYjZlY2RhY2JiZjBiZGI1YzM2NDNmYTQ1YTAxMzk3OWNkMDEzOTY5NjI4OTc0MjExMjlhODg3NTdjMGQ4OGI1YWM3ZTQ0ZmRiZDkzOGJhNGJjMzdkZTQ5MjlkNTM3NTFmYmI0M2Q0ZTA5YTgwZTczNTI0NGFjYWRhOGU2NzQ5Zjc3Nzg3ZjMzNzYzYzc0NzJkZjUyOTM0NTkxNTkxZmIyMjZjNTAzYzhiZTYxYTkyMGE3ZDM3ZWIxNjg2YjYyMjE2OTU3ODQ0YzQzYzQ4NGU1ODc0NTc3NTU1MworU0lHOiA5MDNiNDg0Y2IyNGJjNTAzY2RjZWQ4NDQ2MTQwNzMyNTZjNmQ1YWE0NWYxZjlmNjJjN2YyMmU1NjQ5MjEyYmMxZDZlZjllYWE2MTdiNmI4MzVhNmRlMmJlZmYyZmFhYzgzZDM3YTRhNWZjNWNjM2I1NTZmNTZlZGRlMjY1MWYwMgorCitUU1Q6IDY0MQorU0s6ICAwMzc0OWNhMjA0NThhMzVhMzdhOGQ3YTI2Zjk1OWYwZDU5ZjZkYzk5NzNmYTM2M2MxZmY4Y2E0ZTYzOGMyY2QzCitQSzogIGVhZWI5NGY0MDZiZGU2YTdjZjhiZGUyYWRmMzA4MWY4Mzc1Yjg3ZDkzMzVkNDk2YzcxZDA0MmNkMmVhYTE2NmMKK01TRzogZWVmNWNlZWJkMDQ0NWU5YzkxODFhZmY5YzZmMjY2MDEyOGZjZmI2MzY5MWE0MmNmYTQ0M2Q2YTY0OWVmYzVmYWQ4YzIwODAzNzYzZWU5N2QxZGJhMDhlNjNlMDhhMjYxNmRhMDUwNzc0ODlmMmZhMmM1NmI3NTM0Zjk0MDI2MTkyNTFmZGY5YzMyMGRlN2FmMTA5ZTJmZDhiMjU2NWNlOGE3NTI0Yzk0MDVlYzBmOGZjYWE3MTQ5YTZkMjEwZWZkZTgzYjExMWNmODJkYzA4MzVjZjk0ZjIwY2RiMDIxYjczYmQyNjI2NjY1NTVlNmQ2MjcwN2I0NmVlNDJmYTkwMGI0ZjRmNzA1ZGUzM2QzZGJkYzY4YTg4ZDFhNGQwYWU5MzM1NjZkYjZjNjIzN2VjOGFiZTEwMjRkYWM0YjdmNDZkNDA3YmUxNjU5NGQ5MDQ2YzczMTJkZGE2NjE0ZDliY2RiMDFmYjgzMjRmYzYyYjhlZWFmMGFiYzIzY2Q1NzBlMzA0ZmNhMDhlODhjNzM1ZTVkMzE1OTI0MDljZWI1ODM4NjJlNmIwYTc2NzcyOWY3NTU2ZmEyYzA1MzY0NGQzNmM4MzM3YzAyNzRlNzQ5MjAyOTgyZmI0YTE3MWFjYWMxOTZjMDJiN2YxNmE4ZGE0OTA3MWM4YWI4MDc2ZGQ1ZDNhYmFkZmUzYWY4MmNhODVkYTAyZGNjMWM0YTZmMmUxOTMwYmVlMjAwOWVlZTBkOTcxZTQwZGQxMjE3NWM4ZDAwNjk0ZjAzMjVhM2IzMTMzYzBkMGJkMzgyYTUxOTRmYjIxNDIyY2U2N2M3OGE1YTZlMTUzN2UzYjk3ZDVlMjA0ZTVkMTk1Njk2MzkwZjc3ZDE5MDI0YzFiZjZiNTEyNWEwY2RiZjdiOTg4MDAzNjE4MWM5OGUxYWMyZTUxNjViZDQ5NmNmOTk3NDUxYTFjMTIxMDJlNjY5NDZiMTY3NmFiZDRjYmRkMmMxMTY3M2Y0ZjJjZDVmM2M5YTQzNGQ3NDdmYTA1YjQwZmJjNzIyNjhiNGViMjg0MmU0NzQxZjUxYjc3MDliNmFjY2M0N2ZjYWY3MGQ5YzFjNGMzNTg2NzExOWQ4MWNiM2ZmMWYxNjA4MTEzM2YxNjU5YWVkODVmNjNiYzkwMTk4OWUyNjE3ZmNjZTE1M2MyOTc4ZDcwOGZkMDI0NDlhZTRkNTM4ZDEyMmRkYjg1MjdjMGE3NmExMDJlZWZmNmVkYjY1ZGJhMjk4ZDNjMjE3ZjY1NTE4MTRlZGRlZWNlMWFlZjVmMzcxYTU0ZjEyYmZmZDZiNDk2MTgxOWEwZjI0NGZmMGQ3ZDg2OTRjMTQ0MjJkZTk4MjJjMTMxNzllNGVlYjgxNTk1MDc5YjlkZDJhZDFlN2MzOWJkMzAzY2M0NGFlM2YzNjM0ODgxNTc3YTI2NmZkNmJiNzkxNzgxMmI5OTlkYzgwOWRjMDljM2Q3MDE5ZGFjZDI4ZTQzMDEzYTJmOWU0Zjk0YmIwYmY3MTI0ZWYwOTE3ODNmNzk2Mzk3ZjY0NjNiZjFlZmIzOWNkNDZmMzc5MGExZDliNmE3YzMwZjE0OWI1ZTY2YzI5MzdlMzljYjk3NDRkZGM2NmFiNTYxYmFkNGU2ZmE4NTM0ZDY5ODgzODIyNjQzZDYzZDhiZDdiMTgxNjIxYTI2N2U5NTVlNzU4ZDE3OTJiNDQKK1NJRzogNzhhMzg3N2UwMmJkZmQwMTVlN2Y4NmEzMjdhNDhjYzNhNTIzMGJiZGIxMjQzZjFhOGNmMjI3Zjc4YWI1ZTc2ODBkZTMwMWE5MTVkYzExYjMzNmZiNWY2NTY2ODQ4YjQyNTAwYWRiNWQ2NzM5NjkxMjJiYThmMDA1M2NkMzA2MGIKKworVFNUOiA2NDIKK1NLOiAgNTNjYmQ2ZjY4Y2VlMjdiOWY3YmMwNTliODAzYjQ0Nzk0OWJiYzljNWQ1YTM4NjUyZDc3ODljYTE1NDIwZGVhMQorUEs6ICA2MTE2OTkwYjUzMzFlMjE2NWY4Mjc0M2YwMWQ4ZTdiZDVkNzA4OGIzMDE1OTgzM2ZhN2I5MzljZmIxY2MwNGQ3CitNU0c6IDMwNmY4ZTFkZjBhNGNhNzhiZDc3ZThlMTE5MWM5NGRlYWE4MjY0ODM1NWMyYWVjYjdlODJmYzU2ZDY0YzUwNDYxOTI0N2U3Y2Y4OTQzMzI4ZDExZjNkYjRiMWRjMTQ4ZThlZjZmNmMzYmMzNTU5Njk2NjJhMjgxYTY1NTc2MzkxMjQyYjdiZDVhNjJmOGZhN2FjYjYwNGUzYTM0NGFlMWE5ZDczMmEyNTQzMTVmMzFhMDQ2NGMxZTY1ODc0NjJkMjkyMTJjNDBlNWVjZjA2MWUyNjlhYTBiOTAzOTBiYTQxMDQwNzIxNjg0YmYyYWE5NTgyZDgzMDY2MjIxZGI2MGQwZjdhZTJmMTQ5YTM2ZTE2OTUyNzA0ZmIxZjNhOTgyZWFjNmI0NTgzNjY1YzYzZTVhODk5NmYyNGE1NjZkZDUwNmEzM2Q0ZWM4YTAyYjJiZDM0YjcxNGM3NDUwMDBjMDEyOGEzYzg5ZDk0MjUwNmQxMmY0YmViOTAwZTI5MDNjZGIzNGIzNWNhOWI2ZDNhZDliMzUwYWM5OWY0MWRiM2FjZmU3ZmU1NWEyOGMwZjAwNmI4NDRjOWRjNDg1M2ZkOTg1MzVhZGE3OTQxNmRjYTVmZWU1ODAzYTJkOWY1ZDY4ZTZiODA1MzlmZjMwMmU5NzNmMjRlOWJjODhiN2M0MTk0MTE3ZGRiOWY5MzJiMzJkNWVjNzQ4NjhhMTM2MzFlY2U2ODgxNGI5MzE0MjFkYzg5MDI0OTU3MDM0MWY0YjQyM2U4NmU4ZWUwODFiMjI3MDJmNjQ5YTZjN2EwYjdiZGY1ZmI3NTYyMDJiZDEwYjBiYjIyMTVjN2Q2NTk3ZWZmZDg1MmYwYjg5YWJlYzE1ZWE4MjI1NzY4OWRmODFlMzM4MjU0ZjkzZTgxY2JmMDYxNzI5ZDQ4M2ViNWNmNjQ5ODA1ZDc4ZWQ4OTJkZDBiZDI0OGNhMWUyNTJiZWE1MTg0N2UxZTgyZDM5YWY1ODA1MGRjNGFmYmY5MTE1YTNhNjA0OTNlOGMwYmEyZTg2ZTA4OThjZDBkNDMwODkxYjllYjBhNDBmODc0MzFlMjVmNDE1MzhhMDMwZjg4NGZhYjM2YWQxMTE2NWQyNjdlOGRkOTRkY2IwNWI5M2E1YWU3Nzk2OTQzMGUxODEwMTM0ZTE1NzI1MWI5ODJkZjM0M2RmZmFlNjEyM2E5OWFhMDU2MmQ1ZGY3MjQwOGYxYTZlMjljNDA1OWE1YThhYWE0ZTYyMTUyOGZjNjNhOWNiZTFmNGMwZmVmMjVmZTNmOGUxODE1Nzc3NDA5N2E5ZDkxMDIwYTkwMDZiNmM4NjBlYzFlZTEwZDUyMWQyMDNhMWY4YmI4MjU2MTI5NmZhYWQ0YjIyMDNkYTUzYjIwN2E0NTliMjljMThiYzA2NDkzMzJiMTgwN2MxM2NhNjFhY2ZhZjkwNzc5ZmViYmM3ZjMyNDIxNjQ3OTdlNmY1NzJjYjE1YTliZTU4ODczNDM0NTVlMjZiOTEwYzhiZWZlZTQyYWViMDQ3ZjlhYmU2YjM3NTBkYmQ3ZGU5OTIwMmEwYmI1NzZjZTE0ODllNjFjMWY1ZDI3YzY3OTJlNjMyMThlZGJmZGI5YjNkYzUxNWI0MjU0ZDgyYzg1OWU1MmNlNmJkN2FkMjk2ZGQwZTM3MDlkNGM0NjYzNjJmOTAyNjVlOTlkYTdkMGI3MDEKK1NJRzogZDgyNTA0NDA1ZmYxNmJhNjQ0M2RjNDgyMzY3MjYzYThlMjAwMzYwYWNhYWE4M2ZjNGU0YjcyYmQyNDlmMTYxMDNlYzdlNWE3ZTljYTE3MTk4Zjg4OGVhY2ExNmI3NDBjYzNmNWMzYjdiNjE3YTM0Yjk0OTFjM2VkNzZhYWIzMGQKKworVFNUOiA2NDMKK1NLOiAgOGI2NTc0ZjZkNzM5Njk4MWUyMjNhNDgzN2JjMzM5YzNmZDY1OTQxOTg0NWEyMTIxYmY4NWJlMmU2OTVkODYwZAorUEs6ICBlMzgxMWFjYTcwNjM0ZjVhOWNlNGI1OTJhMTdiYjVjZmRhNTM0NDI0MjJlMjAzY2RhOTUwNGM5ZDY1YjI2M2U4CitNU0c6IGE0OGFhY2MwNDk1ZmEwZjEyNTliMjc4NjVkM2Q3NWRjNTJjMmM4MjhlYThjNGMyYWQ3ODU3NzA3MmZlZjcyNzBmNmE0ZDU4MmJiN2I5NjJmNGMzZmQxNDlhNjBhMDZiYzhlZmQyOTcwZWYwMzE0OGRkZjYxOThiOWI2OTVhNjlmYWRiNTM0MDk1MWNiNzUzOThhYzUxYTRmZDU1NDMwMzc4Y2Q1ZGE4ODg1MjEwYmZkMjE0NmY5NWM2Mjc2MzJmZThiZTA2ZGUwMWE3YzI3Yjg5ZGVlZmQ2N2VmYzY5YzliNWM2MmIzODEwOGY3NzYyMjkxNDNkYWU2NjBjMTBjYmVhM2NkNGY3ZWU1M2RjMzY5MmVkMDExNzdlNGE2ZjdlNDI0YjU2NjZmN2Y0OTVmMmE2NTYwMmM3ZDA4YzVkNTcyMjM0YTU2N2NiNmMzOGFmZDc5Y2FiNWM0MDM2ZDYyNjM3YWVmYWI1NTg4NzY5YTQ0OGFiNGM2NWUyNDU1NGJkNDE1ODA1MGUwOWViNThmOTlhYjQwNzc3YjAzNTY3MDliN2MwMjVhZTVhZTU0MjJhY2Y4NzQ0NDkzMWFlNGQ5YThiM2Q5NDQ3Njg4MTEyOGJhMWViNzMyOGZhZmM3NWY2YjlkYWNjOTZkM2I2NDg3ZGRlZjdjNTkyNjJkY2FkYTQyNmFhY2IxMzkyMjkzNTQxMTU2NjIzNWUwNTgzNzI2MjJkODg1YmQwY2MwNDk1OGRjZmIxN2UwOGZjZDdmMTQ3ZTIwMTU2YzhlMjZhZjg1NTMwZjU1MTFhNjhkYjQzZGFmYzRlNmEyM2Y2NjdkZjM3NDNlZWRkNzFhM2YwN2Y3NmY5NGQxNjg4YWZjODQ2M2JmYTVhNDM5YWUzMTE0Njk5NDhlNzQ0NzA2NGYwYjA1MDZmMzY3MTljMTM0NjZhMWI5ODc3NmQ5NjdlYzU4MjA4YmE2NzQwMzczMDNkZmM2MTkwZGE3ODNmZjI3MzAzYjg2YjVmYzMyMTFmMDFjOTE1ZTgzYTZhZDAxMjE0NDc5MTFjYmUxY2Y2OTZmNjE4ZjYwMjM2NjQzZjJlOTRlMTU1ZGI2NTcxODI5NDRjMWE0M2JkYzdiZDVlYWYzNDgxZmUxMjg0MDkyY2IzNzg5YTg5MmJkNzlhMTExZmQ0MTAxNDNjZjkxYWUzMzI4NjBiMWQyOWFhMDQxZDE3N2I1MGQ2Y2MyYjk2NjBkMzI4YzBmMjMwYTM1MTVlNmEwZDY4ODcwOWMwY2QzNDdhZDJmZjMyZDYxZDFlMWU5YmE3NmY4MWU4NzNhNmM0MjBmMTcwN2YzODQxZGI1MTk2Y2I1M2Y1MDZmMDAwNjM1MmM3YzQ0YzA4MGYzMDk2ODAxYTU3YTQ5Y2ZlODQyMDViZGQ3YTk4MDFmODQzY2YyNmI5NTU4YTJkYjc4OGVmMWIyMzc5MTVkNTg3YjliYTk3Nzk4OTBmNjFmZGM5MWUwM2U0ZjRjZGJlZmU0MTdjYzIyZDUyMmE4NmFkZGRiNTNmMzc0NzQ1MGFiNjJiNTc2NTY1ZGIzMmUwY2Q0NDI3NjU0N2Q5YTE2NjUzYzI3OTY1OWRkNGQxN2VjMDQ4MjdjNTMzZTMzMzkwZmU5NGY3OTM1MDkyNTZkYjY3NTMxNzM2YWIzZmNlZTJhMzAxYWMzZjBhMjRkM2IxMDhkN2U3NWMzMmE1YWJhMzZkNgorU0lHOiAyZmQwOTA1NDc1YTJjZWMzZTc2Zjk5MDliOGFmZDgzYmViOGRhZWZhNzdhZmNkYTM0Y2I0ZjExNzI4ZWYxNWZjOWMxZDdmNmY2YWZmZmMyOGYzODc0ZjkxM2UxNzk4MGYwZThlM2Q1YWQyMzk1MWRmMmIzMmVmYWY2MjE5Y2UwZAorCitUU1Q6IDY0NAorU0s6ICAyOWIyODgxYjhjYWFkYjMzNmU3ODgwYzUxMGI4MDA4NWY0YjEyMjE4NjBiMzAxZWI0NTI1NjUwNzUyYTZkMjg5CitQSzogIDBjNWM0NGVkMjlkMjFiY2FkZWUyMWNiZGU2MWE5Y2RiNmQ1OTM2MDA5YmEyZjViMmU3NzdjOTI0ZGRmYjY3NTEKK01TRzogMTk3NGEyZTJiNDc5NDlmNDY3YTkzMWQxZDlkZDVjZTExNmU5ZjUwMzBhZDA5YThjYzcyOGQxYWViMTQ4YmJmOWFjZjU5ODc0ZGE4MGU3MDhkNTNjNjY4ZjJmMTRkNzUyMjA3MWU5MDk4MDg0MjdiMmFiNWEwNWY4Yjk0ZjIxNTA1Y2QyNmFiYzUzNDU4OTc4Yzc4NGQ0NzllYTZkYWIxMDVjNGY3OTg0YTBmYjk3OTBlNTA2MjRmNDczNGI1NTE5MDVhYTVmZmE2MDE4NGNkMjAxY2YyYjI2Yzk3OTVkYTZlN2UwOGQ2YTBiYzc3MjI0MDBmZWY5NGZjMjEwMzhiZTg5ZDM0YmNkMTRjNDI3Yjg1YjY4NjY3MzcxOTYxNTJkNGVlYjY2ZDA1YjI0NWFlODRiZGM3Nzg3YzE0YThiZWMyZWVhNTM2MGYwNDI0MzNkNzA3OTQ0NjdkNDczOTNiOTM3NTdmMzMxY2YyYjUzYzY2MGQ3MWMyOTU4MmFlZWE3OWIxMjUyN2EyOGIwYzVlMTEwZGY2Zjg1NGVlYWQ5YTJiMDBkNDI1NDJjYTgyNzZiYjhiZjk4OGJhYWI4NTY1OTk2ZmVlNTBjZjMxYjI0NTljNGM1MGFiNDc1MjY1ZTgzZTIyODVkNDNmZTFmNzUyYTU1YjJkYmM0OWZjYTA0YTgxMGYwNDEzYmY2YmQ4MWI3OWFjNjRlZTFmODliOTdiZDdkMjZkNjI1MTIyNzNlMjRhNmJhYjJkNWY3ZDIyMjZiYWFhYjdiMTExMjA5YmIwMzczM2Q4YTYwZGZhMzFhNTE2ZjRhOGM3Njk5ZDgyODVjMTA2NTE1OWE2YzczMzFjMWRlZmI0N2EzMGVmNTg1OGM1MGI3ZDA0NTEyNGEwOTgxM2QxY2ZkYTVjOWNjM2JiNWJmYWU3M2M5ODQxOTdmOGY4NTdmMTg2YzQxYWI4N2ZiNzk2MmI2MzFmNGQwMDdjZmJlZTIyMWZjNjU3Mjc4NGE1NTExOTRjMTk3NzdiMDhlNmI1OTY3NTdlN2NiYTdhMGUyN2ZlNDUzZjkwZGM1OWNjMDhjNjQ3MjQzMWMwMjBlOGRkMDkxNzU5MGU3OWMxZjIwNzM4M2FmYjM5MDc2YWQyNGRhOGVlNTI0ODY3Mzk0NTNhMjU5MGU1MWJmYzg5YjEzYzIwMzNjZmE1Zjg5MDNjYmU5OTYxYTg1OThiYTU1NjIzMjg2OWRmYWI0ZDU2ZWRmNGYwNWU4Yjc3ZDA1ODcxODk1ZTYzYjUzNTFmNzZjYjJkMmM4Mzg1YzEwOWQ3MzA2MTkyYTI1NDQ2ZTRkNjJkYzdkNjI0ZjBjNjY3Mzk4NmJlMDYyOGIyYzJkNzNlYjk0MWQzNWEzNDMzMDkwZjU5YjI4YTU5NzlkNTZkYmM5ZmQ2OTczZjYzNjQ3NjQyY2Q5MDNiMGNmN2E2YWNkMzMwZDg3ZTIyOTI3MTBkZTk5ZTBjMTc5Y2E3ODkyOWNjYWVjZmFlZGJmMjc0MjQxNGYxNzZiNjA5MGMwZDU5YTlkYjc4MWM5OTY3ZTI4ZmE0ZTc3ZDJhMDgyZTQyZjUyMTY5MTY3ZTkyZDRmZGQ4MmUyY2MwNWRkOTE4NGM3ZGZlZTQ5MGEyMzdmZGFkNGRmZWJjMDE4NjhlMGE0MzUzYTI5NTRkMDkwOTI4NDYxODIxYTdhODQ4ZDFiNjA4MTdmYzNiZGVmYTEKK1NJRzogOTllOTk2ZTg1YTQ5NGYxOTgwY2IwN2RlOWNhNjE2NWU3ZGUxMDRkMzlmZTNjMzIyNjczNWM1ZGFhNTY5NTE2ZmNhZjFiNmU0ZGZhZDBkMzg5YjZkYjBlYzhhOGYyMGRkMmM2MDI2NTZiNWU3NjFjOGYzYTY1NTgzODIxNTE5MDkKKworVFNUOiA2NDUKK1NLOiAgNDJhZmU4OWRhYzgzZTdkMzg5OTZjMGRiY2UwYzk4NzRjMDA5MjdiYWJkNzdjYThjZWFjMzRlNTY0NDc0MjgyYgorUEs6ICBhNGM1ZjVlMzgwM2YwYTAzZDVjMWM5MDZjYWVjOWNjNmQyODUxNDA3ZjFjYTI5ZjcyYTQ1ZjIzM2U2NjU2MjQ0CitNU0c6IGU3MTBhMTYzYWQyODg1YWViNzY1OGViMzc0ZjExOGI3Njg0MmVjMzZlZjNiMDEwYzNjNmI5NTU5ZThiMTYwYzI2MjhkZWQwYjg1MTFlYjQ5MDcxODBkYTRiNjIxZTlhYTRhMzIyMjg4ODg4YTFjMDkxMzBmNjlmODkwNTk3YTkyOTNlNzRmOTI4OWJkYWE1YzkxYjZmZDI0YWEwNDRhYjlmY2IzNDAyZjdhYmM0OGQyYWI3YjM4ODBhMDQ4ZGFhNDQ4NjQ1YWQyZWNiNTViM2NhZWUyZDY4YThiZWRiNWQxODY1ZDVlMjExZGUzOWIwZWFmMjJlNWRhZjEwZjcxNjgyMDNhYTE1Yjg1YWE0N2JiZDNjYzQxNjljYmMxZmU4MGI0NzAwYjYyNTg3MWVkYWJjZDRmZTc0YTNlOTY1NTY5Y2UyNDVjZmNkZTQyMDljYzhhYmNkNjc5N2Q0NDE4NWI0Zjk2YzAxODFiYmQyNzAwODc4M2U5MzU4YTUzOTRmZTNhMzRhMDY4NzFkMzc5ZGEzNWIyMGJiNTdlZWY5ZTU1MjRlZTc5MTJhNmY0MWI0YTFmNjg0YzM5MTljZmNkYzAwZjQ1ODBiYWY5ZTA5ZDMxNmNlZmEwZjQ2NWRjYTVkOGVlYzUxNGU5NWU1YTU3YmJjZDI3ZTQxZjgxMTliMjY0YWUxNGEzMTlkOGMzODU5YmFiZjFmNGE2YjZiNzdlNDQyYzg2MWQ2ZWUyOGFkMTJiODIzNjJlOTBkYjBjMzY3MmIwZTBkOWZmNTgxNDZmZDE1OWFhOGZhOTlkYzc1NWZjODViOTBjZjk0MTkyNzljMDYyNGI5M2U3NWVkYTBlZjdjMDk2OTVhZTkzYmQ3MjgyNDE5Mzc3Yjc2Y2E4YmRjMDUyMWNmZWU2ZjZkNzI5YzNhZGZmODk0Njg3YjE3N2VmMTk1MjlhNmJkYWNlNzBiNjg1YzZkN2E1ZDc0YTA4ZTJhOWU3MjQwMzU5NzVjODBkMThjYjM2OTQ3MGRlNzI5OWNiZDZiMGEyN2M5MjMyYzdlYWJhYzg2ZDUwOTNhNjVmZmUwYjQwZDQwYmVmZTgwYjY4Y2Q5ZGNlMWVhMWU2NTdlNDVlOWM0OTlkMGI2OTBmNzQ0NTVmYjQ3MDk2ZWQ4YzE4ZDE1MTdmOTA0NDI5MDFhNmM0MTBiN2Y2NDE1ZjIwYWU0OGM1OGFkZThkNjc1YjZjMDU4ZGYxNmFlNzY5OGZjZWFlOTVhYTc3MWI0Y2Q4OGEwYjNmMjJjNTFmOThjNzFjMWViNDZiMjY0YmY5N2EzMDBlY2IxZmQyNjIyNmFkOGU4N2EwNThjZjNlNzA4ZTI2MGY1NjZiNjg1MzE0MDQ1MTMzZjRhNWU4ZmJjMzQ1NjFiOWEwZjFmZjkzMzlmNTUyMzEwNzZiNzM2YjZlMTE1MjQzMTlhMjcyYmQ0NDUzYTBhZjE0OTNkYWEwOTE2N2U4NDY0M2QyMDdhMDJmZWU5OGZiMjIzYjAxYTk5YWE1Y2VmMmI3MDAxZTQ3MGY2Zjk0YTVkYzIwOGVkZmMwY2I4Y2YzMTE0YTkxOTYwMGYwNjExNzJmMGVmZTAzOTAzNmJmNGRkZGJmZDBkNDVmOTE0NDNiZjI2ZjhlMTVlZDdkYjhlNTVmMDg2YTRhNDU4M2Y0YmRhMGY1NTYyODRkY2Y3MTI5MmZlNzBmY2FhODI1OWI5ZmFmZjMKK1NJRzogNGZiYTJkNmNjMWI3MTkzZDM1NjJmOGM4YmZlNjkwNWM4MjlkYjI2NWE1NDI3YzVjMjY1NzE0Nzg1YjgzZjY5NTE0YzVlMzBlMjhiNTY2ODRjODJkYWUyNjM3NTgxYmYzZjRlZjI3MTQyMGJjN2U2MDEwNjEzYTM4ZmExMDFhMGQKKworVFNUOiA2NDYKK1NLOiAgMTBmMDA5YWE4ODdkOTFjZWQ4MDlhZmUxOTJkNzhlNDc5OWQ5MDM3NzYyZjRhOWQzYTQyOWZkZTBmMzlmN2I3YQorUEs6ICBjZjUxMTZiOTIxMjEyZTliNzg4MjlhMDI2MzQ2MzY5MWM2ZmJjY2RjMGMxMThiZTE0MWM5NmY4Yzg4MDUzZGQzCitNU0c6IDJlZGYxNGQ2Y2Q1Njg5NmVlYWE3NzAyMTFjNDk4NGJlZDgwZWNhOGQ2NTM0ZDVkNTEwODg0ZjU1ZjExZjk5ZmZhOWY4OWI1ODZmZmU3YjFlYzdlYWFiNmE5ZGMxYTI0YTNlZTNjN2E2YWI0NGFkZTk5MTc4ODMyNjRlZGUyZjEzNjFiZTdkN2EzODE3ZjI5ZGVjOTU4MWMzMTlmMThmOTVkNWJlMjZkOTExOGJlNjc4MzQwMDM3YTY4YWJmYzVlZmJiOWEzZjNmMzg3OGFhZTM3MjFmZmVmNWJiNmEyNmM3YjFhM2E1NmQyYmRhNmM2ZTg2MGViNDFmZDhkODM3MTE3NGQ5MWM3NGM1ZWI2N2MzODU1YzYzMGQ2NDFkMmU1NzFhOWE1MWM2NDAyY2ZlMTg0MmNlZjM4OTgwY2I4ZDBhNjRiY2M4OWJlMzE4OWU2ODExZjQ3ZThmNGQwMDYzYTViMTYwMWY0NGZkYTIwYzFjNGMyZmM0OWNiZTI3YTQxMzdkYzQ2MzhjMmFkMmQwYTU0NzQ3NDcyMjljNTY4ZTM4MDU0MzFmYTM2ZWViYTc4NWY3Yjk3ODQ0YjVlMzE5ZmE2YTA5Y2M1YWU4NDAzNDc0YmI5MWRkODk2YzFlYzJiYWM3M2QyZTUwNWVmYzYyYmQ1MDJiNWNlYjA4ZDE2ZTgzMmVjNWRjNGY5OGI1MWI5ZDA3MzhiOWZiMjhmM2FiZTg5NjZiZjIyMzc1YTBiMjJjNDcxYTllNThlM2ZkNzAwZGUxNWM1Mjk2MzczYzFiYzlkNDY0MGViNzgxNmUxZGM5YzhjZTg2MTlhODExODMwMDllYzk3NDg3MWU4ZjBhOTc3MmVkZTBhNjM4YjM1NzRiZjc1ZDhmNTU5ODdmM2NmYTZmZWM2ODk3MGJmZTAwYjIzYjU5ZmI1YmY0OTk2ZWE1ZDc3MDRmY2YyZWZmY2MwZmQ3ZjNkOGU2MDU2MDA4MDk3ZjI2Y2FmZmQ1NDE1YTI4MmEyNzZhOWIyNjQ1ZTVjYWIxMjk2ODg3MmViMDUyZjRkN2MxMGNjN2MyMWQ1MTYxODE4YmI0NGNjODU2YjBkZTc2OWQ1NTljNTVkZjY0YWQ5YWRjMTZjMGFjNjU4MzhmNjYwZGE4MTM4NmI3MGI5MzUyNWVjMmY0MGY2ZjYzZjhlYTVkNDgzMGI5NjQ2YzQ2MTgzYmI0ZTZmMjcwNDdiZGEyYTU0NmJkMzRiZDRkYjVmYjg4ZmQ4YWI3Yzc1ZjY1MmUxNWQ1YWFhNmI0NmE4YWNmNmU0NDhiZjJkZDY0ZGVlM2MxMDU2NDdjN2Y4M2FkMjAwZDgwOTdjNDQ0YTE1OGQ4NWE1NGYwZTVkYmIxMmI0M2RlOTQzYWYxYTgxODU2YWM5NjlmNTJhMGJkNDU0MzgxYmQyNjUwNDFhMjY5MWQxYTRhMGQ4MTlmYTc5MDkyYzg4MDM1MjFmYTUzNjg5YWI4NTJmMWZiYWJlMDBjOTRiN2Y2ODJkMTIxY2ZmNTQzOTEzMjI1MjljOGQ1YWQ3YmJiOThlYWZlMzAwYWI5MjJmMWM4OTI0MGExZTYzM2NmNTZhN2IwMmY3NGEyOTIxNGU1NjlhMDU3YmQ1ODVlNDA0ZDdjZDUzNTIwNDE0NTZlNmNmOTBjMTUzNDJlMDI1NjcwZjRmY2NkZjk4NzgzYjY4NTMyMTRjYWMzZmE4MDhhNjZjMjdiNjUzYworU0lHOiBjMzdiYjdiNzNiMTEwNWJlMDg2ZmYzMDc2OTcyMDc3MjYyZGY0ZDczMzJmNjA4YzdiMmI5ZDk3OGQ0NzRjYmJjMjcxMDQ2MDgwMDM1ZjM5NmVlMzY0NzliN2E2NzExYzY4ZTI1NjFjNzQxYzBlYzVmYzllY2ExNzM0ZTgxMWYwNAorCitUU1Q6IDY0NworU0s6ICA0NTc4YzY1YTdjYTQ4ZjI3NzQwNTBhN2IwY2U3YTRmZDVhZDRlNjk2YjJiOGFmMjM5NjE2NGExYzdlMWI3YmQ3CitQSzogIDE1YmY5ZGJkM2I4MTczZTZmMDNkY2ZkNTc1ZDkwOTg0NWYwMzhlYWEwOWM1ZDkwOGZlZjkwOGE5NzQ1OGIzZWYKK01TRzogNTA2ZjMyYjk2ODE0MjQzZTRkZDg4NzBhOGZkNjBkZGVmMDliYjhjNTYzMTUxMDcwZDliY2IyYjE2MGEzZWFiZDcxYTA0NGQ3MWVjOTNmYmE5NTI4OGVkNmZlMWE3YjkyMTY1MTYwNDMwN2Q2NWE0NWVjNWQzZjI2MzFhY2U0MGU1OGQ1M2M3MmU1MjY4ODZlMTY5NzJmNmUwZGI5NGQ1N2I1NTYzNGZkMzlkNTVlOWJiN2YyMTJhZmFiMDBmNzc0NjQwOTI2N2U4ZDU2NWZmNWMyMjU3MzMzYzNkMDQxNTIxNzRmZTEyZGU2YTU3YmVhMDU3ZGMyMTllMmZiYTVmMTkxZWQ4MTQxYzAxODk2OWRlMTk0NzJkNmFhZjc2M2YxOWVjNTU0NzAyYmIzZGNiZTEzY2E5YjIzYjI0MThjOTllNzE4MzhhODhjZjQ1NDcyOGNmOTIwOGExNmM4NGVhMzk4MjliNGJhOWI0Yzc3ZTE3NjExMmJmZTFiZjM1Zjk1YzQwMjhjN2RiODBiMzZmYWEyOWQyYjg5ZTllODYyZjMxMDAwMDY1ZjEzOWIzZGE3N2Q5ZDg2ODUzMDU3NGI3ZTM5MWVkOTdiMzRmODc4MTY0ZjZiOGQ4N2I0MDZjN2RjNzg2MGE1MTc1ZjkyMGU1YTYyZGMxZmM4MmVkODQ1MjU0M2IxMDczNjBkMzVkMmI0YzQyMzllYWI0NjZkMzJiZmRhMzRmNTEwMzdhNmZhZTc2ZjZkOGI4M2U4ZjdmNDg5ZGQ0YzFiNDljMzhmNTM1NzZlNjIxNzJjMTdkZWUzNjY1ZmRlOGNiZjAxNWFmOTY2NWIwZjFkYTJmYjc3YjEzNGYwNGJlMjcxZTQwMmYzMTUzN2MyZmMwNWMyZjliNmZjM2ZmZTQ3ZGUzMzY5MTMzODY3YzY5ZDEwZTdmNTM3YmFlNDU2N2Q0NjhlMGYyZWQ4MDZmZTMzNWY5MzljNzU5OTRmMzYzY2UzYjcwZGFhN2Q1YmQyMzE3YzgzMzg1MWZkOGNjOTcyNTFlYzQxOTAyM2Q5ZDAxNzRkODRkNTYwOWE2OTE4YTE3NDBlYjFlMzA5YmQxMjczNjZkZWI5YzVhYjEyOTkyZTk5MDJlMDE1ZmU1OGQ2YWRiZjUyZDIyYTc2MGFjZDYzZTFlZGQ4ZjEzOGU5ZmIwMTM3MTg4NjAxZTE5NzhlN2QwNGZiMmFkYTJiMmFlZTEyZjQ5ZjI4MzZjNjg0MmQ4OGNmNDhjODY2ZTNkMzNmY2QyNjljMjc1Yzg5YzI1ZTM2NjljYTkwZGU3YjY3YTdlN2EzODJjYjdlZmE0N2U5YzJiZjc2NTcxYzc5YTI1MDg1ZWYwMjA0ODcxNTJmMDZiZmExMzMwMTVhMWI4ZjFjMGY2YTlmMGVhZTFiYTYyYmYxMDRmMWMxNmFjMTRlMWU5NmM0ZWJkZjA2MWUwY2M3MTAxZDM4ZGE3ZTllMDk5NGRhZjBmMzIyYWEzY2ZlZjkxYjYxNmMyZDAwMDY4OWFiMThlZDQ1MjY4ZGNkMjc1MDk0ZjY1NmJhM2NmNTE1MjYxMDI0NzQxZjc0NDRhYjdmYzRkZWNjZTE2NzU2MDMyYTFiZTI3MGZmMGIwMzE3NTQyYmEwMjY2MjI2MGEzNzZmYzkxMmNiYjAyOWNhYzU0NTE1ZjVhNTUxMzY0ZjZhOTlmZmFkMGI5Y2JjZDBlNjkzYjdhNTIxY2IKK1NJRzogYTFjMjQyYjQ1ZTk0ZmQxODBmMDU0YzcxMDFlNTViMzk2NTY4ZjQ4M2RiNmYwZGZjNDE2OGI2OWI1OWQzODU4MTRjMTllYjMwNzUyMzdkMWZiYjFmZWViYmZlYTUwYzU2ODEzYzhjMzljMjI3NTJlMDJkYjdlNTdmM2UzZmJmMGQKKworVFNUOiA2NDgKK1NLOiAgYzIxZTcwYzQ2ZWRlNjZlNjhhODg3M2JiYzY0YmE1MTIwOTMwM2EwYWM0ZmM0OWIxZDgzZTgxOTNhZDQ2YzAzNworUEs6ICA5ZmJmODBhNDI1MDVkMmM5NTJmODlmNDU1OGMzZTZkMTg3YTdiYzFlZjQ0NmIyZTM3MzIzNDNjMTNiMzNkMjAwCitNU0c6IGY1NWFhNTcwY2U0ZmM5NWY3M2Y1MTcyMGQyNTRlNDY5NWZjZGM4MWFhYTA0MDEzMGM3Njg3ZjAzOWI4YmE1OWVkODU3Y2ViMjljMTIxMDI1YTg1N2ZlYWNiNGEwMWYzOGUwMTE3ODMxMGFlNmUzNWM5OThlYmY4OWRkNzkwNTdiNGFmYzZkYjM0MDYwMWM4MTcwM2M4N2E4YzQwZTVjZWJiMDQ0MWRmNzhhNmRlMTNhNDQ3Y2IwMTZjNjVlNzQxYmI3ZGYzMDRkODMwNTZiNzJjNjgyYzczMWZhYzBhMGM3MGI3ODExY2ExNGE1MDE1NDYxMzA5OWMyYzQzNzUyMWM0MDRiNjM2MWRlMzYyMWY4ZWE1NmIwOGViZmRiMDdiNGYyYmI4YmEyZWNjMTY0MzM2ZGE4ZWZjOTQyNzY2ZWYwYzc0ZGZkM2I0OWUwODdlOWEyN2FlNTRhN2EyYjk4MjgxYjlhZjkzZGMxMWFhMmYwOTIyNGFiNWE3MzBmMDIxOGY0YTZlMWVhNDg4NWE3N2ZiZDkzYTFjNTgyNzdkOWUwMWJlNzNhMjVjZGE5MThmYzI3ZGRkYjQ1M2E1ZGE2OTAyYWQwMmJhMDU3NzVjNjdlMDdiZWE0ZGY4NjkxMzQ2Njc0NDM2NWMxMzI2ZTBhYjVlMTI1NGMxNzk2NzQ0N2Q1OTFiYTVlZDFiNjNhNDI1NDNiODdmZWQ0MTQ1OWEwODliY2VhZmYyMTk4MDJhODdhODcyYTc2M2U2OTIzMzNjZTFjYzczOTc4MjUwODRiMmI4MzFlOTNkODBkNjczN2YzMjk4MGYyZjNhZTgyYzYyMTkwZmUzZmE3MDBjNWI3MzI5ZDZkNTAwNDJiZGY4MzFmMzc1NDhmY2M4MGIxMWY1N2NmMjBmNjdhM2JiNjUxYTdiZWZmY2M0OGI3MGQxN2ViNjBmNzI1OWNjNTNiZjdmZjYwODBlYjJiZDA5MjNiMDQ4M2FhMzA2NWE4OTU1ZjAxZDIzYmE4MDk1MWUwYWVmZDJhOTM3MjE5MTU3MmJjNTI5MTZhYTIyYTJhZWMzOTM3NjdmYWZkMDg2ODM5ZTIzNmZlMDQ2MGNlNmQ2MzljN2NlNjlmZTdmOWQzYWFkMjEzMDU3MzQ0MzU3MDQ0M2JlNmJhYjkzYTA2YTU0YjhhYzI5YmYzM2ZmOTk0OWJjOTIxNThlNjkyNGI2YjY4ZWNkYTVmNmYzYWFmNDJiM2QyMmRmNmQ1ZTY3ZDVjYjNhYjcxZWI4ZWUwYjBlNjY3MzJlMWRhY2E2Y2Q2MGQ5YWE3NDMwNWZjZDU3MDA3NmQyMjhkNDQ2ZDVlZTU0MmIxMDQ4OGJmOGFhOTg4ZjQ1MWZhZWJlNzRhYjY2OWQ2MDRkOWRkYjE1MTA2NjIwZWEwMmU4ZGIzOGNlNjM5YjU3NDc4MTJiYjkwNDhlZThiZjcyYjFhOTUxYTA1ZGZmYWM5NTQxN2NiNDNiMDZkY2U2MWVlM2RhNmYyODMyZWU4M2IyZTcyODhkZGQ2MmVlYjU4OTNmN2YyZjZjODA5MGQ5OWUzMzZjOWY5MDY5ZTE4MTU5ODU4NDFiZGQ1MDViNWY4M2Q4OTVlODc5NTkzZGFkZWU3MmNlYjk3NjU2OTliZjgwYmQwNmE1YzU1MzMxYjI1NDU1MjdkMGM3Y2FlY2U5NjU4NGNlM2VjN2ZlMDIyNjBmMjBiOGExYzA2MzU3NjNmZjQKK1NJRzogMGFlMzQzYmI4NGUzYTI5OTA3OGUyNDM0YmEyMjAwMjJmMzE2MGY5NjhhYzA0NDgyYmY4Y2FkMTNiNDIzZjI2NzBmMDFmYjVmN2IzMmM1OTc1MjBmODQ2MDdlMGY3OWMwNzVmYTcwNzhlNmU2OWQzY2VjMzE5MjY1ZDQ2NjA4MGIKKworVFNUOiA2NDkKK1NLOiAgZjJjMTA1NzdmN2RmNzdmMGMxMTU3YThjMzMxYTdiZDJhZTYzODY2NzBlYjY1ZjBmYWUxMjIzMzE2OTBmODI4YQorUEs6ICAwZDRjMzQwZmMyMzFhYWZiM2I2Zjc0Yjg5YmNlZjdlZWFhMGIwNGYyOTNlYzg1NDQyNDdiZmMzZjJkNTdjMWUwCitNU0c6IDM4ZWExZTAyOGE0OTNkMWM2MGVjNzA3NDlmMTRkNDM2ZWIzYTJiMmRlNTRmMjEzZDAxYTY0NWI1ODA0MzBlY2Q4ZWNlNmI1NTY5Y2MwMTdhNDk0M2U1NTk1YzVlZDZlNDhjOTQ0M2YyZmE1ZWIyMjI3ZmZlNTZkMjExZjI2OWJjOGY2ZmE5ZWU4Y2Q1NmY2Yjg0NzA1MzkyMDhhZmUyOWFiMGExOTUwNDRkOTU3YjMxZjkzZTE4NGE5Y2JlZjFhMTRlMTRmODA4YmJmNTg5YWM3NzcwMDg0Zjk5OGUxYjI1NGRhNTljYTZkM2U2MmU3YmUxNzkwNzE2ZDI1NjBmMDE1ZjM5OWNiYmNlNDhjZmQwMzkxZWFkMTk5MzQ0NmY2YjI0OTM5NzdkOTNkN2IwOWEwN2E3OWE1OWNlMTVkY2U3YTFkYTljNjQ2ZjQ1YWYyY2NhZDU1YmExNThlNjM4YzRhMzBjNWQzMGU5YWM2ZTNhMzMzOWMyNDM0MjZkODY0OTFiMmQ5MmRhYzE0NzhlOGQ3NGZmMGJmMTQ5YmRiNWUwOWUzZmI2YjgyNjJlYjA2ODc5ODE1NTRhZTJjYjQ3MTk2MzM5MDc5ZGEwYTFhNTcyMzljMTliZjc4MWY2MmZkYWY0ZTMxNTYwYTg0MzE3ZWYwMzA0OTJjZjFiYjEzMDViYTg1MThlYmFmMmI0MzRkMzY0MTY3MmM4ZjZlYTJkZWZhNjk2ZGM3ZTRmMzllZmMwOGQyODhkMWM5NjZhNmM3MTQ4YzAxMmVlYzQzOWY3ZTEyZGJhYjViODdjZmE0NGM5YWUxOTAwZjgzODZmMjQ0NDRlMTA5MmIyM2EyNzRjMTM4ZTk1YzY2MWU5Mzc3ZThhZDJkMWZjYWYxOTM5ZWM5YTYzMmE4NzNmN2VhZGJlNjg3YjRhMDMzYjkyYTQ3N2YyZTAyZTllZDkyY2U0Zjk1Y2YxNzBiMzkwMTUxOGEwNjIxNDNlNTZkYjA1NGRmNGU0NDMxNTQ0Nzg1YTZkZmEyNGVlYzBmMGRlN2E2OTljY2YyODZkYWRmYWQ4NTkwMzYxMjI1MDc2NGYyNWNkZWE4MTI3ZDAwNzhkNTU0ODI1ZWE2ZTczNzFjNDM4YmM0NmYyOWZiODkzN2Y4ZDlhMzljZjg4NDkwNTJkNDNlY2JmZjZjNGEzNzYyYTVmNDAwYzE1MTRlODVlOTEzODRmZWY5YjQwZjQzMTRlMjIzYTlkNjhjNTI2YWNjNzAyMjdkNjJiOGI2MzdhMzQyZGYxMTNkMzE4MjAyYzUxZWRkM2MxZWZkMWZmMjBiMWZmMDc4YjMyMDY4ZTc5NGQ5MjgxMzMwMzdmMWUzYTM0Njg5ZTYyOWU0M2ZkMmI4ZTg4ZWFiNTBkN2U3YWIwNjQ3MDE0YWI1ZTRhZDU4MjAwNjU2N2VmZjcyYjVhZjJkYWM1MzY4OTJjY2M4NzFmOGE4MGI1Y2I3OWQ5MGJjYzZiNzdkNGNkMDhmODc2MTg0ZWY1OGMwNjRhZTQzMGJiNzlhNmI5ZTk2YjBhZDg3MzY4YWE4MzhhOGRjY2ZmYWMwY2Q4Y2U5ZWEwZDBlYzRjNGIwZjQyNjczNDE2NjU5Yzk4NDk5MmNmNTNiMWU0NDU0MzEwMDc2NDBkNDdlY2UyNmRlZTRhMjk0M2FhNzA5N2RkMzU2Y2ZmNDc1NGYyMWFjMDdmNmIzZjczYzQ2OTA1NTUxMmYzN2FiYQorU0lHOiA2MGI3MDMxMTVhMzIyYWI4OTJjMjc2YmZkMThmNzBhOWViMGM3MzIzZTJjMGE2ZWI1ZmM3ZTMzMGIwYmMzYjA3YTU3OGEwODI4NDYyNjRmMDMyYzYxOTFkMDQwYmQ5OGU1ZDVhNGQ0ZjA3NmZiOTA2MmFjZDM2YmVhNDBjOTEwMgorCitUU1Q6IDY1MAorU0s6ICAwNDFhOTc5MDZiNTk1NmI5ZDM0MGYyZTBkN2ExZGNiZmVmZTY2M2U5YmI0MDI2ZjhjYzFhZTdlMmExNGRlMjdlCitQSzogIGYzODJkMzJlODhjM2E3MmM3Y2FkZGFmY2Y4YWE2OTllMjFkYjdhNmJmNGVkZDZlNDlhMDA1YWFkNzAyZTZhNzkKK01TRzogNzFhNzU5NTc0MTE1NDQ5NzVhNDhjZjEwM2FhMWY4ZTJhZDE1MjQ0NDU5Y2RjMGUzMzY5NjZlYjhiMjZjOTdmMjE2OWU1ZDc4NTM3MDM3ZWZjMDc3ZTg2ZjA2ZTA1ZTljMWRjMzQxODI4OGMwYTJiZTZiYTM0YjNhMDRhYjIwYmFlN2YzNjIxMDk0Yjg3ZDc4YTdlYWNiODY0ZDQwNzhjYjRlZmNiYWM1YWRkOTM3YTJjNjAxMmVlMWE4YjI1NmNjMjc2YjY1ZDVlOTJiNGQwMGI5YjExZmFkODg0OTkxZGVjNGMxY2I5ZGNlMTg2M2M4YjBhMjEwMTYxYWU2YjNmOGJmOWNjNGRjZTRhZGZkYzhlZDU3ZDgzZTk1YWI5ZGQyZDkyNjU4ZGZiZDNhZmE5OWUzZjg5NTFlMmFkNzRhMTQ4ZjZmNTk3ZWIyYzk0NWMxZjFiOTQ0NjFhZTA3NDU0ODFmZDBlZGY4MzhjNjI4NjAzNWUzNmYwMTEyMzg4NzVkYmJhMjI4OWQzZDZhMzk0MmE3Zjk1NTRjNjQ0MzA1MjQ0ZGRiNzdjMTE3Y2I0YjU2MjM3NzI5ZGRlNDI4YjhiYjQyZGY5Y2UyOWUxNDRkZmM5NmNmNmM2NzY3YjFlZTZkMDUzY2U0ZjhiYjIwNTZhYjc4MTBhYTEzNjhhODkxMGYyZjY5ZTA2MWMxOWQ4ODQ3MTg0ZmVkNTM0Zjk4NzU4ZDcwM2E3Njg4NWY5MWViNzUyYTIxOTU0YTEwYzZmNmI0ZGExMDQ2NGRlZDM2YjAwMDg5ZjY2MjkxNTQyMWJmZGFkNDk2NzUzNjg5Y2NkMDNiNjI0MDIxMDgwNzYxZTY4MTc2YjEwNjk3ZGFjODc4ZTRjM2RiMmZkMGIyOGM2NTUzMzVkOTgwMTZmMTlmMjY1YmIwYjI0MzRjYjQ2Mzc4NDRkOTFlZDBjZTA1ZWQyNTkxZmQ5OTg5NjVmODNmMzE5N2QxMGVlZjQ0ODg1MGU3OTIwMzI3MjQ3MDFkYTMwNWNiNmQ3OTQ2Njk0ODNmYzNkYzZmNjg2YjE4M2UyOTk5MTMwYzhmYzAwNThkY2FiYmM5MTg4ZjI2YjJkNjNlYmQ2Y2IxZTE4YTA5N2M3NzA0YTU5YjVlMTg3ZTAxNDI1OTNiNzA4M2Y3NDAwYWZhOWIxYmYwYzFjYzZjMzU2YmM0MzM0YWY3NzJlNjcxNTNiNDViMzMxYjk5MDkyMGMyNGVlZGUyYzZlMzIzNzAzZjUyZWNkNjA3MzViMjNiZjIyYjgxZWU3NzU5MjdjMzdlNTNkYWQ3NTk2ZWE2NWE3M2JiOTY3NzVmM2I4N2M4YjNjMDg4ZWM2OTViYzNhNzUwMmMwYzUxMGYwMjBiZjlhY2EzY2JiN2EyYzAxMWM2N2ZmMjdkNjM0Y2FmMWRjZmM1OGU1ZTM5N2U2NjU4MjUyMjcyMDExYzhmZmRkNjQyMzBhOTMyNDFmZmY2ODM3MmM0YmE4NTM4MmJiYjIyOTMwOTY1MjkyMmRiNjg4MzY2MzFlNTViZTY5YWI2YWRiOGU0MzM1MzU3ZmM5MjNlZmUxNTRhZmNjMjIyZDYwZDA3ZjU2OTkwYTNlNWEyMTRiMjI3YWVjZmYyY2QxYmI2ZjBjNzlmZjU0NWY3MGE2MTYxNDFhOWQ1M2Y5MjJhMDI0NDNmN2QyYTQ2ODljMzViMDk1ZGQzOTRkNTBiZjQ5Zjk2ODBhNWY3ZDkKK1NJRzogYTIzZjAzMmU2NjkyYTBlOGJmZWU1YjJkMzBiNDE0Y2IxNmMzNWFkMDhkYTMxZjY5NmQ0NjFhMDI4NTc4MjJjNGVmMzU3ZjBjY2YzMTAyNWE0ZGM5NWNlZDMwYTk5NGY0MWVkZDFkMDg3YWZjYWFmM2U4ZTg3NTcwODMyMGY4MGMKKworVFNUOiA2NTEKK1NLOiAgNGJjNWUwNWFhMDAzYTQ0OTJmNGJhZDEwMmE1MzkwZjdjZWJhYjNkM2VjYTkxNTIxNDJhZDVlZjdkODQwMzBhZQorUEs6ICA2NzUxZDNhZDhiYjZjNjRkNmExN2Q3ZTQ0N2EyN2RhMjJmNWYwNDAzZjQzN2JhYzk0NDlmMTNjYzg1M2RkODQwCitNU0c6IGE4Zjc5NGRiMTc5NTY2N2QyOGQyNGI3MGFjMjIwMGE2MjM5YTM0ZTI0MzhjZWQxZDAzZjk3ZWQ0OGJlYjRkNmJlYTY3YzE0MzM4Zjc3MzY0MTlkY2QyYTJhNzk3MzcyNjU3MmU2YWZlN2VkZmVmMjJjOTliZThiMDY5ZjA0ZjZkYzYxYTEzYjM0M2M2ZTU4NWFiYWQyMjE0ZDg1YzM2ZjAyOTk2ZmFiYjQ2YmI5MWI1MTc2YWM3MDhlNDlhMGIwNTMwMTcwNDhmYmI1NTQ1M2YyYjgyMDhkNjY3OGQxYThjZjZhMWVlOWFkN2E5MWUzODAzMjU2MzVkMWUyMzZhNmNhMWQ2Y2M3ZjZiNTlmMmEyYmYxODRmNWVlNDUxZDY3OTlmNjliYTExYTBjZDZiYzA0YmU4YTM1MWE4MGU3MjViNWZjNDU2M2U0NWJkNDc0OWVjYmM0NTIwNTIyOTEwNWI5ZGU3MzI2MTQ5ODUyN2YzZDRlY2ZiYjU4M2ZmNTMyNzUzZDA3YzM4NTI2YmI0ODJkMTcxYTI2MWI5Y2Y4OTkwNmE3ZGVhOGNiZDdlNzI2YmEzMWVhNjg4MDNhNmIwMDRmNmRjZDE5ZTY3MTk1MDQ2MzczOGNjYTc4YmIwZGZmYTNkNjQ1N2U0YWVjYTY1N2VjNjQ5Yjk3ZWUzMGU5N2M4Y2JlNmNlNDNjMmFhOWE2OTk1OGU5ZGM4ODFlNGFhN2IzMjc4MDc0ZTc4N2FjZTVmYjYwMWQ3ZmFmN2NhNTEwM2VjYmJkM2JkNTU0ZWIxYjA2NmY4Mjk2ZDJjYzU3ZThjOGEzMmU5YzBlNmE5MjY5NjRkNmRmMmQ4NjQ1ODY0YjMyMmMzMjJmMWNhODA3M2NlZGYyYjU1NjcxMWE3YTIwYjc3YzBhMWVkMjc3YTlhNmNhMmMwNzE1NGU4NjNmZWY1YTQwNGUzZTg5ZjBkN2YzMGYyMThlYzRkZTdhNTNhZWI5YzQxZWVhYWY2Y2U3NDk2NDljOTk5OGZkNjJiY2JhMjg3MjMzOGUxOWM5NGU1OWRkNWUyZGQ3NzZmNTM3MTlkMjE3NDY5NzY5MzJlZjExYWJmN2EzMmFlNmIwNzQ0NjY1ZDBlMGNlNTEzOTU1YTllNjg1MzFkOGVlNGRlOWE4ZDM1ZGRmYjg4ZWI1YTQ4NmFkNjMxMzdlODg5MmZkN2M2ODlkNGY5ZTcwMjFiMTE3M2JiMzc1MmE1ZWVjZjI5OTJlM2ZkNDY0MjI2M2M3YjNkODE1YzI5YjQ2NmFiNjkyODVmZmU0YjhkYWZjYmYzZDAxZDYzNTU1M2FiNzU3NWE3YTM0NzFlZGM3YmU0MTJkM2QwMWU2ZmU4ZTNjZGMzZmEwNGQyYTc1OTkzODFlMjJiYmE0OWM1NTM5ZDc5YzYyYjUyYmIwZWNhMzNmNzQyNTVlNDFhOTUyNmE4OTI4OWIxNWYxODUwZDlhZmE4N2U2YjZmYTEyNzEwMWMxYTZkODhkNDMzZTBjODZhYTYwYmJhOGZlNzEwMGVkNjFkNWE5ZDAwYTAwNzY0NTEzZWIxYzdmNWY1YzNiM2VmYzQ1MzJhMzZiNDA3ZmUyZDE3Y2ZiNGU2ZmNkNjA0OWNmZjNhMzU1NjIzYTNhNDEzOTBlYTQ4ZjQyMTIwZDg5Nzk0OTExMWJlM2QxNjliMmQyZWY0NWJkYjg5NGZlMjBiMWE5NWVmNjYxNDk0MjdhOWQ4ZjgwYTliMmUKK1NJRzogYTI0ZmVlMTFmN2VjNmRhM2U5ZGZhZjZjODU4YWMwMDRiNDUzMWFiZDFjOWQzYmI2NGY0MGRkMjQ3ZjAwMzU5MzUwZTQzYjJkNGI4ZmJlYzVmNmIyNDFlY2Y5ZjExMDE0ODVjZjQxODczNWIwNWY3MTIwMTgzMzViMjAwNjgzMDgKKworVFNUOiA2NTIKK1NLOiAgYTNiZWQ5ZmUyMzU0YmQyODYwMTQ5YTNkYjc1YTg1YjEyOWNmODNlOWQ3M2U2MzE3YmE3MDU0NTIxOTMzZjg5NgorUEs6ICA1YWMwM2I0ZjEzZDkxZDA2NmIyY2UzNTllOWJiMWRmYjZiZmE1YWZhMzgyZmQxY2NkNzJhZWYxMTc2MDc5Zjg5CitNU0c6IGRiODUzODA4Njg2ZDZkMjFmNGM1N2I1NDFlNWFkNjMzOTRkNDY1ZTYwMDc4NjQzY2FiMWUwNjVjOWYzMDZjNTAwMDc4ZjBjYzQxZWYwZjk1NDJiNWZlMzU2YWVjNDc3N2VmOGE5NTU1NGM5N2I2YTQ0MDk5ZTliZDY0MDRmYjBiMmU0MWY5MTkxNGIwNzRkMTIyMzdjZDQ0MmViZDQwYjUxYjhiYzhiYmU0MzdhMmM1MzMzMmQyYmViMjI4MWJmNzMyNGEwY2Y1Yjc0MWJiZjk4ZDFlYjk4NThiZTkyNmU5MTVhNzhlOGQzMTRiNDE0NGYzZDIwZGZjNmNiN2Y0OGMyM2FmOTBmODcxYzZjZGE5MDg0NWE0MWFmZjE3MDdhODdiNGU1NTE2ZjE4ZThiZDc2ODNjZmQ3NDA3MDgwM2U4ODgzMzhjOWExOGY3OTJjOGQzYTcwNDE3MGZmOTgyYmZmYzllOGVjOWVhNWQxYTYyNTkyZjE2ODhkNGYyYjAxZTExZjlmODg3NzRjNDdhYzFkNThmNjkwYmNmMjg4Y2Y4YTQ3M2QzNTBhODIzOWRmOWQzYTYyODgxZGFkZDMzODUzMWZkY2U3NjE1ODA3Y2U5NjU0OTZkNmYzNWQ2YzA0MmYwY2U3ZjIxZWZlNWNlNjQyNTE4NTk0MWVkNTYzNmI4YWU5MTNhNzVkMjFhYjlkYmRiM2MzYjY2ODdhNDVlMDQ0OTM4YTlmMWMxM2EzMzBlYTk3NjFlMjgzZTYxZDRhMzIwZTFmNTU5ODgyZjM0YjYwN2ZlZmUzMmMzNDMxNzRhYmNkYzc3YjA2NWE5MjkwNGI0MmQ5NjFkYjhlZDkxNmMwMTQ2NGZmZDQzZjkzYzEwNzdmMWRmN2VlNjUwMzFjZmUwNWQ3ODBkMDFkMDhlZTAzNmYyMmEyYjA1MTIxOTNiMGMwZjM4MDFlMGEwMjA4ZWVmMjQ1YzllNTE5MzUyZDJiMDA5NjM4MmYyY2JhMDZlYjJhMDFkYWNmNjE5ZWFiYmM4ODNjNWQ0ZjJmZDdjMzQyMzE3OWMwZjVmZmRhZjhjYWZmZjVjNDZiMzRhMDljM2M1MGUyOTQ5YzA2MDAwMjA3ZDcwZDM3ZDY1YTc0MzA3NWZkYzJiZTYyZDQxMmFhNjNlMzYzNzA2Y2E5MGU2ZWY0NGUxNTJlYTRkYzVjMjg5M2VjZDA4ZDc5NmQ0MWYxNzIyNTRjM2QxZDE0YmIwNjdiNTNhMDg5N2JiZDczYzk5NTRkOTY0OGIyYWYxMGQ5YzI3MDNlMzhiNmM2MjQ2OWY2Zjk1OGExY2EwYTMyMGMxMjMzOWU5MGNmNzY4Yzg3YjQ3MzhjMjE5ZjgwOTNiZmY0YzJjZmQyOTQ1OWY2ZDMyODEzNDkzNzhlOTE1YTNiMGU3MjRjNzRkMmJkN2E4NTFhYzdjNmI0OGU4YWZjNzEyNGZkY2JjYWI1ZmY4MGQxZGVlMzBhNmMwMjRjYjQzMzE5NzIzNjZlYmFiMjZiYmI5ZjYwOGNhYWM3ZTUxOTE0ZGYwNThiOWIzNzQ1ZDk4YzVkMjdlOTcxMDU0NzVlYzAxNzM3N2U2MzE2MTk4ZWNlNGVjNTkwOWYwNGZjMjdlN2IzODJlNjZhZGI2MmFjOGE5NzdmMzc2ZmQ1ZGFlNDM0ZmI1NTE3NTI0OWNhMWFiNmJiMDJkZWMwNjk2ZjA4OWJlMzQ1NDg4N2EwYzMyMzYxZDE3MmJkMgorU0lHOiAzM2JjMWUwYmYxYjQ5M2UwY2ZiN2VhNDA0ODBhMTQyM2UwOTFmNzE0NTc0NTAxMzE3Mzc4N2RmNDdhMTBkYjI0YzE2NWQwMDU5NmZhYjcwZTY4Yzk0YzEwNGU4YTc0MDdjZjY5NWNkM2ZiZTU4NWI1YjE3NmI4NWNjY2E0ZmQwOAorCitUU1Q6IDY1MworU0s6ICA4OGEyNGYwZGYzYWUyOTE0ZGY3OWRhNTBlY2Y4ZWNiNDJmNjhjN2JhYWQzYjZjM2EyZTBjYzljMjVkMDlkMTQyCitQSzogIDEyZTY2MDNmNzEzYjIzMDUzNTg1Njg3MTAwMTg2ODVlMTQxNTUzYzQ3NTkxMzk2ZmI0MjU5ZTQyZGM1M2I5YzkKK01TRzogNjU0ZTllZGM2OWZlNjM0YzIzMDhiYThjNDZhOTU1ZTg4MjQ1NjI4NmVhZTM1OTNjYWU3MzljNDQ4NjZjMGRlOWVkY2JiZjBkYjFjNDQxNDk2Njg0Njc3MDlkYzk3MDYyOThkZDJlYWMzMzAxZGFiYWQ1YmQ4ZTkzYzVlOGE5M2YxOTRlMGZjMWQ5ZjM3NmMxNDRjMjkzYWVmZGEwODZiMjIxOGYyZTlkZmQ3YzJkYzUyYmEzM2ViMjI5ZGNmN2JiNjhjZTBmODc2YzVmZDRlODFhZmQ4MDE2OWY3M2NmMjY0ZTVkYzBjZTE2ZTFiODc2Y2QxMWM3YWQ4OTA1OGVlMDgyMGM0MDAwNWQwMWYxMTlmOGJlNmYxYWZiZTI0Y2E0YWVkYzE4ZTk3ODk2ODI3YzNlZDY3ZmM0NTYzMGU3OTAzYjdmZWU5Yzk5MGUzNjE5MzdiZjRlYTBhNGQ4ZDE2Y2Y2ZDljZjAzODFlOTA2NWUzNjI1MTQ4ZjhhZTA0OTFhMDM0MWQwZmY5ZjcyN2JlMWYzMTBjYTFlYzNmMDEwNGFhMDU0MzIxNzg0ZGQyNGQ1M2M5ODViMjhkNDQwODJmOGUxYzEwOGE0NDEwOTYzOGZmNTExNmVkZDg1YWViODZiNmVhNTEyYTE5YjYwMmVkZDlkMjExMDcwZDA0NGFmNWJlZGI2Yzg1MjdiYTM0OTFlMzQ1YmFjYzEzMGIzNjk2MDI4MmFlNzM3Yjg1Yzc2OTI3NGYwZjdjNTg4ZjQwZTY2MjViMjM2YmRjMWEzYjg3MzIwNDYwZWVlYWRhMjc4MTI0YjU2Njg4NzRmMzlmNTljMmU2YWEyMDhjM2I2YTliODQ1YzRkMGEyN2EwNTQ2Nzg2ZmExM2U1MWNjOThiNzNmZDdlZTMyN2I2MjE1ZWM2YjYyOWY0Y2M3ZTRiZDNjMGEzZGI3OGEyMWZmZmUyNGM3MDQzODcxNmJjMzdiOGRhN2M1ZmY3YzM2ODhhOTAzMzljMjJlYjUwYjdjMmNkMzZiNjg4MzFmZDU5MzkxNzU2ODliZDNlMjJjMzg4MWFmMzM3ZWUxNDQzNTcwOWUzNTEwNDBlZjNkYTk1NTcyNGU1MWMyNGE1ZTJjMDlmODkxODA4MzkzZmJmOGVmN2YxZjVmMDI5OGRlZWJkY2Q4ZDY2NmNiY2YzZTg2NmM3MTg5OTlhYjZiMWZlZWM5YzQ3ZTAyZTdkNjM1NDBmODk5NjNkNTQyYzVkMDFmYjZmYzMwNzY4OTY4YWU4MWIyMGMzNTRiNDAwMGMxMzI3NzQ3NjRkNmQ0NDNhZGQ2NGY2ZGQ3NDhmNWZiNWI3ZjZlYmE0MDFkYjQzMThiZTk5Mzk4OWZjYzI1Nzc5NjFmYTVhZDMxZjZhMmE5ZDZhNzU1Mjg1ODY1Y2Q1ZGMzYTg4Y2ZiNWFiYTdkOTIzYmFmNzhiNWQxMzFiNGMyMTRkZjU1YjYxNzFmNDUyMDllMjFjYTY2NDU0OTBkM2EzNjQ0ZGRhNmRjOTI5YzdjNDA5NTc2ZDM3MTY0NzU1ZWY4YWFmM2RjZDRkMjI3NzVlZTdkZWEwZTU2NWJkNTQ3Mjc5MjFjNjQ5YmM1MWYyMGMxZjY4YzFmZGVhYzQ1NWM2N2Q3MWExY2I4ODM3ZjQ2OTE0NDhiZjBiZjA0NGE0NmYxNjg1ZmJlMjJiMWUwMTg3N2Y3NDc3ZDM0OTk0MDhjNGMzMTY1MTBjZTJlNTViOTgwMDUKK1NJRzogMTcwN2NjMDA5MTg2YmYzZjAzZjdiYjllM2NkNGNmNmI3MzdiN2E2YmFhZGU3ZmM2YzNmZjVjMTIyNWRiYjJiYWY1NGY0N2M4NWVhZmExMzJjMzFlYWNhMDNlNmFlYzE0NDc3MzNmYWNkMzcxNDliN2M2Y2YwY2Q0MWY2MTE0MDQKKworVFNUOiA2NTQKK1NLOiAgMTg0ZDBjZTJlOWRiN2YyNTdhOGJmNDY0NmQxNmQyYzVlZmMyNzAyY2VkMDI2YjY5MDZkM2M4YzAxMThmMjI2MQorUEs6ICBlOWRhYjhmZDlkOTRkYzliMjRjYzc5YzYzNWNjNTdjZTY2NTE4OTgyYmEzZTI0NDcyNDA3NDFiYWMwNzMwZWM1CitNU0c6IDZhOWI4NzZiMGJmNDE4OWIzY2MxNWY5ZWI0ZmJlNzkzMmI1NTc3ODkyYTIyMjAwY2UxMDcxNTY4NTNkNmQzY2EzNjNmMDI1YWQ3YTJkODYyYWFkYzc0MmQ5NDE1YmQ4ZDFmY2ExM2M5ZGNhMzU4NjA0NGU1NWE4Y2Y1ZGVlMWNlNTY0NTc2ZTNlOGUzNjU1NDA1NDY1MDFiMzRjYTY3NWNmMjAwZTA3NzFhODE4YzczZDM3ZmNkYThjYjE1ZTQ4ZDVhMGI5ZWEzYmVlYzBmZjY2MTBiMmE4YTIxNGNhNGY3ZWZhYzBlNzEzODEwNTJkOWJmM2MwMGMzMjk1OTM0NzRlYmQwYTY4N2EwYjQxZDE0NGI1ZTdhYjE0MTJiOTcwYTc0YmFiYTRkMjc0YmIwZGJmZGIwMmIxMWY3ZjYzOTY0YmE2ZjNiYTBhZDIzMzQxZDA4M2I5MWE0MzA4MjM5ZTMzZDUwODI0Mzk2MTI2NTg4ZGU3MmEyMzkwYzFjMGZjMDY3NDdjMjg3NzJmNjMwYmY0ZDE0M2Y3YTExNTlmMDI4YzA5MzQwNDg5NGU2ZDE2ZjYzNDYzNWQ0ZmMzMzBmM2Q3YTczMTNlZjc1NmY1ZDQ5ZDhmNjIwNWViMWM3OTJhOTQ5NWRhMTMxYjQzMzQ1YTAwOTBjMTJjYTU2ZTZhZGFjNWJlMGNiY2FjMzYwOWQ2OWY3MjQxNWY2YzM3ZjNjZmIyY2Y3NmIzZTY1ZjNjOTNhYzkyYjYzZjJiYWE0NjYyNDkwNzViY2E2OWQ0YzFkMWYzYWRlMjRhYjMxZWZmY2I5MDQ2OWMyNGJiNDEwYWI0NzIzZTFiN2UxYzg4YjNhMzY0MzM1NjNmNzFhOTlhYWQ1OGZlODA1NjhmOWMxMDJkYTg5YmFkOTc5NjNlNzdkNjYyMjQ4MzE2NmYzYWUyNjFmMzJhNTJhODYxMDFlYmQ2NDVmNjE0MmM5ODJlMmNkMzYyNWNmOGI0NmI5YjI4OTEyNDY5MjBmNjk3ZmNhZWQzOTdjYjkyMmMyNzQ5NDUxNjdhMGU2MTliMGI1MDYzNzc2MDZkYjA0NTc4M2IwYjg4ZWEwNGU5MzJkMjFmZmMwNjRhMTJhNDBlYmU5YjQ4MGYxYTJjN2RkZDM5NWE5YjE1ZWZkYzQ5NWM5NzE0ZjM2ZmE5OTZmNzlmOGViOGVmYTUyZDk5YTI0YWJmZWY0M2IzMmEyMzdjNWJjMDAxOGRhM2IxNjJmNTliOGQzZDQ3NGUyY2UwOGZhODAyNGM1OGFjYzBhOTlmZjYxNGU2Y2Q3ZmRkOWNhNGU4ZjQxYTE0NDlhYTYxOGQwMzMzN2U4YTM3NGQ1NjA1NWIyMDdhOWRiZTY5ZjU5NDhmOTAxY2E3ZGIwNDEwZjAxYWEzNzNkOWUwMjI3NjIzNTk5YmMyMTI4NDViMDA2ZTk0MmZhYmM1ODJjZDcyNmRiNWM0NDNlYjJkZmZiYzllM2U3ZjBlNWNiNjc0NGY3YWQ3MTYwNTBmZGYyYzYwYzdjNzdjMjUzYWI3NDVkYjljODU1MjY1NTY4M2VhN2VhNjgwYWE0YWYzNGRmMTMyNWMyOWI4ODc0YjYxYmUyM2RlNGZmYmEyNTQyNGY0NjE5ZWM2ODJjMjZiM2E2N2JkYTliYzRjOTRiNzlhOWZjNGQ4MmQzNDA0OTViNDM3YTFjYmQ2YjYwMzA3Y2ZjYjEwMDI2Zjk2NGEwMTc2MjNlMzNkYmYyMzMKK1NJRzogYjFlM2JmNWZhNzRkN2U0NDJjZWQ5YTk4ZDkyN2Q4YzQ1ZTBlNjRkODc0ZjhlYTU5MjBhMzYwYTRiZjQyZDgzY2UxOGE5MjRhYzc5NmUxYTc3ZDFiMDIwODI5NGI1MGY4MjIxNzdmZGJkZDQ1OGM3NDM1NmZjZjZiZDc5NDUxMDYKKworVFNUOiA2NTUKK1NLOiAgZDAyYmJmNzBkNTEzNTFlM2I0N2FkOGU1ZWQyNjNkYmY1NTZkMTQ5OGZhOWJkNWRiZDk5ZmI0MjY5MDA5ZGNlZAorUEs6ICA4Y2U0YjU5Zjk0Y2VkNmVjOTYxNGQ2N2QzMDY2ZDlkM2EwZGY3YTQ2YjM3YjRjMTcyNWVmMWU1N2JjNjhhMGQxCitNU0c6IDU1NDU2MGY3YTdmZDFhZTc3NThhMmZjZTdkNzgwZjZiM2YwNDNkM2FmODlkNGYxOWVmNTczYzM0OTk3NTU0ZGYyNDNmYWYyYWFhYjY1YjJhZmRkMjg2MTBkNGE1MWU5YTRiNDY0ZGI2ZGIwOWViZjczYjdkMjQwNTRjYzliMTI4MTRiYjI5ZWU5OWUxYTczYmQ2MDM4OTgzNjBmOWRjZjAxZTY3MDgzNjI4NmY4MjM2ZWQ4Y2VmMDc1ZjNkNTYzMzEyYzE2YzczZmMzN2VlZGYyNTJmOGY0MmQzMGExM2U3ZmJhM2IxNjUyMzhjN2Y4MWVhYWViNTMxOTBmM2VjM2I1ZDYzZjBlZTAzZTM5ODdlMzkwZDFkODFlODI3N2U5ZjZjMWVlNmVjNGVjM2ZhMGQ3MjBlOWY1M2Y5YzI2ZjA0YWEyZWQyYjVlZjMxNjA4OTU5OTllYWNlMjljZjVkYzI1NGFkNzExMDZiYjdlOGJjMjlhNWIxZDI0MTI1OTNkMDgxOTRlODhlMTY1OWE3MzE1OWEyYTIyMDMzYWIwNjZlOGQzZDhjM2JjODZiN2IwMWRlODFhOGM2NjA0N2IwN2ZlMjRlZDI0MDMxOGJhMzdiYTNlZmI2Y2Y2MzI2MDRjYTRmNDQ2YTc1ZmQ4ZTcwYzQ1M2YwYzYwZWUxNmVjYWY1MjRlNzAzZjQ3ZGY1YzI4MmNhMzI4OWIzYWY2MWRlZTQ3MDllZTA4NTMyM2IxZTVjOGE2YmMwNzY2MjAxYzYzNTAzMTQ0Njg5MWYzNDk0ZTlkYjIwZGQ0ZTllMDgzODI0OWE2N2UxMzhkMTNlZTJjOTZmNjFlNzcxMDYxNTQyYWExNmVmMjBkODFlM2EwZjRlNDUyMWE2Y2Q2YzkyZmMyNmZlZWYwM2I2NmM3MGUwMzVjYWZjYzE5Yzk2ZmI5ZDgyOTE4ZmUxOTc3ODBlZmYwZWRhNmUyNTEyYzU2ZTJhNzNkNzcwMzJiNzY4OTE5YmVhOTc3MmY1OTg5YzhiNmM2NWMzZDFlOTdhMjE4MGNjM2EzNzU3OWRhNzBjZTk4MDZhYzEyODVhM2VhYjQxNWMwNjA3ZDg4Y2I4NjU0MmVhYjkwYjlkMmQ2N2ZhZmZmY2FkMjNhNzE0MDAwZWU1OWVkNjhjOTU2ZTgxYzQ0NTQyODg4MmY5N2FmNzRkYjM2MmU0NWMwZDFiZDg4NTZlZWQxNjZlNGFlYzRiZmRmOTVlYWRiMjUxZTJhMWVmODA0ODUyYTllYTc3ZDM0NTc3ZmU3MDgzMWE5MjhiMTAxYjYwYWM2MTNlN2JhMmU2YmEwYTk0MDEzYTY0YzJmODIxOWZkMzBiZmY0MDkwOTk2NjdhNzg2Zjk5MzI3YmIwM2UyZjIxODdmNDQ1YjQ2YmVlZGFiNmQzMjVhZmQ5MDRlMzk1NDNlOTNmNGI2YzU0NDMyNDlkNzQ0YjJkMWE0M2UxNDFlNDc2OGJkNDBhYWJlNDA1NzI0NGUxZWFkZDlkYWVjMTc1NzE5ZTUxYTA5M2FjZTMyZmU4MmIyZWFjYjVlY2IwZGE2YzFmZmU5OGM4Y2VlNzg4NmUzMDE2NzBkZmY4NzExM2VmZWQ0MjgyNDcxYWZiNmI4YTBmZGI1MDVlMmU4ZTdkYmMxYTA4YTIyZTk2ODBiZDA5OGJmMTI3NTgwMmJkYjQ1OTQxM2EzYjIzN2Q3NzEzYTFiYmY1OTdlNmFkZjJiNjBlYWY4MjM3OTFiMworU0lHOiA2ZTdjNjZhY2M5NTRmZmQ5ZGQ0YzFjNjMzNWFiNGZlNzlkYmJlZDc4MmM0YTQ3ZWMzMGQ4NDhkOGJiMmI0ZjEwNjlkYzYyZTUyMmExZTgwMTdmNTRhNjM0NWUxNzI4YzA3M2FmNjQ0Nzg1NmQ4YzFlZDM1ODc4YjU3MWU1MjMwZAorCitUU1Q6IDY1NgorU0s6ICBhYTBmZGFlMmE1YTRjOWMwNDUyMTkxMzAwNGNkODllZmJjODhiMmRhZGY1YWJiMjQ2ZjNjYTdmNjkyMzU0NGFmCitQSzogIGJmZmNiMTdjMzVjMTMwNGNkZDlkNjI0ZmY2OWJlZTYwZWM3YzllYzMyN2QxMjM1MGQ3MGZhYzEyYjQ3Y2MyNWMKK01TRzogYjE0MTg0Y2ZkYzRhNWYwYzdmODNmOTRhODMyZjU4ODUwN2UyZDcyYTg5MzI5ODcwMDc4NTcxZDIwOGEwYzQ5NjBjMmZkYzRjMjM2Y2Y4ODIyOTk4MWQxMmIxMGExYjY4ODRjODY1MGRkYWYxZDRiMmViOTgxNTc1YjFlMDE5ZmUzZjYwNDIzNjc2Zjg4NTZhOTkyY2NlMzZkNmQwYTNkMDI2NjMxYzhjMWUxZmZlMzQxMzRiMjk2ZjQwODQyYjZkZjRmODZmODMzZTAxNzViYWU1MGU4NmJmODU2ZDFlZTc5OTI1ZjQzNGI4YmYyYzg0NTE5ZjFmNWQyNTM4NjA0OWNlM2NhNjE3NzdlMzBiNzAwYTYwMmQzOTUyNTBiNjBmYzY0YWM2ZjhkYjAyN2U4ZGE4Yjk1NTBmMjRlZDExYTExZDlmOWY5YzVlMGFmMTQ1Yjg2NTk3NTFhYzZiNTU4NjFmNjM4OGE2NDMzNmIzMWVmZTQ1YzA4MDJkNzZhNTM0ODZhODFlYmEwNzMxNGI0ZDk2MWMxNDFhYjM0ZTJmNzZlZGFjMGU2ZGUzMTQyMmRmNzkyYWYwODFlNzY5YzdlZDA1ZGE5YTVhZjJmZGYzNmYxNDE3Njk5MDhiNzAwOTM3ZjBlMTA2OGMxMzFmMTc2ZWI5NmM2N2FmZGJlNzhmNDBkODYwMDdmYmNkNDdlNDllMmU0YzRjZTA0OTkzNmFkZmYxY2UzZWFjNDJiOTZiMzQyOWI1NjI2YjFhYTYyYWNkZTA3ZjQ1YTEzY2UxYmQyMTFmMzJiZDdlZmU0NzkwYzgzNzFlYmY4N2MxNjQ0NzdhNWM5ZmEzZTc4YzJmODgwNzdiMDk3MzQ0Y2ZmYTAzMWM0NDI5YzdmNDJkY2EwNzczNzg1MGVlN2E3NjliMzZkMGYwNjI1YWRmMTIwZWEyM2ZmNGUzOTNhNGZkY2I2NTU4ZGJmOWIyNjZhMDMyZTNiMDU5OWI5ZDY2OTJmY2ViZDgxNWEzODk3NjA3ODU2MzI1ZmNkMDExNWRjMzEwZGIzYTg3OTJmYmViZDM5OTQ5NGM4MzcxZTU4NTcyN2IzZDYzMjQxNDQ5Njg5M2QwMzgxM2JhMWY5OTY2MWJjZWI5ZGMxOGVjNWRjMjdmNTI2NzAzMTg2ODc3NjlmYzY3OGRkYzdlNDAyMjdjMjAwNTIyMDEzZjVjMGVlYzBlNDc4MWU2ZmMxNTNhMGMyZjRmM2Y5NWU1MTdjODQxOTkyNGFiMzk5OTJhZjhjMTk0NjUwNTdmMTM0NDg2Njk2YmE3ZmQ0NjUxNzY4YjRlNzQ5ZWYzNmYwMjQ0NDYxN2NmOTdmMGE0MjNlNGMxM2I3YjY2YmEyYjZjNDU2ODc4YjBiNTBjZTJlZTVlYzU2NGVkODg1NGY3ODJhYTFkMWM2YWE3NjBmMjUyMmM3ZDk3YjliMWFiZTBiYTgxMDk1OWQ3YWE0MDNhOTkzNzVhYTNlMzlhMTE1ZDFmYzZmZWRkMDAyZjM4MzBhNTBhODM3ZGM3MjAzMjllYzBjNzNkNWJmZDUwMDM4NWM3MzY4MzgyODdlMTkyMDE1MjVkMTg5YzNhMDg0Y2Q1YTNmMzU5ODc1ZTNiODMyNTI4OWNlZDE4YjYzYjAwZmY5Y2QwNzBjM2U2NzQ0NGJkM2Q4MzQ2MTc0MDg1Y2M0NTEzNWNhYTBjNjdiMzIyNmU0YTUyZTlhMWM1NWFlZDdlYzVmYWRlNmJmMTZjMTkKK1NJRzogZjkzNzI5ODk2OWNhMzRkOTc1ODQ0NDg5MDczNThiMGY0Nzg0MWYzMDIzYWZjN2VmNzY4MTUyMWM1YmUwZjVlNTYyOGE4ZjYwN2UyZjMxNjM2ZWY2MzY0NmIwZTk4OThhNzJhZDM1NTcwNmQyYzgwNjBmYmM2NDBlZmIzZDY2MDUKKworVFNUOiA2NTcKK1NLOiAgNzE2MmZlZjBhY2E0OTc0YjA5NGE2YTA4MDU0Mzk1Zjg3N2ZmOTQzM2YxZTMzZTIwZTg4ZWFhOTBmOTM4OTk3ZAorUEs6ICBhMjgwNjQwZjEzOWY0NWMzNWE0ODcxNTM3ZWVmZTZlZjlkYjAyZGU3ODVlZTlmZDU0ZjgwNWZiNTdkMzc0NmVmCitNU0c6IGM5MGY0NTBiZGExYzZlZmQ4ZDEyNzhkZWJkN2FlMDNlMmVhYzI3NDBhNWE5NjNmY2Y5NmM1MDRlMzFkNGQ2ZmNjNWUyYjUyYTI1MThkMjc0MWM1NWU5NTkxODY3YjI0MjMyMjhmOWMxOWYzM2M2ZjM4NzA1YzYyMDM2ZDQ4MGZmNTNkZjEyMDc3ZTM4ZmRiMDczYzY3MzEwNWRhMWUxMTYxOWJhNTMyMWE3MWI1ZjQ5OTMyMzRhMTE5NDhlYTExMGNmYTI0MmJjMjNmYWM5YWFlNDYyNjA2ZTM5NjQxY2E3MTQ3ZWViYmExZWVjNTUzZmNlOTRlNTNlNGUwMWIwNzNkZDc4MGEyZmY2NzhiMzE1NzJjYTExZWUwODc3ZTc1NmJjZGI2NjUzZTVlMWI0Y2JmYjU2OWE5ZDYwZTNlZTMzNjE4MmRjYjliMjVkMWJlNmRiZjliNWM3MTQ2ZDc3NTU4NTgzNGNhYmRlMDI3OGFlZTVkNTdjODVlOTgzZjg0ZDg4MzNhOWUxNWJjYzExMTk4ZTFjMWRhNmJhNTkyODIxMjlmMWRiOTY2ZjU0NjBjOGZiNjUzMGZiYzNhOThhMzFmYzBmNGU5YjMzNzM2NmVlYzFkY2UxMDhjODI2ZDQ5MDQ1YWJmYTEyZWU4ODc5N2YwOGYwNjgzZmVmNzdlZGFhMzU0M2I5MWNiMTE4ZTQyNGQ5YzQwOGRhNTQ3NDMxMTI1MTA3ZDliMDc0NGMyNDQzY2U5OTE3ZTFlMzI4ZDgxODUwYmFiYmM5NGQ5MjBhMWQwNmU1MjRkYmI2YzIzZGQ4MmUxNzg3ODIyZDcxYzRjZGM0MDlhZTg1YmE0ZGViNTgxZjkzNDc0OGY3NWU3YTc2OWI5ZDY4YzQ1ODllNTk0ZTY1Y2I2YzhmNDkwM2ZmYmFiZDVhMzI2ZTg5NDQxYTU0MmY4YWMyNjRjY2M2NGU5NWE4OTgyYTcxMGI2YzU2ZmY3ZDEwOTE2YWZjNDA5ZWE4YTQxYjc0Njc5ZGQ2YTc2NmY1OWM1MmI5MzA1YmE3MzNiMTNjOWU4MTFlZTEzMDgzOTI1ZjQyMDA2ODJiZDA1ZGVhMzM5NTMyNTIyOTcwYWExNDlkMDA0YTJlYTIwZmY0NjFlOWVjMGYzYjYyNTY1YzFhMTA2MjU5YzgzNjYwNWNjMjdjYWRjOTUxNWNiOTk3OWU4OWFmMjg3YzAyN2Q3NWVkYmY4N2Q1Y2ZmNjNhN2ZlYzliZDEwZTc4NzdhYjliZjg2OGQ3MzRiZDNhMjM3NGNlZjcwMjVjYzRkYWI3MTBlMjU0ODA2Njg1YTEzNmVjZDAzZTM2NzcwMzQ2NTEzYTE1MTQ1Yjg5MGVlZWY0N2I4MGVhMDhlNDZjODFkMjAyZTUzM2U5YTA2YTM4YTZmNzZlZjU3YTljNzM2ZWM3OGQwMGI4MDhlM2ZmZDljNzliOWRjN2EyZTU4OTkwNzY1NmM5MzJhYjhhOGI1N2RhMWE0OTViYTc0NTIwMTVlNzkyNGI1MjY5YWIxZjY3YmRiNDNhMzU4MzE0ODdhYjkwMDJmNTJkNzhiMTM0Y2QzNzUxOTI1YWFhYjBiNDVjOGU2YjBmMmJmMGNjOWE0NjU5MzE3MTA4ZmJhOTEzNmFhYmIwOTIxYTU4ZmJiOWI1MGU1MTI0M2Y5YjUzMTg0N2RjOTY1N2U5NmZiYWY3YWE2OThmZTZmZTQ0ZjkwNTkwMTQ0YzcwMzM3MjUwYzU4YmM1ZGQKK1NJRzogYWUxNjFjY2U5NTQwMzM4NGI2NWM2YmM5YjM5M2ViMDcyNTY0YzM1ZjNhNmMwNGZhNTE3YWIwNjhiY2QyMzc2N2NjMGM4ZWRkOTJiMWExM2FlOWE5Y2U0ODY0MTM3ZmI4OWMxZjM3Yjc0OGNmYzkxMzRiNjc0MWJhMWIyMjI4MGQKKworVFNUOiA2NTgKK1NLOiAgZGVhMTgwYzkxYjUzM2FhZjczNmJjNWQzYzhlNDc0ZDVlNWQ0NzViNzViOTJjZGU2YmQxZDEwZjNiOGY1NWFkNAorUEs6ICAzMGIyMGZiMzIwYjAwZTc3YzRlMGE4ZWIzNzMwYWYzYzBiMWM1ZjVlZDllZTJiMDU2MjcwN2U0ZjU1YzQ5MzhiCitNU0c6IDYwNjE0NGI3ZDRmOTZiZWY3ZjExMmI2ZDQxYmNiNTAwZDIxMzZjMTM0Y2VkYTIyMGUyNGQwZjE1MjRlY2ExMmMzMGYyYjEwMmM3ZjM3OGQ2YmJhMjU5YzViNGE1ZWY4ZWM5MzA5ZDVjOGRhN2U4ZDJkZWQzNzkyYWVlZWEyMTA4Zjc3ZDY2YjIzMDQ1OTM4ZWQ2NDc1MWYyMGQ0ODMyNmJlMmZiOTk2MjhjZmIxODczZDdkZDI3NTgxYzEwNWVjMTMyNDlhOTUyYTUwNzg0YjhiMzRjYjNiMmMxYTAwNGZhOGI2MjhhMDc2N2ZhOWFiZjA1OGQ5NTVkZjg1ZDEzNGEwZmM3ZjRiN2Q3ZmIwYzhkMzFiY2UzNDVkZDBhNDI4MjE0NWFmYjJmZjE5NzUxZjJjYzNhMWNhZWEyNDJiYWFmNTM4NzQ5YmYzODgwMDBlM2RjMWQ3MzkzNTlkZmViYWU2NGFlMWUxMGZiNmZjMTdjYzlmYjk1MDUzNWMyZGUxMjk1ODdhODY4NTliN2JlMzZkZmU5YjZjMTE0MWIyNWUwOTE1YzhkNGFhMWNjZWFlNzA0NmIzZDdjZmE5NDBiYzk4ZDRkNjlmYzVhMzBkZGUxZGVlNDJmYjUyNzIyODFiZjhmOGU3ZjNlMWEwNDM5N2ZiNGYzYWRlZmM1NzUzMmRkYmRlMzY4MzNhNjc2ZTZmMzljODJhZmY2YmY0ODMyZWM5NzFlMDNiZTM4MjljMDJhMjAzYzgyZDllYjhjMTYzMGVlOTY5M2Y0NWQyNmY1ZjUxYTMxMDNjYTY0ZDQ2OGVjZWFjMWIyOWFmNGM0MmViMjE2ZDc2ZWM4OTk0ODM2YjRiZWM3NjQ4OWNhNTA3MDY4MGMyYzJlYjQ1NzIxMGE3N2M0N2ZkY2JmNjAwMTcyMDczYTUzZjE0NTNiYjVjODA0MzljODgyZjA3MzZkZTQwNjM3YjRmNWFiMWY3NjFmZjM1NWM2ZTliZDRhYmRlNzU2MGQ1ZmMxMTNjODMwMTU5YTFiNzdjNGU4N2JjMmM2OTg4MGE0MGM1ODA1ZWNjOGFhYWY1NzU3NWJjY2Q4MTc3ZmM2YjgzNTY5MjMzYzBmNWNhMjIzYWM0MDEzY2ExMDZjYWMyODU0NzA2YWVhZDcxNGZhMjlmMjg2MGE1Zjk3NTMyNjhhMzY3MWQ5ZjU5Y2RlNjA0OGNmMGI4OTg2MDUwZjdmNTQ5ZTRmZDc1NTdmMmZjM2ZjZGNjZGRjZWZkYTU4NmE2NGIzMDA2ZTU4MjVmMjdjYTMxNjg3Y2FmNjYzYmQ5MGEwNWIxMTUyZDdjODhkN2YxMDUxYTlkNzkxNzQ4NjUxZDg4OGE2YTEyZjIyZDZjOGMzZjc4YzJiODZlYWY1Mzk0YjRlZjdlZWZiODk3OTdiMjVlNTQyZGM5MzEwMmQwMjFhMWQwYmVkNmE3ZGNkZDgxMDJiOGYwNDMwYTBiYzIxZDkwNGEzYzkzNDZjMDE4MzQzZGQ5OTM3Y2IzNTI1MDAwN2EyODQ4MjVkYjA4ZTlhMTFmZWUzMWNmZjdhMzE0YzQ4YzQyZDhiMzE0YWNjMjc4MjJhZjAzZDE5NTRjN2NjOGJmOWFkNGU5ZTk4ZjRhZDRlZmIzNTUyODhkYWE4YzkwZGU5MDM3ZTY0YTc4NjFmNWVlNDNhZGE5ZjBmY2NkZTM0ZDBiY2Y1MDI4ODU1MGY3MDBmMjE1YTc5NDRhNTM4MGUyYThlM2YwNGYyYjRmNQorU0lHOiBkMDgzMzMzZmI4NGU3OWM5YjMzZTU1ZTgxOTJkNTcxZmZjOGRjNTA3NDViNmI1ZmRkOGM0NGQ5MmE2M2ZkMTc4YzRlNTdjMmFiM2ExMjExYzBiYTJkMzlkYTMwYjA2NjI5ZDhkMWNjMWQ5ZjI1OTMyNjNkNTI0ZmE1YTJlYmMwMworCitUU1Q6IDY1OQorU0s6ICA5ZGFmNmRiYjdmNzYyOTY2ZTdhNTdjMmVjMTk5NmU5ZjViNTU1Yjk4NjZiOGUzMWRlYWFiNDM1NmViMTM4MTZlCitQSzogIGYwMjFiNTVhMzZkOWZiZmJmMjk3OGJjMGRmNzM2YjI4OWM4MjQxZDY0MzUzMDk4NDFhMTM0YjA3ZDQ3Y2U0ZWQKK01TRzogNTQ0NTIzOTAwZGFhNjc3OGMwMzkxYWU0MDQ0YTUxYzBjNGE1ZTQ0NDEzM2ZiZDc3NDdkNTM5YTc0NGZhNjBhYjVkYzU0ZTE4MTlkYzhlNTY4OTljNTZlZmQ3ZWYzZGEzNDE3OTBlY2M0OTY0NWVmMzI1YzY1NjhhZTk3MWQzMGQyMWJiN2YyMzQ2NGY0NmEyNGI4MGQ0OWJiOTNjNmU5MWRlNzliMjQzMzFkMDcwN2Y0M2QwNjY1ZDAxOTc3NDNhZGZmNjkwZDYxNWExYzkyNTg3NzdmYzQ3ZDAyMTcxNDI0MjZhNDczNDg5MmViNjIyYWI4ZTUwYmIxMjhlYzNhODk1MjY2YTM4NjFhMzk3NjhiYzc2MDk2ZjU4MWZkMDgyZGY5YjcyMjNlODVhOGFmYmRiNWNhYTQ5MjJhZjJhMDE0YmY4YTVjZDExZTVjNWVhOTNlOTFjZDQ2ZDVhMWI5OWI4NWEyNjcwZTMyMWRlMmUzMjI1NWFmZDY3ZmUyYzM3ZmQ5MzJjYWNhMjJkMjQxZmFmNGNjZWZlZmY1OGQ2YmQwNGNmYWYxMWRlZGQyOWM4NzE5ZmZjYjAyZWY2NWM1ZDNlYjc4YjRmYzBkMTcwYTJlMzQzMmNjODEyZjBkMDQxZDk3NjBjMTNjMTJmN2M3ZjJmODRmZTVlMGY3MDBjMTBiMWE2OWNhNDY2YTcwYmRlZmY4ZGJlYzdkMzE4ZmIwOWRkZDgyN2VmNjFjYWE2OTEwYmJjMDYxY2JkYTJiNTI3ZWYyZTU5ZWQ0YzE3MjI5OTcyZjg5NTY3ZDcwNWRlOTIzMTkyNGI0MWJiNmU3YzAxZmU4NTQyNjQ0NzRmYTc2YjFmODhjZDU3ZWFjMzExMTcxYWYxMDNkMjMwNzg0MjRhMTI2NzVmMmZhMzZjMmRlMGJmNTNjMjk1ZmVlYjMxNTdkZTk1ODkyMjk4NmUzMjUxM2RmYTMzYjM1ZTE1YzM5NGExMWMwZmNjNTViODJkNmRkMDU5N2NkZGQyN2VkZTdkZTEyOTg1YTYxNmU2NDAyNmJlZmI1ZDY5MDQ4MmIzZmYyMmMwZGQyMWYyN2EwODZkMzdhMDQ5OWVhMzZmZTJjNGI1YTk1OWQxMGU5YTYxMGNhYjFmZTBkMjhjZjEwMTNkY2FlNjNkOGZkZWUwZWNiZDhiNGUxOWQ1ZDA0MGUyZmFkN2QwNDEzYTM4ZThjNGU3MzU1MmFkNDYwNDdiNWJiZGQxNWMwOWNjMGQzNGU0OGI5MWZkYmFlMmE5ZDE2MmQ0YjIxZWUyMGExZWY1MzVlYTg4MzU5NWJjNDk1MTY5MmE2NzE2MzQ1NGM3MzY3ZjEzNGJmNjQ1ZDQ4Zjk5NjllM2Q0ZjBmOWVhZjQxNDRjZTk4MGEwYTJlMzM0MmM3NDZjMmJkYzNjY2RjMmY4YTdkYTU3YTBlODAyODc4MmQzMGFmNTg1N2Q5ZWZiMzc2NjZkZjY1ZDdjYzM4NDcxNjY2MWU2MWZmNWMwOTc1MjU5NWU5NDExMmNhMWE4NDBkNmU0ZjZlYzBlNTU0OTRjNWI0NGY3YzBmMGQ0YTk5Y2Q3MDkwNWJmODQ4NTU2MTc0OGY0ZGMwZmQ3YTQ0YTFiMTM5MTEzYzM4YTFlOGViNWM3YTIwZjNlOTUyZWFlYThjZTM4YjIwN2MyOGVkOTcyNzE4ZjAzMWY0NzdjNjIwN2NlNDMzYzUxNWY1YWMyODQwZjQ5NzRmMWYxNjk4OTYyNmM3NmJjOTgKK1NJRzogNDliNmJjNDZiN2FiYjU2OTRkYTk0MjE1ZWZjNGIzMGVlYTA0YWUyZTczZWIyZGE4ZThjOWVmOWJlMjIyMjQ5OGIxN2UxMzkzOTY0NmMyOWUzMmQ2NDU1ODQ2NDA2NDE1OTBiMWJiZGJmZTI0ZjM2YzZmNjk0YmY4NzIzOGVlMDQKKworVFNUOiA2NjAKK1NLOiAgNzE4NmY4ZDE2OGQ5ZGRmMTdlZGJhZjBlN2IxYWJjYjI2ZGEzZTRjMDI3MmQ5ODc5YzdmZGZmNjQyMWM0ZWE1MAorUEs6ICA5NmI0YTY1NjIzMjAyOWZjMWI4MzY0NzAzY2JlYTdhNWQ3Mzg3NTE4YTg4Y2VkMWE5MTVlYzhkODg2ODQ4MTMyCitNU0c6IGEzZTZjYjZiODRjYzVjZjFmYjFhODQ4YjRiOGVhN2NiN2M4N2UwNDQ1NzUwYzYxZjlhYTVkNzdkZWRkZjk0OTQ2M2VjZDM5YmZjNzFmMjYxMGMyYTk0MjQ4NDdmYjc2Zjg0YzVkYTFmYTEwZWY3MThhMzQ1NjZjZWMxYjNlODk5ZTcyNTJlOGQ0ZDM0NjAxNjQ5OGZmMTE5OTcyNzUwMDYxNjYwYmFlZDMxMjgyNzU4MzE4MTA3M2QxZGM3NGI3NmM0MzBjYTMwZDQwOWU0ZTg0MzljMGZjNDhjMDA2ODA2MjlkNDNhZTJhNzdkNjkyMjhmN2Y4YTEyNTNhZjE1YmQyY2I2YmIxYzE2OTY1NTBjNGM3OTBmNDQ5ODY5NjMwYWI5MmI5YzExY2RlMWY5NjFhYTIxMDNlYzIzZjdkOWYwZmU5YzNjNDEzMjU4MmVmYTc5YTY2YWUzNDI2ZTUxMDViODBiZmU1ZTA0ZGM4YmIxZTM4YTMxMTBjZDcyOTg0YjNlZjAyYTBjYTYyYWI2MzhjYmNmYmM4YTZiNTkzZDI2MTNkYzA2ZWM4NmZlZTM0ZjY1MThkNGEzZmJkYzE1NzIzNzE3NDU2NGRhZWI2Njc0Y2RjMzRmNGQ2NTM3Y2Y4MWQ4YWE5YmRkYmYzYWVkYTMxMmRhYWVlZTMzNmY5ZWQ4YmZmODFlMjk0YmM3ZDQ0ZDI1Y2Q3ODcwNzJlNmNiNDE0YjY1ZmI3YTg0NmZjMDY1MzY3YmE4ZTM3YmVmZmRmMGI3YmE4Zjk4Y2RmMWViODcwZjRlOGI3MTMwZmEzNDI5ZDJlMjRiY2U1OTk0ZGFmMWFhNjVlNWY2MDNiNjMxMDUzZGM1MTBiMmYwOTdlODZlOWI5YjU1MjMwMjc1Nzk2OGQwMTM2ZWU2NzU0YzQyYTMyYzk5MGFkZDljYjUyOWJjODk3NTFkZmE0ZTVlM2EwYmFkYWY0Y2M0MGI2YTA5NTA3ZjlmY2QyNGMzY2E3MjI1OTU5OWM2ZWU1OGQ4NTdiM2ExODllMDQ4OTAyZTg4NWEzNjA3NDI2MDkzY2IwZmFiNDM3YzBmYjBlZDJmMWU5NmU5NDQxYTdlOTU0ZmUzZWY3NjQ2ZTI2YTM5YTA3MDMzZDBhMTU1NWRmZWVkOWE2ZjU3Nzk0YWYzYTJhYmYwMDU3ZTlmODUzYWU1YzMwMTM4ZmQ4MGUyZjI5YzJmNGE5M2FkMzE0NWRhMTBhM2UzMWNlOWZmOTc4NmFjNjVkODYwMzdkOThiN2FhNmQxMWRlODgwMDAxMGUxMzM4NjllYjY3YTUwMzliOWI4ZmViNmVmOTAzZDBjYzc0NjQxMjYwN2RhNzI1Y2UyZGM2YTM1MjEwOWRiYzZhNWU0MGIxNzBjMjMwNTBiYzRmYjFlZmEwYzM0ZmVjMDBlYWUzMjE5YzI5MDQwZThmNTk3OGM5Mzg0ZWU5MTVkOGM5Mzk4ZGQxMjBkNWMzY2JhMzhmODUyNmIwNjE5N2NiMmMyNjFkZWM3ZDcyNmFlMTMwZjliZWUxNzI2MTcwMGU5OTkzMWZhYzRiNGRjYTBmNzU4NzAxYWNiZjM3MDdkNDdkZjUzMjExMzBlYzEwYmIzYjEzMDc4YzRkYzVkZTM0NzBmMTU4YjU3ZGJlYjg3OGIzYTg1MjRlMGVkMmM5NTQ3NTQ1ZjBmZGRmMTMxMjVlNDViYjIzZDZhN2IzODNhMTg3ZjRjNWQ1NGE3YjRjODNkNTk1N2YyY2Q3ZTZmYmMKK1NJRzogYTljMDQ5OWZjMjE2YTE0NTMyZDczNjM2NWM2MzU1ZjkzOGY4ZDgxOTRmYTExMzI4NDhmODNlNDkwNDU0ZDRiYmY2OTI2OWYxMjI1OWZjNmMwNzRjMTAxNWU0MjVlNGY0ZjI3YzAyOWM5MzMzNDk1MTM2MWEzNWFkMTE3NjU0MGUKKworVFNUOiA2NjEKK1NLOiAgZTg2ZThjNjI1NjZlMTU3NTNiZDU1NzdlYWFlN2YyNDEwNWI3NDA1NWEyNTYyOTU4MDcwOGJmYzgzYWViZjA2YworUEs6ICA4YzhjZTg4MmQ1Zjc2NTg2ZDhkZGNjYzU1NzliY2MxY2RmNGNmZDcxNjIzMDRjYjEwZTc2OTYwMjZlNzA3ZjE3CitNU0c6IDEyZmE2MzFiMGU0ODJlOWI5ZDYzM2U5NGI4MmQ4YWI0MzZmZTU0OGU1Yjk1ZGE5MjYyNDYyM2QxM2YyYzcwZGE3NzViYTEzNmM1MjI5YzE2YTBjN2E2ZmE5MTRiMmZlZGE1NjRlMTcyMTllNDczNzBmOTUxNWJiMWQ1OWRlNmU5NTg2MjA0ZDk0M2RjNTYwZDczZTJlNzU3ZjdlYjM5YmJjNzExMWJiNDZiYzY0M2MxM2Y2MDIxMTI3MzliZWM3NzhkN2Q0ZjQ5ZDA5MjU2M2Q2OGY1Nzc2ZTQzMGUzYjBiZjJkYzFiMDFiZWIzMDQwMTk2ZGE2MzAyOTA4YmZlOTFlMGZjMzhlMDRjMTUwZWY5MDdkYzczNmM0NDVmZjIxZmRiZDJkYzFlYWMwYTBmNWQwMGEzMGFmMDI4YWZlMmZmNjExNjJiNzU4YzdkYTlhNzc2NjY2YTExMjM1OTQzMWM0ODg1NmE4N2NhODJkM2RkMWM4YWYzNzY1OTg2MzU0MzJiZjg5MWJlY2JjMzNhOGZkYTQ0Y2U4ODNlYThhZjRhZDhiOTFhOTI2MWNlNzZiOWU5MzljNDYxZmFjNTNhZTBmMDc2ZTgyZDg3OWFhY2U4ZjM4ZjEyMGJjOWIwNGQ4MTI1ZWQyNGJjZDc3OWQ5ZDI0Mzg2YjFkZDIwMTdlYmVlODE5NzM3NmU4YzM2ZmEzYWVmOGMxZTcxM2UyYjhiY2U0OTY2ZDg0ODg4NjgxYmE3ODQ5NWZiZDFkNmNjYTU4NjI2ZTY4NTRjZGE2MDZiODNkNjI5M2QwMWU4ZTNlMTNiYmY0YWFjODUxZDlhMWUwMGQwMDI0ZTI2OTkzYjBiMzA5MWJlN2U4MDYxYmNiYjNjYmIyMzAyY2VhYjk2ODk3YThlMWZmMzY3ZWM4NjI1NjkzY2YzMTUzNDEyNGE5ZDVkNzI1YmNhZTAwMWQ2N2JjMjExMWQwYWI4MTExZmExZDI0ZTRlZDA2ZDYzNTgzY2U2OTBmMmEwNDYyNmQ3OTFkMjllM2UzMTVhNDE1YmYyZTg1M2E1ZjI5NzRjODMzYTNmZTJlMjkwOWNmNjY5YzczYzFmNTkzOTJkMzBjMzdmM2I5YzVhM2RkY2ZkNzU2MjFmZGEzNmU0YmEyZjE2MTQ3ODU4ZjZmMjA2YjlhMTQwZjFkZGMxNDY2YzlhNTNlZDczZjgyNDkwYmM5NTMyMmM5NTVmNjFkMTFjYjUxZDVlOGE1OGM2YjNjYjBmZGYwNDE5NzYzMjAxYmVlYTkzYTg1MTJiMTQwNTI0NWJmYzM4NDE1NWFkYzVjZTc3OGFhNzRkMDBhMzIyNzI2NDY1MTE5YWY3OTUwMWYwNDBkZDBhN2E4NDA2MDAwMWNhODlkMmZlNWU5Y2Y5Nzc5YTU0N2UzZWJkM2JmODY0Mjk5MGEzNjkwZTJiMmMzZTU0Y2I3ZWVlZWFiYzI0MmI0ZGQ5OTI3NGM0MjVhODY3OTMxYzkyOWNhNzA4MDg2MDFjMzkwOGNmZDc4ODg2N2Q2ODdkYzM2NmU5NzYzNTBjOWU3MDU4NGJkMzkwZDY3ZWViN2NmZWEyNmM0MjY4NmQzZDk2MjBmNjJmNjQxMDRlZjQxZWQxZDEzMGQ3OWUzMjU5Mzg0ODYyOTZiN2FiMmQyYWRiNzg1MjY3NDNlNDAwYWNiMmI3YWYwOTYyOGQ2OGNmOTQ3NTEwMTYyNWMyMGUxZGMwNTFkNzNjOTk3Yzk1MmUxMjgxMmM4MDViNjhmZgorU0lHOiA1NGQyZmQ0NGFjZjllMjA5YmM3ZTQzMzM3MmJkNzMwNzRkMDc4MDZhNzdjNmNlMjI4ZTliZTk5NDQxOGIwMGM3ZWNiY2I3YWMwMDZjMjk0YWVjOWRlNjY4NTcyYWRkNTE3YzA2YjRlYjRmZTJmZjM1MjNiZjA0M2RmNDRkM2QwZAorCitUU1Q6IDY2MgorU0s6ICBhNWNhYjI3MjdlMmYxMzFhNGQ2M2ZhY2VlNzk5MzM2NjYzOTMwYWEwN2FmZGE2YmQ1YThlOTg1YTAyZGViMWVhCitQSzogIGFjMzU1Zjk1MjYwZmJmZWE3NzhjNTViNWFmOGIzZmQxZjI0ZDI2OTNkYTM1ZGU0ZWU1MDhhMjdlZDM1MDM5MWYKK01TRzogNDgzNDM5MTU0ZGQ1ZTVkMTA5ODU3YzI0ZDFjNGU3ZmJiZWZkMmYzODY1MWRhODEyODlmMmFkM2Q2MTU0MzA2NTM4YjgyYWM3ZGJhOTIxMGU3NDA3NzZlZGU0Y2NmNTFkNGY2MzA5NGIwM2U0NmFkM2FhM2MzMTk0N2Q4YzM2Y2U2Zjk0ZTg1Mjk2YmRlZGNjMWVhZDYyZWFhMTQ0MWVjZGUwYTIyNWQwYmYwMmVkY2FjZjg2NTAxNDg5OWFmNjZkOTgwODA0MGMyZDAyMDAwYTBmNWNlNGYxNjgzYzFhNDk1Mjc2ZDljNGQ3MjhjOWVjZDZmMDc4ZGI4YTBjZmMyNjcxODcyMzg1NjJhYjFhMWVhMjgxM2ZiNGYxMmU4NzhlMWJhMTQzZjRkMDZhM2JjODEwMGMzNTUwMTE4ZDY5ZGFlNjdiNTVlZDY5MmFjZjk0NDRkYWE1YzNlM2MwYTk4ZWUyOGNmMTcyZGUwYzU4NGM5ZjJlYzliYjZlOWI1N2Y1NzJhODZmZjg3MjlmNjVmNGM2NWI3ZmVhY2NhYTIxNzIwZWQ3OWU5MDYxOGJjYWZiZmQ5NTMzZGE4NTIzMmI0NTA4ODNhYTkxOWY4MjdmMDRjNGE5N2JmNTEzOTBkNGY4NTY5YzE5MTcyNmY0NGY3ZTM5ZmIzZGI3M2JmYzQxNWI2ZmZjYThiOTFhY2FhZDY5MjM4NTcyZjE0YjQ5OTg1ZWEwM2M5OGQ3YjFkNDRiM2E2NTU0NzY1YjE5YWJmOWIyNTI3NGU5N2U0NjM0ZTRiMGY5ZTgwMmViNmY3NDNmZmY5NTA3NTdlZTAxM2E2OTg4MjIxODgxYTc0NDNmMWYzMmJjY2IwMDdlOTkzNzljN2NhNGY5MDZkNWZlMTFjYjEyZjY2YjUzYTNkMjFhYzk0N2JlMGM4MTUwYmNkMDRmMWM4MTZiM2YwYzA3YzVmYmMwOTA1YTcxMzY5NTY4NDlkYTAzODM2ZGFlYzI1YzNlMWEwNmVjM2FlYjIwNTY0ODE3NmY4OWY0YTI5MWZhYzRmMWQzODk5ZjU2YzkwNjVlZWJiODc2OGI4NGIzMWI3Y2MwMzEwOGJkMDg4ODMzOGQxNzc0OTk0OTcwMjkyZDkzNTAzMWZlYTMzNWQ5ZTc5MDhmZTAyNTQ4ODljMGIxNzFjZmUwYWYyZTZmZGU3YTVlYTNkZTFmZGNkYWU1MzdiNjMxMzExOWMyN2Y3NzIwMjRlZjM2ZTQ1YzhiODlmMjZjOTNkOWVlYTEzNzI1ZTEyZDgxMGNmOTgyNGFlYTA0Y2I4MDJkYTdlNDU4ZTg0MmNhMzc1ZTM2NzEzNDZlMDA4OWRlYzU3MWJlMTY5YjBkOTA5NjZiZjM2OGZlMzY5OGZkM2U3MmJmMTYyNDlkZDkwMGFmNmQyOWZmYTQ4MzUxMzYwZjEyMjQxNzE0NTg1ZjdhOWI0YzdiYWZjOTUyMjI2NzM1ZGUxNDYyNzQzZDc4YWJhZDBmNjcxMWYyNDk1ZjMzMTNhZDRlMGJhMjE2YjBkZWE1ZGMxNTE2YTk1NDlmN2RmY2ZlYjkzZTU5MWFiZWRhNWVhM2M3MDQ1OTA2NTIzYjQwODY4Y2E1NzM1ZDZhMzM3MWMzYzI5NGMxMTEyNmQwOTdmNGM3MDhlOTA0NjRjMWFkOTE0MmZhMGJlZGYwN2RmYzVmNGNiNjdkNmVkODBmMWJmZTcyNjgzY2ZiMmFkNjY1MzBkYzQzZDcwMjNmMzc5MGZmNDJkOTViZDgKK1NJRzogMTM4YzdhOGVjYTViNWMzNzE1ODgxMzg0M2M5YTkwNGU1ZjUzMGFkOTcxZWU0MzJhNDRmMzQ0ZjhjNjRiYmZhZjEwMmZmNDFkYWE1Y2Y3MjJhNGJjNjY0MDU4ODc1OWI4ZjM2ZjljMDU5ZWFiOTM2Y2M0NWVkNDc5NjM5NGEwMDIKKworVFNUOiA2NjMKK1NLOiAgY2I2MzE5NjEzNzc5YTRlZjY2YmUxNDE0NGIyODQwYWQwMTY3YzAzZjNiOGQwNGZmNTkyY2QxZDJkNzIyZTMzMAorUEs6ICAxOGViMDNmMGEzMzRiMDgwZTFhZjQzOTlkODM3NmQ4M2M1MzMzMTZkYzY4N2NmMzQxZjBhZmFiNDUwOTY1Mjk5CitNU0c6IDg3NGE2YzgxZDZkYjcxMzNhNzkxNjk3NjBjODRkMzZlZWEzZDQyZWEwODkyYjdjOGRkZTg0NGEzYTZiNjBhYTlmMjY2MDcyNmM5YzRkZDI2YTAxZjRlZDBkYzFjNTNiYTYwMDU0NjNmN2VhNjRhMWVjNjM5NTNiYzNkODEwNTJhMmYxMDg0Mzg5YTc3MDZkZjc0ZWQ0MTM2MDgyYWI1YzZlOGM3ZjQxMWRmOWQzYTBmM2M0MGY1YTYwZTJkMjFhODU0OGU3YTI1ZGVlMzQwMzBiM2MzZTc1Y2FhOTNkZGFhOWMxOTBjYjZkZWRhMjQxM2Q1NGUzNzNkNDM1M2RiYTQzZDM5NDkxYTJmNTZjOGIzNmQ0NTAxNmY3N2Q3NDcxNjkxNjM0NTM5ZTc2YzRmYjQxOTEzNDcyYjBhMjMwNTRmNTQ4ZjU0YjFlNzEwOWM4YjY1MjFiNTdhZTk4MWQwNTAzMTZhMzNjNDljNzExNjI2OGRjYzRiNzhjMmJhZTUzYTNhZTRkZDE3OGJiOGI3NmJiM2JlZmUxOWU0MWEyY2YxMmNlYmI3MTE2OGY5NzFmMjAyNDYxYzYzZjdkNmVlZjEwN2Y1YjEwMzBlZGQ0ZTc1MDA5ZTkxMTZjM2NkMGU4YmRkYzI5OWI0MWYxYTQ1ZTc4NGVmYTY0NmRhZGE2NDA2OGU5MjQ4ZWM5ODhmMjMyNjM0YWQzZDVhYWIxOTU2MGU4MzBhNWJkNjY1NDU3Yzk0Mjk1ZTFhZjAxNjBmYmNlMjcyZWY0ODQ1ZGRmMGM0ZjI0ZDk3NmY1MTg2OTBlYTFmODJmZjRkZmE0ODEzNjQxYTY3NTk4ZWE5ODQwMWUwZmYxMGEwZTU4MmUyYjkwODY3YjRlNjIzMmMzNGVhNDk5YzE2OTkwOWE0NDEyNmYzNzdkOGNjMWMxMTkwNTg2NjM0MGVmZDFlN2IwNzdkYzc0NTZkNTljOWI5NmExMjRhYWMzYjMzYmIyMjc0NDFiYjdhNTJlNmMzMTQwZDdhNGY2N2NhMDViYmM5M2M5Mzc3NWI5MjkxMTlhMjI0ZWQ4ZjM5MDA1ODIwZjQyMGNjNmM1MzBlNjFlMjBhZGNhMDFlOTM5Y2MwMzFkZjQ5Y2RiMWVjOGZmNDkzYzllZmJjYWQzNGM1NzEwOGVmZDc2NDU1ODk2NmZiMTQ3MGIwNzQ1ZTY5NjYxOTFhOWE5ZTQ0NTgxYjA5ZmFmNDY5Zjk1MTUzNzIwM2Q5MjZiYzhhNTVkMDgwYTgwNTE4MWRkNzI5NmVkMjBhODE4MjY4Zjc1NWVhYTY2YjA4MjI0MmY0ZDAyMGY3Y2Q2NzIwODkwNDg0YzAxYzc1N2ZlMzVkODdiNWJjOTA2ZGVhY2MyZTMwNzFkZTQ2MDFiY2YwZGQ2YjgzN2M0MzMxMDYwNDdmZDhlYzliZDBlOThjOWVlODA2ZjdlYzhjNWExMGVhMjEzNmYxZjkwZjkwMGI4NTNmOTUzZjAwYjA3NmJkMWViZDkyOWQwOGEzOGJlYzY4ZDg2NjQzNTA0N2JjYjY3MjFlMDZiNjQwODVkYzA1NThjMWZhODVhMmM4M2IwY2FmNGM4MTYwODRmMTBhNGM1ODg1Mjk1YmNhMTVmZjdjMThlNTk2YzYyYzkyZWU5OTIxYTI3YzI5ZDE5NWJkMjgyMjEzZmYzNjYwYjZlNzU0NmI0ZWFhNzc3Y2UzOWZjNWQyMDQ4NGM3MWVkNmNhMDZmOWI3N2FiMWQ4NzIzOTNhYjJkMTAyNTUKK1NJRzogYzFiMzk5Y2RjMTk4ZTlhMTU5ZTY4NGZjMjY2ODZkZTY2MGRhNTRjZmUzMTJjYTczNDVkZjBjN2QxNWEzNTc0MzAxNDQxMGJkMmY2Y2QxMWVlZjMzYTg5YjNkMTVjYmMxN2M3YTM1ODkzN2ZkOTk3MjA1MDUxZjkyNTdjMjU2MDkKKworVFNUOiA2NjQKK1NLOiAgYjI5OGFkZjM4YTY3MDhmOGQxOGZmMWVkOTZiZmJhYjQyMTU0MGQwOTZjNGU0MzUxYjkyMjA5YjVlNmFhYWI2NQorUEs6ICA3NzBlZGY0MmI4YTAzOWM2Y2FiOWJhNjVlYmZiMTM1YWJjMmRhMzE0YTRjMzA5ZjQ2YThmMzI1YjUyZDA2NTkzCitNU0c6IDlkZjRkNWQ3NTY1ZDJjMDUyMjYyZGQzNGQ2MDA3ZDg2ZDljMGYwN2M3MDg5YWY2MTE5ZTMwNGY0ZDgwMTFkN2VhYWQ3N2IzZWY3MGNjMjgwODQ3ZDU5ZjI5NzIwMmI3ZTE4NjFhZWYzMzRiZjM4ZGUxNDc0MGU4MDczYzk1NWE4NTFkMmNmM2RhZGMzZWRjZTE1YmU0OTBlYWE4NDViYTU1M2ZjNmU4NzQ2ZTUyOTE1ZTY1NWFmNGI4NmM2MjlkNGM1MjI3ODM2MzVkNDY0YTI4MjU3NzdkODlkNzA5NzY3N2VmMGU1ZWVhZTM4NTM3ZWNiNjU2ZTNiMjhkZDA3MzU4ZmQ5ZmIyY2Q0NjI1MTcyODY2NTlhZWZjNzlkMzc0ZDFkMTNlZDkzOTY3YzUzMGNkZWE0ZjMxNGEwZjkxZDYyODliNGM3YTQyNzliNmY0YzRhYmNhMzMzNTdmNjllZDg0YjkxMTk2MzdhZGI3YzE4ZTY5NGNiM2M1NmU3MzYzN2RhOTEwNzM1ZDQzYzM4YWE4MDg2Njc1YTA2YWQzNzBlNTcyNjg4MWRhNWUxYTFkYzYxNDRkNmE2MmFmZjdmYjBjMzUyZDg4ZGM5NzFhM2Q3MmQzMDcxZTE0YjQ3NDI1MzU2YWYxYjAxOTIzMzUzODI2MTQ1MWE5OWE2Y2Y0YTA3Y2U5YWIxYzM5OTBkZTZhYjhkZTIxMTZjNzU2MTA1YzUxMmI3YTNlZWIzMTU3YjE1OGIzMjFlNDQ0ZTgwNmQ4OTBiMzg5MGVkOWRkYzg2OWYxNzExNzIzYmI5OWE3MmJkYjkyM2QxMzFiYTRlZGJmYmI2ZGFlOTlhNWM3YjMyOGQzMTBkZjlhNmQxZGNkODU5MTg5NjI4MzNlODllMjBmNWM1ZTYzMzNhYzg2MTA5NGFlOWU3OTljODY0MWI5YmFlYTExYTJlMGVjMjM0YmU1OTMwZTAyODgwODU5Y2RlYzBkOTc4MjM3Y2JlYTVjN2MzMmMxMTFiYWZkZDRiZmJmZmU0ZmIzNDg1ZWZmZWNkNTFiZDE5NWE3MTQwNGNhNWI1OWFmYTI1MmQ3YjVmZjlkMDMwZjQ4YzZmYWFkYmRiYTkxOGYyMWEwY2QzOWFmNTY5NjZkY2NmYTI1ZmI1YTVjZjlhNGIyNmE3ZjU0NDFkZjZlMzIwZTM0YjI3MzkzZGUyZWNmYmQ2OWExNTk0OTA5YTZjNjg1ZWM2NDVmY2YzMDQ4ZDAxNDhmYTM4ZDNlOGE2NGRjM2MyMWFlNDRkYTdlNDZhNWVhNzkzNmMyYmEwODM2ODlhNzhjYTNhYzYwYjg3YmU2ZDIzZWE0MGY1OTYxNTgzNzQyODQyZTM3NTI1YTQ5YzVmZThmZDE1ZDdiMGM5ZThmY2NkMDc5MzZkMTk1MzgyMTJmNzM3M2RiYmYzZGY3ZDQ2YWRmOWQ5ZjVkYjA5NTI0YzY1Yjg4M2FlNmY2Y2VmYTI0YjE5ZWM0OGNlMjhjZmE3MzRkOWJkNmU3NzgzN2QxYTE0ZDZhMTlkMzQ1YmZiZWE1NTllN2U2YmZiNzFkZGFkODNjZDhkZWVhYjY4N2ZlNzNjMDU3NDg4ZjhmMmIzZTJlMjZkMTMwMDlmNGQyM2U2NjE5YTIzYzA2OTJhZjc2NjY5MjE3ZDVlYmQ0NjA4NWIzOTg4OTBlNWM5MWZkYjRkYjViYTQwZTc3NzNkNTE4ZDNjZjAwYzBhNWI1YTRiMGYxYjg1ZDYyOTE2YTU5ZTU2MDdiN2IxZWI4MAorU0lHOiBlNTVmOGQzMDQxMjJkYzE3NWNmMDI3NDY3NGZjOWRlZGZlYzJiNWY4YTJlZWIxZTNlN2Y4ZTBkZmJhMGRhYzJkMzJmNGU3MDRjZTkxY2Q1OTkxODQxMzNjM2JmMTA2M2QyZmFlNjNkNzNhY2M1NzcyZDcxOGQ4MTE4MzMxODYwMgorCitUU1Q6IDY2NQorU0s6ICBlOWNmMTZkNjk2ZjYzYjU5ZTVlMjVjOWVlMmQ3NWJiMDVlZDJiYWE1OTFhNzU1N2Y5ZmIxMjljZjk4M2RlMGJhCitQSzogIDZkMWFlMzg1ZTgwYTM5NTVlOGQwYzU5M2E4MWY0MzFjZDQzMjY3MWU3OGNkYmFmZTgzZmU1OGRiY2RiOTg1NjAKK01TRzogYTEwZmVhOGZjOTNlY2NmZTJhNmI3ODI2MDc5NTYzYWRmOGFhOWE2NjY0NDQ5MzIyMDBjY2E5NDQ3ZGQwMjdjNWM3MjA0ZWE2MmJmOGY1ZTJlMzkxNDVhYzM5NDhhYjNmMzE4Njg4N2IzMGJjNjAyMzMwMjRiNDgzZjNmNTE5MDM2YTNlOTRjOGQ3NTEwYTg1M2FjNmUyMGM2ZTUyNmVlM2NkYjc2ZGU2NjNmNjczMDVhZDgwZGYyMzQyYzg1MDFiNGY0YThlZTM2NjVhNzk4ZmM0MzdkZDgxNGU0ZTQ3ZTdhNDY2ODkwZTBmZmE4ZjUxMGYzZTZlMTljOWM5NjlmNzBhNzZlNWNmMzA1NGQxN2RlNDU5YWM4ZWU5OTU1MGJkMzgzMTlmMzZlNDMzNDM0YTkyNmFkNjhiOTYxZTBjYTEwYWRkNGJhOTkyYjM2NTA2NjBhMmMzYzI2ZjVkNzQwYTMxYWZiNzc2M2Y1NDJmNzIzYjhhM2M5MmQ4YWU5MmE1Njc3NjRlZmM3MDUzMDMxMmJhYWJkZDNmYmJkNTI3ZmUwZmNiY2EzZjZhNzA2NGNkZGUxODU2ZTk3YWI3ODZhZjdkNzAyMmE5ZDQ2YTMzOGU4ZTE3NTRhZmQ5YWRhYzg1NmEzOGRlMmE0Yzk3NjZkZWU4ZGJjNzA5YjA2NzFhNmE2ZTZlMWU1ZDEyMDc0ZDIyMjQ1Y2Q3M2JlZWViMWJkOGVjZmMxZTg1YTIxYmRlMjUzZjdjNDY1YWJjMWZlYWE5NjFjMGZmNWNmZjJkODk2NDcyYWUxN2FiODQ4OGUzM2ZmZWZkYjcyYzEwNWUyMDRmOTQ0YWRhNTFlZTEzOTgxYTEzNmMwZjM4NDI2ZTNlNDliMGU5MTg0MWMzMjc5NGQ1MmYxMzM1ZGZhNjM3ZjE1MWM3ZTQwZjliODMwYWVkNTM5YWM1NzMxYjgxY2RlMzI2NGQyMmJlYWQzMWE2Y2M2OGQxYTczMTQzYjViYTQ4MTYxMzkyMzJmM2Y3Zjk3OTgzZjRlY2JhNjRjNDk1NTNiZTlkNmQ5NDNmOTFkZmUwM2QxZWU4NjE4Y2Q0MGQyZmI3MjM4YTMxZDFiYzM4ZTc2YTU1MWY5ZWVlMjJlNzNhMjdkN2E0OGI0MDg3NzJlYTcyYzNlZDYzN2JiNGIxNjhmOWQ3YWVhZDk0ZWEwM2JjMTExMDk5MDFjODg5OTI3ZDUxY2RhY2Y5NjIxMjU5NjI1NTk5NzlkM2U0YzhlM2I1YWU1ODJmMmRiYWQ0OTk4ODAyODU2YzRkZjY5ZThmYjU0OTE3ZTJmMzZiYjY3YTE5YTI2ZTlhOWE5NDg1YmNlOThkYmZmZjBkMmIwMmI5Mzc3YTkxMzdhNzM0ZTU3YjVjZTY2NTA1MzAxN2U5OTI2NzdhMWFhMDc5MjQwZDJjZjk2M2NkZjliZmVhOGQ0NjAwOTEyMzJkYWY4OTgwMWZkNzUxNzFhNjE5NWE1YzA0NjgxNTkxNGJlMWY2Mjg2ODc4M2Q2ZjJjZjI4YWY5Mzc4ZDZjNjg5M2U3NWRlNjQxMTExYzY4NDcyN2VmZmEzMWI4YmM5YjBhMDFkYjljOWU4MWNjZDhmNGQ0ZTg3NWQ0YmQ5MGQyNTNmNTg5ODlhOGE1MmEyMDNhNzdhNDk2ZDY5Nzk4NmIwMzFlOWY2OTliYzZhMTZjZDVmOWMzNjAxOGViZGFhMzZiYWQwZTAxNGY0Y2YzYjRiNzQ2MTcxYmY4OTMxNGU4YjcyY2JkNDdjYzYxNmEKK1NJRzogODExMmFjMzdlYWZiNzQ5ZDNmNGExZWExNDg0Mzc5ZGYzZTM4M2IwMTljMTJkZTg1MTVlMzQ5ZTRmNmY5OTg2MzJlMzA5NjgzNDdhMWQxNWIwOWRhMmViODAwYjAzZDgxOWQyMDJiZDEwYTZhNDYzYmIwMmIzNjZkNjg1NWZlMGUKKworVFNUOiA2NjYKK1NLOiAgMjM4YTZkNDk3OTMyMWExNGE5OTcyMzZmNDU4NTA0NmNmN2EwNWMwYWRjNmJhMWZkYjE5ZWMyYTMyZjYyYmVlYgorUEs6ICAwYjRiYTY3NGU0MDE2NjViNjc5MGNmZGEwODA3MDRjZDkwZTJmM2QzZWZhYjI1M2VkOGRjZmJkMThlNDA2Nzg5CitNU0c6IDk3Y2Q2MTlhMjI1MWVkYTkxNjY0NjQzMWQ0Y2QxNTk4YzJkNDRkMDZhZjNlNDhiZDE4ZTNkZTdmYjRiZDRmNzhlMDBhNjllZWFiZGUzZjgyMDY1Y2ZlZTZjZDcxMWYwN2QyMjYzNzE2MWZmNjg1ZjY1YTdkZGY1NDU1MzE5N2ZkMzFjNWM2YjcxZDllMzY1YTk0MWRjZTRjM2UyMjVkMTljYzYzM2E3ZTEyODYyY2QyM2ViYjdjNzRhNzA0ODUwZjc2MWFjMDI0MWJlNTE3Y2U3YzM2MDkzNmNlMDcyNTBkOWYyZWIyNzg3MTE1ZWVjMzc3ZTExMzRkYzA4ZjQ0ZWIwYTJhMmEyNzE2ZjAwMTQ0YTQ5ZjAxMmE1N2IzY2QwNmVmZWIzZmFlOTIwZjI4NWNmZmQ5YTQwMWEwYjk4NjU5NGUxN2IyYzljOGZkYWI4MzVkOWYzZjVkNDc0YmU3MzNjMTkyNWVlNmYwOTM4NjcxMTA2NmMzZmNkNjQ1ZWViMGZiZTcwNTQxNjllYjcwOWQ0YTNmMGQxNmYyOGExZmY1MDY2Yzg0MmJjNjNlMzU5ZTkyNDg1YjM4NzU3ZmY0NmMyN2Y3OWQwY2RjZjBlMTZlOTdlM2M3YjdlMjE3OGRmZmQyNzAyODJkZDYxMjA1ZDU4NTRkODQxZjBlM2ZjMGU0ODJjYzFlZTQ4NTUyY2ZlNjU4OTM1YjU0MjdjMzY2MjMwYWVmNzlhZWY0MDIxZDZmYWI1ZjE4NzVjYzg0OWUzMjFhNzU1MDBlOWUxYmE1ZGQ1OTZiNDM4Y2Y4OGIyMzViMDFhNjc2MjVjNGJmODRkMDcyNGFlNjg4MGEzNzg1ZTMzYmQ5MjM1ZmQwZjU5ODE4MDRkMjFjYmQ2MzNjYjE4MGYzNDQ1NjQ2MDIwN2EyOTBhMjU0ZDlmZTYxMDYzZDQwNjM0Y2EzODcyZjA5MzVmYTI4MzI4Nzk1Y2E0MWIwMDZhMjExMWZjNTkzMmIxZTc3OWNlOTY2Y2M0N2FkYjdjMGRkOTg3MzMzYmE3NTI5YTFhNDk5NmNlOWY1NmUwNTE5ODFmZTFmNTUzZTU3OGY0M2MzYmE5NGJlYWNjOTNjM2U3Mzk2NjdjN2E3YzZmYTI3ZTFlMDgxNjk1ZDIwYmE3MDVjM2YxMGIyMGRmNTMwY2JiMGVjYjg3NDU2NTAxMTA5Njg3MDE5MzE4NDUyNzg1ZDM4ZTc2NmIzY2QzNWIwMDdkN2UzY2ZlMGIyY2NhOGFhNmVmNzM5NTU5OWRjYjljNGQyOGJjYzM1Yzc2ZGZjMzUzNDNjYjEzNDhiYTNlOTYyZjEwZWU4NmY4NmY1YjZkNGNhZTJlOGMyYjE4NWUzZWFhMWFlYjg3YmNmY2YyZmI3NmNjN2ZjYzY4OTUwNzFiMTY4ZThiN2Y2Y2FhMGZkNjM5OGU3NzhjYzA3OTEyZmY1ZDZlNjEwMjFhOGE1OWFlMDM1MjE2MGY1NmQ1NDg4ZmUyZjJhY2M5NDAzZGE5YTlmZmM2NjFjMWU5ZGM1YmU4OGM0MjBkYjBmZDc3ZDg0NWRjOGRkOWQ4ZTU4Zjk5NjFiNzlhZmM2ODYyNGJhYTg2YWE2NDNhOGEzYzdlZGY3MWQ1NTNjYzBkMzIyNGE2MDY5ZWM2NzRmNTJkYTI5YTFjYjYwYzQxOTIzMDFhMjQzNDdhOGFhODMyNjI2OWUwYTE0NzgwYzk1ODNjZGZmNTE1OTI3ZmQ1YmVmNTI4ZjlkMjM3ODdhZWI4MDNkNzBlYjkxNmIKK1NJRzogMjk0MmY3MDhjMGVkZTRjYjBkZGVmMTNiODVkNzFkNzIxM2UwMzgzZGQyOTRmNTM0MTM1ZmQ2OWNhZmJjZmMwZTMzMDkwYTJhMGNhM2ZhNTcyYzcyY2RmNTU5MmRlOTAzYjE1ODQ0OTVhYjYzOTk4MTUwZjJiMzkzYTNiMzQwMGMKKworVFNUOiA2NjcKK1NLOiAgNTlkNTAxMzkzZGM1OTk5NzIzODEwNzA2ZmFkN2Q2ZWZkMTYzYzQ0NzEwYzc0MWMxODVjMjdlMDQyNWUzYzA1YgorUEs6ICA4MjY1ZDQzY2ZiMDczNWI1ZDcyNTBmY2YwZmNiZDE1NGJmYzBlZWNiMTNiN2FkOTNiNmIwMjk0MDU4OGI4NDNiCitNU0c6IDU2NGVkMjJjMTcyZjVjM2FmYmIwYjk1YWQyZmM2NGU0YmU2ZDRkYjFlYmI4ZDM5OWM0M2E1ZTE2MDQ4ZTdmODczMjE4MWU1ZDBlZWQ4ZTYzOGVmMmE1NWFhMGQ3YjY4MWZlMDJiYjU0MjNhZjk0YmQzNTJkM2MyZGRlYzBmODQ3NjBhNDExMmI0ZmUwMTdjZmJjNTAyZjk1NDNjZmE0MWZiMmFhZTc1YTNhMDgxZjhjNDk5MDMzZDFmYWU1ZDljNTBjYjQ0ZGJjNjM2MDVhNTQzOThmYmYwNzk4NTJlYmE4NmYyZmRmYzI3MmQwYzQxNzlkN2MxM2NiYzFjMmEzZGEwYjgyODQ1Y2YxYTQ2ZWJiZTMxZTc5YjYwMDk3MzNjN2JmZTdhYTRmOWZmZDcxOWM3N2RjN2Q3NDhlNDkyZTE0ZWU1ZTQxNzliZmE5ZTY0OWNmMGQ4OTUzNDE4NjM4NWVlOTk0MTAwNTFkNjY1NmU2MjM0MzhjYzdiMmU3MDdlNDhjODQ5MTU1NDlhZThkNjdhMzA2YzY3YjEwNmI3YTI1ZjQ1ZjhlMTBkZDdkZDNlYWFjMzFmMTA1MjI1N2ViNmE3NTc2YjY4NWNiOWU2YzFjZDBkNzNjN2EzY2VkNWE4ZGQyNzMwOGFlMDBmOTVlYWJkYWU5ZDFjNGFhODkzNGUyNDI0YzkzMjhhNTIyOGY0ZjgyZGQ0YTY2NTU2ZDgyMTdjNWEyMmIyYmViODZhMmE0MzQxM2VlNWUxMGY4ODNmMmNkNmMyZTg3NDliNTUwODg0MmVjYWU1ZmZjY2I3OTZkOTYzM2U4N2VmNGE5NmMwZGY3ZWY0N2IyODNkMDk2NzIzYmEzMTM1YmFkNzViMmUxOWVjMDRmNzBhNDc4NDI4YWQ1ZDBhYWMwZGQyYWI5OTA1OTEzZTdlNWFkZTQwODgwMWQ1ZDNjNTRkOWNmN2I4ZjBmMGM1ZWIwNTRjMTQ3NWNjMjEwYTJjNzk4ZDhiZDg5OTMyZmY5ZjM2MDQyMTg1ODA1M2E3MDdiOGJiZDMyMDU1YzQ0YjIwNzEyYTI2NzhhOWE2YWY5ZTM2ZDA0ZGNmZjQ0ZjQzMWNmMTkzMGNkMThmYzkzNWQyMjY3Nzc1YzY5MDk2NzI1ZWQ4OWEyOTFkZDYwZTIxYWMwYjAxMjg3MzQwNzI5OTI4MjNlZjg3YjVlZmE2Y2M1YjA1MDE3N2Y1NWY0Y2VjOTJhMDhhNjViY2FkY2FiOWE0MWMzNjA4NjM3MGI3YjlkZDYyOThhYzdiMGFlNmEwOWM5NzEwYWJiNDY3NmE4ZmM4N2EzNjUxMjkwMTQ0YjZiMzBlZjRmNmZiZTViOWFkMjUyMzdmZTA2MDVlM2I5ZjE4YTc3MThhYzlmY2E2ZjMyNWVhNTVmNDlhODA3ZmI4MGEyNDAyYWUxMzQyMzA4MGQzMjc3NTg2NDkwMjM3OThkNTcyOGUwZGM2NGFjODhhNmUyOTQ1ZGJiM2UzZmZhOWZkYjRjN2I1OGZiYTNmNWZiZDY3YzY4NmIyOTcxYmJkOGJhNGQyNzVkNTczZWI3OTZlYjkxNDY3NzVkOGNkY2Q1ZmQzZWI1YTg4ZWE1YTkzMGVjMzI0NGU2YTM3YzgxZjZhMjU1NGU1YmE3ODdmMGU0NTMxOWZlNGI4YTJmZmJmZWQ1MDc3MGU3ODI3YjNlN2JjMmI0NGNlNTEyYWU2MDUxYjZmOWYxMzkzMWVhNmFjYzA5NmI4ZGNiMDE5NmJlNDIyNDg0ZGI1ZmNiMjk5ZAorU0lHOiBlNjQ2ZjE2NGNmZWQ4YzJlMDYwNzEwZGNmYmMzZTlmYTVlYjM5NjM3NjgxMzE5MDE4NGUzNDZmNTJiYjBiYTU3NDZjY2I2YjU5NTIyYjFhZmY5ODMwZjJmOThiOWU1ZGFmY2Q4MzIwNzc4ODNjNDRlOGEzNTM4OGY3MThiZjQwYworCitUU1Q6IDY2OAorU0s6ICA4MzlmYjEzMmU2OTI1MGNhMWFkOTQ1MTAwODdmOTJjZTA2ODc2OTIxM2ExOWIyYTZjODk0OTBmMWY1Nzg4MDdhCitQSzogIGViNTg2NjE5YjQ0YTE1Mzc5YWNjNDYyMWEyYWM3MWVhNTg5NzAwMjZjMjhlMjQwOWZjMWJhMmJkOGIyMzZkMWQKK01TRzogYzU3MjMyZmUzMmYxMWU4OTRiNDM3ZDQwNDU2MjA3Y2MzMDZkYjQ4MTY5YjIwZTA3ODExMDNhZmZlODAyZjVhYWJlODU4Mjk1MmNhOGU5NTc0NWU5OTQwZDUzNWUwMGZmNjVhYjNjNjRiZWQzZDExNzNhMGYzZDcwY2U0ZWJlMmI1MGQwNDhiYjQ3MTY0ZDJhMmNkOWQ5NWExMGNmMGQwNzNlZDFjNDFiM2RlMzMzNTI4ZWUzMjk2ODIyM2EwZDg0N2NhZGJiNWI2OWYzODIxNjRlOWEyOGQyM2VjOWJkZTlhODI4ZTg3NzFjOWViNDkyMjBhZjU0MTg1NTA4YWEwNzNhODM5MTk1ZjEwM2JjMmYzMmZlMDRmOTUxY2E0NWJmYmYzMGQyZmI4MTE0MDU2YTczNmFkZGYyN2VjZDlhZjBmNmU1ZTk3ZTU3NzNjNGZhOTAyMjY4YzMyYTE1MTQxMDk1NWYzYzc2YWFlMjU1NTQ5ZTBmMDMzZjg5ZTFhNzhmMjY1Y2JhYjZiZWI3NTE2ZDRiYWRjNDljZGE0NTg4MzE2MjI1YjRjODVlYTlmYTk5YzdkNjc2NmU5NDkwYzQ5ZGU1OWRhNzE3ZjY2NzY1MzUzMDA3MWRkMmYwYzUzZTMxZDg3NjgxNTZmZWIwOGZhZjAwZGIwYTA0NTMzZGY5Nzk1N2E4NGFhNDZhZWI3ZTM2YzBiMGJlNjkwMTg5NDZmMTUzOGE2YWVhNzFkZjUzNmYxNDQyYzI0NDRhNDNhMDQzZDA0NmFiZGUxYTc4MmIwZjRmNWM2YWE3MjBhYTYwYWZlZDk0N2MwY2VlNDc3ZGJlYzAwNTU3YjM3MjEyZDkzMzU3Y2EyYjZiNmY4MjcxNWJhMGU0ODRmNmRhZjJkMGI3YTk4YzAzMzUxOWNlMzgyNjM1ODY3OTZkNWQzMWNiMmJjM2QxMTI1YmMwY2NkMzI5YTVjMjFmZDI3YTIxOGRlZDYwN2EwZTc1MTViNTcxZjE5MmMzM2Y1ZmJhNTE0YWZlNGQ0NTgxMDBmM2NjYmEzZjM4ZWI0MzBiNGZjODhmYWVmOTk5ZmE3MWVlZTQ4ODIyODkwM2JlMjlmMjRkZjgxZGM5MTEwNDRlOTI0Y2RhYTAxN2NjN2Q4N2U1NmE2Y2JhODc2MDg1OWJkNjNkZDJkNGY1ODFiOTU1ZWM5MjRhNDlhZmI0N2NhMGQ2M2U3ODI2ZmRjNzEyYjQ5NDNiNzM5ZTE4NTc3NTVhMzNjNjUwMzY3NWZkZGVhZTA2MjcwNmUzNGY3NDRmZDkzMjY0OGE1NjA4Y2U2MDhhNjE5OTU3ODNmMzMzOWNhM2ZlMTA3ZTE5NzI3NDRiZjZkNGVkYWZiZjQ3Y2UwMjFlMDU4MjFmYjEyNGM3MDgzOTMwZTY4ZTZmNWMzMmQyZDlmYzRhODg0YzBiYzg4NDA0ZTRjZmUzYzFhMjQyMGQ0MTgyM2EzODVmYjMyODhkYjY1Yzg5NTQ1ZjZlNzNmMGQ4MDA0YjJiYTEyYTRlMDc3Mjc1MjNlZjA4NTY3MGRhZmZhZjQxYzI4YTRjMTE1N2JkZDI0NWU2ODc1MGRkMjAwZTAyM2FmOTBjNjc1NjFlMGZlNGJhMzQwYzQzM2Y3NTVlZWZhYmQ0YjAzOWJmYzMyM2RjMTFhZGI3NWFlY2M0NDhhODY5YzdmMmE1OGI5ZDg2MTdjNjRiOGY4OWZjNTgzZjhjOTQ4ZTJkZjAyNTFhNmM3ZDhjNzM4YzNiNWE0MmI3NDlhZDVlOGU5ODZiZDgKK1NJRzogNjY0MzdiNmJjMDVlNzVkZDE2MjZjM2M0ZmYxZjcyZTZkYjM4MWJhMTU5MDk0OGY4ZjE2YWQ0ZDY2ZTU5OTE2NTlhYTg0NDA1NTY4Y2ZiYzBhNzdjMDI1ZTU5ZTQzZmQ1M2FiOWZmYWJiYTdiMjU4Zjc4Nzk2MjM5ZjkwZDQ1MDEKKworVFNUOiA2NjkKK1NLOiAgYWRjMWU1NmMzYWM5NGU2Y2RhMDQxMWNiYzNjZTJhZjEyOGQxODVhMmEyNzNiZGIyYWY4ZDdlNTBmYjk2YjUyNgorUEs6ICA1ZGNmZWMxZjkxMTI3NTE1NjRlY2I2MDcxNWViYjJjNTE3YjVlYzM3YjI1MzRmZDYzMjk5MjQ0MjliN2ZkNWM1CitNU0c6IGQ0Zjk1OTQ3NGUwYjg5ZTJkY2QwMjA2Njk4NGY4OGQ3MzlkZDExMzRhMzMzMDlmMGE4Yjc4MDJlYWYwMTMzMDNjMTM1MTVkZmViNDYxZWEzZDI0OGU5OThiOWE0ZTU0ZGFlNWIwMDE5MGE0NWU3MGRjNjdlOThmM2Q0Y2Y5MDZjMjE0ZDRmNjM2ZDI5NTI5MjVlMjJiMWE4NmExYWFiYjNhODkyYTlmOGVkNDU0ZjM5YzYzZDM1YjcxZTg3YTJkYTU1YThlMTY3YWM4M2E4NjZhZDE2N2ExN2FlZDE4M2MwODUxOGMxNWU2YmUzNDg1OGI0Y2VlMmI4NDI3MzE0NzYwZmZmZGRkNTkyMzg1NGIxNzQ3Zjc5NmUxYTUyNDlmYjMwNDQ4OTRlZDY0NjgyOWY2NTQzMTZlZTUyZjQwMTBjOGRkMzIxZmExZGVjMzk3ZTUwMTQ1ZWQ5ZTMxNjg2ZmQ1MjAzZjcyMzNiOGRhNzgwYWNhYTkxZWUwYjViNDcyMDc4NjZhYWQ4NWY4MzdlMDNiNGU2ZjZkZThjMDRhY2FmZDcwN2JkYzFkZDQ1NTAwYWI1NjQ4MDFiZWU5YTU4ZWNlMzYwZDAwNDgyOGJhYWY1MjNlMmY1YWI2OTMyNmEwM2FhYmUwMTA4NzhmZDQzZmZhYTU2ODcyMjQ0ZDc2ODFmMTYxOGU2MjNlM2Q0NzRjNzNhZjhiMDgwYTYxODIxYTU3NGVmMmZkNzUyZDIzYjYwNWVjNTIxYzE5YzE1NTBkZTk4MGMwOTRkMDVlMDIzOGYzZTAwOGU2YjE5NWFiZmRkNDAyOGVlMWVlMWQ2YzY2YTc2ZjE3OGYwYjQzMWU0YWY0NGRkY2NmYzUyOTBlZGZmMzZlY2U2M2U4Mzg1NTY3MDEzZjQzYTJhZWJiNjdlM2VmNDA2MzA4YzIwNDg4YTc2ZDU4YTIxNGYzMTM5ZDk4M2IxOWFmYjEyZTMyODM2MDdmZDc1MTA3YmQzMWZlYjYyNTYxNzRiN2ExOGFlY2FjOWY4NTYyNTgyMDE4YjBlNmRlNDA1MzVlMzViZWYyYjU2MjU1Mzg4NTEyOTM5NzU2MjkwMGQzNDE3Zjk4Y2RkMWUyOWQ3MzFmZjQ4OTMzZjI5NTI5NTgxNjNiYTY3ZDU5NTYxODExYjgzNzcyYmQwNTcxMGI2ZTNjYzA0MzQ2MDk5Mzc1MDcyMjNhYmI3MWE2YThjODM4ZmVjZGIxZDJkMzdjOTVkYzgwNmY2NWYzZjk2NjNkOTlmMDZlNmMwZjNjMzJlOTVhZjFkZDcwOGU4MTEwODYzNmEyNmI5NjhlOTgzMzljNzQxMjhiNmNmNjcxMzM1ODg0YWM3MmY3NWI2MzcxOTVlYTllY2EwNTM2MDg5OTZjMzJlZDQ0NTQxMGY2N2ZhMTA0YjM5ZjBmZGYzYzliNWM2MTU3Yjc2ODAzNzU2YjI3ZjRjM2JhMWI0N2YzMjg1NzYyNDhlOWJjNTNlN2I4YWIwYjJlZDk3YzJmOTk5OGJjYzdkZmUzOWUyNjRhYWQzMGM2Y2ZlZjJiNTU1M2ZmYjVhNjk5YWE0YmQwZWFiZTQzOGNlMDUyMmNjOTFmZTRlNzJiZjdlYWNiYTQ3NzFjY2Y2M2EzN2FhZmNhZGJmYmY5OWRkNzZiODViODBlZTA3NWQzYTdkMWE5MGE1NWI3NzI5YTU0MTZlNWJlNjk2YmY5ZmI3ZjMxNThjZmRiNWNmZGFjZGRlODE3MmVlMWFiOTQ4NmUyNGNjZWFkMjliNDU3YWNmNDMKK1NJRzogZjAyZTVkYmNiNjg3MDRhZmFkMDNhY2E4MTA2MWRiZGI5OTg1NzAwNDlmMTBjZTY1MGVjN2EyZWZmMTVjNzkzZGRmNWEyNzJjYjY4M2MyMmM4NzI1N2M1OWJkZWYzOWVmZWE3OWJkNjc5NTU2ZWExNTA1ZWQwMDM2Y2I0NjA0MGMKKworVFNUOiA2NzAKK1NLOiAgZGI4OWRmNmEyM2Q4OTBiN2YwMDI2MGU4MWY0YWQ5OGZkMDk0NDAzNjUxMzFlODVlMjJjNzk1MWExODdiMDIxOAorUEs6ICBjOTY3NjM2NzJlZTRhMmNjNWE5M2I2YTY4M2RmOWI1ZGU0ZDkzODZhNzkwODM1NjgxZDEyMTdkMTkyOTZiZGM4CitNU0c6IDU0YzFjNTExMWUwOGM5ODI0NWJhNGYxMzE4YmExZGIxZGNjNzRkMTRhNWM5OGFiOTY4OWNiYTFjODAyYzY4YmNmYzgxZmQ4N2ZmYzYxY2FhOTQyZjY2ZDdlNTE1N2Y2NTUzOGM3ZTdiMzMxNzA0ODRiNGI2NTQzZjM2MjBmZjI5NjM4YjY0ZDRkYWU3YjAyMjIxY2Y3NzgzZjE4N2VjNDIzMWU2YjY5NDZkODI3NjIwNzRmMDljMzI3ODFjMmYzODQ2ZGUzZTgyMTdmNmUxYjZlMGQyYjU1OTVkNzQyZTJjNGUzMjVhMjg0MTkyNDA0NGRmY2YxMmI0NzllYjY5ZjFiYmQ0MGVhYmRkZDFmZjU0YTkxODRkMzY2ZGZmOWQ4ZjJkODYzZTM3OGE0MWYxMGNkMWRhZTkyMmNkN2ZiYjJhNTQ0ZTQ3ZWFiZjQ3Y2EwYTM4YWJiYTM0NDU0OTE5YmI5YTRlZjA0NGJmYjk3YjcwOGMyZjc0MjhkNjhmOWM1N2MwZWU3ZTc5MjVmN2EyYjVjNmU3ZGY4MmJiMjY4MGM4NjJkYzdjYzY4YjBmNTQ1MzBlNjRhZmUyNzYzZDljN2JhZjQ1Y2M2ZmU2MTJkMWY3ODI3NzM5YzQ0MTEzOTg4ODhmNzM2N2MzZDQzNzc5MDdhY2MwNmEwNmY5M2Y4ODcyMjY3OThmNDhhYTU0NjRmNjAxYzJjMWVkZGE3N2VkZmViOWI5YjVkNWY5Y2I2ZmVkMzc5MDA1NDc0NzdmY2ExZDA5YWI1MmQ2M2U0OTFmZWIxMmZkNmRjODA1YTc4Y2VlM2JhYWRlNDM1Mjk4MjA2MWRlYTVhMjY1M2RiOGU3NjA3NzcyZTgzNGIzYTUwNWMxNmRkNmU3YzcxYjkxMWU4NDJlYmE5MjVkNzdhMzNjNWM1N2NlMTE4NDA5ODA3OGNhMmU2YTNmNjlhYTZhMTQ2MzlkYzk3YjRiMzBjOTlkYzRmYTNlMmNmNjNjNzAxYzMwNmM1ZTI1M2M1MTEzODU0YzE4NWViYzhiNDc5OGY2OGQxZmQ3ODAwNTRkM2VlZDJmMzk0YzQ1NDMwNDk2NmJkZGJkMTIyODA4MzRlYzliNDBjMWU5OGJjMmQ5OGY0ODQ1ZjZlYjQ0ZjI1MzE1ZWVkYjNiNzlmZmNhNDE4MGMxYmRkZDk3ZDBjOWFmZmJhYzU4ODE0OTM3NjgyNjgwMDc2ZmU1YTNiYWJiNjVkMjhmMjUxNzAzNmMwY2ZiNDJmMDI5M2ViMmFjYjEzOTQ5ZmU5MWUwYWQwNjc4YWEyNDNkNzczNGE4OWQ5OTc4NzBiZjlhNmE1ODRlZDZlNjI4MTYzZTM5ZDhhYTYxMGQ0NmI5Mjg1YjllMWRkN2U4ZjgwN2ZkZjVjYTJiYmY2ZGU1ZTVlNjhhZjdjYjdlYmQ0M2VjY2UyMjdjZDcwYzdiZjRlZTE0MzNlZGZjZmU4ODY2MTQ2NzBjZGQxOTYzNDNmYjkxZTE1NDE2ZDJmNmFjYmFlM2VhZGMwMzAyMzFlZTlkMmVjYzUyYTg4Y2U4ZGM3ZDA5OGU3ZmFjNzc2ODViNGViNTQwZTMwMTkzMDcxNDMyMjFiOGVmNzdmMzYzMmM4OTNkNTU2ZTBiYjc0M2ExOTYzZWMxNTg4NmM4NTQ1ZTg3Yzk1Y2M4MjVmMjAwZDBmM2NmNGY1NWEzZDY2MGE1MzZhMjNhZWZjYzQyOGE0MzIwMzQ4NWVlODQzNDJmNWMwMDFlZTg0MDRlNzU5MDE3MDA2MjgyYWI4YmE4OTAzZQorU0lHOiA4MGI3ZmM4YjZhZTZlZWNlODE2NmI3ZWE1MzRjYjViMjE0YzllYTk5NzM5MjFlZDA1ZGU0MGM3OGUxNGYxNjJiMDllOTc4Y2E2ZDg2ZWU0MzRkOTg0YjhiMDA3MDQwOWRkMmFkMTFiNTMxNzhlMjM5ZGFiNWJjMzljN2JhNDYwZAorCitUU1Q6IDY3MQorU0s6ICAwMGU2YmIxN2FmM2MyZGY2NTJiMzRmOWFiZTE5Zjk5MDE5MDc0MjMzNjg2YzcxMTRlM2EwZWRmMDgzMDk5MzRmCitQSzogIDdiODIzMmE2NmNlYzJmOTE1YWFhNzk1MWQyOWQyYjllZTkzZDMyMWQxNWIyMDNjNTFlNjFlOGNlODNkMTg3ZjgKK01TRzogMDYzMjgxZTQxZThiYTk3MDNlZDA5ZWYzYmYwZWE0NmU0Y2FiZGQ2ZWJkNzY5ZDA1ZGMwNDVkNGY5OTBkNjlmYzU1NDEzMGE0ZTYxYWEyMWUyZGU0YzkyZGI0OGEyMGEzN2IxNzQ3YTdlYWM1ZWJiMjczNWE4OTM4MTk3ZjEzOWZhZDE0OTdiMzUxYWQwNjRjMGYxOGY4ZmFmMWZlMTFmNjM5NzlhNjk5NjhlMjRjZjkxZTU4YTNhYjAzMjY2OWU0ZWZlZTI3NGY5NmI1OGJlN2Q5ZTM5MWYzNmZjZjA3MDliMmNiMmQyMjY5NGE2Y2ViMTcyNDY5NDVlYmIzYmM3ZjBmMDNiZjBiMDhkYzk2MjZlM2U3MTVjOTkxNjcxZDUzZWJiOWFlODNhN2QwOGQ0NGY2MzYzNWM0MGY4ZDQ4MTdmNThkZTllYjc3Y2IyNWIyYWNkNmRlZjk2OWFiNTY5ZTk3NGE4YWRhYzExYTg2YjU4ZmU2YzEwMDY3NDk5ZmM5MTRkZmY1NjkwMmNiYzM5M2E3MWNjMjVlOGYwNWMwM2M5NGYxM2I4NGEyYjAxYTU4YzEwZGJjYmI2MGViY2VlNDg3ZjUyOTE3NzQ2NjI5OTkyNWRhNTBlMmRhNWI1NTU3ZjBhZWVlM2ZkN2Y0N2I1YzJlM2Y4NGNlZmFiNDY3OTY5MTM5NGRkMTIyMzAzYmI3NjlhZmIzYWRmZTgzNThiMDJiNjc5MjczYjM1YWJkYzY0MDI1NzZjY2NlNWUxMDQ0MmExMzdlZjk0NTY5MzliMjg5ZWY0ZTQxN2IxY2M2MjM5ZjdjZWVkZDY4ZjFhODI2NDE4MGUwNjhiNDk2NmZkNjdmMmJhZDZlZGQ4YjRhMWU4ZDJiNTQyZGFmMjZkYjgzMWYxZmI1MWViODZmZmFkZWNjZDlhYzNkNjY0ZjM0NmU3ZDA0NmMzM2E1NzI4NDFlYTgzMzRlN2YyZjQxN2EwNTcxMmE5ZTMzNGU0ODdmZDNhZTE3NTQ1NTE2MmZlOGY0OWNjMDI2YTY0MGM2Y2Y5M2NmNTg4NzUwNTJmNDFjYzk4MjA2MTU2NTNlYTJkMDg0Yzg5NmVhZmU1YWQ0NzI1NTc5NjUzMDg0OTk0Zjk1NmQ1Yzk0NTkwYTI0MDk1ODFiNmZjODZlNDBhYTU4YmY2ZTYwNTdhNmY5MGFmM2I4N2FlYWYzMjk5NGE1NWE1NGY3OWJkZjNkYmJmNWNlMGZmODEyZTQ4NmIwNTQ1ZDllOWMyYjBiY2UwZDRjMzY0N2IxODI3MjYyNDk4ODM0ZTE5OGEzZWM3MGYzYjAzZDZhYWQyYzQ5ZWI4MGI1ZTIwNTE0MzkyMjVmZDljZTk0NjhkNjlhZjcwYTI2MmVlM2I4YjYyYThlNWI0MTM0NmRhMzAxMmZmYjQ1ODE2YjdiZWNiMGU3OWE2MGJmZjcxNjM2YTNlNGJiMWIzNWNhZjE5NWY1NTExNzI4MGY3ODcyMTdiM2NhYTJlNzkzNzI2ZmM1YTc0ZDExNjBkY2FkODY4OTA0YzE5NzM4MTEzNGVkOGMzZGIzNzUwYjc1NTZmNjljY2NlMThiNzczODhiNThjNWI4MTEzZTU5MGFkNmVhYzViOTFlY2U1YTY3MDUwMjVjODAzNTNjZWIxZWQ4NGFhYTFjYzQ4YTQxNmJjMDE2YWVmMTczYmI4MGIyYmEyOGM1Nzk2MGM2YjAxMWI2YjQ5NWEzZjMzMTFlNzlmZTQ2YmRiNmE0YzM4MWZiOWRjNDYyOGIwYTgzMDIzNTU4ZjEKK1NJRzogMDRiM2I4NTAxZTM5NmM0YTc4OGUxNGFjNDlmNjE3NGNkYjVjODU1ZTY1MTIwM2NmNjhkMWVmYTg5YWE1ODY3OGQ0ZDFmMzAzYTk4NzdhMzc4NmQyMDNjMzU1YjA5ZDUyODZjMWNhMGRmMDRhODlhYTA2Y2MzZjlkMGZkMzA1MDQKKworVFNUOiA2NzIKK1NLOiAgZmJkZGY2ZTYxZTIwZDgwNmU1NTkxNzc1NmRlNjBkMGM5YTk5OTc2ZjY0NjcxNmZmMmZmMTMxMmM1NGRkOTcxZAorUEs6ICBhYzUzOGZhYmFkNDM4MGU2MGU5NzcxMjZlNzY5NWVlZGE1NDE3ZDg1ZjdkMjNkYjIxYmQwYWQxMTExMTZmMDVkCitNU0c6IDNlOTk1M2NhNTVkMGNkMjMzYjk4ODMzZWIxYmM3OWQzYjU1ZjE4YzhmYTFjNDIwMjdiY2EyNTU3OTE1M2I1NWRhMGM1YTE3OGI4Mzg2OTU2ZDlhNTQxODNiMjRjOTFkYzRiZTk5NDg0NzIzN2QzNjY2YTBhMDEzMGZlMTk5MjRiYzBlZTUwODk2YzM1YTJlMTZhMjllMmUyYWNmMTgwYmRkOTM3OTM1NDY4N2YwZWNlNjg4MmQyNmU5ODBlNjg2Njk4MDQzYmIxYjAxMjEzYWE2NDRhNGY4ZDYxZjliNjEzZTYyZWFhMzU3NmNlYTBiMGI4M2YwNWNlMjU1OGZmNjM1NjQ5NWM0NWVkZTRhOGY2NWI4MTRhYjhhNzMwOTQwM2RmZDQzY2JlYTkwODkzOTM5Yjc4MDBhYTAwMjMyYjVmNmI3NzE0ZWJkY2Q4YmNmMzRhNWE3ZTgyMmFjN2IxYjA5OWFjNjE1ZjEzNWY4YzM1MWRjNDFhZTVmNjZkNWY5YzI2MDA0NTRjYTAxYzAwOWJhNmRlMDQxNjJhZTVmMWYyNzA4OTNjYTM5MDdhZmY3Zjc4ZTAzMzk2ZTMyYjYyMmZmMzQwNTM3YmYxMjNlNTU5OTVlOTIwOTYwOTMzMGIyZWVlNTExMjc0ODRhNDBlMjUwNzAwODIzZmViMGJjOTdiYjUwOWZmNzMyNjc1ZGVjMzJlY2I2MzVlZDkyYzdkNzhmZTMwNTAyMDBjZjFkOTQxZDZiMzg4ODAwYTg0MTlkOTZhNTk1ZWNlZDVlYzRlZmRjYjZmOTg3ZjU0NzJhNWM0MzA1OGQzYTNhN2JiNTZkNzk4MDM2NWVkNDNkYmMyYmU0OGYxZDE4Y2U3NmE4OTE4NTQyNmZkNWM2OWRmN2U5MjkxYWI3ODIzYzIzYTc2OTQxZWQzODM2YWFjN2I1OGMwZDVmYjZiNjM2YzQyNDcxYTRkMTcwMzUxNmYwM2U5MzVmMzFmMTk1NDUwZTUzN2IyYTA3ZDU0NWJhNGI2OGFmYjA2MzhjNjViYjBmZmFhMGNmZDY5ZDcxMDQ4MTk3OTY2MTlkNDgzYTAyNDViNGZkOTAxN2Y2MmE3ZDNhNWZjM2I3Mjg5ZDc1NzM1ZjI4N2NhMGE5NTFhZDU4MzQ0YjJhYjdkN2RmOGRiZDc5MjJhNWFiYjhkN2MyZTc5MTQ3ZTZkMzZlZTMxZjkzMDQ3M2IwNzI3ZGNmZDU4ZDY0NGQ3ZDcwYTBlZDMxY2E2YTEzZWQ5ZGJkMjI0NDkyZWZkYTE5ZTRmOGVlZDQ2MTgwZmU3NTBmMDdiYmU4ZTk5ODU0ZDEzZjU4YmE5NjhjZTM4NTlkNjExODljZDJiNjY3ZjNiMmQwNjY1YjU3NGM0YmFjMTlkOWUzN2U1YjdhODBlYjMzNGUzNjgxMDUzMGFhNWQxNzY2MzkzZjgxMTVhNTIwOTBjOTE4MjM0MjhjODk3YTVmMzVlMTJhOGFmMmNkNGZiMTM5MDdjYTY2MDNhNGY3NmY1YzJlMDIzNzRhOGRjM2E0N2MxYmU2ZjFkMWM4ZWJjNTliMzZkMWNmYTBhYjIzZTliMGFlOWIwZTYzN2VlZWRiOWM2NmJlYTYyZGM2MzBjZGVmYTcxODIzOTYxN2UzMTE4ZTViNmRlYjdjMjk0NDc1MjgyZThhYmUyNGZkNWE1NGI3ODZmZmY5MDI4YzVhMDMzMzg0ZTRiYzgwMTRkZWM4ZGExMDBhOTRiMTc4ZWY4OGVjMzU3YjY2ZDJiOTA5OGFiNjQ3OTE2OTZiMWE2NmIKK1NJRzogOGM5Yjc3YWEwZjFjZjUyZThmN2E5MThiMjFiNDY4ZTYyMzM1OTExYmM1OTMwNmIzMGNlNzdiZjY5MmMxMTA1OWIwZWU5YzVkYWFmNjgzOWJiODEzNzNjNjFkMjhkMDcyNzAyYjU5NWU0ZGNlMjhjYjk5MzgyMmIyNDgxMzA0MGIKKworVFNUOiA2NzMKK1NLOiAgOGE1NWU3N2JiMGM4NzQwYjhjMmU4ZGRmZGZkYjQwZjI3ZTQ1ZmU4MWZlNDU3MTExYmYxYzg3MzBlYWI2MTZiNAorUEs6ICA5ZmYxZmQwYzUwZWIyNGY5OWZlMmY3NzExZDUyODcyZGZjOTAwMzgwZGRkY2RiODZmZTZmNGE1ZjM1MGE4NzQzCitNU0c6IDIwZmI0MTRlMjY0YTk1NDc4NGYxMTJiYWNlN2UwNDc0YjM5Y2IzYzllNTNkZWUwYTIxZjRjZjZkNGE5OWI5MzQ3ZGRmZmJlMjgxYTZjMjMwYTc1ZDYzYTcyZmQwNWY2ZGI1M2VhNzAxNGVmNzcwOWQxOGZmOTcwZjQ4NWZlODNiYTFkMzcxNDczMzhhZGVkNmRhNGNmZGFjYzFlNjlkMmYzZTBlZjM2MmY0N2I1YmNmYjc4YTFlMTc5ZWI1YzViMTA2YzhkODJhMGEwYjI5MGRmMDc1YWIyNzQzNjkyOWNkZTY1NmYwMjMwOWY5NTc1MGViNjc2NTgzMjYyZTVmMmY2OWYwZmY3MmE4ZTA1NzI2NjM4MjI2OTIwNTMxODc0MGJmZTA2YmY1YzJjYjQ1MzM5MDhlZjlmOWYyODY5YTc1Yjk1MzM1Nzk4MjBlM2JjMGNhZmZkNjQ2MTcxYzgyODZjM2E0YWJhMWZmMDkxNWQ5MzYxMTIwNWUyMzBmMzlmZjRjNGNhZjNmMzMzZTc1M2ZjZTJiNzEyMTNlNTNkNjA4NDE1ZWUxN2ZkNDgyMTJlZWRkODg0MGYzMzcxMDFlZjBkMGI2ZjdiZTRiZmZjMDZlZWVmZTgwNjZkZDI3YTA1NDFhNDY4ODMxYWNkZGM0OTAyZTJmZWZlZmJlZDE5YzMwOGU1NjIxZTBiZjQ2YmNkNTM4YWExM2ZhZjA0ZDM4MDc1OWMwZTEwN2U5MTIwMDE4MzlkZmQwYjYzNTQ0MGU5NjM4ZjUzNzdjYTg0NTBmMzUwYzAxMTI5ZWUzMzc2NDQxNWM1M2NiMmZmYmY5NjhkZjc4Yjc0MmZkMDY2NWU3OGEzNGFiZjRkZWNkMWZkMzg2Mjg5YTEzNjRlNjQ1NTVlZWM1OGIwYWY5YTRjZDZiMzZkMWQ1YzYxMWEyODQ2ZGZiNTU4OTM0NGJiYmIwMjU2MDI0MWI3NGI5OTNhMjViZWY1MGZiMWU3MzE5MDg2ZTZhMjM5ODYzMDA4MzRlZDJkYmE5OGExNjg3MjFjMmY3ODRkZmI4ZDM4MDBkMDZhMDU0YWVmMTRkMTc3MmI2YzU3NGFmMjU2M2QxOTNlZjJlNTFiZGM2MmQyYWJjZTJlZWJlYWRhNzkyMDM0OThlNjY4NmMyODdmMzdiZDg4YWViMTY2ZjdkZmZjM2U2YWQwMjk0MTE3ZWY2ZWU5ZGE4NDc5ZWQ4YTE2ZmU5YmUyNDZkMjY2ODA0ZjI5NjU4ZGI3NWU3YTA4NzNiZTcxZGM3ZDQwN2UzOWZhYmQ2NmY5ODhiNDU3NDc3NDI3ZmFkODEzMGYwOWFiNjY1ZjE1OTdjOTA0NmU3MzczYWY5YTgzNTJhODY4MzBjYjkyYTgwNDQ4ODcwMGZlNjg5MTkyNGZlMmE3MjAxNzMzZDk1ZTU5MWVlMGExZmVmMWMyNjM2MDc4ZDM3MGU3YWQzYjZhOTQ0ZmVkMmNmMmIzMGFiYTJkNTZmMzQ5NWIyODQ5YzAzYmI2MTRmNDhiYzRlNTA3YzM5NWE2YzM1ZDNlZWQ0YzdiZThlNjgwZjJkNDVhMzEwYjE4N2ViODhjZjBlOGVkNGRlN2QzNzI0NmE1MGE2MzY3Yjk3ZWUzNzg0MzIyYzBiNzExMzFhMjgzMTk4ZGE0ODA0ZGU3NTFkY2Y3MGM0YmFkMDBkZDk4ZDg3M2E2OWRkMWEwOWNmNjlkZGZhZDdhZTYwMzUwMGI2YTQ2MjI1ODA5OGQ4YjY2Yjg1MjkzNTk0ZTIwODgyOWI1MjI4ZmFlMmZhZmMzOQorU0lHOiA4YWFlYmE1MzVjNTExYzMxZDNmOGU5NWNiMDc3YTlhN2VjN2QwODQ0MWU1MzQyYTZhYmUwYmYyYTVkN2ZjOTMwYjQzZGFjM2QxZThlZjJjYjAzNDU1MmViNGQwODM5YmM4YmYyOTQ1NTFkZDJkODBjNTNmZDYyNzkzNTFhYzIwYworCitUU1Q6IDY3NAorU0s6ICAxNjNiMGNiNmExMmU4ZjA3YjBjMjlkNmE2M2Y2YTY1MmNlNDk3MjcwYjVlNDZmY2Y4MzNjOTliZDg0M2Y4YzY0CitQSzogIDY4YTM1ZGU0YmE2ZjBmODJlY2Y0YjFlMGRmOGUyNGNiNGYxOGYyMTAzZmYwNGRjMWI1MzMzOTkxYjZkMzE0YmEKK01TRzogNTZhMTYwM2Y3MjViZTA3NjEzMDU4Y2RiM2FjZGM1MjM1NGUzYmIxZmYyYmVkMTNmODk1MTc1YjE1YzhjNWE5MGZmYmU0NmIxMWEwNmNmZTM2MmRhZGY3MzIzYzk0MDQxNzI1NWFhN2FhNTQzMTIxMDNlNzE0NjNkYWEwYjVjZGFlYmQwYmU3MjNjNzMyMjczZTNjM2Y1YmY3YWEzNTE5ZDY5ZGY2ZjQ3NzBkYWExZGY4MjgwYmIzY2QyYzcxNGFjMDMwMjAwNTQ2NTc5ZjU2YzYwYjkxYWUxMWY0Y2Y4NzRhMzVmYzU5YjM1NGJlZDgwZjU2ZTExYTZjZDYyYTg4Y2U2YjRmNmJmMzlkNjRjZTNkODA0MDk4MjVmOTAxNjJjM2Q5NmQxMGU0Nzg2MDczNjVmN2EyNDFlNzFhZjk4MDA0MmZlYzJkNjg4OTFlMGM4YTM3YzU4ZWM0ZTYwMGZkNTgxZTc5MGIwYWFlOGUwOWYzNWQ0Y2MxODc2ZGY0MzRiODBlZWUwNTM2OWY4NDhmYzQ5MzA1NzdkMTY4NDI3NTg4OGYzMjU5Y2I0NzM3NmM1MTY5Yzk5MzdmODU1YTk2YTllNzQ4YWQwYTY5YWU0YWIyZjJmMTc0NGEzOTJmOWFjYzYyMDk5NzViNzg0OTg0Y2IxMmY5ODI5MmMzNmE1MzIyMTk5NGFiYzU2ZjlhNjZkYWU0NTYwYjc5MzU2ZmY0N2UxMjhjMDc5NmE3ZmIwZTBiYmM5NjAwYWY0OGU0OWVhYTk0MjdjZjZlYjY2MjBiMTBjZDJjMDg1YjBiMzQyMDA0ZDViMGQzZWRjMTFkMjkyNDJhNDYzODc4MDc2MmM5ZGM2MDY5YjY2YmQ4NDk3M2I1MDExOTYxY2U1NmRiNThiZGFmNDhlNmJlMTJhYjlhZDI0NDE2Mjk3MDA0ZDAyOTE0Yjk1OWY1NGUwOTJmOGNkNDM2NWZhNmFiNzhkZGJmZjRjZThkYWQ0ZTJmNTNhMDVjMGNjNDk5YmZiNDc4MTRhMjcxMzU1MWRjZDE5ZDQ0N2Y2Mjc1NzZlYTRlYTRiYmRhOGJhZTE4YTY0NjVjZWQ3NDdlYTE3MTgwYjAwOWYwMTIxMjE2MDQ4MmIwNDMzYWFjNjhlNjc2NDRkMDBmNDFmZGY5OTkwYjllMTExMTc2MzRkZWIxMzliMWE0MGFkM2ZjZTQyOTlhMTdmZTFkZDIyNTMwMWM3ZjhkODAxMGE3OTZkYzc5YzEzMzA3ZDNmZjk5MmE4OGJlNjY0ZDRjODg2ZDY4Y2E5ZTQ0NzBjZmJlNjNlYmZmYzQyNDAxMGUzNzJiNjkyMmFhOTVjODAxZDFlOTQwNmRhNGJjMTg4Y2E4MjA2NjQwNWJjZGIzZWFmYzkzNzYyOWIzMjYzZGM3ZDUwZWU1Mjc4Y2NlYzZmMTFkNTUxN2Y1NmJjMjY5Yzg3MzY5MWU3ZWI1M2ZhZWZmMDc1NjRhYjQ2YjQwM2YxNWQ5ZTBlNjkyNDg2ZWUwOThlN2I1MWI0MjgxMzQ2OWI4MjM1MDQyMjMzY2EzZjljNGY4ZmYyNGE1NzFmNDdlMGFkZjkxNDRhZWE0ODhhMmQyZGQwMDFlMzFmYzk2MWUwNWMzZTg1ZjBkOTgxNDA3Yzg3MzE1OGJiMGQzNWJhZmU0YjYwNDIyZTY3NTUxZTk3MDE2NWNlM2ZjNTk5ZDBmY2M5MmIxNmFjMzZhOTJiMmMxZGM2YjNmMDMzZmUzMTBjZDE5NmRhMDRhNGU2MzkwMzExNzdjZDI3ZDdjMmZiZWM2NWEwMGIKK1NJRzogMTc3MzhmNTcyNjU1MDc4MDY1MWQ2MDE5OWZkYTM5ZDljNDc2OGRiNTkxN2UzMjM5MzYzMWM1NGE0MTlkNTlmMThlZjk2MGRkZDQzOTM4MGRhYmMzMTQ3NjFiZDBjZGI1N2NjZTQ4MWU2MTA5ZmVkMDk1ZGVhNmU4NjVhYTY3MGIKKworVFNUOiA2NzUKK1NLOiAgOGM4MzkzODFiNmE3Y2UyNjQ5YzFlYTQ2NGFlM2MyZDNmZGIxZWM2NjZkN2I0YmU0ZTJhOTQxYWI2ZDY1NTdhNworUEs6ICA1YzcyNGEzMGM2ZmIzMjgxNTM0M2E4MGRkZWU2ZWVlNTQ0NTE2NDE4ZWE5NWUxYmFjODBhZmM4MDQwZDYzZmM2CitNU0c6IGNiY2Y4OWMzNTQ4OTY0YzM4ZDcwZmQ4ZjY4ZThlY2UzNmNjMzk3NTVjOTcxZDE0ZDdlMDU2ZjM5YjAyM2VmMTY2ZDE3ZjI0Mzg1MjJmMDEwZDZkODM1ZDg4NmU3MWY0NzRjNjcyN2E0MjIxZmQwM2E3NTc0NTc4Mjg5ZWQ1NDkzYWM0YzA5NDdlM2Y0MjhkOGZlMDY0MDA2YTI1NmNlZjIxODExZDcyNjc4ZjVkZmM2YmE2NmFjMjllY2QxYjMyZmY1NTU3Y2IwOGM1ZjEzMDU1OTIxN2EwNDEzYjc1OWMyNGQ4MzM4OGEyYmI5YjI5YjZiOTFkMWYzMTAxZWQ2MjUyMTFlNGQ3MzgwNTE5MzQ3OGNmOTk1Mzk2YzEwYjFjNWFmZmFjYjAwODk5ZGEwNGUzY2NlMTkzYjQ5NGUyYTkzM2M0ZWViZTBhMzdiZmI4ZjFiODM3MWJkZTVmZGEwOWU4MDRlOTQwZjM0NDg5NmE1Mjk0NjdhZGVlNDVhOGZlYmY4NWFiMDM2Y2FiODgwMTQzYmU0ZjU5Yjc3NDFkOGU0NTAyNzhiMDYzNjU1NzhkNDBiMTlkY2VjYzZlMWVlM2RhMzRhYjI5MDEzZmEzYWY3NzI5MjcyOTYyMTEwZTM4NWFiOWEwMjJmYWU0MTQ2Zjg5NzE2ZjdiYWI5ZDNkYzY4MmY0ZmFjNzczNmQzZTA4OTczYzY4NWJiYjI3NWJiZjhmMjE3NDE5ZTVjYWUwMjE5ZWJhNTE2NmE1ZGUxYjExZTNmOWE5MDhiOGFjN2U2NWJjZDYyM2Y4YzE4YmIwMjRmNjA1ZGNiYWNkYTc5MGQ4MzYyOTU3NDQ0YTk1YzEzMGEzN2VlOWQ1NjNkMGNiYjRjYjJiMGZmNzE1OTFkOTM5MGI2YzhmYzI4NzUzYTBlNDAyZDY0ODdjZmFjNjA3MTM1OTI3ZDg5MjY3NTEyYjM0Zjg3NzA1N2Q5MjcxYmNjYzAyNGRmZWRjY2M2YzMyZWRmNzVjOGI3NTUxY2RmODAxNTRlZThlMDhhMGNjNDMwNDRlMTAzNmJhZTAxN2ViNDhiNjUwMmM3YTlkNjBjOGIzNzBjZjM3OTljNDY0Zjk2NGE2OWVlNjU5NTAxMjIzZTc4OWE2NDk3YjYzNDk2ZGYxYWRhMmU4MDhkMjQzNGZjOGJiOTc5NGU1ZTJhMjBiYmY0ZDY5MjVjYjNjNWJiMTQ4NDJmMTkyMDA5MDViYTkzNTRlMDBkYzMzY2ZmNWI0MmQ0ZTlkOTY2OGIzNGU2NjFkNDRiZWY3NmZlZmUyZWQ1MWY5NDQyM2E5MzNhYzk0ZjE1MjNiZjM3ODIzYTIzOGQ2MTZjNmIxNzk3MzQ0MWUzNWY5NDA1YTA0ZDk5ZWFhOGY1MDQ1MzRjOGI1ZmE1ZThlMzM1Yzc0M2JjZjIxZjVkNDkyYjcxMTJlMDBmZDg2NDJjYjEyYmZlYzg0OWRmNjIxMjBkYmIwNmJmYzI5NDZhNTYwMWUyNWJlNzUwMTFjNmYwMGM2NWQzNWY0NGE0NmFmOWU0Zjc4MDllNTc4OWEzYTYxYmEwYTNiMjEzODkwNDk3Mjk2YzgxZTQyZTg4ZjBlYzBmNWRlZmMxZjVkMzlmZjJhNDhiN2UzMDI2YzllNTQ3MjAyZWRjN2ViNzM4YzM0YWQzYTE1ZDM3M2VmODJhNGMxZDE4MWYyODVhOThiZDMzMTRjMmMxOTQ3YzllMmM2MGFjYTUxNzUwZWU3Zjk0M2NhZjBjNGUxZTVjN2RmNzI5MWU5NzNiMWY5MzZiNzM3MDc2MTkKK1NJRzogNWQyMTEwZDFkMmYzZWRkNjgzYmRmZGJlYTNmZmE3Y2Y1NTI4YTQwYjhiM2Q4ZDhjOWJmZDIyYWVhYzI4YmFkNDcxNjY2ZTA2MmY3ZDM4Y2VkYThiYjM3Mzk3YTFjNWMzZjczM2I1Mzc5NjcwNDU3MDY0Nzg0MzdkNGQxODdhMGEKKworVFNUOiA2NzYKK1NLOiAgYWFiYmIyZWZlZGI1OTk0MjRhNWYzZTA4ZjkwZmE4ODI2YzVjOTIxNzBiZTUwMWExMTgxZmU4ZThkZjk3NGUwZQorUEs6ICBjZTczMTllZjg4YjI0MjQyMDY2NmNhNjk3YmE4NTAxZDI3NGVjNGE1ZGNmODQ0NTk2NjA4YjlkZDVhOGEzYWNkCitNU0c6IGZjYzE1Y2M1Nzk3MDU2OWU5Y2NmYTVhNzc4ZmM3YWVkNzE5NzhhM2Y1NjI0NTc3YjZmNTdmYTNmMTY3ZWEyMjNlZjMxNzY0YzQ4OGQwNTlkMDY1MzFkMDE2YmNiMTdkNTQ0ZDQ2OTc3YWEyNDFmOGUwN2FmNDc4N2EwODEwZjk4ZDc2NjQ2MGMwODQxYWQ4MWI4OGY0ZDVkODE2NDQ4NWExMjU4YTk0NjIyYzU0OTI0MjhkNmQ1NzU5NDM3MTU3NjZjMmIwYTg2NWJlZGJhMTY3ZDVkMzQwZWRiNTc5YzQ3YWEzMjQ1OWI4ZmM5OGE3OWJiMGJlZDFjOTYwYjRjY2I3ZjJkNGI1NjgxYTJhNzBkNTA1Yjg1YjgxZTNkOTk2NzI3MTRlNGVhYjQxZjNhYjBjYTg3NGY0MTcxODZmZWI2OWVkMTNmYjkxMWY0OWQxNTg0NzU4YjJkMThiNDY3M2VkZmFlNDk1ZTY4ZGFkNTEzYTdhYzBkNDdiMjc1M2NiNGVkYTc4ZmI0MzFmMDRkZGE4ZmU4MDMwZDdiYjRlOGRiY2NiOTY5ZDdmNTgwZDljMWVmOTM1ZDA3NGQ3YTQxZDFmOGI5ZGM0NWM5YTJlNDEwNmE1NTI5YTk4Yjk1NTI5YWIwZWRlYTBiNTcyMmRkNjg2ZjVhN2YzY2Q4ZmIyNjI0YWIyNmM0MmRmMTFmNTEwYTEwM2Q4YTkyOTgzMGFkODVmNTIxMjRlM2Q1ODI3YmE2MGJmYmNkNzM2Y2I2YzU5MGVlNzc3ZWFkN2FhMjIyNGQ3YWU0NmQyNTdhOTA0MDcyNDc5NjBjOWNiMDM4NjBhZWFhN2Y1NGMxYThlMTExNjBkMTFiYjQ3MzA2NWUxOWI3MDcyMWM4ZjA3MmUxOTA5ZDUzOWU5YWM5NDE4NTkwNGJiYmZlNTQ4NzM3NTRhZTFjYTdiY2VkNmY0MDU2MWFmNGI1MDVmMDNhYzk3MmE2ZjBiZmE3M2I1ZjgzMmZlMjNiODk4YjJiYmIwNTc0YTY2NjJlZTkzYjNiMzYwZGExZWM3ZTgzOGViMmM3N2M3Y2I3ZmMxNjRmN2M0NjI3MDEwNDg5Yzg1ODkwMDc1MmM5MmQ5ZDc1YWQ1NDcxNjdlNGJkZDExYTA3ZDI4YjY1MWFhMzBmMTZhODUwZTA2MGRkMjg4MmZiODIwOTE5YTM5OGU4MDVlYjYzNjk5ZjRmZjU5NWY5OTE1MjQ3MzE2NDFlY2UyNWZiM2Y4ZTg5YWRhNTAxMTkyYjFlZGRhZWNiYWNjOGI4OTg1MjhmMmQ1YjMzMTI2OTRmNWVjMmRjOTE0MmUxNTEzZjc3N2E1YzgzMzQwOWMxNzE2MzNmZjlmYTI2MDlkMDQ5N2Y1ZGY0ZmJmNDhlZjJiNzdkNTVlMjU1MTlkMmVlNzliNWZlOWQ4ZmE0NjAwMGRlY2RiNGYyNWRmYjNmMmJhZmIxOWZiZTJjYmRhYzAwMmEzNTlhOTU0YmM2OWJkZmUyZmIzNmFkZmQ5YTE1MDlmM2UzYTRjNmIxZjNmMzZlN2NmODBkNTgzZDQ0MGZmMmExNDQ2NDMwOTg5NzRkNzE0OTNlY2I2NDE3YzBiODA2NWJkMmMyMWMxZTM0YWYwOTI0M2ZiNDllOWQzNTI5N2ViMGE1MmQ1NmRkMjcwZmVhNmRjNWMwODBhMDU1OTlmNzg1ODFlOTBmZDhjYzRjZDExYTUwNWVkZGU4NGI4OTJkODk1M2JkYmIyMzc5ZDMzYWFkNjQ2NThhZTIwNjA3ZGQzNWIwYmYzYTI2MzdkMjBjM2Y4NgorU0lHOiBhMGIxOWNmYTZjODBkZTc3YmZjZDMyMTAzMGJmOGMwMzg5M2UyYjIxYWNlNmM2YmExZmY3NDA4ZTZmZjA3ZDg0N2U2YjJiNjg4ZDRmZDUxYWE5MzI3MDFkYjY0MDJlZjIyMzIyZTZlOWZjN2UzMjBhYmI0ZDI0ZTFhY2M2Y2YwNgorCitUU1Q6IDY3NworU0s6ICBjMmUwNzRmYWEyMzRlOTlhYjIwYWRiYmVhZTExYjgxMDk3MjNiNzA4YzU0NTg2ZGY2NTJiNDAyYzM1Y2RkMTI3CitQSzogIDVlNTI0ZWNlMWM2OTZlNzA1YTM1MTRkZDAwODJiODQwNzk1YTU5YzM2YTk2Y2JjNDgyYmZmNWFiNGVmNTE1ZDEKK01TRzogMzEyOTAzMzhlNDZkMWNjMjVjZTk5Y2JhY2M0MDE2MDM0MWI3ODU4MjNjODIzYzRhYjliYWVlM2I2MTI1NzlmMWMwMTE3MTY3OTZlNTZlMjY5M2Y2ZGRhZDQzOTIyYWE3ODQ3Y2JiNDE0ODEwMTY1MWJiZTYyZDUwYmU5MDgyNWU4ZWFiNzc3YWE0YjgwMjZkYzUzODVhOTdkM2RmNzYxNjAxOTFmOTIyY2RkMmYwN2JhNWY4NWU5NWY0NWRiMjI5MjhmOTA3MzRmZjUyMGM0NGRjOGZlMzkwM2I0YzUxY2QyM2UwNjRmMDFjODI5ZWM3NGZiZmZlMjVmZDBkMzY5ZDI3NjU3NDBmNDM4NTZiZDczOThhMTkxMWFkNzQ5ODM2MTYwZmQ5OGQwNGIyOGVlODdlMTExZDQwNzE4YjVhMTY2ZjA1YzlhNDcxYTQxNTY2NTU3MDY5ZjdhMTRkZTk4OGJiYmY2Nzc3NTIxZmNiYTZkZDY1ZGU0YzA2Njc0YTExODUzYWY4M2FjY2I3MGZiMzI4ZGQ4ZmQ2MTA1YTdkZjUyNjljOWZhZWM4ZDkwMDE0N2U5MjhkOTcwYzM2Y2Q4MzRiZDYwNTRmNzA2NTBkZmFjZTk0Yjc2MjlkMTZlMzcwM2Q3NjZjZTc2MzhkMGFkMWUxN2I3NzQ2OWI5NThkMmJhMmExZTYzMWExNjM1ZWZkY2IwMDZlYmM2ZTVkOGI5ZmFmN2U1ZmI5ODlkYzA4OTZjNTYxYTI2ZjNjMjVmMDU1NzE2YjM2NzEzOGVhNWRhMWY4MWRjNzJjZmY3YTU1YWZhZWU1ODM5ZWY1YWE4MjJiMjk3MGFhMThhODk4MjE2M2JmNWVlZDFiNjc3Y2NhYWMxMjI0ZmY2YzZjZjI1NjM3NDc4MGFlNjU4MDNiZjVjNmUyM2M4MGJhY2Q3NmVjM2UyZGRkM2FiNzE5OTc1MDY0NDhlMTlkYjE5OGVmYWRjOWY3NTc0OTFmMWIwOTcyYzgyZGIyOTQxMGUxZThiYjY3YmJiMjNkNTM1NjNiODgwN2U1ZTBjMmUzMmVlNTk2YjViNDQwMjMyOGY5ZTE3OWU5Y2U4NTZkM2JkMTk5ZDU4ZGU2YzVjMjUyZTdhNjEyNGQ4MWZjOWVlYWYyM2QzNDdkMmFiODg5MTdhYTY4NDQ1MGRkNTgzMDM1MTZjMWE0ZDJiZGNkZGUyMjBjOWFlMzc5MGYyOThkN2QzODRiNzBjMmZlMjU4ODA3ODQ4ZmMzNTMyMGI1NzhiMzM1MDNiNzVmMzhhMWRmNjMwYmQzM2U2YTg1YTRkZDRkZjlmNmU1NWE2ZTY4NjdjNzM4MDFlNTkzZTFkNTkxZGI4OWJhOWE5YWYwZmMyOTJlMDZmYjUxNWFjOGE1ZThlMzQzYTgyMTMzNTU3NWJhNDhmYmFhZTNmYjEyZGVlYWFlZTYwZjRiM2QzMTdlYzBhNTU0ZGRkNDI1Yzg0OTMyYzI3YTdhMTJmMjlkNjM3MTUxMDc4M2JkNzVlNjBlMmY2ZGEyMDA1MjA2OWVkNzFlNjk1YTk0MzE4MjE5M2NiNjg1MWE3ZDJmYTNjNjY2YzE5MzAyODAxNWFjOGI3ZTdkYWE2YzUyMDRmNzdhNjIzMmI4OGI0YWJmZmM1MzYyZmRlN2RlYzM2YjlkNDU0ODgwODQ5MjgzYjExNTYzMzllYTJlOGMzYjEwZTUxYmZhYmRmNzI1NzhjNzI2NDE5YTM4NTQyY2Y4NjQ5ZGY5YTA5MDlmNTgyZGViYWQ1ZmQ4OWQ4YzgxZjgzZDllNDIzZTc1MDMKK1NJRzogNjU3YzM4MjZiMzQ4M2ZkNDJhYjZkZjg2OWQxYjc3YThjNGRmNjdhNmE1OTBjN2M2NzcyOTY5ZTNkZjMzMTJhZTA2NTRmYjgzODQ3YWYyMjE5MzVhMDUxMjI5MTYzNmVjMDU5NTcwMDg3OWViZGJhOGExNDY3YzUzZDQwYzIzMDYKKworVFNUOiA2NzgKK1NLOiAgYjlkYTRlNmFmMDdlMzk4YWI0ZDIxNzUyYTMyYzhmZmE5YmUwYzMxMGQzNTA1OWZiNjYxYmQ3M2FmYTk3ZTJhOAorUEs6ICBmODYyODAzYzk2Y2M0MmFkYzgyNTI4ODQ1NDcyMzBiOTcwMDQ3YjdlNWRhOTk2MjYwY2NjMDI0MGFiNzFhNmVjCitNU0c6IDZiOTVhZjBlZWJiNmEwOGFmYWRhYTE5NjIxZjc2YTgzOWJlODA4NTFjNmRkMzE1ZTgyNzZmNTAxOTk1ZDRjZTZkMTM0ZGY1ZTc5OGVkNTE3YTJmMGU2MmFhMWQ2Yzk4YzM2ZWYxNGJiMWU1ZGRmYzk4ZDVhN2ZjYzgxMTQwYTEzYzIwZDJjYTBjNGI0MGU2ZTZhMDNlZWQ4Yzg5OWY5ZDFmNzkyNDY4MTUyMTk5ZjRiOTVhNDMyNjY4OTQ3YTUxZDdiOGUxMDRkOGQxZjEyYWFjZDk2N2UwOGIwOGM0MWMzYzhjYTNmZWVkYWE1YjhiNjNiY2VjMDYxMzg2NGQ5NTNkODExNDNlYzgxNDI1YmRlMjkxNjRhMDg3NmYyM2YzN2FjOWFjOTQ3MzY3MmNlMTFhMDhiZDU0NzZmNmY2NmQ2NjVlOWFkNjE3ZTM0ZWIzMmVlNTZmZmE0NTlmMjBkMWI5MzUzZDc4MjEyOTg1NDU3NTBjNmVmZjNlN2Q0MDczZGMzMTg1ZWRlMDM5MWNjZTA1NzVmOGJhNjM3ZDgwMDA2OGQ5ZDdlNTQwM2JhNzAzOGQyZGI3N2RhMTQ0Nzg0ZjJlOGVhNzZhZWRmZTUyMWU3ZGM2YTY3NGVkZTM1NTc5NTk1OTkzZmIyMGQ0NGI0MDUyNzgzZjU2YzhjMGJiZDA0NDBiNjllYWJkZTg0NDY4ZGQxM2M2NzFmYjFiYmQ1Y2IwMjJjMmE0ZmNmMzU0MmQ4YjNiYjUxOGU1YWRlYmRkYzg0ZTcxNGIxM2JlNTJjNTZiMjgyYjQyYWMwODkyYTU0NTkyODFiZTcxNjA3MjlmNDExMmM3ZDk5ZGY5YmU1NDM0ZjgyM2E5Y2UwNTAxNzg5ZGUxZDU1MGFkNTBiYjE4YzhkODlhMzM2NjgyNzBiZmY3YjkxZmYxMThmNWNkOTkwOWFkZGRlOTBjMDI0YTNhZDcxMzkxNTE3NDY3NGYyOGFhYTlmOTRhMzIyYmFhNTQzNzM4ZWRhYjQ5NzMzMTJiNWJmYTEyMTU1ZGViY2VlMTYzY2ZlMmIwNGFjOWMxMjJhYzhhNGUxYmM0MThjMTQ5NTVkOTYxMDQ1NWJkOTQ1ZTk3OTNiOTE2MjY3YzljNWY5ZTUzYWMwNDUxODkyNmVjOThlY2I4NGE0ZjA0NDVkY2IxMjM2Yzc2YzNhNjc4YzY5YWJlNGU5MmMyMjk3MWQ2MjIxNzIwMWExYmRmMDVjMDRkZjg0MjBhM2RlNmE5MTdhODVlNzFlMmI5NzI1ZTc3YjUyMjkxNWQ0Yzk5NDYwNzc2MzdjMmQ4ODEzZjAxMGI5NDkxY2YwZWRkYzNkNDY2OGNjMGY4YmM4YTY4MzU3OWJlNTQzOTM0ZGEyODUzYTE2ZjU3MTU3MjRmNzc5ODE5ZjQ0NDM5ZTFkZWJjYWE0MjcwZDliODU5NGJhNGM4NmUxMDYzYjNjZTQ3OWQ3MWE1NDA5YmVmMjdlZjRlNWMxZDFjOTZlOGJlMTM4NjVhZjdiYjQzZjA5MTYyY2NiYzgzYTJjYTllOWI4YTIzMjRlNmQ5OTY1NzVlZWZlZDM3ZWY0OTkwODE4NTczOGI4ZWFlNDNmOGFkY2EzMzBjOTliYzY2Y2MxZmQ1MmM1MzBkNzM3MWM2MDg2OWNlNDJjMTk3ZGNhMGFkMTI4Yjg1ZjYxYzg3NThmMGQ1NDJmM2QzMjk4YjY1ZTkzYzZlOGE2OGZhMGU5YTFkNWU4YzVmZWM4MDViODNhZmY0MzkwZTExNWViNjRmM2YwNzhhMGI5YjY2YzI3Mzg0M2ZjNmMKK1NJRzogNjI1ZTFmNDJjODc0MzRhMjVkNjIyZDgwZDEyNTMyODA2YWZiMjUwOTMzMjQ0OWU2OTZiNjVlMWU1ODg4NTA4ZjExYzRhYzI1ZjU5YjhkOTRkMGJmMjdlNGM4ZDE4NjcwMDdjNDA4ZGE1NzMwODJkY2YxOWQxNWE5ZDVjY2NiMGMKKworVFNUOiA2NzkKK1NLOiAgMTQzZjdiNDI0N2Q1NDlmNmI3YzA5MTcyNjZjNTBmOTYyYzI4YTJlYTI0NzYyZjUzN2FhMDZhZDE1ZTQwYjM1YQorUEs6ICBjOTk1OWY5MGEyZDVmZWFjYmFlMmM0YzgwM2RlZDVkZWFiODY5ODc2MzcwNjQzMzdhYTJhMGIwZGRlZjJmZDg2CitNU0c6IGUyNzQyMDIzNDdhMGQwNTdhNDhiZjJhMWY2ZTlmNmNiNDI1NjA3OWQ4MDAzNzQwOTNjMDIwY2JmNTIwZTVmYTI3ZmU5OTZmZjA3ZjMzYWQzYjIxZjc0YWIwY2Q5M2M4NjQ3NWZmMzdjZjYyMmQzZjlmYTRkMTNiYzk5ZjAxM2U4NTAyYjI0ZTQ2Y2M4N2M0N2U2YjJjMzY2MmI1MGU5NzlhMGYzNDViNzg0ZmYyMWE4YTRkOTJhZGM2NWU4NmUzM2I0ZGJlMTdmNTI4Y2NkZjViNDg2NDY2NGJhOTRmZmRiN2M3ZDI0MTJiNDM4ZTZlNDNmYTk2NjgxNDdlZTMzMjgyMjRkMWY1MmEzZjViNTQzNTliNGY3ZmVmNjlhZjhmODY3YjQ3OGYxMzBhMTQ3YmVhNDJlZDM5ODAzYmNiYzI1NTdiY2E4YzM5OTlmMWQyNGYwYTZiMDNjOTg4NDYwMTFmOWVjNzRmNjY2NDE3Yjk1MDIwZWIxZmIyZmI4OGI2MzEyZTUwMDhjZmYwM2UyZDc3YTI2YWE1MzJkMTc4MGI1MDc3ZjllOGI4Mjg2NzQ0NTVkNmJjOTU3OTc1ZjdiMmE1MGU3ZmQ3YzE2MTJjZTAyMzYyZWZhNGM1NTVhMWVlZjY4ZWMzNGE1YzAwNmE2ZGEwMDhhMzFkNDE5M2RjMmNjNjQ3Njg1YWQzY2ZhM2JkN2M1NjBiN2FlZDQ1ZjBmMWEzZDFiNWIzNjIyNjhkZTUzMjg1NzA1NWFiOWQxZDVkODU4ZDlhZTlhNzU5YTUxYmI5NDc4ZThmMGVlOTNjOTg0YjU3NmI4YjRhYjQ2MDI4MGJlM2RlMjA1YTMyZjFkYzNkNTcyOTIzZmIyMTNhYzE1MTJkODBlYjVhZDVjMTg5NDRiZTc3ZmMxN2RlZjEzYTYxYmJkMzFiYzcxYWNjMjNkMjUwZWM1ODk0ZWJjMjE0Y2ZlYzBjMWI5MDY1MTZkMzJkODM2YWRjODM4ODAyZThkZTMwZGQ3NmRmNmU2MWMxYmM0MzhiNjhkMmIwMjVhODRmMjExZmFjZjNmMTM4NGQyNjEyZDBmYWVmNWQxNzEzMWNmZTBjZmU4MzNmZTk1MGU0NzliYzI5Y2JlN2ZkNmRhMGNjZTMwN2NmMGIxYmQ5MmM4MGU4NzhlNDMyZjYzNmVhMGNkNDI0ODBjMDdlOGI4ZTU3ZTY5YjJmOTM4Yjc4MTIwZjZhZjRhYmViZjdkNGIwNWNhY2Q2ZWVkODU0NDkxYzAyOTc1NWM0ZTY2MzM4OTkzZWQyYWMyNWQxOWEwYzViNDBmNWUzMmM4YThiMWJjZTM2OTcxODE4NmM5MWQ2MGVkZmYyNGE4Mzc3YTk5Njk3NTc1OTkwNjdkZDMxMjYzYTA2ZDZhNjExNTQ3ODFmMjk2MTFhYjgxMmZmODJlODEzNzM5NjQ2MjYzNzA0Y2Q2MDQ2MzU3YTIzYzA0NWUyNDA3YjdhODk1MDgyNTkzOTEzMTRmMmZiZWU0OWFlZjA4NTVjNmU1ZTYzZDkxMmExOWRmMTViMTFlY2UzNGUyNzZkY2I4OGJmMmYyZTQ3NTYzNThmMzRhMGVlMzk1MmI2ODZmY2QxNzU3OGE4ODQxNzZkMzRlYTI5MTZjNWQ5ZmNkMDBlYjllMGFhOWYyY2YwZjE2ZTI1NjRiZmQyOGI2YWI1OTY4Yjg0NDhmMDY4MzIwZTQxODcxNjBmODY2NTc4MWIxZTJlZDlkMDQ5ZTFiNTRhN2Q3MjcyMGZmOWQ0ZjA3MzA1MTk5NmE5ZGI2ZjBjNjgyMWM0MjRmYTUxZAorU0lHOiBjMWNmYWU1ODUxNTcxM2VhNzI4Y2ZhMDkwOTBlODk0MmY4ZGYxODYyMWJhNzA5MGUzYTMzNzZjMzgwMjc3NWExZWNhZjQzNmIxODQ5NzgwNDFlYmI3NTIyNmY5NzBkZjcxZDZhZDM1M2MwZmI0NjUwMjNmOWUyOThmNjRhNzAwMgorCitUU1Q6IDY4MAorU0s6ICAwZDFmZTlkOGI5YTJmMDRjMjJiYmIwZWRlYTM4MzNhMGNlNDMzMzkzNDc1MzFmZGI2N2VkNTEzYTEzZDM2YjM5CitQSzogIDY3YzQ5ZjQxMGY0ODUzMjkzZDBjNGQzOWY0YzFiM2Q2YzYxMDNjNWNmZTIwYTlhNTliNTM5MzIwNDM1MTczNjkKK01TRzogNjQyMTdhYzg0MWZkNGQ2NDU5YmZjNGE0OWI4ODAxZDY5MjliZjE5YjQwOGU4YTUzNzkwY2ViNTFlYzM0MWY5YjQ2YTM1MWU4YzJlNTlkODg3ZTFlYWNjYjkxNDIzMWNkY2ExZDNlNWM0N2QxNjZiNGNkYjliNThjMDEzYzU5YTNiZDI4M2FkMTBmNmJkNjJjMGYxNWY3NjRjZTE0ZjNiMjY1ZjUzN2M2M2U3M2I2YzRmYTY1ZTA2Y2UxZTFmNGFlMGQxMTQ4OWRkMjYwMmY5NWZjNDAyYjc3MTIwNTJhYmM4NGJkYzc3OGMxOWYxMDAwMWI0ZTBkNWZiZTQ2MzA5MGU4M2VmNDM4ZmUwNjhmM2JiNmZiYzJjMTM5YWYwNjc4ZWQyYTExZmFhMWI5ZTQ5YWFhNDYyMGFiZmMwODQzOWZiZmUyYzYxODQwNzY5ZTVmZGEyNjc3ZjhlMmYwYTE0NTY0ZjlmNTA0MjMyYTlmYzBkOWRhNDcxZTY3ZmJjNTc0YzNkNTZkMmFlYjkzN2E1ODZlZDU1ODM1NTYzMDhhOTk4ZWIxZGM0NzZhMDE0ZjVhMDgyMjhkYmVkOTVhMTIwOGJjMWQxZjVkNzZiNGU4ZDBiMjQzNGI5OTVhZDQ1OGU0MjllZTYxNDJhMGM5NzE3NjhjYzQwYzQwYmNiMDhlOTYwM2YwOTYxMTQ3NDQ3MWIzODU5ZDdmZDU4NDIxOWYwMjY1N2I0MzBlOWU1Njk1NWIzNDY3YWM1NmZmMmVhYjIyY2M0OTg0ODkwMzZhNTc0MTIwZTJkYjc2OWEzYjIxNTAwMzg5MTQyYzc4YTg3ZDA2OWYwZTI1NzZjYWZkYThjZGRkNzkxNWE5MjI4NzczZDJhYzlhMDc1Y2IzODdmMmE4OTg2MTcyMTNiMmNjNTA1OWQxMTk0MWJjNGZlNTg2NDFlN2MxNzUwMjY3ZTUzZTk5YzQyMWNiNGNmMjFkMDk4Y2EyZDFmNDE2NDRmNzkwODk4M2ViMTc0YTIzYTc4MWNmMTVlZjM4ZWI5MTE2ZWRhNDEyM2ExNTIyZjUzYjgxZmI3MzY4ZTgwNzVmYjgzODU5ZDJjZjk4ZDkyMTUzNWE3MDlmYWZhOTg3M2M0YTAzOWFhZTY4MmY3ZTYyODZiODk5MjU3YzA5MjQwMTZjYTViZjZkMzE2OTA5OTIxMWE5YTRhNjc0NWNkZDMxOThmMTMzN2Y2MDkyODIyN2NlM2M3ZDYwOTYwYjUzZGVkZjAxMWE4OTQwZjVjNDY4MjA3YTM4OTRiYjA4NzJiMzMzY2NkZWM5ZDVlY2Q5MTFlY2JiYjk2YzliYzRiZDQ4NzUzMjBlNGQzZTljMDJkOWRjNzYxMDllYzQ1ZTYxZDFjZjVhYzcyOWYyZTM0YTk2NDdiOTViY2U3MGIwYzYzMzE3MWFkYWYwZGZkYjVhZmJhNDAzNWIzY2NlOGNiNzE0MWFkMTQyYmI3YWRkNGZjM2Y5NjFkNDJkNzIwMzc1NGE0ZTMxMzIyMWQ0ODc4MzFlMzI5NDdkYTkxMTM4YWI2NDhiNTk1MmVmNjk1NmUyN2FhNWQyYzE3NTc5NGJmODFlZjI3N2ZhYTZiOTA1ZTE0NTAyODY2ODg3ZDg3ODgwNjA2ZTgxYjI3YWYwMWJiMjYzZWNmMmM1ODIwNTg1ZWE2Y2U4ZDhiMzkxZDg2ZmNlZGFkY2QxMWZkYmI1NjZmZGYxNDdmNDAyMDEwZmMzNWY1MTU3ZTAzNjE0NmIzNzM2YzhhNDMzNTkxMjdjMjYxZjZiZjBjYWQzYmQ4YTM0Y2IxNTA5ZjcKK1NJRzogYjA1NzI1ZTczNzFlZDBhOTFlYmM4OWYzYzMwYmFhOTkxODM3NjNlZGI0Y2UzNGZlOTAxYWYzNzMxZTAwMWNjNTRmMjg3MTE4OTE1ZTkwMzY1ZDkxYWNhOGZlYjE3MDg3NjlmOWYxZDZlZWY1YWExMTNiZWUwMGI1ZWZhYjI3MDQKKworVFNUOiA2ODEKK1NLOiAgYzEwYjVhYzYwNTVhMWRkYmNhMjg1NTJlNWM3MmViZDA1Mjc4YzkyMjM5YjJmY2QwYzEzNTM2NTFhOGU1NTlhMAorUEs6ICBiMjE4M2UxYjAwODE2ZDI5MzA1Zjc0NjhlN2U0NWVlZDNmZDhmMjNjMTViMzA1ZjlmZGE5M2U4MTJkNjViYzI3CitNU0c6IDM1OTQ5MDVmOWVhNDY0NjE1ZjQxYjg3YWJiOWQxNjczMzdmMjlkNDVkOTdmN2ExNDY0ZWM5ZjJlZTUwZjkwZjJlNjczMzk4NzRkM2YyMDkzYmU5MjI2MTA3NzAxZWMxYWFiOTQxYzRlMDU5ZjFiYjI2Y2U4NmUxNDhkMWQ5ZjBkYTJhMmEwZjk4MjlhMzY0ZmI0ZjEzZjU4Yjk2MGQwZjhkNzIzMjMyODNjNDQ5MGVmZGY1Nzg3ODY0NTg5MGZmN2JjNTA2NWRhZDZlNTFkZDFlNWI5YTUwNzUxNTA5NzhiMzM2N2YxYmE4NGU0NWZmMWYxMjc2YzU3NmU0YmM3MmJlOGFhOGU0MDVmYzJiMjdmODE0NmI5OTk4NDVmYWFhMDU5NWQzY2I3MGU1ZDM3MTJlZDU0YTBmYjNlMzIyZDQ1MzgwYjVkZTM2MDliOTY3Yjk1OWJjYTVhNTgzY2M1MjBjZGNiN2JjYmI4MjlhYTI1ZDc5MzIwOTVlY2IzMDM5MjNjMjU2MGFmYzNmZDczMjRiN2I3YWNkMDg5YTlmMDBjMDNhNzNkMDQzZGMwY2YwYmEwZDg0MTFlMmIxYjE4ZDIxZDJhMzJhNzI2YTUzMDU5MTQwZjc4NGY3Y2VkZjJmMzNjZWM2NmZlNGFkNWNjOWVhY2NiZTRhZTEwMDM2YWMzNTIzYmFjNzAwYTExM2E5OGI1OThlNmRmMDMwNGM2ZmEzMjEyYWNjMDRjNGUzYzdmNjY4NzM2MmVmODZkNjE3YzZkZDQ4M2Y4ZDgwY2VhNjZkMTk1MTEyNzQyOGE2MWMxZTE1NWE2ODUwYmIyYWZiN2Y5MWM4MmQ3M2ViMmIwNTQzZWU4ZmMxZjM4ZTFkY2RiM2M1MDNkZGM5YmEwODEyNDU2YTVjZTJlMTFkNTU2NDg3YTY0Njk3NGE3YmJmODZlODA2YzU4YzY4YzQyNjlhN2M5YmJjYWMwZmZlZjk4MzViMzNkYzQ0OWE3NTQ3OWVjZDIzZjZkMTQ5YzFlNWVhOGI2OTIwOGZmMzZlNWZiZDY4Mjk1NTUwMzE4YmZhMGQzYjFkNmMxYWQ0MjcwYmNhYjA5MDRhZTUzNDkxZjliMWNhNTAyZTAxMmVlZDc3YzQyN2Q0OWEwOTYyZjEwNTUxMjVkZDdiNTM3MzNkODUyODkzNGI1NTgwZGQ1ZmQ1YmJlODU0OTc4YmFlM2QyNWJiNGFlOTQ0ZTkwNjVlOGUyZTA3OTQ2NTE4YTZmNTQ4ZTM2ZTA1NmJlODI0ZDllMDJhN2EzZWFhZGQzNzkyOWY1ODEwMWNiMTg1M2JlM2Q3NTQ3ZjU4ZjQ5ZTM4YjAxOGE3NDhkM2YxOWM0ODU4MmFiYmRiZTk1M2E4YTI1YmE5ZDM2NWRlYTgzNTkzNTg5OWMxOWZiMGI1MTkwNmFhOTcyYzVhYzQ1ZTk5YzQwYjNiNzZlMzVkMzI3ZTMyMWU4YWUyMzA2YTZlYjNkOGNiNmVjMmZhNTM5OWFkZDE5ZWEwMDI4YTAxNzkyYzA4ZTI3YzE2Y2Y0Zjg1YWFhYWU3MmY5ODZiMDk5ZjllYmU0YWQwYjI1ZDA2ZDNkZTQ0YThiZmE1Mjg0NGJlNGE5Mzk0NDgzM2NlMmFkZDUxYmI1NTRiMzU2YTdkYzQ5NzQ4ZGQ0NWFlN2VjOWU4ZGI0MjZjOTdhMjVkYTVlZGQzYjYyMWU0YWRiZGU0ODE5N2EzMzE0ZGUxYzUwZjRkNjAwMjAyN2RkNzUxOWRkZTNlMTU3MjllNDg2OTU1YWM0MGQ5ZDY2ODc2ZjkwNjY4YzY4OWQ4YWI1OTgKK1NJRzogOGE5YTMyMTdmZGYwNjQzYWFhYTVjOGZiMmE4OGE1NTYzOTg4NTliOGZlZWZiY2I0OGNjZDg4ZTU4NWExNjdjOTRkYmI1YzBjYWQyNGQxNWJjYWJiYzFlZGIyMWYwMmE4YzQ1N2M1NjEyMGEzMjM0YWMzMzU3N2I5YWYyZGRjMDEKKworVFNUOiA2ODIKK1NLOiAgMDYxYmRkYWIyODBiMGZkY2IyNmJmZDlhMGZjNzIxZjY4Zjg4MzQzYjVkMzk4M2ExNmI2ZGZhYTVlNzY5NjlmMworUEs6ICA4MTU1NzhiYmE2ZTcwNzBlYmRlY2ExMTc1NjhiZDc3ZWJmZjllMTRjYjhiYzIwMGMzMmJkODdkYjFmYjM3ZDZjCitNU0c6IGVlNzZiNDBjZDQyOWVhYzdiYzEyODM5Y2EyZjdjZDMxZjFlMDA5OGEzOWM1ZmMxOTgwNWJlMDMzMWY0NDc5OWUzMThkMTI1NzFmMDZlMjk5Mzc1M2EzNjg1Y2QyYTk2YjIzMDFlMjAwMjQyMDlhZGM1YWRmNzQ3OWZmOTBjNDc3YzM2OTVhYmI5OWJkMjg1NzlkYmM3ODMxYTE5MmJlZWQwY2UxN2IwMzhiMjA3NjQ4MDA2NTNhZjdhZjAyNGUyYTEwNGVkMGYzZTUyZDRiYmQzZTEwOWNmMTI2MjkxZjQ5YjBhMjFiZTQzM2MxYzVhMjU4OWVhNTcyOTk3ZjYzZDJiYjM5NzJkNTMyYmUzNWEwNDcxZWYwNTczZDc5NWMwNzJiNmE4Njg1Yjk1ZTQ3YjA5ZWE5ZjQ3NWQ5M2JmMTJiYmQ3N2I3ZDJiZjVkNWJkZGYwYWUwMjM3NTM3MWQxZDc5OWVhOTIwNGJlMzg5ZTZhOGU1ZGVlZGNkNDkyMDJlOTJkZjdjM2U3NjFmOTJlZjhkNzlmYTczOGQyYzViYzI4MGVkMzI4Nzk4MzJmZjJiMDI2NDI0NTg5Y2RiZDUyZDE1YjYwZjJhYTM1MjZiODk4ODQ5YTM0YTg1ZmYxYzQ3ZGM2NTU0Yjg1YWM3NmFhNzkzNWNiZjNmN2JjODBhZDAwOTE5MmE4NzVjYTIwOWI0MGZlYjA0N2NjNDQ2OTY4Zjk3MGRhNDdiOGNkNjdkYTdlYjRlNTRhMGU1YWIyMGNiMzViYzZmYjdmMTMzMDdjZTY3ZWI2MjA0YTY3Y2U5YmIxZDEzOWMxYjRiZDVkYmVkNTgwMTBjODdiZjgzMWU2NTIyZWUxODJkYWQ5NDU4MDRiNzY3YzRkZjI1NTRmMTViOWU5YWZkMjU5OWVmMjU4YzY3YTIyY2FlYjkyYTU3OTg4MDA2YmJjNzJjMTA0ZmFjN2U1NDEzY2QzZDNiODAyYzgzZTYzOWVhZmUyMTJhMzhiYjdlZjc3OWFmMWE5NGVlMTM3ZjZjNjA2NjdiYzQ4ZjI3YmY0YTIyMjQxYmM0NGJiNjAzMzgzNjIzOWJkNmVhZjNlMmUyMjMxODc4NDFlNDY0MWIwZjRlOWZmOGQ1YTQxZGRiZWFiYjQxMzhmNmI1ODVhY2UwZmI2YjUzZGMzYzllZGMwMzczYjYwNDdmMjdkODM1ZThlMjQ2NjQ0ZmQ4MzJjY2ZlMGRmMjVjM2Q3ZGExODdjOWZhMDU0MjBkNDM0NTVmMmQwOGI1NzE5MjkzODZiNTljNmUwZTEwYTM1NjAxZGE4OTliMWI0ZGMzZDk1YjY3ZGQ5YTgzODE4YjBhMzE4YmZkZGEwNjQ2NGI0YTQyZDNjYjk4NWYzMGVjOTdkNmEyYWYxMzI5MTE1NWQ2MGNlYzU3Y2JkNThkNWNmY2IzNWMxODUzNWU4ZDI5OWI1YjAwNzU5MDg5MmVhOTQ5ZDFiMTM3YTYyYjM5YTQzNmNkN2U1YjlmOGQxYjY5MzhkYmFhNjJjMjI2OGQ0NTljNjIyMGEzZTZmY2JmODBiYTAxMThhY2QyMzQyNTYzZmJkYmMxZjdjOWRiYTdlYTJjMDcyYWZjOGFlMjEyOGUzZWJjYTA2NDRmZmQ4MTYzZTgwYTFhNTU3ZDlkMzkwMzRjY2Q5ZGJkMTJjODg1NWE2ZjkxNjViMDgwMTgzOWNmNmUwN2E5ZmJhNGM2NGQ5YzA5OWUxNTQxMGUyOTBlNjc3MDMxYjY1Y2Y3ZGViMDA3OWJkYWRjNTczY2MwNTZkNzY2NmQ5NWQwMzNhMGI2YmRiYTdlYworU0lHOiBiODMyOTdjY2RkNmQwMDk4ZWJmNWQxMzJkMTc0ZGUxOTU4MzExYTc2NmJjYzRkYTE1Zjg2NGQ4MDFmMzhlMDlkNjEzZTdhYThjMzM2MzAyNzM1ZDc1YmU0MTY2ZDczYjAxODRiMGUwYmM1ZWYzOWVkYmNjYjZlMGU2MWFmZWIwYworCitUU1Q6IDY4MworU0s6ICAyY2FiNWJmNTVmZmE5MTRlOWFkMDc2MjIxOTBkMzQzZWM1NWMxM2NkOTFiMzg4Y2I3NTAwZmZlMDZkZjdjMTgwCitQSzogIGI2MWU0MzJiYjk3Y2JhZTM4OGEyNTc4YTc0ODQ5OThlMDBlOWFkM2RkZmQ2Y2FiOGQzYTVmYzViYTA0MzA3YzgKK01TRzogMmMyZDA0ZGMzYWQxOTgyMzU5ZWNkNWJjM2VlMDM1ZjM0OThlZWRmZjYxMDRhOTNjNjAyYWYyMTc5YWViMmNiMWY0MWM1Y2RiMGE3N2IxMjRmOTQ2YWE4YTgyNGFhMzA3NmMyZTFhY2ZkNDhmNjgwNzBiMjYyNzZhNjU2YjRhNDc1OGFiMTUxYTZhOWM0MWJkNzRlMDliYmQ5YWRjY2UxZTg3YTBhODBkMTdmZDkyZTg1ZTRiZGE0NzJjOTg4YjZiYjExODNiN2VlNTlhMDlkODA1NzA0NjZkYjkwZGQzNzQ5NTc5YzRlYjE5YWI3NWZjMTUyZWNkY2Q2OGNkMTA3OGVmMDZlNTkzYzczNTE2ZmE4MjkxNDgxYTY2N2QzZjk1YmZlYjE0NGJhYjU5ZDZkZGM3M2EyNzk1YzEwMTdlMDk1MzZiMzE2MmU0YmM1OGY4ZWFkMzg5NTcwMThjZmVjNzJiYWRiZjIyODE5YWIwYjQwNmM2NDczMGZjNzNmZDllZTYxZjc0MTg3ZWRhOTFlZDRlNzk5M2U2Njg4NGFmNDNlZjRjNmJmN2Y3YzM3OWU4ZjBmNjNkY2I4MDQxZTI2YjhiODI5MmI2YjZkMTkwZTRhZGY0MzBmYTgyZGQ3NGM1NzM4NWI5MTljNDQ2ZGIzN2I1ZTg3NjdlNGEwYzk1MDEzYmU4OWIyYmM0ZTlmZDYyNzU0YTg0NDQxODQwMDk2OGFlZDJkZDMyOGQ3YjFkYzkxZTFhMmIzMDA5ZGM3YWQxNDBhMDY4NmY2NzMxNjhhNjBlODhkODBjNTIwZmMyZGNmYzU2Y2E5ZDRiMGM4ODg1OTA5OTIzMDcxNGRlYzgzZDI2YjQ2MzA1NTRkY2I5YzQ5MDE4OTVmNzhmMzgzNGIwOTc2NmI2N2E0NjVkZThjOTQ5MDA2NWJmNTY4MzM5MjQzMzk5ZmRjOWQ1MTAwMzI0NjY3YzVhYjI4ZjM1YzAwZjYxMjU2MzhlNjFkYWI3MGQxZWVjNDg5NTFkZTBmYjNmN2IyM2QzY2Q5ODI0MzdjNjM0NzM0MTViZWYzNzRhNjYzMjk2ZjI5ODZiMWFlOTU3OWI5ZmZjZTcxZWMzNWVlY2ExMTZkMTk0ZjhmYmE5YTQ1YTkxYmFlMjdhYzQ1NWRiNzFhNmIwMWE3MjlkMGMxMzVmY2RjYmMyM2U1MDRhMjk0M2MwMGFhNDIwNzA1MTlkOWNkNzdhZTY3NTRmMzFlYjQ2YTNlNWJlOWVlYjNmYzhkMzFmZjE4MmRhOWIwODdiZTM0NjJjODQ1OTEyNmU4NjI5MDkyMzJmZDVmMmQ4OWMwMTgxNTk1NzYxMWU2YWU3Y2FhOThiNjA1Mzc3NmE3NzE1YzJmOTNjY2YwMzA4ODcwMzBjNTZjMmI4MjI2ZGFlMjk3Nzk5NWE2ZDNmMWU5ZDc5MTFhOWM5ZDJhMzAzZjBlMDFmMzIzMzhlZmRhZjhlZTYzZmM0MWIyNTM5OWNmZmQwYjM1ZjdlZTU2NzZiZDhmZDNkYTJjYmVlNGFlMmVhOTgwOGQ3ZTczNTgzZDk5NDMzOTkzMTQ2Njc0YTQwNDBmNDJmNjNkMWIzMTM1Y2M3OTdhOGQ4ZjBiODg1NzNhMzI4OTA2OTZjYWM5NDM5ZDFlMTVkMTk2ZDkwOTBiNjJiNmRiN2U2M2M5NjQ3MmQ5NDZlNjY4Y2JkYTFmNGRiODg5MzAwY2RjYzI1ZTg0YzlmMzg1N2QxZDllNTMyNDFjZjYyNWYzOTA5YWYxYzhhYWZmNDMwOWY2OGY2NTRiN2ExNWI2NzcxMWM1YjdmOWRlNzY3NzUKK1NJRzogNGNmMDhmNGZhYmJkMDZkY2NiY2NlMmE3YTU5NDFmZTlhZmRkYzRkMmQwYmM4MDgwMmU5M2IxMmNiMTM1ZDNhY2Y2NTExZTBmZTQxMTNjNWUzYzU1NDFiMjdkM2EyMTUwYTc1Nzc0MmFjNjVmOTVhOWNlNjY3M2ZmMGNkMjFjMGYKKworVFNUOiA2ODQKK1NLOiAgZGQ3YjU5YTMzZDk3MGJlZjYyZTBlMjFhN2I2ZTRjMzA5NjA2ODZmMTdmNDlhZmRiNGE5ZjRlODA4ZTM1NWM3ZgorUEs6ICA1M2EwZTU3Mjc3ZDliYmVlY2Y5OWM0ZDEzOGZkNjZmYWZjYWVjN2JjNWY1NjdmODMyMDgwMGM0ZTU4NGZmODJlCitNU0c6IDc1NTgwMzY3OTMwNTE4MTY4YjBhNzY0ZDA5NThiZWM0ZmM0NmNmNTkxOTk5ZWIzNzM3ZTQyYTAyZWE3MmQyMTBkYWFkNTNlNTRhN2MyYzEzNGE2ZDQ3ODMzN2QyNjMzMzY4NTQ4MTcwZWRlZjBkODUxNzlmMzAyM2UxNTAzODY4YTZlNWUyNzc1ZTQxMmFjMDVmMDU4OWQ0MmEzNzdlNzVhYTZiOGY1MjIwYTc2OTlhZThhZmYwMTA5NGVjNDY5ZDYzNjFkM2U4ZjM4NjE1ZWRjZGE0ZDJkNTI4OWFjZjczZGI2NDU2OTg1NzgwYzkyZTA3ZjYyYzc3YTkwOWZiNmVmNTk4ODIyMDYyYmQ1NzJiZjcwNThkY2I4MzVlZjM0NDNkM2U0N2I1YzYwM2Q5MjczNmRkMWRmMjZiZTRiOTI4M2I3NmUzMjFkNTVjZTJiNjM4Y2RlMjI1NzdjYTU5Yzk2M2MyNDc5NTU2YzU3NWNjYjBkNmQxOGM4MDRlMmViMDFmZjUzNTgxZWIwNDBmZmQyY2M0Njc2MDczN2E3NDY3MmVhNmJmNzgwNThhNmEwYTFmNWViZjU2ZGVjYmY5NGI1NGFmYjIzYzExZDM0MTc5YmYwOTc2YjQxNTgwMTdkNDA3Yzk1YTQwMWZhNmY5NjI0ZDc3MTM1ZWFlODE0MWViZWE5ZjM1ZDVmNTFiM2RlZDk5NWM3ZjcwYzAyNWIwOTRhZGVmMmIwNzFmOTcxMTU1ZDc3OTZkNjEzYTU1MGQwOWU3ZjRkZmMzNDUxN2IzZjhmYTQzOTMyODZhMmIyMjgwMTdkYWYyZTAxNTM4N2UxMzUyN2Y2MzY2MWQzYzEzZTc4ZTkwZmIyOTU1ZWVlMzQ1NzM5MTE5Yjc5MWYwNWIwN2M4ZjQyYTQzNmVmY2FkMWVjNWVhMTBmMzA4ZjhlMjNjYTk4YmM2NWE1ZmQ5MzkzZWZhYWZlNWNkZWZiYTgxMDU4MTcwY2M1NDkzYzAwY2VkZjI1NDA5NzQzNWQyZTJmZGU1NWY4NjZiYjgyZGJkZmI5MTU0MzQ0OTc0ODY2MzU5MTY3YjQ2NmNhYTkwOWI5MTUzMGM5YzdlZThjNTNmYTkwMTY0YmJkMGIxZmFkYmRjZDA4MTI3ZjE5YmU1MDMzMDcxNTE4ZDNjZjEwYWU2YmQ2Zjk4MjdlMTIwNmY1ZWMwOTVjMTk4NjE3MGU4ZDVkOGU3MmU1N2Q0MjI4NzAxZGYyYTQ4Yzk1NDg3MzA1NmNmZGZiYWFmYjEwZTQ2YTBjMWYxNDRiMWEwZWFjZGQyY2I2NmJiOTEyYWM0NzE3ODdkYWJlNDgzNTM4NTkxMjBiMDM0MDM1NjdjNDE1ZGRiODhmYzBkN2ZiYTQwNjliYmZlZjQwNmVlZDcyNGExMWFiYzA0MWU4ZTdiZWI2NjNkMGRjOTlkY2VmM2FjNmExNDkwMDdiNDJkZDFmMjJhNzdkZDUyOTAxODE0MzI1MTcyMjI0YTI3NzhmMzY2ZmI5ZWIwMmM4MTJiODQyYTQyODQyNTYxYzY4ZjJhYzIzMWMyNmNlOWU4YjE5YWU5MWViZmFkM2MwZTlmNjYzNjNhMTNlY2Q4Yjg5N2EzZDAwYTI2ZDI1NzY0OGQ1NmM2NzQ3NDQxY2ExYzZlZTk5ZjA4ZGRhZDI1ZDExNmRmYWRhYjAzODMwMDBkM2Q3MjI1Y2YyZWZmNzA3NmIyYWRhYjk1MjIyOTI1NTVmMzE5MzIwNjc4NjAwMGQ0MmNhMzRkNzA4ZGMwNDI4NGE5NGQxNzRjYzkyZjEwMmVmZGRmMzE0OGMyOTk2OTE2ZDQKK1NJRzogODcyOTRkMjJkNGFkMGQwODE0ZTJkNmQ1ZmFmNTU3NDllOWIzOTgwM2I0ZDRiNzg3OWU2MGI3NzdjMWZjNDE1ODRmZTE1MTM1YmExMTIzZmY1ZjIwMGRiMzVhMzQ2OGRkNGQ1OGRhZDc3YmQ5NmVlMmI4ODhhNWE4YjE4YzMyMDQKKworVFNUOiA2ODUKK1NLOiAgZDg4MGQyZmIwNjI2MmY1N2FiODc3OGUzM2QxNmI0NzMwNjA5NzhhNjU0OWNkYmNkNTU4NmJhODEwNWY1YWNhOAorUEs6ICAwZGU0ODZkMjExNWZhZjJkNTQ3MjY2NzcyZTQzMGZkOTcyN2JkY2FjZTZlY2JmMmZlMjNhYjYwZjdiNTI1NGIxCitNU0c6IDExNDc0M2U4MmEwOTkzY2VjOTcwNTA2N2FiZDc3YzE2OGI1MzY3N2VkZTVjMTU5ZmFkMzZmMDZmYzFhMTRhY2Q3N2Y4ODM3OTllZDk4ODNmOTkxNWFlYTYzOGVjMTc0MWYzZjQyMTU4NTVmYjViMDdkZjM3OTNiYmU1YjU2OGViMzU5NDM5MWE5ZWY1NzI3ZmFiOTNlNTc0NjliMzdkZTEyNWIxZTlmMmU2ZmUyYzNkMWExMGVjZjg3YjZjMGE2NjVjNmQ0NjBhMTcwZWVmYjliZjcxNmNkOGZhZWE5NzY0ZjU3OWZmMzRlYmZhOWM0Y2ZiMzQ3MDZkOGRkN2M5ZWIxZDEwYjJkZjQ2MGE0NmJiNTc4OTQzMGJmNDQ5MTU4YjU4MjRmMmEzYTdiOTE4YjMzYWNmMmQ5ZWJlOTAyMTZkMWI3Y2JmNGFmNzcwYzVkYjk1ZmM2MmZmM2EzYzM4NWMzYTgyMTc4NTNiNzM0NjYzNGFhZjMwNjA3Mjg4ZGIwYzQ4M2JkNGMyMjJlYjMzMmNiODlkYzRhMjE3ZTYzMzRhMjY4NDEzYTM5MGJiMzcxYWVjMzU1ZmJlNGM3MzZmN2RhNzVmOWM4ODc1NDFhMmI3ZDBkYWMwMThiNjEzOGYwMjFlNzcyNjZkZGVjZTg0Njg0NTJhZGEzOWY1ZTYzZDAyMDliOWQ2ZGFiZjk3NTQxMzI1NmRjYWExNWFjMTRiNjA2OGUxNzcwNTZjN2JmMGYwZjdjODg0YTM0MDIwMzIyOThjZDU1OWE2MzEyMDM5NDAwNjMyMzI3ZjljMGU3NjNlNTI3OThjYjE3N2RhNDQ3NWU0YjI0MDVjMTU3Y2E0Mjc3NDExMDhkMzNlZDBiN2EzZjUzNDM4Y2U2YjcyNWM2ZGQ1ODE0YWY1MWNmYTQ1ZGJjZWQ1NTdmNzI2ZGIxMzBkNTVjZGU3NTMzYmMyMDkyZDZiNjk5YzJjODcwYWYyODI3MzFlMThkNjUxYWU4NWIzZGI0YmEwMjg1M2Y4Yzg3ZmQ1ZTNhYjY5YmM1N2IwOGI4MWY4M2MyMzljY2YyMmU4MTdlMmFkYTRkMGFkMTQ0ODdlZDE0NjEyYzhiMDk3M2VjMDY1MGE1NWY2YmY5YWY0YWU5MjU2YWQzNTQ2YTNmNjdkZDM1ZDk4N2VmMjE5MDlhOTRjNTBmMGVmMDY0MGU3NTViMWM0ZTFhMDEyYWYwZDMxNzY2ZWViNWRmMzFjZDEwNGM2NGViNjJlYjRlZmIxMzljZjMwNTc2OTQwMWQyMTNmOTZhNDg4ZDVlZTdlM2NlMzJiMDE5MmVlOGYwODMxYmZiZThmZTk1ZGU5NTY4ODZiNTI0ZDMzMTliNzNmZDU2ZGM2MGU5ZjFjNzJkNzgxNTVhOTdjNmY0MzY5N2IyMDQ2NmIzZTdhZWJkMzU3YjkxNjk2ZTczNDhmNDU5OWIzNGYzNTkxZWRkZmNlMmE3YmQ4NDlhYjE2ZjdiNDNlYmIxNmUyM2Q2ZjUyMTBlZmEzMGFiM2JhOGQzMmM0MDY2MmI4NjYyZmQ5MTE1NDRiYzI0NThjNjU2OWVmNzVhOWI5ZGY2YTBmNmQ4MGQ2NThiYTg2YjI0MWNhMTljZTlhNmZjZjAxZDNkYWE5NWFmYjU5YzNkODlhMThiOTQ4NjIxMzk0MzI3ZmM1ZTkyMGE3NWY5OGY1ZTJiM2Q2Yzk1ZmQ4NTJhZGY1NjdiNmQzN2M1NGQyOTcwODU2YTU5OWY3NDllMmM1NWRhYzdjMjNlM2ZiMWE2M2JiNGNjNDdiOGI5NGYzZDU4OWFjNGJlZWYwYWFkNGU2MjkyZgorU0lHOiA0YzAwYTcxNjY4ZDMyMTNjMjljNzA0MWM1YTAzN2VkZjEzYzY1MTRiZDBlYmM4ODBjOTA5Y2FmZjE1MDZhNDVkMjc4MDlmYjc0ZTY2MDJlYTJhYWQwZjg0MjgzMWI3NGZiM2Q2OTAwY2NjNTIwNjUyZGEyODM2OGZkOTBjYTMwZQorCitUU1Q6IDY4NgorU0s6ICA1ODU4NzE5NDFjYzI4MmUzMzNkNTdiYmZjM2Q0YWVkYTg2MmNmYTBhMzc1MDMwY2Q1OTRiMzY5Mjg0OGM1ZjAwCitQSzogIDRmMzQzODE2Y2Q0ODA1MGI2NzhkM2FkZjcwMDA4ODc3YzlmY2Y1Y2I2NjJjYzRhZDJiOTM4NjRjMDIwOTA3MDcKK01TRzogNjUxYzEwMWIzZTJkZmVmMDc4M2NlOWY2MWJkMGE4YmRjOTMwN2FjMDQ4OGI5ZGQ3MGNkOTBhN2VkOGYxNzlhNzg5MzU1NTYyOTViOTFjYzJiOTcyMTFlM2I5ODFiOGRhZmNiM2QwNmI3NmQwYjZlZGE3ZmM2MTk0NWMwZWUyNjUyYzVhYzQ1NDI1NjQ5NmNiODJmOThjYzFjYzkyZDgxODkzYjEwODJiMzFiNDdlNmQyMmEyZGU2MDlkZTRjZThkN2NjNGY0YTE1MmM0N2Y0MTBkN2ZjMzdkMzhjY2Q2MjlhNGIzM2U2MjIxODk2MDgxNzk3ZDA3NTNkZDRmYWE4YThiNDRkNmM0Njc3MTY2ZGZiNGQ1MjE1NDQ2MzYwYTNjMjhkOGY2OGUzOGFiNTQ2MDhiOTg4MjFiODNjMTg3YjUzOTNhZDg3NGE3NmY0ZjVkNzI5NDkzYTFmZDc0Y2M3NzE5Y2FlYTk5MWQyMjljNWQwYzhjNGM1Zjg5ZDhlNDM0NWY0ZjUyMjE0MzEzNDEwYjhjMDZiMzMxNWY0NWVkMGMyZjkxMzhhYjk2NmFlYzBhNjQ1YjZkYmE3NjM4MGE1MzkxMjNlMGYzM2I5N2YzZDA2MDM5NGEzMDUzNTgxZmZkZWYzZTZkMzY1MzExNjZiNTUzYTlkZGUwMzEwNWMwNGFmNjk3ZDk1ZTk1MjE3ZmQ2ZGM5NjhiZjNiNDQ4ZDVmM2E4ZTRmNWFlN2VkYzMwZWM3OGIxYWVhNGYwZGIxODlhOTQ5YTEyMjEzOGNkZmI1Zjk2OTNkYjAwNGJhZWQxYTQyMWRjNDQxMjJmMzI3Mjg3ZjcyN2NmOTg5ZmNhZTNjZjNiZTNlM2RkOWI5ZjUzNTAyY2Y1ZDlmYjE4NmRlNzkxZDMxMGQxMjI4NjljOWZjM2I2OTVkZWMxNjA3NDc3ZjNlMTQ5ZTUyYjYzY2ZkZmIwZDk4M2U4OWFmMmY3NWE4ZjQ4OTg0M2VjMDVjNWVhNWYwZTcyMWFjYWIzODdjNjgwMjVmMjBhYmUwZDI3YjRjZTI5ZjRhNjRmYjdmOGU4YTMzMjg3M2QzZWQxMjFmYjQ5MzQxNGI4Y2IwYzAwYWQzYWI2MTZjNWJlNTI0MTQ3MWFkZWU5ZjhmNDY5NzRlYWU4NGE0YThjZTZmYWJiN2Y1ZDlhNmI3NWE3ZTY3MDQ1NmZjZGNkMWQ5ODJlOGY4MjdhNGJiYjY5ZGVjN2UzMDUzZGZlODM1YjcwMzAxYjdiNzYzZjAwMDRiYzkwNmUxNDU1NDJmNDg3YjRkYmEyZWQ1NjFiZDFhMjAzMDYyMzZhZjRiMzZlNDA2OGU4YzAwN2I5NDU0Zjg3NDFhNWY4ZjA3OWVjMWRiODgzNWViNjU0NDI5MGQ2YWRiNTJhNzBkNzY3NWQ4NWRmNGE5YTEyNTViZmQ5MzZjMzMxZmU1MWMwOTc3ZDEyNGI1YTUwNmQyOWM2ZWVjMzNjYWEyNWQ4ZWIyODk1MmQ2ZmZiOWQ2ZTNkYTg5MDM4MmQ4ODg3OTZkMzc0NjA3ZjY2NDNiODllNzMyNmQ5ZWRjNDlhMGY1M2JkY2I4Y2M3NmZmZDM5M2E3NzA2NTIyZDA0MTcwMDM2Y2NiNjYzMzBkYmFjOWRhN2U2MTY4Y2FhODhjYjYyMTgxZTU1YTdiNmQ1MjFhMjExNWUyM2UyMDJlZTI0ODBiNTg3YmU0NTAxNDQ3OTc5YThkNzM2ZjkwMTJlY2YwMGU2N2IzMWU4MTA0ZjZlN2RmMDhhOTY4M2NkYzg5YzAzYTRlMzdlZTIyOTI4ZDQ1ZmExOTA5NGUwZDZlN2I0MGIKK1NJRzogMjk4ODU2ZTU3MDE4OGFlZmNhZDgxYmI5NzBmMDc2OTY1NzcwYzI2NzYyZmUyOWU2NTU0ZGM3YWZjZGI4MDE3MjNiZjZjNzYzYjRjY2Q2NWY0ZTE1ZDdkOGVhMzhmY2Y2N2VhOWQyODU5MGM3OTI1NWMxY2ZlYmE3YjVlNDVhMDAKKworVFNUOiA2ODcKK1NLOiAgMDU4OGFjZDRlMDliYTkwMjc0YzhmM2QxNTc1YjJiZjM2NGE3NzY4ODRhOWFlYjQxMDM0MTVlMTYzYmEwYmY4MQorUEs6ICAzZWNhZTY5N2I0MjVkODdlMzRhMWQ5NDQwOThlM2QzMmUyYzFlYzU2YzM2MjdkZjgwYmEyYjhhNDNkZGMxOTAzCitNU0c6IGY4MjhmOGM5ZGFkMjk4YzViNzE5ZGFhODUyYjE3ZTc2MjU5OGE3MGY0ZWNkMTZhMmZjNTk2ZWIwMjYzODk5ZTk4M2Q0NGVkY2M3YmQyNDBjYjA3NjEwNjAwYWU5NmFhYzBkZmMzYmUzODdiNjE2ODUwODk5YjVjZjQ0ZTE3NjdmZmFjYTNkZjM4MTU4NTk4NDI0ZjgwNzE0MTRjNzA0ZTYwYjQyMmFkNzczNzdmYTdmNmE4YzVkMGViYzAyMzVlMmQ0M2E5ODRmM2FkZjc1OWViMTA0NDdmM2MyZjZiODBkNWExMWVmNDFkM2EwOTg1MmMwOTMyYTFiOWFjMjNlNmY0MGExNjdkZTIxMDQxYmVjODg4NWY5NDMzZWI4MGI5NWM5Nzg1OTU4MDQ2Y2RiN2JmMTQ3YTc5OTQ3ODIzYjQxNDlhZTA1MjFkN2U1YWFiYzE1NjRmYTQwNDQxMDZlMmUzOTJlOWMzNDQ0NTdlOTkyOTM3NmVhOWI0MjI5YzZlNzczOGZlNzkwMDhkNTU0YzQyOTM5NjkxNGMzNjM4N2Y1NzliNDZiYWIxNDZmNmE5NTEwZWI2ZjhjODU1NTFjYmQ4NGM3ZGMwZDBiMWMwMTBjY2JhNTk2M2E3ZjM5ZjE4MWU0NGRiYzk4ZTQ5NWFhNjNjMDEwNTljYmU2YTk5YjA3YjQ0OWU3NzU5YzlhZjllMGY4ZDkwNTRhNjdhMzQ4ZmExOWQ3ZjkxZWMwYTRkNGYyYzcwMjZjM2I4NDkyNTlhMzUwNDE3ZmQ4NmNhYjIxNDJlNGNmZTNjMGFmYmYyNTE4MmEyZDUyYmQyZTBiYzkyMGU4NTA4MDgzMmI5MWI5MjdiNjI5NDhhNjdjMzE3ZWIwOTA5MTQ2MWQ0OTNlZWE1ZmZjNDdiZjA4NTU4Mjk2ODI1OGEzYzhkZDgxYTg1ODI3MGJkZGFmZTc5MjU2ODRhMTVmZmI1MWJjZmFhYjkzMWFmYTQ2NWUzMDkwZTg2YmU0MWUzNTQ3Y2JhMjM0Yjg1ZmU3ZGI3MDA0OTZhNTA1MDAyZGYzY2E0ZWFlYzdiOTYyNzhjN2QxYTc3ZGI4MzRhOTE3OTdiYmI4MjZkMDkyYWEyOGI0OTU0NWVkM2IxZWRhMjNiZTExYTNmNTI4Yjk1NWNiMGM0ZmE2NmUxNmU5NTdlNTcwNGNmMzE5ZTVmNzljYzA5ZjJkMDU0ZTZkYWYxOWUyOTI2YjExZTFlNDEzZmY4MjJjYTE0MWY3YzNkMzg1YWU5NWRkMjBiMzQ2ZTU4M2NmYjBjMjI5ZWMzOWNmODg5YTU0MTljZDM3YmMxODRlZjVmYjE0NDYyMjA4MGEzMDJkOWQ3NzQ1YzQ1MWY3ZDg4MjQyY2MyNmI5MTZhMzU2OWFiYzdkMWYyMTZkNTc3OTdhNDcyYmM2MjE3NjE3NThlODQwZWI4ZTI5YmM4ZWZjYjdhYWZjN2NmOGY0ZTU5MzMwZDM1ZWUxMDc0OTZkZWM2ZTcxNGIxZmE0MzA5ODM3YmI0N2ViM2EwNmI0NjA0ZGQyMDczM2NjMGVhYWMyNjQ5ZTE4YzA3MzQyZWY1NWQxOWI4ZDAzOTU5MWFjMjg2OWFjYzM0YjZjM2MxY2EzY2YyNjNmZjg0Y2E0M2E1ZjY0NjViYTM0ODg4YzEwOTAxM2IzMmJmYzBkMGQxNWY1YTc2Y2VjMjcwYWIzYWM5YTEwNjMzMTMxMmY1YTBhODQyODJjM2EzZDRhZWExZTdjZjUzZGJmOGIyNDBiZGQxMTFjMzRkMmE5M2RmZDEyNThmZTkyNjcxMzNmNzU1NGRjYzIxYThmNDM5YzE2NWQKK1NJRzogYTExMWI5NzA2ZDI0MmNkMzZkNmU4NzQxY2JiMDk3YjllMmZmZmE0MGY0M2ZkNmYyZDNkOTE2OTM2NjczMzJiNWYyZGI1ZWUzZWEyMGI4MzI5MWI4NDA1Nzk1Yjc0ZDYzM2Q0NmY0NzVhYjdjNDc2MTcxMTg1MzViODA1MWQ5MDcKKworVFNUOiA2ODgKK1NLOiAgN2QxNDAyM2ViNDhiYmQ0Mzc2NDlhMjQxODc3OTA1YTNjOTMyZjE0NjQwZjI5YTBmYjEzNDExNGU4ZjMzZjU4MgorUEs6ICBlYTVjMTFiNGIyYzVlZjRhYjcwNmNjYTM0NzUwNDNjOTU4MThlYjU2NWE3OTdlMzM2ODhhZmVhY2Q2OGFkY2NhCitNU0c6IDkwMDFkYjMxZjI3OWJlNTA1MzE5YjhlNzJiZGUxMTk5NTEyOTgwZGY2NWYwZDhhOWI0OTMwNDY3NDEzYTk5N2I5N2EzNjJiNTcyYTRiNDRiYzk0MDQ4N2YxOGIyMDhjZTZhYzVjNjg3MTZkM2FmMWJjZWYxNzAzODNiNWM0YjVjNDdlNDQ3Mzc3MjZmOTM4M2JjNGYxNDQ3NjhiZjVjYWZiNGU5ZGZlMzk3NjFlNmVkNDc4OTcxZDFjNzBlNmRhYjJmZDA0OTlkZmY5MjkzYjIzOWQxNmM5NjAyNjFjNjgyMThiOWY1YjFiZWU2OTBmMGQyNDBjMWIzZGI3MTFmOWU4MjFmMDgwOWJiZWI5YWFmMjQ5Y2NiMTY4YzY3ZDk2NTU2MmQyNGY4NDg1MTYxNDBiZmQ5ZmMwNTBkNGYyMGRhNWExNzk0NDY4YTljMDcyNWVhNWM2NjlkNWM2MzBkOTMxMGU1NzQ1MTA3ZGFkMzcyNjFiNWQ5MWUzOGUwODUxMmU2ZjM3M2VjNWRjYWQ1Y2EwOTA3MjkwN2M4ZmI3YmYzYjkyNmMzMzM5NDkwYjNmNTFmNzY0NGU3M2FlMmVjMDFkNjFiZTdjNjUyNjUzNmI0ZmZkMWFiNjg0OWZlMGMyZjQwZDNiZGEyYTQ5ZTU1NTBiOGRmOTc5MDgxZGE4NTE2OGQwZjcxNTgyYjkwMzY3NzUyNmQxZjFiMTUxMWUxMzhiNjg0ZmM0NmFhYzhiZDgwYzNkZWY3ZWU4MTM4MTkwNDYxODA3YzU1MzYxMjVjYjBlMmMzZDA4M2ExODdjNzI2OWNiNTMxZWMzNjc4Nzg3YjMyNTU1Y2YwNGFiMDkzYzkwMDJlN2Q3OTJiNGQ5MzNmMmUzMDcwZjM5YWM4Y2NmOGQ1ZjU0NTVmMTIxMDlkOGE4YWViNGUyMTJmYWQ0YTcwYjE0N2MwNGE3YjkxODQ2MGIxMzE2Mzc2ZTY0MDIwODU5NTE3ZWI3ZWUzMGMyOTBiZThiOGQ2Zjk2NzM5MTUyNTZjM2IwNGI5ZDkwNTRiNTIzMzhlMGQzNjA3ODVlNDZhMTgyODQ0YzVjMzc2NmFlYThlZDMxMWIyZDQ4MWMwYjdiMjExNGU0MThlZDE3ZjhkZWJmMDFhODNmZjM3NTE3MDI0ZWU5ZTI4ZTBjOTBkY2U2ZDA1OWZmZWU0MTNkMjdjZDYyNzgzYThiOGI1MDE2YWQyNzZlMzlkZmQ4ZjhmM2RkZmM0MjgxMDE4MThjZTUwN2YwMDNlYjU4YzlhNWNjOGIxYWZmMDVhYWI4ZjBkN2YxZDFmNmQ0Yjg3MWRiY2VkMWYzZDI4NjYyMzk3NTJmYjEzZjZlMTgwMzRiYjJiNWE2NjM1Y2FhNmVjYzQ2MmUwNThlYmUyZmE2NTFkM2QwZjM2ZTIwYTMxZjc2NWU0Yjk1ODI3MGJkODI1YzY4MThhYWMxYWQ3NTYzMTM1YWVlZGYxNGEyYjZkMzk4YjZlMzQwMDg0MDFiMjE4NDYxODIwMDcxYzVhZjc3ODQ2Y2I5YzMyODE5MGMwNjFkNWFhNmUwZWNkZTdlZjU4NTZiMGU2ODE0ZjgzM2Y3MDQwOTZkZjA4MjVmYTRiNDZkY2RhY2ZhMjdjZDg3YmQ3YmZlZmY3ZjhjYWUxNjZhM2EwNGQ0MzdjN2JlNzE2YzQ5MDQ1YzdiZDNkMTM0OTYyN2M5Y2JkMDRjMTVmMDBhNjk2ZTNjZmZiYjQ1YWYyOTEyMjYyN2U3ZWQzM2I0MjQ5OTEzYmVjMDBmMGUyOGFhMTEyOThjY2U4YjY0OTA4MWZlM2IxNjliNGFhZWFjYTQ4NWJkYQorU0lHOiAzMTMzOWRjZTIzMzM2ZGY1YjJiMTkzNTIyYWEzZGQyZDQxMTRhNjZhZjE2NTYyODljOTUyYmMxMWM5YjIxMGY3N2E1NGQ0NjE2MWY0ZTBjNTJiMzAxM2U0MGI5ZTllODQyN2Q4NTEzMjViZDcxYzRkOTkzNTNlZWVkNzUxMDgwZAorCitUU1Q6IDY4OQorU0s6ICBlODMwNmJhZGE2ZDU1ZWIxODhkOWY3NWM4MTVjYzkxNGU5M2M5YzcyMjIzOTFjMTViYmFlYWY5MzU0NDM3OTM1CitQSzogIGJmMjc5OGI4ZTU1NGY1MWUyMjg2YzMwMzRhODhlNTc3ZmYyM2ZhMzJhNjcyNDRlYTgyNDU5MTJlOGJmNDZkYTQKK01TRzogZDcwNDM4MDljM2UzZGMwMGIxN2VmZDUyYzkxMzBiMTFiNzg2ZjFlMjU3YjVlMjJmODFhN2ZhYWU2MDBiYmNkZmQ1MTg1MzdmZTg1MmM2NDIzNTk3NjJmYjc1ZThhZDg1OTI0OWU2YWI0OWNlMWJiMDRmMjQ5MmYyYWFjMzU0NDZiYTZlYjAzZTc2ZGUzYWJkMmQ1ZmM3ZTYxNDY4NDNhZGQwNDI4NjBhNGExNmI1OWJkZDdkMDM4Mzc4YTM1ZTFhMDRiMTIxN2E1NTcxMGQ5MzdlMmM5MDMyMjMyZWEyY2RkMWQyNWEwYmZmNzFlZjVkM2UwYzA1NmIyOWNiOTJmNmRmNjkyYmRlMTRkZmE1MGUxMzJiZWJkODllOWYxODMzODgwYjY1N2E3ODFlOTRlY2I2MDMwNDE3NTZlNTUxN2Q0NDIzYzU2ZmFkYzEzZTJiMzE4MDg4ZmVkZGYzYjVjODNjMjBiNDZmZGRiYmE5MjMwNWU0ODYwNmRhYjc0OGNlMzg0OGI4NDNmNDcxMWYzNzBjM2VjN2Q1ZTE5YWI0YzBhYzFhZTE1YWFhZjIzZDY1ZmVjZWRhYmMwODA0OWI5ZTI5MTEzZTU3NjFlZDlkMWM2MmViMDc1Y2FiYjI2NzRjZGJlMWUzYTg4OWJhZTRiMWRkMzFiNmE1YjJlYTFiOGRlZGNjM2M1MTVlZGM0NDY3YzMwMjMxMTc2Y2Q0NGJlYzhhMDU3OTUxYWI1Y2QzOWE5NjIzZjhhZjg0NzNjZDI3ZDkzMzAyYmY4YWE2MjRjOWMzYzU3OTlkYTFkYzQ5NDQ5NGVmOGZmMWRiZTAxODdlYTUxNjI2NzBiOGQwOThjM2E5NDkxOTM5OGRhZGY3OWU2YzI0OTFjNDQ0MzkyYzI5Y2Q1MGQ1NzQzNTA2MzI5MDg0MmJmYTBlODUzMGZhZWJjMDA2ZDZlYTc4MDExMTdlMGEzZjAxOWVlMjhmYjM3OTIyMzU0MDJlMmY2OWI4N2E0M2RjMjI3ZjlkZTMxNjAyOTc1NmMzMTY3ZDY0YTNhM2Y2ZDczMTYwMzMxZDVhMThlZWU1YjBlNmUyMmE2NjNlZmRjYzhkNjdhZjNiY2VkMDQxZWE4NDNhNTY0MTYwM2VjNzJlZmQ2NDRlMTczZDE5OWE4YzgzMGIyZWE1ZmVjMDM3ODAyN2MzNzIyNWFmY2I2MDRjNGNkY2Y0MDliZTFjNTA5YzlhMzc3YmUwZDA1MjQxMDdjNmQ5MmI1ZjA5YTI5ZWZiNzEwOTI5NTY3MGJiMWExZGQzZWEwMDhiYjc5MTg1ZjA5Yjk4ZjAyMGM0M2YxNDM5Njg1Yjk2ZjYxOTkzMTFhMDkwODcwZjBkOWIxMGQ0OTVjZDQxMGFhOTViN2U1Mzc0OWJlM2E2YzBmYmM3MjlmOTZjZjg1NjQzOTdiMDljMTM1MTQwMTY4MjVmNzJmMTRlYjkzMjk0ZDcwMTBhY2NmZDExZjE3YTZhYzhmNTQ0MjYzZDYwMzhkNWM3ZGIyOTQ4NjI5MWIzMGVhNDliNmI1NGNmODg4MjZkZDI1MmNkOWRiYjU3ZDg0MWI1YTRjZjcwMmEzMjY0ZmFhNGRjY2M4NmFiMTRkYWYxMjRlZjNkNTMzNWE2ODc4ZDA2NWM2YmEyOTk5MTA0NTc2NWVlNTU0MmNjOWY1ZDlmMzU0ZGNkMmM2ZTBjZjdmZjNhMzBmNjQ5YjU5MTJkOTcxZDYzMzU3OGYxZTlmMjYzODc0ZDA1NjVjMjQ3MzAxZGNiZDE1ZDc2MjExYWUyZDNkNTA2ZmM2NGRlYjdlMDQyNTY1ZDQzOGUyYmZiMjQ5MjQzYjcKK1NJRzogY2M2NjI3MzA4ZTJmNDI0MzgzZmE3MDU5NGY1NzU3OTE2MDA1NDAwMjdhMjc1MTYxOWIyODNhZmZlYWViYzljOWQyOWFjNmRiMjg2ZGQyYzFiNTk2NTg3Yjg3OGQxZGY0NzgxZDQzNmJiNTcwYzFjMGYwZDMzMzY4ZGM2NjUyMGIKKworVFNUOiA2OTAKK1NLOiAgMzYzYzFlYTdjMzJlYTMyOGEwNTVhZjdiZDhiM2JmZDIwNGZiMGJiZDRiZjQyZmZlMjYyZjNhNWViZDU0ZGE1NQorUEs6ICA3YTgzZWNjYTUxZWY2ZTVhYTA0M2E1Y2UwNGQ5Mjg4YWRkNDlhMjc3NTQ4YmQzMDE2YjY5M2ZmYTc5YTIyZWRjCitNU0c6IGM0MWMxZTFmYjc1OTU0YTBhZTBlYmMyOTA5MGI5ZmM1MzNlNjkzZTdjNzEwNWNmZTQwZWY1MjZlNGUxMmE3NDA1MjIxZjIxOGM3YWMwMTllMWQ0YzkyZGEyODUzZjJkNzI2YWE2MjI3NzkyNGRmMGMzNDNmYzNkNDdjZDVhOTlhM2UyNzliMjZhMWIxM2IxZjJhYTM2ZjdjY2I0YjU0ZmJlZjE4YmQ4N2E1NWYxYmM0MGNlN2IyMDI5MTQ1ZWU3YWFiMzkxNzk1YWM2OGRlNjE5OWY1MDU5NGZjNzk2MTFiODUxMzFjMTQzMDIxZjI2ZmEzNThkYTBjN2M2YTY1ZGRlMDc2ZGFiNDg4Njc1YjcyMjMwOWU1ZWQ5NzQ2ZDE4YTg5MzA5OTA2YTdhOWRmMjM3ZGQyN2JkNTkwY2NjNzdjNDAyZWY2ZTE5Y2E2M2NjODZiODUxNjAzMzBlZTZlMWYxZjQ3YTJmZjgwN2VlZmFkYzAwOTYzNTIwYTFjNjAwYTNlNDVhYTdmYjI1NTRmNDdkODk3YmQ4NmQ4MWMzYjA4NzcxMDEyMjJmYTc4NTBiODBjZTNiYzA2YzllNThjMGM5NmUzMmZlYzg1MzBjOWZhMWU0MTYzZjBlZjg0NTY5NTJiZjZkZDU4MDQ1YTM2M2Q2MTg4MGU5YWM5NzZhMzYwM2VmNzdhNGMzOTVlNmEwN2UzNDJmNjAyM2I4YWYxMDIyNWNmZjI0MGVmYzAzNjZhNzk5ZmQ4NmU5ZDA2MjA2MGQ4NzI0MDMzYmRmNjc1ODhjZDczYWMyODRkZTRjNjk0M2NmNDVlZTRmNzVmNTkzN2Q5N2Q3ODEwNWYwYmJlY2UwNGQzZGNiNWU0MjRlZmY4OWI3NzNlNWQ2YjRmMzdlZmE5YTA2NTRjYjNlZjM0NTI3OGE2MmQ4NzZjZmVmOWEzZGNkY2ViNzA4MTQ0MTg3N2ViZDVmYTMwYzlkOTU0ZTM2ODRmYTQ3NmE0ZjQ4NWQ0MjZmZDNjOGMzMmJlYTBmOWNjMjBiMTVlOGZkZmMzY2E0YjMwMmMwNzRmNTA4MTMyZDE1ZGU2MjVjMTBhZTA3Mzc4MTE0NjNkY2M1NWZjYzQwMTRiMjAyMDhmZmZjZWZhOWRkNDUyMTE5YjE2NTJkZTQxMzQ4ZjY5ZjJjNDg4ZjVjYzE4NTZkNmU3OGE1Y2JlM2UzNzNkZDQ1OThlMmQzOWY4NzZlYjk0ZTBiMDFiMjFmYTkxMjllZjQxYjYzOWY0ZTA1ZTY5ZGViMTgzNWVkNDRiOTExMmE2ODYyYTViY2VhMDcyYzZlMWI4ZjBmMDU4ZjQ2YmFjMmE4NDVhNTgyZDE0OGYxNzc2MGI5ZTBhMmJhNjBiYmJmMzg4NGFmOTRkZDRjN2VjOWRiMDhlOWE1YmNjNmRkZTEzNDY0NDJlZTFmNDcwN2QxZjc5YjY5YmE4NjdmNDE4ZGMyNzkxNzNmNzdhZGJjNThhYjg1ZWEzOTNiOWRjNjgyNjE5MDBjMWNhYTgyZDJmNTA0NzRjNDJhZWM5MTEzMTQyNzhjMGFmZmEyYTZiNmMzNmQxZmY4OGYzYjQ5ZmIyYjdjMzM5ZDJhN2MyYjMwNDlmOGMwYTA4ZDE2YTllOGRmOTNkMTMwZGE0ODRiZGJhNmRiZWM1MzRjZDUxMDk3YTA0ODIyMTEwNmJhYjQ4ZDY3Zjk1MWI3NTA1YTE0ODQ4OTJiODU3NzljNWEzMTExNzAyMTI0ZDk1N2FjZjJkYzM1MmVmOWJhMjQ3YmM4MGUyY2U5NjI2OWNlODVlNzhiOWViZGE5ODkwNzZkZDVmZjczZTFlYjI3NWU1ZDcKK1NJRzogNWZkMWU1Zjk5MjJhMTJmNjM2YjcyYTdkNjIxNzA5MWY5NDhhNTViY2IxODI2YjhmY2FmOTlkMjY0MTZjN2FiMTM1MWMxMGY0MDkzZmZkOGEyYWY4NjkxNGEwYTk4MTg0ZWM3ZTA2ZDJkZWU4N2ZkYzBmNGE0N2Y4YzYzY2Y1MDEKKworVFNUOiA2OTEKK1NLOiAgZGIyMjI4ZmZmZmE5ZDI1MzRhZWY5MThmYjg1YjgyMWFkMzYwZTJkMzlkZWM1YWViMmRiMGRmMDI0OTdmOTQxNgorUEs6ICA2ZDAxOTU3NzdmODEwNWZmNTIzYjc5YzU5ZTNjMzA4MWZlODlkYjZmODcwMzNmMDk0ZmE1YTk0MGNlZjg0YmI0CitNU0c6IGZjMDdjZDk5MDQwZjEzZTVhODRmOTQ3NDZkNmJiODY4Zjc1MmI0NDhiNjJkOTk1OTNlZjI5ZTQzY2M4MjQ1ZjA0NzBmNjU1NTJkNjQzMjIwZjY3MTkyODVlMTVjMzdhNmQxNzRhZWY3NjA4OGNjZGE1Zjg4Njg1YjUyZGFlMjg0YzY1YjM4MGRhMzQ1YTJlMWFmMmVkNzY0ODBkMjY5Y2I5MzRiNDMxNzYyMGI3OTJlYmIzOWIyYTY3ODI0N2Q2ZDgxNWYyYTVjYjlhYTU2MGU0YmY2ZGViYTRjMGEwZGRjODJkMGU1YTVhNjVhY2JjNDc4ZTFlYzZiMDY0ZDdiYjczODhhNzNmNmVkYTMwYjBiNmI3M2RkOGY4NzkyNjNhZDFhMDM0ODY3MWRjZjIxMWNiOTZlZDA4ZWQ1MmYzMzE3ZGE2ODE4NWQ2YmIyNTg5ZGMxMWQ3NTVkNDdhM2I2ZjZhMDM4NmE4NTk0ZDk1NzBiMmU5YjBkNGI1ZTEzZGNjZDliYjdhY2JlZjBhYjI3NmE3YWViZTEyOTMxYmU2N2YxMGRlMjY3YTAyOTg5NTMwMWY1NjYyNTMwYWQ4YWIzZDIzMGIzYjZkNzA5M2FjZGZiZjI3NDc1N2E5MDc4ZTIwYzIzYmM4MjJkZWZmYTYxMDA1NDg2MTAyYzAxYWI4MmJkYzhjZGNmMWJiMzdmOWI1NmQzOWU1MGZkNWE2ODk1NDE2ZTc2N2Y0ZTM2YzFhNDE3Nzg5MDgxMjViNWNhM2Y5MmE5MGRhOWFkZGZmMTU1ZmIxZmQ3NzY4ODA4YTgwZjIwM2VkNzM3ZWYwMDc3NjNiZDJmZWE5ZmYyOGM4NGI0MzU1MWM5ZmM0MzhmZmM0N2ZjZmNmNjRkYzc3MDA2MTNhYThiM2FmODYzM2FlOGI2OTg3NDM3YzBhYTQ3ODFiZTFlODIxMzk2YzUzNmNiMzAwNWQwNTU0OWIxY2JhNzAxMzVhZmI3ZmUzMDY4OTYxY2FkM2ExNDYzY2MwYjU1NjA2ODRlMjdiYmE3N2FlZjQxOWQ4MjM4NjhlMGNlYmFkMWYxY2UwYWU5MDI3NDRhMTUyZGQyOTQ1MWExN2UyOGE4OWE3MTU4YTE4MzZlZmNlNGEzZTVjN2QxZmFhNGMzODc1YmM0NmM0ZDliZTIyZDY2ZDM2NmFjNmY1OTUzOGEwMGIyNzViMDJmYWM2ZGE3NTVhODU0MDgxOTk3ZDVkMWQwZTZlNTY4YTU5NThjZjMzNGM1MThjZDUxN2FiOWQ3M2M0OGQ2Y2JjNGFlNGVlYTQzNTMxMTNlN2U0YTdjMDU5MjBlNjg2YmYwN2FmYmZiOGRkMmVjNGYxOGZhNzEzOGU1N2QzMzJjZDdhNDIyOGZlYTczYmMwOTI1MmYyNDQyNzI5NGViZDM2NDVlZTA5OTZjMmU4NTFhOGFhNTFhN2NkOWZjMmVhYjQ3YzBhYjIxM2Y0ZjUxZDIxNjA5MWVkMDg5ZTQ1OTJlOWJiMDgyOGI4NThmODRmNjBiOTNhZDg0YTBhMjI4MjdjYmQyNzQxNGI3ODEzMjJhMDRkMzk2MDgyOGY2MzhkZjI4MzRjN2Y3ODM5ZDcwZGIxMjZiZWU1YWYyZWU3NTU5YThhYzRjMDFhNmMzOTEzOTZhZjkzZmEwNjA4OTQwMjk3ZGRmODkwMGM1ZGRiNDY2MzQwYWU1MWM2MGM3ZWFkNzYyNDQ3ZTc2ZDhiY2NiNTczOTk3Y2Y2NjE0ZDE4OGEwYjlhMmY1NmVlZDliMGY5ZDQ2M2ExOTc4N2Y0MDkyNTgxYTY1YzZiZjc4MWI5M2M1NjA4N2U1NGVlMTM0M2FhYgorU0lHOiA4MjE4OWQzNDBiYzExY2VhYTQwMDQxMGUwOGJhZTlkOTAxYWYwNTkxMjVlOTUzNzg2ZjhhMDQzZGRmMTFmN2IyZjhlM2I2MTdhY2NkNzhlMjkzOWFkZmFiZjJkMjQ3MWZhZmQ2ZjViYzQ1YjE0MDc1YjMyOGUzNGQ4MDc1YjIwNworCitUU1Q6IDY5MgorU0s6ICA2NmI1MGY2OTJlMzk1ZWI4MzM4NmUwMjdjODJjZTNmZGVlM2JkODk5YjBkMzE3OWRiMDg2ZmJmNTI0ZjU3NDU5CitQSzogIDQ0ODUzNmU5ODI0MDg0MzdjZTg5Njc0MDUzZTNjNTg5Yzk4YzA5NWM2MDAyMWExMTgxNzhjNjI2MWQ4ODEwZmUKK01TRzogNzQyOGE5NjQyMTJiY2JlOGRmN2Q1OWU0OGU5MjM0ODBhYTBlZTA5YjkxMGQwNGVmYjY5MDM2NjJlZmMzMTA3YWM4ZmRjMGM1ZjM5MjcyNzQwY2Q4NzdlMTZjZDcxYzU0OTIzOGMzMzcyMjBjZTJmNmI1YTFmYzZmN2IwYTFjZDRlZDIxZDkzODg5MDgxZTM0ZmI3ZmRlY2Y0MTc4YmJkNDMxZTYxMWU1MzlkOTAwYzNkMGFjM2RjNzEwN2IzNmI0MWQ2ZDBkNWQzMmMxOTcyN2Y5MDhiNmViMzY3ZmViYjM1MmE0OTM1ODFmZjEyOGI1NmM0Y2FmNmZiOGUwOTk4MWYwZDM3OTU3ZDEyODIwMTdmYmI4MDc2MTRjMjBmNDY1ZGMwMmIwY2Q5Njk5ODNiZDVhZTFlYmY2NTc4ZDdmZjNjZWZmMzIwZTI1NTYyMTk5ZGVlOTM0NzU3Y2MxZjU4ZDU1NDBjNDFhYWMxY2U0ZjIxMWYwYjhlYzQxMDcxNzQwMzBlNzAyYmM2YThhOWM4NWM1MDVjOTMxNmFlZmVhM2U0MzcyMjQyZGUwMTliMzVlMmJkM2M1YTk1NjUyMTk3MWMxMDZhM2FkYmJjMTNjZGM0ZjdmOWQzYzU4Yjk2YTM0NGI0YWMzZWY2YmQ4YWNhNmVkOTg3NmI0M2U2NDk3ZmFmN2ZhNGNmMjdmYmNiNjY1NzMwYzA5MWUxM2FhZjdlOWVmZTdkZDEwZTE0ZWIxOWE5MjAwNDI0MjEwZWM4YjhmYmE3ZTY5NDQ0Y2UxYTllM2E3YjI2YzExZjZiNzE0NWI2OTgzYTc4MDU3NzY0ODQwMzFiZmY1MmU4MWFlNzY5YjcwYTI4MmIwOTRmZmI1ZmI1NTI1ZGMxYTg3MmUyMDdlODI3YTJlMTFmNGVjZjdiNTMwOGM3NDhhOTI3OGVhN2JkNjYxODgxOTQ0MDA0MzBjOGNkNTk2ZWJiODcyMjFlNTM2ZjZhZmUxZjE1MDVkNmE1OWY0MWQxNmEyZjAxNGUxY2ZhNTEzZjdhNjk3MzFkN2JmZGIyYWZmY2VmZTA1MzdkNDJjNzk2ZTNmZDI3ZTQxYjdjYTcyMDUxYmVmMjhiYjdiZGU3MDEwZGNmZWQ4YWExNmVmNjc2ZGI2ZTUyMGMzY2VmOGQ2ZjU4YTlhMjgxM2NmZjBmNzA0MWY4N2ZiZmI4NDMxZTAyMGVkZTFkNGVhZjE5ZTIzYjk4MzQ0NWM1OTE1YjU0YWRmYjU1N2ZjMjBkMDA1OGY0MGY1ZTA5ODI1ZGJhOGQ4ZjIwYzAwZjQzYjNhZWViYjYxNTdiZTMyZWM1NDYyN2Q1ZDQyYWI4MTNjZjk3ZjA5NWQyNmRiODAzNmMxMmU4MmNiOTYzZTgwMDExNjdlNjFhYjM5M2I0Y2NhNzU1ZWNlYTg2OTk1NGUzMjNmYTUyNjJjNWZkYTNlMGJlOWE1MWU1YWY1MWZhNjQ0NDgyNGZiODM3Y2M2N2JlNTM3YTg3NTY5YzMwY2YwMTE0ZDM5YTAzOTQyZGU0ZTFjZDUyMzM1NWRhYjFhZjM2MDgwYTlhOWE1NDhiZTFjMmE3ZmJlNTQzMzc3MjMxNWQyODNlNTE1NmRmNjQ4YmVlNGI3ZGNkYTc0ZjE1OTA1ZDU0MmJlNTQ4NzNjMTVjNTNmZjQyYWNhYmY4YzU2ZjI1N2Q3NjQ3MjJkYjRlOWM3MThlMTIwOThhMzQ1NzQ4NmE2Yzk0N2FjMmRlMGFmNTNlODJjZjk1MGJiMzdjYTI5YzhkYWRmYTM2NDZkYjQ5ODJhZjU3MmQzOWIyNjhjN2Y5NmIwM2VmNmI2NTNjODc5NDVmMjliYzUKK1NJRzogYmQxM2Y2MzYyYzA3MDc4OTIyZjMwYzYzMzA3NTFiZjZlN2NmNDJhNzY5MTZlZTY1M2ViMTdhY2NmZjFmYmJjYTM1MjU4YzRjYmM1ODJhNWU4Y2M5NGZkMmM3ZWRlYjUzNzYyZjFmYzIzMTIzZDdmNGYxNDU0MDliMzFjZDM4MDIKKworVFNUOiA2OTMKK1NLOiAgNTUzMjhiZTRiMzcwODIyNzMzZmYzOTg5YTZhMzI4MmQ2NWZlOGYyMDdhYjcyNzBkN2MyZTcyN2NhM2NmYWFjNAorUEs6ICA1MThlMDJlZWY1MmY1YWFlYmRlM2QxMDhlYTc5ZWNhZGZjNGQ5OTRjZTE5NTM2MjFlNTRiN2IzYjEyMWZmOGZmCitNU0c6IDZjMjRjOWFmYmJmMTJkY2FlZTZmMTBlNDA4OTI1MmYyYzYwYjJhYjkzYTAyYzE2MDJmYjVkZTRjZTNiZDkyM2ViMDJmZTEwMzlmZGMxNTk5NmE0NDY5MTVlNzY3ZGVlMDE3NmRkZGI3OGU5ZDZiYmYwNjk2NzU3NzVhODI5ZGQ4MDhkMzc2YjBjZjc5MjBiZjFhNjZlMTMwM2JhNTI0MTk3ODVmMjVmMjhiYjMzODk5ZWJkZTg0MGMwYWIxNGI5MTlhNjU4MGNiYWFjM2E4MDU2MjdiOWM0YTc3YmFhMTZmODI1YTllYWMyZDZkMzY0MTY1MTQ5MzM3MGU1MGVlZTk0Yzc0MDQ5NzY0MzY1NjA1YWI0ZGFjMWEwMzAyMjdhMzMwYWExNzhmMmY4ZGEzNzdhZjczZjBiYjA0MGJhYzEyMzY2ZTY1ZTA1OTEwNTVmOWYyM2VhY2EzNWU5Njg4ZDgzN2EzYzBkOTljMTY4ZmQ4ODZhY2M5MjJjZjM3YTcxMThlZjhhNDRiYjBhNGZhNDI4ODA0OTMwOWE3ZGMxYmVkODA2MjFlMTA2M2UzZTU5MmMwZmJhNDJkNzM5OGViMTVmNzQwMjhhYzE1ZDdlZDY1YTYzNjhhMTNiN2Y5NTZkMTk1NDdlYjUwNmNlN2VjOTA3MzRlYjk0OWNmZjFkOThjZTQxNGYxMGFkY2JhOGMwMDczMjAwMTg3NTBhNzFiZDM2ZDNiNmJmZDYxMjcwNTQ1MDhlM2VmNjVkOTk4NDg1MTRkMzNkNjhiNThlM2E0YjIyNGY3OWI2ZTM0ZGQ0ODAzNDA0NjdmZTdmMDI1Y2M4ODIxM2Q4MDhmYmI1YjkxZTJlNDNjZjlkOTUwNjQwNzk4NjU5MjczZDQ3YTI1ZjFmMDEzMmY2ODgyZmFhZGJhZmJhMjhmZWU1ZmExNzI3MmMxYTkwMDExNzJiM2FiNmZmMmMzMTVmMjZjMDc3MzQ0MDViNWVlOGI1ZTRmMDhlMWUzYjhhZWEwMTk0NjdmYjA3MTg4N2YxOTE5MDFhMjFjNTk3NmMxY2E4YWFmMGExZDRhMmU2OThlNzYyM2U5YmJlOWNhMmE2N2ExNTNhMTZmODk1ZTZkZDllYTkyNDQ0MWI0YmQwYjY3NDU1MmUzOThiOGQ5NzAzNDNhOWJjNzc2YTNhM2ZjMWE4NjYwYzU2MjVkNjA4MWI1ZDg3ZjBmOGFjOWYwN2FiNWFiZTc3Y2RiOGUzMGQyZmQxZjZmNDY1MjVjNzVkZDBkZDFjYTMyODFjYzg5MzQ2ZmIzZTZkNzM4OGViZWUxNTRjYjU5YmQ5ZTk1ZWQ2YTQxZDVkZjY2OGI1OWVhMTM3ODY4ZWIxMjBiOGEyY2ZkZjQ2NzQ0MTRmZDI3OTY5OWYyOGI1YTVjY2MyZTJmYzgwMmE0YzllMGI4NWI3NmYyMGY2YmNlMmE0OTU0ODg2ZmM0MDI2NzBhNzFlZmQyNjFmNWRkN2JjYTE2ODg0YTI4N2M2MjJmZDQ0NWY2OGQ0NDE1MWNjMDEzNGIyMjlkYTM4ZGFhYWI4MWI1Yzk2MGQ1NzcwMGNhOTJiMjZkMGIxNDIxMzRjZTk0YjdiZTZjMTg2MTBlYTIxMzZmOGJhODMyOWEyZThjMDAwYjhmMDJmZTA1YmNmNzJjYjcxZjhjNzI1MzVmZmNkODE4ZTM4ZTc5OTJhOGYwYzMyYWM2MjE3N2QxNTIyYWU1NTJjNjBjMWVlNjE2Yjc1ZTRiMzQ0MmU3OTY1N2U0YTMzM2MwYjNkNzQ0ZWFmMjYwZDBjMzM2OTMxNjg2YTZkNjY4YzY0ZmVmNDQwMDUyMzUyYzJiMjU4Y2ZiNjUKK1NJRzogZjU4ZGIxOWZkODM0ZTE1MTk0YzNjMGY4YTZhNTBlYmM0Y2YwNzRlODBlYTJlNzBjZGFmMWUxNjliZDUxZWJkMDk5MGJhZDc3YzRmYTIwOGI4ZGQxZTJjODU3NGMwMWI1ZjU5NmM4ZGZhNmJiOGU2YWUzYTQ3ZmY0MTJlN2UyMDkKKworVFNUOiA2OTQKK1NLOiAgN2RhMDVmMDRlNWQzOGI5ODliODNmNzJmN2FiMjZjMTM4Nzc2NzU4ZjRmNTc3ZTQ5ZGM3M2Q2MDEzZmY0Mzc1OQorUEs6ICBiMWRlNTE2N2Y0ZDMzMDgwNGVlYzllYjU2NWVmNDA1NWYxYjY0ZGQ5NWUxYzliMjdjNjdmZmVmOTE0ODJjY2E4CitNU0c6IGE2YTg2MWQ4OTQ3YzVjZDZhZDA4MTk2MDJlMzJlYTc2ODFjOGY3MzAxMGVlZTU1M2U1ZGVmYmY3OTgyMDk4YjVmN2IzOTkyNGJiNzk1OWFkNjRjMzAzMjZiZWQ1NjBiZjUxZTk5ODNjZGE1ZGZmNGYzMTFlZWEyNGNiZTY4YzYxMDZjZWFjOWI4NDNhYTRlMmFkMWI2ZjhhZTFlNGY5Njg3MWZjMDI1YmU0YTYxNjM4NWZmMmQ0YjdmNTY4MjlhYmVmYWY2YWFjYmI3ODBkNmNiYmM5NTFiNmUwNWE3ODdmODg1ZTMzMjU2MTE2NjVlY2M5MjQyNzRhYTUzMWJjMTMzZjYyYzc2Y2IzYWQxNDhmM2M5NTc5YTgxNWExNDIwMGI3NjQ4ZGFlMGIwN2IzMjdkM2JmY2NkYjZmZTNiNmNiZDcwZWE2NWU2YzBjYzI1MTZhODk2Njk2ZDA3YjJlNzc3MTNiMGJlZTNiOTJmYjFiNmY3NWIwODIwYTVjYjYyYzVmZTYyMDQwMDM5NDNlMjQ4NTcxNjZmYmRmNTcxZjExNWQ0NWY0MmU3NTkwMWRmOGIxMmMzMjYxOGFhY2IwZDI0Mjg2YzhkMzAzOTYwNTFmYzI3MmFhMTdmNGQyZDQ3NDYxMTUyYWFjZDNmYWEyYjdiMjA4MzEyMjc4ZTgwOTI0MDU5MmQxZDFhYTU4NWM1NjI4MGU2NmZmZDkyYjU3MTdkMGNkMWViOWZiNzQwMWRlZjg3OTQ4N2MzNzRlNWM1MzBiNmZlYmY5MTExMjI1NzRkMjRmZTEwNGI0ZjQ1YzdjNjAxZTZjOTE3ZDNjMTg4MmMxYWQzYzU1NWQ4ZjJjZTk1NWI1YTEwZGIwZDVhOGI4YWM3YTYyNjZiMmU2YjI3YWQwZWUzNGY0N2FkODU3MzY3ZDUyZjcwOTZkNGJhY2VmMGU0NjcyNTQ4ODQyNGI5M2I4OWFjZDQyOWZmYjVlZjMzYTBiMDgxZGQwOTQ3OTY3OTE5NjAyM2MzOTY3ZjQ0YWQ0MWViMWEyMzk1NTI3ZmQzYjc5NzY4ZjFiODg1ZjA0MjliNDk1YWI2MDUyNTY5MWJlODQ2NTA2MzJhMmY2NmNiNjNhZDViZjJmNmFlNzBiNjY4YzVhMTkzZjc0OTlmYzRmYzQyY2Y4Y2IzMDhjZTUwMjlhNTAyN2JhYmVmNTVkMTkyNWVjZmJhOWYyN2ViNjA4MTYxOWVkMGRmODU2OWZkODBlOWRhMTA0ZGIzOWI1YjgxNDBiZmViZWJkMjkwODU0NDAwNjU4MTlkZWJhOGQ0NjlhZThiM2VhNmQzYmFjNTg5MWY5YTRkZGZiN2YxZjA2ZDEzYzMxYTA3ZWU1M2ZiNTRiYzk3YmQwODY5NjM5NGMzOGU3ZjM2ODBjMGYwMmY5NzVmNDY5OTIxMTQ3YTQwOTg1OTA5NzgxM2I0YzNmYTQzZDE3NGFjNDAyZjFhNTI4Y2I1ZmM0YjgwNzUxODQzMmVmZjMzNDA3YTExMWNhM2EzZDdlOWU4NDEzNWFiYWM4YThmNTJlYTYzMWM4NmQ3NGExYzZlNTc0OWVkZDE0OTFjMDAyNGU3ZGU3ZmU1Mjg1NjgyOWI3MmZkMTNkYTYzYTFhMjM0MzM0OWRmNjYyYWIzMTYzNTM2MDMyMzQ2ZTUzNDdmMDQzZmZmNTI4YmY2NzE1MDkyMmZmZjIwMjZiYWI3NDJkYjljYWU3Y2IyZTNjNzQ1ODA3MTk2NTJjMjg0NDdjNWUyMDk4MjMxNzk3ZWU2ZWYxMjMxZjU3OTIwNTRiYzMzNTlhMzJjODZkMmY5NGY4NWZhN2Q0YTc0MTlkZDI0MWZmNjYyYQorU0lHOiAwNWYxMTdmOWJjM2VhNTVkNDU1ZTllZjEzNWU5MmU3NjY1ZDE4MDcwZDhmNWUzNzVkZjY3YmUxODE3Y2UxNDM1N2E1NWU3MDE2NmYzMjZiNzdkODUyNDMyMjdjZjY3ZDhmMmUwYmY4NDQwY2FiZmIwNTI3NWIzNzNmMWUxMTkwZQorCitUU1Q6IDY5NQorU0s6ICAxYjhlYzY1ODgwZWRiZjAzOWExM2U5NzBiMTVhYTY3ZTE5MmFhMDJjYTY1Y2ZmOWFkYTE3ZDQ1NThmNDAxMzdkCitQSzogIDEyYzExOTFlNGRlM2JkNDRkMDM5MDcwMTUzYWRiN2I1ODFmNjAwZTlhMWRkNjlhYTg5ZjI3N2M3MDY5ZTc2ZjgKK01TRzogMzdmMThiN2Y2NGM1MTMzNDc5ZDZkYWUzYmVmNjc5Y2RjMjFlY2UzZjViNTc5YTZhOWMzZmEyZTU5ZTliZTg3ZDIwMDlmNzRlMWNmZGFjY2IxY2UzN2QwMDcwMjM2OWJkMTY5ZDk0ZmRjZjg1YWY5ZmEzMjE3ZDI3ZTZlZDZkMWQ4ZTVkZjc2MTVlOGUzN2VhNTVkZTFmZDBiMDZkNzdiNGM4M2I5MjlkODA1ODZmYTA2OTRiZTcyZWM4YjM2NWFkMmNiY2RkMmIxYWQ4Y2Y3ZjAzNmRmYTRkYWExYTkwMzZjZGIxMjA0MzIyMjdiMWYwN2I4ODY2YjEyMjEyMDMwOWViOTE0YWI4NGNkZGViYTFkZWM0OGFiOTI2MzY3Mjg1ODhmZWRiM2FhYWQ3ZTdkYmIyYWMzMGU2M2M2ZjVmOTBmYzZjZTYyZDZkM2JkODhiMGQ1YWFjZmE2MWRlOWYzMjY3YjMwMDkxN2I1N2E0ODAzNmFiMjBjOWEwNTQ0NmI4NzY3NDk0YWYyNDllN2RlN2JjNTA3YTIyMDdjYzk1NmY3MTg0NTU1YTdkNWQ4ODgzYmI0YjNlOTNmMmRjZmM1N2IwZGE4NjM4NjU4ZGNkY2U4ODVkNDRkOWNjNjhiMWQ4MTcwYTM2NzdjYzVlNTBjYmYzM2Q1NDNlYmFlNDQ3N2Q5MjM5Y2Y4MzM4NGVjNTliNDIzM2U4ZmYzMzQzZjA2ZjMwMTg3NzcyOWE1M2Q0MjBiZjAxYzYyZTY2YWI3ZmU1NWRkODdlZTgyM2E1OGZjYjg3ODcwZTFmNTJlODc5MTc3Y2Q0MzljNTMzZjVhMjIzZTVhMzQzNmZlOWQ2NDI2NTQ4ZGFjZmM4NmEwODQ2ZDNlZDIzYWMwNDI1NjNlODg3ZmY0NmFhZDAwNWY0ZTFkZWUzZWUwZWU0YzI3YTcyNTE3MDlhZTQwYWJjNWUyNTY4NjRlNDc4NWE0ZWRkOGIyYWRmMWJjNWI0MDE4ZTI4ZDBiMTc1ODY3YjAyZDA1MmE2ZTE3ZTQxMWEzZDhiZWIyYTQyMDhiNzZjYzYyMWZkMThiZTE0OGUyMzVkNTVhYTcxMjc3MDY1NTdkZWMwNTNhMTNmMWE0N2RmZGE0MDViM2ZlNWJkMjhlZjVkMzQ4NjE5ZjUxZTU5NWVmNTA1NWY4MzllZmFmMTEwZTQ5MDE2MzFhYzMxYTAyZjRmN2VlNDI0YTNhMmMzZTAwZDI2MDJkMmNjMWU0OTI5MDZlZWE0MjBhOTI2ODIzOGFjNjYyMmEwODk3NGU1NzMwMjkyZTZlZDUxMDI1NmVmZGU2NjdlMGQ5YTBmZjIyMTNmNTQxMjBjY2Q4MWZmYWE2YjdjYzQ4MTQxYTJiNzI5ODUyYWY1ODNkMjZhYTUxZmJkZTY3YmU0ZGYxNGU1MjBjMjI1N2E3M2M1YzJlM2MzZDg3ZGZiMjUzNjExNzVmZDE4YWJkN2U5OWFhMDliODVmODhmMTljOGQ4MmQ0NTg1OGYzMTQ0YzVkZmI3YTQ5ZWRlNDViNGVmZDg3MTA1OTJhMzcyMDYzNmU3ZTg4OWM3ZTIyYWQxM2IyZDQ0YmI3ZTJiNDdiMjk2M2E1ZmEzZjI1NTdiODViYzBjNjkzZGUzZDIyZWY5NDY0ZjdiODE0YTIwYTQ2NzZhZDI2ZmNhYTAzNTQ0YzZhYWQ0MTI4MzA5NWZjZDEyMTBhYThjYzAyOWZmNWEyNjAwNWE4OTEyMjZjMjk4ZTk0YTUyYWE3MTMzOTEzZWM5ZDIyYTViMmFjMGJjNmYxNWIyNTFkMGI5Mzg4OTIxM2NkMWIxZTVjNmZkMDhmMWE4ZjVjYmQ0MjE1MzI5YTMKK1NJRzogYmZmMjY5YTM1ZDZjOGU1NTJjZTcxNmQxNjM4MTgxY2U4NTgzYjQ1YzBlYzU5M2I0ZTU4YzQwYWM3NmU3Zjg1Y2ExZGFmZmZkNjg1NDFlNjIzYTFlMzVhN2MwOTcyNjg4YjI1ZWVkNzJmNGRhNTdlY2ExNjg1N2E4MjYzY2FhMGIKKworVFNUOiA2OTYKK1NLOiAgZTc1Mzg4MDI2YTZhNmQ2YzZkMTk5ZTM2Mjk5M2E1YjEwNDQ5MDFlMThhNzZjMmZhYzcyNjFhNmQxYzE5YTRmMworUEs6ICBiOWNlMTQyNTFjMGNkZjNiZGRiMjA2ZGM2YjhiMmI3ZjViN2U0ZGQxYmUyY2UxODYzZmYxODgwNmFlMDBmMWVlCitNU0c6IGI5OWNkYzg0NzIxMWMwNjY0MmRkMTExYmM1ZTBiZWNhNTNhNzRmZmJhMmUzYWM5M2FmYjRiMDk0NzUxOGU4MzIzNTI3MzMwYTRlZmVmYmU0YmFmYTAwYmFmZWNiNDM0YWIxZTViN2NlNjU2NTZmN2E0ZmQ4NTZhYTZjMzg1ZWQ4ZDdiZDYyODU1ODBkN2RkNjA4ODJlNjljMTlkYTA3NjkwOWQ2NDdkZTA5NWE4MGU5OGFkODliODE0YWFkY2JiZjZmMDMzYzQ5MjAyZjY1NmMwOTEwNTAzOTU5Y2Y5N2NkMGZhODJkNWY2ZDIyZmJhMzM4OTk1MTI5NGM0ZjdjZGMyMWViODI0NGJkNjU2MDYzN2E1ZWNhNjJhOGViYTFmNGE5MzNkMTg3YTc1Zjg2NzExNjQzYWYzNTg4MzFjOGMxNmE5YTBmMDllMjUzYjIzOTVlOWNiMzcxNjExZWVjZGQ2NmI0YWI1MjFhYTk0YjNmMjAyMzdlYWU0MWNkMTBjNWUyMWE0NTJkNDhlNzQ4MTg3ZjM1NGE2N2FkZjY4MWIwZmU2MWNkYWVjOTRhNWVhZjAxMjY5ZmNlYjU3MGQ1MTRmZjNjNTVmZjFkYmEyZmQyZGYxN2Y4NmE4YWViNzQ3ODM4MTEzZGVlOTRhNDNiMTM4NGNiZTEzM2NkZjY0MjdlOGQxMjJlNGU5MzM3MDRkYTZlMjZjZmNlZTk3ZmUzZjYyOWI2MGI5MWIyZGQ4NjM4NjdmYTc5ODAxZTJiOTE2ZWM0YzBmYjYyZTA3MTU5NDIxZTY1Nzk3NDMwN2ExZDAyZjdmMmVkNDcyNGE4YjUyMWE4NjFmNTVmMzU1MjFlOGIyZTFhODQ5MDRjNDI4Y2ZjNWI2MDE0YmIwZjhiYTg0MzRjMjIwOWJkNDBhY2EzMTEzMGRiOTc3NDMzMzM1OTdkMjM1MWQ1ZjY4MTE3NDFmNjI2ODg5NzNiZDc3M2QzMDI2NmZkMWVmYmQ4OWQ0N2E5NjRmOWQwMTk5NzE1M2QwODdkOTI2OTY2MTZkZDEwM2E5MzRjY2JhYzRjMWQxNDJmMjA3NWQ0ZTIyYzNkYTRhMGU5NzNiMjM4NjMxOTYyODdiNzkxNzRmYTI5NzU1ZmM2ZDliNWUxMDBhY2UwYTQ1OTc1ZTUwM2IyNTRkM2YxOTVjMjYxNzEwOTEwZmVmMTA2ODkyYzA4YmIyOTZkMjMwY2RlYTlmNWExMWY5MWFjYWE2ZTdjMDVlOTJjMjgxZDJiMzE1NWZlNDQ4MGIwYWE1ZTBkYjQxZDEwZTA1Y2ZkZWZhNDM2NDA1MWNiNzU1ZGM3MmZmYTk3OGMwMGI5NGE1ZjIxMmRjNjkxZjgzOWI0OWRlOTdlMDEzOWQ2NWU4ZDczYjJiMjg5YjI2YTEyYzZjY2Q4ZWRjMDRhZGI0NTJhZjdmZjA5NGFhOTAxZWFmNTc2NTFlYjFiODdiODMzZDBhMDliNGE0YTY0NjJmNDA2NjQ2MjM3NjllOTUwNzlmM2M5NjI4NTBjYzNiNDAxYmIwMDU4Yjg0NzViMTBjODYyZjMyZjMwMGEyYjE0M2IzZGVhMjY5ZGRjYmVhN2JlN2RkMjQyNmQwZDQyMDRlYjY2YTM5ZjEzMTg4MjJkY2I5YzU2MTM5ODYzN2Y0YWI4ZGUxOTY3NjhhY2U3NGYzNDhjMDEyZGQxYmFiZWMxN2Y1MzAwZmZlMGQ3YWFhZWFmZWY3ZGI2NTBhOGYyZjMwOWE5NzkzZjUyYzY4NWM3ZTFkNTEzMzI3NDkxNTc4NDg5OWM0ODFkNDg1YzliZDMwZTk5ZmNkYzk3ZDk2ZWYwNzQ4N2RhNjYzYmVmZTY4Mjk5ZGYKK1NJRzogNmQwZjgzZDljNTVkODRiY2Y5YTg2MTQ3ZDliNmJhOWFkNTM3ODMyZmQwZjk5ZGFlN2U3MmM4MTM5YWZjYjMwYzdiMjRmNmIyOTJlMzJmOTg0NzA5NzU1MWI3ZmJmZDUxMGM4NGU4OWJlOTgyNTQ0NDE0NTdiZDA4ZTVmMDUzMDIKKworVFNUOiA2OTcKK1NLOiAgNWIzMjNmYzAxYTE2YzQ1ZDEwNjQ2NjdkMmVhNGE3ZWE1OWQyMDM0MjU2MmQxMmZiYzU5OGQ1YWE3MzAwNjg4ZQorUEs6ICBkNDE0MWI0NTVkMzAxNjQyYmFkYTI4MTRhZmNiMTYyMGQ1ZWI1NmQ5MmIxMTg1ZmU1ZGFkZWY1NTk2MjVmYTcxCitNU0c6IGFkMjQ2NjllZjU1YzU0MGE4ZWQxNjJjZTFkMjhmMDE3NjBhNjA3MTlhMDM3NzMzNmViMDBiMWVjYmU2ZjYxNjAxY2Q1NjRmOTJjOTU2ODA0ZjliZWQ0ZTE0NzZiOTRlNWVhOGNjYTgwY2I0OWEzMDRlZjg1MWY3ZjY3NWFiZTU4ZTY2ODFkYzAxMmFkNTVlNTFiMDIxZDk4Mjg1NjlkMGJjYzllMDUyN2EzZmMwM2M4OTFkMTdhOTBlNjMzN2ExZWE2N2YyZjA4ODEwNTg3NjkzODM3MDgxZTRjMDhhM2Q3MmM1MzZjMjE0MGRhMjAwYmE0NTZjMzc2ZjYxZDA1NjUxZjBjNWYzOTU3MTFmNDFjMGQ2ZWFlOThjOTA2NzY0ZDFlYmVmM2Y5MDQ2Y2I3Yzg2MjI2NDBmY2FmYWZiZmI4ZjYyZTFjZDMyYzY2ZWUxYzU1NTA5NDg5YTUzOGFiNjEyOTk5ZTc5OTdiNzc5YzY0MjJlZmYxMDlkYTRkZjgyOTIwOTMwZDhkMzYzZDc4MzA5MDg3OTVhMzg4OGYyNWQ2NjdlMTRkMTU1ZWQ0NDU4MWJlNDMwZjc5NzNiNTc0ZTJiYzBiMTM0Y2YxMzlmYjRiYjAxZGJkYTQxYjY3Yjk4MTQ3ZDgwMTJmNDA2NzdmNGI4MGNlNGE1MzRjOTBhZGVhYmY0ODRiMjFmYTk5NGI3YTE3NWY4YThiOGE0MDc1NTY0NDc4ZGRiMDUwMjQ1ODBiYWIwMzhjZDllYWExZGZkYTU1MmZiMzEyMjk0MjliNjE0ZmExZDgwYzUyNjE0ZTg0ZmFhMjIxN2YyNjBmZjdjY2VhOGM3YjA2ZTNkNzdmZjg3NGViODFmYzg1OTdlNWZjZGNlYzk1MWI1ZmU2NGExYWY4NmU3MzE5M2E4ODI0NjllYjNiYTNjMzgyNzM0YjI4ODdiNDE5MzE2ZWE0NDhhZmMyODI0NzhjMjVmN2JjYTE4NDI5Y2JiZmZkODg3MTE3N2M1ZWNjN2Q4YWE5YTFiOWVjODcxOTJkMjlhNTI1MzljMDgxYzM1OTMzMzI0NDRjYmU2Njg3MmNmM2QwZTE5NzI5MmI4MmIwYmU1ZmNkODU4Y2Q2Y2E0OGI1M2VlNWI2MTY0MWJjYWFmMzFkODE5YzdlMWNlZGFmOWVlNmIwN2UwOWNhZWRmYjMwYjkyMDRhMWQ0ZGRiNzA1NjBjYmUxZWIwYzBlYzQzZjFkMTc4MjAxYjI5MDgxOWZjZGM5MmM2M2UwZGI2MGZiODdkZmYwMGU1MTI2NDhjODk1OGE4NDdlZmMzNjM0NjA3M2YxYTRmMWYyMzE3MDYwZjFjNTQzZTZmMDFiNDI0ODViZWViNTZjYWIzYmFiMjZlNmEwY2E2OTM1ODAyYzc2MmI3OTkxNTllMzIwZjM2YjVlODNkNGFjYTg5NjJhYTJjM2MyYjdhMzg3MGU5ZTA0NzMxZjM5NDhjZjk0MWUyMWQ1MDk2NGU1ZDYzNWEzNWE1M2UyOTk4MTFiOGNhZGZjYjQ0MTZjNTc1OThhM2ZkMDU0MTA5MTBkYmMwZWEyYzc4ZmRiOTI1NzQ5OTdkNTg3OTYyNzllYWFhNzhiMzZkY2VmMWM5YTEyOWVlZmY4MjM5OWEyNmQwMDhmZmEzYmYwNDE4ZmY3ZDM5YjY0MjdmMzQxODk1MDI0ZDE2ZTIyYTBjNjJhODJiZWJhMmUyYmFjMjNkZWUxOGNmY2Q1ZGIyMzk3ZjM3OGM1MzY3MzA5MDgyYzQ0ZWI0M2NlZGMxNTIyMDI1M2E2MjMyMDM5OTY2NWY3MTM0OWNjMWI5NDRmNThjNzNhMTBhMGJiZmQ0Y2FmMTI4OTFlMworU0lHOiBlMmVmZjYwN2YwMjI3YTI5ZDU4MmQ2OWYzNDU4YWNhZGQzMjI2ZmNlYWFjMGFiYmRhZWQ1MjY3NWM1MTYzMDA3M2NkM2E5MDE3MDdlY2YwNWU4OTNmMmMzNmRhYWYwY2M0OTAxMTE2OTQ2YjU3NzBkYzAzODEyNWY2ZDEzMWIwOQorCitUU1Q6IDY5OAorU0s6ICBiZTFjMTEyZjc4Y2YxM2FlZmM1Y2U3ZTMzNzY0YWNhNDQ4MWY5Zjg4YjAxOGUxMjJkYjlmOGRhYzE0NjI0NjA1CitQSzogIGFlMzg5OTM2YmJmNmQxNmUzYzFlZWI2NDc0Mjk4OTcwODY2ZTEyZWM5YzFkNmFlYTJmZDlkYjZiNTZhYTU5YzQKK01TRzogZDc3ZjlhZWVhMGZlOThlZDdmYjc0ZDU4MmE0MDJiY2I3OTMxNDc0YjRhOTVkNTIzZjNmYjc2OWZiNzA5N2QyYmU0YzZlYzEwNTIxNDAxNjMyMjI1NTNhYThmNGY4OWU0MjE3MzAwMTRlYzczNDY5NzIwY2VhOTY3Zjg4YjZhNDhkMDJhMmRkYzFhMTIxZmRmZmI4YWUxMjc3MzhlMjkzYzRkNmIxYjc0YWQwMzg0NGRlNmJmZTgyMTUwNmIzYTdhODFkMTljMzdhN2YwMWNhNDgxNDcxMjE5ZWZlMmE3YjkyYzRiZDJhYzA3NzQzYjQ5NzU2OTY0NDE3MTRiODRkNjNjNTQ5ZDdhNmZiNjFmMTZmYmNkYjcyYjkxNGQ3ODgyZDA5MWY5NzA2ZGEzOGMxYTgxYTFjNmE0MGZiZWMwZDhlMjM4YjVkNTZkNDYwZTkwOWY4NTQ3OWY3YWQ4YjExOWYzNTQ1NWUzNDAxMGNhYTdlNWQwMWYzOGUzMDFhZDM3ZTgwMDVmNmVkMjllNGExMDJkYjNmNjFkODQwOTNmNzhjNDlhOTY0OGM5NzdiZjRkNWI2ODlmNzFmNDA2ZjhhZDdiOWFlYjFhZTIyMTMzYTg0Y2UxYjI3OGIyY2RkZTQ2NTkwMWIyM2ExNzlkMDcyYTgwODc5ZDBhMjRkMmFmMTk3YjMyMmEwN2JmNWQ0MGVlYWIzYWYxMjExN2YxMzAyMWRmYzE2ODFhYmE1YzA4M2YyNTk2ZTM3ZjExMjM0MjJiYmRjYTNiMmMzMmNiNTk0ZjU2YzMyNWUwYzU2NGExNzMzMjg4MDUzNDU5YzYyNDg4OTI1Y2Q4MGU3Yzk0NGRiOTk4YzNjN2JlNTQ2YmY4OWQ3YTUxMWNjZGJhNGI4MDllZWUwZmMyODczZGFkNzJiNGNmM2JhMDUxMjg5YmIzZjRlOTkyNTczMmU0NWFlNzc0MTA1OGM4ZmQxMTU5OWRkODQzOTI3ZTNkMTQ1OThiYjgzMDUyZDMzNTY5Y2ZiMDJhZjBjODhmYTdhZWE0YmI0Njg0MWNkMmRkYmRmNTk4OGZjZjMyNWZmMTA0YTVkZmM0YTMwZDI2OWQyYTk0OTczMGMzNjEzYmRkZDM2NzNiNDJmNjA5MGU2YTYwZTRhMjUzMDYyNDYzYTY1ZDdlN2ZjMDAzMGJiYTc2OWNhMzQ0YmZhOWFjODIzZjU4Y2I1Y2VlOGE1ZmMwY2EzNzIyOGRlNWE0ZDkzZTBlY2Y3ZjEwODIxNjU5YTIyNjFmN2VmMTU5NmVkYTRlNDExY2YzYzk2NjlkODFkZTc0NTQ3Y2U0YmY4MzNlYjQzMmYzODVjZTkwMzhmZTg0OGE4Yzk2ZGE3ZjAxZmQ5NWJlYTA2ZDFkNzQ3YzhhZTczNjQ5NWJiYTIyODViZTVjMzJhZmVhNDQ5NTIwY2ZlOGUxY2UyNWY5MDc3ZWQwZWMwZjY1OThhOWI4ZjczODZmMTUzNTgxNzBjY2VmYzNkNWZmYjAwOTI4ODE1NGRlODc3YzI0MDlhZTVmZDhmZWYwMDkzZjFjMzZiM2E4ZjU0NzQzMmNkMGY2MmM0MDMzMjQyYWQ5OTIxYThmMTFjMDBmMzY2ZGE5Mzk2OTMwYTgwYzk5N2RmNDI5YTRmNWY0ZTQ1YzdhNmQ3ZTAyYWYwMzMxODY3NTdjNzNjYmU2NGQyZDRlNzhlYWFmZTI3NTM5NTI4MDM1ZjJjZmNmOGVhZjBhNDJiZDI1Zjg4YjJmYzY5ZTQyNjY4ZmFlNjY3N2M5YWM5MDkxZDlkMTVhNDFmM2FjZTY1ZDkwYTAyMjk4NzNkY2YyNTQyNTZjY2E0NDllZDRjMTdkNTQzNWJhZTQKK1NJRzogZjVmYzVhY2IxN2U5OTU3ZWEzMDRmMTIzYjY1MGUxNDRjOWU0Mzc3MjgzNTA5ZDQzMWRhNmEyYmJkNTI3YmViMzgyYzlmNTg3NDVhM2U1NmRjYzY1NWJkMmViYjdhZWVmYzkzZWRjM2YyMGQ4ZDNjMzc5MjMwMzFlZWMwY2I0MDcKKworVFNUOiA2OTkKK1NLOiAgYmQ4NTIzZWRhODk5Yjk4NDIzMGUzMjg4NzViOTY3MmVkYzlmY2QyNGVhNWNjMTJkN2I1NzJkYTRiZTAxZmI3YgorUEs6ICAwMmI3MzRlYmJlODhjMTNiZmE5NWE1ZDk2NGZjN2VmOWQzOTViZDYzMDNmMDY1ZGM0ZWUxN2IzYWMxNTQ4YjdiCitNU0c6IDE2YzIxNmM5YmU5ZjBkNGIxMTU0MTBiZGZkMTU5M2M4ZTI2MjIyMWFiOTdhMmEzOTVhMTIxOThmOTVjMzAyMDViMDg5NjJkNDg5MzExOGJhOWZmOTlhYjFjN2E2ZTFmMmYxNzUxOTEwNzBhYzk0NTMyN2FkNmM0NzBiYWJmNzkyOGIwN2RkNzg4Yzg1YjY0YjcxMmUwYWFlNmMwZWEyMDI4MWU0MmZkNTYxZTgzZTNmYmFjNjdmMTQwMDBlZTU2ZDk4MWQyYTJmMGI5Y2EwMGE5ZWE0N2NhMmY2ZmM4ZGNhMTAzNWZjZWIxNDJjM2YyNmYyMGUzYzczMjIwN2ZmZmYxMWI3OTY5NWJkYWZhNDE1MjE0YTQ0OTkzMDIzMjY2MDVjZjBiOGM4MmYyYjExMzkyZWNjOTBjZDc0YTdiNDExYjZkOTA3YTNkNWMxMzBjODc5YjdjZjg4MGYyMmJiZDdmMGU5NTkzMzcxOGU5NmQ3ZDE2Y2FlYTlmMmMzOWU4OWIxM2NkNTIyNjYyNzM2MDRhOTZiNTFkNmUzNGY3MDY3MzVkZGQ5ZmNhNDRkMDljZDg2YmI3MjE3NjAwZTBkMzRkNDE2YWMyNDlmMmU0MWJkMGY0YWJjYmQyNTgwYWRhZTIxZDdlYmE1ZmE0NGYzOWQ3ODBmMTdlYjg1Y2NiZWY1OGZlZjkwM2EyODBkOTVmOGYzMjEwNzg5ZmExMmUxMjBlMjFiNmU4Y2FkOTE3ODM1YmJkY2MzYjA3ZTg0NjkzOTU0ZTIzYTk0Zjk5ZjkzN2RkYjBkNGExOGQ0MmMzZWE4ZmNhN2QxZWE2ZWQ1M2EwMDI0NmY5OWVhNTIwZTY0MDViZDJhYTU0OWIwNmU3ZGE3MjJjMWJhNzRhYTFjMTM2ZThlYTU4YmFhZjhkMzc2NTg2OTNmM2UwYjQ0ZjYzMWRkNmQwOGZmZGY0ZjA5MTg5ZDMwMzVhM2YwMzQ2OGUyOTY5NmVmMDVlMDJjYzFhYWJmZWNiZGEyMzAxYjU0MGNiMGViMGE3NWJjY2U3M2RiOTI3M2E5MTYxYTk4YWQ4OThmY2Q2NTc5ZmI3ZTRiMzI3OTU0NGYyZTBiZDc3NGRkMWE4MTU3ZGFhODhhNzAzMjExNjc3MDNjNjBhNjA4YTRiNTQyMTY1OTAzNzVlNTk3ZmUyMWFlYTk3YjUyMTg1ZDBlMzdhNTNiNjM4OGE3MDdhMmJjMjRhY2Y5NDQyNWY4NGYzZDU2YmM5ZjdlZTc0MTJhOWUxODMzYWQ1NWI3ZWFlNmRhNTgxNjk4MTY2MzgzYTJlYmE4YjZmNTM5MjBmNTE3YTVjODBiZDNlMDNmYWFkNDA4N2UzZWU4ZmVjOWE3OWEwMWM3Nzk1MTIxMzNkN2I2ZTVmMWRlYzc2NjMwMGRjNDA1Y2MyMWE4YzU4M2ZiNzNiYzkwY2YyNDM4NWIwODYwNDlkM2JmMjBjMzAwOTgzYzBiMzUxNTM4ZGNjYjIyN2ExNGZhZmQyM2FjNGIyNmJlODFhMmIxMjBjZjIxNmZjNTgzNTRmOWRjYmYwNWY2NjMzOWFkNmRkYzJjYWMxNDY3N2I5MGUyNDdlYmI2YzVjMjI5MDA3ZGM2MGYzNzRhMDZkNDA0ZWIyM2ViMWVjNDk5MDdjNmU4ODE2MjllMTg2NzI2OGNhNmZmZmE1OWFhM2NhOGY2YzI5NTE2MmI5NTM2YzJiZTIyYmJlM2I3MjM4MGVmMTFiNjFiMzU3YTYyNTMxMDBlMzBhNTg2ODE4YmEwMDNmYTNmZmQxZmM5MTk4ODFjMDUwMjJmOTQ4NDg1OThmMjE3ZmVhMjIyNTA3MjIwZDEwOGEyOGZjN2JjMzlhOGExMWMKK1NJRzogZmNmY2RiMDg4ZGNiZDBhNTFiZDMwMWUzZTE1NjE2NzE5MzVkOGI2ZjcxOWM1ZDkyNjkwNjQwZDNjOTFlNzc1YmY0MDU0MTMyZWZjMDVhMjEyMmZjMjA5ZGIzYzMzNDMyMzNmZjhhZWNlYmQ1MmRhYTJiM2IyMWVlYjE1ZmQxMDIKKworVFNUOiA3MDAKK1NLOiAgMzNhODVhZTE1MGJiZjU1MmY0MTY2M2IyMTUyMWMyOTZkMjQ2ZGQ2Y2Y4MTk1ZGY4NTFjNjk1YmQxNWY0YTUwMgorUEs6ICBjOGM5YzQyNTIxMDA4ZDVlZmZmNTc2YzdlNGE1NjA4M2NlZDlhOTI4ZGE2ZmQ1Y2Y5M2ZkYTU3MmE1YTJkMGMwCitNU0c6IDkzN2UwNWYyZjFmZGJkNDE3MzE1NTNlNzdjZjE4MWI1MDc5NzU4OTQwYWVlOGU5MjYyM2ZiMWQ1ZjA3MTI4YjdkN2YxN2U0ODQyNzA3YTU2MmM0NWJhNjkyNjRjMGY3MzBhODIxYzdkYjZiZjgyOTkwZGM2NTEyNjliMjk2YzMzNTE3OTExMzA1M2Q2Zjg1YmIwOTZiMjkxMTE2NWZhMzkwMGNiMTAyNDE2NDg3YmE4MDc4Njc5YzZiMzM2ZGZmMzg3NjNjMDhkY2QyMGZhNjZkZGE0NWM1NzVkZjE1MGQ4NTExNjVhNDgwNDk3MzgzMGY0MzZkZjYwYjgxMzE5ZjljZmI1NjRjMDY1Mjg5NmVkNWYxODQ5Y2IzMzU0ZjUwZjAwMTJmMjg2ZThhMzBjMjEzNTI4NjkzNDc0MDA0ZTg1MDQwMTJiOTQ1NTYwYzA3NGE2YTE2MzQzMmNmNGFjNGJhNzE3NWNmMjYwMDVkYjcxOTllZTk2ZDg5M2NkMWFhZDNmZGY1ZDU3NDYwZWYwMmRkYTZkM2ExNDA4MjUxOTZmM2Y4ZTJmMzdkYTM2YjZmZGFkMTg0ZjI3NDBmMTE2ZGU3NThhOTI5MTcwMzBjNWZiODBmMDI2MjQ5NmQyZGY5M2M3ZTI3NmYyNWRhN2RiZWQ4ZWI4ZGQ0YzU2M2FiYTU1YjgyYWY2YmEzYTcwY2E1Zjg1OGI0NGEwMzNjZmI3OTU2MDRkZGVlNzQ2ZTdjOGFlNzlkMjcyZmI5YTIzNDFhMmEyMDJkZjVlYWMwOGRlNzVhZDgwYzY1ODBkOTJiMTY5ZjJlMTMxODg1N2IxYjE0MjFjMzBmM2RkNDYxMDkzZGUyZDM0NWVkZTc0MDRiNzJhNDUwZGUwN2IxNmVlZTY4Y2U2Mjg4N2I2ZWFhNDM2ZWVlNjg0YmU3NWNlMGUxZjk2MjYzZThkODczNmY5YmEwMDBkODhlOWU1ODYwZjMyOGFlMWUyZGM3MzA5OWQzMmZjZWIxYmQyYzAxMjM2OThhNDliZWFkMTkwYTAwZWM5YTZmODcxMzNlZGRkNDUzMTZmNjVlYjBkMzI5YjA3YjlhNjZiYjlmZTQyNTg4YmY3YjhkMDZlZmVjMTk4NmI4MmEwODFlZDNmNjgwMmU5YmU3MzQ2NDc4NDU1OWE0ZjJjMDk3YmExNGIwYmZkNWQ3ZTBhZmY2NWNiNjlhYmQwM2Y4NjE2Y2Q3ZWRmN2VjMzY4MjE5ZWRjZjg5M2U5ZWU3MWRhZDlmMThkNzllNTY4MjY1ZGRjNjcxNjIyMzIxMzIzNWJiOTI4ZTkwOGRlYTgyNzc4NGNkMWFmMzk2ZDU5MGM4MWY0ZWFjZGZjZjg5YzVjYWM5NmZhMDUwMDY0YTIyODQxZWE3MTVmOGM4OWQ2ZDVhZmJmNTk3YTRkMDA1ZGJjNmIxMzg1NmQzMzViNDJhOWE4MmVkY2I5NDk4MzVjY2EyMGIwYTIzZGU1MWNjM2FlYzM1NTY2ZWZmMGM1YWUxYWIzNzUxMzIwZDJjMzEwNDk1MjM4ZWRhMzgzYzM4YTQxNjMxNTJiODgxNTY5MGI4ZmYwMTUwMzVkMWQwMGVhNGEwZDZjYWYzMjRiYjcxYTY2NGExYmVkMzE0ODA3ODRhNjhmNDM4Y2FhMzU5ZThkMjY3M2M4NTdkNGI4YzBiNmM2OTU4NDdiODY4MDBlYTNkNzM0YjVlY2M0ZDUyYjUwN2FjNjliM2E2Nzc4OTE2MDE2ZWJjMjMxNWY0NGM5MGJmMGMzZTdkYWUwMWQ0OWNiYzMwMzQwMmJiYzYzNGFlMTE5MWYzZjZmZDYzZDMwM2IwYzBiZTAzM2E0N2I5MGY4ZDNhNzdmMGE0NAorU0lHOiBiYmU0Y2Q2MzY3NmUyNmQ2NzVhMTkxMTUxZDMwZGI3MmI1Yjg0ZDQ2MWVlYzY1NjRhZjg2N2FiNDFiYWU5OTMxMTQ3ODg1NTE5ZWM5ZDdlNmM4MTg3NDNjOGVmNmQ1MTY3YjM1YjQyMTM2M2MwOWIzNTczNjdmZThkZTQ0M2EwNgorCitUU1Q6IDcwMQorU0s6ICBiYTllNjg2MjA0OTc1YzNiZGVkNGMxZTlmNzRjN2U0YzdhN2UzYzk5ODFkMDFiZmNhMGFkMDExNWMzZjBmNWMzCitQSzogIDQ5OTBmY2U2OTUyZThiN2QwYWZjZjRiZjlkYmE5YmNlMWJjNDgxNWUzNzUxMWRhN2MyYWQ0ODkyNTgxZGUwM2EKK01TRzogNDZiYjQ4OTUyYWU1OGYyYmY1OGY1YmU4ZGY0ZjMxNmI1MGYzNjNlYzg0ZWVkOGY4MmZmNGMwNGIwNjkyZDAzYWVmMjZlOGUxZTZjOTU0OWEyMjQ3ZDU0MGE2ZTIyZmViMTFlNTdmNGI4MDhhMjA5N2U4YTdiNmIzYjdhZjM3NjllNmQ4MWQ2NDg4NmU2OTYyMzcyZjRmMzllNDljZDQ2YzFiNWY3MzVmMzgwZjdjMjc3ZDA5OTc3NmVkMWFlYWE1N2EzNTljMGFhOGM3MmY0MGViOTFhMWJmMDdlYTE1N2Y1ZGRiMzA0MDlkNmUzYWY5ODk5MGNlN2YzMGFmZmRhYzVlMjIwMTA2NDZkY2E5NmE1NDAwNjBmYzkwOGEzMTI1YjAwMGFkMWVkM2EwZjI1NWNkMzRmMTVkN2RkMWZkNjgxYzNjMzVhMWNkNjUyMDU2ZWNjNTI2NGQzOWFhZjcyYTliYjgzYTU1MWNjOTM0ODg3YWUxMDdhZmRmZWYwNjMyMTcyNzBkOTU5Njg5MTQxOGJkNDYxYmJhNjNkZTY1YmUwNjdiMWI3ODY0ZmU0NjQ4NGM3YzllOTYzNDlhN2MwM2E4MGZhMDU1MDUwYWExOGFjZTJhNDRiNGEwM2M5NDc4MjQxNzJiMzBlMjEwMTExNTk0NDNjYTNjZWZhZjY5NmE3YWE4Zjk4MDExMjYwYzk0MzZiZjQ4OTkxZjQxZDRkNTA3Yjk2Y2U3MzIzZTUzMWFkY2Y2NjM0N2M1NWM4ODU1NjczYTlmMmVjODliNWM4MDI0NDYwNjE3ZWM3MjcxNzczYjM2ZDY0ZmMxNGViNWQ4MjY1MmM1M2EzMDMxNDU3MjI3MDkzZDExOGZkOGViOTM4NGU4MDIyOTA0MWE5NmE2NDkzNDUwZjk3ZTY3MzYyNjNhYmYxZWNkOWU5ZmI5YTRmMGY2ZDY2N2ZhODI0MTUxNDg1ZWRjMzdiMzRhY2YzZDhjMzVmOWMxYmU0OGI1ZTk2YTEyYWY4ZTJkMzVjMjNhMDM1ODBmMjExZGE2MzE2YjM0YzU2YmVlODcyZDQ3NjQxYmNhNzdkYTY0MGZkYmJhZDVhOWFkOGFiOWRjNzk1NzkxM2RhNzM0YWQzNzQ5MmJhNGRlOGNmMTM2Y2NjZGViNmJhM2YxYmQzZjAwM2JlNzI2M2M0ZjJhNDBjMzNmMjRjYTMzMzk1OTZlNmMzNDI4MzM4MTAwZWJjYzA3MjJkNGY1MGQzMGIzM2I5MTJkNGU3YzFhOWZlNjVmNjY1OGE2ZjIzOTE0MGE2MmMzMjYxZTEwMzkyZWQxOTMwYWE5MTc2NTJkM2JkMmJlNGU4YTA4YWI5N2UxNDViOTIwYWJiMzFlZTRiY2Q1YTBkNzFmNjM4MTgwZjYxYzI0NTgyM2EzOTlhNzM0YTRkY2RlMDk5Nzg4MDI0NWVkNzFlYjliYzY1ZTNjNmZjOTVhYjkyMGI4MDI0YzE3ZDQ0Y2VkMDAzN2QwNGExMzNjMjY0MTc4MmYxZDYyMmRmNDUyNjliNDkxZDNmYTJhMTIyNzU3OWVhYTM4NmRlM2U3ZGU3YmM0NTVjNmExNTRlZWU1NzI3ZmZmMDQzN2EyMDA3NmM1YzNiMDU3N2NhYzViNGI2OTM0ZTI2OTM4MDIyMjQ2MWE2MGY5NTRlNDg5NzljMDY3MTIxN2YxNmY3MDI3OTgzMDM0MTIxMDkzMTg2Yzc4NzA1ZmMyN2RjOTJlMmVkYTQxMTZhNmJmN2QyM2UwNTQ4ZDYyYjY3YjI1YzQxZWQwNjE5MmJjMjZlZjEzOTdiZjE2MDFmM2E2ZTJhMGU3ZjY2MWZiMDUwNWVlMzgyZjI3YWVjMjgwNWEzZTIxMTcKK1NJRzogYzdkMjNhNThlMmZiMmE4ZDRiOGVkMWU5ZWFlOTFlMTEyOWMyYWY4YmQwNWYwYmQ1NzJhYmViYmUwZjMwODI1OTI1ZjBkZjcxY2ZiNzIxOGM2ODZlNTU0OGQ5NDI3NzEwYTY5MDM2NmJhODU1NDFjNzkxMDFhNThhMTBlOGFmMGEKKworVFNUOiA3MDIKK1NLOiAgNTkwN2E4YzA4NDA0Mzg3NTIzOGVkYmRjYjc4MzJmYmJhNGMwNWVhM2M1Zjg4YTk2ZjFmYmY5NTA0MDFlYzE2NAorUEs6ICBlMmY0OTUwOWQxMDA3ZjYxOGVmZTRmMWZkNjdlYWE2ZTJhYjE4YWZiMmRlY2NlZDVhMGIyYmE4MzYzNzg5MjYwCitNU0c6IDQzM2IyNDc4ZTE4ZmFkNWNiODEwNjcwNjFkMjI1NTI4MjI5Nzc4MzA3ODg1NDc1NDYwZmJlMzEzN2E1YjQ0MDI0ODk0ZGRiZTU2ZmE2ZWQwMjE0OTZmMDc4NmU0MmJjNmMyZDI3OTdlYTBhNmJmMzU1ZTg4MTE1ZmFhNTVjZDkyZWQ0MjEzM2Q5ZGNkYTZiOWViZjYzY2U0YTk5NGQxYTgyZDJhNDkyNjc1NThiZTU0MTgyYTZmODUxMTJiZDEyYjI0N2FkYWNmMTQwNWZjN2VjN2EwMTVkNDNhYjQwYjgyYzY3N2Y3Zjg1YTBlNDgxOTdjNWI5NjU3NjE5OWY0YzMzNDNmZjc2NTRkNTIzYTMwYzQzYTA1NGMzZTQ2NDQ1MTI3ODAzNGI3ZjE5NmMzNjY3NjhjNjI4YWY5NGZjMGNjZmM5YTI5NTVmOWQzMjMzOGI5NDQ3ODBmOGUzMjcwODViMTAzNzgxODY4ZTRmYjc5ZDU2MTIyZDdmM2Y1YWIzMDllNWQ2MzRhZGQxNWRhMzgyYzBkMjM1OGU2NDcxODJiZTRkZTZlOWE5ZTQzZTZhM2EzYjgyMTViMjA0ZDk1MDc2MTBkNDYxNjIxMDAwZmIxODkzNzA3YWY3ZDI1OTViZmVmOGE4YzVjNWNkMDhmMzA5YTVmYjU1ZTQ1NTE5YWVhOWI4NDc0OGNhNWM2NzJiZmVjZDMwZDI1NjUxMjM0YTNjYzMxOWI0M2RmY2VmYzFhMDdiNTViNGFjYTcxNGMyZTdlZjk2MzhmZTc4ODRhNzdiMjIyNTNhMDFhMjIyOTUwMGU5Y2UxMGZkYTczYTg0M2MxOWNjMDk2MjZkMjQ1NmMyMmE5YzkwMTg4MWQ1MjFmNGIxNWQyZjYxM2NiNDY5ZDMwNGQ1NzkyMjNiYzVmZjczODA0ZGY2MzcxNTE3ZWJhYTViNjc3ZWE5MTBmZjFhMDJhMjZmYWZlNDhmZWY0NjllZDc5OWJlZDZkNTZjZTk2MTgzNGEyZWRjMmUyM2MwZDk0MjZlY2NkY2M5MzRmNGMyMjBlMzc4MTVmN2MzMzRiNzM4MzYwN2Q0MzA1MjA5NDZhODgxYTA4MzI1YjQxNjQ5NzlkNWU4MmNkODEzNGQ3OGNlYzQ4NjFjMDE5ZjZkZTMwMWMxYjlhZWM1MmJiOTgyMDMzZmI3OWIyZTk3MzFiYWIyOTY4YmMzZjkzZmE1NjA0Yjg5M2M2MDI4YzIwNGMzNmJiOGM2YjA3NGJlMjhjOTY0ZDI4NDliNWJiMTlkN2UwYmEyNGUyMmEyMDRkNGZkYTgzYjEwMTMxZDM4M2YxMGIxMzZiZDBkYmEzOWVjMjZhZjMwZTNmZmI0ZGJjMGM5MjFmMGNjOTkxMDcxNWQ1MWM4MWZlNGM2Mjk1MGU4NTU1NDlhMTdjZDczYTA5YWM5MWUwNmQ0NjE1MTgzNzZkMGZjZmExMjNkZjBhODM3MTAzNDU4ZDljZTIyMTgwOGQxZjllZjJlZGM1Y2QyZTY4MjMxNDViNTI0ODk0ZWE0ODUyNmQ5ODVlZWZkM2Y2MDY3OTM5OTU0OGUxZWRlYWRiNTM5NWI0M2Q4NzA0NGIyYmZlN2M2MDM3MDI5YjM0NmE0MDIyMjdlYWI4MWYzMzNlMTBlNzdmMWRiYzA2YTIxMWQ0M2I4MjU1ODY3NmMyZGNmZjkwODJiMWRkNTMzNjhkZjAwMmRlMTMyOWFmMzAwMGIxNzFhNjkxNDM4OWJiODBlYzBjOWYzZTQxMmE0NDFiODAwYWZjZWIwNDg2NzA5YWRhYzY2Y2FmZWVmMjQ4ODM5MzMxZjVkODkyMTk3ZTI1NDIwZjFlMzdkN2MwMjQ3ZjY2OWY1ZmNiZjAKK1NJRzogOGM0OTEyYzBmODg1ZDc2YzkxNDA1OTUwNTM3M2E2NGJkZGQ2N2RkNDY4MzY5YWI5MThmMjNlYTI4ZTA0YzE5MTc3YThkNDYxMTQ0ZjBhOGI1MWQyMTUxNzZjYjA4YmQ2NTMwMWMzYzQ2MjM3YjYxYmIxNDk4Y2E3OWQ0YmU3MGUKKworVFNUOiA3MDMKK1NLOiAgNjAyMGFlMjczZTBlMDUzN2JhYzg4MWQ3NTQ5ZDkyM2ViMWNjMjAwZDQ5Y2E2NWQ0YmU2MzVlMzkxNzNkZjlkYQorUEs6ICBkYWFmMGU2OTlhMTJhOTJjMTZlMGRlZDNlYjM0NTBhMzYzMTE4MjQ1NzdlMzYxZjA1Njk2NjAzMzAwMTY2Mjk3CitNU0c6IDZhODAxMWRlMDlhYWMwMGRiMTZmZjdlNTVjMmRlNjdkOGM5ODgzZmNiMjA0MGRlZGJjMWUzMjFjYWJhN2JiMDM2OTcxNTMwMTc2ZDFkYmJhYTkyNzUyMGJkZmNjYmVkODg0MDEyNjA0M2VkYzQ0Y2JiN2ZhMzUyODY4MGU1ZjFiNTY2NDk1MWRjOTAxMDlhZWE0YjljMzM2Y2EwNDNkODIyMWE0YzhkMjAxMTY1NmJmOTQ0ZWZkMzZiYTBhMTBhNGIzODkxOTYwNTU3NTBiMGUzODhmYjUyODcwYmJlYzhjNTUxOTgxMzE0NDM5NDVjMDlmM2FhY2UzZTY5MTUwMTQzNzQwNzMyNjZmMzQ4ODc0NDJkNzRmNDY4ZjhkNzA3OGJiYTBiZDgxNGNkNmRkNDIzYzk3YjU2OTA1NTg3YjE1MmQxZmNmYmEwZWI5ZmRlMjExMjY5MWRhZmFmNGY5MjE1NjJmMjQxYjYyODQxMDAxODM0ZjZjZTM2Njg1ZjgyYThmYWEzYjdhZmFkNzNhNWU1OWJmNWY5ZTcxM2U1OTE2M2YzMWRiZTY5NjExOGFmMzM1MDZkMmZmZWEzZDljMTU1NmZiMTUyZmQyYjMyMWMzMTc1N2QwYzNjMGY2MGVlMTEzZWRhYzAyZDY3ZWZiYjMwM2RjZTZmYTg4ZjdiOTc0NmNhMTEwZTZhMGNkMDk5YzA4MzFmNTNjNTVjMjhiNmM4MmFmNDQ2NDU2Yjg0MmIyYzk1MGE1NTNlZTJjNzY1ZTk3MjllNmIwYzU0NmJmYzI2YmQ2ZDQyZDA2YjJlZDVkNGM4Y2JiYzc1ZjJhM2FkODEyOTM5NTc5M2Q5NzljMDMxZmNlN2UyMGIzOGJkODljOWI2MjQ3NDhiMjAxMzQyM2NlYmFkYTAyY2RlMjA1MmRhNTY2NGM2YzY0MjZjYmZjODhmODRmZjYwMmUyZTIwZGY5Njc4ZmJiYTU3N2E0YzEzNDUxN2VlMDUwNjgxMTUxNTgwZjdjNWM5Nzg3Yjk2ZTU1YzQwNzVhMjZmNGY4Y2NmZmJiYjZlYTE4ZGUxYjJjYzhjNDQ5NmIxNjA0Mjc3MGI3ZWM2ZWI1NDI5ZTdhYzE4OTEyMzJhYTRlNDc0NjdmNGU5YTk4NWQ4MDU0N2VjYzRjNmZkOWY1OTc2M2VkZTkxNjcxZjJhYTU3MzZhNWQxNDhlM2E4ZmZjODhlNjEyNTNhODViMDk1MzY1NDk1OGViMmQ2OTQwMWNiZWFlNzc1ZjhjYjhjM2NhNDJkMjE2OTNlYmUyOTg4MzhkZjk0YzFkNzdiMTI2YTEyMDVjYzQ3ZDUwZDUzNjdiNmYyNzZlYzhkYjZiOTUzMjRhMzFlOGZkMmVkMmU0MzQyMGM0YWQwMmVhMjc3ZGQ5NDhhNTUxOTNkMGYwYjRkMWNmMjgzODZjNzI1OTc1Y2U1YzEyZDJhNmYzNTY3M2NjMjJhMDY5NGNjYTRkYWY2YWZiZmQzMjZkODhjMTg1MGY4MzRjNDJmZjBlMjkyYmE0ZjEzZTVlZjA3NzRhNTk2ZDMzOTA0YzAyNjJkMzFkZjJjNTg0YTBhNGY0NTNmNmFlNGE4OGEyNzVmN2RlNzljMTNhZTFhNzMxMTViZTAyZjQyNWM2ZjE3N2ExZWM0NjM5YzQyYTc5MjgwOWEyYjA5MTllYmQzMjFlMzE2MDAxZDViMmY4NDg5NGZjZWJkNTBhMWRjZjQ0ZDcwMmI5MjQ1MzJmYzBlNGQzZjlmZjg0ODZjMGVkMTgwZWVjYzNlMDllMjI3MmE5NGRjN2QyNGE0ZTg3YTkzMWZlMjQ5NWNiZjk5MmMwYWFlOTIwMWUwNzk2Mjk4ZjkzNjNkYmFjNDc1ZThlZAorU0lHOiBiMWJhODhmZWQ3ZTVmNGI3NTdmM2ZhNGQxZWQ5YjE5ZTQ5OGU1ZDJmNWU2Y2Q0NmU0MjZmZThmMDM5ODgyZjFiZTc3YWM5ZTVhOTI2NWNiZjdlM2NkMmE5ZTk5MjZjMTgxOTkxNDM3OThkYTViZTQ3YTQwODY0NDA0OTZiYTAwZgorCitUU1Q6IDcwNAorU0s6ICA5MzJhMjAwZWNlZTcyMjNmMjQxNDYyODNhNDA0OGM2N2E2YTJkMmZjNGJhMGY5MjQ4YmRmZmQ4MmM2Y2NlM2NiCitQSzogIGVjOWJmYjdhNmQwNGU3MjZmYzFlYTBjNDI0NjEwZGNiNzk2N2JmMTVkNmQ2NjI2ODU4ZDQxMTE5OGQ0MGUyMzkKK01TRzogZGY5NTMyMDcwNDgyMTNhZmI4ZTJhZjQ1MmM4ODlhMjFjYTEzNmE2OGM5MjliZGM4MjRmOWE4OWFjNTk2ZGNiOTAwMTlhNDZmYjY4MmJjZmQ5NjJmY2NiMjdkMDBiYWY4ZWNjYWY5ZDlhN2Q4MTgzY2FiZDdkZmE1MDZmN2JhZmI0OTM1YWIwNDU5MzFmZjhmYWViNzE2MzFmOWVkNmJiOGY4NDczYWQ2MjkwZDdjZjUxOWRiMzEwYTQ0NDJjNDYxMTE4ZjY3ZDFhNmQxMDNiYWU2ZjI2OTdjOTRiNzQyNmQ5ZTAyZTNjYjk1MjJmZDBiNDRhZWY2MDBjOTYyZmVmZjU4NzNkOThjMjc5MDg4N2I4ZTg4ZDE2MDgyNGYxYmJhMjIwMTc2MzlmOGRjZTY4Zjc0MzQ4MGRlZWExZjkyYWExZmQ0MTM1ZGQwNjQ1N2E2MGYzNmI3ZDdmNTE3ZDQwYzk0YzBkZGRjMmU0NjU4NDdkOTA5YjlmNjgyNDVmZjJiNDIxZDU5MTkwMDFhYWU1YWVmMjRlMDJjMDAyZGE5MDdlODYwNWYxNjBlYTYwOTZiNTgwYjc1Y2VhMDIyZDQwMmY3ZjVmZGM0NjRmODdmNzhjNzkwNmEwMWU4ZTQ4ZmI1YjM1MTc0NjEyYjQ4YWM4YmM3NTBlMGYzYWViMGExMmY3ZGZjMDliMDg0MmMxNzgwYTVmZDljNTRhZmI5Mzk5Yjk0MDhiYWFjY2RhMjBhZmJlM2Q2ODIyNDhkN2JmMWVmZGVmNDkwNWEzMTliMGZmYjEwOGI3NTNiNzFjYzk3ZTllMjFlYzliM2RkMjhjZWUwMzlkOTQxOGExMTM1ZjBhZGQwOTJhYTY2MzEyZWEyOTEzMzAwZDFjYzg5MTY1MjQzMDJiZDNkMWIwOWU2YjI5YzY4NTdjYmRjNTZlZjRiM2YzNWQ4ZWU2NzcyMDhlZmZhODQ2ZmRiMDY2YjA1ZWI3MTdiNGQ0NTEyMGNhYjcyYTdkYjdhN2NhODQ2ZTg3YjE2YjY5MDQ3ZWI3NmQ4ZjE4ZGE4ZTEzOTllYzBhOGM5YzMyOGNiZTYwZTBiZjQyMDQ0ZDJlYmYyODE4YjNjMDQ3NTg4NDUyZmNkMmIzZWZjMWUxMDA5YWUwNzY4ODcyN2RiOGZiNmRmMmEyZmU3NWQxY2YyMmYzMmJhYzA5YzgyYTZhM2Q3ZWVkN2QwMDUwOGNiZTViNzI0NjBlY2ZjZGQzZWU5MTFlZmU1ODk4ZGJkOGU0Y2U4NTkxMzI2ZGQxNTIyZjlkMjU1ZGE4NjFiZjllYjJhMWQ1NzI1ZDdkNWQ0MjczNDAzNDE5NDVlN2JjYThjZjJmZjhhOTk3NDUwOTUzZTc3ZDIwMzY4M2U0YjBkYWZjMzMwZTA1NjcyZDJlY2QxM2EzZjQ0MmRmMTM3MDQ0ZTBmNTU2ZmZiY2VmZmVhMjZjYmFlMjZjYmE2ZjI1NjhjZjM5ZjkwODQ4OWUxYTkyZTc2YWZiZjI5Nzk5NWRhNGIyY2IxYWJjOWVlMWZlNGRjYTVhYTgzOGIyZmJkYzEwOWU4OWJlZjNjZTVhMzZlNWIyZjcxMmFjNGM4ODk0MzgyNDhmYTVhMjE1MGNhYzZjOTc3YjVlMDU0M2Y0MDEwYjczMTQ3MzJmZDE4ZTdmZDU5ODJlODMyNzY1MTllNzg3MjVlNWE1ZWViODZmNDg5MjA4NGFlNTJkYTM4NDljMjI4YzgwOWVkYmY2OWEyY2M0N2M0NzhkMTg3MTlmMTExZDczNzg4N2M3YTJlYjMyNTA4OThkYjM0ZTVlNTA3NmZhYjlmNGE5ZTZlMTkyOWEzNDgwODM2ZGVhMDdiYTRkNjNmY2VmY2U1NTQzNDMwYTgKK1NJRzogY2QxZTRiZGY0YTNlNGEzMWQ2NTI1NDMzM2M4Y2M0MDg3ZTRjYzQwYjAyZTJhMzQ3ZDA5YTNkZGU2OTg0OTBjMDg3ZDcxMDlhZDAyMDljNTNlOTg3NTg5Y2JmM2NlMjY0MTJhMmIwMmNiOGEzYmM5M2ZlYzc1YWI1ZDJjMzg3MDMKKworVFNUOiA3MDUKK1NLOiAgNWM0ODNlODM3ZWIwMWVkNWE0YWQ1ZGIzNzkyNjk5ODI0ZGYxM2U1NzZiZTk2N2QxMjExNWM4NWUwMjg2ZTYyOAorUEs6ICBmZTFhYThiMDY5ZGE1NmU2NzZlZjNhNTdkOWJiYTg4MzA1ZWEwMzI4MDhlZTYzNTI3M2IzN2M1YzYzNWRlZjRlCitNU0c6IDU4ZDVlMmNkODk5YmE5ODUzNzhiM2VjMzNlOWE4Njk4MjJiMjNkNWQ4OTZhMjhmNDI0ZmNkNmU0Y2MyOGI4MGQ0YWFmMmRlODA0MzY3ZWZkZjVlNDIzYjEyMzRkODIxZDYzYWMwNWVhZWQxMmM3M2U4ZTM2MDhhZjBkZGNjYzgzODZiN2Q4NDJiMTJlNjBkMzBjZWRlMzI1NTM5NDVlNzgyOWU5YjIzZjVjY2MyZTcxMDNhMDhmMmNkZDllNzVhN2IzNmY1ZTYzNzIwZWYwZDQ5YjI1OTJiZWYzNzQwMjY4Yzg5Yzg2YTZjYmRmZTIwMWRlMGRiOTk4NWNlYjE5Mzk5YzlhMWQ1YmIwNTg2YWYzYzhjZGYyNzEzMjk5ZWIwNDQzYTU0MWE0NzM4NDYwNzI0M2M1NGEwNTkxNTA1ODM2N2QzZjJkYjM4MGVkMzE3YThjMTJjN2E2M2U4MDljMmU4NGQ0YWNiOWQ5ZWVmNTRjNmY1YWY3YWI1OWNiOTE2OGIxMDY4ZjlkMmNjZDk3OGZlNzIxYmFkNjhhNjY5ZmZlZGVhM2U5MmM3NmIzMmUzMTY2NjU4ZWUzYmQwZGViMWIwODQxOTRjZTM1ZDlhNzQxYzU3ZmMyMjQxZTY4ZWZhYTY1MzIwYjIzYTFkZDE5ZWE4YjdlYzgxZTc2ZjFlOTE2M2Y5NTkyZWVlZTVhZjhlY2VkMDI3MmYzMzUxMmQwZDRjYTA2N2YwNTU1MWIyNjUzOTZlMTAwMTQ3ODNjYWNhYzc5NDM3YjE5ODQyZGU2YWI5MWI5ZDkyM2JiZWI1MDMzMjViYzU0ODY5ZjY2M2U2ZWE0YWU2ODk3NzAxYmU3ZTExZDE2Y2RmYWUwZWVlODYxODYyMDAwZTdhNDE2MDc4MTU0N2U0MjUyNmFmNTFiYTk2OThkMjM0YWFmNTEwZGE4MWEwZGJmMjY0MzY2MTUzZDdhNmQ1ZWIzZmIwOGI5YmI1ZWEwNjVjMmY1ZTViNmJiNjc5ZDJlMjEwYjViNDBlMmJjODJmNzhkYzlhYjU4MjRiNzRhYWRhZGQ4OWJmOGE4YjczYTBhMmY0M2FjNzQ4Mzc4OTIxYTczYTI1MjcwNGE0YWRiZjc0MGNiOTljMWUxNTk0YzM3YWM5YWNjMTlmNTIzMTVjNmE4NDZhNTdiMzYxMjhjNjRkNzY3YWY0NGU5Yzg2MzA1YmYxOGJhN2NkNTI2ODA1MjNhM2IxMDJmYmE2ZmU1NTU2NzA2OWQyMDQ3Y2JkZDk2MDVlYTEyYzg4NzdkMzk5YzFlNjZlMzM4MTc3MzFmNTBiODRmODE3ZDFmMDc2MGE0MGY5NzQ2ODYxODkzNDEwNWViMDBlYzUwYzc2ZGIzYzUzZmNmNDNmZTE3MDI5MDdkOWE3NTZiY2Y0MzlmODgzMWQwYmZhYzkyZTcwNThmYjE1N2JlM2U1OTFkMzdlYjM0MTY1ZTNjNmZjNjBlNzIyOTRjMDgzZTQ3NzYyNmY5MDAxYzFkNzM3YzI5MDM3N2RmYTU4ZWE0ZWFkMzAyOGZjNzYyY2U4YTNhZmVjMmU2ZTEzMmM2NjJkZjYwMzRhYjU1NGY5M2VmYWM2NTdhZDM0ZjYxMDdkMzQ3ZmM1YzVlNTNmMzczM2UxNzhiNzYwMTRkMmY5YmJkMDZlZjJkZmU2MGUyMDgzZDg4NjVmN2Y1YjJhY2MwMjVkOTEyZTVjZjZjZGE2ZTc5ODE0M2U5ZGJiYzcwYTAyMTFkOGU0MDAzZDc4YjM4M2Q2NmE2YWQyOTcxN2NhMjRlZGRlZjdkZjdjZDNhN2VmNjUyYWJhNTQ4N2FmZTVkMDI2YzliMTAyODA3Mjk0ZWIyN2Q5ODI0ZWViNmI0MGYwODNkZTcKK1NJRzogYzE3YzJmYmY4YzAwYmNlYTMwMzViZjBhNjJkMzAyMjlkYjc0MmNhYjExOTk2NzdjN2ViNGViMGVmNWM3YjUxYWQ0ODdhNDk3MWI2MzFlNzk0YTU4YmIwODIzY2MwZmU2MjYxMGZkYTZhOWUwM2Y4YzRjMzM4MWNiMTU0Y2VmMGIKKworVFNUOiA3MDYKK1NLOiAgYjBkMGFiZGQ4NDQ0ZTEwZjI5Mzc1NGFjOWYxNmUzMWJkY2RkOTdiNzA2NzEyOGFhZThlNGQ3ZjExMjg5ZTJjZAorUEs6ICAxYzc4Y2MwMWJlYTE1MzUyYjYzYzU2OTdmMWNmZTEyZmZkZDE2ZGRjMWQ1OWU3Nzk1MWI2ZTk0MDhlZTIyOGFkCitNU0c6IGFhMjc2Y2M1NDNmY2M2MmQ3MGE3MDQ2MDhkOThjZTUxYjY0NWI1YzI0YTY0MGE1ZGYxMGE1NTkxNDE3ZDEwODkyNmRmM2YwY2UxYjkyMTAzMzMwOWViOGQ4NjU5ZjQ4OWZkNmY3OWFhMWJmNDg4MmQ3MmFjNjljYzU4ZDNiY2UwZmE4OWIxNjQxMWU5NzUzZWI0MGM2YzRkNTk4ZGM4ZjRhYmIwYmM0OGYxMzcwMzcxMzI2YzlhODZiYmMyYWM2MjE0NDc4ZTc4YTM4NDA4YmRkYWZhYTk1OTI2MDBjNDlhMTI5YzA1MzkyZjhhN2Q2NDJiNDkxMzdhMjBmM2ZlOWYxMWVlMTdjZmEzYWZkMmFmNzE1NjVlOWM0MDA4MGI2MGNkMGRiYzM3OGVkYTA2MmM3Y2JjN2ZlOTcyYmRlNDUwOWExZGU5NWYxNGRmNDgyZjQ4YWFjYzQ2M2NkNTk0ZjY2ZDY0OGQzNzk0NzM4YWQ2YWI0OTZlMmRhNTBiMGRiMmJhN2I2NTkxODVlNDU4N2YxODJlODMzZGU3NTBmYWFjZGRmMjFhZjVlMGNmNGM5YWYzODViMDRmN2JlMjMxNDk4YWQwYjc0MmQ1YTg3YzA2MTE1ZGIyMzA5NzNhNTE0MjdmMjAyZmEzOWFmYjk4MjhiNWYwM2ZhMzI3Y2JkNTJkZmVjNjZkNzFlYTMxOTg2NWRjZjY4MTBmMTg1ODQ3MmQ4YmVhM2U0NDdhZGZiNGI2MDc1OGU4NmI0ODEzMzcwOTczMmQyYmNmNTFjNzZjYWE4NDdiNjUzN2ZjYjA1YmI4Yzg3ZGM1ZTlmYjAyMmIzMjYwYzFkNzFiMTQ5ODU5Yzk2NjNkYmRhZTZhN2JiZmQ2ZGViOWQxMjM4MDljMjQxNDAxYWYxMDcxOWNmOTFhNmJlZDE2MDg0YzQ0NDYwNzM1OWVkOGYwMThkYjExMTUxMTg5MmI0NmJkYWM2YzljNjEzODQxZGVkODg2YjlkZWMwNmMwMWU4MDQ4N2U0OGZiZTc3OGU5ZTk3NTA4ZmZkYTA1Nzc4NTNhYWJkY2FjYThiMGJhYjZjZTQxNTU3YWFiOTYzMWM5NmQ2MDk3N2UzNTcxOGI2MDU5NTI3M2ZkYmExNDBmNTUwMGE4ZDM1NzZmNWE5ZmM4ZjNjYTRjMDJjMTY3YWYyZTAzZDI1NzUwYjQyYWRiMDNiMTQxN2YyYjZkMjE5YmU1Zjg0MjkzMzFhMjZhNDQ5YjVkNGRiMmIxYTA5MTUyZWVhMmIyNWQyZGY3ZWY2ZmUwYTMyZTI1ZmFlNzkzNjBhOWFlZTE1MTFmZGE4MDY0NTUwOTM3YTcxMzA5NzE5MzBjNjczYmIzNThlNWY1NTk1MWY1MGIxNDZkODVkMzgzZjNlMDFjMTUxZWNlNmMwNmQ4MzY3MDEyNTMyODBmZGNmZjRlMTM5ZDMzMTlhYjJlMmNhNzFiY2MzZmEwZmFmN2M3MDJjOWM2MDRlNTY1MWRlNGFmNTcwMGU5ZWRlNzI1OGI5YmMxNDhkNTU5NWNkMzQxNzBlM2U1Y2YyOTI4MjgzOTA5MDhmZGE5NjFmMjIzMGFjMGI4Y2FjNjQ3Mzk3MzI3MDZjZTJkNWU1OWFiZDZkNWUyMDdiZGFmZWE3NGQyOGQ3YTc1OGYyMjAwZTRlMDBhMGJjZjAzMDZhM2NhYmRhNDcwMjRmYWJlYWU0ODhhYjVjMzIzNzE1Y2YzY2E3NzIwYWY5ZWJiZjg1ODJlMTE1OGEwOTlkNzM2YjU2OWI5ZDQwMjk1ODE3ZWEyNTU0MDY4YmVmMzI0NDJjMTExZWM4MTRjNmVkNDE1OTE5YmE3MzUyNjMzNGRmMzBiYWM2NjYwODRlNTYwMWMyMjgxYworU0lHOiA2NDQwOGJkZDJkMGZjODkyYTViNjJiNWFjZjhlM2IzYzczYzBiNWM0ZmEyYTcyZTM5ZGQ2MDhkNDkzN2Y5MzMyZjczZTE0ZDA4YmFkYzYyNzAxMTRkMWYxYTU1NmNjNmVlODQ4OGFiYjkwN2Y3OWFlMTc1YzM1MmU5ZjExZWUwNQorCitUU1Q6IDcwNworU0s6ICA0OTg0OTdmZGNjNmExMDU4OTFlMDIzZmYzMmQ3NWY3YzM3NDhkOGM1MmQ4N2RkM2IyNzc1YWVmZDgxNjBhMTQzCitQSzogIDJkNzlhZTljZWU0YWM2Mjc1YjA1NzQ5YzQzOGViZTU1MmI0MTNkODczY2MwN2YxNGY1ZmExMzAxNzcyMTRjNTQKK01TRzogYmUzOGJjOGNkZjQ2MTkwZTMwNGFiNTNkZDI5YzJiYzQwOTU0ZmQ0YzZkMmJiOTkwZjkzYjJiNWM2OTFmZGYwNTI3YzI2MGY1MDY2MTg3ZjJkMGYzMWY0M2EwOGIzNjBlYTFlZDgyMDA2NTE3NjRiOGZhNDk1OTVhMTU5NDEwOWU0OTY3NTlhYjY2MjNmYTMzMzc4ZDgwMGU2MTE3ZTA3OWUxM2ZlODVjODFiNjNlYmUyNDdiM2RmNmMxNTg0YmM3Y2ZmYmRmYTQ1ZjJhMmNlN2MyMzdhYWFmZWY4Y2JjYTcwYmNhYmNlMGI4NDdkNTUxZjQ2YTdkMTVjZTJhMGQzZDU0NWFiYWNjNTkzMDAxMGM1MzY0ODg4N2Q0NzZlMGQxM2EzNGZjMWM1NGRmMDlkMTA2ZWQ3NThkZWVkYzc2MWQ1NTdhNzNiMmJjZGRkZWZiYTRlZDAwNTk5N2IxOTI3OWI5ZDJkZTM3ZDA0MWZlMDEzZWVmMDVhMmUxMWM5YTIzNGU4N2NjMGUxNmMwYzZkYTQyYWFhNWJmOTk2NDE3YmY2NGU1Yjc4NWQ2N2RjMzI1NDdjMWYwNTIxNzhkNjk0Y2YyMGYxNjk4NTg5ZTdlZDQ5YmUyOWRkNTlmZDVjMDFiYTFkOWY1ZmIwNmE3NTg5NWI3YjFlMTU4OTUwOTdlYmRlODRjYWQ2MzAzYWEwYTg2ZGJjMzI0NzQ3ZDk3MjQ1ZDcwYzUyMDNiZTAxYjA2Y2JkZTA2YWUwMzcyMDRkMjM3MzBjZDY5NjE4OWY3YWMyNjdjZjIwMjE3OTkyOWNlNTQxMGUwZTNhZGU1MTNkMjIwMWJmZDIwZmVmYTQwYjQ0NzZmMjdiZjkwN2M3NjJlYjcyNjJhNWJlMTNjZmMwNDdhODQ2ZDIwYTlmMjMxMWI2NDY5YjA2YWI1NDVmMGVjOWZjNDQ2ZWEyNTBjZDNiNzNhN2I2Yjk2MGMxMGNhNGMyZDZjNjRhMTU2YTE4YzlmYjgxMGU0OWFmZDBjMzZkYWFiOGI4Yjg1NjY0M2E0Y2NhZmE5YWQ4ODZlOTFlNTQ0NTM1YjhlZGRhMjdjOTBjMDZhYjZiY2M1MzYyOGJlMThkN2Q2MzY5Y2ExODAxZjkxYzJlMGI5NWYzNmQ3MDJmNzcyMzRiNDEwMDcxOWMwNTk5NTFlNDViMWY5MTY5ODM5MzRlMzJiNGQ0ZDhmMjljMGEzNzNmOGQ4ZjA5MThiOTY3ODY1Y2QwZTRiZWNhMDEzMjdjOTlkNWZkZWQ0YzFhNjlhYzJkNGQ5Yjc4ZmZiODMwNTY3MDAyMTA0MDI1MGNjMjc3MzdlNzVkZjc1NzYwZmVjOGI4ZDMwYjI0NTY1NGYzYzEyZjFmN2NlYTBiY2U3OGFiMzY5MzU3OGFmM2VhNjFmZmNjZGY5YmFmN2MzZWE2NWI4OGZjODU0MTI4MTI2NDc2Nzk2ODkyYzY2M2JkMTQ1MThjOTkxODYyOWExMDk1ZjYxNGUwNDkyNDQ2YzNkODRiMTZlYzk0ZjdlY2FkYWViNmI2NTliYmI0ODY3YjU3OTA2MTcxNGZkNWJiMGZhYTRhZDZiZTBmZmIzODg4YmVhNDQ3ZTRlMzQzOGM4ZjBlYWU2NDRmYmQ0NWEzODAyZGM0MGVjNDUxYjIxMmJkNTkyZGFjZDRkYTk2Njg2ZGM4YjIwMjQyNTdmMjVlOWM4MzBiZmY3OTVlZWU4NWQ4N2EwOTBjMWE0MjMyMWU3MTA1NTU3NjRlZDgyNTdjOTQxNWM3ZjIyNGI1Mzc1NThjZWZkYzYxNTEyOWYyODM1MDI2N2MwMWJhMDQwM2UwN2Y1YzYwNjdmOTFjODVhMmM1MGM4NjZkYzQzODhhZjM4ZDIxNjAyMDMKK1NJRzogYjBhMzZhMmM5MzQ3NTYzNDhlYjQ3YzI1YTMyYzNmMmE1ZGRiZDU4ZmNjNzJhMDhjM2NlYWQxYTJkOTAwMzM1YzMwMDFlMzViZmUxZjNmYjVhNTU1MDA5YmE4ZTk2ODc0NDk0Yjk3ZThiMDk3MDBlZGNiMWYyNTg0YjlkMGZlMDMKKworVFNUOiA3MDgKK1NLOiAgZDk2MmE2NzE5ZTVjYzc3MjRjYTRhMWQ1NTk1MzY4MTJiNGUyMmFhN2JjYjEzZTRmYjE3MjJkMjhlMDQ1MjE3YworUEs6ICBhOTQ0NTkyZGJjN2Q3NzAzOWQ3MjAyNTZjM2ZkMzQwZDM0ZGI4OTJhYjEzZTQ4MTJkNjYyZTI4NDBjMjhiNmQwCitNU0c6IGE2YWE3YTE5MGQwMDNhYjE3NTMzMmI4ZjU4ZTdjYWViNjkwODU0ZDlkYjU2ZGJiNjk1N2IzZmI2NTRlMmUwZGE5OTFmMzE1NDIxNDIwNDEzNWRmMWUxMTA0MzE3YzllM2M1OGVlZGZmMWZjNjFhYmE1Nzc0NGMwYzdlZjQ4NjAwMGE3MGIyYzE0MmViYWRkYzA3YWIwNjVlMmE4NTVkYWYxOThhNjgwM2FjMjRlZjM3MjQ0ODdjMTM1MWRkZWRhMDUxMzkxMzQ1N2Q3Njg2MGQ3OGE5YjZiYzNkYmE2NmM0MGU1ZmMzNDlhODczYWQ2MDY1Y2U3ZDdmZGMyY2M0ODNiM2FlZmJmMmYwM2RkNjY5YmQ5Y2I4ZjYzY2VlNDc3ODVjYWNiMDlkODcyYzlhZWI4M2U5ODY4NDA1MjU0MzI0MDM3OTgyZTA4NjEzNDU1ZDk1MjFkODhlYTJmZGEwMjBiZTczMGNmYzhjMDdjYjBiMzc2MTRjY2JhMmZhM2VjNDk4YjgxNWJiNWFkYjk5NmU4NDhiMzhjMDE1YTZhNWM3NTJlYmRhYzdiOWVlZDhiNjk2MTlkOGM4NDZiNjZmNzgxNmQxZGYxZWJjMjEwNzFjZWYwYjI1MWUyZWFiNTk4MjdmNmQ2MDU1MDg0MzcwZmQyN2MyMDNlODZhMTg5ZjFlZTExZTg0MDNhYmRjYmQxZjQ1MzQxYTgyMDUyNWQ4NjM3ZGM0ODRhNTE4NWQ2NTUxY2I4ODJhOTZiOTk4MWE1ZjFhODIxZjI3YjY1NmZmZjkwZTdmNjliZjI4NmY3NTJmOTcwZmZjYTVjNTNlMDg1MGIyMGI5NGY5NDMxNjI3MDk0YWNlYTkxMmE4ODBiNzQ5YTZmODBiYjIwNmNjYWE3NDZmYTcwYzgzM2M5ZjMyMzA4OWNlMDU1OGM5ZGMyMDBkNTczOWQxZTQ5OTYzNGYyYzE2ZTU0YjdmNmQ3ODE5YzQ3MDcxYjYwYmQ1NGRkMGYyNzNhMzE5NzUwZmQzYzUxMGE0OWFiNTZmNjMwYzdjZTZkODAyM2Q5Nzg2MjM0Njg1OWJjMGI0ZDYwNTIyNDk2OTcwODkwMzc2MDMwMTQwOWM2MGFiMjUxNzU2MTFmMGJlOThiMjNhOGNkOGFjNTM1ZTM1MTNiYzc3ZTE0NTIxOTNkYWRmNDQzNWU2M2MzNjI5YjY2NmE1ZWE0YzRiYWQzNmVhY2FkMjYwMTQwNGVhYmQ4ZDlhMDc5NTZlYzJiNGI3YmI2MzM2ZWQ3NWI4ZGY4ZjE2ZGU0MmMwZmNhZTkzNjUyZTNjNDA3Y2JkNDVlOGQ0MTNlZjUxZTg1NDJkZjYyNTEyZWU3OTNlNDEzNThhMWRlMTkyNDZjNjU4NmIzYzE0MDc0MTA0MjFmNmU4NjVjNzVhOWY0YTZhNDc4OGY4NGE5Yzc4MWQ4ZjgwMjRiZmRiZTI1YmRjN2Q0YjY5Y2JhYTc3MTk2MjhjMGIwN2VjMmM0YTIzNGZmZjRhYzNkNDkzNWI5Y2U0YzhhMTY5NDdhYmU3OTUxZmY4ZDlhYzkyMTVlMzM4ZmEwZmU5MTI0MTc2ZDE3YmFjMWUwNTU5MmM0Mzk4NjhhZTVhNGY3NWZkMWVhODJhYTQ1NGMyMGE5MzlkZWRhNzI5YTBlMTk2NDZjZWJkODIyMDQ5YzgyNWM3ZTMxYzZlZmFkNDVlMzA2ZjJkOWYwNTY5ZTA3MTczMzFmNDgwMDRjMjZlYmZlNjhmMzg0M2U5MGY4MDY3MDMyZDIxZTc4NmM4NTM5ZTAxYmUzY2VhYzU5NTRhMDU0NmM4NGI3MzRkOTk5NDU2YTdjNDVmOGNlYmFhNDc4ZTU0ODAwN2Y5ZDNhZjgzNmY3NTRkZTQxMjNmMmYKK1NJRzogZGZiOWI2MzVhYzBlZGY4M2I3YjU5ZDBiODQwOWFmNDc1ZjY2ZmM5OTQ2YWYwYjdjNjNhYjhjZjU5MjlkNDcwMWExYmY2Njk1OWNkZTYyZmJjZjU5YTQ4YWIzYmJhZjBiOWE2MWI2ZTAwYjIxODFlYjkzNDI4MjA3MGE1ZDUzMDAKKworVFNUOiA3MDkKK1NLOiAgZTFkMTQxNjUxODkyMWQwN2M4YzM5ZTI5NzNkOGVhMTI0OWNhYThiZjY1OWNjMzZjNzkzN2Y4NGVjZTdhZDRmYworUEs6ICA0OGJkY2MzZjFhNWI4MDU4ZWQ5YTMyZWYxY2M0OGNmN2E4YWI3NmE2ZTQ1MTllNWE4Mjg1NTI0MWFkNmZmZjhhCitNU0c6IDNkMjYzZGUxYWI5MWU4ZGQ3YjMxN2Y3YTI3ZmI2MGE2ZTE4MzhjMGM3OTNiMDNhYmJlNzA4MmI2YmRhMGM3YzQ2MDYyMjYyMTkyYzg4YjY1YzAyNmMxNzQ1ODRkMjk2NDk3MTA0MjlhZTQ0YTQ2MTQwYjRjODJjOGEwYjc0ZDU2YTAwNGY4ZTJmNWMxOGY4NGYwNDY0MTUzNzcyZjgzMTI2MzNmYzZhZDI4YTdkOWZiNTVmN2Q3OGNkNjQ4OGNhNTgxMTdlYWY5MjNmYTI4ODc1ZTJiMzE4OTg5MzE4NWFhM2NjZDA0NGQzZjExMGUyZTdjYWJkZjZmODE0YjlmZGQ2NzMzYmQ1ZjMwN2E4N2JjNzNiNjI1MGQ1ODgzOTM2ZGViMWRiMGUwYWYxYmU3YWIzMjliNWM2YmQ5MzViZDhmOGRjODg4ZjBkMWM0NjRlZGJjMDIzY2JjMDgwNzUzZWU4Zjc5OWYxMDcyYmFkMTE0NGRmYWE2MTVhNTllMmFlZGM2NjJlODNjYjFmOGU1MjA5NmE3ZWU0ODNiZjg3M2IyNWEwYzA0YzE4NTFhMGU4NzM3NTA2M2FhMWE5NGZhODM1YzA1MjY0MDM2NmI3OWY3MzVkMzI4NjE5N2FiMzJlYmRiNTEyM2Y2YjQ3YWQzZjQ0MmM0NGM1MzBhNjhmODUxMjc1OWU5Y2YzODZmYmEwN2I4MDY0YmM4ZmU4M2UyNDU0OTVlYzQ1Zjg5MzhmODI1OWRjODAxNjIwNWY3OGQzOTU0NDQyZWMxYjQ0NWQ4M2Q5NWFkMTgwNWE1ZTBlOGIzZDU2Yjg3MGEyMGRhMThkNzRmMjZmNTUwYTljNzUzNGE0MTQ0ZGNiYzFjM2NkYmJlNDcwY2MxNTM5MDUwNDMwODhmYWNmMWQzMDM1NTlkZTQxZTk2YzBhYjQwOWJiMzZkY2YzOGNjOTAzOGE2YTQ5MDhkZWE4MmE2NTMxOTVjMTZmMjkwYTdjM2FjNDg3NjM2Y2M1YmNiMThkMTVhMTRhYzYyNGM3MGI2ZjY0NjJiZjI0OWUwMDBjZWU5MjQwMThiZGY3ZGRlMzkxMTRjYjRmNjUyZTEyMmU4NzQ0ZGEyOGIwNTg5ZTEyODRkNzBkOWYxMDZkZTE2ZDA3MzY0ODA4MGU2NDM3ZmYzODRlNjgxNzdkNWNiNzE4ZTJjZTNmMTdiYTFlOTkwYWUzY2U5NDA2NjAxMzBlOTM3NTBiODJlMmZiNDFhYTM2OTc3NDU2OGQ3Y2YyODY3MjVlM2M1OGY2M2U3M2Y4Njk3YWVlY2M3MTdjNWNmMWFmN2FkNzRmNDQ2MjkyYzkwNWQ4NGUyMmIyM2Q0ZTBkMjYwNGJmZjQ4ZmVmYzQwYzYyMDRiNWUzNGMwNDIyOTJlNTNiZWM5MzYwMTU5YTVjZDk3YjJkZjU3ODZiOGY1YTI5MmMwYjM5ZDE0YTg3MGE0NTg4ZTY3YmQxMmIyYzJmN2E0NDA4NDYyODUxZDJhYTc4Nzk3MWQ5MzE1MTkwZjQyY2M1ODhhZjBkMmRjZDkxZjMxYmI3MTVlOTI1MGYxMTkyODE0ZjdiOGEyMWZlZjQ1MTdiMGNmOGJiOGExYTFhNWY1MDBlZTIxOWRmYjQ2MTMyZWZlOGU5MGJjNDkwOTNhNTU1OWY5NjgxYjRmYjU5ZTViYTllZjNmMDVkMzRlZWQwMzRjMTRkNzdlZTk1ZWJkNzZmZmE1YWYwYmVmY2JhMThmZGY5MzJhZjQ4NTQ1MTBiNzVkYjAwYTcyNTdiMjM0ODg3ZDQ5NjA3ZGZkMTYxODBkYjUxNmM3YTIwY2NmY2FlZGE2YWVkZmI2YTIzNzdmYmYzMWU2N2I1MTc2NTVkYjczY2EyOWUxMTg2MjRkNjA4MAorU0lHOiA0MjMyZDJhNDgxMDg0ZDExOTZkYjYyZjIyZGM3NGNmMmVhZjJkYjBkZjA1YWQ3Y2RkZTY3YmZjMjliZmY1NmNkZTAxOWFjOWYwM2Q4MWYxODI3ZWIxZTNiMGFiZTAyMDRjYTdmNzdmYTg3NGFiNTI2ODM1NGZmMDhiYjdmNDgwMAorCitUU1Q6IDcxMAorU0s6ICAyYmY3NGYwMDRkN2QwYWY3M2E4M2VhMjA4Y2MyMDY3MjNkMTg4ZjRjZjYwN2JjYWQ0YjY5ODAyNjhmZjIxZmE3CitQSzogIDhmZGNkOTkzNTI0MzhiZWI1MmYwZDE3NDJiYWU3MTg0NDUxMmRkMDY4NWFhZjFjOTA5ZTM4ZmM0YjVhYWI2Y2MKK01TRzogODk4ZTQzMDNlYTViZWJkMjAwYTVmNzU2MmJlNWY1MDMyNjQwYTNmNWNjZmE3NjQyOTIwNDVhMWEzNjhkMDJhYTU5MTA3N2Q4ZjMwNGY3NGRiZGZjMjgwNzM0NDU0ZWQ4YzI3MjdhZmYzOTJjMTA4YzUyNmU1MjdlNjcyYzUzOTdiMmQ3N2MwMWY3NzQxZWY4ZGNjMjUxMGVlODQxYjU5ZGQxMGY0ZTFkM2FjNTAxYWY3Y2JkYjg1YmEzMTEyOWMyNjJmZGUxYTBjOGJjODNkNmZmOTQ0YjZiYWUzZmE3ZmI2MjU4N2M2ODFkOGUzNDI5NjVjNTcwNWZkMWE2YWIzOWU1YTA3NzBlZTc3OThkOWZiNmMwMDE4YTUxNGQ1M2FmODQ4ZGI2MDQ3Y2QwMmRiMzUyZDU1NjNiNTM2NjIzNzNiOTcxOTM1YTFhYzJiN2I2MzYxZGFjNjc0ODc3MTgxM2Y3NzQ5MzE2Njk0OTYxYjk0MGZmMzgwNTgxMWE0OWZhMjdhOWJhNDU3YWQyODg0OGM2OTcwNTBlMDE4OGQwNzczZTE3ZmI1MjE5NGUxOTBhNzg3MmEzOThmMzFjMGYwYWUwNjUzN2EyNzNmZmI1MGMyYzgxNjQ0NWFiODgyODExOTIyYzA2MjE1NTZjNDZhM2EwZWM0MGJmZWRiNDExZTkwYjZkYjFkZGQ0YmJlYmI1N2QxMGRmNTY2YTYzZDcyNmEzMzMwODUxNGNlM2I0OTlkNWU1MjZjMjJiOTU2ZDhiOTk5MTNkY2IxM2U0MzdlOTQ3YjY2NmM0MWM1NGQ4YjNhZTIzNTY2NDdlODAxN2FiNjc4Mzg2YzkyNzIxOWFlN2JkZGMwZDgyMTI2NWY5ZGM0ZmYzZjhjZTViZTYwZjhlOWRlZmM1Y2EzMzUwNjhlZTI5ZmU4MzA0OTE3Yjc4ODc4NGEyMzg4YTMyMDE5MmY5MzI1ZDBlNmNmZmZlYTIxZTZlYWEyOWU3NzA3ZjYzYTllYTRmYmIyNTU4ZTNkMDgzNWJhYjFmNTIzNjEwMzdhZTU5ZTUwM2VlOTZiOWQ3MDhhNDdhM2FlNGJhZDExM2UyYTQ2MGEyNjljY2YyNWEwMDAzY2IzZTY4YTU1MTg2NGU1OTg0MDkxNDc5MTEyNmY5NTQ3ODhiMjViNWFmNWFhZjU4NmViYjg3ZmE1ZjM3N2I0ZDdkN2Y4NGMwMDBkZDJjYjQ0MGUyMTRkMzhkNWVjZjcwZjIwZTk4ODE4MjhlZGFhMWRiZWMzNzA5M2RiOTYwNjg2Y2ExMjNmMWVjYmE2MzM2YjM3ZjQ2Y2Y3NjViZTI4MTRiOWU2NzA1YmM5ZDZhNDkzMTgxMThjNzUyOWIzN2M4NGVjODhkNThhODQ1M2RjYjY5MmM5YTM2MDE2Yjk0OGViZTZmYjJjMWQwYWRmNWYxOThlZTMwOTdhNmZmMGI4ZWViYmFkOGIwNzY5MzMwYjE4Njg5NTE2YmMwZmU2NjhiMGQwNWUzYTU4NGZjZjg5YzQ5ZGI1MDFkNjFjMmRlZjdlZDM3MjIwNzAxOTNhNWI2ODNjNTA4N2VmMjc0Y2U2YTE5M2RkNGEzMDM1MzZjNjc5MzRiNDY2MGE4NDFlZTFiNDQ2YTY4OTJiMTRkMGIwYWEzZTk4ZmRmZmQ0M2M3OTdhZGQzNjU4M2Y3NGM5NGQwZTJkNjhlMmRlODE4ZDlhZjIwMDU5OGYwYjJiZWFlMTY5YzhkZmJjNGQzOTdlNmQxY2ViNmRhYTZjOWY2YmJmNGY4MzExYmEyNmZmYjE5NGQ0NDIxNmM1MTMwNTI2NzA3NGU4NTZhMWQ2ZTkyMjc4MGY0Nzk4ZTJmMjIwMjIzZmZmMWRjMzcwYzhlMzQ1MTRhYmE0MmRmNTEKK1NJRzogM2ViNWIzMzllMTkxYTNiNjE2ODU0NWRhNWZiMGNhOWJlMjA5MDQzOTE5YjljNzBhMDdiNGE3YTNiZjY0YjEwMmY2ZmZkNmQyYjAyNTU5ZGM2ODFlZDNiOWM4MjI5N2IyMDFkYzI1YzQ5NzM4ODBlMTU1ZTEzYTI5NDI2ZWI0MGQKKworVFNUOiA3MTEKK1NLOiAgZjVmN2Q1YjczYzVhNjUzMDFiNWI0YzY3MTBlZDEyYzE2ZTc5MDMxNzdkYjc5MmNhNzE1ZTIzMzg5ZDA1ZDgzZQorUEs6ICA3YzQ3NjJlOTc5ZjBjN2UyMDdiZTE4NDNlMjY2NmFjYTI3ZWE4OWJmZjViNjFkNTczYzk4NWZjNzAyNWUxZTI4CitNU0c6IDdjOTMxOGQ1NmU2M2YxNjUzNTQzNmZhNDVhZmUyNzhlNzRlNjE4ODFiYjQ2ODk5N2QwNDE4YmM3MjBiNjMwZGFkYjgxMjhiNGI2NWNhNmU5MjFlNTAxODEzZGY5ZmUwM2I0ZWYwYWFlODAzNWRkMDhjNWY4MjBjZTVkZjEyZWUxMThkOWMzNmQzYjE1MWE1MmMzZjk2YWUxY2E0YzgyZmQxOWRhNjY5ZGRiYTk0ZmViZjhlYWM4YzQyYjQ0N2JhYmM4YTYwYjM2ZTgwMzYyNGY3ZDIwNDdiZDhkOGExNTM2ODdmMTBkYzFjYTgyMTAwYjdjODdkMzIzNzBlYzhmMjY3MWVkN2QwNjdjYzgwNTg3Y2FiOGRiM2E3MWNlNWU0MDYzMjdmNzYzZWMxYjNjMTY2NzcwYTc1NTM2NjMwYzgxNWZkODI2NzU4MmQxYjUwNTFmMGY4MjFjMDIxNTBiMmVlZjM0OWI1MDU5MDMxNGFhMjU3MDc5M2ZhNjRhNzZlZDJlZDgzZDJiYTFmOWI5ZjExNjMxNTQ2MTJiNDlhNjRhZDhkNTU3M2MyNWIxY2QzN2M0MWE0NGUzZGY3OGYxMDUzZDkwYjA2OGYwZDM3YWUwMGM0YTMyYjFhM2ZmODc0YzQxZGE0YTcwNDMzOTJmMThlZmU1NTE4ZDc2ZTg4YjQxY2VkNjllNmY0YzAxNGYwNmViYzUxNDZlNjFlODJmYWUxYzQ5YzM3YzM5NGZlYTM0MTk5YWI4NmMxMWE0NDY3YTM3NGU0MDI1NWEwNWQ0MjY5NzE0MzBkNTZjZGJhMjVhMjFhZDc3OWNjN2Y2MmQyMmNkODdiNjBmMDg5MWJkODU2YTUxN2UxNGI3MmE5YWM3NjcyZTRlOGZiMzc0YTk3NThhYjBjNGU1OTY0YWFlMDMyMjg5NzNmMTczYTVkNDJhZWY5ZGIzMzczNmMzZTE4ZDhlZWMyMDRhMWExN2I5ZDA0NTkzZGVhNGQ4MDRjYmM4MWI5YWM1NDU4MDUwNDk1NTM5OTk5YTk5ODU0ODdlN2NhMTFjMzc1ODJlZjg1Yzg0MWU4ZjA2NWVhOThmZGQ2YjFjNjBkZWExZWMyODgzNTIxNTY4ODU2YTZlYmIyNzQ5ZjIwNzJlYjQzNDQ4YmUwNzA1ZWQ0NzdjZjRiMjAwNDg2NTIxN2RlNWZhZGJlMmEwZjlkNmI4NGIzZmU3ZjdiZjZjNzc1Mzc0OTYyNDZlYzc5NmI4ZWYyYzA0ZjY4YWI1YjE0ZmNlMGM2ZDI4N2I4MzYyMjdkOWYwOGZhMGVlMTk3MjJmNjc5OGE1ZDgyODBkMTA3Y2ZjMWJkNTkyZDlkZGM3MjRlYTg2ZmMzOWRjOTRhMzk0MDE5ZTNhM2RlOWUwZDFjNzM1ZTg2MmRlMmJiOTUyNWI1ZmI0YmQxMjEyMTJiZmFmZjlmZjU4NmFjM2M3NWM1YWNlNzQ2ZDljYTMwN2Y3OTVmZjI2OTdmMmI0MWE2MzQ2ZWQyMzM5N2ViMzg4OTg2OTFlNmY2Njg0MTYzN2QwYWIwZDk2ODMwOWUwMTk0MDAyMzA5MDE1NDE2ZTc0NDcyZmUzMjQyNWQ0NWYwN2M3NzExOTE4YjFlNTc5MGY1NzJjZTQ0NDEwNDJkNDI2MDMzNzkyMjk3YjVmODFlMDgwOWJkOTY5MWYwYTUwNWUzMjU5ZmMwM2M5ZmYxMDdlYjliNDg3OTVmNDlmYjA5YzFiYWI1NjU5ZDM5ZmZlY2JkY2M0MDNlMzgwM2RjMDEyNDM4YzJmYjM2ZjY4MzAxNWM1ZGYwNDgyY2I3ZDdmYzU3NTczNjRhMGEzYzEwZDBlMTI1OWMwMWZjYzRkZDU0OTRiNTI5MGE2OTRhZWEzZjZmYWU1NDdhYzU3NmYKK1NJRzogNThmYjM5MmY4MmQ1ZTUyZmYwNzJjYzc3ZWZlMDQ4ZjIyMzUyNTBjNzExMjVlZTgyMWM1ZjNiMzkzYmNmMmZhNDZiZTRjNWQ4Y2FmMTNjYjUxOWVmZTBjMmZhZDllZTIzMWFlOWI2ZmQxZmQ1MDljOThjNjljMmQzNmM3NTNlMGUKKworVFNUOiA3MTIKK1NLOiAgNDNkNGJlNmRlOWNiMDA4OThlOTlkZGNjMmUxNTMwMTEwZmEyY2JjNDM3NmM0ODVlOWNhNTdmZDY1NTg2ZDhhMworUEs6ICAzNjMyYWQzODliZTJmYWIzZmJhMGQ4MDRiZjYzNDVjZDMyMmVkZGQ2YTc1ZDhjMzdmZDRiNWJhMWM5YzI1ZThmCitNU0c6IGQ5ZDU1ZGFiMGZhNmRhNzZiNjhlODQxYzI0ZDk3MWJhYzFmNzlhZjUxM2Q4MzRlNDI2YTVkMDgxMTRjZThiNTRjZThiN2FmZTAxNmIwZmFkMDNlZTc0NTBjNmMzMDk3MTczNjgxYTRiMmViOWY5YzE3OWE4OGU3Y2MzNjgxM2YyZjVkMTVmNzk5OGFmYTlmZDRlNTQ2YzczYmI0MmU3Zjk1MjJiZTZhZmFiY2E4YzdiNjRmZWQwZTI5MmU0Mzc1ZjNlMWU1ZmQ5ZmNiNTM5ZjRlNWU1NDNmYjZhMTFhMGRmMzIxZTcwMDg0YWFhYmI3MGE5OTUwY2VlZTNkODc5YzM4NmVmY2ExZTU5YzNjYjdjNDViNTYwMDk1ZTdhZjAwZmY1MmY4YTFhYWE5Y2NmMDkyZjBiYjgwNmQ5NzYxMDc0MmFjNTgyYTNhYmJlZGRmMzlmNDlkMjI5ZDMyYTExODZkMDIxNTE4ZDc0NzI4ZDEzZDk2MjYzNWQ2M2JhYTY3NDNiMTI2YmY0NThmYTJhYzc1NmZiZjg4MDk2YzhkMzM0MGM2MjIzOTA1MzRhNzQzZjE4NjRkNTRkZWFiNWU1NTM2MzcyY2U1YWM5Mzc2MjI4NzQxNGVhZTE1OGE3NmJmODFkZjU0MTdjZjRjMDQ3YmUzYWMxNDc1YzUxN2ViZDNhYzFkMWQxYmRkYTExYjNmOTljMTgxNzNlMDMwYWNkNTFkMmI1Y2Y3OTUxNjUwOTQxNTQwNTA3NzUxMWJkZDljYmUxN2QwNGY0NzgwNWU5OGQwZDE0NWU2MGE1ZDBlMGY0NTNjZDliNWMxYTI0ZjEyYjc1ZThjYzM0ZDVlMDA2OTFmZmFjYmZmNzg4ZmVhODM0ZDlkNzc5YzFlNjEwMjk0ZGNlMTkxNzBkMjgxNjBjZmY5MDliZWE1YTBhYTc0OTQwMTc0MGVhM2FmNTFlNDhiMjdjMmIwOWYwMjU0NDQyNzZjMTg4YzA2NzFhNmRhOTRiNDNkMWU1MjVlNmE0YThhMWE3M2RmZWRmMTI0MDE4NDZiYTQzMDY4YTA0MDkyYjEyOTEyMjcwZDJiNjBkZjYwOTk3Nzk3NTZiOGJiYjQ5ZWNlODJkNTVmMGY4ZGIxYjgwZmI0YjU5YmJhODYwYmQxOGM3NWQ2YzgzNGQ2OTQ0MmFlMDMxNGNmMjM5OWY1MzkyYTNjNjcyOGM2M2U1YzUxNmM0MjIyYWFjNjBmOTE2ZGQ2M2QxZDA1MTdlOGViMTBiZDBlMTVlYjkwNjE0ZGViMjk2NDAzYWQxNWI4YzEyYjllOTcxZWYyZjAxZTU5ZmMzNWQ5MGM1NWE4ZTIwZTk0MzdkZDQzNGIyNmQ1YzJjNmVjMmQ1M2FjZWMxN2U4MWU0NzgzMWRjMmRlODIxODNkNzEzYjU5YTRkMWY0Njk2OWRkY2RkYWYyN2Y0NGU1YTMxMWFhYWMzOWMzZDVhOTdiYzkwY2FkNzEyZjQ2Zjg1ZTZjOGZiZjVkNThkOGJjM2VjMjdkMzEwYTllYWYyYzM2OWNiMDA2NDk3NzAzOTBhM2Y5ODhmMzYyZWZjMTU1ZjU2YTE0NmE2MjY1MDU0N2U5MTUzMjUwNzAxZWVhZDFiZDAxYzg5NDYyMjcyZGZhZjBhNDMxYWY0YmQ3YzNkYjQ1MWFkYTYwMzIzM2ZkYWQzYWE4OTk5YWEyMWUyZDNhNDNiMGI1NmZjNmE5MTI0ZDMzNTk4YjM3MzdmNGU1Y2IyNThiZWRhNzU2YWQyZTE3ZDA2OTFkMTVkNDE2YmI3Y2IwN2VjOGQ4YzdhZjVkZTgwZTViOTM5NGUzMjBjNGM2ZTQzZWZhYWU2ODRhZDAwZjZkZDIwYTg3NTBlOTU5YzJmMDQyMDZmYzAyM2FhMTkwYworU0lHOiA4NmFlOTMyNWY4MGI5ODg2YzgzODFmOTZhMThjMjEyMGU2ZGIwMTZhMGQ2Y2EyODJlZDkzYmE5YjYxY2FlYzAyZGU4OGVmY2E4YjhlOTE2YTRiMTZhNTg1MjVhMmY2OGQyMWU1ZmJlNjdkYjRjNGQ2MjA5NTk1YzRhYmMzMmIwOQorCitUU1Q6IDcxMworU0s6ICA3ZDAxMGQ3NjBmMjRlNWEyZGUzNDA4OWM5ZmRiMTljMzNiMTU1YjBhMzdjYTQ1NWE1ZTViMWRhZTdhMDczMTc2CitQSzogIDRjODc3YjNjNDk3MWZiYjU1MTE2NmUyMTRkMWM3NjI0YzUyMjc3OTAzYzU5YTU2MmE4MGI5MWE4NTQ4M2ZiNDcKK01TRzogODZlMjExNTU3MmJmNGMwMTNlNmI0YjA0ZDBiMDNlNjA2ZWU3MGQ5MjljYjhlYzM2ZjRlMmYzNTVkYjNiNWUxNTczZDY1OGQxN2JiMWEzMTBjMTY5ODlhMTZiOTU1ODkyMmVlNDkzZjM1OTA0MjEwM2M0ZGMxYjQwZGZmNzcwOTkwMWZkNTgzMDEzM2Y0MmM0NjUxZWNhMDA4YjQ5OWVlNGY4NGNkNGVjMWVkYWE3ODI1NmVkYjYyZjI0MDIxYTAwNzYyNTY5MTllNGUyY2UwYTVhMjBmOTIxYzI3OGNjMjk5MTU5NjQ0YjVlM2EzYmJkMDg5ZGNiYmViYWQzNzY2YWVhNzdlOWYwOGVlNWY3ZDRjMTlkODE3MGJjM2RlMWJhNzc5YTc2OTkxNGY5NjVkYmRlMmI2MWJhZDIxNGM1MDgxODYwNDFmNzZjMjViZTk1NzY1NmY1Y2ZiNzMzNGViODM4YTNjZmJjNTVjZmJhYjY3YWRmMTU1MjYxOTk0MWI4MzVjZDNlMzQxMDNiMThiNDkxMzFlODIwOTZmMDVmNTcwYjg5OTgwNGJhYjhiNmNiYWRkYmJjMDJmOWYzYjU1OTczNmQ5OWNhN2IwMmQzMjY4ZmEyNzM5OTZmY2YwNTcxOTc3ZDFjYzMwMDhjNGVmODQ4OTcwZWUzNTBiMTU4YzQ3ZWMyNzdhZGQ0NzQyZmEyYmNiZWE5YmQ1NTQ5YzdiY2EwMzgwMjBlY2U2OGYxODhjMWVhM2E2MmRkOWEwNzNkNGMxMzhjYThhOWFjMDQwOGRjZmQ0NmUzNmJkZmY3Mzk4OGE1OGI5NjE3Y2FhMDhiZDQxYmYzZTgxMmU3ODI0ZjBmN2U4MTQ2YTQ0NGYzNmJmNTNhMWNkODkyMDM5Y2NkMzM1ZjVhMmU3OTc0NWVhYzk2MTQ4YzJhMjk5OTQ3ZjFiMmUzMjhhMzc4OWJmMTNjNmQ3MzUwNmYzYmRjNjhlYTQ4YWJmMDAyMjcwZmU0ZWU5ZWY5ZWQ2YjEwYzJmYmI0ZmYxMjc1YjlkN2RkMzVkOGE1MmUzNzE3NTg1NzRjYjQ2NmM1N2I1YWJjMjQyOTc2YmVmYzhkOThhMDEzMWI5YmI4NDZiMjE5ZTQ2NjkxODZhODNjMDU2Y2Q4MDgwNjYxZGUxNmI1MWNlNTc2N2IyMmU5YTkzMjQyYmY4ZDMyMDVjNjZhNjczY2U3ODNkMWMwZDM3YjYzMDBmYmYwZDYxMjc5NDBmODhmMTgxOWM0NTBkY2M5MDU0M2VkNzk0ZjFmZDQ0ZTY1MzlmZWJhZjE5YTRjYzk4ODcwMDE0ZDdjY2FkNzRkMTg3NmExMjNlY2QxNDU1MTZjNzQzYjRiYmE2MmQ4MjFjYTlhNzk1MWUwZGZiMjNmMzhkOWUzYTM2NWZkODMyMmYyZWU0Nzk5ZTlmZjExZTFjNWMzMGI1NWEzNTVjOGE1ZGVlYTgxYTU0NWUzNDcwNWFiNTZkMTdiMWZhMDZlZDc2NDE1NTU2NzAyZjM2NDgwODI0NmY4NjNjMzE5Zjc1Y2RmNmJkNzQ4NDM4ZDFhMmVhZjQyMDZjNTYwYmZhZmMyMzU2NzlhZDYwNDljMWEwMTUyNmZjYjlhM2NlMWIxZDM5YmU0ZGYxOGIxNWZhMGVhNTUyNzJiMTdlYmRlZGY2YzMwNDk4YThhMTRmMjA0MmJlMWMyY2RiMDllOWVmMzg0NmQ2NjU5YTlmNmQ2NzNkZjlhZmI3ZWRlZDA0Yjc5M2Q5NzMxZjBhY2NjNDE0NjhkYzFmMzIzNmM5OWFjYWRlZTYyMzljMzYxYjhiZDdlMmQwY2ZlOGJiN2MwNjY4N2UwOGU3NmI3MWFkNTdhMDM2MTc5ZjI5MWQwOTZhZTJmYTA4MThlZjRiZjQ4NjYKK1NJRzogNTU3MDYxMzg3OWFlMjI3NzhiZDU0ZjE0ZmI2ZThjMDI1NmE3MWYzZDc5YzNlNWNkOGU0MWFlYThjZjc3M2UyNGQyOWYxZjFiMjRmOGM4MGQyOTQ5ZTgyMDE0NjVkYmRlODk0MGIxZmFiNjQ4M2IwODVkNDE4ZTI1MTAxNDIwMGMKKworVFNUOiA3MTQKK1NLOiAgYWFhYWJiN2NlNGZmZmU0ZGMzNTc0N2JhZWEyYmM1ZjA1MGJlZjA2ZWUwYzFmZDYzMmEwNjdmZWNlMWVmNGZiNQorUEs6ICA4MjBhMjQ0MmQ1ZjQ1ZjNjNzkxNDc4ZTA5OGZiM2IwNjhkYTUyZWM0ZThkYWRlYzg1MDY1YzM1NjU5ZjQzN2UwCitNU0c6IGY5ZDI4NTk3YTNlMmI2NGJhMzI3YWM1Y2QyOWYwODFlNzRiZjQ2MWIyZWIyZDNjZmQ5ZDVlOTIxNThkMjFkMWQyYTQ3YWI1MDk4MWNiMTlmZTNmOGM2ZmU0ODgyNDliMWM0OWZiODk3YTBmZTIxYWI1NDA0NDE0ZmQ5MTQ4NzVjMjIwZjFjYmMxMmY1YzM4Y2ZiYTc5ZjdhYzMwM2E1MjMxYTM3MmIwMmZhZDZjODQ2MmY4Y2M0OWYwZjY0OTY1YjY1MWRjY2VmMGJiOTYwODIxNTA5MDg0OTE3N2JlNDdiMmQzMDcyOTQ0ZDM2ZTg1NmRhMTg1YzdiM2E2ODlmN2VkZWY5ODgzMzhlMDk2M2VkMzFhNmIwYTgwZDVjYjBiMWNjY2Y2ZjM5NDgzN2FhNmY4YjJmM2RhNWVmYmRmNGQzNjBkNGJmNGRkNzA4Y2U2NDQ1NTg3ZDk0MmI3OTc2MWNlOTUxYjFiYjRkOTA1MDcwMzYxOGE2ZDkzMGE4MGM2OTU3NmZjNGFmMzA2YTJhNTZkYmQ4ODRhMDVhMWU0ZTlmMzEzNmNkMGI1NWFlNDc0YmI1ZDNkMGZiYzliMDMzOWNlYzM0NGZkZDA4NWMxOTI4MTAxNDgxYzY4Nzk0ZjVjODkwMTM3MTA4Y2VhNzkxZDIxZjgxNjgzZDNlMWE5ZWVjNjZhY2U1YzAxNGQ4OWU2OTgwOGU1ZmE4M2QzODEyZWU2ODBmNWE5OTcxNjgxYjhhZGNkNGExNmU5YTRjMTY1YjVlZjk5MzJjNWVkODI1MjM3ZmQ1MDM3YmNiZWZlNGNiMTE1NjRmYTcwN2M4YTkzMjkwNzUxNDE0ODkxYjFlZGQzMzEzYzY1ZjhiOTFjMmU5MjVhM2MxMmE5ZDNhYTQ1ZmQ1YTY2N2I3ODM5M2MzZTM5ZGY4OGE4ZjBkMTE0OGI1MzExZTNkODdjNGE5MmUwYTNmYjkxNWJjOTBkNTU1OGQwNWI0NzVhODgzNDc3OGFhOTQzZWEzOWI4ZWFhOTVhZDE4MzJlNTkxNmVhMzEwMmQ3ZGUwYjgzNmNkZThmMzc1OWRiYjNiOWQ1NmVhODE3YjNlNDljOTgzMjEwMjc3YzJjN2M1YjBkYjE4NzQyMjUzMmZjYTk4YTI4YjNiNjU5YzZiODE1YWMxMjZmYWRiZTJmNDAwYzczZTlkMmRlZGNiYmQyZDNhMzY1ZmZhZDdlNjY2Yzg5NmUzMWU2MWIzODRlZDNhOWZjZjEyOTA1MzhkZjExYjk0NzRjNjI4MWNjNTkyYzcxYzg4MDg4NjhiNDI5MmMxN2VjZTZiM2VkZjVlMzU0MmE3MGI5MTE1OTNlOTNmMzVlY2Q5NzI5YmQ4ODgwYTI0ZWFmNDFmYmM2NTc0ZGZlMTY3ZWMyZDBlN2FiM2RmNWVjMzRiOGI1NWQ1NDhhYjkzNzM4YTJlZWFmMjFjODg0YzVjODU1MWRiMmVkZjJiMDQ5ZjFhMmE4NGZhNzJhYzg5NzhhNGMyNzgwOWYyMDljMWIyMTk1YWZmNTA0ZjY5OTg1NmNjNGYyMmQ0NGViZGQwZmU1MDM3NDQ2OGQwYjE3OTJlNTc0YjUxMTBhMWY0Y2QwZTIyMWU4MjRhNzhkZGM0ODQ1ZmViNDZkNjZkNjMzZDIzY2QyM2Y0YjZmYmU0YzhjZTE2Y2QxYWY2MTUzNmRhNWZhNjdiMTBhYzc1NTVhNjhjMGUwYmRiZjJmOGQ3MjMwOWQ5OTU1MTZiODExOGJmNDM4MzVkMGEwMWMwOGZmZWJhM2VhM2VkMDVjZDJkNTRmMGVhYmNkYTA1ZDAwMzdkNTJjYWVkM2IxOTM3NGZhZjczOTk5MDk0Zjc5MDU1OTI0YmVhOWFlYzQ0NzAxMzVmNWU4YmYxODNjOWQxYzkKK1NJRzogMDUwYWU4YWVjZWVjOTYyN2I4MDEzNzM1N2EyMjk2MmFjOGI0NTA0ODY2MTcwOGQzOTRkMGE1MWFhZGMzODFmZTg1MzUwMjNkNmUxYmRhMGU3MmIzNDliNTBiMjZkYTdjM2EzMDg1ZTgxZTlkZDZjZjEyNzg2OGZjNWJhZWFiMDEKKworVFNUOiA3MTUKK1NLOiAgZTk1Y2MyYTRkMTE5M2I3NTM5ZmNiYmVhYWVlZDk4NWI2ZmI5MDJkZDBlZmJkNjM4NzQ1NzU1MGQwZDZhMmZlYQorUEs6ICA3MmExZmYxZTliYjExYzhkODg5NjhhN2IxNjk2MzdhZGVlNDM4ZTIyNjNmMDA2ZGNhNGZlMDJmZTA2NmNiYWQzCitNU0c6IDg0MjY3NDM5MjAxYjA1OTFkYjYwYzBmMTdhOWMxNWU0NTQwOTI5NTY1MmQ1ZjU1Yjg3ZmIzNTE5NjdjODQ2YTU2N2Y1Y2ViYWFlZDE3NjJiZmY1NDg1ZjA0ODUzY2E5MjY5ZjQ2NDA5NGU1MTJkZjFmMDJlMTNlNTE3YjFkYWE1OGQzNGNhYTJkNWZmOWY5ZTc5YmNhZmI0Y2U5NmU4YTA4OTI1OGFkNjEzNDNiNDQ2NjI4ZWJjNGY1YjJhODRkMDNiNzJlZjNmNzM4NTg5ZmExM2M0MjUxOWE4MjgyOTlhM2ZhZWMwMzUwMzdiYzEwYjQ0ZTNiZGZlZDllMDg3MDcxN2NiYWYzMWJlZjhiMjJjNGVhMTZlODE1N2ZjYmM2M2VlZmEzOWVkODIyZWZkNDIxNWMyNDdkZGE0ODc4NjI3N2VjMDMwYTg2YzBlZjQ4NTFkNjczY2ZlNzUyZDA2Nzc4ODNjMmM0NTIwMzg5NzBjMDliZDQ4MTcxNGJjM2ZiZWNmYTRmZjJhM2MyNDU2OTVkN2VjYzJmNGRlYzdmNWVkZTA0ZmY2ZGI0M2UyYmI5MWMwNjZiNjQ5ZWY3M2ZkM2JlODYwY2I4M2ZhODBiMDc0MTQ5ZjQzMWVlYmI5MTdlYzg0NzhkYTg3MGMxMWUzMTc3MDM4NTlmOWYyZjQwMDhhNmM3Yzc1NGIwNmUxZjdkMjQ3OTY4OWRhODRlODg5MjJmMzgyNzQ5ODVlMTFjZTEzY2RiZGIwZjJlY2U2OGZiNjAyYWRlMDNkZDU0OWEzNjI0OTFmNGEyMDNmZjgwNzQ0ZjY2M2M1MjNhMDI2YjQzMWFhZDQ1YzU4MjllMDI5YWQ2MjU2ZDEyNzZmZDdiN2ExMmRkYmYxNzI3ZDllMjMzZmI1MzQ0NTczNzBhNDI2ZTU2ZmIzOWNmNDA0YTNlY2JmMGM0YjUwYmI1MjJkY2U5ODFlMDgzMGZkODQwNmU2ZDk3MjVjZWIxZGRkM2ExOTQ3OTM3ZDkwZTA0ZDc2OGFlMWQxMjZlMmFlYWMyMWI4YzllZmM1NGM0MDk2MWI3ZjRlOWU4ODAyNWY3ZTBiOWRlOTAxZWJmMDA0OWU3NDFiNzk3OTk3ZDhkYjc4ZTkyODNiYmI1ZjkwZjM1YTJjNGRlZTI3MzE0MmVjMjU4YzAyYWQwZWNjNjFjYzVjOWYxMjEzMmRiMjhhZjQxYzFmYjc4ZTUyNGJlNTMyN2I1ZmZjMzU5NjI3NzlmYjExZmYwYzVkM2VlMGEzMWZmNDdlNzNiMTcyOWRmYTQ2ZTg5ODZiMWI4OWFiYzg4YWQwNmFiZDViNmY3NjZkMjNhYmY2NDIyNTc4OTRlYmRmYTc5ZTYzMDlmMTI3MjM3NGVlOTQzMzY3N2JhMTNlNDUxYmFhOTUzMzBlNjYwYzgwNTJhZTg3MmUwZTMyZTJiMmQxMjg2ZDAxYTBhYjU4MTA0MjRlZDhiOTQwNTQ2NWJkZWJhMDNiNjk4Mzg0Njc2ZmU1ZWE0NjRhMDM0NDZjNGY3Y2Q3YjQzMzEyZWNmMTUxMzYwNDY0NTcxYWQyODYxMDU4MWZiYWRiOTQ1YTFkNjgxODFkZWI0MDNhYTU2ZWJhMGJiODQwMzI4ZWVlMzYxMDNjN2RlMDczYTY4NzljOTQxYzc1NTRjNmY2ZjJhMDgwODA5ZWIwZTViZDBlMTMwZjI5YTIyOWU5MzBkYjAxZmVjYWMyZTAzNmJkZjBlMDAxZTJhOGVhMzI2NGY4NjQ5ZDViNjBjMjkxMDNmMGI0OWMyNGM5N2ZhY2FmN2U4MTA2OWEyYjI2YWIzZjkzM2Y0MjdkODEyNzJjNmM4YjdjZDBkZmI3YzZiYmU5YzBlYWFiMzJiYmRhMjIxOGI5NjIzYTIxMTlhYWIxZjNlYgorU0lHOiAxYjhkN2NjMmFkZjM2Y2FlMTYzMTI1MGM4MjQzMWJkODg0MzcxNjNhNjM0OWFkOTZlN2E4NjQ0NDdlOWZlZTc1M2FjMzY1NWM5ODM1YjRkMWVjYmIzMDZjNjM4YmE1NDAyYWQwMmJhNmQyMjVkOTY4ODI4ODlmZThkMjA0YTYwNAorCitUU1Q6IDcxNgorU0s6ICA3N2FkMGY5NDJjMzdmMDMxM2U2YjA0NTZkYWJhZWM4MWIyZDYxZjZjMTE4ZGRiMjllYWYzYWM1YmYxOTUwNGQ0CitQSzogIDY5MmQyZGE1YTk1ZjQ4NjExYTZkYTg5Y2ZiM2IzNTQwZjZhYTBjODUwZDZkOThkZWVhODcwZTM5N2ZlZGUzMjgKK01TRzogODdlNmRlYWQyYzg1NTQ5ZTNkOGQyNTg4YTBhMzM2MDYwM2E2MjRmYjY1YWViYmMxMDFiZjdmMWZlYzE4ZDBiMjhmYmQ1ZGJhZWVkMzg3NTJjZGY2MzU1Y2U4ZGM4NGUxOGFjMWE0MzkzZDJhYjg4ODg4MmM0ZmYxYzljODEzN2Y4M2JlZTM2MzM2YmNiZmJiNzJkNTA0OWUwYTQwMDg3NDUxNGZkYzM2MzMwNDZlODkzODNkZGVkOTNjYTMxZmRlMGQ4OThlMTFlOTI2OGQzZDVjMjQwNjY2ZWQ1NTI3NjEzZGE3OWZiN2U0OTYyNWI0NGNkZTc4YjQxYzY3OTAyZWIwMjE2YjNhN2EzZTU2MGUyNjFkNzFkNzY0YWFjZjE1OTU5YzE3ZmNkNjE3NmZiMjVlMjQ5ZWU2YmIxYjNiZDdiZDkwZjYwYjBiMGZmYTAzMTVhMDY1YTI0YmJhZThmMjU1YmYyOThkN2U0ZDQ0ZjBiNDMwYzQxNWI0ZmIzNmNmYTY2MjZhODNmNDlhMjU2N2Y2MjQ0ZjQwZTkyM2FkZDFkNDlhNzJmNTdiMTUzMGY1YjM3OWRlM2E5MWMyZTlhMWFjNzlhYjM3YmMzYjliYTczZDg4MjgxMzZiY2M4N2QyYzAxMTkwZGU1NDU3ZmFjZDkwZjM2OTU1M2Y3YWM1MjFjNTY3MmIwODY3ZGZhOGRhM2I5NTJhZDk1YjY3ZGFiOTliNDgyMDU3MmYyZDRhMjk4ZTk1MTg2Mzc3NzkyODljMDMxYjc5M2RlZTg1OWNkZTdiMjRhZGQ2NDlmZmY4NzEyNDhhNjYwMmQyNTE2Mjc5ZGE2MDU4Y2JiNjk2ZmE4YjFkODlhMjBkMjA5OWU2NDY0NDMyMTA0ODNlNWQ0MTM0ZTkyOGZhZWIzOGEzYjUwODE5OWUwZDY5YmI1NWVlMzQ3NzQyMDVjMGE2MTIwNWI1MGIwOGZlYmVhYTQwMWU2ZTNhNTFhMmJmOThlZmFjNzhiN2FlMmI4NTJjNTM5NWExMmM0MGUyYzdkZDFiMjAyNTA0YjVhN2QyZjdlNGZkNGY4NjEwOTMwZDI4NjhjYmE4ODY0MzM5ZTA0MWRhMjFjMDcxNWY0MWIyYjIzZDE0ZDBiNTQ1NDgwYmMzYmQ3ZDcyMTVjZjJmODE2YTMzMzIwODFlY2FhMDhjMGY4Yjk5NTI1MjUxZjU3MjMxYjY3NTBjMmRiZDExMDlhYzQxNjA0ODZiNzY4MzI0YjZiYWM4N2VmNWEyMjY0NDhjNDMxMjQwMzI4ZjQyY2NhNTg2YmU3YWZmM2NiZTc2MDVmYTM0MTUxNGZjY2ZiOTY2YWYzZDQ1MzBlOGNkOTAzN2ExMWNlNTkzYzJkMzgzZTEwMzVhMGMyZWRhMDk4ZGU5MGQ1MGM1MTg0YTljMDFiNTdmMjZiOTRkZWRkMTQ1NGMzNDA2MzdlY2NjZWU3MDYyNTc1NGEzMjhjNjVmNDI2NDViNWUxYTU2NTVlZWY5N2RmYjFjNjMwOGVkZjQ5ZmEzNjhkMTdkMTdlMDZhZGM1MTJiMzk3M2VhNjUyYWM0MGE5OTc4ZTFiYjFiMmY4NmM1YTlmZmJmNjBkY2M0ZjZiYmM5OGE2NGY0ZGU2NWU3ZWM2MTcyMWVkZWIwZTUyMzg0NTZmNzYxZDJkMTI5M2FmMGRlOWY3OTNiMTFkOGNhZGYwMWE5NDMxOWEwMmE0MjczZmZjNGQzZmZhN2IzNGQ3NGZkMmUwYjEwMGZjYTU4YjUzMjVmOTA3YTc0OTE5M2U3NTFkNmMxMTY2ODdhZWUzNzQ3YjU5NDYwZDRlZjE1NmU3MjQ3NmVhZTFiODQ1NWQ3NmU3MWIzMDZiOTgxMjliNzJmZTFjYjVlYjQwNWE3YzJmNDMyN2YzODYyZDQKK1NJRzogNjk2YmQ1NTJkZDAxZGI4MGIzZDY3ZDYxZWViN2VjYzU2ODc4NDA0YWIxMTk0NDJhMWM3NDIyOTkyY2ZhMzVhZWE5MjA4MjVkMmRhZmQ4OTJhZDdlYjY4MjVhZDk5OWFlZTVjODNiN2I1MDc5MDY1MzRmOTFhY2U3NTljNTUxMGMKKworVFNUOiA3MTcKK1NLOiAgMjkzMjE0NjllZTlmMmJiMTY1YTA2OTY0MDMzMmI0ODliZjVjM2ZhYjY4MmU5M2RhZTlkODYzMTdiZjUwYzUyYworUEs6ICA5NmY3MzBmOGVmODk3MDI2OGRiYTBmNzU3MDQxMGI2MTg4YTFhM2M4NjM5Nzc0MDkxM2Q1M2FkYTI2MmFiODdlCitNU0c6IDljNzEyYzgzZDU0ZjJlOTkzY2E2OGE5NjMyODQ2MDA0NDk5YzUxOTU0NDhkZGM0OTFjM2EwZDJlM2E2NjZkNmIzMzA5OGU0ODY0ZmRmODZlNjE5ZDUwZjEwYjdjYzZjMzliM2ZmMjgwMWE5NDkxZjZmYTk3YzVmMWM0YWZhN2FlZmYzMWQ3MzhmOWE3NjhhNzljNzNiMjU1NzczMTBmYjBhZDRmYWY4NTQzYTA5OGY4NTk1NzFiNjE0OGU4YjUyOTI2NDQ1NzU3ZDU1NDlmZDI1YTI2NTE4NTMxNTY2Mzc5ZDFjMjc0ZTZjNmE5ZDY0MTMyZTRhYzI1YWM5YWY5MzgxYmNiODg1MzMyMTEzZjQzMDE0YTEzOWE4MWY4ZDQzYzhhNmFiNTRjMTFhNWM5MmUwNjE5MWMxZTUxYjc1N2FjOWYxMWUzZGMxNWRiNDQ4NmQxNjdmZjlmMmQ2NWUyM2U2Yzk2MjIzZDlhZmY4ZDEwZDE1MDJjZjNkYmNlNWUzNTdlNmIxMmRiZTliN2U5OTdjM2QwYTUwN2QzYmFlM2NmZWYxZmZjOGQwNTZlZjdkYzcyZGRjMWM4MWUzMTBhZDIwNWJlMTZlNzdmMjczODM1NGIxMGI0ODRkMzA3NmMyN2U2YjRmMTY2Mzg4NTgxZjM1MGJlZmUyMmZiYjA4MmI1NDEyMWVlNTllY2M3YWU1ZGVjZTg5ODgyYWNmMjZjYjc0N2ZmYWEzZTJkMDVhNjk2ZjYwZmQ5ZTgyOWM3MDlkOGYwMmRhZjUzN2IyMzY5Yjg5MWZlNmNjYmY4ZGZjZGQ3ZjRhMzY0YjE5OTg1YmU3ZWRlYzY3ZGRjMWRiNzEzYzBhOTBmYWZhNDg4Mzc3NzI1NjJkZWFjYzJkMmEwZTc4OWUxOGE4YjViM2JkOWUwODNlYTkyZmZmYzMxODNkNWQ0MTQxNTMyNTliMzNhNDMyOWNmYzgwODI0ZWJjYmUwNDRhN2UzM2FiOGEyNGZkZTU0YmQ5NTIwYWVhMjg0YjBjNGM0ZmE5NDI3ZDI1MWMwZGRkMDEzZWNkZDgyOTBlZjU1NjVmNjA4NTA4ZTM2MzU4OWU1MjlkODRmZjBmMjZmOWVjYjAzMDUyZDU4OTdmYWJjOTE3ZTU2ZTYwMWI2NGFiZmU1YTE3YzM5NTAyODlkMGNkY2FmMWY2MDA1YTlmODEwNmY0M2UxN2FkY2FhMmQxZTI2OTE2Njc2MmY4MDU0ZGUwNTEzNWQ1ZDEzOTNkNzAwMGExNWI4N2JkNjg4NDZhODlkNWJjMjI4NjMzMjUxNTFhYWM4NDNmNzIyNzhhZTZmNGFmNzJhNGU0NDlhZGI3ZWFlNmQ0MzZhMWVjN2U1OGU1OWI3YjhiYjllZjBkZGFhYTAwMTgyNmY4ZGNiNDQ2NDc5ZGVhZmQ4YjhkNTQyMDQxYzE5YTA1YjFlMGVlNDdiNDY0MDkxMGMzMTkzMGNhNGUyMGIxMDU3NThlYzc1ZjE5NTAzNTY5NDdmNjI2MWQwMDM3ZmUzMDc3M2EzZWNlNmE5NmM4ZDU0MzMzMzNkODIyYzI3NzdlZjdmZjhiZTYwMzMzNDViNTA1NWQ1OGY1ZWIzNzI5YWY1YWU4ODI0ZjMzMWVlMDczMWM4OWIyMGFjMTE4ZjU1MDQyN2NkOTU4YTU1ZjZiMWEyODg4YTA4N2JiN2RiNTViZmM3M2IyOTQyOWI0NDQ4ZGJlOTExOWM0NWE4NzMzOWI0NDk3YTY5YTRjZjgzM2U4ZjM3NzBjY2U1ZTAxZmFmNWU3M2JiYWY2Mjc2ODNjMGEyOGM3MzA1MmZiZWNlMjAzMDQzMzg5ZGZiZmQ0NTQ5NWU1MWRhYjg2YTI1MmU1YmMxYjRiN2ZlMjgwN2UzZDBlMjM2M2JlYWI1MWM2N2ZiMzEKK1NJRzogNGUxYWZmODQ2M2JjYTFiN2RlYjFkMzc3M2RmMmU3YTA2ODY0MTExYjZkYzQyYTYyYWU5OGRlYjIzMTM5NDNiMzE1M2VlNDY2OTZiMTVjMjRlZmMyYTgwOGFhYmE4MWM3OGUzZGZhNGRmYjUwY2E5ZmU4NDQ0NWVhNjhiYzhlMGEKKworVFNUOiA3MTgKK1NLOiAgMDQ2NTc3NTA0OTdlNjgxNTJjNDNjZTM0YTU4ZDIxMDZlNjRjNTU3Y2Q3YTg0ZWYwNWQ5ZWI4MmU2YmNiMDVmNQorUEs6ICAzYjNhMTk0N2I0Y2JmNjBiODI2ZDYwOWYxOTJkYzIzMGFhOWI5YmFmNGNkNmE2MDkyZTQ5NWYxZDJlNDdhZDYyCitNU0c6IDI5NDgyMjdhODkwZjZmODQ1Yjc3NWU2MmM1M2FmMzgwNTA2NGExNTc2NDQ2ZjA4NWQ5MGY4YjlhNWVkNjhkZjFlYTM5M2NlNDc5YzQ0MTQxNDlhOWVjNWExNzEwMzY0MjRkZmYwMzQ0YjQ5NThmNjEzMjI5OGQwZTI0YzkyNmQyOGFkOWQ3OWY5OGM2ZTZiY2YxYzU3Njc2MDZlY2QyOTFjNmFkNDdiNGY5ZmIyYjAyMDExNTVhZGE2MjdiN2ExZmQ1YjA3NDE5ODc0MDgzMDU5ZWI1MmIyZjZlYzIyODE4Yjc4MjQ2MjI4ZjNmZTYzNTVkZmRhNzBlYmI5YmJlNzMyMjkzNzg3MzYzOTk1NTdjZTI0YjMwYmY2NDVhMTRlMjI1NmY3MDAxOWIzMzM2YjIwM2ZiNzdjNmVjOTRhN2EyNjM0ODg4ZmVlYWQ0ZDcyYzIzOTFlOTllOGM4ZDUzM2ZkOGE0MmIwOGMxMWY4ODdhYjJkZWI2ZWJiZmUzZDI1MWRlNjM1MzZjMzZjZDUzNDIyMzk4ZTU0NGNmZjg3YjA3YTYzMzQ5ZmM1MDg1ZGRlOTNhMWJmZDcxNzExMzNhMjA0Mzk4MWY2MDc1MjJjODEzM2M2MzQyOGQxYjkyNjI2Yzc5YjczNThlNzAyMWNmMWY0MTJhNzhhZmE3Y2IzZjU5ZmZlZjkyNzk4ODVhNWJkYjI0NjZhY2QzNGNkNTE1ODA4MzBiODM1MWViZDQ0MGE5NjYyMzkwN2FkMWY0YjU2MjAzZjVlMTU5YTQyOWUzNTQ2ZWFkMGMwMTFkYmVkMDkwMjg3MTdlM2MzZGZlZDM5MTk3NzY0ZDRkMjQ1ZWYyMjhiOTgwNDQ3MThlZjRkODgyMmYyMWIyYzU2ODUwMzg0NzNiZjkzZGMwOTM3NDUxZWIwMmQzMWE0NmM4ZGM3ZTk0YzNlODY3OGM4M2I5OGE0MzgxOGYxMjViNTI4YjQ3NmFhZDMxZDE1ODRmZmQ0OGYxNDllNTczNmU1OGY5NDIwNWQzODg5ZTU2N2U0ZGQxZWFjMmZhYzFmOGY0ZGM1NDBlNTMyMjQ2MGZiOTQwZTEyZTkzYzRjOThkZWQxOTQxYzE5MDRmOTY3ZmI0NjQzNjg0YzE5YTRkNWM0NDFkNjBiMGU5ZjQwODU1ZTUyM2ZlN2Y5OTEwNzY1N2E2ODA3NjI3NWJmODRiN2M2OWEzZjJiMzg1NWJjODAyNmJhOWIwMGJjNmZlMzRiOTlkYTA2MzE3MDBhNjdmNTJiMzRlMTc5NjMzOTg4N2E0ODMwNTEyMWQ1M2FiNDQ0MGZjNGI1YzliZjcyMzk0ZDVlZDM3MmZmMThjYTNmMDA3YmQwMmRmNjUxZGMzYWM0MzgyNzVmMWEzZTUyNDIyYjg2YzQ1ODY3NjZhMjFjZDg5ZjgwNTgwNWRiYjQ0ZmQ4OWZlMjRmYjJjMGI0MGQxYjc1NGMzMzVkYmFmZmMzYjNiYjhiYjQ2Yzc0YzM2Mzc0NTA0MDQyZDg2Nzg5MjI3NTk5ODYyMzEyZTk5Y2E4OWViNTA0Y2MzZDc1ZDE5NDk1YWE4NmIyMGIyNzM2YjEyMWJiMjA3NWM4OGVkNGEzZmJkYWE2YjJjM2Y3NmQxZmY1NTI1ZDNhMjg2M2U0ZDgzYzcyYmZlMDFlMTAyNzg4MDk0NzRlMTgyMmRlMmQ5NjI4MzQ4OTMyMDAyOTYxMWFhOWRmZmM0ODI5ZDY2ODY5ZTYzNDk0ZjlhYWRlNzBiNzdhN2I4MGZiYzkzZTNkZTRkOTM1OTEzNzUyZDA0NWUxM2IzMTJjNWQwODJmNjI0MmQ0OTg1YjA1M2IzNzgzZWIwMmM2NjE0OTYzZGMwZDU1ZDRjYmU4ODdiYWUyOWNjMTg5NzllNWUyZWE5NDViY2Q0MGQ4OQorU0lHOiA3ZTJlYWU1YTI5M2Y0MTgzOTFmNmQ4NWE3OTk0YjA3YzQ1MjI4MDAxN2VlNjUzYmY2MTdhOGQ1YmUyNGNiYjVkMGVmZGZiN2Y3ZjAwMTMxMjI2MGYzNDRlNmZiOTE1YWQ4ZDdkZTljMDUxOTgyN2MwNTcyNmY5Y2UyNTQ1ZGQwYgorCitUU1Q6IDcxOQorU0s6ICA4YmQ5OTA3MGM1MGE5ZmE0MThlZjdmNzVjMDAxMjk5MTZhNDFjODYwNzA5NjFjY2IyYjIwMmJlMThjMmQxMGQ3CitQSzogIGRkZDczMzA4ZmNlOGNhNjU1MmQwMzk0MjhjN2ExYTk0OTIzMzIwYTMxYzBmNTgwZDNjMjM1MjgwZjAzYzE4MzAKK01TRzogNDg1ZjhkNjgwZjc5ZWUyZDgyOGJlN2QwMThhNjVlMGI2NGIwZjAxODQ4MTk4NjNlNzExMGVlYThmMjk5YTcyYzRkYzg3ZjhlZThhOGFlYWE4MWFmOTFkYzcxYWRlYTc5ZmM5Nzk3NDIxY2NjNjQ2ZTZjZDVkZDQ4YjRkZWMxZGU5Njg2OTNmYmNlMGQwMDIxYTNkOThkMzhhOGJiYzU4MTk1ZTZkZmMzYjVlMTQ2MWIyYTU5NDEwM2U4MGEyOTQ0MWQ1YWFhZjg4OWUzMWNjODY1MTQxZjBjNmIyYzhjODFmNzIxNjc5ZWEyMzk0ZWM2ZTQwODFlYzIwM2MyZWEzOTdkOTQ4NDc1N2E3YTBlY2Q1M2U2NTJkYjlkZjE3YmVhMGUzMmZlOGIyY2JjZTBkMWQ5N2I5NjFlZDc0ZThlNjIyYmNkZDM1NThiN2M0ODY5NWFkZjE4YWFlNjExMGVhOWEzMzliOWRhNDA3YTllZGFmMmFiMDgxYTY4MWUxODMyY2MyMTViMWYwOGE2N2Q1NTlhNDc0NGFmN2NkNTAzMThjMjA2ZWU5MTE1NzU4MmY4MmViNmMwZmMyOTAyN2I0NDYxYzMwNzMzYjgxNjlkMTQ4MTMyMmM0ODYwNTA5YmEwOTZiYWNiNzFhNTc5MjQ2NzUxZDU2NzU0MGU0MTQzMWUxNGYxYjQ2ZWYxNmViYTI3NjEwNGJjMDE2NTBkNWM0OTI2ZTQ3YzljNjA0MDc4NGIwNDNjZDBhYTQ4NTRlZmU4Nzk3ZmQwNDYyZDQ1MzlmMzgwMzVhZWYwOGI0NTc3YzFhOTExOGQwMDRiNmQwMTg2MmY1Mjc2Nzc2ZGZlZjEzNzE4NjRmMTU1YWMwZjA3ODM4OWMyMDVjZjA1MzhkODVmYTM0ODI0NGQ3YTQyMjkxMTMxMGZmNmMxMDEzMmIxNTk4YmI0NDVjN2UyMDc3Yjc2M2M0NzNkMWU3YTYxYTM4YjY0OTI5YTY0OGI2MGIyZTU0MzU0MzczOTIyNGI0MGZiZjZkODdmMTA3OWMzMGJjODczYWMzODk5MWQ1MWI4OWU5ZDI2MWM0YmNjYjM3NTM1NWMwNzJjMWVhMjBlNGZmOTFkNTVkOWY3NTQ0ZTkwZDFjNjY0NmM1OWFmNzI0MjRkOGFhYThlMGFlZDA3YjM4ODlkNGU0NTBjMTIwOTY4NGNlMTM4ZDBjOWRhMDc5NTI1ZjVhYTAyMDUwYWY1NzBlNDMxNWMyZmE4YjA5OWI3NzY1YmZiYjg5NGZhZDM1OWI4ZTI0ODA0ZWNlMDUyYWMyMmExOTE3MDUzMzVlOTg4NDBhNjI0ZTRjYmYzYTFhMWEzMjc4MTI3ODViMmMwZjVkNjM4MTQ1N2I3MmZkYjYzM2U4MTkzOGJiYjU0YjhjMzdjY2NiNWQ1OWM1ODI3Yzc2ODNhNTI0NzU0NDk3N2U5ODQ0NDIxNzhkMDg1MjkwNmNhNmY5NDVjNDIyOWViMDhhZDI3ZTZjMjc1ZDdiNGVjOGRjMjVmYjI4MTkzMzdlNTNlYWQ2YzdhYTc4N2Y5MWE3ZGM2ZGRhZmQ1MzZlZWZjYmRlYzJjNTAxNjdiZTM0MzA2YTgyZTE2ZDVkNTJiM2IxYmUwMDhhN2E2MTEyNzRjZTJjZjhkNjJlM2I5MDBjMDk5NDNiZTcwY2NjNzdiMDcwNjM3YzI1MDYxZDYxYmU5MTBlZWY1MGRmMTg3NDRjMzNlNzZmNjcwMWUwYThmZjYyOTdmYTY3ZTRiNDEwOGMxMzc1NjcyN2E5ZDc0YmM5ZTE3OTgzZWVjMDhmODY2YjdjN2ZmYjM3ZjNjY2IwMTQxYTgwZmVmZjYzMjJiMmFjNjJiODRjZTI3OTdmZDk4ZDZmZjI2OWE0MWEwYzM4NDgyZGI2Nzk4NjJhMzhjZDIKK1NJRzogYjE0YTdiMjYyMDEyYzU5MDllMjFkNTg3ZmI0ZjI5YTkwOTNjOGUxYzI5OTk4MTZhODIxMThmZWZiZjEwZTY4ZWE4OThiZjBkYTE4ZWJmZDAzNDFlYThmODJhMTg0NGM4ZTBkZDUzMDZlNTA5YjlkMGMzNWI0NzNhN2QyMDk1MDcKKworVFNUOiA3MjAKK1NLOiAgMWFmNGNmNmQyNGFiMzc4Mjg2N2Q5NmExYzI3NWNlZWIwMjJjNjkxYTMwOGU2MjQ1NjY1ZDYxNmJmNjdjMmMzMgorUEs6ICAxOWQzMTdlYTk4ZDM1YmE1ZmE2N2MxMmVjZmIzMjc1MGRmMjc1ZDdhNDViOGUyMTFhN2FjNDdlZGU3NzEyZDlmCitNU0c6IGY0NDVmZGNmZTI4YzE3YmQ0NDI3YWVhNTY3NmMwZTEyODA4NDE1OTdlOWQ2NmRlN2Q3YTcxNzIzMTEwOTM5YmVkMDBmNGViYWY5NjAzZDUzYzljYmY2MjcxYmU1NDdhZjI5YjJhMDQ1ZWM0MTI4OGE3YmI3OWQ2NjJkYzIxMGUyMTU5NTdmYTg0Njg4YzkxNjU0M2U1NjE3ZjU2MGU0ZDM4ZjczYmFlZmMzN2UxMTkxNGU0N2M1MTUwNjc4NTFlOGVkMjEzOTNlMTNkZDE5ZWQ5YjczZDk4OTQ1ZmM4MjZhMjU4ZTk1N2RjMDgzZGQ4ZTUzNWMzMGE1NGI0MjY2ZGQ3MWQxMTNjZTg1NmI0NjI4MmExODAzMzYyN2E5OGU2NDcyY2NiNDYzZWQzZDk2ZmE3YjM1NWQzYjJjMmEyYjYwMTBkZDE0ZjRlYTM5NjVkZDg3YmUxYzQyOWJkZWE4MzAwYjRiMGI0NDQ1ODYzNWI0OTc5ZjVlM2U4ZWI1YzYxOGQ0ZTEzZTFkNjg4YmY4OGM3ZTRhM2Q5MzhlODQzMzZkNjdiZTY4ZGYzNDM1YzVjOTkwODYzMjFjMDJlMTNiNGExMjUyNGIzNGU0NmEwYjRkMjdmMzBkN2VkNGY1Y2VjYjM2ZGVhZGYwOWU3ZWZjYzc1NWNhNjY3NTY4Mjk3OTE0YzZiYzI0MDYyN2Q5ZDA5YWFjZjg1NDE1NDEyYzA2MzU2MjM0NTMyNzhkOWJmMGUxMGVlYzY1ZmM3MmFmZmZmYTkzOTJkYzc4ODFkMWU1Yzc2MGE0MDI4MGYxNmIxNDc1MTI3YjkxYjY5Y2NiNjVkYzRiMzVkZTEwZjk0MzI1YzBjYmUxYzQ3MDE5YTJlYWYyYjRiYTkyZDc4NTIyOWFhY2ZhZDE4MjZlYmJkZWJlZmI3ZGFkNGIwNWY4ODI0M2UxNWYyNzk3NjZlMzMyMWRkOGRiYTY1MDQ0NGQ4MWZiMDg3ODc2N2E5YzYzNTM0YmI0YmEyMTI4NWEyNDE2Y2I4Zjg1NmQxMWE5NmUwYThjOGRlMWUxYTc1MTMyZjE1NjRjZDk5NDk5NTY5MGJiZWQyZWUxNTQ1MzdmYjZmMjc5ZmIwOWM4ZGVhNmY2YWZhYmM2Mjg1NmUzZDEyOGZkZmE3OWZjNDk3NjE5M2JiOWIzMzY4NjFlNDdiNTZkYzI1ODIzOTNkMmU1NDQ2NTFhYzg1YmM1OGU5ZTZhOTRkYzRjMzljNGVmNzI1MzhhMTRmODU2Y2Q5NWMzZTI3OTBhZGVlMDNhYjJlNTJjYTBhZTQ3MWRlNTAyY2IxOWU2NzZhZjM1ZjVmOTNkODQwZmVmOTYwNmNiZTkyZDhiYzI1MDA2MTA1ZDkyMzQ0NTg4ODM4ODQyYzNiZTUwNWM3MzUwZTM1MWI3MzVlNmNjNmZiNzkyNzViMjdiZDllYmQzNmJhNGQwNjBhY2VlNzNiNWEzMTVjZWZmYWI4NmQwNmYyMTY4YTY3MDY1NTc4MTk2YTBlZDA0YTRkZDcxZDY3MzQ4MzdkYjA4Mzg1N2FiMWViNWUwZWVjNGZmYmFjOTU0NGY0ZWMxOWJkZTE5NGRmODRiMWM4NDgzNDE1NzRiZjEwZGFlZTg1YjgxNzgxOTZmYjYwODEyM2E4MDgxNzFkNzNjZTQyMDZhZDY1MjE2YWQxYTVjYmRlNDBiMTlkNmFlN2Y0MGRmOTdhYjg0MzJlMmM1M2E1MDRlZDEyMmUyNWZiN2E1MWMxNDM1NGFiMzkyOGVkZWIzOWMyOWViMjQ2Yjc0YTA3NmY4OWQwMzUwNGY0MDFiZDE3NmI1Y2ZmZWU0YjlkYjA5N2M0NTc2NGY1MWFhMzc2NzA0YjVhN2YyMTBiM2YxYTkwNWUyNWQ2NzAwMmY2NTU3ZWJiNzQ5NzM3Y2RhMzEKK1NJRzogN2ViNDZjZDBkZTMxNTViNDM3NDdkNzMyZjEwNDVkOGVmNzQ0OTJhZDgyN2EyMjQ1YmQxNzEwMjgyODQ0MmU0M2EwY2U3ZThiMjY4ZWQ3ZmQ4ZDNlN2IyOGYwNzI3OTVkYTNlMDcwZjEyYmM0ZTIzZWFlZjU3Yjg1M2NlZTg4MGEKKworVFNUOiA3MjEKK1NLOiAgMmFhY2M4MTk3ZmY4ZmFlMWMxY2YzODYyZTNjMDRhMjE3ODI5NTFmOGU0OGU0MGI1ODhmOGJjNzQ2MGMzMGEwMworUEs6ICA5YTFiMDFlMjE1NGYxYzM2YThlMTZiNzllZTdkMmQwNWI4NzEyZTBkMjdhMDYxYTZkNDFkNDc1Nzc4YjBkZjhjCitNU0c6IDVkODI3NTJjZTVkYTMxODBmYWY0Nzg3YWVkZmIxOTI5NGI0MzQ4YTFkOTIwMmM4NTM5ODMzMTMyM2UwZjQyYjA4MzUyMjdlNjhlMTE1NmYyZDRiYTJmZTQ1MGU2ZDZlZjJiOTJkODliYmJlNDA5NmUxMmNhODM5N2ViMmY0NWU2NzZmMTY3M2FhNDFjOTU5ZmNkMzBkNTU3ODg1M2I1ZGJkMWMwZDViM2EwZjBkODcwZWNhNzFlYTEzMzkwMTExYjI1OGY2NTQ4YjMyZjM3YTA1ZTk3NDRhNjU2ZmQ3NzhkNjU3MjE5NjVjNmQ5YjMyODYwMGI0NTcwNDc3MGUwNGIwOTk3OTBhYTc4ODRmMDBkN2JiNzY1OWUzMzcyMTBiZGMyM2VhYTcxZDdiMDE2MDMwYWNhNjIyM2I1NTY5YmRmYzI5MDgxMWFhYzQwOTUyNGRjY2JmOWJhYmNiZTRiZjIwOTQ2YjU0NDMxN2NhNmYyZjkxODMxYzc5ZmIyNzNiNjQwNGViNGU2MWUxZjdiMTA2ZWJkMGRiOWYyYjE5NzRkMmYwMzFiY2UyNTgwMzYwNjU1MmMzNDQxNjU1ZWZjZjJjN2VhNTJhZGNiMzA5OTNkODVmMmRkYTc5NjAzZTk0MTVhMDIzMjQ1YTY2YzA3YTk1NjkzMzE0NmY1M2M5OTNjMDg4OTE4MDhiODE2NmIzMDcyMWZiZDFmOGExYjkzN2QxNDA3MGQ3ODZlOWViNDUxZjJhYjUxNDJmODNhNjBmMzVkNzZhZDhiODFkNmE1N2NmMzY4ZmM2ZmNhY2MwYzQ3NTg0NDBkOWNkNTk1YjFiMDk0MmEzNjU1ZTI1MGRhOTgzYjcyNDE1NDZkY2ZiZTBhZTgxMDc3NjUwMjk1NDA5ZmY5ZTkwOTc3ZmI5OTYwY2JmNDBhMmFmNTE3NzQwMmJhMmZhZjUwZGI2ZjFhNzM2NWNmOTllOTkyNDI5ZTM4ZGI0M2VhODNmZGRjOTVhNjQ4Njc2YzBiMTZiYzk1MmIxNWRlOTlkNTJmNmI1MjMzZGE0ZWFlMTk3OGU4YmEyNWU2MjM1YWZiYzUxMWM3NmM0Yzg3NGM5MjM3OTIyYjFjZWYwODQ3ZDA3YTgwMjAwY2JhZTNjN2M4MWZjYmQwZDE3MjUyZWQ4YzYxYWQxOTU0ZmM4NjJlMWUwNDQ0NGMzMjA4NmZlZTM4MGQxYzE3NTQxMzIyYjlhNjBkYTY2MjM1MmUyMTBlOWFlMjE1ZTM1MzI5NmRiOTIyMzM5YWExN2QyMTczZWMzMWYxYzUzMGEyNGIxZjM0OGEzMTU3MmUxNDY5Y2FhYzgwOGY5Yzc2ZWMyNzMxODczYjgwM2VhZDNlNTRlYTI0YmMyNDQ5OWI5NzA0YjNiZGNlODEzODliOWQxNGQ0OTUyN2MwNGIzYmI5ZTNiYTZkOTQ2Y2VhNThjZjc4NmQ0ZDI4Yjg5YjQxYzU4Mjc0MDM1YTg2OTA1YWQ5NTc1OGMzMTYxMzY2YWI5M2RhODFlNmI0YzgwODM2NGUwODdkYWVlYTRjNGM1YzJhYTY4NzE5MzdjNWZlYWJhMjE0OWYwMWY3MzhmNDUzOTZlNjZlYTgwNjMyMjFlMWM4MWMwNTI1NWJhNTY0YWQ0NDBjYjVkMDdjYmQ0YmFiOTQxZWE1OTMyNDQ5MzBiYzVjMjg5YjMxNjVkM2VjODg0N2ViYzRiNjc0YzBhNDlmOTE2OWFkZWY3ODZkNzc2N2JjOGYyMTNkYjdkOTVjMDZlOTliYzExZTIwMDA1NWI2NWViNzlhZGFhMDFiY2QyYzg1ZGE0M2NlNjM3MGUxMmUzNDliZjZkNDc1NDg3YWZmZGY5MmUyMGEzYWNkZWQxZDc2ZjllODNlOTE5ZTk4ZGVmMTk1MDcyYTUwZDBjNTcxZGQyNQorU0lHOiA2NDdjZGQ2YzFhNjcyOTBlNTc2NzZhNzgxMTNhYWFkY2E2OWFjNTdiOTk3NzE1YzUwOTg5NWI4YzVjOTRlODJjMGI2YWNlY2NmM2JhOGJkN2NmNjE3NTJiMWIxOWQxM2I0OWYxNWY4YmZhMDQ2ZWI0NDJhNTVjZDViYWIxNDIwMgorCitUU1Q6IDcyMgorU0s6ICBmZjg2MjE1NmM3ZWFiNjgxYzk1ZWZmZjgwMDNlMDBhMTRmMWYwZDUwNWQ1NTA3ZTZlNWIzOTE3OWRmOWIxY2RhCitQSzogIGUxYjg5ZmIzMTExNGVhNDYxMDdmZmQwMzI5ZjEwNjY0MjhkZTU0NzA4ZWRiZWNmM2VkOWQ0NzA4Y2QxNDNmZTIKK01TRzogYjNkMWRiNzJhNmE5ODVlY2Q3MGEyY2ZmNmMxOGMxNzllMjE3ZDRmNDEwZmQzOTM0OTY5Njg1OTAxYmQwNzFiY2U2YzJmYjY3NjNlMTBjNmZhMTZlNzVhMTE3NjA2NmI4ZWM4MWFlM2E4MDM5ZTcxZGMyY2RjNjRhNDBmZDYyYjdjZWU3YmU0YmEwMzMyZmU0NWQwYjYwMTU4NjUyZTMzZjhkM2FmZjNjYjRkNmIwMjE3NDRkMGRkMTc4YjFiZjBhMWNjMWQzZmU5MzIxYmUyODQyMWViODgyNjNhMTI0ZjQ5NzkyZDA3OTQ3NWE4YzU1NWZmNTY5MDg3MzUxNGI1ZDQ4M2U1MzIxN2UwY2JiMTI4NjJiODUwZmUzOTBjOGY4MzAwODA4NmU2NDlhYzkwNGIwMTgzNTBhYjQ5MTU3ZWU5YmNhZTZjMDdhNGI4NzhiNDhlMjVlOTg0ZmJiNGQzNmI2MWQ2ODliMTM0NjhhMjhkMWUzODdlMGU4ODY1N2Y4YzhhYzk1ODZhNmUyNmNmOTRkZmY2ZjgyNjRlM2ZmNjI1ODg2NWM2ZGNmODU3YjAwMTQ3ODg2ZTE3NWRmMDQzMmUzMmYwNDQwMGUyOTlmMjExODgzMTJiMzJkZmMwNTBlN2I3ZTg3ZWVhYTBjYmFhYzZiZTk5MzdhNWUwY2MzMTExM2RlN2M4YjIzM2UxY2U4ZTVkOWM1NjRmYmU5ZjM3YmJkNDExZGY3YTVlNDRlNmM3ZWJiNjc2ZDg1ODk0ZGNjZjQ4NjVlNGRkYTBjYWRlZjJiYmM1NTAwMGIzYTI5ZjFmNzFlZjQ0NjFkZGMzYjMzMWQ5MTU2NjUzNGM1ZDZkODRjNzMxMzc2Mjk1MzIwZjgwYWRjOTAyODhmOTk1MzU1NGZjZGY5MjEzZGU2YTkwNTIxMGQ0YzgwNjRhZjkxY2Q5ODMyNWVmOTE4OThkMzNkNzAwMzgyMDJlMzJmYjY3MDljYTNkNzg4ZmVjYmQxYjg0MWZhNGU1ZTkwNjJkNjQyNjdjMzVjZmQ0NDRmYjY5ZTJmNjA0N2Y1OGIxYzJhZjRjYzdlNGNhYzJmODkwODg4MzYwNTkyMTEzZTk2YWQzYTg1N2VkMDVlYWFiYTZmOTE1M2VmODliOTNlMDBlODc0MzczM2VjNDcyZDliMGVlYzFjZDhmYTUyNDI1YzRhMjZiZDdkZjczYTI3MTJiZWJlNTFhZTNiMjVlYjc4ZGI4MjE0OTAzMWZlN2IyODFhZjZjYjc3MTRlZGY4OWRlOTE1ZjM0NzBmMTUzZWVkN2Y0NTYyNDNiYjkwMzQyZTE5MGU2NDdmMzllMDQ2ODgzY2UyOGE4OTIwMDMzMTVlYTM3OTQyOWU5NTgyYTkzNWViNzg5NjMzOTZkMTM2ODQ1Zjg2YzQ2NmU4ZmFmMjI3MmY0M2ZmZWZjMmFkYTU2MDFmOGE2YjJhYzRjYzZiOTI4MjA5MTdmMmUwMzkzYzhmYWY5ODJkNmM1ZjRmMjMwZTI3Y2UyMjc4YTcyMzc3NDdmYTg1YTljODU3YmYxODAyYzNlYWUwZDIzNWI1YWQ1ODQ5N2Q2NmEwZDNhOWJhZWJjYzQxN2YxODMzZTljYzQ0NjBmOTc1ZDcyODU4Y2QxMThkN2FhZmFmMWM4NzgyOTdjYWNmNzFhYzc1Njc2ZGMxYjRmYjUxYzE3NzU4MTBkMDM1MzdmMmQ3NjYyNzhiOTk3MWJiOTdkM2M0OWI1MWZlYjI2ZDM3NWUwY2I5MTA5NTc0YTgxNmY4NGU3NmZjN2VmMDcyZDU3OTNjMmY2NWFiMmVmZDkwNTJlNmI4NTY5ZjI4MDU4NjFjMzFhNzM0NGEzYzQ0MDY5YTk0MzIwZDI3NGUyNzEyNzFlYWZhM2JmZTY0ZGU3NTM3ODQ2YTAxZTUxZmRhZTAKK1NJRzogNGI4MTM3MDQyZDY3ODQ3NTdkNGE5YzA2YmM3NDMyZjQ4MDliMWM2YTkwMzU0MjczNmQ5YTU3NjY4YzIwODQ1YzE3ZDQ2ODU1NzA4NWM1N2ZiNjMyMTNkYWQzYmUwZmEzNmExMThmN2MxYWVmZjI1NjJmZjRiODg4OGMyNjkwMGUKKworVFNUOiA3MjMKK1NLOiAgNTgyNjE5YWIzY2Y1YTNhZTc3NjY4OGJmNmRiYWNiMzYzMzBhMzVhZDc1MjRlNDllZjY2MzY4Nzc2NGNmNmVjNworUEs6ICAyMDAyZWEwYTM4YTMyN2UwMzg0YWVhZTQ2OGRiMGY2Yzg1MTZhNjk2MDlhZjllZWU5M2U5ZWNiOTRiNDQ5YzY2CitNU0c6IGNhNzQyODRmMTFjNTZlMjU5OGQ3OGE0ZWNkMDNiNDBlMDE3YTU1ODE3NjAxMmIyNmZkZjY5NWMzZGU5OGE3NGY4ZjQwYTQ3ZDc5NzhlZGMyNGVlODA5MmJmZTVlNjE1OTY4MzRkZWVkMWQ5ZDM0YTBmNWNkYWViZTM0MjFhYTE5ZTAxMmRlODY1YjllZTFiNzM0NzliMmJkMWFjOTgyZjk3ZWQ5YzdjZDIwNDU5YzYwZmJiMTFlMWUyYjRlYWM1ZGI2ODQ0YzcxZDcyOTQ5NTAyYmJhNTAzYWNlYzkwNWFkYmEyNWY2YjExOWVhZjk2MzlmYThhYmIzMDJkZmY5OTMyZDg1MGNjNDRjNTdjZjkwYjJlNThhOGI1MjUxYzEyNmE5ZTI4ZjVjNzYxYjYyODBlMmNkZGQ3OWNiZDY4ZTUzZmY0YTYyMjZkM2JkNGM5NjFiOWI5ZTQzNDVhMjU0NTg2MmM3OTczODY2ZjA0MjBiODk4ZTdiYWVhOTBlYTRlZTAwNDA0MmVmMzhhMWZkOTU2YTcyZmRmNmZkNDMyNTdkYTlmZGI5NjY4MGVmNGZkZjllOTQzZDI2NWNkY2YyZTUyZTMyMDFkNTQwOGJjNmNlMTBlNTcwMGFkZjEyYjU1YmExNGFhODI5ZDg2OTFjMzFmMjRmYzRhNTFjZTZmYWExZjNlZjJlYWQ3OGU1ZTc1MzQ0NmFkM2ZhNGE4NGMxOTM5NzlhZWJjODMwOWJhZDYwODE0ZjQ4NTliOTMxZDcwNDE0NzY0NDkxYzZjOWVkOGRiNjczYzU0M2QzNTE4NWNkMjg4OGFhMjFjMWE5MjAzNDI3ZTBhYzBiMWZlMzRjMGU0YTQwMDFlMDk1NmMxM2NiNTlhM2JhZjg3YzIxMDlhODg4YTRjOWU3YWE0ODE3NjdkODAyMGZmMzVkZDdjNWNjZWM3YzA4ZTk3MWE3ZTIxODEzOGM5MDU0NmE3ZGRmMzZhZDExNGJlNTg1NTc0MzJjMmRkZjM0Y2VkMzM3OWY3MGQ0NDA3ZTU4NzlmOTg0MmYzODE3MTcwNTFiMTY4NWFhN2FiMGFkMzg1NDFlYzE2OGY1MWNiNjg4ZjNjZDFhMDE5YTMzNmM5ZjRmM2Y4MmRlNzg1YzA3NDg2N2ZkYzg4MDBmYzc2ZmJhMDRjOGFkOGRlMTBkMmU5YjQzMDU4MWJlNDRjNDFlY2M4ZmM4YTYxNjMxNDM5OWQxOGM2NDc5ZjU3ZTU3M2IyMmE2ZWU1Y2UyZGNjMDg5NDhhMGRlMWYwZGQyNWI2NTcxNWFiMThjNzBjNzYyZmMzZDdkNjAwY2FkNjMyMjYwMzg1MDljMTlhYjM1YjU0OTNlZWU3M2E3MDM3MzFlYzUzNWM5MGM2ZjA2ZDk0ZDNlNWY3ZTUxYTA5ZjlmOGY0MmM1MDFiODUwNDY4NjM2NWNlZWU5ZTBmZTAwMTMyOWYzMDM1MjIxNDY3MTdjNmExMjU4ZDBmMTU3Y2JlYTRiNWE1ZTNkMTNiYzkwN2U5NWZkNmU4YTcxODk2YTAyYzMxMDZiZDI2YTUxMDA1MWYxYjMwMjU4YWIyN2Y4NzU2NzNiMTMzN2VlMzZiNzFhMzc2ZTBmOWU3ODA5YTY3YzY3ZDlhY2MxNmMyNTFkY2I4YzkyNmM4ZTkzMjUxNmQzOGI3MjMzZWFjNjE1OWM1OWNhZDAzMDdjNTkwZTcxMzFiNjIyMTkxNDVhYWEzNTViZmI0YWNiNmFmMGE1NTAwMDA2Y2RkOGI4MTNmZTE5MDg2MDJlMDg3NGM5NjIyYmIzNzY3M2JhMWFjYmE0MTQyMzE2NjdiY2M0OTA3YWM4NzFmODdlNmNlM2Y1OTFjMTkxNzEwNTdhOWY0NTdmNTM2MmFlZGExMDVkMThmYjg0ZjdkMGYwYTdkYTdlZjhkYTkxMTQKK1NJRzogZmU5NzAxZGExYWE4MWM1NWJhYzMzNjM4Zjc3NTU0MmI4MDQ0ODBmMzRiN2JmYzc4ZGE5OTE2ZTUyNDZhNjA0ZDM5MGJmOTIwYzg3MmE3NzkyNDI0NmVlOGQwMzkzYjIwMmU3YjI1YjI0ODRmNjU0YWMzNjdjYjA5MjVlY2UzMDUKKworVFNUOiA3MjQKK1NLOiAgMmJiZDgzMGNlN2RlZjNmZWNlYTFlY2Q2ZWEwYWU5YzlmNGZhOGZmYzNiMWYxOTM4YzUwNTA1MWJhYjQwY2Y3YQorUEs6ICAwZmRmZWQ4ZGUzYzFlYWY4OTFjZTM3ZTM0Y2I0YTI0NDFjYmJhZTA4ODMzODNkNzBkZTI0NjQ4NTBiNGE2NDJhCitNU0c6IDVmMWVkZWFhM2MwYjJhNjMzMTFkOTdmMWM1NGU3ZTJmNjg3MTcwZTZiNDZlMjE2OWNiZjU2YzY2ZjIzMWJmYzRhNTc2YmQyYjg0MjBiZjM1N2QzYTkwZjhmMzJlYTFhZDk5MzliNDY3MjU0YjY2YTFkZjFmNWI0Y2JhYzYzYTVjMjcyNDI2MGQyNGQ4ZGY4ZWRiNThhZTI0N2EyNTkxZTkyMGIxYTQyMGNmOGQ4NTM5ZWE1N2RiMGRhZGZmMWFkM2U5OGMzMTcyZDAzMzE2M2NiNDM0YTc2NmIwYzExOGE1NmFiZGNjZTc5YzgyYWY3YmFjNzRlZDBlYTAyNGFjNGNlMDIyMmQwYWE5MTRmNDMyMDkyYjFiNTE3ODA0ZGI1OTE4YTg0NWU5Y2NhNTVhODdkYjdjMjg1MmY3ZGQyZTQ4MzYwMTg1Y2M0NDJjNzkzMGFmZTE1ZGQ2MjJjYzAyYmNkMWVlNzc4YjU5NzA1ZjE0MzMzMjQxNTg4YTUyMmRlMjQ0MDdlOGU2ZTEwZDVlZjNhODhlM2EzYzQ0MzhjMTdmNzUwNDY3NGZkN2U0MThjYjJmNzdhZDBhNTZkMjM4NjcwMzE1NWU5YTQwMWM0M2RkYjUxZWFkNTUyMGFhN2JhMDM4ZTdkZTUzMzE0MThhZDU1MmJkY2QxODVmNTAzYTg1NDhmNTViNjM4NmU0Njg3Y2E1MTVmN2MwZWVhNTcwOTgzYmZiMjRiZTE2ZjdiMzAwM2ZiNzU2ZTMyNjU2MmYyYTMyZmU2NWZmODQ0YzM5ODRjNzJlNDBkZDQ5ZTRmM2FlOGMwZjgxOWE3OTM5YjJlNzM2ZTM4MWY1ODIzY2JjNjFiMmVkMDFkOWIwNWNmOGIxNDY0OGE0OGIwZDdjYmU4ODJhYzE2Y2FkZDhjNDJhYTJjNzAyNDYzNDdiNGQ4NDk1MzZhN2FjMjJjNzIwZGEzY2YxNzg3MjVlZTU1N2E5MmMyNWIxMmI4Yjk1NmQzYmY0ODAyZTllOGExNWI1YWI3NTQyMzVjY2EwZTViN2U1NWU0YWVjZTQ1YTQ3ZTA4NGNlMTQ0NzQ0MDU5OGVmNWQ0ZjVmZGMyYzk4YTVhZDEzNmNmZmJmODdkM2NmNTJmNjczOGNjYTc5NDgzNTYwOTIwNzhmZGYyNTQ1NzdmNTU5NjlhMGM2NTI0NmRhYzgwOWEyZmNhMWY2MGExZDkyOTg3N2I5YTY1NDBlODhhOWU2ZTkxNTU5MzhkMjJjNjg3ZTYzYjM4NzUzNGQzODVlODk2MWU1ODg2NzQzZjk1ZjRhNzA4MGQ5MTY2MjQ1MTdiMTUzMzYwMzBhNDY3MTRiMTY4YjgzZDZmOWNjZTA2MDY2NDljMDFmMGExZDBhMmE1M2Y1ZTM3OGY2YWE5OGMzODRhYWZiM2VlZmRiMzQyMWZhM2FjOThhMGQzYTljMDI5YzIzMDBhZTAyNDEwNjdkMWE0ZmM5MmU0Mzg2ODhlYTg4OWZjYjFhMWE5ZTg2MzRiOTE2YzYwYmFhMGMxOGJmY2QxMzliZmUzMDE3YmZiZTE2MjkxMzQzY2U4NjA1YmI3ODcyNTU4YzZiNWZkNTZkZmQyMjE1NzdlZGNmZmFhOGJkYTM0ZDdhMTFhYjhjYjI3ODI4OGU1ODM0ODQyNjc2ZmNjZmZhYTkxMTFiY2VkMmIzNTc1ZmRkNDk2MjFiNzZlOGQxMjliNjE3MDBlZWFiMDMxNGVmOTRkNTUwNTA2YTRiOGQxZWU2NTUwOGQ4OWQwZTk5ZTkzMzZiNDFkOWY3NGFhNGQ3MjIxMTRkZTBmMzFlY2YwMGIwOTdmNTNjOWFjYTljN2EyODViNThhMzVkNzAyOThjNWMzNGY3NGI0YTcwNTMwODAzMzEwMDM0OWYwYzYyZjljMmViZjdkZWFkMGE3N2IyOThlYgorU0lHOiAxM2ViYzk3OWE4ODcxMGUzYzVmMzQ1Y2ZiYjgyNDgxM2IzMDhhOWQ1YzZkZWUzMjhiZmQyMzVhOTdkZTdiMzI2ZGU2YzczOGY5NmY2OTgzMTk0OTIwOTk5Njg1MmRkOWMwOThkNTgwODQxODcwOWYyYmY1MTBkNDZiN2YwMzYwNgorCitUU1Q6IDcyNQorU0s6ICAxYTdhM2MyZjU0ODExMzFiZTVmODY4NDU2YWEyZmE5MGU1NmQ1MmNiNzIxYzcxODRlYmZmMDZmZWQyZmU2ODVkCitQSzogIDdjMmFkMGYyYTU3MDU1MDMyNmZiNTBhODUwODM1ODIxNjc2ZGUxZGUxMjdmNmRlMTY3MDI5OWQ4MTRmNmUzY2UKK01TRzogYzYyODM0ZDlkNTVkMWE0NDAzZTkyNWQwYTViNTUyZGExNzRjMDJmNGU5NDVkZWMzMzhjMWJiYjJhZWI0ZmY0MDAyMGVmNzBmZjUwNTIwNWNmODgxYjYyOTk2MGFiZDYyNzY0ZTVhNTRmMmI1MTA1NjY3YjExYzdkNWI3YTRjY2MzZjQ4OGJkZGRiOTU4YTdiZTk1NDYyMDdlNmM0NjcxODk3YzA1MzUwOGUxZmQ4MzIyMjEzMGE3OTMzOTc2ZDJiZWM2MTRlZDhmOWI2YTZiOWY0ZWZiMmE1OGI5ZDAwNWI5NDNlNDJmMTcxYjcwOWE3MzEzMDcwY2IyZTA2OGRhMzljZjk5OTIyYjY5ZTI4NWM4MmFkOTdmMmQ2Yzc3OTIyY2FlMmI1ZTMyMGU4MzU3N2MwZDA4ODc2MWVjODgxNTJjMjk3NDkyOTc4YTlkN2EzZmY2N2VkZTQ0YzJhNzA3Y2YzZTIzNTJlMjMyZjUzYzg3ODJiYTQ4OTI4YTk3ZjhhMzZiMjBhNDE2ODE2ZTk0NTc5YjlkNzI1MGEyOWRjODQ3MGY2M2E3MDU4ZTJkMmE5OWQ2ZjBjY2I1MzBkZjU5Njk1MDVlZjVjNzg0NGViMTY3ZDIwZjQxMmE1MDhmYWIxZjhjZDljMjBjNWViOWE0MTdhNTQxMmI1ZGE2YTU3MTM1NzU5ZmFiMTdmNjMxNGY2OGRmMzViMTc3MjQyMTQ0MzY3NmYzMTI1NzlhZjZiMTQxMTUzNWFkYThmNzYwMTJiNjliYmViNjBiMjg5N2VlNjYwN2NiMzY5Y2RmNTJmNGY2ZGRmODhjZGIyNjMwZDc4ODk2ZjEzNjFmZWEyMmFlNjM0MjE3Njk2ZmYxMTRmYjQyZGJlNGY0MzQ2ZjFiZTViNTdhZGIzODRhZTdlNDliNDFmNzRiMzFiOWE2MmJjNjlkY2ExNjU4OWM2MzRlYjlkN2M2Yzk0ZjhlY2U0NGI2MDYyOGY5OGUxMDI0Y2YzMmUzZTNkZDZkY2U1NWExMjIyNTMyZjQ5MGQ2M2U2YTI3NTI4MWMwZjNhNmMxMDE4OTFiOGQ1N2E0NWRlMTFkZTM1ZWJiMTUxYzBkY2Q3NWU2YzA1MGIzY2Q4YmFiYWU4NDVjMzlmNjZjMzZjNzdjZGUwNWI2ODNlNGZiMDEwM2Q5M2U3NjU5MzM1Yzg3ZmMwZTMyMzViMmU4MjQ4OGNkYWJlYjVjNWM4NzU4MDg3NDVlZWE5MmRlODZiOGVmY2I2M2UxNmQwODI5MTlhZWUyZTkyODk5Y2IwYmNmMWMxNDIxNTc3YTRhMGQ5ZGIwOWVlMWY5ZmViOTJhNTM4MjEwM2NmN2MzMmNmZTQ2MzcyNWFlNDg2NmRhYWZlZGEwNTM0YzE2OWY4ZjliZTQwNGYzYmFhZTEyM2ZhNzY4YWNlNDYxNzhkNGI5YmJjNWJkN2FlZWM3OTAzYjBhNWJjNTc1Mzg5ODZlZTA5ZTA3ZTMyMDc3YjNiOWRlNTBkZDE5NjdhMzcyYzM4NWFjODg2Mjg3YzE4NDUxYTY0ZWZiMzdkMDU2ZjlmNDE5NGMwOGIxZTNlYzk3MDIyMjY3YmYwMDQzYzEzZDI2YjljZTFmNTM5MDVmNmU0MWIzZDk5ZGM4MWIzMzE5MDliNzIyNjY2ZWYyNDMyZTZhZjhhNDUzMTA3NTMxMjMwY2U0YTFhZjhlZWQ2MjZkYTIyM2RhNzZiNDY1MDdlMzNkN2NkYmRlMDJkNDExMDQwYzg5YTExZDk1MTU2ZWQ0YWMyNjA1YjgyNjkzOWM2Y2Y4NzdiNGVlNzM2YzVkYTc3Y2Y0NjUwYTk5OTdhM2I5Y2Y0NmE4MmJhMmJjMDEzMzNjMDQ0NzhiNWM5MmUyNDk4YmQwMDJmMDEzMTQwYWVkYjMwMWI5NTk5M2QxZDc1MDg3MGQ5ODgKK1NJRzogOTc2MTYwZmI1YmJkYWJlNWM4OTYyZjIzYmFiYWNmMGIwYWI0MWMyYmIxM2U5YzBkNDQ5MDY3YjdkZWNjN2RiNGU5NGU3NmE3MWI5YzBhYzRkNmFmMzg3YTcyYThjZDczZTNiYzYzYjdlZDY1MGJlZWJmMTc0MjRjNDkwYmQ2MGQKKworVFNUOiA3MjYKK1NLOiAgMTkxYTFkOTAzMjFjN2Y0ZTc0OTRiYjk4MjkwOWE5ZWI0MGMzMzQxZGQzMmFlNGQ5Njc1MGI3ZDAyOTY2YjQwZgorUEs6ICA5NTYyZDllMjEzZjE0NWM0NTY5MzViNzAzMWM2ODA2NjlmOGJiZDMxYTRjMmVkM2M5MWM0MDAyYTU2MjllOTdiCitNU0c6IDg1ODkwZGI0ZTJmYmNlMDkzZGRlNWE4MGJmOGZlMDlhOTg0YjgzYTQ5YjdjY2I1ZDRiMDZjZGFmZGRkMzgyZTRiOGE4YTUwNTMwZTgyYzIwMDYxMmM5ZDdkOGEwODliYzhhYTg0NWMzY2ZjYzM4YTYxOTVkMjFjMjYxOGMzZGJhMmI1NzA5MjBlY2NmY2QyMzZmMTdmMDhkODE0MjY4Zjg4MjI0MmRkZjA3MDJkYTg3ODVmNDA3YWE4Zjg2ZmVjZmE5MDNjNDhkYTgzZjgzOTc3N2ViNmI0YTJiYmY1ZGY3YTRkYTUzNDc1YWYxZmZlNDRiNWZlMDA3MmI4ZmJmM2QyNmU2ZDg5ZWE2N2Q4YWM4NDU5NDkyODkwYWRhNjU3ZWIzZGMyNDkyYjg4ZGUxNzViNGJiYTFhNTA4MDY0ZDYxOTY3NGFhYWUyYWYwOWQzMWE1YzI3YzhkNWQ1YTI5YjAzNzc5ZjQyODZiODk2NmNlNDA3ZTZmZjY5MmZiOTQyNTIwYTk5MzhkNjljYzcwYWNiMDZiMDE0YjZkZmMxOTgzNDIwNmNmMWFjNmM0NDhhZTZmMDc4MDI1YjU1ZjNkODI3MjAxMjY4YTkyYWRkOWFkMTc4ZWY3NmEyOTg5ZmVkYzZlMzlmNGViYjlmOTZjOWI4MzUyNjk0ZmE1NGZhMDIyMDE5YzBlYzAwMTJkMGQ3NjllMjM2NzgwM2Y5MjVmMTc1ZjlmYjljYmVjNGEwYzljMWUyYzgzZWE1N2U2YTkyYTE3ZjU1NWNhYjkzNDI3MWU3MmM4Y2MzMjE1ZmNiODdjMjA1MzliZjE0Mjc3YjFiZmJkNmU1ODgwZWY5NTNmYzc1ZjIzYzBkZDRmY2MxZTBiZTM0MGFmOTQ3ZGUwMmU4NzdmZDVjNzdkZDFkZjdiNDE0YjVjMGI0MGM3NDk1NmE1NDVhMTE1YjBjNjk5M2FiMjMzYjdlNzJjODIyYjZiMzM4MWJiMWZjMTA4NzViZmZlM2UyZWQxMTkwZmEzM2ZjMTVkYTA4Mzc5NGZjYzJjNWJmNWEwNzkwOTA2M2NiMjg5YTA4YTJjOGEzM2QzNDM4NDJjMmQ2YTNjZmEyYTE2Y2EyZWFmY2FiN2VhMTAwZDFjNzE0YmFhYmI3MTQ5ZjA3ZTI1ZGVlMzIzZTc4MDc1N2RmYTgwMTZmYWE3YzA2MjYyMjJjMzY1ZjhmMmY2Njg3ZDFkZWQyMzRmNzk5Y2M1MGQxY2QyNmI0Y2ZhNDA0NTkxNzA1NmZjNzljM2I4OGIyYjE5MDhlMzcyZGY2NmRhYzg3MzQ2MzE2NDgzNDliYzM3ZmEzNGIyNWZmZjNiMDc0N2I2YmMxNmI5NGUzZTU4OTVlNGJiZDkzZDQ3OGE2YzFmNzVlNGZhMzBmYWE5MjIwNDllZDRjNTBmMTJmNGIzMTJhODk3NGQwZmVkOGQ0NDI1NWRjYjJiZjBmZWJlNDdmYjNmYjhlZDk5MDNiNWJhNGNhMThlM2NjNjc2MmNmYTFlYWYwNGRmYTk0NGQ0OTZlMGZlOGJiN2RjMDQ1NDUxMzk2YmZhYmE1NDg1ZDlkNWYzOTFhOTU0YzM3MTQyNTNjY2Q5YjE5OTY0ZDQyODA2ODA3MjA3ODMwMzZiM2FiZmFmMjg4NDU4M2VhNWJkYmNmNjlkMDg4OTdhYjI4ODMxNDYzNWFiYjRjMjk2NGI3MWFkOTI5MWZlYjViNjFmODBlOWIwY2MwN2Y5MTJhOGU1NTk4ZDU1NDhkZWZlMGVlYTFjNDQ4NTczNzEwYWFjZGRiMTUyZjkzYzdjNmZkM2Y3ZTRlZDlmNzQ0MmE2YjkwMGYyM2MzYzU0NGNlNWM5YmE1ZjVlOTJhYWZkMTFjOWZmNWY3OWMwOGI5ZDA0NWZlZjA3OTcwNjI1ZjYyZTJmNDMzNGE0ZDY2NGNhZjcKK1NJRzogNzRjYjAyOGRjNmI3NWIzN2ExZGFlYTFjZjg4NDY1ZGI4M2EwMDkzZmVjYjIyZDk5YmE4NTVlOWFiNTlkMDVjYjIyYzg3ZDBiMDlkZjdjMTE2MjEzYmFhOGYxODliMjcwM2ZmOTUzY2QyMDJlYjlkZWEzOTc2ZWU4OGY1ZmE3MDMKKworVFNUOiA3MjcKK1NLOiAgNjI4NTYzYWEzZWUyZmM2MTFiY2ZmNzhiZmIyYTc1ZTlmZDg3ODBlODdhOTM5NDk5YTYxYmVhYTZhNGI3MTkxMworUEs6ICBkYTIwNjE2ZWU0YTQxYzJlYmZkYzUwYWI1NDk1M2I2ZDM4N2IwNmM2ZGVmNzU3OTZiMDg4MDk1NjVjNmNmODA1CitNU0c6IDA1NmZiOTU0ZmJlNmE2MDE0ZmFkYWMxZTFhOWY1NmNjMDhhZjM3MzQ4ZWJhZjY5MjA2ODMzODRlZmE0NzYyNmNjZGRmZWFkMmQ1ZTllOGNmZmY0NWY3YWM2M2RlNjNmNjlkMTI4NDhjZTNjMGVmMWY1MzBhZGU0MzBmMGFmZDVkOGVjZmQ5ZmZkNjBhNzk3NDZhMmM1YmVlZGQzZTY3MjQ5OTgyZjhiNjA5MmVlMmQzNDA0N2FmODhhODFmZWFiNWQ1MmI0N2Q1YjNmNzZjMjA0MTcyNWY2ZjgxMzI5MzA1MGFhYTgzNGIwMWEzYTU4ZjY5YWE0YThjYTYxZjViNzQ2ZjYwMGYzZDQ1MmM2MjgyZmZkY2E0NDI5YjkzMzg5NjdiYTNhNzI2NjY5MGFlYzc1ZWJmYmY3YmU5OGQ5OTliMDNlZGRjNzI5MjU4MWIwZDY5ZTMwYTAzNTFhMTUxZGI3MDQxMmIwYmZkNDNkM2JhYTlkNDU2Y2IzZTBiNGZjMTljYjA5ZTZjYWRjYjZkM2YzYmU1MTM3Y2M3YThkMzIxOWVjMjAzNmVjNjcwZWQ3ZWM1MjNiMWIxYzY4N2I1NDY1MzA3ODgyZmUzOGQ3NDcyZDBiYTg3YTQ3MTg2ODMwOWQyZjc3M2ZmMjRjODdkMzljMTZiNzA4YTRlZDlhZjQzZjc0YzhkODVjZmU4YWI1NDA2OTA3ZTk0MWExNDk3MGUyMDljMjlmZjdlZDhhMmY5MzVhZTQxNzA5ZjI3MGQwZDA4NTU1ZWY3YWYyZWRmZTQwZGYzOTkyMjNjNzg1YTQzZTdmMzY5MTU4OWUyZWE0YzAzNmYxMWQwM2Q3ZDFlZWExNGY2MjAwMzUzMjVjZjJiMzNiYWYzODYzOTNlOGE5NzJhN2FmNmNkOWI4NTQzYjMyZTI1MzNkMWZjYzMxNzdmZDk2ZDFlMTNiZjhiNjhkZWIyMjJmOTQ0OTcyNjVkM2NjYjM0NTc1MWJkNWI2NjkwNzgwODE5OThkNjA4Y2E1ZmRjMTM0ODM5ZDRlZDJiZWJiMjk1MmZlYTVhMzljNmYwMzNjMTU1OGY2OThjZTQ5NDZlNGY2YzA4YWY4NzRmMjczNTdmODcwZWJlZWIyMTk5OTc2ZmZhZWZhYzk1MWY4ZTE3ZmU3ZDA4MjFlMWI5MmE5MGFhNGU5ZGVmZDNmYWZkYTA1MmE0NDQ0NzZkYjFjZTM4YTllMTc2ZTg0MTE4OWFiZDhmZWNkZTBmYmM1Y2I1NWY1MTFmNWZkZTA3ZWE5N2RlYjM5YjdhYThkYzg0YTM5NDZhNmNmOTI2ZDM5Yjk1YzExYWY5ZDY0ZDk4YjgwN2Y0NzA0ZDBhMmJkYTk3ZGFkOTg4MWFkYTFiZjY2MzYzNjZlNjBhNTIyYjQ4MjEwNDc4NjFjN2FhZTIxNDZhMDJlZWY2YjI1ZDUxMzcxYTBmMTdkMjRiYzE4N2RjZGQwNWQ1NDFjMmY3MjIwMTQyNzkxNWEzOTI4Y2QzNzg2ODkxMDNhYzUwYjMzZjg3YTQ3ZThjZGZhNjg3YTVmMGFmOGE1NjczMWRhYmU2NjJmNGYyODM2ZGUwYmE4ZmFmZDg2YTM4NTRiY2EwMTJkNzA4OGEwMGI5ODU0YzJkM2M3MDhkZGY1OGZhYTM1NWE4OWFmYzJjODBmM2Y1MzM2ZGEwMWQ3MmEyNzcxYTA1NTgxM2ZiMzUzMzBmN2QyZTAxYjFkMTJkYWE5NWVkNTVkM2JkYzVkZjc3MzljYmMzY2EwOTdhNDFiNmIyYmQ3ZjBmZjlkZDFkODY1ODk4M2JhM2ZmNzkyMGMxNWYyOTJhMWVmOWZjYWRhMWM2MDdlY2I0NWQzYTczYzlmZmQ0MmYzZTE2MDIyZmRmZTEyNzQ0OTI2Mzk1Zjc0ZmIzMTExNzkzZmE5MjgxODIxYTY2YTAxZAorU0lHOiBjOWE2YWFhOWI0ZTFjY2UxYjU4NDQ1NzI1ZjYxZjU1MmM4ZmI0NTgzMWYwMzQ4Mjc5OGYwMWY2NjNlOTk4M2RiMWE4MmZkMzNhYmEzZWNjYjk2MjI2NDI2ZDUwYWUxN2NjNTEyNzRjZTE4YTM4ODYwZjQwYjJmODIzNjFiNWMwMworCitUU1Q6IDcyOAorU0s6ICA5MTQxZjc5ZWQzMGJmNjAwNjExYTEzZjM2N2I0MDM5NmYyZWM4MzljNTYxMmJiZjFlNmU0OTdmODM5NTRiYzg4CitQSzogIGYxNGVkYTk2MjY0MGJlY2I2NmM0ZDFmMWEwMjExMTAyNTE5MTdiOGIxZDM0ODI4Mjk4ZDMyMTQ1YmFmNmU1ZDkKK01TRzogOGZlY2FhN2FlOWEzZDRhNDg1MWE2NjM2MmIzNjZlMTY3YjlmNDMwMGZkYWIyMDU2NTQ3NTE5ODdmMDg1ZGU2MWJlYzkzNDRhYTg2ZjVlNWM2NDc3NTE0YzI4MDRjZWQ3YWMwY2QwNjI4NTI5YTNhMTU5OTIzNmVkNjdiZWJlMWYyZTk1YWExNTFmZTBmM2IzMDExYTFkNGJlOTkwMWNhZmFiMmYxODkxOTA0ZDRiZmYwMTI4YzFkMzVlY2VjYjMyMmIzY2MwMWRhY2M1YWUzZGNhNjkxNGE3ZDM0ZGE4Yzk2NTdiOTUwZjg5ZDFkNmFlYzMyOTliYjY5MDExMTA3MWZhODcyODI3NzQ5NDNkOTZhNGFiN2MzZDZkZTdkMWJmMTE5MzYzMDY4Y2M4MmQ0NWU0Yjc2NDU0YzYwOGJjMzU2NmI3ZjliMzg1Y2M3ZWIzOGVlNDI5YWZjMmRhOTk2NjlmYzVjMWJlODIxNjFhMWIwYzMzZjdiYTlhZDQ0MTlkMjA2Mjk3MTkwMWRiMDAzYmZhMjNjNDQ3MTQ5OTVjYjA2YmZhOTY2ZTUwMjNhYTkzNDZmZDM3NWFlMmExZTg0MDg0MzE0ZGYzZjA4Y2UyMDgwMGMyYzJhZGZiYjgxMzY2ZjZiMTA0MjQzZDYyZDUwNDFlNzI3MzQzM2YxNzU4MWJmOTNmNGM2MTQ2ZmE5NjZmNjM4YWIwN2VhMTY2OTRhN2NlMzA1Y2M2MDlhNmUxMDYyM2ZmN2Y2Yzc5MTZiNmU0ZGJkZWJiN2I1MmVjYTdmMGQ1MTg3ZmY2NjRkN2MzNzBlZDIyODg2YWEyNjcxMzI5ZDkyOGUwYTNiZWEzYjQ3MTFhMTI4YjlhYWI5MDI2NmY4NjUxZDIyMGI5Y2MxY2JmNWIxY2U3MjY1OTMxODAzNjkwZDMyOTFjMDFlYWQ0ZGJjMzMyOWE5N2U4NWM0ZmUxZDM1NjYwOGNjOWU2MGIwNWJjMTQ4MzhhODYwODI3OWEwMDYxZGUyOGZmN2I4ZTgxZjU5YzhhOGM1NTIzOTI0YzRjNDg1ZTZlYTgwYWM4MTc1MGJiMGU0MTllZmM3ODU4Y2Q0YWY1MGM4YjhjODA2NTBmYWNhYjRkODI1OGY5Y2FmYTAzMTBhMDA3Y2NjYmM0MTg1YzgyZmQxNDZkZjFkODExODc5ZGEzNjUwZDU3MTZmMTAwNGI3MWQyYzdmMmJkNjUwM2MzNTQ1ODlmODYwMmM5NTBhMWY1MTM5ZjgxMTQ2MDc1Mjg4MGEzNDExMTY2MzBlNGZmODQ5NDhlNzRhOWViMzUwZDY0ZDgyOTMwMDIyMDAyMzNmMjA5YjE3ZDc4ODk3YzdjZTZjZTI5ZTI5ZjgyZDRhZDZjNjFlYjc5ZjU3MzljYjY2OGIyMWE3NDU1NTVjOTZlMTk1MjY4NDVlODJjNmVkMmIxYzZiZGQ2MzY0YjhmYzc5YmE5YTMyZGJkM2Y4Yjk3NWViOTIzNjIzOTU4YWUwZGFhNGZmYTEzOTIxN2MwMGUwMjFmOTM3ZTliNzkxYzM3OTkxYTM1ZTUyMzFhMTkxNGMwNDVhNzg3NDMyZjk3YjhlMjA2M2RiMTA1ZTE0ZGE5NzljMWM0Y2JhNzg1MjEwZWIwMjAxMTMzNGIyMzBjZmI2ODMxOTk4Y2NjZTI1Mzg2ZjRmM2JhMGRjZTIwMDZlOWMzOTQwYjRkNWE1NmFhY2NkY2FiMDI3MTg2ODk4MTYzNjBmMTg4NTJmZDE5OThhOTlmY2U5YTA0ZGEzZjVlMjNhZjk0YzZlOGE1YmFkZmQzOTMwNGI5ZTJhMzc2YTFmOWJhYzA5YTg1YmQwNDI0NzZlMjZiNThlYzczZjEyMzZkNDFhYjRiNGU3YTU0ZGVmOWQ2NmEzOGY4ZTU0NmRlN2IzODhlMWU3ZDY2ODFlNWUyYTA5NmYxNjAKK1NJRzogY2YyMDJkN2YyZjllZDExN2Y0Mjk1MDJiMmE1YWZmNTRhN2Y3NTFkMjE3MTUxNWE0ZDIwMzc1MzQ0NmRmMGViYWM4Njk4NGM4OGJkNDJiZDFmYjhkY2I0MDg3NzY3MjJhMzhmMzJjY2ViMjVmMzJhMjVkNzM5M2YxMzhlZWRmMGEKKworVFNUOiA3MjkKK1NLOiAgNjk1Yzk2MGJiYjBkZDU3ZmZhMzYxNTFjODVkZTczNTE1NGZlNWFkNWY1ZmM3N2QwMDVhMGEzMjAxMWRlYjMwYworUEs6ICAzNDEyNWU0ZTIxZjc4OWVkMGUxMTgwYzFmNjM2OWM3MjFkY2FlOTg1OWI2ZjdiMDRmOTU3ZTUxMDAxZWVkZThhCitNU0c6IDM3MDY2OTZjN2E5MDY2OTBkMGQzYjcxZTdlMjExYzdiMDY3MTY4ZjNhOGYxZWQ5ODRhMGE1ZTYwNzg1OTc2NjJlNGU3ODg5ZDUyZGIwZjc4ZTBkNWVmMGU1ZjdhMGEwZjQyNjNiNjg0OGIwNzI1Y2FhNGIxY2VhNjk4NzQwOTUxMWM4ZTVlOTgyZDNmNWI4MmJiNTZhNGE3OTQ3MTIxOTM3ZjhlMTA1YzVhMTRiNTNlNmMzN2NjNzE2YjFlYmE5MjI0MjE4MjhiMDQ2ZjY4NTZjNDRmYWJmMTNhNzUxNmM2MmE1ZmY5ODU2ODQ1MGNlZTc4YjE0MDMzNTA0N2JmMWNhNzdlMTU0OWE4OTRmZWViMDc4MDQ1ZTQ2NDE4MzIyNTNiZjY5NTQ4NTQ1MmVjMzY5MDY1YTYwMDI5YTZjOTA3N2EzNzlkYjIwNDg1ZWEyZWRiNmM5Njk1NDdiYjI2NTMyODliYzZlODFmZmNiODRiZGJmNzczZGRlYTRiMzc1MGU5YTcyMzk1ZDExN2Y2NDRiMGUyMjA2MWQ0ZjNiYjdjNWI2MTJlNGI3MDM5NWUwNzc5NTE2YjQ2NjU5MTE2OTAyZmQwZmJjZDIzNDBlZWE0NWU5YzIzZGIyNTY0YTVlMTFkYzc5ZThmNGIzMzJhNDQzZWMzNWFhZDk2MDRmZTc5MTI1MjA4ODI5NWU4NGY2NWEzMDczMTI1NTBkOWViZjYxZjM2N2U0YTBmMmI1NjIzZTUzZWY2YmMxMzI4MjVmYzI0ZWJlZTRlYmYzMzhjYmZiNWRmNjliMzJkMDMwZDQ0N2M0NGYzMTNiYTk2ZmUwN2JiZmU1YjAxNjZlYWVjYmM2MTliYjZiMmU1OTI0MDEwYmEzZWMxNTBmZjZhNjlmZWM0ZGVkOWM0NDJmOThjMTVlNzdmMzE5YjQ4NDNiM2I3NDhiNWQyNjA4OWE3NmMyYjgzNGZmOTNjNDEzZTA0Y2E5NTUwY2QyMTFjZTJkNmE1ODNkNzgyNTc1MDY2ZGI2ZGQzM2U4ZDVlODM3NDM1NWQwNjhhNWViOTZmOGIzZGE4ZGRkZmI1YmFmNWM1OTZkYWFmNTU2YThmMmNiNTc4MWU1MDQyMzI3ZjkyYWUwNjIxZWFlMDg4YjVmMDEzNTkyZTc3ODczYTgxZDdlMDY4ZDdiODMzN2RiOWYxMDlhODM1YjQ3NWU1Y2FmN2NlYTVhZjNiNGFkNmQ5MGJhYWYxYzczNjU1ZWM2NzY3NDdmY2RkNDE3NzViNGZiZTM5MjRjM2Y0MWQ4YTczNzUyOGQxMmQ2MTU2NjUzYTIyMzU4YzY4MjE0MjZiMmMwYTMzZTE2MzRjNjJjN2M4Mzg1NjQ5YmMyMzNlN2RhZjk0MzlmMDlkYjliZDExZWEwMWUyOGI3N2VjYmJjNDU5MGUyOWZkY2YwZmRkZTE1MmY2NDc4MTMyZmU0YzNhNWI0NWE3MzA1YWY2ZTM4MWNhZGQ3MjQ5NmU2NmJiYjg2NmNlYTQ3ZjdlN2Q3ZTYzMzQxNjAwYWYzZjQ5Y2U5YzllNGUzNzM5NGRmNWRmNzFkYzEwY2QzOTFmZGNiOGExOTNkYzk4ZmMxOTA1OWZhM2FjMjMwZWM1NDc2YmY5NGQ4NTU1NmFjZTZlMWJhMzI0MjFiZjU5ZGNiZTA1YzVlMTVkMzRjNjY0NGUyN2QwYTAyYmU5N2ZhODM4N2VlMDM3MDZmMjJhOGY0YjNiNDA0MGFkN2QzZjhhODY5NzFhMjBhMDllYzgxYjc2OTZkODM0YzUyNmI4ZTUxY2I5N2QyNzY0M2Y5YWJmNWUyOWZmZDAzMzNmOTVkZTE1ZDExMGMyMDY0Y2E0OTQ2N2MxNGVmMjI3ZjRiYWJmMWE1NWU3YjFjZGEwNDI5Y2ZmMjU2YmUzMWNmMTE2NzE5YTgxYjljNWZiNzVmZGY2NGUKK1NJRzogNGFmNDFjNTU0ZDk5MDgxMjY4NmMzMjlhODc1YzQxZWUyNGI0YTdmZDdiM2Q0ZjhjOGQ1Mjc1ZjJlN2NiMjQyYjI1OGI1ODU4YTQ2NmRlNTk1Y2UyYTIxNzdlMzUxYzdmMDhjN2ZjNGUwYmY5N2VjNWZiMmRjYjgyNTJkMmM5MGEKKworVFNUOiA3MzAKK1NLOiAgMjVjYjE3ZmMzM2QyYmY4Mzg0YWU0ZGYyMGMxZmFkNWMzNWZkNzY1YWZmZGUwNGI1MjU2ZDRkZTAxY2E4ZGUxNAorUEs6ICBiODZjYTMxMmZlNTk4NTIwYzY0YmU1YzcyZjViMjM4MTY1MDdmNjllMDcwZjgyOGUwMmQyYWZjZmUxMWJmYTAxCitNU0c6IDRiNGE3MWNiZjhjYmFmNTdhNzdkNGVhMTg4YTZmOTY0ODQwZjBkNzE0YTVmMzhhMDk1YTEzYjRlNTcxMjk3YTg4Yjc5MjQxN2QxNjE4NDQyN2Y5MGUwNDNkZDhhNTViN2YxYzEzZTAwZGZhNjA1MTY0NDVjYmU3NzA2OGM3OWM4YzM1ZWJlYWMzMzBjMzNmMTEyMWQwNTczMWE4ZjUxMzJkNjQ4MDA3MzI3NDY0MTE5NWE3NTIwMjExNmZmZjFjMzE4ODE3MTc4ZmRkNzY4YmJkZjEwNWZhMDY5YzdhM2QxNDNmZGY1ZDE3YmZhZDdjMDYyNGU1MjkyMDY4ZmQ3YmI2ZDMwM2I0YTI3Y2IyMGE0ZTYxODc1MDc2Nzg3ZDE5ZmE2ZjcyOWM5NGRjMGJhOWI4YzBiZmQ5ODY2ZGE1Y2IyZTdhMmNkMmVkYmRjOTVhYzM0OWU1ZTVjMjE3MmU1YTRjZjdiZDkwY2FiZTJjNmUyMjQ1OTgwYmQ3MmQwZjZmNTQ3OTg4MWU4YzRjMzU0ZjY4YWE3Mjg0MWQwYzczYjk4NmJhNTEwMjEyMDMxNjEwMjZlZTNkNzI5ZGRmMWEwNDlmZmU5ZWIyNTQzOTgwMmYwMzAxMWQxNDRlNTBiMDJiZDRhY2E1ZTU1MDZkMzJmY2Y2OWUzMmY1NDI1NDQ3OThmNGU4N2Y3MmJkZjI0MzNiMWZmMzI1OTI5MmUxZDkwODEyY2ZmZDc5ZjZhNTQzMjcwYmFmMjRhM2MzOWRkMzU5OGUxYzY2MTYxMjkyMjUyMmYzODdkNTE1OTc2OTJmMzE0YzRkNWFjNGJmMTg4M2E2MTQ2MzYzMzZhNTU0NGQ1OWZmNDFkMWUwZGJjZjhlNjYyN2U3YzgwODU2NDYzMjJkZmMyMGMzMzJjYmRmMzUzNzBkNDdkY2FiYjgwMmUxN2NhODQ3ODBlZWM2NjFjOTA0ZDViZmJjMjQwYWQ2YTE0YTc1MzNmNzFhMjc1MDBjNjFkZDNlNDczOTgzODg3YTg2ODM1MTg3YWJiMGRmMDhmYTYyY2RhNjlkY2U4NmUyMWZhNWFlOTU0YzIyZWRkYjYwZWUzMTMxNTA0YTY5YjUwNDg2YTE3NzY3MDkxODgzNzYwNjM4YTI5YzM4MDMwZTFlMDVmZGIyOGUxNTg2MzMwMTAzODVhNjIwNjEzY2MxMGQ1YTVmMzUwOTU1ZjRhMzQ3YzY1ZWRkZGI3ZTI1MTU5ZGE4ZGNjMjY1NTkyOGFkNmY2ZDhjNGMxYWJiODE3ZDdmZWYzYmFlNWRlMDQwMmVkZGVlN2I1MTUyMWNlMjgwYTY2Yjc5NjE0MGY1NmFmOWJjMjBlNDY1ODc1Y2UyNjI4YThhMTA0NzdjZTliMmVhY2M3ZDg2Zjg4MjcyNDU3YmZkNDQzZTcxMjUyNjk5NjI1NDM4MGYwMTM1MjI3ZTlmYzE1MWM4Njk1ZTljYzY0ZDI3MmIyNTZhYjk1YzlhOWY1NjhlOTM3MTZlMGU1M2QyOTg4MmUzY2U3NDI2MTI1N2EwMmNkNDk3YzM3ZDc2NGQ5MGY3ZmQ0NzhhMTdhODkwYThiMmVhNjFhYjgxZjY4NjliMTIwYTJmNjQ4NGE4OGMxNTE5NTMzOTFlY2E0NDUwMTUzNzdiM2E1ZGZmZTRjZmJhY2ZiNWJhYjJjNDdmNjU0ZjcyYTlkMTljYmM0ZDI5NTM3MTk4NDA1ZTNhMDRiNGJmZTExYmNkYjVjMWYzMGQ5YWMwMmY1NDg0OWM1N2FhOTZmN2I1NjYzNjExNmYyYmI2ZjI1ODNkOWFmOTRjODZhZmY1YzEzN2Y2M2NlNTRlOGYwYzIxYjZjMjVjMWYwNDcyYTIyOWM5MDgxN2U2MTYyZWFjNzFjY2RhMzA5YTE2NDNiZDYzMTJhNTI2M2EyZWZlNjQ2ZGZmZTc5ZWJkODE1N2EyOAorU0lHOiA4Y2NiMGRiY2Y3Y2MwM2U4M2UyMWM1NzQ3NGFmZDNhZDg4OTgwOTdiOTcyZWRlMTc1YWNhYWU0OGUzZWMxN2IyZGIwNmZjODI3NzZiMDc1MWMwZjk1NmZkNzE5NmYzZDFjOTYzMjFhNmNmM2Q4OTI0MTVkOGY4ZWViNGExNDEwOAorCitUU1Q6IDczMQorU0s6ICA0OWUyNGQxNjk5ODMzNzI2YjE4Yzc4ZWE2NTY4NDAxYTk3MWUxY2EzOWRkMDZkNzU2M2FjOGI0MjUwZDRhOWY1CitQSzogIDcxY2YwNWU5MGQzMDFhNmQ5ZmFkN2YwYjM4ZWM4YmIwNDRmY2ZkOTdjODQ5YjA0YzAwMzYyNWRlMjliZTg2YmIKK01TRzogNmQyNjA1ZjYxZTFhMDRiNmFlMThjMmMyNWFlMTAwZGQ0MmE2MWU2NjRlMmRiNWMzNGQ3YWQxZjg0YWM1MDc1NTJiNzQxYzIwODZjMTdjODUyYmFiZTA3YTkxZTEyOWE1MDZlZTU5ZWRiOWNlNzNiZTFiMWQwNmQxMjBlYzM2YTFlOTRjNjI4MTA1NGU3OGNlYjFiZGVmZmJjYmY0ZjAxMDUxZWQzODFiZmM4YWQxNzY5ZjQxZTI0MGJmNjA1OWQ5NzA0Y2FjZWM2NjY2MTFmNDFlNGRkNDM4YjdmNTAyNDJlYTg2NzU2YmIxZjgxZTU5NDJjMDkyMTI5ZmJjNmRlNDk1NWQyOGRmZjM1MjM3ZGIzMGU0YTUwMzZhOTkxNGM5Zjg0ZGJkOGNjZjgyYmEyYjFiM2I1NTU0YTJiN2E3NGNiMGIyYTFlMTk2MzM0NTI4NmUyNThkYzhlN2Q1NjcxODAzNWY5NWYzMTM4MTFjZmJkODUyYTBmOGY0OWEyOWVmOTMzZTdjZGE3ZWQ5YzdlOGIxNjJjZGJhMWE4MjI2MmNkNGRmN2NmOGVhNGI1ODZkYjQzZGNjMWUzNzY0NTk4ZTljYTQ2NjczODIyYmFhMmFkODdmYjE0YjZmZGI5ZTIwMzJkMGNhNTFjMjZjNWVmM2Q5Zjc5Nzg1ZmFjMjQ5MWNkYmY3YzM5OWYzY2QxNzc0YzFhNmIxZTRhNjdmNTQzNmQ4MGRiMDI1ZjhmYjY0MDllMjc1YmQwZWQ1MDhiNWUwMzllZDJlNGVlYzhiMGY0ZDViZTk5ZGNhZmE2YTE0MDEyNTI3MzJhNjViMzdjOTQzYzA3ZWYzYWNiY2ZiYjNkYzA2ZGFkMGE4OGYyZjVlYjU1MWEzOTk3YWQ2YzZlZWQ5NWVkZDlhMGFmNGEyODhkNWU0MzI4NmIyYWMwNzI5NzdjNDM2YjdjNWZmN2FiNjFjOTQ4NGYyNTdmNThlMDEwYzliNmFkNDE1ODFkNzQyY2QxOTc1MmNkZTU0ZDJiNDIwZDY0MzY1NGU5MDk2YTgxZWI5ZGNmODA0YzdjMmVkMGUzOGQxM2E1Y2UzOTk3OGNkZDAyYjI1MzUwOTQ1ZGU3OGZlZWNjMGMyYzIyZmZkNzA1YzNiYTgxMTMyNjVjN2I5YTdjOGRkYjU5MTc4YmQyMWQ3ZjZjMzFjNmJlMmMzNjc0OWVlMGY5YWI4YmMxZGNmNWRhNWNiMmQyZDU5NjIzNThmNzFmOTZhYjM3OTJhMjUyYTUxOWU0MTUzNTFmNDNlN2UxMjAzNWIwMzI4ZjI4MjA4Y2Y0YmU1MjlkMjk5YWE1YzEyOGM5ZDVlZDU3NWJmOTBjNTM1MDU2OWVhYTZmMmQ1NTIxZGUxMTgwMzA5ZjY4NmM5N2U5YWQ2ZmExZWMxZGQ4NjI3YWU4OTUxNTgxY2Y2MDRiOGI5MTdjNWJhNDM0YTYzN2JlMWJjOGI3OWY0YWNhZjc3OTVmNGU1MWFhYmRiODg1MDc3YmM0ZjNjNjhmYzMzMThkZTU4MjNkN2UwODA0ZWU5OTViNzAzODc5NTBmNzk5MzUzNjgyMzAwZDRlNzk3ZjNjYWQ2MTFiNGM1NjJjODY0MGZmMmIzZmUyOTI5MTZhOTcwZmI5OGMxNDc1YzFmNGUyN2I5YjMzY2ZlMGQzYWQ5MzJhMWViZTZhMjdmYzNiNDQ2NjIyOTU0YWVlMTY4MzY2OGM4YmQ0YTNmOTAzYmU1Yzc3ZGZkYjhlODkxNGNlZGM1MWY2NWZlZDJkOWM0ZDAzZTEzYTY2OGQ0YzdlYTVlMzE4ODNlMWIzZGI2NDM2M2UyYWM1Y2M1NGI1NGNlNjljNmFkNTJmODc0OTk5YjVkZDJjNTc4MmYwM2MzZDUxNTA1ZGY1MzZhMWZlMGQ4NjBkMzNlYWJlZDY0MWE5NDAwODlmMTI5N2RkMGY1N2YKK1NJRzogYTBiNmEyYWYxNWI2YmU5ZTk1MWVmM2YzMmNiZDFjNjcwMmU4ZTAxN2ZiZDMxNWEzZjI1OTljM2YxYTExODY1ZDQ2ZTc4NDU5YTBkN2Y3YmUwNDZhYWUyOTNjYWQwOTEzN2VjODQ3ZTI2OTI4MTA2ZDlhYTM1ZTA5ODJiOTkyMDIKKworVFNUOiA3MzIKK1NLOiAgZjhmZjk3MDMyYTM0Y2Y5OTk5MDg4MDU4YWY1NmZmNzBiNmFjYjJlZGY3NTllMTMxZmFlYzg0NDBmZGVjZjZjNAorUEs6ICA1NDM4YjRlMzNmMWM1ZWExMTJmYjFiYWZlZjQwNTliZjA5NWExMTQwOWI2NGQ0NmJmYjRkMjU0NzNjMWMwODc0CitNU0c6IGRmYjQxZmI5ZDUzNzAyY2IyYjllM2ZmY2FkNGVhNjAyNzE2ZjcxOGE3ZWEzM2UyMTg0M2UyYTZjMDUyYzcwYzZjNTE0ODVkNzJiNTNhNWJiNGUzNGUwM2UzZTFkMWE1MjUxOGViM2U3ZjE4ZjJhMWUxY2FmNzhhY2IyMTE2MDg5YmVkNGM2MTcxMzhlNzE2YTkxNDMxZjJjZjY0NGExMjEwZjZkMTkyMGQyODU5OTQyNjRkNjQ2NmIwZDhkMmM2MjYzODA0NDYxNmY1NzZlZGM3ZDBkOTNjYjY2MDEzMWQ0YmI1MDg3NWUxNTM2NDAxMjNhOTZmMTViNzVhNWJjZWU0NmQ1Y2M1ZWIxYTQzMWM1OWQyZWFkZGZkNTUzMTUwMmZlYjE1NTFiZjc3OTFjZDU5ODlkMTdkMTAyOTZkMDFiYTNhZTNlMzg0YzY3NDUyNmNhYjYyYTdjMjRjMGZmNjc3ZGU3MWNhMTcyNjIxYTI4YTg1ZTAxZWVmZTA3ZjZlZWY5YzNlY2ZkN2Y5NDk4YWM0MmY0NmE0MzcxNmY2MTUzMThhM2IyODc1N2MzYTE1ZjRmMWMzODIyYWU3YTc1YzIwM2EyOTgyNThkNzUzNjM4Y2Y0MjVlMTViYmM0NjIwMmIwOTNiOGU0ZjNlNjcwZmJiNjYzZGIyYjY5YzhmYjBmNjI1MDc0ZDg1YTQ0ZDM1MGUwNDJiYjFiNzQwMjFkMTkyOTk3YTJjMjdkZDZjODYzNDg0MWQxMDBhMDM0NGJhZWQ3NTBhMzlmZjVkY2Q5ODQ4ZGZjZjA5ZTVjOGM0Nzk2N2I5NjU1NmUyMzMyY2ExN2Q4ZTQyZGQ4ZjM5M2E1NDQ1YTM3MjI0NDYwMGIzMDAxYjhmZTg2YzQ1ZWFmYzZlNzM4YWE3ZTExN2I0YTc5ZmEyZTZiMDBmNDY0OTI4ZDE4NTZjODNlY2ZlODdkZDM0ZDE1OGY1Y2I0ZTRmNGQ2MTBmNTk3MTdlYzc5MGJkM2ZmODcyMDQwYjY3ZThkMzkzOWU4MDRlM2I1ZGI5ODVhMDk1NjIxY2JjY2Q2ODZjMDkzNGVjZTNlMjdhYjJjNmNlMzNmYjUyYjExMWY0OGU0ZjI3NGJkZjMyMGQwYjAyMzg0YzgzYzQ5ZTFhMDQxYmQyMzE5MTA5Yzg1YTA2ZDgwNDhhOTkzMzU3YWJmZDgxMWFjMmYzODA1OWQwNzdhY2JjMzZhYTk2NmMwMjg5MDM3NDg2MjVmOTJlOGY3OWQ1MWJkYTEwZjc4NTIyOTc3Zjc2ZWM0ZTg4NWU0OWE0NmM2OGRlMDlmM2RhOGY4NmI3MWFlNjQyM2JkMjlkZWVmMWNjNmExMTNlYWMxMTVhNmNkZTJjY2QwMTFmYzFjMGYwZTM0MjdmNDNjM2U5NmZjNDE1NmVkZjYyZGRmYjdiMDgzNmI4ODhiYWIzYzQzNDUwNTVhNmM0MTc4ZTllMjI4MjlmZDhjZmNlMzliMGI4NDQ0ZWIyNjQ4N2NjOWRjODI2MDZmZWFhZGFmNDk3ODY5NGU2NTY0ZjI3MjljMWIxM2FiMzdjOTA3MmRiNGU5ZGU5NDBlZTVmMWQwNTg4NGFlN2ZkOWQ5ZWM5Y2I3ZGU1NjM0NzYwMGE4OGRlYTkyMDhhNjM0MTlmY2UyOWVlNTAwNTVhMzc0YThmMjJmOWFlMmJlOTgwNWE5ZjQ3NjE1YWE1OTU3NmI0NDA0MmZmMTI2YTg5ODI0ZTM2YWQ2YmM1OGUwNmJiOTBmYmVlZmJhZTVkNmQ3ZDYyNDMwZjM3M2I2Mjk2ZmJmY2Q0ZDY2MjAxNjgzNTM1ODNmYmQzZDVhMjkyYjk1NzI1MTc1MzRlMmZiMGJlZWYyZmE5OGE0NjRlNTkxMDNlN2EwNDI4N2YxNWRhZDBmYWM1NDk3MGU3NzE1MDc4ZDYzZWMyNjM2MmY2ZmJhYmNkZGVhZjcKK1NJRzogNTA5ZTllYWRmZThkZGU3OTE0YWMyMGNhZmMwYjBhZjIyYjg0ZGQ4YTIxMGE0ODEyY2Q4Y2FlMzliMGEyNzJlNTNlMDIyNDZkYzg5MzllOTIyNjkyMDMzNmUxNDBiMzE1MzJkMDY4MTM3YTM0MTYxZTU5OWE4Njk0YTk1ZGRmMDEKKworVFNUOiA3MzMKK1NLOiAgMmU0YzM5MjE5ZmM5MmE1MzhlNDhlOTVmYmZjZmVmMzBmNWEyMWI3ODk0MGI4MTA1M2JkYWQ0NjAyYjRjOTY5MAorUEs6ICBmOGVlZDg5MjE3NjYyMDQzNGM3ZjBlYzUzZGNmZjM5ODYzMTA5ZTdjYTRkMGIzYzZjNGI1NjQxMGJlMDFlNTM3CitNU0c6IGM4N2QxZmJhOWQ5NGE2YTU0MDg5ODBmYzgwODM5ODBmZDJkMjUyZmFlNTQwZjZlZWMxOWVkNjc0NmMyOWUzMzlhMWMyOWY2ZjUzYmMyM2ZkNmJmYTQzODUwN2VmZjVkYWY5MDM0MDNjZGE3MDdiNGRjNWU4NDQ4MDVkNmIxY2ViNGFmZmY0YjIzMmU4ZTY5ZDdkMjcxZjNjMDY3YzQ4NTRmM2Q5NGYyN2ZlMzI1NTgxZmFjYTc5ZDFmMDJhMjYyOTBhZDIzYWY3MTEwMGMxMmMwOTE1NzY0N2NhOWRhNDNkNzY5MGRkY2Q5NGRiNjVlMDAwOTg5Yzg3OGI3NWEwZmYyMmQyYzcwOTYyNTk0YzliMDgwOGYyNzg0NmNjYWM4NTY3YmNlNWQyZTNiNzYwMjgwOWYyM2I1OWNkNzE4YTA4MDVkMTA4ZjMxYTYzMmEwNWI4ZGZhNTAzNWFiOTQ2MWFlYmE0MTYwMDlkNzRmZGY5ZTAwNzIwMjg1Njg5MGQyY2ZmODBmYTI0MGI5NzhhNDgyNzBmY2IyZjQ3MzY5N2JjYmE4ZTczMGE1NWMyODc2MTkxOWEyM2JlNDFkYTI3ZmZlYTA5ZTM1NTljYWFhYmY5NTE5ZWMwOGUxZmZhODY4MTdhYTNlODg3NGZhODE2ZTc3MThjNWIyZjM0NDk2N2JhMWJjMjgxOWM0ZjA0NWE5N2I0MDU0NGVhNjFkNzE3MDgzY2NhZjExZTlkZGMwNGEzNTk4ZWYxODFlN2JlZjRhY2VmNDViNjU1MWI0NzhhMGQ3NzMxYzRmMDhjZTU4MDJmNzgyNThkNDE5MDE3NjYxMDc2ZDdkNmQyZWYzOWU1N2NmOWNkOTM5N2RjYzVkZWJmNjRhYjgyYjY2MTU5ZjU3ODMxNmU3NGNkNDlmNWFkMmM2ZmVmODNjZjA4NjgzYjk1NzBhOTQ2YWQ0OTAzZGY0ZTk2ZWMwMDhlMTRhNTAxZmE5Mzg2YmRhZjJhNjM5OTNjNmM5YmRmMjMxZmQwOWVhNmY5NmVmNGQ0ZTI5YTNhMzMyN2NiZjc0ZWE4MzEwNTRlNjZjYTg2NjgwYzZjZTUzYjY2Zjk0NjVkMDZiM2ZhMDc5OGJiNjkwNWFlMzg0NTU5MzRmMmZiN2UwYmE0NzIzMjg5ODlmMDAxMzA4NjcxY2NjYjU2NmQyMjJjNzIxNjViYjNhNzQ0ZmI5OGUyMjEwZjk2MjA2ODBkZjNlM2NkMTRhOGJkOTRiNTc0NWMwMDE2ZGRhNzdmMDU5ZjI2MDUzYjY0Y2Y0NTIzYzNkNDI5MTEyZmI2YjMyODM5OGJjNjMwYTJlOTA2Yjk1YTZjNTc4MGNmZGMwNjQxYmU0NzUxYmViZGRmNzcyNGRjOWMyN2U3OGQ2MGVkMGZkNzM2ZDVhYmQ4ODkyOWMxNzk1ZDQ3M2FiZDJiMDMyMGM1NDA0NzU3Mjg4MjE4NjdhNDA5YTJmZjEzY2M0NGNlMzVlNTk4MWU5ZjZiODdhMjhkNGZhOGI4Njc1ZTUwM2ZhZWZjYTdjMWQ3OTg0NzM3ODcxZmU5MTlhYzQxNGVlYTI2NWVlMzFmOWY3OGY1MjFmM2Y0ZjhkMDBjM2ZiNzkxNzFmM2M2YTVkYmY1ZTFhYzhiZjYzYjRjM2Q4ZDhiYzEyMTAzNmU5ZTU1YmI3MDJlYTZjODZlOTI1ZWMwYjk4NGRlZDJjNzFmM2JmZDQ5MzJlNmM0MWI1ODJmZDAyY2E1OWY1M2NlMjk3NDQ1Nzg1Y2M0Y2FjMjQ3YjBiODRlN2ZhMGJjZGNmNzliM2U0YTE1NWY5ODc4YzFmNjQzYmU5YzQyZjdhNGYyNzI2MDQ0NDUwNWMxODQ1YmQ1M2I1NTBhMzFkNzk1M2NjNzM4ODYxZjQ2YmRmNDg3MGYzYTc3YWNlMTkxYWJkNjNjNDVhZGIxNTM5MDlmYjU5YWI1ZGI5YgorU0lHOiAzOTQ1MjAxMjJiYjBhNTY0NjQ4YTdhOGJjOGRjNzM2MzZjNTE3NzQ2YTNjOGEwNWI5MDFlNzI1MmZlZjBlNTAyM2Q5MDk5MWUzMTFiNTM4MmQ0OTEwMGU1MjYzM2M3MGZlOWMyNmMxNDUwZTA2MDNlNmQ0NTIyOTlhZjRkYWUwNworCitUU1Q6IDczNAorU0s6ICBmMDkyZTZiZThkMmQ5YWQwNjlhM2UyYjk3NmQyNDRlMzRjMTVjMjhjNDhkMzJmNTU2MGE1NDE4NWQxNTAxNTAyCitQSzogIGNmZWIzZTc0ZTRiNWM4MzU2YTgxNzU3YjhmMWJlNGI0MjlmYzE4ZmNhZjQ5N2NiZjhkOGJjMDQ4MGZmOTc4ZjkKK01TRzogMmMyNTVmYjI1ZDQ1YjA4NmMwNzFlMDNlNTI1YjRkNzI4NTc4ZmJiNmIwYzYwZGE5NDFlNmJmMmE0ODk4YjJkNWI2OTg4YzUzMzAyNzg1YWI3YTNiYzRiYjJjMjA1YWNkMjdkNmE0Y2JkZDFhMGMwODg5ZGVkNzg0MjY0Y2I3YzAyODg5YzVjNzExM2ZjOTBiYmJjZDMxZmYwMDE0MzJjMDUzZjk3MTA3M2NmNjcxMmY2NjdmY2U0Njk4Nzc2Yjk4Y2M1NDQ0YzY5MmFiZDEyODgxOThiZTVhZDU2NzQ2MDlmN2UxMzlhZDFiOWNjYjk0M2Y4ZGZkOWQxMmM1NGVjZWUyNzgzNDFiMmVlMTI3Nzk5MWNhNjJjZDNiZmUxMjhkMTM5Mjk2NGU5NTg4ZTJmOTdjMzIxNzA0YTNkZTEwNjE4OGM1ZWIzMzVhYTVhMTlhY2M5MDY3YjRhOTQxMjliOWQxYTYxNjdjNGJiZmI1NmZiOTc2ODRjYmJkNzIwYzg2ODY5ZTAwMjBhYjA3NzZjZGM5OTU0ZmViYTg2MjEyNGIwNzNmYmE4ZGU5ZWE5YTM4ZWFjZmEwMDNhZTRmMWNkY2JmMTVjMzJmYjZiOTcwYzczMTE1ZGRmZmNkNGZhM2I3MTg0NjExMGVkZWMyNTdmY2FlZDYxMTM2MDRmNzE5MjU3MjU3NzI2NGI5OTA1Y2E2YWVkOGRhZWMxMzg0MDNjYTQxYWE5NTQyNzhhNTcyMGIyNjdiOTBjYTE2M2E5YmRmNDQ3ZWFkZThkZWI3NjlhM2I0OTIzN2E3MzUxNjk3N2MyODczNDU1NWRkMjM0Y2E3ZGU0OTk5MjYxYmM3OTYwZjUzNmJhOGEzNWFkM2QwMmM3NWYxYzJiZWEwYTA2MTJlN2Q0OWM0MDM5N2RkNmFmNWZmNThiYWU2YTY0YjZhNzdlOTgxZjkyZDE1OWUwYjJiZDIwNWFiMTU3MDUyZjQ3MDE3YTNlMThhZWM5NDRkMDQ2NWVlMDAxN2U5NjE0OGE2MTI5Zjc0ZDNjY2I0ODlmZWExM2ExNWE5YjlhY2VkNThjNmVlMGU2ZTg0ZTA1ZmRhZGZhZTA3YjMzNGE5OGZjMzdmN2U1MTFjZDVhNDRlOWM3NGU0NzhkMzQ5ZTMwZTI5YWViNDZhNGRmMDFlNDMwN2ZlNjVlMTM5NGE3NThmNmFkYTJmYjEyMDIyNWNjZDUwYTQ5MDEzZTZjOWYxNzVhZjkwZjNmYzhjNTdlN2E2YTk2OWE5MTZjM2YxYWFjYzIyZjNlMDFhMDcwY2M0OGU2ZmQ4NzhlMmJkMDczZGY5ZWU2ZjA1OWI5ODU2ODQwNGZjN2VhZTdkNGJmNmZhMTZjMGM4MDNjNmJlODRlOGI3OWM2N2FmZmM4Yzg4Y2FiZGVlYmMxMTM0YmIyMzg2ZTIyYmE0ZDJlOWUwZjNlMWFiM2EwZGFjN2M4MGRkZWVkNzczY2RhMGM0MWRjOWRlZmE2N2ZlYTM3NzY5Y2I0YTFlMTUyMmQ3ZTBiM2Q3YzQ2MzhiY2Q5ODMxNTNkNDc4YmU1ZWNmMmI2YWIxYjQwMTI0ZTQyMjJiOGNhYTQ2NDdiZDUwZDc0ZDIwMzk0M2FiMjA5MzhkNWYyN2Q5MDhhNjczNjc0MDQ2Y2UyZWYxOGU4NThiMGEwMWE3ZTc1MzBkZWQwZjhjYzg5ZWYwOWI3M2NhNTk3Y2Y3M2FmYmM5YTI3MWE0ZDIzYzkyZmU1OTE4ODNjNDQwMTA5YzRlZjQxNjY3MGI3ZjJjNTkwNWI3N2Y2NWY1NmQwOWQ0MDI1MDM1NmY5YjFkYmNhZjFlZTJjMGI2MzY5NmY4NGQ2OGRkYmVhMTYwMDg1MTUxYTk1MjYyNzRkN2I4NDZjY2ViNmM0MzQ4MDk4NDg0ZGUzYmI3MjNhZTVlODUyNzZkZjQ5ZjU2MzQxMzBmZjkwNTc1NGYKK1NJRzogNjNjZDRjMGJhM2JlOTM5N2NjMGYzYzFhZjM0OGVjNGI4YTkxZTQyZmVlNjc1ZGExZDA1OTAwYjlhODZjMTM4ZjkxNzRlYjk5NmJiZGYzMWM0Mjk1ZTBjNTc4YWMwZjlkNTM3NjQxYTJhZmQ1ZGZmOTNhMzljNWNkOWQzYzQ4MGIKKworVFNUOiA3MzUKK1NLOiAgMDFhMjQ3OTQzYWZlODNmMDM2YjZiNjBmMjNkOTc3NzRmZDIzMjA4ZWRjMzFjZjNkODgyMGU5ZGM2MzY2MTEwMworUEs6ICA4Yzk3YTU4YmUwZTg0N2M0OGE2YTM5ODdjZmUyNTBhOGQ3YjA3ZDk3Zjk2MWY2YjdiNzllN2Q4MDQyYjhiZDdiCitNU0c6IDA4ZDgxNDk1ZGE3N2Y0MDcyNTVjYzQxYTgxOGVlZmE3MjdlMmM0N2FlNDExZjRiNTQxZjAxZjgxMWQ5MDZkNTVmYjFlM2M5YzQ4NGRmMzA1NjUzNjRkZTlkY2I5ZmVhMGFmNjYxMTJmZTc1ZmQxMWFlODFkMjY0MWI1NDc1ODlmOGI5NzRhOTdlNzk3NmVkNjkyYWFkNjQwZWRkMjg4YmQ4NjNkMTFjNGNhOTgzNmY5ZDdjMTE1YzNkOTg4MzBkNjQyNDdjYjZmOGZiNjAzYzY5ODExMzM1NTJhMzIwNDA0MTk2MWJkZDgzZTJmOWRlYmE3NzBjMDM5NGY5YjYwMmE0NTM1NTEwNzQ5MjFhM2RlMjgzMjEzNjlkN2Y4Y2E2NDBjNDUxMDllOGY1MjJjOTdlZDlmMzViOTI3N2EzNTBlMjk1OTMxYjQyZTAxMzVlOTRhOTJmZWQzNjNkNmNhZTM5MmY3YzQ1MTk5MzI3ZTI0YjRjZmE1ODk4YWI1OTlhZTdiZDUwYmQzYTAwYzBkMDA3ZTk1ZmFmOGYyYWUxMDM4MDJjYTdlNTNiMjc5MTg0ZDA2OTA1ZjU3NDhjYThiZTFmNzJlNjY4Y2I4MzI4M2RkMDA0MDY0OTFmOGI5YjRlNWE5ZDRhNTQzOGIyZmE0MzcxZTBiMDU2ODZmODc1NzViYWE3OTZlMzAyZjA4ZmZjNDI1NjYyNzUwYTMzYTBjOWNmYWE0YjRkNzA0MWY5MjY0ZmVkN2JlNGY5ZmRlMmNhYzY4YTIxNTgyMzZmNmFjNDMwNDdlOTExZjRjNGU4YmM2NjNmZGQ1MDUxN2RmYWE4ZmJjZDIxOWRkN2EwZTkzNjlmNDNkMGRkMjViNGYwY2Y5MzBmMjBiN2I3YzZkYjlkNWJlMGM2ZTE5NjA5NDFhM2UwNGQxNDFjMDNlNTk2MWFhMzNlOTAyNDQ3N2Q1MzNjOTk1Mzc4Nzk2YmYyMjkyYWRlOTIyNjk1YjE0NTY5ZmMzMzliM2Q5MDg1YzYzZmM2ZTViZWY0ZDk5MGM4MDMzM2E2YjU3YWY0NzhmOTM4ZTNlZTczOGIxZDEyOWJkOTc2YWZlNjg2MTI4YmNhYzA4Y2NiZWIwMzQ5YjliNTM3MzEzYmM3YmY1OTFjNjVkNGE3MTIzYWQzMGJkYmUxNDg2YjQyODA4NDc0OGI2NTA3ZjZmNWVmNjdjMjZjYTg2MmNmNzI2YWFjMTQwYjg2MWFlMGRjNzRiYjNjMGI0ODk3ODlmMTcxNDVlOWE4NTVhM2UyYjVkYWFjNDE4ZDgzNTM3MzMyMzllZjY5YzdiNTY1YjUzMDNlYjg3YmQ3ZjY0OWFiZjQwYTJmMTM1YTI5ZWQyN2UzYmU0YzEyY2Q2ZGRkMmU1NDE4YTk5OTc0MzgzNjYzZjU4NDliZjNjZTU1MzJiZjY0YTgwYWE1MjExOTFkMjUzOTBiYzE5YTQ1ZWVkMWQzZmVjYTFkOWZjYzBkYjAzMWJmYjQ4ZTQ1MGJlM2Q0NTkzMzU2ZDViYTBmMzEwNDdiNDU3NzQ1ZjIxZTMyZWJlYTNjYTZjMzVmMDVkNzhkOGMzMTY0MGIwZmVjYjk0MDExNjU2NzVjN2Y5Y2JiMTliYzRiNTY3N2MyY2NlZGM0ZTdhYWZiODQxODRjMTkxOTlhY2EwZGIyMWNmNTA2N2RjM2FmNzY5YmNjNjI5MzU1ZmY3MjU3YTllZmQ3MWE2YTkyZDEzMGQzNWFiZWU2ZTcwNjA1YjVjYWI5M2MwMjhmYWMzYWEyMzQ0YmE4NjFhYzFlOGNlOWE0YjA3MGMzZGY3NDBkMjhjNWVjZTBmMWJjMzFjMmQ3ZDFlNWVjYzc2MTA0NDgwOTM5MTMzYTE4NjYwZTRhM2U0ODQ2YjI1MTdiZTNiOGU3YWZhZmUwNzgzOTFkOGFhOGU1YzMwMTM3ZTg1ZDk0ZDY0YTI3OWZiZWUKK1NJRzogZWQyY2VkMWE0ZmRkYjM0NDJhNjM3MzQ4MTc5YTZhNWJlZWRjYjQ0YzhlOTg4Y2EyNmY3ODkzNmQyYzhkYjVjNTE2ZDU0YjhjNGYwOGQ5MWRkNzA0MmFiNmFiMjZkODdmMjMwZWIyYjIxNTZmM2NlMjk5NGZjZTdjMmIwZjEwMGUKKworVFNUOiA3MzYKK1NLOiAgOTFmZGVmY2RiYzk5MGQzZThlZWI2MDE3MDQzNGRhMTA4MzFiMDMwODFmNmFmZDBkN2UxMmIxMDAxMWUwMmFlZgorUEs6ICBjNThkM2UyMGI4ZDQ3YmE0NTViOTEyNTcyZGM4NDA4MTVlM2Q4ODVmYTU5MTdkMWRhNDg0MDhiOWE5NTY0MDk4CitNU0c6IDViMGMxYTNhOTVlMGJhNzQ3NDc2NmM5YmFkZmFlMzRhYjg2MGUwYTZjMDMzYTIyZmJhNzIxMTI3ZjViYmVlZThlMmNiZGUxYTFkZmViMThkNTUxYzk1OTk0ZDIxZTNlYmM2OGFmYWU2ODU0NDRhM2E0MTk1YmM3NTU1Mzg5MDNhY2ZhNjcxNTU5MmRkZTI1NmU3YTFiNGMzNjNlY2E3MWVmMGYzYTQ4YWUzNDQyZDUwZDU2NjFiMzk0MDk2YjdlYzI3YmJmNTI5NTNmMzA0MGNkMjViNzhjZTQ3NTUyN2UwY2M1OWYxZWY5YWUyZTA1OTA0MzE1ODJiMmRmODE0MTQ5OTgyOWEyYzVmN2JiZTM1OThlNGM5NmNjMDFlZGUyZjQzYjY1NjA1YjQ4ODU5MzcwOWMwOTRiNWEwNDJiMjg1NTVmYjUyMjdhNmQxNTYzNzZmM2ZmMDdiZDVjOGJjNjgwNGQzOWEzMjgyYWM1OTcwYmEwOGFlYmY3NTQyYjg0NWY2YjVjMjM4YzJjZTIwNDQzZjdmNzc1NWQ3NWZlNGZhMTZiOTY0NGNhM2UyMWQ5MWE5YTg3YzY4NjExNTc0OGExNmMwYWU0YWU0ZTE2ZDFjNzFhZTYwMGIzOWNkMjVlNTYzM2IzOTlmZWU3ZmYyZTM2MmJlZDI1MTI1YzZmZDVjN2Y1ZmZhMmRhMjM1M2ZkMzViNzg0YTFiMWIwMzE5Nzc0NzU4YjczOTBjNDRkY2M5MmZjYTQyMDFkZmUxYTM3NTY5ZGUwNWYwNjY0ZDA4YjkwZDZlMmJhZGMyMWI5MmY5Y2U4NzIxNDIzNTdiOTYxNTA4MGFiNzY1OWEyNDZmZjA4NTJhZGIxN2RmZGE3MGNmMTc1NDE1N2IxM2JjMDMyYjRjNWRlYjhlMTA2OGI0NjkyYjkzMTY1ZGEzNWVmYzlkYTg2YWNiZTZmODBmMDFiYmMyNmY1NzVlYzVhZjViMDUwZTk4MjhhZmRlNmMzYjc4ZTczM2ViNWE5MTI0OTJmNzY1YmNhZDczMWI5NWUzYWI4ODk2YjYxNzU4YmY5MTNiOWExNTY4ZjljNWI0NjAzM2NmNDVkY2MxNzUwZGEyMDY2YzYwOGRjM2QzNDM3MzhlODQ4ZGMzOTBjZDQ3NDQzMmU5OTFkN2FhMmM1YjI3ODE0MjFlZmU1NWUzNmIwYjQyYzFmNDlhZTI3NzQ4MGIwZmM1ZmY2ODViYjVhMzFiZTNhMGZhNDQ4MjM4MTYwNzcwMzc1NDhhNWM5YjBlMWNjNmM2MzUwNGE0MDc1NzlhMzYzMmIzYzk2ZmNkMGRlNWVhMWU0ZDZlODdjMGNhZjdiNmNhZTMxMjBkYjhiMWY0NjE1Y2U2YTc1YTgxNjU0ZjM5MDQyOGI2NGMyMTNlNzI3ZWVjM2FlN2Y5ZjQyZGI5MDZmNGRlMWZkYWRkMzRhM2RhMmFlYjEyYjRkOWExODVmNGE2MGNiMGMyNjc0NWY1MzBiNDgxZmM5NzZhMDkzY2UyNGEzMDkxNmFmNjA1ZWU5NGIwODc4NTE5M2E5NDlkNTY5YzRiN2VmNTk2MDNiYjYyNDM2MGU3YjQwOGQ5OGNhNTA5ZGFmNWE5MmE2ZDQwMTViZGI2Zjk3YWQ0ZmYwY2YwNWM4ZjBjZDU0NzZhOTM0NDI2YTA1OWYyNDQ0NDQ2ZTU4NjRmMDg5ZTBmMDY3NTYxNTkxMDY2MmQ3YzFlNzlhNmM3NWZhMzE0YjdiYTJjNjQzYjBkMzc2NTNlZWZlNTkzMTcyZDFkMzMyYzhkZDY0NDkyZWFmMTA0ZmIxOTU3YmFhNTIwNDk0NDJkMTBiNTZhZjhlYWU4ZmY4MmNkOGY0NmEwNDk0YmVjMmZjYjlmYWRmMTBjZjcxYTZlZWNkMDU0N2RhZmRjN2FkYmFhNDUwMzc4M2Y5NDNhNDZiNGFkMGU2ZGQ3ZjJjYWI1NTYxNworU0lHOiA1MTAxMTIyMjNiMzNhNWFiMTU2NGY3NTM3MTkxY2QyOTJhOWRiZDVhMzIzZDdhZGQwNTg0YzFiMGFkMDBkMGFjNzE5OWMzZmI3NThlOTEzZmYzZDcxNmMyZTkwZGQ5MGQ0ZThmNTk5NTFlODdlZjhiNzgyMTRhNTE3NWM0ZTYwOAorCitUU1Q6IDczNworU0s6ICBlZjAwYjNjMTgxZjYzMjdkMDIyNTY3NTFjYjUxYzJjMzZjMGMwYTc4MDc2MzQwNTQ4ZjViYzA3MGQ4NmQ5ZTI2CitQSzogIGRiMTRjZDMyNTg4ZmQ3NDFlOGY0MmU1MTIxY2M4MTFhZDQ1MDYzZjI4MTQxZTgzYzY2OGYwN2Q5MTIyOGYwNDkKK01TRzogN2Q2YWJlYzdhMTFhZjY3MzI0Y2UxN2IxZDIwYmI0MGM2NjhhMjE5YmM5NWRmMDVlMzI1ZDg2Zjg4Nzk1ZTI2NGQ0NTRmYzVmYTdkOWM4YWFmZTc3ZTkwYTZhZjZiNTc0NTNkODViOTcwYjU1MmE4NTZiYTY1OWFiMzFiZDhhNjYwZWI3ZDM1ODdiNDUzZTVjNWZjNmI3OTQ3MmIyNmU4ZmY3ZGQ2ZGI2YmUzNTcyNTQ4YjBkNzU0ZWQ0ZDk4NWI4ZDk5NjVmODhiOTUyZmM0ZmEzYjc2MWNjZmZjMzUzNTRkYjBlYjljNWExNzE3MThhOGE1NTkyODcwMjEzODI3ZDM2OTFiYWU3ZmQ5YzYzZjIwNTAzZTA0MzE5YjVlOTUzNTc5ZGU0N2UzZWY4ZTE2Mjg1NDk1MDNjYjRmNjg3MWJhMjVkYjg3MzQ3MDgwZTUzMWE1MTdhOGI3MjIxZTZhZDg0ZGZmODMyNTZkOWFiOWE0MzNkZTg3MWI5Y2I5YzUwNDQ1ODllNjcyMDZiMzE3YTUyMDZhZWJhOTZjOTJmZDYwOTQwNzFjNjQ0ZmU1MjY1OGRlZDkyMjBjZjZhYmQ1MGUyMzA1YTFjOTBmZDY2YWFjZmIzOGViMDVlYWZmNmNhNWY4NWY0MjljZDU3NzE2ZWI4NzczOWEwMmI2NGNmZmEwOGM0ZjY4NWIwMDMxMGI1YjQ4NDQ5MjBkZjIxNWE5ZjI0YTE3NjEzYWVmODVmZWM5NGY1MTFkYzhhNDI5NGVkZGNlYTExYzA4YzBiMzk5YTIzZDkxNjM4M2UyOWFkZWI5OGM2NWQ0MWM3MDVhNTdmODQwNTIwZmE4MDhkN2ZkMjVmZGNlMTU5ZjdhMDg0ZDA2Mjk3NGIzMDEzMmE1NzEyNDJiYWZmNDE5NjI0NmQ2ZDc1N2IzMTJlOWQ2MDg1NTNkMmRjNTNiNjIzYjJlOTVjNzUzOGZiYzVkZWI2MmJhNzM3NzZkODVlNTExOGZhMWEzMDJkNGQwNzZkOTllMTAwZjBkZjExOWMzM2ZjNjZjZGZlNmZkNDRkNzE5OTdiNzhjOGY3ODkwYzcwNzM0NjA1NjIyMGQxZTlkZTg4YmMxNzNjZjBiNzZjYjMwMjg3N2VjMTZhZjQ2ZTRjMzE2MzlmNTRlZWRjMTZkYTlkOWViMGFkOTViZGE1NDVkZmM0YTczMmI2ZGE5ODE0MTM2YWIxYjkzOTJhMDcxYjAyMjQ3M2IzNDkwNTU3Njk4Yjc3ZTc0NDdhYzg1OTBkY2FmNGYyNDJhZDNkZmJjMGRmNzE2Y2MwZWE3NTM2MjY5NzNkZjA4ZDkzNWQxNzhlMzMxMmZiZTJhN2JhOWM1MDkzYzUzYjkyNTVlYWNhMjliNzI1NzhlM2JhMWJkZmFmMGM5ZWNlMjFhNWRmZjZlYTQyMTUyNGY3MGZjMTkwNGU5YTJjZjdjNTE4YmZjYzdlMzY3M2VlODdmZjI3ZTFjYTJhYzMyYmNiNDA5MWNiMzRhODJhNzE1NjNmZjZhNmExNWRhMGViZDViZDEwMjU2Y2U5NjBmNGVhYTdmZTM1ZTEyODg4NjA1MGQwNDlmZWMzYTRhYjE2ZDViMGMxMDcyNjdlYWUxYWI4MDFlYTViOTE5ODM4MzlkYTFjNDg4YzEyZjg2NGQ3YzNhNzdmMmI2YWUyN2Q1NDAxMDlmNjhkNzgzNjRiYjYyNzE4M2JkNTAzOTE3NTQ3YWFmM2IzYTE4MDlkYTAyNTc3YjNmMDNhOWEzZjVhZjQ4Yzg4MDJlMjk3YzhiYjYzZGI2YTg2ZDNlYTcyN2E2ZDcxNDhiM2FhNDQ0YjhkMTY4ZjM4YzZjOGYyNDA4OGE0OWFmMzMxNzdhMzQ0YWRhYjJjZjZlMDhlMGNiMDM3MWVkNTJiZGVhZDEzMmY3N2U3YWUzZWU1ZDhmYjE3YWZjMGEwYmI3MzExYjk1NjBiNjcKK1NJRzogMTM5ZjljYjk5Yjk5NWJlNjU4OGNkZGI1MDUxNjk0ODM4ZjlkODJhNjA3NjFmZGUzMDRiMDAyN2ZmODY1ODRiZjY1YzczY2M2ZDI1M2U1NjBmNjU1MjVkZjA0YmZlMTQ2YzgzYjQyMjY5Y2YzNzgwZjhiYzM5MjQzNzg5NGFlMDEKKworVFNUOiA3MzgKK1NLOiAgZDA3MWQ4YzU1NzhkMDI1OTQ5OTMyYWE2YmY2YTgwYjFjYzQxMmYxMDZmOTE1NzRlZTI0NjU0YjQ0NWVlOWE5NworUEs6ICA5YmNiZjdkMjIxMmZiNjJjY2NmOGI2Yzc2ODAzYTVlYTI0NDA5ZGE2Mjg3ZWZiYjhiMWYwYzdiMzBlYmRkOTNlCitNU0c6IDNlOGVlNzBlNTFlNTZlZjU3ZjZlNjZiM2E4ODRhYTA0YTdiNGQ0NTk5ZmI5YjQzOTk2YjM5M2E4NjgwOTM1MTJlYTc0MWEwYzZhOTRmNDBjZTQ5ODYyZDJmZDFmNzU1MWY0NjQ3YWJkODA3NWJjMWI3NDJhZDQwZTI5YTYwNDYxMzAxMjI0ZmU4Zjc2OTJiMTQ3NzI3ODJiNGU4OTZiNjNmZTA1YWJkNWZmNTMxNGY5ZWM4MDc1ZjI4ZDkwOGNjYWFhY2U1ZTkwNWVhN2Y1N2E0OTFiOTliMzU5MWVlYTU0YTZiNzgxOTE2Nzc0OWQzOGEwNDc2MjA2NzZhMWE3YWYxMWY0ODVhNTViN2M4NzllNjg1MDM4MDg1OGM4ZjQ1YzBjMWNjYmQ3NDA2ZWQwOTlkODRhNzQ3MWI5MzUwYzRkZGIyODQ3MGJmNWJmMzI3ZDViM2MyMmQ4OTliNGM2NjA4MzllMTA0YTA2MjJhZTg1Yzg0YWE5ZmM3ZjBhMmM3Y2ViNmU2OTFjNDljMDY0YjUzMTM0OTk2ODNlOGUwM2IyMTE1ZWRhN2RkYWQ1NWE0OWY5ZmJlNjI1NDRmOTE0NTExY2ZiZWM2Yjg0ZGJkZTdlODA5MDliNDVmYjEwNTAyZTJjYWFhNzIxMjRmZDk0NTZhMzg3MmY5NTkyNzA3ZTlhNGM1MDEyZGFhOTcyZWFmNjVmYWJlNTUzZGViZTgyNTcwMWVmZWY1Yzc1NmJiNDY1ZTk2NmFiNjhkZDUyZjNkZDAwYTQ1Y2Y2ZGMzZjE5Yjg2YmIwZGI0YTg2ZTQ2Njk4ODVhMDc0Njk2YTY3ZDhlYTIxMThjNzY2ZWY2MjVmOGE5ODAyNmY5ZjRhM2M1Y2NjZjk4NDZmZGM5MGVkOTNlYzdjMWYzYzcwODY5NTRmYTJmMGE0Y2E5NmQ0MDE4NGFhNTc1NDU1MjdhMWY5NjVjMTFkODQzYzkwYzVhNWUwOGQ3YzExZjJkNTYxMDA0ZTkwNTc0ODUyZWI1MDQ2YWExZWE3YjYxMDA5ZmQ1ZGQ3ZDYyNDJhOGRmNThhOWU4ZTU1NWM3ZjRjZGMxMzBkNjkwMWJmZTY3OTdmZGM2YzM5YmVlY2ZiYmFiNjYyNWIyZTRmYjlkODAwMDI3NmQ0YTk0ZmM2ZmMxMDUxZmVmZmY1YWRlYjcyNGI4NzA5MGRiMGEyYzY5N2QwNTY2NjRkOTkxZmFkODBkYzgwZmFiNzAwYjFmMWYyZWUyNzczNGViYzI2YjJhNjQxYzMyYTBjOTExYjI3MGFjNzZiMGRhNWMwODkxNDk3MWM5MTEyNDYzYTcwNzA5YzBkZGFjNzkxMDAxNmY5MTNmNjIxMDA4NmQ3MjU1Y2VmMTE5NTU3MTBmNjUxODg5YzgzNjIxZGQ4YTRmY2Q1MzY2MzAyZDZjOWI1NmVlZmNmYWM4NWMxNGE5NDc4YjZkNzE4MDc1NDI4ODAwNzYwNTE1Y2FiNWYzZDQ0NTVlMmI5NzBkZjlmZTRiZTgzODNkNzA0ODNiYmRkNzU2MDcxZjUzYjJmOWMyNzVjN2M4NTEyZDE2MzUxOGZlNTU1ODM3NTE0Yzg2Nzc2Yzk0N2YyOWE3NzU3MDI4NzQ0NmI2OWJlNDBjOGQ0YWJiZDY1ZWYyNTA3MjQ5YjVhZWMzM2FjYjdiOGJkM2YzNWJjODU5YmE0ZTM3YmRiNDljZjkxM2Q5Mzk4OWM0NDM4ZDJhYmNmYTM4OGNjODlkNzhhYzA2MjcwNjU2NDkyZTc1MjhmMjliZGZlOGNiYjliZmE5ZTczYzFkYTAxM2ZjM2NlMjEwNTY1NzYxM2ZmNjJiYjBjM2JmNGRlZTNiMGQyNjU5YzcyNmU3YmNkOWU5N2VjY2U5MjQ3ZDQ2MDBkZmVhZjYwNDQ0ZWQ4NjJiMDBiYTExZTcwZWE4OGQ0ZjBiNmI1MzlmYzlmMzZiYjJhMWE5ZWQyYjMKK1NJRzogMGMyOTdhYmUwZmQ4ZWJjYzZiNzcxOTk4NzU1ZTJjNmJlMDdjODEyYjVhODA1NDQ5NTcwNjMxNzBjYTY5NDMyZTcyYjYwZGFhZTMyMjk1OGEyMjM4Y2Q2YTQ2Mjg5NGEzODdlZWY2NWJmOTZmNjNmNTRjMDg1Njg3YTUwMjc1MGUKKworVFNUOiA3MzkKK1NLOiAgZTlkNDg2YzI5YWU4MTFiOTQyZTEwZDgxZjBhNjcxNjMxN2I4NDJjMmM1YmZkZWY1NWNjNDMyYjdmY2FlYjgxOAorUEs6ICA0M2E1MmQxNWI5ZjczMWQ3MzdiMWM0ZGJjMzIyMjdhNDgwOTYzMDkxZDJjNjI4NmY0ODJlZjFlODM2NzA1NGU1CitNU0c6IDE0ZmUxZWQ1YmJiZDc2Y2M3M2RjNTY1MGJkYTkyZGU4NjMyNmUyNGQyZjFmNjIyNGJhODU2ODk0NGQ2ZmUzNDQyNjc1ZGI5NmYxZDg0OThmMTYzNGZmOWI2ZTUwY2JhOWRiNGViMGIwYjAyMWIyYmVjZmNlNGJlZjMzYzRjZTBlMzJjOGE5ODM4OWVjYTllMDU5YTY2MmQ2ZjAzN2M1NGFhNDBjNzZjZGVlZTg1NjUwZjA4OWVhNTZlMTM4M2FiMGY1YzM2ZjZkNjY0NWZmN2U4NzY2NzMwMWY5NDRmZGMyZWQzNWIwZDJjMzVjYjJlNGI0NTYzNmU3NDk4ZTkyN2Y1ODQ2YjNlMWVkZmJkMTYwYTRhZWYzMzIwYzM0Mjg0OTZiZGFhZjdkM2VkNTZlZjBiNzI1NGFjNTk3YmU1ODlhNzA1ODQ0MTYzMDBjMWFkY2ZiYTRmMjJjZmQ0Y2Q2NjFlMWY1MGYxNTVkMTcyZmE1NzQ4ZDI5NmIyOWNkZDdlYjgxMjE0ODNmZjFkOWZlOTUzZjk0NTFjN2M3YTU0MjAwNzI4NWVlNzI0NmJjMGZkZWE5Mzg4MTQwMjlhYmNlMDU3YTBlY2I5NzRiMTJkMzYwZWFiNmFmZDMwNzk3ZDYxNDQ1YWQyYmFjN2U1MmJjZTQzNDYzMTVmNzhlYjg3NTQyZDU5NTI4YjJmNmM1NmQ2NjI0MWNiNDQyMDMzZjY0M2QzZDJhNjdjYjYzN2Q4ZGE5NWQ0ZmQxMjM0YjAzMWEzZTUxNzIzYTFkMjZlNmY1Y2EwNzk4NzMyMWFkMTFhOTBmY2MxZDRlMmIwYjg5NjY1MGMzYTc1MThkNTY1NTI5YmVhODA2YTA1ZDQ0N2UwOGQyYTZhM2RiZjFhMzY5MTViMjk1N2NhNWI0MGU1OGI5N2FkMDM2OTczNWM0MjhiZDZkNjliZDIxMDA0NGI2NTE0MThkOThiMDU5ZDkwYzgzZTQ2MDExZjQxYzAzMmM1NjU1YTVlZjIxYWMyYzhjMmJjOTRiZTA3ZTQ1NDI2YTdhZTVkNDdiNDVmMjdjZjQyODljYTRkZGFiZTA4YTEyYjkxMDIwN2RhYmIzNGE0NmFiNzVjZTY5YjU4ZTdlMTc2NjRiZjMzNTlhOGZiNjhlYjAzMmM5ZWFhNmRmODczODI5ZjBlMDg0ODU1M2Y3MzJlMWMzYzA4NGIzMmI3YWY3NTA3NGU3YmJhYTRlYjVkN2VhZDdhZmY5NzU4MDEwOWI2MGY0Yzc5MmY5ZTJhNjUxMzdiMGFhNDgxNzViODExNWQ5MTMwNWY0Yzc3ZTJkMDhlN2U4ZDdlNzc4NWM5NjY4NDJjMmUzNTBmZWQ0ZjllMzNiZjZlMTg0YzU1MGI0YjA2ZTk1NzQxNGVkZjUyZmEwNzllODE5NzM0NTg0NjFmYmI5YjdkN2QzNGJlZjE1MDM1N2Y0MzJjYWFjM2FlOWYzZGM5NmViNWEyZDEyM2UwOWVkYTE3MDJlMWQxMDcwMTc3YmIyMjBjNDIzYzA5NmVjMjQ0MjQzODVjNjc5YmUwMmVmODRkMDllZDEwMmY0OWNhZDNiMWZkNjcwNjc5YTM5NzE0ZmYxZDZlNDIyOGQ4ZDdkMGUxOWVkMGViYTEzMmYyMTI4ZDQ3YmFhNTY5YThlY2I3YmQ0OGE4MjYyODJmOWNmY2JmNjBkZGVjZWFmMWQwMjEzMmM4YWZmZWQzYTAzZDIzNDBkZWI3ODdjZDY0OWM1MWM2ZWNiOWZmNzVkN2E3YjRlZjliMTUxMzljZmVhMjc2MmFiMTg2MTUxOTdhNmI1MWY2ZTc1ZGJkMDQ1NzNhMjQ0ODA5NGQwY2RlYjBmZTQ1ODU4ODNmZjliNjg4MjRhMDRiODNlYzkxY2Y4NGFjZDZhNzQ0NmNiMWY1ZWUzN2Q1ZGY4MGYxN2NiMmJkYzNmMzEyMmE4ZmFmNzZlYmQwNmNmZTgxNworU0lHOiA2NTE5MWFhODg1ZGRhYjlmNjcyNzE4Nzk5NTJmYzZhZmZlNDFjYTIwZWIzYmNkODY2NzMxNjFiMDNiNTMyNjk0ZDZkZDg4OTA4ZWIxYjFlZWMwMDNjZmNiZTYxNDZiNDUzOGUyMWRmNTU5Njk5MTJhMGQ3ZDg4MThhZDc5NTkwZAorCitUU1Q6IDc0MAorU0s6ICBlNmZhMTBkYmI0NzhlMWUzNmIzNWRmZWIwMjUwZjYzYzA4NTE1MDcwYWU3OWIyMmYwNDdlMjcxNzA4ZDY0ZjVjCitQSzogIGUwMmUxZjJiZDg3OTJlZjQ4MzQ4MWM2ZDExZjdjN2M5ZGJkZWVjYzk4NTk0MzJlN2YyNzllOWQxNzNkMzExNjQKK01TRzogYWQzMTYwNzU4ZDhjMDhhNjYxNTI1Yzk1MjgwYTM3MTg4NzQ5Njk4NTlmMWNjOTE4ZTM0ZmVjMDA4YWNmMjNiODg5NmU4ZDUwYzNjMDUxMjMzMWRjODk3ODBmOGIxMGZjMzQ5YzY3NWM0Y2Q4MmE1ZGY4NTg2YjQzYzg2NDQ0OGZhYzAwYjg0N2I5Yzk4MDU0YWI3OTNmNjNjNzFhYTVlNTI0OGUyMmQwNjliZDNmODUyYTNiOGM2ZTJhYzhlZjg2MWQ5MGJjZDk4NGJmY2E4NzU4M2U1OWU5YTc0NjhmMjliODA4ZGMyZmU1MzAyYTk4OWQ2ZjJlY2RlNzU4NWNkOWJlNGU0Yzc2MWM0ZDRiM2VlYWY0Njk5ZjY1NTZlZjAzOWFmMmI4MGY5NDA3NjA1YWMzOTczNTFkZDg1NTk1NTg0NDk1YmFhMTc3YjA4Yzg4ZDJlYzFmYzRlMzJkMWMwYjhkN2U3YWM1ODM5ZGZiOTIzZjA5YjMyM2U3OGVjZWI3ZTk2YzA2MDRiMDFhMTllNDljOWJlYWY0ZjI1ZWM0YTg0YzFhMDhmMjM4MGVkZGMzYTdmMDEyMTg0OTU5Y2NkMTllY2JiYWM2NWVhY2ExNTVjZWU5ZWNmZWMxMWU3ZmVlMDU4ZTE3NGZjNGVkN2M2NzlmMmMxNTYzMWQ0ZTE1MjdiY2RiMGUzYmIwODE1ZmZkZmZjMGM4NTZiZWYwZGMwZjVjODIzN2Y3MDk4ZTI2YmRiNjllODc4MmQxY2E1MTExZWMzYzdlZGI0MjVkZmY4MDMyMDI2Y2JhM2QyZTA4MWI3MTMxMGRiOWJhZGFkMWFkMDJmMWVjY2M1MzdkODc0Y2QxOGM2YmIwMTIyMWY3MWVlNjYyNTBkOTRjZjhlY2NlYWE5NmQzYzU3ZWVhMmIwYThlYzcyNDI5ZDc2MDY0ODhiZGYxOWVjM2JiMTZlNTA4NjdjNzkzN2RlZjA5ZmM3ODNmMjBhMmE1ZWM5OTI1M2Q2YjI0MGRmNDY3N2RkMmQ1Mjc3YjAxYzViOGU1YmQ2YzdkZjA4NzQyMDViYzhjMmZmZmRiYTEzMTQ2NzRkMzFjOWIyYzkxOTkyMjhlMTllMDQyMTgzNGMxNjU3ZDA2OTgyODY5MTZjN2UzOTJmMGFiZDU1NDViOTYzYWMxZmZhOTk3MjE2MTZjMjM3OTZmODVjMzRhNWM2NjRhZTgxZDE2YjIxNmE1YjBjZjViYzZiNWE5MDgyOTcyODVkNjE2NDQxMjhmODg2ZjM4YWY5ZWRkMjUxOTNkN2VjYzc3YTc5OTk0Mjc4ZGEwNzFmNTQ0OTU5MzdmZWVmNWE1MTk1NzUyN2MzZWVjN2NiMGI0ZThhYTdhNGU4NTZkZWZkNTdkZDkyMzM0MTUxYjk4NmFhNjljYTY5MjYwZDFlMmQ3YjUzYzA1Njc3ZWUwZDIxNmIyOGQwMzYyNTJkZDMwMDZkZWJlMWI2NTc0YTI1ZTZiMTlkZmI0OGZhNjQzMTZhZjhmZDY4ZDc4OTNiMzk3ZTdkYjU3ODBhYjI3YmY4NzI2ZmZmNjA1ZDNiNDZkODAwNTk1YjQ2MjRiZWUzMDJjOTY0MzI2MDM0YjUyMzRkMTc1ZGZkY2MyY2U4ODJlNjViM2Q5M2EwNDM4ZjY5MmU5Njk1ZGUxZjI0YzcwYTc5YmVlZDI1NDE1ZWM1YWFlY2YzMzkxOTUzYjJmZmQ0NTNhOGYwNDY3NTYxYTRhNDdlZTE0NGE0M2ZkZmY4M2RmMmJlYTVmNjZhNzIyYjUyYWJlODYxM2YyMGM1OTRhZjA5ODJlYjNmMDQ1MDVhNTI0NjFkZDAzNGRhODZjMzZjYTE2MjE3NzA1YzA0ODIzOTExZDcyYTI0NzY5NTE3NjMzNTYyODg2ZjI1MGYyY2Y3ODhiOGYzMjg2NGE5NDc0ZjU3ZTYyZTU3ZGU4ZmRhZjk1OWE2YjcyMjg3NDQwYTgKK1NJRzogYzAzYzQ3MDM1OTEyN2U5ZGUzYWYwZTBlZDdkM2IxOWZhZWUwZWMxNDBiNzljMjk5ZTJjYjZkYWMwYTNlN2UzMTQxNDFjYzg1NGI0NTk2Y2U0YzUxYzdiMGRlYzhhNWM4Y2YwOTM2MjA1MzYxZDUzNjVmNGJjYzA3YzQyODdjMDcKKworVFNUOiA3NDEKK1NLOiAgMDU4ZTM2ODBiOGZjYzBhYTE0OTAwODljMTEyNDY3N2Y5OGQ3NGIxYmZiNzFlZTg2NjNmMDI1ZjBkOTQ2Y2QyMAorUEs6ICBlYzcyY2UwZTgyYzZhM2IyMTI0M2QyZjAwZTllODgzYWRiYzVjYjYzYjNkOTM2ZWZhNTBjMDdjYjkyOTE0OGUyCitNU0c6IGU2M2QxNGY1YmVhN2ExYWJiOGZlZTY5Nzc0NmMyMjgwZGZkMDYyMmRlNzM1NzIyNmNjMDc0MjcyMmEzMjI5YmUxMjZiMDgzZTg2OGFlYWYwN2QyZmM5N2FkYzMzNDI3MDk2NzQxOTNjYTI4MTc0NGU4NTBlYTE1NDQwMDUwYWVjOTMwZTQ1ZDdhODdiOGFjODAxNWM4OTY3YzIwMDMzYTUzMmQyOTU5MWIxMzU1ODZjZTBmZGQyZTY2OGI1Yzg2NGIzYmRlNzBjN2U3MTlhZDI0MTkzMTI1MTg2MTkzM2ZmYmZhOTY0ODNmZjgyODU2NzQ4YzU2ZGMyNmUyNTdkNjkyZTUxMzRkODJmYzcxOTFjMTEwZDk1OTBkM2ZjNzUxY2Q2MzZiMGM0NmY0NGY4ODAzZTU5ZTJmOTNmYTBjYmUyNDdhMWE2MjViNGJjMmM3YjFmZGNlYjVhMmIyMjU5MWZhNjEzN2M1NDA0ZGZlYzZhNjk2MzllM2Y2MzJiNTk3NmFiOWZlMWM2M2FhM2RhOWQ1MmIwNDQwMDhmM2FlNDRiN2MzNjRmMDg1NjY0MzIzYTg4ZWI0NTgzZTg3MTQwZjc2Mzc4MmJmZjg4MTljZjc0MWE4NzVkNTA2YzkyOWQzNGJiZDQzMDA3ZGU0YjE4ZjY4N2E3NTgxMTExMjhiMWRiODZmYzVhZDJmYjlmY2FkMTJjOWRkMjhmZWU1YWQxMGRlMDczOWY4ZWZkOWJmZjY2Zjg0MGIxMWIzZjkxYzVlMDdjMjE0NTJjYWIyNDI0MmI2ZTMyMTY1Y2QxZTY5NTcyYmYyMTZlODYwNDUzZGFkMmZkMTI5YzMzMzc1ODU4MGJiN2QwZjE5NTA5NzQ1ZTg1MTQ2M2QxMjdhNWY5YmUyMWZlNTQ5Y2FlNTVkNTZiOGJlYTgwYmZhZmRhYzEwYWNkODM4ZWE4YWYzMWMwMDdkYzMyYmZkNzQwODJkOTExMGEzZTkxZTYxZTAzNTc1ODdlNGVkMzI4MjdhZGU5YjY5MTBhOTg4YzFkM2IyZGQyMmMwZWU3NmVmMzVmZTE1ZTA5OTQwNGE0NWQ0YjJhY2FiOTEyM2VjYzQ1NTUwYTQwZmFmODMzNmI0NmM2MzBhOTA4MDM1OGZmOGI4ZTU4YWYwYmNjYmQzNTAxMGMxZWNjMTI4MTY2NTVhNWVjZWJhOTVhZDNmNTAzYTE4ZWM1YmVjZTNhMzNmNDY5ZGZlOTE3ZTFjNTVlZjFkODFlNWE3NTU2MWU2YmJkOTljNjUzYTZkMDk1YjlmMzg3OTExZTQwMzMyZjYyMTZmOTU2YTM1Y2Y3ZDk5YTlmZGQwYzQ0YzUxZTkwYTU2NGYxYzM2YmYzZDQwYTdmYWY0YmEyOGIxYTEyMGIzMjA1ZmJhYzFhOTg1NjkyOTBiZTM3YzU4YmJkNzQ1Y2UwZmI3NDgzNTI3MGFiYTIyNTJhZGFlYzE1N2RjNDI0NjEyMjFhMmNmZjY4N2I5ZTY1Y2ViNTdjMmQ3NzcwMGFlYTYzMjA0ODZjNWIxYmVjOWNjNTNlN2VmOWU0OGZjZDFiNzc4M2FjYmU3NWE2YmUwMjY3Mjc4ODEyZGJmM2QyNTc2Y2Y3YWQzOTExMjcxYWNlYmUwZjJjMDQ2MDJhMDgwYzhiOTZjMTIwZmQ4NmZkYTI4MmFhNGUxYzEzMWZlOTdjOTA3YzE1ODU1Zjg3NzU1ZjUxMWMwMzdiZWZhZDBmNTZiMzlmMzJhMjEzM2EyMmYzZDVhOWJlYzM0NDNmMjlhNjk0ZTk3ZmUwNWUxMGZiOGVmOTk5MTMwMmI5ZTBkODRkOTI5YTE5ZWIwMzQ3MWYzYTg2MTNkMzkzNjhlMTU4ODNhN2U0OTcwYjUzY2JhZjI5MjlkOGRlNDMxYjQ4YjQzNWQ3NTMzY2FhMmUzNmNlYWI2Y2RkYjM0NmU1MzVlNTE1YzRiM2RiNzZkZTA3ZDk4NTU0MTQKK1NJRzogNTczNGVjNTBhN2Y4MmU0ODUzNmJkYzQzNzBjZmVmMmUxNTBhNjMxZGFiYWY4OWVkY2YwZmRhYmU0ZjU4MzlmNGY1ZmJkOGRmOGVjNGEzYWNkNDBhOGJmYjk2M2QxODU1ZmY5Mjc0ZGJjMzMxNjViNWU2ZDM3YTIzOWRhY2U5MDMKKworVFNUOiA3NDIKK1NLOiAgNTFiYTNhNGYzZDg1ZDE1NDhjMmYyNDk0YTM1MTFmM2I5NTE1NjYzZDdlODUzNzBmYjYxNTAyMzdlOWJjOTgwYgorUEs6ICA3NzQ5ZGUwMjEwYmNlMDZkNDhmNTliOTVhZWIxNTI4ZmQ5YjRlNTJjZGRlMjJmYjgxOTNiZWRkNWRmMTI4MTdjCitNU0c6IGQxOGQwY2JmYzE2ZDBmOWI2N2YyNTM5YWQ2MjA3Y2Q5MjE3YWQ1ZWQwMzMzY2RkYjEwNDFlMGFjMmJkZDkyMDI3NjYyOTY1MmI0OWNiYzk4MDI1OTNlYzM2NGVhNzk1YWJjZDE1ODIwODVmNTViYzY2YzQ4ZmQzZWVkZTYxOGQ2MzY5NjE3MTAwZWFlY2NjMTVmMjQ5ZDZlZWU1YmIyYzQzYzAxYjA2MjNmZTYwM2NlZWVlNDliNDBmYjdjNTNmYzY4NDczNjczYzA5YjFhYzc3ZWE5YmViN2U4NTMwMzc5YTg2ZDY5ZWNkMWZmMTE4MTNmYmI4OGY2OTJmMDVlZjEzMjA3NDJiNGZlN2UwNmQ1YmE3MTY1NjY0NmNkNzUwMGRlMTliYjkzZDg0NDUzNjYwM2Y0MGJkNGFlZWFmMGM0ZGJjMGFjZmQyMDJiMjg2YjY0YWZiODNkNGEzNzhkZDQ1ZWUzYzFkZjZiM2VmMTZiOGIxYWNjYmMwNDA2MzI1MGVjNDdiODZhZTVhNzFkMWRhYjM4YjVlYjgwZDY2M2ZhYTc4OGY4YjU5YTc1NGMwZjljOWY2ZDkwNjI1MmFmNDZhYjFmZmZlZDI3NmQyMzg4ZGJlNzBkOTZiYTY3NDdkMWZlZDRmYzBiNTUyOTNkNWY3ODdiZGEwYzBkZjQ2YTczZjRhYTdkMjllMWM5Y2M4NWNkMDQzZTNkZmZlMDU3NDYyY2E1ZmU1YzY0NzBlNzM5Mjc2ZjhiNTM0YzAxNzJlNDYwZjM0MDQ4N2E1Njk0NjhhYTU4OTBjYzE0ZjIwZDY3ZDc5YzY2MWU4N2ZlYmFjNjI3NTk3MWMzNzMwODA3ZWJmMTc1ZTBkZTEwNDliZWU2N2M4OTVlNTdiNzFhYjhhMmYzY2YzNjQxZmQ1NDhkMDk0MTRmNWZjMzAyNmEwYTM1ZjZiYTk1MTY3Mzk0NDk0MWNiMjM2ZjNkMTk3NmRjNjkwNzdkOTUxNDUwZTc2NjAzMTY5ODhmNmYyYTZmYmJmZjNiMzdjZWFhMDJmZDZmMDI3M2JkODAzMTg1YTEwOTAzOWM2M2YyNTE5Yjk4M2RhZjY1NTQyNTNiZWQ1NDk3YzBiMGJkYWEwYmQ0YTFmYWM5MDAyNmFkZTNlNDBjNTU0Y2ZmMmNjYjM2OTkwZTcxNTU2NzA4YzVjNDAzOTI1NmZmYzczMzdlNWZlYTExZjVlOTBkM2U0ZDkzMzU5MTc5MTE2YTg1YzI0MTM2Y2EzNDgzNWNkMzQwMTJlNGQ3ZGRjN2I3MjFjMjQ2YzczNzAwZTI3NmRjMmZmOWYyNzcwYjQzYzhlODBhMTdmMDFkMzI2ODBiYWUyMjhlNjQyM2E4ODBjM2ZiOTk2YWI4ZDIyMWJjNjI3NGFjNWZhNzcwZDIwNWZjODc4ZmJhOWJiZDc3NmEzZDc5ZWQ3NzA0ODk1MGYzNmRjMGFhM2NjZDI4ZTQ3NTZhOTkxOTA0YWUwNTFiOGE0YjdkZTNhMWYyYWQwZmI0NWEzM2QwYzY4MjI1ODQxZjhlYjY1YjZhMTZlOTVmODkzNTkxZTFhYTczYTY0ZjBkMmVlOTM4YWI2OWFkY2M4YzU5NTE4YmVjNTAxYzM5ZjEzOTE3NGJiYjAwNjk5ZTFhMGYwZTBkODg5YWFlNTQzYTU1ZTZhYzU2ZDUyMDRjMWFkZTFmMjdkODJhNmE5NWUxNGIyZDY5MDlkZGE3YmZhYTdmNDg3ZmI2MTk1OTAxNGI3ODc5NWNiNDYzOWYwOWYwZDMyOWZlYjM1Y2NmNTJlZGMyZGI3MjE5MTRlNDIzMzA2ODg5YTQ4M2ZlZTg3NjM2MGVlMzI2MzM1MzE5MDcwYzU2NGYzYThiOTUzZjUyZjQxNTEzYTIyNjA4ODNjMzhkZDk3OGEyNDg2MDRhNDFiZDRiZmM5ZTg0MTg0ZGM5ZTg0ZDI1ODlmNGFmZmY4NDE3ODI0Y2U1YWRiYQorU0lHOiAxNmZiMjkwYzkxM2IyMGViMWMzZDdiNzk4MjQ5ZWI4NDU5ZDRiZWU4MTI1ZGIyYjNmMWRhYWI4YWY5ZDlhNzAwZWQ3OThhZGRkODAyZGZjZDI5N2E0MTI1OTNjZGE3YmU5OTc5YTFmMDkzNTBlODZmNjk4YWMzMzgwZTM0MWQwNworCitUU1Q6IDc0MworU0s6ICA3ZGRlYzUyNmE0OTcxZDg5MTJhNmJkNDNjNjlmOTJlZDg2NDQyYjE1ZjQyZmJhYmJmMmQxN2VmZjk4OTkzMTYxCitQSzogIDBkZmVmZmIyNzYyMzA5YjQ3MzRlNGNlMjUyM2NmMTg2MzE0OWY3ZTE5YTdjMTQ3ZWMwODk5ZTExMGNhOWQ4N2QKK01TRzogZTg3NzRhNDVkNGQ4Zjg2ZGRhNWMwODgwMmJhMjQ3MmVmM2M4ZDM2YzdmMzgzYWMwNDYxMmE0NjQzODJlOWQ2YzA3ZDhkMzU4MjJjNTNmNDM4OGY1MTUzNjE0ZmVmYWY0NjM3NDc0N2I5ZDRmZDQ0NmE4NjQ3NjlhNGNhZGU4NDNjMWVhYjg1NzQzMTkxMTJmMDE3OWQyZWE5ZTNjMTk1ZGMwNjhmMDY5NzQ2MmI5ZTA3Yzg3OTQ4NzBmOGZiOGZmYzA4MWU0NTg2YWZiY2RiYTdhNGY1OTI1ZTlmZDllYzk0MmQ4NDM0NzMzYzJkZGQ1ZTI5YmJkZmM3MzQyYjkyODY4NzE5YjU0NDA4OGE0OGViYTRjODJmMTg3ZGRjYThmNDc0NjI1YTcxY2Y2YjdhYTVmMDgxYzc0Zjc0MDhmNTNiNzgxNjM2ZTdlOWQyOWIwN2ZkYjZkOWMzNWU1ZWIzODJkYjdhMzFhOGJhNTE2OTE1ZGY4ZGVlOWUxYWQzZjE4Mjg0MzY4M2U4ZDFkYzVkODY2OWRiZmNmMDk1NDFhNDNjMGEwNDYxMzM4MWE1YjVlNGU3MWIyM2M1YWQwOWI4ZWFhNTFjYjkzOGQwYzc1MmNjM2QzYTEwZjEwYjQyYmU4ZWU3ZjZiZGFjODA3ODU2ODQzNDk0NmJiZjU2ZGE3MGU3ZDU0MTU3YTZlZmQ0ODQ2ZWIxNTUyNzhjOTRjMzg4ODY1OGE3YTJmOGVhM2JhYzE0N2FhODkxNjkyYWU4YjIzZjFhZmU3MWVjZmRlY2FhNmMxMTNiNWNhYWFhMTkzOThjN2RmZTczZmFjYjQxNTVmZDZiYWMxOGQ1ZGYyMTI5ZThiMjkwN2VjZWUxNTFiZGQxNDdhN2MzZTQ2ZWE3Mjc1NGRlMzJjZWIwNjZkOWRiMWMyNmU4MGRmMzYzMTI5MmIxNjE3NGNmYTZmMWQ5YzA4MjhiODQ5YzIyZDI5NjUxYTczZTkxMGQ5Mjc1ODc3ZjQ2NGNlOTMyNmM2ZTRlZDZiMDdkY2IzYTM1MzYzYzFhYTY0NzJlMDJjNWNkODU1ZTM4YWFiZTk2NWFjZTlmM2Y1YTRmNWRlMDMwMDg2OTRjYjkwYWZlNDE2YzlkNDg2ODhkZTdmNzVjZmUyNDNmZjdmNDFlMDU5MzEwOTM0OTAzZGI1Njg4NDQ1MDgyNjJjODk5ZGZhNzUwY2Q2YTI4Mjk4MjRiYTAyN2FlYTFiNmQwMTc3NzI2YTM0M2FkZDRlY2RjNWY3ZTZlOTA5YWI3ZGU2MTVlZjI4MDdmOWU3ZDcxY2UyZjc4YWNmZjU3ZWJhNzljM2Y1ZTA3YzhiNjYxYzFlMzAyN2Y4MTc2ZDI4YmZlZjc2N2RkNjhkNGU1ZDYyOGZlYzBiZmU4ODc5OTM0MWYzMDYxMjg3MzRmYWQyMDJhYWZjOWYxMTEyM2ZiM2UzNjNkMTBhZWUwZGI1ZTI3YTE1NzBkZmFlZTQ3ZTI0ZGE0NzNiMDdmZWU1OWE2YzkzZjA5ODFkYmUzMjVjZDhjYzJkMmVkN2RjMTcxNjZiMjY3YzFiMTEwNTM2ZjI2MzZiYmEzNDc1MWE3OGY3ZjYyOTgxODI0NDJkODNjMTIzYmJlZTRmNTBjNWIwZmFjZmYwM2U3YzU1NmVkOWU2NGNhMjdjNGJjYTVhYjBkZTBkNWY5YzJjYmI1NGNjMmQ5NDczYTMyZGY5OTkzOTBhYzJmZmVlZDNkNGNiYTM0OTczZGNlYzNmYmFiYWZjNGQ1NGNhZTRlN2U4NWQ0YTZlOGFmZTQ1Y2FjZDcxZTBmMmU2ZDA0YjRmOWQzYmNmNDNkM2ZhNDFlOTk4Y2NiZWQwZjE1MGQ1Y2ExZDUyNzI5MzJkOTNlY2ExMDQ5NWM2ODMzNGZhMzI2OGYzMWRlNTIyY2IxMmE3NDQ5ZmZiNWNiNWU4ZjE0NjJjZDliNTE3NzBjY2FmNThiMWUwZDgyZWY5MjkKK1NJRzogOWU2MDNiMDE1ZjQyODcxYjc4ZWIyNzUyM2ZiYjdjZTk2MmZjYTMyYWUyNzBlOGUxMmRjYWRkMjVhYTg1MmI4OTFmNmZlZjc3YjU5YTU0NmM5YTdhN2NhY2I1NWUxZDMyYWRjODA1YWU1ZjYxYTY5ZTY3NjRjN2MwODI5MmViMDMKKworVFNUOiA3NDQKK1NLOiAgMGI2NTkwZGQ3YzJmMTVmOTRhNTZlMjQwMTY5MzYzYzI2NzMyMzAyYjlkNDQwYjUzMjcyMzAwMmUxNTVkMDJkOQorUEs6ICBjZDE4ZTAzMjU3N2M1NTc2ZjIyM2YzZTNkOGExZmE4ZTlhODcwZmVmMDllOTQwOWZhZjQwZDcxNDNlNTJmYzQ0CitNU0c6IDcxZmUwZmQ1NWQ1ZWQxMjA2ZjI4ZWUxNmU0MTlmYWI2ZmE2NmEyNTFmYTZiMDYwMWRhMjYxZTQyOWY1NWI4ZDVhZTNmM2M1MmExN2ZlMWVjNzM0YjgxMGFiNjNhYWRlNDQ0NzAzOWNhMGFlNDY4N2MyNDM1ZjU2MWU0NmM1YjMwOTcxN2FiMzFlMGY2NDA3NmIyMTY5MjExNTcyYjc0ZTE4YTFmNDUyNWE2NGZhNzE3YTVlZGYxNDk3NTgxMjljYjA0MDM1ZTdlMjBiYTQwMDViNzQ4MDlkZWM2NDQ1MDRjMjQ1NGE3N2Y5OWIyMGM1Mzc0ZjNjZWU3ZDhjNmI2OGIyNDNjYWZiMzAwOThkY2U5MDQ5MGZkYzNiOTJmNTQ5NDhmNDI0NjM5ZTE5ZjhmMjAyMGQxNTUxM2RhZWZhZGQ5ZTliMTJhODQ3NjFlNWVjZWEwODhhZDU2MWYwNjIwOWZkNDQyM2ZjZDAwM2ZiY2QxODczZWE1NDk2M2EyZmEwN2M3NDc2YjEzODhmOTAxNWQ5ZWFjMzA1YmVhNWEzZGUxOTRmNTVhMTdiNDJkNTk5ZTVjZTYyYzhiN2MxOWU3ZTcwOTYxMzdiOWQwYTY1ZTYzYzFhM2I4NDUzOGNhNjUzNjlhMjBlODgyMmZmZjVlY2I1N2ZjMDliNGU2ODQ1YjRmMjRkNDg4Njk3MWFjMWFjMjhjNzc1ODBlYTU2NzJhZDE0Y2U0NDQxNzE5YzIxNDU0NmQwNzM2Y2I3YWQwYmQ5ZmI1YjI2YzZkOWM1MzZiZjhjODU3YWU0MjU3N2IzNjM0MWQzOTJiNDMzMjNiZGFlN2RmYWE0OTE5ODY4NzJhMjNkODI3YzZlZjhiNTdlN2QwMGZlYWUzODM0YzQ2NjQwMGFhZDFkMzY3ODIzOTg0YWEwMmQyZWY0OTI5MTRhZTExMjdlNzU1MWI4MTI1NTkzNzgzMDVlNGZkNTJkOGJjN2U0MTU3ZWNjYTQ1MWY0M2VlOWY1NGM4MjE1M2M3ZGJmYWY3ZWMzNTIzODc3MzA1MWI0ZTU4N2RiMTM2OTU3ZWM1NzEzODJiOTA1OTBiNWQxMDI2MDI0NTgwOTY2YjcyNTJkMmNkM2Y0ZjE2MjVjNDg1YmE5MDZiZmYxNzU5OTIxODg5NzhmMmQ2Mjc0ZjNhMDMxNzQ5YmE3ZTcwMmY1NjU0N2VkYzk2ZWMyNjdiODQ4OTI4ODBkNzUwZDczMTBlYmY2ZGIyNDEyNTNjYWJlNGIyNWE5Nzc0NThjNmZmYzllMzUzZTYyYWRmMDVlNmVmYzBmYzFlYmU4OWY1Mjc3MDViY2MyNmI3MDEyODU2MTBkOThhYTNiZjIzODcyYjY5OTZkM2RlNDgwZThkMDlkNzgzYzRhMDhjZDM4M2M5MDEyNjM1YWE2ODk3OGI1MDA2ODE4YmJkZTQ0ZjI5ODc0NzliY2IyYjcxMWMxYmVlZWQyN2NmMDk5NzBhMTY0ZTQ1NGY3MTA4MjJlZWY1NTVjMWM3YmY5Zjc2ZDUyNTRjZTIyMGM5YWFhNzE2ODQ3YTI0OTQ4OGY5Y2RiNDRjNDhmNDUyYWI1MmM0MGY2ZDAzYWRjOGJmM2YxOTdiMjVlM2QxMjc4MzBlNzRmZDgxZWIxNGY3NTQyMDViM2E0ODQ0YzU5NmI2ZTNhOTkzNmFkNmZkOWU4MGExNjMyMGIzODFjM2ZmYzdiNjllYWI1NDUzNmY1NWFiZTIyYzkxZDg5ODQwOGU4ODBjNmRiZjBmYTU2NDhkNTE3NzcyY2FhNTM1M2IyNWRiNjA1MGQ3NTNmYWYxOThlYzFkMzc1ZGUwZmE3MjE4MGE5M2JhYjAzZGVkNzcxNmNiODc1MDViNjhhYzZhMzVlNzNkMGZjZjM0NDU3ZWZmODIxNzg5NTIxNDJjN2JhYzlkZmQ4NzJhOWE4MmY4NWIyNGI4OGZhNDJkNGJlMGEwY2EwYjJjNzBmNGM2MjIKK1NJRzogNjQyZDgxYWNmMzhjZjA5OWE4MzNhNzRmMmQ4MGI4NTQ0OGVjMmIxYTVkZGM2NDQ3MGIyMTNkNTRiN2JlNjEzMzY4OWE3MTk0ZjVkODk3OTJlMTZlNWRmNzU1YTRmZDllZjQ2ODllYTk1MjkyNmUwZTRlY2IzYmQ0ODFmZDkxMDIKKworVFNUOiA3NDUKK1NLOiAgYzZkOWFjYzUxNzVmYTJiODk2NWMxNThjNTZiYTBhNWE2NjZhZDJjNzQwY2Q1YmI2NzliYmE5YjFkYzUwOTI4NAorUEs6ICBmNWNmY2EyMTFiMDJmYmE3NzIwMzQ3NzAzYmYxNjMxY2IzMDhmYWJjZGFhNjc0Mjk1MjdjNWI3YjY3NmRiYWVmCitNU0c6IGYyNDUxMDBjZDJkMzE2NDhmNWYzNTFiZGE1NjRjOWRiNGEzNTgyMGNjMzBlZjY1MTMzN2M0Y2Q4ODgwNzA1NjlkMTE3YTkzNGI5YzkxOGU1ZGY4YjM3NDRkZDY2MjBjY2JjNDlmNmIzZTU3ODJhMzAzMzlkYmI5Y2JlZDA1ZGQyYjNiOGM1YmYxNTQ2ZTcwYWY2MzZlNjYxNWM0OGIyYzNjMmQxOWZlMzU0MjBkZjUzMTRmNjNjNDgxMmI1OGU4MmEyYTYwYjE4MDJmMzhlNTA1Y2U3NDgwMTdhZmE5NzdkM2Y5YjFiNmJlYTIxOTJhY2VjNzNiZGNlMTJkNjVlNjg0ZGE0ZDhiNDFmYTlhODZmMTEwODZlZGMyZDUyOTZmNjdlZmM1M2FjODQwNzBmZGUxMzY5M2ViMjMxOGY1YThjM2IxMTdjMjMzNDIyYWRjZGQzNTJmMzI4ZjBlYzY5OWE0NjUwYzkzZjliNGE3ZDc5NWQ3ZmMyNjIyYTAzZDk5YjY0ZjdiM2RjMzE5NGY2YzNiMWI2OWQ5OTA3Y2UwOTI0MDEwNzNmNDdhMjhmNDc5OWQyMjkwOTJhMWIwNzQxMjk5NTRiZTgwY2E0YTNlNjU4MmVlMDVjMzAyY2FjYjc0MzFkMWNhNmE0NTFhYWVkNzI3OGFiYzdmNzg1NzUyNDFjMmEyZWVhMmU4NGNiZjlhMzM0ZGY0MDIxMDljMDI4ZTM0NTQ3M2ExM2FmOWIwMDhlMjBiYzhjZjBiY2VmYmI3YWE3MjdlYzg1NmU5OTI1YjRkZGQ5OWRlYmE4ZjI1MjkxMWE1OTAxNTRiNTc5YThhYWEzMWYwN2RkNTAyNWRmNWNkOGEwOWY3NDI5NjRjYzhjMzY1ZDhhZmY0ZWIxZDc5ZjZlNWEwN2RhYzVmNGVkZTkyYjRlMmU2MWQzNGNjMmQ0ZjBhYWFhYjAzN2FkNWZkYjk1ZGU2Y2Q1OTg0ZWJhZjdjY2U3ZjA4ZDBjYTBkYmJlNDgzY2UzY2IzNWNkNzkwY2EwNDI3MDY1YTM0ZGY3ZjRjMmFmODZlZmU5Yjc2NTcxM2FmZjI1N2Y1YzFkNTQ3MDk1MjdhZDE4YWMzM2FiY2RlZWRiMjA4MDY0ZWJhZWE0ODM1YmU0OTQyYjhmYzY2NmFkMWI3OWI2NjUxMzA5ZTVlYTFkYTMwMmQ3ZmJhMmU5OWYwZTYzMTllODJiOTkwNWExZWE0ODJiYTA0M2I2ODAwYjMzMGRjNDhiMzMxM2Y1OWJiMmY5ZThhN2YwN2ViMTgwMGE3MDI3NDVkYjE0YzYyOTlhOTgyZGFkODk3OTU0NDQ1YjdkOThlYjU4MzdmZDcwYmYxOTBjNjQ5NTUyYzhlODZmZWI3ZmY1YjNlZDhlMGEwNjcwNGQ0NTUzYTNjMmRkNzRmMThlYTgyMzNhZTBhNTBkOTE0ZmUwOGZiY2QzYTE0MzVmZWQ1NmE5ZjNhN2VmZmExNDBmYjU1MmRkZDIxZGZmZmY3ZmE0NzMzMmRkZmMxZTUzMTdmNDE3N2Q1ZTJmMTFhMDZlYzg0Y2NmYjg5YjY1NGVhODFiZDQyZDdlMDdhMzg3MzAxZDBmNDAyNjRhYmJmOWY5MTA3YjMwZWRlODY0Y2M3NjkwYzA2ZDJlMjQ3YTA2MGJiMjI0NGFkNzhlZDVjNTUxNWExYTJhNjEyZDYxZTNkOTMxZTI4YmM5MzliNGQzNDM1ZWVlNGY3MzMxYjFmMGY4NTM3NWQ4MmFjOWE3N2M0Mzc0MDAzMjA1MTc0NmRjOTI2OTQ1OGMxNDdkMTg4ZDg0NDAxOTU0YTQ4OWNiNGZiZjliZjg0YmE3ZDhmMTAwOTAzY2U2NzgzMWI0MDU0ZDBmNThjZDg4M2Q1NDJjNDkzMzEwM2ZmMDcwY2RmYzlkYmIwZmNjMzFlZmNhNDY2ZTc3YTMzZjFhODEzZGE2ZGMwYzdjMzE1ODVlOGY0ZmVmMWViZjQyZmJkMQorU0lHOiA0ZDJjZTcwNzA5MGIwZjNmNDE0NjJmZDc1YmQ2MDlhMjcyNGZhZGZlNWNhMzkwZTMxM2E0MmNhYjQyODY4ZWQ2ZTlhODkxNGRjMTM5MDljMGQ2ZjYxZTYzNzEyOTU3Yzc2ZjNiZDhiN2Y1NTM0OTcxNWEzYTMxNzUxNWMwNzEwOAorCitUU1Q6IDc0NgorU0s6ICA3ZGZhZTQxNjQxOWQ3YjBkNGZjMWY4MjM4NDBjM2U0YmQ0YWRjZDRkYzJkYzE3YjM4NjM3YWNlZGFjYmRiYjQ1CitQSzogIGJjNTFkNzc0NTkzMTMxN2UxZTM0NmUyZTdjOTIwMzkxODFiNmJmMzhlZTJmNWE0NGZiZTIzMzljNGY5NTJhYjkKK01TRzogZWM4NDNkYzRkZGE2ZTkwMmU5YmUzMWI3MGYxMTc2M2I3NTdhYjZjZTczMzRkYzAwNzY0YjJkMDg0ZTlkYWYyNDg0NDg1OTg0ZWUyOGEyODMwZmNiOTRjNTQxY2I0Njk0NDAwMzY3MzFkZTgwZmY1NjBmNTMwYzlkOWU2ZTFmN2Q5YzRjNWJkZjUwYjA0ZjU0MDNjMjlmNzZkN2UzNmUwMGJiZWEzNWRiMWNjNjBkYThkNzc2NTI2MjY2YzMzMjRjZTdlZmVjNjQ1MDg1OTYwOTI2Njg1NmQ3MDFhNDdhNDhkZWU4YmYzNzQwOTU2NWM3ZmJmYTk5YTIwNGU1NTMwYzk3MWM2MDViNDQzMDVkNWM3NDY3ODk0MTE0MjUzY2Y0M2NkZGYxOGI2Mjk2ZGQyNTRhNGQ5NmFjNzAwMDkxODE4NmRmZDRiZjQ1NGVkMzA5NzRjNTUzZDBhZTE1MWFkNGNmNTQwY2VjYWFhMGI1OTQ4YjA5ODVhOWM3YjZlNzgxNTkzMmJhYzExNzMyZmM3ZDEwMjY3ZjZiZjhmMWU3YzA4ZDY1MGU1NjdiNGVkZDE1YWU3OTU4NDEwZTQyZjFmNTM3ZmE3MzJmNzI3YTI2ODM4ODMyMWQ1MzQ0YzRlNzhiYjlhNzRlYWI5ZDZhYmY5Njg5NjVjNjY2OTNkNWYxMTJkZDRjMTRmZGZkZDk2MDA1ZWFhNjc1N2ZhMmNjMTAxM2ZlNDMyN2FiMDk5OWQxMTdmM2RiZjMyNWIwN2NkNDU0ZDRiMTQxOTkxZWY3ZTIzZGI1ZWUyNGJlZGEzNTg4NGFhMzcwNDgwODY0OGFhNDNjZDYyNTYyNTlmN2QzZGI1ZTA1NTMxMWYyNTNlOGI1N2E0Y2RhNWFmZTBiMGFkZmMzNjRlMTYwY2EzN2U4ZGVjNmI5NWFhNjE1MmU1ZDVkYTZlYjkxYmUwZTQ0ZmZlOGU0OTUzMzI2N2I3ZWI3OTVmNWY4ZTBiMmMzNWIyOWRmYmM4NzU4NWYyMmJkNWI5MDlkZmQ2YTVlZGMwZTNhOWQ5N2IwYzRmM2FkYzUxZTk2OTkzN2MwOGZkNjVmNTM3YWFjZGE4ZjExMjc1YWYwMmMzMzU0NTQyNjMwZjM5MjBjMzkzZjVjNDJiOWZjNjMzZGU5ZDk0YzcyZTNmMjAwMDIzNDlhZDA0MTgwMzViM2YyNWYwMmNhOTI4ZTViMmQ0MGE3N2ExYzNlNTYyMjFmNGI5ZGIwYzI1YjA5NmQ2ZTVkMGZlNzU4ZGEyYzY5MDUzZThkMDg2ZGVmNGVkYzZlMzQ1Mzc4M2ZmYzYzYTQ5NjAxMjJkOTIzNjcxYTkwNjAwOGJhYzEwNTYxYWU2MjE5ZDJiNTFkNTM2N2JmMTNjY2FiZjU5MzFiOWYxODZlYjEwOWJhY2RlNDBlMWFmMmI1NjQ4MWUwYzZkYzZmNWM1NDczZjgwMDFjZjM3MTkxOWFjYjQwY2VjNWI5NjJlYmJhODBlMzJkNmViYWM0ODA2ZDA0ZDI0NzY4YzJhZDJlM2Y5MmE4Y2JlNDc3NTRmOWJmNjE1OTUzNTIyYjI2M2RjMjQ5MzdmYmQ5MzJjOGM0NTllYjhiMTA5NDQzYWY2YzE5NWE1OWZkMjcyMWIwMTI1NjI4ZjJiODE0M2NmM2MxMjhiY2VjMTM5MmVmZDE2YjczNGMxMDcxNmQ5NmJhN2QxZjQxMzkxN2NjYWZhNWJmNWY4M2Y1MjRmZTg0MDZhMTUyMTE1ZWE3NzBlMTc0NWU4MmU4YjUxZDc1MmI4YmQ3ODVkZjQ4YmZjMTIwNDFiZjg3NGZjNzNhZmI0MmNhNWQ2OWM2NDE2NDc5Y2ViNGFhYTA0OTJiNmZmMjFlZTEyZGIyMjEzYTQyODZmZDU2MDVjOTNhN2JiOGEzYjA3MWIwYjI1ZmIwMWQ3N2FiYmM4NzcxNDg5NDcwYTEwN2FhZGFlOWY2NDBjMjRkZmQ1MzI4ZjYwZjRiN2QKK1NJRzogZGEzNGIxOTgzZThjNTVlNDFmZGE4ZWM4YWJmMjNiMzY3YTBkYTYwNmM4Y2RiYjFlOGI1N2UwMzQzYzA1NTdhNWYwZTgxNWU3ZjIyZjg2MDVhZTkzYjI3ZDAzNzc2YWMxZjdkZTNkNzkyZWEyOTMzYWMyMmQyZGMyM2IzMjNkMGMKKworVFNUOiA3NDcKK1NLOiAgNzA5NDE2MDc0OTk3YjljOWFmNGQzN2EwMTEzOWU4YTNmOWYyY2U1ZDcyYTU3ZDgwNWU4MjJhODExODZkMDE3ZQorUEs6ICBhZWUxMTBmMWY0ZDQ2ZWE2MDY0OWQ3ODZiMTUwMDUyZTI4N2E5ZGE2MDEyMmM0N2IwOTA4ZmE4YjJjYTI4YTgwCitNU0c6IGVkZGFhMzY5YzBlMzFhMWZjYzFkYTQ2ZjY1MzYyNDQyYTBjYzIxYzdkY2RkNWNkOTBlMGEyZWU5ZjI1MTEwODEyYmExMTQ5MzFjODY4YTcwODYwN2FjMTYwODRkNzk3MTVkMTNiMzM4YzA1YzZhZWY3MzQzZTdkYWQyODJmOTZmZTI4MTkzMTg4ZjBjYzg5M2M3ZGNlODA1ZmQzYTdjZDI2OGI3Mjg5NDE2MGI1MjQ1ZmVkOWZhOTk0M2I3YzgwYWRiM2MyZDFhMzUzZDhmMTJkZjI1YTMxZGRlN2ZhMzg1YmJlYzM1MWRhNjZmMTUzMDMyZTE3NzU2MjczZjhkNTRlOWEzYjllYTI1YWU2N2QxZTljMThjYzY4YmU2MDFlM2Q2ODI4MjgxOGNlMGU3Y2Y4OGE0ZDEzMzY0NTMwMjE3MzJmMDhkOWU3NmNkMjM2Mzc5MjliMDkxMWQ1Zjg2MTRmNDg0MmU2NzBjMTQyODYwYWZjMjY1YzUwMTcyYjEzYmZkMzVhZDhmYzU0YjI4NjU3ZGEzMmJhYzE1M2JhOWFmZmM4OTdhZmIzYzcyMWY0OGNhYTQ2MjQwNTg1NzEwYjBmMmQyNGQ1ZmY0OTY1ZDFkMTBmMWEwN2IwNmFiZWE2YTA4ZTFkNmYxNTAwZGExMmM0MzRhNmQ3NzhjOTQxMDY3MTA4MDAwNDc1Y2U4MzFiY2ZlMmQwYWZlNDBiNzQxOWQwNzA1OWJjMGNkOGRjZTRiZTk1ODdmZjI5YWQ4YmYwYjI2OGFlMjNjZTBkYTViYjViZjc0ZmYwYjJiMzFiODIxMTJhOWZkNWFiZDliZmQwYTkwZTZmNDcyMzU0OGM2YmIyZjk5ZGMwNjFiYTMyZWJhMmQ1M2U2YmM3OWJmNDQxYjIzZmI3NDYwZGUwNGU4ZThlZmJjZDRkNGNjNzM1NWRlOWUzYjA4NjFhNjgxYjk4MzgzOWQ0NDg4ZTU1MTc1MWYyM2U5YTZlMmU0ZDQ0MzI3M2I5ZTBmZTY0ZDhhY2QxYzc0OGI1NTU5NDM4MjIzZGQyMWI1MTgzMTg5ZTBmM2MwZThlZDQxNGMwMzU2YmFiNzdhNjU0ZGUxYTU3NzE0NjJlZjE0MzQ0OTcwYTQ5MTUxMWE3MjI5MTRmNGE4OWY0ZjFhODI3ZTE4Y2Q4NDQ3OWNjOTI1OTJlYWRmOGRlMmRmODI0Yjk3NmRjYmQyODRhM2JhNjRiY2RiMGRmMTVlOGY0MWMwYjI0NzE1ODZiMjZhMDYzNTNkOTA1MDI4MjM1YzFjNmU1YzQ1ODcyMjI3MjVhZjA4M2UxMWU3OWM5NDNhYTQ0NGQ0YWE0MTIxOGQzZTk3NDMzNmUzNzI4MTNlOTllMmIwYzVmMGFlODEwZmZlZDlhN2EzZDZjYjc0YzU0NzNkOTkwYTU5MTEzMjliOGU4MmVjNmJmMmJkNDMyMWJiNDg3MzcwZjg3MzllN2EyYTRhNTM0MzA4MzNkNDViOWZlM2RlYjkzZjc5ZmM2YTUxZDU2MzY5NWVjZGI5Nzg1OGQyMTNkYTU4NDQzNGI3YzcxNTQ2YWFlOGQ5NjdlMWM2ZDAwODJiMTBkNGE3MmRlMTc0MmU1M2M0YjJmOTJlYjhiNWM4YzM1YWI2NTM1ZWE4MTAwYjM3OTI0YTBhOTFkMmE3MjhkMGY1NjQyNDM3YWE2NmM4MmFiNzRiNWQwNzQ1ZWMwOGY3NzA1Y2I4MWZhMDc5ZDg5ZWNkYzlhYTFmOGQ3ZDgyZGM3NzQ2ZDM0NjE1MzQzYTY5MjVkYzMxOGYzNTJhMmI0NTAxMjQzODQyNGY5MDk4ZmRkZjZlNjFmZDFmOGZiNDlkYTQwYjNlZWNlODlhMWFmMTk5NmRlNzBjZDE2OTZjYmZkOWUzMDFlYTVmNDQzN2M3MWFjMmEwMzIyNTRjMTQwYTkwZTg1ZmI4ZmZjNDY2N2ZhMTM5YzFlZTliYmYxMmVlZDkwNmE5NjdiYzA5MjEKK1NJRzogOGU0YjQxZjA5N2Q4MzYxNDE4NGJhN2Y1MmJhMmZkOWYwNTY1ZjhhNjM3MjFlZjU1ZjkzMTYyODI2YjlmMGFjMDcwYzBlMjg2NGI1ZmZkOGVjY2MxOGVmYWQxOGIyY2U4NGJlNTdjMGI0YTQxYzUyZTIwZWYzNzcyMjM3N2M2MGYKKworVFNUOiA3NDgKK1NLOiAgM2RjYjdhZTdkOWYwZjE0MWYxZDlmMDc4ODM2MzViOTEzZWQyOWZiNjFkMGY3NDFjOWFmZDA1YTI3YjA0NWIwNgorUEs6ICBhZTYyYjdlZTFiOGRiNTc2NGRhZmRkZDk3MjRhY2MxMDZkNmMwYTRkMWU4NWQ4OTA2Zjc1ODRiNTU4ZjU3N2RmCitNU0c6IDM4MTE2YTU3MjY2OTA3MGRkNTg2MzIxOGM5MWE3N2E0YWI0NzU1MzY4ODQ4OGM3OTI4Mzg1MDllOWFiYTI1MDY3YWRiN2VhNDI0OTg0ODAwOWQ5MTRhZTk4N2E2MDMyMzQ4YzFjMDY4MWNmOTc3YTk1NTJkZDZiYmY0ZTZmZjMyYWNjOWZhNjFjYmVlMjVhMzkzMDc2NTBmOGJhNmE3Y2U0MjFlZjJmNzFiY2NjMDk1ODEzOGY5MzI0Yzg2YmYyZTUyOGZhM2U0ZDFiMTlmOWYyY2E1MjY4NDA5YjhjYzE5YzYyZGQ5NzliODk2OTdlNDU3ZWQyZDk4YmQyMDk2ZjYyZDNkOWUyNDczODg3OTU5Mjc4MDNlNzlhYjcxZDRmNzJmNTY4ZTk0NWE4YTE2MjE1OWQ5Yjg0ODM2ZTQ1ODU2NDRkNDk3OWY2MTRhYWRhNzNhZDQxM2E4MzM5MWU5Y2Y4ODBjNDJhYzJhOTgzNDNiNmE4MmNkMmI2MTU4MTQ1NmY2ZGU1Y2ViMjRmZTQ2Yjc2MjVkNTJhYjJjMmMzMjRhYzc0NzAzZDE1ZTE1ZjFhZWZmODA1NWQyZjczOWY3MzYzZTE2ZWMxZDc4YmUyYzYyOTk0MzZjOGM4ZDMzNmJkMjkyNzFhODk3YTZlYzkzMmVkMDg3MjViZTIxYjI4ZjlhYTE0ZWFmNGY3MTg1MzE1NGRiMTQ1ODdjOTMwYWIzZWIwMjI3YWQ3ZmZiNDViM2JhYTZhOTk5NDk5Y2M4YTZlNDViMWFiNGQwYjMzOTc4MmJjZDljZmJjZjg4Y2Y3ZWFlODkxY2M4NDFlOWM4OGExZjZhNjkxZjM5NDhhNmJjODViYTdmNDYxMTY0MmU4NDIyM2MzYjE3ODk0NmRkYmVkZGNmY2RlZjRhZTRjNGUxYTgxNGI5YjFmMDJiMWVhYTgyNGRiOTNmNDRiMjdkMTQyMDZiMzQwNDY1YTFjZWZjZjUzNWM2M2U1NWM0Mjg3MjI0MjYyNzMzZDk4YWFhYTE1NGYzYWQ0MmNkODU0NmE0NjFjZTBkNDZkODg2ZDM0NjFhMjE1MGNiNDVkYmU1NjQ3M2ZmNjNkM2RjN2EyYjk1N2I4MjM5NjlmMTliNTk2OGU4YjQyNGM4Nzk3NDE5MjZkODJjNjM4Njc1M2IwZmExZjA4MDI4NGU1NTc4OTQyMzYzYWFkZWIyMWY4ZTFlODkwOWZhNmMzODA3NjQxNDliYzkxNWIyMjg2MDRlZmM1NmQ5MmU0YmViNzIwZWRjNzRjNGQ3OGY5MjVkNmNmZGY3YmEyZjE0YjU2MjM3NzU4MTBkMmQwN2JkMzg4YzU3M2UzNjUyM2YyMTU3MzhlNjkxMTRkY2Y4ZDgwZjE3MGJmYTY3NmUzMWZiNjI2YTdkNDQ5ZWQ5NjY0NzM2MzQ3NTk3MGM4YzQ3ODA5NzA5YmNiNWU3MjAwZjJhMjI3YzdjOGU3YjAwMGYzMGMwYmRlNjFkNjdiZDY4OTUzNjE2MjlhMzZjOGZkZDVhNTZiODFlZmJhY2YxNWMxYjM1MzBhMDhjZGVkNWIxZmQ0NTdmYmQyZjAzMDQyZjU2ZjFiMzdlZDE1Y2RiOTEyZmEwMjk4YzI3NjcyNTA4N2VlMjdkM2NmMjU1MGZlNmU4YTAzMzBhZjQxN2Y0ZjViYWYwMzYyN2VkNjdjNWY4MzIzMzYzYWJhYzVhMWZlMzQ4MjMxODBlM2UwZTIwODBmNzViZmQ5MWMyMDdjZjZiYWE5YTIyOWNmNDQzZGQ0NDJjNTkwMmUwNjczZjMyNTJiODUyNjM0NjU4NTg3MmY2Y2QzNjYwMjVhNTY5OTJiNzBlZGUzOWJjOGQzMjJmOWMyMmExZGM1OTllOWYwZDUyNGNiNmQyZWE1YWUyODc4ZWY2YmVkNGI3MDI4MDdmMWUxZTczZWJmMjkwZWI2YzBlZWI4NWMxMzcxNmY2MjZhYTkwZDM2NGI0OTA0ODM3Y2UwNQorU0lHOiAwOWExZTZmZWRmOTcxYjNlZGJmYWVmYmViODlhYTUzOWNhMGIwMmIzN2U3YWM0ZWE4OTIwZDZkNDM0OGVlMGNmOWEyZDVlOTZmY2U1MTdjNjY1ZTdjMzgzNjhiYWYyNDk3OTI0OWE5NWI3MGVhNzQzNmMwMDc4NWYxNmEzYWUwOQorCitUU1Q6IDc0OQorU0s6ICAyOTczMTFkZGVmZmVjOWQyYmU2OGVmN2IyYTIwZmUyZDI3N2UxZDhlNTE2NDhiMDM1NzJhZGEyN2VjMWY5ZjQzCitQSzogIDZhNmMyOGU3NjE2NDBjNDAwODMzM2FhZTVhMzM2NjMwMmUyZjQ2NzdhOTUzYmE0ODJhYjZmYjRhMWQ3MGI0NDcKK01TRzogMjY1MmFjZmMzYmRmMDlhNTk5ZWM2Nzg2YmJkOTRmZTU3N2NmNTc4ZTAyNjNjYzY4ZDlmNTdhNmM4MzQ1OGY4MGFjZDhhNzVlZjAzMDQwYTYzNTY3MmI5NjhmZjJhZmRiMjg4ZDI4Yjk5OTZmNjQxNWIyZjMxNzVlOWVhMzdhZWIwNWRmODE4MTJlMzhhNGM5NzZlYjkyODU2Y2VkYjkxYTI2OWE0NmZjYTVkZjliZDczMGZkODQ0NTJiNGJkOTM1NzdjNjFmNDJjMTQxMTM5Nzk4ODJhODZhOWZlNjMyZTQ3NTZhZmQ4OTgxNmZjNDY3MGEzMTA1MDNmZGFhZDJkYjc2NGMzNzIxMjEzYzNlNjBmMjljMjY2OGQ0ZGU4ZjQyYjA4N2YyNWNkNTZjNjlhNGU0OGYxMzRmNTU5OGNmMTQ1YmU2MzhhNWMyMzE4ODYzMzI5MDYxNzI5YWFjOTFkYTZhMTkxZmQ3NzQ4ODBjZjljYjU1NWVlYzE1YjAwNDRmMTBlNTQzM2ZiNDZhOWI4ODkyZGE4ZjZkMjRmMTQyNTg4YjcwZmYwYjQ5MjAwYzUwNmI4OGJlZDQ0OWFkMTBkM2Y5MmMyYmFlZGE2YmJmNTg2NzZjNWJiYzY3ZDMxZjY0ZmIxMmU4ZDVlNzg4NzZkNWM4NDlmYzMxNGIyY2Y4MDEwYzUxMDIwNGM4NjMzZDBjYzMxODU2ZWM2YTExNGVhOGE4OWM0ODkyN2IwN2EzMWFiODQyYzliODM1MmQ5MzY3MzQ1MTQxYTk5YjQwMDQ5ZDVjNDhlN2QyN2NhYjQyN2FkZWZkMWYwZmMxMTM2YjM1M2NiMDFjM2RlZjkxZmZmZWU4YWQ5MWU4OGY0YmI3ZDI2MTVjMGRjYzk1MzQ0Y2QwMTk1MDkzOGVjYjE0Yjg0NDZiNTZhMDZiZjJmMmY2NWZiODczNWU4YTdiYzk2YmI0NmNlOWNhYzcxYTg4ZWI4ZmRhNWU2OWQ2OWViMjlhYTQyYTAxNmI4NTgzODkzZTlkNzI3N2NiMTM1OWM1Njg3ZWVkY2Q1OTlkOGE0NmU2YzE0OTYzNjM3ZGIwNGE5MjlmNGJjNzkzMDRhYzJkYWU3MzNiM2E4MzllYjc0ZmJlM2RlNTA0MmZkNjU1ZWFlY2IxNWYzOWIyZmUxNmRhZDhhNmZmOGRiYzA1NGZlZDUxMjgyYTg1NmU5ZGE2MzE2ZmFjNmRiNWQ1NmY3N2YxOGRhODQxMmViMzc3ZTViMWI4ZjRjYjEzNTRlY2ZlOGZlOGZkNTRlNjJkNzY3YTgwZGUwNGNiNzYyMDIyOWE4ODMxZGJjOWVjZDQ1NzhmZmEyZmYwNmI1NDQ1ZTQ0MGQ2OWFhYmM5NGM0N2JkMTdmMjJiNjlmNTJlZWFlNWNmY2QwMWE1Y2FmZTA1ODAwNzJhZTkxNjZiOTU3NDNkNjhjMzU2NGM1YTdlNDZmMjRiYzQ4YTg5OGExYWIyZWJlNjNmMzY4NTFkMmFhY2ZhMGM0ZjMyZDk5Mzc3MWQzMTRlNzI1YTQzZDk4MDVkMTM3MWNmNzIzZWYxNjFkNDJlNjNmZmNhNjg4ZDdmMGUyMWVmNWIzZjlhNTYxYTYyMTA3MDJiODVmYmQxZjhjYTc1Mzg5Y2M3YTIyNzM5YmFlNGRlZDkzNzU3ZjE1MjBkYzM4ODQ0YTFhODhiZThlMDk2NDUwNTkxNDg4MDdiOTMzNzcwODc4Y2I4YTlhZDkyMTEzMTcxMzFlNjkzMjQ1MzJmZDAyNzliODMxODViNjI4ZmMyZjllMjE1MDAzODQ2OTNmYTI5ZjI2YmQxYjljMzAxNjAxMzY3NjY1ZjA1ZjM3MmRhYjRlMzEwNzcyNmNkM2Y2MzljYTYyYmY2M2E3NWY3N2VhYTc1ZjcxMzYxNTdhZGEyMzc0ZTY1ZmI0ZmQzNDliNDVlMjU0NDFmZDIxYjEzZTY5MTEzNjZiOTdjZmI0ZDZhZDUyMmI4NTBhZGY0MGMKK1NJRzogNGJmMGI5MmM2ZWU0ZWFjZTVlOGViMTAzNzBmZjlkOWM2OGE1NzQ5ZDU5ODk5ZDA0MzI3YWFhMzhmOGY4MjVlMDMyZTU5NzQyYjM3ZGUyMzEwN2EzZWNkZDNmN2EwZDA4MTIyNjE0Yjc4ZmRkMzcyOTNjOGQwNWUyOGY1ZjcxMDgKKworVFNUOiA3NTAKK1NLOiAgNGRiMmI1ODE0NGE4ZDJkMGVjMDNiYjliYzI5YjRjYTg5Mzg1NGM4MGI2NGFmYTRhZjdhOWM5MzY5MzVlY2IwNAorUEs6ICBmYzVjZDc1MGUxNzRlZDcxOGJkOTM4ZmE4ZWQ5OWExYjlkNTU2YmE3NjcwZjJhNzdkYWYxYzcyMDExMzczMmE1CitNU0c6IGM4ZDFkYmM5MzY5MTFlMTIyY2VlMThmOTJiMTZhMzlhMmVlZjA4MjNiMjI3Zjg5OGNkZjU4NDJiOTNkNTlmYzAwMmVkYjU0OThhMjA4NzJlMTk1NTRlZjczOTk5ZWIzYTdiM2UyZmRkOTA3MGUxZWZhOTIyOGU5ZTkzYjI5YTg2OGFlMzc5OWU0ZTU3MjMyNDgzNmIxYWQ1YWE4MTJiZjAwZjg0NWJjMjE3ZWJiYzNmYWJkYzRlMWI2ZTUxZWY5ZWZhYzI3NzBhYTBhNGExMWVlNTJhYjk1NmFjNjQ0OGFhMjYyOWNiNjFkYmIxZjFlZGIzYmRlOTliNDg3NmRhMzkyYTZlMGI5YTBjMzE4NDlhNTg5MGFlYTk1MjJmNTZkMDE1YTE5MzUwMTViOTFiZjRjNmEwMDExZDIzNzdkNjcxYzNkMGQ3NTNjMjdmOGM3NmU0MDVkMDIzMGYxZjRiOWI4OGZjZWJiYTFlYWYxMzc3NzIzNWU1NTMyNGI3ZDNmODFlNjg2MTA5ZDkxY2U2ODk1MzBiOTBkMmM1YzcxZGQxODc3MmIzODVkNjJjY2JmZDJlMDg5YTFiNjcwOTgzZjYwYzIxYzQ0NTVjYjlkMWEwZGNhYTc0Yzg3NGUzNTIxMWY4MjI3ZmY3YzIzNGRmZjg1ZWMwYjA3ZTM2OGNmYTUwYTM0MzU3ODM5NWExNGM2OGYxZjg5YmQ0ZWNiYzE3MmVmODA1ZTU4MzFlYzg5NDc1ZmNjOGQ2ODVjYTkyNTVhNzdlM2JhM2MxNDc1MDhlYzkyZDdiY2NlODc5YWYwYWJkZDI0MTZiNjdiNWY1MDUwNzMzNzkxNGYzOTBiYmUwYjQ1MGI2YTJmMTE1OTM3MmM0YmNjZWEzODJjZTNkNmQ5ZmIyNTE1ZWNmNzkzMDA1OWEwNTUyYjc1Zjk3ODg2MmJmOTdlODMyNWFmMjRkMWI4Y2U5NTEyYmZjN2NlZjg4NDIzMjA0MjM0MWQ4MmY5YjVkYWQyZTUwMmFjNmFjNzk1Zjk5ZGFjN2ZjNjBlM2I4NjM5ZDBlMTUwMGRlYWQ0ZTc4YWNhMTA5OTU3ZDU3N2ExM2MxOTI1ZDc0MDNjMWFjZjk4OWE5ZGU2NzExZTIzYzY3YmY4NzIyZjU1MWI3NzRjYWRhOTMxYjVmZDk3MzQzNGUzYjcxNzI4MTk4ODNlNzBjNTI3ODVlM2I0OWQzMjNkMDU2MzY2NDExNTg2NDBkY2Y2YTRjMjAwZWIyYzEzYjFiZWViMmRjMzYwMzUyNDcwZDE1Mzg2ZTU5ZTZmYTYwMzY3ZTVlN2YxNzJiMjExNTlkNWVlN2NhYjBkN2Y1ODY4MjM5ODU4ZTJhOTM1NTA0ODBmZThmYjRkY2FmNGYyMjRjNGIyYWQ1NDQ4NzkxNjMyZGYzMGU4ZTVmYjk5OGIzNWVhOWFlYzhjOTM0YTQ0MDNhZWY4MjE4N2NhMWFiZjgyYTM0NGQwMGZmYjk5M2Q5ZmYzNDYxZDZmZWNkYWY1ZDNiNDgxZTBkMzExNTNkYmY2YWVkMjg4YzhhZGQwNjRlODMzMTU1MDE0MWJkNWY3YTdlMDQ3Yjg2MDdkODQ2YTZiZmI3MmQ2ODM0NDZhNDQ1MTE0NjA2MjUwZDhkMmQzYThiOTUwOGJiMDdkNDYyM2NkZjE3ODhiNTQ5OWU5Y2I5YTEzNzk4NDliZmExOWM5YTlmNGNkM2Q5MjUzYWRmZmRhMjVmNDdjODExYmU4MzNiMDJmMzMyN2ViYmE4MzczMDE5NWQ2MTRiYWU2ZmU0ZTdhMzgzMDgxNWQyYWY0MDBkMjBhOTQxN2EwOTVlN2U4ZWVhMTA0NDkxN2NiZTUxMmM0MDE4ZDY1NmUyZGI2N2JiOTg5YzAwZTFlNTA3NjIzZTgyNzhkNzI5OTI1Yjg0ZmI1YzE4NmE3YmFjMTg5ZTZkNmFiMTRmZDdiNjJmZGM2MzJiZWJiNWY3N2NiNWNjMmY3MDdkZjQwNTMwOTkKK1NJRzogNDI0NTE3YWFkZDg1M2NlMzk4NTc1OWEzMjdlNzc2MGQ5MTU2ZDNiMjczNDUzODNmMGU0YWQ2NjYxZWU0YTM3MjRkMThkODIwZjZjNTU3ZjgyNzk3YmViNjJkMmYwODU0MzM3NDRmODlhMmQ4NTI5Mzc5NjQ4MTg2MmVmOGE0MGYKKworVFNUOiA3NTEKK1NLOiAgYzgyMDQxM2MyNDU2NzQ3MTA0NjYyZWY0ZGZmM2FjMjMzYWM0YjkxYTc2ZDNjNGVhNzU0NDkwYmM5YjFlMjkxZgorUEs6ICA4OTkzY2VhMmY3ZjI4MDZjNzdiMzk4MWI1NGJmYTliZjE3NjIxNTFiNDE4ZTVlNzI1MzcxY2EyYzA0ZDIyM2VlCitNU0c6IGQyOTkyZjgzOTI0YTU5NDg4N2U2ZWYxM2YyYWU4MDhmYzg2MzljN2IyYzk5NGZhZjBmNzk1ZTM2MDE2ZGFiNzcwMGEwZWU1MzAxNzBmMGI5ZmU5OGFiNzU4OGNlMDNiYzUwYzJiYWU2NWUwNTI2NDdlNzU2NzM1YjM1ZDBiNTljOTY0ZTkxN2Q4YzgzZTJmOWZlY2M0Y2IwNTU2NDI4N2YwZTM0Yzk0OTQwMDVlMjViMWE4YjFiOTQyYjU0ZDg5MDM1ZjFiMWMzYzk0NWZjYzg0ZTRhMzllZmEyY2E1MDk1OWI0NTlhZjc0ZDIxYjYyNDJlMmY1NjUxOGY3MGU4Njc5MjU3YzA4OWQyNmMzYmI3OTI2ODdjOTIzMzU1YjJjMThlZTIxMzZkNDBjYmE0NWFjYjY0MjQwZDk2NjdmMzlkYmEzNjM5YjY1MTZkNGM0OTQ3NTczZWY0Y2VkODc2YjViMmVhMzQ4OWVhZWE1MzlmNTU3ZjU4ZGEyMDQ2OTFhNzZlMjljOTRiOGIwNTM4MjMyYzVmN2QwYmIwZmRkMDE2OTEwNDMxMzU0YjNlMWU3Y2U2MmFkNDM2OTE3Y2Q1YzMxNWE1YmU5Yjk3MWM4MGY5N2JjOWQ1YzE1NmZmZDY0ZmQ0ZTMxZGE1NjA4M2UwMmEwYzhmY2U1NTRkYjY4Njc0Y2I2MjcwMGJhOTUxNzUyYjgyOWIwM2M1NDIzMjc0MTJlZWM5Y2NjNmE1MGFkZjQ3YmJlZTE1NDQ2NjgyZGEyZmVhNDIwNDg5MzZkNzYzMDYwY2Q4ZjUzOTY1MjYxNmRmYTgwOGQ2MjNmZjc3N2I0MTEzNjUyZTc4OWVjMDI1Yjg1ZTA0ZWZlOGFkNGM5NjBiMTkwYmY0YTVhNjMyNGQ2ZjU3YzFhZDIyMDE4YzgzY2Q3ZTdlMDk3ZmM2N2I4MDI2OWMxM2I0ZGQ5NzAxY2E5OGY5ODc2OTU4YmE3Njg5YzZmNmYxMGE3MzJhNjRiZWYyMmU4Yjk4YmQzMDRkNWRiZjRmYjFmOWU0Y2E1MzlhNWM0YWE2MTljNDRkNmY1OGY4MjRiMmRiYWU3N2I3ZTgzYjU2ZGI1ZTVhYTdiMGFlOWNlMWNkMTBhNjlmMDRhODBmMTM3OWViMGM0NzRlNDc4MmRmMGUzYmE2YTE0ODIyNmJkMWE2NjJkOTVlZTJkNjdjNTIwNzMzM2NiMWQ1NDE3NmQ5ZTUwNjQ1OTQ3OTAyOWYzMWRjYWNlMjY5OTM4ZjZiYzU2Mjc4Nzg0MWRjZmUxMDFmNGRiNjBiZDY2MDE2ZTFlZWJiNmJmYmQ5Y2Q4MzA0MmRkMTM3OWE0NjRmNDA1YWFhZTNjMTE4MDc4NDhjYzRmOTVjM2NjNmZhOTJhYjRlYTUzMDU4MzRlYjg2Yjg3M2ZhMzBlZDFmN2Y0NzBiZjY2M2YxYTcwY2Y5ZTYwYWI2ODBjZDFkYmJkMDNhYzA0MzNiM2Q0YmI0ODJmOGIzNDRkNDZiM2FhOTM0Yjg2MzNmNTcwOTBiZWE1ZmNjY2E2NDg4Nzk5ODM1ZjEzM2Y4YmNmNmU4ODdjYTU5ZDE5MDc2ZDZjYTE5ZDRlMjgzNDkwNTFlMDE2YjAzZTlhOTIwZjQxMjBmYjUyM2QxMzcxZDBlMzg0NjczMTk1NDNmMTI3ZWQ5MTRiNDNhZDA2MjIyNmE1MzY1ODJkYjcyOGNjZDc2ZTk4M2YxMTc2NmE4ODYzYzJmNDI0ZjY1NTA4ZGNiMjZmZTBjNWE4MDBjMzUwOTM5NjBhMTIxOTc2ZTMwNTFlMmVmMWEyYTk5YzEyZmI3YmQ4YmMwMzdhNDM5Njg2ODA2ZWI3MjAxN2EwNzFhOTFiM2UzOWM5MGU4NmJjMzM1ZjliYjU0M2IxMjdjOTg4NjczOGNiNTM4MDZiOWNiM2MyNTk0YzdlZmZjMmE1OTIwYWE4MzRiZTY1YzQ5ZjQ3OTY0ZTg5ZWVjNzQ3MjhkZTc3MWYzZDY3NWRlOWQxZQorU0lHOiA3ZWY3MGU0YTE0OTU0ZDUwOWYxMTdmNGJkMDFiMjIwYmNjMTkyZDNiNWZkZmMzNDgyZmJiYzNiNjlkYzA2OGE3YzQ3NjFkMWJlYmMyMzE3ZDZkYjc0ZjkwNmExNTU2NDJiMGEzYzY1OTJiZGM3MmU2NGVhYzZmMjAzZmI3NGUwMgorCitUU1Q6IDc1MgorU0s6ICA2NzY5Y2M4ZTEyNTYxN2MyMmNlNTcyMzdhNGZjYTE1MDdmOTQxMjM0NjYxZGY3NDMyOGQwNGFiNjJlZjg2YzQ3CitQSzogIDA1MTEyY2E2MGJhZmY3OWI0OTE2YzFiZWUyYjkzOTBjMDQ3YWYwOGMzNWViYjNjMzgxYjk3NDhkMWRkNGM0ZmQKK01TRzogNjg1NDg5NzM5Yjk4NTY0NzQ5NTg3ZmYxYWM5NmJhNjgyZGEzMGI0MGE0ZGUyNGY1NGVjOGIwODNkZGE0NTMzMzE2MjE2N2NiM2Y5N2IyYzczMTRjZTdhM2YzZjNkMzE5Y2NjMzViYjZhOWYwMDc3ZDU2MzE2MWUyODE0NjljZjA4OTY4ZDlkY2Y3YWU1ZmZmODMwYTVkYjAwYmMzODAxMGU2NjYyZDQ5NGYzYzg2NDdjNGY3MGNlMmQyOWE5ZGE4NDYxMGEwODBiNTc1OWEzYjU4MjA1MmRmZGU2NmU0YTdmYTVmYjI3ZjA2NTA3M2ZlNzIzZDgzNzAxZDViYWMwNmNhNDNiNDZkMWU1ODA5NzY3MGMxOTRhMTNhZjhiNTczYTM3OTFhOTY2MTU1N2NiYzA0Mjc1N2FiOGFkZDBlZjdjZjRmMzU0MzVhNDIxMjM1M2ZjYjNjMjAzYzczZGJjOWQyNjg1MmQwZTkxNzMyZTM2MjFjZTgyODkyOWNkY2E0ZDkxOTIwNDg3NTE5MjJlZDIyNWVhYjI5MDBjZmY5NzFhMmEyZDM0MjQ2MzY0OGJiYjE5NDQzMTlhOGVmNmQ0M2RiNjI0ODBmYmYxZDcyNTdkMjI2OTQ1Mzk3OTNmMjVjOTI3OTE3Y2FhYjI1YzExOTNhMmQyYjIzYmI1Y2I4NTY5YWVmZmY0ZjBjYTQyM2QxOWJiZDQ2ZmM1ZWY3NTI0ZmY4Y2I3MDZmZmM0NzA3NjUwOWMwNWE4MTU4YWY3N2Y5OGRmNmE5YjVjYjMyNDRhYmE0YjVjNWY5Y2U1OTdlN2QyOWJhMDcwMTNkY2FjMTkxMWI2ZGU3MTEzYzczNmE0MDA1YzQ1OTk5Mjk3OTAxOWE0NWIyZGQ4MDJhMDc2NjA5MDllYjRjZTIwNTQwODE3MGQ4MjU0NWRhY2JhODY4NmRiZGU5MjdkYmM5YzdkOTYyMDU4ZTlhOTVlYTY2YjhkZmQzZWE0MzUzNTdhOTNjNzM5NDhjZDM1NWY2YWM2NTUyMzIzZjE3YzJhNjc4NjYyYmMwZTk3MjZhZDVhNTI1MWRkMjc2NDc0MDRjYmZlNjFjZWFhZmRjZmMwOGE0NzVmZmQ4N2NiN2Y1OTdlNTZhYzE2NzA0MDlkZDk0MDhhZTQ3NzA0MjBjNmU1ZTZkZDhlNzQ4ZmUwM2E3MmRjMTI4MDNkMDI3NzFkOTJmNDdlNmU3MTdjY2MxNDRmYzAzNzI3NWI2Zjc0NWRkMzBkYTFhNDVkMjlkYjZkOTA3M2VlZTUwMDljZmQ1NDYyNzMzNDE0YTQ5NWYzNDlkYjBiNmRiZjJjZWE5Y2NkNTcyMzhlZDVlZTkxYWQ4YmM4NjE3OWFkNTY5NWE4NWE1MDQ4NGU2MTc3NTFkZTVlZjdhN2Q4YThkYjk1MGE5OGE2YjdmN2RlZTlkNDJhNWRmNjkyZmNjZjU1NWM5NDBkYzM5Y2YyZWFjNDhjYjlkMTVjZGExNGRkMmE3ZWNjMGI3NmViZWM2OGFkNDE3N2QxMTE3ZTA3NzY2YzQ4NTkwZDQzY2E3NjYyODY4ZWI5NzkwYWMyOWY0ZjIzOTJiOWE5M2Y4OTc1OWU3YmE1NDZiOTI1YmQ4NmY4MDdkOGQxNmM3ZTYzN2RjYzY2NmU5MDU5MGJmNDMwZDk4NmE2N2YxYjBjN2MyYzk0OTMwODQ1ODY5ZWQ4ZDhhZGRlMThmYzE4ODc0NTY4ODFiNGIyNmI1M2RjYmE3YTUyNmYwZWNhMTRlOGJiNjg5ZDY2ZjBhYTFiMjUzYzNkY2ZjZjU5NTQwZDVkMmY1YWQ2MTdmNTJjMzA5MzhhNWE5MmVhMzg1MDc3ZDc1YWE0YWMwN2FmYzJiMzVmYjhjMWQ1ZTc4ZWIyOTVmYzIwZmUzN2M0MWFjMDY5NTlkM2ExNzk3ODQzYWQ3MDU2YzFiNDEyZGQwYjQ4MGFhM2IzOWJjYzIwNTg3ZDlhMGZlZjkyYzZjOTUwZWJjNWJiOGUxNDIKK1NJRzogZDM5ZDg1M2QyYzJjNWQyMWI1ODcxZWE1YTc1YzA0MTA0OGQ5M2E0N2RjNTk5YTVmZGRjMDg1NjI4NWNlNjM2ZmNkZmQ4NTY0MDgzZDA2ZmYyODRhNTI0YmM2MzNjZmRmYzNiMDM3MTYzZDY3NGNiOWJiNWJhM2JjMjViZWQwMGUKKworVFNUOiA3NTMKK1NLOiAgMWRmN2FjZmI5NjMzMDRlNTFlYzQ3MWNhZjE4MTEwMjU1Njc4M2NiN2Q5MWVhZDMwYmRjMjUzNGQwNzhhMTQ4OAorUEs6ICAwNWEzMWZmYzcwZTRlMzU2OWZjMmJlMTEwYzY0M2FkNWYwODc5MTNjN2FhNDc2ZGNkOGQ2ZTRiYzdlYzIyZDI0CitNU0c6IGIwYzNlZWI1N2YxNDYwNmFiN2FiZWFiMmVlMDU3Mzg0M2NhMjJlNmRiMmZkZjJjOTA2NGNlYTUxOThkYzU4MzBlYjE1OGRhOGUyZGFhODg4NTdhZjhiOGVlZmNjZjBjMjZjM2VjMGYzMzBlOTJjZmYwNmJjMDVhMjliZmM5OWY5NDBiNjFmM2NmYjI5NjRiMzM3MDk3YTY1NTBhM2U5YTMyOGM4NWJlNmYxNjBkMmMwYTU3ZmY2ZjFiM2M1ZmZjY2E4OTA4OTQyNWFiNmJlMDE3MmUxNzViYWY0MGNmMTJiMjRhODE1ZjcwZjI5YTNhNGNkMGE2YTEzMmYxMjAwOTc3NTJmNGJjNzQzZWRlMDhmNWYyMWQ0MmYyODJmNzY3MWY3NzgzZTI3YjJhOGUyYzE0NjkyZjFlMGU1ZGU4Mjg1NWRhYmY5OGExYTYzOTc2MDA2ZmZiZmU1ZjVhNTc5YjQ2MGUyNmQwNmJkNTQyODQyYTVmOTI2MWJiZjI2MDQ1MWQyMzIxYzUwODkzMjAxM2NjNmU5MDRmNzliNWU0Njg2ZDAzM2UxMmM3YmJkN2ViMWM5MjM3OWM1ZWMzNDFiZjY0NTdhM2YxNzI2NGE3YzI3OGIyNzUwMWVjYWVkYzM2MWViYTg0NDQ0MjM0MmI0YjEwZmE5NGQyNjU4NjUxMTZhY2Y0M2ZjYmVjOTY1ZDJhYjRiYmJlNjE0YzRmOTBhYjZiM2UwZDUzODNmYTA0OTg4YmZiYjI2MDMwN2RkZTIyZDg0MDk4YjYzMzFkMTU1MTQxYTkyN2JiNzhkNjY0YjM0MWQyZjJhOTNlMjkxY2Y3OWJhYWVjZDI2MTJmNmIxMDRmM2ZjODEzNzNhN2M2YTA0NWI1OTI0YmY5NTBjZDU0MmY3YjdhY2NlZjNhYTdkNzI1ZGUwNTMwNTVkOTUxYmQ3NjgxMTEzOTI1OTY2MzhhZTA5NzE3MGY0NDkyYmE1MGE0NjhmOGUzNDc3NjNkYjYxMmQzYzdkZTdlNTY0NTliMjZlZTAyOWM2MzA4MjdhMzUzYWVlNzNkZTY4ZDZkNzJiMjdhZmQ3NWQyMjE2NDUyNzk0NWM3MjI2ODQ0ZmFiMTViOGRjYzkxNDM0OWUzMTQxYzYxMzE2YWRjODk0ZGVkY2RjODQzOTg0ZDljN2ZlYWUzOWRiMzMyZGMzOTNlOWU4OTYxYmJkZTA3MWMzZDI4NThiM2NiNWYzM2IxNjRhMTU2MTZjNmZlMWJiYzI0YTM1ZjIxMzM2ZDI2MWM1ZDhjZjc1OWUyN2UyMmM5MTAxYzRhZWJkZTNlMTI2Y2Y2NDZjYTdiMmUwMzEyODA5NWM1OTc2YmYzZjZlNDkxYWYwZjBiNjQwYzczMTA5NjZhYzU5YzU5ZmJjNWJmZTA1NDhmODhlZTYxYWQ5ZWM0MGMxYzA2ZGQyOWQ3OTRjNDRhM2VhMjJjM2Q0NzYyNjIyZWMxZThiMzMzZTQ1MDc0ZGI5Mzc0MWZkYTE5M2M5MTFmNmRiNTg3OWU1NWVlMzZlZjYwMjYxNGFlNjRhNWNkZTlkODMwNmQyMmZiYzRhZTljODgxYTU5NGJkZTY3OTYxMjVmY2I2MjhiOWYzYjZmYjNmZmQ1MTFiMzUzZjE0NmEyNzI3MmFmZDNlNWQyOGI3N2Y1OGE2N2YxZmQyNzI4NWMyNWVjYzFjY2Y2NGUzOGQyMWYzYjlmZjIyZTAwZWU5MDA2MjllZjFhNjNlNzEzZjI1ODg4M2RkOTExZjMwYzBkMzk4Yjc0YmQ3OTcxNDliZTVlMjY5NjcyMmRhMDlkNTJkNGViZjNjNjczOTI5ZDI5OGFhYzM0Y2UwNWJlYTA4ZWE5YTQyNGU5MzQ1OWMyZWI4ZmMyMjIyYzMxY2MxM2Q4MDNiOTBhOGE3MGJjZDBhMzBjMjA5MjExZGMyY2NjODViMGJjZDQ1ODJjNjk1ZjU4ZDgwYmY2ZWM0NzFhMjUwNWY2ODg0N2E3NWY2ZTkxMWZkODcKK1NJRzogYjE4MTkzOGRlMTAxNDJmMzI0MDdiNGU3ODZjZGRkZTkzMmViMTFkYmMwYmYwZTVhYzUwOWZhZTdhNWJjYzMyOTYxZmUzNDQ4ZjkxMmM4NTAwZmM2ZGI0ZTFkMzI2MmE4M2M5ZGJlNzY5YmI4YzNhNzYxMDAwZmUzNmMwZDcxMDQKKworVFNUOiA3NTQKK1NLOiAgN2VkODdjMzZkZmRiYWU2MGM5NDBhM2IzMjVjMTlmZGVkODE0ZDc2YTU0NDgyMGEzMmYyODZhNWMwYWQ3MWQ3MgorUEs6ICAzYzRhYzUxMGIzNjIyMmMyNTJhMmRjMWFmY2I0MGZiMGViODViY2E5MDM5MTE5NmE1ODgzYWEyY2M5MTJiMmRmCitNU0c6IDYyZDMxMzkxMmFiYmIwMDZiNzc3NGE2NzM3NzE0YTM0OTk3MGNlMDQyMTExMmY0MDA0NjNkM2RiMGUyZjdmMTI4ZDdiOTY5MzlmNDNjMWU3MTA3YjUxMThhNzdjMTE5NjgzZDg2NmI3ZTNkNzJhYzIxZjZiNDI3MmI0YmU5Mjg5YjY1NTZmZTMxYjYwNTFhMGI0MmVkNWVhMGNmMzQ3Njk2ZDMwZmI4YmZmNmI4YjU3MjcxOWRlMTlhMjMxY2M4NTQ1OWE5OTBjMzc4MDFmMDgzNzE4NmNlZmJiNTUyMTU2OTY2Njk2N2NkNDI0M2Q3MzA3ZjFiMGIyNGM4ZTJiOWI2OTIzMTczMDRmYmUzZGQwYTI2MzY1MDE5MWIzNTIxNmY1MjkxNjU3M2FmOTA1MjRmOTFkYjFhOTI0NzFkNzU4YzkyZGM2ZDE0ZDFhNGIyNmY0MWI0MDQwM2NhODdkY2ZhYmRjYTQ3YjlmYzI1MzM1NzhmMTYxZjNiMDE5OWI1YzY5OGUwODA3MDRiMjFjOWU2MTUyNjlmY2QwZDQwNDM5ZWQ4YmMzYmRmYmM5YWZiNDRjMTFmYTg5Mjc1ZjBlYWFhNWQwOGZhOTU5ZDYzNzhkMGRiODk5MTBkNDhmMmQ4NmExZWJmYzVjYmYxMGViMmQ1YWFkZjUxYmJkODM0NGZmOGJiYjViOGFmZTA1YTQ1MDExYjVlNGI3MmViODY0YWQyNjNlOGEwM2E2YzdmOThhZWViMzU0ZjczMGEzMThhYTMwZmI1NmQzM2Q4MDc0OGM5OGViZWMxNTg3OGNjZjNjZTgyMmY2OWQzNDU2ODQzYzQwMGRjNTZiNDgxYTk1ZTY4OGI4YTQ3MzViZjM4NDNmNTgzM2RkYTBlZmUwOWU3MTc1YjU2N2M2NjEzODdhZmQyZWJjMDc5YTQ4ZTM0OTY3ZWM5N2I5MjdkZmE1ODE4ODhmMjMxYTk4YTdlZDMzMTAzYmZhOGU4ZjliYTY1MTM1Mjc5MDBiMzliODYyMzFkYTc5MTFhMmZjOTM1ODg4YTc1ZjExMjk1ODRhZmZmMjAyNTI0OWM0MTg4ZjA5MDUyZjg1Njg3NzA2ZDA1ZTI5OTE0NGQ0MGRlODg5OGI3YzhiMmRmZWYwYzM3MDg1NzNkOGIwNTYzYTZiZDBhNTA0YzBiNjc0NTcwMmIxYjU3MTIxYzZmMDQwYWZmMjcxOTg5NDhiYTY5YzIxMjUzYTI4ZDM5ZWJhNzI2MjE5YmVkYTFmODIwOWZiODNlOWFkYjA3YWQ0MDlmYmQ2ZDI1NTY1ODg5YWI0NTEyM2Y5ZDk0NWVjZDdkOWNhNzAyOGVjZTA5MmUzNWZiYjdjYjNmMzI4MTI2ZWZkZGFjNWQ4NTlmMmIyYzZlYjA5MDEzMzY5MGUyMGMxN2RlYWYzODgyNjg1ZjA3ZTllZDI2NTNiODAzYjliMzgzYjcwNzQ4YTFmYTkyYzg2Zjg2ZDZjNDdlYTg3YjEwYjEyZTM2M2JhNTA4MDYwZjQ3Y2UyYTJmM2I2YTNlZWZjZDRkYWNmYzcxYzQxZjQzNmZlMGMyYmMzNGQ0YmFhZDQ5NTc0ZTc0NDNjMTI2YTU4OWY2ZWY3YmNhNDQ5NTRmMGJiMjhlYzcxNTFiMDUxMWMyM2M2YmM0MmQ1ZTg1OTgzZWMxNmJiNWY1MGEzODJkNjg4MTUwYTQ5NjA5Y2JkZTU2OThlODZkY2JmMDIxMmMyMjkyMjk5ZGM0ZGNmODc0MjlmNmNkMmVlYzgwOTQ4Y2U4NjdlMjVjOTQ1ODRjZGM2NGIwOTkwMjllYjg1NGVkYzI2ZWEyMTQyMWVmZjQ4Y2Y0ZTQxZjQ5ZTJkODk0NzhkZWYwNmM0MmJlYTIyMGExMzNlNTBmNWM3NDQ2NGM3ZTczZmIxYzFhNzdjNTA3Y2Y2Y2RhODViZTQwMmI3ZTZkNmQyMWU4MTBkNmQwYjU5NzJiOWZlNzdlNTRlNzRhZWUxZjNiYmZkNmU3ZGU2YjVjMAorU0lHOiA1NzliMzgxMjRiZDA1OTFhNTk3Y2M5YTM4OTEyN2NlYWY1NTE1NjA3NzM2M2VkYjgxMWQwYjY1NTUyYWNmY2M2NzdiMjcyOTQyMTk5Y2EyNWFiNzkwZGU2ZTA4NDYwM2FkMTA1MmVjMjEwY2Y2ZmNiMTQxNzI4OTA2N2NlM2MwOAorCitUU1Q6IDc1NQorU0s6ICA2YTI5ZjgxYjhkOWFhNDhhMWIyMzM2NGVhYzhmNmE0YmRkNjA3YTg0Y2ZlOGU4OGQ5MDE3NWQ4MDY0M2E1OGE4CitQSzogIDRjM2JlM2EyYTg0MjVmZjMxYzNhMGRiNGE1MmEwY2IxNDE2Y2ViNDhjYzNlNGMyOGE0ZjIyODRhYjM0NjA3MTUKK01TRzogNzg3NmEzZjRlYjY5YmI3ZTU0ZTlmZjk1NGViZDNiMTBiOTNhNGMxYWZlYWU5MmZhMDNjMTAzY2I2MzEzYTIwMWM1YjMzYTlhNzIyMzc1NWNiNTEwZTI1ZWM1ODJiNTRlODFiODQ5NTZmNmM1M2YxZjA4YTYzYmYwYzRhMjYxYWY0NTBlNTIzZmU4ZjYxZGRiM2MwZWVhYjg3NTEwNzI2ODg4MDFiMmE0NzNiNzFhMmUzODcwOGRhNjhjMmYzNzkyNWNiMDVhMjBjNDI4M2IzYWY5N2I2ZjBiYTY1YTU0MDM1NTQzNzVlMjE1ZDllM2FhMWIwZjlmZGIwZjg0OTkyM2VkYmRhYTBhYjQ4MWM1NDVhNWRmOGY1MWQxZjY4YjIyMzUwN2VhMGVjY2ZhZWJiNWZjY2Y1ZTNkZmE2NWE0NGVlYTUwNDU2OGE4ODE4MGEwNjBiYjA2YzUxNTU3YjgxZTY2N2I0YjA0ZTMyMTBmYTRjMzc5ODc2YzQ5ZjNlNTZiZjJiZTFjZjUxOWE3NDE4MzkzZDI0MGRjOGEyMjRjNmMzOGFjMmFiOWQ4ZmFkZmM1MzYyMDMwYzc5MzBjM2NlNzc5NWIxNDdjMjZjOGEyOGM2NTM0MjlkOTBhMTczYTg2YThiMThhMDA5ZTYyYWVmNmVjYTk1ZDM5YmRiZTQ1NjQ3Nzc4YTI1MzJhNDE1YWUxOWJhZDIzMTEyOTEyNzg0MmZlMWQwZjExZmFiNGExY2YwYjE3ZTQ5OGNkNTk1MmM5MzllMDkwMDkwMjg3YjE0NDg5NWRmZjAwY2VjOGQ2YWVkYWY2MjQ4MWE0MTc4M2UwMjEwODJjZTM1MjA2M2U2MjgxMWZkOTk5OTAxMDRkOGE0NmNkY2FlZTJiYWI0NThlNTI0N2ZiMDIzZTkyMzMzMGE0MjhjN2JjZmQyMGIwOGY1MjBlODk0NmRkNjU4MzQ3MzUyYWUwYzRiZTczYzNkNWVjY2QxMTE0OWYzYWI3YjgwNTJjZmQ5NWMzNWQ0MTY0NTQ2ZjVkOGYzNzc1MTdhN2Y0MzJjMGQ1NTYzYTdiY2M3YmQxMTlkMzQyMWRmZWJhYWU4NDQ1OTliMjliMzgzYmI4ZDVkYmYxNDBkOWJkNDdhMDc4YjdhZTdjNmFhODdiMWUyOTIzNmM5ZmNmZDY1NGI3ZjgwOTc5NGNjY2IyNjE1ODhlMThkZWM2YzQwNDZhOTM0MDY3ZDBkZmEwMzc5MWQwM2Q4M2I3MThhYzRkMjRkY2U3ODVhMzAyOGRlMGM5NTkyZGJhN2M1YzU4NDUxODRhZmM5YzBkZmNmOTQwOTU4NjBmMGViODAyZWJlYTIwMTc4ZTc4YjU2NDJlNWRkNjFjMzNiMzk3NjkwNTJkOWQ4NTRkY2U5MDJmNDc2ZTIxZjk2YzY1MGI0NjNiN2JjM2QwZmYyOTk2YjY1YzU3ODMxZjhiN2MwZmI5MTVmNGRkNzIyNmFjOTU1Y2JjN2RmYjAzZjliNzU4ZGQzZTBkZmNlMmUwZTU4MGM5MWEzMGM3ODNmZjU2N2IxN2YxMmRmZDVkMzEzNzY0NmUyMDAxMWNkY2FhZTExMTAyZGM3MTY4ODZjYmYxMjNjMDk0ODhiMTczNjM2YWJkNTRlOTYyY2FlZWM5N2Q1ZWI5NDA2ODJlNzAzYjczMGY2MTU2MmNkMTRiOWU2NTYxYjVlOTNmNjBjZDBlMWU4NmQxYTFiNDcxOWM1YjUwODI0MmJkNmIyZDlhNTQ4ZjU5YmJiODc1MDc1OTY5ZWYyMDMyZjMxOTZiOGFlY2NjNDVhNDRkOWRiZGFmODc4ZWQxNmYxZDg1NWU4OTE4ZWQ2NWE0NWVlNWM3ZmEzMmExZWM2OTMyYTE1OWNmYjUwZmZjODdiZTA2ZGZjZjcyMjhhZTg4NzBjY2QzNTdmYzY1NmUzM2ZhNGI2YjhiN2QxYTcyMTU1NTNjYWJhY2M3MGEzOWM5ODBiOTcxZTUxYTE3ZWQ2MzE4YjQzYjI5YmIKK1NJRzogZGYwOWNiOWI4NzhkM2RjOWU1NDJkYmFjMjg5NDNlMjhlNDFkY2VjYjkyY2I3ZWE0NDAwOTg4NWU0NjQ5OTc0MzMzMDU2MWJhMWQzNmFlZGQ0Njc2NzVmZGNhMmJhYWE0NzAxYjZmYWQ5NzlmZDgzOWM0NzBkMTNjODJkYWE5MDUKKworVFNUOiA3NTYKK1NLOiAgZWYxMmRmNDc5ZDk4M2FkOTZlOGJhNjUzMzBiMzZkNDlhYWRiOTgzMTY0ZTFjMGI0NTJiNTYwZGVkMWQwOGQ2MAorUEs6ICBmNzYxY2YyODI2OTI3YTdjZGE4Y2IwNGZhYTJjNTlmODQyNWE4ZjdkMzk4Zjc2ZTg2NzAyMWM5NTFmMDczODA5CitNU0c6IGU1OGYzNGRhZWE3NTVhYzRlNDEzMzNkNmYwZWQwMTM1ZjdkYmNlNTAzMDliYjE5NTZiYzcxYWNiMTJjNzcwNjdhNjQ3ZmZkODZhYTU4NzBjMGMwMDA3ZThmOTk1YTIyYjg4YzQ2N2RlMjI1NDQ0NTQ0MjAxYzU1NzQ5NWUyNTNlMzMxOWNjNWNhMzc2ZDNlN2NjMWViNDY3MzQ2ZTUyYWQ5NTZhNmZhNzMzNzIwYjE3MTE3YjViNzU4NWU0ZDU1OTQwOWFhZWZhOTU1ODBmOTFlNTAyMDE1ZjQ5N2M1Y2RjYjdkNGQ1NjFmNTQ0ZWZhMzVjMWUyYTUzYjcyYmRkZWNlZWMyZDEwNTBmMTc3ZDQ4MGY2ODc0MDU2NjRkZmRkZWMwNmVlZTRiZDE0N2E5MTJmZGJmNzRmMmE5NWQxZmQxZTExMjY4Njk0Y2U0ZDRlYzRmZmZkNmRkYjMyNTRkMzYwZjIzNmZhYjRkMWExN2Y4ZDBkMWE1MTFmOTQ0NjkyZjIzOTYzOWFlMDNkNjRmYWNlYzY1Mzg0MjdhYjcxZjcxMjdmNGEyNzZmOWJjNDViYmE2MTFkZmNjZTY0NDZjYzEzOTY4OTc2YzhiYjZkNmZlMjEwNmQ3MDU5MjJkY2FjOTU2OTY2YTc2ZDQ4ZjJhZmY0Yjg2NTE0ZTM5YTY3ZTE2NDNmY2MzMjE4NTgwMjRlNjkzMTg5ODMzYzhhZDU5YjRiNjI1Mjk4ZWJhZmU2NDYyNmI0ODBmMzI2ZjEzNDA3MjNjYjNkMzgzZjRmY2NiZmMyMzdhM2Y0YzRmN2VjZjBiYTQzNmIzMmMyZmUzNTE3OWRhOTMxMTFiNDhjYzllYTI0MjAyYmRjMWIyZmI2MGE0MzE5ZGZkOTg2NDQ3MGY3M2Y1NDEzNzIwNmUwYmYwMDdmNWFlODhhODg3NDcwMDhhNjBmNDc4OWFkMTY3NzI0ZjE3OWMwMmI2M2FlZDAwMjU3M2QyOGE2YmNmODhlMDdjZThkYWVhNWQ1ZjFhY2Y0ODdiNGM1YzE2YzJiZmUxMTIzMWVhNWVhNzYzZThmMzMyY2M3M2RhMWIyZjhjMTk4ZWE4MTczZmQzM2Q0YjJhZTY5ZTVkNGQxYWFkZGRmMmZkODIxYjg1YmU0NTE1MTk2MmQxZjk5ZGY4MTMwODYxODg1MmFkN2NmNDFkNzJkYTA4YTFiMzlkZjdkOGI5OTRiNGRkZmYzN2Y5ZGZlOGYzOGNlMzBlOTEwNjFkOTVkNThmN2FlODI2YjAyMzg1MjcyZWMwOWYwMWE3YjNlNGIzOTFkMDliY2VkNjY1ZGFkNjk1MDViNDE5ZGE4NDgxYmMzNzkyYmY4YjhlN2FkNjRiNjNmMjQ1NjY2YzhjMzJmZDVjMWIxYjQ4Yzk5NTFlMWMyMWExZWI1ZjUwN2NmZjEzN2NmYjg2MmMyY2M5ODc2NmU4NzhjOTMwYTA4MzgyOGM5ZDhkYjE4YmYxNjcxNjY4NWYzOWQ2NTcyYThjYThiMmE1MTRmNzcwMDNkNGU3NWJjMTU0YWViZjE0MTAzNzc4ZjM2NWIxYzNmMDM1NDFkZGJkMDdkNmUyM2U1Njc2MmQ5NzFlYjAyOTgzZTkzYzRlMDFiYTRiOGEyMTc4OTI4YzQzMzdkMzAyZjMxYzljY2I3NWIyNDlhODJkYzk2ODIxZTk1YTAzYWI2Yjc3MGRmMmMzZGZkYmYxZmU5NzczZjhiYzFiYzViM2FmYTA0NDBiMTAyNTc4ZjNkMjEzYzhkMDE5Y2ZmMTI0Zjc1Y2U0YWNjYzhjNjY3ZmViMjdjNzUxYTYxMjAwNzQ4MTMxMDRlMGNkMDcwYzlmNWU0NTFkY2NmZjRjODBkNzExMDdjOTc1YWJmYWMwN2Q0ZDI3MGM3MjdkOGEyZmVjMzQ5YjUzMzk2OGUyNzE4OTJkMmI2MmMxMjVmYjc5NzQ2MDNjMzA1ZWEzYmZhMzBmYjYxMGZjNWEyM2ViNjhhODQwNjQ0NDM5MWE1MjEzMzcKK1NJRzogNGM4MDEwODY2ZDkxMTVmMDUyOTNiOTM0Y2FjNjgxMDRjYzJjMzQzNzU2OGNiOWQ1YzU3MGIxYThiZWU3MDY2MDMwNzU1MzcwMzNiZDcwOGE5YzlmM2QxZTI1MTlhOTE1YjFjNGFlNGNjZGRmY2YwZWQwYzA0OWQzNDJhMDJlMDIKKworVFNUOiA3NTcKK1NLOiAgZjczMTMxN2NmNWFmZmU1ODcwNGM0ZDk0OTdhZTg2MGJiZjczOWQwZmQ5NmI3YzAyZWZiNjc3N2IzYzg1OGExOQorUEs6ICBkN2Q2MzhhZWNjZTE0NjFlMzE0MjU1YWEyOWQ5YTZiNDg4YWVhMTM5NmU5NjgyNjk1YTQ3MGVmZjIzZjNlZDg0CitNU0c6IDE2ZjUxYzU5ZTlhZWZjMjZiMGRhNWUwMDg1ZWIyZTJmMWY4NTZkZWY5NzI1NzY5ZTNhZjEyZjg2MDkwNWFlMTMzZjY1MDc0ZGE3NmRiZjI1YzY3ZjYyNTdkMmRjNjZjMDVmOWIzMWFlMTc3YjY5OTI5ZmMxODNiNTg4YzUxOWJjYTE0Nzk2YTA4OTZkMjkwNWZkOTQyZDdhYjRhM2ZkOTU0MWE1NTI5ZjcyOWM1ODUxNDE5YjVmYmVmN2IxMzRkNjc2MmViOTdlOGE5NTFhOGZmNTJhYTBkN2U2NzQ0NGQwNmIwN2FhNTVlNGViOWFiODkyZjQ3YmZkMTExZGY1YjYyZjZmM2ZkMWE1ZWQ4NDEyNWZlZWJiNzdkYTYzN2MwNWQ1MjY1Y2VkMTEzZGZlODc4MmRiZDFjZWNkMmM2YzAzMmI4ZmE4ODU1YjNhZTc4ZGU3NGZhYTVhYTIwYTc2MTQ2M2MyYTMwYmU2NmJkMzhjZGVjNzVmODk1N2NiOTRjMTEzYTQ1ZDU0NmRhZjQ3NWQ4OWFhMTQ4MmY4ZDI4MDNhMjNjOTM5MjAyMDE1YTA4ZTk0YjEzMjcyOGZiZThmNjAxOWQ3MTY4YTA4YTU5MzAxNzBlNTYzOWQxMTBlNDczOWRiODVlNjFlNjQ0OTU5NDRiNTQyM2E3NGFkNWE4YTBhNTEwNjEyZWNlNjU1Y2UxODg2NDA1MTUyNWI5MDhlMGIxOTI5MGFiZThiMTE4MmM0OGM3MDBkMzUwNTE1ZmQzNDk5NTZlODA4NzMyN2YzMGI2ZmMzZjEzMWMyMTQ0YWJiM2YwZTljYTMzMTE3MmIzNTA2NGE4MjgxMWE2OGUyY2YzNmI0M2UzYWQyZThkZmE1YjFjZWY1MGUyYTYwMjkzZmM1ZjYzNWM5YTk5OThkOGMxYWQyOTZlN2M3OGZjMDU4MjAyMmQ2MzA2NzE4NmI2NWU3NjQ4MjhjYzBmNWY3NjMyZDVlZWY4NjNlNmM2ZDkwZTM4Y2NjODdkN2I3NDdmYWM4NDkxZDYzMmNmN2Y1NGI5YTllZWQxNmVlYmVjMDFiNmNjMzNkMjQ2M2Y3Zjk1MGQ4MjhiNTVlZTNmNzdjYmU5NzRmNDg5NDhlYjc1N2FlZDRlMGRiYjAwYWQ5NWVlMDEzMjM0ODZlYmEzYzhkYTg4NmVkN2Y1N2JiNDAwZDYzYTFiMmViZWFhMmU3MGFkZjAzNzllMzM5MzAwMWJhNjI2YzBkZDU0YjdmMGM5YTI1YWFlNmM5ODc1ZDRlNzYyMmYzZWQ0MjhmYjMxMjRiMjljNWRiOWE3ZWYxNmViZGRkNjgwNWYwOTVmNWU3Njk4MjNjNDNmMjYyODY4ZmY0M2UzZTA1MjU3NDZkOTQ5N2FmMTI0YTAxZGZmNjFlYzcxOGFmM2I1YmI3NDZmY2MwOGFlYmQxNjY4NGQ0NTZhZTc5MzJmZjVlZDdkNmIwZjFiMjVjN2FkZWVmNTk4YjVkNTg4Nzc1OTBhYzFkYzA1OTc1MTU2Nzk2OTk4Nzc0MDgxZTViNjY4MjJhOTRhNmE4MDJjM2EyY2Q5ZjQ4OWUxNjI4YWFmNDY1MmJlMTE4NGIwZmM3YzVlZTdmOTdjZTA4YjkyMzNiNGI4M2Q5MzY3YmU1ZjRhYWU5NzgyNTkzYTM1MjY1MTU0ZGVhNGMzNzVjMTZmMGNhZjZkYzQ1OTRkMmJkYmZjMzM3NWJiMmEwNDMyYzQ4MmYxMzk0MWNlMmFhYWI0ZDgzZTc0ZDExNmY1ZGU0YWIyOGY4ZGMzZDFjZDE5ZDI3MWU1NmUxMDM5OGJkMWRmNWM4NzBmY2JmOTNhN2QxZGYzOTM5NTQ3YzEwN2JmZDkwNjQzZjZmNTAwMWFlN2UwNjM5N2FlMWEyNzFiYjgyYTFmMzhlMDk3YmVjNjY3NDY2YjgwZWUzZTUwZGQ0ZmM5ZDVkNTRmMThmYWY3YTViNTVhODgzNDU5NGVmMGNiN2U1MDhiYmQyOGY3MWZkMzQyMzViYmZkMworU0lHOiAyYTRmZWE5OGY5MjQwMTcxYTE4MjNmMmY2OTM1MjA2MjY3MmU2YzZlNjY1MmQzODhhODc3MTRkNjQ3OTk1ZGY3NWI2ZTFlZDE3NDZhZjJhZGY0ZTgwNjEzNWQ2MDc1NGU2MGZlYTAzMjEyOGUzNWFiYzFmMTYxNTE4MTEyNWYwYgorCitUU1Q6IDc1OAorU0s6ICA0OThlNWEyMWE5YjBjMzQ3YmE4M2E0N2FjMTAwNjk0NTdmNTc4M2MyZTFlNmU0NjQwMDQ1ZTU5NGIxYzY5MzMyCitQSzogIGZiMzk0OGM4MTE5OTU2OTEwNWNjMWI3ZDljZWIzYjQxYTM0M2JiMDA1NzU1Mzg1OTJlMDk4NGY0ZjQ3MTBhYmUKK01TRzogZTRmYmVhODY0YWE1MTE5MDgyNjY0NWQyZjc3MmNiMGY5ZWRkZDMwMzQ0NzNmYTMxNzdjN2FmOWE1ZDQxZTFhNzNhZDU3ODRjNzA5NjU1OWZjZGRiN2I3Yzg1ODkxY2YyNGU4MmM1ODhkNzQ3NzRmZmNhYzBjNmI0ZWViYzJmM2ZhNDNlOWQ0NWYyNTlkNjc1NjQwMzBjZmVlYWI5MjM2YzY2NWI2NTBhZjBjOTJjODc1MTg5ZjVmOTM4MzUwNGIxNTM2MGEwYjlhNWEwMGRhMzFmNjM1Yjk2ZjZjNzNlZjQ3YjZiMDZmMDI4MTFkMWQxOWMyZThlNTM1NTBjZTIyZTQyZWM1MGExZWIyZWEyZjRjZDAzYzQ0MmQ0YWE0MzY4OTQyMzhjZWIxODM1ZmU5OWIyNDAzNThhYTA1NjJjMjQ5Njk4YTNmMTIzYzJjMTdlNTkxMDEwYmQ2ZmRmY2JkN2RiZTcwYjA0NTIwNTAyZWNlMzdhOWExZGZhMWFlMzM3MDQxN2IwMDQyMTdhNWI4ZmU5OTAzYzlhM2I5ZjRiNmQ1YzQ2YzBlZDBjNTM4Y2VjMjJmMmRmY2IyYTI4MGE0MmFkYzQ4OWNmMmUwNjI5MTJiZTk5MjhmMGMwNjA4OTFlNDMyMDkxMTc3NTI2ZjFiM2E5NjgwNjlkNGE1N2FkZTgyODU1OTgxMGFlMDM2MDY4MWZmOTkzMjlmYTBmNTllN2U1OWNkZjg3ZjlmMzNjNDBlOTcwMzFiOWY4MWQ0OGZjMTIyODZlZmJiM2Q0ZTVhNjJlZjU3YmMwZDUyZDUzM2I5OWM1MTA2YWE3OWNmZTE3OTNhOTA4NTE4NTk2YzM4MzQ4M2VjNDlmZjk4ZWM1NTdiZmZmNzQ5MGE0NmRhZjY3MTRmMmMyYzMyZjU3OTMyY2EwZDczMGYwM2YzODFkNjlkZWNkYmQ5YTdhNmQ0YWZjNjI0MDY1NDNjOGViZTkwYWM3NmU2YWZhYmRiODI0OTJhMjA2YTM2OWUwNDI4NmQzMTNlMTExMDdkOGNkOWI0YmY2OGY4MTVkYmE0ZTk5MGIwNDlkNzkyMTZkMzY1MzEzODM0MmNkMTE4YjEzMGY2NmIwMDZmM2Q4OWFjM2NmODk4MzcwNDhiMGY4YTYyZDk0MDUxZDJlYWI4OTFhYzVmNDc4ODg4NzlkODhlNTQ2Njc2ZDFkYWVlYjRkMTc1ZDNmMDRhOWQ3NGZmY2RkNDc3NDYwMTZmODRhZDBkMTEyYWZiNTlhZDEyMTg3ZTk0ZjIyNTM1ZDc3ZTllMDUxNmZhNDIxODVjMTk3YmE3NzRiMzkzMjI3Zjc0MWZlNjgyNzNmNDIzZmIwZTBlMDQ3NGJmZGFmMmRhNzhhZWIxY2Q1Yjk4YzFkYzA4MzIxMjQ3NDJhNDc1NDEyNWZjNzhiMTljNTU5YTViM2Y3NzExZTA2OGM0NDBjYzA0NjlhMWNmYTVjMTg2NGJlMTg3MzVhYThiY2Q0MDZjNDM3MWViODU3NzU0ZDkwOGJmMzc5YjkxZmNiMjRlMzQzOTZiZjg3YzE5YTA0YTgzZDU5ZGFlNzFmM2YzODM5ODI5ZDA2MjIxMzAxZWY1OTU2OTZlNzE5ZDU2Yjc5NTIwYTBlNTA5OTI5ODMzYjFkODA0YTZhMGVhNDA0MDBiYjQ1MDI4Y2U1ZDM2OTMzODgzZTE3NDA2ZTI3YTgxMDkwNTdiMWExYTVlNWRhMjEwYTY5MjE5OTRmNDY3YWI0MWFhOGYwZDg4Nzc1YThhOGViYjRlYzc3ZDdjODBlNDVhN2JiNDIyYTRjMDBjOTA1ODM5MTE0NjVlNmI1ZjBmZGNkZWFiNzI4NzFjYTU0MmUxZDFhMmNhOTRkZjRlZDJlYWJmOTBkZWQwMDQ1MjkwMzI0YTlmZmZiMzAxNDU0NzAyMDlmMzgyNjU4MDk4OTM0OTE5OWRjNWFiOGQ0YTI1ZGY3YTA1MjljZjkxNDcxZTMwODQyYWJmYWNkNDRhYjc4MWRmYzEzOTUKK1NJRzogMjg2MDgzMGNjZDFkNDFkOTUwNzY4MTZhMzk4NDI0ZjdiNzM5YzQ5ZmRhY2Y1NjU0NTI5ZGE4NWZlMzU2NTU4NGY2YWFjMjYxNGM2M2Y3NzRiNjFkYjkwODFmMTQxMGZiYThlNTBhYjNiNGMzOWRjMDYzMTQyNDNmM2YwZDhlMGYKKworVFNUOiA3NTkKK1NLOiAgYzI0Y2JmNDAxYWQwM2JkODhkY2M3YjUxOWVjZjYyNGRiMjIyM2U5OTAyODkzMDllMWU5ZjFmOGY2MTI3YzZjOQorUEs6ICBhNzQ2NjZmMzU3MjA5ZjcxODk5MDM3ODhmMTA3NTYzZTUwYzA1MWMzZDQwYzNmM2RhZDEwZDNjM2NmZjFlNjc4CitNU0c6IGU3ZmEzNTllNmEwOWIyYzU0YWFiZWQzYmJhYmZiNzI4NTNhODA1YWFiY2Y0ZDE4ZGRhZDM5ZjAzZjM0NjAxZTU1YjZjZTI2M2M5YTNjYTZhM2U1ZjE0MjVjODIxOTI4YzYxZTdmNzUwOTE5YmQzYWYzMmJjYjdiOTRkNDU5YTdhOWEzNWY2MWM5NDE3OTJlMmNjMmU0MzI3YmViMzQ0YTg0MWEwN2YzMjA2OGFmMTAyYjNkZTYxZWFiNjRlZjZkNWU2OTA2MmUzOTNhYjVlZGY2YWM5ZWY3YjM4ZDQ5YTAxYmVmMDAwM2Y0MjExNzRjODg4NTk3NWMwMTgzMjg5OWMzMTM1ZTdhODZlNWI1NWQ5YjEzMjhiYjQyODliNWM0MDIwMGY0OWU1NTIzYjNjNDYxZGM3MTc1ZTE0NjUwMjIyOTdjM2QzODBmMmIxZmVmMzljYjgyYzAwZmQxNjBmNDQ3ZWI1MTI2M2ZhMjViNGRmMGZjYTQxZWMwY2EyZWNlNzQ3MjIwMWFmODZjMzAzOGM0OWRmMDk5YTlhZWZhMWY4OGQwZWRmZDE3YzBiM2M4NjA0NjYyOWMwOTQ1NDA1NGFhMGZiMmM2OTQ5ZGQ5YzEzMDE4NWRmYTVkOTAzODkxZTA4NzQyY2QwNDI5NDAzZjU3ZjQwNTIxNThiMmY0MDFkYTQ3NTY4NTRlNGFhZjAyNDIyMWUzNzUxM2NmNjc3ZWU2YTBiMTU5ZjUwMWQzNzdlYTMyZWI3MWU3NzgwMDRmMjcyMDNjZDZkNTUzZmRhNWQ2NWUxODc5NDc3MDQ2ZjNlYTNkMWQ3NWM5ZDBkMzAzMTE0NTY3MDljYzdmNmFiNjhjN2IwZDUyYmU0MGYwNGNmNjU1NjU1MzIzMjg1MzE4MzI5ZTg0YzZhNWIwN2UwY2VlZDVmNzhmN2YxZmE2MjI5YmVmODc4NzkzYzU4NDcyOGFiZjQ1MTBiN2YyNzc5NGI1OTQyOTE2MjU0YzU4OWEwOWM4ZTkxMWYwYjk1NDIxMWE2MzY5OWE3NTIxNDdmMmE0ZTFhMTg5NTY2NDRiZWEyY2EyNjkyYmExODIyODBlMDRhNzJkZDg5YjBkMTI2ODUwMDkzOGYzNDdiZjQzZjJhMjQyZWU5YjlhNmJhYWM5YjM1MGQ2NTZmYjE5ZWM4MzRhYmUzMTY0NDQwZjJkMjA3MWZlNWUzMmM4ZTRjZjkwNTUzOWI4MzljZWVjYTI2MjBmY2IyYTA4N2Y3ODBlNmM3ZjVlMDVjNTA2ODg4MjUwZWE3Yzg1NmZiMzA5ODMyMDBhYThmNzhmYzE3NzEwNTRhZGEwZjNmYWMzOGFlMmYzM2RjNGE0Zjg1MWI3NmVkNzQwYzA5NjJhNzZhNGRlNDQwODBkYzYyMGE0NGFkOGYyM2QzNDYyYjc5MmFiM2FmYjE5Y2I4YTlmNGQ5ZTU5YWQ3NjVhNzcxODk5ZGE4Y2JlYzg5ZTUwNzdlODVjMGM5MzEyNjM3NmM5NDFiZWYxZjhiYjk5MmQzYTM1ZjI3MDcyNTg0NmZiMjUyZjhiNWZiYjc1NjdlNDA2YTFiNTNiNjE5NzY5ZTYzMmIyYjQwODdjZDRjMjc2ZTVkNThmZjJiNTZlODllZGVjNDhjZTUzYTUyZTMyOWNhMTU1OTUzOGYxMDkwMmMwMWE4NWZiYjNjZDcyZTZiODI5MWU1ZmU2MzliZWU5ZDQ3ZDM0YzI0OWE3YTA3ZDdhMTQyN2EwMWY2M2Q2MDk4NGM0NTBiZWY4MTliMTlmNjVlMjYxNGZkOWMyZmFlN2I5MjMxYTBiY2E0MTRlZDk0YTVlZTdlNjYzMjdkMmE5OWM4NDg3OGI3YmVlMDg3ZTg5MWYyNTNmYTFmZWNlMzEzNjQ4YzA2YzQ1ZGIyZDlmM2JjODU5OTkzN2I3NTJkMzhjZTUwNjNkMGVkOWE0M2VjOWQ0MDE1ODkzZDQzYmY1YjJkMWM2MDQ3ODUxMDQ2ODk2OGI3OTZmMDE1Mzc4OTU5NTQ0MTcyMmEKK1NJRzogNTgxZTZjODVhZWM2MjNiNjJiM2Q0YzliYzljNzc3NTlkNTQ5MjcyMmUyNTJkNDRjMWY4YWRhOWRhMmVjYzY3YzE3MDgzMjczYWEwOTFiYmFjMDQ2YWU2M2M3ODg5MzE1MmUxNGQ5MjZjNDFhZTM1ZjBlNmUzOTU5NDk2YjEzMDYKKworVFNUOiA3NjAKK1NLOiAgOGIzZGNkZTRhYmJmNGU2MjExYzRhNTFjNGIwMjY4MDBhOGEyYTA2MWNiMzhhMmVjYzdjOWNmMTEzZjkyNzBiZgorUEs6ICA1MTQ1MzU1ODBmMGRlMzU5YmIwZDQxZjJlZmRkYWEwNGMyZWM5NTAxMTlmMzE2MzRiMmMxYTMyZjE5NWY2OTY4CitNU0c6IDQ4MTQyNTAyN2RhNjcyYjZmMjZjOTFiODBlNTU1ODJjYWVmNDdiYjE1YTJkZThmY2E4NTIyMjE3ODUxODBiMjBhN2ZkNmQ0OTA3YjU4ODFjYzFkNmUzOWFiOTYxMmNjNzRkNjk3N2U5MTQxZjcwODdiYjI3YWIzMDg0YTI2Mjg1NTg2Zjg0MTFkYjFmNTAzYWRmNTJkY2IyNWFiOGZmZmQyZWMxNTA0YzE3NzdiOWQ2ZGQ0YTI5ZTIwMTllNWNiYWUxYjdlYjI2Zjk1YmJlMDdkOTBjMmY2ZmIwODg0YTU5YThkNThkZGU1MTE2ZWRjM2JjMzQ5ZDM3YzE2MGIyN2JlZmJlNWE1YzE4MWNlNzI1NjM5MjM1NGQyMjFiNThjNDdlYjBiYjEwOTI5ZTc0MjE3OTVmNGI3YTdjMjc1ZWRkMDhjMDg4NTY4NzcyZTk5MzIxOGRkNmYzYzJjYjRhYzY1N2EwYTNmOTFmMzEyNmI5OTFhZGY2Y2JlN2QxYjE5YjhjZDgzYmUzNjAyZWQxOGYwMzk2MzNmYmQyMzg3YmRhNjllMmNmMDM4N2Q4NjQ0ZDk3YjMwM2ZiMDA2MzlhZWVlN2FlNDYzZjZmZTFhMmM0Yjg5YWViYTNlOTA5NGMxMWZjMjkxMTRiMjAyODNmMjg3YzZkZDI4Y2IwOThkYWU4ZGFiYzQ4ZTg1YmI1OWMwZGM2ZTc4Yzk1NjYwNWNiN2NmMDY5NDIzNTNlN2EyMmU5NmY4MGEzN2E2NmY3MThkOWU0ZGI4YzUyNDUyYWEwYTM1NzcyZTgxYmEyYjMwMzIwNWI0MTJkZDJiZmMxNWNlOWI0MzZmOTlmYmIzMjEyNmI2M2NlOWNiNDMxOTlmMTU3ZDgxNzUxYTdjNDkzN2QxM2FmNGM1ODI5NTJiNWQ2MDZiNTU1YjA0NmJmMWRlMDZjZjM5YjYzYTgwMjg3MzcxODAzNjA5YTM4N2VlODBmM2E1ZDg4YjlkNjIxOTY1MGVkMTdkM2NjMTgzYjJjNzBkNWViOTRlM2JjNTJhZWE3YWE3ZjUzYmUwZTIwYjg5NzJmMTQzZDhlMjAxNjJlODAzZWRiNGFhODNkNTU1M2ZkZDU1MzM5OGIwZmExNzZiOTU5Y2JhMTQwZDZlOTgwYzkyNTFiMGZhMGI2NWU5MDg0MTdmODJmNDUxZmY5ZjJkZTZiOWNhNWUzYjVmNDFiYTQwZDA1YTU0ZjNkYWI0ODg2YWFjY2EwNWM5YzI3OTgxMzlhNGNiMzNlOTZhOTE0OTQ3NDk5MTBhMTdjZThiMzkyZmMwZmM3NzYyOTc0ZDc5ZDMzZGI5MjRiZmVmODY1NWE3MjM3NzZmZjg3Zjk1MGZkYzU2OGIxZTUyNjUzNDU0MWY1NzI3MjNiODQwNjYzYzE5MTg4YzQyNGY3YzQ4OTIzNWE0MjRiMDlmZTI1YzMwNzI3ZWExY2IwNDk1M2Q3MDZkNjhiZmUxMjEwMGVmNmY2NGMzNWM2YjhkZTY3ZWRmMGUzYWQwMTRhNDAwZTgyMWVhMzQwMjQzMjE5OTk4NjdiNDNjODJjNDUwMTg0Yjc4Zjc0MjVjZWJkNzMxOWRjNmY2NWQzNjA2NjVkZmJlN2MzNjY3NGRhYzNhNTRlOTZkYTkxMGMwMmQzNjQwNzgwYjIyZDUxMmNhMGUzY2EzNTg3Yjk0ZWE5ZmNkN2EzMWI0YWY2OWZkNjIwN2M2OGZlZDI1Zjg5OTIxYzFjZGNkZWZkMWMwOTAyMDQ0OTJiZmY5YmJiNTJlMDg4ODU4MjlkMDEyYmMyZGZiNGZlOGMzNWU1OWNkMTNiY2I4ZWFkMzQxOTNjNDBiMDNlZTRkODI1ZWUxMzIyZmY0ZWYwNzEyNzk1NzRjYmFlZTdjMDdmMTRiZTYwNmI5Y2QwZTI2MTExMWVmMjBkOTY4MWQ3NmNmNzhjODlhOGMzOTdkNmI4ZGM3NzhmNDk4NDE2NmFkNWRmM2E4MWFhZjJlNmRlMDlmNzAwMTk1YWUyYzFkNDYwOTY0NworU0lHOiA0ZjNkNGQyMjg1MDMwMTdlNzRhNmJiNThhYWZhZTM1YzNmMzdiZGVlNGZmNmJlMmU2MjQwYjUwODJmZWRkYjIyMjczNWUxMmYzMWUwNTZmYTY4NTQ0N2U1Mzg0ODAzMDA3ZWE3OTEwZTYwNWMxYjc4MTE4Y2Q1YWNjNTg3YTYwNgorCitUU1Q6IDc2MQorU0s6ICBkNGE3YTk1MjRkMzBhNjMzN2MwYTBiZTk1Y2E5MDU5MWRlOTg4ODAzOGUzZTU5ZTFiMjVhNDE4MWVmOTQ2NjI5CitQSzogIDlmYzNlYmQxMzljYzViN2MwZTA1YWY0N2JmZjY2MTliODEyODE1YmIwMWNlZWMzOTJhM2ZmMGFlYzM4MTFkMmMKK01TRzogMTcxOTgwYzAzZmRmN2E3MjdiZDViYWIzYmEwOTQ1ZTZhZDVmYWYwYTdmNTA2YTU2ZDFkMGVkZDlhMzA2YjMxNThkODQzMjY2ZDMwOTFmYzFlNDIyODFkZjk3NTU5YTIyMDFmNWJkZGRmZTY4M2QwZTEwMjhkMWQ5NWIyZjMxM2I0ODRjMzkyZmZkYjFjZGY4ODUwOGFmZGUzZDZmZDJhMTI4ODhiYWNlZGViNzlmZjNkYjQwYzlhYzBlYzNmYjkwMWIyMjg2OThhZGY4ZDg0NWZmNGZjZTEwZGU1NWQ0MjQzNmRjZTkzMDk3M2EzNGJlMDVkMTQwMWYzMzRkNGNlOGUzYTc5Mzc5OWVhZmRiOTRkMGYyYWIwOTUwYjA3OWU2NjUzZWViNDk5ZmM3NDQ3Y2NiZWVlZDhkYmQ1NDU2ODA4Y2Q3YTM4ZjlhMTVhMmE5YzczOGQ2MTMzNGNhYjhjZWViYmJmNGE0ODE0ZDk0YzYxODU5MTc4Nzg0NjA0ZTBjMjE1NDU5N2U3MmNmNTg3Y2QxZjVkYWZlNTkyMjA1MTg5MGU3NmQ2MTZkOGNkNWIwNWQ2NDc4ZDA2MjZlYTgzY2U4MDhjNDYxNDNlNmZiMDZiNDE4MmQyMjhkYThmNmQ0MTM5ZWNhNWI4ZjNiMWI5OGFmNjhjNTliNGI1YTUzYzEzNmVlOTA0MzJhY2EyYmI5MTU1MjlkMjYzNjc5NDk4MjYyMzNiNDNlNTU4MDRiNTVmYzlmMjE1ZWIwYjBiNzkyOTE0NjViYjM0ZWRhZWFkZmZhYmZlNmNmNDFiYzA3YjVkZDRkMDE0MmYwMzYxZjA1OGVlMWIzYjlmY2MxOTZlYjliMzViMTM0YmUzZDFkMjMyMDA0NDg5ZThmNjk5M2Y2MjVhNjMwMTViY2QzZjFlODc1ODgzMjQ4NThjY2ZiNzcwZGRkZDg5NGJmMjk3YmQ3NjNlZjU4MjhlMjFmNWM4OWFhOThjZmJjMWMwODJkZDdmYmFhNDMwN2JkYTQwYjRhNzU4Y2E4ZjM5ZjRlNGFhZWQzMDkwNDEyNjhkYmNmMGFmMzJkZTBkN2ZhOTBhNTIzOTYzYjc4MGI2YTkzMmNmODk0OTkwMjVmMGUwZDA0NzRjNzQzNDg5NDc1MTBlNmM1ZWM3YzllMDUwNjZlZWI0YTczNTIwYzNkOTI3YzM5YWMyNmFkNzU5NjMyNWIyY2M0N2M1ZTgyYTc3NTQ1NWI3YWYwMzEyMGIxY2ZiZmQ2ZWMzZmMwYzNiZTYwNzhiMDBjZmRmODM0MmFlOGJmMTQ3MTU5ZjUwZTlkNTY0ZTJmNjgzMDZkYWUzY2FlZGQxMDE5ZjMyM2M0NzhhMWUxZjY3NTk4ZGQ4MzRiZDFkMWE4NzMzZmQ3ZmRkOGE4NzY1MjZjNTMxNTE4OTM2ZWRiNzJkMDE2NTZiMzQ0YzdkNjVhYzFjZWUzN2NlNTk5N2JhNDhkM2Y0ZDA2NGQ4ODA1N2VmZTlhNDgyZDllMDBhYjVjYWViNWFjYTJkNjYwZTMzN2JkMTU0ODczNjU2OTc5NTZhNWU0N2IwMmFiZGMzMGQ4ZTM1M2ZlZDRlMWFjNDFkMmJjMjEyMDAyMTE0MzYzNTkzNWM2MjAxODZhNTIyYmRlNTRiZTA0NDZmYmQyZGM4OGI1NjMwNGIzYTY0MjI3ZDBhY2Q1Zjg1YTZiNjc4N2EzYWRjZjJkN2NmYzg2YzYzNGI0ZDdhYjQzMTViOTdkZTllNjY2Y2ZmM2ZmMWI4OGYzMjk1ZTdiYWI5ZTlmZDQ2ZmFmZGRiNGY1ZmFjNTFjYzAxNzAxMjljNjUxYjRlZjRkMzk1MGQ2OTQyZmYwMjBkMTY2OGE1MjhiZGUxZGE5MzZjMGVjMWFlMDllODRmODIwNTg2MWZmZjQ5MTUwMmE4NzJjODE1NGE5NmU3ZWEyNWVkYTk1NWE3ZmQyZTRiNGM3YThkMjczZjYwYmM3NGZhYjdiNDk2OGNhNmY3NWRhZWE1MDQwZjgzOWZkNTZjMmE5ODAKK1NJRzogZDE1Nzg4YmNkODhkMWQ4MWI5ZTYxZDRmZTI2ZWE0OWU2NjgxOWE1OWQyYWU0ODMyMzIxYjgxNGQ1MDYyZmFkYjg3ODA3ZGI2ODUyZTFkODI5NWUzMWEyOTFiMWU3ODVkMDFkODM0ODk1Zjg4ZjQwMGRmODgzMmMxNjA3YjViMGMKKworVFNUOiA3NjIKK1NLOiAgZDA4ZjRiYWJiYTNiNTM2NWZhZjczODc5NWM5ZGE0NWRiMTg2MmNiMjhiOTNlYjY2MzVkMTMyMGRhMGY0ZDkzNworUEs6ICBlZjMxYjQ1NGY3MzRlNTJiMzQzOGVlMmYxY2JjMzU2MzFiMTk2OWRlNTRhYzk4ZmU0NjMzZjJmNTAwYWM4NzEyCitNU0c6IGEzOTRkODg1NGNlYjVjNDNhZmVlMWE0ODkyNmJiZDY2ODVhYThhZWNmZGNmODU0MTMzMzMzOTc0ZDYyNGJmMmYxZjljMzBmMDA1YmJmMzRjZWUzYWZlMmIyOTA2MDBlZWFlNmYxZGQxMmEwYzM0NmZiYjJhYjljOTE2YzVkNWQ4MGRjZDg3ODg3ODc1YTBhYzg0NzY3ODAzOWZkY2QzYTk3OTM1NDFmNWQ2NzUxNDNhNmFiYWRjM2IxOGYwZmVmNTEwOGMxOWMyZGJmYjU5NzEwZWVmOTg2NmE0ZjNmMjk3YTA5ZWU0OGM2ODAzMDA3ZGQ2YmE4ZmQ0YmU4NDFjZmIxMGZmMDUxNGMzMGZjNGRkNDlhM2NkNDNiYmQxNmU0NjA0NDNhMTFhZmU2NDllOTAxZDYzZDg5YWY1OThhYTY4NmIyZjYwN2VjMTFmMzVlMTdhNzk4YTQyMTNiNzVhMzg3ODhkYTRmMjdjZjJiMDJjYWRkZmU2MWMzNzI5YTg3ZWM2ZTZiMDk4ZjY4ZTdhZWQyOGE4MDBjNDg0ZGZhMDEzMDQwMTIwOGY5ODZkNzkyZjU0NjM1YWRkMjg0OGUxNTEyNjJhMzY1ZWIyMWUyNzI3MTkxZTFmNzAwZjNiZjVjNzNiMGZiNGM1NDZkMDA0OGExNTVjMTg3MTc5MjBmYzA0MjVjOGM4ZmE4ZjE2N2M0M2EyNzdiYjM2NmUwYWQ3MDJjODliYzVhYTA2ZmQ0NzA5NDNiZTA1Y2I5ZTMyNTk3ODcyMjk3MTRjMzBhNGU4N2IwMGE2MzNhYWY3YmU2YjU4NzUwMTBkMTJlMTA3YzlhNTI2MWNhNTYyZDY3MDI1YmVhMGZlMjIzNDYzZWRiOTJlYTAxY2NhOTJjNDRmZjI0ZGE5ZDhhODBhNjQyMWYzZDQxMzVkNjQ3ZDFiYjBmZDk4OGM0NmM4YTE3MGNlYjRmMzNmZmY5YzBmZmI2YWJhZDEwOTJjODRkZmFkODI5MDg5OGIyNDk1MTZhMjkyZThkYTk2ZmQ1MWE4MTAwNWVlY2ZkZWJiMDU5MzMwOTkyNzdkMDczYTQ4MGMzZjllYjhhYTExOTY4YzRkOGRjMDc4N2E5YWVjM2UwNTI3YjdmZTRjMDYzNTQxMTMzNWExODExNjg5ZTg4ZjZkNWNlZDBkNDBkNmI0OGI3ZjJkOTkyOTUyOTM0ODk0MTUzMDc2YThkMzczNzJmYTAwZDljZWZjNWNmOGMyNmFkYjVhY2YzMjVhMDFjZDAwNWFiOGQ0NzRhNTJkNjcxMTQwNzhjNjUxNmFlZjgwNGJiYTE5Yjg4N2EyOGVkNWU0NmVlOTk5NWU1YWQzYTgyZmI5Y2Q5MzI4MzQzMzY4MDkyMTExNGI0ZDlhZjhmY2I2YjJiNTM1ODM5YzM2ZGU4ZGYxMmIxN2VhNmRkY2ZjYjMzMzRmZjQwZTZjZjA0Y2NkNWNhNjQwM2JhMGI2MmI0Y2I3MWJiZGU5MWQ4YmFiZGE2OTE1MmM5YzkzYWU3NjliNTUyOWM4ZDUyZmQ5YTY5MDlhMTVlMWEwNjAxYTcxNDY0OWM5NmVjOTk2YzE3MDZkMTAyMWI5NzQ4Nzk4MGQ3YjJjMmEzOWJiYjBlNDcwZDhlNDZhYzRhYTYwOWEwOTIyYzliZGMwMTYxMmVhZGVhY2NkNWZhNTIzYjJhOGQwZTYyZmZlNTYyODE2NDdkNjFmZmZiYmM4NDA1MzU3NDVkMTQ0MjU5Y2M4MTMwMGZlOTlkZmJmZmVhNmIwYjliY2QyODQ3Mzk4MmQzMmU5M2VkNDY2MzRhOTk4NzkwNmQ2ZjQ4OTM5ZDhkZmJmYjM3ZDMzYjg4OGRiNjA4Y2IyZmZlMzlhOGNmNjdiNzI2NDQ2MTFjN2QzMmE0YThkZjYxMjQ2OGNkNWU1ZDc1ZmJiYTc5ZTYzOGFhMWRhYTI4YzRlMGVlYjlhNjM3ZmY4YTA4YjY1ZjdhNzYxMjQxNGRmNzZiYzdiMGI1NmI1NTM3ZDY2NmZhY2ZkZGFmNjVhZjEKK1NJRzogYWNlYmU0Yzg2ZmE5ZmUyYzFhNWM1NzZhYzA1MDFlOGFiMGY2NDBmYTQwMzgwNTM2ZmNmOTUwNTlkNTNkNGEzNTU1ZDIyMGFjMzYzNTg3MTc1ZTRiZGUxNjNjMGQwMDY1MGExMjk2M2Q0Njc2NmM5OWJiNjJiZjc1NzNlMjg3MGMKKworVFNUOiA3NjMKK1NLOiAgOGY0NzRmODhjZjg2M2M0ODU0NTZhNWEyMTU1MjgxZmYyN2IyODQ1OWY2M2JjNGYxZGIwMGUwMDMxMDY0ZjY0OQorUEs6ICA0MzE0NGEzMjlkNzUxZDA0ZTA3MTY5Yjc3OWVlOTIwZGQwMjljYjQ0NWJmMzc2YmEzYTY2ODU3MjE4MjM0NGEzCitNU0c6IDg0MDg5MWQ5NDhlYzE5YzhjN2Y3YzlkM2M0Nzc1MzYyYTU0NGEwZWM5NzQ1N2FiNWQxNGUxMjVkYzU0YjU5YzhkYzlhNjM1ZTdiYWRiNmJlNzNjM2E1OGRjMGU5OTI5ZjJiNDIwZDgzNTZkNjE3YzNkNDFiZmU2OWI0ZTE1OGQ0YmYwOGZiMTdlNjg4ZDNjZjNjOTQ4YjY5YjM1ZjBiNmRiNjYyNzJhOGViMmJkNDEwZDY1MDlmNmM4MjhiNmEyMGQ2NTg2ZWFmODU3NjAxZWQ5ZDYwNTQ3OTljMjUzMjBlYmE4MDc3ZmUxYWUyMjY3MWIzM2ExNTg4ZmYyYjIzNWQzYzcxYTI3Y2U1YzZjNjZlMTg4ODkxOThkMTE2OTMzNjc2YmM0ZmIwNzEwZGI3ZmYxYWMyZjIwY2UzNjliZWY1NmI0M2NkMWQ0MDZjZWZkYWNmMDBmMWYzNDhiOGNhN2FhNjE0ZGIxMWEzYTY0MGZkYjU5Mzg5ZDFhNmEzOTQ3NTVjMTMzZjFiMDE5YzgzMDhjYTVhOTUxZTczYjgxMGExODBmNmZmMjViMjlkYmJjY2VmNGMxM2E5NzUwMzM5MzkwN2EyZGJhMDk2YThjZTVjODZjMGVlNmY5N2MxNDQxYjhkNjMzMWNiYTUzYjE5NjA2YjQyMWFmNTJmNjVmOWM2NjNlNjNkMzk4MjcxOGY5NDhjNmJhZTk2MWI4ZTRiZjhjZDllMzFjZDA5OTI4ZTRlODA2MTY1OTdjY2ZhZGNiOGE2MTQxNTQ5MzNiYzM3NTg5Yzg1Yzc3NmUzNGU1YTkwNjYwZjU5YTY1YjVlOTNhZDQzODg0MmY5ODJkMDJiMDQxZTZkYmRkZjE3MTA5OWY4ZGI3MDk5NTczMWEwZGI4YzQ2MjVjOWJjYTcxMDgwNTk2MWZiMTc2ZGFlODE5NzY4ZmNhZDdmZjliZmNlMzY0MDNjYTdmNzgzZTc2MTM3MjZkN2RjNTlmMjRlMjQ3Y2YxNTA2OGZmM2IxOWM3MjVmYWQ2NWVhOGU4YTdmNzIyZDUyOGM5NWZjZWYxYzBjYzc5ZDE4ZWYwN2NlZThiMDExZWVhYmQ5OTIxNjM0ZDc2YTYxYThhM2M4OTMxYjgyN2U4MTg5ODgxZjgxZjdhMTc1ZjIxZmIwMzc4YjgxODhlNThiZGIyMDE3YmVmMzkwZjE4MDBkOWQ3NGYyNjNhODFkZjhlNjc1MjJkMDkyZTc3NWQwMWUwMDRlN2Y4ZDgyODFhZTJjMmZkZjhjM2E0NDVmOWVmZjdmZGYxM2YyNjFhNzczZGRmMmRkOWNjNmJhNTU4NWQ5OTBjOTk1ZTZlYjg5ZGZmZDlmZjBhOWRiYjc2Y2U1ZTEwZGQwMjcyZDUwMDE0OTc4ODEzNjZmNWQ2MzZhOWNjZWFhMjgzMjI4ZDNhYzYxNGRiMjE3YWI4OTFkNjY4OWRiZWI5NTBlMTIwMGMzZGU1M2JjNWRhMDdmMWQzNjNkYWU5YmU2ZWMzNmVkYTZlNjg3ZDI2MjkwZjdhYmNhMjY4YTdmYTAzZDkzMTg4NjRlZGE5YTExZTNiMjYxNDA2MDU5MjBhYzEzYWRlYzFiNTU0OGM5YTdhMzIxNWE1ODc2YjdlOTQxYWZhMWNiNWQ3ZjdmMGMxMTYzMGNkNDI5ZjNiMmIzN2RjNzZjNmNiZWE0ZjNiNzI2YWE4YTVmOGI5ZjcwNWIwNWQ3ZTk0NTE5NTZmOGFmMTNjZTBhODU5NTVjNzEzNWQ2NGFkZTU0OTZlYTU0MmU3MGY4ZGE1YjU3M2FhZjEzNzA4NWRjOTZjNjkyNzA5OTY5NTY3MjY2OGIzYzdjNmY5M2M5NzdhNGU4ZTllNzcwMjk1ZjIwZDUyZGZmMTg3ZjhkYmIyNWVlN2U3NzQwMjRlYjliZTA4MTIxZWQ3NGI2ZDU0NjJmNGJiN2RjMjAwMzg3NGNhYTMxYmI3NTk1Y2Q5M2E5OWViZTFlZmY5MjhiYjVmY2I5ZTljODlkZDMxZDQ4N2ZjMGUyMGJiZTE1MAorU0lHOiBmNjFmNzgwN2MzM2UxOTZkMGZlMTgyZWZhNGQ0NTE2YTk4MTVkZGQ0NDk1MzhiYmFhNmI4NmI2OTAxYTA1ZjVkZGRhMDYwMWVjOTBmMzlmMTU1NDc3OWRiN2EwOWE2MDU3MmVmZmQ0ZDEyOGQwZDNjMmRkNGU4ODM1NzRiYzYwYgorCitUU1Q6IDc2NAorU0s6ICBlNDJiMzBkNDljNDNjNGZhZDgzZGQ1MWZkYzJhNGFjNTkwMTMyN2FkZDgwMGI2Njk3MmM4YzcwYmRlMTgwYWRjCitQSzogIGY3MzRhYWZhYTRkYmFmMzE1YzI1OGNjYThiYmMxZDRmMzRlODM2MDExMDk4NzQyMjJhYTA1NTg5ZjNhNjYzNWYKK01TRzogMGQ0OTcwNTE4NjFlMjJkOGE5YzYwZTVmN2RlNmM4OTVjYmEzMzViMmU4MmU2MDIxMThhZDgzNDJiNGQ0ZWRhYTgwZjk1ZWZiYjU5Y2ZkYTFmY2MwMjkxNzI1NzAwZThhODFiYjEyYTBiODYyM2IxZmUyODkxYjhkOThmN2E4NGM1OWZkOTJmOGE3YWRmYzA2NTA0MmY3ZjRmZDdlMWE3OWY1NWExZDRkNWU1NGUwNGU2NzJmMWM5ZTRjNGNkOGQwMDAzZjNjZDU0Yjc2ZTIxNjNkZDczN2FjYjJkZTVjMjYzYWMxMDJhNDhmNjk2YjYwY2FmOWJlMzljNjY1Y2NlMWUwZjNkNDk4NTUzZjU3OTA2MTg4OWE1ZWM1NjAzZTRkMTQxY2ZkZWRlOGU3MzE3NTcyY2ZlNzZhMGY0OGU0YWUwNjA2MmM5MTU3YjVlYWFjMzQ2ODkzODE5MmRiNGIxNjEwNWM3MzY0YTk0NDMyYjIxNWE3MTc5N2ZlZTE0YzNjOWNlMmY3NDZlZDc5MDMwMmZjNDFkYzQ5MmQzN2Q5ZWYwMjRhYjUxZGEzYmRhZjBmODFkOWE5MzBhYTBlMDI1YzA0ZmQ3MTAyNmI2YWZlYjdlZDAxYTkxYTFlZmQ2YzM5ZjVlNDQ3YzY2ZGQzOGE3NjU2YzYxM2QwMjEyNmYzNTg1ZGZhYTAyZGY5MzAyNTNmODNiZDQyMTk2NDYzZWJjNTBmOGNmYzk0OWVkMzUwMzkyZTYxY2VlYzEzMDlkYTE1YTQzMmY4MGRmZTk0OGUyNjFjZTZkODQyMWM1NDU5Y2QyMWYzZmZhMmVkYjUwMDk4MmIyYWJmYTUyZTgyNDM3Y2EyMzBmNjA5MTE2MzIwZDk4OTNlYjgyYTE0ZGY3MmI3NzM2NjY3NTE2ZmMwMTJiMjhhMDNjOWRkODhlYTQzMDhkOGNlZWE0NGNjNjA0NDU0Y2RmYTJjNzk3NjE1YmMwYTZiM2UwMDg5YWYwYTgxYmU1NGQxYjExMGExM2FiOTExYjQ1MmMzNDI4MDBjZWUyYWQyMzlhMmIxODhhN2ZhODc1ZTk0MWRhYWViY2ZjODhiNzBhZTRiMWM1NzVjZGI2ZTZkODk0NDgxMzZmNjBlZTgxYzcwM2M0NzgyMmQyYzBlNTBjN2YxZThiN2ZjN2ViZDgwNzg5ZmNkN2UwNmM3ZTUwYjVmYzhiNzc2ZThiOWE0Y2Q1OTA1YTI5MDY5YmMzYTU1OGQ3Y2FiY2UyYWY0ZjMxMDc2N2Q1YjExN2UzMDc2YjNhMGQ1MjcxNzU1NDNiMmNjZWEyOGQ1ZjcxNmZhYzMyZWZlZDNkMmUwMjc2YmU0NGE4OTU2ZmM4MjQwZjJkYjMzOTc2MTRmMmYyZGEwMjE2NjY5NGVjNmE3ZmVlYzZlY2UzOWQ3MmI2NGJiYzZiNDc2YTRmODRmOGQ4NzkzODBhMzg0ODhlNGQ2ZTU4Y2FjMDM5MGFlMjVhNWZjYjczZDQ3NDE0YjRjMjZiYmI5YjRjYzY2ZTQyNTk0YmQ1NmQ4NDFhMzYwOTIzNDkxZDExN2JlMmM2ZWIyMzIwZjNjNjE3NWU0NGUyN2I2NjUzYzVkYWM2ZmFlNzM2MDBiNjc5NjBkY2E1MGFhODU1YTg5ZTBmZjUxMWVhMDRmMTQzZTg5ZjFkYTAyODQ3NmJlNGJmNmQ5NGM4MGZmNzI2MzM5ZThiY2ZiN2RkOWY4Y2YyMDIyNTljMGFjYjYyNzZjMjgxZTM4NDdjMmNjOGQyZmJhODQ0MzhkMmQzYzYwMzFmMmE3Yjk1YzFkOGY5ZjNjYzg2YTVlZmY2NWNjMDExZGU5NWFkODk2ODU4ZTFmN2Y2ZDZiOTRiZjQ5ZGZmZjVkZTJkN2ZkNzFlZjEwODEzNDI4NWY2MWFlNDc1NDgzNDQyZGM5MGJmMDEzZmFlZGYzNzcxYzQ3YzViOTZkYzNjZjhlNDg1MTAwNjBhZDhkNDVmZDU0NjE2MjI3ODBkODY5ZDQ2MTdiNTdmZTNjYjVjYzAyMDMxNTNhYWUKK1NJRzogZmY4ZTA3NmUzNDNjOGI3M2FhNDUzYmZlZTliMmJhYjZkNWMyZjc0YzM1ZTFiYWQxZTUyYWU3NzdkNjlmNzk3NjQwODNmOTk0MzY4YTFhYzg1MWE2NDFjZDI0NzAwOGEzNGYzYjYwODk2MmY0ZGQ1MTA5YWM3MWNjZTk3OGVjMDIKKworVFNUOiA3NjUKK1NLOiAgNWNiNTE0MjE3NDgyYmY0MmY2MTFmY2VjMzZhNTI4NjgwN2MyYmRiYjU2OTY3NjkxMzUzZjU0MzEwZTFhZDU1MworUEs6ICAyODA2OTkwMDNkNWQzZTFjMDVhZDEwZmIxMDk1OWJiYzU5NWNmZTIxMzA2OTk2NWNkOGNmMzlkZDQyNmEwNTY4CitNU0c6IDJmNTcyNThjY2E3OTMyZTU4YmVkNTQ2Y2IwMDQxMTE1YmJhZDIzZDE4MzQ2ZWY3YWI1ZTMxMTAwODJiM2E5NzEyZjZjYmUxMjcwZTZkYzBjZWEzMzY0YTA2YTVmMmYyODNlYzM5YjYzMDU4ZDM0ZDU5OTc5MDcyZmNiYmQ3YTVkMGY0NDJiYmRmMDgyZDViZmUyOTk4YWViNTFiZDI2MTI3ODAzZTVjNzk2YzM4ODQzMjAwYWUyZjZlNjA1YWYzMTJmNTRmZGZmMTdlZDFkZmFhODlkMjhmYTY3ZGNlNDYyZGU0ZmUyNTI2ODIxMmIyODJlMjIyYTQ0M2UyZjMxZTI2OTA1NDE3MWFhNzNjNzE5YTg5NmNkYjdhNTM5ZGZkMWQ0Mjk5MTk3ODE5N2Q3YzRmMmQzMGE2NDFiZTM0YmYxMzgwYTRmNGRjNmQ5YjEwMTYzNjYzNmE0OTZiZWIzNTdlMzQ3YzE2NjY1MTZkZjhlYjU2MGEwZTBkMWUxNTI5Y2UzNmE2MGUwMGVkMjc4ZGEzODAyYmUxOTIzNDI5ODliYjYxMWI0ZTNjYmQ5YzM3ZThjY2UwN2VmYzEyZDI5YmVmZDdlMmYzYWRiMTNkMjhmNzA4ZDk3YjYzZTEwNzQ4MmM4NjI5NTZkN2NlOGRmYzJhZjVjYWM4ZDUxNjU5MjY3YjBiYmVkZGQ1ZWZhNDE0ZGRlYWJkMTdiMjNjYTZlODQzZmY0OWVmZmM4MmE1ZDA3ZTM2YTgzYjY3YzJhZDdlNDhlYjk5OTBiNDIxYzU1NTgwMDliZDY5MzRlODZkNTRhOGE2YWM0MDc4Nzk2ZTMwNWM3Y2M4MTBkM2Y2NmVhNmI5NTA0ZmUwYWU2NzU3YzUwNGM1NTUyNTMwYTZmOGJiYjUyNDA5YmUwNzlkOGU0YTI4YTZmZDdkYzg5MzVmOGViOTQ5OGFkYzBmMjNkMDgwN2VjODYyOTVmNDg5OGY1ZDA1ZTE1MGJkYzQzYWE4YjdiZGM4OTNhMGE2ODRjMzA2Mzg5OGI2Yzk1ZTdkNTZhNGMxMDI2OTA0MzhlOWRmOTk3NThhOTBmNDdjNjA4ZGFjYzRjYTI0MDI2NmZhYmEzNWZhMWViMmVhYWJlMjg4ZDJjMmFkNTBiNmNiZjEwN2MwMDI1NzVlOTFmZjQ3MmE0NDE3OTQwNjY3YmU4MTgwMTczODU0YzkzZGY4NDQ2NGJjZDMxMmI3YTdhZTRkYzJiOTA1OWZiZTZmODNmNTM4MDY0MjViZGZmMDMxYzZhZWQ2ZWZhZmQ5ZGU4ZGNkMGRmYWJlYThlNmZhNjgxZTk5MTkzZmIzYzY0N2U0NDIxMTJjOWEyM2Y1OTZlNjU0MTFkOGQ2YmZjMzkyMzAwNGVjZTkxZWE2ZGViODgxMTExYjFkYzI5OTQzZjU3ODk4MWVlOGMzYmNlODUyNWY3ODU2NWYzNGI4NWZmMjAwMTVmZWFlODQ2Zjk1YjE4NzAwYmM1Y2RmMTRiMmRiNmNhYzY5ODE0ZDYzZDc0YmYyMDMyOTMwM2U1Y2E5ZjA0NzMxZjY4ODFjZWM2ZDNhYmY4N2Y1ZWFjMDg3MzRmYWEzNGNmZjRkM2NkOWE0YTExZDdiMTJmNzMyNTNiNGRkMGE0MzE3OGYwZDNjMTljMGM0MGQ5ZWQ5MThkZDE3NjQ2ZjYxNmFmNzlmZGY2MTk0MjYyZjBmYTRmNzFiMzE4N2RlZGNhNDhkOWNiY2MxOTkzMWExNTE5Njc3NDU2MjU2ZWQzODM1NDU2N2MzYTY3NTcxY2RmODIxNzBhMmM4NWJkMmM1ZTY4ZTA1YTBmM2I5MzkwM2YxOTFiODk0Zjg0OTQ2Zjg5MDAwNTY4MDU0YzFjZWE5ZmQwYjhiYjU1MDE5NTA2YzU0MzQxYzI0OTMxOTg0NTQ4YmE0NThhNGQ4MTMwODk4OTZlODZhMmRjMzNkOTQ2MDQwMDNmMzU0YTdjYzk0MWM3NTRhYWVhMjQyNTNjYmU0Y2YyMTQ3ZmZlYzVlN2I5NTBjYmYyOGUyODQ0ODEKK1NJRzogZDUzZWUyZTBmMGZkNjU3YjIwNTI0NzhmZDE1ZGYxZDM4ZmUwZTkzYTU0ODNlYjRhNmU3ZGU5M2QwMmE0Y2Q1NDRkOGZkZGRjZWE4MjJiNzE1NzZlZDAyODUzZDlhNmIxNGUxYTU0OGFlZmU5MGQ5MmY4ODM3OTJiN2YxZDg2MDkKKworVFNUOiA3NjYKK1NLOiAgODdkM2JhOTVjNDBkZjgwMDY5YjE3OTdkZGY2OGU4NjZlNjZkNDZjNTFmZGU2MGU3NjhhOWRiYzVjOTJmNTdhOQorUEs6ICAyYjgxMmIyYzliNjBmZjMxOTc1YzQyOWE4NjczNmRjYzE3YTU4ZDNkYzFkYWEzNDYyM2E0YmJjYmUyY2MwNTgxCitNU0c6IGUxMTI1NmY4MmFkNzZmM2Y0YTQ5ZDdiYWQzY2VkODcxOGQzNmQyZjJiYjNkMzFiYjYxZWRkMWVjYmNlZTY2MjFmZDJlZWVkM2UzZGViNTk3YjE0OWZmNzFiODUxZjYxYzhjNjgxOWUxMzFmOWEyYWY3NjczYzNmMjA3MDJhY2ZkYzhiOGY5MDY0YjQxNWM5YTNlMzU1NjhlMzcxZDc0MGEzODEyN2MxZjI3YjM5MWI0NWQwNzA0NWFlYWYwMGE1NGU1YjdmYTU0OGFmYjVmOTZmZWI1ZjViNDRmNjBjZDE3MDdlOGZhOTU2N2Y3ODA2ZTE1ZjZhMDFhYTAyMDc3NzMzZmU3MzhiMDhmMjFlZmJjZjk4YzE5ZDViOTcwZTYxNjNlNWZlOGY0ODAwZWY5ZWQyMmEwZjliNTEyNmZmMWViMWM3ZDY1MDE5YzhiNDQwMzkxOTI3MDI5YjgxM2RhYjdjN2U4NjNkNDgyMjlmOGRmODUzOTQzNDVmY2M4OGEzMDBmNjBhOGQ1MTZkODc3YTVhM2E3ZTNjNDlhOWViMDZjZDlmMjY2NWNlMmE4OTAyMjk2MmIxZDQ5NTkyYjA5Yzc1NDNkYTgzNWNlNjNiYzlhYmI4MjIxNDU3NjJiNzFjYmUxNTAyOTJjZTVjODcwNGU1YWQzNGZiNDU5MmY5NzIwNDRlNDNlNjlmMGUxNjcyZDZjODNjZjI1YWFjNjhlZmUzZDI3YWYyYWQzNDI3NGI5ZDJiNzc3NDJkOWM2ZGZiZDU3ZjkyZmY2NGQzZTRjNjdjNTQxZDg1MDJhN2QwMzE4OTVhZjg1MzE5YTRlYWUyZDI1NDMzNTgzNWVmZjExZTdhMzY3MWE2YTBkMjFiNzJjZTFmYzJhY2JhMWE5MjAxODM4MzRiYzBhNGI3M2Y2MzlmZmNiMGY2YjgxY2Q5MjBmMmU5NDIwZDYxMjE2NmQ1NjgyYTA2MDYwZWEwYjZmYTY5NWZlY2M3NzA0YmJlNGIwNTJhYTNlYzhmNzIwZjdkNGYzMmU4YWZmODZiODBiOGMxY2MxMjc2NGEwNDg3NDAzN2MzMTAzZTlkZmVjYjhmN2FiY2IwZTA3M2IyM2U2N2NhMGE5YjFmYzcyOTkzYWJmMzFkYmMyNGE4ZmVlMDk1YjMyNTFjMjI2MjZhZjVkZDFiNmQzNGJlNWVhMDZhMDJhZTE3NmM3YjhjYjlkMDYzNTAxYmU2ZjYxMjA4Mjg4OWZkYmRjYmZhZGMzM2EwZDMxMWIwODBiOGQ2NGU0OWYxNmIxNmRkOGVkZDNiMmVkMTE5M2E3NGU1YmU1MDc2MDliMDQyNzI3Y2NmMDhhZmIwNWNjNmM1MDUyNGVmMGUyNjY0NjIxZGM4YjA1YjE1ZmZhODFhYjZmN2UzYzhhNWJiM2VhYjFmNjhlMzY1NmMxMTlkOTY5ZTQxNDRjZjMyODVhZjIzYzA0ZGJlY2MwMzhhZWZkOTE4M2M0ZTcyNDQ3YjJhYWE4MzE1ZjQ2OTZjZTZkMWVmNDI5YmEwZTVjM2Q1ZmZhN2YwNTBiZTM5YzdmNjEyZjRlMTBmOGVmMDcwZGY3MmY4YWRkYmVhZjMzMzljMWFkOGI1ZmMzOWEyZWNmMjlhODdmODJlMjlhMDExN2JhYWM2NjI1YWQ1YzgwY2ZlNzU5ZmExZGJjZmFhMTJiMzc0NDc3ZDgwYmZjZjA2Nzk2YzMwZjJjMzljZjAzMDNkMDBkYzU2YTMyZDFkMDM5NTkyZGRiMDZjMjJhYTA2ODg0MWMwYjQ2ZmQ0OGRmOGZiYjc0OTJjY2JjNTkwYzU2M2M4ZmVjY2U0MjYzYzhjNzUzOTIxOGJiOTdiMzU3MTE1MzdlOTg4MTk1ZGJmNWJjZDVjY2FmMDZmYWY1MDg0NzA5NzdhNTM1OGU2ZjAyNjA4MzQ5ZmJiOTlhMjNmYmUzNmI4Yzk3MTU1YWRjMjQ2YWQ3ZDkzYThjMjAzZjc1NDQ2YzgzYzQzNDJjMzViYTEwNGVjYzY3ZTY2OWRiNGE5NTQ2NmVlNjhmNDU4YQorU0lHOiBmYTBkMTJjZDUzMjM2YzQxMDg2YmVhOGMwY2M2MGI3NzY0YTNlZDcyYmRlYjlkMWFlNWVlYWNiNDg4MTFmZTUyOTc2MmEyYzZmMmJiMDZkOWIzMTgyMThkOTY4ZjY0NDQzNTQ5N2ExYmQwZDBkOGMxNjEyYWI4OTk2ZDk4ZDcwNworCitUU1Q6IDc2NworU0s6ICA3YzI3YWU0NzA3MmIwYzliOWMyYzM1MWYxMzI3ODk5ODk1ZWZhNTM2YzljMDY3ZDBlMGNlOGU4MmU2MjkyNzkzCitQSzogIGY5ZmViZDEyMWUxN2RiNzIyOWI1NjcwOTAyMTg0OWMzNWQ2OWZhMDhiNTA2MjBlNjY3Zjg0MmVjN2FjNzgyZGMKK01TRzogMTU0Nzg3NmE5ODhkMWJlNzE0YTQyZmI5MWNiMDM3NjNmMTkxM2E4OTJlY2JkNGRlMmNjZjgzNDRkMjA3NThiN2I2ZDAwMjU5MTAxZmU5NzIyNWIyOTdmODdiZmUyMjIwMDQzMjVkYjdmNjMyY2VhZmZiZDEzNGM5NmNiZDU3ZTk4NWJlYzg0MzRmODFhNGVlNmFmODVjM2ZhZGU1MGU0YzRlZjIwY2IwMzkzNTQ1ZTRkNGE4NmUxZmEzOWFhZjMzM2ZlNGRlZDA1NGJmYzA1MGE4OTgzYTAzZGQxZWNmMmI1ZTk1MTdiYWY5ZTExNTIxMjlhOGE3NTkzNTcxMWVkYjIwYWY1YzhjZjljNjk0YTMzY2VlNDUxY2Q5NTBiMmZmZjA4ZTMxNThjNWNmYjdiMTVjYjNlOTBkNDZmNDk0YjZhMTA4ZDg4ODhkNWVjMjlhMzNjMDY2MDIzYjQ5NzcwOWIyZDk0MDFmZWFmMmU3NGZmMjZjMTZkMzZjMzllNjUxN2ZmOTU0YmQ5OGJjZTc3MDA2NzE5ODhmNjZlODUxMDc2NDRiYTJlYTAwN2ExMzAxOGMxYzE0NGUzYzViYjgwZGI5NTExZmNjYTQxMDFiZjQ5ZjhjODBmZjNjYTdkMjk4MjU3Y2JmZWE2MjlmODNkNWUwNjYzOWQzMWY2MzlkYjRiODcyNmNiZTIyNGQ3NTg4MjliYWIxMDkwNTE3MWM5YzBlYzM3MGQ1ODAzMWVmZTRjYzVhZTcyYTQ5NWFjZmY2Y2IyZWQ5ZWVjNjU4YmExMTcwODhkZDNjNmVkMWRmOGY5Y2IxMGJkNGZlMGU1ZThhZDlmNTAzNGUzNDY1MmQ5ODY2OGRiMTVjODUzMzM5M2E2ZTllYzA4NzBjMzU2NjZjZTU0ZWZlMmJjYjQ1YzM0YTcyMzBlNmE3MDA2NzYzNDljN2IzYWJmMzFkZTdiN2IwNTIxZjg5YjMwYWM0MDM0YzJhNGJhODIxOGVlZmRmOGQyYTVjMWY4ZWQ5YjcwMTU3OWU0N2FmOGE1MjlhOTVhMWZmNjRkOGZkYjg4NWMzNjgzOWI0YzVmNmQ3MmE5OTI1N2U4Njc4ZGNjZjMxMjc1NGI5ZDQ2MTliZWVjZWI4MjU1MjZkZTYyMmJkOTY3NmZkNWYzNTc2OTNhYmFiMDc4YjllMDNhZTIxZTg3Y2ExNjFlNzc4YWY3NzA5NmVhYWMyZDJkMzJiZmVjOGVjOTRhZjc5NjVmNjFkNjhlZjY2YTQ1MjNjMWNjNzBjOTUxOWIwNzUwYjNjOWVlZDVhZWJhOWYwYTliN2VmNTJjZDRhMmRlMjliMzk1YjcwNWZhNTNmMDI4ZmE3NjYxNTlmMjBlNzVmNGQzODRlYzRmZDY2ZGYwNmU3NDRjOTlhYzg4Y2I4NDljMjg1NzU3Y2M1NTdlMmVlZGQ4Njk1OWRhMmMxYjgxZjViMjcxNWE2NTE5ODQ4OTAxYWU0Zjg5ZDA5MTNjOGRlNTdjNTNkYWRmMmU1ZTFhYTJhOWM1ZjQ2NGZjNzYxMGU4ZWY1ZjVjZGQ4MjAzYTY3YTkzYzMzYTA2ZGFiMzU4ZGM1YWUyM2VkZmVlNjMzNDI2MmY0N2IxOWIxMTNkNmNhZmVkYWMxYjQzOTAyNTM5ZDc0ZmJhMjlhYWE3YmNlNjg4ODRiNzI2MTZhMDU0MmM5ZmM2OTU0N2NkMTlhZTFkZjAxNzIzYWJkZGE2NWU5YmZhYzVkYTBkMDQyNDBjNmEyMTc1YzAwNjJlNGUxZWQ4YTViMzk3YWZjZDRkZTM4ZTg2MjA5MjcyYzdhNDI0YjVhZThkNWE0MGI0ODRjZTFiNDcwNGFmMjgzMTYwOWFkMGYzNmU5MGUwN2IyYWZlZDAxZGMwNTU3NGFkMzk3MTcyM2M1YjVjMWRkZDRmYzhiZDI2M2JjZGY1NjhhZjc1ZTczZDhhYmQxMDA4YzllYzcxMmY4MGZmYzY1YWMzNGUyYTc5MzA0ZWFkZTFkMmExZGZmZWMwZTRjOThjMzU4MjQ2OGYzMjBiZjhmNjYKK1NJRzogMzI3MTk2ZGRkNDNiYjYwMmQwNGQxOTY0Y2NjMDU5ZWQ2MjdjZWYwYTg4ZDhhZDkxYmU0OTMxZjE3YzI1MGQ1NTI5ZjU1Mjc5NGEzZTI2OWQxN2E2M2JkMzI5MzNlYjVlNTE5YzFkNTA2NTc0NzcwYWU0YTcyOTY0ZTA2ZjdkMDAKKworVFNUOiA3NjgKK1NLOiAgMDhlZGRjYjU2MjVhZTE5ZmZlN2I0OWE3ZGM4MjljODkzYzc1MzhiMDg4NWUxOGY5OGRiNzhjOGJlYjU2OWMyNgorUEs6ICA4MzQ3OGIxYzU4NTc2YTBkMTgzNGIyOGQ0NmZiODA1MTZkNmZiNmY5ZjU5MTY5NGI0NDM1MmVlY2QxZTdlODlhCitNU0c6IDAxNWIxZDNlZWIwMDkyOWVhODBiZDg2ODdkMTgyODZmMGFkZmU2NDVjY2YyNWEyMmI1MDYxOTIxZTJhMDMwZmM3NmQwMzNmYjUzZDA5MzdjNjliMzFjNWJlNDk5MTNjYTFmMmMzZGNhMTIxYjJiODdjNTliM2M4NGM3YWU1MmFmMTljNmI5ZmExYmQ2NzVmYjZkZDhiMzI5ZDU2Njg3ODZkYzc4ODNlMmQyZTg1ODZmZjQxMjhiOTBkZWU4NGJlMGFiNTRkNjgxM2Y3YThjNjEzNDc1NzE3Mzk4MTc3NWRlODRjNGRkMzllMzM2ZjhhNGVmOGRjYWRlYzk0M2U5MGQ0MjFiMjI5YzExNzg1ZmNkM2ZlOTYzMDM3NDU4ZTc2YzgyMGIzYmMyYzk0NzYwMDEyNjJiMjYxZDI4YjY1YjQ4OWQ3NmI0YmUyMzY1ZTRhODBmYTg3MWIwYTUzYjZhNWZiMjQzNjg4MjM1YWNjNWY0Nzc0ZGIxNWQ0N2I0MmRkNmM4ZDllMTJkY2IwYjVkOTgwZGFiMGYzYWQ4YTQ5NmY3NmU1MDA2YzJjYTgyNjc1ZmYxOTRjYWY4MDcwZDA0YmQzODRmOTdlNTgzZTczY2JjNGY3ZjI1NzMxMGE2MWIxYzgwNjIzMjJkY2U4MTE1ZjZkZDkzZWVlOGE5M2ZmYTVjYWI2NjM0MTE2ZTFhYjcwNWZhODZjNGE4ZWFhNTU2YzZjODlkYmNhZDAxMDQzNmJmZmU0NTE4MjI0OTFmMWVhODZjMjAyMDdlNGQxMmRmYTM2MjYxNmM1ODlmOTcxMDdlYTVkOGJkOGE3MjE1YzYwMGZmYzcwYjgwZTJhYmIxNWFjYmU0YmVjY2EyMGQ3MjE1NWFiYzNkYmU4ZTM3Y2ZkNzNmNzQyMGYyMWM5YmNkMGMzMjczNTEzYjUwNDk2NzA4NzRkNTUxOWIzYmMxZGI1MjNjMWQ3ZTkwYzE2NTk2N2M0Y2IyODQ1YTJlOGI0N2I1ODg5MjU0ZjU4YTliYmI4MjZmOTQ1MjFjZGJkMDQxNmY1ZjE4ZmY3OGEzZmQwZDdhYjg5NzkwNjI2NDQ4M2NkZTY0MmQ4ZTcwM2ZkODJlNWFlNzBhOWY5NzhmNjRlZTgwNTIwNTU0ODUwNTI4NTgxY2E5YTBiMzhjMTk2ZmQxNjZkYWU1ODc5YjNmNzJmNTljZGU5MWNjYTJjOGJmYWE0NzhiOThkNjI0Y2QzNDcyNDQwMmRlNTc4ZTU3NTQ4MjVjZTIyN2QyODcxYjQ1YTUxMTcxNDk1MTViZmY4MWE5MjMyNDZmM2I3MmQwN2JkNDU4MTI1YzcwYTE0ZDg3YzNmZDEzMzkyYTNiZGE2NTUzMDE2ZThiMmQwN2JkZTkwM2NmNjg3YjQ0NWNmZDZmNzYxNDkyZWJhNDY1MjJhZGE4NGE5NjE1ZDhkYTM0OThiMjU4MDY3MjY5Yjc4OGU1NTliNjU5ZDRiNDhhODdkODgwZDYzNzhiZTZhODg3NDZmMzViMzIyYjA0Nzg0NWFhZGM1MjNiZWFmZjMwNzBmNzIxYzNjMDcxZWFhMzE5YjdhNDdjMWIyMGQzMDBkYzAzMjE5MDliNjY5ZTU3ZDM5YTFjZTJmZGJlYWFmYWMyMTM1MGVjMmQ2ZTZkNWI4ODAxODZjMDI4YTg2MTQ3NGQ1MDc2YTRhZGM1MDMyZmVjOTE0MDc4N2MzNjgwNmVmNzljNzJlM2ExOWQ4YzhiNzBiZGFmMjA3Mjk1NTQyZDk2ODI1YTVkZTdkZmUxMDhlZjU3NDU5OWI4ZjE4NGM2M2E1YTEzMWRiMTliM2JlNTNmNjk5YzEwZmM0Y2E3YzYzZjM1MDAyMTFiMzU2YTBhYzY2NGRkZmMxYTkyNTI1OTAwMjYzOTViNDc5YmU5YTVlNDc1ODQyMzU2MGI2NWJiY2U1YmJhZGU0OTNiMTNkMDBjZjhjMWQzYjdlOTIyMTM2N2U4ZjBlYWRhYjZlNmQxYjVmZmZkZTdiMmQ3NDFmYzJjODMwMjI0ZmZmN2ZmMTRhZTVjMDcKK1NJRzogZWNlNzUzMjI5OTUxNTRiMjkyNDM3ZTQ3ZDM4YTZhNzBhZjM3ZTIwMjA3MTZmZGU0NmJmZDM5M2IzZDM2OWJkZGI1MzI1M2I1NTY2MjFjZmIzNGM4YTkwMjU0ZTEzMmZkMjhlY2QwOTg0MzM0MTNhMjFiZDNhOTc5OGNhMWYzMDkKKworVFNUOiA3NjkKK1NLOiAgMjI3Mzk0MmRiM2U1ZDMyMjFlODBkOTk0ZmQ1ZTExNjNhZjU1ZjU0NTVhOGU1MmJlODUyZGQzYWRmNzYyYjQ0MAorUEs6ICBiYzU4Njc0ZTk5NmI2ZjNlMzIyMGIzZTk0ZjAwNjdiYjBlOWIwZDk3ZDllMTA1OWNmMTM5OTdhMTkzYWMwMzJhCitNU0c6IDhhYTA1MDllNGI5MTQxODZmZmZmMDdhZWI5N2EwNGI1NDYyNzJkYTJmOWVhN2JmYTY1OWEyNGNiNTA5NjZjMjNlYjY1NDJlNGYyMmRlYmUzM2I2NTc2OTI0NWM0ZDFiNWRjZjNlNjk5YzcwYzVjMmJhYWQ5NzM0ZTlkMWVmZTU0NDhhYjcxYzg5NDZhZWNjZTUyNjhkMjZmMTljZjYwNWViM2JmMzhiMGIzMzIyNjk0YWMwZGNiNzZiMGY5NDY4NDJmNmM1YzY4ZDc2M2ZjZTc0NzAxYmQ2Yjc4ZTcxYzhjMzE0MmFkZDRlZDQ2ZTA5NjliYjk1NTViZTAzNjAyZDU2MmU0Yzg5ZjNhOTE5OTQwZTg4M2E5Njk0MDU0MmYyNzc5ZmJmOWVjMGEyODVkOWQ4YTcyMzYwMTQ2ZTNmZmJkYjc4ZDIxMDMxNjAzOGQ5NWQ2YWI3NTcxNjVhYTk0M2MwMzNlZWJiMzIxYzA1YTM5OTU2OWJjZjY2YjRkZGIwYjJlMGUzM2M0NzkzZDgxN2NjZmY1N2Y5OWIzMTg5YzYwZDVkN2I5NDE5ZDFlYmM5NDNhNzlkNGQ4YzM5NDU2NjE4MDU5NGY1NTlhODA1MjljYzFiYTI4ODc3YWY4ZjVjMDUwM2U5NDNjZDNhYWQ5OTgxMTY0NTI3MmRhZmI0OWI5YjNlNjEwN2ViNWU1MTg2ZTE2MDg3NTcxMjYwNTNkZWJjZWM3NWRkOTU2NWNlZWEwNmExMzkxYTgyMjZkMWY0NTkzNzkyMjQwY2NkOTdjNjdhNmMyYjEzNDRjMjJjOTFmNDIwMzNhZGVmNTI4NjFmMzJhNGUwNzEyYTkxNzg3OWEwYjA1MThiNTQyNGJjZGMwNTRiNDRlOTcyZWQyNGQwMTY4OWY0ZjI3ZjVmMTc2ZjBhNTc4YWIyZDNjMDg3ODI3MmU4YzA4YzIxNTgyMTE4NjU0MTI0ZGNhMzk1ODUzMzdjMTNjMTg2NTgxNGNhZjA5OTZjYWRmYTY1YmU1ODBkZWUzMjJlYmNjZGE3MDRiMjI4MDU4MjYwNDA2N2RjM2M2YjFmN2Q4YTI2OTc4YTY1Y2ZmZDFlZDMxOTZhMmIwNjVmYjNjYWE3OWU2YjViNjZjMTNkN2JkN2QwZWMxNGEzYTRkNTg0MTNmMjEyZjQ3MWVjYWFkM2E4NGFmMzVlNTk4YTg5ZmIzNDQ3ZDMzMjRmMDIwZmJmMWI3M2UyYTk4NmUwZGExNmMwMTgzYmY5MmEzOThjNDE5YTBmOWYzMDUzN2JlYTBkZjhkZjJkYzUzYzE1NGU4ZWExNjA2ODllN2JiNGQ3MjlkZDhhYjkwMDMxNDI3YWEzOTQ1ODYzYTg1ZTg5NjUyYjkzNTM4MDUxNjZmN2MwYTE4YzkzOTk1NGIyNzg3YzM3MDk0ZjkyNTEyNzIyZTUyYjBjOTc2YjllNDJhZjQwMzlkMmMwNTc4ZmYxNGZhZTFkOGMyZDEzOTZiZWIyZDZhYTZlYmQ1NTQ3NGE5MzQ5ODY3YTAzZjNhOTlkNzg3ODA2MzRhYjRiMzVjZmUxYjg3YTkxMzMyNTJhNjk4YmM0MDdkNjM4NDI4NzBlMjJjY2YzOTMzNjIwYWMwNDIzYzNkMWY2ODFkZDczYzAxZDA2YzNiOTQxNTA2Yzk4ZWVkOWI3ODY4ZTAxN2I3Zjk5NzE2YjBiNzdmMTEzMjFlNWFiMjNkYmZjZmNhOTM1MDg0NWVlMTgwNDQ0YzUwZmYwYTljOTY1ZmNiZjc3NzcwOGU0ZjM0Y2NjNjM3YzZhMDhkODU0Mzg0ZjhkM2UyNTE2OTU2YzE1MWQwMzFiYjFjYmU3MTJhNWVmOWVlMTY2MTkyMjhiZDI5NmYyYWZlNTgyZDk5NTNkNTkwZDE4YmIyMDVmNzBmODQ0YzE2YzBhMmQ4MzE4MDM3ZDQzZGQ4MGY2NWM2YTc1M2YyYThlMjdjODljODNlN2VkNzBjNTJmNzA2MmRmYmIxZjU0NGFhMjM2YjVjNzA0ZTdiMzljZTBhNTVmZDQ2NTI4MDgzY2E2MQorU0lHOiA4NzRkZGVjZTA4ZjMwYjMwZjBkNGM4YjNlZDdjNjE1MTQ5YjhhYTc0MGRhYTM0N2I1NTk1OGYxZTIxMTkwNDRmNjk1YTIxMDY5NjkwNTA2NDQ4ZDhlNzM1MmI5MDQ2NTExZDdmMzlhNTQxNWJiOWM1NzA1MGZjMTcwNTVjMzgwOAorCitUU1Q6IDc3MAorU0s6ICBkYmZhNDVhYmFhNTU0MTUyMzhiMTI4NzYzNGQ1ZWVjNDAyZGFkZjYyMmUyNzBjMDRhODkxNGNlZDI3MGE3MmJlCitQSzogIGMwZmUzMjM1ODFlYTI5Njc1MDc5N2ViNTUwOGNhMTlhNTgzYjUzN2ZhN2RmNDUyOWYwODA0YTMzYzFhNGJlZjQKK01TRzogZTI2ZThkY2I0NGU2NDFmYzIwMDgwZTk1NDc0YmQzOWQ3MTZjNWFmZTVhMWZmYjA1NmQxZWFhYjBjNDlmODU3MDcxN2RiNjQzN2EwMzIyOGE5YWQ5ZjRiYjBiMzQzYjk1ZTE2MDIzYzA4MDdlYjJhMTUxMDZhNmViMTJkYzc2NjgzZTY5ZGRhMzM2MzE0OGM1ZDdkZDk3MTNhZjZmODdhMDk0MTBlYThmNzZiNmI3OGExMTQ0MjliYzg1Zjc4NDgxMmZjYTMxYWNiMDMwOTU1MmNjMTg4YzZlOTY5NzA5M2NmNDA0YzZmMGY0YWJlOGExNjA4NjczZmRmYTVlYjc4ZjY1ZmMxZDQ5Y2RlYzQwOTRiMWJkMjM0YTQ2ZTBlYzYyYTRiNmQzMWI4Mjk2MTE1NDAxMjc4NzZiZmY0YzE3M2RlMDU4Y2Y2MTAwNGIwMTRhN2JkZjc5M2RmZDZiNjNjNTA3ZDJiMjNlMGY1NmJjMmZlNmJhZjYzN2NlZTQwZDE4OTkyMjk1ZDg0OGVmNDk4ZjhhMTYxYmQ4N2U2MGM5MWY5N2E5MWU5ZWYzZjZkOTdmMmIyZDIxMDRiYTZmZGRkNmM2ODA3MDYyNzNkYWU4N2U2ZWVjMWFmMmE0NTk4NDk4NTA2OWU4MDllOGRlMzJjMTI4ODkyOTlhMzJkNDBmMzg3NzQ1OTlhYzMzMjRiN2NiMGE0ZWE2MzJjNWY5MTBhZDg3ZjVhZGJmYTVjM2JiMjA0OTgyNzlmZDUzYzFjMjY3ZmUwYTg0NzczMDg1ZGEyNjZiMjUzY2Q4NTNkZjdlOTYzNTU4Y2IwNjg4MDc4MDk3MzQyM2M1NjRjZDBiY2Q2YjkzMzM0YzE5NTk1M2Q3Y2Q4OTlmOGE1NDdkMWExYTBhOGRlZmYxMzgxYjQzMjE1NzQ3MjhjZjcxYjk2ZmYyMDllODk5ZGFhOGYxM2Y0MWIyMzBlMTdiZmZkZmRkMmE4OTQzYWE1ZDIxZTVmMzZlMWRhMDdlZGQ2Y2VlOTJkYzQ4YjViMmE3NTgwMTQ2YTliYWY3MTM5NTBjZTY3NjI1NWE4OWUzNGY4Nzg3NTQ3ZDYyODY4ZGIxNGJhNDY1OTRkYTMxMGQ3ZTJkOWU3YzdkYmUxN2RiZDcxZWI0N2M1NmM1NzIxZGM5NmQ2OTY0NzA1NzM3OTQ4MDk0MTFjZGZhMjc2YjA1OWQwMDA3YzI1ZDc0YjJhNjdkMzgyNDZkZTExZWY0NmRmZTI2NzA5MjZmZTRiNjM2NTYyMzFiYzcyNjhiYmEyM2YzNzhlODRhNDI4YzNjYmY0NWNjNTM5Njc4ZmQ0NjdjZDMzZGQwNzU3Y2ZhMDI0ZTU0ZGExZmY1NGNlODIwMjI5Yjc3OGIxODRiZTFmYTJlODQ2OGNjMTk5NTU5NDA3MzVlYWFhODg0MDIyZjY0MThiMGIxZjI2YmNjZjE2OWYxYmNhYzdkODJhMzVhYjZlZjg0N2UxZGJhNTM3ZGNhZmY1NzI1MGE4ZDFjNzFmYWNiMTM0Y2QwNmIwMWM0NTMxOTEzMjc0NWRjNDg4ODg4YTFkNzc2MWI4NDg2YTM3ZTY5ODhhMTEyMGJjYzE2ODJkYmZjODkxNDNmYzM1YjQ2OTM1ZDhhY2Y2ZWYzYzQyZjBmNGJmNjc5ZGZkNmZmNDRiNmFkYTI2YjAxYTlmODlmMzc0YzdkMmVlNDhkZmUxYTQxMGU4OTdjZGZkOTdmNjI2ZDI2Njg1MDI4MTQ0MDA3OTNiM2IwN2M4NzIwYmJkZGM1OWNiMGY5ZGU5NjRhZTA3NWI0YWYzZGQ0YmFmNmQwZTRmOTRmMjk0ZTgxMDlkNjU3N2M0ZjhhOWM3YTVmN2Q2OTRiZjg4ZjFhNWVhN2ViYTBhNjZkYTZjNzcwYzA4YjNhYmZmYzUzNGRmMjE5ZGMzZTMzMjNiMDIyZTk2Y2M4NjAwMmIxODkxODFhMWQyYjUyN2QyNzk1MGI3ZjQyNWE0N2RhNDAxMzc3OGJkMDBiNzExMDU5MjIyMDQ5MjFlOWRjNjkyYzIzM2Y3YmFhMDQKK1NJRzogYTQ2MmE5YmFhNTZkYzBmN2E3MWJmODdiOTVmNDhkNjQyMDIyZDlkMTczM2VlMzY4Mzc3N2EzNzgyMjI4YWM4NWZjZDgzMDI2YmU0Y2E5N2EzNDViMDg0ZjUwODc0ZTkxMjRlMTZiYTE3ZGVhZDRhZDg1YzBlNTZmMTZlZjE4MDQKKworVFNUOiA3NzEKK1NLOiAgZWY2NGUxN2E1M2Y3ZmJjYWZlM2VhNDY4NzY4NGEwZGFkYjE4ZDAzNzM1YTQwYTUzYjNlZGIwNDkwN2VlNjE2MgorUEs6ICA5MTg2ZTZiYzE0Mjk2MWM0ZDNlYjM2OWU5ZTExNTc4MjkyZGU1YjZhZjUzNGQ0MjNmZjI0MGZhMjZlMjFhNzgxCitNU0c6IDY4ODI0NTZjYzNkMWFkMGRhYTliODhlZmYwOTY5ZjE1ZTk3YjQ4ZDA1MTk2N2UxMzkwODQ3MjI1ZjI2YWMyNTU1OWYwMjQ2YmY3ZDY4M2ZhMjhlY2VkYWQyMTQ5MWQ3N2JkMjY5NmZhODM1ZDBmZDExOTg4NGZlY2U5ZDgwMzY5MWIyZmQzZGUxN2VlMDg3Yzc0MDA3YTdkZTliYzY1MzRiYmZlOTVmZDMyZTk3YzM3NWY0Y2I2NTczMWFhMWU4MzQ2YmVhMjFiZTlmMmMzZGM4NzRhZjA0MzE5MDZjY2JjMmM2MDAxMjdmNGQzYjA2OWViMDkxZDE2NWVjNDUzZTY3MmU5M2NhZThiNzJmMDMzNzFkOGI4YTgyNDRlYzRlYzJlMDlmMzFkZjQwMjA2YTJiMWM4NGNhYTFiOTkzY2M2NzVmZGUxYzc5YmQ0YTdkMTU5NzRmYTI5Y2UyZTg5MmMyODk5Y2Y0ODJjM2Q5NjYzZjZkMmE3OTc4NGY0MWMxZjU4NjZkMzdjODU0NmYzNTdkNTY0ZDNjNDIxOGRmYTZkMjBiNmMyODJiNDAwZmVkZGU1MjQzOWQ0NzIyMTJjNTc2N2EzNWRhNTIwMTAzMmRhODczMDk2OGIwNzIwZThhNjA0ZGU2YzFiYWEzZjRlODk2YWMyNjE0ZmIxYWI2ZTNmNmNmMzg3YThlYjJmZjhhOTIxNDdhYjM0OTIzODQzMmU1MDlkODI5Y2I3NWIyYzE3NjVjNTEyMjE4NDhlMjVhZmZmNWYxNmU0ZGQwY2Q1YzlmNzEzYzRhYWFiMmNlODM2Zjg0OTQ1MDZiNTMwOWRjMmIwYWU3NDViYjljNDc5ODA5OGZiODY0MWQ1MjBhMDhiMDJmNzVhZDgwZGJjMmNlMjllODkwYjRkNzJhM2ZmYjJhMWNiZDUzOGUxMjI5ZjU3OWMyOWFlNjZiY2E4NWUwZmEwOGM4NjQ3YTFhYmNmZThhNDlmNWU1MDhkNGQyNDk1NTU2NjIzZDkyNmNlNDllZmE0MzUwYWFhYWI1Y2VjMmNkODg1YmUxZDYzNDc1ZTNiYWI3YzdjZGM4ZDY1NjE3M2I4ZDQ1NjAyZjRiM2QyODEyNDFkMTcxOTAzMjdiMjRjMzgzNmIxOTMxMWExOTNhZjg2YTY3NjhmMDQ4NTJhYjA2ZTY3YzhlYWQ1OTFjZGNiZjM3ODljNjEzMjA5Y2ZlMDNmNThjMDMwNWY2MzIwM2I0ODdmN2M1ZmMwOTg4NzdlYzk4YTY4OWM5ZDM1YWY4MWU4NDA3OGQ2NmZlOWU0ZWNjYmIxY2M2YzcxOTkxYzAzMDE3YmI4MTFmNDFmMDdkZTY4ZmFkMTk0MTQ2MDYxMzI0ZjNkMGVmMjE3YTU0Y2YzOGY3YTYyNWEzODg2OWY2N2QwYjc0MzFkZjkzN2NkZTM0OWMxNzVjZThiMjZhYzg4ZDM5YTQzZTI3OWIwMTg3NjRlZmE0ZGQ2MjdjYmY1OTFmNjIwOWM0YTViYjE5ZWJmYTdjNzEzNTU5MmQwMmU1MDFjYWU1ZTZiMzFjOTBlNzJmYWFiNDdmN2RjZWQyYzQ4YWRmODg0NDNiM2VkZTYwY2VmYjBkNjM3OWQ2OTIyZWM0MzdmMDg2YmFkNjIxN2Q0ZDRmZmVmMThlMjI1MjM2NjRiZjRlOWNhMWU2NWEyOGMyYTdhNjBjNWY2YmM5MDZiNzM3YzI5OTM1ZjkwOTc0NjMwNDg1NzViZWZkMWEyNTQ5ZGM0NzRiMTNlNjhhZWVjZjE2NjA0M2UwNzVhYWM1MTU1NDBmODMxYjQzMDY2Y2VmOTMyZTYzZGNkNWIzN2I2MTU3OGMzNWIwOWU0NWNjMmE4ZGVmNTcxMDNlZGZjNWY2NDk4MzFhODk2MWZlNGE0YjM3MjFmMWQ2ZGY0ZWE5ZjAzMzg4MWI0NzQzMDBlMGYxMmNiOWNkM2JhYmRjZmZiYjkxOGRkOWJiMGUyZjViMjEwMzNlNDMwMjNhMGQyZTY2ZGEzYWIwZjA3ZWU5ODhiMTY4ODljYTVkNTFhYmRjMDVmZGUKK1NJRzogZjU4ZjM5NmJhMjdlMDY3YTVmZTAwM2UzODU1ODJhZTM0OTBlMDU5NTc3MTVkNzA0ZGEwZGE2M2E2NDE5ZDJlNGY2ZGM2NmI3ZTg4ZTQyOGE2ZjIxYjllYTIwMjI5OWEzYzM2YjI0MmIwZWEwNjQ3NmZmMTJkMGI2NTgwYzA0MDMKKworVFNUOiA3NzIKK1NLOiAgMzM0N2RjNDdiYjNkMmU1ZDAyODZhYzA2YTU0ZmQ5MjFjOWU5NmI2ODk5ODYyYTU0ZTVjYzgxMTVkM2QwYmE5OQorUEs6ICBkMDBiNjQ1ZDg2ZGJiN2U1MjQ3NTdlYzc3OGM2MmI3ZTYwZDBiNjU3Njg4MzMzOGM5YjY3YzJjN2U0NTA5MjY4CitNU0c6IGUyZjQ4ZWRmOWQ2NDMzMjBhYjk5MWM4ZmY5ZjZhYTc1ZmUwNjZlN2Q4OGZmMWU0NzJhNWFjOWM1MThkZTFmYjYyOTgzYjEwMDdmNjQyMjgwOTExN2JkYmU4YTBlNTc4N2Y2NmJiMDU3ZDI3ZjEyOWEyMDBiNDA1NzZlMTcxOWNmOWU5OGZjYjcyYWY5NGJiODJlZTcwZjM3MTlhMmUyY2Q5YjY0Nzc3Y2VhNWU0NDY0NTk4NzRiNzRiZmJmNTZiMmQyNTI2NDAwNTkyYTliNDVhNWNiNzk4MDkyYjYwYTgxYjcxZDgyZjA2ODVmYWU3ZjgxMGI1MmQyMjZhZGFjN2FkOGE5MTgzZjA5ZmViZWU5ZDI1MDQ2YzBmZTMwNjY4MWFjZTJiZmY5MWIzNDgyYjBiYzMwYjIwMjFjNDM0MTY0NWQ2NzUxMzRmZTMwODFjNTFlNWM1OWU0MGIzNzVhMTQzNGY2M2I0MjZlMzA1MzBkYTkzNTNiYjJhOTQyMzIyMDQzNGFlNTlkN2I2ZmRjMTQzZjQ5ODJlYjhjZmE3NzUxYjc1YmYzZTljOTEzYzczYjc2MGIwN2QzOTUzMTBjNTlmM2I3N2ViZjEyZWQyZDdiMDM1OTBkMzMxN2FmMTdkZjQyMWU3OGIwODQ5ZmQ1NmQ5NDVjNTY5NmEwNDBmY2FhNzhhOTNlY2MxNmQ1YWMzNDQ1MDYzNjExZjMwMTNlOWEzYWUyZTFjMjcwZGQwMWE4ZmZlM2U2MTI2YmMxZTRjOTVmNjU0N2E4NjUxZjI2YjY0MDRlMzllZTRjZTc2MTg5MThmM2Y5MzdhNTI1NzNlYzI3N2I3NzFlOTFhZDA5NmZhMTVjN2EzNDBhODA5YjQ3MDMxOGE0NjM2NDIzZWI0ODg4YTEyMTYwYzQ2NjNmY2UyOTk2ZDYzODg5NmM4MzliMmM3YWQ0YjNhOWIyZTZjYjcxZTkxMmZlMzliODQzYzZlMDgzMmVjYTIyZGU5MzhiNTBhZTg2M2U0ODU4MmMxMDg1MTIzMmY3NWU1MjI1Yjg4OTZiNWE0NzBmODE4YjZmYTM5ZWI3YmI1OTAzNTc2Nzg2MTJkMjVmZTFhNDBlYTFiOWQ3MWQ4ODA5MDljMWJkNGFkMTc2Y2MwY2VmZmRjZWU3MDk5ZTc4ODJhN2M5MDdlNGJlYzc5ODMwYzY3NzFhY2I4OTk0NGJkNTRhNTE2NWIzMTg3MDkxNjkyMWIxOThhY2Q0NDMyZTdlZWQ4Y2UxZGViMzQ1YjEwN2VkYTc2MDI2NmZjYmRhM2JhNTIyOTQwMGEzMDM2MGE0NjQ1Y2E4ZGIzOGMzZDVmNGE4ZGVmMTU3YmJkYmJmMmMxZmExZGM2YjA1MTRhNGY1YTAzNjRmOTI4MzgxYjQwZjk1NTc5YTI2NDY3ZjIyODJhOGEyNTU3NTg0MDJhYzljYTgwZTg5YjljYzY4NjBhMzRiYjNmOTBjMzIzNzY1N2MyMTI5ZWE0OGM4NTJiOTI1NjllODExMDZiY2U0NjFlMjAyNDQ1NDgyMWE5MTc1OTJkMTk5MWI1YjY5ZjI3YmJlMDE5OTc3NTI4YTJmYzAxMTkyYzU2YjRhZWE4NzNjZjhjNThkZmQ3Y2I0YjBlOTE3ZTg3YTg3MDRjOTkyODIwZjk4ZDc3NDA0ZDNmMWQyMDUwYzY3NDNmNmU5M2NkYjUxYTYxYWE2ZjQ1YjM1MWIyNjQ2MWQxMzI5ZjMxNTEyNzJhYzM5NjIzNGQwZDY3YzE3OGFjZjkxZmM1MTBkODY0MjljNjlhODdmZGYxMDExNTVkYThkOTRkZTY3MjIyMzhhNmZiMTcwMTY4NjJiMTFkNTAyYzY2N2VlOWNhMGFhYmUxYzIwYjk3Nzg5ZjE4NjdhZGQ3OGI4Yjg3ZTlhYjUxOTM0YzBiNGExNmMyY2JjNGQyZWZlZGI3OWMwNWIyM2UwY2Y3ODkyMDFhYzc1ZmUwNzZkMzE1ZmNiYWMyMGJhMGQzMWU0ZGM2MTY5MjdkNmVhYjFiMWM4N2ExYzljNzc4ZTRiZDI4NTI5NTg3NAorU0lHOiA5YWI0Mjk5YjE3NzI5MzQ0NzUwYjY5ZGM2MDM3MzY4Yzk4ZjQ3YmU2MjdmYmQ5YWRmZDhkYjM5Zjk5NjRkZGI3YmM5MmQ2NzRjN2JlNzQwNzU2Mzk2YmFhZWVhY2JmNzQ5NDdiNjE5MWM2ZWQxZjVkMzJhNjNkZjM2ZDU0MjYwMQorCitUU1Q6IDc3MworU0s6ICBmZjE1ZDZlNzRlMjhlNDFkMDVhODY2M2E3MDJmMDM4ZDViODU3OGM0Mjc1ZTc3MmI3M2JhNDQwYmM1ZjU1YTA2CitQSzogIDQ3NDdlMmU5YjgyNjM3YjM4NDRiODVmNzViNTlmNzEzNmI3ZmRiMWE2MmU3YjcwZDZhYWMxN2IzYzU3NTJmMmYKK01TRzogY2U3YmY5NzI4NDRmNTE4NGFlOGVhYzg3YjEyYmU5MjAyYzcyMzk5NjFkYzIzY2Q0MWZmNTViOWJmYWFjMGNjMDZmM2YxZGVjZmE5NTcxMDk1YzhlODJiNGViNmY4YTFjNTJjOGQzZGVhYTYxYTlhYTk0ZTJlY2Q5YWI1YjgwNjNmMmRhNmQ4MDE1ZGYwYTUxNDRmYTNhNDhlMzA1YWQ5ZjQxZWFhMTFjNGQ3NDg1NDM3NGVjYmYzODJlMzAwMjU3OWE5YTI0OWVmYTFlMWNhMDRkMzM4NDQ3ZDdmMjIwNjcwM2U2Y2FiZjViYmQzMzJiNDI1NzNiY2JkM2I2ZjcxYjdjM2JmNzNkNGM3NzRhYTAxZTg2Njg0MTQzMjgyOWQwN2Y5NmUxZjYxYTIwMjE2ZDk2OGM5MGUzZWQxMWY2NjNmN2Q2MjcxNjIyZmVmY2YzYWI2OGYzNDQzMjg1MTVkNWNjZTJjZTg1ZThiZjNkMWQwOTA0MzY5MmUxZmI4YmJkZGMwN2E0YWIwYTNlZWY4Y2E2YTQyMGU3NGJmZjhkM2Q3MTU1OTZhYTgyMTY4Mjk1NGZlODk2MjlhZTI3YzFiYjAzYjZhYTA5ZjM2YTM5YTNlMzdiYTk4MTMyZjRlMjM4ODhmOWYzMzVlN2JlYWEyY2IyNzI3YWNjM2QyNzc3MzA5Yjg1Mjk1MjMyZTU0ZGE4OGViYjZmMTA1M2Q2ZGU3OWFjNjYwOTg1MmViOTNhMGEzNWJjMWE3YmRjMjJkNjI4YmM4NjEyNGQ2OTZjM2Y5ODI4YjZmOGI5YWFkZTFhNjUyMTYxNzc0ODZjMjUyYTRiNDJkOTBhNGUwZmVhMjA5MzQ4OWUyNDRkODA4ZWY3MDIxYTk3ZDU2MDhjMGFlMWQ2NjNjNzc1ZThiYjllOWE3MzE1ZjFmZWI2ZDEyOWI1YTU0MWVhNTkyOWEyYzYzM2I2ZDhjM2M0NTQ0MTcxNzk0NmNmODczZTliNGM1MTIxODAxMzVkNTRmMDUzYWJlNDRjNmRmMzliN2IwNjJlZjcyNDAxNjJjYmQwYjg1MWFmZTVmOTE1MzZhOTQ5OTQxOGU4YmZmNDk5NjQ3M2Q4MDVlYmMxYWU0OGRhMmQwYjEyOWU4ZTgyNTJmMWQ1M2MzMjhmMzJkYjI1MmRlM2JlZmJlNWYzMTI4MDEyMTE0M2E4MDA0YTRjYWU2MzFjODI3NDA5ZTUyMGUzOTRjZDBmODk1MGNkNGMzY2YzZjNkYmQ0OTUyYTRkZmU2OTg3NWY1NjUzODkwNjFhZDBhMGNlZTZiNmFmZjA5Y2VjYTI2ZDk5MGU4OTZhMmFiYTlmM2IyNjAxNWI2MzQyMzc2ODY4NGMwM2VkMGRlNmNlZTdhYzViYmRmOWY0ODVjMjI3NWNkMTJhZWZhOGY5MDdiODUxYTAyZDUxYzM0ZjEyMWI3N2YzYTU2YTllYmQxZDY1ZmZlODliZWUzODFmZjJhNzQ4MGU4OTY4Y2ZmMjVhYzhkMDRlMTQ5YTlkNTAyN2QxNGI4OGY4YWUyNjA0ZDJhYzIyYWM2N2QxM2U5MGFkYTYyMGMyMDQ2ZDI4Mjk5Mzg0ZDA5NTlmYjc2ZTIyNTg4Nzk2Y2U0MjdhYWVhZjRlMmE4YWFlYzNlODdmODRjY2QwODI1MjRjOTZkNzY2ZWVjNjZmMGJlYzNlNzk5NTU4MTQ1ZjA5ZDMzMDEzNGYxYzYzZjM3MDUzY2Q0YmRjMWMzN2ZkZTk3MjkxODU3NTUxZjUwYWM4ZTE1ZjA2YWMxYzczZGFhMWU4YzViYzkyNzdlM2Q2OWNiNDRhMzIzN2VjNTdkYmJjY2ZkZjY2ODVhZGEyMGI3NGExYmM2Yjc0YWIwNTY5MGVhZjliZDBjNGJlMTcwNDJmNWNkMzIwY2RkNjEzZGMwOGQyOWFmMzQ2YWE0MTkxY2UwYjRmODViYjJhZDdmM2JhYzczOGE5Mzc3ZWM2Yjg0MDYyY2M3MGZjYTllY2ZiZTFmNTdmZTViMmNlN2E0ZjczOWM4MWNhYmNkZTA0NjQ1MWRkNjFjZTFkYmMKK1NJRzogNDJjMTI5NWZhZmUyNmRlM2VhMzQ5MjZiZjFlZjgwYmNhZmU0N2IyMWI5MGVhZWQxOTYzNWVkNzUzOGQ3NjdjYmYzYTFlNWRlZGFhYjgyYWRmNzUxMjAzNzNlOTIzMjAyZjdmZGEwODI2Nzg0MjkyZWJhOGIyMzhiNmNiODgzMDQKKworVFNUOiA3NzQKK1NLOiAgMWVkMzdiNjEwYjhiMzU0MTdkMDRlNTlhYWFkYWM2ODhmZjgxZjFlNTA3Yzg5YjRmNDAwMTYwOTQxOTA4Y2I4YworUEs6ICA0OGU4Y2JlYjEyNDBiZGViZjBhMmQ5Mjk1M2FhODliMjgyYzQ5YWFiMmMzOGFlNjkwNDRjNTE1MTVjMzMwMGQ1CitNU0c6IDFlNjc2N2RmOTdkYjFjZmI0MDg4ZGE3YjIwMGQ5ZjU5ZWM4ZGQ0NTMzYjgzYmUzMDlmMzc2NTAwMzEwNjU3MjdjZDUyMDJjZWY0ODQyNmE1ZjNhMTFkNTBiMzgxZjhiYzIyZmYxMDE4MjczNTlmMmQwYTYxMGE0Zjc1NTQ2NGEwYzg5MWNiZDk4ZDJkY2I0MWQ5Nzc5ZDI4OGZjZjFmZWE2MmU1MjE2M2FlNjdlOTA0MjhiODYzOThlZmEyMThmMWI5ODIwODFmYzUxMzMwNWZkM2U4ZWNlN2Y5YWNiMGUxMGUwMDFkMmVkMjk5YTQ4YTgwODcwYjNkNWQ4YWI5MDA2MzA5YjMxNTkxY2FmMDU4MzM4MDA3M2EyZGI2MWY0NTI1NGFiOTY1YjVlNDY3MmM0YmZhYTg2ZTMzNmM0OTI3ODU1MjcyOWZiMmRhNzZmZmU1MDJlYzYxZTE2OTZjN2ZjOWVmMTlmN2NjMmEyNzc1YjI5NzAwY2IzODQyOTQwNjNhMTdmZWQ0ZmM2MzViYzEzMjgyYTkwZGFkMGMwMGFhZGJjZDU2OWYxNTZhODU0ZjhiYTllN2Q2MDdkMjBmMmU5ZTUzMzc5ODExNjFkODA0NjQ0NjY4ZDA2NGZhNjNkY2ViOWY1ODAxMzUzZDBhYjlmNDFkMWQ4YmRjNzZjMTNhYjJmMDIzZWEwMWFkYmM0YzgxNjhkOTM5ZTk4ZjY0ZmQ4OTE5Mzg0YWJlNzY3MDkyNjNjMGNkN2MzZWZhZGMyODAxY2M0YWJkODBhMDliYjNlZDZiYjc4Y2Q2MjA5NjljZDM1YzZhM2E1ZDAxNDg1ZWFkNGM0NWViYjZhYzZhODMyMTJhN2M3NjY3NTQyN2IyMWRhOGE3YTUwNDdiMzBhNjEwMGNkYTAyNDc2YzE4NmU2Y2U0MGQyNzY4YTk0MmM5Zjg3MzA1ZTlkMzYzYjUyNGMwMDk0YTllMmUyOWY1ODU4OTRjMGFkYmZjZDYwNjkwZmM3ZmIwYTljNzE3Y2Y0M2I0ODRmZDQ1MTUxYjEzMDQxNjljMjY5MjFkYjIyNzZlYzA1YWQyMmFkMTY2ODU0ZmQyZjk0MDg1Nzc4YzQ3MGRjNDUyZTVjZmE0YWVlMDRmYWNiNzcwNTI2ZTFmMjQ4ZDNkMTVjMjcyODBmZGZhMWZkMmMxMDQ0YmNiYzg4MWMzZDk5ODE1Yzk3ZmJlYTQ2MTEwYmUwMmRhYjc3NGYzYTYxMGU1ODAyYWJmMzZhNDk4NzVjNjgyNjM4ZTBhZTRjYzgyNzdjNWU5YWE3MzA3NDQ1ZTZiYmNiZTU0OWVlYzJhNDViMTU5N2Y3NDQ3MTA3YjYyZTJjZWUwYTVmYzUxYmVhZTNlMWZlOWJlZmIxODg1ZDliMzBmOWI0ZjFmNTYyMDZkZWUwZDY3Nzc5YzU3ZjQ4NGM4YzNjODk5YTUxNWE5ZDFjMTBmNjA1OTg0MGMxYzczZDNmMDViY2I4ODU5MGM1MmY3ZGEzOTE4MzhkYzJlNzMyMjhmMDk4MWMyODlhNGMyN2YwYzc1N2ZhZjdiM2I4OTE0NmUzM2RhZmE0OTBkOWUwZjkyNzViMGNmYTZhNzcxMGE3MzgzMTQ1OTU5NWJmNzMyMTEyYjYyZmM4NjRjYTRjODI5Nzg0YTNmMTZlZWM0ZTE4ZjkzNjkxOGE3Yjk4OTE2NjllOTMzMjIzZjc0NWZkYTU2MmJjMGE0ZTYxZTNkMTRlYTQ1ZGZjMzI3ZTJmYzBjZGZlNmYyZjk3NTQ2YzkwZmNlODJmNTIyMjkxNDgwMTExYTFlNmI5Mzg4MjcyYzBiZTI4ZDIwZWQ4NGJiODRkNDliYzE5OWNkNTk5OTQ4YjhmMjAzOWQwNzgyN2EzZjQwNzVkM2E2N2VlNTcyYTAxMzc5YTM2MjEzZmUxMTZlNzY4YjQxMTRlOGE0YjMxMzRjMzgxODk2MDc3MmQ3MjdiMGNhNmY3Yzk5N2NhOTk4NDNiN2ViMDJmZmMwMTM5NzFjYmUwZTZlNjBkNDk3NzNmMWU4YzBiMzA2MDYxMzFjYjEwYzNlMDQKK1NJRzogODYwODgxNWUxMDU5MGQ1NTA0ODc0ZDg5OTlmZDZmMDk2MjZmOTUwYmUyMGM5MTJjMjdjOWRlNmU3OWIwZmFmNzc3YTUzM2JkNWJiNjY3YWI1MTNhNDk0NThlY2Q2Nzg3YTA5ZWMwZGY2YzljOWQ2MzMzYzVlM2FlNjFlYTM3MGEKKworVFNUOiA3NzUKK1NLOiAgODQzNjQ0NzhlYzk0YmQyNWM0YmRiODJkMjk2MjI5ZTZkYWNlMmIxMzU5ZDZkMjFiZTJiM2FmY2Q3YmRhMTljNworUEs6ICBhMTgxNGY4Y2UwZmMzYjIzNjA5M2E1MGY0NjhjMTMxNjIxMWZlNmM1MmUyMzQ1ZDlmMDc2NmIzNjg4YTAzY2FkCitNU0c6IDdiYjcyOTNkZTU1ZjA1OGZiMmVjMjJiNjg3MjYwNTQzZGNhYTkwZjE0MGI5ZjQ1ZWRkZDRiYzIyZTQwOTc3ZTAwZWQzM2NkMWVmMWJiYTEzYzFkMDk5MDg1OTAwNTU2OWE4MDc2N2U0ODY0YTJjZDI4OGM4MTM5M2UwNGFkOTcxNzgyZTJiYzQ5MzEwOGNiZTgwZGFjZjBiN2I5Y2Q1MzQ5ODg0MDdhNGY5MzI3ZWM4ZTljNDA0MzI4NGVmNmVlNWEyNmE1YjQxNzc2NWQzZWFiYjQ4YTAwN2U3YzdmMzI5ODdkNzBhMTM5YWM0MTY3OGNkZjdhNTVjYjgwY2Y5ZGI1ZWFhNDVmM2RlMGZiZmJhZGZmYzQwOTk2MzcwZTQ4YjFmZjVlZGQ5Nzk0MGU3NTA3OTIxNjQ4MzZhNGE1YWMyZTNmZjUzZTQ4YTFlNTU2ZGI5YWQwYzVjMGI5NDRmNGFlZTUxOWEyYjBhODhiYjFjMWZjNzQ1NDUyNGNkNTdhYTUzNTA5ODYyNDNkMzRmYzU4ZTI0ZTgxOWVjMGI4NTQ1ZDhkZmNmNmIyMDMxMTQ0MWQzYTM1ZDNlNzFiM2UzZWNkNzg4NGRkYTg0MzNhNDA1ZTNkOTk2OTAwMGM4MjBhODliOTVkMTk3ODQxZDk4YWU3MzRhMmU4MWRhZjZhN2RjZjU2Y2IyZmMyNmYyMTY1YTVmNDJiODZjN2U5ZTViMTExNjE3MDBhMWFiOTgzMWYzZmFlNThlMTQyMDhiZTFiZjMzYjU4ZWNjZTgxYjBjNmI3ZTAyZjg4YWRmOWFiMDMwMjYzZTJjYzliNmUzM2ViY2EzZjQ5NTQ5MmUzMmJmZTM3MjUzN2RlNmM2Yjg3NjQ0ODI4Zjc0OTQyYTAyYjAwN2YxNGMzZmM1ZGJkZTc2MzMzZDM2ZDA3NjMxYjdhOTkyNGY3MTc1NTAwNDA2OTc5MjNmYTdiOTU0NmJmYjAyMTcwMjRlYTNmMjUyYjUxNWI1ZDY0YTYyYzQ4ZTAyN2NlZjY3NTBiZWRhNDlhMDI0NDcwMzliMjUwYTBiZGEwN2RjMDYyNDkxYTY2MmUyNjg3NGM4ZDAwZjgwZTZjZmM4YjMwZjJjM2JmNzcyMGI1N2YyNjE1ZmM0NzhmZWZhYTZkMzE3MDViNDNjNWE1NGY3NTg2NjZiMzAyYThkMzQ5NTMxMzE5NDFiNzk1NzczMDQ3Njc5NGQwYmQ5ZDJkZmE3MmZkMjAzZjIyZGY1ZWM2YmJhYWNlOGI5Mzk0YmViZGFlYWE1NjE0NjEwMTFiNGZjYTYxODVjOWEzODI4M2Y1NDAzZmRhYzMyNmQxZjczNGM2YTVkZWQ2NzI0ZDlmMzg0YWViZDZjYWJmY2JlYzEyYWJhYjk4MjBkMDgwNzMyNTE1ZTA1MDBjZjVkM2UyZjllZjgwYTRkNzY0NmE3ZGE5ZWZmNDEwZjUwN2M2OTg3M2IzMmQ1NDBlYzMyYjI4M2VmMzE3OWE0YzYzMmIzNjY1NzZkZmYwNThmYWY4YzhjNzBiYzY5YmU4MDg5ODJlYzE0OTdhZTg5MTFiMDAxNjVhNjY2OTVmNGQzYjk4N2U3MzkwYjVjZjg3OGUzNWU2NzY1NDEyODVlNGUxM2RmYWViMmYzNjhjYjUxMWI3NzhiMTA2YTQyODc3OGExYjhmMmE3ZDJlMDkzNTE5YmM5YjUxODhlMzhjNjc5M2U5NmJkMGQzMGUyYTNkYjllZTE0NjhjM2RjODdjYzM2NWM4MTBmOWRiZGYwMWE0YjUxNDIxZjZmYzhkZmRhM2ExNmUyZGE3Y2E3MTU5YjY4NmE1ZTE2NzMzODkzNzg4MmZmNzE1ZDNlNzUwZDk1OGZjOWU0YjFmMDU1MzEyOTI5OWFhODQzMDE4M2U1MDZjZDdmMmIyNzkwNzZlMGUxY2NhOTc0OWNmMTIzY2U1MDdmZTA3ZGRiYmM0ZGNjYTZjZGI5ZWYxYjgzM2Y2MWQ0YmZmMDBiZWMwMTIxNThmNDMyY2ViNzViNGYyZWRiMWJiODRlNWViYjkyNTllMDlmOTYyNWNlMworU0lHOiBiNGMyMzIxYWRlM2MxOWVkNGVkNGM2MzlkNWE0ZDZmMmJlOGUyZmIxM2JiN2JkNjI1YWQ2ZGM4N2UyYzIwZjkzYWQ2YmU3YjdlNDI3MTFhODc4ZGI5ZDc2MDU0YmZkN2JjMjVlMzc3NGE5M2RhMTU0M2M5YjRmNjYzM2IwYmUwOQorCitUU1Q6IDc3NgorU0s6ICAwMGRiMzdhZDJhMTk1ZjA4YTA4NDQwZDA1OTI1OWU1MzlmZWI0MGI0NzQ5MjgyNTVlN2M5NGViYzNiMDUwMzhjCitQSzogIDA0Zjg4YmY2MzllMGY3MWE1N2QwZDBhZmZmNWZlOTdkZGUzODA5ZmYyOGVjNjhlYjZmYzQyM2Y0ZmFmZjQzOTAKK01TRzogNWE5NGY3MjlkMzBkZDhhYWUyYTVjOGMyODU0N2JmNDUwNjI5NWRjNjFiZmVhZDk3Mjc3NDYwODJkNDNiMGY4MTE0YzhjMThjNWVkYWYyZmVjN2NhZTgxOTM1NjMzOGYwYmYxMTVhMTdiMDM4YWNmZDdjOTZiYTYyNjJjYWJkNTcxMGZjMGVmYjQzZDEzZGY0MDY1YmVjYmYxYjllMjc5YzAzZWM5YmJmZWQ1NGQ5YTEzZmUwNmE1NWEzYmQwNWM4MDc4NThiNDFlMThkYmRlMTNiMDkwN2Q0MDM0MTMyMjYyZDljMmY0ZDJkMzc2ZTE2MDlhZDI4MGRlMjBiYTcwOTg0NGRiZDEyOTUwMjU3ZjFiMDdlZjhjYzMzMzdjMDFhNzAyNjkzZmI0ZDkyZDA0N2U2OThjM2E2ZGQ0NmM0YTkyYTEwZDRjNzgwZTUyZTUwMjVlMDlkNTY1MzVkN2VlYjlmZTdmMDMzZTZlOTI2MGE2OGY5ZDU0YjZmMzdjYzA2OTY1NmUzYmNlZTA2OTIyYjM0OTY4MWE4ZTc3NTFjZGVjYmUxZWNiNjYzZmJjNmY3Yzg2MWY4NTNkYzMxMGYzM2RlZmE5OGVlMzQzYTY4NjMyZWMyMmNhZmVjYjdmMzIxMmY4MWU3MGI3MTg0M2I5ZmU4Yzg2YTY4YjVjODZmMDMyMmQzNDhhNzZkYTdmMWJhMGNhM2NkN2I2ZmQxNWZmODkyOTJiM2Y2MzZjZDA4Y2Y2MjVjNzRkNTEwMmNhYmI1NzFhM2RiYTg2YTFjOTJmNDFjNzIwM2I0NDk0MmY1YTI0NjI1YWMzN2Q3N2U0OWE1N2YxMTgyMzg2OTlkODA3YzI1MGQ1YmY0NmY3YTNjZWM1Nzc5YTZlNWFlMWE2Y2ExNjBjZmYzN2ZiM2I3ODM4OGZlOWMwMzBjNDBlNzE1NDYwMTA4MWE1MTdmYzBhYTE4MDJjZDNiODQ1Yjk0NmVmZTk0YWE4YjllMDNmNjhhODBkZWQwZGZiZmFkNGRhZWU0MGZhODM4YzEzMzg0MWFlOGEzY2UwZDc5ZmE4YTJiOTQzNGJhYzVlMWRhNmUwYzcxOTNlOGRlYTQzNWEwM2E4NWY3NjE4NGY3ZWJlMmFhNzQ5YmU5NDEzMTA0YTE3ODY4OWJhNmQyN2U5NGZjY2Y2MWViM2FiYTBlNmE1YTYzYWYwY2E4ZjA1YTM1Y2I2MzcwNTE5NGU0NGQ5MjkzZGUzOTI5YjBkOTJiZTZmOGU2MjdjMzUwYTgzZmM5MDAwYWE5NWI5MzgyMGJlOTc5NWM4MGI1NjYyY2Q3YjM0ODIyMzI4MDYxMzU2ZGM1ODA1NzhkMWEzNWIxMDE0MGRjZDI0OGU0ODUzMTA0ZDJjNWIyYzEzZmY2ODNkZDVjMzA3OTRiZTRhNzY4NThhZjFjMGQ5YWYzNDdjZTFkY2Q5NzJlZTQ5YWFjMTJiYmNkODk5YzkzMjk4NzFkM2U3YTA2ODNkMTc1Nzc5YWZlMzVmMjZhMmQyNDhmZDc4MGVhODUxZGM0YmE2ZDIxZjhhMTcxYWE2Y2I4Njk3ZDlkMTEyMTYxNTQwMzA3Y2Q1NGY5MzE3NzVkNzBiMzNkM2I2ZGUxMDkxZmMxNzUwNTMxYzA4ZmE3MGY3YmUzOGFhMTEwZDY3NDZiYjU2NWRiN2I0NzBmOTAwODUwZmJiZjFjNjYyZmQ2MTNlNGYzYTU2ODk1NDllMzEwN2U5YjBmMTdkZWY3YTViZDdmZDc1OTZjNGQwNGM3ZjQ4Yzc3OWZjMzVlMDkzMzVlMWRmNzg0MDg0ZTU1ZDg1NTFkMWZmNDlkZTViMzExY2QzNTBmMzQ3YTBiZDI4NjNhMmEzMGU2ZWExODNhZDJlM2VlZGViYzE4ZGQyOGM2YTU5NmU2OTNkYzMzODlmN2Q5MGI3MTNlM2E4NWE2MjUxNjMwNWE3MDY2N2ZjMWZiM2NiMTBlOGE5NTU3NTAyNzM5NDNjNTY4ZTEwNzY5Y2VmNzgxOTlkZjQ0NTBkYmM0OTBmZWYxYjMwNGIwNTIyMjFiMmRiOWM0NGZlMDAzNDUKK1NJRzogZjRkMWM4MGY1ZTdiOTFjNWM3YTgyYTY4MmQ0OWJhNmZiMTlkNDAwYTI5OTc0OGEwYzk2OWJiOTk4MTY5OThiZTYzNGU4NGRhNzg1ODFiMDZlMzQ3MGVmZWMzOTgwNGZlZDkzZDI5NzM5ZjA0MzlhODA5NWFjNDBkOWQzODVlMDQKKworVFNUOiA3NzcKK1NLOiAgNmNhMWExNDgyYTA3ZjJhNmM1N2YwNDExOTdiMzRhNTExOWU2ODkwM2NmNmRmYjUxNzExZDk1NTA5NzMxNjNjMAorUEs6ICA4MDM0YTU1ZTNiNmVkNzk5ZjQ5ZTJlNzAzYTgxZjRhYzAyNTczYzQ0NWQ3NjVlMzA2OWJlNDJmMDljYmQxOGFkCitNU0c6IDA4ZmQ4NDg3NTAzYzNmMzI5NmI2ZjFiNjRkNmU4NTkwNmZkNTk4NmNmOWM1ZDlmYThhNTlkOTJmNDRlNjQ3MGFmMzRiY2RlZjMzNmZmZGM4NjQ1NmVjN2E3YjU3NjFmMWFkZWEwMjczMjY2MzBlNjhhYmM2YjhjZDVkZGY0MGI2NDFhMjU5YWQwMjQzMjFiZjNlZjk4ZTc2MzI3OTcxNDljNDkyZDUzNTk0NzUyYzU1MGRmYmM0ZmE2YmY0NzE3NmY0MjNhMjcwNTY5Mzk0N2FhOTBkNjhkZGM4ZWZiNmNiOWRiZWNhZmQyODMwZDA0ZmQ5M2IxZTllN2MxMmI5M2UwZDBmM2UyNjM0OTAwZjI1ODYwZGRhZGJhZWNlMTc4MGZmMmQzZjNkOWZiODM4ZmQwZDVkNjZmOGFmYjMwNWZmMWExYWVkY2EyYjk3NGI2M2U0M2Y1YjNjYzlkZmVkMWJjZjExOTk5MTc2ZWQ5NTg1YWM4MjliYzY3OTRlZjNhY2Q4NzJlOGQyZTkyNjA4YjMyMGY4OTQ5OTZhNTYyZTFlYjE3N2UyMWJlNTdjMjJjNDFlYzI1OWEzZGZmOWM3Yzk0OTFkYjgzOGQ3NmNmOWIwMzgzMTExNTk4ZTM1N2Y0NGJhYmViZjEyMWJkYjI0ZWU5ZDU1N2I3ZDVhZjQ5MWEwYTAzNjVjOTAzNjFmZTRmN2UzZDEzYTE3ZGEzYTM5ZmQ0M2Y2OTBkZmIwYjJkODYwY2FiNDE5Zjc3NWFiNzE1MmNkYzhmMmFmZGM1MGU4ZDVkYTVkYTAxNzA2ZWVhMmEyZmZhZDRiYWJlZThiMDNkYTMzNmE0ZDg0M2Q5ZDdlMGE5M2YzNmE5MmU2NjEwYTM2OGI2MzEzM2YwNWEzZmRjNTVlM2UxYTQ0MGIwZjg3YTUzMzY0YzFkMzcyNDJjNTdhMTA5ZTZkZjY5MzQ1YjAxYzIxYzEwODllNzkwYTY2ZjRmMzM4MGQzYjc2ZmZiNDIwZGZlMWU2MjAwZWFjZTU3OTI2NWE0MjdmYmQzNTU1MTRlZjk1M2UxYTZlOTY4ZTM3MDIxYjNjNmEyOTBkY2QwMjkzZGE2NzY4ZGFkN2M2NjMxMTYzMzA1MWMwYWNjYjBiOTE2NTQ2NGRmZGRmZGVkMjNiZDEzZWY5MDg3NDRmOWMyMTExZGMxNTMxNDJkMmYxMDUzNGQ4OTNmZTBiNTQ1ZmVjNTNmZGIzYjM1YjUxODM5OGIwMmFiMjE3OTFmYTk3N2UzMGNmNGI0MDRlN2EyOTlkMzc4NzEwOGI4MzZhYTBkNTljMTE0ZjFmMzY3MTlhN2FjZjg1YWM5OTRkOWNiNzIzMDZmMjU4Zjc4YWMwYTNiNmMwNTM0M2UwYjdhOWFhNzI2ZTUyMjY3ZWRmOTdmNDk3MmY3NjY0ZjQzNzIwYWQzM2NlNmU2MTU0NDBlMzY1MzdjYmM1NjliZDZmZjk0ZmZkYWVhNTFlMDYwMjlkYWU3OGM1YjkxNWM1MzdjYWVhNmYxNTA0MTQ3OTc5YjhhYWFlMGJjZDk2MTg0MzdlYmVkMGI1NWVmYWVjMzIwZTg0Yzc1OTU5YTM3YTI2MGEwMmQ0ZWYxYmI2MjY0MTUyMGYxYTAzZGRlYThjNGMxZGU4ZDdmYWM1OGRhNDA4YjBhYjQ3NTdhMTM1ZjFkMDc1YzlmN2M5OWZiOTlkYjk0MjdjZTliMGQ2MjZjYjFhYzE4OWFkODY2M2Q3YTcxNGZiNWNkMTU4NWMzYmY5OWEwYWE0NmQ3NjM5NzhkMGIxMmQ2NWM0MzhiYmI3M2ZlYWE1MWJhMjZhNDU5ZTdiZWEyNTQzOTQ2NmMwODYxM2U0MjU0MGM4YzZkNTQzNjdmMjIxZmNjZTBjNWViNmFmMmZhYTE4MWVhMjE1MjE4MDliZTc1NjQ5Y2Y4ZGVlNzY3MWRiN2Y5NDhmMzQ2Y2JkMDMwMmJmOWEwNmVhYmM3MmUyZTUxMmIzZGY4ODVmNmRhYTM5OGY5M2UzNmRhZTJkNmEwNDQ3ODEyMWY5Nzc4N2Q0Y2VkZmY2ZGIwOWFhZjEwZjI3YjEKK1NJRzogZGQ5YmRiYWRkOWZkYzgxY2UyMzAyODhjNGEwNjhkZjA3ZTE4YjRjN2NjNTFjMGNhNDgxMWRmYmQwNDc2NWM1NmJjODgzMjQwZTQ2ZTNhNDJjMDFkOGQyNDI0ZmJjMzMyYjdjNWExN2JjZWIxZjZlOGRhZDBiZmU1NjJjYWQzMDIKKworVFNUOiA3NzgKK1NLOiAgMjc4NGRmOTFmZWExYjJkMjFkNzEzZGUyZWRjNjY1MjQ1MWEwYzE1OTU0Yjg2NTYwNjJlYTFkZWRjMjQ0NWIyYQorUEs6ICA5NTU2ZGI1MzcwZjhmYjNjNzQ3OGRlMDNkMjNkZjFjZGE5NmYyNzQwMTE4ZWZkZDNkMWE5ZmE0YzNiZmU4ODQ5CitNU0c6IDJlM2JjNTRkZjQxNjc0MWRiZTc5MTZhZDI1ZjA0ZTQ4ZDVhOWQ3N2E2MjNlNTdmOWNkNjFlY2I0NGYwOWY3NjgzM2ViMmEzZTlhYjdhYTg5ZmY1ZDJkNTYwYzA3MTc3ZDg1NGQ3YzQ5Y2JlZjQ5MmI3ZjRmN2U1NjdkZTEyNzUxMjRlMTZjYTRhNzk4MDE2MmZhMGZkMTYyYThlNWZkNmYzNTYxNzAwNzAzNGJjZWVjNTdjOGZhZjc2NjRmNGIzYmFmZmRlYThkOGZjMmJhMjJkNTg1ZTllMmQ3MzlmNWZmYzk5YjRlMGRiZTljMzY4NjU0N2VhMDQ4MTVhNTljNGEyNWI1ZjIzOTA2NjhlNDE4YmEwZmNiZGY0YzRhNTFmMzM5MDVjNzRmYmI4MzBhMTlmOWJjODYzNmRiYWFmZjIwOTk5NTQ0Nzk5NmQyZTViMWMzNzdiNGNiODdhNGUxZWZlMTJkZTM0ZDMzNTk5ZmYzOTdiNzQwMTdkNzExZWRkM2U3NzIxNTViZTVhNDQwNmU3NGNiZTI5MzFlZjUxMzU5YWZkNTFiNWIxYTdiM2VhMjJlZThlZGE4MTQ3NmJjYzE3ZWE3NjgwZjZmMzEwNDcwM2I5ZjJhMzVjZjI2MjdlYjc0MWQxYTMwYWE0YmVlZjY1NzllYzdkMGIwN2E0ZWYzMmFiY2I0ZDc1Njk3MGY3MGEzNjc4ZTE3ZTZlNTczMTg5MGFlYmM4YzkyYjk1NmQ0YjNiNWZlMmFkZmQ3OWIyMTFhMTg4M2RmYzhjOWE0YjFiOWM4YzFiYjI2NWUxZjNkZDM5MjQ0NWVhNTliNTkwYTAxOTU1MWY4MTIxODQ5ZjQzNWIzYWMxYjI5OTAyZmM4MzkyNTU0MDU2YjkzOTAzZDVmMjYzYjNkNTQwODQzZDZhZmE3NWEyYWQ4MzA0Yjc2OTBkZTk5YTczNGMzZDEzMGI2OTU0N2IxOGIwOWU5OGNiZjI1MjczMGU0YWVkYjZkYzRiNThiMjI0M2ZlNTVlODA5MzlkMzdiMGE1OWQ3MjIyNmQ4YTJjYzUxNTMwOTVlMTU5OTRhZDYyMTk1YWEzMTBmMmE2NDI2Njc2YjY2MWU0N2I5ZmNmZmZhMDRkNmRjNjI1ZjI5ZjQ0YzdjZjYyMGIzNzhhNjVkMjM4MzQ0YjM4MDQ0OGNkMTE5Y2M3ZjM3M2Y2MmNkZmFkNjQxNDk5MDYzNTNmM2E1NDEwN2M1ZGJhNjVlM2NjNDk0YjA1MzFmNGQ2NDc0OTM2M2YyMzA3MzhiMmNmZWVkOTgzNTIwMjI3ZGQ1YmM0M2JlNTliMzI2OGUyODMyMTZmNmU5Yzc1ZTBjMWM3MTI3MmU1NGZkYjI5Yzc4NThkMjg3ZDFlZmExOTE3YmUzN2M4ZWVhYjVlNDRjM2FkN2IzNmU4YWM5ZjY2OTkxZWI4MmE1MTQ4ZTU5NzIwMzRhZDAxYzYyNjE1YTQ1MTU0NTc5ZmE1MDg2OWU3YmU5ODc2YjU2NTZlYWFkMmU0MzAyNWE2MmRkMTM0YjYxMmQ4ZjRkNWViY2Y4MDU2ZTE5OGI3MTM0MzhlOGUwZTM0N2NhZmJmY2I4OWUzOTRhYTMzMGQ0Yzc4OGQ0OWM2NThmY2ZjODBiM2UwMDc4ZjBlOGUxOWFhOWI4ZmU4ZWIwYmFiOTNkZTc4NWQwNDNlMGY0NzVhZWI2MGQ2MmUzOGZiMWY4Mzg0YTAwYjdhOTAyZGFlZTEzZDIxMzYyNjllNTA4MDFiODBhNjViMmY5MTNjZmUzZmZiMzY1ZDlhYTJmZDE5MzcyYTBiMDIyNTY5NTQ0NGU0YmM1NDg3MWQxMDhlMDljN2UxYzJiNDJkY2JiYWNjZTI0ZWE1YmQ1YmYxZmNmNGFjNjk3YTNmZTA5YTU0Njc3YjdhOGRjOGQ1ZWVjYjg2Y2M3OTJlZTliNmZlYTJkZTE2YTQ3MzI2OWZkYzY1ZGJiNzNjMjU4YzgyMTQ0MDQwN2M2NDJmN2QzZDNmNWM3MDhkNTUzMzJkYTgzNDMxMDZjMTliMjMwYTUxNDI3ZjNiNzcxOTE2YWUzNjg4YgorU0lHOiAxN2QxNzFkOTQ2ZGUzNTE2MTU4NDA3ZTEzMmNjMWFjZWNhZWZkNmQwOTIxMTJiZTY1Mzk5OTUyM2UyMGJkNDk1ZjdiN2Y2MDBlOGQ1YTY3MTMzMGQzMjY5M2Q2MDE5YzA4ZDJkMDAzYjE3NmU2MzE5YzM1Mzk0MjAwZTAyN2QwZQorCitUU1Q6IDc3OQorU0s6ICA0YmI3OTIzNmZhZGEzMTQ0YjY4Mjk2NDk5YmE0NGFlNTM0MDc0Y2E5NGQ0YjU4MWU1ZWRjZmZmZTEzYjNhZDE5CitQSzogIDBhODM5OWYxZTVhNDIzZGNmN2IyNWIyZmIwYWM5ZTFlOTU0ODE0OGJlYTg0ZDAyMWUwNDI4NzYwZTA1ZDU4YmYKK01TRzogYWQ4MWFiZjY5MzdhN2FjZDdmMTgzN2YwNGQzZjEwZTcwOGM2MWE1ZmJlZGVlZTRkYjc2ZTE1OTg1NzAzODRlNmVmZWNlOTdjOTI1ZDJlNWMzNDg4Y2FiMTBiNWI1MmI4YTU0ODZlOTlkOGZmZTg2YzE5ODFhMWYxZDUzMmRjZDRkNDg5ZTU1NDZkODY2NTMyOThlN2E1Zjk2ZTgxNDQ1NTJkZGE4YTE4ZTc1YjVmNzM1NWIxMzU0MTYyMTEwNmU0OTdlNTFhNTZkODY1OWQxOThmZTEwMDM3ZTIyMTI4YWZjMjcxNGEyY2I1YTEyY2M1ZGIwOTY4YTM0M2VmOTE4ZTg3NjlkZDZhM2U1YjllMzJhYWI2NmNiMDIzOWViZTRjMTdmMTgyMThlMjUyZWJhNjE2MmU5NzcwNDllYmFjMGIzODA0OGIzYWFmYjdkNGQ3MjI2M2U5MjEyODk5YTNiZmUwYTY5Yzk5ZTIyYWM2MWM1ZTk2MTI0NTYzMDNkOTI0NThiNWM1MDI5MTZjMzRhOGVlNWNkOWE1ODJhNTI1NzZiNmRjOWQ3ZDRjNjQyZjIxMjk5OGJmMzM1OGQ0YThjMmVhNjc2ODZlNTVkNDg5ZjZhNzZlNmIwNzBlNmU5OTVhNzQ1MzI2YzlhYTYzNjMwYTAwMzNhZDMwNzIxYWE2NWZhYzYwNGE2ZTU4Yzc1MDcyMWE1NmNhNjc2MGM5NDEzNGQ2MTFmYWI0ZDM1NGU0ZjY2YTI5Njc3YjFhNjY2NjAxZTlkYTc5ZjIxM2Y1ODIwMzc0MzNjMDdmOTRkNWYwZGU2YWE5ZmFhMGIzMmY3YjAyM2ZiOWZjMTM1YTI2Zjk3MDUyYWM4MGIzOWIzMDZhZWQxMzkyNmMyODU0MTlhMjliMjBlMjM3MGQ4YTA5NWIzMjI1OGZhOTg5MzQ4OWVlMjEwODljNzUyZWMwNjJlMTIwMzU5ZTJmMzUxNTEyODI1NGM4MDk4Y2NhNjVhOTFhMDIyZGQwNTdhMmMyYTFiNmI4NWQxMzdjM2M5NjdkY2I3MGFhMTdhMmZmNGIzNzY3OGIzODI5MDJmMGY5MzFlZTc0M2ZjMzk4YWMxYjhjMTA0Njk4NjczMDg0NzllNDBkN2YyZjA0YTRiMDRjNDQ4OTE1ODQ4OGRkYjdiZWM1YTQ3ZjIwZmYzNTZkOTlhMWIzZTlkMGI3ZmU5YjBhZDk0OWYyOTg5NjBlZmE0ZDk3MjhmODEwMWNmNTNkYTNiZmZkZDk1MjRiZjQ0MGE1OGIzMjczOGQwYjYyOTNlODUzZjQ2NmZmZDQyYzU2MDdhYzllMzUzYmEwM2VmYjU3OGNjOTk2M2Q4YWFhOWQyZTI2NmQxZDJhZTkyOTZmMzBjOWVmNDRlYzY5MTAzMGQ1OTZhNDAxYjZjZWU3MmE1NDBlZjNjNDJlYzAxNzQyNjZiYTU0MDFmMzU0YWRjOGUyNTQwNDQzN2U4ODhiMDgyODY5MzliZWRlMzA4YWNkMzAzMjdlYmZmMDYyNzAwOTdjYzI5NGYwYTBmMzlmOWFhM2M2NjU4NWNhNDdlNjBjNGI4ZWEzNjA4OWViOGE5MDg4YmIxOGIwMzQzMTM1YmI2YTQ1NmQyZjZhM2JmMzkwNzIzZTc4YjQyYzAzN2MyZGUyZTE0MzJjYWFkM2E1OTQwMjEyOTRkNDNmNWIxNWEyZTgxOWRjNzQ4ZTQ1MWRlNDAwNjhjOGYwMzJmMTNiNDcxMTM3NzAxMmVkY2Q0ZjExZGVjMTExMWIxMmViNmUxYjAwNjMzODE4NzA2ZDcxMzJkOTkxY2UyMGRmM2I5MjFkYjIxODVlZTI1YmI2ZjU4Mjc1NzZlYzAxYWQ4OTBmNzk3OTNiYWEzNThjMmJiZmI2ZmFhZDExZDhjYjBkMGQyZDJiMjk4MWZiZjRlMzcyMzQ5ZmM2YTAxYzM2MDc3YjU5MzI1ZjcwMmIzODAwNTlhNjVjZjJmNWVhOThkNmJkYzgxNTIwNTNiODViMjhjODFlNDEzYzRjYWM3ZTIyNmMxM2RiMzI2N2QyMTgzMGYwZTU0MzExMDI5MTcwMDUKK1NJRzogNjk4ZmFiNjg1MTBkYjgxMjFhNDY1ZGI3N2U0ZjhiNTg2YWVlODk1ODE2ZTYzYmJmMGJlYjI0MmRiNGU4NGMxNTdmNGJlMjAxYWU2NTY0NTE3YTg3MGQxN2Y2MGM4NTgzNzBjMDFjY2ExNzE4OWNiNDE4OWU4MTQzOTFkMTUwMGQKKworVFNUOiA3ODAKK1NLOiAgYWZkNzY1ZTZhYWMwMTQ2ZDQ4MTFlZjk1OTdiYzNmNDQ3NjNmMDMzNzhiN2JlMDMzZDZlNjRjYTI5ZGVjYWVmOQorUEs6ICA2YmI3NjEyM2Q5MjU4OTIyNjg2YzUzZmI2OTE3YjlhNDU5Y2FiZDMwYmU4YzQzOTcwZDgwZjUzNTBjMmQ5OGVmCitNU0c6IDE4M2IxMDkyYzc5MDRlNDdhMTQyMDMxN2EyNWQwZjU5MTEwYWE4NGQ2YjM0MTlhZDQ1Njg2NWM0M2IyOWU5ZDFkYWNmNzU1ZDllNWNmOTRjNTU5MWQ1ZDkxMmQwNWNhOWE1MmQwMTVkNmU4ZjVkYzk0ZWZkY2UwZDdjZjU2NTEyMDNiMTFlNTQyN2E5ZjY3OTQyOWUwMDQxNGE0OGVhYjEzZmQ4ZTU4Yjg3ZWJhMzlkMTAyNWQ2YTE4YjJjZGNiZTE0NzQzNmRiZjM4YTFjZTg2NDEzYWUzMTg3NjVlMWJiMWRmN2UyYjNiZTk3ZTkwNDA4YjExNzE3Y2Y0NTliY2QwZjNjYWM1OGI0YTBkMzViZmZiNTMzZTIwZGYzNzQ1MWMxMTQwMWNlMWRhYjAyMDU1YzdlMDhjNWVjNDYzOTBjZDYxN2E2YjVmMjJmNjUxODMwYTExMTJhMDZlZGU0YzQwYWI3OTU3ODUxZDZjNjZmMTcxY2QxNjI0MTU5MDkwMGI4NTJhM2QwMTk5NTdiZTFiN2JiN2FjYjg5MjNmMmEzNTdjMzI2NDQ1NmNmY2E5YjQyOWQ3MWZlY2I3ZWRhZTM5YjI1MmI0ZWI2MTBlOGM3MTg4MzU2OTk3NTRiOGQ0MTI0YjQ5MjQ4OGVkZTYyNjEwY2NlNDRiNTkyMTg2NjNiNmM5NjQ2YTE0YTg0MTdlZGRiYjZmNGZiZTVhNGJiYmI0ODJiMzdhNDQ1ZTNjMTZiNjVhMTQxY2QzZTEyYTViMmMwNDgxZDYxNGQ2ZDIwODQ3OWI5YjIwOWI4Mjg4NTRkYWUwZWExZWRlZDUwNjU1NWZlMThlMTg1NDAwNWNmMDAxYTgwNzcwODM0OThkMjdmYWRmMTE4Mjg2YjUzYjg5NzRkNjlmYTI4MjViZThjYTNkNjAzNmE5MmNhNTJmOTFkZGU2ZDViMWZmZTI4ODhmNGQ2MDc3OWZhZDFmYjQxZDhjMDcxNDA0OWFmNjgxYjc1NWYyZDQyMDRlZWNkMDllMDc3MjEwYTQ4YTE5NWU3MmM4MGUxMjdjM2Q0ODc1MDk1YzY1NzBhMWY3ODA5NTkwNzUyOGNmNzc0NmYzMWQ5NzExMWM2ZjRjYjI1YjM3NDEyOTlhNzU3NDgyMmQ0NmI2ZTc5ZWQyM2MyZmUwNTdiM2FjNzI5MGI0NjBiMTY2ZWU5MGE0NTU2MmVmZmVkY2M2YmE4ZjQ3OTVmNzM5NTgxOGRiNTZiNmVkZDU5Y2EyY2M0YWVhMTg0MWZkOTU2NWJlY2Q2YzA4MTA0Y2RlZTI2YmE5ZGUyMDA3NzNkMDkxYmM3N2E1N2M1NDdmMWE2YmEwYTJjZDcxN2FiMzI1NjFkNzQyMmVhNzIzNWFkYjBjYjM2YmY1Y2JkZjg4ZmNhZTA2NjMwYTE1NjQ3ZDlhMzU3YjRlMGU1MDJkMjczZjM3OTZhNTFlMGJjM2ZlZGJmN2ExZTY0YWFkNzIyYWFjNWZkMDIyZmE3OWQ2MGZjNzA3MzI1ZjEyN2ViMWYwMzg2ODc5NWNjZGMwYjRjYjI2ZjIwMjNkMTUyMTUzYTk3YTI2MGJmZjExNzQ1ZDJlMmNjMGJmODYwZDRhNmUzNThhNmQ4MTc2ZDJhYzE3OGE5YWUxYTJkYzc1ZThiNDkwNDA4ZmY3Y2RmOTkxMzI5ZjMzY2IwYzA1ZTFlMzU2OTI1MDg3ZTBiOGQ5NmE1MjM1MWQxZDE3NzY4ZWIxMzRjZGIyMWExNTQ2YWFlZGNjNjg3ZGZhMWIyMmU5MmZiNTI0MWE4MzY3N2ExNTM0NDViNzdkNWU3MDM1MDhlMmFiYzU4OGE5ZjQyZTViYzcxMDY3M2U0ZGQ4YWQ3MDNmYWIyZDdkYjFlYjg0MjI2Yzg5ZDg3NjJhNzA5ZTNlOTEzOGExZmE3OTBmMjkyOWJmZjYxYmMxZWE2ZThhYTFhZDBlMzg4N2Q3MGE1NmQ0ZTY1NDdmYzYwNmE1MGQzYmUzYmQ2ZGIwMzY2M2UwMGNhOWU0ZjI0ZmU4Y2JmZDdkOGM5NzM4ZDYzNjc1NTRiN2I2MDFmNzQxOTBiNTk3MGEzOTgKK1NJRzogM2RjOTE5NGQ1MDgxMTQxOTA0OWVhYTA3YjY1NWI3ZDQwNjRiY2IwZTdmYjVmOWU1MzI2YjVmYzg1NmZjMGFiODcwNTk3M2FlMTAwMWRmNTUzNzM5NzdkZGUyZDliODEwNzk1NTE0MTRhZGM3MWNjODUyZDQ5OWIwY2Y4MjRmMDcKKworVFNUOiA3ODEKK1NLOiAgZWIzNDcxNDVmMzM5ZWRkODAyNzg1YjZmYmVjZDVjYjgwODg5YWM3Y2U0ZWJhZDJmNjcwNzY3NjVkYjkzOWJjYQorUEs6ICA5OTRhNDU2ZWFkYTAzMDIwOTIxYzNkMTA5YzEzNWViOTYxZmNkNGEwYTQwMGJhZmQzMmNhMDYxYmJjODYyNTQzCitNU0c6IDViOGIzMWJhZjg4NDgzZjA5NWI1ZDAyZTE3ZDhiN2I0NmNmNDY0NjBlNjRjNmIwMmM1NmQ4ZGFmZTM0ODIzNzA2Y2I1YzE1ZjMzOGFkOWI1NjU4NmE5NDk3MTFhYTczMTJjYzkzNDUwZDJmYjlhZjQ2MTNmYzMwNzkzYTYzMWE1NWMxNGU1M2MwY2IxNWYwNjExNjM5OTM5OGM4ZGQ2MTg3NmM2MjkxNWY5ZjllNGNkZjhmN2Q4OWFkZTEyOWU2ZGRlN2Q2MzY3MWExODYzZjVkYThmNDJlYTY0YzA3OWVjYjlhMmMxYjFkZDlhZGFlNjBlOTZiOWNiYmM3NjI0NTMyYWExNzk3NWViYTE3YTdhZjAyYmZiMjE5YWFjMDJiM2Q0MzA2Y2QzODkzM2E4NTA2MGNkNjJhYjUxM2EzOTY1YjA5MTUwYTQ4OGM5MmJmN2NhYjA0ODJlZWU1NjQ2M2YwMTM5MDA5YjlmYmIzZmY0ZWNhZTIxMWY0MjhiNWJmYjg4NzZmMDA0OTgzYjkwYzQ0Nzg0NmNhNGI3NDU2NmU5NzliYzMwYzk1ZTk5ZmFhYjY5YTNlYmJmZTRkYTYwMzRjODJkNjNlOWM1Y2NhZjg0ODZhZjNiNWUwZDM4MTQyMjkzOGIwYzIyZjUxNjk1NWJkYzM2OTQzMTczZjU4MzI3MDhhMzNjZjUyZDg4NzVkOTdmZGU1ODViNDkxN2U0YWRlY2RkMWU3OTg1Njc2MjAzM2FmMjJmMjU0YjUwY2U5ZDBjNzAwZTc3YTczMTU1NGZhMDExM2EwYzY2NjY4M2YzZmRiMTllM2E0MjYzMDIyMzBiNjNlMzNhNzg1ZWYyNGE5Mjg5NDU1YjNiOGZjNjE4ZmZmZWY0OWMyYzZlNDhmZDRiYjQyMmY1MDQxNDlkZTJiNGMwMzU1YzM2MzQwOGU2NmRhODFjYmI1ODE1NTJhNDExZTM2NGZlM2U0Y2E5NmQ3MDcyYWIwNzJlNzU2OGMxM2QzNWU0MWM3ODI1YTEzYTVjNjhmYjlmYjU5ODhiYmJmYjlhMGI1MTE2NTc2NDY2MGNkZmEyNDExZjNkNDIxNjVkYTE4N2M1OGVkZWYwMTA1YTZkYjE3NzQyMDU0M2U5NThkNWQ1ZThhMzcxZjc5ODcwNTFjNGUxNzg2ZDAxOGViM2Q3MzJjMjEwYTg2MWFjYWY2NzFiZTk1YmI2M2ZiYzg4YmY4YmU3YmU1MzkwOTM5Y2Q5ZmIyYWNmMzk4MWRkYTYxYjc4N2E3YmJkNzg0NjhlMWQzMmNhNDZhZjhmYjMyYTE4NDYzYzE4MGY1MjRiZTFkYTkxMGRhNTUwOGQ0MmEwMDUxNzQxMjI3YzliNjJkZTZkMTliMzNjMGJkNDgwNjdiMDM1ODU5YWQ5YmRjMmRkZDk3YmVmY2EzMWU2NWE4ODZjZmM3NTNhZmM0ZmYyYTcyMTJhODlkMzdjMDQ2Y2RmMzk5OWMwNTFmZjEzOTZiZDk5Y2I1NDk0NTYzOWViNjQ2MmRiOWVjZTg0MDc3YjBiM2Q2YjNkZjM5NTJkZDM2NzU2YzZkYWIyYWJjMjVhNTFiZjMyYzFlOWNkZDBhNzI4YTc5ODVmN2I3ZTBkOWMxYTZmNjZjZTEyMTYzNzNkMjUyZGFmNTk1OGYyZTg5NzNmZDI2OGZhZDBlZmUyNTFjZTc2ZmU0N2JkMGE0ZDBjNGYxMDE3OTQ5ZDRjMmIxNjcxNzIxOGUxNDkxNTRlZDZmYmU1NmY4NmQ4MmUxOWVmMGE5MTYzMTkxMmYyYThmM2RlYmIwMDc2NmI2MTc3ODAyZjRiMmU3OWY2ZTdiZmE5YzYyY2ZhMmY3NWNkYjYwNDkyNjMwYTg1YzliNDMxNzdkMmRkOWJhOGQwNTQ4YWJlMjQ5MjNhZTg0NDNlZWFkY2QwZjU4YTdiODJkZmY1MGQ4ODQwMDM4ODljYjU2MGY3YWM1M2U3MTBhNzU1NzUzNjI0NjRiMWFhNDNkMmE5YjIyZjJiZDIxNjJkMzAyZmFhNzQ1MjM0NGNlN2FkZTk5ODM2ODdiNmM2OGVjYTQ3ZGRkYjI4OWIxNQorU0lHOiBmZGJkMTVlMWU2NDY5ZGY3MjBkOTU1MmNiNWRkMTc3YmNiZDI5MmZjZGE4M2NkOTNjODhkMDExNDkxMmRjODcwMzEwOWJhYzBkNDU5YWNlOTk1N2RmMjI5M2FjMTZkNDBkNTE0ODkzNTU2ODUzMjk5Yjk3YjRmZDQxMzdhM2QwMAorCitUU1Q6IDc4MgorU0s6ICAzMjA4ODM3ZDE1NTRiNjUxMWFkZGEwOWNiYWU1NjVkYTc4NDM5YTQ3MmE1ZDFiMTA3Y2UwYTliMWQ3NzU3ZGI3CitQSzogIDliNTI1ZTM1MzY4YTkyMWUzYTJlOWEzNWE0ZGU5ZWE0YzQzNmNhYmEyNzEyM2U1YzM2OWUyYTZjZjVjOTBhYjYKK01TRzogNDM2YTNjMzE3NjNmOTNkNGQ1NDZjNmQxZWNmYjdhZTQ1OTE2YWY3NTRmODM5ZGNmZTk2ZDZiNjljNjEyMTRkMDE2ZmM4NDJmNTY0NjJhM2YwN2Y2NjFiMmUyNTA1YWNmYWY0ODJhMGIwZjRmNTUwMWVlYzRiMmQyZDdkNDQ0NTQ0ZGUwMDBiOTkwZjQzNjNkM2Y5ODNmNWQ0ZTA5MzA5NzUyZmY1NzljNzMyMGM5MTU5NTFjYzNhMWUzMjM4YzFiYTdhMTkxMzBlYWJmNmEzN2Y1ZjBiYzU2ZTI1MjQyZjc1MjA2MWYzYzYzYWNhZDk5MmE3NTAxZTk2N2RlYjkyNWIzMGVkMTA1NDMxZTU4MjEwMmZhNGYzMDhjMmYwNjgzNjEyYjU2Njg2ZDUyZGFlZDY5NDNhNzIxOWYzYmVlYTJlMGEyOTI0MmU4NmQ1NTYyZmZhYjgzYjU2YjI2MzMyNjY2NGUwMjllOTYxZTcwMTdkOGU4OWY1ZTNlMWQxMGY1OTMyODU0NTUwY2U2ZTVjZDc2OTcxZmQyMzVjZjljMDAyN2QwY2ZlZDMzMTVjMmNiZjE4NTA4NjI0ZDhhY2YwNDdmOWI5NjhmOTA3ZDllNmY0Y2ZhNWU0NWM4MGEyNzJjMmRiYjYyYzVkNDE5NDU4MGRmYWJlZGQ4MmNiNGQ3NjQ5MjM0NGJlOTZjY2Y1ZGFhZjYxZTZiMmI1NWVmZGIzZjY1MjEwYTNkNmUxZjM2OTg4N2NhMGVhMGQ1OGMzZDE0NmFlM2NmOWIwMDAwNzY4ODQxMTVmYTUxYjVmZDY2YmVjMGNjYmYwZDI5MjAxOTZhN2Q3YTM4NDQ1ZmJlZDIyZGZjNzU2NGRjNTZmNjBkNmUyOWU1OTI0ODUzNzRjNmJkMWU1YjE1OTMxYjY5Y2E2ZWU2YjNhYTI1MjVjMjM1ODVmMDkyOWYzMWNiZDExZmIxYTUzMzAyMTZiOTBhZTVhNjU2ZGY3YTA3NGNlYzY0ZTU5ODE4NGY1MDNmYjIzY2MwNWU2NWRhOWFlN2U4NDQxZjQwZTJkYzI2YjhiNTZkMmNiNTIzYTdjNjM1ZGMwODQ3ZDFjZDQ5OGFiZjc1NmY1YTEzZWExNGY4ZmFiMmM0MTBiMWE0NzBmNDlhYThkY2E0YWMwMjU2YjExODAwZGUwZGQwZWM0MmIxNDJjNTYxMTI4ZDM1N2U3ODNiMTJmNjFjNjY4ZjVlNmUwNmI3YjQ4YjdiMjI1NGRlNWJkYzE4MDRiNzIzZDVmZDZhMGY0YmM3YzU5ZTdjNTA1NDE4MjYxM2JiZDJmYTkyYjRjMWRhMTZiYzhjOTdlMTZiY2IwZGJmOGM5MmI3NDg5OWIzN2YzMTg3NTcxNDBiNmM0ZmQ1MzVlMmUxZTA1NzBhNTA4MThjZjc4ZmI5ODhlMWY0Y2U0MGU3NmU4ZmUzZDY5N2Q3YTQ1ODUwZjI5M2NlMTcwZmQ4YWIwN2NmMTUzNGVhNWZmYWQzNGY2ZmNmYTQyZDBkMjFhOTFkZmJmZTA1OTdjNzNmZDliOTc2NzYxNGViZGZkMDJjM2FjMGM0OWFkMTBjOTRiZTU5NjllZTA4MDhjMGEzMGIyYTFlYWE5MGVhNDNiODU3NWMzMDU2ZjQyM2NkNGI2ZjM0YWU1MWMyMjIzNzY1YTllYTIxZjY0NTczYzFhMTM5NjEzMjEyNDZlM2I1MzQ5ZWUwNDhmYjYyZDVmYjYxYjE3MTQzOTExODI1NjJiOTE1OTgzNjBlNWY5YmY0YWM4MGRiMjQ2NDMyYWZiM2E0M2QzNDk2NTBkZTAzZDM0M2MyZTk3YThlZWZkMWJmMzBjMTBjMjU4NjdmNTMyNjZiZDFmMGRjMTRhZTFhNmJlOWVmZGVjZmY2N2U3ZDI5MmM2Y2RmYzkwZDgwYjg4NjY2OGYwNGMyYTBmNWFkN2ZhMTdjMTc4YjZlOWI0NWExMWY0ZGRmZTJkNjY5NjBhM2Y3NTEzNWFkNWVkMTU0ZTUxM2UxYTVkMTM4ZTczNzFlODRkN2M5MjQ1M2U2YzYyZGM1OWI4ZTFmYTkzZDc3M2EyNTQwZDkxYzI1N2MKK1NJRzogNzA5ZDFjYTljYTJmNzQyYWI5ZGQwYjA0OTMzNWY1NDRjZmZiMmYxYTM2OTNkNWY1M2Y4YmEwODNiOWIwZDg2ZTUyMDhmYThlMWU4MTU2YzljYzIyNDI3NzVhYmI3ZTE1YWYzMDg1ODY4ZWY0NTc2MzRlOTkyNmM0MDRlY2YzMGYKKworVFNUOiA3ODMKK1NLOiAgNGVjNjgyOWI0Mzk5NzA1NmQ5OTY4NTM4OWJkNTNjNTI4ZGU3ZTVmZjI3MTVkNjVjOTU2NjE5ODI2ZTNmYjViNQorUEs6ICA3ZDkyMmQ1N2ZkYjEyNzkyODc5YWVjNGU4YzY1MTQ2M2VjZTA2NDQ5MmM3MjE3NTNkMjJlMTE1NTA5ZmVkNzA2CitNU0c6IGVkMjZiNDEzMGQ0ZWJmM2YzODYxNDkxYWEzZGQ5NmE0ZWI2OTc1MjE3M2ZhNmM4NGNhNjVkZmM5OTFjN2ZlNDRlMDJiZDYxNjUwMjUyYTFkMjM3ODY2ODJlYzM4YzFmZWU4MmNjMzUwZGI3YzNjMzk0OWExYzkzNWZmZWJkN2JhYTI0ZjM1YTM5M2ZiZDI3ZTdjMzRjMmY5ZmZkYTYwYTE4ZGY2NmMzZTQ2NWQ5MGVkNDhmYmJhZDNmYTc5NDdkZWU3ZTY1OWEzZWVhZGI4ODdmMDk2M2Y2YmRkNzZjMzZjMTFhZTQ2ZDA4OGVlNTBiY2E4MTg3YTBhODgzMmRiNzk4NGI3ZTI3Y2JlNmFiZjEyZDJjOTRmMzM3ZWM3OGNiMzhiMjYyNDFiZDFhM2QyZjVmYTQ0MDdmZGQ4MDIyN2QyYjE3MDE0NGI0MTU5NzhlMzcyMDFkMGZjZjQzMTc0YjlkN2IyMTE1ZDVlYjhiY2VjMjc2YTc3NWFlYTkzZjIzNDBkNDQyNWQzNGQyMDQ3NDk0ZDkxN2UwZGJlMzc4NTdlNmM5OTg1OWI3MWM5MTRhYWQ1ZTU0ZjdiMmIwMzNlNTk0ZTI3MmNjNWNmZTkxOWY4ODhlNTVjYjYxNTdhZmZjZjM1NzI0NmQwMGI1MzJjYzQ3MWI5MmVhZTBlZjdmMWU5MTU5NDRjNjUyNzkzMTU3Mjk4NTNkYTU3MmM4MDlhYTA5ZDQwMzY1ZjkwODc1YTUwZDMxY2EzOTAwZGE3NzA0N2M5NTdjOGY4YmYyMGVjODZiZDU2ZjlhOTU0ZDk5ODhlMjA2YjQ0NGNhNWE0NDM0NTIxYmZjOWM1ZjNhOGEwNjE0N2ViMDdkMTFkZmUxMTcxZWMzMWZmNTU3NzE1ODhiMzMzZWVlNjIxNWQyMTZjNDdhODU2NmZiYjJiMTg5NzQ2NDZhYzVhOTJjNjk5ZDc3NTg0YzBkZWZlZmQyZGZhNThmY2EyNzE5OWU0MWVjNThhMjQ2MzIwYjM1ZmFhYjc1Yjk3OTUxOTI0MjI2ZGE0YWIyOGYwMWI0NzA3OGU3MTJlNGZkOWY3N2IyNTFjOTY2Nzg1OGMyOGUzMmVmMWNkMDFmY2JlNDM1YzU0MmRiYWQwYTg0YTEzY2RiYjU3NzVlNjJkODExZGM2OTBkOTU1NWMzN2YxNWY5MTc2N2E1NjEzNTdkZjEwNmVlZmUwNTZlNzM2MDY3MDY1MGZiODE4ZmM2YWRjNTk5NzNlOWFkNWNkY2Q4MDk4MDdhYjU2Mzk3ZjNjMTM5NDg3MzJkOThkNjc2ZjRhNDQ3MGE5NWQ4YjUxODIzN2UyMjZmMGNjNWY0NzY1MTY0YTVjM2VmMDUwNzE0YmUwMmExMjZiZThmNjY1NDY0ODE1ODFiOWU5NGEyNmFhZDI0YzY5M2I3ZmRiYzE4YWNkM2VkN2NmYzQ3ZDhhYjI2NzQ1ZDc4ZTcwMWQwY2YwNWRkODQ0YjViMzQ1YTI5ZGFiNjg0Y2JjNTA5MmJhMDIyZTNjNTgyZGZjMDQ0YzMxMDBhZDAyNzU2Njk3YTg0OTgyMjkxNWExNmUyYTJiODEwZTY4MTVmNTQ0MjFkMmYzYTZmZmY1ODhjMGQ5MDEzYzc2ZjMzZTA5YmVhZWVmNjBkODc3NDIzMGU4Y2U3MTMxMjg5YWVmMmE0MDY4NmM4MTlmYjIwNDBiMDYxMjRkM2Q5YWE0MTlkNTY3ODhmMTdmYTdlZDliOWI1N2NlYWFkMTMzN2EwMTAxYmVhMDQ0MGNmZjc0NWRkZDk3MjIwNTVkMWY5YmNmYjAwOWNlMmMyZjQxYTllN2U4NjgwNmI4NzJjZGMyMDU5YmM4ZWM2OGY1ZWU1NmM0YmFjZjRiYmQzMGVhNGM3MTU1ODY0ZDYwMGMwZTJlZWU3M2IzMTliZGE0MzcyZTljNjAzYzc3MmMyNTg5MGM3NjEwNDg5OTg5NDc1ZDM3YTc3YTQ1NzRhMmJhNTViZmQ5YzljZmQxNDZmYjk3ZTYxNjVkY2MxOTU1OWY0Zjg1ZGZjYTJmOTdmMzcwMmVkOGZhNmIzYzJhOTc0MTk3NGFhMDdhYjYKK1NJRzogMTU5Y2E0MDRmN2Y3NDExN2M1MTYzY2Y0MDQxMTA5NDllYjU3YWUyZDc2NjJiMWZmNDE3OGNjNjc1NmU5MGFkYWVhYjcxYjA2NGNlMWRmZjQ1N2IyZGJhN2UyZGMxM2MyMTdiY2FlOGE2MWZjZjhjZTE0ODdhNjQ5YzI1N2ZmMDcKKworVFNUOiA3ODQKK1NLOiAgYjE1MGE3ODkyOWVkMWViOTMyNjkyMTNlMWViYzIyZTJlNDBhNjAxYmRiMDA1NDk5YjdiZWIwNTg5MTdjNTM0MAorUEs6ICAyODg2NmI2ZDFjMzkzY2IwOGU0NjRjZjU1NzE0NDBhNjQ5ZTUwNjQyMzgwZGRmNGZmYjdhZDE1MDQ4NWMxMDhlCitNU0c6IDFiZjU1ZDI3ZjlkZGU2YzRmMWMwZGRkMzYwYTI1ZDk0OTNjMGZmZGNhNzRhN2VkNWU1YTUxNGU5NTUxNWNkYTRhYWQ4ZjQ1Y2Q2ZWQ3OTAxZjhmMjI0YTYzYjM4MTIxY2JlYWMyZjU2ZGFlMjEwZGQwNTM3NTBjYjIwNzUxNGE4ODkxZTI0NWE1ZDA3ZTdkZTc4YTJlMzgxNDQ2M2YxNDhkMmFjYjdkYzcxZjk5NWM5Mjk5YWQwZDYyNjZjZmVmYzk0MjY5NjU3ZmQ0N2NmNTMxMmI5MmFmMjc1MDY1MWM0Nzk2MzZjOWQzNmFlZjA4ZjdkMTE5NWU3ZmExYmEzYWJiNWRjYjkwMTM2YjBmYjlhMzc2NjhiODdhMmRiODhkMWUyYjY0NDBkM2U2ZTYwMWU2ZDRiYzEwY2YxY2JkZjFkNjE2OWMwZGMyYzRhZWNkZWI2Y2RkNDU2N2Q0MjUwYjJhZmE3MTViMTY2Yzk0NjdmOTA3ZDNmYTVhNmRhZjIwMGIzMDljMTA5Mzc2ODMwNDk5Y2FmMzE0OTAwMWNmMzMzOTQ0OGNhM2Q3NjUyMjVkNmIzYzFjZDI2N2NiYTkzNmU3YWE0ODMyNTM5NDY2ZmQyMGNiYjM4MzIzY2JiMjIyOGEyNzFmMmQyODI1NjFjNzNlZDc5YTFhZDA0Njk4ZTI3ZWZlMzkzMjM1ZjM0NTZjMjk1NDA3ZGEwOTYwZjAwMzRkOGRlZWZkMWMxODU3MzZmZDNlYWYxZjlhMWUzMmYwOTE3NGMxZmUxMjcyMGI3Yzk2ZmViZGIzM2UwMWIxYjZhMWM2MzcxNTAxOTRiZTRmZmFiMTU5ZTQ1YjI0NTg1NTc2ODQ2YmI2NDI3NGVjYTdiMzlhM2VkOTM1N2RlN2IwODQyMTMwMjRhOWU4NTg5MjYzNjAwYTI4NjdjMmE3Y2Y4Yjk5MDc2YTEyYTA3YmQ3ZGY4ZDUyNzdiYjA0YWQ3MmU2MzliNzdlYWNhMWVjNThlZjk2MzdlOWEyMzc2YmE4NzhhNDU3MjM1YTA2Zjc4ZmRmMGUwZDkyNWNiMmZkMmEzOGM3NzE4OGY2MDM3MmVmNjAwOTc5MjQyNDM5OWM5YjY3OTI4ZGEyZTNiYTkxY2JkZTQwN2U3ZTg3NmJhOTgxMzllZDIyY2EzYjk4M2JlZGUwMDAwNTI4Nzk2NDQ4ZTRhMTA1NWFjYjJkZWFhNTZiYzMwODI1NGM1YmQ0OThjMjc1ZWNlZGMxMzU3ZWZlMWZkYTAxZDM0ZDkxNmRkNGQ4NjQ3ZTU3NzE5OTVhNjUzZTBmOGE1Mjg0Y2M3YmY3MzE1N2IzMzQ5ZDU5ZTZmOTIwY2FkNmNkZDE3MTlmMDM4MDI1YzQzMDBlMDIxMGNlMjQ5ZmFmM2M4MmRlMWZkMWNkYWJlNjFjMTRlY2IxZGYwMGM1YzQ2NmFhNmEwMTJhOWMxMGRjZmU1OWI3ZTlkM2IxNTVkYWI2YzdiN2MxNjA4YzFlZGQ1MWRiZGFkZjZiYTU4NzZiNWU2MGZkZjdmMTllNmVmNzEyY2QxYTdkZDNhMDYyYTY1NzRhNzQzNmIzMTllZmI5NDRlNDIyM2Y1NDJiMjUwMmMxYmE5NzZiZTkxZTA1YjBmODVhMDlmZDc5M2JlY2E4ODMzNzVmYjY3Y2QxMzNmNTI4NGQ4OTk4NGZmM2NhZmE3ZTExYTlkODVlNzg5MzIzMmE1MjRlYzU0YjIwZjk3NWQzYzBhMTE0M2EwZWY0MTE3NmI3MDUxZWE5MWQ0MGM1ZjQ0ZmQ5ZTEwMDU1OGJmMTIxMmE3Yjg5MWU2OGI1NWNhNjFmNGJlOTQ1MjY2ZDlhMTAwN2ExNGFhZWI2OGM0OGUyNTdmMGY0NjMxMGFkMTY0ODE0NjdlYzE3NzM1MzVkNWZjMDg0OTE1ZjVkMDA0YmEwZGM3NTkxZDIxMjNjNjIyMDc5MDlkODRmMmIzODJmNWVmMTI3NTlhOTVjZDNmNTE4OTgwNmUyNzM5NjBhZWUxNjJjMDBmNzNlN2ZhNTkzNjM5NTc2NTRiYjE5MTZiNTcwOWJiMGE5ZDA0MDUxNGFlNTI4NDk1MWU2YgorU0lHOiAyNzZkZDA5NjJlNmVlNjRmMDU5MjQ0MWE4YWYwZTVlZjhmOTNiZjBiYWViYTIwNTA0YjlkYjRmOTVhMDBiOTM5ZWEzOGRlZjFjNzk3ODYyODk4Y2FiZTlkYzQ2NDRmMGU2NzdlODdjMGEzM2I4N2I2YTRkMjJhODA3ZDBlMWUwMgorCitUU1Q6IDc4NQorU0s6ICA5ZmM3YzQ5Y2I4YzRmMDk3MmQ2ZWQ5NzBhZTJjNmFjMzM3ZTY3NTQyNWNjOGRjZTczMGZjNDE0NDQzMDI5MzVkCitQSzogIDQ3ODI1MjBiMDZmOTMzNDRhYTc2Njc4MGU1NDQwMTM2M2RmZDdkOTY3Y2MzYmYwNjQ4OGFmOTA5MjBhMzBmODUKK01TRzogODJiYzJjNzAwZGIyMjJhNGFjOTE0YWEyYmU4ZmEyOGU0MjIwNjdmOTRmMzM0NGY1MzYyYmViYWFiZWQ3NjEyYjBlNDY0YTczYTZjNDU2OTAzNTY0YjE1MzkzNDg1MTQwZGQwZjNhZmY5MGFhNmUxNjYxZGRmNjgyODUwZDA0OTBhZmMzZDczNWRlYTA1YmE0N2M4NWQ5N2U4MzM1MzM1MTRjMTk4YjRjZjZlNjZkMzYwZWU1YmYwMGUxNGEzYWFiMWFkMGU3YjhhYjJhYWNjOTY0ZDQyODMwYzc4NDUzZGYxOTU1YmJlZDFjZDY4YWRhM2RiMGVjZGI2MDFhZDc2NjdkNWM1ZTJmZDQ5ZTM2ZjczMjhlYWEzMzdkYmQ2ZmY3MGU3ODk4YTNmOThjMTU5ZDA0NWEyNDI3YWRlNTMzM2M4OGZjNGFmZDM4MTlkYzgyZjRkYWEzYzUyM2NiNTdlMzVhMmE1YTcyNWQ2M2Q0MDJiYWVmNTFlNTFmMWVmNGY4ZjlhNTk1YzkzNzljOWFiYTg3M2ZiNGU3NjVhOTMxZGEwOTE0OGFiYTZlYzViNDQ4NTliMGU4MWZmOWZjMjI5NTk4YWM5ZmJkYjBiZGJkZGI1NjkyYTUyMjIyZGY1MmVhMzg3YmJiZjM2YWQ2NGQxOTQ2YmQyODJlMzIzZmY0ODIyYWQ5ZGE4OTdmZjczZjAxYjM5MGNmZTJlNjRkZTQ5MmQ1NWRlNzdmNWQ3ZDAwNjBhNjg3MmEwMTgzY2NiYTYxMGY1MzI3NGNjYjI5Y2U2ZGNlNmEwMzZjNTMxN2ExZWQyYTdjMTA2OGMxYjI0NmZjMWQ1ODgxZDAwZGUwNmViNDAxY2ZmOTVlNmI2OTE0ODY5OWRiMTNlOTRiYjViMjgwMjEyZGZmNTRjNzBlNTZkZTIzNWE1ZjE0MDBiNWJlYTU2NzcyZDA2MDE3MGYxZDA2NTczMjE1NjFlNGI0OTEwN2ViOTZkOWIzYmM1YWRmNDUxYzJhNTI0ZWJhNGRiMDAzYjc3YjYzMmE1ZDg5ODI3YTYyMjRjYzc5OGUwOTZiYTI3ZmIzM2JmNjFlM2I4ZWFmMThkMDAxYWU4ZWI1MmY4NWM5MGQ5ZTEyNTQ0ODAzZTY3ZmYwMjA0N2UwZDIzYzIyZTdmOGI5ODBjMDFjM2Q0ODI0YjJhOWExNGEyZThmNjcyYTdiMGNlMDNiZGJiM2JkNTZkNzU0YTA5NjRkYjAxY2E4OTlkNDg4MDAxNTA4NjU3YjdiMDIyY2NmMDQyYzM4ZmMxOTQ5ZDBlMDBhZjRkMzAxZDRmMDBjM2RlYTIwZTMwOGEwZjlkY2FjYjQzMjIyYjM4MjQxNDRhZjc3YmUxOGE1MDRhYThkMjY4YjhhNTYwMDcyNWU3Y2M1ZjNhMmU2MjU2YTgwNzRkMWFlYmNhMTIzZWE1M2EwNzY3YTkyZTE3ODNhNDk4M2M1ZWYzZDdkZDdmMDJhYTlkMWY0ZjlhYWM2Y2UyNTQ1OTNmMDg3OTIwMTRmYjg2N2VhZjg3OWI4OGE0ZWZiMThlODliYTExMDA2YWQwOWQ4NTQzMWNjMjY1NzViNTM4ZDhlNzg5MDY0NmM1OTg4NjQ3Y2MxMDVkNTgyOTA3YWU2MjVlMDljZDA4OWY0NzI0OWU4MTgxNGRhMTQwNDRjNzAxNGU4MGU3YThlNjE5YzdiNzM1ZjcwMTYxNmI2YTNjNmY0OTJjZGM2ZWQ0NjNlNzFhM2QyMjI5MTQ4MmQ5MGExZGU2ZjA5N2M0YWUyNTQ4NzYxODRjNTYyYjE2NTc1YjlkMGQxOTMxM2VkOTg4NjRmNDlmZTJlMWQwNzRhMjEyMTFiMmIyYTZkMjdkZGIyODYxMTUyMGQ1ZjcxMjMwNThmZDAwN2JiMDEwMDFkZWYwN2I3OTJiYjA1YmI3NDFjMTI5YzZhMzYzNzZjMzg1M2I4YmI0ZjY2YjU3NjBjOGViNGVjYzczMDZiYTNhOTBjNzBkYTQ3Yzk2NWY2ZGNjYmRiNjFhN2ZkYTE4ZWU5NjdjZjhjNWYwNTAzMTEwOTJkMGZkZWVhZWRkMTI2NWRlZmRkNjYwYWJlNzAKK1NJRzogNWM3ODNhODYwYWE2NjgxODRkZDIyYzRmOWE1NDZiNWVjOTZlYmFkMmU0YWYwMGY5NjhjNjg4NjcxMzU0ZTBjYzliNTcyYzczYmM2ZjE5OTM3YTA1ZjFiYWYzNDM0NzYzOTY1Yzk2ZTEwMzQwN2YwZWI2NDJjNTY0NDE1NDI5MGIKKworVFNUOiA3ODYKK1NLOiAgMDhiZjA1OWI0ZGE5YWE3ZmZjNzAyZjViMjMwNGM0Zjk2Y2E0OWI3ZGFiYjZhZmI0MWRjOTFjMGYwMGM2NWI3OAorUEs6ICBhNjI4OWJhMjhlODBlOGQxYTMxOTIyM2U0MTY1ZGMwYmNlNzM1MmFhZjI0MmY3MGNjOTY4ZDIxZDc3NzUyODMyCitNU0c6IGJkNGZiMjhhMWRkMDhiMDdiYTY2ZTE3ZjBjNGYyMTg1M2ZlZmVmMWM5ZDIwYmE3OTc3ZjE1NDY0MWVhMWExOGJlY2Y2YmJiODAzODg4ODYyOTRlMDc1NmEzYzUwOGZmZGZlOTBiNTFlMTM1NmQxMTJkOGNkZTVlZTJjYzYzMzJlNjFkMTY5Y2NjOGNjOTM0OTk0ZjFiYjU2MGZhNDY2MGMwYjBmZDRlODE0OWEyMjVlZDQ4ODNlNjhmYmI2OWRhN2FmOGE1MjRiMTcxNDFjY2I3NmI1MGNkOGUxYjY3ZDNjZTAzN2RlZDdkZmE1OWJjN2MyNjc0MjI2ZWM3ZTA3Yjc4ZWEzZjc4MmZkYTNlNWYxZTljYWVhYjYwOGNhMzg3YzMwNDY1NGY4MDFkMDBlMTBhN2MyOWY0YjBkYTNlNWY4OTUxM2E5ODAzNzcxOWExYWVmNGMyNTA2YzE3N2FmNTQ1MWEwMDc1N2E1OWYxNjIyOWM0ZjQ0MTRkZjUxNTgwZDQ4MjEwZGFiYzkzNzczNzBiNjA2OGE4OGU4MWQzYWQxYmVkNDk4NTE1NWMzNjAwZmY0ODc2OGI5MDMwMjJmZTAyYWU0ODBmMmU2MzI5ZjBiY2M5MWQ3NWY1YzZhMDlmZGY3N2JkZTkwNDk5ZjNjYTM5NWNiMjAwNjJhMDk4NGFkNmEwMTQxZmQwMWMyZDU0ZGZiYjFlZTU4NDYxMDY0MDc3MzQzOWExNjU4ZDJjOWY4NjJmMTgzYmZlZmIwMzNhM2JlMjcxODEyZjEzYzc4NzA0NjU3ZTdmYjRmODUwMTc1ZmNkNjNkM2U0NDA1ZDE5MjI0MmMyMWYyN2M1MTQ3N2YzMjExYTljZTI0OGU4OTJiNDJmYjZkODU4MjBmNDFiODk3ODM2ZjIwZjg1YTEzMTE1MzRiNWM0MDRmOGI3YTRhMDMxOWJjNmNlY2FhNTdmZTRkNGYyMDYwN2M5OWMyZGYyMmZhMDY3NmY5OWQxYmQ4Nzg4NmM5MjhjNDk4OGM2ZTc4YzU3ZDc1ODMzMGU2OTIyY2JlMDNjMTAzNDAyNTNkMGRkNDgzNzkyY2U3NWU2Y2QwOWQxMmZiYmIwNDFmMDIwNWU2NWFkMjVjZTdjMWIyNGU3N2VlOGQ2ZjkxNWUzYmMzZTEwZDA5ZmJkMzg3YTg0YmRhYWJmZDFjZWRiNTJjMGIxNzMzYjVmNDcwODhjMGQzNWUwZWY0NThjODU0MTRjMmIwNGMyZDI5ZjYzZjc3NTg2MTMxZWU2NTUzMGYyMDliNTE4YTBmMjU3YTA3NDZiYmQ1ZmUwYTJlMGMzODhhNmM0ODBlMWI2MDcxNGZlZTFjNTk0MWJiNGUxM2Y3MDdlYWM0ODdhOTY2NmE3MjNiNTc5MzEzNGEyNjhiNzc1OTc3ODZjM2EzMTkzYjQ2ZDM1NWRkMDg5NWZjNjIxNmM1MzZhNTQyZmZkN2Q3YjA4MDEwYzg2ZjU0N2E1ZGFhMzgzMzVhOGJmYTI2NTVkNWY3MWI0ZDg4MDdmNTBjODU0NWM1ODNkZDBiNjkwMDIyZWU2NTg3M2FlYTNlOGYxYTU2NWYzYjBlNGUwMjk1ZmIwZDMyMWY1YzBiMzk3ZjJmZDA1MjhmODZhMGQxYjcwN2Y3MzdiMTc1YzY5ZTllN2FlM2M4NGQ0YjJjZjNhMzhhNjMxYWE4MDMyYjNlNjViYjQ1MjhmNjZkMGJmZDM0NDczZWQwMTAxZDJhNjEyNTViMjE1YmMxY2JhYjlhMjZkMmI5NjkzMjRiNzdjOGE1NDY0ZTViMjNkZjZjNTExMmY5ZDE3YzU4N2Q5NTU1OWRlMjEyYWQyNDFkOGIxMjYwNTBlNWZkZGZjYzgzOWE3ZTVhYTJmZGExY2EyMGMwOTEwZDg2MzQxOGYxOTViMzhhZGZjYzM2ZTkyZjIzOTZhYzMxNDRiNTM3YjMwZmJlNGRkZTYxNDkwMmY4OTk3OGI3ZmI0MmNkOTlmMTNkOTljNDVjNzM0ZmI4MmMzMjU5ZjkwYjg4ZmQ1MmJkY2I4OGY3ZWVlY2RkZTRjMjQzZDg4MGJhYzc2MTRlMTVjZjhkYjU5OTNmZmEKK1NJRzogZTI0NzY1ODYwMTM3Njg5YWFkNTBlYmVlZmM4ZDZkYjhlOTM2YTRjYmE2MmNlODdhN2Y1ODAyMDkzODRhOWQ3ZWVjOTA3MDkwNWY2MGFkNjNhN2JlZmQ3YzcwZjBhZTdjODEwOTE2OWFlZTRlNTE4ZmNlYmZhY2E3MjNjNWIyMDcKKworVFNUOiA3ODcKK1NLOiAgZGJiZDBmN2VjYjY0ODJjYjAxYzRkYmRjMzg5M2MwZGI4MWU4MzEzNTNhNWIwMWNjNzVkM2IxMWYyZmYzYzU5YworUEs6ICAyZDRlNTg4ZDMxYTM4NGIxNzg1OGMwZDc4NGY2NzEyYmFmZDBiNDEyMDRjZjhmMGQ1Nzk3M2U1OWM3NzBkM2RhCitNU0c6IGUwZmZmMzU5NzVlYmE3OGRhMmIwZmZjYzVjMWI2NjM2MDA4ODhlODI1NWNkMjA4ZjZkY2U3ZTg4OTUzYjcxNDI5MzczODlhMzM3YWU4MmY0Y2ZlMzJmY2IzNGY1NTJhNDhmYTg4OTllMWE2NTllM2VkM2QzZDI5MGVmYzlhMGY3ZGVkZjMzZTIxZDA0OGQ4ZDkxMDc1NzAzN2I3NmU4YTdlZTllNGVjYTMwZjUyOWRkYzAyY2VmZmMyNmQ2NGZkYTczMDNjYzBkODk0MGU5ZWY1OWRjOTgzYzEyY2NkMWQyNzE3ZTY0ZDMwMDZhZjgyYWIxNWJiODc4YmI4OWQxNzU4YmU0NDMxMDQyMDYzOGI5NmEwYjVlMWU2NTAwOWQ2OTM5NWQwMjdhNWRhNGE4NWU5MDFiZTlhYTJjMGIzYWNjNTA4ZWUxODU3NGMxYjJmYTliZDVkN2FlN2M3ZDgzMDcxMmRhNWNiZjI2YmUwOWEzMTI4NDcwYTEyYTE0OTA5YTgwYTI2NjY1OWJlZmRhNTQ4ZmQyYjIyZjI0YzVmZGMyMDZlZDNhNGU3NWY1MzIwNjgyZWQwZTRjZTgxN2Q2M2Q1YzdmMWVlMmI0NDA2NDMzNTViZTY1NDJmNTlkYzZjNDVhYjE1NzcyZjIyMTlhODEyZWY3NTI3NjQyMDE1YmM3NWZlNDViYTk2OWU4MTAwYzI2OGUyNGNlZWY5MjA1YTgzYTNmN2I1YWU4MDBhZDA2ZTA5NWI5YjEzOTIxOTQ4OTc5M2E3YmNlODRlYmViNjU0YWI2NjY5ZTI4NTVjY2JlYjY5NGRkNDg2NTE1MDViOTU5ZDMyYTc3MDIwYjg2OTUzM2UzMjU2ZDQwNjg1YTYxMjBiYWI3OTQ0ODViMzJlMTE2OTI1NmZiMTg4ZmU3NmUwNGU5ZWZhNmQxMGQyODZhZTg2ZDZmMWM4N2U4ZmM3M2FkOWI1OWZlMGMyN2VlOTJhNDY0MTViMzlkNzg2ZDY2MzI1ZDdmYTZmZGE3MTJmMTk5ZGE1NTRmYzFjODk5NDRhNGU4NGMxOTZlOTc5YTgwNzU1MzcxOGNiODFjMDc2ZTUxMWU2MDlkNWNhYzIzZDhmNDViMzhiOTRiY2ZjZjE1OGQwZDYxNjAyMjM4ZDUyZTNhZTg0YzgxNTMyMmY1MzRmMjU0ZTYzMzg5YWUxNTVkZWUyZmE5MzM5NmYwZWE0OTlkNWQwOGMyNDc1OTA4YzY0OGJkZGNlZTU5MWUxMzM3ZTk0MjFkYzVhMjU3Y2U4OWNjY2U0Y2VlYTgwOWQ3ZTg3MTM0ZTAzOWRiMWJlNTk4MTk2ZDMwODlmZGNmYTg5NzhlMDJjMTU1NTgzMmRhMGE3MmIwOGFkMDdjZGQwNzI2Mjc0MDljODczOTM3YjBlODM1NzE1YmFhZjI2MDhiMjM5NTMyNzQ2N2NmNjlhMWNkY2NlNjM3MjQxODM4M2U3Yjg5YzhkZjRkNTMxZjU4NTE0OTUwOWVhZDFlNDFiNjYyN2ZlYTgxYzc5NThjYjQ5ZDJkM2MzZTJmYzY5MWUwYjhjZjcyNjc5YzA4Yjg5MDQ2NTQ1MzFiYzQzNjhmYjYxN2FjNzU1N2Q5ZGI4ZDMyOWQ3N2U0OGQ4ZmI0ZGU3M2FiZTdjYjkzODgyNzRhZjU4NWY4NzVjMGRhYjc5M2U0MzUzNTE4YmIyNDY5NTM0MmFmMGY1ZGY1YmU0ZTljN2FkMjE1YmU5MGUyNTU0MGRhMzQ4OTcxN2RkM2QyOTI1NDU4NWE0NWMxM2U2ZGNjN2U5YzhhM2E3OWZmNzU1Y2JlNDY1YjI1ZTIzYTFkYTYwOGUxMDg0ZmVjODNiZmY4MGNmYjc0NDJiMTQ2MDE4NzMwN2FjZDc1ZTNmMmQxMjg0M2E3NzA5NGFjYzMyODg4ZmJlNWYxZmMyNGM2MTVkMTlhMDY1MzkxZDQxNzY0NzQ2NDQyNDZiNTM0M2RhNzc2MjZhMmQ0ODNmZTIwNGY4MzkzMjg3NzViNzFhNGNiNTY3MjczZTE2OTY0MGFmOTNkZGUzZWNhOTExNmY0MDBlMjNhN2FkM2Q4ZmMzYTI4ZTU2NWYxMjVkNgorU0lHOiA5NmMwMDM2MWZiNzFjNTIzMDVlMWFiNzcwN2UwNDY1MjAzZWIxM2RmM2UwNjU1ZjA5NWZiMzMxOTQyYTQwYjE1NTg0MTQzYjM3MGE3ZGQ1NzYxZmIwM2MwNzVkMDRhODM0ODY2MWNjZWE5YWRhNTMzNjViNTAwMDg3ZDU3ZWMwYworCitUU1Q6IDc4OAorU0s6ICA3NDhiYjNjZDQ3NzEzN2JjODgwZWE3YzYxZGYyNWMxZGFjNmViZWM5ZTZjMzE5M2Q4MWZmYTZmN2E4MWVjNjY3CitQSzogIDEwNmYyOGNmZWRmMDk2NDU0MjI2YjNiMDFmYzI0YWIxYzliYmQ3ZjJiMDk3M2U1NmZlMmY0YzU2YTBiMTQ3NWIKK01TRzogMDBkZTZkOTkwYzg0MzM4YTM5OGZkYTVmNGEyY2NhNzMzYzU2YjJhMmVhMzk2YzJmZTY2N2MyNjhlMzgxNDU4Nzg1MzliZDQxYmMxNDBhMmNkZmU3ZTE4MzYwNDExMDQ4Y2NhNjBmMzVjZTUxMDk5MWRmMjYxY2JmNjY5MDM5ZDlkMjU2ODdhMDdmYzA0NzZhNDFmNTBlY2NmMzgxNTNlZTZhZTlmZmQzOTJiMmJlYzBjYzY3MTAxZWMzNjk2ZDdhMmVjOGNiZDQ0N2I2YTZlYTA2M2QzM2VjMTI4YWU4YjU3NTc3ZGVlMTdiOTcxNjI1NjNmMTVlNDJiNTVjYTRiZWRiZGZiNjMxYTlmNjI2MmY5NGFlMzViYjM1Zjc5NWMzNWEwMWRlZGI0NjQ1YTczY2ZhNmVkOWVlNTIxZTQ2MzFmYjE3YmJjMDZlZTU3MzE2YmU1Mjc0MjdjOGFhNTVjNjMxMTg3NDYyZDRiMmM4ODIyY2E0ZTE4YjdhNWQ0YzExNGMxMWRjMjIwNjliYzgzMjY1NmQ1ZjRkMzk1NDg3MThjNTFmNWU0ZmM4MjhmNjBlMzdmMDEzMDc1MDUyNjVhY2IyMmQ1ZThkNzY3YjlhYTdiODY2YTE1N2M2NDM4NzNlMDkwODRhMWE0MDRhN2JiNThjY2M0YjVhMzkwZmQzMDYwMWM4OTY5MzVlMzU1NmY2MGQyZGM2YmRmZmU0N2RhMGE2ODdjOGVjZTEyNDFmZjZjMDdkNzc2MTExY2E2NTk4ZmNhOTY4Y2I2YWZhMGExNGEzNGFiOGY1NGI5NWQzZDg0NzNhMTc0YmM3MjU1MjNmODY3NGRmYjJiMTBmODc0MjA3ZmVlMWIwOGI0MmRhMWY1ODY1NTMwNWEzNTk3NTdhYTAyNTFmMTQxMzhlZWRiYzI4MGNiZDM4NWJmNGJiZjU1MzAxMTRjYzQzYjA0NzQ3NzllMjA0OTYyZjg1NjBkNGFhNDIzZTE3ZTZhZWNhY2U2NmM4MTM3ODRmNmM4OThiNWI5Y2I3NDZhOWUwMWZiYzZiYjVjNjYwZjNlMTM4NTc0ZjU5Yjk3NDU0NDU0ODZjNDIyYmMwNmExMGNjOGNjOWJjNTY0NThlZjg1ZTBlOGEwMjdjYjA2MTdkMDMzN2RkZGE1MDIyMGIyMmM1YzM5OGY1Y2UwNWVjMzJmMDliMDkwZjdjZjZjNjBmODE4YzZiNGM2ODMwOTgzZTkxYzZlYWRmMWVhZTRkNTRiZGU3NTRmNzVkNDUwYWU3MzEyOWY2YzRmZjVjNGM2MDZmN2NhZGJmNGY3OGExOGRiMjk2MWNjOGM4ZGRhYjA1NzhjZmVkZmNmOTVlZjA4ODhhZmQzODU1MzdkMWQwYTA3NjQ4YTVjZTI1MjJkMDYzMzUwN2Q3NzU5M2UxYTAzNjZkMWVjZTg0M2RlNjk4NjdkN2FjNDQyYmE3ZGFkMmE5MGI1OWQ4OTg0ZTRhOTQ2YmJlNWYxNzJkYTQyNzYzOGIyYjYxMjA5MDQxZmZmNTBlNjBlYzAyZWMyYzBiMWRjNGJlMmVkZDEzZTg3YjY0ZDFkMTY2MzExNDU3M2NmNThhMTc3MzlmNDYzYTFjM2Q2YjIxMjMzOTAxODNiNTA1YzhlZWZmYjIwNTM5YmRmZWViNDA3NzZkMjBjNDU5YmFjNDU2OTk2OGZjYWZlNDRlYTRjZDYyNGE4NGJmY2NkNzg3NmRkN2JmNTVmODNhYzcwNDBlMzBmMzI2ZGNlMzI1NTg4ZTFiYTViYzA3OTAyNjVkZmRiYTA5ODM5ZWVmNTcxNjQxZThhMTIzNGI2Y2ZjM2EzNmE4NjZiZDZiOTJjZDcxZWM3NGUwZDRkZWI5ZTc0ZDE1ODIwMWFhNTAyZjA3YzhiYTM0OGFjMjZhYWY5YjNkMDcwYzlhNDBiNTJhNDRlOTMyNTUyYjY3YTJkZjA1YTdmMGYwM2M2MTdiNDhkYzI3ODIzNjZhMjMxZTBjNGUzOTM4YTQyNzRiMzZhYTk0NTBmZjkzNmJlMTMyZGNiNjkyODM4ZDY1NGM5NDU0MmM2ZTA0N2E3Zjc4YmE3MTE5MTlmOTA4YTE1YjMwYjkKK1NJRzogZTEzY2E4ZTVjZTdjMjY4MDkwOTA4ZDYxY2YyZjBhM2U0NTcyNDEyYmY1YWRmYzVhZGRmZTg4NTU2ZjE0OGI1ZmNiZTNlMWJjNjVmZjE2MTE3ZDM1YzlkNWRjM2IxMTcxOThmODg0OTI1YjQwMzViMmMwZGU2YzQwMmVkNDdhMDEKKworVFNUOiA3ODkKK1NLOiAgMzkzZDQ0ZGQwZGVkNzFmYzA4NDc3YmQyNWVkMGU2NjI5ZmE3Zjg4ZjA4MmViY2VmMDkxODk4ZTVjOWUzZDViOAorUEs6ICBjNTJhOTkzYjgwMmQ4NDU0MGQyNzU0NzlhMWFmNWUyODdkMTllYTEzYjM4MGZhMzA2OGQyZjJjNjhlYjk3YTA5CitNU0c6IDE0MmI2ZTgyNTAxMzYyZDU1YTA0Yjg5ZDU0MWE3OTY4NjNkNzc4Mzg0MGQzNGNiZGZjNTE2YTNjODQ3NzJmOTI0NDZmNWYwZGY0YzQ1YzZlMGRjOGVjMWU5YmIwZmY3ZWMxNjk2YTA5Y2Q3YWUzNGMxMGY4ZTYxYTlhY2FiZDQzMDNmMGE5MjQ3MjM3NjIxYzQ5MGU4ZDlkMGZlNDQ0ODJjNTYwZDA1MWI4MmIwNzRhYzNkOGU0OWJiMmFjNzE1YWM0Y2RlM2Q0NzA5ZDBlYTNhZmM1MWJmZGVmNGI2NTY3NzFmYmQ1NWY4OWRhOWZhNmRjYWE2MmNiYWU1NjEyMDhkOThjZmEyNGNiODEyNTJiODk1ZjZhNGE5MmM4ZTQwN2FmNmMxZjFlZjQ5ZDhkZGUxNTRmYmNiMWNhNDU3YTIwNGI1ZWE1NDMyZTRkNzFmYjdlYjI0ZDQzZjZmZTI1ZTdiNGM2NTliMGVlYmM0Y2JjYzhiM2NmZGUwN2M4ZjA3YjE4YTUxNTcwZTcxNjNlMzNiMzE3YjYxMzYwZjljZTA4ZDk1ZGUyYzMxNTZhZjFjY2M5YjU1YmNmODFlYWJmM2M0MDQzNDA0NmJiZTgyZTAyOTkyYTJhYzhiM2I0MjU2ODBhMjNkOTM0NzI2Y2IxYjdiZjI2Y2ViNTJhMzkwMjJjMDBhY2Y0MjUyNTcxNjdiODIxMTg1ZjY4ZTNlZDE3OTAzZDhkMjIyNzU0OThjMzlhOWU4ZGY4ODRlYzAwNTU4ZGNmYTQzYjhhMTE5YzJlODUzYjlhMDMxOGJiZWEwODdmOWNlYzE3Y2E0OWI3MDgxN2I4ZDdjMTcwYTg5MDZmM2VlOWU4ZjhjYjI3YTFkMGY1NzVhYmZhNjI3ZTg4ZjA4Y2E0YjkzYzMyOTdjNGYzMTcwNzJmNDIxYzVlNjAyZTJmODMxZGZiODI1NTFiZGNlOGQ3MTIxNmYwNWNmOWEyNzczYjkwZmM5M2I5ZDg1NWE5MWUzNWFkZTMzMmE1MDYxZmRiODJiMzA5YmFiNGY1NmUyZDU4NmE4NGM2NzQ4MWQxOTAyYzI2MWIzZjk3ZGMzMGIxODQ2MTlkZjlmZGZjN2EzMjlkMDYxYTQxZGYzMzIyMDIxMzNkOGVhZWVkZGI0Y2ZjZWU1MzUzNmUwN2FhZDExNTUzZGNmNWVkMWU5NDlkNDUzNTVmOWVmNDJjNzgzMmIwZGU3YzJmMTUyNmZiZWY4NmI2MzY0OWI2Yjg1YWU1Y2E4NmYwY2VhNmRmOWMxMjZjMWQ3OTQ4OWNjM2JmYzZlOGJmMDM0NmViMzBkMDE2NDNjMDEwMTUwYzVjOGQwZWI1MDEwYTQ2MTEyMjE1MTM3OTkxMDg1ZTU3NDkzYjIyZTgzNTI2YjdiMTcyYzZjNzM0MWM0MDMyMWU5Y2ViN2M4MmJmYmFhNDhmM2JkOGY1MTM3MmQ5NmQ0NzQ0NGZmMGQ4YmIyZTVmZDI2NTE0ZWI2MzkxMDVlMzM4OTVmZGM0MWY2ZGYxZmJmZGNiMDg0NjZlYzJkMjE3ZmM5OWZiMDEyZmU2NTQwYzBjNWE1OTY2ZWQzZTY2ZmFiMTIwMmFiOWRhZmZlOGUyN2U4Zjc0NjI4MjhkNjYyNjU5ZWEzYjJjNjA4Y2Y2OGUzMGRiYWM2MmZmZDgyMjlmNGE1M2Y1OWFlMTY4MzNiODFhMTU5MTYxZjE5MzY5ZjYwZjUxYzQzYTIxN2VmYzVlZmQ2YWI3YTkxZmUyNDljN2I4YTBjMTRlOWZhZWE1MzNkZTEzMzg0OWE5MjQ0NzY3NmY2Y2MxOGJlZjRmZWM3ZjM3MzE5NzU5Y2U4MGVhM2VhYzE4ZmEyZDlmYTAyMzA5ZTFjZTkzYWM2Y2Y0Y2QyY2IyYzk1ZjFlMmFmZjdiMmE4ODU2NDA1YTdiOGViYWJlYjQ5MDZkOWI5NzM0ZGE5ZmI1ZTVkM2YzMjJiYjViNTU5ZmE2MWVjOGY1MTVkYjkwNjVhYjRiOTFhN2EzMWQ1YzYyNTA2MWMyZmQyYmNmZTE3Zjk0YmJkZTQ3NzYzMDJiOGFlZjNkNWI1MmRiM2JjNzNhZTRhMzBjYzQ0MTdhY2IKK1NJRzogODRjNzE2ZTYwZGU2N2IwMjBjYzFhNmEyNGU2NTQ5ZmU1NmM2ZDk0MWE4ZWRlYWU0MDc2MjY2NjZjMzFjYjYwZGVlNmJlNWE3MWViZDc2YmFmNzFiNzUxMTRiY2NmZDM3ZDE2M2E5NjhiYmVlYzFmNzY5NzIxNTEyOTZjNDdlMDcKKworVFNUOiA3OTAKK1NLOiAgNzExOTM2NDBhMGEyYjIyZmIyMmQwMGE4MGIzM2E1NTE0ZjNkMTAwMDAzNGZjY2Q4ODVkOGVhODYzOGYwYjBmOAorUEs6ICBiMWQzNmY3MjNiNzA4NmQ5MjMxMTlmNDY3NTliMzlmYTFlNDAzOGM2NDE4YzM3OWJhOThiNTg0MGM3ZWE1MDY4CitNU0c6IGUwMjg3OTQ4YmI4NWEzOThlNmFmZmEyZDI1ZmNmZjhiZGI5MzI2ZjVkMTRmZGViNjA1NDlmNWZiZjBjMTgxNmYxMWNiZGQ0ZTkwZmVhMDM5ZGNhNjBmYWFkMTY5NjAwM2Y5MTUxNWM5YjI3Mjg4MmM5NWM5YTRhYjZlMjc3N2JkOTI3ZTdkODQ0MmFlYTZjZWE2MTljOWIxNTI1NWZlZDYxMmI1Y2MzMTU4ZmM3MDViYjdhNTA2ZjRhZmVjZjRlMzRlZDUxN2IyYzEyYjgzNjI2MTBlNWVhMjcwNDg1Y2NjYjNjOWFhOTdlY2Q2Y2IxOTYzMDkwMGYwN2Q5NGNiMjkzY2I2ZTA4OWE5YTc3YzAxOTQwNzNhN2Y3MTc3YjAyMzBkMjU3NjNhMmVmOThkNDc3MDRjYjJjM2FmNGMzYzFiNDk1NjMxYjRhNWIyMWIyZTU2YmZmMmVkZTAzZWE0ZmU3Y2Y4MjkxNzM0N2UzYTlkNGRiZWVmMzdkMWNmMTc2MTVhZGFhMGZkMTcwNTc5Njk5MTdkNDc4ZDAzY2NkOGY4Yjg4ZTVlNWFjYWU2NzMyYTgxNjFkZmI1ZjdkMDIxMjNjOGQ1YTU2NWNmNGRkOThkZmM5YWFmNWEzMzUwNThhOTQxY2E0MzA3M2YyNjU5NjE1YTcyZmU3OGMxMDFjNDFhZWQwN2YzYmNmOTgwYjBhNWIzZmJhZmRiYmVhOTJmZDg4OWNmZDUzZDQwMzI3OGJjMTVhNTlhYTE0MGMyZDc3M2I4ODg5Yjk2M2RjZWEzNjUzNjJlNDI2ZWY0NjA5ODQ1YzliY2U5ZjhhZWI1OTFkMWE0NjliMDcyYjQxMjA5ZjVhOGI2ZGMyMzk1YWQ5MDYwZWIyZTM3MDk3OGFlMzMxMWQxY2YwYThmMjA1MTQyZDQzNmJhYjZiOTU5NDNhOTdjMjNlNjFiZDE0YjJkOTU2NzJjYjkzMjVlOWFiMWZjOWVlZWFhY2NkNThiOWY0YWMxNTUwYmRlYzg0NDliMDM2MDM5NDk2YzVmMDdhNWVkNjRkNWQ4NTE3MTY5MDE0NGRiNWM4MWM4MWNiYzRjMTY3MThkNTJjNGRmZDE5NThjYTVjOWM4YmE1ODJjZDlkNzA2ZjI3YTc0NzQ0YzNhMDViZjFjY2Q1MWYxMDkyMDEwZDM2ZjE1NzhiNTc4YWUwZTlmZmE0NzA3OTA1NWVmOTRmYWJjOWZmNzJmNzM4YmVmNjg0NjFlYjM0MDRjY2VlOTUzZjVlZTg2NGM5NzRjZTcwZTkwMzdlMzM4OGZiYWYyODg5ZTEzNjZjYWEwZjY1MWUyMWIzMzllM2Q1NmI5ZDk1YWMzMGIzNTkyYTk0ODkxMmM5MGJmNTQ0NzNjZWJjNDY3YjA5YTM5NDNkY2FjNDg2OGFjYjViMzVlYTY5MWVmZjRkOGNjMWNkYTBjNmMwYTljMTY5YTRlZTEwMDQxZjM1ZjQzM2ZiNTNkMjYwNjdiMjkxMDU2YjFkYTY5ZmY0NmZiZWExY2E3MjEzNjU5YTk5MGQ1ZDVkZjE0MDZiMDkzZGEyYTMzYzhkZjk1YWIzY2U4MTFhZmI5Yzk4YzViZmQ3YzRlOTgxYjNlYTk0ZWVmZDJlMmZlOTU3MDdkODlmMzA3ZmE3NjgyOGI1YzY3NzQ5NTBhZWU4MDYyNjcxNDI1NmUxOTdkYzdkYTk3MjE1OGM3NjhiYmVlN2ZiZDE2OWVjMTViNGJiN2JlNzI5NzZkYmVkM2U1MTI3NjZlZjIyZWYzYjgxMmJjYWM0YWEzMTE1YWZlODNkMzEyODRhZjhlYWNlYTRlZTQ5YWZkNDJkOWM0NGZmZjJkODYxYzA4NjI5YjU1ZGFlMDBmZjY3NGZiMDI4ZTczOGIwNWRjYjM4YWVhYTY5NjNjYzNmYWFmYzdiNjkyNDVhMmExMjJhOTZkZDJmMDNhODI0ZDcyYjBmZTBkZDc5OGRmNWM0YmI3NWE4NzMyNGU3NjRhNTBhNWZmNTI1NDdhZGE4ZjhmODhlNmYzOGFlZTQ5ZDU4ZGRiMDEyNjQ4ODU0Y2Q1OWQwZWM5N2JjM2Q1OGQwYWQ0NDkxZjA4NTkwNzY3Y2ViMQorU0lHOiBhOTcwMmEzMzk1YWNkMjBkNzU0MzczMDk1ZGM2MTQ0NTU4NGQ4ZTU3MTA4MGUxNzlhZGNiYTMxMDZiYjA2YTdjZTRkNDYwZjEyNjFhZWY4NjQzYWIxNjM0ZjQ3Yzk0MTRhMzJlMTgzYTMyNzY5MWU2NTg0M2RkNmMwNTUwNzIwNworCitUU1Q6IDc5MQorU0s6ICBiZmM5NjI2YzkxZjM0OGZkYWY0NjlkZWYyMzAyZTllMzhmOTA1MWU3MzQ5ZTQ4Zjg1MGNmMzUyYTgzMzFhMjhiCitQSzogIDRlODE5MzA2MWM5ZDY1YTgyYmNiMjVkYTA4OWI0YTgwYmE0MWIzZGQyZjhlZDFkYzgxZTFjZmQwM2M4NDkxMTUKK01TRzogMmYxMWY0MGIyYTE5ZjY0MGMwMDQ0YzdiMTM5NjgwYzNjM2I2OWYwMGZmOWY2YTQxODZmZDdkZWQ1NjljMWQ4YzU3MjBmMTlkZDM1Yzc4MTZkMDhhOTRjMDgyMDRlNDc2NDNlMjY0ZDQyNWUyMWNlZmI4MzEyOWM5MDlhM2Q3OGNhZjcyYzQ2YmYxYTcyOTc2NWVmNGI4Y2E4MDNmZGFmODA1MmZmYzZjYzRhNmI1NzlhMTYwYjcwM2IxNTM1NWM2ZmNkM2I5YTJlY2JjMjY3ZTYwZGQ1OWY2YTJiMTk0MjBlNTU3MjdhODBiMGJiNjQxNjdjODNiYTBjODA1ZGVlZDQ5MWQ5M2U3MjNmM2I0MzI2M2QxNzQyMGI4NWJlODZjMTY1YzU1Mjc3OWRiOTYwZTBhYTllYjRkOWYzYTE2NGE1YTIxZmFiM2Y1MDlhOGYwMTk5YTY5NDNjNGIyMjNjZjlkYWNhN2UxMTBlMDU2YTgxZDljZTBlMGMwMmFjMjY1ZWVhYzA1ZWNkODQ0NDg0NjhhNGQxMjJiODdhM2UwNGMyODM3ZTQzZDIxMjcwNGZkNDFlN2YzZDE5OGEyZTc2YmVjYTBlNzAyOWM0MzJhMDY1NGVjZDQ0Zjk4NGM1ZGYwNjc0MTk2NGQ4MzcyYzg2ZTE2MmE4YzU0MTg4NDliNDFlNTcxZmViODNlYjQyZmJiY2RkYjhhMDgyMTQzOTA5ZWFhNTAxMmI5Nzk5MzFkYzdlM2NjY2I0NGM3OTFlMDRiODA2NWVlNjNmMDU2MWRhMWJiZjM3YmY2NTAzNDc3ODc5Y2ZiYWY2ZDlkN2Q5YTc0NzU1NTNmNTM1MzVmODQ3YTc2ZGMzYjJiN2EzZDFkNDcwYmJlMTcxMjRhODhlMDNmZTk5NGJhMTBjMjQyMjFlMzllM2QwZmY1M2M3OWUyZmFhZmExOTAxMmQ1ZWYxOTJiYzZkNTI2MGI2NmY5OTdiNjQ0Y2Y0OGQ5OWYzODk5ZDdjNDg1ZTY4NGFhMWU2ZTMwODU1Y2Y3NWMyZDgwYzdhM2VlNDM1NGZlMTNjNjc2MDkxYzg2NjczNzNkMzBlNjBmZjhlMDlmZWRlZjE3NWExYTg3Mzk1ZmVmYTA3MjJiZjZjMDFjNjU1NWNmZjA2ODg5MmFmZTk0ODZjYjFmY2M1ZmI2NjQxZTgyZDg3MDc5YmE1ZDdhOWMxMzkzNTVkNmMxNGM1MDdkYmQ1OTQ3MjRiNTUzNTExMDA5NjViZTllNWRiZmE3NzA4ODc4YzRiMjlmNGQ1NGMyMTc3NDZlMzI2YWIyYTU0Zjk5Yjg4MWQ3ZGE1YjExZWRiMDhhNmQ3OWQ4ODU2OTFiMWY3MDg1NTE3MzEwYjMwOWNmOWIxYjcxNGFhYmM1YzE3YTUwOWIxNDBiODliM2Y5ZGNlZTUwY2FiNDQxYmY1YWQzYmJjMjk5OTBmNjI3NDA2MTcwYTdhMTBmMmQ0N2RmYzkyNTYxNTRmOTYyMzA4ZTc2OWEyYWIxYjJhMDBlMjdlMzI3ZjBkMWZhMTY0ZDFlMzhlYWQ1Y2VhYWUyMzhiYTUyNmY1NGI4MWI0NWRlYTZjODk3NDE4NmIxYjY3MjVmYTRjODNlNjJmM2UyNTRmNzI5ODcxYmRhNGRjNDQ0YmNlNzhmMDkwM2ZhMzE4ZWFhYzgyMmE5NTUzMmFiMDE5ZTljZmM1NjE5ZTJjMjA2N2YyNThmNDM3NWQyZTAyMjJlYTViZjk2YTI1M2EyYTNmYTllZWEwMmMzZWVjY2IwMjhjNzZiYzYwZDM4Mjk4Yjk1YjlhZmU2NjAzMWIxYTJhMjYxNTJmZGFhN2VmNGY4MzdhYmI1MTE4NWRmOGIyZWY4NWFkMmM5YmU2ZGZiYTc1ZTM3ZGM3ZDEyZTE3ODdmYzU1Zjg2NmZkMDY2ZjEyMjkxZGZmMTk3NmFmYzEwZGE5MTMxMDFlNzA0OTVkODc4MzM0OGQ2MTFiMDExZWM2NzFjMGRhNzM3YmY5NjJjZGNjOWU0YTgwMGI1MTM5MzVhNTZkMDg0ZWE2NGE3ZDRlOGU5OWVlOTQ0MGE3MzYxMzJlNDJjOTA5NTAzYzIyMjRhMTQxYjI1Y2UKK1NJRzogNjYwMjQyYzFkY2YzMjkxMzY5YzY1YzlkN2Y4OTg3MmVhYjQ4MjIwMGUzNDRiMjk2ZTMzNmEwYTJlNjMxZmE3OTYwMjRiNmUxMTE5YzI3ZDUyMjY0YTQ5ODE1ZGQ3ODE5MjdhN2RmNDY3ZTg4YjgwMWU2ODRmYzYwMjI5NjI1MGUKKworVFNUOiA3OTIKK1NLOiAgMzkzYjc2OTQ4MjM3NWI4MjE0MjdhNjZkMTZlNGY1NTE4NWI3YTNiNzMzOGYxYTA2ZjY3Y2RmYTdlMzVjNTQxYworUEs6ICA4NGFmZDcwNjc4ZmZhODVhOWY2NTc0Y2JjZmUzYjE1ZDA0YTlmZDE1MDE2ZmY4NTUwYTk4N2M0Yjk1MWM3MTIyCitNU0c6IDhhZTgwNTNlMDNiZWJlYWU1NDQwNDNiODQxNGIzODUzNjRhZGQxNjczNzM3Y2Y4YWIyMDE5M2Q0YWFiYzhhNzhlMWQ2OWI5YzdlNTI3MjllNjkzMDc4MDZlOTI3Y2UzODA3YjA3YzY4YzgzM2M0ZmNmMTZkYjE1ZTdkY2U2MDRkMTc5ODkxNWZkNDIxMTY4OWI0ODY0NjQyNTAyZDM4ZTkxYjE5OTdiNzE4MjMzMThiNjlhYmU1YmVkNmY1ZTMwMTViZmIyMmRmMzBkYjM3MWYyMjYwYzVjMjJlYmE2MGRmMzliM2VkZDNjNGQ3YTFlMTExY2Q5YjhhYTQ2ZjY3YmQwY2YzYTcxN2FmMDZlYzBjZTU2NzAyOGUwNmU0Nzk3OTM0YWQ2OWIxZjViZTQ0MGZmMzdhOGEwMzRiMTUzM2ZhOTQ2NDI0YWM1OTU0MDBhZDI3ZDNiZTc2ZGM4OWJhOWQ2YzQ5OTM5YTA5ZjJlNDAxYzhmMjBmN2Y3YjRiOWU2M2I5ZDU1MjAxNTM0YWI0Y2M3YmU4ODVmMDQzMmEyYzY2NzNkMmU3NjUxOTRkZmZkOWI2MDk2ZGQyYjI4NDM5MTg3NTA5NTlhOGRkZTRhM2FiNDA3ZWIyZjdlMWE0OWMyNTk3ZTMwODA1Zjg0ODBkZDBjYzgyNzJhMzIwYzAwYWEyYjIxMGY1NzZlNDI1NzdkM2FhNDE5NzAzNjk3Y2E0MDZkNDNhMWE0Zjk5YjA3MzM2NjRmNmQ2YjI0MDNjYmExYmRjYzUxZjU0MWNmMjQyMzYwNzA1NzA1NDA3NTVjN2E4NjMxZmNjMmYxODkzOGZhMTFiYzI5MTE1NWIzOWQ3YTc2MmExZmY0ZGNhOTdiNDQ4ZjcwZTJkM2RlNDQ3Y2IwOGY5MThlYTIwY2I0MzNmYTExNWUzMDg4MGM5NmM4Y2Y1ZjBlYmJjZjQ4MjMwOWRiNmRjMWZiNjRlMTdjMDRkN2NkZjdhOTBmNDAxNGQxNWFlNzY5NmI0NDQyM2IwYmEwODRlZWQ0ZDNmYjI4YzFlZmIzOTgyOGFjYTJmNDBjYTZkZjM0MmMyMGU5NWY4MDA2YjI3NjdhODNmNTBjMzFmY2MxNTgxYTA5NzUzZTc4MjkxZjBkOTkzMWQ5OTJhZDM2MDQ0NzNjZWI4ODVlY2JlNzg1N2NjNTJhZDU1ODUzMzRkMTQ4NWQwMjJlMTA2YjcxYzI5YmRmY2YyM2VlOGE0NzVkZjJjMDkwNTMyMzU2YTZmZmMwMjIzMjMxNzk4OGEyY2JjZmJjMmEzNmI0YjQ4M2NiNDQ1MTBlODU1OTliNjEyNTk2YjYyNjU3MmIwOTk2ZDhhNjFjMGVlM2VmZmYxZjdjNzFjMDVmYjVhOGQ4YzVkMDlkOTI0ZWJhYWM4ODAwNDUxYzlkYjI0NTY3MTBhMjc5ZGZlMmQyMmY2YWVhOWRlMzE4MDFkYzc0MjUzNDM2MmIwZTgxMGU5OWU4NDFkYmI3ZjBjZjlhZjFhZWY1NDJhNTJjNzc2Y2M1MWYyODczNjhmYmU2YWQ2NTFmYWQ1Nzg3ZWY3N2M3MzUzNWYzZGZiMzYxOGNjOGYwZGJiNTQ5ZGRjYTliOWJmOTExMzVhMzQ1NjAwMWE0NjIxNWFkZTM4OGU3Y2ViOWZjZGZkMGQyZDBhMDM1NmFmYmUyY2VjMWMyZTc4YjRkOTk4ZDQ1NTRmNDYyMWYxMTUxZGQzZmZkM2JhNGMwYmM4NTJmMzExNzU4YzVkY2E0MjVkMThiYTE1YThkNjdjYTQwMWQwZTZjZjI4MGNiODgzODRhMmRhZDQ5ZmFlMzliYTJhNzdiNDY3YjMyMzhhYTI4Y2ZkMTM3ZTVjNWMwZmY5MDAwZjhiMDZhMjE5MmUxNjI5MjA2OTIyNjVkYjI0YWI2YWVkZTUzNWUzMWMyMDkzYmU1N2ViZjg4MDVkZjE3ODg5MTRmM2E4ODRmODg0MTc5MDE1ODA4ZGI0ZDMwMjBmM2U3OGJjMzQyODVkMjMzNzYyZTg5OWViZmYyODQyODIxNWUyNDQ0MDRkZTI5MTcyOGZiZjQxMjRjZTViMjQzNTI2MGE4ZTM0MTE4MDA3NWE1NjUxZTYKK1NJRzogMzFmOThjMGEwOGZkYThlNzM1YjU3MzY2YWExYjgzYjkzZGFlNjNiNTgxMGM4MjFkOTljYjM5ZGY1MjFmZWFjMDdmM2M0MTBiMjdiYTMzMDc3NTdkNjA0OWYyMjQ1NGZiNmRlOWUyYzNjMjQzOGQ2ODMxOTA5N2QxMTJjZmRiMDcKKworVFNUOiA3OTMKK1NLOiAgMjZjYmMyNTEwZWU2ZWEzOTBhMmNiOTQ4YTAxNWQxMzFhYmY0YzA5NTQ5MTU2MjBiNzgxNmFlY2Y0ZTExZGE2ZAorUEs6ICAxNDVlOGRkMjJiNDQwMDI4OWRhZmI2MjZkOTVhOTRjMmYzYjY5YzY1MTk3NzE3Y2JkY2Q4NTA5OGM1NDkyMTA3CitNU0c6IDljZWJlMjRiNGY4YWRlODY0MzBlMjc5YTNjNDMzZTRhZTE3ZTAwODg1MmEyNGYwODY5MGNiYzNkNzVlM2I3ZjIwMGRhODk3YzI1Zjc0ODNiMzc2MzdkNGJjMTEwMDhkOTIyNGNkNTgxZmJjMDM4YWRhZGEwMmQyNzFlZDJhNWQyODVkODQzYTBmOGI3OWUzNzk0NWRjMzViYzI2NGJlY2Q4MDQzMDdlMWQ0NDIxOGE2NDNlNGI1OWE5MzExZGU5ODVkMjRiNGMyNmZiMTQ2MDNiZTVkYmExODM5ZWUwYzhkMmVkZTZjYjUwYWY2N2M4MDQ1MTkwMzdiMWIxNjYzMzE4Y2ZjNmU3NWQwZjA1MWRiYjVkM2VhZjNhYWQxZjc4ZWYwY2ZmNDhkNWM1NWIyZmQyNWRiMTUzOWQwZjAyZGFlOWYyNTE0OGE4ZDMzOGI5Nzg3OWJiZDM5ZGY5NjFhYTJjMzk2MzE1YTJhODZjYzc4MzU4MWU2N2VhODQ0YWNmZTg2NDU0MjhhMjdiOGQzMmVhMzA2NGUzYmY2MmRjZjU4MDEwZWM0MzQ4ODYyZmFjMjVlM2Q5ZmNkNGU1ZDY1YmU1OTkwNWQ4MTZkZmI5NjQ5OTJiYTdhY2VlZjhjMjA3NWEzMTJlNWZmYzRmOTUzMGVhMjBmNzdmOTNlODFjZjhhMDE5ZGMzOTQ1NjM0MzY0YmFiZjc5NzcyMDQ1YTBkYmFhNzdjNDdhMjJiNzcyMjNiNzA0ZGViZDJkMDAzZjZhNWM3YmY2YjE5Y2QyYzQ5YjYxNGZkNGQ0N2ZkMjUxZmU2MjJjYjk4MTc4NWMxNDZiZGI3YzFkMmVhMDJiMTE2OTIzYmY5OGExYWZiYjc4NThhZGYyZGY5MzhhNzkwZWMxZjkwNzRhZGI4ZDFhZmI1NjMzZmE5NjFhODQ3NjQwMTBkM2JkZWQxYzAzM2QyNWFiZGI0YjAwZmIwNWVkNzY0MGZhZTYxODc5ZGY4OGYwYjA5ZTNhYmQwNTdiOWE1MjEwOGE5YmM5ODVmYjczYTVmMjlkODRkMWNhNjkyMWI2MmYxYjcwM2M3ZWViNDgxNWQ5ZGQ2ZDA2NjczOGRiMTE4YmFmNjFiMDQyMmYzODhmMWJmYzllM2E5YmVkODNhMWE3MjdkY2MyNjZhOTk4ODM2NDg0NjgwN2Y0ZDU1MThiYzJlZGQwZWNiMzQxM2MyNmZkMGM3OWI3NWQ4Y2I1YmNkODVjMDZmY2NlYTRkMDNmYjg5ODhkZmYzZWQwY2M5ZGJhZTc4ZDZhZThkNWZjNDAyNDYxN2EyM2Y1MmJkNjE1Mzg1ZDRlZWUwOGY5MTM0ZWIzYjI1MGM4ZjgyMmI0N2Q5MWU4YzRkNGMyOTI5ODAxNmU2ZmM4MWYxZjEwOTkyNTNkNzk0NWUwNzk4OTU1ZGEwZGRlMTRlYmI5MzRlY2ZhZWVhYmFlODc4ODNlMWNjMzk4MDY3NDAwZmU0NjJhMmM0ZTlmMjMyZGI1Y2RkNjFlYmE5NDkxODhjZjAxYjIzOGJlN2FkYTkzOGYwMDJkYzNhZTMxZmRmZDQyNWM4ZDQ2ZWEwMzIzMjNhYWYyMGRkM2RlMjUwN2QzNmJiNDVmYmI5MWM0MDk2OWE5ZTVkYTIwZjdmOTM2YjBmNGIxMzdiNjJmZTJiYTNhNjY3YmMwMzYyZDkzZmM1MGQzZjIyOTVlMTY3ZmNiYWIwZmIzYTM5YjdjYjAyNGI1NzhmOTQ5MGY3MzRiMjhjOWNjZjcxOTJmMTgzOTQ3ZDVhNTEzZWZhNDkxNmU0ZDgyYjJhYjRiYTdlYzJmZmJhMjEzY2U4MmFkNmVkM2IxMGU0ODU1M2U3MzNjOTQwYWE5YjljZTcxMzM3YzZjMjgwNWRmYjhkZDY2MThiNmQ0MDkwYTNkNmNjOTYzZWNlYTI2ZDFjZGMyYmY1YWM5OTljMTEyNzYxNjhhOTMxZDgxNjQ2OWQ3OTA4M2MyNDA4MWE1MGRjYmQyMjI3NTIzODUyNjdjZTFiZmMxZGI3NmIxNTU0YWQ1N2UzNDc1MmI3Zjg5ODMxNDdjMTE2ZDRhM2ZhZTZmNmQ1N2U2NTRmZWRkNzM3OGQyYjQ5ODllYQorU0lHOiA2NzEwZDBkZDAwNTQ1YjQ0NGNmNzE0Yjc5MTQ0ZmU3OWYzOGNiMWMwZjViNzQyNDhkNGYwMWZlMzYwMTE3YTI2ZmZlZDRhM2JmMjEzMjNiMjhhMzkzYWU5ZGVlMDdkNjllNTgzZTMxNmM2YTU3M2QzN2M2NDRhOGQ2MmM0MDUwNgorCitUU1Q6IDc5NAorU0s6ICBiMWY1OWUzYzIzODBkN2FhNDE0ZDBiZjkwODkzYTM4ZGRkZmMyOTM4NTkzMDNkMTZmMDBkOWVhZTZjYjM0NTBlCitQSzogIDg0ZTNmNWY3MmYxOTA5NWIwZjUzMzg0OGE1YTkxZDBmMDc0M2I4ZTNhM2UyZjUyZmNiZDdlYmU3YzViNWE5OTgKK01TRzogYzYxNzRjOWFkMzY4NWRkNjQ4NjM2MDE3ODM3YjhkOTkyMjAwMzE5ZTlhNWEwZDI2ZDk0ZDJkYTc1ZTJjM2FmZjQ2ZjQyZDdiM2FiYTQ3MmI3Zjg2MGIwZmUxZjY5NTUyOTczMWZkYzhjZjBkYTcwNWQxZDA5YWNhZDA0ZjAxMDgzN2VjZWY0MTlkNTdlOWVhNmNhY2YxNjhjNTIxNTY5NmY0NzFmM2NhYTg5NzYwN2M2MjlkNDQzZGUwOTlkMzE3NTNjMjQ2NzdkOGQ3NWY0YmYxNzI0NjgxOGI1OGFkYzA0MjRiNzYyYTE5MWVmMzlhNzA3NmE1YWQxMjYxNGNmNTRjNDdlYjA5MDhiYjg2NjUxOGM1ZmFjMWNhMmQyZTViNjU3NTIwYTJiMzY5NWM2ZmIzNjBmMTZmNGFiMzU3OTk4ZTRjMGU5NzIzMWQ2Zjg5Yzk2OGRjMjllY2MxYWE5MWZhMGQ3NTQzYjVkMjI0N2IwZDg1ZTQ4NzQzYWI3Y2M4MTVjZmRhYTgyYmY2OGNhNmQzZTIyNTBiZmRhMjcwMjRkNjFiNDc0YzZiODE1NGFjOGQxYjVhMzYyMDk3ODI1MTVjMTY0NjY4MGQzNzA2OWI4YjQ0MTJmOTUxYjAyNWE0ZDU0MzYyNWRkMDIyOTBiZjAzYzY3MzQ2MTNmOTliN2E0YzNhZjVjNWY5ZTlhYzM0NzQ0NjVlNjQ4NDIzMDE4ZDQwYTZhZGJlODhhMzMwMWQzZDI1OWIwNGVlNDRjYzA1NjJlZTBkZWQ0ZjVlMjZhZDk3N2FiNTYzMWY4NTc2OGRiY2U1M2Y2MTZjMDI5YThiOGY5MzNlMmE5MjY0YjFjODFmNTE3ZTlmZjU4YWI5ZjQ1YTIzZWVlZDQyMDQzNThmOGZmZjBjOGY5NzVlZjFkZmE1Nzc2YTVmNzc5M2JhZTJmMjgxZDdiMGNiZWYyNDBiM2ZjNmJlMDU4ODIxZWEyYjgwMGZmZmU1NWE3ZGUwYWZjOTNlZGU5YzYwYzhkZTAwNWFiYjlhMmM4OGY0ZTYxZThkZWIzMTcwZjEwNzhhMzZlMmQ4ZjJhNTgyMzliZGVlNDk2ZTkwZDEzN2QyMTEwZjBhZDg1N2E4OGIzNTI3NjY0Zjc4MTkzOWUwYjJmNzY2MzRmZjlmNmM1N2UxYzQzZjU4MjQzMTcxY2Q4NjJlZjQyODQ1NzYxNzJhZjFmNmMzYmQzN2Q1ZDc0YjI4YTdhOTg2OThiZDc0ZTU3YmJjMTQyZTY3ZjcwM2Y5ZDYyY2RlNzYxYTAyMjY4ZmVjYjM0M2ZjMDE0MTg4MzY0MTRmMTIyMmNhMjRiY2RkNjlkMDA1OTAxZGEyYTBmOTQ0NjVlNGQ0YmE2ODg5ODgxNmJmN2UzZTRiYjc5YzhjYTU5OTdmYmE5YThkZjg0ZmFhMmQyNGIwNDRjNGVhNjEwMjlhNDZjYmE3MDM0MjFlMzYxZGZhNTJjYWFmZjNiYmFhYjdmZDc1M2YyODU2ZDdjMDgzYWViOTc2OGRhMTFkODIxZTJkMzA5ZjdhNzM1YzM5OTY5MmRhYzJmMjYyODQ2Yjg5MWJmNjQ2MWFmMjNjOGM3Y2UxZDRkOTAzMmMzYzE0MGY3MzllNTU4NGMzNmYwNWVhZjQzNDlmZjQ1NDVmMjgzYTRlMGZlYTQ5NDMwYTFiMTgwZDA4NzFlMzc0MmI4OGNjYjU5MTEyNGZjNDI3ZWQ2NzNiNWYyN2IwYjBhNmY1NGFmMjJiYTRhNmQxYzZjMWRiMmExZmNhYTZkOGEwMzA4Yjc3ZWYyZDBjNjFiYmY1MWI5NWYxZThiNmFiYzUwNDFkOTdiNmI2ZjFiNTY5YjNmNjNjZWMwNWNiNTY3YWFlYTEwNjcyNzA5NmVlOGE5ZWE4N2I4ODA0OTAxZjdlODhhNzQwOWM2NmYxNTJkZTlkYmZjYmUzMTk1MmU2ZmQ4M2IyODc3YTc3NWZhZTQyNWIzODUxZTBlZmY4NzkyZmZiMzg0OGY4NGE2NWNjMzE3MjUzYjI3MjQ3NWU3MTdlNDllOWM2ZmY2Yjc4NTlkMTFiYmE3YzQ0MjhjODJkMTc4OWUwZGNhNWJjYWRjYTJmZGIyNTllOTgKK1NJRzogNjBhZmMxZTk5MWZkZDI3Y2M0NzJiOWFjYzlkNDA1YjRkMmI5MTMwODkyOTBiMzExYzRmYTg5MWFlMmVlYTA1NjcxZmRlN2EwZWY4NjU1N2JkODY3ZDFjMGI3NDdjYWYzNTIyOWQ2ZWY1MjhmZTNlMGQwYmNmNjMwMzgwZWE5MGUKKworVFNUOiA3OTUKK1NLOiAgZGI0NjFiOWY3MDdlYjJjZDc3NDhjNDRjOTk1NjJmMTMwMjM5NzQ4OTM1M2RmNWYzMDM3OTdmZTBkMGI1OGRlMQorUEs6ICA2MzUxMTZkYThiYTVhMzZhMzc3NzI4ZTI4NjE4ZTc1YzU1OTJhZWNjMThlMzQwMTFjNGM0MjU5MTk3MGI3MzY2CitNU0c6IDFhMmFjOGMxYjllYTA5OWI4MzFhNjgxMmQyYjQyNjEzMDkwNThlYTU4ODNkNzBiMWM2MDdiOWNkM2ZkZmRiODZlNzk5MDJiMGZlODllODBlYTdjNDc4MjA3Njc0YjJkODAzYjBiOWNhMTQ3ZmZlNjJlNTk0ZjUwNmM3OTZkNjg5OTdjZTQ4MmI1MWE0NmU0OWI0YTVkODU4Y2RlYWUyYzZlYzliNjk0MTk4ZTY4MjJmMGUzM2VkNTdiZWRiMDMzNWM3ODkwYTcyYTdlZTNjMjM4MjNiZTc5YjdmOTQ3MWUwMzNjNzlhZWVkNTJlNTc2MGZiMGNjYmI5ZDM4ZmRlZDhiNDczODNjMTkxMDNjZTQ0NzA1ODM0YzU5ZGRkODZmNzAzMzk0ODYxMmQ2NjYyZjUxNmNlNGUzOTlmZjIwMzYzY2M3MjgxYTY5YjJkNWMzMDdiMTBiNzA0MTUwMTg0ZWNlMzJmMzkwZDc3MmNjZmE3ODQ4M2JiNzdhOWZiYTg0NDI1MzY2OTg0MTcxY2MyYmI2MGIwZWM2YzYyOGQ0ZTkwMzA3NDZkYWMxY2FiY2E2MGYwNTY4MzgxMzM0NmExYTViYzE0NzI3NTQ5Nzk1YzFjOTI2ODY5ZTFhYTI1MDkzZDU5MWI0M2UwODZlNDNhMDRkMTcwZDk0MmM0MTY1ZTFjNWNlNzZjM2U2NDk3M2Q5MTM2ZjkzMjViZWU4MjE2ODJmMTA0M2U5NTFiMDI3NjdmM2ZiNDU4ZDAyNDQ5YWRkM2U4YTY2ZTUxNmZkYjFlZDU4MGUwNTZlMGY3OGVlMzNmZDllZTMyODA5MTJmYWUwN2ZlMWVhMDI1MjdjZDAwMWQ2ZjZmMmY4OWVlNjQ5ZjUxNzQxNGQ1NmY1NzM1OWE4NDY4OTFmMDIyMmMzMjFkN2U3MDgxNzk5NWE4Y2Q4ZTk0NzYwYjZlNzQ4MzJiYWI2OGQ1NWJjNDY0MTg4NDIyMWZkMjlmMTIyZDg3YTlhODY4YjZhNjA2MGM4N2IyMzgyY2Y3YmJkZGE0Y2Q2YWFhMWJiYzhlNmQ2MzRhYjU4MGM4NjVmNWFkZDZhMWQ1NGU2MWE2MDdkYzJjMzdiMDhhOGNiYTZlNjEwYzEyY2ZlYmVmOWM5ODllZWYzYjc4MmFjYmQxYmNlYzVmMDRlODM1Y2ExMDEyOThiNWU5YmRkODgxM2E3MWIwZDQ2OWZjZjEyNzI3ZDNkZTFjM2Y5N2RkYmM2YWIyNjU4NDQwZGQ2NDIxMDE5YmM2OGYzNTZkNmYyNTUzNjg2NTg1MWQ5MmQ5MGZlOTk2OWMzYjdjMzVhMmU4OGNlMTUzNDc2ZWMzOTczYWY5MzU5ZjE2NzdhNGNhZjFjYzQ4MWM3MWJkOTAyMjhmZjVmYzZkZDgzYjhhNjk5ZmZlNTE0OTI5ZjVjOTVjYjRmMDRiMDBkZDE4YTI4NzJjNDE4NjhkM2JlYjc2NDk4ZGRjOTIzNGI2M2Y1OTlkNzA3MTgwMWRiMmMyODc4ZjdiZWY0ZmZkZGQ4MTMyMjZmMDZkYjg0ZWIzMDIxN2E3MTgzMDgyZTNjMTI0MmJiNmQwMWNkM2E2Y2UyN2JmZjE2YmZiZmRkNzViN2U1MTA0MzEyYzQ5YzQzYWFkZmNkNWI0ZWRiYTBmZjUwZDI4OTBjYTNjZDljY2EzM2U0ZmM2OTRjMDU3YzQ3ZWJlMWMyMGE0YWQxMTVmOTg1ZGM3NDQyYzZmNmRhN2JlNTMwYjY5MDIyODljYWI5Y2ExMzljNmIyNGNiODBmZmRkNzgyMzI0ZTYwMmM0NTkxMGRiNjNkOGI1YzQ0Y2EyOWQyN2Y1NmRiZjAwMTg2YmE1ODNjMzRlMTYwMzFkZjM1NzU0NmIzYWI5YTNkZDY1ZTkxZDcxMjhjOTM5MTk1ZTY0NmEwZjBiODliZjVkZjA0YmEyMzNkNmExMmEyNzFmN2UwNGFhNDVjZGE5OWI0YTU1YTIxY2JiYjczODUxNWUzMmM1NmFhYzI0OTYyMzJiMTAwOGE2NzYxYzgwNDVhMWZlMGY5YTM2NDQwNDdiNTk2NmE1OGE2MDA0NjZjMWIxZDExZGRhZDVhYTU3M2M0M2ViZGE4ODdlMTZhMDUKK1NJRzogZGQwNDljYTc5YmViOWVhYzMyNWFjZjQ0NjcyZmY1NzhhOTY4NTAyZmUxYmNmNWVhMTlkNTJjMGY2Nzc4YzdmMWM3YmJmNzQyNzQ3OTA3Nzg2ZTYwODEyMzkxMWE5MjA3NzhkMmY5NTk2ZmUyOWJlN2NjMjhmZDAwOWQ3YzQ0MGUKKworVFNUOiA3OTYKK1NLOiAgZjVjMGE3ZjhmNjU4NGM1ZDJmMmUxZDA4MTBlOGU4NjEwM2U0ZTJkNDVjZjlhNzIxZDhjNDdmNjc0OTMzOTZhNAorUEs6ICAzYzZkNmNjZTQ5NjMzMTQxMDc4Njk2MTMxYThkODRlZDgyM2YzMDY2NGIyODlhZjlkZDMwYzY0MDdmNmYwMzEzCitNU0c6IGQ2OGFiYzYwOWE3YTBjZTI1NjY5OWViMTcwNDNkZWZlMWViODIyYzk3MDhmNjU3MThhMDY1ODFmYWIyMTEwZWMyZGIwOTIxM2JiOWUwZjM2MTJjZTRhM2Y4ZmRiZTc1N2E5ZjBlYjJjM2ViYTQzOGE5MDg4YjE4ZjZjNWNhYWJiZTVjODJmN2E5YWIyZmVjZjBmNTg1OWQxNzVlMTM5MjYzMDMzNzQyNDU4ZjgyYTZmMzg3NTZjZDViY2RmOWUwNzM2ZGIyY2FiMjBhMGNkM2YwZjFjZGJlYTg1NTZkODQ5MDkzNThkZDhmNjlmMGRhY2Q0OWFiZjhhYzFiZmU3NTk0MGQ2OTM5ZTZhNTUzODViNWFjZTdjZTFmZGUxMjA2NzlhYjZlYTdhODlkMTQyNjhkMjlmZmI0NmRmMTA1YmYzOTA5MjQyYzY2MDVmM2UzZTJhYjc0NDg5MzdkNmRiMmJhMDU0YzdiMTRmNDMyZGI0MWRjMThhNWI5NTczMzZiN2Y1MmQ5NzhlYzAzZTdkNTc2NGU5YmQyZjRiNjg5NThkOTM3YmYyOTgyM2IyN2VmYjMxZTI1YjQzOTI1YzRkYWNiZTY3MThhNjBmZWEzYjMyNzBlN2I3NmIwZGUwZTcwZjdmYTNjMTJjMjE1ZWY3MmI5NWRjMWI1Mjc2MjM4MTc5ZGZjNTJmYzQ4ODU5NjQ5ZmE1ODJkMDVhNjBkZjY4NTk5YTFjZWVhNjRmNjQxMmQzZjg0OThhZTJjZWRiMTI0MjQ1ODgzYTI0MGJjMDg1MWYwZTMyNDk2NWJlMTIwNDg2ZTFlYTg5YTAxODJkZmE4ZWFiZDNiOGZhNjZhOTljNTE0OTEzODlmM2M4M2EzY2RiNDI2N2YzZTRkYmM5OGYwYzQ0ODU2YjA0NGRjODhkOTBlZWVlODQxNWJmNzNkZTE3MWFmZTg0YmU5MDM1ZTBkYzRjODBjZjA0MjI0NjlmZTBjOWJkMWM2YWE2NTRhNTliNWUzNGVlZDM1MWNkYTI4NzEyNjlhYzQ3OGU4ZDM4MmU3NDBlOWFjN2FiNGRkYzRjMGRlZjBhZWFiNzk3YjZmMWE0MjdiOGU0YTg0OTdhMGI5Nzk3ZGFkY2QzNWM0MTRmZDU1Yjc4MzEzMGY2Y2RlZDM4YTQ0YzFhODkyODgzMDdlYjg0MjU0ODQxMzdhOGFlZGIwMzBkNTRiNjE2YTgyZTNjNWFjZmZiMDhkNmNjMWE2MTc0NWMyOWFmYzY4YTBjMTgzOGIxMzkxNTljNWZhNjY3NGQ2NmI5ZTMzODExNWFhZDRiMWI0NzEwYWE1ZDk1MTdiY2Y3ZTFjYjEyZDRlNmE1MWMxMTc4OWZkY2FlOWQ5YmJlNzhmNjlhMzNlNTJkZjE4MzNjODc2YjAyNjg3YTQwNGZhY2FkMzI4NDFjYjJkNTI1NTRlN2I4ZTIyMDllM2Y4OGZkOTQ4YzFlY2Y4Mzk1N2M5NmY0M2IwMzRiZWRhNmM0NzYwOTZiY2IwOTMwMWFkNjFmODM2N2NjNDNlMTU2MTMxODYyYjQyZWNlMjg1YmVjMmRjYzJkMDJkMDk0ZDA0MmExNjA3MmViMjJhYjk4ODgwMTNiZTgyMzcxNTY5NDAwZWMxZjhlYzdlNzkxMDhjNDFiODUzMzY1MjY4ZmE0Y2ZiYzYyYzRhYzEyY2M5OGQyZWMzOGE4N2Q2MDg1ODU5NTY3YzBmMjdkNmQ0MzFhMDQ2ZTg4YTk4MTU1NTg2NjA3MDVmZDA1ZWIwNmM2YzA1ZTViN2Q2MjM0N2NlZWUyN2RmZmVkNzE0MTU0MGQ2MDhjYjk3NTA3NWE5NjQ0YWNjNjMyODQzOWY5ZmE2ODJiMjI2YjE4NjE1NDU0OTAxMWMzYjBmMGZmNGY3NGNhYTcxYzE5NDRlNGNiODM2Y2U4NTFkOWI1ZDllNzI3YzU1M2UzYzcyM2NmOThjMjczZTU2NzVjYWI4OTliYjY2ZjQ2MzNhNzZkZWEzNTczNDFmOTgzYzUzZDkxNThhZDMxOWFkYTc1NDA4YjQxYzA2ZjI2Yjc0MzViODBkYzNiYzBhYWYyMmE4MzNkZGVkY2Q2Nzg1Yzg3ZDE5NmIwYWYyYzlhNDNkMQorU0lHOiBkNGMzMGE0OGM0NTIzYjFmODRiMTRiNjU3YWY4Zjg1OTc1NWJiYTYzNTk5ODhiNjc1YzZkODVkZGYzNTQ2MjgyMGRhNDc2ZDg0ZjZjNDAyZTY1YjAyMGQ5ZThhMmMyODVjMTY3MDhhZTU4ZDFmOGRiYzY1NzgyYTg5OGE2NjUwOAorCitUU1Q6IDc5NworU0s6ICAxYWI5NDZjMGMxYWViZjljYTM3YzJmNGUyYTRiMzM3ZDViMWViY2NkMjQ3MzRjOWNiMmExNjA4Yzg4MWU1NzU3CitQSzogIDlhZmM2M2RmY2UwZDQ4OWI0MDkwN2FlZWQ2ZGZmZTRjZDhlZjVhNmZmYTIyOTg5NTU2NDQ1Y2JmOWIzNTE5YzIKK01TRzogOWJiMDcxYjYyYzA0MDY0YjBjOTZlMjQzZGQxOThjMzk3MTdiMjVjOTk0NDhjMmMwMDJiODRhOTkyMDRjNWE2ZTIzYjRiOTEyMDI4Njc1YmZkYzRkZjkzYzViMmZiODA4ODFhMjNlMGQ0NGJhMThiZGU5OTEyMWVlZTg2YWRjNmY4NDI4MTlkNmViYzdhMjg4OTkyZGEzMjg1ODA1YThiOGI2ZmJjZDIyNjdiNjg2YjNlMWJmNzk2MGI0NWYyNDRmODUyZTgyNDkyOTQ0ZTNkNjE4YmNjNDUxNGMxN2Y3MjJiYTQ5YWNhN2YyZjNiYjRlOTFmOTQwZTljZWYwMTU2NTBjM2U0MGIwYzg1NWExN2M0MmYxMWUzYTM0YWNjODUyODdkYmUwZjkwOTNjMDAzNzNkNTBjMGIzMDY0YTVhNWYyYjFlODkyMDY1MTc1MjgyOTVmZDg3MTcwM2E4ZTc2MmI1ZTc2ZmI5Yjc0NzNkMjE0OWI4NWI5NDYxZjU1ODdlZDdlN2ZjOGI1MGFhMDk4NzZkZWViNmUyMzcwNzg1MDIxNDJjZWM2YmRkYzcwMTQwZmUxZDFmMTY1OGQ1ZDNlOTEwZmQ3MDM2YTJmOTI0YjQ5OWRiMTc1NmY3YzhjZTBkNWYwZDA0NWIzOWJjODFjNWMyZjFhNzYxZjUyZmYzOTNlMDY0OWI4ZGIwYmQ4ODU0YmQwMjZiZTJjN2MzY2Q2MzUyNmJhNWE4MGQ0ODMzNWYwMzM4MzJkNjMzNzYwNzFiNjMwOGYwNTk2MGNiM2ZjOWZhYzkzMmVkZDgzNzZkYWU1MWYyYzY2MWY3NWI3YzZmNGFjODU2NzUzYWNhNjIwNjI4Nzc2MDlmYzRhMGZmNjA2NzAyODJjMDVlODgyZDFhMDM1YmY5ODkwY2FiMjk2YWM3YThkZjI0NGM1NmY0OTAyNTBmMDIwMDU0YjhhZjUxYmU0ZmMzMThiZWJhNTA2MjMyYmY0NWUxN2Y1Yzc0MGNmMDlkMzc1MTVhOGJjODk0YmM5NTVjOGE0NjA4NzdjNzg1NGY4YmUzNjNiMjE5MzNlMTYyODdhZTBjYjcwZjIyMmQ0ZTM2YjhiNDI0OTc1NTU5YmI0YmZjOGRkMWQ1MWIzYzBmYWY0YTUzZTMwMjE5NmY5ZmVkYjUzMjg3ZDA5MzE1ZGZmZmEyYmM0YjNhY2ZmMTM3ZjlhNzZkNjg1NjIxN2Y3OWNiYjI1NDMzZmM5Nzg5OWZkNjU0MGYxODA4OGU4NDQxN2U0ODMzZTRhOTFhYWJhNDY1OGFlOWFkN2Y3NjBkZDljNWI3MTkxYTBkM2MwNTU0MWI4M2MwMjVhNzk5MjEzOGU2ZDEwODBkYTE0YzJjODg3YzZkNjcwYWFiMzc0ZDQzNmMyNzJmOWU5NmY4NWE5YzQyMzM3OWMwZDQ3YzQ2ZGY2ZGUzMzRlYTIwNTcxNThkMzMyMzFlMTQyNmE2NmQzYzcwODI3YWFkNTUxMWI4NDZlMDNiOTQ5MjNkNWY5NGJhZjFmOGNmMTFhODYxMzczYTViODBhZDVlMzE3ZWMyYTUyOWU5NGU2MzZjZGMzYWEyOWU1ZGFjMjA1YTBjMTNmNjhmYjE5OGNmOTQ1NmU2MzkwYWVhZDRkOTc4MmExMDM4ZjY0NzhkMzM5YTgxYmFlN2FmMmEwNDE1MWMyZjIyZThkMzlmZTA3MWUxYTUyMTY4ZDU3Yzg0YzM2MjkzNDEzZjhlNmZmNjkzNGYwNWU3ZWZhZDZmYTEyMGM4YzFjMzhhZDE4ODZhM2QwMGJmYzMwNjQ1OTIwM2MwMmNkZjRmMDY2NTJiYzhmYTBlOGI5Y2M3NzlkNDNmYmI3ODllN2RhZDVkYzk5ZjQxZDRjYzU4OGMxYjY1NDI2YTRlNzczODllZGQwNDk3NzU3OGY4ZjMxNmJjZGQ5NDYxZDY2NjQ3MmNkZDI3NmFhNTY5NzIxYzY1MjMyMjU2YmExY2YwZTdmNWVhNTUzMjE3MjliYjBlMDM4NmE3N2I4NjU1MzIwMjQ2OTZlZGRlZjQ4NWI3ZDdiMjhjMTU3M2I5MzQ3ZTQxNGQ0MjYxOTk1NDgyZTNiMzEyZGUxMzMxZjg0ZTc1NDg2MDdhODQKK1NJRzogYmZhYmRlYTQxODEwYTUzZjhlNTI3YWNkNjZlYzEwNmNlMmFlMWE2N2ZmNmE5YjUyMmUwZjA4ZmJiZjEyNTI2ODJjYjNhMWRjYzg3NTYwMTk0NGNiODgwMDBmNzJlMTM5MDcwMDc5MDNhNzdjZDBkYjAzMTZkNDE5YWMzOGMyMDQKKworVFNUOiA3OTgKK1NLOiAgMDRiYjg4N2E4YTMxODRmZmM3ZWEwOWM5YmM3YzFmN2MzNDExNTU2YTdjN2MzOThjYjhiMmQ5OGZmZDllZTg2NgorUEs6ICA2YWIxZTRhZTRhYTBkMzg5ODlhZWVmYTgwNWI1Nzg4MDZlMmU5NzFhYzdhYzA1NDA5OTU4YmZlNjAwNzFmNGE3CitNU0c6IGI3YWIwYzgxNjNmNDc4YzZjYWJmMmJiZDdjYTM3Y2IwMjQ1NmQ3NmU1MjdlZWExYjBkMjZkYjI0MmUzNzg3NzYzMjk4NWEzZTNjYTQxYjUyZTIxZDc5MDE3YmZmODFlZTU1MWFkNzJhZjI3N2I0MTBlNDJhZjgyMmM2MDhjZDY5ZDAwYmY0NDBiNzViNzg3YThjOTE1ZDcwYjZjNjM3NmMzZjY3ZmE2NGQ2MTJhMWI0NDlhN2UyMTM0ZDljMjMyMzAxNTdkNTc2ZTA2YTY2YTg0MjJhNjExZTJhMGYwOTcyODZjMTk5ZWEyYTE2Mjg2MTg2NGJkMDM1MDc2YWIyMGJiYWUyYjQ0MDhhMmM2NDMzY2IyMzQzM2E4ODlmZTY1OThmNDdiZTUzYmJkMmM4MGYwN2E4ZmNjYjhhYWU1MTExNjFlNjA5ZGE0ZDE4MGFjZWE1NDQ4MTFlOTQ0OWM1ZGMyMjUwZTNlNWEwY2Q0MWRhMzNhMmRhNjMyZTYwMzhiZDg2ZjE2ZDViN2MxYmU0OWZjNmRiNDk5MDc2Y2E5MWY3YWEwMjhmZTM4NTI5NzAwYjIxZDA3MmQyYjc1ZGNjOGI0Mzc4MWQ0YmM0ZDNiYjU4NGQ5ZGEwMWMzZWNjODViMWU5M2ZjZTA0NWRhZGNlZWE1MTA2NDY4YmRmZTVmNzBkNjZhNGZhZDYwZTRmYjg2NGVjMTVlYTUwZjZjYjc5NzIyM2M4Yzc1NmY3YTE5MzFhMzk0NjRlYmJiOTY3OWY2YjAxNjg3YzE3NGVhYTMyYjk2OGI5Y2ZhY2U4YzE2NzEyMGFhN2JkMDI0MmYwMDNhMGMzNzc3MDI1NTFiMzBkYTI0ODhlYjI5NDQwNTI5MzRhZWY0YmZlMTE1ZjBhYjc0MDVhM2Q1ZmE5YmQ3OTZiMzcxNzQyYmMxMTRhOWJmMjhjNWJkMjU2MjYyOTVjZTI2MWE2YTgzZWY2MGI3N2QyZDMyZGQ3MTA1ZmM4MzY2NGFhODk3NjViM2Y4MTkxZWVlZWQ4NzhmMmViZmYyZmI5NzY2M2E2MTg3N2MwOTM5MzNiYmQwNzMxZTYzNzU3NTcxYjBlMzdjYWM5OWVkMDFmZDIxNGNiZDRmZWI5NzdlODU2ZTBhMWE3ZWYwYzQwOGMyMGUwZGRhZjFmZDhmMDI4Y2ZhMDhjODUwZmE3MDkwZGNhOGNkZGUwY2I2OTAzZGExOGM2MjkwYzY2YTFjMGFlMGEwODRiZjI1MGM1MWE5ZDAzNWU1YjE2ZWM2MTY2MzZhZmI5YjViY2UzNmE3NzVmZTIxNzViY2MyZWUwNzIyMDgzNGVlYjMxY2FlZTUwZTlmODA2M2ZiMWZjODQ2OGFlMjVlMzk2Njc4OWE2ZDhkZmZlMDhhNmY3YTFlNjcyNmY5M2FlNzQ4MmRlMDI2MmJiMWY4ZGUwYzk1YTk5ZWNiOTU2ODRkNDRiM2YxYTMzMmExOGQyY2QzZGNmMjUzYzMzZDczNTUyMmY3OTZiNjUxYzlhNjMzYThlYmU5NWQwMmJjMDQ2NTgyNWVlNTQxYTdkOTI3YmI1YjkwYTZkYjU0OTlmOGQ5OTNhYjQwNGIxNjUwYjc1ZTc5MmE3YzgzNGViNDFmMDQ3MDEzOGIwZjU3OGEwNGM5YmE1YWQ5NTBhYzdjOWI1ZDMyOGYzNDA4YjY0NWFkOWM2YmYxOTZkZDk2MTQ0NTU5NmJjNzhmMjg0Yjg5MTRiMmE4Y2Y5YjdiZDNhNzE2ZDhmMTQ0YmI2YjE1ZDgzMTAyMzcxM2I1ZTQxZmRhOWI1ODdmZjlkNmNjNDNjMDhkMzVhNzA3ZjQ5NTI4M2UxYWNlOTYwNDg3ZTdmMDJiNzU0M2I2OGE3MzFhMjliZjNiZTE0YjZlOWMzNzE3NGE5ZjQ2ZjU2MTE5OWRiZDI3YjQ2YmZlNjIyNDNlMGMxMWMwZWRmMTNiNjRmNDExYzhlOGVjZWQzNWQ4NDI4Zjc5ZjEwZWFjZmZiNzIzNGU1NDY0MTNkMWViMGZhZDg4YzBlOTM4NTkzYjQzYjVlZTBlNDI4NWQ0ZGRkZjUyOTVkYmYxYTNkZGJlOWY0MTM0ZGQ3NmQzZGU3MDQ2MmMyZjA0ZmUwYWViZGY1OWEKK1NJRzogY2Q4NGY1NWU1ZWY0NTMxOTI0YzVhMjE4MWVjODdhNjQ1NDEzODhjMTA1OTQwNmJjMDdkNTMxNTdhMTY4ZTIwM2NjOGFhMGYwMDY5ZDUzZmY1OGE5NWI4YThjYWFmZGFkMjYzNjNjN2QwZjgwNDVjNDM1OWU5N2I0MzYwMmM2MDYKKworVFNUOiA3OTkKK1NLOiAgOTc3NmE0NjdmYTE0MDA3MzU0MTJhNzliNDk1ZjlmY2EwNzhjZTFkODdhODUzMGQ4NWMyNjA1NWQzYTM5NDQ4OAorUEs6ICBjN2RiZTBlNDFjMGEzMWMwOTQyNzkzZmZkMTQyZDhiOTVjYzgyZTVjYWE5MmEzNzliYTIzZjY0NGVkZjIyNGRhCitNU0c6IGQ3ODU1M2ExYjcwNTViNThiMjEzMTAxYjFjODRjNTNlMTY0ZTM5YzZlOWQzNmRiNDNmMzBlMTllMmExMjVhOWE2NzcwOWVhZmVmOTY0ZmE1YmFiNzI2MWRkYjNhOGEwMTg4NDU3ZGZiZjUxNTljNDBlNTFkYTgyMDg0ODMyNDU3ODFkNzEzMWUyM2E4YmVlNWU1MDYzMzE4MTZiOWRlZWVmZTZlNTU2ZTNmMGM5NWM2NjhkMWJlZGI3ZGE2MzUwNjU0NThhZDIwNDY3MDEyZjU5ZjE3MTM1MjA2ODAyMGNlM2M3NTg3ODY5M2Y2NDM3YmM0YTA5ZjEzYjliMGYwY2RkYWYxNjkxYjg3MmY4MjAwODA5M2ViZmJlMjMzZDAzMTNlNzJjODYzMmQ3ZDE3OTNmMGI4MWM3Njg4ZjU0NDcwMzMwZjA0ZTY0ODYwZTY0NDZiZmM2ZDk2Yzg3NTY5YmYxODJmMGY0Mzg1YWY0ODVkNDI5OWNhYzA0ZTA2YmE0NzM0NjU1NjZjNDc3ZjA3YjlkYjI3N2FiNGE5ZGUyZmIyZGVkMGE1MDExY2QwNmQ2NzVjMDgwMGIzNGY1NWJjZjNlYzcyZDIxY2ExNTBjOGJmMjM2MTI4N2JlODFlZmFiYjk2ZDg2ODhhMWRlZTNmNDMwZjA2ZjYzN2RmZDA2ZjE1MTQ2NGEwNWM5NWY1ZmU3NmFmMmUwNmQwMTIzZjY5NDhhMjZiM2JlODM1MDQ1YWEyNjhjYzFiZTk3NjY5NzEwNzc3MDIwOGE3NTY4ZjAyNWMyZDUzYzcxOWU1MjRjYzM2OWQ5YjRhMzM3ZDhmZDFlZjM0NWI5YmNhNTdmYmQ3YjY1YTZiOTk3Y2FkM2ZjZTRjZjA2ZjJjYTQzZWJlMjk4NmQwOTY4MmQ0N2M5MjJiMmNiNzU2OWQ5OGRlOTdhNjE2NGY1NDcwZWVjNzFjZWRhNTIwY2NlYzc3MzJiZDAxNjg5ZWY4MTY1NmU5ZjZkMGM1OGE4OTU1NThhZWU4NjNmNTQ2OWU3YWI5NzkxNWJmZTBiODBhMDY0YzY1OWIxODMwMzFmN2YxYTg2ZmIxMWE5ZDUyOGMyODE1ZGNhYTJmMGRlYzNkMjFhODgyZTEwNmUyMDQ5M2VlMGFjYjc3MDhlYWEyOTEyNTc0YWU5N2JiMjg4YjQxZmMwOTI1MDUzYTI5YjBiZmJjMGViYWU4ZDYzY2MwYjQ2ZTM3MzgwNDZjNWEyMDI1MzBiY2IxNWIxODdhNzI4NTRhYTJkOGE3YTc2Yzg5YTg5YTVkYjQ2MDMyMDc0ZTFiZDdkZTc3ZWYyMDY1YTA4ZjM4OWQ3ODNjZjc1OWViZDVhNjNhNDRkOTE5Zjk0OGY1NjBjM2U5NGM0MjM5ZTI3NGUwNTFhMjA0ODVhNDMwY2JkNTI5ZjMxM2Q5ZjdlZDY3OWEzNDE4N2IyNGY4NDEzMDg3YTkwMjFlNDczMTczMGY1ZjQ2MWZjNWFhZDY2NTRkZmExYzA1MDRkMjYxMjQ3MDdlNjNlZTU3ZjkzMWIyNzg1OTA4Zjg2YjEwNGIzZWNiOTYwMDAyNTFkMDZjZTFmYTQ1ZTRjZDZkZjkxYWMxNWJiZjdjYTNjM2ViOGVlMDgyNzYxMmEyOWVjYjdhMzZkNTQ3MGM0MDUwNTE4MmZhOWFjOTEzNTcwZDBjMTA1MGQ5YTQzNDU1Y2I3YmRjMTdkMTY5ODA1ZjAxODk1NmY4NTRmODkxOWJiZmI3MTllMTg2N2IzNmE2NGFhYmNkYjgwN2Y0OGRjY2MwNjcyZjY3ODg3NDUwYjNmM2U5NThkNzg0OTllMGQxYWIzNjhhYTQ5NDQyZTVlOGEzMzJiZmZkNDRjMTY5ZWE2NzYyOWM4NTcyNGRiNmYxNTg2YjZjNmI1YmU0ODY0ZGZkNTNkYTdjMGY3YjhiYjM1NzMxMTZiZTUwNzdkMzMyYmQxMmE2MzAwZjNhNjhhODk4NjZiNDc5ZWMyYmFhMjc3ZjlmNTZmNmUxZDQ5ZDc0MWViMzIyMDM1ZmY4Y2IxZGU4NWM4ZGM4N2FjOGU2ZTRjNWQyMGJmYjZkMzE3YWIxMjU5MzBjNDI2MDliZTNhZTgyMjQyYTllZjA1Njg4NThkOAorU0lHOiBlMTMxN2JhMmExMjNhZTNiMjllN2I2MGU4ZTkzYmVlZGQ3YTA4NDUxYTAxMzY5NWI2ZGNmMzU4ZTQwMzQwMjZkYzc0MDM3YWZiZGQyMTdmZjRiMTQ4YjAyOTEzOGY0YmNjOGY5ODM2YWJiYWU3ZTYyNzZlOWU3NjlkYmQ4ZjAwNworCitUU1Q6IDgwMAorU0s6ICAwOWQ4MTIyNjk3MTI2ZGZjN2UxMTY4NWEwNDEyM2ZkZmI0N2NjZGRiNDQ5OWQ4YTNhZWY0MThjYjY1YWVkN2E3CitQSzogIGY4ZGRiMWMwMGY2ZTBmNGJlYWE2ZmMzOGU1ZDBhNTc3NWVlMjhjODBkYmRlM2YwYzc5MzBhMzNhYWQ3MTUwZjMKK01TRzogYTBkOGQ4Nzk4ZWJhMjJmNTY3NjBjMzA2NDNlOWZjNjc5NTU0N2VhNWYyZjJiYmQxMWMwMzkyYjJlYmY3MTFhY2EyMmYwODI0MTk5ZmMzMTg4YTQ1YmRmZmRlNzBlY2U5YWIxNWE1ZWE4OTYyMmE1ODcxZTBlZjc2ODVkMTBmMTI3NGNjMTk1YjRmZGE4MWY4NzlkMWU5YmY0MmY4NzNiMjBhODU5YzIzM2Y5ZTQ5YWRiZjA1NzczMWUxMTMzNWU5YjZkOGVkMGUwNjllMTM0ZWM0NjFjYTg4OTBkN2IwNDczYzQwNWU4YTlkOTVkMTU3MTFiMTI0NzYxMDM3NjJjNjI2ZDlmMmFhNWRkNTE5YmQ4MjViNjBiMzIzNGViZjY1MWUwZDE5MzMzNzFjNTJiZmQ4Y2UzM2ZjMzZiYmEzMjhmN2YzZjJjY2MwMTAwMGE4OTkwNGFmMzdlNGUxZTllMTVmZmZhYjVjMmIwYzQ3ZjM3Y2RjYjA2OGRiMzNhYzM2YTVmMGQ2ZGUxMjAzZmJmODk0OTMyNGJkM2VmZGEwZjk4ODlkYjAwZGEyMzE3YjQ5ZmQxODY5OTlkZjdmY2RjM2NiNGUxZDE4ZmFhMjU0NTYxYzI1MTE3OGI4ZDMzZmRjOWRjY2Q4ZDJkNzIxYjkzYTUzNmNjZDNjMGU5Yzg1NjMzN2YxOTVlZWU3ZGE5YTdmNmIwYTQyYjdjNTQxYzZhNjhjNTk1YmYzNDcwNGQ5ZmUzYTU2ZDJlYzg0ODFkNTc3Yzk2ZWNjMDhiOGU0MGFjZGJmMDUwZTIwYzY4M2YzOWM0MTRlOGNiZmNmNGEwMTUyMzE0YzA1OTg3YTgzYmRlMzAyNWI3MzVjY2EzMDIzYWJjNWZlYjdlMDBkMDIzNmI0ZjI0YjE1ZTY3OWRiMDUyYzhkMmZkZGIzYmVmODY2M2E2ZGY4MTlhOTgxNTUyN2ExYTJmNjBhMGZhNGU1MDc4ZGRjNmQ0MzVmZTg5Mjg3YjMwZmZkZWI1ZDlhZTA1ZDFhODY5MGZiYzc1OTBhYWQ1N2Q0M2QyMmMxMmFjZTJjODE5Njg4OGUzNTRlOWY3ODJmNWRiYjQ0MTQ5ZTgzZmI4YmJjOWRhNmQ4OWNlMjA2YzFlMmI2YjJiMjhmOTMzZjNlNWZmMTE3NWEzMWE4ZmY1ZDMxZTY1YzhiMDBjNWJhNDYyMjI0YTFlMDlkNGYwOWNiNDBmYzg3YzM2ZTdkMjg1Yzc3NGE5Njk3NjIwMzY1MTgyOGU3ODM2Mjg4NDdhYzUxMmU1ZDFjMzViMzViMDMwMTcxZjkyMzk2ZjVmZmFmZjU4NWNlYWQwNGI2YWUyMTBkODA3MDdjYzY4MzJkOThhMjBkM2E5NDc2NDhkYTI2MDQ5MzdmZWZkMjVhOWZlMGZjNWNhYzA4M2RkZDdkMjA3NTMwN2Y0ZjM4MjY2NGY2ODdkY2U4YzY1NWRlZDljMTJkNDhmZjc2MDFkZjJhNDhkMzdmZTIxNDk3MDg0NGMwNzVmMmVhYjAwMjA1OWZjMjI3MWU2MTdjOTY1N2EwMWJlYzFkZDM4ZjZjMjhiYThhNjE3YmQzMDg1MWUzZjlkYmFjOTA0NDE4ZGYxZDAyMTVhZDQ1ZGZjOWYwMmI1YzVlOWY5YmJjNmRlOGIwN2FmMGJkMWY3ZmE4OTIyNTQ0ZjEyZDJhM2UxYWFkZmY3ZTljNmI5MzMyMGMzYTYxZWYzM2RhMDdlYjg3YjE2MTdmOWU3N2Q3NzAyZTU1OGJjN2Q4MTIyZTBkZmUyYWU4M2U4MzZjNWIxYTYyYWE1ODVjMGRmZmU3MTZmNzQ2M2MwYjMzZGE1YjFlZGE1NTZhMWVmMWU0NTA0MmM3OWJkZDNlYzNjYjg4NjNhN2JjMWIwZjdlMWMwNWJkOTkyMGYwNWI0ZWRhODY1MTc3MDVlZDA3ZjZkY2E3YmIwMGFlMDQ1NmU2Nzg3ZDlmYWU4ZWRlNGVjZDBiYzU3MmViNWNjNmQxOWU4OTFmMWJjYjIyOWU5NDA5ZTA2NTc0YzdkZjA1ODE3M2NiNThjM2ZkZjIwZjNmZjE3YzM3MDVhZjYyZDliNzIyNWM1NzQzZjYwMDYwN2Y3N2NiZTdkNmU3NjE4YWJjNzkKK1NJRzogMThjZmFmNmRjOGU0ZTg1ODJiY2VmZTBjZGM2ZmNlZmU2YTRhODdlYTYyOTU4NWYzN2QyZmJhNDQ2YjNhZWJkNDUyNDI2MzgyZGEwZDQ5MWMzOWNiN2Q1NGQyNzMwMDVkYzEzMjEyMTU2OGQyYWI2NzQ1MjBhZGRhNzUyMzg0MGQKKworVFNUOiA4MDEKK1NLOiAgMTAyMDFiZjAwODQzNjc1OTBkZTY3NGNjMGVkMjY0OGVjMjVkM2JhOGRiNDBkMDBlZGUxNTMzOTg1MDhiYzEyNgorUEs6ICBiYWRiZDA1ZTVmNzllMzExNjlmNzQwYmE0NmE1ODkxMGExYjc3NzA1YWY0NTcxN2IyYWY4MDg1NjQ1N2M1OGM5CitNU0c6IDdiYjE0NzA2MTdkMTFlNDVlYjYwMmE4MjlhZDc3M2VlMmJiN2U2Yjg4ZGE0YzA0YTcyMTZhNDUwZjg0OTkzYTQ5OGNiZDNiOTI1NDAyOGYyZjk5ZmMyMWEyMzI4OGJkYzFlMTUxYTcyYTkxMzBjM2RlZGRhMWJiYmNjZDRlNmMwZjQ4YWU5ZjM1MzE4Y2JlZmM5NTlmNDA1MDQ1ZTZlMGI1ZmIyZTczOGYyYjc2NWJlMTFiMWI2YTBmMWU4MzE5NTQ5ZDk1ZmE4ZDFkZjgxNjdjZDRhNzcxN2FlMTYzNmE5ZGY1NGQ5NmVhZjJkNjMyMzY5MDBmZDExMzM4MjUyYTUwMDhkNWQ0ODBlMmIxZTk4NjFkMWY3MDY4OGM0N2VhZTQ2ODlkYTAxYTQ3ZGEzZGZiNmQyYmFiM2NkZjUwNWVlNWQ4MDFhMTUyYzI2NzA5M2QxN2U5YmY3MTM3YTZlZTdiODM0ZDAwODU1MDBlNDAxYzE3ZjMyODZjMTU3NWQxYzAxMDBmYTk4MDc2MzBjNGE5OTA2NTRjMWU3MWE4YjcxNTYyN2JiMTNkNDQyYzg0YTQ0OTg0NGM0MDRiODcyYmZiYWM3MThhNDhkMGVhMDk0NWM3NzE2NmE1MzEzOWIwZmYwMDk4MTM0NzY0ZjllY2RiODhlYWJlMDdjY2IyY2NlZDQ5NTVlMDgyNDliMmY1NzcwYWQ0MWZjY2Q3YjViYjM3MmU2YzMzNzY3ZTA3ZjViZTdkMTA3MTJkZTgxODQxYjEzNGUxOTNkZjA3NzZhMGZjMTU2ZmY1ZDBlOTZmNDBhNzA0NzUzZTExNDVlOWZhMDgzYzRkZGVlZjQ0MTYyMzRmNmUxYTIzODJjOGU1YjNhZDQwNTQ1OGU4OWQyZjQ5M2E0ZDdjMjlhMjNkZTIxMDc0ODViN2Y1NjM1MDEyNGU3ZTBkNjk1YzUyMmI2ZGU3YTkyNDdhMjkyNGNlNmYyODYzMjM2YzEwY2MyMTI2NGFkNTQ1OTBkMzE0NzYzZWExYTE5YWZhY2Q5MGViYTk1NTg3MDQwN2U4YzYzNjVhMTQzYTVjMWI5YThiZTVlNGE0ZGNhZGI3MmUwZDQ3NjQ5YmQ1M2FiZDQ2YjVjNjk2MGVhZTJjYWI3NzM3NTNjYzBlMDRlOTk0MTRiYzJjYjMwZjQ4YmI1NDEzOWQwNjZlNDNlMmYwZTFhNGFlOTYzODU4YmVmOTY3ZGY4Yzg0MTQwZDJkMDkyMDJiNDA2ZDVkODVjYjdhOTZjYzU3ZjIzM2ViMjE4N2ZmZDAyZjk0ZTkyMjk3YjVlNjlkOTY5ZDNhNTkzNmVmZTQ5MjkxNDRmMjU4YmZiMzlkZDBjZTI2MzU5YzQ1NDlmYzIxOGEwYWE1NGYzMWJkNTUxYjg3ODFhY2JiZjYxY2IzZjczMmNkYWY2MjJjNmE2OTE4OGNmNTU3YTNhOTJlZDE1M2U2OTEyNWE0MDkwYWM0NTE1MzZhMGU5YTYzYTQxNzgyOTEwZmZjY2I0ZTg1MDAyMTEyM2ZmZDFmM2JmMzljNzM0NjBhNjVjY2ZlNGRiYTliZGVmYjVkNWY0ZGE2YzQ2OWFhMTMyMmZhMjcwNDMyMzgzNjNlZTcyOTE4Njg4ZDdjYTFjNGMyOTUyZTQzMGQ1NjMyNTZiYjg2ZDM1MGEzNWVlODJlMDE1MDQ3NDdmMzFkMDJlMDNhZWRkYTU0NmQwZjFiMmY0NTFiODcwODIxNjAyZDAwZTgxOTAzNmFkZTVhN2M3ZmNkMjFhNmRlNmFmMzViMWY5NjMyYTcwYWY2NWRmNjQ0NWY2ZmFkZmJjMGY0MTY3NTVjODI0NjY0MGU1NmI4NTZiNjZkZGQ5MmE2MGMwMzUzODIyMWRjOGZiMTQyY2UyZGJhY2RiNzQyNWYzM2NiODVkODUwY2MwMmMzMTVjZmMxMTFmNmY2NTFkZGUxYmRiNjdmYjIwOGUxZjZiZGU3ODRkZGNmN2JkMThjODA1MWEyZTBiYmYxMDE4YjhmMzk1MzZjNTg5ZGU2NWVhZGM2Y2YzNzliNzdjYWQxM2Y5MDg5Y2IzMjNmYjJlOTQzZDA2Y2RkMTA3MDVjMTIxMTM0YzY1NDhkYzUzNDE1ZjhjMzcwZWM2OTAKK1NJRzogZjFkOTk2NTg4YjI5OGYyNzFlOTcwY2ViZDJhMWIzMzk5NzljZDI5ZGRkZWUzNjQ1ZDA3ZmFiOGFiNDY1ZGRlM2U5ODY2N2VjMDFhZDdmMWMwYTY1OTJlMDY5N2U2NjVjNzJmZDM4MTRkYmUxODllZDVmNGU3NmM3OTRlNTM4MDkKKworVFNUOiA4MDIKK1NLOiAgYzRhYTQyNTI0NmI1MTczZjVlZjg5ODE1MmVjYTNkMDkyYmI0YzJkZDAyODUzZmNmYzcxNzgzOTlmNGUyZjc1OAorUEs6ICAyOWI3N2EzMDc1ZjQxOTI0M2MwYzFiYzM5NjU5ZDczMTE3YWMwMGU1NWU4ZGUzOGZlOTgyOWE4NzljYzViOGEwCitNU0c6IDdkZjk3OGExZjQ5NzY4MzhmZmVkNzQ0OWE0ZGMxMzhiNjA0ZjRiMmE0YWU2ODljZTc1MDE4ZWJjY2RhYjJlYWEwYjYwNzY4ZjcyMDgyNTdmMmIyOGU3YWEwOWJmNmMwNTg4OGRhNDZmZDM5NmQxYzgwMzAxMTc1MGUzMGViNDg0ODcwYzg4MDY5Nzc2OTZmMTJlYmI5ZmVlYjRjYWY5MmEwMmRiYWEyMmJiZmY2M2Y4NDJjM2JhMTQ3YmNhN2MwMDMxNDI3OGFjZDBkYjE3MzU2OWY0ZTM2NTI3OTU4ZWY2ZjEwMDJiZDNjZDAxZjQwN2E4NjUzMWVkY2JkOWYzMWIzYTRhYjg4MGE0ZjViNTJiNDJkMGQ0YTFiYTY2YTIwOTg2NTFhZTNlNmM5MTUxZjQwMjczMjg1ZjdmNmE0ZTgxNjA2YmY5ODBmNjg5NTA0YjQyMDgwZmRiOTdjNzI4NDZmYmE5MDQ3YzdlNjYwYmE1YzZiZjEyNmE5YTU5OWUyNTcxZmExMzUwNWFmNzU4MWJmZWJjMTY1MTNmNWM5NGRjNzE5MzdlNmU2MWIzZWExMDkzOWIwMmVhMTA4NTlmMzJkNzkxMmI5ZTM4MDZhYmVmNjE4NWZjZmZhNjg4MjE0NzgwMDVjYmZjMWQ2MzdkZDAyMDQyNTYyMGEzMTgwNzQ4OThiZGMzMDkzMWM1OWFjMGM2NmM0ZDEyMzhiMDk3Y2Q1YjE3MGYwODQ0MzVkNGJhZTQ4YTAzZDkyZmQ0OGZjMmNhYTRmZmM1MDVmMWJjYTUxNmZiZDZlNGY4ODhjY2VkOTgyYWUwZGRiODhmYzI4YWE2OTdiNzA3MWQwMTViMGFjYjI4MDliMDFkMWQ5YzdlN2I1M2VlZTY4MjRjYzM3Y2NlNWI2OTkzZDg4ZDgzZWFmYzJlOTI4YTZmMTQ3ZGI2ZWI4MGIxYTY5ZjAxNjA1YjA0NmJkMmZkMWQ5MmM1NDU5ZDZkMzM5OGE5Y2FhMjk5ZGRkMGMzYmEyZTA4OTQxMzA3YjEyMGNjMTM5OTJmNzAwM2FjZWQxNGE0YTRkOTIzYmJiMTJmYzM5M2ZmY2Y5MjBiOWY2ZDQ3NzVlOTRkNGE1MTIyNjdmZDI2YTY5OTdjNjA2MmI0Yzk5MDBmOTg2MmI5ZWEwYzhkN2RmMTlmMDVjMmI2MDRhZjViOTg2NGZiMjc1NGE4MDczYmJiZmIxODIzM2U2ZTE1MGY3MmE1MjVlM2E1NzYwZmNkYTdkMzJhNjAwMzRmOTU2ZTNjYmQzNDM2YzIwMDgzMGIzZTdhMTQ1NzEyMjBiY2I2MjdkNWE0YmU3MmMyMGIyMzM1MWIyZDkyMDYwMmE1MWMzZWIzMmMxMjM3MDM5ZGZiZmY0M2M5ODdmZDg1NjM3NzdmMGU1YTM5ZjgxNDZjMTY0YmRmZmNlNDRmM2IxM2VlNzRkNjRiZmRjZjk4MDNmMDNkZDAxNzJhYzRmYTRiZjZjNzgzOWNiMTFmM2QzNGJhZWYwZTMyYjU0OTQyZmM0ZmEzOGY0NzNlMjk2NmY0OTExYzBlODBkNzY5MzdiMjViNzYzMjI3NWJhODgzMDk2MzVhNjBkZjEzNTQ4OTIwOGQzZTczNGI2NzJlZGE3ZDJiYTIxNTc5YWJhOGQ4ODYwZWE3NjRmZDY3ZWFmOWMzOGVhNzYzN2QxYmFkNTdiMmYzZDc4MmI5MWUxZDVkOTJhYzMwMGJkYmE3YWI5MTEzY2U5MTNkMGM3OTNjMTJhOWE3MjZlM2ZjYWIwNWNiNDc5OTc3ODcxNjQwNjMwZDQ1OWU2OWU4MWNhNWNmNTZkZGIyYTA2MTFkNjFkNDgxYzFiOGNlZjM4MDRiZDRlNTc1NGE2MWViNDliMTdlZjJiMDNjODMwNTdiNWQyMGQ4ODIwNThjMDBmNTRiNmNjYTg2YmU5NTM1MGRkN2JjYjI1ZTRjMWM0NjU4ZjQ1MjI5YzhiYjlmNWNkZmNjNDQ3OTVjOTc4ZTMzODhkMzI1NzYwMTA2ZTUyYmU5ODM0YmQ4MWZmYzVjNjI0ODZiNmYzM2MyNzQ1OWRmMTc4ZWI5NDZlN2E4MmRiOWNlMGQyOTViOTI1YmI2MTI2ZGQ1NWMzMWY0OWE2OGRjZWZjNworU0lHOiA1ZDg1NDVhNGJlM2ZkNmRhMjU3OGMyZWNjYjY0OGQ4M2ZjZmU1ODcxMzNmYTdhZTRhMWNmY2E5YWU2ZGFhNDkyNTljOTUyMDQ0YTg1YTIwYjZmNTMyNGY4MjdkYmEyZDFhODM4OGM0MGE5MjhiOTUwOTEzYzYzNGZiMzA5MjcwNworCitUU1Q6IDgwMworU0s6ICBmMTNjYWZkZTZmMzliOTYzZGNhOTY2MjY4NjJmNGZiYzVjMmUwMGRkZjA4YmVjZWFjN2E2ZTJmY2E5ZTFjY2Y3CitQSzogIGMxYjAxYTkxZThlZTBiOWYxOWE3MmU1ZTdlMGFlZmNmZGM0NGExNTc0NzRlOTlmZWViZDBmZjU1MmQ3M2IyYWMKK01TRzogMmJlZTczYjc0ZjFiNzYyMmViMDk2YTI4ZDgzYTgxOWJjZWMyMmQ5OTk5YTMyMDYyMTAzZDYwNGFlNmQ3OGVkZjhmODkzODk1ZDIyMjBhYjc1NjkwNDEwYzU4YWFiNTkwYTk4ZGRmZjIzYTk0ZDIzNTBmODg5ZTUzNDY0MjAwYTUyN2Q1NGQ2MjU3MTEwN2IyN2U1NzRmNTQyZWJhYzI0OWI4ZTJlM2NlMDhkMWJkMjdiZDhkMjlmMmU2MTI0M2RlZWYwZTY5MzhlNTJlZTI5OTJmZjIxODdkN2E3ZjUyODJlZGQ5OGZjNDk4NWI2MTlhY2I4MGFhOWQwM2Q2Y2I4NGI4MjExMDZmNDBkNmU1ZjRjMzg3YWIwYWY2ZjIwNjYxNWQwYTE3NWY3ZTYwZWUyNzU1YWVhMzQ2NzVmZGQ4MjNlYjI0MTA5YTliZDgxOGVhMmQ5ZDliZDE5OWNmOGRmZTc5NjI0YjAzNzJhZTg1ZTk4YzYwMjAwMjM0YmQ0MTNmNGE2MmNlNjhhNDdiNmM5YjEyODU3YzBkMzk5YTQ0OGU1YTUyODBlOWYyMmY5YjEyZWEyY2QzYzY4NzEzZTc3ZDBhMTFmMzYyOGQ4ZWM1ZTA2MDYzOTAzMWQzYjY0MDAyMWM5YzM4ODA5ZGM1ZjQyZDJlMWMyZTIzNDZjODZlMjRlZWRjNTk4NGExMTVhNDJkZThkZTdlMzVjOTkxNzUzOWU4OTg4NWNhOTE2ZTA3MmFmZDVkNDY4NDZiMmE5MzU5NjFjMmZlMjhlOWViM2M4Zjg5NmI4NmZjMTIwY2JkM2FmMmFhMTM5YzQ5OWQyOWNmYzM2OTlkYjc5YzE0NDg0ZTllYzI1N2E1ZjY0MzQ0YjdhZDFlM2RmYjM0ZWVlNzY1NGM2YmYxMmZkMzhmYmJhODBmZTE3NjJhYWI1NzExMmIzYTk0ZTJiZWU3OTA0MWQxZTg4NDQwZjg1ZmI3MmRkZTY4ZDQ5ZTg0YmNlZDk5OGEyZjYzMzU0NDZlNGE4MzVlNzBjNWY4MjdmYjNhZDc4MjNkNWZiZTNiZTVmNmVjN2U0MzRlZTUyNGNjZDlmZjViN2U3MmEzMmQwOTFhN2UxN2M4YjFhZTQxYTFhZjMxNzkzY2NlOTFkODRjMzYyMjY3ODk2OWM4ZjUxN2RjMjZlM2NkNjFkMjQ0NjkxMjI4M2Y5MzUzYmI1YWQwM2MxMTFjNjIzM2RlMzE0YzYxYjgzMWNiZjM4YjA0ZmU1OGNmNDRmMWQyZDBiNDVmMjVhNmI0ZTAyNTY4NTljZDVkODMwZmFjNWVjM2M4ZDc2Mzk4NTU5ZTliMjYwMTBmNWUxZGE1ZjI1ZDIyMDA5MzU0NTNmZmFjNWFlYTUxZjdlODFlNzJlYzhlNWYwNGQyZjg4NWM3YjQ1YzYzZjY0NDU2Y2ZlMjMxYjhjYjI0YWExNjIwYTkwMjYzOWNhNzhkZDM5MWFhNGEzZDAzZTExOTc1Yzg5MDdmOTY0ZmQ1NWRmOWJiYjE0MGUzOGQ2ZGI5MzI1NmI0YjM5YzJiN2JjYmUzNWIxMTgyNmJiZjhjMDhmMWRjYjQ4ZWRjNGJmYjcwNDYyYTM1ZWE4Y2Q4Y2JhNzlmYWI4YjRjNDRlNzNiZTdlY2ZhMTEyMTY2ZjZkY2FiNzBkOGJiNTVkOGI4NDI4YzJkYTcxYWFjYTJmYzNkOTBmM2NjNWVkMDE1NTEzNThkNjA3ODliOWQ1NzFlZmUxMDg5MjAyN2ZhMzc0MDRhYWY1OWVjMWMyZDcxMTFlY2MzNTkyNDY3ZWQxZDliOGFiYThlMjI5ZTMyZDJhMDBjMTlkYjcxODdmYmNiMTIyMDYxOTYxYzFmZGFjYTMwN2U5YzljOWRlOTcyYWQ1MTQwMmZhNjdkYzFjMmE0MDNiM2M1ZThiMWUyNDY4NjJkNmFkNmE0OThkYjZkNzYxZmI1NjZmNjA2NTk0MmI2MGFkNGI0MzA5ZDE4MmJjNTE1NGNmYzM2ODYzMTg1YTg3ZTIzYWJhYTFkNTQxYWI3NjNhNGExMDY2YzBhN2E4YzNkODIxYWUzMmZkMzFjODg5MjQwMTA0NmQwYTIwZTkxYTY0Nzc5ZjRiZGE4MTEyMGFmM2ZiMzQ4NmQzZmMwYTcKK1NJRzogNmNhOWY4MGE2MjUwMWZhZjMxOWZiODRhZjQ3MWY2NzZhZTNmZmY4NTU2NWM5Nzk4MWYxNDU3Y2JiOGM0OWY5N2IyNjYzMTZhOTkyZGIwZDQyYmM1MDJmMDk1YTVmMmQ5YTRlMWNmYWMwY2M5MzVkMzg4MmM4YTNhMGVhNmUxMGUKKworVFNUOiA4MDQKK1NLOiAgYzg0NjM0NDI2MWEzNDg2NTM5MzgzNGJmYWEzYTE1YTNmNTNhYzllMTM4MzNiMGIyODcxMjI3ODFiNzlkZTM5MgorUEs6ICBlYmFkZTAyMjYxOTVhZTI1NGI2MTE1ZTIxNjk2YTljNjVhMTlkNWUwNDA0NDMxMzFjMjJiODlmMDJmNjlhYjc4CitNU0c6IDVhYmQxM2U5NWI2ZWUxZDU1MTQ3NjgyODIyMDBhMTRmN2QxYTU3MWYzNDY4ZTIyZWZlYzk5MzQ2MzA2NmEzN2FlYzgzNzNlNWZiNDk5NTY0MTkxZjMyOTRhOWIzMGFmYjVmMWEzNGQ0ZDg4YWJjM2U5YmMzMDNjMWFiYTA1YmQ4ZmFjYTkwZWUzNWQ5N2FjM2RkOTEwNmY2ZmEzY2E4MWEzODEwZWNjZWZhNmEyMDllYTNmM2ZjMzA0OWRjYjFiMDAzYzcyOGY3ZjYzNzRjYTk4YzU4MmRlNmRiMWFmNzYwZjBhMDIxMzNjYTRhMDEwMzI0MzA0ZDI2YTBlNTBhZjBkMTNjMTM0ZGEzNGEwM2E0MWU4M2VjOGYxMGVhNWI4NTliZWMxZjUxYjAxY2FiYjJkMTZjMWZjNTJiMDU4ZjhlNWRlZmFlZGUxMjgxNzFjMmUwMjY5MDIzMTZmODcxYjM1ZTMyOTI2NTZmMGU1YjM5YmJiYzgxZDBjMDgzMGU2YWMwMWZhYzliNDUzOWY0N2Y5YWNmYmQ1OGI3YWI5ZjVhMTI1NjAwZjI1MWEyNzFkN2JmMTY3ZjI5NTRjYThlMWUwYzk2ZTE2YjA2ZTgzMDdkZjg4YmI4ZTlkNTdkNWJhMDQ0ZjI3ZjNlYWZmODFkOWYxNTA1NTRhYTcxMjJmZDEwZDExZjM1ZDJiZTJiMTYyNGUzZTFhMWQ3N2ZlYTRjNWM3ZjhiOTgzZTk0NWJhOGMwOGRjMTU0NWIzZTZiMjk3M2FkMDQxYzQ0ZDA2MTdlY2NjODcxYTM4MjFhOWZmZWE5ZGI3YzJiMGQwNTVkYTU1ZGUwYjM1MDYzZTQyMjVhZWU2YjIyNWFiMmE3OTA2YThlZTMyOWQxYjM5NzJlMGQxZjcwODE3YzUwY2NmZTk0MDNkMTJhZDYyYzk0OTIzYjlhYTJkN2Y4NWE4ZGRhNDdiZTRkY2VjMGRjMmIwYjU4ZjdhYzE5MGFlMDU3OWI5YjEzYmJiOGIxNmEzMWIwYWI0ZDZmMjc5MTI1M2FiNDc1MWI1MzZiODhkM2I0OTM3Y2MzYTExMGFhODJhNmZmZWQ2ODUzNTI0YjY2YjNlZmZjZDJmNjNjNmY5NjQ1Y2VhMTNhYTIzY2QxYzk5ZDlmZmRhNGNkM2E5YzVkZjQ1ZWM3NDcyNmMzNDcxMTI4YjcwODlmYmQ4MjY5NGQyZDNmMDhkYzkzMDZjMGZjOWNlN2M4MDExMzhlYjFlY2I3NTZlNTcxZTkwNTliNzVlZDAzZjkyYTMxNTAyZmJlYjVmZWM1MWRlOTM1OTAxMGM0Mzk3ZDI4YjY1ZTM1NmUzODAwMWQwZDUxYWM5NjAwNzI4Yzc4YjU3NjZlMGYyMTc5MzhiNDEwZTc4NWI0YzAxZTg2YTM0NTJiY2IzODg0YWNhNDc1NDA4NTljYzQ5YjAwMGYwYjYxZmRiZTcyNzUyNTc0YjI3YTIyZDRjNDA0MTNhNDNiMzEwOTI0YjFiYjE0MGZjOWZkYWFlMjY2ZDY1OTMwZTNmMjM0ZmU4NDFkODJiMjYxNzZmZjg2YzVkMmJkOGQ5NjVjNTJkNzI4MDY0ZWJkZjY4ZGM4ZTQ4MzQ5NDE4MDFjY2EwYjJmMjU2ZDRmNmMzZGQxOWQzNWQ1MzYyYmJmOWI4YTNhMWM4NjNlMDkyNjg5ZGQyODUyYWRkNDg4YmY0MjY4NWIxMWUxZTFhZDU3NDVkMDc1NjI4ZDczMWY5MWNmZDc0OTE1OWUyZTFjODM3ZjRlZjgzZDgwZWExZGQ5YmRlZDVmODgwMThjZTFkNGIzMzcxZjk1NDM1M2YzZDg5NDM3MDA2MmMwOTY1ZDY3OTg2ZGJjNDgxNzE1ZjQyZGQyYzkxNjA3YWI4YjVmMGQ4OWY2NmU2OGQ3M2Q1MGQ2NDA1MjRkNzJlNjkxMzRiODg3Mjk4ZTVjZDhjNGI5MDViYTVlZmEwZTlkNjg1MjE0Yjg0MmY1MGEyYTM5ODNhMWFmNTg1YWYyY2E0M2RiY2YwMmM0MDg5N2FlMmUxYWI1MWRiY2U1NzAzNDVlOGUxMzVmYjdiNGViMGExZDZhMGJiNWE4YTE4MDdlNDI1YjJkNjI4MzYwNzY4MDU4ZTYxYWQxY2ZhYTIwOTkKK1NJRzogZDVlNDFiNDdhZDBmMzQwMDcwOTc3MGVkNDM5MTliYWZkZjI0MzgxYjY2MTU0NGU1MWQ4YjVjZWU5ZTk3YjM2NzZhNGMwZmZhZWJiMmNiZDJkYjc5ODUzMmI2NWNmNjU0YTViNmMxNjZlZjg4NmNiMGZiYmY0YTRmODQ0YzQ0MGIKKworVFNUOiA4MDUKK1NLOiAgZmFhZjU1ZDNjMjk3MTRiNjVjMjI4MWUyYzIyZDYxMzQ5NzFhMmU3NDAwOGZiOTQwODlhNzczZWVlYjQ0ODNhNgorUEs6ICAzOTg2MmVhYzZkZDUyZTM4MWJiMzRkYzE5NmJhOGEzNzRkY2I3ZGY2Y2IxNDBmZDBjZmE2Y2ZhMzliOGM3NTNmCitNU0c6IDk0ZTY2MWMyNTI0MGE4OWU4MjNkN2Y1ZGMwZTY5MmVkZGQxMzcwYzM1YWM0NGQ1YThjODc5OGQwYzlhYWZkZjBiYmZiNTQ5MjYwNTY4ZGJhMWM2OTA4NmJlZTYzNmJlOGVkY2NkM2NiYjI3MDE2MjQ0ZDU0ZDdlZDJmZWI3ZmE2NDYxNGQ0NTQ0OWQ3ZTA1OGU3MWIzMDZjMjJlNjkxMWMyYWM3NDIwN2JhZTVhODRkMGZjMjQ3YmU0OWQzNTZlNWQ0MzUzYmE1NTg2YjZlNGIyYjk3Y2U5ZTIzNzdiNmVlZDkyYzg0OWU2NzY5NDRhZTkwZGM0MjA4ZTMwMGUxOWNjOTFkYzI2YmJkZDVhMzBjZmE5MjgxYTE1ZWZkODczMDY2Zjg1YWYzYTI2ZjMxMDYyM2UwMDk4MDQ4NTNjYzY4NTU5MDNlYTY0YTkwOTg5N2UzMTVlNzNkMzEyOTQ4OTgwZWY2Mjg5ZGIyMWE1ZWJiZWM4YzhlZmUyMGQxZDUzZGZhYWQ2ZDlmNDI5NjUzMmU4ODdjMzczNTAxMDVhNjMzYWJjNzczMTg4NzUxYjI4YzNhMDhmMWI1ZWUwNDcyZGU0NjI3ZTZiNjFiNjgyNzhkZDUxY2VkNmE2MWVjZjM4ODg2ZTQ1MzM5ZGM2YzYwYzMxZTg1MGVmODI5NmFlODBmOWQzMTcwMTc3NmViOWFmMjE2OTNmNGM1MmVjMDYyNjI1NzM4ZDRlM2FmYmY3MWQxYzgxZmM0ODQ2MzYwMzYzZWE1NDFhOTc2NjIzYTVlNGU2YjZhNjcyMzdlOTIzNzE3M2YxYTFkNTQzMzAyODU4ODg1NzE0YzJhNTkxZDBhNzg2MjgyYTAyODVhMzcxMWY3YmMyYjYzY2E3OTg3ZTlhZTdkMDIwMzU1NTVjZjNiNmFkNmY3MWNhOThhYTkyODg4M2JmODFkZDZmODY0OTNlYWFiNTYzN2I0ZGQ1NjlkMWVlOGRlNmE0NGJjZWRiNjJiOTcwNmIxZGI4OWUzZjA1ZGYxNjMxMDAxN2Q4OWVmM2U0YmMwOTliNzIxYTVjOGQzODA0M2Q2ZTRhMjJjZjA0MDA5YzBmY2VlNmJlNjk5Mzc4Mjk5NTQ5NDFiOGI0YTFlYmY0ZGFlYTBkNzc0ZDA3ODJiZTE3NmM4ZTU5MTkwNzc1NmMyY2Y3NWRlYTZmNzg3N2RkNjg3NWI4ZmUxMDEyZjMwNTBjZmIxMjg5Y2YwODg2NjdlMTUyMmVlZWRjOTI3YWM4NmJmZTJjNDA3NDMyYjRhODEzYTZhN2E1NTA0ZTk5OTIwNmRiMTgyN2UyNWZhZmQ3MGNlZDM2ZGIzYjI4MWI2ZjdiMTRlZDViYWEwNTcyMzE1YTkzOWM1YmY0YWJiMTMzZDJlN2IxNmQ1MmRlMjA4MTdhZjA1NWRmNWYxNDEyMDc3MzQ2MTBhMGM2ZWViZWRhZmZmZDljYzlmMDY5YjY3ZjlhMWMwNDU0YmU0MWQ1NGMxMzhiZTU0MmU1ZTM4Y2ZlMmYyOTNmN2QyZDNkZjY2OTc3YWNiMzY2YTQyYzE5YjMxODVhY2ZhMWIzNjNjNjEzMWE0YTgxMTFjM2IxZjRmZDdhYzQwNmQwZTY5MTAzYmExNWI4YzRiZjI5YmMyZWQ5YzQ1Y2ZkMWQyNzlkOGQ5MzE0NDRiMmIxODQ5MjUyYjhhNzBlZWQ4MGZkMjYwZWRmNWEzYzAxYjk2OTAxNjBkMjMxMTg1MWQyMWM5MzAyZDk4NTk4NmVhZWViM2FlMmMwN2M3Yzc2NzIwOTRmOTFkYjBiZDUwYmUzNzdlNGQxZWIwN2VlNzZhZjQ5ZGMxMzZhMTQ1YTExYjE3MmYwODExZmU3M2Q2MjU5YmUzNzBjNGRmY2FiNmYxOWU0YTY0YjE1MWQwYTZkYjgwNTBjM2RlMmNjMzI1ZjVjNWY2NTk0Y2Y2MjQ4ZWIwODEyMDk1MzllMDhjYTM0MjI5ODRlN2JmODAzZGUzYTQxOWIxNDQyM2YxZTVhNTQyMjQwNDJjZTRmMDU0ODhhNjA0NGY0MDQyYmQ2NDliMWEwOGNlMTBjMjAwNmVhNzZlZmFiNDY0MWZlZjI4OTdlZmQ3MjRlNjA1NGEzYmQxYTY5ZTM5YTRhNWUyZDUwMgorU0lHOiA1YjAwODNmN2E4MjA2MWM2NWNmNmM3NTY0MGM4MWMyOGU4ZDZkMmU4N2Y2ZDU3OTVjOWFhM2JiM2UzOTBlOTE5OTBlODJkYjZmMDdlNjE0ZjUwN2E1NjBhYmFhMWVjYTY1NmM2NzhkZGNhZTgxOTgyNTFlNmFmMGI3NmI4OGQwZAorCitUU1Q6IDgwNgorU0s6ICA2ZDc4NTVlMzBmN2ExM2UyMzdiMDY3MTQ0MzQ2NDM0YmI0YjA1MTc4YzdkODhkNDkyZTc5MDI3YzRiMGYzY2RkCitQSzogIDcyNzMyOTM4MjhlZmEzNDk4MjIzOTJkYmJhYjA3ODc5NTc3ZTFhNzdhNmZkNmFmZTMzNzUzYTllZWM4OGM0YWYKK01TRzogZjhiOTM2ZTc5M2IwMTc1ODBjYzBlOWNiZGEyYWNiNjQ3NDUwN2Y0YmNhM2FmYzg3ODNlYzQ2ZWViODJjY2Q0ZGQyNTI1Njc2YWE2YWI1YzBkY2Y3ZDc1ZjdlMDMxMWU2ZmU2YmYyNzI2M2Y4NTc4ZmViNTVjNTYxMmQxZjI4ZTg4OGI3NjY1NmM0MWNjZDhhNzBiOWJjNjA0YjQyNzI0ZmEyYmM0MTFkNDRjMzFhYjY4Y2U4NGY4MzkzMzk5ZTM0ZDU0MDg1NzljMmJhMjkyMWYyZjhkMTE0ODdhYTdlNTI1NTdmZWVkOTY3NTcxOTlkM2FhZTYzNzc3NzAxNTRiMTdmMzU3N2M3YWMzZDhjNzZjZjc0NjFiNWU4ZDQyYTcxODUwNzhlZDRmODYyZmM1NzUwMmY2MTUwNzUzMDdiNmUxMDNjNzdjMWY2YzhiZGE3YWExN2U0MzVlMjFiOTQ5YWY0NGRmZjVhYTMwYTYyZGE3MTJmYTk5NjZhNjEyZmZjYTE0ODcxZmQ2Zjg2MGI0YTk2MTQwMTJjNTM2OTkxMGUwZmZkNmYwZmJkODg5YTljMjU3YzMyYmRjZjkwYmI4MDYyN2NiMjcyZWNkNDU5OTg5NzU1NTk1NWUxZmUwOGNkN2ViYjIxYzA3MWJlMGY0ODk4OTY5NmNiMzlhYTgyYWQxMWJhYTVkNGFjNjEzYWJmMWI2ZGI4YTIwZTY4NjgzNjIyMjgzM2Y4YjZkZDJmMDAwNjIyN2JlNDhlODU4MGRjYzhkZTYyMGRhY2IyZjY1YTY5MzY3NWQ2Y2I0NWJhNWRkMWFhNzBkYjc2YmM2NDFkNGZiNTY3ZWNiYzcxMTE0NDJlMjk0MTU4YmU1NzVjNzFkZGMyNmU5NGY0MTI2NmEyZmQzYTBkNDM1NzgxZmMwOTQ2NDhmYWRmNWYxN2NkNDFhYjg5NTgyMTg5NGVjMDgwNmIyNjJjMzkzNTM0ZmU2NmYyMWUzNzgzYzE0YTk2Yzg4ZjJlMDY1M2ZlMzJlNzVkY2U4YTQ2M2JiOTdlZWQ2YzE2ZjNmMzIyODE2OWFiYjViNGJmOWVhMzI3OGMxZmYwZjg2ZWFlNzEzODliNjQzM2FjZDA5N2VlZmE5ZTZlMDVmNDk1NWNkNTE3ODMwYjhkOTg3MGNjYjUyMjc0MTVlNTBmMjNmNjQ3MzIxN2E3NDUwOTY0NzBkY2E5M2QyYjM0NjczYzVkNmE1N2VkMDJjOGUwY2FlMTE5YjNmMzI5ZDhhYjY0OTg0OTRjMjkyMWJiNmY0OTZkZDA4MzgxZTdkMzlmMmRiNTc2M2IxNGEyODIxYmVmY2NhMGE5ZmQzMTI1NDVkZTY4YWJmMjA2ZDEyZDhlMDJlNzNiYzdlM2NiNzk2ZTdlZTI2Y2M2M2Q3NDFlZmFmYzUzNDVmODEzMjk1MWJjZmJmZGRmNjMxZmI3Y2I0M2VmMzViOTQ1M2M5MzkwZWIyM2IxZjlkOGIxYzcyZGViZDI0ZjA5YTAxYTlkYzYwZWU2ODE1MzA2MTg4MzU3NzgxYWY2ZTE4MjBhYTM1ZTRlYzEyMWI3Y2EzNGQ3ZGU3NjExYjI0NmEzZTcwM2VkNDhjN2ViMDNhNmZlOGY4NTJlZTdkMzI1NDVjOWQ4NTJkNjRkNWQ3NTkzMGU1ZjFlYmUyMWEzMDdlZmE3NjIyZWRhY2VkNmQ4NzkwMjZmMGY4NWE5MTEyMDEyODAzNzA1NTgyMjY5ZDM5ZjE0MzIzNGRmODkwOWFiM2Q5NDhlNzZkM2RhYWEyNDIyNmQ5YWM2MDFlZWYyNzdmZDJjZmM0YTE5YWVkZjQzODdhMjE2MTdiMDNlYzNkMzg0NWEzODU1NGY1ZTk3MDM2ZTU2ZWMxY2U2NjBkZjljMDYyYzJjOTkzYjc3YzViYTZhNmQwNTIzMWRhZTM3NjQxODNjM2U5NmFhNTM5Y2ZiMzQxNWZiMTYzYzY0NWIyMzAzYjJkNmQ0YmRhOGNhNmM3MmJjMDNkNTMwNWY5YjExOGU5MjVlMjdkMjlhYjdkY2IxOTY0NzBlNjMzOTYzMWIyMzgwNzQ0YzA0ZDFkYTM0OGZjMGZlMjc0Mjc3ZjgyZjk1YmRmYjBiNjRiNGNmM2I1MWU1NzFjMGRkYjNiNTNjYTYKK1NJRzogMGZlMjhlYWRkOWU1ZGQ1NzRiM2ZhYWVhODEwZDQ0NTIyYzhiMWJmYmIzZTNkNTdlZDg4OWZhZWRlYzkxZDBlMTRhODZiOTE0YzRjNzY2ZjFiZjliOGYxOGIwZGI4OTBkYjZjMWIxMjVkNTc4MDQzMzM2MTliMWUwNzIwYTMzMDAKKworVFNUOiA4MDcKK1NLOiAgN2VlNGU3ZTk4YzZhNDBmMGU3NDQxM2YyNDAzOWJkMjIwZGYxZjhjN2YwMTU1MjhkYmY1Mjg0YWI5ZjdjODJlMgorUEs6ICA0ZDVhODAwZjliMjIwNzBlMDE2ZWUyM2FmOGEzMTA5MDJiMzY5ZDU4OWE4NDdmMzQ1YzJlYTI5NjhkNmQwOTI0CitNU0c6IDhmYjAxMzczYzQyZTY5NjE0YWVhOTlhZjQ5MzIzNzg1ZjMzODYxYjk0ZTkwZjU2NTM4OWViZjcwZTIxOWY1ZGVjNzMyZTAwMTBiNThmNzI5MDUzMGRmMjIyYWM5YzczZTFjMmU5MmE1ZTYwNjFkZTU1OTBjYWY5YzBkNTAyMWQ3MjllYWExMTU0MWZhMWQwODIxNjBiZWFmNjExZTdjZmRjMGViYjMxNWQzODhlNTM4YjRiNTAyOGY5YjMwZDNkOTczMzQ3ZmZkNDQyNjNlZWYwODNiODFiMjFiODJlY2E1NzU2YTQ5NGIxZDgxYzA3ZGU4NDk1MDZkM2UzYjY2ODc5N2E1YzU0NDI1NGQ0ZWJlNWNmODE3MWIzOWY4NzI0Y2JjNDE4OTI5MWIzYzUzYzIxZWNlNDlhMWQ3Mzk1NjNjNjViNDkwMjU5MzU2NDdhNzMwM2FlMGVmN2Y2ZDI0NTU0NjQ1YTQyOGRiYmI0MjQ0OWY1Mzk5ZTM2ZGM3ODdiN2Q2OTU4YTAyZWViYmI4MzZlNWU1M2UyNmU0ODcyMzlkZTk0ZDFkMjUwZTc5NDNhYzBlMjJkOTI3NTBhMGNmMzQ3M2JlMWE2MjI1Y2JlNzk1NDUwNDgyNjlmNjIzN2VjOWY5ZWMzMDdlOGEzNGI3YmIzNGNkNDkwNmU0MzE2MmEzNzA4ZjMyOWM1Yjk4OWQ3YTdmY2RlMTA5OWE1NDI1NDZmZTljMzMxODJiYTUxYjg0M2U5NmQxMWM3OWU5MWFkMjFmNzE3MGUyNTdmZGMyODE4ZTEyZjkxNjhhOTc0Yzk2OGE0ZDI3M2ZhM2ZmYTlmMzVmZjkwNTk4MGVhYWQzNzIxY2FlODAyYmVlMzYyMTBiNDBiOTkzMTliYjY2OTk4MmU5NDNiMjcwYTRjNGQwYTkyZWNiNWJiYTJkZDhiNDBhYzNkMmYwMzI1YzQ2OWQ1ZTlkNDgzZjUyNDE5NzQwMTBjNWMwZGEzMzVmMTZlOTYyMTk2YzJlZjE0ZWIyNGFhZmJiMzExYmZkNWZhOGRjOGQyZDYxZTY4NzhhZDJjY2UwZGM5OTM5ZTQ0NTIyNzIzZDQyN2VmMzJmYjQzYjk2N2Y1ZTQ0ZmM2NjU3OTI3OTZmOGNmOTM0ZjAxYzMyNWQ2M2Q1ODNkYzNjYTlkNGZjYzc1N2Q5MTc4NTgwZGFlZjUzYWEzYWIyMWQyY2U0MzU5NTVkMWM2ZDQ3NjM4YzVlZGI2MmZmNTU2MTY5M2QxY2JkMTBlYzllMzk5YTcxYmY5ZGIxYzk5NjlmZDU5ZTRlZWIzMWFhNTliZjM5ZTlmMTg0MTc4ZGVmNzI0NmVkNGI4ZjRiZTViYWRhYTVkYjRhZjg2N2Y0ZjJlYzM5YTEzNzA0MjAyYzg3ODRmYTE2OGNlOTZmOWNmYWM3MTAxNzIzNjI3NWZkODU3Y2MzYzUxYTljN2FjMjU2MjE1ZTE0Yjg0M2Y3MjE0ZGM5ZjgyNGI5MWQxYTUxNzBkMGVmMWQzNzY5NmY5M2VlOTY2YTJiN2RlY2UyMmI0ZjNhZmQzOWMxNmQ2MDFlNWZmODQwOGQ0NWMxYTZjZTcxZjA2MDk3NmM1YmU0YzA0MmIxYjczOGRmOTU4MGJhNWFlNzc4ODBhNzBjMGI5NGYwZTFjOWY5YWEzNGMwOTBkNjEyZDU3YTliOTMxZjUwYTEyNWZhMzVjZTQwYTJjYjdmYWFkNTMwZjgwOTA4YzczY2I3ODI1OGFmZDI2MzEzOTAwNDFkOTI2MTdlOWJmNjRjZTk2ZThlNGFjN2YzMTI2ZDhhZjhhMDRjNzVmZmQ0Mzg3NjlkZTA2Zjc0YzJmYzIwY2M4MTkyZGEzNTNlNzkwNjEyODNiYmEwOGE4ZDI0ZTZlNGUyZTgzYmE1YjA4ZTQyNzUyMjYwNjIxNDhkOGEwMmFmYWQ2NWI2ZjYyN2NmYmQyOWI3MWNhMThhZWU1YjFmOTcxNjliZjAyMjhiMzc2ZjQxMDZiNTBmZDkxYTM4YTY2MjExZDY5ZWJiNGE3YWYwZTFjMjIxN2YxYmEwMTRkMWUwY2QxNzUwOGQ1ODE1NWQxNjNkZDlkZTJmZTFjNjRjN2Y4OGQ1YjU1M2U5YmExZTFmMjU0MzBkN2UxMjViMDdhOGMyZWQKK1NJRzogYWMzYmZlM2FkZjk0MWM5MzRkMzM0OWM0OTJkZTcwZDUxNjZiZTM4OWY5NTViZTg3YzI4ODNmNDFmMmRhMTQ2YzkxMDY1MWEzYjQ1MmMyZDczOWRjOWI1MzFjNTc0NTU2NWU2OWQ5ODM1OWYxZDdkOTNlYmQzNmQ3MGFiYmYwMGQKKworVFNUOiA4MDgKK1NLOiAgMWYyOGQ5MDkxZDE5NmNiYTNkNDU1MmU1YTMzN2E0ZDhhZjNmMjk1ZTYyOWU0YmE2ZmU5OTcwMzEyMGFlNDFlMAorUEs6ICA4MTRkMzRiZjI4ZWU2ZDkwZjAzOTU5OTA0MWRiODEwZjdjOWRhYTkxOGUwM2U5NjE5NzQxNGJjOWFhMzFlY2RjCitNU0c6IGE2OTQ2OGJjMzNlYmZlZjA2MTVjNjQzYzQ5ZGFjNmUwNGZkYjZjZmI4ZWM0NTg1N2JiYjdhMjdlNTI4ZmQ2MzFmYzM0MTFiYWVlNjVjYzFmOTRmY2M5NGFlZDRhNDMzMmZhNjg2MWUwNjVlMDYxNjM1NDE3MDlkNzk3MjhlMDFiZTJiMTQwYTAyMmM4M2U3YjIzYjllZDJhZDI4MzIxNjlkZmM5NTY5MDkxM2NmMzcyMDEzMDY1NzA4MGM5ZDVhNzgyN2U1NjYwNzU3NDUyYzVmYzNkY2Q4MGNjNmJlMDk4YzYyOTIyNmQ1NDY2ZTAyYjk3MTI2YmU3NGExNDUyZWUxNjgxNTA5NWRlYjQyYmYwNjU2NjcxNTAyOGMxMTgyNTgyMGE4YTIzYzYwZGEyYjY4ZGQ5YTU1ZGFkMmEyOWE0OTY0NDQzODE3YzA3ZDc3NmIyNDRiMTUxODY4MTlhM2JiZWQ0MTRhYmY0NTc5YTNlY2UzYTNkYzdiMTA1ZDBhOWRiYTM3YjllYWE3OGJlOGU0NmUxNjk4YjU5YjA5NDBiMDFmMzhiMjgzYzMzYTlhNGIxZDRmODE0NGIxNmVlYjVmYzBhN2FmMGQwODE2OTY2NDVhMWVhYjNhNzg3Y2JjZjg4ZmFkOTNkZDZjZDQ2ZDI5NWE4NzlhMTc3NTAzM2E5ODU2MzgyMmVmMWY2YjY5YTU4MWU0OTczNmM4ZDcwMWI0NDUzOTY5MzQwNTIxZTRhZDRiZjk0YjkxMWIwZTJkODZmMzRlZWNlNGE2Mzg1ZmYxZmU2MzIyMGNkM2NjNTkyZjM2ZDZjNDkxZmExOGY3YzE0MDQzNjBkMmE3NzUzZmUwNzNlMDlhMmZjNDJhNGJiZWE1NWJjOTZkN2YwNWM5OGFlZDJjYzRhOWZhZThmZDRhMDE5N2ZmMDFmYTdmMDA0NmUzYzNlYjU5YWFhYmNhMzEzYTRkZGFhNWQyMGQyN2MyYzVmMWFjNmQ4N2ZkM2NiNGJkMzVhMWVjNzVkMTA0ZjdjMzY3MzMxYTNlMjk1ZTUzYzRlODBiYWUxNGI5NzkyZDBkNTI2Zjc0MGQ0ZmYwMzZmYWY1NDg3OTY3ZmZhYmU4ZTg4M2QzZmIwZDE2ZmFhZGIyOGUxMjg1ZGVkNDE1NzBjMGIwN2MyNTU5YjUzMWUwZjkyNTRlZjg4ZTViMTBmNjRmNDgzOWE5YTBiNmMzYzdmMWI3ODUwZjRhZDliZjA5OTlhN2YyYWU3YzQ1YTY1OGVhNTMwMzZmYzcwMTk5ODQyYjhlNDllNjBmOTY3ZGUxZmYzYWJmZmY2Y2Q3MzViN2NkOGI4ZjllMjQ4ZjE1NmY2YzY1NDM4NjllYjk5ODIzZGFlYTg4ZGViYWY3OWYwMWU2NTIxZWM2M2ZlNzI3MjRlZTNjODIyYjg4YjM5NjhiMjQ4NTIwOTE1ODNjNDlhYjNjMTVmYTFmNzliMThkOThmMDRkOWI2ODQxYzlhN2NhMGRlMmZjYzAyZjk1ZGQ2NDk0OTJlOGI1NmEzMWVjMWUyNDQzMzdhZjZhYWFlZGU4YmY5OWZjODE0ZWY1N2MwZDVlMDhjM2M3ZWNjMTg5Nzk4MGFhMTY5YTk5MjZkMjA2OThkZjY5MzBlMjExMGNiNDYwZjQ5MzkwMTAwNzQxMDk1ZjhlZDAwNDEyYWU2OTZkOThlZmVmZDI5MGRhNWY3ZDBiNzI4ZDIwYTFlYmZhNmJkN2QyNzBmMjgxYTk4YzdiMWU0MDg0MzUxMjVhYTQ4M2M2YjdkNjMzZmY3NTg4YTk0MTY1OGY2MTI5NTQ0ZDYyOTQ1YjliOGFmNzFhOGM2MmMwYTUwMDc2Y2I4NTQxYmE3ZTRiZGU0ZWRlNDQxNzIyYzZlYjlkZjhjZmQwNjU2MzM5ZTg2ZDIyNmFiYWVhMDVlYTA0N2Y2YjgzMDc3MDFmNmM5YTQ0Y2M5Y2I4MzdiOGViNjI0NDU5MjVlOGE4ODgxZDI1MzhmY2IyYjI0OWU0ZWU4YjY4NmVjZmI0OWM0ZGY4NjQwMWQyNDlhYWMzNTg0MWU5MTQwMDRmOTQ1NWQzZmRlMzc1ZDIwYTAxZmJhMjdiMTk3YTY5OGQzODRjNzY1MDUxMDY4MDE2MjdlODMzNmJkMmQ3NmQ3NjFhOAorU0lHOiA1YmU1NTJmYTczMWU4MzY3OTNmNmRkYTg5NWRjOWIxZTJjY2Q2NjlkZTFjODQzZTAwZWE2ZmEzYzVlYmY5N2EzNGIyNmYxZjNhYzdmZjIyMjVlZTRhN2U0MzAwNzJjMTNkYTQwNjZkY2RjYzA1YmEyYjVmNjFhNmU4ZDIxMDcwOQorCitUU1Q6IDgwOQorU0s6ICBjNjRkZDIwZDQyNjI3NTI2MTk4YTIyNjQ3NjkwYzg5NWI1YjQ1YjY5OGY1N2E2OWRmYmU0OGRiZDQyNmFhNDcwCitQSzogIDJlMDFkNDA0MTZmNzhhY2RkYjM0Yjg0NDVlYTRmZDBhYjNmYTllNjY0MzA0NDc1MjIxM2YwN2M3ZjBmZjQzYTAKK01TRzogODIxYjlmN2MxNjEwNGI1MzNiZDEyNzE4NGZkNzJhZGUwOTJiMTNiYmQ5YWNlZWQyOWI4ZDEwZjE2Njg4OTIyZDE2NWY4OTMxZDUzZGY1OTBmYjcxM2I2NzRkODA1Y2UwYzlkNmNlNmM0M2JhNjk2ODE5MWQxMmJmYTA4YThjZTIyZThmMzM2YjJiNDkxYWYyNWQxYjE2MDZmOTMwY2FlYmU1MjIzOTJhODdkNDJjZTdiYzE2N2FhN2I2MTA1OTcyMjBhZjMxYTY2NTM1MzA3MWU4ZDllNWY0MjA3OGI5YzM4OGJmMDQwMjU4ZTIxZjljM2FiMzhjMDQyNzYxOGIyYzI4ZDM0MzBkZjI3OTIxYmZjNTg0ODdiMzQ2MTk3OGJmYThiZjU4NmNmZTgzNThlMDkyZjhmNDc0NjZlNzYyNDUxZDUwMTY0YTBkNzQzNjBmNjZiNGNkM2EzNTc1ZGEwMWRhMjM3NTI0MzBjMDM1ZGE4NTlmNTc3ZGUyMjI5MGFhYjRlZDdmMzRkMjY3NDA2YWI1NDdlYjQ0NWNjNjRkZjUzMDE5NDI3ZjRlYjcyYmNhNTUzOTcxNTNkMDFjY2Y3ZWM5N2Q3YTk2N2Q5YWZmNDYyMzFkMmUyMDI3YjM4ZjNiNDFiZDJjYjFiNzk4YTRhZTg4YWJmNDg5NjIxNmQzMTViZDUzODMwMjQyNTllNTk3NDI4MDJhOTExYmFkY2Y4NDczZGI5MWFmMzE5NzMzMzIwY2I5NTIxZWY5Y2U0MzcyNjdiNmVhMTdiY2FmZTVkMDkwM2IxMjNhMzVjOTg4ZjQ5ODM0ZjYxZGQ1NTI2NDBhMzI3NmRhMjZhZjE3ZWMyMWEyMDI5NjU4NmRkNmY0YjM2YzdhNGYwYjg5OWQ3MGI0MmFmODllMjkzNzAxMzJlZGZiNzJkNjgzNDE5NGExNjA5MzYwYjFmMWZlYWI4OWI5NmI4ZThmMGY2ODk4N2M1N2NjZTBiYWI3NjgxMTM3MThmYjE3MDlkZTJkZjMyMTc3ZDQ0MDg1ZGE1ZWZkOWRhNzBlMWE4NThjOTJmMjQ1YWNmZWU2NGI3MWYzZWIxNmUwNGZjMTM5ODllNjkzMzc5OTk3MDFkZDczYWJjMjY2YzlmZDRjZmY5MWEwZmQwNGZiZDhiMTNiMTJlNmY0NTAzODU3MTU4NDhlMDA3ZmEwZDQ2MzExOWZkN2RlNjMyNWI2NDAwNDJiNjU0MjEyZTBkYjhkYTFhZGViZDJhNzU4OWY3N2VlNGY3NTJkMjgyY2ExMTE5YzQzMWIxN2FkMGEwMjFlZjJiZjk1ZTVhYzQ3MDRlNjJkNzAzOWQwZTY1MWU0NTZkNjBlNjNiYWRlNDAxY2NhNzdjOWE4OTE2MzE3NGQ1MDIyZDc0NWFiZGM3NmI5ZmZlMjU0NDE1NTIzNWUzMDYzZTZlNGFlZWM0NGVkNWQ4YWI0MDhkOTY2ZmVjMTIwMTZjMTMwNzMwYmJjNTU4NzMyMDY1ZGE4MDBhNzBjYmZiMGZjY2NhNDVkMDAyOGNiZmQ5NjMyZGRiMmYwZWQxMmVkYWU3YjkzMGIxMDZjOWQxMjg1YTRiODcwZGU3NTA3OTk5Yzc0NzkzZGQ0OTc0MDg3MTljODk4YWJlNDlmN2YzM2EzM2U2OWI1MGZhNWFmOTQ4MDA2ODU2NmQxZmRkZjQ0ODJkNzk3MDRhZDhlZjExYjg4YjQyY2M2OWZjZThhNTU3YjViYTUxMGU3MDhiOTM3NTEyMzAzODU2ODI3MGRlNDA3MjMyZTk1NjIxZTJkMDQ1NzBiZWMyYzQxZWNjZmQ4NTViMjFmMGM5YmJhYTIzYjVjNTgxNWZjODg4ZjdmYmVkNDgyYzMyMGZmYTFlMDYzZTg3YjU1YmM4ZjdlZWVhMzc0MDYzYTliZTY1ZjdlZDkyMjViZjZjYTM0Y2ZhMzExYjc5ZjNhMjU4YzI1MmU2MzQ1ZWQ2YWM4NDc0OGY0NjgwN2E1NWQ0YmE0MTI2NjE2OWNkMjYyZDRmNzIyNzllZjBjYWE3N2ZmNDQ5MzM1MzJiZDEzNzQ3NTZjMjNlYzg1ZjU1ZWZlOWZjMjMzMWYyNmY4ODE2MjlmODBjMjY5MmY3ZjUzZTRiYzZmMjJlZmI0NTQ1N2EyMjNmMGQxYzQKK1NJRzogZGVhY2M4YzIzMjE4NzI3Njc2ZDU0MGEyM2JkYWQ3ODEwMjExZTZkNTdhZDI5NGMzN2Q0YjFjOWFmNmIzMzdhNTNmNzg4MGQyYmFmYTczYjMwNTA4YzAwODQyNmJmOGQ3Yzk2NWExZjRhNDIyYTFiYzdkNmFkNjIyNmZkMTk3MDYKKworVFNUOiA4MTAKK1NLOiAgMGY4ZTlmMzUyNmI0ZmFlYTkyNzZmMjJhMTc3OWU2ZjgyNzA5ODA4ZjZkMGM2MTJhZGZlMzJhNmU4YTA2MTAwNQorUEs6ICBkNDhjM2YwZmRlZjM4MmQxZDgwMzEzZTg0NmZjYTk1ZTQxODE3NmJiNWRmYTlkMzk4YzFkMjEyNDc3NmY2OTBhCitNU0c6IDBjY2QzN2M0Y2ZkOGU3MGNhM2JiMzk0NmQwOWQ3MGQwZjZhNGI4MWQ2ZGZiMDc5ZDc4NzM3NDgwNzE1ODk4ODA5MjczODJmNzQzNmE2ZWY4ZjUxYzI1NTQ3M2RkMDFmZWI1MmM4ZWRiZTRkMzI1NTcxM2U2OGQ2NDBmM2RjZjE1OGYyYmZiOWZiZWNmNzFmMDcxOWRmZThjZTZiNjAxMjgxYmE2YzIwYTU2YjRmOGU3Y2FhNGFhOWY4NjhmYmZjNWU0MzIxYzIyZDY1ZjAzODJjNDg5NmJmOWJlYmUzNTQ2OTQ5ZTgxODVhNGQ4MTdlNDViNWQxMjkzOTUzODIxYmRkOThlYzI1OWY2NGEzZGU1Mzg2NWIxNDllYTAxYzhmNjgzZWNkYTYxZGE1ZGMxMGU3ZWJkZGRmZTc0ODRmNWViMTAzMWI3OTE2NTg3Y2FhMzk5YTA2YjZmZWE0YzVlNmUwYmU2NTBmYmRmMDZjMTAzNmRmMmNjMzVmNjJlYTBlYTcxM2Y1MjgwOWQ3N2Y0N2MyZTU1YzkyMzkyNDgxNjgwYjYzMzIwNTYyMjY5MTNiMGNlODhhNmM1NWEyNmJkYjViOGJhYjNjZjQ2OTVhOGM1MjIzMDJjNGViYTM3ZDMxZmY3N2U1ODMwMWJjY2ZjN2M3YmU4NTgwYzYzNDI2ODc5OTVmNDRhY2QxOTA5NjVhZTBkN2JmMDY2OTU5MmI2YWQ4ODc0M2ViYjM2MGM3M2UwNDg0YTIzZDJmOWU5OWU5ZWIwMzhkY2JkODdjYTliMWE0OThmMWIyZDM1ZmVkZDdmOGUxZjdmZDhjYTUyNjQ4NjkxMWUwNzZhZWFiNDg3N2JiYWNmMzc4YTI4NTVmOWM1YWMwMzkxMzBkYzY5MGUxNzdkNjdiMjQ0Y2M4YWQwMzIzNzllZjcxZmUwNWU5Yzg2MTNkOGY1ZDZlYTNkNGUzZTQ3MjIyMDI5Y2MwMDQyNTNiZTQ3Zjg3ZmI1ZTMzMTRjNDg5ODEzNGI4N2FjZjEwYjI1MzhiYWQ4OTdiZGM1MDEyZDhmOTc2MmM4NzFiNjUzZDQwMGZlZTBjZWVkNWVmNmJkZDE2ZmFmM2YwYWJkYmQ3MmNkMGExMjk0MDU0NmYwOTk1ZmYxNGIwZjFiZDU0ODU2ZmY3NGMzNmViNGYyMmQ3Mjg3YWVmZGM2MDk5OThjMWY0MWJjYzNiYjNhNWZhNDkyMzRmNGZhOGU5MjljZDBmNTU0YjMxNTM5NWRhZTg3M2M2MWNhNzBlMDQxMGMyZmQ1YTExNWQyYTZmZjFmMWM5NGIyN2JhNDUwYjgxOTRiMjFmMDk1YzYxYTVmMjE1ZTNjODRmNWQ0M2YwZTczNjI4NmQzM2I4YzQ3ODE0ZGI5NzlmOWRjMDA5MTk4NDZiZWU2ODUzMzdkOTk1NTVhMjQ0NzJlNmIwMGIzZjRhMTQzMTFhNmM3YzkwNGJhNTg4OWRhNmMxZGRjYzExMTc1ODBmNWZiYzQxZjJiOGE0MjY4Y2YwZTlmYTViZjQxMjUzNGM5ZTQwNTJhYWNiNTA0Y2I4NmUyMTQ3YWI4MDIzZDU4ODAwYjc2M2Y5YWJmOWQwNDQwNzg4YTUxZGZlNWNiZDQ0MjMwYmE1MjI4ZjFmNTk2MGVhM2E0ZTQwNDRkMzZkYWY4MTFjYmRiZWM1ZDY5NjQ2M2Q4ZTk0MWYyNzIxNzU2M2JiNDRhMjExOGE0ZjVhY2Q2ZTc5NGRlMTdlMDI4Y2JkZWVmZGVmMmNiZjAzZGQzMmU3ODk5ZTY1YTFjZjgzOWY1ZDkwZTFmOGMzNjRiNTc3ZmUzMTA1MzUzZjY2NzY4ZGJmN2FmMGM1MjFhYThhNDlmN2EyMjA4MmQ4OGY5MDE0OThjOTBiOWQ3Nzc3ZWQyZjlmMGU4YTU1MmQ4YTFmYTVlOTYzMmVkODUzMjU4YzljMjE1YjZkYmI0MTExZGNmY2E1NTRiZmJjOWJiYTIyZjg4YmM1NTU1MmM2ZDg2MjU1NmQ3NDFkYWQ1OWYyMTVlMzcyODgzNDZjYTdkN2ZkOGM2NWEzODBkNzIwY2FmZjllZmExNDlmM2ZkYTIzMmRhYTViMTJlZjExYzBhZjA4NjJiZDAyMjllMDc1YTNjNmI2MGVmMGJiYjNkYWQ3ZjI5MDgKK1NJRzogMmY1OWEyOTM2MDczOTEzODM0ZWIxNWEwZTBiY2I5YWE4MDQwODk0NjhmMjRkZDFiMmQzN2ExOTM0YWU5YmExMDIwZmY2NGI3MmVlYzAzMjY4ZDBhN2MwMTJjNGU3OTYzMDBmNmRmN2FkZGEwMWM4YmM1ZTkwMTVjY2RlZTFhMDAKKworVFNUOiA4MTEKK1NLOiAgZmU3Y2RjNzk2NmQwZmZiOWM3NmY0YTE4ZTdmMGJmOTA2OTBlYjc2ZGMzZDNkNTA4ODQ2NDhlMmUzOTM3ZDAyMAorUEs6ICBhMTJlZTk4MTJkNmFmNmFhNDg3OWZhNzJiYzBhNjk4MDRlYTFhODVmOWJjNGEyNmE1YmE3Y2ZiYjkxNGQwZGQ5CitNU0c6IGRjYjkxY2YxNTU0NjFhNjBkZjA3ZWVjMjlkOTg2MTZlZDE3MjhiMzRlZmE5ZTFmNzQ0NWE5MTU4YThmODhkN2ZhYWFlMGUyNDcyNWFlZmYyNjNjM2Y3NGYwYzY4NGYxODU4ZjA1YjY5OTVkMjg0NmI2YTgzMmY2NzA4NWE0Mjc2ZDg2NjFhZWJkM2JmY2M3MzE4MWYxZjUxMDI5M2I2ZGU1ZTRiYjIzZmYyZGNhMWRmNjA4Y2IxNGFlNTIyYWM0YjUxZTFmOWI5NzNhYjhiYWZjZDUzNGU3MWM1NzE4MWIxMTg5NmVlMTA2MWZiMzY5Y2E0ZDI5MzlkMWU1NzA2MGQ5ZjRkYjBhNWMwYjA3ZDUyNjg3ZjE1NzgxN2U2M2UyZmU3ZWJjYzNlN2M5NWVmZTA1Yjg1OTkxMGM5NWVlZGU4NmQxNDM5OWU2MTYyNDhhMjhjMjRjNDE0ZGJiNjkzYWY5YmU0MzVhM2E5Y2RjMzNlMGUyYTU4NjkxOGQ5MWI4YTg1Y2VkZDE2MTJkN2MxYTIxNzkyYmRkNDNhOTE1YjE1N2UwNGJiM2E0NGVjYmUyM2ZhNDljYzU1ZGFhYmJlYWExNTVhNzM3Zjc2NWI4ZGRiMGYzYjE1ZDRlY2YyY2VmNzA1NGNhNzNlYzg3ZDkxNzUyYzJlOTkxOTVjZGIxOTU4ODQ0ZjE0NGVkYWI4MmE5NzU0OWZjOWNlYzA4ZTg3MTFjZmY4NjNiNjNmYzIzMWE3N2Y3NjJlNWNkOWRhOWQ1OTQwOTI1MmU5OWFiMDRjNDJiYzU3MDk3ZTQ2NGUzYzZhNDhkODAyNDFlNjMyNWUzZTQwOTQ5ODliMzRjMGU4YjMyYjFhNzgyOWQ1NGRmMzJhMDUwZWU4N2Q4ZjdjNGZlM2U0ZjRmNzA0OWQxZmVlY2RiZWE2NzEwODM1MGRiNGU4ZWRiZTNjM2ZmOGFiMmEyNWQxNDdiMWMxYzU4MjFiMGY4YzIxMDQyZDY1NWRiODMxNjkxZjU5OTgzZjI3ZDJlZDFkNDkwNmM1NDRlMjRlNzliZTY4NjUzYzliMjI5YTdmYjYxZWY1NDViYWIxNmU5ODgxY2I0ZDkyNjVlMjkzNTkwYTBiYzJkYzg2YmFkMjMwMDdmZjQwYzk1ODYxOTIzYjQ5ODI0MWMxMGQyNmJmNDg0OGY2MmJhNzM4M2Y2NDlkYzM4YWYxODQwZDBkZTkyOGE5YmZlZTVlMTFiNTE0MzQxNjNhN2FiMWVkNTM3NDE1ZjFlOTMyODVlMzY5OTIwNTcyMDE1OGY5NTU3ZDg2NDFlZDJiZjQ4NWI4MjEyYzhmODI2NjhiYWMzYzIyOGU2OTI0YzE3ZDBkOThmMmU2ZDkyMzQzNzFjNDQyNWViNzU4Njg5ZmRiMGRjMWNlYTEzOTRhMjg2MmU4N2JiMzhlNjI0YzM0Nzk5MTY4NjEzMjc4MjI1ZmI1ZTE5YzkyNDdhZGEzNTU1NGYyYzRhZGRiYjYxZDVhNTAyYTcwODEyN2Q2ZWZiY2E4ZjczNTA5MGJkZmRkODhkYjI5ZmJkMTRiNjlhYjEyNjJmMGMzZTI2ZDI2M2E1OWM1YWU0NjM5MDY1MzgzZDUyNTBiNTRjZjU5MmJiN2FkZmVhYWUwZDJmZTgxNmI2MzgxZTg2ZWEyZDFjNzE4MTNjYmMzZDhmZTJkMzFkZTdiMzBmYjZlYzIyOTRmZTQ1MzZhMzZjNmExODM1YTcxNjJhYjRiZjg5ZDE5NDY2MTE5NjU3YjBlNDY0NWFlZjUwMzUwNWI0ZDU1ZGY5NzdiZDJjOTBjNjQ0MDZmNDk3MGQ1Y2ZmMjQ1YjgzNTMyMmE2ZmJlMjM0ZTVlZmJiNWVhNDVlOGYwZDM5NzNiZTRhYWEyYWFkYWFiMDc3ZDZjOWIyNWJkNDQ5NDQwOWU5MzQ3OWQyZDE1MDdmNjZiYzhiZWY4Mjk5OWExM2M3OTQzYjQ3MmI5ZTYxZWMyOWRlYmVmYmYyMjQxNDIzZTBmYWE0MmMxYTMzOGE3YTYxMzFkZWQ5MzViYTAzYTI4NjYyZTY4NTkzMzY4ZGRlNTRiNDYyZjJhNWZiNzQ2MTg1ZmY1NTAzZTY5YmEzNmJmMTZmNzE0NThjZGQwNTdlNWMxNzI2N2Y2NzQ5OGQ2NTI4NjBiNDY1ZQorU0lHOiBiNTJkMDNmZGViY2Q0Mjk3MzdlZjcwOTIwNjg3MjExZmJiNGMwNGY4MWUzNTVjZWM3MDcyYzUwNTQxNzVkMmVkNzdmMzhmNDY2ZjAwMTQyMmRhOGZjZGYwNjdkYjE0NTEwMDdjYWI2MDdmMDQ5YzJlMjYwN2I1N2Q0NDcxM2MwNAorCitUU1Q6IDgxMgorU0s6ICBmNmM5YWI1ZWE3NWYyOTRlOGUwYzA3YzRjMDllZDhlZWEzMTEzYmRmYzJlZjc1OWUyMGEyNjQ1NzE2MDQxMDhkCitQSzogIGIxMmZmNTViZDNlYzQyNjEwZWFjZWEyOGIzMTNhMTZlMTljOWU4YjQ3YzJiMTUxNzA5OTFiZTA4OGQ2NWNmNjMKK01TRzogNzE2MjNiMzk3NDNlMzljN2UwODYzODgwNmQ0NjhhMWE4YTZmMzVjMmFlMzg4ZWVmYzI3Mzc0YmI1MjUzODgxNGM0YjM2YzliOGUzODlhZDgzMTgzZGUwMmExYmJkMDMyNTczNGU0NjE4NzU0MDkyMzM3ZDNlN2RjMTI1NjkyOGUzNTI4ODcwY2E3ZjAwNjEzYTI1YjcxYmIxNWQxZDllYWFmZjlmMjI2OWI3MWMxOTc2OWUwMDNjZTg0NTYxNGIyZWM5NWVkMjhjYTg1NWI1MjIxZDRjYjgwYTZjYTk0NjZhYTMzZTI1MTBkZGZmN2RjZTE4NjE1OWRhNzBmYzhiMWZiYWMxMmEyNmUxZmMwOTQyMjc2ODkyYWQ2ZTliMDAzZjU2OTU5YmQzMTNhZjI4OWU3YTA1MzJhNjY0Yjc2Yjk2YjkxOTg1NGUwNjUwY2I4YzUyZWM0YzVmYjUwNTNhZjJmMGNmOGMwZjIyYTUyM2Y5ZTJjNjQxOWRmOGQwYjcxNGVlMzc3NjgwMGViZmE3MDc3NjA4NDY2N2Q2ZGNmNTQxZjE0Y2YxNjYyNjJlMGY2NGM0Mjc2YWUyODg4NWU2Y2ZkMDk3YjcwYzBkNjE4NmVhNWRiZDAzMzMyM2M5ODc2MTNkYTA4NjQ1ZGUwNzIwOGJhZTEyYTE3OGQ4ZjdmNjUwYTI1YWZiZDcwMWM4NWExYmE2MzllZjlmMTIxYzQwYzVjMTI5YTQ3MzczNDMzODZhNDgxODNmZjNjNTkxMzg5ZDg5ZWNkYTUyNmNmZmIyNjc0ZjE3YmIxYzIzMDkwNTU0YjEzNDA4NDk3OTZhNmQ0NDQ0NjBiYjQxOTQyN2U5M2U2NTg1YjBmNGYwNjVhZDg3ZWU2ZWRmNTRiZTYxODhhMWRkNWFjZTEzNjRkZWZhNTYxZjc0ZTI2NzY5YzliMjkxZWU3NTU1Mjc2NTAxYzZhNDkwODBkYTA5MjRmMzc5MmMyYTcyOGE1MjAwN2IxYzA3Yzk1NTc4ZmVkYWY0MDM5OTYyMzllOWM1NWE5YTQ0YzNkZmNjMzdjZGYwM2ZiNDg1ZGI1YTA4ZGZmMTVhN2E0ZjdiN2YxNTQ3NDJlODQzMTU2NGRjMTdkYmQ0MzJlMTAzMzdjMjI3NmZjZmQ5ZDcwZjdjM2Q1NzAzOTNhMGMxOWY2NDA1MWM3M2E4NzBlMjA1NTg0MTA2NTMxZDFmZDJhMWRkMWM5ZDBmY2UxNGZmYWFhMDc3YmI3ZTI2MDI1MWVlZDZjNjJiYzZlZGMyNDIyNTE5NDQwYzIyNDRlYmEzODQwNDZiMGVkZGFhNmNmMmMxYzdlZWViZmNkNzhmY2FlMThiODIyOTA1NTJiNTljMDQ2M2RjNDUwNjE4YmE2N2M3NzBkZWMwZTIyOWI4NDYwOTM2Y2E4MTk1NjJiY2IzNjk2OWM4ZmY3MGJmMTEzYzExNjcxZTAwYjk0MTM1NWJmMDFhZDU0YjA1Y2ZlMmEwNDhiMzg3MjhjYmRkMWI0OTgwOWUxZjIwN2FjYTMwOThkOTk0MmVlYzQ3ZDZjOWQ0MTNiMzdjOTE0ZmVkZDM4YWNkNWZmZTQ5NmNhYzc1N2MyZWY4Yjc3YmQ4NDAzZDE0YjFmYzk4YTkwM2ZlMmI5Nzk0NjgyMzNhN2YyYWVkNmY4ZDUwOWQ4NzRlMWRjZTA1MTQ5YWY5ZGYzZmU0NTk1YzcxZThiYzQ2M2RlZTkzODRkNWUwNTA1ZDJhNmIwYTJiOGExZWQ2MjE2YWFhZTlkY2M3NjAyNDg3YTRjMDg1MWZkZjA5NjI5YzFlOTkxMTg4MDlhOTU0NGE2NTc3YWY5ZjkxNWQxZTY1ZDgxNjIyMGM0OGM4NDkwZmE5YjcwZGE0MjJhZDY4MDAyMjNkNmQ4YzM0MGY5ZWFiMmNjN2UxNDkzNjIxMjRhMzAwYjQwY2JiOGMwYTY1ZGEzMDFkYmJhOTMxYmE1NjRmMzU5NzNjYThiZjJkMWVkYjU2YzE5NDY2MTk1NWIzYjY4MzgxZmExNWQ0YjhkYzZhZGExYTVjZWJkYTNhNGNjYzU1MTIzZTAwNTdmNGY4MjEwNDE5MzdkZDU0OTIwOWM4MmUxMTY1NzBiYzkwOGEyOGUzMjk5YTk0NDE0NDM0OThmNzRiM2NjODhlMWE2MmQKK1NJRzogYTdmOWQwOGJhMTQxODNlZjI0N2YyYzI1ZmVjYzJiODNlZGE2ZGU1ODAyMmU0NjZjZTc4ZmNmNTBmNzFjZTI2MTYyNDQ2NTYyZWVhNDVkNjNhMjFjM2IyMjU2MWZkNDY4MDA1OGFjYjgyNTQwN2ExNTQwOGYyNzEzNjFhMTQ2MGYKKworVFNUOiA4MTMKK1NLOiAgNDMxMDNkZjAxYTQ4YTAzYzU3ZjMyZjUyZDcwYzY4NDllZTQ0NTgwYjJhYjRlZTcyZDU0OGQ4NDgxMzRmN2NlYgorUEs6ICBhM2NiZTBkNjRiMDU2MGJjYjVhZTAwOTAwMWUzMTRkOWVjOTA3OTAxZGQ3NGE4MDRhMDA1OTAyMmVkOWM2ZDA0CitNU0c6IDczOGNiZjA2ZDAwZDRkY2Q1ZTVmMjQzYTFjMThkZDVlYzIwMjc4ODg0Njk1YTFjZjNiZWE2N2JiNWIwNWRkN2U2MGEyYTI0ZmQzMjViZTZiZjQ2YjQ2Mjg3M2VjOTA3ZjlkZTg4ZGMyYzc2MjYyMGI3ZTBlZjcyNzY1ZDRiZGE2NjI0NTQ5OTNjODI4YTE3NDZlOWVkOGQxOWRmZjQzYzRjNDg1MjdhYzg0NWYyMTg2YTRhZDdjMWQ5OTJhMTYyNDVjZDU3MzA3M2UwOTQwZGNlZWQzNjgxMTBiYjVmZDBhNGM4ODM0Y2U4OGE3NzEyNWI5MTQ3MzkzYzhiNThjYjE2ZTVlYmRjMTgyNDRlYmZhNDhiYWJhNDY5NzNmZGNkNDg1YjFiMmU1ZjNiMGU3MDk5MmNmMTk5OTU4MDYzOGQ4N2YxZjViMjdjNGQ3ZjkxZGVjZjM3ZGUyZTczNGUzMTk1NTM1YzYzMTA4MmIzZWJhYThjZTMwYTljMmMyZGIwMTZkN2QzNTQ3ZTYyMTYxODg1MGUyMjA0MDAzOGQwZmUwZmFlYTJmOWJmNTEwYjY4MmM0ZmQxNDc1MGU4OWI0YzE5OWVmMGM5OTA1MDA1NDNlZWVhYjVmMGI1MDdhMzEzMTk5YzJhMmEwMjYyZDZkODE0Y2JjMDkzM2M1OTJlMjU2YzNlMjlkNTI0YjA2NmVhNWE0NTQzMzYxYTEwNDUwZTBhYTY3NWM2MTQwOGYzMDdmMjZlZTU4OTY5ZDYzMjc4ZjEzNWI3ZGNiNjY2YjkzZjJjYWNmZDgzODczNDcxZTk3NGEyODZiMDkwMjNmNTAxNWZhMWFhZjE4YmZiZmE1Zjc0Mzg1ZDBkZjZiOWFkZDUxNmZmYzBjMzExM2UzN2UwOTc4Mzg2NDZhYzkzMDU0ZmY0ZDk2MDIwNjY3NDRiYTMzOTY5NTNmZDc4MTY4MTMwMTcwYmIyNzVjMTUyYmRkMzY2ZjczMDY1YzBhN2FkN2FkMDA3NThjYjk5YTdhYzFiNzgwOWQyNmRmYWFjNzU4NDY4MjAxZWViNjBkZWEzNjhjMzNmMjU3YWZlMmYxYjRjMDJlMzdiYWZlNDBmNWQ3ZmQ0MGM4N2QxYzU2YTBjYjI4ZTlkMjgzNjlhMzkyNGJjZWY4YjZkOTk5ZGNmNDI5NGRkOGM0MTQzZDc1YzZjMjViNWE0NTQ0NDg4ZGRlNzI1MjQ4Yzc4ZDkzYzE1YjgxNWIwMWNiZDBmMzFkMWIwMGFjMDQ4MzdlZjg1YjQwMDNmYzk2ZDQ0NTdhYzVhMDIzNjIzZTY3YjY2ZGE0NzAwYTA4NTlmODNmZGNjZDNjN2FhZTA5ZGUwOWEwNTdlMDBkYjQ0YTJhNmFhY2FhMjE3NDZhNDliODIyNDY4OWE1Y2MxODU0YmEzZGM0YWEyYWEzNDUyNGU3YTVhODlkMTFlZWEzNTZhYWVhNWVmNWZiZjU0MmM5OWY1NDRkYjk0MGY1MDg2ODM4ZWUyYWIyMThiOGQzZjJlMTA3ZDBiMjlkNGIwNDgzMGVlZDc5YzA3NjhlMDJjMjg0NGIzY2JhMzI2ODk1ZjRhYjM4YTM5OTRiODNhYjMwNjAwZmY1MTFjY2I1OTU5OTJmOGNjMGQyOTU0ODA3OTcyZGEzNjViMDZmYmRhYjUzOWIyZTAzNTk4YjM0ZTUzY2ZjZjkzOTkwYjk3YWFjMWQzMjk3ODMzNjZkNDUxZjk3MmI4ZDhhMDBiNmI4ZWNkYjM3Mjc5NjQ0Y2VjMTQ0N2MwOTk4ZWU0ZjcwOTBmMzRjOWNjODUzMDU5MGNhZTc2NTM2MGFhZGIwYWIzMTM1MDA0OTQxYzkyMzAyY2JiMmIzNTBhMTRlOGYzMGFmNTMyNWMyYjQzODAwNWUzYTlkNDU4NWU2MzI2NWMzMjdiYTcyNTc1NGIzMzI1NjkxN2ZiOTY1YWU5ZjAyZWQyMTI2YjQ4MTQ3M2RjMGU5MzFjMjUyMmJmMDBmZTZhMmVjOTVjNzkyMjQ3YjFlMDMzOTYxMTJmNzgzMDcwZTJmZTZjMmNiOTgyMjUwZDEzZjJkNTQ2MGM3NDRmZGU0NTMyM2U2MzFjY2NiNTQwY2Q3MjVmMmM1NWE3MDU4ZjIzMGU4MmI3OWYzNjZhZmNiYjAyNWI0OTI1NTQzOTUKK1NJRzogMTk1NDQ3YmViMWRlNGE3ZTM2ZWE4OWE2Y2UzYzk5YmNjODk0MTFkZjVlMGIxNWY3YmEwYjFkMTEwYzQ1NmFiYzZiM2Y1ZjFkYTYxMDZlZDg4Nzg2NGJhNTZhYWI0NjZhOGE2M2IzMzVjZmNmNGM2NGQ2NWMwZTZmYjQ4MGI0MDEKKworVFNUOiA4MTQKK1NLOiAgZjkxMzllNTc5ZmE5NmViZDYyODdkYjNiYWJjZGE2MGY5MmU3MzE1MzU2NmY5MjRjYjVkZTA0ZGU0NDkzNDgxZQorUEs6ICBjMDZjZTMzNTUzM2FmOGQ4ZjMzN2YyYjM4ZTBhYWZhMmNlOWIyNzIyM2NkOWRkYzVlZjMyMDI3ZjA0ODg5YjdmCitNU0c6IGIzMzA3NjRkZGM2MjhlNGFkNjdhYTQ5ODJhZTg2ZDQ1ODEwNzFjMTkzZWMzYzU4ZjgxM2Q3OTIxYjg0ZDJhNTQ1NjJiZDg3NDE3YWUxZGU1OTBhMWE0OGM0ZWM3ZDU1NmFkOTMxZDY1YzA1NDNmZGYwNjA3Yzc0OTg1OWVlMTJmOTk1MjAyMGMxOTVjZjg3NDYwOTVlMTA4N2NjNmMzYzhlZjlkMjQwNTI1NjBjZTgxM2Q2MTM5YjdhNzVjOGY0YjhlYTMwYTljNGFiODg4ZDBhNjM0MWM5OWFiZDM1ZTA5MDNiZmU1NmM5MzE1MjM0MGM0MTI3NmQ3ZjI0ZTA5MTJiMTJhNGRiM2Q3ZWU0NDg0ZGZhNTNhZmMwYjFhZWExNDA5ZDFlMDMyOGFhMWM4NjA0MTI3Y2EyZWIxYTVlODFiZjMxZjhjN2E1MWM2MDUyYzUzNGVmZTZiM2QwZWU3NGZmNWE5YjExYzYxNTdlMzY0NzdlZmE5MzgyZjU3NTFiZThjOGM2NDU0YzQ0NmQ2ZjhkYzdlOTI5NTI1Y2MzZGU3OGNiMWJhNGFiYTliZDRiZTE1MjYxMDQzNzU4MmM5NjVlZWE0OGNiZDRjYWE2ZjMwOGY4NWY0ZjhkMDA2YTA0MmY2MTkyMDA3NjJlMWJiOWJhNDIyZTY1NDc1YjMzYTk0OTQyOThjZmJiNzVhMTUyYjM2ZDJhMDU1MDE4MDc3MDViOTUyNzY1MzUwY2QxNDE0MWQzNWQ0OTg2NjkyZDZjM2JjZmM2ZDYxZGYwMDUyYTYyMGFhYjhjYzEzMjA1ZTc1NGMxNmY5M2VjYTc5MjBiYmVhNTE1N2VmMTEyZjBiNjRjMTA1NGY5MGE1ZGRjMTc1YTg5ZTI5MjQyZjU3NjQ2ZTc0Y2M4ODVlODFhMWNjMTQ0YzNkNzgyZDExNTJhOWU0Y2ZlNzZjYjNmZmFiZTdkYmU2MDNmYjM4NjllY2E4Njk5Njk4NzA5Y2M4N2ZjOTYxYzFlMjk5Y2ZjYTIyZTMyNDJlYWU3ODhjZmYxMWJmY2E2MTAyNjc0NWY0OTc2MjI1YjI2ZWUyMDBjNGYxOTEwYzRiODNkZjVjZTQ2ZWY0ODdkNzQ4ZDljNGM1MDIxNDFiNzg3NGNhZjQxZTVhMjk3YjI0OGMyYmFjNjk5MGExNWIwN2I0Y2Y4MTBlNTkyODc0NDJkOWEzNjk2YzAyZThkNzMyNGQzY2Y3MzBkZGE1NDA1MzZiZWIxM2NmZGVhZTYxODBkZDc0ODQ4MzJkZmE5NGU5NGFhNmNiYTExN2FhZTE3MjcwZjQ4ZjkzYjJmOThhZTk1ODE3MTgxNjNmNDQ2MzU0NmMwYWUwZjI3OWMzNmI5MmJlZTY2ZjFjYTJkNmE0ZjcyNmQyZGZlZTBiYzExYzFkOGExZmE2MmMzY2M4YWJhMjY2Yjk4NzU5Mjg2YzEwNjg0ODNiMjM3NmI0MDNjODg3ZmJiNjU3ZGMwZjI1NWRlYTkwZGJkMjMzMDhmN2UwZTg0MmI0OThhOGRmYzdjOWNkNWFlZjBlODdkNTZiZTQwZDUwZmMxZGQ0YzBhYTdkZWU1NWFlYmU0ZDZiNmE1MjA1Mzk2MmI4N2IwZjJlZTA5YTkwODE2MTU1MzMzZDVjNTdhMTQ3MjRlMDAxYmMzZGVkMTc4NDNiNzZlMmM0N2ExNzYzMzljOGRlZmM1NGI1NWIyMzU4YWU3ZDAxYjBmNmUwOGYzMTIxNmFlOTAzNDA2OTQxNjhhNWE3OWVlODgzZWE3ODU4MDA3ZDE3YzM3MzU5Yzk5ZDY1OTdlZmU0NjBjMWEyZjc3MzhhYzMyYzVlYjVlMzllNTAwYzQ5YzBkZmY5YzQ2NTllOGM1MGNjNWNhNzlkOGJhNGU1OTcyZDY3MjI1NDY4ZmJhNjQxNjdhNmIyYzZmMzY4OTM1YzdhMDQ5ZDM1ZDM1NWM3NjcyNTIwZDNjOWU0ZTQzYzY3MWMzY2I4ZGVlMjU5MDQ3NDk1ZGUwZjU2ZGQ3MTkxZDViZDRiYmQyOTUxN2UzNjQ3OTJmZjg5ZDMzNzk5YjZlNzgxYzIwMTkzZjVhMzE2ZmI0MGRlNzRmZWUyYWNjMjVlNDdmNTEyMjE0ZGUzYjFlOWIzODJhODY5MjljMTU3M2QzNzI0YzI1MDE3YzBlNQorU0lHOiAwNTFkOGQ3ZjBiNjhkMmVlYzcyYzgxYWRmY2ZiMzFhZTg1NThmNjBhYjYzYzlmNTY1MmE4ZGY2MzhmNjY2ZjFlYmMwYzZlMGI0MTE5NTNiY2RhNmI1MTUxYjJiOTNhMzllM2M1MzMwYTg1NzNlMTY4NzkyMjcyYWJkMzZjODEwYQorCitUU1Q6IDgxNQorU0s6ICBjOGVlOTU0ZGI1YTExYjI5MmVkOTc3NjRmYWU2YjI4MzA1MWRiNTdkY2RjMGFhMGRmNTM5M2JiNjBjMTEyZWQzCitQSzogIDVjMmY4MTgyNGU5OTc1ZGQ3ZWEzNTNiYzY2ODA3ZGVkYzc2MTAzNDk3OTRlMmZjMDhlNWEzMWUwMDJlM2ZlMDcKK01TRzogN2JhM2ZiNTY4MzE1YWE4MWUyMWYxOTc3ODBlZGMyYzZlYTI2ZDhkMDZhNDM3ODkxMmZjYTIzMDFjZjFlYWIzZDgwM2M4NDY5ZGVkZGYzNzY3MDNkZGI3Y2UwNmE3N2RhYjIwZTAyMzQ0ZmFkY2M1MDAyMmFiM2M3MTNjZDAzYzFkYWE5M2YxYzdlYTU3MjYyOWY2MTBiNWUzYzUxNDExYmI4YzE5Njk0YmJjZTkwM2NhYzQ3MDVmOWI1ZGQwZjQ3YmM1ZDBhYTMyNTNmOTA4ODcwMjk5MDI3ZmZiZDM0NDllZWJhZDQ1MzMyYjVkMGM0ZjUzM2RiZWQxOGE5OWEyNDk4YjkxNjRlMjQ1ZmI2NWMwYWZhMGIwNTM3MDNhMGNmOTU5NDBhYzdhMDE5NWQ0ZjcwNDY2MDljZjA0MzcxMzM4NzA2YjliMTk4NmMwZjExODE3NWQyY2RmY2U3NGE2Zjg4NjU5ODI1ODU0ZTk0ZWNlNThmNTE1NzYzNmQ2MjM1Yjc2ZDMyNzQ1YTJhODFhOTY3MWE4Zjg2MDI3YmE5ZTAxNzYzODg4ZmMxNzFjZWY3YzQ1MWMzNjA3MmJjNzQ5OTgzOWQ0MzFjZjE4Y2Q3YzZjOWZiYTNhYTcxMmEwNTQzMjhjY2Q2MmJlNDgyMGFiZDVlNzgyMTYyNzY0NjExZDQ1MzliYTJjZWJkYzIwOWIzZjRlNGI2OWMzZDY0MDczZTkyMGQyMTUyMTRmYjBmZGE0NDE4NWFhZGE1YzM2MTI3YTE1YmExNWNhMjhhM2FkMDg2ZTlkMDMzNjY4NjljNjBjM2ZiY2ViZDg2OWQyZTQwNjQzZTgzM2Y4OTQ4MDNmOTgwYTJkYTdlYTRlNTljZTRkN2MwNmZkMmFmZjA4N2VlN2JjZmRkYWEzYjMyODE3Y2U2M2E2MzU4N2RiYWZlZjM4MDAxM2E2ZjFlZTM3MzRiOTRjYTNkZjk2NDRkZDA0MzQzMDJlY2IzMjRhZmUzNWY0NjVjOWMxYzkzMWIyNzI5NGZjNmVlMDI3MmRlMjI0MmFlOTBkN2YyZTA2NzAyN2VmODY0MmU4ZjE3MWVkODgwZmZhYmNlOGEyMGExYjNlMzM5YWQ0ZTNmMWE5MDAxZjIwZjkwMDI2MTg4ZmRlMzRiMjE3YTZlMjZhYWZmMTg0MjJiN2Y4NDNkMGZkZGEzMjFjMzE5Yzc3OGYyMzEzN2YyMGNjYzFiZGExODkwZTViYzkxNmE1NDU2ZDA2OGQzN2I1YWNjNjM0NzcyMGM1NmE1YTQ5MWJjMzQ4ZDZjODQ4YTljOGZlY2ZlNThjOTJiMWYzMDJmZTE0OTE5NzE4Y2Q1ZTc4YjdmZDYwMWQwOWRjMDFlNjkwNDg2MWU4ZDY4YjNjNTc1MzViNjEzNjY3NmNiYzZlODM5YWYwZGQ3MzlkYjg5YTdhYmQ5MTNmZGY2YjAwZTljYTAyNjAyZGU2Y2EwYWZkMDkxM2Q5OTJmYmFhOGZmODIyYjlkOWIwOWRkYTdhMjliZTkxOTEwZDhmYTNjYWEyYTVlNTE4MzQ2YzE2N2M5ZjUxOTQxY2Y3MzUzZjNmMzRjMWRhYjMzNDg1ZDBhOGMxOWRhZjk1MWZkM2VmMjBkMGIxMTlkODAzOGRmOTBjMTE0YTI1YTViOTNhZTQwZWM0NGI5YTVkMmJjMWM2NTE3YzY4MjUwMGQ0Y2RjMTk3MTQyYmVjM2FmODIzMmMwNzE0MjhkYzU0YzBkMzA0NTQyNzJlNzMzNmIwYjU4ODhhNmU4ZmVjZGU4NTllMmFjY2I3ZmIwOTRhY2M1NGZmYTQ4MWY3NjIzZDk0NDY5MWYwNGZiMzYxM2E5OTU0OTgwZjE3ZTJhZDIxNzNkNjhjZjBlYzFiNjdkOGE5MWQ2ZWM4Mjk0NmJjZjA1Y2I5MDY4MWE3MTYyN2I1OTAyMzgzMzRlM2Q1YWI5ZGE2YTA4OWJkNzI2MjRkZjkwNzRjZGQyMzA5ZTA0ZGZjYWUwMzI4MTJmZTg0ZjlkYjg4MmNkZWFhZTY5ZWU1ZGFhNWE2NmZmNDI3ZmM0NTJlZGQwNzY5YjZhYWJjYzEzOWQwZjcwYWY4Yjk3NDMwZTY0NGY1OGE0MTI4N2E5M2Y2MzFkZWRhODJjYTA3MTZkNzk3NTRjNWM1MDNlNTJhNjY1ZGEKK1NJRzogZjMwNzdhNzUxMDFlMTIxZTVjM2U3N2Q4ZWQ5N2I1NzhkMjM5YmQ0MjE4MDNkMzQ1NWI1NjU0NDA1YTRjNTg2YTYwOTJlMTNhODUyOWJhY2U0NjhhMzA1Nzg0YjM3M2U0MzNmZWU0YTNkZjg5NTZiZWZhMDEyZmQ4YThlZWQxMGMKKworVFNUOiA4MTYKK1NLOiAgNmRiYzU1OWU0YWIxOTNlZWJmNzBjNWMzMmQ3OTdiZTAwYjczMTFlOGU2NjkxZGE5YWZjYzE4NzI5MWYyNTAxYworUEs6ICAzOGE3MDM0NDc2ZmI5MzgyZjE0MTc3NjhjNDIxNjI5NTFhMjYzNjkwMmMzODk4YzAyOWJlMjc4YWI0YzMxZjMxCitNU0c6IDg4ZWUyMzY1ZjdjZjlkZTMzYWNkNTM1NjQ5NjhiMmRjN2Y3MzcwYjdlNzAzM2Y0YzY2M2E4OGMyNWY2MGY3ZjcxMWQ2MTkwOGViZjFmNWJiNzI4MzU1NTNjOGFhOGM4ZTRmY2RlY2QzNzk3ODIzODI4OWJmNmNhODQ4NzZkMjI4MjE3YTI4ZDgxYjBiNDU3YzkyMmU5MWVjYmE4ZDNlMWQyZTY2NTljMmIwYWVhMDUxYjljMmUwOWM3ZGZlYjUxZDMwZWRlNzY3NTcwMzQxZmZhYzFlY2YwZGUyMGM4MmQxZTllZDA3NzVkZWFjNzJkYTdjMmRlYzIzNDg2NWRlYzgzZjY3MTVlMWMzYzU5ZGUyMDMzY2MyNGQ4NmJjMmQzMWFhMTY2NDk2ODZlZGUwZGJiZDg5NjRjM2E2NGEzZGNhNTU4OGQ3MjQ4YjFmMjRkZjhkNzVmMDlhYWM2MmMwNzgyOGNhNDMxYTNhMmQ3N2E2MGNjOTNjZmEzNDk1Y2FiZWIxOTA0ZWQ1YjU2Mzk4NGU4YzIwNzc3YmFjODc3NDEwOGE2NGVkYTU4ZmIzMjAyNDRhM2FkZDNlM2U3YTc2Y2QxMzdjZmE0YTA5YjZlNmU5MzAxMWVhMGFlNjUxNzFhZjEzMDcxMTc2NmNkMjViM2M3NGVjNTRjMGJkZmEwMmIzMTIwYWMyOTA4N2ViYWM5ODM3ZmNhNjViYTk3MWJjNDI4MWRkNTU3YzUwMGUyMjVlYTY2YzNjM2ZkNTIyMDZjMTlhOWY5Mzk1NDYzMTY5ZjhjN2E4NDZiZDlmODM0ZDdmMzM3ZDBiNjFmYjMwYmNlMjk0ZjQ3OGFlMWYxZDk3N2U0NTRlNDMzZWU4NzI5ZmIwNjVjY2UwM2ZiMmU0MzVkY2JjYmZiYTAxNTM3ZTdhNjc2MmU1NWU3ZWQyMjUyODMwMzcwNGJlYjVhZTM4MWYyZTE4MTA1NmYyNTEzMzI3M2NmMTdkZGYyYjA2ZTJkOTQ3N2YyYzA5NzU1ZmM4ZDljNzNjYjMzMTAwNDY4YzY0MTMxYzY4NmNhYzc5ZmQzODQ1MDFlNTBmOGIwYmVlMjhiYTM5NTgzZjQyZTRmZDM3OTllMjRmNjBkYTVmZDNjNzc5YWFiZjY5OWZmZDIzMjFlZDA0NWE4NWJjNjQyNGY2MGZkY2M0OWMxY2IzMWYyNDlhNDIzNmMwOTQ5MTc2ODE4MWI5MjFmNTg2MDJmZDQxNWMxZWRlYjI2ZjM5MzI0YWRkZmYxNDc3MTMyNDczN2M2NzIwY2M5MjM5MWI5NDlkY2I0MjEyYmQ2OTMxZDRkZTUxNDAxZTdmOTUzYjdiMDM2YjIyM2YwYWY3YThlNDA4YjA0ZWE2MzVhMjNmYTA3MDliYTA0MmE1ZDk5Mjk1NGMwOWQ4NTgxZGNjY2Y1MjU2OGFkMjdhMWNjNzFkMThhYTI3NDBmNjIxMjEyZTdmNGM1ZTVlNWU1ZTQ1MzJkOWE2N2VjMjc3M2FjMjFjOGE0YjAwMmQ2NTI0ZjYxODJkZDM3MTczNWQyYzJhYmU2Yzk1YzI4MWM2ZmIxZTk3NmJjMTdlMzgzZmQ1MmFlYWFhOWZiZDRhYmI4MmEyY2M2NTM5NWY4YzJjYzdkODE4MmEwZDI1MGM2ODVjZmNiYTkzYTk1MWVlN2M1MDNjNmUzZWVjMjM2Y2UzM2UwODZjNjEwNzI4NzM3YzFjM2IzYTI0MjUyZGE3ZjIxNjcyZDkyOGViZGE5OTNhOTRjNDU4YWI5OTBmNWQxOWQ4MDAyM2MzNmFhMTZlYWZjYWIxNDNmMzUyZTk3ZDY0MDlmMzI0OTk0MTExOWJmZDlmNWY5MDg0NzI0ZDllYmFkMzgzYjEwZjM0ZDMzYWM4MzBjY2U5ZTVjYjhhZWNlZTZmNDAzMDFjYmJlMzA5ZmQwNjE1MzRhN2QwYzNlZGFhZWEwMmExNzFkOGIyMzQ5ZGJlZWM2Mjg1MjBhYzMzNGE1YmZlMjhhOWQ1ZjRjMGQ3NDBmN2M3MmQ0ZDcyZDg5YTk3MzI2YTAzMDAyZDFlZjM4NTIyYmNkMzdiNDI4NDdhMzE0YmQ4NDNlYzg4ZDFmMmY5ZDM5ZjU3ZjJmMWExM2QwMTQwYTg4NDc0NTA0NDhjODgwYjNhZTc2NTMxZTk1YzQzOTI5NzMyNTAKK1NJRzogMzFmMTZhN2NhZjJiNzRmNjVlMDU3YzkzMzNhMWEyNjMzZGFjNzM0NjMzOGY3OTg1MTA3MzBlYjhkNWQzMjVmYzEwODBkZDVhYWQ1ZmNlMDUzNGU5NTQzZjNjOTM1ODY4MDQ0NjRhZjU4ODZlODY0NDEyOWM3N2ViYWE0ODVmMDEKKworVFNUOiA4MTcKK1NLOiAgYzlkNDE2ODMwYWUyMDI4ZjIxNzVkMjJiNjE0Yzc5MTk4YzY3MGNmYWEwZTdhMzYxNTBlZjBmZWUyMWE5NWNlNgorUEs6ICA2ZTNlYjRkMDE4NzMwNzJkZjk0NmYxNzkyZjcxMDYzMzA4OTVlN2E3NmRkOWFlMjdmOGE5ODgwMzk0OTBmZDRiCitNU0c6IGZmOWFkNDgzN2NkMGJiNzdkNjIxMGZkZGRjNzU1ZTZjMGYxYTczYzJiY2QwM2Y3YTU4NjllNzM0MmNmZDczY2Y3MDg2Zjg2NTU2MTU2MDI3N2JmNmMzNDIxYTkxMmQ2NzY1OGIxZmE5NzA1N2M0OTZmNGJlOGVkY2JlMThiNWVjZDA4YTFlN2RiMjUyMjNhYmRhMjA4ZmE1MzFmNGIyODBhYTAzYjA0YjYwNjAzNDExZDM3NGJhN2NiYjAyMGJiOWE4Y2U0YzBlNDVhN2UxMzIxNDQ4NDNjMzFmOGI0NWM1OGViM2VhODUzYzJjZWI2MTM3NmU5ZGY4MWQ5Nzc4ZTcyMWFkYWM3N2I1MDM1NDkzN2YzNDM3MmZjY2Q1NzVlODhkOWQwNThlNDNkZjk0MmYyYzQzYjUyM2M4MDk4ZTZkZDllNmJkMjFkNWE2NDliNDcyZDQxZTM0NWZjZDVlZmRkZDQ5ZWFiMzAyNzBjZDg3ODg0MDRmMjg1MTZlMDlkM2FjYzQwMDQ4YjM5ZDMyNDZmNzU3ZTQ4MmUxNDU5YzYyNmI3OTllMDRkMDY3MjcxMzczNzFlMTIwYWZiOWZlYzM5YTI1ZjRlNjc2NGJmOTc5MmZlNDkyZWUwZjIxMGI1N2RiOWViYjllOGVmNDFiMDJjN2ZlZTllZGQ0YjYxNzRjNTcwZGUwMjBhMzkxMjg3MTMzZmU4Y2NiNDFhODNmOTFiZDIyMzgyYjIxZTFkN2ViYzJjN2U1MDE4ZWY1MTQyZDgyNjM3ZDAyNjIwZmJjMDU2OWNjMDljNDRlOTExMTEyYmJhZTk5MDY0ZDY4ZDFjNjllNzdjOTkzMGIwZGUwMzBjOGMxZDc0OGM0MTQwNTlkNWUyOTliN2VkYzA4OTQwNjUxODk0YjMwM2EyYjMyZGQyYzM2NWEwNjdjOTcyMzU4NTU5NDY0NGQzZWU4ZGUxYTUxZmFlYTBlNjUwZjIxMjQ4ODVhOTRjYjk5ZWI5MDNiN2Q0NTc5YmRlNTkxNDk3ZDk1MzkzMGQzNjNkZGRiZGFjNjI3Yjk3YTkxZjQ5NjgyZGY4ZTcyNTBhNzA3M2QzODNhN2EyMmNmMTEzZjI4NThjZTZiNjMyYTI4OTJjNGU4OGFhOWEwZDI4OWViNTc2MjliMDA4ZDNiMWI2MDgxZTZmZTVkM2MwYTZjODAyMTg5YjVmMTA4ZTc2NjMxOWUxNWIzM2VhYTViOGNlZDQwMjdlYWVjODNiNGFjNjhiMTRiODI5OGJjNTFjZDhlYjM4MDliN2EyZDY4NGZlMzJiYmQ5ZmFiNWM5MThlZWIxN2NjNDQ0ZDczZjczMGQ0YzhjYzA1N2JkM2EyZjFmMGFlYmI2MTYzMjkzNGU2MTcwMjE2ODgyOWNkN2U5MWRlODE1MDk2MjlkMDFhOGNkZWZlMGQxYWM0OWUyMWYwYzVmYmUxYjIyNDQ4MjcyNjhhMGEyNzM1N2UxNThiZDc2ODg0YTIxZTdmMWZhYzFiNjI3MjE2NmQ1YTlmNjRmOWI2NzI5ODlhODc2MmY1MTJiZjFkZjRiMmFiNjk5NzY1ZjJjZDgzOTZmNDc2ZTdmNTk5OTVkZWU3ZDg5MDIwN2VmZjBmZDI3MjYzZWMyMzJlMzdjZmVkZmU3YzQ0MDU1NWQ0Y2E3NGU1MmRhMjQ2YzRiODM3NTdiZWFmZDJhYjJhNTFlZmUxNjBiYjAyYjk4YzI2ZDZiMmMzZjBjMWFhY2IyZjNjMzRhNWIyYTNiNjZmZWUxNzViNzg3NTQ4MDczZDhiNTc3N2M2YmU4ODBiZGMxOTZiMzM3NGEyMTU0Zjk0ZDkzNjBmNzc1NWFjNjgxNWEyOGFmMjk2MjcxZTIyYThmMjM1NDNjNzQ5NTVhNjA5MTI1YjAyYTU2OTIxODAxMTQyMDI5NWNjZjBkNzM1Njk5OWE1Yjg5NWNjODg0ODNmYWRmNzk3MGNlYzZjNjQyNDBmNzA3OWZkYjE1ZmZjNWM0MjI3ZTUzOTI2ZDI3OGJhMGZlZDNjMzk5M2JjODY4MjI4MjNkZDU4MWEzMmFiMmUzYTA3Zjc5NDMwMjI0YjI3NGVhZGQ4NDU1OThhN2QxZDg5Njc2YWFmMjM2Nzc3NzRiN2IwNTgzYmNjODM1OTlkMTU1ZDE0YjA5YWRjZjQ5ZWQ1MDVlOAorU0lHOiA0N2ZhYWQ0ZTY1NTI5M2VkYTE1NmIyYTFmYWJiZmI3ZTAwOWZjMjkwYWFmZWRiZDU2NTIxMTRhNDc4NTNiYzc3YTgyMzNhMmIxNzlmNjA1NDc3ZDc4Nzg3OGNiYjE1ZWE2MTI0ZGY4ZGM1N2IyY2U3YmU3ZDE4YjcxNjJmYjUwZAorCitUU1Q6IDgxOAorU0s6ICAyZDI3N2RkNTVmNTcxOTVlYzA3MmI0N2NiMTQ0OGNiNTgyYzgzNTczOWU2Yzk4YmE3MWFiMTI4ZjcwY2U2Yjc5CitQSzogIGRmYTkyNTkzZWYwZjBkOTc0YTExMzc4MzBhZDEzODQ4YWZlZjNiODEwYzJhMjFiZjc3OTE3OGNlNGIzYWI5NzQKK01TRzogMTQ1NDllZGRkNWYyYjc5MDVkZGExOWQ3NGFiMjA3YWFjNmZiM2UzZGYzMjk1ZDg0NTIzMWVmM2FlYTZlMWYwNGVlMDMzYzkwMzhkY2I0YmQzZDVlNDUyYzU0ODM0ZDBmZjJiN2RlM2YzMjJlNTYyNjk0OWNkNjFkNmU4OTAxMzhmZjBlYThhZDg0NmU4ZmU4ODdhZWUxNWZjNDhiYmU0ZmJhNDI0NTVmNWMxNzQ1N2FlNzg5YjQwNWFmODU5NjExZmUxZjg3NDYxODVhNjVhZWYyMTM0ZWE0ZDhmMzk4ZDQ4ZGY3YzFiYmE0MzA0NDA4YWU3ZWZiMzUyOTI0MDlkNTA4ZGQ1NWNlMjFkZThjMjgxNjBkYzllODc3NzAwYzc2M2QwNmIwMWI4NTQyMDUyZDdkZGI2MzM1NTRlMzU4NDI3OWM3OTY5MzcwMjNjOGVhYzM3Mjc3YmUyYjgyMDRmZjNlMGUxMDMxMTkwYTAxMDE0Y2Y1ZjViNGQ3YWQ5OTY3MjdmOTc1MzFlMDM1NWI4N2M5ZTYxMTUyNWFhZDA3OTk1OGU5YWZlMmFiMTBlNGEzZTdhMWI2YmEwYWZmODE1ZGEyY2Q4MWVhOWViOWY1MzY5ODY2MzNmMzE2ZGQwNmMyNTAzYzZiMTk4ZGM1OTMwNDgwN2I5OGI0MjkzNWY1MWY2MzdkZGI1OWUyMzNmZWQ1NjY0MzljMWZlOTZjZGFhZmE0OWY0NDEyZDBjMWU2NTRkOGM2OTA0MjQ3MGIzYTU5YWNiNmJmNjdlNDBiMzhhNzcwNjdkNTk5N2I4ZDM1ZWQ2MWQ2ZWIzY2M3OGI4YmRjYjk1NzRiMWNlZDlmNmYzMzllOWUzOGY5NDE0NmVmNjNmMDQ5ZTZiODAyYmZlZDJhNTFhYjQyZTdkNDg5ZjMxNmZmNGQxY2Q4OThiY2Y4NTA1NjUxNjg3NDQwNzQ5YzBmYjdhNTdkYmVmZjcyZTY0Njg5ZmFhNDFjMDdiNGFkZTU5OTMzZDJmYWM2ZDU3M2RlYjczOTU0OWViNzVmMWU2ZjczODVkOGM2MTQyODk0OTczZWQ2ODVlYjhlZDA4MGMyYTQ5ZjNhYzY1NzExNjFhZjk2NjM1YWQwNTdkZjE0ODZkMzk2NzczYWM4OTgzMjEwOTc4OTg2ZTFiZjIxYTIwODA2ZDY2N2E0OGE1NTVhOTYzMjIxZDUwNjE0YTg5NzZiMmVlYzk3NTEyZGIxMWEzNTgxOTQ0OTJhYjU0NTU4MDFiYWExNGE1MTFiMjZlYjBjNjgyODlkNzkwNTIzNzEyZjJmZjg3MDk4OTI2OTVjNGRiOWFkMzEwZGY4YzZlZTdiZDgzYzg3MWYwNWFlYzMzYjdhZDMyNmY0NDY2OTJhNDJmNzIyMjM3NjI0NmQ1MzZhMzI2YzRkNzNlYjU3MmZlYWRhMTFiOGFjNzExNGY2Y2I0NDRjYTI3OGZjZjA3Yjk3MGQyYWQ0NjUzNzJhNjg3ZDM2YjdkYWFjNDc4NzQ4ZWM2YTkzMmRhMjA4NDM5NDhlZmEzOTMwOTc4MTQyNzJlNWNhMWM3M2U3MTE5NzNhNTI2ODNmOThjMDFlNTUyNDFjMTU0ZDI4ZTM4ZDNlZGZhZGUyMzAzYTRlN2M0NWMyYTdhMWM5OTZlZTExMzdhZjg2NGE5OGI2OTgwOWZjOTIxNGVlYThjZjNhZmU4NDJmZWUzZWI5YTkzMjJjM2I4MmZkZGIwNWQ0ZDFhMmRlMDljMWNlNzI3MzQ0NTNhOGRkM2E4OTIwZDBkMGFjOTZlZjc3OGI5ZTAyYzZhM2YxMjg3MmUxN2QzYTgxYmE3NWZkMjMzYmFhZGJlMjE2ZWEwYTU4ZTlkZGEwMDg0MDg3MDIwOGFlNDEzNTQwMDMwYjNjMDVlNWQwYjgzMmRmODdjOGVlN2YxNTM0ODdhYTExYmFkOWYxMzljN2RkNGJjZjQxOGY0YmNiOTViZWU4NTdkMGU5NjA4NDQ3MjM4N2NiMzkxMjdhOTQ3MTM0NTAxOTYzYTcwNzFiZGIzNGRlNjk2MWJlMmI2YjA2ZTQwM2U3NTkxOGU2ZjY5ZDA4MDIxY2YyYThhY2I4MGEwMTExZjRkNTA2MTBjMTUyZDM5YzY2MjFjMDU3OGFjNjg5OTU5YjFjZTZmMzc2ZjQzZDE4YWYwNjJlNGEKK1NJRzogNzNjMTA2MDY0OWE3YzAxNGVkMDE5NDU4NTFiNTNlMjg1MzI0ZTYwZDA2MWM4MzFkZGE0MWYwMzNiNTY1ODMwNmExZjExMjMyN2FmZTkzY2FhOTIxMDIwNzMwYWFlMDA2OWM5YTJiNDVlZWY1NWNiYjRhNWE5Y2Q0NmNkYTgwMDgKKworVFNUOiA4MTkKK1NLOiAgNDI4MDY2YzUyNDQ1NzI2ZDBlYTIwMDdlNTA0NjM3Mjc0ZDg0ZWUyMzIzMjViNTA1ZjJjNTE2MzU3ZjgwNzU4MworUEs6ICBkZDQwZmU4ZjY3YzY2NTYxM2IzYzQ1OWY2YWNlOGRjMjhkMzRlMGU3N2UyZjZhYTA2MDU5MjgxOWJlNmE5ZDY4CitNU0c6IGUyNzk2YzUwZDkzZGY4MTJiY2E0MWJmMmExZTFkZDczN2Q4Y2Y2ZjZiNGY3NjI0MmUzOTE3ODE4Njc1OGNiYWUwODg0ZTYwYzZiNGFhYWRkYWVjOWE4OTlhOTEyZTVjNWI5ODA0ZDdiMDQ5N2JhYjQ0NThjNTg1ZDRmMjU5MjIyNDk4Y2U5ZTgwZWI2YTc5NzliYmVkNmQ1MmNjMzgwNzJmNzQ1Y2IyYzYzZTY2M2JjM2I5ZDZjYWYwMTJhNjA3ZjZkM2I3MDZlMTU1NzU3ODcxN2VjYmI5NzFhZWI3YzQ4ZTFkZjk1NzExYzU1MGUwMDY5OTNiZmZiYTkxMWNiNjRhZDUyZDUxN2VkMThiZTgyMzY5ZTgxNTgxOWQzMTc1OTQ3ZDRhMzViMmNjN2I5ZGM2YzEwMDUxMzI2YjNmMWRjMWVkYjFiNjhiYTAxNWZmN2NhMWRjMzYxZDg5NjdhYmNmZmQzYzMxZjdkNmIwY2IxMzk2YWU1NDFmMjk3NTljNDEzMGJlNTJlY2MxMWQ5OTI2MWMzNjViZjdjZGVjNzgxNDk0YzVmYTA1MjZkYjRkYmJlNjYwYTQzMmJlNTYwNDNjNjZlYTA3YzI1NjI3YTVmNzJiNzgxMjNkY2Y5ODZmZjcxZWQxYWZmZDE2NTliMTM5M2Q5NjIxZjcxMWRmYTYzZWFkYTM4MzQzMDc5NzA1OGYxNTY2YTAwMDUyZDY3YmE1M2MxMjM3YjU2OTFkZTNiMDM5ZmQ0NDc2ZjExNTFlNWVkNWY1YTk4NjcyZmEzM2ExZDg1NGZhMDE1NjZiMzMyMzFkNDZhY2Q3ZjM0YjgwMzQ0Nzk5ODE4NTM3NjRkYWI4N2Y0OTg0NGNiNjJjNjNkNTM2ZmFjYTkyMDQ0N2Q4Y2QxZTgxMTNlZGJjODNlNGE2Yjc4MTVlMTgwY2Q3OGI5MzNkOTY4N2ZkNWJlOTlkMDUxOGE0NDY2Mjk4OWJjNjQwMTExMjRmMTg3ZDQzOTc5OTk0YTk1ZTBjOTAzYTAwNmMxYzBiZWYxYzBmM2RmMWViNzAwZjk4MGMyOGMzYzFlOTk3ZDBjNTZkMTEzZGFlMTk2ODgyYjA1MDE4ZmNhYjMxNGQ4MTE3ZmFmYmFiZTc3MDBiOTMyZDQ3YzU3MzYyYjIwMzVlZGRjZTJkMmVmMzM2NDFlYTkwYzNlYTNmZWM2ZWE1Yjg3ZTE2MTAxNGM0ZjgyMTRmZDAzY2ViZjk0YWJlMTIyNTM3YTk4NzAzMjM5ZGY1ODIxYzVhYjYzM2Y5ODM2NWNjNjM2ZTNmMWQyZjc0ZTBmZjhmMWZlZTA2YTNmNzM5MDdlZTUwNGIzMTBmZDUyMjRhZDRkMDVjZDIzYzM1NmRmOGIzNDY0NzI5OGM0OTgyODcyNWJhNWZkNjA2MTFlODI5YjYzMzdiY2M5ZGNmOGU4OTcxY2FiM2VlOWMyNjMzN2QzOGRmZGZhMDM2YmY2MDk2YjYzNWFjMWJkNTUyNWVjZDM3N2ExNTI3MmE4YWM5YmJlZjEzMzEwN2E0MjI1OGQ4YjE5ZWM2OWRjNDI2MWJlNTMwMGEyZDJkNWNhOTlmMzFlZmRmMjU5ZjlkMDc5ODY5YTM0NDEzNzc5ZjMwMjg4MjRkNzQ3Njg2YzQ2MGZmYzQ5NmYyMDEwZjQwM2U5MDNlMjdhODdkZDA3NWFlMGE3ZjE2ODk0MTZkMzFiY2MxNWY0OTBjYWY5NzVjNDBlNzE1ZDU0OTkwM2U4YmMwZjdkOTE0MWUwMjBmNDEwZjNjYTJiMmMwNzk3Y2EwZGM4ZDczOTJiZmYyNDM1MjhjN2YzYmUxMzg5OTcxODVhNGIzNmY0NTM3NmQ5ZmQ3MGJhMjA5ODlkMmQxYTkxMWQ0Yjk4ZDE2MGQyYjhkZTU5MmRlMmY0YzA0ZjM1ODYwZGYzMjBjNTQ4NDQwZDVlM2EzNDZhMTRkM2E2M2ZlNDg1YzI4ODkxMjZiN2Y0MWQ1NWE2ZWIyM2Q1NjIwYmFiZjg1NjRhYTc5ZDE1NmU5ODNmMzZkOWVkNDk4ZGE5Y2E4ODhkOTQ2YjUzY2M0NzY4YTU4OTJkNTJkNTQxNTI2OTYwMjgyNTI0YmE2MTk0ZGE2NTk0MWQxZWEzMGY4MDZiYjZkOTdjNzQ4OGI5M2ZkMGE3NzBhOWIxNWVmY2QxMmM1YzQ2OTQKK1NJRzogYzkzODgyOWY1OThiMWZmMWI4MTgzMzYwZDIyM2Y0M2M1OTQ3MzA2MDY4NzZhOTlhM2YzMWIyMDY1ZDA0ZTZmMDc1ZDEzOTZiM2M4Y2ZmYjBlMWUyZWFhYmRhN2RhNWU3ODljY2QxYzAyMDgzNWZlM2E3MWRjZGI2YWYwMzk2MGMKKworVFNUOiA4MjAKK1NLOiAgMzE0NWJjNjhkODI5Nzk0MDhlNDY1N2I3NzVmMTUwYzZkMjhhMzI0ZDc0NmVhNmRlOTBmZDcyYjE3YTI1Nzk4MgorUEs6ICBjNzc2MTg2Y2U0N2YzMGFkMDhmYTFkMmM2MTZhMzY0NDY2NWJhNTRmZjczMGZjMmY0ZGIxZGJhMzhkZGVlZGNhCitNU0c6IDJlYThkY2UxNDg3ZjQ1ZDZmZjhlYjgzYzU0ZmI3ZWRkNzZhZDZlNjA4YmI4ZGFmMWExODIzZGE0ZjRlNGU5ODYzMTczODk3YzE5N2FjNjU4MDQ4MjNiY2E5NTA5MWY1OWU4NmQ2M2MxOGRiY2RiODU3NDNmODg5M2VlNjk0ZDgxNTYwMWY4ZjIyZjRkN2RmMDg3ZjAxMTRiYjI2YzM3OTVlMWZlNGI3ZjRhOGZhMzFmZDlmNGZmMTBmZTVkZDQ1MmM1NGM1NTc4Yzc1MmY4ODgyMTMwNzZiZTQ2N2JhMzBkMmUyZmJiZWU4NzdjNGJlOWI2ZWM0ZjA0MDIxYzAwNmY5MjY2MzExOTQzY2FiN2NlYTk5YTJhY2ViYjY5ZWVjM2U2MThjMTMxZjk3NDMwMDc1Zjc5NzVlMzlmMjZkNTMxNTE3OGI2OWExZGRmNzMxNzYxMDUxYjkzZmI4ZGY3ZTBlOGI0MWU4MmU3ZjRmNzVlOTFkNmM4OTBiMTRjYTUzM2UwOTRlYjhlYTQ0ODZkMzg3MTg1OTY2Yzk4Mjk1ZDNmNThiMTdlZWY2Y2MzYjRkMDdlOTNhM2Q5ZjQ3NzJlZTUyZjE4YTViYjMwYWEzOTcyODUwZTY1ODE3MGJkZGI2NzZmMzMyNjZjOWZkMTBmNTk5MGJhZDg5MWYwY2ViNzgyNzM2YjQwZjAxYmQ4NjUwOWIwNjMwNGE5NmQ5M2RhMjMzZGJlZDE4YWZhMTgxOGFhZjU3YWY5YmRiYzg2N2IzOTdmZjIzNWE4M2U4NTcyMjRiMTUwNjUyMjVlZWMwMzlkZDRlMmQ2OWEwNGVlMTBiZWEwNjk1MDQxZWRhNTliMDU4ZWMwNWY0OTA0OGVlMzI0ZDE2YzRkNjEwN2I2ZWNkMDQ4NzVlYjc0NGU5MzY1NDcxYjRjNWZlNjYxMWIyNjE4OTNmOWQyYjEyOGUxMzVmOTJlNDc0MTU2YjI3MWIzYzgyZTlhNzY2M2RhZDQ5NTNkMzBlMTBlZGEwODYyNjA3ZGVjMzM3MmIzOTk3MGYyYTg0YjEyZjYwZTZkYWU3ZjMxNzk5MDg2ZDM4YTdlMzQ5NDg0MTljMWIwN2Y0NGMyMTU5Yzg2YjhjMGNmZTg3NDdmYzJiYWQ1YmY0NzUzNTZjZmU2OWRlMmRjNmFkNWE1MTlmZDY1YzEyNTY0NzAxYzA1ZjdjMjc3ZWNhZmNmNGM4N2IxNDhkZjFmOTg3OWE5YWU0NDNjNTVhZWE1MjEzOGM2ZmEwMWVmMGMzYWJiNWYyZGY5MGE1N2FiNjYyNDE3OGM3MzdiNTQ5MTViN2FhMjllYTc4ZThlNDllZjVhODE2ZDhhOTJjMmY4MWI4YTE5NjMyNzc5Yzg5MmQ2NmY3NTNkNTE4YzQxY2NjYzllNTkzZTUwNzQyNjI1YmNhZmE0Njg4MDVjMzdhMjFmOGUyOWE2OTYwZGRmNWM1ZTVjYTE0YTdiMDUyYTdiNjAxNTY5N2EwMjEwZWQ2ZjAxNDNlNmI0ODRjM2Y1YjNiNDcyNmM2MDdkMDdiZmIzZDU0YTA5Yzk4MDQzZjIxZGNjNWNjMjBiYjQ3NTRlMmU1YTczYjJmODA2YzIyMDRiNzJmMzZhYjllOTZhNjJjNjI3N2MwYWQ2NmJlN2FiZmZjMTYzYjRlOGZhZmNlZmY1ZTIwMmU1OTQzZjRmMGU2YjkyYjRkZGI5NTNjYmI3OTFmODMxNjYwMzY5MzhlNmM0NGFkOTFhNTk2YTU1NzM0NDBmYjMwNzQxZTY2MGI2Y2Q1Zjg2ZmZhNzQ2ZTZlOTcyYjgwNWMxMGI3YjdiOWE2M2MwNTUxZGI4ZWI0Zjg0MDBjZGUyODY4YzBkMGQ0ZWI0Y2YxMTdmOGVjNGFiOTc0NGZjNTg3OWRlYTdmMGVmMTZjMjkxZDU1YzE3ZjA4YjczMWI3YzY1ZDBjNDQxYjYzYmM4ZmY1ZTk0OTA0YzAyNmExMzYxZGFjYzgwYTkzYTliOWZiYTNiNDAzNjE3YWViOTRhNTY4NTQxODQ4MDExOTU0MjM0YWVhZDcwMGYwMzRjNDdjN2RlZjg3NzkwNTI1NWYxOGJkYjlhMjU3Y2U1YmRjZjBlMTc2NzBjZGFhZjEzYjFjN2UwOWQ1OGY5MmE5NjYzYWYyMzllMjIwNzhlMTgwYTIzY2NiNmY2NGQ2NAorU0lHOiAyNGE0MzMzMzc2ODNiYzcxYTZjYTNiY2NkOGNjMjQwMGMyNDQ2NGZhNjc3MTRiNDY1MTVmMmExNDMyNzEyNzA1ZDU3MDYxNGRiNmQyNmJiYmQzZjAyNjdjMTQyN2NhMWMyZjQwZGM5YTZmMWZiMGYwZmM3MTRhMDJlMjRiNDcwOAorCitUU1Q6IDgyMQorU0s6ICA1YTI1ZWE1ZTE4MmQ5YmY4ZTkzMGEyMGI2Y2Y1NWUyNGU4Mzg2Mjc4OWIzODM5YjFjZTlhNzFlOTM4YzQyZDM3CitQSzogIGM5ODFmYzM2ZjFhNmQ1ZjdkNDUxY2Q1ZWYzOWNkM2FiMDIwODdmY2M2YWYyN2RkNzhlYTgyNzQ5N2U3NzllMjEKK01TRzogMjE0ZGQxOTI3ZjJjYWNkOTg4ODcxNDI0OWI4NTQzNDYwMmFjNzg0NTNiNGFmNTM4NmVlZTM5Mjk1ZDNkNWEyMjY3ODA2ZWIwY2ZmMmMxMzJkMzY0YzI0MjBkMDRlM2Y2Y2MwYTk2N2JmMDVhMTBmZmNmMTIxN2JiZjMxNWU3NWI5ODA2MGZkNDU4ZDY3ZWJhYWQ5MzgwZjRhZGM0ZGJkZjc0Y2JmMWM2NDc5MjAyYmRkN2ZlZDNhOTQ2Njk3ZGMzODQ0NGQ4OGJmZTUxZDQxZDdhOWIzOGRhNjBiODUwYzU2YjQ4YmE5ODRmNmExODg5NTE0OTU1YzBkYWRiNjlhOGM3MzZjYzc2Y2RjNDlmMTNmODVhOGJmYjc5MjhmZjBhMGMwYzAzZjE3Yzc0YjVlMTA2MmQ3NTUzZmJlYjlkZDNkNTA4MWRlMWRmZDhhNmE5OTc2Njk3YzZhMjU5YmNmN2Q0YmVmMWMyMWUwYWFmMzI5OGIwNDIxYjkxOWZkZGZjMWRjYjNlYzY4M2Q4NmZmM2Q0MjNkNzFjOGYyZDcyM2E0MmZmNjhkODJlOWYzOTE3NDliODI5OThkY2ZhMTEyMTYwZjUyYTQxM2EyM2Q5NWZjNDJjM2JkMjIzODRiYWQ3Nzc1NGE3MTBkOGI5Zjg0YWUwYTgwMmZjNDY1MDllN2YyYjA3MDc5MDEyYjQzYmZlZWFiNzE5YmRlNTZmMDBlNTliOGVkZjFjNDcyODgzYjE5ODViMmZhNjk5YTFhZTkwY2Y0NWQ3YWM1ODBjZWI1ZjI3OTdkZWY1YjhiZjRmMmI5YjM1MTlhNzI3YjlmMmNkMTI1NmEyZjA3NmVkMjI5NjQ5NWI1YzJkZjc4ODdmZjg5ZTg4ZTIzNmExNGNkZTYzMjRmNDNkNjhkOTAxNzJiMGI4OGJkMjg4MDNlOTk5ZGJlZGNjNTAxZGI2NTQ1NDRlMTcxZWMxZjlmMzJkNGQzMzIxZDU4OTM5MmUwM2NhNjU5Zjk2NzUyZTFmMDhhNTVkYjU1M2Q4NjY5ODU1NDFmNWJlZjg0Y2UyZWUzMjNlMTdkMWY3ZGMxNjRiNTA1MTVhMjg3ZDUzMDVmYzI4YzU5ODNiOWU1Mzk4YjI0MDdhZTQ3Mjk2ZmU0YTQ4MWQyMmZmYjRiODY1YTY2Yjk3YTZjMjc5MzVkZDhlYjg2OTk0Yjc5ZDM2ODM2MzcxM2YxMDFkYzM3ZjQyOWVlZTBmZWUyNDQxYzJkYzE3YmY0MzkyNGYwYzA0NGYxNDMyOTBlYWYzZjllZTRkOTQ2ZGJlNDU4MzFhMGQ4M2MwNzZlNzUxYzE0ZjNiMWE3MjY3ZjU0NDZjMTg4Njk4ZDJiNDZkODdlNmYzYjIwYmIzZmRhZmUyNGNjMDk2YmMzMTJkODY3OGIzOGE4MGMzZjA1MmEwYzk2ZDVhZDg3YTVkZDhjMTMzY2M5YTE1YmUzMzU3NGNkOTQzMDhjMjRkZWMxYTliZGYxODliYTY4NzE5OWY3MmVmNjcwOTg3OGUxMGY4N2JkOGEwM2RjODRjOGZhOTY0MjAyODU4OThjYTMyMTFkOGIwY2NlZjY0MDExZWMyNGYzOGU1NzRkYTM0ZGFiOWQyZjAwMjEwNTIyNzg5MGY5MjQ4OGM2MjFlNTcxM2U0N2RiY2IxYTgyYTZkYTYwZDhiMjIwMWViMjlkNDk0NDkzMzYwZWQ1YTNmNGI1MjI1ZWFlNzcwN2VlMGI0YzA0MDczMDVjMTY3NTRjN2Y2MzBmYzg1YzEzZTQ5MTcwNDdiY2ZmM2IyYTI5M2ZlOTU1NTA2YzcyNjRlYTY1YmYzYTliMjVhY2YzNDM2MDBkOGZhMGM3YzFhMjkwZDAyNzExMDFiN2Y0MGI5NmU3ZmRhZjI5ZGVmOWQ5MzI3YTVhZTA1NDQ2Y2I1YTZkMzIyNDUzYThiMDk4YmNmM2FlZTFmNzA0ZTE0ZDAwYmUzNDJiODkzNGQxOWU1MjkyMTg4NzJlYTNhMmZiMjEyNGI1MjY2N2MwMWZjYTU4NDFjNjZlMWU2NGExZTY4MGUwOWJhMTg2ZTA0ZDEwNTE4NmNmNmViNzI4YjlkNTAyYTY2YjgyOWZiYzk5MmEzODgxMDA0ZWNkYzgwYWRmZDA0NGVkYTg4MGY4YWY3MmExNGZiNTUwZDdjYzc0MTk0YTk0NTIwN2QKK1NJRzogYTRmMzViNDlkN2UxOThlNWQzMjZlMzUzZmJiMDFmYTEzYjZhZTI2MGQxZTQ4ZTMwYzFiOTY3NzM3YTVlNzk5MzZjOTdjYTJiYTc5OWNhMzRlNWU3ODhjZWE1YWM4ZWQxMGQ1Y2QxNWRhZTUzZTQyNDMyMzIxY2MyNmRjOTk4MDkKKworVFNUOiA4MjIKK1NLOiAgNDIzMzVjMzBiM2Y2YjM1OWNlZjVhYWI2YTNjZTI4NThhMTUxYjdhNGZkNzhkMmZkM2VlMzZmYzI5ZDI0OTQwNAorUEs6ICAzMDFjNTE1YTAyYTRjNjZiYzY0MDEwODBjNmNhNzkyM2I3ODMxZTNjOWE3MmI1NWIxNDAyN2ViMmU3YjNiMTUyCitNU0c6IDZkYTIyNTFlNmY1NTk1MzZiMDliZmFmYjgxNjBhMmU4MTAyZDMxZjhiNTkzMjQwODNlNTIyN2IyMGMzZTVjM2EwNmUyMzk2NzY4ZGNhM2VjNzZkYzdmYzBlYjNkMTQ1ZTYyZWQwN2ZjMWE4YjFiMmUzNDcwMTNhMDUyNzI3NGQwYjIzNGZlNzI1MDI2YTlkMTI4ZjhkZjIwZGJmYTNiNjUwMzgxOGVkZWJkN2YyNDkzNDA4MDk0NWE3ZTFlYTAyMjczZmU0OGI2ZWQxZTgzZmQxNjhkNzk3M2ZiYjc5NDFiNDAzN2QzY2RhNTU1ZTBlODljMmI5NDNmYjFlMjA3NjVhYzdkNGZhMzc3N2YzNWEwYThiYzExOGY1OTljODQ3YmUzZmRiMmQ4ZTIwMWFlMTJhMzBiZGVmYjAzNGZmMjRlM2UyZTcwMWEwZDE3MzM3MzQwNzhiZDFmOWE2OWJiYzY2N2U0NjEyMTFmMmM3NjlkMjlkYjdjNGQ2MmQ2YjFiOTJiNTZmNWYxOGE5MzFhOTI2MDY0Yjc4ZGExNDZlMThiNDgxMzliOWIzOTg2MmFlYzM3YmNjZTEyY2I3ODk0MjllNjhlYTM4MTEyZDBiNWNjZTMwYmQyZDI2YzVmN2ZkNDE1ZGFmN2NhMzE3YjMzNjhiNzYxN2Q0NTI1ZTViYzk3ZDk0NjFkNWQ2NGY2YjVkMzE4ZDBiYzNiNzZmMjViMDYwNTQyNjkwOWYyYWEwY2Q2NjdhNGYwZTA3NWI5YTlmYjJlOWE2YzgyNzA0ZDhhOWYxNjY2ODQ0ZWRjMzJmNjNhM2Q0ZTBmZDlmZGJhMzBiNTFiMzMzNmI5NmU5ZWFlMzkyYTM0MmRlNDllOWI1ZmEwZjliOTAxNzFiZGUwOWNmMWU5NDY0OTkxNDAwMDgxNTllYjE4NjU1NjNjMjgzOTRiMDNhOGQ3YTU1MjI3MWIyODc2Njg3NTY2YjgwZmQzYmUyYjY2MzMyZmNhZDE5NmNhYjg1MjdjNTZlMjE1MzZhMTQxNjUyY2RjN2ZhNzQ1YjI2YTMzMWQ3ODdiOTNlNWU4MTZkOGQ4NTFhNThmNmFjMDdhNTgyN2ZjZGY0NzJlODY4NTQzM2E0MGNhYzBjNDlhYTU2OTMxOWEyZTU3YjQxYzk5OTgxNjVlNjk3MjNiYTc3ZTVjMDQyM2M0YjRjYTA3MTg3YmI3NDQyZTdkMzFjYWFjYjI3NzAwYzcxYWU0OGNkMDU1ZWQyZmU0ZGEzNjNmNDQ4MjExMjRjY2ExYmYyZTYzZDliOGFiZDJmYTQxYjE0MjJmNTJkNTU4YmM1ZjExMGM4NjNjYzYwMDg2NDk4NGVkMjU5YjczY2RkZDU3OTZiMzI5NzllZGRmNzZhMDdiYzU5YjczNjhjNDhlMTI5ZWNjMGQ0NTM1ZGNjZWUyYzNiOGU1NmRlNTBlNmY1Y2M2ZWE1MTVjZDZhMGViZGYxY2E3OWFhMjc5NDgyMWFkMmUxMDllZGRhNDUwYzlmYzNjODRkOGM5NmJjMzhkNGI0MzdhNzM4ZjgxOGI0ZGRjYjY4NDM4M2MwOWIxMWIzNjA1MmU5ZDJmNzZhNjFlYjRkNjIwNDljZWQ1ZjYxNjYyYzRiOWVjZDI0YTY3ZjQ1MTlkNDY1MjhjNWIyZWIyMTAwNWY0OWM3M2EzMzcwYzY4ZTM3YWMyYjE4ZDQ4MWZhMTBmOTY3MTRmZTA1YzE2OGRmMTFjZGE1NGYxNGY0OTM3ZTlmY2UxZjUxNmMwMzcxYjM2YTJjMGEwNTBiYWM3ZmE1MTIyYTZlMzVlYzljNDA0MzY1ODVmMzE2ZTZjOTExYmRmZDdkYjRiODBiNDMwNjQ3OWI4MmEyYjI0M2E1MmIyZDJiNjI3NDJlZDExMjgyNzkwY2Y2ZmRjN2M5YzgyNDM2NGNmMjU2MzZhODU1MTUwYmRkYmRmN2U2NDBmOWY5NTJhOTQ3ZWM3OTc0OTI1ZTgyNDUwNjhiMjkyMTAxYjFmNGIyMDE4ZTg1ZDA3OGMyZmVlZjQ0OTIzNDk3MjlhZDRhY2IzOGYxYzdjMDI3MGI2MWQzZGZkNzYzNmM2Y2JmMTgxZTRjOGEwZTY0ZmEwNjEzMjU1M2MyYjlkYjcwMTllM2IzYzQ4NWQ4ZDViN2RmZDVmNTE1ZTRkNzFlZGU1MzVhZTdmMmFhZWRjMjMKK1NJRzogNjdiMGYxNzQ0OTAzOWU4Yzc5N2JmOTEzYWFlNmU0ZjBiYjk5Yzc0ZDZkMTBjOTczYjk5MGZmZTAzZTdlZTRhYjViMzU4MDZkYjE1YTk4YzA4NDZhODI3ZTdiY2Q1MzljZDNiYzA5ZGQxMThhYjNlNTI2NjNhMzU3YjEyOTkxMDcKKworVFNUOiA4MjMKK1NLOiAgYmU2YjJiYWJkZGQyZGNhMWIwZTEwZDEyZDIwYTljZTI5YzY3ODVkYWMxZDYwZjJlZGZhOTRhYzI3ODRiYTc2NgorUEs6ICAzOThmMjJmMGVmYmY4YzM4MzU1ZTQ3OTFiZjY3MDg5ODk1MWZiYmQ1NTE4ZjBlMmE2MDVkNDYwMDIzZjYxM2YwCitNU0c6IDVjOTI5NTg4MWI3YTY3MDY2OWIwNGNiZTBkYWJkODk2OTNiNzdmN2NjZTBkNGEzM2Y1MmUwMmViMjY5NTllNzEzZDlhZWY1Zjk1NDQyYmRmOTE3MjgzODMzMjUyMDJhYWNjYzAzNzQ3N2UzNjY2ZmFjYWYyNGVhYzk1MzQ4NzlhYTNlZmUxOGZmYzFhNWM1NGUzOWM3Njg3ZDA5MzdiMjQ3MWJhYjM4OWI2NDZjYmU2YjNlNWQ1OTYxZWE2M2JkNDUyYjQ3NDMzNDRjZTRjNzkzMzc0NTIzNzk1Yzc4MWVlODRkNTExZTI5NDExMTliYWQxZjRhNzQ2ZWQ5ZGJhODljOGQwNzUxYTY0MDI3MTg2MzVmNmUzMWQ5ZTE4NjgxYzY5NTZjNTM3MzI1MWQzNWY1M2JhYTE5ODdjZDQ0OGM5MDMxYTA3ZjMyYzgwMjkxMTlkZTNhOTE2MzFkZWRlMWQ5MzNlMGZhMzI2MjlhZmUxYjQyZWI1OTFjMjJmODczMzFlOTNjYzA4M2MyM2Y2NGE2ZTVlNTg2ZmYzMWNjMDRlNDIzYzU2YWUzZjZhNzM5NDZjNDhkZTRkODVhYjAwMTdiYTI0NDU2ZDY5YjU5ZGNhNmQ0MDNiNjRiMDdjNDBkM2I5MGUxMjIzMjE1ZTNmN2U4NzZjNjcwMTExMWUzN2U1MTc3NzA4ODczMTBjYTg1NmYwMDlhMGQ2MDY1NDgzNWQ5NGU2NTg3YTQzOWRhNWRiMGEwYzM3ZDdjOWQzN2NhMWQ3MDNlMWIzMjI3NjMxYWRhY2FhNzk0MjFhMWM0MzlkNjAzNDlhZTU3NzQxYjdhOGFkMDllYzI5MzEyMzAzMGJmNmJhYzA2ODllNTMxY2E3ZTcyNzE4MjIzZjllYTQzYmVjYjBlZTlkOWMxYWI4NDVlZDFjYWU0NDNlM2M1ZDRhOWIxZWRlNmRiMzQxN2MzYWNlMjgxMTQzZjQyZDg1ZjU5OWIzYjlkM2QwNWZhMGVkMDdjMWVjMzVmZmFiMDMwNTE2OGI0ZTU2ZTU4YWZhMDYxN2Y5YTg2YjFiNWIyMDFkY2NiMDcyYjRjZWYwYmI3Yjk1YzUyZGFlZWY5ZDllNzQyNGE1YzBmMTQ4ZjlmZmU2MGE1YjIzZTBmZjgyYzczMDk5MmFjOWMxN2Y5N2YwNjVjZjBhZDUzNzdlYWNjYjMxZDhiYjkyM2JkMjYwZWExMTllNmZhOWJkNjk4MzQ4MmQ3MGQ5MjE5MTAyNDAyZGM2YTM0OTkxOTNkMGMxY2QzZWQyYTY2OTIxYTk4ZGY2OWI3OTE0MTNmNDk3MGJiY2UwNGY2MzlhZjkwOWM2NGY0NTYwZGIwYWY2MDAzZGM0NjIxOWU4YWQyYjM3MmY4YjVmODFjZmFhMDQxYWI3MWEzNDhjOTMxZThkZmRiYzQwOWMyMmQ3ZWU2ZTA3NjI2ZTEwNGVjNmNjN2M2YTQxMTYxNzdmOTNhZjE2ZjEyNGYxOTZkYWI2MTliNmY2OThjMmQxOTE4NThlOTYwYzJlOTQ3YjUxZjNhYzQ4Mzg3NTljMjFmZWY3ZWJhZTM1ZGEyNGY1NWViZGE5Yjk4NzlhZWExN2E2ZDhkOTI3ZGU0ODdiMTc1ZmQ3ZmFhMjE0MzhhMjA5MjNkZGJiY2E3MmU2NzI2OTM0YmQ2YzIxZTgxMTgwMTlmNjViMzgxMGEwN2ZhMjdiMWNiYTY0ZDBmMzlmMGJmZDQ5ZGNmYWZkZWZlMzc5YmRlYTgyZjMxYTljMzlmN2U4MWQyOTQzMzdkMTBmMWU5ZDhiNTBlYmE0NThjZTdiNzUzZDM2OTY4NTM4NTEzZWRkYjBlODQ1MzQ0MTFjNGFmM2YwMjE0NjEwZWUzOTAxYTBlYmYzMTYxNzNjY2FmMTVjZDdlZTQ5NmRiZmMyNDY1ZWI4MzRkZjYyMDI5ZDYyMWZlOTExODI0ZDc5ODdkZjJkNDYzNDZiNGRjZTFlY2U3ZDE5ZDU1MTE4YzAzN2M5OTU1MTExZDA3ZjFmYzM2MmM3MzlmMWVhNWIyNzVjNzFjMGFlYmY1OTY1NWUyZGVmMTZlMTIzYjNlYjI1MjZjM2NhNWU4M2NiMjRkNWI2OGQ3YWM0MGE2NzU5MzM4NGM1NjNhZmUwYjU1MmFkYWY2MDgwNTAzNWJlOTdiODA2NzZhZGViMTU3NjUyMDgzMworU0lHOiA3MDJhYjlhY2JmYTc1ZWEyYWRiZTRiZTJiNjg0NzYyNWFlYjQwOWVlZjk1OTZmYWJlMzlkMmM1MzNhMDM0MzFlNWU1Nzk1NTJlOGE2NGZjNGZiN2Q5MjZhYThmZmZlMDY0MDY5ODQ2NGM0NDU0Y2UzNWZlODNmZjI2MzA1MWEwMQorCitUU1Q6IDgyNAorU0s6ICBiMWU0N2NhMzFjNjRiNjhhYWZhZmI0NDM1MTJlNjY3ODdjNjU5MmYzMzRhYTc4ZmEyMTlhM2Q5M2MzM2E0YWIzCitQSzogIDU4MTE5YjM4ZTZhMTQ4YTkzNmJjNWY5MmY0ZjI5Yjk4MmZmMmNjYTY0YTVhZmZhMTRjYTFiNmE2MmZlMzI4YzQKK01TRzogNzY3ZWMxYjNkYWYyMDQzODdmM2ZkM2IyMDAxMDc4MWFmYjFmMzhmNjE0NDc0MjEzMjg3ZmZmMTEzMDdmNWZmNWFlN2VjOTQ1YTJiOWI0ODcwMDQ5ZDQ1MzJmOGY2MWMxYTdiNWYyMTFmY2EyZTY3YzM3NGQ5NjIxOWQ4ZWE5ZGU3M2YwZTM4NzA0ZmM5NGMwZTllNzJmMmUxNWRhYmEzZjg4Zjc0OWIxZWQ3MDI2NjBkYjFhMzUyYTI2NjdkNGRmZDRlMDBhMThlZmE0YzY2MDllZTljOWE4OGFkYWNiYmI5ODVkM2RlOGRkZDE3ZDRlNGViN2NmNzRhMWRhOTFlZGIzOTA4NTJlYTRjYjlhNDI0ZjdmYTIyMjllMDgzMDMzYTM0MDU5MTE3ZTVlZmE3YjY2MTNkNzVlNThiNzAyYzZjZWU1ZDAwNGU4NTk5Yjk3NTAzYTVmMTBjNGM0ZTViOTU3NzM3MWQzZDA1YjJkZmJmN2NiZWZlNmQwOTJkNjVjYmQ0MDUxMzhkOWIwNGM1MTg2MjM1OTgzZmFiNmQ0Y2U4NWI2MzYyNzYyMDZkNzRhMmVlN2RiNjE2NGRhYzQ3Y2NlNzhmNTBkYjk5YWY2YWM2ZTcwNjRjMTNhYWI3OTNiZTg3ZTY2Mjg5Yzk0YTA5ZmIwYTMxZDk3OTcxZWRkNzRlYTljMGNlODc0ZDJiN2Q2YzRhYmFlZmYwN2Y4NzAyMjUxNTE5NDZhNWM0NzZmNmI5Nzg5OTZiODdkOGM5ODQ2MDZjNzkxMjg3ZGE2YmFkMGFhNDRiMDEzMGJlODg2NzFhNTU2ZTJkZTM1YzRjYjAzOGVlNzgxMjczNTMwYWNlMGExMDRjMjc4MDlhZWUwMzNjOGJmOTAyOWQ5MGZlN2JhMDZhYWE5NGUxNmE1MmM2NDNkZmQ5MmE3NjI0ZmJiZWU3N2E3MTU4YjJjYzE1MWJkM2Y2MWExYTc2ZjMyYjI4NDg5MzA3YWNmMGRkOGMyNmNjNGFkYmJiOGRlNDMwZGI0ZTRmNTgzMDhiNmFiOTA0NTYxMTFkZWFjMjk3ODE3MmZlMWZjMGNlNDk4MDg4YWRkNGMzMWMyMWYyNDI3OTAyNWZlYjQ4Y2JiN2E5MjBjZmYyZDI4NzEwNTg3YWY1MmM4NDRkYjhhN2FlYjdkZjEwZDQzNDExYTNjOGVlZWJiNDA2ZDZlZmNiMTkyNDg4ODdkNDUwYjU3M2Q5MDMwNWUxZjIzNzUzZTg5MDUxMWRjYzc3Yzc0MGUzMTZhZDdmNTJkNDkwMjA3M2RiMzk5OGU0ZTRhY2M0ZTAxODg1YmQxMTg4ZWNkNjE2NWFlZGVkMWU3Nzg3MDJiNmE2YTc5YTk0OTk5MTAyZGY3MjAxOGY3OTJmOGYxNjIwMDdlODEyYWVmOGY5NTZlMTIzMjgyYmJkYmQwYzM1NjEyYzJkMzQ3M2Y5NDRjNmQ3NmJlOWU4NmZmZmE0NmNjYjFhZTEzNTA1YTRhODFmMzFiODQyNmI4YjYwZGU4ZThhN2MxNmQxZTE2NjViMjcxNDM0NjY1YzQ0MmE5YzZhOTc3Y2U5ODZmNjk5M2I3NDM5YWYwM2I0MDJlZWFmZmYxNDU2ZDE1MTUyNmQ5YzU4ZjUxNWZkMjQ4NWUwY2JiMzI0YTUwM2E4ZDQ5MTM0NGNkYjJhZmY0YzQxYWE4ZTJlZDY2ZTU4MDgzYmYwZDJmYmY0ODc3Yzg1YTRiY2Q2YjljYmI4MjEyNDJjOTQxNDdlNWZkOGI3ZGQ3OTJhZDBhMjhkNDlkNDExMDBiNDMxYmI0ZDhjNzgzM2Q4NTA1ZGQ5ZTI2NDlmOWNhNzA1MWJlNjg3MTJlZjM2MzcxMDIwMzZiMDAyNjQ5NDczY2UyNTk2NzdkODJjNjA2Mjg5NWUxNjE5MjhiNzUyZjEzYzkxYTQ1OTU1ZTgwZjAwN2RlNjkwZWRmOGEwZTVlZWU0NDIyZTE2MmI5ZDJiNGE5MjFkM2E2NDg0NTc5M2FhMjIyOWU5YzIzOWU1N2E2YjFhOTBhNTI1NGMzNTEyZjk5MzQ1MzE1YWM3ZDM0NTdmOTE1NDI5NmM2NjgyMmFiZTE4NGQ2NGU1NzJiOWMzODQ5Mjk1OGUyMWIwMjkyNjc1NDEwZTczNDhiMmI3MThhMGI3NTkyY2FlZTk0NTgxYTk0OGQyZjQxZmEwM2M2MWUKK1NJRzogZGZhYzg2ZGY1ODZlYzM0YzdjZmVhNWQ1YTZjZDExNDBlNTBiNmJmMDUwZjhlNDFhMTkwZWJmZDNiMTQzMmI5NWE1N2Q1NjUyZGJhZThmNTNlMDM3YWUzMjZlN2YxOGNmZWY3Yzc3OWY0MDM0NmY3YzBkODY0NDYxMDU5M2YyMDkKKworVFNUOiA4MjUKK1NLOiAgZmJkNTVmYTc0M2MzYTU5MTBiMzg1N2RkMGI2YWE1ODRmM2IyMzhkZTA1NmI3NmFiNzYxN2FlYjUyNjM4ZmVmNgorUEs6ICBhN2ExNjNjNDE4M2JkODRiNzU2ZGYzYzhhZmRmYjljZDViMjQyMzUyZDk0OTllYmRhYjkwNzg1YzNiZDZkYjJkCitNU0c6IGJmNTI1MmIyYWVjYTExNjM3NzFmNzY2Mjc4NzY4MDY2ZjIxOTcxMzU3ZWE3OTk2MTU4YThkNmU5MDhkZDU5YjU5OTcxMzQ5ZmExNzg4MmNiOTIyNGI5NzJkMGZmYWJlODU1MTBkY2YyNWE5ZjlmOWJkZWZhZDJmNGNhZGZiYmRhY2MxZmNhOWQ5NDhjYjU0MTJmNDc0Y2FkMjNiNWI5MTk5YmYzYzczNzA2NDEzMzliNzUwZTFmNzhjMmFkYjQ2MGFhNWIyMWIxZmE4Zjk3NzE0YWJiNGVkNWU5Y2I1MWQ2ZGU1NTgxNjYxOGFiZDNmZDJiMjg2YmMxMWM2N2JhMDExMjkzNzNkNDM1YjNlN2UzOTFiYTM3MjYxNGRhODMyMjg3NWU0NmE2NzViNjQ1MTU2MDI0Y2FkMmRkMTNmOWEwODE2MTZiZjEzMWEyNDM1ODg5NGUwZWZhMWQ1NjY0OGZmYjQyZWZiNTQwMzFkYTdmMzdkMTk3NjE1MTU1YWVkYjY5YzRlNzA5YzhiYmJlN2ZiZmNiNTk4MzQ3YWM1ZDBjNjM4NDA3ODQ3YjI4MWNmMTE2NDMzMDk3ZjU2NjIxNTg3MTlmY2RkMzdiZWI0ODkyNjhjZTcxZGU3ZDcwZWQ5MjVmNzQzZmM2M2E3MTVmN2VlZTc1NDlmZGI5MDljYzQ1NGM5ODhiMzBhZTRkNzdkNjJmNjVhMDdlMmM4ZjkzNjIzODVkMDI4YTYwMzEwOGM5NDU4NzJmNWUxYTk3NDE5ODc4ZWQ0OTU0MmUyODhlZjA3YjVjOTBmNWM0MTU5ZTE2MjMwM2QwODBmNmFjMmIwNThkZGNhYzYwNzQ2ZjllMWM5ZWMxZGY4ZWRhNDJkNjI3Mzg1ODZkM2ZkZDY1ZGY1NWY0Mzc0ZjMyOTRlMDg2OGQ0MWVmMGJiMWZkNTVlMGNiZjE5NWJiZmNmY2RlNWJkYjQxZmFkOWEwNDc3ZTRjOTBjYTI3ZmE4Y2Y1MDMzNjJhMzNmZGVjYTVhNGYwZmZlYTI2ZThkN2UxMzRmYWQzYjFlYzNkMDU2MDU1YmJhNWU2NWQ4MTE1M2VlODMxODczYjkzOGRmN2QyYzgzYzJhNTJiM2MyMjE4MjdmOTYxYmQwMDgzNjIyMzJkODgyYTA0MTJhMDQ3YWZkZmI4NTk3Yzg2NWEyYWEyYzJjZjUxODk5MzRhODNlZTZiNzUyYTYyNjk0MWVkY2UwYzIwYjZmN2E2OWYxY2YxMmY5YTMzMWNkZmE5ZWRhMjRjOGRlZmE3NjljY2NlMmVmNzQ2YzMwN2Q4YmIwNDg5MWZjZWZkNDlhZjNlNmY5Njk5MWE3YTIwZjI3YjZjMGFmMTIxOGJlMzE3OTFkMWQwMjkzZTA4MWI5MGFmM2I5MmVjYjE3NWVjOGM3ODlmN2E4NjQyZTA0MWVjM2E2MWFhZWZlZjYyYTgwN2QxYTUwNTRhZGY4MzIzYmVkOTQyMjQxNjIzNzMyYTIwNTFkYzAxZjlhMjBhMjlhYTQ4YjNmZGYyNjVkMGJhNmMxMzhmYjU3OTNlMjg3NTAwMmU3ZGUzZjVjM2ZmN2U4M2FkMjdkMTExYzg0OGI3ZTZlMmU1YWQ1ZjI4ZWI3YzM2M2Y5NWY5NjBjYmM0MjEzMzZjZTk4NWY5NDZiMDUxNWIxYmRkM2E4MzJjM2ZlOTAzZjdiNDRlMjBjOTJlYTgwODI2ZmJmOTdlMmE0ZmNhZjJkYjFhMDg2OThkZDYyZWRkMGE4NDU4OWQ3NDYyYzQ0N2I0YTg5NmZlMDA4NjAwNDI0OTZiZDUxYjE5MjVjYjc5Y2MzYjgyOTAxNmE0YzdlNjI3OTBmODA1OGM1NDZmMjE0NWFhYWVmNGQ0YjFlMjczZmY2MTMwMGY4MDA4ZTk0NmI2MjJmNjBlNTA1ZjVmNjI5MGQ1MWViOTk3ZDIwZmMzZmJiM2U5OWVkZDY4ZmY1Y2NlOWU4YzI4Mzg4MWMzNjRmZjIxNWNiNTAwNDVlNjBmNGE3ZWU0NWI2YzlkODY0NDdmMzgxNDFkMzQyZGJjNTMwOGY4YzY2ZWZjNDdmN2M0NWY2ZDI1ZTY1NjQzMDlhODYyZGI5MGY0ZGYzMzE3ODdlY2RkODlkM2FhYTQ2MDUzZTI5ZjEwMjYyNGRkZmU4MGU4YTNmOTkyODdjZWMxOWZhODNlNDRkNTU3YzA0NDEKK1NJRzogZWZmYjI5ZGE2OTg1OTcxYzIwMmUyNDUwMzAxZDQ5NzExYmVkMjVmYWQ4NWY2MTk5ZDFlYjFlNzE5MTRkOTY0Y2JlMThlMzRjYzNlMzI4NzJjZGVjMDI2YmQxMTlhNDFjMWMwN2NhNDFlODJhY2JhNjJmYjBhN2M4MmFlZDgwMGMKKworVFNUOiA4MjYKK1NLOiAgNWQ2NmNlYjdjNmU1OGNhYzkxZTI4ODI3OTE3MGU4MThlNzg3MTgwYzZiNDJkZmExNjg3ODdkZDA3ZjgwOWZhNAorUEs6ICBlZmM5YjM1ZGI4MWYzNDYxOThhN2FjYzY5ZjY1ZmRmYmY0YzIyZTY4ZGQ3NjEyZTNiOGVjNjhkMzc4NTUzYjhkCitNU0c6IDk0ZDcyZjZkZWM0ZjdjOTIwNmI0MTUxMGNlNzFhMDI5NTU2MDRmM2M1ZGU4ZTQ0N2Q1ODcxODY1YTc1ODk4YTRkMjA3YTI2Y2YzM2QxMGNhZjA1YTBiNmVkMGQzODlmZWU5ZWQ0OTI3NTA5OGE4OGUxYzBkODMwNGU4MWI0MDc0MjE0YzdhNWNlMTU3ZWIyNjE3ZWYwNGUxMzI0YmE5NDIxMjlmYWYzMmMzMWNiNGFhZTRhNTkxNmM3NTA4MDg3MjY4NTZmNzE4MGU1Nzk3ZWRlNDQzNjJkNzQ3ZDcwY2VjMTU5ZDNiNmFjZWM2M2E1MTRjN2VmMzFiMmVjZDE2ZGI3ZmU2OGVhOWM1ZWFkOWQ4NzA5MjE4MDAzNDhmNjk1NDEyZjMwOTNlNjE5ODVhMzFlYWRiNzliNTlkOTFkZDlhMzdmOGQ0ZWY3YTVkZGYyMjNkNGIyNDc3NGMyZTQ0ZTNmMjcxZmZiODUwMGQ1OTUzODFiM2RmMmU4ZTZiNzllZTY1NTM1YTUxOWE0M2VhYTVlNTJiMjU2YzI2NDMzMDVlMzE3MGNiZTU3NjA2YTA1NDVmODU4NjU2NWNmYjc1YmY1ZTk1NjRjNjJhZjA1ZjE1ZWU2ZTYyYWZlZWY4YzJjN2E5ZGFlMjM1YzllZGQxZDdjMjVjZjQ5YWRjMDMzZWU3YjU4M2Y1MThiYzE2OGVhNDg4MzZiNTBmZmVkZDIwMzJiM2Y2MzBjYzU2ZGFhZGQ1MTNlYmRhODY0ODIzNjEwZmM2N2E3MmI5YTdkODExNzEwNWMxYzcxZDg1YTk2YjFkMjdhNDQxZmExZTdjNmNmODAyMzNhNDlmZTBlNzZhNDAyNzhkMDZlMzQzNDdkODdiZTc3Yjk4ZGVkNWUyYTNlYTFhZmIxM2JlZTFlNmNkNmNhNjNiZTU0ZmNmODhhMjBjY2I3YTlmYzMyNGJmNjE0MzIwMWI0NDQ4M2JjYzk2NDAzM2RhYjcxY2Y4ZjJhNTkxZmMwNTBkNTcyNGU5NWFhNTBkMzI4OTZlZWMwZjNiMzQzMTFkMmE5OTM0ZTlmODUyOTc3ZTI1M2YxNTMwNGNhZTI0MTZjMmM0ZmNkOGYxZmVjYzNmMWY2NGJiNzk3NTk5MjlhYmIwZThlOGY1ZjcyOTNkNjkxYWYyMmFiZDNiMmE2NzcwYjBjZjE0NDYwOGYyZDYyY2M3ZTUyYmZlMzMzYjJlZDJkZTM5Yjk5YWZkMzdlM2FjZjA3ZWRhMzdkZGYwZGYwMjliZmYyZWMyMjU0NGI2MGJkN2RiMjM4ZGYxOTc1ZmZhMDA3NWE4MmFiZDhkNmIwNWIyNjcxODBiODcwZTIxYWJmMzY5ODFhZTc3NjhkZTUzOTkzYjMwNGYxYzU0NTM4NzJmZGZhOGVkYWQ0NWY4MDAxYWEwZTczNDJiM2I1OGVjMGYzODlkY2JjMjcxZmIwZjkwMDA2Mjg3NTdhYmJhNThjMDU3ZTFhMDg5OWY2ZmFmMTVmMzc0MGYzMTQzZjVjMGI3YTkxNTk2ODBkZThjNTU3MjY2NDQxYjNiMDFjYWFjMTJlYzI3OGY1YTEwMjVkZjUzZWRiNjEzNGM5NjY2M2E5NjY2YWUzYmFhOTBmYzgzNTExMWVmMDUxYmQ5MTJmNjc5Njc0NDkxMTNiNmE4NWY3MWRmOGM2MDM3NzI0ZWI4ZmM3ZDgzMTliYzAzODViZTliMGU5OWU5NWY5YWVkY2FlOGQ0NWE1MTQ0NzZmMDViY2Q3MjM1YzAxM2ViYzNhZWE5MTIzYzY3YWE2ZjNiNzljODVlYTVkYjE1OWVlZmFkZmI3NWE1MGFjNmI5NWI0OTZiNTU3MjU4MWE3NjExMmZmNmRiMjYzZmMxNGM1ODE4YWFkNWJjYTNiMmNiM2FjODExNmQ0Mjk0ODI3ODFlMDZmNjFlNzU2M2U2NTA1ZTUxYzhmZjk5OGJmODRhZWRiNTIwMmUyZjlmZjRjMjY4OTgyMDI5NmNjNjk2MDMwOTFiOGI4MThmYmViMmFmNWY0YzU3MDYwZDk4YzFhOTA0ODQzYTcwYmY5NzViM2MzY2E2MDMxYTRjYWQ1YjRiYmZiYTdlOWI0NzQ5MWFiNzQwZDllYmU0MWQ3Njg4MTBjYjhjYzUxYTkzN2Y3ZTNiMjJlM2NmMDdjZWFlMGNlMjA4MzE0OTVhZmNkZDhjMWE5OAorU0lHOiA2ZWYyNjRhYmY4YjBlNWMyZDc5M2IyYzc1Mjc5NjE0YTM5Yzc3NWViMmJjYzA4OTEwNjdhYmM2MWY2ZDY0NGE2OWZmOGY4MTRhMzA1MjJjY2E5MDUzNmYwMTJjNjI4M2E3NmMzMmI4OWVlZTFiZDlhNDMzNmY0ZmRkYWM4ZGMwYgorCitUU1Q6IDgyNworU0s6ICA2MmVkODY4MmJkM2FiMzk2NmViYTNiZmZiNzc1YTMxOGEwM2Q5OTkzMTk3OWU5OWZlYjJkZGJkNjk0NTVhMGVmCitQSzogIGQzMmFkYTE3OGIzZWM3NzAwYzQ3ZGQ2ZDM2NTMyMjAzM2ZlNDMxYzMwMmI0NmY4ZDU4Nzk4ZWQ4MzM3MTU2NmIKK01TRzogOWViMTNiYzdmYWNmNTFhMTgwNTQxZWMxZGM1ZjVhY2IxNDhjOGQ1ZWFkY2QyYzRlZjA2OGJjZGQxMWIzNDkyNWVhYmZhZmFiZmU4MmEyODRiY2JhZWUxMzgxMTUyYWY4ZTVlMDlmMDM3Y2YxYmI2NDg0YWMxOGUzNzM1OWJmYWE0Yzg3YWEwN2QzZDE0ZWQwODliMDUzOTEwZDFmYTQ3M2Y3YmNlMTQzZTJhNTljNGRhZjk5YjZjNmU0ZTkyOTFkOTdjODY0NzEyYWYzZWFiYTUzY2UyNTE3YTRmNzVjZDdlY2YyNzhmMzRlMjJiN2RmZmQwODhmYTVlY2FkYzBkZDIyMTM1ZTQyYTUzNmM2ODRmMjE5NWQzMTVmNjkyNDU3MWU0NjNmNWNmYzExYjlmOWQwNWE3ZWExMWI5OGExNjlhMWUzOTM2MDk3M2M1MGFkNDVjNzQ5MWI1NzEzOGVjMDUwZjQzY2JkNWQxN2ViM2ZlMDAxM2UzZDI4ZDUyNjA1NGUwNzYzMzE1MjI0NmYxNjU1NGYzMDU0NzQ5ZWVhNjg3YjljMzcxYjQwOWNkM2VjZWZiMTExYTFkNjAwNDA3MzQ0ZTZkNmVjMzhjNjBmNmU1NDVhOTIzODJlNDZjNGQxMTMxMjVkYmU1Yjk4MjZlMTI3ZjEwMTgxYTM1YWNmZmYyOGFiMzc2NGNhN2YyMzhmZjQ3OWZkYmM0NWI3YTJhZDBmZjUzOGM4YWNkMDAxOGQ0NDcwZmViY2M2YTMwNzY1MWNiNTgzMmYzMjZiMTkyNDFiZTk4NjdlNGVjYTZhZTM2ZjBlMmQ4M2ZkNzdiOTcyMDJiMzY0NzE2ZTM2ZDE4OTVhMzY4NTNlN2U3NmU4OGY2MmRiYmY3NzI2YzIxODA1NjljNjY2NzM4MzdhZDcyZmY5MzZjZjBlMmZkYjllYzZhZmNjNzlmODgyOWUxNTdmOTUyMjg4ZjRlMDBkMDQxMGE3MjI1M2JmNjA1ZWRkY2ViMDE0NDBkZWU1ZGQzMmI1YTgwMzQzOWYwMzhjMDZhZjFjOTBiMjdiNWZlOTg0M2MyN2FlNzY2MDljYmY4MzI4MzVjMGUzYzRiYjU5OTc2Y2NlZGU0NDg3ODZkOTFlNDM4ZTA3NzVjMDZhOTJkMGYwYjhkYzBlZjY4MjYwZjdkZDllNjg3MWM0ZDBjMGMwOTQ2Mzg1MjYxNTIxODUxNmY0YTZkZWJmZGI0NjI3M2IyODMzODJjZDljYTc0NGFiZjlmZDQzOTE5NGI4Y2YxYmRiYjMxNzVjYTljNTdhMWMzNzNjNDFmY2U5MmJkNWZjMDEyYjE5YTA2OThhZWYzN2JhZjgwNmFlMDlhZGQ4Y2I5NzJhOWVmOWE3YTVhOWIxZmQ5YTQxZDg1NGMzMGNjYTEzOTYxNDBlMjBjMmI5ODY1NGZlNmU1MTFiNjI2YTQzOTE1YjIyZmIyZGFkNzQ3YmE3ZmU3NDYwZDhjZWJiMjAwNmZlYTE5YjMyODRiMDljMDZhNmY1MmYxNzlhMzJiZWI1NjM1N2I5MjlhNjU5ZjBmZTZhMjZiNjk3MDMzZGVmNThiYTYwM2Y0MzBmNzRhYTM1MDcwOTgxZGI3NGNjZjE5MTkwYTFmYjA1MTQ0ZWMwYTA5YTUxZTU0NzY1MDY5NzMwYjA5YTdhMjMzMWZmYjNkZTJhN2UwMmM1ZTE4NGRhNDAxM2RmZTkzN2MzNzExMTc1MjRmN2IyMTBiYTYwZTI2OTJkY2RjZWYzNmFiMjI3YjRjNGYwMmE5ZjQ4ODk3MmI4NDdmMGQ2YjU5ZDAyZWU1NGZlZGU4ODIxZGI2Y2Y3MzFjYzhhYzg5NTM1MGFjNWNkNGQ2YmFhM2FkMDM2ZjA2ZjIwZDEwYTE0MGM0YWQzZDEwY2E5ODU1MzJlMzE2MDQ2Mjc3MzM4NWEyZWI1ZTQ2NGQ1MjhlMWU1OWMyOWY2NmIzZGU1OWU5ZWEyOGFmM2Y5N2JmYzU1ODkwMzU3NTJhNWE1NTIzZGVjZDJkZmYwMWZjMDBmZjMxYjMwMTUyZmY1ZGFmYTMzMWM2YWIxNTg3M2FmNDFhYTk2MGFhY2U3ZDJjYjRmOTVjMjNkZjQ0YjllNmM2ZTJmODY3ODhhODcyZmQzYTVjYmU0YWNjOTU4MTBkYWEwOWRjYzFkZjkzMzQ2NWVmMDQwYzUzZDlkOTU5ZjlkYWQKK1NJRzogM2RhOGQxNGRjNGU3MWZlNmMzMmVkZTQ2Mzc4OGU0MWI4MjZiNGUyMTYwYmExMGM5NWYxYzhhMjc0OWFhZDhmMTJlOThhZTI0NjgzMDNiYWY2OTA4YmRiMzVlZjM4YTVlY2Q3Nzc0MWU3MmVlM2E0MjdmZDkwNGRhZTY2ZmNmMDMKKworVFNUOiA4MjgKK1NLOiAgNGU1N2YwMzExZmZmMGU1ZDUzODg0OWIxMjE2ZjY5NWIxYTUyNzc5NDE3MDgyMDRkYjJmMGMxNWIzYzczYzgyYQorUEs6ICBlMzM3MWZlMjM2YWQyZjZmNDJmOWUxZmE0ZTFlZGEyYzNlMjljMzZjOGFkMjIxOGEzYzAzNzk4MmYwYjU3OWVjCitNU0c6IDA1MmExZjQxZWJmZDRiZjY1ZWZiMGVjOGU3NGRkN2IzMDY1ZTljNDgyYzQ5Yjk5MjYyZTZkZmE4NDA3ZDllMzFlZDM0ZDIyOWJhNDFmYzQ5YTk0YTEzMDlmOTkwYTk5Y2I5OTAyZmI4NGY0ZWRlOTFiYjY0NzE0NTY0YTkxM2Q1NzRkNGEzYzI4NmYwYTE5MmE3OGNlMmQ1NWFhZTVjOWZiMDU3ZmYzNjEyMDAxOGIyYThiNTRkOTgwODU1MzdlYTY0YWVhOTk5ZDUzMjFjNzg4MGIzNmFiNDMwMThlYTJjOTJhNWU2ODM1MGQzZGU4NTI2ZTJjOGJjOTE0MWY0MzQ5YTE4YTM0ZjIxZGUwYWJiZjI5MzA5ODc1NjdmMGFhZjhlYjE5MTQ1NTgwZDcxMzA2Y2U4YTY5ZTc5ZjhlZWEyNmNmYTBiOGJlYjQ5Y2M1YWEyYmM3N2I3OTdkNGY4ZDUwMzI2ZmZiOTM3Mzk5ZTk0ZmRlYzg1ZTE5MmYxMjcyYTgwZTlhMGViYmFmNWQwMWYxYjk3MDYwODAyYmQ0YWYzNGMwZjdkN2U5ODU0M2Y5ZDY2ZDYwZTBlNmJjMGJmOWM5OTBiZTMxZWVhMTk3OGZmZDE2NzMzYThhYmU0OTU1OGIzYWRkMGRjZTZkZWZkNjRkYzA0M2YxNTE5YjFlOWJlNjZlMDZlNDFlY2FiMTY4YzgzMzlhODVlMGI5MTM4MTg2NDRlYTdjNTMzNDQ2OGZkNzE5NmEwMWUxZDRjZThkZDFlN2VlMzEzZGQ1MzUwYjhkY2U0ZjVkN2E2YWMwOTg1N2M0ZDNkMGYxMGEzZDkwNjI2MDk3NTQ1OTJhZDEwNzdiMmUyMDk2ZmM5ZTViMTk3OGM5OGI1NjYwZGRmNTFiNDZlZGU5ZjlkY2Q0MWIyZWY0NGU3OWY2ZGFmZjdkMzYyNjg3MGUyMjQzY2FmYjJmNDM2NzkzOTEwOWVkOWMwMTQ4NGI3OWVhYTMwYTE4OTFlYTE4Zjk4NGUxNjFkY2RkMWJkYTM3MTM0YmY2NzM1ZDJiMjE0OWI0ODk4ZGFjYmZkYTYxZTYwMDJkNzJhNmZjNWQyMWYxMDk4MjEzMjMxMTMyZDU2ZGY2OGQ2YTliZmRmNGVkZGMwNTI0ZGI4ZmQ4ZjI0ODg1MjA0OWE2ODI1YTVlZGQyMzYwYzAwOWFmMjRmMGE5NGM1MDc5ZGRmNmZlNzk2OTQ1ZmY5ODRhYWMzNjQxMWNlODBkOTg3YzZlZDY3YjZiMGRkYjZkNDE3ZjZlODA5OTkxZTcyOWQxNDdkZDBkMjFhMDkzMjQxMzYzY2Y0ZWYzYjhlM2JhMDJkNDg2NjMzYjZiMjE3ZjU0OTNlMmU0MzJiOGMyZTI3ZDAwYzViNTZjOWI2NWY5YWVkNDljZTkzZDc3ZTdkMGJmNWY5MmY5MmY1YmI0YjU5NWQ2NmY4ODdhNDg4MDEzM2Y5NzA0NjNhYjhiN2YzZDhjNzk0YzA0MDZlODhlM2VhYjlhZTY1ZjFhMTg1ZDZlMzllMmRkNmFiYjhhOTNkMmFjNGI5MjA4Mzk4ZGFiODlkYmMwN2E0MWE1MDI2NDAyNjQxMmRhMDIyYjU4ZjQ4OWQ0ZGJhMzFmYjg4MmZlY2IxZmY4Y2ExODIwZGRhMTg2NWFmMTU1MWU0NmNkNjE4YjQ0YzRlNmViMzAzN2E5MzMzZmRjY2VmNGI4OTUxODllNDM5MGU5MzE0NWQyNjRjYTVmNDUyMDJhM2ViMjg1MzU5M2ZlZWQ2YzY2ZGJiMjg4ZmYzYTNjMGZhODMyYjJhYTdlNTI5YjU1Njg4OTdiMzE0OTQwMmE5MDdlNzQxZTEwMTFjZTA3MzFjOTE1ZjkxNDQ2YWEwZDVjYWYwNTk1ZjE4MTY0MzRmYTQ1NzZkYjNiYzMxZTEwY2MyYWYzM2Y2MTNmMDNjYTdiOTQ5MWEwYTM0MDUyNTI3MWFiNTM3ZjYyYTExYTg0ZGEwMWM3ZjU1ODFhZDU3MzhjMzcyYjUzMzViYWI5YjJiOWRjMmZlOTFlOTMzMzA0ZDk0MDFiYThlMWNlOGRjNTVjNGZiNDY2YjNhOGVkN2Y1M2ExMjJiODM4MWQ4ZjI5MDQ3ZDcyNjRkMDZmYjUxZWMzZTcwMDcxZjI3MzZhNGU3ZTE1MzdhNTJmYTI1NmEwNGVlODZmYWQyN2FkMmQyOGE5YjM2MjkKK1NJRzogNGZkYzdiNmUyODI3ZjY0YmEzYzAzM2M3ZmI2ZDFiMzVkZDY4MGY1MzI5OTlhMGQ3N2FlYjI3NmMzMWJkOWUzOWM2NzA5NzhiZTQ3MjQzYzExMzIyM2E1N2FhMTAyMzMxNTA2NzhiNDBkYjc4NTkxYzA0ZDA4ZGY1N2E3MGEyMDkKKworVFNUOiA4MjkKK1NLOiAgMzlmMDU1NmIxYzVkY2FiMzg3MTA0MTgxYmIzMDRkZTBjZjgxNTkyMGI5NzJlODcxZDVmMGZiNDE2ZDhlNjE2YQorUEs6ICBkODVmYjc2ZTc4YzNkNWJiN2NhNmIwNWIzMTAxOTE4MjFhNGE3ZDJkOWJkZjAyMjkyY2M3YWVhNTY0MmU0ODE5CitNU0c6IGE4ZDAzNGUxNzBmYzIyYjU3YTQ0YWE2MjY5ZWQxZjAxY2JhODAxZjM5OGRmMWFkZmU3ZGYwNDRkNWZhNDY4YmJmYThhZjQ3NDlhYjUwZDI0ZDYyZTMxM2FjMGU3M2E2NGI0MjgyYjc0NjI2YWYyYjRhNGI1NGMyNzRlNWE2YmMyODBiNmRjMjVkY2ZlMDc4MTRjOWM4MTZkMmY5ZTM2YzA1YjliZmVkZmY3YzZiMDNjZGRlYmQ0NzM1ZTA5OTNkM2MzZmRjNjU0MDQ0M2M2MDA1ZTkwMGI0MDM1ZTE0MDhhODUwMTZhYTFiODkyMDI5OTBlNWQ4NGVkOTk4MWMyOWI3NzIwNmQ3YzExMzA1MmEyMDI5ODEyYzZlYTEzYWFlOGJlMGFjYTdhMzMwNmJmNjE3MjQyMjk4ZTY4YmVjZDBkNWQxNmM4ODg3ZmQxOTUwYjc3ODVhNDZiYjAyMmIzOWY3NjA3Y2Q4OTEzNzE4YjMwMTdmYzNmODZkNjkzM2Y3NWVlYzUxOTFhZDFmMTk4OWE4ZDI2MTc4NmY1NmJlNGE5ODgzNzBkYjgyOTYxYTlmY2M5NTM1NDJlNTFjMmUwODZkYjBlMDJiNGZjMzQ2Njk0YWJkOTA1OWQ1YjExNzIyNjQ3NjY5ZTdmMTdiNzQ1YTYwYjAyZjczMzlmY2M5OWJjMzVkNTlmZDBiOThiNjBjMzE0YWJkNGJmOGFhNGI3ZWFlMDlkZDAwOTdhY2I5MTg5ZjAyY2Y4NWEyNTFhYzkyYWFmNjkxYjE1Y2Q0YTMzYjU4ZDc2NjNhYmQwYjA0NDQzMzMwNDRhZjVjZTIwZmQ3MWNiYWZmYzBkMjk4MzU4MTlmNDkyOTNmYzI2ZTdmOTc4N2ZjMzY4YzRkMzVjYWU5Mjc0N2YyMWNhMWYzZWZkODdhMGQ4MTA0MTk5NDE2NDgyZDA3YmZlYzEyODFjNjZmNTY1Mjg1YmY2NzJkNWU3NDg2NDAwNjYwYzAxNzU1NWU5ZmEyYmY2YTRlNzAyN2YwZTdlNWY0NDNlZDY1OGI3NWI1OTA2MTJhYmRlMGQ4MGQxYTI2Y2I4YmRlNzZiOTk2ZWZmNmE3NGUzZGFmYzU5ZWIxYjU4NGY0NTk3YTIzOWNkODM5ZmExZjFiN2JkYTFhMjRkMTUwYzRlMjRiOTFjZWMwMWVlNTNhM2FjODUyYTkxMmRlMTk1YTNjMjlkZDcwNzlhYTdlODhhYTgxZTlkMzFiOGZjY2Q0MzVlZGExMTNjM2Y4MjQ1OGI3Zjc5MzM1NzJiNzc2NzUzYzkyMjQwY2MwMzYxNThhNGJhMGU1NmVmZWQ1M2VjYjUzZmMwOTNmZWFkMTQzNDM0ODVhZTVkOTEwNWJiMTYzZjI2MjUxNGU0OGJlNzQxNTljOWZhYmNiNzFkMWE0MjgwZDllZDcwZDdlNDJiNzVmN2ZkYWRkMDJkNjkxOThmNWY0NjViZjYwNGNiNDI1NDQxN2JhYzM3MTRiM2E5OWU2ZjFhY2VjOWUzYjNkMDk3Zjk3MmZiYzM2ZjJlZGEzOTI2ZDU2MTEyZDRlOTA5N2Q4OWJkYzM1OTM3YjlhMzE1OGU3Y2RkNWRhNDAxZTE4MGQzZWRlNmIxZmYwMjg2NDE5MmViNzI5NzgxNTM0ZjQ5NjRkZGYyYWYxMTgwMGQ4YjViNmQwMWIyMDlhYTMzNjkzNjZjMTlhMjhjNzlhODdkMjE3NGVjMjJmYjE0ODlhNjc1NWMzNDhhOTk2ZDBhYTU2ZTBmNjBkNThlMjZiZWZhMjNhODZiZWY0ZTM1Mjk1MTJlMzBhOWQxYzVlNDg4NTAxOGNiOTdhZWI3YzkzYzVjNDFjYWEzNDIzNjU3NWMyMjZmM2IyMzVlZGRiYTM2NGUyODViNmUzNTI3MDdiYmIzYjMzOWJiZjJhNjNhOWNiOWJkMzMzYTc3ZTc5YmQ1OGE0OGUxNGNlNTg4NmVkMGNkMDdjMmQxNjVhODFiNWU2YTMxYThhZTc4MDZiY2YyZTBjNGVjMjlhOTY3NzI1ZTU3N2YxNzQxZWU2OGYzNDVmNWY3YWIwZmFkMzFjOGI0YjE4YjQzMWM0OTc3ZDVjNTg0MDA0YjQ1ZjdjZDE5NjFhZmZlODczOGUyNGMzODI2MTBlZmU5OTgzNTNkN2ViYWY5MTliMjc5YmJiNjkxYzMwNTJiOGIyYzVmMDk4MDhlZjNhNgorU0lHOiAwMTY2YWZlZDVhOGY3YzNmN2FkNmYzZmRkMjkzOGVmZjAwODk4ZWFiODE1YzU0NTVhYzkwZmI1MWY2ZTE4NTRmMGMwNzUzMTk0Yjc2Mjk1OTRjYzEyNzFiMDAzNDMxMjIxYzU3NGIwYzBkMTkwODJmZWVkYTUxYjA4NGFlNWUwMworCitUU1Q6IDgzMAorU0s6ICBiYWIzZmY3YTQ0NDhkOGEwM2Q4YWNmZGI5MTNmNzdmZTc3ODA0Mzk1YzNlNTRlYzIzNTExNzkyN2UzMmI1MGQ1CitQSzogIDU0OTc1ZTM1ZTViMWQwMzIzZjJkNmZiNWM2MTU4YmY2NjU0YjA4NGY3NmJiZGNmZDcyMzQ5MjI5ZThlNGE2ZTgKK01TRzogYjY0N2I2N2NmMDFjMmNhY2MzOWRlNTk2OWUxOTliZTZkOTMyMDE2N2E0Y2ViYmYxNjI1OTUwYjFlNmI3YWRmNWNhMjRkMTM0OTU2ODg2NWZiYmZkOTBmNTEzZjA1Zjc5ZjcwYTYzYTIzODczZGM3YTE5NWQ0YjI4NWEwOGYzMGVlMDYxZDBiOGU2YjRkNmJmOWIyZWNmMmM2OWYzZDVhMDdhNjczMDUzN2NjYTRhNGU0YzdlZTY4NDcwMmJmZjg4M2ZhYjhiY2FmODkzMTFjNTQ5OGJjY2I1YTBmN2M4ZDQ5YjU0ZjQ4MmZmZmJjYTZlN2RhMjYyNDUyYmE1OWE1N2E2ODc5ZDgxYjczY2Q3YWRmNzJhM2JlMjhhMzczY2Q2MzMxMDQwODQ2MWMyMWI5MDdmNjNlMDg2YjI5MmZmMDI4MzNlOGEyZjQ2YWRiZDY3MWQwMmIwM2E2OWFjYTJlMTFkMjg3YzUyMmE5NTQ1MjA0NDJlY2VmYWE5MDVkYmZjYzgyNTRjNThjMzk1NGE4OWJmNTZjYmUwMWFkNTYzMTk3MWViMzllYjQzMmE4NTRlNjkxOTI5ZGY3ZTQ4YjkwMGNhNmU3NDBhY2NmNTc4YjMxNzk1YjQ5YTZjYTc3NGJkOGI5OTMxMDZhOWM0OTQ4YzE4NzE0OTQ4MzE1OTkwYTVmMTkxNjkyNDIwZjI4OTMyOGFiNzEzZWMxOWI3ZWE4OTRkMTZlNjQ3NjEwMDg3MWNmMzE2OGU0ZjkzNWI1NTA1ZDFlZDViMGFhMjliZTM2ZmEzYTM0NmFjM2U3NmYxNDNjNDZjYTY5MTIzYjc5YzM2Mzk5YTBkMmVkMzAyNzcyNDk0YWRmNDQyYmJhZmJjNGQwMTUzMjY5MmM3ODU5ZGYwNGQyY2E3OGJhNTVkNzdmZGYzZTVhZDk5Mzc4NmEyNGNmZjIxOTliYjQ5Mzg3ODczY2M0MTRiNGNmMTEzN2FiYjdlOTRhZTNkZGJmOTdmNTM0YTE4ZmM1YWU1ODUyM2EzY2M1MjI4M2RjN2IwMTZmMzFjZDY1NTc5ODFjNTA3NmM3NzRmMzAzYTQ3YzQyNzg3MGUyMDdlZDhiZDY2NjQwZmYwOTJkYjUwM2ZhMTI0YmZkY2YwMjAwNTFkYWRkMTA2ZGQyNDU4NDBiMzE5MTBiOGE5MDYwZDU5ODZmMDJiNjBhYTVlMzNiNGQ3NTUwOTEyY2RjNTc3NmM3NzJhYWM5M2FlMTljNzNiN2VjZmNhMzg5ZTYyNzY4MWE4NzgxZWI0N2Q4NGU5MzQ2MGJhODkxZDNmZjZlYWRmOGYyYTkwM2MzODM0NzRiZWFhNDJiOTBlMDMyMjM2ZGNkODk4ZDAyYTQwZWZiNDRlNDdlYWQ1MmI3NWIwOWM3ZGExY2Q2YTJkZmQ0ZDFjMDQ1MmRlNjlmNmFjYWMxYTY4ZGQ3OGRhZjk3MmFlMjYwODIxZTJlYzUyMmZiNTc0OWJlYmUwYWRiNDUyYmZhNGZhYTFlOTc5MTFjMTI5OWYxNjU2OGQ2OGVlZjQwNWY0YjFjZGFjYWJlZDU5ZjdiMGZiY2VhYjcxOWEzNGIyOTlmNThhNGFlODE1NGY5OGY0ZDlmNGYxNDBiMWYwODUwMDY5NDY3MjVlN2MyOWJiMGJjNmNjZjI1MzQ0OTdjNjFkNGMxNjEyNjI0YTYxZDcwZDI2YzNlZmI3ZDdjMzUxODQ4NjU3ZjdmOGVlYmY4Yjk5MDc0Nzc0MGU2ZjkxMGM5N2NlZjE1MDM3NTc2NWM4YzBiM2I0NDljMGQwOWQ2NmYwMDhlNjdjZmE3NmVhMmI2ODA4YjZmZTYzMmVhZmUwNTg3ZjM3ZTM2YmU5OGRjYjE3YTNmNGExNWI2NWE5ZjZmY2Y5NjQyYjUyNTIyMDc3YjFmYjRjYzNjMDhkZjRiNDY3Y2E3MTZkYjE2YjczN2Y3ODJjZGYzODcxNzBhNWYxZjZhN2FlMGFiM2Y1YjdjNTg1ZTNiMDY1NWE2NDU2YTUwMzU5NWNlOGVhZWEyNTM3ODU1ZTdmMGQ1MDYxYmMyOWI0ZTY3ZGFhODI0NjNjMTkwZTlmZGRkNTJmODMyMmRkYjRlMGYyNmI2ODc3ODIyOGViNTdlMWExODViNzAyNWRhMTQ5ODdkNDRiYWE3NjdiMjJlZTdmNGM4NDU5MTAzMmU4OGVjMTJlYjhjNWE0YjllMTU3ZWMKK1NJRzogZDZiNDEzNWZjN2FjYjNkN2NkZjk4Nzg5NmQ5MWI4YTkwZGI1ODRkODkzM2E2ZjMwMjllMzI2MWVjMWMzOTBjYmFjZmFhZmVmZjQ0M2I2ZGE0ZmRiMWQ4NGM2NGE1NDU2MGZlZmZhMmYxYzdhOTFiZGU5NzMwMjIyOTIzYjY3MDMKKworVFNUOiA4MzEKK1NLOiAgNDg2YzdiNDM2YzFkNDNkNmI3MDM1MTIyODNjMTY2ZGM4NjNlNWEzMzgwMmY0ZWE2NWZjNzM4Nzc4OTAyZDAxNAorUEs6ICBiNWRjOTQ3ZDY0MzM3Y2FlODIxMjJiZDY4Y2M4MDg0MDU5NmRlM2JlNTZjYmQwYzgzM2FmM2ZhYTNhZGMzNzc2CitNU0c6IGFmMDM2MDUzNjcyZGNmM2FhMjZlMjhlYzZhYTY0MmNlMjg0Yjg5NmM2OTg4N2RmZGNmMDgyNDUxNWViMDg0OGQ5ZDk3MGNhMjcyZGY3N2E4NmIzZmY2ZGRhZjNjYmFkZDNhYjYyODNiYzM3Y2RmN2E1NjA3ZDVkZmM3Y2Y5NjMyOTI5OWNjNTNlZGJiZTY1N2ZkZmEyY2EyNDQ2NzA1MGEwYWViOGNmZmQ3ZDMzZDU0M2VjMmMxOTFjYzBiY2U4OWFjMzdkMzMyOTNiMTg4OGNjYjc2YzI4YWRjNjcxYTQ5MzVhODQ2ZDkwN2U0YWRkMDExMGZlYmJlZTVhZWM4MGY5ZDJmZjc0ZTJhZjRmZGJlYmJjZjQ5MTA1YTY0NjlkNzM4MDAwNmIyY2E0NDM2NDgxNDQ1NGU0NDVlMzZkYzAwMTJmMzM5Yzk2ODU0ZjgzNjQ0MmEwNWE1MGJlYzkwNzMyN2Y3NGJhOWY2ZmQ3OTBmZjBhZDM3ODNkMjk3YmRjY2E3NjQ2MDc4MzcwM2ViNWYyYjFmNTFiMGE3NDBjZTdhOGYwMGEzODdlMzYzNjI3MGE5NzFmYThmMTViNDQ5NjczMGQ4OGFkZDgwN2E3ZjdlOTg3Y2Q0MTU5NWEyZTc0MzVkZjUxOTU1NzZhMzVmNWU5MWIyZmNmYWM5NGVkNWQ3NzY2Mzc4M2I2MWU2NjcxZDM0ODM4YjZiNTY0NGZiYzFjNTM5ZmUxNTliNzc5MmRiOTY3ZTgzNTI2MThkZGFjYTBjZGU3MzQzN2I1OWU3ODAxYjQ5ZWI0NjA5YjEwNTc3Y2EyNjkyZGQ2ZjlkNWU5ZDRiNWU1ZTYyYzU5MTNlN2I4N2U2YjM0N2JlNjE1M2IxNzE5OWM5MTZhMTNmOGE4ODViMzc4ZWYwOWUxM2NhZTRkOGIwNzlkN2Q1Y2I5MDk0MTk5YjBmMjA1MzNjOTAwODNiYzNhY2IyNjY3Njk3ZWVkMjJlMzY3MGFiYjRhNTUzZTk5NWM5ZGQ5NTk0ZTU5MjM5MWEwMDA0YjY1NTY1NDRmMzU2MTJjNDk3MTM1OTU3N2M0NzYzODJjYTUzYjNmMjYyYTVlMzNlZDI2ZWVjODA5ZjRmZGJhNDg5OGExMTM2NzVjYjZhZjcxN2RiNjI1NzlmMzk4MGIyMTQ2M2JlMDI5Y2I0MTYwZmU1ZDI1N2M0NmNkNjY2NGY5ODYxYWM1MGZlMDVjMTQ0MDU3ZGNlMmY4ZGYxNTMyYWE3YWY1ODlmNDEyNzA2MDFjZWYwNmJiZTRmMzVjMzFjNzgyYmIzY2ZmZjdkNWFiNjRhMTRlYzQxNzM2MWYxZDMyY2JkMzhiNmJkMGUwMjUwNWQxNDE2MzAyYjg1MDVhZTJhOTZlOGQ1MzM5YzM0NmMyYjA2NjJkMzUwMjU5YzUwYzVlNDg3OTU5MTRlNmY4OGU5N2M4MTFjMzkzYmRmOWFlYzdlZjgyMDQ3Y2EyOGVlOTcxYzE3NWMyN2UzNmUxMDk3Mjc5NjBkZGYxYTFiOTc2YWI0NGY0ODUxNjA3YmQ5NjY4MDhhYzQ2ZDU0MDAzMTI4Mjk3ZjVmNDQ4NzEwOGQ2YTAyZTdhMTY0MTNkMmI3NWVjYjQyZmRkZmI2NjljODAxZDIzZGU1MGE2ZjdiZjY1OGY3NTNjNmIyYjNiNDdjMDY0MDEwNWQwYTgwMWIzMmExOTQzY2RjMTVjODg2NTU1ZWI3NWJiNzkyN2I5M2MzNWM1YmUxZjk4YjE5NmNhYWMyZGFkOTkxYjEwNDRlYTg2Mzk0NGQ1NGQ4ODNhYmMzYzZkZTY2ZWQ4NjhlZTg0YmNmOWMzNGNjZGI4MGZjZDljYzA0MDI3NDc3MzJjZDYzMGJiZmEzYmJlOGIwMzhkYzFkYmRhZjQzNmQ5YWMwMGMwMmQ1MjhlY2UyZTc5MWVlMzEyYTg2OGZlYjJmNTg3Y2E0NGRiNTczMTM4NGZhMTgzMTE0MjA2MWIyZWFkMmI4MGM2NmJkMmZhNWRjY2FiZTZhMjVmMmE0OTNmZWFhY2QyMzFkMmY0MDk2NDZiOTQyYTU3ODU0NWVhNGZlZWE5YTczNDczZjc5ZGNmMTNlMGM5ZjFiNDlmZDg5MTJlYzQ4NzMyODA0NWJkMGZhMjI4OTIyZWU2ZTk3M2U2MWY2ZTkzMzY1Mjk2NTc4ZGNjMjFjMzYxNDc5ZWUyZDI0ODc5ZjJlOWIKK1NJRzogMzFmOTVjYmI3NDYzYjg3NTI4NjU0MjI3YmIxMzk3YmYxMDY1YjRmNTc2ODA4MDc4MjA3ZGZhZjA2ZDEyNGI0MWY0YzMxOGY0YTkzMTVhNjYwODViOWU1NjhhNzFlNDE0ZWQ5NDE0NTE3MzEwYzY5OTk0NmRiMGM5NzYyODUyMDcKKworVFNUOiA4MzIKK1NLOiAgYTZlNmFkMmMzNzljNmZjY2FkYjRhNDliMjMyYTkxNDI2MThlYTMwMTAzYzMzYzIyNmZmNjI4YmNmZDgxZjQyNgorUEs6ICBmN2M0MzIzZjVjNDE5ZDliM2YzNGE4ZWI0MmFlN2YxZmFhMjMzMzA3OTAzMGM1ZDY0ZjlmZmIxZTliMTYwMDJkCitNU0c6IDJlODU3Njc2YTViYjFjNmU5ZTk0NTA3ZjgzYzYwYTY3ZjU0N2M1ZGU5ZTk0NTY2YjE5N2E2YWY2Y2Y0NzUyZTkzZGJkZWY2YjlmNjZkMWZlYmQ5NTdlNDJhN2Y1YWQ2NGVmMWRiY2M0ZmU2OWFlOTUyNWQxYTRkZTY3MDU0Yzg4ZjI5YzA2NDdiYWNmOGI4MmYzMjFmZjk5ZmU5ZWVkYzk5MmVkMzRjMTE3N2ZjNTQyMTIyN2NjYWMxMGZlYjljZWQ0MDgyZjU2NThkYTYzNzE0NzIzOTc5NzM3ZTdkY2JmZTJlOGI1ZDUwZjkxZGZjYTgzZTdmOTVmMzVkMWFkOGRkNTExNDQ1MDJmM2RmNjcyNDMyNjExZjBlNzY2YTkwZGNjMmE1NzM5YzgwNWQ5NWZlNWIwNDFkZTlkN2ZiNDdiNDQwNGFmYzgwM2EzYmQ0ODA0Yzc4MTdlYmM1YmRmZWY4YWRkOWUyNTBiNTA5NjZjYTg5MzliMjJiM2M2ZmY5MzZlYWE2NTlhMjQwYzBjODQ4YjgxMGFjZWNmNjE4MWUwZTRkYjhlNGNmOGZjY2U3ZGU1NTljYmU4YWZhOWRiODQ5OTU3MDkxMWEzODg3ZTg1MGU1MDljZGI3MGRlYmMzNDc3ZDEyMTc1MDE0Zjc5ZjgxYmExMTNkMGI3YjMzNTExOGY4NWNmNTk5OTZmODA2NzU4ZWI5MDNjYzQ1MGY1MmZlZTEwMmVmYzAxNDQxZTlhZTVmYWU3NGMyMzFkZmQ4NWViNmJhZDE3ZDZiNzBlOTM4NTg0ZmFjYjIxNzJjYjAzYmQ1ZWEwN2I3ZjBkMzcxZmZhMzUxYzBlZTRlZmU5YmE0YTNmZDU0Mzg3NDY1NWU3ZDM5YzUzYWU4NjMyOTgwMmU1YzM4NWU5MjgzYTI5NzNjYWI4Y2Y3YWM3ZmYwZjkxZDFkNDhiNThhYmZkYWQ2NThkODEyZjA3ODgxNjc2YmQyMjZiZmU5NTdkN2RmMzBjNDEzMGE0NDgzNTRhNmI5NDQwNWE0MTE2NTBhOWM4ZmM4NTExNTVlYzVhOGEzZTNiNjdhZTBjNGI1Y2I4OWJiNzNmYzgyOTc0YmU2MmRhNzNmMGUyMzA5MjkzN2Q0MDViYTRhZjZjYWI5NDY1ZWE0M2E2MjUzZjQ0NTcwODJhMDZhYzEyYjc1ZTg4ZWM2ODQ0ODdmOTA3NjM3M2ZhYjg4OTI4NTlkOGU4YmE0MzE0MjNhYTgwNWEyMjBjYmZkYTQzMWIzMmIxZTAzMTIxZjdmZDRkZTE4NTkxZjI1MDVjYzBmNWIyYjFhNzYwNWZiY2M2Mzc1N2IwN2UyOTlmZWY1YTJiNzM2NTIzMGMyZTkyYTI1OTYyYzJlODAxMmFkM2ZhOWVlOTQ4ODI3MDk2MjViYTY4YzdiMjEzNjY0YWUyNTMyYjYwOWQ3YzlhYTBlODNkNDkzZGJjZTc2MzJmMzU1ODBlMDZkMzExMWNlZDMyMGRkMDE5MDQ0MWY2MmQ5ZTM1ZjUwZGU1OWMyNzJmYjAwZjU2OGEwMGIwNzQ2YzMzYTliZDI0OTBjMDc0YjkxY2RkYzQ4N2VmMmU0NWEwZjAzMGUwOGZkYzE4MTdiY2E4YTljZTI5ZDI5Mjc5ZTc1NWRlYmMyOGRmYWRjM2M0ZDFiNDU4NDg2ZTNjOGQwYzQzMThlN2U2ZjllYjVhMzY1M2IzZjdjNDk1MDcwNzdjZDVlYjgxZjEwYjg4MTA3Y2MwZjkzMTY5MzJhYmU5YjY0ZTg4ODZkMDY4NTZhODViZTYzYjBjMmI0NzVjMGFmY2IwNjk0NDI2ODYwZmIyNGI1YzE3YWI2YWI3NzMzZDVlNjQxYmU3NGZkNWY2YTFmZjE4ZDJmOWE0Mjc3MGZiMzA3NTBmNTZmNDg1NGUzOGQ1OGFlZjE4YTJhNjFjYmZiNDllZTU3NmVkOTc3MzdiYzI4ZGYzMjY4YTMzNDE3NTUxM2Q5N2FmMDA5Y2JiY2ZkZmFkNTAzOWQ2OWJiNDZmNzA4ODY3ZDliM2NlMGJmMmY1NjllM2NmYmNmNjEzNmY4ODcwZDI1MjA4YjIxYTNlZGNiNzMzOTNkZmNkNDE3MmMxNDAyYzQxZjM2ZTNmODJhNGVhNmRjZDg5MTY4NmJhNjZlMTQzMjBhYTBlMjJiYTBjMWVmMDMzZDY2MmNkYjg2MGNkZmEzYTQwZjZjYzUzMmEwOAorU0lHOiAwN2Q5ZmMyNDRmZGFiMDAxNTllYmVjYzVhMDA4ODM0NTNmMDgzMTAxNzE3NjlkMjk3MDAxZTg3NzAxMGUzZWNlZDlmYjYwZWM5MWNiNGQ4OGU3YmE0MGM1MzBiMWY5MjM3OTc4Y2NkOTZkNWNiYTllNGZhMjdlMmEwYWQ5ZDYwYworCitUU1Q6IDgzMworU0s6ICA5YjZkN2UyOGViMDUxNTk3MzI0ZGNlYjdhMTg5NDEyNDY3MjVlODhkNTNhYjJjMzQ3NzExMDUzMzBjZjFmNGFlCitQSzogIDg4NzJhNTBiNWZlMzYyZjhlYWQxZDQwZTIwNDVmMGQ0MGIyZTdiNTBiNTlkODA5MGJjNDdhZDY4ZWJlZTA5ZWQKK01TRzogZDFlMTk4N2JmZjY1ZjYyYWQ2NzYyNGM2NjU3OTI0ZjVkNjczYjc4MjRlYmU0MDQwMjZjMDU2MmRlZDMxNDM0NDBiZTYzN2Y5OGM5ZTAxYTZhZmRmYTlhNDdkZDQ5YzdjYmE2ZTNmZDIzZTQ1NTJmNzYzMmIxNDM4MGIyN2NkM2U5NjA2Y2NlMzUwZjE1MmFiMTI2YmVhZDBhNWQzYmNlNGQ0MjA5MmQ5MzRjOGNhMzM3ZTk4N2UxMWQ4NmNmYmZiZDJhY2MzMjIzYmQxNjc0NGE5Mjc3MjhmNDg1MzcyMTc1Y2M2OTRkZjMwYTczZjlkMzM3NjVmZjAxNGVmMDA4ZDU4NjMyMTAzMzhjYzM0ODJjYzI3ZWEzMTdlZWM5MjFiMGM1NjhjMzhhYjI3YzRhNTY0ZTgwMmIxYjk0NjY4YzY1MWUyMGEwYjU1ZjNhNzlkMjE1ZmMzYTBkMDQ5MDQwMTA5MzJjNGNjNjhjMmE5ZTdkMDBlNWQzOGQ4MmRmNTUyMDZiYWI5NWNmNjk3YmViYzcyMDZlZWRlZjZmZDE4ZDlhMjBjMmNiYjI4NWIwMGVmYTc2OWEwOGRhYjJiM2FiYWRmMDBkMTk4YjRmMTkyZGQ0NGJjYjkxNDMxODIzYWU2ZmRmOTg0NThlY2EzOWNkMjkyNjNmMDk5OTMwM2U3MGRjNjk0ZmUwMWM1M2ExMWMxZDFjMzRjMWVlNTA2OGEyMDFkYmU3ZTEwMDhkNzY0MzU4OTY4YjQwMmFhMzk4NTQ5NTA3ZjdiZDE4NTA4MDBlNDExYjFjNGUyOGRkYzA0YTg1OWUxNzliZThhZDdlNjY3MGU1MDlkYjAyN2FkN2U1MTdlNDQyNTk1NGY1YTgwNzQxNGE2ZGEyNjdhNzY0ZTcxMmE5OTg0NjUwNjQ5ODJkODUxYTI2NWVhM2M0ZGZiNzRmOTkyYTdjY2NkOWE4MjY4N2ZhNjFjMzIyYzRmNTg5ZTg2Yjg4MjUyMTNiZmE5NTFkYWU2YWYzNTRhY2UxOGYwNzM5OTVhZGM5NTgzOWRhYzAxNjU1MTFkNjE3NTM3OTFhNTNlNDhlM2E4MjczZDQ0ODIzZDI1OTZmMmEyZGIyZTVmMWFlNTk3MjIxYmE3ZjNlYmFmNGE3YjI4ODgzOTUwMDJiZGFmZjUxZmE1NGJmYjk3OWRlMTAzMTQwNGNhNzc4OWZlMDk1ZDRkMTdmMDdhMzU1NTZiMTBmZThlMTQxN2M4YTZhNjMxYzJlZDM2Y2I3YTBlNjE4MTc3NjI4OWMzNDQ4MTRkNDIxMzFhNzNiMTJmYWEzNWQ3NzgxNGM2ODFhNjAxMzc0YmE3MWNiOWFkNTMxNWZhZDQyZDNhY2ZjN2MxZDYyODgxMDI1NmRhZjdkOGMzYzlhMmU1YmRjZmI3NzAwODJmYTYzODE2ODk1ODUyM2ExYzNiMDM1ZGJjNmQ1YWRmMjZkZjg5YTdjY2FiZWQzZTdkZDM3N2MxNmRhODQxZjEzYzY4OTRkNDNjZWJiNGUzOTAyMmYxY2NlYzIyNzQ0NDVjNzhiM2FkYzdiYmY3MGQ4OTBiODAyMzZjYzQ0NjhmOTU2OWM1OWE3ZTMzYjU3MGU2NzAzODBkMjQ0ZTRlMzEwZTExYzM5MmYxZTMzNDA1NGI5MmM4Mzg2YzE2MWNlMDQxMDliMDM3YmQ2MjhkOTE5ZGNiNjJkYTE0MzViZjk0ZTg4YjBhODg0NmQ0ODZkMTY3NzhmN2EzYjg4MGU2NjBmNDQxZmRmODZlNTZiOGFhMDY2MWY1NWFhZWNlMjdmOWRkYWEwZTJhMjJjMjE1YjA0MDUzOTcyNmI5ODUzOTE1YTE1OTJkZmZlYWUzMmQ3YjViNjdlYjYyMDViYjBiZDcyNzlmNzg4ZDVmODMzYzQwNjY3ODBjYTBhNDJkM2U0ZTFhYTIyYmQwNmJiNWVlZDg5Yjk0MTM3NzFlY2FiNjQ0Y2E3MmQxMjkxZDAwZjc0MDkwMWE3MzExZGMwMzY3MTVkMjNlYmQ5YTU5ODkxNjI4ZjBkODdlZDQ4OTUwMmYwNmQ3NWJiZDExY2QxNjAyYTM1ZWU3ZTEzMzM1ZDZhMTQ0YjA4ODMwZTY2OWMwMmU2NTJmM2YxMDBkMzkzZWY5YjRhYzA1MzIxNDM5YmNlNmNlMzZmZmM1YWJjYTg5MGI4Nzk2Y2NiNWUxNjMwMzU1OWM1ZDkxMTdmMGYzMWQKK1NJRzogYzZkYzVjYTFlODU2MDAxNWI0OTNhZmUyNjY2Y2NmNmZlZmE4MDNkODUyNmM4MzdmZTdmMTIzYzc5OTE0MjdhYjAzMGQ3Yzc3MGU0NWY2ZGU4NDgxNTIzYjk0ZWNlOTdmM2YxNjFjZjViOGM3YWVhMzlmNWFkODI2YmY4ZDBhMDIKKworVFNUOiA4MzQKK1NLOiAgNzAwOWVkZDA3OTUwOTZlZGM0ZmVkNTVhMTdjY2Y0ODQxMzFlNjA4YzZkNWQ2Njk2YmYzMzc2ZTI2OTI0OTU5YgorUEs6ICA3NzU3NGJmMDY5NTI3MTQ1ZTcyZDNlODVjZTdkNGZjZDY3MWEzM2UwYTcxZTZiZjBkYTdlYTQ3MWRkNmU4NmE0CitNU0c6IGIxMmMxMjQ3MDUzOTU0N2MyZGU2YmM0ZWVhYzdiNjNlNTA4ZWQ3MTBmMzU2MzdkOWZkZDJkY2NhMzIyYTdhNTA3MWRhYjJiMjg0NWUzMDc5MjgwNjAzNWM5ZmNkYWZlMjc4M2UzYjY3N2Q2YmU1YWFjNzBiMzM5MTBhMmI5NWU4YjVkNTliZGE2MTU5MzVhNDE3YjdhZTE5YTc4NTM3NzRlODlhMTJhYTU0N2I0MTkyOTc5YTAxZWY2ZWYzMmE0MGRlNzlkNjgwMDU3YTgzYTA3NDYxN2NhNjUwMWY1OWU3MzU2NDkyN2MzOGI1OGMxOTU4NWEyYzAzNjU5YzAyNmU0ZGUzODA2ZDZjMWNhODk1OGRlZTQ3YmNiODg5ZTc2ZDJjM2E5YWI1YjhiNmFmYjJlODQyMjk4MDU2NTY3YmY5YjU4OTU3NDE1NDgzMzM2MjMzZWY0OTIwZmE1N2Y0OTZlMWYwMzQ4Y2NhMjAzNjY0OTZmYWIzYTc1YmY0MjE0ZWNlNDdhNDVmZWFhMTM5MmRiM2YyNTRkOTZhN2YzNzQwMmM5ODExMTQwZDczNThiNGVmOGYyMGEyOThlZWVmOTA0ZTM3ZDY4ZjM3OGQzM2NiOTZkMDBjMDMxMDlmYzgzZmQwNmE4NzZjOTI0ODJmNjFhYjc5MTRlYjdjMmU1ZTg0MDY2ZTBlOTFlMjFlNDJlOWJlMjNkZjEyYjVjNzQ3OTczY2I4NjQ0MmMzMjI5MWQzZDFhZTcxOWIzNmE2MmZhZjNhYmFhMjA1M2EzMTNmNjI1ZDg1YzUxYTUxOTg1NzE5MTVlZjhhMmIxOTliYTM3ZDI1ODg0NTc1YmExYjcyODQ0Y2FiNDMyOGI1N2ZhYjFlYzk3NGVlOGVhMWRmN2NhOWM3OGE0ZDNhMDNiY2IwYWI0MTY5YmYwNmEzYTQzOGQ5NTY2YzZjNTAxZDhkOWNjY2NiMWFjMjZiNGRhNGFlMWE5ZDhlOGI5ZGY2NjI4MjFhZDk3NWM5YjAxNWZlMjZmNjg5OGQyMmFiOTEyZjBlNDA1YTViMjdjZmQzOWQ2NTdkY2Q5MmNkZWJlNjc5MTkwMjcxMzQ4NDQwNmRkZGNlNzExODg3MzFlNDQzMTkzODFhZjI3ZGFmNzY3OTIyNzNiOGMzNTI1MWQxMWI4MzZhZmU4YjNjZTliNDAyNzNmNjkxNWViZTZiYzk1YTc1YmI5NDFhNDI5MjA5ODY3ZmJhODc2NGJmNmM0MGRiNmVlY2I0ZjIxNzQ3ODM3Y2Y2YWU3ZmJmZTM2ZDUwMjNkZjdmY2UyYzBjM2M1N2FmMjg5ODg4NTMxM2M1YzRiZGEzNWM3ZGE2Y2IyOTkzMmZiMTk5MWY2MmJiYjA4MGIzMmUyMDUwNjE5MzExYWU2OWFiYjMwMjJkOTEzZmE5ZWFiZDVkNWNiNGRjNTRkNzVkY2E2MzhjZGE5YWYzMzFjMGNmNGQyMDA3YjZjYTM5ZjY1NWE2MWMwMTAzOWYxMmE0Yjk3ODJiYzM5YWVjNGQyMmVmMDA5MzM4OGRkN2Q1YjU2ZGZiOGE3ZjlkODY2OTAwNGUyODc4ZGQ4YTZkNzY4NTdjMDg0NTI0NTA2OGZlZTFjNTMxOTYzMWU3OGQzNzg1MTY1YzcwYWZkNjUyOTkzMDEzNzg1NTFlYmY2MTM1ODRjNmE3NjIwYTBlM2I2Nzc5ZjM4YzA5NDAwNjI0OTcwMDhlYjIzMzg3MDg2OGMyMWNjY2FjMjM5NTAxYjYzYjc0OWE4NTYwMmMyOGEwOTVjYWZjNzQ5YjA1MTFhNmM4NzhlZGIzYjc4MGVhMTc0ZDA3YjEyMWUzMTVhODI2ZGRhNmVjOGRjNTQzNjNlMmNkMmU2MzA1YTE5NDgyNWMwZWE5MGVmZDdhOWZkODljZDk3Yjk5YzQzMDBiZDNiZjkzNTNkODJmYmNjZWVhNzFiNGVlM2YxYWFlOTUzOWI0Y2NlOTBjYTQ3NzU5N2MxNzRlZjIwZjRiOWY0ZTYyZDA5YTU3MGQzMTM1YWFiZWU5NTUxZmE2MDk4Mzk1OGMwYjdiOGMzNzQ0NTUzZWUxNGU3ZjNjZDEwM2ExOTI1MWM5OWJmNjM4NGFiYjYwYTc2YWZjNjY1OGI4MGRmYzUxMTBhZGM0YzczMmZlMGVlMzI5MzNmYjI4NDgyOGUwMDg4ODdhZWY4MGY2ZjgxMzM0MDQ0NmMwMjE3YzEyZWUKK1NJRzogYjcwMWI4ZjlhNDM0ZTA2ZDcxOWFkMjVkY2M1NDA2MGM3OTg2NjQ3ZjQ0ZjM4ODRiY2I2ZTVlZTFkN2E0NDZjYzI2NWNlYzAyOWI1MzdkYTdmMjUyMzMyNjU1OGFjOWJhMzRmNGNjMmE5N2NjYTM0NTJlNzA1NjJlN2E4ZjU1MDQKKworVFNUOiA4MzUKK1NLOiAgMTJmZThlNWNlMjBjYWZhYTMyNzlkYTdiMzRhYTg3NzUyZWFkNjc5ZjE1NjEyOGFhZWZiNGFmYTVkYjRmMmE2ZgorUEs6ICBlNzdmNDQyMDZiYjBjNGM1OWEyODcwY2ZjMmVjYWM2MzM2MmRlZWNiZTgxMTVkZTVjYjFhZmMyZDlhM2Q0N2YxCitNU0c6IDZiODBjYzZmYmJkMzMyZjhjNjE5N2NkZjJlNmRjMTlhMjEzMGZhYTJlYzkzOGVmNTU4Yjg4NGJhNGZhNWUxMTNlNWIzZTRiMWFhZjUxYjY5NWYxM2VmZmUxM2Y3N2QzOWNhYjNjMDdkMDRkNjZkNDMwZDk5NzRiMWRhM2QzOWRmMTI3OGMwMGQ2YmNiZmQ0YmFlNzViOGMwNzY0MDRkYmJiODM0NDhmYjQ5M2RmNjcwMDBmOTdkMjQ3ZThmMjNkYzA4MWZjZTk5MmI2NWEyMWIzNWQ3YmQ3ZmE3ZGNjYzU0YTU2MGFmZDE0YjFlYzQzNmMxMDk0NmY2YWE1OWVhZTFiZTNlY2YzMTFkZWY1MWU0NmI2YjRkMWQwODBkMTc4NGIyMzM0YjgwY2ZiYTcyY2Q5MzFmNTVlY2QyOThiMDVkYzgzNmFiMTJkMGFkOGI1ZDZlOWIxZTNjZWEzZDg0MzM2OGVlZjE5ZjVjMTRjNmJiYWQ5NDE0Y2M3YTRkYjZhNzI2ZTRmY2FlZDQ0NDQwYTAxOWZlMTJhNjA1NzM0MDNjMGU2NjJkYzkwMmQxYzg3M2ZmMzBjOTMxYmE3ZTQzYTNiM2JmNzFkNWIwOTRlYTUwNDk3MTY0N2NhOTQzNTZmMGE1M2U0NDRiNGMwMDhlZTU5NzcyMDQyMjFiNDAwZGVlYzM3ZmMyNzM0NTI1NDVmOGYyMThiZTk4ODcyNWJjMzhjODVkZjIxMmVhNzNkYzBiYzdjYmJhYzkwNzk4MmZlZmFkNjgwZmJkOTc1YzIwOTNhN2ZlOGU2YjM3YzFjY2VkODdmODFkYWE1NzI5MWE1YTE4NDc2ZDExYTE4ZWM0YjVjYmNlNWQ1NWFjOWI2MjRiMDQ4NDMwZjI1NGY2NzEwNzg1MDZlNjk4OWRmN2MwOTI1NjUyNTAzOTA4NWFiN2MxMzBjMjQwMDA0YWJiYjNhZjZiNDgxY2MxYTA2MTdlNTdlMzg4ZWU0YjFmMDUyZjM0YTAwM2ZlNmJiMjAyY2I4N2QyNzQxYmQ4ZTM0NTRjYTczZDJmNjEyMDExZWNjNzRkODgzNDM1MTBhNjNjOTMxM2RkYzM2YzI1ZDNmYjAzZTE4OGY1NjBiZDAyOWM4MDE1ODVjZTU1Mjk4OGRjNTViN2Q4NTIyYTMzOTZjMDFkNWU3MTVhZTI2YzYyMmM2NGZlZDViOThlOWM1NTllNGFhNzhkMWVkM2I3Yjg5MGQ0NzdlYzhjNTBhMGZmMTA3YTNmODNiMDdiZDM1ZTljZTlhMDhiY2ZjMGYxNjhlZWM3YWEzMTFmNzFjNjZhNzFjZWI5ZDVhMjE5OWExNGJlMzY4NjVjYThkMDdlMTg2YjEzOTJiOTI5MGM1NzgwMDRkNTg0ZjE5MWM4MmE1M2Q4NTA4OTBiY2MwZDEyZGZmODQwZTA0M2RkZGMyZTY3MGM4MzYwMjA5MjRmNThjMDQ0YjIxODc2M2NhNjE5ODJiYzMzMmQyNDdiMmEwMDhhYjU3MGI2NTY1YTA2ODkyYTI2Y2ZiMDg1M2Q3OWRhMjhlZjhiOTEwYTkzMjk1NDRiNzkyYWU0NDU2YmE3NzY1MDY2YjlkMWI0YTMwMDIxMDQ0ODY2MGFlNDhiNTA0NDQxMDE3Y2RkZDFmNmYwMDkzOGIxMDcyYzhhYjgyNGFkZmU4YWUzNDkyM2M4MmVlYzc1NGJlZTFhNjU1MGFiMWQzZGEwODZlM2FlYmJmMjExNjljNDQ0NjllMDNiYmFlMGQ3MmNlODYzNDU3Nzg0Y2ZlMWRmYzI3NmYxYWZhZDllZTUzZWJhYjVhM2M2NTcyZWIxY2FlMDk5YTRhNWZlMTkzMTkyOTBlNmExYjhiMGU3NTQxZWQ3MzViM2YyMWIxZTJjNzUwOWY4N2ZkMWZlZDAwMDA3NDc5YjNjMWJiNzg0MzI0NjYzMDJkMjQ2ZDhkMDMxOTk2MzA3MjYwYTBjNDFhMGUzZWNkMWU3ZmQ4MzRkYWMxMWExM2ViMDM2YjM5YzM2OTk2NmZkZWYzOTRjMTgzZTU0ZTdiMGNiM2QwY2ViMTk4YmQwZTY2YzAwZDM4ZGI3MDNhYWNlMzBjYmJkYWIzNjlkZmQxZDllNTE0ZDA5NjhmMTAwYzlmMDdjMzE1MDg5YWRiM2FkMDJlNTljMDRiOWJlNDZlOTlmYmY1YTYyYzZiYmVjZGZmNWIzODFlNTUxMjc4MjRkZGIxOAorU0lHOiAwNGVhZjkwMDk2NmUwOTkyZDM2ZTNjMjIwYTRiZDRkODJiY2M2ZWI5OThlZDA1MWRiY2I5MTYwYmNkMzU3NDA5NzM2YmNmZjdlNjYzMGU5NmY1NTM4YWVjYTZhYjhiMGQwYmQ4MmMwY2Q3YzQ1NDk5MTdmZWJiOWNiYWRhMDgwYworCitUU1Q6IDgzNgorU0s6ICBlZTliNmMyZTBjOWIwMTQ3MmNlMzJkNTRkMTc2MmFiMDMwMzMxN2Q3NmQzYWE3OGY1ZTA4YTkwMjRjYTFlMDgzCitQSzogIDAxNmRmMGY3MTdiY2I3YWRmNjI2OTU4ZDgzYmY4YWEzMjVjNzA1MThjNjhiYzdlZmQ4NDI1M2I3NWRiMDg3ODgKK01TRzogNzcyY2MyNWMzYjY5YmIzZmY1NjU1NjY0ZWZhNDc4YWM0MTRhZGZhZWE3MGFjNGEyYTg4N2VkMzk2OGM1NGQzNGRiZjFiZTMyY2M5YTliNTQyMGE0YWQzYzlhODc3YmM4Y2NlYzk0YWQ0NzNhYTdhM2M3ZGUwOGEwZmRiNWVkMWU4OTg3MmJlNzgxNzBiZTIyMWQyNzk3NzZiYmM2ZWQ5YzVhNjcxNjg5ODBkNWVhZjg5NWUxMzQwZjVkZmFhM2RmNjIyZDY1NDRiMzk5ZDc0OTQ1ZmQxM2JiMTE3MzYyMWUwNTYxNTE0NjQwMTM3YWE3YmM5Y2I3ZGViZWZmMmM2MjY5NzdkNDQ3MjYzYjdlNTdkNDNkNjllZmIyMzBjZDI1ODY1ZTRkOTI0ODI4ZjVlMzZmOTY0ZTQwM2UzNDkzZjMwZDZkZmVhNmNhM2I3ODEwNzViNWUzYjI1YzA1YWM1MGU1NTVmMTViYTEyYjBlMDU5YmZmOTk2NDg0MTI5ZGI2ZWFmZDg4OTkzZDZmMGI3ZWNkMTVkY2UyZmM5OWY4YjhlNDM1MTYzNTJkZGI0NjFhMDRiOWZmMzQ4NjQ1MmU2YWE2YTU0YjJkMTA2MmE3NzE0MjUwY2QyYTg4ZmY2YzRjMTdiNmNjNjY1MmQ4YzVhYzI3ZDQ0NDNhZWJmM2Q1ZmJhYWVlNDUyMWVjNzZmMDQxM2RiNjQ0MjFlYzhkNjk0OTYyNjcyNWZlNTYxNjBhYjMwN2MwZTczOTA2YzQ1MTU1ZWZhYmI0NzIyMjAyMWYyMjBkMzJiZDNkYjA3MTJhYmRlMjU5OWVhNGZmNzk5NzE3ODExZGNkZjgxODJkZjY3MTZkMmEwMzhhZWUxNWQ3NzhkYTU1YWMyMGYwMWYyNTMwOWNlYWQ1YjViN2IyMjMyMmUxODI4ZWE3YzkxYWU2NjZmMmRjZDY4NDA3MzE0OGUzMWJiMjI0N2Q1ZjkzNTA2ZWE4MDg1MjI3YWRjOWFlMTk4MmU5NTBmMDA2YTlkYTE1OGI5Y2VjZmY4OTI5NzYxYzg0ZjlkOTc2ZmRjZDMxN2ZmZWQzNmNiZjZhY2RhM2U1MGM5YjczYmQyYzgwODU0MDlkMTE5YjY0Y2VkNzM0OWEyNjc0MjYyYTgzMmJlY2IwM2MyZWRjY2FjMGVjNTQxMjRlODJmODEwMTgxNzkyZGE0OWVhMTBiZDk0MWY5ODk1YTA2OTU5ZmRlMGQzYjBhZTg0YzM5ZGYwNTM5MGFiMzNjMzZjNzljYTIyZTY1OTRkN2ZjNmUzZjg2OTIyZDc4ZWI3ZjVjMjU0OTVkODIyYTNiNDEwNTFiMjRlNTdhNzZmY2ZjMTY1Y2RlNmQwOTZjYzdiN2U5ZDA1NWZlODY0ZDUyOTQyZDYyOWE4YWMyNjFiZTFkY2QzYTIxZjg5NWY0OWI2N2VlNDdlYWI3Y2YxNjQ0ZDU3MWQ1ZmYzOGMxNzlmNWM2YTU0YTM2MTJmYjM0NzUzNDEyYTFiOTViZjYyZmYzMTc5ODA0ZmZiYjk5MDUxZjJiMDgwNTYzYTRhZTBmMjdjZjk5NmVhOGJlM2JhZTBhNDMzOWRjY2RmZjZiNjY3MTU1OTI2NmVhZmY0ZWZmNjgyYjhkZWU4OWM5ZDJkNDVhY2RiZWM0YWE2Y2VjZGJkYjFkMjg0NjA5ZTY1ZWZiNzdiYjhmMWE1MWZjNGQ0NTY4YTcwNWZiOWM5N2IyMzAzYzE0NjdkZmY4YzhjNWVlMjc1NTliOTNhZDFjNWI5YzVjNmM3YzUyOWZhOGM1NWM3NWViYjU5YjJhODE4YWE5YmRhMWU5ZTc5YmM2NjAyOTc3MmY4YWVhMTFiYWRkMzIyNjU2NWQ1NGZkMDFiZGE4Y2IyNzBlNzBkYzkzMzliNDY5MDBiNTgxOGU5MzIwNzViZTZjMjhlNzNhMTkxZDAyY2JkYzc0NTRiZTEyMzg3YjBkNDdhMWFiMTQyMzJkMjM0MmE2ZjE1MThlYTk3MDk4YjgxNWExY2EzZjljNzBiMjU3MjJiMWJjZDdkYWNkYTYzNTYyMmZjOGU3Mjk1OWY1N2Y3NjdlYTU2M2RhNGMxNThlZWY3MjAwMTA5ZjYxNDE2YzJlNzA0Mzk5MjMwNjI0MzdiMWQwODJhOGM3ZjQzOTQ3MTNjMWI3YmEwNTg3Yjg0MWMxMTQ0NzVlZTNmZjA1OWRmOGNmYTEyYTMyMWQ5MDFjYjQ3ZjUKK1NJRzogNGIwMDFkOTY0MjgzNWQ3MjEzOGQ2ODAxOThlNmFmNzBiNWRlN2FmMDE1MTMxZWE3MjZmNGU1MWI1ZThiNmQ0OGMyYTZjYThlODcwOWNjODIyMmE1MDQ3YzA5YTY2ZTUxOGFjNWU4YjZlNTM1NDg5NDgyNjFmMDcwMWY2ODczMDgKKworVFNUOiA4MzcKK1NLOiAgYTNkMjM1MDVkMDdjNWY5MzdmMTM2MzlkYmQ4MThlODUxNDUyMzRlZTcwMTdlY2VlODYzNmM3YmE3NmViZWY1YgorUEs6ICBmZDdmZGIzZDAyMmJhMzZlYWRmZWQwZGFhYWU1YmZmMDQ1MDU0MDNmMTcxNDczZTRkMzYxZWU4ZDE1MGEwZWI0CitNU0c6IGJjMjk4ZWQ2OTg5MjkwNDAyODcyNWUyMWIxMTQ0NjJkODlkOGMwMDZkYzg4NGIxNzg3NTY4MzhhZjQ5NTRmZjBmMWI3OTUxNzMwN2EyNThhMGU3NjgxZTg3OWFjNDdkNzkyMDIzMGIwY2MxZDY2MTcxZWIyMTRkNzdjZDk3ZjYxN2M0MDVlNmMyMTcyZmM1ODlmMTYyNWNjNWUxYjU5MzExMDUzMWY2ZWI1M2YxZTZmNDg2ZDE5NjQ2MTI0NDc3NTBhMDQxZmU1MWIzMzJlYjNmYmM3MTE2MTZjZTM1ZjA0MDQ0MmI0MzE2M2I4MGI3NTFlMjFlYzEyNDVmMTJlNDg4M2M3OWQzYjQxMzI4MmM2OWJmYzZhNDY1ZDFlNzg5NmJhYjAzOGRjODliNGNmYzAzMmZjY2RmYzg3YjA3ZjA2MTEwZTFmNTA2YWNjYTgxNTdhMzIyNTQzYmYxZWQ4OTA2NzI3ZjI4ZDBkNjg5YmNkN2RkM2RmODU5MzUyMDRhOTA0YWIzZjdhMGQ5OWMxNmU1YTU0MmNjMmJjZGViZjViNTAyZGJhYmUzM2I5NzI0ODBlMDJlNzFhNDM4YTE5ODBhODc2NmYxMDhiZDhhZDUxMTA0MjIzOTk0ZDliZmIzYzNhNGI3YTU5MjM4Y2UyZWY3ZDcyODgzODNmZmJmMjkxZTE2MDJiMzg0YWY2MDcwMGQ3ZGFmMGU4ZmU2MGY4Y2FlZGU0M2RiMDZiM2Y0YzhjZmZmNzQ5YWVhZmE0NmZjNjFjNDliMmQ1YTQxMjA0Y2Y4NmYwNDkyNTRkODA5ZTk0OThhYTlkNGNmZGI5NGFjYjJiYWJmY2Y3ODZkZGZiMDM2OTE1MTZiMzgzOGIwZDRmMjAxY2IyNTkxZWRiYjBiMGY2NzRlMWUyODIwMzE2YjcyZTgxYjQ4Y2M1YTZiMjkzMzhiYzM2NjgxZjhmN2RjYTQzZWU2YzBiZDJlNDAyYWZiZjk2Nzc5NzUxNjQ1M2JjMDFiZTg2YmY0MjI5OWQxYjczNmEwZDk3YmJjOTIyZjVhNzhhZjJkZjQyZTZmOGMyOGU5NTNmMmNlYWRhZmZjNWU5MzA2NDA0MWU0MjVhZDY5NzVmODhjN2FhZGY4MWMzNjg2OTFhNTgxZTg4NWYyYTZiYTcyZWQ2OGI4ZmVmYmNkNmNlMzY4NjI2ZDQ0ODkyYTIwMjcwYjVmNzA5YzJlMzRiODMzNWQ0MmVlYmQ2N2EyNGRmNzNmNDU0NTVjNDE5NDQxODdiNjY5MmYwNTRiMmZjOTU5MTM3M2YxOWZjNzFhYTdmYTI3ZGY2MDA2YTFkNTQ5YmJmYWU3ZDNjM2ViMzZlNWFiMmFhYTEwYWE1NTM4ZGE3ZWYzNmM4ZmYzNTRiNjA1ODEzNDAwNGQ2NjBhNDAzNjMyMWNhYWQwMGEzMGIxYzQ5OGJhM2Q4MDhjNDQwNWVmNzk2MThmYzIyMTJhN2I4MzM5NmEzZDdjZWRjZWI4NjNjNjYzNzRkYzQ2OWFlMTgzYzdlZDc0YjNlNzBkNjM3NGEwNjJkZTAzNzliMjFjZjI1ZDNjNGM1NzYyMTE1Y2RmZTc1NTU0NWU4OWFkNDA1MmJiMDI3OWQ5MzhlOTBkZTNhYmY1MDQ0MTBjYWFkNzJiN2MyOWY1M2QwMWQ5ZGQ3ZjJlYzVlNDU5YTA0NTkyYmRkNjY0MTY2MTNlNmVkZDAwNDU2OWUwZTZjOTg4MjdiOGMxZDcwMDJhNmQxYmYzMDNlMTgyNTk1MDFkZDg5ZjZlZTk0NzY2ZDE4YWY4MTA0NjNlYjEzYjJlZmRkZjE3MjNhZjczNWE4ODcxNmUxZmNiNGI3YjQzY2I5N2UxY2M5MDNiMjQwOGVmNDUzYWRhNDE2NDc4NmYwMDg0NWZiZmExZmZjYTVjYzNlMWM0YmQ5OTQwZTdkOTlhZWY5MTkxNjZkMDU4YjUxNDUzYzljMTRmYjlmMzI1MWVjNWZlNGYxNTNjNzBhNDQ5MmRjMzQ5NjI5NjE4NmYyM2FkNDdlYmFkMTNjNjZlNjg3MjdjZTUwYmE5NDg3ZjE4MDE4OTBiNjkzZWZlYmZjMzdiYjVkOTVmOGFmNTQ4ZWM4ZDY0OTgyODllNTVmOTg4M2ZjNWJlODRjMjU2ZDJiYzU0ODQ5MzhjNzA5ODIwZDliNmI4MDU5YzBhYTQyNjdkZGU2OTA3OGU0ODdjODg2NWMwYjEzMGEwY2E4Y2EKK1NJRzogNjdhNjY3ZWUwZDYyNTRjYTBhOGYyMTI1ODJjMGNiOGI2ZWQ5N2NjOTY3ZGIwMjEyOTZhZDZhYTk5ZjBhZDNhOTQ0OTc4Y2ZkYWZmMTNmZTVmOGM2ZTg4Y2JkODMxYTU0NzNkMDc0MmUzNzM0YjNlMmRmMDBmZjMyNDBhNWRlMDIKKworVFNUOiA4MzgKK1NLOiAgNmUyNjUxMDVlZTcxNzFkMWJkNzkzZWZmZDg3ZDFlMmM3OTQ1MGQ1ZTE4OGI1N2JlM2FhMTYyZTJhNTI1MjhhZAorUEs6ICAxZjQwM2M3YTc1NTAzMWMxM2NhNjNhZjU3NjM1ZGM2ZTJjNGYyM2JkNmIxZDY3Y2E2NWRhNjhiMDk5NDNjNTU0CitNU0c6IGY4YjlkNGIwMjdlYmIxMGVlNTExODE5ZTZlNTZmYjFiYTk1ODQwMTg0MThkODI4ODVhMzhhNDQ5MDg2MDA3Yjg3ODViNTEwNWNhZjc4MmJmOWIzNmRhMDM5Y2M2MGUyMjdjN2UxNjE0ZjI5YjY0MGIxZTliMjI3NDdlZWE3YTY3MjU2MTRlODllMDc4M2ViZWJiYjdlZTU1N2VmMzZiMmI0NmNmNjQ2MWU1YmUyYWQxZDdhN2MyNzExYTQ3NWNhNGZiYzMzMDkyYmE0MjU2NjdlMzRkMDkwMDYwNTE4ZjJmZWM2MzZiMDQ5MTIzODc2YWIyMWM4YmQ5YzUwZGNjYjk4NGNhMDExYTAyZWVhMDIwNTY0ZmE4MjFmYzM2MmJmZTM5MmFhYjUwYzI3M2ZjN2I1YTA0MjE4OGUzMzE2MjFiOWQyZjc0M2U1YzhjZjNhYjFmYWZmYWZlMmEwMDA0YzhlZjdjZGY1ZTZkYmI1ZWI1NDRlNDI4OWY3MWE2ZmQxNWM2MzhjZTI5ZDI4ZWZiOWMwMzllNDc3NDI5YTM0OTdhODM4MjdlNzZjZTc3YTQ5ODE2ZDkwYjQxYThlMTUyZjM3YTA5ZTYzNDBkZmUwNjlhNGFjNmYyN2RkMmVhYzc0N2ZkMjFlMzE1MjA4OGMxYjFlY2QzMmFjNjc5OTI3NDkwNzUwNDg4YzI5MTc4NTE0N2I2M2IwYjhmZjExZDE4OWI5MDQ5YjhhMzk2YjY5MzJmODViZDZhMTVlZmY5ZjBjZTE4MDg0MTFhZjBmOWM4ZTZlOTdiODE0ZjExMGJkNGRmMTM4NmE5Nzk3ZGM1MTFmMGFhYjZhYjY1MDcxZDllYTgzNjUzMmNlYzUxYjkyY2E3ZmJkYjhkZTFjODQzNjY1OGRlMmViNjVlZGQ4NjA0NGY2YzFhYmEzMTc4NjQ3YWQ2Nzg2MTJlZTc0ZjA0NmNhM2M3ZmUyZjM5YzA5ZGQyZTA3ZGYyYjQyMjcwODVmZTkzNmU3OTRkMjJmZDVmNDBhMjVmMDg3NzE1ODBhYzgwMWQ5ODg5ZjVhNzZhZWFlMWYwY2M0YTllMWVkYmRkYTM3NTBjNzRjODUwNTI0YjMyZjQ0OTMzZmQ4ODNiNTM3MmJmYjdlNzYxZTA2OWZlN2MxYzBlN2ZiZDRhN2Y1ODQ2N2VhNjg4M2Y5ZDViN2Y2NmQzODZiMDQ5OWJiNmZiNWVhZDg5YzlhMWZkMmNjZWI5NzNlMjg3OWI1ZDAzZWFhNDUyZTE2MDIyZDU5NjE3ZGFhMDQ4NmY0ZDRjMTE3ODA3ZmRhODQ5OWRmYjdhMjg2ZmQyZjcxYThlYjVmZTY0MDY1YzQxZTRlMWUyMzYyYWI0ZTQ3Nzk2OWUzYTQwOGEyNDdlM2E1NmZjODZmMmIwMWVmOGQzY2RkYTg3MjU4MjM0YmM3ZjI1YjY2OTA3ZjM2NGIzN2I2MjQ1Mjk2YzRmZGY0OTlmMjAyMzdmNDg2NDg1MmZjNWQ4Y2Q1ZDA1NDE4YmU4YjEzODU5ZWU5YTQzZTE3ZTFmNTdhNGMzNWVhMjgyZWQ2OGViY2RhNjgyODE3NDI0NWE0OWM2Y2I2NTkwZWIxZjJkY2ZiMDA3YmZhMWMzMjA3Nzk1NmRhOWFjYmUzZWYwNzIzNzk5ZmRiODY5ZDhkZTMwNzA2YTljMDI2ODE0ZDE2YTAxZTAzM2M5MWI1OTA3MGRmZTQ0NWM1Yjg0OGE1MTY2MTJlNTEzMWZlODQ4NjkyMWUzNmI4ZTdlZjE1N2E4ODgyMjg4NmM2ODFiNWRhNzFmZWE5NGQ5NTdkYWZlYzI2ZjQxNDdhM2IyYWMzODNhNWY0N2M4NTg1ZWIxN2E4YWM2NTc5MDY0MWI0MjE4ZDc1NWY4YmVhNGQ5N2FlMmE0NWJkY2RjMjMyMzYyOTRkODUyYzk1ZDA4NDA2ZDJlOWJkMzBjMzI2NDUyNTM4YzFmNWU1MDA0ZDRhMWE4MjcyMGRhMzJlNTlkYzNhYjE4ZWEwOGEwNThmNzkxZDI0NDE4NTU2MDg2YzFlNGVkY2U4OTgyYWEyM2IxMThmYjI2NmU2MGI1NDI3ODBhNjkzM2FkZDkxMzI2NTUxMmMwN2IxMTQ5NzhkNDRhZjczYjIwMzBlYzQ3YjA2ZmQwOWRkYThjNGYxZDRlMzEzNzc1NDY4YzQ1MWY5ZWU2MTFlOWNkNGMwODQ1YzI1MDE5NDhhN2IxNGVmMWQ0YjVjZgorU0lHOiBiNWE4M2ExMTdhNjAzNDVhNjdlNGE2NjVmMzdkZTcyMmE2ZWMwMzkxMzgyOTM4OTk1OWYzNzZlZTYyNjQ3N2U2NTRhYzhkNzIwZmM3MjdkNGJiOGZlMTU0NGY1ZDBiMGI4NTA1MTQyOTBiMjQyNzNjNGNkNGI3M2FjYTRhNTMwMAorCitUU1Q6IDgzOQorU0s6ICBjNDM3MGQyYWFmMzVhY2QxNThmYzBkMTYyMmEzOTljOTlmNDFiOWRhNGU5NzBiMzU0ZTViYTA1Y2JlODQ0Y2E4CitQSzogIDM1NDVkN2Q0Yzk1YzNkYjZhNTQ1MzA1MzdhZmFmYTRkODZkZGVjZjljYzdlNjZjMzE5YmE5ZjdkZDdkMDdlZTcKK01TRzogNjE5ZjU3ZGUyYjFkYmFlZTIwOWE4MjVkOGNhOTdmODRlZTQ5ZWIxMmEwYjEzZGNkZDJiM2E0ZWU0NWUwMTc2ZDQ3NGNmMDk0NjBjODMxYThhZTFkM2YzOWJlZWJkMDg4MDhiM2VkMTc2MTIxM2JhOTUzNDIxODYwY2MwN2UyZGIzMTJlNjgwZGYwM2U2MGE2ODcwMjY0YWJjYThmZDUxMzAxZTFjMTU2MjAyM2Q4MDJjY2Q1YzdkMTk2ZGIzOWZiYjgzMDRiMGU1OWUzMzMxNjQxOTJlY2MzMzMzODdlZWY2OWM3YTc4YTVkMTEyNTg4NjJkNmMyODFiMTljMGJkMzM2Y2QzZWRiMmY5ZmFhZDQwMjFhYzJmMjA1YzE2ODE0YjM4NTQ4NDMzZmY5ZWRkZmQ2MTEzMzc3OTc2OWRjNjlhZmFjNjU4YWZjMWQxYjQxNmQzOTBhZDViNDVhMWFkNWNjNGIwMGI0YjI3OGZiZTRiNTlkNTJlNjFhNmE1ZmQwMDI0MWM2Y2JjMzgyZDJkNjIxYTNkZWQwMDIwMTliMzMwNTYwZTM2MWZhYWIyOGY0MWQxYWY5YzljMDAyMGYyYmFmOTllOGQ4ZWU1OGUzMTIyMjAyMTQ3YzBhZGM1N2Q2NzBjNWIzODBhZjU5NGNjN2VkNTdiODdlYzY2NzRhYjYzZjNhOTg0OTc1M2I5NDYyYWFiNWRlODhjOTQ4YThiMTA5YWY0ZDQ5NTQ5MjdhYWM1OGJlZTk1M2JlMGQ4ZDdkNzFhYTExZDExZjFhODdiMTQ3N2I5MTcwYmQ3MzVjZmMyNDQ5ZjA1MWI4MmJjNTliMGJlZTc2YTE3MmU4ZDMyNjcwZjUxZGRkZGI4MDRhZDExMGE1NjVlMzg0Y2RiNzZmYWQwNGNmZjY3ODkzMDkxZTQxZTY5Y2ZkZjcwZWE5MjZjMjYzNjlhNWI2MTkzYjE5YWIwYTYyNTU4ZGE1NWZmYWZlYjg3ODk3NTc3MTA2NDRhYTE5ZjQ3NGJlNGFkYTlkYzE4NDliMDdkNWUxN2I4NWY5MjFlMTAxNmE1NGFhNjA5NTc3NzI1M2E3MzQyNmZjNzg2NGI5OTU1ZjA0OTA3MDIzZGIyMDdmODVkZDIxYTY1MTA2Y2YwZDYyMjM4NTg3MGMzNGMyZGE5YTExZTQ3MjYzOTUxMjFlNGE2NzYxZmI1MjIyMjlkOWU1Y2M5ZGFiMzVhZWI4N2QwZDc5NjkzYzAwNmZkZTFjZmFmMTE2MjA4YmJhOTYyMDU5Y2ZjMGQyZDYzNzBhYWM3NzQ4MzYyZWU2YTBhM2NhN2JmMTMzZWJjZmEyMGYxYzRlZDgzMDdmODAwY2NhN2U2YzRiZWFhM2ZiMmFiMDg2MTI1MzY0Mjg1YzQ0ZWQxYTczN2E2N2NiZjNiNzYzYzlmOGIxNDI3ZTg5ZGZhOTZkMjkwZTlkNDg0MmZlNjMxNmFmZWY4MzRjZDhjZDFmZGMxZjEyNGNhM2ZlMjYyNjZkYTYyZTI3NWMwYmY3ZmNjOGU1ZjliYmE2YzBkMzhlMjNmYWZhYjFlMDQ5NDgxNzk0YzE0ZjRhOGM1M2JlMWM5NmY3NjljOWIxM2VhY2EzOWEwZTQ5MzY2ZDJjOWZmZThmMjA2MzYwYTlkNTAzZGVjNTk4NjIxMTEyZTM3NzY3MTNlN2ZjMDY0OTQzM2UyNTdlNTAzYTU0NjA1OWE5ODlkYTg5MTU3ZDc2NDc2MDA1ZmQ5MGU0YjA3YWFmMGRiMGJjMGJjMGI2N2RiOGRjYmFkZmYzOTM3NGUxYWZhZTU1MTYzNGUwZTMyODMxYWQwZTVmYTdkNTIxNmZhN2M2NDRmNzNlMWU4ZTA3MjM4Mzk0YTQxNmMxNjlhYTlkNTMwM2Y0NjlhNWQ0MDc0MzA4NzIxZmZkZGVmZjY1NTllNWFkZjBjMjc3M2IzZjUyNjRlN2FhYThjMmRiODg4ZTI4ZTgxNWM3MTA2OWMzYjRjZTZjMjkwMzRjMGFiM2I1YzE5YTgwYTlkOGMyZTg3NDgxMzUzMWM0MjI3NTJhZDYyYjNjNWExYTNkNmM1YTVkYjU4NzI3MDY5M2FhNzVkNWYxNzJlZWRkZjRlYjgzOWJkNzkzYWZmYjFjNzk2YTFkZjBlNDQyZGRmOTliNzgwYWE0MWVlYTBmZTZmODY1YmI1MzljYTUzYWE0NWRiOWE4NTZjYjc1ZDAxNTFkMzVlZGVhODBmMjk0NmQKK1NJRzogOWZlYmFiNWFlMTYxZDY5MmE2YTM5NDUwMGEyODkwZDIxYzdmMGVlMjZmNDY0MGFhYmE0ZmU2NmI5MGI4OWVkY2I4MGVhNGNkY2FiYjRkMmMzYTVjNDE1NGU4ZmYyMGQwZTIzN2ZlZmQwMGM3YmE5NzgyZTE3NDhmNjQ4OGFjMDEKKworVFNUOiA4NDAKK1NLOiAgYmQzZGUxYTFkMTY0YmQ2ZTliZTBhNmQxMDdmNzAzYTZkZDkxNGM4NjY3Y2QzNDFkMTM5ZjE5NTc4ZDkzM2IxNgorUEs6ICA5YjAyNDk2NGJkZmE4NTJlYjJkNDE0NGYzNWI3Y2RjMjY3ODExNDNjMmJkN2Y2NjAyMzNmOGI4YWEzNjA3MWVlCitNU0c6IDE3NjlmY2RiZjUxMjQ3ZWQ0YzgzYTAwYmJiZjAyZjQ0MjhkYTZmY2VkZGQwMTYxYTAyZmNjZDE1MDA5NzA2NjVlMWM3NjMwYWQyMmUzZDk3NDljNzkyZTcxYTI2MGNmZmY2MDUzMjU2ZTAyZjViNDdiYmExNGI3NjFhZTUzY2E3MjE5ZWQyODAxZDJkNzg4ZTI2NDE5ZjM2YzgxZWY5MmMyMzAzNjgzNzM1YzhhMTc1NmFkYWI2YTQ4NzkyMzE1M2U0MzU2MDNjOTZiMjM5NTUzZWRmZGViMDkzMjk4ZjdhZTdkYzkwZjE2YTdlNTY2NGI5ZTRjMDJiYTczMWEyM2NmMjIzNGUyNTBhYzk3NDI2MzNhOTMyYTk0OGJiODNkYzNkNzk0ZDA1OWZlZGY0ZWM4NjE4Yzc0MzNjNWQ4ZmU1ZTYyY2YwN2I1NzY4YzRkOWIyNjFjNzE1MzY4MDRmZTJlN2NhNzA5ODg3NjUyMWQ1NzY3NzM2MTQyNGU0N2YxYjk1OTIzN2Y5MDcxMDQyMWY1YmM0ZjEwOWY3ZDQ4OWM3NTVlOTRlZWZkZmIzYzg1YjkwZWMwMTMxODFhMjNiYjk1MzVmZWVhNDk0MWQwYTA2YTU0MGJkNmI1ODhlNTViN2YzNTc1NzE0OWNhM2U2NDA5NjVlMWEwZmY3ZjNjODI1OTI1OTk1N2ZmNWRhYjlmYjg3MzJlYWU3MTliNjI0YTQ0OTI4NzgxNzliNWE4M2FiZTUxY2FmMDIwODNkNzM3Y2ViNGZjZjA0MmYyZTYwYmEwMjk3YWM3MmI4N2ZlM2UxNGJhNWZiYzU0YjQ4MDkxMDczODk2ODIzYmZhMjg5Y2U4ZTE2ODczYjQ4ODEyYzMyYmZlYTVmZjZiYjIyMWQxZWE1NDYzZDMyNWJiZTMxMWU3ZmQxZTc4M2RlNjUwYjc5NTJlYWU0NjFkNjNiYzc0NzA1MjJhZjViNzc4OWY4ZmMyZWIxOTJkMmNmNzc2YzVjMjRiNDRlMjljZGIwY2NjYjFkOTAzNjE0MzhlNDk1MGZmMzRkYmNiM2NiMGU4MWNjNDVmOGQwZmY1NzA5NDlmNzgwODRlMTA2MGZmNTU5NGFkNTE2ZjUwZjFjYjBhNzY1ZTFjMGUwMzhkNTk0M2I5MzZlNGE4YjQ5MzM1NGU3OWFiYzkxN2JiOTI3MTI2NmVlYmE3N2E5M2E2NTdmOWFkODdiMjkxYWM3ZWEzODZmNWQ0ZmNiYzU4MmU3MmQ1YzIzZDkyYmE5NDRiMDA2NGMyMGUzZTJkY2Y1MDRiY2M3YzY5NjZjNjNmMjA4MDg0MzYwMGJhMzEzZWMyN2NiYTk1ZTdlZjMxODE2OGM5MDY3ZGNlODZjMWVmMGQ1ZDllYjdhNjE1ODQ4OWRmMzJlZDU4YjY5MzEwMzA4MThmMDA3MDVhMGRjNTVkM2RiZjgwMDZhODU0NjY0MWIxODY1ZDkxOWJjMjQyMjAyY2IzYWUzMDBiZjg2NTNlM2IzNzg5NGMzZGMwZTQ3N2I5ZDdjNDFiYWY4ZDM4ODdjMmViNTliMWU0ZDUwYmJiNmYxNzkyYTFjOTM2N2M2NWNkYjQ1MGMyZGZhMjE0NWU2MTFhOTdhZDgxY2ZmMWZkODNjNmNmNzIzMDk0N2VhZmY0YzIxZGMxYmFmYjcxZWM0MWU1YmM3MmIzNzQ1ZWMzZTM4YmY1OTMwYzEyNmQwNjBmMGM1MGE4OTVmMDA5YWExOGU4N2YyMTc0ZjU4YWI1Mzc5YTcyMWZkODNhYWQ1NTE3ZmQ5OWRmZjE0NmVkZWVhNjE1MjEyMzVlMmYxYTE2ZWU1ODMwM2UwOTFiZThkNTc5MDk0YzFkOGEyMGJjNzRhNTUwZDc3YzAwZDA4NzU3MTUxN2E2M2NkNDEyNjkzM2E0ZjA5YTA3MGJmOGVhNGZmYjg0NmE5NzgwZTk3MzQwNDNiYWM0YzBmZjQ3YjFhZmNjZjUyOTNhYzE0YmM3M2ViZjY3MTI5NjU3ZTRiOGE4YjMzZGRhYzdiMGY0ZDcxOWQyZGM2NWRmNmVhMGEzZjI0Y2Y0NGM4MzM4ZWQ2MDFhMzkzOWNhMzU4ZmM0YmUxM2U4ZWRlMDI3NTM5NzEyY2EyM2UzZmZiYTcwNmU4ZmRkNjJhMDc0ZWUwYWQ3NDIwZjc4MDYwY2M5NmZiMmFiZjMwZTllYWEyNDFjMGY4N2ViYmUzZWM3MzUxNzU5NmY3YzNjNWE4MGMKK1NJRzogMTNjYzE1OGZkMDYxNzkyZmNlZDE1Njg3OTU5ODI1MWRkMDFkNTc1YjQwMGZlM2UzOWE3MDA4NjNhYWU4ZGIxZjkxOTdmYTUwMWMwY2Y5OTNlNDRkNmFjNTUxODBiODY5ODM4ZThhZTI0YjIxNGZhMzVlMjQ0YjdhNmNmZjZkMGQKKworVFNUOiA4NDEKK1NLOiAgZjZhZTUxNmE1MTI5NmZjNTIzY2VhNWYwMDhjZmJkMDllNzNmNzhiNmZkZDNiNjk0MjYxMjgwNDFhNTYwNGNmOQorUEs6ICAzNzZjODJiYTdiODdhYTc3NDE4NzI3ZGIzM2QzMjZhZTc1OGJmN2ExMzVjMTA0NjBjZDhiZjhmZWI4M2MyYjEwCitNU0c6IDgzNDJmMjVhYzRiMTdlYmFkNmY3OWI5YTAzMzE3NWM3ZjI4YWYwOWU2NThlOGNiOThjMjk0ZjE1YzNjODM0MjYyOWNiMmEzMjQ3ZGZjODc1YjgyZjViMzgwYzVkMTE0MjZhMmVlYjYyNDUwYmQ4ODU2NTAxMDdjNjgzNjJhM2I3MmNlODIzZjJkMTU5NDJiN2RkYTMwMWQyZmI2MzhmMzAyYWE5NTcwYjQ3OTExZGFkZDNiZGRiZmVkNTU0YzFjODBiZDcxODA3OGI4YmQyYzljMzE0YTUxNjZmMjY1ZTgyNjZlZTJkYjM1NzU2MWE1NTg1YzQxNGE3ODQwYmZhZTYwOWQ3Y2RkZGUxZmFkZTg1NTYwZjIzZDYzOGVmM2Q1MmU1MWY1Y2YzMTNhMDcyYzVlYTBmODE3ZjcyODFlMmNiYTVjNWM4ZDI2YzkyODU5MmI4MWYwZmY4Y2QxOGRiNWEyYzQxZDg4MGQ3NDQ3Mzg2M2M3YmJkMDA1NmZhNGQ0YWZhYmQxN2EzYjg5ZDk3ZDNmZTVkYzA2YjBmNjEyYTFkNjY0MjM5MjNiYThkZmJiOGVjODI0NjYyNGQ4Mzc4NGViYTRmNTczNmJhMzg1ZTQ0MjI5NmM4Y2IwZjFiNjhlMDMzNDJiMmM2YzEwMzM0NmY2ZGQ3NDBlMjZjM2QxM2NhZWY4MDFkMWIyNjIxZDg5ZjA2OTM5MWEwNzhkNDNhZTZmZjEyZWVjYTY2YmMzMjYzN2I0NWYwYWM2MjdjMmQ3YmJmOGE0OWQ5NDY4MTc1ZTI2ODg1ZTAyODIxZDNhM2JhYTJjM2UzYTZiYjk2YjU3NTI2ZTIyNGNmM2Q4NTlmNjY5NTczY2JkNWM4NzM5Mzc0NjE1NmYzZDFjN2E4MDMwOGRjMWYyNDA1YmYwZDQwYmUxY2E3M2I3NjdkZWRmNDAzMTMzN2MwODFiZmEzYWU2ZTU0ZjYwMjNmNDJmMGNiZDg3NzYyZGI1NTkxM2M3MDcyMDYwMzQwMTBkZjJhYTg3NTNkMDMwZjAzYzI2N2U3MWE5ZGQyYzZjMTlkZTNlMTg1MWFiZmFjYmJkNWRkNWJmODk2ZmFiOGU0MTUzMTdiNDlmMWU0MDk2ZTNkYTk5YTViNWQwYTNjNDJkYWY5ZGU5NDg0N2MxZTUzYzg4MThhNWI4NDMzMjNmNTAxZTNhN2ZhNjhkZjg5YTVmNDFmMmM2MmMzOGQxN2YyNTBiMDJhNjdmYWU0N2RhZjA2M2Y1NTg5NDIzNzdlZjhhODkwNTJmMWEyMTVkNzY4Zjc5MTNhN2VjMTRlOThiODFlNGIyY2NmMjZiYWNhZDZmMzk2NjRhZmMwZTkxYTNjYWQ2OTFkYjJiZjU2YTdhYjY2NzdiNDk1OTZkYjg4N2M5N2RlZjQzNTA4YTdhMmVjMmFiNzU1ZWMzNjhlMmU1M2QxZTE2YjYwZmZmMDljM2I1MjI2M2YwZjdjMWVhOWNjMzUzNzMxOTdlOTVjMTFlNmQyMmZhOWQ4Mjk5YzQyMzczNmY1ODE0ZjFlNzk4ZDIyNzUxODYwMGRmNmE3OTAzNThkZWFlMzhkNTYzOWUxOTgzZmUwMTg0MzZlYTU4YmE4NDY3NTQ4YzkyOWVmYmIxNmRmZWE0MTAyMjUzYTM1MGZiODRkOTgzMWM0YzJjYmNiNzZlMThkN2YzZTk1MzY0MWFkYTQxNDIxMzkzMDkxZTYzZGZlNjZkZTI0Yzk5MjMyYzdkNmEyODM3YTQ4OTgzY2Y1YjE2MzMxY2UwMDA1MGQxYzcxMzk1OGZmY2U1ZjJlOTM0OGM1MmY1MzEyMDU3OWE3YzlhMTYwMDhkMTM0ODM4ZTU5NjEyOWM3MDJmY2QyMTE0OGJkZjkxNzRkNDhlMmRhMGE4YTY2MzU5ZWRlZTAxYzUwMDllZjY3NDJmZWM0MWMxYWNlY2QwM2VmZTFjY2M5YjEzMGQ2ZTVhYzkyNTc2YTg1Y2NiN2NmYzdkMGU0MjMzMTA2MTcyOTMxYTA4Njk5NzkwYmM0MWFjZmJiNzMxYWRiYjI2ZDU2YjM5YWFhNWIzMzNiYzFhMTBlMmM3MDY0Y2E4NjExOWQ4YzcxNzE0OGY5MjQ0MWFmMjRjZDJhYThmNTdjODZiYTM4YTU5YTEwMGI5Mjc2ZGYzODI3ZWM3ZmI0ZDNmYWY1OGJlMzFjNmVjYWZkNjljZjFjNjQxMGE0OWNkNzA4MWZmNmU5ZmMzOTdjMmQyMAorU0lHOiAwZmU0ZGQ3ZTFmNjA4ZWU4MmI3ZmU4NjNkMWIwM2E4MTg0M2NlMjBjNzYyY2Q4YmIyNGVmZDQ2YmEwMjVmZmYzMzMxZDg3NTc1MmNhNzIyMGM1M2RkM2M3MWYyYmMxZTJjNjRhMmY5YzU4ODY1YTJhMjQ0ODA5ZjQxMzRlNTMwNworCitUU1Q6IDg0MgorU0s6ICA4M2Y3ODk5MDBmMDQwZGM2MmY0ZDE4Nzg0Y2I2NGI2M2M4OGU4ZDE4MDAxNjk2YmJlYjQ3MDdjNDY5ZDExYTViCitQSzogIGVkZmMyYmFiN2U3OWY0MDAzN2ZlNGQ5MDQxZGU0OGRhOWFlZThmOTc4MDk4ZDdiMGFlMTc5MjkwMjVlNDI3M2QKK01TRzogNmMxMTJhMjBkMzA2NTdhYjVmOGM1YzA0NDc4ZDZjNDJkMWM2YmRlZjM4Y2Q0ZmUwMDZhYzJhNTdlMjkwZmYyOTI4Nzg5NmVlYThjMzBhMDEzOWMxOGZjOGM5NzU2NDU2M2U4NmM4ZDM0MDU2YTY3MTliZmU0NzlkOWU4N2U4MWIxOTQ1MjMzMWJmYTE1NDgwNjg4MmU1MDM5YTIwYzllOTU0YjFmYzdjMDE1ZGNmNTgxNWJkN2NmN2I2MzU3ZGY5MjgwYjliZDQzZjg5ZmZjOTE5NDUzMjNiNWFjYjJhZTAwMjU0ZDQxNjI4NjhkMWM4M2VjNmUwZmNiZTdhOGFiOTI1NDE5MjE0OWM2YmM5ZTVmZTM1MDY5NDE2NWQ2NjM4MzMxZWIyNGUzYjEzOTBjNjk4YzQ4MzgzNzhjMDFiMmM2MWEzZWJlMmMwNjBiOThiYTZlZTAyYjUxOWI0ZWFjMWUwYmNjMDliMjMyNGNjZjViMWE3ZmU4ZmQwYjE1NDVhOTQyNzgzMmFiYjI1NzQ0ZWViMzYzMjZiZTY0ZWZlZDNhN2IwN2Q2MzBhMjFjMzA4MWI1NTI2MWMzNTMyODdjNjZjNTc2NjNhOTlkYjQ2NmE1ZGVlMjI3NDZiODFjNzUwZWY4NWJlNTExNDNlMjIxZWNkZjExNGZlZjFiMzA4MmZmNTRmZDA0NGJjODg0YmZiM2NjNWM1MzM1OTk3MDA5ODY3Y2U5NDkxYTgwZmU2OTY4MjVmOTk0MjZkZWZhYjZhNDliYWRjZGU0MDNmNThlODMxNzk2NjIxMDc0N2I1Njc3NTRkZTUzMDc2YjNlY2JmNjUzNDZjYjgzOTA1ODMyZTE2ZDAxYjUwYjkzZDM3ZWI5YmZlMjAxNzJhMzE2MzBkMjVmMzIxN2Q4N2Q5MzQ2NWZkOGFjNTU0Y2JiYjM5ZDk4MmVhZDcyMTkzOTEyMzRjODg5ZjBiOTJhMmUwNDEzZDg2NmNhYzA4N2Q2MjhjZTMxYzYxYzYzMjNlY2I4ZTY4OTU1NWFmMTBkZTJiNjU2ZTZhZWEyY2RlOTMyZTI0MWY2ZDFmOGE5ZTMzMTZjZjEzZjEzNWFjZWY4M2EwYzBjZjIyZjk1Y2E4MThlNjFmOTI3Njg3NzRjNjMwZTA5MjViZTk5ZGJkMzJiNDk5YzBmZTdkODRhNDJlMzkzMjg3ZjZmNWNlM2QwYjI3MWYxNzAwNDVhNmQ0OGVhYjMxNmZlMTdiMTg1OGIxZmZlZWU5MDg4OGYzYTM3YTI0ODBkZmQwNGE0YTg2MjlmODY4YjVjMGE4MGVlMWYwMzcxOWYzYTQ3ZDQwOTViZWYxMGUwMjM0ZmMzMDBlMmFmNDgyMjg1ZDc4OTM3OTY4MzE5ZGE5NGJlYjZjNDBlMDc4NTc3YzAyNGYzYTVjZGEwMDg0ZTJmODU1YTkzOTZhYWE5ZWU5YmZhZjJjYzc3MWZlNjhjNDBiNjI5ZThkY2YxMTVlZjAzZTc1N2EyYWM5ZWVmMDczZjFiZGY5YzVhNDQxMDAzMTU1OGE2ZDM4MmI1ZjE2MDI0YjE1MWIxYzAxZWU3ODE3NDEzYTNjNGRlOWRkNjQ3ODc4NWI4MTEwMWRmNTUyMjQzMDA1ODc4MDIwN2U3OTBmNjEyZDc4ZTU3MDVjZWVkNDZiMGVjMDc1ZTdjMWRjMDczYjE3YjJiNDNkNzI1MzU5MjdiZmQyNzFlOTJlM2M5MzYzOGU0MGE5NjAxZGMyYzFhYjc2ZDkxYTQxMDNkZjY1N2Q5MTFjODI5ZWU4YTVmNzQ3Zjc2NDJmNWE5MTVhNWY0MGY2MzBiNDMwMzljN2Q0YmQyYWQyYjMyMTI5ZDk0ZTViMmYwM2FkNGEzZDQ1NTc3ZWI4MWYzNjljOWUzZTJhNGY2YThlNDFhY2Y4MjgzYmU1ODQyNWVhOTkzYjhlOThlZWE2MzMwNTU2NjQ4NjE4ZGFkOThmYTI1NTYyMGQ4MzZkM2M3ZjI5YjkwNzg5NTg0OTI4NjE2N2M3MTgxZTJjYWY1NWMyYzE4NGE5YTkxMWY4ZTQxY2IwNDJlMmNkNDhiMDU0NGVhNzlmZTJlZjM4MWViYzViMTVlMzlhOWI1YzZkOTk4ZmFlYWFhNzc3M2NmZWMwODRjMGJmYWVkMWJjYWI5NjNhNGVmM2Q5NGRiYjNkZmU3MjRjMDQwY2U0ZDFlMmVlN2ZjMmRhNGIyNTEyN2NlM2E1ZGY2OTNmY2Y1YTZlZDEKK1NJRzogZWE2NTgyY2MyM2UwNDYwOTE3Zjc4MmQ5NjRlM2JiNmRjZGUwYWVlYWM0MmNjMTQ5MTlkMzZjZTc4YWEwYWZkOTgwNzJmNTRjNzk1ZmJmZDdhNDFkOTlkNzA2MDZjMjhhNWRjZjE5YmUzOGEwY2UyZDA5YmI4Zjg0NGMzMWJmMDAKKworVFNUOiA4NDMKK1NLOiAgNDNiZmYzY2RkNTMwN2VkN2QyNWNmOTZmZGJiYTY0YWIxODExYzhiYjkzNGUyMTg3ZWE3ZmZjMDE4ZDg1ZTBmMgorUEs6ICAwMGYxYjVkM2NhYzZlNTZjYTVmODk0ZDRjZGJmOWJlYmQ5NjhkMjRkNWVmZmE1MDU4YjBlMjBiYjA4OThmNmYxCitNU0c6IDY0NmY4YjM0MTgyZDVlNjAyYjUxY2E3MzI5MzQ3YzBlMTk4Y2I3NDdlNGRhMGE2YjgwZjNmNmY5ZjMzNmY2NzA4ZDg1Y2I0MjlhYjJkNmJlZDM1ZDUwMTMxMjljZDEwMDE0MmNkZGNlZTg2MzUxNzkwMjFiM2UyNDkyMmI4MWFlZjEzYzEzNzAyODY5MzlkNjNkNmI2YTQxOTVlZGExZDgxMmNhNTE4MjA0NzY4Zjg3MzQ4YzY4ODk1NTJjNjNkMTM3MmNkZTZhNWU5ZGFhN2Y4NDQ1ZWM4ZDYxMzBhM2Y1YWVmMGVkZWFjZTAxMGI2YzdmMGI5ZDI0MTYyYThkMDQ0NTRiODFkNDhlYTkwOTdiZDhkZjA5MzQ1OTcxOWNjYjU0YWExMGY1MWMyNDZhYTk5YzU4MGJlYWY5YzljNWJjNjBmYWYwYWU1Y2VjN2Y1MTM3ZjZjNWMxNDRkZjQ1ZDEyZWU5OTVhZGNjZjI1YTlkYjgxYjg1NThiZGZiNjU4MzAxODZlN2I5ZDRlZWQ5ZjZiNGQ3MzJiMWI1ODIyZDAzZWIwMTdjMDcyNGY0OGY4N2JhYWFlMTA0NWQ2ZmRiMTI1YzkxMzQwNjRmYWYxOGRiZWQ1OGQ4ZmJhY2VhY2Q0ZjA5N2RmOWIzNDJlNWM0YTViYzg1YjI5NTk3ZDRiNjQwZjE1NTFjNWI2MjRhYjIxYjQ4ZTk0YTkwMzAwNDliZTFmMDVhYTg1MWQwODI3ZWFmODcwMGRmZTE0N2ZkY2RlZWRiYzk4YzRmMTU3NzRmMDEyMGZiNTk3MGEyZjhiMjE3OTQzNDBiNjI4Mzc5YTgwMmI5ZjdjMDY4YjBkZjYzMTkzZTUxMGZjN2IyYWY5N2VlMzhkZTQ3OTI5Nzg1NTM1NTI4ZDM1MGQ4ODYyMDYxMGNmZGI1NWQyNDllMzhmYjczYzgyODcxMTM5MTljZTMzMjY3ZDdkYjkyNGU0OTE5YTQ0ZTZlMjlhOTBkYmUzYjdiMGQzOTIxMTYzZmViNWFjMTA1NjI0ZWQ4NTJiZWNlMzUzOGU5OTE5MzMwMGM4OTMzNDU2OTkzNTBhOGY5OWU4YzZhNDEwOTVmYzlmYzA4ZGEwN2Y3NTcxMWY3ZGYwMzQ0MDZkZTE0ZWRkOGUyMmE2MzNhODZlNGE1YTVjOTc1YWM1ZDM0ODkxY2NjZmM4NTQzNzcxZmZhMDgwZTBiNDVkNjVhYjgzMGEzNjFhYzRjNDI2Mjk0ZDM2ODVlYThjMjYwMzljNzFjOTBmYzNmYjUxMmJlOWZjOTQ4MDdkNzZkYmRhZjhmZmFhNGZiZjk4NDlkNjhlOGE1N2QzMGM0YTBiOTczNWMyM2YwOGVmMmUyODQ0NTg0NjdlMTVkNjY1MzYyY2I2NDZmZGU2OTM3ZWNiYTUzMDkxMjY0NjM4MzU3YTcyMjQyNWJjNjJkMWUzMGVjNWYwZGQ4ZmVhMjZiMmVhNGE4NDkwMDM1ZGU0M2YyNzQ4NDZmYjBjZjAyMDllYzc0MzdmM2MzZDBhNTYwMzczZDAzNGU1ZmQ3OWUyNWI2NDI0ZDliMmMxNzYxNjMyYjM1YTEyMTMyNTIxODI3MzQ1YzU1ZTRlNzE0MmRkNmZlOTRkNjIwZmU1MTVjMTUzZTgzOTViNWQxMzBjNzQ0MTM5YjZhOTJlZmQzN2YyMmJhMTNmZTRjMDk1MzczNTUwZTJlNGZjYmEwMzI1YjNlYTNiOWZlMjVjYzdkZDkyY2JmNDJlMTVmNDU1NGI3N2FjMjdhNGEzNDYzODJmZjYxMDA0NTE1MDhkNjAyY2Y2NDNmNjBiNmNhNDI4NjM1NmYyMWEzMTEwZDRlMmM4YTg5NjJhNzgwZmNmZjQzOWIzYWE4MDQ5OWRmMjcwZmMzZTZjYWQ4ODkzMzQ4ODcyZjBmNzAyZjkzOTAwMDBjN2Y2ZTA2MjdkMmJiYjdiN2NlZjVjNGRhMjVkYWRmZWE4MDMyZTUwMjMyOTdhNzBhNjU4ZTlhZTczYmRkYzNiMjI3YTFjMTE3NDExMzNmMDEyZjBmNDhmZTI2NDQ2ZmE2N2U2NDcyMGZjOGRjOTdmMzBkMGRkMDI2ZjZkYzIxNjRlYWQ4NTc4MjRhMGE3YWViMjBmMTE1ZDUwZDFiNjVkZDVkODJlMDlhYmU4MzRlOGNhODg5NTdlMzk5ODQ4MjQ5NTVhMWExM2UzYjk0YTAwMTU3MTg2ZGNkYzI4OWUzNGI2NzhjOTFjYjJhMWEKK1NJRzogYTZiNTZiNzY4NmRmMWRjNWY0ZWQ1NDRhNGQ5N2U2NzAzNjE5NWEzMmIyMmVjZDVkMzFlYTE3MzBlNmVkOGY4MTBkMjU4YjQ0YzA4ZWE0NWYwMzJiOTM3NDQxYjcyY2QwZGMzNzU1NmZkNzg3NGU5ZmU2NGYxNTc2NWM1MjEwMDMKKworVFNUOiA4NDQKK1NLOiAgMDYzYjkwMjVlMzIxZTk3MmQ2NTNhMDYyYmUzNGY5OTM2NWFmZmRjYzk4ZWM5ZmY0M2VmNDIyYmUwZjgwNDQ2MAorUEs6ICAxMGQwMWE2MzAxMmFjMDk5NTZiYTllZDYxZGYzNWJiN2FmZTM2NThiYjMwMDQ4NTJlNDcxNzRiZDA3ZGQ0ZGU3CitNU0c6IGE3ZWVkMjk2NTI4NDRlZTAwNDliYWZiMmNmNjM0MDI5NzEwMjBkN2U2NWMxMGI5MWFjNTcyNmVlYTg2ZjQwZGJjNTNjM2YwYWJlZGViYWY2Y2M0NDliNGZlYTQ4YzAxNWZlNGQ5MDdiM2U1NTA1Y2ZmNTBhMTIxODE5YTJlNGE4YTI5NmQ1NzUxMDE1YmJjZDdlZjZmYjdjMjcyN2JiMDAwYmUxMzQyYTdkMTRiY2E5NzkwNGVkZmU4YjE4ZGRiNjM5MzM0MTgzMjdhNWFmODE3ZTk1YmFkNzRlYjc5MDIwMzYxNWQwODJlNzE0OTNlYWQ0N2NjYzA5MDFhMmNhOWY1MDEzM2M0NGVmODUwOGQ1MWZiNzNjNjE2ZjAxNDc1MzIyNDU4MjJkZDEwMmIzMzdhMWIyYWFlMmVmYzcyZGNhN2E5NDE5ZDU5OGE2NDc1MjMzZGMxYTRlZTBlYzZkMDVkYTEyYTJiMjg3Y2I3N2ZmYWZkZGUyZDBhY2MyODE5OTkzM2U2NjIxZWVjMTZhYjQyNDUxNzBjZjAyZGE4MGQ0OTIyNjMxYTIzMjcyOTE1MTY1YWQ4ODcyMjc1MDAzNWQyYTA5NzdiYzc5MWQxNGZiM2Q4Y2IwMmJjNzdmN2M3MWJlNTI0MjYyOWE0YzlhNTg4ZGZkZGU5NTc4NDk0ZDhiYWE0ZTY4ZjUxOTRiODAwMmM4ZTM3OGEwZTgzM2I3YzFhOTY5ODFjNGZiMDVlNDU3ZmY0ODI2MGI3MjQ5M2NiY2I4MmFlMTE2NzNkMTRjZWU4NTI4OGY2MzcwYmQ0YmNhOTI1MWE3ZTIxNGMzZWI3OWU3YmI2ZmNlYmIxNmM5ZTA1NmYyOWI2MjcyNzQzZWZhNmZlOGJmZDI1NTk3Y2U4Njg5OGFiMzA1OWViMDIzMWM3M2I1MzA1OTAzZmQxMzE5YmRmNDllNTk5ZDhiYmNkNzRhOGI5NzY3MzA4YjYxNTYzY2NiYWNkMzhmYzUwYzgzYWI0NGNhNzU5ZGM5YjY1YjJhNGI1NDdjNTA5N2YyMjBjMWM4OGIyYjBhNDhmNjVmOTFmZTc4YjE1MDEyNzhlMWUzMDRkZTU4YjRjODJhNWMzOTk5ODEwOThhMTc4NGViOTA0MjUwMTg1OWYyYTkzZjMxN2U0MTc3MmZkNTJmOTcyZTUxYjA3ZWQ5NGQzMTRlMWQxYWY0ZWQ4MjkwOWEwYmVmNjcxZjU0YjU1ZGI3YjcwZGExZjcxOGM4ZTY0OGFlZGQ2ZGE2NGIwNTc3MDUyNmYxMmJjNDNmNjhiOTU1NDhkYWM1MDgwOWE2ODdkYjk3ZDczZjA2ZjQ3ZWQwODgzMWI2MGEyOGU5ODI5MjA2MzIwNThmMGU2YzkwYzAxODdmZjQ0NTY0ZjgxZWZkOGZkOTNlMzI3YmM2ZDgwYjQ5MGUwODhiOWExMDAzNmM4MGRjZGFkNDlkMmJlMDc0ZmJiYTMxZTA2ZjcxODBlNWFkMWM4ODIzZDYwOTY2YTljZTE1NTAzY2U2MGRkNDBlOTFlZWYyMzU5ZDgzZDcwZDk4NDAxZGRlN2JlM2M2YjA3ZTU3ZDRlNDdkMDQyMTc2MzNkOGUyNjNjYTM0OGY4MWZiZTlhNGE2MmY0NWQ3N2M4NDNiNmIxYWQyODQ2NmQ5ZGFmYjFiOTEwYjM0OGVkODdjNjg2Y2FiMjkyZDQ4MGMxOTFkMTg3YjQwNGE5YjFkMTMyYmE0ZTI5M2QzYWRhOTkxNzJhY2MxMjFmZTY2Yjg0NWI5OGIxNjBjNTgyM2Y2MDFjNzc1OGZiMjZjYWVlODU3MDE1OTViMmQ1MmNhYTJmNTY4OGFhMmJmMmY2YzRiYjYzN2Y4ZTAwZjQ5YWI2YzI2YmM2YWQ4OWUxMzY3ZmQyOGU0OTE3ZDI1MDg5M2E3YjMyZDM5NjYwYmRlOGRiNDlmMDg2ZmI3MzllNTYwMTJjMzZiZWEwYjI2Y2Y2ZDkzNTc5NDBiMDBkNWE0NTI4ZjkwNTlhYWYwODY2OWU1ZjQ2Yzk5NWU2MGY4ODdiNWM0YWI4OGFjNzQ0MmVkMDFhMTRjNmE0MjAwNmJhZjFmMzQzZmVmZTNlNGFjYTg0M2EzMjRlMTc2YjJmZTdlYzc4ODNkMWNiZDA2OGJjMmZjOTYyZmZhNjAyNDRmNjU0Yzc3YWM1NjUwODE3ZGMwODQ0NjU1NDVhOTIzMGE3NDgyNmIwYzUwZWI4NTI1MmE4ODZmZjJiMWFmZWFmOAorU0lHOiA4NWM4MWQ2YjBkODU3OGZhNThlMTNhYjM5MTAwMTUyOGI0NmExZDYzYTAzMjdjN2E0YTA0MDg3ZmM2Njg3NThhYTY1YzAxZDVhMTUwZjkzNTY3NGVmMzA3NTA3ZTZmNGM5MWUxZmMzNTAwYjI2ZjY0OWJlZWE4N2QyNzU2MzcwNAorCitUU1Q6IDg0NQorU0s6ICA4ODNjYzEzODE3NTdiMGZlMDQ1NWI3N2JjOWNkMGRkNDY0ZDJiNGJmMGM3YTNjMGMyZGM3NzVmYjc4YWEzNzMyCitQSzogIDgzYThiNjY5Y2NkMDEyNDVjZTNiODE4ZGNiMWI1ODhmODY1MzU4NTBlNmM3MTBjNzkyMTdmZTQzOTgyNGYzZmEKK01TRzogZmZlYzI5M2QxMmVhNjM2Y2E0YzRhMGE1ZTJkYjE1MzQyNjM5YzQ3NjY3NGQyZWJkYWI0YWVmZDQwNDZiNWRkYjU2YWViMjEwYzExOWFmZGZiOGE4OTEyOGEzNGY2ZDc3ZjI2MWVkZWEwNzcyYTJmOGRiMTQwYTI2NDBmZDhlY2FkYjBiNDc5MjE2OWI2YjI4MTBhZWUyYzVjZDgzNTI4OGJmZjQ5M2JjZWJlZWVhMjhhN2EyNDhjMzYxMTY1NDBmYTcxNzM2ZDY2YjBhNDc1YjVmYTkyYzBkNDYwMDJmY2E3YTFlNjlkMWI1OWU4MWEzYTZkNGYzMzk3NjlkYWViMjBiNWY5ZDc1YzRjMjhmNjkyMTMyZDI4ZDNjNTY0YzA5ZmUzZGNjYTAzNTljM2M2M2VjMzc3YTMzZjllZTg3NGQ4YTc4OWQ3N2M5NmFjMDVmZGYzYWIzOGIyYzgyNzRhOTAyZWY4YmI3ZjQ2N2ZjN2UwNzNjNzdiMWRiNWZjOGVmOTY2YzEyMGM0ZGFlM2ZiN2Y1Yjc0YWJiOTkwMTY2YzgxMmE1MjVkMTIzZjc2ZWQ1MTIxMjUwODBhMTUzNGYzZDhiZGNjYzU0MWZjOTc1OTAyODc1NDYwOTZmYzg4MGJmY2ZkZDAwZTY1YzBlYmY0YTA5ZmQ2NDc2Y2UxYjdjOGZhYWE1YTFjYzI3ODY3MTlhMzBkODI1NTgxMTE4NDc1MmE4OGIwOGFjOWYwZmYxZDYyNjJmMjU4Njk0MGFmZTFmZTQ1ZTBiNTYzNDQ4YTU1ZjMwMzBlNGMzOWMxZjNmODZhNzMzNjcwMzgwZWFiMDg4ZTM5M2RlMDlkMWY1MDhkMmZiY2FmYzY0OWFlYWU2YjhjMzBlMzI5ZWMzZmQyODI5YmU2ZGIwYWI4ZTYzN2VhMTA5NWJkYzNkZjNhY2MyM2QzY2Y3MDVhOTU0MmMxOWU1OTA5MmVjNDEzYTRlMmJkNWRlZDI4Y2QzNGRkYjNkMzI5NDlhYTQ4N2YxYzMzN2Q2OTc5Y2Y1MTI2MjJkYmZiN2RhMWNiYjFjN2U1YWJlZWE3MDA5ZTI5NDNmZmJhMjI1MmUxZDg2ZWNhOWQ2ZDVjMjQ2Y2QyZTEzNGEzZTVkYWQzN2VmZWY3MWNlMzk3YWRhZmJkOWU3MmIzZjlhODZmZjBmNWQ4MTJjNDYyMjViZWJkMDcwM2JjNWNjZTljNjQ1ODIwMDhmN2U1NThjNDBhM2IzNTIyMDk2ZDFhYTJiNjFiYzkwY2Q4OGM2Mjg1ZDk0MjA4N2Q4YTQ2NjVhMGU2NGQzNTcyZjc0Njg5YjRmMjRlZjQwMGQ3NDFiNTcxNDA2MTM0NzE0NDRkZWNjNjU0YWYwZmZiMmVkZmRmOWZkZDA3NTA5ODE5MGIzNGNkZTI4ZGQxNjY4NzJjNjA4NjU2N2E2ODc2MWNlZjI1ZGE0MGJkNGMzZDM0ZmRkZDcyZWU1NjViMGI5Mzc2NzhlZTg0MzQ5ZDExNjBmNWYwNzA1Zjg5NWQwZjE0MWNlOGY1MWExZTRmZDJkYzQ3MDRiNTI3YTQwMjVhOTM5Y2IyYmI3ODg1N2ViMThkNzg4NzJlZGM5ZWU3MGU2MGIyYTQyNzAwYTE5OGY0ZmZmNmMzMTkyNTE2OGJlMDc3ZGMyM2MzMjJhYmJjYTk3MzYxZmVjYWEzZmNiMTk2ZTY1NmMxMjhmMzk4MmZlMTFlNTUxYTRhMDg4NWRhNjBkMzk3ZDBlNDBkMGQ4OTcyNjJmMWI0YjY3MmY3OGEyZDJhZGZjZGQ2ZTE1MjVjMjZlNzE5NWZiOWFjNjA2YmIxYmE0YTk4OTA4MDNiNGJkODQzNDZhZThkOGM3MTk2YzkwYWVjY2IyOTZhNGMzZWI0ZWZhY2JmY2I2MmUzODNiOGE0OTRhYzcyMzU2MmQwZDhjMzc5MTg3YTkyZTNiZGE2YjE1Njk0NzZhZWQyMWFlZDdhMDU2YjRhNTgyNjc0NDAxN2NjMDA2MGI0ZDU1ZmE4NzcyYjViMWMxNWY1NzQ4YWQ3Mjk4MDA1YWVjYmNiZDkwYTNlNWM2MTU5YTg2NzRhYmJiYTM3OTE0NDE1MDAyYjVhNmVmNWRmM2M2NDk0MjZlYTEyNzVhMDFkODBhZGY0OTBhYzU0NjA2MmQ5Mzk5OWE2ZGNjYWNiOTZhMDkwNGFkMzNkOTA1NzZkYzZhMjFiNjcyZThmZmIwNjYxM2ZiM2YxNGU2Y2JkZGU4OGMyNDM3YzkKK1NJRzogYzdjZmQ1YzlmZTkzMGQxNWExMWViYjM0ZTM0MzFmNDg5ZGEwMTBlYjE5M2VkYmZhNmYyM2Q1ZDE0ZGQ4ZmVhYmQ3ODgwZDJkNWE1NjAwZDM4NTQ2Y2UzYmM2NGE4NjI5MWExY2UzMWYyNzJmZjAyMGRmOGNiNmEwZmQ0ZDNhMGQKKworVFNUOiA4NDYKK1NLOiAgNWU0MGE3YWFiYmIwODMwYTlhYjBmZDc5NjkwZWUwNDMzOTAxYzZjYjA2NzZhYmU0YmJhMDZmNWJiZTU4ZmFjMgorUEs6ICA0ZDRmMjhmZTA5YzRhYWJmY2EwMWVmNmVlN2ZkNjM3MmZiNjJkYjYxYWFlZTgyN2M0M2ZkMWE2ZDFjMjU5MDMyCitNU0c6IGZkNGVjOGIzNGZjNmI3NDM4MTNmNTllMmZkMWZlZmE4NzBmNWE5NzBlMmViNzUxNmVmN2MzMDZmNGI4MjNmZmVlOTJkNjAxZjc2NWQ3OWNhMTQ2YWJhOGJjNmU3OTg0NDU1OTkzNWNkZGMyNDI2NDljMDU5ZWNmMmRiODRmZGMyMTkzNjY2ODhhODhmYzI1Yjg1MWMzNjYxZTUxOTg4YzJiZjczYmI4ZTNkYzE2ZDIyNDE1YWIxYTdiMzU1NzlkYWFjNzMyNWUzMTkxNTdkN2RhNWZlZTg3YzkzYTRkZmNiYWZjOTJmYmE3ZTE3Y2M2OGUzOTAzNzMzYzZjODAxNTcyZDkwNzMyMGIyZmViNTE3MTBlODU2YTFmNzZmODVhN2VlMWExMWU2MmQyZTQ1YTM1MjkzOGRkOGNmYzJiY2NiOTAyZGVhNDQ0ZmFhYWU2ZDg0YzVmMzkxZTEwYWVmNzY5MjhhNDUxNTNkYjZjZDI1YTJiZjM1M2Q4MGQ5N2JmNGIzODA4NjA1ZTg5ODAwZDI5ODQwZWE2MDk3OGQ5ZWM5YjJjMzAyNzQ5ODg4ZjlkZWJjODRkZDFlMmE3OWFhMGI2YmEwMmEwMzkxOTMwODFiZGJmZjA1OTlhMTRkOTE4YzBjOGRlYWM0ZjYwYjZlOTk0NzRhYjUzMDExNzQxMDM0ZmUyYTIwY2ZmNGUwZjAyMzQyNGM4ZTU3OTc3NjhhZDUzZGY2ZDAxYTI0MDExZmE5MGYwYmIxZDUwNjljZGIzNmI0NTBmNDMzMTEwYzJjNTZmMzRhMWRlNDI2MDkxNGNkNDY5NmIxNGEwOWMwMjY4YjJhZTJlOThlNmI0ZTk5MmI5MTI1Zjg3OGYxYWMwOTgyMzE3MDYyODM4OGYwZjZlMjU2MjU5Y2E3ODZiYmUxNDQ4ODRjYjI5OGNjMDQzZDAyZjVjM2RjNjg0Zjc4N2ZhZjE2YzEwZmRkODQzN2E4YzMwOTc0NjNiZGI5OWI3ODAzMGY5NDc0ZmM1Yzk5NTFkYzc1MjY0OTA1ODZmZTFjMmRiMDU0MTEzNDE0NjAyMzlkNWU4YmM1MzA2NTkwMmI5NWZiYTI4MmMyNzY2NWU4NjlhMTlkYWU4NDYwNmQxNzI2Njc1MTU1ZDM4MDM5YjllNTVkYjRkNWNlZWM5NWNkNmQ4N2Y4NWU5OWRkZTU0YTA0NzYxZTZlYWRhNjYxOWRhODk1YjY1NGZlMzg0NWU4YTYwZjNhM2IzMjQ4M2Q2ZDI3OTc4YWY1NDUwMmIyMjBlNDc4ZGI3OGNmZjc3YTljOTdmYjc5ZmI1YWNmNTYyODlmMzgxYWNiMTBkZTY0YzNmMjM4NDJiMTJiZjVmMWIyODNiZDI1ZDQ4ZDA5MTI4ZmI1NWRkYWUyNTViZWI3YzY2YTc0Y2Y2ZjA2OTVhNGY4MjhjYjI5ZTRhZmRiYjNiNDJhMjM1ZDRmZGI2NmI5NjNhYzhmNjhlODJiMDBhMWM0NTAwODYzMjk2MjQ3MTc4Y2ZkZWY4MDNiYjdiMTE0ZjBjMDMyNzZmNjcxNjY5YTA4N2Q5MjI4YTM3YWU3Yjk5YjA2MTU0OWMxY2Y4ZWMxNzI0NmVhMWVlMDNkYmM4OGJmNDI2NDE2ZDU4NjU3MmZmMTBhMzE0NTYwNmYyNzg0ZTQzNTdiZTRlZGVlYzZjM2E3YmYxMWJiNWIwZTkwY2Y1MGVkYWY4OTFlNTFkMjYzNTdiZmM4NTNjZTIzYjI5OTE1NWM4MmMxMDMxZGZhNjQwNzRkNzJhMDlkMjk3MjBlYWQ2ZWJiYmY3NWQ1NzM4ZTMyY2RhNmI2NDY2YThkZWY2YjUwYTFlZDliODY1YTlhODhhMDgwMThhY2I1MDFhNGRlOWRiNTRkMDUyMmNlOWNlYzdhMDZiZDlhNWY4NmIwYjQ2YzA3YmYzZTdmNWE0MjZmZjZiNGJiZTFlMDAzMTNhNWFjMjcxOWE5NTllZDQ0ZWUwYTQ0YmQ5N2RhNmRiMmNiOTcxYmQ2ODMzNDkwODk0OWVkODUwZmJmNzNkMGUwMjA0OWRhMTgxY2NlOWMyZDljYTFiNjI0YzhkODdjZjkwNGViODIxZGM3OTU5Mjk1ZGE1Nzc3OTIwNjYwYjQzY2NjMjVjZDM4OWYxNTdmNjdmYTAzOTBmZWFjOTdhNzUyYzFhYzIwNGMyMWRmNTZiYjBmNGZjMDE2NDFiNDgwYWYyYjg5YjVkMTZkNGEwYmNiMGE1MGI4MmIwZTA0ODQKK1NJRzogNTk3NjcyYWI4ZDNhNjBkZTU0NTZmY2M5YzM4MjUzZjVmMzdiODBlNzRhMDA3YzlmNmRiOTA5ZDI3ZDBlYWQxNjI3ODkyNDQ5OTRmMzViODBkNjFiZTE5OWM0MTdjN2VhOTAxYjk4Y2M2M2ZlM2M1MGZjM2M2MzM4NDkwZmEyMDYKKworVFNUOiA4NDcKK1NLOiAgM2EzNDEzNmE5NzM0ODBkOTcwMDZkYzI3OTM1OGU2NjA2MjkzZDhjYmMxYTQ0ZWU1NTIzM2FmMmI1MjY0YjkwYworUEs6ICBlNWVmZmQ5MjFiZThlZWM1MzA3NTJmY2NjNTc2ZWYwZDliY2RlNGIzMmNjNjQ5ZDNmNzk1NDcxNzU2Mjg2MGNjCitNU0c6IDk4MWM4ZTEwOTBlMzk2OTUxYjA3MmVmODQ5NzA2MjAyMDg5N2JmN2RkN2FkNTA1YjRkNmRjMTFiM2UxZGJjYjBkYTI0OTk4NGExNDBlMTY0ZmMyZTAyYjMxZGEzOTg0NjU1NGFhODkwNWJjOGIzZGY4YTc2YmY2MGViNWZmY2YyMmM5N2I2NzEyMjdkMjQ5MDcxZGE4ZmY2YmJhNzViMmY3NjY4Y2VjMTlhODllNjQ3NWExMjQ2M2RhYmYzNjhiM2NhMjQ0NWJiMzAzNWNjMDBmYWU4NWI3MDcyZmJjZjU5NTQwMTc1NWI4MDUxZTYwOTcwNjVhZTQyOWYxOGVlYjEzZmZhNmRkZTU5ZGY2ZjNjMjA2YmZkOWNlMWY4YTgwMGM4NTkwYTQwMjFkMTYwZjY2ZDY3NDBhMzY5YWU4MzU2MTc1MzhiNTg5MDIzMWYxM2M1NjY3YmFmNTEwYTYwNmJkYWE4NGI4ZDEwZWU2MDE1ZTEyYTRjMWVjMGJkMDQyMWEyOTRjNTFjZjYzYjVkMWYwNThlMTE1M2RjNDI1ZDEwY2VlOGIxYjA4NGQ2YzI5MzQ3ZTk2ZjBmMzFiODM5NjA3ZDA3OGI3OWE5MGNhM2QxZjA2MzgwN2E0NjNiN2MzMmY0NWE1MzQ0OThkNzFkNDdlZGMzYjE3YTRkZmYyN2ZlZGNmZmFiMzAxZjM0ZjFhNjRjMDI3OGE1MzU4OTM0OWEyMzNhZjMwYjFlYzFhZTQxMGY3YjE2MzBjNzE0NWNhNDJjOTY2M2Y1MTJlOGE1NzgyNjdkYzk1ZTgzMjg5YzE3MDMyZTA5NzgyZTJmZThlMTZlZmI4N2YwM2NhMDNiMTE5NTYxNGY4OTk2MWNhMzkzOWQzYmRmNzM3MjIxYTIyZDdhMThlYzMwZmMxMjZkMGNhNjYzZTg4ZDYwNjBkMDRjNmE0NGU1NjE2ZTU1NmUwN2Q2ZDRhODQ3ZjE3MTFjZjQzNzE3ODEwYzcwYWE0YmU3MzAyNzhiM2JkNjU1NWM5NTRkYzZlZGIwOWRiMDhmMGUyMTE4MDM1OTYyODBmM2M3ODY4ZDIzNDJjYzIzMDhlYWFlNGRhMTkxMzUxNDY2NGIxZGI5NjJlOTljOGE4Y2ZmZTU3OTMxZjVkZmNkZGJjMWNiYjM2Y2UxYzg0MmUyZGRkZWFkZmQ3ZTdkMGE1MDQ4Y2RjYjk2MWIxNGYzNWY0MzVlNzNhNjgzYzhjZTI1YzgxNjgxMjU2NmZkZjgxN2UwZDMzNmFlMGJkMjQ3MzI4NTEyYjJhODU2NzYzMmJmMjA1NTNkOWJkNmZlMTU3ZjIyMGZmYjBiNDZlYmFlODlhNzA0NTk3MjhhNTdlZWQxNzk2MjU2ZjFiZDUwYjZkNTQ3ZWEzZTI1ZmE1OTEzZDM4OWEyMjU4M2U5MTVlYjQ5ZGUzNWE5N2I1YWNjNTIxZGIwZDAwNWMyOTU3NWUxNjYxMWE3NTVmMjFhM2E1YTgyYTIwYWE5MDBhNzA3Y2UzNjgyNTQ5MmMzY2ExNTM5NWYxNzAwYjRhZmFiOTRkYWE3YTAyZjE0NTNiMWY5YTZiZDM2ZWZiMjA0ZDkyOGVlMWY0ZGNjODYwZjNhODU5YmFkYzAwNmZiMzA1ZmExMjNkNGM3OWIyM2EyMGUzMjI5NWQwNDBhN2Y4ZjZjYWNhMjVkODNmNzFjNjJlM2FmNzgzNmVmNzZiOTNhODNkM2MzYjQ5M2FmMTQxNzUzZGExOWU0Y2RjYmE1NjYxNzI3MTAzNGI0ZjRmMzk0YzdjNmI3ZDc5NjY2ZjNhZmI2OTIyNDRmMDYxYzY5YTg4ODFkMWI1MmI4ODQ5ZmI1MzQ5OTBhYzIzOTE5MDk0NzFlYmJiNzI4ZTI5Y2QyMGY0MjIzNTRjNDMwOTcxN2ViZmYzZWZkMTgzMzM3MDgwNmQ1YmZiNTNjYTJkYTMxNmRhY2I1MGFiN2ZiNzM5NjczMjM1YTFkYzUzYWE4ODkzMDcyZDViOTFjOWY2ZGI4M2ZjNGVhNDFkMWVlZjQ5YWMyOGFmYzFjZWQ4ZjM2MTg5MGFiOWY3NzlkMTkzMDgyODMxY2I4YzQyZmIyNzkyYmVlM2IyNjI5NmI2Mjk1ZWI3OGE4ZDg1MzExNzY2MTYyNGUxMWY3ZjU3YWZkNjA4NWE3YjkxMjM2NzlmZGFjYTFjZjJhNzhkMzgwYmM0YzM2MGFhN2MzY2JmZGUwYzAwOTFmZTUzZTIyMTljMDcwZjJmMDJmMTQ4MworU0lHOiA0MjVmMjcyMjEyODM1NzU1YWRjYzA1MjJjNmY2ZTA1ZjY4MDA4YTNiZTliYTU5NzRlNDIwYzRjNWNiNTZlNmM1NWRlYzBkZTM0N2IxNmNhZWY4YmQzM2I3MWI0NGM4MzU3ZDA1YjYzMjFkN2JmNDkzZDI1ODYxZGI0ODdiZDYwMworCitUU1Q6IDg0OAorU0s6ICBjZjMzZTc5NzRkOGYwYmY4OTlhYzViODM0YzdjZjk2NDc5Y2UxY2ZkNDUzYWYwN2Y5NzA1MjdmMzZhYTg1YzFmCitQSzogIDU3OGY2MDMzOGIxZjA0MWE5N2QzMTlmZWNmYTMwY2ZhZWQzNjkzMDNjYzAwYjNlYzhjNWM5OTA0MTE1OGUyMGMKK01TRzogZTgxMzE0NGJkMTE2ZjZhYzM2Mzg5MjE3YjUxNzFhOTAyZjA2YjdkZDdiMTQ0ZGY0ZjkwOTE1NTNjN2M3ODM1NzUzYTI5NmNiYjBkN2ZhYjk5Y2VmNzdiNjFmMzRhMDRjOGFmMDRlN2Q1ZDFmOTYxMzAyZGU4OWUyMDA1ZjI5OWY1YTRhYTE3OTI0NjE3ZDAwNjY5MzkzNzc0NTUzOWMzMDQ4ZWUzNmI4YzIzYWZlYzBhZjlmZWFhMDA2NmM4YWY4ZTBhN2YwOTA5MzQ5ODIxMGY2ZDhkY2MwYWFhZGE1NjY4Nzg2OTEwZmY3YzViMzQ4ZDRjY2Q2ZWVlZmZhM2FjZDE4MTZkOTAxMWE0YzQwMjVmNmMyZmQyYzAyMGExMDU5MzYyNzUyMGQ0ZGQ5OWUwN2M2MmQyZGJlYmU4NDEzOWUxYzdkODY3YzA5MzU3NGZhNjAxZTRlZTMwN2FjOTI2ZTVkMzZiNjJkN2VkODRhMjYxNTg4YjdlMjg4M2M3OTI2NjEyYjRjYzY3ZTJiYjcyNTQ0YTEwZDZiNDkyOWM4OGVmNmM0N2MyNjI1ZDJmNjgxNmJkNzNjM2JhZTg5ZDJlMGM4NjE3MWFjNGJkMDgwYWU1NTVkNjI3NDBkMWQyYTc2MWNlZDg2ZGZjMzI4ZWNjMjdlZTNkYjZkNDA0MTA4ZWY0ZTBiNjQ5MDYyNTNiNGMwYTc3MWFkZWZlZGM4YTJjNWI1M2M0MjVhNzBjZDZmNjM5NTZmN2EwYTYxOWZkZmJmZDAwYWEwNzg0MThlYjQ2NTJmOGJjNmYzYzI1M2JlZWM5ODM4Yjc3ZjljYmUyZWYyYjgwNTVjNTc3MzUzOWUzNTZiZDgxOTI2MDZlYzEwMWUzZjYwNThiMWRkMDhhNjhmZGJjNTQ5ZGZlNmI3NzI1ZGMyNTQ5ZThlM2Y5MGRjNWJlM2NjZmIwYTM4YmFmOTM3N2NiM2Y2NTAxZDJlMTVjY2IzNTU2YTg5NWNjYjIzZjBiNmRmOWZlNTkzMTFjZmY1NTM3NGMzZmIzYTMyOTgxY2EyNmFiNDI2ZjM2NjNkMDRlMzE2N2U1M2E1MzdiNzU4OWE5ZmI3MzY3OTA5MGEyMDU1MzJjMTMyOTA2NjM0MzM0YTdlODc0OTc5M2Y4YzU5M2YzZmQ2Mjc4Y2UwMDUwMzgzNDg3ZjNiMjQ1MDY3YWY5NDg4MWFhMWFlOTY4ZDBjYWViYTVmYTVjN2JlNWY0ZTRiNzI1NzUxODY5NWQ4OWJjY2RlYzUwN2I5NjdiNGZkNjRiNjg5M2IzZWU3ODAzYzFkMzZlYThhMDJmYzQyNmY5YWZjOGU5ZjI0MzIxNTI3ZWM5ODQ0YmMzYzU0YTBmNzY2N2UwMzQzMDBiYmI0ZmIwMjBmNmQ1YmI5NTRlN2I1YTNhNzA2YTQ5MzlkYjMzYzE1NDg5MjY0MzQ3NmEyOTFkNDdkYzFlNmY3MmNlOTFkMTM2ZjExZGIyNmI5YzliYTczNmU0MGRmMGExNWMxYTg5MTQ5OTk2YjI1MWRkOTg4YjM5MDA0ZTZlZjQxYmRjMDYxZGI1ODBiN2I3NGRlMmE2NTE4MTBiZDg5MTc1M2I5NzM4NmQ3ZjhjYmRiYjZlYzM4NmZhMmMzNDJmNWVmMjBlNmUzYThiYjRkNTE0OWE3ZDRkZTEyMjRkZmYxZDE3MmM4NzU3MGY3NzZkNWVmNDU5NTliZTA5MzhhZDc5ZjVkMzM5NWNiMjcyMTYyNzEyMjg4N2JkN2E4OTgzYjY0Nzc5N2JkNDFkODgyNjQxYzgxNDMxY2U4ZDliMzA2N2FkZWM0Y2RlOTI2YzUxMzEzZjBjZjg0YzUyOTI1NjJkZDQ5MDg2NDJkZDI0NTI4ODQ4NGM1NTY4YTc4N2QwY2VkMzZhMzUyZjAzMmRhNGY3ZTRkZTA2YjExNDczZjY1MGVlYzY1ZGRhOTk2MzlhZjJkNDJkODRlZTIzMGY0ZjgzNjIzZDljOWFhYTNiMTZiZGExMGRkYWFkMjVhZjVjMWMxMGY4MWM4YzUxYzgxMWEzYWEzZTNkYjU4YTcwMjVlNDM4MGUyODVkYTQ3NGE2MWJhNTkxNzNmZjA0MmE0NmE3OWFiMTg0YjA3MDEwODQxNmY5ZDYxNThjZjk2ZDBlNmRiNDQ3NjE0YTBkOTA4OWViYjZhZWU0ZWYxMDdiZTQ1OTNkNzFlNzlmNjc5ODY2OGE3NDBhZTRiYWM1YWM3NTk0ZWNiZDVkYzgyZTdkMGY5Y2IKK1NJRzogOTdhNWI2ZDI2OGE1YjQxNzVmYjA2ZjFmMzdkMGE2MzM1MTkyOTZlZGMzMDAxMWM5NTRkOGYwYjliYmUyNjQxODAwMzk2YzRiMzVkNGIwZDdkMmExZDE3Y2JiZWJkYzU1YTgwOTQ2MmQ2Y2MxOWE2ZmFkYmUxYmQxYmFlODhhMDEKKworVFNUOiA4NDkKK1NLOiAgNTFiMWFkMGZmYzIxNDk3YTMzZGJkYjg1ZWEyYmMxY2UzZDBjMmQ5NWQ5NDYxYTM5MDk3M2ZlZTM3N2ZjNzVmNAorUEs6ICBiYWQwNDEyNTc1ZDM4MDEzMDFlZGVlNmJjMGYyNzZlNzg3MzU3YjQxMjJmNTJkZTk4MTg4NTg1MTg4NDI0OWNiCitNU0c6IDc4ODJlODZlZjM0MDJmNmRiYzY1Y2NlODMxNWIzOTc2NWZhYTRiMWZjODc2ZmFkNWY4MjIwY2IyMmE3ZGYyZTM1ODBlYWIzYTdlOGZhN2ZiYjZiNTk0ODJjYTBlMzY0YTEzMTM5NmRmNzkyYTMyNDFhMDYwZTQ0MTQzYjY3Njc0OTNjNmJmNzVmMTg3YTk2NDNhYTExZTExZWJhN2IwYTgwZjBhNjhiOWYxYjc5Zjc1YjY2Y2M1OWQ5ZGE3Nzk1NWZkN2U4Nzk5Zjk5ZDZlYjA4ZjkwZDMxOGY0ZWZjYmZlNzExNTliMTBhODNhYTVmZDY5YmI3NTMzNmY1ZGYyOTZlYTA2MGE0MjZjOTU0NWRmOTQwYmMxNDU0ZWZjMWY5ZGM5NjVmMWYyMmQ5NDczMDNmYjhlYzEyNDA3ZmZmNmIxZGJlNDdlMzQyMWMzMTc2NGZkOTBjODNhYzcxMWQxOTkyNmUyMjlhMDY0YzYxZmUzNjc2YWYzMDBhMTcxNmZhYmU0ZTM4NDIyNjRhZGIzMmUwZDljOWY1ZDRhNjVkMGQ3YjVjMzc3MGQ3MzdlZTEzY2JlZDIxZDdhMWRhMzZhYWY3ZWMwZjM2ZmNjNDc2ZjY1OTY4MWU1MTYwYTVhMWY0OWU3NTliOWQwZmNkNGZkYjg1NGVjY2Q5OTE3MmE0N2QyYzRlZmJlMGIzNzU3NjMxZGYxYmFlMTc1ZjBmYTc0ZGQwNDhiYjZhNWZlZDg0MzAyODQzNDlkYTNkNjdkZjJhNmY3ZTgyNjliYzc5ZmIyYzVkNWVkNjA4NGU5MDc2ZjQ1NWFiNjM4OTE5MDQ2MzY5YTQ0NmQ1N2ZjYWRhNzAxMWNjNzcxYmY2ZDg3NGE4ZTVkMjNjNjg3NzQ3ZGU0MWRkMDRiZmZjNzE3ZDYxMjgxODM4NDZlYjU5NGIzY2IxYzFhOGFhMDRmMGQ3ZWJhNTNhZjM5Y2IxZDRlNmZlY2YzMTEzYmQ4NDIyNDE2ZjRjNDQwMzdhZWVlOWUwZmRjNTE3YzQ4NzMxZmQwNGVlOWM5OWY1ZGJjYTNkNTc0NTA5ZDdiYWYzMjg4ZjJjMjMwYTAyZDE3MDNiZGIxNjExY2RlMmE3NjZkYWMxOTNkZTE2NzQ0M2QyMDA5MGRjMzRkMjkyNzdhODZiMWU5OThiMjQ1NjQ1MTE3ZTUxMTFmMTJmMTQ2MDZjNTU0NDZkZDkxMmQzNDc1YzE5ODc2ZTE5YWM1MzZkMzE3ODc2YzRiMGEyZTBmOTg2MTYxMjlhNTY4MzczMmE0MjMxN2M1ZTgwOWRjYTk1NmIyYWJiNDg0YWRhODEwYTE1YzgxY2M4NTYyYjU1NWRhOTQ1OGY5YjQ0MzM4NDkwMjMwYzc0MDRmM2Q0ODYxMWY4NDEyN2U3M2UyNzdkODhjNjIyMTJkMmEzYTM1MWZjNjc2NjViMThkNzcyMTYyMzA2MzJjYmM3ODEyODhlMTVjZWJmM2VjMzNhNzIwNWViMjJiOWFiZTRjZGJjN2RkYmFhYTUzNjQwODc1ZWI3NjNmNTIyYzM2Y2ZmZjJlYjIzZWU1ODZkNzc1Mjg2MjU5ZmE5NGE0NGZhN2VjMDE1MDk2YTJhNDQ2YjY3MzJiODAwMjQyNjdmZTNkNWQzOWQxYzQ4NTA5YjNlY2FhMmUyNGU1NGRlNGQ2MWMwOTdiNzBmNzUzYjVhZjlhNmRiNmY5NzVkMjVmNGY4M2QwNmY4NzllMTdlZjdjNTA5YTU0MTQ0NGJhM2ViNjg2NzgzODA5MGUyMmRhZmRiYjBlYjNiMDU2NWJlMTU3OWNlZWNkZWQyMGY1NDQyNTZjN2M0ZWRlM2I2Mjg0M2M2NWIwNDY2YmU2YjdlMjczMDViOTYzY2E5MTRlM2I3ZDIxNzM2MTE4ZWRiM2Q2NThkOWQ3NmY1MDlkYjNiOWNhMmVhZTI4OTY0YTRiM2IzYzM4NGE4MWE0ODkwZWU5NmZiZTkzNGE2ZjJhZWM4ZWViNmNmZTU5YWM5ZDNiYmMxNjQ2YmEzMmExMTQyZmVlNTlmZWQ2ZmI3YmJjMDQ5OGNjMjdkZWFkNDEzYjdiNDM1MWVjMjA2MzQzYzBhYjg5ZmNmODcyNDNiMWFiNDUwZTU4ZmYxMWExMTQwYTM4M2YxOTZhYTM5NzZjZTE3Y2YzNDUzMGYwNDlhMWRlOTBlMzE3NTNjZDg1ZTdmMWZkNWNmMjA0MjZjOTM3OWZlYjhjMzFiNGJmZWMzNWVhNWE3ODk1M2Q3NWM1Y2YKK1NJRzogY2ZiNjViNmZmMDM3N2NlZjUxMWZkOTdiOTBjM2VjYjgwODMzZjE0MmE3Y2Y1MDIyY2VkMzBiM2ZiNzg2MjA4NmQwMTMzOWI4ODY2YTIzOGNiMDcwMjc2ZTE5NDRiNWZlMzJjYzQwOTk0N2NiOTFkZWIxNDMyYzI5MWI2MGZiMGQKKworVFNUOiA4NTAKK1NLOiAgZmEyZjQ2MWNlOGM3MTI2MjE4YzQ3YzkxNTY5ZTg3OTk3OTdjODMzNjhmYzg0MmI2ZTFjMjJmZDUyYWVjNzBiZgorUEs6ICA2Yjg5YjIzZjFlMTFhNzVhNTNmOTkyZjZjYTU3NzUwMDhjNmU5ZTdlNDljMGQ4NTEwYjBlODM2OWI3YTIwYmNjCitNU0c6IDc5OWIzOTgwMmExODI3ZTQ1YzQxMTJmZWUwMjYwMzRjMGU1OThhZmZjZTJjNTUwYzE5M2ZlZTczZjFkZjhjMzBjOGQzODczMzQwMDg4Y2U4NTlkZTM0NzFlOWQwNTc2ODZjODI5YjU0MDg3OTVlMDhiM2RjN2FhM2I2MzdjN2RlOWQyMTcyYWQwMzMzYzFiZWE4NjFhNjIzMmY0N2YwNWExMGJmNWRmODA4MTVhMjcxMjU2ZTM3ZTgwOGEwZTYyZjFmMDdkOWUxMGViYjk0N2QzZWZhYmY4YTI4ZmE5ZGNjZDlhMWQ1OTlmNWZkNjE2NTUwOGVmZDY3OWNmMzU2MDE1MDU4YmY0YjM0MTE4ZjgzYWEzZTViYzJjZTE5ZWNhODRmNzE4Mzk4YWRiYzBhNTI3NmNmOWQ4Y2FmZmMyN2UzZTZhYmJlMzQ1YjBlOWVjZjg5YzY3NzFiMGU3NWQ0MDhiYTJmYmI5MGZjZmQ3MGM1M2YyZTRkNTJiYTU0ZDk3ODRjZjcxYzM0OWVmNmYxNGFlNDk3MGRlZjZlZmI1ZjMwZTk4NGQ2MDE2YTE5NmRlYWVjN2UwNGI0NzYxOWM0OGJmNDlkYzAyZjdmZWYzZTEzYjc1NjE3NGU5MGQwNWZjYmRkNWUxM2YwZTQzNGVmZDU0MjFiMDkxZDUxNzkwMGVkMGQ1Nzg1OTY4ODYyYjRiZmU1MDkzYWI2NzIxNzE4MGQ5NzU1NGNjZDljYzMxNDI5MzI2Y2FiNDJmM2Y4Mzk4MDYwYzE5ZGI0ODhiNWQxYzgwYjI5MDkwYWZkMWM2YmFjMzY0MjI2NDgwMDIxMWJjMjc4ZmNiOTlkYWU5ZGJmNDlkYWYxYjI0YWI1NjlkY2JiODdkNGQzNTQ3MzM1ZTM1ZGI5ODQwMGNkZmNlNjc5MDY4MmU5MzYwMDIyMGVjNDk5MjQ1ZmE0ZWUxNWQ4NDM4MzFiNTZjYzI2NDE4MDI1YmY4NzAwMTYwNWM2NjkxY2E2YmQ0MGE0ZTI0OGMzMDk4MDFiNzZhNzk1ZWRlOGFkNTMwOGJjYjZkMTc1NGFiMzM3MWYwMDAzYmI4YzRlNGU0NzE5NTRlMjhiMWU5ODY2Mzc5ZjgyZTFmYmFjYjc5ZDUwYWRkZGFkNWI5Nzc4YjU1OGNkZGJiMDAzOGE1ZmYzZDVjOTU1N2I5NjVkZTNhNzA4MmM0NWE4ZWNmM2U3NzIxZWI2OTBiNmM3MWYzZDg5NzVkNTMwMGY2N2M0ZGM0YTczNjg0NmU0Y2NkMjZmOTM0NjNkNWJjNmY0NmVkYzQ4ODY2NGJlOTY5NmJlMTJiMDJkZDEwNGQxMGNjNmIxZDgyZTgxMTc4MTEyMTRhNjQ4N2QxNzM2N2UzOTVhZGUyZWY2YjI2YTE3ODNhN2UyZjI0NTIxM2JjMDNhNzU1ZGYzZWU4ZWY5ZjFlZmY5NzJjNjkxOTA2NWNiN2I3NTY2NzhkNGRkZmQxOTNlZGRjMGI0MmU4Njg5NjEzNjQzMTQ2ZDc0MjhjYTM3YmYzMWJkZjE0ZTMxODY3ODU4ZjM5ZDIzMjM3MDllYjNiN2Q3ZjRlMzk3MDIyMzc4NDI0YmRlZTliY2I3NGU5ZDVkZmQzNzFmNDczNDk5OGZjMThkZjRjZGZiNGI1YzIxYzJlNTBmOGQ2YzE1YmMxNGJmNGZkYTZjZWI5ZDgwODJjYWU0MzJkZmM5OGJmYjNlY2QxNmI4ZDc0ZjgzMGI2NDJiMDQyODc1ZTkyMWIwNTRiZDFhYWE1ODFmNjBkNzE4ZGY2NjlmNTZkYzJmMTBkNDc4OTk3NzIyMTYyZTgzOTQwZTYxYTFiNmU0MmRmMmE0YTNhN2NiY2RkNjExY2U5NmNiY2ZiNWE5NWNjNDczMjMxY2ExM2MwNjA5ZDBjZTFhZTVkZGI1NDY2ZDZkNjVlZWZhZDlkYWYyYTM2OTAxYmNjOTQ1ODQ3ZGExZWQ2ZTJlMjQwZTg0OGIyMzFiN2QwZTFhY2QwNjU0M2VjOTNlNzY4ZTU5OTg1ZDdlOTZjOGMzMWZjZDEyMTBmMDk2NDI3MWUyMTg3NzUyNWNiMTM0YmMzNTM2MjU3ZGJiMTFkMzBhM2M0Zjk0OWZiODJhZTBjMzFjY2RmZTQxOTQzMjUxZTUwYWE0MzU1MzkyYWMzMDllZjYwZmMxNzQzMmEyYmU0YmRiMmZjYjI4NjA3Y2M0NWE1MmI2MDAxNmJiMWQyZTIzOTcyZmYyYzJhMjQ3ZDcyNTU4NWIxZWYyYjE1ZgorU0lHOiA4NGY3OWQ5ZThmMzBlNWJiNjM2MjIzOTcxNDU1NmIwNDczNmZhNDQ0NjVjYWJhYWQyM2JlYWY1YTk5ZmM0NTFhZDRhZTVhMThjN2Y2Zjk2NGZhNDEwMzkyMTYwMThlYzVhMmFjY2FlMTA3NWE2YmIzYTZlY2JjMWZjYTAyYjkwNAorCitUU1Q6IDg1MQorU0s6ICAxYmUyOTQ5ZDUxZTcyMDgxNzU4MjYyMTNlZTZhZTNjMDkxMTcyNzQyZTg4Y2FhMDJlZDBmMzEzZWNiZTVkOTEwCitQSzogIGQ3YmY0NzQ4ZDZkZGVkNWI1N2EyYWJmNzk3ZmFjYzU2MGI0ODU2M2RmZDlkY2ZmNGJlNTIyYzcxN2E2Y2ZkYTkKK01TRzogMDQ1ZTJiMGVjN2JiMjAzYTQ5YmRjYmE5NDFlMmI3M2MyM2MxZmU1OWExN2QyMWEwMTI0ZWEyNGIzMzdmOTJhYjljOTIzYTIwNTc2YjYyZDVkMGY2MjRlNzkzMmMxMTViNTQ3NGUwYTQ2YTRkYzllYzUxZjZhMGNlOGQ1NDc0NGQxZDUyMDkzMzIwZTM5YmUyMDNmNzRhMGY1ZGZhYzUyY2YwZjk5NWM2NmRmMjkxNGI2OGFkODcxZmJlODE1MjVhZDJkODhhYzY5OTMzYTc1YWVhNzRhY2U0ZTM2MzQzZGRjMDZkMzIwOGYxNmQ4MDVmNWRkNzg2YjRkYWFhMTY2NzQ4Y2ZlZWM1NzE0Yzg1YzEwNDc4YjU5N2FjN2Y2YWUyYzk4ODkxZTM4ZmQ0MTRhYTgxMWI3NjIxZDgwNWViOGZjYzQ2Y2Y0ZDU2OGE4YTkyNTg3Y2JiYzFhZWNjMTJmMTBkOTBhYzFlMDFhZTk4NmQxNGZlODI5NTFjNjgyY2VhYzhjOTI1ZmM2NjU0ZDgzOGFjOTM1M2FlMmY5M2YzYzg4YmY3YjgyY2JjNDNiMWU0OWU1Y2ViZmIxOTQ5YWRlNGIyMmU0YmNmMWI0MDBjMGE4ZmE4YTZmZTc2NzBmNjlmYzNmYWVjZDQ4MDViOGM5NTRjMDFhNTQwZDFhMWU3ODg0MzZlYWUwNzNhZTk1NmRhZTMxNzY5MDVhOGYwYTNjNjBmZDk4MGRhYjQxOWQ0MWVjMDZlNTI3M2ZiYjEzZGI5MzgxZjg5YjY2M2NjYzRiZDc1M2ZkOTBmMTRhNzdiM2Q4MWM0NWRkMzU2MWNkMWZhMGU5NGQyMzRjZWY5ZDc4NTlhMmVjOTQyYmZjMTg4NDlkN2YyYWRhM2E1ZDY1N2JjMTkzZDJlMTQ5MTY4MmYxNjY1YTUzNGIxYWMyMDgzYjczOGJlOGY5ZTk2M2Y1OTQxZWQ0ODNjNmFjYzgyZTk1OWI4MWI4YWYwMmY0NzFjMDhmNWY4YjEyZTEwZTAwODE5Mjg5OGE0NDUwMjAyYWY3MzE1OTJlNzRlZmUyYTk0OGU1MWQwNmU0NGRlOWI5NTZiN2JjOWE2OWI2ZTc0Njg3YWIyMDZkZWM0ZDM1YjMxNzNmYmM0Mzg4MjlkNTA2NGJmYmNmNzQzYzFlMmQ0NmY2MjhmMmU1MWM2MjZkOGU0MTZkN2JlNmU1NTVhMjQ5NjkxYWJiMTY3ZjFkOTJmNGZhMzM5MmZkZTI0ZTk5M2NlN2ZmNWMxYjhlMTU3N2E3YzBlNzMwMjVjYzZmY2Q3MjdhODJlZjBjMTI5ZTkxZTU1MzNlMDIxYTNjZGJiOTlkNTRiZjdjZGNkM2ZmMTE5MTU0ZjNmYWQ5MjQyYjZlZDM1MGQxMDM3MmM5NzZmZjNhNDM3ZDA5Nzg2N2Q5YmZiYTkxZDg0YmRhNTVhNmJjZDZlMzY0MWIyMTNhMjE4YjMwNDE1ODljNTVhZmJiMzQ0ZGU2ZTk3ZDhjMzViNWM4NmNmM2JlMDYzZjkwMWZmZWVhOGNjOTEwNjk5NjdkMjM0NjAzNWE5MWViNTcwNmEzYjUzZjZkMWMzNGQ0ZDIxMTY3MDZiNjVjMjk4ZWM1N2RlODJhYmM0MDAzY2U4Y2M1ZTBiODhmZjcxMGRkYTFkY2VmNmYxNTQyNzcxMDZiODNlYjQ2YzA0NWIwODJkMTEzYjM2MWQ2YTYyNTgwOGM5MTMwNTg0ZGZjOTY3MDdlZjg5NTU5MDdiYWE2MWNmODhjNjZiNmQxZjYwNTgxMTE5Y2I2MjE3YTg1MjE1NzMzNjE3OGM2ODVlNmVkNDg1MjZlZDVjNGUzYjc5NjdkNTFmOTlkZjY4NzZhMWFjZmI4NDVjNTcxYjg5ODY1NmU1ZTNiYzczOTgwYjliZWQxMTk4ODY2MzU5YzllOWIxZWZhOTE1ZjgxMGQxZWY4YWQ2Y2IzZmMyMWZiZmU2NTQzMDZkZTZjYTEzYTNhNmE0OGU3YTEzZWQ4NzQ2YWNiZDA3ZjQ4ZWIwMGMzNjM3NGIxZWI0ZjNmMDFjMTllMmU4ZDM3ZTlmYzA2NGIzM2MwZDY2OWJiYTU1NGRkYzY4MjFhNzdiNDA4OWNhYmRjYWZjOTdmNjBlNjA1MGJjYTQ0NGFlOGNmYzQ0ZDkzYzQwZWY1MzE4YmVlNmY4Y2YwYzA2N2I4NWNkZGRjNDU5NzRhNGVhY2ZjM2VmNTEzMTViYTBmM2Y2Mjk2OGM3MDAzYTdmZjQ0NDYxMjQwMGIxNTkKK1NJRzogZjQxZjJlZjY1OTVmMTc2NjBiYjJmZTkzZTUxZmM2ZmE5YzMxZGFkYzlkYjkwYzNmNDY2MDdhN2ZiNDgwMGJiNzVhZDk2MzI1ZGM3ZWFiNzgyNDcyYjA0ZGE2ZDhlNmZlNjQ2NTVkZWE1NTFmYmQ1MDQ5ZTg3NmNlNWE0MDVmMDIKKworVFNUOiA4NTIKK1NLOiAgM2I2YmE2ZDVjYzljZDYyNDFkOGIwMDk3YTM3MjJlNGQwNjZmZWEzZDU2MGFlYWI0NjczZTg2ZjFmOGVjNjAyNgorUEs6ICA4Y2E2NTIwNzE3Y2YzNjNjNGNlZmZhNzYzMjhhMGExNjZmZjgzZTQ1Y2E3ZDE5MWNjOGVmNmNhNmU1MjQzMzY3CitNU0c6IDM2ZGU5MzBjYzhlMTg4NjA4MzZhMGM4MjlkODllOTYzYTU4YmRkOWM2YjZlZjViYzYxZjc1OTkyZDIwNzUyNDJkY2EyM2UyOGRlMjA1YTMzZGZlYTg2MWZjNDRhMzI2MjhlOGU3Y2RkM2VkN2ZmNDllYTZhNzA5N2UwMDkwY2ZkOWZmNWVjYWIxZGU4MjJmYzBhNGMzNzc2ZGQ1NmMxOTE5MjA0NTE2YTk0Y2VjNTYzOGRhMWQ5OWU1MmI4NjZmNWVjNDE2MmE5MTJlZGI0MWMxZTkyZWRmYzM1M2Y2NzA1ZTFjMTJjZDQxY2I2MmRlZDRhZDgxNTc5NDAwNTliZmNmNTA3MTlkM2YyYWQwMDg0ODU0MGNlODlmM2Y5YWZhNjEwY2NiYTVlY2MzN2UzZTJjMTUzNGZjYjM4ZmNkMzlhMmQxNGQ1YjVkYTZmZWEyNGUwMDY2NTRlMzA5MDQ3YTI5Y2FkMGFlNGRhOGU3MDhmOTdhMThjYWQ1ZmJkYzlhYzg0NDAwYzUzMmNlZDU0ODg4NjUzOWVkZDZjNTQxMDc0NzkwYWU0NTAyZmRmZTlmMzI3M2E4NzZhMjE4NjIzYTI1NzA2YTE1MjVlNjdlNTdhMTZkMjJjMjFiNmE0NWUyMzg0ZTI4N2FjNDQ1MmFlYzRlMDYzMDU2YjRjMTc4YWIwZTViMmE1YmFkM2Y0NjNjNDcyYzRlYTFmOWMxYTY2ZTUyNzA0NzNhODM1MDk0ZThmMGVlZjY4MGNkN2IyMGQwZTcwZjRkNmM5NThmZWUwOGE5MzYwYWE2MDY2ODg4ZjRkZDdjZTVlYzIyMjU5ZmEwYjUzZmU5MjcxYzA4M2M2ZmNkYjcyODNiMDkwNjEwODhjNTJmNzFiZmRkMjc3N2NlMDgwMWY0MWE2YzRjZTkwZWYxMzFkZTFlMTgzY2I4OTQ5Y2UzMjNjOWViMTNhNGIwY2FjZjk5ZGVmZGZkYjY4ZDVlZDFmNjg5MWI0OGUyMTA0NzY2OGQ2OWRlOGE4MGY4ZTU2MzRkZWQwODczNmE0ZmI1NDEwY2RlYTljNzI1OTZlMzZkZjY4NDFmMmVlYTQ2ODUwYzg3NDczYzg5NTU0MDIwNWIwOTIxOTYwZmZhNWQ5ZDhmZmI4ZTI5Y2RlOTZhM2VkZTAxNWFjYmMyNjk3NDAwNGQzZTQzOGE4NWIyZTMzODVmNjRkMTgxNDAwMzk0MWZmZDM2Mzk5MmQzOTQwYzZlNmQ4MWZmOGU0NWZjZWQ2ZDM2Y2UxOThkOGNjYmVmZWU0MzJhNzdkOGZjYWRkNzNmYjc5OWY2YmFmZWZiNTFhMmRhNzk4NzIxYzNkNDY1YjE2M2VmMTNlNmVjYzY1ZTYwM2IyODkzZWU0Y2M5ZTFjNmQxZGU3YTY1Y2FiNWNiZGY1MzY4NTVlMjg4YzNjY2RhOGQyZmEzY2UxMGNmNDkzNThhMmVmNGVmMDc2ZTViZmE5MWJiY2YzZDk2NmRmYTNkYzZlNzEyZjE5NTZkNGU1OGFhMzZlNzEyZGQzMzQ3MTY5YjE5YzhkNDRiZWM1YmNiNzMwNzc4ZmNjY2M1ODllZDVkMzUwZDQ0YzE3YmRlMmVlYmI2ZjVlYzU5ZmIyNDBkNjdkODFhZWE5MjY3ZjM0ZjE1ZWVlMmRlM2Y0ZmE2NzM5MTQ3OWJkYmI0MzBmNDg0MzcwZmIwZTA4OTViOWFlMDY1YmJkZDQzZTIzMGM2MmFjMDcxODRlOGIwNmIyNGI4Yjk3ZWMwMmRjNmYzN2VmNjE2NDFlZDU2ZTNmNWViOGQyMDgwYjUxNDRlZjc2MGI1MTg3NTJlMTk3NTQ3OTJlMTkzNDNhMzg1NWUxZTJmN2E3ZGM2MjM1MTdlZWQyZjVkMjY1NDhhNjhlYjhmZmQ3YmY3MGY3OGZkMTg2ZGI2MzQ5MjhiYjk4MTM4ZjJiOGZlODQ0ODFjYzUzZjVhYTM1ZTI2NjZjNjMyNWUxZDJiOGFjNWUyZGYyOTM1YjdmNjQxMzk1MmQxMGQ2MDc2ZmZjNzViYjZhZjYzYjI5YjBiOTY2M2JlYzM3MjQ3YjY2YjUwOGRkZTQxZjJmMTFiODQzMzM1NTlkZmFjNzNmNzYxYmNkYTg0YTQ4ZDI2NjA3M2FlZjE2Mzg0NjA4NDllN2ExNzIwNmEyNWY2ODAwNzcwYjkxNGNjMDI2YmFmOWUzMjU1OTE0ZTEzMjU4NDQxY2VmMzVhZDFkNjY4MzNlOTg3ZWJlNDQzMWU2YTZiYjIyMmNiYjY1YWYKK1NJRzogNzg4YzlmNDU1NGRkYmE1YzdkNjRiYTc1OWVjNDU2OTRlYzc5ZmI4NWU4MjM2OGEwNzRiZGQ4ZGYzNDQyMTNhNTZkZDA5ZjMzNGNkOWFjYjk0MWJlMjgzZDk4YzRiMTVkY2ZlY2QxNGU5M2Y2YTJlM2NiMGMxYWEyZGVlN2Q5MGIKKworVFNUOiA4NTMKK1NLOiAgZGQ5OTg3YjE4ZjlhOTIyYzBmNmZlYTE4ZWIwMGI4OTZjN2EyZDMwOTNkYjNlYTMxZDM4NDIxZGEwZGU1MTIzMQorUEs6ICA1NzM5MjFhOTU1ZmViNmRkZTQxYjA1NWM4ZGFjYWNjZDFkYjdmZTllMzZiNTA5ZDNjOWUzNmY5NzM1NzUyMzI0CitNU0c6IDQ4MTYyZmRjM2FiZjczMTljNmNhYWI2MGNiOGQwNTIwODc1Y2I0ZWU4YTA3MDkyNzgzMTY3ZDQ3MzNmZmU1MjA0ZTVmZWJlN2QyOTFlOTUzNmJkZWEzZGYwNjM3MTU5YTY1M2UwOWZkOTlhZjY2MWQ4MzAwYWU3NDFhM2U5MWE4YmQ4NWVhZDA1ZGM3ZDllNmY5MjkzMjMzMTZlZGM0Y2E2MjRlYTc4MThiMjViZGMwNjFmNzE0OTJmZDIyZDQ2NWFiMjI2ZmQ5YTEwZDhiYWJmYzA3NGM2ODZjNDM2YzI0YTNhNTNmOGZmMzg5Y2U5Y2ExZGJjODkwNzQ0NTg4OTI0MWY4ZmRhM2E3YTNmNTAyNGZhOGNiMGQwNDRiZGFmNjcxNmQ5ODNhNmQ4Mzk4MTRmZmU3MGRkYzU1YmJiYTExYWM5Nzg4N2JkYjRkYWRhOTY1NjViYjA3NWQ1ZmMxZDNjNTI0NGI5ZmZmNzdkZTU4NzI5YTA1OWE5MTFmYjNlMGViMTY0ZmI4NDI5ZTI2NTY4NWQxNGE2MzIzMzA0NmQyMGVjZjI4OWM1NTcyMzE2OWE5ZDYzZGRhMGQ1MjU1MTUzZDllZjRhNjFiOTIxMmY0YjgyMDY5N2FlN2MzMDhjZmFiNDAzYjJjMzQzMTkwNjIyNmU0NWNlMjE5MjBkZjUyMDE2MDlkYWY4MzBmMjhhZDc5NjAwNWE5YmQ4ZWJhNjIwY2Y4MzljM2JhMjI3Yjk2M2M3YmQwOTE0ODIyZGYyY2EwM2MyMjU0ZDBjYjhhY2FlMGQ1OWU0YzNlMGVjMjE1YzgzNjk2OWRjZDFkNDliZmUxOTdlMmYzZWVhM2ZhOGEzNzNiNTU4ZDBmYjkwNjNjZjE1NjhlNzM5YWFkOGYwOWZiNDM3Y2FmYjVhMjcyMzc1ZjQzNjA2NGVlZTExYmQ5MDNkM2FhZWFiNGUzZmRjZDM2YmQyMDc2ZWVhMTc5YTRmMGQ0ZmJjOGRmNDJiZjI2NjBmMDhkZTdkNWM2Mzk3Y2FlMTBiNzI3NzQ1OGFhNmNmYTAxZThhNjczN2ViMTI2MjI3ODU2NjQ2NjkxNjgxYzEwNmExNTdhMjZhZWQyMWIxYWFmMGVkMjc2NjQyMWNmYzNkMWM3ZGRmYjcyZmNkZjRiOGI0OTBmYzA5YWNlNDlhZWRkNzcxMmIyMWFjNTZmODYwMWY2MjU1NjNjNzg0MzA2ZjNiOTE3NGFkZGY3NjRlMDUxYWFkZmUxMjgzMWFmOTY2OWU2MmNhYjEyMWM3NGRmMzQzNzI0NDI5ZDZjMjY2NjAyNzFjMzJmNDBjZjdjMmQwOGJkMGFmY2M3MjhkZWY0MTM1ZDRlYjU1YjZhM2U3NjI5ZDgwNjg2NGE4NWIzNmEzMmI5YjIxYWMwZDM5NjgwYTJhZTRlYzQxODk3MDkxNzhlMzQ5NDk3ZjM5Mzk5ZmJjNzhiM2M2Y2ZhY2E2ZWRlYTdjMzNkZGEzY2MxMWU0Mzg0ZjE1ODNkNmNmYzZiNThmNGVhYTJiYzU2YWJhNDJmNzM4YTQyOWI5MzU4MDg1MGRlZTNmZDI1Mzk5NGY4YjBmYTY2ZWU4ZTI3M2RlY2FiZDUzMjA5NWZiMDRhNGEzYzM0MGFmMGU1NWI1N2VmYWI0MzYzMGZjMDJlZjIwYjQyNWNhMjE4N2UzYzZjNWUxMGYxMmQ2MThmZDI0M2EyMjRmNjUwMWViZWI5ZDMyMWM2Mzg1YjgxMjdlZjljZGNkMDk3Y2U3ZmEwMjFjZjQwZDIxYzM5OTEyMzQzZjY3YWNjZTE4MjVlM2E1MWI4YTcxOGU4YzM0MDYyMmZmZjY1ZmUwMDUzZDI0YWEzMzUxYjZhMjQwMDE4NWQ3YWViODhlODdhYzRhMWQzOTQ5MDlkNDk0MTRhZWZjMjJiYTAwOWFmZjY5NjJjOTIxN2Q3NTU2OTRlNGQ2YWE4YTVkNmE4MDNjZWJiMTVkZThmNTQxNjM0YjZmY2ViMGNhYzc5ZGRhOGExOGVlZmJiNTM3ZTcwZmZlOWFhNWE2YTZhYWY5MjQwZmFjMmVhY2JmYmVmMDFhZDZiZGY1MDc1ODc4MGY4NmE0ZTQ4ODk4NTM2MmQ1ODI1MDExZjVlOGI2NjQyNWE2MTZiN2UxMDRlYjIzZmU4ZjEwMGNiMDI0OTgyMzY2MmJkYTNkYTQ3YTRjM2MxY2EyZjkxNGIyNWI5NzM4NTM0MDI2MDQ3ZGY2ZDdmZjYzMWRmMmM0MTMxZjY4MGUxMzc0M2M5Y2NmMgorU0lHOiAzZTlmMmIwMDdjMGUyOWVjODc1OTk1YTYzMDliOTczZGViOGJhZjExM2RlZDEzZjFlMDAwM2U5YjliZjkzOTE2YTRkZmU0NzkzN2RhZGZjNzhhYTY2M2M1NWY2NzRlYzM1YzM4NDYyNThmMThlN2JiOTNmYmJhM2U4MjZhMWYwZAorCitUU1Q6IDg1NAorU0s6ICAzOGQyZWY1MDlmOTMwNTFmMTQ1MTY3NzM3YzIyZTFhNWJmZThmNGE5MWViYTBiYjg3YzM5Y2UwNGE4OWJhZWM2CitQSzogIDAxMTE1ZjZkODlhNWRhYWI1NGY4OTJiYjRhNGJkYTFjZTVkOGY2YzljODhhNTBjZWU4M2JkOTg3YTJjMGRkZjcKK01TRzogNDI3YjVhMDFlODU5N2YwNGZkNDIyZjBhNjYyZDBiZTJkZmE4NTNlZDVmOWQzZjYwZmY5MGYyYzVlZTA4YmI1OWZkMDNkNDAyYjc1NGNhZjU0ZDAwNThmNWEyY2Y4N2FmNGZlZjIxNzdkNTllMTgyMjYyOTNmZDJhZjM3NmJjOTg3YmY3YjMyMGI5ZDFlMjQ5YWI5ZWZiNzUwNzhlNmQzZGYyOWUwMzUwNDc3NjM1NDM0NGFhNjllNzJlMWViYzUyYTNjMzhhNGMyYTE2NzNiNGU5NzRhMmU0ZTEyYTJlNzhlYTNlM2ZlNTBjNTM2MzBkMDk2ZGEzZTJmZTgyOTlmNzFhMWI0NDFiNGNmMGNhZWI5MzdhZmE0YTBlMzkxNWNjYWIzOTk2YzlmNmE4ZjRmZDM3NTQzZThmNzU5MDBjZmQ0NzE3NTM3MGVmYjg1MmE1ZjY5ZDY3MzY4M2Y5OThmZGNmZjg1ZmY4ZjMyYmFhODA3MDY2NjA0NDIyMDI3ZDUxYTQzNWRkZjk4OGVkMmZkOGViMTkxZjEwYjQ2ODA3NDIwMDA4NzU2ZWI0ZTMwMGM0MDk5YzJkNjQ1MGJjYzZhNGU3ZDA2NzMxNTZiODM3ZjA1MDYzMzhmM2QxYjU3MzRiMTY2Y2E1Y2MyZjI0YTRlZjAyNmNkYTJjNGFlMzEwNWI2M2NhODU3MGQxODU0NmNmYWNiODYwNDI5NjZhMDBlZjUyYzcyOTkwMTlmNjhhMmRmMDhjOGI3MDRlODVlNzEzYzM0OGQ3ZjE2Nzc2NjBlMThlYmFiNTliZjRlMTJlNmZmMmQ3ODNkOGQ1ZDQyYWFiNmVmMDE3YjdhMTk2NmFlZThkYzE0ZGRhYmVkNDliNGI2NDNkZjRlOWIwYjYwMzgzYzdkOGI0Yjg4YzY1YTg5OGMxYzc3ZDQzZDZiZDY4YjJhNTc0M2YxZmVkZDY1NGRjODQ0OTZkYTAyY2ViNjliOWI0ZDNhOGUwMGNjZDcyZTdjNzVmYzUwYThkZDA4N2UxODNlNmMxZjU3OWJhZWJjNWM2M2YyODA3OTM2NzkxYjVmZTQ4NDdjZGNmMTUxNzc0MjM1MjA1Y2QyZDdiOGJmNGFlODgxOTIyNWVhNzA4YjdiYWFjNjY5OThmMGNiYWIyYzdkZGYyNTFmM2IxZGUxMDE3ZDM5NzY5MjIwNWVlYTYzOWYxMmQ3N2JlZWY2YzEzYmIxMjEwMGZmODkwNjQ3MGJjN2IyMTI5ODA1M2JlMWE2MWI3YjNhNDk5ZWRjMzEwOTk2YzhiYzA4NzE5MDdjYTQ2OGU4OWVkMzExYWRjYTJlMmI4MjkzMDk3NWIzZWZiYmZjMDNjZGRmNGQ5NDhjNDc2NWU4YzEwNTkwODgyMTY5YWNkZGI4ZjhjMzZkODRjMmRhYzNiNzk4ZTdhYmY4NDQ3MTJmYTQ1OGQyNzdjMjRlODE0MDQ3ZDc0MjMxOWE4MzRkZDlmOTI3YTJiNDQ4NWVmMTM3NDVmN2E2MGRkNmJiMzM3OTM2MzA0Yzk3ZDNmOWYxNDRlYjI5YmI2OTViOGRjMzFiOWQ4NDkxMDYxMWQyOGQ1ODFjYWE5MzY1ZDZkZmY1MmQ0MTBhNGFkNTJiZDEyMTcyOWZmZjUyODg4ZjRkYWFlMTcwN2Y2ZjU2ZGFjNjFmZmI5OTYxY2RhNzE3NmFmNDQ2MGE2ZDU1NDJhMjA0NDZmYjUxNDdmY2U3MjcyMDRjZWM2ODk5YjlhM2Q0ZmY2MjI2YmI4YTFjNzhlMzZmY2RkOWU1MGMwNDBkNzJkMGY0MDA3ZDNmYTlhYTc2N2U0YWJkMGFkZDYyZmRiY2NkZWZmNjcyMWViMjU5ZTAwYTcyMTYzMjAwNmJlZGUwZDE3M2QzODM0NGRlYTQ0Zjk2YjY3ZDlhMmVlYTFkMmFmNWY3NDhlOGViZGI0NDFiZmI0ZTU4ZTJkNDJmZWM3NDA1NjZhY2Y3M2EzMDMzNThmN2Q4OWM4MTU4Y2YyMWZlODViMGQ0YTQxN2ViZGM4NmQwNDY5ZjZiOTFjMjRhZDYxMGQ0ODZkZWRjMjE4YjJjZTdhOGI5Njc1NDcyMzE1MWYwZDAwNzZmZmY5ZjE5ZDExMmQ5YzA1OTJmYjhkOTJjOTlkY2I4ZGRmYWE0NmZiZTBkOTJkZjQ2YjhjMDBjYTQzNDVhZGI2OWE1YWNhNjk0YTg2Y2YzMDY0NjQ1MWJiMTdiYTZlNjA3YTkxMmJmMTA5ZDVmYzJkM2UyN2QwMGQ5NDU2MDBhOGE1N2MKK1NJRzogZGVjNDYyNTM1MDliMTFlNGI1MmE2YWU0ZjM2NmI2ODBkZmZjMjgwZDBhMDQ0ZmMwY2I3OTBiNmU3NTEzODE0NjFlMWU2MDJhODllM2IzZDMwNjRjNDA3ZjYwMmYxYzIyNDA0YjY4MjNiZDI0Njc1NDkzMTRhMDAwMDE2NjRhMDgKKworVFNUOiA4NTUKK1NLOiAgNDNiZmIzZGJlNGQ5YmRhYTgyYjM1NGRkNTk2MzM0ZTY2MGQ3NmZjMGIyZWI2OTg5OTNhZWYzNzY3ZjFjN2M3ZgorUEs6ICBkMDBhZWNlZmYwY2ViODMyYzI1MWQxZmU2YmNiZWFlYWNiYjQxMTNmNTI4MWJhYmE0ZTg3OGY3Yjk1ZjkzZjA3CitNU0c6IDNmM2VlZGRjYWVmNGUxNjYyYWRiNjZiYjFiMjA3ZDc5M2ZjYmVmODE1MDA1ZTgyNjQzZWQ3MGM5ODU1NDAzZGFjMjhiNTIwNzI3YTkwMWE1MzJkMjhiOWJkMTM0OGRiMmY4OTY3YmJiOGM5MDk4YjA3ZjU3MGEyZWFlMWVlNDgyNjQwYzBiNjdhNTJhMzg2MTIxMzNhMTVlMjU4ZWRlMzhjZGE4NzhmZjM2ZWQzMjFkZmY4N2NjNmEwMTM4M2JhODQwNjdkNjBhZjQxNzc2YWNmODBhOGE0ZWFjNzdmN2Q4N2MzN2E3MDRhM2UyYWNhMWU4ODE1ZTQ5ZmJjYWI3OTdjODU2NTI5NTM4YmUwN2Q1MTY5NjMyMWY2OWIwOWI1ZGM1YTE1ZTVmMGU0YzIyZDIyODM3ZjYyZWU0YzhiYzdmMjVhOTQ4N2I5NjJjYzIwZjEzM2ZjYjg3MGVkMTI1Y2NhNTg1ZDE4MWJkMzlmOWRmYTY2MWYxOWJlNzZkYTdmNjVmMjJmYmJjODA3NTJhZWIzOWU4ZDU5ZWQ5NmUxNGY1OTVkMDQ5Mjk0MDJiNTAyOWM2MGNlZTM3YzAyMTdiYzUzMWQ4MGRiMzQxZGFjZTNjY2U3NmU2NDNhYWM1Mzg4NzQ3M2VkYzZlMTljYjM5ZmVjZjZhZjQyNGEyMDY2MzkzZDFjMzNmYzdiOTM2NzZkN2U2MTA1YjliZmM5NjdkMWUyOWFmZGM0Y2YxNWJjYWZhMDljMjk1YTZmOWRlZWUzMzFhYjNiMGQ0OTMxMjZlMmIyZmZmYjQyYTZiNjhlNzllMTM4ZGI1NTA4MjcyNjJlNDg3YTgzZjM3ZjAxZGQ3OTIyYmU3NWU5MmZjZjVkOWQ0ODAzYjNhYzJmMzVkYTIxMGZiMzhiMjYzYjBmZmI2YzI3MDhkNGI1NWI3NTdhZjUyMDc3YTdlMzE4NGQwMWU4MmY2NGQzMmNjZTRmZGVlMGY4ZDRlMzY0YmNmYjk1OGViYmZkYmI2MjJiMzhiNTFlOTMwMjcxYzdiMWI3MGFhOWQ0YmIzYWE0Yjk5N2M1MjE0NGQzYWE2MjE2MjU3M2EzYTFkOWNlNDZjZGJlZWI4NDQ5ZjEyMjVjNDQ5NjMxZTg4OTc1MjFjZDBmNjM3YjcyMWExMjUyYjhhMTBhYjBiZTg3MGFmYmNkODlkNThiMmViYjYzMjExOTUwY2FkN2FiODJjODE5NTAyNmI1MGVhOGI3N2I5ZTkwZWQ1NTlhZjQ0ODQzMDg4NTFhM2ExNTY3MTY4NTNhOGFjNGVjYjhjNWNjN2Q5MzViMGY0NjYxMjQxNDNiMTE3N2YwNWQwOGI5N2QxYWQ1NDJlZDJjMjQ2NWFmMTg1ZTdkYjQyYjY5Y2I4MDJhNzE3OTRhMzEzOTg4MzAyOTY3MGM5NTY3NDJhYWFkNzkwN2E3MWQ5NTk4NWZjMWQ0NWI2NTk5N2I0ZWM2Y2U4MjU1ZGU5NTkyNzBhZmE3ZGU5MGYyOTI5ZGU2M2Y5YjE3MjExZDdmMWFlODIwYWRhOWNlM2U0ODY0OTE3OWQ2MGIwMTQ5NDkzNDgxZjAxZDQ1OWRiN2RhZDA1MjZiNWJkOWY0YjMzODBkMjViYTJjNTAyYmE4ZmEzYzRkNDEzMWI0NjYyYWRkZWZiNDE4MjdmNzU5ZmE3MWQ0NDdkNWYwMjkyNDVmNDhjNjIyZWI3YzY4YzhlNzEwODFmN2Y3ODlkZTdhMjgzZDJlZGE4M2E3ZDE3MjJhMDVmYjcyZTE3NjBjMjQwNDBjNGQ4MzRkZWY1ZGY1Zjc0MmUwMmIzMDQ1MWM4OTNiY2Y3ZDc3MWRiNzg0Y2JiZGFlYzg3NmQ4YWM4Njc0M2I1MjlhMjkyMDA3YWM3NTNjOTlhNTc5OWNjMzI0ZmU1ZWJiNTQ0OGFiNTU0YjEwZDQxMzY5NzRhMTI1NDJkMjVjNjE0N2M2N2M1ZDIzMzZjOWRiNzVjYmEyZmQ2MDhjZDQzYWI5NWJlYWNkMDQzYTEzNDljZWZhODI4ZTIzYjVmMGI2ZTBlMjk1MWYzMzUzYmI5MmJmZDFmMGE0OWMzM2ZiM2NmMzc5OWEwYjU0MzE5OGFkNWQwM2QyNjNjMWEwNmMzNWEyNmFkZTE1MTg0OTFjOGMxZDI3YTJkYjAzMzgwODkzMmNkMWM0N2I1YTEyNjk4NWFjYjhkODg4MzYwZWVjY2ZlYjNiZjUxYjBkMTg5YjQxOTA0NDA0MDRkMTJmYmE2NWQwYTdhMTRjNjIwYzU1NWY4MjIKK1NJRzogYTk5OTU1MjMwMjBhMGQyMjJiYzQ4Zjk4ZDA1NTA0ZTMwNjhmMzA0YTZkMTk3MDA2Y2M5YzAzNWVlYWRlMDk5ZTdhYTk3ZTkwODk0ZWFkMTdlOGMzMGIwYWE0YTk4MDg4ZjAzOGI5MjI0NGM0YjIwZmRlOTY0Zjg1MzRlOGZiMDMKKworVFNUOiA4NTYKK1NLOiAgNTE0ZTA3MGIwMTkwZDE4Y2JlOTgxYTVhMTUxZTc3NTMzOThhMjcyYmNmMDE0ODEzYWQzNzk3MjJjMzZlMTMzZAorUEs6ICA2ZmJkZTA0NzRjYzQ4MTBlZmZhNTBhMDc4MjBjOTY1YWEwMDM5NWZmM2E1YjNlMmVkZDdkMzU2YjdkNmFlZjJiCitNU0c6IDgzMTQ1NTc2MmE1ZDgwMDk3YmIyODQ1MDQyZjRjODc2ZTcxMDg1MzViZWQ2ODNlOGM0NDYxOWQwODE1NGEyMjk0NDRiMTAxZTNlZDdjMDE1MDdlODcwOTQxNDQ2YWY5NzhjMGY1MzQxZDFhYzFkZDE1YjE0ZTg5NjY3MTJkZjE5ZjUyZmViNTEwM2NmNjJiNjYzMjc1NjQ0NmNjNzU0ZGYwMGEzZjZkZDcxOTk2OGEyY2VmNjZjM2FkZmI3ZDFmYzQ5MWZiYmYzZDU5Mjk0YWIzNDYxOWUxNzZkYjBkNDQ2MTUxZTM3ZWFhM2RhZjE3MjQwNmU5ODNkOWQyM2E2YjY5ZTkyOTc2MDMwZjVhYzcwNDBhZDUxMTQxMjlmZWFmOTdhZjE1YjIyOTZmYWU3MDQ5MmRiYmViMmI0ODI3Njg3ZmI3OTg3MTVjOWJiMmMzMjU1N2E4MWQ4OTFiODk3MDUyOTAwNzA3MTU5NzUxZjA3ZGIwNzRjNzdmMDcxOTY3MWYxNzY2Njg5MDI5YTNjZGRmMzlkZjM0ODNjZjJiMDRmNzFjMjVkZTA1ZmMyZDAyYmI0OGU1MzllYWYxYTMyMTY0NmNkODBlZjJmMGFjNzAzZjQ1ZTczODk1MzA4MDBlNWQ0MTdjY2VhOGE1YzA4NjY4MmYwNDc0NWQ1MGI1ZGZjOGY2ZWRjODdhOTVjN2QyMDJhOWNmZDk5ODcxNGI3NDY5MjBlYmJlMjMzNWJjYTFhMDE3MTc2MjAxNmY1ZTRiZGE4OWM1N2QwZWRjNjkxMGM2ZDIyYzhmOTA5ZGEzZGIxMzUyZjBjOGJkMThmM2I1YWFjMjVmMTkzYjg5NDcwZjk3NmJjNGYxYWZmYjNjNjZiYzU4NzZjNmZlMmFjNzUwODUzM2Q5N2JiY2Y3NzExOWQ5YWFlMTkzZjA3ZTBiNjRiNDYxYzljNmMzYjlkMjkzYmQzN2RlM2Q4ZTFhYjFlOGQ4NzJjZDk0ZTZjZjBlYjY4NDM5ZmRjZDNiMjVjZTg0ODM0NjBiZDhiN2NjZTg4OWZiNzIyYjQzNjFlMTE4ZGE5ODNlZjRhOWU0NWNlYmMwYzFiODIyOWVhNTNlNmY1NTUwNWY2NDRlMDlhY2FhNGM0YjhjYzY0MGIyY2QyYjMxMmUxYzNhMmMwMjY2OWUxZjljMDYzMTFjNzhkMzYwMDA5ZGI5ZTY3YzM5YjQ5ZDFlNWQ3NzBjMDFkMjg0YjBhMTdhNDFiNGU3Y2E3NDVkNjY1ZWMwNzUwMGU0ZDlmYzhlYmMxY2M2YWY1M2EzZmM3NmIwYzNmMTQzMWQ0OTg0M2YyMGUxODI3ODJjODJiM2I1YWFlMzZmZTIwY2E2NDI2MTgwNjhiZTIzM2Q0YjVlZjllYWVmZjQwMTUzNmRjNTkzYTJiYzE4MzQ0ZjU1YWM1ZDVmYzdiM2ViNTA2ZDExY2IzNzUzMzAwNjNjNjIwYzUzMzRkNzIzYzdkMWYwNDI4MTZiYzQ3ODViMzVhYzBlNmYxNzRmNzM2ODc4YjdiNDkxNjU4Y2E2N2Q4ZmNhYjUzOGZjNmVjZDI3N2VhZDkwZDk1NGI0NjBkYTQyNTNhMWMzYTMwYjNkODkyOGY2OWFjOTg3NmEyODkxOTY5ZmMyZDA2YTY2ODk5MmI4ZTIxMTVkZmU1MzU4YTcxMjRiYTdjY2Y0MjFkODA1NGVhMDQzNDQ0Y2RlYjQwYjcxNmRjN2EzNjU5YTNjYTk0MzQ3MjkzNDg5MDYwZTJjZjY3MTJhMmE2YzdiOGFkMTQ2Nzg1ZmM0MGNjYjlkYTI4NzgzMGQwMTFkMGQyNGRmM2U3YWZiZTk3MmQ2ZjQxN2RlNWNkNzVmMjU5ZWEwN2NhZmRkZTIwNWZjMGEzNjUxMzVjMjMyY2JkN2MxYmM1MzlmYTRiN2UxY2NlMzUxODUyMzdjMjNmODBhZTk3YzE4NmQwZDNiMTA1MDNkNTk4NGEyMGVjNDFjM2NkMDQyYzI4YTRjMzFmOTU3NGIwNmE4NzJiZjk1OWFiMGFkZDFmNWRlZTE0YTFlNzQxZWYyMzhkZmNkZWMwODVhYTA4OGRjZjM5YTM2ZGRhOGYyYTg1ZWQwZDM2MmNjYjAwNWQwMmU1YWNjYzA5MmEzNzZkYzExYTU2NjE3MGQ1ODNkYjM1ZjFkZTBiZTNmMTU5MDg1OTZlOWI3ODFhYzgxYmUwN2I5YmQyYWY0NmM1NmZiNGQ5ZDg0Mjc2MDExZTQ2MThiN2Y3NmY5Njc5NGNkMGZkNTdlZDQxNGI2MworU0lHOiBiNmMzNTVjOTU4YjViYWE3ZWJlOTc3YTkzZmNmNTM5NTg5YTM2NmQ0MDE2MGU0ZTAzMWI4OGFiOTY0MDJjN2JkNTc3ZmY2MzVmYzA3NzgyNDIzNTk4ZGNhNDM2NjgxMjRhOGIyODc1MTBlMmNmZDA3YTFlOGY2MTlmNmM4NTQwYQorCitUU1Q6IDg1NworU0s6ICBiYzc5MGE3Mzg1ZGQxZGRkYzc2MmUzYjIwMjIxZGMwNzhiNmMzZGE4OTg2ZDQxODA5NDA3MjcyNTdjZmRjZGYxCitQSzogIGM5MjY0NjI2ZjY4ZmVkYjViMzljMjhmMDMwNDUzYjU0ZDBkNTFhOThiMTc3MjFmMjYxMWQ3ZjI3N2VmNDhiODEKK01TRzogMTQzZGQ3YmZiZmYyYWRjNzFmNWQxMjNkNDc0ZWEwNjlkZjE0YWU5MjNlZDliZjhmOTg5MWU2MGJhZTQzZjBjOWY1NTUzN2FjOWQxYWU1MjNjZTRlY2ZkMzNiMjBhZTQ0NWU5YzQyNjM3MjA1MGZhNTIxN2MxZTRmYjAxMzUzZWJmMmUzMjkwNGVmN2VlZmNmNzJlODAyM2JhZTA2YmJiNjQwY2Y3NzdkNWIwZTExNTI3YmM4MzU0OTNhZDY5ODBhMTU3YmIyZDUwYmUyMzM2NWU3MmNiZjBiM2YyMDllZjBjNDRhMDBiNDFhNjIyNjI0ODgwOTZjYWU1YTY5NmI0ZDY0Y2JhZDM0NTAwZDQxZmI0ZTRiYzcwZjhiZjYyMTQ0ZDAxYzIyNzVkNmQyOWY1ZGU3NWIxNzIxZDUwNDZiNjgyOTE2NDQ0M2ViZmQ5YzE3ODEzMTlkODhmNTQwMTBlZGMyOTZhYmJlZDAyYjdkYWQ5YmE1ODViNTUyZTAwMDVkY2NhNDAwYmY0ZjQ1OWVlZDdkYjg2ZWE4NjEyYmU5ZTkxOGRmZDRlMjcwMGM0NzEwMDgzMjgzNjI2ZmFjNzU0NDE3ZTAwODdkMjZiYTE0NWRmYzQ1YjFjOWJmN2I0ZGQ3MGU2YzUwODc0N2VmODA1YzlhMDI0MjVhZWJjNjQyMWUwZGViNmE3OWQ4OWFjZWVlZTAxZWNlY2M5ZjNjYTM2NTM4MzgyNjU4NGM0MzBlYmQzOWVjZjBhNzI4NjZhZTBhY2VjYTVhZDRmMDQwNWI2Nzc3OWMwNGM1ZGUwMzMwNjE0ZGEzNDcwYjgwNWQ3ODdjZTc5YWM1YTY5NmRkNmY2YjU1MzliMWE2NTFiNDI0Y2VmYjE5NDkxZGE2ZTA4ODkyMjNjYzk4Mzk4YjQyYzAwNDE0ZmY4ZDZjMDYyN2ViOTdjZmYyMGE4Y2JlN2ZjY2I0MWQ4MTBmY2ZlODU4Y2E3NDc1MjQ3ZWY2MjhlODRhMDlkMDEyZmUxMjIzNWIzOGMxY2M5ZDgyZTJiNjlkMDFkNjIxOGNmZDQ4ZTg1ZjI2YWVhZGQxOTU0MDhjZGQ0YzJmODA2YTg5MDQxZmQwMzE3ZmIxYTdiNjIwOWY5MDQyNzBkMzRlNjA2MTk1MDQ3Mjg4YjBmYjExYTU3MjI5MzhmNjdjMjJiMzEzZjdmNzRiMjAyNWM3NWJjZDFlY2M1YTlhZGQ0YTY0MGE0MWYyOTk2ZWI2NmU1YWYxOTYxOThkYjU4YTNmYjk5MzhmMzQ5ZjkyMmEyNGQ4NmY0ZWQ4YTk2YTA5YTE5NmMyNGQ2ZDAxZWQ3NmYzODE2YzA1YzRmMjZiYWNhOWI5ZDZkY2M3OWI1ODBkZmI3NWQ2YzkwNWQ0ODBkYWQ3Njk1MTg1NGJkYTFjYWE3ZjRhODE5NTQzYWVkMDFhZTk1NmJmMzA1OGZlOGIzYzdkNWQ3MjQ5NjJmMWE2YTgzMTQzZGRhZDI3NGZkYTNhZDU3OGU5OGFhOTY3YzQxMGVlNTc1NzVlZjAxYzAyNTg1NjBmMGExZmE0Yjc5MzI3Nzk2ZGU5OTQyMGNmZDBhNDE1NTA2MzYwZjEyNDJjY2M1OGE2ODgwOTI3NzUwZGJiZmYxM2Q3YzFiNGVkNTE5Y2RhMzU3MjEwZjEyZmIwZDFjNGQ0OGYwNDExYmQ3ZTA1OGNjNGNiOTNkM2M3NzU5N2UyNjUzZmZhMjgyZDNjMmYxMjhhYzMzYTIzN2FmMmZjYmM5ZWY5YzgxMWYzNzgxNGJhMmIwYjg1MDkzZDBmZDE4YjhjNmZiMDlhNDNjZTUyMjU0ZDIzZDU1ZjMyZTFkMzI0MmFlZDFmMjNkOWNmMjA0YWEwZGZkNDRhMzQ2ZmUwOWU1NWE0YTA2Y2YxYmVmOGJiZjM3YmExZjE1OThhNThhZWY4OTUwMWVjYmFjMDQ1MzU0M2U0ODBlZDBhZGRlOTBjODQxZDk1ZWJkNmViMjNiYWE5ZjcwZjgzYzE0OWVhYjMyZDA5MTNjNzliMDk5M2QwZTFkMzU3NGYwZjU0MmU1NmEyMDYxNmNmZTRhOGJkN2FhZWViZTBiMDgzZGMyY2UwMTQ2MTc4YzA3NDgyYTAxMTI5YmM2ZmVmZGM4MTQxYzEzODQ4OTRiNjljYmUyZjI5ZGExODhmN2ZkNGFjMzQxYTJkZjZmZDkwZGVlNmE0NDZkMjc0NjMyNGM3NWMxZWY1YjFhY2UxODdkM2JjMTZkNzA1NTk4OTI5NzVkN2U0NzEzOGYwNDA2Mzg1ZWEKK1NJRzogNmQ2YmQ2NWYzNzI2NzlmZTlkOTQ1ZmY1NjUxNjMzM2VjZTBiN2EyNWIxNWFkMjQ4NzM4MTY3MGU1MzZmNTI0Njc3NWViMzlhMTE0ZGIyYjljZDUwZjMxMmIzNjBkOWQwYmVhMjk1ZGMzN2I4MTdiMzMyODkwYWRiNjVlNGM0MDEKKworVFNUOiA4NTgKK1NLOiAgZGIzYTQ0ZGY0MGQyNTVhMjVjZjIzZjUzYzQ1MjIzYjdkOGYxZjFmMTExYmEwNzQwNmI3MWUxODRhOGNkMDYxMgorUEs6ICA2YjEyYmQ5NTgwYWUyMDdhOWIwYmFhODI4N2I4YmI4NjY2OTM3M2VlNWU1YTYyNWFiNGE2ZWYyZDA4NzEyNTk3CitNU0c6IDUyZGQ4YmE0ZmZmYTM0NGQxZTA4MTFkOTY3NWMzMTNmOWNjMGU1YTEzODQ3ODY5MTk4OWQyYjdmNzM4OTAyNTA2OGZhMzVmNzRmOWFlYWYxZTk1NjY1ZWNmOGQ1NzA3Zjc1ZjY1ZjIyNTZlZWE5MzM5OGJlNTljMGQ1MzhmNWU4NTg0YmZiYjNhMjQwZjUwMTZkNzkyNzIzNGNiM2VhYzM1YjM5MWI4YjUzZjIwZWQ4YmFlMGJhMTEwODk2OTRiZmVhZGUxMTA3MTY1NmQ0Y2YxOGVmMmQzNjgxOTJlMDRlMDhlMzAyNGZjMWQyZmRhNjMxMmFmY2E2OGQxMGM5YzMzNmEwZTM2ODUwYmUxYTRmMzViMDMzYTg1YTJhOTU0OWYyNjczYTk5NWYyYTlhYjRiZDQ2YzhmZDJkODM4ZTY0Zjc2MTcxMzQyNzMyOWM5YWY1ZTQyMTFhMjJhYjIwOGFhYWI4MGUxOTRjZDBmNmE1MDJiMzA4ZmVkNmM1ODM1MTc4MDFhNDhlZDQzMzBlMmZhZGRjZDQxODA5YzM5MTliMzBlODRkYjNjNjg3MzEwMzFlNzk4NTdkZDlmOTdmZmQxMjU0N2RhNzA2Njc5ODA3NDE1MWVjODhhNWZhOTYzYjlkOWQ4M2JhMmZlZTEzNTgzMzk1MGVmN2JjNjJiMzQwMWVhMTFiYjM2ZjI1NTYxYmMwNTIyYmIwMmQ4ZGFkMDU0M2Y2M2Q1NDdiZTc3ZDBhNGM5YmY2NWQ0MmYzYTI3NjE0NGQyZTQ3NGUyOTQyZjM3OTAyMjFlMjZmYmFlN2NhOTFlZmQ4NTkyMTk5MDgzNWZhZmI2ZGM2NzQ2MzVjOTYwMTgyMTAzOGI1MjcxMTM0M2QxYWEyNWYxYzQ2YmE0ZTNjNmU3MTJiYWMxOWU1M2VhZTMwZTUyNDZlNGYwNGRkZjJhY2RiYjM0MTYzYzI0MzY3NzY5MGJlMGJmMmUzZmExNjQ4NzBiNWU2ZjUzNmIyMmZiODllNWU4ZTFkODdjZGIzNDA0NDk3N2VkMjgzNmU1NDRkN2JhNDkzZGQ0MmEyYjY0OWJjZjMxM2M1YjM5YTFkYmZmZjNlN2YyYTU5YWRlODdkM2U3YjI1OGY1OGU1NjVmZGJhM2U0ZDkyYjFlZGI4YmZmNTRkYzQ5ZDg2YzUzYzAzMGNmNThiOTdlZjA2NmQyNDFiNTQwNTMwMjEzOTA1NzM5ZDhlMWFhNzJlZDkwZjY4NWQzOTU4ZWFhMjQyYjBjYmY3YTJlYjk3NmVlOTZhNjNlNjY3ODY0NjQxNjlhNzQyZDQ1N2U0ZDkxMTdjN2Q2NjQyODQ0NWE0NjkzMGMyOGJhN2EyNjU4MjQxODA1ZWJlNzJjNzhlMDIwMzVkMjYzYTIxMWU1OTBiNDkwY2RiODQ0MTUwNjJlZWQxNGYxM2I4YTFhOWU3N2M4ZDdiNzU1MTViMThmYjg1Mzg2ZTRhN2UwNTM5ODBkMzBmNDg5OWU4Mzg2M2JlZTg3NTU4NTg4N2M1ZjQ4YjUxNmNjYjczMWM0YmNhYTNkZjA3ZDA0Nzk1ODE0MDk2Yzc5ZDdjNWZkYzRkYWJmNWUyNmE0Y2ExODM4ZTBlNWQ4N2RiNzEzMDliODFlYTdjZTQ2MWU1ZTQ0YzdhYjJmMTA1YWQ3NWM1NDNjMWU5MTc5YzM2YTVmYTU1NWVjOTIyZmZlZDFiNzZkMjU4MDFkZDc0ZjgwY2QwYTZiYTdiYzIwZGIwYWQ1ODBiN2JiYjlkZGNmZDkzYWQxYzVmMjBmM2UyN2MzZWEzYTFlNzFlYjc0ZmY1Zjk0NGNkM2I5OGY2ZDA0NTI5NTkzMDExYzRhZWNlZjZkY2FhNjBmYjE4MzY4Y2IxMmI2ZTM5MWIzZjVkZjc2NWNiYWJmZjE1ODk4Yzg0Nzk2ZmMyYjUzZmE0OTAwZGFkMDM0YTEzYjBjZTE0NDVhZGRhNGVmNzE5YmU3NDE0MTllMjMxZTkyZjFmNjY3YTMyODQyYTQyZGI3OWJkN2EwMTRhODA5YzgxNTk2ZTgyNjI3M2QxNmZlNWQ0MDQ1ODI0MmFlMTBlMTJlNjBiMzQ4OTUzMGM2NjIyYjViYjQ0NDU0ZjI5NjE2ZTQ3ZTlhMjk3Y2UxY2EwNzQxMzdmZDlhZTEzZTNlZThlZGJjZjc4YWYyNjU0NTlkYjFhZjM0MmRjMGIyZmM4MDliZGEwMTViNWE4MmIyYjdjNTRlZmU0ZTVmYzI1MmViMTNkNjZlODA4OTM2ZjE5MTBmNGM0OGJlMGVmN2EKK1NJRzogY2MyOGI1ZWY0Yjk3NzM2MzdmYWU3ZTVmMDg0YjY5OTRhYTM1OThmOGY0YTY1ZDBiYjIwMWQxNzJkODYxYTMwMTQ5YjMzMzhkM2MzYWI3NWIzMmIyNTU5NWNkOGIyODk2MzBjMzM3NmFjZDEwYmEyYWIyNmJjMWFiYTkwMDg0MGUKKworVFNUOiA4NTkKK1NLOiAgNzc5NjRkYWQ1MmI1NzliODk2Njc1M2RhMzE4NmQxYzVlOWQzM2QzM2E0ZGIzOGJjMGQ3YTFhNmMxMTJjMTNjMgorUEs6ICBmYzI1MTI1ZTc4MjlmNjQyMzQzNzVlNTJhZTlmNzdhZTEwMTNmOTlkZjVmOTk2NWFkMmFhMTY1ODk1OTZkMDkxCitNU0c6IGMzMzllNzE4YTc1N2YzZjNiZDFiYWJkZDJlMDBhYWE1Y2Q3ZmM5MDA1ZWUzNGI2ZmRjMDlkNzFmYmQ5YzkyODlhYjFkZDE0ZGJhMmNhZDU4Y2I4MDUxMTY3NzdiZDgwYzg1OTY2NDMzYWQ0NmY5Y2E2ZTU0ZjEzZGQzY2E3ZTU2ZTQ3ZmVhNDFlNTQ4OGE0NWFkNTNiYzVkNjU3NDI3ZTFkNzkzOGY1NTE5ZjFiMDlmNWJkZDk4YWFlNWFjOTY0M2VmNzhlYmE0OTM0OTI1MzM5YTE1NWRjNjY4Mjg1NzEwMDIwOTdhMTFhNWNlZTdiNTFhNDQxYjc1NmIwY2U2NWI3NzlhZmUxOWRhNmExOGVmYzE0NWY2MDkwY2U3NzBkZTllMGU5MWY1NDMyNzBhMDk4NWVhYjQ3NTI5M2NjZmRkMzE0MWM0MTQyZTQ3MjIyMzNiMjY3NDk5NDQ3NjQxMjM1ZDcyOGJkNzVjZDFhZGMwZGIxNDJmNzMzMWFkZGRmOGM1ZWVhM2Q1NzY0MDVkODY5OTE1YjU2MGY5NjRlM2UwMDAzYzkxZjVlOTZiZmZiZWVlYzczZTUxMDI0ZWY1MmM1NWM2ZGNiNTRkNTgyMDNlNjJmNGRkYjZlMTM3ZWIwOGUxYmYxMzI2MDE4YWZkMWE4NmNhYjZjODQxZTA2NjFjZTBhMWE3YWU5NjdmMjRjMWE3N2ZjN2NhNTA1ZjcyZTVmNzkzNmUzOWM2ZjQ4MzdlMjU5NTE5NWE2OWNkNjc2NTEwYTcxNjFhNGRjNWUzMThmM2Q0ZjNhYzBhZjAzZjhjNGFlNWJjZTM5MzI0ZTk3MzhhZWE0OWYwMDJkMzJkMTZkZTIzMTdlOTVhOWYzMmVlNjA0ZTEzZGI4MDM4YjI2NGNmYzE3YWVkMjljOWRlYmY4MTkxZGU5ZTBlZmM5NTFhZDZkNTQ4NjcwNjhjZjUwYTI2OWMzN2EyNDFmODUyMDY3ODhkMjMxNDMxNzdmNjU5Y2NhNjZjZmNlMDNiYzA1MDIyNTUzMzdmMTZiM2RhZDZmNzkxMzJhYmY4MGZmMTJiNmQyMjgxZTYzN2ViNmM3MWY3NmUyNjMzYTExNDU2NTI0MGVlZDAwZmFiZWE5ZWQ4ZGUyOGM4MzIyMWY4Y2I0ODVmNTEyZDkwMDhiZmM3NGEzNjZkNGMyYjRlZDE3MmQzNjdlMDI0N2NiNjUwOThjMTEwMjgyZTgzMWRmOGU5YmQ0ZmJkNWY0ZGQyYjdmMjQyMGMyM2I4NWE2MzdhYTIyNjJjM2NiODg0MDVmNzA3MzBjOWFiNGM5ZDBmMjI3ZWU0ZmE0ZWY5MWVmZTlhNTliM2U2ZDg0M2RiODc5ZjU2NTAwNTllOTlmMGU0YTAzODY4MzhlNmY5ODc2ZjY3ZDUwZjg5ODMyZGRhNWYzMGE5Y2JmZDcxMDEzNGY5YjViNTQ2Mjc0OTZhYTNhNDMyMTJiMDdmMDNkYjExZDNkNGY4NzVkNDFkMWY0YWM0NTk2OWRkZWY2OWY4MWEwNmQyYjBjNjQ2YzljZDkzMWNmMjUwMmZlZjBkZDMyYWJiZjA5NTFlZDMwM2Y1Mjg0ODI1OTM0Mzk3ZmMyMmU3ODY5OGQzNWFkODFkODIyNTZiZjllMTU0MDBhMTA5MTYyM2E5ODI2ZjFlNTc3OTIzNjc0MTdlZjAyNTg2ZDY0ZTY1MGRhOWFjZTJmMThhYTBhMTI2ZDg2N2NhYzRiNWQ0YzkxYmY1MjA5ZTUzNTk1NTYzODZmODI3MDgzZWI1M2U4YjQ3MDlmZmZhYmU5MmM2MWQ3OGZmYjVkYWYxMDI3NGUyNDJhNzAwOTFmM2Y5YjlkNTk2YzEyNThjOWE2MzM4NGY0YjA1YjAyODY2MTIyMjE4MWMwZmNhOTY1ZjBhMmNiNTZlNGI1NTZkNmZiZmY3MWI2NGQ5YjM1OGRhMzFhYTM3Yzc0ZmY1OTYyZmI4ZDk2YTM4M2QwNDk3MjRjMTllMjQ5YzllZGJiMmEzNzViMjNjZTMxMDRkYTBlYzU4ZDI2MzViYTAzYjU1NDIzZmEyZGI3ZWIzNDlhNGZjNThhMWVmNTQwZWU5YTAyYzJlNzAzYzY4ZDdmODQ3NWY0MzRkZGQzMjAwZGIxZjA2NzQ1NzkxYTNhY2MzMTYwZGJhNTBhMzkzNDQ3ZmZlZWY2ZGM3Yjk4ZmIwNjY4NGNjOTBmZDg1MjAzZDExOWRjZDgxOTllNGQ5YTg5YWUzNDY3YWU0YmIxOWZiNzFjZjc0NzAyOWMyNDA5NmY5YTUwZQorU0lHOiAzZDFiNGI0ZTgyMGQyNTBiZTJhOGZhOTcxZTU5OWUxZTk4OTc3NTI4YjJmOTMwMTg5NjgxYTkzYjA1ZTFhNzA2ZmM4MGVmZmE5NGU5MjliYzQzOTIxNjU2ODk3Mzg4Mjg4YTliMjkyNzFmMzdhMTRiZTAxNGI4NzNjNjhmYzkwNAorCitUU1Q6IDg2MAorU0s6ICA1Y2FmZDgxN2E0NDEwY2NiMjcxMjE3MjNlZjMyMDdjMTczMWEwODYxOTQ1YmU5NjI3MTRjMGVkOTUwMzhhMTk1CitQSzogIDRlYTA4NmJlNDNlY2UxYzMyZDA4MDU5YmJhZGM5ZTlhMmIyZjRmM2ZlMzcwZjFmNWNjZDdkYmRlYzBhYWYzMDMKK01TRzogNTBiMmYwNTM0MjQxODA0NmQxNmEzMGJlNGZjNjJiNjdkYWY2YzE4ZDJhNzQyNDJiN2NiNTViYTkwYWQyMGI2Y2FmZGQ2MDE1NTczN2MyOWRlNDhhYTVkNzk5ZmU1NDk1ZmU1OWRmNWE5YjhjMGE4ZTU0MTg5MDQ3NjNmYmFkODNlYTY5ODY2NTFiYWMzMTExNzkzOWNlZjRlMGM3OTkzMGQ1MmRmZDdkYjQzYzMxYWRkYWUzY2Y5M2UzZWZjNWE5MTZlZmQwZDY1ZmRjMzA5MDlmYTM1NmNjYmM1MjQ3ZDdhYWEwNjcxMzFiNmI0ODIwZmQwMmY4ZTM5NWY1YTk3MDRjOWJkZDc1NjBhNjExZDYyNTU5YThkZmUxZDI4NTljNTI0ODZjYzExZWQzMzMxOTkyNDg4ZjQxNzUyMGQ5MjBkYzczYTMyZDRmMDgxMTAwODI1MDBmNWE5NjJhMzA2OTMyYzZhNzgwMjk1NWNlZGFkN2FiZjUzYjBmMTlmZTQ3OTRhMzFkNmI4NTUzODAyODQzMDZjY2ZmNzFhNDAwNzg1OWEyMzI4YmIxOTAyNGM0M2UxMGQ3NzA2NGQ4NjZkOTYyMmQxNDJjMjczNTRiODRhYzNiNGY4MjMyZjdhMmY4YWY2NDA5ZDVjYzc1N2ExOGVmODEzZGZhZjRiOWJjMDQwY2IwMDZkNzdmMTQzNjQxYWEyMDM2YWM3YmM5MjhkYzk2NTg1ZDllMzZjN2JjOWM1NjRkMjVmMWMyY2MwYmVhYjlkNWYyMDdlODRiMjE1ZjFlN2FhNmZjMzI4MjM3Yjc5YzM5OTIzYTRlMDljN2M3M2RjNmIyNGIxNDE2Mjk0ZDc5OGE0ZWQ1Zjc1ODMzNmQ5MTVhODcwYTdkNmI3NTkyYjViODhhYWNlMmRjNWYyNjdiZGI0OTExNDFjYmJhZTJhNjc3NDA3Y2MwOTU1Zjk2MTk2MjU5OTMwNGJhMGI4Mzk2NzFhNWMwMDBlOTIwMTA4YTA1Mjk4MDg3ZTQ5NzcwYWVlZWFhYjM2MzI3MjRjYjBmYzIyODU3OTZkYzQxNDgxNGZkYTc4YTU0ZTY3ZjAwYTAyZjc3ZDNjY2RlMWVkOWQ3YjFkZWYxNGVhMWY2MTkxMGJkZjMwYTExOTZmYzYzNTFiNjIyNTRkNjQ0NWU2YzkwNDQ1YjE2ZWZhZmUyODlhMjc4NGI5MmU0MmI3OGE0YTkwMGMzNWY1NTYzMGJiYjc3NjJmZjllYjdmZWY3ZDA0YzkwYjk1NzFjNGZjNzYwYTQxMGRiZmMyNTI5OTFkMGJhMjdmMmQ0MTRmZTY0ZWVmZGZmNGFiYzE4ODE3Yzk3MDZjNjMxYmZhMjAzODIxZDNiOTJjYjMzOGJhYWY1ZDEyMzJiNDYyNjQ3OTU0ZDA5MDI0NjJmYjE2OTZlOTkxZjA3ZmE5YzNkYmNmMjg3Mjk2MDgzMWI0ZGVkOTJhNDIxY2YyMWI3NTMxNjVmZjMwOWVmZTJlZjU0MzhjMDEyNzBkMTBjNmEwM2QzNGY3MWViYzJkYWIxZGE5MGRhYTM1Nzk4NGQyNDYyYmNiMzVlZTNkZTU1YzNhNTVmOGI5OGFlYzIxMTRmNzRjODQzNDFhNjQxMjc4NjNjMTIwYjVlY2FkOWUzMjlhNTc1NmFlNGEyNTU1ZDg0OTJjZGE4MzUyMjVhOGRlYjNmOWMxNTU4ZjBkNDI1YmMxNzJmZjc2NDBjYzc5ZDk3ODAwNDE2ZmQ2Mjk0Y2NjYzcwY2QxY2Y1YjZhOGUyYWEwNzI4OWJkNTIyYmY5OWRjOTZjMzZiZmVlODBlODQ2ZjVkZDc0NmRkNGM1MDAzZTRiZjdkMjllZmVlYTc1MDhhMDE2MTIzNjg4MmM5YTgyYTU2YWEyYzI1NzQ2Njk2NTJjNjMwOTIzYWI0NzBkZGI5NWQ0NTZmN2I4ZThmMDc1OTliYTBkMWQzOGJjN2Y4MTc2ZTNmZGYwMjA5YmQ2Zjc1ZDRjYzExODAzYWZiMTg1NmNiYzBlOTFjNzM3MzBlNGZiOThmM2M5NDhhODdkNWE3ZWRjYzBhNmE4YWM4MTBlYTNlYWE2ZTA2M2NlYzVmNTU2NmNkNmRlZGM1MzdkYjZkNjg2YjgwMjFmNmVhODI1YWQ3NDc1ZWM3ZjFjNWRiZGU0NWQzZmY0YjVlZTUxYzBkMDRmMWQ3NDAxOGViOTFlNTA0MGQwMWM4YjcxYTRhYWJiZGU2MDk0ZDRhZmVjY2IxOGRmY2RlZDczZWE3NWUzYjlmOGNlMTY3ZGY2MjA5YWUKK1NJRzogMjg4NTE1ZmE3MjU5ZjFlYjU4N2ZlOGEyYzQwMzQzNGM0NmY4ZDdlNzViNmQyMmJiMzg5NjU2NmMwMTdkMDliNjk4YzJjODA3Nzk5YzJmNjVmOWNkYjRlYjU4MTUxY2NmYzQ4ZDEwODA2MWE2YjMxNDg0MzJiMmJmYzFjZGFiMDUKKworVFNUOiA4NjEKK1NLOiAgZDVjYWM4NTUyMWFmNzgxZjNkNWY2Njg2MmEwNGIwODdkMGNjZGNhYzkyNmNmZTllNzQ3YmU4ZDVjMjYzM2Y3OAorUEs6ICAxMDBkY2M1MzAzOWJmMDVlYTBhOWY1ODg4MjEyNjkzZDRmOWUwZTc1MjU5NWJiY2QwMjA2MTBlMGFlMjEzNTk2CitNU0c6IGQ1ZTdkZDU5NDkwOTM3NWE0YmUwOGU3NDgyNWQ1OThkNTM1YmY0NmVjMDg0ZGU1MmI1NzM5MWMxMjdlZmY1MjI0YWIyZDE5NGRmYjI2NjMzNDc4ZDAyZmJkYTc0ZDFkYzU4MjFmNzkxYmY5NjJkOGRhZDllNGVmMjQyMjQ4OTE5MDdiMDE4OWNjY2M4YjEzM2QzYWEyMDc4OTI2ZGFlZjI4OThjMTljMmUwYmZlMDIwNDFhOTA0YjlmMDRiZTdjYjUwYWVkMGQ5NjJkMWFkZDIwYjQwYTg4YWI3YWJhZDYyNmNmNGRhMGE3OGY5ZjUzNjg1NTAxZmRmYTU4NTQzZGRmMmVhMGVlYTY5ZTdiYTE2MGY4YTE3N2EyNWZjMjFlOGEyOWM2NjE2MzNlMzBlNTIzYjBlYzAxYjJhZWVlMmQ0MjZlNGFlYWQ0NTc0ODgxMDhmZTVmNTY5Y2Y2ZTJmZGI2OGMyOGYyYjMwNTI4MjM1NzdjZDkzNGU3YjA2MmM4YTM0MjRjZDQzNjdmYjMxNWI3NDRjYTM1MjU1ZDdmMWFmNGVkYzliYzlkODgzNzEyM2Q5NzkwM2I0M2RmMzY3YzdkNDE4Yzc5MzQ3ZmZhZmU3YzdiMTcyNGJiYTM0ZWRlOGQzNTY4ZGI1MDU5ODNlYWQ0N2Y2MmI1NmUzNjE4YzExZGI4ZmYwYmY0OTJhYzY3NTk3ZDJmOTZhNmY0MjBmZjk4NTM0MWI3ODZhZDZjZWFlZGQxMDVkMGQxNTYzYjJkNTM1NDNkNzhlNzI1NjcyNWQyMDRlODJlZDNhMmU2YTZlODNkZjYxZmMyODJhNjJjYTA2ZTYyMTc0YjU1YmVmNDBhMGJkZjhkMjNkMWMzMzBjNzE0NDE0ODVlZTg1ZTcwY2VkMTIxZWFjNjA3ZjU4MDY3ODE2M2U0YmQ3NWM2NzA5ZmYzYjQxZGU4MDU5NGI5ZTJmMmFhMjc4ZmVmYzIxZDczZWUzZjcyODU0Yjk1OGQ5YThmNjNlM2Q3MGY3ZmVhZDhjM2RjYThlNzFiZjRiOWMyYTM2ZjIxMmIzMmViMzI5MmU2MzU1ODAzODY1NTllZTFhMTFkZjE1MjkzYTBjMjFjZDczNjA4Njk4NDZiYTViN2JhODVjOTk0ZjViMmY5Y2M1MGU1ZWVhOGU0YjM2OTFkODg2MDYyYTE4Y2ZiMTgyZjFlOGI2MTFmZTFiYzI2MzE1OWNiOGEwODY3ODdjODExYmVhNDgxMjUzMDAwOGM3MGNhMGM0N2U2NGViMmZiYWQ1YjAyNzI3YTY2ZjJjZGQ2ZGRlODZmNWQyYTk2NDVhMWU5YWE2NmVlMGUxNWI5N2Y1ZmQyMjk1OTZlZTAyZTY2MWNhYjlhNTRlZWUxYjgxZjk4ZmUyNTZlZDZjNTRmZWFhYTBiYTA0N2VlYTM1MzM0NGY2ZTVjNjJiZTFlOWQ1YzA5YTJhNjk5NDExMTEwYzU2ZDE5NDllOTBjMDdiMTkzOGJhOTU1NWFjMWJlODUxMWI1MTAyMThkN2NkZTdlMWQ3NGE2OGFmYjY0MmY4MTcxNWZlOWU2Yzk2YzUwMzgxYWU1YTlkZjMwNjUxODc4NWRjNGRiYzNhNjRmNjBmMjQ1YzU2NGI4MDI5NTEyZjM4MWI1NmVlNzg3NzAzNDI2ODAzYzgwYWIxYzMxMWY0NzdiODkxNzA4YjU5ZmE3NDhmMzJkZWJmNTRkMjQxMzc3MTk3OGMyNjVjOWI4NzExNGFkZjI1YjgzMzdhYTkzYjBlNjMyYTViNmVkYTQ3NGJlYzE2MzI4MTU5ZmJlZDA2N2IwMGI4N2FkZDYxOTY1NDkyZWNjYzZmZDM0NjFjMTAwMGU0MDM3YWIxZThhYzg5YTg1MjRmNzhhZTA5ZDMwOGVhNmM5NGZmODgzNzMyYjcxMmVlYzBlZjA3NzE4ZDMzYzAxMWI5Mzk4ZjhjZmVhNzMzMDc1YWYzMzFmYjNmOTdjZGMxZThjOTlmNmExMDcyNWE2OGM1YzU4ZmRkOGIwYmFhNTAyMjdmMzRkNzNkMjM5MDUyMDM2OThlYWZmNjI2NjU0Y2U4M2Q4NjUxMDg0OTliZTY4NjFmNjE0MWJmYTYyMTlkN2FiOGI1ODQ1MTkxOTlmODgwY2ZhMWIyNmQ5MTk0ZDMwMTcxMWMzMGZiNDQ2ZDZlYTc2NGE0MzEwZjcwZTRiODU5Y2Y5NWZkNDRhYWY4YzFlMjQwZTgwYTcxNjExZGJjZjUyZGE1OGVkYzMyMDMxMWRlMzg4ZDVkOWQ3NjllYjU5YmUwOTMKK1NJRzogNWRjMDMzNjM0MTRlZWFjMDA4NmZiNmZlYmE0NDIxN2NlZjRjNTIwZGI2MTkyNmRmNjgwY2E2MDJkYzExMDAzY2U2YWZiZjNkMTNjOGM1YjA1MjczZDIxNDE1ZTY3YzE0YTJlZTVkMGIxZDUzNTI0MTlhYjliMzljMDAzYTUxMGMKKworVFNUOiA4NjIKK1NLOiAgMTU5YTllZGRlYTVkZTYzNDAzOTg3YjU2NzBkYjZmYWM5OGZmZTVlYzNhNmNmMDE1MTZlZTJjNzBjZTNiM2JlMAorUEs6ICBmNjFmNGEwNGE1YTEyY2NhZWNmYWY0NGMxYzljMTg4ODQ3NWEyYzg5ZmIwMmYyNmJiODFhYjVmNzhmNGNlM2E4CitNU0c6IGQxOTVlNTkwMGRkMzkzMTQ4MWJjMDEyZTc3YmYwNjBhYWYzMWNjY2IwZmUxYTZjNDBlYWYyODZhNjE2NmExNjZiMWVhMzcwNTM0MjYyODRiOTIwYzY3ZmVlMWQ0YjlkODZmYjg2MWNjNmVkZDM0ZTEwYzUyMjMzNzM0ZDljZDkyZjVkYmY0MzM1MTJlZDI1NWFjNmIyNmU1NmY1YzY2NGJjY2IyNjA2OTJjZjQ5ZDA4MzYzZWU5NGUzMzZhY2M0ODk2MDBhNmFhNTEyYTA0MGYxMGViZjE4ZjdkMmNiZWU5Y2FkMTRjNGZmODczNzdhMzI2MzQxOWQ4Mjk3NTI5NDAxZjE1MzM3YTRjNGQyMzI1ZWQ3ZGVmNzYzYTBkNDc5Y2FhNDA4MjY2ODM0ZGEyNDJmM2ExNmI3OWE0NTg2NmI5ZDlkNzFhNDgyOTMxNzY3NGNmZjdhZTZjOGM1ODdiYTRkNDk4MGU4MTg2MTNkM2FkODI1MDdhN2FiMDMyYmJmOTljNWU5YjY0MDM3MWJiNDFiOTFlOTY1ZGMzMWU4YzdkNGIzYmFmZDQ5NTcwNTI3ZmFhYTg3YWJiZjY0MTZjNDdiMWIxYjA5ZDM0MDEyNTMxMjZjYjI0NmFlNDVhY2Y1ZjEwMGJiMWY5MmYxMWE1YzZjOTM3ZTA1ODhkOGIxNDZiM2U0ZDNjN2U1YmY1NzQ4NGU5ODRmZTNhZmM0NzcyZjI0ZWJmODk0Y2RiMzk4MzdmYmQ0NjlhOTIxYTk2YWM1YWY1ZTA3MGY2Yzk2MjRjNTg4ZTlkNGZlNmRkZmVlZDFmOGZlMjBlYjljNDYwY2U2ZWUzOGJmNDcxZGQ1NmRjZjJlM2VlOTk4YjhlN2ZkY2Y2MTJlNzhhMmU3YzcxNzNjMDE2MDk4MmJlZGVjYzJjNjIxZTVmNjYxMWI0ZWYyMTAyZTMyZTdjMjk4MDNhN2UyNWZlZTE1MTI0MzE1OGE3NmVlNWQ4YzFiYjJlN2Q4Yzg4ODcxYmE0MzNjNWU1NDFjMjYwMjY5M2Q5MDExMGJlNzk1YjUyM2E4ZmFkYjYwNWQ4ZTNkN2U0OTNmZTI0NWQ5Y2M1MzIwZDMyYjg1ZDYxMzVhNDRiMTE2ODcyOTQxNGMyY2EyMTU2MGZiNGZlZWNkZWVmMGNmN2Q4ZTA3MTI3NGU4ODU2YzAwNDAzM2U4MDAxM2M3M2FmNzE3N2MzMTk3ODE2YTUwMzJkOTA1OWIxYjZlNDE1MmMzODYxOTJkZDU0YjkwZjlkMzA4YmU5OGVkN2QwY2E5ZDEyZThhYWY2ZjlkODY5Mzg2YWE5ZGJiMDE1OTNkMzdlNzJmMDkwMTI0ZDM0NTUyOThlOWI0YzllYzNjYWU3M2JiOGVlNDFlYjYzZTM4YzU2MTMzZWZkYmFmNDQ5Yjg0ZTFlNDkxZTQ5NmYxYzcwYTQ0ZDA2OTk4NmJhODgxODQyMjA2OTA2MWJiNmViY2I3YjIwNTRlNjNkZjM4MWJhMDNjNmE3Njc0YWJkNjEwNTBkNjkzZDQxYmZlM2NhNTA0NmM2NWZmYjA2YTA3NDk4MDllNThkNGM5M2E5ZmY2OWVkMzA5NTBiZGUxZjk5MjE2ZmZmMjk5ZjIyZjE2YjA3YzI1NGMyNjVhZTBiMTJlMzEzMTYzY2NkZjUwMzZkNDkwNTVmOWE5NjY3YjBiNzEyOTJiYzNiNjI2MGNiODc1NjhmZDI2NzE3MGJjOTQwYzMzMzI5ZDcyOWM5ZTMyZDBmOTE4MGIxMzRiZmY4YWU5M2IxYmZlYmZhMzg0MmZlZjIwYmMwNGEyOTdiMDBhODRhMGY0MjhkNWY0MmZhYjg2MTQyOTk2ZDRhZDllZmFiYzQ5ODUyZjg4MTJmM2JmYjVlNTc1MzllMjE4NmViOGFlMjI5NTgwYmM2MDQ0OGFjZGVmNTcyM2M4ODE1ODhiNTM3ODlmMDViOTFlMDIyODkyMjMyNTJkNzUzZjc5ODEzNzc5YWNlNzA1ZTA0YWVkMTUyNjVkM2JkZjJhMmU0YjE1NjU0NzcwYTI3NTg1NGU2NGNmNDQzOTA2MDdhNDVkN2JiYTlhZjNlMWEyZTI4MzA2N2ZjZDZlNjMzYWEyZDI0MDNiZDgxZjdjNzkyNzY1NTEwYjU5ODQxMmY2YmRhMDdiMmE5NDViOWY2ZDQ2YWIyZjdjMzIwMDc1YmM2YjYwYTgwZGFhNDRhZjM5MWY0Y2Q1NjIxMzFiYmRkNDA3ZDY2ZjhkYjEyNTliZDc2ZmE3ZTRkNTI2NGUxNDU1NDZjOTQyZGZlOTAwNworU0lHOiAwNTQzNzEyY2VmYTI5YTIyMGQ5MGY4MWJhYTRlNGNmNzdhYzY1MjA4YjJkNWNlOWZkMTdjZTIxNGFkNGE5MzdiN2ZjNWM3ODY0MTNiNTgwNTFjY2EzYmI4YjJlYjU1NjU3ZDg5NTcyYmM1MGVhMmU1ZWNkYzU1NTA4ODQ5MTYwMworCitUU1Q6IDg2MworU0s6ICBlZGEwZmVhYzBmMmFmZTAxNzQ0OTE1NTI0ODdmMzk2MjE3MTMzMmI4MjJkYzNkYTQyNmY5YTVmNjJiZWY3YjhkCitQSzogIGVmZjI3Y2I1MWY0ZDM5YzI0MmYzMjMwMTlhMTIzNDgxOGVmMmU0Y2QxYmRhYmMwZjJkOGQyMTM0NThkYzQ3MWEKK01TRzogOTAxMTE5ZGE0ZWQxODFhYTllMTExNzBiMjA2MjZlMDBhYmYwYjU0ODI0NWUzZGViZjk0YmY1ZWQ1MGFlZWZlOTQyYjQwMmNjOTk0ODk0Nzg1MmRlZGYyYjUzMDQwMTc2NjU3NDljZDQ3YzIxZmM2NTJlZTk5NTY3OWZmOTMxZTMwZTk0YWY5OGI0YTk4ZmQ0NGU4NDllOTg0NzBmZTBhNzZjZTgwYzYxZjgzZmI0ZTg1YmE1MjNlZTNmZDI1ZGIwMDAwNTNiNDlkMDkzMGUzYjA3OWU4NjZlMTUzZjdkODYzNjdmMjNhNGM0YWJjNjNiMzA3NTQ2MWU5MGU0ZmQ4OTZkYTA0OTJlMjdkNzE0OTQxZTk2N2Y1MmM5M2ZmYWVjNDQ4MDNmNTc4NzdkODY2ZWI1ZjhjNTI4MTc4NWFhNDgyNjc5MmUzOTY0YzY2NTkwODIxZWVhNjY3NTIwNzQyNjQwMThhNTcxZjViMDEzYjM4ZTE1MmM5NWMwMjQ4YWU2MDM2ODIyYTY3YWZjOWUwMjY5NDU3MzE1MmI4NjRjNTZjMmY3MzBhMDgyMTBmODVlYzQ2Zjk4NGE2NDNkNTE2YTE1ZmNmYWE4NDg0MGY1MTIwNDdkMTEwZTA3MThkMjkzOTU1ZjAxNTgyNTdmYmEwZDc4ZWI3ZGYyZjBiNzdlNmVlYjc2ZGI1ZTcxNzA3MzEwZTgyNzM2MWNkNGUxMTk3NDBlNjM5MjJkYjQyYzJjZWI1ZWUxNzVkNTBkZWNjN2I3NDlmZDIzMjViY2UxZTZhOGY3MTBmZmNjMWUxYzliMzNjMzgwZTUyYTY0ZGFhOTU4NWZhYmU0MDZkOWNmMjQ0ODhmZTI2ZjNhNDk1ZmIwYWI1MGUxZTJiYWQ4MjM4MWFhMjI0MzEwOTljYzhhNTY5ODEzZDc5YzlkNzg1NjljMGQ5NWRhOWFhZDJiZmI1Nzc1OGQ1MmEzNzUyNzUyZTAyM2Q2NTFjOWNiNjZhNDEyYTVjODBmNmJhNTQ3OTNmN2VjODdiNGM1OThmZWQyY2UyNGFiZDc2MDg3MDg4OTVjNDY3MjczNTlmZmVjYTZkNmM2MmUxMGE2NzhjYWE3MThiNGNkMjYzMjkyY2ZlZjUzNWI5ZmJlMjc1NmI3Mzk2ZDY5N2IzMTQ2YzU1MWU2YWFjMWY1ZjFjMjRiZTliNjdhMWUyYTJhZmY3NDUzMDFiYTZhMjEyMjE3YzUzZDY4MTY4MWJiYjQwMWJmNGE0MzY1NmY1ZDE1Y2RlOTY5YzE3ODAwOTlhMzMyMzdlYjE5YTNiODU4NWQ2YjVkZWEyZmI1Nzc4NDVmMjVlZTJhODJjY2Y0YjI4NTAyZjkwZmU4MGI4Y2RjZGYyY2NmOTNjNDM0YzBlNmFhNWQ4NzUyYTQ0MzQzYzJiMThkMjBmZTQwMDRjNDcwMzg2NTkzNTZmODdhYmVkNTQ0NTAzNGQ4ZTJkM2QxNDc2OGY1ZWYzMTJjZjEwMmE5ODg0NjgzYmNjMGNkOGE3MWUzZWMzNmZiYjYzMzRhMWJiYWVkNWQyYmYxMDQxNmQ4MmJkNjUzMDQ3NTM4MGFiNmUyNTc3YmJjNjljZWJkYTc1ZmFmMDJhZDgyN2I1NDUxODIxMzIwNmZkNGNkNjZmMjUyYjIzNGFjYTllZWRlN2UzZWViODE1ZGRjZDhkNTE5YzVkN2Y1ZDlkMWZiOWNhMGZhNDQ2Nzk5MDA5NWZhNDYyMjBjMjBhMjA3MWRmY2FhZDVmMDI0ZGFlMzQxNmY3YzQ5MmQ3NTc0ODhjNDlhMmU0ZGY0ODNiYzliODAwOThlMGQ1ZDY4M2ZhY2I4Yzk2MDgyOWRmZjA5YjMwMzM2OWQ0NmNiNTczMzFmZjIxNzkxZWUyNWQ2YmU3ZGVjN2ViYWYxYjMyNDc5YTdmNTE0ZGM2NDcxMDVjOTQ0YzM2ZjdkYmYwYTViNTg5MTI4ZGJhYWE0MjE3MWQ2NDJmMjVhOTgxY2UxZjgzNzlmOTE2OTBiMzZhZjc3NDY0OGQ1NjI0YzA4ZGJkMGE5MGY3MDg3MTZkZmFiMjAyNGRhZTg2NWI5YzQ5YWIyNzQ3MzgyNmNkNGEwMTBiZmRiNTIwMTFkOGM3Y2IzZjQyMWNhOGNhM2NkMDQ4Njg4OTE4OGU2N2RmMDBmYjhjMmE2NDNlN2FkYjJmODI3OWY3NjNlNWI5YTgxYjZkZmMzZjcyMWZjNWY2ODQ5ZjY2NzM2Nzg4Y2M1NTdjNGViYzZmYzY4ZDZmNmFjNzdiZWRkYThhY2IzNjIyNDNiZGE3NGU3YjIKK1NJRzogNmNiYzdlNmY1ZTEyMTQ1YjAxNjg3YWQ5Y2E2YmY2ZTQ3Zjk0MTdjMmNlZmFkM2ZiZDY4ZmQ2NWRkNzRmYWE5NzUwY2JhOTkyZGU0Y2ViY2ZjZDM1ODA4Y2JiM2ZmMTJjOGQ5MzA3OTlhZjM2ZWZlNzk3NmJmMmZlYTc5ZTNlMGUKKworVFNUOiA4NjQKK1NLOiAgZWMwNTlmYzZiZTk4M2MyN2VjYTkzZGRjZGNiNTNhZjcyODYyNTVkYTkxZTJhNTZhNjg0ZjY0MWVjMmQwOWQ2ZQorUEs6ICBmZmM2Y2I3NTFjNzAwNzFiNjVlYzJhYzZiNDVmZDFkNTVmZTgzNjk2NWY4MGIzZTdjNzg0ZmM3MDRhY2JkZjY5CitNU0c6IGQxYWM2MzI1YTRlNjkwZmE3OTUzNjg4M2Q1YzIwZWFjYjdkOTY0YzAxNzhmNzQyYzJiMjM3MjdkZWI2MjY0NWFmN2M4MTkyMmEwZTcyZTVlMzBiNTgzOWEyZWQ1ZTU2N2VjMzFjZTIyNDExNWI4MmQyYmYyNTFiNzM5M2YwMWIwZDAzYTYwMmJjMTIwYWU2MmFmN2ZiYzM3OWRmY2Y5NWJiYmJhOTg0YWFiYTM0ZmUyMTJhYzk5MDAzMzI4YjgzMmMzNTMyZDQyZWVlMWUxODc0ZGMyMmFkNjdkYjZjOTFkYmJmYjJiNDU3ODVkYmNkMzk5MTdkMzZmYjQ4YzFiNWQ2ZjM4YmRkYTVkMjhmYmJhNjQxNzU1NzVhZmVhNDZjOGVkNjc1N2ZmMzAxNjRlMGRmMmU3MjE3NmU4YjZjOWRiNWI1ZWYzOTBiNzJmMmQ0ZDk0ZTNiNjZmMGQ0NGE3ZTBmMDZlODlkZWJjZGYxMzYzYzBlNzVkNTBkYjViYjcwMTkwZDE5ZjY2YTM5YzZmN2RiYTcwZGZjZDRhOWZlZDAyYzJmMWQwNjdlN2M3ODhjNThmZGIzZTE3YTIzNzdjZTQ4NmVjNjU4MmYzYmE5OTdiYjVmNzBjZDYyMTAwMjk1NmY1MTMxYWEzYTE2MTdjMGNlYmNjZDkzOTFkZTEzMDdjODU5NzBhOGJjMTU1ZjUxOTg3MjY2ODQ1MGM5MTQ4ODY4OWY1M2MyYzFhN2VkNTNmMzg4Y2IxM2EyYzM4OTZmZTViN2QzYTBkYzE2ODNmMjc2NjRjOGJlYWVhNjgwYzhjYzU0YTkwZTRjNmY5OWZiZjA1ZjJjMjJkZjYwZGU5YWVjODBjNzliN2Q2NjIwNzA1MDY2N2I0NTJkNzg1N2Y5YThjYTcyMzI4MGRhYzc5OTJlMjA3OTI2N2VjM2FkOTExNDA0NjQyYzRlMzI2YmZiOTZiNDNjODk0MzRiYTRiYzc4YzI1MmY0ZDRjYThkMTNhODg3NGM2ZmM4MjUyZWEwYjU2YzZiYzc4Njg0N2Q0MzE4MzA2ZTFjNjUyYzQ1MjU4NWVlZmQwYmQ5ZGQzYzE0OGE3M2JhODZlZWRlYTk0NWYwMTY3MTNlZDdkZjA4NWQwMDY2Njg5ZTc5MmRhY2IyYmZjMWViNWM4MjQzNzJhMjZjNWU5NDRhYTc0NDRhYzk3NzNkNGExOTIxZTQ5YmRkNGY4ZjZkNzg4YzI2M2ZlZTA0YzdiNDQ0YzUzMDVlZGI2MzNlMWZmZTBiYTRlYThkYTAxMWE2MmYyYmJmZWY0Yjg5NWFkM2YyMjRjM2JhM2JmZjBjOTVkNzU3NTBjOWJjYzY2ZmY4YTIwYjZjMjRiZGU3NTgxYTdlYzM4NjZmODcxNmY3ODFmNDZkY2FkNDVhOWViY2I2ZWQ0Njk1MzM2ODM5NzAxMTczNWQ0YjUyZDAwZThkYjM5Nzk5NWRiZGIzZDRmNDI1NDY4N2YwNDY4OGEyNjhjMzA1YjJiMWY2MjJjZjUxYjE3NDc3NWJhZDdmNjY3NGFkYzJlNThlMDVjY2U4NjVmMTJkNzU2OWM4ZTliMzViY2RmM2NjY2U2MzMwZDA4Y2U1MzQwYTdjNjMwZjI3YTZjODA4NmI1MTQ2YjI5MmZjYmY1MGZmNmFhYWVmODg0OGE3MDdiMjU0M2M2MThkMTdiZDk3NmMyNDBiYzc5ZDMzZTAwNGU0OTUzNDgyOTE1ZTdlNmVmOTQ5NjRiZGVhNGUwMmRkN2MyZjQ3NTIzNWYyYjk5ZTQzMjI5YzlhYzNhYmEwZGI1OWFjMmRhMDNhOWVlNGYzN2RiZjI0N2EzM2U2ZGZlNWJlN2M3ZjgyNTg0ZjA0YTQ2ZDQ5ZjY2MjFkYTMxYjkxYWMzZGFhNGQ2OGQ0OGE1NjY1OWI0NDhjMGVkMzY1Y2I0YWEwY2ZkOTA4ODUzZGY1YmJmYTg4ZTYwZTEwYTVhMDAyYzMyYWIzMzMzZjJjMzliYmYzZWUwMWE0YWE2MGQyZDAxNDIzZTYwOTdkYzU0MzA1ZjgxYTJkOTNlMmY2YjRlOGIzNTE5NzFjYmYyNDU3ZGM3NmUxZmI4OTI5MzM4NDc5OGVmMjgyMzRlOWIxYTQ3ZGVkYzIzMzZmODZiOGUxM2M0YWVmNzkwZjVhMTEyMzljNzQ3ZDlkODY1YzlhMTVhZGViMDcxMDcwMjY3ZTUzNDYyNTY2NDhhZGMwZmE0ZGJkZmQ3ODdjYTE0NjVmYzI0MGEzMjRjM2NhZjI5MzFkYTQxNDk5ZTI3NWZkNGIzNWY2ZDA4ZGIKK1NJRzogYTdiODhlNWFiZjEzMjgyNGJkZGU3N2M1ZjhkZjk0YWIyNjQ4MWY2YmVlNjYwZWExNjIyNDcwODJhMjUwZDM5MGM3MWQzMjBhZDA2MGQ4ZWYzNDFmYjY5YTQ4MzI5NGYwZDZkZTcyNmYwYzg2MmZhMzdlYTRiYzZkYWI1MjE1MDkKKworVFNUOiA4NjUKK1NLOiAgZjE2YWJkYmNjMGJjYzYxYTFhZWUzYWJkODc2N2FiNTJlNWY3OTk5OWJiNzdhMzk3NmNiYzgyNjcwZGZkMmY3MworUEs6ICAxMGY0NTE3MTlkYjBmZDIxMzc2ZTIyOGE0MWMzMDM1YzhjMmJjNDJlNWFhYTkyNmZlNjA4ODc4ZGJiMGRjN2FiCitNU0c6IGJmYWNkN2RkNGVlYTQ2N2RjY2U0MDRmNGEzNTIwYTQ1Yjk0ZWJhYTYyMjE5N2QwMmQ2MTUyOWQyYjNiZjI3M2M0ZWUxZmI5NWExODBjOGY4N2RlMTkwYTJlNWVhNzBiODRhZTFlYjZmZDQ0NDdkOGEzYThkZWQxMGY2ZWRlMjRmMGViOTJiZDMwYmM2NWQ0ODcxZThmNWRhMDhjYmU4Y2QzYzBhYzY0ZmQ1YTU3YTZiMDY0YTg5ZDUxNTliNDJmOGIzZTVhMTgzOGM5Y2IxOWQ4ODEwNmMwNzczYTI3NWNkMmExZDYwOTkzMGJmNmIzMGFlY2E2MmI5N2UzMTliYmZhOTM0ZjRkMGExZTZhYzgwYmFlYmNiYTJkOGVhNGJlZDljYTg1NjJiNGFjYjU2OTc5YmY4ODUzMjRhYzQwYWI0YTUwYmZiOWYzNDkwNDlmYzc1YTBlMDNkZTRjYzQzZWFlM2M2YTZjZmZiNWY2YWU2Yzk0NTA0NDE1ZTZjN2VkMzA0NWE5MzJmNDdmZDIwYjlmMzQ4M2E3N2I2ZDQ0OWQ4ZGZkNGE2MzhkYmY1NmYwM2YwZjAzMTg3OTA1OWIyZmI0OTc2Nzk0M2Y0NmIzODcyZTJkZTU2N2Q1ZmVmODBiMDI5MjVlOTg2M2UwZjFkMzFhODBmNGU2NDUxYzMyNTY5NGI4MGNmMWYxOTE4YzZlNDk4ODc4ZWRjNDdjNDUzMGNhYzQ2NmYxYTI5NGQ1NWRmMDlhZjRmZGM4MDcyYWRiMWJmMjZjYThjOTJmOTEyYTJiOWZlYmM4Yjk3YjU4YzFlOWQzMmM3ODAzMjMwNTI5NzJiNmZiZDUzMzA0YzA1MTkzY2FlYjY3YzViZDNlNjc0Nzk3MjVkMjk3ZGZmYjA2ODkwYWJmOGNkOWU0MjQ1OGUxNjhhNjExOGY5MDViMWQ1MzQ4NjAxNmY4NWRjZDk4ZGQzMzllMzQ2MDUzM2QwYjhhNDlmYWU2ZGMxYTA3MTcyNWU2YWU1ZjI5NDQ3OWVlM2JkY2FlYjc0MDYxODQxZmIyNjA4ZTg4YTQ5ZmQwZjM4OTViMThmODViOTBmNzI0MWRkMTM4NzcxMDA1M2ZhYTYyYmFlNzVlOWFlMzkzNjljMWMwMmRlNWQxOTI0MmVmYTE2ZTExZDQ0YTRiYTU3NzhjZTc3MjJhOTFjZWMwYmMwYTA4YzA2OWJkZmExMzBkMWM2YzRiNTZjNmU5MzU0MjQwM2NjZjI3Njg0ZGVmNTdkZWYyNmRmODZjZWQ1NzEyODJkYzk2MDk3NDYxOGYwYTc0YTBjZGUzNWI2NTNjYzZlNzczMDQzMWI4MjVmZmI5YjhhYWFiM2M3YTM5N2M5OTJiYzJmYTIzMjcwZmIxMWVlNDMxYWZkNWY5YTY0NDQ4MzAxMTE3Mzk5M2YxOTQ4NWRkM2NiZGQxODdiZDNkOTk1ZWJmMDAzMWIxYjBkZTRhOGRlOWMxNGViNmY3ODBlMzZiODkyNTc1NmI5NzkwNmExOTY5ZDg1ZTk2N2Q4ODBlNmU3ZGRhNDJmZDNjMzAwMTlmMTFkNzA4MTA3MWVlZTY2MjY0MjI4MzZiYmVkMjdkNDZkZDBkZjFmZWI2NjEwZGM4NTlmNTEzYzBiYzY1M2Q3MDIyMGZlMDQ4ZDJlOTdjMmUwNmFmNTMwZTExYmRjNzAyOWJjY2M1YzkyZWRlY2VmNWU0YTJlMGJlMmQyNTFmNDQxNWRjYTNlNTViM2E4NTBmMjYzMGI4NzllNGUwMzZjZTg2MzNiZjIwOTIwYjY4MDk0MjE1OTI5YWNjYzdiZTQwYzU3NzhiYzU1NGU2ZWRkN2U1NGM5ZTE0NWIyZWUwN2I2NWQwNjFjMTFkZTBlODNmMzgxY2U0ZjU3YzY0ODNmNTEwNjkzNjM1MTEwNzRjN2E1NzczNTNiNDVjNmViNzExOTlkY2U1MDU5ZmQyYzQ2MTFiMDU0MjM4YWFhZGYyYjZiYTUzNGJmZmZjMjcyMmFlM2UzMWZmNzlhZTJlYmNhOTljYzM1MDdmOGEwMzNjZjRmZWE3MGM1MmY3ZGI1ZGU0NDJiNDJiOGQ0MWU5OTAxMmU0MmNhMGU4NWE5ZmI2ZDRmMTY1YjMzMGRlNjM4M2M1NzI2ZWZjYTJmZTk3MTM0MDAwMmY1NjJkYzZjYjhmMmZhZjA2NjU3MjVlMDk3Nzk5ZDA5NjA5MTg2NGQ2NmE5NTBhNTc5MDk1M2VlMTZiOWVhNTgyMDA5MjE4NzA4YzRhY2NkODEzODEzNThhMmM2ODlhMDQxZDAyZDc4NjEyMQorU0lHOiAzM2Q4MDUyOTA4NjliOGUwNGZmMDg5ZmFhMmQxZmFiODM3NDNiYWRhNjhhZGU1YjM4YWU1ZjBjYzU4YzMzNzRlYmE0Mzk0M2MxZjUxMTA2NzhlYjM5YjQ2NTg2MTE4MjJhMjZkMzVmZmUxOWU5Y2ZjYjliYTk1ODllNGVjMzEwNQorCitUU1Q6IDg2NgorU0s6ICBiZTc5ZDFhZWVhODZlODZmMzk4MTM3ZTYyZmZkNzllNTBlZmY5ZjMxM2YyNTE5MmY4OWU1MmYwYjRiYmQ1ZDMyCitQSzogIDE4N2RhYzg1NWNhNDQyZmQ5YTNkZGMzMjg5YzI0ZWIyZDI2ZjdhNDBmYjI5ZDhlNzQ0MzFiMjUwMjJjM2EwY2MKK01TRzogNmQ2MzJhN2QzYzliZTUzNjQ5ZDBkMWE1ZWVkZjUxOWE0MTNiMTNhYzY0ZTlhZDg1NGRmYTA0ZjJlMTczMjlkODIyYmU1NzNkOWUzNWFjMDY2ZjAyMjIxM2EzNDQ2MjBiYmEyODlmNTMzMTY5NTU4NGQxMzQzZTgxNTQwNWFlYWJlMzg2MWQ2M2IzYTViOTJiOGNkOGVlZWQyMjgwMjIyYWJkZTMwYTFiY2NkM2YzZTQxMWFhYjkyMmZhMWJhYTA5N2FhNWM3ODBkMGVhZWY5NGVhMTBmZTIxZjdkNjM5Yjc2ZDQ3ODhhZWI1OTI0YTlkMjYyZGNiYzU2ODhhM2U0MzU0NGJlYzA4OGNhMmUwZDA2ZDc3YTcxZmI2NDFkNTUyMjY2MTQ0NTJiMWUwODA3YTlmY2QzY2E2OWJmN2YyNWQ4MDQxNDcwY2ViN2IyMWVhZDAzZWMwMzdhMTYyOWJkNTAwYWEyMzNiNTliZTQ0OTc4MjEwYjZhMzY2ZjIyM2FjZmEwNzk3OTU0MDA3YjAwZWZiNGZmYWRiNWZjOTJiZGIzNzg2M2U1MDJkN2Q3MDY4MTAzOWVkZjMzNzcwZGYzZDFkZTM0M2RjMzVmMjI2ZDVlNzM5NDRiYTAyNTVlMmE4OGVmNmM0MWU0NzJiMjE0NTY3YzI0OTU5NGE1MDg3OGI2NzMxYzFhZWI1YjEwZmE5MWZhNzZhMzdlMWY5ZjFjMDBmZGJmZTM0ODVkZWQ1NGEwMDlhYjYxMzM5MjcxMTU2NjhiNTlmNTExNTUwOGRhOTM3MGY2YmM5MmExMTg1YzBkNWNhMDFkMjkxZTE4YzU0YWNmYWNhNzM4YmQ3MTk2OGEzNDJhMGNiYTYyZTRiYjEwNGE1YmIzNzlmYzgzZWUxODIwZDFkYjk4MDI1M2Q2Y2IzODNlOTVhZjE1ZjUzYzg1ZDE3NTg5MGRkZTVlNGVkMDNkMmQwMTM1ZTNkNjBiMTgyOTNmNWI1NjQxZWY4M2M2ZWNlM2Q1MjU5OGZjNjM1MzY4NmU2ZjdiMDlmZGVjMWY2ZjE1MzY3MmQzNGI0ODliNDhhMGRiOWU0MmNlZGE3MTc1NTQ4MWMwNDcwMTZjMjI1MzRlOTBjNmQyMDFlZDc4NTk2MDI2MzZlYTc3YWU4YzY3MzRiN2M0YzViZDk5NTc5YzUwODczMWM3MjQ2YTI5NTg2ZTQwNmUxZDkzMmY2NzEzMDcxZDRiZWE2M2RjNWUyYTM3NjFlMTYwMjRkMmMzMjg0ZjcwOWExZjJiYTA4NWVhZDMyMDBjNzA0NjI3NWNiOTZiNjFhNjBiNWFjNTU5YmM0ODhiZDEwNjQ2N2MzZGU1MGJmNWQ3NDBkMDVjOWNkNzAxZDY1YjdkYWVhMjllNjRkZDVhOTdhZGI2YjVjODJjZjdmMjMwMTdhYTdjYTFhYzlhMzllNTgyN2ViNDdlMjBkMzU5YjY3YzdkNGUxYThlM2UyN2M1MmQzM2Q5MzAzYTU5MjYyMzQ4NGQ3OTdiNDAyY2JiNDU4ZDFhYzJlYTUzZTFjNGY3YWJiNzBjYzAyOTU1NGEyMzQ1NzRkZWY5YmMzYjBkMzgzNWRjMzE0OTAyZTI1YWJiMjJkZmRlZGRjNjc5YTNjYzhmMDczNDBiMTVmNTc2MmY0NDA3ZjM4MDM0MjU1NGVkMGM2MmY3M2I2MTgxNmVhOGM1Mjk0NjFlMWJmMGU5ZDFjMmQ1ZTRjNTc0NjMzNmJjMGUxMzI4NzNjZGUwZGMyMTU4YjU0ZmExYjY3OGEwMDZiNGQ5NWVkYThhOTU1NzE0MjczYjdjYzVjZjJhZGQ5MDk0ZDQ2ZTQ5YWJjMDk2YTQ1ZjQxOGUyZWRiZTk5ZGQ4NTI5MTE2ODgwNjRkZjdjZjA2MWQwN2FlZWY0Mjc5NTY5MGY0OGM5YmExOTU2NTQ3NWQ1NDY4YTllZjQ1ZDdiZjc1ZmQ3MTE4MmRkNmU2NDAxMzhmMTgyYTZhMGM2Y2JiZDAwYzQ5NWM0Mzg5NTMwYWM4ZTY3OTYwZWI1YzU3NjNmNTQ4NGVhYjFjMWFiODUwMTQwZGEwNDJiYTQ3ZWQ4NTI4ODAwZDQxNzg3ZjA3NWZlMGQ4NTUwMWE3YWI3NjYzNWQwMzQxMGQyODZjMGUxN2RiNDAyM2E3NjM5NzQ2OGNjYjA5MWNjNWFjMWY2NDM0NTg3OTEzZWFiOTIyYjUwY2E1NTY3MDE2ZGRlYTMyZmI1MzI1NWJlNjdmMmRjZjlmZmE4NWQxMTdmMWE2NTVmYTcwZGQzYTU0Y2Y5OTE1MzFmMTkxMzBlYWEKK1NJRzogNmRhYjU5M2JiMWQ0NDhjOTc0YTY1YzZhMGI2ZmFkMjJiNDczMjYzMmQwMDQ4OTE3NmVmMTI2YWE1OTAxMDllMGE3MjNhMTEzMTA3YjUzZTE3ZDY5MGEwZDQwYjBmYTMzNmNjODdmZDVmY2U4ZjU0MWFjY2VjNjdmN2QxZWJjMDYKKworVFNUOiA4NjcKK1NLOiAgMjY5OTUyMTcyYzNmYTk3NmRlZmJmNDBiZDZlZGQ4ZjE1Y2ZkNGJlMTBjNzU4ZTM3NDFkNzQxNjJkOGVhMjI5YQorUEs6ICA0YWVhNTdjNzIxZTNkY2NhODIzOWU5YWQ5YjIyYzE5YmFiOGRmNzJjODg3OTNiMjRkOGRjNDdjZjk3NDBmY2Y4CitNU0c6IDdjY2I2YTA1NzBjNTMzNzM3YjlhNTM0YTM0MWE3YTk2ZGM3NjUyOGI5OTdhOWI0OGU2ZTBmZGUxMGY0NzRiMjdlYzk4OTkxMmQxNzZjYWI3NDJkODlhODQ4YjM2NjZlOTI3N2Q2OTViMDIyZmQ1M2E5ZWI4OWU4OGM3MjAzOTllMjRlZDI1ZGI5ZWIzNWQ2ZGEwMDllOWYwMjRlZjhlNjU1MTY1YmRlZjFjMGQ3OTdjNzRmMDE5Y2Q1OTFhMDQ0MmExMmQxY2E4OTM4MzZjYTI2MjhiMzNlODU0ZjM0MjhlZWM0YWE1ZWQ4NGY0YmRkMmVlZjhiNmQyMjVjYWY5NDk2ZGY5ZWRmZmQ3MzVlYTU0ZGIxYmRlYTg4M2FkNWQ0N2ViMGJkNGE2NjUzZjBhYjAzN2YwNDBhNDE1MTdhNzc0MWY5MWU4MmZkYjZmZGEwNGYwZGZhMWJjZjhiOWIzN2JmMmJmYmQ4NzMyN2E2MzZmOTA3ZmRmOTY4ZDAxODlkMWExMTgwOWM0MjMwYmE2OWQ1Y2JkODRmNTYxYmNhYzNhZDAwMmU1NThjNWI5YjA5N2EwMTkwMmYyOWNlM2YxZWMyNjQxNTNkNjY4Yzc4Yjg0NTEwNWI5Y2QyZWYzYzk0MzUzMWI3NWFhNDI4ZjE3OWU0YjM0MThiMWQ1YTRhYTdhYjEyMDNlZmE0OTVjODc2OTYyOGViMTA2M2E5MzdiNzNlNGI1Y2QwY2RhMzNkYWIwMWE1MGM2NGZlYmQ5NzVjNTdhMWU4NDE1MDhlODYwNjA5NGQwODI0ZmRkOTZjYzZjZmExOGZhODIwOWIzMGYwYTJhNzhlYWM5YTc2NzE3NmY1NzNlNzhjMDY4ODA5YjE5OWE2OWFjNmQzMzVkN2M5MjA5OTljNDBjYmFkODdjZjRjYzdjYTVjNjQ0MjkxZDc1YWQ3YTc0YmMxZTYzOTJkMWNlMzExZWNmZDJlYmM5MTZlMzllYjZhYTNlN2Q4OWZiODA1YTI3YTU1ZjE3ODkxMmIxNTdiYzAxYTA1NWY2N2FlZmE3OGU1NWM4MDZjYmQ5YzAxYmFmOGVmOTJjYWQyMjYwYjRiYjE0Y2ZlNjE3ODJkZWU1YzU5OTcyNTA2OTQxYzQ2MmE0ZGE3ZWI4OTk1MzFjZjk5NmJjOThiYTM2MjllZmZlNmZjZDE3MDZkMWI0ZWU0ZjJhMTRlOTIxYmQ0MDhmMzBlMTJlNzNmYjdhYTg2MDUzNmIwM2U3N2NhOTM3ODIzMjgxYTE2NDUzZmU4Mjc5MzU5NDMyMDFlNmVjMTQzYTY3ZWVmYTRmOTRlOWFiZjk0ZjdlM2Q0MWI3MGE4MmJlNjlkZWQ4YTUzMDYwYzIzMDVmNDJmNjJmZTZhMmY3MDRiNjdhMWU4ZmRkYzdkOThiYTdmMzQ1NzExOWIzMTFkNDQ5NjYzZWQ5ZTMyMGQ2MThkYzIzNjhkNDk1MDg3NWI5YzM4YzVkOGMwMzEwNGUyZTMyYzQzMjVkZWRkMmJjMjY3ZTJhY2NiMDExMjAxOGU5YzVhODAwN2NjYWIyZjZkN2M3Mzc3OTIwMDJhY2I3MzBkNzJlOWY3MzA4MjllYmM0MmNhNTY0YzFkOTI3MWJmMTg2OWM0ZDM1ODM1NTg5Yjc0MzFlZjdhMzFhMDcwMDYwZmU0YTA4OWZiMTFmMmRkM2RjZTY1YWUwZmI0NWJjM2EyODYwOTE3ZDkzM2JhMmQwOTA1NjllZjVlZDQzYmMyNTMyZGI4NzllMGYxZjIyNWVhZGNiZWYxYzAzZDllZDc4Mjk5ZTIzM2U0Y2YwN2IwNjRhN2JhYWMzNGM1YTBjMTlmYzNhNTU0MjA4OWY3MDE2N2JlMmY4NWI0YTEwZTc3ODUyNTIyM2JlOGZmZDVjZmY5NjQ4YjEwMDVhMDk4YjRiMzkyNDM5OGZiMGJjYWJjYzZlZGYzMGMwNjFlY2U3YWVhMzVmZTk4YTkyMDNmODcxMTM2OTUzMGZlYjVlNjdiYjJkNGY1OWQ5YzhiYzk5Mzg1NGRkNDc0N2NkZTM5OWJkMGU2Mzc0MGMxY2M4MzlhZDBmMDk4YTM4YTgwYmVhZGQ2NDhlMTQzNmRlZWU2MGU5MzFlNjhmNTI5NzljZTQ5ZjMwMWZlMzlhZmJiNjE1MzUyMDkxYzhiNjU4NWZlODg0NDdlZDZlNTlhMDIwYjJiYmU2NmE5NDIzYWU1MjI4YzIwM2JmZDQ4NDdiNTE4MWUyYzNiNGRhZDgzYTZkNGZhNzY5ODVlZWY3NmFkZGUzYjM0ZWRiZGQyOGQ2YTBiNGE0ZWUKK1NJRzogM2FjODBkMWU4ZjY4YjQwNThjM2EwNGRhZDcxODczNzM5NTlmMjZhMjcwMDI0OTZmOGFmYWFjY2Q4YmVhMDkwMWM1NGNhYjg3YjJhMjMwMmUxZjM2MjVjMmIwNmM3ZWJjZjNjZTk2ZGUzYWZkZjAwZjUxOTRhMzVlMDU1MmM3MGUKKworVFNUOiA4NjgKK1NLOiAgY2MzMTM4ZTUwMmE1ZmY2ZjgwZDI0NjM2NmU4NGQ2NWM1OWYxMmQ0ZjQ5NjM5N2U2ZWI5OWI1MjY3YjhjYmUyYQorUEs6ICA5ZTJkM2U4OGFmN2I1MmRkY2YwMGU2ZDBjNzc1OWMxMjM4YjhmYjNlYjE0NDIxZmU4MmMzNDgzMzQzNzgzNWJkCitNU0c6IDU4NWVjZjJmMDllYjkyM2RmMjBhODU1NTY0MmEyYmMwYjY4YzZhNWZjZmQ2Yjg0MDFjNGEwY2JhYmI0YzZlNmEyMDY3NjJiN2EzOWYyYzU0NTVkNzgwOGViZmJlZDU2ZDY3NjBhNDMxYzdkMjBjMmRjNmVmMWI3M2NhYTNjNDk0ODhlMzBiMWNhMjUyMGFkMjBiMjZhMTk3MDA3ODBlNWVmM2NlMDE0NDM4OGQ4NDA3YjZhNzBjMWNkYTM3ZGI3ZjEyMDkxZDg5MmYyZTkxYWQ0MDc4YmI0ZGIxNzYyZTQ2Mjg1YTdiNjY0YjJhZDNhMzRkMjZkOGE5NGQ2NDU4N2E4NDUyNzcyMmVhODNjYjhhYTg4OTg0ZTE0ODk3NDNiNDIxNGVhNjA0MWFhMThlNTUyMDA5NTRlZmM3ZWRiMzE5ZGY5NDdlZmJmYzZjOGQwZmVhNDhhMTMxNjEzNDY1ZDhmNGM0OTQ5OGYyMjY5MTQ1YzZkYWU1MDQ3ODA1MjU5OGUxY2EzYmUwZTMzNjExNTcxZmEzODQ3NzFlZWU0MDJjYzJiMWQ4NDgzNmM4ZjFhZDI4ZjJhZDIzZGVlOWZmMWQ3ZTFmMjUyMTYzNTg3NDExNWRlZjRkOTNlODliZTc2MTgwYmM1NWY3NjExNDQzNjBhOGIyMjI4OTJkNjRkMTU3Y2NiNWQ4ZjQ4NTVkY2E1NjcwMTQ5NWEwZTEwMDJkMzQwYTRhNDYxNTZiOWI3ZmUwNmI3YzA3NTllMGI2ZGY1NTliNjkxZWRlNzhiNTVhZjY0ZTdjOGRkOTA4Yjc4OGRkNmJhMzVhOTAyYzgxZGNlYjM3ODhiNjE1ZGUyMjVhZmE1OGE4MTE4MWFiMjRhNzM3MDVlZTgzOGI2ZTg2M2ZlMWJjYzI2YzFiOTQzMjM5MjMwYzI3YzZiMzk3YjIzZDEzZGU2YTAyYzk3ZjM2NDVkYTkxZDQxM2Y5MTY0NzNiMDE4YTYxNTk0YjZmNTFjZWE0NDQ1N2RhMWUzZGJiYmE2ZGUxNjg2NjY1N2U5MmVmMDIwMjcxOGE4NGFkMDMzM2U4MzM2YjA1MmIwMDQ3MzNlOGU5NWVjMTNlNWY5MWIzODA2YTk4ZDNkYjcyOWZiNzM1YjgxNDdjNGE5ODJhMmQ1YjRlZmFlOWMwOWQwYTliZjg5MWNiYmMzYzhmNTMxZTc2ZTQwNDRlYzkxZjRkN2M1Y2Y3NzMxMGUyYjJjZGUyZTA3Y2NmM2UwYTE5ZGQ2YWUxYjNmY2IyZGY0MjE4NmU5YzcyOTIyZDJkNGNlNTFiMzA2ZTgxYjE2Y2ZjZjhmMDBkNTEzZmJkMmM1MjM5YjQ1YWZjNjU0ZjZmZTIxYWNiN2U4YTBjOWFhODdiMGI2MDUwNzRkZjk1NzZhNmRkZDkwMGFjYTU2NzYxN2NiNzk2NTZiM2I1ZWNiOWZmNjhiMmY2MjQxZWQwZDAyNGFjMjdhYTZlYjQ4NmI2OWZkYzBhMGRiOTIwOTZhYmY4NjAwMmRlYzdhZmQ4NDdhMDA2YTNmNjk1NWI0OTU2OTA1M2JlOWYxZDBhNDliNzkzYTU0MTFlNTkxNmY0MThlY2FiOTUzMjQzNTUzYjY2ZTZiYWRjNGU5MDliZTBlZjVjYzdjNmQyNzE5OWVjM2YyMTQyM2JjNDU3NzNmYjQwYjk3YjYxMTg1YjU3MDgwZThmMGI4OWEzZWE1N2M4NDQ0YWIyN2VjZjcwMDZhNzY2MDQ3ZWVmZjU0ZDg1NTZjZmVkMjNkZWYxZGEyY2M4YWViYjQ4Yzk0ZTc3OWU4MjAzYWUyYzkwMmI1MWRlMGVkZTA0NTZmYjczZmI0ZDVmNTE0YTRjZWJjNDdmZWMzZjk0ODQ2OWE1NDVjNmJjNTdiNDEzOGRiMzRlN2NjMDA2ZGUyNmVmNTA3YjU0ZDI4MTQ3NTY3YThjMjlhYzFlY2VmNWJiODRmYjk5YWNlYjIzYTIwMjk0ZDc0YTg1YWUzNmIzMzQ1MDY2OGE1YzI2MDlkM2E5MzkzNDU4NmZmOTBjM2I2ZDI3MzI5ZWVlZjNhNzU0ZTlhOWNiZDU2MTdlZjNiMDkzOTdiZGM5NzEzNzA3NjY1ODlhMTJkODkwMDUwZDE2NTE0NThiM2ZjNTMzYzg0M2JmZmRmOTc1NGQ5MzJjNGVkNzYxMWQ0ZDI3YzMyYTA4NzU1NWI1ZWFhMzdhZTkwYzQ5NzllZjU0Mjk5YzQyMGFiNWUyOWFlMjg0NWQ0ZGNmMjE3ODkyMGE4NjUxNzVmYjljYzBlNmI4YzUyNGIxZWU0OTU4MDVkNTE3YmZlMAorU0lHOiBhMjcwMGUzODk1ZWQwY2MyYWFmMDEyYTQwYmM3YmQwYmQyOWRkNzljNjljMGI0YTZlZGQwNTMwY2YzZTI2N2MwZjgyZGQ4NGVkYWYxNzQ0ZGM0MTFkNjJjMDAyODcxNTI1ODgyMmQ3YjYzZDM5NzA1NjEyYjNmYWQ0YjVlZmIwNAorCitUU1Q6IDg2OQorU0s6ICA1YzY5MmM2ODExOThiMTcyZGYyZmFjMmFlYzNmY2Y3MDE1YzJiYjY4MzBmMmE5OGUzMGEzOTZiNjRhZjQyODBlCitQSzogIDMzYjE2OWQ0Y2EyNzEwNDA5MjZlYTg3ODM1ZTUwNjZmOWYwNTc4MmYwODdmY2E3YTU1NmY3YmY0Y2JhMmU4ODYKK01TRzogYjE2MGVlM2E5M2NmNmJjMzQ1NmU1YmQwMTk3YzA5YWE3NmMyMjU4MDUyZjlhMzRkYmMyZWQ1ODlmOGRiZTVmZjk5NjlhNjFjZmU4NDZiMmY2NzM5ZGM3ZDRhMTQ5NmU5YWQ1ODYwNWI1YTI3NThjYTA3OGM1NWE5ZmMxYzRlZWI1NDkxYTg0YmZkNDY4YTJjZWIxNDFhNzczNDkzYTliM2VlODI4YjVkZGU5YzAwYzIzNmZmMDE1NmU0ZTJlNDVmYTA3OTMxZGE2OGJiZDIwMzBhODgxNDA1YzRmNzg3Mjg4MTNhNWUwNDgxMjQwNGMyYTE5YzliODdiMWNmZTlhZjk1ZTI3M2VjZjljNTE4YzUzOTM1Zjg0MjU2M2IxOTJmYWUxMmE3M2NlZjA4NWZlMTllODk5ZTViYTA4OTc5ZTMxMWZiMjg2ZmJmYzdiMjQ4YWFiZDQwZGM2MTYxMGUxZDRmYzk4MDZkZDIxMjkyMzkyZGIyZGI0MDQyNmM1ZDE5NmE0ODljNWRiNzdlM2U5Y2YwYmQwNDFlM2MyM2I1YmExZGI3ODFhMTA3OTBiZTFmZTA3YTJiMDBjYTNhZjg5Y2JkNDZlZmNlODgwZTFlZjI4YjBjZDc5ZDUzYjQyY2Q4MGVhYTEzN2VmZjdkZjkwYmNiY2Y5NWM5ODU4ZGMwY2NjNmQ4Y2E4YWUzNTQ3YmRiZjlmZjkwMjRmM2NmMTcwMTE1ZWIyOGJmMTJiN2QzYjcwMTQ2MGY0OGQxYjRiMjNkN2Y2ZmY3MmZmZGM5YTZjNTI2MjRkMTUzMTJkN2YxOWRkYjYwMjZhMTVlYjU0Mjk1ZDMzMWZkNzk1MDkxMDNiYzU5YTNiNmUxYmE3YWM4YzExMmU0ZGUyODE3ZTUxYzFlMTY1MDdiYTY2ZjI1NDdiYzg5OWY2OWMxMjA3YWU1ZTM3YmRiMGUxNjFiMTViNjEyMzA1YmMwOTQwZjlkMWIzODJhMzdlYzJkYTYzOWE2ZWNiYTFiY2RmYzUxMjE0YzMyMjNjMTFiYmFiNzlmM2ZhZTNkNTVlMmQ0YmU1ODRmZDc2MDFlNGUyZTU1OGIzYmU1NzA3MTE1YTYxZjVhODE1ZWMyNGFhYzE4MDkzNDU3YmM0NmMwNWNmYjdhM2YyNTMzZWFkYWRjOWU2YzFmZTMxMDc3OWU2OTdmNjgzMDM1Y2U1Nzg3M2RmNTVkNzkxZjZkMmZiMGUyMTA3ZTY4NjZmODM5YzNhMTI2ZTkwMjM4NjVjZWQxYmNmNjc3OTk1NWFmNTQ3ZTFkODdlYjMyYTliZjMyMjg1N2ZkMTI2YjBjZGM1ZDVlOTA0ZWI3NmM2NzA2ZTNjODk3YWVmZDZlNDc1NmZiOGFjYTgxNzBjYTViMzk2NjkwODlhZjFiYjE0MWEyNWQ2YjhiMDYwMzRkOGIxMWFiZjFmZjhmOGQ0MzM3NTg0NmZhOGZhOGEzNGI1ZjI2NDgyMDc0NGQzMTE0OWI3ZDU3MzI2YzU5YjFkYjc0MTMxNjc4ZjYzNGU3MjMyY2E1ZWE1MTg4NzYwYTcwZGMzNWRjODlmOGU0NTNiNGM2NWI3NzJjMmI2YjYyNzY4ZDgzNzMyMzY1NTFiYWFmMjRkM2MzMDRjNDFiNjJjMzZlNmEzMzgzYjNhMTYzYjczZTc4ZDhiYWRiNzU3NDFlNTAwMWQ0MTlkMzBlMmVkNzdjMzA5NmU4ZDhkZjcxM2I5Mzc2MmM5NzA3YmRkMGYzNjVhODc0YjlkYThhYjcxMDQ5NWRkNTZhZWE5M2JiNzdmYjIyMjYzNWM2M2JjZTlmNjNhZjkxZmFjODljNjY5ODZiOGUyMTc2ZGQ0NTFkNTgzMzk0YzE5MDdjYmExNzI1ZjA2ZDI1ZDFkMDkxMmIzZTVjNmM3ZGNkMzQzNThmYWQ1OWRiYzZmNmIxYzJlZjMzZDNjYTgyZjQzNTE4ZmU0ZmYzMTM3ODAxNmU1NzhhN2JhYjBiNzc2NzZlYmFlMGQ0OGQwODg5ZDY5MDI5ZDIwOWYyODNjZThmZTBlYzIzY2Q4MzJhZGMxMmE5YzNlM2FlYzJkNjAzNjY5NTU1NmQ5MzEzZjEyYTg5OWRkNTlhNjZiZWYyOGVkZTE3NWY4YWFlZWViMjk0MmJiOTA4OTJhMDRiNDQwZDA0YjY2ZjVlZWZmNjFhZGE3Mjc5MDI5NGNlNTVjODZjNmQ5Mjc4NWRkZDI2YzdhNzMxNjAzYjA2OWM2MDNjOTJlNGZlOGZmNzgyNTQ0YzhlODliNDBiOGI1NWY5MGUyYTVlOWEwZjMzYzdmZWM3N2RhZDgxNTIKK1NJRzogYWQ4ZjM3OWNhZjQxZjcyZGNjYWRjM2U5MTUzNTdhYjBjZDMwNGUxMGY0MTIwZTBkYmJmYWFjMDFiZmZhZjJiZTg5M2Y3MDA3MmRjOTY0MDY5MTgxYmVjMTdmZTAyNTEwNTViMjFlMjNkZWU0MzYzYjI3ZWYxZmZmNjdhYWZlMDYKKworVFNUOiA4NzAKK1NLOiAgOWQ1Zjg1ZDJlN2RmZDAzYmI2ODlkOTAwMjg1ZmQ0NDYxNTM4YTVmMjcxMGExM2VkMjFjNzc1ZjZlZmY2YjNmZgorUEs6ICBiODY3OTdlNGJlMDI4NmFlMzllNDRkZjBhMDBjMDE2ZGI0NTU1ZWY4NmYyZjA1ZDBhM2VkODlkODlhNGMzZTVlCitNU0c6IGY3MGI1YjA1M2E0NjcyNTEyYzI0YjMxNjgzOTJmNmExN2RkNzdkODY4OWMyMWM4NmVmYzI1ODI5YTFhMDRmYWI0Zjc2Yzg1MjE2ODRkMzIwMTA0NTU5MDdhMjY5MDg2NzdiNDBkYzY5NDdkNjU0ZjI5MTRjMzBlY2VlNzI0ZmE2ODQ0NmI1OWQwOTFlMjU4ZmM4NjI0MTFjOTY0ZDY2OGRlZjgzMDM0YjYyN2VkNDE2ZGMxOTBiYjVhMjYzYTZmZjhkNTU5ZTEzYjg5MzYyMjVmYjRkYWI0ZjdiZGEwNDY4ZTU0N2U3MDhjYjA0Y2ViZTFlNWNmYzY5Zjc2YTFkMjgzZjI4MTY4Mjg2ZjI0ZWNlYTU1MzVlNDQ5MGEwYzU1NTY3YTczNDVlZjk1M2NlNDI2YjIwOWEzZGUzZGY1OTVlODBlZTYxZTU3MmEyNzhhYjAyMjE5NTUxYjczZGE0MTk4NDgwODI4NWE4MzU5OGEwMmQ5YjI4NjcxMjEwMDA0ZTMxZDhhZjkyNDJjMTZmOTBkNWVhOGY2M2ExZmY2NmNmZTYwZWNiZTUzNzI0NWZhMTJhOWIxNTQxMTUyOTU4MDZlYTJkMTFmMzY3MTc4MmI5YWY0ZmE4NmExMjg4ZTEyM2NmZDI0MDlhNWRjOThmNDFiOGY2ZGYyOTliYmNjNGJiNjQ0N2RjMDNhNmQ2MGU5YjJjNWI4ZmZjNDBkOTgzOTU2YmU5Nzc2OGRkMDYxMmQ0N2NiZmE3NTcxYzk5Njk4NTZjMTUyY2QzYjQ3M2FjZTBiOGExNDRhYWMyMDk1YzBmNzJmMWQzMTQ3MTUyYjkwOGVmNjYyNmQ1MjIyODE5YjIwYmIzMzUwYTQ2NDUyZjY3NTQ5MGMyYTgyMTUwZWVjNDBkNzViNjZhMzI1ZDZlOTI5YTkwNWFkZTFlMzE2MGFiOTUwMTgxZWZjNjZlNTkyMzA4NjVkNWU1OTk2OThhOGEzZmY1NjBjNGM2MDFhN2E5YTVkYTNiNWQ4OWJjYTkzZjdjZjViY2Y1YmQ1ZWNmZjhmMWExODVjODIyMGU0Yzc3ODIxZTYyYWRmOTVhMDM3ZjJkZjdjZWY0M2E0YzYwYWM3NTgwMWU5ZmNjZGM1YjA4ZWVkMzI4ZGQ5MzEwMDkwNDExNTY0NWVjMWVlMDg1Y2M3NzhiMGY0ZTQ2ZTE3Mjk4OTg0YTcwMmVjZWIzZTE1MjgzZDgyMDAwNGY3NGEwNzk1MjBkNjNhNzVmYWUzM2VjM2Y0YjgzNjQ2OWUxYWE5OWVhMjQ0YWYxZmIwOGIwMGE4YzlkZmQwMzMwOGRmYzIwMjM1ZWE5YzgyODNmNGRhNDdjZmJjZGJkMDMxYTAyZDE2NDE2MGYyYTU4OTg2NzAwYjE5NTI2ZDQxZTRkN2ZkNDU4NDM0ZDcyNjRiYzhlYjY0MmU2ZDhkZDI3NTljZTJiODVjOTdiMzcwMmU3MGRhNzFmMThlZGM1M2U5MTQwYTY0NTYyN2UwMjc4ZThlNzA1MzkwMzc0ODRkY2QxOGM2MmZhMzMwNzE3ZDYxNDhhMGQ2MjNmZjhiNjVlYTg1NjdlYzdmYTA0Yzg5MmUzYTFlY2VlOTZlODMyZjQxNTUwNzRjODNjYmM5M2U5OGNjNjdmMWZhMTEyYWEwNmU5OTE1ZmE0ZDJkZWE5MzE1NTFlN2M2MjNhYThhM2E3NjE5ZWEyNGZmOTE0ZTI2NGYzMWZjNzNkZmE4YzQzMGFjNDZjZTE2ZGM5NjhjNWE0MDg1ZDVjMzgwZDMwY2RjNmY0M2RlZTgwNmYzOGQxZGY0MjBhMDY1NTc0MTQ0NzM3MDU2ZGFhNjJmMGMwOThjOWM1MmZjYzA0Y2NhNjQyYzQ1ZDY4NzM0NWEwOTQ2MTNkNGEzYzZjODc4OGJmYTIxODUzOGFkN2VjZTFiZGI2YzkzOTI0ZWVjNGJhYWEzZWIxNWRjMTQ5NGQ2NWZmYTFhMjNmZjhlOTg1MjYzNDA4ZmIwMmJmZTM5YThjNTViMzAwYjFhMDJlZDM2YzY3MTRkZDVhYjc1MGQ0N2YwMjFmNjVlMDhjNjM1ZjFkNmI3YmFmMzk2Y2I0ZjkzZDU2YzFjYTQ2MWJiMTJlOTRkZTdlNWQ5ODY1OWE4YWYwYmYwMTlmYzQyMjgwZTExMWUwNDgwMGZmODBlMGMxNTcxNTBlMTY1NjA5NDU0MjgxYjIwMDA3ZTNlZGZhYTFlYTg1NDQ2NTU0N2EwMDZhNGMzMjM2NDExNDk1ZGExNjYwOThhZjI4MjNhNDU5Y2YxMDBhMWYzYzkyYzYzOTBjNjA2NmNkYmYKK1NJRzogMTc2Yjk1OTJmOGMyNTEzNTI5MmFkZDRkYWFjYzljNGZhYTIxZDRmNDliMjc4NDgwYzRlODg4MWMwMTYyNGRmOWEzN2UyM2UxOGU4NGNhMzJkMGQ4Y2I4NTEwNTQyMjJmMTBhNDk1NDE5ZjE5N2U3YjNkMThkZjBhZGZiMWIzMDcKKworVFNUOiA4NzEKK1NLOiAgNGFhZjJkMTMyODg0ZjMwZDExMjdjZjE4N2VlMDkzODhiNGE1YzQ0YTlhOTI2N2U2NzI4MzE3Mzk4OTUxZmI2MQorUEs6ICA4MzcyN2U5MjU3MzQ5MTI4NTU5ZWJmNzU5ZmRjODIxMjJjY2U3Njc0NjYzOWMwYWRhOTc2MWYwZDYwYjk0MGIxCitNU0c6IGQ3M2VhZjExNDEzYmY0ZDViY2NmNmEyZTgwOWNkNjgzMmE1MTgyM2FhMjJiZDE2ZTA5Y2Y1NmZmMDQ1ZWVmMmQxYWRhZGRhNTBjMmViZDY3YmJjNGQ3MGU0OTNjOTY4Y2I0ZGU0OTc3MDY1ZDQ0NjMzMDA2OTRjOWNhYTU3MjA2ZDY2NjQ2OTNkODQ2MmMzYzU3NmI1MjVjYzdhY2Y3OWYyNmY5MDU1YTFiY2ZhN2QwNzdmNDVlYmUwYjJkNDgxZWJkNjNmNzM0MGEzM2U0YWI2OGYxNjA0OTc1ZWMxZGZlYzQ1YTc5MWEyYWJiMTA0NGQ3NWE0ZGI1NWFkZjU5YjgzOTRlYmRlNjgyNGMyMTE0NWIwMGVmM2IxYjA4ZWQxMWZkNTFkZGE1MTRlZDdlMjFlNTRkYmFmNmFiYjZkOWUzMTdmY2Y5ZmQzNzViMTg3NjRlNjRhYzliZTViMDhmZWMzYjc4YWJiYWIxZDEyYTJhYjA5ZDU1OWFjZGM3MTMzZmIyZTAwMDhlMGMxMTRiN2NhZGI0YmY3NjMwNzg2NzRkMDNlOWM4MDdiZWMxZTJjYTcxYWRjZGFhMzEwZDU4N2ZhNTY5NTBmYzBmYjJlOTc5MDQzZDUwZjlhZTIzZmE4ZjgyMWNkOWQ2MjMyNzg5ZDBlZWNjZmM0ZjQ3ZTNhZDgwNGUyNWNmNWE0MjVmOTQzNzdkMTc4NzQ4MzNlNmFlMzYzODE3OGM3OGI3OTUxOWQ2NGQ5NzkzZjQ1MDQ2MDZhMGVhYjY4NzA3ZjZlMWY3Y2NjYjUxNWJlM2QxMjAxYmNkMTlmMmYwZTI1NWM3MjJlYWIxMmI0M2FmZjhjOGM1NTYxMTI1ZmJjYTFmNjU0MjA3NmEwNjE1MmViN2U0YjA3ODYzMjRjMjQ5NWU3OWQ3OWMwYThlMjk1YmIyZTNkZmQwNWE5MDMzMTkwMDY1YTI4NDU1MmE2ZTczNjAwNmFjZTQxZjk3Y2M0MzRhMjUxMjA1MWI3MjdjZTViYzljNGE3NTUyOWVjNTNkZDdkMWYxMjZlNzkzODU3NzQ3YjViYThkMDMxNTVkNDU1NWY1OWU4YmFmMmYwY2RiYTg3MWFjMTYwZTc1MTlhODUyZGIwMDRmNzAxNjQxYTQwYTQyMmQ0YzM4YjZjMGMzY2M4ZmJiZDA1MzIyZGRjMDAwMWZiODY3Mjg2ZTI5NmNiZDY5ODYyY2JjY2M3NDQ3MDM4ZWIzMGY4YTgxMjNiN2IzMTM3Mzk4NDcwMmMzYmU0NTdhNGI4YzU0ZTZlNTI4MDQ4NWEyYzRmZjg0NTIxZjI5OGRkZWIzYjNiMmJjOTFmMTE0ZGRjZTY3MDMwMjQ4MDQ0NDY5ZGMwNmYzNjJmMjkxOWEzZmVjZTUwODIzNzVkMDQwODAzNzZmZTIxOWQ5YjQ1NzViMWNmMWM5ZWM0ZGNhYzU3NDlmYzc3OGY1MTVkZGExM2ZhMGQ1ODZjMjY0YjliYjYxNTAzMzEwNzYyYzc4OWNhMTE2MDhkMmZlZTY3NGM3MGFjNGZjNmQ1ZWJjZjY4YzRhYjg5YmQ4NDU1NWZjMDA3NTIzYzI4YTdlMWRkMDhhOTg2MjA0NGQ1MjQ1YjkxYTg3NzhlYzllZTk4NGE0MWE5ZTEzYjdhYmQ2NTdhZTJhNDZhZTg2MDE1MmM2NDRhY2Q5NTM2NzY3OGZmNjRjYzU0MDA2ZTM2NjE0ODA1ZWQ2MThhN2M2ZDBmZDMzYTkwODUyMzA5MDg0MWMyMzBhZjA5ODQ2ZDEzMmJiNGM2YjYwZTI0NDFmOWQzYzQ5ODcxNGY0NzBmNmJjMDNhODBkMTRhMjk0YjU2NWQxZDVlNzgxY2ZmY2IxMzA0ZWZkYmJjN2JmZWFiZGVkYzg1N2FjYzQyZTI3NjJiYmY5N2FmODM5YTE2Njc1MmRhMjk1NjcyODE3ZjEwZGJkNDcyZDM4MWY1MzE2NTU1NWFjODIyMmE3ODUzNWE4NjgwNWYxYmVkNDIyODg5ZjIwNjEwOWFhNzQ3NzJlZGMwYmI1MWU4YTk4NDBjZjYyYzkyZmE2MzViOTBjYWUwNzZkZDUwZTVhZWQ5ZGVhYzg0M2ZhOGE2YjUzOTk4ODI4NWZmMWFkYWJlNGM3YjgzZDllMjlhYzJkOTQwOTJkYWFmZWM5ZjY2NzM2ODliYTllOTI1MmQ4NjRkNzU3N2FhODk1MDVkMzMxZmU3ODA5ODYxMjc3MDAyYTBiNDRhOTZiYTZhZTRhNTJiMzU0OGJmMjY4ZTc3Nzc4MGMwMDIwOWIyNDVmOGIxNDE3ZWU1ZTcwMWExMjMzNGFkNQorU0lHOiA1ZjExZGYzOTA2YTcxMmE5NTNmNDdjODU5ODA2YjUyMzczNThkMDhiYTk1ZTQ5ZjllNTMwYTM3MTY1ODM1ZTkzNTlkOTc2OWRjMjFmYmI0ZDQ0NDk3YjkzOTA1YmNhOGQ5OTE3YzcyODQ5M2ZlZTNhY2Q1YjUyMWRiZDFlMjQwOAorCitUU1Q6IDg3MgorU0s6ICA0YmM3ZGFhYmM1NDA3YzIyNmQxOTIwZGI0YWZkMjFiMmE1YjNlNTliOGU5MjQ2MDUzZjZhMWE2YWZhNTRlN2U3CitQSzogIGRjNTM5ODg1ZmM3YmVlMDAyYWM1ZGViYWUxNmJkZGJlNGI1NTNmYTE1ZTgxZWU3OTg4NzY5NDBmMzhjZmM0YzUKK01TRzogNmFjY2U5OTg0M2IyNDFhZmU2ZWRkNWQwYWI3OGQwZmIyMWM4YzM1YWZmODgxMzg5ZDUwNWYyZjFkZDkxYWYxZWIyYWQyMjkyNTQ5MjdjN2YwZWNmYjdhODE0MTY5MDU3M2E2NTVkNjk4NTNkNzRkMDcwOGJmOGIxZTYwYTAzOTYzMDI4YTYyNWI3OWYzZGZlYTJiMTEzZmZjYWI0NmYzY2ZkNGE2MjFlOGZkOGZmMGE5NjgxNDNiMGFlMDNjY2I2ZjQyZTI1ZTJkNzRkYmY1MTViYzM1ODY5OWI2MzUwMDliMDFkNjFmZTU5N2YxZGMyYzM1YTdiYTQ1NTUyNzhlZTBlYTQ1NmM3ZDM1ZmE4NzU3YTQxNzkyNGIxZDBhODM1MWYyMjZhMTNlYzI5ZDAyNWI0MjY5NmVjMWQ5OTI1Yjc2OWNkNTljOGUyZjljZDNjZTRlNWMwMjBlMDUxZTdhMzZmM2Y5N2MxZThlYzcxOTc0YmMxNmFjNGRlNDY1MWFkNGRmMmU5YzBlZWQ2ODY5MjQyMjRmZTZkZTZjNjBkZDRhY2MyNmUwYWFiZDgwYzIxZDUwOWQ5NTliODBiNDM1Mzk1OGQwMGU0NGM1MTFkMjNiY2Y0NDU1MjYwOGJmYTU2YTljNWFlNzlkZTYyYmIyM2YxMWQ3NDBmNDgyNDBjMjdlMTAxOTk5NzUxZjI1MzQ3NDJjMGE2OTEzZmY2NGI2ODNhMTg5OTVhYmMzOTNmZWI5ZDU3YzcxZjQ5YTA4MDU1NzI5OGNjNDA1ZDExYjc5ODhkNzExNjg0MGM1YWRhZjUzYmM2NzJiNDY5MjNjYzQ1N2M3MDM5OTQwYWQ0ZDViZjA3M2M2Yzg4NmIxMzM5NTI1OTI2ZDI4MWRiZDFhNzk3MzliMmUzNjQxNGNiZDMyMWIxODVmYzg4ZjE4ZDJmODFjODA5OTc1YmU5YTA5MzY0NGNjNTU5ZWQyYWU1Y2MwZTM1Y2JkZDE4MTFmNzAyODYwNTdhM2Y3MDMwNjdlZGRkZjVlYjE2OTBhNzQyN2JiNzNmZTMwMjRlZDBkYjgyYTVjZThmMTcxNjQyOGE3NmZkMjkyYmE5OWEzMDBjNGIyZjM2MGRhMjEyNDYxNzU5MGIxMGUzYjE2MmE2ZTY3ZGQ1ZDVhNTliY2NhMTBmNjEwZmEwNjRhZmZkNTVmODQ4M2I5OGE2OGQwNzZmMjc4YWJmODg4YTA4YTAxNGUwZWE0OTkxODBmYmM3OTg0MGNlZWQxM2NjNmIyNDU4YmZhYjliMGRkN2FlOWQ4NjQ2MWZlMjE1ZTdjOWY2M2Y3NjhjZWU0YTg4MmRmMGRkODRlM2ViNGYyZDdmNmIxOGZhNTdkOGJjN2Q5YWZiNjNjMjFhYzQ2NWU3OTAzYjliZmI4NjM4YTI5MzYxZjdlYmZjNmU1NGU1NDY1YTZjZWY0NjNhZTIyNjQzYWU0MTAyNTg3NzljYTc0YjcwNDAxYTk0NTVhNGQxNTdkNzRhNzAyOWVmZTZiNTE5YThjNGJlNjk2NzU2ZTA0NWFlNDA4MWI3N2RkNjAzMWYwZDI1MGZhNzYxZTYwZjg1OWQ5MDYzZmMxMDVhYTBhMWE3NDUwYWYxNTNlNzA1NDc3Nzc3YzQ0MjU4NmRmNDA3NDAyYmEyMzg3NTJmYWVmNzRmMzM0NWMyNmE0NTMzYmU5YTYxZjVmYzZiZGU0OGUzY2JhNzVjMDRkNmY3YjMzM2UzNzAwNmRkMGM5NGZkM2I2YTEzMGJkNmZjZGIzYzZhYmUyMWNhNjBlYjQzMWNjMmQ4YTJlY2U3MTY5ZDJkY2ZjZTI3NjA4MjU2NTdmZDRjMjZmM2MzYjgzMGFjZGZkNTA4MDExZDE0NzY0YjNiZTkxNzE1NTcxYTMxODMwMThlMGQyMjFmYjk1MzJiYjJlMTcxMWU3MjVhMjczYWUwY2MyZmFjY2JhN2Q1NTA0OTI5NDU5Yzk5MjUxN2IwNWMxZGRkMDNhYWNjZDkzN2I4NmViNjdiYzgyMDJkMDFjYWIzZDQ4OTU4NmVlYTFhY2NhN2RjMjBjZDBiNjQ3NWMyNThmZjY3MzY2MTQ5NmEyMmVhOTZiODlkYjRiZjNmY2FhZTNiYjA0ZjY3ZGIwOTZhNDdmZjdlMWVlMjM5NTYyZGMxMGQ0MGYwNTM5NDRmM2Q3YmNjM2ZmNGMwZmY3NjU2NTRiYTVlYTY0ZjBlYTYzZTQ1YTIxZDliMTI5NDlmMTRmN2VhNzA3NGU5YjY1OWM1YzVkNDQ4MTY4NDJkZTg5Njk4YThmY2NhY2U0M2ViNmI0MTM1ZTBiMzMzYWMKK1NJRzogYTdhNjQ4ODgzOWJiYWUwNGRlYzkyZjk2ZDcyOGM0NjQ2ODVkN2E5NmRmNTEyYjAwNTExNjNkMjI1MzhmNzQ1NDZmYTk4NmIxYjYwYTZkOGNjNzY2YTI2YzY5ODRjOWNkMjY4ODM5NTg5OGUyYjJhZTcyZGM2YTJkNWE5Zjc1MGUKKworVFNUOiA4NzMKK1NLOiAgZjI2YWYyMTBlM2IyMDE3Mzk5MGM3NzQ1OTIyY2RmOTQyNDc3M2FiYjM3NGQ3NzdhNTEyY2Y1Yjk3YjNhMDAwZAorUEs6ICA1NDU4NmFiZjA0MTE3NmUwNmFlYzViNjAxMGUxOTA5MTZkYTU0YThjNGJkZTI4OGNmMjRkOGMxMDdjYjNiNzMwCitNU0c6IDg4ZTI2ZGEzNWM1NDg4NGI0NzE0NmY0ZTNmMDE0YWI2NWIzZDcxYWE3ZTNjMzM5MWFkYmViMTllZjJlN2I5MzAyZTI4MTk5MWIyNjFiNmEwOTkyZTJlODlhNDlmNDgwY2EyZDhlNjg0YjEyZjliMTUwOWIzOGY2YTdhOThhNWRkYjRjMmQ4NjlmZDAzMThlOThlY2Q4ZmQ5ZGY0OTFiYWY5OWE5Mjk0ZGU0OWUxY2Y4ZGQ0MWVlODU3MzBhZjAyNWE3MDExNDNlNGYwYzhlM2Q5MmQ1NWI1OWNhN2Q0YTZjODlhZDc2MGRmZmMwYzIxODkyMDk1MDhlZjZjMjIxNGVkZjk5NjdiMTdkZWYxMjNkODY5MmM5ZTRlMjBiMWU5ODI2ODgwODcwNGY1ZjlmZTFhNmQ2MDU1ZTMyYzg3MjU2NGJkMTdlZGI3MzU5NTc4NjI5MDE3ZjBjMzBmZWFiOGI1MDRlMjI4OTIzYWRjN2U4MWFlMjBhODUyZGIwYWQ2NzZhNzhlMDgxMzM2ZDZiMDQwMmY5Y2RjNWQ1ZTkwMTI4Y2E5NDVkMTA1MTVjYTBjNWVmMDNmNzMxYjFkNDBhNzEwNzQxZDQxYzFkZDFjYTE2YjEwNjBmZWJmMmEwNTMyZTZmNWQ3NjUxZWY0NDYzNzVlYzE4MDkwY2I4NDE4YjgyMDJmMjVhMDM4OTAzMWIzMDdmMjIzYzViNWY2YWZlMzZhOWFkYzEwNjhmMmM2ZTBlYTViMmI2Y2ZlYjhkYzAwNGY3YjgyOWM4MDQzOTA2OWI4MWE3YmQ5MDc0NzdjNjEzNWVmMjgyYjc3MWYxNDFkYmU3NWEwZmEwNTZlMDZiOGExYTFmOThjMjVmYTU0ZDE0YzhmZGI0MmQ2NTAyNTk1YzU5ZDI1YmFjZjFhMTlhZGVmY2MxMzE3MGY3YTQzMTdiNmFiNjEwYjYwOWQ0MTRiMDA3M2VhMDRhYzI5ZWIxMGVlNzNjZDcxYTRjYTYwNDA5ZjhlNzYwZTYwZjkzOTUxMDEwMGQwYzhjZDc2ZjI2NGJiMzc4MTFmOTdhYTUyOTlhYzBiMTJkNDE2OGZmMzhlY2RmYTgwYjFlNWMxYjNiYmQ0ZDQwZDM1NDQ3MzVkZjcxNjdlYjE1OGE5YTlhMjM0ZDQ0NWYxZDY2M2RlZDcxNzFlZGM2OGQxNzJjOTIyMTRiODJlZjEzZmU2YjhjNDNhYTg5YjczOWI0OTkwYWU5NDdhMzRmMDIwYThkODk0M2IwZjdhNWQ2MWRmYTc2YWRkZTAyNzJlOThjMTE1OWMwZmQ4YTFkZTMzZjJjZWY4ZWRkMzI4NTdiMjE4OWVkOTYxMjgwNTdlYmRlYTgxZjdhM2EzZGZmZTE4OTNiNWJhODc3NTU2YzkwMzgzZmEyYzVhNmZkNjgwZThhNjdkZWU0ODAyZDkwZGZlOTcxNjIzYTdiZTIyYWIzY2E1NjA2N2IxZTVjNjk0YWE4NGMxOWYxNmQ2OWUyODRkZGZhMDM5YzEwOGQwNDM1ODEzODEyMzkwZDhlYmMxZTUwMTM4MTc2ZjI1OWRjMGYyNmJjYTEzYmM5NDNmNTBkNWEzNTAwYjE4ZDU5MzU3NGM2MjBmYzA5N2FjZTQzMGZiODA3MjhkM2ExYWE2NDRlNTA0YjEwMDlhZDY3NTM2Y2ViMDExZjJhMzU3ZGJkMDA5ZTRhNjNmNTI0ZDViNTk1N2YzMzE1NjdjNWI0ZDE4NWE2MWRmMjJkNzA3MWQzMWFlOTIxNDFlMTk5YzEyMjg5NTE1YWVkODBjOTEwMjE0NTZiY2Q0NWNjYzYzNDAzN2RjZjY5YjQxZDZiMWZmNTM0NzEwMTBkOTlmMTg3ZjA0NjU0ZjQzNjIyMjg3ODcxZmVlNmRjZjVmMzAyM2NiZDA5MTNkOTlhZmY0M2ZhOTViMzJlYTJiMTMzYjRjOWFjNGIwMTdiN2NmOGY5YmU1MDg2ZmU5MmI0MmNiOGRiZWQ1YjYzMGJmMDk3YzE4ZTJlNTVjM2RkOTMyNzFlMDljMmQxY2M2YWY4N2Q4M2ZkZWYzYzNlM2M0Y2JhZmJlYTliNjBmZDVlOWNmMDAxMWRlMmU5ZTI2ZmJmMDlhZmVlZjVjNjk4MDJhNmM0NmJkZjU0YzE0NTg2Mjk0NDE3M2UwMTdlMzAxNDllYTVjMDNjN2FlZmEyOGE5Y2FjNzc2NzAwMmVhM2ZlZmJkZWFlNWJhZTAwNWMzNzBkYmMwNjQyNDRkNWI5YmU1NTAwYTM1NzI2YTk5YmM5ZThjMjc1MmQ1MTBlMTM5YWYyMjU1ODAwOThjODE4OWFhOWM1MjAKK1NJRzogY2U0NTQ1MzBiOTIyYmE1ZWExNjJmMWE0NTJlMDVjMDAzNjNhNDlhOWRiOGE1Njk0OTdjMDBjYWYxY2JlYTk5MTgwNzcwNTU0ZWQ0ZTMxNDBkZmNhNDU1NTE1OWViZjQ4ZWY1ZDJhNTBmMzk0YWViZDc4MjExNmVkNjU2OWE0MDkKKworVFNUOiA4NzQKK1NLOiAgMzliZmZlMDA3ZjhkZjdjZTRlNTZmZDE3NmIxMDJiOTIzYmE0OGFlYjgyNjlmZDBjZDUyMGMyM2E3YjIzNmU2YworUEs6ICA5NTMyNjM2ODAwMDEwYjNkZDQwMTJlMzQxZmNhZDZkMjlhZmFkNDg0ZTZmZDczNmU4OWQ1YmMwMmJhMGFjODUzCitNU0c6IDdhOGMyMGJmMmVmZjY5YWY4YmFkNmJkZmFiYzc5MDljNThjZTc0NmNjNGRmNzhiNjliMzNjMTA1YmEzYmQ4ZGE3NTI0NDc1OGI1MTcyZDVjNDUwMWJjMzk5NzAxODVlZTNkNDM3MDgzYTk5NTlmODFlNzY2NWI4MjlhNjlhNWQ3MmUwMzRkMzUxYWRkZGNlYjNkM2ZmZjU4OTk4OGRmMTgyYjQ2ZmE1M2QyNmU3YzllYWMwNjIyMTU3ODhmMjMzN2JmOTBmMDE3N2Q4Y2E3NDRmOTVmMjhmZWE4NTQ1OTNjNDM2MmM4MmU5ZGVkMTliOTA0ZmY5OWQyYmVhODI0MzI4MjJlNTJjM2RhNmQ0NjJkYTc1NGZmMWY4YmQxMDk5NDJkZjUxZGJhMjViN2NkZTgzOGQ1ZjUyNDIzOWYxMzMxZjQ2MzE5NGUxMGZmNTY3OTViMjk2ODc4ZmViMWY1NWQ0M2VjN2RhZjBjYTVhYjNkNjg0YjU1YmIwYWE0YzcyMGQ0YjVjMmU4MzBjODU4Njk0ZDNkMGZkYmFhZDBiZjY3ZDg3MzE4MmQ5NWIyNDEyZmNlNWU3YjAwZmE2YmZjMzhiMTMyZWZiOTZmODdiYzZjMTAwNzBhNTcxNmVjOWIzM2EyNjkyY2RmNWJjNDFjN2Y3MzdlMjhjNDIyMDMxN2E0ODliNzMyM2Q1ZTIwZjY1ZDM3NWQ3NjlmOWU3OTM3NmZkMDJkODUzNjg2NzFlN2UwODFlYjc1M2Y4ODg1NDVlYmU1YzAwMGIyZjgwMTQzZWIzNThkNDMxODVlMmYxYzI5NGI5ZjI5YzhiYjkxNDgyZDQzODc0OTRhYWQxNzZkZWI4NTU0MGZkMDA1Yzk3ZDEzZTY2NjNmMDk5NDRlYjQzYTQ2ZTYyMzY3OTRiZjZlMjFmODFkMGE0MjA5MGY5Y2NlZjkwYTZjNDgwN2I1ZmY1NDEzMDBlNTkzNDg4MWE4ZDkyMTk2YjRjZWU4NWQyODA5MmE4MjhlYTNiZmM2Yjc0NWFkMjE5YmU5ZjVlOTU3NDExN2QwNzllMDJmNGI3NDhlMmNjMDFhMzI4MjZhMzcwODIzMTkxNGQyNzcyYzc2NDExOWZkOTlkNTNhYjViNWEyZTlkODkxYTQ4YTlhYWFhY2MyNjMzOGIxODI0OGRiOGFiMmQ1MjVkYWYxNWZmNTNhY2JjM2FhOThkNGYyZDRhMzM3YmJhZjZkMWJlMjE5ODVhNGFmNjAwZTI5YmJiNDJjOGQ4OWU2YjM4OWM2NmY0MjI3MGMzYTBiMDUxYmRiNjIzODgxZTAyZjJmNDI5NGNlYzM0NzYzODY3NDdhYmFlNmM3NzAwYjhmOWIwMzg3Y2RkZmI3MzY2OGZiNTc2OTNkODQ3NDE5NmIzM2FiZDEyZGNlNTlhNTdjZjcyZWU2Y2MxZGRiYWFkZmIxOWU5MGFmODEzMWIzYTkwZjk4NjdmNGM3ZTE1YmRmOWUyMTg0NzcwMTZiZDBhZDNiZThkZDA1OTY3MWZmNjU2Y2JkNGVkODk4MDg2ZGU0ZDQyM2YzZGZiMjcwYmJmMTlkOWY1M2Y3ZjZmMmQyMmM2YWM5MDI1Y2JhZGJhNDQyZTMxZDk4MTFlMzdlODQ3ZGJkNDg0ZDgwY2Y3NDMwMzlmZmE3MDQ4NDcwZmJkYzYwODBmNmQzODFkYzdlM2ZhMjcxMjJkZjUzY2MwNjM5NGVhNmZjNDQ2ZTFiYTcyNTM4NzMzZWQzYWJiNjg1ZjE2ZGZkNWNjZjU4NWFlOGZiZjk5NTRiNTBmMTBiN2U1NDMyYTIyYjM2OTQwNmE5YjcwODg5NjFmMGFlMjA3NDk1YWU3MTg1Mzk2ZGNjZjI5MmRjNDYzZjQxZjM3NmExY2E4OWVlZmJhZTE5MjY5MTUyMDMxYmZkODE1Mjg4ZThiNWJhZjM0OGM0ZjhmZjNkZmY0ZmQ2ZDEwOGY4NzFkYWEzNTIxMTBmYTY0MTg4YjAxYjg1MjZhODQ1YWFlZDEzM2U0NTZiNGM4M2M0ZmQ0YmJiMTY1YjQwOTAzMDdlOGViMTdkZjE3NmMzMjI1MjBmMzc1OTljMjEwNWFhODEyMDc1ODM5NGE0MjIyNDczNDc2NzY0Y2YwYWY3YzU1MTgzZWJhOTY4M2Q3MjcwNjMxNDQzZjNjNTFmYjhhYjBjMTMwYWM0MzZhYjYwM2ZmNGYxZDg2NTZjZGJlZDIyOWEyMDJiNDAwMDhlYTEwYjE3MTU0MmY3NGE3MGI3YmJhY2M0MDE2YjdmNjM2YWE4OTYzM2I3NjY4MDU4ZjEzMzEyZjU3YzUxNjJkMThlMzk5ZQorU0lHOiBhMjdjY2E0YjlmNWI5NWFkMGU0NGU0NzQwYzE1ZGVhZWI5M2YyMmE5YjI1NGViYmQyMzI5MzY1YTAwOTY2YzlmNGVjMWU1NWM1ODk0ZTdiZmMyM2QzOThkMzk3MGI5NDY1ZTk4YThkMjNlNzJkYWU4ZTM1MGRhMzUzMWFlNjkwOAorCitUU1Q6IDg3NQorU0s6ICAzYzQwODBjZGEwZmMzYzAzYjYxNGQ5ODBmMmZmODMxZjViZTBlN2E5ODFkNTM4MWExNjE4ZTBiOGZkMDAxNzc2CitQSzogIGYxYzMyNjlkODcwNDAyY2FhNDM4ODIxMzVkOWRiYWRiYmIxNjJkZmNhMGIzZGFkMTk3ZTZiOGE3ZWU2NzlhNzAKK01TRzogMGNlZWJjMGU4YTQ3NzIwZjI1ODM1ZTJiOWFjZjg5MWJjY2E0YmRhMzg2MzdmMzYzMjc0NDU4YmFhOWUyYmJhZmVkZDA5MzhmNTY4ODczNGUyMmFjNTBmYjEyMGY2NjVmNmM0YzYxYzY1MzE3MzliOTI5YWM4M2NkNzdmODk2M2I3NTQ0ODhiOWI4NTljMTM4NTM2MzdjZjAyNWMxNGU4ZmRkMTE4ZmFhMTRjZjM5MzBjZWIzNWYxMDRkOTU0NDFlNTY0ODk0NDBmNjIwNDFlZjFhYTdjNGIwOGIyODA3ZTMyYmI5NTg0YjkwMDRkNzZlNzY1MzMzNDg1MDZkNjRmMTEyZTFmZjZmOTM4ZjY0MjIzMGJmMzhhZjAxMGU0MTk4NzI3MDI0OGIxMzYzNWEzNTY3YjM1NWJiYTViNTc0NDhjNmQxM2I3NGYzYmViZjYxNzkxNTgyMTAyOGZjYTVkZWZhNGNlNTQyNGNhMTkxY2Q1NGEyMjk0NGEzZDk0MGU0ZWUyZTJiYTVkNTA0Yzg1Zjk1OWI1MTRjNGZhYjQxY2NiNTc0M2Q5Y2IyZjliZjMzZDFkOGMyYTU4NjllOWY0NjYwYzNmYjIyNGIzOTE0MWUzMTEwYzllZThhZWI4NzFlMTRjNjJjNmJlMzhmYjlhNDU2OGQ3MzY4MTBiYjlkMjA3MzE3OGI2YzdlODdlMzU4MmVmYzYyYjUzYzIzYzVkNDY1MjBiYTMzZmZiM2E5Y2E2NDllZjI2ZmU3NGEzY2ZmNjE4ODQyNzMyNmI4Yzk2Zjc0MzU0Y2IzZWNhYTYxMWIxMmNkZWQ1NjVlNTlmZTFmOGY0MDAwOTdlOTNlYTg1OTUxYjViNGU5MDA5ZWVhN2RiOTM3ZTQzNDljNGU1ZTAwYzQ0NTZjNmM1ZjRlNTc0MTFiYWY0ZTQ2ZTcwMGFjNDAwMjU3NzY1ZjQ4ZGFiMDNlNDM5Zjc2YzE0OTliNTEwODA0N2M4MzAxMDlkY2U3Zjc0MGQxMzkzNzg3ZTI5ZDM3MTZkM2M0N2U3NTVjYjgyOGU3ZDQ0MGE5NzE5NzUxOTdlYmRiM2Y5YjczN2JhMTFmN2ZkMDM4NmE5NTkyNDkwMTdkZTcyMzRkNWU1YTliNDczYmI5NTgzYTM3NDJjNzc0ZWU1NTJhMTJhMWYzNmViM2YyNmM4ODViZWQyMmU5MWM3NGNmMzJhOGRkM2VkYjA4YjY3NGJmMzg2ZWY0Mjc3Mjc5MTJkNTdjNWZhZmFhMWNmZWI3NDBjZDUyYjlkZWU5OTVlM2QwMTYxY2Q5MjEzZjM4ZmQ2ODFkNTM4YWI4YmY5N2I3NDVmNTQ5ODAwMzBlZjhiNzI2OTZkNGUyNzQ3M2ZiMGYxYWNkNWQwYWFlMDI5NzIxMTY4MGVhMGZjNTlkN2I2ZDUxYzYzMjkyNTg1YTFkNTUzZDBjODk1NGI0MmE0YmQ2ZmNkM2E0OTU3NWJmNWM4ODk1M2YxZjRlYTdmZTBlZDdhNTc5ZDE2OTdlNjQ1ZTJhNjFjNjlkMWE1NmJjNjA1YmIwNDA2MGEyNzc4ZDUwOWE4YWFkYmYzNWQ5NDY5N2NjZWU5ZDM1NDNkZDAxMjgxYTAzMWYyYTBlYjNhOWViMTNhZTU2ZmY0NGZhMGFlZDRmMzQ4ODc0N2Q2YWY4MjBmMzk4OWI3MTMzZjQ0OWVhNTZkM2E3ZjczMWU3OTFiN2VkMmE1ZGI5MzliYjc1MzUyZGU3ZGFlYzUwNjZmZDU3NTU3MTY1YWRmZmE2MzFjZDNmOTY3YzNjN2NmYzExY2MxZjE0ZmEyM2RlZmVjM2ViMDIzOWI0NWVkNjAxYTNhODA3OGNjZmM3ZjgzODA5MDJhODU5ZWU5Y2UyZGI3OTVlZmFjYTBhMDFkYzA4NzlkNTA2YWM5N2QxMDcwNGQ3NzU3YjNjY2YzYjM3YzMzOWI0MmRiMjM3ODIyNzgwMjNlNGMyZTc3ZDc0MjQ2YzllNTQ0MTQ5YTU1YzBjOTIwZWJmMjk4NmI0YzViNGIzNTcyZjc0OGM0YjE1YzdmODYzOTk5YmM1MTMyYWRhZDA5NzYxZWI3NjUwNTAxOTc2OWZiNTU0MjJmNjAzMTg0ZTI0YzBkNGYzNzYxOTg3YjVjNTBmZWFmY2NlNTMzMDJhM2E0MTVlMjBmNTZhMDU0ODAzZTU1M2JhY2QyNDJhNWUxMzY0YWEzYjJkN2NiM2JjMWUxYjg2YTQ3NDMxY2JkMzk2OTViNjdmNTU0YzQ2NDViNzIzNjkwNDA5NGMxMWFhMWI0MDMyNmJhOTFiOGJmNDg3M2U5YTRkZTA0ZTJiZjQ2MjU5NzIKK1NJRzogYzlkNGE0NzI4YjhmZGQyNDBkOWM0OThhYTM1ZGU5NWE0YmJkNTE3ODViNzNjODQwM2ZkZjA0MGRmYWVkOTQ0N2VmYWQwMDY5YjY3Yzc4M2Q0YjgxZDk2NmJlZjZlM2Q5YTgwOGEwNTg0Yjk4ZWMyYjE4MzIyYzRjOTIwZWIwMGEKKworVFNUOiA4NzYKK1NLOiAgNDU0MzhmOTE0NjVkNzRhMjgyNWIwZjY2YTM1YmQ3YzhkMDA1ODY1NDc5YjNkYzEwYTliNTZmMjk3ZDMxYjkyNgorUEs6ICBmMDkyYjU4ODAzMzA4NzFlNWFhZmRkM2NlYjM4NTBlZTdlMDk0MWEyYTFkYzg5ZjRmYjQ3NzFkNzVhMjJmNmYyCitNU0c6IDMwNzFkNGI3MjBkZjEwOTM2NTk5NjdjZDRlZWZlZjJlZjk2Nzg0NzVmN2RlYzU4ZmVjZWMxZDkyOGRlYWY4MDI0NTdhMTkzNGU2MDQ1NWY0OTZjZjQyNTE4MjBlZDYwYTNkODEzM2I2MjRkMzNhZjI2YTI2Mjc4NGI1YTJmYmE3M2NjYTJhYTVlNTE5ZTFmNTM5NTg0NzgwNjQ5ODY0YmE1ZmJjMWYwMTFkZGRhYzM4MWY4ZDQ4ZDBkNjBjZTgyMzE3MDExNzNjOWQyYTMwN2E3NjMwMmViYzY5ZGNiYzkzMGQyODQzMTQ3NWI1MTZmOThmNzc4ZWQyZTFmZmYyNzI5MDlhMjcyY2MzZmJiNmIzMWM4MDQxYTM3Y2I3NzdlMDYyZTQ5NjQ5YWZhZDEyYzFiNWY3ZmNiODA2NWE5OWU3NDIzMzYyYWQxNjkwNjAzMTI2NWRiN2U4Yjg5NzUxZjhhNGE0MDdmMjUwMjY1MGZlZDc1M2U0MmM4YzkxMWU1MGI5NGIzODAwNjk1YjBlYmE3ZGZmMDZiN2E3MTAxMTdlNDkyMGQ0YjFjNjA1YTNlYmYzMmUwNjk2NjcxNmVkYTE0YjMwNDI5OThhM2M3YTVlOWY4MzU0MmQ3ZGRlNjVlNTI4YmVkNjEwMWRlYjMzMWRlYjk0Y2RkNDYwNDRiZWY4OGMwOTdiYWZkNDBkNjkyMWE3YzQ4NGM4Zjk2Njg0ZGMzNzE2NzFkOTRlZWU3Y2JlNWQ1ODc3MTUzMTRjZmYwZDE4NzcyNzJkODE5MGE5MGUxOGJmYjMyMWQ1MmJmNzQ3MDUxMzdiMmFiZjkxNjU3MzE3NjdhMTNhZGM5Yzg1ZTAzOTdiNDdhZWY5NmJhZGIyY2E3ZmNiODI5M2IwMWZkMWRlMzE2ZWUxZTY1ZjM1NmI5ZDZlOGVhMWZkZDgzN2JkOTYwODExNDllYTJkY2Q3M2M0ODgxZjMyYjdkZWViYzM3MTVlMmQ3Y2RiNjQzZTBkOThmNGU4NDY1MDhiMDRiMzI0MzlmZjE0YjExNjRmNDY4NDZkZjlhZmFlNDQ0NjRjZjU1MDEwNGNkM2FhYjM4MTc1NDA0NzBhYWEyYWI5NTU5YTY4YjdmZjZiMWI5YzBjZTlmNTg2OWNiZGNkZDYxNzA5MDk0MmUzNTNiNGM3N2YwOTM5NTg5NmJlY2RkZmYxYWI3ZjA3NTg2YTUxNGQ4MWZiMDk2MzYxNTU3NTY2ODcwZjE2OTE5ODM0ODVhODBjMzQxM2RhOThiOGQxOWM3OGU2Mzc5Zjk0M2U1YmQ1YTU2OTdhYTMzYzVlNmJmY2ZiN2I4ZGYxZTE1NzRlZTQxNmZhYjNjOGE3ZDA4OGIzYTA1N2NmODY1MzIxYjc0ZTYxMDM1MjZkZDlhZDE1Y2E1YWQzYzBmNjk3MThlMjcwODFkNGIzNGE3YzZkMWFhYjZiOTZjMGE3NTRiOTg5YjQ5NDA2MzhjOWVkZTNkMTdiZDQ5ZjY1YmY3ODNkYzg1ZjFjNGIxNDQ4NzZjZGJkYjIyODJhOTU2NGFhODFiNTcwOTIwODBkNjQ0OGZiNjU4MGVjZjA5ZjgyYTc1NTAxMGQ1NWQ0YTVlNGYzMDVlMjU5ZGJlOTk1MDhiNDc5MjUwZDgwZWMxN2M4NzYwYTkzZTA1YTI5NTcxZjY4NTYwNzMwMjJjODcwNjkxM2M0NmEyZWZkMmU5Y2FhZTRmZmExYjQyMjJlM2Q3MGU5NzllODFhNzE5NTFkN2NiODMwYmNiY2Y5MDFhZjI0NGY2NGU0YWQ5ZjUyZmEzYjYyMDMxZTM1MTZkYTUwYmMyYmNlNzhlYjlkNjFiZmVkZDliM2Y1N2U4OTM1NWYxNzdkYjYxNjJiZjYxZGEwZTQ1NGMzNDI4OGI5NjdjM2ZiNGMzNDFiMzJkNGQxM2EzMTk4NjliOGUzNjA0NmY5ZTMzOGI1ZjM2YTFmYzFhN2VkYTdkN2IwZDQzOGUwYTc1ZDg0YmJlNGQ2OGM4NzlhZGE4MGRkZTIzZjcxNTViNTMyY2NjZjdhNjNmMWJlZGY4NGY4MmY0NDBjOWVjM2NiMGU0NWYzMmM5MmY3NjQzOGY1YjRiOTEwNDQxZTY3MzhhZjNmNWQyMDUwZDU3OWVlOTZiODhmM2IwMDgxMGFiMTI2ZmYzYThmZWZkOTcxMDQ0MzI0ZGQ0ZWIzNDQ3ZGFjNWI3NzgwOWNkYThjNzE2ODI1NDlkN2NmMmRjZWUzNDBlZGNmOTQ5NGFjYTQyOTAxZTJjMTFlZDk3NzkwYWY0OGJjZWEyOTUyMWVmMGUzZDAzY2RhZGVjZGM4OTRkZDA3NTYKK1NJRzogZDkyODdiN2ZlYzAxN2YyZWE0MGExNGExZjYyZGNhNzhiMDJhM2Q2NjMyZGY3YzYwZWJkOTBmYzVlNDkyYzVjNjJjNDMxNjZiZjg1NjU4ZmIzMGEwOGI1N2E1ODEzMTIxYjgwMzk3NTcxYTMxMmI2ZGQxMWI2NTM5MjA1NDE2MDIKKworVFNUOiA4NzcKK1NLOiAgNzJjZmNlZjRjOWQ2YTE5ODZkMTkwMzExODQwZTU1Y2JhZmFjYzhhNmViNWVjYzcyOTM0ZmRhNTM1YmRjZmZiMgorUEs6ICBhOTQ0NjRkOGNjOGYzZTQzMzkzOTQ3NjQ5ZjkxYzI3NTIzMjdlNDBkYWNhMTFhOTk3MGM1MTgxZWRhMzdkNjA2CitNU0c6IDY2YTZjYmU4OGE4YWI5YTMzODQ3Nzk3ZmM0ODBiMjQ0ZThhMmI4ZWM3OWU4MGJjMjYzNzc1M2RlYjM2ZmEzMDE0Zjg0M2UyMmE0N2RiMGEzMTc3ODM4NWVjMWY0NTU2NzJlMGRmZjZjYTIxY2E0Y2ZkMmI5ODk0NzFiN2ZmYzMwNzgyODEzOGIwYWQ0ZTY0N2MyZDEzY2VmNzI0NDY5MDU0YWJkMzc0MDI0NWFlYTRiNzg5ZTI0NGU5NWNmOWVjZmQwOGEwZDEzYzdjZWQzOTMzMzI3MjdhN2YzZDhmYmRhYmQ5MzlkZTI4Y2FhNDFjYzk2YzcwODExOThlMjI2NTNkOTRlMDI0YTYxZjVmM2RjNWFhMzdmYTlhZGRkYzk2Y2YxNjlkMzUwNjJhMGEyOWJhNDVhNTM5Yzg3YTY4YTNhMDMwNDM2MTMwOWQyMTNlNjE0ZWU4MzczZGFmYmEyYTdkNmVkN2QyYWQzNzcwNGMwOTQ2ZTRkMDkzZTJkOTRkMDYxMzY0Y2MxMjMxMDYzNzI5MTAzYTc3Y2NiNTAxODkxYmJjMzE4NTQ1N2JiZDI4NjllYjYzZGM2MGYxOTZmMTBhMzhiN2IzNmNiM2Y2NDNkMzVkZGJmNDM4YTQ0YmYwYzhmNTcwZmFkNDFiZGRlMjY3ZjBmZmNmMWYyZjkyN2Q2MjZkMWIwZDk4MGEwY2UyMjNmMmYwMDU0ODQ1YWZlNDFkMzlkZTVhNDU3MjE5ZjI3NmM2N2U2OWJlMmQ1YzllMDcwMTMxNjM5NTYxYzI2NzUxZmIwNjQzNWUwZTQyZTI1MDhjNWY0OWNkMTJiNTE3Yzk4MzNmZjk3ZjVlNTFlMWRjZWFmYTk0MjZkM2RjNTJmZDEzNzljNjRjY2FhYmIyNmRiMWFmNmRlZDcxNTM2Mjg4NDJmMGNiZGJiYmQ2YWEwY2ZhNTQwN2Y0MDk0OTZjMDY1MzJkYmVhYzk0ZGFiOWJhYmEwYjNjOTg4ZmEwM2QzNmY5MTFkODBlNDliMzcwYjY4MzcwMzdmZjI0OWU3NmQ2OTJjZDE3NzM3ZTBkMDc5NjVkMzNmMTcwNDJiYmNkMWU5OTBlMDQwZjcxOTM2ZjZmY2EyNTQyYWUzMzc0ODM2Nzc4N2MwMWJkZWE3NWM5YTBlNjYxNTAyODFjNDY4ZmU1YzczYWY5ZTViZWMzNzJkNTAyMGMzZDM3ZmExMDM1YTY3ZTIyNGQwOTVmMDY2YTUxZmUxZjY4MWMzMDczOTM5MjcyZjZhZjc3NTBlZDhkMTgzNDkxNzhhYjRhMmVlYjRlOWNhODJiYjY3Mjk2ZTk4OTBmMzE2YzlkOTQ5NTk1M2Q2ODQzNmViMWMxYTJmYjZhMWNjYTQ1YThlODhhMDliZGQ2NWE1NTU4MDI1NjE4YjM2ZDdmM2NiMzg5ZDJlMmFiMWVkMjMzMjI4ZWM5MmEzMjc5NzhjMGFkY2VkZGI2Yzk2MzJkM2FiZDc5NzE2MjE3MTM3NTQ3NThlMjEwMTNhMGMzZDAwOWI2ZTMxOTNjYzE1MmM1N2VmNzMxMDdiZDQzNTdkNTI4YmU0MDg3MzAyN2JmMTg0MGY2ODU1MzYwODBmMTJjNWZmYTkzY2E2Mjk3MzY3ODBlMDE1ZTg2ZDE5MDlmMGQ4ZjM3MjAxMGM5Y2I3MmMwOTg5ODQ1ZmM4ODMxNWU2YjkzNzBkYzkyZDM2ODNlZjQ0ZDNmNzVmYzk2YzRiMGU4OWUxM2Q2ODJkMTk4OGI2ODU3MTNlYWRhODQyYmU5ZDJiYmUyYTc2YmJhMTVkMzhjYmFmYjY1YzQwYzIxNTliMGNlZWIwZDc2OWI5YmUzNTU1NDA3MzRmZjM3NzM2YzBmMGZhY2I5NTE1OTMwOTM2NWI5NjQ2YmM0YjM0NGZiMTlhNWMxNjM5YTg4ZTg3MzE3YmZiM2I1ZTdiNTEzMGZhN2Q1NjQzZWQ0ZGEwNjQzMGM4YTBjMTg1OGNjZjJmOWE2ZTNkNjIwMTIyNTNmMDEyMmRiYWI0YTM1NDc1YTZmNjU1ODliMmIwOTU5OTI4MjZlNGYxYjU4ZmEwNTBiOGY5NWM0ZmViYTNmYmFhZGQyYzIyNDRhZDRhYmQ0MTAxMzlhZGY0YzE1M2NiNWU2OTMzN2FmMTc2YTc4MzdlZWFlYTk5YmRjZDU5Mzg1YWZkZWQzNGZmYmE4MDYzYTM1ZjRmNTU4ZTRlZWI0OGYxNDg3YjU2YjFmOGQxZjczMDY3NjIxY2I1NDhjODA4NzUzZTM1MjZhMmYyYWFiZGUxMjZiZWE1MjFjZjY3M2RlYWZhNzkyY2E1YmQyMjEyNzk1YmQ2NmI4NgorU0lHOiBkYjcyNzBhY2NlNzhkN2ZiMDkwODBhMzI3OTQxYmNlN2ViMTQ1YjllMzY2MTg2NmE4NjgzZjlhMWEzZGU5N2ZiMDJiMDI1ZGI5ZWM3NmZmMzI1NjBmZTYzODgyNzc0MmVhMmY0ZWJlZjZiN2NjZTQ0ZjlhYWVlNDM0ZmQ3YzEwOAorCitUU1Q6IDg3OAorU0s6ICBhNjMzN2U0ZDNiMWE0OWIxMjYzMTY3NzhjNjEzNTE2YzAzYWM4OGM5NmQ5MmZmNWNjN2UwYzg1MjdjY2UxYTYyCitQSzogIGY1ZWFjNGZlMGVhMWE1ZjIzNmI0OWRhMzNhMjRlMmYzYTgzZDRiMjYwYzU0ZDM0MTZjNjQ0ZTA1YzgzOGJmNTEKK01TRzogZTMzNDMwYzM4YzRhNDBiM2M2NmUyMGNmM2I3MGU5ZmVhOGNjNTA3NjFmMmFmZTI0OWVjMDU5YzA3YmMzYjM3ZTViOTRmNGE0M2UzMTAwOTliMTlhODVmNTlkZmY3M2E3ZTQ5NWM0ZGYzMWY3NDc4MGNkZWY3YmQ2ZTQ3YzM5NGMxODkxZWEzMDUyZTNjY2Y1ZDg0YmFlMDgyZDI0YmE3MTc4YWM2NWQyMjlhZDE4YTg0OTQwZjZiNGRiYzU5NmVlNjNjMTgxYjU3YjViNDk2OTg5NzljMTg2MzJmYTgyMWNhNjFlMzVhMGQwMzUxZmUxM2Q2OWUwNmRkY2M4ZDY2NmRjYTI0NTAyMTc3ZjM0NGUyZjQ0MDU3NWQzOWViZmU1ZTdmMTA2NTNiNjViZWYyOTFkYzgxM2EwNDM0Yzk3NWRlMTY0YzFhNzZiZjZmY2VmOThmMjMxODFjMDA5YjkxODMwYjYxOGU0ODc0ODQ3ZDJlMjFiYmRiOTNmMjBjZDhiMWY0YmFhZGY5OTQyOGEyMjY3NDM4NmE2NjgxNTJiNGI5MDM5ZmYwNmFiY2ZlMzM0YTA2MmY3OTQwNTYxNzJlY2JjMDc5NGRmOTgyNzFiOWFjZmU0YjdkYTU1M2E4NzYzNDIzNzYzMDAwOWEwNWIyNTdjMTg0Y2JlMjNkOWNkNWEwMzg2NTgwMTBmNTc0ODk5ZjNiMmQxNTRkMTg1ZWU2NzIzMDkxMzY1MGMzYTA1YjU0YTJlZGMyNDNhNDI4NzM5OGUzNzY5MjhlYTljNmIyY2JhZjM3MTI1MjU0MGUyYjgwNDNmY2Y1NTY4MTMxOTZhZTU3MmMyN2NmYjVhNDZhYmI5NzI5YWYyZGNmYzI5ZTAzM2RkMTFmMzNlODZjYzZhYzNiY2U2ZjNmOTU3N2QzNjc4MWE2OWVkN2VhZjhjODI2M2EwZjE4ZWJhMGZlOGE0ODFmM2UxNWE1NTU5OTQzNDE5NWY3Y2IwNTdkZDM2NGVhYTA3ZGQwZGZkMjY2YjgwN2Y1M2EyMDcwZmQ3OTFlODcyNDIyZmQ5MDcxMzRmNGE4YTc4YTg3NmJkY2IwMzFhYzg2MGRmZTBiYjU3ZTEwNWRiODI4N2IzMWE2MDRlYjcxMjY5YmU1YmEyMjk5ODVjZWFiYzJiZGYxNjVhYzc0MTY1MGIxZjAxM2E2NmM5YmQyNDNkMDNhOGIxYzUwODEzODFjYjkyZTIzZjkwNTc3NzFmYzA3Y2EzMmRmZjFkYjk0ZjVhZGZkMmY0ZmY5YWYzMWQyNTBkZDRmODZiMjI1OTJmNjBhNzQ1NzUxNTYyMTNmMTA4NDZjNzQ2YTkyMGZlMzk4NTFiMzJmZTRjOGI4NzU4NzY1YmM1YjhiOWQ1Yjk5MjYzZGYzNmY5Nzg4ODA1M2ZkMTBmMWQ2OGY1NzdhZWQ1NTliY2ZkZTc0NGJjNjUxMTA3NmNhZmQ2ODk0NGEwZWQxMDU1MmQxMTM0NGJjN2U0ZDllZjkzNmRhY2NlZDUyNzQzMzEzMjk1OWIxYzczMjRhZDFjNGNiYzNhMWE3MzZiMWYwMmFhZThlMDYxMWFlMjNmZGQ0NzRmNWI4ZWU3MDU2ZmNiNWFmNjEzM2VjYzA4NGJiOWYxZjUwY2JkYWM2NjI0NDQzN2I0MzQ4ZjRlZGZlMjM3ZmMzYzM4MjlhYjk0ZWI0ZjE0Y2FiMWNjZDZjYWVlMzZmYWRjMjBhMzEwY2YwNjkwNjIyY2RjYTg0OGFlZDAzZmY0MDNhNjYzM2Y0ZjY1Nzk5NGI3ODBkZDYwNDgxNDljM2JmYmMxNzg4OWUzN2Q5MGIxZTU0MjBlYjNkNDU5NmI5MWJhMTFiYzAyMjljNjVkMDViOTNjZDdlMDQ1NGQxZjNjNmUxZTgwNzE5ODM3OTJjNGQ0MzY4ZDA3NzhhZWY0ZTEyMzMzNWZkMjk2MmM2NTdiZDA1MTM1NzFhNWZjZTIxMWRlNjI4NzRmMjdjYTEwZGMxNWJhMmQ0NDVmMWNmNGJlNWY4MzNjZjBiNTY0YzAyMjU3NmI5OGMwYTI0MzQ5YjY3MDg1ZjkyMjAyNjc1ZDdkYWM0OGI5NWUzYmZkNjU1NWE5ZWNiN2M3MmYwOGJmZWMwZDIyMDIyMjQ5MmZkYzk2MzZmMDM2ZWM0NTA4YTM2NWI3YjcwOTc5ZjllYjRhNzI2M2E4YmFjYjFjMWQwMTU1NzM4NjQ2Y2RkNDZhYjkyMzRhMTcwMzExNTAwZDBiYWU2ZTU1YTg2M2JkYWE1NmY1MTY0NWFkODUyOTdhNzM4MWY4ZDIwY2Y5NmM0NzRkMWJiODFmY2UxMzJiMTQ1NTVkMWEKK1NJRzogNzgxMzc2Yzk1MTJmYTMzYzQ1NzA0N2ExZjRmMGRhMzE3NmU2MGVlNDc3ODI4NjliN2U5ZmE1ODQxZDk2NGYzYzFhZDY2YjcwYzExNGIxNzcxYzMyNGM4M2ZmNmNkOTk3YWVmY2NkYzU5YzExNGRiOWYyZjNjYTdkODRhN2I2MGYKKworVFNUOiA4NzkKK1NLOiAgMTA3ZGE5OGQwZWU4ZTdjMDBmNmQ0MWVjMjY1OTQ0Y2U2N2VmOGM4ZmZiNTFmNGYxMWY0ZTVmMWEyN2ZiZTgwNQorUEs6ICAzYmVjMzRiMTYxYjFiY2ZmMDA5ZjhjZmM1MGQ4NGNlYjZhMmQ1YjIwM2I1MjM4YThhYWQ4YTgzNjE4YjQ0MmU3CitNU0c6IDFhN2I3ZjNlMWM3YzQxNDkyYTdjZTc5OWVmZGIyZDlkYzJmMjQ4OWM4NGFlMjhiYjdkMDg0ZjMyZWNhOGZiYjA2Njg4NWFjNmYyZWY3NDQ5ZTcxMjI2YTgyZTlmMTUzNzcyYTk5M2ViNmI2YmNhNjQ5MWQyNmFjYTVkZWU5OGI3N2ExZGRjNTk5MjJiMzE0NWM0NDdkZTczN2ZhZmFjYmE1YTc1ZjJhODAxMzdiNTU5NDY5NzIyMGQxOTYxNzY3NGE2OTExM2ZkZjc3YzM0M2FmMmI3ZTM4NjFiNWI3ODIyZjU4ZDYwMDg5YzNjYTU0Yzc0OWQyN2Y4ODM3OWMwNjc1OThmMDYzOTM5YmE4NjMxZDFmNTJkYzlhYjQ1NTA0NWZiMzYwY2MyYTViNmIwMTI3ZmFjZmNmNWIxYjRjMzNlM2YxOTRmYzkyNGI4NTQxNjhjYjExNjlhYjEwOTk3YjQzOGI3MWM4MDg3ODM0N2JlODg3YWY0NDgxMDEzNGI1MTRjODA2OTA4MjAxYTNkM2U2ZDBjNTYxMjBjNDMxNDg3NGRjMjk0NGQ4NDQ0ZjAxYmFmYTM0YWE2MmVjZWYwOTgxNTQ1ZTVkMDJmNDAxNmMwYjE2NGZjMDVhZTE4ZjUzNWMzMWJmMjBiODZmMzFmN2E3OTRhYmExNDg5ODRjM2ZmNDMzZGMyMjJjNDQzYjVkMjZjMWY2NmU2YzVmMTlkMTljZDZlYWRkNGRjOTQxMDFiMmY1MmI1OGM5ZDQ1OTBjYjEwZGJjNWQ2ZWFjZDExZDQyZWQwOWYxNWJkZTQ0ZWU5MjcxZGVmMjkyZjczMWJmM2I0YWM2Y2QxMjdlNDg4NGMyY2IzMGIyODVmYzkyNDc2MzhhMjk5ZTQxNjUyMDYyNGQxZWM4ZDBkZjI0OTg5MzljNzE5YTllN2JkMjlhM2M1YzMyYTNlODI0MTM2OGQ2ZTRmOTBmZWEyOWRjM2EzZjE0N2VhOWY3NmM1NzgwZTczMTQzZjU1ZDNkZWM3YjY2MzQxZDNmM2VhYzFkOThmOGU3ZDRlODc3NTA5YjQ0MzhjM2E1MjQ2NmQyNDJhMTBiNGMyN2M0YTBkYjkyMzJkYWQwMTE0MTRlYmZiZDU3OTA2ZjFhNDEwMjA3YjUyNmIwZDFmMWI2OTg2YjNlYmQ3NTUwYTJiM2MxNWZjMjQwOWM3NjI2ZTBkZDMzMGVmNjcyMmUzYmE0OGIxZDkyMDU2NTJhYzE5NGMyMTQ3M2NlMjU4NTU5ZGI1MTFlZmFkM2U1ZDU1ZjJhNzk2ZDY1YTZhYjk3ZDg2MzEwNjJhNTkzYTEzYWFhMDk1ZGJjOTNlNjIxN2NlZDYxOWNiMTZhNTdlNzQ0MzU1YTE2YjE1ZTc3ZDQ5NzkxMTkyOTliYjA0M2U0OGZhM2U2MTU0NjBlMTY0ODgyOTg0YTIyM2Q0MThjYTk1MzQwYzViZmNkYTY3M2ZjZDEzYjI5ZjJjNDdkMmY5N2UzZThjNjEzYjZjNThkZjBlNjJjZjIzMDYxZDZmNTQ1Yjc1NTAzM2ZkM2RjMTQwNWU1ZmVmMzVhMTNlMDE1Zjk4YjFjYzQyZjcxYjk5NjgxZjk2ODEyNTgyMjlhNDQ3M2Q4NmVhYmIwYzE3OTI3OTQxZTUwYzA4ZjM0YTc2YjQzYmNjNmQwNDJlNTYzMmVmOWNjYzkxYjZlNjk1MGY1ZDMwZjY3MGZiMzkwMmMzZDQwOTMxNWE0MGIwODIxY2U4YTk5YTk3ZmVjYTU0NzhiZmQ3ODJlNzg3NjdiMzExZjM3NDE2M2Y1ODk2YjBiZWI5NTgzOGU2NDU4NzhjNjQ5OTAzODUxMjNiNjE1NzVkZDg0MmRjNzYzNTRiYWM5YzZkNWFjZDk5MzViNjA5YmNjY2I4NDYzZDM5MjI1ZGExYWZiODkxMWQzNmU2MDk4OTJkZDE3MjM4NTJhYjlmODI3NThmM2YxZTRkMjhkY2YwMmNiMDZlZWQyNjg0NGFhZTY4ODJlZDQ0YmNlNDRhYmNkMWRmYmE2MzM0MThjOWYxNTU4NzljOTdhYjI3ZjhhZTIzODMzMDM5MmJlNTQ5MWEwNzg2NjJkYWFhMDJhM2Q1NDU4Yjc3YzU0OWM0OWJlMjAxMjQ1ZTdhYWVjMGQ5NGU1NDM3YmVjYTZlNWFiMDQ2ZDY5NGU5NmJmNTFlMDRmYjQ0Mzc5YjJiOWI4MDE2NzVmZTE0NzdmM2UwODk4NzRhNjAxMTcxZDhiNjhmMDIwMjAxNDYwMWE1M2Y4MTJmNTNlNTgxYzNiOTYzMTJiMzZiOWVlMDRmZmYxMWQ5ZWFiNGU0NTE0OGRjYzhmMGZhYjEKK1NJRzogNTMyNTJiOTIzYWQxOWNjMzk3ODRkM2E5YWU1OWQ2MmE2MzAwZGNjNTBhYzhmZDA3MTNjYjU4ODQ0NTAxZDhkMzgwNWFmYTBmZGE2NGM3M2VhMGY2MGU2YThiMzQ0NWJmZmZlNmNhNmJmZGM4N2UxMjhiYWY5OWJmNjI2OGZjMDkKKworVFNUOiA4ODAKK1NLOiAgOGJjMjI5ZmMyMzQ2NTNiMTNjOTI0NzEwY2I0NjhiOGZhOWIyODBlMmFkYjQ5Y2I0YjM2YmY1OWQ2ZmE0YTYzOQorUEs6ICA0NjE0Njk3NWRmNjcwNGNiZjQ1MzIwYTVlNmNiNmRlODEzNDY5ZjMxMzFlNjFkNDQ3YmJjYTFhNDc3YTBjNTU3CitNU0c6IGJhZTJkYzdmOTRhYjVjY2RjYWE4Y2Y0OWVkYmVmMGY2ZDdhZWIxZmE4OTA3ODAwNTMzYWY0NDkyNjExMTk0ZTU2Y2VmMzdiMWYwMzMzMDM3MzhhZTJjM2JjNDU4OGY1Y2IzZDU1ZjM0NWI5YTQwN2U3ODc3NDJhMDZhZjBiNmVlMjBkZWUzZGZlOWM5MWQ3NjJhM2ViZDE5YWVkMDc5MDdiYmI5MWNkNzc2MzI2NTQwZGVkOWY3ZmY3ZGRhNzY2MTVmOTc4ZTk0OTBmNDA2ZWQyZDkxMTZlMjA5M2ZhNzg1ZTk3MWI1MDYyZDMxY2I0MGZmZjllM2M1NTFhNzNiMjAyNDVkNDZkZjRkN2ZkMTMwM2EyODE4MDE3MmQ5YTJiZjU1OTNjNDc5MTdiNTg2OTA5MTdjMWZiMGUxZTI5OTRkMWZhOTc3MzVhZTM3OGRlNmVhZmQ1YzFhMjVhYmFmYTNjZmQyZGY3YWVhYmQ2ZTY4ZmM0NGVkZjgyZmM4MzY5NGU1ZDg0MWExNWIxNDU2OGI2MTEwYmU2NDRiZjIyYjcxZmM0N2Q3ZjA3ZTE2NjY5NTdkMGY4N2RhMTdmMTNmY2Q2M2MxYzI5NjZmNjg3ZDI1ZGNiZDk5NjNmMDFlZmYxMzJkNWYyYjg2Njc3ODE2NTg4YzEyM2U5NDU3YmVmY2NlZDJkM2NkMWQxYmViZThkZDhmYmIxNTg3ZTU1M2NiY2M0Yzg3NjIwNjRjZDMyZWY3YTE3MDI0MTBmNzdmMTUyNDBkN2UyYmI1ODJjNjc4YzBkYTg4ZWY0NTIyODMwYjE0MzY2MGFjOWM0MzRkOTU3NzJlNmVlZWVkNjAxNGFlMTY4MjRjY2RjNGRmMmRmNjRhZWI2OTgwYjUxZDExODk4NWRjYmJkMTk2MWYzMTVlNmE5NDMzZjBiOTZiMWU2MzUxMjU3ZWFkODNlMDViNGNjODljOTI0YmY4MzU1OGJhN2QyZTdjYTM3YzAzMTc5YThmODViODMxZTcyMTdiZjRjNTUzODM4NzYxZDMyNjAyODUzYjgxNTkzYjBlYmY4ZTRiOWZmYWYwZWM0MDViMmE4M2FmN2RlNTU1NGRhYWQyOGI1ODJlZTA4YmQ4NGIzNzU1NTBjYWUwOGFlNGE1YmRhNzE1ODFmYzNiN2I1NDQ5OGM0ZTFhZmI5NjZiNGFmMWQ5Yzg0M2E2YjI1YjM0ZTA0Y2ZkOWJkMjM3NDI0NGYxZmUyMGVjNjJiZTNjY2ZhYjRlZGVmNzllZDY0ZTZiNzFhYTkyMjgxMjdjNjM1OWVhMWM0YTgwODc4OTA4OTZmZmE0NmUwMDkyZGVjN2VmYmM5NjBhMTdiNzcwOTE2Zjk1NDA3MDEzMmUyNmQ5OGQ5Nzc0YTJhY2RmODA5ZDU4NmRmMDI1MmY2N2NmZThkOTg1YTNlMjQ4ZGIwZjkwNzMxYWNlN2FiZDk5OWM3NDZiNjk2NDhkNWMzYjRiZDYxMTM3ZTA4ZmNjOGIyZWZjNTY3NmJjZDg1NmExM2IzNjIxNTE0NzRjNGExZWZkZWRjNTkyY2YzZWFkMWFiYWJjZDQ4ZWUyMDRkMjc3MjZhZDFiZGE0ZmU0YjA5YWI1MTA4OWQwMTZkZTZiYTI1OWVhODE4MDdmYWYyMTFjODdlNGM5ZWZiZjZhNGM3NTNlMDhmNzgwZWQ1NTMzOGMwZmRlMTRmYjk5YjMwNzIyYjU1OTRiM2FiZTAyMDQ3ZjQ2NjI0MjQyMWZiODExNzZjOWM0ZjBmZDJiNWU3YzVhMGY2NWEwYzU5YWE4YzNhOTg2MDg3ZGU3YmE0MGJhY2E3N2JkMzZhYzIxY2UzNGU5ZmU5N2ZhY2M0ZTI5ODMzMGVlY2UxYzhlYzYyM2U2NmE0YjBmMjM0MmQyYzVhMDJjNWY1YWJkZGM1ZmYxZjFmMmQwM2MxZDRlZTliNGIzNDJlZDNiMWNjMjY1NjFmMzIxN2JmODUwMGUwOGYwMjc1NzFjNTNjOTIzMjYwNWE1M2YyYmRhMDI0ZTM5OTI5MTYzYThlMDA3OTFhYzA2NTZiYjA3ODM4MjVlNzEwNWZmYTlkOTA5NjlkYzA5NGFmNDZmNzAyZTg1Y2MxMWU0NDJiM2Q1NTM0YzFkMzI3NTIwN2Q2ZDI5YTk0MmMzNThlZDVmYTA3NTU3YzNjMDE0Y2Y1NDFmOWFhZWVhNjAyNWI0MWVjZGQ4NDg1MTJiYTI1ZTcyMWU0M2QzMjkxODVmOGY5NDg5MmU5ZTJkNWU3Y2JiOTllN2FkMjVmNjllNWJlZjczMmNmY2ViMDc4NjExNTUzY2M3ODM3NzM3NWU3NGU2NmYxYjlkOGQyMAorU0lHOiBkMjQzYjg3ZDEzOTdkNTk0MTM5ZDgzYzM5YWNmODUwMWQwNzNiZDRiZTcxOGI0YzIwNjk4MDcyOWU3MjBhNGM1YjBlYTkxYTI4ZWExMjYwNGE5ODdlNjk1OTFjNTQzMDQ5ZjI5NzNiYjkxYzE3MDIxM2MzMmE2NGEwZmFjODIwNAorCitUU1Q6IDg4MQorU0s6ICAzZWRiNTBmZjA3NGVmOTcxN2Y0ZmIwYjZjZTI1MmJmNGJkMDQ5YzkwODM3NzVmNTI5ZWFmNTFlOTc1Y2IzMjQ1CitQSzogIDRiYzIxZmUwM2U2NzlhYmJmY2Q4YzVlYTJiY2M0ZDgzOGE3ODdkNDg0MGMzYmMzOWRlNGIwNGM0MTdjNzY4YTUKK01TRzogOTc1ZWNlNGU4MWYwMDE1ZjVhYzMwNDQ2MDlkMGFjM2E4ZGY5MTQ1YjUwYzQyODg5ZGQzMTJmNTYzY2Y2MTI2ZTM2ZmZmYWYyMWViNmI4NGZiZGExNWFhODVjNjYxNDVmNzU0MWU1YjQxYThlODE3MDBiZTM1NjIyNGZjMTA5MzI3YTY5MTk2NjU2NzM1MzRmNWM4YTRhMDAxNzUwYjE5OWRiZmQ2MzA2OTFhZjU1MmQ0ZDI2YTlkOWFmYjMzYTE2YWYzOTExNTQxMjRiNTM0MjZjOWY2OTUwNTdiMTgxNGZkNmQzMTAyOThhZjZjODMwNjg2YTRhMDA3YTE0ZTAwNTdiNzJmYmFkNWI4MDNhZDM1M2QxYzNmZGI4OTBhOWM4MTgwOGU4OWYyMjkxODdiY2I0NGZlZTE2YTRlYmNhZDVlYmE0NTliMDI4MjcyYTU2MmMwNTA3OWZhN2FlM2VjYWU4MDRhOWU4YzRmM2YzMTU4MTNjNWVlMDg0MWJiY2NmZTRhOTU2MjNiNTE3YTRiNDJiMmM2ZDk3YTNiZjI2YWNkYmUyZTk3OTYzM2YwMmFhYzQ2NjUyNmEzZWJiMTRkYTE5YmM5NWYyYzNmZGY2YmRiMDhiZThiZGU5N2E4NjRjOTA3ZTkxOGM2NzlhYjcyNmY4MDE3NzE0NTg0MDIxNmI5ZGMzZjk4MWVmMTc4NzRmMDhiMmZjNjYxMWE2MzQ2YzNkYTZhNTVlY2ZhNzUzYzk5MTlmNGYxOWUzYzc5MDkzYmZkNzhmODYxNTk4ZTQ2NjZlMWNhYjY4OGU0NjA0ZDQ2YzljNTgyZWFkYjkyYzk4OGY0NzhkMTYwZjVhMTUxODJiMzM0MDIwMTc5N2QwYjk1NTI4MmU0YTIxN2I1MGIxNGIxMGM5ZjQ5MDY3ZWEzZTg0ZTUyNzRkY2FlYzc0NDc0YzU3MDdjMjhiYmEwZGI4Y2RlM2U4MzhkNzMxM2MxNzFiODVmZjJiOWEzZDJiMTY3ZTkwNjFmODRkZjNiMTNiZGQwOGIyZDUwMWU1Mzc5MmQ2ODA1NGQwNDhhYmZlM2JjZTk4ZDk3ODI1NmYyZmQyYzZjNGU3NmYzOTY4OGNjY2YwZmUxNDlhZjlkMzQ3ZTdiMDQwZWYyNDFkZDVhNTNlYWE1ZWFiMzVhMThjNjhjNzU0YTA2YjAzMzk5YmJlNTZhMjUyNjhjODI5YTViYTgyYjI4MTkyMDQxZDNiZDI0NGViMDhiZjc4ZTc2ZGVmODdjZDA5ZjMyYmVhYzliYjYzOTgyM2IzNjk2N2E1NzRkODk2MGQxYmQwMzQzNTY3OWQ5M2VkZGM1NTgwNjNjNTQwYjljMmY2MDlmZWQyZTJlMzU3NmQxOWU2MjA5ZWFiNDY2YzIwNjc5MWMzYWExOTk2MjNmYmFlN2QzNDk3ZTgwZmRkM2ZjYmFmNWI4OTExMGVkNzIyNDQyMzRiZTg1Y2NhNGIyN2EwOWJiNzBhMjZlY2U0ZWI4ZGQ5NzBhMjZlNWIwNDM2MWZhNTBlOTAzODBlZDY1ZjQxNGMxYmU5ZjUwNjRmNzE0MjkxMTYyNjdlZGQ2OTc2NDIyYWQ5MmRlYjJiODA0YTkyZTgxYzlmNjUyMmEwZjNiNWQ4YWQzNmI0Zjg3ZGI1MTZhMjI4NzNlNmYyNzI4NGYyY2EzNjBhMmY0MGZmM2Q4ZTIzZGVjOGVmOGExN2E0M2FjYmI2MTI3MWE3MjdjYjg2OTBkMjliYjgyMDE2NzM2YjMxMDI2MjAxZGQzZDM4OGQyYzY0M2E3M2NmYmQwYTk0ZTIwNTUxZmI1ZjhlMWZmYzM5NzQxMjcyYWEyMzA4ZGM4ZDIxMzNhM2ZhOWNmMTA5Nzk2ZDY5ZDJjYzhhZGRjNDRhZTI1Mjc3ODFlZTk5M2FmMmE2MzdhODcyZjAyYWZmNDc0YTcwNzNmMjlkOWM4OTUwNzcwMWZlY2JiZmQ1MTAxMzUzNTM3ZWJhMTdjMjk2NjlkYWMwNDI3ZTM4ZTIyZGZhYWM5MWZjMjBkOWUzZmVlNzkxZjQ2MmE4NjNiYjE5MDhmYjFlNDIwNGI2ODg4MDMxNGRkYWNhYWEzNWExN2FmNWY1N2EzOTlmMTkzMWU3OGY1YTM3NDU0ZmQzOGM1N2E2OGU4ZDM2Nzg0OGE5NzM0NTE4OWM3MDA3N2ZkMWFhMDc1NGU3MDNlMzUyNjE4MDYzYjllM2ZhZjNiMTRiNWYwYjI3MTEzNjMzYzVkMTczNjM3NDFlOTZhNjdlODE2NDAxZTgwOThjMTdiZmZlOWM2ZjM1ODc2NDZmNDBlOWZkYjY4MTlmZDIyYTc0M2E3YTZlMTBmZWJhMTEKK1NJRzogZGViM2Q5ZmM3YjJkODZhYjRiOTI2Zjk5NTI3OTcwYWJiNTE4MzhiY2MyOTE5ZTk0Y2RhMzM3MWZkMGU3NjkzZmUzN2UwYzQwZTEyMzNiMDlmZmE5MDNhMDM0ZGRlMjg3YzAyMzdkYzU5NGY1M2FiYzg3ODQ0ODY5ZGNlOTIwMDIKKworVFNUOiA4ODIKK1NLOiAgY2RhNGJhOTM5NDBhYTBjMGMzMTUwYjM5MjliOTVlZTc3NjljZTQzZmQ5OGVjYWZmOWM0YTUwOWU3MzZkNWM4ZQorUEs6ICBmNGM3YTI1ZjFhNzQzZGFmNDE0MTdlNDdlMDI3NTM3ZjI0ZjQ4MWJkMWE3NWU2YjFkMzNlYzRjODJjNTVhMmQzCitNU0c6IDNhMWQ2NjhjNjY4ODQxNDg5NmE3Njk3ZjNjMmU0MzEwOThlZGZjNDU3ZTA0ZDJkYTg2OTU2OGFkNWIzMzEwZTU5ZTRjNzI3YzkwM2NiZjE4MTc0MDg4MDIzMTlhOGMyMzFiNTgwMjNkZmFlNDk0YzAxM2FmMGZkYjc4YzkxZDViNDU3ZjhjNDdhM2RjMzFkOGM4NTk0YWEwOGYxNDYyMDNmYTJjMjhiM2RkNzk2YTExYTk3YWRlZGU2YTdhNzA5YjVhMTkxOGVmMWJlYTgzNTMzYzc4MzQ3MzcwMzM1NmY1YmVlYTdmZDE4YWM0NGVjNjg5MDQ5NWVkMTcwZDAzZjE1YjQxODYwOGE3ZDllZmQ1MmZhMTA5MTg2MzgwNTFjNDQ4ZDk4ZDU3MjRmNTY3YzhjNjdmZDViNmVjOGMzZDYzNjAwOGI5YmFlNWU4YjFlOTg0ZjhmZmI4YjY0YmVlYmQ2MzQ1YTEwNWMxYzEwODMxMzJmZDQ1MDhkNmFjMGQ0ZTkxNDU1MDEyMTBlNTE3ZDliMjI0NzhlMjE1YjYwMjU5OWY4MDM3NjJkY2Q1YTQwOWIzNDYwZTdmMzQwZjQ3ZWY3NzI4MWFkMjM4M2RlMDhjNWI4MDk1MzhhYWVjOTIyYmZjYTBkNjc1MmYxNDc5NzI2NDZkMGE4ZDgzNDA3NzJjODcxZDNiMzRhYmMwNjAzN2RlM2FiNGUzNzEyOTg2NWQ1YmE3MGI2ZjNjYzlhMDU5ZWZiN2RkZGMzODgyZjRmY2ZlMTNmNDQ4YzliYzY2NDg4ODU4OTYwM2JhOTg2ODNhOTNiNGIzYjEwMTQ5OTJhNTVjOGU0ZWExYmFmOWNjMDBkMWJhZGZmNWZkN2Y1ZGE1ZTMwN2ZiZDFiNGM5ODRlMGZhMGVkZWM1ZDMwYmZlZjVmNDc3MzAxMjYzYjVkNzUyMDAxYjg1ZGQ1MmRmM2I0YTdhYzIzYjkzMGE5MWMwYTQ1NzY1YTY2NDg4ZDhlYjU5MDE4NTcwNjAwNjdiODIzNzgxODg1NDkyODhkZGM2MTgzMWU1YjY4NDFiMzQ0Y2FlMjI1MDA0MjIxOWNmYjRhY2UwMjNlNjkxZjllNDhkMDA2ZTlhMDdjNjdkMjQ2OGY5MzU5M2I0YWZjMTYxYzA3NjhiNmNlYjc0NGMyNGM5MjNkYTM0YWYzZDVlZDU3N2NjN2Y4NWQ0OTE1NjBmNGMwYmNiY2QxZDVlMzQyMWJkMWNjZmFmYjM3M2Q2NTFiZDYxZWQ3MWMwOWU5OWY2MTIwMDE3MDRkMGM2MzBkODU0N2JkOTcwYjY2ZTdmNWNlN2EwMTRlMGZmNWEzMzdkYzVjNTZhOTlmMTMxYjkxMjkxNDBlZWVhMzkzOTdjNDhjYWE5YTgwODZmOWZkOTkxNTBiZTdlZjg3YjZkNGI5NGIxYmQ1Mjg3OGJmM2JiZmNjZWFjYzJjYzQ1ZTg5NzFjM2E0ZDRhM2ViODZhZjk4NzRkNGZhNWU3Y2FhN2Y0NWQxNTUzZmZiYjQxNjQ1YmYwZjVlOWIyOTc3MmUzZGMwODFiMjViNTJlMWNiN2UyMTY3NDgzZDU0ZmJhNjkwZGRiMjlkNTQ2MmQyYTI3YTM1ZDg1ZjAwN2FkZWRlMmEzZGQ3MjgxZjY1NDMzNmFmYWZiNzM3MDc4MmIyOWNhZDY0M2Q5ZDlkYjJmMDVmMjgxYjUzZTEzM2VjMzBlZWMwOWZiMGQwNjFiNzQ1ODFhMmJkMjc5MGIxMzczOTFmMTkzMjg4ODBmNjRjNTNiZTcwMGQwZmFkZGI3MGRjMTY1ZDJkNjJlNjcxZWI5NDQ5YTJlNmU5ZGYyYzE2ZDhmNDlmYTRiNWI4NDMwOWY3MzM1MTMzZGJlODcyYzVhOGZkY2ZiYzQ5ODBhYmZiM2M5NTk3ZDVkNjY3YWQyZjY4OGM3YWIyNGM5ZTQ0MDI5OGQ3MmIyOGIwZmNkZTljNmYwNzFiY2NjOTNlOGRkYmJhN2I2MGEwYjU0NGEyZTA2YzM5YzY3MjNkNGY3ZGMxODVjMjExMzVmZDEzYTcyNzcwYjk3NjExOWU0OWExZjgxZWQ0NzZiZTA3YzQ0M2RlMGIwZWU3NmZiZDkxOTM4OTMyOGIzZWI4NjA3YmMyZmUzOGY4NTc0NWUyOGFkYjc0ODJiNzAxY2NjNjY5MGU0YWU1YTkzMzJlYTQ0NjEzMTc5Mzg3ZGM2ZmM0N2MxZDFlYzM2NjAzNWU5OTFlMTQwNDMyM2JkYmJmNTM1ZjFjMzNjZjU3YjY3MjNmMTNjYTZjYTMyOWUyYWFhNGI0NmI0MjYwNzMzOTkwNmM3ZWY0OWIzMmRiODJjZGY2YTg3YWQKK1NJRzogMzEwNDhkMzM0YWYwNWE0ZjI3NWZmODI3NTQ0ZWEyOTZhNGE3NzVmYTU5ZWZhMDAwYzU3NjEzZmE2ZTVjNDkzYzNhOWI3OWU4Y2U1NmU3MjI1YjBmYTMyNjIwNGYwMzM2YzIxMzUzNWFlNTg5MTc3YThlYWVkYjZkZjhiMjAyMDMKKworVFNUOiA4ODMKK1NLOiAgMjE3ZWNkNmE3ZmNjOTg3MTkyMTBjMzRjYzJlMTRmNWUyZDZiNWEyMmYyNjhjMTRiYzRkOGE3ZjI4MTcyMDBjMworUEs6ICBkNTkxOTFjZTI4MmQ3MmZlM2FjNDU4NzhlMjRiYjJmMjhjNDA5YmEwNWQ3NmNlOWJjZjIyZjUwYjBjNzc4Njc1CitNU0c6IDliNTMzN2U3OGZiMzgyZjIyZWE2MGUwM2MwYmYzZWU0NzAwYjY5NzhhOTFlZTZhY2RmNmE0MDllNDkxOGQxNjg0ODgxZmExZDExOGMwOGM5ZjZmMmNhMGNhYjU2NzQwMmM5NTAxMGU3YWJkZmU4NDhhZTc5YmEyNDlhZGNiOTZlYWUxZGZhMDg0Mzk1MjEzOWNmNDliNTg4NjQ3ODk1NjkxYTJlOTg4MDQ2NmI3ZTc3ZTU0ZjZmNjA4MTVlYmZkNWU1NzQ4ZjQxM2MwZTE1ZjlkNTc2Nzk5YmNmMzEyODQ3MTA2MzZmNmU5ZGM3ODc4NTAwNzk2ZWVkODBjOGFmNGJlMjk2MTk1MmVhODBiYmVkMTQwNGJkNWRhZTllNmQwNWZkNGYzMjVhM2I4M2NkNDUyOGEwODY5Y2VmODRiNGQzMGUwMmY5NDFkNzQ5YThkYWM5N2JiM2ZhODM5ZDI1NzM5Yjk3ZWMzNzQ1MzZiZGVhNTAwNDg0YTk0MWRiOWYyMjk5OTcwNjU4ZDQxMTQ4Mjk1Y2EwODQ2Y2EyMzY2MjM4YjYyMDFhNDhiM2U0NDdlZGJlYTdhNGM4ZjcxMDIwMTQyNzY5ZTE1ZmE3MmFlNWYyODcxNDBiYzU5NTNiOGE5YTI0MmQyMDVmYzAxOTA5MWYyYWJlZDBmZGE0N2Y1MmQ1OWEwMjA0Y2U3NDAxYzE4MjliNTg1N2I5YTA5MTZmY2ViZTJlZWY5OTFjNDEzYWNkNzFiMThkODU5MGQ2YjZkMGZiMzk5NDMwMjY3OGMyOWYyYjZhNTMwMjNmOTE4N2U0NmMzNjc5MGJjZTczODczYzU0NWE3MmJlYjU1MzI5NGIxZWU1ZDBkMGRmZjIzOWUyOGVjNjNiMDFlNGQ4ZmUwZDZlNjliMTYwMWVmYTI0MTFmMGMwNjAxZTdlNGY2NWM5ODRmODI5ZjBkYzJhODQyMWU3ZjY2ZDkzMzA1MzcxNTFjNzI0M2NhNTI0ZDdhNTQ3MzVjNmUzNDRmMWZjOTM4ZWFlZWEyNzc5Yzk0MDg5MWQ2ZDAxYWE1NWY0MGNjMWFkYmExMmU4YTY3YWQ5YTI3ZmU2M2ZiNGYzOGRjMGYwMTg0MTkyNTcxODQyNzI1NWJkNjY1ZDVlYjNiYzg2OTg5NmRiODYyNTIwNGFkNGIwMmY1YTIyYWFlZWFkNmUzMDA0NzFmZWE2MWRiYjFiNTVjMDcxMzY1YzU4YjE1MTFmMzhiMDlhNDY3MWJkNjZiM2ZlZGRhOWM4N2U0M2QxZWJmMzAxNzY0ZTE4ZmMwY2YxNmIyZDJkNjdlZDIzOWIzOTNhYzcxOTY4YTkwM2MwMjQ3N2ZiMmRmOWVmMDFkYmZjMzE2N2RlNzI2NWY4OTFlNGZkMjRkMDJjNjMxMDM1MTliODZhNzA4NWIxZWMyZmI0MTlkYjc2NmJlZTdhNjQxYTRiZTQyOTYxNGFiODlmMjBmOTc1MzQxMDcyYmYwNDQxOWZiNjliZTdhOWVlNzFhNWI0OWFmODNlZDMyMmJhYzY4YTQyOWZmNWM1MjA2NzczYmU1NDM4YjY1ZTUzZjYwOTcyOWY0ZjZhMjFjMTMzMzkxMTI2NGQ2MzkyNzAxN2U4MTM2YjQ3MjVjZDFjYzk2NGUwOGNhMDkzM2E1NjFlN2UzZjU5ODc3NjgzMzBlMmU1NGY4ZDcyOGY1OWVkZmUyYzkxYzRmOTlhZWY5N2QxODU1OTE5NWEzZDhlYjMxNWRmZjk2ZmUyNzZkYTcxMzdlZmY5MzA1N2FjNzMxZTA2YTYwYTU4YmQ4YTlhZThjN2NiYWZmMGNiMzM3MmM2OGRhYTE3NWM0MjhkNTJmMTA3M2EzOGJmMjk0NjVkMmE3MTI4YmI0MDA3NDAwNmVkY2I3MjVhODMxZDgxMjg2NGVmNDNmM2I4NjY3YzlmYjcxMDkzYTE2NzMwNDlkZWMwNWUwOTE2OWQ4NmZlZTkyZGYyODYwMDhhZDk5MDY1YTI5Mjk3OTdhOTEzZDAyMzNmNGQxYTk1YTIyMGJkOTFjMTFkZDljNDU2ODVkY2FkMzg1NzgwYTBjNDhiOWM0YWQyZDY2MzAzZThkZTRhZjFkYjNjMDRlNGEzZGQ0MjE5ZmU3NzNmODNhODkyNGIwZmNiZmZmY2YyNjRhYmNlMzI4MzI5MjQwMzZiZmFiYmE2NTQ2YjFkZjRlM2Y3ODhlZDhhZDVjMmNkOTJiMjY0MWI0NzA5MGExMDNjZjViZGM0NmQ4YjIxNDMxNzQ3NTdkYTgwMWMzNjBhN2FhMTA3ZmFjNjU0YjM0Yzg2MGJkNTRmNzZiYmY0M2M0ODQ3OGRmNGZlN2FhNTljZjkxZAorU0lHOiBhMGIxNjllOGU5Y2U1NTc1NTVlMDMzNGEwZGU3NDM4ZTU1MzY3NTQ4OWVhNGJhOWNjNjNhMjM0ZDAwZGVkOGFiNjk2N2EzYmU5MGVmNjllMDc2ZGI5ZWEzZDVjYTIzYjMyNDhkZDI1OTkxZWUxZjRkODA2MjBiZjRkYjQzOGYwZQorCitUU1Q6IDg4NAorU0s6ICAwOGQxZDA2ZjNlYzI5ZWI1MjI5MzkwN2I3MDVlYzU2YzVhYjM1NGZiNzg2NzM3NzNhZTYxMjUzMDk0Yjg5ZTgyCitQSzogIGMxYjk5YTg3YWQxNWJkNDZmNmM4NDg0NTJhZjBmYTNjY2NjYjVjZGY2ZTM0OGQ4MTZlMzZjNWQwZmNhNjZlNjYKK01TRzogMTIwYjM1NTczYzM0OTE0YjM3MzA1MTg4MGRhMjdlZDI0MTM3N2YwZTc4OTcyYzk4ZDBmYWViYWE3NjdlYjdhN2M3ZTdjNmZjMzQwNWE0MzM2ZWY5NWJjNWRhOTIyNWJiZDA5ZTllMTFmMmExYmYxNDJhZjRlOGEwZjkyNGQzMjNkZDVhNDlkZmU1ODRmMDkwNDM5YzA4ZTUxNTExMzQ0ZDQ3MGM2MjAwYWM3ZTdjYTE1MGQwODhhOTFlNDdjNGM5ZmY3NGUzOGE0MmEzMzIxNTVkODE1MmFlNGFiZDExNjFhZGNhOTM0YzIzNGNlNDYwYWY4Nzg5ZTUzZjEwOWQ3ZDMxZWVkZTBhOTA5YmQxOTNmYzhkM2MyY2ZlYzEwYjE0M2MzMTQ3NjcxMWJiZWMyN2UxOTZhNTQ5ODViYzM0NzE2N2FjZDIzMzUwODgyN2JhZDM2ZTU0OGM4ODA2NDJiODZhMjhjNmQzNDA0YjUxMWRhMjRmMTFkZmFmNmE4ZjQ2ZGRjYmM5ZGU5ZTM5MTU5NzY2OWJkZGZjYTY1NjBmOTFhY2QzNDU5ZjMyOWJiMDcxZGQ4MGRhZGYzNWYwZTUwZGY1YjEwZjg4ZDI2N2FjOWQzMDYyMzMwZGQ5OWE2YmNmYTEzMTg3ZjQ1YzBjMjE0ZGNkZTJjZGY5YzNiYTRkNTllNjMzYTM1NGE0ZTI3N2M2NzdiYmRmYTI0MTkxMTc5Y2JjYWYwNWExMGQ0MDc4ZDhhZGQ5M2JjOWVkOGY2YzZjNDk5NzU3NDAzNjU1MzQxZjkwNGUzN2Q5Mjc3NTBjNjk5YzI2OWRjOTBkYzI2ZDAwNTYyNWMzZjQxMjRiZmY2NmZlY2E1OWQ0YWJmZjQxNzJiYTNkZjQ1YTg3NDMwMjIzMTAzMGZhNzgzMzg0ZjUwOTk5ZTNjNGJhYTVlYWRiNDUxNDUyYzg4OGI1MTkyNzJlOTBmNzNjNjg3Mjc2OGUwZGUyMGVlMmU1Zjk1MDJmMzVlNDlmZWNjMjhiNzUyMDE4ODdmZWQyODE4ZWZmNTQ1Mzk4MzkyZjVlNWI2ODc2YmM1NTZhYzEzYTE5MDNhZGExYjlkNzI1YjA0YTE0MjA0YjU5OWVjMzNkNjJiN2RjYWVlYThjNTI4NzdiMmNmZGMzNTU4YTkxZDJjOTE1NzUwMGEzYmI2ZDQ1MmU1ZTJmZjA5MzI5NGZjNDMzY2JkNjM0NjViYjE5MTMwN2VkODAxYTE1Yjg1ZGMyZmYwYmIzODMxMmY4YjgxN2E0MzZkNDIyY2Y0NjA3YzY0ZWU3MDM1OTIzZGI2Yjk2YTM4OTk5MTAxNDliMGRhNGFhM2U5NjY4NWQ3MTYzYWFjZjllNjE5ZGM2MDgxM2NlNGYzNDRmMzA3OWI0M2YxODdmYTMxYmRhY2I5YTFkNzcyMGI5MzlkNWJkMjQxYjk2YTE3N2Q3Yjc3NjhmZmViZjc5MDQ0Y2QyOTU2ZDZmODhkYjFjMjQzYTEwZmVkZTY4MTQ4NTJjZjQwNGIyY2RjZmE3NzQwNzZkYzEyNWM3MGE1N2M2OTA3ZTk5YWZlMzk2MjJhZTExZjU1N2U3ZDM0YjM5YWFhZjQ1ZjgzNDA1OGQyZmU1ZjE1YjVlYjcwYWMxNWE5MGEzZGU1ODUwYWIxZGNiNDhiMDZiNmNjYWE0YjQyZjg1N2U3MWVjMDBiOGEzZDg5NzRiMGJlYTY4ZmEwZjY2NTU5MjExNWI0ZmE1NTU3MmNmMGIwNzM4NjQxZmM4NjhkNGEyZTcxNGRiM2FkNzIxOWE4MjNkNTRiN2Y3YzI2NTZiYTVjNWVlYmUzNTk0YzdkYjEyMjk4YzE2MjUxZDk4NDViZjJmNzgwMGI0MTkwYjc0NmUyMWIwYzFhNWM0N2EzZGY5YTA1OWNlMDk1NjY3NGViNzAzZGVjYjBhMDA0NTQzN2RhNGRhMTBmMjg2ZDcyMGQxYjlkZjA1ZmIyNDQxNWQ2OGUwNjU1NzBlNmIzMTUwMzE0MmQwMzMzNWE4MDdiZGNhMzA4OTJlZGI1ZjU1Zjg5ODlkOWU2NDk2NTljMDc0NGM1NDMzYmZiNGRlZWIxMWMyNjI2YTg2NTBlNTRkNGQzOThiYTE5YjY0ZjY4YmVkMDZkN2ZjNDA4ZjQ3MGFjNzA0ZTJhYzkyMmFjMTQxMWZlZTI0NTQzZTU2ZjJmNTBiNmIwODk1M2RjNTZhN2E3NWVkYWU0MzBhNmRmMjhhMjI3YWRhYzkxYmEyNmYwZTE5ODU5NTMyNzczOWNiYTMwM2U5YWEzOTNlYTY2MThhODRmOGY1MDNkMDA1NmVlOGQ4N2UzNzk2ZTAzNmNjNTFjY2I3OTFkZWI3OTUKK1NJRzogMGI4ZWRjYjhiMTVhOGNkMDc0YzQxZGMyYTFiYTI5ZDk2NDhkNmFjYmRjMzM4MzE0NzA3ZWNhNmZiNDcxNGM5OTU0M2I0OTA3YjlmODVlNTdlZWNmZmUwZjdhNmI3MDczYTgwOTQ2ZjgwODc1NTNmNDY4MzEwOTI3M2E2MDRhMDgKKworVFNUOiA4ODUKK1NLOiAgZjBjODVjNzZiMTUzMmU4OWFlYTk3NTE1NmRkZGIxZDNkMDY2ZjY0MDlmODQxYmI0NDEwOTIyNzI1ZjI2OWQ4NgorUEs6ICBmZDc1ZmM3NWMzNmY4MzQ5OGQ4ZjA4MjdmMDFkM2I0NTdmOGJjNGQ5ZGM1NWU0YTQ2Mjc0ZGRmMDAzNGZlMTZmCitNU0c6IGFlMmViMDE4ZDQ4ZGJkNGYyMTBiMTY3NzhiNWJkMmZkMTRjOTRlNmJiZjJiM2ZmODU1MThlNTYwYWI4ZDNlNzIyMDFmNDMzNDIwZjAwZjExYmM3OGUwZTlmMzcyMDg3NWIyZTlkYzExZTA0MzI1YjhiM2YwZDQ2NWRkYWIyMTUxMWM0NTdkNmFjYWQ4ZjJmZDVmZGMwZDI4MjNmZTZjYWE2NmExOTFhM2I2MzI2YjMyYTE2YmVmZDY0ZDE1YjM2MWE0MTUxMzY0MWJjZWJhMjZiZmU5M2JkZjg1NGE0ZjhmOGEwYjI5ZjdlMjgyNjJlMmQ2ZTk4YWEyNGFjMjdmNmY3ODgzYWMwMWE3NGM0MGNjZTk0N2ViYWM3MGU5ZmVmMmExNmU2Mjg5ZTQ2ODk1MGUzOTFlOWUyNGVmNThlODhhNDQzNzcyNjljZWJhZmVkODk4N2QyMjBkY2FlMmQ4YjEyNmI2YmY4MTIxNjdkMDIzZDliYWFjOTUwZDlkYjhjZjUyZGU2MzA2YmQ0ODk5OTYxMGMwYTQzM2ZhOWUxNzcxY2I4MzJkNDE5N2FhMzQwZGQwY2NkMDc0NGZjNmI2MmY5MGJkM2ViYjUzMDhjYWI1Zjk0MGUyOTE2NDIzY2YwZjNiZjA4MGMwNmE5NGYwMjY5MTA0NjBkZGE4MDkzNzRlNjQ1N2YwNjRmMTc4ZTMwOGU3YTFiNWFmNGRlZjMxOTAwN2QwNDE3NzhjM2Q2YTQxOWY1MWJhZGY4NzY2Mzg3OTMwMmI1M2ZmMjY5ZGY0NDJkMGUwNWM5NThkNWJhYWNjZWVkN2Y1ZjhhZmM4MTFjMTg5MDBlZTNiMGY2MWU1ZGNjZmQ1ZGFjODUzMzJkMzJlYmJhMzcxYWEyZDQ3YTYwNmY1OTU0NmU0YmJiNjA1YTc0Njc3YjE5YTBmZThlOTVmOWY3N2MwYjhiNzFkMDdlOTgzMDA0ZGMyYWIyY2IzNzkzYTMyM2MxMDhkZmE3OTcwZGEwMGRiMTk4Njc0YmQzNGJmNzMxMDc2N2Y3NmEyMjRlMDdiZGJjNjJiOWQwNzhjYmM3NTM2N2UyZWJhYTJjNWQyNzRiZjM0MjdmMmEwY2M1ZGJlZjBhZjRlNjNhZDg4OWUxMzFiMTJiYzhjYTMyZDgyN2Y3MjYwYjA0NDlkMDQ0M2ZhMjg4NDQwZWZkMTM2NGUzYzk4NDk0NzdlNzNlZTBiYTQyNDBkNDkyYWY1Y2UxM2MzNDU2MWI0NTAxMGMxMDlkODQyYzFmZWQxYmUzZmE5ZTE4NGFhYTE0MDY0ZjQzZjZkZWEwYjY1OWM1Yjk3ODkzY2YyYTQzM2JjZmIxZDJhODdlYjU2NGJkOTA5MmMyNjY2NzA0NzMxZjgzZTU2NDM0YjJhNDI5OTY1MGM3MDYwZjlmZjdlOGFhZGNiNDU5M2Y2MDkxODhkOGI0Njc2NDZjZmU5NTI3MDA2N2ExZDM1Y2Q3NTlmZTU4MWFmNGU2MjYwMmMwMmVmMTQ3NDQxNDNlYjQyNGYyZDlmMzNhNjAyODhjMWIyNWYwOGU0YjJmNWZlYWUwNmNiY2MyYjIwNTJiZjM4NGUxYTZmY2Q4NDcxY2U1ZTU2NThkNzdmNDBjMzVjNDE1ZTJhOWUwOWZiNTgzYmI3NDcxMjU4ZTdjODA2ZjNjMjE4MjJkZDEwZjU2YTY0MGNkYzAwMTI4ZDNiYTU1NmJhNTFkY2FhYjQ3YzNiYWY5ZjAxOTdkMzY2M2RlOGQwOTNlODMxNzMzMjVkZWYxZTgzYTJmNWY1YWNmMTJhZTA5ZjNjZTk2Y2Q4ODgwMzRkY2JlNjE0N2RjNTk5ODM2MmE0YmM0MDZkMjg4NDZhYjE1MDNjMTdjOTRmOWFmZDkwM2M5YTU4ZTFjZWJiNGFiYjRmZjZmMmE0MTAyNGUwNmRjYWFkMTRmNWI3MGMxYjI2ZTY5Zjk2ZWNmMTRiOGRhMzFjNjIxZjlhZDRlMzBhZWI5ODIzNzg2NzFmN2QxZjJjNGI1NzJjNDFiYjg4MzA4NDBhYzVkZGNlZDg4MWY4ZmZmMjEwYzNjN2YyMzZkOGM1ZjJjZmRhY2RhMjk4OTMzMDJmZGUxNTI4MmRiNTQwY2I1NDM3MzdkZDc3ODUyNTY5MjIxZmRkY2RkNjhkODdlMjQwMjE3OWQzYTVhNzc3MzRjMjc1YTFkNTYwYTQ2MmY0MDMxOGJiNjgxOTgzN2RhM2QzMDVlYjQ5YjM4NjUwZWZkYzhmZTQwOWQ0MGZiOTRjZDVkYzNlYjAyNzM4ZjM4ODUyZjY3MWEwYzQxNDE0Yjc2ZmI0MzZmMzQxN2I4ZWYzMDA5MjFjMDA5ZWJiZDdjZjhlMTEKK1NJRzogNDIxOGZlNGMxZGNlNzk1Y2E5MmE0OWE2ZjQ3OThlYjU0MTJkYzgyNTg2MDMxNGVjNDY5ZmVkNDVkZTNhN2JmOGVhNTVlODUzYTM0OTU4NGJkOTVhODI2YTU4NWE1MDNmZDUwYmZlNGM2MzVlZjE4M2QwNzMwMTM2N2U5MDEwMGEKKworVFNUOiA4ODYKK1NLOiAgMThlMjY4YjE1YTI1MDFkZDRjOTc5ZGMxMDNjYTZhODQyMjE2MTMyYjNiNTA4MWQ3NzVmODg2NDBmODljODA0MQorUEs6ICBiMzRlMTljMWUyMDhmYjQ4YTg4NTA3OWQ5ZmJmMzdjNzRmOTI3MTA5NjBmODMyMTU0ZmFiMTg1NzBjZmI0YzFkCitNU0c6IDQyNGJkY2YwYjI1NjAwMTQzOWQxNjk1OGZmZjY0OGNmN2E4NjA0YWYyMmNmYTViNDQzMzFiNGRjMzU2ZGZmMjVjYzA1NjNkYTlkNjQwMTMzYWNiNzBiNmExMTc2YzQ4MmRiYzk0MDhjZDY3OTNkNTZiYzI5Y2M0MDg4MjNkMzg4ZWQ4OGIyNGNlYjY2MjFkYmFjMDAyM2VlNjlmNzZmODI5NmE3Mzk1MjExNjg1YjNjZWFhOTk1ZjAzNTVkOWFhZDNkOTczNThmNGEzNzllNTkyMGVjNTQ1ZjQ2OTYyMWNmNzY4YWJmNTVkMmE1NTRjOTQ5YjBlZDcwMTg3YzIyMDVhZDAzMjk4NWM5YjViMmU0YmE1N2UwYjRhNDdkMzQ0NTEyYjg0YmZlOWYzYWE1NjBmZTZlY2ZjNWJkZjhjM2I0MTg0NTI5MzU3M2Y4MWVkM2I3MGVkYzYzYTMwYzcwY2RhM2Y0NTU5MDEzMTNmNmQyM2RiMzA5NDc4ZjAzZTM0ZTcxMzU2ZDgzZmE1ZGI5MjgwY2MyYjQzNjljM2QyNGRkOTAzOGYyNDc1OTZjMzkxZTQ4YjJmM2Y4OTBhMTQxY2ExZDEyMDc3YzY5MzQ0NzM1YTU5YjFkZDQwNzZiMjJlMTYxODk5OTFlNWYxYmU0ZmI3Njk1YWY5MGViZWE1ZGYyODYxMzVjZWMyYTZlOTlhYTFkZGEzMjhlNjJjMGRmYjYzNzQyMjAyZDYzNjI0ZGNjMGM1Y2YxYTVkZjc5ZTI4NzhkYmM3MWZhOTY1NzY2MDFhZjIyODQ0ZjU0NTczMzEyNmFmN2QzOTg0YzNlZDI1MmU2YTg3NjQ0NWM5MjI1OWZiYjQ3MGExMDU2OWI0OWU1NzkxZmQwMTgyY2ZlMWMzZjg4Mjk3ZmFjYzhjMzFhNTMzMmYxZjRlYjQ5NThkYjEzYjZjMDc5YWE5Yzk0OTQ4NzI2MzQwMzE5MGM4M2MxMWE0MzE5MWZmZWM2MDIzZmIzNGNmYWIyNTI1YmViNTQ2Y2Y5MjAwYTk2ZjU4NTRiMmY3OGVjYjJkOWE1M2FhOWQyODdhOTBkNGQ0MTBhNjNhZGEwZTk3NWQzMDRkNTE0ODM1MzQ2M2ZhODA1YjQ4MDVmYjQ2ODdlZDg4NTdkZmNlNGJjNmU4MDgzM2M4ZjlhNzljZDRmMDI5YTJkODAyYmZkYzgxOWVkMGMwYWM4ZjIxMDIzMjg3ZjJiNGJhZmJjYzg5OTkzZmU0NmQ1MmE5YzYyNDZkZWFkNjE3ZGY3OTdkNDhlZTk4NWYwZjBkZjlhYTgyZWEyMGUwZDBkYjI4YTI1NGE5YTI1M2YzOWY5Y2YwMWUzZGI4ZjNlYmNmN2NiOTdjZWM1OGM0ZWZlMDMxMjY5YjRiMzdlNGNiYjM2MWY3M2FiNGI0OTgwYmQ5MDA4NDk1Mzg4NDRjNTJjYjNhYzc1ODNiOGY4OTY1M2EwZGU2NWE4YmU5MTU4MmM1NTIzOWNiOGY1ZDUzMThhODhkMTYwZTFjODcxZTVlYTdlNzVmNWE2OWNiYTg1MzgyMjFhYjQyY2UyYTJjNGQ5YzNiN2VjODU3ZjIzMGQ1NzM3MzExMzM2ODZhZThhN2VkNjQwZjQyZjMxMDI5NDg5ZTRlNmFmMmIzZWE0Yzc5NDhlZDUzN2MwYzU5MDY3MjZjMmI2MjVmZDVmOTQ5ZTNhN2NmM2I2ZTk5OGVjNzYxZGQ2ZTJiNTE3MWE2ODc0OTc1MmU3MjFiNzg4YzM0NzdmYTE5MGNkNmVhODFkNTc5ZGNlNjQ2MmQ5YzY2MmFkODk2MmU3OTMzODcxMGNjOGQyNzM4YTVmYjA0YWRmZGIzZjE0MzJjZmQ4MGUyZTk2N2RhMDAwZDgzYTBmYTg1YWJhZTI5NTJmM2YzNjgzZTI1NGQ4NjhmNGJmODA5ZWIyZTMwMGU3YjIwOTczNGEzYzg5NGU5NjZiMTYwODhkNWVkMzU0YmZmYmZmYmJmMmVjMmJlOTNhMzJhOGJlNWNmYTE4ZmE1NjUzMDEyZWRhZTVhZmQ4NzA5Y2E1NWMwY2YyM2E1NTBkMzRjYTBmMzJkOGY2NjZmYjQ3YTEyZjJiNzM1M2E0MGM1Mzc5Zjc1MzY2YzEzZjRhYjlmMTRjZjgwYTk0ZTFmMTNkOGIwOWI3NmZkOGQxNGZmYTUzOGYzMWZkOGFlYjQ5ZDMzNDMzZjRkZjdjMmNhNjczOTk1NzlmZTk5MDc4YWE3MjFkNmI2ZmMwYzUwZThhOTFmYzcxY2EyNWVhYzEzNzZmYzY3MWJmNjE1M2U3MjBiMjVjN2U5N2EzZDRlZjg0NDJhYzY3YWNmNThiNTA0YjY3MTU4ZjkxMzAyNQorU0lHOiBmMmRjZmMwNmVmMWQ4ZWNjZDhlNDBiZGYwMTMwN2RkMTk2ODNmMjE0ZDRmMDg0ZTZiNjkzNGY2MzcyNzgzMDBkYmIxODg5ZjJkMzdmNTNiM2FlZjI2ZmJiM2UzNmJkNzU5ODVmYTdjOGVhNmRkZmZhNzJjOGU0MDZmMjRiYjIwZQorCitUU1Q6IDg4NworU0s6ICAzYzM5M2Y5ZGYxZmIwYjFlZWMwOWI3ZjI3MGI4NTk4MmJhMGZkNWU0YjE3OTVlMWE3ZmE5OTEzN2ZlZTI0ZDdkCitQSzogIDk3NGZlMjM3MzBmYzE3OTQ1NjcwZmJjMWY4MGI5M2Y5NDU5M2M4ZDQ0YmM3NWQxODlhNmJiZmFhYmFmNWRiZDkKK01TRzogNTRkOGI4ZDVmYWMyOGNmZmE3N2EwOTE2ZDYzMzNjMTZlZGJjOGJiNzRhYTA2ZTU2ZGMwMGU0N2UzOTI5ZTQwODY0Yjg4NDBkOTEyMDc5NTk3ZWFjZDgxZGFlNDNlMjc4NWRmYzY4OWYzZTg1ZjhjNjY1ODFlZmM1ZTg1M2QxZmFhYWM3NDQ0MDBhYjA4Y2JkYjVkMTYxNDZmYTYwZjk5OTA1ZWQ4NGZkMjkzNmRkNzNmNGJjYTI1NzJiN2NmNTE2MDU2MGZmYWE2OGRhN2E2N2U0MGUwOGE3YmI3YWVmYzQwNDNlYmVkNWZlODBhNDE0ODE3ZWRmMmM2M2Y2MmZhYzBkNDc0NDZlZDBiYjU4NDA1OGY0ODcyZmVjZmY2MjE1NTkzMTFhMjcwYWVhMzdhNjI5Njg2NGU4ZDE2OGJmMWUyZjU1Y2QzYjI3NmVkZmE2MTJiNWQ5YzMzNjJlNjE4YmU2ZTgyYTZlNWY4MjY2NzkyNGYzZDFkM2RmODI1ZjlkMjNmNGQ2MTQyZDMxMDBkZmM3MGY3MDYwM2FiZjNmZGFkYWNhNjllZjZhMThlZjkwOTJiM2M0MWVjNjU4YWIyNzIxNmZjNjE0N2EwODBhY2RhNjBhODQxOTg0ZWU4M2Y0MWFjNDJhODBlYWFjOTFmZmZjODIyODM5MWVmNTgzYWIzZWRkY2Y4NzY1MjNjMjAyODEzNTUzMDBkODZjMTFhNGU3YzFhZGU4ZTUwNTYwZjQzOTA2YzliYzhjYTVmYmY4MzM5ZmJlYmQwMmUzM2U4NTE4YmVlNWU4MDZiOGMxMGY4Mjc3ZjQxMDY2NDczNWEyYmY1NTY4Mzk2MzU0OTI0NTJlNmNhMDc5ZGViOTc1MWNmYzY3OTdmNDliY2E5NjEzZmYyZTdmZGQzNjQ2ZjdjNTIzNmEzNmJkZjAwNTE3NDVlNTk1ZGMwMDcyZmQ2NjUxZDU3NjI3YTYwMDRjMGYwY2ZhZTg1NmJiYzI4YTEyMzFjYjgzOTY2NWZmMDQxNTJlYzMxYzAwN2IzZTJlZDBhOTczYjI0YzkzMTQ5Y2U3MDFlNmZkNjUzOTIwNmFlOTFiZWM0Y2U2NWE4OWRiMjZjN2QzOGNlY2I4OTE5Zjk2ZmI2Y2I4ZjZjMTkzOWQ5MGZiM2Y5MGI4ODc3ODlmMjk1NzVhYjIwZTBiMDhiYzM1ODE1M2Q4YzAzNTIxZGM4OTE4NzBiNWY3ZWVkY2MxZTYyYmVlN2RhMDYzYWU2NmZmMGE0YjdkOThkMWNiNzU4ZjY5NzQzYzNkYjNhZTJhMmM5YmUxYmUwOTRmMTdjZDI4ZjkyZDhjY2JjYTk4M2M3NDljNzVjNjEwZjg0MDgzNmUyYzQzMGNjZGVmZjBhZmE1NDQ0NGYxMmI0YTRmMDAyYzYwOTQ1MTgzNDI0NGMwYzA3ZGY4ZTEyMjAyYTY1Zjk0NDQ3Y2Q0OTAzYWNiNjA2ZDc3MjVhODZlNGEyMzQzOTg0ZTY3OWM0YWYxYjM2NzljNzU1ZWE1MGQwYWJlMmZjYzBjMWMzMzUxYTllZTE5NmI0NjQ0YzQyNDIyMmJlOTllMmZiMzczZjk2NDFlM2ZhZWJmZjQzMTcwZWIwM2ZiOGVjNDU1N2QxNTFhNTVmYWI2YzQ5OWQ0NDRjODRiZTg5ZjI0NDc2ODJkZTRlNmY2MzUzNDc1ZWZjYjhmYzUzMjU2NzYzYTk0OGRjNzVjNTE1ZmEzNTM1NDVkMGNiYWQyOWRmNWU5ZGI1Y2M0NTdlZDMwODZjZmZiM2Q3NWU4NDZjNGU4ZDg4MTQ3ZmNkMGQ4YWE1YWJhYjQ5YjVlMDVjM2Q3ZmVlZjYzNzk0MzM0N2FkM2Y0OTJlZTM1NmVmMzQ4ODFjZmQ4NWFiY2U4YTE0NGNlNzc2MWUyODRlOGI4Y2IwODk2NjA0OTA0N2E5OTZlMjM1NTlmNzc2YjFhOWY0MWNiYTM5NTQxMDg0ODZlMjkyN2JlYjY0MzNhMzZmZjhiMmYwM2FhNzRiM2QyMDljNDg4ZTA3N2Y5MjRmMjMxZTI4MzQ1OTQyYzdkY2MyZTYxZDdjOWI1MjJiNjU5ZmNiNTM2NjJhZmYzNjQ4ZjY2ZGEzZTgzZTU5YjBkYWE5MGI5NGM1MTVkYWRhYjEwZDVhODM5Y2IzYTJmMWQzY2QwOTJkZTU1ZDk5NTEzOGMzYWMwYjkwN2FmMTVhYzYzZWMxODc0MTE0MzI3ZTIxOTcxMzQ1ZWYxNzAzMWQ1MjYxN2U3ODRkYTM3NzE0MzliZTJlODQxNDhiY2ZlYTEzMmJkZTEwZTZmZGE1NDdkY2JiMWM0ZDhmNzRkZGNlMWZjY2Y4MjEzZTBkYTZlOTdiODFmNzUKK1NJRzogMjIzMzNlNTY0MTBmZGNiZjg0ZjZhOGRlNzQxMzM3NjkxNjg0NDk1YmE2OWVmZjU5NmRiOWMwM2EyODEyMTA4ODFlNmM5MWVmYTkxYjIxODNjMGVhYzkxNjE1MjgxN2E3OGNhNzI0YmE3YzhiNTFiYjRjYWFkZWE5YTM0MWViMGUKKworVFNUOiA4ODgKK1NLOiAgZjg2NjljODhmMTY4NWJiZjA0ODBjYzkyMjFhYzJlYWQ4ZjU1MWJmYTg3ZWNiYTJmZDRkZGYzYmEzNDc2ZWJkYQorUEs6ICAzNDcyM2ZiOGUyNTNhZDljNzFjZWZkZTAzNjI4ZDIwNGU1MzVkZTQ3OWUxMDQ4ZTUxODg3NjJhMWYzMzdmZTVmCitNU0c6IDViNDk0MWJlZWMyMjQxYzlmYjc2ZDg0ODRmNGYzZjNhYjRmZmU4ZWNjOGU3YWVjNzZkZTJhYjhjMzY4NTg0ZDc1MWIwZDNmZWI4YTFkYzgxNjhjZGM2OTQ5NjhmNjZiMmEwYjA1MmFmYmY4YmUzYTdkOTUxNjNlOWRhOTE0MWM1OWNhNTU5NzZjMjkyYzVjNzRkMzEzMThkNmE5MWU3ODE3YzVhOGIyZjgxMjExOGNiZWJhM2ExMzMyM2NkOTc0OGJmODZlZDFhODVkZDRlYmMwZGY0OTVjZmEzZDQ2Mjc0MzRiZjE0YWFlOGFiNjc4MTQ2N2E1NmQ5NjVkMTBlNjM3MTk4OWRmYTBmNmJjMGY3ODU5ZjM3NzFlYjkwMDRiMzQzNjdkYjI3MDVkYmQ2MGZhOGY3ODk1YzFlYWRmNTlmNTNkYWIxNjhiNGY5MzYzOTc5MDI1NTAxZGRkOTY4MGRlYmMwN2NkMWNhNGEwOTk3ODc2ZTkyMTFmMzA3ZDliN2I5ZDkwNGU0OGQyODYxYTc3OGI4NzlhZDU5MGE5YTJmMTQxYmQ1NjhlM2ExYmIyNDk0NjI4ZTllYzBjNjQyNTVhZWVhNmYwZWVkY2EzMGFkMzhhMWYzZmZlYzNiMmI1ZTk0MmUyMTk0MDEwNGU5MTRkMTFhNDRjMDBmZGQ0N2RhM2U1NTEzYWE4NTMwYWVlMjQ3Yzk1Y2E2NmQwOGEyNjA4Yzc1YmE5ODU4ZGExNGY5YThhMzJiZTcxM2QzMDllMGY1ODRjODFlZjViZTA0MGUwMDY1ZjA3Yjc3NWFlMTc1ZGZlMmM4YjkwYTg4Y2NkYTE3ZmE0ZjIxYzc3ZWFkZjVkMjViNmU0MDRiZjAwNDQ3OWUwNWEwMWFjMDA0MmI4OTkzN2ViMjc4YzFjMzRmMzMwMjhkYjc4MGJhM2I2MTc5MTg1OTVhMzljMGZjYWQ2NzRiODVjNDBjYWM4ZDM0NWI3Y2EwYmI0OGEyOGU2NmM0NGQ4YmI1ZjI3OTQxZTQwYjBlOWM3MDk3OTc2YzYyZGZlZjUwYzk4ZjE3NTY2Y2NiYWNjODdjYjAzYjk0ZGZkZmFmMzJmMWU1NmZmYTYzOWQ2MzYxMWUyMTNjZWJmNTRjZDBhM2UyMTcyZDgxMWMwZWJkNzViMWE4NjQ2MjY0ZGQ4YjFhYmQ0NmU1NDg5NzJhMWIyNjJjZDk1ZDUxMTUzNmRkZGNiNDk3MjlmZTdiZDAwYjM4MzhiZDJmMjBhMTQyNjQwZWRiMWI2ZTc2NWI2NWRhNzJlNzIzMzI2MWM4ODkyZTJmNDk0OWJiNTFmMzJhMWE1YTNlZTE0OWJlYTI2ZmRjZWRiOTkxZDJjZDEyNjYzN2UyOTcxZTliNmYwYjc4NWRmMjhhNDhmMzAxNzA3MzQ5NDIzZjQ0ZTg0NjIyODlkNzI1NDk4MjMwNDg5ZGYxYjUxYmUzMGYwOGQ3ZTMyNTA1NjVjNmVmODI0YmM1M2ExYmE3NGE1N2EyNWMwNjg2YWRjYjZjODI1YWIxY2E3MGM4YTVkNDZkYmJjNmZhNjA3NDYxZTI2ZDE2ZmU5M2JiM2QzYTk0M2EzZGMwNWYzMGVhNmRjOGJiMTJkNzA4MjFkMzIwZjFhZGYxY2ViYTRiZTY1NzE5NGY3ZmNjZDIxOTkwZjg2MjlkNzQ0NjAxY2Y1MmVhNmQ5NDA1YWFhMjg3OGYxZWVjNDAwM2I0NWE0MjE4ZDhmODBiYjBmNWFmMDQ3MzI2NDg3NzUyZTJiNzZkNjg4NzI1MjBiYmVhZTdiMzA5ZDc4MjgyYTA3M2ZlMGIxYTFhN2E5OGRhMjNkZjY4Y2FmOGMyNjk5YjFjN2QwZjQ3YmQ3ZGUyYzBiYjIzMzY5OTYzZTY4YTY5NzRjOGUyYjU5NWI4MjkzYTlmNGQ5OGRmN2U5YWUzYWRkMmEzZjY0ZTgzMDM5NzM5NjQyZDE5MjIwNGU4NWU2YzQ4ZDVkNjcxZjZjNzVhMGE4OTU3ZWRiYjc0MTg3NjIwZjJhYmE5OWMxYzYyNTg0YzU5YWMwMDY0N2UzZmI0MDI5MmI5ZGMxYTMzNDY4Njg1NTMzOTJmZDNmMTFkNmRjNmY1ZjJmNGU4NWVlMjUxMjVjZGQ2NDQ3NDNjN2Q0NTI4MWVkYWM2Mzg0Yzc3Y2I5OGE2N2Q5YWU2ZmM5YTBhNzZiOWY2ZmE2OTZmZGY0YWNlYWI1Zjc5NGVlNTIxYjFlNWEwZWU1N2FmNTNiZGYxNzY4MDFiNGY0NWNmYjNjYWUzMjg3MjM0MjM0Yjc3Y2UyMWVkZjg2ODBkNjhjNGE4ZWVjZjFiMDM1MzdlYTU2OTlhY2I1NjI3NzdlNDJhNDg2ZmU3Y2QKK1NJRzogMzc0NmRhNmNkOGNhMTA4YmVlZjA2NDg3YmVlNjM1ODRmODEyYzhlMDY5NWZjODYzYjg2ZTVkYjEzMjM4MGI2MmZmODU0NGY2ZjM3NDgyNWIwZTNlYTA2MjBlZjg1NGMxMzMxMTE0ZDY2N2RmMWY5ZWE3NzZjMzk2Mzg3MDI5MGQKKworVFNUOiA4ODkKK1NLOiAgY2VjY2M2ODMxMWZjNDViNmMyYTJmMWZmOWNkZGUwMDdlYzc4N2ZkZjI1ZDAyY2NkMmExY2FkOWRlM2ZiNGNmZgorUEs6ICA2ZjgwNDczNGVmOTI4MjQxODBkYTcxZTU1Y2YzYmYxYWZlZjY1YmNmNTYwOTYyZTBiMGFjYmIyZDhjY2E1OTg0CitNU0c6IGJhYzE4NmQ5ZmU1YWJkYTc5YzNhMzVhN2EzYzJlYWU2YWU2YWIyODI0NzkxMjc3MGM4NGVmZDA0OGViZDNhYmE1N2MzN2NmNGM2YzdmMzBhNzlmNjhhM2Y3NmIyMGNkOGM2NjMxZmNjOTY2NzA1MjIwODBlNmI2MmU4ODdhZTZmNDQzNmQ0Y2FmNTY5NDMxMzFjNTJkZDI4MmIyNTFjZDA3NWYxZjdmOGUwYmRiNmJlZGZjOWEwNzk2ZjU1NzkwNDJiNTZlNjkzNzQ5NjFiMTFkZmQ2MWIxMmRlMmJiN2Q0OWJmYzUwOWNkYjMxMzhmMzM1NmEwZGRlZDk4ZjUzMDFiN2M0YTc0OGJmODliMjNkZjRmNzQ3MmZmOGIxZjUwNWQ3NjVjNmZmODJkYmFkNzRiOWQ3YWVmMjJmYmNjYTBiN2YzNTA0MmY5YTc2MmJkMDY5MDJiYjIxYzdmOWY3ZjY2YmVmMzg5MDFkNzUwMTJkNjFkNzQ0ZGVlN2FmZDg5ZmM3ZTkwOGM0MDY4NWJkNDQwYWVkYTQyMDRkMDA2ZjI2MzA3ZDgyYTQ5Njk2MzExNWY5MGUwOWY3NjY4ODI5MWY0YTY3ZDY0MTFmNzZkMTY2MTc4NzViMmI5OTgyZGZkYzVlZTliODNiOTgxNzAwOTMxOTExMGI1NDA0YzYzMTE2ZmI2ZTk0NjQ4NDZmYTAwOTU1NTYzMmYwNzY5ODRjMTVlMWY2MDgxNzMzYTBkNDZmMmQ2YTNjZWJmNzllZDkwMjBjOWRlYzhkZjE1OGEzMzQxZjM5ZWFhNWZjZjFjZjQyYTk0ODQ5YjIzNTJjMWExZWNkNGZiODE0YzIwZDA3ZGZkYTMxMmJkNGYyZjU4YzE1NzZiNGFhMzE1Yzk2Yzg3ODZhNGNmYmI3MzZiMmQyM2MzOGIxZDgxYzQ2NDRlYTM2YWZhMDc2ZTA1NWJlNTkxN2NkN2E5MjM1MGE3ZWQ2NmE1YWIyMjUzZjU1YzRmZDFhMGQwZTZkNGVkYWI1ZjcxMmVkYjQ0MGMwNmZhYzhmMDdlNmQ3M2NjOTBiMmJhNzEzZDczYzczODAyMzYxY2U0NmE0ZWI1ZWQxMDYwYzRjZjUzMjA3ZDMwMWYwZmNkNGYwYzlkMTU4MGRiMmZjMTA1OWQzNzIwNzY0MzhhMDExOTJhN2Y5ZmQ2Zjc4ODNmNTY0MjI4NjZmZDlmMGFmZTUzZmRjOTEwYWZhNWE3NTFjYmZhMzc3NTkyNTc5MTY1Y2I1NmRjM2ViNGRjZTY3ZTNkYjMzYTk4MWE1NmI3ZDlmN2JkZWE3NGZiYWVhMzQ3OGU2YWIyYzY0NGZkNzc3YjhiZmE3MmFhMGYwYTUyMTk4ZDM2ZTViNjM0ZDJjOWExMWI3ZmUwYWIyZjlhNDA5MDFjNWIxNDhhMDE5MmU5NWExNzBiYWY3ZDUzNTBmZTAxZTU2OTU0MmI5MzQ4NWE0MTk3MTQ0MzQ4NWZhZjU3ZjY3ZjU2ZGZlMmM1OGU1MzljOWY5YjQ0OWMzZjkxMjQ5YTEwYzFhMWJlN2UwYjNlYWJlOGVlMGJhYjFmMTFmODk2MTRkY2VkNDE4YzYyYTA3YTBiNTlhMTM3MGQ2NTMxYmExNzcwOTFjNmFkNTk1ZmI1OTQ4ODIwNGY2MzM0NDczNmVhMTAxN2FmZmJlYjc1M2E5OTc4NmIxZWI2NDUxMGUyZTcxN2VjOTBlMDI3NDRiYzM1MmQzZjFiMmFiN2JlMGViNjU2MjNkMDRmYjNhMDQ2Y2U3ZjRkYTY5N2Q4Mjk4MjhhNTJjN2IwNDNiMmE4MmVjOTdmYjA0MWJmNTE5YjRkZTMxNmY0ZTJmNWIwZGI2MmFlZDBlZWQ5NWNhZDQzMjBjMTk0N2MzNWZkODg0N2E1ODY3ODcyODgzNTYxMTE5YzAxYjAwODkyMTNkODRkYjk5ZDQzOWYwZjY0NDRkODc4M2RkNGI2NGJlMzU3N2NkNDYxY2Y3NTNjOGU2MWM5MTJkZTJlNWQ3YTdlMmJhZWZhMjU4OTc1ZDE2ZWYzMTE3ZGE1OWE2Yzg5M2YzMzM5MTg3ZGYzMTY4Yjg5ZjBmYjBiMjE5OGJiNmYxNTk0YmI4OGYzZDYxMGZjZWMzZTM2ZGUwNGFlMTAzMjgxMTJlNmZmNzRmNWE4Y2U2OGQ0MDcxNzRiNGMwNjkxYzc2MDJlYWIxYmIxMGYzYzQ5ZGQyMmI4NDUwNzgyZGVhZTlhNzMxNWUzYjg4ZGU3OWNkMTVlNmM5MjY4MTY1ZWQzYTBmYjNmODliMTgzZTFhMjEyMTUyMDAzZjMyYTI2NjVkMzdjZGQ3ZjZiNTZjMjQ1M2U1NTgwYzRkMjFmOTk4M2YzODc5OGU5YgorU0lHOiAzYzQ0NjJhYTQ3MDEwMTMyZGJiMjYzMTFlNDQ0NzI3Mjc5ZWRhZGUxNWE0ZDY2MmNmNjQ3ZjMyNzVjZjMyNTNlNmRlOTMzMzgzMGUwNTE3YWE1ZmE3YmMyZDBlNjNlYTI1OTdhOTRiMGZlOTI3MDZlY2QxNzJjNWVjNWM3ZjAwNgorCitUU1Q6IDg5MAorU0s6ICA3YjMwYjQyZGMyYzY3MGExOTVmZTJhZjg3OWZjNWRlMzc0MDI0NTg4ZmUzZGU0M2UyZGQ1MDg0NGY0OGY0MmJlCitQSzogIDgyYTJhYzYwNzlmMjEyYjVlZWRkMGMxOWU5Mzk0ZmFmYWNkNzRkNzE2ZmRlZmJmYzZjYjhhN2VhZjQxYzAzNjIKK01TRzogYzY2ODdhZWZlYmM1YzgxNmQxYTMzNDUzYmVjYTUwMjBkM2E5N2NkYTFkYWM1NjYyZjBhZjcyYmFkNDQ0ZTJmZDExNzZhN2IwNGMxYmQwOWQ4MzI2MTgyMDliZjNlMzNlNTIzNTM4ZDZkYWE3NTMwNDZlODcxZGQzYjNjN2FjYWQzM2U3OWMxYmI3ODk2NDA3ODY1ZDE2OGQ0YmMzNzU3YmRlNGY4MjNjMDg3Nzg2MjZmOGM3MWZiN2NmY2ZkZjAzYTgyNDk3YmQ4YmU3ZDhmOGVmNjQ5MDMwYjVmMzZhMzM5NDU5OTY4ZTI0NmExZTQyMDg1M2RhY2U0MWNhODUwYTRlZWFlODM0YWUxMTk2MTBjYTRjZDA2NjJhYWMzOTYyMTU4Njk5ODAyN2VmMmY2MTQ4NWMwMjg1MDY3MTRhZTA5Yzc2Mzk5ZDg3M2U4MDgxNTg1NzhhYTU5ZTgyMTJmNTg4NjUzMTlmOWUwZDJiOGRhN2FkNTI5ZTBhYzFmMWViNDM1YWVjZmQzNWY1YWJiOTJiZWE1MDczNDk2YmY0YzBiZjE1YmFhMjczYmZjNWMzMTA0NDc0YTJkY2YxMzJjMzMzZWIzNmVjMmNiZjA0ZmE5NTgwYjc2OGY1Y2VhN2I1NjE3ZTU4ODBhZmY2MzIwMWMyNzRkNjY5NzQzZTFiYzU1NmIwNjc5MDJlZWUyOWQyOTExMTI4ODk2OWNmZmE4NzlmYzljYmY2NmZiZjkzMjZkOWQ5MjVhYzQxMDJmYTlmMWEwNjA4MWFkZWMwNzljYmM5Njc0NmQ3OWI2M2EwMTJlZDc3ZDgyYzlmZmQ0ZTNmMTYxZjZjZWEyOGNjMjNmYWMyYTU0M2Y1YjFkMDY0NGVjMDQ4MzgzMjdiY2M2NTJiODU4ZjkzZmY0NjNmN2U5NDllZWM4YzlkYjY1NjlhODY5ODRmODMxZGY2YWM2ZDk1ZjM4ZjQ2Y2ViYjZlNjU4MzY1N2ZhY2QyMTA4ZGJjZDBhZjIzYWIwMTAxYTEzMDFiZWI0OGE0NGNhY2NiOTEwOTQ0NzNkN2U1YTVjODhjNjQ0ZmQzNDIwNTczYjY3OGYxN2I1MTc0Y2IxNGU5MGZhYzY5NGQxZGJjNmM5NjMyYjU5NzRhZWYyOGFjMDhkNzIwYjJlYTMwNDQwZDJhZmIwNDkzYjQwZGIyNGVmYmRiZjUzYzQzMDkyMWU1MmExMGI1NDY2MWUxNDlkMTY1NTkxYTdjZjkxZDY1MDhlYTQ3MmZiM2JlMTYzOTVlMzAzMTJmMTliODdjNDdlNDY4MDRhMGZhMjliNTZiNWFjOTUwNjc3YmM2MDIzOGI1ZTk5ZTAzMGIxZTU1MjE0NmEwZTg4YzI5NGNmY2E4MzVjMTAxYzU1ZjM0MjM4NzRjYzEyODc1NmU3M2E1ZGViZThlOTdmZTIxNjZiNjVjYjQ0NjQyNzcwYzZkMWQyMzkwYWYxYjBmMzFiOTU4YzgzMGU5YWM0ZmUyZjVhZDU5MDU4MmZiYjg5MmJmOTQ5NTg0NDc3ZWY3YmRlMjNmN2RkMDJiNjNmN2MyOTA4OGE1NzI1MTAwOTEzMmZmYmI3OGVkMTRkZWZiZWZkOWZkMzFmZGNhYjAzYmE4MGEyM2YzMzM5ODM3NjBhYmFkNGYxNmRkZjlkZDQ0MTRmMDRkMDBkYjU2YmE3MmQ2M2EzYTEzZDJjNDQyZjU0OWZkNjZjOTg4ZDJlNDYwMWQxM2I1MmY3NzUwMGRkNjkyYmVjOWQ2YmQzYmFmYTkyNDJmZGNmYWViNjliOThiMGI1Nzg5YjI4MDM4NDBkZWM2MzdiNDlhZjQzODFhZTNmYTQyOWZiNTM0NjFhMGM2NzRlYjVhYTE4ZGJkNjA3YTJiNzdhOTZkM2FiNDY0ZWNkOTc0OTJmNmRlNDYwYzlmMTFiNWMxNzU2Y2I1OWNiMTM0OGRmZDc3OTU2YjcxOTA3YzU0ODIxZTMwM2NiOGIxNDkwNmMwMDNlMzQ4NGJlNGVhMDVhNjkwMWQ2OWIwNzQ4NWU4NThmN2I0NzFjNjM1ZjkwMzk1YjlhM2UyMjQ3ZjFhZDEyYjExOGZmYWZjNzIyMWE1N2IxMGUzMTliNjFhZjFjMTM2MDZhODE2MTZjZTNmMWQ2MmJhOTMyZmY0ZTYzZTc0Yjg0MjU1ZTNhZjUyMTBiYmQ1NzFiZGE0NGNiZjQ0YjcxNDQyMmNiNDVjMmVmMjFmOTgxMzFiYTk2YjdlZGI5YjAzZTMzZDdkMTg4ZDViOGQ5MDRjYjQxMzZmZTI2OWRiMTQ2OTg4MTY4ZTdlZTI0NTM1NjM1NGYwMDJhNWVhOGIzNWEzYTk5ZTgzYTEzMjcyMjc0MTQ0YjMzYTYwY2EKK1NJRzogMGE2M2I4NGY0NjkzNWZhZjNlYTE2NGIwMGFmMjI3YjAwODY4YTAzZjU2MTI5MzVlMTg2MTlhODRhMmU1N2I4ODUxZDc0NmU2M2ZkOTEwMDc4N2Y1MzM4ZDUxYzEwNzNjMmZjNTMwMzA5OWUxODczZTVlM2QzZTVjMDM2ZmJlMDEKKworVFNUOiA4OTEKK1NLOiAgNjY1NmY0ZDQ3MTgxNTdjNGJhYzM4ZmY3YWJlNWViMWY4MTJjMGI5ODZkOWMwMTRhYmFkNWIwOWFhNmM4ZWU0YQorUEs6ICBmMzA4Nzg5OGU0NTJiZTllMzBhZWNjNGU4ZmZlMGMwMTE2OTg4ODY4M2Y2MmE0NWI4ZGEzODI5OTAxNGY1YjRhCitNU0c6IDk0ZDllNWU1YTdiNzA1ZDlkOTc2ZmU3MWU5NGQzZjdmYTc4NjZhZmJmN2VjZTQyNGYxMzYzMjc3OTliMmIyMDZjZTRlZjRjM2YzZTcwNTU1M2FmYzhmZDVjMTk1MmE0YzE2NjU4ZDRhNzhhZmJiOWE5N2YyNzE5M2M2NWI2NWI4MmU4ZjNiNzE1MTVmYWM4MjY0MGUwZjhhNWZiMzVhZTZmYzZhM2RiMDUxYTIyZDRhNTMwMDQxM2U2ZTMzZDE5YzIwMTNjMjk4M2FjYThhZDZjZWMyY2U2NGE4MTQxNjRmMDYxYTFhM2M1YTg2MTBhNzY1MGJmYjU0MjNkNDM2MmNlMDIyMDZkYmU0YTZmYTgyNmYwM2I0MmFjM2NkOWVhNGM2NTE0MDFiM2NlYTgyYzM5OTNmNmFmOGIyYzllMmU2ZmZlNjkyODBhYjNmMDlmYmU5MGRkNTQ3Y2NkYTlkOWU4ZThhNTM3YjNiMzYwNTU0MjI3ZWQwNzA5ZjI5MzE5ODk4MmVmYjVlZmIwZTczZTAwMDQyZDFhMDYzYjU3NDUyMDI3ZGNlMWEzOWU0YjAwNjhmNThiMTExZWM1ZGMxNDJiZjQxOWFkODkzZDU0ZjQyNjBjYmRlNzYyOGY3ODNkZTg0OTYzODAzMDZhNGVmZjZkODI4NjkxMDQyNTljOTRjNTRhZDVhYThiMDY3YzQyNDk2Y2I4OGRkMzExNTBlYTA0ZDQ5OWJmYWM5MWY0YmIzZTY4YWY1YWY3YTU2OGEzZTRjZTdmMTcwZDk4NjAxMTYzZjQ5NTJmMWQyNWUxMmUwMGVmMGEyZDhmMTExYWZkYjBmYWZiYWQyYmY4ZThiOWQ0OTM2M2ZjYTY4MTgzNjE3YjU0MTI3MGRkYTQ2MDliMjYxNjcyOWFiMWI4YzQyZGJkZDdiZjk4NmFmOGZiYTUyZTczM2U0MmJhMDNjODkyZTFlMWVjMDZhOTBiMTYzZjVhNzlmNjE2NWViNzMxNjk3MmFjMWFkYmZjZjFkY2FiMDc4NDdlZjgyYzJjYWIxMDE1ZGJiNTBhYWRjNzlmZTExYzgzMjA5OGNhY2MzOTgyMGFiMDg1YjY5NjNiZDQyMTYwZWQ2NjEzYmFlNWUyMDFmMTdjMGZkN2YzMjM1N2FlMzUwY2U5Y2JiZTkyNmZhNDJkY2JkNDIyYWMxYmYwOWExOWFkMWY2OTQ2OWU0ZDFkY2IxMjQxMThlZDQ1MjJkMzUzYzE3NDI5ODY1MGZmODgzODJmYTJmZGJiMjg2YzQ1YjE4YTliYWY2ZjY3NjNhYzIwYzljYTQ3NjdkMzQ4YzRiOGRlZDYzMDA3NjY1N2I4NWIxNGMxMWFlMjczN2VhMjlhNDM1MTViN2YwNTY3NGEwY2QzZWQ0YmY2YTNkMTg5YWU5NzIyMThmODc3Y2Q4YWE2OTQ5OWQ1YTA4Yzk5ZTQ0MDY5NGNjYWNjZGYxZjY0MmUxNGU5MDEwNWJlZTZkOThlZGVlYWIzYjRmMzM5ZjMwMDE4OGFlYzBjMTZiZDY0NTIxZDkyODczOThlNjQ4ZGI5NDMzMGVkOGY2YjlhYjZjN2FkOTNmZmM0M2U4NzkyZTYzN2M2MWJmZjdkODU2ZTU0ZWY0OTg3Mzg0ZTMxMmNiNTcwMTdhNTBlYWU1OTUyYWJlMTlkODk5OWM4YzgyZGZjNDU3OThjYzE3YzhkOTQ5NmJmNTIwZWNjNWI3N2ZlMjg0OTE1NTY2YzQ1Njg1YzMwNGEyYWNkNTI1ZWYxMmM4NmYzOGFlZjU1NGQ4YTIzODQ3MzdjYzQxMzNmYjdlMmI2NWMxM2JlZjMxNjY4YTZjMmY2MGVlY2Q4NDEyZWVmZjdmNmI2MDVjYmU5NTA4M2UyMzNlYzFhN2JiMzZkZTIzNmM4YTcxYmEyODcyYmU5NDZjZDNiMzg5MzVmNWRhNjRjOGZlYzhlMTRmNDVjY2Y2MTI0YmFiN2Y3MDU2N2MyZjJiZmRkNTY2Njc2MDk1NzIwMzdjNzYxNDZjOTkxNzA3NjU5YjU3MDliMDc0ZTM0NTFmOTIxYTJkZjI4M2I5NmFhMjZhYjQ3NjYyNTAxNmYxODFhZDY0Yzk5MTljZjQxZDcxNGExYTlhNWUyYmIyNmJhZjg3NzBiMmViYTc3Yjc3OGEzMzI2NzdhNzU3MmVlM2EyYjFkYzA1ZjczNTZiZGNhZTVmNTVlMzUzMjllMzRjYWE3OTQzMGIyNzBjMDM2MTYwZGM5ZmNhYWI1YjI1NDU0M2FjOTRiMjQ2ODFmMTcxNzJiNjE1OWQxNjYyMWQ3YWQwZWViZDg5NWExZTFkMDliOTE2YTg2ZmI0OGU0YzkxNjYxMDU3ZWVlOTVjMDg3MGVkNTQKK1NJRzogOWMyYzM5OTE1YWVkNmFkZDAwNGU3ZGQ2ODRlZTNkY2RkMTBkODdhNDg3ZjY3N2U3M2MyYmNlMGZjYTdkNTA4Nzk2NDY0MTUwYTUyYTQ0MGY1MjM3ODUwYTAwOWM3MjE2MmQ5ZDI5ODU0NzBhMzM0OTBlNjZkM2M0MDE3MDRjMDUKKworVFNUOiA4OTIKK1NLOiAgMTQzODNlNmU1NjA0Yzk5YzI0OGQzOWJlNTFkMTY0YjEzNDQyYjA1ZTUxZDc4ZWNkOTk5MzY0MjIxYTQ1MDM2YgorUEs6ICAyZmMxNjEzODIyMGFiNzRiM2JkNDQ2ZjhhNzE0YjU4ZDU0NjNkNDBkNDM2NzkyNTAwNzQ3NGM1YjllMzVkNDk0CitNU0c6IGM0NzUzYjdmN2E2ZjZkZWEyNTE1YzZlM2QyOTU2MTUwNmY0ZjM2ZTBkZTg0OTk5MjIxZjIyOGUyMGJkNTEyOGVkOTNiZGI4ZDExOTMyMzdkOGUyOTQxNjlhMmJjNDQ4YWY5ZGQzNjA2NjMwMWVmYjdmZTEyMzEzNTNjMDYyM2ZmZTExMTVkZWJiNjkwNWFjNjk0NmVlMzgyYTI3YzNjMDllMWIxZjVjMTE0OTNkYmEzN2RhMGZmNmVlYTc1ZDlmYWIwZWU5MjZkNzAxZGFjMmZjNWI3ZWY1Nzg4ODBhNWQ1ZWVlY2FkYzFmNGJjYzRjZDRlYzZmMmYxNGY1MmE4YzE2NDA3MmU2ZmRlNWFiMmVlOWNlZTBiNDhlNTFhZjA1NWY5ZmVjN2M2Mzc1MGZlZGY3MjMzMmIyMzg2M2ExZTU0YzUyYjQ2MWEyMTUwNmRmZGZjNjM4ODBlMjJkODljODk0NDEyNjY2YzkyOTgyMWMwZTQzOWU3NDU0MTVmNzE3OTY5ZTYwNTg1NTRkNjRiOTQ3YTRmYzlkMTZhY2FlM2U0OWFlYzA4ODAxYTA5ZDk3MmY3OWVhZDY4ZDUyOTc2ODA2OTczNWNhYTc0MmI0NWE1ODMwNTgxYjgwY2EwNjFhNmMxNTE1ZTNmN2Q1YTkzMzc4NzhjMTlmYzk0ZWVmMjI2OThlYTZjNGQwNWY5ZWQ0MTFiNmI4ZjA1MmI1ZmYxNWRjMjNhNjRiZWVhYWU5OWY4NDg5M2RlM2RmOTQwYTRlMGI4ZTk5MzkzMDEzOTA1MmQ5OWJlNDdiY2E4Nzc1Zjg1NjNiZDQwMjZiNzEzNDNkNTE5NjhmMjMzNzUyOGY0YzlkYjhiYmQwYTI5OGFmMDRiMjc2OTVkODZiN2Y3YmE2YzRjY2M2MjczZmViY2Q4Zjc1Y2ZmMjY2OTk1MjQ0ZmMxZmExM2Q4ZDg0M2YwYmZmNDljYzJkNTA4ZjRhMmIzYWFkMWQ5NWZiMjJhMmJjNmFkMWI5NjZiMDgxMmQ5OTA3MGJiYTA3YzkyM2VlNGQwODEwNzQ4NmRjMDFhMDZkYmE2ZjFkNWYxMDVhY2VhZGUzM2IxNjY1MTBlNDI3ZWJiY2U1MmEzZTc4MzFmMGY3OGEzYzZlMDcyNjA4MzM0ZDgwMjFjMzM4YTczY2MwYzQ3ZjE5YzlmYWU0MDNiOTcxNmQwZDE1ZmJkZjY0NjZiMDhmNmFjY2UzZjUwYTcwM2IxZGVhOGQ4MjZkZjg0MmNhMWJhMjBkMjlmNDU0OGFjZmM3NTRjZjAxMWY1NzA2ODFiNTllNGRhMjUzODVlYmQ2ZDVjM2FkYzkzMDUyOWUxNjZjZTY3MDVmNjAxMDIxMGRiMTA2NDYyYjMzMzMyMDRlN2FkYWRlZTY2MDZhNTYyMDZiNDdlZWYyMDc0YjExNmUyMmE2MTU0MThlYzJjZGMzMzFmMWUxOWUwN2U4YTM3YjkyZDY5ZGYwNzM0ZTA4NWRhZWViOTAxZWM2ZThjMzVmMTAzZjFkODZlZjBkMmEyNjUyYjAxZDE4MzU5N2U0Y2ZkZWVkZmU1ZGY5YTdlZjY2YTFjNzk2YTM3YTI3MTEzYjk0NGRkN2JhMTdjNDYwMDE1YWI4YWNlNDUxYzU3ODUwZWM2YzI5MGM1NGU1MTEzZjU1ZTk5YThlNmU0NzExZTNiNzgxN2JmOTFhNWFkYjM3ZmI5NDYxYmU2YjFiNTVkNTg2MDQ2ZTQyYTU0YzVkZWY0MDc2ZjFmZjZjMzFiODA2ZmM2MDI0NzQzNTZhYTI4OTllYWU3MGY1ZTVhYmYxZjc1YTdmMjRjMTM0Y2RlMTE3OTNiYjE2MmUwM2E1ODNkNWJlMDQ2YWNjNzM0NTZkMTJkNTA5ZDkyZjc3MDU3Njg2ODZmNmM3MTRhNGU1N2VjODhiNzEzOThlMjNlODM1ZDZkNjU0NzIyNTk5NmI3ZWQwOGYzYjc0NDNiYjE3Yzg5OTQwOTQ5M2QwZWZlODQ1NWJlYzhlOGMyODRhM2IxNDlhNWI0Y2E2MzFlYTYyMGIxYmI4MTdjZWRhYmE1MGIwNDQ0MTE4NDlkMjYwYTZmMmEwZDNmMmNjZWVjMzg0MjcxOWE1ZWE0ZmUxOGRkZTBkNDJkY2IzM2FkMjFlNjQ1MzMyNWFmNmYzYzAwOWYyYmI5NzhkMzBjZWVhZTlhYTQ5MjhiZjczNzY3Y2RhOTI5MmFiODkzY2U1ZmEzYWE0YzIzMjE2M2I0NWM2NGVkNzk3Nzc3OWIxYzBjYWZjZmMyYjlmYTA4NGEzMjRmMTEzYWRlZWMyMThiNDczNWI2YjQ2NGRiNmQ0NmMyNzkxYWYzNDU1ZjFjYTVlYTFlOWEwNDhjMDUxYTU0ZGZhMAorU0lHOiA0NWU4ZWQxYTc1MWRmYzNiOWI3YmQ3YTEwYmY1YmRjZjhjYTQ2MTg2NWE0OTBjMTA1ZjEwNDUyOTQxY2Y4NzcyMTIxNGJmYmYzYTM1NjA2YjdjZTM1ZDZmNzBhYWYyZDVlYWRjYzBkZTAzNWU5YjJmNmQ3Yjg2MmZjMjg0OTAwNAorCitUU1Q6IDg5MworU0s6ICA1OWIwNzI2M2IyMmMwYTM4YmJjNTkxMDU5NTk0YjJiZDkyN2U4MDU5NjFkZDA3ZTFmOTQyNDViMjNhYTJlMDE2CitQSzogIDBiMWU0Y2Y1YWZmMjc4ZWM2NWI0MDVmNTEwOGUxYjViMThhOTY5YWQxZjFlNjM4MTkxMmM4MmQ2OTg5MDdjYmEKK01TRzogMDhjZTBkNGRiNWMyYWE1MDBhMTllZmJjOGRjODU0OTI1MGY3ZGQ0NmE3YTlhNTQwNzQxN2IzZDUxODIwZTRiMGQ2MTI3NTU4M2Y1NmY4OTdmZDk0MmJkZDczMTFhZDZiYWY3MzgxMjg1NjdhZjY1NThkNzU5MDZhMDJjNDM0M2E5OTU1ZDU5YjExMDg4YzU4OGRjN2RkMDhmNjc5NjVjNTYwMmE1NjkyOGRkYTRhZTE2NDI5MzE2M2I1MTdjYTE3ZGVkMDRmZTRhYjJmOTc4OTEzMGFlOTZhYjIzMWYwN2UwOTAxNWI3OGYzODQ4Y2VmNDM1ZGIwYWQ5ZjM1ZTBmYmM5ODUxZTNlY2ZjOWZiMTg2ZDE0ZDhkYTRkZGE0NWQwYjNlYjNlZTQ1MDBjMTAxZTMxOTRiNTcyMTQwNjg5Y2Q3NWRhMTI4N2IyNTRmMzc0ZTNkOTMzMjZhZTVmYWYxMTQwMThhYzcxNGJkMDAzNzVkOTJhOGJiNjU5YzMyOTEyODMxZjRmMjA3NzZlOWUyYzI1MDI5ZjBhZmYzOWZkZGFjNzI0MTU0M2EwMzY2Yjg0ZGU3YjFmZjIzZThlNGRjMDkzZGYwZDJkZDVlNTNlNjg0Nzk0OGNmM2QwZmYzZjU2NGFkOTRkOWNjMDBhNWVhNWI2OTVlNDA4YmY1MGY1YmFiMmY2ZWE4N2JhOGFkM2ExOTQwMTk1Y2YxYmMyYjViMzQ4NDdhZDNhNWVmZmI4YTc4MjNkZTkxZWYxNjMzODY5ZDFmMDQ2NDNhZjRkODI2YTU5ZTc4YjlkMTg2MzEyYjNkOTcyMjYzNjU0YWM1NTg3YjgwYjcxNzY0NmYzMTAwM2RiODFhYzcwODYwZDNmYzhjZDNhNmEwYTBkNTc2ZDI1NzMxZWY3Yjg5NjYyNjNkN2EwNWI1NTAwOWU4YTIzZGFjMGY5YTIxYTI0YjA2ZTEzOTAwZTQ0NDQ0NmZkZmU1NmNiYzFhMDI2ZGY0MTA2NmIyMDFiMTQ4MWU1NjE1ODkyNmMwYzllYTkwZjBjNjQ1YWFiNGJlZjEyZDRlMDcyY2JmZGMzYzNkNWUwYzcyY2Y4OGYxNjZkZTA0ODg3NGYzNTM0ZTA0MGM2MmIxNjYyODIxYmRkMTZiMGU4NTgyODE3NDYxY2IyNjg5Mjc5YjQ0NmQ3MGM4YWMyMGFkMDNlNTk4Y2FkNDkwOGM1MmMzNTBkNDI0M2VlOGFlZGI4N2E0YWY5NzdmN2RiNTdjZDk0N2I0N2Q2YmI1MTQwOWQ4MGQ4MWY2ZGIwM2NiOWE2YTZiNzk4MTJmNDcwNjkwYWZjMTgzNmE1MzEzMzgwOTRjZjI2ZDNjMTIzMmZkNTYwNWQ4ZjhjNTViNmY4YTJhN2VmMWUwYzc4MTU1NTk0YjIzNzk1NmQyYWJhZDZhOWFkY2Q1OGUxMWNjZDM1Y2M5OTViOWEwYWVjYmY3ZjU3NDFhYzA1MWIwNGVmNmI5NzQ0YjU2ZmNjYjQ2Mzk4NTI4YmIzMWZiZTg0ZTA3ODg0M2U2OWJmMzM4ODk4Y2RlZjY5YWQ0MTg3MjM5NWU0NmI1OTM5MDQ4MjU1NDdlMDBiZGFmMjIxZjhmYTU4N2VhMjAzN2ZmYjlhYzkzMDdkZDNmOGYzNWVjNTM4NmJhOTY2MzMzZTJhYzg3MjdiMGUxYjgwNjEyZDNjN2YyY2I4OGJhYWNhZGZlMjE2M2JjMzhjODg4NDJlNzZhMzk0NTcxZDQwNjEwZThhMjk3NjAyNzkzNzYzMjk2ZTNlYWJmNzIwZTk4NGIyZWRkMjhjZjVjNGUwZjlhMGY3NmFjZWJhMjhjYzFmMWI2OWZmMWQzNWI0YmQzMzQ3YjdmOWE5NWE0YzFlYTEwNzM0ZTFjOTE4ZWI5NjI0OWQwY2M3MGI0NzdmNmYyMzgwOWJiZGE5MDFkNTNmNDg1YTcxZjUwODYwMDJjMWI3MWVmY2M0MWNiMWFlYjUxMjJhM2YzYmZjOTZjNTFhNTVkNzVjMDI5ODQyODhiZTY1Nzg4Nzg1NGNmYTczODk3NGJjZDU0NDAxNDZmOWJiMTQwNDBkZTU0ZjU0NDRhZDQzYjc5YWY5YmRiMjRlZDZhNDhlYjJmZGVlZDcxZjMxZjBlY2UxMDJlOTE4ZTk1NjM1YzdhMDM4NjMzZWUzNDhkOGI1NzgxNjUyZDUwNTlkMjE1YWM5N2YzMGVhMjBkMjc3ZWJiZjE1MjQ2OTA1NDI4YTdiZWMwMmI4ZjkyNjMxNWJhZDY3MjNmZDY0ZDcxZmM5NWYzMzMzNjRjYmU5MGQ0NjQ2MzMzYzQwZGRhNmQxZDQzM2I3YzE5NWE3NThkYmI0MDM4YWY1ZGNjNzIzMmQ0NTQ3ZjU0MGUzOTQKK1NJRzogODg2ZGEzM2UzNTUzMjg1ZWE1OWMxNDMxYjZlODZlYTQ5YmI2OGIyZTBlZmQyYjE1N2U3NzkxYjc0ZjM1YTI0MjFiYjM1OWYzZGMxZTRjZTVmMTFmNzM2NTJlMDNiZmMwYjQyOWM1OGYwZjJkNzQxOGM3YzIwYmNlMmUyZDE5MDEKKworVFNUOiA4OTQKK1NLOiAgNWNjMTE1ZDgzOWUwNThjZGI2NTE4ZWU5YzE2MWMwMDRkODhiZDM5MDhkM2NmNmQ1MmM4ZjI5NmExYTA3NmI5YgorUEs6ICAxZThmMzMwNWJmMmZhMTFiMTdkOTI0MTZhYjBlYTc2MjM5NmQ4OGYyZjk3MGVmMGIxMDBlZDNiZjVjYzEzNDQwCitNU0c6IDUzM2U0OWMxZDVmMzNjNWVjNGJlODRjNjE5ZjRlYzY0OWMyNWZkNzBiZGNmZTI1N2E2M2MzMzczYTRkMDg5Yzg5YWY2ZWViNzE2MGRkNzdhYjY2YjFlZTdlMTA4NTBhYjRmYzFmMzUxMzIzMzJiNTM3ODliMmIwMTQwYzRmMjBmOTdmMjE0MjA3MmQ2MjRhZmY3YWFkMzI0YWFjZDA2OGMwMzVhZmY1MmZhNzEyZjRlNzQ4MzJkZTAzMWIyNjQyMzE0ZDE3MTEwZGVlNmZiODU3NjJkYzMwZDdlOTc3ODJmZDFmYmZmNzE3OWYwMDkxN2Y1NWFmNzUwM2E1YjdlMjNjNmVhZGI2NWUxMDRmMTUxN2I2NjI0YzllNTIwNGIzZmQyOWE2NTg1ZTkyY2UzYTNlZWUyYzVhZTE3NzkyMGY3YjRhYjJjYWM4N2Q2NzJhYjZiYWFjMTE4NmQ5MDRhZWEzNDk4NTM0ZWI1YWIyM2U0YWM0YzBkZGIwZDgyYTVhZTUzMWQ3NjU0OWQzNjc2Mjg1NzdiYWM0MjM1ZTg5N2Q5ZmUyMDU1MjIwNDdkMjE0ZmY2Y2NmMzExYzRlMzk3ODI3ZDk3ZjI4NjhlNzBhYzE3ZDI4ZTMzNDk5OTc0NGQzNTkzNzZhNDgyZmRjYjQxNGIwMmIyNjg3Yjk2MmVlODA4NmU1NzNmZTAwMGRjNTFkZWUwNjg3OWM2ODRlMjVmOTRjZWU1ZTg2MTM0N2U3YmU3ZmNhNTQ5YTBmNzY1MTM2YTJmNGI4OGZlZGUwNzAyNGRkMmZjZTFmNmQwYzAzNTRkYTFhMTZlZjM2NmIzMTViM2Y3MjMzMDMxZjk3OWI3MGVhYzZlMjNiZjNiMzQ5ZWZiZDBlNGY1M2Y0ZDVjNDFmYzAwNDI3NmE1OTY3MDY1OWY2OTA1ZWYwM2QyZmMwOThkNTg5ZmNiYzEzMjgyODJmYTIyYjEwZGI4M2M1ZDcwODY1OTk0ZmQxOWQ3NjBhMzlkNDc2ZTAyMzMwZDJjNmQxOWU3NDIyNjdkZDM2NWJiZTFmZTVjNzExYTk1YjE4NDUwOGNlNDhjMWM5NmQ3ZTYzOTkwYjQwOGQ0NTA4OWJlNzllMzJmOWNiMDE2MmZkMWU3ZDBkMTlkOTdkMGFlNzhmZjgyNGNjNjk4OTQ4NmMwYmQwMzgzNTI1NTFmMzc0OTllOWU5ODI2ODA0ZTlkMjYyNGFkMGM3Yjc1MzQ1NjBmNDVmZDdkMzI0YjhlNTE3ZTAxYzliMjc0M2MxNDk3OWNmZDUxMmJjM2ZlNjY3Mjc5YjNhMjc3ZmI0NjNlOWQ3MzQ5YjY0ZmZjOWZlNjA4ODRjMjFlNDgxMDgxZWQ3MGU2ZGE1YTM1MzljNDQ4OTcxZjBkOTc4NzI4OWZjYjAwODBmMjE5ZTk5NDQ5ZjgyOThjNDI0NzVmODdmZDEwYWViNTA5YzUzMGNmNmE1Nzc0OGViOGYzNTYyMTYxZmE0ODc1ZWE5NTNmMDk2NTljN2RmN2E5OTUwZjAzMTc0NjdjYjRlNTM2NmUxOTZlMzJmNWUyNjk2NzMzYTI1ZWFjYmRlNDkyMTA0OTA3NjIwNjBlYTIzMTM3MGQ0MDkwNDI5YmIwNmJiODY3Mzk5ZThkMzdiZjVkMjFhMGU3MjE0N2U0OTZjZjNiN2RkNmZlNmU1ZWRlYTk2NjhkODAyMTkwYTkxYzYwMGUyOTUyM2Y4ZWI5MDRlNDhiNzA0MTJiYzEwYTcwMjA5ODRjNWZmMGY1ZjM4M2YyMTRhZTU5NGRjODU5NzFlNDgwMzcyODQ4ZDBkN2U3Y2M1YzE4ZmY4OGJhOWIyNjJkNzg4NDY5OGE0MWM2Yzc4MTljMDMxOWZkYzZiYjA3YjkxZGMxNjk0ZGFmZTNhZjM3YTUzOGJmMmIyZDhjYWNiMjdkMjRjZGM2ZWFkYjhjNmEyZTZiN2RmOGE0NjU0YWU5Mzc4NTBjODkwYWQ5MzA5ODBhZmNjMTQ5MmRiOGEwMTY4Y2JjOWYxMDY1N2ViNDhkMmFjODdmNTE3NWQyM2NhZWQ0YjVlNmYxMGJiZWFhNWUzM2ZjNWY2NDE4ZDYzYmEzNzRhYjFhM2NiZDM2YjcyOWRkYmRhYmE5ODlkNDY0NWUzYTY2MTMwYmFlNDE3Y2FkMDg2ZGFkZDMwODQzMzUyNTE0YzM3NWYyNTcxYWJhZjkzZTlhMDc3MWZhMTAzYWU5MjU4NWIwNGY1NWM0MzQ3NjliNDNkNmQyMmY3NTNmOTMwNjAzNmU1MzUyNGY2ZjRkOWNjYmQyYzMwMzE3YThlODk5ZjMxNjE0OTAzNTg5NGRhOTQ1Yjc2ZDkwODJiZmVlMzI4ZTdhMzFiNjYzMjhlZThiOTRlMDY4YzcKK1NJRzogMDM3MWMyZDY0YzVlYzBjODI3NmNhNWZmYTYxNWVmZjQyZjllZmZmYzU4ZGQ4ZWNmY2Y2NzYyMGE5YmNiMzhmYWYxMTg5MzJiZjJjZDViOTIwNWZhNTUxMzM0ZGYyYTc1N2M1OTc3NDRmNzkxZjM3MWZiZWRkOThiMjFmNzM0MDUKKworVFNUOiA4OTUKK1NLOiAgNzVhNTAzZjQ4ZmZjMjIxNjE3NjcyNTE5MTExYmY5MGRhMzlkYTllYWIyZTI5MTRmZDM3NTVmMTBmNTM5MzY2OAorUEs6ICBmNjgwY2MwZjYzNThjZGNmNTM3YWE3MTEyOGNmYWRmYzBmM2E4OWMxMDBhYTM0YmNkMjQyN2UyNDhiNmVkNTBiCitNU0c6IDdiMDEwOTA0MjMyMzZjYjRiMTNjNDE3N2ZjZTUyYTdmZjY1ODA1ODhjYzJlYjVhM2YzOWZmNWQwYzczZTAxZTAxYmY3YmQ3NGFmZTQxNTEyNTBjMzkxNDI2ZWE1MDcyNzFiZWExZDZkODVmMGIyZmUzNWM0MDUwMGY5OGQwNjU2YzYzODhmYzllZmJhMTgzN2RiMjJkZmEyOWQ4OTI2NzZmNTBlNTc1ZmU4OWZkMjkzODlkMDlkMDgwYmFkNjdiYTU0NGNhY2FiZjVhNzczODIzN2M1NWUyODc1ZWQ0OTE2MzAyYTJiNGRjNDk2ZTc0MjczYmYwNTE5MTEzNzgxMGU1MGU0ODE5NTI2MGJhYjZkODFmOWM4MDU2MmVlNzNjY2I5MzMzY2Q5YjYxZGFmNWIwMDM4YTRlNmM1Yzk1OGE5MWY2ODUwOGMxZDg4MjUxOWMxYWE0ZmZjYzUzNTYyNDYzYTBhZTMwMTYzNjk2Zjg0Yjk3Y2NiZDg2Nzk4MjBlZGQzNjE3ZTdiODk2ZWVmZmUzNDFlYzZiNWIwM2Y3M2I2MjVkNzQxYzY1NWZlNmU4MmQxMWQ0NzhhN2Q1NDNmZjZjMGZhM2EzYThjOTRhNjE2ZmI4NDcwNzBkMWZiZGRlNjAxMGYwMjZiMDg5Y2Q4NjNjM2JkMjliMWM0MjY5Zjc3NjU5ZTUxNTcyODg5MGM5NzNiZTg3ZjBiODMzY2E1YWY2YjRjMzEzM2FkNGZhNGY5MTY1NWM2YWRiNWI3MjM1YzI3ZmUzNDgyODRmM2YxMzM2NmE2YTAzYWQyMmI4N2M2ZjU1ODRiZGVhZWE0OGM3MDMyNWQ2ZTMzYTQ3NWY1MDUxMTA2Mzg3NTE5MmE4N2VkYzM4ODA4OWI4NDM5NTM5MGMyYTNhZDg5YTIyNTk1ZGM0YTcxNWE0MmEyYzBlZmRlZjY3YjM1NGIzNGZjNzVjYTk4ZGY5MTNlNzU5ZTUxYzdmNjI1ZGRkNTk4YWMyMmQ0MjFkZWNiNTdiZWJkNTQyMjBlYzZkYWE1ZWNlNzY5ZDJlMDFiZTdiNmJlZTJmZjVhMGIwNmIzMmQ2ZGExZDdiYzA1N2UzYWJmYWFiMjQyYTNmN2U2NjQ2YTE1OWU0ZjUwNWU0NjYyOTgyYjEzZDBjYzFmYmE5MWQxMDMwOWE0MmRjMTA4N2NmMTBkMzZlMzFmMTcwNjE1YTBhY2I1MDhiZjY4M2UyZGUwMGM4NzY0MGQzMDRhOTQ3YmM0OTcxZmYzNjE5YzcyYWJkODNjN2IyY2JiMzQ2NGM0MDQwYzI2NjJiNTg1MDhiNzQ2ODBjZmE2ZGUwNmU4ZDIxZTNiZWM4NTExMTk5MzEyNjgwMDA5MDcxZjcwNmI3YjEzM2EyNDg3ZDU3NDVmZmFkZDVkYzBlYjJiNTUzZGY0NDA3ODdmMDExZGRhMzc3MTlmYTcxMzE1ZThiMjkxZWZkNzdkYTNiYTE0ZmI5OTVmMDM1NzFhM2RiNTIyYjYzYzYwYmU1NjE5OTQxNjk5YjM5MjIyYjU5ZDBmMjNlNWViMzdlYWQ0YjdmNzUwZWQ0YWJmNGRiODdjNzBkYTY2NWJlZjRkN2EyOTIxYjJjOTk4OTdmMjMyMWM5YmU2MDc1ZTc0NGM4MjI4NjM5YWI3MzZkYmViMmJlYWI0NDBjMTU2YTM5YTJlZmQyNjFkYjUwODU1ZTMwNGQ5Y2ZlYjk5MTQxYzYxMzU1ODEwOWYyMTQ3NGQyNzJhMmQ5MDZkNDg5MzkzNGFmZjhlMDhhNGZjZWU5NjRhNWNkMDA3MzJmZDMzYWYyOTg0OWM4ZGZjYTY1OTc5NDIxODU3MTg1Y2Y2MjlmODY4MDdhODU5NzNkMzQ0MGE2YmY4MTFhNThkMDQxMzg3MjQ5ODExZWMwNDdlNWU4YjM0M2IyMzg3ZDAxODFlMGQwYmQ0NjFlZjEwZTgxNjRhYWUzNTdkOWIyOWRjMGFjZTNlYzZkNzQzYWUzNDU0YWI5Zjg0MmEyOGQ1NzEwMjE3ZGZmZTUwMzQ0ZThkOTMyZjE4MDFiMGU4Zjk2NjE5OGVmMWM5Y2M2OTY5ZjM0NzM0YWE2YTYzYWVhYWI0MzM5Zjc1ZDM0ZmZhOGFjYjkzN2VkOWM3MzA5MmEzMDlhOWI4NGEyNTAxMWUzMTE0YzI2NWU0ZjYwMjMzN2ViNjk5YjVhMjJkNTcyYjAzZTRkYWQwM2IwNDYxYzAwZGI5Njc5YjcyZmM1YjQ5M2VmNDQ4NmY4NTUzNWQ4MTNhNTgwODAzODVhZmQ0ZThkODcxODI4MDM0MzM0YmZlNDQxZDE4OTg0ZTRkZmNkZTAyNDQwM2I1YWU2NmNjNTBhNDczMDFiNTdmOWEzMmY3NDBiZGM3ZmYxZAorU0lHOiBkZjI4ZTNlNjMwMzYwODY3ODY0YmM0MWU0M2ZkN2RkZWI1Mjg3NmRjZTliMjM0YTNmY2MzZDg1NDlkYjAxMTJlMTc2MzkwYTY4NWViZDQ4NDkzNmUyNWMwOGM4YTM4NzhhMzdiM2M0ZTIzOWFkMGEwZTUwMTk5MzdmZmJjZDQwNworCitUU1Q6IDg5NgorU0s6ICBkOGFhMmEwYWE1MTRmZDg0NWY3YWE2NmI4M2MwZWFiYjljMTYwMjNhYmMxNjk1NzczNDUwYjJiYjMzMjUyMmYyCitQSzogIGU0ZThkNmIyOTgyNDhjMTVmZTA4Zjg3YTNiYzYwODRiZjJkNjRkN2YxZTRiMmQ1MTU5OWU5ZmFkOWNjOTEwOTIKK01TRzogMDhkZWIzYjgzMmY1MmQ2NTU2Zjc4YzNmMGFiZTQ2ZjFlZmU0NWUzZDVkODhlN2Y4ZWRmODAzNjcwY2U0NjEyOTIxNzQ5ZTllY2U2M2ZkYzliZWYyYmE0ODM4MTJiYjYyMmJlNzQ0ZDQwNDA0ZmQ2ZTA5YzllMWNiN2NlMTlkZTgxYTlkYWRmNTU2MzUyZWU4OTgxMGM3NmE5YjEwNDdhYzYyYjE2ZWJiN2RhMjNkZGMyZDRhYjc2YTAyMDU2MWQwMmQ0MWI1OGI5NDk1M2EyM2ZhYWZkZGQ3ODFiN2RjYTdiN2ZiZWU3MDZlYzEwYTczMTI1YmY3NDQzNjA1NmJmM2I0ZjJhMDcwMWNmZWYwNWJlYmQzZGQ4ZWVmMzA2YzFhYzFiMDA5NTA4ODFmZjA1YWI1YzgyNDhhZDEwOTZhYzkxZDUyNmFlNTliYTA1ODNiMjdkYjdkMWUzOTBmNTdhNTg4OWUyNzk5YTRhMTUxOWIxNWQ5M2RiZjBiMjFkNDUwODczYzc2YmE1MjA0NjFlOGJiNWM4M2M5MDEyZWFjZDU1N2JlYTY0MDU4NmVmY2I4NjkwMDc2NDdkNDQ5ZjkxY2NkNTJhZmUzYTg5NDc3ZGU3YzJiNjQ3ZWNjOWJmOTY3ZmJmNTc2OWQ3NDg4OTQ0N2Q5NTIyZDllODA2OWMzNDk5YWY2YThhMTA5N2E5NWQzYmNjNWY4MzQzMzkzNDQ4NDMxNGNiMzA3NThiNTI1ZmU1M2U5MDcyMWRmNWNiZTAzZDk2ZjBkMGY5ODUyMWYwMWE1ZmJlNTdjZTg4MDRkYmQxOGY4ZjVlYWM4ZjdkYmI1OGM0MTc4OWE0NDQzM2Y4YThkMTI0NWQyYWRkYThjNzhkODgxYzY1ZWE2NjFhYjE3OGQ0ZmMyNjM0Y2Q2Y2I1MTRhYjZmMjU0M2U5MTEyMTgzZjNmZjczYTNmNDUwMTA2YjBlZThhMzQ3YTgwY2I4MjRhYzFmODAxNjRlM2JiNTEyMzY5OGRlMGU3NDczNTljYTM1YWNhYTNiYTBjOTQzYmVhY2Q3YTliZGY4ZmY3Mzk3OGU5ZmIwMDIwNDVlOGZlNTY0OGNjMGY5Y2ZhODhiMGQ4MTJlODFhYTYyZTBkOWM3M2ZlNjEzYWZkOTUzOWJjYjYxNTcyMWZiNDk3ZDYyZjY1YzgzYjg3YTZkMjE0M2Y5YjFjODgwZWM4NjcxYmQ0MmM4ZGU5NTdiMWE2OGVlNDkyMjZmZjcxN2NjYzZlNzRmMmVlZTQ5YzMwZGVhNTNmZWMzY2Q0ZDkwZjJjY2NkOGY5N2M1NWQ1Yzc1MjQ1NGJlMmJhN2I2ZmYyMDMwYmU2N2UwZGY1MGM1ZTg4Mzg0M2U3MTYxMmYyYjk1MzU5NTQzZTJiYTFiZjJlOThkZWJjZjU3NjhmMmJlNmZkNTA0ZDk3ODNjZTkyMWE4MWUwOTQxNmRiY2YyYmI2NTVhOTI0YjFlZjAxMTJkNjcxZjA4NGE1YjY5MGIwYjY0YThiOWJmNTAzMzNjMzU5ZmYzZmVmMTk5Njk0ZjliNjI5MjQyNGYwMDY2NmNlZjZkMDZkMTYxYTc5ZTNhMWI5Yjk2MjllZWE1MzUwNWY1ZTM2YWVhZGZlMGQ3NTk2NzJiMGZmZTQ5ODM5N2Q5MGE1NWQ5OTQ0YjMwNTQxYTdlMWJkYWM1MzAyMDY0MDEzN2RjMjUyYWVmNjIyZjM4MTlkMzZhYjQ5OGQ3NjNlNDMyN2JhODU4MGRkOWY3ZTVmNDdjMjRjYzk5Mjg3MzRiN2U2MjExMmM1N2UzZTBjZmVkZWNkY2JhY2NiMGM0NWFmODIxOTQ1NWVlNzIyM2M3MWU3ZTIwNDEwYzUyNDRlYjgyN2FmMmYzOTM1Y2U0NzU1NDQ0NzQ3YWE5NDVmNGMyNmRiM2EyOTg1MTllNzVmYzZiYWNlOTE1Mjk5NzJlODY5MWI2OTRkMzBhYThiNWVjNGMxYTAyOGQzYmQxMGJkMGM4YTQwOGZiN2Q5ZDcwMzQ5NTU1M2VjZWE1OThkMDYyMmRjYzc0ZGU0ODliYTcxOTVjZGFlOGQ1Y2ZmOTg1NTkyMTgzN2I1Mjg0MzNlZTU1YzBiNzA5MDg1N2EwYzI3ODRkOTMxMGI0ODI1YTc5OTNhZDljNmYxOGY4M2JjYTVjYzZhMjUwNDcxNjhhODM3NmIwNjJlM2E0OGVhOTBjYWQ4OGUzMzExODdjMmI2ZjI4MTQyNmY4MWY3ODgwNGE4OTVjNGVjMDZjMzQxZmU4NDZhZjQ1MjdlYTI2MDY5ZGNmNjFkODEzZmRkZjBmYzQzYzcwNzM1MGJmYjJmYzFjZmZjZWU3ZDdjY2Q3ZDc1ZjdhNDY1YTNkMTRkNTczMDJjMTQ2YWJhM2UKK1NJRzogMTQ2ZjY1ZDQzZTcxNTU0Mjg5NGI3OTAwYTJmOGNkNGIxN2QzODcwYTYxMDBlMzdkZTAwNWIwZGI1ZDgxNTEyNDZkZTRlZTM4NDJkM2ViY2EyMGE1ZGEyMmEzNjNhNzU3NWU3YTU1MTI4Mjk1ZjI3MjExNDg0YWY1N2NkNTMxMDkKKworVFNUOiA4OTcKK1NLOiAgZGU4ZjFjOTllN2Y4NTU2ZGYyMGI1OWI4NTA0Y2ZmN2M2YzUyNDFhOGFlZWIzMGI5MmVhYjk3YmY0ODFkMGZlOQorUEs6ICBlNDYzNzkxZDBmNTY3ZWU3M2FiYmY0N2RkNTcxNjdhNTM1NjEzYjA1Y2Q0OGQ5MmViYzdkMjRlNmViZmY5NTczCitNU0c6IDM4ZDkzZTVjOTgwMWRiOTAxNzk3ZWM3NWM2ZGRkYzY1YWU3OTgwZGUyMTBiZWQ0M2IzM2ViNDRjZGM2ZGM5OTMzZmI2YmVjNzQyMWRiMTBmMGE1OTMyMGI5ZTY0MmEyMWYxZGQyMzU2MDFmY2Q2YzUzYmU0YTg3N2Y0ZmVkM2ZhNGEwYWQ0ZGM2ZTliMzkxYmNmYTQzNDkwNjkyNWJhNDVlY2M1YjQzNWQ5YWI4Y2ZhZmMzOTRiZGNjYTliMDdkNTY2ODM5MzQ0NmUzNDAwZTkwMzk0MzVhMWRjNzhjYmMwODgwN2EzZmIyNGNhOGIxOWY2NGVhMDhiOGJmNmMyMGExOTViNTFmZjgwMTVmM2U3YzkxZDA4ZTRiYzYyNDE1NTk1YTVhODgyZmJhNjUxZGMzYTY3NTE4N2FmNjE4MjQ5NzQ3YjQ2ODBkMWQxNWEyMDJlYTlkZjQ4YjFjMjE0ZmQ0MDM0NjZmZDFhMjY1ZjJkZWZhZjhlZDVhNmJmMGViMDhkMTg2NGYyYTI4ZTk0NzIxNDNjNmZkMTAzYjZiMTA4YzBkMWQxMzYzYjk5ZjkyMDJkMTFmMDIwNTZjMjc5Y2NhMzE1ZGIxYWI2ZDMxMDE4NDU4ZjU3YmEzMzE2Y2QyNzM4ZTgwYzQ5MmQ4NTdjYjE3NDk5MjVlMzMxYzY1ODU4YjUwOTgzY2Q5ODM4Y2ZkMjE4OGE1ZThmMDViNDcxZmQzY2RkY2QzMGQ5NjkwMTE5NDAyMGYxMTVmYjQ2OWFiNTg0OTAwNmRmZmEyZDU0M2ExM2IzYjUwNmVkNjVjYzQ1NzUzMmI4YWEzZWUzMWQ5ZDhkOWU1Mjk4ZDdhYzcwN2FjMTViODI3YTU3OGM4MWQ0MzRmODRjYjFiNTYxMjBkNjY3YjJhZmU2ZDE1MzBhZmRkZmI5NjZkOTUzYmU3ZTMyZGYwN2RlMzg5ZTJkMDRiMjMyZDM1MTJjN2RiOTM1OGZjOTQ0ZDFiMTE4MDc4ZTY5OTllODkxYmJmYTRhNDMyOWY2NWQ4MDcxODhiNTk4NThjNDMxMjExYjI5NTc2ZjQ0OTYxMzhiN2MwYzEyOGY3YmVmNWY3OWIwZjQ0NmZjNmI0YTBlMjBiY2E0YzQwYTgzNTcxYTM2NjQ0YWJmZmFiZDQ5Y2I1ODVmZDA2NGM4ZTUwOWQ5YTBmY2ZmNDYyNjc2ZjBlYmNiNjFjZWM2MWU1MTJiZTZmMTgyYWJkNTllMDlmNjQyYWE2MTk2MzQ4NTM0ODJlY2U4Zjg5ODAwZjljNWJjZmI4NDE0MzFjYTA2OTFlZDhkODBlMGEyZmNiNzk3YTAzNjg5N2NmYjY1Mzc1ODZiMzFjMDBiNzk2NWVmZGRmZGE3Mjg2MTg0NTAyNjQ1OTE1N2Y3OWViYTFiY2FmNmNkNDFkNjE4YWViMWJkOGRhMWJlOThmMGNkYzdmMmUwOWI5MDNkZTQ5YzBjMWJlOTFkY2MxNzdiMjk4MDk2ODM2ZGNlYTRmNjAxZGQ4NjY5MTU1NTEyODMyNTQzOGJkOWNjYmZjMGU3Nzc5MjBhZThiYmQ1NzYzNGM2MTA0ZmU2OWEzYTcyMDEyYTIzNjBiNmU1NTI1NTBjZmZiNGUyZjBiNDFmZTE1NTM3ZWUwZTZmMzdlNzg4MGZiNGQxMmJlZjZjYWQyNjZjZTU4ZGY5ODE2YjM1OTYwY2QwYmY4NjUyODYyZWU3ODljY2MzMWE3ZWZjMjFhODFiZGE0NjE0NmIxMTFmY2ZkOTRmMDQ4NTZhYjYxYTU1N2IxZmY3YzhlNGVhNmQ5YzRiY2RkOTNiMTUxYWEwODQ2MWM1NjhkZWZiMmFlZmRmY2U5NjM5NGRjODIyZDRlZjZjYzRiOWEzZTZjMzMyMDM5ZjY1MzhhYTBkZjhkZTgxMjZkOTBjMzEyZmY0OTY4ODc0ODYxMTE1NjU1MzQzNDZhNzQ2MjYyNWQ2M2RmNjlmY2I1NzQxOTA2ZjE5ZTAwZmM4MDAzZjA4Yjk1OTg1YzM4Yjg2NzRhZjQyM2NhNTZkZTVmODgxYjU5YzQ2NjI0M2E3YWRiYWRiYTI5Y2FmNTdmYTc3NzEyMmU2MTgyM2I0ZTcwODE4MmFhZjM3MjA2ZDdkNWVkMDUxYzEyYTVjMGY2YjQzNzEwNDNmNTYyY2RjMDI5ZDVlMWJhOWIyYmY1ZmZiZjFmNWY1MjNkYjA2ZmVjYTQyN2RiN2EwODgxOWZmYjJkMDU4NTI0MmUyMGRhNThlMzIwYjE2YjE2ZTQ0OGQ4YmUwZWY3NDAyZDI0YTcxOTQyNTcxMzNiZGM5ODIzMTRkODNhZGJjZDEyZThhZjMxMzAzNDI2YzU5ZmZkODI2OWNlNGI5ODdjYTliNmYwZmZkYmI0ZDFkMTIKK1NJRzogMzBhYmM0ZTRlNGIzODg1ODFlNjY4YmQ0MDllZTE4YTZlZGU4MWExMzZjMjhhMjkyNGRmNWZjMDBkN2MyODBkOTc4NjJhZTNhNjdhOTM1Y2U0OTIzNjQxMzVlNjU5YWRiNWZiYWJlNjg5ODE2NTkxZjQ5YWM1MDIyYTM4N2NjMDkKKworVFNUOiA4OTgKK1NLOiAgMDczNmY4MDE3MjBhOTQ3YzVjMmYzMjU4Y2UwZDUxMWMzZTE3ZTk0ZTM3YjMwYWRmYTUyMDk1OTIxMTcxZDQwMAorUEs6ICA0ZjY5NDI1NTkyMGQwYzM4ZGU2ZTcyZTE2NWMzM2FlZTc2YjFjYmY2ZjQ4MzdhYTU5MDE0NzU2NjdhY2QyODI2CitNU0c6IDdmODdiNTFmNmVhZDJkNDQwMmEzYmQzYzM3NjlhMjY3YWM4ZTgyZjc3OWFkN2I5ODZkZWM4MmNiZmMxZWE1MTI5MTg4NDMyNmQ5MjI2OTY3Y2I2NmE5Njg3MzE4NGYwZTgzYjNhYjI1YTVhYjJmYTgwNWZlM2EwZTdiMTkwYTYyMmQ0NjFiNzgzMGEzZjY5N2M4MzFjMjllYTdjMGNkNGI2OGQ4ZTc3YWE2OTcxMWNmODY0ZGMxZDUzOTRmNDg0NWUyZmJiNTA3NjQwNGUwOWE4OGI3OWYwNTY3MDU1MWJjZTJlZjU0NjhiNzlkNTc4ODhiOTg1MmE0YmI0NzlhNGZkMGJlYjY4MWZkNTIzZmM1YmY0NDU4YWJiYzM4ZWNlNzJlMTA2ZTAwMjIyMDE1YTU3ZWJlYzU1YmY0NzUxM2UyNWMzYzQ1NTQ4NDNiZGFjYmNmZTlmMWI4ZDBhZTM1NGU0OGQwM2ZkZWJkZjIwZDY1NWI1MjY4ZDhiYmJmMzNiMTI4ODkxMGYwNDQ0ZmNkNTZjMGRhN2I4OTAzMzYyYjdlMzdhODY0NjU0Mjc3Y2ZmYmU2YzYwODU3ZjBiMzUxNGQyMmE0MGI5ZGQyZDNmZTVjYWVhNTUwN2EwZGUzMDUxYmIzYTQwMTVmYTBmZTRjNDYyYjk4ZmVmMjM1N2RjZjZiOTdkYzc1ZGVmMzgyZjkwMWY5NmY0YTA0YTNlZmM2MDI1NDIwMGEyYzRjZGM4YTU4YjI1ZDk0ZTMyOTU0ZWFmZjE1MTFhYzQ2ZTM2MDY2NjNiNjg3NWYxMzY0OTlkYTZhNzY5MDk3ODc5YTZlMDgzNGQ1NjRmYTdmZGI5OTU4MTE4M2VkMGM5ZDQ4ZmQxOTVkN2VjZDlmNGRkNDg2NTU2NWZkMTdhMDA4NzE4ZGNkNzZmNjhhNTRlNTE2YTJiNzMwZWQzZGJhNWMyY2Y0MDYzMGJiZmU3ZmEwM2JiN2NkZDk2NzY5NTQ5NWE3Yzg2ZTJlODRjYjAxN2VjNjk2MDE5MjQ2MzE1OTVhZmZhYThjZmQwNDhkMTQyNjdjNzNlNTRjZmE1MzkwNDdlNzE3NjkxZTM5OTczN2ZhNTBjYzQ4NDQ5NjEyNTdjOTNkNzI1M2QyMzIyNmI3Y2QwZDFiZDMxZjNmMGQyZDg5MmQwNzNkOGM1MDczYzYwMmY2MWEwNGQ2NDM3YzM5MDNlYjRhNjRhMDFmYmNjMGM3ZTE1OTIwMWNkYzRhYTQyZWYzYjFmZjljNzhmYzI3NWNmYjExYTA1ZmZlZDhmOWYyMmQ4NWJhOTI0ZDhkMzIyMzFjMjU0ZDg5OGRhN2YwNjc5YTY0Y2FiODQwMjY5MDZlOWU4NWY5NWVmZDhlZTJhMTcyNTYzM2Y0ZGUyYmE2N2Q5OWFhN2YwNTUwYWYxMzllOWY4YzUyOTM3ODY3MjdkODI2MzAyOTZkNWRhYTllODMwYWExYjNiNWIzMDJiOGI2NjJhYzgzMmU5MjEzMDE2YmE0OTNhMDNhMjhjYzNlOTU0MGQwZDY1YWNkZGJmZTEyNTJiNWMxNmE4NGE0NDVjZTc1NDE1YzZjZDhhYjE2ZmU1ZWVmMTE3MDk3ZDcxZWI1Njc2YjlhOTViMzU4ODJhN2MzNTA2YmM1ZDAyZjAzOTEwYTYzZDQ2ODQ2YjIxM2MzYzliYjJmYzM0ZTZjNjkwMTdkMjA2NWExYWQzY2UzZmQxNGFiMDAxNGY1ODRlNTdlYTlkOTAzZTQwYWNlYjIzMGE4NjkzZmEyZTYzNjQxYzI1NDM4ZmY3YTE2Mzg3NjA0Mzg4NDRjZGYwMDExODBmNWIxNzdiZTY5ZWRmN2VmNjZiMzkzMTI4MDUyMTRjYjE3NzA2Y2VmZTU0NWJlNWE3NzAxOWE1ZWM1MmJiZjc4ODUwZmEzZDk3ZGUyZDRkNzRhYTY4YjU4Y2E4MTJhMWIxNTZhMGM0MDAxMTI5ZjA2NzIzMmE2ZWM5MWE1ZWQ0MjcwZjJhNGM2ZWZlZWU3ODcwMDQ3NzBjODU5ZTQ1MGU4MzdlZmIwNGRjOTk4YmQyNzNjMjdhMDk4NTVlNGVjYTFhMjJhOWI4OGMxN2JkYmYyNTNhNzk3NjEwNzBhNzY4MTdhN2Y3NGZmM2YwN2ZiNzE4YmZmYTBiNGYzMjZmMjg0ZTYyZjgzNjgzMjQyN2JlODJmNDgzMzczNTE1YjliZjU5YWY0YTc2YTU3ZTJmNDBiOTEwMzRkZDU2OGVjMTRhYzEwZTIzMDliODdlMjkyMmY5Y2Q5ZmMxYTQ2YTQ3ZWQzYmM3ZTFiOWZlYjllZTA2NzA3M2ZhNWRjZTJhNjc1MzA1MjZkZTY3ZWUwZTUwOTY2M2M0NDQ2N2VlYjU5NDIwMTAzZWJjZGZmYTcwOQorU0lHOiBjMDNjMDMxNDg1MTI3OWVkY2RlOTcwYzIzZWZhMjM2ZjIzNWVkYTk2MGQyYzI3ZDNjYTk0NmY2NTBjMjAwYjRlYmEwNGJlNjY4ZmY2MmVhZmZhNmNlYTM1MWFiZGZjNTQ0MDFkY2NjZTNkYmE3ODAwNGFlYzk1ODFhMmNjZjQwZgorCitUU1Q6IDg5OQorU0s6ICBmYTc1NjUwNDkxMDQ3NDI4ZDM2M2I1ODIyMjIyMTIyZGZmYjVhOWZkZGM2MDNjMzNjOGE2MDg2MTgzNzVkY2YzCitQSzogIDk4Yzk2NDFmYTlkZmE4ZWExM2UwZDFjNzE2Yjg2NzllMjY0YmUxNWRkMmQ0YzA2YWI0M2NiZWU0NzkxNmVlMDEKK01TRzogZjU0ZTQxYjkzOWUzN2RmMTdjN2Q2MDQzZmRlZDE0YTkxNWQ5MzRlODY3YzM0NTI2OWZkYzAxNzdmNWJkMTBjNDM0OGYzMTllMGFiOWE2NGNjMGI3ZDRlMGM5MWNhOWFhZGFhYjJlZGNiYTU0NGYxNGVkMmNiNTM5Y2E4OTc1MDk3ZDg3OTI3MDk1YjRlYmQ0OTAzNDQzNDAwNjFlZDkzYzM4MTY3ZWRhYTA5NmEyMzBkYjU5NjI0YzY3ZmI5YTFlMWRkYWM0MDIxMzNmNGQ0N2NmYzExZTJmYWU2YjNmM2M1MDAxY2JhOWE4YWVkOTAwNzMxMDMyNDAyMjdlNzE2ZmY3MWJmNjhhNTkxYmEyY2VmZjJkMzFiODZlZjIxYWIwMTJlY2NkNDA5YWQ1YzI5ZDY1OWExYjM3YzRkODU1MDUzMDQxNDBmYjJjMzQzN2EyMDY4NjhiMTM1MmMxMDJiYmZhM2I5YTc2NTIyYTJiZmM1NDA2YjI1NzY5NmRlNzRlZTdkMzE1YzhlOTljYWE5NmJkODM4MDA2YzZkYTJhNDIzMzMxNWE4NTZhY2I4ZTgwYzMzMTY4YjMzMzU1MWQ5MWQwNzQwNTU3MzQxMzBiZDdkMTRjNTY4MTFlYmFiZjdkNWEyNTBlNjA3MjU5M2Q5ZjJmOGI5N2MxMmE3MDNjMmM0NzljYjBiMTViN2EyNzc1YzlkY2QyY2E0NjI0NjcyMzY4YTJlNjE0NTQ2N2YzYmU2NjE1ZjkzYjgxMjBhMGExMmRhMTU2MDY2M2EyNmE2MTczMTk2NmI0NGIyOTllYmZhZDJhOTVjNjIzNjBmMzljZTA1ZDk1NThlMzA1ZWUyM2E1MmZhNWNlMjBmNmJlNWUyNjJhZmYzYTg2NGQ1ZGRhYmUyM2ZmOTQzZjcxZDU5OTg0OTNkOTlmZTJhYzIzNzRiNDY0YTY5MTgzYzNiYzRmMWRkYjg4MzYxMTE0OWQ3ZGRiZjFlODM4MGI1NDQzMzVlMmI4OTM5NTA1NGM5ZjI1NThkZmM1NmVhOTNmZjE0ZDBmMTVkMmUwYmQ4OTM3YTU1NjM4N2RlOTZlNDE4ZDhiM2E3ZDY2NmZiMTkwMzY0YjJjMjE5MGQzYzI1ZjE3NTJkNTQ4M2RjYmI1OTYwMDY0ZjBjODdmY2Y4ZjMxM2QyODc4MWMxMTRhMTY5YjY5MGE4NzAxYzUwZDg5Yzc3MzI0NTMxYzBmODQ5ZGJhZDE2MzNkOTI1YWNkMDZjMTZhOWNlYTE5YTQzNGViYzQyYWViYjFmZGI5YjBiYWNjOTNjZWMzOTkxOTk0MzY2NGVhMWE5NTg0MDZmZjllNDkzNWM5MmNhN2MzOTcwOGY5Y2FiNzEwYTU4MzA5NmI0ZWQ5ZjQ4ZDllMDkwNjQ3MjQwZDc2ZWNjYmFiYTU5MWY1NWZlN2UzNmQ3MmMyMTcyN2FjYmEwZjgwMzA5NTRlNjJiYzU4MGI4YjY3MGM0NDU3YzM0MDNlMzY5YWMyMGU2NjBkNjYyZjdmNmE0MTQyMTNlYTQzZjdjMDEwNTAwOWMxZGU4MTdhZGY2ZmZkOWNjYTNiNDVhNjNhODIyMjgxYzZlMjc3MmZkN2I3ODA5NjAzMTg0YjQ4NzliMThjODg3OTAzZjBmYzhkOGUxZTJkYmY2ZTc3MmYwYjJkOWI4YTI5OTI3YWNjODE3MTRhMjI1NmFkOGQ3YjczMzA1MjdkN2RiZjhiZWZkODJmOGM5YmI0MDFjZjBhOTAyNDlhNjRjYTZmODgzM2RiMzFiZDAzYjllNzk0NmQwNmRkMDQzODNkN2MwODJkNzBhZWIzN2ZmODRjMmIwNTdkOTczYjg5NGI0YTAzZWM3YmYwMzFhZWE2NTZhMTkwODQ4ODg5NGE0YWRhM2ZkN2ZhZGY5MWVkZTk1NTBkMzg0MTVmODJhMDk0NTVjMGY0MzJmYjU1OTg3MTMyZjAwMDQyYWZkNjBlYTUxZDFmMWM2YzFhZmUwY2Y4N2MzNDZlMzFlNjNlMjZmNDliMTM3MTc3YjJkNDdhYjMwZjA3Y2VhMDcxOTMxMjc0Y2YwMTA4MzZkNjgzZmZmM2JlNzEzNGM3OGI4YmZkOGIxYjhmYzIwNDllMThjY2IxZTE4YTBhOTU4NWE3ZDhhMWUyNTQ5MjYwODY2OGM5NmQ2MmEwYWNhOGVmOTBlMDQ4ZDIwMzc4YzEwOGQwNmIwM2ZlM2VjNGFkYjI3NTI4YWUwOGY3ZGVkOTQ4Nzg5M2FlNjRjYTRiOTM5MjAyYWE0YzE3YWZlNzE4Y2RjYTQ5ZmY5NjE2ZDBjZGY4MzM0YjZhZWUyZDZkMjA5NDdjYTRiZDdkZjUzMWRkMWRhOTk1ODFmZjcyZWE1NmZlNjJjYWEyYzk1ZTM1ODcKK1NJRzogMWVmZmJmOTI5OWExYjkzNTRmZTFmMWRlYzE3NjY1OTVlYTc2N2FiOGU0ZGE5YmI1N2I0ZjY5YmNiZDhjYjNkODZmNzY4MzkyZjU5YjM5ZmFmYThhMjEwYTY1MDlmZTBkNjAwOGQ2MzU2MTExYWRmYjM3OTljMWQ1NTljMjYzMDkKKworVFNUOiA5MDAKK1NLOiAgZTFjMTI5NDZkMjIxYTE5NGYyMmYyNzYyYzBlNTFjYmUzZjk4YjkxNGE0N2QzZGM0MWExZjQ1YzU0MzcwNjM3YworUEs6ICAxMDQwODEzNmE2OGZjNTZjN2QzYjM2YjdmZWYxMjIwOTRkZTA4MTAzMTE4OWNjODRhNDg4MDZhYWY2Y2I5MTg1CitNU0c6IDg3MGY0Y2Q5N2NmYzBhYWZhZGE0MDA3MjMxMmZiNTRiY2NjMDc2Mjg3MTRlNDk2MmQ0YmVmNGVlYjVkZTQwYTE5YTI0NmI1YjdkNTJkNDg3YjdlNTJkNjU2ZjJjNjQwM2I5MTZkMDJlMDJhNmQyOTFjMWUxODI4ZGQ5NDVhNTgzYjQzODUyOGQxYzM5NzY1YTU3MjAzMWZmYTkxNmI2ODMyMWYzMmU2NjQ2ZjBkY2MxYzYwMjM1ZmZhYTMyMzVmNDg0YTVjNDk3OGZhM2U2YmYxNDMwMWQ1M2UxMmY0Y2M1MjExOGIxZjZmMDdmNTMzNmY1ZDBhOTM3ODliYjAxZDE2MmZiMzEyNmRjZDc1NmUwNjQyZTdlNjk4OTYzYzAzNDU5MTFhNWNmM2M5OTUzZjc3MzE5NDI2Y2VhMmNkZWRhM2VmZTk4OWVjYjYzY2I5ZWI4YjkyMGRlNzY2YzRmY2Y2MzM2ZTViYzQzNzFhMDY4MzcxZmVkOTVjOGMyYjYxZWU5YjdjM2UzODMxYzIwYmZmZTg3MDdjMGM5OGJlOTYxNTNjOGE4NzNkN2YyOGFmY2ExYmY3MTA4NWNlMGUzODk5ZWVmNTU5MWJkZDY2NmRjMmQwNzY0MTc3MmQ3NDVjNTE2NDRhMjYwODE1YjIwOGM0ZGQzMDVmMDVmZTQ2M2QwZDlkNWE5ZWVmZjk3NzlmNWIxZDQ0ZjI2MDgzMDc4NTY2ZDBlNWZmNTZiM2FmMGU2NGNjMzg3MDhhZjVhNjVmNjU0MzUyZGYxMDQzN2YxZGRmOTQ1YTBkYTFmNGRlZjZhNzFhMDYwZTBjNGFkZWNjYWFjZjg1ZTA5MGY3MDkwMzcwYWUyNGU1MjM4ZDc2OGEwOGZlNmI0YmI1ZWM0OTdhNjYwMzE5ODYwODQxNWM3YzY0OTAwNDhhYTM2NzM3YzA4NTAzMDA4YWVjZTBmNDk0MjE5ZGRmODliNzJlYTc3MTcxYzZkMzExNzA4OWViODg5MDdlOGMzM2ZiOWU3MGIwZGMyODFmNjY0YjVmOTY1YjVkMmFkYjEyNTA3MTBlZjIzNTIwMjVmYjI5MzM5NWFlMWQyM2VlM2I1OTJiNGM1ZjJkNTU1NjlhNTQ1ODY1NGNlM2ZjMjVkZDBlM2Y3ZTY3NTdhYTdiMzQ3YzFmZmQzYmE0ZDRmMmM0YjZkMzZhZmQ1OTg2M2EzMmE1OTRlNzQ1MzdlY2U5YjhiMWVjMjY5YmJjNGNiNTRkNzYyMzgyMTFmNjJhOThhNDZhNGFmNjYyZmE4MWViYTZmMzBmNTE0Yjg2NmI3OTQyYmMxNzNmNzIxMWE2YzAxNGRhMTRlNzQxMzI3YTU2ODYyM2QxNGI4ZjgzNWVmMWQ1ZDYyYjI1MjNjZmU2YTg1YmM2OWZhMDUyMDBkZWFjMTU2OGI5NDZhODE2Yjc1YzVkNzYwMzE3NGZkNGUyZjkxMDFhNzkwNjM3OTFiYzNkNTkyOTdjZGMxMGJkYWE2NjNhYmYzYzFiZTJmZGExN2U0ZTVjZTM5NGU5MGJkNzZiMWY5ZTA0MDVmNTY3NWI5OWQ2MzhhYmMyYzFiMmQ4YjUzYTZmZDNkYzgzNzU4NTVlYzU0Y2NiZGEyNGU2NzI1Mjc3MjNiMDdiYjU5OWRiNTRlMzg3OTMzOTFjZjA5ZWYzYjFmZDc2MTQ5OTAwNjViYmQ0YTE5ZThkM2QxMDQ4MjUzYmE0Yzk3MWMyZjk4ZDJiMzU5ZGY1MDkwODczMjNhYTY5MDUwMjlmNWNjNWUxYTBhYWYyZjdjMDEwOGRkYjFhNDBmNTYyYmU2NGU1N2U2OTVlZDIxZGM3ZGIxN2Q1MzM2NzdlZjEyZmNiYmUyOWYzYjIzN2JiNjM0NGIxMTA5YjMyYTk0NjJhYmMzYWQzYzA3MTBiMDRmMzhjNmY1OTUyZGIyNzVlNzdlMmYzN2U5NWQ1NTA5NmJiYWYzZTMwNWQ1ZDc0M2QzNjU5NWJmMDU2Nzg5MmMyMTBhYzdiYWU3MzcxZDE2NDU4NDc4NWRkODkwMTc0MTU5YjM5MzBhOWE2Y2UzYTE2NmRkYTIzODNlNmUyYWYyOGMxYmYzMTkyNDQ3ZTkwNTExZGNkODBlYmRmOWVlMmM5YmRlZGRlZWI2MTA1NTg2NDE1MzJkMDdjZDEzZGE2MTI1NDE1NGNjMGZkOWQ0ODFlM2IwYTIzN2FmMmVjMjYyNTZkNGFiMjE5ZmFmMTVhZDJiN2U4ZTU3YWI3MjZmZjI3MjMyMTZhNTc0NTg1ZTJhNjM5ZDk0OGMyYzRmNjllZWFhZDI4M2UzYTQ0ZmYyNjhlYWVmZDdlNjZiNzNlZGU0NzNhODM5N2M3NmI0OGQ1NmNiM2NjZGFiYzkxYTg5MjljZjQyOTk4MzUwZTAKK1NJRzogOGZkN2ZhNDAwYzAzMmZjZmJjNDAyOTQyZmM3ODYzNzUyNmJlOTdhYjgyZjIzN2JiMzkzZWEzOWUzNTczOGM2N2Q3NTQwOTU0M2E4YjNjMDU1ZjA4YmY2OTE5OWFmNjNiNjkxMWE0ODJmYjRmNjU4MDgwMmVjOWQyZGMzYzExMDYKKworVFNUOiA5MDEKK1NLOiAgNzYyZjA2Y2EwMWUzMTQ3MTVmOTJjOTBiYmU3MmEyNWJmMjYyMTJjODFlYjFkMWEwZGFlMmMzMTEzMGY3Y2RiYgorUEs6ICBmOTYyNmZmZDY5MjczMTkyNWU1YWFjZmExYmRlZDAxYWE4ZjczMGI3NzJkNWU0NmFkYmMzMTU1NjViOWJmMmM5CitNU0c6IDk0OTc0ODNhNGZiYTc4NDMzYjM4ZTlkZWI4OTE1Yzc1MGI2ZGEwZjc4YWY0YTY4YjYyZjlmYzAzOTFlMzM4ODczYjFkNjRiMWI3ZjA5ZjEyZjA1NmEzYzkxNjUzNDk4YWQ1NmUwNjliOGIxNjA4ODdlOGUzNzhhNzZkOGIzYzY2NzA4M2MwYTJiMmQyMzE3ZDNiODc0ODU3ZTU3ODYyZWYwY2I3MDQzNmE5MDI4ZjAxOTFjY2M2MTZlOWQ3YzliZDg2OTgwOGNmMDk0ODM1ZmY1MTg2NzdiM2ZiMDg5ZjRjOWQwNzdjYzc3NDI0MDViNDg2M2FjN2E1OTY0NWM5Y2Y1NDBkNTczOTlkYTZhZTlkMDdmZDE5ZmNhOTViYzhhODZkOGI4ZTI0ZTQ4NzMzZjMyMTU4ZmQxOWE4YTExMTFkMWRhMWY5YjU4MGEzOWMxMDQ4NDYxNmNmMmJjMGVjMjlmNjNmNzdjODUzNTYxNThlMTZkYTU5NGI1YTg5MGU1NWQwYjY0NTk5YjMwMjkzZTkwMGVkOTJhZDI2MTk2OWU3ZGY0YzRiMWQwYjYwMjRiZGNlYjY5MDY3ZWY0ODZjMjBmZGNkMjJhMTBkNWRhNDVmYmY5MDViYTFlOTM1Yzk2ZjUwYWZiNjM1NzFiY2ZmMzEzMDY4NGVkYTBiNTZlNjBiMjZjZjRjMGVmOTkzOGE5Mjc2OGZjODYzMWZlMzA4MjM2YjAxMmY5MmFmMjRhOGY2ZTZlY2JlNzY2MjliYmFmOGZmZTU0Y2RiZTg2NzFkZTJiYTYyNGE3YzBmNjE5M2JiYTQxMTA0MTI5MDJiYWMyOTkwOTIyYTllNWE4MTA1M2NmODc2YTRjODA1YTA0YzU2YTgxMzlkMzQxOWU0NTRhNjIyZDAzNDJiZjQyNmU5ODAyYzNkYzFiNDA4MGM3NTQ5MmFmZTlkN2IxNTQ1ZmUwODZkOTYzNTQxMzI0ZmY1MmE0OGM2YmZhZWEyNjY2OGIzZTAxZTUyMzZmZDQ1ZmU1NDU5NDUzNWMwYjIzZTI4N2ViZDE0MjhjOGJlMGFkMTQxNjAwZTkxY2I1MWUxZWE2NjI3MWE2NDIxZmI2ODllODhhMDc5MGE2NTFkYmQyMWVlMjA4OWIyNzQ2NjZmNjYwY2EwOWNlMmQ2MGUzOWUyZWU1ZjAzYjZlYjgyZDE5OTc2OTY2ZTc5OTAwYTgxMGY2ZDViNWMxYTU0OGU1MDY0ZjVjM2Q4YTlmMmRlZjAxNzlkZjk5ZDE0M2ZkZTY5YjA3MTJjMDkxYzI5ZTliMjVmNDBjYWZkNTdhMDI0NjU4ZDc3NzQwMzc2MTAzNDJmMzgwMGZkNTFmNDllNzlhNWIzZGVjYzExMmY1OGQwM2UzZDI5NTg3NTg1ODhiYzRiMWM2YTZjZGE3YmM1ZjViZTE4M2U0MTUxM2MxZjIzMGYzY2MzNjQzMDRiZjgyNDg0YjdjZjE5YTAwMmUxNTBmOThjNWU5N2M2MTY2ZWExNWI4NjM0MGI4YzVlYmU1YzFhMTgzZTU1ODhlNjZmNTU5MDUwODYzMTNmMzdhNDA5ZTg5YjQ3ZGIzMWFlOTc0NTNlZGY2OWZlZDdiZTA4MTEzMDcxZjM3NGIyNmVjNjA0M2YyYTBlOWNmOGJhZDgwMmFiYWQ2OWU2MTdlNzYyNDNiM2NjMDM0YjA5OWQ4NzI5ZWU0MDdhNTNlYjAzYmRjNjQxMGEwMzk1MDRiM2IxMmM4MTliNjQ1NDVkNDA1YzZhNGYwODQ5MjE5MzViZGZmNDEzMGFlNjI5ZDkwOTYyNmIwNjI2NzZlNTM4ZWFmZGZmYjFkNjIyOWMwODg5ZDNjZGRkMzM2NWRjM2Q2NTM2ZjcyNDhjNDkzMTdjYjUwYzU2ZmI1Nzg1NTU0MWQ2ZmVlYmFjODE2Yzk5MjhmYTY2MmQwYWU4MGEwZjM5ZTU3MGJiN2QyMjQxNmY5OGYzNzFiNjQyNDc5Njg5NTFhOGEyNDZmNzRiMzA2MTc0M2M5YWY3Njg0YmJiOTY2YWUwYmQ3OGE4MTA0OTNlYTRjY2Q3MTE3NDg3MWM4MmJiNjUyYjI3NDhlNWJjY2IwYWI2Mzg4YTUwZjA1M2EwNDgwODdmZDk3ZWIxNWMxYTIxYjFlZTE4MjVlNTRhYTEzMGQ2NjMxOGFhZjY2MWJiYjI0NzYzNTc3ZWIzN2QzMTBlMjE5YjBhOWJiYTAzNzVlYjljOWI0YWY4YzRiOTlhMzY5OWUwZDMyNjY3MzNiNmU0ZTljNTM0NDkwYTEzNDFjYjE5OTBjYTViMWM4NDdiYzgxMjYwMjZmZWE5MDNhMWY1NDlkNjVhZjhmZTAyYTkxNjNmZjhlYTI4MWU3MjI2MjQzZTJhMTUzYjkyMTg1MWRlMTBmNworU0lHOiBlODQyYjQ5ZTUzM2RiYzkyOTk4ZGMwNzhlNTk3OTNhMmMyZmE2MzZiZGZhZmRiNDg5MzRjOTNjZjM0Nzk3MTAyOTM4ZDEzN2FiN2VhZDFhMGY3MGU5NGE2N2Q1N2VmNmEwMmM5ZWM3N2Q3MWY3MGNjNTdmMTUzM2JlYzg3NzMwZQorCitUU1Q6IDkwMgorU0s6ICBjNWNjMGI5NTgxOGM0YmYzOGRhMWQ2NWYwMjE2MjdlOWU1N2QyNjJiMDJlYzZkOTE3YTdkNDZiMTFjN2ZlNDhhCitQSzogIDQ1N2RhNGVmMTQ1MTlkNTQxZWRmOTJjYWJlZDliMDRkOGEyZjJhZmQxNTEwYTkyZjAwOWJiNGU4NzU0ZjFlYmEKK01TRzogZDY2MDhiZjVhYzAwMGVjYWY5NWZjMDlmOWNiNzQ5OGM1MThhNmUwMjU1NTg2ZTYzMzc4NTNiMWQ3ZDlkN2RlNGRmZTEyNDVkNTkwMzFhMzE3ZDRlMmI2YTczYzRjM2Y5NWI1ODJlNzJhNjQyMDIyMTU4N2JhYzEyMGZiOGVkNzM0ODA3MGYyODYwZDg1ODY2YTA5ZmU3NTY3NDM0OTdmMjExOWJjMWJmZGY1NzNiZTM1ZDEwOTFiZTM3ZjE4YmNkYTY3NDFjOTBkNTY2Y2M5MjRiNzIxNjRiNzQ5YWY5YTZmNDBmNzFkM2VhNWQ4NzY0Y2RjODE3MTRiZDczOTVlNWY2Nzk5NzM2MzZlZmYxZGIxY2YwMDEyOTgzZjcxYTJmMmIxMmQ0NWEyOTRlNWEzODlmNGNkMjQ4M2ViMzlkYTBkZjI2YjczNmM3YWY2ZTQxZGQzNWE3OGU0NTI5MmMzOTRlMzQ2ODk1MzI4ODg3MjFmODYzYzU2ZGI5N2RhMWNkMTBhNjZhMjBhNjcwYjI3ZmU4Y2U1NTY4YTQyYjg5Mzc3OTBjN2JlMWFhNDIwZDIwM2Q3YTg4NWMxNzI5Y2Q2YjhlMTk3MTg5ZTQ3OWQ1NDJjYmNiOWI1MzY1NmYyYjlmNTM5YzMyNWMzNGFhNTk4ZmQ5MWU3ZGY3MGY5YTc0YWJlYzQ2NzY1NGIxYzlhM2QxNDQzOGU3YzA4MzYwNDBiNzkzODcxZWNiZTllNWY2NjgwY2NjY2Q1ZDQ2OTZhODdlMzdlODllYWIyOGI2YmQ2NzllOGZlMTYyN2JkYzlkMzczYjgyZjUyY2Q4YzQ5YmU5YmFjZGM2MzBhMzJmZDEyODM1MjU1YTU0MmZiN2IxMjM5Mzc3OWQ0NDk4YWEwNmEwZTdlMWE0OTc3OTM5ODE3ZWIyMDg4YWYxZTE5YmIwZTVhY2E4NTRjMTI1ZGM2MDNkODM1NzM2YTAzZDkzODA1MTUzMGM5YWIxYWEzYmM3NzliM2JhZTc0NTBlZjU3ZDFiM2ZjMDkzYTM3ZGJlOWQxYmQ2ZDA0MGYyZjhlZWJhNzdmN2ZhODhjMTQ5ZjA2NWM3YWNlMzMyNzdhYTk5NjljMjY2ZWE2ZDg1Y2FkNjJjZmFmNTUwOGU3MDMyNzE2YmU2ODRhMjI4NTY0MTNlMGU2NWU0MmI2ZTllNmQ4NjVhODczNjNjYmI2MmQ1YmJiNmEzNzMxZGRkYTBmYTZhZDAyOTNhZjk4OTNjMDlhOWU3NDMwOTBmMmNlZTJmNDQzNzczNmRkNDMzZTJhYzc0MjhiZGM4Yzc3Y2I5OTY0MzU1ZmE0NDE1Y2MzODMxZDhjN2NhNWFmOTNkNTE3NTJlNzE4YzYwNjZlY2ExNDI2YTg3YzI5ODA4MjgxYTg1YWM3ZTBiNDA0NGZmNmUyODBlMjgwMTRiOTM4M2QxOWM5ZDM4N2QyOWRjMTRkZTQzM2RhMjYwNzg0YTQ5NDRjYTc2YzJmZThhMDgwZDA5OTZkOWE2YzJhM2QzYTcwNzcyODBlZGNlZTAzODlhYThlNTM2NWQxZDliMzQ2ZWNhMDk0N2IwZmY1MjY1OTQzY2NmMDk5MzlhNGI0YThmOTg1ZjZhNWU3MjcyM2M3OTVkYTBiYzM2MGRjZTUwMWY2NzNhYjZlYTg0NDNmMTI5NDI3OTUyNDUzZWI3MmIzYThkMGQ5NzZjMjc4YzViZDFhOTg1M2M5MThlMGMyNDBjM2M3MzQ5MzI5NTNmZGI1MDM5ZmJiMDQ2ODc5MzdjOWZmMGFiNzRhMTZlYWUyMTJiYzZmMjBlNzAwYTc3YzA5MmQyM2QyZWZiNTgwZTBjMTlkNjVmMzA0MTI5YWI4ZTZjYzEyZTU4MDUyMjU3YmEwOTQ0OWYzMGQzZDk3NDM5MWFmZmY1NjMzZGVmMmY1YzRlYmQ1NzNhOWU0NDRiZjNhM2RkYWNlZGYwMmMwNWYzY2MyZTc1MDY2NGE4NGExZDI0YzVkMjhiNDk2NzBkZThhMmYyMDkwODM5NDgzY2EzODk1OTk5MWE3ZDM3MjdlMjFhMTVlODIwMTZjMTVhMDllZTcxZjRmNDNjMGE2MDhiNDg0ODVjOTkzNGEzODYxNDc5NGQ2MjkxZGFhMzljMDFjNDVkM2RlYmU1NzliNTgyM2JmMzQwNjQwNGI0YzgwZWU2ZmYzNDJiNDZiMzM0YjBiODgzYjQwYmZkMmY5YTUzNTk1YWI2MmZkMTM1MWViYzg4MzA4MzcwNDk3MjE4ZGZjOThjZTA4MTQwN2RhODEyYTQ2ZDY0OTdkN2FmOWVjNmQ4M2UxYzYwZWViNzEyZDg4OWRmYmVkMGM4MDVhYTExY2Y4MTdkZDhmMDQzOTZlZjg3MWEyNjExMmRjYjdjMGUxZDJlNjgKK1NJRzogM2JhMGFmOGFmMTI3YzQ1ODQ4MjYwOTBlY2RhZjQ4NWViZGYwN2I4MmJjNDk5YzlhMmJlZmNhMjhkNDkzNDQ5NzRhZGRiYzhkODBhNTI1NjBlMGYzZDczZmY1Y2NjYzcyYzc0YjViNDdhZDJlNmRlOTYxMmQxYTAwYWVjOTI3MDEKKworVFNUOiA5MDMKK1NLOiAgNjFmYTg2NzdlZWRhZGVkNjliMTY1YzhkMjc3Yzk3ODI0OTY2MzAyODMwMWRmNjE2M2UzOWIwNmFjMmY1NjI1ZgorUEs6ICA4NzMzOWViNTcyMzhkYjJlNGU2MGYzYzI4YTNmZDVmYjYxMWM2NWZkZGM4MWVlZDdjZjc3NzFkZjM0ZDkyMjY3CitNU0c6IDAyYzU4MWRlZTAzZjJjNjAzOTM1YWY1ZWNlZWNmYTY3NzEzNGEzZTBhZWE1NGZlY2FmNDI3MWZiNTI5NTFhMjdiNzY4NzdjY2Q0OWFiNDg2ZGZjMjI3Y2YzMWM5ZDk1N2NjOTczMDY1NzNmYzdmZTFkMzFiNmM3ZGYzZDc4MGYzYTA1Y2E2Mzk1NjU3YTk0MjQzNDJjOWM2YjcwMzEyN2UwMzhkZjA3OTIxNTRlMzBhNDk0NzYxMTJjYjkyZDBkNWEyZDIyZTg5NTc1MmE4NmVkZGRkOTEyZmRjODFiMWU2NGE3YmI3NTBmMDk5MTgyMTMyZWU0ODIzZmRlODQ1ODAyYTk0NDUzOWQ0MTJiMmE4MWExNWIwMDA3MWE5NTA1MDRjNWI1NWE3MWJkYjhjNWE1ODI2MzllODU1ZThiZTI0MWNkYTFiYTZiM2I0ZjY0NTU0ZDE3ODI0OTA0Y2IzMGNkN2VmZDlhYzA0OWUzOTBiYjc5ZjUzNTk4ZWYxZThmYzI3ZGQ3YmY1OTljOTAyOGM5ZWJmOTJmYzNiZTExZGYzMjk2MTJhMjI4ZTBmNTY4NDY4N2JmNDFmZjIwM2U5N2E3Njg2MTI2YTM5MzY2YmRjMjZkNTBiZTAyNWQ1MTg3YzZiYTA2NjZlMzc5YmU0YTgwYTllNjJlZmZjZDkxNmQ3Zjk4ZGU2NTFlMDBiOTdhZGY1ZDJkNTNkYWE3ZjhkNjk1YTI5MTU2MDc1NWM3NDQ0ODIzNjRjNGYxZmE0N2VjMGIxZGExNjFhYTM4OGY5NTk3OTg5YTk3NzI2ZDNlZDJjZWM4MmYxYTFiYmM0YWMwYmUwYTAwY2I0YThkYjFmYjdjMTRiYTA1ZDg5NjM0OGRjMDU1OWQyYTkwYmVhYzIwNDFkZDc3ZjgyZDZiMTJhZWIyMjQzY2EwZjQxOWE1N2QzY2E5YzdkMjVhMzBmZjBlOGJiMGQ5NDUxNTVkMWIzNmFkMTA3YjU1YmVhYTk1YjdkNWUzMjAwMzQwNzYyOWYxNTE1ZjhhNzA4OWUyNDg4ZDBkNzU0NGMyZjdjYzdjN2YwOTg1ZGE0Mjg0MGQ0MzY4ZmY0ZjBmYTRmYTI5OGUzYjcyMjkzMDNhYmE1MTRhZTk0ZTcwMjY1MzVhM2Y0MjZmZmJiNGUwMDFjZDUwZWQxMmYyMTRiM2FiZWY5NmUzMDE2MzVjOTg3YjEzM2ZjNWU2MTg0ZTdiNzU3MmJjM2Q5OWE0NTIzY2JkNWFmZTU5M2NlZGY0YzljZDAyZmYyZTM2MjM3ZTRlZTEyZWYxYTIyZDE2ZDdjZjRjMDcyZGNlZDkxY2RkMjZlZTE0NGNjMmJlZjQ5NTAwMjYzNDllOTQ0NDc4NDA4MWZlNGUwNDk4YmM3NWY3MmU2ODE4ZjQ1OWJiYTkwNDljNTYxMzE2YzlmNDk4ZTdiMWE5OTRiMGU5MzA1NWZlNzNlNDQ0Y2JkZjk2YWMzNWU5YzRlOTJlNmI0OWUzYmMwZTk5ZGUxNzE2ZGY4ZWFjYWViOGQyZmQ3NDg3MDA0NGNiMzljMGUzNjdhMWZlMzJhOWJiMjk3NDQxNjM2NGU3MzBkNTI0OGRmYjFkZjE2NGE4ZDU4Y2FhMTAwNWZkYzkxYmFjMmJjMDFjYzc3ZGVjYzE0ODkzZWY5NDZmYjNjODFiZTA4MzJjNzJmYmEzNzIwNjJmODM2MGY0ZDhlNmQ1Yjc0MWNmNzAzMmQ4ZDg5ZGUyZWRmNGM3MTRhMjlmNzVhYmQ4ZjVmZjQzZWNkZDRiN2EwNGQ3ZGIwODgyZDE2ZTc0NDczYTBmYjc5ZGI0NDRhNzhlYTQ0YWEyNjMxYjhjMGQ3YjAzMDBkNTVjYjZhYzQ4NWYyNGMwYWNjNjQ3NzQ3YzQzZGIzYjJhODY3N2JhZjY1NmZhNzM1YTU3NWYxODEzZjM2NjhhMmFjYTkxNzU3MTFiNTI1ZWI0OTZlOWVmOTcxMWQ3NWY1OTBjN2Q5ZWY5OWUwZjU5ZTg0ODNjYmY5ZjI4NGUzZjVhMzNlZTc3ODFlNjJiOGIwNTU1MTc3N2VmZTBmYmZkMTllNTRiNmJiZDE0Mjk0NGJjMjk1OWE4MmViZDI5NWQyM2QzNDQzYjZjZTY1OGMyZDU3OWE3NjM3YjU0OTUyMDQ5MTkwOGUzNDI4MmVjMjcxNjk3MmU2ZjAzNTM5Mjk1NDdlZjE1MzdhZWNjOTZiMmRmNjE2MTQ4NTk5YjA5ZDliODEzOTRhMTNmZTdkYjg2NzYwYjFlMmEwNjBlZmQ0ODRlODE4OTkzOWViZGY2ZjIxNjQwZDg5ZDhlNzM2ZGVlMDgyYWQ3MmEwMTg0YWRlZGQ4ZGYyMTQ3NGM5ZjUyNmJjZmRmN2U4NTY1ODE5NGJiNmQ5NDJlN2YzZmU5NmMyM2YKK1NJRzogYzA0ZWJkMTFjM2ViMDkzOTZmZThkNjgyNzk1MTBhOWVmZWUzOTFhYmVlNDA4MWYwZDI3NTY3NGEzMDQ3OTQ4MzVhYWQ3ZjNlMzQ1YmNmMGFmODAyN2Y5NzQ3N2U3OWU2NzkyYjhmMjk5ODQ2YWUyOGNiMTNiZDg4NzUzNzk5MGQKKworVFNUOiA5MDQKK1NLOiAgNzA0OGM2NTIxYWVmYWZhNGVhYzZkNmMzYTcwMmI5NTI1NDgwYTY2NDgyZTQ5Njk4OTY3NTdmMmNkMWFjN2Q1YgorUEs6ICBlZDkzMTEzYzE2NDNhNTNhYTA2NGNhYTYzMWNlYjZlMjBmNmQ2ZWMyZmM2YzA3MTFjYjhhMWZlNzMxMzlhZjkzCitNU0c6IDUzZjc0YzcyNGRiMTU3OGExYTI5NmE3Y2NhYzkwNGEyNTA0ZGQ5MDA1Mzg5YjRmOGQ0ZWE0YjYzMDcyOThmYzZkY2NlOThhNmJjMDcyODBkMjAzNjRlNDA1YTQ2N2U3MzY1Nzg5NjUyNjljODE0NjFkNjFmYzZiN2U0YmFkNjhkMmI2ZGQwMDA1ODUwMTA1ZjBhNjdiYmM2ZWUyMjNlYzE3NTRhZjRlM2I5YWZhNTA2MmQxYzE4NjEwNDhmMTg1YjEyOGYxYTVjMGZiMjVjMzkxOWI0ODMzZTI5ZTIwMmJjOTQxYTkwNWU2M2MyYzA1YjEwMTQ2NDdiZDdlZGU1YmU5Zjk5NjYxNTE4N2EzZDNiYjJjN2RjNGMyOGY3MDUzZGVmOWIyOGIyOWUyMzMxZjE2Mjk2ZGNlOGYxZWRlNDg0Y2FlYzk5NjcwMmJkOTkwMmU1MjY4NGM4MTJjODc0NDBmNjliZDE0MWM3ZTAwYzY5NDdkMWZjN2MzYmRjMGJjNTUwNmI2ZWE0NjJlNjVmOWU3NDNiNzJjMDA3ZGRjN2EzNzc0OTM3NzdkNGViMTI2MjBjYTZjMDE5YzhiZmM0YzI5ZWM4YWYzODJmYzNlYWM4NDEwMjFhNzRlNDY3NGJhM2U0M2U1ZDdiNDFlM2ZlZWIxN2RhMDBhN2NlNDU1YTFjZWM3MGIwYmU2ZTU2Zjg1ZmMzN2Y2NGNmMDczM2I3ZTMxMjQxZGU2NDFhOGE4ZTViOTE4OTdiYzE1OGZlOTNkMTAyYzAxZDFmNWUxNjZkNDA4MTY1ZmUzZmNiMTNkNTMwNDU5MGFiOGVmMGRjOGQ1YThjMWQ4YTkzZmNlYjg1NGZjMWZhMzZkMGNjNDgwY2Y4NTEyZDgwYmVlNjliMDY1MGE5NTdkYWVkMjgzY2Q3NjM4MTU1ZWQ3NzMwODZlODZhOGZmYjE5OGFjYzc0MjNiNWQxYTYwOWExNzVhNTZiOTRjOTZiNzMxODUxYjkzYTk0OTc3MTAxZTI1NWYxY2U5MmUyMzJhMDVlMmUzMzg3ZmNiNGRjMTNhMzFiZWU2ZWUyNTUwNzMyMmM3M2M5ODgzMDgwYTc0YzAwZjgwM2E5OThkZDUzMGE3OTEyNmJiMTQ0ZWQ1NTc0YzRiMjMxODBlMzRlMDk5MjgzYjRiYjFkMjg4MjJmY2UzNzE3MDQ2ZmYzMmVmOWUyY2RmOTY3ZTMxOGVhNzI2YTJhZWVjNTc4MDY2NDNhZDQ4MDFkM2UwZGE1MmExZDc3YmYwNDNmNWFlOWYzYWVhOWU0YmM0ZmE3OTVkMDg0MDEwODVjYTk0Y2ZjNGNlNzE5ZGFiYzdiMjM5MGQwM2QyOTRhNjViN2FmOWJjMzkwNzIyODViNzc3YjJmMTMzZGMxMWE3MGMwYTlmMDYwZTEwNDQxZjQwMjE2YWNiNjQxNjM3YTJlYWRmMWY3YjhkMjYyZmVjMWI0ZDBmMGY0ZmFhOTNmM2Y3MzJjYWMzODJkOGFjNDJlMTc4ZTIyNDQ5OTlkNzY0YTlkMGU5ODE3MTQ2ODZlYjQ5MjQ0OTdlNTZiNTAxNTdlOTkzOTAzMmM5Zjg4ZWI2NTdjZmRlNDRhZDM0NzE0YWY0YTUxMzI0ZTVlNzdkMGRlZWE5OWM5ZjI0NGQyZTA5ZWE0MjU4MjBhNzQ2ZDg4M2EwY2Y0YjcwNWMyOWRmOGMwMzc0NDgxNTRkYzA4YTRkNDMzNzQwNWZiODc2NTgyMzExNDM3MGIzN2VkODYwODZlYzVmOGJkNmM3MmFiZjEzZjUxODQzMDcxMGY1OTdiMDYxMDhmNjViMzBhNDgzNDk2ZTJlZDgxZGFiMTBmZWU5NDdmZTA0YjU0ODVmMmUzMDc0MDQ5ZDIyMjg0MjY2NjUxYWQxMGRkMDg2YWFhNWQ0NTJlMGQxYTYxMTI5ZDFlNzdjNjYzYzI2ZDA4ODk2MmI1NTQ1NjQ1YjdhMWE4NzEzZDUxMzI3YTdhMzU5YjEyZGFhZGI4NWEyY2Q0YjU0MTBkNWMyMDI2N2ZhNzY2YjhjNDJhODRkYzQyNjY0NTg4ODc5YjNlYWVmZDRjYzhkYzY5M2Y5OGFjMjA1NjA5ZTU3MDY2NWIwMWVhNDY1NWUzOTQyOWE3YTdlNTQyZWZiNGY3ODkwZGJmNGUzNGM2Y2ZmMDdlNGQzNWJkM2VlZWRmNWI0NjI4MGY0YTBkYTBjMmU3M2M5NGVhODFjZmVhZTdmOWJkMDRmZTJkNDU5NzY1MDBmN2RjYWNiMGRmMmE1ZGM3MzZhODIzNjcxZGI2NzliZTY2Y2IzM2MxNjJmZDJjNzRhZTcxZmJmNGQyYjA1YWYwNDJiM2E5NzdmNWI5NDRiOWZkYjZjMzQ0MjQ0MjFiY2Y0ZjYyMjM3Njg0MjhmYTE0MGZkNAorU0lHOiA3YzQ1NzAzZWQzOTQyZTQ0MDQxYzdmYTE4NThhYTVmMWRjMzgxZjQ5M2E0NTJkZmI1MjcwODAxNzg5OGY3MTBlMzExMThlMzMxZjAwYWE2NGNiNzM4ODM2NjgyYjdkMTc3ZTk3OTU1YzAwMzE5YWJkNzlhNDllMGZjZDE2ZmUwMAorCitUU1Q6IDkwNQorU0s6ICAzZTYzNzNiMjY1Yjk2Nzg5MDA3YWQyYTEwYzMwOWE1Njc2MzhmMjU1ODdkNzdlMjhiMDgyM2E0ZjE3OWFlNGZlCitQSzogIGEzMjM0ZTVkMTNiMDM0NzIxNjUwMzY0MDRmNmRlODBlNzAyODM5NTAwZjEzZDljOTg1YTA3N2Q0NWM2OWZmNDUKK01TRzogYjlkMDY4YmJjYWU3NzIyZjgyOGIwZjhjOThhNzM4ZTM2YTdkZjRjOTk3YzcyNGJhMjc1MzFhZjM0YTJmMTA2Yzc1MTNhNDRhNDYxYTlhYTQzMDliYzE1YzRlMGQ0Mjc1OTE5M2VhMWNkZWE5NTZiYjgxNTk4NWY1Nzg2NzE0NWU5ZTJjNzU4NWZjOGQ2MTAyN2U0N2QyZDczNWUyNDQ4YWYzNzgyOTA5NDA0ZWRlYWFjMGZkNzNmNjA0NWRjZGIwNGYwMzc3NzU4ZjAyMjA0YWFlM2E3MjIwMzExYzBmNDcyMzU4MjcxMGNjNDQwYzM2Yzk1ODdiNWM5ZWJjNDA2M2ZlYThjYTNmNDMxOTU4OTRmNzlhMzY1MDg3MTM3MjgyMzAyZGJmMmU3YTBkNDExYWI1OGI3MDI2Y2NkZTE5ODg2OWFhNzM0MzM0YzA1MjM4ZTI3NWUzYzNhYjIxNzA4MzQ5NTc2OWUyZmFkMzc0MDUxNDUyZDdmNWIxZGIwZTc4NTgzNmQ0YmQ1ZTI5NzhhM2U5OTFhZjBmZjcxNmY0Mzg4OWEwN2Y1ZGYyOTk2MDM2MjFjMzllMmNkZWUwODk5ODVkOWU2YmY3YjJmYmQwMjM3M2FlMWI1ZTliODhmNWI1NGEwNzZlNjc2ZDc3OTBiZmM4ZjU3ZGNjNTllZjUyODUwY2U5OTJhNzNiYTdiYzk5MWRlYjRkZGU1ZWIwYjIxNjcwYjFiM2Q0YjY0ZjM2Y2NhOGUzMDcwOTg1Njg0OTdkODkxNmY2YjVkMGU5ZTg5Zjk5Zjg2MDA2ZjM5YmQzYTgxMDc2OWM4Zjc4MDE3NzNjOTYzOGFiY2Y1ZTI3MTFiMTlkMTE2NzU5M2FjYmU4NWU0MTYxNDI4OTk3YTIxOTRkYzVlN2I3NjQwZjBkMmMxZWIyMDU1NTNiZTkxNjdmZmJjMjJiN2MyZTc2OThmM2FmYTEwNzU0Y2I0NGQ0YjFkNDViODM3MzAzYjE2NjkwNzM0MTVhMjI2MDZiNTBmMjFmODI2NWUxMzlmMjMwNWFjMGUwMTI3YWUwNTZjZThhYmVhYmEyMGUxZDI2OWEyYjJlODk5YzQ5NTQ3MjY4YTA2OTZhZTQ1MGRjMDI2N2Y3ZjYzYThlZGYwNzRjNDdkM2MyZGIxZGEzNjM5MzczNzMwNGU2ZGQ0ZmFjY2RiNmFiNTVlNWY4NTIwYzNkZmY1ZjZiZWFjMzBiYTg1Yjg2MDgyMzUxZTNkZWQ4NDAwYWE1N2Y2NTBjMGMzMzAzNmQ2NWIzOWI3ZDJmYjYxMTI4NjNkNTliNzI1NTgyNDJlOGIwNDVhZGRkMzU3ZGU2ZmQzN2E4ZjY2MTE3NjVjOWI1ZmYxOWNjNGRiN2UxMTdjNjVhMDA0NTg5MDhiMDI0NWQwNGY3OTA4ZmM3M2IxNjVkZmY2ZTRiZTRiNDIwMzJkOGNmZDdkNmY3NzcyYzFiZmU3MjFkNGJjZmUyZmM1Mjc5OThmMzRmYjQ0MThhMWZhZTFlNmMzNzY3YzRkMDc4MDYyMWY5MjNkYTFmMGEwZDNkMjE5YzAzNmFjZmQzNzA5ZGFkNGNmMjRkOTBiYzY5MWQ3MDBlNmE5YzgwY2NmZDEwYmRlOGU3OTFjMGZlYTgyODgwYzA3YmFhYWEzMTFlZWY3OTI0MDc4NGY2MjhhN2QyYTA5MTg0ZTAxNmY4MTAwOGU3NzQyOWE4NjU4YjE1M2U0NGU3OWE5OGFkMjQ4ZjdmZGEyM2I1OTBkNjQ2ZDdjMWQ4NDFmNDkyN2Q2ZThiYzczMjE0ZDEwYTdmM2MyOWM4ZjgzOWE4OTA4ZDIwYTc0ZTgyN2FmNDY3YWM1YWJmMGYxZDBlZDM5Y2RkZDk2OWRkZTllZWI0YTRiNzUyN2FiM2UyNDc1YTE5NWUyNDQ3NGE0ZTM2YjA5MDUyZTJkYWQ0YTVlYjQ2OTFlMjYzYjhjNjFiYmRlODc3NzIyMDdlMDExYzRjMWUxNDIzNWZiMjRlNGRhNDM4ODc1ZDE4NTMwZmVmOTAyNjE5ZGQ0ODVkNzdiNTQ1YWJiNTZiNjljNzU1YWZlNzU4NjA2OTcxYWI5N2RkM2FjZTFjMWEzNGEzMzc5NGM4MTU2ZGE3OTllODIyNGQ4ODVlMTg2OGY5Y2I0NjZkODAyYzgyN2NjM2UxZWNkMGFlNmUwYjAxZjhmNzkxYjEyMjA4ZmNjMGZlZDM4NWI3OTZlYjJmMjkwOGI1OGQzMGIzNzMzZjE0NzBmMmUyZWYxMmFkNDNmZWI3MmQwODE2ZGUzYzEzYThiNWE1MjNlMTRjZGY1ZmYzNzIwYmY4Nzc2OWNkZTc0OTVkMjI2YmYzODIzOGE4MjVmNzVhMDlmNmJiOWFmY2U1MTZhN2JjNzAxMTQzNzBiYmM0MGYxN2M3YmMKK1NJRzogZjUxZTBmODc4YTVhNzA5NjQ3ZTg1ZmVhODM5ZmQ1NjZlNmYzNWM4YTYxODVkMGM5ZWIxM2UwZDViOWU2ZThhYTk1YzMzM2E4ZjUwNjMyYTRkNjY1N2I1MThjZTRjZmRlNDBiOGY1YTA1YjJkOWY4NDQxZmNjOWQyZDY5MmQ1MDkKKworVFNUOiA5MDYKK1NLOiAgZjVlODU5N2VhYzBlYmZhOWQzODVkZTg1YTFmYmFhMzUxNDYzOTViMTM0NTdiNWIxNGQzNjcwZGFjYTY5MDVlNworUEs6ICBjZTkzZTY0MmMyZjE1MDg0YmM4M2JhZmRhYTE5Njc2M2RlMmEzYzUxM2IwZTQ0ZjY4ZGRiZGUzNzg1MTRjNDQxCitNU0c6IDI3MzM0MWYyMTlmZjVjZjM4MWM3N2IyZGQyMjZjNThmOGYzM2M0NTI3MDQ4Y2IwMDZhZmZlZjhjZWUxNTFlMzAwZWZlZjYyOWZlZDIxYjcwNDUxZjcyOTI5MjYyN2QxZjNmMWI1MjU3MzU5ZWU1YTY3MWNmNjJhZTU3MzI0OTQwZjJkMGIxNWFhYzc2ZmYzOTgyMjBjMDgwMjRlMjlhOGNmMzY1MDRlMTJhNGU5NjQzOGY0MmMzZGEwYzAwMDU0MWJjMTFmMDkxMzgxYjBiNzJiNThhOTIwODNmNDQ2ZWNhMTk5MTk5Njg3OGRlMzUwODFjYzRhYjkwOTU4Yzk2Y2Y1Yzk5Nzk2Y2JhNzk1MWVlMTg2ZjI2NTI3YWVkZTY5ZGIzMDRjZTI5NDFiYTE1Y2MwMGJhMmYxNDExZjIwOGRhZDQ1ZTg3YmNmNjM4NzkyZGUwYTY4NjI0YjY2NzI5N2MyN2EzNDNkYjRiYWYzNGEwMjI4ZWFmMGQxMDIyMDA5YjVkMDY4YjI1MzRkOTIwMzAyZTcxMzEwZmViZjBkZjFiYjAyYzJlZjBhZDFhZTE0OWRlYWRmOGMxODQzNzNjMGY3ZWI2YjI1Njk1YmU4MmQxMmM3MWI2YzgzMjY3ZDlhMjMzNjY3ZTc3YmMyMDU5ODNmOGI4ZDg3N2Q4NWFlYWQzZjYwZTgyMGZmY2IxN2FkZGRkOTJhNzcxMmJiZWIzNGVlNzE5NjZkYWZkOTkwN2QxOTNkZDlkNzI1YTMxYTYxM2QyOWUzMmJlNzIxMzI4MDg5MjZkOTQzNzQ3N2ZlZTI1ZWRhNjEwYWViMWRjZTEyZWEzMTZjNmFlYzY2ODllNTAxYzU1MTkyMzgyNWEzNGI0MmM0ZjA2NzViODZhYjI2YWRlZWEyZTYwZGFlNmM2ZDFjZGQwY2IzYzM0N2IxNjM4NDAzOWE4ZTNmZDYwODczODEzODdjYjRiYzcyZGRiNWYyNWIzNzQ4NTliMDJlNWJiMWJhMDZkM2NjNjllYzQ0Y2VjNGI5ODVjODQ3NmUzNTAzMmU5OWFiZjAwMWExZDQ0ZGRjNmUyODg5YzNjMmMzZWNhY2VkNjA5YjJiMjY4MGUwMGIxZWZhN2U5ZDI2ZDYyZjJiM2FiMzZmOTIxMDQ0NzkwYWJiZDQ5MzYwNzU2ZGNmZmNjZjIzMGY2NmRiYjcwMWFhMTY0ZGFkNjA2OWFhMmI4YjMzMDlmMmZlNDRkNWUwYjI1YmQ1NTY0MzFmMGRmNGMyZWE5N2FlNzllZDRhNTc1NzhkNjZmYzY5MzljNTc2MjhhOTBjYWM5N2FkZmE4NzAyYTRhMWM4OTY1YmExYTkwMjYyNTY3Mjg2NjY0MDAzMDAzNTMzY2M5MzE0Y2FmN2QzYjk4MmUwYTQzMmZmNWFhNGVkNTc0MTk4M2Q5YjU0MzIzYWM3ZTI5OWIyYjQ5NTZjMWEyYzE5MTU1N2IyN2Q4NmJlNzE0YjViNjhmY2IxZDQxZjc4Y2E1ZGRiNmI1M2IzZGZjOGU3ZDZiM2MzZGIwNTlhZjlmMmRkNzY1ZWYwNGI2ZDE2ZTY3MzdjNzI3YWExMWYzZGYzNzc0YTNmYzk2MTgyZTI4MmFjYzNkMjMzZWVhYmY4YzcyZDNmMjQ2YWUxODQ1MDUyODhmZWYzOWIzNjc2NmIxMGRkMWJmYmZiZmE3MGY5N2IzYzkwMTcyNmQxZTBkMGE4MzdkMTFmMDEyM2EzNGFiYWQxYTc5YWFiZTgwYjEyNWIxMjhlZTE2MGI1MTE4NDhmN2YwNGM0OWM4ZDVjMmYyMDQxZGE3ZDk1OTljMjliMWRhYzhjNjgwNzdlZmFjM2VjYTU4YmJjMTYzN2FhZGNlMjFjNzc0ZmVhNDJkMmJjZjRhMGI5ODkyMzA3ZTM2ZmEyNTBhY2VlNzk1YWQyYmZlY2ZiZjYwMzE5YjgxNjYzZTJhMjY1NzE5NDZmNzVhOGQ5NjlhZjE2YjNiNTdjM2VjM2U2NjE1OGFhZjQyY2NmNWU1OGI5MzdhYWVmNjEzMzE4NjA2NjAzMzE3ZTVhYTMxOGJlNzBmOGRhM2MwYzE2YmU2YzI5ZTNlYzlmZWY0ZTQ2ZThjYTI0MWQ5NDFkNTgwNDlhMDYzZDkwYWZjOTUzY2EzMmU4YTUwYTY0NzM2MzI1ODhhYzQxZWFlOTdmMjBjZTliNzQxZWQ0MWM5YTRhYTY1NTFmZDgyM2NlMGM4MTFhNWJiNWExNzFjMWVhNDIzOGEwMjQ2ODExZTQ2OWNmNDk4Yjc5NjIxYzMyM2ViYTc5ODUzNDRmZTExZTY3NDk5ZWRmNDk2NzQ5MWFhNzQ5ZjhmM2ZlMzk5NjFkNzY4OTJjOTNhYWMzYjE5ZmE0YjRmYzE3NGQ3ZDRkNGQ4YmQ2ZWU0NzU0NzUwMDgKK1NJRzogNTc2NTQzZmMyMWFiMGE3YzVmNjNiMWNmZjAxYmY4NDVkZjkxNzkyZTdhOTc1MGM1NTA4YjUxNjY1ZTdmODlmMTdjNmVjMzM1NWEwYWVkODdkYjhjNzdiZGIyNzFmYmVkYzcxNGZmYWRiNzhiNWUwZjk3ODExNjc3MWJhN2NmMGIKKworVFNUOiA5MDcKK1NLOiAgY2RhZGM1Yjg5Y2IyYjYzMDhhMDA2ZjJmNGU5NTVhOTFhYWYzYmE3MDE2NWYyZDQ0NGVmMWZmZWJiZGFhYTIyMQorUEs6ICAwNTQxNDE1ZmY1NDY3ZjI4Y2VhYzgzOWIxM2ExNzY2ZTcyYzk5ZTY1NDUyMDdkOWQ1ZDk2OTc0MTFlYjZiY2E3CitNU0c6IDkxMTcyNzAzNmRiMzA5ZDZlMmUzMzY5ZTRmMTdkOThkOTllYzA3MGMzMzI4M2JiMTI0NGVmZDYyZTc2YmQ3MGE2OWI5NzIzYmQyYjUyMDQ3MmI5OGFhMDY1OTI0MzY2ZGU3ODA5MDBiY2Q4Yjc3YjUwZjg3YzNjMzYxODcwMjRiYmM1OWNjZjQ0ODJjN2I0YWFkYjU2ZTJlNWVjYzAwMDNkOTg5ZDZhZmM2M2VjMTAyNDJlNTc0ODJmZTM5MjE1MjYxZDVmYzk1YTAxODVmOTVlOTU0MGM1NWY3NGQ2OTYwNDhiY2E3YWIxMTI2ODFhNTU1OGVhOTNjM2IxZjFjZDM2NDY1OWU5NDMzY2VlZWJlMDU0ZWU3MTNjNDc3NjBkN2FkMTMyYTdmM2Y4ZmUzZDUwNDFiODExYTI2YjY1ZWZiMWYzNDBlMTgxYTRlYzcyMGVhMTM2YjNhZjNkOWU1NDYxZGQyNDM3MDMzNmYxMGU2MzU0YzhjMTdhY2Y5OTk4NTQ0Y2VjMDg3M2VmYTY4N2NiMTMyYWVjZjcwYWViYmM1NjdiYTAzYzUzNjQ5OWVmOTZjYzg0MTJlN2FhYWQ1YmY5NjQyMmJlNDdjYjk0MTM2NDVkZjJjMTcwMzE5MjM0N2RjYmIxMjMxMjc0NTU5NzFhZTE1N2U5ZmEyZGJmZjg4NzQ1YTk2YzY1OGI4NjVlNDFmNTVhZWJmOTgzOTUwMDVkZGNiZDU5ODNlNmFlMDJjNGZiYjVlMTc5MTY3OTYzMjVmNzZlZGY1YjY0YWZhNGVjNWE3NDE4YWZlZDIzYTk3ZWZhZGU2OGI2YTViMzE0NWYwOGE1ZDNkYjljMjk4YTUxMmZhYmRhYzY4NTYyYjNmNTUzNzdmZjQ0YjAwYzFjMmYzZWZkMTgxMzJkYTcxZjk3MWE5NTNhOTMxOGM1NzUyMzM2MWExNjBmOWI3ZTNiNTFjNTI0ZTk1ZGQ1ZWY0NTY4ZWYxOGE4MDA3NzVlOWQyNmUwNzEzMTk0MmQyYmU0ZWYyMmMwY2JjMTNkZjAxYzY4YjFiY2QzYmNlOWJkNTFjNGNlZDY1MmFkYzQwMDdiZTQzYjM3YzY3YTVjNTVlZDQwMjllOGFkMTVkZWY4MzA1Yzk2ODYyMWFlZDRjZDRiZmUwNzlhNmY0ODg4NGQ4NTY4MDM5MmNhOTJiYTZlMTJmZWE2ZjRhMDU2Zjc5ZDY3YjE5YjA1ZjkwZDY4NGJlN2Q0NTcyNWY3OTY3YzZhNDY3YWY0M2I4NmE2YjFiOWQ5ZWVkM2E0MjQ4OTcxYzc2YTdhYzI5YzI5MmRmYmE0ZDc1YzVmN2JhNzA5YTM5MDU4ZTk2YWRmNmRiZDc2MGQzY2VmNDAyNGJmM2VkYzQ0MWVmYmYxMTQ3YTJjMTA4YmQ2ZjllYjQzOWMxYzVjNGQzYTZlYTRlYzNkOTJjZWYzODEzNjE4OGJlYzllMGI2YzA1MThkOGI3OWJhNTljNWRjYmEzOTNhZWRmZGZmYjBiNzBkNzc5YzJiOTc2NWNlNDQ1MmU3ZTNiMDhjNDQwMmIxYTYwODMyMDg0MGZiZTk2ZDFlYjg2NTZlYjFjMjBkOTU1MWRkZjUzM2I5ZjE1ZTRlYjU3ODM3NTZjNTNkZGQzYjE0ZDgwN2Y4MzhhYzk2ODBmODlmMWFkZmI3OGQ2OGNjYjA2NzMxYTkwYmVhYzVmMGQ3MDlkNWI4OGM3NTQzN2E2NjNjYjk2MmQzN2Y5NmI4ZTg5Mjg0NzdiNTYxMTIyODAxNWQzMzdmMDQ5ZThiNjJlNGRmZjhkMGJiNmNkYTI0YTVkZjkwODNlMzQ4YmVmMTI1ODVmNWY0YzRkM2JiM2M3ZTc4ZDU1MDE5NGE0NTI1MWEwODc5YTE2MjRiZjlkZDM1ZWI2NTVjMzkzOWZlYTg5MDlmNmRmMzk1YmViZDAyYjY4YTE3YTg5N2M5YWFkZGQ2ZTJlMjA0NjFlMzAzZjU3Y2RlYjAwYWUwZjIzZTYwYTk0YzE5Yzc3MWQ4YWE2MDUzM2I5M2NlZGMxYjc2ZDIyOTBhMDFiZjQzYjI3MjVmMTI1YmVmYTU3NTE1NGU5ODZjOWM2MjA1YTE1OTZjYmFhMmQxMzQ3MGMyMzQyMmYyZGY3YmVjZTRlNmViZDc1MmU5Mzg5YWU2MDg1N2I1Mjk2OWQyZGRlZmE5YzAzNGYxYmYzNWFlMzMxNjMwNGU5NDljODk5MDgyMGUyNmU2Y2ZmYWU0YjM4OGQxNTA1ZjkyMzcwNjI5N2Y4ZGI1NTY1Mzc5MTllYmJlMzA4NjAyM2YxMmY0ZGVkM2IxMWFjZjJhNmQ5NzNkZGQ4ZWIyN2IwN2M1ODBiZjQ0OGNhYTVhMmVhMTE2YzVlYWYzNmY3YTZiMTdhODViMzk1NWRjOGE0NGE2MjBkOAorU0lHOiBmZmVkZTcwMWViMTgyOWNlMjM2MWNkYTJjOGJiNjMzMzg1MzlkOGFkMmY2Njc3NTg1NTMxZTdiZjFkMzkyMjM4MjY3OWExYWU4NGZmZWI3NTNmYzk3NTRlNTBjMDE4NTJmOTU1ZTNmZDYwOWZmNjRiZjA1YmJlNzA3NWNkYmUwMAorCitUU1Q6IDkwOAorU0s6ICAyZGRkNzllNzYwNjRjMmU2YjMyMmFmYjBjNWM2ODVjZGJlYzYyODIxY2RmYzBjYjE0ZGI3ZDAxYmEzYmYyMWE1CitQSzogIGY1NWI0YWI2NGEyNTgyMjEyYjk2Y2NhYzA2NDBlMjcxOTQ0YTM0YTI4NmQwMzU4MzMwNDU4MTBlMzQxODI0YmIKK01TRzogYTU2Njc0YTFlMWYwOTc5NTI1MWFiZTU0YWI0M2MyOTgyMDhmZWZjOWJiOTE3NmZkYjIzZTFlOWY2MGYwMzI2NDc5MTU1NjdlYmRjYzJiODY5ZWRiNzA1NWY0YWJhNjdlY2ZlN2ZhMTllZGE0NWMwNjA0N2M3YTUxODQ4YmU5OTczMjUxZjg1ZmY3NmYxYzU5ZTM2NTQzODI4NThjOWJlMTIzZGI4YTk0OTBjNmM5YjMwOWI4MmQxZTJjYTZmNGEwN2QwMDEyMDI4M2M2YzI5NTY0NDk5NWE5NjYyODYxMmI4ZDY3OTE1NzM1MThlMjU1NmE2ODhhMDlmMTQ5YmM4NDZhNjhiZDBlZjc5Mjc5MDM1NzEwMDMxZWYwYThmZWQxZGQwYmYwMjYxMjVkYzY2NDhmODZmNjQzMDk5NDJlMThmMjNiMTJkMWRjNjhjNmYyNzcwY2E4YjU0ODViMzY5YjBjOTIwMDdhOTQ2MWMxMzlmY2JiNDExNzVmMzE2ZDQ0NjcwNjBhYjQzZDEyMjJmNTgwMjQwNGJmNjNjMmRmN2UwMDRiZGM0MDBjYTgwZmUwZDJjYjY4YTIxMGZiYzNmYzBiOTAzMjA5ZDU0NzZlN2E1NmJhZWZiOGZhZDdmMzI4YjcyZjMyNzExM2UxMzk0MTRiYTZmMzRlOTljMmVjY2RlMDQ0ZTdhM2FjNzBjNTgwY2QyNmM3NDUwMTkyY2E0YzgyM2M3YWM1ZWFlODc2YzBkMWM4Yzc2OGMxY2IwYjdlYTQxZmM5YjdkMjk0MzdiYmFkYWIxOGUwZjVlZDFkZWZlMGNmNmMwZWJhYTZiNmQ3NzdmNGRhZDlhYmRkYmZjMGZkNmFiNWVlZWE4MDNjZmEwMWMwYmQ0NmY2NWZlZmE0NjkwMWFiYmUwZDg5MTA0ZTNiYzRhZWUxZjA1OTljNjliNjdiYTU0NWFiOWI1NGY1ZGVlMzQwYWM2OWQ4ODI5OWU4NjgyMmFjZGRkZGNlNjAxMTIyMDEyZjk5Mjk5Nzc0YWFmMTdjOTY0ZWRlY2I5NWUxMjc3ZDQ2MmRlNjRlOTExNWE2MWFkOThhYTNkMjJlM2JhNmY4ZjFjZDY5YjZiNTJiODMzODI4MjNmMzBlOTY2YmRhZDFmZjVmYzE5OGFlMzJlOWI2ODA1NWQ0MzkyYmM3YzNkZjEwMTVmMTI4YWVlMWU0ZmEzZDQ5OTllMzI5ZjIyZjBmZjZhYTc3OGJhZTAyOTRhMWRmNzQzNmNiMTZhMmJmY2Q3NGI0NjNhYmU3Y2I0YmFjNTM2MmM4OWM5ZDFhMzc4YTJjYjg4NWNjM2IyNmFiNGJlODgxZWYxYWZjMTQ0MzBlMTBkMjY1MzljYTM1OGMzNjc2Mjg2YWQ4MWNlMWM5ZTc4NTkyYWY2NmYxODJiYjFmN2Y4NjJmZTc1NWJmZmI1YmU1YzVmMmI3MzFjMTMyZTIzODhhNzZhMWE3YjFjZGRmMDVhZWQyYWM5ZWM0MDg0NzUyNzE5NDJjY2FkZDMyZTQ5ZDg3OTFlZGY4YjhkZTExNzU1MWNlMjY0YTYwYjg0MTA1ZWFlODdlNjZmNmE0MDFkMTMyMmJiMjFhOThlOGFjZDI3NzQ5MzI1NGU1MDQwMDRmNzJjNzZlNzkwM2QyZmEzOGZhYjcxN2U5NGNlNjI3OTQ3YzRlYTMyNmJkMjU3NWMzNzMxMGYzYjRkODQzYjkwZmE3N2QzMmQ5OTUyMTk0MTUwYjYyZjg1MDE4N2E0ZmRmMzg0NjZkZmEwNjU2YzBhMmUwYjNmMDc0OTJhYzhlMzdlNWQwZGY5NWNjODlkZjMwODVhMjY5MjkxZGMyNTEyMjEwZDNmZTQ0MjQ4ZDdhYjk5NmJlMDk5YWY2NGMyMjc1NjY2NmY4ZGVhNTZjMDBiOTA2NzdkMTE4MjUwMGRkMjc0ZmQwNzY5MjUzODI2ZDY3N2FiMTZhNTU3YjA4YjNjNTIyNjU0OThkODVjNGNiMmI2MDBlZTA0ODFiN2MxYzQ3NmE5ZGFhOGI4OGM3MWZjMjFiNmY4OWJmZGZlY2U1OGRhOWU4ZDU2NTY1MmU0Mzk1YmRmNGM4MTFiNGY0ZjIyZDJiOTYxMzI2MWY4OGM2MDRjMjk3NGQzZTk3N2QxNDBkMDQ2ZTFiNjYyNWI3MDcxNjQwZDM1MmNiN2U3ZTY1ZDQ2YzYxMzQ0N2JlOGRjNWEyMDBhYTlhY2FiNDZhZmNjZmViYjZiMWMzMTk3MzI0NmMzNGZhYWY4ZDI2ZWE1ZTgzYmUxNTcxOGY4ZmRiMGNmYzQ0NGUyZWI2MGYzNjU5YjAyMDE2MWMyMjhlNmI5MjQwYjdhYzM5NGNhYjgxMmRlMTA1MTU3NjZmMjI0NzNlY2NhNTM1NTk0Y2U1MjhhNTdjZjVkYWIyZWIzMmFiODQKK1NJRzogYTRjMzk2ZTE5ZGQ0MmUwMzkxODRjZDI1MTE4OGZmYTI0NWYwMzY3YzY5YzAyZDEyNDc0ZTVjYTllNWM3NjhhN2VlM2EzZDQ3ZWIyMmQxYWM5ZTA0YjcwNGE3NGY0MTY5NDdmM2Y0OWEzMjQyNTk0ZTdiNjM5MGU4MmI2MGQ1MDUKKworVFNUOiA5MDkKK1NLOiAgM2FiYmRiMGJhMTFhYTEwNjNiZDI2YjAyYzExNjAzNzg2MjI4NWJhYmQyMTVkMjQwYmM5YzA5MjZmNGVjZWE4MQorUEs6ICBiOGZjNTk0MzhmOGNlOWUzNzg1YTQ3M2IyMmM4ODkyYzUxZWFjMjU2OGM2ODFkY2M3N2I2ZjBlMDc5OWM0ZTMzCitNU0c6IGRjY2Q1NWY5MjJjZDI3NGY2OTc1MDAwYWRjOGQ5ODYzMGM2ZDc1MmMxMjAyYTlkZDEyMTA0OGI5Mzk0NWFmMmIxMTEwOTY3Nzg4Zjk5ZWMwMjhlM2QzYjRjZjgyZmIwNzE3M2VhNDQwMWUzYmI0YjA3YjdiMGIyNGIwNTlhNzY2MzM5NTMyZDlkZjNlMzFiNzJjOTU4YzExOWQ4ZGZhMTVhNTA3YWY2YzVmN2U3OGZlMjcwZmE4MWI5ZGYwZjJlNGFmMjRiZDk5ZmJlYjE0ZTAwMzMwODRkN2ZiZjg0ZGRlZGZkNWNlNTY3NTFkMTU5MDg0NzVkZjhhZjAxM2QwOTExNzNjMTM4NmI5MTM5NDI2Y2M2MDgxZWExNjViOGNlNDgxOTRiOGUxOGE5YjkxYTQ2MzEzNDRmZTI5YzhlNzI4MThiNzFmYTE1YzkyOTJkMTNmZGY1ZjlkMThlMjliZDAyOTFiODEzOGRlNzM4ZmQzYTM2YzM1MjM5MDIyMzY4YjQ1NmYxZmFjYmE5MGEwZDgwZDZlMzExYzVmNmM2ZjA0Njc3ZTkyMzczYTVmYzQ3Mzg4OTRkYmVkMjA2YzMwZGEzNDFiM2IxOTZjOTQ3ODU4YTZkMmFkYzY4YWFjM2YyMGNmZGJlMDQ5Nzk2MWRhZTMzNDcwMjY2ZDE3ZWM3MTlhNTlmMDU4NmY4MmY5OWYxYzkwZWQ3MDA1YTIwNzIxOWE1NWVkYzc2MGY0ZWI4ZjI0MDI2NDdmNmY3Nzk3MWZmN2I2MzQzNTdiNmIyOWJiZDdlYTA1ZTJlMjU4NTRlOTljNjIwZjRiOGI2NDczOTAyMmZmMGIzMzhhZmVmMzVmYjZmNDFhNTM2MjlhNTE4ZWI5M2Q2NjAyMGZiMzUzYWVmOGRkMDcxZTA5YzkxNmQ0NzA0YWNkZjc3NmIzOGNhOWM1OWYyMTFmZjg4YzQzMGE1N2U4ZjE3MTM5MjNiM2YzMGNhODY5NzBhMTRhNTJkYjRiY2JlNjBkZjRiYzNjZmRmMjU0YmYxMGY4YWZhZTg3YmQ2MWIzNThmNDNjYzI5NmMwNDEyOTY0YzRlMDBmNzEyMTMzOTc0Njg1MTdjYjAxMzc5Y2I3MjljN2I5ZTM1YmQ1MGJkZDk4YzNkM2I3NjI5N2ExMzhiNTdjZWI2Yzc3NzQyZGYwODgxZDA3NjY4YzA4YTYzMGE0NGU2ZWQ3ZWIyMDZkNmE1NjQ0MDcxMDQzOGE1MTExNDI0YjYxYWFlZWNlNDBlOTAwZjVlM2M0NTdlOWQ2ZTMxYTc5ZWM1YjRiNDJiNjhlNjZlMTk5MzA5Mjg3Y2FkNjUzMzZmYzdmZTQzZjQzY2Q4Yzc3M2QzYzY1ODBkNzIxN2UyY2FiZWNkM2VhYmM0ODVjNGFjZjQ3NzE4YzM5YjAyYzc4NThmZjM0N2NlYzc1MzVlZGRjZDRmYzgxNWRmODE0NTY5YTg4YWU3MGYyNzMzYTY1MzlmMjA4Yzc5Y2Y0ZTdjNGY5ZWEyNDFhOTJlOTUxNTE3MTM2MTQxOGE0YzJlNTNjMDc2YWFhYmM0N2U0Yzk3MWJkMDRiMTAwYzI2MjgyMzA4ODU3ZTA2ZTdlNWZiYzQzNDI1NjRmYjNiMWVhNGExN2E5MjVlOTFlZTY5MTIyMzIxZDM5MmIyNDY5NjViODZiNTRmZDVjODNmYTVjNDc0MTYzZjk4YTlmNDQ3ZDg4Y2I1OWZlMmNkZjlmNTQxMmZjYmViM2VmZmFjODk3Njc5MWM2YTQ3YjY2OWEyZmM1NWFiZThlMDllNzQxNTdlZmNkMWNhNzhmYzEwZmE2ODcwMTBjNjgyNmM2ZTg5NmVmNWNkNzFkMGZlNGQxYmQwN2MxMGRhYzNiMDM0ODVlZGQyNTY5YTdlZWNmYmM0ZTVkMmVlMjM3OTg1OWUyNjUyNjdiZWRhYWQ2OWQ5M2I3YzFiZDE4ZjI3ZWE0MjQ4M2M3ZTQxMDBlZTA1YjI4MzAzOWJmYjk4OTFkMzdjNDY3ZWQ4M2I4OGM3OTRlYWI2YmFiOWRjNjc3ODkyNjUwZTJkODk2ZmJmZWMxYjFjZGI3MjFiZTMwYjBiOGU1MzU4NzA5ZTE2NWNiZTNhMTgyYzkzYmMwYTBjZWEyZjhjZjNhNjI1N2FkZjc2NDUzNDA0MTIwMjI0MWE1Mjc5YjY2OGU0MDEyNWZjMDk0NTg1YTNjNTg4YWJhODJiNjdjZDkxZDQ4M2U1NDMwMDQyODQyNjg2M2E0MjM2NDA0OWQ3YzQ1YTE2OTM4NWFhODliZjM3N2YwZDMyYjA3ODA5YjU4NzEzOTVlYzA1M2EyNTdkOTNlNDhiYmY0MDdlYjYwOTE0MDFlMjU2NTQ2ZTMxZjlmY2QyNGQyYzViMzMzY2Y2NTc4NTAwMmYwOGQ1NDhkYjI2YWQxZjMKK1NJRzogOTgxZjIwMDU1YTQ1NzUyNWFlZTU2MTYyNjRlNmFmNDJlOGIzODdjYjA4ZjhiNGE3M2Y5YmUwYjM2NmYxMDM1YmIzMGExYzg3NDg5NGNiZWNlMGE4NDZkODQ5YjdlY2M1NTY1ODVkMGQzZDM5NTY0NTgwN2ZmMmEzY2E1YTU5MGMKKworVFNUOiA5MTAKK1NLOiAgOGE0NGQ2YWZjNmM4ZWVlMWJjN2Q1ZjY5ZTQ5NWIwYjE4Y2E3YWVlMDA3ZGVhN2NmMGQxNzE0ZDc4NWE5ZjRlZAorUEs6ICBkNGYzNjZiMzM3N2ZhMzliMzZmOWFlMTRkYTQwNGUyMjQwNDkwZGJkOGQ3OTZiMWFiODcyZGZjYjgzYTU5NTQwCitNU0c6IGRlODAzMjY5NjY1MzZjZTk0OTk2YWYyZGU3YTA3NjA1Y2M0ZmNiOWU3NWVlMGE2N2ExZTIwOTMyMTExZGU5YjM1NmQ1YmVlYWU4NmNjNWY1NjRjMTBkNjZlM2RlOTVhNWI5OWU4NDQ5MjhlYThlNzc1ODZjZjNjMTBhZDM2MzNkZGVlYjFkOWRjZjNmOTRiNzBiZjFlZjYzZDIzOGRmMjA0ZDcwNWMwYjE3NGY4MzI4MjU0NWY1ZTQwNzVmOGQ2OWE0ODE3OWMyOWVhYmY1YzE3NDJlZjM5ZTFhZDk2M2JlYmJiNjZmY2U5NDkxYTk4NDY1MTIxNWMyZTc1MGU2ZWU4MzY1NzY2NDQwYTg0NDE5ZTUyZGNmNjcxZjFjNTJlYWEyYjk5MDJiY2NhNGIzN2NmZmRiYWM4ZTdlN2U2YjBhNWM4NzQ4ZWZiZjQ1MmRmNjE2M2Y0Y2EwN2I2MWY5YTA1ZWMyMGEyYmQ2MzMzODllNjcwYmI1NDU0YWNkNmYzYTA2MzM1YjVkYTllYzMyNjI2NGU5NjJjN2Q5ZDA2Y2U3ZTlmZjA0YTBhNWJiZGZhYTRjNDEwODY2YTU3MjAxMTY1MTQzOWYyZGJjZTVkZWU2Njc5MjRhYzQ5MzRkMjA1NDk2YmQxZDRkZjA4YmQwY2IzZmQyZGU3M2EyZWYzNDJmZjAwOTFlMTBlMTViM2I3NjBhNTc1ZGY5M2NmMWM5N2MwMWM1YWIxMWMwOTRiZjM0ODc4MjA2NzE4ZjZiMjg1YWE1Y2M1MTI3YmQ3Zjk4OGI4NGE5MDQ5NTMwNmZkOWU5OWQ4OTU1ZTY2OGQxYTNmZjEwZjY1YjdjNDc5ZmFjMjQxMTlhM2MxMDEyMmQ0ZDE4YTgwNWIyNDdkZjE2OGMwYTUxMDAxNjliNTU3MmQxNzAxMmQ3NTFhNDJlODMzNzYxMTVlMTE1NjFjMTYwYzE1ZWZhZDc2ZDIxZjdhYmI0MzAzNjY0NzUyMzg2MzFmODRjODhmODM4YjBhYzQwNGM5MTNkMmZhMTI0NTAyMzg0ODVjMzAyZmMyMDFmNDQxNTFjMTliY2JkYzExOTBjMTJkMTU0MDgzMWZiMTk1ODFjYjkzMTcyYjBkMmZmNWM2NWYzMWNhZmYyMGY4MTM4ODFmODRlNWVmOWQ1YzE2NWUwOTZkMjU0Y2FkZjg5NTI0OWFhYjhkNDQ5NmM5NDBhNDBmOTA3YmQ0MDkzNWE5NGY1ZTU1YjZkZDA1MTE1NDEwMGZlMzMxNzcwZWZmMmJhZDY1NDU2MTliOGEzM2VmNjQ2MmE1MGMwYjJjNGVkMmZiYTRlNGUzODNlYmYyOTMyZTYxOTI3NjZhNGFhZDFkNmUyYjY5MmQ5ZjJiZGMyMzM5M2U4YWFjZmJhMzIzYjUzNGY4NGVkZjJkY2VkN2M5NGQ1MTY4N2RhYTI3MTk4YTkxNDRiMzEyYjcxNmZlMTcwMTRhN2JlZDBjMTRhMjQzODczM2Q1NTVjNjU2NGM4YzFhM2Q5OTdlYmFlN2IzZGU4ODc3YWY1M2MxZDFhNTAyOTE1OGE4MGFhMGM4NzQ4OWZlZjI3MGNkZmZlMTBkMzRiMTVjMWE5NjkzYWUwMzkwMjQzZTMxNGNmYWMwNmVmNmVlZmViY2NmNDNkNDJlYWMyNGNlOTg3OTQyOWQyZmM3MjUzYjNlZDE3NTgyNWJjNGRhMDc2MmI0OTMzYTk4YWZkYjk0YjA2ZjRmY2QyYWQzNjExYWE5OTlkN2MxYzhkODUyZDAxZGQ5ZTUyNjQ4NDU1YTA0ZWIyMzMwYTc2ZmQ5NDJjNTMxZTUxNGI1ZWMwNzI4YTg5ZDM0Y2E1OTBlYTk5Yzg4ZmFhMjBkZmI3YmJmNjU2NTRhYTZjMjEyYmViOGFkNmJmN2M3NzczOTFjZDQ5YzM5Y2Y4YWI1MWI5NWI0MTllM2RmYzhkOTRhOTNhMWVmMDIyM2M2ZGU5MGJmOTYyMThkODA0NWJkNDk1MmEwZDgzNzJhNTU3OGM2YWFmYTc0YmE2NjJlMzE4OGU2YTZlNTY3ZTRkMmZlODIyN2QwNzQzOTgyYTQxZWJmYTBkMzEwZmU3OWZlZDI3MDQxNzkwZWZkNWFmYWMyMjQzZTFkMTUwYjE0NTAxNWQ5ZGVhYjBlZGVkNjM5NGFjMzZmYzVmYjIwMWY1MjA0ZmJkNDIyYTM2MDQyMzMwMTViYjBhNDhhOTIwZTJlNWUwZDRkZWVkNjcyMDI1ZjIzY2ZiYTkzODg5NTk3ZTUwNGM4ODg3YWRkNDZjZmVmNDAyNGFmYjhhMjZlZWI3ZGNkZGIyMzk3YjQ0YTE3OTYzNjczNDAwNDIxMzcwMjhjMzMwNzYyNjgxNmMyOTMxZTYxZWJiNmI2OWVkY2JjYjYxMmM5YjE4MWEyODUzMDFjZTQ2ZjgyZgorU0lHOiBlMDcyN2ViNzJlODRkMmI4MmNkYmQwYTZiZDJmNDk0OTYzMTZhYWU4MzUxZTQ5MDJhY2Q1ZTNjYzU3MzQ2ZTdlYmFmZGQ5MmE5MGRlZDc2ZmQwYzY2OTBkNjhiYjJmZWRkNjEzZTQ0ZmEyMjJiZTAxMjZkYTUyMGFjYzJjNDEwNQorCitUU1Q6IDkxMQorU0s6ICA4YTk3MmRkMGYxMTkwYzJiOWQ1NDhmNGJhNTgyNjRiYjA0ODI2Nzc1NTAyYThkNWMyYjIwOWVlODhkY2VhNWZiCitQSzogIDZkODAzNzVmM2NmMWFhYjI4MzU1MWRmNDQ1ZDE3ZTdkM2JhZjliY2JlY2JiYjI2NzA1MmUwMmZkYjY5MTQ0ZDMKK01TRzogMzBiMjg5NDg5MzlhYTI2MzQzN2U0NWM1YzAyNTRmYjIwZTYxN2VkMGYzZmE3ZGFjZTVhMGE4ZTBmZTNjMWZjNGFkYjI4MDliNjFjNWU4ZDkyY2QyZjNkZTkzYjE3M2JlNzA3YmFkYTk0MjQwYzYyNjJjMTYwZThjNzgyMTY1YmVlZjk5ZDBiZThlY2RhZDYzMTZkY2Q3MzRiYmI5MGE2NmNiZDViMWNiNGZkOGYyMjI2Y2VhOTQ4ZTRkZjc2YmJlMjUxZDQ3OGY1YzNmZTBkNmRlNGJlNTRmNjdmNTAyYjI4MDRmNjI4Yjc5YTU1MGZiMWFjNDgzYWQyYmExNjYzN2M0YmM5ZGE2N2ZiNGY5ODY1OWM0YzQzOTRkMTZiNmQxNGIzZTBiMGMxZTYyNWQ3MTBkY2MxYzExZGY1ZDM0MTQ3YjFlYzVhNDE3YjllMjFmOTA4Y2ZjNTIzZDQzZTNmMTgxYzcyMDljYzU2YmRiNWEyMTYyODY5NWVkMzIwZjhkNGMwN2ZkNmQ4NGFhMDM0MjZmMjE2NDRhYWVmZWVlYzMxMWM3NGU5NDk5OTM2MDQ3MzUwYTliZjViNzAzOTYyZTc3Y2U1NTEzMzY4MzVmYzMyY2NiZDJjOTBhZTUyZTI0ZDQ3ZDhkY2I5ODdhYmQxMjFkM2Y3NDZiNWRlMjMwZjI2NDY5NjAzZmIwYzRhOGY2Y2Q3OTczZDdkYTg4MmVkMWQ2ZTRkOWM1YTQ2ZWMyYzIxOTQwYWQzMzg5YTE4NjAxNGVlOTcyNzhlNTM1MDk4OGIxNWVjZDllYTc0NTZiM2NiNTVlNGQzMDkzZjEzYTg3NWI1MGQ2NTE2Mzc4ZWNhZjU4ZDc1MmM2Mzc0ZWQxNTYzODQwOTMxMWZjZDM3OWQxMjJjOGQ4YzU5Yjg2ZjRlOGRjNDZhZGI3MzBhOTMzODQ2ZTBiZDI0OGQzNjA4MjUyZDk3MGI1MDRjODEzYzZkZWE5ZmM4OGEzZGU2NDE5NTZkY2EyOTEyMDRkMzkwYjZiMzk5ODFmOGMwYTZiY2ZjMzFjYTA3NDQ0MjA2NjJhOWIzNWViM2ZjMjExZjgxMGEzZTgwNjI1MDBiMWU0OWJkZjg1NzY2NWZmMzJhOWJhNzYxOTRiYmI3N2ZiOWMxNTQxMjk2NDI0NGI5ODY1ZjczZGVkOWYyNWI0OWI0MjVhYTI1M2Q4MDdkOTgxODI5Mjc2M2E1MTNlYzgwNzQ3MzQ0ZmJhMGFjZmU1OTNjYzI2YjEzMzBiYjlhZGU2NmM0ZTg4Y2YxYmFlZDZkNmU3Yjc1MGU2YzcyMzlkN2JjYmZhM2ZiZTQ1NDA1YTYzYjk2ZDUwMzRjYzBjMDdmZmMzYjUwODU4MDgxZDE5NTVlMmQyZmU1YmU1ZmRhN2E4OTk2OTQzNzY4YjA1NTE3MGI3ZmQ1MmYwYTMyMDk3ZmUxYjdhOTRmMWJmODc5YTBjYmFiZTEwYWM5YTdjYzFmOWY1NTA2OGM0OGUzY2NjMDY1MTM2NDMxMDE4ZDM4ZDIwMTA5ZGM5NWQ5OWNjMmJiZTdjNjI3YWIxYThhYTVmNDMxNjEzYjc5MGMyZTY1MjZjZjA0ZmRjOWU1NWY1MWMwNTVmM2MyMDQ1YTY3NWUzYTFlNTRiYTQwOWY3YWVmYTdlNGFhMDdhMmJiZDVlNGFiMTYzMjFhOWYwOTk2OTQzOTFmZGE2OGE3NDU4MWUyZjFmMTFkZDlhNmQ1MjRiMWI4MzI2MGRiNTdiNzJlZjI5YzI4YzhkYjVjMzdmZDE4NWI3YzJkODQ1NTA5MDY1M2FmMzMyZGJjODJiZmIwZGI1ZGNjYWJmYjZiMjhjYWEzNTA1MjVjYjU0Y2M4NGU1NTNlMWNmMzk1NGI2MTIzOTNlNzk5M2ZmN2U4YmY1ZWNlM2YxNDUwOTRkZDdhMjdjYjQ3ZjIyNzQ3NmYyODkyMzUyNTFmNzcyYjNiYTc3NmJiNzczYWYwY2M1Zjc4NmEzZmI5ZTkzMWE1MzBjZmJkODkxY2I1YTVkZmUyNTE2OWVmOTMzY2M4MmM5MDgwZjMyMzk2MWExMjAxNThlNGJiZDcxMTM0ZWYxZjkwMTA4YjgxNWMyODlkNGU5YTk1ODllYzY0YzA1ZmJiNDJhMjFiMjNkMTZlMmE2NDY3OGFlY2ZhYjY1Y2Q5YTgwNmM1OTgxMDNkNDFmNzAwOTc3NjMxNzgzMWZlZGRkMWM5MDAyZDRhOTIyMDRmOTdiYTk0OTBjNjE0Njk4MDMwNzIxMDI1MjRiOWRmNTE5MDA1Zjk4YWY1NGQ2MGNhNWJhNjBiNTViMDk2YTRhYzJiMTZlYjljYzgxOTczYzMxMzVkM2ZiNjg3M2RkOTY1MzgwMGEyMmJiNWQwZDYxMTdjYTVkOTE2NTUzYmUzOWM5YTNiNTExZWIzZGI3MzAKK1NJRzogYmQ0NWIzYzA0NTg1MGViZWY3YjgwZGQxZGVhYjQ4MDM3YjEzNDZjNzFkZWFmMWU1OGYyYTdiMTYyNjc0Zjk0ZDFlZjNkNDIzOTAzNzMzMGJkNjMzNWZlNGYwMTQ5MjUwOTAxZjAwYThlNDZiZTVmYTBhYWVjNjlkZTA2ZDczMDQKKworVFNUOiA5MTIKK1NLOiAgMTIzODBjNDVhNzlhZGUwZjQ4M2M4ODFhYWEzNzMwNDM4YjA4MzU5MGY0MDRkYzllNjAxZjc2MTVmMzc1YTYyOAorUEs6ICBkNjZmYzU5YWU5MTdmNzZkMjRjZThhYjhlZTAzZmJjYjcxNWQ1ZWVhNGIwODM5MmI1OTFlNjQ4NTkxYzczYzg5CitNU0c6IDY4NDUyM2MyZTdmYThiNGJkNzU0OGM0YmFjYWE4Njc4YTMzMGRiYmI5NjA2MzI5NDAxNjZiMmNjOWFmYzE1MzVjODBjMTEyYzhkYzRhZGE3NjI5MjMzZmU5MDkwNTUyMzdkNTEzZTI5MmFmMTVhZDc2OTJmMTE1YWEwOTJkYTY1NzUzMmY1MTg5OWMzZjdmNWQ5ZDQwN2VkNWMxNjNlYjM5NTA0ODBhNDEyMmEwOTkyOTgxZjA3N2JjODY3ZjkwNjA3NTQwN2JhOTg0OWM0ZWEwNDczY2U1NDBhNzk2NzQ0ZWZhMzg2MDM3OGUxYjg5MzQzZTU4M2QwODA3ZTVhNjdjNGQ1YmQ3Y2U2NDEyOWZlOTAyYjhjZmFiZDJjMjFmYTNkMmExMGU5YmY5ZWE1ZTU0NzNhZTI1MGM5MTYwNTA5OTcyNjc4ZjlhNzQwZTZjYWRiM2I1MmY1MDJmYTYxNmNmZmFlMWRlZjg5M2Q1NGU0MWU1NGQzMjY0NjRjOWY0MzVjNjM1MDVmYjE1ZTNlZWFmNTAyMWM2NWRjZDAxMGY4NDBhYWIzMTdjODYwNWRmYjFhMGM4YTNkNTU0OTg2MWI2OWFmMmM5M2Q4NmM5ODFkZjNhNTFjNWJmNTc4NWMyZjg1MjYxMGU0NGZhNGZmMWM3MTYxMTUyZTU2MTgzODQ3NDRmZTgzYmFiZjBiY2I3NTYxNzg5YTAyMzEyNWY2MjQyYTE4M2NhYzk1NDljOTMyNzMzYTg2OGFhMTgyNjU2ZTJiYTBhOGMwYmUxMDY5OTZhODVjZWJmMWJkYWQxMjNiOTgyYjRlMDU1NTEwODc5NDgyMDIxZGFlYTlkOGYyNmM1ODhlNmNkMTAxMjZjYjMxOTY4ODAzNTZiZWU4ZjI5OGJjYTMwNmVjNTY5OWM3NTc2Yjc2NTA4N2MyNTNhNjAyMTQwMTBjNmVkNzBkODcxY2ZjODczODAxOGEwZWRiNTdmMTA2YjQyMThkODU1ZWFiMmM5MWYzOWY4NThiM2YyNTkwNTYzMWEwZWVlMjk4NTZmZDM0ZjdiOGM5YmE1MWMxYzRjNmE3MzVkNmM3YTEzZDIyMGQ3YTU2NmMzZjUwNmM3MmJjNzQxN2FiMzdmMGQ2ZDc5NmZmYzcxZGY5ZGM3YzZlMTM3ZGE1NmI3YTNlMTBjZjBiMWFiYjNmZmI3MGJjNjYyOTNiNWQ3NWI0MDVlZDhiZWMwZDZmY2QwNjkyNWMzODExNjhhYzE4OGQwYjhhMWFmMDgzOWY1YmRlODQzYjY5OTFlNWE1ZDZjZDY2ZmU2YjBmZGU4NjdjMDg2ZWQ0Mzg3NjkxOWExYjcyMzNkOGQ3ZTFkMjc0MmY2MWM3N2Q4ZTU5OTE2ODljODMyODY3NjY1NWI3NmEzNzUwNTYwZTc1ZDFjN2U4NWUzYzAwODUwNTkzMzEwOTRiYmE1NzEwMDMyY2Y2NzlhNTI1Yzc4YjMxNzAwZTZkOTFmNzUyOTRjNDIyNDg5Mjk3ZTE3MzU5NDNlNDE3ZmNkMzU1ODA1ODJmZGQwMjM5YjUxMTQ2NTMwY2MwOWQ4M2IyOGYwYTFkNjQyMjIwZGZiOTliYWQ2MmYzOTU0MTAzNTA4MWQ2NWQ3NzhkZGYzMjM5YmEwZTZmYTk5MTRiMTdiMzk3YTUzNGNiOGZkM2I0ZmY0MmE4ZDhjOGVlNjYxNTNmYmIxZmYwZmE1NGY3YmQwMzI3ODUxNmU2MzQxYWY4MGZjZDFmY2VlNzBjMzU5ZDIwNTM2OGFjNDkwZDc1YTM1NDUxMmRhNDZiYTc2MzRjMTViMjg0YjI0NDc3ODA4ZjE3NjMzMzYwYTRiNDlmYjNiY2FhODQxODQxY2Y5MjQxN2ViMjRjZTQ4MmQ1YTI0YmZkMmRhYzM3MjIzMWRhNTM5YTA1NDIwMDAyZmY3YTIwYzQ3NjA5N2RhMDZmNTlmMDMzMTRlNjA1OWZhZDg4YzUwYzNiYWFjMDNjZWZhN2NkODIxMWQyNDYxYjE2NjBlYTZiY2Y0NzY4MzhjOTFhMTAwNzRlYjRiNDBlNmU5NzRhOTQ1YTY3ZjZlZTY5MDQyMzFlZjA0MTg4ZjFlYWQ1YmFmMzU2OTRlZmUzMDFlZGM3ZTg2NmRhMjNiNWE2YzU4ZjAxYjJhNTJjZjNhYjgwNWVkYzVjMTM2ODYyNmI5NWI5NGViNDY0NWI2OTNlYzg4MGYyYjgxMTdhNjkzYWZiZGNkMjQ4MjQzMTg5MGY0MTBiYzU4MDUzMGZlZjM3NTg3OWMyZTQ2MDQ5Y2E4OTFhMmMzZWNkNjA0M2FlODBkOGFmMzQ2NjM0Njc0YzZkZmU5MDU5OTdkZTVkMDVkNjIwMDllZWVkMjc3NTAyZmI1YTVhMzE1NWVlZWViNjczNDhiNjBkODlhMzRhNzgxMjYzOWY1NDFmZmUKK1NJRzogMDJiMjUxNzRhM2RkNTIxOWVkNDhiMmM5NGNhMjEyYjYzYTZhM2EyNTk3NzAzYzA3YjdmMGM5NjVjM2M2YWMyZWI0NTBlZmUzODcxNmEyYTI4YjNmODk4NDZiMDZlYmRjYTRiZDA5YWE1ODFmMjRlODRkODBmYzEwYWMxYTAwMGEKKworVFNUOiA5MTMKK1NLOiAgZDFiMzQzMGQ0ZTYzYWFiZmE5ZWY5NmJjYmFmMWZhNmE5ZWI1MjE5ZGQ0NGRmM2IxYTYxNTYzZGZmZTFjY2IyOAorUEs6ICBjMjhhMDUxOTUyNDUyOTBlY2QzODUzNTU4NWNlNTFmM2MyMzVjNWQ2NTBjOGM1N2MyZjc5YmIwYWMwZTgwODM0CitNU0c6IDA3NmMwYzg3NjJlNGJjMDAzYzM2MGExMmExOTU5ODA1MDU1MWQxNmI0YjhkYTBmYjljNGFmY2M4MWFkYmU2MTk5NWYyNWNiYzI4ZGNhNDIwYmZhOTQ2MTA1NGQzZWUwMGFkNzgxODNlN2YyNmRmNjg5OGFmOWE0ZDIyNWZjYWI2N2MwNDJlOWExMzUyNWQxZjc1ZmYwZTNkOGRhODA4OTZiNzI4ZjNlMmRiNjU5NDRhZTA3MTdkNzc1OTkwYjU5ZTViNzA0MzRiZDRiM2VlNDUyZjEwYWMwNjEwNTcwYjM4MjIwODMyOTY4ZjU0NGQzZTRkMTE5YjFkNGI1MDE1YzZjZGY0Y2YyMjBiNTZiNWMwY2NkOGUzOThkNWU0YTU4ZGEzYjBlMmIyNzBhNWQzOWI4MmFiYjdmOWQyN2E0MTkwMTg1NTBiNjIwMGFlNTFjODQ4ODJmMDg2YWU3ZWE1MzUxNjcxYjZkZDk2MDkyM2FkNmJlZmMxMzQwOTg3OWE4ZGY2MTliZGY2Yzg4YTZmZTFlY2MwZjBmM2FhMjE5ZmI2MTkwMmJlNDhhNTNkZjJiYzY2YzU2ZjFjMWQxN2Y3ZTYxNjdkMjU1MTY1ZjE3NGJhYTljYWY1M2M3M2NiYmI3Y2MyYzdjMDg3ZjQzYWJlMmFlZDVhMjFmZTQyOTBiOGQ2Nzk2MGE4YTljYmMyYTU3YWJlMjI2NTRkYzE4NGNmZjkxNjhiYjY5NzI3MDM3NWZlODhkNWM0OWNmOTViMDZjZjlkMGRhYzgxZmJkOWMwZDdiODJkMDVlZDJjM2ZkNDljY2MyOTQwNDQ0MTcxMjU0NWY5YTk5MWU0ZjBkZGI2MjE5MDgzODI5NmY5NjcyOTlhMzg2MDcyMjZkOGE2ODFmMGE4ZjNjNDM4NGZkMThiMzAyNTdjNDYzYzBhYmQwZjRmNmYxMjI1YTUxYjc2MmQ2ZDBhYzdkNTljZDJlZmQ2OThiOGQxM2UyM2Q3MDQwOWY2YjA3ZDY5NWMxNjcxY2Q2ZjU5NDQzYjFkYjBhYjM1YjlkYzA2NDBlNGM2ZDFhYzUwNDc1ZDI4ZWY5NGY4MTc5MGUyZTViMjU0NTUxNGIyYTQ5YzVjMjE1MzQ1OWJlNTQwODkwZjUzYmMxOGU0YTE2ZGNiNWRjZjUwZjM3YTk1YzYwNmZkZjQ4NTk4ZTUyYWYzMTc5YTIwNDg2MTVkOTNkOTdlMDU5OWI3MDg4YzExNzRiYjlmMTVlMzcwMThmOTlhY2JjZTViMTMwMmY4ZDhjZTJhYjg1NDM3ZmVlYjBjYWE3Nzg0ZGM4M2M5ZTdjMzZmZTA1OTkwNmIwMzBhODZhM2RlZDBhYjlkOGI3MzUyOWQ0NzVlNjYxYTA4MDhkNmQzZjA5MDdmODUyODg3M2YwOGQ1NzQ4YmUxZDY5NzEyZTg1MjYyZDc3YmRmMTNiZmQxOGE1Y2RlNmY3MTQ2MjY3M2FiMjliMTYxNzMxNWE5YTZlOTM2YThlODFhOGU0M2JkMGY2NjQ0YTVjNjllYWFhYzg5YmRhYTk5Y2NhODAzODMzNzA1ZTVhZmE2OWIzYmQxZDAyNTJiODU0NjUwZjIxOTk3OTFlNmFjYTdjNzVhODYxMjgzMjE2MjMzYTI2MzNhNmFlZmY5ZDMwMWVlNWNiNGRkNzJjMDhhNDVjZGFlOGY1NDU4YzA5NWIyMmU3NTljNDNiNDliOThlOWY0Y2IzM2Q1ZGVhODc5NDQ5ZWFlNzNjYjg3NGM3MzU5NDMyNWViZjY4YzFlZDQwNjRiNmY2MWFiMmYwMTRhMmYxOWYzMmUxMmIzM2M1ZWFhOGEyOTIwNGQ1ZWJhNThkYzA3NTA3MmZlMzk5YmU3ZDFhYjE4MDgyMDhmYjQwODEyM2JkYzBiNGFiMzEzMGY5ZjcwNmRjM2ViMTk0YjYwNWU3M2EzMmYxMjVhZTQ5MTI4NWNlNjAzOWZiNjIzYzM4YjgxZDVhYmEwZjU1OTlmNmM4NmU4NzI0ODZiNGU5NjQ5ZGFmZmUzYTNkMDZjYjA3M2RkM2JjNmY0ZTEwYTE4NzAwZTQ1NzIyZDc4YTZiMDk3MmRjOTRkNWM3YTdiNjY0MTc1N2I3OTYwNzU3MTlkN2I4ZWMzNmExZTc5NmZiNWY4ZmU2ZjFiNzlhMDg1OWNiNGQ2N2NlYzA1ZWQ5MTRjZmEzMmMxZGRmZTIxOGVmOTYzNDM2YzNhMTE0OGFjMmNmOTA5ZGY3MzU5ODkwNjU3NDYzYTRlYTI1ZmVkNTk2MThhMDY4MWExMjE3ZTIyZDY0ZWY5ZDliNDU1OWQwYTBmNmIzY2U4ZDg0NzkzMGIyMzIzMDFjYWY0NGNkZjdhM2YxOGEyYWMxMzBiOTJjZmQ5YzAzMzYwNTU3YjVmN2M0Nzc1NDYyYTEwNzFmNzAzNDRjNzE4Mzc0YgorU0lHOiA0Y2I2ZmY1ZGQ3MDZiMWFlODE2Y2RiYWY5ZTllMWVkYzgwYTY2Mjg0Zjk0NjUyZDUwZWMxNGUyODNiMmFkYzU5MmZkMDg0MzM3MTQ0ZmZhNzEyZGMzNGNlOGU2MTA2NjhhNjVlOTY5ZjA1Y2ViNTQ3ODYzMDRkMGQ1OGQzMWEwOAorCitUU1Q6IDkxNAorU0s6ICAwMzNlMDAzZDdhYWI3YmM3ZmM4YWMyMDRjNzMzNzk5YWU1NTNjM2ZlYzUzZjEwZGJmNzk1YjVmNGI4N2YxYzk1CitQSzogIDY4MmY0NmY1YzA1NmRkNDViYTBiNWE3ODIwMzFmOTU5NmE3M2FhMjkyY2EyMzI2YmVkYTc0YTUyZmMzMmI3MTYKK01TRzogNTk2YWEyYzQwYjMzMTg4Nzg5MzhlYmMxMzhkYjI3NGJiMzhhNTIwMWViN2NhZjg3NWU2YzY0NTc5MWRhZTAxMmJkZWZkNDg1ZTZiZDlkODQ5OWM0MmEyYWU4NmNmMzJiMTgwMDJlNzZiYjU4MmNjYTBkZWM0ODE1ZGVkOGExMjExZjhmYzg4NTdmY2UxZDU3ZjYxNTFkODg3ODdiOTc4ZmFiNTZiZjkyNmIxNTMzZTE5NDk5ZThiYjk5MTU4Y2RkNmU5ODBmNmJhNTQzYWU4MzFmOWRkMTM0YjBmZTZkNWMyNDg4N2RjN2E4ZDQ3ODFkZDliN2ZjNWRjOTQ2NGIwNDVjYmY5ZDFlZjUwMzZiNWJmMjhiNTQ5YWM3YWE4ZmFmYjkxYWRjOWZlY2E3YTE0NTU0ZDExMGUzMTBjNzQ5ZTQ4NTMzZjM1OWM3MGYwNWZiN2FlZGVmMTM2NjM2YjhlZjcyMjM4ODY1Mzk4NjRlZTUyZDM0MTE4YjRiOGI3NGUwOGZlNmI2NTg5NmU0YjE5YjZkN2MzZjI1MjgyNjU1ODU0ODE3MTBkMmQ3NDk0OGViNGIxNzA4YTUwZmE3NDAyMWJkYTRiMzYxYmM2OGQyYTVkMjAyMTA5ZjhkMjhkOGFhNjdkNzhjMTEzNmNkMmU5MDNjOGRmYTE3NWFmN2JkOTYzYjczZGFlNDk1ODczY2NkYWU2MmJmZWY4ODU2MzZkZDgzNTUwZmY5YzA1YzM3YmEzMzg5ZDE1NDM2ODVkODk0ODNiMGMxMDRlN2VmYmI3NzAyYzVhMDM5OGFjNzIwNDg0YzUwOTM2ODM1ZWU5ZGYyNTNmMGVmOGNiZWYzZTA3ZGU5Njk1MTFjY2JmODc1NTc0OTNhMGI5NzJlZjBlOGU2MjljZjM4MjJkYjIxMjg2ZWQ3Mjc2NjFiZDMxNzg2ZmNhMTQyMTEwNmRhY2RlZTFjYWFmNDk0NTRlODU0Nzk0ZjcwNGQyMmE5NWE0YzhlNmIxYzJmZWVhNTdlNTYyMzhjMjA5NmYxY2M1Nzg2NDdmZWE1NDRkNjc2NDQ4MmJkZjUxNDg4NzlhMjVmOTQzZGIxNmYyOTAyMWI5ZWNmZTNlMDkwYjQyNWM4MWM3MDA5ODQyZTFjN2EwMmQ5MWNhNjBjMTIwMWMzYmRhZTljNTM3M2FmMDNmMmY0ZGJlZjQwZGU4ZDliMjFmZWQ2OGRlZTUxMGRlMDQyNzIzNGNhYTFjMjBhM2FlNTQ5OTU0ODM0YzkzMzczZDkxM2I4NzUwZjIzYTAzNzgwZDdhOTQ1NGVkNmZlNTFmZDJkMjc2YjlkNGFhMzJkZTA1ZTAzODE2ZTY0ZTk0NjZmNGYwZTIyNDY1MTQyOGQzNDJjYmNjNjk3MTcwYTQ3ZWY5OTZiZGFjYmNlOTExMTdjYTFmODQ1NWIyNWIyYjA4NDQzZTk5MTRlM2Q5MGM0ODllZWFhNzczMWRkZWEyMTIzZDU1ZDY3YjE2NjgzZmI3YzgyMzZhYWE1YTFiMGZjYWY4ZDE3MDAxMWRiZTlhYTI4NTdiZTYxMmNiYjg1ZWY2OWU1NjgzMWI0ZGFjZmJjN2E1OWI0NjVhNjZkYzc0MTJkZGIzZDZhZjRlYmZkNzA1ODY0ZTdkNGZiOTlhNmNjYjQ4YjExODM2OGZlYWIwMmEzNDBjNDMyNzY4ZGUwZTA2Nzg3MWU5ZWE4MDhkNmQ5OTM4MTU4MjllNzFmNmMwNDJiNjY0OTk1MDk4ZmVlOTRkNTQzZGYxNWU1YjE2OTU3MDMxYmQyMzhiY2FkYmJkY2M1NzZhZmZiNjQwMzAzZDY5YzViMjUwYjNhNTM5YWZkMTI3ZjdlZTI2MDllNTJlNTE1NGZiZGZmM2U0NWY5YzQ0MDY2NjU2ZDU2MWUwZjY0ZGZmMjgwNWRmODhlMzBhMzgwNTMwODIyNDEzYTdhYjc2YTFiOWE4NjUzNzhkMjQ3NjMwNjlhODE0MDAyYTlhOWQwMzc5NWNhOGQyYjViZDEwOTAzOTNlOWU0YjFmZjdkN2YwZWI4NGU3MTJhMDE4ZjY4YzllMzg0ZjBhMGFlZjM5Njc4NzkyODRmNDA5ZTMwZDIzNjUwODZlNjY5NTIyNzhjYTliNmY5MGU4ZjY5YTQ4ZDliMjhiYjRjNGVkNjMyYWJjYTNhZjQxNDRkYTc0MjJiZjUxOTkyZjczNDczMTQ1M2M3YTMzZTE1ZTU5ZjUzMDgxMjlkNmE3NzRhOTQ1ODZmNzIzMzExMTc5MTc2YzA5NDhmZmY0ZTMwYzFiOTU5ODEyY2FjOTc3Y2M3NDM0N2IwMDc5NDBmMmZiOTYyYTkwZDY2MDY2YTZkZTg4MDE5ODRkZWU0YTUzMmQ0YjBhY2Q2ZGNhZjA2NzI3YmFiNzBiMzg2NjIzMjIzNGM5MTAwYmZkYzY2OWY3N2NhNDkKK1NJRzogZWRiNGUwMjBkNjc2ZmFjNmE4NDU1MzQ4ODBiZjYxMzYzNzRhOGI3ZjJjNTM4NWJiOWVlMjI1MzgxZjQ5NGVmYjc0YTU1YjQxM2FlMGVhNzBhZGQ2MWJmZGZiODdmYjQyZDViYzBjNTM1OWRkZGQ1NzNkNTM4YWU5M2E2YjM2MDkKKworVFNUOiA5MTUKK1NLOiAgZWU1NWZjZjcwYTI3NWM3MjZiZDQ4NTY2ODNiMzQ3ZGVjZmQ0MjJmMTgyNmMwN2E5MzJjYjg1YmU5ZmE0ZWYzYworUEs6ICBkZmNmZmI1ZTE1NTM3ODlkNTZhOWYzOTE0YmNlNTAwZDA3YzVhYzMxMWY5Mjc4NTRiMmNmMWU1ODMzYzAzMjM3CitNU0c6IGI4Yzg0NWNmN2M1NDg1ZjA2MjJkMWRkYzE3ZjdhMGY2ZjBmZDcwNzRmZTE5NGIwZTBjZDQyNjUwY2ZjODE3ZjU3ZjA5NWY4Y2RmYWQxZWJlMGRmYmMxYmQ3NjE3YWI0ZjIwNGU5ZDU1ZDgxYTdjOGE0MzM5NDBlYzZmMTdjOGE4ZTNkNTZjMWFmYjBhZjM3NGJkMzJkNTRlZjcxMzJkMjZiODljNDcwYzJhYjViZTE2ZmFiYjRjNzUxOTNkNmRhNTliYTJmZDE1N2U5ZWE0ZTBjNWMwOGE1MjAyZjVlZGM2YTYxNzAxZjA4YmIzNDRjYTY0NTVkNzVkMTQ1YWRiMjQ0YzUzNGM4Y2ZjNjIzZjRkNGI2NzY3NTk0YjM5YTc2OTBiZWVlYzRkZjk3NDZhNTdmZmVlMDUxNDU0YzQyNzhlYTQzYzgxMGZmMTNjZDc2OTYxNWY5ZDA1ZDRmZTRhNTE1ODNlODBjMDE1ZGNmZWQ5YWYwNWY5M2QwNTRkMzRmZmQ5MzliZGQ4ZjA1MThmYTMwMzBhOTY0ZGM5ZDgwZGYwMGYxNjM1ODI0MDcyY2RmMjliYzgwMjU5MjA5ZDUwZjU2ZmNhOWZiZDZhZTE1MTRhNjcxOTg5Y2VhNGY2ODQ2YmMxOTE3OTA5N2NjYTQwYzYyNGQ3ZWRiZjkxZmI1YjI1MzllYmJkNTAyZDM2NDY3MTE0MzBiYWU0MjNmZDExNTg0ODA5MzMxOGI3ZDA4N2VmMWUzYjg5NGJjM2I5ZWEyN2FmODUzZmNhODU5NWQzNmZiNzI5OTk2OTE2MmYyZWQ2YTJiNTUwNzViMmM2MzA4MDI4NTcxNzZkZWM0Y2I1YWNmMmIxM2EzNWE5OTQ5YjkxMmJiNTdkODFlYjBjOGE4YWRmM2NmNjRjYjU3MWJmNWYzZDcxZjk4N2Q2NGQ3NGU5MTlhMDAzMzZlNTdkMzVlZTRlZWNmYzY1NzAwMGRkNWIxMjk5NWVlMWIxMTY1OTFjZTU4ZTU2ZGUyNWIyOWM5NDgyOWQxZDY4NTIxYjk1NThlNDcyNWVjNzcwMzkwNjljMGNkMTdiMmEwMDMzNTllOWUxZTExMmM3NTkwMTc2Y2ViY2U3ZjAwMWYxZDEzNmU4MThmNDgxOGNmZDk0NzQ1YWZhYWI1NmYxYTQwNmY5N2RkOWU2MWI3MzUyNjZkNjgyYWQ3ZGYyNmRkNzBjZGUwYjU3ZmVhN2RiMmRmODMyZmE4OGEzNWY1Mzk3OTQ4ODRkZGM0MTIxODQwMzAxNmNiNmQ1MjIxZjNmZWI1ZDNhZWU0YTk4NDBhOTEzMDcyZDI5ZjhkMWE5MzY3YmIwYmJmNTQ1ZjdkYWU3YzAwYTBkMGMwMzQyMjMxYWU0NjJiYjc0MmUxNDk4ZWU1ODRhZTZjODNmMmYxZjJkMDQ1MmJlYWQ5ODIyNjhjZDNjZmRlNzhmZjQyMmUyMjZiZjdiMmFmMTEzNzc1Nzc5N2ZiMDJlNTI3NWMzNDgwOWQ1NGNhOWVlMmE2NTI3NWU2ZTVjZmZkZDIwYWQxZmExZWUwYmQ4YjIxZTA0Y2U4MjllMDJjZGI2M2M0OGJmY2RkODZkM2EwOGM1OTc4OWM5ZDc4ZTM2MTgxZGVmZWI3MjI3MTA3Mjc1ZWQ2YjVjY2IxMjdjZDcyYjM3NGUxN2Y1ZWUwYjVlNDdiNGIzZTE0YThlYzZkODZiYjc1MDcxODdmMjhkYjMyYjNmM2ZhMWNhMTM0NDZmZTUyNTNlZTc4MzY0NWU3OTQyNzI3OTlhODYzYjRmY2E5OWU0NDNjYmFhMDVkZTNjNTBlZGYzZDVjZDdjMTA1MjljNmMwOWEwYzE0NTM0MDZhYzdlY2FmYTliM2ExZjM2OWQ2OGYzYzYxOGY1OGVmYzM1OWRmMmYzZmNkMjQ3OGI1NWE0MWExMWYyNDg3ZTdmNzBlYzI5M2IzZWNjYzcwMGVmNDQ0YTMzZDFlYWU5ODQ5YzViNzZkMjlhZmQ1YTIzODYxYWVmNGYyYTdiYTNmNjY2MzAxZmRlYjVkM2Q4ZjBkYzllZTJlMDE0YjI0Yzc0NjVkZWUzYzA5NjRlZGQ0OWVkNDllZGFiYjVjYTdhZmI5OTU3NGQwMDFlNTgxMmEwODUyMzFmMjQxYjZiMDhjNzNlODBmYjQ0YmIyYWRmNTU0ZjE0ZmQ2ZGNlOTRhNmY2MzYyM2Q5YzFkZWI0MWFkMTAxNjUxYTZiNjdhZTUyMzRkYWFlODE5NzlmYmQ4MjMzODk2NDlhM2IwYTA2YzY4YjgwNDY4YTk5MWQzMDA3NzQ4NzUxZmE2OTI4MWRiMWI5NGQ2YzE2MGExY2FiNTA5NDNjZGJiOGRlYTU3NTA5MDZiM2M2NTk1YmI1ODBkZWRiZmFlNTc0NjRjYzdhNjUxZDRjNTFkYmI1ZmE5ODA1OTdkMTc2NjkKK1NJRzogOWQ4Y2IyZWFmM2ZmM2UwYzJiYzY3MmUxZDI1NWM1YjhlODA3MzFiZmY2ZjZhYmE1MTdlMTMzNTRlODUxMDgwZjRhOGJiODEyMWIyNjI0MjQ0YzllZTk1YzhhMDkyZjEwMzcwM2ZiZTY2ZjljYmExMDBkMmU5MWVkNzc0YWM5MDcKKworVFNUOiA5MTYKK1NLOiAgNDljMjk4YTJkYjNkMjU4OWM5ZmUxNmE0ZTU3MWU1YWEyM2NiYWE3NzdiODY0NzAyOTBhM2VkYTdhNWQzZTk2YgorUEs6ICBkYWM1MjNkNjM3NGM4ZmYxNWZjNGRkYzcxMzcxNWFjMzVjZjU1NDdmYzFiMWIyNjQ2YjYzZmI0MWE3ZjIxNjIxCitNU0c6IDM1ODJlZWIwZDM3MWRmMzg1ZGU4OGJhYWQzODBjYjBjZGI2MGVhYjJiYWViYjNjNzk4Mzc3NTNkMDhlMWNiNzhjMGJkNzZkZDExMDQ0NTQ5NTZkNTcxY2ViN2U2YjU3MWE1MjM2ODM1ZDc4NGI1MGZmNjYwNTdiMTM1OTVlN2QwYzhmMjVkMDhhZThiNTRiNjEyM2JhMDgxNTFhYzdkYjBjNTZhOTgwZjdmMGJiMzlhNTRiNDM3ZjU0ODUxOTc5OTg2YWIxMzY3ODM1ZTVjNGYzYTNiM2Q3NjBkMzgyN2U3NmM1NjhhZTdhZWJiYjYxMmU3NzViZGRlY2NkMzM0YWM2YmNkMzI1M2FiYzI5ZDRiN2MzZjEwMzYyNjY2ZjZhZTc1MDgwMzcwYTM2Y2JhNTVkYjNhOTFjYjU3ODllNGQ2ZjllZmVhNGRmMWRkNzczMGE1ZTI3OTYwZDUzYjUxMjE5NDhjY2U1YWY2NTNmZmYxZDViNGU1YjBhODhjNzE4YzQ5YjMxYzc5M2Q4OGMxY2M0NWFiOGRhMjlkMDVlOTA2Y2QwNTk0YjVmNjYzOGM4ZWMzZjE3NjBiYTQyM2I1YWIxZDA4YTU4NzcwYWZiMGYxMzlhYmQzNDljMWJmMTYwZDg5MDIyMzljZTI0ZjE5YjRlMWJlMDk1ZjdlZDE2NWYzOTMxZTNjYmNjMzA3ZTlmYzVjNjU4MDMxMjI4ZTU1Y2JiZWVjMGQwYmNmOGY2OTUxNTRhOWVlZDFiZWYzNTIyODc4OWJmYzBkMjM4YjgzNzJkMzE4MzI4YzEzMzlmZWEwODgxNGRiODYyMWFiY2EzYWViODIwOThiNWFhODdiYjk4ZjVlNDA1MjJhMDg4ODUzMmMxNzQ4NDUzZGIyZDJiMzk0M2U0YWJiMzEyZGUzMTlhZWM0OGNjMWM5NDc3NTk3Mjk1M2ZiNjQ5NmI4MTY4OTM3NjIzNTEwY2Q0OGM4YjI0Nzk1NmQzMTY4NDg2YzE3NmFlN2E0Y2IzODRlYWNmZGFiZmFkZDlmYmEzMGEyM2I4MTFiZDc3OWYzY2JhNTQzMzhjMjhiYjMzODIyMzhlZDNiOGRkMjFiZWFiMmY1Y2FkZTI4YzVlMDliMzFhNDU0ODA4YTUzNDgxMjJlM2FlMzgxMjI5NmY3ODY5YzM4NjVjM2M5ZDhmZTE4YmQ4MTJmMmU2MGU5MTQ5NzVjZmUxYmVmOGRiYjgwOTcwMDZmMGQ3Y2YzZmMxNWViOTVjMjc4NTRiMTQzMTJiODhkNTI4MDE1YWY2OWZiNzUwNWI4ZjMyNzAzZjY0ZWIxYzk1OGYwNDZkZDI1MTI0MmY4YmVhNzQ2N2ZjNzI5MWQwOTVlOTY5NmUxMWFhNDVhYmU3OTI0ZTg1NjM1MTUzNWFhMDc3M2QzZDllNjFjYzlhMmQ4OWI1YjA3NzRkNzY0NWVlMWFmN2ViNmZjZDQ0MGJjNjlkNDNlZGVhYWY5MzVmZDJhNTI5NWFjMTlhOTdkNzBhZjkyOTg4MzBmODFjMGE1MDlmMjQyZjQ3MzM3MjQ3OGZhNTg3OWZiMmNiODUxMTA4MGZjMmVjZDgyNTliOGMzY2U5ZThiNjQwNzYxZGM3OTI3YzMyZTdmNWJhZTk3YThiOGFjOTM1NjYyZTVmNDVkMTRjYWQ2ZDM0YWZmYzlhMTk0MTRjNDU2NmY0NWY5NzczOTY3MTA4OTRjNTM5OWVkNDQ4MGYxOGU5MDk1N2ZhYTc2Y2NiNTEyYTJkMDc1NzMwNThhOTViNDJmZTE4MTAyNDlkMWM4NWVjNDMxYTA0OWQxYWVjYjBmMTE4Mzc5YmRjM2YxZWU0OTBiYzhhMDU0YzMyYzNkYWM3NjU5OTY2Y2RiNjZmOTk1YWM0MDNkNWU3OWViNmIyNWIzZjNmNjVhNmNlZWMyMjBkNjZjMDVmOGE4YTk4YjgwNzk5YmE0ZjJjNmRiYmI0ZGZiNTg2MmM5YTQ2YmNhMDEzZWJkZmFiYTc0OTRhMzBjZTE0NjA2YWZjMGIwZjk5MzE0M2ZlZGVlNzg5NmQ5YTZiYjgxNDk5MTY2ZWQwMmU5NDE4NmFhZjMyMTg3YWViNmUyODI1MDFiY2E0M2I1N2I3ZWZhMDkzOWM5MzRiYzhmYmJkMjZjNDRiNjE4MzM1YTM1YzY5MmZmOTk2YTViOTVkMzI3ZGY5YjJhNjYyMWIzYjBmMTkwZGIxZjM2ZDkxMWQxYTY2M2E0ZWJmOWEyODU0YmI0ZjQwNjEwOTViNjk4MTJjODJjMmZmZTNmOTJlOWI0NGQyZWE2MzE2OTg4MWNhZTg0NTNkNmVlZjdjZjY5YzI1YTI4YjNmOGRkYzcwMTQ4ZWYyNjcyMWEzYzFmMmU2MmQ5ZDEwY2VhNDJmY2EzZmFjZDc0NjczYTRlN2YzMzUwNzM2NGFhMjg2YzBmMzhkNworU0lHOiAyYTQzOWM3M2M5ODExN2ZiMjk1MmUyYjE2MWY3ZjNiOTllN2QzOWJjNjk3Zjc5NDA3NWRiN2I2MzRkMjlmMWZmNTcyNGY2NzdmODMxMmFkNTE1YjA5N2NjYTlkZmMzMGU3OWVlOGE3YzlkZDcyOGJkZDQ1ZGY4NTljN2JkZTMwYQorCitUU1Q6IDkxNworU0s6ICA4MjNmMGMyOWZiZmRkM2QxODI4ZjMwNTVlOWVjMDFmZmQxYjVhMzc1MTE4ZGRkN2U0ZTBjNDM3MTlmNTczZmY3CitQSzogIDczMTI1ZmM4M2FiYjhiN2M2NTg1NTlmYzEyNzM5MzIzMWQwM2NhNTg0NmUwYzg4MTE4ZDEzZDU1Y2E0NDc4OWQKK01TRzogODAyYzM5Y2U3ZjJhNTBiZDgxNjIyYWRkMGRmNGUwZmUwM2VjM2QyZDMwNWE0NWE2MTY1MjcxZWQ3OWFkZDI0M2I5YTAwZTUyMTgzMTkyZmViMjRjNGZkYmQyMmM4MDdhZTEwMGVmY2YxNjViOWM5OTYxOTRlMDBmYTgxNzc2NWVhOTRhMDMwNzBlNDg2Njg2YjQ0NWZjYjI2M2NjZmUxZjU4NjJmM2I4NGIxMGYzOTAwODBiZmNhZTQ0N2FlMDA2OTc0MmI4NjE4ZmE5NTc1ZjdlNjM3YWQ1NGU4MzRjYWYwMzk0ZDc0NTAzMmNlMWUyNTVjMDI3MzI1MGYxNTA0YjM3YTBhZGQ5NGFhMjQ1YzdkZTUyYzgwZTA1ZDZlMGE5NmExNDQxMDU0MzgyNmE0OWU5Yjk0NTYyNmQ0ZTg5ZjU1MDI3MTYzZDRiZDZkMGU5YmQxYTI0NzdmNjdkM2Q1NjY4YTQyZTk0ZDhiNjExOTNkODIxZTBkMWIyMzBmY2FkYzUzNjEzYjc1YjAyY2ZiODE1ODQ1NjA3N2ViZGY1YTVmMDBjM2I1YjE4NjM3MGNhZmVjNGEyMWM2OWRjZTFmMDFlZmVmMjNjMzdhYjkwZjg1ODIzOGFlZmJlMjEyYjU1NmQyZjA3MzQwNjU1OWYxYTUxZDg0ZWZmZmRjZTA3YjAwZDAxYmJmMzM3NzFjYzEyYzk2MGFjODkzNjVhOWM4MmM1MjM0M2Y3NjAzMzgxYjg5MDIzYzFhNmU3MDJhNWIxZTRiZDE5MWVhNjk3MGI1ZWE0NTFlYTA1YjU5YmY4M2U1NWYyOWExZjgwMzIxMmJiMmU1OGYwNjE2MzMzZDkxMTQ3MDg1MjllOGI2YzYwODFkZWViN2MyOTlhNWEyYTUzY2NkMjRlZDU4ZmZiZmU1MDNkODA2MTRhZGIwNWNhMTFjZjI5ZGVkMDA5MDRlYTEyMzlmODJiYTQwYzc5M2ViYzMzOTc3NWY4YjBmZTM5MDFmNTQ4MmUzMTBjNzkzYzZlMmNmMDFkYzE1NzcyN2FmMjM4ZjQ5Yzk4NjI4MDRiMDQ3NTUxZmQ4ODZmNGE0ODk5ZTIyYTZhNjU3MDExMTdhMzg1ODA1NWJiZmU5NjZlMzcwZTczM2UxN2VmYWRhMjg1OWZkOGZmYTllMDFmY2U1NjA2YTI1NTM2NzY3OGY0YmQ0ZTIxZTVkYTBmZWYzMDc1N2YzNGUzODlmNzZiN2Q1N2M0ZTQxMGEwMDJlOTAwZTQ4ZmIyMThjOGYyNzc4ZjE0OGZlZTU2OTY1ZjViNDczZTI1MjU2YzIzYTdhZjE5ODM0MmNmM2VmMDJiODRkZjJjZDU4MDBhNDYxYzFiMDdiZGEyZjQyNjI4YTY4YWQyOWRiYjgyYTQ3MDk2N2Q3MzAyYzk5M2IyMzQxMzZlNWJmMjU1ZTYyNDhiMTAyYzJiZmZiMjAxNzIzNzFmMWNhM2UxMGIwODEwZTg2NDk1MDM1NDZkOWE3MzFjZjE5YjA4MzM1N2Q0Y2ZlY2M4OWJlZGI1MzUwNmZlMTk5YjY3MDM5MWE2MjAwNjlhMzA4MWYyNTNiNGQ3OTA4ODBhYTIzYjUzZTk3Yzc1ZGMwYzM2MDU0MGU1YjBhM2VmYjFhY2NmZmQxMzc0MTRmZjg0MjNkNTQ2NDZmYzU2YmE1ZjUzYmQ4NGM3MjY3YzJmN2VlM2UzNzYwNzU0NDE1NDM2NWY5Zjg1MDgxZGQ3ZDJlZTc1ZDMwMjI3NWM3OTllZjI0MjdjYTY0OTYzNTVkY2RhMWQ0NGUwZDk3N2JmNjhkYjMwMDY1MDBhZTNmNDAwZDZhOGM3Y2Y0NzA1N2Q0ZmM4N2VlZWNiMDIxMTZiNzNlZWQ2Y2UxZmNjZWY2ZThmYjhhZWEzNjNiMmY2ZjUzMjJhNWYwNzUzZjQ1ODk5NTM3NjQ2ZDU4NjUxYmU5MDM3YmY5MTQyM2MyOTg2ZjVjYzJiY2JjZTRmYWVjOTAzNDk4YjQwZmMyZGVhYjY2MDNkNmVlYTU4NWQyNzIwZDIxYmIyNzIyYmMwNWIzNWFlZDJiY2MwZTgwNGZlOWQyMzlmYWZkYTdkZGFmZTFkNzg2MGFiYjBmYjI4ZjRiZjJiMWZiYjYyYTc4NmU0NTViZTAyNGIxOTNiNzgzMGJlMGQ1NThmMDJjOWYzYWUzMWRjMTA3ZWU5NDIxZGM1ZjBiMGY4OTQwMmI3MWE0NTgxNDAxNTM2YmM0NzMwODUwNmQ5NjkzOWEyMDYzNjI3NDRlMjdkZGU5NDRmNDA5NmExMmI1ZjYzZGFiNjRkMDQxNDg0ZDNmZDkxYTYyYzJmMGVmOWFlNzg3NDIyZWIyN2ZlZDA4MDJlMjVmOWJjNzc1YzQ5MTVhODM3ZmUzZWI3YjlkNTg0M2U0ZDgyMTBjNmI0OTRiNjEyODE2MzdhNmJlMzIwNTIKK1NJRzogZmE3NDdiNmZlMzM4MWFkNmJjODJhOTU2NDNjMWY0YTIwYjc2YmE3M2JmZjAwZTYzNWQ2NDIwMmQ4YjBkZjAzZGJjNTZiMDEzOGIzYTZkNDE5OGZmYWY1OGNjZDNkMzg4ZWQyNWViY2Y3NzA0NDNlNDFlOWQyMTQ3OTUwYTMwMGIKKworVFNUOiA5MTgKK1NLOiAgNjU2NzY2MzMzNzQyMTRjNGFjNGI3YmNlYTlmMWNjODRiMWI3ZTc5NDExZTMxMDUyNWFjZTM4NWY0NTY2YzFkNQorUEs6ICAwZTZlYzU4MDFkOGJkNmIxZWI0MjE0MjFhMTQwOGYxMzRjZjcxMjMzOGUwZmZjMjRjZGNjZGM0ZjdmYTMxZGJlCitNU0c6IDlkNjIyYzIwNjc4NzY5NDA5M2M2ZjI5ZjkzNjE5ZjIxYmI2NGMwMzk0MTZkMjBkYzcwOGEwODRhOWQyZTQ5MGNmNTY1OGUxM2Q2MmNiMGQyMWVhYjAwZTQyZDg1MWJjNmVjNzVkYWY0MDVkMjM3MzI0NmVlYTQxNWU4NjYyOTFiYWJmNzY0OTc2ODBhYWYwNDQyNWE0MjU1MmIxMDdkNThjZDE4NTYxYzhjOTQ4M2Y3NDA3NDRjYmZhNjA1NGMxYjEyNmY1YTc2NjU5YWMxOWRkZGFkNGFiNWEwOTE1NWQ4YzA1MGI1MzU0ZTA2YTRkZDNlZTNhNmY5YzkxZThiNGM3YWYyNzQ5NjY0ZTdhYmU5NzA2MTU4OWUxNTNjNThlMjdjZjI5OWEyNWYyYjUzMGMwNjA3MzFlYzBmNDM2NmJkMWRlYmViNGQ0ZTkxMmU3NmU1MDg1MzRkNDMzZWM0OGY5NmI2MmUxNTBkZTkzOTYzYTFiM2U2YzgwOTFiNDk1YTk2NTE4Y2UzZDNiOWE4ZGJkYzJhMTNmZGQwNzdmMjIzMWRlOGQ3NmY1NmQ5YWIxYzJmOWVmYWJjZTQ2MzgzNjRmOGZiMmEyYzY4M2NhODE5YjcwM2FiNDUzYjExZDM3YTY5ZmE0YmNiODAyMzk4MDgzNGY3YjkwMmFkMTgxOWZjMDI5MjEyZmRlYTBhYmYxMWRlYzg4YzU1ZDY4ZWY4N2EyNmRiYjE1ZGMzZDNkZmJjZGRkZDVlZDcxYmU4NmYzMmM3NmVlMjIyMWQ5MjQzNjgzZGY5NTE2NTY0YjI2YmFiNWM4NDVkNGRmZTBhZGNjN2NiOWZlMWVlMmMwNTFhZjU5MDhjZTBjYzNhOTA5MDRkYmMwZDM2ODBlZDQ5OTJmNDZjZTI1YzJlZTg1MWM0MTRmMDE4N2Q4OTNlNWMzYjAxODlhN2JiNjg5M2Q2ODNmNWUzMzk0Y2MwNDYyOTlhMTZhMWMxYjU2OTU5MzNhODliYjEzMDMwODU1YjgxYjNjNzQ2ODVmNzE5ZGUwMTYwNTc1YTBmZjBhOTFmZDk0MzQ3YjhiY2JlMTI1ZDFkM2Y5Y2U3NzJhODEyNmUwMGY1NjNiMzE4OTY1NmQ1NTIyYzE4N2FiODMxYTdhZGU3YWMwNmZkY2FjN2YxZDQ1ODgyZTUxZjliZjViNDRhMmRhYmE0YTUzZGJiMzE5NzBiNGEwZjEyNzJmZTE0MDg3ZTBjM2M3ZTQ1NDIzMTJmZTc0ZDc2N2YyMWU3ZWE0ODdkNTI4NDI4NGY0NmYyMGYzMmM1YjE2ZTFlMGFjOGQ3OTZhYjJmODBiMzQ0ZTdhOGQ4NGQ1ZGU4MjNhNTA4OTc3NTJkYzU0OWE0OGZjMTBiY2Q0MzZhN2E5M2U5N2NkMDVkNzgzMDEzOGYzMjM4Nzk2ODBjMzQzYzE2NDY3ZDI2NGQ3NDliZjQ1ZTQwZjM5ZmJjM2EwMGM0M2IwMDY5M2IwMTU2NzY4ZmYyZTNmOGFkOWViNjQwNTAyMmY1Y2FkYTY2OTRlOGEzM2NkYzU5YzY2NzNjNDQxMTcyNDRlYjAzZmQ3ZmQ2NzU5MzBjMjk0ZWRkMjk0MGY1ZjE4MDk1M2Q5MTBjNTU0ODViMjA1N2FlMGM5MzAyZjRhOGU4MzFhNTUzMGUzY2JiZjZmNDcyMjI0MDgzYTk1MmE4MzkwYWIwMGRjMGY2OWRmZDg4MGVlYTJkNzM5ZDIxOGQ2YTY2ZjIzN2YxMGQ0NDAxYWE3NThmZjgxMjBjMGFlMjc2NjEyNzg0OTAyNGY1YTRjYzU3NGE1YjAyYjkzNTk2NjgxMmNkMWZiNmQ3OWQwYzRmNTlmZjgwZjAzNWEwYjEwOWNjY2IyMmZiMDg1MzViODc0MTQ5ZWRmMmEwOTcwYzE0ODg4NDI3ZDA3ZDFlYWZhNjg0YTZkMzQ1NGU0OWIyMjUxODRjNmI5OTNlYzhkZGI4YjVhMzVlZTQ1Zjg3ZjY5MjY2ZDQ5MDk2YTMxN2Q4NmFkZTI3ZjQ1MjlmZTcyMzY0ZDBiOTU4MDA3Mjk5ZDlkZTg3ZDZmZjlmYjA0ZDU3M2FlYTQ2YmFjOGViNzY0NzUyZWI0NjVjYWFhYmE2ODlhNjQ2MGMxMTA3MzBiZGQwOGIxNjg5ZGU3YjA1ZGU1OWFmOWZlMjQ0YWMzNjNlOTVjOThiNjY5MzU5YWY5MDMxYTNhOTNiYTYzMWFiZjFmNjFkMjBlZjdmYzY4ODNiNDg0MGZjOTI2NzEyZTEzZDg3NGI3MjJmNmE3OWIxNjA3MGMwMzExMzI1ZTlhNzBmY2Q4NjkxNmNmYTFkYTdmOWQwNTYzYTIyZmU5YmZlODU0YjBjMTg2Yzg2NjNiMDYxYjY1YmMwNzFlODM5OTM4ZDhmZGQ3Y2Y4ZjY5NTJhNjQ2N2ZhZDhlNTg0OTBlZDJiMjY4MTMzMDEKK1NJRzogZTBiODY3YzlkYmRhMzUzMjM0MzNjMDQ2ZTA4MzBjMjUxYjQzNDZjNTM5NTk3MjI4NmIzYTcyMzEwZWQ0NTI2ZTU0NWRjMDlkMzkxOGYyZWI5OTIwYmM5YjI0MWU5MDUwZDg0OGQzODMwMjg4NjUxNTkxZjkzNmQzYmFlNDUzMDEKKworVFNUOiA5MTkKK1NLOiAgZDJlZGVkY2Q4NTMyMDZjYmY1OWJkNzRhMjVhMzAzZmEyZDZjMzkzNmJiNDhlYjQyZjZkOTAwY2JlODA3NzJiZQorUEs6ICAyMjQ0MTExZTJlNzY5ZWFiODE4NzFlMDZjNTgwMTc4YzIzNWM3YmY0YTUyZDJlY2NlMTE4ODdhOWI0NmM0NWM4CitNU0c6IDgwNzBiYzBkYjA4OWE1OTI1NDQ2MDE5YjdlNDAzYzc0ZWM3ODkwM2U0YmQ1NGJjMWQwOGE1NGE2ZjBlZDc1YTg1Yjc2M2ZmNTRkYzMzYTI2MDBjY2I0NTdmZGJhZWFlNTQ4NDc3ZjZkNjk0N2FlMjZkZWI3MWVhY2QxZDJkNjIyODJhMDgzODQzYmU0ZTU5MzFkOTFjOTNiNjI4MmM1ODgwN2NlOGYwZDg4MGIxNDM4ZGFkOGZkY2JhODYxMmRmNzNiOWZhZmYzYTlmN2RiMzAwNTI1MDUzNmFhYmQ5OGFlMDI3YTg5NWUxMGI1Y2I3YjY5ODc1YzBmMzk5M2FmMjQ1MTkyZjQzOTNlOWM0ZDM0MDU3NDZlMzExZDNhOTE0NDdmY2RiZDczMDZiNjAyMGM5MzNiYmFiOWUzOWQxMzQ5MTYyNTAzNWM5YzYzNmVmYTE3MzljMzU4ODcxMGE4NzlkOWUzY2UxNzY0NjE2ZjEwODJlOGRmZjU3NTU5YzNmNWE1ZDc2ZGQzMDExMjRmYTQ4OWZiOTQ5ZTllMDM5ZGQ0NjIxYmRhNjBmMGI4NmIzMTFlNzhlZDBhYjNiNTI4OTY1MDQ0YjIzZDc4ZWUyZjgxMDYxZjhlZGJkNjkyOTkzM2QxOGMwMjA3ZGVjNGI1YjZiMmZhNGFjYTI3NDdjZjViMTEwZGYwMGIwYzk4MjdiZGIzZDlkYjJjN2IwMzI4ZDQwZDk5ZTFmNmIyMjhlNDBkYWRhZTc4YWVkYTAyODliNmEyM2Q0ZWI1ODM3MDg4ZTVkODg0MTM2MzJjY2MyMmUyMWE3Mzc2OGM2NzMyMDFlOWE4ZDhkYzZlYjZmNzM5N2ZlZGJkMzk4ZDI2Zjk2OTJjYTcyZjZkNmNmMDU2YWFhYzUwYWMyZjNiMjY2ZGJlNWU3YmU3YTAyNDc3NDU3OGVhZDU4NTI0NWRhYWE3M2UwYWFmODMzYzA3MGJhNGIyMDQ0Y2NiNWU1Y2QxNmY5YzBhZDkyZWE4NDQ4MDU1ZGQ4MjhjNzk5MzVhYTZjMDc0MWY5ZTJiODEwMzI0ZmRjNmU2MWU4NDJmOTQ1NzIyNjhiZjdkNWFkZmE3YWIzNWIwN2ZiMTllNzgxNWE4YWE1ZDgxMTMwMTMwYWM1Y2RhOGE0NzUxZWU3NjAzOGMwYTZiYzJmYWJhNGM0OTdlNjJiOWYxZjE5NGI4YTU5OWIwNzcwMTgxNGI2ZGZiN2Q4NGJjZGQ1YjdiNWJjMjI0OWYxZDM4NDVlZmY5ZWY4Y2M3MzI4NTM1ZDcwZDUzYzdhYTBjNzMwNTkwMWRlN2M0ZWQyZmUxODM4MjY1ZDRhNDE3Yjg3NmFkYmQ4OGViOTMzZjI3YzlhYTQ4YzhjN2UzNGU0ODE0N2NjZmZiMmZiNjFhMzQ4ZmVhMTNlZjY3Y2RmMmUwMzllMzNmZDg5ZTJjMWFkMmE0MjU0ZTNiZjc0ODQ1MmFhODNlZmVjYTQ2ZTc4MGVkZTFkMTNmZjRjYzVlN2QwMWVkNDVlYjhjNzQ4MThkNDg2MGFmNDc1OWE4M2UxNDg4OTZhYjY4NzM0Mzk1NzYwZTAwMTQ2Yjc5M2MzZTcyODk4YWEwYjNjNWUwYzFkM2ZkZjEyMTU4ZDJlOGZmMTEyM2EzYTBjNjRjZjYzNzRhN2Y0NGYxMWE1NzVlNDhhMzc5MTgxYjMwYTQ4NjVjZmQwMjJhYTk4MzI3NTYzNWNlNGYyY2M0MGJmZTA2NjA2N2VjNGZlMjQxZmEwNDdiNTUyNzBhMWFkMDc3NmM1Zjk2ODYxMDE0Y2JmNDBhMDQzMmM1NTlmMjJkNzkzNDJiNzlmOGU3MDQyZGNjZmIxY2Y1MGY4MzA4NWY4MDYzZmIxODg3ZWQyZGZjOWRiN2VmYzk2ZGFhMGZmMmJjNGY1MjMzNWIwMjExMmQxNjM5MmUxMzRjMDIyM2RlNDU4ZmMwNzJjYzIyYmY5ZTdlYWJjMDYyMDgxODBhNTdlN2NlNDgwNWVlNGUwZmMwMTU4NDA5OThmZDU2ODY0NGEwMzg2YjNkOGU3ZGRhNTJhYmY2NGY3ZGQwMDg2OGZjODRmMDM2Y2E4YTc4ZTliYTgxNzFjYTkwMjY3Yzc0ZTYxNTlhY2FjN2FmNWJmMjM3NTlhYmM1M2Q4MmU3OTNkYjg3ZmRhZGUxMzYzMzU0ZmZkY2IwYmQ0Y2M5MjEzZjVjODQ1NDQ1ZmM2NDliMmExZjMyOWY5ZDQxZDhhMDMxYWI0NmI0NzIxNjBmMDM0MzRiNGI2YmM1YTQwMTUyNGQ2MTc5YWQ2NmY5ZTIyMWM5MDY3ZmM4N2ZlNGE3N2UyMWU4MDIzYjYxNjllYmYxMDkwY2Q1NTZhOWJlNTBiOTE4N2ZlNDYwN2M1OTI1ZTYwYjQxNGY2YTVjYmY4YWZhMTVlZDBlYjM0YjY3YjRjOWM1ZDU0YWRiZTY0MAorU0lHOiBiZTNjMmI1NjdmZThjMjA4Yzk4ZTcxOTcxMTdlYjAxYjNjMTk3YmRmYzg1ODU2MmRjNWNkOTBmOGUyYzAzNTcwNDIzMDM5OTViYWJhMmY0MGI3MzQ1YzU2ZGIwYjQ2MjU1ODBhYThkY2M0OGRmNjAxOWQyM2E4MzhlYTcxNzIwMgorCitUU1Q6IDkyMAorU0s6ICBiNTY5ZjdjMWFhZGY1NmVkMWI1ZmExYjZmYWQ2NDhkMGRjNTQ0ZmY4ZmNkMTczNzgwZGU0MWE3ZDRkZTYwY2I2CitQSzogIDllZmZhNGFlZDljNjU4ZTQzNDYwNzE0MzQ0NjhhMGI4YTA0ZWNmNzg0MTY5OWQ2M2U4ODg3Y2UyMDU1NzBjZWEKK01TRzogN2M1YWE0ZGM4MDc4YWE3N2U4YjNiN2ZlZTYxMDg0Y2ZhZDc2NDc2MmYxZWYyNmQ4ZGViN2YyZjNiMTg2ZGZjNzcyNDg3NTUwMTk3ODQ1ZmJhMmY0YzIzYzgzNWI5YjU4ZGQwYjYzNWM2NDkxMzUxMzdmMjQ4ZjVlZjcxMzU2NGRlM2M5NjZlZmE1ZjZkYjZiZWE5ZTMwOTcwNzQ5ZjhlODcyZDhkN2FlNDUzNWI3NWUxNzZlYTA0ODliOTE1ZjM0NzFkODI3ZWI1YjQ0NDU4NjQ4OGNmYzNmYTZhNDUwODJkYWNiODI2NDk1ZTUwYTNiNWRjNmJiOTMwYTMzMWYzMGMzODViYzNiMjRjZTcwYjg5NTk2ZGI2YmZiNjg3ZDk5YTU4MTk4N2NhODc2ZWEwZTc1NzY5NmIzZmMwMzc3OWE2NTgxMzBjNDEwYjM0NGVkYWNjNDI3N2Q0NDg0NTQ5OWQ2NzhlMTQxNGYxNWYzNmUxNjYzMzUxODk1NjljZWYzNTY3YWMyZTNhYjgyMWM5MWM5MzI3NGY1YzI4YTVkMWY3YzFiZjUwOTliMTBmODRlY2IxM2E0ZTQ1MzhmNjY0OWJmNzRmNzM5NGI3MDNlZjUzNjQ5ZDgxNTE2Y2IxZGI1MjE0MTYwNjVjZjlmMjc2YWI4MGM5MzA4ODk3YTI3ZGZlMzdlNWUxNDJmMTgxOWI4ZDM0OGRmNTBhMDQ2YTEyODg4ZTNiN2YyZGNjNzBmNTIxOGQxNWViYjlhYTcyOTFhMWE5MmFjNDQ1YzUxZDNhNTNkZDY5MWVmZmZjZjVhMDFlODc2YTcyYWE0ODFlYjRmMTIxYTA3MjM5N2Q4Y2M5M2JiYzJjOWE2YzI4Y2M4OWIxMWZmYzBlOTEwZDgyZDlkNjI5OGEzNjdhMGUxZTNlOGM4NjVlNDMyNmEzMTliMjI2NjZlNTI5ZjE5OThmMWIzYzhlZmI1ZmMyMWNjZTk3MDQwZmI2MjQ3ZGFhMDAwMGFjNTU1NGQ4OWU3YjI3MTU5ZGQwYjE4MDBiNzYwYjc5YzkxZWY2ZTk3MGIxZTZjNWZmNDI0NDJiMWIzYWU0ZDNjNDM5ZTA4ZWMyZjZiOTQxNzczODdjYTVjMDFkZjZmMDdmOGUzNGQyNWVkYmQ0OWQ4Yjc0ZTMxYTVlNjVkZWMxZjg3NjBmYTIyYzAwZTZmYjFjZDU1NWJlNjhiMGFiNDM1OTlmMGI5ZjRhNTRhN2NjYjA2MjY4Mzg5NWQ1ZWY2NmQyNGRmYjE2NzhjYjBkMGU4YzgwMWQ4ZTVmZmU3OWI5MTM5ZmM5NmQxMThlYjM5YjljOGQ0NDA0NDg5MzI1ZDQ1YjRhMzIwMmJlYWRjYTY2ZjgzMWM2OGVmYjgxNTk0MTU4MTkzMGVhZDI5ZmQ1ZjIxMWI5MGU3YTM5ZjBkNGZmNDhjNjJhNTQ1ZTI4YWMyY2UyOWJlZGMzNTZkOTJmYzAwMzQ3MTc2ZDc3NjIzZTBlMTgwOWVmZjNmZTYyYjc1YTdkOWRlYjcyN2Q4NjE3MmQxNGVkYmYyNzg5YTU3MTQzYzY5OTI1YzkxN2Q0MzNiNDY4M2IwNjkzYjNjZDllN2UzNzc5OTY0MTA3MjdmNWU2ZmI4ZjVjY2QxODYwYTIwMjk0ZWNmMzNmYWY5N2ExZTBmODViNzYxNDQ3ZDQ3NjFiOTZlNGRmMWIzMTJiZDQxNGNhYmNmNDk4NDk3YjBlYWQ2N2NkMWU1OTAxYmJmM2ExNmE4ODkxY2NjZWQ4YTkwN2RmODg3MjY5NTJkNGFiMzcwYTZiN2RmMjk0MmNmMTM2MTVhNWJjMTJiNGUxMDZkYzMwMTNjNjhiOGZiOTA2Mzk5ZGYxNWYxYWE5MGQ1NmFhOTc0YjFkMmIyOGMxYTg0NTNiOWJmMDc5MmE1MWM5N2NlOGExMmFmYzkzNDFiYjRjMGMzN2IxMmRjYjEyYzYzOTQ0OTc3NWQ5YWM1YzJlYzQ5NjczZGE1YWFmNzQ5M2VkNWYxZjIxMTZlYWVmNzJiYjdmYjFlMDkzZWRlMmMyNjMxN2Y0ZjRiNmFkNTg1MzQ2MjA1ZGY5MWE2ZTk2YmM2NmQzMDY0YmNlOTUyMzk4ZmZjZTg4MDcxZWQ5ZmYyNzUwYzY1YzBjMzA0MTI1YWMyY2FkYzRmZWY3MWE4MTg3MzI0OTZhODRjYTU3NGQ0ODJkNWEzYmJhMjBlMTZkZDJmYTI0ZDMyNzBmNmM2MDk5MmY3ZjYzZTg4ZjUyZWZmNjIyMjk5OGViNDQxNjcyNzM4NDM3NWY1OWYwMGU0NzUxMmVlNDY0YzMxODRhY2VhZmYzY2NmYjA2YmQxNWMxODNjNWU0ODU5MjYyODhiOTk3YmZhYWFlY2Y2ZWNiYmY3ZDJhYmY0OTA2ZGY3NmIxMjc3YzVmNWE4N2U2ODE3YjFjNjM2ZTkxZWZkN2VjY2Y2NGYKK1NJRzogMmUzMmJhMDU1NmJkZTk3NGQ3YTE5YjNiOWExZTkyZjE4MzkyNGM0Yjc0YzVkNzUxYjVhYjNkMDA3OTY3MDE2ZWMwM2FmZTkxZDc0MmZiMjJiNjNlNWU1NWIyZmNiNmM2MWE0NmU5ZGNlN2ZlOWZhMzBiYmY2NmFlZjRiODVmMDkKKworVFNUOiA5MjEKK1NLOiAgMzIzNDY1ZDAzMTNkMTAwMWEyNjFhYmZkNDRmZTY1YzM4YzlhMDBjYTBmMjAzMzVkNjU1M2RlNDkyNjk5ZmM0NgorUEs6ICBlMjJmMTZiZDRjYzdlOTRjNDZiYTMxOTYxYWY4YzU4M2Y5ZDI3MThjNjhmNzNkODUwNjlmNjA4ZTE1YmE4NzY2CitNU0c6IGJiMTA4MmUxY2ZkY2QyOWJmY2EyNDY0ZDVjZTQ0NmI1YmE2NTRiYTU4YzIyNTM4ZGE5MjZiODMwM2NhYmZkMjg0YTdiZDU5OTRhNzg2ZmE2NmFlZGYwZTE1ZjIwYzM4MmNkYWNmM2QxNDU1N2ZmN2E4MjY3ZmEwNDY3MmNhY2FiNzY3MDA4NjUwYWE5YjRhN2M5MDcxYzQ3OTlmMWZmYTQ1Y2E0ZDU4NmUwMjA0NzQ0NGMxNDIzMTk0MzQ2N2EzYWJhZWZhNTM5NTlkYTIyNmViMGMxNTM5MjAxOTc2MDE1OTY5Nzc0ODI5M2MwMjU1Njg3ODM1ODhhMzkxMGU3OGU1ZWE0MjdjNDQwN2E4OTAxMDYxYjhiOTkyYjgyYTJkZjU4YzA0YTFiMmM1ZmFkMTFjNmIzNzk4NTZjMmUwZmVmOGE5NTBkZTdlMGZjMjIzMTAzMDllMDhiMTMyYjBjY2U0ZmMxZWNiZjk0NTc0YTM4OGQ0YWUzNjY3NWQzMjk5YTk1MTU1NGViZjE4MGViMzgxZTFiNWRmOTc3ZDkzODQzMzg5MWJjNDc4ZDc2ODE4NTBiOWRjOWM1Yzc2OWQ0MDVmNWQ4ODM5ZmM5NzM2MWQ2Y2IzMDZjMjAzMDI2Y2YyZTJiM2QzOTg0OWUxZjRiMTIyNWViMjVlZjhhY2Q0MGIwMDZmMjBjNjQ0ZGI2NTBjNzVkMzhjMGZjZGQ0OGY1OThjN2I0YTYwMTA2ZTY5ZTE5Y2Q3MTI1ODljZWRjY2Y1MDg2NGVhNWY5ZTk1ZTAxZjFkZDg1Yzc1MTRmMmM5NGIyODM1OWRlNDEzMmI4OGMzZWUxZDEwYTgwYTlmYWRmYjY5MGUzZDg4NjQxYjMxNjhmMGI4OTZhZjg5OTBhZGJmMGU0ZjhlOWQzZjlkNGNkMzE0ZTEyYzNiY2UwY2M4NzM4ZTBjZmMxOTA1YmU1ZWZhMDcxZjcxMGIzMmY4ZTU4OThjNjBlYjFiYjhmZWViNzQwMDA1NjBmNDFjYjJlYmMzMmIyNjAwYjY5ODBhMmE0MDY0ZGZhYTM3OTdlYzQ0Y2ZiNzJkMzc5ZjgwOTczNzljYWQ2N2VjZGMwYzMyNDE0ZmE0MWM3MmIxYjllNGVkZjU1MThjYjM5ZmU5MDkyYjQzOWFmM2E0ZWJkNWFmZTc5YmVkYzBlYThiZjE3NDc5YTI4MjFmNWU5YmQ5MWQ3ZjRhYTVlMzg0Njk5NTIzNzE5YjY5NTdmODIzNjdjZDg1ZmVhOWRlZDYyMzZhMjA3Yzk0Y2IzNzNlMzM5M2NiNGZlMTFmOTBhMWI4Nzc5ZTRhYjRjMzQ2NjEzNmJmMjFlMmFhYjc4ZjdkMjcyNmRiNjQxNGZhNWM0YTNmNzMxM2FkMjExNmE2ZDdjZTQwYWFhMTAwMWMyNzA0ZDViMDVhZTU0YzdjYzZmNTY3MjE3ZjFhNDdiZmQwZWU3MzhlYWVhNWVhZGI1MzcxMDc1YmUwNzZjODc1MGFlY2VmYzQxN2VhN2JmZGFhYzNjYzM4YmYxNmNjMjZkZjc2MDBlM2M3ZThlNDMxZjI2NzZmYzJhOGM0M2E2YTE0MzY4YmE2MmJiMzI0MzlhMDZiZWFjMzhhMDQ3YjM3NDVlMjZmNDA3YWQ4MjNkNmFkMWMwYjZhNDQzNDFlMTVmYzliMzMxMjE0ZmZjODk2OTgyMTFiMDUxMzNkNmQzNDMzYjVkNTlmN2FiNGQxMDllNTRlNGM1ZDZmMzJmY2Y3MjMwZmE0ZTI1MjhjODYxYmIyMWNjYzllMzEwZTk0OTdlMDc3ZWE2NzU1MTBkYTcxMmIxYTVkZjU3NWM1ZDFiZjczNjJkMDcxMTgwMDM5YWVjZmFhNWM4NTczYzI0YzBmNGViZTgxYzJmODg5YWVkM2RlNWEwMDBiZTEyZmUzZDBhZjJkYzJjZDQyNDBlMzE0YTE3NmM1NTNlZmQ1Y2JhNzk4ZDlmZjFlM2Q0YmQ5ZTkwYmI4MTEzZTM4NDlkNzM1YWZhNGFmNjk0NWNjNTdkNGMzNzhkYjg0ZjIwNmVmN2VhYjExYzYzN2E3ZjcyNjBmMTIyYTk3ZGZmNjc0N2U5YjRjMTc0ZWQwZDY0ZjllZmQ3ZmNjY2Y5ODE1MTllYzU4MGE4MTgyNTQ3ZDE3OTY4YzQwMTUxZmRmNmQ1NGJjNTdhOTExNWYwNDBmYWI1YzEwMGRlYjAzOTEyMmI3ZDJiZmQ5OGI2YWRmMzhmNDJiMjk2ZWEzYjM3OGE5MDQyNTliNzVkNjA3MDNiNDg0MGIzZjVkYTA5NjIwYTU0Nzc2MjgwZTljYTllOGNkOTI0YWVkMmI1ZGQyYjQ5ODM0ZTU4MWNhZWQ1MjcxY2Q3OGNlMDhlNGJiYTQ5YjU5Y2Q3N2MxYjYyNzY2NDkxNDhhYjcyNDdmOTdmYzAxMzE2MzVkZTQ3NGQzYzIzNDkzY2E5OGQKK1NJRzogZGEzYWFkYjM0MzYwYjJkYTBjMjY1NDJlYTcxZGVmYThhMGJmN2ZiZGFlM2VlOWUxMWM4NDA4NGFkMDVjY2U3YmE3ZDk0ZGUyNWQ4NTYzOTgyNjE2YmNkYjViYjYzOTVmYWM0YTdlODRiYzc3ZTIxZWQzNmRmNzVkZWM5OTBiMDYKKworVFNUOiA5MjIKK1NLOiAgNjBmZmRiYWUwMDNmYTI3OTRmY2FiYmY4ZjViNDE2NDRmZTNhN2Y0NGVkNmM4MzQxOTNkYTA3YTlkYzVlMjY2NQorUEs6ICAzNWI1ZWIzMWFiNTU2NDkyNTc4YjNkYmQ2Y2YxNjg3ZDFmZGIyMTZhNzI1ODE4MDc5NjYzNDgyZjIyMWNlNDIxCitNU0c6IDNmOGZmMjBiYjRmMDA4MzRjODBmMmVlNjg5M2Q2ZjczYmY3YWNlMjcyOTYwMWJiMjZhMGZiMjcyYTRkMGVlYTFmYWUxZDMwNmFjMmM1ZjMyYWRkNjAxMzU4NTFkYTI3ZTRmMTJlNjRlYTVlOWU5OTYwYjEzODNiMDRjZTA1YTk4YjA0MTRkYWQ5NzFlYTk4OTQ0ODcxZDQxNWNjMmM0NmRhNDAzOTc2ZDlmMjE5Mzg5NThkNGVhOGM3OTAzYjE0ZjJhNDQ4NWZkNjlhZmIyNGFiZTEwMmQ4ZmVjMjY2ZmI0NjhiNDExZWIyMGEzMzk2NzdkODhlYjMxYzk5N2I0ZGM4ODU2MTNmMGJlN2M3MGRhZjg1NmEzZGY5MmRhOTYwMmZiYTJlNjc0OWQyZjQyNmJlZWY2ODY2MmQ1YjBjMmZkMzEzMjFiMjJiNWVjNTk3ZGE1ZDdlNmEyODhlYmQ5NDQzYzVmMzllYjg3ZGNmNGE1YWQ5ZDU2YzZiYWY2MDgwOTk2YTc3OTM2YmQ4N2RjM2NiNDJlZDRjNGQ0MjY4OGE5ZTE5MzgyOWI3NjFmZjMyMGUyYTY2Y2M2NzY0OGU3MGVlYTNhMWYyZjliOWQ1YjQyMDJmYjVhMzllOWFkYzYwOTA4NmE5YmUyYTgzMjNhYzY2OTMxYmRmNmM1MDRkMzMzNjIxMWU0NmZkZWZjNDgxZmJmMTdmNjEzZGFiMWZjNWMwOTdjOTJkYjA2MDk5MDZkNzhiMjVhNDU1YTMwNDU3MThlZmQzZTNiMTRlMjUyYjFhZTU5YzdjMzg5M2UzMTkxM2IyYzI2NGMwZmZjM2I2MDZjYTFiMDFkYzQ3ZWU4MjhhMDhlNDZhZjYwNGU1OTBkZWY0NGQyN2FhYjkzYTQwMzI1MWZjYTA3NzJlOWRmMGZhYjdhZjBjYmM1MTgxZWZkYTRkYTkxM2Q4ZWI2NDUyZjZjZWNiZGEyMDRiYzcyZDdjOTkwZjYwY2UwZGQ4M2M2MzRlOTEyMjM2MDkxYjBhNjY3M2E3Yzg5ZWE1OTMwOGQ1NWJkN2U2M2E4NTI2Nzc0Y2JkZDdhMTMzOWZhYzIxMjRjOTAyMmFiZDZmZWNlN2YyZGFlZGZkODdmYTY4M2RjMGUzZWY0MDgwNmEwYWIxOTg3NjlkM2E5OWZlODFhOTliNjg2MDAzMTkwODdhZmE0ZWE3OWQ3ZWU0NWRhOWNkNDA4MDlmNGVlOGY0ZTI1YTAxNzc1MjFlZTlkYmE4YjU2MjEyZTg4NzE5YmI3MzY3MzM2ZjRhN2JjNzEyMmI0MWE3ZGZhYTI2NzJmOTJmMjM0MDNhMTBjNGZiMjUzODhjNmIyMDA4MTA5M2Q0OWYzYmU4YTllMWM2MzRlZjdiYTk2YjZkNTIzZGQ2ZmY2MTNjMGEyM2I2MDQ1NzAyNmNkNDg1YmE4ZGI2MWQ4MGEwZGM2NTlkOWFmNDJhMzhjYWU3NzdmZWM2OGUzOWM1Mjk4NmZmOWZjMjA3ODljMTA1ODUxMDdjMDQwNDdiNjZiYTE0ZTkzZmI5MDRlYTkwZGY3YWM5ZjAxNTRjOTZmMzIzNmFjZjZkYzhiNDRmNTU0YzBjZDUxMzE5M2U1ZGZkODdlMDg1YWQ0YjM4YWE0YzVlMzZiMjQyNzcyMjA4ODgxNmVjZDJiYzNhM2RkYTAxZTRmYjNmZjVlZWM3YTY0MTczMjJiYTZhMjc3NzNkMjQ0OTVhODM5MTk0YTRhNTgyZmU1YWJkYjhiNWQ1MzNhMjQyNjI1ODkyNDFmYzgxZmRmNWU3OWZkMjY3NzY0MjhmOGUxY2U5ZTkyNmNmMjcyNzE2ZTc1ODNhYmZjNjdhOTRhYWUwODE2YzEwMDBhMTk2MTcwYmJmZjFmNDVlNWVkOWUyNjdhY2UxZTRkOTE1ZGNlNzIxNmM1ZjQwNGRlZjZmZTJiZDhiMjhiMmVjY2YzZTJhZWEwYzBkNjYyNjM5MDI3NGU0N2U3NDVlZDNhMjNiY2ZkMjFkMjg0YzM5NTM3OWRjMDIwODBmMDc5MzZiYzE1NGU3Yjk5ZWU3M2RiMTg4YmQyYTM5NGUwM2EwMWZmZTJkMWIzMzBjZWI3MjE1OGY5NThjNzE2YTgxNzExZGJmNjVhZmY4Y2QxMmY1ZGZhNTNiMzc2ZWJiOGI5OGY4NjI4ZjE3ZWY4YjJhYjljMGJiNjg0MTJmNGUzNDdhNjMzZTJmOGRhMWE1NTZkOTZmNGFmNzIxMWMwNzgwNzljMTA1NDFjMDdkYzM3MjJkMThkYWI4ZmE4YmM0OTI1YWJhNWM5NjZmODA1MDQwMzIyZGZiYmJlODdmYmZlYjE5NjFmNWNjZDQwYTkxYjk5N2U1NDMxNWE3ZWVmYzNhNDdiYjBjODdkYzIzNzU1Y2U3MjI3NTc0OTk2ZjRiZTdhYTM0NGZlMGQxN2I5N2JjNTBjNTgzOGY5OTI5MgorU0lHOiBiOGYzZTFmMzc4NWEyYTM5YmIwODZjYTQ2NWMwYWJmMGEzZTg3NDQzMjI1YWM2ZTk2NmVkOWI0NTMxYzU0YTg5NGE5YWJkMDFhYzMxYjg1NzU3ZmU3NTMwOGM5NTk0ZmY2NWY5N2NkZDkxZThkOGE5M2NmMTJiOWU2ZGJlZTkwYgorCitUU1Q6IDkyMworU0s6ICAxNzRlOTkzZDliODFmMmFmNjdlOWZmYjhlYmQ1ZGE0MTc5NjZhOWU3N2Y2NmM2NWM3Njc3MzhmZTgzNTdkMDdjCitQSzogIDNiYjczODZmMWIxY2JmYWU1NTM3MDM4MzNlYmNiZmUyZGZmZjhjODk5YTA3OTJkN2NlMjMyMmI1YmE2NDVhNWYKK01TRzogYTQwMTc1MGFmYzQ4MzdkZmUzYWFjYzI4NGE1OTcxNDVkZmVmMDI2MjllZjg3YmQwOTM4ZDQ0Mzk3OWRmNzZmMjlmY2Q2NmE1YjcxZWE4YWI3ODcyNzdlMzA1NmY2ZWExMWIwOGJkMjM4OTc5ZjlkM2IwNjI1MzhjNGQ2MDQwYTg2YjZlMzIwNDdhZWNjNTljMjM3N2FkMGVhNGM0MGM3OWZmOWZlOThjOTU4YjJiZjI1ZjJmZDYzNDI0MzI2MzZmNWY3ZDViYjBkMmVjZjE4MTgzNDI2YzczMTQ3OTg0ZDk1YmJlMTYyZTExOTcyZGRiNzhhMmE3YzM0NWM1YzBiYmJhYmE5Y2YzOGEyZDVkZDUwOWE3ZGY4Yjg0Mjg3NGE5NmU2NGI1ZDY0ZjVjNDFhMjFkMjA4ZDE0Y2VhNzA2NmNmMjJkZWUwY2E0MWFhNDZhYjkyMWQ0Y2VlYzg5ZWM4NzNmNzc5NjBlZGE2MGQ5Njc2Y2ZkMGRiZmFlYzg3MmMyYWRlOGZiYTQyODVhYWNkNTI3MTQzYWUwMzQxZDY3ZDAwNzgxMTk2NTNiNWQyM2Q0NmU2ZWY3MDI2NGIxYjA5MTM4NzA4Nzc2MjM3MTZkMGYxYTU5MDIxYmU3NGM5MTRiNDMyNDcxYTQzYTI5ZjJiNmRiZWI2YTIyM2UyZGJhYWJiODIwYjRhZGJlMzM3ODI5ZTFkZTBjMTg0ZGQwZDA5ZjlkMDFkNDI1MjdlNWQ0MGFiYmRhY2M4YWMwZjFiMmM1YzFjYjJmMjM4NzZkMmQxYjZiNDNkZmU0ODJmOWQ0NWExOGY1YzIyYjE1ZjFmZTUyMWVmNTdiMDhhZWM2YTMwMzM5MjVjNzQ1NGM5M2U2MzE5ZTc3OGFjNDk0ZmIxNDBhZTVmMWEzMWNjODMyY2EyNDg4NjUxMDA0MDYzYmNmZjhmZDlhZTkyNjZhZjUyN2YyYzMxZjZhY2I4ZjNkZWJkOTk3OGVmOWRmMDEwOGUzZDUwYzQ5MTk5MGM5MGRkOGVlOWQ2NGVhNGViZmQ3MTFjOTlkOTA0NGVjMTEzNDJjNTM4M2NhMzkyMzJlZDk3YTA3ZTRkYzUxZGI0YzFmZTk0NzM0OGRmZmU3MGE5NWM5OWRiMTQ3NTEzMTQ4MDFmMTNmYTJiZjQyZDg2NzM3NWEwOGVlOWIzYjc5OWUwYjE1Mjc4ZTk1ZTkxYTg5NjgwNjRkNmRmZDhmNTExNTQzOGNjYjhiNTE2Y2EwYzQxZGJiMTk4NzNjNmUxMGEyMzZlY2MyZGFkNTIyZjgwZjAxYzE0ZTJmYTE0YTBkNzkyYjlmYzQ4NmM2ZmIwZWZiZGYyMTMwZjAyZGYxNDk3ZGI1YWJhOGJlNjFjYTcwYjI5Mzg4ZTRlZWM3ZTA2OTRhMzhjMGQwM2M1OWJiNmEyZGMzY2NkNmRkZTFlMjllZTJjMWIzMjVhYzcyYWE4ZTZmYWI5MTM4ZjhiNmY1ZDMyNGQ0NmFmM2EzNTQyYzhiZDg3Y2IwNGZhZmM1NGI1ZGI4MjdkZTYwNjc2MmEwOTdiNjIyNzk5Y2E4MjdiZGE5YzFjMGJiMjY3ZWJhODI1NGE4MWM2Yjg1OGEzNzViOTRiZDA5ZjM5ZWViODhjYjE0YjhkNDZlNDc0MGRjMWFiNDJhODk1Zjg2ZDJjNTdmYzI4YjA3YjdmNjBmYzRmODg0N2I4YmM4YWQ4M2EyNDgxYTI4ZjI5YmNhMzUxMGZmOGJmMWRkNzU4MWUzMzU3MTY0ZjRmZTkyMGY5ZGU4MzkzNzZkZTA2NDkwMGRjN2Y4YmNmNTExZGM1NzJlMGYwZjZhNzViOTI5Nzk3ZGE0MWM1MmVhZTZmZTEzNzUwY2UzNTFlODc2NzYzMGJhZGY2ZDdkNGVhYjkwY2QxOTA0Yzk2YzA0OGE5YWNiMjEzYTllNWI4NjQ2MTU3MzhhODRmMjIyOTg2YWMyMzU1NGNmNGNlNTRlODBhYjU3MzNjMDY1YjgwNDU5OTIxZGQzZDgzNzJkMGU4NTk0ZDQzNjQzNTFiZjA0MWMxNDZmYThkMjNhMTkzZWI4MDdlY2UyM2YyNGFiNjU5NWU5MzJjOWNlMWE3NTliZjc4ODkxNGRiMDA4ZTg3MDk4ZGQ4MTQ2NWUyNjEwNjQ3YWMzOGUwODg2NjZmNjBlYzVkMGUyMTczMzIwYTQwY2Q5ODVmMGUwMGRiYzJiNDU3MDcyNzQ4M2E4YzI1ZjZmYzFlMDkzYmI1N2NjYWZkMWNhMjAyZjI5ODZjN2M1NTQwYTdjM2UxMGM0YTZmYzI2ZDFkNjJjMmNhNWFmODMwNWNlZWJlNDJmZjk2ZTdkYzU0ODIxNDM3NWU4YTdmOWY3MTJiYThiZDg3NWU0M2NhMTBjZjliMTgzZjBjODUxOTUxMjkyODUzOGE0NzhjYjk4MjU5YmQ4YjNlMzM0YmNjNDYzNTU5NWNhZDMKK1NJRzogZTYwN2JjOWE1MzYwYjMxZGE1NmJlMWM1NDRjMjAwMDI4NDk1MWQ4Njg5ZjRiNzIyYmM0NjczYTBjODQ4OWI4NDQ4M2VkOGU3NmUyOTdlYTA0NmU4NWIzN2JhNTYzMDU4NWU1Mzc1NTY2YTE4N2FmYjU2OTY2NjFlNWJmZGMxMGUKKworVFNUOiA5MjQKK1NLOiAgZTUzNzE1ZmVjOWQzYjIwZTljMjk5MWU1NGI1ZWIwYThjYzgxODc1NTY5Yzk1ZTIyYTIwMDEzNjAwMjE3NjAwNAorUEs6ICA1MzUxODk5YjY5YjIxMTZiYzdmOGE4ODE0ZDFlNWI5ZmM3ODU2OThiZWJkOWFiMTQyNzdjM2VjYzAxZWY4YjFkCitNU0c6IDg0MzFjZDE2ZDVjMDkzNzc1ZTE4YzA4MjUyYzQzZjk1YjEwMTdlYjcxMWZjYWY3M2UxZTAwYzBjZDZmMzQ0ODc0NGFiOWIwZTY0MzM1NTE4YzQ4M2FlOTRkZWI5NzY3N2Y4MThmMGU4MWE3NDkwNjE1YjcxNDFiOWMzNWY4MDU1NmU2OTcxY2VhMjhlOWEzMmMzMjhjYzI2NjlmY2E1YjEyM2NiNjYyZGViYWIyYjk4MTU3NzY0NjY4MDcwZTE4ZWRmNzYxYWUxOTZiZDRiMjQ0ZmVhN2I3NDk4NDUxNmJlMmMwMDczOWU3NmU2YzRiNjIxY2IzOTgzNzY1YTIwZDg0Nzc4ZDVhNDM1MGIxNjhmNmEwZjcxMmE5ODIwYTg1YTYzNmZhZjkyYzc4OWM0MjhjZmQyOTYyZWQyMDdjM2FjODg5OWMyNThjYWMxYWRiNTE1OWY3NjRiYTM3MjI5YzVjYmY3ODNmYzlhYTRkMWVhNDZlY2M4NWZlMDk2MTQ4NWQ0ZmM1Y2IyMWRmMDAxMmFjOWI5NTUzNzNiMTQyMmU1MWFmYTFjNTUwOTg4ODYyYzg2MTMzYjc2MGFhNjMwZmMwYWNlZTg5ODkxMTdkMWRkOTZlM2U2Mjg3YjY5Mjg3YzU5MGJkY2E5Y2JjOGVlY2VmMjgxZWU2ZDFjOGQ4ODgyMmJmZWE1ZmEwZjUzMGYyMzI3ODA5M2M3Yzg1YTBkNDRjM2E3NzQwNGVlNzlmMWM4MzY4Y2Q3MzIxYmYxNDhmZGE0ZGNmMmViMDdlNDYzMGVhNDIyNTg3NTg2MzcxNzgwNTE0NTM2Yjg5NGM1MjRlNmI4M2Q1YTc2YTE1YzgzZTk1YWIzMTRlMDdiMzRiOThjZDk5ZTA3NzBiNGViOWIzZjNmNTA1YmFlOGEwNmY3Zjk1MDI1OGQ3OTA3NDgxMDcxOTVlYjRmNmI4NDg0MGY4YzA1OTA3MjczOTZlZDE0ZTNmNTMyMzk0NzZjNGQyYTcyNjliMmUxZjk3MmZiZmYzM2U0NzI0NDI2NzQ1ZWM4ODZhMzI5MTYyOTVlNzBkNDY4ZDA2YzdkYmI1ZmY5YTM1NGUxYWM5MDNiYjQ1Y2E1MjZmMDhiNDlhNjVlODIyOTdkOGRkM2ZiMjVhYTQyOGY2NDM0NWJjYTk3NDBkOTA3OGRhYzllMTEzOGM5MjFiZGQ3NDg4MTY3M2Q0OWQwY2QyMDA2ODExNzIzZGUyODdjNmM5NTgzZTQ1NmEwMWFiMWEzNGRmYTFlYWE5NjNiNzFlOGJjN2ZhOGE5OGNhZDRmOTQxZTRiMzdiNjBlZWY5MjNiMzI5NDg4MjM1MGIzOGVhNGVhYzBlOTIzMmU5M2M1MzJkYjVkN2VlYzhlY2ZhZTY1ZTA4MDQ3MzA3ODc3N2RkZmRkMTE1MDhhNmU1OWYwZWJhYTNmNjA0NDFmODJhNzFhNzNjODRiY2EwNmEzNzFmZjVjOWY3NzIxM2EyZGI3OTVkNGE4ODk3ODIzZDg4ZmQ5MmFlM2UwNTdlOGJiZDgwYzk5MGFmODM4NmJkZjI2ZjEyZDk3M2M4YzVmZjllZDZmN2IyZDhlNjE4M2NmNmU2OGYzYmI4OThmNTlhOTNlYzRkZTNiZWE2MDVhNWQ4YjE1ZGZhYjcxM2YzNTg1YzQ4ZGM5YTU3NjgyNDJiMzMxMDE0MzgwMzBlNzA0NDg4MGQxN2MyZWU4NGY4OWQyNmExZjdiMTk4NjE5M2Y5NjYzYzU4N2Q1MGNhOWRkZjYxODZhNTE3NmFmZWYxYWRiMjQ4MWI3OTI1NGI3OGQzYjM0YzY5NzkwZWIyOGI5MGIxNDYxMTcwYzNkNzM4MTgzNzZjZGYzNzFhZjBhMGZlYWYxNGZkZjcwMTZlZDZlN2YwOGMwYzE0YjUyNzA1Yzg2ZDRmMDAwM2I1ZTQ1Zjk3NGMwNjQxNmNjYjVjYTNlOWQ1MjlhYTlkNDE1YzI1YTQ0NmZhMmQ2OWU4MmY0OTk0ZTU3ZTkyMmMxN2MxYzM0MmRkNzI4MWU0MTAwNTJkOWU0YWExYjMwOWI3ZDQ3MGQ0NThjNjYzZTE3ZmYyNTAwZDBiYjhlNDZhOWM0MzY3ZTA5MWNhZjg3ZGRmYzA2MmFhZTA4YTY1Y2I5ZTBlYWE3MWM5OTQ1OWM1ZTdjYjExMmEyZWU5OGE1ZTRjYmVlMGRjNTIwZjg3YzMwMjJkYTY1NDliZTFlZTcwYTBhNzNhZDg0OTljOTdkZDA2YWExNGM5ZmQ4NjI4YTkyY2E2ZGI0ODczMjJkYjk1OThhZGExZmNlMjhmNGI5ZmMxZDNjYzM5ZGNmMmVkMWRmM2Q4NjJkODdmNTVjYzEwMTZmYjllNzNlN2NjODk3Yjk3MGQ1ZmYzNWFjZmViMDVjMWM4OTE5MjgwOGFlZWJmYjJjZDE3Y2IxYzk0ZmFiMDU5ODk4ZmVkYzJmYmQ0NGNjZWYKK1NJRzogM2QwYWRjZTc3YTRlMDQ2ZmNiOWI0OWFkNWU2YzY4MDljOGFjMzM2YzczMzQwNGU1ZDNmMDE1YzkyMjVjM2RmNDZlZjIxZWEzNGNmZmIzYWY2OTk3NGY4YjdlYWIyZDIzZmNkNWExZTE3NTNhNDAyM2RlYjM4MTg2MjlhOThhMGIKKworVFNUOiA5MjUKK1NLOiAgYWJmZDY5N2JmYmM1YjZmZjJiZGZmM2JjZTFkNzc3ZTA1ZmJlM2VjOGI5NWNlNjkzZDYyMzkzMTIwOTMxM2Q0ZgorUEs6ICBhNzA5MzIxYTAyMTBjYjgwYWI1OGJmOTU1ZWNkZWI4YWFmOWVlNGMzNzVmOTU5YzUzMDg5ZDQzNzQ4OGMwODJkCitNU0c6IDg5NmI3YWI4NDEzZmZlNDM5YTJmNDQ4N2VjNDlkNjRlMzFjNzRmNTBhYzgzZjU1ZGE2MWE3MDAzYWE3MTZjMmE5ZGY2YjQzOGU2MmY1M2Q4ZjAxOTJmMzczNjMyNDc2MGQ3ZThjNDRhYzBiYWNhM2FlMmE2ZmI5M2YxM2Q5Njg4Njc5OWZkMmM0NTUxYjBhYjM2ZjE3MzA4NTU1NTEyNjVhNWEzYzNjMjFkOTUxNmEyMzdmNWRiYzFjOGU3Mjk5OWI3ODJjNWNhNDFhNGY2ZTkzMDhlNjRhZmRlZTBiZjQ3OWU1NDZiODljNTFiYzVlNGY3MWU1N2ZiMjRjZTQzN2E4YjgxYjkxZGM3OThiNWFiMzZmMjlhZmQ1YjQ4ZTgxYzE3NmFlNWVkZjk1MzcxYmEzMjQ2ZmI0Mzk0MDViZDEwZWVkMzY3OGUzZWM2MjMwN2EzYjNkYzFiYWRiYTA1MWYxNjc3NGI4NTA4ODE4OGMyYTllMzIwYTE2MThkNWYyNmNlOTRlZTJiOTMzYzMwNWY2ZDk1ODQ5NThlZWEzMTU2YzNkMWUwZWYzOWExODYyNzVlZTYyYzQwZjNjMWFjZDE1ZDhiZTZlMDc0MzUxZjUzNDljZTNkZjY5NTE3NTA1ZjQ1ZmEwNmE4MTVjNjljYTE4ZjQ1MGY0MmI1Y2Y0ZWJkOTkyNjg0NDVlMGY2ODEwNGE3ZGVlYjBhMTE1YjgxN2I5OWUxYTczZTBmYTlkODdkYjcxZjhlYzk0Zjg3MDhjOWJjMmU2MjJiOTYzMzY1ZWJjZmI5N2NmZTczMzI2MzAwNzBlOTY1NGVhYTYwMzYxYTQ1ZDQwMmRjMGFiMjk3NjY1MjQyNjY3ZmJkOTk0MGY2Y2QzMzE5NTI0NmE4YzI4NjlhZjc1OWE4NjJkNGI2NDFkYjE0NGQ1NzMyMzY2YjIwNjM2YzQwMjc3ODdmNTU4MDI3ZDc2ZmNiZjg0MzJlYjkzZTZkMTQ1NjdkZjhkYmYyMTFkYWViNTY1NWRiMTBhY2RkZDA1ZWNhMDZhY2NlZTlmZGE4ZDNiNzBjYTFlNmRjNTg3ZmE0Yjc4ZjYzY2Q2NjNmZjAyNDM4NzA1NzBmNGRjYmFhM2ZiNjI2YjRlMTEzYmRlNDdkNWM5ZGIyYjRiYTZlYzZkYmY5MThhYzA1Njk0OWVmM2NmY2IxMTU1NjE2MTU3NzFhMDM1YTQzZDMzYmEyNjUxZGJlYjQ2MzQ4MjYxY2UzYzRjOWYyNDZkMjNmOTRkYmMyZDBjMTliOTIxZTI0Yzc3ZGE1OTkyZjFiNGJkZjJlZGVhNDk5ZjU0MTExNjhhYzBjMTJlOTZmM2IxNWQyZTEyYWM4ZDdiM2VkOGQxZTA3YzQyNjdhMjVkM2EzYzM1M2E0MjA4Yjc0MDYyNzhhYWI5ZTcwMGY3YjIwNmY0OGU2ZWE3Y2M5N2U1NTRmMTVjOWJlMzQ5ZGQ5MTUxNGRiZThkODg5ZjJkY2JiZmExODJjOWZhZjU4MDdhNjliMmU5N2ZhNzcxYTZmMjMxYTRjN2IzMWQxMTdiOGVkMGU2MzBjZGYxM2UwODJiYjRmNjNjM2Y5YWNiMzU1MzIwNGNjZDc2ZTE4MzVjNDZlZWMzZDQzYzU2MWJiZjE3YzkyMjE0YTZkYjEyMTJiNjAwM2NmMmNjMjZjN2FlNjc1ZmNkMDUzYjk0N2U3MjJmOWU4NTc2MmNlOGExNmU0NjU0ZWM2MzQyZmM2NDZlNWNhYjQ3Mjc5N2VhYmY2NThiYTRhZmQxNDJmYzhmYzRjOGY5OGYyM2MyNGRjOTk4NDdhZThjZWYwODc5ZTFhYjNiYjgwOTdlNGMzNTI5YWRkMmQ4ZThlMmMyMDY5MjEwZjUwYWNlMWFlMzJhNmM4ZTYzODRhMmJmN2Q3OWM2NmM3NDYxNDljODRhZDc1YTNhMTc2ZTQ1ZTEzNmQ5NDY5NWFlZDRiZmQwOGI0MjZlYThjNGI5Mzc5ZjM3NDI1NTBlMWNmNWFjODRjMTgxNzRkNjgwZTkyYWYyYzE4NzRhYzFjMTNkMjgyMzJkZTE5Mzc2OGU1NjE5NDdjYmQ2Yjc5ZTliOTlkYTY1Y2ZiNzRmZmIzMmY3ZDNkMjAyNWM2MDc2M2RjMDdmNTU1MzliNGQyNTNkZTFlNmMyNTgyM2E2MjU4YzdhOWNlZDE1MDFkY2UyNzg2ODk4YTNlMDVjOWJmZjhmYzViMjEyNWQwZjQ3MTA4OGExMzRiNDg3M2M4ZDU1YzA0NDVmNmNhMzk2YjNkN2I0YmMyYmY1YzRkMjI0MGRhNDE4MjkzYWY2YTNlZDg1M2RlZGQzYmY2NjhkOTM3YjM1YWEwYzJhY2JmMjM3NjZmOWYzZTk2ODI4NDc1YWIwODY0OTY2MTdhNmU4MWQ2NTM1ODliMmZlNTBiN2JhOGYwY2YxZTVhNDRkOGQ2MmYwODM3N2FiZmMyNjI5NworU0lHOiA4YzM2YjVhMTExYzVhODExOWYyZDlkYjU3ZWJiNTkyZGFlODZhZDRiZjY3OGMxNDkyZTI2ZjNjMTBmYmUwM2YxMDVjYWUwZGM2OGI1NTI1OWI5YjU5ODkyODlkYjMzZDk1ZDJlZTZiNzU2Yzc2MGY5ZDNhYTBlNjhhMTg5ZGUwMgorCitUU1Q6IDkyNgorU0s6ICBkY2ZhZDU5ZmM2YjY5NzEwOWU3MjdmZjY2YTVmZTkzYTZhMjI2ZjYzMWE2NGU1Nzk3YWQ4ZDhjOGI2MzU4NzM0CitQSzogIGU3OWY0ZjUxMTM3MmUzNTVlN2U5ZTBlOGI1MzQ2ZmRiY2QyZGYxZmM1YzNhMTg5MGQyN2ZhMWZhOTI4ZDI3YTYKK01TRzogN2Q5MmRkZDgxMzNjNjFjNjEwYzEzMDhjMjNhZWFmOTkzODg0YTRlNjdmN2I5NGJiODg2ZGFkNTA5ODY5YTkzMmVjNGEyN2Q0MTBkMmMyOWNhN2FlYWU2ZjkyODBjZjZjNGIwNjdlYzc1MWU1ZThjMzlmZjQ0NGQ0MjJjZWFiYWUxNDVkNDJmMDQ3NDUzZGQ0MDJkMTc5NzQwNTAzMzQwOWU3MmNjMTlmNzkzZDVkMjY4ZmIzZmQyYzExZWEyY2IwZDcwNDM2ZTE4ZjllODhhMDE1MTVkYzg2NWY2YTFlYjIzNjkwMzI4ZmQ3NWRlMjYzMjFhMzhmMTIxOTdhOTcyMDFiMWQ4NDUyOTQ0ZmJjNTQxY2I2OGM3N2Q0OTUxNWRiNTMyNmYyYjFkMDc2M2VkYTA2ZDI1MGNlMmE1ZTBiYmQ3ZDE2NzZkN2Q0MWZiM2FiZTg4YmRiZTM3MmY5NmJmN2JiNTI2ZDZiNjVhMjUxNWU4M2E1NzcwNDViNTQ3OWIzOGI4NTJmZTRhYjAxMWNiZjIxYzA4NWVmNWYwYTdjMWJlZDc2NTcyYjBmODYwMjI4MDY3YTg5OWY4OTVhZTdmNjI1NmViNjUxNDA4N2Y5ZDZmNWMzNTU5NmMxZjQ4MGM3MzExMzU0NmNiOWNjMzBmNTZhYjA3NGE5ZmYyOGFjYWI3ZTQyNjUwYTk2MWRhMzI1YWM1YjY1OTRiODFjOTMyNTBhZTdkMzkyNjdhMTljOTc2MjU0MDdlZGRhMDQwNGNiZTVhMzZlOTU5ZmM4MjBiMjdlZjVjYWQ3OTZjMTFlYWZmMWMwZTJmOWQ0YjNjNjQ5MTUwMjE5NWRlMDM2NTliMzY0ZTRlODdiMmIyZDczM2VjMjVlNmY5YjYzZDVmNjkxNzllMGQyN2JkNGFlY2M4ZjEyYTUwN2E5MWJhYTQ4ZDk5YjNhNDI2Y2VjZWJhZWYzN2Q3MzYxMTA2YTg0OTA2NDQzMDlmNmViNGQyNTk2NDQzYjZiMDExOGI5NDVhY2VjYzY0NDNlYTYxZmNkMTU1YjU0MzI1YmMyYzMxYmUwMjUwZjk0ODJlMTNmZDhlYjQ0ZTJhZWQ3NmJlODEyYWY1NDUzY2I3Zjg2MzI0NThmYzhhMDJhMmY0NTQ4MGQ3OWIwNmM3ZGRhMzhiNDY5NWQwOGI1YTQzMDUwNGYxYWUyMjc1YjA1YzkxZTc5OWQ0NDcwZjM4YWJlNzc3MzZkZmE4OTVjMTk3ZWE0YjYzYzJkZjE4ZWZlYjE0MTg0ODM3YjhkZGY0ODkwOTUyMGQ5MTA0NWI5ZDk2NTVjMjI1YTgzMTczOTYwYjRkN2NkMGQ4YmFlMzAyMzc1NTdmODY5NzA4YmUxMzhhZDUyNDZjODY2YzZjMDU5ZGM1OTdhYmZkNDk0MzIzNzM3Njg5NjczNmI5N2I3ZTAyODllZjliYmQyOTQ3Nzc0NWNiNjBmNDYyMDJmMWRlOTg0ZjUwOWIxODA4ODMzZjU4MDE4Y2RlOGMyNmJlZjRjMDA1YmRjYTM4NWIwNTczNTExMGNhMDJlNTYyYjUwZWRkZmY2ZmRlOWZiYjhkMDMwY2VkZjcwMzFiYmViMzJiMTJiMjQyYmU0OWZkZTAxNjBjMWZiZGU5OWIwM2MwNjJhMWE0NzA2MjM0NWM5MmUwYjYwNGQwODBmYWNjZTkyNDM0ODE1MjljNzA1OTdkZmQ2NDM4MmNiNTQwNjkxYjU5YjcxYjA5NDMzMmJhZjBiYmIxMjViNjNhNDQ2YmI5NzQ5MWMwNDY0MzI4Y2FiZDc2MjdjNDZmMzkyZjNiMTI0ODIyZjIwMTNjNmUxNmQzY2E4N2NjNWJlY2Y1NmIwZmM2ZWIyYmY5OTIzYjMwMTJiYTJiNjEyNTBhNjMzYTRkMmVlMzkxMjU2YzUyMDk1NzM4MmFmZjk3MGM1ZDIyMzg1YzMzNDRjNmQ0YjQ1NjE1NzFjOTYzMjliZjc1NjE1Mjk3NTE2YjlmMmNlYjlmOTk3YTM5NTIzYWEwZjU4YjQ4ODc3MmQ4MmZjMGQ3OGM1ZGQ1MmVjZmE2YmZhYzYzYTc2ZTE0ODA4OGIzNmYyNGE4OGU2ODM4NTQ5NmRkYWRmMzAyM2Y3MmQ4N2MyZWZhMjZlODc3ZDMyZjFkYTk3Y2RiNDJjOGYxNTcxODk4OGU0MjhjZDAyZjRkMDk1NDNiZDBiZDViMmY0MDk5NjNkMGZhMzczNTMxZjc4YjU5MmJkMTM3ZWVhZWEwYjRlN2Y5MTgyMDhlMWQ1OTAwOGE4YWY1MDU4ZjVkOTIzYzRmMzJkZjE5OTkwZjEwZGQzZjBlYjIwNjI5M2IyYjM0NDNmNGE1ZDJkY2M1ZjdkM2JiYWY2YWY0M2ZlNDVmNWRiYmU1M2VjZjRiZjFiNGExM2UyZDQ2ZWY4MDI5OGQ0ZjAxYzQwMmUyMTBmY2I5ZmYyMDg0ZWMwM2U0MjAwOGQKK1NJRzogMDUyZmY3OTU0MDczNzQ1NmM2YTQyYzQxYzk3ZDZiZjUxN2I4Y2YyODliYzc4YjUwM2RlZTZhMzBlZjUxNjhiMzhmNzViZWFjYTFlMTRkOTcxZjg3NzNlMzk0MWJkNmRmNWNiOTc3OGRlYTEyNWE0YzRmZTAxMTZiNzBlZTg0MGIKKworVFNUOiA5MjcKK1NLOiAgNjk2ZGM0ODFmNjE5YTk0OTg1NjNjODNkMGQwZTU1NTY1YzE0YTA3ODQ1ZmU0YTY2YWJhMjI0N2IxMTNmZjhlZgorUEs6ICBjOWQ3MzdhYmM0YTllNzNjMTQ5ZWFkYzE5NWE4Mzc4OTlmMmNkNTAxOTM3M2MzMGVjYWY2MmU1ZjhlMTRiNjQ1CitNU0c6IDJkNGIzYWQwY2M5OWY5ODNlNDFmOWI0OGM0YTgxOGVmZjc1ZmNmYjkzYTEyMjllYzI3NDBlZDE5YzEwN2Q2MjFkZjc4MDU4ZGU3YzJkZDcyNTFmNWZmNDU0MzQwODY1ZjZjODZkYTY1ODMxZjY2NzJkYjIzMTcyNmZkZmU0YjllZTMxNWQ5M2M3MjQ0YTkyMGRmMzcwNTRjODI0NDlkMzEwZjg5MjkzMmRkYmFkOTRjYzliYjM5YWM4OTM3Y2M3NmM5NjUyMWQzZmRjMDI4YmEyMzQxMGIyOTAyM2U4MTM4ZmQzZjUyNDMxOTg4NGVlNWRhZDBkMjM0YzhkZjY2MWY4ODI0YmU0NzdlMjE2OTlmNjM2OWIxNWZmM2ZmZWZjMTUxYWE1NTViM2MzZDc2YWRiNDVmMjU2NzJkMzgwZDQ3MmIzMTQ4ZGFiZGVmNDI0NWI2OGU4Mjg1NjJmMjVjYzViODFkOWJiYjI0MWJjYTlkMTkzNGVhMzUzZjk1ZjdkYmYzNjQ2NDMzZTgxYTM1NGUxZTIwNTZiODFjMTVhYTFmYThlZDdhOWQxYWY5OTIzOGNkNWE1YWU5ZTg0MWM0OGRjMzQ4YWUxZGU3YzQxYWNhMjMzMjgyMzZiYzM4YjQ3ZjQ3YzczNmIyNTdhMzA3OGQ1N2Q1NzRiNjQ3YTdmYzhjNGQwMWJjNTAzMDIxNTBkNTAzMmJmYWNiMDRiYjBmZDE1NWQ5NGQ5MjA2NjY3NzIwZTE4MGE2NDVhZjQ2MjQ1OWUzMzI2ZDQ2MGRhM2M0OGU3NTcyNjc4ZTE5MTkyNjhkM2U0NzQwZDYyYTI2ZjdjODU1OWMxYzQzOWI0YjBiMGM1OTQyYTYyMGNmZGI5M2NjNjhhYTE1NTIwZmYyODY0MjY5ZDdhMGMxNTU3ODBhZGM2YzE4OGUwYjU2NWZiOTU5NDMxOWU2ZjUxZDE1Y2FmNmIyODBlNzE1OGYyNTc5OTQwN2YzYmEwZGQxY2VlYTY0YjkzMjZkMmNmZGVmMDE3ZTFmMTcyZjRkZGUwZjdlNDYxMzUwMWFmMDFlZTBhYzMwMDk1ZjQ4YjU5NTkwOTAyYjFhZWNmZTA5MzQxMzkxOGQ4MzVhZGY5NjJlY2YxODU4MGQxNmY5ZmQ0ZjZmYTEwOThhZjFkOGEyYmMyNGRjODZmNzFkMGE2MWZmMTUwMDEwODY3ZDA4Njk4N2I1MWRkMDMwZjUwYWI2ZTM3NGI4ZTAxMTg0YjNlMmIyMTRhYjFjN2ZkZmFlZGJjNTQ1ZTM4YzNjZDJmNjk4Mjk3OTU0MWZlMGZmODhiZWQ2NzUwNmRhOTU3MjdhZjFhMjAzOGYzMjQwYWU1YmZkMzBlZTA5MjEwZTAwZmRjZjJhMDY0ZDVkYjQ2MTQ5NDZiZGE5NzJjNjcwMDgxYTZlZTZhMTBiNjNmNjczYzgzYzkxNWNhNTU3M2UwZWQ2ODdiMDA2N2M0MDA3OTJhOWJjYzMzNDRlMGU0M2Y1ZGY2M2ZlZDVlZmE4NWU5YWFmODVlNGQ3YTJjNTNhNmM5MjgyOGUwN2ZlNjNlMmQyM2YxYmRmOTdkODRhZGMzNmU5ZmM5NWZhYWRmMDNlMDZkNjVhMTljNWUyODVlZmZkMGVhMGNmYTgzOWQ1NWEwYTBkYmY2ZGEyODc4NWM3N2Y1YzA0YmZkNTk5NzRlZjM3OTNjZGMzOThkZjdhMWJiYzljZmNmYzNhNTFmZmE5YTIwZDYwYzQ3YjI0NWRhZmEzZTQ0NjIzY2Q3MTFkNzc2MmM1MGE2N2Q2NTBjN2U4YzRmZDNiZWJjMGM0OThkMjE1MmFiOTgyN2M3MDBjN2IyODYxNTY1NzQ5YjU4NjRmZWM5NWI3ZjZiMTk5NGU3OGQ4Zjg1ZDA2OWNjMTFmODViZWQ5NzEyZjdhOWYwNjBiMGJmNjc1MzJlODhlYjlkZjNlYjRhOGQyZmJiYWE4NWVkYTkyNmQ4MWM0OWZiODZlNzM3MzFiN2VkMmExOTA1MDc4NTEzZjdjYTBmZGNjM2IxZDU3NmU2YTYwMTI0YzQ0NjE4ZGYxODkwZTE2OTc5NDk1NmNiMWVjNTAxYmEyMDQ5OTcwYzhlNzRjYzE4MDA2NGMxODQ0NjhiZTRmMDg5YTNhZTIyNjNjODU1ODYzYjYyYzI4MzEzZGRmOWNhODViZjY2YjA4YTI2NDE1NWFkN2MzMjgyMzhkZmU2MTRhMDdlZGU5MTU1YTA5Y2NhZmY5MjI5MjI0OTM0MWJhZWRjYmUwZTY0NjZlMmM3NjA0NWU0NmRhZDJmYzg5OWExNzgyZTAwOTk4ZTc5YTgzYWJmYWU5YjcwNmY3MDdmNThlNzMwMjAzZTFkMmNjYTAyOGM5MjJiZWI2ZDE1N2ZhN2E5ODEzMmE5MjFhM2RhMjFmMmY3NjliYjZjMWY1ZjE5ZTllODVhMTNiNzgxYWYxNDEwMzlkNTE0ZWUxMDcKK1NJRzogZGVkNWQ5OTE5MzVjZDFmOTM5MGYxZTg1OTI5Y2ExNmRhYmZjODNlNjVlNDMyNzJlYjE3NTE2NzFhYTMxOTMwYzcyODU1NTM0MTQzMGNlN2M4MDQ4NWRlNTgwMDY0MjcxMjlhNGQzNGZkNjgxZDUyZDg0MGExNmJhZmExNTMwMDIKKworVFNUOiA5MjgKK1NLOiAgZjNmOGQ2MmZlZTNhZjM3NTY2OTYzMGNiZjA2M2JmYTkzMDE4OWFmMTM2Y2Q3NTkxZTI0ZDU3OGQ3MzY2YmY2MQorUEs6ICA0NzE0YzYwNGFhOTVlMTgyOGEyODM2N2JhNzg3NjBiNTg5NjQzMTY4M2VlOTk2Y2ZmOTY4NzE3NzMyOTE5NTNjCitNU0c6IGUxZGQxZmZkNzM3YWM2ZGMyNGIzYjljZTNiNzllODM1YmY2OThlOTMxMzAzZDgwOWNlYTE3ODJkYzNhZjYzYTBkNWU2NzM5MjgyM2QxNDM5ZTdiNmUzMzdiMDFjOGIyMTU0MzRjMjc4MmIzYmU3NDQzY2I1Yzg4MWU1ZmI2Y2YzYmIyNDQxMjhiNGRhNmE2ZjQyYjJiYjJjZDc1MTI5ZDU2NDE4ODU0MzQ4YzMzOWRjZDkxMmI0NTU1N2E5MTVlOWZkN2YzNzkxNjIzNjUxMGNiNmMzMzFjMTQwYjg3ZDIyNTMxMTYwMGI4ZDEzMmFjNDc0NzM4MzljNzIwZjlmZjBmOWMxZGNhYTg1ODE1YTlkMjdiOTc1OGNkOTFkYzVkM2U1MzMyNmZjZGZiMjczMGU1MmJlMzEwMzk1N2FjODkxNDlhNGMzMDA0Y2I2MDM4YzBkODBmYTcyYWM2MzBkMzMzYmU1YWQ0YWRiNTg1YWViNzFhZWYxY2RmZDU3YjkxNWZhYzRmMWFmNzhlN2E1OTdmOGQxYmEwNjY3MmIxOWMwYjY1ODA4YThhMDcxZmY4NDA5MDM0Mzc5NTg5ZjNkNDEzMDJkMmQzOWIzMzE4ZThjMDA5MGZhMzZjYjk1ODg1N2ZmNWIyMTFjOTY2NmUyN2JjODk1YWI5ZDAwNmFiYWY1OTUwYTAzZmYxN2VhOTgyMTc4YTQ0NmRkYTI0NjZmNWE0MGI4Zjg5NTUwOWU0ZjRkNGE2YTI3Mzk5OTdmYmQ0OTY4Zjg5NDM2Y2VlM2Q4ZWRiOGE2ZGE5YmQzZDU1YjA2NjQ5MGU4MzM5Yzc4OTM1Yjc3ODgzZjk1YjkzMmZhNWU2YmI3ZGYzMDNiZTMwZmE1NjcyNDlmZmZiNDczYTFlNDY0MzIyZDdjMTAzZmU4MjI0YzdlYzU3YmQzOWJjZDAzMGI5Njc4N2FlYmNkMjBlOWFkNjUxY2ZhMmJmMDRiYTcwYTFjZjY0OGUwYTU0NDk1NjcyMDJhOTM3YTQ1YmVjYmI2ZmNkZWQzMGNmOWI1Yzc0OGY4ODJiNWRjMmE0ZDY1YmU2OWZkN2Q5YzM4MWU4M2QwZGMyYTM0YjZkZWU5MTIyMGJhOTA2ZTUxMmZjZDYzMzY4ZTJjZTczM2U0NjZiNGI4MmI4NGZiMGM3MTdkYzg5NDVjYWY2ZDQ2YWMxYzJmNjQxOGY3NzI5ZWY0YzM1ZTQwMjQyMmQ2NGIxYzNlYmQxYjMyYTMwZmM0YzVlZWNlN2Q0NDA4ZmY2NzlmZjAxYTFjN2IwM2NhNTE3YmU1MmU2YWU3NjUwZjdiYWQzODkwMWUzNDhhNTU5M2JjOTk4ZjdjZjJlYTk3NzI5Y2IwMDRmNTYxYjNiNThmZTU5ODA5YTQxZmQ0YjNiNzY2NjA5MDZhZDllZGEyM2JmOTI1NDM3ZWY0NTJiMTZmNTQwYjNiODBhMzVhNzA5M2MyNzM0ZWVmZTZmYTk3ZDg4MWQ3OWVmNWI3NjdkOTg4OWYxMTg0NzdiNzNmNThhNGMwY2IxNWUwYWM4MTAxMTIwNTcxY2EzMmNlODcxZjMwOGFkOTA1N2E4MGM4MjgxNTRmYjFiYzJiMjAxZDBjZDEwMDZlMDIyZDQ0NGRjOTNmMWJjZjIyNGRiNzRhNWIzNzNlMTUzZTg1MTg1NDk0OGI2ZGExNDdiNzMyODdjZjE3ZDFmYjcyYjQ4Mjc2MTExMDM2MDljYWIyYTE3NzllOTc5M2I5YTcwODIwZmM2ZjM4MjhhNjRjOWVhYzM1ZWY3YWE3YjE3NjA5ZDhlZmY4YTllNTJlNGViY2Q4NmIxZTE0ZmQxNDBiZWE0N2M2YjhkZGM0MWU4Y2QyNzFlYjkyMjg3Y2JkMDYxMDUxMjI0MmY3NmExZWYzZWFjMWU0YmJiYzFhZGFlNTAwMzRhN2EyNjQ3ZTA4YjJmZDIwYWE5M2E5M2NiMmZmZGViZjJlNDYxZWNjZWZiYmQxZmU4OTRjZTcwYWRmNzkwMTczYmFlOTZmNWE1NWExODg3ZTlhZTA5ZmNlZDFkNDMwNmMyOTFjNmIxOWVjYWM0NzA3ZTllZjcxM2VhMThhNzU2MmM2Njc4MzI2MjI4OTkyMDc3YTQ2Njk3MzQ5NjYxMDgwMDBiNDE0NGY0NWEwYzNhMjg2M2E0YzZhM2MwNzYzMmNiOTNlYjE5N2QyOTQ4ODRkOWNhM2RkNGIyMWYzOWRiNzA3ZjYzYTdmOWE1NzBmN2YwZmViOTliMmNhN2RhN2RmOTJhMTc3YWJjZmU4NmVjNjYxZDMwYmNkY2YxNTIyYmRiMWZlMTE2NzMyNThkZjdlNDZlZjRkMzI2NjY1MDkzMTU2NTUzZjI4YjM1NjNmZTcxOTJmNzJmNWY5YjM5MDNkNzlmZWEwNGUyYzQ4OGI0NjViNDk3OGQ2OWYyNmUwNWE1OWQ1ZWQ0ZWY0Y2FiMjMyYWNmZDU2NGZjNgorU0lHOiA4ZDZmN2NlZWI5MzA4YjRhMzAzODc5ZmM2Y2ZhNWNhOGUwNWRmYzNkZWZjMmIyY2QyOTEwZGQ0YjE3Yzk0ZWFlZTg0NWFiZTY1ZmQ3MTVkZjA1YjAxMjhlNDMxNmUyMzM0Nzk5YzZlOGZhNzQ3ZWJjOGEwNDBjNzRmNWExNDgwYworCitUU1Q6IDkyOQorU0s6ICA4NjVhNDMyZWNjZTdlNzhjNDI3MDlmYzFlNTMxZGY1ZTM5NTkxMzJiMmI2ZjMxOGZkMWMzNDUyMWY5YTI2ZTNiCitQSzogIGM3YThjYWY4OTMwYjYyMmE1MDEzMzdmOTI4NDBlZDk2NjExYTMyMjA4MGZkZTVlNDlmMGEyZjZlMzNiODgyODMKK01TRzogYjIzMWI2ZDJlY2RlNDlmNTEzYjBkZjI1YWFmYzNlNWRhNDViNmE5OTU4ZDYwZjU0NjRjYTU5M2MwMzAwNWVjZjM2MWVmMTY5NmJiNmU1NWQ2NTM4ZTM0YjM4ZjMyNGMyMWNlYTVjYzgxYTAwNzMyNzhiYjkyNzI3ZWZmODFhZjU2MTgwMmRjZWYzM2JlYzEwYWQ2NTk0ZTIyZDljNDQxOGFmMzk4OGE0M2VkMDg3Yjk5NTRiZjhkNjI4M2U0YmVhZThjMDk2ZGU2NjA2NzUxY2JlZDY4NTg0NmM2NjMwYjk1MjhmZjM2NGE3YzQ4NDY0MTEzNDcyYzk4NjBiMzM3MTk2M2M5MTE0OTVhOWM2MjhhM2UzZTQ3YWIwOTkxZjEwZGQxZGQzMzE2MTUyNTI2MmQ2M2JhYjY0ODgxOWQ1N2QxMjY5ZTExNDgyNWM1NDM0ZTZiMjg0NWY0Mjc5NWQ0ZmIwODNhZDc5NDAxZjJhMDc2MWM2MzRhNTQ1YWVjN2NkYjEzYjViZTQ0OWYxZDgyOTMyNjM3OGVkMWY0OTNmZThjOGU5YjA2OGNjMWRiY2YxNjU1NTBiODEzMmMzMTlkYWM0ODdiODdiYjIyYTU0Y2RmNjBhYWM3MTUxNjE4MmE0ZTY5YmEwODNmNmU4NmQxYTRmMDUwODNhNzc2MTllZjIzOWY3MDIzOTZkN2U0Njk2OGNjMDRhM2IzNGRmMzI2NWVjZjE2MTU3YWJlMTVjNjQyY2Q3NDI3MDk2ZDhkNDBkYjAwMmQxOTZjYWIxYmUzMDRiY2YzMjJkOWQxYTI0NTFiNmMxMWVlYWYzZThlM2Q5MjlmNDgwYjZiNzc4MDRmZTg0NDk2Y2E3NTdlMDQzMzc5MTRjZTk0NDc1ZDc5OTBjNzQ1N2M4ZTYwNmY4YmMyMDdkMmQ0ODExOWM4MGE2YjRhOWUwN2IyMjkyMjY1NzBkY2Q5OTQ5ODlmZWNjNjk0YzZjMmZiNTk3NWM5YTZhOWI3NGU4MTU5YzI3ZGQzNjc3ZGZkNWNiNjUxZjFlMzJhZGZhZmQ4MTBiNmU1ZDVlZmJhY2UzMWFlNmQ5YjEyMTkxZTg5Mzk4ZGEwNjNmMTM4Yjc1ODRjNThlNzdlN2Y5ZmRkN2ZiOWVmNWQ2OGFlNDljNmNjYWQyOGQxOGJjNjAwOWQ0MTg3ZWQxNDIwMjI0YTU2NThhYWRmMTM1YjVhOTUzZjJkYzNjOGJmY2FmNjY5ZWQ1ZGEzOGQwMTQ0ZmQ5NjY1ZTZmMDY3N2QzZmM4ODA0ZTIxY2MyNWZkNWUwMWEzZjNmYTgzZTU3MWViMmY4ODJhNzY1OWNlNWQ4NjRkOGJiNTQwNzJiMDk4NmE4NTRmMWE3ZjJkMjcyMGRmODU3ZTZkNDIxOTYzMDg0MWIxY2NkY2ZjNjcyNmI5MWJmYzE3ZTE4YzNlMzQ4MGMyM2EyYzA1ZTRiZmVkZGQ0ZGI5ZWY0MjM4OGYyMzRmZDNlNGYzZGFkNjY2MDI2ZTI3ODA2MTIzNzQxNjEzMTZhZmM3NjY1Zjk0MTFiNmM1YWE3ODkzM2IxODAyMWMwMTJiMDg0ZjMyNDQ3NjBhNGVhMWJjZjMxY2M5ZjVjNDA0NGE5YmNjNzVhOTg2NzA3ZjM4ZjQ1YWMxYzdmYTEzOWVlOTVhNmQ4ZjE2YzNjMWUxMjc2NGM0YjBiMTE5NGMwZmM1ZjdlZWZmOWE4NDhjNDA1MGIwZTY1MTY4NDcxOWQ0MzhhYWQ1NjAxOTE2NGZhZTRmNDg4ODIyMDVlY2UwYjk5NzM2NzkxMDg0YTc1M2JhN2Q1NmU4OGZjZWVhNTMzNTY2YzNhMmNhNDhkZDZlZmM0OWIyN2RiZjE0ZjI2MTZjZWQ2NTJlMTM4MzNhYjkwMjhhZGE0NTQ0MzFjODliM2NiNzQ0MWZkYjhmMjNlMTJiNjBhMWExMDRhMmE4Y2Y0YTY0ZTg3OGFhMjZmNTRlODg4MWE0YjE1MWExNmE5NmRlOGI5ODA3ZTcyOTM5NmViZTNlM2QzOTRmODA4YmQ3NGI3MzEyZmU2Yjg0YjEzMTJhZjhhMWU0MTMzNTk5ZDA3YmRmMzNkYjIxZTAxNmI1YzE5NmMxYmEzMTE1NzA4ZjU4MWJiODJmNGI1N2E2Y2ExYTUyOWU2NGQxOTMwNDJjMWRjNWZhYTBhMDNhYmY1Mzg0OWUxYmRlZmJhYjY0YjFjYjYwZmUxMGEzZmMxODIzYTIzNGM0NWYzYjBkY2U2NmE0NjczOWMwMWFlYWQxMmRlNmYwMzEzYzdiZTcxNDA1ZjNmZGM0YTUwN2E5ZDg0ZTg2ODZmNmZjOTI2MzVkYjBmNzg1NmM3MzczYTYxOGE3MjUyYzEyOWE3NzYwZTIwMjk1NDNkNzI2MjI4YzIxZDAwYWQ0YWM1MmU1YjFhNmUzMTIwMDkxN2YxNWFmNTE1ODU5ZTA4ZjJhNzlhY2U2Nzk5MWVkNjkwNDQKK1NJRzogMzJiYjc1MjBlMjYzOWM2Y2NhMTlhMmI5ODM2YjA4ZjhiMDgzY2EzMzM2OWRkZjVmOWE4NzdkNGM3YTllYjA1ZjljM2RjMzRlZDRjZmE0YjI4M2U1MTkyMmIwOTQwNjZjZTlmZmE0ZDlkZjYyMTkxMGNhMzdiMGIzN2ZiYWJiMGUKKworVFNUOiA5MzAKK1NLOiAgMmJlMWY5OGNlNjU1M2M5MTViNmEwOTMzZWMwZGUzNDdiMzcwZTI5Y2EyOTRlODAwNTU0MTIzOWY2M2I0MzBkMAorUEs6ICA3YTZmNDQ2OWMzMGE2M2Y1NjBmOTg3MzRmYzE5MDZlYmQxMzcxZWQ4MDEyNWZhM2U0Yzg2YjQzZjI2MmNhYmJjCitNU0c6IDYyNjgyMDFmOTMyYTdjZDNmODc5YWU2YWI4Mzg1NWEyZjUwMjkxZGU3ODRkN2Q5ZTlhZGFhMWI5YWZlZDZmNWFlYTIwMjQwZTU5ZmU5M2U1YTcwODhjOTVlYzhlMTU3NDVmYjhmZGViOTFkZjAxNTFjN2I0NjA1MDY3NTYxZWEwOGRiZjAwYzRmZmUxZmQwYWNmMTAzNjU2YTdiNTRmYWQwZjI1YWIxNmI0YmRhMzQ3MTc5ZWQxY2FkYjdiOThiZTA4OTVlMDUwZGNiYzM3OWQxZmQ1NTNlOTk3OTU5MjhiNjdhNzUyZjhkMmVjMWI5ZDY2YmY2YWM5OTdlNzQ0ZGMzMjdmMjQyMjMwZjkyZTc5YWUzMTI3NDVhNWFiNmRkZWMxOTk4ZmI2M2RjNGY2YjA1ZjE0NzIyMmQ0YjY1YWNlOTAxN2RjMWJjZDY3NWU0OTVmOWVhYmI1ZjYwMjEzM2Y2YzcyZTA1M2U5ZjRhZTMwZDg3MmQ3OGJmNzFmZWJhMzdhY2M1OTUwNTVjM2JlYTUzYTA1ZWYwYzdmMjEyZGNmNGUwYWY4MzhlYTI5MjhmNGNkYzlmZGM4MzdkYTI1ZjI2OTY2YjI0NTZhYmVhNjZhNWRmYjhmYWE4ZmEwOTFmNzMzMWQ1NDM2ZTk4YThkNjMyM2NjOWU5YTkxZDVhMDJhNDk1MTE3MTQ4NDliNDc0NTRiYWY5OWM1Zjg1MGEwOGQzZDk4NDEwZTkzOWE5ZTg5YjE1MDUzODI1ZjNlOWFlZTcxNDQ3NDE2MTQwNzgyZTFiZjNiMGQ4YjRmZjYyZTc3YTRhMDNmNzEwYThhYjc2Y2Y2MzU5MmMwNWM0NDBjOGYwNjQ3NzAwOTkxNjNjMTIyNzBmM2Q1ZWM5YTZiYzk3MTViZmZmZWM3Njk2MTFkMjFmYTAwM2MzY2M4MzU2Yzk3NWQzN2I2MmI4OGFhYmI4NTk3ZGFjYTE5NmM5NjQ4YTMxZDE1YmIwYjg2Y2YwNzBlZTAxZTUxMWVmMzczYjRhNDRjNmEwMDE2MGE3OTdmMmU4MjBiNzE2ZjVjYTY0NDY0ZTQxODlhMDBmZWU5NzhkMzViZjIwNGY3MWRiMWY1MDFmOWI2ZTVkZmM4MjFhOGFmNWRiZmVmZDM1M2FkMzY4MWY5YmMzYzIyYzY3Y2IyMTFiNDMwYjZhNTVmM2U3M2RhN2MzYTA3Y2ViN2QyZmUyNTRiMTBjMjcwM2FiMmUyMjk0ZGQwZDMxNTJkYzdiMjFhYWI4N2IxNTBmNzM3YTk0NzQ2M2ZiMjA0MTc1ZGU4NTQzMjM2ZmJiMGRhNWM3ZDQ4YzU3ZjYxNzQ0ZGU2Zjk4NGFhOGU2MWI5NzBjNjJkMGVlYjg0OWRhN2U4OWE2MTIyMmQ0MzIwNzljYmNmNWY4YTJiYTkzMDMwMTY4M2MwNzg1YzI2ZmRmODVkYTMwMjA4NzQ2MDQ1OTlhYzZjODQ3ZWMyNjA4NjU4YjU3ODhjN2I4ZDNhMzc0NGZkNTQ0MmUyNGM4ZWVjY2Q0MjA3NTZiZGQ4YjhhNzdjZmQ4MDU4OTYwNWRjZWQ5YWZkYTJiZGI2MzBhMGNiNjEyZjczOWNlNjE3ZDU0ZWRlNmNjZjM2YWEzMWU3ZTM3M2Q4YTBmYjFiN2M5OTA2Zjc2YjVmOWRlOGMyNjg5MWRlMDA2ZWI3OTdlYWQ0YTg2ZjcwMTZmMzRiY2RlOTJmOTRhYzNlOTIwYmE1OGQ2ZGZmNzcyMDc4ZDgwMmE5NGY1NmNiMjZiZjc5NGZkOTBjYTBhZDRmMmU3YWNkYzU5MjliYzczNjQ5OTdkZWQ5OGNhNjljNTczOTkxYmI5YWI4NWYyMzViNjNlNzZmNzdlMGFiNDVlNzg5MTIzODk4NjlhZjIxZTc0ZTY2ZjdjNDU2YjgyN2U2NzBiZWIwZjA3MjY2ODhiYjFmOTAzNmQzOGRhMDdkNjllYTM2NjZmNzZiZDYwNWQ4MmUyZGQ2Mzg3ZWNlNmU4MjRhNTY5NzAwZjAxYjE5NWQxYTliZGNiMGY5NmFiNWM1NGUwNmMyMTE5YjQwNmJjNDg4ODQ4MDY2MDQxOGJiNDI4OGVhMmZkYTk2NjMxYjBlMWY2MGFjODYxZDZjY2M0Yzg0NGI2NDdhN2Q3NDAzYmMyZDE1YmFmZTRhZjY3N2U4NTZmZTBkMmI1ZjY2M2JlNGU0ODBiMzhmNmI3NjZhZGNkM2QwNTI5OGVmMTM5OGQwNGQxNTIzYTY4YjkxZGQzMWNmNWRjNGI3M2RlY2JmZDcyMTNmOTgxYjIwN2UxZjZlZjIyNWQ3OTQ4YTFhYTE3ZDhkNTdhMTEyZjFkNDQ2OGQyZDI4ZjdlYzJlNTRiNzRhNjkyYzU5NTgwMjJlODIwMzFhNDFiMzE1MDkwZWQ0ZDViZDdiZDBiNDUxNDc2MzM4ZjczOWE3ZDcwMzFhZjJkMzZjYWEwOWZmZGJiN2MzOTY1MDdjNzUKK1NJRzogOGU2NTlhM2Y1MzVhNTg5YTVmZDJkMjE3Y2JjYjhiNzc3ZTVhZjIwYjIzNDQzMmY3ZGFjMjlmODEwYTJiNDczN2M1Y2FiMTBiNTlkZmQwMTQ0ZjMwOTBmNWY5ZTBlNjY3ZjBlMjFhOWY1NzNmZTEzYjFjMjhlY2NiYjUzMWEyMDUKKworVFNUOiA5MzEKK1NLOiAgMTBiYmU2ZTc2MWE3NWM5MzViNTE3ZjA5MzZmZWNiOWVjNmZjMjE1ZTU4MTMwODAwZWExOGQxZmY0NDJhNGYxMworUEs6ICA4NjQzZGRmOGFhOGQ5YzhhNzhiNmViNjk5ZmQyMGE1N2Y2ZjE4NjM2YjA2Y2U2OWRhY2RjYTEyNjdhY2IzOTU0CitNU0c6IGU4MTA4YzZkZTQxMzM3MzNkYzE5OWE3MzM5MmUyMjZmNzEyYzM2YTI0ZmE5MWQ2ZmIwOWY5MmRmMjE4ZGViMmQyODMwYTY2OGZkNjk0YjQ4MDlkMDI1MzUwNzIzMTI0N2M3ZjI1OGI0ZDY1YzU2YmI2OTM0NWVmNmFhOTdlN2M1OWU4MTUzNzc1YTVhM2NmMTA5YzRiY2E5ODE1NTY5ZGE2OTMyZTgyMTgzNDI1YjQyZDc0ODNjOWRiZmNiZDhlYjM4Yzg0NzI5NTcxZThlYzkzOTgyYzMxNzcxNjc1OTU5OGM0ZjZhMWI3ZjhkYTczMDZhNzgxNTcyMWNhZjAyZTcwMjQ2NzEyMzE0Zjc2NmJlOWNiMTc3Y2QyZmEzYmRhMjJjZDY3NmM1ZDJlODZlOGQ3OThmZDM0ZjU0M2M5YmUzMTI5NjUxZjI3M2Y0ODRmMGI5NDY3YjE0MDk1NWNkMjk4MWZmMjYwM2MwYmRiYjQzNmFjMDk1NWExMTZjNWU1ZmMzMDQyNWUxZmU3OGY2NDEwZjZlZjc1N2Y2MDQ2Njg4NTRiYWU3OWJmZTIyZTFhODVjZTVlZTVkNjQzNGI0NjEwMTIwZWE3ZTVkM2QxMzdjZTIwNzUxNGY4NTM0YWQ5YmYzOTJiN2RjNTM1NTUxNGI1OWY4MzU0NjZjOGViNTZmNDRlZGRjNWJhZDIwY2YwYjQ4MGIyZTgyMmE2ZjQ2ZmQ5NWYzMGYxODNjN2JiMzE0M2U0ZTYxMDBlMmRiYzlmMmJmMGQ0MzA3M2UwZmU2NWYwMWJjY2U2YTFhZTQwMWMxMjU0MWJlM2FlNjhjZGVhYzJhNGFjNzFmMTY2M2I1ZmRmYzJlNTBmMGUwNzdmYjNhMGE4YjhlZWVhZDYyN2MxYzNlNzlkZDczNjEwNDZmN2U1N2MxNzQzNmMzMmRjNDQzMmYwNTAwMjhjYzdhYTQ0MDhjMmQyOWQxZDc5OThmZGNkZGEzMmJiMzJmNzA0ZGMyNjNkYjliOGUwNmM1NzYzMDg3MGY4YmI2ZWM2NjFmZGUxYjdkYTk0ZDUzYjA0NzcwMWE0NTg4NDc4YzFjNjYyMzQ2NzQxYWVhYzRjMjUzMzg1NTZhM2Q4NDhkZTViMmEyM2VjZWE2MWI3NzZiZDBlODAzN2VmYjg1MDFlZmYyMzljN2ZhY2NhNmM4MzY3ZWQ3YzhhZGNlOTE5ZmVmMWExNTVhZTBkNTQ3OGE5ODAwMmM5NWExNmZiZjRjMGVkMDE2ZWE1ZDM4NjZmZTFkZTQ1NDgzMmE0ZTk1NjU5NzZiNjBiM2RkMmVhZjdmZWU2MTJmMmJjMDQwZDkzOTc1NDM1ZWViZDEyZjA2ZWIwOWVjZWEyYzY2NzY4MzA4ZjU4Yzc3YWM1MWVkN2JkMjE2MzZmYzljYzNmZDE0ODcwYmQwNmJkZjEyOGE4MWIxNDc5MmU2MDhjNDdlYTJkNTM1Y2E3YWEyMWViOGE4YTU2ZDc2OTkxNjYzYTgxOTBhOTUwNTdkMzM2NzFlNzNjN2NiY2U1YTk4ZDMxZWYwZDczYmQwYjE2Mzc4N2I3ZmRjZDJkZGZjNzI5NjBmMmJlMzIwODQ2ZDRiMjkwODBkN2FlYjViN2VhNjQ1YTJhZDVhNTljMDEyYmY3Yjk1MTVkODU5ZTFjMTQ3MmVmOGE0ZDNjOTVlNzExYWY5N2FlNDYxOGVmYmFiM2RmZmU4OGM5ZjZhZjRhMDliMGU3MzM4N2UyNTFiNzdkN2JmZjUyMTRmNzkxODYyZGI2OTg4NDExZTJhZTJjNzViZjI4ZDI4NjAyYTYzN2MyNmY0OWMxOGQzMDlkMmZjNThhMTI2NjY3YWQzYzJlYzE2MGM5OWJhNDBmYmRhYzE3ZTdlNGMyMWE1ZDUwNzg1OTc2MmViYTA5YzQxNjBkZjY2ZjVmZWVmZTY3MTVhMjhjNTI5NmNmNDNlNWU3NzFmMzFmY2U1MTMzYmU5N2NhYjU3MzAxYjRjOWRmOWNkOWE0YWNmMWMzM2ZhYzk0NmZhMTU5NmZhNjVjOGYzNjU4YmU0N2E0NzNhNjJjNTIxODFlY2ExODNlNDI0NmNkNjI0ZDg3ODNkY2NlNWZkY2MxZmVhMTczZjgwNzFmNzA3NGY1NTg5N2RlOWJmZTg0YTZjNGZkZjgwMmQ1MDI2YjgxNDVlNmM4Yzg5NTBhZmM1YjQwZmQwMzU2ZmM1NWVlMTdlMWY4NTNhNGMyZmNjMzRhMTM2OWI4N2QyOGRjMmZkMjAxMGYxOTkwM2FmZjhlNDZkZTA0OTM4ZjQ5NDgyNDVkNWI0MjVkMDc0YWNkZjJiZDgwYmZjMzczNWNjMzRhMjI1OTBmMTk0YWY5MzEzZWVmNGFiNWZkZTYxZjFmOWI1ODU3ODYzOGZjYjRmMjg1MGIyZmNlNmUwM2RiNGQwYTgzNDg0ODE2M2M0YjI3ZTEyOWY1Y2M3NGY2N2YwMDhhMjcxMmQxZAorU0lHOiBmMGYzNTc0MTAzNzMzMTNiN2M2MjUyZDZkOTY2MDAzNjBjMjM3NTJkNDMxY2E4MDc1YmNmYjc3MmQ0OWNkNjA5YjY1YzljZDgzOGQ2MzRkOGQ5Yjk1ZDFlZTMwZWRlY2MxM2UzY2E5OTdiMjQzNzMwM2Y4YTMzYTFmZmM4MzMwNgorCitUU1Q6IDkzMgorU0s6ICAxODZkY2M3ZWZjNWVkN2U2MWFlNTNkYzQyMDkzYmFlOGYxNWRkOTlmMGYwMzMzMjZjNTc2ZmY3NTY5NTBkMDZkCitQSzogIGM4ZDE0MWFjYjY0MmFhOWJmYmQ1NDMyNzdjMmRjYThhYTk4ODhlZWZmMDQ1NDNiMzc4OWIyMWYyNmFlYjBmNzEKK01TRzogOTc0MzY0ZDZjODM4ODQyY2NjNGU3NDllNmFmZDUzNzE3MGRjZDhjYzUwZDY2NjU0ZDEwNTQ4MjMzOWNhYmRmNzRlMzI5MzVlZTIxOTI3MmVhMTY4NGZiOTNjMWZhYjQyYjU2MzE4MzkyNDM1OTFiZDA3ZDNiZTk0OWIwZGQxNWUzMTk2ZGYxOTZiYTc1MmFkMTEyMWFjNzExMmQ1NjY5NDRlMTUzYTRlMDYxOWIzYTIzMjI0MWYwMjBiZTA3MTlmNmJlYzkxOGIyNjgyOGViMTY3MGVjZmM3M2M2Njg0NGVhM2U0MDRjNmEyZmMwMWJlYjQwM2M5ZDZjYTU1MWFkOGE2ZTcxZjQ2NjQ3ZmE2MDUzZjAzMTRmODEyNGQ4ZDJiYzEyY2M4ZmE4ZGI5NWYyYjczNTM3NTIwMWI4MTZhOWNmNDBmODNlZTRiODY3MTYxODAzMmRlMjI5Y2U3NjI3MWQwM2QyNjcyYTFhZTRhMjg4Yzg1ZGNkMjdmYjg0NTJhODEzMmU5ZmYyOWUxZTg5YmYxMWIxYzgzNTE5MmMwNGIxM2JlMTRmM2NkZTVkMzdjZTk2ZjFkYzJhOWNjZGEwYzRkNzM3YmNhMWZhMjIwZDIxYmYzNjBiOTA1MTViYmQyMjZiYjJhNmM4ZDVmMmFiMDE4ZDQwODRlMjRlZTMzM2NlNGUzOWJjYjZiNDZlN2FlYjRkYjliNmM2NWIyNDRkOTgyODIzYTc3MGY5YzYyYTBiZGUyY2JiN2VjMzY4NDBkNDU1MTg3ZmFmZjRlNDg4YTVjNjA4ZWJkYjdkYjg0ZDg3ZGFkMzg2N2UzYjBkMDRiNjQ3MTVlMTY1NjBhNjJmMWVlMDNkZjYxODNmZDVlMzc1NTVkYTE5NzJmY2EwNjJkMTJiYjg0MjBlMDgyZGFjYjhkZWJiOWMxNDM4NTQxZDBkYTI0NjRlZjdlYzUyMjYzZmI5YjlhNGM0NjljODMzMjNlNDgxOWRmZGY0ZmEwYTc3MGMzYTcwOTI1NGUwNTMxNDgzMGU4N2ZiYjY3MzZjNzJkOWRhYmUwMWEzMTBlOTFlYmJmYWU3NjdhMWZjYjYyZjY0ZmEzYmE4ZDUzNDAwZDY0NjlhZDFjY2I4MTFmYjllMTE1ZjE0MTI3YjEzZTgzNjRhYTJmZTgwYmJjODg2YTEwZGYxYjljYzRhZTQ2MDFmNTQ2MWFmMDkxZjUyNmQyNzJkYTliMjAzODU3YTQ0NDdlYWJkZWY0Mzk4MzA0OTZhNTc1OWMyMWRlNjViYTNhM2M4YjhlOTM5YzQ2MTMzMmE5MjQ4NTJjMjA1Yzc3MTFmM2E2OGEyMzY3YTk0NWRlZjRmYmU1ZjgxYzYwY2JiN2UzOTRhMmE0OWJlOWVjMmFhZWIxZjMzMDU3NTk3OTQ0NmFkOWQwZDU0YWJkNDM2ZjI4NjBmMDQyMzQyNmY0YmJjMjZiM2I5ZjY1MGQ2OWIxMDA3MmQ3NDdhMzllNDc4ZjQ1NWVhYTEyYzdjNmUxMmJmYzQ1MzZhMzU5NDM0NGJkMDJiNjIwZTNlMmI0ZTBkNTM0MDg5ZGQ3YjA0ZmE2MzQ4MDQ1Njc1ODZjNjJiZTAzOTFjN2JkYjBhOWZiYzFlZjNiMzMyMTFlZGJmOGVmNThjMmI3YTQ5ZDA2NjY3OTU5ZDdlNWQ0NDY3MWVlNzM1N2ExMGJhMGNiMWE0NDVhZTVkNzA5Y2UyNTVlOTJkZTcxNTk3NWFmOTRiODlkNGEyOWM3MWY5ZDg4Yzg1YjZjZDExZDhiMzM1YmY4ZjJjNjU4ZTZkZDdjM2Y2YzgwYWQ0ZDBlNWE2Yzg3ZGJhN2I1YjhhOGE0N2U3MmY0ZDFkM2M3NDM2MzFkZjlhZGZjZmE0NWNlZTA0OThkNWE0NGE5Zjc1YzgzYjc1YjJhM2MyMzBmZjA3NjdkMzg4OGY5NDFlZTFiNjYyNGRkMGUxMmQwNmVkMWFiOGJiMTM1ZmZkMzc5ZTlkZTM3ODhiZTU0MWFhZGIyZDZhN2NjNjAxMzE2ZjIxZWI5YWFhOTIyZjU2YThlMzUyNmM5YmQxMTc3ZmVmYzJmYmUzZTQzMGI2MjhlZWJkNjY2MWUzYmEyZDYzMWM2YTg0MjJjMjQxZWNkOTY5OTcyNDEyZjc0ZGE2YjEyNDNiZjBmYmVlOGE4NGQ1MmU0MGFlZTNmMWU0ZmM4MzE0MDJjNjJmMzU3NmIyMmU4ZTNjM2RjNGUxNjBiYzNiNmI5ZDJjZTAwNTg1MzgxMmVhZmMwYTRlMjViYTcxMjI3OWIwMGJhM2Y5MTMwZmYzNmUzZWYxOTcxZGRlNzUwOGIyNzkyZmU2NGQ0NzU2ODhmYzZmMzMxM2FhZGI3ODUzMDJlNmI3ZjlhODRmMmRiYzJmM2NmMDYwZWUwOGI0NjM3MzZmODM2ZGJiMjYyZDMyOTY4NGMyMDg0OTJkMTdkODExMjIxYmUwMmI2NWVlMjhlMTFiNTQ2OTIKK1NJRzogODk0NTA2OTc4N2MxYzY3NmE4NGE3MDNjYWUxZTBiYWNhZWZmZDMzZTkxYmVjMzYwM2UxZjEzZmIxNzBlMzFlNmQ3MDQ5ZWRhMmJmNjI3MTgwZjQ1NmMzZjdhYWJmY2QzNmM0OWE4YzA0ZjhhZTY5MjllYzVhZGEwN2I2NTcyMDgKKworVFNUOiA5MzMKK1NLOiAgMDcwNWIzMzZjODljYTM1ZmZkZGUwYWYwZjkwNmVhY2Y2MjNjNTZjM2Y3NjczODE2OGU3NmZjZDU4ODJkZjc5ZQorUEs6ICBlYWFhZjJhMTVmNDRiNjM0Y2VmMTVhNjM4YjgwMjA3ZjYxMDk5YTA3OTZmNWQ0M2YzZTlkMDQ4ZTZhZTc5NmMxCitNU0c6IDYxNmZlMTVmY2NiMzMxMGY5ZWM3NDU2NDQ3ZGFkYWY4ZTBhNWZiMjY5YmUxNjliMGMzZWEyY2ZkYWFhNTVkMzc5MzdmZTc1Yjc4MzI0YWMyNzhhNjUwNDdlMGFlNGYzMjdlOTdlZmZjYjdiZWQ5MWQwOWRhNzIwYjBhMTAxYmU5ZTk2ZDBiYTg1YjFmZjQ5ZDhkMWRmMzYyZDM0NTRmMGRiNjgyNTU5NjEwMWM5N2U1ZGFjYWQwN2VjNDkyZDMwZjJkMGNiN2U3ZGU0ZTc0NGJiNmE2MTAwYjc1NGRhODQ3NDExZDA5YWFjZThkNWQ0MTA3NThiODMwODdkYjRiNWU2Mjk3OTc5YTIxZmI2NWFmMzkwOTUyYzRmOTM2MjYwZTcyZDdjNzgzMjdiOTRhYTZjZDYxNzI3OGIwY2U5ZTFiZDNmYmVkOTNiNjliYzY0OTg1ZGRlMGUyYzQzNTdiNTAyZjA1NWVlN2IwYTAzODg0NzRkYWUwMmQ2YzFhNzMxZjg3Nzg1ZDc1M2FlYjBkOWNmZGY4NTAwMmRmNTY2ZmMyNTA3ZGU3YmE2ZmQwMzViZWUxN2EyZTgwOGI0YTc1ODhjNTgzMzc1YzgyNDA3YTQwYWU5ZWViZGY5NGRmMmZiOGNhYmYxNzYwNmM0MzllYTcwNDU5YjIxMmFhZTRhM2Y1MzBlY2FkYzVlODhlMjU0OGZhNjQzYzdkZGY1MDYzYjJlMTA2NzNlNTlkMDdmZTkwNjg5MmI2N2ViNThmOTM4OGE1NmIzNzA0NTJlOTk3Nzc1NWZjMDRkZmJjNzdkYTZjMDViZWRkZWJmMDM2NTI1NmI1MmM5YWVmOGE4MjE3M2I4Yzg5ZmJkOThjZWEzNmE4Yjg5NmZlNjZkMzdjYTc5YmVjN2ZiZmU5NThmZTg5ZjY3NjUwODViMzM1ZGM3NzAzNDNlMjMwY2FkZGZhMjgzM2RhYTY2MmZlODIwOGRkODg1YTZmZGY3MmUzNmVjZjIyYmJiYmNiZTc5ZDM3MDY1MDIzNjk0MGJjMmU2ZDRhYzc0ZmU0ZDU1NGM5YmMyMzJmMDdkMmFmNjIyMGQxNTdiZDJkYTZhNjYxMmEwODFiNGM5OTA0YTI4NjliMTM3ZWUzYTA4NTZmMTJiMmViODc2MmRiOTRlZDBiYTEzNmYyM2U3ZmI0YmQxZmNkZWUxMGRkODRlMmNkM2IwYTQ5MTQ4YWM3NGRiNDY2ZGJlZWY4MWU2YThjZTA4NjExMDJkZTliMWEzZTFkY2Y1YzZiMDMwOGE4MmUzYWM3YzIyODNjN2NjMmYzNGZmYTE0NWI5Zjc0Yjc5OTA0YjMyYjc5ZTk2MGI4MTRhYWRlNjNhMGRmMDE2N2RjZDI0ZWQ5MGE4ZGE3YjkzNGM3NzI5MzJmNWE0NzhmZTJhNzJmOTQ1YTEzMDk2ZWMzN2NlNzY0YjU4MWViODllNWY2YjJiZDdlYjg4Yjg1YTg5NTg3Nzc0ZDQ1OGM1OGNkODc5NDU3OTczZDY0OGVmNzcxYzVmMWRlYjI3YTBjYzViMjkyNDZhYzJmYTEyZDE4ZGRjNmI5ZjlhYzljZjE0NmMzZjIyYjFlNDQ5OWFkZWVmYmNkMjI0OTc0MGUxM2EyMjRlN2I2YjNlZjE1NjA1ZTdlNzRlNjhkN2I3MjY0MjQwOWI5MGM0ZWMxNjFlYjI0YzliNDBmZjljN2U2ZTVkYTk4MzIyYWNhNTJjNDZhOGRkYzE5MGYxY2FiMTU3YzRjNzYxOTYwMWE2YjMzZGY2YTUwZGE2NjFiYzc1MzYwZGZmNjk3NTBkMzQ1NzQwOWNjMDI0MWMzZThjNGIzZTUwNmQ0MjZhZjUyYjcwMjMxY2Q2YzkxMjYwY2M0MzFlNGNjZmQ0OTZjYTE0Y2VhYWUxY2RhNzg3MjFlMTYzMzlkNTI2ODJiNjk1MWY5NjZjN2RhNWM2ZTEwZDkxOWFlNjZhOWY1MmRlYzEwODY3NTM4ZDNkZjZkNTkzYTMyZGI2OTVhOGQ3NzQ1NzAzNTE2ZWE1NmY4YzFjOGYwZWY1M2JkZWI3ZjUzYzJkOTQ0ZjUxMTk0MGNjYjkwNjI0OTIyYWM1OTlmNDYxOWMzMDQ2MjA3ZDYwNWY2ZmY5NGRlNzg4ZDI1MzQyMjI5ZGM4YWY5MmI1ZmRmMGRkNzFkZjJiNDQ2Y2RmMWQ5YTIwNTI0MzM5ZWUxYzMxODI2Mjg3ZWY3Mjc4MWE3YTM1Mjg5Zjg1YTE1YmE1N2M3ZmQ1ZDg4NWJkMDU1M2FiNDA4MDVmNTE3ZThmMWIxYjNjNGZjNjc3MWU2ZjIyNGJjMDMxMTI0YjljOWFlYjE5YzVhOTZiZjE0ODhlMWU2NmM2ZTg4ODA5MjMwYzgzYTc0MTU1NTU0YTIxOWVjMzc5YWU1NGE5ZmU3OWRiZWRlM2Q1NzYwNDJhNjM1ZDE5N2Y0ZDgxOGM3Nzg3NTViOGI0NWU1MTNkZWFjODhmNjA0MjUKK1NJRzogZDRhOWJhZThlY2M0NzJjMzc2YmFiODA1YzJjZTBjMWMyZWQ1ZmM3NzM3MTU0NjhjYjFhNDkzNDU2NGRhY2VjZjQzOGIxZGQyYWMxYjVjNWUzMzZhMWUyMDcwMWQ1ZGNmM2M4ZWUzYWQyMjNiMTM5ZmE5MGExYjU1MmUxYjc3MDcKKworVFNUOiA5MzQKK1NLOiAgOTUxNzRhMDkxNTY4NGNkYmI2MTliMDU1NDk1YjAwZjE5MjgyY2ZmYzNiMDUwMTllNmFiNzA5YTRhMTc0MmJhYgorUEs6ICBhYThjODcyZDdlMTBiNjdmN2ZmMjQxNzJjMzYzN2U4MDgyNWEwYTcxZWUwYzQ4ODYzYTJhY2RjYmU4ZGE0NTlhCitNU0c6IDVlMWE3NDAwNDU2Y2FkNGY5YmE4NjY0M2JjN2NiZjNiMzU2OGRjYjUyMmIzNzA1NWU4YzM5ZDNjODBmMjI4NDIzOGU1NzI3ZmQ3NTEzY2M4YjMxYzU3YWU3YjQwNTBhYTgxOWZjMjM2MDkzMGViMGRkNjc3YTViMmM3MjlmZWIyZGEzYWQ3OWFlN2ZjY2RkZGI2YzA4NDQ2MjYxZWM5YmJlNTljNjRlOTlhYmJjODZkM2M0ODM1ZjAwZmVmZTUyNzQzM2E1MDFhM2I2ZDU3MmNmNWUxMmE4ODAxMGI0NmE0NzJiOWJkODY5MWE0MDdjMzY1ZjlmNzE2MzRiNGQ5N2VkZmRmZjA2MzE0YzBjMWI0ZWI5M2M3NjA3ZjFkNmZhMzU0NjU5MzIyYzI4NDA3M2Y0MjYwMjUxOGM1NGZkZjI2ZWEyYzI3YzgwYTZkZmEyMDU2ODM5MWFiMzU3MjgyYzA2YjIzYmVkYzFkZjEyNjRiNjExYzFlOWNmMThhZWJlMjQ5ZmQ4NjE3YzZlM2VlOThjNTNjMGY2ZjIxNzVjNTdlZjhlMjA2YmQzY2YxMDU2MjdhOTg5MmViNjg5OTIwMjEzYWFlYjYzZDg3NjYzZGJmYTUzZjBmYjI4MTYyNjk0ODI5NmIyZGJjZGRlMWM1MWFmODYyZWVjZjFjZmU4YTQ2YTJjNGIyOGNmZTcxMzAzMzBhZDE3M2Y4NzEyN2FhY2FmZjQzYzBiZGRlYTQ4YjAwMzg5NzZlNjYyYzA0YjZiMDRhZDAzZGUxMjQ2MmMyNzY1ZGI1MzUwNDk1MjBjYzExNGFmZGI2YzkyNTQ5YjA1NDZhOTAyN2Q0NDk3NTViZWI4ZDRjMTdlNmEyYTQ3NWY5Njc2YTMzN2I0ZTg2NmQ5NjMyNWUzODlhNTJjMTZjNTFlMThlMGQ4MTAzMzQwYzg0MTdiMmM1N2E1NWQwNDJmZjVlNWZjNjVkZjQyM2UwMDkyYjBlYTg4Yjk2YTkwN2M5NTEyMWM1NDdhNjgwNjFmMjdiY2ZiNThjZTZjMDc3MjhkNDg0NmJkY2JmMGM2MjU0MTBlZGY4ZGVhOGNiNGM5ZDBiYmVlZmNkZTE5MjczMzY1ZjQ4ZDc1YWVjMDdkMWMyMmNjZDIzMDY4YTk3YzNmZTc1MmU4N2EzMDExOGZlMmRmZDUyMThiNmIxMjUxNTRlMGVhMzg2Y2YyMzllMzEzN2Y4Y2E2ZDhiNzQ2YjZhNjdkNTA4Y2Y4YzFhYjYzZTU3MTVlNjcyMWVkYTVjMmJjMzkzYTQ5M2RiZDJmOWExZmE5MjZiOWE1OWU0NWExODBhZWViMDI1OTlhOGNkZDY4NmY4ODliNDg1MjcyM2NiNmRiZmI1MDE0Y2FiNWY2NThhMzA5YTQ3MjIzOTM2MGVlYWY2NGZjODIwM2EzYzcwODk3MGUxNWNiY2YxMzYyNTVkOTY0NDZjMzlhOTI3MDMxZDI2N2Q2OWVjZDUxZDdhZjZlOTFmYjRhZWY5ZDc4YzMzMzVlOTA3MTEzM2NmYjhlMjEyOTk5MGM2NDYzN2M3YWRmMWRhZWYyZGMyNmMxMTYzMzk5ZjNmZTFlNzkyMzM4MDkyZWY2ZjhkZmFmMjU3MzBkZDJmZThkOTc4ZjZmNzcwZjUyYjY4MjM4MTc2NTY0Y2VlNWZiYjk4NTBiM2IzYTA0ZDk0ODQ2MDQxNzgyNmViMmViMjRmY2M1ZmUzNTMzNGJiOTUyMWU4N2JjNGRiZGUyYWM5ZTFjOTg5NDlkYzJkMjlhZDI3OWUzODg0YjkwNTI2OGViZDA4MDhiZjQxODI1N2U3NWUyNjJiNGQwMWIwMjRhNmU5YWE3YmQ1MDFkYmE5NGZmNTA2Mzk0YjRiMGFlNjA4MWVhNzMwMzBjNDNhNmE5MTc2NmU4MGY5ZjQyYzBiNjhiOTg0MTlhZDRlZWU0ZTlhNzI4YWRlZmJkNzllODMxZjcwZjQxZTYyYjQzZjBiZjQyYjNiMmNkNTNiNTU4OTExNzY2NGJjZWJjNDA5YTc2NDViMWVlZGRhNDgyZjZiNjg5NWE2NTdiYTc4OWI4OWU1MDJkNjk5ODc1MWQ2MzAzZGVkNWZhMTU2ZWU3YzdlYWZlNTQ2MjZkMTAzMmM0ZDdkZmY5NzdmMWRjYzg2YWY4OWIxZTY0NmE0YWZjMjQyN2VkMDJjMGFmNWQzMjg5MGY5NWYxM2Y5OGMxYTViMWQ5ZmJiNzgxYTlhODliMmQ3OTBjMTQ2NWMyZDE1MjA5MjZmZGYyOGMxN2Q5YmExNTg3YWQ3NjFmMDY1ZDMzOWJkYmUzOGY0MTMzZjQ1YmI1OTc4NzQyNjQyZjkwYzA2NWVlNDg5MjU3M2Y2MDU5ZjhiNGNlMmMxM2U3M2I4OTFjZDA1ZjIzNzMxZWQ5YTA3ZTJiOGZmZGM5NjNiMDZhNTEwMjA5YzMyOTk4MDk0OWY0MGQ4MDczYTAxM2VmODQzZGZjYzRhMzM5NAorU0lHOiA3ODBmNDBjMjBmZWEzYjExYzk0MjJhNDNiOWE2Zjc5NjExZTdmMWY1OWQxNDg4YzE1YTVmZDJkMzJjMDdkYWRjMzkxYzM4OTUzZWRmMGRlNDhiZTUyZGEyYWYzMzVjNDdiOGQyZTQ0YWI5ZDNkZmI3NmJhNTM4YjA2NjQ5NTIwOAorCitUU1Q6IDkzNQorU0s6ICA1YTg0YWYyOGE1ZGZiYjMyMzNhMTJmMDgzN2Y2ZTg2NTRlN2IwZGUxNmIwMmFiM2NkMTc4NjQ0MzFlMjc0NjY3CitQSzogIDgwZDRiYTc4OWY4YTRiMjA0N2FkYWZhNWVkMjZjZDhjNTQ2NzMzMjkyZThiZjY5M2NmZDE3ZTI4NGVmYzY4NzEKK01TRzogOGFhY2QxYjhhMzliZjA4ZmQ1YzkxODQ0NmJlNTc2ZTZhM2YyN2YzNjExMTYwN2YyN2I1NmE5MTIxNGU3NjNmOWE4N2ZiMWQxODQ0ODk4OTYxNzk3NjQ0NDYwYmZmNTQ4OGMxMDNhZjYwNWU4NzQwZTQ2NTg4ZmI5M2U0NDNjM2JiMjNiOTJjMDk4NzBhNTU3NjUzYTFmMjJjMjE4Y2NiYzJmMDczYTI3MmQxN2E4NDIyM2VmMTQzZjRjN2NhMjU4NDYwYjc5ODE2OTY3M2RhMTA3ZDcxZDUzNTZjZTlmNzU1OWE5YjAzODM5OTk1MWY1NzVjNzdlNWI5ZDA1Mjk1NzhlY2FhMmUyMDg5MjY2ZmM1MjZjNWQ0MDlmYmQ0NmJiODY4NDFjYjU1NGY1YmQzYzk5NzEzYjA0M2U0MDQ2NTNhN2QwMTM0NGQ0ZGI4MzFhMjE3MjgyYzRiMzM2NDA1NjUzYjg1ZDI3YTQ2YjI1OWM4NTVjZGQ4NWFkNmY3YWVkZDgzNWZmNTUwMGNjOGJhZjBmYjJmMDE4MDkxMGM2NDY3MmI4YThkNDlkOTg0YTc4MjkzY2Y1Nzc5YzkxMGMzYWNiYmNhNDU1YTg1NDY2ZTUzNTA0NGYzNDgwMjYyYzA5MGZiZjRlMGIwZGI0ZDFlZjg3NTlkYWFmZGQ4ZDA1OTA3NDgyNDYxZmY5MTBjNDM3MTk1ZDVjN2ZlZDlkODJjYjk0ZTdlNGVjMjRkYTA1M2U0N2Y2MmI0ODhlYjdiMjQ0NjU1YzdkYmIyMGVkNjA3ZWVkNDUzMTQ0OWUwNzgwZTYxY2ZkNTc0MDg2ZmZjNWRjNTI0MjgzNzc1YzQ0Zjc1NDdjZGFiMDRhNTFlZWU0ZTFiN2I2NWE1NzU3M2E5MjQ4NGEzNTkwMGE5MDlmODFlNDE1MDI5ZDIyY2E5MzdhM2FjZDllNjFmOGMwZTY4NmIyZDJhZDAzNzdhZjhlZTE2NmU0YTIwYTgyYWZmNDUxZTE1MTEwM2UwYTE3NjdiMjcxZmE5YzJiMWRkMTIwZjgwNTg1M2IzYjhhNTYwZmM4YjkzNzYyODNiNTExMjQzMjRhMjg0YTBlOWFjNDlkZjY5ZjUyNGM4ZTA0MmRmODJlZmJjZDE2ODgxZWMxMzFhMTUyMTBkZjczZGUwMjk0MzQ0N2YyMmEyZWExZGM4YmY5NjgyOThlZTk3ZjNhZDU0NmQ3OGJjNjYwODk3ZTA4ZDJhMjhiMmJhNjhiNTRiOTU0ZjE0NzY0NTFjNjkyMDdlNWRkMjQ4YWU0N2VmMzU2OTQ5OTBlNmYwNThiYzAwMTdiNzQ5NTEwNWNjODczOTA2NmFmYjExZTFmMjY2MDE5NDI1NDZhZTg0OWZmMmY1NjczMGYxMzI2YmJlZWE2NDBlZTE3OGZhMjQ3YWRmZmVmYzA0NjQ5NGZjN2ZmYzA3NzdkNWRiZThhNTVkYWVlNjE0MDZmZTNjNzA4OGQ0M2Q5ZTE0ZGEyMWNhNTJmZDhjMTYwMDkxYzhmOTlhNjdkYWQ2NWM2NGZlYTlkMThiMTUzN2QwNjFmNWRjZTg3OWUwYmM0MjY0OGQyZWFhMDJkOTcyMTg1NzUzY2IyZjYyMjVkOGQwM2JiMDdmOTQ0YjEwY2Y0ZWEyMjI3NWMzZDcwODQ4MDIwZjMwYzgyM2I3NjE0M2FjZjU0NTk5OWEyY2M0YjU4OThkOTRiNGEyNWVmYmU1YTYwMzMxY2MwMDlmZWMwYTI1YmM5ODk0N2IxYjcxMzllMjJkMjMyODBmZjg4NTRhMWVjNzYyMjFiMWJmM2QxMDgzMjhjOGFjNDYzYzY1MjYzYTJkN2NhNzQzMzQ4MjkzMWExZDhmYzE0NGJiZTliZWY2NzhjOTJlMWMyZDEwOTIxYjZhZDQzYTc1YzUzYmMwNzU4NTRlZDJkOTlkODI1ZjMwYTVlMTBkNTE3NDM4ZTRkNGY3MTEzNDI5ZjFlZGIzODdkNmJkN2FhZDI5Mjc0ZjhkMmRjODg5YjdlZmJlYjU4Njg2ZjhkNjY5Y2VhZWY5MmM3NWVkNTMwN2YwYzAzZjU5MDAxODFjZTU3M2M4ZmEyODY3NTIwNWZiMTA1N2Y2MjZhYTIzMGQwM2UyZWFhOGNmZmNkZTIwMDgxNDc1ZDgwYjI0NWExY2E2MDQ1YmEyMDRhYjAwMDY5MDc5YzYzN2ZjM2ZiM2U4MGNhMDQ2MmU3YTRjZGQ5MjgzZmY5MDA4NTMwMzY0ODE2NzkyZmRmM2I5YTRlNGRjODM3OTIyOGVkY2JiMTU0YmVmMzg3ZDM3NzYwZDc5YWZiYjczNjI2MGExZGIxMDEzODM2MWYyNGI4MjZkYmNkNWYwZmM5ZTc4MzBkMjZkODBjNTJhNzkyMTg5Mjc2YmNlMzQ3NjBmYjc3YmUxMzEyYWM4Y2Y5N2Q5MmNiZjNkMDc3ODAyOGRiNWU4ZWFlODllMGI5YmM4Nzc4YWViMTI3OGYwNDcxY2IKK1NJRzogYTBiODRjYTVhZjc2NDZlNmY2MmE2OTM1Mzc5NDczZmE2ZTRjMjc2OTU4NTFmY2JkYWUyOTE3YjJkYzY4ZDc5NmUyNzhkNzBjZDY3ZmNlZGY2Y2E2MjliODgxZjdjNGYyYWEyNTU5YjIwZDY3MDYxMTc2NmJkNjVhYTRmZWYyMDQKKworVFNUOiA5MzYKK1NLOiAgNzkzYWM4OGQ3ZDNiNmZhN2Y0N2RlZWMzMWY2OGRkY2NiNzAxODIwZjFiMTNkZGM2NTJmN2M2YTg1YjYwNTJhNQorUEs6ICA5MWI2MjI3YWNkZDE4M2RhNjJjNTE5NjVjNjM1MzU4YjIwNGQ2ODNlZTA2NDQzY2JkNDBlNzFjMWY3NmFkMTAyCitNU0c6IGVjNTBhZmFkOGFkZTc0MDVlMmM2ZjVjNjI0N2JiYmNjZmIyYzE3MTY2Zjc4ODRmZWFlMTBkOTBmNWQ4M2M0YjZmMGJmNzZkZTJmNzg5N2JhMTE5NGQ2ZDM0NDlkZGI4MGFlNzRlYjhlZDY4ZjA0OWIzNWM2ZjIxOTE2ZGI0ZGZjMjcyNGRjM2FmN2FkOGRkNWM0NGY2MGQyZjQ5ZmFkZDcwMDRkYTE1OTMwOTM5NDJjYWU1MjA4YmY1NGNmOTAzYmVlNjQ2OTA1ZmNlMmViMmUzNzBkMGRjYTQ4ZDgyMGFkZWFiMTZhM2I2NzVlNWE0YThlMjY3ZTM0ZmY5NmYzMTIyYjE4ZGUwY2FkOTI5MmFiNjNkMjZlNWYzMTBmYTIxNjhjMjk2NmJkYjYzYjBkZTA4NjI2NzY3YjM3OWRlNDYzM2I5ZjNlZGE3OTE3MjgxZGFkNjYxZTlmNzcyYjg0NGE3OWU4MDBmZDg0MjcwMjQ0NmU0YWE3MzE3NTcxMDdmM2ZkNjU0N2JmNDA3NTk2M2Q1ZmQ1ZjU4ZTgwODUzZmM0Mjc1MWRjYTA3OGE5ZmE4ZDViYjNkOWEzNGFiY2FiMDI5M2Q2Y2VhZWM0ODk2N2ExZTYyMjQzOThjYWQwZjYwNWEzYmU4ZTY3NThlYThmMjkyMDlkOGU0YzRjYTE4OTNiYWFkOTFlMzc5YmEzYjE3MzMwYzEyYTViNmYyMTliMzg0YThhYjk3OGJmMWIzN2MzNzMxYTFiNDc0YjI0YjVkNjdkNGNlYzI4YWFjNjUxMGIxMWYyY2YyMWJjMTY5NjNkNTFmNTUzODcyNzcxOGZjNGUyZTUxNzJlM2MwY2RhYmMyNzdmMGQ3MDM3YzM0Y2E2OGY3MzI4ODg0OGI5MjZiZGUwY2Y0N2FiZmE2NjYwMDkxNjk0NmYwNzY1MWMyODBhMjA4NmIxNGQ1MjU3MGNjOGE0Yjc0MzU4YjU5YzMwMmI5ZDAwZTFiNDk4ZjNiYzMzZWU0ZWNmMmJjZTJjNjVlZDdlOGJhNzRkMzViNzUxZDNjOTlmNDA4NjE5NjhjMmI3ZjNhNWJlMzQ4YzU3ZDkzYjQwZmZkMDUxZWRkN2NhY2E2ZWU2YmNhNzIxZGNiYThkYjhkMDA2NGY1NGQzNmVjNWU4ZDYyYTcxZmQxYzkwZjE0OTI0ZjQxYzE2M2YwMDdhZmM2ZmJiZmU4NjQ1ZmE0N2MzYzk4MDI0NmQxYjkyMjc0Mzg1OTUzYzUzNDFjZDY0YzM0YWU5NzE3Y2MyYzM3ZjU4MzU5YzBhOTk5MWMyM2ZlNjM3ZGU2Y2RmMDg2MmY3ZDAzMjlmZTc1OGFhODkyYWQ0NTgzYjlkZjJmMzMzN2Q1YmU1NzBiYTY1NDk5OGVkMjkyZjExZjAxNzcyMzgyYTA0MzQyZmRkOTllNjllMGQ5N2M0M2YxMGFjOWI5NmYxNDBhNmY4M2M0NzI5ZTdhOTAwNDcxZjJiMWRmMjQwMWJjNWM2ODA0MjJiMTNiMGM4MDA3ZDYzNjgxZjY2YTA1OTVhMWM1ZDNhY2RlNWI3Nzk0MjZlNzM2YmMxMDBjNWU2ZjUyNjA4ZGMzOTFlM2VmOWIxYmI2YWYxM2QyNDliN2QzMmNlMDY4MGMzNjhmNTRkNWZlMDM5Y2ZlMTAxMzAyNTFlNGRiMTRjNzljOGQwNDQwNjA0NjU4MjI5OTBkODgwOTNjZDczNjUzMjg1MmU0NDc4ODlkYjg5Y2M2MDA1Mjk5NmEzMmE2NDM2NWMwNzI2MDUxYzExOWVkYTkwMWRlNTc2YjMzNGZjNzA0OTQ4MjM5MmUyNjIwYjBhM2ExM2ZhYjFkMzZmYzBhNWYyM2RiMTQ3ZmQ4NTdiMjZhNjk4MDQ4ZjhiODExZTIzZDcyMmUyZTkwMjdlZDQxMjRiNDhkYzVlNTc4YTdhZWIxOWExYjRmOTQ4ZWU1YjQ2ZjY1Yjk3OTY0NmUyYmUwNzQ3MTQxMThiYWE0YmZjMTViMDg5YTBlMDY2MjdkYTQ2ZTRiYjA2YWEzYzdjNWRkNjQ4ZTAzYzljMmRlYzNmYWNkOTU2MjY1NjJmMzAwMDg4MzIzMGQyYjBhMWY4YTc0NzhjYjc3ZjkzOWE1ZjE4OGY0NThkMTAzN2I5MDE3NjY2NGQ4NmVhODUwYjhhZjUwODdmODY2MDVhNzdlMDI1ZWY2YzdlNmEyYTU5ZjAwNmNiYTE4OWZhZDkzM2Y0MmM1MzI3MDgxMDliYzFhZjgxNDgxOTU5NWZmY2I5NWZiZjViN2U5M2E3MTE5N2U0NzdlZTdjMDRiODUxYzFjMzY2MjJjZGQ4ZTZjODYwZDlhYjJjYWM1NmQyZGM5OGZhNjkxMjRmMmJiMmE2NDcxZTFjNzNiNjYxZjA3MWY1ZDg2ZGU3ZDFkZWFmYTRlZGNkYzdiZjFmNzA1YzU2MzAwYWZmZDA1OGI5Njk3NzkxNDE5ZTVmYjJhNWI3Zjc4Y2UzNDAxZmY1NTAKK1NJRzogYTg0ZjU1MmJmNDQzMjJhNmRiMjQ1Y2EwMDZkMWNmNzgwYzYxNjgwZmU3NDI5YTg5NDdjMzVmMjFiYzRiNDQyMjhiYTMwYWVhMGM3NDRiODY2NDU5ZDNiOGFjYWQ0NTNiMDZhY2UyNDdiYTY5NTI4YzZiM2JjNGIyMGU3NTYzMGUKKworVFNUOiA5MzcKK1NLOiAgODlkZTc0NDJkNzRiYTkzODU5NjljOTY1MWE4OGZlMjhlMDQwZDU5MzkwN2RhYzFhMzk4NzQxOGJkZmRiYWQ4OQorUEs6ICBmZDNiYTlmYWQzMjBlYmE0NWQwN2I4NGE0OTdiZTE3ZDNmYzdkZDk5OTljOTY4ODgzY2Q2YWMxM2IwNjY5YjE3CitNU0c6IDlkNTI3MmYwYjc4NDg4MmI5NGM3NmRmYjlkNDYwY2E0OTUwMjVlMGFlYzVkNTJjY2ZmZmVjZTlmODE3M2MxMDU1ODI2NmM0OTg1MjU4OTFhOTdiZjM4NzhlMzNjM2RlMmZjMmU1MjU1MGI0MzE1NjJjYmU0YTNkMDExZWNjOWU3N2VjMzZhZDM4MzQxMzU4Yzg4MzIxYzAzZDA4YmI0MjZhN2Q1ODU0MTcxYzAyN2VjNDhkNTc4MTlhOTFhZmQwMmE2MThjY2JjMjVlNjhlNTMwOWQwNDdiMTU2ZTM1NzA1MzczYWRhMmViODMxMzIxYTIwM2UxYmQ4ZjBlZmVjYzA5NjE4NjQ3YjQxZGZmMjJiMzlkMDIyMzVmODcxNTMyZjYwODVlOWNjNTJlYzAwOWIzM2VlYmNkYzI2N2Q3NzY3YzkwYzkyN2UxNTRmNzJmM2Y0OGEzNDk1NjMxOWIyOTNjOGE4YjNlMzRlZmM1ZjYyZjJiNGU4MDE5YjUwYTA4ZjVjY2Y5NWJjODMxYmFmNDA4MTFkODdlNWVkYmQyZmQ1MzY1YjI2YTQzMWFlOTU4MDBmZjM4MWNkNjJjYTQwZTE4NjZkOTUwZGNlMTRmMDMwOTE4YWJhYzY4ZTc5MTZkZGI5NWFkYzE5NzEyODc4NzRkMDdlYjBlZGVmNjQyOTY2NTJjNDgwNDRiMGM1NTIxYThkMjcwZDUzZDc0ZWM2M2I4OTBmMzM2M2Y5MjA3ZjY2NTJhZThlNzgzNWMzODIwYWQ2ZDllMzYzM2Y0YmZkNTM3OWE0NGYyOWQ2NWYzNjA5ZmUzNTU4MTdkY2E1NTE4ZGZlM2JkNzY5MzIwYTAzMTkwMmU5Y2Y2NjY5YzI0Zjg4YjAxZWIzNjk5NWJkYjhkYmVkNmVlMGM5YjdmMzIyOTVjNjFiYTg5MDVlNTU5OGYzYzllMWM4YmY3MjY0Zjk4MjkzZmFlYTE3NzQ3Zjg4NDQwYzMxODE4YzQzM2VhM2QyM2MwMWY0ZjdlOWMzZGQzZDVmMzJlYzllYWNkNzFhMDllM2E5OTczODFmMWNiZmZkZjRiNWJhNDk3OWRlYjdiMDk4NDFhZmEzYjAzZDFjOTMxMTA5N2I4NjJjYWUxMTcwN2NiZDNhNGFlNmM4YTI2YTMwNmE2ODdjNDE0YTRlYTFlODEyZjExNWY2MGY3MGJkYTdmOGZiZTdiYzJkNTBjYzU1MGJiYTI5MWQ1ZWM1MjMyMjlhMDhlZDU2OGI1Y2VlMThmZTZmNDY3ODJjMTdjZDgyODgwMTYzOTIxNWJjNWU5YmU0NTU1YzlhMTgwMDk3NjdhNmM1Yzc0YTgyMjlkMmZmYWEzOTlkOGU2NDMyNGU4ODQyMjNkNTA3MGY3MzVhNzVkODVmZjZjOTRhOWZiYzJiMzY1MTM4NmRlNWEyM2NjZTk1Yzg3ODgxYzc5Mzk5YWU3MWYwOTA3MzdlMjE4N2ZlOTA0YWFiMWQ5MmQ2MTg2Nzk1YzliNDZjNjJhNTkxNGYzNjMwZmRjYmFjM2JkNGIwZGE0ZWMzMTM2YTFmYjJiYTQwMzIyZDdjYzQwODVlMTY3MDA5Y2Y3NDUwZmM2YTI4NmMyZjc5NTFkNTFhYWUyM2I4ZjMzMDIwZWZiNWUzMjQ1YmE2YTM1NDNhMmJkZWM0NDdkNTFhZTAwYjVlMTY3OGI3NjA5M2NmMjE2Yjk1MDdjOTYzZWJmYzAyNGNjZDZlZjZjNzhjNDU3MjI3M2JlYWFmNTUwNzZkYzQ0YTIyNGI1ODYxNTcwNTc5MTk2NTMwN2NlZmQ0ODY3MmMwODFiY2NmYmMxZDE1YjA2MmIzOGI0ZmJhOWI5YmVjOTU2Y2QxNDQ0NGVlNDM3ZTc5NjBjYzYwMWVkZGMwMmYxYTc2YjY4NTc0ZDVmODg0MzE1MGMwYjkwMDk5MzRhMmJmYWY2MDU3NzBjMTM2YmEyOWYzZGM3ZTI5NTk3YTI0ODBkYjIzZTJiMjY3N2VjNmM1MWJkMzAxZjJiNWEzOWRmZGE3YjQ3N2JlZGQxY2RhZWQxMGUyOWQyOTU0NjI5Yjk4NzZmOGVlNTRlNDA0NzM2OWQ1MzRjYWI1NGFlYTQ0MWRjOTQ3ZWIzZjU5MzgyYjIxODM2MDU3MmYyNjU5NTgzMTUzYzBlMmI5MTJjZjMwYzgxNWIyNmYwNTg1M2RkMzA1NTFlZWNmNjRiODU4YTQ0MWJiOGM2ZGI4YTlmZGU3N2EzMmE3YjQ2YWY2NmY4Y2I5ZjM1ZWUwZmFmYjBiZDQyZDllNjViMmE5MDU4MjQxYTMxYjhjYTExMTU0MzQyMzc2NzBhYWI0ZWZmMzYwMTBlZDAzNzFmNDY1OTVkYTFiZGQ1NzliYmI2N2FhZGI2OGU3N2FkM2EzOGM4ZjI2ZDJhZjVhNzEwM2JhNWYyMmI0MmNjMTJhOGMzY2U1YzkyMWM5MWNmYzBlNjNkZjkwMjdkMjYyMjliMTA0N2NiYzE4ZjZiMAorU0lHOiBiYWI1NzI4NGQyMGVlNTRjYzdmOTcwOGQ3MTc3MDZkOGZhZjZlNDYzMzJiMDY5MWQ2ZjIxM2E4ZGI4MDExNTViNGUzMzhjMTM2MWI1OTJiZTc1ODUwMWIxODIxNzkzYWU1MjI3Y2MzYmE4ZGY4YWRmYzZlZDlhY2FiNTRjYzQwMQorCitUU1Q6IDkzOAorU0s6ICAyNjIyYmQ5YmJlZjdmZjRhODc2MjllYTAxNTNkYzRkNjA4YzMxZmE1ODQ3OTg4ZmY1MDBkODgwNjgxZjExMzcyCitQSzogIDE5OTc1OGE5YzNkMGVlM2VlYmNiYmRhM2UxZWY1NDU1ZmY0NmQ3MzZiYjRlZjBjMDZhNzM5ZjlhYzU4NDgzOTUKK01TRzogODkxZTgyMTIyNTQ3ZDYxZTgzYjBhYmFmMjdjNzMwM2YwNTIyYTJlYzRhZjQ0ZWYwYWMxOTZhOTk3OGIxYzYyM2VmMWZhNzJiYWY3MDkxMGE1YzUxYzRmNzhlMGZlOWZlMzdlMjQzOWM0Nzk1OTE2Y2ZhMjJhYjQ3MWEyNTU3Y2M3YmE2YjY2OTU2MDYzZGRlYjM5YzUwZjE0ZjA2MzQ4ZmE2NmI2MDY0ZGNmZmNhNTA0Mzk2N2YwNTI1NGQ1NzdhYmYyMmFlOGM5MDAwMGNlMmU2YTFhOGIyZTNhNmIzYWJjNTYzZWJmZmIyMDQ0NWYwOTExY2M0MmE5ODdmODQ1NmVmYmE0MTMwZTY4ZjAxZmNkZjdiZjc3MWZjMWQzNTM3MWEwZDc1ZGQ1ZjkwMDAyYzkwYjZjYmFkZTQwZDViMjNmZGI0OWFiYWNiNzIxOWFlMjc1NjFhYTJhODc5ZGE4OGRmMzRhOGM1ODFmMGM2NzE5OGZmYzYwOGZlOTE5NWI1NTU1YzhhZTkzNGM4MzBhYWUyODg1YmVhODc0ODc0NDhlMTFiNGYyZjE3MmU0ZDVjZmU0ZmQxMTNmOWQyMDE2YzI0YTczNDUxMmJiOTE4ZjU3NWU3NTQxMzk3MThlM2QyMGU3OTBhYmI5NDJjYmEzZWM4YjJkYjU5MDc5NmRjNDM1ZjEzOWZjNjRkZGM4NWEyMjQ5NGVmMmJmYTFmNWMwZjE4NzVlYTU4ZTg0ZWIzNzRlY2Y4Y2VjNjQ2OGI2YjA5ZDFlNzRmMTU0MWVkNDU0YTI4MDdkM2Y0MDUzNTY2YjBlNGUyYzZhZWNlZDEwZGMwMDdlOWRmNDE2ZjI2N2ZjYjNmZTE3YjhiYWNlMDNmMDc0M2UwZTZkNGE0OGNlNzZlZGZmNjBjMGUzYTMwODQ1Njk5NTQxM2MxMDc2ZmYzN2VjZjIzODFhMGQ0ZTllNGE5MTNhMjU4ZDk4M2I5Njk2YjVjNDVhZjM3Yzg2ODQwNzBlNDAwYjhmODY1YTUwNDA0M2Y0NWQ3OGI5NzEzZjMzNWFhNDE2YTQ2MTY2NDEwNzM1ZmI1ZDgyMjEwNDU4ZDVhMDhhMTA0ZDQwMDJhYjYxMTg4ZjlkZjQ1N2RkN2VkNTkzN2NhNTA3NzYwNmI0MThiYmM4Njg0YTFkNTI1YmZhNTUxMDg3NjQwYjFkMTc3Y2E2ZDRmNjQ3MWIzOWIyY2U0M2FmYmY4Mjg1ZWNkNjg3ZTQzOGY0NDI1ZGY1NjhhYjg2ZmEyMzE2MzQ5YTExMDJiNDE0M2Q3MWVmNGUyNGY1YzUzMGM3N2FmYjAxMDA3ODg2MzY0NDBlNzQwNjc1YTYxNzRjNWYwNTcxMGIyNTNhNDExMTczZjllODJjZTZlMjJmNDA5NWU3NzE0Yjg3MzdlMTQ3YWEwZjIzMTkxNTc4ZmZkOTM4MjNjZTRiZjkxYzFkMTEwOTgyYTVkYTBlNGI4MWJkMjViOWI5YzIxNDJhNzY3MWVlOTM3YzkwZmQwNzE1ZWM5YWZhNDRkODYwNDY4OThiNDJmNzUzNTg5ZDIyNjhkMmFhYWE5ODVjYzkwZTBmOWU4MjdhMzkyM2U3NzE2MzQ2ZjRmODkzMWM3MjgyMWIzZWI2NDVkYWE3NDUyYzhhZmM4OThkNzk3NTU0NWMxMmRhMWJkYjIwOTA0NWNiMDBmNGJmZDUzODNkZjAxZjAwMzY4MGI5NzM0NDBmMWEzOWM5ZDgyMDk1OWVmNmY4NWJkMzM2MzkwNjVhZWZkYzhiY2ZlY2JkOWI5NTU0MDQ5NzM4YWYyOWYxMjk0NjM5ZDM5MTVkNjMyOTk1ZThmYWY3MTNlZjJlZTNjMjk4YjU1OTZmYTEwYzk5Zjk0NmRkYjMyMzQwNjk1ZGYxYzE5NDU5NGVhZjM3NzhkNzNjOGJhNjA0MGMwNGViM2E0ZmY4Njc3OTM2Yjg4ZTBjNWYwNDQxNDgwZDEwN2Q3YWMyMjAyYjNiNjk0ZTU3Y2NjYTZkODI1ZTJhMDdlODEyZWQyOWIyYzIwZDVjNjA1NDcxNTc5ZTNlZGZmYzIyM2YyNDJjNTkzOTFkYjQxZTk4ZDVmM2Q2YzViMWUzMmFjODIzN2ZjZmQxMDIwNTQzYTQwNDFlMDNkOTJhZDNlMmVjNTUyOTE0NzA3Yzc3Y2QwMWYzZTQ4MDExNDQ0MjgzZjA5NjhmYTRkZWVlZTU1YzQ1NmVkMWY4NzdhZGUwNGFjOGU4ZDJjYjZjODU4MjBiNDkyOWIyNWJmMzFlOTI1NDM1ZDZiY2M1MGQzZTJlOWI4NTEwMmU5NzBkNzg5NWMyNWFkZTUyMTYxYTNiNmJmNTAxYWIwMTk2MWNiNjNlZDk5MGFlYjkzZWRhMzgyOGJmMDRjYTUyODUzYzdiNmI4ZTllNDllMzQ5ZDY5YjUzYmUwNzQ4NWY1NDJiN2NkZDA2YjUyN2Q0MWRkMTE5YzcwYjU2NGYxYTkzYWVjNjJhZTc0ZTZlOGY4NTUKK1NJRzogNDM3ODk2NmI3ODMxZGVmNGFlY2I0OTg5YmNhZjljYWU5OTQ2MWNiOWI1OWQxOTUxOGNjMWVjN2I4MzUxYmNkMWY3MjNhYWM1ZjA2MWIzODM2MzU3NGZmOTZiYTEwZTE5NmIxYjA1MzFlMTE4MzAzNmE0MjVlNjljNDU5ODA0MGMKKworVFNUOiA5MzkKK1NLOiAgYWViMTNjY2I5MGM4Y2JlZjkwZDU1M2RhM2Y2OTAxYjNkNzVjMTMwMTFmMDI0OTc0ZGFmNzlhMTc4OWM4YzYzMgorUEs6ICA1ZmFhZmViNTk1ZjE2ZDMzOGYxYzcyYTlmM2U0OThmMzhiYWI2OWE4MWIzN2QyZDA5MmI3YmY3ZTUwNWQ4MjBkCitNU0c6IDg2MWExMDE4ZDZiZGM0ODA1YTVjNGRmODdlZmFhNDYyYzY4YjRiZjQwNjVjNjg0YzJhZjEzMWM2Mzc3Mzg4YmFlZTU4YzZjOGY4ODQyMzYyZWM2ZTNiY2UwN2M4YWY1NTg4NWU4MmRiODdhMTUyMjc4MDBkZDMzYWZjNWU1ZmQxNTcwMWU5NWY1MzUwMWIxYTZmZjgzYzY0ZTg1MTcxNDliZjNmZjAxMWIwOTRhMDljNjczZDBmYzRhMzllZTU1ZTY5ZjA3MTE3N2I4YWEzNjRlMWUyNTYwNjRjZjcwMjc5Y2M3NjY5NWFlNDlkYWZjZDgwY2EwYTE0ZTE2OTFkYjk0NjQyMmVjNzVhYjRmNzg2NTkxNWE2OWJkNDhkODliMTJhZGY0ODdkNGRiOWJlODdjZGRjYTIxMWFhODhlOWJiZTg0OWRhMjEzOTg5ZWIwODQ0NTkyYWQ2M2UyODFiMmU0YWZlNmE4ODM2MDA2NjA5OTI2YzBmNzg3ZTg0ZjJhOTViNDZiNjZmMGU0NTU1Yzk0ODNjZTIxNzZmYzYzZjdjYzlmNGYyYTIyZGIwNTVhYWUyZTY4YjMwYTBkYTVmZWI4MGMyYTYwZWExMGRiZjY3ZmJiY2RiZTBiZTMzZjJlOWMxM2M0NjllNzc2OGYyZmY1OTYwYTU1ZWI0ODJlYzExZDQ3ZTE1NGI3YzQyYTVmYjc1NmM4YWQ1MzliMzNkMTI1YTRhNjUxOTJjNmM5YmQ1NzYyMzhjYTcyYTczY2QxNzllOGNmNWNkMDQ4ZWQzMzAyMTM4MjNhYmJhZmMzNjgyYjJiN2Y2OGM1YmM0NmZkMDlhOGNiMmEzZmQwOTk1NzNlZTJlNmYyOGM4MmUyNzFiYjVlZjkzNGIwYjBjMzgxY2ZhYWVjNjY2ZDcxNzEwNmE4NzRhZjMwYWE3NDEyNWVhZTlhY2MyZjFmMjQxMThjYjRlNjgzYTczMWUzN2U1ZTQ2NGExZWEzZDJhNTNjYzBkY2FkNGMxN2NlYTlhNDNlMjM2NWYzYWUzZGQ4OWViMzk5Nzc0MjAwNDU1NTA3NDVmYzI2N2ZjN2RjYzU2MDJlOTE0OTcyYTRkYTZlYmViNjg3ZjY4YTBjZDdkOGI0ZmRkNzM3MjIxMDZhOGU0MzZiOTNlNWI1OGY1OTgyYWNlY2RlY2ZkYjM4MmZlOTg1MzgyNjE0MjZiYTY0MDUyNTU3NjQzY2U5ZmVjNzFlYTQzY2Y1YjZjYmFkZWI0OTUzMTkzZmYzZWQxYTFmOTIyYTlhZjJlYzZmMzM4ZTdmYjBhZmZlM2QxM2MzM2UzOTU4NzNlNGE3YTdmYjA0NDk4MWUwNWE2NzE5N2I5OTZiMTk5YjQzMDExMTE5MzYzZTU2MWQ1YjhhNTE3ODRmZGZmNThhYjgwZWQ0YzQ5ZTkzZjBjZjQxOTI0Zjk4MzVlZmIwOWY2NDQ2M2I2NTUxN2I2N2IxNWRjM2YyOGFkOWE5YjJkMjk0NjhkZTJjNjNlNjIwMDRiNmEzZmQwYzVjMmUyYWFhNmNmYTE1ZTRmYWFmYTFlMmM3MTNlOThkM2ZkMjVjYWI5ZTUxNzAzNTljODM2NTE1MmI0NzQyNzZlZDAwMzdjZGY3NzE4MjhlMmZiN2NjZWM0ODk1ZjIxYWRjYzViNjg4N2M4NmU1MWFkMDVmMjU1ZjZlOWRhZDJjNDFmNTZiOThiN2JiYmY5ZmNiNmJhOGNhZGZkMzhhZDhjNjJmOTJkZDg3NzQwZmExZTFiZDE3MGMwMGIyMDQ5YzUxMzBmZTczM2YxNmIxZjJjN2YwMGIyZWY5N2IzYTk1NDU4YzUzZjE5OWQ0NjUzMzZkNWZmNTk3NzgwNmUxYWZkZTNlYWEyNDZkODVjYWJmN2UxMjM0ODFlMjM5Mjk5NzZlZDE5YzQwZTI5ZmYzM2Q4MGU3ZGVhYjE5MjcxZGVjZDVlZTA2MTcyYjBiMGExMzliZDYyYTJlN2M4M2E4YTY1NjAxZDBhMDVkNjFhZjljNjAzMmRmNTgwMDFkNDczZTIwZGQ2YzZhZmQ3OGRkYmQ3Y2QxNzhlOWMyNzFlMDU3MmY4NTk4MjgyM2NlNmM0MDI5MzBjZjgwZjVlMGM3Y2RhODUxMjJhNzZkMWNlMDIxYjFlM2RlMjU1NmQxYjQ1YWM3YjAxYjU5Y2FkYTI1MjkxZDYzOGE1MmE1ZTdkYmNkZGY5NmJiMTc3NGFiMGIwNzdlNGIzZGE1YTk1OGZlMTFkZWU0YTAyZTY5YjkxOGRkYmZhMWM1YjNiN2RjYTlmODc4NGJiNmIwYjlkNWE3ZmVlNzRiYjAzNzQ3ZjYxYzJiMmYxYjQ5MjQ1MmQzYjU2MGI0OGQzOWQ4NzIxZTk4Mzc1MjU1NmQ0NGRhNmIwMjhkOWFlZjhiZmY5YWEzNzljOGUyYjBhNjM2ZDc0ODg2MGFiZDhlNjRmYzhlOTY1MjBhMzRhMjdmNzY3YWE5N2E4Zjc3YjYwOTUyMThlYWQKK1NJRzogMDYxMWIxOWE3NDcyYTQ0M2U4N2U1NGQ3YzY2NDdmYWFiMWI3OWE4M2ZkNDM3MWM5MmI5NzU0MDBmZDYyOGFjZmMzMjU3N2NjYmJhZjAzZDg4Zjg5M2M4OGYyY2FjNzg0YzcyMmEwOGYzODdhYmMzMTlhNzAyYzg2ODQ3OTY1MGIKKworVFNUOiA5NDAKK1NLOiAgNzM4NzJiMTQ3NjJmNjhkYWU0ZmMxMGRmZDZmNDJkM2Y5NjIyYmYyYWZlNmIzNGE5NTY0OWFhMzg3NDI0ZWU2YworUEs6ICBkZmFiMmNlMWFiOTk4MWFhN2NiZjMyMDczNTAwMDdmYTZjZTZjYTYwYTJlZDdiNTkwZjNjMmY2MjkyMmQ4ZjYxCitNU0c6IDQzM2Q3MTc4MWNlYWIyYjQ3ZDgyNmU2N2QzOWY5YjgwZDJmZmQ3MjVmOGM1YWViNDBjYmU0ZjliNWY0OGVmOTM1MjFjY2VjNjA0MzYwYjk2NDczMjMxOTBiZmVmNzVhYzkzMTU2MmQyN2Y0YTRlMzFmNDZlNTdiYzk5ZmE1MTU4YzgyZTEyYjczN2U0NWM1ZGU5ZjdkZDdjODYyMmQ0YTdlYWFkZjcyMDJmYjQ5ZDgxOWM5YWQyNGY4ODA3MzEzYzVmMzdkYzIwNDUzYmRmMDVjOWJmMWEzYzIxMTdjOTNlN2YzY2M4YTI1NDIwOThlOGZjMWM2NDJmYTQ3YjA1NTQzNjU3Yjg1ZjQ4MGJjODZlYzQyODAwYmIxNDIyMzU5YzdjM2U4ZmY0YmU1OThiZDU0ZjFkYzU4NmFjYWU0NWE0NzQwNjIyYjk2Mjc0MmJjODZlMTdjZmE2M2U3NzUzNTRlNzcwN2U1MDc5NTg5ZThkMTA4YjFmMTFkYWNlMDU3NWNiOWE2ZDI2YjU5ZmNlOTgxNDY1ZDliYzM0NGVhNjk0NWE5NWI4NjI3OTYzODRmYTgxNzA1NjA4NTc0NTdiZWZmOTVhOWI1YWMzZDZhZDI4MmQ0NDkyOWEzMDMwMjZiNGJiZWRkNjBlMmVmMDU1YTMxZjUyZDdjZThkZjJjYTVkMTg1MWM1YjE2N2RiMDgwOTI1OWJiODEyNTY5MDc0MTA1YzczNGM4NWQ2MjMxMjczNzU1ZjNhOGI1NmRjNTA4ZGI1YzIzZGFjYjdhMDYxNjdiZGE1MWJjMDEzNTBmMDE2Y2Q0MWIyMWU4Y2M1YmM5MzM0M2E5YmI2ZWE0NzM4YzVjODRiNzhmYTk2M2M0MTBlNDMzZGM1OTgxOTZjMjJlNWI3OTFlMTJhNGIzNDNmN2NkNDdiYmIwZWIwNzgyYmRiMWE0ZTQ2Njg0NmEwMzA1MjhlZWI4OTA1NmY3MzI1NzE5M2FkYWFiYzFiMjI5ODYyMDM0ODc4YzMyNThhNTMyNTQ4NzYyZTI5ZWNjMDAxYWJkOTg5NjQ5ZGE1ZTE0NGNmMzVkNDg2OTlmMjNiYzQ2YzViMzRlMDRhNTNlNzI3MjRiMmIwYjg3ODk4MjU3NWQ2ODhlMjNjYmUzYTM0MDY3ZjQ5NzFlNTU1OTcyZWMyOTA4YWU1ZjAzZTg4MzFlYzY3NzU1YmU5NTY4N2NlNjM3MjkzOWUxZTJmYjY5NTFlYzllY2Y0YmY3ZDE1MzU0MzFlMjU5ZjI5YWQ0MzEyMjJiNTRiNjVhYTdkMDdjZmI1ZGYxNjJhODdjNGQwMzQ4MWViNDQxZjIyMWQ3ZjU4NjI3YTE0MTY0ZTdmNGMyZTNhMWQ1MDdlODk5ZDUzNThlMDA4MjliMDhjZjNhZWNiOGE3NWIyYTMxYzMxODVhNTgwZTEyYjEzZjA2NDI4NjlmZmZiMDU2NzIzZTk2MWFhZjZmZWZlNjdiNGE3YzRjOTNkYjNmZTFmNjFhZGNjNzY1NTY5YTk5YzA5YTNjODI0ZWQ0YTk4YmFiZWFlNDNlZmIxZjM1MWJhMTMwZTIyYWE5NzgxMTk4NmJlOTIzY2M0MTgwYTdjNGI3OGJjYzE0MGNlYzE1NTc0NjU0YWE2ZDY1YTA2Yjk3ZWNmYTVmM2E5MzU1Zjk2ZTRlZWFhNzY4OTIxN2I2NjNmYmE0ZGFiMGQ5OWIxOWM4ZDhkYmY0N2ExNTdlNWQ1OTY5YTM1ZWY4NGRmZjk1NjJlZGQ0MzRlNzNhZWU3ZDBkODkyZGRhNzJhMzYyYTIyYTdlOWZhODYzNGE1N2VlYmQxYTkwNzQ4NWNhODkyMWJkYzE5ZWU5ZWU1ODhmMzk1Njg3ZDNmYzhmOGMyNWYyZTk1NzZjYTYwMzEzZmJiMmMyNjVhOTlmMmNkZDU1NzViMWRkNTMwNjA0ZTlhZDY2OTVjOWZiMzU5OTRhOGI4N2Q1Yzg1NzA1NDlhNGQzMjliOWZlMDg3MDY5YWI3ZWIwZDcxNGE5NGUxOTI2MWY4NmU0NDhmMmRhOWIxY2IwYzBkYmU0MWQ0NGMzYTgyNDc4M2QxYmRiZDczMjYwNTFhZWIxMGFkYWI4MDVjNWM1OWQwZTgzYjFjMTFhMmZkZDM1ZTQ0NGE0OTllZDE1ZGFmZDgzODYyNzc1ZjZjZGZjNjc1OTU4MTg0MDdiZTU1ZWNiZjdiZjg2YzczMDY5YWFjZTU3NzYyNmE4NTYzNTM2ZjYwNTA0MmNmN2NhYWY2ZmM4ZTNiNTQ1Yjc3NDE0ZGY4ZDlmNjQ5Yjk5ZWU0MjU0MWRhMzhjM2FhZTYyNzIwNzg0NWI4ZjQxNGE4MDc0ZDcwODY4YTVjMGIwN2IwNzBjM2M2NTNiZTA0MDc2YjgzY2FkN2IwMzA1ZDk1MDBhYTQ0NDU1Y2I4NjBkY2M3NjQwMGFmOTNjM2QyZWZiNDJhZTA1NmYxNDI4YjY1ZjEyMmUxYzdiOTU4NGQ4MTRkNTBhYzcyZWZkYgorU0lHOiA4NTI1YzM0NmNhM2E2YTZjNWY2NWM0MTc3ODU5OTM3NzY1OTg3MGNiNmRmOWE0YTBlNTViNDBjMzViZWJhNTVjOGUwMDllNTYwMGI2NDQ3ZGM3NDAyYmEyNzc0OTI5N2U4Zjk1Mjg2OTE4NTZmNzJkMmFkNzYxZWQxYmMxNTMwOQorCitUU1Q6IDk0MQorU0s6ICA2N2NmMjcxNTUyODdiZTZiZmFiNjYyMTVlMDE3YzM0NjYzMjJmMjFlNmViMTQwYmU0ZjFiZGVjZjU1YWJmZGMxCitQSzogIGQwNzBhYWIyOTVhOGFmOTM1NzI3YzNiZTQ0MmIyNTFkYjllNzc0ZDJmNDRiM2MyNDI0YzUyZmM4OTY1NmUxNjkKK01TRzogMGZmMDUyOTcwMzFjODkyNzc0Y2IyYzAxZThjYTYwZGRkMGNlYWNjMGI4ZDU5MWE4OTFlMzNiMTllMWJlOWUzNjNiYzY0MjBkNmY1MjlmMDQ4NDBiM2IwODg1M2M4MzVhMDNlMDM2OTc4YjA0YTRmOWVjNmJlNGFlZjMzMTk1NjE5MDk5NmRlYTI3MjYxOWYxNjg2ZDMzYmVmMDNkYmMwODVhOTIzYTBmMTE1Yjc4ZjY1M2ZlZWI2MGJiOWU0NWYzNGZiOGJlNWE0Y2JiNjQ4YzdkMjk5NTZmMGQwZTk2YmRkM2M4ZDA2NDk3MjA2MjRjYmMyMDc5ZTg0ZmQ2ZDAxMDI0MTEyNDA5ODQ1OWYxMmFmMjk5MWQzODI4NzcwZjUwYjEwNGVhNmU1ZjUxZmRhZDMwYTliODA3OWQyMTU5ZTQ2ZDY0YWY5MWQwN2MxMGVkMTk4MTRkZjJhZmU2NjBkN2Q4ZjI0MDM1MzRlOTJjNjJlMWVhNmQ2ODgyMDNiY2EzZDk3YzJhZmRhODNiMjU1NTIwZmZlOTJhMzM2MjU3NzI1MTNiMWZlMzRmYWZlMzJiNmE5YjhjZjk5NGRmN2U2MzRlNjg2NTkxZTVmMDA3M2FiYWJjNjRhODkyMTBiYTUzYTQ5OTFjMTE1NTdlMDMzNGU2YzZhNTAzNmM2NDJhMzE4ZjIyOTUxMTcxMzkwODVmYjM0MDc1NjQ3MDA2NzU4ZTMyYmMwMGFkMTA5ZmU4MDNmN2VlOWY1ZWMyYWY0ZDI1YzMwNzBhYmM1MWNmNGQ3OGUxM2E3Y2UyODNkNGZiNGViNDFkM2U4Y2U5MDIzODUwMGFlMGNlZGEzMjBlYzU5MjJlZmExMGI5MDM3NDhlMWU4NTNhMzcyOWQyNGMxMDU0MzlkZjJmNzAwMDEyM2RiOWIyYzAxNTMzYmJmMGQwMjhlYmIyZmMwMGRjZTM4YWQwNjMyOGVlOWVjZDg0OWE2ZWZjM2FlODg0ZWY2OTMzY2ZlYmVkMDU1YmIyOTY4YTBiMDY3NmI1NzI5MjE2MTc4Yzc1MTllZjA3ODg1OTNmYzBkY2ZmNTBkN2UwYjFlYmIzY2Y0OWJiZDFiZmE1YzMwZWE3Yjg4YzM2ZTFhMTU5M2FlZjBiYjNmOWUyMDkxYzg1ODlmNzQxNGJlZWQ4ZGY0NjZhMmVkODdiMmNiNWYzNWYxZDMxMjQ2Y2ViOTY4NjA5MjUzNjE1ZDc4MDQzNTE3Mzc5ZWU2OTc0YTY2OWNiNDhkYTZhYzJmOTZkNzAwYjdlNDRhNDM1Y2ZlZmVjNDAyYTFlMzExMGU3Njk4MTkyNGYyNjAxYzAxZGMwMzU0NmZkNGY1MTE2NDkzMDJmMDYzM2RmYmQyNTY1MWM1YTU5OWM5MDk1NDQ4OWM3NmE2NWVjMDVhN2U0Y2M3NDYxNmNlMjU2MDFjYzM3YjgwNGUxZjBiY2M4NjUxMDIzYjEyZTEzNTY4NDQxZThiOGVmNGMzMDVmY2RhZDNkMmIxM2ZhMDgwMzI0YjJmZDZiNjE5OThjZjg2NGI2NThiYzdmZWZjYzQ4YTVhNzY4MWQ3Yzg2NmMzNDJjN2Y1ZDZjZjEwODgxNTIyY2M3MTAyNTdkMjVhNGMxZTM1MmQyNzBlOTAyMDgyYWI5NTQxZDU5MDBjZWZmYTA5MTRiMTZiNTVlMGRkMzc4NmU5OGQ0MTcyMDg3NWExNDhlYjRhYmRiMDE1Mzg1NjY3OWZiOThjMGVjNDg1ZTVmNDU4ZDYzNWI3ODYxYTJiM2E4YmE1ZWMyYzE0NDRkMzUzOTgwMjAwZTVlMDcxODA4ODU0YTI2OGNjNzZjNjA1Yzk0ZjM3MzI5YzM2MTg3YTQxZmRkZjkyYWFiZGI0OTk2YTBlMTBiMzE1NTI2YWZlYWM4MGViMmZhMzJhZjc4NmEzNDMxNmIzNjExMWVlOTM1MjEwODE0NGQ3MGY3ZDE3MjNiMzJmNGRiYWE4MjIwMTM1MzQxMWQ2NTc3MTNlNTVlMzVkZjc4NTgwYjFiYzA4NjgwZjAxNTlmYTExNmZhZjQ2MzU2NmFhZmU4YWVhNjk4NTdlNzJlNDRhYzgwOWFjNDNmNWM0NTkzOWQ4NWExYTVmNGEzNzBhMTg5OTZjODUxNGE0NmYzNDM3MWVmOWU1ZmIyMDQ0MjJjOTM0YTFkMjkzZDEwMWI4YzE2Zjk5Y2MwNzNlYTM2NmExM2E0NWM0MzdkNjIwZDEzMmI3NDQwOWNiZjhiOWMwNzViNDE2M2Y3MjZhYTY3ZTUwOWEyNDg3NGZjMWIxZmI2ZmI3YzczNTUxNTljMDJhYTEzZTY0YmFkZjE1MDM1NmIxODQxYjMyMWY4MDQxZTEzZWQ3N2U4NDYxY2ZiYjhlODI4NDg4YmY1MTdhNWQyOWZmODJlNzM2NzQ4MGE4ZWRkZGViNTM1MGU3YTgzNDIzYmQwYjFjNTVmN2JiNDI0Y2EwNGMyMDU3MjNjZDU0MDU2NzFlNzMzZjM5MTYwMGEKK1NJRzogYzkzNGEzYTFhYWFiNzhkOTI2OWQxZTlkMTMzOTJmNzJjNjM3YmM1ZGU1NGYwNDY5MWVmYzI5ZDQ3M2I0NzUwMjVkOGQ4ZmUzYzUyM2QyZDI5YzQxYzVmM2RlYzZjYTM4Y2U2ZDY4ZDdmZjA5YjYxMzViYTI0ZDBkMzJjYzE1MDIKKworVFNUOiA5NDIKK1NLOiAgMThjMjFjMGQwZGUxM2Q0YzY0NDk3ZWYwMjYwZDY2Y2ZkMzQyMTY5ODFhMWI0OTM5MWFlNWNiMGU0MTQzNmU5ZgorUEs6ICBmN2Q0ZGQxZTA1OWMzNmY2ZDEyMWMwYWZmZWIyMWYwYzU3MmI0NTk5MmY4NDk0OGIwOWFhZmJjZDg2YmI1MzVjCitNU0c6IDY4YWJjYTdjMTY2YWZlMDYzZTQ3N2I4MGUzN2RiMjI0ZTFhMjM1ZGU4ZmNkZWI3ZjQyN2FmNjdlMDAxMjQ3Y2M1ZTA1NzE4MmZkOWI2ZGI4YmFiYWE2NThjZjNiM2ZlNGIwNzYzYmY4OGQ2NzMxMWIxMTkwYmU4MzQwMThjZjU3YTMzMjkyMjQxMzc2NDYyMGFjZTA1NDQ1ZWUwMTlhMDZkZmY5OGIyMzg5NzlhZDZkMzA5MDFiZWZhM2M2NGY2YmQ4YzZlYjA5MmMyZTYyODQxMzg4ZmQ4YzRlODQxOWUyNzc4OTg0ODk2NzM3ZWQ5MGEyY2RiMjE5OTZhZWY3YzIxNjM4ZDZjYmU2ODAzMjJkMDg5OTY1OTdhOWUzMDNmNmY1ZjQ3OTQwZjhjNWJhNWY1Zjc2MzgzZTdlMTgwNjRhM2QyZGZmNWZkZjk1ZTkwYzVlYjMwZjRkOGQ0NTllZTFkNTA2YThjZDI5Y2RjNjliNjc1NDk2M2I4NGQ2NzQ5NGIzNTMwNWQxMGQxMmI5NDg3NDE3YjJjZTI4YWRjYjEwYjY1Y2M5MzFmYjMzODFhZTAyZTdhZjc5YTAyYmY5OWUyNThhNTYzNjEwOTBlMGI3MTIyMmIzYWM2MGJmMmZiN2JhODMyZDAzNGY1YjZiYzZmYTY2M2FlNzQxZjc2ZDk3YzFhYzMyYmNiNzQxMTUwN2Q1MThkMmY2MDU0YjU3ODMyOGM1ZjY3Zjc1OGFjMDFiZmU2ZjRkMzU5MDBmNTBhNWRjZDMwZDJmOTI2MWI2YmJlYzRjMWQxZmMxOGQyYTdlNzBjNGQzNmMyMWZhZjhjZjk0YTU4N2MzYTBkMWE5Y2RlNzgzMWFlNjI2Nzc1NDY4ZGRjZDQwYThiYTE4ZjQyYjM0MTg4ZGU1NzQxZTFiZTgzMDdiMTA4NDU4NjUxNWVjMDE1ZTRlMzcxZDI5NDQzYTQwYjBjMDY5YzY0MWQ4Y2VlNWU0NjExODYyOTg3YzNlMzU2YjEyOTNiMDUxOGI0YTRjOGVhOTdmYzVhNGRiMWYwMTI5YWJlZTcyZmI4MDkyZWEzNWMyZGFiNjc1NzM4NTAyMDdiOGU4MjcxODk5OWFkOTljNGM4MzllYWMxNDYzNmJkNWU0ZDg0MzZhMjcwZGQ5MGI4ZTMyMTMwMmU1MmE5MmQ4OTFmZjE4OTE1NDJhZTJjYWEwZDY2ZTBmNjYxZWFlMzdiMjViMDhiYjJlMGVlZWM0ODM4MDA5Nzc4Y2Q1MjU5ODQzODA5ODNiMmJhYWRkNzEwMmExZTM1NjczNGU0MWQ3NjE4MzgyOWVhOWFiODI0NGMzMzY1OTdjYTJkNjc5ODhmMjgxNDM4NDY3ZTQ1M2Y1NjJjNjdiMjJkMGE0ZGQ5ZmNiNDZhNWY4MGQyOTlkYjVmMDFmNTkxNjBhMTlkNzRjNjQ0ZmE1YTk0MGUzMmM5ZDhkOTgzYmFiN2VmYjBkN2M3ZGE0ZTNmZGExY2QwZDE4YTQ1NThlYjlmZTQ2NDA4YWFiNTA4NTkxMmJmMmY0NmFiNjNhOTM1NGY5MDI3YzkzNjkxMjIzZmZhYWI4NDYzYmFjNGM0YmMzYjExYWJjNDZiYTY4NzE3YzkxNzgwZDNmMzA0NzBkYmRkODhiMzc4MGExOTRjOGE0MGEyYzBhODFhNGQ1NmRlYzJkODk2MmMzNGQyYWI3MzM2OTAyOGUxYmZlYWE2YmI1ODI0MWZmNGY4OThmODBhZDNiYjFjNjkxYjg2NDdmMmM2OTgzOTU0YzFjNzc5NTc0NThlZWJmMWM1MDU1YzMxNjkzYWJjZWQwNTM4NDczNWE0Zjc0MTk2OGJkNmFjMzE1NjVjZmVlNzFjODg0YzFlMjllOWU3YWUwZjdlY2QwNGQ0NjNiMWRjMzg5YzM2MDM3ZTgxNDU4ZGNlYzYxZDA3NjQwMzJkZDU4OWI5MmFmZGEyZmM5MDI4ZjQxYWI1M2NjYTJkMDRlYzZhOTU2NTk1NWNiY2YxYTM0NjM5ODljNzEzOWJiOTAyYTU5MjFlOGIyYzk5YzQ4ZTEzNzExZjBiY2MzOTkyNTk1MTZjODFhZTk0MmE2NzlkNGJhMzM5NzllYjEyZmNkMjg2MDYwMmU0NzI0YjEzMzBmMWNkMjU3YjViMjg5MWRhZWU4ZWY0YzkyZmMzYmZkYjM0ZTUzMmQ1ODcwZjM4MDU5ODZhYzk3YjUwM2ZkODU4NzM1NDhlMzA5NTAwMDBmOGE3MGJlNTFmYTc1NzYwMzUwMWYyZDMwZTg1MmVmZWFjNDgyNjg2MmFlZDdmNmQyMGM5YThjOGRiZTM2MmRmZWU0MTg5M2YyN2U2ZmQ1ZTkxZDBlN2UzZDRmZDgxNTVmNDRmZDhlZjE3YWYxNGE4NDhkNDRhODc2MzFhZWVlNzUxNDYyYjJhNTQwODcwNjhkYWVhYjNlYTMyODllY2U2MjEyYjNiNTJjZTdhODg4NmRmMmE3MjdiNzJhNTcwYzJmYjljNTAzNDEKK1NJRzogYzljMDk5ZTIxZDA5NWFmYWRkNGU3MWM5YWJmNmI3MDgzMzI0Nzc2MjI1YjU4N2I2MGEwZTYwOTJlY2IzZDMzY2ZmMzljNjdkMzQ3NzZhZTk5ZGRhNzU0YTNjMmIzZjc4MTEzNWEzOGM3OGVkNjQ1NWFhZjBhZTBjMzEzYjYyMDUKKworVFNUOiA5NDMKK1NLOiAgZGI5YWFlZTE5OGNkMjZhNTJiMTE4MWZhM2ZkOTJhYmU0MjVlNjY2ZDg5MGJmOTY5NDY3ZGQyY2UyODBlZDRhNworUEs6ICAzYzg5N2NhZmUyYjQ5OWVjYjJlMWRkMDFlYTU1ZjNmYzg4ZjY4YzI1YjY0YTYzNmIzMWExZmQxYzc4ZjM3ZjNmCitNU0c6IDQ3ZmI2MjE1NjFmOGI3ZWVjZWM2MDMzZjJiY2I2ZjQzYWM2OGM5NThkZmQyNjU2ZjUyYTBjMjliNGFjZDQ0ZjQzMDRjNmJmNzdlZWFhMGM1ZjZkM2IyMmRiMTk2OTljM2RjZGVkZTY5OGFiZGU2MjNlYzRiMmI5MDkxMGM4MGFjM2FmMzljNTUwYjZkZDQwOWU2M2Q3NzcwNjY1NWE5MTk5Y2I1YzAyNThmNWJhMzgyODVmZmRjNjRiOGE4ZjM3M2QxZmIyOWJhODdmODRkZGY1ZjM0ZDhmMTQwYmJjMTdiMzk2MTY4MmRmNWQwYThmOTEwMmUzNzlhOTk5ODEzOWRmZTQwYWI4Y2U3NTNiZjU2MjYxMDgyMzc3NzFhN2Q4ZTEwOWU5ZTBhZmU5YjY2ZDA0MjA5NDJlMTYzYTRmM2MwM2Y3MTgxM2VlMDc4YmQwOTBhYzNkMDc3MmUyNjIyYzI1OWU2ODI1NTJjNzViMDhkZDA1NWE0YTVlYjVlNjA5NDQwYmNkM2YzYTZmZWI4NzZmZDE2OTIxNTIwYzZjYjY4ODQ3MTBkMmUxNWNkYWQ2ZGFhZWVkOTU5NjJkZGEyMWM2Nzg4Zjc4NDkxNzkxNzk4MmUxY2NiYjVmZGQ5YmRjMTc2OWRiNmI2ZGI1N2NhMzU0ZTAxYTEzMzlkOGU3N2U5ZGJiYjU4MTJmYmFiNmExNGM1NDA4NWMwNjU5NTk5ZjE1MGUyMjQ3MjQ3MGYxZTVlNjcyYzQyNWYzNzVmOWUwZDZlOGQ1MmZhMTdiN2E4ZDdhNGQ3Y2EzZTEyZjRkYjUzODM2YWVkMmJlYmQ3NDU4OWJhY2E4Y2U5MTAwMjkxYmZiN2U0NTZkYjdmMmYwYTg0ZGMwYTc0ODg4NTEzNjZhOWE1ZmVhMGUzZWZjNzRiOWNkZDRiZDk3YjY1YWJmMzYxMzkzY2UxNzAzZDg1NzE4MDVlZTY4YTEzZDM2NTRmMDNkY2VjZmI3N2E1MzQzMGQwOTQ5NmFkNzNlYzAxNzU5OTU3ZTUxMDQ2YWE3Mzk2ZjU5MjMzODY1MDExN2FjN2I0ZGQzNTczZWI1M2Q5YzlmOWRmYTYyZTIzNjljNzdhZjljMGQ0MmY2MWJhZTc0YjI4N2RkZmEyN2I3ZjFjMWJlOTg4M2EwNDQ2OTFkNTZkYzEzNzM0YWQ0ZWUzYTMyYTlmNDBlMzI4YzUwMGQwZmVkOGVhMDUxMGU5MzhmMjc1ODAwNDAyMmJjYWE2OTAyYmRhMTAxNGI4YWUzMzY1MjcyODI5ZWQ5NGZhYmE2M2NiMTRhMzZjZjgxMzkwZWNhODNmYzFjNjI3MTcyMDEzMjYxYjM5OTM3NzlhYTA3NmE1YzVkODFkOTBkMjcwNjJlMWE2ZDkwYjVjZjEwMDVjNzAxOTE3YjdhZGFjMTgwY2I3NWJiY2UwZjI3ZjJmMTgwZTJjYjkwMTQwYzE0Y2M2MDA5ZDJkNDFhYWIxZGI5NDE4ZjkxZDRjZjM5NDAwMmNkNzBhYzlkYzExY2U4NjUzNDdmYTNmNTZmODdjMTQ5ZTJiMTdkMmM3MmI2NjNhNThlMzE4N2JiMTliOWJhYzJkMTE0ODNiYTEyZjc3MGFjMDRkYzQ2ZDM4ODUxOGZhNTRkYzE1MmU5YTlkZmJmZjE0ZjE0YzYxY2IzNzU4OTdlMzBjNTNlNmRlNDJkNWUxNDAxZGFlMWIyMmJhYWEwZThhNDFjNmFmOWQwZTBiMTNhOTFhMjNkOWI3ZDU1NTIwNDcwMjlhMzUyMTk0NmM3MTIwZDNkMjU4YjNhZWZjZjc1NGQxOTU5NDg3YTFmZTc3NDNhYzdlMWNjODllMzY4YjE5NzgwOWMzYTI3MzE3ZTBlYzQ4ZDU0NmRiMWUyMWViNjI5YTI5YmM2MjQ3Y2RkNGExMzcxNDM3NTYzZWRkMTJmYWVhMmM1Y2I3N2VlZGVkYmZjNTgwMDhmYWQxZjY1YWYzNTg0M2ZhMjc0YzczNGUzZmJiYWE5Y2M1MGQ2ODM3NDhiNzVhNDg1Zjk0ZDYzMGIwMzJhNWYxMDY3ZDFkZWIzMGU5ZDIyMThjOTM1Yzk4MWQwMWMwYzU0N2ZkNjg0MTMxMzZlZGY0YzBjNzcwMjg2ZTgyMzQ0MmUxYzUxMzY1MTkyOTIxM2MxMjFjMWRlNzAwOTg5MTQxYWI0YWYzYjNmZTc0MDRiNGQyYTM4YzUzMGJhZmI0OThlNjQ5NTNjZTFjMGZiN2QzNDBlMjExMzViZjhhZmRkOGRkNjViMWIxOGNmMWM4ZmI5ZjQwMmIyNjcwNDAwYjg2ZGRhZmIxODRjYzUxZDVmZGEyNzNiODBjMjY1MjFmOTEyZjM1ODNiNGFlMzAxZGFlMTUxY2I1NWM3NTcwM2FhZGVmMDMyNDE1MjI3ZDUzZTM5NWRiNmMxNTBhMWVlODM5YWQyNmJhZTU1MmUxYWI3MzYyMTRkYzA0YjBmM2M0MWI3Y2ZiZDA0OTY4MWJjODRjM2QxNjUzMDc2OAorU0lHOiBiMmUzZDljNWQwZmYzMjk5OTZiYzg5ZDI2ZmIzYWMxMjZiZGVkMzEzY2JmOGRmODY3MTg2MzhjMTk5ZTA1NzI3M2QwOWViMTYzYzZjMTgxZmQ4YmNlNTFmNzJkNGQ5ZDJlODRhYmJlMDgzMzA3NzNiOWZjYzIxNjZmMTQwZDYwZQorCitUU1Q6IDk0NAorU0s6ICBhODA0YzMzYjRkMzhjYjNjZTMxY2YzYmFjMTA0OWUwZDRlYzYzYTFhMGI3YjU5ZmQ4YTM2ZWUzNzU0MTY1NmFhCitQSzogIDYwNzIyNTZkNjU3NGEyOTNiZDdjMjIxYzU1MWMzMmNmMmY3NzE1ZTE5ZTQzM2E0OWQ5YjhiMDQ5MGU1NmVmNjIKK01TRzogZGJmZTMwN2YyYWFlOWUwN2VjN2M0YjY4MjEwNmQyYzkzNjdiMGM0YWFhNThhZTgwNGUwYTM5MDQ3NTRlNmNmOGZlZTczY2Y5ZTJkNDVkMDI4OWU1MDc4MjkzZGZjNDY5ZDQ2ZWE2NzAyNmM1YWE2OTJkMmYyYzlmYjRlYzU3Y2RhYjRjMDQzZmY5YWU2MTg1ZjI3YTcwNDQ1NGU1ZjUzOTUwYWFiZDI1Yzk5MTA0NzRkNDVhZjg4MzY4NjI3MjNlMGU2YTI3ODIzZDgyYmNiYjY4YTk2MDUyNDIyYTE4MTk1MTJlM2I0MzQwOGNmNDg5NTdhZDZhZTIzNWI3MjMzZGYxODI4NDc0OTE1M2RmYTU3ZGUzNTA3NGEzMGVkZmFiOGE1NmRmMjhhYjJlMjk0MDMwNmMyMjFhYTU1NDkwY2M2NjRlMTQ2ODNmMzBlZTYxNWUyZDkzZmRmOTcxZjU5NjY2MzQ2NTg0M2IzYWRkNjM5MmJhMzM5MDMxMWVmOGRjNTlmMjUxNDQ1ZDY2OWUxMGEwMDYxOTkxZTExMzU2MTkyM2FhMjE1MjQ0NDYzZDgyNjQxOTlhYzU4ODkyNGUyMzFlODQxOWQ4Njg1ZjMzOGU1OTliNWY0MGJmOWJkMWFlY2U3NzI1MzViYmJjYjhmNjg4MWMyZTgwMDQ5MWFiM2I1N2I0NGI4YWU0M2FlYjVjNGFlNWU3ZWRlYjIyOGZlZGM5ZjZiOWNhZGVhMTc2ZTEzNDkzNmRlZDYwYWYxYzIyODczNGZiMDA1NzBmMjM3NGJiYmZhMWJiMTcwNzg1ODA1ZDZiNmM3MDFlODIwOTUyZWFlNDViOGMyMzY2MTEzYTFkZmIyZTM1ODUyYWY0MTliNzU0ZjljZjdhMDgxYzNkZGU2YzgwNTNiZjFjZTBjODUzMzlkNTY5OWM0MjI0NzZmYzIxZjI2Y2U3NWQyYTdmZWQwOWZjMGY0MTc1Nzg5ODQ3ZDg3NmM1MWFhNGUwYmY3Y2U4NDJiODMwOGRjN2EyOGM4MjM5NTIwNzE0ZGMyMzMxMzZlMDlmNTU3YzdlZjNlMGY4M2JhZDYzY2IyOGFjNjE2ZDM5MjhmMzgzN2RjZTFkZDU4YWNiOGRkYmM3MmU4MjJkZWVlNDVmMDA3NzZhY2M4OGUwMGNkM2E5ZGI0ODZkOTJkNTM1YTU3YTBmZGM0ZjkwM2I2MmU1MTcyMjFjMzA4Y2JhMmUzMGZmZTdiOTE5MzdhOTk0MTc3MjFmNTZmZTZkZjQ0ODQwZTllNDExMzY5MjljMGNhM2RjMjhkZGYyMzc5ZTRkY2ZkZTgzNzIzZTJkNGM5ZTIzMjk5YzA1NmFmYjMxZDNlNzBkMDg1ZDBhMzEyYzVjZDU3MGI2OTlkZWE4NzE3NDU4NTMxMzQ4Yzk2ZjZlYjUyZDdlZTYxZDU2NjBmNjVlOTA5YTE0Y2UxMDMzZGM4NTNmMmYyNWQwOWNmNGU0MGQwN2VmZjcyZTE1YTM5MDU2NGEyYmUzYzA0MmQ4OWE2ODY2MGE5N2ZmYWNlYzQ5NjdhNGI2MTg3MTJkNzA2MDc1NjUyMGMyOWVlOGQ5MjIwYWQ4NjE1YzRmY2YzOTY5YmQzYjJlMDk0N2UxZjBiZTdlMmQ4MGUwYTYxNDgwYzMxNjZkYjU1ODIyMThiYjBhOGJlOTg0OGVmZDQxYjZjZTBjZDc5NWM0ODZhYmI2NzIxMGJlYjYwY2QwNzhiNDZhZWI3ZjRmNDg1MDMxOTAyYmNkNzEzMWUwMGI3MDM1YWEyZDQzZmVlMDYzZjdmMzBiZDU3MGRhMWRiYjY1YzBjYTkyYTQ4MTI2MzJlNDMyNzc4NTUzZTM1ZTg1NmNhYTgyMTgyMjFmZDYzMTZhYjA4NjkxNzNiMzg0MDliY2VmZTZkMmRiOTIxMGY5MDI0MTczYjY2ZGJiOTI2NzdjYmM3MWM4YTFjZDU4M2ZhNmYzNTRkM2M5M2ZhOGIxNmM3MTM3NGYyNWEwMGMzMzJmODVhOGJlZmQ1NDAzODhmYjUwZGI5ZjVkOTZlNGU0ZTY5ODgzM2NlM2Q2M2MxMGI4ZWVjNzBhMjQzYjkwMTVkYjQ1OTQzMWI2MmY1NjY4YmJhNjBmMDcwNGY2YmRmZTk1NDZlYTQ3NWNlZjJlYmNjYmE0Yjc2ODA4NDhlODJiZWZmNTg1NGU0OWY2NWJiNzczYTQ5MjJlOTBmOWI4YWZjN2NmODE4NzMwNTg4ZWQ1YWE3YjM5OTgyNmFhZGQ1NDM3MmZjYjc2MTQ1OGI2NGRlNjY4NTdmNGFkYWNkNGMzMjkwMGNiNzcxMzZhNTM1ZDdiYmJiNTU0NTk3YWVjZjM5ZmY2OThiNDVlNmEyMThkZjFkMmFiZTYxNWViOGQ5ZTE4MjRjMGJlY2NlOTA3Njc4OTllYmZkMmM3MzAxNDRiMzJjNzQ2MDRjMGU1M2UyNTA1YmIxNWQyODAwN2E4N2I5OTMxZDZlZWMwYTZjYjViMGY5NmQzMTk0YjI0MjMKK1NJRzogYjFiNDRhMTQyYTdjNGMzZDBiZjQ2NjFlZGFjNWI3NjcwMDU3MjZjMTRhMjc2OWI3YzIxNGZiNTg3MzdlYzJlNGJjNTFjM2ExOTVkMmJhMWI3NGE1NGVmZjRjMzNhOTBmNDFjY2RlZmE5ZTkzNjVmZGU4ZGQ4NTlmZDM5NzhjMGEKKworVFNUOiA5NDUKK1NLOiAgZjgyMGU2ZjI0YTg0MThiNmFjZGExNjVmMjlhMzYwZjc2N2NkZWRkZThmNjRkNzY4Yjk1ZmMyYTVmM2Y0MDRlNworUEs6ICA3OWM0YjI2M2IyZTU4ZjY3ODYyOGQ0ZWE4MmIxNzVhY2EyMzBiOWEyMDI4NWM4MjhmOTRlMWZmZDYzZDc1YjIzCitNU0c6IGFiNmJkNDViYjA2ZGZiOTA2OTExOGZmOTk4ZjNiZDM5M2VhOGU5NDQ5NzllODllMDQ5ZjI1MDVjZDg5MzFiOTMwODZiN2U5ZDhlZTc2NGU5YjQ0N2VhNGVhMTIxMzhiYjQ1Mjc1YTIxYTE5ODQzZjc1ZGM1NDIxZDYxZmZkODYxODM4ZTU4MzM4MjVkNjcxNjJmMzI1OWMyNjQ0N2JlNTFkYzE4MDJlZjVhMDRiYTczYjc4MzkzNTcwNmFiYjQyYzUxM2I2NWYyYmJjNDRmODNkYTEwNjEyNDJmMmQ1ZTUxOThmMzhjMTA3MTdhODZhM2ExOTdlN2NkOTAzNGY2MzYxMTQ0OTkwMzcyNzdhY2I0NzIyYzA2YTkxY2IyZjY1ZTIxZWI4ZDIyZDM2YWQ3M2I0MjY1ZjdhNzk0N2UwMGU3MjJiZGE2NzA0M2NkMTI4MWJjZDg3ZTc2M2ZjOTdiNTRjOGY4NjgzNmNkYmYwOGM5YTFmNzAwZjRlYWVkOWVhNTlhNmZjMWJjMGRmOGM5ZWMxZmMyOTc3Y2FkNjBmOTc4YWJjMGM4MzgxYWE5ZmIwNjBlM2Y5OTM3OGE1MWIyZDlhZmJlZjM1OGQ1NTE2MmEzODkyMmViYjg3ZDJhM2UwZjBmNDAwMGIxYzM5YjE1MDJlOTU5NDVlOGFjOWY0YTNlYTdjOWRkYjU4MWE1ZWMwNmMwMGJhODdhNzM3MDg0YjM4NGZhYmEwOWM4NDg3MWRkZDY3ZGMxYmViYjJmN2ZiZDk0YTU1OTdkMDE5ZmU2MjllNWJmMTJiZWEyZTMzY2E4NGM2ODBkYzVhMzk4OWJiZjNhZjllZWVjZThhYjhmYzg2MWUzYjhiZmMxZTY3ZTJhZWUzMjZiMzdmYjliNTFjZmEwYjVmNWZjMTYwMDY5YjQ1MGI3MDRlMGZhYjdmYjZjNWFiM2M0MGI4ZjBiM2QwOTMwYjkxMTJkNjRiOWRhY2FiNGRkODc1ZjI5ZDhjNThjNWQyMDUzYWQ5MTQ4ZmZkZTIyZDkwYmMwZDUwZjVkZWNhNjhkM2VhMjVjNWI0Yzc2ODg4NzFjMGM3N2RiY2VlYWNiZDBhNDIyOWY0OTcwZWM4N2IzNDQ5OWUyNzgzMDNjMDY2OTRjMzBhYzY4NTI0ZDExYjE3Mjc5NGI0ODEyNzNhNWRhYzQ2MTIyZDI0NzIwOTVhNTYzYTQzNWQxODVkNWU5MWRhNzI2ZTc0NTkyOTk5Y2RhYzY4OGEzM2YzOGY3YzAzNTU4OGY2MjVkYzZhYzczZDAwNDdhYjNkNmQxMmYxYWUzM2Q4YjYyZDZkNmM2Y2FjZmYwYmRkODk0YjU3ZTMxODkxMmFjMGNmNGE1MzQ3NjJiMmY2ZDI2M2M5MzU4MDQ0MjNlZDg2OGNmOGNmYmI4YmU4ZjZkOGE3MTRhMjY4YTM5MGVkYzJkZDUwOWQyZGM5Njg1MWQxYmQ0MzI0OWJkMGY2OWIwYzRjYjJmZjQwODBkMWZkNTYyMmJjMjM4ZGRhNmU5MzAwMjVkOGEyYjEyYjk3MmY5ZWJhMTc0MjFkNGNlYTY0MmY0MGFkOWVhODU0N2FlNTk0OThjM2FkMWI5YTBjMzRlZDhjMDFhYWUzYmQyMWFjMTc3NDNiNTc3Zjk1MTVjZmJkZGUyNzA0ZGM1N2U4MGYxMjUzMjNkNTUxMDBiOWY2OTc5MjdkNDMxZGZlNzM2MzFiNThlNTJhYTZhZWIwNDc4YmY0NTk1NTI0Mzg2ODlmYmViOWM2MGQ4N2FhZTA5OTU0MzYyY2QwMmEyYjBiNDc5ZWZkMzhmMTc4MjFhZjM5YjIxOTI2ZWUwMmY3ZDk3MmFkMGY1NGVhNjU3MmNjM2ViZDAyMGIxZWUyNjg4MjUzM2JkMTkxMTQzMjM4MTVmNjcyZWM4YzkwNTY4NzMwYTU4ZTRlMWUzNWY2ODIxMjE5YTMyYjhhNmM1MmNlZDZmOTU3M2Q5ZjNiZWIyODUxM2JhNjJmYjIwMWY3ZmQ0MWJiMTBjYTM0YmIxYzcwZjJmZDdiYjkyOTlhN2M1ZjdmMmUwZmExZDFhZjBlOWFlZjVlZGU3YzE2OTUwZTg2MGVjZDYxZjE4NDJhMWEyMmM5ODMxYzBjMGQ0ZWRhODQwYjA4OGE1NDUyMGM5YjE4Yzc2ZWJhOWJlYmNkNTkxMzgxYzE4MGQ3Zjg2YTBlNThhZGQ5MmI5YjBjODA3NmE3Y2RjYWI2MGRlYTRjMWFmYjE4YzhiOTRiMWIzOTJjY2ZiNGRhZTI3MTFlN2QxMmQyYmM3Yzc4MjVmNjM5OTJlYzMyNDcxNjNjMjgzYjEwNzVlMzIyNDVmNjljZjQ3MjQwYWVmMGRiNDNlZmFlODZmYzFmZDNiYjk5Y2Y1Yjc4OWY1YmNiYTk1MDQ2NTdkOWU2MjJhNGFhMTZmMDFkNGQ4NDQ0MTMxMjQ0NDdkNmQxYTQ0MjNlN2I1NWRiN2U2YTMxYTMxOWY0YmFjYWU0MzBhMzNhOWJkZDRlZjM2ODAKK1NJRzogZjlmZDcyZjMyMWNhMjEzM2JmODU4NTkwOGQ5Y2E3YjhlMzM2MjI3ZTNmZmIzNzQ5YTFmYmU4YzliMWU1ZDUwZWYwMWY5ZGI1ZjBkMmE3YzdjMTM5OWI5N2M5MDQ0ZTFiYzFhZGMzMmI4YmVhNDZkYWQ3YjgxMDI2NDY5NjAzMDMKKworVFNUOiA5NDYKK1NLOiAgMGEwNTZiZTAzOWZkNTVkYWRhNDQxZDAzNzM2MTI3M2YyMDZlMDAwYTc0YTA1YzUxYzBjYmI2Mjc0M2YxZjM0MAorUEs6ICA3MzE0MDIxN2E0OTNhMTc4NjZmZmY1MTU0ODMyMjczZGY3OWQ1ODExNTQzYzIyMmEzOWQwNTZiOGM5NzBkYmZhCitNU0c6IGE1YWIxNDc2ODRlNGQ0YTdiY2I1YTk2ZmIzOTgxOGUyM2Y1NmMyZDhhNzQ0ZTkxMjNkNjIwODM5MzBhYjFkMGJiNTMyZTY4NzE0ZmNlYzdlNmM0MTEzNGI2YjE5ZGRkODY3ZmU2MzVjOWVkNjUzOTNlZTM5YzVlOGZhYjQ1NmNiNWIzMjc5Nzg4M2YzY2Q5YTA5MDJiOTc5NjM0OGVlNjZjNjkxZmI0ZjJiYjE0NzY0NDEwNjU3Yzc0YWIzNjQ1Njc4NzliNmZhMGE2ZjRkYWZkOTMwZDkyMzRjZDc4MzRmYjlkMGVlZGZiYjVhMzk0YmYwODQ2ZWM2OTY5YzJlZjdjZTM5ZTM4NTM4OTVmZjViNGRhMzFlNTQzNDFiNDI3MmU0YTI2MDQ5MTg5ZmYyODI0MWNlZWZmYjdkMmUxZmFmNGY3NzlmYTY1Y2FjMGY1NzgzYzYwYWU3N2RlMzBhZDQ0NjVmZGIzOTBkNDI1NzFlZmY0YTYzMTM2MzQ5OTM3ZDZjYWVlZmNkYWUyMjllMmYyOGNlYThhYmYzZmZhZTNjM2VjY2Q5MDY3MGE0MjEyYTJiZWUxY2E2YTViNTRmMDk0ZmMzMjMxMDU4ZjVjYjllY2ViOTk5M2JlNDcwMjdkNTFjMThkZWNhNDFjZGRhZjRlOGJjNTZhOTlmZDI3MDM1NWZmNDU5NzE5NTBlMzQzN2ExOThjY2MzMjU0MTY4ZGZjMTU3NDA4MDgwMmVlMTAxYTYxN2ZiNjA0ZTg2OGY4ZmE4ZmIzMGRhZWI0MzA3NGRlMTFmMjQ4M2Q5MTZkZTU2NDNiN2NhYzIzZDkzNDA1MDhhM2ZkNjIxZWNkMjUwMDQzNTZhNTM1NTRhZDNhZDdkNWQyNTgxN2FkN2M5YTYxMDAwOGM2N2FjMTZiYTQyMTFjNDJmNWRhZGY4NmMyYzNhZWQ4MjVjZjJhOWI1MjNiZmMwM2RkN2RlNDAwYzY3ODA3ZTEzOWVhNWRiY2U0ZWUxZjdkMzE4ODg5YjAxYTlmNDQ4MDNjMzIyYWMzYjYxZTIwZTYzMTJkMGEwM2JmOTkyN2ZhMzNmMDRlZDdlMjA3YjE2ZjI2NTAyYzI5ODNhM2E5NjFmMjI0NDYxZmU5YjY0OTIzYjFkMDkxODk0NzZhZThkMDAxZDBlY2FhZTRkZjYwZGIzNWY0NDhiYjYxMmY5NjU1YTVmYjE0NGRmMTFkODNhYTY5MzY4ODZjMzA0OTQ5ZTU5YWE0NmRmNjVjMjJjZTdiZjI4OWIzYzc3YzI1ZDg5NmJlNmQ1MWRlZTEwNzQ4MjYxNjg4YzhiMDcxYzg1NmY5OTYyYzY2Nzc1ZGRmMTYwODNkYWUwNjU4N2UzMmE2MzYxMTk5ZDcyMDk3ZTM4M2FkNzQzOTQ5MWI1YTU2M2EzZTZkNThkYTNkNWFiYjFkZTg0ODkwYTM2YjQyMWNlMDNkNDg0ZGZkNjAwMzk2MzhkNDZlZGZiNjA2NTllM2EyNWFjNmU5YTkzNWFkNmRhZDUwZjkyN2JjYzJmZjk5Zjk5MjRhNWI3OTk1ZGMyM2M4ZjMwMWNjYzc3NjlmNzFjMTgyNjA5MDRhM2RjZmI4MTdkMmQ4MDVjYjFmMTk2YmU4YjZlY2YzNTJiYzI5NmJjM2Y3NmVhOTEzNTNmOGNmMzViY2QyYjU3ZWI1OTQyNzczZDY4MzRhYzUwZWVhZGM3ZTY2NDYxZDFkYTA5OGNjZWM3NWZmNzIwNTIxNWY1MjQ1OWQ5NzYyMGY5ZjAyODllOTM5MTFkYjM5YjIxZGY4MThmZGYwYmVkNDU1MDkyNDQ2MzNkZjAxY2RkZGI0Yjc1OTcyZmE3ZWE2ZjczMjgxY2JkYmJkMWJjYjAwYzNiYzFiMTcyOGVlYWUwYmJhMTcyYjEzMWY1ZDMwODkwYTM0MWU2YjcyZjdlODlkZDRiNmRiM2U3OWI2OTI3NTg2Y2YyYzhhYzM4ZGQxNGYzNzRkN2Y1YmJhOWY0MzUzZGVmMTBkZGM5NGQzZDExMThjNTY5OWUzOGI2YjUwNDkxOGU1ODllZmUzZjdlOTczZmI0MGUyZWJkMDU3ZGUxMzg1ZTM5ZDY5OWE4ZjY4M2I5NjJmYWU0ZjM5MDI4ODFmMWFmYmVkN2M3ODM4MjM1NThjMzZkNjhjNjg3NWQxNjZmYTI0M2ViMmFlMTRmN2U2MzE1YTZkMmFiNGU3OWVhOGUxNmU2OWQzMGVkYzcwOGYxZTdhZjdhZGFmZWRjZDMxNjg4OThiMzMxODc4MTc4YzRiYTg4MzNkMjBiM2NhYzlkMzJiODg4OGNjNjc4MzIwNjM5NzQ3MGEyZTdjYzRjOTgwOWZmNzljZWFjOWRjMjRjYTE0MzhjOTE5YzhhNDE1ZTgyZjA5MDJiNGQ5Y2Y0Y2NkNTc2OTY4ZDViZWU4MWM1ZjE5YzdkNTdiOWJhZGE4ZWFiNDc1NmVhMjcwZGQyNjEyOWU2MTIyZWUyZDYxNTI0MmJjN2ZhYmZmNGY4MzEyZTY4NmM4ZgorU0lHOiBmYWI4ZTVkOTNkN2Q0NmM2NWVlMTE3YzUzNzVlNzNjOTcwNWY4NzU0MTc3ZmRkNDZlZmVkNDczN2MyODc2OGNjNGI5NWE5Yzg0YzUyOWI0YjkxNmIyOGRhYmQ4NzQxMTgzMTQ0YmNkYjQ4M2RmOThhZjg5ZDgyNDBjZjA5NDYwNAorCitUU1Q6IDk0NworU0s6ICAyMjA1MjQ4NjBjYjg5YWIyOTViZDg4NGY5ODhhNTc5MTE4Njg2OTNkNmIxMDVhODBiMjMwZjIxZTU3ODA1YTdkCitQSzogIDRhYjMyYmMxNTY2YTc2NzdlNzk5NzM0ZGM4NDE4MWZiYjY1NGI4MTMzNzkxODBmMWRkMzVhZWYyZDMyNGMxMmMKK01TRzogMDI0YTU0YWM1ZTAxNjNiM2E0ZmRkMDJmNTkzNjg4OGFlMmY5Yjc0YTY0MTRiNTNjNjM4MTE3M2IwOTVhNGRkYWNmYzNhNjlmMTkxNjdkMGYxYWUwYzEyMGJiYTdlOWZjYjdjY2ZjNzk2ZDg5ZWE0NmVmODA1ODg2NmVmNmRhN2QwMWE2YTE0MmVhNjlkNzIwYzRmODA1YWM1NDA1YTgwMTJjM2MyYTgyNjNiNTM3MmQ1OWJmN2Y0MDk5Mjk5MDEzZDI2MjU5ZGZkNTE5M2VjZTU2MTc5Nzc3YmU1MWI4NmJkMWNlNWYxZmM5MTU2ZjJiM2EzMmMwOWQ4NmJjNjEzMmRlNTc2MTAyZTJmMDNjNzE2ZGI1MzY2Y2NiZTc0MmFlZTM1NTJhYzNiMzlkMGVjN2Q0ZTRlOTYyNmJmOGVjZTAzMWQ2NzhkMzQ4MDkwNWMwZTMzOGZiN2NjMDI2ZTNlNzljZjJjMjc4MWFjMmE1YTQwZGY0Mjg0ZTIzNWEwMzg5ZTkyOGZjNjM1NTdkYzZmMTk5ZmNlYzVmMzYxZWEyNDc1OWZhN2M1ZjcxOTc4YzBiYTI0NWU0YjAzYWU0MzU5NDFjODZjODFhNTE0MzBjMmRjOTkyN2UzYjBmNGVjNGViYTdjMjc0NWI0OTM5ODcxNTRkN2RhODViNjdkZTIxYzU5ODQwN2ZiMmE3NjA4MDRhZDA1YmZkZmE0NWE2MTMyMjRiMjJhMDg1ODhjY2VhM2NiZGY0N2ExOThiZWJmOGNmZWQ4NjQ5ZDZkNWYzZmE1MDEzNzZiZGZiYTQwMDNkYWMyMjM3ZGNhY2U1MzE1YjdmZWZiODc5YTg5YTg1YmNlNmRhNTI2ZmMzNjBjYmI0ZmQ1NTRlZjAxM2YzM2I3Mzg0Y2QyYjIyYTg4NTc3ZjNhMmQzNjY0MjJhYWU0NjQxN2JhOTE2ZTE2NDZlMjQ0MDRhODhiNWQ1M2ZmMWFlZDJhNDdiYWY4MWZjYjQyODYzOTc5OTEzOTRiMmVjYzM5NjY3YWM0NmMyYmRiNmQwMjNiMzNkYjAxMzQ1N2M0MDA1ZDgzOTAxNWQ4ODUxZjAyOGFjMzM0ZmIyNGJiYWQyOTAyYTRkNjNhZTY4ZTBlY2E3ZWFlYTFlODU2NTI5NjQ3YmFmMTQxMjIxMzc1NGVkNTBhZjNmNDM2ZTliYWZjMTYwMTYzOWIzOWQzZTUyYTkzYTg5OGZiNjAxOWZkNWVkNmU3ZGZjMDUwZTdjZTVmM2QzNWNlYjUwNjcwMjFjMGZiZGM3MDhkM2YyNmJkNjA1NjhkMWVkMmI2MTJiNjk2MjM1ZDUzMzMzMThmOWE2Yzk4NzIzNWE3YTA3ZjhjNmE5MzU0ZmI4ZTczNDc2MzA2NWFmY2Q0ZDkzNzc2NGE0ZjAzN2NjN2U3ZTJiOTMyMTdmMTY0MTY4NGZhODFiN2ZmNzk4NmEyOGIzOGU5NWIzMzJlNzQ2NDllODNkMGRlZDc5NWM1N2YyNGNmMjc2ZTAxNDM5MDFiYWZlZjBmMTY5M2ZlN2NmMTA5MDRmYjBkODgwZDcyZTQ0NzE2YTcwNjlkYWFhZTc0MmNmMGZmM2VkOTJmNWY3ZDFlMTBlMDQ5ZDhkZjA0MzYzMWVkMGVkNGM0YWM0MDIyZDg0MDNjYjA0MjFiNDU0Y2JmYjZmNDhhMzBlOWVlMTYwOWFkN2I2ODIxMTk3N2FjYjMzYjljMWExYmU3MzU4MTRjNThmNjZkYjVmMGI4YWM3NzNiMWQ1OGQ0ZTZiYzQ1ZGZkNDhhMjk0YmJkMjVlOTI2NzFmNTZmMzAyZjI5YjUwZDgwNDMxYzhmMmVhMzM5OTYyNTdiMjA4ZTA1N2VhNzY3MmNjMmQxY2Q0MjA0Yjg1YjJhYjUwOTAyNzEzMTM1OWFlYjQyZTNlY2NkYmFlY2ZlMmNkM2U1YTMzMTMyNjZlNzYxMTk0ZmY2OWNhZTllMzdlNTFjYzBhNTRmMDg2ZGRlMTNjYjMzMTE4ZTM0ZmUzM2M3NGQ3MzU1ODI3NTJkNjhkMjFjNzllNWMzYWFlYTk0YmExMDdjYjdlZThhNzBhM2Y5YTAxZTk4MDhjMGFlYmE2NjY1MzE1YjQ1NjI1ODQwYTAzM2E2ZTJhODc1NDk1MDU3OTQyZWQ5YmIyY2U2ZTRlZTYwYmVkNDdjZDlkNTg0YmMyNDUyNDM5N2ExMDk0OThlZTJhOTczYWFkNmEyOWI3MGExY2ZiZmU5YWE1YzdjYjlmMzVmMGZhMDAyMjdmNDM5ODhkMDc2MTliNmZiMmY2ZDNiZWUyOGUxMGVlNzA1MzQ3MDE1YTkyMmUyZTg4ZDM0ZmIwY2U1MTViMDhkZjNhMWI2MzRmZjllYzE1ZDA1OTQxODJjODZlYmIwZGI3ODM2MTJhN2QxOWU0YjIyZTgyMmQ1NjYyNDVhZWQ3MmU2OTRjM2QxMDFiZmE0Y2E4Nzk4NjJlNWY5OWMyM2E1ZDY2MDgzY2UwNmQ4N2YzOTlhYTc4ODhhYjgzYjg2NjQ0NzIKK1NJRzogZGIxY2MwYzVkYjc3M2VjNTE2ODliZTI4ODQyZmE2NzkxYTdkNzVlMjljMjI4YWU5NTkzYTU4MGUwODc1YjE2NzBmMDliMDM0NDI5MjlhMThmMWU5NDE0ZWEzNDMxNWZmMDlkOTFkOTIyZWU0N2YxMGY3MWRhNGFiMTNiN2Q5MDEKKworVFNUOiA5NDgKK1NLOiAgNGVmNjBmMDY5MWQ3MzdlNjRkNDM3YmZkMzM5ODMzMGU1NWUzYzA5NGNmNDFmYzU1N2IwZmUwYjY0MzkwOWFiOAorUEs6ICAzMDZhYjE0NmU1YzhjZDYzMGY5YjQ4YmY4YjY4NWRiMGI2YjU1M2VmNjk2ODY4NTNiNmI1MzE5NjAxMTg1NDhjCitNU0c6IDBhMTg4YWMyNmYzYzVkODlmM2Q1ODgzNzRmYWM1ZWNmOWE0NjdlMjE2NWIzMWQwYjBmMjM1MDFiZDIyZTYyYmYzNTU1ZmZiYTk0NjMxZGU3NGE2YTNjM2NmNjNiMDNhYzFiYmIzN2QyMzNlY2E1OTkzYjA5NzBhMDIyMGRlOGQ2YzQxYTk3MDMwNzMwOWE1MmRhMDU3NmRjMzM0ZDgwNjQ0N2FhMDlkMGIyNDVlYWNkMGI0MmM0ZTE5ZmEzZDZmYmRjMjI5NDMwZWIzYzc1NThhZjUzMzFjNmU3ZmNjMmU1NTJjZTM1ZDU3OTA3M2I1NDhkYzExNWJiZDI3ZTVhMzNjZTFjNDdmYzg0NjFlMzkxYjZkNzY3OTUzNDg3Y2M1MmVlNjczYmM0YmU5NjU2OWM4NTU3MzY5ZWJiNmUwMmY3OTIzODEwOGMzYjU4NTZlZTM4MWE3OWZmNDY0YzhmNjAwOWZkNDdlNjdiNGM4MDIwMWUxMWU2MWFiOGY1OWJhNWQwN2IxNWFjZTNmYjM3NGM2NGI2YjRjMzQ1ZTJiMDBlOTE1MWFiOGUxYzVjOTg1NjhiYzU4ZGQwODEyYWFhM2JlZWUxNjVlN2VhZTU4ZmJkZTYzMDc3MjAzYzRmZDZlMTYwNjhkNzZlM2QzYTEzZjFjZGQ3MzI4OGJkNWU0ZGE0NGViMTE5YTA0YzRkMzJlZmEyZjEzZTc0MjZhMmY0MWM1NjIzYzliMDY2YjEzMDM2MzliOGZjZWEwZDg3NzRjYzA4MDQ1ZjdlMzQ2MzY1ZmYzMWQzYjFlZDk5ZTk3YmNhNWYyNWM5MmIyODQzYWM1ODVkMDIxOTNhMmZkMzk0NjZmNzNhYWE5ODliMWZhMDViOWExNTdmZDAyNzdjNWU3NDVkMjU4ZTAyNzgwM2E1MjRhZDk0MzA5NDI1YzNmNGRlYzMxYzBlZmM1NDc3NTJmNGM3MTk0Y2JiMjcyZjg0OWE1MjE2OWM2YTA3OGQyMGVkZTE0MzIwMTY1Mjg0NzdiNThjMmJkZjYwNjNmOTQ0N2UzMzgzN2NjYjQzN2Q4ZDZiOTVjZjRjNDRiZTcwYzgxOTNhZDk4MGExMDVmM2RiNmY5OTMwYmFiNDY3OGM3NzYzNDJmYWYxNzBlZGY3NDI0OGQzYjFjYTk2ZjczMWI5ZDAyNmQ4ZjBmN2MzNGVkMzcyYzFjZGUxNzZmNTVmNTU4Njc1Y2MzMTgwYzIzOTAyZjRiYTk1MDhkMWM5MWMzYzllNjg4NzMwMzI3ZjNmN2I2MzdhOGZlZTU0MzczNzU5ZmNiMTdjOTIxN2VhNDRjZTQzNjkxYThmNjQ2MzY0MGE0YTVlMTUxZTYyNTRjNGVmMTI2MjNiNDkzOTRkYTdjYzc5NDUyNjkzODE3ZDZiYWVhOWEwYTc1ODc2OTQ4YjFmOGQzYjcxN2Y5ZWMzNjc1M2Y1MzI2MzcxMDM4M2I5ODI2MmFlNjM1NGZmMmEyMjgzMjIwYWQ0MmM1Y2IyY2JiZGYxMmM4Nzk1MTM3MTBiMTZiZTg1NmYzYjEzNTViMzZmNGI4MGMwMTdjMjFiZTg1ZTk2MDUzZGEwNTBjNDAzMTIxMDBhYmI2NDBiODczZDg4ZmI2ZWUwZDE5ZTllNjFiMDRjOTcwYmQxZjA2MGRkMzExYmJiOWE2ZTM1Yjk4NWZkY2ExN2NhZWU4Y2Q1ZGI2MzdhY2Q5MGNiOGU4MjMyNTVjMDU2MDE4ZmVmNTkyMGRiNjQwZDIyMDFjNWVkZGJkOGE5Yzk0NzRkYThkZWY3ZTEzMjViM2NjNDM2Yzc0ZjgxNWRiMWU0MmI0MjFmYWFiNjI2YTQzNzhjMmQ4NDI2MWJmNjQ5YTUzYjMyMWY1OThjNDRiYmQzMDAyYjA2Y2Y3ZjFmZGVmODRhYjM1ZjczZWQ3ZGM2NTA5NmNiMWRjMGNjMGUzNGM1NjFjOGExNWNmNTI3OWFiYmVkOWIxNmZmMjRhOTc0NGUzZjVlNjQ5Y2M5ZDg4ODRmODkxYzNmYjc4OTAyMDMxZmZlMGUwMTIxYzcyMDgwYWQxMGMyNDdiN2M5M2E5ZWJiMmQ4NGQ0Zjg3Nzc1MGQ3YjM0MTYzOTNkMDMwNDUyMjZiYjc5OTRlZWE1OGUyNzJkYzE4YzQ2YjM4MmQxZjk3YjIzNzY1ZmRhN2E4Y2UyMWZjNmI5OGQ3MjNmZmNjZDk5YWM0NjU1Y2M1ZDEwMTA1YTJhNWI3YzhjZmJmYjkwZTI3YTlhODA5ZTQxYWU2NDAwNjMyODY0MDVhOWJlODNhYzVkMjkwN2E0NWYxNjNjNzc2NGIwOWY5OWE1NTU5MzIyMGQ2OTAxMjkyYjliNTgwM2EwZmU3MWIwZTQ0NDFjYmZlZjg0MWMzM2NlYmM5ODM2NGQ2NjZlNWE5ZjVlN2U2OWExNTA4ZTQzODBlZDM2MTM0NWI3MjQ4YTRjMWMxY2UwODc2OWJjNzE1MmRkYjMzMmZiYTE3NjIwMGY1YWJiYWUzODEyZjQwNmRhNzJkZGU1ZGIKK1NJRzogY2JmN2NmMjIwODFjNWYyMzVkYmEzNTYzMGZiM2YwNDA4ZmNlY2NlZmViMjhiOTlkNzRkYmQ5OGM5MDJjN2Q5OWJhOWNhN2ZhYjM3NDdjNTA0Y2MyMTlmNGRkMTAxMDgxZjU4Y2U2MTZlMjkyODBlMzYyNTM5ZmU0OWYzNGQ3MDUKKworVFNUOiA5NDkKK1NLOiAgMTk3ZTE1ZGNlNGM0N2Q3MzRkYmNlNDY4OGE3YWQ1ZmU0MWViZjJhYTI5YTJiZGRiMmJlZTYyODQyOWMxYmMwMgorUEs6ICAzMGZhYzMyMzA0OGIwYzc4MWE5ZjYzYzFlZTY5ZjJiOWU3NWEyNzA2ZDI0OTUxMmEyNzM5NjA3ZjI2ZGIxMzhmCitNU0c6IGZkOTcxZDQ4OTQ2YjUxZmZlZDdiNjJjNWQwOTljMWU1NmIxMzU4YjkyMjM1ZTEwMTBlM2YyMzg0NGRkYjczYmNlZThkMmUxYzk5NzczNTNiYzk2YTIyMWMwNTYwMjkzMWZhMTZjY2MyYWI2ZDBmMDFjODQ2YzI5MjBlOTlkZTAyNmRjMjg5N2YzZDVmM2NlZTE3NGNlNzUxZDRhODA1ZWUxOTU5YTNjNjljZmQ0MmQ3YzlhZmQzMWZhOWIxY2YwNTc4NmQ4ZjkwNDJhNGY5ZjgxY2Y3YWM5YzFjMzliMzZmMWVlOTViOThjZjdlZTNmNDNlMmMzNDM3MzNkMWQ4MmNjMDhiMmNkZWI3OGQ5ODIwMzQwODVmZjRkYzY1MzZjZDE1NGE3OTBjODVjODYxM2VjNGU1ZTFkYzM3N2QzOGE3NDVkOTM4Y2ZiMTVjOGI4YWE4NjEyMTgzNWYyZTI1ZTllNmQwZGU2ODAyNWQ4MTBjM2RjOWRmOTkxZGFkYWQzOWRjNjk4MWZkYmFjMWZmOWI3YTc5MWMzOTYwZDg1NjQzNjZlNWFhMzlhOWU5YzdjYmYxZDNmMGY4MjBkMWI5MDEwODc1MWFjNzY0ZGFiZTA1YzUxYzE4NTI5ZGExYjAzNDk2MTQ2Njg0MjRhYjRlOTM2NDQwYzRhMjUxM2JlNTI4NTM5MzcyZWVlNzg3NTQ1ODlkYmU3OTk0ZmFhMWY2MjI5MTI0ZjgzOTk1MGVkMDkyM2Y0MzIzMzE1YWM5NjNiYmU0YzhlMTc3ZGFjNTE2ZTczNDIyMzhmMWNkZjE0MGJlZmM4YWNkY2EzZDAwMmIxNmMxMzk4ZDg2ODYwMDMwNGM3ZTk4NTNiMjNhNTFiMTdkOWZkMDYxNTZlMWQxZDA4YTI4NDYwOTA5ZmEyMDljY2NjYzRjZWNiZGIxYTQ2MzQ4MDg5MTE1MzE4NjgxYTk1YWU1ODBhYjY3NjYwNDEzODQ2NTFjYzRlNjE0NTEwMzkyM2JkZjRhMzJhOTNkOTNlZWQzMTg3OTFmMjA4MDVmN2VhODRiNzQzZWUxMWVhZDllNGNhMDNkYTc2ZGRkMjQ5ZmQ0NDc1ZmMxYTM1M2M3MGE4MzM4OWJmYWM1MjA5OGRiMDY2ZDEwMjljNGVmZmJlZDg2NGViZTdmMTA3ZTAxMDNiM2E4ZjNmZDFkNmFiNDM2MGI5OWU4YjE0MGM1ZWExMzNlOTIzYzM5MmI4ZTQwNjNhYTZlNTIyNjM4ZjYxZDdhNzFjOTIyNTg5N2Q5ZjhhMWUxNmNmY2M4MDFlN2Q1NDEwNGViMTBlNjFhNWFlNjNjNWM4NWE1YjI5MzkyYWIzYWI4ZTVjMDM5ZjEwMGQwZjQ2MDBjNjEwZTAyMDk0MzZlZjJlY2U0ZDBiZGIwYmFiNDM3YjJkYjVmMzcwOGZkZGY5NjY2MGY2ZmIxYTkwZDYwNDhkMzk1YWZhZmE3NjBjY2FmMTVkZWFhMGVmZmViMjZlYzE3NjgxZDE3MmMxMzMwZjc4ZTc4YTg3MzZiMjg1ZjYxNWYxNWQ0ZjJjMzEzZDI1ZjMwYWVlOWQxZGIzOWY1MzVmY2RkMGViYzhlNzFiODljZTZiM2ZjYjU2N2NkMGZhMjg4ZjQ4ZWQzYTc1OWJiMmVkMjAwZmRjMjMwOTE1MDJmZDljYTY1MWNlNWUzNDIyYTk4MzM1YTgxZDc0YTY1Y2MxNTAwZTkwNzBhYmI2MDljMWMxZjY4ZmMyY2E5NGNkZDU1MGY5OWJjYjJkMDkyNDE2YjliZDM4ODQxMGI4ZmU3NDhmYjhjOWE1YWI4NjE1ZjJlZDk2OGY4NWRjYjI3Mjc3MjY5ODRiZWFkYTdhMThhZmRiMGM3MmFhNjVkZTdhYmI3YTg2ZjExMTY5YTZlYWRmMWMyMWQ2MTRlNTJjMGM4ZjAxOTc0N2QzNDFhMDVkODVlMzdiZjU4ZDgzMjdlOTkzOWMyMzg3YzI3NDRlZGY4Mzg1NjNjYjM3ZjBiMTZlOGEwNmZjNjI4YTk3MjMwNTA2ZmE0MTgzOTU0ZGM3NDgxNWYzYmUyZWIyYWZmNGExM2MwNjVmNzQzYjdkODVkZTgwNGViMjhlZmU1NzBlZDVlY2M3MWFiYTk3Zjk3NjNiNDM2MTczMjQ3ZjM4ZTBjZjYyOTcyMDliNjUxMjg0NjVhMzgyNjY0Y2VkODAxMWZjYzNkMGU1NjNmMTU1YmM2M2M5NGRkZTczYzdiMTcyNDdiOGMzYTRlODAzNGViZDQzNjQ2MzUxODVjZTljNzA4MWRiZGJlODU0NWY3OWQwMWFhNTMyYTBkYzUyY2I3OTBhMzFmYzJmZjQxYWNlYmFkMjdjY2U5MjQ0NTU0ZGI2NTJmYTI4N2JhZTdkZWNiY2M4Y2U5ZTAxZDFhODhhYjQxMmI2YzY1NzgyMDNiNDJkZWM5ODJiN2YzYjgyMzE0ZGIyY2M3YzVjM2RjMWQzZDhiMTcxNDRkYTdmZTYwZTdhODcyNWZkMGE5N2M2MTA2MDdjZjQxM2M3MgorU0lHOiAyYzNjOGNkMjk5YzkwNjBiNjU5OTliMDNhNjU3OWJjNTBlZjFmZTBkODUxZjIzYmU5Y2I1OGY4ZmI4YzY3MmVlMDg2YTUzOWVhZDk0OWUwODdkZjA5MTEyMmQyNmZhYWFkMjA2YTVjNTJmY2Q1OGI1MTRkN2E5MzViZTAxNzkwOAorCitUU1Q6IDk1MAorU0s6ICAwOGI1ZmQ0ZTQxOWQyMzcwYzBmY2Q2YzNiOTJmOGRiM2FmZDQyMjY4ZjUzMzA4NWQ5ZmNlMzJiNTIyODI0ZTM0CitQSzogIGNkMGRhNjk5Mzc5ZTRmOTQyNWU4NGI5NzU3MzAwYTUxYTE2M2YzNTg3MzRjYzM3YTkxZmYwZWE0ODhkMjk3NzkKK01TRzogM2NlZWVlYTMwZmE0MDE1NjNkZjM2YjE5OGI5YjU5Njk4YzEwZTEwMGEyZjMwZTZmNzhmZTYyYjkyZWNhYzk4OWU4YWEwOWVjNzYwZTg5Y2FjMGExNmJkZTNjYWM3MzYyMmE4NjI3ZWZlZGZhNGVjMDliODczZjdlMTAwMGU3Njk4MjkxMGNhMGFhNGFmYjFmZjVhODQ0OGI3NmY3YjBkMmEyZDUyYTdmNDBkZWRlZmM2OGQ2MGNlNjYyMmNhMDgwZDY2OThlYTZjM2JkNzIxMGIzYjY0OGY1MzI1MjI5MTQ5NGIzNWE1NWZmNDBmYTFhNjMxYTU3YzUxMDAxMWE0NmJmYjllMjcxYmFlMWU3OGNlNmM2ZWE2MGM1NWJhMGNjZTM2MDU5YmZiMDFlMzk0NTU2OTg3Zjc0NGI3MmFlYmJkYjRiMWJkYmIzYmJhYWVlMWI4YjJmMzE3NDUwNmE3OTNmMGE1MTFiMmI1NjkwNDliMzBhMmUwODQxNDI0MTg0YTQ4ZWNhOWUyZDgzNzgzYWM1YjYxZWI5NDdjYmQ4YmFiN2FkMzhiMGM2ODQyN2Q4Zjk0YWUyODUxOTBkYmI2ZTBjNmQ1ODBhMjUxNDIzOTRiZTk0ODE1OGQ4ZGE4M2I0ZjM0YThkMjU4Yjk3MDc1NjMyYjNjMjhiZmFlMzEwNWVkMTg3MmUzNTZlNDNhZWQ1OTM5N2I5MTEwYmJmOWQ4Y2EyYTA0NGQ1MjcxZTZjYzM2MWUxNGU2OWE5MzI1MTc2ODNlYzgxODE4ZjAyY2ZhMDI5NWU1NjYxY2VhM2U1ODZhZmMwZGI0MWJhOTU1NTNlZTc1YjIwMGIwZjk3OTAxMTFkMzc1N2E3MzllNTYzNTU3YWZmOWI3MGNhMTRlODdiNzk1NDM3YmE5MWE5NWRkMDdlYTY5YTExMzU5ZjM2Y2EwMzI5OGUwYmZhNGY5MTJmNjRhMjkyNGFkOTAxOTc1YTJhOTYwYmExYmU4OTkyMWIxZjU0ODU0OTZiN2VhNWRhNmQ4YTY5MzdhYzEwNWJmMzc2MGU0ODc2OTkwYTBmNWM1YTYzNGY3NGNiNTdkZjdjMTcyYzhhNDE1MzcyZTZkOTAzMjk4NzE3NDk5NjE2Zjg5NzFjNjhiYmVjZTkyZWE4NzhhMThlMjNmMzI3YzM2NDliNmE4NTJlZjIzYjdiM2U2MDNjZGY4MDQ1MmRiZjFiZTJmYjc3ZTgxNGQyNTI1NDk2YmIzMWZiNmU0ZWQyNTMzMjQ4YjM5ZDVmYmUyMzkwYTliNmZjY2FiYTk5N2U4YjQ5YjU5ODM2ZTNlMDk1MjllYTVlNDExM2VlZTQ1MWM5YzZiYjI2NzQxZDBlNGM1ODZmNTNkNjA0YzZlYTBjMGU2MGRiMDJlNTEwOWYzNzM0ZjUxY2RkODk4NWFmZWIzZWNhZmY2NWUwNTllMzEyY2Q1MGZhMzQ5ZmYyOGJkYzliNzBiN2Y1MzJkYmFiMWRmNDNiMDMxNjdjMWQyZTNmYTZlZThjOWIxNzRhMGIyY2Y4YWE5ZmZhNDA2YmY1YmQ3Mjg4NzgwYzljNGE2YjY5Nzk0OWI0ODYzOGQ0MjA3OWM4YzY2ZTE0ZDliNTcyYTIxMGEwOTNlYWYxZDJmN2E3MDNiNWNkMjBhZGM0Zjk5MjdhNmVhOGVhNzhmYWE2MWJjNjJiM2M1Y2JkM2E1MzI1MjU2NmQwNDNiYTU1NjU5MGQ5YTc2M2JlN2ZlYTRiMjBlMWU5Y2ZiZWJmYWUxNTQzOWIzMzRkYzUzOWIxN2RhZGEyZTQzNGU5YzgzMjI1YjFlOGY2YmViN2Q1NTZiNDdkN2Y2OWY3ZWI3ZGY1ZWRlMmVlYmQ4NGUyNTBiN2M5NDY4YzIxZmRjMDE3MGVhOGRmNjYyZDYxODA1ODFmNjU3ZmU3NmNlZjE4NThiNmIwMmY3MzI1YzcyMTk2NDNmYmEyZjdlOTk2M2EzMzMyMmQ2NTA0YWI5MWJmMTBhOTc4ZmEwN2I0N2Q1ZGIwYmUwMDBkY2QwMDJiZGRhZjY3NmI3NzI1OWM5ZjYwYWQwYjExNjcxY2Q1Nzc3YzFlODBiMTNmODJlYjBmYjZhMTgwYjU2NjYyOTNhNDMyNDA4NjJmYmZhMzk3OGQ5NTMxMTk3MWFmYWI5ZTFjYzhhYjE0YTg3NmI2NTcyYWM4YTRiN2UwYjQwYWFmNmI1MmExY2Y0YzFlYmM2YzFjNDg3ZGY1YTNjYmM0MDA1YTBlZTMyOWNhYmMyODZkYjEwZjE3ZDBmMTc4MmUwN2QzMzI0ZjBjNzNlZmJkM2MyZmI1MmI3MWY5OGFkOTVkYjk1MDYyZDkxNDI1ZTczNDY3YmMxZTRlOWJmNTUyZThhMjQ0MjlkOTdkYjFkNjZkZDRkOTk1ZTVmOGQyNGU5YzkxMGIyZWIxNzU4ZWY3NTUyNWMzZDY1YTNmNDMwYTAyNzM0ODgyMGNlMzA1M2I2ZjNhZjRlYzk2ZDA0OTM3MzFjODE4YzZiMWE3MGMyNTBhYzY4NmE0ZmMKK1NJRzogNDJhMTM3NTZiNzVjNjcyMjQ4NWZhM2Y2OTQwNDFiMzliN2Q3YzVmZDQwZWJjMDZhNTJlMGZmMzRjZTE0ZDhkNDBmYTgyYTk1MDhiNTY4NTM3ZDI2ZDBkZDdjMGEzMWJlNzEwZGE4MGFhYjM1MTk2YTAzOWI2MDY0MWRiMWUxMDEKKworVFNUOiA5NTEKK1NLOiAgMWU4NWM5ZTQ1MWI3YWNmODAxZDE2YmM4MjY4ZWI0MmFlODVjNzJjNjhlOWY5MDkyN2FhMGYzYjUwYmVmZDIyOQorUEs6ICBhNjlkMDU3ZjRiNzQzODExZTA3YWM3NDU2MWMyMjViZTAzODFjN2Q1ODQ5ZTYwMTg3OTM3MDFhOGNiNmM5OWI1CitNU0c6IDE4OWVhOWM4ZDllZDE0YjBkZTgyYjQ0Y2JkZDU4NzU3YTI3YzY4MzgzZmJhNTk3NzYxZjllODYyZTA4ZGUxNWIxZTQ0YzNkYjFiYWRiZGU3Njk4MGVlMzllNjk5NjI5ZjZmY2ZlZjMyZDM2YjMzOTNkYTJjYTVhODFmOTU5YzhiMGYxYjgwMWI1ZmE0YzQ3Y2EzOTU5MWU2MTJhMjQzNWM1YmFmZDc3YTVjN2FiNzQzNTkyMTA5MDZmNDc1MzNiMTg3OWUyYTVhZjU4NjRkOTYxYzgxNDZlMjVkYWM3NzI1NTVlMDQyYTg4NzI2MTQxOWFiOGM5ZjZmNjI1NjI1NDgxZGE1YjkzNTI2YTEzMWYzN2I1MzRhMDA1MGE4YTQ2MmIzM2YyMGE3ZTk0Yjg5MTUzMGIxOWJmNjU0ZWU5NTM0YzlhODM2MWQwMzYzNWQ4ZDI3ZDQ2YmU3YmY4NDc4MWFkMGQ0MmQxZTdjNDg1NGE0OWJhMWJhNDU4MjYyZmU1ZWExOTAyMWI5MzVhNjk0OTQ5MmQ3MGI2MDVlMTUxOTg5ZWYyNjQxYjJiZjgxZWM0YjkyMDIwZmM3MDc0YzJhNjMyMjlkNTFhOTQ0MTg2YTI4ODk1ZThlYTk1MjkyYzJmODcyYmIyMWEzMTQ5Mzk5ZTIzY2NkOGUyZmM0ZjE3YTQ2YjU5YzI4MmM1MWI1OGQwMDI2NmE1YzE2YjFjZTM1MGQ1NDg1ZThkODAxNmRkMGE1MGE1OTg0Y2M5NDgxNTRjZDVjZTdjZGEwZWUwYWIxZDcyNTFiZGM3MGExNzg1YjhlOTEwMzkxN2Y0YjkxN2FiMmI0OTRmMzQ4MzM4OWEyZjkyMzc1NDE4NDllZDNiZDU2NWNmZmFjOWU3NTZkYjU2ZWY1ZTIzNDk1YmM3NzFlODhiZmZhODcwN2NlZWE1YzA5YmVjYWRkMDU5YWI4ODlkMWRmN2U4ODdiNzFhOWU2YzIzODM3OGZiZTBjMzYzMDM4NjYxNjM2M2YyMDdiMTZjMzI3MGQzOWFjZGVkNTExNTI5OTkyZjRlNTk4Nzg5MTIxZDMxNjEzNTgxMDYzNmJhYWRlOGEyOGVkYzY2YmJmNWVkZTNmNDA0YTcwYjQ3ZDM1OTg4YmU3MDZiNGVhYTAzMDIzYTM5MDkzZDU4M2NkNGNkOGJmNGM3NDM0MWEwMjhjMTlkNjBkYTMxYjZhN2EwMzRjMDgxYTJiMDMwZmViM2NkMmYwM2QwZmFhYmZmYjU4ZTNmYzM2YzAwNmNmYjkyOTQ3YTdkZTViYTg3NDc2YzFiMDUxZTE4MjgzYzAzZTljNmU1YTVjM2MyNzc3ZDlhMDc1NzM3MjM3OTY2NGU4MmY4NDg1ODI0ZmVkYjcwYTRiYzRlMzU2ZWRkMWI1Y2UwZmI2ZTQxZGUwMTcxNjIxYjg0ZmFmYTAwMTg5YWZhOGE2YTkwMGIxNGM3MDc1OGY3YWE0ZmI4MjQwMGUwZDE4YWIzY2Q3ZTQ4YWNmZDQ4OWNhYjBlNzJlNzE5Zjc5YTA3ZDA2NmM1MzFhODkxYzU1MjkxZjIyNDVkYmJlZTQ0ZTUyYjFkZmM4NzI3YWFlMzg3YWI5ZTcxOTk0YTM4NTRlMWFkZDczZDlhNzk2NWM3NzU1MjFjMmY1NDA4NDIyNzZkZDMwOWUyZjZhMzQxZTdmMGYzN2YyMmJiNjYyN2I2ZTljYjI1YmEyNGM2YzRmNGViOWY1ZTc2MjJkODhkYTE5ODRlMjljNWRhMDAxMDM5YzQ0MDQyYjU5MzUxNDA2YTQxMzM2ZGQ3NzJkNDk3ZDNmYzhhYWM0MTE3MmViNWFhNjQxN2ZlNDIyZWM3YzE1MGI5NmIwNDU0ZWUzMzEyNDdjYjE1MzhhZWZmM2VjYTJkNTBlNTNkNmQxMzE3MGE3NmEwMDQ5ZWEwYzA1OTA0YTYzOTBlZDE0Y2U3NDkxZTk3Zjc1NGM1MjIyZGFjNGI2MTE4YmEzODFmNTUyZTczZWE4NDkxZTNiN2FjOTQ5NTY5YjU2OWNmMmQyOWE4MDQxMGUwNjViNWNjNGE0NjZiYjA0ZWI3YTE1ZjU5Njc5MmU4NDkwYmE3MDAyZWMzNjE1NzFhZjVkOGY1NzY3NWM5NTY0NDk0NzBhMmY5OTU1NDA3MzY3ZTQwOWEyMzI4OTk1NTMxMjBhMjc3ZGI4NjNlOWE4MmRkYWJhZTg3Yjc4OTE0NWJhODk4ZGYzYzI4Yjk2ZmJlMzAxNGNkMDg1YzZlNjBlZTg4MzE3MDEwMzZkOTljNTQyNWQ1OGU4YmNjOWZkOTI3MWQ0NmFlYzFlYjk1NTEzMDEwMmVhYWFiNDRlMDc3MGMzMGIyYjEyN2VmYjBlNWY4YTNmN2EwY2EzNGVjOTk4NGE0NjAxMWJjMjZiZmRlMGMwODE5YmI1NDcwNmI1NjU2MzhiNzU0MmRjNGI4YmY4MDk4ZGMwMWYxNjFiM2IxMjk2MThiNTlhZGVkMzNjYjU5Y2U5MTg5YTY3NjJkYmFlNWIwZDM0YjcxYzhkYmYKK1NJRzogNmMzNmRhOWFkNmM0NTYzNDNjZTY0MmFjYTQ1NDkyM2E1MmEyODQ0Y2U1ZWU1ODk0N2M4ZGY3YmFiMmViZTQ2NzgyM2M1NjMzZTUzMGIxNjdkNzFjNDdhZDk1NDlkZjA1OTQzZjk5NDIxZTE3NDc1YzRkNGYwOGRlZGY2ZjMyMDUKKworVFNUOiA5NTIKK1NLOiAgNTFjZjg2OGY4MjBlZWRhMGRiZDEwMTgwZjc3N2U2MDY1YzkzYTQ4M2M1OGE3NzhiNjdlN2Q4NDIzMDJmYjc2NworUEs6ICBhYjA4OGY1MDJmYmNmMjE1MGU0ODQ2YjM0ZDJjODA5N2ZmMDEzYzAyYThiOTdjZmNmMmI5NWExYzcyZGYzZTI0CitNU0c6IDdjMmQ4ZWU4MmQ5YWJmOGFhOWM3MjRjNzViOTA5OTA0NzNmMTMxNzYzZmU5M2IzMGNiMDQ3MjM1ODg2MjFkYTJhMzI3OTI4YjIyNjQ5ZmEwNjJjZGVhYmQ3Nzc2MTUzOGIyNzA5YjhmYjdhMjAwNmU1MDM1MDkxMzRjOTI5YzMwMTFlMWQ3MjhhNTdhNGUxNzUxOTgwNzVlMjE0MjUzZjNmMzBlMDFiNmUwNGVhYmQ0ZGUwNjc4OTU1OGU2OThiMTg2ZWZlMzRiMzIxMjk1NjhiM2U4ZDBkN2VhM2ZmMDBiM2YyNWE0MjIzNjg5M2FhOGE0MWI2NzRhMGFiNWY0MWU3YjI4Y2Y1YTdjYjc2NWUxOGVhZDZkZTZhMzUzYTc4MjRhM2M0OTc4NjAzOGQ2ZjQ5MzdmMzI2NGQ2Y2NmMGMwYTI0NjViYjY5M2U1MmIzZDFlNmViOWFlNGNiNjVkMDljZmY1NDg0MmU4NTM2Mjg1N2E1OWY3MTk4YTY4OGEzZGYzODUxM2NkZDYxZTIxZGZkODU5MTQyYzgzNDRhM2I4YjJhN2M3ZGIxNzBmMzlmODdjYTNmZjhlZDQyNzk2MmIyYjFhMTRkMTIyZmEyZDVhZWEyYTY2NDAxMTdkZDI1OGZhMGZjNTRhYzZlOTQwYmMxNmQyMTFlYzlhZGY5MTRhYjE2NTc4ZjUyMWY2NTVkMjEyN2U3OWU4NzFiZjdmYTc1NDQ3MTlkNThlZDg0Nzg1MGNiMjdiOTllYjhmMjliMTZjZGNjMjhiMTVjMTI1OWFiNGQ1ODk3MDVhNDA2Njg4ZjYwNWEyZWJmNTgwNTFjNDNhNzdjNGUwMWZkNmY3NDlkMzJkYjRlODlmMjYzYzJjMTZkZTE4MWYwZTZiZGQwYTZhNjRmZmU2ZjE4Mjk0NDQwOTZkOWYzZTJiNjdlNGJiMDA2NjUwYjU5MjlkMWY4MmViMTFiYmVkMjRlOGYxMDE4YTczODQ2MDVhM2NmMjlhYjU5ODMzNzkzOWM3NmEzYmU4NjFlNDgzYzU4MDVlYzNjZWU0NWUzNDI0ODQ3YTA4NTU4ZGNjOTk0OTlmYjkzODJhY2FlNTZjZGM4N2ZiZDViMjZmZjk0Yzg2ZjJlMTA4Nzk0MzgzNTAxYzhiMzMzNjY4NTBhNzZhMGRmYzBhN2NkNzg5YTAzZjAxYTNlOWQ5ZTlhZTM5ZmQ3MjQ1ZGMyOTI5OWQyNGYzYjRiMTY3Y2FjY2QyMjNhOTliNmIyMGEzYjY3M2RjNWY3NDY2ZDBiMmY4MTUwOThhNDk3Y2NhZjgwNDIwMTY4ZWRkYmY0ZGE1N2I4NjY2ZTlkMzNjNDhlYjMwNGI0Y2ZjZjQ1N2NkNzY1OTU0M2Y2ZDFlNjYxODkwZjU2MmI0M2I4YjZkMWM0ZGNjMDc3YjYwYmZhNTMzZmZhYjkyOGRiZmQ5NTVkYzUxMTZkNzcwOTUwYjY5MGUyMTA2YWQ1MmQ0MmMzMWMyMmI4ODQ4ODk0MzMyYjVjNjk5ZTVjMzMxZmIzODFlNTgxMmU3NTI2ZmRmNGI4YWEyZGFhYTJjYTJjZmI5YzkyMTExYjYxY2JjM2QxZWVmNmM4YzY3MzdmMDU1ODhmMDQ0NjdkYjgzMzA4NDNhY2M5OGRjMWExNmZiZDlkOWQ5NGJkOGJmZGUyNmMzZjcxZGVlNzJiNTA5MTBjMzZiMjQwZjgwMmE2MWNhMTYzNzJmNmZmYWFkYjJiZTRlODUzYzVlZDY5YTNkMWY2YzdiMmRlNTEzYzUzYTNmZGQwYTY3NmY4M2QwOWQ1YzUxMTc2MDQ3ZDkyMDA3MTZiZjIyYmFlNDVmZTAxYjNlMGMyYzUxYzE2ZTQ2YWQwNjM3Zjc5ZjliNGQ4Mzg2NzcwNGZlZGE5ZjIyNzgzMWRlYTI2MzM5OWNhMjc3MWE0ZTc4YjRkZjhhYzBkZTZhOTQxZWFiMzcwYjFmZGI0N2RhZjY2NDJhYWVhYTYzMTcwZmE5YjNkMWUxNjI4ZjdjNGU3Y2YwZWE4YjhhOGU1MThjYmFjZWY5YWRlODRkZjAzMjQ4NDg0N2ZmYjYxYmJkMDdlODcyN2NjNGMyNWRhNTc3YjI2NDUxOWI0OTk5ZmE3YzBiYzMyM2Q0ZjNmOTczOWY3ODBiOWIyYzIzYzc3ODU1ZWU1ZjZkY2M0MDE1NDRkNmI2NGIyNzcwMTU4ZmRjNmMxMmY0ZDg5YmViMDQ0ZTBlODVhYzdhNjhkNDI5MTdiMTM0NTExNGI5YTY3MmQxMjMxYjJjNmMwZjk2OWYyMDM1MzFlNzFiYmI0MDA1YjEwM2E3ZGMzYTU4YjViODI0YTdlMDFiNmViOWY0OTZkZmE2NGQ2NGQ4YzY3NzdmNTNhYTU4ZDVkYTA0NmQ3MjZmNTU0NTRjODhiNmQ3ZDRhYjBkMjE5OGE4OTcwOWYxMThhNmIzMjQ2MGI5ZWJjZWZmM2ZkZGM2MDVkYTc3ZWYzZDFiYTMwZmVjZjA3YmUyZjUzMTNmNGVlNjM1YWY1ZTk1NjFkODc3ZTk5YworU0lHOiBlMTUzNDJhMTFjYWY4OTI4OTVlNDY2MjI4ODYzZDA4M2IwNjkyZjAxMDYxMDc0OGMyM2RmMmYxMWQyOTQ3NWJhZmNlOTI3Y2FmZTdmMDdlZmI4YzM0N2VkNTY2M2U3M2JlYTg5NTMxY2VkYzBjMzQ4ZTc5YjZlNThhNzU3NDkwNworCitUU1Q6IDk1MworU0s6ICA1NDNkNWYxZDRhNmUxMDI5YjE5MTQxMzhmYjFmNDY1OWU2OTQ1NjU1NzIwNzQwNjY4OGEyMDM1Y2JiYjJhNjhhCitQSzogIDNjODM3OTBjM2I0NTUzZGVhZTRmODQzYjUwMWQyNmY2MTY3MDkzZWU1NGUyNzk3NTlmZmFkOGNiYzA2MWU3MjAKK01TRzogZmUwMDU3ZjA2MmZjODcxMzI0YjhiZDVkNDI3ZTlhNTI3NjIzMWJkMzA5OTA3ZTU4ODFkN2FlNTNiMWYzNzBjMmE0MzMwMmExNjUxMGI0NjA2NGEzMDczNmJhYzkwOTUxZjFkOTg4MWFmNjJjNzAxNDgzZWJiOTI3MmFkNzcyMTJlZWI1ZmNiYzdlYzIyOGQ5NjlmODkwMjczMjExM2I5OGUzYmY4MmRmZWFkZDBkZTVlNzY1ZDI4NzBiMTJkMWY5YjVhMjgyOTdjOWZkZDE0OTVjZjg3Nzg5MTk2YTdkNjQ0ZWVjZDkzNTg3ZGJmMjBjMjhlYjA5ZGEyODY2MDNjNTgyZDIxMjlhNjU3ZGIyZDE3YWRkMzU1OGRkZTAyOWNlMjdiODgzNTJkZTNmOTVhYmExN2UxZWQxOTEzNzIyZGIwOGE3OTVkZmJiNzBkNjJhODgwMjcyNGNiMGY1MzVmODQ4ZDA1MmFhM2RkZTkxNjY5NjNhODA0MWZjY2M0ZTYwYmZiMTFkZTJiZjI4NmViNjAyYTRhZjg0MmY0ZDFhMzQwZDc4YmJiY2IyODU3ZjBjMzA4ZjQ0YmIxMDFlN2JjOGI3NDFkNTA2MDk0ZTI3YmJhZmE3MjQyOGVmNjY2ZWE2ZWExNmY3OTliNGVlNTgyNzhmMDQ1OTc0ZDg2ZGM3MmNmNTI2MGQ5NmY5YzA5YjJmMTE4MWUxYTQ1MDBmOTI4M2RjNjc3ZjM4NGZmNjRlNTFlODlmNzY1ODIwMjAzMjZjMzg4YzA4YTBmZDAwZGU3M2Q1ZDQ5YzA2YzBjNjg0MTkxYTI2NGZmZjcyNmQ4NzJkYzNhZTQ5NmM3YjQ3OGNmYzYxYjUxNzE0MTkyZjc2NDYzZTNkMGFhYjQxMGVhMTE1ZThiZWZlZGI5OTdkZGQxNjk5MjFiMzIwN2VhNjZjMWY1OTQ1MGI3NjIzMTI5ZmQxZTJkZDNkYThmNTIwNjM5MTE3MTMzOGVhMGVjOGVmM2M1OWVkOGFmYzY5ZjM4NjVjMjlhMDcyM2E5YmJlOTVhNzQyNjgxZWY5ODU3ZTgxYWJjODBjOTJkMmE3MThhODA0ZjUzMDRmZWYzYzYzZDc5OWE2ZWY4NzgyYTdkYjQ2NjgxZDBkZTM1MDY0NDY5ODIyNjdiMjE1MmIwYzMyMTg2OWUyM2NjZThjNGViZWJlYWY0YWExZWJlOTI4M2I2OTI2MDUyNjBmZjYyMWIwM2MxMDgyMmFhNWY2ZDAzYmRlZjQ5YzQ2MmE2OGQ0NzFlODQ5ZTE2NGUzODc0ZjZlOWY2Y2IzYjVmMjkzZWIzOGFlNTI0NWExNTllYzQyNjFhOWJmNmI1ZjdiNzYxNWZkMzM5ZWExMjczMzExM2NlNzY3Zjg4M2FlNjY3NTQxN2ZjNzcwYjUwYmQ2MGU2ZjIwYWRkYjI5YzFmNzUwNjIzM2UzMmE3ZWJmYWRhYmZmOThjZmQwOWIyYjNiYmQzZWFlMDA2OTU0OGI5ZDg5ODdhZjQ2Y2E5OGViMDk1YmFjYmQ4NzQ3MjRiYTEwZjM2MzNhYTA4YWI2ZWMyNjQ5NGRkZjY4NTQzMDliNTVkNDNiZGJkMjlhNzU1NmYxMmRmYjIzY2QwZGI0ZWIzOTM3YTY1YzRhZWQ5NmU4N2IzNDY1NTVmOWZjNjg5Nzk0M2EwZmFlZTY1Y2NmMzk0YmQ4OWIzODFiZWVjZTI1ZDFiYTY4ZjhmZTMyYzIzYjMzNTRmNWJlN2UzZWEzYzBkZWMwZjdlYzJkZDgzZjkyYjczMDU4ODkyYjYzOGQ0YzNiNzI0MmJiOGY1NWJmMDg3YmE0NWExOTBhNjk4YmFlNjc1ZTBjZDVlODQ0NmYyYjIxYWViNjNkMmNhZWEwZjY3OWE4MzdlNzkzNTczMDhkOWYwYjhhZjMxZjlkMDgwMDhjMzllZThkMzQ3NTI4NzEzYzg4NTAwMTdhN2Y0YWI5OGEzNWM3NTMxOTQwZmE3NjIxZTY3MjAzZWU3ODJkYjNhMmZhYTMwZjNhYTg1MGE1ZmY3YWFlZDg0YzAwZmZkMjE0ZjJjOTI2MTczNWZhYzMyNTlkNTBlMDNjMjY1MjUwNTI3OWQ5MTI1MTkyN2RlNWU1NmE4YjkwNjRjY2Y5ZjQ1ZGNiZWY0NmUxMTg5Y2VkMmJjNzllNmZmNjUyZTY5MDk3YWNlNTU2OGJiMmQ1YmVmM2NlMjFhMjViM2Y3OWVlMjc1ZWEzNGU2MjEzODA1NjZkNzA0Y2Q5M2YyNGRkOTAyMDkzMmNjMDUyMThjMjNiNWIyMmZmZmE3ZTk5ZWU3ZmU0NTc4NzZhNWUzMzY0YzlhOGU4YjA0OWNmYTIwOTY5Nzc0ZjUwNmQxOTk2Y2JlNmVmNWEzNzc5M2VjZGIwNGNmZGVhZWQ3ZGNmNzlhYjI3ODQ3NGRkNzcwODIyZDRiMzZmYzY4ZTRiMmRkNjYxZWY5OWRlMDFkZTZlZWM1N2ZhNTczZWRlMTBmYmJkNWFjNmZkNmNkOGJiNGVlZTUwOWRiYjQ2MTAzNzQ0MDEKK1NJRzogNTUyMDExOTQwMjZmZDY0NDhiMWQ1MmY4M2VkMjBhYzI4NGU3ZTc3ZmE5MmQ1Mjk1ZDMzODI1Y2VhM2FjYTQ3ZWM3YWFjYTJmYzA4Njc5ZjlhY2ZjZWRiMzc2ZmRhNDYxOWJlMzI3MmM3NDQ1ZTg3MDVjMzA2MTQxY2RlMTZjMGYKKworVFNUOiA5NTQKK1NLOiAgZjhkMjU3ZmRmY2Y5OTc5NmY4Y2U0ZDhhYWRlM2IyMjVhNTNjMjZmZWVjZWYzOTViOTU2MWQ5ZDU4N2Y1YTMzYworUEs6ICBmNjZiZDQ4NzdkZjc4YWVjMDRjYTdlNzc3MzI4OTlkZTA2Nzc3ZTY5ODYyOWYyOTk2OWY4ZmE5YzJmNDdhYjllCitNU0c6IDIzM2UxZWY5MDFhYmNiNjlmYjQ4NjA4NWQ4ZGIwMjMzZmY3OGYzN2IxMzZmMGFmZTI0ZjdkYWMxOTQ0YzM2NzhlNzRmZWQ1OGExYWQ1NDgzNWI3ZGJjYjQ2ZmZmNmMzNTI0MzEyMjczMzAwYjZkODc4YTkzZTA2MDhhNGFiYWNhNGUzMTk0NzIyYmI5ZTIzZDE3MTk0ZDg2NjdiODRmMmRiMDM4YzI0ZWZiOGY1MzQwOWNmNTU5NGZkZGI4YmNkNjFmNzRjZjA3MjZiNTFjNjUxY2UwMWViNjZhNTliNDU1ZjdkOGE3ZDYwZDM5MjdlMGM2YzU0YjEzOGUwMTkyNTM3MWQyZDlkOTYyYWE5ODJmNWU2MDg1MjgwY2MwNWYzNTY5OTM5MTFmZDIwMzlkZmMzNDIxMTc5NzAyOTEzODFkODIwMjdkYjM2Yzc5OTEwMDA1N2Q5MzUyYjJjZDg3OWQ5YzgyYWY3MzRiN2ZhMjk3ZDIxMTQ5Yzk3OGFhNWUxMjViMjAzNzJhOWIyZTBlZDM1NzMzN2VmYWVhMTM5MWYzYjllZjExZTNlNTEzNWJiNzBiZGJlMzJhOWJkYjdjM2M0MmQ1ZDU3Y2M4ZGFiNjgxMTYyOGEwMTA4OTQ5NWNiOGE0YTc2YTQ4Mjk2Y2Q4ZGZhZmMwMDVhZDQ5ZDcwYmIxOWZhY2EyMDg0YTFiNmY1ZTQ4ZDIzYzAzZmJjZjZmMTA2ZGI3NzBmMDdjMzNlOGU3ZjQ3NTdkYTkwNGE0NGRkMGU3MzhmM2Q1NzMzYTMyOTM3NWNlZDc0ZjNjNDJiZmNkYmI5MTAxMDA0NTVkNmFhN2QyZTNlM2FhYTU4YTgyOTYzMGQzNzZiMGI0NjZkYzg1YWFjNDhmZTI2OTk0NmE3YmM3MmQ5MWViMzdkZWQyZjRhNzdjNjg0YmUwMTA5M2ZkMTJkZTlkOWQ4MzE5OWNjYzUwOTU5YTQ4ZDZlOWE0MTQyNzU2NjA5MmYwNGEwZjk1Y2E1MjM3MmUwNzYyYjk2NmNlNjIzMjA1NWE0ZmQ3NTdjNjFiOGJhZDgzYmFlZjkxYTNjMjc3MmZiMzJlYWQ4ZjU5MWFjMWUwMmJiZjkwYTdmNmMzOTA3OWI4NmZiODE0Y2MyNDJlOTgwZjBiOGIxYTJjZWNiOGU2ZDRlOGE1MjExYmY4YmFiZjM4ZTgyOWFiOTg4MzYwOGJkNmQ1OWVhNWU4MzZhOWI0YTRmYmVkZWQxYmVhMmZmZTk3N2U4Y2YzNjE1Y2E0YTUwZmVhMWYwNWYxZmU1M2M4ZWFjNTAwMzIzZTFmNTJhODA2ODMxNTM5OTU3OTg4ZDc5YWNjN2I1NGY3ZDAyYjQ4MGM0NjlmZDY5NTQwZmVhNGJkZDY4Y2JkYzY4Y2Y5Yzc4NzJmZDc5MjU5MWIwMWU5ZDk5MDJkOGE2MTRmNGMyMTgyM2YyMzUwOGZmZDQ5ZmYyMThiZWE5MjJlYzE0MWVmZjYwZGExNzdjY2FkN2Q3YjlkNDQ0ZjNiMDM0NTgxMTVmMTE2Y2M2ZTM3NjI1YzM5Y2JhZGYwOTM2MmYzMWQzM2Y0YzEzYzMzYjYyOTIwMDdmMmNhZmQxOTRmNjJjNjQzZTdhMjU1NzE1NjRmZWJhZDdkMzNlMzY0YjYzM2QwMDhiMDkwZDdhMDkxMzU4YmM2OWM1NjdiOTUyMmI1YzFjZDAxMjE4ZDM4NTI5YWViYjAzZDljMmE1ZWIyMjg1YTcxNzZmOThjMjgwMzZmMjFlMTllOTJiNDA2ZTk0ODk1ZmEyODFiMzUyMjhmYmY3NmU3M2UxNzU4YWYxYjQzNGE0ZGY5OGU4Y2M1NTZiOWQ4M2Y2YjBiN2ZmNTJjNjgwZjY1ZWZlNGUwMGM1OWI0NmNlNTkzYmY5ODg5OTgwNWQwMmI5MTY1Yjc0Mjk4NDllNzM5NTM3NzBhZTM5M2U0ZjFmOTdjYjkwY2Q2MTU5Y2M5Mzk1MmFlOGE0ZDNkNTZhOWE5NWRmN2NmYWJhY2Q0ZDAzMGQ3MzZlYTQ1NGRmYTRiNGFlZDFiY2Q4ODVkMmZiZWE1ZmZhMmNmMjkyN2MxMzdjODZiZTRmZTAxNjQxMjYyOGZlN2EwYTBmMDJiNmI2YTlhMjE2ODkzMmI5NDNmZjhiMjhkZDU4N2U3NzI4Nzc5MGFhYWE2OWE5ODUwNmM3NjRlNmY1YmE2MzM4YzA5ZjM4MmUxYjk4N2Q5OWYxNGEzZTE5NThjYjYyYWU2NzA1YTU3N2Y5ZmZjNjczMDY0MDExMjg3NDFhOGQwYWYwM2MwYWFhZjZhZjA2YmQ4OGVlNGIwYWY2NzAzZTBlYTYwYjA0MDlhY2UyNDU3MmZiMzg2ZTA3ZTljMjJjOTY4NmJkYzY2ZDRmY2YzYzc0NjFkMzgzM2E0YzMwMTMyNDM2MDdkNGQxNTgyMTcxODczMjZkZjUxNzI1YTZiYzUxMTZlOTkwYmVmOGE1YTk1Nzk2MDAyMDcyMDZiZmMzYTZkY2YwNzQ2ZWY3NTZmZDkzOWUxODdmNjY4NzUwNzE2YzAKK1NJRzogOTIzNWQ0NDgwNzg2OTgxNmUyOGU0MmM4MWM4MDFmZmIxMjFkZTgyNmMwZDMzZGNjNGE0ZTFjOTMyZDUyMjhiNjM5YmIyOTRlMTYwOTBhOTNkMWY2OTA0YTcwMDQyMjJmZGEwYTU1NDQ2ZDk5MDFjNzIzNDAwMDdiYjQ1YWUxMDMKKworVFNUOiA5NTUKK1NLOiAgOGRhOWY1NGRhMGI2YTVhMzg5ODViODhiNzEzMzlkYzczODRjZmQ1YTYwYmVlMTU5YzM5NGMyMjM2M2JjN2VkZAorUEs6ICAxYWMxYThlZGViMjE3YWU5YjNhM2RlNTMwZDI0ZDgzZTExZmI2NTM4Y2M3MDliNTI5OTRmYTljM2YxZmFkZGM4CitNU0c6IGJkNTNiYWJhNjY1N2Q4ZGI4YmVjYWU2ZWFiZmZhNTJiMDE1YTVhMDVmZGQyZTA3MDY0N2RlOTZmOWNhNGRkMjE5ZmUwZGE2MDhmYTA0NDdmNDZkMTdjOWEzNTgyNDRjZDU0MDg1OTY1ODJjY2QzY2RkMDE1MWQ2ZjA5MjNlNjNkMTY2ODM3ODQ1ZjI3M2ZjYTdhZjZjODlkOGQ1MjQ2MTc1YzIxNjdmYmI5YzJlYmY2YTc1OTU0OTFmOTdhOTcxM2IwMmJkZjQxM2UyMDlhYjIyZGI3ZGQyYjM3ZmM0OTQzNjkxOGNjZWJlNTc0NmJjNjRkZGQ2ZGNlMTllYzQ1NThjNDBlMDg5NmUyMTkwOTI4MGNiYTA2ZDE2YjcyZjMxZDk4NzY4NWQwNzFkYjgxNTVlOTllYmNjNmM4MjFkOTI2ODNmZGNlZTA4NjY4YTVlZDU4ZjgzOWQ5ZWRhZmI5ZjE0NTlkNDhkZThlMWJiNmY3Y2U4NGRhMGJlNDExYzhmN2JlMWI5YTI0YmM1ZDBmZTNhOTZiMDIzNTA3NTBhNWNiMjUwYjQ5NTU1YTQ4NzY3MmJkZmYzYzNmNzg0ZTNmYjYzYzFjOTdiYTZhZTQzYTEwZTE5NmYxODhkY2M2MzVlMjE0ZTI5ZGY1MDllNTYwOGE1MzY3YWEyODAwYzFhOTZhZDkzNmE5ZTJhNTc5Yjg1OTJlYzEzYTM1OTMzNmE2Mjc4OGMzZWM1NWMwZmZkNmE3ZDQ5ZWNiN2M2ODJlZmEzMDgxOTlmNzA4ZDc5ZDBlODg1NjM2NmQyNjlmYWIyNGViMWEwNzVjOTZjODgxY2FiODk3MDhjZWQyNzkyMzBkM2YxZjNlZTE3MzY3MjI4M2ViOGQ4YTgyNDAzOGY2NDhhYzQzNzI3NWQ3NWEwZTE1ZjcxY2U1NmE4YWViNzcxZjA3YTdmMzJhZmM5ZDYxMmExM2JkODNiN2Y5Mzk5MGQzOGZjM2Y0ZjRhYjhhYTk0MzBjNjU3MzZlYjY0YjE2ODA2ZTk5NWMxY2U5ZGNmNGM1NTQ0ZTdiM2QwMTU0MWM1NzIxYmI0YmU0Y2YwYWUzODJhMGMxYjE2OWQ4ZTQxOGRlZmQ1NTk0NDJhY2VhMTRiMDBkNzA1YmNmYTc4YmUwNzU2YThmMzc3Y2JmMTgzYmYyNTkwNjg3NDExNWQ4Y2U0YzNiYTg3NDEwMjkzOGE0ZWExNjAzNmQ5MWE0MmM1ZjhmMTg4NjU1Y2FjYjAwYzg4ZTNhNjg1MDg4MTZlNWUxYzMxZDI3MTgwYmJiYTk1MThhOTYzMDcyNmQ3ZDA0N2RkOGQyYzA0MDEyMTllMTRlNmJhZGZjOWI5NWI3N2E2YWNlOWJlYTcxZDFiNDdjMjE4OTAzYTExNWFkMDI5ZTdmMjAzOWVhMjNjZmQxZmE2YTQ0ZDA4OWZjYWNiNjc4MTUzZDY3NGMwZTA4MTc2NDk5NTU5NWNiNjg5NDg5NWYwOGUyNWI5ODRlM2E2OTRjOTJmYzdjYmUwZmZjNDY5NzIzMGJjYjBjYTQwOGMyZDcwODVjMTFiYWRlYjNlNmMwZTc1ZTZjNDk4ZGIxYmVjMWVkMmEzZTI0NDVjMzJiMTkxM2E4OTUwMGY2OWU3ZjIzZjQxZDYyZTVjMTg5ZjM5YTA1NmNiOWZjNjhhNDUyMDIzYTMzM2Y3NTIyMGNiOWI5NDQ4NGFjYWM2YmJjNjcxZjU5ZmZhMDcyYjcxYTE4OTZhMWIzMDZlOWRjNTU4ZGEwZWMyMGYzNzNlNGMzNTVlMGM1ZWNjYmJmMTM1MGM4YzA3OTE0ODkyYzQ1NGRlZmNlZmI3MTdiZTM0ZDA4N2FlYjI0NGE4NmZmNDlhNmM0NzBhZmIzNmI0MGZlOGI3MWM1MDVhNGZmN2FmMjk4NGM2NTI4NDkzOGVjMGU0MDUyMzE1MjFmNDgxMDE0N2RjNGUzNzNmZGFiNjY0N2I4NmY3OTgyNzUwMmZkMDg3ZTI3ZjMxMGQ2YjMxMjM2MzExMzg0MjE1NWM1N2EzMmJhMDNiNmNmZjk2NTUzMGJkNzk1ZmMyOTJlMjQxYzliNmNhMDg1MTQwMDMyZWZlNzQ2ZjM3ZDU3ZTk1ODQyMTE4NGI4YTRjMWE2YTFlMzdkNDVlMDc3MzE5ODMzMDY4ZGRjYjg5ZDM4Yzc1YmViYTFhNmU4ZTQwNTI4ODhlYzE4MTYyZGQ2ZmYwYzU5YTJmZDBiNDdmMzExOTE5NTY4MGZmY2NkZGY1Zjc2YjM1ZjAyMmFhNjZiZDFhYzU2ZjFhZTMzM2U5YjlkMDQ2ZjBiNzlhODkyZWNjNGY4ZDJmMzFlMTc1MzZjNGM2MmE5YjVlMDYzZGQyZGNlMzdkM2QwYWNiNDIwMjNlYjJmMmVhMzI5ZDM4NzZjMjM4NmEwMjI3NmZmZjlkMzA4YWJiYWRiNzI3NDMwMWE2OTYyZWNhZWViMjBiZWY1ZTM2YWZmZmMzODdjYThlMTg1ZTU2MmI4NjViNDkyMDRjMTdiMmE3MDExOWIwNjFjMjljMGZlOTAwNAorU0lHOiBmNmRjYzJkMjdiYWYxNmM0ZjQ4MTdmODc0OTkxNTdkM2FjMWY4NGVkMzk4YTVlOGIwZDUwZjQyZWRkNzM4NWNmMDYzMzdhMDIzNjEwOTk3MGI3OWNhMDlkN2M5ODMxYzg3NmE4MDI3OTk0MjFjMmFiZDA3NTg3ZjVlYjY2MTYwZgorCitUU1Q6IDk1NgorU0s6ICA3YTJlZmQzOTAxMjRkM2ZiZWZjNTRhNTc3MTA2ZTc0YjJkMWY1ZGQ1MDRjMDUwZDBkMzU5ZTUzYzBmNWM4NzJiCitQSzogIGVmYzMwM2Q5MjJlODhmNzBmMzhjMWEyYjkyMDY4NGVmNjYzMDM0YTFiMjNhYjlkNjliNmNlOGVkODcwNmY3ZjcKK01TRzogMjM4ZmJlOWZiMzVjNzI1YzZjMWYzMjkyNDgwOTRiYzdkYTFiMjczZWRjNzY5OWE3ZTM0NTJiNTc4OGQ4Nzg2N2RlZmM0MGEwMDU5MGU4NzU4MGQyYzAyNzVkZjVhYmNjZTBlMWFhYTE4MjkwYmY5M2I0NGU1YWQ5ZDc2MGRkMjFmMWFhY2EzODMxNzhmOWZmZjkxMzBmNzMxODdiYTlkMzFlYTM2MDRhMWNkZjM5MTFlMTQzNzdhMGNlOGI0NDE4OWFkYWE3YWFjMjNiNmNkYzdhNDI1YjdlYTc0NTUwODQ1NTcwNGY5YWQ3YTg5NTI3MThjMzk4YjQyMWI2ZTA5Y2I3OGNiNTJhMTgxNGVlMmU5NjM5ZWM2OGQzNjFmMGEzMjA0MWQ2ZTc0MjViNGJiMzNjNzAxOTZlMjQwMGViODEyZGI4NTA2YzlmMzI0NWJkOTg4ZmJjODkxYmUyMGNiMDY5MTU1OWZjOTE2YjU3ZmY5NmM5YjE0NDg5ZTA5OTNjYjczOWEzOWRhMjQ2ZDAxYTZlYmQwNzU4MzU4MWYyNTBiZjQ4MGJjNDRiMmMzMzkxNTQyZDU5NWU0ZDM5OTQ5MDE5NWY4NDQ1ZGY2MzhmMzQ2OThmMWE5NmVkMjdiMzUzM2UzZWI2N2U4Zjg2NTg2NWZhOTU1NWVkMzRkZjExMTU3NjQxYTAwZTZkNjBjZjYyM2ZlYzFhOTJiODdhMTVkNzY1MTg1ZmQ5MDU1YWNiMzhkNzVjOTlkYjRmY2U3YjBlMzlmZGMzZjg1MWRhZjY1YzdhMzNmNDY0ODE2OTMxODM5ZmVmZThlNThkOWFiNzQyYjg2MTg3M2ZkMjI5MTg5ZTU5Y2Q0Y2U4MjM5ZmM5NTQzZjUzOWQyZDI5NjExNDI2NmVhOGM2ZmQxNTJhYzZiMzQyZTVkMWE1NTdhYjM1Y2FjNTFlMmQxMjEyZWUzMTdjNGQyNjcxNjgyOWUyNTc0NmRmMTdkMmE2MjJjMjQzZjNlY2JiNjVmNTdhYjBmNDI3MGUzZDA2NjhhOTYyNTAyMjQ1Yjk0YzA2ZGYwYzVlMzllMzUzYWE4NDJlYTA4MGNmNTAyNzA4YjFkZGEyZDAwMTgyNGRlNDU4ZDM3NzYyYWYyY2RmZDVhNmQzZjM1ZTA4YTE4ZTE0YWE3YTY0MmM1MWU0MDQ3ZTYzNzUxNzg0NmRmNjQ2ZDA3MzM2ZmIxNzI0MzRlMDg4M2UyYjc3ZDhlZDFjNTJjOWNjNjM2YTU2YTE5ZTU3YTVmMTYxYjkyZDFkY2JmYTQ5NmYzNDRhZTZkNGRmZGM5NTY5YWRlNDU3YTQ5MDkxMzYyZTVhMGNkZDgxYjM3NTMyNDNmZGFjMzBhMmQyN2VhMDI2YTVlNjAxNDQxZWNkNTUzN2E3MjAxYmRjYjdmZDU4YjI0MGQwMjI5ZmRkOWJhYmYxMTJiNTY5NDgxMjI1MGU3NjhkN2MwY2U2Y2E1NjVhZDA2YWI4Zjc4YTVjOTk1MGVlZjUzODcyNmY1NzZjNGJkMmUwNzU1YzdmOTgzOTI5MzcyYTVmZTExYzczZjllMWZhNDUzYWI1NGI1ODE3YWFkMzU5Njc1NjEyN2Q4NGUzMTE5NDUzZTg4MjViYjg0NjBkODUxZjFmN2U0YTI4MzhhMmJlNzg2YjIzMzUwNGE2OTFkYjBmYTIyYTVmNDFmZTNmZDNjOWI1MzhiMDRmNDA5ZTA5MTgwOTQ4NmIyOGFkMGRlZGE3YjM4YTQyY2VmYzQ4ZGU3ZDg2NzljMDNiZjg3NzIzODUxMTgyMGQwNzcwY2M4ZDdiNDE3MjM3NzgyM2EwYjk5MTQ5YWJiODkxOGJmYjY2ZDVhYmZjZDEwMDYwYjA1Y2I0ZjIzOWRkNDI4MWQ5MzQ4MzUwNGI3MzFlYWY1YWRkNTE1ZjFmM2MzYjUyYjRlM2JkYWY5NzZhMTdiM2M5ZWM2MWJmYzhlNzcxMTY3MTU4MDQ1MzJjZjJkYmYyMGI3YmE1ZWFkODVhZmI5NTJiZWVjMmZjY2ZmODVmZjUwNzJiYTRlZDZiNTQzOGFiMTUyMGM2ZWY0YjBiMjZmMTJlODRhZWRkNjVjZTVjN2JiZTZhY2I2NzcyZjU5M2E2YjRmODFkZGQ5ZDUwMjc0NjUwNTA0N2M4MTJhMDA2N2FmY2ViOGRjOWJmZjMwZDQwODdmOGQ1YTM3NWVjYTYwNWEwNjIyNzg0ZDhmZWEyNzhjZDFhNTI0MWFkNGIzZjFiOTE0Zjc0ZjczYmMzNmVlN2NjODJkOTZlZmRhNjNhM2I2Nzk5NzMwZjIwNjU2YzEyMzU2Yzc5MDY5YjJiZTZmOWI3N2JlMTAxOTgzMTE4ODIzZWE2NmU3YzIwOThmYmM3MmZjOWMwMzlkZmUzMGYyZGFiYTEzYzNiZGVmYjhhNzgwYmViNWNiMWI2YzI4NmE2YjNlZjQ4ZmQxNWM2NmMwNDViYTI5ZjA5NzA0MTNiOTg4ZDBlYTAwNGFiODRjOTM5MTlmMDRmOWJmOGNhZjU4YzRlYjQ3OGYzNThlZjhiNjgKK1NJRzogYzI4YjM0ODA0ODA1ZDgxZjdhZWY3ODQ5NzA2NzBlZGFhNDE3MjMyYmNjNjdkYTliNTFlOWMzZDc0ZmM0OTkxYmRlOTdhMDZiZDUzZmEwMGJiNDQwZmQ1NjE2Y2QwZGU2ZTliMGQxOWYyZjY4YmZhZjlkNGM1MTcyYzRlNTIwMGEKKworVFNUOiA5NTcKK1NLOiAgZWYzNjQ4Y2JlNzM0MDJhYjQ1MGNkNmVjMzdlNTQ1ZDBjZDJjOTk5ZWNjMWZhMzgxYTQ1YzY2MGUxODUzMzAzMgorUEs6ICA1MmExYTQ1MjczODcyNjc2NTgyY2M3NjczMzk5MjY0MTRjZDVkMDNkOTgwY2Y2MjlkZGEyZDFhMjA1ZTk4MzBhCitNU0c6IDZhOTMzNzhmODgwY2YwZmZkYjhlMDdkNjgzY2MzNTJlMmExMDMzYzQ1MGJhYTBlOGM0ZTE2MjA1ZmQwYzAyNzQzYjBlYTA2NDk3MWQ5MTFlNDk0NzEzZTZkOTRhMDIxNzJlZDAxNGQ1MDY1OTJlYzZjNzBhOWM5Nzg1NTI0NmJmM2QyNmYzY2Y3NGY0OTNjMWI2OTdhMGM0MTQxNjBjMzQxNDEyODMwOTg1NDMwODA2YTBjYjNjODQ3NWU3ZTVhOTczNjg2YzI0ZDVlZjFiZTdkMDA2NTA5NmZlYjUyZWFiMjYwYjVjNDg4YWYwOTI3MGRlNmRlY2QzM2ZlYTg1ODlkZDEwMjFiYWY0MWUzZjI1NWZiOGZhMTkxNmViZDg1MzFlZWIyZjg4NmJiM2IzYjA0ZjlhZjZiMjc2YzM1OTIzZjEwZDNhMGFmMWUzZjU4YjBkMTVhZWQxNjUwNDVmMjA2ZjNmNDMwYWJkZmYwOTQ0OTA5N2U0YjI2ZDAwYThmOWYxZThmN2ExOWYzODU4ODEyNGMzMjhlYzQzYTljZmI0M2QzYjJjNmJkZjZhM2MxYTEwMmUwZTMzM2RlMWFjMjE0YTZkZjc2ZGFiNDRiYTc2YmYwMzUyNzNiN2ZmNjIzOGVjODI0ODNiMmQyZDlkNTQyOTFhNzIyNzBmODg5MzNiNzg2Y2FjMDUxZDk5MGIzY2Y3NDA4NDVmZWQzYTY3ODY3ZDdjN2MwNTY3NGU3Y2IwMmNhNWI3YWNkZmJhMzg1MjgwM2EzZDU2YzRkNWMxM2JiMWQ3NzIzNDY3NzQxZWFjMWYyYTdhY2QzYTk1ZjNhNTE2MTBhNDg2ZmM1M2E5ODUxNjI4YzU1N2QzNmQ4YTRjZDM3YWFlOWM0MTc0ZGJiZGI2YmQ4ODVjZjQwYjM4MmI4ZGVkMjRhNDUyMmEyNzhmZWY3NmM0NTMxOTA2N2U1NTI4NmU3YjA4YzYwMzQ4NmUzOGEwYWNmNDdlZGVmODQ4ZWNiZTk0MmVjZWFkYjg2MzZjODMzZmViODgyYTUxYTQ1OTVlMjRmNjA3Y2EzYzlkYTFiMjQwNGNlNWM3NDdlMDYyNjQxNzRkNjQ1MDQzMzE3MDliZWYzMDA1NWE1ZDY5NWUwOTUzN2M4ZjhjMWU1YTNhNWRiMDY1OTllMzE5ZGZkYjI4NzI5NjY1MjczYmY4Njg5NTVlYTU2NDI3ZjA4YmFjZDc3N2YxNzliMzAyZjNmNjhkMDRmM2YzODgzZDM0NDk1NWI2NTVkZGM2ZDUyODJiNmQ0ZGYxZDgzNjMwMjEwZTY5OTE3OGUxMWY3MjJlOWU1Y2RhNjcyODkyYWU5YjIzZTgxNjljYmI1NDgwOTNiODNlNjQzZWI0OTlkOTM3ZDI4ZjM4MTE1OTdiNjQ4NDEwMmYwYzhlYjhjODg4OGNkYWMyMjlhZWJmODkwODZhNjQ5NWFjNTUxZjNiYmRmMmQxYzlhOTNlZDFkM2E4NjFlZWNkOWViODM5OTQ5YmZiZTZhNGY2ZTY0ODZlZGVkYWI1MjI5ZDUzMmI1ODk3NmQ2NzUxMmY5ZjcxYWU3OWI0MTQ1Y2EyZmE0OTdhMTY1ZjExMDcxNzY2NmNhMzM0MGJiZGE4ZGYxZjgyYjhjMDU0Y2Y3NjU0YzM1NjkwMTY4Zjk2Mjc3ZDQxYzFjMjM2YjY4MTk4MTczYzZlMmIwYTIwOGVmODNjMDJhNDNlNDczZDkwNjg2YWNlNzViNWJkMzIxYjNmNTQyODEzMjdhNjczY2FkNGQ0YWQzMDQwZDQ4Y2Y0OTNlYTIzMWIzZmVjMDZmMzk5MzJkN2Y3MGEzODQyOGRmOGZlZTQzNzA1MzJhZTVmYjExMjA1OWYwYTFkNGZiZTExYjVhMjNiYjg3NjM1NDI5ZWQzM2FkMWY2MTQ4MDE0Y2JjMTYwZDkzY2EyNTkyMDUzYTZlOTUzNzhkNmNkM2Y1MGRiNTJiZTkyOGU0MDkyZmU1ZDJiNzA5NWE5NTY2ODY0YWRmZGE1OWZkNWYyZmI2MjU0YmQ1OTE3YjcwZmExNDY5OTY2NWEzNzI5N2M5ODNjMWJiOWVmZTFjNjdiNDEzZGQxYTg1MzBjYmYyMjcyOTdhOGJiZjkzYThhMDI0NTRlOGU0NjFhYzIxMmI4NDZhNzBkNWQ1NmQ2YzNhNmU2NWEwM2JlMDU4MDIxOWJkZGVjODhkNDAzODkxMWZkOTU3NDU2M2YzM2UwZjllNjA0NDY4OGQzZGQ0OGZhYzcwMzg2OWFhMDlkOTZlZmVlN2Q2YzY4MDcxZDk5MjJkNWU4ZWQ4ZGM0MGYxYjc5OGYxYzU4MGY3ODU5Y2I4NGYxZTE0YjVlNzRkZGVhMTZhZDVjYmVlYTRjNDhmYmNmZmQyOTUzMWFjY2MwNjMzOTM4ZTNiY2IyMjEyNjc2YjYxZWY5MDFlOWM4MzFhNDE3NzRkODMxN2VmMzVhZjc2OTkwYmQyNDkzMWZkZTZkNDA3ZTIyZTc2M2NmNmE1NzkwYjIzNzYxOTA4ZWVlNjA5NjM3YTJjMTEwNTkKK1NJRzogZjY3MDc5Mjk0MmVjNDE0NDI4NDc1NjM4ODUzYzQyNzI4ZTg2YmExMmJiZTg1OTQ4YjM5MTM0Y2Y2ZTJiZDEyODEzZTBkODNlNTFlNjU3YzkwMTA3YWQ5M2E0Nzg4YWEzODMxM2ZhOTYyZjY3NjdhOGY3ODA1YmRlNjVjYTQyMGQKKworVFNUOiA5NTgKK1NLOiAgMmM4ZWU3ZmE5YmEyOGNlNzA0OTY3NjA4N2IxMTYzYjI0MTExOGQzNGNkZjUzNGFlYmU4YmE1OTI4MmE2MmFjMgorUEs6ICAyNDRjMjRmNWVjYjJkZDFkMTQ2MzUxMjIyMTMyNWQ3M2M4MWVlNGQ4YWRiOGUwMWUyMzM0NWNhZjljYTUzNTNiCitNU0c6IDA3NjY5YTg5NjRmMDYzODBkMmQ0OTgyY2I2MzQ5ZGU1NTBiMzhjYmMzNWRiMmNlNTcyZGU4ODdmNjYzMDU1NzM2ZmFhYzdlYzA3YzMyZGY2MGVlMjU5ODQyMmJmMzdlN2NmMzE5YWIzYzkwNTU2MDhjYTBjNDk3NTdkNzY4OGUyMDEzYjgyNDRmMzU0MDRmNDVhYzIxOTQ5N2ZlOTI0ZGU5M2E1OGQwZjcyMWFlZDc4MjVmNjNiMjY2NzA3N2MxNjFlYjRkZDhiZjdkZGJkYmJjMTlhOWVhZTU5Nzg5NzhkNWFlYjMzYTA2ZGRlMThlNjEyZTA1YmRiY2FlMDE2MWFhMjM4OTAzODAyNjQyOTk2MGRkYTNhYTE3ZTk2N2QxMDc3M2NhNDk3MzVkOGVjZDc0MDliZTE2NWMwOWJiMGI1MDk2OTFkNTkxYzE4NWM5M2NkZWVhZTk1MzUyMzE2NTQ0NjgwNTIzODIxNDU4Y2FjY2Y1MjhhYzA0NTRlNGNkZGM2ZGYwZDFlYTVmMWY1Y2MxZWVlZTA1ZTE5YTJhZDBiNmE0OTczNmVkODU1MjMzNmZjZmNhZGJkOTMxYjBiOGU5NjNiZTA1YzhlNzAzNzM4ODU1MjUxMmI2ODIzNTgzZTRhMTQzODRjZWY1MDI5MjMyZDNlMGJhZmU0NjYzNTFiNGJiM2Y1Njc1NDVhYjQxZmE0NmJmZmFmYTg3N2ExMmIzOGEyN2FiZDY0Zjc3ZmJiNGRiNDY2ZmY3ZjcwNjUwNDE0MWQzYWRkMGQ3MzcyZjE2ZmUzZDhjNjlmNjI5OWQ5Mzk2NmQ2MjRhMzA3MGVhZGI4YjQ5ZjI5ZmFiNDg0NGM3NTI4YTJhNDBiNjY5ODcwNjA2OTVjYWE2NmI4NjcxOGM1MTA0OWFjZjRjZmFkMzg1M2VkYjQ5MmUzNjhjYmQwNzM5NjhlY2FhNGExZWU2MDQ2YjVlODI2ZTkwMWY0YTgwOGMwNDI3YzAyNmZlMmY3YjJlMTk2ODY2N2I1M2E3ZDM2ZDcwMmYyZmY4MmM2NDJkMzQ5MTlmOGU5YWFhZmU0NjJhM2Q0ZjkyNjkyZGVhYzc1MmJlMzQ4ZjU0Y2YwODlkZDljZDA1MTg0NmIwNGI3MTkzMWUxOWU4OWQxMjU4NjRiZmE4OTQ4YWNlMGVmZjMzYzQ1MTEwNTY5YTBkZjM3NTNmNGM1OGQ4MDAyYjViYzM4MTAyZWMyZWNmNjk1ZmFmYTg5MTZkYTkwMDIzODdlNDRmOTZkYWJmOGE5ODJjNTNjOWJhZGJjMzdiZGU0MzdmMTQ2Zjc3ZDhmN2JhZjEyODczMTk2YjBjMzYxOTNhZjU1ZjU0MmQ5OTY4YWVkODA2OWFiOWZiY2Q2ODE0ZWM0NzI3OTlhZDA5YzczMGQ0MWVkZGVjYTNiNjI2OWQzMWFiNTIzYjU5NTQ3MDc3Mzc2MzQ1YjA1ZjJhZTY5YjRlZTcyOGM4NjNkMWJjMDRlOWI3ZDNkMGZjY2ViMzU5Y2JkMDg1ODU5N2FmMmQ2MDYzZTI1M2ZhZTJjM2YyNTAzNGMzM2VkNTllZGQyNzgyODY4Mjk4NjgxY2FmNTY0ZGI4ZDE5MzY2ZjM0ZWFlODViYTczYzFlMjM4OWIwZGQ3OGE5ZDJjYWEwZjIzYzlhZDVmNmNkOWYyYzRhZDVkNTg5NDZhZGI3MThjYjgzZGE1OGUyZmNiYjYwMjViZWY0NjYwYTgzZTBhZjU1ZTIwMzA4MDI5MzJmMmE4OTZhMDk2MDc5Yjc1NGM5OWY3YjY0MjNiNDVhODY0NzJlNjcyM2VmODg5NmM0MzI0YzczZDM0YWQ1OGE0YzAxYjM4YTk3YzczYmU1YWE3Zjc0YTJmYTRkMDc5NWFmNmRiZmNkNmQ0ZWI0NDJhN2UyMDRkYjRlY2IxZjhhMjI2YmRmYTIxYjZlYjE3MWM5ZTU5ZjFhMTkyZTIzYTc2YzM1MmIwNGQ4YTgwMjMzOTg1Yjc3YTI5YzAyMDExOWNlNjUxYzdmNDE4M2QwZTljMTlmZTE4YWExMDIwYzI1ZTQ1ODlkZWUzNGI5MDFiZGFmOWZmOTQ1MGM5MWFmM2MxZGI2NzBiNDc3ZTBhYzIxMDc2OTZjOWVjMGQzMWQ4MjY0N2I2OGVhMTk0OTlmZTM0YThlMmU3YjM3OGRjN2U3NTQyNGU4YzQ1NjQ1YjBjMjgxOGU5Zjg4NWExYzU4NDE1YmJhMWMzZjJhNzc1NDliZGM0NjgwZGJjZDE2NTBjNzVkMGY0NTJhNmIyMDg1OTFkZjBmYTZlMTgxZGEyYWJmYWI0NDQ2MjFkNWY3N2MyY2Q3OTU1NjQ2NzI0NjQ0N2E4OWYwYWFhY2FkNjYwYzlhOTI1ZWJhZmJhZDQzYzQ3OGEzYzg1MGEyN2UwMTAxOWQ4OGE1YjFkYzgxYjVkMmU5Zjc0MGEwMjhjY2I3MmMxYWNmODk3ZWE1YWQ4OWUwZjk0NDg4ODhkNWIxNWNlNmU0Mjk3N2Y3YTcyOTE1NWEyODRkMTE4NzU4YWM2NWYzZmJiOThkZWI2NQorU0lHOiBjYTBiYjZjMTIzNTY1NTVmNmUxZDhmNWM4YWE3YjVlODBjZDI4MGU4YjFiOWJhMmVjOTU1MGY2MjJmNDgyYzNhOWFkM2JlMDNhNGM5ZGZjMTBkMDExMmIwMTg5ZGU5NGJmZmFmZDcwMzQxMTRlMGUwZDQyYzIzZjMyZGM4MTgwNworCitUU1Q6IDk1OQorU0s6ICBkZGQ4ZTlmZjg1NTY3OTg5NmExMzk3YjQyN2RiODU0M2FiZThiYjVkZDEyMmUzZTMwMmNjZmNlNWZkYzYzZTEyCitQSzogIDVhOWEzMTJlODkyYTEwYjk4ZDBkY2RkMjhkYjM0ODFjM2MyOGFkZDVhZDBiMTk0NjE2ZGE0YTNkZjc2NjAxMDkKK01TRzogNWU4ZmVlYzUwOTM1MGQyZWU3OTU1YjZmM2UyNzgyNzhhNGNiNDhhZTcyYjQ2NTg5ZTQ3OGJlNTk3NDdkZjUzOTRhMTY5ZjE5ZTEwZGI1MzIwMmE2YTUyMzIwYjYzYTlhMmI3MjNmZDMxYWEyZGI2ZDU4YzU3MzMyZGEzMTc4YmNmOTY2YzUzYWJkYTM1ZjEyZGFlZjllZGNmMzk5ZTRhOGM1ZjgzZDM2ZjQ0YTE3ZDc5ODQ2YmZjOTZjZTY5MDE5NGMyMTlhMjk4OTJmMDM2N2E3YWIzODQ0ODM3ODc5ZTM4MThkYjhkNzBjNGUzZmJhNGQyODA3MzQ2NGRmMjA4NTk1MTAzOGZlYTQzMjgxYjZiNjA2ZGM4ODQ2YjMwYjA3NjNmMmNhODJiZDUwMjFmOTExNzAzNWE3N2JjZDEwNzU0NzdjNWY0MzIxNDMzNGQ0ZDRjZWRkMThmNzM4ZDY3NmM3YjUxYTE4NWZmYThkMDQxMDExODZhNDk1MmJiZDg3MjJmNTM5OTBiNjA2MzcwNDFlMTE0YWViOGNlNzExMTEzMWQ0ZGIzZmI0ZDM1ZDk5NWFkOGQ2NjUwYzBjNGNjZGNlOWRjYzM5ZGIxODhhNjg3ODU1NjI3NDA2MjZiM2FlM2UwMjNmNDA3NzJkZWQ4NzZhNDVjYmVmNzRhMDU4ZmQ3OGMxYTFmZjJjMjQ1MWUxMTFhYzFiNGI3ZWU0YzgxY2Q3NjMxMGQ0ZDI5OGZiM2M0OWY1ZTY0MDE5MDhhNjMwZmE4NWRiNzQ3MTgwNGZlOTkwODQ3ZjBmNzU5NDcyZjU5M2RjZjAyZTExM2UxNWU1NjRkMzBkNTk4NDY5MmRhNTViMGI3ZjIyMTljNGFjMTYyNjUxMWFjZjE5NGRjNzAyNmViOWQzNjdhNGEyZjFkZmI1MTVjYjJjMDhkYTRmZTU5NWM4NTgxMTEyMGNiYTJhZTdiNjZlNjdjOTFmYjhmYmNiOWQ5OWYxM2U1MGZkNjc0NjRkOTBjOGRjZjY5MzU1MjNjZjZkMTNmZGQxMDYzNWI5MjMyYjdhNjFkY2VjOWEyYjkyMTA2MTQxMGRmMWRlNmE0NTE2N2ZiOWY2ZjEwOWRjYzA4ODkxZjIwM2IyNzRhM2I2ODI3MWIzZjM1ZTc0Zjk0YmRjZWQwYzVmZjg2MzcxNzNhMTc2ZTdkYWNjODFmMmNkYzRmYjBkNTJkMWRmYTdmMjdiNTUyZmQ4ZDg3YTFjNTVkNjk0N2ZkOTJlZDMyNTNmOTU5NGRiN2RmMTdhN2ZjNmE3NWVjZjRmYWE0ZDFlMjFiNjc2YjM3MjdkNzdmYmQ0M2ZhN2JlNzZiZmI1OGZjMzA5ZTU2NzVmMGE4NTljYzQ3ZjM3YjFiZjQ1NTkzMmQ4MjRlODYzNzhkZTdhN2U4YzQwY2VkMjIwOTAwNDRkYmJmOTFjNzBlNTI4ZWFjZGVmMzc4NWJhM2M2OWEzNzM1YWY2NzA5Y2Q3NmFhYjI4YTZhY2E2ZTg0NDk3NGIxMGIzZmI3YjA5ODYwMDdhNzI3YzJjOGZjOTViMjVmMzFmMTQ2YjM2YWNkNGM1MzcwNzQ5MjBhZmYyNDdkZTBmMTc5YzEzY2E1Nzc5MGE2YTcxZDYyZTIzMzIxY2NjNzViN2YzYjBhZmEwZDAzNTI3YzkxMTRhN2Q0ZTMwYzFhY2U2ZDc3MTIwMTNkZWU2NjY5OWFmOWM1NjFjNDRhZTYxOThlZDM5MTA0ZTYwNjFhZTJjNDVhOWEzYzc0YjVkMGZiYzRhMzNlOGRmZTJhOGFjYzk1MTFlZjdlNjU2NzEzM2Y5ZmUzNTU0Mjg0YTc1YTA1OWE2NDlkZDI0ZWMwNGE1NzczMGM2ZDJlOWJmMTE0ZWE1OGE4OTk0YWJkYjBjMTk0MzI0MTU3MmM3OWVhZDA0M2FkMWM4Y2FhZjVjOWRhNTNkZDA1NTIyZmViYzQwMzM1NGQ2MmZlM2ZmOTM4ODJkZjc1ZmIyOTQ1OGQyMmU2OTk2YzM1YjY5ZmFhZWYyZTBjNDE2Mzg4NmNiM2MzZDBmNjBlMTUwZDM2M2Q2ZGI1OWZlZmM2MjZiMWJiYjFlMDUyYTYyNDE0YzRiNzg1NmQ3MjA5MzQzMmIwOGY4MjFiYzc4NGE1YTZiMGJjMjY0OWMyZGFhNTA4NjU4OTgwZDgwMjI5MWU3MzRhYmFmZjA2YWZiZjI3OTVlNGUzNTRkNTIyMWRjNGY1MmNjOTZkNmI4Y2YxODA4YjFhODIwOGRiN2RhYTgwYWI3MTBjNTZhOGIwZTljYjgwODFkZWU5M2Y1ZjAxNWYwNzY2NDQ2M2EzZGNjZmY3YzhhZDE5OTIzYTk3ZTM5MDQ1YmNjNGRjZTBhNzNkNDljNTZkNWU5MzdiZDExZTYxODIzNDAxYzA2NjIwNmUzMTNlNjBiNDc1MzdlMzQ3MDRkN2QzNTE1NTU5YmI5ZDA1MzJkMDI4ZTI4YTU3YTg3OWZkNjE3Y2M2MWY3Zjc3NmJkNmEwMDhjZDRmODEyMzc4ZWQzN2YzOTRiYjk3ZTZlNzU2ZGE4MTkKK1NJRzogZGY4NDliN2JkMjk3NDVmOGJlY2RkZGY2YzliYWYwOTRkN2E5OGNjOTMzOGMzNDRlY2ExN2ZkZTA3NWZkYThkMTU0MzI5OWY2MjU5ODIzMTdkYjdiM2M3NzNiNjRmN2QxZjI4NjkyYWM0NTNiODFkN2VjN2I3ZWMzNDE3YWNlMDQKKworVFNUOiA5NjAKK1NLOiAgYTg4NmY0ZDNmMzRlMzIwZWM2ZDVmNGNhYTg2M2Y4MTQ3N2RmNzcyZWZmOTdlNjRhMzdhMDVmNDIxMWQxOTBhOAorUEs6ICBlOWJjOTZjODFlODc4MTEwMjY4YjU1ZGVmN2VhNDAwN2E0ZWY5ZjU0ZDM4M2Q1ZmIwZjZkNDM0M2UxMDEwZjM4CitNU0c6IDhiODMxYjg3N2JjM2E5OWY2MTNjODljZGE2OThiMzc1OWQ2NDM4MjJiNWE4OGZhZjM4MjJlY2IyY2U5OGY2NzFkNzU1NDMyMWIyNGI3NGI0ZTMwYTY2M2Y3YTU1NzBhZTkxN2Y0NzliZGEyOTg5NGIxYThjMDI4YzlkMTkzZTRlN2FjMTE5MTZkZDhlOWMzZjBlYzBlZjgwYmQyN2ZkZmVlZTgwYzE3MGM3ODE0MGIyNGMxNTI3MTQxNWFjZjc1YzI2OTU2YTRkNGJmOTlkNDBlODYxZTkwNzgzMjBkMDk3ZTEyNTllNWVjMTdiNTgzYTk1ZTUyNDMwZGQ4YzAwOGVkOGM3ZGQxZGUxYmVjZGQxZTZiZmVjNGJmMzM0N2EyMmRkMjQ5ZjNhYzMwN2EyOTQ1ZTkxMzdmYTRhOGMyNmM4MDIxMDc3MjM5Y2IzMjQ4MTZhOGRhZDMyYjAxZWUzNGEwODkwMzA5OGNiOWM0MjQ1MjkxYjkwM2M5NjI3MDc0MDk1MjQ5ZTc4MjgxMzQ3NzAzMmJhMzJlZjA0MWEwNzQ4NmViNDQ3OGM1N2I5ZDUzMjI2OWE0YTQ3Y2I1ZTk3NGRmN2UwMTA5NmZiZTRmMWNjZDRlNjYzNjYzNDg3OTc0YzYyY2RkOTRkNzc3MTZjODQ3OWQ3OWY2YjZhN2Q5YzE1NTk4OGNmMzkwMmZiNjk3NDI0OTYzZWM0ZWMzNGZmMmEzNWQ3NDJjNDQ1NWE1OTNiYWNmZmM0ZDk2OTliYTc2MjZjNzZjYjFhNjE2MjUzNzUxODg3ZjZmZmUyYmUyMDhjNzEzZGYxYWI2MzZkNzIyZWEwNmMxYzAzYTU3ZjJjZWMwODAzODY2Y2NhMzMzNWMyOGJmNDFjN2RlZjgxYWNiMzg4NThkYzEwZTU5NDY3MjA4NjI0OTY3ZTJlMjJkOWU1NjYxYmI5NDVmOWUwNTE3Njg3ZGM4MGY5YjhmZGVjYzhhOTc2MDBiNmMyMTlhM2IyM2E5MGI2ZDE4YWFhY2UyYzc4NDAwZmYzOGM4YzA1OTY3ZjU0NGI2YTYwNmM3MWFjMTk5ZWFmZDA3ZWI1ODQ4ZGYxNjU3ZWZiMjMzZmJhYmFlNjNhMDU2MzgxOTFhMGFmNzQ4NGExYmFlMTU4MTM3NTY3MmM1NzFlMjY0ZjYwNDIyNTE3M2E1NGEzOGRkNjJhZTcxMzBkMDVkZDI5MWFkMTIzNTRkZTg2YTZlMTEzZTgzZjZkNjY4NTE2MTU3Yjc5NjcwMjBkYzY1MTdkOGNmNDJkZDdiMWE4OTdmZTFiNGUwNDU1M2NlMjZlMjk5OTgwYWE1ZjdjZTAxNzliZjQ5NTRmMDFjMmEyMzY1NGU1ZTk3MzFlMTQ0NzM0N2ZhNDNhYThiMmNiZDZkNGIyZGY5M2ZhNTRhZjcxZTUwMjhhNmRhOGM3MWVmM2M1MGMwZGUyNGRjYWVlNzg1Njc4ZTkyYWFmYWJlYjIzM2IwMTFmNDVjMTA2NDk2NTA4NWQyNTQ3MDUwZjIxYzY1MmFhNTMzYWZlOTE4YWEwZjliZGFhMjYwN2I4NzNjY2QzZGJkMWQzYThjYzYyMTcyY2ViNDNiOTIxZWY2YjI1YzA2YjA5OTJlNGRmMmI5MWUzNzFiMGVmMmIzOTQ3Mzg4ZGFlYzhlYzZmN2UzODY3ZDFmNjEwNzJhZjU5MDE1NGZhNjE5YTA3Zjg3ZTAyYmRkYzc0MDYzMTQyNzBhZjFjMTVlOGVlODhiMzljMDFiZTYwMmU0ZjBiNTJkOWEwNzI0ZTcxZWRkZDdmYTkxMzQxNjljNWZhYWI5MTU5NzllZWE5MzYyZDBmMWY5MTYwMjY4MTYyZGQzOGRiMDJmY2ZiNDEzNTBhYTA4ZTFlMTQwOWIyMjg4ZGIxZmU0YTBlNTg2YjU5MTBmNGRlODk0YmY5OTc0ZjZhNDk4MzAxM2ExOTBlN2E3MzZkMTRlYzU0YzM2NDRhM2VlOTU4YTViZGZiY2I2Mjk3YWJhNDNhZjZjNzI3NDZiYjEzNTQxMDUwN2Q4ZmRkZTczYTJhNDhiNzQ2ZjkxOGJlZjllZDkyYzViZTYyZGQ1NTIzZmUxNGIxNmQ2Mzg0Y2E0NmVmNTliMjE4NWZlOTMzMzgzYTJjN2E5YmYwMmRhOWQwZmQ4YjBjN2Q3YmRlNmI0MzlmOTk2MDE1NWUzNDVkNjg1ZDRkYzNjNzE0MDRkNjU2ODExOTIzYWEzYzQ3ZDRiMDlhMGJhZWYwYTEyZTc1YjY0MzliYTgxMzVkYjE1ODY1ODc0MjIyY2Q3YWE0MjhmNWNhNWNlNTE0MGUyMmZmOTI2OTdmMzdmYzcwYjViNGM5NGQzMzE0ZTZhYTE2YjIxNDZiY2E0ZmM5NDE1Nzk1MWZjNDkyNDVkYTUzZjZjNDNkMWJlYmQ4OTRlMzFhMTM0OTg4NGQ3MTFiNTVkYmU3NzhmZmE3MjcxNjVjZjdjYjY3NjQzNTg2NmMyZDJjYjgzOTc0NWNhNDAxNjZhMmY3Y2ZjNzdhODQyNDY4YjUxYThlNzY1NzVmYzlkZGZiNWYKK1NJRzogYWJmMjgzZGIxZjgwYzU0YzU4M2I0OTlkYmUyMGFhMDQyNDhjMWRjZTEyMWYzOTExNjc3ODEzYWMzZTAxMWZkMTU5YWQwYmY3NmIxYWE3Y2M3YjE0ZDdiNTUwODQ4Njg4MjUyYWNjN2ZlY2U5MDQ4NzI0MGMzZDM5OWRkMzQzMDgKKworVFNUOiA5NjEKK1NLOiAgNDk3ZTNlYmQ5ZTRjYWE4MWM1YTg5NzNkNTJmMWQyM2Y2MGMxMzRjYTUzZjYyYTg1M2EwYWMwNDNlNTFjYjUxNworUEs6ICA3MWMwY2E3Y2ZhMDVjYWZhYmIxNDNkODRhZTQxZGU4Mzg0NmY0MmM3N2NhYTdhOTFhMmUzNDgzOTdkMDdkNTJmCitNU0c6IGUxMzJmOWQ2N2IxNzI5Mzg5YjgyOGE5ZmFlMDVhNjdhYTU3ZjBlZjdlN2Q0ZDFiYTI0NGRlYzg3MDRkYjk2OTU2NWQxY2FiODA5ZTQ4ZmMwYWJmOTUwYmNkNGEzN2Q5N2FlYWNlNmRhNTQ2ZDQ5MTRjYjViODZkNmFiMTgxZDgzMTg3MGMzMDliY2E2MTY0NjhmMmEzNGQzZGZhZmNkYmI3NTgwYjBjNWQ5ZmY5OGUyYzU0ZWM4MDNiZTBkM2ZkYTFkNGI4YzBkNzcwOWM4OWU2ODBiMDA4YmY5YjhkOTAzYjVlOTM0YjAxOTcwNWZlMGIwYzhjZmJjM2MwOTY3ODQzYjBhMWZhMWIzZjE2Mjc3NmViZTk2Yjc0MGVkZDY0YWQ3YzM1YjNmZDFhMDg1Yzk5ZDE2ZjU0MTY3ODJkZTE3MzU4NTg3NDcwZGQxM2I1MTk0ZjIwZjIzMjMyYjJmNzAyZjEwYWFmY2FhNTljNzA2NmYyNGM0YzQ3MWU0MmZhODZjNmI5YzVjM2UxZThmODM2NWY0ZGQ3NWFjYjMyZmZmYzA1M2M5YWY0MWM2ZmQyZWZhYzMwZWNmNmEyZGQwMDg1ZGU5YjFkOGNkYzUwYjE2NjBhODY2ZGY3NzY3MTk4YmQ5Yzg3MzcwNjE1ZDJiY2E5OWY3N2I4NGQ5OGQ3YjI0YzljMjBmZDc3NjhmZDAzODBkNmIzNzM2MDM0MGQxMzU5ODA0NzgyMGRjZWQ4OGE4ZDQyZDU3MjkzN2I2ZWZhMTY5MjFhMWIyYjJkMGViOTMxNjczMDcwODM4ZTYxMWU2YzAyMzI5MGQ4NmZlOTAyZjE0YWMzYWNkMDI5ZTMzOTdmZWI5N2IxNzE2NjI0NWFiNDA3YTc2NmQyZTA5MDQ0MjRkMzNjZDNkNmUyZTYyYTUyYzY1ZGY3Y2YwMDRkMTQxNWMwYjQzMGMxMTI3NjIzZGFiMjcyYTJjMmUyYjQzZTAyYjQ4MWJlOTI4ZTg5OTU0MjcyODMyYmUwOThiNTAyYjhiNTY0M2M2NzQ4MmY1ZGU0NDAzMDMyNTgxZjA4YWZiMGFlYTQ4ODY4NTgyNjA3YmIzOTE5OGMxYmYxM2E4NjliNjMyNThhNzU4OTBiNjk0NDVmZmQzNDU2NDAyM2U0N2Y4YjE4ODRhNWU0OWI3ZDk0MjVmMjhkNTE1MzAxM2ZlMzc1NWM2Y2IxMTRkYjE4MGU2MGIzZGM0YWRiMzZhMjE0MjgxMjgwMDVhNzcyZmI1NzE4OTM0NTU2NWJiZDE3NTk4MTM1MjNiYWQ2Mjg1NWU3OTI4ZWVmNTg4MGQzYmZmZjFkMGVjNjVjMjQ1OTIzMzVjZGE0N2NmY2M1YjVmYTY1MmI0NzI2MzIyNTIyNDg0NmEyMDlhM2RkNzc2NjY2MWZjYTRjY2NhNTljNDU2ZmM5Y2MzZTFjZjgwNDI1NWFhNWYzOTdiYWIxOTk4MDQzMzZiZGUyOWU1NWM2YzM3N2Q1ODNmMDgyY2U2NDcyMzczOWU0ZjAyNDYwNmY5MDZjMTEwZDBhNWI2MTBlNWZlZDk2ZGFiNWYwOGY0Y2IzY2ZjNDBhMzU1NTdlMWE3NDBiOGM3YzAxZjdkMzI3OWRkOWM0ZTg3NjRjOTBiYzE0ZjQxNjFkYjVhMzdmMDk4OWI3YmQ4MDM1ZjhiZWEzOTRlYTFkNjAwMmNlOWMzNGYxZTljNTJjNmExNWQxNWJjNWIyNWM2YzE1YWIwMGRmZDZhNWIxYmM5MTdhZjBiMWIwNWZkMTBkMDYxYjM2ODNkNzViNWY5ZWZmYjIyYWU3MjA4NWJlNGY2Nzk3YjU4Y2IwY2FiNTYxODQ0MTIxZjk4YmZkOTU4M2UwYmNjYjcwZmFkNzY5ODBhN2E3M2IyM2M3MGIzZmQwMmY3NzU3YzExYTNjMjFkMTllMDU2NTBmZmI4MmI5ZTBkZjhhNjczNWQ0ODAxNTZmNDc5NDlkNDQ1ODUxYmFlYWE1ZWUyMzgxNGE0MWIyNTIzNGZiOTJjYzBkZjE5ODBkMDIzZDUxYjVjZjRjMzExODVjMTE4ZTNlZTNjMGMwYTQ2ZTBhMmJlNmYxZDNhZTQ1MmNiYjY2ZjBmZDkxOTcxMzQyZGE3YjFiOTk2NTg5ZDk0MDk2NzgxNTUyMTk1YzQzM2NhZjE5YzM3ZjlmMTRmYTBhZTE1YWUwYjAyYjkzOWU0MDIwMzRmZjgxODg1OTM5ZDk0NGU2MDRmNDc0ZjIxNTI0Mzg5MzkwZmRhZGEwNmUzMGQ2OTA2OGM4ODQ4Y2YwYTk1MWVhYjI1YzQ5MTI1NjI5NDRmNDAyNDY4MTg3YTIzMjM5ZDMzNjMyZjI5MTIzZDQ5YjdkZTEzMDgzMzk4ZGJhOTdkZWRlMTJmNzk1OWI5NTI0N2EwOGZjOGU0YjUzOTlkMWMwMzVjMDg5NGNjNzVhZTk4MWMyZGQ0OTM1NDEzYmJlYjY4NTNmZTA0NjU1Yzc3ZDE1OGMxMjM3YjNlMGRlY2E1NjM2ZDY5ZTBkYmM1YWNhZjcyYjYwYzEwYmI5OGNjZGQ2MDA5OGEwMworU0lHOiAxMjc0MDgzOWIzYzlmMWJhODc5ODk2ZGZmNmQ3MjVlODRlMDQ0M2VmOTZjMzQ5ZWZmOTRkYzQ4MzMxNDNlNWI0MTk4MDRkYTlkYjExOGE5NTkyYjFiMWNhNDhhZjE4Zjc1YmVmMWNhNDY4YTFhNWM3NGM3YWM4MTNiYjJjZjMwNgorCitUU1Q6IDk2MgorU0s6ICA4NWI0ZDc2NDE2OTEyODYyNmZkOWM3ODJhZDYxMTYyMjllZGQ3NzYzMWMyYmM5YjhlZTU0YjM2NTQyYzE0OWViCitQSzogIDZhMDk4OTdlNjI5YmI0MzcwNGRlYmI2NzE1YzlkZWE1ZDg5MmI2MzQzMDY0NDA5OTdjM2M5ZTk0YmU4YWI1NDcKK01TRzogYjJhMDQ5M2Q0NzFjMzM5MWY3YWRkMWUyY2YwYmZiMzJhYjA1ZGJjYjE0ZjZlNGY1ZjM0NjNhYThkOTk1NTJmNDMzMDIyMDQ2ZDJmOGViNzYzYzAxNzFmY2IxZTc0YTA0OWZmZWI0YjhmMDEwMGI4MjEwZmNlODU2YjJlMWE4ZTczOWQyZjkzNjczZWY4ZjhmNDA0OThiMzA4MWZhMWZkNzg1MTk4YzZkMzcwZTE2MmQ0MWFiZTgzMTg2ZjIzMjk3ODM0MDhiOWI4ODBkMDBmODFkNTMxMDBiNDJkMjdhMjYxZjIwY2RlZWQxOWNjNThjYjg2MzEyODFkODBkYjE5MjUzMTBlMjM1ZTQ0OTY2MzA5Yjg3OWJkZmMyMzIyMjE0MzNiYWU1Y2FlNDY2OTBjYjUyN2I2Nzc5ZTExZjFiZDJhNTZiNTljNTZlZDRkOTRmZGY3YWE4OWRmYTliZjIwZGJmYTZhNDM5OGI5ODM4NDUxN2UxZGQ1ZDJjZDljZTUyNGE0NzM2MmVmMzJhYzc5Mjc0MmExMjljOWUwNjEzMDg3NmFiNWFkNTUxOGVhYmM1ZTgwYjAyMmQ4ZmExM2U1MGQ1NWRlZDU4OTUzM2U2ZWEzMjI0MmMxYjNmZDdlNjVmODBkZWU3MjBiNmQ4N2RjZmYzZTNkZjA0YzgwMmQyZTkxNGE4N2EzNjI5YzkwYmI2OWUwYTZmOGJiYjVlZTUwNWYxNDNjOTk3NzM3NWFkYjA2NWMzZTNkMzkxZjkwNWZhM2MzMzZjOWRhNDFlNGEyMzIwYmNmNDYwOTc2ZmM3ZWIxZmI2YzZhM2MzOTVkYmQxZDI4YTFiMDljZGI5YWU5ZjlhYWVlNGQ5YzU2NmEyYWM0MGFkZDg3MDQ3OWZhZjU0YWQxYjc2OTc3MTBiNGViNmY3MzIwMjQ0YjU5NzU3ZDFlYWMzZDkyMmI3YTczMGIxYWNmMGRlOWE0NWQ0YWM4NzlkMjFmYzYxNmVmMzk2NWQ3NDM0NWVkNzA3NzllYjY4MzI4MGNlZTI1YmYzNzM5YmViNmI0Y2RmYTI1ZDIwMmRhMTNhNGE2NzMwNDBkOTcwNDg2NThiOTIwNTQ3OTUwNWQwYmVlNDg4MGE3Mzk5N2M3MDgyNWE2ZWM1ZmQ5Zjk1MmU2NWZhMDIyMjU0NDVmYzNiZGY0YWRlYTNkNGQyMjU1MWNiYWNlYjM4NzQ3OThkNmEzM2E2NjYzZmUzNzU3MDgxZDYyNDNkZmQ3Y2QyZWViZjYwYTM4OTlmYTFmOGY2Yzk1NmEzYjE4M2Y4OWI5ZTdkMmNhMzY0NDg1ODRkNTNhYThiNDRlNjVhZDNlNTI3Zjc4NzIzZmE2ZjU5MjI0Mjk4ZGYzMWQ1ZThhZGE1NjdjOGQxYjExZjNiMTMxNDc1NTMzMWMxNzMyZGM1NGExMmE0MzU2ZWRkYTQ3ZTNjMTMwYjMyNTI4MmEzNTRiZmUxNWMzMDAwZDIwNzgyMjkzMTc5NDE4N2UwOTczYWI4ZWY4N2JmODljMzU0YTAzNWE4MWY0NTkxMTIyMzU2M2JmZDk5ZjkwYTc1ZTUzZDAxMGQ4OTI5ZjRmODVhNWE1YTRmOWZjYzFjNzhmMGEyZmM0NjZmNWYxYzY1MjJjZjYyYTdiZTM3ODgwNzk2ZTliM2NhMDkxMWVjY2EzZjIyYzNiMjRkNWQ5ZGFhNjg4OGY4OWE4ZjcxYTE1ODU5MzU5Y2VhNDY4ZWYyMzhlY2Y2NDYxOTI3ODNhMjU3YWRkYWRlOTA0N2UxM2VkZDhiY2MxZmQ0MTc3Y2IyMGY4OGQxMTk5OGQ5YzcyNjJkNjQ4YzJiZjY2ZmIyMjdiOWIzYTllZDQ2OTYyZDIyNTdhNDIwZjY0YmVhZDllMjg2NTdiNTIxZGIyZTIyMTY1Mjg3NzkxZjNhMWJlYzRjNzgyMmE2Y2FiZGU1ZWM3NzAxODhjYjc0NDk4YTRmMDhlNWEzYTc2MzlkMjQwYWUzZjRmZDAzNTNjMGRkYThhZTQxMGI5ZmE3ZjQzZmVlZDEzZTlmMTNlNmM5NDEwYTFkMjRjZGZjMmM4ZTY0YTE1YTEyZjc1NTQ1YjBhNTc1NzEzNTIzZDRkZmExYTQ3NDI3YTg4NTFiYTlhY2NjYWQ3OGI0ZWY2YTE4NWY1YzNiMDAxMTkwZGQ4ZjM3MDg4YTAwMGFjY2Y0NDhiZThkNDkzNzFkOWRhMmUxY2I1ZmZlMDdkNDFhNWMyMmU5NDY2MGFjMzcxMzVhYzg1OGNiMTc2OWNiNjZlODI2OWZkNTMzNThlY2FjZjVkZDkyYzdlYjYxODZiNGQ0ZDYxMzBhNzMyZGMxMGJiYjJiZTMyZjliMWQ2OTUxMDE0YTYzNWMxMmQyMmYwZGM1YmQ1YzJhM2Y5NmFlYzYyZTc3Nzc5NDdlYWEwMjI4MTJjYWNlZDMzYTViZWY5ZmY4ODM1Zjg4MDM2N2EzN2IwYjc2ZDJkZGUzOTZjNjE0ZTFhNDcyMWUwMDBjMDBmMTYxOTM1YjE0YTczOGExYjcwZjZlYTU0MjU1Yjc5NTE4Njk2NDYyMTIKK1NJRzogNGE3OWM0NDJhNGMzOWM2Mjg5MjYxN2VmOGU4MGI0MDkxMWM0YjlkM2ZmMGE1NjczYjU3YmRiODQ1NGFkNzM2NzY5ZGYyN2M3OGE0YmY3YWQ1NjYwNDBlNzQ3Mjc4YjExZWI2NWNmOWVjN2ViYTg2NjEyMGEzNjU0ZjQ3MTZlMDAKKworVFNUOiA5NjMKK1NLOiAgMzNkNDc3NjAyZjI5NjMwNWE2NzE5ZWE2OTRjMDQ0ZTkwZDIzM2MyZGVhODVjNDZhYmUxOTIwZTg4YzMxNzg0OQorUEs6ICBmZjZmZWVhMDI4ZWMzNDZkZDQ5MTA3YmI3MTNmZGRiYjI4MmViY2QwMzRlMmVhZmM3Y2RiMWM1YWRmOTI2MzkwCitNU0c6IGNmZWEwN2E3NzlmMTUzN2U0OTgxMjNjNjc2MjkwNTczZWZjYzVkYjcwMjQ1ZDkzZGVhNWMwNTcyNmY4NzEzZDAwMmFlNjZjMWM5NjkwNzQ3Y2E5MjMwYjE2MjlkMzY2MmFiNzNkNjZiOTQ5ODc5MTY0YjIxYTM1ZjQwY2YzNzk5MDQxOTA4ZWQ2ZjkyMjllY2IzOTBjNWYyMjIzNGUxYzVmMjZiM2FiNWJhNTllNzhjNjQ5Njk4NzFiNDI4Yjc4NTE2Nzc3NTU1YWY0ZTg5YzZmYmMxOTNhOTQ2OTUyMjZjNmQzMjk5OTFhMTFiZDU4MGQxODk1NjA4OWI1OGEwZTQyY2EzNWY2YzZkMjYwOWFkZTBkMGI2MTlkNDg5MjVjNjhjZDlkMjI1MGRmZjI3Y2YyZjBkNDQ0NDg3MDliNjc5ZjM1YmJkY2UwZjQ5NmIwYTE2Y2E2N2VhY2VlYzI1OGIxYWVjOTE3NzVhM2EyZWU4MDFiMWM5YTIyNmE2YjAwMTkyNmEwNTdhMDYzMDY3MjdlZWRhZThjNTc3NTMxZGYwNGFjMDliNWI0OWJjZGVhYmRlYjhhYzRlOGU4MmNmMWU3YWY4MzVmYzYxMWNhN2E2ODRiODM1MjYwNDI0MTViMWQ2NjUyZTg2MzQzMTFlMTk0NjI3ZWFlNzhkMDExZTZmNDBmNjQ1Nzk0ZTM2ODk1YTIzZTFiZDg0ODgzYTM5M2VjZmU1YTI0ODAyNmFlYTg2NDQ3MDU5ZjdhNDI5MzY4ZjIxYzg5ZTAxNDUyMDc5NzhiOTEzYzgwYTIyZDdjYWYyNjczZjdjNzZmNmMyNmNmODg0NDEyZTE3ZDBjMjU1NDMwZjUwMmJjZTc0ZTNhMzEwZDE3ZjZmNGQ0ODVkYTI4MGVkNWI1ZWVhNmM0OWJhNzQ4ZDc2NDgxNGI5ZTNkYWY2ZmNjMjE4YzI3NDBjYTc3MDE4ZjcxMzQ0NTE5ZGE4MmFkYTMxZTAwMTkyNGZjNzc2NzllM2U5ZmY5ZmFiNjdkZDA5YTYxOTI0YzgyMWExZmQ5OTlmNzRkZmEzZjgxOWFkYjMxZDE1ZTVlZDhhYWE1MmMxYmQ3Y2NhMjY2NzExYTc0ZGQ2MjEwNGVmM2MyYmY3MzdmY2U2OTQyYjM0OGEzM2MzZGZkNmQ5MmE3MjRiNmQ1ODc4NDIxYWViMjMwYTUzM2ZlMjFjOGIyZmQzZGE1OTZhNjE4MGE0NWM5ODZkN2VjZTRjZGM4YWQ2ODFlYWQ2OTA2NGJiZGRmYzIwZjNjNTIxMjVmODMzOTViZWQxNTU3ZjY3MTgyYjlmZTk5MTM4YWYzYzM1NmM1ZTY1Mjk3OGRkMjM4Yjc2MWM3NDJmODE1OGUyMzE0Yjk2NDIwODMzMDk3OGIwNjIwYTEzYTE2ZDc2MWQ1MmYwNmU0NjZhNDA5NGI2NWNkNmYyNjg1NGFlZDZmOWE4YzJhODg0YTBkMGJmNGVlNTg3ZWViOGI2MDI0ODcyMzlhN2U1ODE3MmM4MDk5ODNhOGRiMWMxZmM3Y2U4YzQ4YmM4YTZmYjgxMmQ2YWE5ZTgzYTNhYjRkZGY3YThkNDBkM2ZlMDBlYTE2ZTA0MDYyYjhhY2ViOWM5OWVlZmE0MWY0Zjg3NDQ3ODI4MTI2ZDBkOWM5Zjg2MDVlODQ2N2M1ZTRkNjcxZDVjNmQ5ZmE3MGQ3NDcwOThkOTQxMjExMjIzYjliY2YyNjE5MzhkNjcwNGEzMmQyMmM2MWUzMGYzNTcwYTFmNWQwOTk4YjQ3OTEwODA4ODJhYTU2MjMxNjdiNjNhMjNmMzQwZjBlN2M2ZjlhODMwYTc1Yjc0NjMxZmE1YjU3YWZkYjFlNmJjMjI2OTliYjAzMTU2Njc1ZDU5ODM1M2E1ZDFiNTU4OTdlNGMxMTA2MWRkMTQ1ZjIzZTg1MzdjNjMyZjc1YzEwZGYwNWIyNTU0NzIzODU3NDAxN2ZlN2I2NGI4ZTk5ODY5MTU3ZmVlMzVmN2FkN2U2M2U5OTU5MzMwMjkyOTUwM2E5Njc2ODAyM2I0MTI1YWQ3NDlkZmY0Yjk5MmVlNWMyYjRmM2FkYTQ4ODllNGFlNjJlYzE1ZDJkYjU5NjlkNzMwZGIzMDc1NDdmNjM4YzMxODUwMzJiMTJmNzVmYmIzMTdlNDdkZjdiOTI5MmFlOWU3NmEyYzBhMDZmY2FkMTA4Y2RkMjM1ZjZlMzhkOTY3YjYzNzk1MTFmZjY5NjVjMjJmMmM2NjgwYTEyYjAzMDRlYjJiMjk2Yzk5YTc2YzI3MjlkOThlMGE3ODI0YjY3ZjNmZTg0MmQ2ZjZhYjI3M2U4OTQ4NDViMzJkYzZkZGZjN2EyMjBmNzZiZDk2NWM2OTg1ODE4M2M4ZjM1NzM5NWZjNTdkYzgyOWRlZmFhY2I1NjAzYTc1Nzg2OGQ1ZTU2MmY5NzgxZWUzOWUwZTk0Njg4YWQzNTQ1YjMyZGQ3MzY2YjZiMDQ3ZThkMWQzZDU2NTk5N2IyMzZlN2Y3NTk2YzVmOGQ3YzFjMTFiY2Y0YTI0NDYyMGNiZDIxZDU1OWE3YzliM2YKK1NJRzogY2FhMjg3OTg5NWQ0ZjYyMGI5ZWI1ZmVkMjJiNDU2MmVlYjFhZDYzODIyOTY4Zjc2YWQ5MTA3NmIxNjZjMDVlZTIwODY0ZDk4YmJiYzZlNzlkZDAzNjJjYWNmN2EyMWI0Y2ZjMjMwZDYzNTVkNDMxMjBjZmZmYjk0OGI4ZjZjMGUKKworVFNUOiA5NjQKK1NLOiAgNzA3NDU2ODYxMWE2NmRmY2E4MzA3Y2FlNjA4YmIyNjk5NTg0NGRmNDM1ZTUzMDBlNWI0ZDcyOTFjYzIyOTA3ZgorUEs6ICBkZGFiZGRkMTVlYWY4MzExNWRkZDA2NWQ3ZTIyMGIxZWZjMjYyYTYxYzUyZTkxNDM0NzQ0MmJkZTZkMDAyNTA2CitNU0c6IDZjMTM3NDIzZWFjNzkwYjhlOGU0MThiMjkwZTA1NzljN2I4NmIxNGFlZDgxOGRlOGNlNTNjZWEzZjM0MGExYTk1MzkxZjk4NDk2OGYyYjQyMjkyODJhODE2MWMwOWFiMTQ5Y2RhY2Q2Njk3MGI0MDEzZjUyZTVlNjhlYThjOWRiNjg1YjJjNTMwNzM1MDBlNWIzNWUyOWVhMGJhMWY0ZDE1OWE1NThkMzYxYjA2NTE2ODM2Y2Y3YjllYTUwMWZhMDUwNmI5ODVmMDM2YTgyZDllMDg0NDg5ZDNiZmVkMzQwOTNlMmQ2ZDllZGY1NTc4NWVkMzVhOTBjZTU2Yzc2MTY4NmNjM2VhMWEyYzc2YWRhNWVjOGMxNDVkODE4YjA0N2NjNTE2ZWVjNWQyZDZhOTNhNTU1OTJkODkyZTNkNWNkMTBjMjUwYzA0YjA0OWIzOGZjN2VjMGYzOWFiYTE1ODI0MDA3MzM2YzJiMGY3ZjgxZDY0ZDVjYTNlMjlkNmZkYTRjMjNkOWJhNjVkOWZlM2NiNGUwMzkxMzY5NzI4N2I0NmEwYjFmY2NkMjYyNGUzOTdhZTk1YzUyNTRiY2Q4OGQyYzdjOGY3MGZkYzgxNzNmNjRjMWRlMzIyODFhYjQxODQ2OTNiNDhhMzQ5ZTY3ODJiYzg5OTJiNDNjN2RlN2NiOWQzMzkyOWJmOTUzMDZjMmFmN2U5MzhkODQ4NmIzODZmOWZkM2YwZjcxNjFlMGU2ODYyZDRmOTI4MTQ0Njg2NWExYzliZTI0NjBlZmJjMjAxNTFiMDZlNzlkMDE0NjE3ZDAzMDBlNjcxZDQ4NzY3NDU4NTk2NjI1Yjc2ZGZmYzU1OGFhOWI0MDYxMjE5NmVjODI3ZTFjNmZmZjUxOGZiN2FkNGJmOGM0NmZjYjI3ODg4NWFhNDkxYjc3YTI4OTk1Y2ZiOWQ3OTY0MGFhZDE3NGM2ZGY0MzkzOGUzZjEzODUyMDVjNTQ1OTViMzNkZWRlNTAxNDM3NDZhMTcwNWU3ZTBiNjlhZjRhMjZjM2I3NjUxNTA1MTg5MmIxNWNhNmU0OGMzZDkxZmJjNzVlOGZlNGEwZmU4ZWQyYzI2YzEwNzNiZWI3MGVhMzhkMDkyNzAyOTI3ODQwNjc1NWFlNmUxMWRhMzc4NjUzNjQ5NTE1ZTAwODViNWVhN2RiMzI0OTIwOGUzM2E2YzhiNmFlOGNkODBjOWJkNmI5ODNlNzNlOWI5MWRiZWMwOTFmYWU5OTVmODAzMjQyN2VkZWMwMmNhZDkwNTVlYjhiN2RiY2ZhODBkNGY2NGY1NzI3YTE1MmYxMWM0N2U1MmQ3NTNhNTdiNmU1ZmRkZjc3NGNlYTRkYTkxMDAyNjgxOWM0MWUzMmI0ZjE5OTcyN2UyM2M1NGFiNWQ3MDE0MmI4NTRhMjdiMDRlNjRjZjQ0YWYyYTg5OTVlMTIwMGJkMTE3YzdhMTY3NGVkZWY1OWJjNTNmNzNhZGFmNjM4ZTA3NzNiODViNTYzMzRhZmY2ZTExNzQzZTNhM2QzNjE0YWE4YTM3NWIzNzgxZWM4MTRjYzA4ZTcxZWZhNzgxODUxOWNiMjRhZjgyYzMzMWRmZDZhYzc4ZWMxN2ZkNzE3NGI2MTAyMWU4Y2Y5MDFhMmFhYTZhZGJjOTAyYTkxNmIyYTJmNGY3OWU1NTE1MDFmYmYwMWRmNmI4NTE4NTA0YzFlOTQ2NDY5MzhiZWQxYTg1MDljMmEzOGZiNmE3OThhNzg1OGY0MDliMGYyZmI5YjNmNDgxN2U1NjhjNTJkOWFiZmUyMTY4Y2MzNjUwZmM0M2UwZjk5NzVmZTI5ZTMzYWVkMWE3YmYzMGQ4NjMxMTUwNzkwNjUwYTNjYjc4YzM2OGYxYWVhOWFjNjBjNWVlYjk2OWE0NWY4NGFhMzczNjZhODM5NzcxOTBmNDFhZTQyMWUwYzQ2ZmRhM2ZhMDFiOTI2ZmNlZjgyMjRmZGEzNmRmNGY4YTg3NzAxZmU3OWZlMDYyOGVmMGNjMDJkZjJiZDc4MzIwN2M3ZGI4NzExOWEwMzY5ZmUxNmVlYjM4ZmRjOWZiMzVkOWUxOTVmZTE0ZjhjMTAzODIwOGFiOTc3MDBhZjc5ZjJlMmUwNTQ5NjgzMDIwN2M3ZGE4ZGJlOGU5YmI3M2JjNDcxYTQzZjFiZTY1MGZhOTI4MTlhZWI1ZGM3ZWVkN2VlZDgxNzEyNzBkMjE5MjU3ZDE5NjEwYjg5ZDJkNjJkM2Y1YjY0OGUxMzllZWRmMWZmNzRiZTAxYTVlZjFkOTVmODEyOTIyNjAxZWU5MjUxNTE1N2M0ZWNhZGZhM2VlZjlmMmE2NzdjMDAzY2E0YWI5YjJjNDU0NzJjZTU1ZTE4ZjQwYTIxZmUxYjBkNDViNTBiNTBjNTJhMGIxYTVkN2MzN2Q4ZWJjMTVlMDIwNTg0ZDllZGQ3YjU2NTA1ZjgyMDc4ZTBmODk5Mzg5MTM1MDE0Yzg2ZDFlMmVkNDlmOWNkMzE5MDc2OTQzNTUzYTMxMmFlMDVhYjMzMzUyNmUxMzY3MTRmMDlhNDAyYjNjOAorU0lHOiA3ZjY1MzEzNGMwYjkwZjQ0YTQ4OWYwYjA1ZmM0MDcwN2FkOWYxMzk4ZjM0MGI0NDdhM2M5ODYxZjUxMWM5ZjE1Njg4MDNiNzY4NGEwNGE4OThjNDUxNTRkZDQ4NmJkNTA3NTg5OThlMTI2NDM5Mzc4YjNmNTlmZjM2NzQ5MmEwYQorCitUU1Q6IDk2NQorU0s6ICA3ZDdjYThlOGQzYjg0MzQ0YTVlNGRlYTA4YjMzOGQ4ZmFhNWZmYzExOWNlNTY2ZWY2NTZmMGY0NTg0Nzc1YjIxCitQSzogIDBiZGUzNGI3NDZkMmM1NDkwODUzMDY0ZDQ4YzZiNGMxY2JiYzNlZTdiZWZmNWU4ZjY4NGMxMjBmMzE1ZDdlNGUKK01TRzogMGI3MjcwNzUzNDVkNjE5ZjVjZGM3ZmM0YzQzY2RjMTkxMDU4MTFkOTVkMDY5ZjgxYzBhNjJmZTFlMTE3OGNmMWMzNWRiMDVlMmRlODdkMTFhZTFhNmY1M2VmMzhiMzliZjRlZDhmYmY1NmVmMDE3YTFkM2MxNWI2NGZlNGIyNjEwYmY2OWJkMTlhYzdhZmQ0NmEyYjg3YjQ4OGI2Yzc4YWQ0NTY4MTFjMWRkNmJkNGE2YjVkYTY5ODczOWZkMWExNGNlYjlmMjdmMTI0YjY5ZjZiZDE2ZGU1NTM3YWFkODA2ODFjNTYzMzU4MDM5NGRhM2I4NGU5YjdhNTVlYmFiODUyMmQyZDZiZjFhYTRlN2IxNTljYmY0ZTIwYjUwYmZlOWM3MTFhYTA0NzExOWYxZGFkODc0OTI2MGI4NzYzOWU5YzE0MWRlZjYyMDI2YTk5MDM3M2RjZmQ5OWY3N2IwZjVlYTZhZGZkOGY1OTRiOWNlNDEwNjRhNWVkMzA3YmYyZDhkMTczNzA0OThhZDdmNDVmOWM0ZGQyNmM0MjBmNDUwZjUzNjIzYmI2ZDdmM2Y0NmExNDlkOGYxMzViYzI5MTMzMTBmYjhmOTA0M2QwOTkyNzhiYmViYTM5MTc5ZmEzNjdiMDE2NzNlMWM5NTNlZmZkMmNhZWE3MzExYzQ3YzAzNzI3NDQwOTViMWM4ZjkwZWVmNWYxOTI5ZGIxOTk2Y2Q1ODRmNjE1ZDU2ZmFlM2FlY2FjM2VlODhiZDBiMjk2ZjQ0OWNjMjcxM2M1MmRhNjk1MjQ4ZmFhOGUzODliMDVhMGJjYWM2OWRjZTk3MTk3MjMxOTRmNDMzYjAyOTdlYjA4NTkwMTlmMTQxYTIwN2NlOGNjYjU5ODgyY2FhNmUxOGYwYjQzYmRkZGI5MGEwYTg1ZmZkNTc3ZDYzOTRhMWQ4MDQ4OTQxMGY5MmFmYjg1YmE1MDZhYTlmM2Y0Mjc0NDVkMjEyMjRiOWNiMDQ2YzA1ZjFiYWNkN2I3NDlmYjdiMTAyNGQwOTJlNGVlNGIzMGE0NmVkZjcxODQ3MGM5OTQ5MWM2OGY0ODc5ZDYyYmZjZTcwNDZkODEzOGNiYjllNzIxMjk5OWE0NDk4YjQ1NWZjOTBhYzI4M2U5MzVkZTA0ZGY2ZmM5OTllNDQzNGJlMTEwNjNkNmU0ZWU5ZTA5NmE4N2JjNzE2ZDJjODE5OTE2YzM3YTRlNjI5OGM0OTk0NTM2NmVjM2Y1MDA3MjBiMDZkYzk5ZDNkOGFjMzAzZTZjMjY0ZTI4YTdjMmQ0MTllYzYyMmE5N2E3MTE1NDRmYjFmNDczNWIxMWY4YmIxZDdlMmM4MTZhMTU2Mjg3YjRjYzBjNjVhYWEyODBiODM3NzM3ZjBhODRlMzZkZTJkZjJmYzNhNTBkZjk4MDkxOGZiOWU1ODM0YjQyYWMwZTBjNzI3OGQ3ZmU4ZGI0ZGJkZWNhMDE0MWQ1ZmVmNWRjNjE1MWY4N2I4NjM0YzI0MWE4ZmEwYTgyNzE3ODk5NzczYWU4OWY1Mzc4OTBiOTE1NWE3YTA1YmNlNDc4NjZlYzIwMjhhNDc4OThkNDg1ODIzYTJlOTkyMzE5NjgwZWI2OTliMGRkNTM1OGY1NDZmYzUzN2M3M2QzYTRiMjIzYTA5NDE1MThiNmQxZTY2YjI3Njc2YzFiMWZjNzZhMDgzMjA1MjRhNzJlMjk3ZmNlMTdhYTgwZDhlYTdiMzg4YTU1MTY4ZTdkYWRiODM2ZTlkZWU3MDdlZDI1YzBlZTRkYjI1YmVlM2M0ODViMzk2NDkyMDRlZmFmMjgyMGIyNzM2MzY4ZmM3NzNjZTA5MGMzODUzNzgwMDJjNDcxYjA5NDc5NWNiMjY2ZDM5ZWI3NTgwZDcwMWJlNGM4OTE2ZjZiMzhiZmUyNWZkZjM2ZDZjNGFkYWZhOWFlOTg2NGM1N2JiNzM3YjQ5NTA2ZWQzOGQ2MmRlNjBjYzA1OTllYzZiYjFhY2YyNGIxZDM3ZDYwZWZkZWI3ZDk0MmM1MzYwM2EyZjA0NzZlOTUxMmM5MzhiMjhkNDk1YTZmMjZhOTA3YzM5NmI4NDFhZWRkOGUxNGFjNDQ3YjQ5NWRmMWY2NzZkYWNjZDVhNzQwYzA0MmY1NzcyYjdkYjE3ZjRmMWEzYTFjOGU3YzQ4ODM3MGU3MzZiNTFlNjkwZmQyZGRjYjVhYTYxOTU3YTdjNzk3NWFjYjJkY2I5MTVkMDc0ZDc0NDI3OWVhMWM0MTY5Zjg2ODg3M2FjNWMyMDg5MDE2MmMxZGY5NjU2NDE5OTc1YTQzZDMxOThlMThjMzA5YTFlYjdjMWQ4Nzg3M2ZiMTVjNmRhNDdmNTQ4YTAxZjY5YmRhYjljMzllZjAwZDQxOGE2ZjYxOWRkNzNkN2RiNDVjYmI2YWQyMjVhMmRlNzg3YmE3NzdiYzczZDI4ZmMzMDRmMTAwMDlmNDAyMmMyY2Y4NGRlMDA4ZDcwZmNkYzhiYTdmMTA3YzM2OTg1OWU5YzkwY2E4YTM5M2I1NTNmMjY2MDVmZmQ3MjMwYzkyMTQ5MDcwMGYKK1NJRzogZDBjM2UyNDhhOGNiMmRkYzdlOWYyMWM5YzViMDA5ZjcwZWEyOWRhNjg5N2NkOTJjMjYwZjA0N2VkNjhhYTFjOGI5NjU3ZjlkODI2ZTg4ZjRhNTEyYzUwMDNiZTY0MDY4ODA3NDEyNjNhZTdjZTY4NjBlZmU3M2FkNTRkNDgyMDQKKworVFNUOiA5NjYKK1NLOiAgZDIxZmRkN2IxMGU1NGE4YjZiZTk1YTAyMjRhZDcwNjY0ZGQ5MjExMmUyNjgzYTRmZDI3OWM0MDdkYjM4NzFiYgorUEs6ICBmODljMjcyZTdkMWNjOTNkNjlmNjk0ZGVjOWNjZTA1YWMyNDc3MzQ1MDQ4MjljNTY5OTc0MTNjODk1OGI5MzMwCitNU0c6IGI4NjQ0YWRiZWY5YzdjYWI5MTIwYWNlZGM4ZTc1YzQzM2QwMzZmZmFlMGY5NTViZTZhNDg4ZjFmNDI3YTY4YTg5MDJkMDI2ZTYzZGQ2YzliZjlkOTdkZTc4NmIzMWRkNGY0YzlhNGY4YTYyMmYxZmZjODRkYTY5NjdjYTc3NDMzYzM5OGY0ZDNmMWM0NDM0OTg5YjdhYzlkMGYzYjFiZTBjOGIzNTI4MjRmNGU3YTA4M2YzNDJlYzFiZTFkYThmYjc1NTI0MmE2NTQ4ODBlZjI5OGYwNTk3OWZmMDI2ZGRjYzA0NDg2MGU2NzU3YTI5Y2ZhYTIyMmEzNTk3ZTM4ZjE3Nzk5NjJhNDFhNGM4Y2U2YTY1Yjg3ODE5OWI0ZDgwZjRhMDM5MGNhYzE5YzIyNmVlYTRiNjAzNmU1N2FkODMwZWNmYzAwNjkzZTI2MTNkM2VkZjQ2NWZjOGM0ZmEyOTNmZDhjZmMzNmRjOGUzN2JjZWJhYmVjMDM0OWViZDg4NGUxYjI4YmNlODI0ZTBkNTViNmQwMTUzODM4MDE2NjhiMzRmNWJhNzIzZDJhYzBhMjY0ZmFiMmM3Mjg2MDhmMTYyZGUwMTE3OTI1OWJlMmNjYjA4MTUwMDJmZGVkOGUwZDc4YjAyODA3MzEzZTkxMGViM2E3MzM3YzUzNGU4NDZmOWVlMTU1NDI2ZTRhZWY2NDM2NjFiMGVkYjQ0NTk2ZmRkY2QwYjNlODE0YzEzNzgxN2E0MjJiYWE0MGM5MDUzZDAzODZjNmVjZGI1ODkwNTI1OTQ3NDI2NzdjNDhkY2ZjOGNkNGE5MzY2N2VkNGQ4NzY0NjAwMWVkYTA3OWU4Yjk5ZDUyYmEyMWM1ZWM1NjY5ZmVkZjZmNDA0NDdhN2ZmODkwMWRiMGVmMTg0N2QzY2FjZjAxOThhMmYzYmQ3YmNmMmRkODExYTA5N2ZjNWU1MTg4YjAzZmRmNTRlNTE3NjM3YTE0NTAxMDAwZDBkMzU1MTZjYWYwNjk5NDAyYjQ4ZjhkOGNjM2FmYjE3YTU2MTMyZDA4MjM3MDM1YTBjOTU0OTBiZmU1ZDdiN2ZiNDAxNzhmMjgxZTRkODcyZTQ3YTBlOTU1Y2U5NzM2ZjNjMzMzYTZhZGY1MGFkMzE5OTRlYjlmNDUzMjdmYWNjOGM1ZDExM2ZhZDQ3MTNmZTdmMTk4MDEwZDQyMDQ2YmJmZTY4YjBkYWE3OWRjYjg3NTU5MjliZTkyZjljYWExNTBkZmJkZTNmYzllMzkyYjJiNzAxYzMwMjFjMjQwZTQ2NzlkZTQxMTI0YjE4ODhlNWRiNWE4M2QwNWNlYWY0OWViNDQwZGM0NTAyNmQ0NTBiYzk4NGI4ZDZmMDI4NTBlY2I1NzBlZWUwYTM4MTliMTJiYzI2MzY3YjViOThlMWIxNDFjOWIwYTk2OTBlYTRhMzcwMGRhZDEyMzk1Zjk3NWQxMWNkNzdmOTYzNjg4MzFmMjFmNGU5NjhjYzViYTllZjgyNDc0MDM4YmM3YWEyNjEyMmQyMThiNzQzMDQxNTA2YWViYmQxZjk4Nzk1OWZkMTYwZDZlYjdkNThkNGY1NzZmOGMwY2E4YWY4NjhlMzliNWVhODcyMDM5MzdlMDMwOGFjYmVhZTkxZTEwNjA3ZTQ0ZThhYjQ5NWJjMDFkZDU3M2ZiYWRjOTQ0NzlmZjkyMDgyYzdiYjc1MTM0NzljNzBmMDQwNzc2OTAyNWQzNGQ3MjE0MGMyNWQ4MjFmMDM0YTM5ODUxYTkzYzYyM2I3MWM5NDAwZTk0MjYzOWYyOGJiZDAzMmUxZDhkM2MwNTlmN2MyY2QzMWQ3NDc2NDYyZDI3NzYwMzVkMDc4ODAyMDJkYmZlOWUwN2QxNTQ2MjJkN2FjNjE3NWE1YWZhNzlmZWQ0ZGNjMTM3MTI2MjBjNDE5OTRlMTFkOTI0MzA4ZmIyZmYzYTFlZGE0NGM3NjFiYzczNmYzNDUxMjJmMDJhNDBhZTZmN2RiZDAzZDlmZTk2ZWUzZDdhM2I0YTVlZWZiZmNjNTZkYzQyZWYyN2JkODA4NTE3NjAzOGI5ZWJhZTYzYWE3NTAzNTI3NWVjMzRlNDE4NTczOWQ2MzYyNDY3NzBhY2NjYzZkYzYyMGUyZmM5MTU2ZmE5NDgzZTBkOWNhZTBlOGM0NjM5NDhhM2Q5N2FlOGRkYTU5NjZjODhmMDcwOTMyOTJjY2UyMmJiZGEwNjJiYWFmYTdmZTg0ZDBiYTJkMmRkMjk1YjIzNDU4YmNhZWIyZWY3NDJhMmVkMWM4MzQ0ODNjZDcwOTM4NWFmZWFkY2JjMGE5YzZhNGYzODdiYWJmN2UzZGMzNmM4MTBkYjIwOWJlYjY2Yzg2NjY0MDRjNjYxZGZlOWQzMmM0YzA4YWZjNmYzYjEyNTdkNjQ4NGE3NTVmNWFjNzAxZWIxM2Y4Nzc2M2ZlZTMzMGZmYTA0MjJjZDgwYTkyMDM4YzZmNDUyOTJiZGVlNWY4OWU5NGM3YTY1MjE5N2ZjMTkwNmI0ODI1ODM3MjQ0OWIxMDgxYzZiOTcxMzRjNDNjODllZTIKK1NJRzogNmQ2OWU4M2IzZTdlZDU1YTg1ZjlmYzlkMjUxOWRhMGIwYTFlYjRkYWFlZTk5MWE2NjUxZjVjODkxOTBjMGRlNzIzNzNjZDk4OWQ0NmJlMTM2N2Y5ZGFmMWI5MmZlZDNiNTJiYmE1NGExZTRjY2E1YmM4NzI2ZWQwN2YzMDI1MDEKKworVFNUOiA5NjcKK1NLOiAgZDMzNmZkODQwODE5NmQyMmZiNjk4ZWIyNWI3NjU0ZmRhNDZmNWRlNGM5YjRkMDQ5NTBjMzk4YjU5YTQ0MjkwYQorUEs6ICBmM2NkOTYzNDdjZWE2M2U1MDBhNGM5MmMzYmYyMTU2NjJkZDA0MDA3ODRkYmY4YjU5NWRkM2QzOTVmOTBjYzEyCitNU0c6IGZiNDljMTliYzQ0NDRjMjhlYjI2MjVmMzFkOTk2ZDVlMzZjNTdmYTZmZGQ3NzJlNjdiNzE5OWNlYzY3ZWRhNTQ1MTcxMmRmN2E2OWRiYmQ1NmU3YzM5ODc5NmIyMDAxZGVmNjUxYzRiOWMwNWVlMzFkOTU2Nzk1MzVjODEyYTM3ZDMxZGRiMzA3MzE5OWNkNzA0ZmY3Y2EyOTgxZjdiOWM5MjdhN2Y3ZDc3NmZiNmY2MDlmNzI3ZTZlYTcwOWNlN2Y0M2E2MDc5MzUwNDE2OWE4OTA1ZDliMjMxMDlmMGQ4Njc5NjZhYTNlMzAwYzdlMTFkZGVkYjljYzExN2I5MDRmNjI5MjdlNDhlNGQ3M2ZlMWE2Y2VjY2M0Y2ViMDhlNjRhYjU1ZjI1Yzk4MjE2Y2VjOTM3NjA4YWQ3OTMxNDY5OThmMTRjMjk4NWU2YzI5MTBkZjdiMTM4OGY5ZGQ4NjNmMWU0ZDdkMTYyMTQ3OWI4NTEyY2RiMzRlNjczZWIwMmE0ODkzNGUzOWMyZDE4ZDcwZjk2NmQ2NzZhMmJkNzVkYjU0M2QyNWM1ZGNkYzNlZjNiOGJjODIwMTg0OGMzMDk2MWU5MTVkOTY4YmRjMzE5NDZiMGQxOGVkZTdjYjAxNjZkYmUxZmZlZmY5NDM5YzljMzQwNGFmNjAxNmM3M2VkZWIyNTNkOTNmNTYyYTFhNmNkZDU3ODk4YTliMzQyMjU4N2Q1ZjU2YWYzZDA2YjNmNmMyNTc1MWY0NDQ2MGZiMzI5OTY1NmRjMTEyMjdlZjQ4MzdhYWJkZGVlNDAwZmE1M2Y2OWU1Y2VkMDUzYzc2ZGNlY2RmMGFkYzllZjgwZjRiMzMwNTQyZmYxZmEyZGYwYjhkNDNjZDFjMzExYjFiOTk1NWM2MzJjOGU1ZjA0OTE5MzFjMDRkZTQzNGRmOGY3YTM5NGU1ZmVmMDE2ZGIyZWI3Yzg3YjJhYzdhNGE3MzA0M2JkN2Y5OGFkMGE0ZDQ1M2FiZmIwYmU4YmU0Y2IxNDU3NDJhYTU2YWE1ZWYyZGZmMTIyMzBhNTEwZTNiN2Y4MmY3ODQ3NzAwZWVlYTU5MDViMDI4OTY5NmM0YzE0MmJmMzRiY2Y4MWE5NjJkNzViOGQwOTEwNTU3MzM3NzkzMzViN2ZkNDdhMjBkMTdjOTQ4YWI3MzI5NDc4MzI2NzQzNzFlMjJlNzExMTM0ZjVjOTE5NzkyMzU3Zjc5YmY3MGM0NDcwNzg3NTI4NDM0ZmMwYjRjYTA5M2VlOTI1NDM0MjBkMWNhODExMjRmNTU4NTMxN2UyNTA4MjFhNGYzZDhjZTBmOTE5ZGU5ZmJmMDEyNzA4N2U2NzY5MDNmNmNiMzkwMjViY2M3M2EwNzYyOTU0YjcyZTY2YTZiZTliOTZjOTdiNmY2MDMwYmY1Y2EwYmMyNzI3YTlhMTc5Y2Y5ZDk0MDVmM2ZlMThmMzQ5MjM4OTA3OWE1YjY1YmNiMTNhMGQ1ZWY0MWMyY2Q5N2U3MDJjZWU0YTJmZWIxZTY3MDJiZDRjNjNmZTBhNGFlOTk0YzQyODdhODM3YmMzZjY0YzJkODk4ODU3Y2RiMzJhY2Q0YmQxMzM2NzZlNTFmNzdiYzcxMTBlM2NlNTJkOTIwNGZkMjY5MWE2ZDM3MDc4ZjY4ZTdiY2VmMzBmYzljNDgzOTg1ODIyYjY2MTExOTIzOGU0MGY5Y2ZkY2FiZWYyZDdiMTZiMDU5YWIyNGFkYzA1MDAzNzEyYmJiMTI4MDk2ZTM3ZjkxYmM0YzVjODE1MDhiZTI3ZmEwYjg0OTQwYmUzNmJjZWQyZTY1Y2QzNmIzOWZiZGM1ZWE2ODYxNDE1OTIyOGNhNjVjNWQ4NDA3YmFmNjYzYjUyOGU3ZDg3NzM0YzdiYzc3ZGM4NDMxYTFkZDY4NzNjZmRkZmMzZTc1N2Q5YWQxZmVkZDNjNzk4ZjFmZTYwZTcxNWVlNDhhNmJjYmIxM2I2MTZhODlhMzhlMzM2NDg5ZDNkNmNjYjcyNjkxNDExMmExYmM1ZDk3N2M5YjJhM2ZhYzEwN2FkMDk0YjAzOGFiNzU0NjgyNjNjMzRiZGE4MTdjMDU2ZTA3YTZjNTY2OTdjYjY0YTBiMWY5NjZmNmRlMGJiMWMwYTcxYzhhNWZlMTMzYmEyMDM2ZDI0ZGFjY2FkM2ZhMDNiMzljZDI3ZjgzMjc1Mjc1MTA1NWE4MTU1OTEzZDA0MGY1MWRhZTc4ZDcxOTQ2Y2EwNGQ4M2M3Yzg5NGMyODBhYWVjMjg1NTQzZTVmZDVlMzI3YWNjY2E5YWJlZjE1NmExM2I5NTcxNDQ2YmQ4MDA3ZmY5MmRiYzBmYmFmMjNhOTQ0MWI1M2MxY2Q3NDBjMzRjMjgyOTI5MTAxYWQyZWE4Yjg1ZDcwMDUyOTkxYjc3NGU5MmZmNzVjYzg1MTEzZTA5MDBiNTFiODYzZTFmMmFkYWFiMmRiY2Y0NmFmNDc5ZWEyNDhlYzI4ODlhZmJmZTczNzQwODM5M2EyYjFiMzMwMWY2NWMxZmFjOGI2NzY3OTVhYjViZjQ0N2YwNWUwZGFmNjc3NgorU0lHOiBhZjdlMmRmNzUyOWZkMThkMWIyMWI4ZmQ0YzA2ODE1MDU5MThlMjUxMTQzNGZlNGU0OTU0ZTc0M2MxY2ZhNDVlNDEwOWQzNmMzZWVjZjJlMjVkMjA5YjliNWQyNWY3Y2JjMzgwMjk2ZDY0Nzc1MmUzMGQzYmVhM2I5MjliMDkwMworCitUU1Q6IDk2OAorU0s6ICA2NTczMjI3ODQxZjZmOTI4MzExNDZjNDRjMGU0ODBjZGY1NDRiYjg3NjU1MmNjNWY5ZDQyZjE1YmRjYzA0NGI4CitQSzogIDE5MjI1N2E1NGNlNWQwNGMxOTQzOWZkYzllZGUxOGVjODU2ZTI5ODcwZTI0ZDM3MzFmZTIyMjQ3OTk5NDliN2UKK01TRzogNmU3YzZiMTIyYWIzNmJkMTM1ZjY5ZTJiODVlN2ZjY2VmYjA3MmMxMmNmMDg4YTMyMjlkODc2ZWZmNTMyMzg5ZjA1NzcxMTZmN2FmMjlmMTE5NWUzODI4ODM5MzgxMzgwNDY3MTc4YjIyOWM1YTE4ZDdjNDk0M2VjOTcwZGQxOGJjZTcyM2JkMGNhOTFmZmE5NTU2MzU0NmEzMjRmZTBiOWJmNmMwNDU1ZDQyNzYwMzllOGQyOTFmYzcyNzZhYTU1YTFjZDNlYTA1MjgyNjU0YTdmOTcwMGFkY2JjNzgwNzdjNWRkMGZjODZlY2VkNDhmNGE2MGNjYjc2YmZiOGI0NTYyYmFjMjJhMDJkMTllNDQ4OTM5NGFiOTcxOWZjMTQ0ZjVkYjJlZjAzOWIzN2YzYjUxZDFkNjU3YTBjZjgzNWQ3MWYxYTRhZjAxZWI5ZmQ4ODVjNjA0YTYyNGNiZTkxMGJmZGUwOTNhZDNmMGNiZmQ5YTQ4MzA3MzI5ZDQ0MjM0YmQwMTE5MWQ1NmU1MjJkNzJiNTRlMWZlNDczM2RhM2FlYzY4MjdlYWIzNTU0ODk4ZTAzZTU3N2I0ZTdiOWRkM2YzMDhlNjE2ODA4ZDAyOTQ0OTlmMjg4NjI5NWU1NGMzNjAxOTljYTgzYTgzZmY0NjE5NWVhM2M0ODRhNjY4MzhkNTFhY2JlOTYxMWVlZTAzNmFlMjgxYzY3OTNjYmQ0NTFmOTI3MWZiNWQyNWVhN2MxODk5YWI1ZDQzZWQ4YjlkMDY3YmM1NmQ4ZDRhMTVmMWRhYjhkOGQ5NWQxYjE3YWY2NGNiMThjMTE0NzU1MTE0N2FkZGNiZGQ1M2ZiY2NkOTAyNmY4NTU1NDcxMzFiZWU5NTA3MTYzOWY2NDlmMmQwMzVhMjVhM2U0MmUzOGUyMmJiZjAzODEwNmNlOGJjNGFkNjc2OGFiOTJjZDU3YWZhY2QwNGVlNTVjZjA3MTRiNzY4OTUyZGFjMjQwYjFlOWIyODM1ZWNmN2IwZDZjNDA3YzgyNTI0YTkyM2I5ZjU0ZDFiOGYxMjU2NGE4NzIxNDRlZmFkM2YzYTdkMjM5N2NkMTIxN2RjNWE5Yzk2ZTQzYjI5NjBhODQyNWU5N2UwN2EwMmIwZGFjOTBmMzQ2YjkxYTM0NmEyM2VkMmJiN2ZlNjkxOWMyMmRmZjAzZjYyZGE3ZGJhMTc2ZThkZGIyMmYzZjNhNjY4ODkxZDNmNGU2OTU0OGQwYWM0ZTcxZTZkMjhlZDVhNjdhYjVhYzYxMWQ0NjBiNjdhMjAxZjRmNTZhNTAwM2NhN2E3ZDFjZDFkYjZjMTAwNzViMDkyMjdjYjhjNWRjMTY2NmY4YmU3MTBiNGI3YmMyYjk1YWU2MGRhNGY2NDE3OWE1MGQyZjg4NzQ0MzYxNTkxNjcxZDM2YjcyOTYzMTVmNjk5NjQzOWFkNzk4MjFkYThlNzcyZGZiZjU1YTkwZDVkNTJlZjdkNzZiMzVmZmViZDQyZTM1MjVmNDUzMGM1NGEwZjIzYjRkMDdjNWY1OTc0NDcwZTg5NDA0ZDE3NmVlZmY5ZWYyMzMzNjE5NjkxYzU5YjdhYWRkNDJjMjk2YjFkMGQzMjhkOWEzYmQ1OWE1NGJiYTkzYTBjMWYxZDYyNDE4YzIxOTBjMzgxNzRiNmFiZWEwMmRiNjZlODE4MzIwZWM0YjhiYWMxYzEyZjE4ZjMwZGFkZTI3ZTYzYzU4ZjllN2NhZjRiZjY5YjI2NWEyZjlkOTE4MDA4NjFhY2Y0NzllNjVlYzE3ZTY4MDU3N2UwNThjYjE2YzEwOWJjZjliMjkwOWZjZTMzNjFhMmMyNjg1YzEwYmU4NTQwYTEyMjJkYjVlY2YwY2M0ZDUzYTQyMTRiN2JmNjI0OGFkYzNhODYxZTM0ODQxYTM3NzljNDYwNDZjNTM2NGYxZWE5MWE3OGM5NzAwZDQ2MmVjZmFhZTM2YmE3NjBjMWJkNmEyMzdjOTYxZWRmNDAyMmNlZGVmZTVlOTM3YmJlZDcwNTFhZTYxYjk2ZDA4YjA0ODdjZTA1NjhmZjBkMzI3NDBiYmQ0OWFkMGRiODZlMDkxMDJhYjIxYTkxNTYxNmU5ZGZkZGM4MWViZmIzNmM5MDNlMDdhNDBjZDJkZDExOWZmNGE1MGI5M2ZjNmZkZmMwZjM2ZTU5ZTAxNDhmY2ZmM2ZlOGUyY2Q2ZDMwYTllNGI4ZjAxNTU2N2QxMThiNjI3NGUxZWQ3NWIyMmU0NGNhOWQ5ZGJmYzE2MDc0MmNmYWM1ODFlMWEwYmY1ZmYzMzI2YmM1Zjc4OTZiOWNhMDVhODExZDU1ZTk3YzgzNGQzN2E2NDk1Y2MyNmNmNDQyYmQyZDkwMTI5ODk1ZTljYzBlZDAxZTIxNTUyOTNmNDdhMDdhYjU4ODBjNmNhMjllZDQ0ZDljY2JjYWFkYTdmM2ViNjA0MDIxODE0ODg2NTRlMDQ5MTE1NzhiMWFhOWNkZDRiODZiMGRkMjQ1MGRmM2E0MzA4MWU0MTEwYWI1OGRlNzYzOTI0ZDNjODkxNTJlOTkyOTNlNjM4ZjlhY2Q4ZDcKK1NJRzogNTM4ZWFjZTQ5M2RlNTMzODRiMWU5ODViYjkwN2MwOTRmODE2ODQzMGRhYjE0ZDM3NzkxYmU2ZTc4ZmYzZjVhMzA2ZWM3MGRjYWM4NmQ5OTNhNGMxZjc1ODUwNzg2ZDc5NWYwMjJiNzliZTZhNTQ3NzY5ZTQxNTY5YzVhOWEzMGEKKworVFNUOiA5NjkKK1NLOiAgYTYzYzFmNTRiMmNhMDU4ZmVkMmVlMjUwNGI5ODNmZjMzZDU3MGE5YmFiYTU4M2MwODZjZWZlMTlmNDNlYzQ5ZAorUEs6ICAzMjliODY2YmNhNDE5NDI5N2ZjMWFkNWEwZWJhMGRmOTU2Njk5Yzc0YWI3ZGE1ZmE1NDYyYmQwNjYxNDcxMDIwCitNU0c6IDc5MWI4NmZkNTg3NzEzNDc4ZjkyMzRmZjMwY2VmYzEyM2NkN2MzZWIxMjVmYTc0ZTRjNmRiNjRlNzg0NGY3Yzg1YjE2ODZlNzFlZDA4ZDFhNmEwNGUwZWJiZGZmNGFiMTYwYzk3NmM4YWI5YjUwNWY2YTdlYjBhMTg0MjdlOTk5YTg4MjhkZjEwNjg0ZjhjNzViNmE2YjBhNjRjMGFmYTRiYjIyYmVkMWNiOTMyNTM1OWNhYzNiOGM1MDhkOThiY2IwZWJjZDc0OGRjMTMyZjFkNmEzNjBhNDQ1MGQxMjkyYTFmZWZjNGU1N2U0MTA3YTIyM2Y0MjFlN2QxNGEzODRiODVjMTg4NDRkMGI5ZWVkMmVjYjgxYmI3NGU4YTEyNjUyZDk4NTA1Nzk1YTAxMzExNmE3MDc2Y2NiNTQ5M2Q2YTcxMWY3NjM3ZTk3YTc4MGU3NGRhMWIzOWIxNWNjN2JiZGUyZTZjNGQwZDNlODMwMDU5N2M4MzZlODBiY2I4ZDgwODFkOTc0ZTAyNDMyZWFjODgzNjgyMTFkM2FhYWU4OWExNDQxNzEwOGUxZmY2NzM3MDgzODQ5YzYyNWI0MGQ2MzFmNmM4MzU3MjIwYzdmMzczODBiM2IyY2M1ZDBlMmRmNmI0ZDExOTY1NzlkYmM1N2I2YzllYTBkNDFmNGZhMGU1NTZmOTQzYzk0NDhlZjQyZmM3OGRmNTk5NjY0OGNlMmYzZGUwNGQ4YTY2M2Y5NjdmM2Q5MzNkNGY2NTM1N2FiMjliYTViNjQwNWZiMTYyOTcyNTc4ZGRiYjIzNjdiZWQxNDNjODU0YzEwODhkZTkyMWQ3OWY1YTkyYTg1NDgzN2ViNzcwMmUxYmE5MjVjNmVhYzIzZDEzNGJhMWJhZmM1ZDQ2ZGUyYTE5NDJjN2YzNjZmNzAxYjBhZmFiYjc1Y2IxZDgwOGUxYTFlNGUzYWU1ZGU4OGU4ZTk5ODk3NTc0NThiZGRkOGE4MDZjMTEwY2MzYTczM2QxZDRhYzU4YTQwNWM0ZDgxMTM0ZmJjMjRjY2RlN2Q1YWZlNDIwZjlmMTc4NWYwYTUwMjBmYWZiYjIyNjEyMjI1MDhhYTA1MjhiN2I0OGI1NjcyMDA5NTg0MjVlZmNiNDI5MzRhODgwYjEzMzQ0NGJiMTA5ZjJhOTU0Y2ZhMzVhMmQxN2NiMDVlZTNmMTZkMDZiMzIxYTE1ZjkxMzM5YWJlZGEyNDNhZDZjMDkxOWZhYzUxZTkwN2UwNTNmZGVlZDFjZjAzMDAzNzM0MTM3NzkzOTQxYjhhZGY5YWI2YWY4MTljMjQ1ZDZkNTZmMTY5NjRjOGE3NWIwNzU2YThjYjBjYThjMTJhYzZlNmIzOTQyZWViZWMyZjg2ODgzNWY4MWIxMDlkYjQ5OGE0Y2EyZTAyMWZhNzY1NjA4ZDIzZDgwM2RlZGM5ZTUxNDUzZmMxZDJhNmEzOGE0YWFiMjU3YzBmZTdkNjdkMzJhNTQxZTAxNGI2MGUxMDEzYTkyYzFiM2FkOWU2ZjExYmUyOTNiMjQ2ZjlhMGM2NDQwYjBiNTRmZWU3NWZlZDJmYjc1Y2M5MWVjYjMyNzM4YzQ5NTgzMTU4NmExMTI0MmQ4N2RjYjQ4ODNlZGY2NzU3YTUwYjE4ODQzNzU5Yjk4ZGQwY2VmNGEzZmUxMGQ3NjM3MGVjZGE4YzgzZmFiODdlZWUyNjU2YzVmMjYxYzM0MGVhOTFhNTYwZDBlMmM2NDI4OTI2N2YwMDM2YmEzNTk0NDgwMGE1YTBhZWYzZjFkZjgzOWE3MjRlMTgxZDc5YjhhM2MxNmY2NWFlMjc5NTNjNGFhZThjY2QzMGZmNWFjYzRiMzFlNDc2NWM2OGZiMzgzMTlmMTBhY2Y4OTI0N2I1YTM5YjNiMDhhMTkxNzU0YTI0YWNhOTU5NmExZjhhNzBiNmU0ZjAzYTIwMDRhOTA4NmZmNmVkMDc2NTJhOTI2ZTFlMmRmN2JkY2NkNWJlYzE2ZTVjNGU5NjgzNjRhMDlhYmY5ZGVkOTNkZjVmY2EwYmNjYTVjODEyOTc2ZTVjZmIzYzM0OTNmYzE3NWQxZDkyZWU4ZDFjOThmYjMzODJiM2FiOTBjNWMwZTRiZGY2YTNhYzk0NzY3YjY4ZDQ3ZTZiOWMyNDQyNjVlM2IxYWIwNjIzYThmMDEwMDI3M2YyYzYwN2RlODk2MTJjNzJkMzliZTRjMGI0ZDc3YTNjNjEzNjhkZjQwYjM2MDg2NTI5ODlkMWUxOWMwYWFmMGUzYzI1M2U1NjJjNjQwOWZlNjQ0ODkyOWIzMzc1M2RlMTYyZTZkZTViZDQ2NmE1MTE0ZmMwZTVmNTcxMDI3NTVlMjk1NDRmMDNiMjhkNGY3OGRlOWEwMjRkZDRjNGU4YzNjMmQ0NDExNWE3YWUxNWVkYjRmNTU4YWE3ZGJhNjQyNmU3ZTM3MmM1NGY3OTQwYmQ3NzE0NDY3ZjhjM2ExYWRkM2M2NDAxODljMzE2NjBkOGNjMDFkM2M1MzgyZTQyYWJjMTA0YzcyM2Y5NDhhODA0Y2E4NTMwNDdiNmI4N2I1YjZlZjQKK1NJRzogMjgzMzU5YmU0MTI5MGE1MWU2YTdjNWQ1NzI1Y2E0ZWEwYTY4ZjE0YWNhMTRiMGYwMjU2NmRlZTIxZjQ5MGRhM2M3ZTk1ZjdhYjczOWJjMzVhN2Y0ZjIzMmU5NzFhYTE1NzY1N2E2MzNlYmEwZTcyZGM5N2FmMzJjZGI5Mjg3MDIKKworVFNUOiA5NzAKK1NLOiAgNWI2N2E2ZDdjNjUwZGQ5MmRkZDAzNmNlN2EzMDViYzk1OWE0OTdjNWU1MTVhNjg0OTMwMzVjYjM4NTBlZTAzZAorUEs6ICA0YzZmYzE2NDA1MDVmYjQ2NjY5ZjkzMDQ4ZjhlZjU1NzA5OWYzZmQ5MmE1MzA2NGIxNjMzNjNhMzFiN2YwMGFhCitNU0c6IDYyY2NkZTMxNzcyYzU3ZTQ4NTNhYWYyYTgxODFmZGI1M2ZiODI3OTBlYTY1MDFiZmM4ZjVkNGFlOGRiZDUyZGU0MmNlMmU4OTYxYWMxNzMxZjRiYzA4NWZiNTYxZWYwOWEyNDQyOTcwYjYyOTc5MDFhZWFhMmVlNTU1YjdkNWUzOTUxYzdjMzUxMjM5ZGRlZTk1ZmY1NGY5MjRkYTk1Y2FlN2IxNWJhNmE5YTEzMzdiOGNlNDkyMWVkOTEzY2Q3OTFjMWM2OTQxMDgwZTU0OGYzYzM2ZTg0NWFjYmZkOGQ4Y2UzNWUyZmRjMmEyYWQ2YzdlMjQ2MWJmY2JmMWFhYmM1NWNmMGZhZTQyODg4NWJlNWU4NjUzMzMwOGM5NzU2ODA1MjE5YWJkN2ZmYzE2NTdiNmY0NjMyOTIwYTBjMTBlMGUzNjMzMTlkOTAwZmNkNjFlN2RkYmNkNmU3NjJhN2RiOTI0ODBjMzYzYjJjMDY0MGM2YmYzMmQ2OTBkZDgyOWQ4NDA1ZmE2NmU0NzgzZWJlMWNiZGU5NTQ3OTU0YTkwYmFhZDlmNzc0ZTk0NTQ5YWJiZmYyYzFmNWNhZWMyYmZkMjhlNDE1ZDM2NDI5ZDU4NTE4YzNlMTdlODY5OWUxOTg5ZDQ3YjhkNjI3ZWY5YWI0ZDFlN2QxMjBiMzcyYzIxNDEzMDRmN2ZhYmQwMjY1YjhiZTQxZjU0NjdmNGRlOWU2NWMxMjVlZTFmMjdhMjg5YzRmN2M5YTFmYmYyNWJmYzJmOGQzMDhlN2ZmNTIxOTFjYjc2NDRjNmFmMjA0NTIyZjJhYzg3YjVmNDA1MjVmZDQzZDMwOGM4ZGJjNmE4NjFkMjVkYjIzZWUyNzY2NzhhMWI2ZThlOTEyODNiZTAyNDcwNDgyZWQ2Y2M5ZjZlMzk2MzUxZDExYjFjN2UyMjMyOWMwOTFmZTdkMzY4ZjYwNjUzZjkzYjBmNmEzZjcxMmMyMGY5ZDJkOGE5YTA4MTk4NzJmMGM3MWQ3YjFjMGJjMTY4M2ExNTJiNDg0YmMyMWNmNTU2MDkzYWI0YzBhYzE2ZDMyMmZmMGJmNDUyZTU1ODFlMWU3MjQxNjczODg0MDIzYzdkNmUxN2UyZGU4MDU5ZjYwZTRjMThlMTNiZDU1ZmNmZWU2MjNmZDA0NjljMGQwOTExNjExZDA5OWEyNTcwMjBmMmYzMWJmNTA3OGU2ZTY1YTEzNWQ1YmY0MDc2MjAyMzZkNmNjNzU5MzEwZmE3MjhmZjhiYjVlYzU2YWJiZTFhM2NkMTUxNTNmODkyZDk1OGQzMGQxNjJkMDFlZTY2NWY1YjU2Mjc4MWQ4ZGNmODQyODA1OWU1ZmQyMjVhZDc4YTk5ZWE3NjBmZTVkOWVlODIxOWM5NWFjYjE4ZDA1NjIyZTEwYTliNmM2N2Y2ZDRmNmVkMTE2MzVjNWUyZTBmODVkZDVkM2NiZGE2NWFhNDIzZDU5NGE4MGI0MDQyN2JjMzIxZTBlZWY5YWZkMmJjODc0NmFiNzM5OWZmNmQwZTEyODdiNjYxZGRjNDA2MmQwNzIwMThmNGMxMGU4NmNmYWVkNzJkOWU2ODZlZDA5ZDUyNTVkMzYwZTNlZWEyYzI5YjllYWVhMDVmYzc4YzhjZGI4YzlkNGFmYzdhZGM2ZDRhYTA2N2I3YWJmYjBhNGU5NDBhNzc1ODBlYzIwNjQ1NmNiOWU5Zjk1ZjZkNTY1ZDUzNmU1MzVhMTY3ZWRlOGUyMGVjMzYwODFlMmZjNTVhZWZhZjI0ZDIyN2ZmZmU1ZTZjYjAzMDkzZjQ0M2I0YzUxNjU1ZDkxY2E2ZjI3NTk1OWQxYTgwMmFkZWFiNDQ3MDFiMzFlOGIwZmQwMjIyYzQ5OTk2NmM3MmQxMDIwYWQ5MzcwZTI4MDJiZTA0Yzk5MzNmNmI3NzRmNmU4YzY5ZmMwYmZkMzE1OTM5YTEyN2I0ZTA2ZDBmNmY1ZWRlNjcxY2UxMTYxMjEyNmI1MTg3YjUzMzI5YjBhOWNiN2RhM2IxY2NkNjdiOGMwN2JhYjk5YTY2MmRmOGNlODUxZjUwMmZjNGUxZWQxNjMyYjZiYTU1NTU0NDAxOGY3NTI3ZTM2MmVmYzdlM2IyYmE2Zjc1YTEyNTRmNDI4YjNiN2UwYmVhNjk1NDllN2Y5YzczNjI3NTU1MDA4MGFlZTNhZjU5MTRlM2EzNGJlNjU2Yzc3ZjZiMjk0MjBlNTQzM2YzZGZmMzgxMWYzNTI4MjA4ZTlkODUwYWEzYzI5YjBmNzc4YTI0MjdkNWZkZTMwNzMyZGZlNTA0NDNhOWMxYWQ1NWM3MmEwOGFiMjZmZmFmOGVmYjkwYmNhZmQzNzI2YjAwYzAwNWM4YzBmMGRiZjJhMTM1MzA4NjcyMWU0NDY1NDViODEzNDQxMTk0YTc1NWZkMjZiOTYzYWZkOTc3Mjc4ZDFiMTBmMDkwMDFjN2VkOTc1NDAzYzE1Y2JlN2Y5OTJhYjA3Yjg0NzBjOTM5Zjg2NmY0MjBmNzdkYjc3OWFmODM5NzAwMzI5ZTA3NzdhNjExNjM2NWQ3NmMzNmQwOWQ4NjA0NzJhNQorU0lHOiAwZjA3M2M5YTU4NmY2ZjVlMDgzODlhMmE1ZTE4MDhlMjcwZjBlZGI2YWYxMDQ0OTZmOTM3NTc2MjNmZWE1MzEzM2E3MzFjNDQ1YWMyMzU3OGNkNTZhMzg4M2MwODk1ODY2ODYzMWZlZGYxNDQ2Y2UzNGY4NTdmOTA4MjJiYTgwYQorCitUU1Q6IDk3MQorU0s6ICAyNjMxYzhjMzRkMjk0OGRkZDU5OTZiNDE0OWNlZmQyMzhlYTc0NTJlYzIyZTI0NjEyNGRmYTI3OWNjYzI3ZGI4CitQSzogIGMzOTA2Nzg2ZmZiOGE3YzI3YzQ0YzI0NDdmOWRkZTdkNjY2ZGZlNTg4Y2ZjNTRmMmQyNTA0MDUxMmEzNzFiYzEKK01TRzogNmY5YmRjZTE0NDNmMjg1NmQ0YTJmMjI3ODI4MzUwMTJiNzgxOGEwZTAyMGRiY2MyMmE4MjE2NTgzMDVmMTM0MjM0ZDE0Y2VhNjM2MTAwZWQ4OTZjMmE4ZmIwZTg3MDQ4ZWM2ZjhiMzE0ODRmNzhlYjE3MTA0NWFkZDcyYzg1NzEwZWM5ZjliNWQ0MzYyMzQxN2I1NjUzYmU4NmU3ZmJmOGI0ZmY5MTExMGE4MDhjYjQxYWNmNjZkNDM2ZTg5YTczN2ZhZWE0ZWZmMzU0NDk2MGYxMTRiODMzYjBiNGViYzJjMTQwNzBiMGJmYjdiMDA1N2VlYmI4NDJiZDFjMWVkNDU4YWQzNDI4ZjhmNzJhMWQxZGIzYzRjYjQ3OTdhMzk5ZDQ3YTFlNmRiNzRkY2IyZWUyNGFlODE1ODVjZjY2ZWY2ZDliZDIyM2YwZjU0YmM4YzFjZWMxYmI0NDYwYmVmNGZmZDMyZWU4MDVjM2NhNWVlOTc2ZmY5YzE0NTU5ZjhkNzU2NjYyYTJiYzE5ZTRjNTk4NTQwNmEwNzMwNWM5OTUwZDg2NmM5YTc5YTNlNWY2YzU5Njk3NTNhMTcwZTBmYzRjYzA5YzZkODdhMTJiNDRjZGYzYmUxNjIzMTU5ZTkwY2FiN2E4YTNlNmYwMWYyNjg1OTViMDIxYjFlZjdkMDA3Njk0NzcyNzBkNTU4NGM5MTJlMjJhMzY3NDM4Mjc3ZjU5ZGYyMGM1NjIwZGQ1YmVhYTliYjYwYmVlNDdmNGFmNTI3ZDg5Mjk1N2IyZDEyYjY3OGI1Mjc5YTNmODMyNjQ2NTRjMGEwZjhkMjFlNzA5NjY4ZjMwZmI2ZTY4ZjA0N2QwZDlhN2MyYWU5YTI4ZjdjYjlkYmYxOGY2M2ZjMTY2MWYwN2QzMTBlNTQwYzc3NjMxZjViZGFjNTgyNDY4NWQ3YzlhYmEwZmUxZDA5NDA3YTk2NjJlZjE4ZWIzZTI4ZmQxZThiYzg5MjY1N2JjMzgyNDNhMmU2NDUzYmRhZWFiYjI3OTFmYzU0ODk1MjEyOTU0NTdhZDA0MTgwY2E4NzFmNjMxODc5MmJkMTVmZDE4MDBjZTU5ZGQzZWNjN2UwYjcyOTc5MjY3ZDgxODNlODA0ZmRkNDVkYWFkODRmYzRjYWZlYjU2MWVhOGQ2YTc0YTdjZGU3MjJkOTYyNTNhYjNlNzVmMGFkZGUwMmE2MWZkNWUxZjU5Y2IxZjVmMWIyZTA1MjY0MzU4OWE5ZTRiZTRkZDZlZTY0NTM4Y2IwYjEwOWExMTNmMzBhNThiMzU2NTYyNDA0MzY2MmFiZTE3ZjYwZTMxZTg5YzM2Yzk5NWUwMGFlMDdmNTZhOTExOGEzMWFlYzI0YWQ1NDRiYzk2NTgxMTIxOGRmODI3YzE3MzBiYjkwNGJiNzliNjg2MTNmNmM5OTQ2NzliNjk5MGQ3NzViNWNiMzJkYjk3MTk0YmQ4MTAxOWJlYTQxZjNhN2VlZjUwMWJmODQ5MWIwZWE4NTkzODg0NTJlM2VjYmUxNmFhN2Q1NjkxNTEwYTY2MDZjNDkzZTRjMjkzOTYxYmY0MGI0Y2QzMDBkOWQyMmVhMWE3NzI0YzA3OGI4YmFiMWZkMTY1MDRlOTg5YjEzNmQ5MjUxYWM5ZjFlZDk0YTVlOWFjYmQ5YzA0ZjgwNThhZmUwMzA0OWFlZDhiYTI5ZmEyZThmYjQ0ZjhlOGMwNGU4NzI3ZjM5OWU3MzVlNmMxNDk2YTkxYTliMmNkMmFiMDJkNDNiMjg1ZTlkNzYxMDI5M2I2NzQ5ZGYxMDQ0YjMwZTJkYTk5YTU2NDQyOWEyM2U2OGM5NmZjZTkyYjA4YTAwYjdiNzQyYmE5N2E2MmVlNTg3NzZkN2RkNTY1YTQ5MDA3MWQ0YjE5ZGM2NDhlMDMzMjljYzVjODI1ZDM4N2ViYTQ5ZTJlZmY2YzQzNDE4NjVjNDY0ZjEzZjFiZWIxODI3YTdmMjY4Y2MxNWE5ODI0ODBiZjA4NGZlMzY1MmMxYjBlMGI0YWQyNjI1NTg1OWFiZjFjOGE3ZjliM2JlZjA5OGE5NDA3ZmRlYTBhNTM5ZWIwMDhmZGQ3NDlmYTAxODZjYzAxNjlkOWQ5ZTY4ZmU1ZTU0Y2FjMzJjZTU3YjVjODRjMmQ4MDVlY2EzOWMyZGJiZGQyZTAyZjdkMjI4ODI2NzEyZmY0YTYxNDExY2EwYWViNmYwMWExZjgwZWYyOWVlYjA3MWE0MzIyMmQ5NDk3MTg0YmQ4NWQ5ZTQ0YjE2NmJlOTdjZmQyYTczMmFmNGEyMzM0NjNkM2FiNTQzYTdhM2M3YWVjNTU1NjU2NTY4ODQwZjRkZmVhMjE3ZjY1NTNhYTk4YWYzMjRjMTJiMmMzMjE0ZWU3NmVlYzcwMDY3MGFmNjhjOGMxZjM2OTQ2ZWZkN2ZmMDkzM2U1NDUzZjEyOGU5NzE1ZmRiMzM0NGFjMTBjNGJiN2VjOGYxMGRkZjVkYjcxZjFjZjBlZmU0MGY3NWU1YjYzMzRlZjhjZjg0MjliMzI5MWU2ZTRjZTM3OWMxNzhhZmZjYmM2MTAzMGViODk2ZDc0NGQKK1NJRzogMGFkYzZmYTQwZmZiODFmNmVmNGU0MTg3NTU0OTE3Nzc1Y2Y0NjVlN2I1ZTg1N2YyZTFlN2Y0MDA5NzcxMDZkMjM3N2ViYzc2YWJiMWRiOTI0YzY0ODY3ZTNjNmZlMzhjMGI0ZmNiMWQwZjk0NjhlOGZiMjM1MDI5YTgxY2U2MDQKKworVFNUOiA5NzIKK1NLOiAgMzk3NjlhNjZmMGNhMTI5MGZkYTE0Mzc1YjM1YzY2M2Y2YTRiMmFiMzYwNzE3OWFiZDk5MDYzZTJlZmEyYzZhOAorUEs6ICBmOWZkNGMxOTFmMzhmMTIxOTBkMzI4NWUyMGM2Y2VlNTRjZmQ2ZmYzMTUzMDBhNGVmZGM4YTkwZTgwYWY0MDgzCitNU0c6IGZmNGQ4OTg3ZTNmYTM2MDEyYjc1ODY3MzZiNzkzZDY1OTc1NDY5OGNkMTJiNjVlNWJhOWQ3NThjYWMxNjQ5Mjg4ZDIwMjI0Mzc3MjgzZWE1NDI1ZGVjMTBhYjk5MTdkMThjZDEzZDFiZGY0YTc2OWYzNzA0NGM4NGZhYTJhNDQ5YzY4OWUwMDRjMTRlMDA1YzQ5ZGE0MTA2ZmY3NWNlMTMwMzM2MWM2ZTNlMzRjY2ZlZTc1ZWU5YzMxY2JkMDZhNGJjZGJiNDJmZDY0OWJlNGRmY2Q2NjQwMDZkNmE1ZjYxMDc3YzA0YTZhODFkYjM2YmU4NmJhNDJjMjk1MWYwNTFhZWRhNjRhY2VhNDk2Y2I5MjQ5ODJiOWY3ZDIzNGFjOTcyM2ZlZjk4YThlMTI3NTVlMzI2YTUyZmJlMzU4NTFmNDExZWViODY3NjA2ZDQ1YjUxM2Y1NDUyNjM5MWM1NTQ2MzVjMTgwYjhmZDBlZTQ1MWFmYzk2ZTRlZmQzNjBiNjFlNmJhZjAzZGQ2ZDE5YmE1MTVjMzFlYzFjZGQzYWZmZmZkYjI3MzU0ZTNlNmI1NmU5ZTFhMWExYjdkNGI1N2Q5ZDc2ODliYjJmZWE2YzhkM2Y5Y2UwZGYyZDllZTkxOWM0MjMwYTFmMjBiODVkZmVmZTFlYTNkN2Y3N2RiNDcwZTQwMjI0MjllZjYwOWIwZmY0NDk0NjQ0MGFjYjQ0Y2QxMzQ0NWJjZmEzZjIwNTAzYzI2YzJmYjY2M2M4OTA2NWZiOTMzNGE2MDNlYjlhYjcxNTJlNjI2MjkyMzNjNDRjYjAwZTc3NzE2ZDliNzJjODRmZDFiMzQwNjM0ZmYxY2VhMzQ3NTAxNTc2MTAwZWNiMGZkMWJiNzZhZTBkZmYxYzJiMDk0OGViNzFlZTJjYzMxZTc5ZDMwMTVkNzJkYmVlMjI0YTk4MGUwZjk1YTY5Zjc5M2RhODNhMmRhYTU2ZWZlNTdiMmY4Y2VhYWM5ZTU1ZjQ0M2NhOWU3MzJiNDhjNzVmYWMyMWMzNmZhNzcyNzNjM2YzNDgzNWZmZDgzYzk2ZjAwYWM2ZTg2Y2ZmZWQwODE1MzY0NmMxY2VhMjIzZGE5Y2EzNjBjYWI5N2UwM2IyYjZjOGZiYTdjMTk1YTM5YWU1MmViMmVlODY0MzAwYWU1NmExMGY1NDdmOTlhMzE2OTg3MjI0OWY5Nzc3NGIxNzk4OTM1NTM2ZjJmNWYwMTFjZTU3NjEzYTk0ZmNiN2U3Mjg2YTZkNDljMTBmZDkyOWQ3NjcxY2JiOGNmMTdkZmNhZDRiMjQ4NWMzZDhmZDc5MTI4NzIxZTU1ZDg0ODA4NzYzYzJhZmE5YzU1ZTNiMGNkN2JmMmYwYTY2YjVlNDY3YmVjNWVlODlhZDU3MGI2MGYxODhiM2Y3YjRhNTExZmY4NTkzMTJkZWQwNzhkOGQwMDkxMTM0ZmQ0OWJjNzkyZDJkN2Q2MGIzMDQ5NDFjN2YyMzIwNmY5OWU4NjNiMWUyZDhjOWVjZmZkMmZmMGEzYTNjNzU0OTg1NjE1YTlhOTJlZGNlYWQwMGZlMGUwNTQ5M2IxOThkMWY3YzkwMDg4NDQ2YmJhNDYwMzhhNzFmMzI2NTNiNTkxMmIyNGY0MzEzNzc0OGI3NWFlYzJjMTVmZTRiZjVhNmY4NmI4YTZjZGQ5Yzc0NDdmMmViYjBmNDNiMDFjYTE1MjNlMGQ0OTYyNDAwMDZhZDdmZmZmYWZlMGRmNTc1NGIzNDJjYWZmMzU1NWQ3MmEyN2QwYjkyY2ExNjY3NjY1Y2VjNDNiZmI1ODMwNzdhOWMxNzQxZmE0OTJjZTNkYzJjNzUyOWNkZWQ4MWI4MjgxYTNmMzc1OTQ4YjhhN2NlZDA5NmIyZmFjYzI1ZTM5MDI5ZTIyMWI2NmE1M2QzOTc5ZTFmNDA1ZmQ4OGFmYzA2ZWM2ZTQzMDlkYzg1ZTY5ZDZlZjJiNGI0OTI2NjE2NGE5ZDlkMWMzMWVlMzkyMTEyN2IxMzM4MWJmYjc0MGRkMzhkYzFjNzMxNTkyMWY5YzJmZTU4YjYxYjYzMWE3ZDlmZGUyZGQ4YTRiZTNkZWQwNDkwYWUzYjgzNzY3OTE5NTVjMWM0YjRmZWQwMGI5ZjRjMzhhYjczNTBmYzJlMzdhMzE1MGMxODE2MmIxZmFmMDMzNzg5NGJjMjNlNzRmNTk1ZTRiZTMzNDY2ZGVhYjM1NDU4YmU5N2I0Zjc1NjU4OTdmMDY4NTJmNzFjNjBmZWY5MTAxZDcyNmI3MmUwMTAyYTk3YjJjYTUyMTFlMzgwNjgzNGIwYWMxYTdkZjg3YzJhMDc4ZGYyNjNlZjhiYTQ1N2RjODkxYjdmMmU2Mjc4MTFhYjYyMmI5OTQ2ZjhjNmI3MzFmMjQwNzhkMTdiMDZiMjAwYzM0NDdmODAzMmFhM2U3YTI0M2VlNDIyZGRhMmU2NTJmZDc1NzEzYWZiY2U4YTU5ZWY4NTM2NjUzYTQ4ZGNmNDJhNzBlNzYyMWY5YjI4MDI0MDliZTFjMWE2MWYzMmUzNjc4OWE1YzUwNTVlMWE4MjY4ZTlkYzQzOGMyZTE1MjcKK1NJRzogMTQ0MmRlYTI4MDdlMDMxMTU5ZWM2YTQxMmQ4ZTA3YmIzZTI5OTMwODA5MGYyMThmYTdjMTBhOWM1MDY4ZWY5YjY0ZWYxMWNhOWZiOTJiZTFkMDIxNmI5OTMxOGZmMGYwM2NiODcxY2Q3ZGQ2M2EzOGFlMTcwMjMxM2U1YjI1MGMKKworVFNUOiA5NzMKK1NLOiAgMGM4MDhiMDY2ZjBjOGU4ZGJiMWMyM2Q2YzJjZWRkMGJlODY2ZDg0MjVmMjQxYTkyODU3MDBlYTU0NTM2Y2Y2ZAorUEs6ICA0NGVlNzI5MDA0NTBjNTZhYjIxZjI2ODZkMjk1MjVkMDY2M2UwYmRkODc3MjViZWFjNWQ2OGJhY2ViNjlmMWQyCitNU0c6IGM5NDU3MTQxMDA1ODFmNGUyNGRhMTFmYzBmNmM2ZDAyMTA0MzNmOTc3NzUyNTEyNGM1NWVlMDcyZDg1ZDc5OGI3MDVmOWQzMWM4Zjk3N2RiNmVkZmI3YTY1Yzc4YWQyZDdkMzFkNmI3YjViZTQwZmYxMTc4ZDMwM2I2ODM5YmIwYzYzMjEwYzFkMzM4YzEwM2FmYTBkNDUzZWNhMWJjYTI3N2Q5MzA3NzhhZDUwODAyMjcyZjAzZGJlMjE4NGZjMzFlZjhlYTZhYmUyMTY5OTcxOTlmN2MxYjMzNzczNzk2ODkwNzI3MmFhNTFiZDQ5YzA3Mzg5Yzk1NDY4Y2VmNGZkOTlhZTc4Y2E0NTQyYTJiYmMwZThhYTk1MjE0YWQxY2ZmZjlkNTA4NWE0MzQzOTQ0NzNiODRiNzRiZTliZjJmMDIwMmFkMWVlNDYxNjYwNGNhMWRkNzVmNGExOTUzNDJlYmJmOGZjNTlmM2Y3OTYxNjU1NGRjN2JmZGQ1NTZiZTQzNzIyMWMxMGJmYWQzOWUxMTllMDYwNDViZTVmZWQ2ODNkMzUzNGZiNmNmZWQzMzg5MWM5NmY5YzMzMGYyOGI2ODRmOGZiYWQ0N2MwMTQxOGVhYjZjZWVjYzJlZDc3N2Y0YzIxOGEyN2FjMjI1ODIzOTIzMTVjNTNhYTczMDllYzU0YzYxNzUyMzZlNDQyNGRjOTc4NDY1YWI2MjhkOTU0NGIwYmU4NDEwM2ViNTZmMWJhZmU1ZTVlYWVkMDRjOThiZmUyZThhMjQxOGM2YzUyYTYxZWFjZTg1MjM2YjY2YzdiM2I4NzA3ZWQ1NTY0MWRkOWQ1ZGE5N2M5OWMxMWNiZWI5YWEyZGIxNDc4MjBkYzcyNDgwMGE5ZDgwZjUwNWZhNWFmMjA5MjFjYWQyNDM1NjgzYmI0ZmM2MGJkZGQ0NzVmODYzZTJmNTk1MGQyMzYzOTlkOGQ3NWI0MDRiMzk0YTU0NjczN2Y5M2E2MjQwODcwMGIzYWIzYzFlOTIyYjFhODU5YTI5MTVjMmQzNTM2ODgxNWNkNDViODViMmFjMDgzMTIxZmYwMDBmMDUwZGNkZjQxNWU1Mjc1YTVjNDJkYWUzYjE1NDAwZjNkZGFmOTMzOWYyMGExMjYxYTg4Y2Q5MDIwNTYzOTc2MzIxMTE1MmRmNDE0YTlhNmE2MjE4ZjU2YjM1YTJkZTllODQ4MjQ0OWY2ZGE3N2M5ZTNkNGFmMDQ5MzAxNWE3MjYyMTdmODJhYzU4OTU0ZmUzZTJlMzQ0NDAzNTZiMTEyZTA2YTZmNjcxZmI1YTZlZjQ2MTlhNmVhN2I0ZTA0ZGIzNzU3ZmI2NjRjMzk2YjM0MWNhODkwMDFkYzE2MDRiNTFmYTkxNTNmOTEzMGMxMDIwZmY4ODkwOTI4NzgyM2FiMzkxNWNjYzg1YzRlMzVkZjZjMmY4ZTZmOTAyYmU4MmJhMjEyOTdmZDM4MzVhZmY1Y2UwMmYzYzA3ZGMwOTNmY2IxYWJhMjZlMDZkZmU2ZjAyZGY3OTI5MWFhY2EwNjllY2FiOTM4MTQwNGM5YzNlYTFhZDQwOWFkZjI5MmE5MWUzYTU4MmQ1YTdiNjhmZmJlMTBhMDMwNTI0OGUwOTY3ZTZkZjM3MmYyODFiZDE5MmUxMzk5NzljOTg2NmNhOGZlMWUxMGUwNjE2ZGMyZDRmODVlMTE5ZTBjYjRiZmU4Y2MzMWQ5ZjVjMDE4YjY1NDA4NTI0MDAwYTMwMTZhMjNkOTkxNGQ1N2U5NTU1NzZlMjY2MGIwZTBkOTZjODQ5NWExMmMzZDczMTIyZDIwMGIwZjBlNWViZDQ0NjU2MmIwOGY0NzkzNGFiNDk5YTk2OTkxZGNmOTljOTZhNjI4ODA3Mzk4NDVkMjk4MjAxNTA1NTNlYWU5YmUwYmI0MWQ1M2QzYWYwMWQ5ODY3YmI0NzMyYzkwYmY2ZTEzNzMxNmUzYjFlZGNjMjA5YThhMDlmYjA2MmE2ZWYwNWYzN2U1N2YyYzVkMWQwY2FiYWYwN2E4ZWQ3ZDQxNDU1NDA3YjA5Njc1NDE4MGFhOTZkM2Q5NjU5MTk0NWRkN2ExMDQwYTJkZTYwZDhlMWMwNTRmNzg1NDY1MmI3MzJlN2E4ZjViNjQ3NGMzYmFhMTg0MGZiZTgxYjFlNmI1NGUyMDFlZjBiYzhkMGYyMTNkN2NlYzFkODI0ZDIyMjA5YWM3MjUyNWE2NGI5MDNlNzczYjgzZjFiNjhmNjQwMjc5ZjE1MDUzZDIxZWMxNWNlMmZmNzU5MjIxNzZiNzU4NGExNmJmMWExZjBkNjM2Yjc5NDJhM2Q2MTg2MmY2ZmQxMzA5OTcyZDMxNDFlYjc2OTMxNGNhOTc1ZDAyMGJmMDJiZmRkZjE3ZDE0YjYwZWI3ODZiZjlmNTU5ODlmZTQ3MzMyMGQ0NDI5Njc3ZTMwMWM2ODI2MzNmODEzZmYyNmMwYTNkYTkyZjZkMDY4MDYxNjEwNWIwNDI1YWYzMzhjMmVhNjE1M2JkZDUyMTZmYWUyYWZlNDYxZTkyNDljMDVlMzJmNzZhZDdjNDI5ZDkyNTM0YjY4NmRkMQorU0lHOiAzOGM2ODJjZWRlZmIxM2U0NmIxMWY3YjVmODAwY2M4MTIwZDQ1YTgzY2Q4ZDhkZWMxMGM1NzdiYjAxNTNkNTA5YmE0ZmRmNDAwOTk4Nzg4YjcwNjAwN2NlMTYyYjk2OTQ1YzcxNDBiZWVlNzRlMTlkMDc0M2FmYTRlY2ZkMjUwYQorCitUU1Q6IDk3NAorU0s6ICAwNDlkYWMzYzk3N2Q5ZGY1MDM0OTZiNDNkNzZlNTU0MGUzMTUwMDFhZDU3ZjE1ZWE5ZjA4NzBjYWQyZDRmOWU5CitQSzogIGZjNmY0YjdlYjM5YTcxMTY4MGY5NjZkNDY4YTYxYWJiMTNhOWI2NDQ5YmI5OWZkYTNkMTJjZTFiNTA2ZDFiNGIKK01TRzogN2YzMWUzNDZmNjhkYTczNzE2YWFjYjE2ZWVhMTliYjI0MTQyZGMyODNlNzI2M2ZmYzNmNzA0YTIyYWU1Mjc1YTBlZjk1ZjA2NjliYWU1YTU0YzdmZWI4NGJjNzQ4NzNjY2EwZjMzNWQ2Y2ZmM2Q4YjRhMjAwNTZjNjRmNWU4ODJjYmJiZDJhYzc0MjA3Njc2NDY3ZTU0NjZkZGQ1NmFlZGY1NmUwOTdjN2Y1OWQ5NDU5MTVlYjBlYmQwYzNjODNkNDg4ODhkM2U5ZWRlNTFhZDJkZDhhMGVlMWVhYjRjZjg3ZmZhNzg2MzVhZmM0ZDZlZjNlODdkZGEzYjY1NTY1YzI5ODVhNGFkMGFjZmRmYjgxY2IwZTYxYzY3ODI2YTZlYTBiZWQ0YzA4YWExYTU0MWRlNjA0NTg3MDRhYzIxY2ExMmYxYzgxMThiYjMwOTJjMzVhNDBjOTIxZTY4NDU2NDU2MmMyYzEwNDlkY2RjMmI4ZDZhOTdlMzU2N2QzNTZiZmZiNTY5MmE0MWQ4OWRkZGEwZWMzNTUyMTUyYTI3NTc3ZjFjY2U1N2QwMDk4NmRjYTc3ZWRmNWUyNTE4MTU4MjAwYWRmNjkwYWZmYjMxYWFmMmI1NzQ4MzY4Mzk0NDA5OTlmMTU3OTFjZWE4NTM0MmFjOTRhOTZjN2FmN2ExOWU0OTQzMTBhZTI2Njc1ZjQzYzM1MjU4ZTg1YjY4NDBiOTljNmIwOWNmYTU4ZDE5ZjFlNDNhNzdlMzk3YjA4YzBkYjE4MzBiY2E2N2IzOWVjZDg3NTJkYTYxMWUwODMyYzZjYWU3YmI4Y2U3NGE4MmU3ZTczMzBiZTUwNjJlZDA1YWE1Yzg0NDU3YjAwN2ZiNWNjZGMyMGE1NWQ1NGQ4ZTA0MDljOGJkODM4ODNkMmUwMjlkZmYyNmVhNWRiMjc1ZGNlMDk5ZTQxODY1OWEwNDAwZjEzYmU5ZmZkYzE0ZTdkNjQ1YTk0Njc3Y2E4NDY5NzBiN2U2YWM1MjdmYTAwOWEzNTk0NTRiM2M0OTM2NDkwNTE4OWZiNDljOWJhY2I2NTBjMDNjZDgyODc1ODk0ZTM1NDZiYTAzYzMyZTMzNmZjNjUxNmE4NzY3NmM1MGQ1YjgwYjMwNTQyNzNiMTU3YzVkNzY3NTE0ZTU0NTc0YjhhMTAxOTg1YThlOTY3ZTk1ZGE4ZjkyOTgwMDI2MGUwODE0OGJlZWUyZDc3ODFlOWU4NWQ0NjNhOTRmZmVmZGJiNzVjMjhmYTg4OTgwMTU2ODA5OTk0MjljZWU3OThiM2ZkMmQ5NjczNzg2OGEyNjNmYmE5ZmI2ZjRhYWQ1NmExNWM2NDEyZmY4NWU3ZDM3NTIxMDJkYWFmMjVlNzQ1ZmE1ZjZmMTc0YTIzMWZjY2U4NjI0ZGQ3MDg1NmY5YmFiY2MyMDkxNDRmZjY4NjQ2NDhkZWEwZDY4ODQ1NjZhNGMzOTE0NzgwNWJlMDg0ZTQ3NDBiYzUwOTMwOWJjYjE0Mjk2NGJiMGNmY2Y2NzI2YTBlMDRiYmYzMmFlNjgzNDczMmJkYTAzODRjZWE4ZjRhNDg0OWJiYTBkMTg2NDZjMWMzNDQ3MTg5NmI1YmVmMTQ5ZjhjYWI5ZWM4MzcyMmIwZmIyMDllZmU4YTA0YzRhMjM1ZGM4ZGRiMjBhY2Q5Mjc2NWFmYmYzMDU4NzQwZWE3MGI5YzEwZDljNWFlZjg2MDYyOThmZTQxNTE1OTNiMjFmNzk3ZDkyYWU5ZjFlMDg4MWIwZDI3MWIwZDViMTBjNmVkODNjMzQ5ZWMyNDczZmJmMmZmNzgwZGNkMDc2ZDhjZjBhZWFmYTcxZmUyYjhjNTEyODAxNWY4ZmJiY2ZlY2Q1MjgxY2Q1ZWFjYjZmZTlhYzZlYWE2ZTQ3ZDY2N2I5YWQ0YjdlNDExZTZjYjc0NjNkNTY3NjA3YWZiZmQwNDE4YzRlYjA2YWZlODQ3ZjVlNDBiNDk5NDQzODI4ZDVhMjczYTRhODdlNDZkZWYyMWE5MTlkNzM4NjNhZjAwNTRhMDk5ZTNhZGM1NDUwYjhlMzJmNTFlYTUyYzU5OWE0YTJhMzUzNTE3ODhhZjdjYjcxZTVjNDRiY2I4ZGY1NGE2MDFlNmVjMmMxODI4YjQ4YzRiMWFlNDQ2MzEwNmYxMGVmYTVjYWYzMDkxYWJmOTlhYWJhNTI1MmY0ODRkM2JiYzYyYmZhNmIyYTgwNmQyM2M2MzMxYTYyZmM0NmJjNjI3Njc5ZTczZWM4MmRjYzA4Zjc5MTQzZjRiNzFlY2YzNTdlYTJmMGQ3NGU2ZDMwNThlNjA2MDQzZjZlOGZlZDcwNDI4MmMxNmIxZjk4OGZmYTM2NWNmYWU5YTNjZjc5MmUwYzViYWFkNzBjYTdlMjU3NzYwMThiNWU3ZjBlOTU0NGUxZDczZjNlNWQxZTQxNmE1ZTUwZmJlZDI5NmRjMWJmNGIyOWEzZmJlMzJlZmJkN2U5OWM4MzAxNWQyN2Y1MzVhZGVjZjE3NWZjMzZjMWVhNGY0NDIzYjM2ZGNkYzA1NGJhOTkzMjc4ZTg1YWMzNjIyZDQzNWY1MjM3YmE2MWI0OWEKK1NJRzogNzUzMmQxYTYxYTk4MWYzMDNkN2MyNDU0MzU0Zjk5NTQwY2Q0ODRjZGU5YWIzMzdkNmY3YjUxZjE3OTIyMGY3ZmEyMDczNDc2YjQxYzcxNTI5Zjk4MzZkYjZiMWQwZjVhNDgyYmJiNGM2ODM2NjE3NmVkMTRkNGQ4ZWVmYWRlMGQKKworVFNUOiA5NzUKK1NLOiAgZjA3ZDYxYjVjYTFjMjcwMGNiNTBmOTAwYzI2YjdjMjhmNmM2OTQwODA4YzdiYWZmZjc0ZmNhNGIxMWY0MjVkNAorUEs6ICBlYjI0M2RmYWNjMmRjNjQzNTc3NmQ1NTRlY2VkOGJmOTIzOTA2MDRiMzU1NTdjZGE1MWZkMjAzZWRkYjQ5M2ZhCitNU0c6IGMxYzY3ODQzZDY5YTBlNjJlN2JmNzFmOTAyMDZhM2Q1NTk1Y2EzYzQ4MmFhYTc2N2U5MzFiMGQ2YzJmNDc1MmFiODY5OTFmMDM1ODNiYjEzOGU5ZjcyZmFiNThmZDYwMmE0YjZiMjk2MDJjZjg5MTQwOGFmNWExYmZkMzM5OGMwMTc4YzQ0MTQ2MWUzZjQ5YmM4MWQ2NGMwZDk3ZjVkZWQ2OTJjNzVkNGQ2NGRhYzVkODBkNjNiZDRkYzUyMTBjMWQ5MzUwYjE0MmJhNmU3NjhmMTUwODA3YWI4YTg2Y2FjZGI1OWQ4NGRkZjY2MGJlNTYyMDNjMDE0ZmJhMWUwZGMxNmZhNmQzMjY5NGUxNGIxMjhlZGQxZjZjNmFiNDQ1YTNhZDM0MTc0ZmE5ZTRiMDFmMjViMWQ1ZTZlYjc2OTgzYjQyOTVjZTQ5MTRkM2FlNDhjNzA0YTMwZTU1NGZjMWY4NjhiNjI3MmVmZjA2ZGEyNGJmZTE3ZTRlMGYwZmE0NmJiMDhmZmI5MDdjYjYxYmViZTUyZGYzMTFhNjRjYjU3OGIzMGZkNjI3ZGYxMTIyMWFlNDAwM2EwYjBjNjhlM2M2Zjk1YTIxYzg1MDBkNDFiMmM1ODljYzQ2YTEzOWNhY2ZmNTdkY2YwMDc1OWY1MmU5Y2EzZGFiZGIxNzg4YWI2YjM4YTUwNDhmNThlMDhlMDVjMzk0ZjlkM2M3MjExM2Q0NTJiNzA4NGM1MTlmODZjMTY4OWZmZGJhZTUwNmVkODQ1MDUyMmNiZTQzZGUyN2FhM2JmZGQ5MmE5MWI3MWU1MmEzY2JmNzdjMWJkMjg5M2VhYmQ0MDdhNTdmZTVlMTQ2ODczYmZiMjA0M2Y0YTYxNDdkZjA4M2U1NGEyMjA4ZDE5MjU4MTNmYTQwNGU0YzQ3NDA2ZTc3Mjg2NDNlYmZiMGIxMDE0MmY5MDllZjg1NmZkM2E5MTZiYzA4NTE1NDNiODJhNTVmOGNkNTI5YmQyMWQ5ZTI5MDlkNmQ3ZTc3YmRjZWE0NjczZTU0NWZmNGE2N2ZhMzdkNjVmMWY2M2YxMWQ1ZDBkNTU5NzRhMzBhYmUxODgzMzVkYjVkY2JkMzU2NjU4ZjliNzc2ODJkOTZkYWJiMjU4ZWE5NTk1MWEwNTU5YWVhNDA2NGQ1ZWExNjgwNTAxZGNiNDIyOGYyYzk1NmY4MWQyMTAxMTQ0YWY3NGM3MTZiYzhiZjQyOTZkYzNiODMxNzI1Y2MxN2QzYmZkOTA2NmEyOTk1M2IyZWNkNzUwNTk0MzViNDlhMjVhYzUyNWI0ZmJhYjE3NzkwMjJkZmI2ZGU1MjUxNDlkY2Q5MDJhYzhhN2UyMWYzNDRmNWYwMTAxNDgwNjkyZDYxNjA4OTUyYzcxNDEzZTMwMDM3OTQ1ZTIwNmM1ZWVhZGZjM2VkYzRiYWUwZDc5NmNhMGM1ZjU2ZDZmZmIzZjA5NjlkZjlkZjhhNzk0ZjVkYzgzYTNiMmY1YzNhYjM2YmI5MDFiY2MzMTU1MWM1NTBjNjNmYTQxZDZhOGQ1N2JkYjliNWM2NWJjNjEwYzNhOTg5NzUyYWIyOGEwMTVlN2MyZjZiMmZiZjE5OWE3NmI5NzUwYzBkM2Q1OTIxMTljOGI0MDIyZmE0NWJhZGUyZmJiNDE0MzI2NzliNTJhY2I0NjA4YTk1YzM0YWE0MGJmZmVjMTBiYzk4ZjQ3MjlkZmNjYjY1MGIyYTA1MmRmYjA2ODk1OWU2NDhhOTJkNWFhNGRkMmQxN2RkZTY3Y2RmMmU2Mzc3YWYwZDRhZTM3OTYwNzM4OWQ3ZTM1OTY0NDFiOWY0MjIyY2ZmNmFmNzNiMzMwMDI3MGNlNTQ4MDBiZDkzNGE5MTA5YTAyNTYzYWRjNTZhZTQ2NTg0NDUxY2RhZjRhNzc1MzgxNTdlNTg3MGY0YWUxMmRiYzgxODcwZjVkYjQxYTJjYjU1ZTAwZGIzZDIyMzE2MjhmMTcyN2MzYWNiOTllZDNhY2Q4YjY3MTU2YTgwMDVhNGNjOGYzZDM1NTViNzlhMDM3NzNhOTMxZjE0ZWViY2U0MGI5ZmU0NmVkZTVkYTA4ODFmYjIyMDcxN2U0MThlOGI1YTBmZTVlNDc3ZTcyODVjNTU0ZTg1OWUxNjQ0MTY3MmI0ODk5MzRhM2E5ZWViODhkNzhmY2M1YzFkYjJkMWZiZGRlMzkyNzczZjZjOTM5OTcyZWU4ZmEzMTg5ZjRlOTg3MmI0YWJkYzgzYjM3OWMwYzEwZTgxOGRjZmY3NWM4M2Q2ODcwNzI5Mjg0Y2VkNDFmMmZmNTVhODdjOTYwZTYzZDEyMTFmMDgwNzEyOTNmNmFjNjNmOWJkZWYzOGZkNTkxOWNhOTBiM2Y1ZTI1YTZjMGM2NjRjNGVjZjgzMWM2NGUyZDRjNmU3OThhOThhM2EwZjdiZTdhMjQ2M2VhZGFhNmEyYTM0OGY5YTQ5NDcxNzEyM2NjMGEyOGMwYTVlYWUzZjViNTg1ZjJjYjhjYjI2MGMyYzUwM2U0MTU3ODU3M2NkOWI3Y2JhMTQwOGRjYTlkODYwYWU0ZjhjM2QzZjMyMmE0NWI1OGEyYzQKK1NJRzogYzE5YjUzMmI4MjQ4NTYzOTMyNjM5NzAxYmYxNWJjMDE1ZmFlYmIxN2JiOThkODcxNjE2ZTEwNDhkNjRjYTVmOTU1ZjU1OGY2M2I1MzUzYTE1NzZmYTFhY2FlZjM5YmNiYzkwMjE3NTZkZjVkMWFiM2JjNzQxYWNjZjkwNTliMDQKKworVFNUOiA5NzYKK1NLOiAgNTA4NjRhNzVhYTBjNjliNTkzNTAwNzdjMjA0YjIwNzU3ZjJiOGI2ODU1YzM3ZWQ3MjFiNDlmMmFjOTE3ZDZiMgorUEs6ICBjZmYzZWJkNWVhMGM4YjU1MzFkOTIxMWUyMjE5ZTRjZmU1ZGVkOTkxZDhlYzQyNGRmNTRjZjUzYzgzNzZmOWJkCitNU0c6IGIzNjVmNDc2YWM5MmU3NjAxMmE3ZmZkODc4MmFmMTVhM2Y1ZWUxNDdmNjAzYTM2N2FkZjJmOTcyNDYxM2U4NzY1YjAzN2FjMGViMWY2NzM3MzZlMTEzNjNlMzUyZWQ1YWU5ZWI1YTY3MTI1ZWQ4MTg5MDAzNDJhZTkzMzcxYzQzM2I5MWY2MDIxZDRiZTJhMDUyYjBkYTQzYjM2ODJlN2Y3NDBhZTgwMWQwNTQxMDU3ODU4ZWIwYzljMjhkOThmMDNiNDVlMTI4YWFhMzQyYzZiNjAyNzc2NzkyYWE4MTI0MWNhZDA2ZjEzMzhmYTBjNzE3NTcxODBmNTg4YzgzMDFkOTFjMjc2NzliNTAyMWNkNzVkN2Y2MTcxZWU5ZjhkNTZlNDM3NzY3OTgxMmY2ZWM1ZWQ0NjUzOGNhZWQ1MDBjMWQxNWY1ZmM4NmVhZjllZDljZjlhMDYwNmIyMjYxNGZhZjY3NjQ2MjEzNGUzZGIzNTgyMzMyYjQ4M2RmYTU0Y2EyOWE1ZWIwZDZiYWUzMzgwZTE5ZDA2MDExMzQ1M2YzMmJiYWI3ZTExODYyN2I0MGJjYWJmMTcxMWJjZmVhYjg5NTdkZTMzOTQzNmM3MDg4YmI4ODMxMDE1MzlhMDlkM2JlZjA4OGZjMWY4NDA3NjQwMzZmZmJiMzNkZWNkMTJhYWM1N2ZkMjZmODQ4MjNlMTk1NTNkNGQ2N2UwMDBlOTQzNmNhMzIzZGUwOTliYzFjZTc1ZWJmNWRkY2NiNDQ4Y2Q3YTJlNGJiZDZiMzJlM2YyMDI0Zjk2Y2M1YzcxNTJiOGJlOGVkMGJkOGU0MzZkMzI0ZDFjZTFkZDNjZmNjNDUyYTI4YzczYTk1YWY4NDgyYWE3NzJhZTUzZDViZTEyOTJlMzlkMTcxNmI0Mzc1OGZlNTYzYzhhYTNiNzRiYmE1YzAyZDA0Nzc4ZDkxZTNkNDNkY2M3MmJiN2M3YjA0M2MwNWM4NzQ1YjcwNWVlNzViNWE0ZWM3Yjk1YjY1NDM1OWZiNWU4NTMzMzgyMTk4NTFkNDBhOGFmYmI0ZjkxZWNiYjQxZWI4MTUzNDE5NmNjMGNjOWQzZWI3MTQzOTZjYWYwNDViMjMxNzIyZDQ0ODY1MDM2NDA0MTk5ODg0ODBhNzgxNTgwOGJlOTc0Mjg3MzcyY2ZjNDg5OTY1YWFjNWI4MDk1YzYzNzU4MWViOTEwZjkwNTVjZDFjMGEwYTNiMGIzM2FjYTkwZjdjNWI4ZTZlZjY4M2FiZjBjZTUzYWViYTUxYmVjNGZjN2I0MjdhMjM0NzM2MGZjYTg2MzZkM2YxNDY5Mjg0ZjI2OWE5YWJmMGNiMWEyNDRhMTVkNmI0MDQ2NWU3NWNmODkwOTI0NzRhOGJlZGEwMzMzOTFkZDMxMWM0OTk1MTlhMDhjNGYwMzRlNzE5MThkN2NhZDQxODQ1MzI3Yzg5ZTdiMWU5NGFmYjA3MjM3ODJjZTVjNTUzZWYzNjc5MWJiYTYzZGUxN2Q3NDY0OTE4OTQwMTJjZWJkODdiMTgzN2E4MjFlZjVjNjI0YmJjODRjYzUwMzVmNWU3MGNkOWYyMWI0MjIxOWEyZGNlMzBlMGU2NWMyNTBkMGQxOTRkMmI1MjQ4NmIwM2VlNjYzMzI5ODFhNTIyNTE3NGRiMTdlNWE4YmI0YTEwZWQ5YzhhNDQ1YzQxNDQyZjNiY2RiNmI0ZjQ5ZTRlMWRjODc2NjFhN2I2ZTQxZjM1ZjU1ZGQ2N2JkNGNiYzZmZjU4YmZiZmZhZmZkMmMzODJmY2FkMGNhZThmMGRmOWFmNmFjZjA5NDAwMDc2MThhNTRhZWUzMWQ5MzJjYmQ4ZThiNDFjYTAzODIxYzQyOGEwZWY4ZTU4ZDI0MzVlZWNkNTAzYzU0ZGE5YzE2MjhmM2M3NDliNzcwNTE5ZjUzYmYyZDU3ZWQ3MTJkMDc1ZDM3MzM3Yjc3YTJiMTBhNzJkMmQ1OTBjMjBkNWNlYzJjYWNjNmMzYThkYzExM2UyZDE2ZWYyZDFiMzkwZWQ5NmU0MDM2YWNkMzA0ZTBjN2NlZjlkNDMxZjg4MjE4YWExZjgzODI4ZGRhNjM2Yjk0YWE3NjFjNzMxN2VjZjExNmNiZmM2MTFlNWJhNmQ5NGM1MGU5OTQ2OTMwMjNiZGYyZDI0OGVkNjAzZjg1YmU3M2EwMDA4Yjc1YWRlZjk1MWRjY2ZhMzBlNDJlOWY1YmIwNTAyM2FkZTc5NzUwNmNiZjkwYmI2ZGNlNDNjZjNhMWMzMTQxYTVjYzVmZDlhNGYzY2M1NTdiOTBlMTgwNDliM2MxMzBmNDYxZTRmMzIyOTlmYTFkMWNmOWM3ZjJlYTIwNTM1NjVlODE2MGEzNDFjZGRmOTlhY2RkZDQ5MTY5N2ZhNzA1MTI0YWJkYWI0MmE1ZThmY2YwNDhkZDlmMTc5Mzg0ZWM5MmE0NjlhZWIxMWU4YmM2MmI2OWRiY2ZjZWM2NjgxNzU0NzU3ZTRjNWQwZmRkOWI5Y2ZkYTQ5YWYwOWI4M2E1YTRhMTBhZWQ5YTRjZjdkZGZhMjg5MjA5ZDQ3NWFiMzMxOGNkNGI5NjVlMDA3ZGNlMQorU0lHOiAxNzc0NTVhNzE2OTRmMTJiNzYyZmQxN2UwOGJkZjAxMGE3ZmM5MWQxOTE0MWQ3YWUyMzk5YmQyNDFhOTk4YTZhNTBhOTcyMmFjMTIzMmM1OWU0ZTJhYWE4MjgwNzhiMmI5MmY0YTU0Y2RmMGVmZWJiYTJjMTZkYmVhZjA3MjIwMworCitUU1Q6IDk3NworU0s6ICBlNTVmMjIwZmZmODA3OTE0OGIyNTQxODliYjI5NDE3NGY4ZTJjNTc1ZTU3ZjM5ZDRiYWM4MTY1YzVlNTZlNzY5CitQSzogIDdmZDUwN2QwM2ZlMWQ2ZTNmOTExZjA1OTU5N2IwZTI5MmVhMDk2ZjViYzg1MTg1MjkxNmJmMTIxN2NhZmRjNmMKK01TRzogMWUyY2U4YmYwZWE3ODc1ZGYyODViMWRiZDM0YmJlNjczMDdmMmU4YWM4YmMxNDJjM2JhMzE0YzE2NDJjNjVhMmQ2MmViMmM3ODNmOTE2MjgzY2E0ZWMzZTUzNmQzZWViNjVjZmRjYzA1NDlhYzRmNmE0NWY1MzlhYzVkZjc5YTZkNTc2ODIxOTczOWQwYzlhMGNkYmIzMTI0MjI5NmMzMzEyYjdlZDU2MDA0M2Y1MzZjZDFkZTlhOWMyYjI4OTY0MWExYzJkODRmOWE2OGI3YzAzYjhiODU2N2U1ZGM3MTM4YzJjYjk2N2M2MjhhYTI1YjJlYWI0MzRkNDQ5MGIyMzUwNzQwOTcxN2NkZTk0ZGE1OWRjMWRjMjVjN2JlNDJhOGFhMDJlZGNmNGQ5OTUzNjhlNmJhMGVlMWY5NTM2MDBkYjk4ZDIyZGUwZjhkMjU3MDIwZTBhNDA2ZWUxNjY5YmQ1MjdiOWZlMWM2MTFmOWJlNWEzZDc1MjhlOGI2MTUxNjcwYTg2NjNkMmVkMWE1OGQzZTM2OWJiNzIyYTYzMDJkN2MxNzJhMTliZGFmMzU3ZWVkYjAyMjc5MTU2ZTNiOTAzNDQzMWE3ZDY4YTM5NTI4ZWI0MDIzNTg3NTczZWI4OGYzMGY5NGU4MzNlOGEyM2I5ZDBhYzdiNWNhODc4MjQ1OTZiYmIwYTNkMGNhMWIxNmE2ODc4ZmRmN2UyY2VhMzRhNmZmYjk1YTlmZjRlODg4YTk3NTkzNzM1Yjg2OGRhNzVkODcwN2JiZmRiMWQ5M2ViODZhNTFlMmQyMTVmMWRkOWRjZjc4Mzg4NzI5YTNlYjBmMDY2ZGRjOTQxZTk1MGM5MjEyNzE5OGJjZTYzYTU0ODY4ZDk5NzAyOTU3MmZmYTZmNmZlYTFkM2E2OTE2NGM5OTk2OTUzZGM4YjZmOWRhZDA2MzVjOWIwODFmNTVmOTgzMzQwZjA4MTRiZjU0NzA4MDMwOTBlNzk5N2Y3YWI3OTZjMmIxNWFkYWY0MDIxZDY3Y2ZmYWY2ZTFlZjYyODY3NTAzOTQ1YzIxYTMyOTY2NGUwOGE5NWE0MTU4MjMwMGRhOWJlZDIwODQ0NGNlNmFhMTJiM2Y4Njc3OTVjNmVlNGM0YzkyNTcwMTg2MjczNjEyOTNiZDUyNzgyMWEyOWEzMzliNDA0YTJkYTRiZDk5NDRmODc3MDQwNzk4YmI1NGFiZDJkNzZjYmIxOGRmNDI5N2Y0Y2UzMzM3ZjY0ZDIwNTgwYWE2NGJkZWNhYzM3NmE2YTRmZjc0ZDAxNDRiMmZlNzRjZWY4MmQ1MGE1ZTZiZGQ3OTllNTVmZjY5NjYyYmFjNTM3YWRjYjY4ODEyMjhjYjYzNzA0NTAwYzE0M2E0ZjRkMWRiMjhkNDU1NmJlZTYwNGEzOTlmZmQyMDY1NDY1OTdkZWU5MjI1MjU0N2Y2YzY1N2YzNjg0MWE4N2Q1NjVmNjU1MjcxNmMyNWEyMTE1MTQ3N2JlZTllZjk2MTg1NWZiMWFmMmRhODA2OGYyOGNlOWZmNzBkNTI1MmM3YTYzYTJlMTRkZWQ2Yjg5NzdiMWQ3NjkxYTc3ZWQyZTU3ZDIyZmYyZTFmYzRjZGJjZWI1ZTgwNTg1OGQ5MDM4OTZlYTY3MDdlNDhiMzQ1ZjYwZTI4MThiMmZjZWM0ZGJhNDhjYWVhOWVmYTM4Mjc5ZmI4M2Q1YjBmNDZhNDVlNDJjNDE3NjVkMDE3MWJhYWNkOGQ2ZGRhNzk5MTMxNGIzNGUxNWZkMzYxMjdjNDY3ZDFkZTAxYzAxYTNhNzhhOGMxYjEwM2JlZTE3YTdhMGI3YWM1NTc2ZmRjMjI2ZGQyNDU5NzczMTQ2Y2YzODI2MTQxN2NhMTkxMzVkYmRhOWJkYmU1NGNkMTdhYTdkZGQzOGZkY2FjMmFiYTM5NmIzNjVjZWFlOTg5MTlmNmM1MTc3ZmM1ODNmNWJlZTNmNDg3MDQ5MTQzMDZhYTE5ZWU5MGUzZmQwZGU1NTkxYzY2OWZmMzVhYjE2ZmVmMzhkZWUxODdiYWUxZTVhYWE1NjZkZjEwNTQ0YjdkNmQ0ZWIwMGRhN2ViZWI0ZWNkY2M0ZDhlMzJiNDljYmJkYzZlNjY2NDBiZGIwZjcyZTA1OTE4YTA1YzM1ZDliZmY3ZTBlODhmMjQxZDdjNmM4Y2IyZmVkY2NkZjY1NTYwYWYwZTc4MzNlZmUzNGFmNzkwZGI2MzE4OTAyMmNmZDcxZmM4YWNmODg4NjAxMjdiZDRmYmYwMjZiY2JlMzYwZTMzYTg5OTVlNjM2ZDAzYmI4NmRmZDAxOThhZGE5NTkzNDJkOGU5YzllZDkzZTIzMjk3ZGE5OGQ2NmEwZDRmYzk2NTE2MjczM2JjODY1NDFiOTVhNmM5MDk3Y2I1NWE5NzNjNmZhYzE5NGU4ZjhhMTY0Mjc0YzQ3OWM1MTBlNjJkOGEwMzVlYjc1MTE4MWI1MDJhZmI2MTRkOGM0NDY3YjU0NDVjMjY4ZGMzZGQwYWJiZDU3NzAwNGMwYmM0N2IxNWZjYjgwMWI3OTM1OTc1N2I1ZWE4OWNmOGNmNzdmYzZkMTYwZTZjZDczYzQKK1NJRzogYzEwMjNhNzA2ODc0M2VjNDY2OGY0OTVlYjdiZDRkYjU4MTI5YzExZTU4Mjk5ZWE4N2Q2ZmFjZDMwMmJmMjk2YTk4ZTI5OGZkYjQ4ZWRkZjljNDRlNzlhZTg2NDFmNzM0NTAzYmI4M2RjMGIzMWY2MTBkZjFkMWU5ZDYxOWE3MDUKKworVFNUOiA5NzgKK1NLOiAgZDVlM2E0MDY3MWJkNDVmMDg4NDJkZGM3OGFiZTU3ZGUzYjljZTU2NDZiNzMwZDJlNTlmZWNmNWE3ZGY4MGY0MAorUEs6ICA0MTZjMzdhZTFhZDE1YjYzMmIwZWE0MzkzMmMxNzYzNzI4MmNkOTFkNTk3OTU1MmU1ZWViYjk5YTQxOWQ1Yzk3CitNU0c6IDA5ZmU2ZmZhOGJmMDk0MmE2NDkyMTM1NzY1OWRiYzZlNGY4YjYzY2EzYjllYTQ3NWVhMzlkNzkyNTI5MGExNDhkODdiYjE1NTc0MWRmYTI4YWUxYmVhZGMxZjNlMWFiNzY3MzdlYjVkNWRkYWRlZDBiYjM4MmQ3ZTExZWE4MWE1ZTc4MDE2MTI2OTYyNjBiYTNiZDA5YzgwYjYyM2Y2MzYzODBhYTAyMDhmZWUwYWZmNzA4MTJkNTMwN2IyNzE4MzgzMjM0M2RlYmFhMzYwNWRkYWQxN2RkZDcwZDYxMTQwMGRkZDEwZDYzOGFhM2Q2YzY4YTI4Y2YwZTk3YzFkZWRmNmNjZDljNzMxYTg0ZmYwNDA1YTNhMjJkY2JhMDBhYjQ0ZDViMjE4NDRmMTRkMTM3NGFjMGNiMWU1OGRmNGE5MGM0MTI1NjNjZmU2OWQ4ODJkMzUwZjZhYWZiZmE2NGZhMmY5ZmY4MjYwMzIzMjY3ODBhZWNmOTMwNWQ4MjE3YzE3OWRiYjYzYzE1MTU0MTIzMmViNjU5NzkyNjVkODc2YzRiYzQzMDVjMDJmNDBiYzFkMDVkYmFmN2RjZjRmN2RkOTIzMmMxN2VlMGY3YTA1NTVmNTA0YmEzNzc0NTQ4NDg4OTMzZTc1NzFlYjNmNzFjNGNiYjIwY2M0ZTRhNzMyMmYzNWFjMGU3OWE1OTE1NTc5OGRkMGY1YjNjMTEzMTliN2Q4ZjNlYTc5ZWUzYWNjNjhiZGI5ZjM3YzdkNGM4ZjljYWJhMWViZjhlYjdmNDNiNDYyYWVmZDM4ZThjMGQ0YzYzOTc5Y2Y2NjMxZGVjMzFhYjVjZWQzOTM3ZWY1YjIzNjJjYjA5YzcxZGQwOTY2NTc3MDBmZDk2YmRhNTU1ZTIyNzEyZjcxYWVjMTFhZTVlOTFiMjRiZDE2NDk0OThiOGQ5Zjg2N2ZiNmM0MWUwNzYwODBmNzQwZDA3NGMyYTI1NTcyZDM0ZTY2NmI2MzY3YmY3Y2JiM2RkNDJhMjM4MmRjMTk3Mzk2MTI2ODYwNTM5NjgxMGE0NTZhYzA4MWJiZmQzYTU0YjQ0ODgxZmNmYzQ1YjQyNDVlZTcyNDY1YjQ4N2QwN2YyZWYzZjc0YWRkNzFjZGZkZDE2ZTkyZmUyNTdkMzM0NjQ1YjBhOWJjN2QwNzI2MTNmYjljMGNkZWE5ZGI0YzcyYmM4NzEwOWUxMDJkN2NiYWYzNjZlY2Q2N2ZiZTNkZWQzMjc0NzMwN2E3YWVlZjYxNzM1YWQzYWE1Y2U5NWRlZWNjMTZhMTZlYjJhMGJjYzdhZGMwYTExZDg4ODAzMjI2MGU3YzdlYzllNTRmNWEyNTMxNzAyYTdlNWRmYjg3YzM2Y2UzMTNhMzE0NzU4OGFlZjk2MmM3MmZhOTY2ZDI0MTYzN2MzODhiODNkZGVjOTM0M2JiODYzNDNlOTIwYjEyY2UxY2M5MTVjODNiMzFlOTk4NjI2OTA2NzRlYTQ5MzVhNDg4MDlkNGQyNzkwNTQxMzc1NDYzOTJhZDlmMDhlN2I4ZGU2MWFlNzNlODFlNDgzZDNjNjNiNWFlNzM0ZTE4ZTdhMjJmZWVkMTIzM2QwY2E2MzM1NWYzYTQ4YTMzMDY3ZTFhMGUxOTcxZjM2YWE5MjlmZTA2MTNjMjFjNGFlZmY5NDE4NDI5YzNiMDcyYTU5ODQ5NTkyODdhNWU1YzQwYmUwMmJkMjJiOWE3OWM3ZjNmNTM1OWQyYmJlNDkzZjU1NmRhY2JiMGNiNGMyOTNjN2Q5NDEyNjVlNzc3MzkyZDE0OGQ2OGMwN2ExM2M4ZGVjOGU1ZDFlMWM3ZjA0MWU4OTgzZWRkZGFhNDY0OWRhYzE1NzJhMzlhZTRjNjQ4MGNhNTUwZTJlNDQ2MmRjYzg0OWMxYmFiNzgxZDI4YTM1NTJiMmQ5OGUwMmUxNTE4ZTY1NTUzNDBmYjc2ZDY4ZGI1ODkxNmQ1NTZhN2I4MTU2M2FiYTgxZDlhNTdhZTUwZjA0Y2Y1Njg2MDIxODQ3ZDc5YjZiYjNkYTgwMTdhNjBiMWMzYmVlZmQ0OGQyYjNjZDM5YzZmNTNjMDhiY2M5NjdkOTMwNjlmNTYyYmIzNmUwYzRmNGNhNmJjY2M1ZTU3ZDM1OTAzY2Q4MDBhNjE3ODVhOTM3NzBlMzc3ZjRmZThlOWY0YjY2NjgwOTg0OTY4Zjk2NDllMTA1ZTdhMTE5ZDk3NjM2ZjNhMDVjYWVhYjFkN2VhMGJjODEzMzRiNDJkNWNjMDgwODMwZWMyNGQzNjljZjg2NzNhNDkwZDU5ZWI0Y2IwODE4MWRhMzlhNDZkOTY2ZTIzZmVkOGQzOGE1ZmFiYzdlODQzYmNmYjAxNWE0NDc0YmZkNDZkNGE0M2ZmNGE1MWE5NTY3NjYxZTI2OTZkYjg3YzM3NThkM2I1NGNlNzg0NmQxMzkxZDdmNDY1MjZlZjMwODQ0ZDQ5MzIwMDE4ZDc0OWI1ZDRkZmQzMGQzODBjNmU1NzNmYzQxNGQ4ZmVmYzVkNzEwNDcwNzU2YmVjMDBkODhhYzRhZmM5MjVkMWVkZTM3ZWFlZTYwMDRhMjNlYTBlZjhiNjBlNDgKK1NJRzogNjNkZTZhOTgxMTQyMzY1YTNlNTkyNjMxYzgyNzcyMzc4MDk3MzlkMWM5OGY1YTFjYjJjY2NkMzQwNjdkMWNhNWRjOGYyZmM2M2I4YWUxYTY4OWRjYWEyOTFiYTZiNjliMWE2Nzk1YzU3OWE1ZGI2ZGNjZWU3M2Y2YTQyMGFjMGEKKworVFNUOiA5NzkKK1NLOiAgNGVkNzA0OGFhMTI4NGRiYmNjMjQ4OTM4YjQwYzM1NzQyMTkzNTk3YWRkYWZkZGUwNjQxM2I4ZDRjY2ZiZTEzNworUEs6ICBiZjg0MWZlNDQ0YWRkMWY3YzNlYWNkZmQwNzg0YjRlODU1ZDI0MDVmNDAyMWNkOWQ4MjY2MDcxYzMyYzhhMjczCitNU0c6IGRjZmY5NTg3ZDYwNDZjMTEzMmJlMDdkZjI2ZGY2MzgyZmY5MmNmYzhlYjUzNDVjNTFkZDUwZGQxODhlZTc2OWYxMGE0ZGU1ZTg4ODNkMTE2OTY3YmVhOTdkM2IzMmJjOGFlYmI5ZjAxM2Q2ZGY5NTJmMjUxYzFhMzEyMzQ2ZTcyY2VlMTM1YTFiZmQ3NmJmMzA4MGEzNWM4MzhiNDRkNzU1ZjI2M2QyMTAzMTBmYThkMjhjNGNhNTJmMDhjYWM1YjgzYThhM2IxZGZjNDZkOWI3NTJkOWZjNzM2NDlkMDBiYjllZTk5MjY1MDYzOWMyMjVkZWFjMWYzOWI5ZTgwMzY4OWQxOWU2ZDlmOGVmNGY1MWYxZDExNjAxZmFjZjQxMGRiNjQ4YmNjODJiZjY0ODc2OWE3ZGQ1OWM2ZThhMjM3ZGIyMzlkM2Y2NjFkNzg1MmM0MjZkMzk0YTkwNTA5NTI2YTg1OWI0NzY0NTlkZWRiZTZkODk5MzZjMGYzOTg5OTk1NTExZDRhNTc2ZTU0MmNjZTVlMGRkN2VlZWZlYjAzMjZkMzNmMjVjMjJhYjZlNzY5MDYzM2Y0YzllZDJhYWRmMWQyNGY5NDg2MjEyM2E0NjQwNDJjZWExOTNhMmYwNDc5ZDM5YmNkMWJiZDFjN2EwY2E3ZTYyNThlZDM3MzIzNzJmNTRlMGVkNWUzZjFlMmU0ZDRhMDRjNTEwYmVlMDhkMWM2ZDU3MGNmZDYzYWJmMTRiNGVlZjBiOTZmMzljYTI5ZTQzYzUyZjJjYTNkZmQ0NjBmNjZlMzAyMzViMTU5YWFlZjJjYzE1NjAxMjk2OWZkM2QxNTk5NzhkNmNhYTBhOTQ1MjIyOTFmNzk4OWQ4YWYxMDgzMTk5NjEzN2I2OGQ5N2ZjMTdmNmE5YmMyODQ1ZWYzZGQ0N2NiYzM4NmU4OTc3YTg2NTQzNjM0MTJkYWMzYWM1MWM2MzgxN2I3YzA1MTg3OGRjZjQ1OGFiMzYzMGRkN2FlZjY4ZDI3MGY4ZGE3ODgwYTQ2N2IzMzA0ZjViYWVkZmJhOTE3M2U3ZWZkMDA3YzQxMmQxNzIwOWM1NmQyMzk2OGUzNDBiOGEwZWRiNDFiN2UyYTQwODhiZWMwMWI1MzJkZjg5YjUyMTU4MTMxMzExMDdiN2I0NzRmMDNjMmU0N2Q0MzE3ZjExYzRmNTE2MDkwNDMwNDk5N2U3NmExMjFhOTU2MDIzNTIwOGQ3OWIyZGFiNGY3ZTE5Njc5MzIwMmMwOTAyY2U5YzRiZmMxMGI4ZmUzOTdlMzVjYTAyNTY0NTQ2NjJhZTg3OGVmYjBhMGE2MDZmYWMwYTk1MmM5ZjZiYWFlYjJkNDViMjU4YzYxNzU1OWMwZWQyNTI4YTg4YjQ5YWE0NGVlNDMwMzViMGQ3OTNhYWQzOTUzYzFhNWEzNDYzODY2YmM4MTViMWZmY2UyZmYyYjY1ZTBmZDQ3ZGJjMTVmNGU3YTA2YmZhYmMyOTBmYzYyMDkwYmY3ZDk0ODUzZjc3YzA0NDRhOWI5MGVmZTc3ZDFjZWI0YmQzOWUyMDNiYzg4NDAxMTYyNGU2ODQ2ZTJhMzcxMDU4ZGFiYTYzYzIzZjg2YzQyYzNlMzFlYWE0YmQ3ZDdhNDJhZjJkNTI0ODk2ZTMxYmFhM2UyMDc2M2Y4NWRjZmQ1Mjc3NWYyODA3MmQ4OWYwYmQ0ZmFlMzBkMGIxMzdlZTM3YWIwNjNiYTA2ZmU5ZDRlYzYyYWJiMmZlYTBmODFiOGNiZWVmYzAzMDA4MGI4MDI2YTU4ZmQxODY3ZjY2YmUxMTU0ZTY1YmZlYTdkY2VjNTVmZTMyZDUxZmIwYjRhOGE1YThhMDQ0MjYzOTQzZDZhYzgwMTFjNmU2NzAxYmVlYzNhODg2NTU4NDBjNDg5MmQ0NTBkMzEyYjc2NTJkMjUxNDc2OWYyM2JmZDZlNzA0NjQ2N2RmMjlhMjg3ZmYzYzRjOWQwZTY0ZTZkOWU0ZWRlZTFiOTM1ZDA3NjgxZDQ3MDA0MzUyODg2ZTg0N2IwYzZkNTc2MmZkNDVhODFhNTNjY2U5NDc2Yzg4NzIyMWFlYTZjMGM4MmJiZjNiMjk3OTMyZTViMTFlNTM4YTMyNDVkNjNkN2I3YjA5MWRmYTFkN2I5YTBlMmRiNjY5OGE0YzVlOWZlOTMxNjYyZDdjNmVjNmQ5ZDViOTJiYzdlMDQxNTU1ZGY0ZGYwY2ExMWNhYmM0ODVmOWM1NTYxMzhhNzE3NDVmMDNiOTc4M2JiMjAwYjcyZDIzMzY5N2U4YmNmNmI0MTE3ZWU2NzYzZDc5MmQ3NDIyMjY0ODUyZjRmMzBmOGQxODkwZTJlYTA4MDk4MDQwZjdmMjg4ZTRhYmU5MGI2M2NhYjJjMTQzNzMwNjA4NDBlZjgyN2VjYzg0NmNkNTYwZTkwYTIwYjgzMDVmNDYzYzM2ZWEwMzg4NGE1ZGY0YzI1ZjFiYTllYTEyNTk1MmRjMDkxYjk3NTE2ZGUxZDI4N2MwZTJiZjUyOTc3NWJhNmQyZjhlZGUwM2NiNDJjMWU0MDBlYzgwNGE5ZGYwOGU0NmY0NGI1MDY2MzQ2ZTNmN2M3YTFhOAorU0lHOiAxMDZhOWRlYjIzMjdmMzM4Y2NiNzFiY2M5NGUyZmUzZDJlOTczY2U2ZGQ4ZmE3YmFjYTgwOGI0MTExODEzZTNiYzNiNGQ4OGVmYTZhMDBjNDcxMGJiZmU1MzE5NmY5YWIzYTE1MGIxNjU0YjkwOGZlYWNmOWMxM2RmMmQ2MzgwMgorCitUU1Q6IDk4MAorU0s6ICBjN2VjYTgzZTk0ODU3NmJkOWYyNzhmZDdiODI4MDBhNDFkOTJkYTliNzJkNWExY2NkYmJjNjU1ODEwNTI1NjhiCitQSzogIDA3NmI4MzUyZGNhODAzMWU4NTNjOGQ5MDk5YzJlZjU3OTMzN2NjN2IyYjRjNzVkMWEwNjNlYTNlYzcyNWI3ZmQKK01TRzogOGQ4Y2VmZDY3Mzg1NWNjZDhlYjg1MzRjMzEyZDMzODAwNWJiMDVmNWI5NTA3ZDU4ODU5ZTFlOTUzYjBhNGQ5MTNiZTc1OWQ4ZWRmYTkyODk4YzZlNzBhNTNmODE5NTRmYzM0NGI0YWQ2MjQ2YjAxMDk0ODFiYTZmNzNhZTYzMzFhYmYyZGYxMDhlYjJlODVjZWIwODdjMWY2ZmNmYzlkZTJjMWYxMzliYTE3NzFiNzI2ODAzMDJkODExY2NkMGNjZDRlMGM3ZmViMDEzMmViMjBiMzM0ZTVhYWJlNWY2MTE5ZmQ4OTQ3ZDllODg1MmUxZWIxYjc0MTA3ZTE3NDEwMGUzZTZkZjBjM2E2ODEzMGNhNjMwOTQwMjU5NGJiNTBjMWM4ZTI3NzRmMTMyMTQ0OTZhN2IxZjM0ODM4NWVhYmZiY2NiYWMxNjVhNWEyZTdkOWRlYTVmZmQ1OGIwYmQ4OGI0OWNiMzMxZWNiN2Y0ZTlkNmJhZTk3OTFhZDc4OGU2YWI4OTI2YzFjYzE2MTVkZWFmNGNjNDAwYzc3YTMxNjE5N2JjYTE5MDQ5OTVlMTM2NWQxYjk3MDI2NDgzNzYxMTY5MzBmNmY5MTE2NmU2MTQ4NjI5ZTc1YmUyZDA2ODk1ZjZhOGQxNWQ1YTk0Y2E2OWI3MTJmMzNiY2Y5NWJlMGMxYmU2OTAyYmI3OGI4YTIzMGQ3YTg1NjBjNGQ4NGUyMzg5NTUyYTgxNTcxYWE2NjVjMTljMmU5M2IwZDQzZThjMmNiZDllODg1ZDcwNTI1MThiNzdjNDdlODQxZDExOWRjMjhiNjVhNzUwNGY2NjQyNzFmMDZjN2ZmMzkzZjgyNWIxZTU5MzBkMDJiOWM3MDAzNWUyOTI0MTFjNGFlZGY2NjA0NzAwNjk3MGUzNDlkZmNhN2ZiNDFjMTBmZDUzN2UzNTI1MmUxMDllMzMzNmQ3YTgyYTE0ZGU1ZDU1NDBjNmZjNjU3MWQ1Nzc0ZjM5YjdjNDAzZTdiODg3NWVjMjE1ODc3ZWZjNmNjOGVhNDhiMTg2YjQ2ODIxZWE1ZWYyYmE4YmFjZDQwZDc5N2U2YWRkMDY0MTMyODMxNDViNjA0NjJiMzUwM2M1Yjg4MWQ3OWE1OTI5NTVkMThhZmEwODk2OWUzMTQ1N2Y1YjI3ZGFlYzAxMDMzOGVkODY3ZjMwMDg3OGZkODdjZTMyMTg4MGI4NjBhMGM2NDI4NGNhMmRjMTVmNWU1MzEwZTEwZTZhNzNhN2VhNjUwZWE5ZDM3MzY5NGRhNGRkNDI5YWU3NDEyZWY5YjI5YzgzYjNiMDY4Yzc0NzY5ZjQzMWNlMDYxNWY5ZmY0ZjgyYmFhYzQ3YjRiY2U5MDQ0OWVjNDFjMmEyZDU3M2Q5MmI5MmUwNTYzMTQ4NjE2NWJjNzEwZWY1ODQwZjgwZGFlOWY5ZGQ1Y2ZmZDRlYmY1ZDEwNzQ2NTEwYzVmY2JmZTYyY2I5NzAzYzBiMTU0Yzg2ZjEwODE2NjcyNDk3NjcwYTNiMDE1MGJiNGUxYjAzYjNiZDU0NGMxMmE5MGMzZWRjY2Q3OTAwZWJiNWIzMWM5MTExN2NjODI4MWEzYzRlZDA0OTk4ZTk5YWVkNDFiYjQxZmNlOTk5MGE0MDY0ODViMTRkYmUzYmMxYTVmY2Y3NzE5NTA3OTkwZGEzYjBiM2M2OGFkNDBkODk1MGMwZDQ5Y2VkMTAxOTMxOWEzZjM2YWZmNmNhZjc1ZDdmOWEwOTMzZGQzYWJkZDc2OTJhMTU2MmYwNjEzZmU0YTI3OGQ1Y2U0YzhkYWZiYjU1YjJlYzJhZjJiMjRlODM5NmY1ODdiMTcwYzljYTY1NDc1MDhmYWNkZTczNDkwZGZiMDFlYjY2NTdlM2Y0ZjI3MjMwNGI3MGJmMDQ3YTQzYTJiNThlNTU2OGJjNTJiMmM4ZDRjMDMyMTlhNWE4YmQzZGMwNjQzMTg1OTEzYzBhZjc0MTFmODFiNzdiZTJhOWJmZDVjYjI2OTc3MTEzZDI2NThhOTcxOTJiNDFjZjZjNzAxMWIwZmY2YTExY2JmZjM1MDU1NDYzMjJmMGJlZjYwOTdlNDZiMzY0OTJiMDE2YTQ1NjJlMDkyYjY3YzNmY2NjNzc4MGVhMjc0ZDk2ZDU5NTg0OWY3ZTJhNTZkNzllZGNiMzJkNzg0MDQ5ZmMxMzI0YTViZWVmYzI0MTkzYTY2ZTFjYWM0YTEzYTgxMWI5MDk1ODNjYzkxMGNmMDhkNGIxMDRkYmRiOGE2ZjJiMjFmYmMxZGIxMTc1YTFhMjM1NmE2M2QzZWVhOWRiYjg1MzdkMmM2ODYyNzU0M2RmMGQxZjhmZDhkNTdhMThiMGRiZDY5YjkyMGNiOWIyODZlM2MwN2FlNDRhZTJlMWJlZWMwMWNlZTZiYTk4OGI1ZDFhZmI5OTc5MGIxZGQ5MTA2NTVjNDNkN2YyYTNlZDM3NTRiYTQ2NTE2ZDI3ODcwNTU1OWY1NzQxNjIyYTlhYmI1YzhmMjNmYTk3NmE5ZDE0Njk0OGFkZTZiYTY2MDhhMzVlNGUwZDMzMGU4MmU5NmEyYmU2Yzc4YWQwY2Q0ZDg3MDRlNTdjZWExNDYKK1NJRzogODY5OTZhMWI4ZTQ5NWQ0MjUyNzdlOTdjYzA4MzA1NDkzNDliYzJiNmYzZGNkYTYwZjNiN2QzNTAxYjhiNTBiNWI0NThjZGE1OGI0MzZlMjNjMDJjZDRhMjJiMjM0ODEzYWE5YmNjM2M2MWY5ODNjMGI3ZWZlY2EwZjFiZWMyMGQKKworVFNUOiA5ODEKK1NLOiAgN2I0NjlkZjljOGY3ODQ4OWFiNDdjYzcwYTg4NTAzZjFiOGYzZDkyOWMzM2ZlYWIxYzUwM2YwOTY5YTNhYzM3YgorUEs6ICBhODE0YzdlMzczZDAxMTNiOTA2MjRhOGFiMmJjYTVjZjUzYmY1MjhlMzlmYzNkMzY3ZGUxNTRiOTRiYjIyZjFkCitNU0c6IDFjMGZkNzQ1MGUyOTY3NWM5MzA5MTYzOGMyYWM5MzNjYTk5Nzc2NmUzODBlYzMzYTkyYjhhN2UxYTFlZDk4MjFjNzVmY2NiNWM1ZjM3NjBlNzZkMGU4ODEwMzExZGRjNjI0ZWE4NzQyMTMxYzFjNDMwOGY0MTc4ZTA0ZDA0OTYwNjkzZDg0NmMxZjUxZDg3NzNiNmRlYjM0NDNkODc0YjllMmRlM2I3Nzc4NTE4NTUxOGIyZTllZTczNmM2M2EzOWM4MjEyY2E4NjY5ZTE2MWQxMzFiMWFiMjI2NGZkZDcyZGM1NjI4YjExYzA2ZjJhZjlmMDc4OTA0N2JkZDRlYmI1ZDU1ODk5Zjc0ZGM0ZTEyZTc5NzUzNjNmNjNhOGRhNzZiNTU4NWMxNmJiNmQ1NWIwNWZhZGU4NzEzZDE5Y2FkMWEyMTE2NDAyNjI2OTFhYWM5YjQzN2E5ZWNmODlhOTI0NmVjZGJhMWZmMGJlYTc4NDk0Y2VlMTUyOTYyMTZlYTZiYjg4MjQ3OWQyNDM3Yzk0OTRhYzdmYTRmMzAxNWQxZDMxNDlkNTU2NGQ3YzExYTdlN2I2MTRmN2QzZTlkNDU0ZjBhMDViMDQwYTFlMDZmZTc4MzdjMmE5ZGEyNzk0ZDkxOGJmZmE5ZTYxYTBjM2YwODlmNmM5ZjdlZWFjNTg2ZTM0YmY5NDQ3MGQ5MTNkYTQxMzcxY2FjZGZjN2VlOGJkMTEzNTY1NTU2NjkyNGVhZGYwOTZhYzAzMGE2NTkwMmMxMDNiMTcyZDEyZTg4ZjA1M2ZjNTZlZTczZjMxODcwODE3MDgzYWZhODAyZjc2NjhiODE1ZWU3OTBmN2Q0MGI0MzdhMmU2ZGIyZjBmYjI2ODM2YjRiMjMzMWViYTU1NTM5NjE0YzBmZTE3MjQwMjQyZGQzYWY3MzgzYmNmZjdkM2Y0N2Q2NTQ0YjA4NzIwYzBhNTI0NDFmNzQxMTkzNWRkNGE5NTJkMzg2NTFhODAwMDVmYTNlYjBlYWVjYzczNWQyOTBlOGJkNWUzMWI3NDAxNDBlMTM2YjJjMDAyNTIzZDhlYjJhMGFiNWJkNjg3MDAyYjNiOTI2Zjc1ZWI2OTBkMWRhNzNhZDIzNTg5MmYzYjIzYTc1NmI2MDVhNDM3YzAwZTA2MjEzMDRlODEwZjk5ZTMxNGM0ZDYzZTMyMmQ5YjY5ODE1ZjM4MmZmYTFlYzYyODBmYzBlNjQxYzhhNmY2ZjdmNjE5ODViZDM1NjdlMGY0NDBkZTlmNzYyMTcxNWRhY2QwNzQyOGMwMDkwMTU0ZDU5Y2U2ZGI0MDE2OWM2NThhYzViZjQ0YjY3NjcxZmUxOWU0YjViMzhhYWQyZDNkNGUxOTBhNTUwYWFkNDE4ODM1MmY3OTgxYTZkODgwNjI1MDJkZjg2NzkxMzUwMzkyZDQxY2VmYWNiMjRlMzdiYzcwMGNiMDI5MTkwYzNiMTgyMTQ3N2UxMTdkNWE0NjJmYjNlNzkxMzNiMTA3MzU5ODk2NmY1MmI2MzI1NmRiZjMyNmFjZTE0ZGIwYzgwMDU4Y2YwMGQ2ODlhMGE1ODExMWFmMTY5Mjc0NGJmNzkxYmNiYjQyN2EzNzIyNDZlOTUwMWE4NWNkNTIwYzYxYTFlNTllZTE4MGU4Yzk3MTkyZjYwZmE1ZDNhYjA1ZGY4ZDg1NTFjMWFjNmNhMGE5YTAxMmZmZWNlYjNjMWY1MjE0MTFlZGI2NTA5YmMyNzhhNjUxZTEyOWU5NmIwYWRjN2FlZDcwNzIyMWNhZWFjMjI5ODg0NDEzZGFhMTA1OTVkMjJkMWRiNzA4MjEyNWY0Zjk2OTUwMGExZDQ4ZGFjZGFlODBmNDAyOWMxNjNkY2Q3OWRkYzY0NjhmY2RhMTYzN2I4N2RkY2YyYTNkOWI0ZDI5OWEwZTUzOTRkZjkwZWQwM2I2MjEzN2JhNjdiOWZlYThhZTFmMGQyMmY5MWM2M2EyNGI1OTM0Zjc0YzI2NWM0M2YxYjkyM2RiOTgwYWRmY2VlODMxM2RhNTIwMTc2NzMwZWY5NzM2YjI3ZTZiYTMyZDE3ZWE2OWRjYWM2ZjRhMDE2ZWRmZTJkYjVhNWJiM2I2NDkzMmY3MDExZjFjNDUzYmJlODhiYmFjOGM3MDM1ZjkzZmUzOWI1ODFmY2FhN2FhZjA4MmZiZWQwMDRmZDFmZDVhNGUyZDljMTk3MTY2MDRiMTljZTE5OWUyMTY5YTdiZTUxOGQ1ZmFkZDJhYzMxYjk1NDc4MDgyYWM5MTMwNjAwOGRlNGVjMGVmNGM5ZjlkNmY5NmQyZjY2ZDYyZmFmYzIxOTQwODI4MDhhZjBkNjdiOWZiYTBkMTg5YjA1NWYwNjFjY2FjMjRiMjc2MTBiZmJkNWEyMjMyZGQ2ZjNjODkwYTliMTI2NjQ3MWIzMjJlOWUxYmY5Nzc1N2JlZjcyYWJjZWU5M2IwNTFmYzkyM2NmZDRlNzIzYmUzZTE3MTQzZjM4ZWViYjkwMGI1YmJjZjczMDQ3MzJiOWMwYTFjNWZjOTUwOWE2OTM1ODBhZTczYTRjZGZjNWZiZjIwY2U4MWViYzgzNWM2YzkwOWQ4MzExNDFiMTk0ZjYKK1NJRzogMThmYWY4MmQwOGUxMDY4ZTlmOTgzZDgxMmYwNWZkYjY5MjlkMjcyM2RiMWY3N2M0NWE3NGJiMDljZmYyNzc3M2I1NGNlOGY0M2IzMDE1NDE5MTEyZTcyNWVhN2FjZGE0YjIzYjgxMjBlN2IwY2Y0MjAxNTNlNWIwM2RkMDYxMDkKKworVFNUOiA5ODIKK1NLOiAgZGZlY2RlN2E1NmExOGMxZjE5ZDgwYTE5YTRmMWRhZGRkMGJjZWNiMDFlZWNhZDZkZmNhMGY5NTdhOTE0ZWQ3YQorUEs6ICBhZmJhYTZlNzNlODViMDJiMjVhNGI1ODdlY2I4YzRkZmI3OWFhOTIwMjc2MWVmYThkMWRmMmNkMGFhNjMxNmM0CitNU0c6IGFlNmU4ZmY2NWNjZGU2ZjI2NDg0OTUwODI2YjQzNjIzMDU4YTVlZmUwMjBiYjE5YjdkOGI0ZTI1NzY4YjY5MjczNGZlMDdjOTEzYjllODgxMjZiZWNiZjE0YTBmZDAyMDViMzlmY2MyYWVjMzczZjhjMTg0YzZhOWJiYmI4NDQ0OWE3Y2EzYjkyMGFkYTA4ODAxZGZjNjZmZjE5YWViOTJmMjU1NTM5OWE0MzAyNzdhZTIyZDIzNzU0ZWFhY2UzYzczODQ2Nzk3NTM2ZGQ3MWE1NmY0YjU4NDJjMGY0MTBkMTk4OWFjYWM1ZDgwNWQyNjU3MmMwZjNhNjRkZDIwNzE2NjIyMTJkNTJmZTk5ZTU5ZDk2NjA0Nzc3N2Y5MDMwZmE0ZmQyZWU3NGI3YTdjOWY3YzM0YTZkYzdlMDM1OTNhMTNkNjRjZTYyNDUzZWUzY2EzMGQ4NDY3MjgzOWYxOWYxYzE1ZDBjNDVkMjc1NWJiMzk0YWNmNGRjYjdmN2YwNzExYWM0MGVhNDY2MTJlYTM3YTc2MDdhZDMyZTgxODI2NWZhYjE5MzNmNTA5NGUyZDAzYmNmYWE1ZjYxNjY3ZjNiMzdmMDBjNGM1OGQ5YjQxYjlhZjM5MDA0ODJiMGZmYjRmYTQzNzZhYTA0MDAwOWRlYzJmNDUyNTc5OWNiMDA1ZjM5ZDc0Y2IyZDhkY2U4YzIwYzJjM2Y1NDA5NzAzYWYxNTZjZmJhMjhhOWQ5MTY0MzljYjI5ZjgzZDI0MjljZTYyMjM1MTllNzVlMTVjN2M3ZmEyMTUxMTllMDczZmE3OTc0ZGIxNGY3YTAxMDkzZmFhOTRhZDUyYWIxZWFkY2UxYTg5MzY2Y2ExM2FkYjg5MDY2NDM4YTJiZWI3MzAzNDE3MGFhNDJkOWMyZGRiOTdjMTRhMTdjMzA5NDM3NmQyYTNmZmQ4MDk1ZmM0MDUzZDkxZDE2ZTA2ZDI3NjkzYTEzMTBmMDFhNzUxMTFjZmVkYTg5MmMzOTcyYTEzM2EwOWFkZGFhOGY3NDE0NWY4ODY4MWI2ZDI3Nzk2NGJmZTM4NTUxYTJjNjE5ZmEzY2FlMzk0YWNiMjljOTQxMGI0NWUxMDFiMTc0MGU4YjJhYTZmZWJjM2E0NWRhZGI5ZDk1ODlkNTk3ZTU3Y2Q5NDdiNjg0Y2MzNTUyNDZjZTZjMzI2ZGQ5OGNmOTJiNmVlYTNiYTVhYjAzNzAwNjIyNjM2MzI0ZGMxMjIyY2Q3NDhmYTA3YmZkMzlhMWUwNjk4MDllNTY3MTQxYTYxM2UyZThiZTlkZDM5OGFiNmJlYWFmZDg1ZmYzNjI4ZWUyYWEzMmQwYTU3YmJhY2Y5NTYxOTBiNWM0MjQyZWI1Yjg1ODdkMmZkY2IwNzQxYjk0MTZhMDVmNWZlY2IxZmIyZDY0Nzg4ZGNlNzgzYzFmNjNlNjA2NDFmY2U1ZTFkMmIxOGE5NTAwY2Q2YTFmZDMzNWNjMWRiNDZlZjA0NzUyYjJkMjIwNzJlNmRmY2ZjZmE1NjliYjI1ZTQ1N2FmZWI2M2E0ZmJlZGMyOTNhZDlkMWFiYTRlMzk0YWExMDk3ZTEyYjBmYzkwYzg5Zjc2ZGYwZDY0NDFmYTk5ODA4YjYwYmUwN2RmY2M3ZjkwMTBiYmY5MDMzNTU2ZDVlZTJkNDQ4OTM3Yjc4MzQ5MzkyMGY2ODFlNGRhNzA4NjcxMDk3ZTE5OTQ4MWI4ZWYwZTAxNTBkN2MyODUxZGY0NGM1NDUxMjJmOWIwZTViYTJlZWZmMmQ5ODhkNTZkOWJiYjU1ZDk4OTYxMTExNTFhNDM2YWYwNjVlMGNhZDE3OGEyYzlmYThmNjk3NGVjZGYwOWFkZjAxMzMwMGNmZmVkYWY0Yjg3OTFiNDY3YmE3OTMzYWRhNWQ2MzJkYjQ0ZWQ2ZGNmMmFhNjQ4OTE3YmU2MzM3ZDJlMmQyMDY4NTZkMDhmOWVlN2I1ZTJmMTRkZGM2ZDNhYzQyOTIxNWE4NzkyM2FkMzJkNWRjZmVlMzY4NjMxNmRkZDFiMjdiYjE5M2E1ZmMwNWM4OTNhOTM5YTViOTg5ODczNjZjODI5ZTM5MmY0ODVlYTE1ZTIyY2Q4Zjg1N2ExMzRhZmE5OGYzNzIxNTU3NmRkYzVhYWI0ZjJkMTBjYWFmMDUwMDU5YTMzNWYyNGJjZGNiYWM4MTlmNjZkYjA3YWFiZGZiNzYyNzFkMTdiY2UyMmNiYTQ2M2E4MGFhODkyZDBkOGUwNTVmOTQ4ZGY3ZjZlNmMzMDBkYWVmZmQzYTIzNmRkZGNmMjM4ZmUxMDY2NmE1N2M2ZTNhZTdlMzY3M2QzNTU3OGY4YjhlYTY5ZDNjMDhlMDE0MGFmZDNlZTAzMGIyMmEzNzIxNjBmOTA4YTM3OGY4MTAxYjVmNTk2OWZlYTMxMGVlZDM3YTAwZDk3MzAyZDVjMmRiZThjYzYwMDA3NWRjY2QzM2FkNjNkMjY1YWFmNjBlMjQxY2UzMTFiZWQ3ZGQ1ZTI3NDUyNDFhZTAyYWU1MzJkMTVjMTg4ODZlODE4MTM4NzUxYWZjNTE4NTBlNTA2YzZkMzFhOGVlZjQ1MWFkZmQ0YjNkMjY2YjQxNWE3ZQorU0lHOiBiNGZkZTU1YjkxNmNmNjAwNjhmMTliMjUzNTFjMTQxMGRjZjY2YmZjNDBmOTZkMWJhMjM2OGJjMmI5MTE1YWFhNWIyZDFjZjBlM2RmY2EwMmFjOTAyYTk0M2UyNDg5YTU2ODFiYmFmZWQzOWM2ZTMzMjExYTljYjJmZjZlNTQwOQorCitUU1Q6IDk4MworU0s6ICAwNzgyOGM1ODBlYmY5ZTFkODI1YTU5YzNiZjM1ZjA3MmFlMTIzMzU1YmRjYzI0OWVlYzdmMmZjNTc1NWUyOWI1CitQSzogIDU4ZTVlZDg1MTAwYmJkOWIyMjIxYWZjOWM5MzE4NDMzMGFkNTllMTM4NTYwNjI0NGJmMDAzYjhkMjAxODUwMWIKK01TRzogMGVkYWQ1Y2FlNmVkOTg0M2U5MWM1MGQ5MzRjZjU1ZGQ2NThmM2QyNTIwMzljZDZjNzViZTRmNmI4NjZmYjc1ZjM1YzhmOThmMTcyMWQ3ZTZkOWQ5OGEyMmUwYjQ5MzRkY2MxMjkyNjFiZjY3MjNiMmZhN2E5OTVlMzVjNGJkNzljNTgxNmEzMjE2MDdkOWRjY2UzOWZlZmExZDU1ZGU0ZTc2MTc1NDhlYzM4NWMzZGUwMWUzNjZiZjUwYzQ1N2E1NTVlOTMyMDcwZTJhNWEwMTk3Yjc5ZWZiZTcwMDZmMGNlYzc4YjYwZWJiOGZhODc4MWQ4ZWI3MzI2ZWRjMzBlNjJkMzI5N2ExZTBhMTExNzEwOGM0NmVlNWRiZWZjNjU5NDI4OTMzNWU3ODBkNTVhMDg0ZjU1MmRhM2YzNmQzYzRjNjE3OGJhNzRkNGRlY2VmYzVhM2I4YzQ3YzE2ZjUzNGJkYjYwODk1ZDNkNTRjZDJiYjI2NmIzOTllNGQ0ZmI0OGQ3YThjZGUxN2Y0MjQxMjU2MDczN2QzYzA2ZTI5ZGY1MjRkMGNiZDMwOTNlZmNhMWM4ZmVkY2FhMTI0YWJiMjdhYmRhYzZhMjllMGU4MjQ2YWJkNmY1ZjUzMTk1MDAzN2Y3NjMyM2FhNTZjYzNmZWZhNjAzMDQxZDU1ZjE5MjllMjc3ZTcyY2RhMWY5NjU0MWQyYWYzZTkwYzBmMGUyOGJlMTk2ZDhmNjkyMWYzY2Q1N2E3OTI2Yjg2MGFhMWJjNDAzNTc2ODkyYTk2YjkzMTkwYWUzODNmNjMxYjcyODAyNjU4YjJlODQ1MWQ1MmEyZjQ1ZGI0ZjhiYzNiMGU0ZTUwYjZkNjAzYTViZGQzMGMyMzQyMDBhZDdkZWJiOTYzZjU4YTRmYTIwMzMwYjM2OTY0NDk0NDVhYTM3MTgyNDg0MmZiZjMyNmQ5MDFkZmUzYmUwNDU0NTJhMzc0MGRkMTYwZTcyNzMzZjZlMjczMzUyNWEyOWE4NjVmNmY1MGQ1M2JmNzE5MWM1OTljODc2ZjVjOWNhMWUzZmFkNzk2MDY0OGUwZDQ3MWY3ZDVjMDFjNjczZjQyZDY1OWJjM2Q5OGRiZjA3ZDhmZWJmYjk5NWQxN2Y5YTAyY2Q2YzM5ZjJkZGNkMGYxZDIyMmI5ZTExZjJkZDdkM2M3NTE4MjI0YmI2YmZiOGI3YzU4ZmU4YWMxMDU0MDU5MDNhMWI5ZGE3NTE2NzE1YjdhZmMzOGE1NTVlNmJiY2RiYWQ0NmUzNGU1NzZmZWEzNGNlMzU3MzRlZDIwYWY1ZDg4ZWViMTA0N2EyNjYwNjQ4YmJiMTEzYWQ5ZGI4YzUzZWRiNmVkOTg3MWExZTQ0YzllZDJkZjU2NTZmYjJiMjgwNmVjZjAzYjFlY2E5ZWFiNTBhNmVhYWI1NWI5MzNiMmRkMWYyMWQ0NTBkZTlkNWNiMjIzMmYwN2EzOTIwODFiMGI0Yjg4NWQ1NDc4OWUyZjc1YmYyYzRjZGFkODc4OTg5YjFkNmRhYmQ5ZWQyM2M3YzViMDM1NmE3ZDllNzMzNTI5MGQ3Yzg1Yjk2NmU4MDE4NGJkMDc5OTg2MDI4ODZkNzA3NjE5MzU2NWM4MWNjY2RhNGNjN2QzM2M4NWQ5MDViMWJlYjZlOGU3NDE4ZThhY2FlZGYwZDlhMzJhN2QyOWQwN2NmNDRkMzExOWQ0ZTc4OTY4MjBiNzdkZTY0YjY1NWU0ZjE0ODgwMDQzNGFmN2JkYjJhNTZiMjVlYjk0ZWEzOWYyMTY5NTk2YmIyYjExNzYxZjA4MmJhZWMwODg4NWY0YTBlYjZjOTU3NjcxMzVhN2Y3Y2Q3MmU3NDNkMmRmZjE0NGRkOGJhZmIxYjMxODAwNmU1ODc2ZjhlMmNiNDRhYTU4OGY5MDYyNjZhYzY3MTE5YzE3ZjVkZTExNGU3MmU0MmExZmIzOTk0NDMyMWExMTFmYTc5NWZmNzAxN2YyZmI4Y2FmNDgyZjU1ZDc3YTgwODU1NDI4ZGVkN2VjMjBhY2VjY2E4M2Y4ZDFlYjEzN2I1ODhjY2I3NDVjMTA1ZjJiMmNhNDFjM2E5ZjQ5ZDNjNmU5ZDdjNjQ4YjAwM2I5NzA3YzkwNjQ2MmVkYWQ2MTdhOGNmYmY5YmNjNmM1ZmI2ZmE5ODQzMjVkNjU4MmUyOGY2MjAwNTM4M2YzMzhkZjViMzhmYTlkMTljMjJhMmE3ZWExZDY4YTkyZDFkOTNiN2ZiMGI4ZjMzYmM4NzYwZjI4YWViMTQzOWE4YjA3ZjNkYTU4ZGRiMTU1YjQ5OGNiMDljNzVhNTU5NjgzOGE2NTAxM2UyNGQ1NjQwZDA4NDJhNzY5OTMyMmNmM2ZmY2I1NzAzZjQxNGZmZDE2ODg2MGJhZDNlMzA4YjJiNWJmM2NkZjdmMzYzYmY5YWFmNGIzYmM0MjRjMTQ2YzZmNTQyMTQzMGY5ZjQ3NmFhMzRhMGM2ZWU4MDEzMWZjNGQ0ZDk3MDcyM2EyMTg2YWUzNjI1ZTI4NmQxN2RkZGM0MzVjY2IwMDgzMTY3OGFiYTU4NGE2MmRiZmYwMDJiZWFkNmUxMWUyM2M1NGQzM2NmM2E0YjIzMWE5MDgKK1NJRzogYmIwOTM2MDQzOWE4MmRlZTVjN2Q4NTc3OWU1NGMxM2Y4OGUwNmQzOGY0Yjk0OTYwZmUxN2ExZWJjYWEzZWUyZjMzMGM2NDkxNTRiYmM4NzVhNDA3NmNmMGJiZjdlZWJmN2I4ZDA4ZDVhYTRiZTc0MTM4ODEyNDVmYzJkMmI2MDEKKworVFNUOiA5ODQKK1NLOiAgZjA4ZWU4ZGFhNzNlMWZlYjYxYTg4ZTA2MmRmYjEwMDNjODU3OGEwZDUzYmQzYmM5ZTU4OWVmYjkyZjY4YmUxNAorUEs6ICA3NjY5MmNlOGQxMTZlY2NiODk3MDc3ZWRjYWFmZGQzZWI0NGVhMWE0ODZiOTBlNDllOTdmOTY2OTAxMDE1NTAyCitNU0c6IDY0ZGU5MDA0NGQwZTc2YmMwMmZjZmZjYjc1MjYzNjY3YjNiZDczM2I0MGJmYjI2YzZjNTJmZGI0YjA3ODIyNzhjYWJhZTQxZTIxMjllYTQwMTdlOTRkZTg2MDg3OTY0ZjY2ZDg2MjA3OTg3NDY3YTE2ODhmOWZhYjNmZmIyZjFkMDA2M2JmNjI2Yzk0MTM2N2MxMmUzMTlhYjdjYTMwMjBjOWIzYTcyMTVhMTkzMDNlMmQwZTg5ODg3OTFkZTBkOGUxNjMyZGFhMzhjN2YzZTdmNmU0OGNlMTIyMTQzZDFlMmNiNjYxYmE3N2M2OWU2YTcxMDkxMTY0NGJjMTEwZmY1OGJiMDBiNTI5MDgyMGNlMzA5NzBlN2ZkZTE4OWUxNDBlNWM3MGM3ODNlZWQ1M2YwZTJhYzdlY2FlNGYyN2RiODFkMTViODY0NmZhYTljNWEzYWUyYjdmNDdjZDU4MGQ3NzA3YjAwMjQ5OWI0Y2ZlYjhjNTkxYWZkZjFjYzYyYWYyNTk1YzE4NGFiY2YwYjI2MjNhMWJhZTYwYWY3MDI2YjI4ZDA1NDBiNDE1MjZlMzAyMGY4MWI4OTRlYjNmZTMxYjcyYjIxYTMyNjBkYWUzMjEwYzRjZTRmZDY5ZTJlNWVhMGM4NjMyYTU4MzI2MmExMmIzYThiMTZjOWMxMjA2YWQ3MzAyMzAzN2NmMzA2NTNjYjgwYWE3ZGY4MzE0YjBmNWJjNmU5ZDVmYTAwYjAwOWQ1NTUyZDgzYjc5NzBiNWJjNGI5OTg0ZjY5ZDFjY2E5Y2U0Y2I3NGRkZDJkODc5ZDM3MzEyYTBlMTU5ZDdhNmFmYjc3YWM1ODVlNmI0NTljNTUxMzA0ZTFlZWJmYmNhYjQzYTEwYjUwNTkyNGUwM2VhMzMyZjVkMDIwYTU1YzdhYTY4M2M1NDFkY2Y3NzkwYTI0MGFmMDc5YmFiYTk0MDk2YjQ2MDYwZmQ3YWZlOTA1NmNhOTllNjg4ZGYyODBhOWJlOGM4YzczZTZlNmZiMDUyYTMzZWIzMzI4YTdmNjAyNTQyZmUyODBjODkwZTNjY2FmMjJjN2YzNGY4N2I1ZTViYTc4NGI0NzJiMWUxYTk5MzQ3YTllMGQyNDA4NThkMTI3N2E1YzZiMzQ5MzgzZmU0ZmQ1NWNmOTJlNjlmYWFkMzI2YjhkNmRiNDYyMzMwMjYyMjFlZTZkMGExYzQyNDY1MzNjNGEwZTViZDE3MmViODkzNmE5YzBkMzAwNjY1MzhlM2ViNGFkNWNiOTg3N2ZkODYxYjQ4MmIzMDE1MGEwNjEwNDE2MTY0N2UwMWQwMDRkOTk3NDAzZWUwNjcyNmNiOTdlMmUyNWYxOGM2NjhlZWU0YzViZjcyNTI5ODAzMTg5ZWU2YTdhZWMyMzhkNTkwNmVhNWFlMTA3MjJjOWE2MWE3OGFlYTUyYWYzM2VhYWM3NTQwNmIxYTYwYmVmYmFhZDQ4NDc2ZDlmZjg4N2ZkMjgzZWIxNjU1YmNjMDdjZjc1MzMzMTQzNmRiNWIzYjEzMDMyZmY5YzNkNjk2MzgwZTlmNWFiZjUwZDM1NTZmZGEwZGYwYjUzODk3YTczN2FjN2EzYjg3YzJhODMyYjBjNzI3M2VhOWZjNTRhNzY3ZjFhODEyYmYwMTY0YmY3NTIxNjMwYjgxYjlkZDkzMGQ5MmVlMmNhMjhlMzIwM2I3N2JjMDgyY2ViMzdkNTVlZGJjYjcxZGYwYjc5MjM2Nzg5YTI1ZDQxOGNiYjk1NTQ0ZTJjZWYzM2JiZGViMjdhM2Y3OTA5YzFmNDk4ZjQ3MTM1YWU5MDMzYWRmMjUwYWQ0ZjY1NzUzNjFlNGNmY2M5YmNmNGI5MGMzYWQ0N2EzNDQyMjk3YTIyM2NjYTg0M2Q3MjA1ZWQwOGE5Yjg3MTYwYTZkMDFiNDZhN2QxYzg0NGU4ZDFmMThmNjE4NjgyYmZiMjI5NTVmMzk1YjJhNTc5MGE1MWE2OTY0OTlkOWU3MWE1MDFmM2ZhNTQ2ZGU5YjEwYWU0N2JjZWU0MmJhN2Y4NjlmYjljZTRlZDdjNjQ1MzMyNmMwMzRjZjA1ZDlmMWUzYzIwMDcwMWJhNzUyZGFiYmQ4Njg1MjFjM2Q4ZjgwNjcyZDQyZjZjZjQ1NjRmMDhjZDdiMzkwZTZkNDlkZDkwMDkwYWZkYjg0NDg2ZmZjYWE0ZTg0ZDg4NjgyNzQ0ZGMwYTg3OGZhYTdjZDQ0MGE4YjI3NjcxMDkwMjA4MWY0ZGM4NDE3NDYxOWE2NmVhM2EzNzFmOTU1MDU0MDBkOTlmYTk5OTAxNzcxMGM4ZTI3MTRiZTYwOTQ5ZDQ2MTMxMGY3ZDQzYTBkYzEyMzUxNmQ3N2QzNjIyMTNmOWY3NWE1YTFjMzkzYWZmYzQ5ZWExNTFkNDZhODFmZmFkMjM5ZjI4YzA3ZjY1ZjU5ZWEwNzdkOWE0ZDljNzUyZGU0OWI5ZWYzNmJlNjBkMTEyZDc5NWY1ODhiMDBlZjZlNzczMGRlYTY1ZTEwMTZkYTBkZDQ2MjM3MGUwYmE1YzY2MDAwMWU0NTdjMDhiNDM2ZGEyOTAzYjYyOTA2OTMyMDg0NzI4YzgxNjcxY2JmYjA3OWJiMjkKK1NJRzogNjZkZmE0YzE1NzViZWZmMmY1YTIzMGIyOGM1OGMzZWVhMDczNmRmMzc5ZDc1NTU5YmM5ZDM3YTk1NzlkMTIxYzA1YzM3M2U4NDg0Yzk3NDdlZjQ0NzdlODBjNGIyY2I0ZGRmMTZhZTlmZGZhMDhhMDc1NDdkMTA3ZGNlYTEyMDMKKworVFNUOiA5ODUKK1NLOiAgMjcyZDY0ZGU1MGIxMzEyYmVlMjNkN2Y0Y2VhNTA4YThmY2NmM2U5YjMyNGU5N2IxYzhlNzI1MDJmNjFmYmY0NQorUEs6ICAzMzQ5OGMzYjcxMmFiOWMwMWVjNzZiMmVmZTJiODNhZGQxZTFmMmI1ZWI3OGYyMTY5MjMyMzQ1MTgyMGNiZTEwCitNU0c6IGQ2MjYwZDdlZWM1ZDQzNjIwOGU3ZTczNzY1NWUwOTcxODE0MjcwMTk0NDA1ZTM2ZTM5ZjhmMTdiNjQ5ZmJjMTZjMGYzZDdmMmJlZjVlYmMwMmJiMWM0ZGY0OGU4NDcwYTNlYWU4YTNjY2FmNjQwYWJjYzA5NGFhOTExNTBmZjFhOGNmMTE2OTY5M2ViZjVhYzAwMzRiOWI5MTllY2YxN2RiNzkxZGZlNWZlZGM5MDkxOGIyM2U1NGU5MDA0YTFhZTc3MWMyMTNlZDdlZDczMzQ0MzRlNWJjMDJjMGRkYTJiZDFhODc2ZmI4MjRhMTk3YmM5OTYxM2IxNDA5ZTcwNTIzMTBiMDgyMGRhNzE0NDY5MjlhZTdjZmQzYWZiYTA0MmRlNTQ1NzhhNWJmZDk0YzE1NDQzOTFhM2Q5YWNiZDU2NjNlZjY1YzY5MjBkNzg1MTZkZWMxY2Q1NWY2ZWI3MjkwYmEwYWFmOWExNzE2NTgyMDBiMjRhNDdhMDcxYjk2ZmVhMDNjNmNhN2VkMGQ2ZmU2NzVkZDYzNzYxODMzZDc1YmM1ZTU4YTk1ODU4MmRiMDJhNjBjNmNlMGE2M2Y0MmJhODM3YWU3N2MxN2EzMjcwNWZkOWNhZmE1ODdiNTU1ZGQ0NjE5ODUxMDc5Nzk0ZTI0ZWI0NDYwODgzNWE2ZjQ4MjQ5MjBkNTc3YTI3MDM5NmM5NTczYmM3ZDgyZmUyYWEwNDY1OTU2NjEzYTJjNTA4Y2YyNDMyMzM3YTM2NWU2Yzk4NGNiYTkxN2YwY2Y4NDJhZjEyMmRjODlkZWE5NThkNDE4Y2FlNDRhNmU0ZWQyNjNhNDE1ZmY5OTRhNWZmYjJmZjEzOTEzZGYyMTRiYmZlOTBhMzRiMjQ3ZTcxYWI3M2Y3ZmYwMDRjMjNhY2ZkOTBjNzY3NjExYWE1NTgxNGM2Njk2NDE2OGU1NjhiYTc1YmYzNDkwMzU5N2NkY2FjNzhjMjRiYjlmMTRmNWM4NmE1MWYzNjRmOWFiNDFlNDY0YWVlNjRmYTUwYTFjMTU5Y2JkODUwODMyYzUwNGFiNDJhNTg0YTk2ZDVhZWUwODJkODJjMWVkZGExOTMzODE2MGI4ZGNmYTM0MTliM2FmNjRkOWNmYjEwNGY5OGY5ZDM1ZTUzOTRlMjMyMjhlMjc1Yzg3ZGI1MGNhODY3NTQwYjg4MGM3YWYyOWZiZjUzNDI5NDU4MWMyMjI0MGJjZDRkN2QyYzIwZmZjMzY3MzNhZGEyNzY1M2QzYWUxYThjMjIwM2VhYzYyNmUyZTliYjRiNTJjZTUyM2U1YWRiM2IyYzEwZGNmNzhjMmExZTYyNmExNmViZmExYmRiOGMxNjE0OTNhNWFhYTJkODRiZmFhMGYyMDI3ZmZlNGU5ZWFlYjMzMmViZGE3Y2JiYjY3Nzc2OWQ3ODUxN2FkZjcyZjgyM2E3Zjg0NDE2NWEwNzk4NzhkMjU4ZmQ5NTIyNWMyMTE3NzgzN2U2OWMxOTY4NWEwNTFjYTkyYjEyMGI3ZDg2ZDc4NTk1NDcxZmZjNDJhNWU2ZTY0MzFiZTdiNjRmODA3NjQ1OGJhY2Q2YzcyOTAzY2MzNGZjNjNhNDBjZjNkZjAwZWZmOWQ2ZWU5YThmMzlkMjVlYWQ4MWE4MTI4ODg4YjBhMWFjMGU1ZTNhZDkyNzcxMmMxNDE0NmFkZjgyODc3MGZmOTU4NzA5ZWIxOTI4OGU3N2JiNzA3MzQ4ODFlOWUwMTZjZDI5ZTdkMDg5OTM0MWZmNmIyOTdhYzc5NmJiZGU0ODZlYzM1OTQ5ZjZhMzJiMmNhNjQ3Mzg1OTE1ZWNiYTNiOWYwMjI1MDg3MTQ1YzE4ZDY1NTlkM2EzMWQ2ZjIyZmM0OWY4YTYzMTVmMWQzMmFiZWViN2NmMmMyYzc3NmVhNzM1MGZkNWViYzBlMGYyNjViYWNjYzI2OTdhN2M4Y2E0MGMxMzVmNmNmY2IwYjU4YTYxNDMxOTYwZmZhOTA2NTcwOWE5NjFhNjMzZDU3MGI3M2ZiNDQ5MWRlNTJhZDBkN2IyMDRiNmU5OTdiMDM3ZWRlM2Y3ZWNhODIwYTdjZGIyYzY5YWMyOTE0OGJlMzUyMzUwOGFlN2U0YzNkMWE3MTdmNTVhODIxZDE0YzNiNjRmMDhjYTlhZTQ5NjEzYjExNTc3M2VmNjE4ZDMyMWM5MDhiZDIxNTY3MTdhNDM0ZTUwODlhNTk0OGMwNDVjOGRhOGE0YmQ4NmVkNWZhYmM2YjEzNDY2ZTZkZWRhNTgzMjA3ZDJhZGEyYjJhYjljYjE1NDNkZjdhMzczNGRmYmM2ZmM0MjgxMDZkNDg0NDcyNGExM2RmNDJmYWFiMThjYTg5ZGIyMGFjOWJjMjdiODUzOTQ2NjdjNWEyNzc5Y2E2M2VkN2FjMmI3YzBkNDEyMjM5MWVlNDYwMmQ2MWVhMDM4MTc2NGZiNzJkY2MyMjRlNjVlYWUyYmM0NTA2YjBmMDllMjMyMDVkMGJiMjFjNzdkODI4N2MxNjVlMGI0MmM1NTE1Nzk3NzhhY2I3MjU4YTI0NzlkN2NmMjViOTAyZThkMGRhNDI5YmRlMzZiNDU5MGRhZTk2ZjUyNTQ4MWFjODM3OAorU0lHOiAzMzgxNGM2ZWYzNzVhYjk2Mzc2OWIyZGU0YTI1ZTcwMjBmY2Q5N2Y3OGY4ZmM5MzQ1NWM0YjFjMmJkNDVkNGIwMWUxOTI5MDBlMzEyMjI2NWZjNTUyY2Q1YzVmMDBlOTMxZTNhMTgzY2NhNWJhMDgwMmRhZmRlYmI3OWViZWIwMworCitUU1Q6IDk4NgorU0s6ICAwYzlmZTU1OWFkMWVkM2JhMTY0ZGFjZWFjYjAyMzU2N2IyNDMwMzIwYjY3MTVkZTczMmEwM2M1OWM3MzAzMTMwCitQSzogIGU3MGZjNDY2ZmIyYWNkNzRlMDk5YzM2ZTJjMjJmYTUxMjkwYmRkZTk2ZGY5YzMxYjZkZmJmZGMyZTJjMTRhNDAKK01TRzogMjZlYmM2NDhjZjhjNzk2NWVjNmViZTk2NWQ5Yzc5MmJlZDkwNjU1YWQ0NDAxODNjNmQ3MGVhNjQ2N2JiOGU2ZjA0ZWM4NDNmMzMzMTU2OTE3YmY0YzUxZDBlZDBmMjhiN2NkMzFiYzEyY2Y4NDA2ODZiODJiMGMyYzM1MGJiZGFjODA1MzMzNzI1ZDZiNjljMmFiN2YzNGVlNTkzZmExY2NjZWRmM2YwNjQyYTY4OGZjYzFjZDk4YjA5ODdkMDFmNzEzYTJmYTY0MTZjOTYxOTIxZGUwY2MyYzllYzdhNTU1ODU1ZTdmY2Q0YzdkZGFhMTRmZDkxZWNiMDQyMjRlMTc2MWI3ZDZiMzVmNGFhNTYxOGE1MDBjYTAwZDFjYTI0NTFiNWQzNjhhZmRlM2E0MDdlNzgzMTM1ZjM5MDE5YTViOTg0ZTgyYWMyNzljMDVlNDhjMjk1ZWJkMTU2MzgyMWEwNzQzYzUyMjQ2YjVkMmIyMDM0ZTNhZWI2Y2U3YzVjZjkxOWU3NGE5YzdiYmM5ZTI1ZGEzMDQzMGViMTZlY2YzODM3ZWIzOGEwZjU1OTc5MmE3Mjk4OTBiYTgzMTAyNjBmOGFlYjliNWFmMDBlYjYzM2MxMmRlZTAyMjYyOGJhNDE4ZDc1Y2YxOGRlMmYyZTY1ZTQ5YjFhNjk2ODRkNjEyN2VmNDgxY2E4NjFlY2JjZTNiZTg2NDk3ZTY1ZGY0YzVmY2QwODE3Yzk3MTZiNTlmMmEyNjNkNWU5ZWI2MDY4MzlmODVjNWEzNjU4MzdiMGZiZTJjNDI3NGQ2NmNiMmM2NWVkMzY1ZmFiZjU4ZjE1YmU1MmI1MWNiNjAxMThjYTRmNzMwZDQ0NzM1OWY3ZWYzNDZiNzUwMjE3ZDQ3YjJlNzljODZjMGM2MjgxNmEwYzdjMThhMmNlMmI2ODhlMGNjZTBkNzUyMzIxZTc5YjQyMzg1N2RhYzU5ZjhmYmViMDk0MTFlNzE2NjllZjlhMjY0M2YyZTk5ZjM4N2FjMTgzZTBiMGFjNzJjNTlhMGMzYzE4YzBkZThiMDEwODc4MDc0YWNjMWEyYjM5ZjlkZjk5ZDlmOGY4YjUyZmVmZTQ5NDNjNTI1ZmQ0ZDA2YWQ4NzhlNDY2MDhhYmYyN2E1NGJjNTAwNmY2NDdkYjcyNDg1MWRiN2M0NTc4YWU2NjU4M2RjNGJiNTE4ZWYwMjg4OTAzNDdlOGZjZTA5MjdkN2Q5YWYzYWI1ZDBkMmQyMDJhNDAyNmFhMmVhNzQ4Nzk2MjY3NmE2MDMyOThlN2QyZTdiOTA5MjFlZTFiNTI4MDZkNzFhNzY0ZTAzZTI1ZGRkNjg0OGY2MWQ0NmZhZDNkMDA4ZTEwZWU1Y2Q1YTMzOTBmOWQxNThhNDQzN2VmNjE1ZmM5MGFjNWJmM2E5ZDY4MmUxMmMzMzk4YWM3NzY4MGQyMmNkMWE2YTU2ZWMzYjI1Y2VkZTg2N2VkZDM4MzE1OWM2MTY0ZDYzZTljZDFjOTU2YWM3MjM1ZmZmYWU5MzYxNjZjY2QzNTg5OGUyOWM5YjRjYTRlMjkyNWRhMzIzYjZmYmY2N2NmZDU5NmM4OGExYTM1YTgzNTk4NTFkZGNiYThmNjEzNGE5ZmFhMjQ0ZGNiNDdlNjkxMjc2ZWU2MjVjYzIwYWRjZWMyMWNiZTc3YTNhY2I5YmE3MmYwYzlkM2RhN2U5Y2Q1YmUzYjk1OTkwYmE1NGE5ZjMxYWYxNzFmOTVhZWVhZDMzMzFjYjE4OGE1YjJjNmY1MzlhY2I0OGI5OGIzZjczNDFmNjAyNTFjYjYwNDI5Y2NkOWNmMzJmMDA5MjA1ZjI3NTNmYmJiMjZhYTUzMTc0MzQyYWQxODRkYWI2ODcwYzBmYjUyOTMwMTE5ZDlmOTdkODQ4OWE2MDA3NmFhZGIyZTk2MDU0YWM3Y2I3Zjg0ZTEzYzc1YmJmOWU0ZDkyNGQyMjcyYWZlZjA4NzE5MTVlMjQzY2U2NmZjMmE4ODg4NTEzNTM1YjEwYmI0MDc5YzgwNmJkOTQ5MjgxZTI4MjgzNTIzZDBkMjEwYjMxZWY2MmE5NWRjYWUwY2QyNTI5MGM3ZWRmMmMyNGI0MzI4MjJkZWJlMzQ3ZjFjYWU5NDVmNTcyOGM3MWI1NDAzZWYxNGU3MmMzZDgzNDJlMTk4YjM2MmVlMjBmODA5ZTQ2YWNhMDE1ZjM1NDc3ZmY4OWFjNGIzN2U2NjE1ODU2ZjdlYTI1MWZiZmUxM2Y5MDY1MjU5YjA5NDZhYWVmMjQ5NDMyNzBhODU0ZGU4ODk3ODAwMzNkNjNkZGE1NDQ3OTk4YTNlZDdlNTA2YWViNTFlYTM3YjY4MWFjMzA3Njc5N2FjZGJmY2MyNzg4MzYzMGFkYjcyMjYwYTQ2YWYwYTYwZDUzZjY2NTQ1NjZlMjBkNjA4OGNkNDhlMjNiMjhkODFmMGVlZDIwNWI5MmFhZmQ5NjE2NGQ2ZDNjYTNmYzhiMTcxODA0ZWU5ZmNlN2FiYWVkMmVhNGRkZjljYjJiM2FlNzNhNzBlZDYzZGU0NWUxNDEwMTQyOGQwYTdhMjI2ZGIzOWFiNmNkMDQzNzQwODBlNjk4M2YwMThjZTkzZGE0Yzg5YWMKK1NJRzogNmNkOGFlZDk3ZDljNjJkNWZkYWU1OTdkMDYxYzBjMmJjMzdlNDJkZjA2YjgzMjdhNDY4ZjkyYjNmNDM4YTFlNmI2YjFlZjJiZTc4NTQ5YTI4OWZkM2ZjMWE2Mjk5ZTVhMzNkNTM5NmNiNGZhYzFlOGU5OTgyZjBjYjNkMjBkMDcKKworVFNUOiA5ODcKK1NLOiAgMTVkNzVhZDhlNGFmYjEyNjM0Y2M4ZTYwMGYxYTQyNjdlZjk1ODRmNGM0YWM0NGZmZmU0YjlmY2I4ODVjOWQyYQorUEs6ICAwOWQxMjZmMDE3ZTAxNjk3NzRlOGMzN2FiMzc5MjYzYTgwNzU3NDYxMjdjMmQxMWVjYjBlNGNiNDU0NzA5ZmYxCitNU0c6IGQxY2VhMmI3ZTlhZmMxZjBmYWI4OTBkMjcwMGE1YWU0MWUxNWU3ZDM0ZDNiZjE5ZDBmMzRkOWY5ZjBhYjk4MTJkYzdjMmE4ZGM0NGM4ZWU3ZjM3ODg3NjFlY2Q5ODhlZTcyYzczNmI2MmE3Y2FjM2NjOWI3MzhlOTM4ZGY3Nzg3Mzc3ZWI5ZmZkMTIwZDRmZjU4Y2YxYzA2NzU2MzNmN2U4M2M0YjExNTU0OGYxNGQyZjcwYzZkNDgyMjExNDQzYTg0OTk1OTk1NThjMTQyNzc5ODBmYTQyYTc4NDI3OTA3ZjczYTQxZjVmNjY5M2IyZjc1ZmU1ZTdhNmZmMGE2YzNhNGUyZWQxZDBkOTY4ZDVjYzlkNmYxM2Q0MWMzZDI5MTM5NmFlN2U0MzRlNjY0YjJmZjI0M2U3ZjZkODgwMTAyMTAwNzhjMzliNWE1NzZjYWY0MDliYjQ3MTFiM2VlZmM0ODZiNjdiN2ZmZWFlMGNiYWM2YTBmYmRmNTM0M2ZiMmFlNGUwNTdlZGM4YzlkMmVkMzFlYWU5ZWM4M2QyYmVkZDIxOWViOTg5YjJkNDQxOTYxOGMyZDNjZTQ0OTBlMzVmYmNhZDQzMmIwMTI0Nzk1ZjljNWNiZGMxZWIwYzMwNzJiNGFhODAxZDI2ZmJjYzdiMDdiODI1N2Y1ZmU0N2FjZDliYzU4N2I1NjU3Y2YwN2NhNTQ1YmI1NjhjOWU0ZTczY2RkZjYyNTRlMjJmNzhhYjJmODA2NDUxOWY4YWJmZDE2ZmNmYTkwZjg3Njg3ZGIwYzQyMDliZTJjNmM3OWE1NTIxZjQ0MTg5Njc4ZDkzMmM1NDU4NTcwMGEyNDM3NzAyZTU2YWFiNTg4YTE3Y2IyY2M5NGMwMGU4NzU3MGVmM2FjNTEzM2Q3NTMwMzhhYTQ2NTEwYTI2MGMxZmU4MDQ3OWJjMDJlZWQ5YThkMWRlOTkzNTRhYzI2NDhiNDhiOTZhYjFiODBjY2E2Y2FlMTg3N2YzN2Q3MDQyOGJiNTA4NTBlMDMwOGRiMGI0MjMwODdiZjdkZGUyNzllMDk2NzY2ZjJhYjNhYjIzODViMDQ2NGE1YmVkN2JiZDhkNDU3ZTkzNWUyMDBhYWFhOGQ5NTE1NzBlMDUzMDc2ZGIxOGE2YTYyZjcyYjMxOTU3OTg4NGEwODI2YmEyYjQzNjM3MWRkMjE4YjAxYTBjNWU1OGQwY2Q1ZmY5ODI1ZTQ0NjZmZTk2NmRmMDVjYzMxYzgwM2U1MjEyMTgzZGRmMjljZWY3ZmI5MTY0OGE0ZjhlZTE5ZmQ1ZjhkYmQ4YTU2YmU3YWJmMzM2NTlhOTIyNGExZTI3YTEwMjRlZmZkZmI4OGU4ODA2MTQ4ZDBkMTc4MDkwNmFmMWViZTNlNWYxNDM2MzE5MGQ4OGNjNmU1MDg5NDQ0ZjEyNWQwNjMxNTVkY2Y4NmNhOTI2M2YyZjVmMTgzYzI2OTc0ZmUwMDBiOTM0MmQyNGM3ODFlMjA1ODI4N2NiNmYzZjFlMzI3MGMyMmI3NzA3YjgzMjNhNWNjOGRiODFhYTkwNmJiNTlkNjk2Y2I5N2NjNzRlMzU5NTk1ZmZiODM3M2NhZDM3MTBlYTA5ZWE5NzQ0YzIwZTlhMTJlMDViZTVhOTVmMDg1YWM1NjE2NzhkN2RhNDMyZTRjN2NiNTNlMTI3MWRmNWNkNWEzMzlkMmQ3NTIwZjFjMTg0OGQxNTA3MWQ4YzY5ODQ2YjIzYzVkMjQzMmM3Mzg5MGYyZWRlZDM3YzNkMjk2NGE0YjViNTUyMjU4ODhlODkyZjUyNmQxY2FjMzFlYWMzNTZmMzYxYzJiZjMzNmM0NjJkNjBjODJlODJiNjE2ZjJhNTE5YzJmNjdiZjAxMjkwMzY5YmU5YjU1ZTlmNWM4Y2VjNGYyZTFiMmFiMzAyNTA2YzkwM2RjM2U3YjljOTc4MTQxZGM5MDRiMDFiMWMyM2QyNTAwNDM5OWJmOGI3M2Q2OWNkNTM5Yzc5YWY1ZTlhMGE1MTFlY2EyMjEwNzhhMWZmN2IwZjYwNGFlYTg0MjQ2YzNjYjMyZGI5MzgxYmUxMjE3NjdlMDk3YmVhNTE3YmZjZDgyZGZlOTIxMzc5ODQwZWZiNGI2ZjAyYTQ4ZWNkYWYxMmQyY2QzODkzMGQ0NDczYWRmOTdjZDcxZGM0ZWExMDM4MmY0ZjVkMWRkNzU2MmNkNGJmNTExNTkzMmY2YzQ3MDBhYThmZThkZWNhOWQ1ZTcyNzc5MDJiOGY4ODY1Mjk3NjVkYjI0ODYwNzRiMjNhMTlmZDRiMDQzNTZiZmE2MjI2YzgyYmFmNjlhMDg3ZDljYTE4ODIzZjhlM2U2ODMwOGUxNmI4MDRjMzYzZGY1YjYzMDdlNzYyNDBkYjFlZDg0MWI2MTJkNjU1NDhkZGZiZTgzNjdkYTYwNzcyYzZhZmY1NTRkYzg1ZDA0MTk0ODM0NWU1NjdkYTkzMzMxNTE4NThmZGY2OTkzMjczOTI1YmZkYzcxODFiNWY2NDZkMDYzYThjOGYzMTA1NjliMGVkMDkzYmQ5ZGZmMDRmZWJmMGI0MWM2ZGM1NTE2OWExNGEzYzg2MmU1NDE2ZjFlNTgyZmRlZThmZTg3ZGMKK1NJRzogYThmMmY0YjllMjA3MmNhOWZhZGUzN2ZkZDYyZDhkMDI0MmZkNGRhYTA5ZmQ4NTZlNzVmNGUzNDNjNzI2MGVhNjc3Zjc1M2E2MjdhZWQwOGNiOTZjNDQ0ZTI5YmRiNWI1Mzg1ZDQzODQzYmJlNzlhM2RkYTM2ZTFlMTEwMWM1MGYKKworVFNUOiA5ODgKK1NLOiAgYmYzYzBjYmJiZTIwYmUyYWNmYWZiMjdhMzYxMWI0ODkyMWE3MjhhYjE3MzM0YjhhZmRlZTgzMDUxNzhmNjEzYgorUEs6ICA0NTAwYTAzYzNhM2ZjNzhhYzc5ZDBjNmUwM2RmYzI3Y2ZjMzYxNmE0MmVkMmM4YzE4Nzg4NmQ0ZTZlMGMyN2ZkCitNU0c6IDhmMzBiYTJmNzkyZTlhOTdmNmVhZmUyOWY5NzZhNDgwMjhjYjg4NTdiNWM3OThiYzJiNjE2OGM0NjQ0NGMwY2U2OTYwNzAzNzRjNWU2YTQwYzNkMThhNWRjNzY2OWZjNDFkYjlhODFjZmY3NTliOGNhMDE1OTg3MWMzNDQyZThjNzUxMjY5OGZhNDQ3YjU3ODNlZTAxZDFiNjExNDQ5YWJhZDIzNzE2MjkyMmIwMmQxYWVjNWRlMWQ2NjZmMTdkYTE2MTMxMDYzMDFkMzA1ODZkMTE2ZTJhYzA5MDA3ZGQ3MWU4MTIzZWRlNGM1YTZhOWFjMDc3ZmUzZDkzOTA5ZGE2MjhlODY1ODcwYTRlMjVjYjM1NTkxNjc1YTA2OTBiZWM0YWYwMjgxNzE0ZmU2NjYxYmQ1YzAwYTI3ZDc5Zjk1OWZiNGQ0ZmIxNjM2YTZhMzU3NWY0ZjAxNDcwNjYzODk5ZDczNzQ3MmIwOTZiZTRkYjcyMzcxNTM2N2E0MWEzYTRjMTNmNzQyZDkwOGY0ZDkyMWNmZGQxNTZlNzU4NjgyNjFiYTljMTBkODU4NzRjYTJkNmMwYzllNzI5NWU1NjYyYmQ5MTZhMzYzYzdhNzk2ZWFkNjE3YzQyNTFlNjc5NGRhMDZjM2QwOGYyZmRjMzg4Njk0NGE3NTA5ZTY0MDljOTA2YjU5MzExM2I0YjFmOTg1MDEzMjk2MGQ5ZjNhNGVlYjczODZmYTU5MmY2MTkzYmVhYjhlMGZmMGYyODkwOGEwZDU0OGRiODdiYWU5NzhiMDVhYmJjYTliM2U5NmQ4Nzk1Yjg4MDc3ZjYyMGYyMTI0ZTMxNTkwZWIwOTllOTRlMGU2ZTNjZDYyMGFlNjI5MGYzZTJkMDE0NjdlNWJlZjRmYWJkZWY3OWQ5YWI5MjM5ZTc1M2VjNGZhMGJiMTEwZmYxZDM5M2ZjYTAyMjQzNTAyZDdlOTg3OTkxZWI3NmQwOGY4YmU3ZWIyYjFlZTAwYzNiNjhiYmY3MmE2MjNiYWExNWJlODk2YjMyMTVlYmU4YTgyMzEzMTA5ZmM2MjliMGNjZTY0OTFmODEzYzI0OTcwZTRmZmU2ODY5ZTQwYjQ2YjRlZDIyOTg2ZDAwNDIxNTUyNzZjMjMwZGU0YzA1ZDY3ODU1MmYyZTg1MWNhY2Y1YTQ3MjE1N2RiYjFhOTlhMmI0MmZmNDAzN2YwZGM2MzgwNjcyOTIxYzkwOTIwNmU4MDA1MGU2MWE2YjMwNTZiMTdlM2FlODM1MDA5YjIwNDE5YTNiOTg0NmQzNzQ4OTJlNzE5ZjFiMzViYzEyNTdkYTkzY2NjNmQ4ZjhmY2FhOGU2MDlhOGQyMDRkZjEwOGJlNzE5MzQ2N2U3ZjEwNTkzNTI4MmMzZmU2NjcwYTUzMjk0NDJlYTNlZGRhMjM3NmEwM2ExY2ZlODcyM2E5MDljMDY0ZDMwZmU5YmIwMjEyYzMzYWZlMmJlYTMwYzkxNDNjMDAxZGEwMWM3ZWQ1MDQ1NTliOTdmZTJjZWEwOWJlYjlkYjUxOTAwZGMxMzY3MDU5MjFlMjAyOTc4NDViYTcyYTk3YWE3Yzk1MzgxNDU3MWJlM2YwOGNlZjk2ODA0NWE1YWMzNDAwNGY2N2ZiZmE1NGU5OTZiMzExYmQ4ZGM1MjdkODllMWQ0ZjUzNDUzYTY3MTM3MjAxMDFjNDVhNjBlZTNhMDVjMmVlNjZmMTM0YjVhZjQwZTRiNzBlZjM3YmEzZjBhZmRlZmMwMzlmMzQyYzI4YWY5MTk4MjUxMzgxYTEwNzlhNWRkMDM1YThjMjg5NzZjNmI3ZjRkYjA5ZWEzODNhM2E4N2YwZjg1MWZkMzMxYWVhN2ZhNGJmY2Q5NTYzMWQ2NTJmYTJmNTBmMWMyM2ZmMmJjMTM3YTA2MDRlM2Q5ZjM5Y2NiOTY1MTQ1YmNhNDhiMDZkYzhhODE3NTQ3YjYyNWVmZmE3OTZkMDAwYzM3NzRiYWQxOThkYjEyNDFiZTdhMmMwZGM0YTQ2NDFiOWE4Y2I5Y2I4YzhjMzg4NzU3NmY1MjcyYzMzYWFmZmU0NTYxNWY1MWE5NmZhZTc2Y2Y1MTI1YmM2OWFkMGE0MDM4NzkwNzk5YjVjMjYyNDQyMWE2NDMzZGJhYjM5Y2NjYjBiMTc4N2I1YmNlMjg5NTk0NDg5ZDE3ZWRiNWY5MzEwMzc0ODA3ZDM2YzZlNjczNDcyNmJiMzMwMDRlY2FlOGJiNjkxZGNkMzg3NjAxZjRlYTkxMWI0YjkwZWJmZjc1NmQ3ZDhkOWViNDIyY2JiOWFhZjdmNDc3MmUwYTU0MzY0MzA2ODVlNTdiNjk3NDU0ZTgyZWVhZGNlNGFiYTA2MmI3NzY4MmNmMjE5YmUxZmQ5YjAwZjFjYjExMzVhMTAyMTM0OTUzOWE0YjkzYWUyMTNmMTkzZDI5MzI3MzhlZjcyOTIwNDk5YjdiZTJhODFjOWJhYWVkMTdjNTQ2NDFhNTk3NGQyNzIyMzI0MWUzYzZhMDk1MjI2YmQyMzdlMDU5MWUwMDJiM2FmMDU2NWRmM2U5NzY0MjBmOTc2NGEwOWFlOGJmYTI3OTVmOGZhZDdmYzY4N2JkMmRlMjNkMTQ4OGY0NDlkOAorU0lHOiA4Zjg3MDNiY2Y0YzAzMjk0MTczMzllYjAyNmYyYjcyZDMxNGQ5MjJlOWFjY2I1ZDhiYjdlZWM4N2UwN2U2MTM4NTUxNjcyYTYxMzJjYjRmODc1NTA4ZWQzMjk5NTY3YjRhNzQxMzRkMmJkZjBkODU3Zjk4MDg2MWQxOGJlN2UwMQorCitUU1Q6IDk4OQorU0s6ICAyODdmYWZkMjEzNzQ1NzJmNTc4MTAwNDdkMGQ5OGNiMWZmM2QwMTIwZmFhNDg4NjEzMjI0NTczMmMxYTZhYjc4CitQSzogIGU4MjUyMDYzZjVhZDdlOTViZDA1YzUwMmE4YmM0YTE3NTU2MzYwODY5YjlkZTBhM2I4NTg5MzhlMTExMTc2MTkKK01TRzogYjNjNDQzZTRlNTg5OWMxNmQzOWU4MWI0ZjgwNzQwNDJhOTA0YTczNTA3NGIyNzk1ZDlhYzA2YjEzNzllZjc2MThkMmE1MzRiNmJlZjgxNTY5ZTYwNzE5MjY3YmYyOWNkOWQxNmFjYzlhMTc0ZDgwMjZiMTRiMTI3ZDBkMmQ4YjQ1ODM5OTg4OTVhZDdlZjcyZmVkYzUzYjhmMDhhMjI1MDEwMGUxZjFmMGFhYjQ4YmM3MDc0NjQzNDg4ZTZiNjcwZTFiMDcyN2MzODVhMzRmZjY1YTBkN2U4M2JhODYwODNiODczZGZmMDU1OTIwOWIxNGIyYWM0MmJmN2M1NzJkMGM1OTE3YWM0MmU0YWU0ZGFlMWRkNDIzNTc5NTI3NmEwNzYxMzJjZmUzZTBjMzUwYjI2NTgwZmJiM2FmODE3NzdiOTNhZDk1Y2I3ZmYxN2MyZDk4MGNlMGQ0OTJmNmQ0MGZhOTBiYTNmY2FhMjFiYjY4NzM1ZWUxZWYyMDg0OTVlYmY3YjAyMjc2ZmZhMWVmYzA4MTY1OGJiNDRjZDI3NjFlZjVlM2UxY2E2MGVjOGI1ZDgxNmQ0YWJhY2QwYmNjODAyNjhkOGY0ZGY4YjNhNTIwNDlkYjAxNTdlMmI2ZTgxYWNkNmYzZjI4OTQ3YzA3NjI3OTU1Y2RhYzllYWExZGUxN2Q0YjlkYWEzNjFmYjQ5NzgyNjY0ZDdkNmQyY2E1Y2VjNmQxNDg5M2MzZTgwYjZkMTZkYWFjZmZjYzBiNzU5MzdlOGJlZjZmOWUxMTJhODdmNGIwMzVmOTAzNjA3MGEyY2NjNTVjMmFhZDkzOWRmNjc0ZjdlNGUxMjY4NWUwMTZlYTBlNDkwMmFhYWFmYWZmZTM4ZGRiMmY5MGQ5Y2Y3ODUzN2Y2MTM5MTY5NmZmMDMzMGFlOGY3OWExYzFlZDVkNTJiNGVlMmE2MmQ5MGZiODJkOWE0ODM5M2ZhMzM4MTBiNDBkMDQ1NTkwMmQ1NzRmZjA1MjAwM2UwMTYwYzBmNDdiNWU1ODBhMDc4YmNlZWYwNjA3M2RkYThiMmQxZjEwNGE1OTVlOTBiYjZhNDhlZGRkODY1ZjFjYWU0ZjE3OGZlMjJlNzVmMmY2MTI0YTlkYTA2ODI0NDcxMTJiM2RiNWJlOGM0MjQ3MmIyNDFlOTQ0ZmQyMzcwYzJkYzI3MTVjMDVhNDFiZGJjODkwYzQxYzY1ZmIwOGMyZjU5MzE3NDM5MWFjODgwZjNjYjY3ZDFiNzRmZjgwMmVmOTYyYWZlZjdiOWYzZWEzMjZmOTUyN2U3ZmJhNjk4MTg3OTI0YjY0Y2NkZDA4NjYyNDhjNzZlZTY0Yzc5MDY5YmUwYTA1N2IxMGFlMTkwZjM4ZmY1YWJhODQ0ZTM5MzMxY2YxZGIxM2M5MDA5MDZiZWUwZDdlNzU0NmVmNTIzMjRlMzdjNTkwNjc1ZjEzOWY1OGY1NzNhNDk0ZjRhZTgyYzRlYzgxMDY2YTY4ZTJkOTI5MDAxOTFjNDdkMzA2MmYwZjlhYWVkMTkxMTM3Y2RhOWI4M2NkMTMwZTgyNjI5NjBlNjI0NGY4ZjZlZjM5ZjE1YTRmZWQxM2NiNjY5ZWRjMTlmNWNlMTYyY2ViOGQyNDJiOWFkZGJmYmE4NzcyY2U3NDk4NWE1ZjM3MjBkNTkwYTkyMGUxZGNhNzVhODc5YjFhYTQ1OWY3NDYyZmZmMmU5NTA3Mjc2MWIyMDkyNTRmZTM4YzU0ZDgzM2E4ZTJjYjhmYzQwYzU5OGYzYzdmN2Q2YzU3MDU3MTVkMDMwOGRjMzBlYWE4NDY3NmQyMDlkN2I3YjMxMzQ0NzU2ZTY5YTlhNGNiNGU0YTI1MTgxN2EzNzg2ZmVhNjcyOGRkNjA4MjIzMzZiNDVhZTVkNDdjNzA0YjQ1YzRjYWQzOGMxZTAxYWI5M2QxNDE2OTJkNTVkMTJmZGI5NzQwZjFkMTgxNTgyZjFjNDhjZTU0MzQ4NjBkOTMwZjBlN2U3MGVkY2ZmYjg1NTYwYTUzZGJhOTVkNTdiMzFlODkyNDEzN2JjMmMxOWUzNGJiOWM5ODY2ODc3MTc0MjgwZTgwYzIzOTc4ZDU3Nzk1ODY0YTczNzRhZWYzODNmM2JmNjM3NTM1OWJmNjM1NjQ3NDAwOTg0NjFhNmM3NmU4ZjIzODkxMzI4ODc2OWExY2IxYzk1YjIyYzMyYTllYmIzZWNlYjA0OGVlMzI0Y2YwZDdlODVhMzg5YjA0ZGVkYmJjYmVlZjI5OGQwNTI3ODE2MDg1YzBjODNlZmFhMjk4NTQ2ZTgzOTBiZDFiZmU0NjVlYzFiYWZhZTY5ZWU1MjE4ZTcyY2FlZGI5YjY0OWNmNzNlZWM0NTRhMmI0ODQ5NjUxNzk2NzJkZWJjZjk0NDEzNjM5OTVhOGE5MDdkZTE3ZGMwNjg0ZjJhZWE1NzlhMmZiNDQ4NDE5NWRiNDExNWNhMzJlOTcwNTI2ZGMwMGE1Y2FjYWY1ODg3MTFkYmQ0NjljZTgwYmQyOTdjNGY0MWQ2ZmEyOGE1OTdjNjM3MmMwZDIxNDk2MGI1NDU5OGNkOGJjODQ5ZWJkY2EzNmQ2MjI1YjIwZGVjMGQwMzExNjljZWJiMzZlYWRjM2EKK1NJRzogNjIwMWUzMDU5MWQzNmI3YjIyNmUzNmZkZjU2NDM0YzQ3Y2QzMDUxODM3YWYzMTMxM2E5OTE3ZmQwMmRkZWQyYjViYmI0YmJjMzY4YjNiZDE1ZDA2MjA0NWYxMDViNmU3MzQxYjE1MTUwZDM2ZjkwMDg3NTkxZDgzOTkwMWI4MDEKKworVFNUOiA5OTAKK1NLOiAgOWFkMDQ5MTAwODUxZDBmNzliNzExMjI1Yzk4ODQ3Nzk1YWNmYzM2MDFjMTRiOGE5Nzc4ZDYyNzBjZDRjMDVlZAorUEs6ICBlN2NhY2Y0ZjM3MTQ1NDNjMjdhM2U5ZWQ4MzNiYWYzYmRlNGMwOTU2M2JlZjU5ZTc2M2ZhYjcxZmI1ZTRmZjU2CitNU0c6IGMyODRiZGQ4ZjgyNzViNDlhYzgwOGMzOTA0NWU1MGUxZWQ1MGM4YTFhZmQwMTFhZmU1ZGIzZGRhNjIwYmU4YWVjMzdmNDU2MDU3NjJlMjI1ZDA0MTExZjIxYjQ5ZmNlZmNhM2YzZDVmODEzYjIwMjBhNTJjNDlmOTVjNGFkNjFjYTIxNDYxOGFkZTdlZWQ2Y2Q4ZDMxNGRjNGM2MzU1OTU1Mjc3ZDQ1NzQ2MmYwM2I5ZmJhMmUyMjViMWI1MzdjZDRiNTIzNzUwNWM5MGQ0MzIwNWUxNzE1YzM5NjNjY2ZiZWMzNzllNmMxNzA1ZTA4MDM0YTMxYWZjZTY0NjcyN2U3OGEyMGVlZDg4YWViMGRjZGFiYzVjODZlODY5NzllNjNhNWMyNmMzZTIxNzc5NzNiNjk4M2NlYmZlZGE5ZjMxNDc5MzYxYjY2MTc2M2FhNzI2MWMwOTM5Y2FkNDhiNzE5MDhlYTkwNzY4YmI2Yzk1ODNkOGVhZWI5ZTAzMzg1MTVhY2ExMjQyNjI2ZGM2YmUwNGVjYzQ0MjllNGNiYjRmZjMzNjA5NjE5MmY3NTAxZWM0NzFiNTk2YTk5ZDRjMDI3NTgyY2M2OWUyMDRiNmZiY2RkZjU5ZjViZjc0NjJkZGNkNTk4OTEyMWZkMTBmMTFhMDY3NWI2YzRlNGY2NTIwZDI3ZDdjNjE0MzFiYTdkMTc0ZjU3Mzk1YTBiZjcyZDM4YzExNDI3MzZkZWQ2YjkxZTQ4MTFjMGU4NTQxYTZjMGQ5OTZjNWExN2RjOTdkYjM4OGY3MjFkMjM1N2QzYzZhZjVjODZiMWQ1ZTQ3NmVhMGFjMGIxYzExZDQzODdmNzY5MDM5YmRmNTM4YTAyMTZlZGQwMDQ1ZWU2ZGQ4OWVlZjgyYTQyNWE4M2ZhYTFiMTI4MDcwMzhjYTE5ZWJlYzAwMmU4YjNjMTUzNDRjNjFjZmQxZTVmMGUzYjAyNzNkZWIzNzI3OGNmMTk3ZDhhODNiMTNkOTkyMzA4YTUxMzczZWIzODExNGM5ZTQ1YjQzODc4MDI3N2QxZTMyZjM5NzI5NjJhM2UxNGE4ZDA4ZGI5ZjA5YWVjM2RkMzJhNWI5OTQyM2U2MWY1ZTc5OTQ0YWI1N2EzNmY2ZWMwN2NjMzIwNGY5MTY1ZWUwMjFhZGE5M2U2ZmVjYjdlYzQ1NmFhMDI4OGMzNzhhNzVhZmQ2ZTlkYWQ2YzZmODhlOTU5YTJjZjI4YmZlNTZkMmU2MWIyYWRhZWNmMGQ4NmRkODkyOGJjZWRhMjZiMDU0MDI0NmI3MzM3ZjVjZGNlYzExZmIwYzFhNTlkNjMxZmNjYTE5NDA4Zjk1MjJiNjhhMzlmODZlZjk3MGI4ODNhMGYwYmQ2YjdiMTQxNWVjOWFhMDQzYjUyZTE5YmFjMTc2ZDY3Yjc5ZTJhNWRjYThiZmQyOTEwMmFjNjA4ZTQ3M2U5Zjk4MmMzZWM4OTMyZDhhYThjZDU2NTI4NDQ5MWRlNTJmNTE2YjllYmZiN2RiZTEyOTk1MTFhZTczMmMyYWQxZWU0OTkyYjA3N2ZhZmZjNjVmNDg4ZjFiYTIxNWRhNjk3OTYwMDk3MTE5NmQwZmYzYTA4YWQ5ZjAwZTgyOWMxZGUxYWZjYTEwY2E0NzZiZTY2NGFhZDI2MTg4OWIwZWI3YWViNmVkODYzNzYxODkwMGFjZjQ4MWUyZDIyNGVjNjRhNmU2Y2Y0ZmE0ZGY3MzFiN2E0ZmVlZmYyNTgwYzk5YjZkNzViNGRjZDA5NzY5NjVjYjJiMGI1NjM1MjI3ODQyZDA4YTdkOTA3YWFlYmMyZmRlZDgwMDk4MTFkY2RkNzMzNTQ5MjE3NTNiYzVkZWMwMTc2ODkzMzVmNTZkMGZiN2FlMjEzYjQxNzkyYjFmNGViMTRhMjQ1MzU5NzdhMzA1YjE5ZWI5ODM4ZGM2YjUxNTI4Yjk4YTM5YmRhMDYwMTA3MTdhMjA4YzM0N2FhMTU4ZWVjZGZkOWEwNDcyZDNiOGQ5MjBmOTY5ZTEyYjY1OTE5YmRhMzhiNDYxOTQ5ODUwY2M5Y2MxOGQ4ZTNiYWE4Yzg4NmQ5M2NkMDk2YTIwOWQ1NDNjYTMzNzVmYzRlN2Q2NTEwM2NiNjQyNGJlYWI0NGU4YmM0YTViNjJjMjlhMDFiY2Y0NGRjYzYxZTc2NzVjMDI1ZGVjMDcyNDIwMDE5NGJkZTc0ZDcyYzAyZTk0YTk0NmE3NTJmMzYwODQ1N2ZkOTFmMjkyNzE1NzcxNDg3ZDI2Y2FkNGU1Y2Y2ZWY3YzZmNzE2MjdhNGRhZjhhNGM5Yjg5MWMxZWU4ZjA0YWVhYTk5ZmUwYzhiNGU4MzNiNzYwOTA2NmI2MTMyYTk2ODg5MGUyNjk1ZGEyMmIyZDg1N2M4YzBhZDkxODdjOTYwNjllNDc2ZTI3ZTQ2MzJjNDQ3ZWU3NjcxNGEzMWQxZTUxNDllY2IzMzdlZTEzMmYzNTUyZGEzM2FiMmQ2ZmE5ZDdlOTNmNjhhNzdjYmYxOTFjYjA2YmMyMmYzNDcwYWY2ZDc1ODFlM2FjY2JlY2EwYjZmZWIwOGExNGI5YTgwYzFlZjU5Mzc0Y2NkYzA1MjNjMzY4NDUwNGMwMTA0YmJhMjJjMTAKK1NJRzogZmVjMGFmMzRjYmM1Y2ZmYzU2ZTk2ZGQ1ZWQ1OTY4ZTUyY2JkNDI2OTg0NGZjMzBlM2FiMGQzNDcyYjVkMTgwYzhkMWI3NjkwNTE4ZjQxZjE0NDM4ZTdmM2E4M2Q1ZTg5NzZjYjlhMjYxNTFmYzQxNDlhMzI5OGQ3ZTQyYzA1MDMKKworVFNUOiA5OTEKK1NLOiAgZGU1NGUxM2Y5ZTJjYzc1NDU0NmM5OWIzM2IzZDcyZjRkMWY3NzE1MDM4YTk2NTlmMzM2MzY1NzdiYjUyNmFkYgorUEs6ICAzNjMzOGRiMzMyNmIwMDVlNWM2MWZmNzgyYmUyZWFiMTY2ZDRlYjcyMzRhOThlYTFjZDg1NWUxYWQ1MzVlOTRjCitNU0c6IGRjNDA0MWFkNjE0MjNhMTJhMDQxMTMxOGE2ZTYyYTVlZjY0YTE5YWJlMmQ5ODUyMjk3YmUyZDRhMzVlYjg2NzBjYTM2YzUyMTUzMWIzMDM4YWNkYWVlYTJlYTAxYTBiNjE4Nzg2MmE0ZTFhODlkNGI4MWM1MzE4ZWQ0ZDY3MTMxYmMzOGY4NDFhMTQyYTJmNmYzMTZkZmYwNzY5MzlkYzBlYjgxYjIzMGZlYTk4ODFmOGYwZmY3ZWQwYjI5M2Y2OWIyODlmZTc3MDg4MWZiMzcxMDgwOGU4ZTU5ZTY0ZTE5MGMxZTM3OWI5ZGQzNDhiMDJjMjM0N2Q3ZTIwNjk2NzkwYjYyNzc2YTJlODI1YmVkNjkxNzAzN2NiNjM1YzkyZmJjNzZiNGM1ODUxMDI3ZTdmMTM4NTJlZTdlN2M1MjU3M2E5MDMwYjc5ZjIyYjYwZDU4NjllZmU2ODBjMDE2NjQ5MjlmZTlhMDZmYTMzMzA1MmJlMWQ2YWYzYTBiNDgyYzMzMmUxODA1MWU3OGIzMzM4MzlkNmNiOTNkOTNlYmZiMjc3ZTQyNjhmYmVlZWViYTFlOGY5NmE1YzllMzI4YzQyNjcyMTJjYWMyNTEyMTViZmFhNzhmZDg4YTg3NDE3YTgwNjAyZGNkODgyOGU4MDQwMGRhMzA0ZTk4OTg2MmQxMzIwMTA4MmRlMzUzMDkyNWUwZWRjMmMxMzBhOWE0MTkwNzFiMzEwODhkYTZmNmZmNDA1NjMwMWMxMjlmYzIxMzUyMzM2MjhkMTZkOGJmMTYwZjZjZTg2ZDgzY2Q0ZTI5YWUwYzczODQzZDcwYjUzMDU2YzVhZjNmM2RjNTYxMjcxY2I1YWZmMzkzZjA4MDNhZGUwNzJkOWNlYjc0NWI2MTg3YjI4ZDI0Njk2NzY3ZDVjMjFmNGQ0YWM1OGQ1YmI2NmM1Y2FkZmVmYjE2MjZlZjkzZjcxNGM3ODJiNmVmM2NjZjRiNDRlZTc1ZjBiYjc1N2EyNWQ5YjQ2YTlkOTMxYTAzNzI3ZDQ5NmEyMjgxMGM2MzRmNWMxYWU2MGNiZGYyZjFlYTI5YjU0NjA3Y2ZmNTBkOWY4ZTAzYTBhNDUxM2NmNjhkZmI2MTk3NzM0MTFiNjE4MDk1OWE4YWFjMzBiMmVlZTRhZDMyNzkxNWY2MGFlNTJiOTBlMDRhOWJjZWY4ZGM2N2U3MWVhMTBhY2E1NTNkYjk4OTVjZDgwMDg0NTdkNzZmMDJjZWI1MzUwMDIxMTEwOWU4OTYwM2YzMDRkODgwYWFmMDI4NjFmZTM3Yzk1MzRhOWQ2NzJkODM3MTNjZDMyNmM5YWI4MWMzNTM3NjRjYTVhZDVhYzBlN2YxZmY4ODBmYjQ4YWNkOWNiYjk0OTA2NGUyMTE4M2JjMzhmYjFkOTBjZmU2MTlhOGI4ZmJmNTMyMTg4OWJiMTVjMDJhNTNlNGQzNjdmYzY2ODg3N2I2NjIyODFjNGEyYWY2NzhmODZlNjkxZGFhOGFmZGNhYzFiODIwMTg5ZmU1YzI1MDhjZTM2ZWRkOWM2ZjhmNTE1NzUwNzE4Mzk0MzlhMDAzMzUyYzE1NzNlMTI3NjhkZDZkZWJkZjFlZDRmOTRhYzc5ZGYxYWI2YTBiYzI1MDc5YzA5MzU0NzdkOTE0OTk4OGVjM2I4NzkzZWZjZGE4NTlhY2MzOTJhYjNmYTk5NDkzZDdhZTBhNjU3NWI2OTVhMWNlMDc2NTMyODYwMjg3ZGQ0OTg5NjdjNDZmN2FkZDQ5NDk0YzAyZTc0NGM0MDI4MDE5NTc4MmUyNDI0NDc2MTY1ZTcyY2VlMjM2NDJlNTFjZWM0MzIxOTExMTZhZWM1OWI1OWZjZjBhMzY4M2I5NWY3NjA3NjBhMjBiZDY3NDU0ZDhkZTY0N2MwZjlmZmM0ZjkwZjZlNDVhYzkzZDgwMmYzMzgyOTllZjI4MGQzYmI3YTRhODlkYjhjNTlhMTI1MjZmMjc4MzAyNGM4YWRlOTAwMmYwMGUzZDUyOWI3OGRjZGQ0OTAzZGFmNTc2N2EyYmVkNzUxNDUzOTZlZmI2OTc5MDcxMmRlNmE1OTAxZTZkOGMxNTI4MDE4MjM4ODI4NTAyMWQwZTcwOTI5MjE1ZDlmMmI3OTliYjkyZjJjYTU2ZjQ4ZThjYmJhMmYxOWIwODU4NDUxMjY1NjdjZmFmYTYwM2MyOTQ2ZWExZTdkMjc0NTU0YTM4YmY3ZDg2NTExZjNlNDc0ZjlmYTVjYjExMTA1ZmI1MmZjNjgxNzdmMzM4NWZlMTM5N2JlNTg0YTcwMDg5ZGM3NDFiNGIwMDk1YmY3ZWIyOTkzYjQxOGRmODdiMTRhMWY5NzkyNmU4NjhkZjZlNTY4YmVjYTIyMTVmMmRkN2NlOGEzYzllZTg0OWNiNDEzNDZjNjg0ZjdmZmVmMGE3OTJlZGY0MzNjYTk5ZWYzNGM3M2Y5MjcyYTdlYjk3NTg3YzhmY2U0YTUxMzY0NDQ3MzcxMzhkNTNlYWRmM2E4NGY1MDFiYjEwNDU2ZThlNGE0MDQ3MDgyYzllMTQzNWY1NzY1MjZjMjE2NDcxNGQ3MGIzZDBhNmU5YzA4YTUzZTMyMzg0MGY0ZGNmZThmMmQxOWYwYmUyYzg4ZQorU0lHOiAzN2FjYThmMjQ4Mzk0YTllMDRkMDZhN2RhODRhN2RlZmEzOWRlNGRhMmJjYjE4ZDVmNjRjYzM0ZGIwODY1MWFmNGFiYjE5ZmEyYTkyYTdkZGE1NmVjOTkzMGI4MWFlYmQyMzk5MDUxMWY2ODRjNmQxNWJhNTk1ZjdkNGEyNzQwZQorCitUU1Q6IDk5MgorU0s6ICA4NTA0ZmJjYWFiYTY3NjgzZjgxNTQ5OTI4MmI2ZWJkNDk3YTgxYTkxNTZmNTNlMDI1YzJkM2VjZWUwZGI2NTU5CitQSzogIGU2MmRhODY0OTNhMGNhZjUyOTIxZDU2MDJmYmRjM2RkM2E4NDM2OTQxZjZiZTI0MGIzMTUwOTY4MTIzODc0NmQKK01TRzogNmM2M2VkYmQ0MGEwMzg3NGVjYWVmODE2MDJjZDY4NTBjMDlmNDkxNWI3YWFmNDE4MjU4YzU2ODM2NDUzOGU4MzkyYThjMzc5ODM4YjBjOTUzNDViZjY0YzNkYmMxNzU4NTNmYjY0MWYzNTBmMGI1M2EwNWE4ZWMyOTAyODhjMDMyNmQ0MzVmZjc3NmY4NjgzYTI3MzMzM2Y5YmIyODAyMTg0ZWNjNTNiMDZiMjhjMmM0MDJhNTRiZjEzNGMxYTIzMjk5NzQ5YTZjZTJiNTFhN2JhMjIyMzIxNDg3OTdlOTkzZmYyNTgyODZlOTQ3Nzc4YTg3NDJkM2YzNmNjNzg0Mjk3NjA0M2ZjMjNkYThhOTdlY2I5NzE1ZmMwNWZiMGYyM2ZhNzMyMWRkYzE5MzI4NjE2MzE2MDRlYmEyZWYyNWQ4Yjc1NmNlNDczMzY1NmJmZDFlMTQ3MDg5MjNhYzdjNjBhNzk4NDYxMzZkNzQxOTczYmE1NTE0MTg5NzIwYmMwZjc3NzRiN2JkMzU3NDU5NWJkZTI1MTUwMzFiMjViNjI2NTRiMTYxMDM1Nzc4MDcwYWNlMTQ5NzFkZjFmZTBiZTRlYTFlZjU1Y2Y4NzQ3ZDM3MTZjMWNlNzA3YjFhN2M4NTIwZTZkZWIzMzRlYjE4NjMzOGZjOTMwMDA3NjhlYjJiZTQwYzZlMGRjM2Y1ZGY4MzFiMzJjM2EyYzMzZTI4ODk4ZDY3NjJhMTUyMmQzZDQ4ZGFlZTU2YTAyNjliZGRmNmNmYzlkNzNmOGQxNzhhZWNjYmZmZWY3Y2UxNjRmOThhZmVhMjI0YTliNjBlZGU0NmE5NWZhZGM5ZmM1ZDk0ZDIwOWMxNjZkOWI4ZGUyNTMzODFlYTIyNDg4NjI5NDZiOWNmNTM0OTQ3NDU1YzI0NDU4Y2Y1NjY4M2EwZWM0N2EyYzY1MDc1YzY5NGM3YzNkNmFkZjlhZTVlOGFkMzFhYzc2OWY4M2FhMjZlMzEyYzViMDFhOWEwOTQwNGIxNWI4MTRiYWE3NjY2YjNlMDNmMDZhOGQ2MzQ4YWI4Y2NiOWI2MGE0YTRmYWY4NmY3MTM1ZGYwMzlkOTU1YzA3YmQ5MmU3YjhlMzI3ZWU2YzFiNDAxOTZhMjhiNDQ0NmFhNWE5YjJiOTc3M2FiNzZlM2NlMjExODBmMDlkNmMwOGQyNzdjNjc3MWQ2N2UyMmQ4NDU0MGZhNDNiMzhmNjM0Y2ZjNDZlNWI4YzMzZjE1YTU2OGE3N2U0OTE0YWFkOWFiOGM5ZjdmZWE0N2Y3Njc3YzAxODgwYjNlODVkMmQwZTNmYmQ2ZGM2ZTk5ZTQzN2RkYzczNmY5MmI1YTJmZjI5MjdlMGI0NDIxNDJmMDg5N2QwYjhhMTlhYzIwMzYzM2RmNDEzZmVhZjhlZjUwYTVmNzY3YmVkYWYyMGYxYzEzZjNiODlkMWU4YjdiZDE4ZDU5MWY5ZGUxMTZlZTM0Zjk4MjRlNGVhZDFhZTlkYTJlOGNhYWVmODhiMjk1MTZhYTk0MmRlNzdhNzQ2N2I2ZmIyNmE2NjZmMzA2NDhjNzE1YTJlZTlmOTQ2NzQzYjU0M2E0NDI4ZTBkZmQwNjE3OGU3ZTkzZWM2ZjI2ZTAwM2UwNThiZWMxNGE0YWEyZTNiOGRlMTEyOTVhNzY0Y2FiMzBiMzEzZmNjNTc0M2IyZmI4OTk2MmRkYzVjZGM2YWEwZDJlNGEzMDZlNzdhZjc2YTA1YTU5ODkyM2Y2MjhhODVkZjFjYzczYWQzYmMwMWM0Yjk3OWJkN2NiMjk2NTkwYTg4YjBhNDFiNDQ1ZDUwYTA4NDIzZTRlZDgwZjE3NjNjNzE2YjZjNDU3ZDg0NWRmYWE2OGQxMmIwZDAzYzU1ZmRlOGFlNmIyYjkyYmM2MzIyOTQzZGJlNTRjNzA2YmM4ZTVmY2VlNzA2NTRiMjZmM2JmZDg3N2Y1ZjUzMzlhYzE4MmQ1NDE3YmQ0YzA3MzVkODI1YmY3MGU4NWVhYjgyMTZlZGRhNjMyYWU3ZTIyYjNlNTNkMDc4YThiMjBiNWE3ZTIzODUzMzdjZjkyYjNjMTZiMDIzNTYzZTExY2I1MDQzYjcwNGQzN2ViNWVkOWU4NWZjZGM5NWNmN2E2ZWFkZTQwODAzMTc1YTAwOGVmNjUzYWM2MTM2ZjE2MTI5YWJhZTExMzdjNTgyMzQwMDc0OGE4MTI1NjI1NGQzMTdjZmM5MzllMjZlYTBjZWY5ZjY1NDhkYjQyODkwYzQ4YmViMDQ3OTEwM2JhMDg5ZTUxNDExODAzOGIxYjkwOTQzZDcxNmY3YThkNGNkYTU5ODNhNjc0YjgzYTAwMmQ4YWM5YzY1NzM0YTI4Yjc3Yjc2MGM4ZTM4MDNmODc4MWVhOTE5OWY3OTdjZTcyOWUwNmJmZmZlOGMyOWIyMGJjODUyMjdjMDljYzA1MjE5ZmYyYmEzOGUxODA1MTA4MzczMmY4M2NiZmNjYzMxMDc1NjQ1MGIyNjFkNWJlMTgzZDlmYjQ0ZWMxODUyOWYyY2M5ODQ4YzQwMTE5YzYwNzY3NmJjNGQ5MDE1ZmQ0YmQyZmM5MThkYzgwMzFlYzE5YTA1ZmYzNjJjMTg0MDQzYmU3ZmUwNjYwMTlhYzUKK1NJRzogYzBlYTA3NGJmOWFkZGVlMmUzMzUwYTk2OWU3YzU2OWUzYWVhMWE0MTg4ZWU1YWYzNGNiNzNmMzg4Mjk4NjUzZDI5OWI1ZGJkOTQxNjNmYmEyMDllOGY3ZGMyZTI2MzRkM2E1MmEwMjgxMGE4OGM2MTUyOTQ1YmMxNmJiZGZiMGMKKworVFNUOiA5OTMKK1NLOiAgZWFjMGYwNmMyYzE0ZjM3ZDQzNGJjOTk4OTcyMjVkZDJlM2YxZWQ3NGFhNzQ0MmM1NTAzMzlkZjc3ZDBiN2IzMgorUEs6ICA0M2U2MjA1NWRiNmUxMzQ5Yzk0ZDg5MDI5MTg3ODgyMDIwY2JjZjlkNzVlMDNlYjY1NmZhMGExNWIxOTAwMmQ3CitNU0c6IDI3YjdmZDBlNzFhZGYxOTRjZjU0MDdiNjc3MTc5MzA2MGRlMGZjYTdjYTBhZTY0ODM1YzQzMTg3NDA4YTcwNGY1MzNkNWVhMGM4M2E2NTQzODdiYTdkYjE2ZWQ1OGVjODM3MjI2ZGY1N2MxZmU2MzgyYzU5MTllOTIyMTNmNmYxOGNiYjU3MzVkMTc4YTQ3NmFmMzVkMzkwYjdjZDI1NTYyMTdjNTMwZjNhMWY4YWIyMzM5YzFhNWU4ZDk2OTM4N2VmZDM5NDE0YjU2YmI3ODRkZmQ1ZWI4OWI4NTllMWY0MDNhMjM4ZWNhMmE5NDFlNmRiNTZhYzQ1NmI3MzQ1MDY5OGQxNDU1ZWMxZTliMzlhMWU5MDdkNmJjN2U2Y2ZmNDI0YTI4ZWVkNTc5YWYxNjMxMDExNWI2N2Y1ZmNmN2Y4MzQ2YjNmYTAyNjBjNmRhMmUyNzc1NWFjYTU3MGJhYmIzZDMwM2NjODMyNDYwYzk2M2JmZGQ1YzFmZmIyZmMxOTkyMTkyOWRkYTJhNzE3ZmJjYmViMmI4NTI1NzYxYmQ2NjBjZTRhMGY3Njg1Mjg1ZDdmYWQ2MTE1YWIwOWY4ZTYzZjVmNzczOTE0NDk0ZTIwYmUxYjUxMmQxMTE0Y2NlM2YwZjY4YzdkOTRmNTQ4NTc2OTRmMjJhZjRjNjk4ZDc4MmNlODM3YjBjMTcyMmJiNzMxM2JiMmM0MWY2ZDNkZDFhMDI4NzdmYjQyOTZkODY2MmE5ZTg2MjU5ODRkYzFmZDFhOTUxMGViYTlkNjQzYWM1OGE4ODZhMDQ1Y2QwZTUzYzA1NmE4MzNmOTY4YjM1ZDAxMzIwZTljYzBiNDM1ZDNmNmJmYWQyNmY5ZWI1NzU0ZDM4ZGRmNmQ1YzRiZjYxNWE3NjQ0YTIzZjk4MjZiY2M5NzYwOTJkODJkODFkNTQ3MDAwZGUwMDgxYjdhNDBhOTNmYmRkYWMxM2Y3ZDk5NzA4Y2NkZWViOTQwNWNkNjM0Y2EwNzQ4Y2FkMmMxZDhmMTY0ZjVkNzdhNGYzNjRhZTQ4OGJlZGNmMWYyMGViOTU0YmM4YTI3OGFmODE0MzI0MTc4NTZhOTAwZjhmMTUyOTIxYWZiZTE3OTE0MjI5YTUxM2JkNzFhYjdlNjYxY2RlMTI5YWY5M2UyNTA5NGM1NjExOGVkMWYyMmRiNjQ0NDI4YjQ3NDY1MWZlMzZiZTgyZmEzNjk1YzQxZmM4Njk5NjY3ZTA1Mzc0M2IwYTQxMTU1YzMxZjFlMjY3OWM2ZThjYjljOWQxZjVmNGI0MGEzMjBhOWZkOWY0N2RhOWI5NDIxMWJhNjAxYjIyYTExNTIxMGQ5ZjU1OWM0NDk2ZjAxNzMyNDU4ZjQ5YWMzNGViMzg2NjM2YzhiNmM2OGM3YmJjMDA3OGFiNmYzOThhNjI0YjhiYWZiMWM2MjI5NTg1NjJkMjMxZGZmZDRkYjA5NjE5NmJiODc0NzllNDJlYTIyYWNiZGNkZThkZWIxMGUzMTE2MzJmMDJmY2ExNDc4N2ZkMzE0MDU2OWI5NDI4OTkxNTQzZWM2ZTgzNGUxMGIxNDlmMjNjNzRiYjk5YWM3YjM3OTlhMjA5NmQyMmUzODdhNzEyYjZmOTAxMWVhMzRjNWJlNGM0Njg1ODFhYzYyY2U2NjIwNjMyNTJlMDY2YTlhM2IxNWM5NTcwZDA2NWRjMTYxOTkyOWYwNmJjNzVhMzE3OTQ2OGJjOGExNmUzZGRjNGZlMTg1Y2ViYTBhOTJhNTQ2Yjg2NzVmYzFhZGU1NjMwNzE1MGM3ZTRjODQ0ZjZhYTVmMWVkYmZiNTRhYzYzMmNhMmIyNTljMzJhMzNlZTI4Njc4NTZjMzM5MGE2NzQwMzY0Y2IwZGZiOTc2ZTUzZDBjYzZjNDJhMTA2YTFjMjY5MThjOGE2YTAzM2IyYWEzYzdmMmU0MzkyZTc5ZjhlY2E1YjMzNmJhYzUwNjFkNzY5OGEzYmZlN2MyYzI5Mjg5MjU1NDAzMGRlNmNlN2MwZDA2ZWVmYzU0OTA2ZjgxZTAwOTdmY2ZmMjdkMTRiOWI3OTk0YTc5NzBlMWE1ZjVjNmI2NDA1ZGNhMjIwMzNkZmYwZWFlMTM4YWQ4OTlmNmVlNjgxMjBiOGYyMjc0NGIwMjY5YTlhODk4OWI2ZjdlMDhhZmZhZTc3YmNhMjE2OGFkZTI0MDU4YWU2OGE3ZjgwMGUwMmU3YzM4MzkxYmFmNTY1ZGQ0MGI1NWZhM2FiM2MyNDdiOWNlYjRkOTY3NDcxNzc1ZTY2M2Q2YTFjNmM3ZTE3MzUwYmJkNmI5YTNlYjFlNDg0YWMyZTdhN2E1Yzg0ZjUwODNlNWFjZTg3MzBkZTg5YzQ3ZThkY2Y4MzQxZTQwYmEzNDVkYmQ2NmJhZTBmN2YwNzZhNzA1YjFiYjdmNDcwZTNlZGZiMmI3OGU0ZDYzNTk0MTNkMThkMzMyODBiNDU0YTBkYmI4ODFkODYwNjcyNmZhOWJlYTI3MjQ3NWU3OWZlYTZhNTRjYjRjMDYxOTU0MWI0ZTc3YzE3MGM4NjE2ODc0Yjk1NGJlYjhkMTA1Yjg2YmQxOTE3ZTI1Y2ZiYTkyNjcxODdlZTIwMzhiM2YwMDc4ZjRjMzE4YjU4N2NmNDQKK1NJRzogNDVmMjgwM2FmZWIwZmM0NGQzYWE5NjViMTI2NTliZjUwMmU0NzI5NTcwNjE4NGIyYTFjNmYxNmQwNTA2MTNmNTk2YTIwMDEzOTRlMDBlMmE0NGM0NmNmNjUwNWQ1Y2Y1YjhhYjg0MTJmMDdlZGE5NTFhMTUwMDVlMzM4ZjNjMGUKKworVFNUOiA5OTQKK1NLOiAgZTYwOGQ1ZGU5Nzk3OTA3ZGI2ZDk4ZTAzNDVkNWNhZjJhZDMzZTBlZGRlYmYxOGI4MWQ2MWU4MzczZWNmYjQ5OQorUEs6ICA2MGUwYzE2YWRhNTg2ZTM2NDY5MTJhNWYyYmIzMThmYmMzZDUwYjU3ZDM2ZmFiYjYzNzY5NmY5ZDhkNGRjNzYxCitNU0c6IGU2MTBmYTdkODM4NWMwOWM3ODk4OWVkNWVmN2EyMzA1NDdmMDEzY2I3ZThkZGYzMTc0OWZmYzMxY2VlMTBhYjNlZmFjYTNmMTRlYTE5NDUxMGYwOTg1YTgxOGVmOGIwNDBlMTBjM2E1MTE0ZGUxYWMwODBmMTRjM2Q2NWQzYzI0NGY5MjQyZjc1NDkyY2FiYWU4MDBmY2ZjOWJjMjc1ZWExZjI3NzI4YzkyMGMyNThmZTdhYTczOTQ4MDYwMjk5Y2I4NzgzNTc5MmVkY2MwNzIxNTBiNzNjZWZlYjBkNTE1NjJlNTNiNDY4MTBlMjdhNGQ3ZjZhYmQzMmU5NTlmN2Q3MzFkZGUwMWQ5NGJjNDFlZDgzNWVmY2Q0MmM5MjI0MzcwMzdhODdkZDM2NmZmYWQyZWVjYWI2YWJhZWI0ZmNmMDczOTJiM2FiNDBjZmFlZmVhYTQyNjZiYzUzNzY3MTY5M2M5MDkzZGFiZThhMDUzOGNhZmQxMmM2MzlhMDRiZDJiYTgwY2UwZjI5YWRiZmM2NmJkNDYzN2NhMDU0M2E1M2IwZTM3MWQwZTJlNDcwZDMxYmEzNjA2NDJhNDVhYjRjZmUzZTc5MGY1ODdmNmM1YTU1ODNmZDE1YjE4OTk3ODM4YTIwMDkyMWMxYzM5OWMwYjE2Mjc4YjdkZDZkM2FhYWI2ZjMyNWIxNmFmZGY3NjFhMWJiZjg2N2RlMmJkZDQ4NjE1ZjE1YjUyNjc3MGVkMjBkNzlmMGYzMDcxNGJlZWVkYTU4ZjUyYTNjYzBjNWE2MTgzMTVlNTIyYjllYmU3Y2Q5OWI2NWVkNTMyYTYyZTBmMGRmNzI3NjRkNmVjNmQ2ZDFiYTQwZWY0MGUwNTQyNjM2MDc5NWQ2ZGQ4NWJiMzlmNzMyMWQzZmIwNjI3NWRlMDk2YWFlNGEyZmEyMjkzZjMxYjMzZjRhZDRkN2MyNTFhYzEzZThlMTVjMmJmYjFmOThmNDk2MmM1NGI2Y2UwMzNiMDhhYTYyNmYyOTA1ZDQ2M2Y1NWI3MWNiZGFkZWNkYjNlMGIzNjVkYWUwN2IxNzAzMDE5ODNhZWI4M2IxZTlmMmYyOGNmNjU0MTlmZDZiMGExYTljMjZjYjU0YjU5NDlmNGJjMDFhOTg2ODE4NDRiNDMwMzRjMzcyYTQ1M2QzOGYwNDczZDBkZGM3MDlkOWY0OWM4NzUzYTc1Yjg1NmM3ZTk3NzU1MTdkZjU3NGEwOWEzOTUzYmRlNWRhZWRmOGU0YThkYTlkNzczYTIxNTEyMGUyNjlmYTE4NjExMzNjZDRjZWFlYjkxZDVjY2EyNjA2MzI1NDU4ZTUwY2I5NjZkMTQwNTViMjI0NDdlYjY1ZGMxMDExOGRhMDgzMWRmMjhjM2I0ZWU4YjExZjA3MzJmMTUyMWJiOTQ4MmIxMWY1YTg2YjIyZjE4ZTgzZGQxZDk2N2QzOTQ0Mjg1ZTVkNjNhNWE5ODk4MTdhYjI0MThiYzdlZDg5MWEzNzM4NDY3NDdhMTJiNTI3YzJmNDRlZTAxOTdiOTQ2YzY3ZTY3ZmE0YWExYzI5ZjMzNzlkNDZmZTA3ZDNhYWI4M2RhMTdmOWQ3NmJlZGQzODQzNmEwNTVlMzRjYTFkM2FmNWE4NzU0ZDM4YzE3YjliYTRlNjQxOWNiYWI1MTVmNDMxYTI1OTU5NTRlNDI4YzI2NzBmYWUzYmVkNjJiNDU5NjE3OWNiNTllMjExMDg3MDhkMDcxYmNmOWM2MjFjNmRmZjAzZDNjZGM5MjAyMDI5NDU0MDEzYjlkMTMzODQ3ZjI2NTQ0ODExYzAxNjk3NzBmZGM2ZmU1NjM4YmZkN2E3MjBkOGIzOGY3ZTMwYTdlNjg3OTA2MGI1ZjI4YzhhYjE3YjAwMjAwNzEzMjA3ZTg2MzdiZmY0ODQ0ZDg0MmQ5Y2E3ODgzOTEzNDAxOThhM2ZlMDE3MmRmYTc0ZGUxZTU1YWRlZmJjMmU5YmM3ZTg4NTQ3NmQxYjljMDU1ODEzNDA4YTQ3NTI4NDM0MzU1YmYwM2ZkZDRlMjdkOGIzNDYxYjBmYjY2YWIzZTE1YTg3OWExODQ0NTdlOWVkOWVhNmM1MWI2NjNiMzFlZGM4YzRhM2NkNDU0ZjY5ZDljZTUxOGQxYjg3ODg4ZWUzZDlkZDU0MTZlNDNlMTE0YWMwNTcyMTM1MmRmZmMyY2E4ODU5NzM3N2JiYzQxNDAwOWIwYzJmZDM2OWJlNWJhMzVhNmRjZTM0NzhiNmMxMWIzM2MwYTMzOTE4YjZlZTVhYzRjZDRjMmYxY2E2YmQxOTBhMDAwYTgzOGRhMzhmNTMwNzc1NjAzMzU1OTZkMTM1ODkzNzc5Mzk2MzgxMGE3OWEyMWI4ZDQ2MTQwZTc2ODg5OGRjZGE4OGEwZmFmOGRkZDBkNjMzODQ3YWFlYTBlMDMwYmU2NDU1YjQxZTNlZGUxZTI4NzM3MzBlYjg0ODFhY2FhN2E1MTljZjkxOTU4NDdhODZhZmE1N2Y5MDcxZDQ0ZjRhZjRjYTBkMzQzYzkwYzBkMjJkOTQ2MTQ2NTg1ZjAwZWYzYWVmNTdmMGY5ZTU1ZTgxOGMwMTI4YWUyNTVkYmMzMTE2Y2YwZmUwMjE2NmQ1NDg1OWRlY2JmZGNjYworU0lHOiAwZDhmMDk1ZTQyYTI3MzBhM2M3YmVkZjQyZDVjODMzOThiNWMwZWU5Yzc3YzVhNjFkOTgyMjkxMzk2YTkxODJhMDgwMmEzN2YzMjRiYzRmYjVkNGFhNGVkNjA0NDRiNjYxNDRiYWNiYzg2NTEwNWQ3NjkwZjE0MDY1MDY5MWQwMworCitUU1Q6IDk5NQorU0s6ICAwZTg2ODcyYzc4NjIwZjEwY2I2ZGZjNDYzZDJjMjg3MmM0ZGE2NjA3NDhjOWNkYTAxYWIxNDU2OTU4YWZiYTdmCitQSzogIGRlNDk4OTk4OTI2OWNhYmQ4ZjRmNDA5Y2YxYTRkOTc0MDM4YjI3NTUwMjI3MzU1N2YzMTJkNTU1M2ZhYjkzYzMKK01TRzogYTkwMGYzZTljNjQzYTU2NDliMDc2ZmI2OWMzYjJhYzA4NGQ1MmNjYmFmY2RjYTVhOWRiMWRhYTcwNTAwZGU5OTMzZDIzZDE1M2Y3NDk1NGUxYmQ1ZjU3Yjg5OWZlOGE0YjEzNGMxOTU0MTJiNDk4MzNiNmU1MDk1YTY1NTRlYWE2ZDg0NGIxMWYxNTg0Yzg1MDU1Yjg3ZjQxYzk5OTY2OTA0NmM3MWFlYjVjMDQ1M2ZkNmEzYzQzN2Y4MTVmMDY4OTg3YzM4NjhjYzA3YWEyYWY2NTgxOTA0NmMzMDdiYWZiNzUzMGRlODRmNzEzMGFlYTc4ZWYwMDVkNWZmZjUyZjhkZWFmMWQ1ZTljMzI2ZDMyMTdmYzU1Yjk0ZjYyOGFhMTA0ZjZhMjRhMzk1ZTYyZDFiNjJiZDljMGQ4MjQzNjMxOWM1ZDczZTU3NjU0MzVmM2JhODU2YTQ3MzRmZDYwYWU2MTdmN2YwYzNiYTU3MjJhNzMzNjZjODhhNmRmZWNhODVjNDQ0NjM5ZjQ0MWYyYzU1ZmRjNDY0ZWNiMjk5ZWVlMzZkOGVhZTA2M2JiOTRiYjI0MzlkYTA0ZmE1ZWJjNTA5MjMzOGE1MDM1ZTQ4MGYwODM0YWVlZThkNzExZjI4YzQ2ZGM5NjBkZTFiZTlkZjMwN2MxOGM1YzE3OGIyNjI5NmRjNTY3ZjE1YmY2MDg2M2EzNjcxMDg2N2U5MmZkNTEwNDg4NjU2NzRjMmFmMGM1M2IyZTdhMjQ4YWU1YmQwOWE0OWFhMDMwNjE4NDk1ZjgyNDgwYzQyMGFlMTA2ODg5YmVjMDA2Mjc4YjkyMjcyMDc1NzA5ZmVjOTU0ODdjZmIxMDA2MWU2NzIyYjkzZWViZmMwYmM1ODdiZjdiYTVmNjY5MmIwNzRmNTVhOThkNWMzMDI3NjBiMWJmMWQwOWY3ZTg2Njg0NzljYTZmMDFlZWRhMmZkYWY1ODRhYzIwNThmYmY3Y2YzMTAwZDA2YjgwOTFiZmVhYjUxYzBjMGIxZDRlZTNhODI1N2Y2OWIxNjE3NjA0ZmNlOTUzYmI1ZjdmMjcxYzZhMTg4MGVhMWIzZjY2MjY3ZTI0MzlmMzQ1ODA2Mjg5MTc4NzdjNjZlYzBmZWQ3NmU0NGU4YmIyYjkxYTg4MDZkZjRiYWNhNmNjOTI4ODliODgwNTA3MGM5YTYxN2Y4MDcxNTc1MzA3NTFjYzE3YzQ3YjA5ZWViYTk0ZDIyYjRlNTQ3YzM3MGNlN2E0OTZmY2FhMzQxMmFmZmZmYjhjOWI0ZGU4OWI5ZjEyMWFhZWM1ZjU0NGIwYzcyNWVjNWVlOWQ0YjM0NzZhZGM5ZDA1MGVkYjBmZGJhZjAyY2E5ZTM4YWYxNWY1MTUwMTVhMjY3MjkyZWM5YWE1NDQ0ZWQxZGVjZDljZDllMWVhZDY0ODdhMGNjZWY5OTViMWM2MDBhMDM2OTM1ODM4NjYwYWNhYjI3NmQ4YjBlNWIwN2Q5ZjM2MzUzMjE0YmY4MGY5NDFhYzg4Y2Y0MGEwOGFmOTE3OTI2MjM0MTEyZWNjZGFhMTYyZGM5OWRlM2UyNWJhZmY2NWJiMDFlNDk4OTg5ODYzMzJiZGMyZDcwNWQ1YWVhNDBmOWJjNGZiYjI4MDY4OTQ0OTYwMzhkYTIzNmU5ZGMyOTYwMGM5Y2VkZWFjM2I2MTZjYzU2ZDg5ZWMyZmE2NzM4OTY2NmM2YzRmZTIzM2I2MzkxMDUwMjNlMTAxYjg3NGE2MzMwZmU1NzNmODBhY2U1NWQwMzdjYzYxMmU2ZGZkNWE2ZTY4NmY5YTgzMDU0ZmM0NmUxNWJiNmRhNDUzZDgxMGNmMTM4YTE3OGJmMDM5ZDFlMTgxNjE0ZmY0MGNiZTZiYjNiNDczNjYzNzUyZWE4MDI1ZmY3ZjczOWVlNGI2NzExMGY5NjgwODliMjQ3M2NkMDQ0ZDQ4YjAwOWQwNjc3Zjc5MWY1NGUyZGY2YWZkYzNhY2I5ZTk5ZGQ2OTU4YTQ1MGMwZTFiNmRkNWU5N2EyY2M0NjI5OGI0ZjQ4YWM2YWRhZjAxM2Q3NWIyYzQyMDcyZDJlZTEzZjczMzY4N2VlODNjM2Y3MGM0ZmRkOTcyMGZkMTc5OGM2NjJmZWYzYmEwMTJiZWRkNDQ1YzQ3MjlmMjEzMDQ4NGZlNzdhYzFiNGM0ZGRlYjgxZmFmNjBmNzZlM2JkN2QyMWE5YTZjNTdhNjlhOWNkOWNjMjAzZmM2M2I1OWVlODRiODkxNWIzYzE4YTU5NTRlMjI3Yzg2ZWJiYjdkNGM0YzFhMDhkMGM1ZTQ2N2M2OGEwNjk3MDc1MWVmNTg0YmRkNjExZTFkZDFiNDg5MDBhYjM1NGI5OWNlYzZlMWRmM2JkNDE0NmVhMDc1NTM1MGRjMTFjM2EzZjYwMGQ0NzBhNzRmNDc1ZTRmZWVkYWYwODY1Mjc2ZmE4YTk3NzEzNDcxZDBjYTk5NTVjNzEzNTg4MzM5ZGVlNzk2NTZlNTY3ZTZhYjFkYmY5ODMwNzAzODE3YWU2MjA5MjlhMDY4NGE1Y2FmMjBmZWY4MWE4ZWU4OTdiZTdlNTA1YWRlNjQ5NmI5YWVmMDI3MmJkOGYzNTA4NjAyMzNiMzM4YzJlMzZkMzEzOGRiNjk1MzgKK1NJRzogMjAzN2U5Nzc0MWMzZTY0MDljNjZmYzY3ODJhYWIzODljNWQ3NzgwOTdhYzc3ODk5OWU4NTc2ZTQ5ZWY0ZjZhMGM3NzMwYmQ5ZTA5M2RkM2MwYWU3ZWM3NjIwMzM4MGRhNjU3MTQ3ZDMzYThkOWRkNjVlZDAwY2Y3NjIyNGQ2MDEKKworVFNUOiA5OTYKK1NLOiAgNTIwMzU0ZDg1YTg3ZDdjMjJjYTZmNzg0NzE0NDEwZWM5OGJmNmE2NWY4MDNlZjkzNzliZGM4MDQzNTliMjM0OQorUEs6ICBkODUxMWNlYWMyZmQ2NjFhY2JmZmIwMWJhMjc0MWNhZDg4OTkzNGRlNjM5Mjk2MWJkZWM2ZmE0NjEyM2I3ZjBmCitNU0c6IGExZDRhZDQ4NmViYjdjMWEwYWNiOGYxMTcwMTNlOGU0NzQ2Nzg5YzYyNDRhNTZjOWVkZmJmMWVmMzdhYzEzMDlhYWY1MWM5Mzc1ZmMxMmNhY2Q2ODk3YTQ0Nzk1NDVmMmJmMzkwYWI3YzBjMGU1YzU5MmY1NTA2ZTk5MzgzNzhhMTFiNjM2YmY4NTcwMjliOTY4NTQ3YWE1MDZjNGEwODI5YTE1ZmQzOTk1ZmVhZDRmODYwZmQ3YzYyM2M2M2U4Njk1NDM2ZWFlNTU4MTY0MTQ3NzgzNDcwOTJmNWY0ZDQyMmJiMWI1ZTVhMDY5NjYyNDFlZmVjMTRmMWU0ZmNhMDY2MzkxMTQ3MThjMzBlYmNhZGQ0YzZkOGFiZTdmZTkzYjI1ZDE3MTczNTMzOTU0MTg4YjFhYjAzZmNiNzc5MmNiNjM1Y2UzNmU5YmRiZGRlN2E1NjFjNWY2NjkyMGQ5MTBjYjI2OWM4YzFjM2Y1OTMyNjUwOTAwNzJjNDg5MzJlNjkyYTljNzM4YzcwNDg5NzQ4OWE3MTVjMmIzOTRkNWE4NmY3MDM2YTRjYWM1ZGNiNWI4NWNmYTE2MjE1NmUwYmM2YmZlMDJmYjRjMzg2MDhjZmIyM2M5MmI4YjZhM2NiNDZlNDg3ZDYwZTBkYzk3YWEyZTMzZTNkYWRhOTI1ZTRlNjYxMmNjNWFmMTI1ZTVhY2E0NTgxN2EyZmQ2YzNmZjEwYjE4OTM4YjQ0YmQ0ZGQyMGQ3ZmNjZjdmMjZiNDBhNjZmNDhhYWZmYzlhNTQxZTZkMzcxMzhmYzU1NDY5ODY4ZTJkMTAzNjVlZmYzN2ZhYzM2MGZhYjNkYzU1NDM3YWMyZDhmZWE3NDc0NDA1ZmIzNjMwZjc5NjNkMmQ0NTk1OGY5MDlkMTQ4MzAyODZmZjE1MmFhNzUyZjUxMGNlOTgwYmQ1NzU0ZTNmYTMyYzY5OTI0ZGQ5NWQ1YzE1MmE3MzdhOGZhZGNmZDBhNDU2MGUwYjExNGY4ZThhYWE2MThkNDM4Yjk4NzcxMTFkYTE3NDBlZjgxN2M0NDE5MzllY2VjNzk5YmExNmIxYjE3MWNhOWI2NDliN2Q3OGZhMDUyZDE0OTdhNTA3Njg4YmVkZTQ5MDBhYmM1M2E5NjQ4ZGE1OTE3MDM1Y2VmZmUwZGEyMWMyNWMwOWIwNmQ2MTg1YmRkYTJkNzc4ZjdlZGU2MTUzZTNlYWZmNDk1Yzk3OTZkNGQxNjZkMmQyZWE0MThlNGE0YWE2ZTY3OGZhZjA2OTZlNzUyYTA5ZTAyZWFhZGU3NjMwNzBlMDg4ZTk5NjQ5MTlmZjRhYTRjODJmODYyOWEzZDVjNzk3YzJhNjQ1OTRkMjA2ODM1ZGEwYmZhNDNjY2Q5ZGRmY2RiNmFhYzRkNDg2ZTAzYzg0MTIyMzc1OTM5YTUyNzBiYzE1MTllMDcwN2U1MWMzZjQ2ZjFlNWM1NjZiMzNhMjQ1ZmEwYzIwMjgzODQ3MjM2M2RlOWYwZWRkZTJlNzkxZDgyMjkzMDk1Zjc1MGJmZjU0NWU2YzM0NzM5ZGNjNTRkYjBhMzZhZTJlMmFhMzliMDdjYjRmNmE5NjQ2MjQwZDJkMzE0ODhmNjc4MTViMjk1NDVkMjIwYmU5MjllMzMzOWY4MjgxYTkzN2UwNWE4YzVjMzg4N2UwNjA0OGVhN2IxOGE0OGY4ZDkxYjFlM2FmNWNhYjVjZWRhMGViZDcxYmY1NGVkZWMyMDNkMzcxNjVlNGM5ZjlmODA0NjFjZDI5ZmNkOTlkZGVhNDM5NjkzOTQxYjVkNTNmZjk0Mzc5Y2Y2NDI1NzFkZDU1OWExMWY4ZjM4M2Q5NDNmMjI1NWNmNzE1ODAwYWY3NzZiMTA0NWJmMTlhOWM5YmIwOTUxNTVkZmI2NDZiNjVmNGEyODBmMmE5N2VmOTI3ZGRhYmUyNGEyZjk3MWE4MTcwZGQ0MmEwODkyNzY4MjVjYjkxNDhjMDE1YWFlMWU5ZGFkZjIyYzEwZTc1NDhjNTliZjZiODY4YjIwZTg2YzgzYTllNzM0M2FlYzI3NTRlZTYyMjVmOWZkY2VhZjhlNTFjNDBlOTU1YmRhNDljMzVkZWQzOGZhOGJjYzFlNmM4ZmM5YzI0MTJlOTEwNGM1YzIzNjhiMWY5OTIzZTAxMGZhMmVkZTkxMWQ0MmIxMzlmNDAwN2UzNDI2OTIyZmZiNjE1OGVjYTk3YjQ3Y2ZjOTk3ODUzNTEyYmI5ZDRjYTJmMDE3YzJjMjYzZGMxOTlmM2JmMWViNGYxNTA4ZWY4MjhiMGUwMGRiMjEwMDI3MzZhN2YyMmVjOTEyOTgxOTQ1ODMxMzlhZDc1ZjU4ZTIxYjUxOGRhYTQ5YTQwNzZjNjM3NWZhYTYwODkxYTY5ZTUyYTY1NjY5OWQ4MDM0YTdhYjdmY2JlNDIxNzU0OTE0NDFmZTYxYjE3ODNlODM3ODU3NTIyMjE1YTVmYWM1NTkwYmVkMmU5ZDIwNjYwNjA5NmQzYmU4ZWU5Mjg3M2JmYzMwY2FiMTVjZTlmOTkxMGQwMWExMTdmODk5MjZjYzNhZmE4ZDEwNGY3OTlmZjM4MDk4ZGUyOGI4ZmYwZjAzODcyNWMyOTAzYjI0YzE0MjljZWE0OTI1MjQ5ZDg3ODEKK1NJRzogNzU0ZTYwZDNmNmY0YWI0ZjVkMGRkYmIwMDE1MzIwMDkxNjYzODg0ODdmNzgwYjc2ZjYwYmQwYmM5ZmVmYWJmYWFiNmJlMmFlNzg2OTU3M2E2NDc5NmVmMjg0NmU4NWU1Y2RhZTUyZGIxMDQ0ZmVmYTc5NmJhY2Y0OGI5NjhiMGQKKworVFNUOiA5OTcKK1NLOiAgMDYxYmNmMWFhNmZkOTg5ODk3YjMyMmU1OTFjY2VmNTQ1NGVmNGE1YWRiMWE0ODAwZjMyNjExY2ZmMmI1YmM3OAorUEs6ICA3M2M4MGI3MzRiZmM5NDE3ZDU3Njg5MGMyMDE2NmRhNWM3ZmFiZDYxM2Y3NTQ3NGY3NjQ5NzMyZTAwMjk1YmUyCitNU0c6IGQ2M2JiOTIwOGMxZjRjN2Q0MzMyNmNmMzVmYTVkODM5MzMxNTE4MDRhYjg5MWQ0OWIwYmRhZjQyOWU0YzM5YTMyMTQyOGUwZDkwYWEwMDMxOGI5N2UwOGM3MDI0YzkxMmNmMzg4ODc5ZjNjZjk3NGJiMjUzYTFlN2E0YzhlZWMxOTNiZjRjMTRhZjZmYjk3OTRkZjBkNDk3ODUwZWRiMDRkNTc0Yzk3ZWQ3NmM3MDIxMzk5Njg0MDFiNDBlYjU0Mzk0ZWY0Y2ZhYTdlNWQzY2Q5NDNhZjEyMTkyNTM4ZGRlZTU5M2MyYTI0YTI2N2FmYTEzNzFmZDc3ZmVlZTIwNzFmNDM2OWZiZWY4Nzk3NmU3ZWJkODFkMWU1YjMxZDZlMDllMDJkODMwMzU3ZDM2YmZmODU5NjcwM2U0MTQ2ZDA4MjdiZWM5YzBmODdiMjZmMzExOTVjOTZjOTNiNmQ4YzQ2NzY3ZWMxYmM2ZGUzOWYwMDA4YTQxZmY4NzVkYTA1MGEzZjg2NWFiOTJjYmYyOWMzOGEyODBmM2JmNjlmNjhlOTJiNWY0MzBjZGVlMzUwMTk4MWQwYjNkMTg5MDk2ZTBhZWFjZDY0YzMzMTAyNDIxMzQ4ODEyMTU4YmI2MWU1MWFlOTM2NTkyYjJmOGYxYjkxMDk0OWVmMzcyMzI1OGE5YjQ0ZTRlMWJkYWRmMWFlMmNmYzE4ZTM3ZDJlZDBkZDE3MzQ0MDRiOGJhYTVmMzkzY2Q1NjA2OWVjZWJmN2VkZDdjMDZjZjZjOGFhM2U4ZTEyZmJmOTQ2ZDdiMzJkODQ1M2I2ZmJiNjUzNTUyNmM4ZmI4ZmMxZDU4MTU1NjBiYjMxYjk5NWRmMmFkYmQ4MzZhZGQ5MjlhNTZmZGQ5M2ExNzQ3ZDkzYTQwYzA1ZTEyOWViNmY4NTgzYzI5MjFjYzlkYmRkYTQyMjVlMTc2ZGIzODZhMDJlYzQwYWYxMDMyYzliNjJlOTUxNDcwMjVmNGFjOGRkNTg0MzNiNjRhYzA3MzE1MGM2OWI5YzQxNTRkY2JiMDAzNDRmMzA4MTEzY2Q5MTk5Y2NmYjUwNzU4MDFjNzA1YjhmYzQzYjdjOGJjMTY3MzY1ZTQ2MjkzZDA2YzRmNDgzNWM2NGVlNWQ1MzgzZjY4OTBjYTM1YTgwYWY5MTc3NDgxNjJkZjI1MThhYjE0NjhmMTUzNjI5ODk5NDA2Y2RlNjZjZTA3ZmE3ZDI5OTNkYWJlMGM2MDA4OWM5MTg5MjQ4OGYzYmNhYWVjNDA4YTBjZDA4YzlhYTk4ZTA5MzdlMDJjNDFhZDUyZDI0MWE5OTgzM2UzYjgzZjdkM2YxYjA3OGMzMWQ0NWMzNGZhMDE3NWFiYmQwZjMyMmI4ZmQyZGM4MzQ5MWRhMjkyYWQwMDc2MmUzZTU3N2I5ZWVlMGFhZTA4NzI5MDcwYWMyNWUzM2JjOTQ1MjViYzBkMmFiNTk3MDRlZmVjNWMwMTQ4NDIxYTQ3OTI4ZDM0YjFlNDVjZTcyMWVlNjQ0N2ZiMDgyYWM0MDBiM2U2ODQ2ZDIwNGY3ZjlkYjZmMGEzMmIyYTY5NzM4YjNlZTlkZGJiMGRiZDdlMGYwNDFkN2VhNTNhNWQ2NDdmYjUwYjM5YWUyNGQ3OGM4YjA3Y2ZjNGUwNTI3MTFmMGQ0NjM5ZTcyMWQ1YzM2ZjMxYjU4ODg2NjcxMmI3NTcxMDhhNDBjYzdhYmJiOTkxMzA4MzMwM2FhZTA1YTBmMWFmMGVjNjg3ODQ0MWEyNWNmODcyOWFiYTQyYTNhOTRjZTliNzM4ODhhMGY1YzllNDBjOWZjNDU0MTBmMDY4MWZhN2Y5MDg5ODU2MmNjYjRiYmM1NWYwYWIxZmU5YzcwZWE2NjAyNmRkYThkNzA5MGY3YjM4ZWRiNWFlYzE1NTdiMTE2Njk4N2NkNDFhNzA1OWNkZWU2MDliNzRkOGZlMDZiNzA1OWI3NzI0YmZmNTMwMDdmN2UxMTA0NjJmMDZhZDE0ZDA3ZWUxYjRkNjlhYzgyM2JjZjU3NmQyZmE5ZTJlOGVkN2YzMTk4MDQwZDQ3MTI5NjA2MzEzN2M5ODFhZGJmMzY0Y2IyMGYwYTFhZDIwNTQ0NzJmN2NlZTI1MjdmOTk4MDk2MTVkMmU0YjczNGIwNmYzNWRlZWNiZDYyNjE5NjYzZGRlODFkNmUyMzUyOGIwYzk3MTMyYWYwYTIzYmFkNjNkOWMwODE0MmEyNmUyNzQzZjg2MThlY2ZlNzIzYjE5ZmZkZDBiMTlhYmQ5YTNmNGZlMjEwYjFlNzFhY2RmZTM4YWJlYmUyM2Y3ZmRlZjY2MzgxY2JjNzVmMzA3ZTU1NzcyMzViMDJlNGNkOWNmYWExNTAzMDg2OGVkMTQ1M2RhNThmNzgzYjczNTJiMDQ2NTY4NDRjMDQyNDQxZWZlNmEzYjRmOGZlYzhmN2RlODA3NDQ1NDBjNGZjN2ExMDdmNGUxYmZjYmQ5OWRhMjViOTc0NjA5NWRkZjAxMjVkNTZkYTdlN2Y4NjAzZjA0ZDM1OWEwODhiNGMwNDRmOTM2Y2NiN2Q4Zjg5ZWQ1M2NjOTkxYTM0OTdjYTk1MjA5NGZmM2MzMzA0NmYyNjA5ZDA3YjI5YjYzMzk4MTM2OWNiMmYwZWVjZAorU0lHOiA1YWRhYTk0MzMwYTAzNTM3MTJhMzRkYmU5NzNiNzUxOGY5YTJjNzEzZjhhYWQxMDAyNTFiMDg2YWU4ZGUyNmY2ZDJiNmNjZjA1MjhjYzVkZWRjYTMxOGRmMTljYzdlNDVkZWFlMjgxZTEzMjRiOTZlMzJmZWY0NWFhZjYwYjEwYworCitUU1Q6IDk5OAorU0s6ICAyZTE5Y2Q0NDJmMjJhNGE5OWRmZmM1NWU3YmY2MjVmODlkMTM0NGI1NjNmNjc4NTMxM2E3ZWVlOTczYjRhYTM2CitQSzogIGVlM2RhNzZhOGZjZjQwM2EyOTU4ZDQ1NTFkYTBhNzJiMmU3Mzg1MjJiMmU2YjIwZmJhNmFhMjZiMzIzMDczNTcKK01TRzogMWJmYzVjNmFhNmE1MzU0ZmJiODYxNDY5Nzk2MzQ4YWM2MzE5MTI0ZGEzZjEwZDIwZDUwYmJkYzcxNTlkNDFiNWFiYjEzNmM3OTk2YTc3Mzc5NzEyMmI1MjVlOGUyZGNhMTk1NGY2MzkxNzA3MzAxZDkwZjIxMDFiNDZjN2IwODZlZmExNTg3N2NhZGNkMDU4MTJkYjM0Yjk5NmNiNGY1MzFhYmNkMWU5OGRiMDhhNWNmMTM2OGU4ZjRiMTEwOTE0MmU5NTYyYmQwMDg1ZmZhZTVlNjYwZjU5YzkzMDc5M2ViZGI2ZTgwYjBhMmY0ZjNmNTliZjlkMzk1YzQ4ZDI2ZTBhNzJhNjBmOWQxZmY4N2ZkMmQ3YTNmNTM4M2FhOTAyYWRlZGVkZWJjNmNkMWJlZmQwMzgzMzYxNjI3NDlkOTFhOTU3Y2EyZTNkZDQ3MDkxYzU1OTMxMTNkYTg3YzNkNjZhMDJjODBhNmVkZGI1MzVjNDhjYTFmMzRhOTdmZDFjOTVlYmMyZTU3MGZjOGZhZmU2ZTVkNjU0NmQxZjNhOWJhOGRhYWMzMzRjZjQ3YmYxMTdlMTI4MGQwZWJkZjE0YjBmY2RiYjQzYjhkMjQ4Y2M2YjYxMzIwZmRiMDQ0OWVkNWY1ZGU4YmFiMTIxYWYwZDg1NTQ5NTZlNmExMjAxNmI0MjY3N2I0NDM2Nzg5MmMzYjIwYWZjYzJjYjljZmI1YjEwMGE5NWI1MWU4YjA3ZGE5ZjUxNDE1ZjRjZDc3ODFhMzEzNzY1ZTIwZGIyN2YyMzQzZTBmNzE5ZWNlYTlhZjAyNjk1NmYzMzg3ZTllYTdlZDBhMjkzNzU5YjRhMjYyMjAyODA3YjQxMzA5ZmI4MGY1MDE4NWRiNmE1ZjhiZGNhMTc4ODQxYmVjMDZhZGRjNzYxMGRmNzYwMTdiNTE0YmM0MTQyZjI2YTM2YmY1YmFjZWNiMDEyZmE0MTcxMGRkODQ5YmVmN2E3ZTQ1MTQzMjgzNmZlOWIzMjY1ZmQ1YjU5ZWU0MGIwNGRhZDg1Y2Y0OGY4OTE0NjVhODQyY2Q0NTAwYTEwMjRlZWZkZjBmNTU0ZjBjYTE3ZWM5ZjdiNzE1MjU2YTliOWRiZTI3OTY2Mzg2ZDhhYzM3ZDNjNTE1ODk2ZGUwZjdjZGY3Y2Y1YjMyMGZmN2E4ZWY2YjM0YmE4MjBhYmE5MDY2ZGQyNTNjNWI3NzYzNzc3Zjk0YjJkNmFkOGM3MTAyMjFlMTEzNzUzNWRmZjhhMWI3NTY1ZWM4MWJkOGRkZWI1MDJlM2Q1OGZmOGYxZmU2ZTg2YjhkYzE1YTNhYWVjNjg4YmJiZWNkNDY4ODI4MWRiMGY4MThkZTBmNzI2MWJhOWNjNThjOGJjMGQwMmUwNjYzMmVmZTcyODdhZDdhODQzMzFhODI0ZDkyODczNDRlZmFhYTc0ZjFmYzU3NmQwMjY5NDMwZjg1NmE4NTY1MjY1YjlkNmVmNzFmZTEzNGQyNTEwYWIwNmI2MGJmM2MxNTNiNTdlY2ZkMmU2MzQyNDAzZmU2NzhiNTg4NmI2YjczNGI3ZDM2OTA2NjJiNmM4YzZmNmUyNTBlNWFmNmE4MTgzMTY2ZGRjZDBhMTdmMGNkZGM4NjM2ZWYxYTY4NDk4YmU1MGI2NTk5NTM5ZDQ2YjRjZWE5NzEzMGUwOGY5NGNhNTNlODg0NjQ0ZWRhNzVkMjNjZDJjMDM4YTVmMTdiNTkxZTIxMzY5Mzc4Y2QzZmI1NzYyZDFhN2MzZTY2YTExYWU2ZTkxY2JhZTYxNmFkMDU1ZTM5ZGM0MWUxNTRmNGZjZWQ3YjI2OTZkOWRjNjczODBiYjhlZWY0NzRlOWFhODNjZWM0N2ZhZmFmYjk0MWQ2MjY1NjRiMjA3NWJjYzA4NTZkYThkNmUxYjBiOGYxOGJhZjc1MTNiYmQxNGU0OTFlZDUxNzk2OGM0ZjcyNDFhZjI1MDk4ZWU4ZGYxMzBiN2EzNGQ1OTczNmQ3ODM2ZDMyM2ZlM2Y0M2Y1MDhjZGNiNzU1ODk1ZjU5YTAwYzgwNGVkMTY0Y2MzMzk5MmYzYWVlOTYyYWU5ZTk5MGI3NDI3MmViOTg3YjEyZDkwYjI3MzE0ZDU3NDAwZTczN2QxMzQzZTk3MDk4NWM0MjcxMDYwODc2YWJjZDcwNDllN2M5ZmUyNDRmZjNlZjk4NTYwOTk1Yjc0ODJkMzFiYzdjMDlkOTk2OWY3Y2Q0MWY0ZTRlMjUyNzUwZGMxNmNjZGIyOWI5ODUzMTRhMGI2ZTc0OWM5NWY5YmQyODM4ZDVhYzQ5ZWUwMzFmZDA3OWJlYzMwMjhkZDlkZDA3ZGI2ZmE2MjJhZDYyMWIzYjFlMTI3ZThmY2EzN2JkMTQ2ZTNjZjcwM2U5MTE3MDFiN2ExNmMyZDMwMzY5Yzk0NjQ4ZWNjMDNkZjEwZDdkZDVjMDU1OGZhOTU5MzQyNWQ5NDg3MjdkNjg2MGMzYTE0ZjgxMTI0NTEwNjYxNmQyYTVmYTk4MWM2YjdmNDdlYzlkZWY2NTQxMmQxMzJhY2M2OTE5ZGE0ZTg4NTk3YWE5MTkwY2E2MTRiMjE4MDY2YTBmN2IxNjk5N2VlNzQ3YzVhMDk3ODVlNTBkMGE4OTFkOTU5Mzc4NjNkNjEzY2VmZjcKK1NJRzogMjgzMjZiNWI5NzhlMGRiZGFiNWRkZTcwMzc4NWE2NjdhN2VmNDM5ZDgxZWE0N2UwNjZiMDg5ZDExNmMyNWEzNGJiNjMzZjI2MGQ1NWY0NWJkZjZiY2RhNzQ4MDNkNzYyNGIxOTI3Y2VjMThlYjE5OTIyNjBiZWVmYzM5OWQ5MGUKKworVFNUOiA5OTkKK1NLOiAgODIxMDkwOTlkMWVhZmVlZDVhODUyMDYwNDY0OTFiMzRkMDZkY2RlMzNmMDgwOTYwMjg3YjEwZmIyM2ZmOWY3OAorUEs6ICAwODFjZmRmMmQ3NTg2NTRjNDFjNDQ3ZTFlNjI3MzgxMGY4YTczOGE3MzNhZmM0MjI5NGEyYjFiYmI3NjllZmNlCitNU0c6IDg0ZjQ3ZGQ3OTQ5NzdhNmMxNTA1YWM4YzA1NjgwYzU2MTVhMmQ1YjA1N2UzOWIwNGY4NWUzZjlmZjA0OTYwZTBlMDE2Njg1YTg2ZWViY2VjZjZmYmNlNWZkZGNkYWMxYTQ3NGM4YTBkNTAyYzQwZTEwZjk0ODY0NmZkYWM2YzgxZjFmZmJiMTc3YTJhNDk2M2I2NzgyNTkwM2NkZTY1YjVkYmUwZDg5NDFkNTQ2Y2ZmYTJiZjhhOGNhOGQ2YzY0MDg1MzBhNjI5MGY1ZDA4ODJmMWExNjcyZGJmOTc4ZTEwYzVjOGFmNWUwYTYyMzlmMDY1NWVlN2ZkOWU2Njk2MzA3N2EwZTg0NzEzNzM5N2QxZjA2OTk5ZGM2ZjhhOTQ1YzYwMDNlYTRlYTdmZDU4Mzc4YWNiNDRlZDU3ODBlYWEzNjc3OTZiZWVhMzdkZGMyMzY5OTlkMDEyZDZhNzE2ZDc5MTU2NDljYzI4ZTU4ODc1NjQ3ZTlmNWFjMDU1M2MwZjU0NGRmNTY0NjljNjcwODFkNWUzMDM5NWYzZTk2MGU2YTUyZjA4MzMxOTJjNTQ4Y2Q1N2M5MjZiODJkYjQ4YzM2MWJkZTcwMzMzYTM3MDA4M2VhYWEwNjhkYzJhZTQ1MmQyMWVmMTMzMWFlZDE5MGJkM2UxMjg5YTEwNGNmNjY3ODM0Mzc3Y2Y3YjVhMjk3NzQ4MDdjM2YxZWE5ZTdiMjg4MzFkMGY2YzQyOTQ3ODU4NjdiMTM3YjY1MDI4YzE0ZjkzMmExYmE4ZTZmOWY1OTYyNGZlMGMzOTY4NDNlYTE5ZTQ2ZmJhMDkxNDJjZjlkNDI0OTczMTJmMzYwMjQ0MDMyZjFlMDBmMzhkZDBkZTI5Zjk2M2I1Y2NjMWVmMTJiMmNjNjIwNGI5OTRhZjFmM2JhZjE5NmQ5ZTIxZThmYTRmMDk3MzIwYzY0NDA0ZDBiN2Q1YWIzODU2MGNhMDY1NTM2NGIwYjA5Y2Q2ZGMwZjBlMDViOGM5MTEwMzY0ZjE0MjRhOTY3MmI3ZWZkZjdlMWYzNzhlMjM0NTUwNTY2ZGJlMTNiMDE1NzhiMDQxNTNlOWMzN2I1NTNlMzJhNDQ0MWJjOTdlMjk1M2JlYzJlNDE0NTU1MTBmOTgwMmVmOTQ4ZGNiZjEzZmFkZGQ3MjJlZGU1NzM2MjdiMjU4ZDU1ZTgzYzA4OTViMjI5MTllNGJlNWNlOGQ4MTljZTZhZDg0M2IyZGQwOWRmNjQwMDRjODI2YzFkZGU3Y2U2NDgwYTI3MWE4NThhMWRiMTY5ZTE0OTRkNDQ2OTAzMmJjYzFjY2Q4OTY1MzE5OGI3YzA3M2Y3NmEyNmEyOTk5YjU2NDhjYmFkYzE1NzRjNzhlYWQ4ZWVjZTgzYjkxZTEyOWM0MzdmOWVlZWMwNGM4MDc0NTkwMDJlNjZkY2NhOWJmYzJjYWVkOWU2YzBiYTIzZDIzNTVkZWY3NTY2NTc0OTQzMGVlOTJjNTMyYTY5NTQ3OWZlYzkyOTE3NGY0NDBlY2I2MWE1YWU4YjJiN2U5NTg5MjA1NTgyNjg5NzhmN2ZiNGRhMWIzOGIxMjAxNGY1ZDYxYjBmZGQ3ZjYxMzZiYTQyODFiNDFhM2EzY2QxODgwNTJiNjk4NzY1YjZmMDVlNDFlNzgzNzNlYTgzMDQ2OTc4N2EzNzUxMDk5M2QxMmY5M2U5NmM3MmQ3MmY0NDYxOTg0ZjY5MWE0MWM3ZDMzOTdkZGQ1YTFiMzkyMzdkMTMwODg2NGQ0MTVmYzZjMjJiNjNmMzc2Y2VkZGUzN2Y1MjUyYjUxZWM3MmU1MTU1ZjNiZGI0ZmNkNTQxMjQ5OGJkMmUwYzFmOTg1MGIzYTg1ZDFkZmQyNTE2N2EzY2Q3NzFlOGU0YzlkODY4Yzk1YTcxNzVlMzc3NWY2Y2VmMTdlNGUzNjQ5N2NlOWU0NTUzMmJkN2Y0NGIyNzc2ZTQwZjkxYTA3Y2E0ZmExYjk1ZGJlODFjZjhmNDllNDZiNmM4MmE2ZWU0MzQ3OTE4YTc2NDNiMGQ5YTM4ODU3MjEyYzY5M2VhZGFjZmQzN2E1ZjFkOTE1NThmNTQ1NGRjZGQwNTkzNWYyOTBlNjJkN2U2NTAwNmNkNTQ5ZjY1NTNjZTc0MWRmNDRkMzk2NDQwMDFlYjQ3OWNhNjk1NjhhZDFmMjNiYmEwOTlhNDFhNDcyOTRkYjkzODczMWM1MzBhZjFjZWI5MjE3ZDI5YmMyNzA1NjEzYzFhMWZlOWMyMDhkMGIwMWJhNmY0ZDliNGM3YmE4ZjAyMWRmOTFlYTJkNTc4Y2UwODMxMjNlODNiYTRiOWM1MDQwN2Y2NjY2ZmJlNjExNThiMGQxYjk1Nzc3NzJlM2VhZmY4ZmI0MjlkMGY2ZDJlMzg0MTI2MTMwZjIxYjQ0OWZiMWRjMTcwZGI0NWFmNTA1YmQzMTgyNjc4YTliNWY5ZmRmZjY1ZjA0MTNiNjcyYzQ3ODYzNDBmY2YyNTIyZWE3ZjNkOGFkZThhMDU5NTI5NjQ5ZGJkYTljZTUxZmYwNWEyYTJhM2Q2NmQyMTY2YmYyYzljNjc3MmJhMGVmNDEwNWU2OGMwNTVlMDIxM2Q0MmMxZWUxMjNiM2MxMjE3ODQzZTZlYzU3NWQ3NTRkZjNjOTBhNzUKK1NJRzogYjM5ODdmMzI0YmM3ZTc3NmMwZjI4N2ZhMTNhZDI4NzQxNjk1ZTJlN2JjZThkMTQzZTI5ZmFkNWQwMDk5NDc1OGUyMjVmYjgwMjEwMGQyM2ZkNmNjYWZlZThlMGE5NWJjNDc5YmU4YzIzYTExMzE5NzQ1NzY1YjdjZDQ3ZTcwMDYKKworVFNUOiAxMDAwCitTSzogIDY1ZmNiZDYyNmQwMDIxMTEzMzRiYWFkNGU2YTgwMDZlNDdhMWY5MTM5N2JlZTZkZDZjZDdkYTVhMGUwMjQ4YTQKK1BLOiAgMjA0MDlhMTQ2YjQyYzk2YmVhYjBiNDJlYTdmMmMyNTE5MzExOWQwZGY0NGRjMmJmMTRkMTFhMzJmZDczMzYxNQorTVNHOiBlNGMwOTQ3ZmM4Y2E3OGZhODg2M2Y0ZDA0NDQ5OWQwMzZlMmU3ZWY4YzE3ZTgzOGYyZmFjMDI2NzViN2I1MzgxZTVmOWFiY2VhZmQwZDg4ODZhOTI5ZDlkOWI0OWZjYjczODYxYjI5ZDE1MThhYzVmODNmN2Y4ZmMyNmJkMWNlYmMyMmQ4NzNhOWEwODIzMTQwNmZiMDMyZTQ4NjZlNWY1NWM3YzA0NDFjNTE5MDQxYmIyY2M3M2Y5MjI2ZGQ1ZDA3ZWNlYjY2MGQ2Yzk2N2RiMjMzNjU1NzRiZWU4ZmMxMDIyMjkyODc2NzcxMzU3MWE3MWM5M2E4NTI3OGQ0MjI5OWE3MDU5OWNhOTkzMjZjYzg2ZjZkOThkYWFjMDAwZmRmYTcxMDU2MmY0ODFmYWEwMjBjNzJhNzZlMjA2N2QxNTRjMjM1YTdhNGYyOTcwOGNjNTQ0NTMzYmQ3OTllZDYzNjNlYjNiNTZhYTRhNmQwZTM3OWJiZjA3NjAwNTk1YzIzYWIxZjNmOWYxNzA4ZTAwNzAyNjFiYmJmNGJmZWFmNmQ2Y2VkNGQ3ZmY3MjJjOWNjNTJkOTEzM2VhNjhkNDk1ZGM5NDg5YzNlZGY2ODMwMjMxMzUxZjY1Y2I1MjcyZjUzOTZlMmM0YTFhNWM4ODY2MWExMDE4OTIyNDllMjNkNmNlOWZkYjZhOWFiZjc0MjcyYzJmNTljM2Q4ZmQ4NzQzY2NlNDYxMTI2Y2EwYThiODMyYjRiMjE4MzM2YjFhZTE0ZGE2NzdiYTdmMWIyY2M1Y2EzYzcxNThmNzI3YTllMWI4ZmRkOWVkZjVjMjE4N2ZjYjgzZGI4NjJhZDBjNmIzOTIxNmRlMzExNjkxOTU1NjQ2NTEwMGFkZTBhNDJiZDZiYTEwZDk1NDE4YjY5YTNlMDA1ZTlmMTA0NTg5ZWE1OTQ4YjJiNTFiYzdiMWE5YTA3NDlkYThmMDEzNzgxYmMwNWM4MDViYjUxZTE4Nzc2MWFjMjRjNzY0MTRmNjY4ZWI0NWZiMGE1MDI0ZGZlNWE1Y2EwNmYwNDAzYTAyZTNiMmZlZjdhMmM0YmNmYjFkMDc1ZDMxMGQ1MTk3ZTY1OWNkMTQwMjNmYWVjMjBlMDQ1Y2FiY2I4NmIyMjFhMWQ0ODI3MTEzZmYzMjY3YTY0ZGViZTk5MzkwMDRjYWJhYzg1ZTVjNzQ2MWU3ZTgyYTk3NWFjZmFlMGI2YzUxNmExYzYwNTM3NGNmZWE3ZDgxOTA0NGVmZDZkNzQ2NTQ0MjRmZDVjOTBmZjI1NzRmY2Q4ZTAwNzc0MGQ5NzU4NjFkMGRmNTI1OWZlNDNlNDM2MzllMzZlNTI4OTU0MzliYTJjMjdjMWU4ODljOTMwOTQxMDRmZTkxNDkyMWJkNmYyNWQzOTg1YWIxZjIyY2E1NTdiMGU0OWFmYzczNzUyNDNjNTIxYzZkNWZhZmUwMzgxY2NlYTgyOGU4OGU2NDdmZDkwOTc2YjNmYmVjMTlmZTlhZGIxMTNjNjQwNGJkMzUyYmZjMDAwNDQ2ZDIxMDA1YjVmOTUwYWUwN2U1MWM3NjhjYTNmZjYxNzdiMmVhYzUwZjEwZGQyZTY0NjEwZmE4YWI1Nzg4ZmFlZWUyOWQxMjkwMDlkN2ZlNDZhYTNkYTZiOWQ4NmM3MzA2NWViNTE2MWZiZGJkZmFjNTc3N2M0ZTc1NDUyZTZlMTZhZTlmZDY2YmI3ZDlhYWE0MjZiY2I3YTY5MTVmMGZmNDRhMWY4ZWM3MTM5NGU5MzUyZmRmMjBlMDJmYWZlMWUwY2VmZTUwNzQ0YzMxOTQ5NTZmOTI4ZjgyNTMzNzU1MzczODM4ZGNjMTI5NmE4OTFhZGY2NDFjNzM4MmQ2OWI0ZjVhNDNkNGFmNzc3MmE0YTFlZTg3OTI5MmQ3YTRmMzJhYzM1ZWUxMjFjNmMzNGNhNWY5ODQ4N2E5NDFmY2IxZTY1YjQ0ZDQ0NTYxMjdlZWRiMmZjYzFjM2Y0OGVmZjkzMDA5ODFlNTJhYzM4YjQ5NmFiOGJiY2UxNDRhODVlYjljMDc2MzhiMzFmZGFhNzgxNzQ0YmNlMTdlOGQ5M2RjZGM2MGFmZWRhNDg4ODA3NjE3Zjg4ZDZhYTU0NDIyZmQzNDdkZGFkZGVmZjM3YTU2M2RiZjE5OTc0YjJhMjNiZTMwMGZiZmE2YzdmYzQxZjg0YzY5MDU0MTUyNjlmMTk1OTkwYjViNGRlMTI2NjhjNzFjODdiNTA0ZjQxMTI0YmY5NDQzNmYzMzMwNDU2MzE1MTgxNTJjNTE2MmEyNDc1YzQwZWZiNmNiZGFhZjlhZjQyOGZlZDMyNWIzYTdkOTRjMTc1MjBmZDg5ZTAwZGRmMDhiMjJhZGY2NjFmMGFjZDcyM2IzOTY5ZGM2NDM0ZWE2ZjkyZWY1OGU4ZGZhZTViMGNjMjg4NWJhOTg3ZWExZDE2YzM5YjM0ZWY2NTAyMzAwOWQ2MzQ1ZTQ4ZTM2OTFhNDFmMDJhNzdiN2ZlMTMzZWE5ZGU3NTY1ZjE1N2EyMDc4YWU5ODhiYmIyNjZkMjJkNWZhOTFhN2IyNjNlOThhZDJkYzA3MzFmZTVhMjkwMjVhMGNiNDM2ODY0YTVhNjBkYjI1N2YxZTc2YjVjNjA4ZjI1Y2RlY2M4N2VhZTYKK1NJRzogYmM3OGUxNmJhNjc0ZTBhN2RiYTU3YTE5MDk0Zjk3MzNjNTVkNzRiOWQxNWY4YTQ0ZDFiYmMwYTAyM2Y3MDE1NWRlMjk3NzExMWE0MTdlZWZhOGNiMzBlYzEyYWJjODM4NDIyODE2N2M3MDk4MmE4MjA2YjFmZmI3MjE3NGFmMDEKKworVFNUOiAxMDAxCitTSzogIGI1MDA3NjhhMjgyMzkxNWM0YTY4NDhkMzVmNjQ4N2Q0M2JkNzY2ZDJjZTA5NDVmOGEzY2NkYjhkODJhMzg5MmIKK1BLOiAgYjhjZWEyMTVhMDEyNGVlZDI3MDA1NzI1ZDg5Nzc4MWVhMDY0ZGNlZmIyMTQyMmM4YmQyNDAyYzU2YTEwNTcxYworTVNHOiAwYTlmZGE4YjhjZmNhN2E1YjA1ZDc4MTE2ZmNlZTE5YWI4MDNjMWM2MDEwY2UxMWRhYThlOTNhNjZkMTJjMTJlNDc0ZWI5MWMyNjQwZDk3YTgxM2Q5YTgzMGQyNjg4NjhlYjJlMzc3MDQyNWYxMGM3NTg0MDQ2OGU2NjlkYzdmNjFkM2JlMmRlODhhZTBlNTQyYmM4MDk2NzkxMTM5NTdhMTRkYTRlYWZmNTQ5YmZkZTYzN2Q3Y2FmZGM2YWE4Mzk5NDgzNzM5N2Y4NmU0ZmRlODZkNDAyZmE5YWVmN2Y2NTU0OWEyMTQzNzNlNTYwZTZkN2ExYzI3NjllMGM3ZDVhMDE3MWU3Y2MwMGRmZjM2ZTA0Mjk3OThiNTNhYTYyMTYyNGJkYTc0ZDZkZjBiZmZmZmJkOGZkN2JlZjFhNjRmMzZjMDAwNzgyZjZlZDAzMWFmNWMyYTc0YTE4OTYzNTk4YzliYTA2MjM5MmRlOTYwMjAzNjc5NGI3YjVlNjhjMjVjOTNmZTdjZmFkNDdhN2M1Yjk3OWQ0NzZjZDUxM2ExMmJmMDMwN2NiMTYzMTc0MDA0MmE5ZmJmM2ViMGJlNTE3MDYyMGRhZmQ1ZjE2ZWQ4OTM0MmMyNjI1ZDc4M2U3NGVlMGQ3ODRiZjA1MTk0Mzc0MGM4OGIwYmVmN2JjODVlMWE2YTRhNTE3ZDQ5MmZiNzM3ZTc3NjY5OTU5MGM5MzIyNGNkNGQ5MjQ1ZDRlOTM3MWEzNjdjMDcxMmY4NzQ5MGY5MjQ3YzQ5YWRkOTMxM2YyNzdhNGQ5ZjI2Yjc1YWFlNGRlZDZhM2RlZjg1ZjgzZmM5OTU5MTA0MDU1NDhhZjY3MGVkOGFhYTMwNTI0YWI4MjljY2I1NmE1MDA1YjU4YmNlODY4YzllODA3NGYwN2RkN2YzODE4ZjI5OWU0ZTA4NmJlZDllYWI5MDJjZjExYjM5OGQ1MzFiODYzMmU3ZDUyM2E4Zjg3NzY5NWY0NmNjZjljZTI0ZTYyY2FiMmM3Y2QwYWFlZTE3ZGI1MjY3NmE0YjUwNThlOWMxZDdjNDdiZmZjYjY0MWIwZWEyYjA5NDRmMzlhNzU2NjVhN2VmMjliN2YwMmE4NzhkYjgyMzg4M2JkYWNmYjBmYmU1ZGZlNWE5YmVkOWZkYWM3ZTQxNDJlM2ViNTBkNWU4NDBiZDBhYzBiZWNmNGZhOTdlMWZjNDgyN2MzOTdhNTI0NjVkOTE2ODg5OTU0YjM3MDFiMGZhYzYxMTU5YjIzMDkyZjQ2ODVmNDc4OGJhZDM1ZDAwZGEyNjc5ZWNjNTQ5MjFmMWE4NjQ3MTAxNjU3YWI0OTQ3NzQyMDU2N2FlZDY3Yzg2MDU5MzA0NDRiNWQwNzkyN2MxN2VmZjFmODU3MGNmMmFmMjllNzE5Zjg1Y2E3ODQ5Yjg5NTU0OWYxM2RmZWNhNjhiYmVmNzFlM2NlOGI2Y2VkZDJmZjY4ZDMyYjAyY2FmNTk1MWEwYjNlNmIwYmFlNmE5NmMwMjA1ODE5MWYzMDVlMDkwNzExYzQ2ZGFkZGNkNWFlZWU3NjljM2ExMDVlOWE4MjdiYmQxOTVkMzI5MjMxYzI2MjM4NDc5YTliYjAwNzFhZmIxNjBlZjk1NWU4NzRkN2E0MjBjNTY3ODVmNDRhZTBhMThjNTJkODI4MGM1OTk4Y2YzODg4ZmVhZjg5ODk4MTM0YmM4ZDQxMWZjOWY2YzU3NjhlYTdhMjQ5NzI5NDEzNzM5ZTUzMmI2NDM5MzcxNTJjZGZiOGQyZmY4N2ZkNDgwODRkZDhhZWViZWFmMGY3YjEwZDg3YjZlNDQyMzIyOGM5ZmM4ZGM1ZTM4NTJhYThiOGFjYzU0NWQxOGYyNWM1NWQ3M2RhMWJiODJlM2ViMzc2ZjllZjA1YjI3NGQ3ZWNiMTg0NWQ2NWNhMGNkMjYyOWYwMzhhMmQ2NjRkN2E2OTc4MWM4NGU5OGRlMmMyMDljNDZlZmM1MTE2MjE3Mjg1NjY0OTQ2OWU2NzMzMDhkY2MxNDVlYWY3ODNmNWNiNWI0YmU3ZDlmZDU4ZWUwOTc0Yzk4MWEzOGZlYThlMzEyNjdhYmZhNDEwZTY5ZTQ2NDgyZjUxMzRmM2RhMWZmZTM4MWJkNjlkOGQwYjc4ZWE5MDliNGFmOTM5NmRjYWZmODk5NjBhMDQ5ZWRhNjk0NjYxNmZjMjdjY2Y5YTllNWJhMWEwMTM1NzY0ZjM3NzE5ZGE0ZDI4MDc4MTg1ZDA0ZDcyNDE5YzJjNzBmMjkwZDk3ZTFmODJiODc5ZjcxYjllMTlkNTA0ZDM2NGNkM2JhMjJjZjkwNTI1MGZkMzdkNThlNWZlNDAyMDlmNjA3MmEwNmQ4YjViYTcwMTk2MjMwNTc3ODc3ZWM0NjE1MzE2N2E3YzdhZWEyNzBmYTEwOThhYmE5ZTNhNzRhY2IzNmExMWIwOWJkMDdhM2I4OGVhNjU0ZTI2ODM2NTYyNWI1ODliMjIwNmM3MTBkOTYwZjQyZWE0MTliN2U0ZTNkYTQ3NTlmY2JjYTUwZTRiZjRjYzU1Y2Y4OGY3MGIzMTgwYzgwNWE3MDQ1MDg2YWZhMDRjNmJlMjMyMjNlY2FlNWY4MmMxNDZkNTQzMTFkMTgwN2MyZTRhNTNmOWUwYTQ0ODJiNGUxZQorU0lHOiBlM2RiNDdhMTFlMTBlNzg4OTI1ZDE0YjFlMjhiNTRjOWZjZjliNmFjYzFkZjhjMTRmNjgzYTU2NzJmZDUwNGRkNGE0NzVhMzM5M2IzZWY4YmNlYWMyMzYxZGJiYTM1MzBhZjI1YzI0NmMzZWM0YzA1ODk5YjUxN2Y2Y2QzNGYwYQorCitUU1Q6IDEwMDIKK1NLOiAgOWViNWM5ZWYxMzUzNWY4MDgxMDlmNGE0M2NmYWQ1Njg0ZjgwZGFmMDJlZWQ1NDEwYWMwYjBhMDlhNjA4MmQ2OQorUEs6ICAzNjdlZWExZWNiNGU1ZWVjZGY3ZTQ3MWI5MGJiMzRmOWI3OTgyYzhjZDY2ZDQyNTU1YzI0MGI0MWNkODczOWRiCitNU0c6IDJkN2NiMDVlNjFkYmFlMjYyNThlMzg2MWM2MzllZjBlMWQxN2ZjNzExYTAwZjMzNWJhM2MwMjcxMzdlMDA3MDhkNzA4YzFmZjQ1N2ZmMmM2NTExMmY3ZGNkN2QwMmYyNGQ1NmYwNzIxNThlYTFjNzE4MzI1NTBhNTgzNjZmZDkxOTcyOTZiYmU2MWFhNGQwMGRlMThhNDUzZWY5MTc0ZmE4MTk2ODMwNWM0MWMzNDU1ZjQyZDQ0N2E5MjM0ZjA2ZTEzYmY4YmNhYTFiYWJiMTE2OTVmYWZkYzA4ZjdhNTg0YjJlYTFmNjFlOTM4OTI2MGNlNzMzNWEwN2RlNzJjODkxMWE1OGEzMTNmMTA4OGRjZGY1YzhkNGM0NTZjYmEyZGNiNGYyZDE1NmI0OTQzYjk1YmQ0OTNlYTRmZTFhODJkNGUzZWEwMmFhMDI5NzI0MDBiNWVlMTc4NDI4MzJkNTk5NzlmYzE3OWY4NDNjNDRiMDNlYjNjMzAyNDE2ZDBjZGFmMTFjNGNhOGE2NmNjYmI2OTk3Mzk1ZWRmNmZjYTJlYTAwNGNmMzQ4Njk3MTAwNGE0MjA0MmFmOGVjZTAwNWI5NDQ2MWQ4NmRjZGUyMTJhMmViMWJlM2I5MTRjNzgzZTQ4YWMxYWQ0NmNhY2Q3M2UxZWI0NDgzNjgzMjJkMjY3OGVmY2IyYWJmZjUyMDkzZGIwZjI1OWRjZTVjMWUxOWE1MTI4MjBmMjM1ZDZhZWFmMGUxYTcyM2MyYzY1MGNmZjFlZTNiNmI0ZjRjYzk4OWMwYjdkNmRlM2NkN2U2ZGFhMzliYjY5MDcxMGRmMDBhNzE5NGMxNzIwMWYwZTgxYmU2NGI2NzM5ZTFjMWU4MTc2YjdlMTJhMzUzNDI3YzA2N2MxOTMxNGRiNjQyZTVjNzYyNjZiNjQwZWIxY2MwYzczZjg0ZmMwMjI3ZTVhOTYwNjBkODE0MDcxY2RlMmZlZDk0NDc2N2I3NDY2ZjkwMDFkZmMyMjM2ODU0MjliYzRlNWU0OGY1YzEzYTYzYTRlMGQ4MjYxMzNhZDkyMGQxMTc3MjE0NWFkNmUxM2M5Mzg5NzM5OGE4YTQwMWY5M2RiZDEwMzAwNWM3ZGFlNDQzODdmM2U4MGI3OTM2MDdkMDVkMmQ4YmMwZDAzNTFhM2E0NTJiOGNlNzU5YzFhZDQ4ZGY3YjliYTllNGExN2RmNjFmZGFiYjliNTc3YjVjZWMzZTk0NjFmYmI1ZTEyODE1NWEzYzljODlmOGY2YmViYjczMjJhMTY2NzhlOGVjYjk4OTUzZDk1ODMxMGRiMWIwNjM0NDhjMzQ5ZjM2ZTE2OGZhYzQ4NGNiM2MwZDRjYjJjMjUxYmQ5MmVmOGU5MjYyYjQ0MDkzZDdlNjUwYTdkM2JlZDM3OTFmYTg4MTAwZmVlNmVmMGQ1ZTIzZDFlOWE4MDk5Y2MwMzM1MjAyYTRmMTA2YzI0Nzc3ZTk4ZjgxZDI2ZWZiYTE1YzlhZDE1NDFlMGFkYmYxZDFkNzYwNzZiMGRmZDdiN2Q2YzhiODJmOWMwOTM0NjhjZDE5NjY3MmRjNTQ3OGU5MWNlNzAxY2RkN2I2OGIzNTNjOTcxMTFmMDQyOTc2MDYzNTc2MmY4NjgzYWU5NzA1NjRiY2ViYTkxMjA1MTc2NDJlOGIzYTJiYWFhODVjMjViNTRhOTQzNzY2MTg0OTA0YzcyZDkyOTYzNGVjNWYwYzI4NDczNDE1ZjEyNTM4OTA2YzY3OGZjYTRlNjgyZGI0ODc5NzU4NDkyNTM3ZTc4NTBiOWJmZWYzZWI5MDUzYjQzOTIwZDgxMGU1NWJlOTY2YWVjNjhjOWRkM2I2MmNjZjU3ZTgxNzhjYjVlZjZkMTZkMTcyYTU2ZGQ5MjRmMDBmMmQzYjVlOTNhYWE5MmIyOWZiODMzNmQ3M2UyOWU1OWQxYzQ3ZWE2MjMwY2RhMWQ1YjAzYmJhNWRmZGIzMzFmZWIxOTQ0M2YxMjNkMmEwM2ZmNGYxMGVjYTE2NmMyOTk4NTg4ZjFlNTg0ZWQxOTRkZDZmNzNjOGFjYTg0NjYzMTkwNGQ5ZmU0YTk4YjM2NzgyM2U0NmVkYmEyODg1MTI5ODc5ZTkyNzdlMTUwZjAyOWI4ZmE3YmQxMWVhYjljZTEzMzY3NzdjODBiNTZiM2ExZjA4MTFhZGJjYTBmNWI0MDI1YTU1MDNjODE5NjY2MWFlZTkwMDA2ZTljODViYmZhNGM1YTBlOTAyODg1YzhjZTUxMjEyZWU2N2YwZmUwYjZhZmJjOGJhZDQ1MzcyNzU0M2IzYzY4Yjg5MGRkYWJhMjY5ZDI1ZmMxNjQzZjU0ODM1MTM2YTFhMjViYTE4ZDkxNmNlZGQ2YTQ3ZmMwN2FkZjZmYzY5ZmE1MDg5NDlkYzEwZDlkYzVlMDI2MWI1MmYzNjU3MTcwMzg0ZWNjZDljODA1NDEzNTRiMWNlMGY2ZmI1ZWQzZThkNTRhZjBiNWJmMGE5MjgzNTEyNWM3ZDliYzRmMDkyZmYzODBlNWU4OTZmYmYzMDI1NTJiMTRkNWI2MWEyMjRkODZlMzAxYzdhNjZhNjZlNGU0MzI5YWFjMGE2NmIxNTY3NzIzNzRkYzFjNzE2OGQ1YjU2MTY1MmY4ZjQzODdlNGYyODliNjM2NmEKK1NJRzogNDI5Y2UxZmU4NDZkMjUwODQ5ZWNhN2Q0NTZmOGM1OWY4Njc1YjFmNGMxM2YyYmU0MTY4OGRmYjhjYTJhM2IyNGFlMjlkNWI2YmY0NzExNTdiY2I2ZTJlYzlkNGEyNmIwMzhlNmVjMjg1ODRjYzIzZjJhMDM1NTZkYmIzN2U5MDAKKworVFNUOiAxMDAzCitTSzogIGVmMDk0OGUxMzI4MWYzY2YzNTJjYmZhZjhkODlkMTE3NzY4NTUyZDVhMTU0OGVjYmFmMzc0MTJlOTc2NzBmYWMKK1BLOiAgNThjMjQ1N2Y1YTVlM2NmYmY0NzExOWE4N2YyYWZmMTkxOGYxZTY3YWU2ZmE5MTcxZDNmNDFlZWUwN2E4Njg3MgorTVNHOiA3ZWM0N2YyZjFmZTNiNzBhNmQxZDgyYzdjZDkyNGI0YmY5YjIwMjlmYzEyYzUyYTZlMWNjMDZjZjVhYmZjMGE0NDJlN2NmMTQ1YzE1NDJiOWIxMzUwNDk2NjU3MTEwMzVlM2MyOWE5MWQ0ZmRhZWQ2MTI3MDU3YTgxMmMyMmNkNzVhZDE4NzliZTFkMmM2MTEwZTc5ZTk4NzUyNGU0ZThmMjdmMTZlZGE5MGNiZDQ3MzNmMTExODI1YjUxNmQxMDY3ZjgxZWNhNWU2OTQ4NTc2ZDViZmVkYjMyNzdjMWFiYzFlNjBmMzc0ZDA3MDFiMzJjY2ZkNmE1ZTljOGQxNjU5YWFmM2QwODE4NjEzNjEzYjdlMjg4ZDg0NWU5YWFhYmEyZTNlOWI0MTFkNTAxZGZmZTg1NmZkMzEzZTlmY2M5ZTc0MzBiOTk4M2YyMGFiNGViZjRlYjYxNmJkNjNlMmM1Nzc0MzY1ODk5NWVkMGExNDlhZTYyMGEzOTU2MTM3MTliM2VkN2NlZDQ1ODhkNTkxNWQ3MGEyZjBjNjg3NjgwZWMzNGZlM2U5ZjcyMzkyZTE4OWUxM2E0NzQ5ZDVjYTlmYWM2NTFiOTJjMDg0YzQwNjZmZGY5OGE4NjkyMjNlNGUwYzliZWM1ODEyYjVjMTkwMGU2ZTYwZDNhMTg4ZDQ4YTc0ZGZkNDE1YjVjYWQyZTkxZmY3NmRmNzUwODlkMjBhNzU1ZjI2MDc1NmM4ZjEzODJhMjlmN2I5MzcyNmU3MzEwNzFjZDQ3NzQ1OGM2ZjIwMjJkZmFkN2Q0ZmM3YWIyMzgwNTQxODY0ZjZiNTg3NzRmOWFlOGU1ZjA3N2MxYThkYTA3M2MzOTg1M2ViMmZkNDc3MjIwYjQ1YTNkOTIyNjNkYzdlMTRkM2JiMmIzNmZjYTQ2NmM3ZWY4YTI0NzUzODcyNWYyZmNlNWM3MjIxYmM3NTFjZGUxMzk0NjA0ZjU5MzFkNzMzMzYwY2NkNDdjZTA4NzcxMjk1ODE4MGFkODRmYWU3MTNiNTQzZjA1ZWVmNmFiYzA2NjE0MzMxMjFlZDNiNDUwNmExNDY1MDI1MzE2ZmI4ZjlkNjQ1MzVjYzQ1MzhhY2Q0MDY0ZGQ1NzZiMDc0MGUxYmViMTNiY2VhZjE1NTU0M2RjODkwOTdjYTVjYTFjZmZhMGFkNjVhMTBiY2I3NTkzNTRlYWI4YTQyZGU3MzRhZjkwOWMyZmViYTM4MGQ2NjQwOWYzMjVkNWYxN2FmOWNhN2Y4Y2I0MTM0ZmQ2YTJiNmE1MjhkOWU2MGQ5NjEyYjhlOGI0MDYyZjhlMGZhZDFlN2VlYjljYmZlZjZlOTczOGVjNzk3M2UxY2IyYmEyMzI3ZGVjYTRlYTQ2NTY4ZjMxZTEyZjczMGUyNDdjMWQwNzAyOWZkNDQyMmIyOThmZjIzOTgwMjNiNDEyMGEzYTQyNWZmYjY1Mjg4MGMxOWVhNjlmMzYzOWUwZjZkZjRmMDA4NzZjYzQ1MjhlMjY3ZTgxZDU5NDMxOTlkMGZlYjZjYjRlMWJhZjQwNGJiNmY4YjM5YjEyZGJjZTlmZGMzNWRjMTU4MDY2ZTk5NzVhZTViZDNiNTVmMmE0MWE3OTFiYWYzZTgzNTFlYzYwNDk0NDc5MGEyMmM5MzNjODBiMTU5MGJhMTk3YTQ3MDZmN2Y1MTI4NjgyZWRjZDc0ZGQ3OGQ0MzVlNzg3YzJiNzZhNTdiM2Y0ZTdkN2JlMmVmZDI2ZGE1ZjlhODI5MTE5YjAxNTA4YjcwNzJjNzY5OWNlNTJiYjU3OGNjNWIxYjkzNjYxYjUxNzJmYjg0ZGFmMWJhMzY0ZDJjYmQ4MGUyYzk5YmNhOWNhZWE4NzNjYzBhMTYyOWVhYzM4NGU5YjIwNjg0MmE2ZTYxODMzODc1OTFiNGFhMzRhOTVmZDg5YjQ5ZDhkMTVkOTFlMjE5NDBlMTdkY2FmMWVmZjhhMGE0N2EwZDdhOTVkYWVhZDgyYWEzZGY4MjA0YTBjZDIwNjkyNGFlNTEwZmVjOGE5YzRlOGQ4NWQ0NjZmZGI0ZGQzNjVkYzk5MzM2YjIyY2UwYjk1NmI1ZWUwMDE3ZjI5ZDI1ZWU2NmZiZGNlY2IwZDk5NmZmYjk3YzhkZWZkZTQwYTlmZjk5OTMxOTNjYThmMTY4NTA2N2MxOWM1MjZlMGVmZWQyMzZmOGVkYjhkZWY2YzJhMDNlMjE5NTJjODYxMmQ2MjRlNjg4NmEzMTFmZmI5ZTJmMTVkYTQ0YWJlMTgwZDI2YTE0YjE1ZjYzNTYxZTA5N2E3MzBlY2FiYjc5MmM3YzIzNWZkZDM2MGY1NzFmMjdlZjY4Njc3YTdkNjNiZWI0OTc1OTgyY2IxOTlhNTYwZjgxNmVlMTI5ODk0NDVmN2Y3NWI4M2ViMjc4ZDYyODI1OTQ3ZDg0MDk5YWYyYTZmZjJlYWRiYmY1ODliNWViMmY3MmVkMTE0YzczMTUxMTUzYWUwMDIyYmM5NTY0ZDE1YzJkNWNkYmJhYWJiZWY2MzhmMDMwOTVmNTNlZWJhYzk2ODM0MDlhZDMwNjBjZmI3YzcwMzdiOWIwYmVmZTA2OWM5MmEwMmJlOTUzMzg4ZTllYTQ1ZDM2ZGRmNGY1YTgzODk0MzJjY2Y1MDRjNTA4MDhiMDdmNjkKK1NJRzogY2MxMmY2OWRiNjNhNjc4ZWM0NzdhNjA1YTUwNWM1N2RjMmI4MTBlZjg1ZTNlMzQ1MTljYjI1YzUxMDYzYWE2NjM1NWQzZjFlMjk3NDY5NTg2NmVkZjZmMTcxNzFjZTM3ODQyZmJhYjUwNzVmYzg5NWQxOGVkNzQzYzU0NjA4MGMKKworVFNUOiAxMDA0CitTSzogIDkwM2YzYjUzOTk4OTJlMjljY2ZhZmJhZmJkN2NjNDUzM2MxNTRhNjI1NjgyNDA2Yzg5YmY4OTRjODg5ZTQzZjQKK1BLOiAgOGZhNWZmNWI2YjI2YmQ2N2RmODY0MDQ2NDI5ZGYxMjRiNTIzMDA1ZGQ4OTQ0NDI3NWM4YWI3ZWJkZGI2ZjRkYgorTVNHOiBhMmMxMWI1ZmI4ODRhODIyZmFlNjRkYThkY2I0NDUyY2ZkN2EwNGNhNmQ3YTVhYmM4ZDgyNzFlOTNmOTM0NDllMWZlYjhlMDI5NzVmNDk2YjkwMzQ0MDBkMzU5OWFiOTdhYTM5OTdkYWQxYzlmZmFiNWI5ZjhkZjRhYWE1Yjg0MGQ5MGQ4NjJmZmY3ZmYwY2Y3M2E2MGM2NjE1MDAwOWUwMWM5MzdiZDFhZjY4MDdiNWJhMmVmNjEyZWUxM2Q2ZGVmNDBiYjA5YzQ2ODExYTJkNGU0NjhlMDM4YjMyMzA1NWY5ZGZiZDAxODI5YWUyZjFhNTM1ZWYwMjk1Y2ExZWQxNzZlNDZkZTk5NmNjODdiYWNlNDUzNTYyMzMyMTE4MzViNmY0NzU3Yzk5YmQ1MjdlNzY2YTVmMGIxMjdjOGNmZjhlNmQ2NmY4YmFiODZkMDAwMDQ1MmNkN2Y2N2JlNTU3Nzg4NTEzZWMwNzA5YjUzN2IwMDdiNDIwMTZlN2E4OTY4MzQ2OWJkOGZmOGQyMWViMTBjMTQ5MTdkNDdmMmRjNGY4MjYzMjRmN2MwMWIyNGY4ZGNmZjA0YWE2ZDg1MDk1ZDlhYjE1NGJhNWMzYmQ5MTljOWQ3MjhkYmRjOTkwZDE5Y2ViMjM3YjQ1MjkwN2JkYmUyMWY5ZjA4Y2RkYWU1YmU0NzkyNzY3MDliOGFlNzNmODk3NGM0YjExMzg0MWFkNTM1ZDZmZjYyMjNlZWE0N2QxODVjOGU4YTY1ZmRlZTJjMmQ0NTgwMGMxN2NiNTU2ZWFmZDY3NjY0N2Q5OTY4ZTU1Y2E5YzU5MjMyYjk3NzBhZDEwZjk1NWZjYjU4NThlZGYwYjc0ODNhZGMxODE3YzBmOGQwMjI0MDQ4MmNhYTc2ZjQzYzZkMmU5NmE0ZmY5NTkxY2Q3Yjg3OGVhNjE5ZWE1NmQxYjU4ODYzMWU3NjMzYzVlY2IyYmE2OTk4Mzk4Y2IwNmUzY2Y3NWFlYjNlMDhkYWIxOTYzMmQ0NTRmZjdkYzBlMmE0MWYwOTczN2U4ZWU4MjNkMWI5ZTI0ZGRhODRhMmNlMDMxM2NiOWZjZTMxY2I2NjNjNTVjMDU2NDVlNjM0MDE3NTZlOGFkMzhmNTE3NGMwMmE2NjNkODE1YWQ2NDQyMmZmNzcyN2Q0ZmRhMTZlNDhkNGJmOGY2NjAyZTcyNjBkYTYyMzMwZTY4NzhjMzQ3NjRlMTI5YWZiZDU1MjIwOGY2YmVkNGY3Y2VlOWI2NzFmNDg4Mzg4ODE1ZDc0YjQ5NTFiODY4MmNlNzZjZmUzMWU5MzhjNDcwYjhmN2E0NWZkNjNhOTY5MWY0MjZhNzVjNThlZDNkYmNlM2FlOGZkOWQxMGE4MzUyZTQ3Y2MxYjEyYzkxOTJhYzg2MjZkMWIzODRiNzdhMThiOTg2ZTcxYTk5ODY0NmMxMzc5OTJiNjdjNDgxN2UzNDYzNDVmYWY1MGEyNjU5ZmRjNWNhZDVjNzE5NjQ4ZWZlZTM4NDdjMGZmNmJkNzA5NWMyOGI0YzUxOTU5NjdjOTBjZjg0ZTFlZjY4YTFhZGEwMWY2Mjc0ZWRlMzYzZmI4MmUwYjU0OWE4NzAyNDVkNjA4Y2FlODIzNGY2ZDg0YWJlYjYxYjcxODQ2NjA5MzYyMGQ4NWM1ODRhYjAxZWVkYTA5MWVlOGFmZjFjZjY3YTQ2NzU2NzlhMWY0MDAzZTY2YWFmNDM4NzFiODhlY2RhNmExNmRjNWFjYjA1Mzk1ZjJkYTlkZjcwZDNiZGI2MTQzOGUxYzNkNDA5ODFlMDM0NjI3ZDAyNmVlMWQyZTc5ZjY1Y2JiODE4OWZjYmIzY2M4YjVjMmU3ZTc5NmI1ZDI4ODk0MTFkNTY0MWZiODY5YzdiMGE1ODljNDMyNTRmOGM1NDM4YWFmNWFjNDIzODMyZjAxOGQ3OWE1MWI5NmYyNDJlMmRlMGM4NTFjYzVmYzJiMjA2YmNhNGI1YmU4MzYxMjVhY2ExNDRiYmMzOGM4YzYzOGJlMGQzYmJlMDI1YTFiZThiM2QwM2Q1OTI5YmFhNjQ5YzM1NDRhMzJhOTE1ZTkyNmEzODc5MWIxMzRhOTcxYmM1MmQxYjZjYTYyNWVmYjdjMmYzYmI0N2FiNTFkNDNjOGUzNzRkMTZjZGE4ODIyMDRiNzFjYWZlOTA5M2NiNjA3OGVmMmJkZmFkNTllZGVhZjM2ZDBjMWE0ZGM0MjViOWU3MThjNDUxODUyMjVhOWMzMDg0Yjc4MmJmZTE2MzQ5MmY4ZTg0ODJlYzlhYTA3M2Y2OTAxZmYzZDExMTdjZTkxN2UxOTEyMmZhNjc2NTBkODU4ZjhmODJiMzc2Njk3MjNjMjI2ZDcyMTY5N2U3YWUzMzU5ZjVhNmIwMjQyNGVlODc5NGNiZWFhNjQxZWRiYmY3NTNiMTAzYTVmZTE1OGJlMGJhNjBkOGEyMTJkNDJmOGM1YzJhZjI1NGJmMWI5YzgwZGY2ZjFjZjA5ZDcwNzkzY2FlMWFiYjQ2MjdiMTc4MGYxYmNlN2Y2MTdlZTUwZjZiZDRiMDgzYjJmYzdjZDg0NGFmYjcyMzgwZDVjYjZiMjU1YmY0N2VhNzFjYWQ2YzZjNGRmMDIxZjgxYjU0OGY0MzJjMThhYzM2NmM2YWVjZDAzYjZjOGNlMgorU0lHOiA0OTVhOGY5OTE5NDFjNjI5YmQ2NDFhNjc0NzFhYjg2MGJmZDM5YjcyZjIzMzU1ZjcyNzA5MDlkNTMwN2M3N2IxYjk0YmFlM2VkMTk0NTA3ODBlOTA4NTMwNWYzMWIxZTE2ODNmYWNmMGQxZmM4ODQwYWVjNzdkZjY3YWVhYjMwMgorCitUU1Q6IDEwMDUKK1NLOiAgZWU4MWUwZmIwNTJlMjNhZDc1OWRlNmFhOTgzOGRlOThlMzZkNDgyMGRjMGUxYjdiM2VmMTE0MWFiOWRlMzM0MAorUEs6ICA5OGYzYzk4ODA3OTRkZTY0ZmEyNjliZGYzMzYwOTVlMGUwMWIxYTNiMzc1Zjk2NWI5MzcwMGJiZGY0Yjk2ODY5CitNU0c6IDI4ZDk5ZTk1MThiODgyODNjMjIwZTc2ZGUyMDVkN2I2MTYyMzU5YjFkZmVjMWZiYWFiOThlYzBlZjFkZjhkYTQwYjZiN2E3NzVlOTcyODQ1MGFlYjIzNTFmZTVjMTZhZmRhM2FlYzBkNzEwNDlkYTRjYjdkNGM2MzcxM2EyNDEwYWJiMDIyZjgxNjExY2MwNjQ1ODdjODA0N2Q0MzgzYzAwYzNjNTYyZTljZWVhMzU3NzUwOTUzOTFiNWYzZGRhMGUzNzNjNGE3N2ZmNjE4YTI4ZWY2ODc4N2ViZmMzZWJjY2NjNWQxY2UzMmRkZjQzYmZjZTU3MjAzZGE3NmE4NjY0YjNjNjE2YTg4NjkyODJkYjBiNzI4MTFiNWZkNWEyYTAzYTRmZjY2NzI0YjA0ODllYTJlMTA3M2Q3ODFjM2YxODkxMTVkNzliYTIwYTQ2ZDFkZmFmNWIxYTU4NDdiMmEyZTMxYjI4MDg3Mzc1NjllNjBiNTcyMzFlNmE5OWFmMjZmNThhZmViMTU3NzA4MTA0NzQ4MTJmZTRhZmFjZjg4NDUwNmI4YzMxNGJjNjc1MWJiNDJiNGJkNmU4N2QyZTVkZTcwZmVjNWYwMDE0YzQyNTdiMTM0NzJhM2IwMTExYTdhOGNmODNiMWRjMGNmOTYyMDIyY2Q0NDQ2OGEzYWIxZjAwMTZiNzBjYWZiMWQwMjQ2YWNkNzA1MzkzN2M5YWM0MDIwN2NmMTNiNTBkZDE1ZTJhMmUxNWY1MGEwNWJjYTJmMjhlNzcwMjYyMzcxZGFjZWUwMmUyNWIyYTU5NjU4ZWQ5MGMwNjAwZmEyNjViN2RlM2Q0NGY4ZWYwNzIxYmYzOWVjNGQ0ZWNhNTg4ODUyN2I3NzgwNjdiMWQ2NTljMDA1MTRjOGQ3MDU2MjczYTI5NGNiYWZlNDUwOTBkMDY5YmJkMDlmOTJmNDYxZTY0OGYzZTY4Mjg4MmM3MTU3NmU5NzRkZWJiMGNiN2UwZTgzMTY0MDY2NjAxNTBkYWJiNThlNzYyNDY2MTRhMjkxYzEyY2U5ZTAzNDZjMDI3NzRkNGQwOWNlY2MyMzY5NjcxMmZlZTI1MGMwYmI1ZGY3YTJhNGM0M2E1NTYzMzMxYmNiYmY4NGJlM2YyZWViMDY1NDUzMmU4NWVjNTk3YjUzYjMyZjM5NTRjY2FmMGNkNDI2ZGVmOTFlYzRiMjA4NDE2OTQ4YWYyN2RlMDRkODMyNzA1ODk3YTA0YzVlMjRhMmU4OGIyMDA0MGZkNGVjYTMwODlmZGI5MThhOTJlMzVjNGQzMWRhMjY4NTBiOWRkMzQxMThjNzQ0NDlhODU1ZmY0YmM5ZmZmMGQxNDQ3ODM5NjU0YjAwNDE3OTk5ZmE0ZWI4OTEwMjEzM2NkMzIwNDA5MTUzNTg0OTU3YzEwNDg5ZGI0YjcyNDRjOTU5MDc5ODhlODNkYzgyMTI3MWRjMWFiNjQzZDY5OTJkMGZkODIwNDkyYWU2NDJlMjRkMTlhMTc5ZmE3NWQ5MzYzYjMyMTY2MjYwNmZkOTRhNDdmZGIyZTY4ZDNmMzBjMDQ2NzNmODA5ZGUwMTQ0OTQ1ZWE0ZDQxODNkNDhmMTc1MDc5ZWVkNTAzMjNjNmIxOTJlMDIwZTE2MmEzNTAzYWE1ODJmYjA4YjQwMzYyNGEyM2UzNTdlZWRhMDhkOTA0Mzg2ZjM1OGMzNmM2NGQzMTRjNzdjZDlkNGQyM2Q1ODFlZTUzZDgxZmY5N2FkYTAxOWNmY2YwNGViOWRjYzFkZTliNzRjM2RiNmI4MTE1NzhiZDRmMjE5YzVjYTQ4ZWY0YzgyNmIwOWU2Yzk2ZDAzMWY2NWRkNDhiNmU3M2QwYzEwMDU4NmIyMWRmMDI5M2EwM2QyZWQ3ZTUwMDlhZDAyNTM0MGMyMWQwOTA2MDY5MWY1Y2Q4YWYyYWIxMmY5Yjg2MGVlODc4MTVlMWE5ZjQwMGMyYTZmNjM0ZWE4ZjliMzQyNWEwOGQxMGIzYzgxNTM2NzM4OGY0ZDFiZTM1NjMxOGVjZjkwMzVkMGVlOTc1YWZmYTg1OWNhYWMyOGViY2NkMDU5OWJiMmY2ZjM1MjM2NjFiZDE3OGZjOWU0Y2FjMzc4YmI5ZGQ0NzE2YmIwNjkyM2ZkMmJiZDU2Yzk1OWM0MmI5NWQ1MDE5M2Y4YmYyOTlmY2NhM2IyZWVhOTRlYzVmOTg1ODM5MjRjMDgwNDE2ZTI4YjU0ZmU1NzY1ODQ1OGIwNTVjZTRkZThhNzVmYzgyNzE1Y2FlOTFkMzc1Y2Y2OTI4MTM3ODA1MWJiNjFmZGQ3YmIwMDY4ZjYzZWZhNmQ2ZTgzZDhmZDQyNTdhZjgwOTcwZjRhOWU2OTI0YjJkZTBhZDk2NmRmZmU2ZmE0YTExM2IwZTc3MmYxNzY4Nzg1YjNiNDIwNDlmNzZjNDhhZDgwZjJjNjdmYjBmOTFhNWZjNDEwNzkxMjUyMGQ4ZDY4M2MwNjJjM2EyMjJiY2RhN2U3MTBiYWNkNDc4ZWU4ODM2N2I2YTA1OWE0NTJmZDI2ZjExNGE1YWNiZDY5NzliYTAxOWY3ZGE2OGFjMDRhMTkzMDI2YmMxYzI3ZTQ4MzdiMWRlMjljY2UwOTBlMzM4MGQ1MDUxYTU4NjQwOWU2MjhlMzE0NTY2NWJiMWQ4NGVjZDgKK1NJRzogZjBkODczYmUxNWNmNDU0Yzc0MzRkZWFiNzFkZTI1Y2ZlOTllODFhNDhkMmRjZTZhMzVkMTYzMzcxNGRmMGY4YjQwMjllMDU4MjUxMWVmYzRkMDY4OTJmNjcyODUwMjQ2YmNmMDcwYzQ2ZmFkYzJmYWFiNDRkYzQzNTA0NWRlMDAKKworVFNUOiAxMDA2CitTSzogIDY5ZDAxZDgyOTExMzA4MWNiZjVkMGM2ZWY3N2IyMTc3NWM4ZDliNjgwMDAwMDU2ZjAzYzc1YTdkMGEwNTg3ZDIKK1BLOiAgZWU4NDY5ZGQ2MWNmNWRlNDAwZGE3ZDdhNDc5YTQ0MThlNjc3MmU2OWZmNTMzMGNlNWNhNzc4NTlmZTI3MTc1NQorTVNHOiAwYjllMTEwZjI5ZDE5ODE2YTE3YjJjNzU0NzhmMTNjZWU5NTM4MTFhMTk4MzAxNGNiN2ViMGY3NTUyNjkxMjA0NGMzZWE2ODI5NzgwZTY1N2Y4MTdjNTU5N2Q0NjYxMDgwZDkwMzRjOTc3ODcyMjQxOGYyYzNhZWVjYWVmNmI2OTBjNWJkM2I1OTM3MDEwODY5ODhlNDM0MGFlYzM0ZTAxNzI3NThlYjI0MDg3ZDAzYThmNzZlN2NiY2E1M2FhYWZjNGQyMTU1Yzc1MzJhYjU0YmU0ODg3MjY1MzA2NmZhMWZkZDU0YWNmZTlkYWFlY2EzNTZjMjkwZTZiZTYzMzU1YjZkOWZjNTJlYjVlNGZjY2JiYzYwODM1MDcxMzJkZTQ4NWJmYWU5ZjQyZTE5NzEyMjMyYjcxNjQwMmMyM2ZlYTc0ZWZhNjlkNzNjOGMyZTNhODY2MmI4YjY1YjBmZDAwNzc0MTAxM2UxZjZlM2NmZTQzNDVkNWM4MzA2ODJmZTYwMDIxZDcwOGUxMGE5ZTlmNDA1MmZmN2E2YWJmMjhhY2IxZDZiNWZiMDM4ZWVkM2Y3MjUxM2MzNTViYmZkNWMyMjc0ZmE4NWZjNGY0NDY5NzRiMmQxYmMwMzY1MDdhMWViNWZjZjU1ZGJkNDQyMTBlNTM4Mjc0ZGU4MDhiOTAwYmYxYzBmY2MwMjQxMjcwZGI4ZGJkY2Q4ODM0OWQ2NzIyNGYwODdlNWYwN2Y2OTliMGJhZTY4YjJlYmM5YTRlMjdjNzBkM2FjN2Q5OTZmYTdkNGRhYmQ1NjgzNzhlM2Y5MzkwNWIxYzg5YzY1MmQzODRjMTZjMmJjYjFjOTg0NGMzOGY3MWJiMTNlMGM2YTJlYTk1YjYxMmUzOTBjNWY4NmQyNDhlYTUzMWYyZWM2ZjYzOWE0MDJkZmFjY2YzNzIxNzAwNTM0NDAzMDc0NWQxZjFlNTIwY2MxOTVkYWZkZDdmMjk1ZjM3N2I4ZDYxNDcxNjcwMzgzNjIxOWJiN2IwOWZlYTdhYWU5YWMzM2U0MmRjYWI2NWNjNjE0MmZjZDhjZTE1ZTk3NzE3ZmRiMzNlOTUzOGM0NGY2Y2Q5YzFjNjVkYjYyNzUxZjU1MmY4NzBmMTAxNDJjOTZmOWRmMTg1NWFiYjM5ZTQyNzA2YTU2M2FiMTU0NTExZmRjZTY4N2M5NTc2ZjllZGMzYjRiYTU1MzQ2Y2U2NjgwMmZmZmVmNGIxYjVlMTIwMTVjZThiNTdkZTU0NThjYWEwZGFmMzQxOTY4MTI4NTg0Mjg4YzJmMjdjYmZiNzZlYWIyODZiYWM1ZjY2YWFkMDA0OWUwY2E2MGE5MDE0ZTE3OTAxYzQxMzBlODNjZWFlYjRjMjcxM2U5NzFhMjM1ZWZmOTk1YTgxM2FlNGVhNjRhNTgzZmZkZWZkYWM4MmFjNzZlYWY0ZDQ3YzRhYzgyNTBmY2JhZmQ2Yjg4ZmFlYjQ4MDE1ZjViNDJiNTMzNGE1MGIzMWQ0NTAyZWE0OTFkYTkwZGNlOTNjMDhmZDU2ZjVjNThlZWRiMzc5MTY2YTIzNzYyYmU1ZTRhZGVhYTZmNGFlMWMyNGUwY2FjNGRkY2EwMzgzNDU4NTYwY2RjNDhiOGNkMWY0MmEzYmEyZjZmZmI2MDc3OTA5ZmNiMjk0YWQxZWY0YTQ0YzIyZWM0YjM5ODdkZGJlZWYzMjViOThjZWQ1NjgxNWVhN2Q1ZmNjZjVhZmRmZTk4ZTBlNmQ5MjBmN2FkYTJlYjVjOTE2MjRjNzZjYmJhMjk5M2E5YzdhNTUwMjFkMTI3YTY2N2IzOWUyMzVkZjRmODFkZWU3ZGQxNDI4OTg3NzhkYmQ5MjEzNWI3MGIzYWNmNTlmNmMyOWEyYzlkNGE3MDA2ZWYxMWE5MThiM2EyOTA2MjY0YTE1ZDZiNTI5MzA4Y2JjODlmODU2MDFmYzFlYTEzMTRkNjdmNzU2NmNmMTA5MTY1YzdmOTJkZTFhMThkNzBkZWJlMDI0MzQ5ZGIzNTYwYTZlNTI3ZTJhYzNlMDY3ODk0Njg3MDRlNmI4ZjE4NzFmMTZiYWU5ODI3MzkyYjQxOGYxMDg2Y2M0OTcwODZjZWQxNGIxMjQ5ZDZkODc5NGYyM2JiODc3OWQ0MTg2NDhmMjE1NTY1NmE2ZmRhNzQ0MGM1NjI4NGQ5YjIxODhmYTdkMTczNmJjY2M5Y2ZmMGJlNWIxZTFmNTUxZmY4MTM3ZmY1OTY2ZWQ5ZDBmN2YwMWMzZGZmMjk4ZTkxMDJmZmJkMzI0YmZjYTVmZmUwOTY4ZTY2ZjlkODJmNDg3ZDMwMzkzNGYyN2Y3OGIyODM3OGViNzJjMzgyNzI5NjJhNWY3MzVkNzM5MmU1ZDMzM2ZkODZkZTE2NzI2OWMxN2ExNjViOTJkMzFhNDg4MGE0MWUxMzZmNzE4OTYwYTkxOWIzZDdjNGU3NGNiZDczYzczZjkyMWJlNTEzZjczOWFmZmIyZTQxZjgwNDI2YmI4Y2ZiNDU2NGI5OGZjNGRlNTMyNTVjZTNmOThiNGQyMmFlNmZjZTkxOTBiNTViZjJjOTM4NjFjMWRjYWMxMDFiNWUxNmNmMDk5OTFjNWRlZmEzM2Y4ZDUxMDU2ZDkzNGJiNGI0NzdiNjUyMGQ0YzdhZTIyZWE3ZmIzMTA5ZGU3ZjQKK1NJRzogNDA4Y2VmY2YwMTQxN2UyZGM2YThhMTgyODRlNDExNjU3ZjAzOTI1MGMzMTI3OGRiMjgxOWY5ZWFlYTQyOTNmYmY2ODMxYTI4MDFmYzFlYTY4NzE2NTdiODQxZTE3M2Y0NTFiMGQ1NzVhOTM3OWUzNTg1N2U4YzcyOTdmYTE0MDQKKworVFNUOiAxMDA3CitTSzogIDRiOGVkMjk3MzFmMTA0Nzk1ZTk3ZGVlN2M4YjQwMWEwMmFmYWE5YTc5NWU2MTMzNTNkMmI5NTAwMTc2NTAyN2EKK1BLOiAgZjIyMjk4MjEwYjA5ZmQ2MTdmYzhiMzUwNzRjYTE4MDFlNjA3NWRjOTJhOGY1MDM0NGI4MGU4NTQwNWEwMzhmNQorTVNHOiBjYmI1ZjEzYTBlZjI4MzdiODA1ZDNiNzg1MTA5ZjlmMmUwZDBhMDE3YmZlNzY5MmQ5MWVjMjNkZGFiNzgxNzMzMGJlZjI0N2ZkOTFhYjJjNzdkZDQ0MTI1MTljYmQzODQ3NWNlMGNiMzliMTQ4MDA5MmJjNzM4ZDQxNTJiOGE2ZDU1MjQ4ZTNiOWYzMmNkY2QxNWVjNWQwNTllYzNjODg0NzU1NGVlNDcwMDUzOTQ5NzRkOGViMjM1OTJkMTdmNWEzOTZlM2MxOWY4ZTg5ODM3MDY3OWZlZjUzMThjNGRkMjk5YzYyMTdkNmFiY2M5YjYxYTViMmQwY2ZlZjY5NWQxNzBjYTIwYTgzZDZmZDNjNjY2YzhmZDFjMTBhZDk3MGUyZmE2YWYxMGZmMGVkMGNiZmU3NTIyNDZkMDNmM2EzYzYwMzJkYmIzMTliY2ZkYWM0ZGFmYzUwYmMzZTZiZjU5NWY0OTFkZWMzODhiMzQ0MWI4Y2VlMGRmOTFmNTVjYzc4MDdkMDdmOGY1NDFlZDczMjJmZmMzOWQxOGY4OTU2MGU0MTIzYWVjMWQ3Nzk2OWNmMTg3Nzc4NmY0Y2Y5NGIxNzcwYjEwOTA2NTVlOGM3MmVlY2VhNDU3MmU0NmY1ODBmOTYzOTY2ZGIyYTEwODVlZWFiYzU3YmY0YTg0NzI0YjljODU5OWE0MzNhYmY1OGJjYTgwNDA5MWQzZDVlNmU1MDQ4ZWMyN2JmODEyOWI2NzBjYzJjODhkOWNhYzQ3MTg1OWY0NjliOTE4ZjNmNmQ3MGY3ZDY2NjM1MDFmZmJlZmVmMDI2ZDc5ZWE3MDkyN2NjZjYwNzVlZTUxMDU0MjMzMjFlMTFhZWU5YWQxNmY5ODdlZmJkZDAwYjYyYWZmNjk4ZTUyMWFkZjkyMDNiMTVlOWYwZjNhZDA3ZGNhZDlkZGNjYWFlOWI0OTAyNDdmMTJjMzExZGVlNmI3M2I4ZjkxMjRmZGNlMTI5OWI0N2ZiMTkxNGNlZTdlM2EwNzgxNGUzMTJjM2NlNTY5Mjc2NzJjNTFiMzE4NTk4MGNkZTU3ZjNhNzU5YjUwYmNmYzRjYjA3NTNiOTU0ZDk3MTM1ZGViMmEwNTMyZTk4YjY2ZjM5YTdjMDhjZjRkNTQ4NTM5ZTJlYjlmNDIyZjY2NDk2NTg4OTNhN2MzYzI1YTRmYzkwMWY4YzM5OGI4YzcyNzMzOTExYTAwNzJlZDZiZDJmNDE4OTM4OWFlMTBhODE0ZjY0OGQ3MWY2OWMzN2U4Mjk1Nzg0NDI4MTgzYjkzYzgwMTNiOTY0YTlmZWY4NmI0OGY0ODkzMTZiYzIyMmU5NmIzYmQxNWZmMTQ5Yjk2ODIwMzI5NTUxYzE1ZTBkMDk1ZDE1NjliMWUyMTMxYzc4NzUxNTY1YzMwNDFmMjk3ODUzOTViOTcxNTEzMTdmNjJlMzU4MmU0MDdiMTY0OWU2MGQwM2E4NTk5MTIwYTMwMmE0Njk1ZmE4NjJiNDEyMGY5NGQyMmVjYWU3MjM5OGQyMDk0ZDEwOGFkMmRiYzFiOTU5NzM1OTAyMTQyYWE1ZmU2ZTc5OTY1NTlmNmY2MDE0NDhhZWEwMmYzNTZmOGRjZGQxNDQzNDBlYjM2MTlmOTg2NWJmNzY3MmFlYTMyNmM0ZTkzYzk5ZjBlZDFmOWVkODY2YmUxNWQzYWYyNjc1ZjZkZDZlMjk2NjAyY2EzNzNhODE1YjBiZTQ2YmMyYTNmYmJhMDZiODgwNWM3MzFmZTA4MDA3ZGFhMDYwNTA5NjFiMjRkMTQ2OTNhNzI4OThjY2ZiOGI4ZmVkYzYwYTRlZWY4ZmY3OWI2ZGQ3NTkyNTkxODMzYjU3NmVmNDgyOTRlNWUwNDg1OTQyZTU3YzExOTYwMmVkZGY4OGIxZmFlYTUxN2YyZmMyZTNkMTRkMjQ2YTUyY2JkNzFhMTA4YzY2YjZjYzRmMmQ0NTgwNGEyODJlY2VkYjFiMGFkM2RjM2I0ODgwYWIyZmY3OGI4ZGRkZTQ4Zjc0NjZjMTRmZWQzNDllOTViNTA1M2FiZjFiZjA5OTExMjYwMzFkOTc1NDdkMTQzYzJhZTE2NDkyOGI2MWMwNzA4YWY4Y2EzZTRmNTUxNTRkMTNkNzVlOTdkYjRiYTNlNjlkMzZlOWIzNzA4MjM2OGMyZjcyMWJkM2Y5NTEyNmExZTAwNGViMmExYmYyNjgzNDNhZTIxZDI5OTUwNDRhMmNhZGQ2N2ZmYWM5ZTE1MzgxNzViM2NjNDRkYjVkMjZmMWQ1Y2M4OWNhMGUxYzFlZTg1MzdhOGE5MWQzMjRjMmUwMmUxOGI5ZmI5NzMwZDZkZGE1NWY3MmQ4NDMzODk2OTNlYmZjYmE3ZmJlMWEwYmNmZmI5YWEyODRmNGFlNjZmNDRhOGI4OTMwMjk4M2IyMjczNmQwYzcyZDZhMDQ0ZTQyOTE2MjQyNDNhNGUwY2U2NWQ1ZTUzNDZkNjdmZWQzNzYwZGRiMGM1MTBiNTBmZjNlZWYwYTE4YTI2N2RlNzMwNDc2ZGQ4MmRmZjcwNzJjYmEwOTg0ODI1YTAwNGRkNGJjZDhjMzdmZGFmMWY2ODNkMWQ5MzgwZTEzNWE5NWQyNGI4OWZhZDBiZTk0MWM1NDgyNTFiZWM5MGNjYWUwMTViYzA1NjdkYTg0YjM3MWU1MAorU0lHOiAyMzQ1ODg2Njg2ZWIzOWI1MTk5Y2FhYTk2MTViYzZiNDg5NmYwNzZlOGJkNzM2YzAwMzhhNjUxN2Y5YzJiMTY3ZTc1OWYzNzM3MjI2OGE2OTdlOWI3ODYwNWYyZWQ5NDcyNWY2OTA1YTc5MDAxNTNmYzllOGJlZWQzMWZmYWUwNQorCitUU1Q6IDEwMDgKK1NLOiAgMDgwZDdmNzYxODJlZTZiY2VhODk0YjFlMDA2MDU1OGIzYjEyNWEzNDk5ZGYzOTczYjhkZDY2OTM0MDhlZTQ2OQorUEs6ICA0MTI0NzEzZDdjMmRmNTBmOTMwNTU3MzBkMWIyODFkYWVjMzAyOGNmMmMxZTQ4NThkMTI4NzA3YTIzZDZkZWIwCitNU0c6IGFiMGE2ZGUyMzUxYjlhODQ5OGY2ODI3MmQ5YTBhN2EwNTczNjVkMzRlZmEwZmQzNGNjM2JmODYyZTQ5Y2RjMzAyYjJiZDVhMzBkNjAxYTEzMGVjNDAzMmY1NDFhZTZjYjdiYTk3Zjg0MTgzZDJkMjU4MTI4N2NhNzAxZDdkN2E5YWJhMTEwY2U1OGI5NDZhYzA4MjQzMDVkZjc5MjlmM2RkN2ZjOWM4NzMyMjM4NjM3ZTJiMTgxZDZlMTE2YzdmNjZlMzIyNmFhZTNjZWQxNjEwMjYyZGExYTBhNGFhNTBhMWI5NDQzZWM4MjgzMjllNDczNGQyOGZjMjVhYjljMWRlOWI4OTg3ZTVkYzBjODEzMTkxNmM1ZjE4OTI4NzA0YTcxZTgwNjIyYjE0OTJiZjJmZWM1ZDRiNmRiZTQxNWM4YWYyY2UzZWYxMDliMzRkZDVlNjRkNTY4NDZmMDg1OTM1YTRhNWQxMDczNDk3ZmIzZmI4ZmI3N2U4ZjVkNWUzZmQwMGMzMDY1MmUzYzVjZGU0MGEzMzVkMTRlNTQyNWZmYmE5NDI4ODVlZDE3YmQzNmRmNTA2OTI0MjM3ZTc1YmU4NGRhODIxOTUwYjkxNDI0ZmQ5ZjE2YzFiMmM3ODNlOTBmOGNjMmNjYzc5ODBjZTkxNWM3Njk2YjA2YTU4NjczMDI1OWU2ZDE0NTg4NTgyYmFiOWQyYTM5ZjY5ZTk4ZTdmMmFlOWJjMGMyNjEwZDdlMDQ1N2YyNmE1ZDY2NTQzYmUxZDY1Yjc5YzRiN2MwZDhlZTczZDBjMmI2N2JmNTBkODA4MmYwMDZmOTZkMTE5NTA1ODczMTkzZGZkYmQ0MzJiYjFjOWVlMGQwM2VlNTRjZjk1ZDIwZTkxZjdmM2EwNjliNjI1NmY0MjE1OWNkYzFlNjAwYTlhMWMyZjVhOGU0NjdkNWMyYTlkZmY4NzMwZTZiZTgyNmZiMmExZTY0NDhiZmM0ZmNhYWFhY2RhYTc2NjIzNTFmYWFkYzkxZjdjYWE3NzM3ZGM4MmVjM2Q0YjIxOTM2YmNhMWJkN2NlMzczYWQ2NjI2NGFmMTMyNDExNjc1NDkzMThjZGQ3OGU1NjM4MjdmODVlYWIyMGUwYjQyYmM1NTRhNzEyYzAwNTFhNTAxMGRjMmYyYzdkYjg1YWNmNjU0OWY5ZDEwMmM5MDNjMWJlNWEwNTI5MmMzMGYyMWFiMWIyYjhhYmNiYmYxMDQ3MjNjNjNmMGViYzU1NGZiZWU0MjAyMGNjYjE0ZjQ0MzQ3OGRmNzdjNmFhNDRkYjlhNTdmOGZkNDRkOTdlYTA5OWU0Nzc0ODIzZWJlMTIzZmNmNTAxNmE2NmU4MzdiMmY2NWMxODQ1ZTY4MWVlMmE3MDU5ZmIxMjkwY2QwYTkzMzEyOTg1NWNjODNjODdlMGIzYmI2MWU0NDEzNGFkZGQzNjM3ODUwMjQ2Y2RjZGFhMjlmMTVjNDFhM2Q0ZGQyYzFkNzYwMDYyMTI0MzMzMTI0Y2YwOTE0MzVmZGNlNzExZjUyMzE2MzY4OTk5YmVmYTRjODBhMzliMzc1MGU0ZTM4NjI4OWU0ZTI4NTVlOTdiNjE5YjBhMjU3OTk5MTI0MDhiN2Q1OGE0ZGQ5ODE5NTcxZTkwMTQzMGY2ZDU1NTUyOWRkNjMwYTE4Njc0NTliODAyMmQwZTBhZGQ2YWI0ZjEyZjYwYmFhYzc1OTc5YmJmZjdmNjI1OGQyOGQ2NzYwYjFmZjI0M2MzOWU0YmJkNmNmOWJlYTU3MmE5YzA4MmQwNWFkY2ZkNGNjZjlmYTAyNmYyYzkwNGI2ZTc4MmVkNzA5ZGY3NzQ4YTMwN2NkMmRjM2EwZmM0MTIzZGY1ODBjYmY0OWUwNWNlZWFiYzlmMzllNTdiN2YzMDA5MDVkOGIzMTAwOTFmYjk1M2YzZGVmMzZkZWIzZThiZjM3MmY1OTE2YjUxNTk3ZGYwMjRjZTg1Y2M0YzM2ZWFiZGM1ODBiNWNmMTUyOTk0NjQ4ZjFkN2YzNWZlZDVjZDEwZjZlMjk0OTE2MWEzMzU5YjMwMzRkNDUwZWE2ZjYxY2RmMWQ1YWY3NmQ0MDEwMmI2MDI5NGY0ZTQ5MDc4MjQ5MDI2ZDYyZmUzNWZkZjIyNDkyOGIwYzQ5YmEyYjUzMzllYmIxOTJjNWFiN2YwNWNkYjk0NmUzN2Q2NzFhNGE1ZWYyYTU4MjcyMjBiNDQzOGNiZGEwNTczNjI5MjgwNjY0OGY1YmRkNTI0MjBmYTc2Yjg0YTZhZGRiMTI2M2ViMGM1MDBlODE1NjZkNzE4ZDUwNjYwMjZkYTA5NzA1NGE4NjYzMTAxNmRkZmI3MDZhNTY3N2Q1MDJlZjg0YWE3M2I1ODYzYmM0MGZkYzQyY2I3MzIxYWM1ZjAwZTI5MjhmZWQ3YjA0MTg1OTZkYjRiNjE1MWRkNmJjNmU4MThmMDI1MzU1MmJmMTM3NDFlNjk2ODBlOTY2YzkyYzI5M2UxM2M5MGY3Yzk5OTliZDFlYzZhZmUzYjRhZmZiNDczNDBjODk4NTk4MjlmZWI1OTlkYjNhOGMzZDMzZmM4ZDQ1ZmE1MzgxMDc4YWU5Zjc1ZDg1YzE0OTZmNWZiNWFkZGY0ZTQwMDliNzY0YmNjOTExOGU5Mjc1ZGM3MjE5ZjI4MWQwZDFlZjcxNTgKK1NJRzogMTg1ZmIxYjZkODZkYzQ0NDQ4MTBjZjVlYzZmZWYwYWJkYWZhMmE2ZmNjYjQ1ZDExY2ZiNTRiYTE2YTY4NDNmMjgwZDM4MDQ3MTAwMmFlMGQ3MTUwODU1NmM3OGVkNTQxNWU0MjMzOGMxNjFmMmI2MjFlNzRjYmE0ZjZhMWQ0MDIKKworVFNUOiAxMDA5CitTSzogIDQ5ODQ2YWRhN2FlNjg0OTcxZGQ5MTcxMDc5OTA5MGIzN2ZlNWFkNTYxZDcyYTM1ZjJlZmI0MDVmMTk2YWIwZWMKK1BLOiAgNGQzNzBhODE5NGEzMDQ1YjA5YjNiZGFmYTI3ZmI5YWNkNTk5NDNhNTRhZTE0Y2JhYWEyMjAwZWIwZjNkYTcxYgorTVNHOiBhYjM5OGQ5NGY5MjhiMWQ0MjEwMmEzZTUxM2NjZDFjYjEwODk5MDExMDM5NDEwYTg4ODhiYmEyNmRmMWEwMzcyYmRiYTBjZThkODU0YWY1MWU5MzMwYThkYWE5M2MxMDU4MDkwNmE4YWM3MmQyOTRhZWI5NTY2ZmUxYzc4YmE4NDcxYzA2YzRhOGE3NTExM2IzNDg5M2Y2Mjc2ZWQ4MTMyOTIwNTNiOTU2YTQ2NWQ4NDdkMmVjZTg2ZTJkYThhOWYwZmUzZGI1MmE1YWFjNzQ2ZWY5NjQ4NWVmODFmMTM2MmI1YTQyZWFhZWUxZmJiMDY0NjcwNDQ3MWEyMWJmNzYzNjdiZWFhMDc4MTJiM2QzMmFkY2RlZGRlZDc1MzllM2E1MDFiODNjMDViMTlhNDliNTIwZWRlZGM5YTc4YTVmYzJkNTAxMmYxZDRlMzgxODQ0ZTc5MmVkOTBiMGY1N2JjZTM3NWM3NWE2NThiMmM3OGM2ZmY3ZDllZmNkNGJmYTM1YzQ3NjhjYmIxOTVlNDgyM2Q5YmJkODM1YTM3NGZhMDRjYTFlYWFlOWM1NjZkOGZkNWFhN2NhNWVmZTBkZmMzMTdmZmZhNDA5ZWYxMDIyZjFjM2IzNzZhOTM1YWY1NTcwODNlOTUyODdiMDdhOThhYzZjMWI3YmQ4YmIyNmI2MGZhN2M0YmM5MTk3M2IyMDFiMjk5MjJiNGI5ZDAzZGQ2ODgyYTBiZDNiN2Q5ZTViODFlZTc0YzM2YmVjNjY1ZTQzNDNjOGM5YWQzMzZkYTM4NTBjOWIyNjk3ZmUxY2NlMjljMzc4NjIyYTMzYzI0OGY0NDhjODhmNDhkZjAyNjAxNDNiMmEzNDJmMWRkZWU3NGQzYjk3Y2EzZTExNjZiMTU2OTkzZGFkMzBjNDlkODEwZDc0MDQ4YmM2ZDQ2NzY1MjAwNGQ3ZWRiNjVjNmRhYzNhMmM1ZDMwMGI5N2VlM2ExMGE5ZTE0YjY5ZjNjYWQ2NzU5NzI5NjJlMWY4ZWQ5NzU0N2FkZWRjNDdkMWNmMzQ3MWVmM2IyMmZkYmY3OGUzNGYzMWEzYmI3NjY5YzQxYmQ5MjkyYzM4MGJjZTlhNDJkODRiYzI3YWM5MjhiOGJmYzNjNjNkMjBjY2RiNDc4ZGY3ZGRmNDIxZmIxY2Q5MDVmZmM0YzA0Nzg2ZmQ5YWVmMDZiODkzOGFiOGVmNTIyMjE3YjJjMDQ1MTVmNjFhMWMzMTJlYTgzMjUzZjg0NThjMDkxOGZjZmU4NzRlNmU3ZmIxMTI3NWRiMmEyZWM3OWEyZDg2ODMwMzIzM2MxYjY5Nzk1MmEzYmZkM2FkMGE2ZjZjZGQ1ZTcyY2M5NDA5Zjc0MTBhNDBkNWI0NTM2ZGQ0NmViMTYxMWFlODY3MDM2NzFiM2EwNTE1YTAzNzdiZWExNTY1NGJhMGEwZDFlNGU5NjAyNjMyODQyZjJhY2Q0ZWY5OTMyMzZlOTkzZjI2NTBkNTk5MjNmMjRlMmNkMzA5MzJkOGJmOGFlZWM2NDQ0NzJiYTQ2YTA3ODgxNDk2YzkyYTAxMzVjNjc1YWViMGNlNjE4MTA4OGRiOGYxNTZjZmU3NDM1Y2FjNmM5N2RhNjM3ZGI0YTg5ZjUxMzMxZGExMzczMWU3NDFmY2NjMDM1NTU0MmNlMTFlZmE2OWQwNTM4ZDNlZjEyN2FhNjg3NDVlZDMwODVkMjlkYTkwZGM1ODM3MDFiNmIzYTcwYTNlZjNlMTZhOTI0YjMzMjAzYjkyMzk2YzRiOTQ1ZjEyN2E3ODg4ZmEwNTAxNWMwNjAzMDA3NTY2NzI5MjM3Y2MwNzgyYjMwYzAyMGQ5OTU5NTQ3ZmVlYzlmNGQ2NzY0NjBiZmUwYzVjMTljZWFiYWVlMDY4MmRiOGJlNjkxMzUxODFlYzBmZGQ5ZjdhNjZkNTBiZGMzNzllNGEyYzU5ODE3OGY5NTkzOTQ2YWNhNjQwNWIxNzdmY2FkZTBmODY0MjE1ODNlZDY3ZWJhMTg3MjIyYTFlNDQ0OTViM2FlNTQ0ZmRjYTI4ZTJjMTQ0ODVlYWIwNDcxYWFhODAzYzI5YTlkOGE0ODkyNjc2NGZjYTFkZjUxNDA3YWQzM2VjMTdlOTQxZTZlMjYxNzIzN2E4NDMwOTg3M2RjNzEzNjU1ODdiZGU0Mjc0YjVkYzMyN2NjYjFlMWU5Yzg1N2UwNDJjY2NhOGQ4NTUyYmEyODhjOTc4Y2ZhMGFmOTlkNjdjZDAzNDA2MDYyOGUyMzUyNWRiY2EyMDc2NzljZTI5NjkwODc4NDQ4NTUzY2QzODY3NWJjZTA3YmY5N2I5MzE3ZGM0NDQ2OGI3NjhiMTU4YjBjMTExZDYzYTU3MjIzNTY1NWM0MGUxNjU5N2NhMDU5ZjQwYzNkOGFjNWJkNjFhNDg3YzE1MzEzODQ2YTcwNGE3ODExYjhiYzBjZWU2MWUzNDc2MmI2YzFiN2NlYTFjNDZlNjA4N2U5YTM2Zjg5OTE4YTI1OGIzZmE3NzYyMGJlMTBjMTg0YzNmYzM5NzM5MDI0ZTk4Mjc4ZmQ2NWI4MmNhZDgzNjk5ZjNhZDhjNmVjY2JlYzhiN2IxYmQ3OTE0ZDNmNmMzZDAyYmY0MDI4M2IxYzFmMWU5OGUzMDhiZWFlYmJmODk0YjhmNWU5MWJiYmM2MjUzNWY5MjMKK1NJRzogYTVjODA5ZDFjYTRjZmJiM2RjNzBhMmEzYTFmMjY3YzI3MzMwNDIwNzE5ZTM2MDYyMThhMTQ3MWNhYzU3Y2I2NzRiOWI0MjgyN2M1ZTlhN2IyNWM4MTM5YzEzZGZmNjBiZGU2YzJkYmFkM2E4MzYxMTk3YzFmYjE5ZDJjZDUyMGIKKworVFNUOiAxMDEwCitTSzogIDgzMzQzZTM3YWQwOTFhODVlZWMzNzA3MDFiODFhNThmOTM3MGE0YjA0MjNhMDcwZDYwZjkyZDhkMTgwOTg0NGUKK1BLOiAgNTBiNjhiZjcyNmVhYmNhNTNhYzZjOTBkNGVhYzU1NDcwMzcxMmQyMjEwNTU1NGYwNWJmNzlmOWQwOGZjYzQ5MworTVNHOiBjN2RhZGNhYzVkODc5NWUxNzRiNjkxMzg5MTJlNzBmZjQxZTdhNzI1ZmFmMzg1Yjc3M2VkMTUwOTg5NzJiMzBkOWI3MzkzNzJkOTc1YjQ4MGNjZmRmYzU4MGUyZTJkZGY1ZTNjMjdlZTc5MTI3OWFiOTVlNDM4MmIxNDU5ZGQ4ZDQxYWUzNjBkNGE4Nzg4NDY2OTI5MjRmZWVmMzkwYzBkYmJmYTM1ZTRiODJkN2NiYzMzZWUxNTgxYzUyYmQ5NDkzODViMmVlNDAyNjNhNTdkYTExNzRiYjRhY2FkMzdjZDhhZTJhNmI0NWY3YTZkNmJiZWY1YTc5OGNlODViOWUwNWU3NjQ3ZTMzNGVjZmM3NzYzNzhkZTE3NGM0OTdjMGY0MDc1ZTYyNWFmN2FlZDUwMmNkMWNmN2Y1ODhkMGQ4MDdmMDJlMzJmNDMwMGYyMjhhNTBhNjY3YjVhZDFmYmJjMTdlMGIzYzU3MDUxZGRjNjAyZjU3NjA3OWY2ZmM1ODg5YjdmMjkwMDcxMTMzNDQyMGZjNjY2ZjY2ZGJhZmY0MTI2MzM2YzM1M2YxZTViNTY0YTY2NDUzN2Y4Mzc4NmRhNWM1NjI3NzQ1NDA2ZDdiMmZlMzIzM2JmZDU4ZWY0NjRhMDZjOTVjZmQwYjk4OGE3NmQwNTNhNjQ0YmNjMTU5Y2FkNTNhN2M1ZGJiNDBlZWY1Y2QwNDcwNTZhM2YwOTI2NWIxMzI1Njk5YzdkMTU5ZDVjOTAyNDQwMTczMzU3ZmZhYjhmN2E1ZTM4OWY0NjhjMzMzYjc4MmY4MDE3MGFlOTA5ODNhZjE1M2YyZTczYmQyYmVmMTI1ZTNkMzg2OGMyYWI5ZWNmMDNhZmY3NmVjYmViMTgxNjdjYTJmNzExY2Q1NjU4NTFkN2YwNGVlOWQ5YjAxYjZkODNhNzYwNTcyMjYyMGQyOGM4NGQ2YzFhZjQyZjZhNzY5MjU4ZjUzYzFmNjZkYTM2NjY2ZGE1Y2FhOWJkOWU4ZmJjMTY5MjExYjFhZWQ5YzI1NThmNmFhZjViMTQ1YWJjNzIxYWJiMDA3MjAxOTRlMDI3MDM1NDY4YmRlM2ZlMGI4ODg4NGY0ZTliMjZlNzcxZTZjN2EwYTU1ZWEzNmZjNTBkZWM4Y2VmMTYyZjliYmE1YjRiMTYxMDVhZmQ2ZTM3NGUwMzhkNWM4NTg3Y2ZkN2RkODgyOTBiMmM5Y2FiNDVhMjY0ZDY1NDBlYTE0MTZlNmU0ZTc0YTEyZjQ1YTJlZjEzY2M4YTM2ZTdiMGEyNmI5MDJjM2Q5NmUyZTIyMjkyMDJlMjU3NjU2OTRiOTQzMzczZDE2ZTYwMGJkNzg2ZDk1NWE0YjNmMTAyMTY0MGMzOWEwYjZjNjkxNTAwMjgxYWUwZDA5OGNjN2YzODVlMThhMDdlNjJmYTRhMTAxZWY1Yjc4NTUxZmEyOWJkMTVlZTAzNTNhMWE1ZWY5YjIxNmU4YjBmYTUwNzUwYTM0MTYyYjYzNWEwYmM1ZTVkNzIzMGFhMTlhZmExMjhhYmE2NDIyZDM4ZWI3N2EzZjBiYjlkZDhlNDY1MmYxMjA3MGEzNzM2MWMzNzI1NTAzYzlkMjJlMmZhY2UyZWE3NGE3MDAyNDA2MjQ3ZGQ4Njk3NWYwNzU3NWM5ZTdjNmY0MWI1M2IyNmQ1Y2Y1MmM1YWNjMmM1ZDk4MjcxNDM0ZTlmYTUwOWM2ZGZiZDcyNDM3MmFhNWMxMzQ1MWFhZTM5M2RlMGExODY0NjRmNWQzMzdlOWY2MjdiNGYxYzI5MDk0NjcwNjVlODlhNDIyZWM0MGVlMWQ4MGExMzM5MDBhNjJmNGU0ZjdlOTRlYjcyNjE1ZTdlYzI5OTZjNmMyNDMwYzNlOTU3Y2VhZTIxMDVhMWU5MGVhZWFjMGQzMWFmZmE5ZjU3OTI2ZDcxZDk3MmE5YTJkZTExMjU4Y2MxZTcyODU5OWM5ZmIzODcyNDkxODQ3ZTEwYzY3ZWZhZWY2YjY5NmEwMzBmZjA1MzNhNTgzYmVhMWQwNGRmMjVmN2VlZjNhMTNiOGUzMWFhZDEzMzg1N2RmMWI0ZTVmZmJkZWUzN2Y0MGYzOGQyMjRjNzBhZTA0ZWYzM2I0MWIwMmU3MTkxYTg2NjU2YjBkNzJiMmNiYjUzYzQ5MDhjYTIwNmY3NTczNGIyNzcwODE1NGZjZDhhOTc0MjljZmQxZjJkYTI0Mjk3Nzg0MzgwMDNmNWI1YjljMjFkOWVkMjNiOGFkOGEyMjhlYjRmNjVjMjRjMWM1OTY5OWE1YzkwYWZmNzczZTVjNjc2ZGIzNjJhMTkzMGJhMTZhYmE3NmVmOGRhYTQyYjNlYjJjY2M0NWM5MzRkMjNkNDkyOWE3YWQ5ZTNlZjQ2OGIwNmE0OTk1YzgwZGQyMzZhN2JjZjM4NzlkOGI3OTQ2N2Y3MmIzMzg0YzE2MGNjMTgxNzE0ZTkyZjIwMzVlN2I5NzJhMmNjNTI0MmQ5MzI1MjVlYWU3YzUwYmQyNjNiMGZhMDljYmQ5ZDZmOTg0YjljZjYxNTJkOWExMzNjMjc4NDMyMDJkMWU4N2ZhNWE2ZTEyMzVkOWM3NTZiYjhlNjhiMDViOThkYTU0MTk1MjIzZmRmMDIxMDI1MzI1MDYzM2MxMWM1ZjYwYjVlNjdkN2VlZmNhYTZjMmRhYTUyMzEzNworU0lHOiA5YzY5ODljYmUxN2UxNmNhYTI1M2ZmYjFhNjRhMTA2ZmIwMTc4MmM5OWIxNzIyYmFmMWFjYWE0MmFlNWIzNmI3OWIyYTJjZDhmYzkxZjVhZDg5MjM4MTcwMjVhNzc4MjVhMDVkZjhjNDE3ZWM1M2M0YTNhYTFjMGVmZDViYmUwZgorCitUU1Q6IDEwMTEKK1NLOiAgZGEwMTMyMjFiMmY1ODhhZjQwZTIxMWEwZjk3NWQ0NGY5ZDY1MDI4MTYwNTE0YzM5NjE4OWYyN2M3YjA2NjZlYQorUEs6ICAwNzExN2M2YjBkYjViNmZkYTFlZGM0Mzk2YzQ3YzIyYjU0ZWUwY2U1Mzc1YzNlYzYzM2M4M2FmYzUzYWQ2Y2U0CitNU0c6IGJjOTNlZTFlYzQ3MjhhYzYzNmE2MjQ4ZmNjNDU1MWM5ZDE1OTgwZGI4ZTVmNTRiMGVmMDc1YTcxOTcwZTE3NmEzY2I5MTgyZTMyZGE3YThjMmFjMGNkN2U1OTU3NzQ1NzVmOWM4MzUwNmE2MDZmYWNlODk1MTIxMzVkMDMyYWIwNWUzOWZmZjljOGNhNmMyNWNkNWQ3OGVjYzNhYzMyMzI5MGM5YzgxNjI2NzM1ZTE5MGViNWFlMzQ1Y2E3YTk1ODQwOWY3NzQzYjBiMTYxNDkxNjgzMjIxN2M1N2VlZTFiNGY4ZTYyMmFjMDUyYTkzZGQ1YjM5ZDA3NjFlNDBlOWZiZDgzOTZmNjBhM2JmNjY2MGM1ZmE5OWNkODEzOWY2OGNiZTA4OTRlNWM2N2UxNjhjYzc0YjI3MjRlOWQ5MWQ2MDAwYTBjZWM1ODdhMTE0NjNmNzJlZTZlZDI1NWJkODdlYjMwZmQ0NTc1OTZmNjg4Y2EwZWE3M2YzMDQ5NzIzOGRlMjFjOTNmYmIxMjk0ZGI2MWU0YTU2MDg5MTA2ZDFjZjdjZTVhNjVlYzNkMTIxNzBjZTc4NDBmMDg4YThkMGUzYWVmMTdlNTMxZGU0NzgwMDM1NzAyNThlOTI3ZjE1NmU3OTYxMDY1YWZhNjY2YWYzODU4MmIzNTNjYzQ3N2JhNzc1Y2FlNDU5NDZkMDhkYjc1MjE1OTE0ZGEzMjYxYjYyMjk0ZTkyYWZiMzgxNDU5YzIxZGRhNGVhNmVkNzk1Zjc5MjU3YzA5NGRkNjA4ZGM4ZTFiN2M0MGNkMjlmZWEyMjIwODhmNjU2OTdlYTg4ODk1ZDEwYWNlYTg3OTczNjBkY2JhY2VlMjY5YzYwNjYwMGFkZmZkY2Y5YzdjMzgxZDBhZDY2OTY5NjdkOWZmMDNlNjFhMjQ5MDY1MDJiMjk1ZTc2ZjRkMDg3NTY1NWIwMWU2ZmZjYWNjOGVmMDExMjljNzJhNTg0NmI2MGVjODAwMTczNzRlNzVkMzA2NDAzZDllY2NmMjY0OTVkMjk4MTIwYTA2MzM4MzVjNWQxZWZmMTdjOWM2MjQ3NmY3NTJjODk3MTBhZGZhNGQ1MTYxN2I1OTE4MTczY2JhNzIyNTQwZTM4OGZmYmZmYjk2Njg3NGRiMDA0MDRkMDZiMGNlMTEzOWJhNzQxNDNjNzZiOGY0ZDMzYjIxMTZlMWNjZTE3NTE3M2E5NmZjMTUxZWEyMzliZmMyMGQ2NmZiYjZmNTJhNjY2YzBlODFjYzJiODAyMDkxMDZlMjQ4MGU0MTExYzcwZTdiZTRhYWJiNjg0MjJmMGI4YzZiYTE1YzE0MmY4MmU2YzdmMzc4ZDc4MDBhMDllYWE0ZGEyNTNjMmZkOTFlMTI2M2M2YjY1NWJmNzAyNTVkN2UzYmI0Nzc1NTIzYTBhOWU3ZmYwMzc5N2VlM2ZmY2E4YTUwZDEwZjIwZDVlNWE4ODllYzVlMzM0ZWYyNmNmNzk5OGIwODM2ZjY1NjQ1Njg4OGUxMzdmMzlkM2U0M2UyY2UzYzZlZjU0MGQ5NWQ5YTIwYzQyY2I4YWUyZDlkMGYyNWE4OTFjMzYzZWFkOWNjNDIzZjlhMzIzZmUyMzIyODFmYjY3ZjViZTFjMDc4NDM2MTQ2MDQ2OGE4N2U5NWRmYTM1ZDdmMGZmYTIyMTFiZTZiNWZiMzJkNDJiYTY1MThhYjZlYTkzNzgwZjQzMWQzMDA2NzMxYmU0NDQwZTcxMjk3NGY3NGJhZWE0MTlmNDAyMmZhMjUwMmUxYjIzOThlOTM4NjE2N2Q5M2VjYTkyY2E2MGRkN2Q5MWZlODIzMjRmNjgyZDk0YWE3YTg2YWIwMzRmOGE5ZTk1MmU4ZmM5NWJmZjRkZmVkNmE0MzMxM2FiYjkyNDAxYjMwYzMzYzc5YTdiYTNlZmRiZTE2MjgwNDBmYmFmNDQzZjNmOTgwODQ2ZmRiMjgzZGNjZDkzZmFiMDk3MDhiN2Q1NDg2MWQ3NGIxZmU4ZjEwNzAxZjIxMWJhM2QzOTBlOGE2YWU0MDc3Mzk2NDZhNzlhNTgzMzdhNzE3YTg3MjAwOWMyZGY2NzYxYzI0MjVhMzJhMDAxOGFhZjk2NDY0NzBjYmM4N2MzYTY1YzBlMGVmZmJhYTUyOGZlNDc4M2M3NzJhYjI2NmI4ZjI4MjY4Y2YxNGFmMjM0YjE1ODE2ZDFhM2E0OTFhZjVmMjk3ZTMzZDU3Mjk3MTVkNTEyYzM3M2ZlZjVlY2MzZjM5NTRhNjBhMmEwZjY0ZDgyOTQ3NDExOWNhMWExOGYxMDU3OGQwNGQ2MzhkNWVlYWZjMzcxYTk0NmY2Y2U3ZWZiZDJhY2NlMzRlMjA0NDFjZGU5YTM3ZDVhODdkYzYxOWIwYTcyNzU5NmNkMTJlMTVjZDk3ODRiYjkxZjEzOTlhNTlmYzBhN2E0YWY2OGIwZDU3NWQ5MzM4NzE3Mjk3MzM3NWM0NjVkZjVkMmQ1ZTA2MWEyYTliMjNiNDkxNWEwYThiOGMxZjA5NDIwOTRhZjcyOGM4YzMxMTQ1ZmE3YWFmNzRhMjFhM2IwMzJiYjA5YzM5MjIwNWJmMDk1YmRhOTg2ZTVkZDY2MjdjMWU0MTdmNjUwMzI2ZGZlM2E5Yzk5OTRjNmUwZTAxMjc2ZjkxZjI5ODdkMmI4NWRlZGE5NjU0OTEKK1NJRzogMTBjYjUyZDYxMGU0YTgxZDMyODY5YmZmY2UzODA3ZTYzOTFmNzgyZmNkNTM4YjU1NGQwOTAzN2ZkYTcyMjg1Yjk2NjJiMWIxMTA3YzQwODE3OGFjMDA5ZjA1MjU5NjczODhhN2Q4NWZhMTIzNTlkM2NlMzg3NTAzN2RjZjZhMDQKKworVFNUOiAxMDEyCitTSzogIDVhODY4ZmI3NWVhMDcyMWY3ZTg2YzdiYzEwNmQ3NDEzYzhjZjRkMDMzY2UxNDAwNWRmMjNjZTRjMTU1YmJkMjcKK1BLOiAgNmQxZTI5ZjM5ZGVkYTJiYmZiYjU3Y2IwMWNiMzllNTg4MDgyNzhlNTE5NmFkYTFjMDI3NjQ2ZjIwNDg3ZDI1MgorTVNHOiBkNWFhMTE4MjViOTk0NDhjODA2MzA2MjNkOGM3NDYwMTdjZmUzZGU2ZmE4YTBjNmVkNjYyNzEyN2NmYzFmODRkNGUwYTU0ZTZhN2Q5MDhkMzcxOWYxNDIxZDFkNGM3OGIzY2RkOTQ3NjlhYjYwMzNiY2U5NzlkZDkwZTEwNjgwMmViYTlhMDMyOTVkNDhmOWI5YTk1ZDU3ZWU3NzQ1NDAyYTQ4MDIzYmYzYmRkZDVjNmI5MWM3NzNlNDkxOTEzYTM4YWMzNDYyNjA1Y2YyODJkZWFjNzU3NDJmYmQyNzUyOTI3NmU4MWRjY2U4ZGZmOTYwNTAzNWU4Y2YwNWRmNmE0M2RiMTUxZjA0MTU3NjViY2JkMWYxYmI2NjhhZDYyNzNiODkxYzBkYzRmM2RiYTU5MGVhODJmODM2Mzc2OWI5Yzc3NTExOTQ3MTE3Mzc1ZGM0OTA0ZDQ4Yjg4YjY4YTI1NWIyODAxMWIxMTA0ODE5NDA5M2U5ODIwN2FiMWNmNzU2YWI4MzMxZjhkNmY5ZDViZTJlMTE5MDU3M2U5NWU3MTBmMmEzNTAxYjUzYWEwODI1ZDZjMTJkY2ZiOTRhYzgwZGMxMDgyY2I0YWQyNjJlNmQ0OTNhZGNlYjZiYzE5MTQ1ZmJmNzM4ZGY3NmYyMTM0ZmEwNGNiYmU0NGZmYzU1ZmZlNWY5ZDNlOWJlYmQxNTlhMDAxYWE5YmY3ODg5MmExNjUzOGE1MjA4MjNjZGU1ZDYxZTI5YTU2YTc3YWI5NmU0OWUzMDBkOTg2NTk2MmM3ZTdmYjhiY2Y1ZGUwYjkzODI5N2MzZjRkNmY2MDIxZTI0ZGZkYWQ5ODYxNjUyZjM0MGY0MjFlN2FmMmM3MWVkOWE3MTU4N2ZjNzUzYjExNTU0OWIyZjdmN2NiMjk2OTBlYTJiMTU4YTk0Y2QyYmM0MmU3MDYzZDYxOWI5MzlkNTIzZTNjMjM3ZWIxZjQwODEwZGUwYjQ0YWE2OTM3ODYzZDYyOWVkZDU1NzVlNmMwNDc1MjYxYjYyNzQ3MzA5Mjc3NWM4NDM2MDAxMWQ1N2M1NzIwOWMyZTg3NWEzZjg5NjNlOGIyNDFhN2FhNzVlZjMwYzRhNzE4YWM0ZGQ0NjZkYzdhM2U0MGU1ODc0ZjE1N2E4NDllZDNhM2E5ZDRhZWI3ZDk0ZGYwOWJiNTVhMGIyYmM5ZjhiNjk1YzM3MTc5MzAyMzY3NjA2MzY3YzVmMzI0ODI4Y2U3NWE5NDRmNTA3MDNhNDc5MDZhODA4OGYzYTExY2ZlNGE4NTRlMDFmMTc0MTI1MmM0ODYzMzdkMDZiMWNjNmM2YjliMTI5NTQzMWVlMDczNTkzNTdiM2E3OGVmNTA3NWI2NWQ3ZmVkNWViNzQyZTUxMDE1OTg0NDRiNDY2MjNmODlhMzAzYWNjMTBjNzMyNDQ5NTEzYjcwZGM0NTZhNzlkMzdjNDhlNWU3MjZjMmY1NThkYTBhMWM0NmVmYmQyZDkyMDMyNmE2NzhiOGEyMmYwOTQ0YmU0YWY1NWI2YzcxZjQ1M2ZiYWU0MDBlNmFjYzA0ZTBlOTVjYTIwMDE2N2U5NmVlOThlYTgzOTMxNmRhOTNhMTJjMmQ3NmYxMWFlZWJlYjc4ZTY1ZWE0OGY3ZmVlYmJiMTM3YjJhYzY3ZWFlZjAyYTJkOWU2NDcxZGQ2MzRhMDM3ZDRmNWQzNWEyZjc4YWY0MWE4ZWE1YWY1YmM4MTUwYTk5ZWQ2OGE2YTBjY2ZmMmIxZDc5NjVkOGJjM2VmOTI4NWJhNjQyMWQ4N2MzM2FhZDgxMDNhNTg3YmUwMTkyNjg0NWJmYmRkYmFmYzY5YzRiOTI1Mjg4NjcyMGQ0MTg1MDlmNDBmM2RjZjU1NzY1ZGNjYzNkZWVkODI3NzIxNWU2OWYwNTZiYTMxYjhhMzBiNTAwOTRlYThmMTQ0NzIwNzYwYzhmOGMwNTVjZjFhODY5NjRmZmNiYjhlZTFiYjIxODEyNzZlYTk5YTdiOGU3MTA2N2ZhMzEwYmE0NDcxZTg0Mjc5MDM3YmM0OTJhNTVkZTIwNTU0OGU3N2IwMTQ1MDRlZTY2NjRjNDk4OGNiYjllZDkxZmYzMmUyMjU5ZWQ0Y2ZkNjFhMTk3ZDBkYmMzMmM2OGY2NTQ5YzBkMjlmYzQ1ZjM2YWNiMjZiMTY0ZGU5N2NjZGMzNzkwMGQ5M2NkYmNmOTY4N2VmNTNmMWY0ZGExYjFhZTQyMjViODg0MjA5ZTgxYmE0MzExNTIwNDc3ZWQ0MjExYjA5MjQwYmQ3YjgyNWU1NDczOWZlMjVkODYyNGFmMDRiODZmNmQxMTA2ZDE4MTcwZTUwNjRkMWE3M2MxZmIxYTI3YjI4OWE5NDhkNzcxYTJmNmI4YjA5YTYzNWRiOTZjNjI1MWMzNWExODc2ZDM2OTYyNjY5OTQxNmMwZTQwMjk4YTY4MWZkYWY1MjU1ZjU4YzI1NTc3NTlkOGY1ZGYxNDhkZWM5ZGJlMWNlNmRmMDQxYzM2ZjgzZTY5Y2NmYjRhYWNhNWNiNDhmYTZhODVjOGZmNjYwNjE1MjRkOGIxMWJkN2ZmYWVkOTlkMGNkNDVjNDIwMTBmMjFkMzZjYzMxNmNhODYwOTU1NjM1YmZmYWE3ZDlhYWM1NzJkY2NmMzE1M2Q0MmVlOGEyYjEyYmFhNTdjMTYwYmQwYWQKK1NJRzogMzhjNDhkYmE5OWE2NTI0YTE4OGQ1Y2Q3OGE5OGU2NzdkZDI2M2VmNmI0ZGY0NDZiMzEwYjNkZDg5Y2FmZGRiOWIxN2E2NWJiYThlMTM5NjhiZGMyNWIxZDg0YjZlMjQzNmVkZjMxYWE3NTZlM2E0ODcyNmQ2ZjkxYzgwOGVlMGUKKworVFNUOiAxMDEzCitTSzogIGM1NGJkMzQzMWYyNjU5MjgxZDMxZTkzYjMwNzg3NjY4YmNiYTZlNWVlNDdkYjQ2ZTUwZGVhYmUzZjQ4YzllZDgKK1BLOiAgMWViYTZlYjNmN2YyNGNkZjgwYWJmOGExOWQzMDhjMjRmMWUyNWJhMTU5NzBlZGE3MTE2NzA3YjBmMTJjZjkzMgorTVNHOiA2ZjhjZGQ3NWUxYjg1NmJiYmU5Y2RjMjU1MzdmZGY3ZTgyMzZjYjAyOWFjZDM5ODQ0OTIxMTBkMGMzMDQ0MWQ0MjE4NGI1ZmIxODNkYTlmMzE0MDM3OGRmYTdkNzRjY2M5ZWY1MDAxOTNjYzk1NzlmZmZhNjBiZDJhOGFiOWUwOTU4MTUwMGNmMDZjZDM1YWJjMTcxZDlkMTJjNjU4MGQ5NjgyZjlmNDlmZTM2ZDBhMzE3NzIzOGZhNTBlN2ViNGMyN2U0NjBmNWU0NTgwYTU2NTY4YTE5ZTAzZDk1YjBmZjRmNGEyMzE4MjRjZDJmMzQ0MmUwYmE0MDBiYzExYjdhOTg5ZDUwMWY1ZGYzNWU0MzAxNTA4ZjcyYTg1MjAxNGJmYmY0MDAxZTI4MDk1NDczZDk2NTllZWQ2MDY3YmFmNjhmOTJiZWYzMTJjMDliMTlhYWY3YzRmYmEzZDkwMmI5ZjZjZjk1MmViOWI5YTUzY2E4YmNiZDA0MmQ4NDJlOTg1M2I2NzJhMWQwMDlkODIzODM4YmViZTU2MzdjNGMwN2VkMWIxOTQ4NTU0YjIzYjMyZGUxZDZjMTE2ZjkzM2IzNTRmMjhiYmI3NzlmYTY1NDhjNDgyOTJiNjEyYzdmNTUxYTc1ZmJjNDZjMDI3MzZiZjk5ZTljOGVhZDU2ZjA1YWIwNDI3YTZlYzYxNmUzZGNjNzc1N2VmZGI3NjI4ZDRlOTYzMjVmZTBhZTI1NGNlZjVjYjdhNzA0YjM1YTkyMGNiM2ZhMmEwM2U5NjFkYWYzNzE4MjFiZTBiMzBmMTlhZTQ5NTI0NDFlMDhhN2QyMmY1NDMxMzkwYTViZTgwOTdmZDU3OTdhMWE2Mjk3NjY0ZGE0MmMyMDA4ZDAzMjEwNjBlYmUzMTgxZWI3OTVhNzI4OTI1ODA4ZGE3ODY3MjkzYjcyMDhmMzc3ZDNhNzcxMTg1ZTZkMmMxYzhjZTE4Mzc2ZmUzYzBjMTQ1OGM3ZjViZTM0ZjQyOGEwZDU3NTkzMTA3NGM5N2NiZmNlOGFkODEzMTNlY2NhNzNhOWYzZGI0MzRmYmFkNGJiYmZmNTAyYmY3Mjk3ZTE3YTk3YTg4NjQyMTFlNjc4OWJhMTkyMDM2ZWE1OWEzNGQ4NGZmMmExMTEwNzRjM2YyMzczYjEwMTExYjVkYWE3ODk1NjBjYjM1NDkwOTU0Yzg4ZWEwMGM0MTBkZjg1MGFkMDBjYWUyZjI4ZTcxOWZiMDY3MTY5ODhhOWJiMGJmYzZjOTg5ZDU4N2U1Njg1YWU4ODNjMmMyZTc0ZGRiZjkxNWM5ODU2YWFlOGYzMjg4ZmM2MjViZmIyZmUyNjhkNzRmNTlmOGI3ZDgzNjM3NDk3NjkxNjkwMDdkNWU2N2I3ZDBiOGM4ZjVhOWQ5ZjljN2I3NDVjMGE0Mjk0NzYyY2JlY2E0MmQ1Mzg0OTYxZTkyMWE3ZWZiNjVkYThkMWUwM2I2NzQ1Y2RmMzA4MDk3ZmIxM2Q2NGZkMmY4YzEwZmE5NTA5ZWIyZDkxMzg3ZjAwNjQ1Y2E3ZDA0ODNiMmNkMTRjMjA2YjhkN2FlMGEzZmI3YzA5YmM2ODQzZDEwMmFkY2RhMTlmOGJiZDg1MWViNjgzYzQ0MzVjZWI0YjNkMjNkMzhmNTZkNGQxMTE0ZWVmMGZjNmYyNGRmNTI3NzBkOGYxZjNmODJmNDcyMGU4OTJiMzE1MjQ0ZWY1NmMzNmIyM2ZjZDQwNzk3ODUyNDE0MDM4MmUxMTc0MGZkNDZmZTQyOTk5MjNmNTJiODhiNGE5Y2ZmNGIyYjRiMjNhMmU3NjBhZDgxYzc4YmE4NzY5MzFkOWFhYTRiZWVkNDBmYjEwYTc5OWViMzBkMzdmNzU0Nzc4YmFjODViZjA2MzFkODUyYmU3ZDc0YTY0MzFmMzg0YTQwMjVjMTA5MTQyMWQ2N2E0ZTljOTRjMWJlMzY5MGM2YmY4MWQwNmJkYWYzMmZlYWJiYWYxZGMyNjNmMjczYTBiOWVkNjU0NjBiYWVmY2VmY2Y2YWNjY2RhMGVkZDIzZGY5ZTA1MTI4ZTI5ZDY2MWM0YjQ0YmQ5MmQ2NDBmYWE4NTNhZmQ4MzcwZTU2M2I0MGFlMDE0OWExNDI4ZTA2ZTNkZDhlNjZiNzlkYTIxY2M3NTNkZGM0NzZlM2Q3NmUyZjM2ZjJiNmM2YmMxYjY1MDg3ZDVmODZjOGFjMzU0NzExYThjMDhmMzQ4NmU0NzlkNmFlOTQzZjg4NDYzMzJkNGU1YjRiYjJlODI1N2UzMDgzZGY0ZjgxZGQ0ZjBjMWVlMWQ5NzE4MjE2NjE2MWExODU5N2VlMGI5NTlkZTFjNDU1OTFhYmY3YzUxMDMzZDdjNjYzNTJkZWViNjgyZTc3N2FlYWUyZmE4ZDNhNzdmNDcwZGI3OGRkYzFiMWZjODI4NDBjNDA2NTc3NmQ5YmZjYTlkMzkyZDkyODhlZTkxMzJhYTNlNGYyZDE5ZDBkOTNlMDFiNjY2ZjM2NDdhYmFmMjI1YzI5MjQxOWM4YTgyZWJhM2UxMWFiMTAzODQ2ZmNkNDkzNWY0MTI0MTQ3N2MwZjE1MmI3OTY1YWQ1NGJiNzJiYzNkZTJlMGI3OWQ2MjI1ZThmYTdhNjI4NmI1ZmNjYmIzNTgyMmU4MGM4YmZlYTc0Y2I0OGEyMmQyNDEzODUzOTVjMgorU0lHOiBkZjQ1NDFkZmYxYTk3OTdmZWI2MTdmOThlNGI1N2FhNzcxNDEzMWVlOGZmNTQ1ZWQ1MDgyZTM1NjhlZmQxYzM5OWNkYzU2ZjU1ODI5OTFlYjg3ODVmYjMzODY0ZWVmN2Y1NTNmM2UyNDgyNjJlZDU0OGExYTY4ODhmOTJlOTIwZQorCitUU1Q6IDEwMTQKK1NLOiAgZWE2MGRhMDE3OWJjYWY2YjIxODE0MmIxMTE5MDQ2ZmZlNmQ4NWE3NDFiMGQxNjYyMzBiYzZkZTMzMDRmNjc3MworUEs6ICA1MDZiMmViYjQ5YmQ5YjlmZjY2ZTZiN2IxZmFiOTY2OGNiMTgxYjRmYjVlNDM0M2RkZGQzZjhhOWQ3MDIwMzFjCitNU0c6IDYxMmQ2ZWY2ZTQzNDlmZmFlNTE2ZTk4M2U4ZmE3YjUyZDlmZDEzNDI4MjI0MGQ5NTE0MzgyNGJkNGFhZTAzMjM0Yjc2YThjZDZkNDA2OGNmMDA5ZTQ4MWMyNjg1MzYxYzc1NTA0MmM0ZTZhYjg3MDNlY2JmOGYwMjBjZjU3MzlhNGMyYTAzYzM3MzFlOWNmNzVhZWUyNTk2NjE1M2I5NzExNTE1YzZjMzlhZmE5NWYyMjFhYzMzOTViMDg5Yzk3YWM5YjUxNGUxN2Q1NWY3OTZhM2VjYzEzNWZhYWFlZTkwN2FhYjEwMjk2NDdiNDhhYzgxNzQ5YmFiMjY2MjdjZjcwOTVkNzRjMmZjZWUzNTY3MWM4YmI0NjA1M2Y1MTUxYjBjMmU1ZGFiZTBmMmQ2YWEyMDQxMzMwNTAyMGIyYWZkOWVlMzM4N2IyYzllZDBiYzNmZTI5MDJhZjQxMDBjZWMyMzMyN2IwZjFlNGNhMzllZjZlYWY2ZmRmNWQ1YWNmOTNmYzg2ODUzNmQ4Y2JhNDAxNzY5MzI5ZmJlOTNlZmZjN2VlNmJmOTNhNmU1ODhiZDU1MWVhYTUxMjg1Mzk1MmM4MWIyNDVlNWQyMjlkMjk0ZTQxMzcwYjg2NzgwODY2Nzg4N2E2ZjllYmEyYThkNTZhN2E3MDRlNjZiMWMwMmY5NmU3Mzg5NWY0ODNlNDRhNWM1NjZjYjFhZjI2NTczYmZlMmFmY2UwNmIxZmI1ODc3ZTUxZWYzMTI2YTNmMjEwZmJmMjEzZWQ2NWQ1Y2E0NmM0NmNlNGFhOTQ1YmQ4Y2E2MTFlMzgzNjI1MGY1NjRmN2VhMzU0MjM5ODJmOTcwNWZjZDZiZWY0NmFlMTZjYjBmNmJjOTEyYzNmMjg2NDJiOGQ4Nzc3NWI4MThlNGU0ZTgwNjExNjc4OTliZDI3YTdlMmZiODE4N2VlOTkxN2QyZDU4NmJmOWQ0OTllOGZhYmNhODNkZGY1OGM3NDM3ZWFhY2VjNGY0NDRmYjJiZjc0NWRjY2Q4Y2FlMzg5NDQ1NzFkZWRlMjAzN2RjNDFmMDgxOGEzZDkxZTMwMjBhNzI3NGM2Njc0MjQ3ODc2MDgzZDBlMzk3NDZjOTY4NDA2MWJmNzRhZDU4ODQzNmNlMWI3NjNkYmY0YmZjZjhkZTZlMzVjNWE3NjI2Njc1YzEyNzI5MmIyMWRmM2MxNmY4MTA2MzMyMmE3NWYzNDM4ODg2ZjFmMGNlYmZjMWE5NmY0MTM4NGNiZGQ4NjFiMDRmNTE5ZmY2YTkzNDRkOTRmM2QzYTBhYmE4NDA5ZGZjZjE4ZDAxZjJiNWI0NTUxNzE2MzllZWE3N2RlZTcwNmVhODNkY2QyYjhiMWZjNWVjMGQ3NDA3NjFhNWYwNWY3ZWM4ZDg3YWQxZjI5MmE1MGM4YmFlMGFkMzJiMDM0MTlhOTUwZDlmZTNiM2VjYzRkOGQzYWE5NWUwMmI1MWIxODMxZDgzZWFkZWFhNDQyMzg2MzVmOWM2NWVmZTJmNjc0NGE3MGI5YWU0MWVmMTVkOTc5MDhjMDUzMzkzNDQxMmY3OTU4M2QwZTliM2Q3MDZhMTI4ZTg4ZmI1MWVlZGI2NWU0NmQ4YTJiMzhiYmRkNjQ1NTU1NDk2N2E4ZGMwYzY4YmRkZmVhZTBmOGY3MmYwYjg4NmMzYzc0MWZhYzRmOTFlNWM0OTFkYmFlOWRhNDU5NDgzNmNmMWQ5ZmI2ZWUxMzAwMjUwODlhZWQzNTBlZjI0N2JjOTg4N2EyMDUwMTU5ZGRlZDE0MjhmZmQ5YjA3YjllYzJlM2Q0YmJkYzJkZGI1NGU4NzNiNjNmMjQ3NTIzM2UxOTEzM2ExNGI2NjU4NTA5NDU3MDA4MTg2ZDYyMjU5OTVhOTY3MjZiNTI5ZjQ0MjgxYWEyNGZlZmQxY2ZmOGY4MTVkOTNhNTk4NjkzMTY2MjI5MGIzZWUxNjgzM2M2MGYwYWZjZWYyY2JjMDAwNjIzZjM5MzE5MDljYTk3NmEwOTRlMmIwZmRiN2RjZjdjNDg1ZTE0OTg4YTM2ZjE5YjY2NDI1Mzg1ZjU2MzJjZWY2NWQxZDM0MTQ2MjNhZTNlZTgxNmU3NjNhNWY2MDY0NjY2MjJiZTY2MDIxMTQ1MDI5NTFjZjBjMDk3YzE2NDhhNzJlMmM0M2Q5YWZhOTY4OWYyYzNjZmUwMjZjZGNlM2JkMWJmOWViZjc3NzU2MmVjZDhmZjFiMGQ3NzUzMDZkOTAwNDQzZjMwYTg0MzMxMGI4ZGU2YTM4ZmYxMDhiNzIzOTEzZDc4OTliOWZiZTdjM2Q3NjZlZjhiZGZiNmQ4YjBiNTI5NTZjYjFjZWM5OTM2ZDcwYjQ4N2MwMTQ0MGE4NDJiMmZhYmUzOGU3Yjg4NTFhMzg3ZDM1OGJlN2VmMTJhN2U0ZjJiNTI3ZTgzMDkwZDY3ZWIwMTNjOWMyY2ZkM2RlNWExYTNmOTk3NDhhNDFmNDgxOWQ5MDM2ZTUwMGM1MDRjOTg4YmZkMjRmNjE3ZDZlYmRjYWIyZGRlYWE2MTU3OTQxNGYzNjBiNDY5YTMzYTZkZWQ5NmJhMWQ4YzE0MGM0ZmZjOTQ5OTBkOGFkZjc4Y2QzODc4MGJkNjg2NjNkMWEwZWUzM2Y1MzdjZGY4OTJkNTYyZTgyZGNkMWQ5MTJjYWQzOGQ2NTU2N2QyOTE0MDYKK1NJRzogMjdmYjZiNWYwNjUyOGE2NDE5OGEzZTdkNjdjNzM4ODQwYThjZmY0YjQ4MmI0ZDUyNGIxMjJkMTdkMmFlYmNjMDM4OWJlMmM2ZTI4ZTJjZGZjNDg0YzE4ZGU0MjVkYjU2Y2RmYTU2MWM1MDdjZDk3MDYwMmQzYTM4NWQzYWVhMGYKKworVFNUOiAxMDE1CitTSzogIGI2MmMyNDE4NzgyNzM1MTNlMGJmNmYzM2QyMTA0MzY1YjJjZTljNWExYjc4NjA1OGU5YzViNGQxZDE5MmY4N2YKK1BLOiAgYmJmNmZjNTE5OGYzZmJhNWFiMDA3ZjhhNjMyZDI4ZDFhZjg2NWQyOTBmYTBhOTBmYWE5YTliNWI5YzEzZjNmYgorTVNHOiAyNmEzYzI2YTVhMTg5Y2FkNDA3Y2JhYTNhNjg2N2FjMGEyNjA4OGM3NWY5ZDBmYTE5YmQ1MDI3NGNlYzU3NTVhNDk3MTA5YTQ3MzI4NGQ2ZmM4MWFkNGI5ZWMyOWZhN2VjOTc2NGZkMzA5OWYwNjBlMzY4MzY1NTJmZjI0MTNlM2Q1MDk1ZmUwYjFhOGJmY2Y2N2VlMDZhYTkwMzJlN2JiMzI0OTY5ODA0NzcxNGQyODE0MTUyNzNjOTgzNGFkOWViNjY1YTdkOTcyMjBlNzJkOWNhNzNmMzFhZmE3NzM4Njc1YmEzMTYyZWZlZmU3NDc5YTViYzRiY2UyZThiN2FmNDc0MWQ3MDNkYzliYmQ2MGI0Y2Y0YjkwODdmNmNmODZjZjUzYWVkMDJiZjRjYTZhMThmNjA3Y2I1MmEzMDNkNzhlODVhZDg4ZmRmYzg2ZGNiNzE4NzcyN2IwM2JlMjI3NzQ1YmVhNzQ0ZmQwMDY1MjViYzU5YTRkZGRhYjkxNWNlZjQwYThmMzA4MDI5MTNiNzkxM2VhZjk3NDMzNjU1MmUyZjE0NTZhZDgwM2RjNThjOWI0YjE4ZWZhZjdmN2UzNTdlMmNkNzdkMTM4ZDkwMDgwZTI5NmQxMzY0YTJmMzI0ZDNlMGQ2ZWRjMjBiOGJkYWE5ZDJlODcxZjVlN2IwNTFmYjZmY2RiNTU5NWYyMWQzZjhkZTI5ZmI3ODY3OGZhNDc5ZWFhMzI1NzljNzg0ZDUxM2FjNWY4MzZkOTU0ZDBkM2ZjMGU1ZmM4YTZlZWFiOTAyMDJiNGM0YTJiZWMyNGNmNjNlYTY3YzQ3MDA5NjIxOGNkNDMxZTg4MzEwNWZjOWMyN2Y5ZWE3N2MxOGVkYTY5YmMwMGEyMjQyYmQ0MjBmMDk1YzliOWE5MmQ5NTZjY2M1YTg1NzJiMDU3YTdmZTE3M2VlYjJhMzE2NmNiMjA4OWQxMTNhODE2NDYyYjI1ODA1YjhhYmFmZjViMGIyMjg3YzUwOGVjMmI4YzM0YjIxOTVjMzMyODcwZDNjYzM5NjAxN2ExNmI5ZTBkYTYxODJkMDcxZDNiZjM2M2QzZjFlN2I3ZGExMWQ3MTEyNTBhNThhZmQ3NGVkM2UzMTU4ZDQ3MThiYWQ0ZDI3NGJiMzQ0NGNmYzMxODA3NGI1M2JlYmE0NGEyYTM0ZmY4ZWI3MjZlNGExZGFhOTExMDUxNjIxNjUxODk4Yjg4NzE2OWY2MmI5YzBmNDAyMDQ4M2VmNTQ0ZjhmNTcyZmE2YTY2NDBhNGNmZmNlOTc2Y2I3MDI0Zjg0N2JkYzk1ZDFkN2NlNjUzNTA1ZGViZmM2OTg4ZWQyODlkZDQ3YTllYjI2MTI1OWUzZTY1ZTQ1ZmM5ZDcxNDk0NjkzNWNkOGVhMTNiYzZkYjVlYWFiOWU4YjEwZGFlMGZkZDY5NzljMjAzNWNmYjgwOTgyNTJmMjIwNTQ0M2I4MDg4MTZiZjc3ODdiN2YxZTc4YmM5OGE3Mjg1ZTczM2Q0NWZjNDYxMGMyMDk3N2NhMzIyOTg4OWJiOGNkMmI2OTRjZTllM2ZlNzgzMDNhZjgzZTEwNjQyMjU0MmZiNzk2MWQzMmViMWQyYzVmYmU2MDc1MTY3NGIwNzQ3NzNlZTA2MTZlMDI5NzNmNmE3NGEzYWU0NjY0YTI2NTA5MTVhM2UxMDQ5M2I5ZTY2YTM5ZmE1Yzg5YzYxZDQ0NzM1ZjEwN2QzMzc1N2FlNjc5YjQzYThkNDNhMDE3NTdhZTFmMzI3OWU4NjI0NDJlMTUwNzE1NTUwZWU4MmU0OWMwZDQ5NDNmYWYxM2YyMjc5MWYwZTY2ZjI0YWM1MGFiM2MwMDM4NTJiMjFlMTViMmYwMDZlZGMyY2Q2YTg3OWM0NzZhYjViMzUyZWIxMDk5ZGFkNGM1MDM3MjQwMGZhYTU0OThkNzhjNmI4NTcwMzRjMjVjYWY3YjkzM2ZhZjZiZDdjNTlmYTNkYTU3Mzk3YjYwM2RlOWNiOWQ4MGU1MWY3OTk3YmFhNDYyYWNkNTM3ZTJjNDE5NGM3NmM3ZTBiZTY1MTJiY2U0ZDYzNjYwYjM2YzdjYzQ2NjMxZmI5NjcxYWQ4YzVkMjhlMmYyZWUyZWRjZTgxOTU0NDIxYjhhM2Q5ZmY2ZjY2Njk5ZjRiY2U4OGJjYjhlZjE5MmMyNjJhNzRhYjdlMTkxZWVlOTEwMWEyOGQ0YjY2MjgyYjUxMjIwOTNkMTQxYzY0OTZjN2FiYTRkMzUyZTQ3MmVlNzQ0MGUwNWFmNjBkYTBjZmM5M2UzMDM2NDJiYThmYjhlNWM1Njg2ODdhYmQ2M2FmYjNlZDZhMzJiNmRhZTU2YTdlNWQ3M2RlYmFmNDFkMzVjYTM2YWRiOTdhMjJjMGFkYmU3MThiZWMxZmE1MTk5OGRlOWI0Yjk2YTc5YzViOTY1NWIwMTY1ZDVlMWI5YThjYzU1MmU4YzkzMjllZGU1OGRmNzRjNjdiMmJhMWE4NDJmZDNlODE1OGMxZmVhM2E5OWI1NmEyYzJhOTYyMDc4NTNkMjYwMjJjZWMxNzBkN2U3OTk0NGQyZjU2YWFiMWYxOTFiZmQ0OGQ3MjU0OTBjYTgyYjhkOTA2ZjA2ODBlNjllZWI5NTc1Nzc0ZmI5ZDYwNDUxM2ZiYzI2ZjVkMzAzYjY4ODVjYWMwYmY4ZWZlZTA1MzhmOTIKK1NJRzogYzU5MDM5NTg3YjM4ZGMxNDFlMDU1YTkzODUwMTA0ZDYyOWUzODA3MDViOGZjOTE4ODQ3YzVlMmEzNTJkYTNhMDJmY2U3ZjcxOTlmNGFlMmIxZTJhNTk0ODM0MTg5MzJlMTg1ZjdlNDViNTA1MGM2NDJjZWNjN2U3ODE5OTg1MDcKKworVFNUOiAxMDE2CitTSzogIDBmNzdmNzdhMWM3ZTA0YmRhOGU1MzRmNGUzZWZmOWEyMzhjYzE0ODc2YjdlM2VjYThiZWRlMTkyM2EzMzY0MDYKK1BLOiAgMTA0NWVhOWZlMjE0NTgzYTBjZGJjNDk0OTMyYmM0NGFmZWViMDgwYmVjNDg1Y2MyMzRmZGRjZmYxMzljY2UwMAorTVNHOiAwZWNiNzQ2ZGJkYjAxNjE0MjFhZmViN2FkZWE3YTM3YzJlYTQ0MDhhNTkyYzlkNzgxZWQ2YWM2ZjRlZTVjYzY1ZDUyNzBlNGNmMjc2MzJmN2M1YzEzM2Q0MzliNzhkMWY3MWFhNmRkODA3MTNkOTBiMTUxZTE5MTIxYmZhODc3MTBlODRhNDg1MGEzYjViMDI2NWJhMjYwM2QwNzE2ZTliN2UxMTIyMTA5YzM5YzZmMTAyN2ZjZTE4Nzk4Y2JiNGY2YmM1ZTRkN2FjYTQ3MDQ2OTBmNWM5ODE1MTA4NzFjMzEzNTk1Nzk4MzM4NjgxMTA3ZjJiNTc5NGQ0NmY2ZTBiZGUyY2QwNjRiM2IxZmMwMGNhNDcxODhiYmJjMWY0YTBjZTMwNWNjNmQ4YTg5NjkyMGViOWViYWU1NzlmZDMzODVmOGYxZjM1OTc2Mjg4ZjRjNThmZmM0NzYwZjM1OWIwMDNjODcyZTlhMjQwNTUzNTVlYTk1ODVlOTUxMDY5ZGNhMjVmZDBjYzBiOWRiNTJhYWVhZjE5ZDQzZjJlYWI0ZjgzNTYwM2FkMTJkMmRjNDliMzEwMjU2Yjk0YmVkNTQ4OTZhMTZiNjliMDljYjRjOGZmNWMyM2NjZTU1OTNkODdhZGUyYTgyYWRhNTA4NTllMTU0NGMxODYxOGE2NWMwMDdlZjQyNGM5ODU0YTE3NWI2ZTZjMGU2NGIyYzhlYjhhZDRkMjhiOTc3ZDY4ZTc4MTY5OTE1MTk4OTc1Mzk0ZDNiOWIyNjljYWIwZDMyNjFiMmI1NmNkMmNjNGJkZGJkNGYxNDM5ZTBkYmUyYzliM2YzZjc1MTRlZGFjNWViYjQ2MjJiOTJhNjlhODQwYTkwMjg1NTBiMjIxZGI1OWRkZmIwMDEzOTZmODYzOTJhMTdmMDhjY2IxOTRjZDllMWEwMDgxZDdkZDljY2EyMzU3ZmViOGI3OTVlNTE3MDI5Zjc5YzgyYTNiZTZmOWEwMzFkZDFhZjFlNzllNDk4MmJmOGU3NmIzMTBmOWQzNTVlZmNkNWIxZWZhOWYzNTljMTdjZjNiNTEwZDUxM2U4Y2Q1Nzg2YTBkMzQ0NWRjNTlhODQzM2E0NjQ4ODY4N2IwZjU4YjFiZDY1NjdjMmFmNDg3M2I1MWZjODQ1ZTc2N2UyNDMwMDUxOTJmOGYwNjc0ZjI4MTI2NWE1NWQ3NmNlYTMyMjI2MGM5MzJjZWE2NzE3YWRiOThhMmRkYThjNjk4ZTJlODkyNTVmZWI3N2RhNzY0ODE2N2JjMWU1ODg3N2ZlYjcyZDFkMTRiMGMzMDRmMDczNzJkOTU1Njc1MjM3YzQ5ZjdhNmRiYzkxNWU2ODE0YWJhZTZjY2U0Y2FmOWY0ODA4N2U5ZGZiMjgyZDhmMzQwMzc3YzFlMjljNjczMWNjYzI2NjdkYTY2OTViNzEyYmUwMzEyZDg2NTExMTkzNGYxNjhkNTU0NDM2NWRkYWUyN2FiYzY0YWVmYmNiMzIyZGI3ZDk3ZDkwZDk1N2E2MzdiZDgyNmMyMjdlOWViMTgwYjQ1YTQzMTYyNmE2ZmQ4OTBjMGU1ZjRlZDdlODU2NDc0NzUyZjgwYjVhZWY2ZTczZWZkYWE2YzJjNDUxYmQ3NGMxZWY0NjZjYTNhYWEyNTczYmI1MmNiMmIxY2E5NmExYjU3NDQwM2NlYWUxY2YwNWZmYzUzNDMwZTFlNGNkNTU5M2JkMWVmODRiY2JmZTIxOWYwODE2MGQxNjZmMjczMWQ5OWI4ZDdhMzJiMTI5OTFmNzc3NzVhMjY3ZWMwODI5N2VjNTEyZDdiNzI0MzU2MzI1MjVjMDQwMDBmYjAwYTc5M2Y4YjVmOGYzNzQ3YjU1MzU5ZGYyMWI3ZTJjNDlmMmIwYjlhZTA4MmFmYzcwYTE0Njg3MTM3MGI4ZDUwMDg2ZGUwMGY5NDQ4YmU4OTAyMTc0YmEyY2M4NTFmYTM3OWRkNzAzMWNhNDU3YTg4NjlhZjRiNmMyNzI5ZGFjNTE5NTU2YjhiYjRhYjUxOWVmMWJiMDI0ZWE4YjdmMDE3NzFjOWFhYjc0OGU1NzM4MWEwMTkyYTZlMzk4Y2JlNmRkOWYzNjdjYzdiMzM1NGY4M2I3OWJjZGE0NmI3OTNhNGFkYTg1NTQ5YzhkNmJkZDYxNjgxMjQzNjJmZjkwOGFhMWEwY2I3OGFhMzMwYzQyZDVhNWQ0ODEyMzVhY2FjM2E5MTliOTY5YzUwOTg3MjY2ZDQwNGQxNWQwZTcwNmZkOTAwNzYzNGY2OWUxM2M1NmVjNDcxMzM4ODRmY2FkZGMxNmJlZWVlZDE5ZTBjZDkxN2FhNDk2MzY3ODY3ZGZjZWEyNzRlMWE0N2RhNzc0ZjNjOTM2MzAyMWU3YzhkNmJmOGYwMDA1M2ZhY2MxMWNiNjhhOWQ2ZTFmYzJkNmQxOTE3NWQ2MzI0ZmY3Y2E2YzIzMDU4YjhiNjkzZDhmZDRlMGI1MWRjYmIxMTM1NDNmMmZjYzA0NTJlYjlkOTY3YWMwZmE5YjIzZTllMGIxZGE4ZDgzYTNjMWZjOWU5ZWM5NzFmMGY2N2ZjNzQ1YmIxNzM3NmJjNDYyNDVmNTI4Y2I2ZTVmZWUxMWJjZGRhODY3YjdmNzkwMTljZjlkYjU5MTg1ODIzMGFlY2I0ZDFlOTNkMTY3Y2Q4NmI0MmRkODc5YTEzZmEwZQorU0lHOiBiMjBiOWM0MjQ2ZjBkMjk3MDEzOGFmN2RjOWFmNjI5YjY4ZmJjMzdkZjg3YWZkY2FkY2I1NDVjMTc2ODM3NmEwOWMzYmFiYzNlYjFhZjNiNzUxOTg1MmY3NWZhYjFjOWMxMTljNjYyYzU4NzdmYjJmNzI5OWNhYjU3ZmFkM2QwZQorCitUU1Q6IDEwMTcKK1NLOiAgYzVhNTA1MzQ3N2FlMzExNThlNzQ2OWRkMTUwNDg2NzY1MGQ0NmYxNTg5MDY3ZjVjZDg4MWNhZjI1YzI2Y2IyMQorUEs6ICA3MGY4NWRiOTgwN2IyNmZjZjNlNjY5MGI5MTcyNGY3YWUzZDIwZWMzNjA0YWI3ZDYzMDhkOTA5NDMwOGIyZDU5CitNU0c6IDg1NzFmZjM5MDM0ODZhNDNhNjEyNmMzMjNlN2IzYTc0MTQxZDEzODVkNGJkNzAzZjE5ZTJkMWI2NGI1MDI4MWQyNzE2OGFlM2U3NjljNmRkOWRmN2Q5Nzg2NGZiMzc4MjJmMDAyMTg1MmUzMTY4YWI3ZDg0NWE2NTQ1ZWQwYzM3N2Q5ZjdjMDQ4YTJiOTZlOGRjZjQ0NTc3OTY4NGEwNThjMmI5YzIxYWM2OGEwYzM0MWQxZDZjMDk4MTQ1NjQ1NzQ1OGViN2NlYmY2NjY3ODc0MDc3N2VjYTI2ZTAxZTFjOGY1M2I1ZDQ3NTZjYzVmMGI5MGYwYzVkYjA1MzkzY2Q0YjhlNDRmNjgxMGNhYTVhMTE2YTMzNTc3NzI0Mzk1ZDQxM2FmNjE5NjMyYTZmZWQxNGUyMTVjMmYxOWQxMDVjZTJiZjE0OThlNmQyYWI0ZjY1MGY2MWJhNWNmNmQwYzczYmJiZGU5OGUzMDQyOTkxMGE0ZTY3ZGZiYzcxN2NiMDkxMTgyZDU5NzA1OGI1ZDc2NWQwOTdlNjg3NTgzMWI1ODhhYWViM2U3MzI3ZTg1NmI0MmZhOTgzZmQyNTRlZjFmOTE4YjA0M2QxZGQzZDdiN2UzMGIzMTUzODZlZWM5MWU3Zjk0ZDU5OGY0YmViM2IyN2I0MmY0ZWUxZmJmN2FmYjQ4NmJkY2M2MDgxY2NiODY3ZjA0MTExMDQ0ZjRiYmJlM2M4MTIyZWRlYWRlZmE5ZDY5MzkwNmUwZDZlMTMzYmY2ZjJkYTYxNThmZWVkYmRhMDI0NDEwZjEyMDg2ZTdhY2NmMWM2OGUxNTU3ZjAwYzE0ZTljN2VhNzZhNWVkMTMzN2EwNTRhYzJjOTQ5YzA1OTc3ZTAzMDI3NGY2YTRmMmE2YjMwYTE1YzU3MGVjOTQzM2Y3NGY0NzUyODA4N2M5Y2U5YTYyOTI5NTFjNTQzNTQ5OTZmYjI4M2MwZGM0Y2YzM2MwMDFiYzk2ODc1ZWE2ZTFmNDZmODM3ZmYxOGRkOTU0NWZiOTkzNDY1NTM0MmIxMmMyOTkwYjlmMWM2ZmY0ZDY2NDg5ZDZhZWRjZTc1YzdjYjAzYWMxMzRiZmQzOWIxODFkZmI3ZjlhOTdjZTczN2ZlNTcwYWQ1ZjgxMzQ1OTM5YTZkZTVhNDBhMzNhMGU0NGJmOTU3NTAzZDVjYTAyODM1MTJlNTdmYmE4YTNhNmYyYzM5MDY4N2IxYjc3MDg2NzZlMGZkMDNiN2MxODhkNDU2MWMxODc5MTYzZWFmMmI1OTZkZGQ1ZjNjMWY0ZGFkYmMxMzljMjE2NDg5MjgyMGIyZmUwOWNiYzNkMTkwODgwNzYzNjQ1MTAyNTRmMmI2ZDQxMDMyOWU3MGYyZTVhOTQ1YmJhY2QyY2E4OWJkNGI2ZTFmNWUyZTFkNGY0ZWQyZmUwMTEzYmNmMzI5NjJmMDBkNWMzM2IxZGY5ODg0MDJiYTBkYzg4MDRjMWFmNjZjY2FlMjY3MGVmYTMxMzRjNjdmYzkwZmVlZDhkOGRlZWRjY2Y2YTQ2ZjIyOTQwNDU0YWYyYmI2NzU0Y2YyMzVkZGJiMDAwMWM2Yzc0MWJmODc0YmNkOGQ0MWQ5ZGJhODE2MjU4MWMzNzQ2ZDdmMzBlNzNkZWY2OTQxNWFmNTE4MWMxNDk5MTQyOTUxMjJkNDU5ODJmOTQ5NDNlMjBiMGZmYzdmZTZkZGYxOWEwMjJlODdhNTIxMzMzNTdhMWU4MGYzN2YyOGE0YzRhOGE2MWMxNDhkZDg3NWMxZThlY2RjZDg0MGRkODYzZTQ0ZDliY2IxNmI2ZTVhZjAxNDdiMzRhN2E5MDUyYzhkM2Y0NTIwMTNkMmQzNTRmNjgwM2Y5ZWFmNjA1NmYzYjAxM2M2MTZlNDdmMzk4ODE5MTQ2MzIwYTVlM2RiZGYxNjg0M2VhMjlkZWYyNjJjYzlhMzQzNjcyY2Y5NmJjY2M2ZTg3ZTZhNmJhZjA3MTJlNmVlODlhYTYwNDg5ZjE3Y2I3MmRkYzQ0YmFkMTYxNTg3ZDg3ZjU0ZDY3Y2MwYTI3Nzg0OTdkODMxMDg4MzE1ZmZlZWUzZDI2OGM1OWJlZmU4ODRjM2FhMGUwYWUyMjk2YmJiNjBlYWM5MDk3Y2RmOGRjMDk4N2NlYjE3NDJiMDU4NmRmY2U3OWVjMTA0MjViMjhmNGU2NDUyMGQ3MTJlM2Y0NmVhODNiZTJkZTZhMTU3NDA3M2JjNWM3NTU3YjhlMjViNjQxMTE4NGVhMjgzZDg4MDAyMzJjNzkwNjk0MjE4MTFmODgzYzI5OTRlN2I3ZTJhZDlmOGRjNDg5YzkzNDc3MjQzOTQ2MDljOTg5MDlhNmMyNjAxN2I1MGYyMGQ1MGNjYWNiZGUzNmI3NmJhNjQ2YTc2ZGM2YTViMGY1MDY0OWM1NjU4YmJkZmRkM2I1Y2FmYzU0NzlhMmY0OGVlNTE1NDJmMjNlOWZjOTIxMzIwNjBmZDYzNWVmZjQ1MjExMWNkYWYzZWZiZGI3ZGI5ZTdkNDcxNmQwZDYwMTFjMjkxMThhNTVkNGMxYTQzNmFiZTI0ZTNjYmY0MDIzNWI3NmRkMTkyMzUwM2M1ZjM1OTgxMjRlMmRmNTVhMmQxZjI0NmU5MGRlNGI3MTY0NWQ1MTc1YjYxYjAxNzRlN2U1N2RmMTI4NWNjZjhjODZiODM4MmMyNTgwNzkKK1NJRzogZjUxOTFiNDRiZDZjYzNlYTI4MTc3MWRmMTI1NDliYTJiZTIyOGI1MWViNzkxYjllNWVkMjgxNWY4NjJhYTYzMGI1Njk2N2NkZWY4YjZhZjBiOWQyMWFiOGM5N2E2ZGZmNjgxY2NlZDlmNTAxOTcxM2Q0MzU3Y2IzZTU0YzBkMDgKKworVFNUOiAxMDE4CitTSzogIDA1YzcxOWNhZTA2ZTJiYjdkODc4NjNhYjMxNTAyNzJjYjJmOGMzYWEyNDIxOTEyZDg3Zjk4ZTc1ODk2MzhjZTkKK1BLOiAgOTAyMTE3OTZmZWQzZDUzYjgxZjhmZWViMWJhZDFmZmM5MzNlNWYxMGQzYmMxYjM2ZGRmMjEwYTQ3OTIzZGYwMworTVNHOiBlYzI0MTkxODQxOGU2MDUyMjA0MmU2NzMzOWU2NjQ5NDk5ZjMxYTZjN2NmODkyNWYxZjYxZGRlODk0NjAzNjAyYWU4YmI1ZjU4ODA5ODIxZjgzMzQ0ZjIzY2QzMWU2NGVjOWZmZTc5YTk4NmI3ZTI5ZTQzMTlhNjM0MTQzMTZiZDZlZTIwZTAyYTUwZGE0NDAxMmJkMmQ2ZjlmNjc5ZTg4ZWQwYzhiYjFlMmNhZDU1ZTU2NTc4OTg4MzM0NWI3NTQ2ZjNkNTRiMWIzNjJiMWM2NTA1MDJjMDE5ZDczMTNhZmJjODI2ODliMjNhM2E1MmQ4ZjFhZjlmODFlMTg4ZGJkZjIwM2ZiNTMwMGI0MjI1YmZiNjc3MzMzN2JlNjc1MGIzZGI4OGNlMDk3MzQzZjYyZWUyYzExODU3NGVmMTUwY2JkNGM2Mjc2MGMzZTQzZGNiYzM5MjE4YmQ2ZDk4NTY1ZmEzODk4MTFiMWE2NzRmNjE3ZmQ3NTY3MzNkY2I1NjdhOTJkYmYzODU1YjU3YjFmNGE0NmQ1Yjg5NzRiMzlhYzBkMGUyNGQ5OWQyMDM3YzA0ZjYwZDkxNDBmNjRiMDdhNzdkN2VhYTFjZThhNzhlODQ0YjFkY2YwZTM3NDI0ZjNmOWQyNTNhNTQ4NTYxYTAzNzVhOGQ0MzQxMjk3YmZlZGI3MDQ4Yzc5MzVlMTQ4MTQxOGY5YmJhOTI3MWY5ZmQ2MDI2MjI0ZTc4ZTA1NWQ4YTA5MzlmYTJmZTFkYmMwZmM3YjU4M2U0Y2ZmMzQ5MGUxZDBmNjEwYjI1MmUzMGQ4NDk3ZDAwZTRhYWNiMzc1ZjE5YTQ3MTlmNzljYTFlYTU4M2EyZjhiMTQwNmE0YWE1Y2I1NWMwOGI2NTkzYjY3NmViNWMzNGFiZTg5MzkyZDYyZDIzMzA4YTMzNDhiNTdhZmZiYmE3NzM5Y2RlOGUxOTA5ZDM0MjVlZWIyMDkyNmE5NzdkM2E5NGE4NmUwYmExMGIzODY5MjY2OTg4MjdlODZiNGZkNmM2MTgwMDQ3Yzg3ZWMzYjMxNjE5ZDA1YTlkZjM0ZWZkM2Q3NmE4MzY5NjJiMmVmNjA0ZDA3YWYwOTc1ZWI4ZjNkZDIyNTk0MzIzODAyNTY0YzkyOWIzZjY1ZGFjYjU3MmIzMjU1M2Q2OWIzMWExOTc2OTBhOWJiODYwYjA4MGE3N2NmYmIzYzE3NWFhZmNlMDE0NmE4MmE0ZDA2ZThjNzUwNTIxYjcyNmVmMWNiMjlkMDIxZTU5MTVlNWU4NDYyZWRlNTM5NTQ0NTI0NWM5YWU4ODJlZWM0YjE3NDVlMTE3OTFmNzYyMWQzZmU3MDJjYWMxNTI1ZTFmN2I0NmUxMTA1Y2RkMDZkYTJhZmRlMjY0NzVkYzFmNzhkZjhlMmQ3MmIwZWMzZWY3ZGQ5NTYxOTNjOTk2ODQyYTQzMjY5NjUzOGNmMTIzZDc2ODcyMTFmZmNkMDkwYjkzODFlYWJlYzg3OWY3NjlhYWMwZDM1NjRlMTZkZjc5NGZhMjQ3MjhkNzE3MmZkMDc3MzJlYWIwNzdlZDgxYzIyMDg0ZjZmNzgxYjYyNmRhYzY3NDI4YTlkZGYzYjBkYjA0NjUyNTEyMjBkMThiOGJmNjIwNDY0YzUxYTU3OGRlY2NjYmJhYmE1NDVlZDQ0MmNmMTJjNGM2NmY2Y2I2ZTY5MDFlYTU0YWVkYTIzNmVjNDVlZWY4ODZhN2RkZDJjMDQxY2FiYTNhNmNlZTMzOTcxNWI2Y2U5N2U3NjVlYzM0NzlmM2Q1MjgyNGE4MTk0YmVjMmE4OTY0N2U4YzYzZmY3NjQ1ZmY2ZDA1MzY3Yzc2N2JjNDhjYzk2YmFmMDVkNmE0MTViMmE1YWZmOWJmYjIxNzk0OGZhZDM1N2I5OGY0N2RmZWQ2MmZmMTI4NWViOWY0NjhmMGYyOWVkZDc1YWRjMGM4YzJmZjZhNTY1ZWRiOGVkZmI0OGJlYTAzYjcwYzQ0NzM2OWM1MmQ4ODFlZWEwZWVkYjA4YzMxNWNkZjBiZmViOTc5YzFjMDI1MDk0NmJiMTAwYzI4NjZiNDE2OWI4Y2JkNDRkNjU4ZjAyMzZlMWU5ZjNhYTEzYmI4ZTgwMjJhMzhjZTk5N2M5NGI1YmFmOTdlMGJhNjIxZjdlMDk2NzFjZTYzOGMyYTM5ZWU2YzZlMjVhNjg4MDE5ZGQxNjc2NzVjZWFlYzIxYzZiNDJhN2M4YzQ3NmQxMjlkY2M2OTNjMzkyYTAyYmU5MWI4NzQzN2EwOGEwZWJmMWE3YmQ5NzZiYTIzNzc0NzY2ODM4YjhkNjAyNGY1YmI5YjA3ZjNjNmI3MTliNGRlMTViNzI0NDgwNDhhYjcwZGIzZDRiZWE3N2JhMzU5YjUxYjFlYzE3ZGJlODAxMGFlZjAyNDRhODA3OWNhOGI5YTJhNzk3ZjNiMWZlMDQ3YzhkZDVjYWI3ZmI0ODY4MjkyMzljNGVmNmQ5YTM4MzcwZDQ4OGM0N2I3YzAzMGU0OWE1NTAwYzlhYmIzOWE5YTVhYmZlNzJlOTE4Yjc2Mzg0ZWNhYWZlMTYyNzI2NmNkMTRlNjk2YzA5ZDI1MTJlMzEyNTgyYThhOTExZTdiN2JmYTA0YzIxODE5YWY2ODdmMDRjNWUwY2JlOWEyY2UyNGQ0ZDNmZDEyMTkwYjI1M2RhYmMxMmM2M2NhYmZhOTQKK1NJRzogYmE2ZWI3NTEzNzFkZjcyMWI3NzA3YTViMzMzOWVkYjU1ZjEzODY0MGI5N2JlNjMzNGQ2Y2RhNTE5MWEzZmY2MzY3OTExNzYxODgyYTRhMDA3ZjE2MWI3NDhjZWM5NWIxOWU5OTVmMjg1OGMyNTdjZDYxNjkyNTY2NjIzMDExMDIKKworVFNUOiAxMDE5CitTSzogIDUzMTFmM2M5NjEwMWNiOGI3YWJjNjIyYmI5MzI2YjhmNTEzYzJiMTZkMjk0ZGY3OTdmNTZkZmQ4MjAzZGRhMjcKK1BLOiAgMjMwYjcwMDJmNTdjNzlhZTJlNmJmZGI4ZGYzMGRiM2U5MDA3NTZiNTRhZjM5NjhjNjcwZWUyZjMyYmIxMWUwYQorTVNHOiA2MWIxNWJlMzdjNGViMzk3ZDllNzdlMDAxNTFhMjhlZDNlODZkNTBhOTU1MmJiNDg1MGI2MjE3NjNmMDEyZTdlNzdiYjVkYjhmM2RmN2RjZjc2OWYyZDFkNDZkOGQ2MGJhZTQwYzhjYTZlMjVjNjQxMGI2MDA3OGE5M2ZkMDU5MDIxMTRiZDkxMDQ1YzA2MTkyYzcwYzQyYzlmNDFmODE2MWNhNDY1NjRlYmMyMWE0YmRkODE5MGViYTJhZWIzMDk4MjMwNzJlYzJjMDIwMGNlNjQ5OGY5ZDcyYjM3YjNmYjQ2Njc3NDMyNmRmMzdhZDg4MGQ4ZWRkYjMyYWY2NzNlNDVkODhlZWM0OWIxNTc3YjQzYjg2MzkxMTFjMmUwYjk0MTg3ZDJkNGUwMTczYzAwMGY0YzM3YmU4NDVkNjg4MTBiNzg4OWZmMmEwNDlmM2Y5ZjI0NWVjNzBmMjFkZWY5Nzc4MGI2MTE0MDBhODNjMzFhNzlkOTNhOGU5OGI2MDhmZGNmMjQ4OGIwNjhmZTFhZTQyMTcyOTNhOTM2N2JiNzM0YjViYzdiZDg4MTliMzc3ZjA5MGI0ZjhmZGJmZjUwNzk5Yzc2ODgwZDE5MTMzNTgwZTFkZGZjMmI5YmFhZGRiYWIzNGZjNmZkYzA3ODAxNGJkMWZmNzM5ZGFhZmU1NDc2ZjNmNzlkNGRiZWMyMTZmYTc2ODBlZThlODQwMDJkY2I5ZGRiYzdmYzFlMWM4ZWY0ZjFiMmEyMDgxYjkyODIyNDNkYTYxNTNjMWZjZTA5MDVjZjM1ZjgzYTY4NGMwMWIwNDU1N2VjODRmN2U5YTk0ZmMyODgyZTJmZjE5ZmVhMjFkMmNlNjE2Nzg2MWNlMDFkZjhiOGQzYzNlOGQyNTU2MTBiN2FmMjU5NmNkNWNmMDAxNjczNDk0MmNjNzE0YzI3MmMwNWZkYTlkMzQ3MjM2MjY2NDZhNDYxMzAxODJjZWJjZjE3OWVjMDBhNmExNzNiZDg1NzdmYTg0NWM0NGQxOWM2OTk3OTQ0NzU1ZjJiNGU0Njg1NjNhNzVlOTAxNjUyM2I4N2RkYWMzZWVlMjFiY2JjYTA4ZmNjMjk1NDZhNDNjYmUwZDhkMTBhMGU4ZGRjYmExNzJkMWRlZDE1MDM3OGUxOGIzNjhjNzc2MzkxM2U0YjQwNzAxMmZkNzZhODcyZDJjYjA0OTMwYjhlMjJiMzA4MjQzZDRjYzI3OGZkZjJlMWY5NDBhZTg5YWM4OTFiOWUwNjYxYWVlNTUzOTM3YmYzNTBiNDA3MDcwYTFiZGZjNGY3YTM3ODdlZjM5OWQyY2FmNGVjNzQ0MzljNTg3Mzc2Yzc3YmUwYzNkZTUzOWQzYWMyNjA4OTc2NWI5YmUxMGI5MDM4Njk0NjM2ZTI2MmQ3YmFhMGIzYTg5NDFhMjAxNTk2NzYzOWY2MDQ0YzY3ZTU5YmM4MWNmMmZiYTcwNGFjMGRmNDhkYTYwMzc0MDVhOGU4YjhhN2NlM2M1OGVmMzhhODgzNTM4YjI0N2ZmZTE4MDk3YWYwOTUyNDJiMDU4YmRkMWUzZTI0NWVlY2UwYTcxYjc1Yjk3ZDUyZjIwZDZkNTFiYjk3NjZiMGRhMGZjMDljOGFjMmEzMGZiNmU3YjMyZWUwNmRhZGY0NmQ3MzU5Y2MwNjZhYTk0Nzg1ZDhhODgyZmYwOTdkNzhhODZiZTJkNDU2MDBkZDNkMzA2MDEyNWYwMWMwNjNlNDg4ZDVjM2VmZWUxYmNhMWU1ODUxNjQ1NWZmY2FlYzFiODFlZjQzMzg3NmJmMDlmZmE1MWQ2ZjUwMTg1ODUyMjQ1NzljYjY3YjU2Y2UxYzIxNmVjMGE4ODNlMDZjOGUxNTYzNDIxZWE3MmIwYzEwZDRiYjMxZTQ5MWMyYWUyZmU4MTM5ZjI0OWVjOTI3ZDgwNmJhMDhkYjUyYjFiNTA2NjY5MDQ3ZjBjMTE2ZmYzN2FjNWJhNmNkYjFlYWFmMzNmZGFkYjA3MDVjNzk5ZDM1YWM2ZDljODBkYTkwYzE0MzhiNTg1ZmZkNTkzNTBhMjY4NmIxZWMzNTE2NmNiOWI2OWFkMGY1NjU4NmFhMDMyNzRkNzgyZTNmODU4ZGI2NGFkZmJmMDRkNTIyOGE3YjFjNGEyMDQ4YmJjZGI5NDExNTNhNDM2ZDc0MmMzOGI1OGI0ZDdkMTNjOWYxZDYwZTE1MmFhMjc5MjM0OWEzZDk0ZTdlNmIxMTA0YWExYjg3MDk5OGMxOGRkNzA2NTY1NGE4NTI4MWJiNmYwMjdmYWFkNTU2YjFmNTMyZTdhMWUyMmQ1NjQwNjkyODk1ODdhMGVmYzljMTU4NWQxMzVmMzEyMzNjNDFmNDQwNDY2ZTcxZmU5MDEyZTVmOWEwZDc0YTcyODJlZTM5MmZiMDE2NWRiNzlmZjFkMzE3NmVkMDhhZmUxZGFhNjZjZmJmNDMwNWFlMTZhYzE3OTIzMzQzOTlmNzFiMTkxN2RkZWMyNzBhY2ZmNjY1ZWEwNWQxODRjMmM1Y2QyY2NkOTAyYjIyZjliNzE5NWU2NmE2NTU1NmNhODg0YmE2ZjVkYTA0ZGNkNDYxN2YzM2RjMmI0NGEwZWE3NDJhZWIyYjkzZjNhNDFkZjc5NTdhMDI2Nzk3YTU4NWNlZWU4MTRiMTk3NWY1MjNkMmRiNWRiYjliZTBjYTY0OWQxZDQ1ZGNmZAorU0lHOiAzY2JiYjI2MDg4NzBkZWExZWZlZWJiM2ZiZjY4MWUyNzcwNWMzNWU0ZGRlZWE4NmMxYjM0MmE3N2RjMjk2YjQ5ODQxOTgwOGVhY2JjNzg4NTU2MTFmZmJjOTI2NWE3NDc5OGU1MTgyN2U2ZTVkODExODE2ZDNjYTIxZThiOWMwNgorCitUU1Q6IDEwMjAKK1NLOiAgZDI5MGZmZDkzMzk1YmQ1ZmM1ODdkMWFiNTExODY2ZTcyYjM3MWExNzM1NzMyZDlkNWM2YTE4ZGQ0NjVlOTM2MworUEs6ICBmZDRhYWQ3M2IwMzI0NjFjYTBhYWU4NzFjYTcwMTYzODNiMmJlMDE2OTA1M2ZkYmY2YzU5MTRmZGQ2ZGQ2ZjkyCitNU0c6IGViZDkwMGJjOTEwYzVlY2M0ZDk3ZGFmN2NiNWViYjU0OTE1MDBiN2FkMTE2ZTMwNjYwOTUwNzA5ZDgwODRiYjY0MzRjNWJlYTRhOGNjYzFlZDVhODAxYmViYjFhMTE3ODc4YzAzNzQ3MDAzZTE0OGVkOTE0MzQ4MzJlODk2NjI0MWE3ZmZmMjJmZTFkNmQ4YzNjM2RkZDcyMTVhMWVmYWY0YjA3YWZlZTFiMjU2NzNhMTQzOWVhYWMzMjRlODk1ZDRiZTgzOWU5NzZjMDNhYzAwMTI1NDg3Njg4OGNjYWFmMzkxMjcyN2E2MDEwNmE4N2JlNjkyNDdjOWU0MzhjMzFmY2E4ZDljNjFiYWUzNjhjODNlNDA5MDFhOTk3MDBkZmY4MzliNTEzYmE4ZGM0MmQ5M2NlMDk4N2EyMzMzNDcwYTlmOTgzMzEzZjkxOTg4NjU5ZGE1NDAzOWU0OTljZDFhZjJiOGZhMGViZTc1MGUyNGQ1NWMyYTViZDFhZGUzZjY4MDA5MjU0MmJkMWJlMGI5NzM1YmEzOTNhZDU2OTdkMjQxZThlOGIyODY0NmRiMjdkMmZiNWE5NDBlOGZhZWFmMGI2YzllZmRhODg2MTVkZWM4OTFjZTczMjkzMDgxM2JmYmJkMGJjNWY4MjEwYWJlODQzYmViNWU0ZjAyOGY0OWJlYTM0ZjFlNWIwOWVhYzRjNjY2MmM3NGZiYTM5ZGU0YTk2MDJhOTY5NGE4NWM3YzEzNzVmZGFkZmRhNmExOTU3ZmM1YjU5ODdhNjg3YjAzOTk1ZTUxNjk3YTFhYjViYjZjYjExYjY2M2MxMzcyZmFkZTRjMGFjYThmYmViYjRlYjU0Y2U3Y2UzNmM2OTA0ZWFmNmVhYjJmMzRmYWNkOGM3NjhjOGQzNmRhMjM5N2IxYTAyNzM1YWVhNzJjZmFhZDAzOTM0MTBkYjUyN2E4YWIyMzZkNGNkYWJkYzg4OGZhYzZmMTgyMTQ4YjEzMjYxNDQyNWQzOTBmZjAzNmU1NDg1NWU0MjAzYzUxMjAzYzFmNDNlMzdiYmY2YjliZjI3ZjViN2U3YzY2NTE1MTQ2NTQwMWFjMzJjYmU5ZTMzNTA1MzVlZGY0OGE3YmMzNjAzZTIyMzJlOTM4ZjlhODE1YWM0ZDFkZWVjOTkxZWY5NjIwOTQ4NDQxZjdhMmY0YTQ2ZTJjNDAwYWI5MTRjNGJlNTFkY2FhZDhlZDgyMzljYmJlOTc3YTlmMDljMDI2OTgzMTlkOWZlMmE4YzZlYjYwYjc5OWYyOWFlNzY1OTk3MGQyZWJkZmYzYzZjZjcwOWJiZjZmNGJiNTViOWRmNGY2MWEyNDFkZWMxNDRiNTk5M2YwODdlNzg0Yjk3YmUxZTUzNjA4YzJlODE3Y2UzZDlhYWY5MTRlNmI3MjNmNWI0YWZmZmQyYTZiOWZlOWQyZDczOTE1YzdhZDFmZmIxM2VmY2I3M2M1NjIzODE5NTY0NTIwMzk4NGM5OWFhZmQwMjM1ZjczYjNmODgyZTA3MzkzOWJmNzg2NjU3MjgwMTM4ZGIwNWI4NmZjYzk0NjBiMzg1ZWY0NTU5MjA0ZWNkODFlMmYxMmY1ZjA2MmFhNDQ4ZGNjYzgyZWE4ZDg5NDY2ZGQxYmU0NmY4MmM0Zjg3YmYwZGIyYjg3OGFjYmIwZDkxMTJjOGRiNmY1MWQzNWY2ZDQyZjc0OTg1NmI5OWU1NTBiNmM0NTRlOWU4YmU0ZGExNzVmMGI1ZTg2YmU2NmM5NzlmZDg3ODIzN2U1N2Y2OTFmMGQyYWNkMDI4ZmJmZmE1YjA2Njg3NzUwMzRkYjFmMjFkZGJlNzExNGVlM2RjMGI0NGRhY2E2NGM1YTAzYTJmZWVhZWFiZWI3MDYzYmZjY2NjNTU5YmFmMjdmMWNjYjIyMDJmYTRkMWIyYmY0NGMwNGIyYzJmODFmOTRlMjgxYjFhNWFkYzg1MGRhMWI5NDc5ZmNhYmRkYWRlYTU2YTExNWJiNWYwNmNjMDE2ZjE0MWMwZmNiNWU4M2FiMjQ4ZWFlYzkwMTU4ZDhiZTY0N2FmZjEyZTdlZWI1ZTU3ZGJjYzI5M2NiM2I2YWFjYjU1MjM2ZDRhODM5YTA2MjBmNDc2MjM4N2RkMTcxNGRmNWMxMzVlM2Q5ZDY4MjRmOTNiN2M5MGQzYWUzOGM1MThkNjA3MTIwYzgzOTU3MDQxM2I0NmI4Y2NkNzM3MDQ5MmQ4YWU1YzYwOWUwMGNmODI1MWUyZTdkZjgxZTViNGY5YzE2YTVhNTM5ZjBhZmNjZTQxYmI0MzYyZTVlYWE1Zjk0MGExNzA2ZjRhZmI2YjE0NDMyYzgxZDRiYTFhMzNkMzIyZGJmMTA2NDVhYjYzNzM3ZWFkYzg2ZmU2ZTA5NzZmNzYzMzk3ZmI4OTg2Mzc1OTVkZmQzNjkzNDc5MmQ3NzllMjRjMmEzZjBiYWNmNTNlMDQ3M2M1ZmRhOWM2MTI4NGU0NDE5YmRjMGVlZjVkMjJmNGQ5YmY0MmU4YzA0OTMzYmI5M2I1M2MyOTVkN2FjOTM5NWFiYjZkY2JkNzQyYjFlMWJjM2IwZWE0NDM0ZWEyMWI4ZWNhOWFlNjgyZDMzMTVhNDFlOWMzYzMzNzE4NDA3NjFkYzU5Y2FjNDVkYTdlMzgxM2UyODc4OGRjODlkZTM1NWI1YWVlMDg4MDkwYTM4ZGQzOWQ4M2U1ZTQKK1NJRzogMjE3MDRkNWU2MjZkY2Y2YTlkY2RlZjkzNTQyOWViN2ZiNWIyNTdlZWNkN2JmNzRhY2IwY2QzMGVjZmNmNjA4ZDBjNWI2MzNhNGE4YTliYTJjYzgyYTIxZTAzMzU1ZTAxZDg1ZGFlN2VjYWM4ODk2ZGMxNWRhZTA0ODU3MDcxMDQKKworVFNUOiAxMDIxCitTSzogIGQ3ZmQ3M2QxZDIyOWE2NTg5NDQyMGU0YmE3MzQyNzBkNWEyMDc1ODM2NGRlODk3ZDg1NTVlMjQxOTc0NTNjMTkKK1BLOiAgM2MyMjc3MmFlYzBhMGMxNTU5MDc3ZjJjZmQxZjI0NjVkNGI0ODQ5NWM1ZDA1ZjFmODM3YzMxODQ1ZjM0Y2FkMQorTVNHOiBjOTIyNTg1OWQ1NTViYzQyMDExYWYxYjRmMTQ5OThlNmU5YjBhNjVlMjE3MjcxM2U5NjgzODBmYjZjZWVkZGEyMmUwMjJjNTEzMDMwMzFkOTkzMWNjZWYyZjdiYzcwNWM5ZTIxNWMxZDA4OWQ0ODhkYWRkYWVlMTU1YzkzOWI2MjAyY2E1M2JmYzdmNmU4OGUxNTI5ZDgyZmI0NWUwMmI1ZDA1YTgyYmJiOWRiNWY0MTVjNThiYThiZDU2Y2ZmZDkyMjcwYjI0NzQ5ZTU2ZDEyYzk5YWU5MGM3ODAwZjU0ZjU1MjU0ZWE0MmRhNWRjZmJlMGUxZDk4OWNkMmY2ODk3ZTIzMmRmMDQ3MDdiMzRhZjc1ZmE3ZmVjMzNlNTVlZDU2YWVlMzljMjJiMDQ1YmVkZDE2MTA4M2JjNTUxNGMxZjgxY2E5MDdiN2M3NjAzMTdhN2ZkNWE1YTAyYTVkNDBlMmU4MjNlMjRhZDk2YWVmNmRhOGVhOTgyYjUxNjFjYzM5ZDg0YWEyZmZkOTU0NGMxMWI2MzQwMzdhYjBhMWM4ZTM2YWM2MzAxOWRhMWIyZDk5NWNiN2JkM2Q2MmZlNTc0ZGVhYmNjYmQwZDNhZTdhNTZlNWJlYzkxZTRiYTNmM2RiOGJmZWE4OGU2N2RhNjJlODgyNzhhNmUzYjQxOGRjZWVhMDU4OWYyNWY3ZGQ4YWQxOWRkODQ1MDg5NDE5YjQ3MmVmY2NjODc5YzE3MmIzMmVlNGE0ZGJjMmU2YzJlODY1YmIzYjhjYTBhZGNiNzFmZGY4OWUxOTczOTEwZWYyNDI5MTVmMzNlMjM2ZDJmN2M4ZTlmMWVlNWIwN2M2ZTNjMjUzNjBmOGNiMTQ2MGJlODdkYjMxYTI5MWQ0ZGVlMzQ5NTNlNzVjNjc1YmYxODFiYjdhMGI3YjVjMWJlZmRjODZhZGEwNzJhNDhmNmFjNzU1ZDQ5OWJkNjhkNjI1ZDg1MTQ1MjVjYzNhYjhmNTRjZTE1YTg3MTI5MTc3OGRlMTMwNWQyMjE5MzYxYWEzMGUzMzJhMmUwNjkwNzdjNWM1MzQ1NzUyMDM3OWQ4YjkwZDI0YmQ4YTNhNzcwMGZmNzY2MjMxY2I1Njk3ZjlhY2U1MjFhOTllODk2ZGE1NGM0MDc5M2JjN2MxZmIxNTg0YmIxYzg2MTk0ZDJmYjdhNGI4MDJmMzA4ODVlMGVlOGFmODhkNjg4NmUzYTNhNGQ0Yzg1NDY0OWNjMDFhYmRmMzUzMTlhMDg1NmNjNjVkMDkyYTM4NmY4ODY5NjI1Y2QwYWNhYzA4N2U5MzUxNzkwY2NiNGE4NjVmNjUxYTg4MWMzZWJmMTA5MDcyNzc0Zjk0MGY1YWE5OGEyYTJhYTNkZDM2NjQ3ZDBkZTgzMDAxYWE3Y2RjMDMxY2M0YTRkNzVkYzExY2U1NTE2NzZhMmFkNDNhM2Y2YTE2YTRiYzVhZWU4MGU1MzY0MjA2MDg3MzY0ZWI4YjJiMTVmYjcwNTM4MGEwNzJkN2M4YjUxOTk1OTQzYWE3NjJlOGRlYjRjNTY4Y2RhYTE0MTFhYjY4ZjI4NDg5ZTEzMjNiYjYxNTZjZTI1MDBiMDZlNzc5M2M1MTBhM2RlMjkxNTA4NDBiZmRiMGIyYjdiMjFjMmJiOGE3NzQ2MTY3YzkyOWRkMGFkYWQ0NGZlZDhmMzZlODM4MWIzNDIwODBiMmE3ZDgyYTNmODFmZjcyNjMwY2I3OGRmOTFmN2I2NWE0NGVmZjZlZDY0ZDQ4YWZlZDEwOWRkN2E2OTNhMWJhOGMzN2UwMDhmY2IxNTdlMzcyOTdkMzJlYmE3NjVhNmM3MTkzZTczYmQ5NzY0Nzk4NWIxNjAzOGM3NGEwODRhOGYyNTY1NGNkOGNkMmNkZDI3ZmYxNzMzNGUwNmFkYWEwNTgyNjQwMTdhM2IyZGE3OGU1NzM4YTI3ZTM1MGQ4ODJmNWZhZTE5OTI3OGQ0ZTUwYjhiYWRmNTdjMjE0MWRmZGMzY2ZmOTlkZjVkZTg2ZmVjMjkzYzc2Y2I5NGI2YjE5YmEzMDM0ZTQ2MGY4NGMyODBhMmU2NDEyZmFiNTY5OGNlODkwMjA3Y2FiYWJjYTBhOTViNWFkNTMzY2UxMTRiZjcxYTQwNGE4NzU5MGQzNWZhN2NlZGJhNDMxMzFjNGVlOTIzNDQ4MzlmMjVjYmZhZWIxMmFlZWJjODA0MDg5Mzk1MWEzNDZiZDI4ZmRkMTY3YmQyMGY3MWExZTU5ZmI2MGQ1NWUxYzU2N2Y0NzhmMDI3Y2Y2NzlhMzdkMWQ5ZGI4NjdlMTdiZmRkNjBiMzQ3ZDg5ZDMyMjYzOWQzMTViYjdhMmM5MTM0ZjAwZWEwM2EzNjdmMzA1ZWE0ZDYwZGM5ZDU2N2NmOTI0ODUxZTQ2OWVhOTU0ZWQzZWE2M2VhODYwNmY3OWYwNzczMzliZmEyYjUxYWU0OWJhYTBmYjI1Mzc3ODIxZDdjMTFlZjlhZDRiYjRjMGZlNDg5YWNiYWIwZWYwMDBkNjE4YzdhZjVlZmQyMDVkNjg1OTlmY2JkZDk1ZTI4ZjgzNmUwOTE2ZjlmZjU0OGQwYmExN2RhNjI1MzZlNzQ2NDY4MDFlZWI2MTIyYmEzMmM0MTA3M2FlMDRlNDJjNmMxZDVkOGQyMjk3NmE1NjIyNmRkZjRiNmFjOTU0NTVmYjUzMDk5ZjIwMjE1YjJlYmM5MDcKK1NJRzogNDAwYzM1MDVmMWRmYTgwZGY0YjI2ZGIyNGMwMjdlYjgxOTc3ZjBmYjliNWFjYTUyNGFkNTEyMDBmNGJmYjEzM2RiODM0ODIzMzE0MTk1ZjRlZGMyOTJkNWY1MzBkMDg1NTZlNzgwOWNhZjIzMzk3NjhhYTM4MDI5ZmRiYzI4MGYKKworVFNUOiAxMDIyCitTSzogIGZkYTdjYjA4NDAxNmJhNTEzYzdjNGY4ZjcxODA0ODBiYjE4MWU5NTY5NWVhNjg3MzdmYTM0YTQwZWNiZGYzZWYKK1BLOiAgYTJkZTNhMGVmOTcyOThmZDcxNjEwNmUyZjNmNTQ1MTMwNTdhNDAwNzJkMjM0YzM1MTgxNTRjMWJkMTJkZTAzNworTVNHOiBjMjFiYjNmOGUzN2JlZmEzNjdjOTEzNjczMTAxYmEzMGQzYjVjNzRiZDhiZGIwOWNkMjg2NDAwMTJkYjQxMTIwYzJiY2M0MDg1ZGUyYTBmOTVjOTIxNWRkZWY4Y2I1ZmM4ZDhiMTI1MWI0MTUyN2M2N2RmYWEzZjk1YmEzNTc4MzkxZWE1YTY2MjlhNzMzMDk1ZmQwYTQzZmRiYTQwZmZlMjYwZmZmODJhY2VlMmViZTk4MGU5ZWNlY2NmZTdlMTBiMmVkOGMyZTZiNDEwZDU0N2ExMjg2NTcxZGYzZDcwMTE3NGU1NzlmY2YxOWQzYmQ4MDg2YzA0MjNmMzcxMTc3ODlmMzA1ZDk2NzBhZDI4Yzk5Njc0ZjUyY2Y2NDIxMWEwODFkMGM2YzMwOTZkYTJjNzFiZjVmNTc5OWE3OTEwZTZmMzgxMDRhMzdhNjU1N2MyZGFlZjM0MDgxNGExZjgzMGQ1OTM3NzNjNmNmNDhkODNlYTA3Mjk0Yjk0ZWIwODBiODVkNjk3MGUyOGY0MDUxZDUwNjZkYjEwZTk2MTk3M2E2MjZhODI2YWVhZjhhMDZlYzBkNTY2YjdlMGM0ZWY2MGYwYzU2NzhmY2JiNWIyYWM2M2Y3YmVkMDY0NDhhMjQ3YjNkNDI3Yjg3MDg2ZDMzNTczZmIyZDcyMjhjNWMzNGVhNjY0MGVlZmE5NTY0NDg1YTc5NjM4ZTljOTdjMGFmODRjZmVlN2NlNGE3MzkyMjBjODQyOWUwNjcxNDM5NTNkNTUwNjY4ZGFkYzg0ZTdiZWQ5YWIwNzBhNTk0MzM5MGM2MTFkNzViMWNiMTI4NzNhMzdkOTg1MDY2MWEwMDc3YmZhOWNhOWI4YjI2Mzc2NmMxNDlmZjBlZTRiNGFkYmEyNWVhZjdkN2Y1MDFmMzYyNDU0MjU2YmMxMjY5Mzc4ZWYzMzU5YThlZDZiOTYwYjg2NjIxZmEzYjYxM2ViMTMyMTIyZjQ5ZjJlYjJjZWI2ODMyYTM5OTFlOTYxY2IwZTc4Yjc0MmVmNGQ2NWU4ZGUzNDY5NjY2ZmVjN2M1Yjg3NDc4OTU3MWM1Yzk5YTJjMDJhMDUzZmY3ZDJmYzkwMDc2YmFmZTFmMjY3ZmE4MWEzOTkwZjI3ZmYxNGYwMzAwMGFmMDBjNTkyODZjYjliYjk4ZTIwNGU5MDE5MGFlMmE1MGVkZWYwNDllYTkyYTFmNzg1MDg4Zjk0YWRmNjU4OGZiNDNiYjQwZmJlMjMyNDIzNWNjN2UxNjhiODAyNjRiMDY5Zjk0NGY1MDM2OTJjOTQ5MjM0ZDViNzZiY2ZmYWJlMjlmZjkwNjRiZDdjYmVkOWUwMGU1YjdmZGRhNDMxMmViODAxNDY1ZjEyN2QwY2E2ODgzMmE3ZjRlZDBlYWVkOGY1NTljMTYzMWNkNGQzNGYwZGM0MTRkOWZjZmU4NDlhOTFlMjVmM2UwZmYwMTNhOGNmZmE4MDZlZDhlOTNkMDhhMWU1YTc1NzY4MmNhM2QyNmFiYzg2OWM3NmYxYzc5MDA3ZDU1OWRmZTY3ZTc4ZDhhZjAxOTU4MDhiMGU3NzFjNzFlNjRiNTcxNmZiMzYzMDljMjUwMjVmYWU2NDE0YzI4YmJkYmQ0ZGU1OTdhNzQ5OTZjOWRhOTc0OTIwZDU5ZTZmNGMyZWRmZTExMGZmODE3ZmQ0ODBhNTA4MDk3ODA0ODg2NTcxMjA1OGM1ZmU3YjU2MGIxMmI2N2Y3MzdlYTZlMmFmOTI0MmNmMDdhZDBhOGE2NzlmMjY0MzAwNDZhZGMzZTcwNjY0Y2M5YzBlZTVhYmNlZjZkNzI2YjRlMDQxNzYwNDhiNzk1YmUxMjg1MWJkYjc0MDAzYTEzMjA0MTE5Yjg2ODY0ZDY1MzViYTA5NTA0MGE4NWQ5NzgxY2Y0ZjM0ODBhMzA0ZTIyN2Y3ODdhZDUzOGU2OGY0YmFiMDE0MTc5ZTMwZDNmZGVmOWVmZjExYmNmNDcxZmEzYTBiYzc0YjU1NzZmMzAyZDNhNmI0OTlmMTFmMmVmMzI2YWMwMjZjOThkYjEwZTI3NDE0MTNmMzIyMjI4YjNjZmYwZjMzN2JhMmYyOTRjNzhlZjczZjBlODc3ODc4ZjhmYzdmZjZkMTBiY2U2NmFkNjI4NDM3OWI4MGNhODkzMjdkNGRiMGJmMTRlNmQ4ZjAxYjIyYWIyMDJiNzE2Y2MwN2UzYzg4NjZkMTY4YTUwOTRiYWM1YTQ5NWU3Mzg2OGVlZGMyNzIyMmU2NDQ0ZjgzYmNmNjVhY2RjM2VjODkxMjBiYjUwZThhYmZjMjhiNzhlNmQ5ODBjNzc1ZjQ4NDlhMGU4Y2FkYTgwMjQwYmNhMjQ1ZTM5OTY2ZTg5YTAzNDRkZjgzNjNhN2RjYzgxYjIwMWNlOWM3NTNhZDU0NGUxMTI0ZTIxMDIwZDRjNjJkZWRhOWVkOWI5ZDFmMmZiN2M1NGNhN2FiMDlmMzgzYmVmNDhjZmM2ODQ4YzI3MTMwMmExMGZhNjg3ZjU2ZTAwZTBhN2QwOTNjOTI3YjRmZGQ4ZjFiZWRmNjI4OGEwZTMwMjg0OGE4MDEyZjEyN2E3OWQyZDMwYTA2Y2UxN2Q5NGFhNmY3ZjhhMWU2ZWI5ZDA2ODFjMzc3NGY2MTRjYzZkYmNiMmE4MTNmOTI1YzYzMDZhNjMwNTcyYTgzZWMxMDlkNWY1MzNjMDU4NGNiNDIxZDkxOQorU0lHOiAzMzYxNGI3YTk0Zjc1ZTAzNjUzNGQ3NmUzMDE0N2VjY2RkMmEwNGUwMGNkNDcwNGFiNmU4MDdkNmEyYWNjMWUxZDk2M2I4ZWVlMDgxMGQ0MTJkOWQ1NmU1NDU1NjMwMmIxMDczMGMxNWFiZjg5YzI5YTAyNzMwM2VhODhhZTcwMQorCitUU1Q6IDEwMjMKK1NLOiAgYTFhYzQ4YWE1ZmZhM2Q4MDA4MTlkMDNiN2Y2MmJhYmYyOTFmMjA5MDRjMTFhNjQwMGU0ZjQ1MjA1ZjEwM2UzOAorUEs6ICAwODU0ZTAzNDBmODE0OTg1ZmIxMjJiNzg3Mjk0NzllM2ZkZTg1NWMyMTFjYWRlYWU1NmYwZDRkYzA4MjhkNWZhCitNU0c6IGQ2ZjEyNGVkNzUyMDIxYzEwOTI2OTcyYTBjMjZmM2IxODM4YjNjN2FmMjQ3YzE4MDA5YTIzMWVjY2U5NjRiZjY2OTg2Mzc4MzNmNjA3ZGNhODM2ZjhhNjA2YzcyYWUzY2IxNzAxNzQ0NDdhMmNjZTU4M2Y2ZTI0NGRiYzE2M2UyMTViOTgyMGRlNzQ5NmZmYzViNzA1MGM0OGYyODMwMjQ2Njc4Y2JhNGRjNWNhYTA3YzE0NTg1NjNhYTJkMTBkY2I3NzcwZWY4ZmVkZTAyN2RkN2YyMGRkYzhjYzc4YzNhMmUyZTk1OGJkMThjMDAwNmNmOGZiODJkNDRlNTNlMWRhN2FhODBmZDEwMDZmM2IyMzAwYzliMDc5ZDhhNjZmMWU0YTNmNDcwNjFmOWUyZjQ1ZGFlMzVkYzI5NTIwNGIxOTQ2MGNhNTcwN2FiNTdjZTIxNWEyNGMxMGZhYWIzZmEyMGJjY2QxMDFlN2E3ZDcwMDc3NTk5ZjNkNjcyNTcwNzU1MjEyOWNhZDc1N2Q2NTE0YzFiMjg5OTdlNDcxZjk0YjBmZGVkOGZiYmQwNjVkZWFkMTk2ZDJjMDdkM2RmYTdiOWZiM2JhZTc2ODBmNzY2MjEyMDBkMDk5ZWViZWJiZWEwZTg5NTdkZjViNWUyMDRjYTNlOWUyOTUyYjhhMzBmMGExMzFhNjg2N2IxMzgxZTM5NGIxYjQ0NDMxMGYwNzYzMjY2NTZjZjkzNDE2NzgwMDhlOTUyNTE0N2Q4ZDYxY2U5M2QzYmY1MzkwMGNhYjkxMjY2MzcxN2UwOTg3MjkzODMzZDE5MDJkN2ZiMDQ3Yjk5N2I4NjAyNmM0NjdkN2JiMTdjZjQ1Nzk2NzM4ZjdhNzc0YWMxMjY3NjRlZDRlYjQ1MTI0MzA5ZjQ1ODYyNjAxNzZiYTQ2NTkxOGQ0ODMzMGE5Y2MxOGM0ZWNlYTBkZGFmMzg5NDZhY2MwZTM2MWRkNDBhN2U5MTMzY2ViNTBlMWMzMTdlYTQyYmQwOTgwYTcyYjhiYTNkOGE2Yzc2OTNkZDU2MDJmMzc0ZjI2NjRkZjRiYTU2ZGYwMWU4ODJmY2E0MmNiNGRiNjIxZjQ3NmM3NmUxZWE5ZmQxMDU5MTFhNzRiNzc5NTJkOTkxNGE1YWMwZjk4YTkwMGMxYjJlMWE1NmM0ZWE4NTE4YTllZTQ3YzRlZDE0ZDBiZDM1ZWNhNTYwMzE5YzhlYTI0NzU1ZDcxYTRlMDMwODUwYmM0ZGM2MDM4OWYzMjU4MDQwMjEyMDRjY2ViYzI1ZmVkYmQzMmVkZDhkODQ0NmFhMjNjZTU2YTg1Zjc3OWU4NThkMzZhZjdjMDczYzExNWUzNDFmNDEyYzY2MGZhYjgwMGZlNzRjNTBlNzE0ZWUwODZlMmZiYzhkN2FiYmYzZTk4ZmI0MGNhMjdmMWYwMWE5YWFkZDhjYzIyNzVjMmRkM2Y3NmU0YzFkODFjNGI3OTJkYWVjYzlmZTY2MDQ0OTQxYjhiMjkxODQ4NmRkNGFjYjU2MmE3YjU4YWQ4YzYwYzIxYjgzY2Y0OGFlZmE3MjU2YTFlZDgwOWU2Njk4MTFmNDg0MzY0OTcwYmM1Njk1MDg5OTE5YmMzMmQyOGVhNzUyZThlMzE4Y2VmZjQ2N2Y3N2FlMTk3N2M1ZmZkNzljMTdjMmRhOGJjN2Y4MjNkZDk0Mzk4NjgzMTg5OTQ1ZjhiNzkyMzhhNGU4MTViMTQyYjg2NmFjYmRiY2I3YWVhN2YxNDNmZmZiN2NjMmI0YjU0YmJmMzYxYWZkYTkxM2FkNmRmMWU0OWRmZDZiNTMyNjQyZTYzZjU1ZDg5M2E0NzBkNDAzNzA2NjVjZmI3NGVmZDNmNTljYjBmZjYwMDYxNzRjYTM1ZjUzYjk3YzU0M2UwOGFmNGJmNWJiNzVmZjkwMzE2MTA2NTJhM2Y2ZjJhMGNmZTk3ZTdhNTIxZjNkMmEyODkxMTRkZWQzNDc3MmIwZTQ5ODE3YmRlMWNiOTI0ZmY1MTRlMjg2NmEwOWUzZWRlMDc4MmQyYzBjOThlNjgxNGI4YzFlNzc4Y2Y4MzA2MzQ4YzkzM2FkYjJlNDcyZGJhMDlkYjk1NGZmNDk2NDgzNzMzOTVhMmYwMTgxOTU4ZmViMWVhMjgzNGM5OTUzMjg3M2RiNWM4OGViNTI4OWM3N2U5MDAxNTIwM2VmNTAyYWM4ZTFjNDhmYTFhMDZkYWZhNjUxOWQ1MmRhZTNjNTU2NzU3MGRkMjQzNGU2NzE5MjdjNjYzNjNmNzgzMTU2ODkzZjEzOGE4NGM3NTY2NGIzMGFlNDI3NTExMjczNmQ1M2Q0ZjM5OWRkZGEzZDIzMDY3YzA3M2Y1MjFhZmJhMWY3YmU1ODU1MTNjMmNlYzljOGYwOGQyYTIyYzNjODUzOTJjZDJhZTUwZjM5MjgyNTFmODZiMzEwYzY5YTBmOGM0ZTg1M2FiM2YzZTgxMjliMDU2NmVmNGJiYmU4MGI4YzAyYzg5MjhhNGRlNTZjMGQxMTlhNDViYmY1YWYxODA4ZDQ4ODg1MmQ4YTQ1YmViMGQ2ODMyNDhhNGQ2NWRlMTUyNmIzZDFkMmZmYzFmMjIyMTViNjA4NDY4Y2JjM2JkMzk1MTRiMzk3ZmMwZGIwZjExM2RiZTZmY2U0NjUyZTgyZmY4OTViMmI0Mzg3ZTA0MWQ3ZTRlN2JkZTQ2OTQ3Njk2NjVlODEKK1NJRzogYzU3ZTNjMDkxZWQyNGU1ZTg0NjY1YmQ5YmIxMDJkYjQ5Nzk3ZGY5MDA4ZjA1NTU3ZmEwZDVhZDdhMjk1ZTVlNGQyYTQ3MTZiMTdmOGM5MWNiMTJmNWFiZmIxYWYwMjdmYjA0MTExOTlhY2M1ZDI4NWQ4NDJhNGI2NWJkZTQ5MDIKKworVFNUOiAxMDI0CitTSzogIGY1ZTU3NjdjZjE1MzMxOTUxNzYzMGYyMjY4NzZiODZjODE2MGNjNTgzYmMwMTM3NDRjNmJmMjU1ZjVjYzBlZTUKK1BLOiAgMjc4MTE3ZmMxNDRjNzIzNDBmNjdkMGYyMzE2ZTgzODZjZWZmYmYyYjI0MjhjOWM1MWZlZjdjNTk3ZjFkNDI2ZQorTVNHOiAwOGI4YjJiNzMzNDI0MjQzNzYwZmU0MjZhNGI1NDkwODYzMjExMGE2NmMyZjY1OTFlYWJkMzM0NWUzZTRlYjk4ZmE2ZTI2NGJmMDllZmUxMmVlNTBmOGY1NGU5Zjc3YjFlMzU1ZjZjNTA1NDRlMjNmYjE0MzNkZGY3M2JlODRkODc5ZGU3YzAwNDZkYzQ5OTZkOWU3NzNmNGJjOWVmZTU3Mzg4MjlhZGIyNmM4MWIzN2M5M2ExYjI3MGIyMDMyOWQ2NTg2NzVmYzZlYTUzNGUwODEwYTQ0MzI4MjZiZjU4Yzk0MWVmYjY1ZDU3YTMzOGJiZDJlMjY2NDBmODlmZmJjMWE4NThlZmNiODU1MGVlM2E1ZTE5OThiZDE3N2U5M2E3MzYzYzM0NGZlNmIxOTllZTVkMDJlODJkNTIyYzRmZWJhMTU0NTJmODAyODhhODIxYTU3OTExNmVjNmRhZDJiM2IzMTBkYTkwMzQwMWFhNjIxMDBhYjVkMWEzNjU1M2UwNjIwM2IzMzg5MGNjOWI4MzJmNzllZjgwNTYwY2NiOWEzOWNlNzY3OTY3ZWQ2MjhjNmFkNTczY2IxMTZkYmVmZWZkNzU0OTlkYTk2YmQ2OGE4YTk3YjkyOGE4YmJjMTAzYjY2MjFmY2RlMmJlY2ExMjMxZDIwNmJlNmNkOWVjN2FmZjZmNmM5NGZjZDcyMDRlZDM0NTVjNjhjODNmNGE0MWRhNGFmMmI3NGVmNWM1M2YxZDhhYzcwYmRjYjdlZDE4NWNlODFiZDg0MzU5ZDQ0MjU0ZDk1NjI5ZTk4NTVhOTRhN2MxOTU4ZDFmOGFkYTVkMDUzMmVkOGE1YWEzZmIyZDE3YmE3MGViNjI0OGU1OTRlMWEyMjk3YWNiYmIzOWQ1MDJmMWE4YzZlYjZmMWNlMjJiM2RlMWExZjQwY2MyNDU1NDExOWE4MzFhOWFhZDYwNzljYWQ4ODQyNWRlNmJkZTFhOTE4N2ViYjYwOTJjZjY3YmYyYjEzZmQ2NWYyNzA4OGQ3OGI3ZTg4M2M4NzU5ZDJjNGY1YzY1YWRiNzU1Mzg3OGFkNTc1ZjlmYWQ4NzhlODBhMGM5YmE2M2JjYmNjMjczMmU2OTQ4NWJiYzljOTBiZmJkNjI0ODFkOTA4OWJlY2NmODBjZmUyZGYxNmEyY2Y2NWJkOTJkZDU5N2IwNzA3ZTA5MTdhZjQ4YmJiNzVmZWQ0MTNkMjM4ZjU1NTVhN2E1NjlkODBjMzQxNGE4ZDA4NTlkYzY1YTQ2MTI4YmFiMjdhZjg3YTcxMzE0ZjMxOGM3ODJiMjNlYmZlODA4YjgyYjBjZTI2NDAxZDJlMjJmMDRkODNkMTI1NWRjNTFhZGRkM2I3NWEyYjFhZTA3ODQ1MDRkZjU0M2FmODk2OWJlM2VhNzA4MmZmN2ZjOTg4OGMxNDRkYTJhZjU4NDI5ZWM5NjAzMWRiY2FkM2RhZDlhZjBkY2JhYWFmMjY4Y2I4ZmNmZmVhZDk0ZjNjN2NhNDk1ZTA1NmE5YjQ3YWNkYjc1MWZiNzNlNjY2YzZjNjU1YWRlODI5NzI5N2QwN2FkMWJhNWU0M2YxYmNhMzIzMDE2NTEzMzllMjI5MDRjYzhjNDJmNThjMzBjMDRhYWZkYjAzOGRkYTA4NDdkZDk4OGRjZGE2ZjNiZmQxNWM0YjRjNDUyNTAwNGFhMDZlZWZmOGNhNjE3ODNhYWNlYzU3ZmIzZDFmOTJiMGZlMmZkMWE4NWY2NzI0NTE3YjY1ZTYxNGFkNjgwOGQ2ZjZlZTM0ZGZmNzMxMGZkYzgyYWViZmQ5MDRiMDFlMWRjNTRiMjkyNzA5NGIyZGI2OGQ2ZjkwM2I2ODQwMWFkZWJmNWE3ZTA4ZDc4ZmY0ZWY1ZDYzNjUzYTY1MDQwY2Y5YmZkNGFjYTc5ODRhNzRkMzcxNDU5ODY3ODBmYzBiMTZhYzQ1MTY0OWRlNjE4OGE3ZGJkZjE5MWY2NGI1ZmM1ZTJhYjQ3YjU3ZjdmNzI3NmNkNDE5YzE3YTNjYThlMWI5MzlhZTQ5ZTQ4OGFjYmE2Yjk2NTYxMGI1NDgwMTA5YzhiMTdiODBlMWI3Yjc1MGRmYzc1OThkNWQ1MDExZmQyZGNjNTYwMGEzMmVmNWI1MmExZWNjODIwZTMwOGFhMzQyNzIxYWFjMDk0M2JmNjY4NmI2NGIyNTc5Mzc2NTA0Y2NjNDkzZDk3ZTZhZWQzZmIwZjljZDcxYTQzZGQ0OTdmMDFmMTdjMGUyY2IzNzk3YWEyYTJmMjU2NjU2MTY4ZTZjNDk2YWZjNWZiOTMyNDZmNmIxMTE2Mzk4YTM0NmYxYTY0MWYzYjA0MWU5ODlmNzkxNGY5MGNjMmM3ZmZmMzU3ODc2ZTUwNmI1MGQzMzRiYTc3YzIyNWJjMzA3YmE1MzcxNTJmM2YxNjEwZTRlYWZlNTk1ZjZkOWQ5MGQxMWZhYTkzM2ExNWVmMTM2OTU0Njg2OGE3ZjNhNDVhOTY3NjhkNDBmZDlkMDM0MTJjMDkxYzYzMTVjZjRmZGU3Y2I2ODYwNjkzNzM4MGRiMmVhYWE3MDdiNGM0MTg1YzMyZWRkY2RkMzA2NzA1ZTRkYzFmZmM4NzJlZWVlNDc1YTY0ZGZhYzg2YWJhNDFjMDYxODk4M2Y4NzQxYzVlZjY4ZDNhMTAxZThhM2I4Y2FjNjBjOTA1YzE1ZmM5MTA4NDBiOTRjMDBhMGI5ZDAKK1NJRzogMGFhYjRjOTAwNTAxYjNlMjRkN2NkZjQ2NjMzMjZhM2E4N2RmNWU0ODQzYjJjYmRiNjdjYmY2ZTQ2MGZlYzM1MGFhNTM3MWIxNTA4ZjlmNDUyOGVjZWEyM2M0MzZkOTRiNWU4ZmNkNGY2ODFlMzBhNmFjMDBhOTcwNGExODhhMDMKKworIyBOb3cgYW4gYWRkaXRpb25hbCB0ZXN0IHdpdGggdGhlIGRhdGEgZnJvbSB0ZXN0IDEgYnV0IHVzaW5nIGFuCisjIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5LgorVFNUOiAxMDI1CitTSzogIDlkNjFiMTlkZWZmZDVhNjBiYTg0NGFmNDkyZWMyY2M0NDQ0OWM1Njk3YjMyNjkxOTcwM2JhYzAzMWNhZTdmNjAKK1BLOiAgMDQ1NWQwZTA5YTJiOWQzNDI5MjI5N2UwOGQ2MGQwZjYyMGM1MTNkNDcyNTMxODdjMjRiMTI3ODZiZDc3NzY0NWNlMWE1MTA3Zjc2ODFhMDJhZjI1MjNhNmRhZjM3MmUxMGUzYTA3NjRjOWQzZmU0YmQ1YjcwYWIxODIwMTk4NWFkNworTVNHOgorU0lHOiBlNTU2NDMwMGMzNjBhYzcyOTA4NmUyY2M4MDZlODI4YTg0ODc3ZjFlYjhlNWQ5NzRkODczZTA2NTIyNDkwMTU1NWZiODgyMTU5MGEzM2JhY2M2MWUzOTcwMWNmOWI0NmJkMjViZjVmMDU5NWJiZTI0NjU1MTQxNDM4ZTdhMTAwYgpkaWZmIC0tZ2l0IGEvdGVzdHMvdC1rZGYuYyBiL3Rlc3RzL3Qta2RmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZTZjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Qta2RmLmMKQEAgLTAsMCArMSwxMDc5IEBACisvKiB0LWtkZi5jIC0gIEtERiByZWdyZXNzaW9uIHRlc3RzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiLi4vc3JjL2djcnlwdC1pbnQuaCIKKworI2lmbmRlZiBESU0KKyMgZGVmaW5lIERJTSh2KQkJICAgICAoc2l6ZW9mKHYpL3NpemVvZigodilbMF0pKQorI2VuZGlmCisKKy8qIFByb2dyYW0gb3B0aW9uIGZsYWdzLiAgKi8KK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXJyb3JfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQKK2RpZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX29wZW5wZ3AgKHZvaWQpCit7CisgIC8qIFRlc3QgdmVjdG9ycyBtYW51YWxseSBjcmVhdGVkIHdpdGggZ3BnIDEuNCBkZXJpdmVkIGNvZGU6IEluCisgICAgIHBhc3NwaHJhc2UuYzpoYXNoX3Bhc3NwaGFyc2UsIGFkZCB0aGlzIGNvZGUgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAgZnVuY3Rpb246CisKKyAgICAgICA9PT04PD09PQorICAgICAgIHByaW50ZiAoIntcbiIKKyAgICAgICAgICAgICAgICIgIFwiIik7CisgICAgICAgZm9yIChpPTA7IGkgPCBwd2xlbjsgaSsrKQorICAgICAgICAgeworICAgICAgICAgICBpZiAoaSAmJiAhKGklMTYpKQorICAgICAgICAgICAgIHByaW50ZiAoIlwiXG4gIFwiIik7CisgICAgICAgICAgIHByaW50ZiAoIlxceCUwMngiLCAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwdylbaV0pOworICAgICAgICAgfQorICAgICAgIHByaW50ZiAoIlwiLCAlZCxcbiIsIHB3bGVuKTsKKworICAgICAgIHByaW50ZiAoIiAgJXMsICVzLFxuIiwKKyAgICAgICAgICAgICAgIHMyay0+bW9kZSA9PSAwPyAiR0NSWV9LREZfU0lNUExFX1MySyI6CisgICAgICAgICAgICAgICBzMmstPm1vZGUgPT0gMT8gIkdDUllfS0RGX1NBTFRFRF9TMksiOgorICAgICAgICAgICAgICAgczJrLT5tb2RlID09IDM/ICJHQ1JZX0tERl9JVEVSU0FMVEVEX1MySyI6Ij8iLAorICAgICAgICAgICAgICAgczJrLT5oYXNoX2FsZ28gPT0gRElHRVNUX0FMR09fTUQ1ICAgPyAiR0NSWV9NRF9NRDUiIDoKKyAgICAgICAgICAgICAgIHMyay0+aGFzaF9hbGdvID09IERJR0VTVF9BTEdPX1NIQTEgID8gIkdDUllfTURfU0hBMSIgOgorICAgICAgICAgICAgICAgczJrLT5oYXNoX2FsZ28gPT0gRElHRVNUX0FMR09fUk1EMTYwPyAiR0NSWV9NRF9STUQxNjAiIDoKKyAgICAgICAgICAgICAgIHMyay0+aGFzaF9hbGdvID09IERJR0VTVF9BTEdPX1NIQTI1Nj8gIkdDUllfTURfU0hBMjU2IiA6CisgICAgICAgICAgICAgICBzMmstPmhhc2hfYWxnbyA9PSBESUdFU1RfQUxHT19TSEEzODQ/ICJHQ1JZX01EX1NIQTM4NCIgOgorICAgICAgICAgICAgICAgczJrLT5oYXNoX2FsZ28gPT0gRElHRVNUX0FMR09fU0hBNTEyPyAiR0NSWV9NRF9TSEE1MTIiIDoKKyAgICAgICAgICAgICAgIHMyay0+aGFzaF9hbGdvID09IERJR0VTVF9BTEdPX1NIQTIyND8gIkdDUllfTURfU0hBMjI0IiA6ICI/Iik7CisKKyAgICAgICBpZiAoczJrLT5tb2RlID09IDApCisgICAgICAgICBwcmludGYgKCIgIE5VTEwsIDAsXG4iKTsKKyAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIHByaW50ZiAoIiAgXCIiKTsKKyAgICAgICAgICAgZm9yIChpPTA7IGkgPCA4OyBpKyspCisgICAgICAgICAgICAgcHJpbnRmICgiXFx4JTAyeCIsICh1bnNpZ25lZCBpbnQpczJrLT5zYWx0W2ldKTsKKyAgICAgICAgICAgcHJpbnRmICgiXCIsICVkLFxuIiwgOCk7CisgICAgICAgICB9CisKKyAgICAgICBpZiAoczJrLT5tb2RlID09IDMpCisgICAgICAgICBwcmludGYgKCIgICVsdSxcbiIsICh1bnNpZ25lZCBsb25nKVMyS19ERUNPREVfQ09VTlQoczJrLT5jb3VudCkpOworICAgICAgIGVsc2UKKyAgICAgICAgIHByaW50ZiAoIiAgMCxcbiIpOworCisgICAgICAgcHJpbnRmICgiICAlZCxcbiIsIChpbnQpZGVrLT5rZXlsZW4pOworCisgICAgICAgcHJpbnRmICgiICBcIiIpOworICAgICAgIGZvciAoaT0wOyBpIDwgZGVrLT5rZXlsZW47IGkrKykKKyAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKGkgJiYgIShpJTE2KSkKKyAgICAgICAgICAgICBwcmludGYgKCJcIlxuICBcIiIpOworICAgICAgICAgICBwcmludGYgKCJcXHglMDJ4IiwgKCh1bnNpZ25lZCBjaGFyICopZGVrLT5rZXkpW2ldKTsKKyAgICAgICAgIH0KKyAgICAgICBwcmludGYgKCJcIlxufSxcbiIpOworICAgICAgID09PT44PT09CisKKyAgICAgVGhlbiBwcmVwYXJlIGEgZmlsZSB4LmlucCB3aXRoIHV0ZjggZW5jb2Rpbmc6CisKKyAgICAgICA9PT04PD09PQorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGEKKyAgICAgICAwIGFlcyAgICBtZDUgMTAyNCBhYgorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiYworICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2QKKyAgICAgICAwIGFlcyAgICBtZDUgMTAyNCBhYmNkZQorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2RlZgorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2RlZmcKKyAgICAgICAwIGFlcyAgICBtZDUgMTAyNCBhYmNkZWZnaAorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2RlZmdoaQorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2RlZmdoaWprbG1ubworICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IGFiY2RlZmdoaWprbG1ub3AKKyAgICAgICAwIGFlcyAgICBtZDUgMTAyNCBhYmNkZWZnaGlqa2xtbm9wcQorICAgICAgIDAgYWVzICAgIG1kNSAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgMCBhZXMgICAgbWQ1IDEwMjQgV2l0aF91dGY4X3VtbGF1dHM6w6TDvMOWw58KKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYQorICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYgorICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYmMKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZAorICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYmNkZQorICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYmNkZWYKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZworICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYmNkZWZnaAorICAgICAgIDAgYWVzICAgIHNoYTEgMTAyNCBhYmNkZWZnaGkKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpamtsbW5vCisgICAgICAgMCBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3AKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpamtsbW5vcHEKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpamtsbW5vcHFyCisgICAgICAgMCBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3BxcnMKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpamtsbW5vcHFyc3QKKyAgICAgICAwIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpamtsbW5vcHFyc3R1CisgICAgICAgMCBhZXMgICAgc2hhMSAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgMCBhZXMyNTYgc2hhMSAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgMCBhZXMgICAgc2hhMSAxMDI0IFdpdGhfdXRmOF91bWxhdXRzOsOkw7zDlsOfCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGEKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWIKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWJjCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2QKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWJjZGUKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmcKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2gKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQgYWJjZGVmZ2hpCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ubworICAgICAgIDMgYWVzICAgIHNoYTEgMTAyNCBhYmNkZWZnaGlqa2xtbm9wCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3BxCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3BxcgorICAgICAgIDMgYWVzICAgIHNoYTEgMTAyNCBhYmNkZWZnaGlqa2xtbm9wcXJzCisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3BxcnN0CisgICAgICAgMyBhZXMgICAgc2hhMSAxMDI0IGFiY2RlZmdoaWprbG1ub3BxcnN0dQorICAgICAgIDMgYWVzICAgIHNoYTEgMTAyNCBXaXRoX3V0ZjhfdW1sYXV0czrDpMO8w5bDnworICAgICAgIDMgYWVzICAgIHNoYTEgMTAyNCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgYWVzICAgIHNoYTEgMTAyNDAgTG9uZ19zZW50ZW5jZV91c2VkX2FzX3Bhc3NwaHJhc2UKKyAgICAgICAzIGFlcyAgICBzaGExIDEwMjQwMCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgYWVzMTkyIHNoYTEgMTAyNCBhCisgICAgICAgMyBhZXMxOTIgc2hhMSAxMDI0IGFiY2RlZmcKKyAgICAgICAzIGFlczE5MiBzaGExIDEwMjQgYWJjZGVmZ2hpCisgICAgICAgMyBhZXMxOTIgc2hhMSAxMDI0IGFiY2RlZmdoaQorICAgICAgIDMgYWVzMTkyIHNoYTEgMTAyNCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgYWVzMjU2IHNoYTEgMTAyNCBhCisgICAgICAgMyBhZXMyNTYgc2hhMSAxMDI0IGFiY2RlZmcKKyAgICAgICAzIGFlczI1NiBzaGExIDEwMjQgYWJjZGVmZ2hpCisgICAgICAgMyBhZXMyNTYgc2hhMSAxMDI0IGFiY2RlZmdoaQorICAgICAgIDMgYWVzMjU2IHNoYTEgMTAyNCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDAgYWVzICAgIHNoYTI1NiAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgMSBhZXMgICAgc2hhMjU2IDEwMjQgTG9uZ19zZW50ZW5jZV91c2VkX2FzX3Bhc3NwaHJhc2UKKyAgICAgICAzIGFlcyAgICBzaGEyNTYgMTAyNCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgYWVzICAgIHNoYTI1NiAxMDI0MCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgYWVzICAgIHNoYTM4NCAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgMyBhZXMgICAgc2hhNTEyIDEwMjQgTG9uZ19zZW50ZW5jZV91c2VkX2FzX3Bhc3NwaHJhc2UKKyAgICAgICAzIGFlczI1NiBzaGE1MTIgMTAyNCBMb25nX3NlbnRlbmNlX3VzZWRfYXNfcGFzc3BocmFzZQorICAgICAgIDMgM2RlcyAgIHNoYTUxMiAxMDI0IExvbmdfc2VudGVuY2VfdXNlZF9hc19wYXNzcGhyYXNlCisgICAgICAgPT09Pjg9PT0KKworICAgIGFuZCBmaW5hbGx5IHVzaW5nIGEgcHJvcGVyIHV0Zi04IGVuYWJsZWQgc2hlbGwsIHJ1bjoKKworICAgICAgIGNhdCB4LmlucCB8IHdoaWxlIHJlYWQgbW9kZSBjaXBoZXIgZGlnZXN0IGNvdW50IHBhc3MgZHVtbXk7IGRvIFwKKyAgICAgICAgIC4vZ3BnIDwvZGV2L251bGwgLW8gL2Rldi9udWxsIC1jICAtLXBhc3NwaHJhc2UgIiRwYXNzIiBcCisgICAgICAgICAgIC0tczJrLW1vZGUgJG1vZGUgLS1zMmstZGlnZXN0ICRkaWdlc3QgLS1zMmstY291bnQgJGNvdW50IFwKKyAgICAgICAgICAgLS1jaXBoZXItYWxnbyAkY2lwaGVyIDsgZG9uZSA+eC5vdXQKKyAgKi8KKyAgc3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqcDsgICAvKiBQYXNzcGhyYXNlLiAgKi8KKyAgICBzaXplX3QgcGxlbjsgICAgIC8qIExlbmd0aCBvZiBQLiAqLworICAgIGludCBhbGdvOworICAgIGludCBoYXNoYWxnbzsKKyAgICBjb25zdCBjaGFyICpzYWx0OworICAgIHNpemVfdCBzYWx0bGVuOworICAgIHVuc2lnbmVkIGxvbmcgYzsgLyogSXRlcmF0aW9ucy4gICovCisgICAgaW50IGRrbGVuOyAgICAgICAvKiBSZXF1ZXN0ZWQga2V5IGxlbmd0aC4gICovCisgICAgY29uc3QgY2hhciAqZGs7ICAvKiBEZXJpdmVkIGtleS4gICovCisgICAgaW50IGRpc2FibGVkOworICB9IHR2W10gPSB7CisgICAgeworICAgICAgIlx4NjEiLCAxLAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MGNceGMxXHg3NVx4YjlceGMwXHhmMVx4YjZceGE4XHgzMVx4YzNceDk5XHhlMlx4NjlceDc3XHgyNlx4NjEiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjIiLCAyLAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MThceDdlXHhmNFx4NDNceDYxXHgyMlx4ZDFceGNjXHgyZlx4NDBceGRjXHgyYlx4OTJceGYwXHhlYlx4YTAiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzIiwgMywKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfTUQ1LAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDkwXHgwMVx4NTBceDk4XHgzY1x4ZDJceDRmXHhiMFx4ZDZceDk2XHgzZlx4N2RceDI4XHhlMVx4N2ZceDcyIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjQiLCA0LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4ZTJceGZjXHg3MVx4NGNceDQ3XHgyN1x4ZWVceDkzXHg5NVx4ZjNceDI0XHhjZFx4MmVceDdmXHgzM1x4MWYiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjUiLCA1LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4YWJceDU2XHhiNFx4ZDlceDJiXHg0MFx4NzFceDNhXHhjY1x4NWFceGY4XHg5OVx4ODVceGQ0XHhiN1x4ODYiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2IiwgNiwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfTUQ1LAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceGU4XHgwYlx4NTBceDE3XHgwOVx4ODlceDUwXHhmY1x4NThceGFhXHhkOFx4M2NceDhjXHgxNFx4OTdceDhlIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjciLCA3LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4N2FceGM2XHg2Y1x4MGZceDE0XHg4ZFx4ZTlceDUxXHg5Ylx4OGJceGQyXHg2NFx4MzFceDJjXHg0ZFx4NjQiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjgiLCA4LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4ZThceGRjXHg0MFx4ODFceGIxXHgzNFx4MzRceGI0XHg1MVx4ODlceGE3XHgyMFx4YjdceDdiXHg2OFx4MTgiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5IiwgOSwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfTUQ1LAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDhhXHhhOVx4OWJceDFmXHg0M1x4OWZceGY3XHgxMlx4OTNceGU5XHg1M1x4NTdceGJhXHhjNlx4ZmRceDk0IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2ZiIsIDE1LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4OGFceDczXHgxOVx4ZGJceGY2XHg1NFx4NGFceDc0XHgyMlx4YzlceGUyXHg1NFx4NTJceDU4XHgwZVx4YTUiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmXHg3MCIsIDE2LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MWRceDY0XHhkY1x4ZTJceDM5XHhjNFx4NDNceDdiXHg3N1x4MzZceDA0XHgxZFx4YjBceDg5XHhlMVx4YjkiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmXHg3MCIKKyAgICAgICJceDcxIiwgMTcsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX01ENSwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMTYsCisgICAgICAiXHg5YVx4OGRceDk4XHg0NVx4YTZceGI0XHhkOFx4MmRceGZjXHhiMlx4YzJceGUzXHg1MVx4NjJceGM4XHgzMCIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfTUQ1LAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDM1XHgyYVx4ZjBceGZjXHhkZlx4ZTlceGJiXHg2Mlx4MTZceGZjXHg5OVx4OWRceDhkXHg1OFx4MDVceGNiIgorICAgIH0sCisgICAgeworICAgICAgIlx4NTdceDY5XHg3NFx4NjhceDVmXHg3NVx4NzRceDY2XHgzOFx4NWZceDc1XHg2ZFx4NmNceDYxXHg3NVx4NzQiCisgICAgICAiXHg3M1x4M2FceGMzXHhhNFx4YzNceGJjXHhjM1x4OTZceGMzXHg5ZiIsIDI2LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9NRDUsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MjFceGE0XHhlYlx4ZDhceGZkXHhmMFx4NTlceDI1XHhkMVx4MzJceDMxXHhkYlx4ZTdceGYyXHgxM1x4NWQiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MSIsIDEsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4ODZceGY3XHhlNFx4MzdceGZhXHhhNVx4YTdceGZjXHhlMVx4NWRceDFkXHhkY1x4YjlceGVhXHhlYVx4ZWEiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjIiLCAyLAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceGRhXHgyM1x4NjFceDRlXHgwMlx4NDZceDlhXHgwZFx4N2NceDdiXHhkMVx4YmRceGFiXHg1Y1x4OWNceDQ3IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2MyIsIDMsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4YTlceDk5XHgzZVx4MzZceDQ3XHgwNlx4ODFceDZhXHhiYVx4M2VceDI1XHg3MVx4NzhceDUwXHhjMlx4NmMiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NCIsIDQsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4ODFceGZlXHg4Ylx4ZmVceDg3XHg1N1x4NmNceDNlXHhjYlx4MjJceDQyXHg2Zlx4OGVceDU3XHg4NFx4NzMiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjUiLCA1LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDAzXHhkZVx4NmNceDU3XHgwYlx4ZmVceDI0XHhiZlx4YzNceDI4XHhjY1x4ZDdceGNhXHg0Nlx4YjdceDZlIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2NiIsIDYsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MWZceDhhXHhjMVx4MGZceDIzXHhjNVx4YjVceGJjXHgxMVx4NjdceGJkXHhhOFx4NGJceDgzXHgzZVx4NWMiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2NyIsIDcsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MmZceGI1XHhlMVx4MzRceDE5XHhmY1x4ODlceDI0XHg2OFx4NjVceGU3XHhhM1x4MjRceGY0XHg3Nlx4ZWMiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjgiLCA4LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDQyXHg1YVx4ZjFceDJhXHgwN1x4NDNceDUwXHgyYlx4MzJceDJlXHg5M1x4YTBceDE1XHhiY1x4ZjhceDY4IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OSIsIDksCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4YzZceDNiXHgxOVx4ZjFceGU0XHhjOFx4YjVceGY3XHg2Ylx4MjVceGM0XHg5Ylx4OGJceDg3XHhmNVx4N2QiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIiwgMTUsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICBOVUxMLCAwLAorICAgICAgMCwKKyAgICAgIDE2LAorICAgICAgIlx4MjlceDM4XHhkY1x4YzJceGUzXHhhYVx4NzdceDk4XHg3Y1x4N2VceDVkXHg0YVx4MGZceDI2XHg5Nlx4NjciCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmXHg3MCIsIDE2LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDE0XHhmM1x4OTlceDUyXHg4OFx4YWNceGQxXHg4OVx4ZTZceGU1XHgwYVx4N2FceGY0XHg3ZVx4ZTdceDA5IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MSIsIDE3LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceGQ4XHgzZFx4NjJceDFmXHhjZFx4MmRceDRkXHgyOVx4ODVceDU0XHg3MFx4NDNceGE3XHhhNVx4ZmRceDRkIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MVx4NzIiLCAxOCwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMTYsCisgICAgICAiXHhlM1x4ODFceGZlXHg0Mlx4YzVceDdlXHg0OFx4YTBceDgyXHgxN1x4ODZceDQxXHhlZlx4ZmRceDFjXHhiOSIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIgorICAgICAgIlx4NzFceDcyXHg3MyIsIDE5LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDg5XHgzZVx4NjlceGZmXHgwMVx4MDlceGYzXHg0NVx4OWNceDQyXHg0M1x4MDFceDNiXHgzZFx4ZThceGIxIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MVx4NzJceDczXHg3NCIsIDIwLAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceDE0XHhhMlx4M2FceGQ3XHgwZlx4MmFceDVkXHhkN1x4MjVceDU3XHg1ZFx4ZTZceGM0XHgzZVx4MWNceGRkIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MVx4NzJceDczXHg3NFx4NzUiLCAyMSwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMTYsCisgICAgICAiXHhlY1x4YTlceDg2XHhiOVx4NWRceDU4XHg3Zlx4MzRceGQ3XHgxY1x4YTdceDc1XHgyYVx4NGVceDAwXHgxMCIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMTYsCisgICAgICAiXHgzZVx4MWJceDlhXHg1MFx4N2RceDZlXHg5YVx4ZDhceDkzXHg2NFx4OTZceDdhXHgzZlx4Y2JceDI3XHgzZiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX1NJTVBMRV9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMzIsCisgICAgICAiXHgzZVx4MWJceDlhXHg1MFx4N2RceDZlXHg5YVx4ZDhceDkzXHg2NFx4OTZceDdhXHgzZlx4Y2JceDI3XHgzZiIKKyAgICAgICJceGMzXHg3Ylx4M2FceGIyXHhlZlx4NGRceDY4XHhhYVx4OWNceGQ3XHhlNFx4ODhceGVlXHhkMVx4NWVceDcwIgorICAgIH0sCisgICAgeworICAgICAgIlx4NTdceDY5XHg3NFx4NjhceDVmXHg3NVx4NzRceDY2XHgzOFx4NWZceDc1XHg2ZFx4NmNceDYxXHg3NVx4NzQiCisgICAgICAiXHg3M1x4M2FceGMzXHhhNFx4YzNceGJjXHhjM1x4OTZceGMzXHg5ZiIsIDI2LAorICAgICAgR0NSWV9LREZfU0lNUExFX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgTlVMTCwgMCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceGUwXHg0ZVx4MWVceGUzXHhhZFx4MGJceDQ5XHg3Y1x4N2FceDVmXHgzN1x4M2JceDRkXHg5MFx4M2NceDJlIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjEiLCAxLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDZkXHg0N1x4ZTNceDY4XHg1ZFx4MmNceDM2XHgxNiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHg0MVx4OWZceDQ4XHg2ZVx4YmZceGU2XHhkZFx4MDVceDlhXHg3Mlx4MjNceDE3XHg0NFx4ZDhceGQzXHhmMyIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2MiIsIDIsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4N2NceDM0XHg3OFx4ZmJceDI4XHgyZFx4MjVceGM3IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDBhXHg5ZFx4MDlceDA2XHg0M1x4M2RceDRmXHhmOVx4ODdceGQ2XHhmN1x4NDhceDkwXHhkZVx4ZDFceDFjIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2MyIsIDMsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4YzNceDE2XHgzN1x4MmVceDI3XHhmNlx4OWZceDZmIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceGY4XHgyN1x4YTBceDA3XHhjNlx4Y2JceGRkXHhmMVx4ZmVceDVjXHg4OFx4M2FceGZjXHhjZFx4ODRceDRkIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjQiLCA0LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceGYwXHgwY1x4NzNceDM4XHhiN1x4YzNceGQ1XHgxNCIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHg5Ylx4NWZceDI2XHhiYVx4NTJceDNiXHhjZFx4ZDlceGE1XHgyYVx4ZWZceDNjXHgwM1x4NGRceGQxXHg1MiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NSIsIDUsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4ZTFceDdkXHhhMlx4MzZceDA5XHg1OVx4ZWVceGM1IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDk0XHg5ZFx4NWJceDFhXHg1YVx4NjZceDhjXHhmYVx4OGZceDZmXHgyMlx4YWZceDhiXHg2MFx4OWZceGFmIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2NiIsIDYsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4YWZceGE3XHgwY1x4NjhceGRmXHg3ZVx4YWFceDI3IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceGU1XHgzOFx4ZjRceDM5XHg2Mlx4MjdceGNkXHhjY1x4OTFceDM3XHg3Zlx4MWJceGRjXHg1OFx4NjRceDI3IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjciLCA3LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDQwXHg1N1x4YjJceDlkXHg1Zlx4YmJceDExXHg0ZiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHhhZFx4YTJceDMzXHhkOVx4ZGRceGUwXHhmYlx4OTRceDhlXHhjY1x4ZWNceGNjXHhiM1x4YThceDNhXHg5ZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OCIsIDgsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4MzhceGY1XHg2NVx4YzVceDBmXHg4Y1x4MTlceDYxIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceGEwXHhiMFx4M2VceDI5XHg3Nlx4ZTZceDhmXHhhMFx4ZDhceDM0XHg4Zlx4YTRceDJkXHhmZFx4NjVceGVlIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OSIsIDksCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4YzNceGI3XHg5OVx4Y2NceGRhXHgyZFx4MDVceDdiIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDI3XHgyMVx4YzhceDk5XHg1Zlx4Y2ZceDIwXHhlYlx4ZjJceGQ5XHhmZlx4NmFceDY5XHhmZlx4YWRceGU4IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2ZiIsIDE1LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDdkXHhkOFx4NjhceDhhXHgxY1x4YzVceDQ3XHgyMiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHgwZlx4OTZceDdhXHgxMlx4MjNceDU0XHhmNlx4OTJceDYxXHg2N1x4MDdceGI0XHg2OFx4MTdceGI4XHhhYSIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIiwgMTYsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4OGFceDk1XHhkNFx4ODhceDBiXHhiOFx4ZTlceDlkIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceGNjXHhlNFx4YzhceDgyXHg1M1x4MzJceGYxXHg5M1x4NWFceDAwXHhkNFx4N2ZceGQ0XHg0Nlx4ZmFceDA3IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MSIsIDE3LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceGI1XHgyMlx4NDhceGE2XHhjNFx4YWRceDc0XHg2NyIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHgwY1x4ZTNceGUwXHhlZVx4M2RceDhmXHgzNVx4ZDJceDM1XHgxNFx4MTRceDI5XHgwY1x4ZjFceGUzXHgzNCIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIgorICAgICAgIlx4NzFceDcyIiwgMTgsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4YWNceDlmXHgwNFx4NjNceDgzXHgwZVx4M2NceDk1IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDQ5XHgwYVx4MDRceDY4XHhhOFx4MmFceDQzXHg2Zlx4YjlceDczXHg5NFx4YjRceDg1XHg5YVx4YWFceDBlIgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MVx4NzJceDczIiwgMTksCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4MDNceDZmXHg2MFx4MzBceDNhXHgxOVx4NjFceDBkIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDE1XHhlNVx4OWJceGJmXHgxY1x4ZjBceGJlXHg3NFx4OTVceDFhXHhiMlx4YzRceGRhXHgwOVx4Y2RceDk5IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCisgICAgICAiXHg3MVx4NzJceDczXHg3NCIsIDIwLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDUxXHg0MFx4YTVceDU3XHhmNVx4MjhceGZkXHgwMyIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHhhNlx4ZjJceDdlXHg2Ylx4MzBceDRkXHg4ZFx4NjdceGQ0XHhhMlx4N2ZceGEyXHg1N1x4MjdceGFiXHg5NiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIgorICAgICAgIlx4NzFceDcyXHg3M1x4NzRceDc1IiwgMjEsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4NGNceGYxXHgxMFx4MTFceDA0XHg3MFx4ZDNceDZlIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDJjXHg1MFx4NzlceDhkXHg4M1x4MjNceGFjXHhkNlx4MjJceDI5XHgzN1x4YWZceDE1XHgwZFx4ZGRceDhmIgorICAgIH0sCisgICAgeworICAgICAgIlx4NTdceDY5XHg3NFx4NjhceDVmXHg3NVx4NzRceDY2XHgzOFx4NWZceDc1XHg2ZFx4NmNceDYxXHg3NVx4NzQiCisgICAgICAiXHg3M1x4M2FceGMzXHhhNFx4YzNceGJjXHhjM1x4OTZceGMzXHg5ZiIsIDI2LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceGZlXHgzYVx4MjVceGNiXHg3OFx4ZWZceGUxXHgyMSIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHgyYVx4YjBceDUzXHgwOFx4ZjNceDJmXHhkNFx4NmVceGViXHgwMVx4NDlceDVkXHg4N1x4ZjZceDI3XHhmNiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICAiXHgwNFx4OTdceGQwXHgwMlx4NmFceDQ0XHgyZFx4ZGUiLCA4LAorICAgICAgMTAyNCwKKyAgICAgIDE2LAorICAgICAgIlx4NTdceGY1XHg3MFx4NDFceGEwXHg5Ylx4OGNceDA5XHhjYVx4NzRceGE5XHgyMlx4YTVceDgyXHgyZFx4MTciCisgICAgfSwKKyAgICB7CisgICAgICAiXHg0Y1x4NmZceDZlXHg2N1x4NWZceDczXHg2NVx4NmVceDc0XHg2NVx4NmVceDYzXHg2NVx4NWZceDc1XHg3MyIKKyAgICAgICJceDY1XHg2NFx4NWZceDYxXHg3M1x4NWZceDcwXHg2MVx4NzNceDczXHg3MFx4NjhceDcyXHg2MVx4NzNceDY1IiwgMzIsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4ZGRceGYzXHgzMVx4N2NceGNlXHhmNFx4ODFceDI2IiwgOCwKKyAgICAgIDEwMjQwLAorICAgICAgMTYsCisgICAgICAiXHhjM1x4ZGRceDAxXHg2ZFx4YWZceGY2XHg1OFx4YzhceGQ3XHg3OVx4YjRceDQwXHgwMFx4YjVceGU4XHgwYiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICAiXHg5NVx4ZDZceDcyXHg0ZVx4ZmJceGUxXHhjM1x4MWEiLCA4LAorICAgICAgMTAyNDAwLAorICAgICAgMTYsCisgICAgICAiXHhmMlx4M2ZceDM2XHg3Zlx4YjRceDZhXHhkMFx4M2FceDMxXHg5ZVx4NjVceDExXHg4ZVx4MmJceDk5XHg5YiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxIiwgMSwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICAiXHg2ZFx4NjlceDE1XHgxOFx4ZTRceDEzXHg0Mlx4ODIiLCA4LAorICAgICAgMTAyNCwKKyAgICAgIDI0LAorICAgICAgIlx4MjhceDBjXHg3ZVx4ZjJceDMxXHhmNlx4MWNceDZiXHg1Y1x4ZWZceDZhXHhkNVx4MjJceDY0XHg5N1x4OTEiCisgICAgICAiXHhlM1x4NWVceDM3XHhmZFx4NTBceGUyXHhmY1x4NmMiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2NyIsIDcsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4OWJceDc2XHg1ZVx4ODFceGRlXHgxM1x4ZGZceDE1IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAyNCwKKyAgICAgICJceDkxXHgxYlx4YTFceGMxXHg3Ylx4NGZceGMzXHhiMVx4ODBceDYxXHgyNlx4MDhceGJlXHg1M1x4ZTZceDUwIgorICAgICAgIlx4NDBceDZmXHgyOFx4ZWRceGM2XHhlNlx4NjdceDU1IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OSIsIDksCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4N2FceGFjXHhjY1x4NmVceDE1XHg1Nlx4YmRceGExIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAyNCwKKyAgICAgICJceGZhXHg3ZVx4MjBceDA3XHhiNlx4NDdceGIwXHgwOVx4NDZceGI4XHgzOFx4ZmJceGExXHhhZlx4ZjdceDc1IgorICAgICAgIlx4MmFceGZhXHg3N1x4MTRceDA2XHg1NFx4Y2JceDM0IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OSIsIDksCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4MWNceDY4XHhmOFx4ZmJceDk4XHhmN1x4OGNceDM5IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAyNCwKKyAgICAgICJceGNiXHgxZVx4ODZceGY1XHhlMFx4ZTRceGZiXHhiZlx4NzFceDM0XHg5OVx4MjRceGY0XHgzOVx4OGNceGMyIgorICAgICAgIlx4OGVceDI1XHgxY1x4NGNceDk2XHg0N1x4MjJceGU4IgorICAgIH0sCisgICAgeworICAgICAgIlx4NGNceDZmXHg2ZVx4NjdceDVmXHg3M1x4NjVceDZlXHg3NFx4NjVceDZlXHg2M1x4NjVceDVmXHg3NVx4NzMiCisgICAgICAiXHg2NVx4NjRceDVmXHg2MVx4NzNceDVmXHg3MFx4NjFceDczXHg3M1x4NzBceDY4XHg3Mlx4NjFceDczXHg2NSIsIDMyLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDEwXHhhOVx4NGVceGMxXHhhNVx4ZWNceDE3XHg1MiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMjQsCisgICAgICAiXHgwZlx4ODNceGEyXHg3N1x4OTJceGJiXHhlNFx4NThceDY4XHhjNVx4ZjJceDE0XHg2ZVx4NmVceDJlXHg2YiIKKyAgICAgICJceDk4XHgxN1x4NzBceDkyXHgwN1x4NDRceGUwXHg1MSIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxIiwgMSwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICAiXHhlZlx4OGZceDM3XHg2MVx4OGZceGFiXHhhZVx4NGYiLCA4LAorICAgICAgMTAyNCwKKyAgICAgIDMyLAorICAgICAgIlx4NmRceDY1XHhhZVx4ODZceDIzXHg5MVx4MzlceDk4XHhlY1x4MWNceDIzXHg0NFx4YjZceDBkXHhhZFx4MzIiCisgICAgICAiXHg1NFx4NDZceGM3XHgyM1x4MjZceGJiXHhkZlx4NGJceDU0XHg2ZVx4ZDRceGMyXHhmYVx4YzZceDE3XHgxNyIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3IiwgNywKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTEsCisgICAgICAiXHhhYVx4ZmJceGQ5XHgwNlx4N2RceDdjXHg0MFx4YWYiLCA4LAorICAgICAgMTAyNCwKKyAgICAgIDMyLAorICAgICAgIlx4N2RceDEwXHg1NFx4MTNceDNjXHg0M1x4N2FceGIzXHg1NFx4MWZceDM4XHhkNFx4OGZceDcwXHgwYVx4MDkiCisgICAgICAiXHhlMlx4ZmFceGFiXHg5N1x4OWFceDcwXHgxNlx4ZWZceDY2XHg2OFx4Y2FceDM0XHgyZVx4Y2VceGZhXHgxZiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjkiLCA5LAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMSwKKyAgICAgICJceDU4XHgwM1x4NGZceDU2XHg4Ylx4OTdceGQ0XHg5OCIsIDgsCisgICAgICAxMDI0LAorICAgICAgMzIsCisgICAgICAiXHhmN1x4NDBceGIxXHgyNVx4ODZceDBkXHgzNVx4OGZceDlmXHg5MVx4MmRceGNlXHgwNFx4ZWVceDVhXHgwNCIKKyAgICAgICJceDlkXHhiZFx4NDRceDIzXHg0Y1x4YTZceGJiXHhhYlx4YjBceGQwXHg1Nlx4ODJceGE5XHhkYVx4NDdceDE2IgorICAgIH0sCisgICAgeworICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OSIsIDksCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4NWRceDQxXHgzZFx4YTNceGE3XHhmY1x4NWRceDBjIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAzMiwKKyAgICAgICJceDRjXHg3YVx4ODZceGVkXHg4MVx4OGFceDk0XHg5OVx4N2RceDRhXHhjNFx4ZjdceDFjXHhmOFx4MDhceGRiIgorICAgICAgIlx4MDlceDM1XHhkOVx4YTNceDJkXHgyMlx4ZGVceDMyXHgyZFx4NzRceDM4XHhlNVx4YzhceGYyXHg1MFx4NmUiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg0Y1x4NmZceDZlXHg2N1x4NWZceDczXHg2NVx4NmVceDc0XHg2NVx4NmVceDYzXHg2NVx4NWZceDc1XHg3MyIKKyAgICAgICJceDY1XHg2NFx4NWZceDYxXHg3M1x4NWZceDcwXHg2MVx4NzNceDczXHg3MFx4NjhceDcyXHg2MVx4NzNceDY1IiwgMzIsCisgICAgICBHQ1JZX0tERl9JVEVSU0FMVEVEX1MySywgR0NSWV9NRF9TSEExLAorICAgICAgIlx4Y2FceGE3XHhkY1x4NTlceGNlXHgzMVx4ZTdceDQ5IiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAzMiwKKyAgICAgICJceDY3XHhlOVx4ZDZceDI5XHg0OVx4MWNceGI2XHhhMFx4ODVceGU4XHhmOVx4OGJceDg1XHg0N1x4M2FceDdlIgorICAgICAgIlx4YTdceGVlXHg4OVx4NTJceDZmXHgxOVx4MDBceDUzXHg5M1x4MDdceDBhXHg4Ylx4YjlceGE4XHg4Nlx4OTQiCisgICAgfSwKKyAgICB7CisgICAgICAiXHg0Y1x4NmZceDZlXHg2N1x4NWZceDczXHg2NVx4NmVceDc0XHg2NVx4NmVceDYzXHg2NVx4NWZceDc1XHg3MyIKKyAgICAgICJceDY1XHg2NFx4NWZceDYxXHg3M1x4NWZceDcwXHg2MVx4NzNceDczXHg3MFx4NjhceDcyXHg2MVx4NzNceDY1IiwgMzIsCisgICAgICBHQ1JZX0tERl9TSU1QTEVfUzJLLCBHQ1JZX01EX1NIQTI1NiwKKyAgICAgIE5VTEwsIDAsCisgICAgICAwLAorICAgICAgMTYsCisgICAgICAiXHg4OFx4MzZceDc4XHg2Ylx4ZDlceDVhXHg2Mlx4ZmZceDQ3XHhkM1x4ZmJceDc5XHhjOVx4MDhceDcwXHg1NiIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX1NBTFRFRF9TMkssIEdDUllfTURfU0hBMjU2LAorICAgICAgIlx4MDVceDhiXHhmZVx4MzFceGFhXHhmM1x4MjlceDExIiwgOCwKKyAgICAgIDAsCisgICAgICAxNiwKKyAgICAgICJceGIyXHg0Mlx4ZmVceDVlXHgwOVx4MDJceGQ5XHg2Mlx4YjlceDM1XHhmM1x4YThceDQzXHg4MFx4OWZceGIxIgorICAgIH0sCisgICAgeworICAgICAgIlx4NGNceDZmXHg2ZVx4NjdceDVmXHg3M1x4NjVceDZlXHg3NFx4NjVceDZlXHg2M1x4NjVceDVmXHg3NVx4NzMiCisgICAgICAiXHg2NVx4NjRceDVmXHg2MVx4NzNceDVmXHg3MFx4NjFceDczXHg3M1x4NzBceDY4XHg3Mlx4NjFceDczXHg2NSIsIDMyLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMjU2LAorICAgICAgIlx4ZDNceDRhXHhlYVx4YzlceDk3XHgxYlx4Y2NceDgzIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAxNiwKKyAgICAgICJceDM1XHgzN1x4OTlceDYyXHgwN1x4MjZceDY4XHgyM1x4MDVceDQ3XHhiMlx4YTBceDBiXHgyYlx4MmJceDhkIgorICAgIH0sCisgICAgeworICAgICAgIlx4NGNceDZmXHg2ZVx4NjdceDVmXHg3M1x4NjVceDZlXHg3NFx4NjVceDZlXHg2M1x4NjVceDVmXHg3NVx4NzMiCisgICAgICAiXHg2NVx4NjRceDVmXHg2MVx4NzNceDVmXHg3MFx4NjFceDczXHg3M1x4NzBceDY4XHg3Mlx4NjFceDczXHg2NSIsIDMyLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBMjU2LAorICAgICAgIlx4NWVceDcxXHhiZFx4MDBceDVmXHg5Nlx4YzRceDIzIiwgOCwKKyAgICAgIDEwMjQwLAorICAgICAgMTYsCisgICAgICAiXHhhMVx4NmFceGVlXHhiYVx4ZGVceDczXHgyNVx4MjVceGQxXHhhYlx4YTBceGM1XHg3ZVx4YzZceDM5XHhhNyIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTM4NCwKKyAgICAgICJceGMzXHgwOFx4ZWJceDE3XHg2Mlx4MDhceDg5XHhlZiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHg5Ylx4N2ZceDBjXHg4MVx4NmZceDcxXHg1OVx4OWJceGQ1XHhmNlx4YmZceDNhXHg4Nlx4MjBceDE2XHgzMyIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTUxMiwKKyAgICAgICJceGU2XHg3ZFx4MTNceDZiXHgzOVx4ZTNceDQ0XHgwNSIsIDgsCisgICAgICAxMDI0LAorICAgICAgMTYsCisgICAgICAiXHhjOFx4Y2RceDRiXHhhNFx4ZjNceGYxXHhkNVx4YjBceDU5XHgwNlx4ZjBceGJiXHg4OVx4MzRceDZhXHhhZCIKKyAgICB9LAorICAgIHsKKyAgICAgICJceDRjXHg2Zlx4NmVceDY3XHg1Zlx4NzNceDY1XHg2ZVx4NzRceDY1XHg2ZVx4NjNceDY1XHg1Zlx4NzVceDczIgorICAgICAgIlx4NjVceDY0XHg1Zlx4NjFceDczXHg1Zlx4NzBceDYxXHg3M1x4NzNceDcwXHg2OFx4NzJceDYxXHg3M1x4NjUiLCAzMiwKKyAgICAgIEdDUllfS0RGX0lURVJTQUxURURfUzJLLCBHQ1JZX01EX1NIQTUxMiwKKyAgICAgICJceGVkXHg3ZFx4MzBceDQ3XHhlNFx4YzNceGY4XHhiNiIsIDgsCisgICAgICAxMDI0LAorICAgICAgMzIsCisgICAgICAiXHg4OVx4N2FceGVmXHg3MFx4OTdceGU3XHgxMFx4ZGJceDc1XHhjY1x4MjBceDIyXHhhYlx4N2JceGYzXHgwNSIKKyAgICAgICJceDRiXHhiNlx4MmVceDE3XHgxMVx4OWZceGQ2XHhlYlx4YmZceGRmXHg0ZFx4NzBceDU5XHhmMFx4ZjlceGU1IgorICAgIH0sCisgICAgeworICAgICAgIlx4NGNceDZmXHg2ZVx4NjdceDVmXHg3M1x4NjVceDZlXHg3NFx4NjVceDZlXHg2M1x4NjVceDVmXHg3NVx4NzMiCisgICAgICAiXHg2NVx4NjRceDVmXHg2MVx4NzNceDVmXHg3MFx4NjFceDczXHg3M1x4NzBceDY4XHg3Mlx4NjFceDczXHg2NSIsIDMyLAorICAgICAgR0NSWV9LREZfSVRFUlNBTFRFRF9TMkssIEdDUllfTURfU0hBNTEyLAorICAgICAgIlx4YmJceDFhXHg0NVx4MzBceDY4XHg2Mlx4NmRceDYzIiwgOCwKKyAgICAgIDEwMjQsCisgICAgICAyNCwKKyAgICAgICJceGRlXHg1Y1x4YjhceGQ1XHg3NVx4ZjZceGFkXHg2OVx4NWJceGM5XHhmNlx4MmZceGJhXHhlYlx4ZmJceDM2IgorICAgICAgIlx4MzRceGYyXHhiOFx4ZWVceDNiXHgzN1x4MjFceGI3IgorICAgIH0KKyAgfTsKKyAgaW50IHR2aWR4OworICBncGdfZXJyb3JfdCBlcnI7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmWzMyXTsKKyAgaW50IGk7CisKKyAgZm9yICh0dmlkeD0wOyB0dmlkeCA8IERJTSh0dik7IHR2aWR4KyspCisgICAgeworICAgICAgaWYgKHR2W3R2aWR4XS5kaXNhYmxlZCkKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2hlY2tpbmcgUzJLIHRlc3QgdmVjdG9yICVkXG4iLCB0dmlkeCk7CisgICAgICBhc3NlcnQgKHR2W3R2aWR4XS5ka2xlbiA8PSBzaXplb2Ygb3V0YnVmKTsKKyAgICAgIGVyciA9IGdjcnlfa2RmX2Rlcml2ZSAodHZbdHZpZHhdLnAsIHR2W3R2aWR4XS5wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0uYWxnbywgdHZbdHZpZHhdLmhhc2hhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0uc2FsdCwgdHZbdHZpZHhdLnNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2W3R2aWR4XS5jLCB0dlt0dmlkeF0uZGtsZW4sIG91dGJ1Zik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgiczJrIHRlc3QgJWQgZmFpbGVkOiAlc1xuIiwgdHZpZHgsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlbHNlIGlmIChtZW1jbXAgKG91dGJ1ZiwgdHZbdHZpZHhdLmRrLCB0dlt0dmlkeF0uZGtsZW4pKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoInMyayB0ZXN0ICVkIGZhaWxlZDogbWlzbWF0Y2hcbiIsIHR2aWR4KTsKKyAgICAgICAgICBmcHV0cyAoImdvdDoiLCBzdGRlcnIpOworICAgICAgICAgIGZvciAoaT0wOyBpIDwgdHZbdHZpZHhdLmRrbGVuOyBpKyspCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgJTAyeCIsIG91dGJ1ZltpXSk7CisgICAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfcGJrZGYyICh2b2lkKQoreworICAvKiBUZXN0IHZlY3RvcnMgYXJlIGZyb20gUkZDLTYwNzAuICAqLworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpwOyAgIC8qIFBhc3NwaHJhc2UuICAqLworICAgIHNpemVfdCBwbGVuOyAgICAgLyogTGVuZ3RoIG9mIFAuICovCisgICAgY29uc3QgY2hhciAqc2FsdDsKKyAgICBzaXplX3Qgc2FsdGxlbjsKKyAgICB1bnNpZ25lZCBsb25nIGM7IC8qIEl0ZXJhdGlvbnMuICAqLworICAgIGludCBka2xlbjsgICAgICAgLyogUmVxdWVzdGVkIGtleSBsZW5ndGguICAqLworICAgIGNvbnN0IGNoYXIgKmRrOyAgLyogRGVyaXZlZCBrZXkuICAqLworICAgIGludCBkaXNhYmxlZDsKKyAgfSB0dltdID0geworICAgIHsKKyAgICAgICJwYXNzd29yZCIsIDgsCisgICAgICAic2FsdCIsIDQsCisgICAgICAxLAorICAgICAgMjAsCisgICAgICAiXHgwY1x4NjBceGM4XHgwZlx4OTZceDFmXHgwZVx4NzFceGYzXHhhOSIKKyAgICAgICJceGI1XHgyNFx4YWZceDYwXHgxMlx4MDZceDJmXHhlMFx4MzdceGE2IgorICAgIH0sCisgICAgeworICAgICAgInBhc3N3b3JkIiwgOCwKKyAgICAgICJzYWx0IiwgNCwKKyAgICAgIDIsCisgICAgICAyMCwKKyAgICAgICJceGVhXHg2Y1x4MDFceDRkXHhjN1x4MmRceDZmXHg4Y1x4Y2RceDFlIgorICAgICAgIlx4ZDlceDJhXHhjZVx4MWRceDQxXHhmMFx4ZDhceGRlXHg4OVx4NTciCisgICAgfSwKKyAgICB7CisgICAgICAicGFzc3dvcmQiLCA4LAorICAgICAgInNhbHQiLCA0LAorICAgICAgNDA5NiwKKyAgICAgIDIwLAorICAgICAgIlx4NGJceDAwXHg3OVx4MDFceGI3XHg2NVx4NDhceDlhXHhiZVx4YWQiCisgICAgICAiXHg0OVx4ZDlceDI2XHhmN1x4MjFceGQwXHg2NVx4YTRceDI5XHhjMSIKKyAgICB9LAorICAgIHsKKyAgICAgICJwYXNzd29yZCIsIDgsCisgICAgICAic2FsdCIsIDQsCisgICAgICAxNjc3NzIxNiwKKyAgICAgIDIwLAorICAgICAgIlx4ZWVceGZlXHgzZFx4NjFceGNkXHg0ZFx4YTRceGU0XHhlOVx4OTQiCisgICAgICAiXHg1Ylx4M2RceDZiXHhhMlx4MTVceDhjXHgyNlx4MzRceGU5XHg4NCIsCisgICAgICAxIC8qIFRoaXMgdGVzdCB0YWtlcyB0b28gbG9uZy4gICovCisgICAgfSwKKyAgICB7CisgICAgICAicGFzc3dvcmRQQVNTV09SRHBhc3N3b3JkIiwgMjQsCisgICAgICAic2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0IiwgMzYsCisgICAgICA0MDk2LAorICAgICAgMjUsCisgICAgICAiXHgzZFx4MmVceGVjXHg0Zlx4ZTRceDFjXHg4NFx4OWJceDgwXHhjOCIKKyAgICAgICJceGQ4XHgzNlx4NjJceGMwXHhlNFx4NGFceDhiXHgyOVx4MWFceDk2IgorICAgICAgIlx4NGNceGYyXHhmMFx4NzBceDM4IgorICAgIH0sCisgICAgeworICAgICAgInBhc3NcMHdvcmQiLCA5LAorICAgICAgInNhXDBsdCIsIDUsCisgICAgICA0MDk2LAorICAgICAgMTYsCisgICAgICAiXHg1Nlx4ZmFceDZhXHhhN1x4NTVceDQ4XHgwOVx4OWRceGNjXHgzNyIKKyAgICAgICJceGQ3XHhmMFx4MzRceDI1XHhlMFx4YzMiCisgICAgfSwKKyAgICB7IC8qIGVtcHR5IHBhc3N3b3JkIHRlc3QsIG5vdCBpbiBSRkMtNjA3MCAqLworICAgICAgIiIsIDAsCisgICAgICAic2FsdCIsIDQsCisgICAgICAyLAorICAgICAgMjAsCisgICAgICAiXHgxM1x4M2FceDRjXHhlOFx4MzdceGI0XHhkMlx4NTJceDFlXHhlMiIKKyAgICAgICJceGJmXHgwM1x4ZTFceDFjXHg3MVx4Y2FceDc5XHg0ZVx4MDdceDk3IgorICAgIH0KKyAgfTsKKyAgaW50IHR2aWR4OworICBncGdfZXJyb3JfdCBlcnI7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmWzMyXTsKKyAgaW50IGk7CisKKyAgZm9yICh0dmlkeD0wOyB0dmlkeCA8IERJTSh0dik7IHR2aWR4KyspCisgICAgeworICAgICAgaWYgKHR2W3R2aWR4XS5kaXNhYmxlZCkKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2hlY2tpbmcgUEJLREYyIHRlc3QgdmVjdG9yICVkXG4iLCB0dmlkeCk7CisgICAgICBhc3NlcnQgKHR2W3R2aWR4XS5ka2xlbiA8PSBzaXplb2Ygb3V0YnVmKTsKKyAgICAgIGVyciA9IGdjcnlfa2RmX2Rlcml2ZSAodHZbdHZpZHhdLnAsIHR2W3R2aWR4XS5wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1JZX0tERl9QQktERjIsIEdDUllfTURfU0hBMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLnNhbHQsIHR2W3R2aWR4XS5zYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0uYywgdHZbdHZpZHhdLmRrbGVuLCBvdXRidWYpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoInBia2RmMiB0ZXN0ICVkIGZhaWxlZDogJXNcbiIsIHR2aWR4LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZWxzZSBpZiAobWVtY21wIChvdXRidWYsIHR2W3R2aWR4XS5kaywgdHZbdHZpZHhdLmRrbGVuKSkKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJwYmtkZjIgdGVzdCAlZCBmYWlsZWQ6IG1pc21hdGNoXG4iLCB0dmlkeCk7CisgICAgICAgICAgZnB1dHMgKCJnb3Q6Iiwgc3RkZXJyKTsKKyAgICAgICAgICBmb3IgKGk9MDsgaSA8IHR2W3R2aWR4XS5ka2xlbjsgaSsrKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICUwMngiLCBvdXRidWZbaV0pOworICAgICAgICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3NjcnlwdCAodm9pZCkKK3sKKyAgLyogVGVzdCB2ZWN0b3JzIGFyZSBmcm9tIGRyYWZ0LWpvc2Vmc3Nvbi1zY3J5cHQta2RmLTAxLiAgKi8KKyAgc3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqcDsgICAgICAgIC8qIFBhc3NwaHJhc2UuICAqLworICAgIHNpemVfdCBwbGVuOyAgICAgICAgICAvKiBMZW5ndGggb2YgUC4gKi8KKyAgICBjb25zdCBjaGFyICpzYWx0OworICAgIHNpemVfdCBzYWx0bGVuOworICAgIGludCBwYXJtX247ICAgICAgICAgICAvKiBDUFUvbWVtb3J5IGNvc3QuICAqLworICAgIGludCBwYXJtX3I7ICAgICAgICAgICAvKiBibG9ja3NpemUgKi8KKyAgICB1bnNpZ25lZCBsb25nIHBhcm1fcDsgLyogcGFyYWxsZWxpemF0aW9uLiAqLworICAgIGludCBka2xlbjsgICAgICAgICAgICAvKiBSZXF1ZXN0ZWQga2V5IGxlbmd0aC4gICovCisgICAgY29uc3QgY2hhciAqZGs7ICAgICAgIC8qIERlcml2ZWQga2V5LiAgKi8KKyAgICBpbnQgZGlzYWJsZWQ7CisgIH0gdHZbXSA9IHsKKyAgICB7CisgICAgICAiIiwgMCwKKyAgICAgICIiLCAwLAorICAgICAgMTYsCisgICAgICAxLAorICAgICAgMSwKKyAgICAgIDY0LAorICAgICAgIlx4NzdceGQ2XHg1N1x4NjJceDM4XHg2NVx4N2JceDIwXHgzYlx4MTlceGNhXHg0Mlx4YzFceDhhXHgwNFx4OTciCisgICAgICAiXHhmMVx4NmJceDQ4XHg0NFx4ZTNceDA3XHg0YVx4ZThceGRmXHhkZlx4ZmFceDNmXHhlZFx4ZTJceDE0XHg0MiIKKyAgICAgICJceGZjXHhkMFx4MDZceDlkXHhlZFx4MDlceDQ4XHhmOFx4MzJceDZhXHg3NVx4M2FceDBmXHhjOFx4MWZceDE3IgorICAgICAgIlx4ZThceGQzXHhlMFx4ZmJceDJlXHgwZFx4MzZceDI4XHhjZlx4MzVceGUyXHgwY1x4MzhceGQxXHg4OVx4MDYiCisgICAgfSwKKyAgICB7CisgICAgICAicGFzc3dvcmQiLCA4LAorICAgICAgIk5hQ2wiLCA0LAorICAgICAgMTAyNCwKKyAgICAgIDgsCisgICAgICAxNiwKKyAgICAgIDY0LAorICAgICAgIlx4ZmRceGJhXHhiZVx4MWNceDlkXHgzNFx4NzJceDAwXHg3OFx4NTZceGU3XHgxOVx4MGRceDAxXHhlOVx4ZmUiCisgICAgICAiXHg3Y1x4NmFceGQ3XHhjYlx4YzhceDIzXHg3OFx4MzBceGU3XHg3M1x4NzZceDYzXHg0Ylx4MzdceDMxXHg2MiIKKyAgICAgICJceDJlXHhhZlx4MzBceGQ5XHgyZVx4MjJceGEzXHg4OFx4NmZceGYxXHgwOVx4MjdceDlkXHg5OFx4MzBceGRhIgorICAgICAgIlx4YzdceDI3XHhhZlx4YjlceDRhXHg4M1x4ZWVceDZkXHg4M1x4NjBceGNiXHhkZlx4YTJceGNjXHgwNlx4NDAiCisgICAgfSwKKyAgICB7CisgICAgICAicGxlYXNlbGV0bWVpbiIsIDEzLAorICAgICAgIlNvZGl1bUNobG9yaWRlIiwgMTQsCisgICAgICAxNjM4NCwKKyAgICAgIDgsCisgICAgICAxLAorICAgICAgNjQsCisgICAgICAiXHg3MFx4MjNceGJkXHhjYlx4M2FceGZkXHg3M1x4NDhceDQ2XHgxY1x4MDZceGNkXHg4MVx4ZmRceDM4XHhlYiIKKyAgICAgICJceGZkXHhhOFx4ZmJceGJhXHg5MFx4NGZceDhlXHgzZVx4YTlceGI1XHg0M1x4ZjZceDU0XHg1ZFx4YTFceGYyIgorICAgICAgIlx4ZDVceDQzXHgyOVx4NTVceDYxXHgzZlx4MGZceGNmXHg2Mlx4ZDRceDk3XHgwNVx4MjRceDJhXHg5YVx4ZjkiCisgICAgICAiXHhlNlx4MWVceDg1XHhkY1x4MGRceDY1XHgxZVx4NDBceGRmXHhjZlx4MDFceDdiXHg0NVx4NTdceDU4XHg4NyIKKyAgICB9LAorICAgIHsKKyAgICAgICJwbGVhc2VsZXRtZWluIiwgMTMsCisgICAgICAiU29kaXVtQ2hsb3JpZGUiLCAxNCwKKyAgICAgIDEwNDg1NzYsCisgICAgICA4LAorICAgICAgMSwKKyAgICAgIDY0LAorICAgICAgIlx4MjFceDAxXHhjYlx4OWJceDZhXHg1MVx4MWFceGFlXHhhZFx4ZGJceGJlXHgwOVx4Y2ZceDcwXHhmOFx4ODEiCisgICAgICAiXHhlY1x4NTZceDhkXHg1N1x4NGFceDJmXHhmZFx4NGRceGFiXHhlNVx4ZWVceDk4XHgyMFx4YWRceGFhXHg0NyIKKyAgICAgICJceDhlXHg1Nlx4ZmRceDhmXHg0Ylx4YTVceGQwXHg5Zlx4ZmFceDFjXHg2ZFx4OTJceDdjXHg0MFx4ZjRceGMzIgorICAgICAgIlx4MzdceDMwXHg0MFx4NDlceGU4XHhhOVx4NTJceGZiXHhjYlx4ZjRceDVjXHg2Zlx4YTdceDdhXHg0MVx4YTQiLAorICAgICAgMiAvKiBPbmx5IGluIGRlYnVnIG1vZGUuICAqLworICAgIH0KKyAgfTsKKyAgaW50IHR2aWR4OworICBncGdfZXJyb3JfdCBlcnI7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmWzY0XTsKKyAgaW50IGk7CisKKyAgZm9yICh0dmlkeD0wOyB0dmlkeCA8IERJTSh0dik7IHR2aWR4KyspCisgICAgeworICAgICAgaWYgKHR2W3R2aWR4XS5kaXNhYmxlZCAmJiAhKHR2W3R2aWR4XS5kaXNhYmxlZCA9PSAyICYmIGRlYnVnKSkKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY2hlY2tpbmcgU0NSWVBUIHRlc3QgdmVjdG9yICVkXG4iLCB0dmlkeCk7CisgICAgICBhc3NlcnQgKHR2W3R2aWR4XS5ka2xlbiA8PSBzaXplb2Ygb3V0YnVmKTsKKyAgICAgIGVyciA9IGdjcnlfa2RmX2Rlcml2ZSAodHZbdHZpZHhdLnAsIHR2W3R2aWR4XS5wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0ucGFybV9yID09IDEgPyA0MSA6IEdDUllfS0RGX1NDUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLnBhcm1fbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZbdHZpZHhdLnNhbHQsIHR2W3R2aWR4XS5zYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dlt0dmlkeF0ucGFybV9wLCB0dlt0dmlkeF0uZGtsZW4sIG91dGJ1Zik7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgic2NyeXB0IHRlc3QgJWQgZmFpbGVkOiAlc1xuIiwgdHZpZHgsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlbHNlIGlmIChtZW1jbXAgKG91dGJ1ZiwgdHZbdHZpZHhdLmRrLCB0dlt0dmlkeF0uZGtsZW4pKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoInNjcnlwdCB0ZXN0ICVkIGZhaWxlZDogbWlzbWF0Y2hcbiIsIHR2aWR4KTsKKyAgICAgICAgICBmcHV0cyAoImdvdDoiLCBzdGRlcnIpOworICAgICAgICAgIGZvciAoaT0wOyBpIDwgdHZbdHZpZHhdLmRrbGVuOyBpKyspCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgJTAyeCIsIG91dGJ1ZltpXSk7CisgICAgICAgICAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLXZlcmJvc2UiKSkKKyAgICB2ZXJib3NlID0gMTsKKyAgZWxzZSBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSkKKyAgICB2ZXJib3NlID0gZGVidWcgPSAxOworCisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfREVCVUdfRkxBR1MsIDF1LCAwKTsKKworICBjaGVja19vcGVucGdwICgpOworICBjaGVja19wYmtkZjIgKCk7CisgIGNoZWNrX3NjcnlwdCAoKTsKKworICByZXR1cm4gZXJyb3JfY291bnQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3QtbG9jay5jIGIvdGVzdHMvdC1sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3MGYzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3QtbG9jay5jCkBAIC0wLDAgKzEsNDYzIEBACisvKiB0LWxvY2suYyAtIENoZWNrIHRoZSBsb2NrIGZ1bmN0aW9ucworICogQ29weXJpZ2h0IChDKSAyMDE0IGcxMCBDb2RlIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZiBVU0VfUE9TSVhfVEhSRUFEUworIyBpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2RlZmluZSBQR00gInQtbG9jayIKKworI2luY2x1ZGUgInQtY29tbW9uLmgiCisKKy8qIE1pbmd3IHJlcXVpcmVzIHVzIHRvIGluY2x1ZGUgd2luZG93cy5oIGFmdGVyIHdpbnNvY2syLmggd2hpY2ggaXMKKyAgIGluY2x1ZGVkIGJ5IGdjcnlwdC5oLiAgKi8KKyNpZmRlZiBfV0lOMzIKKyMgaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgZGVmaW5lIFRIUkVBRF9SRVRfVFlQRSAgRFdPUkQgV0lOQVBJCisjIGRlZmluZSBUSFJFQURfUkVUX1ZBTFVFIDAKKyNlbHNlCisjIGRlZmluZSBUSFJFQURfUkVUX1RZUEUgIHZvaWQgKgorIyBkZWZpbmUgVEhSRUFEX1JFVF9WQUxVRSBOVUxMCisjZW5kaWYKKworI2RlZmluZSBQUklWX0NUTF9FWFRFUk5BTF9MT0NLX1RFU1QgICA2MQorI2RlZmluZSBFWFRFUk5BTF9MT0NLX1RFU1RfSU5JVCAgICAgICAzMDExMQorI2RlZmluZSBFWFRFUk5BTF9MT0NLX1RFU1RfTE9DSyAgICAgICAzMDExMgorI2RlZmluZSBFWFRFUk5BTF9MT0NLX1RFU1RfVU5MT0NLICAgICAzMDExMworI2RlZmluZSBFWFRFUk5BTF9MT0NLX1RFU1RfREVTVFJPWSAgICAzMDExNAorCisKKy8qIE51bWJlciBvZiB0aHJlYWRzIHRvIHJ1bi4gICovCisjZGVmaW5lIE5fTk9OQ0VfVEhSRUFEUyA4CisvKiBOdW1iZXIgb2YgaW50ZXJhdGlvbnMuICAqLworI2RlZmluZSBOX05PTkNFX0lURVJBVElPTlMgMTAwMAorLyogUmVxdWVzdGVkIG5vbmNlIHNpemUuICAqLworI2RlZmluZSBOT05DRV9TSVpFICAxMQorCisKKy8qIFRoaXMgdGVzdHMgd29ya3MgYnkgaGF2aW5nIGEgYSBjb3VwbGUgb2YgYWNjb3VudGFudCB0aHJlYWRzIHdoaWNoIGRvCisgICByYW5kb20gdHJhbnNhY3Rpb25zIGJldHdlZW4gYWNjb3VudHMgYW5kIGEgcmV2aXNpb24gdGhyZWFkcyB3aGljaAorICAgY2hlY2tzIHRoYXQgdGhlIGJhbGFuY2Ugb2YgYWxsIGFjY291bnRzIGlzIGludmFyaWFudC4gIFRoZSBpZGVhIGZvcgorICAgdGhpcyBjaGVjayBpcyBkdWUgdG8gQnJ1bm8gSGFpYmxlLiAgKi8KKyNkZWZpbmUgTl9BQ0NPVU5UIDgKKyNkZWZpbmUgQUNDT1VOVF9WQUxVRSA0Mgorc3RhdGljIGludCBhY2NvdW50W05fQUNDT1VOVF07CisKKy8qIE51bWJlciBvZiB0cmFuc2FjdGlvbnMgZG9uZSBieSBlYWNoIGFjY291bnRhbnQuICAqLworI2RlZmluZSBOX1RSQU5TQUNUSU9OUyAxMDAwCisKKy8qIE51bWJlciBvZiBhY2NvdW50YW50cyB0byBydW4uICAqLworI2RlZmluZSBOX0FDQ09VTlRBTlRTIDUKKworLyogTWF4aW11bSB0cmFuc2FjdGlvbiB2YWx1ZS4gIEEgcXVpdGUgbG93IHZhbHVlIGlzIHVzZWQgc28gdGhhdCB3ZQorICAgd291bGQgZ2V0IGFuIGludGVnZXIgb3ZlcmZsb3cuICAqLworI2RlZmluZSBNQVhfVFJBTlNBQ1RJT05fVkFMVUUgNTAKKworLyogRmxhZyB0byB0ZWxsIHRoZSByZXZpc2lvbiB0aHJlYWQgdG8gZmluaXNoLiAgKi8KK3N0YXRpYyB2b2xhdGlsZSBpbnQgc3RvcF9yZXZpc2lvbl90aHJlYWQ7CisKKworc3RydWN0IHRocmVhZF9hcmdfcworeworICBpbnQgbm87Cit9OworCisKKworDAorLyogV3JhcHBlciBmdW5jdGlvbnMgdG8gYWNjZXNzIExpYmdjcnlwdCdzIGludGVybmFsIHRlc3QgbG9jay4gICovCitzdGF0aWMgdm9pZAorZXh0ZXJuYWxfbG9ja190ZXN0X2luaXQgKGludCBsaW5lKQoreworICBncGdfZXJyb3JfdCBlcnI7CisKKyAgZXJyID0gZ2NyeV9jb250cm9sIChQUklWX0NUTF9FWFRFUk5BTF9MT0NLX1RFU1QsIEVYVEVSTkFMX0xPQ0tfVEVTVF9JTklUKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgiaW5pdCBsb2NrIGZhaWxlZCBhdCAlZDogJXMiLCBsaW5lLCBncGdfc3RyZXJyb3IgKGVycikpOworfQorCitzdGF0aWMgdm9pZAorZXh0ZXJuYWxfbG9ja190ZXN0X2xvY2sgKGludCBsaW5lKQoreworICBncGdfZXJyb3JfdCBlcnI7CisKKyAgZXJyID0gZ2NyeV9jb250cm9sIChQUklWX0NUTF9FWFRFUk5BTF9MT0NLX1RFU1QsIEVYVEVSTkFMX0xPQ0tfVEVTVF9MT0NLKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgidGFraW5nIGxvY2sgZmFpbGVkIGF0ICVkOiAlcyIsIGxpbmUsIGdwZ19zdHJlcnJvciAoZXJyKSk7Cit9CisKK3N0YXRpYyB2b2lkCitleHRlcm5hbF9sb2NrX3Rlc3RfdW5sb2NrIChpbnQgbGluZSkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworCisgIGVyciA9IGdjcnlfY29udHJvbCAoUFJJVl9DVExfRVhURVJOQUxfTE9DS19URVNULCBFWFRFUk5BTF9MT0NLX1RFU1RfVU5MT0NLKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgicmVsZWFzaW5nIGxvY2sgZmFpbGVkIGF0ICVkOiAlcyIsIGxpbmUsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKK30KKworc3RhdGljIHZvaWQKK2V4dGVybmFsX2xvY2tfdGVzdF9kZXN0cm95IChpbnQgbGluZSkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworCisgIGVyciA9IGdjcnlfY29udHJvbCAoUFJJVl9DVExfRVhURVJOQUxfTE9DS19URVNULCBFWFRFUk5BTF9MT0NLX1RFU1RfREVTVFJPWSk7CisgIGlmIChlcnIpCisgICAgZmFpbCAoImRlc3Ryb3lpbmcgbG9jayBmYWlsZWQgYXQgJWQ6ICVzIiwgbGluZSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKK30KKworCisKKwwKKy8qIFRoZSBub25jZSB0aHJlYWQuICBXZSBzaW1wbHkgcmVxdWVzdCBhIGNvdXBsZSBvZiBub25jZXMgYW5kCisgICByZXR1cm4uICAqLworc3RhdGljIFRIUkVBRF9SRVRfVFlQRQorbm9uY2VfdGhyZWFkICh2b2lkICphcmdhcmcpCit7CisgIHN0cnVjdCB0aHJlYWRfYXJnX3MgKmFyZyA9IGFyZ2FyZzsKKyAgaW50IGk7CisgIGNoYXIgbm9uY2VbTk9OQ0VfU0laRV07CisKKyAgZm9yIChpID0gMDsgaSA8IE5fTk9OQ0VfSVRFUkFUSU9OUzsgaSsrKQorICAgIHsKKyAgICAgIGdjcnlfY3JlYXRlX25vbmNlIChub25jZSwgc2l6ZW9mIG5vbmNlKTsKKyAgICAgIGlmIChpICYmICEoaSUxMDApKQorICAgICAgICBzaG93ICgidGhyZWFkICVkIGNyZWF0ZWQgJWQgbm9uY2VzIHNvIGZhciIsIGFyZy0+bm8sIGkpOworICAgIH0KKworICBnY3J5X2ZyZWUgKGFyZyk7CisgIHJldHVybiBUSFJFQURfUkVUX1ZBTFVFOworfQorCisKKy8qIFRvIGNoZWNrIG91ciBsb2NraW5nIGZ1bmN0aW9uIHdlIHJ1biBzZXZlcmFsIHRocmVhZHMgYWxsIGFjY2Vzc2luZworICAgdGhlIG5vbmNlIGZ1bmN0aW9ucy4gIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB3ZSBrbm93IHRoYXQgdGhlcmUKKyAgIGFyZSBubyBvYnZpb3VzIGRlYWRsb2NrcyBvciBmYWlsZWQgbG9jayBpbml0aWFsaXphdGlvbi4gICovCitzdGF0aWMgdm9pZAorY2hlY2tfbm9uY2VfbG9jayAodm9pZCkKK3sKKyAgc3RydWN0IHRocmVhZF9hcmdfcyAqYXJnOworI2lmZGVmIF9XSU4zMgorICBIQU5ETEUgdGhyZWFkc1tOX05PTkNFX1RIUkVBRFNdOworICBpbnQgaTsKKyAgaW50IHJjOworCisgIGZvciAoaT0wOyBpIDwgTl9OT05DRV9USFJFQURTOyBpKyspCisgICAgeworICAgICAgYXJnID0gZ2NyeV94bWFsbG9jIChzaXplb2YgKmFyZyk7CisgICAgICBhcmctPm5vID0gaTsKKyAgICAgIHRocmVhZHNbaV0gPSBDcmVhdGVUaHJlYWQgKE5VTEwsIDAsIG5vbmNlX3RocmVhZCwgYXJnLCAwLCBOVUxMKTsKKyAgICAgIGlmICghdGhyZWFkc1tpXSkKKyAgICAgICAgZGllICgiZXJyb3IgY3JlYXRpbmcgbm9uY2UgdGhyZWFkICVkOiByYz0lZCIsCisgICAgICAgICAgICAgaSwgKGludClHZXRMYXN0RXJyb3IgKCkpOworICAgIH0KKworICBmb3IgKGk9MDsgaSA8IE5fTk9OQ0VfVEhSRUFEUzsgaSsrKQorICAgIHsKKyAgICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdCAodGhyZWFkc1tpXSwgSU5GSU5JVEUpOworICAgICAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApCisgICAgICAgIHNob3cgKCJub25jZSB0aHJlYWQgJWQgaGFzIHRlcm1pbmF0ZWQiLCBpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbCAoIndhaXRpbmcgZm9yIG5vbmNlIHRocmVhZCAlZCBmYWlsZWQ6ICVkIiwKKyAgICAgICAgICAgICAgaSwgKGludClHZXRMYXN0RXJyb3IgKCkpOworICAgICAgQ2xvc2VIYW5kbGUgKHRocmVhZHNbaV0pOworICAgIH0KKworI2VsaWYgVVNFX1BPU0lYX1RIUkVBRFMKKyAgcHRocmVhZF90IHRocmVhZHNbTl9OT05DRV9USFJFQURTXTsKKyAgaW50IHJjLCBpOworCisgIGZvciAoaT0wOyBpIDwgTl9OT05DRV9USFJFQURTOyBpKyspCisgICAgeworICAgICAgYXJnID0gZ2NyeV94bWFsbG9jIChzaXplb2YgKmFyZyk7CisgICAgICBhcmctPm5vID0gaTsKKyAgICAgIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkc1tpXSwgTlVMTCwgbm9uY2VfdGhyZWFkLCBhcmcpOworICAgIH0KKworICBmb3IgKGk9MDsgaSA8IE5fTk9OQ0VfVEhSRUFEUzsgaSsrKQorICAgIHsKKyAgICAgIHJjID0gcHRocmVhZF9qb2luICh0aHJlYWRzW2ldLCBOVUxMKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZmFpbCAoInB0aHJlYWRfam9pbiBmYWlsZWQgZm9yIG5vbmNlIHRocmVhZCAlZDogJXMiLAorICAgICAgICAgICAgICBpLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2hvdyAoIm5vbmNlIHRocmVhZCAlZCBoYXMgdGVybWluYXRlZCIsIGkpOworICAgIH0KKworI2VuZGlmIC8qIV9XSU4zMiovCit9CisKKworLyogSW5pdGlhbHplIGFsbCBhY2NvdW50cy4gICovCitzdGF0aWMgdm9pZAoraW5pdF9hY2NvdW50cyAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpPTA7IGkgPCBOX0FDQ09VTlQ7IGkrKykKKyAgICBhY2NvdW50W2ldID0gQUNDT1VOVF9WQUxVRTsKK30KKworCisvKiBDaGVjayB0aGF0IHRoZSBzdW0gb2YgYWxsIGFjY291bnRzIG1hdGNoZXMgdGhlIGludGlhbCBzdW0uICAqLworc3RhdGljIHZvaWQKK2NoZWNrX2FjY291bnRzICh2b2lkKQoreworICBpbnQgaSwgc3VtOworCisgIHN1bSA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOX0FDQ09VTlQ7IGkrKykKKyAgICBzdW0gKz0gYWNjb3VudFtpXTsKKyAgaWYgKHN1bSAhPSBOX0FDQ09VTlQgKiBBQ0NPVU5UX1ZBTFVFKQorICAgIGRpZSAoImFjY291bnRzIG91dCBvZiBiYWxhbmNlIik7Cit9CisKKworc3RhdGljIHZvaWQKK3ByaW50X2FjY291bnRzICh2b2lkKQoreworICBpbnQgaTsKKworICBmb3IgKGk9MDsgaSA8IE5fQUNDT1VOVDsgaSsrKQorICAgIHByaW50ZiAoImFjY291bnQgJWQ6ICU2ZFxuIiwgaSwgYWNjb3VudFtpXSk7Cit9CisKKworLyogR2V0IGEgYSByYW5kb20gaW50ZWdlciB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCB0byBISUdILiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldF9yYW5kIChpbnQgaGlnaCkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKDErKGludCkoKGRvdWJsZSkoaGlnaCsxKSpyYW5kICgpLyhSQU5EX01BWCsxLjApKSkgLSAxOworfQorCisKKy8qIFBpY2sgYSByYW5kb20gYWNjb3VudC4gIE5vdGUgdGhhdCB0aGlzIGZ1Y250aW9uIGlzIG5vdAorICAgdGhyZWFkLXNhZmUuICovCitzdGF0aWMgaW50CitwaWNrX2FjY291bnQgKHZvaWQpCit7CisgIHJldHVybiBnZXRfcmFuZCAoTl9BQ0NPVU5UIC0gMSk7Cit9CisKKworLyogUGljayBhIHJhbmRvbSB2YWx1ZSBmb3IgYSB0cmFuc2FjdGlvbi4gIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLiAgKi8KK3N0YXRpYyBpbnQKK3BpY2tfdmFsdWUgKHZvaWQpCit7CisgIHJldHVybiBnZXRfcmFuZCAoTUFYX1RSQU5TQUNUSU9OX1ZBTFVFKTsKK30KKworCisvKiBUaGlzIGlzIHRoZSByZXZpc2lvbiBkZXBhcnRtZW50LiAgKi8KK3N0YXRpYyBUSFJFQURfUkVUX1RZUEUKK3JldmlzaW9uX3RocmVhZCAodm9pZCAqYXJnKQoreworICAodm9pZClhcmc7CisKKyAgd2hpbGUgKCFzdG9wX3JldmlzaW9uX3RocmVhZCkKKyAgICB7CisgICAgICBleHRlcm5hbF9sb2NrX3Rlc3RfbG9jayAoX19MSU5FX18pOworICAgICAgY2hlY2tfYWNjb3VudHMgKCk7CisgICAgICBleHRlcm5hbF9sb2NrX3Rlc3RfdW5sb2NrIChfX0xJTkVfXyk7CisgICAgfQorICByZXR1cm4gVEhSRUFEX1JFVF9WQUxVRTsKK30KKworCisvKiBUaGlzIGlzIG9uZSBvZiBvdXIgYWNjb3VudGFudHMuICAqLworc3RhdGljIFRIUkVBRF9SRVRfVFlQRQorYWNjb3VudGFudF90aHJlYWQgKHZvaWQgKmFyZykKK3sKKyAgaW50IGk7CisgIGludCBhY2MxLCBhY2MyOworICBpbnQgdmFsdWU7CisKKyAgKHZvaWQpYXJnOworCisgIGZvciAoaSA9IDA7IGkgPCBOX1RSQU5TQUNUSU9OUzsgaSsrKQorICAgIHsKKyAgICAgIGV4dGVybmFsX2xvY2tfdGVzdF9sb2NrIChfX0xJTkVfXyk7CisgICAgICBhY2MxID0gcGlja19hY2NvdW50ICgpOworICAgICAgYWNjMiA9IHBpY2tfYWNjb3VudCAoKTsKKyAgICAgIHZhbHVlID0gcGlja192YWx1ZSAoKTsKKyAgICAgIGFjY291bnRbYWNjMV0gKz0gdmFsdWU7CisgICAgICBhY2NvdW50W2FjYzJdIC09IHZhbHVlOworICAgICAgZXh0ZXJuYWxfbG9ja190ZXN0X3VubG9jayAoX19MSU5FX18pOworICAgIH0KKyAgcmV0dXJuIFRIUkVBRF9SRVRfVkFMVUU7Cit9CisKKworc3RhdGljIHZvaWQKK3J1bl90ZXN0ICh2b2lkKQoreworI2lmZGVmIF9XSU4zMgorICBIQU5ETEUgcnRocmVhZDsKKyAgSEFORExFIGF0aHJlYWRzW05fQUNDT1VOVEFOVFNdOworICBpbnQgaTsKKyAgaW50IHJjOworCisgIGV4dGVybmFsX2xvY2tfdGVzdF9pbml0IChfX0xJTkVfXyk7CisgIHN0b3BfcmV2aXNpb25fdGhyZWFkID0gMDsKKyAgcnRocmVhZCA9IENyZWF0ZVRocmVhZCAoTlVMTCwgMCwgcmV2aXNpb25fdGhyZWFkLCBOVUxMLCAwLCBOVUxMKTsKKyAgaWYgKCFydGhyZWFkKQorICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIHJldmlzaW9uIHRocmVhZDogcmM9JWQiLCAoaW50KUdldExhc3RFcnJvciAoKSk7CisKKyAgZm9yIChpPTA7IGkgPCBOX0FDQ09VTlRBTlRTOyBpKyspCisgICAgeworICAgICAgYXRocmVhZHNbaV0gPSBDcmVhdGVUaHJlYWQgKE5VTEwsIDAsIGFjY291bnRhbnRfdGhyZWFkLCBOVUxMLCAwLCBOVUxMKTsKKyAgICAgIGlmICghYXRocmVhZHNbaV0pCisgICAgICAgIGRpZSAoImVycm9yIGNyZWF0aW5nIGFjY291bnRhbnQgdGhyZWFkICVkOiByYz0lZCIsCisgICAgICAgICAgICAgaSwgKGludClHZXRMYXN0RXJyb3IgKCkpOworICAgIH0KKworICBmb3IgKGk9MDsgaSA8IE5fQUNDT1VOVEFOVFM7IGkrKykKKyAgICB7CisgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGF0aHJlYWRzW2ldLCBJTkZJTklURSk7CisgICAgICBpZiAocmMgPT0gV0FJVF9PQkpFQ1RfMCkKKyAgICAgICAgc2hvdyAoImFjY291bnRhbnQgdGhyZWFkICVkIGhhcyB0ZXJtaW5hdGVkIiwgaSk7CisgICAgICBlbHNlCisgICAgICAgIGZhaWwgKCJ3YWl0aW5nIGZvciBhY2NvdW50YW50IHRocmVhZCAlZCBmYWlsZWQ6ICVkIiwKKyAgICAgICAgICAgICAgaSwgKGludClHZXRMYXN0RXJyb3IgKCkpOworICAgICAgQ2xvc2VIYW5kbGUgKGF0aHJlYWRzW2ldKTsKKyAgICB9CisgIHN0b3BfcmV2aXNpb25fdGhyZWFkID0gMTsKKworICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKHJ0aHJlYWQsIElORklOSVRFKTsKKyAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApCisgICAgc2hvdyAoInJldmlzaW9uIHRocmVhZCBoYXMgdGVybWluYXRlZCIpOworICBlbHNlCisgICAgZmFpbCAoIndhaXRpbmcgZm9yIHJldmlzaW9uIHRocmVhZCBmYWlsZWQ6ICVkIiwgKGludClHZXRMYXN0RXJyb3IgKCkpOworICBDbG9zZUhhbmRsZSAocnRocmVhZCk7CisKKyNlbGlmIFVTRV9QT1NJWF9USFJFQURTCisgIHB0aHJlYWRfdCBydGhyZWFkOworICBwdGhyZWFkX3QgYXRocmVhZHNbTl9BQ0NPVU5UQU5UU107CisgIGludCByYywgaTsKKworICBleHRlcm5hbF9sb2NrX3Rlc3RfaW5pdCAoX19MSU5FX18pOworICBzdG9wX3JldmlzaW9uX3RocmVhZCA9IDA7CisgIHB0aHJlYWRfY3JlYXRlICgmcnRocmVhZCwgTlVMTCwgcmV2aXNpb25fdGhyZWFkLCBOVUxMKTsKKworICBmb3IgKGk9MDsgaSA8IE5fQUNDT1VOVEFOVFM7IGkrKykKKyAgICBwdGhyZWFkX2NyZWF0ZSAoJmF0aHJlYWRzW2ldLCBOVUxMLCBhY2NvdW50YW50X3RocmVhZCwgTlVMTCk7CisKKyAgZm9yIChpPTA7IGkgPCBOX0FDQ09VTlRBTlRTOyBpKyspCisgICAgeworICAgICAgcmMgPSBwdGhyZWFkX2pvaW4gKGF0aHJlYWRzW2ldLCBOVUxMKTsKKyAgICAgIGlmIChyYykKKyAgICAgICAgZmFpbCAoInB0aHJlYWRfam9pbiBmYWlsZWQgZm9yIGFjY291bnRhbnQgdGhyZWFkICVkOiAlcyIsCisgICAgICAgICAgICAgIGksIHN0cmVycm9yIChlcnJubykpOworICAgICAgZWxzZQorICAgICAgICBzaG93ICgiYWNjb3VudGFudCB0aHJlYWQgJWQgaGFzIHRlcm1pbmF0ZWQiLCBpKTsKKyAgICB9CisKKyAgc3RvcF9yZXZpc2lvbl90aHJlYWQgPSAxOworICByYyA9IHB0aHJlYWRfam9pbiAocnRocmVhZCwgTlVMTCk7CisgIGlmIChyYykKKyAgICBmYWlsICgicHRocmVhZF9qb2luIGZhaWxlZCBmb3IgdGhlIHJldmlzaW9uIHRocmVhZDogJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgZWxzZQorICAgIHNob3cgKCJyZXZpc2lvbiB0aHJlYWQgaGFzIHRlcm1pbmF0ZWQiKTsKKworI2VuZGlmIC8qVVNFX1BPU0lYX1RIUkVBRFMqLworCisgIGV4dGVybmFsX2xvY2tfdGVzdF9kZXN0cm95IChfX0xJTkVfXyk7Cit9CisKKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGxhc3RfYXJnYyA9IC0xOworCisgIGlmIChhcmdjKQorICAgIHsKKyAgICAgIGFyZ2MtLTsgYXJndisrOworICAgIH0KKyAgd2hpbGUgKGFyZ2MgJiYgbGFzdF9hcmdjICE9IGFyZ2MgKQorICAgIHsKKyAgICAgIGxhc3RfYXJnYyA9IGFyZ2M7CisgICAgICBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLWhlbHAiKSkKKyAgICAgICAgeworICAgICAgICAgIHB1dHMgKAorInVzYWdlOiAuL3QtbG9jayBbb3B0aW9uc11cbiIKKyJcbiIKKyJPcHRpb25zOlxuIgorIiAgLS12ZXJib3NlICAgICAgU2hvdyB3aGF0IGlzIGdvaW5nIG9uXG4iCisiICAtLWRlYnVnICAgICAgICBGbHlzd2F0dGVyXG4iCispOworICAgICAgICAgIGV4aXQgKDApOworICAgICAgICB9CisgICAgICBpZiAoIXN0cmNtcCAoKmFyZ3YsICItLXZlcmJvc2UiKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICAgIGFyZ2MtLTsgYXJndisrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghc3RyY21wICgqYXJndiwgIi0tZGVidWciKSkKKyAgICAgICAgeworICAgICAgICAgIHZlcmJvc2UgPSBkZWJ1ZyA9IDE7CisgICAgICAgICAgYXJnYy0tOyBhcmd2Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgc3JhbmQgKHRpbWUoTlVMTCkqZ2V0cGlkKCkpOworCisgIGlmIChkZWJ1ZykKKyAgICBnY3J5X2NvbnRyb2wgKEdDUllDVExfU0VUX0RFQlVHX0ZMQUdTLCAxdSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaCIpOworICBnY3J5X2NvbnRyb2wgKEdDUllDVExfRU5BQkxFX1FVSUNLX1JBTkRPTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9QUklOVF9DT05GSUcsIE5VTEwpOworCisgIGNoZWNrX25vbmNlX2xvY2sgKCk7CisKKyAgaW5pdF9hY2NvdW50cyAoKTsKKyAgY2hlY2tfYWNjb3VudHMgKCk7CisKKyAgcnVuX3Rlc3QgKCk7CisgIGNoZWNrX2FjY291bnRzICgpOworCisgIC8qIFJ1biBhIHNlY29uZCB0aW1lIHRvIGNoZWNrIGRlaW5pdCBjb2RlLiAgKi8KKyAgcnVuX3Rlc3QgKCk7CisgIGNoZWNrX2FjY291bnRzICgpOworCisgIGlmICh2ZXJib3NlKQorICAgIHByaW50X2FjY291bnRzICgpOworCisgIHJldHVybiBlcnJvcmNvdW50ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy90LW1waS1iaXQuYyBiL3Rlc3RzL3QtbXBpLWJpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYzk5OWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90LW1waS1iaXQuYwpAQCAtMCwwICsxLDM2MSBAQAorLyogdC1tcGktYml0LmMgIC0gVGVzdHMgZm9yIGJpdCBsZXZlbCBmdW5jdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMaWJnY3J5cHQuCisgKgorICogTGliZ2NyeXB0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCisjZGVmaW5lIFBHTSAidC1tcGktYml0IgorCitzdGF0aWMgY29uc3QgY2hhciAqd2hlcmVzdHI7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCisjZGVmaW5lIHhtYWxsb2MoYSkgICAgZ2NyeV94bWFsbG9jICgoYSkpCisjZGVmaW5lIHhjYWxsb2MoYSxiKSAgZ2NyeV94Y2FsbG9jICgoYSksKGIpKQorI2RlZmluZSB4ZnJlZShhKSAgICAgIGdjcnlfZnJlZSAoKGEpKQorI2RlZmluZSBwYXNzKCkgZG8geyA7IH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkCitzaG93IChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGlmICghdmVyYm9zZSkKKyAgICByZXR1cm47CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKK30KKworc3RhdGljIHZvaWQKK2ZhaWwgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgaWYgKHdoZXJlc3RyKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBlcnJvcl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorZGllIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdfcHRyOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIGlmICh3aGVyZXN0cikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgd2hlcmVzdHIpOworICB2YV9zdGFydCAoYXJnX3B0ciwgZm9ybWF0KTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCBhcmdfcHRyKTsKKyAgdmFfZW5kIChhcmdfcHRyKTsKKyAgZXhpdCAoMSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgYml0IHN0cmluZyBjb25zaXN0aW5nIG9mICcwJyBhbmQgJzEnIGZyb20gdGhlIE1QSQorICAgQS4gUmV0dXJuIHRoZSBMRU5HVEggbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gQ2FsbGVyIG5lZWRzIHRvIHhmcmVlCisgICB0aGUgcmVzdWx0LiAqLworc3RhdGljIGNoYXIgKgorbXBpMmJpdHN0ciAoZ2NyeV9tcGlfdCBhLCBzaXplX3QgbGVuZ3RoKQoreworICBjaGFyICpwLCAqYnVmOworCisgIGJ1ZiA9IHAgPSB4bWFsbG9jIChsZW5ndGgrMSk7CisgIHdoaWxlIChsZW5ndGgtLSkKKyAgICAqcCsrID0gZ2NyeV9tcGlfdGVzdF9iaXQgKGEsIGxlbmd0aCkgPyAnMSc6JzAnOworICAqcCA9IDA7CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworLyogQWxsb2NhdGUgYSBiaXQgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgJzAnIGFuZCAnMScgZnJvbSB0aGUgTVBJIEEuICBEbworICAgbm90IHJldHVybiBhbnkgbGVhZGluZyB6ZXJvIGJpdHMuIENhbGxlciBuZWVkcyB0byB4ZnJlZSB0aGUKKyAgIHJlc3VsdC4gKi8KK3N0YXRpYyBjaGFyICoKK21waTJiaXRzdHJfbmx6IChnY3J5X21waV90IGEpCit7CisgIGNoYXIgKnAsICpidWY7CisgIHNpemVfdCBsZW5ndGggPSBnY3J5X21waV9nZXRfbmJpdHMgKGEpOworCisgIGlmICghbGVuZ3RoKQorICAgIHsKKyAgICAgIGJ1ZiA9IHAgPSB4bWFsbG9jICgyKTsKKyAgICAgICpwKysgPSAnMCc7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnVmID0gcCA9IHhtYWxsb2MgKGxlbmd0aCArIDEpOworICAgICAgd2hpbGUgKGxlbmd0aC0tID4gMSkKKyAgICAgICAgKnArKyA9IGdjcnlfbXBpX3Rlc3RfYml0IChhLCBsZW5ndGgpID8gJzEnOicwJzsKKyAgICAgICpwKysgPSBnY3J5X21waV90ZXN0X2JpdCAoYSwgMCkgPyAnMSc6JzAnOworICAgIH0KKyAgKnAgPSAwOworICByZXR1cm4gYnVmOworfQorCisvKiBTaGlmdCBhIGJpdCBzdHJpbmcgdG8gdGhlIHJpZ2h0LiAqLworc3RhdGljIHZvaWQKK3JzaGlmdGJpdHN0cmluZyAoY2hhciAqc3RyaW5nLCBzaXplX3QgbikKK3sKKyAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoc3RyaW5nKTsKKworICBpZiAobiA+IGxlbikKKyAgICBuID0gbGVuOworCisgIG1lbW1vdmUgKHN0cmluZytuLCBzdHJpbmcsIGxlbi1uKTsKKyAgbWVtc2V0IChzdHJpbmcsICcwJywgbik7Cit9CisKKy8qIFNoaWZ0IGEgYml0IHN0cmluZyB0byB0aGUgbGVmdC4gQ2FsbGVyIG5lZWRzIHRvIGZyZWUgdGhlIHJlc3VsdC4gKi8KK3N0YXRpYyBjaGFyICoKK2xzaGlmdGJpdHN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbikKK3sKKyAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoc3RyaW5nKTsKKyAgY2hhciAqcmVzdWx0OworCisgIGlmIChsZW4rbisxIDwgbGVuKQorICAgIGRpZSAoImludGVybmFsIG92ZXJmbG93XG4iKTsKKyAgLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlLiAqLworICByZXN1bHQgPSB4bWFsbG9jIChsZW4rbisxKTsKKyAgZm9yICg7ICpzdHJpbmcgPT0gJzAnICYmIHN0cmluZ1sxXTsgc3RyaW5nKyssIGxlbi0tKQorICAgIDsKKyAgbWVtY3B5IChyZXN1bHQsIHN0cmluZywgbGVuKTsKKyAgaWYgKCpzdHJpbmcgPT0gJzAnICYmICFzdHJpbmdbMV0pCisgICAgbiA9IDA7IC8qIEF2b2lkIGV4dHJhIG51bGxzIGZvciBhbiBvbmx5IDAgc3RyaW5nLiAgKi8KKyAgZWxzZQorICAgIG1lbXNldCAocmVzdWx0K2xlbiwgJzAnLCBuKTsKKyAgcmVzdWx0W2xlbituXSA9IDA7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogVGhpcyBpcyB0byBjaGVjayBhIGJ1ZyByZXBvcnRlZCBieSBicGdjcnlwdCBhdCBpdGFwYXJpY2Eub3JnIG9uCisgICAyMDA2LTA3LTMxIGFnYWluc3QgbGliZ2NyeXB0IDEuMi4yLiAgKi8KK3N0YXRpYyB2b2lkCitvbmVfYml0X29ubHkgKGludCBoaWdoYml0KQoreworICBnY3J5X21waV90IGE7CisgIGNoYXIgKnJlc3VsdDsKKyAgaW50IGk7CisKKyAgd2hlcmVzdHIgPSAib25lX2JpdF9vbmx5IjsKKyAgc2hvdyAoImNoZWNraW5nIHRoYXQgc2V0XyVzYml0IGRvZXMgb25seSBzZXQgb25lIGJpdFxuIiwgaGlnaGJpdD8iaGlnaCI6IiIpOworCisgIGEgPSBnY3J5X21waV9uZXcgKDApOworICBnY3J5X21waV9yYW5kb21pemUgKGEsIDcwLCBHQ1JZX1dFQUtfUkFORE9NKTsKKyAgZ2NyeV9tcGlfc2V0X3VpIChhLCAwKTsKKworICBpZiAoaGlnaGJpdCkKKyAgICBnY3J5X21waV9zZXRfaGlnaGJpdCAoYSwgNDIpOworICBlbHNlCisgICAgZ2NyeV9tcGlfc2V0X2JpdCAoYSwgNDIpOworICBpZiAoIWdjcnlfbXBpX3Rlc3RfYml0IChhLCA0MikpCisgICAgZmFpbCAoImZhaWxlZCB0byBzZXQgYSBiaXRcbiIpOworICBnY3J5X21waV9jbGVhcl9iaXQgKGEsIDQyKTsKKyAgaWYgKGdjcnlfbXBpX3Rlc3RfYml0IChhLCA0MikpCisgICAgZmFpbCAoImZhaWxlZCB0byBjbGVhciBhIGJpdFxuIik7CisgIHJlc3VsdCA9IG1waTJiaXRzdHIgKGEsIDcwKTsKKyAgYXNzZXJ0IChzdHJsZW4gKHJlc3VsdCkgPT0gNzApOworICBmb3IgKGk9MDsgcmVzdWx0W2ldOyBpKyspCisgICAgaWYgKCByZXN1bHRbaV0gIT0gJzAnICkKKyAgICAgIGJyZWFrOworICBpZiAocmVzdWx0W2ldKQorICAgIGZhaWwgKCJzcHVyaW91cyBiaXRzIGRldGVjdGVkXG4iKTsKKyAgeGZyZWUgKHJlc3VsdCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworfQorCisvKiBDaGVjayB0aGF0IHJpZ2h0IHNoaWZ0aW5nIGFjdHVhbGx5IHdvcmtzIGZvciBhbiBhbW91bnQgbGFyZ2VyIHRoYW4KKyAgIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgbGltYi4gKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3JzaGlmdCAoaW50IHBhc3MpCit7CisgIGdjcnlfbXBpX3QgYSwgYjsKKyAgY2hhciAqcmVzdWx0LCAqcmVzdWx0MjsKKyAgaW50IGk7CisKKyAgd2hlcmVzdHIgPSAidGVzdF9yc2hpZnQiOworICBzaG93ICgiY2hlY2tpbmcgdGhhdCByc2hpZnQgd29ya3MgYXMgZXhwZWN0ZWQgKHBhc3MgJWQpXG4iLCBwYXNzKTsKKworICBhID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgYiA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoYSwgNzAsIEdDUllfV0VBS19SQU5ET00pOworCisgIGZvciAoaT0wOyBpIDwgNzU7IGkrKykKKyAgICB7CisgICAgICBnY3J5X21waV9yc2hpZnQgKGIsIGEsIGkpOworCisgICAgICByZXN1bHQgPSBtcGkyYml0c3RyIChiLCA3Mik7CisgICAgICByZXN1bHQyID0gbXBpMmJpdHN0ciAoYSwgNzIpOworICAgICAgcnNoaWZ0Yml0c3RyaW5nIChyZXN1bHQyLCBpKTsKKyAgICAgIGlmIChzdHJjbXAgKHJlc3VsdCwgcmVzdWx0MikpCisgICAgICAgIHsKKyAgICAgICAgICBzaG93ICgiZ290ID0lc1xuIiwgcmVzdWx0KTsKKyAgICAgICAgICBzaG93ICgid2FudD0lc1xuIiwgcmVzdWx0Mik7CisgICAgICAgICAgZmFpbCAoInJzaGlmdCBieSAlZCBmYWlsZWRcbiIsIGkpOworICAgICAgICB9CisgICAgICB4ZnJlZSAocmVzdWx0KTsKKyAgICAgIHhmcmVlIChyZXN1bHQyKTsKKyAgICB9CisKKyAgLyogQWdhaW4uIFRoaXMgdGltZSB1c2luZyBpbi1wbGFjZSBvcGVyYXRpb24uICovCisgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoYSwgNzAsIEdDUllfV0VBS19SQU5ET00pOworCisgIGZvciAoaT0wOyBpIDwgNzU7IGkrKykKKyAgICB7CisgICAgICBnY3J5X21waV9yZWxlYXNlIChiKTsKKyAgICAgIGIgPSBnY3J5X21waV9jb3B5IChhKTsKKyAgICAgIGdjcnlfbXBpX3JzaGlmdCAoYiwgYiwgaSk7CisKKyAgICAgIHJlc3VsdCA9IG1waTJiaXRzdHIgKGIsIDcyKTsKKyAgICAgIHJlc3VsdDIgPSBtcGkyYml0c3RyIChhLCA3Mik7CisgICAgICByc2hpZnRiaXRzdHJpbmcgKHJlc3VsdDIsIGkpOworICAgICAgaWYgKHN0cmNtcCAocmVzdWx0LCByZXN1bHQyKSkKKyAgICAgICAgeworICAgICAgICAgIHNob3cgKCJnb3QgPSVzXG4iLCByZXN1bHQpOworICAgICAgICAgIHNob3cgKCJ3YW50PSVzXG4iLCByZXN1bHQyKTsKKyAgICAgICAgICBmYWlsICgiaW4tcGxhY2UgcnNoaWZ0IGJ5ICVkIGZhaWxlZFxuIiwgaSk7CisgICAgICAgIH0KKyAgICAgIHhmcmVlIChyZXN1bHQyKTsKKyAgICAgIHhmcmVlIChyZXN1bHQpOworICAgIH0KKworICBnY3J5X21waV9yZWxlYXNlIChiKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoYSk7Cit9CisKKy8qIENoZWNrIHRoYXQgbGVmdCBzaGlmdGluZyB3b3JrcyBjb3JyZWN0bHkuICAqLworc3RhdGljIHZvaWQKK3Rlc3RfbHNoaWZ0IChpbnQgcGFzcykKK3sKKyAgc3RhdGljIGludCBzaXplX2xpc3RbXSA9IHsxLCAzMSwgMzIsIDYzLCA2NCwgNjUsIDcwLCAwfTsKKyAgaW50IHNpemVfaWR4OworICBnY3J5X21waV90IGEsIGI7CisgIGNoYXIgKnRtcHN0ciwgKnJlc3VsdCwgKnJlc3VsdDI7CisgIGludCBpOworCisgIHdoZXJlc3RyID0gInRlc3RfbHNoaWZ0IjsKKyAgc2hvdyAoImNoZWNraW5nIHRoYXQgbHNoaWZ0IHdvcmtzIGFzIGV4cGVjdGVkIChwYXNzICVkKVxuIiwgcGFzcyk7CisKKyAgZm9yIChzaXplX2lkeD0wOyBzaXplX2xpc3Rbc2l6ZV9pZHhdOyBzaXplX2lkeCsrKQorICAgIHsKKyAgICAgIGEgPSBnY3J5X21waV9uZXcgKDApOworICAgICAgYiA9IGdjcnlfbXBpX25ldyAoMCk7CisKKyAgICAgIC8qIGdjcnlfbXBpX3JhbmRvbWl6ZSByb3VuZHMgdXAgdG8gZnVsbCBieXRlcywgdGh1cyB3ZSBuZWVkIHRvCisgICAgICAgICB1c2UgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCB0byBmaXggdGhhdC4gICovCisgICAgICBnY3J5X21waV9yYW5kb21pemUgKGEsIHNpemVfbGlzdFtzaXplX2lkeF0sIEdDUllfV0VBS19SQU5ET00pOworICAgICAgZ2NyeV9tcGlfY2xlYXJfaGlnaGJpdCAoYSwgc2l6ZV9saXN0W3NpemVfaWR4XSk7CisKKyAgICAgIGZvciAoaT0wOyBpIDwgNzU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGdjcnlfbXBpX2xzaGlmdCAoYiwgYSwgaSk7CisKKyAgICAgICAgICByZXN1bHQgPSBtcGkyYml0c3RyX25seiAoYik7CisgICAgICAgICAgdG1wc3RyID0gbXBpMmJpdHN0cl9ubHogKGEpOworICAgICAgICAgIHJlc3VsdDIgPSBsc2hpZnRiaXRzdHJpbmcgKHRtcHN0ciwgaSk7CisgICAgICAgICAgeGZyZWUgKHRtcHN0cik7CisgICAgICAgICAgaWYgKHN0cmNtcCAocmVzdWx0LCByZXN1bHQyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvdyAoImdvdCA9JXNcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgIHNob3cgKCJ3YW50PSVzXG4iLCByZXN1bHQyKTsKKyAgICAgICAgICAgICAgZmFpbCAoImxzaGlmdCBieSAlZCBmYWlsZWRcbiIsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgIHhmcmVlIChyZXN1bHQpOworICAgICAgICAgIHhmcmVlIChyZXN1bHQyKTsKKyAgICAgICAgfQorCisgICAgICAvKiBBZ2Fpbi4gVGhpcyB0aW1lIHVzaW5nIGluLXBsYWNlIG9wZXJhdGlvbi4gKi8KKyAgICAgIGdjcnlfbXBpX3JhbmRvbWl6ZSAoYSwgc2l6ZV9saXN0W3NpemVfaWR4XSwgR0NSWV9XRUFLX1JBTkRPTSk7CisgICAgICBnY3J5X21waV9jbGVhcl9oaWdoYml0IChhLCBzaXplX2xpc3Rbc2l6ZV9pZHhdKTsKKworICAgICAgZm9yIChpPTA7IGkgPCA3NTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoYik7CisgICAgICAgICAgYiA9IGdjcnlfbXBpX2NvcHkgKGEpOworICAgICAgICAgIGdjcnlfbXBpX2xzaGlmdCAoYiwgYiwgaSk7CisKKyAgICAgICAgICByZXN1bHQgPSBtcGkyYml0c3RyX25seiAoYik7CisgICAgICAgICAgdG1wc3RyID0gbXBpMmJpdHN0cl9ubHogKGEpOworICAgICAgICAgIHJlc3VsdDIgPSBsc2hpZnRiaXRzdHJpbmcgKHRtcHN0ciwgaSk7CisgICAgICAgICAgeGZyZWUgKHRtcHN0cik7CisgICAgICAgICAgaWYgKHN0cmNtcCAocmVzdWx0LCByZXN1bHQyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvdyAoImdvdCA9JXNcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgIHNob3cgKCJ3YW50PSVzXG4iLCByZXN1bHQyKTsKKyAgICAgICAgICAgICAgZmFpbCAoImluLXBsYWNlIGxzaGlmdCBieSAlZCBmYWlsZWRcbiIsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgIHhmcmVlIChyZXN1bHQyKTsKKyAgICAgICAgICB4ZnJlZSAocmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICBnY3J5X21waV9yZWxlYXNlIChiKTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworICAgIH0KK30KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGRlYnVnID0gMDsKKyAgaW50IGk7CisKKyAgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLXZlcmJvc2UiKSkKKyAgICB2ZXJib3NlID0gMTsKKyAgZWxzZSBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tZGVidWciKSkKKyAgICB2ZXJib3NlID0gZGVidWcgPSAxOworCisgIGlmICghZ2NyeV9jaGVja192ZXJzaW9uIChHQ1JZUFRfVkVSU0lPTikpCisgICAgZGllICgidmVyc2lvbiBtaXNtYXRjaFxuIik7CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0RJU0FCTEVfU0VDTUVNLCAwKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0VOQUJMRV9RVUlDS19SQU5ET00sIDApOworICBpZiAoZGVidWcpCisgICAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1NFVF9ERUJVR19GTEFHUywgMXUsIDApOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9JTklUSUFMSVpBVElPTl9GSU5JU0hFRCwgMCk7CisKKyAgb25lX2JpdF9vbmx5ICgwKTsKKyAgb25lX2JpdF9vbmx5ICgxKTsKKyAgZm9yIChpPTA7IGkgPCA1OyBpKyspCisgICAgdGVzdF9yc2hpZnQgKGkpOyAvKiBSdW4gc2V2ZXJhbCB0aW1lcyBkdWUgdG8gcmFuZG9tIGluaXRpYWxpemF0aW9ucy4gKi8KKworICBmb3IgKGk9MDsgaSA8IDU7IGkrKykKKyAgICB0ZXN0X2xzaGlmdCAoaSk7IC8qIFJ1biBzZXZlcmFsIHRpbWVzIGR1ZSB0byByYW5kb20gaW5pdGlhbGl6YXRpb25zLiAqLworCisgIHNob3cgKCJBbGwgdGVzdHMgY29tcGxldGVkLiBFcnJvcnM6ICVkXG4iLCBlcnJvcl9jb3VudCk7CisgIHJldHVybiBlcnJvcl9jb3VudCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdC1tcGktcG9pbnQuYyBiL3Rlc3RzL3QtbXBpLXBvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiMDU5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3QtbXBpLXBvaW50LmMKQEAgLTAsMCArMSwxMTEwIEBACisvKiB0LW1waS1wb2ludC5jICAtIFRlc3RzIGZvciBtcGkgcG9pbnQgZnVuY3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgZzEwIENvZGUgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICIuLi9zcmMvZ2NyeXB0LWludC5oIgorCisjZGVmaW5lIFBHTSAidC1tcGktcG9pbnQiCisKK3N0YXRpYyBjb25zdCBjaGFyICp3aGVyZXN0cjsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGVycm9yX2NvdW50OworCisKKyNkZWZpbmUgbXlfaXNhc2NpaShjKSAoISgoYykgJiAweDgwKSkKKyNkZWZpbmUgZGlnaXRwKHApICAgKCoocCkgPj0gJzAnICYmICoocCkgPD0gJzknKQorI2RlZmluZSBoZXhkaWdpdHAoYSkgKGRpZ2l0cCAoYSkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ0EnICYmICooYSkgPD0gJ0YnKSAgXAorICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKGEpID49ICdhJyAmJiAqKGEpIDw9ICdmJykpCisjZGVmaW5lIHh0b2lfMShwKSAgICgqKHApIDw9ICc5Jz8gKCoocCktICcwJyk6IFwKKyAgICAgICAgICAgICAgICAgICAgICoocCkgPD0gJ0YnPyAoKihwKS0nQScrMTApOigqKHApLSdhJysxMCkpCisjZGVmaW5lIHh0b2lfMihwKSAgICgoeHRvaV8xKHApICogMTYpICsgeHRvaV8xKChwKSsxKSkKKyNkZWZpbmUgeG1hbGxvYyhhKSAgICBnY3J5X3htYWxsb2MgKChhKSkKKyNkZWZpbmUgeGNhbGxvYyhhLGIpICBnY3J5X3hjYWxsb2MgKChhKSwoYikpCisjZGVmaW5lIHhmcmVlKGEpICAgICAgZ2NyeV9mcmVlICgoYSkpCisjZGVmaW5lIHBhc3MoKSBkbyB7IDsgfSB3aGlsZSAoMCkKKworCitzdGF0aWMgc3RydWN0Cit7CisgIGNvbnN0IGNoYXIgKmRlc2M7ICAgICAgICAgICAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgY3VydmUuICAqLworICBjb25zdCBjaGFyICpwOyAgICAgICAgICAgICAgLyogT3JkZXIgb2YgdGhlIHByaW1lIGZpZWxkLiAgKi8KKyAgY29uc3QgY2hhciAqYSwgKmI7ICAgICAgICAgIC8qIFRoZSBjb2VmZmljaWVudHMuICovCisgIGNvbnN0IGNoYXIgKm47ICAgICAgICAgICAgICAvKiBUaGUgb3JkZXIgb2YgdGhlIGJhc2UgcG9pbnQuICAqLworICBjb25zdCBjaGFyICpnX3gsICpnX3k7ICAgICAgLyogQmFzZSBwb2ludC4gICovCit9IHRlc3RfY3VydmVbXSA9CisgIHsKKyAgICB7CisgICAgICAiTklTVCBQLTE5MiIsCisgICAgICAiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmZmZmZmZmZmYiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZmZmZjIiwKKyAgICAgICIweDY0MjEwNTE5ZTU5YzgwZTcwZmE3ZTlhYjcyMjQzMDQ5ZmViOGRlZWNjMTQ2YjliMSIsCisgICAgICAiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5OWRlZjgzNjE0NmJjOWIxYjRkMjI4MzEiLAorCisgICAgICAiMHgxODhkYTgwZWIwMzA5MGY2N2NiZjIwZWI0M2ExODgwMGY0ZmYwYWZkODJmZjEwMTIiLAorICAgICAgIjB4MDcxOTJiOTVmZmM4ZGE3ODYzMTAxMWVkNmIyNGNkZDU3M2Y5NzdhMTFlNzk0ODExIgorICAgIH0sCisgICAgeworICAgICAgIk5JU1QgUC0yMjQiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUiLAorICAgICAgIjB4YjQwNTBhODUwYzA0YjNhYmY1NDEzMjU2NTA0NGIwYjdkN2JmZDhiYTI3MGIzOTQzMjM1NWZmYjQiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjE2YTJlMGI4ZjAzZTEzZGQyOTQ1NWM1YzJhM2QiICwKKworICAgICAgIjB4YjcwZTBjYmQ2YmI0YmY3ZjMyMTM5MGI5NGEwM2MxZDM1NmMyMTEyMjM0MzI4MGQ2MTE1YzFkMjEiLAorICAgICAgIjB4YmQzNzYzODhiNWY3MjNmYjRjMjJkZmU2Y2Q0Mzc1YTA1YTA3NDc2NDQ0ZDU4MTk5ODUwMDdlMzQiCisgICAgfSwKKyAgICB7CisgICAgICAiTklTVCBQLTI1NiIsCisgICAgICAiMHhmZmZmZmZmZjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyAgICAgICIweGZmZmZmZmZmMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMiLAorICAgICAgIjB4NWFjNjM1ZDhhYTNhOTNlN2IzZWJiZDU1NzY5ODg2YmM2NTFkMDZiMGNjNTNiMGY2M2JjZTNjM2UyN2QyNjA0YiIsCisgICAgICAiMHhmZmZmZmZmZjAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmJjZTZmYWFkYTcxNzllODRmM2I5Y2FjMmZjNjMyNTUxIiwKKworICAgICAgIjB4NmIxN2QxZjJlMTJjNDI0N2Y4YmNlNmU1NjNhNDQwZjI3NzAzN2Q4MTJkZWIzM2EwZjRhMTM5NDVkODk4YzI5NiIsCisgICAgICAiMHg0ZmUzNDJlMmZlMWE3ZjliOGVlN2ViNGE3YzBmOWUxNjJiY2UzMzU3NmIzMTVlY2VjYmI2NDA2ODM3YmY1MWY1IgorICAgIH0sCisgICAgeworICAgICAgIk5JU1QgUC0zODQiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZSIKKyAgICAgICJmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmZiIsCisgICAgICAiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlIgorICAgICAgImZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZjIiwKKyAgICAgICIweGIzMzEyZmE3ZTIzZWU3ZTQ5ODhlMDU2YmUzZjgyZDE5MTgxZDljNmVmZTgxNDExMjAzMTQwODhmNTAxMzg3NWEiCisgICAgICAiYzY1NjM5OGQ4YTJlZDE5ZDJhODVjOGVkZDNlYzJhZWYiLAorICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzc2MzRkODFmNDM3MmRkZiIKKyAgICAgICI1ODFhMGRiMjQ4YjBhNzdhZWNlYzE5NmFjY2M1Mjk3MyIsCisKKyAgICAgICIweGFhODdjYTIyYmU4YjA1Mzc4ZWIxYzcxZWYzMjBhZDc0NmUxZDNiNjI4YmE3OWI5ODU5Zjc0MWUwODI1NDJhMzgiCisgICAgICAiNTUwMmYyNWRiZjU1Mjk2YzNhNTQ1ZTM4NzI3NjBhYjciLAorICAgICAgIjB4MzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMCIKKyAgICAgICIwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZiIKKyAgICB9LAorICAgIHsKKyAgICAgICJOSVNUIFAtNTIxIiwKKyAgICAgICIweDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiCisgICAgICAiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorICAgICAgIjB4MDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIKKyAgICAgICJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyIsCisgICAgICAiMHgwNTE5NTNlYjk2MThlMWM5YTFmOTI5YTIxYTBiNjg1NDBlZWEyZGE3MjViOTliMzE1ZjNiOGI0ODk5MThlZjEwIgorICAgICAgIjllMTU2MTkzOTUxZWM3ZTkzN2IxNjUyYzBiZDNiYjFiZjA3MzU3M2RmODgzZDJjMzRmMWVmNDUxZmQ0NmI1MDNmMDAiLAorICAgICAgIjB4MWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIKKyAgICAgICJmZmE1MTg2ODc4M2JmMmY5NjZiN2ZjYzAxNDhmNzA5YTVkMDNiYjVjOWI4ODk5YzQ3YWViYjZmYjcxZTkxMzg2NDA5IiwKKworICAgICAgIjB4YzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1MjFmODI4YWY2MDZiNGQzZCIKKyAgICAgICJiYWExNGI1ZTc3ZWZlNzU5MjhmZTFkYzEyN2EyZmZhOGRlMzM0OGIzYzE4NTZhNDI5YmY5N2U3ZTMxYzJlNWJkNjYiLAorICAgICAgIjB4MTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNiIKKyAgICAgICI2MmM5N2VlNzI5OTVlZjQyNjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwIgorICAgIH0sCisgICAgeworICAgICAgIkVkMjU1MTkiLAorICAgICAgIjB4N0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRCIsCisgICAgICAiLTB4MDEiLAorICAgICAgIi0weDJERkM5MzExRDQ5MDAxOEM3MzM4QkY4Njg4ODYxNzY3RkY4RkY1QjJCRUJFMjc1NDhBMTRCMjM1RUNBNjg3NEEiLAorICAgICAgIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNERFRjlERUEyRjc5Q0Q2NTgxMjYzMUE1Q0Y1RDNFRCIsCisgICAgICAiMHgyMTY5MzZEM0NENkU1M0ZFQzBBNEUyMzFGREQ2REM1QzY5MkNDNzYwOTUyNUE3QjJDOTU2MkQ2MDhGMjVENTFBIiwKKyAgICAgICIweDY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiCisgICAgfSwKKyAgICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQorICB9OworCisvKiBBIHNhbXBsZSBwdWJsaWMga2V5IGZvciBOSVNUIFAtMjU2LiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wMjU2X3FbXSA9CisgICIwNCIKKyAgIjQyQjkyNzI0MjIzNzYzOUEzNkNFOTIyMUIzNDBEQjFBOUFCNzZERjJGRTNFMTcxMjc3RjZBNDAyM0RFRDE0NkUiCisgICJFODY1MjVFMzhDQ0VDRkYzRkI4RDE1MkNDNjMzNEY3MEQyM0E1MjUxNzVDMUJDQkRERTZFMDIzQjIyMjg3NzBFIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9wMjU2X3FfeFtdID0KKyAgIjQyQjkyNzI0MjIzNzYzOUEzNkNFOTIyMUIzNDBEQjFBOUFCNzZERjJGRTNFMTcxMjc3RjZBNDAyM0RFRDE0NkUiOworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX3AyNTZfcV95W10gPQorICAiMDBFODY1MjVFMzhDQ0VDRkYzRkI4RDE1MkNDNjMzNEY3MEQyM0E1MjUxNzVDMUJDQkRERTZFMDIzQjIyMjg3NzBFIjsKKworCisvKiBBIHNhbXBsZSBwdWJsaWMga2V5IGZvciBFZDI1NTE5LiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9lZDI1NTE5X3FbXSA9CisgICIwNCIKKyAgIjU1ZDBlMDlhMmI5ZDM0MjkyMjk3ZTA4ZDYwZDBmNjIwYzUxM2Q0NzI1MzE4N2MyNGIxMjc4NmJkNzc3NjQ1Y2UiCisgICIxYTUxMDdmNzY4MWEwMmFmMjUyM2E2ZGFmMzcyZTEwZTNhMDc2NGM5ZDNmZTRiZDViNzBhYjE4MjAxOTg1YWQ3IjsKK3N0YXRpYyBjb25zdCBjaGFyIHNhbXBsZV9lZDI1NTE5X3FfeFtdID0KKyAgIjU1ZDBlMDlhMmI5ZDM0MjkyMjk3ZTA4ZDYwZDBmNjIwYzUxM2Q0NzI1MzE4N2MyNGIxMjc4NmJkNzc3NjQ1Y2UiOworc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlX2VkMjU1MTlfcV95W10gPQorICAiMWE1MTA3Zjc2ODFhMDJhZjI1MjNhNmRhZjM3MmUxMGUzYTA3NjRjOWQzZmU0YmQ1YjcwYWIxODIwMTk4NWFkNyI7CitzdGF0aWMgY29uc3QgY2hhciBzYW1wbGVfZWQyNTUxOV9xX2VkZHNhW10gPQorICAiZDc1YTk4MDE4MmIxMGFiN2Q1NGJmZWQzYzk2NDA3M2EwZWUxNzJmM2RhYTYyMzI1YWYwMjFhNjhmNzA3NTExYSI7CitzdGF0aWMgY29uc3QgY2hhciBzYW1wbGVfZWQyNTUxOV9kW10gPQorICAiOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCI7CisKKworc3RhdGljIHZvaWQKK3Nob3cgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgaWYgKCF2ZXJib3NlKQorICAgIHJldHVybjsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTSk7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworfQorCitzdGF0aWMgdm9pZAorZmFpbCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnX3B0cjsKKworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBQR00pOworICBpZiAod2hlcmVzdHIpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHdoZXJlc3RyKTsKKyAgdmFfc3RhcnQgKGFyZ19wdHIsIGZvcm1hdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0cik7CisgIHZhX2VuZCAoYXJnX3B0cik7CisgIGVycm9yX2NvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgZmZsdXNoIChzdGRvdXQpOworICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgUEdNKTsKKyAgaWYgKHdoZXJlc3RyKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCB3aGVyZXN0cik7CisgIHZhX3N0YXJ0IChhcmdfcHRyLCBmb3JtYXQpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIpOworICB2YV9lbmQgKGFyZ19wdHIpOworICBleGl0ICgxKTsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfbXBpXzIgKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnRleHQyLCBnY3J5X21waV90IGEpCit7CisgIGdjcnlfZXJyb3JfdCBlcnI7CisgIGNoYXIgKmJ1ZjsKKyAgdm9pZCAqYnVmYWRkciA9ICZidWY7CisKKyAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9IRVgsIGJ1ZmFkZHIsIE5VTEwsIGEpOworICBpZiAoZXJyKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiVzJXM6IFtlcnJvciBwcmludGluZyBudW1iZXI6ICVzXVxuIiwKKyAgICAgICAgICAgICB0ZXh0LCB0ZXh0Mj8gdGV4dDI6IiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlcyVzOiAlc1xuIiwgdGV4dCwgdGV4dDI/IHRleHQyOiIiLCBidWYpOworICAgICAgZ2NyeV9mcmVlIChidWYpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfbXBpIChjb25zdCBjaGFyICp0ZXh0LCBnY3J5X21waV90IGEpCit7CisgIHByaW50X21waV8yICh0ZXh0LCBOVUxMLCBhKTsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfcG9pbnQgKGNvbnN0IGNoYXIgKnRleHQsIGdjcnlfbXBpX3BvaW50X3QgYSkKK3sKKyAgZ2NyeV9tcGlfdCB4LCB5LCB6OworCisgIHggPSBnY3J5X21waV9uZXcgKDApOworICB5ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgeiA9IGdjcnlfbXBpX25ldyAoMCk7CisgIGdjcnlfbXBpX3BvaW50X2dldCAoeCwgeSwgeiwgYSk7CisgIHByaW50X21waV8yICh0ZXh0LCAiLngiLCB4KTsKKyAgcHJpbnRfbXBpXzIgKHRleHQsICIueSIsIHkpOworICBwcmludF9tcGlfMiAodGV4dCwgIi56Iiwgeik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworICBnY3J5X21waV9yZWxlYXNlICh5KTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeik7Cit9CisKKworc3RhdGljIHZvaWQKK3ByaW50X3NleHAgKGNvbnN0IGNoYXIgKnByZWZpeCwgZ2NyeV9zZXhwX3QgYSkKK3sKKyAgY2hhciAqYnVmOworICBzaXplX3Qgc2l6ZTsKKworICBpZiAocHJlZml4KQorICAgIGZwdXRzIChwcmVmaXgsIHN0ZGVycik7CisgIHNpemUgPSBnY3J5X3NleHBfc3ByaW50IChhLCBHQ1JZU0VYUF9GTVRfQURWQU5DRUQsIE5VTEwsIDApOworICBidWYgPSBnY3J5X3htYWxsb2MgKHNpemUpOworCisgIGdjcnlfc2V4cF9zcHJpbnQgKGEsIEdDUllTRVhQX0ZNVF9BRFZBTkNFRCwgYnVmLCBzaXplKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJS4qcyIsIChpbnQpc2l6ZSwgYnVmKTsKKyAgZ2NyeV9mcmVlIChidWYpOworfQorCisKK3N0YXRpYyBnY3J5X21waV90CitoZXgybXBpIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9tcGlfdCB2YWw7CisKKyAgZXJyID0gZ2NyeV9tcGlfc2NhbiAoJnZhbCwgR0NSWU1QSV9GTVRfSEVYLCBzdHJpbmcsIDAsIE5VTEwpOworICBpZiAoZXJyKQorICAgIGRpZSAoImhleDJtcGkgJyVzJyBmYWlsZWQ6ICVzXG4iLCBzdHJpbmcsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIHJldHVybiB2YWw7Cit9CisKKworLyogQ29udmVydCBTVFJJTkcgY29uc2lzdGluZyBvZiBoZXggY2hhcmFjdGVycyBpbnRvIGl0cyBiaW5hcnkKKyAgIHJlcHJlc2VudGF0aW9uIGFuZCByZXR1cm4gaXQgYXMgYW4gYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIHZhbGlkCisgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpcyByZXR1cm5lZCBhdCBSX0xFTkdUSC4gIFRoZSBzdHJpbmcgaXMKKyAgIGRlbGltaXRlZCBieSBlbmQgb2Ygc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBvbgorICAgZXJyb3IuICAqLworc3RhdGljIHZvaWQgKgoraGV4MmJ1ZmZlciAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgKnJfbGVuZ3RoKQoreworICBjb25zdCBjaGFyICpzOworICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgYnVmZmVyID0geG1hbGxvYyAoc3RybGVuKHN0cmluZykvMisxKTsKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChzPXN0cmluZzsgKnM7IHMgKz0yICkKKyAgICB7CisgICAgICBpZiAoIWhleGRpZ2l0cCAocykgfHwgIWhleGRpZ2l0cCAocysxKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAvKiBJbnZhbGlkIGhleCBkaWdpdHMuICovCisgICAgICAoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlcilbbGVuZ3RoKytdID0geHRvaV8yIChzKTsKKyAgICB9CisgICpyX2xlbmd0aCA9IGxlbmd0aDsKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCitzdGF0aWMgZ2NyeV9tcGlfdAoraGV4Mm1waW9wYSAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBjaGFyICpidWZmZXI7CisgIHNpemVfdCBidWZsZW47CisgIGdjcnlfbXBpX3QgdmFsOworCisgIGJ1ZmZlciA9IGhleDJidWZmZXIgKHN0cmluZywgJmJ1Zmxlbik7CisgIGlmICghYnVmZmVyKQorICAgIGRpZSAoImhleDJtcGlvcGEgJyVzJyBmYWlsZWQ6IHBhcnNlciBlcnJvclxuIiwgc3RyaW5nKTsKKyAgdmFsID0gZ2NyeV9tcGlfc2V0X29wYXF1ZSAoTlVMTCwgYnVmZmVyLCBidWZsZW4qOCk7CisgIGlmICghYnVmZmVyKQorICAgIGRpZSAoImhleDJtcGlvcGEgJyVzJyBmYWlsZWQ6IHNldF9vcGFxdWUgZXJyb3Ilc1xuIiwgc3RyaW5nKTsKKyAgcmV0dXJuIHZhbDsKK30KKworCisvKiBDb21wYXJlIEEgdG8gQiwgd2hlcmUgQiBpcyBnaXZlbiBhcyBhIGhleCBzdHJpbmcuICAqLworc3RhdGljIGludAorY21wX21waWhleCAoZ2NyeV9tcGlfdCBhLCBjb25zdCBjaGFyICpiKQoreworICBnY3J5X21waV90IGJ2YWw7CisgIGludCByZXM7CisKKyAgaWYgKGdjcnlfbXBpX2dldF9mbGFnIChhLCBHQ1JZTVBJX0ZMQUdfT1BBUVVFKSkKKyAgICBidmFsID0gaGV4Mm1waW9wYSAoYik7CisgIGVsc2UKKyAgICBidmFsID0gaGV4Mm1waSAoYik7CisgIHJlcyA9IGdjcnlfbXBpX2NtcCAoYSwgYnZhbCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGJ2YWwpOworICByZXR1cm4gcmVzOworfQorCisKKy8qIFdyYXBwZXIgdG8gZW11bGF0ZSB0aGUgbGliZ2NyeXB0IGludGVybmFsIEVDIGNvbnRleHQgYWxsb2NhdGlvbgorICAgZnVuY3Rpb24uICAqLworc3RhdGljIGdwZ19lcnJvcl90CitlY19wX25ldyAoZ2NyeV9jdHhfdCAqcl9jdHgsIGdjcnlfbXBpX3QgcCwgZ2NyeV9tcGlfdCBhKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IHNleHA7CisKKyAgaWYgKHAgJiYgYSkKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzZXhwLCBOVUxMLCAiKGVjZHNhIChwICVtKShhICVtKSkiLCBwLCBhKTsKKyAgZWxzZSBpZiAocCkKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzZXhwLCBOVUxMLCAiKGVjZHNhIChwICVtKSkiLCBwKTsKKyAgZWxzZSBpZiAoYSkKKyAgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKCZzZXhwLCBOVUxMLCAiKGVjZHNhIChhICVtKSkiLCBhKTsKKyAgZWxzZQorICAgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJnNleHAsIE5VTEwsICIoZWNkc2EpIik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gZ2NyeV9tcGlfZWNfbmV3IChyX2N0eCwgc2V4cCwgTlVMTCk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzZXhwKTsKKyAgcmV0dXJuIGVycjsKK30KKworCisMCitzdGF0aWMgdm9pZAorc2V0X2dldF9wb2ludCAodm9pZCkKK3sKKyAgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludDsKKyAgZ2NyeV9tcGlfdCB4LCB5LCB6OworCisgIHdoZXJlc3RyID0gInNldF9nZXRfcG9pbnQiOworICBzaG93ICgiY2hlY2tpbmcgcG9pbnQgc2V0dGluZyBmdW5jdGlvbnNcbiIpOworCisgIHBvaW50ID0gZ2NyeV9tcGlfcG9pbnRfbmV3ICgwKTsKKyAgeCA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMTcpOworICB5ID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCA0Mik7CisgIHogPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDExMzcxKTsKKyAgZ2NyeV9tcGlfcG9pbnRfZ2V0ICh4LCB5LCB6LCBwb2ludCk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKHgsIDApCisgICAgICB8fCBnY3J5X21waV9jbXBfdWkgKHksIDApIHx8IGdjcnlfbXBpX2NtcF91aSAoeiwgMCkpCisgICAgZmFpbCAoIm5ldyBwb2ludCBub3QgaW5pdGlhbGl6ZWQgdG8gKDAsMCwwKVxuIik7CisgIGdjcnlfbXBpX3BvaW50X3NuYXRjaF9nZXQgKHgsIHksIHosIHBvaW50KTsKKyAgcG9pbnQgPSBOVUxMOworICBpZiAoZ2NyeV9tcGlfY21wX3VpICh4LCAwKQorICAgICAgfHwgZ2NyeV9tcGlfY21wX3VpICh5LCAwKSB8fCBnY3J5X21waV9jbXBfdWkgKHosIDApKQorICAgIGZhaWwgKCJzbmF0Y2hfZ2V0IGZhaWxlZFxuIik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworICBnY3J5X21waV9yZWxlYXNlICh5KTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeik7CisKKyAgcG9pbnQgPSBnY3J5X21waV9wb2ludF9uZXcgKDApOworICB4ID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCAxNyk7CisgIHkgPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDQyKTsKKyAgeiA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMTEzNzEpOworICBnY3J5X21waV9wb2ludF9zZXQgKHBvaW50LCB4LCB5LCB6KTsKKyAgZ2NyeV9tcGlfc2V0X3VpICh4LCAyMyk7CisgIGdjcnlfbXBpX3NldF91aSAoeSwgMjQpOworICBnY3J5X21waV9zZXRfdWkgKHosIDI1KTsKKyAgZ2NyeV9tcGlfcG9pbnRfZ2V0ICh4LCB5LCB6LCBwb2ludCk7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKHgsIDE3KQorICAgICAgfHwgZ2NyeV9tcGlfY21wX3VpICh5LCA0MikgfHwgZ2NyeV9tcGlfY21wX3VpICh6LCAxMTM3MSkpCisgICAgZmFpbCAoInBvaW50X3NldC9wb2ludF9nZXQgZmFpbGVkXG4iKTsKKyAgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX3NldCAocG9pbnQsIHgsIHksIHopOworICB4ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgeSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHogPSBnY3J5X21waV9uZXcgKDApOworICBnY3J5X21waV9wb2ludF9nZXQgKHgsIHksIHosIHBvaW50KTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAoeCwgMTcpCisgICAgICB8fCBnY3J5X21waV9jbXBfdWkgKHksIDQyKSB8fCBnY3J5X21waV9jbXBfdWkgKHosIDExMzcxKSkKKyAgICBmYWlsICgicG9pbnRfc25hdGNoX3NldC9wb2ludF9nZXQgZmFpbGVkXG4iKTsKKworICBnY3J5X21waV9wb2ludF9yZWxlYXNlIChwb2ludCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworICBnY3J5X21waV9yZWxlYXNlICh5KTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeik7Cit9CisKKworc3RhdGljIHZvaWQKK2NvbnRleHRfYWxsb2MgKHZvaWQpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9jdHhfdCBjdHg7CisgIGdjcnlfbXBpX3QgcCwgYTsKKworICB3aGVyZXN0ciA9ICJjb250ZXh0X2FsbG9jIjsKKyAgc2hvdyAoImNoZWNraW5nIGNvbnRleHQgZnVuY3Rpb25zXG4iKTsKKworICBwID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCAxKTsKKyAgYSA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMSk7CisgIGVyciA9IGVjX3BfbmV3ICgmY3R4LCBwLCBhKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJlY19wX25ldyByZXR1cm5lZCBhbiBlcnJvcjogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHApOworICBnY3J5X21waV9yZWxlYXNlIChhKTsKKyAgZ2NyeV9jdHhfcmVsZWFzZSAoY3R4KTsKKworICBwID0gZ2NyeV9tcGlfc2V0X3VpIChOVUxMLCAwKTsKKyAgYSA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMCk7CisgIGVyciA9IGVjX3BfbmV3ICgmY3R4LCBwLCBhKTsKKyAgaWYgKCFlcnIgfHwgZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfRUlOVkFMKQorICAgIGZhaWwgKCJlY19wX25ldzogYmFkIHBhcmFtZXRlciBkZXRlY3Rpb24gZmFpbGVkICgxKVxuIik7CisKKyAgZ2NyeV9tcGlfc2V0X3VpIChwLCAxKTsKKyAgZXJyID0gZWNfcF9uZXcgKCZjdHgsIHAsIGEpOworICBpZiAoIWVyciB8fCBncGdfZXJyX2NvZGUgKGVycikgIT0gR1BHX0VSUl9FSU5WQUwpCisgICAgZmFpbCAoImVjX3BfbmV3OiBiYWQgcGFyYW1ldGVyIGRldGVjdGlvbiBmYWlsZWQgKDIpXG4iKTsKKworICBnY3J5X21waV9yZWxlYXNlIChwKTsKKyAgcCA9IE5VTEw7CisgIGVyciA9IGVjX3BfbmV3ICgmY3R4LCBwLCBhKTsKKyAgaWYgKCFlcnIgfHwgZ3BnX2Vycl9jb2RlIChlcnIpICE9IEdQR19FUlJfRUlOVkFMKQorICAgIGZhaWwgKCJlY19wX25ldzogYmFkIHBhcmFtZXRlciBkZXRlY3Rpb24gZmFpbGVkICgzKVxuIik7CisKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoYSk7CisgIGEgPSBOVUxMOworICBlcnIgPSBlY19wX25ldyAoJmN0eCwgcCwgYSk7CisgIGlmICghZXJyIHx8IGdwZ19lcnJfY29kZSAoZXJyKSAhPSBHUEdfRVJSX0VJTlZBTCkKKyAgICBmYWlsICgiZWNfcF9uZXc6IGJhZCBwYXJhbWV0ZXIgZGV0ZWN0aW9uIGZhaWxlZCAoNClcbiIpOworCit9CisKKworc3RhdGljIGludAorZ2V0X2FuZF9jbXBfbXBpIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptcGlzdHJpbmcsIGNvbnN0IGNoYXIgKmRlc2MsCisgICAgICAgICAgICAgICAgIGdjcnlfY3R4X3QgY3R4KQoreworICBnY3J5X21waV90IG1waTsKKworICBtcGkgPSBnY3J5X21waV9lY19nZXRfbXBpIChuYW1lLCBjdHgsIDEpOworICBpZiAoIW1waSkKKyAgICB7CisgICAgICBmYWlsICgiZXJyb3IgZ2V0dGluZyBwYXJhbWV0ZXIgJyVzJyBvZiBjdXJ2ZSAnJXMnXG4iLCBuYW1lLCBkZXNjKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgaWYgKGRlYnVnKQorICAgIHByaW50X21waSAobmFtZSwgbXBpKTsKKyAgaWYgKGNtcF9tcGloZXggKG1waSwgbXBpc3RyaW5nKSkKKyAgICB7CisgICAgICBmYWlsICgicGFyYW1ldGVyICclcycgb2YgY3VydmUgJyVzJyBkb2VzIG5vdCBtYXRjaFxuIiwgbmFtZSwgZGVzYyk7CisgICAgICBnY3J5X21waV9yZWxlYXNlIChtcGkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBnY3J5X21waV9yZWxlYXNlIChtcGkpOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitnZXRfYW5kX2NtcF9wb2ludCAoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptcGlfeF9zdHJpbmcsIGNvbnN0IGNoYXIgKm1waV95X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjLCBnY3J5X2N0eF90IGN0eCkKK3sKKyAgZ2NyeV9tcGlfcG9pbnRfdCBwb2ludDsKKyAgZ2NyeV9tcGlfdCB4LCB5LCB6OworICBpbnQgcmVzdWx0ID0gMDsKKworICBwb2ludCA9IGdjcnlfbXBpX2VjX2dldF9wb2ludCAobmFtZSwgY3R4LCAxKTsKKyAgaWYgKCFwb2ludCkKKyAgICB7CisgICAgICBmYWlsICgiZXJyb3IgZ2V0dGluZyBwb2ludCBwYXJhbWV0ZXIgJyVzJyBvZiBjdXJ2ZSAnJXMnXG4iLCBuYW1lLCBkZXNjKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgaWYgKGRlYnVnKQorICAgIHByaW50X3BvaW50IChuYW1lLCBwb2ludCk7CisKKyAgeCA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHkgPSBnY3J5X21waV9uZXcgKDApOworICB6ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCAoeCwgeSwgeiwgcG9pbnQpOworICBpZiAoY21wX21waWhleCAoeCwgbXBpX3hfc3RyaW5nKSkKKyAgICB7CisgICAgICBmYWlsICgieCBjb29yZGluYXRlIG9mICclcycgb2YgY3VydmUgJyVzJyBkb2VzIG5vdCBtYXRjaFxuIiwgbmFtZSwgZGVzYyk7CisgICAgICByZXN1bHQgPSAxOworICAgIH0KKyAgaWYgKGNtcF9tcGloZXggKHksIG1waV95X3N0cmluZykpCisgICAgeworICAgICAgZmFpbCAoInkgY29vcmRpbmF0ZSBvZiAnJXMnIG9mIGN1cnZlICclcycgZG9lcyBub3QgbWF0Y2hcbiIsIG5hbWUsIGRlc2MpOworICAgICAgcmVzdWx0ID0gMTsKKyAgICB9CisgIGlmIChjbXBfbXBpaGV4ICh6LCAiMDEiKSkKKyAgICB7CisgICAgICBmYWlsICgieiBjb29yZGluYXRlIG9mICclcycgb2YgY3VydmUgJyVzJyBpcyBub3QgMVxuIiwgbmFtZSwgZGVzYyk7CisgICAgICByZXN1bHQgPSAxOworICAgIH0KKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeCk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHkpOworICBnY3J5X21waV9yZWxlYXNlICh6KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZAorY29udGV4dF9wYXJhbSAodm9pZCkKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBpbnQgaWR4OworICBnY3J5X2N0eF90IGN0eCA9IE5VTEw7CisgIGdjcnlfbXBpX3QgcSwgZDsKKyAgZ2NyeV9zZXhwX3Qga2V5cGFyYW07CisKKyAgd2hlcmVzdHIgPSAiY29udGV4dF9wYXJhbSI7CisKKyAgc2hvdyAoImNoZWNraW5nIHN0YW5kYXJkIGN1cnZlc1xuIik7CisgIGZvciAoaWR4PTA7IHRlc3RfY3VydmVbaWR4XS5kZXNjOyBpZHgrKykKKyAgICB7CisgICAgICBnY3J5X2N0eF9yZWxlYXNlIChjdHgpOworICAgICAgZXJyID0gZ2NyeV9tcGlfZWNfbmV3ICgmY3R4LCBOVUxMLCB0ZXN0X2N1cnZlW2lkeF0uZGVzYyk7CisgICAgICBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImNhbid0IGNyZWF0ZSBjb250ZXh0IGZvciBjdXJ2ZSAnJXMnOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB0ZXN0X2N1cnZlW2lkeF0uZGVzYywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKGdldF9hbmRfY21wX21waSAoInAiLCB0ZXN0X2N1cnZlW2lkeF0ucCwgdGVzdF9jdXJ2ZVtpZHhdLmRlc2MsIGN0eCkpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKGdldF9hbmRfY21wX21waSAoImEiLCB0ZXN0X2N1cnZlW2lkeF0uYSwgdGVzdF9jdXJ2ZVtpZHhdLmRlc2MsIGN0eCkpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKGdldF9hbmRfY21wX21waSAoImIiLCB0ZXN0X2N1cnZlW2lkeF0uYiwgdGVzdF9jdXJ2ZVtpZHhdLmRlc2MsIGN0eCkpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKGdldF9hbmRfY21wX21waSAoImcueCIsdGVzdF9jdXJ2ZVtpZHhdLmdfeCwgdGVzdF9jdXJ2ZVtpZHhdLmRlc2MsY3R4KSkKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAoZ2V0X2FuZF9jbXBfbXBpICgiZy55Iix0ZXN0X2N1cnZlW2lkeF0uZ195LCB0ZXN0X2N1cnZlW2lkeF0uZGVzYyxjdHgpKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGlmIChnZXRfYW5kX2NtcF9tcGkgKCJuIiwgdGVzdF9jdXJ2ZVtpZHhdLm4sIHRlc3RfY3VydmVbaWR4XS5kZXNjLCBjdHgpKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGlmIChnZXRfYW5kX2NtcF9wb2ludCAoImciLCB0ZXN0X2N1cnZlW2lkeF0uZ194LCB0ZXN0X2N1cnZlW2lkeF0uZ195LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2N1cnZlW2lkeF0uZGVzYywgY3R4KSkKKyAgICAgICAgY29udGludWU7CisKKyAgICB9CisKKyAgc2hvdyAoImNoZWNraW5nIHNhbXBsZSBwdWJsaWMga2V5IChuaXN0cDI1NilcbiIpOworICBxID0gaGV4Mm1waSAoc2FtcGxlX3AyNTZfcSk7CisgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmtleXBhcmFtLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIihwdWJsaWMta2V5KGVjYyhjdXJ2ZSAlcykocSAlbSkpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiTklTVCBQLTI1NiIsIHEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfc2V4cF9idWlsZCBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICBnY3J5X21waV9yZWxlYXNlIChxKTsKKworICAvKiBXZSBjYW4ndCBjYWxsIGdjcnlfcGtfdGVzdGtleSBiZWNhdXNlIGl0IGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yCisgICAgIHByaXZhdGUga2V5cy4gICovCisgIC8qIGVyciA9IGdjcnlfcGtfdGVzdGtleSAoa2V5cGFyYW0pOyAqLworICAvKiBpZiAoZXJyKSAqLworICAvKiAgIGZhaWwgKCJnY3J5X3BrX3Rlc3RrZXkgZmFpbGVkIGZvciBzYW1wbGUgcHVibGljIGtleTogJXNcbiIsICovCisgIC8qICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsgKi8KKworICBnY3J5X2N0eF9yZWxlYXNlIChjdHgpOworICBlcnIgPSBnY3J5X21waV9lY19uZXcgKCZjdHgsIGtleXBhcmFtLCBOVUxMKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgiZ2NyeV9tcGlfZWNfbmV3IGZhaWxlZCBmb3Igc2FtcGxlIHB1YmxpYyBrZXkgKG5pc3RwMjU2KTogJXNcbiIsCisgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGdjcnlfc2V4cF90IHNleHA7CisKKyAgICAgIGdldF9hbmRfY21wX21waSAoInEiLCBzYW1wbGVfcDI1Nl9xLCAibmlzdHAyNTYiLCBjdHgpOworICAgICAgZ2V0X2FuZF9jbXBfcG9pbnQgKCJxIiwgc2FtcGxlX3AyNTZfcV94LCBzYW1wbGVfcDI1Nl9xX3ksICJuaXN0cDI1NiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3R4KTsKKworICAgICAgLyogRGVsZXRlIFEuICAqLworICAgICAgZXJyID0gZ2NyeV9tcGlfZWNfc2V0X21waSAoInEiLCBOVUxMLCBjdHgpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImNsZWFyaW5nIFEgZm9yIG5pc3RwMjU2IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBpZiAoZ2NyeV9tcGlfZWNfZ2V0X21waSAoInEiLCBjdHgsIDApKQorICAgICAgICBmYWlsICgiY2xlYXJpbmcgUSBmb3IgbmlzdHAyNTYgZGlkIG5vdCB3b3JrXG4iKTsKKworICAgICAgLyogU2V0IFEgYWdhaW4uICAqLworICAgICAgcSA9IGhleDJtcGkgKHNhbXBsZV9wMjU2X3EpOworICAgICAgZXJyID0gZ2NyeV9tcGlfZWNfc2V0X21waSAoInEiLCBxLCBjdHgpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoInNldHRpbmcgUSBmb3IgbmlzdHAyNTYgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdldF9hbmRfY21wX21waSAoInEiLCBzYW1wbGVfcDI1Nl9xLCAibmlzdHAyNTYoMikiLCBjdHgpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAocSk7CisKKyAgICAgIC8qIEdldCBhcyBzLWV4cHJlc3Npb24uICAqLworICAgICAgZXJyID0gZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKCZzZXhwLCAwLCBjdHgpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoImdjcnlfcHVia2V5X2dldF9zZXhwKDApIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBlbHNlIGlmIChkZWJ1ZykKKyAgICAgICAgcHJpbnRfc2V4cCAoIlJlc3VsdCBvZiBnY3J5X3B1YmtleV9nZXRfc2V4cCAoMCk6XG4iLCBzZXhwKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZXhwKTsKKworICAgICAgZXJyID0gZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKCZzZXhwLCBHQ1JZX1BLX0dFVF9QVUJLRVksIGN0eCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgiZ2NyeV9wdWJrZXlfZ2V0X3NleHAoR0VUX1BVQktFWSkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UgaWYgKGRlYnVnKQorICAgICAgICBwcmludF9zZXhwICgiUmVzdWx0IG9mIGdjcnlfcHVia2V5X2dldF9zZXhwIChHRVRfUFVCS0VZKTpcbiIsIHNleHApOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNleHApOworCisgICAgICBlcnIgPSBnY3J5X3B1YmtleV9nZXRfc2V4cCAoJnNleHAsIEdDUllfUEtfR0VUX1NFQ0tFWSwgY3R4KTsKKyAgICAgIGlmIChncGdfZXJyX2NvZGUgKGVycikgIT0gR1BHX0VSUl9OT19TRUNLRVkpCisgICAgICAgIGZhaWwgKCJnY3J5X3B1YmtleV9nZXRfc2V4cChHRVRfU0VDS0VZKSByZXR1cm5lZCB3cm9uZyBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisgICAgfQorCisgIHNob3cgKCJjaGVja2luZyBzYW1wbGUgcHVibGljIGtleSAoRWQyNTUxOSlcbiIpOworICBxID0gaGV4Mm1waSAoc2FtcGxlX2VkMjU1MTlfcSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChrZXlwYXJhbSk7CisgIGVyciA9IGdjcnlfc2V4cF9idWlsZCAoJmtleXBhcmFtLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIihwdWJsaWMta2V5KGVjYyhjdXJ2ZSAlcykoZmxhZ3MgZWRkc2EpKHEgJW0pKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVkMjU1MTkiLCBxKTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X3NleHBfYnVpbGQgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAocSk7CisKKyAgLyogV2UgY2FuJ3QgY2FsbCBnY3J5X3BrX3Rlc3RrZXkgYmVjYXVzZSBpdCBpcyBvbmx5IGltcGxlbWVudGVkIGZvcgorICAgICBwcml2YXRlIGtleXMuICAqLworICAvKiBlcnIgPSBnY3J5X3BrX3Rlc3RrZXkgKGtleXBhcmFtKTsgKi8KKyAgLyogaWYgKGVycikgKi8KKyAgLyogICBmYWlsICgiZ2NyeV9wa190ZXN0a2V5IGZhaWxlZCBmb3Igc2FtcGxlIHB1YmxpYyBrZXk6ICVzXG4iLCAqLworICAvKiAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7ICovCisKKyAgZ2NyeV9jdHhfcmVsZWFzZSAoY3R4KTsKKyAgZXJyID0gZ2NyeV9tcGlfZWNfbmV3ICgmY3R4LCBrZXlwYXJhbSwgTlVMTCk7CisgIGlmIChlcnIpCisgICAgZmFpbCAoImdjcnlfbXBpX2VjX25ldyBmYWlsZWQgZm9yIHNhbXBsZSBwdWJsaWMga2V5OiAlc1xuIiwKKyAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICBlbHNlCisgICAgeworICAgICAgZ2NyeV9zZXhwX3Qgc2V4cDsKKworICAgICAgZ2V0X2FuZF9jbXBfbXBpICgicSIsIHNhbXBsZV9lZDI1NTE5X3EsICJFZDI1NTE5IiwgY3R4KTsKKyAgICAgIGdldF9hbmRfY21wX3BvaW50ICgicSIsIHNhbXBsZV9lZDI1NTE5X3FfeCwgc2FtcGxlX2VkMjU1MTlfcV95LAorICAgICAgICAgICAgICAgICAgICAgICAgICJFZDI1NTE5IiwgY3R4KTsKKyAgICAgIGdldF9hbmRfY21wX21waSAoInFAZWRkc2EiLCBzYW1wbGVfZWQyNTUxOV9xX2VkZHNhLCAiRWQyNTUxOSIsIGN0eCk7CisKKyAgICAgIC8qIFNldCBkIHRvIHNlZSB3aGV0aGVyIFEgaXMgY29ycmVjdGx5IHJlLWNvbXB1dGVkLiAgKi8KKyAgICAgIGQgPSBoZXgybXBpIChzYW1wbGVfZWQyNTUxOV9kKTsKKyAgICAgIGVyciA9IGdjcnlfbXBpX2VjX3NldF9tcGkgKCJkIiwgZCwgY3R4KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJzZXR0aW5nIGQgZm9yIEVkMjU1MTkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKGQpOworICAgICAgZ2V0X2FuZF9jbXBfbXBpICgicSIsIHNhbXBsZV9lZDI1NTE5X3EsICJFZDI1NTE5KHJlY29tcHV0ZSBRKSIsIGN0eCk7CisKKyAgICAgIC8qIERlbGV0ZSBRIGJ5IHNldHRpbmcgZCBhbmQgdGhlbiBjbGVhcmluZyBkLiAgVGhlIGNsZWFyaW5nIGlzCisgICAgICAgICByZXF1aXJlZCBzbyB0aGF0IHdlIGNhbiBjaGVjayB3aGV0aGVyIFEgaGFzIGJlZW4gY2xlYXJlZCBhbmQKKyAgICAgICAgIGJlY2F1c2UgZnVydGhlciB0ZXN0cyBvbmx5IGV4cGVjdCBhIHB1YmxpYyBrZXkuICAqLworICAgICAgZCA9IGhleDJtcGkgKHNhbXBsZV9lZDI1NTE5X2QpOworICAgICAgZXJyID0gZ2NyeV9tcGlfZWNfc2V0X21waSAoImQiLCBkLCBjdHgpOworICAgICAgaWYgKGVycikKKyAgICAgICAgZmFpbCAoInNldHRpbmcgZCBmb3IgRWQyNTUxOSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoZCk7CisgICAgICBlcnIgPSBnY3J5X21waV9lY19zZXRfbXBpICgiZCIsIE5VTEwsIGN0eCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgic2V0dGluZyBkIGZvciBFZDI1NTE5IGZhaWxlZCgyKTogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICBpZiAoZ2NyeV9tcGlfZWNfZ2V0X21waSAoInEiLCBjdHgsIDApKQorICAgICAgICBmYWlsICgic2V0dGluZyBkIGZvciBFZDI1NTE5IGRpZCBub3QgcmVzZXQgUVxuIik7CisKKyAgICAgIC8qIFNldCBRIGFnYWluLiAgV2UgbmVlZCB0byB1c2UgYW4gb3BhcXVlIE1QSSBoZXJlIGJlY2F1c2UKKyAgICAgICAgIHNhbXBsZV9lZDI1NTE5X3EgaXMgaW4gdW5jb21wcmVzc2VkIGZvcm1hdCB3aGljaCBjYW4gb25seSBiZQorICAgICAgICAgYXV0by1kZXRlY3RlZCBpZiBwYXNzZWQgb3BhcXVlLiAgKi8KKyAgICAgIHEgPSBoZXgybXBpb3BhIChzYW1wbGVfZWQyNTUxOV9xKTsKKyAgICAgIGVyciA9IGdjcnlfbXBpX2VjX3NldF9tcGkgKCJxIiwgcSwgY3R4KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJzZXR0aW5nIFEgZm9yIEVkMjU1MTkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKHEpOworICAgICAgZ2V0X2FuZF9jbXBfbXBpICgicSIsIHNhbXBsZV9lZDI1NTE5X3EsICJFZDI1NTE5KDIpIiwgY3R4KTsKKworICAgICAgLyogR2V0IGFzIHMtZXhwcmVzc2lvbi4gICovCisgICAgICBlcnIgPSBnY3J5X3B1YmtleV9nZXRfc2V4cCAoJnNleHAsIDAsIGN0eCk7CisgICAgICBpZiAoZXJyKQorICAgICAgICBmYWlsICgiZ2NyeV9wdWJrZXlfZ2V0X3NleHAoMCkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGVsc2UgaWYgKGRlYnVnKQorICAgICAgICBwcmludF9zZXhwICgiUmVzdWx0IG9mIGdjcnlfcHVia2V5X2dldF9zZXhwICgwKTpcbiIsIHNleHApOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNleHApOworCisgICAgICBlcnIgPSBnY3J5X3B1YmtleV9nZXRfc2V4cCAoJnNleHAsIEdDUllfUEtfR0VUX1BVQktFWSwgY3R4KTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGZhaWwgKCJnY3J5X3B1YmtleV9nZXRfc2V4cChHRVRfUFVCS0VZKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZWxzZSBpZiAoZGVidWcpCisgICAgICAgIHByaW50X3NleHAgKCJSZXN1bHQgb2YgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKEdFVF9QVUJLRVkpOlxuIiwgc2V4cCk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisKKyAgICAgIGVyciA9IGdjcnlfcHVia2V5X2dldF9zZXhwICgmc2V4cCwgR0NSWV9QS19HRVRfU0VDS0VZLCBjdHgpOworICAgICAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSAhPSBHUEdfRVJSX05PX1NFQ0tFWSkKKyAgICAgICAgZmFpbCAoImdjcnlfcHVia2V5X2dldF9zZXhwKEdFVF9TRUNLRVkpIHJldHVybmVkIHdyb25nIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzZXhwKTsKKworICAgIH0KKworICBnY3J5X2N0eF9yZWxlYXNlIChjdHgpOworICBnY3J5X3NleHBfcmVsZWFzZSAoa2V5cGFyYW0pOworfQorCisKKworCisvKiBDcmVhdGUgYSBuZXcgcG9pbnQgZnJvbSAoWCxZLFopIGdpdmVuIGFzIGhleCBzdHJpbmdzLiAgKi8KK2djcnlfbXBpX3BvaW50X3QKK21ha2VfcG9pbnQgKGNvbnN0IGNoYXIgKngsIGNvbnN0IGNoYXIgKnksIGNvbnN0IGNoYXIgKnopCit7CisgIGdjcnlfbXBpX3BvaW50X3QgcG9pbnQ7CisKKyAgcG9pbnQgPSBnY3J5X21waV9wb2ludF9uZXcgKDApOworICBnY3J5X21waV9wb2ludF9zbmF0Y2hfc2V0IChwb2ludCwgaGV4Mm1waSAoeCksIGhleDJtcGkgKHkpLCBoZXgybXBpICh6KSk7CisKKyAgcmV0dXJuIHBvaW50OworfQorCisKKy8qIFRoaXMgdGVzdHMgY2hlY2tzIHRoYXQgdGhlIGxvdy1sZXZlbCBFQyBBUEkgeWllbGRzIHRoZSBzYW1lIHJlc3VsdAorICAgYXMgdXNpbmcgdGhlIGhpZ2ggbGV2ZWwgQVBJLiAgVGhlIHZhbHVlcyBoYXZlIGJlZW4gdGFrZW4gZnJvbSBhCisgICB0ZXN0IHJ1biB1c2luZyB0aGUgaGlnaCBsZXZlbCBBUEkuICAqLworc3RhdGljIHZvaWQKK2Jhc2ljX2VjX21hdGggKHZvaWQpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9jdHhfdCBjdHg7CisgIGdjcnlfbXBpX3QgUCwgQTsKKyAgZ2NyeV9tcGlfcG9pbnRfdCBHLCBROworICBnY3J5X21waV90IGQ7CisgIGdjcnlfbXBpX3QgeCwgeSwgejsKKworICB3aGVyZXN0ciA9ICJiYXNpY19lY19tYXRoIjsKKyAgc2hvdyAoImNoZWNraW5nIGJhc2ljIG1hdGggZnVuY3Rpb25zIGZvciBFQ1xuIik7CisKKyAgUCA9IGhleDJtcGkgKCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZmZmZiIpOworICBBID0gaGV4Mm1waSAoIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZmZmZjIik7CisgIEcgPSBtYWtlX3BvaW50ICgiMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyIiwKKyAgICAgICAgICAgICAgICAgICI3MTkyQjk1RkZDOERBNzg2MzEwMTFFRDZCMjRDREQ1NzNGOTc3QTExRTc5NDgxMSIsCisgICAgICAgICAgICAgICAgICAiMSIpOworICBkID0gaGV4Mm1waSAoIkQ0RUYyN0UzMkY4QUQ4RTJBMUM2RERFQkIxRDIzNUE2OUUzQ0VGOUJDRTkwMjczRCIpOworICBRID0gZ2NyeV9tcGlfcG9pbnRfbmV3ICgwKTsKKworICBlcnIgPSBlY19wX25ldyAoJmN0eCwgUCwgQSk7CisgIGlmIChlcnIpCisgICAgZGllICgiZWNfcF9uZXcgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKworICB4ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgeSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHogPSBnY3J5X21waV9uZXcgKDApOworCisgIHsKKyAgICAvKiBBIHF1aWNrIGNoZWNrIHRoYXQgbXVsdGlwbHkgYnkgemVybyB3b3Jrcy4gICovCisgICAgZ2NyeV9tcGlfdCB0bXA7CisKKyAgICB0bXAgPSBnY3J5X21waV9uZXcgKDApOworICAgIGdjcnlfbXBpX2VjX211bCAoUSwgdG1wLCBHLCBjdHgpOworICAgIGdjcnlfbXBpX3JlbGVhc2UgKHRtcCk7CisgICAgZ2NyeV9tcGlfcG9pbnRfZ2V0ICh4LCB5LCB6LCBRKTsKKyAgICBpZiAoZ2NyeV9tcGlfY21wX3VpICh4LCAwKSB8fCBnY3J5X21waV9jbXBfdWkgKHksIDApCisgICAgICAgIHx8IGdjcnlfbXBpX2NtcF91aSAoeiwgMCkpCisgICAgICBmYWlsICgibXVsdGlwbHkgYSBwb2ludCBieSB6ZXJvIGZhaWxlZFxuIik7CisgIH0KKworICBnY3J5X21waV9lY19tdWwgKFEsIGQsIEcsIGN0eCk7CisgIGdjcnlfbXBpX3BvaW50X2dldCAoeCwgeSwgeiwgUSk7CisgIGlmIChjbXBfbXBpaGV4ICh4LCAiMjIyRDlFQzcxN0M4OUQwNDdFMDg5OEM5MTg1QjAzM0NEMTFDMEE5ODFFRTZEQzY2IikKKyAgICAgIHx8IGNtcF9tcGloZXggKHksICI2MDVERTBBODJENzBEM0UwRjg0QTEyN0QwNzM5RUQzM0Q2NTdERjBEMDU0QkZERTgiKQorICAgICAgfHwgY21wX21waWhleCAoeiwgIjAwQjA2QjUxOTA3MUJDNTM2OTk5QUM4RjJEMzkzNEIzQzFGQzlFQUNDRDBBMzFGODhGIikpCisgICAgZmFpbCAoImNvbXB1dGVkIHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2hcbiIpOworICBpZiAoZGVidWcpCisgICAgeworICAgICAgcHJpbnRfbXBpICgiUS54IiwgeCk7CisgICAgICBwcmludF9tcGkgKCJRLnkiLCB5KTsKKyAgICAgIHByaW50X21waSAoIlEueiIsIHopOworICAgIH0KKworICBpZiAoZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgUSwgY3R4KSkKKyAgICBmYWlsICgiZmFpbGVkIHRvIGdldCBhZmZpbmUgY29vcmRpbmF0ZXNcbiIpOworICBpZiAoY21wX21waWhleCAoeCwgIjAwODUzMjA5M0JBMDIzRjRENTVDMDQyNEZBM0FGOTM2N0UwNUYzMDlEQzM0Q0RDM0ZFIikKKyAgICAgIHx8IGNtcF9tcGloZXggKHksICIwMEMxM0NBOUU2MTdDNkM4NDg3QkZGNkE3MjZFM0M0RjI3NzkxM0Q5NzExNzkzOTk2NiIpKQorICAgIGZhaWwgKCJjb21wdXRlZCBhZmZpbmUgY29vcmRpbmF0ZXMgb2YgcHVibGljIGtleSBkbyBub3QgbWF0Y2hcbiIpOworICBpZiAoZGVidWcpCisgICAgeworICAgICAgcHJpbnRfbXBpICgicS54IiwgeCk7CisgICAgICBwcmludF9tcGkgKCJxLnkiLCB5KTsKKyAgICB9CisKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHkpOworICBnY3J5X21waV9yZWxlYXNlICh4KTsKKyAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoUSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGQpOworICBnY3J5X21waV9wb2ludF9yZWxlYXNlIChHKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoQSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKFApOworICBnY3J5X2N0eF9yZWxlYXNlIChjdHgpOworfQorCisKKy8qIFRoaXMgaXMgdGhlIHNhbWUgYXMgYmFzaWNfZWNfbWF0aCBidXQgdXNlcyBtb3JlIGFkdmFuY2VkCisgICBmZWF0dXJlcy4gICovCitzdGF0aWMgdm9pZAorYmFzaWNfZWNfbWF0aF9zaW1wbGlmaWVkICh2b2lkKQoreworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfY3R4X3QgY3R4OworICBnY3J5X21waV9wb2ludF90IEcsIFE7CisgIGdjcnlfbXBpX3QgZDsKKyAgZ2NyeV9tcGlfdCB4LCB5LCB6OworICBnY3J5X3NleHBfdCBzZXhwOworCisgIHdoZXJlc3RyID0gImJhc2ljX2VjX21hdGhfc2ltcGxpZmllZCI7CisgIHNob3cgKCJjaGVja2luZyBiYXNpYyBtYXRoIGZ1bmN0aW9ucyBmb3IgRUMgKHZhcmlhbnQpXG4iKTsKKworICBkID0gaGV4Mm1waSAoIkQ0RUYyN0UzMkY4QUQ4RTJBMUM2RERFQkIxRDIzNUE2OUUzQ0VGOUJDRTkwMjczRCIpOworICBRID0gZ2NyeV9tcGlfcG9pbnRfbmV3ICgwKTsKKworICBlcnIgPSBnY3J5X21waV9lY19uZXcgKCZjdHgsIE5VTEwsICJOSVNUIFAtMTkyIik7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9tcGlfZWNfbmV3IGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIEcgPSBnY3J5X21waV9lY19nZXRfcG9pbnQgKCJnIiwgY3R4LCAxKTsKKyAgaWYgKCFHKQorICAgIGRpZSAoImdjcnlfbXBpX2VjX2dldF9wb2ludChHKSBmYWlsZWRcbiIpOworICBnY3J5X21waV9lY19tdWwgKFEsIGQsIEcsIGN0eCk7CisKKyAgeCA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHkgPSBnY3J5X21waV9uZXcgKDApOworICB6ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgZ2NyeV9tcGlfcG9pbnRfZ2V0ICh4LCB5LCB6LCBRKTsKKyAgaWYgKGNtcF9tcGloZXggKHgsICIyMjJEOUVDNzE3Qzg5RDA0N0UwODk4QzkxODVCMDMzQ0QxMUMwQTk4MUVFNkRDNjYiKQorICAgICAgfHwgY21wX21waWhleCAoeSwgIjYwNURFMEE4MkQ3MEQzRTBGODRBMTI3RDA3MzlFRDMzRDY1N0RGMEQwNTRCRkRFOCIpCisgICAgICB8fCBjbXBfbXBpaGV4ICh6LCAiMDBCMDZCNTE5MDcxQkM1MzY5OTlBQzhGMkQzOTM0QjNDMUZDOUVBQ0NEMEEzMUY4OEYiKSkKKyAgICBmYWlsICgiY29tcHV0ZWQgcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaFxuIik7CisgIGlmIChkZWJ1ZykKKyAgICB7CisgICAgICBwcmludF9tcGkgKCJRLngiLCB4KTsKKyAgICAgIHByaW50X21waSAoIlEueSIsIHkpOworICAgICAgcHJpbnRfbXBpICgiUS56Iiwgeik7CisgICAgfQorCisgIGlmIChnY3J5X21waV9lY19nZXRfYWZmaW5lICh4LCB5LCBRLCBjdHgpKQorICAgIGZhaWwgKCJmYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisgIGlmIChjbXBfbXBpaGV4ICh4LCAiMDA4NTMyMDkzQkEwMjNGNEQ1NUMwNDI0RkEzQUY5MzY3RTA1RjMwOURDMzRDREMzRkUiKQorICAgICAgfHwgY21wX21waWhleCAoeSwgIjAwQzEzQ0E5RTYxN0M2Qzg0ODdCRkY2QTcyNkUzQzRGMjc3OTEzRDk3MTE3OTM5OTY2IikpCisgICAgZmFpbCAoImNvbXB1dGVkIGFmZmluZSBjb29yZGluYXRlcyBvZiBwdWJsaWMga2V5IGRvIG5vdCBtYXRjaFxuIik7CisgIGlmIChkZWJ1ZykKKyAgICB7CisgICAgICBwcmludF9tcGkgKCJxLngiLCB4KTsKKyAgICAgIHByaW50X21waSAoInEueSIsIHkpOworICAgIH0KKworICBnY3J5X21waV9yZWxlYXNlICh6KTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHgpOworCisgIC8qIExldCB1cyBhbHNvIGNoZWNrIHdoZXRoZXIgd2UgY2FuIHVwZGF0ZSB0aGUgY29udGV4dC4gICovCisgIGVyciA9IGdjcnlfbXBpX2VjX3NldF9wb2ludCAoImciLCBHLCBjdHgpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbXBpX2VjX3NldF9wb2ludChHKSBmYWlsZWRcbiIpOworICBlcnIgPSBnY3J5X21waV9lY19zZXRfbXBpICgiZCIsIGQsIGN0eCk7CisgIGlmIChlcnIpCisgICAgZGllICgiZ2NyeV9tcGlfZWNfc2V0X21waShkKSBmYWlsZWRcbiIpOworCisgIC8qIEZJWE1FOiBCZWxvdyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkIFMtZXhwcmVzc2lvbiBpcworICAgICBhcyByZXF1ZXN0ZWQuICBGb3Igbm93IHdlIHVzZSBtYW51YWwgaW5zcGVjdGlvbiB1c2luZyAtLWRlYnVnLiAgKi8KKworICAvKiBEb2VzIGdldF9zZXhwIHJldHVybiB0aGUgcHJpdmF0ZSBrZXk/ICAqLworICBlcnIgPSBnY3J5X3B1YmtleV9nZXRfc2V4cCAoJnNleHAsIDAsIGN0eCk7CisgIGlmIChlcnIpCisgICAgZmFpbCAoImdjcnlfcHVia2V5X2dldF9zZXhwKDApIGZhaWxlZDogJXNcbiIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGVsc2UgaWYgKGRlYnVnKQorICAgIHByaW50X3NleHAgKCJSZXN1bHQgb2YgZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKDApOlxuIiwgc2V4cCk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzZXhwKTsKKworICAvKiBEb2VzIGdldF9zZXhwIHJldHVybiB0aGUgcHVibGljIGtleSBpZiByZXF1ZXN0ZWQ/ICAqLworICBlcnIgPSBnY3J5X3B1YmtleV9nZXRfc2V4cCAoJnNleHAsIEdDUllfUEtfR0VUX1BVQktFWSwgY3R4KTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgiZ2NyeV9wdWJrZXlfZ2V0X3NleHAoR0VUX1BVQktFWSkgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgZWxzZSBpZiAoZGVidWcpCisgICAgcHJpbnRfc2V4cCAoIlJlc3VsdCBvZiBnY3J5X3B1YmtleV9nZXRfc2V4cCAoR0VUX1BVQktFWSk6XG4iLCBzZXhwKTsKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNleHApOworCisgIC8qIERvZXMgZ2V0X3NleHAgcmV0dXJuIHRoZSBwdWJsaWMga2V5IGFmdGVyIGQgaGFzIGJlZW4gZGVsZXRlZD8gICovCisgIGVyciA9IGdjcnlfbXBpX2VjX3NldF9tcGkgKCJkIiwgTlVMTCwgY3R4KTsKKyAgaWYgKGVycikKKyAgICBkaWUgKCJnY3J5X21waV9lY19zZXRfbXBpKGQ9TlVMTCkgZmFpbGVkXG4iKTsKKyAgZXJyID0gZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKCZzZXhwLCAwLCBjdHgpOworICBpZiAoZXJyKQorICAgIGZhaWwgKCJnY3J5X3B1YmtleV9nZXRfc2V4cCgwIHcvbyBkKSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworICBlbHNlIGlmIChkZWJ1ZykKKyAgICBwcmludF9zZXhwICgiUmVzdWx0IG9mIGdjcnlfcHVia2V5X2dldF9zZXhwICgwIHcvbyBkKTpcbiIsIHNleHApOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisKKyAgLyogRG9lcyBnZXRfc2V4cCByZXR1cm4gYW4gZXJyb3IgYWZ0ZXIgZCBoYXMgYmVlbiBkZWxldGVkPyAgKi8KKyAgZXJyID0gZ2NyeV9wdWJrZXlfZ2V0X3NleHAgKCZzZXhwLCBHQ1JZX1BLX0dFVF9TRUNLRVksIGN0eCk7CisgIGlmIChncGdfZXJyX2NvZGUgKGVycikgIT0gR1BHX0VSUl9OT19TRUNLRVkpCisgICAgZmFpbCAoImdjcnlfcHVia2V5X2dldF9zZXhwKEdFVF9TRUNLRVkpIHJldHVybmVkIHdyb25nIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBncGdfc3RyZXJyb3IgKGVycikpOworICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisKKyAgLyogRG9lcyBnZXRfc2V4cCByZXR1cm4gYW4gZXJyb3IgYWZ0ZXIgZCBhbmQgUSBoYXZlIGJlZW4gZGVsZXRlZD8gICovCisgIGVyciA9IGdjcnlfbXBpX2VjX3NldF9wb2ludCAoInEiLCBOVUxMLCBjdHgpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbXBpX2VjX3NldF9wb2ludChxPU5VTEwpIGZhaWxlZFxuIik7CisgIGVyciA9IGdjcnlfcHVia2V5X2dldF9zZXhwICgmc2V4cCwgMCwgY3R4KTsKKyAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSAhPSBHUEdfRVJSX0JBRF9DUllQVF9DVFgpCisgICAgZmFpbCAoImdjcnlfcHVia2V5X2dldF9zZXhwKDAgdy9vIFEsZCkgcmV0dXJuZWQgd3JvbmcgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzZXhwKTsKKworCisgIGdjcnlfbXBpX3BvaW50X3JlbGVhc2UgKFEpOworICBnY3J5X21waV9yZWxlYXNlIChkKTsKKyAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoRyk7CisgIGdjcnlfY3R4X3JlbGVhc2UgKGN0eCk7Cit9CisKKworLyogQ2hlY2sgdGhlIG1hdGggdXNlZCB3aXRoIFR3aXN0ZWQgRWR3YXJkcyBjdXJ2ZXMuICAqLworc3RhdGljIHZvaWQKK3R3aXN0ZWRlZHdhcmRzX21hdGggKHZvaWQpCit7CisgIGdwZ19lcnJvcl90IGVycjsKKyAgZ2NyeV9jdHhfdCBjdHg7CisgIGdjcnlfbXBpX3BvaW50X3QgRywgUTsKKyAgZ2NyeV9tcGlfdCBrOworICBnY3J5X21waV90IHcsIGEsIHgsIHksIHosIHAsIG4sIGIsIEk7CisKKyAgd2hlcmVzdHIgPSAidHdpc3RlZGVkd2FyZHNfbWF0aCI7CisgIHNob3cgKCJjaGVja2luZyBiYXNpYyBUd2lzdGVkIEVkd2FyZHMgbWF0aFxuIik7CisKKyAgZXJyID0gZ2NyeV9tcGlfZWNfbmV3ICgmY3R4LCBOVUxMLCAiRWQyNTUxOSIpOworICBpZiAoZXJyKQorICAgIGRpZSAoImdjcnlfbXBpX2VjX25ldyBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGsgPSBoZXgybXBpCisgICAgKCIyRDM1MDFFNzIzMjM5NjMyODAyNDU0RUU1RERDNDA2RUZCMEJERjE4NDg2QTVCREU5QzAzOTBBOUMyOTg0MDA0IgorICAgICAiRjQ3MjUyQjYyOEM5NTM2MjVCOERFQjVEQkNCOERBOTdBQTQzQTE4OTJEMTFGQTgzNTk2RjQyRTBEODlDQjFCNiIpOworICBHID0gZ2NyeV9tcGlfZWNfZ2V0X3BvaW50ICgiZyIsIGN0eCwgMSk7CisgIGlmICghRykKKyAgICBkaWUgKCJnY3J5X21waV9lY19nZXRfcG9pbnQoRykgZmFpbGVkXG4iKTsKKyAgUSA9IGdjcnlfbXBpX3BvaW50X25ldyAoMCk7CisKKworICB3ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgYSA9IGdjcnlfbXBpX25ldyAoMCk7CisgIHggPSBnY3J5X21waV9uZXcgKDApOworICB5ID0gZ2NyeV9tcGlfbmV3ICgwKTsKKyAgeiA9IGdjcnlfbXBpX25ldyAoMCk7CisgIEkgPSBnY3J5X21waV9uZXcgKDApOworICBwID0gZ2NyeV9tcGlfZWNfZ2V0X21waSAoInAiLCBjdHgsIDEpOworICBuID0gZ2NyeV9tcGlfZWNfZ2V0X21waSAoIm4iLCBjdHgsIDEpOworICBiID0gZ2NyeV9tcGlfZWNfZ2V0X21waSAoImIiLCBjdHgsIDEpOworCisgIC8qIENoZWNrOiAyXntwLTF9IG1vZCBwID09IDEgKi8KKyAgZ2NyeV9tcGlfc3ViX3VpIChhLCBwLCAxKTsKKyAgZ2NyeV9tcGlfcG93bSAodywgR0NSWU1QSV9DT05TVF9UV08sIGEsIHApOworICBpZiAoZ2NyeV9tcGlfY21wX3VpICh3LCAxKSkKKyAgICBmYWlsICgiZmFpbGVkIGFzc2VydGlvbjogMl57cC0xfSBtb2QgcCA9PSAxXG4iKTsKKworICAvKiBDaGVjazogcCAlIDQgPT0gMSAqLworICBnY3J5X21waV9tb2QgKHcsIHAsIEdDUllNUElfQ09OU1RfRk9VUik7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKHcsIDEpKQorICAgIGZhaWwgKCJmYWlsZWQgYXNzZXJ0aW9uOiBwICUgNCA9PSAxXG4iKTsKKworICAvKiBDaGVjazogMl57bi0xfSBtb2QgbiA9PSAxICovCisgIGdjcnlfbXBpX3N1Yl91aSAoYSwgbiwgMSk7CisgIGdjcnlfbXBpX3Bvd20gKHcsIEdDUllNUElfQ09OU1RfVFdPLCBhLCBuKTsKKyAgaWYgKGdjcnlfbXBpX2NtcF91aSAodywgMSkpCisgICAgZmFpbCAoImZhaWxlZCBhc3NlcnRpb246IDJee24tMX0gbW9kIG4gPT0gMVxuIik7CisKKyAgLyogQ2hlY2s6IGJeeyhwLTEpLzJ9IG1vZCBwID09IHAtMSAqLworICBnY3J5X21waV9zdWJfdWkgKGEsIHAsIDEpOworICBnY3J5X21waV9kaXYgKHgsIE5VTEwsIGEsIEdDUllNUElfQ09OU1RfVFdPLCAtMSk7CisgIGdjcnlfbXBpX3Bvd20gKHcsIGIsIHgsIHApOworICBnY3J5X21waV9hYnMgKHcpOworICBpZiAoZ2NyeV9tcGlfY21wICh3LCBhKSkKKyAgICBmYWlsICgiZmFpbGVkIGFzc2VydGlvbjogYl57KHAtMSkvMn0gbW9kIHAgPT0gcC0xXG4iKTsKKworICAvKiBJIDo9IDJeeyhwLTEpLzR9IG1vZCBwICovCisgIGdjcnlfbXBpX3N1Yl91aSAoYSwgcCwgMSk7CisgIGdjcnlfbXBpX2RpdiAoeCwgTlVMTCwgYSwgR0NSWU1QSV9DT05TVF9GT1VSLCAtMSk7CisgIGdjcnlfbXBpX3Bvd20gKEksIEdDUllNUElfQ09OU1RfVFdPLCB4LCBwKTsKKworICAvKiBDaGVjazogSV4yIG1vZCBwID09IHAtMSAqLworICBnY3J5X21waV9wb3dtICh3LCBJLCBHQ1JZTVBJX0NPTlNUX1RXTywgcCk7CisgIGlmIChnY3J5X21waV9jbXAgKHcsIGEpKQorICAgIGZhaWwgKCJmYWlsZWQgYXNzZXJ0aW9uOiBJXjIgbW9kIHAgPT0gcC0xXG4iKTsKKworICAvKiBDaGVjazogRyBpcyBvbiB0aGUgY3VydmUgKi8KKyAgaWYgKCFnY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoRywgY3R4KSkKKyAgICBmYWlsICgiZmFpbGVkIGFzc2VydGlvbjogRyBpcyBvbiB0aGUgY3VydmVcbiIpOworCisgIC8qIENoZWNrOiBuRyA9PSAoMCwxKSAqLworICBnY3J5X21waV9lY19tdWwgKFEsIG4sIEcsIGN0eCk7CisgIGlmIChnY3J5X21waV9lY19nZXRfYWZmaW5lICh4LCB5LCBRLCBjdHgpKQorICAgIGZhaWwgKCJmYWlsZWQgdG8gZ2V0IGFmZmluZSBjb29yZGluYXRlc1xuIik7CisgIGlmIChnY3J5X21waV9jbXBfdWkgKHgsIDApIHx8IGdjcnlfbXBpX2NtcF91aSAoeSwgMSkpCisgICAgZmFpbCAoImZhaWxlZCBhc3NlcnRpb246IG5HID09ICgwLDEpXG4iKTsKKworICAvKiBOb3cgdHdvIGFyYml0cmFyeSBwb2ludCBvcGVyYXRpb25zIHRha2VuIGZyb20gdGhlIGVkMjU1MTkucHkKKyAgICAgc2FtcGxlIGRhdGEuICAqLworICBnY3J5X21waV9yZWxlYXNlIChhKTsKKyAgYSA9IGhleDJtcGkKKyAgICAoIjRmNzFkMDEyZGYzYzM3MWFmM2VhNGRjMzgzODVjYTViYjcyNzJmOTBjYjFiMDA4YjNlZDYwMWM3NmRlMWQ0OTYiCisgICAgICJlMzBjYmY2MjVmMGE3NTZhNjc4ZDhmMjU2ZDUzMjU1OTVjY2NjODM0NjZmMzZkYjE4ZjAxNzhlYjk5MjVlZGQzIik7CisgIGdjcnlfbXBpX2VjX211bCAoUSwgYSwgRywgY3R4KTsKKyAgaWYgKGdjcnlfbXBpX2VjX2dldF9hZmZpbmUgKHgsIHksIFEsIGN0eCkpCisgICAgZmFpbCAoImZhaWxlZCB0byBnZXQgYWZmaW5lIGNvb3JkaW5hdGVzXG4iKTsKKyAgaWYgKGNtcF9tcGloZXggKHgsICgiMTU3ZjczNjFjNTc3YWFkMzZmNjdlZDMzZTM4ZGM3YmUiCisgICAgICAgICAgICAgICAgICAgICAgIjAwMDE0ZmVjYzIxNjVjYTVjZWU5ZWVlMTlmZTRkMmMxIikpCisgICAgICB8fCBjbXBfbXBpaGV4ICh5LCAoIjVhNjlkYmViMjMyMjc2YjM4ZjNmNTAxNjU0N2JiMmEyIgorICAgICAgICAgICAgICAgICAgICAgICAgICI0MDI1NjQ1ZjBiODIwZTcyYjhjYWQ0ZjBhOTA5YTA5MiIpKSkKKyAgICB7CisgICAgICBmYWlsICgic2FtcGxlIHBvaW50IG11bHRpcGx5IGZhaWxlZDpcbiIpOworICAgICAgcHJpbnRfbXBpICgiciIsIGEpOworICAgICAgcHJpbnRfbXBpICgiUngiLCB4KTsKKyAgICAgIHByaW50X21waSAoIlJ5IiwgeSk7CisgICAgfQorCisgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworICBhID0gaGV4Mm1waQorICAgICgiMmQzNTAxZTcyMzIzOTYzMjgwMjQ1NGVlNWRkYzQwNmVmYjBiZGYxODQ4NmE1YmRlOWMwMzkwYTljMjk4NDAwNCIKKyAgICAgImY0NzI1MmI2MjhjOTUzNjI1YjhkZWI1ZGJjYjhkYTk3YWE0M2ExODkyZDExZmE4MzU5NmY0MmUwZDg5Y2IxYjYiKTsKKyAgZ2NyeV9tcGlfZWNfbXVsIChRLCBhLCBHLCBjdHgpOworICBpZiAoZ2NyeV9tcGlfZWNfZ2V0X2FmZmluZSAoeCwgeSwgUSwgY3R4KSkKKyAgICBmYWlsICgiZmFpbGVkIHRvIGdldCBhZmZpbmUgY29vcmRpbmF0ZXNcbiIpOworICBpZiAoY21wX21waWhleCAoeCwgKCI2MjE4ZTMwOWQ0MDA2NWZjYzMzOGIzMTI3ZjQ2ODM3MSIKKyAgICAgICAgICAgICAgICAgICAgICAiODIzMjRiZDAxY2U2ZjNjZjgxYWI0NGU2Mjk1OWM4MmEiKSkKKyAgICAgIHx8IGNtcF9tcGloZXggKHksICgiNTUwMTQ5MjI2NWUwNzNkODc0ZDllNWI4MWU3Zjg3ODQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjhhODI2ZTgwY2NlMjg2OTA3MmFjNjBjMzAwNDM1NmU1IikpKQorICAgIHsKKyAgICAgIGZhaWwgKCJzYW1wbGUgcG9pbnQgbXVsdGlwbHkgZmFpbGVkOlxuIik7CisgICAgICBwcmludF9tcGkgKCJyIiwgYSk7CisgICAgICBwcmludF9tcGkgKCJSeCIsIHgpOworICAgICAgcHJpbnRfbXBpICgiUnkiLCB5KTsKKyAgICB9CisKKworICBnY3J5X21waV9yZWxlYXNlIChJKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoYik7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG4pOworICBnY3J5X21waV9yZWxlYXNlIChwKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAodyk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGEpOworICBnY3J5X21waV9yZWxlYXNlICh4KTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoeSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKHopOworICBnY3J5X21waV9wb2ludF9yZWxlYXNlIChRKTsKKyAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZSAoRyk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKGspOworICBnY3J5X2N0eF9yZWxlYXNlIChjdHgpOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCisgIGlmIChhcmdjID4gMSAmJiAhc3RyY21wIChhcmd2WzFdLCAiLS12ZXJib3NlIikpCisgICAgdmVyYm9zZSA9IDE7CisgIGVsc2UgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAgKGFyZ3ZbMV0sICItLWRlYnVnIikpCisgICAgdmVyYm9zZSA9IGRlYnVnID0gMTsKKworICBpZiAoIWdjcnlfY2hlY2tfdmVyc2lvbiAoR0NSWVBUX1ZFUlNJT04pKQorICAgIGRpZSAoInZlcnNpb24gbWlzbWF0Y2hcbiIpOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9FTkFCTEVfUVVJQ0tfUkFORE9NLCAwKTsKKyAgaWYgKGRlYnVnKQorICAgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9TRVRfREVCVUdfRkxBR1MsIDF1LCAwKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRJQUxJWkFUSU9OX0ZJTklTSEVELCAwKTsKKworICBzZXRfZ2V0X3BvaW50ICgpOworICBjb250ZXh0X2FsbG9jICgpOworICBjb250ZXh0X3BhcmFtICgpOworICBiYXNpY19lY19tYXRoICgpOworICBiYXNpY19lY19tYXRoX3NpbXBsaWZpZWQgKCk7CisgIHR3aXN0ZWRlZHdhcmRzX21hdGggKCk7CisKKyAgc2hvdyAoIkFsbCB0ZXN0cyBjb21wbGV0ZWQuIEVycm9yczogJWRcbiIsIGVycm9yX2NvdW50KTsKKyAgcmV0dXJuIGVycm9yX2NvdW50ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0YXBpLmMgYi90ZXN0cy90ZXN0YXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjOTA5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Rlc3RhcGkuYwpAQCAtMCwwICsxLDEyNiBAQAorLyogdGVzdGFwaS5jIC0gZm9yIGxpYmdjcnlwdAorICoJQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIExpYmdjcnlwdC4KKyAqCisgKiBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIGdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIExpYmdjcnlwdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnY3J5cHQuaD4KKworCisjZGVmaW5lIEJVRygpIGRvIHtmcHJpbnRmICggc3RkZXJyLCAiT29vcHMgYXQgJXM6JWRcbiIsIF9fRklMRV9fICwgX19MSU5FX18gKTtcCisJCSAgZXhpdCgyKTt9IHdoaWxlKDApCisKKy8qIGFuIEVsR2FtYWwgcHVibGljIGtleSAqLworc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpwLCpnLCp5OworfSBlbGdfdGVzdGtleTEgPSB7CisgICIweDlENTU5RjMxQTZEMzA0OTJDMzgzMjEzODQ0QUVCQjc3NzI5NjNBODVEMzIzOUYzNjExQUFCOTNBMkE5ODVGNjRGQjczNUI5MjU5RUMzMjZCRjU3MjBGOTA5OTgwRDYwOUQzN0MyODhDOTIyM0IwMzUwRkJFNDkzQzNCNUFGNTRDQTIzMDMxRTk1MkU5MkY4QTNEQkVEQkM1QTY4NDk5M0Q0NTJDRDU0Rjg1Qjg1MTYwMTY2RkNEMjVCRDdBQjZBRTlCMUVCNEZDQzlEMzAwREFGRjA4MUM0Q0JBNjY5NDkwNkQzRTNGRjE4MTk2QTVDQ0Y3RjBBNjE4Mjk2MjE2NkIiLAorICAiMHg1IiwKKyAgIjB4OTY0MDAyNEJCMkEyNzcyMDU4MTNGRjY4NTA0OEFBMjdFMkIxOTJCNjY3MTYzRTdDNTlFMzgxRTI3MDAzRDA0NEM3MDBDNTMxQ0U4RkQ0QUE3ODFCNDYzQkM5RkZFNzQ5NTZBRjA5QTM4QTA5ODMyMkIxQ0Y3MkZDODk2RjAwOUUzQTZCRkYwNTNEM0IxRDFFMTk5NEJGOUNDMDdGQTEyOTYzRDc4MkYwMjdCNTE1MTFEREU4QzVGNDM0MjFGQkMxMjczNEE5QzA3MEYxNThDNzI5QTM3MEJFRTVGQzUxQTc3MjIxOTQzOEVEQTgyMDJDMzVGQTNGNUQ4Q0QxOTk3QiIKK307CisKK3ZvaWQKK3Rlc3Rfc2V4cCAoIGludCBhcmdjLCBjaGFyICoqYXJndiApCit7CisgICAgaW50IHJjLCBuYml0czsKKyAgICBnY3J5X3NleHBfdCBzZXhwOworICAgIGdjcnlfbXBpX3Qga2V5WzNdOworICAgIHNpemVfdCBuOworICAgIGNoYXIgKmJ1ZjsKKworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKworICAgIGlmICggZ2NyeV9tcGlfc2NhbiggJmtleVswXSwgR0NSWU1QSV9GTVRfSEVYLCBlbGdfdGVzdGtleTEucCwgMCwgTlVMTCApICkKKwlCVUcoKTsKKyAgICBpZiAoIGdjcnlfbXBpX3NjYW4oICZrZXlbMV0sIEdDUllNUElfRk1UX0hFWCwgZWxnX3Rlc3RrZXkxLmcsIDAsIE5VTEwgKSApCisJQlVHKCk7CisgICAgaWYgKCBnY3J5X21waV9zY2FuKCAma2V5WzJdLCBHQ1JZTVBJX0ZNVF9IRVgsIGVsZ190ZXN0a2V5MS55LCAwLCBOVUxMICkgKQorCUJVRygpOworCisgICAgLyogZ2V0IG5iaXRzIGZyb20gYSBrZXkgKi8KKyAgICByYyA9IGdjcnlfc2V4cF9idWlsZCAoICZzZXhwLCBOVUxMLAorCQkJICAgIihwdWJsaWMta2V5KGVsZyhwJW0pKGclbSkoeSVtKSkpIiwKKwkJCQkgIGtleVswXSwga2V5WzFdLCBrZXlbMl0gKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJEVU1QIG9mIFBLIChyYz0lZCk6XG4iLCByYyk7CisgICAgZ2NyeV9zZXhwX2R1bXAgKCBzZXhwICk7CisgICAgeyAgZ2NyeV9zZXhwX3QgeDsKKyAgICAgICB4ID0gZ2NyeV9zZXhwX2NkciAoIHNleHAgKTsKKyAgICAgICBmcHV0cyAoICJEVU1QIG9mIENEUjpcbiIsIHN0ZGVyciApOworICAgICAgIGdjcnlfc2V4cF9kdW1wICggeCApOworICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlICggeCApOworICAgIH0KKyAgICBuYml0cyA9IGdjcnlfcGtfZ2V0X25iaXRzKCBzZXhwICk7CisgICAgcHJpbnRmICggImVsZ190ZXN0a2V5MSAtIG5iaXRzPSVkXG4iLCBuYml0cyApOworICAgIG4gPSBnY3J5X3NleHBfc3ByaW50ICggc2V4cCwgMCwgTlVMTCwgMCApOworICAgIGJ1ZiA9IGdjcnlfeG1hbGxvYyAoIG4gKTsKKyAgICBuID0gZ2NyeV9zZXhwX3NwcmludCAoIHNleHAsIDAsIGJ1ZiwgbiApOworICAgIHByaW50ZiAoICJzcHJpbnQgbGVuZ3RoPSV1XG4iLCAodW5zaWduZWQgaW50KW4gKTsKKyAgICBnY3J5X2ZyZWUgKCBidWYgKTsKKyAgICBnY3J5X3NleHBfcmVsZWFzZSggc2V4cCApOworfQorCisKK3ZvaWQKK3Rlc3RfZ2Vua2V5ICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKK3sKKyAgICBpbnQgcmMsIG5iaXRzID0gMTAyNDsKKyAgICBnY3J5X3NleHBfdCBzX3Bhcm1zLCBzX2tleTsKKworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKworICAgIGdjcnlfY29udHJvbCggR0NSWUNUTF9JTklUX1NFQ01FTSwgMTYzODQsIDAgKTsKKyAgICByYyA9IGdjcnlfc2V4cF9idWlsZCAoICZzX3Bhcm1zLCBOVUxMLCAiKGdlbmtleShkc2EobmJpdHMgJWQpKSkiLCBuYml0cyApOworICAgIHJjID0gZ2NyeV9wa19nZW5rZXkoICZzX2tleSwgc19wYXJtcyApOworICAgIGlmICggcmMgKSB7CisJZnByaW50ZiAoIHN0ZGVyciwgImdlbmtleSBmYWlsZWQ6ICVzXG4iLCBncGdfc3RyZXJyb3IgKHJjKSApOworCXJldHVybjsKKyAgICB9CisgICAgZ2NyeV9zZXhwX3JlbGVhc2UoIHNfcGFybXMgKTsKKyAgICBnY3J5X3NleHBfZHVtcCAoIHNfa2V5ICk7CisgICAgZ2NyeV9zZXhwX3JlbGVhc2UoIHNfa2V5ICk7Cit9CisKK2ludAorbWFpbiggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKK3sKKyAgY29uc3QgY2hhciAqczsKKworICBpZiAoIGFyZ2MgPCAyICkKKyAgICB7CisgICAgICBzID0gZ2NyeV9jaGVja192ZXJzaW9uIChOVUxMKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIHM/IHMgOiAiKG51bGwpIik7CisgICAgfQorICBlbHNlIGlmICggIXN0cmNtcCAoIGFyZ3ZbMV0sICJ2ZXJzaW9uIikgKQorICAgIHsKKyAgICAgIHMgPSBnY3J5X2NoZWNrX3ZlcnNpb24gKGFyZ2MgPiAyID8gYXJndlsyXSA6IE5VTEwgKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIHM/IHMgOiAiKG51bGwpIik7CisgICAgfQorICBlbHNlIGlmICggIXN0cmNtcCAoIGFyZ3ZbMV0sICJzZXhwIiApICkKKyAgICB0ZXN0X3NleHAgKCBhcmdjLTIsIGFyZ3YrMiApOworICBlbHNlIGlmICggIXN0cmNtcCAoIGFyZ3ZbMV0sICJnZW5rZXkiICkgKQorICAgIHRlc3RfZ2Vua2V5ICggYXJnYy0yLCBhcmd2KzIgKTsKKyAgZWxzZSB7CisgICAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6IHRlc3RhcGkgbW9kZS1zdHJpbmcgW21vZGUtYXJnc11cbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy90c2V4cC5jIGIvdGVzdHMvdHNleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTAyYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdHNleHAuYwpAQCAtMCwwICsxLDExMzMgQEAKKy8qIHRzZXhwLmMgIC0gIFMtZXhwcmVzc2lvbiByZWdyZXNzaW9uIHRlc3RzCisgKglDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorICoKKyAqIExpYmdjcnlwdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTGliZ2NyeXB0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKKyNkZWZpbmUgUEdNTkFNRSAidHNleHAiCisKKyNpZm5kZWYgRElNCisjIGRlZmluZSBESU0odikJCSAgICAgKHNpemVvZih2KS9zaXplb2YoKHYpWzBdKSkKKyNlbmRpZgorI2RlZmluZSBteV9pc2FzY2lpKGMpICghKChjKSAmIDB4ODApKQorI2RlZmluZSBkaWdpdHAocCkgICAgICgqKHApID49ICcwJyAmJiAqKHApIDw9ICc5JykKKyNkZWZpbmUgaGV4ZGlnaXRwKGEpICAoZGlnaXRwIChhKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgKCooYSkgPj0gJ0EnICYmICooYSkgPD0gJ0YnKSAgXAorICAgICAgICAgICAgICAgICAgICAgICB8fCAoKihhKSA+PSAnYScgJiYgKihhKSA8PSAnZicpKQorI2RlZmluZSB4dG9pXzEocCkgICAgICgqKHApIDw9ICc5Jz8gKCoocCktICcwJyk6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgKihwKSA8PSAnRic/ICgqKHApLSdBJysxMCk6KCoocCktJ2EnKzEwKSkKKyNkZWZpbmUgeHRvaV8yKHApICAgICAoKHh0b2lfMShwKSAqIDE2KSArIHh0b2lfMSgocCkrMSkpCisjZGVmaW5lIHhtYWxsb2MoYSkgICAgZ2NyeV94bWFsbG9jICgoYSkpCisjZGVmaW5lIHhjYWxsb2MoYSxiKSAgZ2NyeV94Y2FsbG9jICgoYSksKGIpKQorI2RlZmluZSB4c3RyZHVwKGEpICAgIGdjcnlfeHN0cmR1cCAoKGEpKQorI2RlZmluZSB4ZnJlZShhKSAgICAgIGdjcnlfZnJlZSAoKGEpKQorI2RlZmluZSBwYXNzKCkgICAgICAgIGRvIHsgOyB9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgZXJyb3JfY291bnQ7CisKK3N0YXRpYyB2b2lkCitkaWUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHIgOworCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIFBHTU5BTUUpOworICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ19wdHIgKTsKKyAgdmFfZW5kKGFyZ19wdHIpOworICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICBwdXRjICgnXG4nLCBzdGRlcnIpOworICBleGl0ICgxKTsKK30KKworc3RhdGljIHZvaWQKK2luZm8gKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ19wdHI7CisKKyAgaWYgKHZlcmJvc2UpCisgICAgeworICAgICAgdmFfc3RhcnQoIGFyZ19wdHIsIGZvcm1hdCApIDsKKyAgICAgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0ciApOworICAgICAgdmFfZW5kKGFyZ19wdHIpOworICAgICAgaWYgKCpmb3JtYXQgJiYgZm9ybWF0W3N0cmxlbihmb3JtYXQpLTFdICE9ICdcbicpCisgICAgICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmFpbCAoIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICkKK3sKKyAgICB2YV9saXN0IGFyZ19wdHIgOworCisgICAgZnB1dHMgKFBHTU5BTUUgIjogIiwgc3RkZXJyKTsKKyAgICB2YV9zdGFydCggYXJnX3B0ciwgZm9ybWF0ICkgOworICAgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJnX3B0ciApOworICAgIHZhX2VuZChhcmdfcHRyKTsKKyAgICBpZiAoKmZvcm1hdCAmJiBmb3JtYXRbc3RybGVuKGZvcm1hdCktMV0gIT0gJ1xuJykKKyAgICAgIHB1dGMgKCdcbicsIHN0ZGVycik7CisgICAgZXJyb3JfY291bnQrKzsKK30KKworCisKKy8qIENvbnZlcnQgU1RSSU5HIGNvbnNpc3Rpbmcgb2YgaGV4IGNoYXJhY3RlcnMgaW50byBpdHMgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBhbmQgcmV0dXJuIGl0IGFzIGFuIGFsbG9jYXRlZCBidWZmZXIuIFRoZSB2YWxpZAorICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQgYXQgUl9MRU5HVEguICBUaGUgc3RyaW5nIGlzCisgICBkZWxpbWl0ZWQgYnkgZW5kIG9mIHN0cmluZy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24KKyAgIGVycm9yLiAgKi8KK3N0YXRpYyB2b2lkICoKK2hleDJidWZmZXIgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90ICpyX2xlbmd0aCkKK3sKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBzaXplX3QgbGVuZ3RoOworCisgIGJ1ZmZlciA9IHhtYWxsb2MgKHN0cmxlbihzdHJpbmcpLzIrMSk7CisgIGxlbmd0aCA9IDA7CisgIGZvciAocz1zdHJpbmc7ICpzOyBzICs9MiApCisgICAgeworICAgICAgaWYgKCFoZXhkaWdpdHAgKHMpIHx8ICFoZXhkaWdpdHAgKHMrMSkpCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgLyogSW52YWxpZCBoZXggZGlnaXRzLiAqLworICAgICAgKCh1bnNpZ25lZCBjaGFyKilidWZmZXIpW2xlbmd0aCsrXSA9IHh0b2lfMiAocyk7CisgICAgfQorICAqcl9sZW5ndGggPSBsZW5ndGg7CisgIHJldHVybiBidWZmZXI7Cit9CisKKworc3RhdGljIGdjcnlfbXBpX3QKK2hleDJtcGkgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ3BnX2Vycm9yX3QgZXJyOworICBnY3J5X21waV90IHZhbDsKKworICBlcnIgPSBnY3J5X21waV9zY2FuICgmdmFsLCBHQ1JZTVBJX0ZNVF9IRVgsIHN0cmluZywgMCwgTlVMTCk7CisgIGlmIChlcnIpCisgICAgZGllICgiaGV4Mm1waSAnJXMnIGZhaWxlZDogJXNcbiIsIHN0cmluZywgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGdjcnlfbXBpX3QKK2hleDJtcGlvcGEgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgY2hhciAqYnVmZmVyOworICBzaXplX3QgYnVmbGVuOworICBnY3J5X21waV90IHZhbDsKKworICBidWZmZXIgPSBoZXgyYnVmZmVyIChzdHJpbmcsICZidWZsZW4pOworICBpZiAoIWJ1ZmZlcikKKyAgICBkaWUgKCJoZXgybXBpb3BhICclcycgZmFpbGVkOiBwYXJzZXIgZXJyb3JcbiIsIHN0cmluZyk7CisgIHZhbCA9IGdjcnlfbXBpX3NldF9vcGFxdWUgKE5VTEwsIGJ1ZmZlciwgYnVmbGVuKjgpOworICBpZiAoIWJ1ZmZlcikKKyAgICBkaWUgKCJoZXgybXBpb3BhICclcycgZmFpbGVkOiBzZXRfb3BhcXVlIGVycm9yJXNcbiIsIHN0cmluZyk7CisgIHJldHVybiB2YWw7Cit9CisKKworLyogQ29tcGFyZSBBIHRvIEIsIHdoZXJlIEIgaXMgZ2l2ZW4gYXMgYSBoZXggc3RyaW5nLiAgKi8KK3N0YXRpYyBpbnQKK2NtcF9tcGloZXggKGdjcnlfbXBpX3QgYSwgY29uc3QgY2hhciAqYikKK3sKKyAgZ2NyeV9tcGlfdCBidmFsOworICBpbnQgcmVzOworCisgIGlmIChnY3J5X21waV9nZXRfZmxhZyAoYSwgR0NSWU1QSV9GTEFHX09QQVFVRSkpCisgICAgYnZhbCA9IGhleDJtcGlvcGEgKGIpOworICBlbHNlCisgICAgYnZhbCA9IGhleDJtcGkgKGIpOworICByZXMgPSBnY3J5X21waV9jbXAgKGEsIGJ2YWwpOworICBnY3J5X21waV9yZWxlYXNlIChidmFsKTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogQ29tcGFyZSBBIHRvIEIsIHdoZXJlIEEgaXMgYSBidWZmZXIgYW5kIEIgYSBoZXggc3RyaW5nLiAgKi8KK3N0YXRpYyBpbnQKK2NtcF9idWZoZXggKGNvbnN0IHZvaWQgKmEsIHNpemVfdCBhbGVuLCBjb25zdCBjaGFyICpiKQoreworICB2b2lkICpiYnVmOworICBzaXplX3QgYmxlbjsKKyAgaW50IHJlczsKKworICBpZiAoIWEgJiYgIWIpCisgICAgcmV0dXJuIDA7CisgIGlmIChhICYmICFiKQorICAgIHJldHVybiAxOworICBpZiAoIWEgJiYgYikKKyAgICByZXR1cm4gLTE7CisKKyAgYmJ1ZiA9IGhleDJidWZmZXIgKGIsICZibGVuKTsKKyAgaWYgKCFiYnVmKQorICAgIGRpZSAoImNtcF9idWZoZXg6IGVycm9yIGNvbnZlcnRpbmcgaGV4IHN0cmluZ1xuIik7CisgIGlmIChhbGVuICE9IGJsZW4pCisgICAgcmV0dXJuIGFsZW4gPCBibGVuPyAtMSA6IDE7CisgIHJlcyA9IG1lbWNtcCAoYSwgYmJ1ZiwgYWxlbik7CisgIHhmcmVlIChiYnVmKTsKKyAgcmV0dXJuIHJlczsKK30KKworCisMCisvKiBmaXhtZTogd2UgbmVlZCBiZXR0ZXIgdGVzdHMgKi8KK3N0YXRpYyB2b2lkCitiYXNpYyAodm9pZCkKK3sKKyAgaW50IHBhc3M7CisgIGdjcnlfc2V4cF90IHNleHA7CisgIGludCBpZHg7CisgIGNoYXIgKnNlY3VyZV9idWZmZXI7CisgIHNpemVfdCBzZWN1cmVfYnVmZmVyX2xlbjsKKyAgY29uc3QgY2hhciAqc3RyaW5nOworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICp0b2tlbjsKKyAgICBjb25zdCBjaGFyICpwYXJtOworICB9IHZhbHVlc1tdID0geworICAgIHsgInB1YmxpYy1rZXkiLCBOVUxMIH0sCisgICAgeyAiZHNhIiwgTlVMTCB9LAorICAgIHsgImRzYSIsICJwIiB9LAorICAgIHsgImRzYSIsICJ5IiB9LAorICAgIHsgImRzYSIsICJxIiB9LAorICAgIHsgImRzYSIsICJnIiB9LAorICAgIHsgTlVMTCB9CisgIH07CisKKyAgaW5mbyAoImRvaW5nIHNvbWUgcHJldHR5IHBvaW50bGVzcyB0ZXN0c1xuIik7CisKKyAgc2VjdXJlX2J1ZmZlcl9sZW4gPSA5OTsKKyAgc2VjdXJlX2J1ZmZlciA9IGdjcnlfeG1hbGxvY19zZWN1cmUgKHNlY3VyZV9idWZmZXJfbGVuKTsKKyAgbWVtc2V0IChzZWN1cmVfYnVmZmVyLCAnRycsIHNlY3VyZV9idWZmZXJfbGVuKTsKKworICBmb3IgKHBhc3M9MDs7cGFzcysrKQorICAgIHsKKyAgICAgIGdjcnlfbXBpX3QgbTsKKworICAgICAgc3dpdGNoIChwYXNzKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICBzdHJpbmcgPSAoIihwdWJsaWMta2V5IChkc2EgKHAgIzQxNDI0MzQ0IykgKHkgdGhpc19pc195KSAiCisgICAgICAgICAgICAgICAgICAgICIocSAjNjE2MjYzNjQ2NTY2NjcjKSAoZyAlbSkpKSIpOworCisgICAgICAgICAgbSA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgNDIpOworICAgICAgICAgIGlmICggZ2NyeV9zZXhwX2J1aWxkICgmc2V4cCwgTlVMTCwgc3RyaW5nLCBtICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChtKTsKKyAgICAgICAgICAgICAgZmFpbCAoIiBzY2FubmluZyBgJXMnIGZhaWxlZFxuIiwgc3RyaW5nKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG0pOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICBzdHJpbmcgPSAoIihwdWJsaWMta2V5IChkc2EgKHAgIzQxNDI0MzQ0IykgKHkgdGhpc19pc195KSAiCisgICAgICAgICAgICAgICAgICAgICIocSAlYikgKGcgJW0pKSkiKTsKKworICAgICAgICAgIG0gPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDQyKTsKKyAgICAgICAgICBpZiAoIGdjcnlfc2V4cF9idWlsZCAoJnNleHAsIE5VTEwsIHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUsICJmb29cMFx4MDFcMHgwMjc4OTAxMjM0NSIsIG0pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAobSk7CisgICAgICAgICAgICAgIGZhaWwgKCIgc2Nhbm5pbmcgYCVzJyBmYWlsZWRcbiIsIHN0cmluZyk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChtKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgc3RyaW5nID0gKCIocHVibGljLWtleSAoZHNhIChwICM0MTQyNDM0NCMpICh5IHNpbGx5X3lfdmFsdWUpICIKKyAgICAgICAgICAgICAgICAgICAgIihxICViKSAoZyAlbSkpKSIpOworCisgICAgICAgICAgbSA9IGdjcnlfbXBpX3NldF91aSAoTlVMTCwgMTcpOworICAgICAgICAgIGlmICggZ2NyeV9zZXhwX2J1aWxkICgmc2V4cCwgTlVMTCwgc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfYnVmZmVyX2xlbiwgc2VjdXJlX2J1ZmZlciwgbSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChtKTsKKyAgICAgICAgICAgICAgZmFpbCAoIiBzY2FubmluZyBgJXMnIGZhaWxlZFxuIiwgc3RyaW5nKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG0pOworICAgICAgICAgIGlmICghZ2NyeV9pc19zZWN1cmUgKHNleHApKQorICAgICAgICAgICAgZmFpbCAoImdjcnlfc2V4cF9idWlsZCBkaWQgbm90IHN3aXRjaCB0byBzZWN1cmUgbWVtb3J5XG4iKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgeworICAgICAgICAgICAgZ2NyeV9zZXhwX3QgaGVscF9zZXhwOworCisgICAgICAgICAgICBpZiAoZ2NyeV9zZXhwX25ldyAoJmhlbHBfc2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGZvb2Jhci1wYXJtcyAoeHAgIzEyMzQjKSh4cSAjMDMjKSkiLCAwLCAxKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZhaWwgKCIgc2Nhbm5pbmcgZml4ZWQgc3RyaW5nIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0cmluZyA9ICgiKHB1YmxpYy1rZXkgKGRzYSAocCAjNDE0MjQzNDQjKSAocGFybSAlUykgIgorICAgICAgICAgICAgICAgICAgICAgICIoeSBkdW1teSkocSAlYikgKGcgJW0pKSkiKTsKKyAgICAgICAgICAgIG0gPSBnY3J5X21waV9zZXRfdWkgKE5VTEwsIDE3KTsKKyAgICAgICAgICAgIGlmICggZ2NyeV9zZXhwX2J1aWxkICgmc2V4cCwgTlVMTCwgc3RyaW5nLCBoZWxwX3NleHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlX2J1ZmZlcl9sZW4sIHNlY3VyZV9idWZmZXIsIG0pICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG0pOworICAgICAgICAgICAgICAgIGZhaWwgKCIgc2Nhbm5pbmcgYCVzJyBmYWlsZWRcbiIsIHN0cmluZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChtKTsKKyAgICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChoZWxwX3NleHApOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuOyAvKiBSZWFkeS4gKi8KKyAgICAgICAgfQorCisKKyAgICAgIC8qIG5vdyBmaW5kIHNvbWV0aGluZyAqLworICAgICAgZm9yIChpZHg9MDsgdmFsdWVzW2lkeF0udG9rZW47IGlkeCsrKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4gPSB2YWx1ZXNbaWR4XS50b2tlbjsKKyAgICAgICAgICBjb25zdCBjaGFyICpwYXJtID0gdmFsdWVzW2lkeF0ucGFybTsKKyAgICAgICAgICBnY3J5X3NleHBfdCBzMSwgczI7CisgICAgICAgICAgZ2NyeV9tcGlfdCBhOworICAgICAgICAgIGNvbnN0IGNoYXIgKnA7CisgICAgICAgICAgc2l6ZV90IG47CisKKyAgICAgICAgICBzMSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzZXhwLCB0b2tlbiwgc3RybGVuKHRva2VuKSApOworICAgICAgICAgIGlmICghczEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhaWwgKCJkaWRuJ3QgZm91bmQgYCVzJ1xuIiwgdG9rZW4pOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHAgPSBnY3J5X3NleHBfbnRoX2RhdGEgKHMxLCAwLCAmbik7CisgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoczEpOworICAgICAgICAgICAgICBmYWlsICgibm8gY2FyIGZvciBgJXMnXG4iLCB0b2tlbik7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIGluZm8gKCJjYXI9YCUuKnMnXG4iLCAoaW50KW4sIHApOyAqLworCisgICAgICAgICAgczIgPSBnY3J5X3NleHBfY2RyIChzMSk7CisgICAgICAgICAgaWYgKCFzMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMxKTsKKyAgICAgICAgICAgICAgZmFpbCAoIm5vIGNkciBmb3IgYCVzJ1xuIiwgdG9rZW4pOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHAgPSBnY3J5X3NleHBfbnRoX2RhdGEgKHMyLCAwLCAmbik7CisgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMyKTsKKyAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMxKTsKKyAgICAgICAgICAgICAgZmFpbCAoImRhdGEgYXQgY2FyIG9mIGAlcydcbiIsIHRva2VuKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocGFybSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgczIgPSBnY3J5X3NleHBfZmluZF90b2tlbiAoczEsIHBhcm0sIHN0cmxlbiAocGFybSkpOworICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoczEpOworICAgICAgICAgICAgICBpZiAoIXMyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZhaWwgKCJkaWRuJ3QgZm91bmQgYCVzJ1xuIiwgcGFybSk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHAgPSBnY3J5X3NleHBfbnRoX2RhdGEgKHMyLCAwLCAmbik7CisgICAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoczIpOworICAgICAgICAgICAgICAgICAgZmFpbCgibm8gY2FyIGZvciBgJXMnXG4iLCBwYXJtICk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIGluZm8gKCJjYXI9YCUuKnMnXG4iLCAoaW50KW4sIHApOyAqLworICAgICAgICAgICAgICBwID0gZ2NyeV9zZXhwX250aF9kYXRhIChzMiwgMSwgJm4pOworICAgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMyKTsKKyAgICAgICAgICAgICAgICAgIGZhaWwoIm5vIGNkciBmb3IgYCVzJ1xuIiwgcGFybSApOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBpbmZvICgiY2RyPWAlLipzJ1xuIiwgKGludCluLCBwKTsgKi8KKworICAgICAgICAgICAgICBhID0gZ2NyeV9zZXhwX250aF9tcGkgKHMyLCAwLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoczIpOworICAgICAgICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmFpbCgiZmFpbGVkIHRvIGNkciB0aGUgbXBpIGZvciBgJXMnXG4iLCBwYXJtKTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMxKTsKKyAgICAgICAgfQorCisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc2V4cCk7CisgICAgICBzZXhwID0gTlVMTDsKKyAgICB9CisgIGdjcnlfZnJlZSAoc2VjdXJlX2J1ZmZlcik7Cit9CisKKworc3RhdGljIHZvaWQKK2Nhbm9uX2xlbiAodm9pZCkKK3sKKyAgc3RhdGljIHN0cnVjdCB7CisgICAgc2l6ZV90IHRleHRsZW47IC8qIGxlbmd0aCBvZiB0aGUgYnVmZmVyICovCisgICAgc2l6ZV90IGV4cGVjdGVkOy8qIGV4cGVjdGVkIGxlbmd0aCBvciAwIG9uIGVycm9yIGFuZCB0aGVuIC4uLiAqLworICAgIHNpemVfdCBlcnJvZmY7ICAvKiAuLi4gYW5kIGF0IHRoaXMgb2Zmc2V0ICovCisgICAgZ2NyeV9lcnJvcl90IGVycmNvZGU7ICAgIC8qIC4uLiB3aXRoIHRoaXMgZXJyb3IgY29kZSAqLworICAgIGNvbnN0IGNoYXIgKnRleHQ7CisgIH0gdmFsdWVzW10gPSB7CisgICAgeyAxNCwgMTMsIDAsIEdQR19FUlJfTk9fRVJST1IsICIoOTphYmNkZWZnaGkpICIgfSwKKyAgICB7IDE2LCAxNSwgMCwgR1BHX0VSUl9OT19FUlJPUiwgIigxMDphYmNkZWZnaGl4KSIgfSwKKyAgICB7IDE0LCAgMCwxNCwgR1BHX0VSUl9TRVhQX1NUUklOR19UT09fTE9ORywgIigxMDphYmNkZWZnaGkpIiB9LAorICAgIHsgMTUsICAwLCAxLCBHUEdfRVJSX1NFWFBfWkVST19QUkVGSVgsICIoMDEwOmFiY2RlZmdoaSkiIH0sCisgICAgeyAgMiwgIDAsIDAsIEdQR19FUlJfU0VYUF9OT1RfQ0FOT05JQ0FMLCAiMToifSwKKyAgICB7ICA0LCAgMCwgNCwgR1BHX0VSUl9TRVhQX1NUUklOR19UT09fTE9ORywgIigxOikifSwKKyAgICB7ICA1LCAgNSwgMCwgR1BHX0VSUl9OT19FUlJPUiwgIigxOngpIn0sCisgICAgeyAgMiwgIDIsIDAsIEdQR19FUlJfTk9fRVJST1IsICIoKSJ9LAorICAgIHsgIDQsICAyLCAwLCBHUEdfRVJSX05PX0VSUk9SLCAiKCkoKSJ9LAorICAgIHsgIDQsICA0LCAwLCBHUEdfRVJSX05PX0VSUk9SLCAiKCgpKSJ9LAorICAgIHsgIDMsICAwLCAzLCBHUEdfRVJSX1NFWFBfU1RSSU5HX1RPT19MT05HLCAiKCgpIn0sCisgICAgeyAgMywgIDAsIDEsIEdQR19FUlJfU0VYUF9CQURfQ0hBUkFDVEVSLCAiKCApIn0sCisgICAgeyAgOSwgIDksIDAsIEdQR19FUlJfTk9fRVJST1IsICIoMzphYmMoKSkifSwKKyAgICB7IDEwLCAgMCwgNiwgR1BHX0VSUl9TRVhQX0JBRF9DSEFSQUNURVIsICIoMzphYmMgKCkpIn0sCisgICAgLyogZml4bWU6IHdlIG5lZWQgbXVjaCBtb3JlIGNhc2VzICovCisgICAgeyAwIH0sCisgIH07CisgIGludCBpZHg7CisgIGdjcnlfZXJyb3JfdCBlcnJjb2RlOworICBzaXplX3QgbiwgZXJyb2ZmOworCisgIGluZm8gKCJjaGVja2luZyBjYW5vbmNpYWwgbGVuZ3RoIHRlc3QgZnVuY3Rpb25cbiIpOworICBmb3IgKGlkeD0wOyB2YWx1ZXNbaWR4XS50ZXh0OyBpZHgrKykKKyAgICB7CisgICAgICBuID0gZ2NyeV9zZXhwX2Nhbm9uX2xlbiAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXZhbHVlc1tpZHhdLnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2lkeF0udGV4dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb2ZmLCAmZXJyY29kZSk7CisKKyAgICAgIGlmIChuICYmIG4gPT0gdmFsdWVzW2lkeF0uZXhwZWN0ZWQpCisgICAgICAgIDsgLyogc3VjY2VzcyAqLworICAgICAgZWxzZSBpZiAoIW4gJiYgIXZhbHVlc1tpZHhdLmV4cGVjdGVkKQorICAgICAgICB7IC8qIHdlIGV4cGVjdGVkIGFuIGVycm9yIC0gY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSByaWdodCBvbmUgKi8KKyAgICAgICAgICBpZiAodmFsdWVzW2lkeF0uZXJyb2ZmICE9IGVycm9mZikKKyAgICAgICAgICAgIGZhaWwgKCJjYW5vbmljYWwgbGVuZ3RoIHRlc3QgJWQgLSB3cm9uZyBlcnJvciBvZmZzZXQgJXVcbiIsCisgICAgICAgICAgICAgICAgICBpZHgsICh1bnNpZ25lZCBpbnQpZXJyb2ZmKTsKKyAgICAgICAgICBpZiAoZ2NyeV9lcnJfY29kZSAoZXJyY29kZSkgIT0gdmFsdWVzW2lkeF0uZXJyY29kZSkKKyAgICAgICAgICAgIGZhaWwgKCJjYW5vbmljYWwgbGVuZ3RoIHRlc3QgJWQgLSB3cm9uZyBlcnJvciBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgICAgaWR4LCBlcnJjb2RlKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBmYWlsICgiY2Fub25pY2FsIGxlbmd0aCB0ZXN0ICVkIGZhaWxlZCAtIG49JXUsIG9mZj0ldSwgZXJyPSVkXG4iLAorICAgICAgICAgICAgICBpZHgsICh1bnNpZ25lZCBpbnQpbiwgKHVuc2lnbmVkIGludCllcnJvZmYsIGVycmNvZGUpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorYmFja19hbmRfZm9ydGhfb25lIChpbnQgdGVzdG5vLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIGdjcnlfZXJyb3JfdCByYzsKKyAgZ2NyeV9zZXhwX3Qgc2UsIHNlMTsKKyAgc2l6ZV90IG4sIG4xOworICBjaGFyICpwMTsKKworICByYyA9IGdjcnlfc2V4cF9uZXcgKCZzZSwgYnVmZmVyLCBsZW5ndGgsIDEpOworICBpZiAocmMpCisgICAgeworICAgICAgZmFpbCAoImJhZiAlZDogZ2NyeV9zZXhwX25ldyBmYWlsZWQ6ICVzXG4iLCB0ZXN0bm8sIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIG4xID0gZ2NyeV9zZXhwX3NwcmludCAoc2UsIEdDUllTRVhQX0ZNVF9DQU5PTiwgTlVMTCwgMCk7CisgIGlmICghbjEpCisgICAgeworICAgICAgZmFpbCAoImJhZiAlZDogZ2V0IHJlcXVpcmVkIGxlbmd0aCBmb3IgY2Fub24gZmFpbGVkXG4iLCB0ZXN0bm8pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcDEgPSBnY3J5X3htYWxsb2MgKG4xKTsKKyAgbiA9IGdjcnlfc2V4cF9zcHJpbnQgKHNlLCBHQ1JZU0VYUF9GTVRfQ0FOT04sIHAxLCBuMSk7CisgIGlmIChuMSAhPSBuKzEpIC8qIHNwcmludHMgYWRkcyBhbiBleHRyYSAwIGJ1dCBkaWVzIG5vdCByZXR1cm4gaXQgKi8KKyAgICB7CisgICAgICBmYWlsICgiYmFmICVkOiBsZW5ndGggbWlzbWF0Y2ggZm9yIGNhbm9uXG4iLCB0ZXN0bm8pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcmMgPSBnY3J5X3NleHBfY3JlYXRlICgmc2UxLCBwMSwgbiwgMCwgZ2NyeV9mcmVlKTsKKyAgaWYgKHJjKQorICAgIHsKKyAgICAgIGZhaWwgKCJiYWYgJWQ6IGdjcnlfc2V4cF9jcmVhdGUgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgIHRlc3RubywgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNlMSk7CisKKyAgLyogQWdhaW4gYnV0IHdpdGggbWVtb3J5IGNoZWNraW5nLiAqLworICBwMSA9IGdjcnlfeG1hbGxvYyAobjErMik7CisgICpwMSA9ICdceDU1JzsKKyAgcDFbbjErMV0gPSAnXHhhYSc7CisgIG4gPSBnY3J5X3NleHBfc3ByaW50IChzZSwgR0NSWVNFWFBfRk1UX0NBTk9OLCBwMSsxLCBuMSk7CisgIGlmIChuMSAhPSBuKzEpIC8qIHNwcmludHMgYWRkcyBhbiBleHRyYSAwIGJ1dCBkb2VzIG5vdCByZXR1cm4gaXQgKi8KKyAgICB7CisgICAgICBmYWlsICgiYmFmICVkOiBsZW5ndGggbWlzbWF0Y2ggZm9yIGNhbm9uXG4iLCB0ZXN0bm8pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKCpwMSAhPSAnXHg1NScgfHwgcDFbbjErMV0gIT0gJ1x4YWEnKQorICAgIGZhaWwgKCJiYWYgJWQ6IG1lbW9yeSBjb3JydXB0ZWQgKDEpXG4iLCB0ZXN0bm8pOworICByYyA9IGdjcnlfc2V4cF9jcmVhdGUgKCZzZTEsIHAxKzEsIG4sIDAsIE5VTEwpOworICBpZiAocmMpCisgICAgeworICAgICAgZmFpbCAoImJhZiAlZDogZ2NyeV9zZXhwX2NyZWF0ZSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgdGVzdG5vLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAoKnAxICE9ICdceDU1JyB8fCBwMVtuMSsxXSAhPSAnXHhhYScpCisgICAgZmFpbCAoImJhZiAlZDogbWVtb3J5IGNvcnJ1cHRlZCAoMilcbiIsIHRlc3Rubyk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzZTEpOworICBpZiAoKnAxICE9ICdceDU1JyB8fCBwMVtuMSsxXSAhPSAnXHhhYScpCisgICAgZmFpbCAoImJhZiAlZDogbWVtb3J5IGNvcnJ1cHRlZCAoMylcbiIsIHRlc3Rubyk7CisgIGdjcnlfZnJlZSAocDEpOworCisgIC8qIEZJWE1FOiB3ZSBuZWVkIGEgbG90IG1vcmUgdGVzdHMgKi8KKworICBnY3J5X3NleHBfcmVsZWFzZSAoc2UpOworfQorCisKKworc3RhdGljIHZvaWQKK2JhY2tfYW5kX2ZvcnRoICh2b2lkKQoreworICBzdGF0aWMgc3RydWN0IHsgY29uc3QgY2hhciAqYnVmOyBpbnQgbGVuOyB9IHRlc3RzW10gPSB7CisgICAgeyAiKDc6ZzM0OmZnaDE6OjI6KCkpIiwgMCB9LAorICAgIHsgIig3OmczNDpmZ2gxOjoyOigpKSIsIDE4IH0sCisgICAgeworIihwcm90ZWN0ZWQtcHJpdmF0ZS1rZXkgXG4iCisiIChyc2EgXG4iCisiICAobiAjMDBCRThBNTM2MjA0Njg3MTQ5QTQ4RkY5RjE3MTVGRjM1MzBBRDlBODM2RDYyMTAyQkY0MDY1RTVDRjU5NTMyMzZEQjk0RjFERjJGRjRENTI1Q0Q0Q0U3OTY2RERDM0M4Mzk5NjhFOEJBQzI5NDg5MzRERjA0N0NDNjUyODdDRDc5RjZDMjNDOTNFNTVEN0Y5MjMxRTM5NDJCRDQ5NkRFMzgzNDY5OTc3NjM1QTUxQURGNEFGNzQ3REI5NThDQTAyRTk5NDBERkMxREMwRkM3RkM3NTVFN0VCNjYxOEZFRTZEQTU0QjhBMDZFMENCRjlEOTI1NzQ0M0Y5OTkyMjYxNDM1IylcbiIKKyIgIChlICMwMTAwMDEjKVxuIgorIiAgKHByb3RlY3RlZCBvcGVucGdwLXMyazMtc2hhMS1hZXMtY2JjIFxuIgorIiAgIChcbiIKKyIgICAgKHNoYTEgI0MyQTU2NzNCRDM4ODI0MDUjIFwiOTZcIilcbiIKKyIgICAgIzhEMDhBQUY2QTkyMDlFRDY5RDcxRUI3RTY0RDc4NzE1IylcbiIKKyIgICAjRjdCMEI1MzVGOEY4RTIyRjRGM0RBMDMxMjI0MDcwMzAzRjgyRjkyMDdENDI5NTJGMUFDRjIxQTRBQjFDNTAzMDRFQkIyNTUyNzk5MkM3QjI2NUE5RTlGRjcwMjgyNkZCODg3NTlCREQ1NUU0NzU5RTlGQ0E2Qzg3OTUzOEM5RDA0M0E5QzYwQTMyNkNCNjY4MTA5MEJBQTczMTI4OUJEODgwQTdENTc3NEQ5OTk5RjAyNkU1RTc5NjNCRkM4QzBCREM5RjA2MTM5M0NCNzM0QjRGMjU5NzI1QzBBMEEwQjE1QkEzOUMzOTE0NkVGNkExQjNEQzRERjMwQTIyRUJFMDlGRDA1QUU2Q0IwQzhDNjUzMjk1MUE5MjVGMzU0RjRFMjZBNTE5NjRGNUJCQTUwMDgxNjkwQzQyMUM4Mzg1QzQwNzRFOUJBQjkyOTdEMDgxQjg1Nzc1NjYwN0VBRTY1MjQxNTI3NUE3NDFDODlFODE1NTU4QTUwQUM2MzhFREM1RjUwMzAyMTBCNDM5NUUzRTFBNDBGRjM4RENDQ0IzMzNBMTlFQTg4RUZFN0U0RDUxQjU0MTI4QzZERjI3Mzk1NjQ2ODM2Njc5QUMyMUIxQjI1QzFEQTZGMEE3Q0U5RjlCRTA3OEVGQzc5MzRGQTlBRTIwMkNCQjBBQTA2QzIwREZBRjlBNjZGQUI3RTkwNzNGQkU5NkI5QTdGMjVDM0JBNDVFQzNFRUNBNjU3OTZBRUUzMTNCQTE0OERFNTMxNEYzMDM0NUI0NTJCNTBCMTdDNEQ4NDFBN0YyNzM5NzEyNkU4QzEwQkQwQ0UzQjUwQTgyQzA0MjVBQUVFNzc5ODAzMTY3MTQwN0I2ODFGNTI5MTYyNTZGNzhDQUY5MkE0NzdBQzI3QkNCRTI2REFGRDFCQ0UzODZBODUzRTJBMDM2RjgzMTRCQjJFOEU1QkIxRjE5NjQzNDIzMkVGQjAyODgzMzFDMkFCMTZEQkM1NDU3Q0MyOTVFQjk2NkNBQzVDRTczRDVEQTVENTY2RTQ2OUYwRUZBODJGOUExMkI4NjkzRTAjKVxuIgorIiAgKVxuIgorIiApXG4iLCAwIH0sCisgICAgeyBOVUxMLCAwIH0KKyAgfTsKKyAgaW50IGlkeDsKKworICBmb3IgKGlkeD0wOyB0ZXN0c1tpZHhdLmJ1ZjsgaWR4KyspCisgICAgYmFja19hbmRfZm9ydGhfb25lIChpZHgsIHRlc3RzW2lkeF0uYnVmLCB0ZXN0c1tpZHhdLmxlbik7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3NzY2FuICh2b2lkKQoreworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICp0ZXh0OworICAgIGdjcnlfZXJyb3JfdCBleHBlY3RlZF9lcnI7CisgIH0gdmFsdWVzW10gPSB7CisgICAgLyogQnVnIHJlcG9ydGVkIGJ5IE9saXZpZXIgTCdIZXVyZXV4IDIwMDMtMTAtMDcgKi8KKyAgICB7ICIoNzpzaWctdmFsKDM6ZHNhIgorICAgICAgIigxOnIyMDpceDdlXHhmZlx4ZDVceGJhXHhjOVx4YzlceGE0XHg5Ylx4ZDRceDI2XHg4Ylx4NjQiCisgICAgICAiXHgwNlx4N2FceGNmXHg0Mlx4N2JceDZjXHg1MVx4ZmIpIgorICAgICAgIigxOnMyMTpceDAxXHg4Y1x4NmNceDZmXHgzN1x4MWFceDhkXHhmZFx4NWFceGIzXHgyYVx4M2QiCisgICAgICAiXHhjNVx4YWVceDIzXHhlZFx4MzJceDYyXHgzMFx4NjJceDNlKSkpIiwKKyAgICAgIEdQR19FUlJfTk9fRVJST1IgfSwKKyAgICB7ICIoNzpzaWctdmFsKDM6ZHNhIgorICAgICAgIigxOnIyMDpceDdlXHhmZlx4ZDVceGJhXHhjOVx4YzlceGE0XHg5Ylx4ZDRceDI2XHg4Ylx4NjQiCisgICAgICAiXHgwNlx4N2FceGNmXHg0Mlx4N2JceDZjXHg1MVx4ZmIpIgorICAgICAgIigxOnMyMTpceDAxXHg4Y1x4NmNceDZmXHgzN1x4MWFceDhkXHhmZFx4NWFceGIzXHgyYVx4M2QiCisgICAgICAiXHhjNVx4YWVceDIzXHhlZFx4MzJceDYyXHgzMFx4NjJceDNlKSkiLAorICAgICAgR1BHX0VSUl9TRVhQX1VOTUFUQ0hFRF9QQVJFTiB9LAorICAgIHsgIig3OnNpZy12YWwoMzpkc2EiCisgICAgICAiKDE6cjIwOlx4N2VceGZmXHhkNVx4YmFceGM5XHhjOVx4YTRceDliXHhkNFx4MjZceDhiXHg2NCIKKyAgICAgICJceDA2XHg3YVx4Y2ZceDQyXHg3Ylx4NmNceDUxXHhmYikiCisgICAgICAiKDE6czIxOlx4MDFceDhjXHg2Y1x4NmZceDM3XHgxYVx4OGRceGZkXHg1YVx4YjNceDJhXHgzZCIKKyAgICAgICJceGM1XHhhZVx4MjNceGVkXHgzMlx4NjJceDMwXHg2Mlx4M2UpKSkpIiwKKyAgICAgIEdQR19FUlJfU0VYUF9VTk1BVENIRURfUEFSRU4gfSwKKyAgICB7IE5VTEwsIDAgfQorICB9OworICBpbnQgaWR4OworICBnY3J5X2Vycm9yX3QgZXJyOworICBnY3J5X3NleHBfdCBzOworCisgIGluZm8gKCJjaGVja2luZyBnY3J5X3NleHBfc3NjYW5cbiIpOworICBmb3IgKGlkeD0wOyB2YWx1ZXNbaWR4XS50ZXh0OyBpZHgrKykKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X3NleHBfc3NjYW4gKCZzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaWR4XS50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKHZhbHVlc1tpZHhdLnRleHQpKTsKKyAgICAgIGlmIChncGdfZXJyX2NvZGUgKGVycikgIT0gdmFsdWVzW2lkeF0uZXhwZWN0ZWRfZXJyKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX3NzY2FuIHRlc3QgJWQgZmFpbGVkOiAlc1xuIiwgaWR4LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHMpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorY2hlY2tfZXh0cmFjdF9wYXJhbSAodm9pZCkKK3sKKyAgLyogVGhpcyBzYW1wbGUgZGF0YSBpcyBhIHJlYWwga2V5IGJ1dCB3aXRoIHNvbWUgcGFyYW1ldGVycyBvZiB0aGUKKyAgICAgcHVibGljIGtleSBtb2RpZmllZC4gICovCisgIHN0YXRpYyBjaGFyIHNhbXBsZTFbXSA9CisgICAgIihrZXktZGF0YSIKKyAgICAiIChwdWJsaWMta2V5IgorICAgICIgIChlY2MiCisgICAgIiAgIChjdXJ2ZSBFZDI1NTE5KSIKKyAgICAiICAgKHAgIzZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUQjKSIKKyAgICAiICAgKGEgI0VGIykiCisgICAgIiAgIChiICNDMjAzNkNFRTJCNkZGRTczOENDNzQwNzk3Nzc5RTg5ODAwNzAwQTRENDE0MUQ4QUI3NUVCNERDQTEzNTk3OEI2IykiCisgICAgIiAgIChnICMxNCIKKyAgICAiICAgICAgIDIxNjkzNkQzQ0Q2RTUzRkVDMEE0RTIzMUZERDZEQzVDNjkyQ0M3NjA5NTI1QTdCMkM5NTYyRDYwOEYyNUQ1MUEiCisgICAgIiAgICAgICA2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4IykiCisgICAgIiAgIChuICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0REVGOURFQTJGNzlDRDY1ODEyNjMxQTVDRjVEM0VEIykiCisgICAgIiAgIChxICMyMEIzNzgwNjAxNUNBMDZCM0FFQjk0MjNFRTg0QTQxRDdGMzFBQTY1RjQxNDg1NTM3NTUyMDZENjc5RjhCRjYyIykiCisgICAgIikpIgorICAgICIgKHByaXZhdGUta2V5IgorICAgICIgIChlY2MiCisgICAgIiAgIChjdXJ2ZSBFZDI1NTE5KSIKKyAgICAiICAgKHAgIzdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUQjKSIKKyAgICAiICAgKGEgI0ZGIykiCisgICAgIiAgIChiICNEMjAzNkNFRTJCNkZGRTczOENDNzQwNzk3Nzc5RTg5ODAwNzAwQTRENDE0MUQ4QUI3NUVCNERDQTEzNTk3OEI2IykiCisgICAgIiAgIChnICMwNCIKKyAgICAiICAgICAgIDIxNjkzNkQzQ0Q2RTUzRkVDMEE0RTIzMUZERDZEQzVDNjkyQ0M3NjA5NTI1QTdCMkM5NTYyRDYwOEYyNUQ1MUEiCisgICAgIiAgICAgICA2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4IykiCisgICAgIiAgIChuICMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0REVGOURFQTJGNzlDRDY1ODEyNjMxQTVDRjVEM0VEIykiCisgICAgIiAgIChxICMzMEIzNzgwNjAxNUNBMDZCM0FFQjk0MjNFRTg0QTQxRDdGMzFBQTY1RjQxNDg1NTM3NTUyMDZENjc5RjhCRjYyIykiCisgICAgIiAgIChkICM1NkJFQTI4NEEyMkY0NDNBN0FFQThDRUZBMjREQTUwNTVDREYxRDQ5MEM5NEQ4QzU2OEZFMDgwMkM5MTY5Mjc2IykiCisgICAgIikpKSI7CisKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9wW10gPQorICAgICI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVEIjsKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9weFtdID0KKyAgICAiNkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRCI7CisgIHN0YXRpYyBjaGFyIHNhbXBsZTFfYVtdID0gIkZGIjsKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9heFtdID0gIkVGIjsKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9iW10gPQorICAgICJEMjAzNkNFRTJCNkZGRTczOENDNzQwNzk3Nzc5RTg5ODAwNzAwQTRENDE0MUQ4QUI3NUVCNERDQTEzNTk3OEI2IjsKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9ieFtdID0KKyAgICAiQzIwMzZDRUUyQjZGRkU3MzhDQzc0MDc5Nzc3OUU4OTgwMDcwMEE0RDQxNDFEOEFCNzVFQjREQ0ExMzU5NzhCNiI7CisgIHN0YXRpYyBjaGFyIHNhbXBsZTFfZ1tdID0KKyAgICAiMDQiCisgICAgIjIxNjkzNkQzQ0Q2RTUzRkVDMEE0RTIzMUZERDZEQzVDNjkyQ0M3NjA5NTI1QTdCMkM5NTYyRDYwOEYyNUQ1MUEiCisgICAgIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiOworICBzdGF0aWMgY2hhciBzYW1wbGUxX2d4W10gPQorICAgICIxNCIKKyAgICAiMjE2OTM2RDNDRDZFNTNGRUMwQTRFMjMxRkRENkRDNUM2OTJDQzc2MDk1MjVBN0IyQzk1NjJENjA4RjI1RDUxQSIKKyAgICAiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCI7CisgIHN0YXRpYyBjaGFyIHNhbXBsZTFfbltdID0KKyAgICAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNERFRjlERUEyRjc5Q0Q2NTgxMjYzMUE1Q0Y1RDNFRCI7CisgIHN0YXRpYyBjaGFyIHNhbXBsZTFfbnhbXSA9CisgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRERUY5REVBMkY3OUNENjU4MTI2MzFBNUNGNUQzRUQiOworICBzdGF0aWMgY2hhciBzYW1wbGUxX3FbXSA9CisgICAgIjMwQjM3ODA2MDE1Q0EwNkIzQUVCOTQyM0VFODRBNDFEN0YzMUFBNjVGNDE0ODU1Mzc1NTIwNkQ2NzlGOEJGNjIiOworICBzdGF0aWMgY2hhciBzYW1wbGUxX3F4W10gPQorICAgICIyMEIzNzgwNjAxNUNBMDZCM0FFQjk0MjNFRTg0QTQxRDdGMzFBQTY1RjQxNDg1NTM3NTUyMDZENjc5RjhCRjYyIjsKKyAgc3RhdGljIGNoYXIgc2FtcGxlMV9kW10gPQorICAgICI1NkJFQTI4NEEyMkY0NDNBN0FFQThDRUZBMjREQTUwNTVDREYxRDQ5MEM5NEQ4QzU2OEZFMDgwMkM5MTY5Mjc2IjsKKworICBzdGF0aWMgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpzZXhwX3N0cjsKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IGNoYXIgKmxpc3Q7CisgICAgaW50IG5wYXJhbTsKKyAgICBncGdfZXJyX2NvZGVfdCBleHBlY3RlZF9lcnI7CisgICAgY29uc3QgY2hhciAqZXhwX3A7CisgICAgY29uc3QgY2hhciAqZXhwX2E7CisgICAgY29uc3QgY2hhciAqZXhwX2I7CisgICAgY29uc3QgY2hhciAqZXhwX2c7CisgICAgY29uc3QgY2hhciAqZXhwX247CisgICAgY29uc3QgY2hhciAqZXhwX3E7CisgICAgY29uc3QgY2hhciAqZXhwX2Q7CisgIH0gdGVzdHNbXSA9IHsKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICJwYWJnbnFkIiwgNiwKKyAgICAgIEdQR19FUlJfTUlTU0lOR19WQUxVRSwKKyAgICB9LAorICAgIHsKKyAgICAgIHNhbXBsZTEsCisgICAgICBOVUxMLAorICAgICAgInBhYmducSIsIDcsCisgICAgICBHUEdfRVJSX0lOVl9BUkcKKyAgICB9LAorICAgIHsKKyAgICAgIHNhbXBsZTEsCisgICAgICBOVUxMLAorICAgICAgInBhYidnbnEiLCA3LAorICAgICAgR1BHX0VSUl9TWU5UQVgKKyAgICB9LAorICAgIHsKKyAgICAgIHNhbXBsZTEsCisgICAgICBOVUxMLAorICAgICAgInBhYicnZ25xIiwgNywKKyAgICAgIEdQR19FUlJfU1lOVEFYCisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICJwYWJnbnFkIiwgNywKKyAgICAgIDAsCisgICAgICBzYW1wbGUxX3B4LCBzYW1wbGUxX2F4LCBzYW1wbGUxX2J4LCBzYW1wbGUxX2d4LCBzYW1wbGUxX254LAorICAgICAgc2FtcGxlMV9xeCwgc2FtcGxlMV9kCisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICIgIHBhYlx0ZyBucVxuZCAgIiwgNywKKyAgICAgIDAsCisgICAgICBzYW1wbGUxX3B4LCBzYW1wbGUxX2F4LCBzYW1wbGUxX2J4LCBzYW1wbGUxX2d4LCBzYW1wbGUxX254LAorICAgICAgc2FtcGxlMV9xeCwgc2FtcGxlMV9kCisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICJhYmciLCAzLAorICAgICAgMCwKKyAgICAgIHNhbXBsZTFfYXgsIHNhbXBsZTFfYngsIHNhbXBsZTFfZ3gKKyAgICB9LAorICAgIHsKKyAgICAgIHNhbXBsZTEsCisgICAgICBOVUxMLAorICAgICAgImFiJ2cnIiwgMywKKyAgICAgIDAsCisgICAgICBzYW1wbGUxX2F4LCBzYW1wbGUxX2J4LCBzYW1wbGUxX2d4CisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICJ4P2FiZyIsIDQsCisgICAgICAwLAorICAgICAgTlVMTCwgc2FtcGxlMV9heCwgc2FtcGxlMV9ieCwgc2FtcGxlMV9neAorICAgIH0sCisgICAgeworICAgICAgc2FtcGxlMSwKKyAgICAgIE5VTEwsCisgICAgICAicD9hYmciLCA0LAorICAgICAgR1BHX0VSUl9VU0VSXzEsCisgICAgICBOVUxMLCBzYW1wbGUxX2F4LCBzYW1wbGUxX2J4LCBzYW1wbGUxX2d4CisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgTlVMTCwKKyAgICAgICJwYXg/Z25xZCIsIDcsCisgICAgICAwLAorICAgICAgc2FtcGxlMV9weCwgc2FtcGxlMV9heCwgTlVMTCwgc2FtcGxlMV9neCwgc2FtcGxlMV9ueCwKKyAgICAgIHNhbXBsZTFfcXgsIHNhbXBsZTFfZAorICAgIH0sCisgICAgeworICAgICAgc2FtcGxlMSwKKyAgICAgICJwdWJsaWMta2V5IiwKKyAgICAgICJwYWJnbnFkIiwgNywKKyAgICAgIEdQR19FUlJfTk9fT0JKLCAgLyogZCBpcyBub3QgaW4gcHVibGljIGtleS4gICovCisgICAgICBzYW1wbGUxX3B4LCBzYW1wbGUxX2F4LCBzYW1wbGUxX2J4LCBzYW1wbGUxX2d4LCBzYW1wbGUxX254LAorICAgICAgc2FtcGxlMV9xeCwgc2FtcGxlMV9kCisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgInByaXZhdGUta2V5IiwKKyAgICAgICJwYWJnbnFkIiwgNywKKyAgICAgIDAsCisgICAgICBzYW1wbGUxX3AsIHNhbXBsZTFfYSwgc2FtcGxlMV9iLCBzYW1wbGUxX2csIHNhbXBsZTFfbiwKKyAgICAgIHNhbXBsZTFfcSwgc2FtcGxlMV9kCisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgInB1YmxpYy1rZXkhZWNjIiwKKyAgICAgICJwYWJnbnEiLCA2LAorICAgICAgMCwKKyAgICAgIHNhbXBsZTFfcHgsIHNhbXBsZTFfYXgsIHNhbXBsZTFfYngsIHNhbXBsZTFfZ3gsIHNhbXBsZTFfbngsCisgICAgICBzYW1wbGUxX3F4CisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgInB1YmxpYy1rZXkhZWNjIWZvbyIsCisgICAgICAicGFiZ25xIiwgNiwKKyAgICAgIEdQR19FUlJfTk9UX0ZPVU5ECisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgInB1YmxpYy1rZXkhIWVjYyIsCisgICAgICAicGFiZ25xIiwgNiwKKyAgICAgIEdQR19FUlJfTk9UX0ZPVU5ECisgICAgfSwKKyAgICB7CisgICAgICBzYW1wbGUxLAorICAgICAgInByaXZhdGUta2V5IiwKKyAgICAgICJwYS9iZ25xZCIsIDcsCisgICAgICAwLAorICAgICAgc2FtcGxlMV9wLCBzYW1wbGUxX2EsIHNhbXBsZTFfYiwgc2FtcGxlMV9nLCBzYW1wbGUxX24sCisgICAgICBzYW1wbGUxX3EsIHNhbXBsZTFfZAorICAgIH0sCisgICAgeworICAgICAgc2FtcGxlMSwKKyAgICAgICJwcml2YXRlLWtleSIsCisgICAgICAicC1hK2JnbnFkIiwgNywKKyAgICAgIDAsCisgICAgICBzYW1wbGUxX3AsICItMDEiLCBzYW1wbGUxX2IsIHNhbXBsZTFfZywgc2FtcGxlMV9uLAorICAgICAgc2FtcGxlMV9xLCBzYW1wbGUxX2QKKyAgICB9LAorICAgIHtOVUxMfQorICB9OworICBpbnQgaWR4LCBpOworICBjb25zdCBjaGFyICpwYXJhbXN0cjsKKyAgaW50IHBhcmFtaWR4OworICBncGdfZXJyb3JfdCBlcnI7CisgIGdjcnlfc2V4cF90IHN4cDsKKyAgZ2NyeV9tcGlfdCBtcGlzWzddOworICBnY3J5X2J1ZmZlcl90IGlvYXJyYXlbN107CisgIGNoYXIgaW9idWZmZXJbMjAwXTsKKworICBpbmZvICgiY2hlY2tpbmcgZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW1cbiIpOworICBmb3IgKGlkeD0wOyB0ZXN0c1tpZHhdLnNleHBfc3RyOyBpZHgrKykKKyAgICB7CisgICAgICBlcnIgPSBnY3J5X3NleHBfbmV3ICgmc3hwLCB0ZXN0c1tpZHhdLnNleHBfc3RyLCAwLCAxKTsKKyAgICAgIGlmIChlcnIpCisgICAgICAgIGRpZSAoImNvbnZlcnRpbmcgc3RyaW5nIHRvIHNleHAgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgIG1lbXNldCAobXBpcywgMCwgc2l6ZW9mIG1waXMpOworICAgICAgc3dpdGNoICh0ZXN0c1tpZHhdLm5wYXJhbSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waXMrMCwgTlVMTCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoc3hwLCB0ZXN0c1tpZHhdLnBhdGgsIHRlc3RzW2lkeF0ubGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpcyswLCBtcGlzKzEsIE5VTEwpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waXMrMCwgbXBpcysxLCBtcGlzKzIsIE5VTEwpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waXMrMCwgbXBpcysxLCBtcGlzKzIsIG1waXMrMywgTlVMTCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICBlcnIgPSBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoc3hwLCB0ZXN0c1tpZHhdLnBhdGgsIHRlc3RzW2lkeF0ubGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBpcyswLCBtcGlzKzEsIG1waXMrMiwgbXBpcyszLCBtcGlzKzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waXMrMCwgbXBpcysxLCBtcGlzKzIsIG1waXMrMywgbXBpcys0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlzKzUsIE5VTEwpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgdGVzdHNbaWR4XS5wYXRoLCB0ZXN0c1tpZHhdLmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1waXMrMCwgbXBpcysxLCBtcGlzKzIsIG1waXMrMywgbXBpcys0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlzKzUsIG1waXMrNiwgTlVMTCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgZGllICgidGVzdCAlZDogaW50ZXJuYWwgZXJyb3IiLCBpZHgpOworICAgICAgICB9CisKKyAgICAgIGlmICh0ZXN0c1tpZHhdLmV4cGVjdGVkX2VycgorICAgICAgICAgICYmIHRlc3RzW2lkeF0uZXhwZWN0ZWRfZXJyICE9IEdQR19FUlJfVVNFUl8xKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHRlc3RzW2lkeF0uZXhwZWN0ZWRfZXJyICE9IGdwZ19lcnJfY29kZSAoZXJyKSkKKyAgICAgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSB0ZXN0ICVkIGZhaWxlZDogIgorICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGVycm9yICclcycgLSBnb3QgJyVzJyIsIGlkeCwKKyAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAodGVzdHNbaWR4XS5leHBlY3RlZF9lcnIpLGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoZXJyKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImdjcnlfc2V4cF9leHRyYWN0X3BhcmFtIHRlc3QgJWQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgaWR4LCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgICB9CisgICAgICBlbHNlIC8qIE5vIGVycm9yIC0gY2hlY2sgdGhlIGV4dHJhY3RlZCB2YWx1ZXMuICAqLworICAgICAgICB7CisgICAgICAgICAgZm9yIChwYXJhbWlkeD0wOyBwYXJhbWlkeCA8IERJTSAobXBpcyk7IHBhcmFtaWR4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1pZHgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogcGFyYW1zdHIgPSB0ZXN0c1tpZHhdLmV4cF9wOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHBhcmFtc3RyID0gdGVzdHNbaWR4XS5leHBfYTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBwYXJhbXN0ciA9IHRlc3RzW2lkeF0uZXhwX2I7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogcGFyYW1zdHIgPSB0ZXN0c1tpZHhdLmV4cF9nOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHBhcmFtc3RyID0gdGVzdHNbaWR4XS5leHBfbjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1OiBwYXJhbXN0ciA9IHRlc3RzW2lkeF0uZXhwX3E7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNjogcGFyYW1zdHIgPSB0ZXN0c1tpZHhdLmV4cF9kOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgZGllICgidGVzdCAlZDogaW50ZXJuYWwgZXJyb3I6IGJhZCBwYXJhbSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIGlkeCwgcGFyYW1pZHgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAodGVzdHNbaWR4XS5leHBlY3RlZF9lcnIgPT0gR1BHX0VSUl9VU0VSXzEKKyAgICAgICAgICAgICAgICAgICYmIG1waXNbcGFyYW1pZHhdICYmICFwYXJhbXN0ciAmJiBwYXJhbWlkeCA9PSAwKQorICAgICAgICAgICAgICAgIDsgLyogT2theSAgU3BlY2lhbCBjYXNlIGVycm9yIGZvciBwYXJhbSAwLiAgKi8KKyAgICAgICAgICAgICAgZWxzZSBpZiAoIW1waXNbcGFyYW1pZHhdICYmICFwYXJhbXN0cikKKyAgICAgICAgICAgICAgICA7IC8qIE9rYXkuICAqLworICAgICAgICAgICAgICBlbHNlIGlmICghbXBpc1twYXJhbWlkeF0gJiYgcGFyYW1zdHIpCisgICAgICAgICAgICAgICAgZmFpbCAoInRlc3QgJWQ6IHZhbHVlIGZvciBwYXJhbSAlZCBleHBlY3RlZCBidXQgbm90IHJldHVybmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBpZHgsIHBhcmFtaWR4KTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAobXBpc1twYXJhbWlkeF0gJiYgIXBhcmFtc3RyKQorICAgICAgICAgICAgICAgIGZhaWwgKCJ0ZXN0ICVkOiB2YWx1ZSBmb3IgcGFyYW0gJWQgbm90IGV4cGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBpZHgsIHBhcmFtaWR4KTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoY21wX21waWhleCAobXBpc1twYXJhbWlkeF0sIHBhcmFtc3RyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmYWlsICgidGVzdCAlZDogcGFyYW0gJWQgbWlzbWF0Y2giLCBpZHgsIHBhcmFtaWR4KTsKKyAgICAgICAgICAgICAgICAgIGdjcnlfbG9nX2RlYnVnICAgICgiZXhwZWN0ZWQ6ICVzXG4iLCBwYXJhbXN0cik7CisgICAgICAgICAgICAgICAgICBnY3J5X2xvZ19kZWJ1Z21waSAoIiAgICAgZ290IiwgbXBpc1twYXJhbWlkeF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAodGVzdHNbaWR4XS5leHBlY3RlZF9lcnIgJiYgcGFyYW1pZHggPT0gMCkKKyAgICAgICAgICAgICAgICBmYWlsICgidGVzdCAlZDogcGFyYW0gJWQ6IGV4cGVjdGVkIGVycm9yICclcycgLSBnb3QgJ1N1Y2Nlc3MnIiwKKyAgICAgICAgICAgICAgICAgICAgICBpZHgsIHBhcmFtaWR4LCBncGdfc3RyZXJyb3IgKHRlc3RzW2lkeF0uZXhwZWN0ZWRfZXJyKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICBmb3IgKGk9MDsgaSA8IERJTSAobXBpcyk7IGkrKykKKyAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAobXBpc1tpXSk7CisgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc3hwKTsKKyAgICB9CisKKyAgaW5mbyAoImNoZWNraW5nIGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtL2Rlc2NcbiIpOworCisgIG1lbXNldCAoaW9hcnJheSwgMCwgc2l6ZW9mIGlvYXJyYXkpOworCisgIGVyciA9IGdjcnlfc2V4cF9uZXcgKCZzeHAsIHNhbXBsZTEsIDAsIDEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImNvbnZlcnRpbmcgc3RyaW5nIHRvIHNleHAgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgaW9hcnJheVsxXS5zaXplID0gc2l6ZW9mIGlvYnVmZmVyOworICBpb2FycmF5WzFdLmRhdGEgPSBpb2J1ZmZlcjsKKyAgaW9hcnJheVsxXS5vZmYgID0gMDsKKyAgaW9hcnJheVsyXS5zaXplID0gc2l6ZW9mIGlvYnVmZmVyOworICBpb2FycmF5WzJdLmRhdGEgPSBpb2J1ZmZlcjsKKyAgaW9hcnJheVsyXS5vZmYgID0gNTA7CisgIGFzc2VydCAoaW9hcnJheVsyXS5vZmYgPCBzaXplb2YgaW9idWZmZXIpOworICBlcnIgPSBnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSAoc3hwLCAia2V5LWRhdGEhcHJpdmF0ZS1rZXkiLCAiJnBhYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb2FycmF5KzAsIGlvYXJyYXkrMSwgaW9hcnJheSsyLCBOVUxMKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gd2l0aCBkZXNjIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IgKGVycikpOworICBlbHNlCisgICAgeworICAgICAgaWYgKCFpb2FycmF5WzBdLmRhdGEpCisgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS9kZXNjIGZhaWxlZDogbm8gUCIpOworICAgICAgZWxzZSBpZiAoaW9hcnJheVswXS5zaXplICE9IDMyKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IFAgaGFzIHdyb25nIHNpemUiKTsKKyAgICAgIGVsc2UgaWYgKGlvYXJyYXlbMF0ubGVuICE9IDMyKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IFAgaGFzIHdyb25nIGxlbmd0aCIpOworICAgICAgZWxzZSBpZiAoaW9hcnJheVswXS5vZmYpCisgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS9kZXNjIGZhaWxlZDogUCBoYXMgT0ZGIHNldCIpOworICAgICAgZWxzZSBpZiAoY21wX2J1ZmhleCAoaW9hcnJheVswXS5kYXRhLCBpb2FycmF5WzBdLmxlbiwgc2FtcGxlMV9wKSkKKyAgICAgICAgeworICAgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS9kZXNjIGZhaWxlZDogUCBtaXNtYXRjaCIpOworICAgICAgICAgIGdjcnlfbG9nX2RlYnVnICAgICgiZXhwZWN0ZWQ6ICVzXG4iLCBzYW1wbGUxX3ApOworICAgICAgICAgIGdjcnlfbG9nX2RlYnVnaGV4ICgiICAgICBnb3QiLCBpb2FycmF5WzBdLmRhdGEsIGlvYXJyYXlbMF0ubGVuKTsKKyAgICAgICAgfQorCisgICAgICBpZiAoIWlvYXJyYXlbMV0uZGF0YSkKKyAgICAgICAgZmFpbCAoImdjcnlfc2V4cF9leHRyYWN0X3BhcmFtL2Rlc2MgZmFpbGVkOiBBIGJ1ZmZlciBsb3N0Iik7CisgICAgICBlbHNlIGlmIChpb2FycmF5WzFdLnNpemUgIT0gc2l6ZW9mIGlvYnVmZmVyKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEEgc2l6ZSBjaGFuZ2VkIik7CisgICAgICBlbHNlIGlmIChpb2FycmF5WzFdLm9mZiAhPSAwKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEEgb2ZmIGNoYW5nZWQiKTsKKyAgICAgIGVsc2UgaWYgKGlvYXJyYXlbMV0ubGVuICE9IDEpCisgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS9kZXNjIGZhaWxlZDogQSBoYXMgd3JvbmcgbGVuZ3RoIik7CisgICAgICBlbHNlIGlmIChjbXBfYnVmaGV4ICgoY2hhciAqKWlvYXJyYXlbMV0uZGF0YSArIGlvYXJyYXlbMV0ub2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9hcnJheVsxXS5sZW4sIHNhbXBsZTFfYSkpCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEEgbWlzbWF0Y2giKTsKKyAgICAgICAgICBnY3J5X2xvZ19kZWJ1ZyAgICAoImV4cGVjdGVkOiAlc1xuIiwgc2FtcGxlMV9hKTsKKyAgICAgICAgICBnY3J5X2xvZ19kZWJ1Z2hleCAoIiAgICAgZ290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilpb2FycmF5WzFdLmRhdGEgKyBpb2FycmF5WzFdLm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9hcnJheVsxXS5sZW4pOworICAgICAgICB9CisKKyAgICAgIGlmICghaW9hcnJheVsyXS5kYXRhKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEIgYnVmZmVyIGxvc3QiKTsKKyAgICAgIGVsc2UgaWYgKGlvYXJyYXlbMl0uc2l6ZSAhPSBzaXplb2YgaW9idWZmZXIpCisgICAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbS9kZXNjIGZhaWxlZDogQiBzaXplIGNoYW5nZWQiKTsKKyAgICAgIGVsc2UgaWYgKGlvYXJyYXlbMl0ub2ZmICE9IDUwKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEIgb2ZmIGNoYW5nZWQiKTsKKyAgICAgIGVsc2UgaWYgKGlvYXJyYXlbMl0ubGVuICE9IDMyKQorICAgICAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0vZGVzYyBmYWlsZWQ6IEIgaGFzIHdyb25nIGxlbmd0aCIpOworICAgICAgZWxzZSBpZiAoY21wX2J1ZmhleCAoKGNoYXIgKilpb2FycmF5WzJdLmRhdGEgKyBpb2FycmF5WzJdLm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYXJyYXlbMl0ubGVuLCBzYW1wbGUxX2IpKQorICAgICAgICB7CisgICAgICAgICAgZmFpbCAoImdjcnlfc2V4cF9leHRyYWN0X3BhcmFtL2Rlc2MgZmFpbGVkOiBCIG1pc21hdGNoIik7CisgICAgICAgICAgZ2NyeV9sb2dfZGVidWcgICAgKCJleHBlY3RlZDogJXNcbiIsIHNhbXBsZTFfYik7CisgICAgICAgICAgZ2NyeV9sb2dfZGVidWdoZXggKCIgICAgIGdvdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopaW9hcnJheVsyXS5kYXRhICsgaW9hcnJheVsyXS5vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYXJyYXlbMl0ubGVuKTsKKyAgICAgICAgfQorCisgICAgICB4ZnJlZSAoaW9hcnJheVswXS5kYXRhKTsKKyAgICB9CisKKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKHN4cCk7CisKKyAgaW5mbyAoImNoZWNraW5nIGdjcnlfc2V4cF9leHRyYWN0X3BhcmFtIGxvbmcgbmFtZVxuIik7CisKKyAgbWVtc2V0IChpb2FycmF5LCAwLCBzaXplb2YgaW9hcnJheSk7CisgIG1lbXNldCAobXBpcywgMCwgc2l6ZW9mIG1waXMpOworCisgIGVyciA9IGdjcnlfc2V4cF9uZXcgKCZzeHAsIHNhbXBsZTEsIDAsIDEpOworICBpZiAoZXJyKQorICAgIGRpZSAoImNvbnZlcnRpbmcgc3RyaW5nIHRvIHNleHAgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvciAoZXJyKSk7CisKKyAgZXJyID0gZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gKHN4cCwgImtleS1kYXRhIXByaXZhdGUta2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICImJ2N1cnZlJytwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYXJyYXkrMCwgbXBpcyswLCBOVUxMKTsKKyAgaWYgKGVycikKKyAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gbG9uZyBuYW1lIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IgKGVycikpOworCisgIGlmICghaW9hcnJheVswXS5kYXRhKQorICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSBsb25nIG5hbWUgZmFpbGVkOiBubyBjdXJ2ZSIpOworICBlbHNlIGlmIChpb2FycmF5WzBdLnNpemUgIT0gNykKKyAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gbG9uZyBuYW1lIGZhaWxlZDogY3VydmUgaGFzIHdyb25nIHNpemUiKTsKKyAgZWxzZSBpZiAoaW9hcnJheVswXS5sZW4gIT0gNykKKyAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gbG9uZyBuYW1lIGZhaWxlZDogY3VydmUgaGFzIHdyb25nIGxlbmd0aCIpOworICBlbHNlIGlmIChpb2FycmF5WzBdLm9mZikKKyAgICBmYWlsICgiZ2NyeV9zZXhwX2V4dHJhY3RfcGFyYW0gbG9uZyBuYW1lIGZhaWxlZDogY3VydmUgaGFzIE9GRiBzZXQiKTsKKyAgZWxzZSBpZiAoc3RybmNtcCAoaW9hcnJheVswXS5kYXRhLCAiRWQyNTUxOSIsIDcpKQorICAgIHsKKyAgICAgIGZhaWwgKCJnY3J5X3NleHBfZXh0cmFjdF9wYXJhbSBsb25nIG5hbWUgZmFpbGVkOiBjdXJ2ZSBtaXNtYXRjaCIpOworICAgICAgZ2NyeV9sb2dfZGVidWcgKCJleHBlY3RlZDogJXNcbiIsICJFZDI1NTE5Iik7CisgICAgICBnY3J5X2xvZ19kZWJ1ZyAoIiAgICAgZ290OiAlLipzXG4iLAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpaW9hcnJheVswXS5sZW4sIChjaGFyKilpb2FycmF5WzBdLmRhdGEpOworICAgIH0KKworICBpZiAoIW1waXNbMF0pCisgICAgZmFpbCAoImdjcnlfc2V4cF9leHRyYWN0X3BhcmFtIGxvbmcgbmFtZSBmYWlsZWQ6IHAgbm90IHJldHVybmVkIik7CisgIGVsc2UgaWYgKGNtcF9tcGloZXggKG1waXNbMF0sIHNhbXBsZTFfcCkpCisgICAgeworICAgICAgZmFpbCAoImdjcnlfc2V4cF9leHRyYWN0X3BhcmFtIGxvbmcgbmFtZSBmYWlsZWQ6IHAgbWlzbWF0Y2giKTsKKyAgICAgIGdjcnlfbG9nX2RlYnVnICAgICgiZXhwZWN0ZWQ6ICVzXG4iLCBzYW1wbGUxX3ApOworICAgICAgZ2NyeV9sb2dfZGVidWdtcGkgKCIgICAgIGdvdCIsIG1waXNbMF0pOworICAgIH0KKworICBnY3J5X2ZyZWUgKGlvYXJyYXlbMF0uZGF0YSk7CisgIGdjcnlfbXBpX3JlbGVhc2UgKG1waXNbMF0pOworCisgIGdjcnlfc2V4cF9yZWxlYXNlIChzeHApOworCit9CisKKworLyogQSB0ZXN0IGJhc2VkIG9uIGJ1ZyAxNTk0LiAgKi8KK3N0YXRpYyB2b2lkCitidWdfMTU5NCAodm9pZCkKK3sKK3N0YXRpYyBjaGFyIHRoaW5nW10gPQorICAiKHNpZ25hdHVyZSIKKyAgIiAocHVibGljLWtleSIKKyAgIiAgKHJzYSIKKyAgIiAgIChuICMwMEE1M0E2QjNBNTBCRTU3MUY4MDVCRDk4RUNFMUZDRTRDRTI5MUMzRDREM0U5NzE3NDBFMUVFNkQ0NDdGNTI2IgorICAiICAgICAgIDZBQzg5NzNEREM4MkYwQUREMjM0Q0M4MkUwQTBBM0Y0OEI4MUFDQzhCMDM4REI4QUNDM0U3OERDMkVEMjY0MkYiCisgICIgICAgICAgNkJBMzUzRkNBNjBGNDdDMjgwMURFQjQ3N0IzN0ZCOEIyRjU1MDhBQTFDNkQ5MjI3ODBEQjE0MkRFQTE5QjgxMiIKKyAgIiAgICAgICBDNEU2NEYxMTM4QUQzQkQ2MUM1OERCMkQyNTkxQkUwQkYzNkExQUM1ODhBQTQ1NzYzQkNERkY1ODEwNTBBQkE4IgorICAiICAgICAgIENBNDdCRDk3MjNBREQ2QTMwOEFFMjg0NzFFREQyQjE2RDAzQzk0MUQ0RjJCN0UwMTlDNDNBRjg5NzI4ODA2MzMiCisgICIgICAgICAgNTRFOTdCN0UxOUYxNjc3RDg0QjY5QTI2QjE4NEE3N0I3MTlERDcyQzQ4RTBFRTM2MTA3MDQ2Rjc4NjU2NkE5RCIKKyAgIiAgICAgICAxM0JBRDcyNEQ2RDc4RjI0NzAwRkMyMkZDMDAwRTFCMkE4QzFCMDhFRDYyMDA4Mzk1QjA3NjRDRDlCNTVFODBEIgorICAiICAgICAgIEEwQTJCNjFDNjk4REMyN0VBOThFNjhCQjU3NkFDRkMyQjkxQjRENzI4M0U3RDk2MDk0OEQwNDlENkUzQzRDQjEiCisgICIgICAgICAgRjQ4OUI0NjBBMTIwQTRCQjZDMDRBODQzRkQzQTY3NDU0MTM2REU2MUNGNjhBOTI3ODcxRUZGQTkxNDFCRDM3MiIKKyAgIiAgICAgICBBNzQ4NTkzQzcwM0UwMzAxRjAzOUE5RTY3NEM1MDMwMUJGQzM4NUJBQkU1QjE1NDI1MEU3RDU3QjgyREIzMUYxIgorICAiICAgICAgIEUxQUM2OTZGODcwRENEOEZFOERFQzc1NjA4Qjk4OEZDQTNCNDg0RjFGRDc3NTVCRjQ1MkY5OTU5NzI2OUFGMDIiCisgICIgICAgICAgRThBRjg3RDBGOTNEQjQyNzI5MTY1OTE4M0QwNzcyNTRDODM1QkZCNkRERkQ4N0NEMEI1RTA3Mzg2ODJGQ0QzNCIKKyAgIiAgICAgICA5MjNGMjI1NTFGNzM5NDRFNkNCRTNFRDY4NzlCNDQxNDY3NkI1REEwRjMwRUQyMURGQTEyQkQyMjMwQzNDNUQyIgorICAiICAgICAgIEVBMTE2QTNFRkVCNEFFQzIxQzU4RTYzRkFGQTU0OUE2MzE5MEYwMTg1OTQ0NUU5QjgwRjQyN0I4MEZENEM4ODQiCisgICIgICAgICAgMkFENDFGRTc2MEEzRTlERURGQjU2Q0VCRThFQTc4MzgzOEIyQjM5MkNBQ0REQzc2MENDRTIxMkUzODhBRkJDMSIKKyAgIiAgICAgICA5NURDNkQwRUQ4N0U5MDkxRjgyQTgyQ0UzNzI3MzhDOERFOEFCRDc2QUNEMDZBQzhCODBBQTA1OTcxNjJERjU5IgorICAiICAgICAgIDY3IykiCisgICIgICAoZSAjMDEwMDAxIykpKSkiOworICBnY3J5X3NleHBfdCBzaWcsIHB1YmtleSwgbiwgbl92YWw7CisKKyAgaW5mbyAoImNoZWNraW5nIGZpeCBmb3IgYnVnIDE1OTRcbiIpOworCisgIGlmIChnY3J5X3NleHBfbmV3ICgmc2lnLCB0aGluZywgMCwgMSkpCisgICAgZGllICgic2Nhbm5pbmcgZml4ZWQgc3RyaW5nIGZhaWxlZFxuIik7CisgIHB1YmtleSA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChzaWcsICJwdWJsaWMta2V5IiwgMCk7CisgIGdjcnlfc2V4cF9yZWxlYXNlIChzaWcpOworICBpZiAoIXB1YmtleSkKKyAgICB7CisgICAgICBmYWlsICgiJ3B1YmxpYy1rZXknIHRva2VuIG5vdCBmb3VuZCIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbiA9IGdjcnlfc2V4cF9maW5kX3Rva2VuIChwdWJrZXksICJuIiwgMCk7CisgIGlmICghbikKKyAgICB7CisgICAgICBmYWlsICgiJ24nIHRva2VuIG5vdCBmb3VuZCIpOworICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHB1YmtleSk7CisgICAgICByZXR1cm47CisgICAgfQorICBuX3ZhbCA9IGdjcnlfc2V4cF9udGggKG4sIDEpOworICAvKiBCdWcgMTU5NCB3b3VsZCByZXF1aXJlIHRoZSBmb2xsb3dpbmcgdGVzdDoKKyAgICogICBpZiAobl92YWwpCisgICAqICAgICBmYWlsICgiZXh0cmFjdGluZyAxLXRoIG9mICduJyBsaXN0IGRpZCBub3QgZmFpbCIpOworICAgKiBIb3dldmVyLCB3ZSBtZWFud2hpbGUgbW9kaWZpZWQgdGhlIFMtZXhwcmVzc2lvbiBmdW5jdGlvbnMgdG8KKyAgICogYmVoYXZlIGxpa2UgU2NoZW1lIHRvIGFsbG93IHRoZSBhY2Nlc3Mgb2YgYW55IGVsZW1lbnQgb2YgYSBsaXN0LgorICAgKi8KKyAgaWYgKCFuX3ZhbCkKKyAgICBmYWlsICgiZXh0cmFjdGluZyAxLXRoIG9mICduJyBsaXN0IGZhaWxlZCIpOworICAvKmdjcnlfbG9nX2RlYnVnc3hwICgiMS10aCIsIG5fdmFsKTsgPT4gIigjMDBBNS4uLiMpIiAgKi8KKyAgZ2NyeV9zZXhwX3JlbGVhc2UgKG5fdmFsKTsKKyAgbl92YWwgPSBnY3J5X3NleHBfbnRoIChuLCAyKTsKKyAgaWYgKG5fdmFsKQorICAgIGZhaWwgKCJleHRyYWN0aW5nIDItdGggb2YgJ24nIGxpc3QgZGlkIG5vdCBmYWlsIik7CisgIG5fdmFsID0gZ2NyeV9zZXhwX250aCAobiwgMCk7CisgIGlmICghbl92YWwpCisgICAgZmFpbCAoImV4dHJhY3RpbmcgMC10aCBvZiAnbicgbGlzdCBmYWlsZWQiKTsKKyAgLypnY3J5X2xvZ19kZWJ1Z3N4cCAoIjAtdGgiLCBuX3ZhbCk7ID0+ICIobikiICAqLworICBpZiAoZ2NyeV9zZXhwX250aCAobl92YWwsIDEpKQorICAgIGZhaWwgKCJleHRyYWN0aW5nIDEtdGggb2YgY2FyIG9mICduJyBsaXN0IGRpZCBub3QgZmFpbCIpOworICBnY3J5X3NleHBfcmVsZWFzZSAobl92YWwpOworfQorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCAoYXJndlsxXSwgIi0tdmVyYm9zZSIpKQorICAgIHZlcmJvc2UgPSAxOworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTV9XQVJOKTsKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX0lOSVRfU0VDTUVNLCAxNjM4NCwgMCk7CisKKyAgYmFzaWMgKCk7CisgIGNhbm9uX2xlbiAoKTsKKyAgYmFja19hbmRfZm9ydGggKCk7CisgIGNoZWNrX3NzY2FuICgpOworICBjaGVja19leHRyYWN0X3BhcmFtICgpOworICBidWdfMTU5NCAoKTsKKworICByZXR1cm4gZXJyb3JfY291bnQ/IDE6MDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3ZlcnNpb24uYyBiL3Rlc3RzL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzMyYzdjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdmVyc2lvbi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qIHZlcnNpb24uYyAgLSAgVGhpcyB2ZXJzaW9uIHRlc3Qgc2hvdWxkIGJlIHJ1biBmaXJzdC4KKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgTGliZ2NyeXB0LgorCisgICBMaWJnY3J5cHQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBMaWJnY3J5cHQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorICAgVVNBLiAgKi8KKworLyogVGhpcyB0ZXN0IHNob3VsZCBiZSBydW4gZmlyc3QgYmVjYXVzZSBkdWUgdG8gYSBmYWlsaW5nIGNvbmZpZy5saW5rcworICAgc2NyaXB0IG9yIGJhZCBjb25maWd1cmUgcGFyYW1ldGVycyB0aGUganVzdCBidWlsZCBsaWJnY3J5cHQgbWF5CisgICBjcmFzaCBpbiBjYXNlIE1QSSBmdW5jdGlvbiBmb3Igc3BlY2lmaWMgQ1BVIHJldmlzaW9ucyBoYXZlIGJlZW4KKyAgIGVuYWJsZWQuICBSdW5uaW5nIHRoaXMgdGVzdCBmaXJzdCB3aWxsIHByaW50IG91dCBpbmZvcm1hdGlvbiBzbyB0bworICAgbWFrZSBpdCBlYXNpZXIgdG8gZmlndXJlIG91dCB0aGUgcHJvYmxlbS4gKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgIi4uL3NyYy9nY3J5cHQtaW50LmgiCisKKyNkZWZpbmUgUEdNICJ2ZXJzaW9uIgorCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAodm9pZClhcmdjOworICAodm9pZClhcmd2OworCisgIGdjcnlfY29udHJvbCAoR0NSWUNUTF9ESVNBQkxFX1NFQ01FTSwgMCk7CisgIGlmIChzdHJjbXAgKEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKSkKKyAgICB7CisgICAgICBpbnQgb29wcyA9ICFnY3J5X2NoZWNrX3ZlcnNpb24gKEdDUllQVF9WRVJTSU9OKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgUEdNICI6ICVzdmVyc2lvbiBtaXNtYXRjaDsgcGdtPSVzLCBsaWJyYXJ5PSVzXG4iLAorICAgICAgICAgICAgICAgb29wcz8gIiI6Indhcm5pbmc6ICIsIEdDUllQVF9WRVJTSU9OLCBnY3J5X2NoZWNrX3ZlcnNpb24gKE5VTEwpKTsKKyAgICAgIGlmIChvb3BzKQorICAgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZ2NyeV9jb250cm9sIChHQ1JZQ1RMX1BSSU5UX0NPTkZJRywgTlVMTCk7CisKKyAgcmV0dXJuIDA7Cit9Cg==